From 795eb9d443ed2b7689404dc9b9b793170eb49b62 Mon Sep 17 00:00:00 2001 From: JetOU <31071116+TheJetOU@users.noreply.github.com> Date: Mon, 4 Mar 2019 17:59:28 +0300 Subject: [PATCH] Update (#2) * Gen 1: Paralysis should not reapply stat drop because of a failed move (#5123) * Random Battle: Fix Dedenne HP EVs (#5122) * Mafia Theme Update (#5114) * SSB: Fix Compost & Wonder trade with False (#5124) * Support custom rated messages (For use in SPL) * Fix dc6fc432502d5b80fe40ea1deadb04cd403d744a * Scavs: Award points for hosting automatically (#5126) * Mafia: Bugfixes for modifiers, allow searching for terms (#5127) * Better fix for dc6fc432502d5b80fe40ea1deadb04cd403d744a * Battle Factory: Split UU Hydreigon sets * Let's Go OU: Remove suspect notice * PU: Ban Alolan Exeggutor * Fix crash, message for locks (#5125) * Datacenter: Add more ranges (#5129) * Battle Factory: Fix another Hydreigon set * NU: Add Vanilluxe suspect notice * Add ORAS 1v1 and DPP AG * Update Trick Room's short description * Add 2nd and 3rd place point information to trivia modlog * Remove a comment in Trivia code about point values They no longer need to be divisible by 5. The caps are unlikely to change, however the technical limitation of values having to be divisible by 5 no longer exists. * Notify after, not before, deleting a help ticket (#5130) * Update CAP analysis links * Support new avatars This isn't full support, but it's the important part, the part that lets you use past-gen avatars. * Other Metagames of the Month February 2019 (#5131) * Add February RoA Spotlight * Fix 'sage-gen2jp' avatar * Update allowed avatars list * Remove Pokebilities format I'm no longer accepting non-TypeScripted formats. * Fix missing comma * Remove useless param from pokemon.transformInto Introduced in 743c85127c * Stadium: Fix Counter and probably other things * Remove Simple Symphony * Always display Alola formes in /ds (#5133) The Alola formes are so different to regular formes that displaying both the regular form and Alola form is actually a useful information. * Fix some OMotM crashes (#5132) * Deprecate battleban * Fix unnecessary ts-ignore * Pokebilities: Ban Moody (#5136) * Update Me First * Spotlights: Allow non-staff to see current spotlights * Spotlights: allow multiline input * Remove useless check from pokemon.transformInto * Remove useless check * Make it harder to timerstall This commit is aimed at a particular kind of timerstalling: starting a new game while letting the timer run out on your current game, instead of just forfeiting. Now you can't search for more battles if it's your turn to move, or if your opponent takes less than 10 seconds to move (including animation). 1v1 and Metronome Battles asked for exemptions, and they've received them. * Pikachu-Alola is not an Alola form for dex search (#5138) The intent of a recent dexsearch change was to display Alola formes separately as they are very different. However, this also meant showing Pikachu-Alola which is not an Alola form despite having "Alola" as a forme name. * Gen II: Fix species items * Reorder formats * Formats: Fix typo and add more thread links * Update command documentation (#5128) * Move server code to server/ Also move mods/ to data/mods/ This makes PS more monorepo-like. The intent is to further separate the sim and the server code, but without fully committing to splitting the repository itself. We now support `./pokemon-showdown start` in addition to `./pokemon-showdown`. I'm not clear which I want to be the default yet. * Fix formatText support for `&` `>` etc in URLs * Fix StaticServer and loading rooms * Revert url for chatrooms.json updates * Fix Illusion when dragged out * TypeScript globals A few globals: Monitor, LoginServer, etc weren't being correctly TypeScripted. This should change that. * Datacenters: Add a range (#5141) * Fix Hotpatch * Fix the rest of the hotpatches * Add BH suspect test * Rename channel -> room, subchannel -> channel "channel" is just a fancy way of saying "room, but in sockets". Renaming them like this should make it clearer exactly what's going on in sockets. * Fix some LGTM alerts (#5139) * Pokebilities: fix special abilities as well as Gastro Acid (#5140) * STABmons: Ban Thundurus * RU: Ban Stakataka * Help tickets: Remove timerstalling * Battlesearch improve UI * LC: Ban Baton Pass * Check capitalization in Factory sets This might be debatably important, but if it's worth pointing it out in reviews, we might as well automate it. * Use `declare let` instead of `let` in globals.ts * Fix chat plugin file I/O after server/ refactor * Fix modlog search location * Battle Factory: Update RU and LC (#5143) * Fix hotpatch uncaching Chat.uncache functions now consistently take a path relative to repo root, just like FS. Next step will probably be to have FS handle all text-based databases. * Fix crash in /data * Mafia: Support hiding discards, starting from open signups (#5142) * Refactor Emoji regex to use \p syntax (#5146) (Increases minimum Node version requirement) * Increase required version number in README * Suppress LGTM's URL sanitization warning (#5147) This warning is strictly speaking correct, the URL isn't verified properly. However, in this case, this isn't a practical issue, as it's possible to use /forcebattleban command anyways. * Add Recoil as Move Search Parameter (#5149) * Help Tickets: Require users to explain their issue before getting help (#5148) * Fix ticket activation when the creator is staff * STABmons: Fix Thundurus ban (#5150) Only the base forme was supposed to be banned. * Formats: Fix thread links * Movesearch: Account for custom recoil (#5151) * README: Add notes on upgrading Node version This should help Linux users. * Add LGTM alert count badge (#4843) * Allow free multi-laddering in first five turns Searching for multiple games in the first five turns is unlikely to be timerstalling, so we allow it here. * Improve choice error messages This should make choice errors clearer. * Fix crash in /processes * Better support IPv6 in IP checker * Fix minor typos * Fix Help Tickets preview * Add in-battle mod detection to /weak and /coverage (#5144) * Clarify message for multi-laddering * Fix hotpatching battles/formats Hotpatching battles only is no longer possible - it takes the same amount of resources as hotpatching formats but is way more error-prone. * Remove 7 second limit for multi-laddering * Automatically end `BattleStream`s at end of battle PS prefers to keep battle streams open (for `/evalbattle`) until manually ended, but this is confusing some other users. We now automatically end streams unless the `keepAlive` option is set. Fixes #5157 * Fix /hotpatch chat Old chat plugin processes weren't getting correctly ended. * Tweak ghost connection timeout, log their connection status * Fix an edgecase regarding locks getting removed on guests This caused /unnamelock to leave ghost users in the userlist * Fix math for counting battle turns Turns out, requestCount goes up by 2 every turn, not 1. In hindsight, this makes sense because we're giving every player their own request ID. * Random Battle: Update Probopass (#5159) Earth Power is one of its most used moves because of Steel trapping with Magnet Pull, while Pain Split is almost unheard of in standard tiers, and isn't very useful on it unless it has Sturdy (but Magnet Pull is the better move and is rated higher) * Refactor formeChange This fixes an obscure issue where we sent a formechange-to-self on faint in certain obscure situations (apparently including Gen 4 Custap?) In case anyone wants to investigate the details (this commit just patches over some symptoms), the relevant replay is here: https://replay.pokemonshowdown.com/smogtours-gen4ou-425031 * Require object literal method shorthand * Deprecate /redir * NU: Ban Vanilluxe * Remove deprecated commands from /help * Random Battle improvements * Mafia: Fix starting games through the UI (#5156) * Add a PageContext for HTML pages and expand html page functionality (#5160) * Show deprecated status of commands in the command help * This command is not technically deprecated but close enough * Support the random battles damage calculator * Random Battle: Update Rhyperior (#5162) * Random Battle: Update Rhyperior - Although Rock Blast is the preferred move in RU, there are notably fewer Sturdy mons in Random Battle and it struggles more with breaking Substitutes with it. - Aqua Tail gives very minimal meaningful coverage since it mostly is super effective on Pokemon already weak to Ground. Instead, give it Ice Punch since it's much more common on it. * Update formats-data.js * Update formats-data.js * DPP LC: Ban Hypnosis * Battle Factory: Remove unranked Pokemon and fix Snorlax (#5164) * Revamp evolution tables (#4997) * Add LC suspect notice (#5169) https://www.smogon.com/forums/threads/lc-suspect-bush-doesnt-care.3647220/ * Change (PU) to Untiered (#5170) * Prevent using Leppa Berry from triggering Endless Battle (#5158) Previously, using Leppa Berry by itself caused Endless Battle Clause to consider Pokemon to be stale. However, it is reasonable to use Leppa Berry without an intent to cause an endless battle - for instance to increase the PP of a move with a low PP. * Fix transformInto so OMs still work (#5165) * Add tests for Sleep Clause Mod (#5171) * Cafe: Fix path * Fix terrain seed activation timing (#5163) * CAP: Nerf Crucibelle-Mega (#5172) * CAP: Nerf Crucibelle-Mega * oops * Revert "Fix terrain seed activation timing (#5163)" (#5173) This reverts commit 250955ee6818c63c9b61b1566db8ba71327dd5ed. * Fix "Fix terrain seed activation timing (#5163)" Shouldn't of reverted this so quickly. Credit to the code goes to @MacChaeger * Add alias for /hidetext * Add Bottle Caps * Mafia: Fix html room updates (#5174) * Battle Factory: Fix Espeon's ability in RU (#5175) * Fix crash in ghost connection fix * 1v1: Unban Kyurem-Black (#5176) * Don't crash when using /data in with the camomons mod * TCG: Update wiki domain * Allow warning users outside the room in all global warn contexts * Fix Chimecho's egg group * Support custom hideReplay setting * Use editprivacy permission for /ionext This matches the permission for /ioo * Update .gitignore for /server/ * Optimize Dex#getEffect by caching the result. (#5181) As outlined by pkmn.cc/optimize, this change should result in a ~30% increase in Battle performance over repeated runs. Caching the resultant effect is safe provided nothing mutates it. * SSB: Fix Evoblast interaction with substitute; update ranks (#5166) * Learnsets: Fix Gen 4 tutor moves * Refactor Dex#getEffect + Dex#getEffectInner back to one method (#5182) * Add evolution method information (#5179) * Improve data representation of evo method * Simplify evo data representation * Add 1v1 suspect notice (#5186) * Disallow 0 EVs even when EVs weren't sent (#5187) * Refactor remaining tests to use Battle#makeChoices (#5183) * Remove * from most permissions shown in /help (#5168) * Tours: Fix a forfeit being reported as failed even though it succeeded (#5188) * Finally remove deprecated legacy API It's gone! The last remnants of the old choice parsing system is finally gone! * Lower tab size in !code * Chat monitor: make inap pokemon names weeklock instead of namelock * Fix random typos in tests (#5190) * Split `getRelevantEffectsInner` This is mainly a readability refactor. * Refactor getRelevantEffects -> findEventHandlers This fixes getRelevantEffects's massively confusing call structure. Most parameters relating to bubbling up and down have been removed entirely, and traversing the many possible event handler types is now simply done outside the callers. In addition, a lot of variables/functions have been renamed for much better clarity. * Random Battle: Improve Toucannon * Mafia: Resolve chat pages properly (#5192) * Datacenters: Add a range * Refactor findEventHandlers further (#5193) - rename `thing` when we know what it will be. - simplify `resolveLastPriority` - remove `findBattleEventHandlers` param given that its always this - avoid multiple lookups of the same attribute These functions related to finding events are very hot (pkmn.cc/optimize) and microbenchmarks indicate TurboFan is unable to extract out the constants for us. As a side benefit, there's less `// @ts-ignore` required, and future optimizations will use the constants anyway. More extraction can be done in findEventHandlers, but that will be left for a future change where the need becomes more obvious. * Mark Feebas's evolution in Gen4 as requiring high Beauty Trade evolution for Feebas was introduced in Gen5. * Remove 'server/process-manager.js' from tsconfig (#5197) 'process-manager.js' now lives under 'lib/' which is already included. * Add 1v1 Sample Teams (#5195) * Add 1v1 Sample Teams * Add missing comma * Fix some Typescript related TODOs (#5198) * Datasearch: Fix event Pokemon showing in LC searches (#5177) * Document remaining message types in SIM-PROTOCOL (#5196) * Add Imprison switch-out test Apparently we had zero tests to make sure volatile statuses go away after switching out and back in! * Further improve switch tests - Test that Baton Pass passes Ingrain - Test that Baton Pass doesn't pass Imprison - Test that other forms of switching don't pass either * Update TypeScript to version 3.3.3333 Using a tilde in a version number as TypeScript explicitly doesn't follow semver according to Microsoft/TypeScript#14116. * Pokebilities: Ban Porygon-Z (#5200) * Refactor getFormat pattern and ordering for speed (#5194) Even though 31c6a32 added caching to make this method less of a hotspot, there's no reason to use a pattern which is an order of magnitude slower (https://jsperf.com/pokemon-showdown-getEffect). Also, rearranges Format to get checked first as pkmn.cc/optimize finds it to be the most frequently accessed. * Revert "Refactor getFormat pattern and ordering for speed (#5194)" This reverts commit 9ce00664d8065104a2e815f637b90ddee5dfbd7e. It doesn't account for bugs relating to Object.prototype * Refactor getEffect for speed safely (#5201) Rollforward of 7a20245 which retains the `hasOwnProperty` checks. Also changes the method to call `toId` earlier and use the id as the key to the cache to ensure 'Stealth Rock' and 'stealthrock' return the same. NOTE: 'move: Stealth Rock' and 'Stealth Rock' will still continue to return different results. * Translation support (#5167) * Fix field initialization ordering in Pokemon (#5204) * Random Battle improvements * Random Battle: Properly increment tier counters * Gen I: Stop trying to change a fainted Pokemon's stat stages * Make sure Transform copies the correct type * Cleanup tsconfig includes further (#5202) * Remove BH suspect * Fix misplaced string in PT translation * Fix an inaccurate simplified Chinese translation (#5208) Bumba's OS not showing those characters somehow * Revert "Change (PU) to Untiered (#5170)" This reverts commit d40fe510b4884a06763b24b96dfd7ba134910bbf. * Formats: Update ladders * Change Untiered to (DUU) for Doubles (#5178) * Don't add inactive rules as pseudoweathers (#5206) * Fix crash with PMs * Pokebilities: Update Trace, Power of Alchemy, and Receiver (#5203) * Pokebilities: Update Trace, Power of Alchemy, and Receiver Now Trace copies a random ability from a random target, regardless of whether it was originally an innate or not * Send correct target in message to client * Fill in Japanese aliases (#5209) * Fix Gen 1 bug involving last damage and Substitute (#2598) (#5211) * Fix Counter/Mirror Coat to respect redirection (#5212) * Refactor `sim/` to be native Typescript (#5210) * Include data/mods/gen1/pokedex.js in tsconfig (#5213) * Add GSC NU * Translations: fix missing english strings * Add one more volatile switch test * Run onModifyTemplate on rulesets (#5207) * SSB: Arrested -> Pablo; Fix Fake Claim & Sub Interaction (#5205) * Fix build/hotpatch process Hotpatching and running `./pokemon-showdown` now automatically run `./build`. There should now mostly not be any reason you'd want to manually run `./build`, except if you're invoking tests directly. In addition, a lot of redundant code has been removed. I'm not 100% sure this works on Windows, but I'm sure I'll get reports if anything breaks. * Explicitly import readdirSync in dex.ts This avoids ExperimentalWarnings caused by wildcard import of fs. * Update Psych Up and Transform interactions with crit rate effects * Datacenters: Add a range * Make !rules broadcastable This fixes a regression. * Fix fs.promises warning properly The modern `__esModule` fallback isn't compatible with Node, and also entirely unnecessary in practice. The approach of disabling all the fallback code allows us to once again `import * as fs`. * Fix crash in SSB import * Fix Shell Trap behavior with Encore (#5218) * March RoA Spotlight * Make modlog asynchronous This should prevent issues in which the /modlog takes forever because it's waiting for previous /modlog command. * Log long modlog queries * Rephrase LICENSE GitHub couldn't identify the old license as the MIT license, so I'm just copy/pasting the one from the damagecalc which GitHub doesn't have a problem with. * RU: Add Zygarde-10% suspect notice * Datacenters: Add more ranges * Random Battle fixes * Update Other Metagames * Make sure suspect notices only show up in the relevant format * Update VS Code launch configurations - Remove "start server" because it's incompatible with multiprocess PS - Add "parse input log" * Fix Other Metagames of the Month (#5224) * Tiers: Add March quick drops * Added RBY UU (#5225) * Add BW Monotype * Megamons: Ban Mega Rayquaza And remove some unnecessary validator checks. * Change the RoA Spotlight DPP Ubers was wrongly announced. * Pull large avatarTable out into a Set constant. (#5228) * Remove FIXME's in gen1/gen2 random-teams.js (#5227) * Fix /dt showing 'undefined' as Zygarde ability (#5153) * Refactor `lib/` to be native Typescript (#5217) * Random Battle: Improve Kyurem * Fix Megamons and Chimera simplistically (#5229) * Remove LC suspect notice (#5231) * Update RU thread links (#5230) * Refactor sim/dex-data.ts to minimize @ts-ignore (#5214) * Fix crash in Anticipation (#5232) A battle has crashed: TypeError: Cannot read property 'fainted' of null at Battle.onStart (/home/ps/showdown/data/abilities.js:150:16) * Fix Protean and Color Change (#5233) * Fix dependency check in build script (This error wasn't caught because it still works without installing the dependency, but makes the build script far slower because `npx replace` would reinstall `replace` every time it's used.) * Fix validation of Gen 2 Marowak set This was a lot of work for what turned out to be a really simple fix. Gen 2 tradeback validation ended up being slightly too strict. * Use array spread instead of Array.from * LC: Unban Torchic (#5234) https://www.smogon.com/forums/threads/torchic-has-been-freed.3647800/ * Disallow non-standard Pokemon in Gen1/2 randbats (#5235) * Revert buggy Megamons "fix" (#5236) * Fix HP bug in Chimera (#5237) * Use FS when loading Scavengers' data (#5238) This prevents issues with loading old state while hotpatching. * PU: Add Houndoom suspect notice * Chimera: Fix remaining HP bug (#5240) * Fix `build` script on Windows. (#5241) On Windows, `shell` doesn't glob for us and the literal `.sim-dist/*` is passed to `replace` and it doesn't get expanded into the list of paths. * Chimera: Fix ability bugs (#5244) * Add suspect notice to Mix and Mega * Add Type: Null to Random Battle * Megamons: Fix bans --- .editorconfig | 27 + .eslintignore | 4 +- .eslintrc | 30 +- .gitignore | 12 +- .lib-dist/README.md | 3 + .npmrc | 1 + .sim-dist/README.md | 3 + .travis.yml | 7 +- .vscode/launch.json | 33 + .vscode/settings.json | 4 + CONTRIBUTING.md | 38 +- LICENSE | 34 +- PROTOCOL.md | 569 +- Procfile | 2 +- README.md | 38 +- build | 51 + chat-commands.js | 3608 - chat-plugins/info.js | 1986 - chat-plugins/mafia-data.js | 208 - chat-plugins/mafia.js | 942 - chat-plugins/modlog.js | 346 - chat-plugins/othermetas.js | 199 - chat-plugins/poll.js | 329 - chat-plugins/room-events.js | 109 - chat-plugins/thehappyplace.js | 46 - chat-plugins/thestudio.js | 387 - chat-plugins/trivia.js | 1397 - chat.js | 1222 - config/config-example.js | 554 +- config/datacenters.csv | 103 +- config/formats.js | 1829 +- data/abilities.js | 1394 +- data/aliases.js | 1036 +- data/bss-factory-sets.json | 3609 +- data/factory-sets.json | 15993 ++- data/formats-data.js | 5041 +- data/items.js | 1570 +- data/learnsets.js | 82778 ++++++++-------- {mods => data/mods}/gen1/README.md | 4 +- {mods => data/mods}/gen1/formats-data.js | 25 +- data/mods/gen1/moves.js | 1088 + {mods => data/mods}/gen1/pokedex.js | 0 {mods => data/mods}/gen1/random-teams.js | 118 +- {mods => data/mods}/gen1/rulesets.js | 23 +- {mods => data/mods}/gen1/scripts.js | 314 +- {mods => data/mods}/gen1/statuses.js | 135 +- {mods => data/mods}/gen1/typechart.js | 5 +- {mods => data/mods}/gen2/README.md | 0 {mods => data/mods}/gen2/formats-data.js | 393 +- data/mods/gen2/items.js | 158 + {mods => data/mods}/gen2/learnsets.js | 7 +- data/mods/gen2/moves.js | 1037 + {mods => data/mods}/gen2/random-teams.js | 139 +- {mods => data/mods}/gen2/rulesets.js | 52 +- {mods => data/mods}/gen2/scripts.js | 343 +- {mods => data/mods}/gen2/statuses.js | 118 +- {mods => data/mods}/gen2/typechart.js | 5 +- data/mods/gen3/abilities.js | 191 + {mods => data/mods}/gen3/formats-data.js | 416 +- data/mods/gen3/items.js | 371 + data/mods/gen3/moves.js | 974 + data/mods/gen3/random-teams.js | 718 + data/mods/gen3/rulesets.js | 15 + data/mods/gen3/scripts.js | 239 + {mods => data/mods}/gen3/statuses.js | 18 +- data/mods/gen4/abilities.js | 415 + {mods => data/mods}/gen4/formats-data.js | 216 +- data/mods/gen4/items.js | 290 + data/mods/gen4/moves.js | 1765 + {mods => data/mods}/gen4/pokedex.js | 10 +- {mods => data/mods}/gen4/random-teams.js | 369 +- {mods => data/mods}/gen4/rulesets.js | 14 +- data/mods/gen4/scripts.js | 307 + {mods => data/mods}/gen4/statuses.js | 22 +- {mods => data/mods}/gen5/abilities.js | 38 +- {mods => data/mods}/gen5/formats-data.js | 459 +- {mods => data/mods}/gen5/items.js | 5 +- data/mods/gen5/moves.js | 1213 + {mods => data/mods}/gen5/pokedex.js | 5 +- data/mods/gen5/random-teams.js | 797 + data/mods/gen5/scripts.js | 9 + {mods => data/mods}/gen5/statuses.js | 20 +- {mods => data/mods}/gen5/typechart.js | 5 +- {mods => data/mods}/gen6/abilities.js | 83 +- data/mods/gen6/factory-sets.json | 1 + {mods => data/mods}/gen6/formats-data.js | 849 +- {mods => data/mods}/gen6/items.js | 79 +- data/mods/gen6/moves.js | 507 + {mods => data/mods}/gen6/pokedex.js | 9 +- {mods => data/mods}/gen6/random-teams.js | 832 +- data/mods/gen6/scripts.js | 9 + {mods => data/mods}/gen6/statuses.js | 21 +- {mods => data/mods}/gen6/typechart.js | 5 +- {mods => data/mods}/gennext/README.md | 14 +- data/mods/gennext/abilities.js | 691 + {mods => data/mods}/gennext/formats-data.js | 5 +- {mods => data/mods}/gennext/items.js | 122 +- {mods => data/mods}/gennext/moves.js | 421 +- {mods => data/mods}/gennext/pokedex.js | 5 +- {mods => data/mods}/gennext/scripts.js | 16 +- {mods => data/mods}/gennext/statuses.js | 152 +- data/mods/letsgo/formats-data.js | 1053 + data/mods/letsgo/learnsets.js | 4985 + data/mods/letsgo/moves.js | 124 + data/mods/letsgo/pokedex.js | 180 + data/mods/letsgo/random-teams.js | 293 + data/mods/letsgo/rulesets.js | 178 + data/mods/letsgo/scripts.js | 68 + data/mods/megamons/scripts.js | 30 + data/mods/mixandmega/items.js | 63 + {mods => data/mods}/mixandmega/scripts.js | 73 +- data/mods/pic/moves.js | 67 + data/mods/pic/scripts.js | 63 + data/mods/ssb/abilities.js | 604 + data/mods/ssb/items.js | 116 + data/mods/ssb/moves.js | 4152 + data/mods/ssb/pokedex.js | 96 + data/mods/ssb/random-teams.js | 713 + data/mods/ssb/scripts.js | 319 + data/mods/ssb/statuses.js | 1501 + data/mods/stadium/README.md | 15 + {mods => data/mods}/stadium/moves.js | 106 +- {mods => data/mods}/stadium/rulesets.js | 14 +- {mods => data/mods}/stadium/scripts.js | 210 +- {mods => data/mods}/stadium/statuses.js | 72 +- data/mods/vgc17/formats-data.js | 72 + data/mods/vgc17/items.js | 32 + data/mods/vgc17/learnsets.js | 60479 +++++++++++ data/mods/vgc17/rulesets.js | 21 + data/moves.js | 4749 +- data/pokedex.js | 1428 +- data/random-teams.js | 2460 +- data/rulesets.js | 518 +- data/scripts.js | 495 +- data/statuses.js | 384 +- data/typechart.js | 65 +- dev-tools/eslint/validate-conditionals.js | 89 - dev-tools/global.d.ts | 86 + dev-tools/globals.js | 11 - dev-tools/globals.ts | 986 +- dev-tools/node.d.ts | 11 + dev-tools/users-utils.js | 92 +- fs.js | 282 - ladders-matchmaker.js | 218 - ladders-remote.js | 138 - ladders.js | 338 - lib/STREAMS.md | 132 + crashlogger.js => lib/crashlogger.ts | 30 +- lib/dashycode.ts | 316 + lib/fs.ts | 431 + lib/process-manager.ts | 421 + lib/repl.ts | 119 + lib/streams.ts | 666 + loginserver.js | 240 - logs/repl/README.md | 4 +- mods/gen1/abilities.js | 20 - mods/gen1/moves.js | 879 - mods/gen2/abilities.js | 16 - mods/gen2/items.js | 106 - mods/gen2/moves.js | 722 - mods/gen3/abilities.js | 204 - mods/gen3/items.js | 264 - mods/gen3/moves.js | 581 - mods/gen3/random-teams.js | 600 - mods/gen3/scripts.js | 25 - mods/gen4/abilities.js | 306 - mods/gen4/items.js | 264 - mods/gen4/moves.js | 1313 - mods/gen4/scripts.js | 95 - mods/gen5/moves.js | 1025 - mods/gen5/random-teams.js | 730 - mods/gen5/scripts.js | 6 - mods/gen6/moves.js | 269 - mods/gen6/scripts.js | 5 - mods/gennext/abilities.js | 608 - mods/mixandmega/formats-data.js | 48 - mods/mixandmega/items.js | 68 - mods/stadium/README.md | 14 - package-lock.json | 1468 - package.json | 46 +- pokemon-showdown | 182 +- process-manager.js | 212 - repl.js | 111 - room-battle.js | 817 - rooms.js | 1487 - server/chat-commands.js | 4335 + server/chat-formatter.js | 468 + .../chat-plugins}/COMMANDS.md | 25 +- server/chat-plugins/calculator.js | 134 + server/chat-plugins/chat-monitor.js | 447 + server/chat-plugins/daily-spotlight.js | 184 + .../chat-plugins}/datasearch.js | 608 +- .../chat-plugins}/hangman.js | 181 +- server/chat-plugins/helptickets.js | 1130 + server/chat-plugins/info.js | 2387 + .../chat-plugins}/jeopardy.js | 106 +- server/chat-plugins/mafia-data.js | 3065 + server/chat-plugins/mafia.js | 3168 + server/chat-plugins/modlog.js | 626 + server/chat-plugins/othermetas.js | 344 + server/chat-plugins/poll.js | 382 + server/chat-plugins/room-events.js | 164 + .../chat-plugins}/room-faqs.js | 84 +- .../chat-plugins}/roomsettings.js | 300 +- .../chat-plugins}/scavenger-games.js | 117 +- .../chat-plugins}/scavengers.js | 654 +- .../chat-plugins}/tcgtabletop.js | 65 +- server/chat-plugins/thecafe.js | 242 + server/chat-plugins/thing-of-the-day.js | 684 + server/chat-plugins/trivia.js | 1952 + {chat-plugins => server/chat-plugins}/uno.js | 586 +- {chat-plugins => server/chat-plugins}/wifi.js | 418 +- server/chat.js | 1942 + dnsbl.js => server/dnsbl.js | 49 +- app.js => server/index.js | 60 +- server/ladders-local.js | 347 + server/ladders-remote.js | 157 + server/ladders.js | 686 + server/loginserver.js | 237 + monitor.js => server/monitor.js | 72 +- punishments.js => server/punishments.js | 631 +- server/room-battle.js | 1079 + room-game.js => server/room-game.js | 143 +- server/roomlogs.js | 310 + server/rooms.js | 1715 + server/sockets.js | 718 + {static => server/static}/404.html | 0 {static => server/static}/index.html | 0 server/team-validator-async.js | 117 + .../tournaments}/generator-elimination.js | 80 +- .../tournaments}/generator-round-robin.js | 121 +- {tournaments => server/tournaments}/index.js | 718 +- ...-goog.structs.TreeNode-c8e0b2dcd892.min.js | 0 users.js => server/users.js | 1038 +- server/verifier.js | 66 + sim/README.md | 139 + sim/SIM-PROTOCOL.md | 872 + sim/battle-stream-example.ts | 107 + sim/battle-stream.ts | 303 + sim/battle.js | 2747 - sim/battle.ts | 3235 + sim/dex-data.js | 623 - sim/dex-data.ts | 1031 + sim/{dex.js => dex.ts} | 989 +- sim/index.js | 29 - sim/index.ts | 29 + sim/{pokemon.js => pokemon.ts} | 1033 +- sim/prng.js | 201 - sim/prng.ts | 229 + sim/{side.js => side.ts} | 394 +- sim/team-validator.ts | 1292 + simulator-doc.txt | 2 +- sockets.js | 524 - team-validator.js | 1238 - test/application/chat.js | 92 + test/application/ladders-matchmaker.js | 92 +- test/application/process-manager.js | 61 - test/application/rooms.js | 45 +- test/application/simulator.js | 12 +- test/application/sockets.js | 62 +- test/application/team-validator.js | 415 +- test/application/users.js | 1 + test/chat-plugins/trivia.js | 10 +- test/common.js | 32 +- .../dev-tools/eslint/validate-conditionals.js | 29 - test/main.js | 25 +- test/mocha.opts | 3 +- test/simulator/abilities/angerpoint.js | 12 +- test/simulator/abilities/arenatrap.js | 34 +- test/simulator/abilities/battlearmor.js | 6 +- test/simulator/abilities/clearbody.js | 16 +- test/simulator/abilities/cloudnine.js | 20 +- test/simulator/abilities/colorchange.js | 4 +- test/simulator/abilities/comatose.js | 24 +- test/simulator/abilities/contrary.js | 8 +- test/simulator/abilities/damp.js | 6 +- test/simulator/abilities/dancer.js | 104 + test/simulator/abilities/deltastream.js | 24 +- test/simulator/abilities/desolateland.js | 34 +- test/simulator/abilities/disguise.js | 92 + test/simulator/abilities/dryskin.js | 18 +- test/simulator/abilities/emergencyexit.js | 22 +- test/simulator/abilities/flashfire.js | 14 +- test/simulator/abilities/flowergift.js | 7 +- test/simulator/abilities/immunity.js | 9 +- test/simulator/abilities/intimidate.js | 19 +- test/simulator/abilities/klutz.js | 14 +- test/simulator/abilities/levitate.js | 22 +- test/simulator/abilities/lightningrod.js | 36 +- test/simulator/abilities/magicbounce.js | 21 +- test/simulator/abilities/magicguard.js | 16 +- test/simulator/abilities/magnetpull.js | 20 +- test/simulator/abilities/multiscale.js | 8 +- test/simulator/abilities/mummy.js | 28 + test/simulator/abilities/normalize.js | 20 +- test/simulator/abilities/parentalbond.js | 68 + test/simulator/abilities/pickup.js | 28 +- test/simulator/abilities/prankster.js | 45 +- test/simulator/abilities/pressure.js | 36 +- test/simulator/abilities/primordialsea.js | 34 +- test/simulator/abilities/rockhead.js | 17 +- test/simulator/abilities/shadowtag.js | 13 +- test/simulator/abilities/sheerforce.js | 11 +- test/simulator/abilities/shellarmor.js | 4 +- test/simulator/abilities/shielddust.js | 21 +- test/simulator/abilities/simple.js | 10 +- test/simulator/abilities/stickyhold.js | 12 +- test/simulator/abilities/stormdrain.js | 17 +- test/simulator/abilities/sturdy.js | 12 +- test/simulator/abilities/suctioncups.js | 6 +- test/simulator/abilities/symbiosis.js | 32 + test/simulator/abilities/thickfat.js | 16 +- test/simulator/abilities/truant.js | 79 + test/simulator/abilities/unaware.js | 28 +- test/simulator/abilities/unburden.js | 17 +- test/simulator/abilities/wonderguard.js | 19 +- test/simulator/items/assaultvest.js | 6 +- test/simulator/items/drives.js | 18 +- test/simulator/items/flameorb.js | 6 +- test/simulator/items/focussash.js | 8 +- test/simulator/items/ironball.js | 20 +- test/simulator/items/lansatberry.js | 6 +- test/simulator/items/leftovers.js | 6 +- test/simulator/items/leppaberry.js | 27 + test/simulator/items/mail.js | 18 +- test/simulator/items/plates.js | 18 +- test/simulator/items/protectivepads.js | 66 + test/simulator/items/ringtarget.js | 12 +- test/simulator/items/seeds.js | 24 +- test/simulator/items/shedshell.js | 13 +- test/simulator/items/sitrusberry.js | 54 + test/simulator/items/weaknesspolicy.js | 4 +- test/simulator/misc/arceus.js | 40 + test/simulator/misc/choice-parser.js | 130 +- test/simulator/misc/critical.js | 21 + test/simulator/misc/decisions.js | 362 +- test/simulator/misc/dex.js | 19 +- test/simulator/misc/endlessbattleclause.js | 101 + test/simulator/misc/eventemitter.js | 8 +- test/simulator/misc/faint-order.js | 58 + test/simulator/misc/fusion-combo.js | 48 + test/simulator/misc/inversebattle.js | 27 +- test/simulator/misc/megaevolution.js | 20 + test/simulator/misc/mixandmega.js | 22 + test/simulator/misc/prng.js | 142 + test/simulator/misc/random-teams.js | 49 + test/simulator/misc/silvally.js | 40 + test/simulator/misc/sleepclausemod.js | 32 + test/simulator/misc/statuses.js | 126 +- test/simulator/misc/statusmoves.js | 29 +- test/simulator/misc/trapmoves.js | 119 +- test/simulator/misc/turn-order.js | 35 +- test/simulator/misc/typechange.js | 14 +- test/simulator/misc/weather.js | 6 +- test/simulator/misc/weight.js | 16 +- test/simulator/moves/belch.js | 42 +- test/simulator/moves/bellydrum.js | 10 +- test/simulator/moves/boomburst.js | 5 +- test/simulator/moves/bugbuzz.js | 10 +- test/simulator/moves/chatter.js | 10 +- test/simulator/moves/clangoroussoulblaze.js | 27 + test/simulator/moves/clearsmog.js | 17 +- test/simulator/moves/counter.js | 140 + test/simulator/moves/curse.js | 30 +- test/simulator/moves/destinybond.js | 24 +- test/simulator/moves/disable.js | 9 +- test/simulator/moves/echoedvoice.js | 10 +- test/simulator/moves/electricterrain.js | 37 +- test/simulator/moves/embargo.js | 20 +- test/simulator/moves/encore.js | 123 + test/simulator/moves/fakeout.js | 56 + test/simulator/moves/focuspunch.js | 43 +- test/simulator/moves/followme.js | 5 +- test/simulator/moves/foresight.js | 18 +- test/simulator/moves/futuresight.js | 39 + test/simulator/moves/glare.js | 6 +- test/simulator/moves/grassyterrain.js | 27 +- test/simulator/moves/gravity.js | 10 +- test/simulator/moves/haze.js | 27 +- test/simulator/moves/healblock.js | 92 +- test/simulator/moves/healingwish.js | 68 + test/simulator/moves/hypervoice.js | 10 +- test/simulator/moves/imprison.js | 44 +- test/simulator/moves/ingrain.js | 36 +- test/simulator/moves/judgment.js | 4 +- test/simulator/moves/kingsshield.js | 6 +- test/simulator/moves/knockoff.js | 12 +- test/simulator/moves/magicroom.js | 21 +- test/simulator/moves/miracleeye.js | 43 +- test/simulator/moves/mistyterrain.js | 37 +- test/simulator/moves/partingshot.js | 44 + test/simulator/moves/photongeyser.js | 63 + test/simulator/moves/pursuit.js | 64 +- test/simulator/moves/quash.js | 10 +- test/simulator/moves/ragepowder.js | 8 +- test/simulator/moves/reflecttype.js | 39 + test/simulator/moves/relicsong.js | 16 +- test/simulator/moves/rollout.js | 25 +- test/simulator/moves/roost.js | 37 +- test/simulator/moves/round.js | 10 +- test/simulator/moves/sheercold.js | 4 +- test/simulator/moves/shelltrap.js | 35 + test/simulator/moves/skydrop.js | 108 +- test/simulator/moves/smellingsalts.js | 5 +- test/simulator/moves/snarl.js | 14 +- test/simulator/moves/spectralthief.js | 28 +- test/simulator/moves/stealthrock.js | 12 +- test/simulator/moves/stompingtantrum.js | 90 + test/simulator/moves/substitute.js | 47 +- test/simulator/moves/taunt.js | 8 +- test/simulator/moves/thief.js | 6 +- test/simulator/moves/thousandarrows.js | 41 +- test/simulator/moves/thunderwave.js | 4 +- test/simulator/moves/transform.js | 73 +- test/simulator/moves/trick.js | 18 +- test/simulator/moves/trickroom.js | 35 +- test/simulator/moves/trumpcard.js | 54 + test/simulator/moves/uproar.js | 10 +- test/simulator/moves/weatherball.js | 38 + test/simulator/moves/zmove.js | 4 +- translations/dutch.json | 25 + translations/english.json | 25 + translations/french.json | 25 + translations/german.json | 25 + translations/hindi.json | 26 + translations/italian.json | 25 + translations/japanese.json | 25 + translations/portuguese.json | 25 + translations/simplifiedchinese.json | 25 + translations/spanish.json | 25 + translations/traditionalchinese.json | 25 + translations/turkish.json | 10 + tsconfig.json | 39 +- tslint.json | 59 + verifier.js | 103 - 435 files changed, 214504 insertions(+), 85169 deletions(-) create mode 100644 .editorconfig create mode 100644 .lib-dist/README.md create mode 100644 .npmrc create mode 100644 .sim-dist/README.md create mode 100644 .vscode/launch.json create mode 100644 .vscode/settings.json create mode 100755 build delete mode 100644 chat-commands.js delete mode 100644 chat-plugins/info.js delete mode 100644 chat-plugins/mafia-data.js delete mode 100644 chat-plugins/mafia.js delete mode 100644 chat-plugins/modlog.js delete mode 100644 chat-plugins/othermetas.js delete mode 100644 chat-plugins/poll.js delete mode 100644 chat-plugins/room-events.js delete mode 100644 chat-plugins/thehappyplace.js delete mode 100644 chat-plugins/thestudio.js delete mode 100644 chat-plugins/trivia.js delete mode 100644 chat.js rename {mods => data/mods}/gen1/README.md (94%) rename {mods => data/mods}/gen1/formats-data.js (96%) create mode 100644 data/mods/gen1/moves.js rename {mods => data/mods}/gen1/pokedex.js (100%) rename {mods => data/mods}/gen1/random-teams.js (78%) rename {mods => data/mods}/gen1/rulesets.js (80%) rename {mods => data/mods}/gen1/scripts.js (77%) rename {mods => data/mods}/gen1/statuses.js (74%) rename {mods => data/mods}/gen1/typechart.js (94%) rename {mods => data/mods}/gen2/README.md (100%) rename {mods => data/mods}/gen2/formats-data.js (87%) create mode 100644 data/mods/gen2/items.js rename {mods => data/mods}/gen2/learnsets.js (99%) create mode 100644 data/mods/gen2/moves.js rename {mods => data/mods}/gen2/random-teams.js (67%) rename {mods => data/mods}/gen2/rulesets.js (55%) rename {mods => data/mods}/gen2/scripts.js (62%) rename {mods => data/mods}/gen2/statuses.js (62%) rename {mods => data/mods}/gen2/typechart.js (89%) create mode 100644 data/mods/gen3/abilities.js rename {mods => data/mods}/gen3/formats-data.js (69%) create mode 100644 data/mods/gen3/items.js create mode 100644 data/mods/gen3/moves.js create mode 100644 data/mods/gen3/random-teams.js create mode 100644 data/mods/gen3/rulesets.js create mode 100644 data/mods/gen3/scripts.js rename {mods => data/mods}/gen3/statuses.js (77%) create mode 100644 data/mods/gen4/abilities.js rename {mods => data/mods}/gen4/formats-data.js (84%) create mode 100644 data/mods/gen4/items.js create mode 100644 data/mods/gen4/moves.js rename {mods => data/mods}/gen4/pokedex.js (63%) rename {mods => data/mods}/gen4/random-teams.js (70%) rename {mods => data/mods}/gen4/rulesets.js (53%) create mode 100644 data/mods/gen4/scripts.js rename {mods => data/mods}/gen4/statuses.js (73%) rename {mods => data/mods}/gen5/abilities.js (56%) rename {mods => data/mods}/gen5/formats-data.js (90%) rename {mods => data/mods}/gen5/items.js (98%) create mode 100644 data/mods/gen5/moves.js rename {mods => data/mods}/gen5/pokedex.js (98%) create mode 100644 data/mods/gen5/random-teams.js create mode 100644 data/mods/gen5/scripts.js rename {mods => data/mods}/gen5/statuses.js (80%) rename {mods => data/mods}/gen5/typechart.js (91%) rename {mods => data/mods}/gen6/abilities.js (62%) create mode 100644 data/mods/gen6/factory-sets.json rename {mods => data/mods}/gen6/formats-data.js (89%) rename {mods => data/mods}/gen6/items.js (78%) create mode 100644 data/mods/gen6/moves.js rename {mods => data/mods}/gen6/pokedex.js (96%) rename {mods => data/mods}/gen6/random-teams.js (52%) create mode 100644 data/mods/gen6/scripts.js rename {mods => data/mods}/gen6/statuses.js (55%) rename {mods => data/mods}/gen6/typechart.js (75%) rename {mods => data/mods}/gennext/README.md (97%) create mode 100644 data/mods/gennext/abilities.js rename {mods => data/mods}/gennext/formats-data.js (85%) rename {mods => data/mods}/gennext/items.js (54%) rename {mods => data/mods}/gennext/moves.js (58%) rename {mods => data/mods}/gennext/pokedex.js (71%) rename {mods => data/mods}/gennext/scripts.js (92%) rename {mods => data/mods}/gennext/statuses.js (77%) create mode 100644 data/mods/letsgo/formats-data.js create mode 100644 data/mods/letsgo/learnsets.js create mode 100644 data/mods/letsgo/moves.js create mode 100644 data/mods/letsgo/pokedex.js create mode 100644 data/mods/letsgo/random-teams.js create mode 100644 data/mods/letsgo/rulesets.js create mode 100644 data/mods/letsgo/scripts.js create mode 100644 data/mods/megamons/scripts.js create mode 100644 data/mods/mixandmega/items.js rename {mods => data/mods}/mixandmega/scripts.js (58%) create mode 100644 data/mods/pic/moves.js create mode 100644 data/mods/pic/scripts.js create mode 100644 data/mods/ssb/abilities.js create mode 100644 data/mods/ssb/items.js create mode 100644 data/mods/ssb/moves.js create mode 100644 data/mods/ssb/pokedex.js create mode 100644 data/mods/ssb/random-teams.js create mode 100644 data/mods/ssb/scripts.js create mode 100644 data/mods/ssb/statuses.js create mode 100644 data/mods/stadium/README.md rename {mods => data/mods}/stadium/moves.js (70%) rename {mods => data/mods}/stadium/rulesets.js (63%) rename {mods => data/mods}/stadium/scripts.js (78%) rename {mods => data/mods}/stadium/statuses.js (71%) create mode 100644 data/mods/vgc17/formats-data.js create mode 100644 data/mods/vgc17/items.js create mode 100644 data/mods/vgc17/learnsets.js create mode 100644 data/mods/vgc17/rulesets.js delete mode 100644 dev-tools/eslint/validate-conditionals.js create mode 100644 dev-tools/global.d.ts delete mode 100644 dev-tools/globals.js create mode 100644 dev-tools/node.d.ts delete mode 100644 fs.js delete mode 100644 ladders-matchmaker.js delete mode 100644 ladders-remote.js delete mode 100644 ladders.js create mode 100644 lib/STREAMS.md rename crashlogger.js => lib/crashlogger.ts (77%) create mode 100644 lib/dashycode.ts create mode 100644 lib/fs.ts create mode 100644 lib/process-manager.ts create mode 100644 lib/repl.ts create mode 100644 lib/streams.ts delete mode 100644 loginserver.js delete mode 100644 mods/gen1/abilities.js delete mode 100644 mods/gen1/moves.js delete mode 100644 mods/gen2/abilities.js delete mode 100644 mods/gen2/items.js delete mode 100644 mods/gen2/moves.js delete mode 100644 mods/gen3/abilities.js delete mode 100644 mods/gen3/items.js delete mode 100644 mods/gen3/moves.js delete mode 100644 mods/gen3/random-teams.js delete mode 100644 mods/gen3/scripts.js delete mode 100644 mods/gen4/abilities.js delete mode 100644 mods/gen4/items.js delete mode 100644 mods/gen4/moves.js delete mode 100644 mods/gen4/scripts.js delete mode 100644 mods/gen5/moves.js delete mode 100644 mods/gen5/random-teams.js delete mode 100644 mods/gen5/scripts.js delete mode 100644 mods/gen6/moves.js delete mode 100644 mods/gen6/scripts.js delete mode 100644 mods/gennext/abilities.js delete mode 100644 mods/mixandmega/formats-data.js delete mode 100644 mods/mixandmega/items.js delete mode 100644 mods/stadium/README.md delete mode 100644 package-lock.json delete mode 100644 process-manager.js delete mode 100644 repl.js delete mode 100644 room-battle.js delete mode 100644 rooms.js create mode 100644 server/chat-commands.js create mode 100644 server/chat-formatter.js rename {chat-plugins => server/chat-plugins}/COMMANDS.md (93%) create mode 100644 server/chat-plugins/calculator.js create mode 100644 server/chat-plugins/chat-monitor.js create mode 100644 server/chat-plugins/daily-spotlight.js rename {chat-plugins => server/chat-plugins}/datasearch.js (70%) rename {chat-plugins => server/chat-plugins}/hangman.js (51%) create mode 100644 server/chat-plugins/helptickets.js create mode 100644 server/chat-plugins/info.js rename {chat-plugins => server/chat-plugins}/jeopardy.js (89%) create mode 100644 server/chat-plugins/mafia-data.js create mode 100644 server/chat-plugins/mafia.js create mode 100644 server/chat-plugins/modlog.js create mode 100644 server/chat-plugins/othermetas.js create mode 100644 server/chat-plugins/poll.js create mode 100644 server/chat-plugins/room-events.js rename {chat-plugins => server/chat-plugins}/room-faqs.js (54%) rename {chat-plugins => server/chat-plugins}/roomsettings.js (59%) rename {chat-plugins => server/chat-plugins}/scavenger-games.js (80%) rename {chat-plugins => server/chat-plugins}/scavengers.js (58%) rename {chat-plugins => server/chat-plugins}/tcgtabletop.js (58%) create mode 100644 server/chat-plugins/thecafe.js create mode 100644 server/chat-plugins/thing-of-the-day.js create mode 100644 server/chat-plugins/trivia.js rename {chat-plugins => server/chat-plugins}/uno.js (51%) rename {chat-plugins => server/chat-plugins}/wifi.js (71%) create mode 100644 server/chat.js rename dnsbl.js => server/dnsbl.js (88%) rename app.js => server/index.js (72%) create mode 100644 server/ladders-local.js create mode 100644 server/ladders-remote.js create mode 100644 server/ladders.js create mode 100644 server/loginserver.js rename monitor.js => server/monitor.js (77%) rename punishments.js => server/punishments.js (64%) create mode 100644 server/room-battle.js rename room-game.js => server/room-game.js (57%) create mode 100644 server/roomlogs.js create mode 100644 server/rooms.js create mode 100644 server/sockets.js rename {static => server/static}/404.html (100%) rename {static => server/static}/index.html (100%) create mode 100644 server/team-validator-async.js rename {tournaments => server/tournaments}/generator-elimination.js (88%) rename {tournaments => server/tournaments}/generator-round-robin.js (76%) rename {tournaments => server/tournaments}/index.js (58%) rename {tournaments => server/tournaments}/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js (100%) rename users.js => server/users.js (66%) create mode 100644 server/verifier.js create mode 100644 sim/README.md create mode 100644 sim/SIM-PROTOCOL.md create mode 100644 sim/battle-stream-example.ts create mode 100644 sim/battle-stream.ts delete mode 100644 sim/battle.js create mode 100644 sim/battle.ts delete mode 100644 sim/dex-data.js create mode 100644 sim/dex-data.ts rename sim/{dex.js => dex.ts} (56%) delete mode 100644 sim/index.js create mode 100644 sim/index.ts rename sim/{pokemon.js => pokemon.ts} (51%) delete mode 100644 sim/prng.js create mode 100644 sim/prng.ts rename sim/{side.js => side.ts} (65%) create mode 100644 sim/team-validator.ts delete mode 100644 sockets.js delete mode 100644 team-validator.js create mode 100644 test/application/chat.js delete mode 100644 test/application/process-manager.js delete mode 100644 test/dev-tools/eslint/validate-conditionals.js create mode 100644 test/simulator/abilities/dancer.js create mode 100644 test/simulator/abilities/disguise.js create mode 100644 test/simulator/abilities/mummy.js create mode 100644 test/simulator/abilities/parentalbond.js create mode 100644 test/simulator/abilities/symbiosis.js create mode 100644 test/simulator/abilities/truant.js create mode 100644 test/simulator/items/leppaberry.js create mode 100644 test/simulator/items/protectivepads.js create mode 100644 test/simulator/items/sitrusberry.js create mode 100644 test/simulator/misc/arceus.js create mode 100644 test/simulator/misc/critical.js create mode 100644 test/simulator/misc/endlessbattleclause.js create mode 100644 test/simulator/misc/faint-order.js create mode 100644 test/simulator/misc/fusion-combo.js create mode 100644 test/simulator/misc/megaevolution.js create mode 100644 test/simulator/misc/mixandmega.js create mode 100644 test/simulator/misc/prng.js create mode 100644 test/simulator/misc/silvally.js create mode 100644 test/simulator/misc/sleepclausemod.js create mode 100644 test/simulator/moves/clangoroussoulblaze.js create mode 100644 test/simulator/moves/counter.js create mode 100644 test/simulator/moves/encore.js create mode 100644 test/simulator/moves/fakeout.js create mode 100644 test/simulator/moves/futuresight.js create mode 100644 test/simulator/moves/healingwish.js create mode 100644 test/simulator/moves/partingshot.js create mode 100644 test/simulator/moves/photongeyser.js create mode 100644 test/simulator/moves/reflecttype.js create mode 100644 test/simulator/moves/shelltrap.js create mode 100644 test/simulator/moves/stompingtantrum.js create mode 100644 test/simulator/moves/trumpcard.js create mode 100644 test/simulator/moves/weatherball.js create mode 100644 translations/dutch.json create mode 100644 translations/english.json create mode 100644 translations/french.json create mode 100644 translations/german.json create mode 100644 translations/hindi.json create mode 100644 translations/italian.json create mode 100644 translations/japanese.json create mode 100644 translations/portuguese.json create mode 100644 translations/simplifiedchinese.json create mode 100644 translations/spanish.json create mode 100644 translations/traditionalchinese.json create mode 100644 translations/turkish.json create mode 100644 tslint.json delete mode 100644 verifier.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000..b42aef9cc900b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,27 @@ +# see: http://EditorConfig.org + +# end_of_line is unspecified so Windows users can use the repo in crlf mode + +root = true + +[*] +charset = utf-8 +indent_style = tab +indent_size = 3 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.{json,yml,webapp}] +# npm style +indent_style = space +indent_size = 2 + +[*.md] +indent_style = space +indent_size = 4 +trim_trailing_whitespace = false + +[*.tsv] +indent_style = tab +indent_size = 8 +trim_trailing_whitespace = false diff --git a/.eslintignore b/.eslintignore index d2bf6b26d5fcd..8559eb10fdc3e 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,5 @@ -tournaments/lib/ +server/tournaments/lib/ logs/ dev-tools/globals.js +node_modules/ +.*-dist/ diff --git a/.eslintrc b/.eslintrc index 633d729673edf..a4f11d858d193 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,7 +1,7 @@ { "root": true, "parserOptions": { - "ecmaVersion": 8, + "ecmaVersion": 9, "sourceType": "script", "ecmaFeatures": { "globalReturn": true @@ -14,7 +14,8 @@ "globals": { "Config": false, "Monitor": false, "toId": false, "Dex": false, "LoginServer": false, "Users": false, "Punishments": false, "Rooms": false, "Verifier": false, "Chat": false, - "Tournaments": false, "Dnsbl": false, "Sockets": false, "TeamValidator": false, "Ladders": false + "Tournaments": false, "Dnsbl": false, "Sockets": false, "TeamValidator": false, + "TeamValidatorAsync": false, "Ladders": false }, "extends": "eslint:recommended", "rules": { @@ -25,6 +26,7 @@ "no-inner-declarations": ["error", "functions"], "valid-jsdoc": "off", + "eol-last": ["error", "always"], "array-callback-return": "error", "block-scoped-var": "error", "comma-dangle": ["error", "always-multiline"], @@ -76,21 +78,19 @@ "radix": ["warn", "as-needed"], "vars-on-top": "off", "wrap-iife": ["error", "inside"], - "yoda": "off", + "yoda": ["error", "never", { "exceptRange": true }], "strict": ["error", "global"], "init-declarations": "off", - "no-catch-shadow": "off", + "no-shadow": "off", "no-label-var": "error", "no-restricted-globals": ["error", "Proxy", "Reflect", "Symbol", "WeakSet"], "no-shadow-restricted-names": "error", - "no-shadow": "off", - "no-undef-init": "warn", "no-undef": ["error", {"typeof": true}], "no-undefined": "off", "no-unused-vars": ["warn", {"args": "none"}], - "no-use-before-define": ["error", {"functions": false, "classes": false}], + "no-use-before-define": ["error", {"functions": false, "classes": false, "variables": false}], "callback-return": [2, ["callback", "cb", "done"]], "no-mixed-requires": "error", @@ -102,7 +102,7 @@ "no-sync": "off", "array-bracket-spacing": ["error", "never"], - "block-spacing": "off", + "block-spacing": ["error", "always"], "brace-style": ["error", "1tbs", {"allowSingleLine": true}], "camelcase": "off", "comma-spacing": ["error", {"before": false, "after": true}], @@ -114,14 +114,13 @@ "id-length": "off", "id-match": "off", "indent": ["error", "tab"], - "key-spacing": "off", + "key-spacing": "error", "lines-around-comment": "off", "max-nested-callbacks": "off", "max-statements-per-line": "off", "new-cap": ["error", {"newIsCap": true, "capIsNew": false}], "new-parens": "error", - "newline-after-var": "off", - "newline-before-return": "off", + "padding-line-between-statements": "off", "no-array-constructor": "error", "no-continue": "off", "no-inline-comments": "off", @@ -131,12 +130,13 @@ "no-negated-condition": "off", "no-nested-ternary": "off", "no-new-object": "error", - "no-spaced-func": "error", + "func-call-spacing": "error", "no-ternary": "off", - "no-trailing-spaces": "error", + "no-trailing-spaces": ["error", {"ignoreComments": false}], "no-underscore-dangle": "off", "no-unneeded-ternary": "error", "object-curly-spacing": ["error", "never"], + "object-shorthand": ["error", "methods"], "one-var": "off", "operator-assignment": "off", "operator-linebreak": ["error", "after"], @@ -155,7 +155,7 @@ "space-unary-ops": ["error", {"words": true, "nonwords": false}], "wrap-regex": "off", - "arrow-parens": ["error", "as-needed"], + "arrow-parens": "off", "arrow-spacing": ["error", {"before": true, "after": true}], "no-confusing-arrow": "off", "no-useless-computed-key": "error", @@ -166,6 +166,6 @@ "template-curly-spacing": ["error", "never"], "no-restricted-syntax": ["error", "WithStatement"], - "validate-conditionals": "error", + "no-constant-condition": ["error", {"checkLoops": false}] } } diff --git a/.gitignore b/.gitignore index 7707fd5850ad5..4ce45a258859c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,9 +3,17 @@ /logs/* /node_modules /eslint-cache -/chat-plugins/private.js +/server/chat-plugins/private.js +/server/chat-plugins/*-private.js npm-debug.log .eslintcache +package-lock.json + +# Typescript build artifacts +.*-dist/ + +# visual studio live share +.vs # boilerplate # ############### @@ -26,7 +34,6 @@ tmp/**/* .installed.cfg downloads -build dist # egg related @@ -48,4 +55,3 @@ local_settings.py .svn pip-log.txt - diff --git a/.lib-dist/README.md b/.lib-dist/README.md new file mode 100644 index 0000000000000..edb4a4ecc7432 --- /dev/null +++ b/.lib-dist/README.md @@ -0,0 +1,3 @@ +**NOTE**: This folder contains the compiled output of the `lib/` directory. +You should be editing the `.ts` files there and then running `npm run build` or +`./pokemon-showdown` to force these `.js` files to be recreated. diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000000..43c97e719a5a8 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false diff --git a/.sim-dist/README.md b/.sim-dist/README.md new file mode 100644 index 0000000000000..9da980889fec7 --- /dev/null +++ b/.sim-dist/README.md @@ -0,0 +1,3 @@ +**NOTE**: This folder contains the compiled output of the `sim/` directory. +You should be editing the `.ts` files there and then running `npm run build` or +`./pokemon-showdown` to force these `.js` files to be recreated. diff --git a/.travis.yml b/.travis.yml index 0c59b2d842365..05b729fd1fba9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,13 @@ sudo: false language: node_js node_js: - - "7.7" + - '10' cache: directories: - node_modules - .eslintcache +notifications: + webhooks: https://www.travisbuddy.com/ + on_success: change +travisBuddy: + insertMode: update diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000000000..4a00f7c6234be --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Run Mocha Tests", + "program": "${workspaceRoot}/node_modules/mocha/bin/_mocha", + "args": [ + "-u", + "tdd", + "--timeout", + "999999", + "--colors", + "-f", + // Make this string non-empty to run only tests whose names match it + "" + ], + "internalConsoleOptions": "openOnSessionStart" + }, + { + "type": "node", + "request": "launch", + "name": "Parse input log (paste in terminal)", + "program": "${workspaceRoot}/pokemon-showdown", + "args": ["simulate-battle"], + "console": "integratedTerminal" + }, + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000..92dead4f1631d --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "editor.insertSpaces": false, + "typescript.tsdk": "node_modules/typescript/lib" +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c8ccb5a33e151..4cf2bd5cf7478 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -79,27 +79,51 @@ Our current convention is to use `'` for IDs; `"` for names (i.e. usernames, mov Unfortunately, since this is not a convention the linter can test for (and also because our older string standards predate PS), a lot of existing code is wrong on this, so you can't look at surrounding code to get an idea of what the convention should be. Refer to the above paragraph as the definitive rule. +### Optionals: `null` vs `undefined` vs `false` + +PS convention is to use `null` for optionals. So a function that retrieves a possible `T` would return `T | null`. This is mostly because TypeScript expands `T?` to `T | null`. + +Some old code returns `T | undefined` (our previous convention). This is a relatively common standard (ironically, TypeScript itself uses it). Feel free to convert to `T | null` where you see it. + +Some even older code returns `T | false`. This is a very old PHP convention that has no place in modern PS code. Please convert to `T | null` if you see it. + +### `false | null | undefined` + +The simulator (code in `sim/` and `data/`) will often have functions with return signatures of the form `T | false | null | undefined`, especially in event handlers. These aren't optionals, they're different sentinel values. + +Specifically: + +* `false` means "this action failed" +* `null` means "this action failed silently; suppress any 'But it failed!' messages" +* `undefined` means "this action should be ignored, and treated as if nothing unexpected happened" + +So, if Thunder Wave hits a Ground type, the immunity checker returns `false` to indicate the immunity. + +If Volt Absorb absorbs Thunder Wave, Volt Absorb's TryHit handler shows the Volt Absorb message and returns `null` to indicate that no other failure message should be shown. + +If Water Absorb doesn't absorb Thunder Wave, Water Absorb's TryHit handler returns `undefined`, to show that Water Absorb does not interact with Thunder Wave. + ES5 and ES6 ------------------------------------------------------------------------ -In general, use modern features only if they're supported in Node 6 and reasonably performant in the latest version of Node. +In general, use modern features; recent versions of V8 have fixed the performance problems they used to have. - **let, const: ALWAYS** - Supported in Node 4+, good performance. -- **for-of on Arrays: SOMETIMES** - Poor performance. Acceptable outside of inner loops. For inner loops, use `for (let i = 0; i < array.length; i++)` +- **for-of on Arrays: ALWAYS** - Supported in Node 4+, good performance in Node 8+. -- **Array#forEach: NEVER** - Worse performance than `for-of` on Arrays. See `for-of`. +- **Array#forEach: NEVER** - Poor readability; we prefer `for-of`. - **for-in on Arrays: NEVER** - Horrible performance, weird bugs due to string keys, poor interaction with Array prototype modification. Everyone tells you never to do it; we're no different. See `for-of`. -- **Map, Set: SOMETIMES** - Much worse write/iteration performance, much better read performance than `Object.create(null)`. Use whatever's faster for your use case. +- **Map, Set: SOMETIMES** - Worse write/iteration performance, better read performance than `Object.create(null)`. Use whatever's faster for your use case. -- **for-in on Objects: SOMETIMES** - `Object.keys` is apparently a lot faster. Use that if you can. +- **for-in on Objects: ALWAYS** - More readable; good performance in Node 8+. -- **for-of on Maps: NEVER** - Poor performance. Use `Map#forEach`. +- **for-of on Maps and Sets: ALWAYS** - Supported in Node 4+, good performance in Node 8+. -- **Map#forEach: ALWAYS** - This is our preferred method of iterating `Map`s. +- **Map#forEach, Set#forEach: NEVER** - Poor readability; we prefer `for-of`. - **Object literal functions: ALWAYS** - Supported in Node 4+, good performance. diff --git a/LICENSE b/LICENSE index 9152fb65a21f1..fcc9fc7624864 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,21 @@ -Copyright (c) 2011-2017 Guangcong Luo and other contributors +The MIT License (MIT) + +Copyright (c) 2011-2019 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 the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: +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 +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/PROTOCOL.md b/PROTOCOL.md index 14035ff32cd47..e75df436a7a8a 100644 --- a/PROTOCOL.md +++ b/PROTOCOL.md @@ -19,6 +19,8 @@ Client implementations you might want to look at for reference include: https://github.com/TalkTakesTime/Pokemon-Showdown-Bot - Nixola's chat bot (Lua) - https://github.com/Nixola/NixPSbot +- Morfent's chat bot (Perl 6) - + https://github.com/Kaiepi/p6-PSBot - the official client (HTML5 + JavaScript) - https://github.com/Zarel/Pokemon-Showdown-Client @@ -26,6 +28,7 @@ The official client logs protocol messages in the JavaScript console, so opening that (F12 in most browsers) can help tell you what's going on. + Client-to-server messages ------------------------- @@ -100,25 +103,32 @@ displayed inline because they happen too often. For instance, the main server gets around 5 joins/leaves a second, and showing that inline with chat would make it near-impossible to chat. -Some outgoing message types ---------------------------- + +Server-to-client message types +------------------------------ `USER` = a user, the first character being their rank (users with no rank are represented by a space), and the rest of the string being their username. -####Room initialization +### Room initialization `|init|ROOMTYPE` > The first message received from a room when you join it. `ROOMTYPE` is > one of: `chat` or `battle` +`|title|TITLE` + +> `TITLE` is the title of the room. The title is _not_ guaranteed to resemble +> the room ID; for instance, room `battle-gen7uu-779767714` could have title +> `Alice vs. Bob`. + `|users|USERLIST` > `USERLIST` is a comma-separated list of `USER`s, sent from chat rooms when > they're joined. -####Room messages +### Room messages `||MESSAGE` or `MESSAGE` @@ -175,449 +185,342 @@ represented by a space), and the rest of the string being their username. > A battle started between `USER1` and `USER2`, and the battle room has > ID `ROOMID`. -####Battle messages +### Global messages -`|player|PLAYER|USERNAME|AVATAR` +`|popup|MESSAGE` -> Appears when you join a battle room. `PLAYER` denotes which player it is -> (`p1` or `p2`) and `USERNAME` is the username. `AVATAR` is the player's -> avatar identifier (usually a number, but other values can be used for -> custom avatars). +> Show the user a popup containing `MESSAGE`. `||` denotes a newline in +> the popup. - |gametype|GAMETYPE - |gen|GENNUM - |tier|TIERNAME - |rated - |rule|RULE: DESCRIPTION +`|pm|SENDER|RECEIVER|MESSAGE` -> Additional details when you join a battle room. `GAMETYPE` is one of -> `singles`, `doubles`, or `triples`; `GENNUM` denotes the generation of -> Pokémon being played; `tier` is the format; and `rule` appears multiple -> times, once for each clause in effect. `rated` only appears if the battle -> is rated. +> A PM was sent from `SENDER` to `RECEIVER` containing the message +> `MESSAGE`. - |clearpoke - |poke|PLAYER|DETAILS|ITEM - |poke|PLAYER|DETAILS|ITEM - ... - |teampreview +`|usercount|USERCOUNT` -> These messages appear if you're playing a format that uses team previews. -> `PLAYER` is the player ID (see `|player|`) and `DETAILS` describes the -> pokemon. `|teampreview` commonly appears after `|rule` tags instead of -> immediately after the pokemon list. -> -> The format for `DETAILS` is described in `|switch|`, although not -> everything may be revealed. In particular, forme is sometimes not -> specified (so Arceus would appear as `Arceus-*` since it's impossible -> to identify Arceus forme in Team Preview). +> `USERCOUNT` is the number of users on the server. -`|request|REQUEST` +`|nametaken|USERNAME|MESSAGE` -> Gives a JSON object containing a request for a decision (to move or -> switch). To assist in your decision, `REQUEST.active` has information -> about your active Pokémon, and `REQUEST.side` has information about your -> your team as a whole. +> You tried to change your username to `USERNAME` but it failed for the +> reason described in `MESSAGE`. -`|inactive|MESSAGE` or `|inactiveoff|MESSAGE` +`|challstr|CHALLSTR` -> A message related to the battle timer has been sent. The official client -> displays these messages in red. +> You just connected to the server, and we're giving you some information you'll need to log in. > -> `inactive` means that the timer is on at the time the message was sent, -> while `inactiveoff` means that the timer is off. - -`|start` - -> Indicates that the game has started. - -`|win|USER` +> If you're already logged in and have session cookies, you can make an HTTP GET request to +> `http://play.pokemonshowdown.com/action.php?act=upkeep&challstr=CHALLSTR` +> +> Otherwise, you'll need to make an HTTP POST request to `http://play.pokemonshowdown.com/action.php` +> with the data `act=login&name=USERNAME&pass=PASSWORD&challstr=CHALLSTR` +> +> `USERNAME` is your username and `PASSWORD` is your password, and `CHALLSTR` +> is the value you got from `|challstr|`. Note that `CHALLSTR` contains `|` +> characters. (Also feel free to make the request to `https://` if your client +> supports it.) +> +> Either way, the response will start with `]` and be followed by a JSON +> object which we'll call `data`. +> +> Finish logging in (or renaming) by sending: `/trn USERNAME,0,ASSERTION` +> where `USERNAME` is your desired username and `ASSERTION` is `data.assertion`. -> `USER` has won the battle. +`|updateuser|USERNAME|NAMED|AVATAR` -`|tie` +> Your name or avatar was successfully changed. Your username is now `USERNAME`. +> `NAMED` will be `0` if you are a guest or `1` otherwise. And your avatar is +> now `AVATAR`. -> The battle has ended in a tie. +`|formats|FORMATSLIST` -######Major actions +> This server supports the formats specified in `FORMATSLIST`. `FORMATSLIST` +> is a `|`-separated list of `FORMAT`s. `FORMAT` is a format name with one or +> more of these suffixes: `,#` if the format uses random teams, `,,` if the +> format is only available for searching, and `,` if the format is only +> available for challenging. +> Sections are separated by two vertical bars with the number of the column of +> that section prefixed by `,` in it. After that follows the name of the +> section and another vertical bar. -In battle, most Pokémon actions come in the form `|ACTION|POKEMON|DETAILS` -followed by a few messages detailing what happens after the action occurs. +`|updatesearch|JSON` -A Pokémon is always identified in the form `POSITION: NAME`. `POSITION` is -the spot that the Pokémon is in: it consists of the `PLAYER` of the player -(see `|player|`), followed by a letter indicating the given Pokémon's -position, counting from `a`. +> `JSON` is a JSON object representing the current state of what battles the +> user is currently searching for. -In doubles and triples battles, `a` will refer to the leftmost Pokémon -on one team and the rightmost Pokémon on the other (so `p1a` faces `p2c`, -etc). `NAME` is the nickname of the Pokémon performing the action. +`|updatechallenges|JSON` -Battle actions (especially minor actions) often come with tags such as -`|[from] EFFECT|[of] SOURCE`. `EFFECT` will be an effect (move, ability, -item, status, etc), and `SOURCE` will be a Pokémon. These can affect the -message or animation displayed, but do not affect anything else. Other -tags include `|[still]` (suppress animation) and `|[silent]` (suppress message). +> `JSON` is a JSON object representing the current state of who the user +> is challenging and who is challenging the user. -`|move|POKEMON|MOVE|TARGET` +`|queryresponse|QUERYTYPE|JSON` -> The specified Pokémon has used move `MOVE` at `TARGET`. If a move has -> multiple targets or no target, `TARGET` should be ignored. If a move -> targets a side, `TARGET` will be a (possibly fainted) Pokémon on that -> side. -> -> If `|[miss]` is present, the move missed. +> `JSON` is a JSON object representing containing the data that was requested +> with `/query QUERYTYPE` or `/query QUERYTYPE DETAILS`. > -> `|[anim] MOVE2` tells the client to use the animation of `MOVE2` instead -> of `MOVE` when displaying to the client. - -`|switch|POKEMON|DETAILS|HP STATUS` or `|drag|POKEMON|DETAILS|HP STATUS` +> Possible queries include `/query roomlist` and `/query userdetails USERNAME`. -> A Pokémon identified by `POKEMON` has switched in (the old Pokémon, if -> still there, is switched out). -> -> `DETAILS` is a comma-separated list of all information about a pokemon -> visible on the battle screen: species, shininess, gender, and level. So it -> starts with `SPECIES`, adding `, shiny` if it's shiny, `, M` if it's male, -> `, F` if it's female, `, L##` if it's not level 100. -> -> So, for instance, `Deoxys-Speed` is a level 100 non-shiny genderless -> Deoxys (Speed forme). `Sawsbuck, shiny, F, L50` is a level 50 shiny female -> Sawsbuck (Spring form). -> -> `POKEMON|DETAILS` represents all the information that can reliably identify -> a pokemon in a game. If two pokemon have the same `POKEMON|DETAILS` (which -> will never happen in any format with Species Clause), you usually won't be -> able to tell if the same pokemon switched in or a different pokemon switched -> in. -> -> The switched Pokémon has HP `HP`, and status `STATUS`. `HP` is specified as -> a fraction; if it is your own Pokémon then it will be `CURRENT/MAX`, if not, -> it will be `/100` if HP Percentage Mod is in effect and `/48` otherwise. -> `STATUS` can be left blank, or it can be `slp`, `par`, etc. -> -> `switch` means it was intentional, while `drag` means it was unintentional -> (forced by Whirlwind, Roar, etc). +### Tournament messages -`|swap|POKEMON|POSITION` +`|tournament|create|FORMAT|GENERATOR|PLAYERCAP` -> Moves already active `POKEMON` to active field `POSITION` where the -> leftmost position is 0 and each position to the right counts up by 1. +> `FORMAT` is the name of the format in which each battle will be played. +> `GENERATOR` is either `Elimination` or `Round Robin` and describes the +> type of bracket that will be used. `Elimination` includes a prefix +> that denotes the number of times a player can lose before being +> eliminated (`Single`, `Double`, etc.). `Round Robin` includes the +> prefix `Double` if every matchup will battle twice. +> `PLAYERCAP` is a number representing the maximum amount of players +> that can join the tournament or `0` if no cap was specified. -`|detailschange|POKEMON|DETAILS|HP STATUS` or -`|-formechange|POKEMON|SPECIES|HP STATUS` +`|tournament|update|JSON` -> The specified Pokémon has changed formes (via Mega Evolution, ability, etc.) -> to `SPECIES`. If the forme change cannot be reverted (Mega Evolution or a -> Shaymin-Sky that is frozen), then `detailschange` will appear; otherwise, -> the client will send `-formechange`. +> `JSON` is a JSON object representing the changes in the tournament +> since the last update you recieved or the start of the tournament. +> These include: > -> For the `DETAILS` format, see the documentation for `|switch|`. - -`|cant|POKEMON|REASON` or `|cant|POKEMON|REASON|MOVE` + format: the tournament's custom name or the format being used + teambuilderFormat: the format being used; sent if a custom name was set + isStarted: whether or not the tournament has started + isJoined: whether or not you have joined the tournament + generator: the type of bracket being used by the tournament + playerCap: the player cap that was set or 0 if it was removed + bracketData: an object representing the current state of the bracket + challenges: a list of opponents that you can currently challenge + challengeBys: a list of opponents that can currently challenge you + challenged: the name of the opponent that has challenged you + challenging: the name of the opponent that you are challenging -> The Pokémon `POKEMON` could not perform a move because of the indicated -> `REASON` (such as paralysis, Disable, etc). Sometimes, the move it was -> trying to use is given. +`|tournament|updateEnd` -`|faint|POKEMON` +> Signals the end of an update period. -> The Pokémon `POKEMON` has fainted. +`|tournament|error|ERROR` -######Minor actions +> An error of type `ERROR` occurred. -Minor actions are less important than major actions. In the official client, -they're usually displayed in small font if they have a message. Pretty much -anything that happens in a battle other than a switch or the fact that a move -was used is a minor action. So yes, the effects of a move such as damage or -stat boosts are minor actions. +`|tournament|forceend` -`|-fail|POKEMON|ACTION` +> The tournament was forcibly ended. -> The specified `ACTION` has failed against the `POKEMON` targetted. The `ACTION` -> in question can be a move that fails, or a stat drop blocked by an ability -> like Hyper Cutter, in which case `ACTION` will be `unboost|STAT`, where `STAT` -> indicates where the ability prevents stat drops. (For abilities that block all -> stat drops, like Clear Body, `|STAT` does not appear.) +`|tournament|join|USER` -`|-damage|POKEMON|HP STATUS` +> `USER` joined the tournament. -> The specified Pokémon `POKEMON` has taken damage, and is now at -> `HP STATUS` (see `|switch|` for details). -> -> If `HP` is 0, `STATUS` should be ignored. The current behavior is for -> `STATUS` to be `fnt`, but this may change and should not be relied upon. +`|tournament|leave|USER` -`|-heal|POKEMON|HP STATUS` +> `USER` left the tournament. -> Same as `-damage`, but the Pokémon has healed damage instead. +`|tournament|start` -`|-status|POKEMON|STATUS` +> The tournament started. -> The Pokémon `POKEMON` has been inflicted with `STATUS`. +`|tournament|replace|USER1|USER2` -`|-curestatus|POKEMON|STATUS` +> `USER1` was replaced by `USER2`. -> The Pokémon `POKEMON` has recovered from `STATUS`. +`|tournament|disqualify|USER` -`|-cureteam|POKEMON` +> `USER` was disqualified from the tournament. -> The Pokémon `POKEMON` has used a move that cures its team of status effects, -> like Heal Bell. +`|tournament|battlestart|USER1|USER2|ROOMID` -`|-boost|POKEMON|STAT|AMOUNT` +> A tournament battle started between `USER1` and `USER2`, and the battle room +> has ID `ROOMID`. -> The specified Pokémon `POKEMON` has gained `AMOUNT` in `STAT`, using the -> standard rules for Pokémon stat changes in-battle. `STAT` is a standard -> three-letter abbreviation fot the stat in question, so Speed will be `spe`, -> Special Defense will be `spd`, etc. +`|tournament|battleend|USER1|USER2|RESULT|SCORE|RECORDED|ROOMID` -`|-unboost|POKEMON|STAT|AMOUNT` +> The tournament battle between `USER1` and `USER2` in the battle room `ROOMID` ended. +> `RESULT` describes the outcome of the battle from `USER1`'s perspective +> (`win`, `loss`, or `draw`). `SCORE` is an array of length 2 that denotes the +> number of Pokemon `USER1` had left and the number of Pokemon `USER2` had left. +> `RECORDED` will be `fail` if the battle ended in a draw and the bracket type does +> not support draws. Otherwise, it will be `success`. -> Same as `-boost`, but for negative stat changes instead. +`|tournament|end|JSON` -`|-weather|WEATHER` +> The tournament ended. `JSON` is a JSON object containing: +> + results: the name(s) of the winner(s) of the tournament + format: the tournament's custom name or the format that was used + generator: the type of bracket that was used by the tournament + bracketData: an object representing the final state of the bracket -> Indicates the weather that is currently in effect. If `|[upkeep]` is present, -> it means that `WEATHER` was active previously and is still in effect that -> turn. Otherwise, it means that the weather has changed due to a move or ability, -> or has expired, in which case `WEATHER` will be `none`. +`|tournament|scouting|SETTING` -`|-fieldstart|CONDITION` +> Players are now either allowed or not allowed to join other tournament +> battles based on `SETTING` (`allow` or `disallow`). -> The field condition `CONDITION` has started. Field conditions are all effects that -> affect the entire field and aren't a weather. (For example: Trick Room, Grassy -> Terrain) +`|tournament|autostart|on|TIMEOUT` -`|-fieldend|CONDITION` +> A timer was set for the tournament to auto-start in `TIMEOUT` seconds. -> Indicates that the field condition `CONDITION` has ended. +`|tournament|autostart|off` -`|-sidestart|SIDE|CONDITION` +> The timer for the tournament to auto-start was turned off. -> A side condition `CONDITION` has started on `SIDE`. Side conditions are all effects -> that affect one side of the field. (For example: Tailwind, Stealth Rock, Reflect) +`|tournament|autodq|on|TIMEOUT` -`|-sideend|SIDE|CONDITION` +> A timer was set for the tournament to auto-disqualify inactive players +> every `TIMEOUT` seconds. -> Indicates that the side condition `CONDITION` ended for the given `SIDE`. +`|tournament|autodq|off` -`|-crit|POKEMON` +> The timer for the tournament to auto-disqualify inactive players was +> turned off. -> A move has dealt a critical hit against the `POKEMON`. +`|tournament|autodq|target|TIME` -`|-supereffective|POKEMON` +> You have `TIME` seconds to make or accept a challenge, or else you will be +> disqualified for inactivity. -> A move was super effective against the `POKEMON`. -`|-resisted|POKEMON` +Battles +------- -> A move was not very effective against the `POKEMON`. +### Playing battles -`|-immune|POKEMON` +Battle rooms will have a mix of room messages and battle messages. [Battle +messages are documented in `SIM-PROTOCOL.md`][sim-protocol]. -> The `POKEMON` was immune to a move. + [sim-protocol]: https://github.com/Zarel/Pokemon-Showdown/blob/master/sim/SIM-PROTOCOL.md -`|-item|POKEMON|ITEM` +To make decisions in battle, players should use the `/choose` command, +[also documented in `SIM-PROTOCOL.md`][sending-decisions]. -> The `ITEM` held by the `POKEMON` has been changed or revealed due to a move or -> ability. In addition, Air Balloon reveals itself when the Pokémon holding it -> switches in, so it will also cause this message to appear. + [sending-decisions]: https://github.com/Zarel/Pokemon-Showdown/blob/master/sim/SIM-PROTOCOL.md#sending-decisions -`|-enditem|POKEMON|ITEM` +### Starting battles through challenges -> The `ITEM` held by `POKEMON` has been destroyed, and it now holds no item. This can -> be because of an item's own effects (consumed Berries, Air Balloon), or by a move or -> ability, like Knock Off. If a berry is consumed, it also has an additional modifier -> `|[eat]` to indicate that it was consumed. This message does not appear if the item's -> ownership was changed (with a move or ability like Thief or Trick), even if the move -> or ability would result in a Pokémon without an item. +`|updatechallenges|JSON` -`|-ability|POKEMON|ABILITY` +> `JSON` is a JSON object representing the current state of who the user +> is challenging and who is challenging the user. You'll get this whenever +> challenges update (when you challenge someone, when you receive a challenge, +> when you or someone you challenged accepts/rejects/cancels a challenge). -> The `ABILITY` of the `POKEMON` has been changed due to a move/ability, or it has -> activated in a way that could not be better described by one of the other minor -> messages. For example, Clear Body sends `-fail` when it blocks stat drops, while -> Mold Breaker sends this message to reveal itself upon switch-in. -> -> Note that Skill Swap does not send this message despite it changing abilities, -> because it does not reveal abilities when used between allies in a Double or -> Triple Battle. +`JSON.challengesFrom` will be a `{userid: format}` table of received +challenges. -`|-endability|POKEMON` +`JSON.challengeTo` will be a challenge if you're challenging someone, or `null` +if you haven't. -> The `POKEMON` has had its ability surpressed, either by a move like Gastro Acid, or -> by the effects of Mummy. +If you are challenging someone, `challengeTo` will be in the format: +`{"to":"player1","format":"gen7randombattle"}`. -`|-transform|POKEMON|SPECIES` +To challenge someone, send: -> The Pokémon `POKEMON` has transformed into `SPECIES` by the effect of Transform -> or the ability Imposter. + /utm TEAM + /challenge USERNAME, FORMAT -`|-mega|POKEMON|MEGASTONE` +To cancel a challenge you made to someone, send: -> The Pokémon `POKEMON` used `MEGASTONE` to Mega Evolve. + /cancelchallenge USERNAME -`|-activate|EFFECT` +To reject a challenge you received from someone, send: -> A miscellaneous effect has activated. This is triggered whenever an effect could -> not be better described by one of the other minor messages: for example, healing -> abilities like Water Absorb simply use `-heal`, and items that are consumed upon -> use have the `-enditem` message instead. + /reject USERNAME -`|-hint|MESSAGE` +To accept a challenge you received from someone, send: -> Displays a message in parentheses to the client. Hint messages appear to explain and -> clarify why certain actions, such as Fake Out and Mat Block failing, have occurred, -> when there would normally be no in-game messages. + /utm TEAM + /accept USERNAME -`|-center` +Teams are in packed format (see "Team format" below). `TEAM` can also be +`null`, if the format doesn't require user-built teams, such as Random Battle. -> Appears in Triple Battles when only one Pokémon remains on each side, to indicate -> that the Pokémon have been automatically centered. +Invalid teams will send a `|popup|` with validation errors, and the `/accept` +or `/challenge` command won't take effect. -`|-message|MESSAGE` +If the challenge is accepted, you will receive a room initialization message. -> Displays a miscellaneous message to the client. These messages are primarily used -> for messages from game mods that aren't supported by the client, like rule clauses -> such as Sleep Clause, or other metagames with custom messages for specific scenarios. +### Starting battles through laddering -I'll document all the message types eventually, but for now this should be -enough to get you started. You can watch the data sent and received from -the server on a regular connection, or look at the client source code -for a full list of message types. +`|updatesearch|JSON` -######Action requests +> `JSON` is a JSON object representing the current state of what battles the +> user is currently searching for. You'll get this whenever searches update +> (when you search, cancel a search, or you start or end a battle) -These are how the client sends the player's decisions to the server. All -requests except `/undo` can be sent with `|RQID` at the end. `RQID` is -`REQUEST.rqid` from `|request|`. Each `RQID` is a unique number used to -identify which action the request was intended for and is used to protect -against race conditions involving `/undo` (the cancel button). +`JSON.searching` will be an array of format IDs you're currently searching for +games in. -If an invalid request is sent, the game will replace the missing or -erroneous request with a valid choice, which is usually the first usable -move. +`JSON.games` will be a `{roomid: title}` table of games you're currently in. +Note that this includes ALL games, so `|updatesearch|` will be sent when you +start/end challenge battles, and even non-Pokémon games like Mafia. -`|/team ORDER` +To search for a battle against a random opponent, send: -> Chooses the team order. Numbers not listed are displaced to the back by swapping -> them with the number that took their place. For example `/team 25` sets the team -> order from default to 253416. + /utm TEAM + /search FORMAT -`|/move NUMBER TARGET` +Teams are in packed format (see "Team format" below). `TEAM` can also be +`null`, if the format doesn't require user-built teams, such as Random Battle. -> Uses your active Pokémon's `NUMBER`th move on `TARGET` Pokémon. `NUMBER` is usually -> a number ranging from 1 to 4 (although it can range up to 24 in Custom Games where -> Pokémon can have that many moves). -> -> `TARGET` is optional and only needs to be specified for single target moves in -> doubles/triples formats. Moves with `TARGET` specify which position they are trying -> to use the move on as a number wherein the opposing Pokémon are positive integers -> counting up from `1` starting on the right. Ally Pokémon targets are negative -> integers counting down from `-1` starting on the left. -> -> If `mega` is added as a final parameter, the Pokémon will Mega Evolve if possible. +To cancel searching, send: -`|/switch NUMBER` + /cancelsearch -> Switches the active Pokémon with the `NUMBER`th Pokémon on the team. In cases where -> a Pokémon is KOed, their replacement is also chosen with `/switch`. This should -> correspond to a non-active, non-fainted Pokémon, which means `NUMBER` should be -> between 2 and 6. +### Team format -`|/choose ACTION,ACTION,ACTION` +Pokémon Showdown's main way of representing teams is in packed format. This +format is implemented in `Dex.packTeam` and `Dex.fastUnpackTeam` in +`sim/dex.js`. -> For doubles/triples formats, decisions are sent for all team positions in the same -> line separated by commas. `ACTION` can be any of the following: `move`, `switch`, -> `shift`, `pass`. -> -> `move` and `switch` use the same syntax as their respective commands explained above -> except without the `/`. In triples, `/choose shift` requests to `|swap|` the current -> outside Pokémon to the middle team position. pass is used to indicate that the Pokémon -> in that slot is not performing an action, for instance, because the Pokémon is fainted -> and you have no non-fainted Pokémon to replace it with, or because the Pokémon is not -> fainted while you are switching in replacements for fainted Pokémon. For example, -> `/choose move 1 2,move 4 -1,pass` will have the leftmost Pokémon attack the opponent's -> middle Pokémon with its first move, the middle Pokémon will attack its ally to the -> left with its fourth move, and the third team slot is empty. +If you're not using JavaScript and don't want to reimplement these conversions, +Pokémon Showdown's command-line client can convert between packed teams and +JSON using standard IO. Run `./pokemon-showdown --help` for details. -`|/undo` +If you really want to write your own converter, the format looks something like +this: -> Attempts to cancel the last request so a new one can be made. +``` +Lumineon||focussash|1|defog,scald,icebeam,uturn||85,85,85,85,85,85||||83|] +Glaceon||lifeorb||toxic,hiddenpowerground,shadowball,icebeam||81,,85,85,85,85||,0,,,,||83|] +Crabominable||choiceband|1|closecombat,earthquake,stoneedge,icehammer||85,85,85,85,85,85||||83|] +Toxicroak||lifeorb|1|drainpunch,suckerpunch,gunkshot,substitute||85,85,85,85,85,85||||79|] +Bouffalant||choiceband||earthquake,megahorn,headcharge,superpower||85,85,85,85,85,85||||83|] +Qwilfish||blacksludge|H|thunderwave,destinybond,liquidation,painsplit||85,85,85,85,85,85||||83| +``` -####Global messages +(Line breaks added for readability - this is all one line normally.) -`|popup|MESSAGE` +The format is a list of pokemon delimited by `]`, where every Pokémon is: -> Show the user a popup containing `MESSAGE`. `||` denotes a newline in -> the popup. +``` +NICKNAME|SPECIES|ITEM|ABILITY|MOVES|NATURE|EVS|GENDER|IVS|SHINY|LEVEL|HAPPINESS,POKEBALL,HIDDENPOWERTYPE +``` -`|pm|SENDER|RECEIVER|MESSAGE` +- `SPECIES` is left blank if it's identical to `NICKNAME` -> A PM was sent from `SENDER` to `RECEIVER` containing the message -> `MESSAGE`. +- `ABILITY` is `0`, `1`, or `H` if it's the ability from the corresponding slot + for the Pokémon. It can also be an ability string, for Hackmons etc. -`|usercount|USERCOUNT` +- `MOVES` is a comma-separated list of move IDs. -> `USERCOUNT` is the number of users on the server. +- `EVS` and `IVS` are comma-separated in standard order: + HP, Atk, Def, SpA, SpD, Spe. EVs left blank are 0, IVs left blank are 31. + If all EVs or IVs are blank, the commas can all be left off. -`|nametaken|USERNAME|MESSAGE` +- `EVS` represent AVs in Pokémon Let's Go. -> You tried to change your username to `USERNAME` but it failed for the -> reason described in `MESSAGE`. +- `IVS` represent DVs in Gen 1-2. The IV will be divided by 2 and rounded down, + to become DVs (so the default of 31 IVs is converted to 15 DVs). -`|challstr|CHALLSTR` +- `IVS` is post-hyper-training: pre-hyper-training IVs are represented in + `HIDDENPOWERTYPE` -> You just connected to the server, and we're giving you some information you'll need to log in. -> -> If you're already logged in and have session cookies, you can make an HTTP GET request to -> `http://play.pokemonshowdown.com/action.php?act=upkeep&challstr=CHALLSTR` -> -> Otherwise, you'll need to make an HTTP POST request to `http://play.pokemonshowdown.com/action.php` -> with the data `act=login&name=USERNAME&pass=PASSWORD&challstr=CHALLSTR` -> -> `USERNAME` is your username and `PASSWORD` is your password, and `CHALLSTR` -> is the value you got from `|challstr|`. Note that `CHALLSTR` contains `|` -> characters. (Also feel free to make the request to `https://` if your client -> supports it.) -> -> Either way, the response will start with `]` and be followed by a JSON -> object which we'll call `data`. -> -> Finish logging in (or renaming) by sending: `/trn USERNAME,0,ASSERTION` -> where `USERNAME` is your desired username and `ASSERTION` is `data.assertion`. - -`|updateuser|USERNAME|NAMED|AVATAR` - -> Your name or avatar was successfully changed. Your username is now `USERNAME`. -> `NAMED` will be `0` if you are a guest or `1` otherwise. And your avatar is -> now `AVATAR`. - -`|formats|FORMATSLIST` - -> This server supports the formats specified in `FORMATSLIST`. `FORMATSLIST` -> is a `|`-separated list of `FORMAT`s. `FORMAT` is a format name with one or -> more of these suffixes: `,#` if the format uses random teams, `,,` if the -> format is only available for searching, and `,` if the format is only -> available for challenging. -> Sections are separated by two vertical bars with the number of the column of -> that section prefixed by `,` in it. After that follows the name of the -> section and another vertical bar. +- `SHINY` is `S` for shiny, and blank for non-shiny. -`|updatesearch|JSON` +- `LEVEL` is left blank for level 100. -> `JSON` is a JSON object representing the current state of what battles the -> user is currently searching for. +- `HAPPINESS` is left blank for 255. -`|updatechallenges|JSON` +- `POKEBALL` is left blank if it's a regular Poké Ball. -> `JSON` is a JSON object representing the current state of who the user -> is challenging and who is challenging the user. - -`|queryresponse|QUERYTYPE|JSON` +- `HIDDENPOWERTYPE` is left blank if the Pokémon is not Hyper Trained, or if + Hyper Training doesn't affect IVs. -> `JSON` is a JSON object representing containing the data that was requested -> with `/query QUERYTYPE` or `/query QUERYTYPE DETAILS`. -> -> Possible queries include `/query roomlist` and `/query userdetails USERNAME`. +- If `POKEBALL` and `HIDDENPOWERTYPE` are both blank, the commas will be left + off. diff --git a/Procfile b/Procfile index 7dafee1829981..c570cd5e2fd66 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: node app.js $PORT \ No newline at end of file +web: node pokemon-showdown $PORT \ No newline at end of file diff --git a/README.md b/README.md index c9ee5ecaf5d21..3481ee3be3bba 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,10 @@ Navigation: [Website][1] | **Server repository** | [Client repository][2] | [Dex [2]: https://github.com/Zarel/Pokemon-Showdown-Client [3]: https://github.com/Zarel/Pokemon-Showdown-Dex -[![Build Status](https://travis-ci.org/Zarel/Pokemon-Showdown.svg)](https://travis-ci.org/Zarel/Pokemon-Showdown) +[![Build Status](https://api.travis-ci.com/Zarel/Pokemon-Showdown.svg)](https://travis-ci.com/Zarel/Pokemon-Showdown) [![Dependency Status](https://david-dm.org/zarel/Pokemon-Showdown.svg)](https://david-dm.org/zarel/Pokemon-Showdown) -[![devDependency Status](https://david-dm.org/zarel/Pokemon-Showdown/dev-status.svg)](https://david-dm.org/zarel/Pokemon-Showdown#info=devDependencies) +[![devDependency Status](https://david-dm.org/zarel/Pokemon-Showdown/dev-status.svg)](https://david-dm.org/zarel/Pokemon-Showdown?type=dev) +[![Total Alerts](https://img.shields.io/lgtm/alerts/g/Zarel/Pokemon-Showdown.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/Zarel/Pokemon-Showdown/alerts) Introduction ------------------------------------------------------------------------ @@ -18,7 +19,7 @@ This is the source code for the game server of [Pokémon Showdown][4], a website This repository contains the files needed to set up your own Pokémon Showdown server. Note that to set up a server, you'll also need a server computer. -You can use your own computer as a server, but for other people to connect to your computer, you'll need to expose a port (default is 8000 but you can choose a different one) to connect to, which sometimes requires [port forwarding][5] (note that this isn't possible on certain internet connections). +You can use your own computer as a server, but for other people to connect to your computer, you'll need to expose a port (default is 8000 but you can choose a different one) to connect to, which sometimes requires [port forwarding][5]. Note that some internet providers don't let you host a server at all, in which case you'll have to rent a VPS to use as a server. [4]: http://pokemonshowdown.com/ [5]: http://en.wikipedia.org/wiki/Port_forwarding @@ -29,13 +30,18 @@ Installing ./pokemon-showdown -(Requires Node.js 8+) +(Requires Node.js v10+) + +If your distro package manager has an old Node.js version, the simplest way to upgrade is `n` – usually no root necessary: + + npm install --global n + n latest Detailed installation instructions ------------------------------------------------------------------------ -Pokémon Showdown requires you to have [Node.js][6] installed, 8.x or later (7.7 or later can work, but you might as well be on the latest stable). +Pokémon Showdown requires you to have [Node.js][6] installed, v10.x or later. Next, obtain a copy of Pokémon Showdown. If you're reading this outside of GitHub, you've probably already done this. If you're reading this in GitHub, there's a "Clone or download" button near the top right (it's green). I recommend the "Open in Desktop" method - you need to install GitHub Desktop which is more work than "Download ZIP", but it makes it much easier to update in the long run (it lets you use the `/updateserver` command). @@ -120,7 +126,7 @@ PS has a built-in chat service. Join our main server to talk to us! You can also visit the [Pokémon Showdown forums][8] for discussion and help. - [8]: http://www.smogon.com/forums/forums/pok%C3%A9mon-showdown.209/ + [8]: https://www.smogon.com/forums/forums/pok%C3%A9mon-showdown.209/ If you'd like to contribute to programming and don't know where to start, feel free to check out [Ideas for New Developers][9]. @@ -144,8 +150,8 @@ Owner Staff +- Bär Halberkamp [bumbadadabum] - Development - Chris Monsanto [chaos] - Sysadmin -- Leonardo Julca [Slayer95] - Development - Mathieu Dias-Martins [Marty-D] - Research (game mechanics), Development - [The Immortal] - Development @@ -155,27 +161,37 @@ Retired Staff - Cathy J. Fitzpatrick [cathyjf] - Development, Sysadmin - Hugh Gordon [V4] - Research (game mechanics), Development - Juanma Serrano [Joim] - Development, Sysadmin +- Leonardo Julca [Slayer95] - Development Major Contributors -- Bär Halberkamp [bumbadadabum] - Development +- Andrew Werner [HoeenHero] - Development - Kevin Lau [Ascriptmaster] - Development, Art (battle animations) - Konrad Borowski [xfix] - Development +- Neil Rashbrook [urkerab] - Development - Quinton Lee [sirDonovan] - Development +- [Ridaz] - Art (battle animations) +- Tobias Mann [asgdf] - Development +- William [MacChaeger] - Development Contributors +- Alexander B. [mathfreak231] - Development - Andrew Goodsell [Zracknel] - Art (battle weather backdrops) +- Austin Couturier [Austin] - Development - Avery Zimmer [Lyren, SolarisFox] - Development - Ben Davies [Morfent] - Development - Ben Frengley [TalkTakesTime] - Development - Cody Thompson [Rising_Dusk] - Development +- [Honko] - Development - Ian Clail [Layell] - Art (battle graphics, sprites) - Jeremy Piemonte [panpawn] - Development -- Neil Rashbrook [urkerab] - Development +- [jumbowhales] - Development +- Kris Johnson [Kris] - Development +- Leonard Craft III [DaWoblefet] - Research (game mechanics) +- Luke Harmon-Vellotti [moo, CheeseMuffin] - Development - Robin Vandenbrande [Quinella] - Development -- [Ridaz] - Art (battle animations) -- Tobias Mann [asgdf] - Development +- Russell Jones [SadisticMystic] - Research (game mechanics) Special thanks diff --git a/build b/build new file mode 100755 index 0000000000000..43aaf354f8201 --- /dev/null +++ b/build @@ -0,0 +1,51 @@ +#!/usr/bin/env node + +try { + RegExp("\\p{Emoji}", "u"); +} catch (e) { + console.log("We require Node.js version 10 or later; you're using " + process.version); + process.exit(1); +} + +var child_process = require('child_process'); +var fs = require('fs'); +var path = require('path'); +var replace = require('replace'); + +function shell(cmd) { child_process.execSync(cmd, {stdio: 'inherit', cwd: __dirname}); } +function sucrase(src, out) { + shell(`npx sucrase -q ${src} -d ${out} --transforms typescript,imports --enable-legacy-typescript-module-interop`); +} +function rewrite(src, out, dist) { + replace({ + regex: `(require\\\(.*?)(${src})(.*?\\\))`, + replacement: `$1${out}$3`, + paths: fs.readdirSync(dist).map(f => path.join(__dirname, dist, f)), + silent: true, + }); +} + +try { + require.resolve('replace'); +} catch (e) { + console.log('Installing dependencies...'); + shell('npm install'); +} + +sucrase('./sim', './.sim-dist'); +sucrase('./lib', './.lib-dist'); +rewrite('lib', '.lib-dist', '.sim-dist'); + +// Make sure config.js exists. If not, copy it over synchronously from +// config-example.js, since it's needed before we can start the server +try { + require.resolve('./config/config'); +} catch (err) { + if (err.code !== 'MODULE_NOT_FOUND') throw err; // should never happen + + console.log('config.js does not exist. Creating one with default settings...'); + fs.writeFileSync( + path.resolve(__dirname, 'config/config.js'), + fs.readFileSync(path.resolve(__dirname, 'config/config-example.js')) + ); +} diff --git a/chat-commands.js b/chat-commands.js deleted file mode 100644 index ffbf38f85f1d0..0000000000000 --- a/chat-commands.js +++ /dev/null @@ -1,3608 +0,0 @@ -/** - * System commands - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * These are system commands - commands required for Pokemon Showdown - * to run. A lot of these are sent by the client. - * - * System commands should not be modified, added, or removed. If you'd - * like to modify or add commands, add or edit files in chat-plugins/ - * - * For the API, see chat-plugins/COMMANDS.md - * - * @license MIT license - */ - -'use strict'; - -/* eslint no-else-return: "error" */ - -const crypto = require('crypto'); -const FS = require('./fs'); - -const Matchmaker = require('./ladders-matchmaker').matchmaker; - -const MAX_REASON_LENGTH = 300; -const MUTE_LENGTH = 7 * 60 * 1000; -const HOURMUTE_LENGTH = 60 * 60 * 1000; - -exports.commands = { - - '!version': true, - version: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox("Server version: " + Chat.package.version + ""); - }, - - '!authority': true, - auth: 'authority', - stafflist: 'authority', - globalauth: 'authority', - authlist: 'authority', - authority: function (target, room, user, connection) { - if (target) { - let targetRoom = Rooms.search(target); - let availableRoom = targetRoom && targetRoom.checkModjoin(user); - if (targetRoom && availableRoom) return this.parse('/roomauth1 ' + target); - return this.parse('/userauth ' + target); - } - let rankLists = {}; - let ranks = Object.keys(Config.groups); - for (let u in Users.usergroups) { - let rank = Users.usergroups[u].charAt(0); - if (rank === ' ' || rank === '+') continue; - // In case the usergroups.csv file is not proper, we check for the server ranks. - if (ranks.includes(rank)) { - let name = Users.usergroups[u].substr(1); - if (!rankLists[rank]) rankLists[rank] = []; - if (name) rankLists[rank].push(name); - } - } - - let buffer = Object.keys(rankLists).sort((a, b) => - (Config.groups[b] || {rank: 0}).rank - (Config.groups[a] || {rank: 0}).rank - ).map(r => - (Config.groups[r] ? "**" + Config.groups[r].name + "s** (" + r + ")" : r) + ":\n" + rankLists[r].sort((a, b) => toId(a).localeCompare(toId(b))).join(", ") - ); - - if (!buffer.length) return connection.popup("This server has no global authority."); - connection.popup(buffer.join("\n\n")); - }, - authhelp: ["/auth - Show global staff for the server.", - "/auth [room] - Show what roomauth a room has.", - "/auth [user] - Show what global and roomauth a user has."], - - userlist: function (target, room, user) { - let userList = []; - - for (let i in room.users) { - let curUser = Users(room.users[i]); - if (!curUser || !curUser.named) continue; - userList.push(Chat.escapeHTML(curUser.getIdentity(room.id))); - } - - let output = `There ${Chat.plural(userList.length, 'are', 'is')} ${userList.length} user${Chat.plural(userList.length)} in this room:
`; - output += userList.join(`, `); - - this.sendReplyBox(output); - }, - userlisthelp: ["/userlist - Displays a list of users who are currently in the room."], - - '!me': true, - mee: 'me', - me: function (target, room, user) { - if (this.cmd === 'mee' && /[A-Z-a-z0-9/]/.test(target.charAt(0))) { - return this.errorReply(`/mee - must not start with a letter or number`); - } - target = this.canTalk(`/${this.cmd} ${target || ''}`); - if (!target) return; - - if (this.message.startsWith(`/ME`)) { - const uppercaseIdentity = user.getIdentity(room).toUpperCase(); - if (room) { - this.add(`|c|${uppercaseIdentity}|${target}`); - } else { - let msg = `|pm|${uppercaseIdentity}|${this.pmTarget.getIdentity()}|${target}`; - user.send(msg); - if (this.pmTarget !== user) this.pmTarget.send(msg); - } - return; - } - - return target; - }, - - '!battle': true, - 'battle!': 'battle', - battle: function (target, room, user, connection, cmd) { - if (cmd === 'battle') return this.sendReply("What?! How are you not more excited to battle?! Try /battle! to show me you're ready."); - if (!target) target = "randombattle"; - return this.parse("/search " + target); - }, - - pi: function (target, room, user) { - return this.sendReplyBox( - 'Did you mean: 1. 3.1415926535897932384626... (Decimal)
' + - '2. 3.184809493B91866... (Duodecimal)
' + - '3. 3.243F6A8885A308D... (Hexadecimal)

' + - 'How many digits of pi do YOU know? Test it out here!'); - }, - - code: function (target, room, user) { - if (!target) return this.parse('/help code'); - if (!this.canTalk()) return; - const separator = '\n'; - if (target.includes(separator)) { - const params = target.split(separator); - let output = []; - for (let i = 0; i < params.length; i++) { - output.push(Chat.escapeHTML(params[i])); - } - let code = `
${output.join('
')}
`; - if (output.length > 3) code = `
See code...${code}
`; - - if (!this.canBroadcast('!code')) return; - if (this.broadcastMessage && !this.can('broadcast', null, room)) return false; - - if (!this.runBroadcast('!code')) return; - - this.sendReplyBox(code); - } else { - return this.errorReply("You can simply use ``[code]`` for code messages that are only one line."); - } - }, - codehelp: [ - "!code [code] - Broadcasts code to a room. Accepts multi-line arguments. Requires: + % @ & # ~", - "/code [code] - Shows you code. Accepts multi-line arguments.", - ], - - '!avatar': true, - avatar: function (target, room, user) { - if (!target) return this.parse('/avatars'); - let parts = target.split(','); - let avatarid = toId(parts[0]); - let avatar = 0; - let avatarTable = { - lucas: 1, - dawn: 2, - youngster: 3, - lass: 4, - camper: 5, - picnicker: 6, - bugcatcher: 7, - aromalady: 8, - twins: 9, - hiker: 10, - battlegirl: 11, - fisherman: 12, - cyclist: 13, - cyclistf: 14, - blackbelt: 15, - artist: 16, - pokemonbreeder: 17, - pokemonbreederf: 18, - cowgirl: 19, - jogger: 20, - pokefan: 21, - pokefanf: 22, - pokekid: 23, - youngcouple: 24, - acetrainer: 25, - acetrainerf: 26, - waitress: 27, - veteran: 28, - ninjaboy: 29, - dragontamer: 30, - birdkeeper: 31, - doubleteam: 32, - richboy: 33, - lady: 34, - gentleman: 35, - socialite: 36, - madame: 36, - beauty: 37, - collector: 38, - policeman: 39, - pokemonranger: 40, - pokemonrangerf: 41, - scientist: 42, - swimmer: 43, - swimmerf: 44, - tuber: 45, - tuberf: 46, - sailor: 47, - sisandbro: 48, - ruinmaniac: 49, - psychic: 50, - psychicf: 51, - gambler: 52, - dppguitarist: 53, - acetrainersnow: 54, - acetrainersnowf: 55, - skier: 56, - skierf: 57, - roughneck: 58, - clown: 59, - worker: 60, - schoolkid: 61, - schoolkidf: 62, - roark: 63, - barry: 64, - byron: 65, - aaron: 66, - bertha: 67, - flint: 68, - lucian: 69, - dppcynthia: 70, - bellepa: 71, - rancher: 72, - mars: 73, - galacticgrunt: 74, - gardenia: 75, - crasherwake: 76, - maylene: 77, - fantina: 78, - candice: 79, - volkner: 80, - parasollady: 81, - waiter: 82, - interviewers: 83, - cameraman: 84, - oli: 84, - reporter: 85, - roxy: 85, - idol: 86, - grace: 86, - cyrus: 87, - jupiter: 88, - saturn: 89, - galacticgruntf: 90, - argenta: 91, - palmer: 92, - thorton: 93, - buck: 94, - darach: 95, - marley: 96, - mira: 97, - cheryl: 98, - riley: 99, - dahlia: 100, - ethan: 101, - lyra: 102, - - archer: 132, - ariana: 133, - proton: 134, - petrel: 135, - mysteryman: 136, - eusine: 136, - ptlucas: 137, - ptdawn: 138, - - falkner: 141, - bugsy: 142, - whitney: 143, - morty: 144, - chuck: 145, - jasmine: 146, - pryce: 147, - clair: 148, - will: 149, - koga: 150, - bruno: 151, - karen: 152, - lance: 153, - brock: 154, - misty: 155, - ltsurge: 156, - erika: 157, - janine: 158, - sabrina: 159, - blaine: 160, - blue: 161, - red2: 162, - red: 163, - silver: 164, - giovanni: 165, - unknownf: 166, - unknownm: 167, - unknown: 168, - hilbert: 169, - hilda: 170, - - chili: 179, - cilan: 180, - cress: 181, - - lenora: 188, - burgh: 189, - elesa: 190, - clay: 191, - skyla: 192, - - cheren: 206, - bianca: 207, - - n: 209, - - brycen: 222, - iris: 223, - drayden: 224, - - shauntal: 246, - marshal: 247, - grimsley: 248, - caitlin: 249, - ghetsis: 250, - - ingo: 256, - alder: 257, - - cynthia: 260, - emmet: 261, - dueldiskhilbert: 262, - dueldiskhilda: 263, - hugh: 264, - rosa: 265, - nate: 266, - colress: 267, - bw2beauty: 268, - bw2ghetsis: 269, - bw2plasmagrunt: 270, - bw2plasmagruntf: 271, - bw2iris: 272, - brycenman: 273, - shadowtriad: 274, - rood: 275, - zinzolin: 276, - bw2cheren: 277, - marlon: 278, - roxie: 279, - roxanne: 280, - brawly: 281, - wattson: 282, - flannery: 283, - norman: 284, - winona: 285, - tate: 286, - liza: 287, - juan: 288, - guitarist: 289, - steven: 290, - wallace: 291, - magicqueen: 292, - bellelba: 292, - benga: 293, - - bw2elesa: '#bw2elesa', - teamrocket: '#teamrocket', - yellow: '#yellow', - zinnia: '#zinnia', - clemont: '#clemont', - }; - if (avatarTable.hasOwnProperty(avatarid)) { - avatar = avatarTable[avatarid]; - } else { - avatar = parseInt(avatarid); - } - if (typeof avatar === 'number' && (!avatar || avatar > 294 || avatar < 1)) { - if (!parts[1]) { - this.errorReply("Invalid avatar."); - } - return false; - } - - user.avatar = avatar; - if (!parts[1]) { - this.sendReply("Avatar changed to:\n" + - '|raw|'); - } - }, - avatarhelp: ["/avatar [avatar number 1 to 293] - Change your trainer sprite."], - - '!logout': true, - signout: 'logout', - logout: function (target, room, user) { - user.resetName(); - }, - - requesthelp: 'report', - report: function (target, room, user) { - if (room.id === 'help') { - this.sendReply("Ask one of the Moderators (@) in the Help room."); - } else { - this.parse('/join help'); - } - }, - - r: 'reply', - reply: function (target, room, user) { - if (!target) return this.parse('/help reply'); - if (!user.lastPM) { - return this.errorReply("No one has PMed you yet."); - } - return this.parse('/msg ' + (user.lastPM || '') + ', ' + target); - }, - replyhelp: ["/reply OR /r [message] - Send a private message to the last person you received a message from, or sent a message to."], - - '!msg': true, - pm: 'msg', - whisper: 'msg', - w: 'msg', - msg: function (target, room, user, connection) { - if (!target) return this.parse('/help msg'); - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!target) { - this.errorReply("You forgot the comma."); - return this.parse('/help msg'); - } - if (!targetUser) { - let error = `User ${this.targetUsername} not found. Did you misspell their name?`; - error = `|pm|${this.user.getIdentity()}| ${this.targetUsername}|/error ${error}`; - connection.send(error); - return; - } - this.pmTarget = targetUser; - this.room = undefined; - - if (!targetUser.connected) { - return this.errorReply("User " + this.targetUsername + " is offline."); - } - - this.parse(target); - }, - msghelp: ["/msg OR /whisper OR /w [username], [message] - Send a private message."], - - '!invite': true, - inv: 'invite', - invite: function (target, room, user) { - if (!target) return this.parse('/help invite'); - if (!this.canTalk()) return; - if (room) target = this.splitTarget(target) || room.id; - let targetRoom = Rooms.search(target); - if (targetRoom && !targetRoom.checkModjoin(user)) { - targetRoom = undefined; - } - - if (room) { - if (!this.targetUser) return this.errorReply(`The user "${this.targetUsername}" was not found.`); - if (!targetRoom) return this.errorReply(`The room "${target}" was not found.`); - - return this.parse(`/pm ${this.targetUsername}, /invite ${targetRoom.id}`); - } - - let targetUser = this.pmTarget; - - if (!targetRoom || targetRoom === Rooms.global) return this.errorReply(`The room "${target}" was not found.`); - if (targetRoom.staffRoom && !targetUser.isStaff) return this.errorReply(`User "${targetUser.name}" requires global auth to join room "${targetRoom.id}".`); - if (!targetUser) return this.errorReply(`The user "${targetUser.name}" was not found.`); - - if (!targetRoom.checkModjoin(targetUser)) { - if (targetRoom.getAuth(targetUser) !== ' ') { - return this.errorReply(`The user "${targetUser.name}" does not have permission to join "${targetRoom.title}".`); - } - this.room = targetRoom; - this.parse(`/roomvoice ${targetUser.name}`); - if (!targetRoom.checkModjoin(targetUser)) { - if (targetRoom.getAuth(targetUser) !== ' ') { - return this.errorReply(`The user "${targetUser.name}" does not have permission to join "${targetRoom.title}".`); - } - return this.errorReply(`You do not have permission to invite people into this room.`); - } - } - if (targetUser in targetRoom.users) return this.errorReply(`This user is already in "${targetRoom.title}".`); - - return '/invite ' + targetRoom.id; - }, - invitehelp: ["/invite [username] - Invites the player [username] to join the room you sent the command to.", - "(in a PM) /invite [roomname] - Invites the player you're PMing to join the room [roomname]."], - - pminfobox: function (target, room, user, connection) { - if (!this.canTalk()) return; - if (!this.can('addhtml', null, room)) return false; - if (!target) return this.parse("/help pminfobox"); - - target = this.canHTML(this.splitTarget(target)); - if (!target) return; - let targetUser = this.targetUser; - - if (!targetUser || !targetUser.connected) return this.errorReply(`User ${this.targetUsername} is not currently online.`); - if (!(targetUser in room.users) && !user.can('addhtml')) return this.errorReply("You do not have permission to use this command to users who are not in this room."); - if (targetUser.ignorePMs && targetUser.ignorePMs !== user.group && !user.can('lock')) return this.errorReply("This user is currently ignoring PMs."); - if (targetUser.locked && !user.can('lock')) return this.errorReply("This user is currently locked, so you cannot send them a pminfobox."); - - // Apply the infobox to the message - target = `/raw
${target}
`; - let message = `|pm|${user.getIdentity()}|${targetUser.getIdentity()}|${target}`; - - user.send(message); - if (targetUser !== user) targetUser.send(message); - targetUser.lastPM = user.userid; - user.lastPM = targetUser.userid; - }, - pminfoboxhelp: ["/pminfobox [user], [html]- PMs an [html] infobox to [user]. Requires * ~"], - - '!ignorepms': true, - blockpm: 'ignorepms', - blockpms: 'ignorepms', - ignorepm: 'ignorepms', - ignorepms: function (target, room, user) { - if (user.ignorePMs === (target || true)) return this.errorReply("You are already blocking private messages! To unblock, use /unblockpms"); - if (user.can('lock') && !user.can('bypassall')) return this.errorReply("You are not allowed to block private messages."); - user.ignorePMs = true; - if (target in Config.groups) { - user.ignorePMs = target; - return this.sendReply("You are now blocking private messages, except from staff and " + target + "."); - } - return this.sendReply("You are now blocking private messages, except from staff."); - }, - ignorepmshelp: ["/blockpms - Blocks private messages. Unblock them with /unignorepms."], - - '!unignorepms': true, - unblockpm: 'unignorepms', - unblockpms: 'unignorepms', - unignorepm: 'unignorepms', - unignorepms: function (target, room, user) { - if (!user.ignorePMs) return this.errorReply("You are not blocking private messages! To block, use /blockpms"); - user.ignorePMs = false; - return this.sendReply("You are no longer blocking private messages."); - }, - unignorepmshelp: ["/unblockpms - Unblocks private messages. Block them with /blockpms."], - - '!away': true, - idle: 'away', - afk: 'away', - away: function (target, room, user) { - this.parse('/blockchallenges'); - this.parse('/blockpms ' + target); - }, - awayhelp: ["/away - Blocks challenges and private messages. Unblock them with /back."], - - '!back': true, - unaway: 'back', - unafk: 'back', - back: function () { - this.parse('/unblockpms'); - this.parse('/unblockchallenges'); - }, - backhelp: ["/back - Unblocks challenges and/or private messages, if either are blocked."], - - '!rank': true, - rank: function (target, room, user) { - if (!target) target = user.name; - - Ladders.visualizeAll(target).then(values => { - let buffer = '
'; - buffer += ''; - - let ratings = values.join(''); - if (!ratings) { - buffer += ''; - } else { - buffer += ''; - buffer += ratings; - } - buffer += '
User: ' + Chat.escapeHTML(target) + '
This user has not played any ladder games yet.
FormatEloWLTotal
'; - - this.sendReply('|raw|' + buffer); - }); - }, - - makeprivatechatroom: 'makechatroom', - makechatroom: function (target, room, user, connection, cmd) { - if (!this.can('makeroom')) return; - - // `,` is a delimiter used by a lot of /commands - // `|` and `[` are delimiters used by the protocol - // `-` has special meaning in roomids - if (target.includes(',') || target.includes('|') || target.includes('[') || target.includes('-')) { - return this.errorReply("Room titles can't contain any of: ,|[-"); - } - - let id = toId(target); - if (!id) return this.parse('/help makechatroom'); - // Check if the name already exists as a room or alias - if (Rooms.search(id)) return this.errorReply("The room '" + target + "' already exists."); - if (!Rooms.global.addChatRoom(target)) return this.errorReply("An error occurred while trying to create the room '" + target + "'."); - - if (cmd === 'makeprivatechatroom') { - let targetRoom = Rooms.search(target); - targetRoom.isPrivate = true; - targetRoom.chatRoomData.isPrivate = true; - Rooms.global.writeChatRoomData(); - if (Rooms.get('upperstaff')) { - Rooms.get('upperstaff').add('|raw|
Private chat room created: ' + Chat.escapeHTML(target) + '
').update(); - } - this.sendReply("The private chat room '" + target + "' was created."); - } else { - if (Rooms.get('staff')) { - Rooms.get('staff').add('|raw|
Public chat room created: ' + Chat.escapeHTML(target) + '
').update(); - } - if (Rooms.get('upperstaff')) { - Rooms.get('upperstaff').add('|raw|
Public chat room created: ' + Chat.escapeHTML(target) + '
').update(); - } - this.sendReply("The chat room '" + target + "' was created."); - } - }, - makechatroomhelp: ["/makechatroom [roomname] - Creates a new room named [roomname]. Requires: & ~"], - - makegroupchat: function (target, room, user, connection, cmd) { - if (!user.autoconfirmed) { - return this.errorReply("You must be autoconfirmed to make a groupchat."); - } - if (!user.trusted) { - return this.errorReply("You must be global voice or roomdriver+ in some public room to make a groupchat."); - } - // if (!this.can('makegroupchat')) return false; - if (target.length > 64) return this.errorReply("Title must be under 32 characters long."); - let targets = target.split(',', 2); - - // Title defaults to a random 8-digit number. - let title = targets[0].trim(); - if (title.length >= 32) { - return this.errorReply("Title must be under 32 characters long."); - } else if (!title) { - title = ('' + Math.floor(Math.random() * 100000000)); - } else if (Config.chatfilter) { - let filterResult = Config.chatfilter.call(this, title, user, null, connection); - if (!filterResult) return; - if (title !== filterResult) { - return this.errorReply("Invalid title."); - } - } - // `,` is a delimiter used by a lot of /commands - // `|` and `[` are delimiters used by the protocol - // `-` has special meaning in roomids - if (title.includes(',') || title.includes('|') || title.includes('[') || title.includes('-')) { - return this.errorReply("Room titles can't contain any of: ,|[-"); - } - - // Even though they're different namespaces, to cut down on confusion, you - // can't share names with registered chatrooms. - let existingRoom = Rooms.search(toId(title)); - if (existingRoom && !existingRoom.modjoin) return this.errorReply("The room '" + title + "' already exists."); - // Room IDs for groupchats are groupchat-TITLEID - let titleid = toId(title); - if (!titleid) { - titleid = '' + Math.floor(Math.random() * 100000000); - } - let roomid = 'groupchat-' + user.userid + '-' + titleid; - // Titles must be unique. - if (Rooms.search(roomid)) return this.errorReply("A group chat named '" + title + "' already exists."); - // Tab title is prefixed with '[G]' to distinguish groupchats from - // registered chatrooms - - if (Monitor.countGroupChat(connection.ip)) { - this.errorReply("Due to high load, you are limited to creating 4 group chats every hour."); - return; - } - - // Privacy settings, default to hidden. - let privacy = (toId(targets[1]) === 'private') ? true : 'hidden'; - - let groupChatLink = '<<' + roomid + '>>'; - let groupChatURL = ''; - if (Config.serverid) { - groupChatURL = 'http://' + (Config.serverid === 'showdown' ? 'psim.us' : Config.serverid + '.psim.us') + '/' + roomid; - groupChatLink = '' + groupChatLink + ''; - } - let titleHTML = ''; - if (/^[0-9]+$/.test(title)) { - titleHTML = groupChatLink; - } else { - titleHTML = Chat.escapeHTML(title) + ' ' + groupChatLink + ''; - } - let targetRoom = Rooms.createChatRoom(roomid, '[G] ' + title, { - isPersonal: true, - isPrivate: privacy, - auth: {}, - introMessage: '

' + titleHTML + '

There are several ways to invite people:
- in this chat: /invite USERNAME
- anywhere in PS: link to <<' + roomid + '>>' + (groupChatURL ? '
- outside of PS: link to ' + groupChatURL + '' : '') + '

This room will expire after 40 minutes of inactivity or when the server is restarted.

', - }); - if (targetRoom) { - // The creator is RO. - targetRoom.auth[user.userid] = '#'; - // Join after creating room. No other response is given. - user.joinRoom(targetRoom.id); - return; - } - return this.errorReply("An unknown error occurred while trying to create the room '" + title + "'."); - }, - makegroupchathelp: ["/makegroupchat [roomname], [hidden|private] - Creates a group chat named [roomname]. Leave off privacy to default to hidden. Requires global voice or roomdriver+ in a public room to make a groupchat."], - - deregisterchatroom: function (target, room, user) { - if (!this.can('makeroom')) return; - this.errorReply("NOTE: You probably want to use `/deleteroom` now that it exists."); - let id = toId(target); - if (!id) return this.parse('/help deregisterchatroom'); - let targetRoom = Rooms.search(id); - if (!targetRoom) return this.errorReply("The room '" + target + "' doesn't exist."); - target = targetRoom.title || targetRoom.id; - if (Rooms.global.deregisterChatRoom(id)) { - this.sendReply("The room '" + target + "' was deregistered."); - this.sendReply("It will be deleted as of the next server restart."); - return; - } - return this.errorReply("The room '" + target + "' isn't registered."); - }, - deregisterchatroomhelp: ["/deregisterchatroom [roomname] - Deletes room [roomname] after the next server restart. Requires: & ~"], - - deletechatroom: 'deleteroom', - deletegroupchat: 'deleteroom', - deleteroom: function (target, room, user) { - let roomid = target.trim(); - if (!roomid) return this.parse('/help deleteroom'); - let targetRoom = Rooms.search(roomid); - if (!targetRoom) return this.errorReply("The room '" + target + "' doesn't exist."); - if (room.isPersonal) { - if (!this.can('editroom', null, targetRoom)) return; - } else { - if (!this.can('makeroom')) return; - } - target = targetRoom.title || targetRoom.id; - - if (targetRoom.id === 'global') { - return this.errorReply("This room can't be deleted."); - } - - if (targetRoom.chatRoomData) { - if (targetRoom.isPrivate) { - if (Rooms.get('upperstaff')) { - Rooms.get('upperstaff').add(`|raw|

Private chat room deleted by ${user.userid}: ${Chat.escapeHTML(target)}
`).update(); - } - } else { - if (Rooms.get('staff')) { - Rooms.get('staff').add('|raw|
Public chat room deleted: ' + Chat.escapeHTML(target) + '
').update(); - } - if (Rooms.get('upperstaff')) { - Rooms.get('upperstaff').add(`|raw|
Public chat room deleted by ${user.userid}: ${Chat.escapeHTML(target)}
`).update(); - } - } - } - - targetRoom.add("|raw|
This room has been deleted.
"); - targetRoom.update(); // |expire| needs to be its own message - targetRoom.add("|expire|This room has been deleted."); - this.sendReply("The room '" + target + "' was deleted."); - targetRoom.update(); - targetRoom.destroy(); - }, - deleteroomhelp: ["/deleteroom [roomname] - Deletes room [roomname]. Requires: & ~"], - - hideroom: 'privateroom', - hiddenroom: 'privateroom', - secretroom: 'privateroom', - publicroom: 'privateroom', - privateroom: function (target, room, user, connection, cmd) { - if (room.battle || room.isPersonal) { - if (!this.can('editroom', null, room)) return; - } else { - // registered chatrooms show up on the room list and so require - // higher permissions to modify privacy settings - if (!this.can('makeroom')) return; - } - let setting; - switch (cmd) { - case 'privateroom': - return this.parse('/help privateroom'); - case 'publicroom': - setting = false; - break; - case 'secretroom': - setting = true; - break; - default: - if (room.isPrivate === true && target !== 'force') { - return this.sendReply(`This room is a secret room. Use "/publicroom" to make it public, or "/hiddenroom force" to force it hidden.`); - } - setting = 'hidden'; - break; - } - - if ((setting === true || room.isPrivate === true) && !room.isPersonal) { - if (!this.can('makeroom')) return; - } - - if (target === 'off' || !setting) { - if (!room.isPrivate) { - return this.errorReply(`This room is already public.`); - } - if (room.isPersonal) return this.errorReply(`This room can't be made public.`); - if (room.privacySetter && user.can('nooverride', null, room) && !user.can('makeroom')) { - if (!room.privacySetter.has(user.userid)) { - const privacySetters = Array.from(room.privacySetter).join(', '); - return this.errorReply(`You can't make the room public since you didn't make it private - only ${privacySetters} can.`); - } - room.privacySetter.delete(user.userid); - if (room.privacySetter.size) { - const privacySetters = Array.from(room.privacySetter).join(', '); - return this.sendReply(`You are no longer forcing the room to stay private, but ${privacySetters} also need${Chat.plural(room.privacySetter, '', 's')} to use /publicroom to make the room public.`); - } - } - delete room.isPrivate; - room.privacySetter = null; - this.addModCommand(`${user.name} made this room public.`); - if (room.chatRoomData) { - delete room.chatRoomData.isPrivate; - Rooms.global.writeChatRoomData(); - } - } else { - const settingName = (setting === true ? 'secret' : setting); - if (room.isPrivate === setting) { - if (room.privacySetter && !room.privacySetter.has(user.userid)) { - room.privacySetter.add(user.userid); - return this.sendReply(`This room is already ${settingName}, but is now forced to stay that way until you use /publicroom.`); - } - return this.errorReply(`This room is already ${settingName}.`); - } - room.isPrivate = setting; - this.addModCommand(`${user.name} made this room ${settingName}.`); - if (room.chatRoomData) { - room.chatRoomData.isPrivate = setting; - Rooms.global.writeChatRoomData(); - } - room.privacySetter = new Set([user.userid]); - } - }, - 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 & ~"], - - officialchatroom: 'officialroom', - officialroom: function (target, room, user) { - if (!this.can('makeroom')) return; - if (!room.chatRoomData) { - return this.errorReply(`/officialroom - This room can't be made official`); - } - if (target === 'off') { - if (!room.isOfficial) return this.errorReply(`This chat room is already unofficial.`); - delete room.isOfficial; - this.addModCommand(`${user.name} made this chat room unofficial.`); - delete room.chatRoomData.isOfficial; - Rooms.global.writeChatRoomData(); - } else { - if (room.isOfficial) return this.errorReply(`This chat room is already official.`); - room.isOfficial = true; - this.addModCommand(`${user.name} made this chat room official.`); - room.chatRoomData.isOfficial = true; - Rooms.global.writeChatRoomData(); - } - }, - - roomdesc: function (target, room, user) { - if (!target) { - if (!this.runBroadcast()) return; - if (!room.desc) return this.sendReply(`This room does not have a description set.`); - this.sendReplyBox(Chat.html`The room description is: ${room.desc}`); - return; - } - if (!this.can('declare')) return false; - if (target.length > 80) return this.errorReply(`Error: Room description is too long (must be at most 80 characters).`); - let normalizedTarget = ' ' + target.toLowerCase().replace('[^a-zA-Z0-9]+', ' ').trim() + ' '; - - if (normalizedTarget.includes(' welcome ')) { - return this.errorReply(`Error: Room description must not contain the word "welcome".`); - } - if (normalizedTarget.slice(0, 9) === ' discuss ') { - return this.errorReply(`Error: Room description must not start with the word "discuss".`); - } - if (normalizedTarget.slice(0, 12) === ' talk about ' || normalizedTarget.slice(0, 17) === ' talk here about ') { - return this.errorReply(`Error: Room description must not start with the phrase "talk about".`); - } - - room.desc = target; - this.sendReply(`(The room description is now: ${target})`); - - this.privateModCommand(`(${user.name} changed the roomdesc to: "${target}".)`); - - if (room.chatRoomData) { - room.chatRoomData.desc = room.desc; - Rooms.global.writeChatRoomData(); - } - }, - - topic: 'roomintro', - roomintro: function (target, room, user, connection, cmd) { - if (!target) { - if (!this.runBroadcast()) return; - if (!room.introMessage) return this.sendReply("This room does not have an introduction set."); - this.sendReply('|raw|
' + room.introMessage.replace(/\n/g, '') + '
'); - if (!this.broadcasting && user.can('declare', null, room) && cmd !== 'topic') { - this.sendReply('Source:'); - this.sendReplyBox( - '/roomintro ' + Chat.escapeHTML(room.introMessage).split('\n').map(line => { - return line.replace(/^(\t+)/, (match, $1) => ' '.repeat(4 * $1.length)).replace(/^(\s+)/, (match, $1) => ' '.repeat($1.length)); - }).join('
') + '
' - ); - } - return; - } - if (!this.can('declare', null, room)) return false; - if (target === 'off' || target === 'disable' || target === 'delete') return this.errorReply('Did you mean "/deleteroomintro"?'); - target = this.canHTML(target); - if (!target) return; - if (!/$1'); - } - if (target.substr(0, 11) === '/roomintro ') target = target.substr(11); - - room.introMessage = target.replace(/\r/g, ''); - this.sendReply("(The room introduction has been changed to:)"); - this.sendReply('|raw|
' + room.introMessage.replace(/\n/g, '') + '
'); - - this.privateModCommand(`(${user.name} changed the roomintro.)`); - this.logEntry(room.introMessage.replace(/\n/g, '')); - - if (room.chatRoomData) { - room.chatRoomData.introMessage = room.introMessage; - Rooms.global.writeChatRoomData(); - } - }, - deletetopic: 'deleteroomintro', - deleteroomintro: function (target, room, user) { - if (!this.can('declare', null, room)) return false; - if (!room.introMessage) return this.errorReply("This room does not have a introduction set."); - - this.privateModCommand(`(${user.name} deleted the roomintro.)`); - this.logEntry(target); - - delete room.introMessage; - if (room.chatRoomData) { - delete room.chatRoomData.introMessage; - Rooms.global.writeChatRoomData(); - } - }, - - stafftopic: 'staffintro', - staffintro: function (target, room, user, connection, cmd) { - if (!target) { - if (!this.can('mute', null, room)) return false; - if (!room.staffMessage) return this.sendReply("This room does not have a staff introduction set."); - this.sendReply('|raw|
' + room.staffMessage.replace(/\n/g, '') + '
'); - if (user.can('ban', null, room) && cmd !== 'stafftopic') { - this.sendReply('Source:'); - this.sendReplyBox( - '/staffintro ' + Chat.escapeHTML(room.staffMessage).split('\n').map(line => { - return line.replace(/^(\t+)/, (match, $1) => ' '.repeat(4 * $1.length)).replace(/^(\s+)/, (match, $1) => ' '.repeat($1.length)); - }).join('
') + '
' - ); - } - return; - } - if (!this.can('ban', null, room)) return false; - if (!this.canTalk()) return; - if (target === 'off' || target === 'disable' || target === 'delete') return this.errorReply('Did you mean "/deletestaffintro"?'); - target = this.canHTML(target); - if (!target) return; - if (!/$1'); - } - if (target.substr(0, 12) === '/staffintro ') target = target.substr(12); - - room.staffMessage = target.replace(/\r/g, ''); - this.sendReply("(The staff introduction has been changed to:)"); - this.sendReply('|raw|
' + target.replace(/\n/g, '') + '
'); - - this.privateModCommand(`(${user.name} changed the staffintro.)`); - this.logEntry(room.staffMessage.replace(/\n/g, '')); - - if (room.chatRoomData) { - room.chatRoomData.staffMessage = room.staffMessage; - Rooms.global.writeChatRoomData(); - } - }, - deletestafftopic: 'deletestaffintro', - deletestaffintro: function (target, room, user) { - if (!this.can('ban', null, room)) return false; - if (!room.staffMessage) return this.errorReply("This room does not have a staff introduction set."); - - this.privateModCommand(`(${user.name} deleted the staffintro.)`); - this.logEntry(target); - - delete room.staffMessage; - if (room.chatRoomData) { - delete room.chatRoomData.staffMessage; - Rooms.global.writeChatRoomData(); - } - }, - - roomalias: function (target, room, user) { - if (!target) { - if (!this.runBroadcast()) return; - if (!room.aliases || !room.aliases.length) return this.sendReplyBox("This room does not have any aliases."); - return this.sendReplyBox(`This room has the following aliases: ${room.aliases.join(", ")}`); - } - if (!this.can('makeroom')) return false; - if (target.includes(',')) { - this.errorReply(`Invalid room alias: ${target.trim()}`); - return this.parse('/help roomalias'); - } - - let alias = toId(target); - if (!alias.length) return this.errorReply("Only alphanumeric characters are valid in an alias."); - if (Rooms(alias) || Rooms.aliases.has(alias)) return this.errorReply("You cannot set an alias to an existing room or alias."); - if (room.isPersonal) return this.errorReply("Personal rooms can't have aliases."); - - Rooms.aliases.set(alias, room.id); - this.privateModCommand(`(${user.name} added the room alias '${target.trim()}'.)`); - - if (!room.aliases) room.aliases = []; - room.aliases.push(alias); - if (room.chatRoomData) { - room.chatRoomData.aliases = room.aliases; - Rooms.global.writeChatRoomData(); - } - }, - 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: function (target, room, user) { - if (!room.aliases) return this.errorReply("This room does not have any aliases."); - if (!this.can('makeroom')) return false; - if (target.includes(',')) { - this.errorReply(`Invalid room alias: ${target.trim()}`); - return this.parse('/help removeroomalias'); - } - - let alias = toId(target); - if (!alias || !Rooms.aliases.has(alias)) return this.errorReply("Please specify an existing alias."); - if (Rooms.aliases.get(alias) !== room.id) return this.errorReply("You may only remove an alias from the current room."); - - this.privateModCommand(`(${user.name} removed the room alias '${target}'.)`); - - let aliasIndex = room.aliases.indexOf(alias); - if (aliasIndex >= 0) { - room.aliases.splice(aliasIndex, 1); - Rooms.aliases.delete(alias); - Rooms.global.writeChatRoomData(); - } - }, - removeroomaliashelp: ["/removeroomalias [alias] - removes the given room alias of the room the command was entered in. Requires: & ~"], - - roomowner: function (target, room, user) { - if (!room.chatRoomData) { - return this.sendReply("/roomowner - This room isn't designed for per-room moderation to be added"); - } - if (!target) return this.parse('/help roomowner'); - target = this.splitTarget(target, true); - let targetUser = this.targetUser; - let name = this.targetUsername; - let userid = toId(name); - - if (!Users.isUsernameKnown(userid)) { - return this.errorReply(`User '${this.targetUsername}' is offline and unrecognized, and so can't be promoted.`); - } - - if (!this.can('makeroom')) return false; - - if (!room.auth) room.auth = room.chatRoomData.auth = {}; - - room.auth[userid] = '#'; - this.addModCommand(`${name} was appointed Room Owner by ${user.name}.`); - if (targetUser) { - targetUser.popup(`You were appointed Room Owner by ${user.name} in ${room.id}.`); - room.onUpdateIdentity(targetUser); - } - Rooms.global.writeChatRoomData(); - }, - roomownerhelp: ["/roomowner [username] - Appoints [username] as a room owner. Requires: & ~"], - - '!roompromote': true, - roomdemote: 'roompromote', - roompromote: function (target, room, user, connection, cmd) { - if (!room) { - // this command isn't marked as room-only because it's usable in PMs through /invite - return this.errorReply("This command is only available in rooms"); - } - if (!room.auth) { - this.sendReply("/roompromote - This room isn't designed for per-room moderation"); - return this.sendReply("Before setting room staff, you need to set a room owner with /roomowner"); - } - if (!this.canTalk()) return; - if (!target) return this.parse('/help roompromote'); - - target = this.splitTarget(target, true); - let targetUser = this.targetUser; - let userid = toId(this.targetUsername); - let name = targetUser ? targetUser.name : this.targetUsername; - - if (!userid) return this.parse('/help roompromote'); - if (!targetUser && !Users.isUsernameKnown(userid)) { - return this.errorReply(`User '${name}' is offline and unrecognized, and so can't be promoted.`); - } - if (targetUser && !targetUser.registered) { - return this.errorReply(`User '${name}' is unregistered, and so can't be promoted.`); - } - - let currentGroup = room.getAuth({userid, group: (Users.usergroups[userid] || ' ').charAt(0)}); - let nextGroup = target; - if (target === 'deauth') nextGroup = Config.groupsranking[0]; - if (!nextGroup) { - return this.errorReply("Please specify a group such as /roomvoice or /roomdeauth"); - } - if (!Config.groups[nextGroup]) { - return this.errorReply(`Group '${nextGroup}' does not exist.`); - } - - if (Config.groups[nextGroup].globalonly || (Config.groups[nextGroup].battleonly && !room.battle)) { - return this.errorReply(`Group 'room${Config.groups[nextGroup].id}' does not exist as a room rank.`); - } - - let groupName = Config.groups[nextGroup].name || "regular user"; - if ((room.auth[userid] || Config.groupsranking[0]) === nextGroup) { - return this.errorReply(`User '${name}' is already a ${groupName} in this room.`); - } - if (!user.can('makeroom')) { - if (currentGroup !== ' ' && !user.can('room' + (Config.groups[currentGroup] ? Config.groups[currentGroup].id : 'voice'), null, room)) { - return this.errorReply(`/${cmd} - Access denied for promoting/demoting from ${(Config.groups[currentGroup] ? Config.groups[currentGroup].name : "an undefined group")}.`); - } - if (nextGroup !== ' ' && !user.can('room' + Config.groups[nextGroup].id, null, room)) { - return this.errorReply(`/${cmd} - Access denied for promoting/demoting to ${Config.groups[nextGroup].name}.`); - } - } - let nextGroupIndex = Config.groupsranking.indexOf(nextGroup) || 1; // assume voice if not defined (although it should be by now) - if (targetUser && targetUser.locked && !room.isPrivate && !room.battle && !room.isPersonal && nextGroupIndex >= 2) { - return this.errorReply("Locked users can't be promoted."); - } - - if (nextGroup === Config.groupsranking[0]) { - delete room.auth[userid]; - } else { - room.auth[userid] = nextGroup; - } - - // Only show popup if: user is online and in the room, the room is public, and not a groupchat or a battle. - let needsPopup = targetUser && room.users[targetUser.userid] && !room.isPrivate && !room.isPersonal && !room.battle; - - if (this.pmTarget && targetUser) { - const text = `${targetUser.name} was invited (and promoted to Room ${groupName}) by ${user.name}`; - room.add(`|c|${user.getIdentity(room)}|/log ${text}`).update(); - room.modlog(text); - } else if (nextGroup in Config.groups && currentGroup in Config.groups && Config.groups[nextGroup].rank < Config.groups[currentGroup].rank) { - if (targetUser && room.users[targetUser.userid] && !Config.groups[nextGroup].modlog) { - // if the user can't see the demotion message (i.e. rank < %), it is shown in the chat - targetUser.send(">" + room.id + "\n(You were demoted to Room " + groupName + " by " + user.name + ".)"); - } - this.privateModCommand(`(${name} was demoted to Room ${groupName} by ${user.name}.)`); - if (needsPopup) targetUser.popup(`You were demoted to Room ${groupName} by ${user.name} in ${room.id}.`); - } else if (nextGroup === '#') { - this.addModCommand(`${'' + name} was promoted to ${groupName} by ${user.name}.`); - if (needsPopup) targetUser.popup(`You were promoted to ${groupName} by ${user.name} in ${room.id}.`); - } else { - this.addModCommand(`${'' + name} was promoted to Room ${groupName} by ${user.name}.`); - if (needsPopup) targetUser.popup(`You were promoted to Room ${groupName} by ${user.name} in ${room.id}.`); - } - - if (targetUser) targetUser.updateIdentity(room.id); - if (room.chatRoomData) Rooms.global.writeChatRoomData(); - }, - roompromotehelp: [ - "/roompromote OR /roomdemote [username], [group symbol] - Promotes/demotes the user to the specified room rank. Requires: @ * # & ~", - "/room[group] [username] - Promotes/demotes the user to the specified room rank. Requires: @ * # & ~", - "/roomdeauth [username] - Removes all room rank from the user. Requires: @ * # & ~", - ], - - '!roomauth': true, - roomstaff: 'roomauth', - roomauth1: 'roomauth', - roomauth: function (target, room, user, connection, cmd) { - let userLookup = ''; - if (cmd === 'roomauth1') userLookup = '\n\nTo look up auth for a user, use /userauth ' + target; - let targetRoom = room; - if (target) targetRoom = Rooms.search(target); - if (!targetRoom || targetRoom.id === 'global' || !targetRoom.checkModjoin(user)) return this.errorReply(`The room "${target}" does not exist.`); - if (!targetRoom.auth) return this.sendReply("/roomauth - The room '" + (targetRoom.title || target) + "' isn't designed for per-room moderation and therefore has no auth list." + userLookup); - - let rankLists = {}; - for (let u in targetRoom.auth) { - if (!rankLists[targetRoom.auth[u]]) rankLists[targetRoom.auth[u]] = []; - rankLists[targetRoom.auth[u]].push(u); - } - - let buffer = Object.keys(rankLists).sort((a, b) => - (Config.groups[b] || {rank:0}).rank - (Config.groups[a] || {rank:0}).rank - ).map(r => { - let roomRankList = rankLists[r].sort(); - roomRankList = roomRankList.map(s => s in targetRoom.users ? "**" + s + "**" : s); - return (Config.groups[r] ? Config.groups[r].name + "s (" + r + ")" : r) + ":\n" + roomRankList.join(", "); - }); - - if (!buffer.length) { - connection.popup("The room '" + targetRoom.title + "' has no auth." + userLookup); - return; - } - if (targetRoom !== room) buffer.unshift("" + targetRoom.title + " room auth:"); - connection.popup(buffer.join("\n\n") + userLookup); - }, - - '!userauth': true, - userauth: function (target, room, user, connection) { - let targetId = toId(target) || user.userid; - let targetUser = Users.getExact(targetId); - let targetUsername = (targetUser ? targetUser.name : target); - - let buffer = []; - let innerBuffer = []; - let group = Users.usergroups[targetId]; - if (group) { - buffer.push('Global auth: ' + group.charAt(0)); - } - Rooms.rooms.forEach((curRoom, id) => { - if (!curRoom.auth || curRoom.isPrivate) return; - group = curRoom.auth[targetId]; - if (!group) return; - innerBuffer.push(group + id); - }); - if (innerBuffer.length) { - buffer.push('Room auth: ' + innerBuffer.join(', ')); - } - if (targetId === user.userid || user.can('lock')) { - innerBuffer = []; - Rooms.rooms.forEach((curRoom, id) => { - if (!curRoom.auth || !curRoom.isPrivate) return; - if (curRoom.isPrivate === true) return; - let auth = curRoom.auth[targetId]; - if (!auth) return; - innerBuffer.push(auth + id); - }); - if (innerBuffer.length) { - buffer.push('Hidden room auth: ' + innerBuffer.join(', ')); - } - } - if (targetId === user.userid || user.can('makeroom')) { - innerBuffer = []; - for (let i = 0; i < Rooms.global.chatRooms.length; i++) { - let curRoom = Rooms.global.chatRooms[i]; - if (!curRoom.auth || !curRoom.isPrivate) continue; - if (curRoom.isPrivate !== true) continue; - let auth = curRoom.auth[targetId]; - if (!auth) continue; - innerBuffer.push(auth + curRoom.id); - } - if (innerBuffer.length) { - buffer.push('Private room auth: ' + innerBuffer.join(', ')); - } - } - if (!buffer.length) { - buffer.push("No global or room auth."); - } - - buffer.unshift("" + targetUsername + " user auth:"); - connection.popup(buffer.join("\n\n")); - }, - - rb: 'ban', - roomban: 'ban', - b: 'ban', - ban: function (target, room, user, connection) { - if (!target) return this.parse('/help ban'); - if (!this.canTalk()) return; - - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser) return this.errorReply("User '" + this.targetUsername + "' not found."); - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); - } - if (!this.can('ban', targetUser, room)) return false; - let name = targetUser.getLastName(); - let userid = targetUser.getLastId(); - - if (Punishments.isRoomBanned(targetUser, room.id) && !target) { - let problem = " but was already banned"; - return this.privateModCommand("(" + name + " would be banned by " + user.name + problem + ".)"); - } - - if (targetUser.trusted && room.isPrivate !== true && !room.isPersonal) { - Monitor.log("[CrisisMonitor] Trusted user " + targetUser.name + (targetUser.trusted !== targetUser.userid ? " (" + targetUser.trusted + ")" : "") + " was roombanned from " + room.id + " by " + user.name + ", and should probably be demoted."); - } - - if (targetUser in room.users || user.can('lock')) { - targetUser.popup( - "|modal||html|

" + Chat.escapeHTML(user.name) + " has banned you from the room " + room.id + ".

" + (target ? "

Reason: " + Chat.escapeHTML(target) + "

" : "") + - "

To appeal the ban, PM the staff member that banned you" + (!room.battle && room.auth ? " or a room owner.

" : ".

") - ); - } - - const reason = (target ? ` (${target})` : ``); - this.addModCommand(`${name} was banned from ${room.title} by ${user.name}.${reason}`, ` (${targetUser.latestIp})`); - - let affected = Punishments.roomBan(room, targetUser, null, null, target); - - if (!room.isPrivate && room.chatRoomData) { - let acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); - if (affected.length > 1) { - this.privateModCommand("(" + name + "'s " + (acAccount ? " ac account: " + acAccount + ", " : "") + "banned alts: " + affected.slice(1).map(user => user.getLastName()).join(", ") + ")"); - } else if (acAccount) { - this.privateModCommand("(" + name + "'s ac account: " + acAccount + ")"); - } - } - this.add('|unlink|hide|' + userid); - if (userid !== toId(this.inputUsername)) this.add('|unlink|hide|' + toId(this.inputUsername)); - - if (!room.isPrivate && room.chatRoomData) { - this.globalModlog("ROOMBAN", targetUser, " by " + user.name + (target ? ": " + target : "")); - } - return true; - }, - banhelp: ["/roomban [username], [reason] - Bans the user from the room you are in. Requires: @ # & ~"], - - unroomban: 'unban', - roomunban: 'unban', - unban: function (target, room, user, connection) { - if (!target) return this.parse('/help unban'); - if (!this.can('ban', null, room)) return false; - - let name = Punishments.roomUnban(room, target); - - if (name) { - this.addModCommand("" + name + " was unbanned from " + room.title + " by " + user.name + "."); - if (!room.isPrivate && room.chatRoomData) { - this.globalModlog("UNROOMBAN", name, " by " + user.name); - } - } else { - this.errorReply("User '" + target + "' is not banned."); - } - }, - unbanhelp: ["/roomunban [username] - Unbans the user from the room you are in. Requires: @ # & ~"], - - '!autojoin': true, - autojoin: function (target, room, user, connection) { - let targets = target.split(','); - if (targets.length > 11 || connection.inRooms.size > 1) return; - Rooms.global.autojoinRooms(user, connection); - let autojoins = []; - for (let i = 0; i < targets.length; i++) { - if (user.tryJoinRoom(targets[i], connection) === null) { - autojoins.push(targets[i]); - } - } - connection.autojoins = autojoins.join(','); - }, - - '!join': true, - joim: 'join', - j: 'join', - join: function (target, room, user, connection) { - if (!target) return this.parse('/help join'); - if (target.startsWith('http://')) target = target.slice(7); - if (target.startsWith('https://')) target = target.slice(8); - if (target.startsWith('play.pokemonshowdown.com/')) target = target.slice(25); - if (target.startsWith('psim.us/')) target = target.slice(8); - if (user.tryJoinRoom(target, connection) === null) { - connection.sendTo(target, "|noinit|namerequired|The room '" + target + "' does not exist or requires a login to join."); - } - }, - joinhelp: ["/join [roomname] - Attempt to join the room [roomname]."], - - '!part': true, - leave: 'part', - part: function (target, room, user, connection) { - let targetRoom = target ? Rooms.search(target) : room; - if (!targetRoom || targetRoom === Rooms.global) { - return this.errorReply("The room '" + target + "' does not exist."); - } - user.leaveRoom(targetRoom, connection); - }, - - /********************************************************* - * Moderating: Punishments - *********************************************************/ - - kick: 'warn', - k: 'warn', - warn: function (target, room, user) { - if (!target) return this.parse('/help warn'); - if (!this.canTalk()) return; - if (room.isPersonal && !user.can('warn')) return this.errorReply("Warning is unavailable in group chats."); - - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser || !targetUser.connected) return this.errorReply("User '" + this.targetUsername + "' not found."); - if (!(targetUser in room.users)) { - return this.errorReply("User " + this.targetUsername + " is not in the room " + room.id + "."); - } - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); - } - if (!this.can('warn', targetUser, room)) return false; - - this.addModCommand("" + targetUser.name + " was warned by " + user.name + "." + (target ? " (" + target + ")" : "")); - targetUser.send('|c|~|/warn ' + target); - let userid = targetUser.getLastId(); - this.add('|unlink|' + userid); - if (userid !== toId(this.inputUsername)) this.add('|unlink|' + toId(this.inputUsername)); - }, - warnhelp: ["/warn OR /k [username], [reason] - Warns a user showing them the Pok\u00e9mon Showdown Rules and [reason] in an overlay. Requires: % @ # & ~"], - - redirect: 'redir', - redir: function (target, room, user, connection) { - if (!target) return this.parse('/help redirect'); - if (room.isPrivate || room.isPersonal) return this.errorReply("Users cannot be redirected from private or personal rooms."); - - target = this.splitTarget(target); - let targetUser = this.targetUser; - let targetRoom = Rooms.search(target); - if (!targetRoom || targetRoom.modjoin) { - return this.errorReply("The room '" + target + "' does not exist."); - } - if (!this.can('warn', targetUser, room) || !this.can('warn', targetUser, targetRoom)) return false; - if (!targetUser || !targetUser.connected) { - return this.errorReply("User " + this.targetUsername + " not found."); - } - if (targetRoom.id === "global") return this.errorReply("Users cannot be redirected to the global room."); - if (targetRoom.isPrivate || targetRoom.isPersonal) { - return this.parse('/msg ' + this.targetUsername + ', /invite ' + targetRoom.id); - } - if (targetRoom.users[targetUser.userid]) { - return this.errorReply("User " + targetUser.name + " is already in the room " + targetRoom.title + "!"); - } - if (!room.users[targetUser.userid]) { - return this.errorReply("User " + this.targetUsername + " is not in the room " + room.id + "."); - } - if (targetUser.joinRoom(targetRoom.id) === false) return this.errorReply("User " + targetUser.name + " could not be joined to room " + targetRoom.title + ". They could be banned from the room."); - this.addModCommand("" + targetUser.name + " was redirected to room " + targetRoom.title + " by " + user.name + "."); - targetUser.leaveRoom(room); - }, - redirhelp: ["/redirect OR /redir [username], [roomname] - Attempts to redirect the user [username] to the room [roomname]. Requires: % @ & ~"], - - m: 'mute', - mute: function (target, room, user, connection, cmd) { - if (!target) return this.parse('/help mute'); - if (!this.canTalk()) return; - - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser) return this.errorReply("User '" + this.targetUsername + "' not found."); - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); - } - - let muteDuration = ((cmd === 'hm' || cmd === 'hourmute') ? HOURMUTE_LENGTH : MUTE_LENGTH); - if (!this.can('mute', targetUser, room)) return false; - let canBeMutedFurther = ((room.getMuteTime(targetUser) || 0) <= (muteDuration * 5 / 6)); - if (targetUser.locked || (room.isMuted(targetUser) && !canBeMutedFurther) || Punishments.isRoomBanned(targetUser, room.id)) { - let problem = " but was already " + (targetUser.locked ? "locked" : room.isMuted(targetUser) ? "muted" : "room banned"); - if (!target) { - return this.privateModCommand("(" + targetUser.name + " would be muted by " + user.name + problem + ".)"); - } - return this.addModCommand("" + targetUser.name + " would be muted by " + user.name + problem + "." + (target ? " (" + target + ")" : "")); - } - - if (targetUser in room.users) targetUser.popup("|modal|" + user.name + " has muted you in " + room.id + " for " + Chat.toDurationString(muteDuration) + ". " + target); - this.addModCommand("" + targetUser.name + " was muted by " + user.name + " for " + Chat.toDurationString(muteDuration) + "." + (target ? " (" + target + ")" : "")); - if (targetUser.autoconfirmed && targetUser.autoconfirmed !== targetUser.userid) this.privateModCommand("(" + targetUser.name + "'s ac account: " + targetUser.autoconfirmed + ")"); - let userid = targetUser.getLastId(); - this.add('|unlink|' + userid); - if (userid !== toId(this.inputUsername)) this.add('|unlink|' + toId(this.inputUsername)); - - room.mute(targetUser, muteDuration, false); - }, - mutehelp: ["/mute OR /m [username], [reason] - Mutes a user with reason for 7 minutes. Requires: % @ * # & ~"], - - hm: 'hourmute', - hourmute: function (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: % @ * # & ~"], - - um: 'unmute', - unmute: function (target, room, user) { - if (!target) return this.parse('/help unmute'); - target = this.splitTarget(target); - if (!this.canTalk()) return; - if (!this.can('mute', null, room)) return false; - - let targetUser = this.targetUser; - let successfullyUnmuted = room.unmute(targetUser ? targetUser.userid : this.targetUsername, "Your mute in '" + room.title + "' has been lifted."); - - if (successfullyUnmuted) { - this.addModCommand("" + (targetUser ? targetUser.name : successfullyUnmuted) + " was unmuted by " + user.name + "."); - } else { - this.errorReply("" + (targetUser ? targetUser.name : this.targetUsername) + " is not muted."); - } - }, - unmutehelp: ["/unmute [username] - Removes mute from user. Requires: % @ * # & ~"], - - forcelock: 'lock', - l: 'lock', - ipmute: 'lock', - wl: 'lock', - weeklock: 'lock', - lock: function (target, room, user, connection, cmd) { - let week = cmd === 'wl' || cmd === 'weeklock'; - - if (!target) { - if (week) return this.parse('/help weeklock'); - return this.parse('/help lock'); - } - - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser && !Punishments.search(toId(this.targetUsername))[0].length) return this.errorReply(`User '${this.targetUsername}' not found.`); - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); - } - if (!this.can('lock', targetUser)) return false; - - let name, userid; - - if (targetUser) { - name = targetUser.getLastName(); - userid = targetUser.getLastId(); - - if (targetUser.locked && !target) { - return this.privateModCommand(`(${name} would be locked by ${user.name} but was already locked.)`); - } - - if (targetUser.trusted) { - if (cmd === 'forcelock') { - let from = targetUser.distrust(); - Monitor.log(`[CrisisMonitor] ${name} was locked by ${user.name} and demoted from ${from.join(", ")}.`); - this.globalModlog("CRISISDEMOTE", targetUser, ` from ${from.join(", ")}`); - } else { - return this.sendReply(`${name} is a trusted user. If you are sure you would like to lock them use /forcelock.`); - } - } else if (cmd === 'forcelock') { - return this.errorReply(`Use /lock; ${name} is not a trusted user.`); - } - - let roomauth = []; - Rooms.rooms.forEach((curRoom, id) => { - if (id === 'global' || !curRoom.auth) return; - // Destroy personal rooms of the locked user. - if (curRoom.isPersonal && curRoom.auth[userid] === '#') { - curRoom.destroy(); - } else { - if (curRoom.isPrivate || curRoom.battle) return; - - let group = curRoom.auth[userid]; - - if (group) roomauth.push(`${group}${id}`); - } - }); - - if (roomauth.length) Monitor.log(`[CrisisMonitor] Locked user ${name} has public roomauth (${roomauth.join(', ')}), and should probably be demoted.`); - } else { - name = this.targetUsername; - userid = toId(this.targetUsername); - } - - let proof = ''; - let userReason = target; - let targetLowercase = target.toLowerCase(); - if (target && (targetLowercase.includes('spoiler:') || targetLowercase.includes('spoilers:'))) { - let proofIndex = (targetLowercase.includes('spoilers:') ? targetLowercase.indexOf('spoilers:') : targetLowercase.indexOf('spoiler:')); - let bump = (targetLowercase.includes('spoilers:') ? 9 : 8); - proof = `(PROOF: ${target.substr(proofIndex + bump, target.length).trim()}) `; - userReason = target.substr(0, proofIndex).trim(); - } - - let weekMsg = week ? ' for a week' : ''; - - if (targetUser) { - targetUser.popup(`|modal|${user.name} has locked you from talking in chats, battles, and PMing regular users${weekMsg}.` + (userReason ? `\n\nReason: ${userReason}` : "") + `\n\nIf you feel that your lock was unjustified, you can still PM staff members (%, @, &, and ~) to discuss it` + (Config.appealurl ? ` or you can appeal:\n${Config.appealurl}` : ".") + `\n\nYour lock will expire in a few days.`); - } - - let lockMessage = `${name} was locked from talking${weekMsg} by ${user.name}.` + (userReason ? ` (${userReason})` : ""); - - this.addModCommand(lockMessage, ` ${proof}` + (targetUser ? `(${targetUser.latestIp})` : '')); - - // Notify staff room when a user is locked outside of it. - if (room.id !== 'staff' && Rooms('staff')) { - Rooms('staff').addLogMessage(user, `<<${room.id}>> ${lockMessage}`); - } - - // Use default time for locks. - let duration = week ? Date.now() + 7 * 24 * 60 * 60 * 1000 : null; - let affected = []; - - if (targetUser) { - affected = Punishments.lock(targetUser, duration, null, userReason); - } else { - affected = Punishments.lock(null, duration, userid, userReason); - } - - let acAccount = (targetUser && targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); - if (affected.length > 1) { - this.privateModCommand(`(${name}'s ` + (acAccount ? ` ac account: ${acAccount}, ` : "") + `locked alts: ${affected.slice(1).map(user => user.getLastName()).join(", ")})`); - } else if (acAccount) { - this.privateModCommand(`(${name}'s ac account: ${acAccount})`); - } - this.add(`|unlink|hide|${userid}`); - if (userid !== toId(this.inputUsername)) this.add(`|unlink|hide|${toId(this.inputUsername)}`); - - const globalReason = (target ? `: ${userReason} ${proof}` : ``); - this.globalModlog((week ? "WEEKLOCK" : "LOCK"), targetUser || userid, ` by ${user.name}${globalReason}`); - return true; - }, - lockhelp: [ - "/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: [proof] - Marks proof in modlog only.", - ], - - unlock: function (target, room, user) { - if (!target) return this.parse('/help unlock'); - if (!this.can('lock')) return false; - - let targetUser = Users.get(target); - if (targetUser && targetUser.namelocked) { - return this.errorReply(`User ${targetUser.name} is namelocked, not locked. Use /unnamelock to unnamelock them.`); - } - let reason = ''; - if (targetUser && targetUser.locked && targetUser.locked.charAt(0) === '#') { - reason = ' (' + targetUser.locked + ')'; - } - - let unlocked = Punishments.unlock(target); - - if (unlocked) { - const unlockMessage = unlocked.join(", ") + " " + ((unlocked.length > 1) ? "were" : "was") + - " unlocked by " + user.name + "." + reason; - this.addModCommand(unlockMessage); - // Notify staff room when a user is unlocked outside of it. - if (!reason && room.id !== 'staff' && Rooms('staff')) { - Rooms('staff').addLogMessage(user, "<<" + room.id + ">> " + unlockMessage); - } - if (!reason) this.globalModlog("UNLOCK", target, " by " + user.name); - if (targetUser) targetUser.popup("" + user.name + " has unlocked you."); - } else { - this.errorReply("User '" + target + "' is not locked."); - } - }, - unlockhelp: ["/unlock [username] - Unlocks the user. Requires: % @ * & ~"], - - forceglobalban: 'globalban', - gban: 'globalban', - globalban: function (target, room, user, connection, cmd) { - if (!target) return this.parse('/help globalban'); - - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser) return this.errorReply("User '" + this.targetUsername + "' not found."); - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); - } - if (!target) { - return this.errorReply("Global bans require a reason."); - } - if (!this.can('ban', targetUser)) return false; - let name = targetUser.getLastName(); - let userid = targetUser.getLastId(); - - if (targetUser.trusted) { - if (cmd === 'forceglobalban') { - let from = targetUser.distrust(); - Monitor.log("[CrisisMonitor] " + name + " was globally banned by " + user.name + " and demoted from " + from.join(", ") + "."); - this.globalModlog("CRISISDEMOTE", targetUser, " from " + from.join(", ")); - } else { - return this.sendReply("" + name + " is a trusted user. If you are sure you would like to ban them use /forceglobalban."); - } - } else if (cmd === 'forceglobalban') { - return this.errorReply("Use /globalban; " + name + " is not a trusted user."); - } - - // Destroy personal rooms of the banned user. - targetUser.inRooms.forEach(roomid => { - if (roomid === 'global') return; - let targetRoom = Rooms.get(roomid); - if (targetRoom.isPersonal && targetRoom.auth[userid] === '#') { - targetRoom.destroy(); - } - }); - - let proof = ''; - let userReason = target; - let targetLowercase = target.toLowerCase(); - if (target && (targetLowercase.includes('spoiler:') || targetLowercase.includes('spoilers:'))) { - let proofIndex = (targetLowercase.includes('spoilers:') ? targetLowercase.indexOf('spoilers:') : targetLowercase.indexOf('spoiler:')); - let bump = (targetLowercase.includes('spoilers:') ? 9 : 8); - proof = `(PROOF: ${target.substr(proofIndex + bump, target.length).trim()}) `; - userReason = target.substr(0, proofIndex).trim(); - } - - targetUser.popup("|modal|" + user.name + " has globally banned you." + (userReason ? "\n\nReason: " + userReason : "") + (Config.appealurl ? "\n\nIf you feel that your ban was unjustified, you can appeal:\n" + Config.appealurl : "") + "\n\nYour ban will expire in a few days."); - - let banMessage = "" + name + " was globally banned by " + user.name + "." + (userReason ? " (" + userReason + ")" : ""); - this.addModCommand(banMessage, ` ${proof}(${targetUser.latestIp})`); - - // Notify staff room when a user is banned outside of it. - if (room.id !== 'staff' && Rooms('staff')) { - Rooms('staff').addLogMessage(user, "<<" + room.id + ">> " + banMessage); - } - - let affected = Punishments.ban(targetUser, null, null, userReason); - let acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); - if (affected.length > 1) { - let guests = affected.length - 1; - affected = affected.slice(1).map(user => user.getLastName()).filter(alt => alt.substr(0, 7) !== '[Guest '); - guests -= affected.length; - this.privateModCommand("(" + name + "'s " + (acAccount ? " ac account: " + acAccount + ", " : "") + "banned alts: " + affected.join(", ") + (guests ? " [" + guests + " guests]" : "") + ")"); - for (let i = 0; i < affected.length; ++i) { - this.add('|unlink|' + toId(affected[i])); - } - } else if (acAccount) { - this.privateModCommand("(" + name + "'s ac account: " + acAccount + ")"); - } - - this.add('|unlink|hide|' + userid); - if (userid !== toId(this.inputUsername)) this.add('|unlink|hide|' + toId(this.inputUsername)); - - const globalReason = (target ? `: ${userReason} ${proof}` : ``); - this.globalModlog("BAN", targetUser, ` by ${user.name}${globalReason}`); - 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] spoiler: [proof] - Marks proof in modlog only.", - ], - - globalunban: 'unglobalban', - unglobalban: function (target, room, user) { - if (!target) return this.parse(`/help unglobalban`); - if (!this.can('ban')) return false; - - let name = Punishments.unban(target); - - let unbanMessage = `${name} was globally unbanned by ${user.name}.`; - - if (name) { - this.addModCommand(unbanMessage); - // Notify staff room when a user is unbanned outside of it. - if (room.id !== 'staff' && Rooms('staff')) { - Rooms('staff').addLogMessage(user, `<<${room.id}>> ${unbanMessage}`); - } - this.globalModlog("UNBAN", name, ` by ${user.name}`); - } else { - this.errorReply(`User '${target}' is not globally banned.`); - } - }, - unglobalbanhelp: ["/unglobalban [username] - Unban a user. Requires: @ * & ~"], - - unbanall: function (target, room, user) { - if (!this.can('rangeban')) return false; - if (!target) { - user.lastCommand = '/unbanall'; - this.errorReply("THIS WILL UNBAN AND UNLOCK ALL USERS."); - this.errorReply("To confirm, use: /unbanall confirm"); - return; - } - if (user.lastCommand !== '/unbanall' || target !== 'confirm') { - return this.parse('/help unbanall'); - } - user.lastCommand = ''; - Punishments.userids.clear(); - Punishments.ips.clear(); - Punishments.savePunishments(); - this.addModCommand("All bans and locks have been lifted by " + user.name + "."); - }, - unbanallhelp: ["/unbanall - Unban all IP addresses. Requires: & ~"], - - deroomvoiceall: function (target, room, user) { - if (!this.can('editroom', null, room)) return false; - if (!room.auth) return this.errorReply("Room does not have roomauth."); - if (!target) { - user.lastCommand = '/deroomvoiceall'; - this.errorReply("THIS WILL DEROOMVOICE ALL ROOMVOICED USERS."); - this.errorReply("To confirm, use: /deroomvoiceall confirm"); - return; - } - if (user.lastCommand !== '/deroomvoiceall' || target !== 'confirm') { - return this.parse('/help deroomvoiceall'); - } - user.lastCommand = ''; - let count = 0; - for (let userid in room.auth) { - if (room.auth[userid] === '+') { - delete room.auth[userid]; - if (userid in room.users) room.users[userid].updateIdentity(room.id); - count++; - } - } - if (!count) { - return this.sendReply("(This room has zero roomvoices)"); - } - if (room.chatRoomData) { - Rooms.global.writeChatRoomData(); - } - this.addModCommand("All " + count + " roomvoices have been cleared by " + user.name + "."); - }, - deroomvoiceallhelp: ["/deroomvoiceall - Devoice all roomvoiced users. Requires: # & ~"], - - rangeban: 'banip', - banip: function (target, room, user) { - target = this.splitTargetText(target); - let targetIp = this.targetUsername.trim(); - if (!targetIp || !/^[0-9.]+(?:\.\*)?$/.test(targetIp)) return this.parse('/help banip'); - if (!target) return this.errorReply("/banip requires a ban reason"); - - if (!this.can('rangeban')) return false; - const targetDesc = "IP " + (targetIp.endsWith('*') ? "range " : "") + targetIp; - - const curPunishment = Punishments.ipSearch(targetIp); - if (curPunishment && curPunishment[0] === 'BAN') { - return this.errorReply(`The ${targetDesc} is already temporarily banned.`); - } - Punishments.banRange(targetIp, target); - this.addModCommand(`${user.name} hour-banned the ${targetDesc}: ${target}`); - }, - baniphelp: ["/banip [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: & ~"], - - unrangeban: 'unbanip', - unbanip: function (target, room, user) { - target = target.trim(); - if (!target) { - return this.parse('/help unbanip'); - } - if (!this.can('rangeban')) return false; - if (!Punishments.ips.has(target)) { - return this.errorReply("" + target + " is not a locked/banned IP or IP range."); - } - Punishments.ips.delete(target); - this.addModCommand("" + user.name + " unbanned the " + (target.charAt(target.length - 1) === '*' ? "IP range" : "IP") + ": " + target); - }, - unbaniphelp: ["/unbanip [ip] - Unbans. Accepts wildcards to ban ranges. Requires: & ~"], - - rangelock: 'lockip', - lockip: function (target, room, user) { - target = this.splitTargetText(target); - let targetIp = this.targetUsername.trim(); - if (!targetIp || !/^[0-9.]+(?:\.\*)?$/.test(targetIp)) return this.parse('/help lockip'); - if (!target) return this.errorReply("/lockip requires a lock reason"); - - if (!this.can('rangeban')) return false; - const targetDesc = "IP " + (targetIp.endsWith('*') ? "range " : "") + targetIp; - - const curPunishment = Punishments.ipSearch(targetIp); - if (curPunishment && (curPunishment[0] === 'BAN' || curPunishment[0] === 'LOCK')) { - const punishDesc = curPunishment[0] === 'BAN' ? `temporarily banned` : `temporarily locked`; - return this.errorReply(`The ${targetDesc} is already ${punishDesc}.`); - } - - Punishments.lockRange(targetIp, target); - this.addModCommand(`${user.name} hour-locked the ${targetDesc}: ${target}`); - }, - lockiphelp: ["/lockip [ip] - Globally locks this IP or IP range for an hour. Accepts wildcards to ban ranges. Existing users on the IP will not be banned. Requires: & ~"], - - unrangelock: 'unlockip', - rangeunlock: 'unlockip', - unlockip: function (target, room, user) { - target = target.trim(); - if (!target) { - return this.parse('/help unbanip'); - } - if (!this.can('rangeban')) return false; - if (!Punishments.ips.has(target)) { - return this.errorReply("" + target + " is not a locked/banned IP or IP range."); - } - Punishments.ips.delete(target); - this.addModCommand("" + user.name + " unlocked the " + (target.charAt(target.length - 1) === '*' ? "IP range" : "IP") + ": " + target); - }, - - /********************************************************* - * Moderating: Other - *********************************************************/ - - mn: 'modnote', - modnote: function (target, room, user, connection) { - if (!target) return this.parse('/help modnote'); - if (!this.canTalk()) return; - - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply("The note is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); - } - if (!this.can('receiveauthmessages', null, room)) return false; - return this.privateModCommand("(" + user.name + " notes: " + target + ")"); - }, - modnotehelp: ["/modnote [note] - Adds a moderator note that can be read through modlog. Requires: % @ * # & ~"], - - globalpromote: 'promote', - promote: function (target, room, user, connection, cmd) { - if (!target) return this.parse('/help promote'); - - target = this.splitTarget(target, true); - let targetUser = this.targetUser; - let userid = toId(this.targetUsername); - let name = targetUser ? targetUser.name : this.targetUsername; - - if (!userid) return this.parse('/help promote'); - - let currentGroup = ((targetUser && targetUser.group) || Users.usergroups[userid] || ' ')[0]; - let nextGroup = target; - if (target === 'deauth') nextGroup = Config.groupsranking[0]; - if (!nextGroup) { - return this.errorReply("Please specify a group such as /globalvoice or /globaldeauth"); - } - if (!Config.groups[nextGroup]) { - return this.errorReply(`Group '${nextGroup}' does not exist.`); - } - if (!cmd.startsWith('global')) { - let groupid = Config.groups[nextGroup].id; - if (!groupid && nextGroup === Config.groupsranking[0]) groupid = 'deauth'; - if (Config.groups[nextGroup].globalonly) return this.errorReply(`Did you mean "/global${groupid}"?`); - if (Config.groups[nextGroup].roomonly) return this.errorReply(`Did you mean "/room${groupid}"?`); - return this.errorReply(`Did you mean "/room${groupid}" or "/global${groupid}"?`); - } - if (Config.groups[nextGroup].roomonly || Config.groups[nextGroup].battleonly) { - return this.errorReply(`Group '${nextGroup}' does not exist as a global rank.`); - } - - let groupName = Config.groups[nextGroup].name || "regular user"; - if (currentGroup === nextGroup) { - return this.errorReply(`User '${name}' is already a ${groupName}`); - } - if (!user.canPromote(currentGroup, nextGroup)) { - return this.errorReply(`/${cmd} - Access denied.`); - } - - if (!Users.isUsernameKnown(userid)) { - return this.errorReply(`/globalpromote - WARNING: '${name}' is offline and unrecognized. The username might be misspelled (either by you or the person who told you) or unregistered. Use /forcepromote if you're sure you want to risk it.`); - } - if (targetUser && !targetUser.registered) { - return this.errorReply(`User '${name}' is unregistered, and so can't be promoted.`); - } - Users.setOfflineGroup(name, nextGroup); - if (Config.groups[nextGroup].rank < Config.groups[currentGroup].rank) { - this.privateModCommand(`(${name} was demoted to ${groupName} by ${user.name}.)`); - if (targetUser) targetUser.popup(`You were demoted to ${groupName} by ${user.name}.`); - } else { - this.addModCommand(`${name} was promoted to ${groupName} by ${user.name}.`); - if (targetUser) targetUser.popup(`You were promoted to ${groupName} by ${user.name}.`); - } - - if (targetUser) targetUser.updateIdentity(); - }, - promotehelp: ["/promote [username], [group] - Promotes the user to the specified group. Requires: & ~"], - - confirmuser: 'trustuser', - trustuser: function (target) { - if (!target) return this.parse('/help trustuser'); - if (!this.can('promote')) return; - - target = this.splitTarget(target, true); - let targetUser = this.targetUser; - let userid = toId(this.targetUsername); - let name = targetUser ? targetUser.name : this.targetUsername; - - if (!userid) return this.parse('/help trustuser'); - if (!targetUser) return this.errorReply("User '" + name + "' is not online."); - - if (targetUser.trusted) return this.errorReply("User '" + name + "' is already trusted."); - - targetUser.setGroup(Config.groupsranking[0], true); - this.sendReply("User '" + name + "' is now trusted."); - }, - trustuserhelp: ["/trustuser [username] - Trusts the user (makes them immune to locks). Requires: & ~"], - - globaldemote: 'demote', - demote: function (target) { - if (!target) return this.parse('/help demote'); - this.run('promote'); - }, - demotehelp: ["/demote [username], [group] - Demotes the user to the specified group. Requires: & ~"], - - forcepromote: function (target, room, user) { - // warning: never document this command in /help - if (!this.can('forcepromote')) return false; - target = this.splitTarget(target, true); - let name = this.targetUsername; - let nextGroup = target; - if (!Config.groups[nextGroup]) return this.errorReply("Group '" + nextGroup + "' does not exist."); - if (Config.groups[nextGroup].roomonly || Config.groups[nextGroup].battleonly) return this.errorReply(`Group '${nextGroup}' does not exist as a global rank.`); - - if (Users.isUsernameKnown(name)) { - return this.errorReply("/forcepromote - Don't forcepromote unless you have to."); - } - Users.setOfflineGroup(name, nextGroup); - - this.addModCommand("" + name + " was promoted to " + (Config.groups[nextGroup].name || "regular user") + " by " + user.name + "."); - }, - - devoice: 'deauth', - deauth: function (target, room, user) { - return this.parse('/demote ' + target + ', deauth'); - }, - - deglobalvoice: 'globaldeauth', - deglobalauth: 'globaldeauth', - globaldevoice: 'globaldeauth', - globaldeauth: function (target, room, user) { - return this.parse('/globaldemote ' + target + ', deauth'); - }, - - deroomvoice: 'roomdeauth', - roomdevoice: 'roomdeauth', - deroomauth: 'roomdeauth', - roomdeauth: function (target, room, user) { - return this.parse('/roomdemote ' + target + ', deauth'); - }, - - declare: function (target, room, user) { - if (!target) return this.parse('/help declare'); - if (!this.can('declare', null, room)) return false; - if (!this.canTalk()) return; - if (target.length > 2000) return this.errorReply("Declares should not exceed 2000 characters."); - - this.add(`|notify|${room.title} announcement!|${target}`); - this.add(Chat.html`|raw|
${target}
`); - this.logModCommand(`${user.name} declared: ${target}`); - }, - declarehelp: ["/declare [message] - Anonymously announces a message. Requires: # * & ~"], - - htmldeclare: function (target, room, user) { - if (!target) return this.parse('/help htmldeclare'); - if (!this.can('gdeclare', null, room)) return false; - if (!this.canTalk()) return; - target = this.canHTML(target); - if (!target) return; - - this.add(`|notify|${room.title} announcement!|${Chat.stripHTML(target)}`); - this.add(`|raw|
${target}
`); - this.logModCommand(`${user.name} HTML-declared: ${target}`); - }, - htmldeclarehelp: ["/htmldeclare [message] - Anonymously announces a message using safe HTML. Requires: ~"], - - gdeclare: 'globaldeclare', - globaldeclare: function (target, room, user) { - if (!target) return this.parse('/help globaldeclare'); - if (!this.can('gdeclare')) return false; - target = this.canHTML(target); - if (!target) return; - - Rooms.rooms.forEach((curRoom, id) => { - if (id !== 'global') curRoom.addRaw(`
${target}
`).update(); - }); - Users.users.forEach(u => { - if (u.connected) u.send(`|pm|~|${u.group}${u.name}|/raw
${target}
`); - }); - this.logModCommand(`${user.name} globally declared: ${target}`); - }, - globaldeclarehelp: ["/globaldeclare [message] - Anonymously announces a message to every room on the server. Requires: ~"], - - cdeclare: 'chatdeclare', - chatdeclare: function (target, room, user) { - if (!target) return this.parse('/help chatdeclare'); - if (!this.can('gdeclare')) return false; - target = this.canHTML(target); - if (!target) return; - - Rooms.rooms.forEach((curRoom, id) => { - if (id !== 'global' && curRoom.type !== 'battle') curRoom.addRaw(`
${target}
`).update(); - }); - this.logModCommand(`${user.name} declared to all chat rooms: ${target}`); - }, - chatdeclarehelp: ["/cdeclare [message] - Anonymously announces a message to all chatrooms on the server. Requires: ~"], - - '!announce': true, - wall: 'announce', - announce: function (target, room, user) { - if (!target) return this.parse('/help announce'); - - if (room && !this.can('announce', null, room)) return false; - - target = this.canTalk(target); - if (!target) return; - - return '/announce ' + target; - }, - announcehelp: ["/announce OR /wall [message] - Makes an announcement. Requires: % @ * # & ~"], - - fr: 'forcerename', - forcerename: function (target, room, user) { - if (!target) return this.parse('/help forcerename'); - - let reason = this.splitTarget(target, true); - let targetUser = this.targetUser; - if (!targetUser) { - this.splitTarget(target); - if (this.targetUser) { - return this.errorReply("User has already changed their name to '" + this.targetUser.name + "'."); - } - return this.errorReply("User '" + target + "' not found."); - } - if (!this.can('forcerename', targetUser)) return false; - - let entry = targetUser.name + " was forced to choose a new name by " + user.name + (reason ? ": " + reason : ""); - this.privateModCommand("(" + entry + ")"); - Matchmaker.cancelSearch(targetUser); - targetUser.resetName(true); - targetUser.send("|nametaken||" + user.name + " considers your name inappropriate" + (reason ? ": " + reason : ".")); - return true; - }, - forcerenamehelp: ["/forcerename OR /fr [username], [reason] - Forcibly change a user's name and shows them the [reason]. Requires: % @ * & ~"], - - nl: 'namelock', - namelock: function (target, room, user) { - if (!target) return this.parse('/help namelock'); - - let reason = this.splitTarget(target, true); - let targetUser = this.targetUser; - - if (!targetUser) { - return this.errorReply(`User '${this.targetUsername}' not found.`); - } - if (!this.can('forcerename', targetUser)) return false; - if (targetUser.namelocked) return this.errorReply(`User '${target}' is already namelocked.`); - - let reasonText = reason ? ` (${reason})` : `.`; - let lockMessage = `${targetUser.name} was namelocked by ${user.name}${reasonText}`; - this.addModCommand(lockMessage, ` (${targetUser.latestIp})`); - - // Notify staff room when a user is locked outside of it. - if (room.id !== 'staff' && Rooms('staff')) { - Rooms('staff').addLogMessage(user, "<<" + room.id + ">> " + lockMessage); - } - - this.globalModlog("NAMELOCK", targetUser, ` by ${user.name}${reasonText}`); - Matchmaker.cancelSearch(targetUser); - Punishments.namelock(targetUser, null, null, reason); - targetUser.popup(`|modal|${user.name} has locked your name and you can't change names anymore${reasonText}`); - return true; - }, - namelockhelp: ["/namelock OR /nl [username], [reason] - Name locks a user and shows them the [reason]. Requires: % @ * & ~"], - - unl: 'unnamelock', - unnamelock: function (target, room, user) { - if (!target) return this.parse('/help unnamelock'); - if (!this.can('forcerename')) return false; - - let targetUser = Users.get(target); - let reason = ''; - if (targetUser && targetUser.namelocked) { - reason = ' (' + targetUser.namelocked + ')'; - } - - let unlocked = Punishments.unnamelock(target); - - if (unlocked) { - this.addModCommand(unlocked + " was unnamelocked by " + user.name + "." + reason); - if (!reason) this.globalModlog("UNNAMELOCK", target, " by " + user.name); - if (targetUser) targetUser.popup("" + user.name + " has unnamelocked you."); - } else { - this.errorReply("User '" + target + "' is not namelocked."); - } - }, - unnamelockhelp: ["/unnamelock [username] - Unnamelocks the user. Requires: % @ * & ~"], - - hidetextalts: 'hidetext', - hidealtstext: 'hidetext', - hidetext: function (target, room, user, connection, cmd) { - if (!target) return this.parse('/help hidetext'); - - this.splitTarget(target); - let targetUser = this.targetUser; - let name = this.targetUsername; - if (!targetUser) return this.errorReply("User '" + name + "' not found."); - let userid = targetUser.getLastId(); - let hidetype = ''; - if (!user.can('lock', targetUser) && !this.can('ban', targetUser, room)) return false; - - if (targetUser.locked || Punishments.isRoomBanned(targetUser, room.id) || user.can('rangeban')) { - hidetype = 'hide|'; - } else { - return this.errorReply("User '" + name + "' is not banned from this room or locked."); - } - - if (cmd === 'hidealtstext' || cmd === 'hidetextalts') { - this.addModCommand(`${targetUser.name}'s alts' messages were cleared from ${room.title} by ${user.name}.`); - this.add(`|unlink|${hidetype}${userid}`); - - const alts = targetUser.getAltUsers(true); - for (let i = 0; i < alts.length; ++i) { - this.add(`|unlink|${hidetype}${alts[i].name}`); - } - for (let i in targetUser.prevNames) { - this.add(`|unlink|${hidetype}${targetUser.prevNames[i]}`); - } - } else { - this.addModCommand("" + targetUser.name + "'s messages were cleared from " + room.title + " by " + user.name + "."); - this.add('|unlink|' + hidetype + userid); - if (userid !== toId(this.inputUsername)) this.add('|unlink|' + hidetype + toId(this.inputUsername)); - } - }, - hidetexthelp: [ - "/hidetext [username] - Removes a locked or banned user's messages from chat (includes users banned from the room). Requires: % (global only), @ * # & ~", - "/hidealtstext OR /hidetextalts [username] - Removes a locked or banned user's messages, and their alternate account's messages from the chat (includes users banned from the room). Requires: % (global only), @ * # & ~", - ], - - ab: 'blacklist', - blacklist: function (target, room, user) { - if (!target) return this.parse('/help blacklist'); - if (!this.canTalk()) return; - if (toId(target) === 'show') return this.errorReply("You're looking for /showbl"); - - target = this.splitTarget(target); - const targetUser = this.targetUser; - if (!targetUser) return this.errorReply("User '" + this.targetUsername + "' not found."); - if (!this.can('editroom', targetUser, room)) return false; - if (!room.chatRoomData) { - return this.errorReply("This room is not going to last long enough for a blacklist to matter - just ban the user"); - } - let punishment = Punishments.isRoomBanned(targetUser, room.id); - if (punishment && punishment[0] === 'BLACKLIST') { - return this.errorReply("This user is already blacklisted from this room."); - } - - if (!target) { - return this.errorReply("Blacklists require a reason."); - } - if (target.length > MAX_REASON_LENGTH) { - return this.errorReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); - } - const name = targetUser.getLastName(); - const userid = targetUser.getLastId(); - - if (targetUser.trusted && room.isPrivate !== true) { - Monitor.log("[CrisisMonitor] Trusted user " + targetUser.name + (targetUser.trusted !== targetUser.userid ? " (" + targetUser.trusted + ")" : "") + " was blacklisted from " + room.id + " by " + user.name + ", and should probably be demoted."); - } - - if (targetUser in room.users || user.can('lock')) { - targetUser.popup( - "|modal||html|

" + Chat.escapeHTML(user.name) + " has blacklisted you from the room " + room.id + ".

" + (target ? "

Reason: " + Chat.escapeHTML(target) + "

" : "") + - "

To appeal the ban, PM the staff member that blacklisted you" + (!room.battle && room.auth ? " or a room owner.

" : ".

") - ); - } - - this.addModCommand(`${name} was blacklisted from ${room.title} by ${user.name}. ${(target ? ` (${target})` : ``)}`, ` (${targetUser.latestIp})`); - - let affected = Punishments.roomBlacklist(room, targetUser, null, null, target); - - if (!room.isPrivate && room.chatRoomData) { - let acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); - if (affected.length > 1) { - this.privateModCommand("(" + name + "'s " + (acAccount ? " ac account: " + acAccount + ", " : "") + "blacklisted alts: " + affected.slice(1).map(user => user.getLastName()).join(", ") + ")"); - } else if (acAccount) { - this.privateModCommand("(" + name + "'s ac account: " + acAccount + ")"); - } - } - this.add('|unlink|hide|' + userid); - if (userid !== toId(this.inputUsername)) this.add('|unlink|hide|' + toId(this.inputUsername)); - - if (!room.isPrivate && room.chatRoomData) { - this.globalModlog("BLACKLIST", targetUser, " by " + user.name + (target ? ": " + target : "")); - } - return true; - }, - blacklisthelp: ["/blacklist [username], [reason] - Blacklists the user from the room you are in for a year. Requires: # & ~"], - - nameblacklist: 'blacklistname', - blacklistname: function (target, room, user) { - if (!target) return this.parse('/help blacklistname'); - if (!this.canTalk()) return; - if (!this.can('editroom', null, room)) return false; - if (!room.chatRoomData) { - return this.errorReply("This room is not going to last long enough for a blacklist to matter - just ban the user"); - } - - let [targetStr, reason] = target.split('|').map(val => val.trim()); - if (!(targetStr && reason)) return this.errorReply("Usage: /blacklistname name1, name2, ... | reason"); - - let targets = targetStr.split(',').map(s => toId(s)); - - let duplicates = targets.filter(userid => { - let punishment = Punishments.roomUserids.nestedGet(room.id, userid); - return punishment && punishment[0] === 'BLACKLIST'; - }); - if (duplicates.length) { - return this.errorReply(`[${duplicates.join(', ')}] ${Chat.plural(duplicates, "are", "is")} already blacklisted.`); - } - - for (let i = 0; i < targets.length; i++) { - let userid = targets[i]; - - Punishments.roomBlacklist(room, null, null, userid, reason); - - let trusted = Users.isTrusted(userid); - if (trusted && room.isPrivate !== true) { - Monitor.log("[CrisisMonitor] Trusted user " + userid + (trusted !== userid ? " (" + trusted + ")" : "") + " was nameblacklisted from " + room.id + " by " + user.name + ", and should probably be demoted."); - } - } - - this.addModCommand(`${targets.join(', ')}${(targets.length > 1 ? " were" : " was")} nameblacklisted from ${room.title} by ${user.name}.`); - return true; - }, - blacklistnamehelp: ["/blacklistname OR /nameblacklist [username1, username2, etc.] | reason - Blacklists the given username(s) from the room you are in for a year. Requires: # & ~"], - - unab: 'unblacklist', - unblacklist: function (target, room, user) { - if (!target) return this.parse('/help unblacklist'); - if (!this.can('editroom', null, room)) return false; - - const name = Punishments.roomUnblacklist(room, target); - - if (name) { - this.addModCommand("" + name + " was unblacklisted by " + user.name + "."); - if (!room.isPrivate && room.chatRoomData) { - this.globalModlog("UNBLACKLIST", name, " by " + user.name); - } - } else { - this.errorReply("User '" + target + "' is not blacklisted."); - } - }, - unblacklisthelp: ["/unblacklist [username] - Unblacklists the user from the room you are in. Requires: # & ~"], - - unblacklistall: function (target, room, user) { - if (!this.can('editroom', null, room)) return false; - - if (!target) { - user.lastCommand = '/unblacklistall'; - this.errorReply("THIS WILL UNBLACKLIST ALL BLACKLISTED USERS IN THIS ROOM."); - this.errorReply("To confirm, use: /unblacklistall confirm"); - return; - } - if (user.lastCommand !== '/unblacklistall' || target !== 'confirm') { - return this.parse('/help unblacklistall'); - } - user.lastCommand = ''; - let unblacklisted = Punishments.roomUnblacklistAll(room); - if (!unblacklisted) return this.errorReply("No users are currently blacklisted in this room to unblacklist."); - this.addModCommand(`All blacklists in this room have been lifted by ${user.name}.`); - this.logEntry(`Unblacklisted users: ${unblacklisted.join(', ')}`); - }, - unblacklistallhelp: ["/unblacklistall - Unblacklists all blacklisted users in the current room. Requires #, &, ~"], - - expiringbls: 'showblacklist', - expiringblacklists: 'showblacklist', - blacklists: 'showblacklist', - showbl: 'showblacklist', - showblacklist: function (target, room, user, connection, cmd) { - if (target) room = Rooms.search(target); - if (!room) return this.errorReply(`The room "${target}" was not found.`); - if (!this.can('mute', null, room)) return false; - const SOON_EXPIRING_TIME = 3 * 30 * 24 * 60 * 60 * 1000; // 3 months - - if (!room.chatRoomData) return this.errorReply("This room does not support blacklists."); - - const subMap = Punishments.roomUserids.get(room.id); - if (!subMap || subMap.size === 0) { - return this.sendReply("This room has no blacklisted users."); - } - let blMap = new Map(); - let ips = ''; - - subMap.forEach((punishment, userid) => { - const [punishType, id, expireTime] = punishment; - if (punishType === 'BLACKLIST') { - if (!blMap.has(id)) blMap.set(id, [expireTime]); - if (id !== userid) blMap.get(id).push(userid); - } - }); - - if (user.can('ban')) { - const subMap = Punishments.roomIps.get(room.id); - - if (subMap) { - ips = '/ips'; - subMap.forEach((punishment, ip) => { - const [punishType, id] = punishment; - if (punishType === 'BLACKLIST') { - if (!blMap.has(id)) blMap.set(id, []); - blMap.get(id).push(ip); - } - }); - } - } - - let soonExpiring = (cmd === 'expiringblacklists' || cmd === 'expiringbls'); - let buf = Chat.html`Blacklist for ${room.title}${soonExpiring ? ` (expiring within 3 months)` : ``}:
`; - - blMap.forEach((data, userid) => { - const [expireTime, ...alts] = data; - if (soonExpiring && expireTime > Date.now() + SOON_EXPIRING_TIME) return; - const expiresIn = new Date(expireTime).getTime() - Date.now(); - const expiresDays = Math.round(expiresIn / 1000 / 60 / 60 / 24); - buf += `- ${userid}, for ${expiresDays} day${Chat.plural(expiresDays)}`; - if (alts.length) buf += `, alts${ips}: ${alts.join(', ')}`; - buf += `
`; - }); - - 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: % @ # & ~", - ], - - markshared: function (target, room, user) { - if (!target) return this.parse('/help markshared'); - if (!this.can('ban')) return false; - let [ip, note] = this.splitOne(target); - if (!/^[0-9.*]+$/.test(ip)) return this.errorReply("Please enter a valid IP address."); - - if (Punishments.sharedIps.has(ip)) return this.errorReply("This IP is already marked as shared."); - - Punishments.addSharedIp(ip, note); - if (note) note = ` (${note})`; - return this.addModCommand(`The IP '${ip}' was marked as shared by ${user.name}.${note}`); - }, - marksharedhelp: ["/markshared [ip] - Marks an IP address as shared. Requires @, &, ~"], - - unmarkshared: function (target, room, user) { - if (!target) return this.parse('/help unmarkshared'); - if (!this.can('ban')) return false; - if (!/^[0-9.*]+$/.test(target)) return this.errorReply("Please enter a valid IP address."); - - if (!Punishments.sharedIps.has(target)) return this.errorReply("This IP isn't marked as shared."); - - Punishments.removeSharedIp(target); - return this.addModCommand(`The IP '${target}' was unmarked as shared by ${user.name}.`); - }, - unmarksharedhelp: ["/unmarkshared [ip] - Unmarks a shared IP address. Requires @, &, ~"], - - /********************************************************* - * Server management commands - *********************************************************/ - - hotpatch: function (target, room, user) { - if (!target) return this.parse('/help hotpatch'); - if (!this.can('hotpatch')) return; - - const lock = Monitor.hotpatchLock; - const hotpatches = ['chat', 'tournaments', 'formats', 'loginserver', 'punishments', 'dnsbl']; - - try { - if (target === 'all') { - if (lock['all']) return this.errorReply(`Hot-patching all has been disabled by ${lock['all'].by} (${lock['all'].reason}`); - if (Config.disablehotpatchall) return this.errorReply("This server does not allow for the use of /hotpatch all"); - - for (let i = 0; i < hotpatches.length; i++) { - this.parse(`/hotpatch ${hotpatches[i]}`); - } - } else if (target === 'chat' || target === 'commands') { - if (lock['chat']) return this.errorReply(`Hot-patching chat has been disabled by ${lock['chat'].by} (${lock['chat'].reason})`); - - const ProcessManagers = require('./process-manager').cache; - for (let PM of ProcessManagers.keys()) { - if (PM.isChatBased) { - PM.unspawn(); - ProcessManagers.delete(PM); - } - } - - Chat.uncacheTree('./chat'); - delete require.cache[require.resolve('./chat-commands')]; - delete require.cache[require.resolve('./chat-plugins/info')]; - global.Chat = require('./chat'); - - let runningTournaments = Tournaments.tournaments; - Chat.uncacheTree('./tournaments'); - global.Tournaments = require('./tournaments'); - Tournaments.tournaments = runningTournaments; - this.sendReply("Chat commands have been hot-patched."); - } else if (target === 'tournaments') { - if (lock['tournaments']) return this.errorReply(`Hot-patching tournaments has been disabled by ${lock['tournaments'].by} (${lock['tournaments'].reason})`); - - let runningTournaments = Tournaments.tournaments; - Chat.uncacheTree('./tournaments'); - global.Tournaments = require('./tournaments'); - Tournaments.tournaments = runningTournaments; - this.sendReply("Tournaments have been hot-patched."); - } else if (target === 'battles') { - if (lock['battles']) return this.errorReply(`Hot-patching battles has been disabled by ${lock['battles'].by} (${lock['battles'].reason})`); - if (lock['formats']) return this.errorReply(`Hot-patching formats has been disabled by ${lock['formats'].by} (${lock['formats'].reason})`); - - Rooms.SimulatorProcess.respawn(); - this.sendReply("Battles have been hot-patched. Any battles started after now will use the new code; however, in-progress battles will continue to use the old code."); - } else if (target === 'formats') { - if (lock['formats']) return this.errorReply(`Hot-patching formats has been disabled by ${lock['formats'].by} (${lock['formats'].reason})`); - if (lock['battles']) return this.errorReply(`Hot-patching battles has been disabled by ${lock['battles'].by} (${lock['battles'].reason})`); - if (lock['validator']) return this.errorReply(`Hot-patching the validator has been disabled by ${lock['validator'].by} (${lock['validator'].reason})`); - - // store custom formats - let customFormats = {}; - for (let i in Dex.data.Formats) { - if (!Dex.data.Formats[i].customBanlist) continue; - customFormats[i] = {name: Dex.data.Formats[i].name, customBanlist: Dex.data.Formats[i].customBanlist}; - } - // uncache the sim/dex.js dependency tree - Chat.uncacheTree('./sim/dex'); - // reload sim/dex.js - global.Dex = require('./sim/dex'); // note: this will lock up the server for a few seconds - // rebuild custom formats - for (let i in customFormats) { - Dex.getFormat(customFormats[i].name, customFormats[i].customBanlist, i); - } - // rebuild the formats list - delete Rooms.global.formatList; - // respawn validator processes - TeamValidator.PM.respawn(); - // respawn simulator processes - Rooms.SimulatorProcess.respawn(); - // broadcast the new formats list to clients - Rooms.global.send(Rooms.global.formatListText); - - this.sendReply("Formats have been hot-patched."); - } else if (target === 'loginserver') { - FS('config/custom.css').unwatch(); - Chat.uncacheTree('./loginserver'); - global.LoginServer = require('./loginserver'); - this.sendReply("The login server has been hot-patched. New login server requests will use the new code."); - } else if (target === 'learnsets' || target === 'validator') { - if (lock['validator']) return this.errorReply(`Hot-patching the validator has been disabled by ${lock['validator'].by} (${lock['validator'].reason})`); - if (lock['formats']) return this.errorReply(`Hot-patching formats has been disabled by ${lock['formats'].by} (${lock['formats'].reason})`); - - TeamValidator.PM.respawn(); - this.sendReply("The team validator has been hot-patched. Any battles started after now will have teams be validated according to the new code."); - } else if (target === 'punishments') { - if (lock['punishments']) return this.errorReply(`Hot-patching punishments has been disabled by ${lock['punishments'].by} (${lock['punishments'].reason})`); - - delete require.cache[require.resolve('./punishments')]; - global.Punishments = require('./punishments'); - this.sendReply("Punishments have been hot-patched."); - } else if (target === 'dnsbl' || target === 'datacenters') { - Dnsbl.loadDatacenters(); - this.sendReply("Dnsbl has been hot-patched."); - } else if (target.startsWith('disable')) { - this.sendReply("Disabling hot-patch has been moved to its own command:"); - return this.parse('/help nohotpatch'); - } else { - return this.errorReply("Your hot-patch command was unrecognized."); - } - } catch (e) { - Rooms.global.notifyRooms(['development', 'staff', 'upperstaff'], `|c|${user.getIdentity()}|/log ${user.name} used /hotpatch ${target} - but something failed while trying to hot-patch.`); - return this.errorReply(`Something failed while trying to hot-patch ${target}: \n${e.stack}`); - } - Rooms.global.notifyRooms(['development', 'staff', 'upperstaff'], `|c|${user.getIdentity()}|/log ${user.name} used /hotpatch ${target}`); - }, - hotpatchhelp: [ - "Hot-patching the game engine allows you to update parts of Showdown without interrupting currently-running battles. Requires: ~", - "Hot-patching has greater memory requirements than restarting.", - "You can disable various hot-patches with /nohotpatch. For more information on this, see /help nohotpatch", - "/hotpatch chat - reload chat-commands.js and the chat-plugins", - "/hotpatch battles - spawn new simulator processes", - "/hotpatch validator - spawn new team validator processes", - "/hotpatch formats - reload the sim/dex.js tree, rebuild and rebroad the formats list, and spawn new simulator and team validator processes", - "/hotpatch dnsbl - reloads Dnsbl datacenters", - "/hotpatch punishments - reloads new punishments code", - "/hotpatch tournaments - reloads new tournaments code", - "/hotpatch all - hot-patches chat, tournaments, formats, login server, punishments, and dnsbl", - ], - - hotpatchlock: 'nohotpatch', - nohotpatch: function (target, room, user) { - if (!this.can('hotpatch')) return; - if (!target) return this.parse('/help nohotpatch'); - - const separator = ' '; - - const hotpatch = toId(target.substr(0, target.indexOf(separator))); - const reason = target.substr(target.indexOf(separator), target.length).trim(); - if (!reason || !target.includes(separator)) return this.parse('/help nohotpatch'); - - let lock = Monitor.hotpatchLock; - const validDisable = ['chat', 'battles', 'formats', 'validator', 'tournaments', 'punishments', 'all']; - - if (validDisable.includes(hotpatch)) { - if (lock[hotpatch]) return this.errorReply(`Hot-patching ${hotpatch} has already been disabled by ${lock[hotpatch].by} (${lock[hotpatch].reason})`); - lock[hotpatch] = { - by: user.name, - reason: reason, - }; - this.sendReply(`You have disabled hot-patching ${hotpatch}.`); - } else { - return this.errorReply("This hot-patch is not an option to disable."); - } - Rooms.global.notifyRooms(['development', 'staff', 'upperstaff'], `|c|${user.getIdentity()}|/log ${user.name} has disabled hot-patching ${hotpatch}.`); - }, - nohotpatchhelp: ["/nohotpatch [chat|formats|battles|validator|tournaments|punishments|all] [reason] - Disables hotpatching the specified part of the simulator. Requires: ~"], - - savelearnsets: function (target, room, user) { - if (!this.can('hotpatch')) return false; - this.sendReply("saving..."); - FS('data/learnsets.js').write(`'use strict';\n\nexports.BattleLearnsets = {\n` + - Object.entries(Dex.data.Learnsets).map(([k, v]) => ( - `\t${k}: {learnset: {\n` + - Object.entries(v.learnset).sort( - (a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0) - ).map(([k, v]) => ( - `\t\t${k}: ["` + v.join(`", "`) + `"],\n` - )).join('') + - `\t}},\n` - )).join('') + - `};\n`).then(() => { - this.sendReply("learnsets.js saved."); - }); - }, - - widendatacenters: 'adddatacenters', - adddatacenters: function (target, room, user, connection, cmd) { - if (!this.can('hotpatch')) return false; - // should be in the format: IP, IP, name, URL - let widen = (cmd === 'widendatacenters'); - - FS('config/datacenters.csv').readTextIfExists().then(data => { - let datacenters = []; - for (const row of data.split("\n")) { - if (!row) continue; - const rowSplit = row.split(','); - const rowData = [ - Dnsbl.ipToNumber(rowSplit[0]), - Dnsbl.ipToNumber(rowSplit[1]), - Dnsbl.urlToHost(rowSplit[3]), - row, - ]; - datacenters.push(rowData); - } - - data = String(target).split("\n"); - let successes = 0; - let identicals = 0; - let widenSuccesses = 0; - for (let row of data) { - if (!row) continue; - let rowSplit = row.split(','); - let rowData = [ - Dnsbl.ipToNumber(rowSplit[0]), - Dnsbl.ipToNumber(rowSplit[1]), - Dnsbl.urlToHost(rowSplit[3]), - row, - ]; - if (rowData[1] < rowData[0]) { - this.errorReply('invalid range: ' + row); - continue; - } - - let iMin = 0; - let iMax = datacenters.length; - while (iMin < iMax) { - let i = Math.floor((iMax + iMin) / 2); - if (rowData[0] > datacenters[i][0]) { - iMin = i + 1; - } else { - iMax = i; - } - } - if (iMin < datacenters.length) { - let next = datacenters[iMin]; - if (rowData[0] === next[0] && rowData[1] === next[1]) { - identicals++; - continue; - } - if (rowData[0] <= next[0] && rowData[1] >= next[1]) { - if (widen === true) { - widenSuccesses++; - datacenters.splice(iMin, 1, rowData); - continue; - } - this.errorReply('too wide: ' + row); - this.errorReply('intersects with: ' + next[3]); - continue; - } - if (rowData[1] >= next[0]) { - this.errorReply('could not insert: ' + row); - this.errorReply('intersects with: ' + next[3]); - continue; - } - } - if (iMin > 0) { - let prev = datacenters[iMin - 1]; - if (rowData[0] >= prev[0] && rowData[1] <= prev[1]) { - this.errorReply('too narrow: ' + row); - this.errorReply('intersects with: ' + prev[3]); - continue; - } - if (rowData[0] <= prev[1]) { - this.errorReply('could not insert: ' + row); - this.errorReply('intersects with: ' + prev[3]); - continue; - } - } - successes++; - datacenters.splice(iMin, 0, rowData); - } - - let output = datacenters.map(r => r[3]).join('\n') + '\n'; - FS('config/datacenters.csv').write(output); - this.sendReply(`done: ${successes} successes, ${identicals} unchanged`); - if (widenSuccesses) this.sendReply(`${widenSuccesses} widens`); - }); - }, - - disableladder: function (target, room, user) { - if (!this.can('disableladder')) return false; - if (Ladders.disabled) { - return this.errorReply(`/disableladder - Ladder is already disabled.`); - } - - Ladders.disabled = true; - - this.logModCommand(`The ladder was disabled by ${user.name}.`); - Monitor.log(`The ladder was disabled by ${user.name}.`); - - const innerHTML = ( - `Due to high server load, the ladder has been temporarily disabled.
` + - `Rated games will no longer update the ladder. It will be back momentarily.` - ); - - Rooms.rooms.forEach((curRoom, id) => { - if (curRoom.type === 'battle') curRoom.rated = false; - if (id !== 'global') curRoom.addRaw(`
${innerHTML}
`).update(); - }); - Users.users.forEach(u => { - if (u.connected) u.send(`|pm|~|${u.group}${u.name}|/raw
${innerHTML}
`); - }); - }, - - enableladder: function (target, room, user) { - if (!this.can('disableladder')) return false; - if (!Ladders.disabled) { - return this.errorReply(`/enable - Ladder is already enabled.`); - } - Ladders.disabled = false; - - this.logModCommand(`The ladder was enabled by ${user.name}.`); - Monitor.log(`The ladder was enabled by ${user.name}.`); - - const innerHTML = ( - `The ladder is now back.
` + - `Rated games will update the ladder now..` - ); - - Rooms.rooms.forEach((curRoom, id) => { - if (id !== 'global') curRoom.addRaw(`
${innerHTML}
`).update(); - }); - Users.users.forEach(u => { - if (u.connected) u.send(`|pm|~|${u.group}${u.name}|/raw
${innerHTML}
`); - }); - }, - - lockdown: function (target, room, user) { - if (!this.can('lockdown')) return false; - - Rooms.global.startLockdown(); - - this.logEntry(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: ~"], - - autolockdown: 'autolockdownkill', - autolockdownkill: function (target, room, user) { - if (!this.can('lockdown')) return false; - if (Config.autolockdown === undefined) Config.autolockdown = true; - - if (target === 'on' || target === 'enable') { - if (Config.autolockdown) return this.errorReply("The server is already set to automatically kill itself upon the final battle finishing."); - Config.autolockdown = true; - this.sendReply("The server is now set to automatically kill itself upon the final battle finishing."); - this.logEntry(`${user.name} used /autolockdownkill on`); - } else if (target === 'off' || target === 'disable') { - if (!Config.autolockdown) return this.errorReply("The server is already set to not automatically kill itself upon the final battle finishing."); - Config.autolockdown = false; - this.sendReply("The server is now set to not automatically kill itself upon the final battle finishing."); - this.logEntry(`${user.name} used /autolockdownkill off`); - } else { - return this.parse('/help autolockdownkill'); - } - }, - 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 ~", - ], - - prelockdown: function (target, room, user) { - if (!this.can('lockdown')) return false; - Rooms.global.lockdown = 'pre'; - this.sendReply("Tournaments have been disabled in preparation for the server restart."); - this.logEntry(user.name + " used /prelockdown"); - }, - - slowlockdown: function (target, room, user) { - if (!this.can('lockdown')) return false; - - Rooms.global.startLockdown(undefined, true); - - this.logEntry(user.name + " used /slowlockdown"); - }, - - endlockdown: function (target, room, user) { - if (!this.can('lockdown')) return false; - - if (!Rooms.global.lockdown) { - return this.errorReply("We're not under lockdown right now."); - } - if (Rooms.global.lockdown === true) { - Rooms.rooms.forEach((curRoom, id) => { - if (id !== 'global') curRoom.addRaw("
The server restart was canceled.
").update(); - }); - } else { - this.sendReply("Preparation for the server shutdown was canceled."); - } - Rooms.global.lockdown = false; - - this.logEntry(user.name + " used /endlockdown"); - }, - - emergency: function (target, room, user) { - if (!this.can('lockdown')) return false; - - if (Config.emergency) { - return this.errorReply("We're already in emergency mode."); - } - Config.emergency = true; - Rooms.rooms.forEach((curRoom, id) => { - if (id !== 'global') curRoom.addRaw("
The server has entered emergency mode. Some features might be disabled or limited.
").update(); - }); - - this.logEntry(user.name + " used /emergency"); - }, - - endemergency: function (target, room, user) { - if (!this.can('lockdown')) return false; - - if (!Config.emergency) { - return this.errorReply("We're not in emergency mode."); - } - Config.emergency = false; - Rooms.rooms.forEach((curRoom, id) => { - if (id !== 'global') curRoom.addRaw("
The server is no longer in emergency mode.
").update(); - }); - - this.logEntry(user.name + " used /endemergency"); - }, - - kill: function (target, room, user) { - if (!this.can('lockdown')) return false; - - if (Rooms.global.lockdown !== true) { - return this.errorReply("For safety reasons, /kill can only be used during lockdown."); - } - - if (Chat.updateServerLock) { - return this.errorReply("Wait for /updateserver to finish before using /kill."); - } - - Sockets.workers.forEach(worker => worker.kill()); - - if (!room.destroyLog) { - process.exit(); - return; - } - room.logEntry(user.name + " used /kill"); - room.destroyLog(() => { - process.exit(); - }); - - // Just in the case the above never terminates, kill the process - // after 10 seconds. - setTimeout(() => { - process.exit(); - }, 10000); - }, - killhelp: ["/kill - kills the server. Can't be done unless the server is in lockdown state. Requires: ~"], - - loadbanlist: function (target, room, user, connection) { - if (!this.can('hotpatch')) return false; - - connection.sendTo(room, "Loading ipbans.txt..."); - Punishments.loadBanlist().then( - () => connection.sendTo(room, "ipbans.txt has been reloaded."), - error => connection.sendTo(room, "Something went wrong while loading ipbans.txt: " + error) - ); - }, - loadbanlisthelp: ["/loadbanlist - Loads the bans located at ipbans.txt. The command is executed automatically at startup. Requires: ~"], - - refreshpage: function (target, room, user) { - if (!this.can('hotpatch')) return false; - Rooms.global.send('|refresh|'); - this.logEntry(user.name + " used /refreshpage"); - }, - - updateserver: function (target, room, user, connection) { - if (!user.hasConsoleAccess(connection)) { - return this.errorReply("/updateserver - Access denied."); - } - - if (Chat.updateServerLock) { - return this.errorReply("/updateserver - Another update is already in progress."); - } - - Chat.updateServerLock = true; - - let logQueue = []; - logQueue.push(user.name + " used /updateserver"); - - connection.sendTo(room, "updating..."); - - let exec = require('child_process').exec; - exec(`git fetch && git rebase --autostash FETCH_HEAD`, (error, stdout, stderr) => { - for (let s of ("" + stdout + stderr).split("\n")) { - connection.sendTo(room, s); - logQueue.push(s); - } - for (let line of logQueue) { - room.logEntry(line); - } - Chat.updateServerLock = false; - }); - }, - - crashfixed: function (target, room, user) { - if (Rooms.global.lockdown !== true) { - return this.errorReply('/crashfixed - There is no active crash.'); - } - if (!this.can('hotpatch')) return false; - - Rooms.global.lockdown = false; - if (Rooms.lobby) { - Rooms.lobby.modchat = false; - Rooms.lobby.addRaw("
We fixed the crash without restarting the server!
You may resume talking in the lobby and starting new battles.
").update(); - } - this.logEntry(user.name + " used /crashfixed"); - }, - crashfixedhelp: ["/crashfixed - Ends the active lockdown caused by a crash without the need of a restart. Requires: ~"], - - memusage: 'memoryusage', - memoryusage: function (target) { - if (!this.can('hotpatch')) return false; - let memUsage = process.memoryUsage(); - let results = [memUsage.rss, memUsage.heapUsed, memUsage.heapTotal]; - let units = ["B", "KiB", "MiB", "GiB", "TiB"]; - for (let i = 0; i < results.length; i++) { - let unitIndex = Math.floor(Math.log2(results[i]) / 10); // 2^10 base log - results[i] = "" + (results[i] / Math.pow(2, 10 * unitIndex)).toFixed(2) + " " + units[unitIndex]; - } - this.sendReply("||[Main process] RSS: " + results[0] + ", Heap: " + results[1] + " / " + results[2]); - }, - - bash: function (target, room, user, connection) { - if (!user.hasConsoleAccess(connection)) { - return this.errorReply("/bash - Access denied."); - } - if (!target) return this.parse('/help bash'); - - connection.sendTo(room, "$ " + target); - require('child_process').exec(target, (error, stdout, stderr) => { - connection.sendTo(room, ("" + stdout + stderr)); - }); - }, - bashhelp: ["/bash [command] - Executes a bash command on the server. Requires: ~ console access"], - - eval: function (target, room, user, connection) { - if (!user.hasConsoleAccess(connection)) { - return this.errorReply("/eval - Access denied."); - } - if (!this.runBroadcast()) return; - - if (!this.broadcasting) this.sendReply('||>> ' + target); - try { - /* eslint-disable no-unused-vars */ - let battle = room.battle; - let me = user; - this.sendReply('||<< ' + eval(target)); - /* eslint-enable no-unused-vars */ - } catch (e) { - this.sendReply('|| << ' + ('' + e.stack).replace(/\n *at CommandContext\.exports\.commands(\.[a-z0-9]+)*\.eval [\s\S]*/m, '').replace(/\n/g, '\n||')); - } - }, - - evalbattle: function (target, room, user, connection) { - if (!user.hasConsoleAccess(connection)) { - return this.errorReply("/evalbattle - Access denied."); - } - if (!this.runBroadcast()) return; - if (!room.battle) { - return this.errorReply("/evalbattle - This isn't a battle room."); - } - - room.battle.send('eval', target.replace(/\n/g, '\f')); - }, - - ebat: 'editbattle', - editbattle: function (target, room, user) { - if (!this.can('forcewin')) return false; - if (!target) return this.parse('/help editbattle'); - if (!room.battle) { - this.errorReply("/editbattle - This is not a battle room."); - return false; - } - let cmd; - let spaceIndex = target.indexOf(' '); - if (spaceIndex > 0) { - cmd = target.substr(0, spaceIndex).toLowerCase(); - target = target.substr(spaceIndex + 1); - } else { - cmd = target.toLowerCase(); - target = ''; - } - if (cmd.charAt(cmd.length - 1) === ',') cmd = cmd.slice(0, -1); - let targets = target.split(','); - function getPlayer(input) { - let player = room.battle.players[toId(input)]; - if (player) return player.slot; - if (input.includes('1')) return 'p1'; - if (input.includes('2')) return 'p2'; - return 'p3'; - } - function getPokemon(input) { - if (/^[0-9]+$/.test(input)) { - return '.pokemon[' + (parseInt(input) - 1) + ']'; - } - return ".pokemon.find(p => p.speciesid==='" + toId(targets[1]) + "')"; - } - switch (cmd) { - case 'hp': - case 'h': - room.battle.send('eval', "let p=" + getPlayer(targets[0]) + getPokemon(targets[1]) + ";p.sethp(" + parseInt(targets[2]) + ");if (p.isActive)battle.add('-damage',p,p.getHealth);"); - break; - case 'status': - case 's': - room.battle.send('eval', "let pl=" + getPlayer(targets[0]) + ";let p=pl" + getPokemon(targets[1]) + ";p.setStatus('" + toId(targets[2]) + "');if (!p.isActive){battle.add('','please ignore the above');battle.add('-status',pl.active[0],pl.active[0].status,'[silent]');}"); - break; - case 'pp': - room.battle.send('eval', "let pl=" + getPlayer(targets[0]) + ";let p=pl" + getPokemon(targets[1]) + ";p.moveset[p.moves.indexOf('" + toId(targets[2]) + "')].pp = " + parseInt(targets[3])); - break; - case 'boost': - case 'b': - room.battle.send('eval', "let p=" + getPlayer(targets[0]) + getPokemon(targets[1]) + ";battle.boost({" + toId(targets[2]) + ":" + parseInt(targets[3]) + "},p)"); - break; - case 'volatile': - case 'v': - room.battle.send('eval', "let p=" + getPlayer(targets[0]) + getPokemon(targets[1]) + ";p.addVolatile('" + toId(targets[2]) + "')"); - break; - case 'sidecondition': - case 'sc': - room.battle.send('eval', "let p=" + getPlayer(targets[0]) + ".addSideCondition('" + toId(targets[1]) + "')"); - break; - case 'fieldcondition': case 'pseudoweather': - case 'fc': - room.battle.send('eval', "battle.addPseudoWeather('" + toId(targets[0]) + "')"); - break; - case 'weather': - case 'w': - room.battle.send('eval', "battle.setWeather('" + toId(targets[0]) + "')"); - break; - case 'terrain': - case 't': - room.battle.send('eval', "battle.setTerrain('" + toId(targets[0]) + "')"); - break; - default: - this.errorReply("Unknown editbattle command: " + cmd); - break; - } - }, - editbattlehelp: ["/editbattle hp [player], [pokemon], [hp]", - "/editbattle status [player], [pokemon], [status]", - "/editbattle pp [player], [pokemon], [move], [pp]", - "/editbattle boost [player], [pokemon], [stat], [amount]", - "/editbattle volatile [player], [pokemon], [volatile]", - "/editbattle sidecondition [player], [sidecondition]", - "/editbattle fieldcondition [fieldcondition]", - "/editbattle weather [weather]", - "/editbattle terrain [terrain]", - "Short forms: /ebat h OR s OR pp OR b OR v OR sc OR fc OR w OR t", - "[player] must be a username or number, [pokemon] must be species name or number (not nickname), [move] must be move name"], - - /********************************************************* - * Battle commands - *********************************************************/ - - forfeit: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.forfeit) { - return this.errorReply("This kind of game can't be forfeited."); - } - if (!room.game.forfeit(user)) { - return this.errorReply("Forfeit failed."); - } - }, - - choose: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.choose) return this.errorReply("This game doesn't support /choose"); - - room.game.choose(user, target); - }, - - mv: 'move', - attack: 'move', - move: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.choose) return this.errorReply("This game doesn't support /choose"); - - room.game.choose(user, 'move ' + target); - }, - - sw: 'switch', - switch: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.choose) return this.errorReply("This game doesn't support /choose"); - - room.game.choose(user, 'switch ' + parseInt(target)); - }, - - team: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.choose) return this.errorReply("This game doesn't support /choose"); - - room.game.choose(user, 'team ' + target); - }, - - undo: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.undo) return this.errorReply("This game doesn't support /undo"); - - room.game.undo(user, target); - }, - - uploadreplay: 'savereplay', - savereplay: function (target, room, user, connection) { - if (!room || !room.battle) return; - // retrieve spectator log (0) if there are privacy concerns - let logidx = room.battle.ended ? 3 : 0; - let data = room.getLog(logidx).join("\n"); - let datahash = crypto.createHash('md5').update(data.replace(/[^(\x20-\x7F)]+/g, '')).digest('hex'); - let players = room.battle.playerNames; - LoginServer.request('prepreplay', { - id: room.id.substr(7), - loghash: datahash, - p1: players[0], - p2: players[1], - format: room.format, - hidden: room.isPrivate ? '1' : '', - }, success => { - if (success && success.errorip) { - connection.popup("This server's request IP " + success.errorip + " is not a registered server."); - return; - } - connection.send('|queryresponse|savereplay|' + JSON.stringify({ - log: data, - id: room.id.substr(7), - })); - }); - }, - - addplayer: function (target, room, user) { - if (!target) return this.parse('/help addplayer'); - if (!room.battle) return this.errorReply("You can only do this in battle rooms."); - if (room.rated) return this.errorReply("You can only add a Player to unrated battles."); - - target = this.splitTarget(target, true); - let targetUser = this.targetUser; - let name = this.targetUsername; - - if (!targetUser) return this.errorReply("User " + name + " not found."); - if (targetUser.can('joinbattle', null, room)) { - return this.sendReply("" + name + " can already join battles as a Player."); - } - if (!this.can('joinbattle', null, room)) return; - - room.auth[targetUser.userid] = '\u2606'; - this.addModCommand("" + name + " was promoted to Player by " + user.name + "."); - }, - addplayerhelp: ["/addplayer [username] - Allow the specified user to join the battle as a player."], - - joinbattle: 'joingame', - joingame: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.joinGame) return this.errorReply("This game doesn't support /joingame"); - - room.game.joinGame(user); - }, - - leavebattle: 'leavegame', - partbattle: 'leavegame', - leavegame: function (target, room, user) { - if (!room.game) return this.errorReply("This room doesn't have an active game."); - if (!room.game.leaveGame) return this.errorReply("This game doesn't support /leavegame"); - - room.game.leaveGame(user); - }, - - kickbattle: 'kickgame', - kickgame: function (target, room, user) { - if (!room.battle) return this.errorReply("You can only do this in battle rooms."); - if (room.battle.tour || room.battle.rated) return this.errorReply("You can only do this in unrated non-tour battles."); - - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser || !targetUser.connected) { - return this.errorReply("User " + this.targetUsername + " not found."); - } - if (!this.can('kick', targetUser)) return false; - - if (room.game.leaveGame(targetUser)) { - this.addModCommand("" + targetUser.name + " was kicked from a battle by " + user.name + (target ? " (" + target + ")" : "")); - } else { - this.errorReply("/kickbattle - User isn't in battle."); - } - }, - kickbattlehelp: ["/kickbattle [username], [reason] - Kicks a user from a battle with reason. Requires: % @ * & ~"], - - kickinactive: function (target, room, user) { - this.parse(`/timer on`); - }, - - timer: function (target, room, user) { - target = toId(target); - if (!room.game || !room.game.timer) { - return this.errorReply(`You can only set the timer from inside a battle room.`); - } - const timer = room.game.timer; - if (!timer.timerRequesters) { - return this.sendReply(`This game's timer is managed by a different command.`); - } - if (!target) { - if (!timer.timerRequesters.size) { - return this.sendReply(`The game timer is OFF`); - } - return this.sendReply(`The game timer is ON (requested by ${[...timer.timerRequesters].join(', ')})`); - } - const force = user.can('timer', null, room); - if (!force && !room.game.players[user]) { - return this.errorReply(`Access denied`); - } - if (target === 'off' || target === 'false' || target === 'stop') { - if (timer.timerRequesters.size) { - timer.stop(force ? undefined : user); - if (force) room.send(`|inactiveoff|Timer was turned off by staff. Please do not turn it back on until our staff say it's okay.`); - } else { - this.errorReply(`The timer is already off`); - } - } else if (target === 'on' || target === 'true') { - timer.start(user); - } else { - this.errorReply(`"${target}" is not a recognized timer state.`); - } - }, - - autotimer: 'forcetimer', - forcetimer: function (target, room, user) { - target = toId(target); - if (!this.can('autotimer')) return; - if (target === 'off' || target === 'false' || target === 'stop') { - Config.forcetimer = false; - this.addModCommand("Forcetimer is now OFF: The timer is now opt-in. (set by " + user.name + ")"); - } else if (target === 'on' || target === 'true' || !target) { - Config.forcetimer = true; - this.addModCommand("Forcetimer is now ON: All battles will be timed. (set by " + user.name + ")"); - } else { - this.errorReply("'" + target + "' is not a recognized forcetimer setting."); - } - }, - - forcetie: 'forcewin', - forcewin: function (target, room, user) { - if (!this.can('forcewin')) return false; - if (!room.battle) { - this.errorReply("/forcewin - This is not a battle room."); - return false; - } - - room.battle.endType = 'forced'; - if (!target) { - room.battle.tie(); - this.logModCommand(user.name + " forced a tie."); - return false; - } - let targetUser = Users.getExact(target); - if (!targetUser) return this.errorReply("User '" + target + "' not found."); - - target = targetUser ? targetUser.userid : ''; - - if (target) { - room.battle.win(targetUser); - this.logModCommand(user.name + " forced a win for " + target + "."); - } - }, - 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: & ~"], - - /********************************************************* - * Challenging and searching commands - *********************************************************/ - - '!search': true, - cancelsearch: 'search', - search: function (target, room, user) { - if (target) { - if (Config.laddermodchat) { - let userGroup = user.group; - if (Config.groupsranking.indexOf(userGroup) < Config.groupsranking.indexOf(Config.laddermodchat)) { - let groupName = Config.groups[Config.laddermodchat].name || Config.laddermodchat; - this.popupReply("On this server, you must be of rank " + groupName + " or higher to search for a battle."); - return false; - } - } - Matchmaker.searchBattle(user, target); - } else { - Matchmaker.cancelSearch(user, target); - } - }, - - '!challenge': true, - chall: 'challenge', - challenge: function (target, room, user, connection) { - target = this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser || !targetUser.connected) { - return this.popupReply("The user '" + this.targetUsername + "' was not found."); - } - if (user.locked && !targetUser.locked) { - return this.popupReply("You are locked and cannot challenge unlocked users."); - } - if (targetUser.blockChallenges && !user.can('bypassblocks', targetUser)) { - return this.popupReply("The user '" + this.targetUsername + "' is not accepting challenges right now."); - } - if (user.challengeTo) { - return this.popupReply("You're already challenging '" + user.challengeTo.to + "'. Cancel that challenge before challenging someone else."); - } - if (Config.pmmodchat) { - let userGroup = user.group; - if (Config.groupsranking.indexOf(userGroup) < Config.groupsranking.indexOf(Config.pmmodchat)) { - let groupName = Config.groups[Config.pmmodchat].name || Config.pmmodchat; - this.popupReply("Because moderated chat is set, you must be of rank " + groupName + " or higher to challenge users."); - return false; - } - } - user.prepBattle(Dex.getFormat(target).id, 'challenge', connection).then(validTeam => { - if (validTeam === false) return; - user.makeChallenge(targetUser, target, validTeam); - }); - }, - - '!blockchallenges': true, - bch: 'blockchallenges', - blockchall: 'blockchallenges', - blockchalls: 'blockchallenges', - blockchallenges: function (target, room, user) { - if (user.blockChallenges) return this.errorReply("You are already blocking challenges!"); - user.blockChallenges = true; - this.sendReply("You are now blocking all incoming challenge requests."); - }, - blockchallengeshelp: ["/blockchallenges - Blocks challenges so no one can challenge you. Unblock them with /unblockchallenges."], - - '!allowchallenges': true, - unbch: 'allowchallenges', - unblockchall: 'allowchallenges', - unblockchalls: 'allowchallenges', - unblockchallenges: 'allowchallenges', - allowchallenges: function (target, room, user) { - if (!user.blockChallenges) return this.errorReply("You are already available for challenges!"); - user.blockChallenges = false; - this.sendReply("You are available for challenges from now on."); - }, - allowchallengeshelp: ["/unblockchallenges - Unblocks challenges so you can be challenged again. Block them with /blockchallenges."], - - '!cancelchallenge': true, - cchall: 'cancelChallenge', - cancelchallenge: function (target, room, user) { - user.cancelChallengeTo(target); - }, - - '!accept': true, - accept: function (target, room, user, connection) { - let userid = toId(target); - if (!userid && this.pmTarget) userid = this.pmTarget.userid; - let format = ''; - if (user.challengesFrom[userid]) format = user.challengesFrom[userid].format; - if (!format) { - this.popupReply(target + " isn't challenging you - maybe they cancelled before you could accept?"); - return false; - } - user.prepBattle(Dex.getFormat(format).id, 'challenge', connection).then(validTeam => { - if (validTeam === false) return; - user.acceptChallengeFrom(userid, validTeam); - }); - }, - - '!reject': true, - reject: function (target, room, user) { - let userid = toId(target); - if (!userid && this.pmTarget) userid = this.pmTarget.userid; - user.rejectChallengeFrom(userid); - }, - - '!useteam': true, - saveteam: 'useteam', - utm: 'useteam', - useteam: function (target, room, user) { - user.team = target; - }, - - '!vtm': true, - vtm: function (target, room, user, connection) { - if (Monitor.countPrepBattle(connection.ip, connection)) { - return; - } - if (!target) return this.errorReply("Provide a valid format."); - let originalFormat = Dex.getFormat(target); - // Note: The default here of [Gen 7] Pokebank Anything Goes isn't normally hit; since the web client will send a default format - let format = originalFormat.effectType === 'Format' ? originalFormat : Dex.getFormat('[Gen 7] Pokebank Anything Goes'); - if (format.effectType !== 'Format') return this.popupReply("Please provide a valid format."); - - TeamValidator(format.id).prepTeam(user.team).then(result => { - let matchMessage = (originalFormat === format ? "" : "The format '" + originalFormat.name + "' was not found."); - if (result.charAt(0) === '1') { - connection.popup("" + (matchMessage ? matchMessage + "\n\n" : "") + "Your team is valid for " + format.name + "."); - } else { - connection.popup("" + (matchMessage ? matchMessage + "\n\n" : "") + "Your team was rejected for the following reasons:\n\n- " + result.slice(1).replace(/\n/g, '\n- ')); - } - }); - }, - - /********************************************************* - * Low-level - *********************************************************/ - - '!crq': true, - cmd: 'crq', - query: 'crq', - crq: function (target, room, user, connection) { - // In emergency mode, clamp down on data returned from crq's - let trustable = (!Config.emergency || (user.named && user.registered)); - let spaceIndex = target.indexOf(' '); - let cmd = target; - if (spaceIndex > 0) { - cmd = target.substr(0, spaceIndex); - target = target.substr(spaceIndex + 1); - } else { - target = ''; - } - if (cmd === 'userdetails') { - let targetUser = Users.get(target); - if (!trustable || !targetUser) { - connection.send('|queryresponse|userdetails|' + JSON.stringify({ - userid: toId(target), - rooms: false, - })); - return false; - } - let roomList = {}; - targetUser.inRooms.forEach(roomid => { - if (roomid === 'global') return; - let targetRoom = Rooms.get(roomid); - if (!targetRoom) return; // shouldn't happen - let roomData = {}; - if (targetRoom.isPrivate) { - if (!user.inRooms.has(roomid) && !user.games.has(roomid)) return; - roomData.isPrivate = true; - } - if (targetRoom.battle) { - let battle = targetRoom.battle; - roomData.p1 = battle.p1 ? ' ' + battle.p1.name : ''; - roomData.p2 = battle.p2 ? ' ' + battle.p2.name : ''; - } - if (targetRoom.auth && targetUser.userid in targetRoom.auth) { - roomid = targetRoom.auth[targetUser.userid] + roomid; - } - roomList[roomid] = roomData; - }); - if (!targetUser.connected) roomList = false; - let userdetails = { - userid: targetUser.userid, - avatar: targetUser.avatar, - group: targetUser.group, - rooms: roomList, - }; - connection.send('|queryresponse|userdetails|' + JSON.stringify(userdetails)); - } else if (cmd === 'roomlist') { - if (!trustable) return false; - connection.send('|queryresponse|roomlist|' + JSON.stringify({ - rooms: Rooms.global.getRoomList(target), - })); - } else if (cmd === 'rooms') { - if (!trustable) return false; - connection.send('|queryresponse|rooms|' + JSON.stringify( - Rooms.global.getRooms(user) - )); - } else if (cmd === 'laddertop') { - if (!trustable) return false; - Ladders(target).getTop().then(result => { - connection.send('|queryresponse|laddertop|' + JSON.stringify(result)); - }); - } else { - // default to sending null - connection.send('|queryresponse|' + cmd + '|null'); - } - }, - - '!trn': true, - trn: function (target, room, user, connection) { - if (target === user.name) return false; - - let commaIndex = target.indexOf(','); - let targetName = target; - let targetRegistered = false; - let targetToken = ''; - if (commaIndex >= 0) { - targetName = target.substr(0, commaIndex); - target = target.substr(commaIndex + 1); - commaIndex = target.indexOf(','); - targetRegistered = target; - if (commaIndex >= 0) { - targetRegistered = !!parseInt(target.substr(0, commaIndex)); - targetToken = target.substr(commaIndex + 1); - } - } - user.rename(targetName, targetToken, targetRegistered, connection); - }, - - a: function (target, room, user) { - if (!this.can('rawpacket')) return false; - // secret sysop command - room.add(target); - }, - - /********************************************************* - * Help commands - *********************************************************/ - - '!help': true, - commands: 'help', - h: 'help', - '?': 'help', - man: 'help', - help: function (target, room, user) { - if (!this.runBroadcast()) return; - target = target.toLowerCase(); - - // overall - if (target === 'help' || target === 'h' || target === '?' || target === 'commands') { - this.sendReply("/help OR /h OR /? - Gives you help."); - } else if (!target) { - this.sendReply("COMMANDS: /msg, /reply, /logout, /challenge, /search, /rating, /whois"); - this.sendReply("OPTION COMMANDS: /nick, /avatar, /ignore, /away, /back, /timestamps, /highlight"); - this.sendReply("INFORMATIONAL COMMANDS: /data, /dexsearch, /movesearch, /itemsearch, /groups, /faq, /rules, /intro, /formatshelp, /othermetas, /learn, /analysis, /calc (replace / with ! to broadcast. Broadcasting requires: + % @ * # & ~)"); - if (user.group !== Config.groupsranking[0]) { - this.sendReply("DRIVER COMMANDS: /warn, /mute, /hourmute, /unmute, /alts, /forcerename, /modlog, /modnote, /lock, /unlock, /announce, /redirect"); - this.sendReply("MODERATOR COMMANDS: /ban, /unban, /ip, /modchat"); - this.sendReply("LEADER COMMANDS: /declare, /forcetie, /forcewin, /promote, /demote, /banip, /host, /unbanall"); - } - this.sendReply("For an overview of room commands, use /roomhelp"); - this.sendReply("For details of a specific command, use something like: /help data"); - } else { - let altCommandHelp; - let helpCmd; - let targets = target.split(' '); - let allCommands = Chat.commands; - if (typeof allCommands[target] === 'string') { - // If a function changes with command name, help for that command name will be searched first. - altCommandHelp = target + 'help'; - if (altCommandHelp in allCommands) { - helpCmd = altCommandHelp; - } else { - helpCmd = allCommands[target] + 'help'; - } - } else if (targets.length > 1 && typeof allCommands[targets[0]] === 'object') { - // Handle internal namespace commands - let helpCmd = targets[targets.length - 1] + 'help'; - let namespace = allCommands[targets[0]]; - for (let i = 1; i < targets.length - 1; i++) { - if (!namespace[targets[i]]) return this.errorReply("Help for the command '" + target + "' was not found. Try /help for general help"); - namespace = namespace[targets[i]]; - } - if (typeof namespace[helpCmd] === 'object') return this.sendReply(namespace[helpCmd].join('\n')); - if (typeof namespace[helpCmd] === 'function') return this.run(namespace[helpCmd]); - return this.errorReply("Help for the command '" + target + "' was not found. Try /help for general help"); - } else { - helpCmd = target + 'help'; - } - if (helpCmd in allCommands) { - if (typeof allCommands[helpCmd] === 'function') { - // If the help command is a function, parse it instead - this.run(allCommands[helpCmd]); - } else if (Array.isArray(allCommands[helpCmd])) { - this.sendReply(allCommands[helpCmd].join('\n')); - } - } else { - this.errorReply("Help for the command '" + target + "' was not found. Try /help for general help"); - } - } - }, - -}; - -process.nextTick(() => { - // We might want to migrate most of this to a JSON schema of command attributes. - Chat.multiLinePattern.register( - '>>>? ', '/(?:room|staff)intro ', '/(?:staff)?topic ', '/(?:add|widen)datacenters ', '/bash ', '!code ', '/code ' - ); -}); diff --git a/chat-plugins/info.js b/chat-plugins/info.js deleted file mode 100644 index 96b1fbb9dea9c..0000000000000 --- a/chat-plugins/info.js +++ /dev/null @@ -1,1986 +0,0 @@ -/** - * Informational Commands - * Pokemon Showdown - https://pokemonshowdown.com/ - * - * These are informational commands. For instance, you can define the command - * 'whois' here, then use it by typing /whois into Pokemon Showdown. - * - * For the API, see chat-plugins/COMMANDS.md - * - * @license MIT license - */ - -'use strict'; - -const path = require('path'); - -exports.commands = { - - '!whois': true, - ip: 'whois', - rooms: 'whois', - alt: 'whois', - alts: 'whois', - whoare: 'whois', - whois: function (target, room, user, connection, cmd) { - if (room && room.id === 'staff' && !this.runBroadcast()) return; - if (!room) room = Rooms.global; - let targetUser = this.targetUserOrSelf(target, user.group === ' '); - let showAll = (cmd === 'ip' || cmd === 'whoare' || cmd === 'alt' || cmd === 'alts'); - if (!targetUser) { - if (showAll) return this.parse('/offlinewhois ' + target); - return this.errorReply("User " + this.targetUsername + " not found."); - } - if (showAll && !user.trusted && targetUser !== user) { - return this.errorReply(`/${cmd} - Access denied.`); - } - - let buf = Chat.html`${targetUser.group}${targetUser.name} `; - const ac = targetUser.autoconfirmed; - if (ac && showAll) buf += ` (ac${targetUser.userid === ac ? `` : `: ${ac}`})`; - if (!targetUser.connected) buf += ` (offline)`; - let roomauth = ''; - if (room.auth && targetUser.userid in room.auth) roomauth = room.auth[targetUser.userid]; - if (Config.groups[roomauth] && Config.groups[roomauth].name) { - buf += `
${Config.groups[roomauth].name} (${roomauth})`; - } - if (Config.groups[targetUser.group] && Config.groups[targetUser.group].name) { - buf += `
Global ${Config.groups[targetUser.group].name} (${targetUser.group})`; - } - if (targetUser.isSysop) { - buf += `
(Pokémon Showdown System Operator)`; - } - if (!targetUser.registered) { - buf += `
(Unregistered)`; - } - let publicrooms = ""; - let hiddenrooms = ""; - let privaterooms = ""; - targetUser.inRooms.forEach(roomid => { - if (roomid === 'global') return; - let targetRoom = Rooms.get(roomid); - - let authSymbol = (targetRoom.auth && targetRoom.auth[targetUser.userid] ? targetRoom.auth[targetUser.userid] : ''); - let battleTitle = (roomid.battle ? ` title="${roomid.title}"` : ''); - let output = `${authSymbol}${roomid}`; - if (targetRoom.isPrivate === true) { - if (targetRoom.modjoin === '~') return; - if (privaterooms) privaterooms += " | "; - privaterooms += output; - } else if (targetRoom.isPrivate) { - if (hiddenrooms) hiddenrooms += " | "; - hiddenrooms += output; - } else { - if (publicrooms) publicrooms += " | "; - publicrooms += output; - } - }); - buf += '
Rooms: ' + (publicrooms || '(no public rooms)'); - - if (!showAll) { - return this.sendReplyBox(buf); - } - buf += '
'; - if (user.can('alts', targetUser) || user.can('alts') && user === targetUser) { - let alts = targetUser.getAltUsers(true); - let prevNames = Object.keys(targetUser.prevNames).join(", "); - if (prevNames) buf += Chat.html`
Previous names: ${prevNames}`; - - for (let j = 0; j < alts.length; ++j) { - let targetAlt = alts[j]; - if (!targetAlt.named && !targetAlt.connected) continue; - if (targetAlt.group === '~' && user.group !== '~') continue; - - buf += Chat.html`
Alt: ${targetAlt.name}`; - if (!targetAlt.connected) buf += ` (offline)`; - prevNames = Object.keys(targetAlt.prevNames).join(", "); - if (prevNames) buf += `
Previous names: ${prevNames}`; - } - if (targetUser.namelocked) { - buf += `
NAMELOCKED: ${targetUser.namelocked}`; - let punishment = Punishments.userids.get(targetUser.locked); - if (punishment) { - let expiresIn = Punishments.checkLockExpiration(targetUser.locked); - if (expiresIn) buf += expiresIn; - if (punishment[3]) buf += Chat.html` (reason: ${punishment[3]})`; - } - } else if (targetUser.locked) { - buf += `
LOCKED: ${targetUser.locked}`; - switch (targetUser.locked) { - case '#dnsbl': - buf += ` - IP is in a DNS-based blacklist`; - break; - case '#range': - buf += ` - IP or host is in a temporary range-lock`; - break; - case '#hostfilter': - buf += ` - host is permanently locked for being a proxy`; - break; - } - let punishment = Punishments.userids.get(targetUser.locked); - if (punishment) { - let expiresIn = Punishments.checkLockExpiration(targetUser.locked); - if (expiresIn) buf += expiresIn; - if (punishment[3]) buf += Chat.html` (reason: ${punishment[3]})`; - } - } - if (targetUser.semilocked) { - buf += `
Semilocked: ${targetUser.semilocked}`; - } - } - if ((user.can('ip', targetUser) || user === targetUser)) { - let ips = Object.keys(targetUser.ips); - ips = ips.map(ip => { - if (Punishments.sharedIps.has(ip)) { - let sharedStr = 'shared'; - if (Punishments.sharedIps.get(ip)) { - sharedStr += `: ${Punishments.sharedIps.get(ip)}`; - } - return ip + ` (${sharedStr})`; - } - return ip; - }); - buf += `
IP${Chat.plural(ips)}: ${ips.join(", ")}`; - if (user.group !== ' ' && targetUser.latestHost) { - buf += Chat.html`
Host: ${targetUser.latestHost}`; - } - } - if ((user === targetUser || user.can('alts', targetUser)) && hiddenrooms) { - buf += `
Hidden rooms: ${hiddenrooms}`; - } - if ((user === targetUser || user.can('makeroom')) && privaterooms) { - buf += `
Private rooms: ${privaterooms}`; - } - - if (user.can('alts', targetUser) || (room.isPrivate !== true && user.can('mute', targetUser, room) && targetUser.userid in room.users)) { - let punishments = Punishments.getRoomPunishments(targetUser, {checkIps: true}); - - if (punishments.length) { - buf += `
Room punishments: `; - - buf += punishments.map(([room, punishment]) => { - const [punishType, punishUserid, expireTime, reason] = punishment; - let punishDesc = Punishments.roomPunishmentTypes.get(punishType); - if (!punishDesc) punishDesc = `punished`; - if (punishUserid !== targetUser.userid) punishDesc += ` as ${punishUserid}`; - let expiresIn = new Date(expireTime).getTime() - Date.now(); - let expireString = Chat.toDurationString(expiresIn, {precision: 1}); - punishDesc += ` for ${expireString}`; - - if (reason) punishDesc += `: ${reason}`; - return `${room} (${punishDesc})`; - }).join(', '); - } - } - this.sendReplyBox(buf); - }, - 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."], - - '!offlinewhois': true, - checkpunishment: 'offlinewhois', - offlinewhois: function (target, room, user) { - if (!user.trusted) { - return this.errorReply("/offlinewhois - Access denied."); - } - let userid = toId(target); - if (!userid) return this.errorReply("Please enter a valid username."); - let targetUser = Users(userid); - let buf = Chat.html`${target}`; - if (!targetUser || !targetUser.connected) buf += ` (offline)`; - - let roomauth = ''; - if (room && room.auth && userid in room.auth) roomauth = room.auth[userid]; - if (Config.groups[roomauth] && Config.groups[roomauth].name) { - buf += `
${Config.groups[roomauth].name} (${roomauth})`; - } - let group = (Users.usergroups[userid] || '').charAt(0); - if (Config.groups[group] && Config.groups[group].name) { - buf += `
Global ${Config.groups[group].name} (${group})`; - } - - buf += `

`; - let atLeastOne = false; - - let punishment = Punishments.userids.get(userid); - if (punishment) { - const [punishType, punishUserid, , reason] = punishment; - const punishName = {BAN: "BANNED", LOCK: "LOCKED", NAMELOCK: "NAMELOCKED"}[punishType] || punishType; - buf += `${punishName}: ${punishUserid}`; - let expiresIn = Punishments.checkLockExpiration(userid); - if (expiresIn) buf += expiresIn; - if (reason) buf += Chat.html` (reason: ${reason})`; - buf += '
'; - atLeastOne = true; - } - - if (!user.can('alts') && !atLeastOne) { - let hasJurisdiction = room && user.can('mute', null, room) && Punishments.roomUserids.nestedHas(room.id, userid); - if (!hasJurisdiction) { - return this.errorReply("/checkpunishment - User not found."); - } - } - - let punishments = Punishments.getRoomPunishments(targetUser); - - if (punishments && punishments.length) { - buf += `
Room punishments: `; - - buf += punishments.map(([room, punishment]) => { - const [punishType, punishUserid, expireTime, reason] = punishment; - let punishDesc = Punishments.roomPunishmentTypes.get(punishType); - if (!punishDesc) punishDesc = `punished`; - if (punishUserid !== targetUser.userid) punishDesc += ` as ${punishUserid}`; - let expiresIn = new Date(expireTime).getTime() - Date.now(); - let expireString = Chat.toDurationString(expiresIn, {precision: 1}); - punishDesc += ` for ${expireString}`; - - if (reason) punishDesc += `: ${reason}`; - return `${room} (${punishDesc})`; - }).join(', '); - atLeastOne = true; - } - if (!atLeastOne) { - buf += `This username has no punishments associated with it.`; - } - this.sendReplyBox(buf); - }, - - '!host': true, - host: function (target, room, user, connection, cmd) { - if (!target) return this.parse('/help host'); - if (!this.can('rangeban')) return; - target = target.trim(); - if (!/^[0-9.]+$/.test(target)) return this.errorReply('You must pass a valid IPv4 IP to /host.'); - Dnsbl.reverse(target).then(host => { - this.sendReply('IP ' + target + ': ' + (host || "ERROR")); - }); - }, - hosthelp: ["/host [ip] - Gets the host for a given IP. Requires: & ~"], - - '!ipsearch': true, - searchip: 'ipsearch', - ipsearchall: 'ipsearch', - hostsearch: 'ipsearch', - ipsearch: function (target, room, user, connection, cmd) { - if (!target.trim()) return this.parse('/help ipsearch'); - if (!this.can('rangeban')) return; - let results = []; - - let isAll = (cmd === 'ipsearchall'); - - if (/[a-z]/.test(target)) { - // host - this.sendReply("Users with host " + target + ":"); - Users.users.forEach(curUser => { - if (results.length > 100 && !isAll) return; - if (!curUser.latestHost || !curUser.latestHost.endsWith(target)) return; - results.push((curUser.connected ? " \u25C9 " : " \u25CC ") + " " + curUser.name); - }); - if (results.length > 100 && !isAll) { - return this.sendReply("More than 100 users match the specified IP range. Use /ipsearchall to retrieve the full list."); - } - } else if (target.slice(-1) === '*') { - // IP range - this.sendReply("Users in IP range " + target + ":"); - target = target.slice(0, -1); - Users.users.forEach(curUser => { - if (results.length > 100 && !isAll) return; - if (!curUser.latestIp.startsWith(target)) return; - results.push((curUser.connected ? " \u25C9 " : " \u25CC ") + " " + curUser.name); - }); - if (results.length > 100 && !isAll) { - return this.sendReply("More than 100 users match the specified IP range. Use /ipsearchall to retrieve the full list."); - } - } else { - this.sendReply("Users with IP " + target + ":"); - Users.users.forEach(curUser => { - if (curUser.latestIp === target) { - results.push((curUser.connected ? " \u25C9 " : " \u25CC ") + " " + curUser.name); - } - }); - } - if (!results.length) { - if (!target.includes('.')) return this.errorReply("'" + target + "' is not a valid IP or host."); - return this.sendReply("No results found."); - } - return this.sendReply(results.join('; ')); - }, - ipsearchhelp: ["/ipsearch [ip|range|host] - Find all users with specified IP, IP range, or host. Requires: & ~"], - - checkchallenges: function (target, room, user) { - if (!this.can('ban', null, room)) return false; - if (!this.runBroadcast()) return; - if (!this.broadcasting) { - this.errorReply(`This command must be broadcast:`); - return this.parse(`/help checkchallenges`); - } - target = this.splitTarget(target); - const user1 = this.targetUser; - const user2 = Users.get(target); - if (!user1 || !user2 || user1 === user2) return this.parse(`/help checkchallenges`); - if (!(user1 in room.users) || !(user2 in room.users)) { - return this.errorReply(`Both users must be in this room.`); - } - let challenges = []; - if (user1.challengeTo && Users.get(user1.challengeTo.to) === user2) { - challenges.push(Chat.html`${user1.name} is challenging ${user2.name} in ${Dex.getFormat(user1.challengeTo.format).name}.`); - } - if (user2.challengeTo && Users.get(user2.challengeTo.to) === user1) { - challenges.push(Chat.html`${user2.name} is challenging ${user1.name} in ${Dex.getFormat(user2.challengeTo.format).name}.`); - } - if (!challenges.length) { - return this.sendReplyBox(Chat.html`${user1.name} and ${user2.name} are not challenging each other.`); - } - this.sendReplyBox(challenges.join(`
`)); - }, - checkchallengeshelp: ["!checkchallenges [user1], [user2] - Check if the specified users are challenging each other. Requires: @ * # & ~"], - - /********************************************************* - * Client fallback - *********************************************************/ - - unignore: 'ignore', - ignore: function (target, room, user) { - if (!room) this.errorReply(`In PMs, this command can only be used by itself to ignore the person you're talking to: "/${this.cmd}", not "/${this.cmd} ${target}"`); - this.errorReply(`You're using a custom client that doesn't support the ignore command.`); - }, - - /********************************************************* - * Data Search Dex - *********************************************************/ - - '!data': true, - pstats: 'data', - stats: 'data', - dex: 'data', - pokedex: 'data', - data: function (target, room, user, connection, cmd) { - if (!this.runBroadcast()) return; - - let buffer = ''; - let sep = target.split(','); - if (sep.length !== 2) sep = [target]; - target = sep[0].trim(); - let targetId = toId(target); - if (!targetId) return this.parse('/help data'); - let targetNum = parseInt(targetId); - if (!isNaN(targetNum) && '' + targetNum === target) { - for (let p in Dex.data.Pokedex) { - let pokemon = Dex.getTemplate(p); - if (pokemon.num === targetNum) { - target = pokemon.species; - targetId = pokemon.id; - break; - } - } - } - let mod = Dex; - if (sep[1] && toId(sep[1]) in Dex.dexes) { - mod = Dex.mod(toId(sep[1])); - } else if (sep[1] && Dex.getFormat(sep[1]).mod) { - mod = Dex.mod(Dex.getFormat(sep[1]).mod); - } - let newTargets = mod.dataSearch(target); - let showDetails = (cmd === 'dt' || cmd === 'details'); - if (newTargets && newTargets.length) { - for (let i = 0; i < newTargets.length; ++i) { - if (newTargets[i].isInexact && !i) { - buffer = `No Pok\u00e9mon, item, move, ability or nature named '${target}' was found${Dex.gen > mod.gen ? ` in Gen ${mod.gen}` : ""}. Showing the data of '${newTargets[0].name}' instead.\n`; - } - switch (newTargets[i].searchType) { - case 'nature': - let nature = Dex.getNature(newTargets[i].name); - buffer += "" + nature.name + " nature: "; - if (nature.plus) { - let statNames = {'atk': "Attack", 'def': "Defense", 'spa': "Special Attack", 'spd': "Special Defense", 'spe': "Speed"}; - buffer += "+10% " + statNames[nature.plus] + ", -10% " + statNames[nature.minus] + "."; - } else { - buffer += "No effect."; - } - return this.sendReply(buffer); - case 'pokemon': - let template = mod.getTemplate(newTargets[i].name); - buffer += `|raw|${Chat.getDataPokemonHTML(template, mod.gen)}\n`; - break; - case 'item': - let item = mod.getItem(newTargets[i].name); - buffer += `|raw|${Chat.getDataItemHTML(item)}\n`; - break; - case 'move': - let move = mod.getMove(newTargets[i].name); - buffer += `|raw|${Chat.getDataMoveHTML(move)}\n`; - break; - case 'ability': - let ability = mod.getAbility(newTargets[i].name); - buffer += `|raw|${Chat.getDataAbilityHTML(ability)}\n`; - break; - default: - throw new Error(`Unrecognized searchType`); - } - } - } else { - return this.errorReply(`No Pok\u00e9mon, item, move, ability or nature named '${target}' was found${Dex.gen > mod.gen ? ` in Gen ${mod.gen}` : ""}. (Check your spelling?)`); - } - - if (showDetails) { - let details; - if (newTargets[0].searchType === 'pokemon') { - let pokemon = mod.getTemplate(newTargets[0].name); - let weighthit = 20; - if (pokemon.weightkg >= 200) { - weighthit = 120; - } else if (pokemon.weightkg >= 100) { - weighthit = 100; - } else if (pokemon.weightkg >= 50) { - weighthit = 80; - } else if (pokemon.weightkg >= 25) { - weighthit = 60; - } else if (pokemon.weightkg >= 10) { - weighthit = 40; - } - details = { - "Dex#": pokemon.num, - "Gen": pokemon.gen || 'CAP', - "Height": pokemon.heightm + " m", - "Weight": pokemon.weightkg + " kg (" + weighthit + " BP)", - }; - if (pokemon.color && mod.gen >= 5) details["Dex Colour"] = pokemon.color; - if (pokemon.eggGroups && mod.gen >= 2) details["Egg Group(s)"] = pokemon.eggGroups.join(", "); - let evos = []; - pokemon.evos.forEach(evo => { - evo = mod.getTemplate(evo); - if (evo.gen <= mod.gen) { - evos.push(evo.name + " (" + evo.evoLevel + ")"); - } - }); - if (!evos.length) { - details['Does Not Evolve'] = ""; - } else { - details["Evolution"] = evos.join(", "); - } - } else if (newTargets[0].searchType === 'move') { - let move = mod.getMove(newTargets[0].name); - details = { - "Priority": move.priority, - "Gen": move.gen || 'CAP', - }; - - if (move.secondary || move.secondaries) details["✓ Secondary effect"] = ""; - if (move.flags['contact']) details["✓ Contact"] = ""; - if (move.flags['sound']) details["✓ Sound"] = ""; - if (move.flags['bullet']) details["✓ Bullet"] = ""; - if (move.flags['pulse']) details["✓ Pulse"] = ""; - if (!move.flags['protect'] && !/(ally|self)/i.test(move.target)) details["✓ Bypasses Protect"] = ""; - if (move.flags['authentic']) details["✓ Bypasses Substitutes"] = ""; - if (move.flags['defrost']) details["✓ Thaws user"] = ""; - if (move.flags['bite']) details["✓ Bite"] = ""; - if (move.flags['punch']) details["✓ Punch"] = ""; - if (move.flags['powder']) details["✓ Powder"] = ""; - if (move.flags['reflectable']) details["✓ Bounceable"] = ""; - if (move.flags['gravity'] && mod.gen >= 4) details["✗ Suppressed by Gravity"] = ""; - - if (mod.gen >= 7) { - if (move.zMovePower) { - details["Z-Power"] = move.zMovePower; - } else if (move.zMoveEffect) { - details["Z-Effect"] = { - '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%", - }[move.zMoveEffect]; - } else if (move.zMoveBoost) { - details["Z-Effect"] = ""; - let boost = move.zMoveBoost; - let stats = {atk: 'Attack', def: 'Defense', spa: 'Sp. Atk', spd: 'Sp. Def', spe: 'Speed', accuracy: 'Accuracy', evasion: 'Evasiveness'}; - for (let i in boost) { - details["Z-Effect"] += " " + stats[i] + " +" + boost[i]; - } - } else if (move.isZ) { - details["✓ Z-Move"] = ""; - details["Z-Crystal"] = mod.getItem(move.isZ).name; - if (move.basePower !== 1) { - details["User"] = mod.getItem(move.isZ).zMoveUser.join(", "); - details["Required Move"] = mod.getItem(move.isZ).zMoveFrom; - } - } else { - details["Z-Effect"] = "None"; - } - } - - details["Target"] = { - '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", - }[move.target] || "Unknown"; - - if (move.id === 'snatch' && mod.gen >= 3) { - details['Snatchable Moves'] = ''; - } - if (move.id === 'mirrormove') { - details['Mirrorable Moves'] = ''; - } - if (move.isUnreleased) { - details["Unreleased in Gen " + mod.gen] = ""; - } - } else if (newTargets[0].searchType === 'item') { - let item = mod.getItem(newTargets[0].name); - details = { - "Gen": item.gen, - }; - - if (mod.gen >= 4) { - if (item.fling) { - details["Fling Base Power"] = item.fling.basePower; - if (item.fling.status) details["Fling Effect"] = item.fling.status; - if (item.fling.volatileStatus) details["Fling Effect"] = item.fling.volatileStatus; - if (item.isBerry) details["Fling Effect"] = "Activates the Berry's effect on the target."; - if (item.id === 'whiteherb') details["Fling Effect"] = "Restores the target's negative stat stages to 0."; - if (item.id === 'mentalherb') details["Fling Effect"] = "Removes the effects of Attract, Disable, Encore, Heal Block, Taunt, and Torment from the target."; - } else { - details["Fling"] = "This item cannot be used with Fling."; - } - } - if (item.naturalGift && mod.gen >= 3) { - details["Natural Gift Type"] = item.naturalGift.type; - details["Natural Gift Base Power"] = item.naturalGift.basePower; - } - if (item.isUnreleased) { - details["Unreleased in Gen " + mod.gen] = ""; - } - } else { - details = {}; - } - - buffer += '|raw|' + Object.keys(details).map(detail => { - if (details[detail] === '') return detail; - return '' + detail + ': ' + details[detail]; - }).join(" |  ") + ''; - } - this.sendReply(buffer); - }, - datahelp: ["/data [pokemon/item/move/ability] - Get details on this pokemon/item/move/ability/nature.", - "/data [pokemon/item/move/ability], Gen [generation number/format name] - Get details on this pokemon/item/move/ability/nature for that generation/format.", - "!data [pokemon/item/move/ability] - Show everyone these details. Requires: + % @ * # & ~"], - - '!details': true, - dt: 'details', - details: function (target) { - if (!target) return this.parse('/help details'); - this.run('data'); - }, - detailshelp: ["/details [pokemon/item/move/ability] - Get additional details on this pokemon/item/move/ability/nature.", - "/details [pokemon/item/move/ability], Gen [generation number/format name] - Get details on this pokemon/item/move/ability/nature for that generation/format.", - "!details [pokemon/item/move/ability] - Show everyone these details. Requires: + % @ * # & ~"], - - '!weakness': true, - weaknesses: 'weakness', - weak: 'weakness', - resist: 'weakness', - weakness: function (target, room, user) { - if (!target) return this.parse('/help weakness'); - if (!this.runBroadcast()) return; - target = target.trim(); - let targets = target.split(/ ?[,/ ] ?/); - - let pokemon = Dex.getTemplate(target); - let type1 = Dex.getType(targets[0]); - let type2 = Dex.getType(targets[1]); - let type3 = Dex.getType(targets[2]); - - if (pokemon.exists) { - target = pokemon.species; - } else { - let types = []; - if (type1.exists) { - types.push(type1.id); - if (type2.exists && type2 !== type1) { - types.push(type2.id); - } - if (type3.exists && type3 !== type1 && type3 !== type2) { - types.push(type3.id); - } - } - - if (types.length === 0) { - return this.sendReplyBox("" + Chat.escapeHTML(target) + " isn't a recognized type or pokemon."); - } - pokemon = {types: types}; - target = types.join("/"); - } - - let weaknesses = []; - let resistances = []; - let immunities = []; - for (let type in Dex.data.TypeChart) { - let notImmune = Dex.getImmunity(type, pokemon); - if (notImmune) { - let typeMod = Dex.getEffectiveness(type, pokemon); - switch (typeMod) { - case 1: - weaknesses.push(type); - break; - case 2: - weaknesses.push("" + type + ""); - break; - case 3: - weaknesses.push("" + type + ""); - break; - case -1: - resistances.push(type); - break; - case -2: - resistances.push("" + type + ""); - break; - case -3: - resistances.push("" + type + ""); - break; - } - } else { - immunities.push(type); - } - } - - let buffer = []; - buffer.push(pokemon.exists ? "" + target + ' (ignoring abilities):' : '' + target + ':'); - buffer.push('Weaknesses: ' + (weaknesses.join(', ') || 'None')); - buffer.push('Resistances: ' + (resistances.join(', ') || 'None')); - buffer.push('Immunities: ' + (immunities.join(', ') || 'None')); - this.sendReplyBox(buffer.join('
')); - }, - 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: + % @ * # & ~"], - - '!effectiveness': true, - eff: 'effectiveness', - type: 'effectiveness', - matchup: 'effectiveness', - effectiveness: function (target, room, user) { - let targets = target.split(/[,/]/).slice(0, 2); - if (targets.length !== 2) return this.errorReply("Attacker and defender must be separated with a comma."); - - let searchMethods = {'getType':1, 'getMove':1, 'getTemplate':1}; - let sourceMethods = {'getType':1, 'getMove':1}; - let targetMethods = {'getType':1, 'getTemplate':1}; - let source, defender, foundData, atkName, defName; - - for (let i = 0; i < 2; ++i) { - let method; - for (method in searchMethods) { - foundData = Dex[method](targets[i]); - if (foundData.exists) break; - } - if (!foundData.exists) return this.parse('/help effectiveness'); - if (!source && method in sourceMethods) { - if (foundData.type) { - source = foundData; - atkName = foundData.name; - } else { - source = foundData.id; - atkName = foundData.id; - } - searchMethods = targetMethods; - } else if (!defender && method in targetMethods) { - if (foundData.types) { - defender = foundData; - defName = foundData.species + " (not counting abilities)"; - } else { - defender = {types: [foundData.id]}; - defName = foundData.id; - } - searchMethods = sourceMethods; - } - } - - if (!this.runBroadcast()) return; - - let factor = 0; - if (Dex.getImmunity(source, defender) || source.ignoreImmunity && (source.ignoreImmunity === true || source.ignoreImmunity[source.type])) { - let totalTypeMod = 0; - if (source.effectType !== 'Move' || source.category !== 'Status' && (source.basePower || source.basePowerCallback)) { - for (let i = 0; i < defender.types.length; i++) { - let baseMod = Dex.getEffectiveness(source, defender.types[i]); - let moveMod = source.onEffectiveness && source.onEffectiveness.call(Dex, baseMod, defender.types[i], source); - totalTypeMod += typeof moveMod === 'number' ? moveMod : baseMod; - } - } - factor = Math.pow(2, totalTypeMod); - } - - let hasThousandArrows = source.id === 'thousandarrows' && defender.types.includes('Flying'); - let additionalInfo = hasThousandArrows ? "
However, Thousand Arrows will be 1x effective on the first hit." : ""; - - this.sendReplyBox("" + atkName + " is " + factor + "x effective against " + defName + "." + additionalInfo); - }, - effectivenesshelp: ["/effectiveness [attack], [defender] - Provides the effectiveness of a move or type on another type or a Pok\u00e9mon.", - "!effectiveness [attack], [defender] - Shows everyone the effectiveness of a move or type on another type or a Pok\u00e9mon."], - - '!coverage': true, - cover: 'coverage', - coverage: function (target, room, user) { - if (!this.runBroadcast()) return; - if (!target) return this.parse("/help coverage"); - - let targets = target.split(/[,+]/); - let sources = []; - - let dispTable = false; - let bestCoverage = {}; - let hasThousandArrows = false; - - for (let type in Dex.data.TypeChart) { - // This command uses -5 to designate immunity - bestCoverage[type] = -5; - } - - for (let i = 0; i < targets.length; i++) { - let move = targets[i].trim(); - move = move.charAt(0).toUpperCase() + move.slice(1).toLowerCase(); - if (move === 'Table' || move === 'All') { - if (this.broadcasting) return this.sendReplyBox("The full table cannot be broadcast."); - dispTable = true; - continue; - } - - let eff; - if (move in Dex.data.TypeChart) { - sources.push(move); - for (let type in bestCoverage) { - if (!Dex.getImmunity(move, type) && !move.ignoreImmunity) continue; - eff = Dex.getEffectiveness(move, type); - if (eff > bestCoverage[type]) bestCoverage[type] = eff; - } - continue; - } - move = Dex.getMove(move); - if (move.exists) { - if (!move.basePower && !move.basePowerCallback) continue; - if (move.id === 'thousandarrows') hasThousandArrows = true; - sources.push(move); - for (let type in bestCoverage) { - if (move.id === "struggle") { - eff = 0; - } else { - if (!Dex.getImmunity(move.type, type) && !move.ignoreImmunity) continue; - let baseMod = Dex.getEffectiveness(move, type); - let moveMod = move.onEffectiveness && move.onEffectiveness.call(Dex, baseMod, type, move); - eff = typeof moveMod === 'number' ? moveMod : baseMod; - } - if (eff > bestCoverage[type]) bestCoverage[type] = eff; - } - continue; - } - - return this.errorReply("No type or move '" + targets[i] + "' found."); - } - if (sources.length === 0) return this.errorReply("No moves using a type table for determining damage were specified."); - if (sources.length > 4) return this.errorReply("Specify a maximum of 4 moves or types."); - - // converts to fractional effectiveness, 0 for immune - for (let type in bestCoverage) { - if (bestCoverage[type] === -5) { - bestCoverage[type] = 0; - continue; - } - bestCoverage[type] = Math.pow(2, bestCoverage[type]); - } - - if (!dispTable) { - let buffer = []; - let superEff = []; - let neutral = []; - let resists = []; - let immune = []; - - for (let type in bestCoverage) { - switch (bestCoverage[type]) { - case 0: - immune.push(type); - break; - case 0.25: - case 0.5: - resists.push(type); - break; - case 1: - neutral.push(type); - break; - case 2: - case 4: - superEff.push(type); - break; - default: - throw new Error("/coverage effectiveness of " + bestCoverage[type] + " from parameters: " + target); - } - } - buffer.push('Coverage for ' + sources.join(' + ') + ':'); - buffer.push('Super Effective: ' + (superEff.join(', ') || 'None')); - buffer.push('Neutral: ' + (neutral.join(', ') || 'None')); - buffer.push('Resists: ' + (resists.join(', ') || 'None')); - buffer.push('Immunities: ' + (immune.join(', ') || 'None')); - return this.sendReplyBox(buffer.join('
')); - } else { - let buffer = '
'; - let icon = {}; - for (let type in Dex.data.TypeChart) { - icon[type] = ''; - // row of icons at top - buffer += ''; - } - buffer += ''; - for (let type1 in Dex.data.TypeChart) { - // assembles the rest of the rows - buffer += ''; - for (let type2 in Dex.data.TypeChart) { - let typing; - let cell = ''; - buffer += cell; - } - } - buffer += '
' + icon[type] + '
' + icon[type1] + ' bestEff) bestEff = curEff; - } - if (bestEff === -5) { - bestEff = 0; - } else { - bestEff = Math.pow(2, bestEff); - } - } - switch (bestEff) { - case 0: - cell += 'bgcolor=#666666 title="' + typing + '">' + bestEff + ''; - break; - case 0.25: - case 0.5: - cell += 'bgcolor=#AA5544 title="' + typing + '">' + bestEff + ''; - break; - case 1: - cell += 'bgcolor=#6688AA title="' + typing + '">' + bestEff + ''; - break; - case 2: - case 4: - cell += 'bgcolor=#559955 title="' + typing + '">' + bestEff + ''; - break; - default: - throw new Error("/coverage effectiveness of " + bestEff + " from parameters: " + target); - } - cell += '
'; - - if (hasThousandArrows) { - buffer += "
Thousand Arrows has neutral type effectiveness on Flying-type Pok\u00e9mon if not already smacked down."; - } - - this.sendReplyBox('Coverage for ' + sources.join(' + ') + ':
' + buffer); - } - }, - coveragehelp: ["/coverage [move 1], [move 2] ... - Provides the best effectiveness match-up against all defending types for given moves or attacking types", - "!coverage [move 1], [move 2] ... - Shows this information to everyone.", - "Adding the parameter 'all' or 'table' will display the information with a table of all type combinations."], - - '!statcalc': true, - statcalc: function (target, room, user) { - if (!target) return this.parse("/help statcalc"); - if (!this.runBroadcast()) return; - - let targets = target.split(' '); - - let lvlSet, natureSet, ivSet, evSet, baseSet, modSet = false; - - let pokemon; - let useStat = ''; - - let level = 100; - let calcHP = false; - let nature = 1.0; - let iv = 31; - let ev = 252; - let statValue = -1; - let modifier = 0; - let positiveMod = true; - - for (let i = 0; i < targets.length; i++) { - let lowercase = targets[i].toLowerCase(); - - if (!lvlSet) { - if (lowercase === 'lc') { - level = 5; - lvlSet = true; - continue; - } else if (lowercase === 'vgc') { - level = 50; - lvlSet = true; - continue; - } else if (lowercase.startsWith('lv') || lowercase.startsWith('level')) { - level = parseInt(targets[i].replace(/\D/g, '')); - lvlSet = true; - if (level < 1 || level > 9999) { - return this.sendReplyBox('Invalid value for level: ' + level); - } - continue; - } - } - - if (!useStat) { - switch (lowercase) { - case 'hp': - case 'hitpoints': - calcHP = true; - useStat = 'hp'; - continue; - case 'atk': - case 'attack': - useStat = 'atk'; - continue; - case 'def': - case 'defense': - useStat = 'def'; - continue; - case 'spa': - useStat = 'spa'; - continue; - case 'spd': - case 'sdef': - useStat = 'spd'; - continue; - case 'spe': - case 'speed': - useStat = 'spe'; - continue; - } - } - - if (!natureSet) { - if (lowercase === 'boosting' || lowercase === 'positive') { - nature = 1.1; - natureSet = true; - continue; - } else if (lowercase === 'negative' || lowercase === 'inhibiting') { - nature = 0.9; - natureSet = true; - continue; - } else if (lowercase === 'neutral') { - continue; - } - } - - if (!ivSet) { - if (lowercase.endsWith('iv') || lowercase.endsWith('ivs')) { - iv = parseInt(targets[i]); - ivSet = true; - - if (isNaN(iv)) { - return this.sendReplyBox('Invalid value for IVs: ' + Chat.escapeHTML(targets[i])); - } - - continue; - } - } - - if (!evSet) { - if (lowercase === 'invested' || lowercase === 'max') { - evSet = true; - if (lowercase === 'max' && !natureSet) { - nature = 1.1; - natureSet = true; - } - } else if (lowercase === 'uninvested') { - ev = 0; - evSet = true; - } else if (lowercase.endsWith('ev') || lowercase.endsWith('evs') || lowercase.endsWith('+') || lowercase.endsWith('-')) { - ev = parseInt(targets[i]); - evSet = true; - - if (isNaN(ev)) { - return this.sendReplyBox('Invalid value for EVs: ' + Chat.escapeHTML(targets[i])); - } - if (ev > 255 || ev < 0) { - return this.sendReplyBox('The amount of EVs should be between 0 and 255.'); - } - - if (!natureSet) { - if (targets[i].includes('+')) { - nature = 1.1; - natureSet = true; - } else if (targets[i].includes('-')) { - nature = 0.9; - natureSet = true; - } - } - - continue; - } - } - - if (!modSet) { - if (targets[i] === 'scarf' || targets[i] === 'specs' || targets[i] === 'band') { - modifier = 1; - modSet = true; - } else if (targets[i].charAt(0) === '+') { - modifier = parseInt(targets[i].charAt(1)); - modSet = true; - } else if (targets[i].charAt(0) === '-') { - positiveMod = false; - modifier = parseInt(targets[i].charAt(1)); - modSet = true; - } - if (isNaN(modifier)) { - return this.sendReplyBox('Invalid value for modifier: ' + Chat.escapeHTML(modifier)); - } - if (modifier > 6) { - return this.sendReplyBox('Modifier should be a number between -6 and +6'); - } - } - - if (!pokemon) { - let testPoke = Dex.getTemplate(targets[i]); - if (testPoke.baseStats) { - pokemon = testPoke.baseStats; - baseSet = true; - continue; - } - } - - let tempStat = parseInt(targets[i]); - - if (!isNaN(tempStat) && !baseSet && tempStat > 0 && tempStat < 256) { - statValue = tempStat; - baseSet = true; - } - } - - if (pokemon) { - if (useStat) { - statValue = pokemon[useStat]; - } else { - return this.sendReplyBox('No stat found.'); - } - } - - if (statValue < 0) { - return this.sendReplyBox('No valid value for base stat found.'); - } - - let output; - - if (calcHP) { - output = (((iv + (2 * statValue) + (ev / 4) + 100) * level) / 100) + 10; - } else { - output = Math.floor(nature * Math.floor((((iv + (2 * statValue) + (ev / 4)) * level) / 100) + 5)); - if (positiveMod) { - output *= (2 + modifier) / 2; - } else { - output *= 2 / (2 + modifier); - } - } - return this.sendReplyBox('Base ' + statValue + (calcHP ? ' HP ' : ' ') + 'at level ' + level + ' with ' + iv + ' IVs, ' + ev + (nature === 1.1 ? '+' : (nature === 0.9 ? '-' : '')) + ' EVs' + (modifier > 0 && !calcHP ? ' at ' + (positiveMod ? '+' : '-') + modifier : '') + ': ' + Math.floor(output) + '.'); - }, - statcalchelp: ["/statcalc [level] [base stat] [IVs] [nature] [EVs] [modifier] (only base stat is required) - Calculates what the actual stat of a Pokémon is with the given parameters. For example, '/statcalc lv50 100 30iv positive 252ev scarf' calculates the speed of a base 100 scarfer with HP Ice in Battle Spot, and '/statcalc uninvested 90 neutral' calculates the attack of an uninvested Crobat.", - "!statcalc [level] [base stat] [IVs] [nature] [EVs] [modifier] (only base stat is required) - Shows this information to everyone.", - "Inputing 'hp' as an argument makes it use the formula for HP. Instead of giving nature, '+' and '-' can be appended to the EV amount (e.g. 252+ev) to signify a boosting or inhibiting nature."], - - /********************************************************* - * Informational commands - *********************************************************/ - - '!uptime': true, - uptime: function (target, room, user) { - if (!this.runBroadcast()) return; - let uptime = process.uptime(); - let uptimeText; - if (uptime > 24 * 60 * 60) { - let uptimeDays = Math.floor(uptime / (24 * 60 * 60)); - uptimeText = uptimeDays + " " + (uptimeDays === 1 ? "day" : "days"); - let uptimeHours = Math.floor(uptime / (60 * 60)) - uptimeDays * 24; - if (uptimeHours) uptimeText += ", " + uptimeHours + " " + (uptimeHours === 1 ? "hour" : "hours"); - } else { - uptimeText = Chat.toDurationString(uptime * 1000); - } - this.sendReplyBox("Uptime: " + uptimeText + ""); - }, - - '!servertime': true, - servertime: function (target, room, user) { - if (!this.runBroadcast()) return; - let servertime = new Date(); - this.sendReplyBox(`Server time: ${servertime.toLocaleString()}`); - }, - - '!groups': true, - groups: function (target, room, user) { - if (!this.runBroadcast()) return; - const showRoom = (target !== 'global'); - const showGlobal = (target !== 'room' && target !== 'rooms'); - this.sendReplyBox( - (showRoom ? `Room ranks
` + - `+ Voice - They can use ! commands like !groups, and talk during moderated chat
` + - `% Driver - The above, and they can mute and warn
` + - `@ Moderator - The above, and they can room ban users
` + - `* Bot - Like Moderator, but makes it clear that this user is a bot
` + - `# Room Owner - They are leaders of the room and can almost totally control it
` : ``) + - (showRoom && showGlobal ? `
` : ``) + - (showGlobal ? `Global ranks
` + - `+ Global Voice - They can use ! commands like !groups, and talk during moderated chat
` + - `% Global Driver - The above, and they can also lock users and check for alts
` + - `@ Global Moderator - The above, and they can globally ban users
` + - `* Global Bot - Like Moderator, but makes it clear that this user is a bot
` + - `& Global Leader - The above, and they can promote to global moderator and force ties
` + - `~ Global Administrator - They can do anything, like change what this message says` : ``) - ); - }, - 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: + % @ * # & ~"], - - '!punishments': true, - punishments: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "Room punishments:
" + - "warn - Displays a popup with the rules.
" + - "mute - Mutes a user (makes them unable to talk) for 7 minutes.
" + - "hourmute - Mutes a user for 60 minutes.
" + - "ban - Bans a user (makes them unable to join the room) for 2 days.
" + - "blacklist - Bans a user for a year.
" + - "
" + - "Global punishments:
" + - "lock - Locks a user (makes them unable to talk in any rooms or PM non-staff) for 2 days.
" + - "weeklock - Locks a user for a week.
" + - "namelock - Locks a user and prevents them from having a username for 2 days.
" + - "globalban - Globally bans (makes them unable to connect and play games) for a week." - ); - }, - punishmentshelp: ["/punishments - Explains punishments.", - "!punishments - Show everyone that information. Requires: + % @ * # & ~"], - - '!opensource': true, - repo: 'opensource', - repository: 'opensource', - git: 'opensource', - opensource: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "Pokémon Showdown is open source:
" + - "- Language: JavaScript (Node.js)
" + - "- What's new?
" + - "- Server source code
" + - "- Client source code
" + - "- Dex source code" - ); - }, - opensourcehelp: ["/opensource - Links to PS's source code repository.", - "!opensource - Show everyone that information. Requires: + % @ * # & ~"], - - '!staff': true, - staff: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox("Pokémon Showdown Staff List"); - }, - - '!forums': true, - forums: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox("Pokémon Showdown Forums"); - }, - - '!suggestions': true, - suggestions: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox("Make a suggestion for Pokémon Showdown"); - }, - - '!bugs': true, - bugreport: 'bugs', - bugs: function (target, room, user) { - if (!this.runBroadcast()) return; - if (room && room.battle) { - 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)" - ); - } - }, - - '!avatars': true, - avatars: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox("You can by clicking on it in the menu in the upper right. Custom avatars are only obtainable by staff."); - }, - avatarshelp: ["/avatars - Explains how to change avatars.", - "!avatars - Show everyone that information. Requires: + % @ * # & ~"], - - '!optionsbutton': true, - optionbutton: 'optionsbutton', - optionsbutton: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox(` (The Sound and Options buttons are at the top right, next to your username)`); - }, - '!soundbutton': true, - soundsbutton: 'soundbutton', - volumebutton: 'soundbutton', - soundbutton: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox(` (The Sound and Options buttons are at the top right, next to your username)`); - }, - - '!intro': true, - introduction: 'intro', - intro: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "New to competitive Pokémon?
" + - "- Beginner's Guide to Pokémon Showdown
" + - "- An introduction to competitive Pokémon
" + - "- What do 'OU', 'UU', etc mean?
" + - "- What are the rules for each format? What is 'Sleep Clause'?" - ); - }, - introhelp: ["/intro - Provides an introduction to competitive Pok\u00e9mon.", - "!intro - Show everyone that information. Requires: + % @ * # & ~"], - - '!smogintro': true, - mentoring: 'smogintro', - smogonintro: 'smogintro', - smogintro: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "Welcome to Smogon's official simulator! The Smogon Info / Intro Hub can help you get integrated into the community.
" + - "- Useful Smogon Info
" + - "- Tiering FAQ
" - ); - }, - - '!calc': true, - calculator: 'calc', - damagecalculator: 'calc', - damagecalc: 'calc', - calc: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "Pokémon Showdown! damage calculator. (Courtesy of Honko)
" + - "- Damage Calculator" - ); - }, - calchelp: ["/calc - Provides a link to a damage calculator", - "!calc - Shows everyone a link to a damage calculator. Requires: + % @ * # & ~"], - - '!cap': true, - capintro: 'cap', - cap: function (target, room, user) { - if (!this.runBroadcast()) return; - this.sendReplyBox( - "An introduction to the Create-A-Pokémon project:
" + - "- CAP project website and description
" + - "- What Pokémon have been made?
" + - "- Talk about the metagame here
" + - "- Sample SM CAP teams" - ); - }, - caphelp: ["/cap - Provides an introduction to the Create-A-Pok\u00e9mon project.", - "!cap - Show everyone that information. Requires: + % @ * # & ~"], - - '!gennext': true, - gennext: function (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" - ); - }, - - '!formathelp': true, - banlists: 'formathelp', - tier: 'formathelp', - tiers: 'formathelp', - formats: 'formathelp', - tiershelp: 'formathelp', - formatshelp: 'formathelp', - formathelp: function (target, room, user, connection, cmd) { - if (!this.runBroadcast()) return; - if (!target) { - return this.sendReplyBox( - "- Smogon Tiers
" + - "- Tiering FAQ
" + - "- The banlists for each tier
" + - "
Type /formatshelp [format|section] to get details about an available format or group of formats." - ); - } - - const isOMSearch = (cmd === 'om' || cmd === 'othermetas'); - - let targetId = toId(target); - if (targetId === 'ladder') targetId = 'search'; - if (targetId === 'all') targetId = ''; - - let formatList; - let format = Dex.getFormat(targetId); - if (format.effectType === 'Format') formatList = [targetId]; - if (!formatList) { - formatList = Object.keys(Dex.formats); - } - - // Filter formats and group by section - let exactMatch = ''; - let sections = {}; - let totalMatches = 0; - for (let i = 0; i < formatList.length; i++) { - let format = Dex.getFormat(formatList[i]); - let sectionId = toId(format.section); - let formatId = format.id; - if (!/^gen\d+/.test(targetId)) formatId = formatId.replace(/^gen\d+/, ''); // skip generation prefix if it wasn't provided - if (targetId && !format[targetId + 'Show'] && sectionId !== targetId && format.id === formatList[i] && !formatId.startsWith(targetId)) continue; - if (isOMSearch && format.id.startsWith('gen') && ['ou', 'uu', 'ru', 'ubers', 'lc', 'customgame', 'doublescustomgame', 'gbusingles', 'gbudoubles'].includes(format.id.slice(4))) continue; - if (isOMSearch && (format.id === 'gen5nu')) continue; - totalMatches++; - if (!sections[sectionId]) sections[sectionId] = {name: format.section, formats: []}; - sections[sectionId].formats.push(format.id); - if (format.id !== targetId) continue; - exactMatch = sectionId; - break; - } - - if (!totalMatches) return this.errorReply("No " + (target ? "matched " : "") + "formats found."); - if (totalMatches === 1) { - let format = Dex.getFormat(Object.values(sections)[0].formats[0]); - let formatType = (format.gameType || "singles"); - formatType = formatType.charAt(0).toUpperCase() + formatType.slice(1).toLowerCase(); - if (!format.desc) return this.sendReplyBox("No description found for this " + formatType + " " + format.section + " format."); - return this.sendReplyBox(format.desc.join("
")); - } - - let tableStyle = `border:1px solid gray; border-collapse:collapse`; - - if (this.broadcasting) { - tableStyle += `; display:inline-block; max-height:240px;" class="scrollable`; - } - - // Build tables - let buf = [``]; - for (let sectionId in sections) { - if (exactMatch && sectionId !== exactMatch) continue; - buf.push(Chat.html``); - for (let i = 0; i < sections[sectionId].formats.length; i++) { - let format = Dex.getFormat(sections[sectionId].formats[i]); - let nameHTML = Chat.escapeHTML(format.name); - let descHTML = format.desc ? format.desc.join("
") : "—"; - buf.push(``); - } - } - buf.push(`
${sections[sectionId].name}
${nameHTML}${descHTML}
`); - return this.sendReply("|raw|" + buf.join("") + ""); - }, - - '!roomhelp': true, - roomhelp: function (target, room, user) { - if (!this.canBroadcast('!htmlbox')) return; - if (this.broadcastMessage && !this.can('declare', null, room)) return false; - - if (!this.runBroadcast('!htmlbox')) return; - this.sendReplyBox( - "Room drivers (%) can use:
" + - "- /warn OR /k username: warn a user and show the Pokémon Showdown rules
" + - "- /mute OR /m username: 7 minute mute
" + - "- /hourmute OR /hm username: 60 minute mute
" + - "- /unmute username: unmute
" + - "- /announce OR /wall message: make an announcement
" + - "- /modlog username: search the moderator log of the room
" + - "- /modnote note: adds a moderator note that can be read through modlog
" + - "
" + - "Room moderators (@) can also use:
" + - "- /roomban OR /rb username: bans user from the room
" + - "- /roomunban username: unbans user from the room
" + - "- /roomvoice username: appoint a room voice
" + - "- /roomdevoice username: remove a room voice
" + - "- /staffintro intro: sets the staff introduction that will be displayed for all staff joining the room
" + - "- /roomsettings: change a variety of room settings, namely modchat
" + - "
" + - "Room owners (#) can also use:
" + - "- /roomintro intro: sets the room introduction that will be displayed for all users joining the room
" + - "- /rules rules link: set the room rules link seen when using /rules
" + - "- /roommod, /roomdriver username: appoint a room moderator/driver
" + - "- /roomdemod, /roomdedriver username: remove a room moderator/driver
" + - "- /roomdeauth username: remove all room auth from a user
" + - "- /declare message: make a large blue declaration to the room
" + - "- !htmlbox HTML code: broadcasts a box of HTML code to the room
" + - "- !showimage [url], [width], [height]: shows an image to the room
" + - "- /roomsettings: change a variety of room settings, including modchat, capsfilter, etc
" + - "
" + - "More detailed help can be found in the roomauth guide
" + - "
" + - "Tournament Help:
" + - "- /tour create format, elimination: Creates a new single elimination tournament in the current room.
" + - "- /tour create format, roundrobin: Creates a new round robin tournament in the current room.
" + - "- /tour end: Forcibly ends the tournament in the current room
" + - "- /tour start: Starts the tournament in the current room
" + - "- /tour banlist [pokemon], [talent], [...]: Bans moves, abilities, Pokémon or items from being used in a tournament (it must be created first)
" + - "
" + - "More detailed help can be found in the tournaments guide
" + - "" - ); - }, - - '!restarthelp': true, - restarthelp: function (target, room, user) { - if (!Rooms.global.lockdown && !this.can('lockdown')) return false; - if (!this.runBroadcast()) return; - this.sendReplyBox( - "The server is restarting. Things to know:
" + - "- We wait a few minutes before restarting so people can finish up their battles
" + - "- The restart itself will take around 0.6 seconds
" + - "- Your ladder ranking and teams will not change
" + - "- We are restarting to update Pokémon Showdown to a newer version" - ); - }, - - '!processes': true, - processes: function (target, room, user) { - if (!this.can('lockdown')) return false; - - let buf = `${process.pid} - Main
`; - Sockets.workers.forEach(worker => { - buf += `${worker.pid || worker.process.pid} - Sockets ${worker.id}
`; - }); - - const ProcessManager = require('../process-manager'); - ProcessManager.cache.forEach((execFile, processManager) => { - let i = 0; - processManager.processes.forEach(process => { - buf += `${process.process.pid} - ${path.basename(execFile)} ${i++}
`; - }); - }); - - this.sendReplyBox(buf); - }, - - '!rules': true, - rule: 'rules', - rules: function (target, room, user) { - if (!target) { - if (!this.runBroadcast()) return; - this.sendReplyBox("Please follow the rules:
" + - (room && room.rulesLink ? "- " + Chat.escapeHTML(room.title) + " room rules
" : "") + - "- " + (room && room.rulesLink ? "Global rules" : "Rules") + ""); - return; - } - if (!room) { - return this.errorReply("This is not a room you can set the rules of."); - } - if (!this.can('editroom', null, room)) return; - if (target.length > 100) { - return this.errorReply("Error: Room rules link is too long (must be under 100 characters). You can use a URL shortener to shorten the link."); - } - - if (target === 'delete' || target === 'remove') { - if (!room.rulesLink) return this.errorReply("This room does not have rules set to remove."); - delete room.rulesLink; - this.privateModCommand(`(${user.name} has removed the room rules link.)`); - } else { - room.rulesLink = target.trim(); - this.privateModCommand(`(${user.name} changed the room rules link to: ${target})`); - } - - if (room.chatRoomData) { - room.chatRoomData.rulesLink = room.rulesLink; - Rooms.global.writeChatRoomData(); - } - }, - 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: # & ~"], - - '!faq': true, - faq: function (target, room, user) { - if (!this.runBroadcast()) return; - target = target.toLowerCase(); - let showAll = target === 'all'; - if (showAll && this.broadcasting) { - return this.sendReplyBox("You cannot broadcast all FAQs at once."); - } - - let buffer = []; - if (showAll || target === 'staff') { - buffer.push("Staff FAQ"); - } - if (showAll || target === 'autoconfirmed' || target === 'ac') { - buffer.push("A user is autoconfirmed when they have won at least one rated battle and have been registered for one week or longer."); - } - if (showAll || target === 'coil') { - buffer.push("What is COIL?"); - } - if (showAll || target === 'tiering' || target === 'tiers' || target === 'tier') { - buffer.push("Tiering FAQ"); - } - if (showAll || target === 'badge' || target === 'badges') { - buffer.push("Badge FAQ"); - } - if (showAll || !buffer.length) { - buffer.unshift("Frequently Asked Questions"); - } - this.sendReplyBox(buffer.join("
")); - }, - faqhelp: ["/faq [theme] - Provides a link to the FAQ. Add deviation, doubles, randomcap, restart, or staff for a link to these questions. Add all for all of them.", - "!faq [theme] - Shows everyone a link to the FAQ. Add deviation, doubles, randomcap, restart, or staff for a link to these questions. Add all for all of them. Requires: + % @ * # & ~"], - - '!smogdex': true, - analysis: 'smogdex', - strategy: 'smogdex', - smogdex: function (target, room, user) { - if (!this.runBroadcast()) return; - - let targets = target.split(','); - let pokemon = Dex.getTemplate(targets[0]); - let item = Dex.getItem(targets[0]); - let move = Dex.getMove(targets[0]); - let ability = Dex.getAbility(targets[0]); - let format = Dex.getFormat(targets[0]); - let atLeastOne = false; - let generation = (targets[1] || 'sm').trim().toLowerCase(); - let genNumber = 7; - let extraFormat = Dex.getFormat(targets[2]); - - if (generation === 'sm' || generation === 'sumo' || generation === '7' || generation === 'seven') { - generation = 'sm'; - } else if (generation === 'xy' || generation === 'oras' || generation === '6' || generation === 'six') { - generation = 'xy'; - genNumber = 6; - } else if (generation === 'bw' || generation === 'bw2' || generation === '5' || generation === 'five') { - generation = 'bw'; - genNumber = 5; - } else if (generation === 'dp' || generation === 'dpp' || generation === '4' || generation === 'four') { - generation = 'dp'; - genNumber = 4; - } else if (generation === 'adv' || generation === 'rse' || generation === 'rs' || generation === '3' || generation === 'three') { - generation = 'rs'; - genNumber = 3; - } else if (generation === 'gsc' || generation === 'gs' || generation === '2' || generation === 'two') { - generation = 'gs'; - genNumber = 2; - } else if (generation === 'rby' || generation === 'rb' || generation === '1' || generation === 'one') { - generation = 'rb'; - genNumber = 1; - } else { - generation = 'sm'; - } - - // Pokemon - if (pokemon.exists) { - atLeastOne = true; - if (genNumber < pokemon.gen) { - return this.sendReplyBox("" + pokemon.name + " did not exist in " + generation.toUpperCase() + "!"); - } - if (pokemon.tier === 'CAP') { - generation = 'cap'; - this.errorReply("CAP is not currently supported by Smogon Strategic Pokedex."); - } - - if ((pokemon.battleOnly && pokemon.baseSpecies !== 'Greninja') || pokemon.baseSpecies === 'Keldeo' || pokemon.baseSpecies === 'Genesect') { - pokemon = Dex.getTemplate(pokemon.baseSpecies); - } - - let formatName = extraFormat.name; - let formatId = extraFormat.id; - if (formatId === 'battlespotdoubles') { - formatId = 'battle_spot_doubles'; - } else if (formatId === 'battlespottriples') { - formatId = 'battle_spot_triples'; - if (genNumber > 6) { - this.sendReplyBox("Triples formats are not an available format in Pokémon generation " + generation.toUpperCase() + "."); - } - } else if (formatId === 'doublesou') { - formatId = 'doubles'; - } else if (formatId === 'balancedhackmons') { - formatId = 'bh'; - } else if (formatId === 'battlespotsingles') { - formatId = 'battle_spot_singles'; - } else if (formatId === 'ubers') { - formatId = 'uber'; - } else if (formatId.includes('vgc')) { - formatId = 'vgc' + formatId.slice(-2); - formatName = 'VGC20' + formatId.slice(-2); - } else if (extraFormat.effectType !== 'Format') { - formatName = formatId = ''; - } - let speciesid = pokemon.speciesid; - // Special case for Meowstic-M - if (speciesid === 'meowstic') speciesid = 'meowsticm'; - if (pokemon.tier === 'CAP') { - this.sendReplyBox("" + generation.toUpperCase() + " " + Chat.escapeHTML(formatName) + " " + pokemon.name + " analysis preview, brought to you by Smogon University CAP Project"); - } else { - this.sendReplyBox("" + generation.toUpperCase() + " " + Chat.escapeHTML(formatName) + " " + pokemon.name + " analysis, brought to you by Smogon University"); - } - } - - // Item - if (item.exists && genNumber > 1 && item.gen <= genNumber) { - atLeastOne = true; - this.sendReplyBox("" + generation.toUpperCase() + " " + item.name + " item analysis, brought to you by Smogon University"); - } - - // Ability - if (ability.exists && genNumber > 2 && ability.gen <= genNumber) { - atLeastOne = true; - this.sendReplyBox("" + generation.toUpperCase() + " " + ability.name + " ability analysis, brought to you by Smogon University"); - } - - // Move - if (move.exists && move.gen <= genNumber) { - atLeastOne = true; - this.sendReplyBox("" + generation.toUpperCase() + " " + move.name + " move analysis, brought to you by Smogon University"); - } - - // Format - if (format.id) { - let formatName = format.name; - let formatId = format.id; - if (formatId === 'battlespotdoubles') { - formatId = 'battle_spot_doubles'; - } else if (formatId === 'battlespottriples') { - formatId = 'battle_spot_triples'; - if (genNumber > 6) { - this.sendReplyBox("Triples formats are not an available format in Pokémon generation " + generation.toUpperCase() + "."); - } - } else if (formatId === 'doublesou') { - formatId = 'doubles'; - } else if (formatId === 'balancedhackmons') { - formatId = 'bh'; - } else if (formatId === 'battlespotsingles') { - formatId = 'battle_spot_singles'; - } else if (formatId === 'ubers') { - formatId = 'uber'; - } else if (formatId.includes('vgc')) { - formatId = 'vgc' + formatId.slice(-2); - formatName = 'VGC20' + formatId.slice(-2); - } else if (format.effectType !== 'Format') { - formatName = formatId = ''; - } - if (formatName) { - atLeastOne = true; - this.sendReplyBox("" + generation.toUpperCase() + " " + Chat.escapeHTML(formatName) + " format analysis, brought to you by Smogon University"); - } - } - - if (!atLeastOne) { - return this.sendReplyBox("Pokémon, item, move, ability, or format not found for generation " + generation.toUpperCase() + "."); - } - }, - 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: + % @ * # & ~"], - - '!veekun': true, - veekun: function (target, broadcast, user) { - if (!this.runBroadcast()) return; - - if (!target) return this.parse('/help veekun'); - - let baseLink = 'http://veekun.com/dex/'; - - let pokemon = Dex.getTemplate(target); - let item = Dex.getItem(target); - let move = Dex.getMove(target); - let ability = Dex.getAbility(target); - let nature = Dex.getNature(target); - let atLeastOne = false; - - // Pokemon - if (pokemon.exists) { - atLeastOne = true; - if (pokemon.isNonstandard) return this.errorReply(pokemon.species + ' is not a real Pok\u00e9mon.'); - - let baseSpecies = pokemon.baseSpecies || pokemon.species; - let forme = pokemon.forme; - - // Showdown and Veekun have different naming for this gender difference forme of Meowstic. - if (baseSpecies === 'Meowstic' && forme === 'F') { - forme = 'Female'; - } - - let link = baseLink + 'pokemon/' + baseSpecies.toLowerCase(); - if (forme) { - link += '?form=' + forme.toLowerCase(); - } - - this.sendReplyBox("" + pokemon.species + " description by Veekun"); - } - - // Item - if (item.exists) { - atLeastOne = true; - let link = baseLink + 'items/' + item.name.toLowerCase(); - this.sendReplyBox("" + item.name + " item description by Veekun"); - } - - // Ability - if (ability.exists) { - atLeastOne = true; - if (ability.isNonstandard) return this.sendReply(ability.name + ' is not a real ability.'); - let link = baseLink + 'abilities/' + ability.name.toLowerCase(); - this.sendReplyBox("" + ability.name + " ability description by Veekun"); - } - - // Move - if (move.exists) { - atLeastOne = true; - if (move.isNonstandard) return this.errorReply(move.name + ' is not a real move.'); - let link = baseLink + 'moves/' + move.name.toLowerCase(); - this.sendReplyBox("" + move.name + " move description by Veekun"); - } - - // Nature - if (nature.exists) { - atLeastOne = true; - let link = baseLink + 'natures/' + nature.name.toLowerCase(); - this.sendReplyBox("" + nature.name + " nature description by Veekun"); - } - - 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: + % @ * # & ~"], - - '!register': true, - register: function () { - if (!this.runBroadcast()) return; - this.sendReplyBox('You will be prompted to register upon winning a rated battle. Alternatively, there is a register button in the menu in the upper right.'); - }, - - /********************************************************* - * Miscellaneous commands - *********************************************************/ - - potd: function (target, room, user) { - if (!this.can('potd')) return false; - - Config.potd = target; - Rooms.SimulatorProcess.eval('Config.potd = \'' + toId(target) + '\''); - if (target) { - if (Rooms.lobby) Rooms.lobby.addRaw("
The Pokémon of the Day is now " + target + "!
This Pokemon will be guaranteed to show up in random battles.
"); - this.logModCommand("The Pok\u00e9mon of the Day was changed to " + target + " by " + user.name + "."); - } else { - if (Rooms.lobby) Rooms.lobby.addRaw("
The Pokémon of the Day was removed!
No pokemon will be guaranteed in random battles.
"); - this.logModCommand("The Pok\u00e9mon of the Day was removed by " + user.name + "."); - } - }, - - '!dice': true, - roll: 'dice', - dice: function (target, room, user) { - if (!target || target.match(/[^\d\sdHL+-]/i)) return this.parse('/help dice'); - if (!this.runBroadcast()) return; - - // ~30 is widely regarded as the sample size required for sum to be a Gaussian distribution. - // This also sets a computation time constraint for safety. - let maxDice = 40; - - let diceQuantity = 1; - let diceDataStart = target.indexOf('d'); - if (diceDataStart >= 0) { - if (diceDataStart) diceQuantity = Number(target.slice(0, diceDataStart)); - target = target.slice(diceDataStart + 1); - if (!Number.isInteger(diceQuantity) || diceQuantity <= 0 || diceQuantity > maxDice) return this.sendReply("The amount of dice rolled should be a natural number up to " + maxDice + "."); - } - let offset = 0; - let removeOutlier = 0; - - let modifierData = target.match(/[+-]/); - if (modifierData) { - switch (target.slice(modifierData.index).trim().toLowerCase()) { - case '-l': - removeOutlier = -1; - break; - case '-h': - removeOutlier = +1; - break; - default: - offset = Number(target.slice(modifierData.index)); - if (isNaN(offset)) return this.parse('/help dice'); - if (!Number.isSafeInteger(offset)) return this.errorReply("The specified offset must be an integer up to " + Number.MAX_SAFE_INTEGER + "."); - } - if (removeOutlier && diceQuantity <= 1) return this.errorReply("More than one dice should be rolled before removing outliers."); - target = target.slice(0, modifierData.index); - } - - let diceFaces = 6; - if (target.length) { - diceFaces = Number(target); - if (!Number.isSafeInteger(diceFaces) || diceFaces <= 0) { - return this.errorReply("Rolled dice must have a natural amount of faces up to " + Number.MAX_SAFE_INTEGER + "."); - } - } - - if (diceQuantity > 1) { - // Make sure that we can deal with high rolls - if (!Number.isSafeInteger(offset < 0 ? diceQuantity * diceFaces : diceQuantity * diceFaces + offset)) { - return this.errorReply("The maximum sum of rolled dice must be lower or equal than " + Number.MAX_SAFE_INTEGER + "."); - } - } - - let maxRoll = 0; - let minRoll = Number.MAX_SAFE_INTEGER; - - let trackRolls = diceQuantity * (('' + diceFaces).length + 1) <= 60; - let rolls = []; - let rollSum = 0; - - for (let i = 0; i < diceQuantity; ++i) { - let curRoll = Math.floor(Math.random() * diceFaces) + 1; - rollSum += curRoll; - if (curRoll > maxRoll) maxRoll = curRoll; - if (curRoll < minRoll) minRoll = curRoll; - if (trackRolls) rolls.push(curRoll); - } - - // Apply modifiers - - if (removeOutlier > 0) { - rollSum -= maxRoll; - } else if (removeOutlier < 0) { - rollSum -= minRoll; - } - if (offset) rollSum += offset; - - // Reply with relevant information - - let offsetFragment = ""; - if (offset) offsetFragment += (offset > 0 ? "+" + offset : offset); - - if (diceQuantity === 1) return this.sendReplyBox("Roll (1 - " + diceFaces + ")" + offsetFragment + ": " + rollSum); - - let sumFragment = "
Sum" + offsetFragment + (removeOutlier ? " except " + (removeOutlier > 0 ? "highest" : "lowest") : ""); - return this.sendReplyBox("" + diceQuantity + " rolls (1 - " + diceFaces + ")" + (trackRolls ? ": " + rolls.join(", ") : "") + sumFragment + ": " + rollSum); - }, - dicehelp: ["/dice [max number] - Randomly picks a number between 1 and the number you choose.", - "/dice [number of dice]d[number of sides] - Simulates rolling a number of dice, e.g., /dice 2d4 simulates rolling two 4-sided dice.", - "/dice [number of dice]d[number of sides][+/-][offset] - Simulates rolling a number of dice and adding an offset to the sum, e.g., /dice 2d6+10: two standard dice are rolled; the result lies between 12 and 22.", - "/dice [number of dice]d[number of sides]-[H/L] - Simulates rolling a number of dice with removal of extreme values, e.g., /dice 3d8-L: rolls three 8-sided dice; the result ignores the lowest value."], - - '!pickrandom': true, - pr: 'pickrandom', - pick: 'pickrandom', - pickrandom: function (target, room, user) { - let options = target.split(','); - if (options.length < 2) return this.parse('/help pick'); - if (!this.runBroadcast()) return false; - const pickedOption = options[Math.floor(Math.random() * options.length)]; - return this.sendReplyBox('We randomly picked: ' + Chat.escapeHTML(pickedOption).trim()); - }, - pickrandomhelp: ["/pick [option], [option], ... - Randomly selects an item from a list containing 2 or more elements."], - - showimage: function (target, room, user) { - if (!target) return this.parse('/help showimage'); - if (!this.can('declare', null, room)) return false; - if (!this.runBroadcast()) return; - if (this.room.isPersonal && !this.user.can('announce')) { - return this.errorReply("Images are not allowed in personal rooms."); - } - - let targets = target.split(','); - if (targets.length !== 3) { - // Width and height are required because most browsers insert the - // element before width and height are known, and when the - // image is loaded, this changes the height of the chat area, which - // messes up autoscrolling. - return this.parse('/help showimage'); - } - - let image = targets[0].trim(); - if (!image) return this.errorReply('No image URL was provided!'); - image = this.canEmbedURI(image); - - if (!image) return false; - - let width = targets[1].trim(); - if (!width) return this.errorReply('No width for the image was provided!'); - if (!isNaN(width)) width += 'px'; - - let height = targets[2].trim(); - if (!height) return this.errorReply('No height for the image was provided!'); - if (!isNaN(height)) height += 'px'; - - let unitRegex = /^\d+(?:p[xtc]|%|[ecm]m|ex|in)$/; - if (!unitRegex.test(width)) { - return this.errorReply('"' + width + '" is not a valid width value!'); - } - if (!unitRegex.test(height)) { - return this.errorReply('"' + height + '" is not a valid height value!'); - } - - this.sendReply('|raw|'); - }, - showimagehelp: ["/showimage [url], [width], [height] - Show an image. " + - "Any CSS units may be used for the width or height (default: px)." + - "Requires: # & ~"], - - htmlbox: function (target, room, user, connection, cmd, message) { - if (!target) return this.parse('/help htmlbox'); - target = this.canHTML(target); - if (!target) return; - - if (!this.canBroadcast('!htmlbox')) return; - if (this.broadcastMessage && !this.can('declare', null, room)) return false; - - if (!this.runBroadcast('!htmlbox')) return; - - this.sendReplyBox(target); - }, - addhtmlbox: function (target, room, user, connection, cmd, message) { - if (!target) return this.parse('/help htmlbox'); - if (!this.canTalk()) return; - target = this.canHTML(target); - if (!target) return; - if (!this.can('addhtml', null, room)) return; - - if (!user.can('addhtml')) { - target += '
[' + Chat.escapeHTML(user.name) + ']
'; - } - - this.addBox(target); - }, - htmlboxhelp: [ - "/htmlbox [message] - Displays a message, parsing HTML code contained.", - "!htmlbox [message] - Shows everyone a message, parsing HTML code contained. Requires: ~ & #", - ], -}; - -process.nextTick(() => { - Dex.includeData(); -}); diff --git a/chat-plugins/mafia-data.js b/chat-plugins/mafia-data.js deleted file mode 100644 index 5b90c2d2b7f89..0000000000000 --- a/chat-plugins/mafia-data.js +++ /dev/null @@ -1,208 +0,0 @@ -// Data for the mafia chat plugin. - -'use strict'; - -// This object contains all functions that execute in the callback function of any mafia class. Executed from the context of the executing player. -// Target is a MafiaPlayer object. -let MafiaFunctions = { - copReport: function (target) { - let side = target.class.appearAs || target.class.side; - - if (side === 'town') { - return 'After investigating ' + target.name + ' you find out they\'re sided with the village.'; - } else if (side === 'mafia') { - return 'After investigating ' + target.name + ' you find out they\'re sided with the mafia.'; - } else { - return 'After investigating ' + target.name + ' you find out they\'re not sided with the village or mafia.'; - } - }, - naiveReport: function (target) { - return 'After investigating ' + target.name + ' you find out they\'re sided with the village.'; - }, - paranoidReport: function (target) { - return 'After investigating ' + target.name + ' you find out they\'re sided with the mafia.'; - }, - insaneReport: function (target) { - let side = target.class.appearAs || target.class.side; - - if (side === 'mafia') { - return 'After investigating ' + target.name + ' you find out they\'re sided with the village.'; - } else if (side === 'town') { - return 'After investigating ' + target.name + ' you find out they\'re sided with the mafia.'; - } else { - return 'After investigating ' + target.name + ' you find out they\'re not sided with the village or mafia.'; - } - }, - roleBlock: function (target) { - target.roleBlocked = true; - return 'You visit ' + target.name + ' during the night.'; - }, - protect: function (target) { - target.invincible = true; - return 'You give ' + target.name + ' their daily dose of medicine to keep them safe and sound.'; - }, - killTarget: function (target) { - target.kill('The werewolf has eaten a tasty snack!'); - }, - goonKill: function (target) { - target.kill('The goon has killed someone!'); - }, - foolWin: function () { - this.game.end('', "The fool has been lynched and is victorious!"); - }, -}; - -// Every role has a side they belong to, as well as all functions they have. These functions are objects with the targeting mechanics and a callback. -// events are atStart, onNight, onDay, onLynch. -exports.MafiaClasses = { - __proto__:null, - - villager: { - name: "Villager", - side: 'town', - image: '', - flavorText: 'You are a villager. You live peacefully in the town, which with the mafia activity hasn\'t been all too peaceful, actually.', - }, - - mafia: { - name: "Mafia", - side: 'mafia', - image: '', - flavorText: 'You are a member of the mafia. Every night, you get together with the other mafia members to eliminate someone in the town. The townsfolk aren\'t all that happy with that, however.', - }, - - hooker: { - name: "Hooker", - side: 'town', - image: '', - flavorText: 'You are the hooker. Every night, you can visit someone in the town. The person you visit can\'t execute any actions that night.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: 5, - callback: MafiaFunctions.roleBlock, - }, - }, - - doctor: { - name: "Doctor", - side: 'town', - image: '', - flavorText: 'You are the doctor. Every night, you can visit someone in the town. This person can\'t die that night.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: 4, - callback: MafiaFunctions.protect, - }, - }, - - cop: { - name: "Cop", - side: 'town', - image: '', - flavorText: 'You are the cop. Every night, you can visit someone in town. When the night is over, you\'ll receive a report with that person\'s alignment.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: -1, - callback: MafiaFunctions.copReport, - }, - }, - - paranoidcop: { - name: "Cop", - pregameName: "Paranoid Cop", - side: 'town', - image: '', - flavorText: 'You are the cop. Every night, you can visit someone in town. When the night is over, you\'ll receive a report with that person\'s alignment.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: -1, - callback: MafiaFunctions.paranoidReport, - }, - }, - - insanecop: { - name: "Cop", - pregameName: "Insane Cop", - side: 'town', - image: '', - flavorText: 'You are the cop. Every night, you can visit someone in town. When the night is over, you\'ll receive a report with that person\'s alignment.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: -1, - callback: MafiaFunctions.insaneReport, - }, - }, - - naivecop: { - name: "Cop", - pregameName: "Naive Cop", - side: 'town', - image: '', - flavorText: 'You are the cop. Every night, you can visit someone in town. When the night is over, you\'ll receive a report with that person\'s alignment.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: -1, - callback: MafiaFunctions.naiveReport, - }, - }, - - werewolf: { - name: "Werewolf", - side: 'solo', - image: '', - flavorText: 'You are the werewolf. You\'re not aligned with either town or mafia, and instead kill someone every night. You win if you\'re the only remaining player.', - victoryText: 'The wolf howls victorious, knowing he came out of this mess alive, and with some lunch as well.', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: 2, - callback: MafiaFunctions.killTarget, - }, - }, - - fool: { - name: "Fool", - side: 'town', - image: '', - flavorText: 'You are the fool. You\'re sided with the town, but only truly win if you get lynched.', - - onLynch: MafiaFunctions.foolWin, - }, - - godfather: { - name: "Godfather", - side: 'mafia', - image: '', - flavorText: 'You are the godfather. You\'re sided with the mafia, but appear as a villager on cop reports.', - appearAs: 'town', - }, - - mayor: { - name: "Mayor", - side: 'town', - image: '', - flavorText: 'You are the mayor. You\'re sided with the town, but your votes count twice during town meetings.', - }, - - goon: { - name: "Goon", - side: 'solo', - image: '', - flavorText: 'You are the goon. You appear as mafia on cop reports, and can kill someone once in the game. You win if you\'re the only person left alive.', - appearAs: 'mafia', - victoryText: 'The goon is victorious!', - - onNight: { - target: {side: 'any', count: 'single'}, - priority: 1, - oneshot: true, - callback: MafiaFunctions.goonKill, - }, - }, -}; diff --git a/chat-plugins/mafia.js b/chat-plugins/mafia.js deleted file mode 100644 index fe88fb3105db4..0000000000000 --- a/chat-plugins/mafia.js +++ /dev/null @@ -1,942 +0,0 @@ -// Mafia chat plugin. -// By bumbadadabum, with input from Zarel and art by crobat. - -'use strict'; - -let MafiaData = require('./mafia-data'); - -const deadImage = ''; -const meetingMsg = {town: 'The town has lynched a suspect!', mafia: 'The mafia strikes again!'}; - -const defaultSettings = {anonVotes: false, allowWills: false, autoModchat: false}; - -class MafiaPlayer extends Rooms.RoomGamePlayer { - constructor(user, game) { - super(user, game); - } - - get targeting() { - return this.validTargets && Object.keys(this.validTargets).length > 0; - } - - get voting() { - return this.validVotes && Object.keys(this.validVotes).length > 0; - } - - get done() { - return (!this.voting || this.game.currentVote.has(this)) && (!this.targeting || this.target); - } - - event(event) { - if (this.class[event].target) { - if (this.class[event].oneshot) { - if (!this.used) this.used = {}; - if (this.used[event]) return; - this.using = event; - } - this.toExecute = this.class[event].callback; - if (this.class[event].target.count === 'single') { - this.singleTarget(this.class[event].target.side); - } - this.targetWindow(this.class.image, this.class[event].flavorText); - } else { - this.toExecute = this.class[event].function; - } - - this.game.executionOrder.push(this); - } - - kill(flavorText) { - if (this.invincible) return; - - let message = flavorText + '
' + Chat.escapeHTML(this.name + ', the ' + this.class.name) + ' lies dead on the ground.'; - - if (this.allowWills && this.will) { - message += '
' + Chat.escapeHTML(this.name) + '\'s will: ' + Chat.escapeHTML(this.will); - } - - this.game.announcementWindow(deadImage, message); - this.game.playerCount--; - this.game.dead.push(this.name); - delete this.game.players[this.userid]; - this.destroy(); - } - - eliminate() { - if (this.game.gamestate === 'pregame') { - this.game.announcementWindow('', Chat.escapeHTML(this.name) + ' was kicked from the game.'); - } else { - this.game.announcementWindow(deadImage, Chat.escapeHTML(this.name + ', the ' + this.class.name) + ' was eliminated from the game.'); - } - this.game.playerCount--; - this.game.dead.push(this.name); - delete this.game.players[this.userid]; - this.destroy(); - } - - playerWindow(image, content) { - this.sendRoom('|html|' + this.game.mafiaWindow(image, content)); - } - - getRole() { - this.sendRoom('|html|' + this.game.mafiaWindow(this.class.image, Chat.escapeHTML(this.class.flavorText))); - } - - targetWindow(image, content, update) { - let output = content; - output += '

Who do you wish to target?

'; - for (let i in this.validTargets) { - output += ''; - } - output += ''; - - if (update) { - this.sendRoom('|uhtmlchange|mafia' + this.game.room.gameNumber + 'target' + this.game.gamestate + this.game.day + '|' + this.game.mafiaWindow(image, output)); - } else { - this.sendRoom('|uhtml|mafia' + this.game.room.gameNumber + 'target' + this.game.gamestate + this.game.day + '|' + this.game.mafiaWindow(image, output)); - } - } - - updateTarget(image) { - if (this.target) { - this.targetWindow(image, 'Targeting ' + Chat.escapeHTML(this.target.name) + '!
', true); - } else { - this.targetWindow(image, 'You chose to not target anybody.
', true); - } - } - - voteWindow(image, content, update) { - let output = content; - output += '

Who do you wish to vote for?

'; - for (let i in this.validVotes) { - output += ''; - } - output += ''; - - if (update) { - this.sendRoom('|uhtmlchange|mafia' + this.game.room.gameNumber + 'vote' + this.game.gamestate + this.game.day + '|' + this.game.mafiaWindow(image, output)); - } else { - this.sendRoom('|uhtml|mafia' + this.game.room.gameNumber + 'vote' + this.game.gamestate + this.game.day + '|' + this.game.mafiaWindow(image, output)); - } - } - - // Targeting mechanics: - - // Targets a single player of side side. - singleTarget(side, targetSelf) { - this.validTargets = {}; - for (let i in this.game.players) { - let thisSide = this.game.players[i].class.side; - if ((side === 'any' || thisSide === side || (side === 'nomafia' && thisSide !== 'mafia')) && (targetSelf || this.game.players[i] !== this)) { - this.validTargets[i] = this.game.players[i]; - } - } - } - - // Triggers after the user has selected their target. - onReceiveTarget(target) { - if (!this.targeting) { - return this.sendRoom("You're not selecting a target right now."); - } - - if (target in this.validTargets || target === 'none') { - if (target === 'none') { - if (this.using) delete this.using; - this.toExecute = null; - } else { - this.target = this.game.players[target]; - } - - this.updateTarget(this.class.image); - - for (let i in this.game.players) { - if (!this.game.players[i].done) { - return; - } - } - this.game.progress(true); - } else { - this.sendRoom("Invalid target"); - } - } - - // Triggers after the user has voted. - onReceiveVote(target) { - if (!this.voting) { - return this.sendRoom("You don't need to vote right now."); - } - - if (target in this.validVotes || target === 'none') { - this.game.currentVote.set(this, target); - this.game.updateVotes(); - - for (let i in this.game.players) { - if (!this.game.players[i].done) { - return; - } - } - this.game.progress(true); - } else { - this.sendRoom("You can't vote for that person"); - } - } -} - -class Mafia extends Rooms.RoomGame { - constructor(room, max, roles, settings) { - super(room); - - if (room.gameNumber) { - room.gameNumber++; - } else { - room.gameNumber = 1; - } - - this.gameid = 'mafia'; - this.title = 'Mafia'; - this.allowRenames = true; - this.playerCap = max; - this.PlayerClass = MafiaPlayer; - - this.roles = roles; - this.day = 1; - this.gamestate = 'pregame'; - this.timer = null; - this.dead = []; - - for (let i in settings) { - this[i] = settings[i]; - } - - this.roleString = this.roles.reduce((prev, cur, index, array) => { - let roleName = MafiaData.MafiaClasses[cur].pregameName || MafiaData.MafiaClasses[cur].name; - if (index === array.length - 1) { - return prev + roleName; - } else { - return prev + roleName + ', '; - } - }, ''); - - this.room.send('|uhtml|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(false)); - } - - exportGame() { - let gameObj = {classes: {}, settings: {}}; - - for (let i = 0; i < this.roles.length; i++) { - if (this.roles[i] in gameObj.classes) { - gameObj.classes[this.roles[i]]++; - } else { - gameObj.classes[this.roles[i]] = 1; - } - } - - for (let i in defaultSettings) { - gameObj.settings[i] = this[i]; - } - - return JSON.stringify(gameObj); - } - - onConnect(user, connection) { - if (user.userid in this.players) { - connection.sendTo(this.room, '|uhtml|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(true)); - } else { - connection.sendTo(this.room, '|uhtml|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(false)); - } - } - - onRename(user, oldUserid) { - if (!(oldUserid in this.players)) return; - - if (user.userid === oldUserid) { - this.players[user.userid].name = user.name; - } else { - this.players[user.userid] = this.players[oldUserid]; - this.players[user.userid].userid = user.userid; - this.players[user.userid].name = user.name; - delete this.players[oldUserid]; - } - - this.updatePregame(); - } - - onLeave(user) { - if (this.gamestate === 'pregame' && user.userid in this.players) { - delete this.players[user.userid]; - this.updatePregame(); - } - } - - forfeit(user) { - if (!(user.userid in this.players)) return false; - if (this.gamestate === 'pregame') return false; - - this.players[user.userid].eliminate(); - return true; - } - - joinGame(user, text) { - if (this.gamestate !== 'pregame') return user.sendTo(this.room, "The game has started already."); - - if (this.addPlayer(user)) { - this.updatePregame(); - if (this.playerCount === this.playerCap) { - this.start(); - } - } else { - return user.sendTo(this.room, "You're already in the game."); - } - } - - leaveGame(user, text) { - if (!(user.userid in this.players)) return false; - if (this.gamestate !== 'pregame') return user.sendTo(this.room, "The game has started already. If you wish to give up, use /forfeit."); - - this.removePlayer(user); - this.updatePregame(); - } - - choose(user, target) { - if (!(user.userid in this.players)) return user.sendTo(this.room, "You're not in the game."); - if (this.gamestate === 'pregame') return user.sendTo(this.room, "The game hasn't started yet."); - - let parts = target.split(' ').map(toId); - let cmd = parts.shift(); - let player = parts.join(' '); - - if (player in this.players || player === 'none') { - if (cmd === 'target') { - return this.players[user.userid].onReceiveTarget(player); - } else if (cmd === 'vote') { - return this.players[user.userid].onReceiveVote(player); - } - } - - return user.sendTo(this.room, "Incorrect command or target."); - } - - makePlayer(user) { - return new MafiaPlayer(user, this); - } - - displayPregame() { - for (let i in this.room.users) { - let user = this.room.users[i]; - - if (user.userid in this.players) { - user.sendTo(this.room, '|uhtml|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(true)); - } else { - user.sendTo(this.room, '|uhtml|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(false)); - } - } - } - - pregameWindow(joined) { - let temp = Object.values(this.players); - let output = '

A game of mafia has been made!

Participants (' + (this.playerCap - temp.length) + ' needed):

'; - for (let i = 0; i < temp.length; i++) { - output += Chat.escapeHTML(temp[i].name); - if (i < temp.length - 1) { - output += ', '; - } - } - - output += '
Roles: ' + this.roleString + '
'; - - if (this.allowWills) output += 'Wills are allowed. '; - if (this.anonVotes) output += 'Votes are anonymous. '; - if (this.autoModchat) output += 'Modchat is automatically set to + at night. '; - - if (joined) { - output += '
'; - } else { - output += '
'; - } - - return output + '
'; - } - - updatePregame() { - for (let i in this.room.users) { - let user = this.room.users[i]; - - if (user.userid in this.players) { - user.sendTo(this.room, '|uhtmlchange|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(true)); - } else { - user.sendTo(this.room, '|uhtmlchange|mafia' + this.room.gameNumber + 'pregame|' + this.pregameWindow(false)); - } - } - } - - // UI - - // Simple window, used for announcements and the likes. - mafiaWindow(image, content) { - let output = '
'; - output += '

' + ((this.gamestate === 'night') ? 'Night ' : 'Day ') + this.day + '

'; - output += '
' + image + ''; - output += content; - output += '
'; - return output; - } - - announcementWindow(image, content) { - this.room.add('|html|' + this.mafiaWindow(image, content)); - this.room.update(); - } - - displayGamestate() { - let alive = []; - let mafia = []; - - for (let i in this.players) { - alive.push(this.players[i].name); - if (this.players[i].class.side === 'mafia') { - mafia.push(this.players[i].name); - } - } - - let content = 'Roles: ' + this.roleString + '
Alive: ' + Chat.escapeHTML(alive.join(', ')) + '
Dead: ' + Chat.escapeHTML(this.dead.join(', ')); - - for (let i in this.players) { - if (this.players[i].class.side === 'mafia') { - this.players[i].sendRoom('|html|' + this.mafiaWindow(this.players[i].class.image, content + '
Mafia: ' + Chat.escapeHTML(mafia.join(', ')))); - } else { - this.players[i].sendRoom('|html|' + this.mafiaWindow(this.players[i].class.image, content)); - } - } - } - - parseVotes() { - let votes = {}; - this.currentVote.forEach((target, voter) => { - if (!(target in votes)) { - votes[target] = {voters: [], num: 0}; - } - - votes[target].voters.push(voter.name); - let numVotes = voter.class.numVotes || 1; - votes[target].num += numVotes; - }); - return votes; - } - - updateVotes() { - let text = ''; - let votes = this.parseVotes(); - - for (let i in votes) { - if (votes[i].num > (Object.keys(this.players).length / 2)) return this.progress(true); - text += '' + (i === 'none' ? 'Abstain' : Chat.escapeHTML(this.players[i].name)) + ': '; - if (this.anonVotes) { - text += votes[i].num + ' votes.'; - } else { - text += votes[i].voters.join(', '); - } - text += '
'; - } - - for (let i in this.players) { - let player = this.players[i]; - if (player.voting) { - player.voteWindow(player.class.image, text, true); - } - } - } - - tallyVotes() { - let votes = this.parseVotes(); - let max = 0; - let toKill = null; - for (let i in votes) { - if (votes[i].num > max) { - toKill = i; - max = votes[i].num; - } else if (votes[i].num === max) { - toKill = null; - max = votes[i].num; - } - } - - if (toKill && toKill !== 'none') { - return this.players[toKill]; - } else { - return false; - } - } - - // Gamestate handling: - - start() { - let rolesLeft = this.roles; - - for (let i in this.players) { - let index = Math.floor(Math.random() * rolesLeft.length); - this.players[i].class = MafiaData.MafiaClasses[rolesLeft[index]]; - rolesLeft.splice(index, 1); - if (!this.players[i].class.atStart) { - this.players[i].getRole(); - } - } - - this.room.send('|uhtmlchange|mafia' + this.room.gameNumber + 'pregame|
The game has started!
'); - this.allowRenames = false; - this.gamestate = 'initial'; - this.progress(); - } - - end(image, content) { - this.announcementWindow(image, content); - - clearTimeout(this.timer); - this.timer = null; - this.room.game = null; - if (this.autoModchat && this.oldModchat && this.room.modchat === '+') { - this.room.modchat = this.oldModchat; - } - this.destroy(); - } - - forceEnd() { - this.room.send("The game of mafia was forcibly ended."); - - clearTimeout(this.timer); - this.timer = null; - this.room.game = null; - if (this.autoModchat && this.oldModchat && this.room.modchat === '+') { - this.room.modchat = this.oldModchat; - } - this.destroy(); - } - - progress(early) { - if (!early) { - for (let i in this.players) { - if (!this.players[i].done) { - this.players[i].eliminate(); - } - } - } - - if (this.executionOrder) { - for (let i = 0; i < this.executionOrder.length; i++) { - let player = this.executionOrder[i]; - if (!player) continue; - if (player.toExecute) { - if (player.roleBlocked) { - player.roleBlocked = false; - player.toExecute = null; - } else { - if (player.using) { - player.used[player.using] = 1; - delete player.using; - } - let output; - if (player.target) { - output = Chat.escapeHTML(player.toExecute(player.target)); - } else { - output = Chat.escapeHTML(player.toExecute()); - } - - if (output) { - player.playerWindow(player.class.image, output); - } - player.toExecute = null; - } - } - } - } - - this.executionOrder = null; - - if (this.meeting) { - let toKill = this.tallyVotes(); - - if (toKill) { - toKill.kill(meetingMsg[this.meeting]); - - if (this.meeting === 'town' && toKill.class.onLynch) { - toKill.class.onLynch(); - } - } else if (this.meeting === 'town') { - this.announcementWindow("Nobody was lynched."); - } - - this.meeting = null; - } - - delete this.currentVote; - - let mafiaCount = 0; - let townCount = 0; - - for (let i in this.players) { - let player = this.players[i]; - - delete player.target; - delete player.validTargets; - delete player.validVotes; - - if (player.invincible) { - player.invincible = false; - } - - if (player.class.side === 'mafia') { - mafiaCount++; - } else if (player.class.side === 'town') { - townCount++; - } - } - - if (mafiaCount > this.playerCount - mafiaCount) { - this.end(MafiaData.MafiaClasses.mafia.image, 'The mafia is victorious, how awful!'); - return; - } else if (!mafiaCount && (townCount === this.playerCount)) { - this.end(MafiaData.MafiaClasses.villager.image, 'The town has driven the mafia out successfully!'); - return; - } else if (this.playerCount === 1) { - for (let i in this.players) { - if (this.players[i].class.side === 'solo') { - this.end(this.players[i].class.image, this.players[i].class.victoryText); - return; - } - } - } - - if (this.timer) { - clearTimeout(this.timer); - this.timer = null; - } - - switch (this.gamestate) { - case 'night': - this.day++; - if (this.autoModchat && this.day) { - if (this.room.modchat === '+') { - this.room.modchat = this.oldModchat; - } - delete this.oldModchat; - } - // falls through - case 'initial': - this.gamestate = 'day'; - this.displayGamestate(); - this.setTimer(0.5); - break; - case 'day': - this.gamestate = 'lynch'; - this.townMeeting(); - this.gameEvent('onDay', 2); - break; - case 'lynch': - this.gamestate = 'night'; - if (this.autoModchat) { - this.oldModchat = this.room.modchat; - this.room.modchat = '+'; - } - this.mafiaMeeting(); - this.gameEvent('onNight', 2); - } - } - - setTimer(mins) { - this.timer = setTimeout(() => { - for (let i in this.players) { - this.players[i].sendRoom("10 seconds left!"); - } - this.timer = setTimeout(() => { - this.progress(); - }, 10000); - }, ((mins - 0.167) * 60000)); - } - - // Meetings: - - mafiaMeeting() { - this.meeting = 'mafia'; - this.currentVote = new Map(); - let voters = []; - let noMafia = {}; - - for (let i in this.players) { - let player = this.players[i]; - - if (player.class.side !== 'mafia') { - noMafia[i] = player; - } else { - voters.push(player); - } - } - - for (let i = 0; i < voters.length; i++) { - voters[i].validVotes = noMafia; - - let flavorText = ''; - if (voters.length === 1) { - flavorText += 'As the only live member of the mafia, you have to be careful. Not careful enough to stop killing, though.'; - } else if (voters.length === 2) { - flavorText += 'You sit down with the only other member of the mafia, ' + (i === 0 ? Chat.escapeHTML(voters[1].name) : Chat.escapeHTML(voters[0].name)) + '.'; - } else { - flavorText += 'You sit down with the other members of the mafia, '; - for (let j = 0; i < voters.length; i++) { - if (i !== j) { - if (j === (voters.length - 1) || (j < i && j === (voters.length - 2))) { - flavorText += ' and '; - } else { - flavorText += ', '; - } - flavorText += Chat.escapeHTML(voters[i].name); - } - } - } - - voters[i].voteWindow(voters[i].class.image, flavorText); - } - } - - townMeeting() { - this.meeting = 'town'; - this.currentVote = new Map(); - - for (let i in this.players) { - let player = this.players[i]; - player.validVotes = this.players; - - player.voteWindow(player.class.image, 'Outraged over the mafia\'s activity in town, the people decide to lynch a person they suspect of being involved with the mafia.'); - } - } - - gameEvent(event, timer) { - this.executionOrder = []; - - for (let i in this.players) { - let player = this.players[i]; - if (player.class[event]) { - player.event(event); - } - } - - this.executionOrder.sort((a, b) => - b.class[event].priority - a.class[event].priority - ); - - if (this.executionOrder.length || this.currentVote) { - this.setTimer(timer); - } else { - this.setTimer(0.25); - } - } -} - -exports.commands = { - mafia: { - create: 'new', - new: function (target, room, user) { - if (!this.can('game', null, room)) return false; - if (!room.mafiaEnabled) return this.errorReply("Mafia is disabled for this room."); - if (!this.canTalk()) return; - if (room.game) return this.errorReply("There is already a game of " + room.game.title + " in progress in this room."); - - // Check if input is a JSON object. If it is, use the parser for json input. - let targetObj; - try { - targetObj = JSON.parse(target); - } catch (e) {} - - if (targetObj) { - if (!(targetObj.classes && Object.keys(targetObj.classes).length)) return this.errorReply("Invalid input."); - - let roleList = []; - - for (let i in targetObj.classes) { - if (!MafiaData.MafiaClasses[i]) { - return this.errorReply(Chat.escapeHTML(i) + " is not a valid mafia class."); - } - - let amt = parseInt(Dex.getString(targetObj.classes[i])); - if (isNaN(amt) || amt < 0 || amt > 25) return this.errorReply("Invalid amount for class " + Chat.escapeHTML(i)); - - for (let j = 0; j < amt; j++) { - roleList.push(i); - } - } - - let settings = {}; - - if (targetObj.settings) { - for (let i in defaultSettings) { - if (i in targetObj.settings) { - settings[i] = !!targetObj.settings[i]; - } else { - settings[i] = defaultSettings[i]; - } - } - } else { - settings = defaultSettings; - } - - room.game = new Mafia(room, roleList.length, roleList, settings); - } else { - let params = target.split(',').map(param => param.toLowerCase().trim()); - - if (params[0] === 'dethy') params = ['goon', 'cop', 'insanecop', 'paranoidcop', 'naivecop']; - - if (!params) return this.errorReply("No roles entered."); - - for (let i = 0; i < params.length; i++) { - if (!MafiaData.MafiaClasses[params[i]]) { - return this.errorReply(Chat.escapeHTML(params[i]) + " is not a valid mafia class."); - } - } - - room.game = new Mafia(room, params.length, params, defaultSettings); - } - - return this.privateModCommand("(A game of mafia was started by " + user.name + ".)"); - }, - - display: function (target, room, user) { - if (!room.game || room.game.gameid !== 'mafia') return this.errorReply("There is no game of mafia running in this room."); - if (room.game.gamestate !== 'pregame') return this.errorReply("The game has started already."); - if (!this.canTalk()) return; - - room.game.displayPregame(); - }, - - will: function (target, room, user) { - if (!room.game || room.game.gameid !== 'mafia') return this.errorReply("There is no game of mafia running in this room."); - if (!this.canTalk()) return; - - if (target.toLowerCase() === 'on' || target.toLowerCase() === 'enable') { - if (!this.can('game', null, room)) return false; - if (room.game.gamestate !== 'pregame') return this.errorReply("The game has started already."); - - if (room.game.allowWills) { - this.errorReply("Wills are already enabled."); - } else { - room.game.allowWills = true; - room.game.updatePregame(); - } - } else if (target.toLowerCase() === 'off' || target.toLowerCase() === 'disable') { - if (!this.can('game', null, room)) return false; - if (room.game.gamestate !== 'pregame') return this.errorReply("The game has started already."); - - if (!room.game.allowWills) { - this.errorReply("Wills are already disabled."); - } else { - room.game.allowWills = false; - room.game.updatePregame(); - } - } else if (room.game.allowWills) { - if (!(user.userid in room.game.players)) return this.errorReply("You're not in the game."); - if (room.game.gamestate !== 'pregame') return this.errorReply("You can't do that before the game has started."); - if (target.length > 200) return this.errorReply("Will too long."); - - let will = room.game.players[user.userid].will; - - if (!target.length) { - if (will) { - return this.sendReply("Your will is: " + Chat.escapeHTML(will)); - } else { - return this.sendReply("You don't have a will set."); - } - } - - room.game.players[user.userid].will = target; - this.sendReply("Will set to: " + Chat.escapeHTML(target)); - } else { - this.errorReply("Wills are not allowed in this game."); - } - }, - - anonvotes: function (target, room, user) { - if (!room.game || room.game.gameid !== 'mafia') return this.errorReply("There is no game of mafia running in this room."); - if (!this.canTalk()) return; - if (!this.can('game', null, room)) return false; - if (room.game.gamestate !== 'pregame') return this.errorReply("The game has started already."); - - if (target === 'on' || target === 'enable') { - if (room.game.anonVotes) { - this.errorReply("Anonymous votes are already enabled."); - } else { - room.game.anonVotes = true; - room.game.updatePregame(); - } - } else if (target === 'off' || target === 'disable') { - if (!room.game.anonVotes) { - this.errorReply("Anonymous votes are already disabled."); - } else { - room.game.anonVotes = false; - room.game.updatePregame(); - } - } - }, - - automodchat: function (target, room, user) { - if (!room.game || room.game.gameid !== 'mafia') return this.errorReply("There is no game of mafia running in this room."); - if (!this.canTalk()) return; - if (!this.can('game', null, room)) return false; - if (room.game.gamestate !== 'pregame') return this.errorReply("The game has started already."); - - if (target === 'on' || target === 'enable') { - if (room.game.autoModchat) { - this.errorReply("Automatic modchat is already enabled."); - } else { - room.game.autoModchat = true; - room.game.updatePregame(); - } - } else if (target === 'off' || target === 'disable') { - if (!room.game.autoModchat) { - this.errorReply("Automatic modchat is already disabled."); - } else { - room.game.autoModchat = false; - room.game.updatePregame(); - } - } - }, - - export: function (target, room, user) { - if (!room.game || room.game.gameid !== 'mafia') return this.errorReply("There is no game of mafia running in this room."); - if (!this.canTalk()) return; - if (!this.can('game', null, room)) return false; - - return this.sendReply("/mafia new " + room.game.exportGame()); - }, - - end: function (target, room, user) { - if (!this.can('game', null, room)) return false; - if (!room.game || room.game.gameid !== 'mafia') return this.errorReply("There is no game of mafia running in this room."); - if (!this.canTalk()) return; - - room.game.forceEnd(); - return this.privateModCommand("(The game of mafia was forcibly ended by " + user.name + ".)"); - }, - - disable: function (target, room, user) { - if (!this.can('mafiamanagement', null, room)) return; - if (!room.mafiaEnabled) { - return this.errorReply("Mafia is already disabled."); - } - delete room.mafiaEnabled; - if (room.chatRoomData) { - delete room.chatRoomData.mafiaEnabled; - Rooms.global.writeChatRoomData(); - } - return this.sendReply("Mafia has been disabled for this room."); - }, - - enable: function (target, room, user) { - if (!this.can('mafiamanagement', null, room)) return; - if (room.mafiaEnabled) { - return this.errorReply("Mafia is already enabled."); - } - room.mafiaEnabled = true; - if (room.chatRoomData) { - room.chatRoomData.mafiaEnabled = true; - Rooms.global.writeChatRoomData(); - } - return this.sendReply("Mafia has been enabled for this room."); - }, - }, -}; diff --git a/chat-plugins/modlog.js b/chat-plugins/modlog.js deleted file mode 100644 index 63bcea4fe10a1..0000000000000 --- a/chat-plugins/modlog.js +++ /dev/null @@ -1,346 +0,0 @@ -'use strict'; - -const FS = require('./../fs'); -const path = require('path'); -const ProcessManager = require('./../process-manager'); -const execFileSync = require('child_process').execFileSync; - -const MAX_PROCESSES = 1; -const DEFAULT_RESULTS_LENGTH = 100; -const MORE_BUTTON_INCREMENTS = [200, 400, 800, 1600, 3200]; -const LINES_SEPARATOR = 'lines='; -const MAX_RESULTS_LENGTH = MORE_BUTTON_INCREMENTS[MORE_BUTTON_INCREMENTS.length - 1]; -const LOG_PATH = 'logs/modlog/'; - -class ModlogManager extends ProcessManager { - onMessageUpstream(message) { - // Protocol: - // when crashing: "[id]|0" - // when not crashing: "[id]|1|[results]" - let pipeIndex = message.indexOf('|'); - let id = +message.substr(0, pipeIndex); - - if (this.pendingTasks.has(id)) { - this.pendingTasks.get(id)(message.slice(pipeIndex + 1)); - this.pendingTasks.delete(id); - this.release(); - } - } - - async onMessageDownstream(message) { - // protocol: - // "[id]|[comma-separated list of room ids]|[searchString]|[exactSearch]|[maxLines]" - let pipeIndex = message.indexOf('|'); - let nextPipeIndex = message.indexOf('|', pipeIndex + 1); - let id = message.substr(0, pipeIndex); - let rooms = message.substr(pipeIndex + 1, nextPipeIndex - pipeIndex - 1); - - pipeIndex = nextPipeIndex; - nextPipeIndex = message.indexOf('|', pipeIndex + 1); - let searchString = message.substr(pipeIndex + 1, nextPipeIndex - pipeIndex - 1); - - pipeIndex = nextPipeIndex; - nextPipeIndex = message.indexOf('|', pipeIndex + 1); - let exactSearch = message.substr(pipeIndex + 1, nextPipeIndex - pipeIndex - 1); - let maxLines = message.substr(nextPipeIndex + 1); - - process.send(id + '|' + await this.receive(rooms, searchString, exactSearch, maxLines)); - } - - async receive(rooms, searchString, exactSearch, maxLines) { - let result = ''; - exactSearch = exactSearch === '1'; - maxLines = Number(maxLines); - try { - result = '1|' + await runModlog(rooms.split(','), searchString, exactSearch, maxLines); - } catch (err) { - require('../crashlogger')(err, 'A modlog query', { - rooms: rooms, - searchString: searchString, - exactSearch: exactSearch, - maxLines: maxLines, - }); - result = '0'; - } - return result; - } -} - -exports.ModlogManager = ModlogManager; - -const PM = exports.PM = new ModlogManager({ - execFile: __filename, - maxProcesses: MAX_PROCESSES, - isChatBased: true, -}); - -if (process.send && module === process.mainModule) { - global.Config = require('../config/config'); - process.on('uncaughtException', err => { - if (Config.crashguard) { - require('../crashlogger')(err, 'A modlog child process'); - } - }); - global.Dex = require('../sim/dex'); - global.toId = Dex.getId; - process.on('message', message => PM.onMessageDownstream(message)); - process.on('disconnect', () => process.exit()); - require('../repl').start('modlog', cmd => eval(cmd)); -} else { - PM.spawn(); -} - -class SortedLimitedLengthList { - constructor(maxSize) { - this.maxSize = maxSize; - this.list = []; - } - - getListClone() { - return this.list.slice(0); - } - - tryInsert(element) { - let insertedAt = -1; - for (let i = this.list.length - 1; i >= 0; i--) { - if (element.localeCompare(this.list[i]) < 0) { - insertedAt = i + 1; - if (i === this.list.length - 1) { - this.list.push(element); - break; - } - this.list.splice(i + 1, 0, element); - break; - } - } - if (insertedAt < 0) this.list.splice(0, 0, element); - if (this.list.length > this.maxSize) { - this.list.pop(); - if (insertedAt === this.list.length) return false; - } - return true; - } -} - -function checkRipgrepAvailability() { - if (Config.ripgrepmodlog === undefined) { - try { - execFileSync('rg', ['--version'], {cwd: path.normalize(`${__dirname}/../`)}); - Config.ripgrepmodlog = true; - } catch (error) { - Config.ripgrepmodlog = false; - } - } - return Config.ripgrepmodlog; -} - -function getMoreButton(room, search, useExactSearch, lines, maxLines) { - let newLines = 0; - for (let increase of MORE_BUTTON_INCREMENTS) { - if (increase > lines) { - newLines = increase; - break; - } - } - if (!newLines || lines < maxLines) { - return ''; // don't show a button if no more pre-set increments are valid or if the amount of results is already below the max - } else { - if (useExactSearch) search = Chat.escapeHTML(`"${search}"`); - return `
`; - } -} - -async function runModlog(rooms, searchString, exactSearch, maxLines) { - const useRipgrep = checkRipgrepAvailability(); - let fileNameList = []; - let checkAllRooms = false; - for (let i = 0; i < rooms.length; i++) { - if (rooms[i] === 'all') { - checkAllRooms = true; - const fileList = await FS(LOG_PATH).readdir(); - for (let i = 0; i < fileList.length; i++) { - fileNameList.push(fileList[i]); - } - } else { - fileNameList.push(`modlog_${rooms[i]}.txt`); - } - } - fileNameList = fileNameList.map(filename => `${LOG_PATH}${filename}`); - - let regexString; - if (!searchString) { - regexString = '.'; - } else if (exactSearch) { - regexString = searchString.replace(/[\\.+*?()|[\]{}^$]/g, '\\$&'); - } else { - searchString = toId(searchString); - regexString = `\\b${searchString.split('').join('[\\W_]*')}\\b`; - } - - let results = new SortedLimitedLengthList(maxLines); - if (useRipgrep && searchString) { - // the entire directory is searched by default, no need to list every file manually - if (checkAllRooms) fileNameList = [LOG_PATH]; - runRipgrepModlog(fileNameList, regexString, results); - } else { - const searchStringRegex = new RegExp(regexString, 'i'); - for (let i = 0; i < fileNameList.length; i++) { - await checkRoomModlog(fileNameList[i], searchStringRegex, results); - } - } - const resultData = results.getListClone(); - return resultData.join('\n'); -} - -async function checkRoomModlog(path, regex, results) { - const fileContents = await FS(path).readTextIfExists(); - for (const line of fileContents.toString().split('\n').reverse()) { - if (regex.test(line)) { - const insertionSuccessful = results.tryInsert(line); - if (!insertionSuccessful) break; - } - } - return results; -} - -function runRipgrepModlog(paths, regexString, results) { - let stdout; - try { - stdout = execFileSync('rg', ['-i', '-e', regexString, '--no-filename', '--no-line-number', ...paths], {cwd: path.normalize(`${__dirname}/../`)}); - } catch (error) { - return results; - } - const fileResults = stdout.toString().split('\n').reverse(); - for (let i = 0; i < fileResults.length; i++) { - results.tryInsert(fileResults[i]); - } - return results; -} - -function prettifyResults(rawResults, room, searchString, exactSearch, addModlogLinks, hideIps, maxLines) { - if (rawResults === '0') { - return "The modlog query has crashed."; - } - let roomName; - switch (room) { - case 'all': - roomName = "all rooms"; - break; - case 'public': - roomName = "all public rooms"; - break; - default: - roomName = `room ${room}`; - } - let pipeIndex = rawResults.indexOf('|'); - if (pipeIndex < 0) pipeIndex = 0; - rawResults = rawResults.substr(pipeIndex + 1, rawResults.length); - if (!rawResults) { - return `|popup|No moderator actions containing ${searchString} found on ${roomName}.` + - (exactSearch ? "" : " Add quotes to the search parameter to search for a phrase, rather than a user."); - } - const resultArray = rawResults.split('\n'); - let lines = resultArray.length; - const resultString = resultArray.map(line => { - if (hideIps) line = line.replace(/\([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\)/g, ''); - let bracketIndex = line.indexOf(']'); - let parenIndex = line.indexOf(')'); - if (bracketIndex < 0) return Chat.escapeHTML(line); - const time = line.slice(1, bracketIndex); - let timestamp = Chat.toTimestamp(new Date(time), {hour12: true}); - parenIndex = line.indexOf(')'); - let thisRoomID = line.slice(bracketIndex + 3, parenIndex); - if (addModlogLinks) { - let url = Config.modloglink(time, thisRoomID); - if (url) timestamp = `${timestamp}`; - } - return `[${timestamp}] (${thisRoomID})${Chat.escapeHTML(line.slice(parenIndex + 1))}`; - }).join(`
`); - let preamble; - if (searchString) { - const searchStringDescription = (exactSearch ? `containing the string "${searchString}"` : `matching the username "${searchString}"`); - preamble = `|popup||wide||html|

The last ${lines} logged action${Chat.plural(lines)} ${searchStringDescription} on ${roomName}.` + - (exactSearch ? "" : " Add quotes to the search parameter to search for a phrase, rather than a user."); - } else { - preamble = `|popup||wide||html|

The last ${lines} line${Chat.plural(lines)} of the Moderator Log of ${roomName}.`; - } - preamble += `

[${Chat.toTimestamp(new Date(), {hour12: true})}] \u2190 current server time

`; - let moreButton = getMoreButton(room, searchString, exactSearch, lines, maxLines); - return `${preamble}${resultString}${moreButton}`; -} - -exports.commands = { - '!modlog': true, - timedmodlog: 'modlog', - modlog: function (target, room, user, connection, cmd) { - const startTime = Date.now(); - if (!room) room = Rooms('global'); - let roomId = (room.id === 'staff' ? 'global' : room.id); - const hideIps = !user.can('lock'); - - if (target.includes(',')) { - let targets = target.split(','); - target = targets[1].trim(); - roomId = toId(targets[0]) || room.id; - } - - let targetRoom = Rooms.search(roomId); - // if a room alias was used, replace alias with actual id - if (targetRoom) roomId = targetRoom.id; - if (roomId.startsWith('battle-') || roomId.startsWith('groupchat-')) return this.errorReply("Battles and groupchats don't have individual modlogs."); - - // permission checking - if (roomId === 'all' || roomId === 'public') { - if (!this.can('modlog')) return; - } else { - if (!this.can('modlog', null, targetRoom)) return; - } - - const addModlogLinks = Config.modloglink && (!hideIps || (targetRoom && targetRoom.isPrivate !== true)); - let lines = 0; - if (target.includes(LINES_SEPARATOR)) { // undocumented line specification - const reqIndex = target.indexOf(LINES_SEPARATOR); - const requestedLines = parseInt(target.substr(reqIndex + LINES_SEPARATOR.length, target.length)); - if (isNaN(requestedLines) || requestedLines < 1) { - this.errorReply(`${LINES_SEPARATOR}${requestedLines} is not a valid line count.`); - return; - } - lines = requestedLines; - target = target.substr(0, reqIndex).trim(); // strip search out - } - - if (!target && !lines) { - lines = 20; - } - if (!lines) lines = DEFAULT_RESULTS_LENGTH; - if (lines > MAX_RESULTS_LENGTH) lines = MAX_RESULTS_LENGTH; - - let searchString = ''; - if (target) searchString = target.trim(); - - let exactSearch = '0'; - if (searchString.match(/^["'].+["']$/)) { - exactSearch = '1'; - searchString = searchString.substring(1, searchString.length - 1); - } - - let roomIdList; - // handle this here so the child process doesn't have to load rooms data - if (roomId === 'public') { - const isPublicRoom = (room => !(room.isPrivate || room.battle || room.isPersonal || room.id === 'global')); - roomIdList = Array.from(Rooms.rooms.values()).filter(isPublicRoom).map(room => room.id); - } else { - roomIdList = [roomId]; - } - - PM.send(roomIdList.join(','), searchString, exactSearch, lines).then(response => { - connection.send(prettifyResults(response, roomId, searchString, exactSearch === '1', addModlogLinks, hideIps, lines)); - if (cmd === 'timedmodlog') this.sendReply(`The modlog query took ${Date.now() - startTime} ms to complete.`); - }); - }, - modloghelp: [ - "/modlog [roomid], [search] - Searches the moderator log - defaults to the current room unless specified otherwise.", - "If you set [roomid] as [all], it searches for [search] on all rooms' moderator logs.", - "If you set [roomid] as [public], it searches for [search] in all public rooms' moderator logs, excluding battles. Requires: % @ * # & ~", - ], -}; diff --git a/chat-plugins/othermetas.js b/chat-plugins/othermetas.js deleted file mode 100644 index 2ea33a757326e..0000000000000 --- a/chat-plugins/othermetas.js +++ /dev/null @@ -1,199 +0,0 @@ -// Other Metas plugin by Spandan -'use strict'; - -exports.commands = { - '!othermetas': true, - om: 'othermetas', - othermetas: function (target, room, user) { - if (!this.runBroadcast()) return; - target = toId(target); - let buffer = ""; - - if (target === 'all' && this.broadcasting) { - return this.sendReplyBox("You cannot broadcast information about all Other Metagames at once."); - } - - if (!target || target === 'all') { - buffer += "- Other Metagames Forum
"; - buffer += "- Other Metagames Analyses
"; - if (!target) return this.sendReplyBox(buffer); - } - let showMonthly = (target === 'all' || target === 'omofthemonth' || target === 'omotm' || target === 'month'); - - if (target === 'all') { - // Display OMotM formats, with forum thread links as caption - this.parse('/formathelp omofthemonth'); - - // Display the rest of OM formats, with OM hub/index forum links as caption - this.parse('/formathelp othermetagames'); - return this.sendReply('|raw|
' + buffer + '
'); - } - if (showMonthly) { - this.target = 'omofthemonth'; - this.run('formathelp'); - } else { - this.run('formathelp'); - } - }, - othermetashelp: ["/om - Provides links to information on the Other Metagames.", - "!om - Show everyone that information. Requires: + % @ * # & ~"], - - '!mixandmega': true, - mnm: 'mixandmega', - mixandmega: function (target, room, user) { - if (!this.runBroadcast()) return; - if (!toId(target) || !target.includes('@')) return this.parse('/help mixandmega'); - let sep = target.split('@'); - let stone; - if (toId(sep[1]) === 'dragonascent') { - stone = { - megaStone: "Rayquaza-Mega", - megaEvolves: "Rayquaza", - }; - } else { - stone = Dex.getItem(sep[1]); - } - let template = Object.assign({}, Dex.getTemplate(sep[0])); - if (!stone.megaEvolves && !stone.onPrimal) return this.errorReply(`Error: Mega Stone not found.`); - if (!template.exists) return this.errorReply(`Error: Pokemon not found.`); - if (template.isMega || (template.evos && Object.keys(template.evos).length > 0)) { // Mega Pokemon cannot be mega evolved - this.errorReply(`Warning: You cannot mega evolve non-fully evolved Pokemon and Mega Pokemon in Mix and Mega.`); - } - let bannedStones = {'beedrillite':1, 'blazikenite':1, 'gengarite':1, 'kangaskhanite':1, 'mawilite':1, 'medichamite':1}; - if (stone.id in bannedStones && template.name !== stone.megaEvolves) { - this.errorReply(`Warning: ${stone.name} is restricted to ${stone.megaEvolves} in Mix and Mega; therefore, ${template.name} cannot use ${stone.name} in actual play.`); - } - if (Dex.mod("mixandmega").getTemplate(sep[0]).tier === "Uber" && !template.isMega) { // Separate messages because there's a difference between being already mega evolved / NFE and being banned from mega evolving - this.errorReply(`Warning: ${template.name} is banned from mega evolving with a non-native mega stone in Mix and Mega and therefore cannot use ${toId(sep[1]) === 'dragonascent' ? 'Dragon Ascent' : stone.name} in actual play.`); - } - if (stone.isUnreleased) { - this.errorReply(`Warning: ${stone.name} is unreleased and is not usable in current Mix and Mega.`); - } - let dragonAscentUsers = {'smeargle':1, 'rayquaza':1, 'rayquazamega':1}; - if (toId(sep[1]) === 'dragonascent' && !(toId(sep[0]) in dragonAscentUsers)) { - this.errorReply(`Warning: Only Pokemon with access to Dragon Ascent can mega evolve with Mega Rayquaza's traits; therefore, ${template.name} cannot mega evolve with Dragon Ascent.`); - } - // Fake Pokemon and Mega Stones - if (template.isNonstandard) { - this.errorReply(`Warning: ${template.name} is not a real Pokemon and is therefore not usable in Mix and Mega.`); - } - if (toId(sep[1]) === 'crucibellite') { - this.errorReply(`Warning: Crucibellite is a fake mega stone created by the CAP Project and is restricted to the CAP Crucibelle.`); - } - let baseTemplate = Dex.getTemplate(stone.megaEvolves); - let megaTemplate = Dex.getTemplate(stone.megaStone); - if (stone.id === 'redorb') { // Orbs do not have 'Item.megaStone' or 'Item.megaEvolves' properties. - megaTemplate = Dex.getTemplate("Groudon-Primal"); - baseTemplate = Dex.getTemplate("Groudon"); - } else if (stone.id === 'blueorb') { - megaTemplate = Dex.getTemplate("Kyogre-Primal"); - baseTemplate = Dex.getTemplate("Kyogre"); - } - let deltas = { - baseStats: {}, - weightkg: megaTemplate.weightkg - baseTemplate.weightkg, - }; - for (let statId in megaTemplate.baseStats) { - deltas.baseStats[statId] = megaTemplate.baseStats[statId] - baseTemplate.baseStats[statId]; - } - if (megaTemplate.types.length > baseTemplate.types.length) { - deltas.type = megaTemplate.types[1]; - } else if (megaTemplate.types.length < baseTemplate.types.length) { - deltas.type = baseTemplate.types[0]; - } else if (megaTemplate.types[1] !== baseTemplate.types[1]) { - deltas.type = megaTemplate.types[1]; - } - ////////////////////////////////////////// - let mixedTemplate = Object.assign({}, template); - mixedTemplate.abilities = Object.assign({}, megaTemplate.abilities); - if (mixedTemplate.types[0] === deltas.type) { // Add any type gains - mixedTemplate.types = [deltas.type]; - } else if (deltas.type) { - mixedTemplate.types = [mixedTemplate.types[0], deltas.type]; - } - mixedTemplate.baseStats = {}; - for (let statName in template.baseStats) { // Add the changed stats and weight - mixedTemplate.baseStats[statName] = Dex.clampIntRange(Dex.data.Pokedex[template.id].baseStats[statName] + deltas.baseStats[statName], 1, 255); - } - mixedTemplate.weightkg = Math.round(Math.max(0.1, template.weightkg + deltas.weightkg) * 100) / 100; - mixedTemplate.tier = "MnM"; - let details; - let weighthit = 20; - if (mixedTemplate.weightkg >= 200) { - weighthit = 120; - } else if (mixedTemplate.weightkg >= 100) { - weighthit = 100; - } else if (mixedTemplate.weightkg >= 50) { - weighthit = 80; - } else if (mixedTemplate.weightkg >= 25) { - weighthit = 60; - } else if (mixedTemplate.weightkg >= 10) { - weighthit = 40; - } - details = { - "Dex#": mixedTemplate.num, - "Gen": mixedTemplate.gen, - "Height": mixedTemplate.heightm + " m", - "Weight": mixedTemplate.weightkg + " kg (" + weighthit + " BP)", - "Dex Colour": mixedTemplate.color, - }; - if (mixedTemplate.eggGroups) details["Egg Group(s)"] = mixedTemplate.eggGroups.join(", "); - details['Does Not Evolve'] = ""; - this.sendReply(`|raw|${Chat.getDataPokemonHTML(mixedTemplate)}`); - this.sendReply('|raw|' + Object.keys(details).map(detail => { - if (details[detail] === '') return detail; - return '' + detail + ': ' + details[detail]; - }).join(" |  ") + ''); - }, - mixandmegahelp: ["/mnm @ - Shows the Mix and Mega evolved Pokemon's type and stats."], - - '!350cup': true, - '350': '350cup', - '350cup': function (target, room, user) { - if (!this.runBroadcast()) return; - if (!toId(target)) return this.parse('/help 350cup'); - let template = Object.assign({}, Dex.getTemplate(target)); - if (!template.exists) return this.errorReply("Error: Pokemon not found."); - let bst = 0; - for (let i in template.baseStats) { - bst += template.baseStats[i]; - } - let newStats = {}; - for (let i in template.baseStats) { - newStats[i] = template.baseStats[i] * (bst <= 350 ? 2 : 1); - } - template.baseStats = Object.assign({}, newStats); - this.sendReply(`|html|${Chat.getDataPokemonHTML(template)}`); - }, - '350cuphelp': ["/350 OR /350cup - Shows the base stats that a Pokemon would have in 350 Cup."], - - '!tiershift': true, - ts: 'tiershift', - tiershift: function (target, room, user) { - if (!this.runBroadcast()) return; - if (!toId(target)) return this.parse('/help tiershift'); - let template = Object.assign({}, Dex.getTemplate(target)); - if (!template.exists) return this.errorReply("Error: Pokemon not found."); - let boosts = { - 'UU': 10, - 'BL2': 10, - 'RU': 20, - 'BL3': 20, - 'NU': 30, - 'BL4': 30, - 'PU': 40, - 'NFE': 40, - 'LC Uber': 40, - 'LC': 40, - }; - if (!(template.tier in boosts)) return this.sendReply(`|html|${Chat.getDataPokemonHTML(template)}`); - let boost = boosts[template.tier]; - let newStats = Object.assign({}, template.baseStats); - for (let statName in template.baseStats) { - newStats[statName] = Dex.clampIntRange(newStats[statName] + boost, 1, 255); - } - template.baseStats = Object.assign({}, newStats); - this.sendReply(`|raw|${Chat.getDataPokemonHTML(template)}`); - }, - 'tiershifthelp': ["/ts OR /tiershift - Shows the base stats that a Pokemon would have in Tier Shift."], -}; diff --git a/chat-plugins/poll.js b/chat-plugins/poll.js deleted file mode 100644 index 414f0e07cdad1..0000000000000 --- a/chat-plugins/poll.js +++ /dev/null @@ -1,329 +0,0 @@ -/* -* Poll chat plugin -* By bumbadadabum and Zarel. -*/ - -'use strict'; - -class Poll { - constructor(room, questionData, options) { - if (room.pollNumber) { - room.pollNumber++; - } else { - room.pollNumber = 1; - } - this.room = room; - this.question = questionData.source; - this.supportHTML = questionData.supportHTML; - this.voters = {}; - this.voterIps = {}; - this.totalVotes = 0; - this.timeout = null; - this.timeoutMins = 0; - - this.options = new Map(); - for (let i = 0; i < options.length; i++) { - this.options.set(i + 1, {name: options[i], votes: 0}); - } - } - - vote(user, option) { - let ip = user.latestIp; - let userid = user.userid; - - if (userid in this.voters || ip in this.voterIps) { - return user.sendTo(this.room, "You have already voted for this poll."); - } - - this.voters[userid] = option; - this.voterIps[ip] = option; - this.options.get(option).votes++; - this.totalVotes++; - - this.update(); - } - - blankvote(user, option) { - let ip = user.latestIp; - let userid = user.userid; - - if (!(userid in this.voters) || !(ip in this.voterIps)) { - this.voters[userid] = 0; - this.voterIps[ip] = 0; - } - - this.updateTo(user); - } - - generateVotes() { - let output = '

Poll ' + this.getQuestionMarkup() + '

'; - this.options.forEach((option, number) => { - output += '
'; - }); - output += '
'; - output += '
'; - - return output; - } - - generateResults(ended, option) { - let icon = ' ' + (ended ? "Poll ended" : "Poll") + ''; - let output = '

' + icon + ' ' + this.getQuestionMarkup() + '

'; - let iter = this.options.entries(); - - let i = iter.next(); - let c = 0; - let colors = ['#79A', '#8A8', '#88B']; - while (!i.done) { - let percentage = Math.round((i.value[1].votes * 100) / (this.totalVotes || 1)); - output += '
' + i.value[0] + '. ' + (i.value[0] === option ? '' : '') + this.getOptionMarkup(i.value[1]) + (i.value[0] === option ? '' : '') + ' (' + i.value[1].votes + ' vote' + (i.value[1].votes === 1 ? '' : 's') + ')
 ' + percentage + '%
'; - i = iter.next(); - c++; - } - if (option === 0 && !ended) output += '
(You can\'t vote after viewing results)
'; - output += '
'; - - return output; - } - - getQuestionMarkup() { - if (this.supportHTML) return this.question; - return Chat.escapeHTML(this.question); - } - - getOptionMarkup(option) { - if (this.supportHTML) return option.name; - return Chat.escapeHTML(option.name); - } - - update() { - let results = []; - - for (let i = 0; i <= this.options.size; i++) { - results.push(this.generateResults(false, i)); - } - - // Update the poll results for everyone that has voted - for (let i in this.room.users) { - let user = this.room.users[i]; - if (user.userid in this.voters) { - user.sendTo(this.room, '|uhtmlchange|poll' + this.room.pollNumber + '|' + results[this.voters[user.userid]]); - } else if (user.latestIp in this.voterIps) { - user.sendTo(this.room, '|uhtmlchange|poll' + this.room.pollNumber + '|' + results[this.voterIps[user.latestIp]]); - } - } - } - - updateTo(user, connection) { - if (!connection) connection = user; - if (user.userid in this.voters) { - connection.sendTo(this.room, '|uhtmlchange|poll' + this.room.pollNumber + '|' + this.generateResults(false, this.voters[user.userid])); - } else if (user.latestIp in this.voterIps) { - connection.sendTo(this.room, '|uhtmlchange|poll' + this.room.pollNumber + '|' + this.generateResults(false, this.voterIps[user.latestIp])); - } else { - connection.sendTo(this.room, '|uhtmlchange|poll' + this.room.pollNumber + '|' + this.generateVotes()); - } - } - - updateFor(user) { - if (user.userid in this.voters) { - user.sendTo(this.room, '|uhtmlchange|poll' + this.room.pollNumber + '|' + this.generateResults(false, this.voters[user.userid])); - } - } - - display() { - let votes = this.generateVotes(); - - let results = []; - - for (let i = 0; i <= this.options.size; i++) { - results.push(this.generateResults(false, i)); - } - - for (let i in this.room.users) { - let thisUser = this.room.users[i]; - if (thisUser.userid in this.voters) { - thisUser.sendTo(this.room, '|uhtml|poll' + this.room.pollNumber + '|' + results[this.voters[thisUser.userid]]); - } else if (thisUser.latestIp in this.voterIps) { - thisUser.sendTo(this.room, '|uhtml|poll' + this.room.pollNumber + '|' + results[this.voterIps[thisUser.latestIp]]); - } else { - thisUser.sendTo(this.room, '|uhtml|poll' + this.room.pollNumber + '|' + votes); - } - } - } - - displayTo(user, connection) { - if (!connection) connection = user; - if (user.userid in this.voters) { - connection.sendTo(this.room, '|uhtml|poll' + this.room.pollNumber + '|' + this.generateResults(false, this.voters[user.userid])); - } else if (user.latestIp in this.voterIps) { - connection.sendTo(this.room, '|uhtml|poll' + this.room.pollNumber + '|' + this.generateResults(false, this.voterIps[user.latestIp])); - } else { - connection.sendTo(this.room, '|uhtml|poll' + this.room.pollNumber + '|' + this.generateVotes()); - } - } - - onConnect(user, connection) { - this.displayTo(user, connection); - } - - end() { - let results = this.generateResults(true); - - this.room.send('|uhtmlchange|poll' + this.room.pollNumber + '|
(The poll has ended – scroll down to see the results)
'); - this.room.add('|html|' + results); - } -} - -exports.Poll = Poll; - -exports.commands = { - poll: { - htmlcreate: 'new', - create: 'new', - new: function (target, room, user, connection, cmd, message) { - if (!target) return this.parse('/help poll new'); - if (target.length > 1024) return this.errorReply("Poll too long."); - - const supportHTML = cmd === 'htmlcreate'; - let separator = ''; - if (target.includes('\n')) { - separator = '\n'; - } else if (target.includes('|')) { - separator = '|'; - } else if (target.includes(',')) { - separator = ','; - } else { - return this.errorReply("Not enough arguments for /poll new."); - } - - let params = target.split(separator).map(param => param.trim()); - - if (!this.can('minigame', null, room)) return false; - if (supportHTML && !this.can('declare', null, room)) return false; - if (!this.canTalk()) return; - if (room.poll) return this.errorReply("There is already a poll in progress in this room."); - if (params.length < 3) return this.errorReply("Not enough arguments for /poll new."); - - if (supportHTML) params = params.map(parameter => this.canHTML(parameter)); - if (params.some(parameter => !parameter)) return; - - const options = params.splice(1); - if (options.length > 8) { - return this.errorReply("Too many options for poll (maximum is 8)."); - } - - room.poll = new Poll(room, {source: params[0], supportHTML: supportHTML}, options); - room.poll.display(); - - this.logEntry("" + user.name + " used " + message); - return this.privateModCommand("(A poll was started by " + user.name + ".)"); - }, - newhelp: ["/poll create [question], [option1], [option2], [...] - Creates a poll. Requires: % @ * # & ~"], - - vote: function (target, room, user) { - if (!room.poll) return this.errorReply("There is no poll running in this room."); - if (!target) return this.parse('/help poll vote'); - - if (target === 'blank') { - room.poll.blankvote(user); - return; - } - - let parsed = parseInt(target); - if (isNaN(parsed)) return this.errorReply("To vote, specify the number of the option."); - - if (!room.poll.options.has(parsed)) return this.sendReply("Option not in poll."); - - room.poll.vote(user, parsed); - }, - votehelp: ["/poll vote [number] - Votes for option [number]."], - - timer: function (target, room, user) { - if (!room.poll) return this.errorReply("There is no poll running in this room."); - - if (target) { - if (!this.can('minigame', null, room)) return false; - if (target === 'clear') { - if (!room.poll.timeout) return this.errorReply("There is no timer to clear."); - clearTimeout(room.poll.timeout); - room.poll.timeout = null; - room.poll.timeoutMins = 0; - return this.add("The poll timer was turned off."); - } - let timeout = parseFloat(target); - if (isNaN(timeout) || timeout <= 0 || timeout > 0x7FFFFFFF) return this.errorReply("Invalid time given."); - if (room.poll.timeout) clearTimeout(room.poll.timeout); - room.poll.timeoutMins = timeout; - room.poll.timeout = setTimeout(() => { - room.poll.end(); - delete room.poll; - }, (timeout * 60000)); - room.add("The poll timer was turned on: the poll will end in " + timeout + " minute(s)."); - return this.privateModCommand("(The poll timer was set to " + timeout + " minute(s) by " + user.name + ".)"); - } else { - if (!this.runBroadcast()) return; - if (room.poll.timeout) { - return this.sendReply("The poll timer is on and will end in " + room.poll.timeoutMins + " minute(s)."); - } else { - return this.sendReply("The poll timer is off."); - } - } - }, - timerhelp: ["/poll timer [minutes] - Sets the poll to automatically end after [minutes] minutes. Requires: % @ * # & ~", "/poll timer clear - Clears the poll's timer. Requires: % @ * # & ~"], - - results: function (target, room, user) { - if (!room.poll) return this.errorReply("There is no poll running in this room."); - - return room.poll.blankvote(user); - }, - resultshelp: ["/poll results - Shows the results of the poll without voting. NOTE: you can't go back and vote after using this."], - - close: 'end', - stop: 'end', - end: function (target, room, user) { - if (!this.can('minigame', null, room)) return false; - if (!this.canTalk()) return; - if (!room.poll) return this.errorReply("There is no poll running in this room."); - if (room.poll.timeout) clearTimeout(room.poll.timeout); - - room.poll.end(); - delete room.poll; - return this.privateModCommand("(The poll was ended by " + user.name + ".)"); - }, - endhelp: ["/poll end - Ends a poll and displays the results. Requires: % @ * # & ~"], - - show: 'display', - display: function (target, room, user, connection) { - if (!room.poll) return this.errorReply("There is no poll running in this room."); - if (!this.runBroadcast()) return; - room.update(); - - if (this.broadcasting) { - room.poll.display(); - } else { - room.poll.displayTo(user, connection); - } - }, - displayhelp: ["/poll display - Displays the poll"], - - '': function (target, room, user) { - this.parse('/help poll'); - }, - }, - pollhelp: [ - "/poll allows rooms to run their own polls. These polls are limited to one poll at a time per room.", - "Accepts the following commands:", - "/poll create [question], [option1], [option2], [...] - Creates a poll. Requires: % @ * # & ~", - "/poll htmlcreate [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 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: % @ * # & ~", - ], -}; - -process.nextTick(() => { - Chat.multiLinePattern.register('/poll (new|create|htmlcreate) '); -}); diff --git a/chat-plugins/room-events.js b/chat-plugins/room-events.js deleted file mode 100644 index 16bf2c1e31308..0000000000000 --- a/chat-plugins/room-events.js +++ /dev/null @@ -1,109 +0,0 @@ -/** - * Room Events Plugin - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This is a room-management system to keep track of upcoming room events. - * - * @license MIT license - */ - -'use strict'; - -exports.commands = { - events: 'roomevents', - roomevent: 'roomevents', - roomevents: { - '': function (target, room, user) { - if (!room.chatRoomData) return this.errorReply("This command is unavailable in temporary rooms."); - if (!room.events || !Object.keys(room.events).length) { - return this.errorReply("There are currently no planned upcoming events for this room."); - } - if (!this.runBroadcast()) return; - let buff = ''; - buff += ''; - for (let i in room.events) { - buff += ``; - } - buff += '
Event Name:Event Description:Event Date:
${Chat.escapeHTML(room.events[i].eventName)}${Chat.parseText(room.events[i].desc)}
'; - return this.sendReply(`|raw|
${buff}
`); - }, - edit: 'add', - add: function (target, room, user) { - if (!room.chatRoomData) return this.errorReply("This command is unavailable in temporary rooms."); - if (!this.can('declare', null, room)) return false; - if (!room.events) room.events = Object.create(null); - let [eventName, date, ...desc] = target.split(target.includes('|') ? '|' : ','); - - if (!(eventName && date && desc)) return this.errorReply("You're missing a command parameter - see /help roomevents for this command's syntax."); - - eventName = eventName.trim(); - date = date.trim(); - desc = desc.join(target.includes('|') ? '|' : ',').trim(); - - if (eventName.length > 50) return this.errorReply("Event names should not exceed 50 characters."); - if (date.length > 150) return this.errorReply("Event dates should not exceed 150 characters."); - if (desc.length > 1000) return this.errorReply("Event descriptions should not exceed 1000 characters."); - - const eventId = toId(eventName); - if (!eventId) return this.errorReply("Event names must contain at least one alphanumerical character."); - - if (room.events[eventId] && this.cmd === 'add') { - this.errorReply(`There's already an event named '${eventId}'; to replace it, use /roomevents edit`); - this.sendReplyBox(Chat.html`/roomevents edit ${room.events[eventId].eventName} | ${room.events[eventId].date} | ${room.events[eventId].desc}`); - return; - } else if (this.cmd === 'edit' && !room.events[eventId]) { - this.errorReply(`There's no event named '${eventId}'; to add one, use /roomevents add`); - this.sendReplyBox(Chat.html`/roomevents add ${eventName} | ${date} | ${desc}`); - return; - } - - room.events[eventId] = { - eventName: eventName, - date: date, - desc: desc, - }; - this.privateModCommand(`(${user.name} ${this.cmd}ed ${this.cmd === 'add' ? 'a' : 'the'} roomevent titled "${eventName}".)`); - - room.chatRoomData.events = room.events; - Rooms.global.writeChatRoomData(); - }, - remove: function (target, room, user) { - if (!room.chatRoomData) return this.errorReply("This command is unavailable in temporary rooms."); - if (!this.can('declare', null, room)) return false; - if (!room.events || Object.keys(room.events).length === 0) { - return this.errorReply("There are currently no planned upcoming events for this room to remove."); - } - if (!target) return this.errorReply("Usage: /roomevents remove [event name]"); - target = toId(target); - if (!room.events[target]) return this.errorReply(`There is no such event named '${target}'. Check spelling?`); - delete room.events[target]; - this.privateModCommand(`(${user.name} removed a roomevent titled "${target}".)`); - - room.chatRoomData.events = room.events; - Rooms.global.writeChatRoomData(); - }, - view: function (target, room, user) { - if (!room.chatRoomData) return this.errorReply("This command is unavailable in temporary rooms."); - if (!room.events || !Object.keys(room.events).length) { - return this.errorReply("There are currently no planned upcoming events for this room."); - } - - if (!target) return this.errorReply("Usage: /roomevents view [event name]"); - target = toId(target); - if (!room.events[target]) return this.errorReply(`There is no such event named '${target}'. Check spelling?`); - - if (!this.runBroadcast()) return; - this.sendReplyBox(`
${Chat.escapeHTML(room.events[target].eventName)}${Chat.parseText(room.events[target].desc)}${Chat.escapeHTML(room.events[target].date)}
`); - if (!this.broadcasting && user.can('declare', null, room)) this.sendReplyBox(Chat.html`/roomevents add ${room.events[target].eventName} | ${room.events[target].date} | ${room.events[target].desc}`); - }, - help: function (target, room, user) { - return this.parse('/help roomevents'); - }, - }, - roomeventshelp: [ - "/roomevents - Displays a list of upcoming room-specific events.", - "/roomevents add [event name] | [event date/time] | [event description] - Adds a room event. Requires: # & ~", - "/roomevents remove [event name] - Deletes an event. Requires: # & ~", - "/roomevents view [event name] - Displays information about a specific event.", - ], -}; diff --git a/chat-plugins/thehappyplace.js b/chat-plugins/thehappyplace.js deleted file mode 100644 index edbd30403ee32..0000000000000 --- a/chat-plugins/thehappyplace.js +++ /dev/null @@ -1,46 +0,0 @@ -/** -* The Happy Place: Quote of the Day Plugin -* This is a command that allows a room owner to set an inspirational "quote" of the day. -* Others may braodcast this at any time to remind the room of such. -* Only works in a room with the id "thehappyplace" -* Credits: panpawn, TalkTakesTime, Morfent, and sirDonovan -*/ - -'use strict'; - -exports.commands = { - quoteoftheday: 'qotd', - qotd: function (target, room, user) { - if (room.id !== 'thehappyplace') return this.errorReply("This command can only be used in The Happy Place."); - if (!room.chatRoomData) return; - if (!target) { - if (!this.runBroadcast()) return; - if (!room.chatRoomData.quote) return this.sendReplyBox("The Quote of the Day has not been set."); - return this.sendReplyBox( - "The current Inspirational Quote of the Day is:
" + - "\"" + room.chatRoomData.quote + "\"" - ); - } - if (!this.can('ban', null, room)) return false; - if (target === 'off' || target === 'disable' || target === 'reset') { - if (!room.chatRoomData.quote) return this.sendReply("The Quote of the Day has already been reset."); - delete room.chatRoomData.quote; - this.sendReply("The Quote of the Day was reset by " + Chat.escapeHTML(user.name) + "."); - this.logModCommand(user.name + " reset the Quote of the Day."); - Rooms.global.writeChatRoomData(); - return; - } - room.chatRoomData.quote = Chat.escapeHTML(target); - Rooms.global.writeChatRoomData(); - room.addRaw( - "
The Inspirational Quote of the Day has been updated by " + Chat.escapeHTML(user.name) + ".
" + - "Quote: " + room.chatRoomData.quote + "
" - ); - this.logModCommand(Chat.escapeHTML(user.name) + " updated the quote of the day to \"" + room.chatRoomData.quote + "\"."); - }, - quoteofthedayhelp: 'qotdhelp', - qotdhelp: [ - "/qotd - View the current Inspirational Quote of the Day.", - "/qotd [quote] - Set the Inspirational Quote of the Day. Requires: @ # & ~", - ], -}; diff --git a/chat-plugins/thestudio.js b/chat-plugins/thestudio.js deleted file mode 100644 index 32fc61fb2f6c3..0000000000000 --- a/chat-plugins/thestudio.js +++ /dev/null @@ -1,387 +0,0 @@ -/** - * The Studio: Artist of the Day plugin - * This is a daily activity where users nominate the featured artist for the day, which is selected randomly once voting has ended. - * Only works in a room with the id 'thestudio' - */ - -'use strict'; - -// This plugin is still a work in progress, so don't hold back if there are things you find need changing! (Especially UX things.) - -const fs = require('fs'); -const path = require('path'); - -const YEAR = 365 * 24 * 60 * 60 * 1000; - -const AOTDS_FILE = path.resolve(__dirname, '../config/chat-plugins/thestudio.tsv'); - -const theStudio = Rooms.get('thestudio'); - -// Persistence -let winners = []; - -// Don't load the file if the room doesn't exist. -if (theStudio) { - fs.readFile(AOTDS_FILE, (err, data) => { - if (err) return; - data = ('' + data).split("\n"); - for (let i = 0; i < data.length; i++) { - if (!data[i] || data[i] === '\r') continue; - let [artist, nominator, quote, song, link, image, time] = data[i].trim().split("\t"); - if (artist === "Artist") continue; - time = Number(time) || 0; - winners.push({artist: artist, nominator: nominator, quote: quote, song: song, link: link, image: image, time: time}); - } - }); -} - -function saveWinners() { - let buf = "Artist\tNominator\tQuote\tSong\tLink\tImage\tTimestamp\n"; - for (let i = 0; i < winners.length; i++) { - const {artist, nominator, quote, song, link, image, time} = winners[i]; - - buf += `${artist || ''}\t${nominator || ''}\t${quote || ''}\t${song || ''}\t${link || ''}\t${image || ''}\t${time || 0}\n`; - } - - fs.writeFile(AOTDS_FILE, buf, () => {}); -} - -// These are passed to the constructor and used as ArtistOfTheDayVote.nominations. It's defined here to allow prenoms. -let nominations = new Map(); -let removedNominations = new Map(); - -function toArtistId(artist) { // toId would return '' for foreign/sadistic artists - return artist.toLowerCase().replace(/\s/g, '').replace(/\b&\b/g, ''); -} - -function addNomination(user, artist) { - const id = toArtistId(artist); - - if (winners.length && toArtistId(winners[winners.length - 1].artist) === id) return user.sendTo(theStudio, "This artist is already the current Artist of the Day."); - - for (let value of removedNominations.values()) { - if (toId(user) in value.userids || user.latestIp in value.ips) return user.sendTo(theStudio, "Since your nomination has been removed by staff, you cannot submit another artist until the next round."); - } - - if (nominations.has(toArtistId(artist))) return user.sendTo(theStudio, "This artist has already been nominated."); - - for (let [key, value] of nominations) { - if (toId(user) in value.userids || user.latestIp in value.ips) { - user.sendTo(theStudio, `Your previous vote for ${value.artist} will be removed.`); - nominations.delete(key); - } - } - - let obj = {}; - obj[user.userid] = user.name; - nominations.set(toArtistId(artist), {artist: artist, name: user.name, userids: Object.assign(obj, user.prevNames), ips: Object.assign({}, user.ips)}); - - user.sendTo(theStudio, `Your nomination for ${artist} was successfully submitted.`); - - if (theStudio.aotdVote) theStudio.aotdVote.display(true); -} - -function removeNomination(name) { - name = toId(name); - - let success = false; - nominations.forEach((value, key) => { - if (name in value.userids) { - removedNominations.set(key, value); - nominations.delete(key); - success = true; - } - }); - - if (theStudio.aotdVote) theStudio.aotdVote.display(true); - return success; -} - -function appendWinner(artist, nominator) { - winners.push({artist: artist, nominator: nominator, time: Date.now()}); - saveWinners(); -} - -function setWinnerProperty(properties) { - if (!winners.length) return; - for (let i in properties) { - winners[winners.length - 1][i] = properties[i]; - } - saveWinners(); -} - -function generateAotd() { - if (!winners.length) return false; - let aotd = winners[winners.length - 1]; - - let output = Chat.html `

The Artist of the Day is ${aotd.artist || "Various Artists"}.`; - if (aotd.quote) output += Chat.html `
"${aotd.quote}"`; - output += `

`; - if (aotd.image) output += Chat.html ``; - output += `
`; - if (aotd.song) { - output += `Song: `; - if (aotd.link) { - output += Chat.html `${aotd.song}`; - } else { - output += Chat.escapeHTML(aotd.song); - } - output += `
`; - } - output += Chat.html `Nominated by ${aotd.nominator}.`; - output += `
`; - - return output; -} - -function generateWinnerList(year) { - let output = `|wide||html|`; - - if (!winners.length) return output + `No past winners found.`; - - let now = Date.now(); - - for (let i = winners.length - 1; i >= 0; i--) { - let date = new Date(winners[i].time); - if (year) { - if (date.getFullYear() !== year) continue; - } else if (now - winners[i].time > YEAR) { - break; - } - - const pad = num => num < 10 ? '0' + num : num; - - output += Chat.html `[${pad(date.getMonth() + 1)}-${pad(date.getDate())}-${date.getFullYear()}] ${winners[i].artist}`; - if (winners[i].song) { - output += `: `; - if (winners[i].link) { - output += Chat.html `${winners[i].song}`; - } else { - output += Chat.escapeHTML(winners[i].song); - } - } - - output += Chat.html ` (nominated by ${winners[i].nominator})
`; - } - - return output; -} - -function generateNomWindow() { - let buffer = ''; - - if (theStudio.aotdVote) { - buffer += `

Nominations for Artist of the Day are in progress! Use /aotd nom to nominate an artist!

`; - if (nominations.size) buffer += `Nominations:`; - buffer += `
    `; - } else { - buffer += `

    Pre-noms for Artist of the Day:

    `; - } - - nominations.forEach((value, key) => { - buffer += Chat.html `
  • ${value.artist} (Submitted by ${value.name})
  • `; - }); - - buffer += `
`; - - return buffer; -} - -class ArtistOfTheDayVote { - constructor(room) { - this.room = room; - - this.nominations = nominations; - this.removedNominations = removedNominations; - - this.room.aotdVote = this; - } - - finish() { - nominations = new Map(); - removedNominations = new Map(); - delete this.room.aotdVote; - } - - display(update) { - this.room.add(`|uhtml${update ? 'change' : ''}|aotd|${generateNomWindow()}`); - } - - displayTo(connection) { - connection.sendTo(this.room, `|uhtml|aotd|${generateNomWindow()}`); - } - - runAotd() { - let keys = Array.from(this.nominations.keys()); - if (!keys.length) return false; - - let winner = this.nominations.get(keys[Math.floor(Math.random() * keys.length)]); - appendWinner(winner.artist, winner.name); - - this.room.add(Chat.html `|html|

Nominations for Artist of the Day are over!

Out of ${keys.length} nominations, we randomly selected ${winner.artist} as the winner! (Nomination by ${winner.name})

`); - - this.finish(); - return true; - } -} - -let commands = { - start: function (target, room, user) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.can('mute', null, room)) return false; - if (!this.canTalk()) return; - if (room.aotdVote) return this.errorReply("There is already an Artist of the Day nomination in progress."); - - room.aotdVote = new ArtistOfTheDayVote(room); - room.aotdVote.display(false); - this.privateModCommand(`(${user.name} has started nominations for the Artist of the Day.)`); - }, - starthelp: ["/aotd start - Starts nominations for the Artist of the Day. Requires: % @ # & ~"], - - end: function (target, room, user) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.can('mute', null, room)) return false; - if (!this.canTalk()) return; - if (!room.aotdVote) return this.errorReply("There is no Artist of the Day nomination in progress."); - - if (!room.aotdVote.runAotd()) return this.errorReply("Can't select an Artist of the Day without nominations."); - - this.privateModCommand(`(${user.name} has ended nominations for the Artist of the Day.)`); - }, - endhelp: ["/aotd end - End nominations for the Artist of the Day and set it to a randomly selected artist. Requires: % @ # & ~"], - - nom: function (target, room, user) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.canTalk()) return; - if (!target) this.parse('/help aotd prenom'); - - if (!toArtistId(target).length || target.length > 50) return this.sendReply(`'${target}' is not a valid artist name.`); - - addNomination(user, target); - }, - nomhelp: ["/aotd nom [artist] - Nominate an artist for the Artist of the Day."], - - view: function (target, room, user, connection) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.canTalk()) return; - - if (!room.aotdVote) { - if (!user.can('mute', null, room)) return false; - - return this.sendReply(`|raw|${generateNomWindow()}`); - } - - if (!this.runBroadcast()) return false; - - if (this.broadcasting) { - room.aotdVote.display(); - } else { - room.aotdVote.displayTo(connection); - } - }, - viewhelp: ["/aotd view - View the current nominations for the Artist of the Day. Requires: % @ * # & ~"], - - remove: function (target, room, user) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.can('mute', null, room)) return false; - if (!this.canTalk()) return; - - target = this.splitTarget(target); - let name = this.targetUsername; - let userid = toId(name); - if (!userid) return this.errorReply(`'${name}' is not a valid username.`); - - if (removeNomination(userid)) { - this.privateModCommand(`(${user.name} removed ${this.targetUsername}'s nomination for the Artist of the Day.)`); - } else { - this.sendReply(`User '${name}' has no nomination for the Artist of the Day.`); - } - }, - removehelp: ["/aotd remove [username] - Remove a user's nomination for the Artist of the Day and prevent them from voting again until the next round. Requires: % @ * # & ~"], - - set: function (target, room, user) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!target) this.parse('/help aotd set'); - if (!room.chatRoomData || !this.can('mute', null, room)) return false; - if (!this.canTalk()) return; - - let params = target.split(target.includes('|') ? '|' : ',').map(param => param.trim()); - - let changelist = {}; - - for (let i = 0; i < params.length; i++) { - let [key, ...values] = params[i].split(':'); - if (!key || !values.length) return this.errorReply(`Syntax error in '${params[i]}'`); - - key = key.trim(); - let value = values.join(':').trim(); - - if (!['artist', 'quote', 'song', 'link', 'image'].includes(key)) return this.errorReply(`Invalid value for property: ${key}`); - - switch (key) { - case 'artist': - if (!toArtistId(value) || value.length > 50) return this.errorReply("Please enter a valid artist name."); - break; - case 'quote': - if (!value.length || value.length > 150) return this.errorReply("Please enter a valid quote."); - break; - case 'song': - if (!value.length || value.length > 50) return this.errorReply("Please enter a valid song name."); - break; - case 'link': - case 'image': - if (!/https?:\/\/[^ ]+\//.test(value)) return this.errorReply(`Please enter a valid URL for the ${key} (starting with http:// or https://)`); - if (value.length > 200) return this.errorReply("URL too long."); - break; - default: - return this.errorReply(`Invalid value for property: ${key}`); - } - - changelist[key] = value; - } - - let keys = Object.keys(changelist); - - if (keys.length) { - setWinnerProperty(changelist); - return this.privateModCommand(`(${user.name} changed the following propert${Chat.plural(keys, 'ies', 'y')} of the Artist of the Day: ${keys.join(', ')})`); - } - }, - sethelp: ["/aotd set property: value[, property: value] - Set the artist, quote, song, link or image for the current Artist of the Day. Requires: % @ * # & ~"], - - winners: function (target, room, user, connection) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.canTalk()) return false; - - return connection.popup(generateWinnerList(parseInt(target))); - }, - winnershelp: ["/aotd winners [year] - Displays a list of previous artists of the day of the past year. Optionally, specify a year to see all winners in that year."], - - '': function (target, room) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.runBroadcast()) return false; - let text = generateAotd(); - if (!text) return this.errorReply("No aotd found"); - return this.sendReplyBox(text); - }, - - help: function (target, room) { - if (room !== theStudio) return this.errorReply('This command can only be used in The Studio.'); - if (!this.runBroadcast()) return false; - this.sendReply("Use /help aotd to view help for all commands, or /help aotd [command] for help on a specific command."); - }, -}; - -exports.commands = { - aotd: commands, - aotdhelp: [ - "The Studio: Artist of the Day plugin commands:", - "- /aotd - View the Artist of the Day.", - "- /aotd start - Start nominations for the Artist of the Day. Requires: % @ * # & ~", - "- /aotd nom [artist] - Nominate an artist for the Artist of the Day.", - "- /aotd remove [username] - Remove a user's nomination for the Artist of the Day and prevent them from voting again until the next round. Requires: % @ * # & ~", - "- /aotd end - End nominations for the Artist of the Day and set it to a randomly selected artist. Requires: % @ * # & ~", - "- /aotd set property: value[, property: value] - Set the artist, quote, song, link or image for the current Artist of the Day. Requires: % @ * # & ~", - "- /aotd winners [year] - Displays a list of previous artists of the day of the past year. Optionally, specify a year to see all winners in that year.", - ], -}; \ No newline at end of file diff --git a/chat-plugins/trivia.js b/chat-plugins/trivia.js deleted file mode 100644 index 1dfa80717352f..0000000000000 --- a/chat-plugins/trivia.js +++ /dev/null @@ -1,1397 +0,0 @@ -/* - * Trivia plugin - * Written by Morfent - */ - -'use strict'; - -const fs = require('fs'); - -const CATEGORIES = { - ae: 'Arts and Entertainment', - pokemon: 'Pok\u00E9mon', - sg: 'Science and Geography', - sh: 'Society and Humanities', -}; - -const MODES = { - first: 'First', - number: 'Number', - timer: 'Timer', -}; - -// NOTE: trivia code depends on this object's values being divisible by 5. -const SCORE_CAPS = { - short: 20, - medium: 35, - long: 50, -}; - -Object.setPrototypeOf(CATEGORIES, null); -Object.setPrototypeOf(MODES, null); -Object.setPrototypeOf(SCORE_CAPS, null); - -const SIGNUP_PHASE = 'signups'; -const QUESTION_PHASE = 'question'; -const INTERMISSION_PHASE = 'intermission'; -const LIMBO_PHASE = 'limbo'; - -const MINIMUM_PLAYERS = 3; - -const START_TIMEOUT = 30 * 1000; -const INTERMISSION_INTERVAL = 30 * 1000; - -const MAX_QUESTION_LENGTH = 252; -const MAX_ANSWER_LENGTH = 32; - -// TODO: move trivia database code to a separate file once relevant. -let triviaData = {}; -try { - triviaData = require('../config/chat-plugins/triviadata.json'); -} catch (e) {} // file doesn't exist or contains invalid JSON -if (!triviaData || typeof triviaData !== 'object') triviaData = {}; -if (typeof triviaData.leaderboard !== 'object') triviaData.leaderboard = {}; -if (!Array.isArray(triviaData.ladder)) triviaData.ladder = []; -if (!Array.isArray(triviaData.questions)) triviaData.questions = []; -if (!Array.isArray(triviaData.submissions)) triviaData.submissions = []; -if (triviaData.ugm) { - CATEGORIES.ugm = 'Ultimate Gaming Month'; - if (typeof triviaData.ugm !== 'object') triviaData.ugm = {}; -} - -const writeTriviaData = (() => { - let writing = false; - let writePending = false; - return () => { - if (writing) { - writePending = true; - return; - } - writing = true; - - let data = JSON.stringify(triviaData, null, 2); - let path = 'config/chat-plugins/triviadata.json'; - let tempPath = `${path}.0`; - - fs.writeFile(tempPath, data, () => { - fs.rename(tempPath, path, () => { - writing = false; - if (writePending) { - writePending = false; - setImmediate(() => writeTriviaData()); - } - - data = null; - path = null; - tempPath = null; - }); - }); - }; -})(); - -// Binary search for the index at which to splice in new questions in a category, -// or the index at which to slice up to for a category's questions -// TODO: why isn't this a map? Storing questions/submissions sorted by -// category is pretty stupid when maps exist for that purpose. -function findEndOfCategory(category, inSubmissions) { - let questions = inSubmissions ? triviaData.submissions : triviaData.questions; - let left = 0; - let right = questions.length; - let i = 0; - let curCategory; - while (left < right) { - i = (left + right) / 2 | 0; - curCategory = questions[i].category; - if (curCategory < category) { - left = i + 1; - } else if (curCategory > category) { - right = i; - } else { - while (++i < questions.length) { - if (questions[i].category !== category) break; - } - return i; - } - } - - return left; -} - -function sliceCategory(category) { - let questions = triviaData.questions; - if (!questions.length) return []; - - let sliceUpTo = findEndOfCategory(category, false); - if (!sliceUpTo) return []; - - let categories = Object.keys(CATEGORIES); - let categoryIdx = categories.indexOf(category); - if (!categoryIdx) return questions.slice(0, sliceUpTo); - - // findEndOfCategory for the category prior to the specified one in - // alphabetical order returns the index of the first question in it - let sliceFrom = findEndOfCategory(categories[categoryIdx - 1], false); - if (sliceFrom === sliceUpTo) return []; - - return questions.slice(sliceFrom, sliceUpTo); -} - -class TriviaPlayer extends Rooms.RoomGamePlayer { - constructor(user, game) { - super(user, game); - - this.points = 0; - this.correctAnswers = 0; - - this.answer = ''; - this.answeredAt = []; - this.isCorrect = false; - this.isAbsent = false; - } - - setAnswer(answer, isCorrect) { - this.answer = answer; - this.answeredAt = process.hrtime(); - this.isCorrect = !!isCorrect; - } - - incrementPoints(points = 0) { - this.points += points; - this.correctAnswers++; - } - - clearAnswer() { - this.answer = ''; - this.isCorrect = false; - } - - toggleAbsence() { - this.isAbsent = !this.isAbsent; - } -} - -class Trivia extends Rooms.RoomGame { - constructor(room, mode, category, length, questions) { - super(room); - this.gameid = 'trivia'; - this.title = 'Trivia'; - this.allowRenames = true; - this.playerCap = Number.MAX_SAFE_INTEGER; - - this.kickedUsers = new Set(); - - this.mode = MODES[mode]; - this.cap = SCORE_CAPS[length]; - if (category === 'all') { - this.category = 'All'; - if (triviaData.ugm) { - questions = questions.filter(q => q.category !== 'ugm'); - } - } else if (category === 'random') { - this.category = 'Random (' + CATEGORIES[questions[0].category] + ')'; - } else { - this.category = CATEGORIES[category]; - } - - this.phase = SIGNUP_PHASE; - this.phaseTimeout = null; - - this.questions = questions; - this.curQuestion = ''; - this.curAnswers = []; - this.askedAt = []; - - this.init(); - } - - // How long the players should have to answer a question. - get roundLength() { - return 12 * 1000 + 500; - } - - // Overwrite some RoomGame prototype methods... - addPlayer(user) { - if (this.players[user.userid]) return 'You have already signed up for this game.'; - if (this.kickedUsers.has(user.userid)) { - return 'You were kicked from the game and thus cannot join it again.'; - } - - for (let id in user.prevNames) { - if (this.players[id]) return 'You have already signed up for this game.'; - if (this.kickedUsers.has(id)) return 'You were kicked from the game and cannot join until the next game.'; - } - - for (let id in this.players) { - let tarUser = Users.get(id); - if (tarUser) { - if (tarUser.prevNames[user.userid]) return 'You have already signed up for this game.'; - - let tarPrevNames = Object.keys(tarUser.prevNames); - let prevNameMatch = tarPrevNames.some(tarId => (tarId in user.prevNames)); - if (prevNameMatch) return 'You have already signed up for this game.'; - - let tarIps = Object.keys(tarUser.ips); - let ipMatch = tarIps.some(ip => (ip in user.ips)); - if (ipMatch) return 'You have already signed up for this game.'; - } - } - - let player = this.makePlayer(user); - this.players[user.userid] = player; - this.playerCount++; - - return 'You are now signed up for this game!'; - } - - makePlayer(user) { - return new TriviaPlayer(user, this); - } - - destroy() { - this.kickedUsers.clear(); - super.destroy(); - } - - onConnect(user) { - let player = this.players[user.userid]; - if (!player || !player.isAbsent) return false; - - player.toggleAbsence(); - if (++this.playerCount < MINIMUM_PLAYERS) return false; - if (this.phase !== LIMBO_PHASE) return false; - - // At least let the game start first!! - if (this.phase === SIGNUP_PHASE) return false; - - for (let i in this.players) { - this.players[i].clearAnswer(); - } - - this.broadcast( - 'Enough players have returned to continue the game!', - 'The game will continue with the next question.' - ); - this.askQuestion(); - } - - onLeave(user) { - // The user cannot participate, but their score should be kept - // regardless in cases of disconnects. - let player = this.players[user.userid]; - if (!player || player.isAbsent) return false; - - player.toggleAbsence(); - if (--this.playerCount >= MINIMUM_PLAYERS) return false; - - // At least let the game start first!! - if (this.phase === SIGNUP_PHASE) return false; - - clearTimeout(this.phaseTimeout); - this.phaseTimeout = null; - this.phase = LIMBO_PHASE; - this.broadcast( - 'Not enough players are participating to continue the game!', - `Until there are ${MINIMUM_PLAYERS} players participating and present, the game will be paused.` - ); - } - - // Handles setup that shouldn't be done from the constructor. - init() { - this.broadcast( - 'Signups for a new trivia game have begun!', - 'Mode: ' + this.mode + ' | Category: ' + this.category + ' | Score cap: ' + this.cap + '
' + - 'Enter /trivia join to sign up for the trivia game.' - ); - } - - // Generates and broadcasts the HTML for a generic announcement containing - // a title and an optional message. - broadcast(title, message) { - let buffer = '
' + - '' + title + ''; - if (message) buffer += '
' + message; - buffer += '
'; - - // This shouldn't happen, but sometimes this will fire after - // Trivia#destroy has already set the instance's room to null. - let tarRoom = this.room; - if (!tarRoom) { - for (let [roomid, room] of Rooms.rooms) { // eslint-disable-line no-unused-vars - if (room.game === this) { - return room.addRaw(buffer).update(); - } - } - - Monitor.debug( - `${this.title} is FUBAR! Game instance tried to broadcast after having destroyed itself\n - Mode: ${this.mode}\n - Category: ${this.category}\n - Length: ${SCORE_CAPS[this.cap]}\n - UGM: ${triviaData.ugm ? 'enabled' : 'disabled'}` - ); - - return tarRoom; - } - - return tarRoom.addRaw(buffer).update(); - } - - // Formats the player list for display when using /trivia players. - formatPlayerList() { - return Object.keys(this.players) - .map(userid => { - let player = this.players[userid]; - let username = player.name; - if (player.isAbsent) return '' + username + ''; - return username; - }) - .join(', '); - } - - // Kicks a player from the game, preventing them from joining it again - // until the next game begins. - kick(tarUser, user) { - if (!this.players[tarUser.userid]) { - if (this.kickedUsers.has(tarUser.userid)) return 'User ' + tarUser.name + ' has already been kicked from the game.'; - - for (let id in tarUser.prevNames) { - if (this.kickedUsers.has(id)) return 'User ' + tarUser.name + ' has already been kicked from the game.'; - } - - for (let kickedUserid of this.kickedUsers) { - let kickedUser = Users.get(kickedUserid); - if (kickedUser) { - if (kickedUser.prevNames[tarUser.userid]) { - return 'User ' + tarUser.name + ' has already been kicked from the game.'; - } - - let prevNames = Object.keys(kickedUser.prevNames); - let nameMatch = prevNames.some(id => tarUser.prevNames[id]); - if (nameMatch) return 'User ' + tarUser.name + ' has already been kicked from the game.'; - - let ips = Object.keys(kickedUser.ips); - let ipMatch = ips.some(ip => tarUser.ips[ip]); - if (ipMatch) return 'User ' + tarUser.name + ' has already been kicked from the game.'; - } - } - - return 'User ' + tarUser.name + ' is not a player in the game.'; - } - - this.kickedUsers.add(tarUser.userid); - for (let id in tarUser.prevNames) { - this.kickedUsers.add(id); - } - - super.removePlayer(tarUser); - } - - leave(user) { - if (!this.players[user.userid]) { - return 'You are not a player in the current game.'; - } - - super.removePlayer(user); - } - - // Starts the question loop for a trivia game in its signup phase. - start() { - if (this.phase !== SIGNUP_PHASE) return 'The game has already been started.'; - if (this.playerCount < MINIMUM_PLAYERS) { - return 'Not enough players have signed up yet! At least ' + MINIMUM_PLAYERS + ' players are required to begin.'; - } - - this.broadcast('The game will begin in ' + (START_TIMEOUT / 1000) + ' seconds...'); - this.phaseTimeout = setTimeout(() => this.askQuestion(), START_TIMEOUT); - } - - // Broadcasts the next question on the questions list to the room and sets - // a timeout to tally the answers received. - askQuestion() { - if (!this.questions.length) { - clearTimeout(this.phaseTimeout); - this.phaseTimeout = null; - this.broadcast( - 'No questions are left!', - 'The game has ended in a stalemate.' - ); - return this.destroy(); - } - - this.phase = QUESTION_PHASE; - this.askedAt = process.hrtime(); - - let question = this.questions.pop(); - this.curQuestion = question.question; - this.curAnswers = question.answers; - this.sendQuestion(question); - - this.phaseTimeout = setTimeout(() => this.tallyAnswers(), this.roundLength); - } - - // Broadcasts to the room what the next question is. - sendQuestion(question) { - this.broadcast( - 'Question: ' + question.question, - 'Category: ' + CATEGORIES[question.category] - ); - } - - // This is a noop here since it'd defined properly by subclasses later on. - // All this is obligated to do is take a user and their answer as args; - // the behaviour of this method can be entirely arbitrary otherwise. - answerQuestion() {} - - // Verifies whether or not an answer is correct. In longer answers, small - // typos can be made and still have the answer be considered correct. - verifyAnswer(tarAnswer) { - return this.curAnswers.some(answer => ( - (answer === tarAnswer) || (answer.length > 5 && Dex.levenshtein(tarAnswer, answer) < 3) - )); - } - - // This is a noop here since it'd defined properly by mode subclasses later - // on. This calculates the points a correct responder earns, which is - // typically between 1-5. - calculatePoints() {} - - // This is a noop here since it's defined properly by mode subclasses later - // on. This is obligated to update the game phase, but it can be entirely - // arbitrary otherwise. - tallyAnswers() {} - - // Ends the game after a player's score has exceeded the score cap. - // FIXME: this class and trivia database logic don't belong in bed with - // each other! Abstract all that away from this method as soon as possible. - win(winner, buffer) { - clearTimeout(this.phaseTimeout); - this.phaseTimeout = null; - - let prize = (this.cap - 5) / 15 + 2; - buffer += Chat.escapeHTML(winner.name) + ' won the game with a final score of ' + winner.points + ', ' + - 'and their leaderboard score has increased by ' + prize + ' points!'; - this.broadcast('The answering period has ended!', buffer); - - let leaderboard = triviaData.leaderboard; - for (let i in this.players) { - let player = this.players[i]; - if (!player.points) continue; - - if (leaderboard[i]) { - let rank = leaderboard[i]; - rank[1] += player.points; - rank[2] += player.correctAnswers; - } else { - leaderboard[i] = [0, player.points, player.correctAnswers]; - } - - if (triviaData.ugm && this.category === 'Ultimate Gaming Month') { - let ugmPoints = player.points / 5 | 0; - if (winner && winner.userid === i) ugmPoints *= 2; - triviaData.ugm[i] += ugmPoints; - } - } - - if (winner) leaderboard[winner.userid][0] += prize; - - let leaders = Object.keys(leaderboard); - let ladder = triviaData.ladder = []; - for (let i = 0; i < 3; i++) { - leaders.sort((a, b) => leaderboard[b][i] - leaderboard[a][i]); - - let max = Infinity; - let rank = 0; - let rankIdx = i + 3; - for (let j = 0; j < leaders.length; j++) { - let leader = leaders[j]; - let score = leaderboard[leader][i]; - if (max !== score) { - if (!i && rank < 15) { - if (ladder[rank]) { - ladder[rank].push(leader); - } else { - ladder[rank] = [leader]; - } - } - - rank++; - max = score; - } - leaderboard[leader][rankIdx] = rank; - } - } - - for (let i in this.players) { - let player = this.players[i]; - let user = Users.get(player.userid); - if (!user || user.userid === winner.userid) continue; - user.sendTo( - this.room.id, - "You gained " + player.points + " and answered " + - player.correctAnswers + " questions correctly." - ); - } - - let buf = "(User " + winner.name + " won the game of " + this.mode + - " mode trivia under the " + this.category + " category with a cap of " + - this.cap + " points, with " + winner.points + " points and " + - winner.correctAnswers + " correct answers!)"; - this.room.sendModCommand(buf); - this.room.logEntry(buf); - this.room.modlog(buf); - - writeTriviaData(); - this.destroy(); - } - - // Forcibly ends a trivia game. - end(user) { - clearTimeout(this.phaseTimeout); - this.phaseTimeout = null; - this.broadcast('The game was forcibly ended by ' + Chat.escapeHTML(user.name) + '.'); - this.destroy(); - } -} - -// Helper function for timer and number modes. Milliseconds are not precise -// enough to score players properly in rare cases. -const hrtimeToNanoseconds = hrtime => hrtime[0] * 1e9 + hrtime[1]; - -// First mode rewards points to the first user to answer the question -// correctly. -class FirstModeTrivia extends Trivia { - answerQuestion(answer, user) { - let player = this.players[user.userid]; - if (!player) return 'You are not a player in the current trivia game.'; - if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; - if (player.answer) return 'You have already attempted to answer the current question.'; - - player.setAnswer(answer); - if (!this.verifyAnswer(answer)) return 'You have selected "' + answer + '" as your answer.'; - - // The timeout for Trivia.prototype.tallyAnswers is still - // going, remember? - clearTimeout(this.phaseTimeout); - this.phase = INTERMISSION_PHASE; - - let buffer = 'Correct: ' + Chat.escapeHTML(user.name) + '
' + - 'Answer(s): ' + this.curAnswers.join(', ') + '
'; - - let points = this.calculatePoints(); - player.incrementPoints(points); - if (player.points >= this.cap) return this.win(player, buffer); - - for (let i in this.players) { - let player = this.players[i]; - player.clearAnswer(); - } - - buffer += 'They gained 5 points!'; - this.broadcast('The answering period has ended!', buffer); - this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); - } - - calculatePoints() { - return 5; - } - - tallyAnswers() { - this.phase = INTERMISSION_PHASE; - - for (let i in this.players) { - let player = this.players[i]; - player.clearAnswer(); - } - - this.broadcast( - 'The answering period has ended!', - 'Correct: no one...
' + - 'Answers: ' + this.curAnswers.join(', ') + '
' + - 'Nobody gained any points.' - ); - - this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); - } -} - -// Timer mode rewards up to 5 points to all players who answer correctly -// depending on how quickly they answer the question. -class TimerModeTrivia extends Trivia { - answerQuestion(answer, user) { - let player = this.players[user.userid]; - if (!player) return 'You are not a player in the current trivia game.'; - if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; - - let isCorrect = this.verifyAnswer(answer); - player.setAnswer(answer, isCorrect); - return 'You have selected "' + answer + '" as your answer.'; - } - - // diff: the difference between the time the player answered the - // question and when the question was asked, in nanoseconds - // totalDiff: the difference between the time scoring began and the - // time the question was asked, in nanoseconds - calculatePoints(diff, totalDiff) { - return 6 - 5 * diff / totalDiff | 0; - } - - tallyAnswers() { - this.phase = INTERMISSION_PHASE; - - let buffer = ( - 'Answer(s): ' + this.curAnswers.join(', ') + '
' + - '' + - '' + - '' + - '' + - '' - ); - let innerBuffer = new Map([5, 4, 3, 2, 1].map(n => [n, []])); - - let winner; - - let now = hrtimeToNanoseconds(process.hrtime()); - let askedAt = hrtimeToNanoseconds(this.askedAt); - let totalDiff = now - askedAt; - for (let i in this.players) { - let player = this.players[i]; - if (!player.isCorrect) { - player.clearAnswer(); - continue; - } - - let playerAnsweredAt = hrtimeToNanoseconds(player.answeredAt); - let diff = playerAnsweredAt - askedAt; - let points = this.calculatePoints(diff, totalDiff); - player.incrementPoints(points); - - let pointBuffer = innerBuffer.get(points); - pointBuffer.push([Chat.escapeHTML(player.name), playerAnsweredAt]); - - if (winner) { - if (player.points > winner.points) { - winner = player; - } else if (winner.points === player.points) { - let winnerAnsweredAt = hrtimeToNanoseconds(winner.answeredAt); - if (playerAnsweredAt < winnerAnsweredAt) { - winner = player; - } - } - } else if (player.points >= this.cap) { - winner = player; - } - - player.clearAnswer(); - } - - let rowAdded = false; - innerBuffer.forEach((players, pointValue) => { - if (!players.length) return false; - - rowAdded = true; - players = players - .sort((a, b) => a[1] - b[1]) - .map(a => a[0]); - buffer += ( - '' + - '' + - '' + - '' - ); - }); - - if (!rowAdded) { - buffer += ( - '' + - '' + - '' + - '' - ); - } - - if (winner) { - buffer += '
Points gainedCorrect
' + pointValue + '' + players.join(', ') + '
No one answered correctly...

'; - return this.win(winner, buffer); - } - - buffer += ''; - this.broadcast('The answering period has ended!', buffer); - this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); - } -} - -// Number mode rewards up to 5 points to all players who answer correctly -// depending on the ratio of correct players to total players (lower ratio is -// better). -class NumberModeTrivia extends Trivia { - answerQuestion(answer, user) { - let player = this.players[user.userid]; - if (!player) return 'You are not a player in the current trivia game.'; - if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; - - let isCorrect = this.verifyAnswer(answer); - player.setAnswer(answer, isCorrect); - return 'You have selected "' + answer + '" as your answer.'; - } - - calculatePoints(correctPlayers) { - return correctPlayers && (6 - (5 * correctPlayers / this.playerCount | 0)); - } - - tallyAnswers() { - this.phase = INTERMISSION_PHASE; - - let buffer; - let innerBuffer = Object.keys(this.players) - .filter(id => this.players[id].isCorrect) - .map(id => { - let player = this.players[id]; - return [Chat.escapeHTML(player.name), hrtimeToNanoseconds(player.answeredAt)]; - }) - .sort((a, b) => a[1] - b[1]); - - let points = this.calculatePoints(innerBuffer.length); - if (points) { - let winner; - for (let i in this.players) { - let player = this.players[i]; - if (player.isCorrect) player.incrementPoints(points); - - if (winner) { - if (player.points > winner.points) { - winner = player; - } else if (player.points === winner.points) { - let playerAnsweredAt = hrtimeToNanoseconds(player.answeredAt); - let winnerAnsweredAt = hrtimeToNanoseconds(winner.answeredAt); - if (playerAnsweredAt < winnerAnsweredAt) { - winner = player; - } - } - } else if (player.points >= this.cap) { - winner = player; - } - - player.clearAnswer(); - } - - buffer = 'Correct: ' + innerBuffer.map(arr => arr[0]).join(', ') + '
' + - 'Answer(s): ' + this.curAnswers.join(', ') + '
'; - - if (winner) return this.win(winner, buffer); - - buffer += (innerBuffer.length > 1 ? 'Each of them' : 'They') + ' gained ' + points + ' point(s)!'; - } else { - for (let i in this.players) { - let player = this.players[i]; - player.clearAnswer(); - } - - buffer = 'Correct: no one...
' + - 'Answer(s): ' + this.curAnswers.join(', ') + '
' + - 'Nobody gained any points.'; - } - - this.broadcast('The answering period has ended!', buffer); - this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); - } -} - -const commands = { - new: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in the Trivia room."); - if (!this.can('broadcast', null, room) || !target) return false; - if (!this.canTalk()) return; - if (room.game) { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - let tars = target.split(','); - if (tars.length !== 3) return this.errorReply("Invalid arguments specified."); - - let mode = toId(tars[0]); - if (!MODES[mode]) return this.errorReply("\"" + mode + "\" is an invalid mode."); - - let category = toId(tars[1]); - let isRandom = (category === 'random'); - let isAll = !isRandom && (category === 'all'); - if (!isRandom && !isAll && !CATEGORIES[category]) { - return this.errorReply("\"" + category + "\" is an invalid category."); - } - - let length = toId(tars[2]); - if (!SCORE_CAPS[length]) return this.errorReply("\"" + length + "\" is an invalid game length."); - - let questions; - if (isRandom) { - let categories = Object.keys(CATEGORIES); - let randCategory = categories[Math.random() * categories.length | 0]; - if (triviaData.ugm && randCategory === 'ugm') { - categories.splice(categories.indexOf('ugm'), 1); - randCategory = categories[Math.random() * categories.length | 0]; - } - questions = sliceCategory(randCategory); - } else if (isAll) { - questions = triviaData.questions; - } else { - questions = sliceCategory(category); - } - - if (questions.length < SCORE_CAPS[length] / 5) { - if (isRandom) return this.errorReply("There are not enough questions in the randomly chosen category to finish a trivia game."); - if (isAll) return this.errorReply("There are not enough questions in the trivia database to finish a trivia game."); - return this.errorReply("There are not enough questions under the category \"" + CATEGORIES[category] + "\" to finish a trivia game."); - } - - // This prevents trivia games from modifying the trivia database. - questions = Object.assign([], questions); - // Randomizes the order of the questions. - questions = Dex.shuffle(questions); - - let _Trivia; - if (mode === 'first') { - _Trivia = FirstModeTrivia; - } else if (mode === 'timer') { - _Trivia = TimerModeTrivia; - } else if (mode === 'number') { - _Trivia = NumberModeTrivia; - } - - room.game = new _Trivia(room, mode, category, length, questions); - }, - newhelp: ["/trivia new [mode], [category], [length] - Begin a new trivia game. Requires: + % @ # & ~"], - - join: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - let res = room.game.addPlayer(user); - if (typeof res === 'string') this.sendReply(res); - }, - joinhelp: ["/trivia join - Join the current trivia game."], - - kick: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!this.can('mute', null, room)) return false; - if (!this.canTalk()) return; - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - this.splitTarget(target); - let targetUser = this.targetUser; - if (!targetUser) return this.errorReply("The user \"" + target + "\" does not exist."); - - let res = room.game.kick(targetUser, user); - if (typeof res === 'string') this.sendReply(res); - }, - kickhelp: ["/trivia kick [username] - Kick players from a trivia game by username. Requires: % @ # & ~"], - - leave: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - let res = room.game.leave(user); - if (typeof res === 'string') return this.errorReply(res); - this.sendReply("You have left the current game of trivia."); - }, - leavehelp: ["/trivia leave - Makes the player leave the game."], - - start: function (target, room) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!this.can('broadcast', null, room)) return false; - if (!this.canTalk()) return; - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - let res = room.game.start(); - if (typeof res === 'string') this.sendReply(res); - }, - starthelp: ["/trivia start - Ends the signup phase of a trivia game and begins the game. Requires: + % @ # & ~"], - - answer: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - let answer = toId(target); - if (!answer) return this.errorReply("No valid answer was entered."); - - let res = room.game.answerQuestion(answer, user); - if (typeof res === 'string') this.sendReply(res); - }, - answerhelp: ["/trivia answer OR /ta [answer] - Answer a pending question."], - - end: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!this.can('broadcast', null, room)) return false; - if (!this.canTalk()) return; - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - room.game.end(user); - }, - endhelp: ["/trivia end - Forcibly end a trivia game. Requires: + % @ # & ~"], - - '': 'status', - players: 'status', - status: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!this.runBroadcast()) return false; - if (!room.game) return this.errorReply("There is no game of trivia in progress."); - if (room.game.gameid !== 'trivia') { - return this.errorReply("There is already a game of " + room.game.title + " in progress."); - } - - let tarUser; - if (target) { - this.splitTarget(target); - if (!this.targetUser) return this.errorReply("User " + target + " does not exist."); - tarUser = this.targetUser; - } else { - tarUser = user; - } - - let game = room.game; - let buffer = 'There is a trivia game in progress, and it is in its ' + game.phase + ' phase.
' + - 'Mode: ' + game.mode + ' | Category: ' + game.category + ' | Score cap: ' + game.cap; - - let player = game.players[tarUser.userid]; - if (player) { - if (!this.broadcasting) { - buffer += '
Current score: ' + player.points + ' | Correct Answers: ' + player.correctAnswers; - } - } else if (tarUser.userid !== user.userid) { - return this.errorReply("User " + tarUser.name + " is not a player in the current trivia game."); - } - - buffer += '
Players: ' + room.game.formatPlayerList(); - - this.sendReplyBox(buffer); - }, - statushelp: ["/trivia status [player] - lists the player's standings (your own if no player is specified) and the list of players in the current trivia game."], - - submit: 'add', - add: function (target, room, user, connection, cmd) { - if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); - if (cmd === 'add' && !this.can('mute', null, room) || !target) return false; - if (!this.canTalk()) return; - - target = target.split('|'); - if (target.length !== 3) return this.errorReply("Invalid arguments specified. View /help trivia for more information."); - - let category = toId(target[0]); - if (!CATEGORIES[category]) return this.errorReply("'" + target[0].trim() + "' is not a valid category. View /help trivia for more information."); - - let question = Chat.escapeHTML(target[1].trim()); - if (!question) return this.errorReply("'" + target[1] + "' is not a valid question."); - if (question.length > MAX_QUESTION_LENGTH) { - return this.errorReply("This question is too long! It must remain under " + MAX_QUESTION_LENGTH + " characters."); - } - if (triviaData.submissions.some(s => s.question === question) || triviaData.questions.some(q => q.question === question)) { - return this.errorReply("Question \"" + question + "\" is already in the trivia database."); - } - - let cache = new Set(); - let answers = target[2].split(',') - .map(toId) - .filter(answer => !cache.has(answer) && !!cache.add(answer)); - if (!answers.length) return this.errorReply("No valid answers were specified."); - if (answers.some(answer => answer.length > MAX_ANSWER_LENGTH)) { - return this.errorReply("Some of the answers entered were too long! They must remain under " + MAX_ANSWER_LENGTH + " characters."); - } - - let submissions = triviaData.submissions; - let submission = { - category: category, - question: question, - answers: answers, - user: user.userid, - }; - - if (cmd === 'add') { - triviaData.questions.splice(findEndOfCategory(category, false), 0, submission); - writeTriviaData(); - return this.privateModCommand("(Question '" + target[1] + "' was added to the question database by " + user.name + ".)"); - } - - submissions.splice(findEndOfCategory(category, true), 0, submission); - writeTriviaData(); - if (!user.can('mute', null, room)) this.sendReply("Question '" + target[1] + "' was submitted for review."); - this.privateModCommand("(" + user.name + " submitted question '" + target[1] + "' for review.)"); - }, - submithelp: ["/trivia submit [category] | [question] | [answer1], [answer2] ... [answern] - Add a question to the submission database for staff to review."], - addhelp: ["/trivia add [category] | [question] | [answer1], [answer2], ... [answern] - Add a question to the question database. Requires: % @ # & ~"], - - review: function (target, room) { - if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); - if (!this.can('ban', null, room)) return false; - - let submissions = triviaData.submissions; - let submissionsLen = submissions.length; - if (!submissionsLen) return this.sendReply("No questions await review."); - - let buffer = "|raw|
" + - "" + - ""; - - let i = 0; - while (i < submissionsLen) { - let entry = submissions[i]; - buffer += ""; - } - buffer += "
" + submissionsLen + " questions await review:
#CategoryQuestionAnswer(s)Submitted By
" + (++i) + "" + entry.category + "" + entry.question + "" + entry.answers.join(", ") + "" + entry.user + "
"; - - this.sendReply(buffer); - }, - reviewhelp: ["/trivia review - View the list of submitted questions. Requires: @ # & ~"], - - reject: 'accept', - accept: function (target, room, user, connection, cmd) { - if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); - if (!this.can('ban', null, room)) return false; - if (!this.canTalk()) return; - - target = target.trim(); - if (!target) return false; - - let isAccepting = cmd === 'accept'; - let questions = triviaData.questions; - let submissions = triviaData.submissions; - let submissionsLen = submissions.length; - - if (toId(target) === 'all') { - if (isAccepting) { - for (let i = 0; i < submissionsLen; i++) { - let submission = submissions[i]; - questions.splice(findEndOfCategory(submission.category, false), 0, submission); - } - } - - triviaData.submissions = []; - writeTriviaData(); - return this.privateModCommand("(" + user.name + (isAccepting ? " added " : " removed ") + "all questions from the submission database.)"); - } - - if (/^\d+(?:-\d+)?(?:, ?\d+(?:-\d+)?)*$/.test(target)) { - let indices = target.split(','); - - // Parse number ranges and add them to the list of indices, - // then remove them in addition to entries that aren't valid index numbers - for (let i = indices.length; i--;) { - if (!indices[i].includes('-')) { - let index = Number(indices[i]); - if (Number.isInteger(index) && index > 0 && index <= submissionsLen) { - indices[i] = index; - } else { - indices.splice(i, 1); - } - continue; - } - - let range = indices[i].split('-'); - let left = Number(range[0]); - let right = Number(range[1]); - if (!Number.isInteger(left) || !Number.isInteger(right) || - left < 1 || right > submissionsLen || left === right) { - indices.splice(i, 1); - continue; - } - - do { - indices.push(right); - } while (--right >= left); - - indices.splice(i, 1); - } - - indices.sort((a, b) => a - b); - indices = indices.filter((entry, index) => !index || indices[index - 1] !== entry); - - let indicesLen = indices.length; - if (!indicesLen) return this.errorReply("'" + target + "' is not a valid set of submission index numbers. View /trivia review and /help trivia for more information."); - - if (isAccepting) { - for (let i = indicesLen; i--;) { - let submission = submissions.splice(indices[i] - 1, 1)[0]; - questions.splice(findEndOfCategory(submission.category, false), 0, submission); - } - } else { - for (let i = indicesLen; i--;) { - submissions.splice(indices[i] - 1, 1); - } - } - - writeTriviaData(); - return this.privateModCommand("(" + user.name + " " + (isAccepting ? "added " : "removed ") + "submission number" + (indicesLen > 1 ? "s " : " ") + target + " from the submission database.)"); - } - - this.errorReply("'" + target + "' is an invalid argument. View /help trivia for more information."); - }, - accepthelp: ["/trivia accept [index1], [index2], ... [indexn] OR all - Add questions from the submission database to the question database using their index numbers or ranges of them. Requires: @ # & ~"], - rejecthelp: ["/trivia reject [index1], [index2], ... [indexn] OR all - Remove questions from the submission database using their index numbers or ranges of them. Requires: @ # & ~"], - - delete: function (target, room, user) { - if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); - if (!this.can('mute', null, room)) return false; - if (!this.canTalk()) return; - - target = target.trim(); - if (!target) return false; - - let question = Chat.escapeHTML(target); - if (!question) return this.errorReply("'" + target + "' is not a valid argument. View /help trivia for more information."); - - let questions = triviaData.questions; - for (let i = 0; i < questions.length; i++) { - if (questions[i].question === question) { - questions.splice(i, 1); - writeTriviaData(); - return this.privateModCommand("(" + user.name + " removed question '" + target + "' from the question database.)"); - } - } - - this.errorReply("Question '" + target + "' was not found in the question database."); - }, - deletehelp: ["/trivia delete [question] - Delete a question from the trivia database. Requires: % @ # & ~"], - - qs: function (target, room, user) { - if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); - - let buffer = "|raw|
"; - - if (!target) { - if (!this.runBroadcast()) return false; - - let questions = triviaData.questions; - let questionsLen = questions.length; - if (!questionsLen) return this.sendReplyBox("No questions have been submitted yet."); - - let categories = Object.keys(CATEGORIES); - let lastCategoryIdx = 0; - buffer += ""; - for (let i = 0; i < categories.length; i++) { - if (categories[i] === 'random') continue; - let tally = findEndOfCategory(categories[i], false) - lastCategoryIdx; - lastCategoryIdx += tally; - buffer += ""; - } - buffer += "
CategoryQuestion Count
" + CATEGORIES[categories[i]] + "" + tally + " (" + ((tally * 100) / questionsLen).toFixed(2) + "%)
Total" + questionsLen + "
"; - - return this.sendReply(buffer); - } - - if (!this.can('mute', null, room)) return false; - - let category = toId(target); - if (category === 'random') return false; - if (!CATEGORIES[category]) return this.errorReply("'" + target + "' is not a valid category. View /help trivia for more information."); - - let list = sliceCategory(category); - let listLen = list.length; - if (!listLen) { - buffer += "There are no questions in the " + CATEGORIES[target] + " category."; - return this.sendReply(buffer); - } - - if (user.can('declare', null, room)) { - buffer += "There are " + listLen + " questions in the " + CATEGORIES[target] + " category." + - "#QuestionAnswer(s)"; - for (let i = 0; i < listLen; i++) { - let entry = list[i]; - buffer += "" + (i + 1) + "" + entry.question + "" + entry.answers.join(", ") + ""; - } - } else { - buffer += "There are " + listLen + " questions in the " + target + " category." + - "#Question"; - for (let i = 0; i < listLen; i++) { - buffer += "" + (i + 1) + "" + list[i].question + ""; - } - } - buffer += ""; - - this.sendReply(buffer); - }, - qshelp: [ - "/trivia qs - View the distribution of questions in the question database.", - "/trivia qs [category] - View the questions in the specified category. Requires: % @ # & ~", - ], - - search: function (target, room, user) { - if (room.id !== 'questionworkshop') return this.errorReply("This command can only be used in Question Workshop."); - if (!this.can('broadcast', null, room)) return false; - if (!target.includes(',')) return this.errorReply("No valid search arguments entered."); - - let [type, ...query] = target.split(','); - type = toId(type); - if (/^q(?:uestion)?s?$/.test(type)) { - type = 'questions'; - } else if (/^sub(?:mission)?s?$/.test(type)) { - type = 'submissions'; - } else { - return this.sendReplyBox("No valid search category was entered. Valid categories: submissions, subs, questions. qs"); - } - - query = query.join(',').trim(); - if (!query) return this.errorReply("No valid search query as entered."); - - let results = triviaData[type].filter(q => q.question.includes(query)); - if (!results.length) return this.sendReply(`No results found under the ${type} list.`); - - let buffer = "|raw|
" + - ``; - buffer += results.map((q, i) => { - return ``; - }).join(''); - buffer += "
#CategoryQuestion
There are ${results.length} matches for your query:
${i + 1}${q.category}${q.question}
"; - - this.sendReply(buffer); - }, - searchhelp: ["/trivia search [type], [query] - Searches for questions based on their type and their query. Valid types: submissions, subs, questions, qs. Requires: + % @ * & ~"], - - rank: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - - let name; - let userid; - if (!target) { - name = Chat.escapeHTML(user.name); - userid = user.userid; - } else { - target = this.splitTarget(target, true); - name = Chat.escapeHTML(this.targetUsername); - userid = toId(name); - } - - let score = triviaData.leaderboard[userid]; - if (!score) return this.sendReplyBox("User '" + name + "' has not played any trivia games yet."); - - this.sendReplyBox( - "User: " + name + "
" + - "Leaderboard score: " + score[0] + " (#" + score[3] + ")
" + - "Total game points: " + score[1] + " (#" + score[4] + ")
" + - "Total correct answers: " + score[2] + " (#" + score[5] + ")" + - (triviaData.ugm ? "
UGM points: " + triviaData.ugm[userid] + "" : "") - ); - }, - rankhelp: ["/trivia rank [username] - View the rank of the specified user. If none is given, view your own."], - - ladder: function (target, room) { - if (room.id !== 'trivia') return this.errorReply('This command can only be used in Trivia.'); - if (!this.runBroadcast()) return false; - - let ladder = triviaData.ladder; - let leaderboard = triviaData.leaderboard; - if (!ladder.length) return this.errorReply("No trivia games have been played yet."); - - let buffer = "|raw|
" + - ""; - - for (let i = 0; i < ladder.length; i++) { - let leaders = ladder[i]; - for (let j = 0; j < leaders.length; j++) { - let rank = leaderboard[leaders[j]]; - let leader = Users.getExact(leaders[j]); - leader = leader ? Chat.escapeHTML(leader.name) : leaders[j]; - buffer += ""; - } - } - buffer += "
RankUserLeaderboard scoreTotal game pointsTotal correct answers
" + (i + 1) + "" + leader + "" + rank[0] + "" + rank[1] + "" + rank[2] + "
"; - - return this.sendReply(buffer); - }, - ladderhelp: ["/trivia ladder - View information about the top 15 users on the trivia leaderboard."], - - ugm: function (target, room, user) { - if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); - if (!this.can('broadcast', null, room)) return false; - - let command = toId(target); - if (command === 'enable') { - if (triviaData.ugm) return this.errorReply("UGM mode is already enabled."); - triviaData.ugm = {}; - for (let i in triviaData.leaderboard) { - triviaData.ugm[i] = 0; - } - CATEGORIES.ugm = 'Ultimate Gaming Month'; - writeTriviaData(); - return this.privateModCommand("(" + user.name + " enabled UGM mode.)"); - } - if (command === 'disable') { - if (!triviaData.ugm) return this.errorReply("UGM mode is already disabled."); - triviaData.questions = triviaData.questions.filter(q => q.category !== 'ugm'); - delete triviaData.ugm; - delete CATEGORIES.ugm; - writeTriviaData(); - return this.privateModCommand("(" + user.name + " disabled UGM mode.)"); - } - this.errorReply("Invalid target. Valid targets: enable, disable"); - }, - ugmhelp: ["/trivia ugm [setting] - Enable or disable UGM mode. Requires: # & ~"], -}; - -module.exports = { - CATEGORIES, - MODES, - SCORE_CAPS, - - triviaData, - writeTriviaData, - - Trivia, - FirstModeTrivia, - TimerModeTrivia, - NumberModeTrivia, - - commands: { - trivia: commands, - ta: commands.answer, - // TODO: this is ugly as all hell, split it into sections - triviahelp: [ - "Modes:", - "- First: the first correct responder gains 5 points.", - "- Timer: each correct responder gains up to 5 points based on how quickly they answer.", - "- Number: each correct responder gains up to 5 points based on how many participants are correct.", - "Categories: Arts & Entertainment, Pok\u00e9mon, Science & Geography, Society & Humanities, Random, and All.", - "Game lengths:", - "- Short: 20 point score cap. The winner gains 3 leaderboard points.", - "- Medium: 35 point score cap. The winner gains 4 leaderboard points.", - "- Long: 50 point score cap. The winner gains 5 leaderboard points.", - "Game commands:", - "- /trivia new [mode], [category], [length] - Begin signups for a new trivia game. Requires: + % @ # & ~", - "- /trivia join - Join a trivia game during signups.", - "- /trivia start - Begin the game once enough users have signed up. Requires: + % @ # & ~", - "- /ta [answer] - Answer the current question.", - "- /trivia kick [username] - Disqualify a participant from the current trivia game. Requires: % @ # & ~", - "- /trivia leave - Makes the player leave the game.", - "- /trivia end - End a trivia game. Requires: + % @ # ~", - "Question modifying commands:", - "- /trivia submit [category] | [question] | [answer1], [answer2] ... [answern] - Add a question to the submission database for staff to review.", - "- /trivia review - View the list of submitted questions. Requires: @ # & ~", - "- /trivia accept [index1], [index2], ... [indexn] OR all - Add questions from the submission database to the question database using their index numbers or ranges of them. Requires: @ # & ~", - "- /trivia reject [index1], [index2], ... [indexn] OR all - Remove questions from the submission database using their index numbers or ranges of them. Requires: @ # & ~", - "- /trivia add [category] | [question] | [answer1], [answer2], ... [answern] - Add a question to the question database. Requires: % @ # & ~", - "- /trivia delete [question] - Delete a question from the trivia database. Requires: % @ # & ~", - "- /trivia qs - View the distribution of questions in the question database.", - "- /trivia qs [category] - View the questions in the specified category. Requires: % @ # & ~", - "Informational commands:", - "- /trivia search [type], [query] - Searches for questions based on their type and their query. Valid types: submissions, subs, questions, qs. Requires: + % @ # & ~", - "- /trivia status [player] - lists the player's standings (your own if no player is specified) and the list of players in the current trivia game.", - "- /trivia rank [username] - View the rank of the specified user. If none is given, view your own.", - "- /trivia ladder - View information about the top 15 users on the trivia leaderboard.", - "- /trivia ugm [setting] - Enable or disable UGM mode. Requires: # & ~", - ], - }, -}; diff --git a/chat.js b/chat.js deleted file mode 100644 index 68bf9e9871805..0000000000000 --- a/chat.js +++ /dev/null @@ -1,1222 +0,0 @@ -/** - * Chat - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This handles chat and chat commands sent from users to chatrooms - * and PMs. The main function you're lookoing for is Chat.parse - * (scroll down to its definition for details) - * - * Individual commands are put in: - * chat-commands.js - "core" commands that shouldn't be modified - * chat-plugins/ - other commands that can be safely modified - * - * The command API is (mostly) documented in chat-plugins/COMMANDS.md - * - * @license MIT license - */ - -/* - -To reload chat commands: - -/hotpatch chat - -*/ - -'use strict'; - -const MAX_MESSAGE_LENGTH = 300; - -const BROADCAST_COOLDOWN = 20 * 1000; -const MESSAGE_COOLDOWN = 5 * 60 * 1000; - -const MAX_PARSE_RECURSION = 10; - -const VALID_COMMAND_TOKENS = '/!'; -const BROADCAST_TOKEN = '!'; - -const FS = require('./fs'); - -let Chat = module.exports; - -// Regex copied from the client -const domainRegex = '[a-z0-9\\-]+(?:[.][a-z0-9\\-]+)*'; -const parenthesisRegex = '[(](?:[^\\s()<>&]|&)*[)]'; -const linkRegex = new RegExp( - '(?:' + - '(?:' + - // When using www. or http://, allow any-length TLD (like .museum) - '(?:https?://|\\bwww[.])' + domainRegex + - '|\\b' + domainRegex + '[.]' + - // Allow a common TLD, or any 2-3 letter TLD followed by : or / - '(?:com?|org|net|edu|info|us|jp|[a-z]{2,3}(?=[:/]))' + - ')' + - '(?:[:][0-9]+)?' + - '\\b' + - '(?:' + - '/' + - '(?:' + - '(?:' + - '[^\\s()&<>]|&|"' + - '|' + parenthesisRegex + - ')*' + - // URLs usually don't end with punctuation, so don't allow - // punctuation symbols that probably aren't related to URL. - '(?:' + - '[^\\s`()\\[\\]{}\'".,!?;:&<>*_`^~\\\\]' + - '|' + parenthesisRegex + - ')' + - ')?' + - ')?' + - '|[a-z0-9.]+\\b@' + domainRegex + '[.][a-z]{2,3}' + - ')' + - '(?!.*>)', - 'ig' -); -const hyperlinkRegex = new RegExp(`(.+)<(.+)>`, 'i'); -// Matches U+FE0F and all Emoji_Presentation characters. More details on -// http://www.unicode.org/Public/emoji/5.0/emoji-data.txt -const emojiRegex = /[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\uFE0F\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F1E6}-\u{1F1FF}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6F8}\u{1F910}-\u{1F93A}\u{1F93C}-\u{1F93E}\u{1F940}-\u{1F945}\u{1F947}-\u{1F94C}\u{1F950}-\u{1F96B}\u{1F980}-\u{1F997}\u{1F9C0}\u{1F9D0}-\u{1F9E6}]/u; - -const formattingResolvers = [ - {token: "**", resolver: str => `${str}`}, - {token: "__", resolver: str => `${str}`}, - {token: "``", resolver: str => `${str}`}, - {token: "~~", resolver: str => `${str}`}, - {token: "^^", resolver: str => `${str}`}, - {token: "\\", resolver: str => `${str}`}, - {token: "<<", endToken: ">>", resolver: str => str.replace(/[a-z0-9-]/g, '').length ? false : `«${str}»`}, - {token: "[[", endToken: "]]", resolver: str => { - let hl = hyperlinkRegex.exec(str); - if (hl) return `${hl[1].trim()}`; - - let query = str; - let querystr = str; - let split = str.split(':'); - if (split.length > 1) { - let opt = toId(split[0]); - query = split.slice(1).join(':').trim(); - - switch (opt) { - case 'wiki': - case 'wikipedia': - return `${querystr}`; - case 'yt': - case 'youtube': - query += " site:youtube.com"; - querystr = `yt: ${query}`; - break; - case 'pokemon': - case 'item': - return ``; - } - } - - return `${querystr}`; - }}, -]; - -class PatternTester { - // This class sounds like a RegExp - // In fact, one could in theory implement it as a RegExp subclass - // However, ES2016 RegExp subclassing is a can of worms, and it wouldn't allow us - // to tailor the test method for fast command parsing. - constructor() { - this.elements = []; - this.fastElements = new Set(); - this.regexp = null; - } - fastNormalize(elem) { - return elem.slice(0, -1); - } - update() { - const slowElements = this.elements.filter(elem => !this.fastElements.has(this.fastNormalize(elem))); - if (slowElements.length) { - this.regexp = new RegExp('^(' + slowElements.map(elem => '(?:' + elem + ')').join('|') + ')', 'i'); - } - } - register(...elems) { - for (let elem of elems) { - this.elements.push(elem); - if (/^[^ ^$?|()[\]]+ $/.test(elem)) { - this.fastElements.add(this.fastNormalize(elem)); - } - } - this.update(); - } - test(text) { - const spaceIndex = text.indexOf(' '); - if (this.fastElements.has(spaceIndex >= 0 ? text.slice(0, spaceIndex) : text)) { - return true; - } - if (!this.regexp) return false; - return this.regexp.test(text); - } -} - -Chat.multiLinePattern = new PatternTester(); - -/********************************************************* - * Load command files - *********************************************************/ - -Chat.baseCommands = undefined; -Chat.commands = undefined; - -/********************************************************* - * Parser - *********************************************************/ - -class CommandContext { - constructor(options) { - this.message = options.message || ``; - this.recursionDepth = 0; - - // message context - this.room = options.room; - this.user = options.user; - this.connection = options.connection; - this.pmTarget = options.pmTarget; - - // command context - this.cmd = options.cmd || ''; - this.cmdToken = options.cmdToken || ''; - this.target = options.target || ``; - this.fullCmd = options.fullCmd || ''; - - // target user - this.targetUser = null; - this.targetUsername = ""; - this.inputUsername = ""; - } - - parse(message) { - if (message) { - // spawn subcontext - let subcontext = new CommandContext(this); - subcontext.recursionDepth++; - if (subcontext.recursionDepth > MAX_PARSE_RECURSION) { - throw new Error("Too much command recursion"); - } - subcontext.message = message; - return subcontext.parse(); - } - message = this.message; - - let originalRoom = this.room; - if (this.room && !(this.user.userid in this.room.users)) { - this.room = Rooms.global; - } - - let commandHandler = this.splitCommand(message); - - if (typeof commandHandler === 'function') { - message = this.run(commandHandler); - } else { - if (commandHandler === '!') { - if (originalRoom === Rooms.global) { - return this.popupReply(`You tried use "${message}" as a global command, but it is not a global command.`); - } else if (originalRoom) { - return this.popupReply(`You tried to send "${message}" to the room "${originalRoom.id}" but it failed because you were not in that room.`); - } - return this.errorReply(`The command "${this.cmdToken}${this.fullCmd}" is unavailable in private messages. To send a message starting with "${this.cmdToken}${this.fullCmd}", type "${this.cmdToken}${this.cmdToken}${this.fullCmd}".`); - } - if (this.cmdToken) { - // To guard against command typos, show an error message - if (this.cmdToken === BROADCAST_TOKEN) { - if (/[a-z0-9]/.test(this.cmd.charAt(0))) { - return this.errorReply(`The command "${this.cmdToken}${this.fullCmd}" does not exist.`); - } - } else { - return this.errorReply(`The command "${this.cmdToken}${this.fullCmd}" does not exist. To send a message starting with "${this.cmdToken}${this.fullCmd}", type "${this.cmdToken}${this.cmdToken}${this.fullCmd}".`); - } - } else if (!VALID_COMMAND_TOKENS.includes(message.charAt(0)) && VALID_COMMAND_TOKENS.includes(message.trim().charAt(0))) { - message = message.trim(); - if (message.charAt(0) !== BROADCAST_TOKEN) { - message = message.charAt(0) + message; - } - } - - message = this.canTalk(message); - } - - // Output the message - - if (message && message !== true && typeof message.then !== 'function') { - if (this.pmTarget) { - let buf = `|pm|${this.user.getIdentity()}|${this.pmTarget.getIdentity()}|${message}`; - this.user.send(buf); - if (this.pmTarget !== this.user) this.pmTarget.send(buf); - - this.pmTarget.lastPM = this.user.userid; - this.user.lastPM = this.pmTarget.userid; - } else { - this.room.add(`|c|${this.user.getIdentity(this.room.id)}|${message}`); - } - } - - this.update(); - - return message; - } - splitCommand(message = this.message, recursing) { - this.cmd = ''; - this.cmdToken = ''; - this.target = ''; - if (!message || !message.trim().length) return; - - // hardcoded commands - if (message.startsWith(`>> `)) { - message = `/eval ${message.slice(3)}`; - } else if (message.startsWith(`>>> `)) { - message = `/evalbattle ${message.slice(4)}`; - } else if (message.startsWith(`/me`) && /[^A-Za-z0-9 ]/.test(message.charAt(3))) { - message = `/mee ${message.slice(3)}`; - } else if (message.startsWith(`/ME`) && /[^A-Za-z0-9 ]/.test(message.charAt(3))) { - message = `/MEE ${message.slice(3)}`; - } - - let cmdToken = message.charAt(0); - if (!VALID_COMMAND_TOKENS.includes(cmdToken)) return; - if (cmdToken === message.charAt(1)) return; - if (cmdToken === BROADCAST_TOKEN && /[^A-Za-z0-9]/.test(message.charAt(1))) return; - - let cmd = '', target = ''; - - let spaceIndex = message.indexOf(' '); - if (spaceIndex > 0) { - cmd = message.slice(1, spaceIndex).toLowerCase(); - target = message.slice(spaceIndex + 1); - } else { - cmd = message.slice(1).toLowerCase(); - target = ''; - } - - let curCommands = Chat.commands; - let commandHandler; - let fullCmd = cmd; - - do { - if (curCommands.hasOwnProperty(cmd)) { - commandHandler = curCommands[cmd]; - } else { - commandHandler = undefined; - } - if (typeof commandHandler === 'string') { - // in case someone messed up, don't loop - commandHandler = curCommands[commandHandler]; - } else if (Array.isArray(commandHandler) && !recursing) { - return this.splitCommand(cmdToken + 'help ' + fullCmd.slice(0, -4), true); - } - if (commandHandler && typeof commandHandler === 'object') { - let spaceIndex = target.indexOf(' '); - if (spaceIndex > 0) { - cmd = target.substr(0, spaceIndex).toLowerCase(); - target = target.substr(spaceIndex + 1); - } else { - cmd = target.toLowerCase(); - target = ''; - } - - fullCmd += ' ' + cmd; - curCommands = commandHandler; - } - } while (commandHandler && typeof commandHandler === 'object'); - - if (!commandHandler && curCommands.default) { - commandHandler = curCommands.default; - if (typeof commandHandler === 'string') { - commandHandler = curCommands[commandHandler]; - } - } - - if (!commandHandler && !recursing) { - for (let g in Config.groups) { - let groupid = Config.groups[g].id; - target = toId(target); - if (cmd === groupid) { - return this.splitCommand(`/promote ${target}, ${g}`, true); - } else if (cmd === 'global' + groupid) { - return this.splitCommand(`/globalpromote ${target}, ${g}`, true); - } else if (cmd === 'de' + groupid || cmd === 'un' + groupid || cmd === 'globalde' + groupid || cmd === 'deglobal' + groupid) { - return this.splitCommand(`/demote ${target}`, true); - } else if (cmd === 'room' + groupid) { - return this.splitCommand(`/roompromote ${target}, ${g}`, true); - } else if (cmd === 'roomde' + groupid || cmd === 'deroom' + groupid || cmd === 'roomun' + groupid) { - return this.splitCommand(`/roomdemote ${target}`, true); - } - } - } - - this.cmd = cmd; - this.cmdToken = cmdToken; - this.target = target; - this.fullCmd = fullCmd; - - if (typeof commandHandler === 'function' && (this.pmTarget || this.room === Rooms.global)) { - if (!curCommands['!' + (typeof curCommands[cmd] === 'string' ? curCommands[cmd] : cmd)]) { - return '!'; - } - } - - return commandHandler; - } - run(commandHandler) { - if (typeof commandHandler === 'string') commandHandler = Chat.commands[commandHandler]; - let result; - try { - result = commandHandler.call(this, this.target, this.room, this.user, this.connection, this.cmd, this.message); - } catch (err) { - require('./crashlogger')(err, 'A chat command', { - user: this.user.name, - room: this.room && this.room.id, - pmTarget: this.pmTarget && this.pmTarget.name, - message: this.message, - }); - Rooms.global.reportCrash(err); - this.sendReply(`|html|
Pokemon Showdown crashed!
Don't worry, we're working on fixing it.
`); - } - if (result === undefined) result = false; - - return result; - } - - checkFormat(room, user, message) { - if (!room) return true; - if (!room.filterStretching && !room.filterCaps && !room.filterEmojis) return true; - if (user.can('bypassall')) return true; - - if (room.filterStretching && user.name.match(/(.+?)\1{5,}/i)) { - return this.errorReply(`Your username contains too much stretching, which this room doesn't allow.`); - } - if (room.filterCaps && user.name.match(/[A-Z\s]{6,}/)) { - return this.errorReply(`Your username contains too many capital letters, which this room doesn't allow.`); - } - if (room.filterEmojis && user.name.match(emojiRegex)) { - return this.errorReply(`Your username contains emojis, which this room doesn't allow.`); - } - // Removes extra spaces and null characters - message = message.trim().replace(/[ \u0000\u200B-\u200F]+/g, ' '); - - if (room.filterStretching && message.match(/(.+?)\1{7,}/i)) { - return this.errorReply(`Your message contains too much stretching, which this room doesn't allow.`); - } - if (room.filterCaps && message.match(/[A-Z\s]{18,}/)) { - return this.errorReply(`Your message contains too many capital letters, which this room doesn't allow.`); - } - if (room.filterEmojis && message.match(emojiRegex)) { - return this.errorReply(`Your message contains emojis, which this room doesn't allow.`); - } - - return true; - } - - checkSlowchat(room, user) { - if (!room || !room.slowchat) return true; - let lastActiveSeconds = (Date.now() - user.lastMessageTime) / 1000; - if (lastActiveSeconds < room.slowchat) return false; - return true; - } - - checkBanwords(room, message) { - if (!room) return true; - if (!room.banwordRegex) { - if (room.banwords && room.banwords.length) { - room.banwordRegex = new RegExp('(?:\\b|(?!\\w))(?:' + room.banwords.join('|') + ')(?:\\b|\\B(?!\\w))', 'i'); - } else { - room.banwordRegex = true; - } - } - if (!message) return true; - if (room.banwordRegex !== true && room.banwordRegex.test(message)) { - return false; - } - return true; - } - checkGameFilter() { - if (!this.room || !this.room.game || !this.room.game.onChatMessage) return false; - return this.room.game.onChatMessage(this.message); - } - pmTransform(message) { - let prefix = `|pm|${this.user.getIdentity()}|${this.pmTarget.getIdentity()}|`; - return message.split('\n').map(message => { - if (message.startsWith('||')) { - return prefix + '/text ' + message.slice(2); - } else if (message.startsWith('|html|')) { - return prefix + '/raw ' + message.slice(6); - } else if (message.startsWith('|raw|')) { - return prefix + '/raw ' + message.slice(5); - } else if (message.startsWith('|c~|')) { - return prefix + message.slice(4); - } else if (message.startsWith('|c|~|/')) { - return prefix + message.slice(5); - } - return prefix + '/text ' + message; - }).join('\n'); - } - sendReply(data) { - if (this.broadcasting) { - // broadcasting - if (this.pmTarget) { - data = this.pmTransform(data); - this.user.send(data); - if (this.pmTarget !== this.user) this.pmTarget.send(data); - } else { - this.room.add(data); - } - } else { - // not broadcasting - if (this.pmTarget) { - data = this.pmTransform(data); - this.connection.send(data); - } else { - this.connection.sendTo(this.room, data); - } - } - } - errorReply(message) { - if (this.pmTarget) { - let prefix = '|pm|' + this.user.getIdentity() + '|' + this.pmTarget.getIdentity() + '|/error '; - this.connection.send(prefix + message.replace(/\n/g, prefix)); - } else { - this.sendReply('|html|
' + Chat.escapeHTML(message).replace(/\n/g, '
') + '
'); - } - } - addBox(html) { - this.add('|html|
' + html + '
'); - } - sendReplyBox(html) { - this.sendReply('|html|
' + html + '
'); - } - popupReply(message) { - this.connection.popup(message); - } - add(data) { - if (this.pmTarget) { - data = this.pmTransform(data); - this.user.send(data); - if (this.pmTarget !== this.user) this.pmTarget.send(data); - return; - } - this.room.add(data); - } - send(data) { - if (this.pmTarget) { - data = this.pmTransform(data); - this.user.send(data); - if (this.pmTarget !== this.user) this.pmTarget.send(data); - return; - } - this.room.send(data); - } - sendModCommand(data) { - this.room.sendModCommand(data); - } - privateModCommand(data) { - this.room.sendModCommand(data); - this.logEntry(data); - this.room.modlog(data); - } - globalModlog(action, user, text) { - let buf = "(" + this.room.id + ") " + action + ": "; - if (typeof user === 'string') { - buf += "[" + toId(user) + "]"; - } else { - let userid = user.getLastId(); - buf += "[" + userid + "]"; - if (user.autoconfirmed && user.autoconfirmed !== userid) buf += " ac:[" + user.autoconfirmed + "]"; - } - buf += text; - Rooms.global.modlog(buf); - } - logEntry(data) { - if (this.pmTarget) return; - this.room.logEntry(data); - } - addModCommand(text, logOnlyText) { - this.room.addLogMessage(this.user, text); - this.room.modlog(text + (logOnlyText || "")); - } - logModCommand(text) { - this.room.modlog(text); - } - update() { - if (this.room) this.room.update(); - } - can(permission, target, room) { - if (!this.user.can(permission, target, room)) { - this.errorReply(this.cmdToken + this.fullCmd + " - Access denied."); - return false; - } - return true; - } - canBroadcast(suppressMessage) { - if (!this.broadcasting && this.cmdToken === BROADCAST_TOKEN) { - let message = this.canTalk(suppressMessage || this.message); - if (!message) return false; - if (!this.pmTarget && !this.user.can('broadcast', null, this.room)) { - this.errorReply("You need to be voiced to broadcast this command's information."); - this.errorReply("To see it for yourself, use: /" + this.message.substr(1)); - return false; - } - - // broadcast cooldown - let broadcastMessage = message.toLowerCase().replace(/[^a-z0-9\s!,]/g, ''); - - if (this.room && this.room.lastBroadcast === this.broadcastMessage && - this.room.lastBroadcastTime >= Date.now() - BROADCAST_COOLDOWN) { - this.errorReply("You can't broadcast this because it was just broadcasted."); - return false; - } - - this.message = message; - this.broadcastMessage = broadcastMessage; - } - return true; - } - runBroadcast(suppressMessage) { - if (this.broadcasting || this.cmdToken !== BROADCAST_TOKEN) { - // Already being broadcast, or the user doesn't intend to broadcast. - return true; - } - - if (!this.broadcastMessage) { - // Permission hasn't been checked yet. Do it now. - if (!this.canBroadcast(suppressMessage)) return false; - } - - if (this.pmTarget) { - this.add('|c~|' + (suppressMessage || this.message)); - } else { - this.add('|c|' + this.user.getIdentity(this.room.id) + '|' + (suppressMessage || this.message)); - } - if (!this.pmTarget) { - this.room.lastBroadcast = this.broadcastMessage; - this.room.lastBroadcastTime = Date.now(); - } - - this.broadcasting = true; - - return true; - } - canTalk(message, room, targetUser) { - if (room === undefined) room = this.room; - if (targetUser === undefined && this.pmTarget) { - room = undefined; - targetUser = this.pmTarget; - } - let user = this.user; - let connection = this.connection; - - if (room && room.id === 'global') { - // should never happen - // console.log(`Command tried to write to global: ${user.name}: ${message}`); - return false; - } - if (!user.named) { - connection.popup(`You must choose a name before you can talk.`); - return false; - } - if (!user.can('bypassall')) { - let lockType = (user.namelocked ? `namelocked` : user.locked ? `locked` : ``); - let lockExpiration = Punishments.checkLockExpiration(user.namelocked || user.locked); - if (room) { - if (lockType) { - this.errorReply(`You are ${lockType} and can't talk in chat. ${lockExpiration}`); - return false; - } - if (room.isMuted(user)) { - this.errorReply(`You are muted and cannot talk in this room.`); - return false; - } - if (room.modchat && !user.authAtLeast(room.modchat, room)) { - if (room.modchat === 'autoconfirmed') { - this.errorReply(`Because moderated chat is set, your account must be at least one week old and you must have won at least one ladder game to speak in this room.`); - return false; - } - const groupName = Config.groups[room.modchat] && Config.groups[room.modchat].name || room.modchat; - this.errorReply(`Because moderated chat is set, you must be of rank ${groupName} or higher to speak in this room.`); - return false; - } - if (!(user.userid in room.users)) { - connection.popup("You can't send a message to this room without being in it."); - return false; - } - } - if (targetUser) { - if (lockType && !targetUser.can('lock')) { - return this.errorReply(`You are ${lockType} and can only private message members of the global moderation team (users marked by @ or above in the Help room). ${lockExpiration}`); - } - if (targetUser.locked && !user.can('lock')) { - return this.errorReply(`The user "${targetUser.name}" is locked and cannot be PMed.`); - } - if (Config.pmmodchat && !user.authAtLeast(Config.pmmodchat) && !targetUser.canPromote(user.group, Config.pmmodchat)) { - let groupName = Config.groups[Config.pmmodchat] && Config.groups[Config.pmmodchat].name || Config.pmmodchat; - return this.errorReply(`On this server, you must be of rank ${groupName} or higher to PM users.`); - } - if (targetUser.ignorePMs && targetUser.ignorePMs !== user.group && !user.can('lock')) { - if (!targetUser.can('lock')) { - return this.errorReply(`This user is blocking private messages right now.`); - } else if (targetUser.can('bypassall')) { - return this.errorReply(`This admin is too busy to answer private messages right now. Please contact a different staff member.`); - } - } - if (user.ignorePMs && user.ignorePMs !== targetUser.group && !targetUser.can('lock')) { - return this.errorReply(`You are blocking private messages right now.`); - } - } - } - - if (typeof message === 'string') { - if (!message) { - connection.popup("Your message can't be blank."); - return false; - } - let length = message.length; - length += 10 * message.replace(/[^\ufdfd]*/g, '').length; - if (length > MAX_MESSAGE_LENGTH && !user.can('ignorelimits')) { - this.errorReply("Your message is too long: " + message); - return false; - } - - // remove zalgo - message = message.replace(/[\u0300-\u036f\u0483-\u0489\u0610-\u0615\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06ED\u0E31\u0E34-\u0E3A\u0E47-\u0E4E]{3,}/g, ''); - if (/[\u239b-\u23b9]/.test(message)) { - this.errorReply("Your message contains banned characters."); - return false; - } - - if (!this.checkFormat(room, user, message)) { - return false; - } - - if (!this.checkSlowchat(room, user) && !user.can('mute', null, room)) { - this.errorReply("This room has slow-chat enabled. You can only talk once every " + room.slowchat + " seconds."); - return false; - } - - if (!this.checkBanwords(room, user.name) && !user.can('bypassall')) { - this.errorReply(`Your username contains a phrase banned by this room.`); - return false; - } - if (!this.checkBanwords(room, message) && !user.can('mute', null, room)) { - this.errorReply("Your message contained banned words."); - return false; - } - - let gameFilter = this.checkGameFilter(); - if (gameFilter && !user.can('bypassall')) { - this.errorReply(gameFilter); - return false; - } - - if (room) { - let normalized = message.trim(); - if ((room.id === 'lobby' || room.id === 'help') && (normalized === user.lastMessage) && - ((Date.now() - user.lastMessageTime) < MESSAGE_COOLDOWN)) { - this.errorReply("You can't send the same message again so soon."); - return false; - } - user.lastMessage = message; - user.lastMessageTime = Date.now(); - } - - if (Config.chatfilter) { - return Config.chatfilter.call(this, message, user, room, connection, targetUser); - } - return message; - } - - return true; - } - canEmbedURI(uri, isRelative) { - if (uri.startsWith('https://')) return uri; - if (uri.startsWith('//')) return uri; - if (uri.startsWith('data:')) return uri; - if (!uri.startsWith('http://')) { - if (/^[a-z]+:\/\//.test(uri) || isRelative) { - return this.errorReply("URIs must begin with 'https://' or 'http://' or 'data:'"); - } - } else { - uri = uri.slice(7); - } - let slashIndex = uri.indexOf('/'); - let domain = (slashIndex >= 0 ? uri.slice(0, slashIndex) : uri); - - // heuristic that works for all the domains we care about - let secondLastDotIndex = domain.lastIndexOf('.', domain.length - 5); - if (secondLastDotIndex >= 0) domain = domain.slice(secondLastDotIndex + 1); - - let approvedDomains = { - 'imgur.com': 1, - 'gyazo.com': 1, - 'puu.sh': 1, - 'rotmgtool.com': 1, - 'pokemonshowdown.com': 1, - 'nocookie.net': 1, - 'blogspot.com': 1, - 'imageshack.us': 1, - 'deviantart.net': 1, - 'd.pr': 1, - 'pokefans.net': 1, - }; - if (domain in approvedDomains) { - return '//' + uri; - } - if (domain === 'bit.ly') { - return this.errorReply("Please don't use URL shorteners."); - } - // unknown URI, allow HTTP to be safe - return 'http://' + uri; - } - canHTML(html) { - html = ('' + (html || '')).trim(); - if (!html) return ''; - let images = /]*/ig; - let match; - while ((match = images.exec(html))) { - if (this.room.isPersonal && !this.user.can('announce')) { - this.errorReply("Images are not allowed in personal rooms."); - return false; - } - if (!/width=([0-9]+|"[0-9]+")/i.test(match[0]) || !/height=([0-9]+|"[0-9]+")/i.test(match[0])) { - // Width and height are required because most browsers insert the - // element before width and height are known, and when the - // image is loaded, this changes the height of the chat area, which - // messes up autoscrolling. - this.errorReply('All images must have a width and height attribute'); - return false; - } - let srcMatch = /src\s*=\s*"?([^ "]+)(\s*")?/i.exec(match[0]); - if (srcMatch) { - let uri = this.canEmbedURI(srcMatch[1], true); - if (!uri) return false; - html = html.slice(0, match.index + srcMatch.index) + 'src="' + uri + '"' + html.slice(match.index + srcMatch.index + srcMatch[0].length); - // lastIndex is inaccurate since html was changed - images.lastIndex = match.index + 11; - } - } - if ((this.room.isPersonal || this.room.isPrivate === true) && !this.user.can('lock') && html.replace(/\s*style\s*=\s*"?[^"]*"\s*>/g, '>').match(/]/)) { - this.errorReply('You do not have permission to use scripted buttons in HTML.'); - this.errorReply('If you just want to link to a room, you can do this: '); - return false; - } - if (/>here.? without an opening tag."); - return false; - } - if (tag.substr(2) !== stack.pop()) { - this.errorReply("Missing or it's in the wrong place."); - return false; - } - } else { - stack.push(tag.substr(1)); - } - } - if (stack.length) { - this.errorReply("Missing ."); - return false; - } - } - - return html; - } - targetUserOrSelf(target, exactName) { - if (!target) { - this.targetUsername = this.user.name; - this.inputUsername = this.user.name; - return this.user; - } - this.splitTarget(target, exactName); - return this.targetUser; - } - splitOne(target) { - let commaIndex = target.indexOf(','); - if (commaIndex < 0) { - return [target, '']; - } - return [target.substr(0, commaIndex), target.substr(commaIndex + 1).trim()]; - } - splitTarget(target, exactName) { - let [name, rest] = this.splitOne(target); - - this.targetUser = Users.get(name, exactName); - this.inputUsername = name.trim(); - this.targetUsername = this.targetUser ? this.targetUser.name : this.inputUsername; - return rest; - } - splitTargetText(target) { - let [first, rest] = this.splitOne(target); - - this.targetUsername = first.trim(); - return rest.trim(); - } -} -Chat.CommandContext = CommandContext; - -/** - * Command parser - * - * Usage: - * Chat.parse(message, room, user, connection) - * - * Parses the message. If it's a command, the command is executed, if - * not, it's displayed directly in the room. - * - * Examples: - * Chat.parse("/join lobby", room, user, connection) - * will make the user join the lobby. - * - * Chat.parse("Hi, guys!", room, user, connection) - * will return "Hi, guys!" if the user isn't muted, or - * if he's muted, will warn him that he's muted. - * - * The return value is the return value of the command handler, if any, - * or the message, if there wasn't a command. This value could be a success - * or failure (few commands report these) or a Promise for when the command - * is done executing, if it's not currently done. - * - * @param {string} message - the message the user is trying to say - * @param {Room} room - the room the user is trying to say it in - * @param {User} user - the user that sent the message - * @param {Connection} connection - the connection the user sent the message from - */ -Chat.parse = function (message, room, user, connection) { - Chat.loadCommands(); - let context = new CommandContext({message, room, user, connection}); - - return context.parse(); -}; - -Chat.package = {}; - -Chat.uncacheTree = function (root) { - let uncache = [require.resolve(root)]; - do { - let newuncache = []; - for (let i = 0; i < uncache.length; ++i) { - if (require.cache[uncache[i]]) { - newuncache.push.apply(newuncache, - require.cache[uncache[i]].children - .filter(cachedModule => !cachedModule.id.endsWith('.node')) - .map(cachedModule => cachedModule.id) - ); - delete require.cache[uncache[i]]; - } - } - uncache = newuncache; - } while (uncache.length > 0); -}; - -Chat.loadCommands = function () { - if (Chat.commands) return; - - FS('package.json').readTextIfExists().then(data => { - if (data) Chat.package = JSON.parse(data); - }); - - let baseCommands = Chat.baseCommands = require('./chat-commands').commands; - let commands = Chat.commands = Object.assign({}, baseCommands); - - // Install plug-in commands - - // info always goes first so other plugins can shadow it - Object.assign(commands, require('./chat-plugins/info').commands); - - for (let file of FS('chat-plugins/').readdirSync()) { - if (file.substr(-3) !== '.js' || file === 'info.js') continue; - Object.assign(commands, require('./chat-plugins/' + file).commands); - } -}; - -/** - * Escapes HTML in a string. - * - * @param {string} str - * @return {string} - */ -Chat.escapeHTML = function (str) { - if (!str) return ''; - return ('' + str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g, '/'); -}; - -/** - * Strips HTML from a string. - * - * @param {string} html - * @return {string} - */ -Chat.stripHTML = function (html) { - if (!html) return ''; - return html.replace(/<[^>]*>/g, ''); -}; - -/** - * Template string tag function for escaping HTML - * - * @param {string[]} strings - * @param {...any} values - * @return {string} - */ -Chat.html = function (strings, ...args) { - let buf = strings[0]; - let i = 0; - while (i < args.length) { - buf += Chat.escapeHTML(args[i]); - buf += strings[++i]; - } - return buf; -}; - -/** - * Returns singular (defaulting to '') if num is 1, or plural - * (defaulting to 's') otherwise. Helper function for pluralizing - * words. - * - * @param {any} num - * @param {?string} plural - * @param {?string} singular - * @return {string} - */ -Chat.plural = function (num, plural = 's', singular = '') { - if (num && typeof num.length === 'number') { - num = num.length; - } else if (num && typeof num.size === 'number') { - num = num.size; - } else { - num = Number(num); - } - return (num !== 1 ? plural : singular); -}; - -/** - * Returns a timestamp in the form {yyyy}-{MM}-{dd} {hh}:{mm}:{ss}. - * - * options.hour12 = true will reports hours in mod-12 format. - * - * @param {Date} date - * @param {object} options - * @return {string} - */ -Chat.toTimestamp = function (date, options) { - const isHour12 = options && options.hour12; - let parts = [date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()]; - if (isHour12) { - parts.push(parts[3] >= 12 ? 'pm' : 'am'); - parts[3] = parts[3] % 12 || 12; - } - parts = parts.map(val => val < 10 ? '0' + val : '' + val); - return parts.slice(0, 3).join("-") + " " + parts.slice(3, 6).join(":") + (isHour12 ? " " + parts[6] : ""); -}; - -/** - * Takes a number of milliseconds, and reports the duration in English: hours, minutes, etc. - * - * options.hhmmss = true will instead report the duration in 00:00:00 format - * - * @param {number} number - * @param {object} options - * @return {string} - */ -Chat.toDurationString = function (number, options) { - // TODO: replace by Intl.DurationFormat or equivalent when it becomes available (ECMA-402) - // https://github.com/tc39/ecma402/issues/47 - const date = new Date(+number); - const parts = [date.getUTCFullYear() - 1970, date.getUTCMonth(), date.getUTCDate() - 1, date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()]; - const roundingBoundaries = [6, 15, 12, 30, 30]; - const unitNames = ["second", "minute", "hour", "day", "month", "year"]; - const positiveIndex = parts.findIndex(elem => elem > 0); - const precision = (options && options.precision ? options.precision : parts.length); - if (options && options.hhmmss) { - let string = parts.slice(positiveIndex).map(value => value < 10 ? "0" + value : "" + value).join(":"); - return string.length === 2 ? "00:" + string : string; - } - // round least significant displayed unit - if (positiveIndex + precision < parts.length && precision > 0 && positiveIndex >= 0) { - if (parts[positiveIndex + precision] >= roundingBoundaries[positiveIndex + precision - 1]) { - parts[positiveIndex + precision - 1]++; - } - } - return parts.slice(positiveIndex).reverse().map((value, index) => value ? value + " " + unitNames[index] + (value > 1 ? "s" : "") : "").reverse().slice(0, precision).join(" ").trim(); -}; - -/** - * Takes a string and converts it to HTML by replacing standard chat formatting with the appropriate HTML tags. - * - * @param {string} str - * @return {string} - */ -Chat.parseText = function (str) { - str = Chat.escapeHTML(str).replace(///g, '/').replace(linkRegex, uri => `${uri}`); - - let output = ['']; - let stack = []; - - let parse = true; - - let i = 0; - mainLoop: while (i < str.length) { - let token = str[i]; - - // Hardcoded parsing - if (parse && token === '`' && str.substr(i, 2) === '``') { - stack.push('``'); - output.push(''); - parse = false; - i += 2; - continue; - } - - for (let f = 0; f < formattingResolvers.length; f++) { - let start = formattingResolvers[f].token; - let end = formattingResolvers[f].endToken || start; - - if (stack.length && end.startsWith(token) && str.substr(i, end.length) === end && output[stack.length].replace(token, '').length) { - for (let j = stack.length - 1; j >= 0; j--) { - if (stack[j] === start) { - parse = true; - - while (stack.length > j + 1) { - output[stack.length - 1] += stack.pop() + output.pop(); - } - - let str = output.pop(); - let outstr = formattingResolvers[f].resolver(str.trim()); - if (!outstr) outstr = `${start}${str}${end}`; - output[stack.length - 1] += outstr; - i += end.length; - stack.pop(); - continue mainLoop; - } - } - } - - if (parse && start.startsWith(token) && str.substr(i, start.length) === start) { - stack.push(start); - output.push(''); - i += start.length; - continue mainLoop; - } - } - - output[stack.length] += token; - i++; - } - - while (stack.length) { - output[stack.length - 1] += stack.pop() + output.pop(); - } - - let result = output[0]; - - return result; -}; - -/** - * Takes an array and turns it into a sentence string by adding commas and the word 'and' at the end - * - * @param {array} array - * @return {string} - */ -Chat.toListString = function (array) { - if (!array.length) return ''; - if (array.length === 1) return array[0]; - return `${array.slice(0, -1).join(", ")} and ${array.slice(-1)}`; -}; - -Chat.getDataPokemonHTML = function (template, gen = 7) { - if (typeof template === 'string') template = Object.assign({}, Dex.getTemplate(template)); - let buf = '
  • '; - buf += '' + (template.tier) + ' '; - buf += ` `; - buf += '' + template.species + ' '; - buf += ''; - if (template.types) { - for (let i = 0; i < template.types.length; i++) { - buf += `${template.types[i]}`; - } - } - buf += ' '; - if (gen >= 3) { - buf += ''; - if (template.abilities['1']) { - buf += '' + template.abilities['0'] + '
    ' + template.abilities['1'] + '
    '; - } else { - buf += '' + template.abilities['0'] + ''; - } - if (template.abilities['S']) { - buf += '' + template.abilities['H'] + '
    ' + template.abilities['S'] + '
    '; - } else if (template.abilities['H']) { - buf += '' + template.abilities['H'] + ''; - } else { - buf += ''; - } - buf += '
    '; - } - let bst = 0; - for (let i in template.baseStats) { - bst += template.baseStats[i]; - } - buf += ''; - buf += 'HP
    ' + template.baseStats.hp + '
    '; - buf += 'Atk
    ' + template.baseStats.atk + '
    '; - buf += 'Def
    ' + template.baseStats.def + '
    '; - if (gen <= 1) { - bst -= template.baseStats.spd; - buf += 'Spc
    ' + template.baseStats.spa + '
    '; - } else { - buf += 'SpA
    ' + template.baseStats.spa + '
    '; - buf += 'SpD
    ' + template.baseStats.spd + '
    '; - } - buf += 'Spe
    ' + template.baseStats.spe + '
    '; - buf += 'BST
    ' + bst + '
    '; - buf += '
    '; - buf += '
  • '; - return `
      ${buf}
    `; -}; - -Chat.getDataMoveHTML = function (move) { - if (typeof move === 'string') move = Object.assign({}, Dex.getMove(move)); - let buf = ``; - return buf; -}; - -Chat.getDataAbilityHTML = function (ability) { - if (typeof ability === 'string') ability = Object.assign({}, Dex.getAbility(ability)); - let buf = ``; - return buf; -}; - -Chat.getDataItemHTML = function (item) { - if (typeof item === 'string') item = Object.assign({}, Dex.getItem(item)); - let buf = ``; - return buf; -}; diff --git a/config/config-example.js b/config/config-example.js index 7ea7d0a8e523d..fc95a17c65249 100644 --- a/config/config-example.js +++ b/config/config-example.js @@ -1,36 +1,122 @@ 'use strict'; -// The server port - the port to run Pokemon Showdown under +/** + * The server port - the port to run Pokemon Showdown under + */ exports.port = 8000; -// proxyip - proxy IPs with trusted X-Forwarded-For headers -// This can be either false (meaning not to trust any proxies) or an array -// of strings. Each string should be either an IP address or a subnet given -// in CIDR notation. You should usually leave this as `false` unless you -// know what you are doing. +/** + * The server address - the address at which Pokemon Showdown should be hosting + * This should be kept set to 0.0.0.0 unless you know what you're doing. + */ +exports.bindaddress = '0.0.0.0'; + +/** + * workers - the number of networking child processes to spawn + * This should be no greater than the number of threads available on your + * server's CPU. If you're not sure how many you have, you can check from a + * terminal by running: + * + * $ node -e "console.log(require('os').cpus().length)" + * + * Using more workers than there are available threads will cause performance + * issues. Keeping a couple threads available for use for OS-related work and + * other PS processes will likely give you the best performance, if your + * server's CPU is capable of multithreading. If you don't know what any of + * this means or you are unfamiliar with PS' networking code, leave this set + * to 1. + */ +exports.workers = 1; + +/** + * wsdeflate - compresses WebSocket messages + * Toggles use of the Sec-WebSocket-Extension permessage-deflate extension. + * This compresses messages sent and received over a WebSocket connection + * using the zlib compression algorithm. As a caveat, message compression + * may make messages take longer to procress. + * @type {AnyObject?} + */ +exports.wsdeflate = null; + +/* +// example: +exports.wsdeflate = { + level: 5, + memLevel: 8, + strategy: 0, + noContextTakeover: true, + requestNoContextTakeover: true, + maxWindowBits: 15, + requestMaxWindowBits: 15, +}; */ + +/** + * ssl - support WSS, allowing you to access through HTTPS + * The client requires port 443, so if you use a different port here, + * it will need to be forwarded to 443 through iptables rules or + * something. + * @type {{port: number, options: {key: string, cert: string}} | null} + */ +exports.ssl = null; + +/* +// example: +const fs = require('fs'); +exports.ssl = { + port: 443, + options: { + key: './config/ssl/privkey.pem', + cert: './config/ssl/fullchain.pem', + }, +}; +*/ + +/* +Main's SSL deploy script from Let's Encrypt looks like: + cp /etc/letsencrypt/live/sim.psim.us/privkey.pem ~user/Pokemon-Showdown/config/ssl/ + cp /etc/letsencrypt/live/sim.psim.us/fullchain.pem ~user/Pokemon-Showdown/config/ssl/ + chown user:user ~user/Pokemon-Showdown/config/ssl/privkey.pem + chown user:user ~user/Pokemon-Showdown/config/ssl/fullchain.pem +*/ + +/** + * proxyip - proxy IPs with trusted X-Forwarded-For headers + * This can be either false (meaning not to trust any proxies) or an array + * of strings. Each string should be either an IP address or a subnet given + * in CIDR notation. You should usually leave this as `false` unless you + * know what you are doing. + */ exports.proxyip = false; -// ofe - write heapdumps if sockets.js workers run out of memory. -// If you wish to enable this, you will need to install ofe, as it is not a -// installed by default: -// $ npm install --no-save ofe +/** + * ofe - write heapdumps if sockets.js workers run out of memory. + * If you wish to enable this, you will need to install node-oom-heapdump, + * as it is sometimes not installed by default: + * $ npm install node-oom-heapdump + */ exports.ofe = false; -// Pokemon of the Day - put a pokemon's name here to make it Pokemon of the Day -// The PotD will always be in the #2 slot (not #1 so it won't be a lead) -// in every Random Battle team. +/** + * Pokemon of the Day - put a pokemon's name here to make it Pokemon of the Day + * The PotD will always be in the #2 slot (not #1 so it won't be a lead) + * in every Random Battle team. + */ exports.potd = ''; -// crash guard - write errors to log file instead of crashing -// This is normally not recommended - if Node wants to crash, the -// server needs to be restarted -// However, most people want the server to stay online even if there is a -// crash, so this option is provided +/** + * crash guard - write errors to log file instead of crashing + * This is normally not recommended - if Node wants to crash, the + * server needs to be restarted + * However, most people want the server to stay online even if there is a + * crash, so this option is provided + */ exports.crashguard = true; -// login server data - don't forget the http:// and the trailing slash -// This is the URL of the user database and ladder mentioned earlier. -// Don't change this setting - there aren't any other login servers right now +/** + * login server data - don't forget the http:// and the trailing slash + * This is the URL of the user database and ladder mentioned earlier. + * Don't change this setting - there aren't any other login servers right now + */ exports.loginserver = 'http://play.pokemonshowdown.com/'; exports.loginserverkeyalgo = "RSA-SHA1"; exports.loginserverpublickeyid = 4; @@ -50,14 +136,18 @@ Y929lRybWEiKUr+4Yw2O1W0CAwEAAQ== -----END PUBLIC KEY----- `; -// crashguardemail - if the server has been running for more than an hour -// and crashes, send an email using these settings, rather than locking down -// the server. Uncomment this definition if you want to use this feature; -// otherwise, all crashes will lock down the server. If you wish to enable -// this setting, you will need to install nodemailer, as it is not installed -// by default: -// $ npm install --no-save nodemailer -/**exports.crashguardemail = { +/** + * crashguardemail - if the server has been running for more than an hour + * and crashes, send an email using these settings, rather than locking down + * the server. Uncomment this definition if you want to use this feature; + * otherwise, all crashes will lock down the server. If you wish to enable + * this setting, you will need to install nodemailer, as it is not installed + * by default: + * $ npm install nodemailer + * @type {AnyObject?} + */ +exports.crashguardemail = null; +/* exports.crashguardemail = { options: { host: 'mail.example.com', port: 465, @@ -70,221 +160,285 @@ Y929lRybWEiKUr+4Yw2O1W0CAwEAAQ== from: 'crashlogger@example.com', to: 'admin@example.com', subject: 'Pokemon Showdown has crashed!' -};**/ - -// basic name filter - removes characters used for impersonation -// The basic name filter removes Unicode characters that can be used for impersonation, -// like the upside-down exclamation mark (looks like an i), the Greek omicron (looks -// like an o), etc. Disable only if you need one of the alphabets it disables, such as -// Greek or Cyrillic. +}; */ + +/** + * basic name filter - removes characters used for impersonation + * The basic name filter removes Unicode characters that can be used for impersonation, + * like the upside-down exclamation mark (looks like an i), the Greek omicron (looks + * like an o), etc. Disable only if you need one of the alphabets it disables, such as + * Greek or Cyrillic. + */ exports.disablebasicnamefilter = false; -// report joins and leaves - shows messages like " joined" -// Join and leave messages are small and consolidated, so there will never -// be more than one line of messages. -// If this setting is set to `true`, it will override the client-side -// /hidejoins configuration for users. -// This feature can lag larger servers - turn this off if your server is -// getting more than 80 or so users. +/** + * report joins and leaves - shows messages like " joined" + * Join and leave messages are small and consolidated, so there will never + * be more than one line of messages. + * If this setting is set to `true`, it will override the client-side + * /hidejoins configuration for users. + * This feature can lag larger servers - turn this off if your server is + * getting more than 80 or so users. + */ exports.reportjoins = true; -// report joins and leaves periodically - sends silent join and leave messages in batches -// This setting will only be effective if `reportjoins` is set to false, and users will -// only be able to see the messages if they have the /showjoins client-side setting enabled. -// Set this to a positive amount of milliseconds if you want to enable this feature. +/** + * report joins and leaves periodically - sends silent join and leave messages in batches + * This setting will only be effective if `reportjoins` is set to false, and users will + * only be able to see the messages if they have the /showjoins client-side setting enabled. + * Set this to a positive amount of milliseconds if you want to enable this feature. + */ exports.reportjoinsperiod = 0; -// report battles - shows messages like "OU battle started" in the lobby -// This feature can lag larger servers - turn this off if your server is -// getting more than 160 or so users. +/** + * report battles - shows messages like "OU battle started" in the lobby + * This feature can lag larger servers - turn this off if your server is + * getting more than 160 or so users. + */ exports.reportbattles = true; -// report joins and leaves in battle - shows messages like " joined" in battle -// Set this to false on large tournament servers where battles get a lot of joins and leaves. -// Note that the feature of turning this off is deprecated. +/** + * report joins and leaves in battle - shows messages like " joined" in battle + * Set this to false on large tournament servers where battles get a lot of joins and leaves. + * Note that the feature of turning this off is deprecated. + */ exports.reportbattlejoins = true; -// notify staff when users have a certain amount of room punishments. -// Setting this to a number greater than zero will notify staff for everyone with -// the required amount of room punishments. -// Set this to 0 to turn the monitor off. +/** + * notify staff when users have a certain amount of room punishments. + * Setting this to a number greater than zero will notify staff for everyone with + * the required amount of room punishments. + * Set this to 0 to turn the monitor off. + */ exports.monitorminpunishments = 3; -// allow punishmentmonitor to lock users with multiple roombans. -// When set to `true`, this feature will automatically lock any users with three or more -// active roombans, and notify the staff room. -// Note that this requires punishmentmonitor to be enabled, and therefore requires the `monitorminpunishments` -// option to be set to a number greater than zero. If `monitorminpunishments` is set to a value greater than 3, -// the autolock will only apply to people who pass this threshold. +/** + * allow punishmentmonitor to lock users with multiple roombans. + * When set to `true`, this feature will automatically lock any users with three or more + * active roombans, and notify the staff room. + * Note that this requires punishmentmonitor to be enabled, and therefore requires the `monitorminpunishments` + * option to be set to a number greater than zero. If `monitorminpunishments` is set to a value greater than 3, + * the autolock will only apply to people who pass this threshold. + */ exports.punishmentautolock = false; -// whitelist - prevent users below a certain group from doing things -// For the modchat settings, false will allow any user to participate, while a string -// with a group symbol will restrict it to that group and above. The string -// 'autoconfirmed' is also supported for chatmodchat and battlemodchat, to restrict -// chat to autoconfirmed users. -// This is usually intended to be used as a whitelist feature - set these to '+' and -// voice every user you want whitelisted on the server. - -// chat modchat - default minimum group for speaking in chatrooms; changeable with /modchat +/** + * restrict sending links to autoconfirmed users only. + * If this is set to `true`, only autoconfirmed users can send links to either chatrooms or other users, except for staff members. + * This option can be used if your server has trouble with spammers mass PMing links to users, or trolls sending malicious links. + */ +exports.restrictLinks = false; + +/** + * whitelist - prevent users below a certain group from doing things + * For the modchat settings, false will allow any user to participate, while a string + * with a group symbol will restrict it to that group and above. The string + * 'autoconfirmed' is also supported for chatmodchat and battlemodchat, to restrict + * chat to autoconfirmed users. + * This is usually intended to be used as a whitelist feature - set these to '+' and + * voice every user you want whitelisted on the server. + +/** + * chat modchat - default minimum group for speaking in chatrooms; changeable with /modchat + */ exports.chatmodchat = false; -// battle modchat - default minimum group for speaking in battles; changeable with /modchat +/** + * battle modchat - default minimum group for speaking in battles; changeable with /modchat + */ exports.battlemodchat = false; -// pm modchat - minimum group for PMing other users, challenging other users +/** + * pm modchat - minimum group for PMing other users, challenging other users + */ exports.pmmodchat = false; -// ladder modchat - minimum group for laddering +/** + * ladder modchat - minimum group for laddering + */ exports.laddermodchat = false; -// forced timer - force the timer on for all battles -// Players will be unable to turn it off. -// This setting can also be turned on with the command /forcetimer. +/** + * forced timer - force the timer on for all battles + * Players will be unable to turn it off. + * This setting can also be turned on with the command /forcetimer. + */ exports.forcetimer = false; -// backdoor - allows Pokemon Showdown system operators to provide technical -// support for your server -// This backdoor gives system operators (such as Zarel) console admin -// access to your server, which allow them to provide tech support. This -// can be useful in a variety of situations: if an attacker attacks your -// server and you are not online, if you need help setting up your server, -// etc. If you do not trust Pokemon Showdown with admin access, you should -// disable this feature. +/** + * backdoor - allows Pokemon Showdown system operators to provide technical + * support for your server + * This backdoor gives system operators (such as Zarel) console admin + * access to your server, which allow them to provide tech support. This + * can be useful in a variety of situations: if an attacker attacks your + * server and you are not online, if you need help setting up your server, + * etc. If you do not trust Pokemon Showdown with admin access, you should + * disable this feature. + */ exports.backdoor = true; -// List of IPs and user IDs with dev console (>> and >>>) access. -// The console is incredibly powerful because it allows the execution of -// arbitrary commands on the local computer (as the user running the -// server). If an account with the console permission were compromised, -// it could possibly be used to take over the server computer. As such, -// you should only specify a small range of trusted IPs and users here, -// or none at all. By default, only localhost can use the dev console. -// In addition to connecting from a valid IP, a user must *also* have -// the `console` permission in order to use the dev console. -// Setting this to an empty array ([]) will disable the dev console. +/** + * List of IPs and user IDs with dev console (>> and >>>) access. + * The console is incredibly powerful because it allows the execution of + * arbitrary commands on the local computer (as the user running the + * server). If an account with the console permission were compromised, + * it could possibly be used to take over the server computer. As such, + * you should only specify a small range of trusted IPs and users here, + * or none at all. By default, only localhost can use the dev console. + * In addition to connecting from a valid IP, a user must *also* have + * the `console` permission in order to use the dev console. + * Setting this to an empty array ([]) will disable the dev console. + */ exports.consoleips = ['127.0.0.1']; -// Whether to watch the config file for changes. If this is enabled, -// then the config.js file will be reloaded when it is changed. -// This can be used to change some settings using a text editor on -// the server. +/** + * Whether to watch the config file for changes. If this is enabled, + * then the config.js file will be reloaded when it is changed. + * This can be used to change some settings using a text editor on + * the server. + */ exports.watchconfig = true; -// logchat - whether to log chat rooms. +/** + * logchat - whether to log chat rooms. + */ exports.logchat = false; -// logchallenges - whether to log challenge battles. Useful for tournament servers. +/** + * logchallenges - whether to log challenge battles. Useful for tournament servers. + */ exports.logchallenges = false; -// loguserstats - how often (in milliseconds) to write user stats to the -// lobby log. This has no effect if `logchat` is disabled. +/** + * loguserstats - how often (in milliseconds) to write user stats to the + * lobby log. This has no effect if `logchat` is disabled. + */ exports.loguserstats = 1000 * 60 * 10; // 10 minutes -// validatorprocesses - the number of processes to use for validating teams -// simulatorprocesses - the number of processes to use for handling battles -// You should leave both of these at 1 unless your server has a very large -// amount of traffic (i.e. hundreds of concurrent battles). +/** + * validatorprocesses - the number of processes to use for validating teams + * simulatorprocesses - the number of processes to use for handling battles + * You should leave both of these at 1 unless your server has a very large + * amount of traffic (i.e. hundreds of concurrent battles). + */ exports.validatorprocesses = 1; exports.simulatorprocesses = 1; -// inactiveuserthreshold - how long a user must be inactive before being pruned -// from the `users` array. The default is 1 hour. +/** + * inactiveuserthreshold - how long a user must be inactive before being pruned + * from the `users` array. The default is 1 hour. + */ exports.inactiveuserthreshold = 1000 * 60 * 60; -// autolockdown - whether or not to automatically kill the server when it is -// in lockdown mode and the final battle finishes. This is potentially useful -// to prevent forgetting to restart after a lockdown where battles are finished. +/** + * autolockdown - whether or not to automatically kill the server when it is + * in lockdown mode and the final battle finishes. This is potentially useful + * to prevent forgetting to restart after a lockdown where battles are finished. + */ exports.autolockdown = true; -// Custom avatars. -// This allows you to specify custom avatar images for users on your server. -// Place custom avatar files under the /config/avatars/ directory. -// Users must be specified as userids -- that is, you must make the name all -// lowercase and remove non-alphanumeric characters. -// -// Your server *must* be registered in order for your custom avatars to be -// displayed in the client. +/** + * Custom avatars. + * This allows you to specify custom avatar images for users on your server. + * Place custom avatar files under the /config/avatars/ directory. + * Users must be specified as userids -- that is, you must make the name all + * lowercase and remove non-alphanumeric characters. + * + * Your server *must* be registered in order for your custom avatars to be + * displayed in the client. + * @type {{[userid: string]: string}} + */ exports.customavatars = { - //'userid': 'customavatar.png' + // 'userid': 'customavatar.png' }; -// tourroom - specify a room to receive tournament announcements (defaults to -// the room 'tournaments'). -// tourannouncements - announcements are only allowed in these rooms -// tourdefaultplayercap - a set cap of how many players can be in a tournament -// ratedtours - toggles tournaments being ladder rated (true) or not (false) +/** + * tourroom - specify a room to receive tournament announcements (defaults to + * the room 'tournaments'). + * tourannouncements - announcements are only allowed in these rooms + * tourdefaultplayercap - a set cap of how many players can be in a tournament + * ratedtours - toggles tournaments being ladder rated (true) or not (false) + */ exports.tourroom = ''; +/** @type {string[]} */ exports.tourannouncements = [/* roomids */]; exports.tourdefaultplayercap = 0; exports.ratedtours = false; -// appealurl - specify a URL containing information on how users can appeal -// disciplinary actions on your section. You can also leave this blank, in -// which case users won't be given any information on how to appeal. +/** + * appealurl - specify a URL containing information on how users can appeal + * disciplinary actions on your section. You can also leave this blank, in + * which case users won't be given any information on how to appeal. + */ exports.appealurl = ''; -// repl - whether repl sockets are enabled or not -// replsocketprefix - the prefix for the repl sockets to be listening on -// replsocketmode - the file mode bits to use for the repl sockets +/** + * repl - whether repl sockets are enabled or not + * replsocketprefix - the prefix for the repl sockets to be listening on + * replsocketmode - the file mode bits to use for the repl sockets + */ exports.repl = true; exports.replsocketprefix = './logs/repl/'; exports.replsocketmode = 0o600; -// disablehotpatchall - disables `/hotpatch all`. Generally speaking, there's a -// pretty big need for /hotpatch all - convenience. The only advantage any hotpatch -// forms other than all is lower RAM use (which is only a problem for Main because -// Main is huge), and to do pinpoint hotpatching (like /nohotpatch). +/** + * disablehotpatchall - disables `/hotpatch all`. Generally speaking, there's a + * pretty big need for /hotpatch all - convenience. The only advantage any hotpatch + * forms other than all is lower RAM use (which is only a problem for Main because + * Main is huge), and to do pinpoint hotpatching (like /nohotpatch). + */ exports.disablehotpatchall = false; -// permissions and groups: -// Each entry in `grouplist' is a seperate group. Some of the members are "special" -// while the rest is just a normal permission. -// The order of the groups determines their ranking. -// The special members are as follows: -// - symbol: Specifies the symbol of the group (as shown in front of the username) -// - id: Specifies an id for the group. -// - name: Specifies the human-readable name for the group. -// - root: If this is true, the group can do anything. -// - inherit: The group uses the group specified's permissions if it cannot -// find the permission in the current group. Never make the graph -// produced using this member have any cycles, or the server won't run. -// - jurisdiction: The default jurisdiction for targeted permissions where one isn't -// explictly specified. "Targeted permissions" are permissions -// that might affect another user, such as `ban' or `promote'. -// 's' is a special group where it means the user itself only -// and 'u' is another special group where it means all groups -// lower in rank than the current group. -// - roomonly: forces the group to be a per-room moderation rank only. -// - globalonly: forces the group to be a global rank only. -// All the possible permissions are as follows: -// - console: Developer console (>>). -// - lockdown: /lockdown and /endlockdown commands. -// - hotpatch: /hotpatch, /crashfixed and /savelearnsets commands. -// - ignorelimits: Ignore limits such as chat message length. -// - promote: Promoting and demoting. Will only work if the target user's current -// group and target group are both in jurisdiction. -// - room: /roompromote to (eg. roomvoice) -// - makeroom: Create/delete chatrooms, and set modjoin/roomdesc/privacy -// - editroom: Set modjoin/privacy only for battles/groupchats -// - ban: Banning and unbanning. -// - mute: Muting and unmuting. -// - lock: locking (ipmute) and unlocking. -// - receivemutedpms: Receive PMs from muted users. -// - forcerename: /fr command. -// - ip: IP checking. -// - alts: Alt checking. -// - modlog: view the moderator logs. -// - broadcast: Broadcast informational commands. -// - declare: /declare command. -// - announce: /announce command. -// - modchat: Set modchat. -// - potd: Set PotD. -// - forcewin: /forcewin command. -// - battlemessage: /a command. -// - tournaments: creating tournaments (/tour new, settype etc.) -// - tournamentsmoderation: /tour dq, autodq, end etc. -// - tournamentsmanagement: enable/disable tournaments. -// - minigame: make minigames (hangman, polls, etc.). -// - game: make games. -// - gamemanagement: enable/disable games and minigames. +/** + * permissions and groups: + * Each entry in `grouplist' is a seperate group. Some of the members are "special" + * while the rest is just a normal permission. + * The order of the groups determines their ranking. + * The special members are as follows: + * - symbol: Specifies the symbol of the group (as shown in front of the username) + * - id: Specifies an id for the group. + * - name: Specifies the human-readable name for the group. + * - root: If this is true, the group can do anything. + * - inherit: The group uses the group specified's permissions if it cannot + * find the permission in the current group. Never make the graph + * produced using this member have any cycles, or the server won't run. + * - jurisdiction: The default jurisdiction for targeted permissions where one isn't + * explictly specified. "Targeted permissions" are permissions + * that might affect another user, such as `ban' or `promote'. + * 's' is a special group where it means the user itself only + * and 'u' is another special group where it means all groups + * lower in rank than the current group. + * - roomonly: forces the group to be a per-room moderation rank only. + * - globalonly: forces the group to be a global rank only. + * All the possible permissions are as follows: + * - console: Developer console (>>). + * - lockdown: /lockdown and /endlockdown commands. + * - hotpatch: /hotpatch, /crashfixed and /savelearnsets commands. + * - ignorelimits: Ignore limits such as chat message length. + * - promote: Promoting and demoting. Will only work if the target user's current + * group and target group are both in jurisdiction. + * - room: /roompromote to (eg. roomvoice) + * - makeroom: Create/delete chatrooms, and set modjoin/roomdesc/privacy + * - editroom: Editing properties of rooms + * - editprivacy: Set modjoin/privacy only for battles + * - ban: Banning and unbanning. + * - mute: Muting and unmuting. + * - lock: locking (ipmute) and unlocking. + * - receivemutedpms: Receive PMs from muted users. + * - forcerename: /fr command. + * - ip: IP checking. + * - alts: Alt checking. + * - modlog: view the moderator logs. + * - broadcast: Broadcast informational commands. + * - declare: /declare command. + * - announce: /announce command. + * - modchat: Set modchat. + * - potd: Set PotD. + * - forcewin: /forcewin command. + * - battlemessage: /a command. + * - tournaments: creating tournaments (/tour new, settype etc.) + * - gamemoderation: /tour dq, autodq, end etc. + * - gamemanagement: enable/disable games, minigames, and tournaments. + * - minigame: make minigames (hangman, polls, etc.). + * - game: make games. + */ exports.grouplist = [ { symbol: '~', @@ -298,7 +452,7 @@ exports.grouplist = [ id: "leader", name: "Leader", inherit: '@', - jurisdiction: '@u', + jurisdiction: 'u', promote: 'u', roomowner: true, roombot: true, @@ -313,8 +467,9 @@ exports.grouplist = [ potd: true, disableladder: true, globalonly: true, - tournamentsmanagement: true, gamemanagement: true, + exportinputlog: true, + editprivacy: true, }, { symbol: '#', @@ -329,9 +484,20 @@ exports.grouplist = [ declare: true, modchatall: true, roomonly: true, - tournamentsmanagement: true, gamemanagement: true, }, + { + symbol: '\u2605', + id: "host", + name: "Host", + inherit: '@', + jurisdiction: 'u', + declare: true, + modchat: true, + roomonly: true, + gamemanagement: true, + joinbattle: true, + }, { symbol: '\u2606', id: "player", @@ -340,9 +506,9 @@ exports.grouplist = [ roomvoice: true, modchat: true, roomonly: true, - editroom: true, joinbattle: true, nooverride: true, + editprivacy: true, }, { symbol: '*', @@ -385,7 +551,7 @@ exports.grouplist = [ alts: '%u', bypassblocks: 'u%@&~', receiveauthmessages: true, - tournamentsmoderation: true, + gamemoderation: true, jeopardy: true, joinbattle: true, minigame: true, @@ -405,7 +571,7 @@ exports.grouplist = [ { name: 'Locked', id: 'locked', - symbol: '‽', + symbol: '\u203d', punishgroup: 'LOCK', }, { diff --git a/config/datacenters.csv b/config/datacenters.csv index 71a84456adeb9..4da5f21b22ce7 100644 --- a/config/datacenters.csv +++ b/config/datacenters.csv @@ -8,6 +8,7 @@ 5.39.216.0,5.39.223.255,HostKey,http://www.hostkey.com/ 5.44.26.144,5.44.26.159,PEER 1,http://www.peer1.com/ 5.45.72.0,5.45.75.255,3NT UK,http://3nt.com/ +5.62.0.0,5.62.63.255,Privax LTD,http://www.privax.com/ 5.77.32.0,5.77.63.255,eukhost.com,http://eukhost.com/ 5.79.0.0,5.79.7.255,Rackspace,http://www.rackspace.com/ 5.79.16.0,5.79.24.255,Rackspace,http://www.rackspace.com/ @@ -16,6 +17,7 @@ 5.79.39.4,5.79.39.5,Rackspace,http://www.rackspace.com/ 5.79.64.0,5.79.123.255,Leaseweb,http://www.leaseweb.com/ 5.100.152.0,5.100.153.255,Confluence Networks Inc,http://confluence-networks.com/ +5.100.254.0,5.100.254.255,Cloud Web Manage,https://cloudwm.com/ 5.101.96.0,5.101.103.255,DigitalOcean Europe,https://www.digitalocean.com/ 5.101.104.0,5.101.111.255,DigitalOcean Europe,https://www.digitalocean.com/ 5.101.142.232,5.101.142.239,Cyberghost,http://www.cyberghostvpn.com/ @@ -156,7 +158,8 @@ 23.253.0.0,23.253.255.255,Rackspace,http://www.rackspace.com/ 23.254.0.0,23.254.127.255,B2 NET Solutions,http://www.servermania.com/ 25.66.8.0,25.66.15.255,Microsoft Azure,http://www.windowsazure.com/en-us/ -27.50.32.0,27.50.39.255,Hurricane Electic,http://www.he.net/ +27.0.232.0,27.0.232.255,OneProvider,https://oneprovider.com/ +27.50.32.0,27.50.39.255,Hurricane Electric,http://www.he.net/ 27.100.36.0,27.100.39.255,Host US,http://hostus.us/ 27.100.37.0,27.100.37.255,Host US,http://hostus.us/ 27.100.38.0,27.100.38.255,Host US,http://hostus.us/ @@ -363,7 +366,8 @@ 45.55.0.0,45.55.255.255,DigitalOcean USA,https://www.digitalocean.com/ 45.56.64.0,45.56.127.255,Linode,http://www.linode.com/ 45.59.128.0,45.59.191.255,Roya Hosting,http://www.royahosting.com/ -45.62.192.0,45.62.255.255,KW Datacenter CA,http://www.kwdatacentre.com/ +45.62.192.0,45.62.215.255,KW Datacenter CA,http://www.kwdatacentre.com/ +45.62.222.0,45.62.255.255,KW Datacenter CA,http://www.kwdatacentre.com/ 45.63.0.0,45.63.127.255,Choopa,https://www.choopa.com/ 45.76.0.0,45.77.255.255,Choopa,https://www.choopa.com/ 45.124.64.0,45.124.67.255,Host US,http://hostus.us/ @@ -410,6 +414,7 @@ 46.51.128.0,46.51.207.255,Amazon AWS,http://www.amazon.com/aws/ 46.51.216.0,46.51.255.255,Amazon AWS,http://www.amazon.com/aws/ 46.101.0.0,46.101.127.255,DigitalOcean Great Britain,https://www.digitalocean.com/ +46.101.128.0,46.101.255.255,DigitalOcean Europe,https://www.digitalocean.com/ 46.102.224.0,46.102.231.255,simpliq.com,http://www.simpliq.com/ 46.102.240.0,46.102.247.255,Elvsoft,http://www.elvsoft.com/ 46.102.251.0,46.102.251.255,everhost.ro,http://everhost.ro/ @@ -470,6 +475,7 @@ 50.116.64.0,50.116.127.255,WebsiteWelcome.com,http://www.websitewelcome.com/ 50.117.0.0,50.117.127.255,EGIHosting.com,http://www.egihosting.com/ 50.118.128.0,50.118.255.255,EGIHosting.com,http://www.egihosting.com/ +51.15.0.0,51.15.255.255,Online.net,https://www.online.net/ 51.254.0.0,51.255.255.255,OVH,http://www.ovh.co.uk/ 52.0.0.0,52.13.255.255,Amazon AWS,http://www.amazon.com/aws/ 52.16.0.0,52.43.255.255,Amazon AWS,http://www.amazon.com/aws/ @@ -487,6 +493,7 @@ 52.192.0.0,52.193.255.255,Amazon AWS,http://www.amazon.com/aws/ 52.196.0.0,52.215.255.255,Amazon AWS,http://www.amazon.com/aws/ 52.220.0.0,52.222.127.255,Amazon AWS,http://www.amazon.com/aws/ +54.37.136.0,54.37.139.255,OVH,https://www.ovh.pl/ 54.64.0.0,54.95.255.255,Amazon AWS,http://www.amazon.com/aws/ 54.144.0.0,54.179.255.255,Amazon AWS,http://www.amazon.com/aws/ 54.183.0.0,54.191.255.255,Amazon AWS,http://www.amazon.com/aws/ @@ -549,6 +556,7 @@ 64.45.0.0,64.45.63.255,PEER 1,http://www.peer1.com/ 64.46.32.0,64.46.63.255,RackForce,http://www.rockforce.com/ 64.49.192.0,64.49.255.255,Rackspace,http://www.rackspace.com/ +64.52.96.0,64.52.104.255,CloudRoute,http://www.cloudroute.com/ 64.50.160.0,64.50.191.255,Lunar Pages,http://www.lunarpages.com/ 64.56.64.0,64.56.79.255,Perfect IP,http://www.perfectip.net/ 64.59.64.0,64.59.127.255,MojoHost,http://www.mojohost.com @@ -577,7 +585,6 @@ 64.118.80.0,64.118.95.255,4rweb.com,http://4rweb.com/ 64.119.160.0,64.119.191.255,latisys,http://www.latisys.com/ 64.120.0.0,64.120.127.255,Ubiquity Server Solutions,http://www.ubiquityservers.com/ -64.120.128.0,64.120.255.255,hostnoc,http://www.hostnoc.net/ 64.130.0.0,64.130.63.255,Pair Networks,http://www.pair.com/ 64.131.64.0,64.131.95.255,ServInt,http://www.servint.net/ 64.137.128.0,64.137.255.255,KW Datacenter CA,http://www.kwdatacentre.com/ @@ -650,7 +657,6 @@ 66.85.128.0,66.85.191.255,Secure Servers,http://www.securedservers.com/ 66.90.64.0,66.90.127.255,FDC Servers,http://fdcservers.net/ 66.96.128.0,66.96.191.255,The Endurance International Group Inc,http://www.enduranceinternational.com/ -66.96.192.0,66.96.255.255,hostnoc,http://www.hostnoc.net/ 66.98.128.0,66.98.255.255,SoftLayer,http://www.softlayer.com/ 66.111.64.0,66.111.95.255,PEER 1,http://www.peer1.com/ 66.111.96.0,66.111.111.255,Neospire,http://www.neospire.net/ @@ -658,6 +664,7 @@ 66.116.96.0,66.116.127.255,SWITCH Communications Group LLC,http://www.switchnap.com/ 66.129.64.0,66.129.127.255,Peak10,http://www.peak10.com/ 66.132.128.0,66.132.255.255,PEER 1,http://www.peer1.com/ +66.133.72.0,66.133.79.255,Micfo,https://www.micfo.com/ 66.135.32.0,66.135.63.255,ServerBeach Dedicated Servers,http://www.serverbeach.com/ 66.147.224.0,66.147.239.255,HostRocket,http://www.hostrocket.com/ 66.147.240.0,66.147.255.255,Bluehost.com,http://www.bluehost.com/ @@ -671,7 +678,6 @@ 66.165.128.0,66.165.159.255,ActiveHost,http://www.activehost.com/ 66.172.0.0,66.172.63.255,Cyberverse,http://www.cyberverse.com/ 66.180.192.0,66.180.207.255,Cyberverse,http://www.cyberverse.com/ -66.197.128.0,66.197.255.255,hostnoc,http://www.hostnoc.net/ 66.199.128.0,66.199.191.255,PEER 1,http://www.peer1.com/ 66.206.32.0,66.206.47.255,Turnkey Internet,http://turnkeyinternet.net/ 66.209.64.0,66.209.95.255,SWITCH Communications Group LLC,http://www.switchnap.com/ @@ -747,7 +753,7 @@ 67.216.160.0,67.216.175.255,Peak10,http://www.peak10.com/ 67.217.48.0,67.217.63.255,Host Department LLC,http://www.hostdepartment.com/ 67.217.160.0,67.217.191.255,latisys,http://www.latisys.com/ -67.219.96.0,67.219.127.255,Razor,http://www.razorservers.com/ +67.219.96.0,67.219.111.255,Razor,http://www.razorservers.com/ 67.220.64.0,67.220.95.255,awknet,http://awknet.com/ 67.220.192.0,67.220.223.255,WebNX Internet Services,http://webnx.com/ 67.221.32.0,67.221.63.255,Peak Web Hosting,http://www.peakwebhosting.com/ @@ -787,6 +793,7 @@ 68.171.208.0,68.171.223.255,Acenet,http://www.ace-host.net/ 68.178.128.0,68.178.255.255,GoDaddy.com Inc,http://www.godaddy.com/ 68.233.224.0,68.233.255.255,Hivelocity Hosting,http://www.hivelocity.net/ +68.235.32.0,68.235.63.255,Tzulo,https://www.tzulo.com/ 69.0.128.0,69.0.255.255,PEER 1,http://www.peer1.com/ 69.1.128.0,69.1.159.255,Indiana Data Center LLC,http://inddc.com/ 69.1.192.0,69.1.223.255,YourColo,http://yourcolo.com/ @@ -799,6 +806,7 @@ 69.10.32.0,69.10.63.255,InterServer.net,http://www.interserver.net/ 69.10.128.0,69.10.159.255,RackForce,http://www.rockforce.com/ 69.13.0.0,69.13.255.255,C I Host,http://www.cihost.com/ +69.16.128.0,69.16.191.255,IP Vanish,http://ipvanish.com/ 69.16.192.0,69.16.255.255,Liquid Web,http://www.liquidweb.com/ 69.20.0.0,69.20.127.255,Rackspace,http://www.rackspace.com/ 69.24.64.0,69.24.95.255,Gearhost,http://www.gearhost.com/ @@ -854,7 +862,7 @@ 69.175.0.0,69.175.127.255,SingleHop,http://www.singlehop.com/ 69.176.80.0,69.176.95.255,ethr.net,http://ethr.net/ 69.192.0.0,69.192.255.255,Akamai,http://akamai.com/ -69.194.0.0,69.194.127.255,Peak Web Hosting,http://www.peakwebhosting.com/ +69.194.7.0,69.194.7.255,Peak Web Hosting,http://www.peakwebhosting.com/ 69.194.128.0,69.194.143.255,SWITCH Communications Group LLC,http://www.switchnap.com/ 69.194.160.0,69.194.175.255,Fortress Integrated Technologies,http://fortressitx.com/ 69.194.224.0,69.194.239.255,180Servers,http://www.180servers.com/ @@ -908,6 +916,7 @@ 72.32.0.0,72.32.255.255,Rackspace,http://www.rackspace.com/ 72.34.32.0,72.34.63.255,ihnetworks.net,http://ihnetworks.net/ 72.35.64.0,72.35.95.255,Peak10,http://www.peak10.com/ +72.35.240.0,72.35.247.255,Micfo,https://www.micfo.com/ 72.36.128.0,72.36.255.255,Layered Technologies Inc,http://www.layeredtech.com/ 72.44.32.0,72.44.63.255,Amazon AWS,http://www.amazon.com/aws/ 72.44.64.0,72.44.79.255,multacom.com,http://multacom.com/ @@ -1006,8 +1015,10 @@ 77.93.192.0,77.93.223.255,Master Internet S.R.O.,http://www.master.cz/ 77.94.240.0,77.94.247.255,Global-e Datacenter B.V.,http://www.global-datacenter.nl 77.95.224.0,77.95.231.255,Snel Internet Services B.V.,https://www.snelserver.com/ +77.111.244.0,77.111.247.255,Opera Mini Proxy,https://www.opera.com/ 77.120.108.128,77.120.108.191,Volia Datacenter,http://www.hosting-service.com.ua 77.222.40.0,77.222.43.255,SpaceWeb,https://sweb.ru/ +77.234.40.0,77.234.47.255,Avast Cloud,https://www.avast.com 77.235.32.0,77.235.63.255,EuroVPS,http://eurovps.com/ 77.237.228.0,77.237.231.255,servhost.de,http://servhost.de/ 77.237.241.128,77.237.241.255,webhoster.de,http://webhoster.de/ @@ -1043,6 +1054,7 @@ 78.41.200.0,78.41.207.255,Snel Internet Services B.V.,https://www.snelserver.com/ 78.41.232.0,78.41.239.255,euro-web.com,http://fr.euro-web.com/ 78.46.0.0,78.47.255.255,Hetzner Online AG,http://www.hetzner.de/ +78.108.46.0,78.108.46.255,ENAHOST,https://www.enahost.com/ 78.109.16.0,78.109.31.255,hosting.ua,http://hosting.ua/ 78.110.160.0,78.110.175.255,UK Dedicated Servers LTD,http://ukservers.com/ 78.129.128.0,78.129.255.255,iomart Hosting Ltd,http://www.rapidswitch.com/ @@ -1122,12 +1134,14 @@ 81.176.224.0,81.176.225.255,eserver.ru,http://www.eserver.ru/ 81.177.26.0,81.177.27.255,erix-colo,http:// 82.98.128.0,82.98.191.255,dinahosting,https://en.dinahosting.com/ +82.102.16.0,82.102.31.255,M247 Dedicated Servers,https://m247.com/ 82.103.128.0,82.103.191.255,easyspeedy,http://easyspeedy.com/ 82.113.128.0,82.113.159.255,Xtraordinary Networks Limited,http://xtrahost.co.uk/ 82.139.64.0,82.139.127.255,prolocation.net,http://prolocation.net/ 82.145.32.0,82.145.63.255,iomart Hosting Ltd,http://www.rapidswitch.com/ 82.146.40.0,82.146.47.255,FirstVDS,http://www.firstvds.ru/ 82.149.64.0,82.149.95.255,IP Exchange GmbH,http://www.ip-exchange.de/ +82.163.78.0,82.163.79.255,UK2,https://www.uk2.net/ 82.165.0.0,82.165.255.255,1&1 Internet,http://www.1and1.com/ 82.192.64.0,82.192.95.255,Leaseweb,http://www.leaseweb.com/ 82.194.64.0,82.194.95.255,acens Technologies S.L.,http://www.acens.com/ @@ -1206,8 +1220,10 @@ 85.232.32.0,85.232.63.255,Titan Internet Ltd,http://www.titaninternet.co.uk/index.cfm 85.234.128.0,85.234.159.255,BlueConnex,http://www.simplytransit.net/ 85.235.216.0,85.235.219.255,Prometey,http://ptspb.ru/ +85.255.0.0,85.255.15.255,FORPSI,https://www.forpsi.com/ 85.255.192.0,85.255.207.255,Hostbasket,http://www.hostbasket.com/en/ 86.39.128.0,86.39.255.255,easyhost.be,http://easyhost.be/ +86.105.52.0,86.105.52.255,Aruba Cloud,https://www.arubacloud.com/ 86.105.80.0,86.105.87.255,ip.ro,http://ip.ro/ 86.109.0.0,86.109.31.255,Alpha Mega Hosting,http://www.alphamegahosting.com/ 86.109.96.0,86.109.127.255,acens Technologies S.L.,http://www.acens.com/ @@ -1385,7 +1401,6 @@ 93.115.80.0,93.115.87.255,Voxility,https://www.voxility.com/ 93.115.92.0,93.115.95.255,Voxility Romania,https://www.voxility.com/ 93.127.128.0,93.127.255.255,Star-Hosting e.K.,http://star-hosting.de/ -93.168.0.0,93.169.255.255,everhost,http://everhost.co/ 93.170.128.0,93.170.131.255,Adman,https://adman.com/ 93.171.200.0,93.171.203.255,mirahost,http://mirahub.com/ 93.174.88.0,93.174.90.255,Ecatel,http://www.ecatel.net/ @@ -1416,8 +1431,10 @@ 94.103.144.0,94.103.159.255,nedzone.nl,https://www.nedzone.nl/ 94.126.176.0,94.126.183.255,Solido Hosting A/S,http://solidohosting.com/ 94.136.32.0,94.136.63.255,Webfusion,http://www.webfusion.com/ +94.140.120.0,94.140.121.255,Yourserver Sweden,https://www.yourserver.se/ 94.154.112.0,94.154.127.255,justhost.in.ua,http://www.justhost.in.ua/ 94.177.4.0,94.177.5.255,everhost,http://everhost.co/ +94.177.232.0,94.177.239.255,Aruba Cloud,https://www.arubacloud.com/ 94.185.80.0,94.185.87.255,Netrouting,http://www.netrouting.com/ 94.198.56.0,94.198.63.255,Unbelievable Machine,http://www.unbelievable-machine.com/ 94.198.167.64,94.198.167.95,easyhost.be,http://easyhost.be/ @@ -1475,7 +1492,6 @@ 95.215.60.0,95.215.63.255,sologigabit.com,http://www.sologigabit.com/en/Dedicated-Servers 96.6.0.0,96.7.255.255,Akamai,http://akamai.com/ 96.8.112.0,96.8.127.255,Velocity Servers,http://www.velocity-servers.net/ -96.9.128.0,96.9.191.255,hostnoc,http://www.hostnoc.net/ 96.16.0.0,96.17.255.255,Akamai,http://akamai.com/ 96.30.0.0,96.30.63.255,wiredtree,http://www.wiredtree.com/ 96.31.64.0,96.31.95.255,Hivelocity Hosting,http://www.hivelocity.net/ @@ -1532,6 +1548,8 @@ 103.27.76.0,103.27.79.255,Host US,http://hostus.us/ 103.27.78.0,103.27.79.255,Host US,http://hostus.us/ 103.28.148.0,103.28.149.255,Argon Data Communication,http://easyway.co.id +103.75.118.0,103.75.118.255,OneProvider,http://oneprovider.com/ +103.75.119.0,103.75.119.255,OneProvider,http://oneprovider.com/ 103.192.176.0,103.192.179.255,Host US,http://hostus.us/ 103.192.178.0,103.192.178.255,Host US,http://hostus.us/ 103.192.179.0,103.192.179.255,Host US,http://hostus.us/ @@ -1542,6 +1560,7 @@ 103.207.69.0,103.207.69.255,Host US,http://hostus.us/ 103.207.70.0,103.207.71.255,Host US,http://hostus.us/ 103.207.71.0,103.207.71.255,Host US,http://hostus.us/ +103.212.220.0,103.212.223.255,NeoSilkRoad,http://neosilkroad.com 103.246.248.0,103.246.248.255,quickweb.co.nz,http://quickweb.co.nz/ 103.246.250.0,103.246.251.255,quickweb.co.nz,http://quickweb.co.nz/ 103.253.144.0,103.253.147.255,DigitalOcean AP,https://www.digitalocean.com/ @@ -1561,9 +1580,11 @@ 104.45.0.0,104.46.255.255,Microsoft Azure,http://www.windowsazure.com/en-us/ 104.47.128.0,104.47.191.255,Microsoft Azure,http://www.windowsazure.com/en-us/ 104.47.200.0,104.47.215.255,Microsoft Azure,http://www.windowsazure.com/en-us/ +104.129.0.0,104.129.63.255,QuadraNet,https://www.quadranet.com/ 104.130.64.0,104.130.223.255,Rackspace,http://www.rackspace.com/ 104.131.0.0,104.131.255.255,DigitalOcean USA,https://www.digitalocean.com/ 104.143.0.0,104.143.15.255,VersaWeb,https://www.versaweb.com/ +104.143.192.0,104.143.223.255,Telentia,https://www.telentia.com/ 104.156.224.0,104.156.255.255,Choopa,https://www.choopa.com/ 104.164.0.0,104.165.255.255,EGIHosting.com,http://www.egihosting.com/ 104.167.96.0,104.167.127.255,KW Datacenter CA,http://www.kwdatacentre.com/ @@ -1596,8 +1617,10 @@ 104.239.192.0,104.239.223.255,Rackspace,http://www.rackspace.com/ 104.245.96.0,104.245.103.255,VolumeDrive,http://volumedrive.com/ 104.252.0.0,104.253.255.255,EGIHosting.com,http://www.egihosting.com/ +104.254.88.0,104.254.95.255,Amanah Tech Dedicated Servers,https://www.amanah.com/ 104.254.212.0,104.254.215.255,Power Up Hosting,https://poweruphosting.com/ 104.255.64.0,104.255.71.255,Volume Drive,http://volumedrive.com +104.255.152.0,104.255.159.255,Yesup Ecommerce Solutions,http://www.yesup.com/ 106.186.120.0,106.186.127.255,Linode Japan,https://www.linode.com/ 107.6.0.0,107.6.63.255,PEER 1,http://www.peer1.com/ 107.6.64.0,107.6.127.255,Voxel,http://www.voxel.net/ @@ -1611,6 +1634,7 @@ 107.155.0.0,107.155.63.255,Zenlayer,http://www.zenlayer.com/ 107.160.0.0,107.160.255.255,Psychz Networks,http://psychz.net/ 107.164.0.0,107.165.255.255,EGIHosting.com,http://www.egihosting.com/ +107.167.96.0,107.167.127.255,Opera Mini Proxy,https://www.opera.com/ 107.170.0.0,107.170.255.255,DigitalOcean USA,https://www.digitalocean.com/ 107.181.160.0,107.181.191.255,Total Server Solutions,http://totalserversolutions.com/ 107.182.224.0,107.182.239.255,UK2 Group,http://www.uk2.net/ @@ -1749,6 +1773,7 @@ 139.59.0.0,139.59.255.255,DigitalOcean AP,https://www.digitalocean.com/ 138.197.0.0,138.197.255.255,DigitalOcean USA,https://www.digitalocean.com/ 139.59.0.0,139.59.255.255,DigitalOcean AP,https://www.digitalocean.com/ +141.0.8.0,141.0.11.255,Opera Mini Proxy,https://www.opera.com/ 141.0.160.0,141.0.167.255,NuFuture Ltd,http://www.nublue.co.uk/ 141.101.64.0,141.101.127.255,CloudFlare Inc,https://www.cloudflare.com/ 141.105.64.0,141.105.71.255,HostKey,http://www.hostkey.com/ @@ -1757,7 +1782,7 @@ 142.4.32.0,142.4.63.255,WebNX Internet Services,http://webnx.com/ 142.4.192.0,142.4.223.255,OVH,http://www.ovh.co.uk/ 142.11.192.0,142.11.255.255,hostwinds.com,http://www.hostwinds.com/ -142.111.0.0,142.111.255.255,EGIHosting.com,http://www.egihosting.com/ +142.44.128.0,142.44.255.255,OVH CA,https://www.ovh.com/ca/en/ 142.54.160.0,142.54.191.255,Data Shack,https://www.datashack.net/ 142.91.0.0,142.91.255.255,Ubiquity Server Solutions,http://www.ubiquityservers.com/ 142.111.0.0,142.111.255.255,EGIHosting.com,http://www.egihosting.com/ @@ -1767,6 +1792,7 @@ 146.0.229.24,146.0.229.31,Surfeasy,https://www.surfeasy.com/ 146.0.237.48,146.0.237.55,Surfeasy,https://www.surfeasy.com/ 146.0.237.56,146.0.237.63,Surfeasy,https://www.surfeasy.com/ +146.88.192.0,146.88.195.255,Micfo,https://www.micfo.com/ 146.185.16.0,146.185.31.255,UK2 Group,http://www.100tb.com/ 146.185.128.0,146.185.135.255,DigitalOcean Europe,https://www.digitalocean.com/ 146.185.136.0,146.185.143.255,DigitalOcean Europe,https://www.digitalocean.com/ @@ -1780,6 +1806,8 @@ 146.255.32.0,146.255.47.255,GoDaddy.com Inc,http://www.godaddy.com/ 146.255.168.0,146.255.175.255,WEBAXYS,http://www.webaxys.fr/ 147.75.192.0,147.75.207.255,Packet Host,https://www.packet.net/ +147.135.0.0,147.135.127.255,OVH,https://www.ovh.us/ +147.135.128.0,147.135.131.255,OVH,https://www.ovh.co.uk/ 147.203.0.0,147.203.255.255,American Internet Services,http://americanis.net/ 147.255.0.0,147.255.255.255,Ubiquity Server Solutions,http://www.ubiquityservers.com/ 148.251.0.0,148.251.255.255,Hetzner Online AG,http://www.hetzner.de/ @@ -1790,6 +1818,7 @@ 149.210.164.0,149.210.164.255,TransIP,https://www.transip.nl/ 149.255.32.0,149.255.39.255,Swiftway,http://swiftway.net/ 151.80.128.0,151.80.159.255,OVH FR,https://www.ovh.ie/ +151.80.179.24,151.80.179.27,OVH FR,https://www.ovh.ie/ 151.236.4.0,151.236.4.255,EDIS,http://www.edis.at/ 151.236.8.0,151.236.8.255,EDIS,http://www.edis.at/ 151.236.13.0,151.236.15.255,EDIS,http://www.edis.at/ @@ -1799,6 +1828,7 @@ 151.237.176.0,151.237.177.255,webexxpurts.com,http://webexxpurts.com/ 151.237.181.0,151.237.181.255,webexxpurts.com,http://webexxpurts.com/ 151.237.184.0,151.237.184.255,webexxpurts.com,http://webexxpurts.com/ +154.127.59.0,154.127.59.255,Host1Plus South Africa,https://www.host1plus.com/ 157.55.8.96,157.55.8.175,Microsoft Azure,http://www.windowsazure.com/en-us/ 157.55.24.0,157.55.31.255,Microsoft Azure,http://www.windowsazure.com/en-us/ 157.55.60.224,157.55.60.255,Microsoft Azure,http://www.windowsazure.com/en-us/ @@ -1852,24 +1882,33 @@ 162.243.0.0,162.243.255.255,DigitalOcean USA,https://www.digitalocean.com/ 162.244.8.0,162.244.15.255,Power Up Hosting,https://poweruphosting.com/ 162.244.24.0,162.244.31.255,KW Datacenter CA,http://www.kwdatacentre.com/ +162.244.80.0,162.244.83.255,Server Room,https://www.serverroom.net/ +162.244.80.243,162.244.80.250,Cyberghost,http://www.cyberghostvpn.com/ 162.246.16.0,162.246.23.255,InterServer.net,http://www.interserver.net/ 162.248.8.0,162.248.11.255,KW Datacenter CA,http://www.kwdatacentre.com/ 162.248.72.0,162.248.79.255,Volume Drive,http://volumedrive.com 162.248.160.0,162.248.167.255,KW Datacenter CA,http://www.kwdatacentre.com/ 162.250.120.0,162.250.127.255,InterServer.net,http://www.interserver.net/ +162.251.232.0,162.251.239.255,Fiberhub,https://www.fiberhub.com/ 162.252.240.0,162.252.243.255,KW Datacenter CA,http://www.kwdatacentre.com/ +162.254.132.0,162.254.135.255,Yesup Ecommerce Solutions,http://www.yesup.com/ +162.254.205.88,162.254.205.95,Privatix,https://privatix.com/ +162.254.207.104,162.254.207.111,Cyberghost,http://www.cyberghostvpn.com/ 163.47.8.0,163.47.11.255,DigitalOcean AP,https://www.digitalocean.com/ 164.40.133.0,164.40.133.255,GoGrid LLC,http://www.gogrid.com/ 164.40.144.0,164.40.144.255,GoGrid LLC,http://www.gogrid.com/ 164.40.147.0,164.40.147.255,GoGrid LLC,http://www.gogrid.com/ 164.138.220.0,164.138.221.255,SuperHosting.BG,http://www.superhosting.bg/ 164.177.128.0,164.177.159.255,Rackspace,http://www.rackspace.com/ +165.84.224.0,165.84.231.255,micfo.com,http://micfo.com/ +165.227.0.0,165.227.255.255,DigitalOcean USA,https://www.digitalocean.com/ 166.62.0.0,166.62.127.255,GoDaddy.com Inc,http://www.godaddy.com/ 166.78.0.0,166.78.255.255,Rackspace,http://www.rackspace.com/ 166.88.0.0,166.88.255.255,EGIHosting.com,http://www.egihosting.com/ 167.88.32.0,167.88.47.255,KW Datacenter CA,http://www.kwdatacentre.com/ 167.114.0.0,167.114.255.255,OVH,http://www.ovh.co.uk/ 167.160.32.0,167.160.63.255,Web2Objects,https://web2objects.com/ +168.1.112.64,168.1.112.127,SoftLayer,http://www.softlayer.com/ 168.61.0.0,168.62.63.255,Microsoft Azure,http://www.windowsazure.com/en-us/ 168.62.96.0,168.62.251.255,Microsoft Azure,http://www.windowsazure.com/en-us/ 168.63.0.0,168.63.89.191,Microsoft Azure,http://www.windowsazure.com/en-us/ @@ -1901,7 +1940,6 @@ 173.208.0.0,173.208.127.255,Ubiquity Server Solutions,http://www.ubiquityservers.com/ 173.208.128.0,173.208.255.255,WholeSale Internet Inc,http://www.wholesaleinternet.com/ 173.211.0.0,173.211.127.255,Colocation America Inc,http://www.colocationamerica.com/ -173.212.192.0,173.212.255.255,hostnoc,http://www.hostnoc.net/ 173.213.64.0,173.213.127.255,infinitie.net,http://www.serverhub.com/ 173.213.224.0,173.213.239.255,Edgewebhosting,http://www.edgewebhosting.net/ 173.213.240.0,173.213.255.255,American Internet Services,http://americanis.net/ @@ -1935,7 +1973,6 @@ 173.245.64.0,173.245.95.255,EGIHosting.com,http://www.egihosting.com/ 173.246.96.0,173.246.111.255,Gandi.net US,http://www.gandi.net/ 173.248.128.0,173.248.191.255,wehostwebsites.com,http://wehostwebsites.com/ -173.248.192.0,173.248.255.255,Canaca-com Inc.,http://canaca.com 173.249.144.0,173.249.159.255,Future Hosting Inc,http://vpsdatacenter.com/ 173.252.192.0,173.252.255.255,Take 2 Hosting,http://www.take2hosting.com/ 173.254.0.0,173.254.127.255,Bluehost.com,http://www.bluehost.com/ @@ -1982,6 +2019,7 @@ 176.65.64.0,176.65.71.255,The Bunker,http://www.thebunker.net/ 176.67.160.0,176.67.175.255,UK2 Group,http://www.uk2.net/ 176.74.160.0,176.74.191.255,PEER 1,http://www.peer1.com/ +176.103.48.0,176.103.63.255,XServer,https://xserver.ua/ 176.126.83.0,176.126.83.255,OneProvider,http://oneprovider.com/ 176.227.192.120,176.227.192.127,Redstation Limited,http://redstation.com/ 176.227.195.0,176.227.195.7,Redstation Limited,http://redstation.com/ @@ -2064,7 +2102,6 @@ 178.77.64.0,178.77.127.255,Host Europe,http://www.hosteurope.de/ 178.79.128.0,178.79.191.255,Linode,http://www.linode.com/ 178.79.192.0,178.79.255.255,Limelight Networks Inc,http://www.limelight.com/ -178.86.0.0,178.87.255.255,hosting.ua,http://hosting.ua/ 178.156.0.0,178.156.127.255,ServiHosting Networks S.L.,http://servihosting.es 178.162.128.0,178.162.255.255,Leaseweb,http://www.leaseweb.com/ 178.174.0.0,178.174.127.255,Unbelievable Machine,http://www.unbelievable-machine.com/ @@ -2138,13 +2175,11 @@ 182.174.0.0,182.175.255.255,21vianet,http://21vianet.com/ 183.81.160.0,183.81.167.255,IP ServerOne,http://ipserverone.com/ 183.84.0.0,183.85.255.255,21vianet,http://21vianet.com/ -184.22.0.0,184.22.255.255,hostnoc,http://www.hostnoc.net/ 184.24.0.0,184.31.255.255,Akamai,http://akamai.com/ 184.50.0.0,184.51.255.255,Akamai,http://akamai.com/ 184.72.0.0,184.73.255.255,Amazon AWS,http://www.amazon.com/aws/ 184.75.208.0,184.75.223.255,Amanah,https://www.amanah.com/ 184.75.240.0,184.75.255.255,Elvsoft,http://www.elvsoft.com/ -184.82.0.0,184.82.255.255,hostnoc,http://www.hostnoc.net/ 184.84.0.0,184.87.255.255,Akamai,http://akamai.com/ 184.94.144.0,184.94.159.255,MojoHost,http://www.mojohost.com 184.95.32.0,184.95.63.255,Secure Servers,http://www.securedservers.com/ @@ -2177,6 +2212,7 @@ 185.17.43.56,185.17.43.59,OneProvider,http://oneprovider.com/ 185.17.184.0,185.17.187.255,Leaseweb,http://www.leaseweb.com/ 185.19.218.152,185.19.218.159,Velia,http://www.velia.net/ +185.26.180.0,185.26.181.255,Opera Mini Proxy,https://www.opera.com/ 185.27.236.0,185.27.236.255,3W Infra,https://ccc.3winfra.com/ 185.28.193.0,185.28.193.255,Regtons CZ,https://regtons.com/en/ 185.29.8.0,185.29.8.255,DataClub,https://www.dataclub.biz/ @@ -2187,8 +2223,10 @@ 185.45.13.144,185.45.13.159,Cyberghost,http://www.cyberghostvpn.com/ 185.45.13.160,185.45.13.167,Cyberghost,http://www.cyberghostvpn.com/ 185.48.120.0,185.48.123.255,Amazon AWS,http://www.amazon.com/aws/ +185.58.193.0,185.58.193.255,Aruba Cloud,https://www.arubacloud.com/ 185.61.151.0,185.61.151.255,Yourserver Sweden,https://www.yourserver.se/ 185.62.190.0,185.62.191.255,BlazingFast,https://blazingfast.io/ +185.82.216.0,185.82.217.255,Sofia Data Center,http://sdc.bg/ 185.86.148.0,185.86.149.255,Yourserver Sweden,https://www.yourserver.se/ 185.86.150.0,185.86.150.127,Yourserver Sweden,https://www.yourserver.se/ 185.86.151.0,185.86.151.255,Yourserver Latvia,https://www.yourserver.se/ @@ -2212,10 +2250,17 @@ 185.108.84.0,185.108.85.255,Ardis Russia,https://ardis.ru/ 185.108.129.0,185.108.129.255,OneProvider,http://oneprovider.com/ 185.121.120.0,185.121.121.255,Trabia Network,https://www.trabia.com/ +185.125.168.0,185.125.169.255,TerraHost,https://terrahost.no/ +185.125.230.0,185.125.231.255,Offshore Servers,https://www.offshore-servers.com/ 185.137.16.0,185.137.19.255,Surfeasy,https://www.surfeasy.com/ 185.140.114.0,185.140.114.255,OneProvider,http://oneprovider.com/ +185.153.179.0,185.153.179.255,Nord VPN,https://nordvpn.com/ +185.156.173.32,185.156.173.63,Cyberghost,http://www.cyberghostvpn.com/ 185.186.76.0,185.186.79.255,OneProvider,http://oneprovider.com/ +185.212.168.0,185.212.171.255,M247 Dedicated Servers,https://m247.com/ +185.236.200.0,185.236.200.255,M247 Dedicated Servers,https://m247.com/ 186.227.162.128,186.227.162.191,Server Green,http://servergreen.com.br/ +186.227.192.0,186.227.207.255,HostDime Brazil,https://www.hostdime.com/ 186.251.128.0,186.251.139.255,ipglobe.net,https://www.ipglobe.net/ 187.0.192.0,187.0.223.255,alog,http://www.alog.com.br/ 187.33.0.0,187.33.31.255,alog,http://www.alog.com.br/ @@ -2249,6 +2294,7 @@ 188.241.112.0,188.241.119.255,Elvsoft,http://www.elvsoft.com/ 188.241.121.0,188.241.121.255,best-hosting.ro,http://best-hosting.ro/ 188.247.128.0,188.247.128.255,everhost,http://everhost.co/ +189.1.168.0,189.1.175.255,Maxihost,https://www.maxihost.com/ 189.113.160.0,189.113.175.255,hostrevenda.com,http://hostrevenda.com/ 190.4.88.0,190.4.91.255,Hosta Rica,http://hostarica.com/ 190.93.240.0,190.93.255.255,CloudFlare Inc,https://www.cloudflare.com/ @@ -2340,11 +2386,13 @@ 192.34.108.0,192.34.111.255,WoW Technologies,http://wowrack.com/ 192.40.56.0,192.40.59.255,Total Server Solutions,http://totalserversolutions.com/ 192.40.112.0,192.40.115.255,ihnetworks.net,http://ihnetworks.net/ +192.64.24.0,192.64.27.255,Micfo,https://www.micfo.com/ 192.64.80.0,192.64.87.255,InterServer.net,http://www.interserver.net/ 192.65.240.0,192.65.243.255,ionity,http://ionity.com/ 192.69.88.0,192.69.95.255,Volume Drive,http://volumedrive.com 192.69.192.0,192.69.223.255,WebNX Internet Services,http://webnx.com/ 192.69.236.0,192.69.239.255,eHostingUSA,http://ehostingusa.com/ +192.71.249.0,192.71.249.255,EDIS,https://www.edis.at/ 192.73.240.0,192.73.255.255,Host Virtual,http://www.vr.org/ 192.80.8.0,192.80.8.255,Packet Host,https://www.packet.net/ 192.81.128.0,192.81.135.255,Linode,http://www.linode.com/ @@ -2357,7 +2405,7 @@ 192.110.160.0,192.110.167.255,Input Output Flood LLC,http://ioflood.com/ 192.111.128.0,192.111.143.255,Total Server Solutions,http://totalserversolutions.com/ 192.119.64.0,192.119.127.255,hostwinds.com,http://www.hostwinds.com/ -192.119.144.0,192.119.159.255,avantehosting.net,https://avantehosting.net/ +192.119.160.0,192.119.175.255,madgenius.com,http://www.madgenius.com/ 192.124.170.0,192.124.219.255,demos,http://demos.ru/ 192.129.128.0,192.129.255.255,hostwinds.com,http://www.hostwinds.com/ 192.138.16.0,192.138.23.255,wiredtree,http://www.wiredtree.com/ @@ -2366,12 +2414,14 @@ 192.155.80.0,192.155.95.255,Linode,http://www.linode.com/ 192.155.192.0,192.155.255.255,SoftLayer,http://www.softlayer.com/ 192.157.48.0,192.157.63.255,servermania.com,http://www.servermania.com/ +192.160.102.0,192.160.102.255,Hextet Systems,https://hextet.net/ 192.161.48.0,192.161.63.255,QuadraNet,http://quadranet.com/ 192.161.160.0,192.161.191.255,QuadraNet,http://quadranet.com/ 192.162.19.0,192.162.19.255,galahost,http://galahost.net/ 192.162.24.0,192.162.27.255,sologigabit.com,http://www.sologigabit.com/en/Dedicated-Servers 192.162.102.0,192.162.102.255,ntx.ru,http://ntx.ru/ 192.162.136.0,192.162.139.255,infinitetech.eu,http://www.infinitetech.eu/ +192.162.240.0,192.162.247.255,Datacheap,https://datacheap.ru/ 192.169.80.0,192.169.95.255,Limestone Networks,http://www.limestonenetworks.com/ 192.177.0.0,192.177.255.255,EGIHosting.com,http://www.egihosting.com/ 192.184.32.0,192.184.63.255,Psychz Networks,http://psychz.net/ @@ -2382,6 +2432,7 @@ 192.198.96.0,192.198.127.255,servermania.com,http://www.servermania.com/ 192.198.192.0,192.198.207.255,Secure Servers,http://www.securedservers.com/ 192.199.240.0,192.199.255.255,wehostwebsites.com,http://wehostwebsites.com/ +192.200.16.0,192.200.31.255,Micfo,https://www.micfo.com/ 192.200.96.0,192.200.127.255,Gorilla Servers,http://gorillaservers.com/ 192.208.176.0,192.208.191.255,Continuum Data Centers,http://www.continuumdatacenters.com/ 192.210.48.0,192.210.63.255,Psychz Networks,http://psychz.net/ @@ -2525,6 +2576,7 @@ 195.144.4.0,195.144.4.255,PatrikWeb,http://patrikweb.net/ 195.162.24.0,195.162.25.255,kylos.pl,http://www.kylos.pl/ 195.162.68.0,195.162.69.255,hostkey,http://www.hostkey.ru/ +195.181.168.0,195.181.169.255,Data Camp Limited,https://datacamp.co.uk/ 195.189.124.0,195.189.127.255,trueserver.nl,http://trueserver.nl/ 195.189.254.0,195.189.255.255,availo.no,http://www.availo.no/ 195.190.3.0,195.190.3.255,euro-web.com,http://fr.euro-web.com/ @@ -2551,6 +2603,7 @@ 195.242.212.0,195.242.215.255,OpenHosting UK Internet Solutions,http://openhosting.co.uk/ 195.245.124.0,195.245.127.255,Akamai,http://akamai.com/ 195.248.78.0,195.248.78.255,availo.no,http://www.availo.no/ +196.52.0.0,196.55.255.255,Leaseweb,https://www.leaseweb.com/ 198.7.56.0,198.7.63.255,Leaseweb,http://www.leaseweb.com/ 198.8.80.0,198.8.95.255,colo@,http://coloat.com/ 198.12.12.0,198.12.15.255,awknet,http://awknet.com/ @@ -2571,8 +2624,9 @@ 198.50.24.0,198.50.31.255,Continuum Data Centers,http://www.continuumdatacenters.com/ 198.50.96.0,198.50.127.255,iWeb Technologies Inc.,http://iweb.com/ 198.50.128.0,198.50.255.255,OVH,http://www.ovh.co.uk/ +198.52.32.0,198.52.39.255,Micfo,https://www.micfo.com/ 198.52.96.0,198.52.127.255,multacom.com,http://multacom.com/ -198.52.128.0,198.52.255.255,avantehosting.net,https://avantehosting.net/ +198.52.192.0,198.52.255.255,avantehosting.net,https://avantehosting.net/ 198.55.96.0,198.55.127.255,QuadraNet,http://quadranet.com/ 198.58.96.0,198.58.127.255,Linode,http://www.linode.com/ 198.61.128.0,198.61.255.255,Rackspace,http://www.rackspace.com/ @@ -2621,11 +2675,13 @@ 199.16.128.0,199.16.131.255,PlanetHoster,http://www.planethoster.net/ 199.19.72.0,199.19.79.255,fiberhub.com,http://www.fiberhub.com/ 199.19.80.0,199.19.83.255,ionity,http://ionity.com/ +199.19.92.0,199.19.95.255,Yesup Ecommerce Solutions,http://www.yesup.com/ 199.19.104.0,199.19.111.255,Volume Drive,http://volumedrive.com 199.19.208.0,199.19.211.255,Connectria,http://www.connectria.com/ 199.19.212.0,199.19.215.255,vexxhost web hosting,http://vexxhost.com/ 199.19.224.0,199.19.227.255,buyvm.net,http://buyvm.net/?from=frantech 199.21.112.0,199.21.115.255,ColoCrossing,http://www.colocrossing.com/ +199.21.148.0,199.21.151.255,Yesup Ecommerce Solutions,http://www.yesup.com/ 199.26.84.0,199.26.87.255,dfw-datacenter.com,http://dfw-datacenter.com/ 199.27.128.0,199.27.135.255,CloudFlare Inc,https://www.cloudflare.com/ 199.30.48.0,199.30.55.255,Input Output Flood LLC,http://ioflood.com/ @@ -2643,6 +2699,7 @@ 199.58.196.0,199.58.199.255,Bluehost.com,http://www.bluehost.com/ 199.59.56.0,199.59.63.255,hostwinds.com,http://www.hostwinds.com/ 199.59.244.0,199.59.247.255,PlanetHoster,http://www.planethoster.net/ +199.66.88.0,199.66.95.255,Yesup Ecommerce Solutions,http://www.yesup.com/ 199.68.176.0,199.68.183.255,datacenterscanada.com,http://www.datacenterscanada.com/ 199.71.212.0,199.71.215.255,Psychz Networks,http://psychz.net/ 199.71.232.0,199.71.235.255,netrouting.com,http://www.netrouting.com/ @@ -2677,6 +2734,7 @@ 199.167.40.0,199.167.47.255,ServInt,http://www.servint.net/ 199.167.72.0,199.167.79.255,BlackMesh,http://www.blackmesh.com/ 199.167.132.0,199.167.135.255,Input Output Flood LLC,http://ioflood.com/ +199.167.136.0,199.167.139.255,Yesup Ecommerce Solutions,http://www.yesup.com/ 199.167.144.0,199.167.151.255,Hivelocity Hosting,http://www.hivelocity.net/ 199.167.200.0,199.167.203.255,PrivateSystems.net,http://privatesystems.net/ 199.168.96.0,199.168.103.255,Data Shack,http://datashack.net/ @@ -2706,7 +2764,7 @@ 199.193.248.0,199.193.255.255,Enzu Inc,https://www.enzu.com/ 199.195.116.0,199.195.119.255,A2 Hosting,http://www.a2hosting.com/ 199.195.128.0,199.195.131.255,fiberhub.com,http://www.fiberhub.com/ -199.195.156.0,199.195.159.255,avantehosting.net,https://avantehosting.net/ +199.195.156.0,199.195.159.255,softsyshosting.com,https://www.softsyshosting.com 199.195.192.0,199.195.199.255,Midphase,http://www.midphase.com/ 199.195.212.0,199.195.215.255,Forta Trust,http://www.fortatrust.com/ 199.204.44.0,199.204.47.255,vexxhost web hosting,http://vexxhost.com/ @@ -2738,6 +2796,7 @@ 200.219.192.0,200.219.255.255,alog,http://www.alog.com.br/ 201.20.0.0,201.20.31.255,alog,http://www.alog.com.br/ 201.49.208.0,201.49.223.255,alog,http://www.alog.com.br/ +201.131.124.0,201.131.127.255,HostDime Mexico,https://www.hostdime.com/ 201.182.0.0,201.182.255.255,panamaserver.com,http://panamaserver.com/ 201.190.228.0,201.190.231.255,panamaserver.com,http://panamaserver.com/ 202.9.36.0,202.9.39.255,Gigabit Hosting Sdn Bhd,http://thegigabit.com/ @@ -2745,6 +2804,7 @@ 202.60.64.0,202.60.95.255,Dedicated Servers,http://dedicatedservers.net.au/ 202.65.128.0,202.65.159.255,CtrlS,http://www.ctrls.in/ 202.74.64.0,202.74.71.255,Conetix,http://conetix.com.au/ +202.130.32.0,202.130.33.255,Servers Australia,https://www.serversaustralia.com.au/ 202.131.88.0,202.131.91.255,Dedicated Servers,http://dedicatedservers.net.au/ 202.131.94.0,202.131.94.255,Dedicated Servers,http://dedicatedservers.net.au/ 202.157.128.0,202.157.191.255,webvisions.com,http://webvisions.com/ @@ -2815,6 +2875,7 @@ 206.130.96.0,206.130.127.255,westhost,http://www.westhost.com/ 206.183.104.0,206.183.111.255,Web Werks,http://www.web-werks.com/ 206.188.0.0,206.188.31.255,Datapipe,http://www.datapipe.com/ +206.189.0.0,206.189.255.255,DigitalOcean USA,https://www.digitalocean.com/ 206.190.128.0,206.190.159.255,UK2 Group,http://www.uk2.net/ 206.196.0.0,206.196.31.255,Peak10,http://www.peak10.com/ 206.212.240.0,206.212.255.255,ColoStore,http://colostore.com/ @@ -2827,6 +2888,7 @@ 206.223.120.0,206.223.121.255,Limelight Networks Inc,http://www.limelight.com/ 206.225.80.0,206.225.87.255,Codero,http://www.codero.com/ 206.225.92.0,206.225.95.255,Codero,http://www.codero.com/ +206.225.132.0,206.225.135.255,Micfo,https://www.micfo.com/ 206.251.224.0,206.251.255.255,American Internet Services,http://americanis.net/ 206.252.128.0,206.252.159.255,LogicWorks,http://www.logicworks.net/ 207.7.80.0,207.7.95.255,PrivateSystems.net,http://privatesystems.net/ @@ -2859,6 +2921,7 @@ 207.154.192.0,207.154.255.255,DigitalOcean USA,https://www.digitalocean.com/ 207.158.0.0,207.158.63.255,American Internet Services,http://americanis.net/ 207.159.128.0,207.159.159.255,PEER 1,http://www.peer1.com/ +207.189.0.0,207.189.31.255,Hyper VPN,http://hypervpn.com/ 207.198.64.0,207.198.127.255,PEER 1,http://www.peer1.com/ 207.204.224.0,207.204.255.255,Reliable Hosting,http://reliablehosting.com/ 207.210.192.0,207.210.255.255,colo4dallas.com,http://colo4dallas.com/ @@ -3057,6 +3120,7 @@ 212.45.104.0,212.45.111.255,Unbelievable Machine,http://www.unbelievable-machine.com/ 212.47.224.0,212.47.255.255,Iliad Datacenter,http://iliad-entreprises.fr/ 212.53.64.0,212.53.95.255,NetBenefit,http://www.netbenefit.com/ +212.57.38.0,212.57.39.255,Webglobe Cloud,https://wy.sk/ 212.64.128.0,212.64.159.255,Rackspace,http://www.rackspace.com/ 212.67.192.0,212.67.223.255,Webfusion,http://www.webfusion.com/ 212.68.46.0,212.68.46.255,Sadecehosting Turkey,https://www.sadecehosting.com/en/ @@ -3181,6 +3245,7 @@ 216.151.208.0,216.151.223.255,ServerBeach Dedicated Servers,http://www.serverbeach.com/ 216.152.128.0,216.152.143.255,PEER 1,http://www.peer1.com/ 216.157.0.0,216.157.111.255,PEER 1,http://www.peer1.com/ +216.162.40.0,216.162.47.255,Micfo,https://www.micfo.com/ 216.172.128.0,216.172.159.255,EGIHosting.com,http://www.egihosting.com/ 216.172.160.0,216.172.191.255,WebsiteWelcome.com,http://www.websitewelcome.com/ 216.176.176.0,216.176.191.255,WoW Technologies,http://wowrack.com/ @@ -3195,7 +3260,6 @@ 216.187.64.0,216.187.127.255,PEER 1,http://www.peer1.com/ 216.189.144.0,216.189.159.255,Host US,http://hostus.us/ 216.211.128.0,216.211.143.255,Adhost,http://www.adhost.com/ -216.213.0.0,216.213.191.255,thorn.net,http://www.thorn.net/ 216.218.128.0,216.218.255.255,Hurricane Electic,http://www.he.net/ 216.219.80.0,216.219.95.255,Host Department LLC,http://www.hostdepartment.com/ 216.221.160.0,216.221.191.255,C I Host,http://www.cihost.com/ @@ -3254,6 +3318,7 @@ 217.148.178.128,217.148.178.191,serverboost.nl,http://serverboost.nl/ 217.150.240.0,217.150.255.255,nine.ch,http://nine.ch/ 217.160.0.0,217.160.255.255,1&1 Internet,http://www.1and1.com/ +217.170.197.0,217.170.197.255,ServeTheWorld,https://servetheworld.net/ 217.172.128.0,217.172.143.255,host-it.co.uk,http://www.host-it.co.uk/ 217.172.160.0,217.172.191.255,plusserver.de,http://plusserver.de/ 217.174.240.0,217.174.255.255,Fasthosts Internet Ltd,http://www.fasthosts.co.uk/ diff --git a/config/formats.js b/config/formats.js index dfaf37ee50f30..b7721bf5c274c 100644 --- a/config/formats.js +++ b/config/formats.js @@ -3,16 +3,21 @@ // Note: This is the list of formats // The rules that formats use are stored in data/rulesets.js -exports.Formats = [ +/**@type {(FormatsData | {section: string, column?: number})[]} */ +let Formats = [ - // SM Singles + // US/UM Singles /////////////////////////////////////////////////////////////////// { - section: "SM Singles", + section: "US/UM Singles", }, { name: "[Gen 7] Random Battle", - desc: ["Randomized teams of level-balanced Pokémon with sets that are generated to be competitively viable."], + 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', @@ -29,124 +34,187 @@ exports.Formats = [ }, { name: "[Gen 7] OU", - desc: [ - "• OU Metagame Discussion", - "• OU Banlist", - "• OU Viability Rankings", - "• OU Sample Teams", + threads: [ + `• OU Metagame Discussion`, + `• OU Viability Rankings`, + `• OU Sample Teams`, ], mod: 'gen7', ruleset: ['Pokemon', 'Standard', 'Team Preview'], - banlist: ['Uber', 'Power Construct', 'Shadow Tag', 'Baton Pass'], + banlist: ['Uber', 'Arena Trap', 'Power Construct', 'Shadow Tag', 'Baton Pass'], }, { name: "[Gen 7] Ubers", - desc: [ - "• Ubers Metagame Discussion", - "• Ubers Viability Rankings", - "• Ubers Sample Teams", + threads: [ + `• Ubers Metagame Discussion`, + `• Ubers Viability Rankings`, + `• Ubers Sample Teams`, ], mod: 'gen7', - ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Team Preview', 'Mega Rayquaza Clause'], + ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Mega Rayquaza Clause'], banlist: ['Baton Pass'], }, { name: "[Gen 7] UU", - desc: [ - "• UU Metagame Discussion", - "• UU Viability Rankings", - "• UU Sample Teams", + threads: [ + `• UU Metagame Discussion`, + `• UU Viability Rankings`, + `• UU Sample Teams`, ], mod: 'gen7', - searchShow: false, ruleset: ['[Gen 7] OU'], - banlist: ['OU', 'BL', 'Drizzle', 'Power Construct', 'Mewnium Z'], - }, - { - name: "[Gen 7] UU (suspect test)", - desc: ["• UU Suspect Test"], - - mod: 'gen7', - challengeShow: false, - ruleset: ['[Gen 7] UU'], - banlist: ['Xurkitree'], + banlist: ['OU', 'UUBL', 'Drizzle', 'Drought', 'Kommonium Z', 'Mewnium Z'], }, { name: "[Gen 7] RU", - desc: [ - "• RU Metagame Discussion", - "• RU Viability Rankings", - "• RU Sample Teams", + threads: [ + `• RU Metagame Discussion`, + `• RU Viability Rankings`, + `• RU Sample Teams`, ], mod: 'gen7', ruleset: ['[Gen 7] UU'], - banlist: ['UU', 'BL2'], + banlist: ['UU', 'RUBL', 'Aurora Veil'], + unbanlist: ['Drought'], + onBegin() { + if (this.rated && this.format === 'gen7ru') this.add('html', `
    RU is currently suspecting Zygarde-10%! For information on how to participate check out the suspect thread.
    `); + }, }, { name: "[Gen 7] NU", - desc: [ - "• NU Metagame Discussion", - "• NU Viability Rankings", - "• NU Sample Teams", + threads: [ + `• NU Metagame Discussion`, + `• NU Viability Rankings`, + `• NU Sample Teams`, ], mod: 'gen7', ruleset: ['[Gen 7] RU'], - banlist: ['RU', 'BL3', 'Drought'], + banlist: ['RU', 'NUBL', 'Drought'], }, { - name: "[Gen 7] PU (beta)", - desc: ["• PU Metagame Discussion"], + name: "[Gen 7] PU", + threads: [ + `• PU Metagame Discussion`, + `• PU Viability Rankings`, + `• PU Sample Teams`, + ], mod: 'gen7', ruleset: ['[Gen 7] NU'], - banlist: ['NU', 'BL4'], + banlist: ['NU', 'PUBL'], + unbanlist: ['Houndoom'], + onBegin() { + if (this.rated && this.format === 'gen7pu') this.add('html', `
    PU is currently suspecting Houndoom! For information on how to participate check out the suspect thread.
    `); + }, }, { name: "[Gen 7] LC", - desc: [ - "• LC Metagame Discussion", - "• LC Banlist", - "• LC Viability Rankings", - "• LC Sample Teams", + threads: [ + `• LC Metagame Discussion`, + `• LC Banlist`, + `• LC Viability Rankings`, + `• LC Sample Teams`, ], mod: 'gen7', maxLevel: 5, ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Team Preview', 'Little Cup'], - banlist: ['Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix-Base', 'Yanma', 'Eevium Z', 'Dragon Rage', 'Sonic Boom'], + banlist: [ + 'Aipom', 'Cutiefly', 'Drifloon', 'Gligar', 'Gothita', 'Meditite', 'Misdreavus', 'Murkrow', 'Porygon', + 'Scyther', 'Sneasel', 'Swirlix', 'Tangela', 'Vulpix-Base', 'Wingull', 'Yanma', + 'Eevium Z', 'Baton Pass', 'Dragon Rage', 'Sonic Boom', + ], + }, + { + name: "[Gen 7] Monotype", + desc: `All the Pokémon on a team must share a type.`, + threads: [ + `• Monotype Metagame Discussion`, + `• Monotype Viability Rankings`, + `• Monotype Sample Teams`, + ], + + mod: 'gen7', + ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Same Type Clause', 'Team Preview'], + banlist: [ + 'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', 'Giratina', 'Groudon', + 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kartana', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Lunala', 'Magearna', + 'Marshadow', 'Mawile-Mega', 'Medicham-Mega', 'Metagross-Mega', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', + 'Pheromosa', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde', + 'Battle Bond', 'Shadow Tag', 'Damp Rock', 'Smooth Rock', 'Terrain Extender', 'Baton Pass', + ], }, { name: "[Gen 7] Anything Goes", - desc: [ - "• Anything Goes", - "• AG Resources", - "• AG Analyses", + threads: [ + `• Anything Goes Metagame Discussion`, + `• Anything Goes Viability Rankings`, + `• Anything Goes Sample Teams`, ], mod: 'gen7', ruleset: ['Pokemon', 'Endless Battle Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Illegal', 'Unreleased'], }, + { + name: "[Gen 7] 1v1", + desc: `Bring three Pokémon to Team Preview and choose one to battle.`, + threads: [ + `• 1v1 Metagame Discussion`, + `• 1v1 Viability Rankings`, + `• 1v1 Sample Teams`, + ], + + mod: 'gen7', + teamLength: { + validate: [1, 3], + battle: 1, + }, + allowMultisearch: true, + ruleset: ['Pokemon', 'Species Clause', 'Nickname Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Swagger Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], + banlist: [ + 'Illegal', 'Unreleased', 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', + 'Groudon', 'Ho-Oh', 'Jirachi', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', + 'Mimikyu', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', + 'Snorlax', 'Solgaleo', 'Tapu Koko', 'Xerneas', 'Yveltal', 'Zekrom', 'Focus Sash', 'Perish Song', 'Detect + Fightinium Z', + ], + }, + { + name: "[Gen 7] ZU", + desc: `The unofficial usage-based tier below PU.`, + threads: [ + `• ZU Metagame Discussion`, + `• ZU Viability Rankings`, + `• ZU Sample Teams`, + ], + + mod: 'gen7', + ruleset: ['[Gen 7] PU'], + banlist: [ + 'Houndoom', 'PU', 'Carracosta', 'Crabominable', 'Exeggutor-Base', 'Gorebyss', 'Jynx', 'Musharna', 'Raticate-Alola', + 'Raticate-Alola-Totem', 'Throh', 'Turtonator', 'Type: Null', 'Ursaring', 'Victreebel', 'Zangoose', + ], + }, { name: "[Gen 7] CAP", - desc: [ - "• CAP Metagame Discussion", - "• CAP Viability Rankings", - "• CAP Sample Teams", + threads: [ + `• CAP Metagame Discussion`, + `• CAP Viability Rankings`, + `• CAP Sample Teams`, ], mod: 'gen7', ruleset: ['[Gen 7] OU', 'Allow CAP'], - banlist: ['Tomohawk + Earth Power', 'Tomohawk + Reflect'], + banlist: ['Crucibelle + Head Smash', 'Crucibelle + Low Kick', 'Tomohawk + Earth Power', 'Tomohawk + Reflect'], }, { name: "[Gen 7] CAP LC", - desc: ["• CAP LC"], + threads: [`• CAP LC`], mod: 'gen7', searchShow: false, @@ -155,11 +223,11 @@ exports.Formats = [ }, { name: "[Gen 7] Battle Spot Singles", - desc: [ - "• Introduction to Battle Spot Singles", - "• Battle Spot Singles Viability Ranking", - "• Battle Spot Singles Roles Compendium", - "• Battle Spot Singles Sample Teams", + threads: [ + `• Introduction to Battle Spot Singles`, + `• Battle Spot Singles Viability Ranking`, + `• Battle Spot Singles Roles Compendium`, + `• Battle Spot Singles Sample Teams`, ], mod: 'gen7', @@ -168,34 +236,26 @@ exports.Formats = [ validate: [3, 6], battle: 3, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], requirePentagon: true, }, { - name: "[Gen 7] Battle Spot Special 5", - desc: ["• Battle Spot Special"], + name: "[Gen 7] Battle Spot Special 14", + threads: [`• Battle Spot Special 14`], mod: 'gen7', - maxForcedLevel: 50, + forcedLevel: 50, teamLength: { validate: [3, 6], battle: 3, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview', 'Inverse Mod'], - requirePentagon: true, - }, - { - name: "[Gen 7] 2017 No Holds Barred", - desc: ["• 2017 No Holds Barred"], - - mod: 'gen7', - forcedLevel: 100, - teamLength: { - validate: [3, 6], - battle: 3, + ruleset: ['Pokemon', 'Standard GBU'], + onValidateSet(set, format) { + if (set.item) { + let item = this.getItem(set.item); + if (!item.isBerry) return [`${set.name || set.species} has ${item.name}, which is banned in ${format.name}.`]; + } }, - ruleset: ['Pokemon', 'Nickname Clause', 'Team Preview', 'Cancel Mod'], - banlist: ['Illegal', 'Unreleased', 'Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Arceus', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Solgaleo', 'Lunala'], }, { name: "[Gen 7] Custom Game", @@ -205,19 +265,25 @@ exports.Formats = [ canUseRandomTeam: true, debug: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, + teamLength: { + validate: [1, 24], + battle: 24, + }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, - // SM Doubles + // US/UM Doubles /////////////////////////////////////////////////////////////////// { - section: "SM Doubles", + section: "US/UM Doubles", }, { name: "[Gen 7] Random Doubles Battle", + threads: [`• Sets and Suggestions`], mod: 'gen7', gameType: 'doubles', @@ -226,19 +292,16 @@ exports.Formats = [ }, { name: "[Gen 7] Doubles OU", - desc: [ - "• Doubles OU Metagame Discussion", - "• Doubles OU Viability Rankings", - "• Doubles OU Sample Teams", + threads: [ + `• Doubles OU Metagame Discussion`, + `• Doubles OU Viability Rankings`, + `• Doubles OU Sample Teams`, ], mod: 'gen7', gameType: 'doubles', ruleset: ['Pokemon', 'Standard Doubles', 'Swagger Clause', 'Team Preview'], - banlist: ['Arceus', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Jirachi', 'Kyogre', 'Kyurem-White', - 'Lugia', 'Lunala', 'Magearna', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom', - 'Power Construct', 'Eevium Z', 'Kangaskhanite', 'Dark Void', 'Gravity ++ Grass Whistle', 'Gravity ++ Hypnosis', 'Gravity ++ Lovely Kiss', 'Gravity ++ Sing', 'Gravity ++ Sleep Powder', - ], + banlist: ['DUber', 'Power Construct', 'Eevium Z', 'Dark Void', 'Gravity ++ Grass Whistle', 'Gravity ++ Hypnosis', 'Gravity ++ Lovely Kiss', 'Gravity ++ Sing', 'Gravity ++ Sleep Powder'], }, { name: "[Gen 7] Doubles Ubers", @@ -246,31 +309,112 @@ exports.Formats = [ mod: 'gen7', gameType: 'doubles', ruleset: ['Pokemon', 'Standard Doubles', 'Team Preview'], - banlist: ['Illegal', 'Unreleased', 'Dark Void'], + banlist: ['Dark Void'], }, { name: "[Gen 7] Doubles UU", - desc: ["• Doubles UU Metagame Discussion"], + threads: [`• Doubles UU Metagame Discussion`], mod: 'gen7', gameType: 'doubles', ruleset: ['[Gen 7] Doubles OU'], - banlist: [ - 'Aegislash', 'Amoonguss', 'Arcanine', 'Celesteela', 'Cresselia', 'Deoxys-Attack', 'Diancie', 'Excadrill', 'Ferrothorn', 'Garchomp', - 'Gastrodon', 'Genesect', 'Gigalith', 'Heatran', 'Hoopa-Unbound', 'Jirachi', 'Kartana', 'Kingdra', 'Kyurem-Black', 'Landorus-Therian', - 'Marowak-Alola', 'Marshadow', 'Milotic', 'Mimikyu', 'Muk-Alola', 'Ninetales-Alola', 'Oranguru', 'Pelipper', 'Pheromosa', 'Politoed', - 'Porygon2', 'Rotom-Wash', 'Scrafty', 'Snorlax', 'Suicune', 'Sylveon', 'Tapu Bulu', 'Tapu Fini', 'Tapu Koko', 'Tapu Lele', - 'Terrakion', 'Torkoal', 'Tyranitar', 'Venusaur', 'Volcanion', 'Volcarona', 'Weavile', 'Whimsicott', 'Zapdos', 'Zygarde-Base', - 'Battle Bond', 'Aggronite', 'Altarianite', 'Ampharosite', 'Banettite', 'Blazikenite', 'Cameruptite', 'Charizardite Y', 'Diancite', 'Galladite', 'Gardevoirite', - 'Gengarite', 'Gyaradosite', 'Kangaskhanite', 'Latiasite', 'Latiosite', 'Lopunnite', 'Mawilite', 'Metagrossite', 'Salamencite', 'Sceptilite', 'Swampertite', 'Tyranitarite', + banlist: ['DOU', 'DBL'], + }, + { + name: "[Gen 7] VGC 2019 Sun Series", + + mod: 'gen7', + gameType: 'doubles', + searchShow: false, + forcedLevel: 50, + teamLength: { + validate: [4, 6], + battle: 4, + }, + timer: {starting: 7 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false}, + ruleset: ['Pokemon', 'Minimal GBU'], + banlist: ['Unown', 'Dragon Ascent', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'], + requirePlus: true, + onValidateTeam(team) { + const legends = ['Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Zygarde', 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma']; + let n = 0; + let problems = []; + for (const set of team) { + const baseSpecies = this.getTemplate(set.species).baseSpecies; + if (legends.includes(baseSpecies)) { + n++; + if (n === 3) problems.push(`You can only use up to two legendary Pok\u00E9mon.`); + } + const item = this.getItem(set.item); + if (item.zMove || item.megaStone || ['redorb', 'blueorb'].includes(item.id)) problems.push(`${set.name || set.species}'s item ${item.name} is banned.`); + } + return problems; + }, + }, + { + name: "[Gen 7] VGC 2019 Moon Series", + + mod: 'gen7', + gameType: 'doubles', + forcedLevel: 50, + teamLength: { + validate: [4, 6], + battle: 4, + }, + timer: {starting: 7 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false}, + ruleset: ['Pokemon', 'Minimal GBU'], + banlist: ['Unown', 'Dragon Ascent'], + requirePlus: true, + onValidateTeam(team) { + const legends = ['Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Zygarde', 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma']; + let n = 0; + let problems = []; + for (const set of team) { + const baseSpecies = this.getTemplate(set.species).baseSpecies; + if (legends.includes(baseSpecies)) { + n++; + if (n === 3) problems.push(`You can only use up to two legendary Pok\u00E9mon.`); + } + const item = this.getItem(set.item); + if (item.megaStone || ['redorb', 'blueorb', 'ultranecroziumz'].includes(item.id)) problems.push(`${set.name || set.species}'s item ${item.name} is banned.`); + } + return problems; + }, + }, + { + name: "[Gen 7] VGC 2019 Ultra Series", + threads: [ + `• VGC 2019 Discussion`, + `• VGC 2019 Viability Rankings`, ], + + mod: 'gen7', + gameType: 'doubles', + forcedLevel: 50, + teamLength: { + validate: [4, 6], + battle: 4, + }, + timer: {starting: 7 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false}, + ruleset: ['Pokemon', 'Minimal GBU'], + banlist: ['Unown'], + requirePlus: true, + onValidateTeam(team) { + const legends = ['Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Zygarde', 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma']; + let n = 0; + for (const set of team) { + const baseSpecies = this.getTemplate(set.species).baseSpecies; + if (legends.includes(baseSpecies)) n++; + if (n > 2) return [`You can only use up to two legendary Pok\u00E9mon.`]; + } + }, }, { - name: "[Gen 7] VGC 2017", - desc: [ - "• VGC 2017 Discussion", - "• VGC 2017 Viability Rankings", - "• VGC 2017 Sample Teams", + name: "[Gen 7] VGC 2018", + threads: [ + `• VGC 2018 Discussion`, + `• VGC 2018 Viability Rankings`, + `• VGC 2018 Sample Teams`, ], mod: 'gen7', @@ -280,17 +424,41 @@ exports.Formats = [ validate: [4, 6], battle: 4, }, - timer: {starting: 15 * 60 - 10, perTurn: 10, maxPerTurn: 60, maxFirstTurn: 90, timeoutAutoChoose: true}, + timer: {starting: 5 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false}, + ruleset: ['Pokemon', 'Standard GBU'], + banlist: ['Unown', 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry'], + requirePlus: true, + }, + { + name: "[Gen 7] VGC 2017", + threads: [ + `• VGC 2017 Discussion`, + `• VGC 2017 Viability Rankings`, + `• VGC 2017 Sample Teams`, + ], + + mod: 'vgc17', + gameType: 'doubles', + searchShow: false, + forcedLevel: 50, + teamLength: { + validate: [4, 6], + battle: 4, + }, + timer: {starting: 15 * 60, addPerTurn: 0, maxPerTurn: 55, maxFirstTurn: 90, grace: 90, timeoutAutoChoose: true, dcTimerBank: false}, ruleset: ['Pokemon', 'Species Clause', 'Nickname Clause', 'Item Clause', 'Team Preview', 'Cancel Mod', 'Alola Pokedex'], - banlist: ['Illegal', 'Unreleased', 'Solgaleo', 'Lunala', 'Necrozma', 'Magearna', 'Marshadow', 'Zygarde', 'Mega'], + banlist: [ + 'Illegal', 'Unreleased', 'Solgaleo', 'Lunala', 'Necrozma', 'Magearna', 'Marshadow', 'Zygarde', 'Mega', + 'Custap Berry', 'Enigma Berry', 'Jaboca Berry', 'Micle Berry', 'Rowap Berry', + ], requirePlus: true, }, { name: "[Gen 7] Battle Spot Doubles", - desc: [ - "• Battle Spot Doubles Discussion", - "• Battle Spot Doubles Viability Rankings", - "• Battle Spot Doubles Sample Teams", + threads: [ + `• Battle Spot Doubles Discussion`, + `• Battle Spot Doubles Viability Rankings`, + `• Battle Spot Doubles Sample Teams`, ], mod: 'gen7', @@ -300,9 +468,75 @@ exports.Formats = [ validate: [4, 6], battle: 4, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], requirePentagon: true, }, + { + name: "[Gen 7] 2v2 Doubles", + desc: `Double battle where you bring four Pokémon to Team Preview and choose only two.`, + threads: [ + `• 2v2 Doubles`, + ], + + mod: 'gen7', + gameType: 'doubles', + searchShow: false, + teamLength: { + validate: [2, 4], + battle: 2, + }, + ruleset: ['Pokemon', 'Standard Doubles', 'Accuracy Moves Clause', 'Swagger Clause', 'Z-Move Clause', 'Sleep Clause Mod', 'Team Preview'], + banlist: [ + 'Arceus', 'Dialga', 'Gengar-Mega', 'Giratina', 'Groudon', 'Ho-Oh', 'Jirachi', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', + 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', 'Palkia', + 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Snorlax', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', + 'Power Construct', 'Eevium Z', 'Focus Sash', 'Dark Void', 'Final Gambit', 'Perish Song', + 'Gravity ++ Grass Whistle', 'Gravity ++ Hypnosis', 'Gravity ++ Lovely Kiss', 'Gravity ++ Sing', 'Gravity ++ Sleep Powder', + ], + }, + { + name: '[Gen 7] Metronome Battle', + threads: [ + `• Metronome Battle`, + ], + + mod: 'gen7', + gameType: 'doubles', + allowMultisearch: true, + teamLength: { + validate: [2, 2], + battle: 2, + }, + ruleset: ['HP Percentage Mod', 'Cancel Mod'], + banlist: [ + 'Aegislash', 'Doublade', 'Honedge', 'Kitsunoh', 'Magearna', 'Pokestar Spirit', 'Battle Bond', 'Cheek Pouch', 'Cursed Body', 'Desolate Land', + 'Dry Skin', 'Fluffy', 'Fur Coat', 'Grassy Surge', 'Huge Power', 'Ice Body', 'Iron Barbs', 'Moody', 'Parental Bond', 'Poison Heal', 'Power Construct', + 'Pressure', 'Primordial Sea', 'Protean', 'Pure Power', 'Rain Dish', 'Rough Skin', 'Sand Stream', 'Schooling', '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', 'Mawilite', 'Medichamite', 'Normalium Z', + 'Oran Berry', 'Rocky Helmet', 'Shell Bell', 'Sitrus Berry', 'Wiki Berry', 'Harvest + Rowap Berry', 'Harvest + Jaboca Berry', 'Shedinja + Sturdy', + ], + onValidateSet(set) { + let template = this.getTemplate(set.species); + let bst = 0; + for (let stat in template.baseStats) { + // @ts-ignore + bst += template.baseStats[stat]; + } + if (bst > 625) return [`${template.species} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`]; + let item = this.getItem(set.item); + if (set.item && item.megaStone) { + let bstMega = 0; + let megaTemplate = this.getTemplate(item.megaStone); + for (let stat in megaTemplate.baseStats) { + // @ts-ignore + bstMega += megaTemplate.baseStats[stat]; + } + if (template.baseSpecies === item.megaEvolves && bstMega > 625) return [`${set.name || set.species}'s item ${item.name} is banned.`, `(Pok\u00e9mon with a BST higher than 625 are banned)`]; + } + if (set.moves.length !== 1 || this.getMove(set.moves[0]).id !== 'metronome') return [`${set.name || set.species} has illegal moves.`, `(Pok\u00e9mon can only have one Metronome in their moveset)`]; + }, + }, { name: "[Gen 7] Doubles Custom Game", @@ -311,8 +545,13 @@ exports.Formats = [ searchShow: false, canUseRandomTeam: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, debug: true, + teamLength: { + validate: [2, 24], + battle: 24, + }, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, @@ -325,32 +564,250 @@ exports.Formats = [ column: 2, }, { - name: "[Gen 7] 2v2 Doubles", - desc: [ - "Double battle where you bring four Pokémon to Team Preview and choose only two.", - "• 2v2 Doubles", + name: "[Gen 7] Megamons", + desc: `Mega Evolutions can be used without Mega Stones, as if they were normal Pokémon.`, + threads: [ + `• Megamons`, ], mod: 'gen7', - gameType: 'doubles', - teamLength: { - validate: [2, 4], - battle: 2, + ruleset: ['Species Clause', 'Nickname Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Swagger Clause', 'Mega Rayquaza Clause', 'Sleep Clause Mod', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], + banlist: ['Unreleased', 'Illegal', 'Baton Pass'], + onChangeSet(set, format) { + let item = this.getItem(set.item); + let template = this.getTemplate(set.species); + let problems = []; + let totalEV = 0; + let allowCAP = !!(format && this.getRuleTable(format).has('allowcap')); + + if (set.species === set.name) delete set.name; + if (template.gen > this.gen) { + problems.push(set.species + ' does not exist in gen ' + this.gen + '.'); + } + if (template.gen && template.gen !== this.gen && template.tier === 'Illegal') { + problems.push(set.species + ' does not exist outside of gen ' + template.gen + '.'); + } + /**@type {Ability} */ + // @ts-ignore + let ability = {}; + if (set.ability) { + ability = this.getAbility(set.ability); + if (ability.gen > this.gen) { + problems.push(ability.name + ' does not exist in gen ' + this.gen + '.'); + } + } + if (set.moves) { + for (const moveid of set.moves) { + let move = this.getMove(moveid); + if (move.gen > this.gen) { + problems.push(move.name + ' does not exist in gen ' + this.gen + '.'); + } else if (!allowCAP && move.isNonstandard) { + problems.push(move.name + ' does not exist.'); + } + } + } + if (item.gen > this.gen) { + problems.push(item.name + ' does not exist in gen ' + this.gen + '.'); + } + if (set.moves && set.moves.length > 4) { + problems.push((set.name || set.species) + ' has more than four moves.'); + } + if (set.level && set.level > 100) { + problems.push((set.name || set.species) + ' is higher than level 100.'); + } + + if (!allowCAP || !template.tier.startsWith('CAP')) { + if (template.isNonstandard && template.num > -5000) { + problems.push(set.species + ' does not exist.'); + } + } + + if (!allowCAP && ability.isNonstandard) { + problems.push(ability.name + ' does not exist.'); + } + + if (item.isNonstandard) { + if (item.isNonstandard === 'gen2') { + problems.push(item.name + ' does not exist outside of gen 2.'); + } else if (!allowCAP) { + problems.push(item.name + ' does not exist.'); + } + } + + if (set.evs) { + for (let k in set.evs) { + // @ts-ignore + if (typeof set.evs[k] !== 'number' || set.evs[k] < 0) { + // @ts-ignore + set.evs[k] = 0; + } + // @ts-ignore + totalEV += set.evs[k]; + } + } + + // ----------- legality line ------------------------------------------ + if (!this.getRuleTable(format).has('-illegal')) return problems; + // everything after this line only happens if we're doing legality enforcement + + // Pokestar studios + if (template.num <= -5000 && template.isNonstandard) { + problems.push(`${set.species} cannot be obtained by legal means.`); + } + + // only in gen 1 and 2 it was legal to max out all EVs + if (this.gen >= 3 && totalEV > 510) { + problems.push((set.name || set.species) + " has more than 510 total EVs."); + } + + if (template.gender) { + if (set.gender !== template.gender) { + set.gender = template.gender; + } + } else { + if (set.gender !== 'M' && set.gender !== 'F') { + set.gender = ''; + } + } + + // Legendary Pokemon must have at least 3 perfect IVs in gen 6 + let baseTemplate = this.getTemplate(template.baseSpecies); + if (set.ivs && this.gen >= 6 && (baseTemplate.gen >= 6 || format.requirePentagon) && (template.eggGroups[0] === 'Undiscovered' || template.species === 'Manaphy') && !template.prevo && !template.nfe && + // exceptions + template.species !== 'Unown' && template.baseSpecies !== 'Pikachu' && (template.baseSpecies !== 'Diancie' || !set.shiny)) { + let perfectIVs = 0; + for (let i in set.ivs) { + // @ts-ignore + if (set.ivs[i] >= 31) perfectIVs++; + } + let reason = (format.requirePentagon ? " and this format requires gen " + this.gen + " Pokémon" : " in gen 6"); + if (perfectIVs < 3) problems.push((set.name || set.species) + " must have at least three perfect IVs because it's a legendary" + reason + "."); + } + + // limit one of each move + let moves = []; + if (set.moves) { + /**@type {{[k: string]: true}} */ + let hasMove = {}; + for (const moveId of set.moves) { + let move = this.getMove(moveId); + let moveid = move.id; + if (hasMove[moveid]) continue; + hasMove[moveid] = true; + moves.push(moveId); + } + } + set.moves = moves; + + let battleForme = template.battleOnly && template.species; + if (battleForme && !template.isMega) { + if (template.requiredAbility && set.ability !== template.requiredAbility) { + problems.push("" + template.species + " transforms in-battle with " + template.requiredAbility + "."); // Darmanitan-Zen, Zygarde-Complete + } + if (template.requiredItems) { + if (template.species === 'Necrozma-Ultra') { + problems.push(`Necrozma-Ultra must start the battle as Necrozma-Dawn-Wings or Necrozma-Dusk-Mane holding Ultranecrozium Z.`); // Necrozma-Ultra transforms from one of two formes, and neither one is the base forme + } else if (!template.requiredItems.includes(item.name)) { + problems.push(`${template.species} transforms in-battle with ${Chat.plural(template.requiredItems.length, "either ") + template.requiredItems.join(" or ")}.`); // Mega or Primal + } + } + if (template.requiredMove && set.moves.indexOf(toId(template.requiredMove)) < 0) { + problems.push(`${template.species} transforms in-battle with ${template.requiredMove}.`); // Meloetta-Pirouette, Rayquaza-Mega + } + if (!format.noChangeForme) set.species = template.baseSpecies; // Fix battle-only forme + } else { + if (template.requiredAbility && set.ability !== template.requiredAbility) { + problems.push(`${(set.name || set.species)} needs the ability ${template.requiredAbility}.`); // No cases currently. + } + if (template.requiredItems && !template.requiredItems.includes(item.name) && !template.isMega) { + problems.push(`${(set.name || set.species)} needs to hold ${Chat.plural(template.requiredItems.length, "either ") + template.requiredItems.join(" or ")}.`); // Memory/Drive/Griseous Orb/Plate/Z-Crystal - Forme mismatch + } + if (template.requiredMove && set.moves.indexOf(toId(template.requiredMove)) < 0) { + problems.push(`${(set.name || set.species)} needs to have the move ${template.requiredMove}.`); // Keldeo-Resolute + } + + // Mismatches between the set forme (if not base) and the item signature forme will have been rejected already. + // It only remains to assign the right forme to a set with the base species (Arceus/Genesect/Giratina/Silvally). + if (item.forcedForme && template.species === this.getTemplate(item.forcedForme).baseSpecies && !format.noChangeForme) { + set.species = item.forcedForme; + } + } + + if (set.species !== template.species) { + // Autofixed forme. + template = this.getTemplate(set.species); + + if (!this.getRuleTable(format).has('ignoreillegalabilities') && !format.noChangeAbility) { + // Ensure that the ability is (still) legal. + let legalAbility = false; + for (let i in template.abilities) { + // @ts-ignore + if (template.abilities[i] !== set.ability) continue; + legalAbility = true; + break; + } + if (!legalAbility) { // Default to first ability. + set.ability = template.abilities['0']; + } + } + } + + return problems; + }, + onValidateSet(set) { + if (set.species in {'Blaziken-Mega': 1, 'Gengar-Mega': 1, 'Mewtwo-Mega-Y': 1, 'Rayquaza-Mega': 1}) { + return [`${set.species} is banned.`]; + } + }, + onSwitchIn(pokemon) { + let item = pokemon.getItem(); + if (item.megaEvolves && pokemon.template.species === item.megaEvolves) { + pokemon.canMegaEvo = item.megaStone; + } }, - ruleset: ['Gen 7] Doubles OU'], - banlist: ['Tapu Lele', 'Focus Sash', 'Perish Song'], }, { - name: "[Gen 7] Typemons", - desc: [ - "All Pokémon on a team get access to all moves of a chosen type. The type is chosen for the entire team, not individual Pokémon.", - "• Typemons", + name: "[Gen 7] Chimera", + desc: `Bring 6 Pokémon and choose their order at Team Preview. The lead Pokémon then receives the item, ability, stats, and moves of the other five Pokémon, who play no further part in the battle.`, + threads: [ + `• Chimera`, ], mod: 'gen7', - searchShow: false, - ruleset: ['[Gen 7] OU'], - banlist: ['Serperior'], + teamLength: { + validate: [6, 6], + battle: 6, + }, + ruleset: ['Pokemon', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], + banlist: [ + 'Illegal', 'Unreleased', 'Shedinja', 'Smeargle', 'Huge Power', 'Pure Power', 'Deep Sea Tooth', 'Eviolite', 'Focus Sash', 'Light Ball', 'Lucky Punch', + 'Stick', 'Thick Club', 'Dark Void', 'Grass Whistle', 'Hypnosis', 'Lovely Kiss', 'Perish Song', 'Sing', 'Sleep Powder', 'Spore', 'Transform', + ], + onValidateSet(set) { + if (set && set.item) { + let item = this.getItem(set.item); + if (item.zMoveUser || item.megaStone) return [`${set.name || set.species}'s item ${set.item} is banned.`]; + } + }, + onBeforeSwitchIn(pokemon) { + let allies = pokemon.side.pokemon.splice(1); + pokemon.side.pokemonLeft = 1; + let template = this.deepClone(pokemon.baseTemplate); + pokemon.item = allies[0].item; + template.abilities = allies[1].baseTemplate.abilities; + pokemon.ability = pokemon.baseAbility = allies[1].ability; + + // Stats + template.baseStats = allies[2].baseTemplate.baseStats; + pokemon.hp = pokemon.maxhp = template.maxHP = allies[2].maxhp; + pokemon.set.evs = allies[2].set.evs; + pokemon.set.nature = allies[2].getNature().name; + pokemon.set.ivs = pokemon.baseIvs = allies[2].set.ivs; + pokemon.hpType = pokemon.baseHpType = allies[2].baseHpType; + + pokemon.moveSlots = pokemon.baseMoveSlots = allies[3].baseMoveSlots.slice(0, 2).concat(allies[4].baseMoveSlots.slice(2)).filter((move, index, moveSlots) => moveSlots.find(othermove => othermove.id === move.id) === move); + pokemon.setTemplate(template); + }, }, { section: "Other Metagames", @@ -358,95 +815,61 @@ exports.Formats = [ }, { name: "[Gen 7] Balanced Hackmons", - desc: [ - "Anything that can be hacked in-game and is usable in local battles is allowed.", - "• Balanced Hackmons", - "• BH Suspects and Bans Discussion", - "• BH Resources", - "• BH Analyses", + desc: `Anything that can be hacked in-game and is usable in local battles is allowed.`, + threads: [ + `• Balanced Hackmons`, + `• BH Suspects and Bans Discussion`, + `• BH Resources`, ], mod: 'gen7', ruleset: ['Pokemon', 'Ability Clause', 'OHKO Clause', 'Evasion Moves Clause', 'CFZ Clause', 'Endless Battle Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod'], - banlist: ['Arena Trap', 'Huge Power', 'Innards Out', 'Magnet Pull', 'Moody', 'Parental Bond', 'Protean', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'Gengarite', 'Chatter', 'Comatose + Sleep Talk'], - }, - { - name: "[Gen 7] 1v1", - desc: [ - "Bring three Pokémon to Team Preview and choose one to battle.", - "• 1v1", - "• 1v1 Resources", - "• 1v1 Analyses", - ], - - mod: 'gen7', - teamLength: { - validate: [1, 3], - battle: 1, - }, - ruleset: ['Pokemon', 'Species Clause', 'Nickname Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Swagger Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], - banlist: [ - 'Illegal', 'Unreleased', 'Arceus', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Deoxys-Defense', 'Dialga', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', - 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom', - 'Power Construct', 'Perish Song', 'Focus Sash', 'Kangaskhanite', 'Salamencite', 'Chansey + Charm + Seismic Toss', 'Chansey + Charm + Psywave', - 'Flash', 'Kinesis', 'Leaf Tornado', 'Mirror Shot', 'Mud Bomb', 'Mud-Slap', 'Muddy Water', 'Night Daze', 'Octazooka', 'Sand Attack', 'Smokescreen', - ], - }, - { - name: "[Gen 7] Monotype", - desc: [ - "All the Pokémon on a team must share a type.", - "• Monotype", - "• Monotype Viability Rankings", - ], - - mod: 'gen7', - ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Same Type Clause', 'Team Preview'], - banlist: [ - 'Aegislash', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Giratina', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kartana', 'Kyogre', 'Kyurem-White', - 'Lugia', 'Lunala', 'Magearna', 'Marshadow', 'Mewtwo', 'Palkia', 'Pheromosa', 'Rayquaza', 'Reshiram', 'Shaymin-Sky', 'Solgaleo', 'Tapu Lele', 'Xerneas', 'Yveltal', 'Zekrom', 'Zygarde', - 'Battle Bond', 'Damp Rock', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Mawilite', 'Medichamite', 'Metagrossite', 'Salamencite', 'Smooth Rock', 'Terrain Extender', 'Baton Pass', - ], + banlist: ['Groudon-Primal', 'Arena Trap', 'Huge Power', 'Illusion', 'Innards Out', 'Magnet Pull', 'Moody', 'Parental Bond', 'Protean', 'Psychic Surge', 'Pure Power', 'Shadow Tag', 'Stakeout', 'Water Bubble', 'Wonder Guard', 'Gengarite', 'Chatter', 'Comatose + Sleep Talk'], }, { name: "[Gen 7] Mix and Mega", - desc: [ - "Mega Stones and Primal Orbs can be used on almost any fully evolved Pokémon with no Mega Evolution limit.", - "• Mix and Mega", - "• Mix and Mega Resources", - "• Mix and Mega Analyses", + desc: `Mega Stones and Primal Orbs can be used on almost any Pokémon with no Mega Evolution limit.`, + threads: [ + `• Mix and Mega`, + `• Mix and Mega Resources`, ], mod: 'mixandmega', - ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Mega Rayquaza Clause', 'Team Preview'], - banlist: ['Baton Pass', 'Electrify'], - onValidateTeam: function (team) { + ruleset: ['Pokemon', 'Standard', 'Mega Rayquaza Clause', 'Team Preview'], + banlist: ['Shadow Tag', 'Gengarite', 'Baton Pass', 'Electrify'], + restrictedStones: ['Beedrillite', 'Blazikenite', 'Kangaskhanite', 'Mawilite', 'Medichamite', 'Pidgeotite', 'Ultranecrozium Z'], + cannotMega: [ + 'Arceus', 'Deoxys', 'Deoxys-Attack', 'Deoxys-Speed', 'Dialga', 'Dragonite', 'Giratina', 'Groudon', 'Ho-Oh', 'Kyogre', + 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Naganadel', 'Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane', + 'Palkia', 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Slaking', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom', + ], + onValidateTeam(team) { + /**@type {{[k: string]: true}} */ let itemTable = {}; - for (let i = 0; i < team.length; i++) { - let item = this.getItem(team[i].item); + for (const set of team) { + let item = this.getItem(set.item); if (!item) continue; - if (itemTable[item] && item.megaStone) return ["You are limited to one of each Mega Stone.", "(You have more than one " + this.getItem(item).name + ")"]; - if (itemTable[item] && (item.id === 'blueorb' || item.id === 'redorb')) return ["You are limited to one of each Primal Orb.", "(You have more than one " + this.getItem(item).name + ")"]; - itemTable[item] = true; + if (itemTable[item.id] && item.megaStone) return ["You are limited to one of each Mega Stone.", "(You have more than one " + this.getItem(item).name + ")"]; + if (itemTable[item.id] && ['blueorb', 'redorb'].includes(item.id)) return ["You are limited to one of each Primal Orb.", "(You have more than one " + this.getItem(item).name + ")"]; + itemTable[item.id] = true; } }, - onValidateSet: function (set) { + onValidateSet(set, format) { let template = this.getTemplate(set.species || set.name); let item = this.getItem(set.item); - if (!item.megaEvolves && item.id !== 'blueorb' && item.id !== 'redorb') return; - if (template.baseSpecies === item.megaEvolves || (template.baseSpecies === 'Groudon' && item.id === 'redorb') || (template.baseSpecies === 'Kyogre' && item.id === 'blueorb')) return; - if (template.evos.length) return ["" + template.species + " is not allowed to hold " + item.name + " because it's not fully evolved."]; - let uberStones = ['beedrillite', 'blazikenite', 'gengarite', 'kangaskhanite', 'mawilite', 'medichamite']; - if (template.tier === 'Uber' || set.ability === 'Power Construct' || uberStones.includes(item.id)) return ["" + template.species + " is not allowed to hold " + item.name + "."]; + if (!item.megaEvolves && !['blueorb', 'redorb', 'ultranecroziumz'].includes(item.id)) return; + if (template.baseSpecies === item.megaEvolves || (template.baseSpecies === 'Groudon' && item.id === 'redorb') || (template.baseSpecies === 'Kyogre' && item.id === 'blueorb') || (template.species.substr(0, 9) === 'Necrozma-' && item.id === 'ultranecroziumz')) return; + let uberStones = format.restrictedStones || []; + let uberPokemon = format.cannotMega || []; + if (uberPokemon.includes(template.name) || set.ability === 'Power Construct' || uberStones.includes(item.name)) return ["" + template.species + " is not allowed to hold " + item.name + "."]; }, - onBegin: function () { - let allPokemon = this.p1.pokemon.concat(this.p2.pokemon); - for (let i = 0, len = allPokemon.length; i < len; i++) { - let pokemon = allPokemon[i]; + onBegin() { + for (const pokemon of this.p1.pokemon.concat(this.p2.pokemon)) { pokemon.originalSpecies = pokemon.baseTemplate.species; } + if (this.rated) this.add('html', `
    Mix and Mega is currently suspecting Landorus-Therian! For more information on how to participate check out the suspect thread.
    `); }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { let oMegaTemplate = this.getTemplate(pokemon.template.originalMega); if (oMegaTemplate.exists && pokemon.originalSpecies !== oMegaTemplate.baseSpecies) { // Place volatiles on the Pokémon to show its mega-evolved condition and details @@ -457,7 +880,7 @@ exports.Formats = [ } } }, - onSwitchOut: function (pokemon) { + onSwitchOut(pokemon) { let oMegaTemplate = this.getTemplate(pokemon.template.originalMega); if (oMegaTemplate.exists && pokemon.originalSpecies !== oMegaTemplate.baseSpecies) { this.add('-end', pokemon, oMegaTemplate.requiredItem || oMegaTemplate.requiredMove, '[silent]'); @@ -466,26 +889,27 @@ exports.Formats = [ }, { name: "[Gen 7] Almost Any Ability", - desc: [ - "Pokémon can use any ability, barring the few that are banned.", - "• Almost Any Ability", - "• AAA Resources", - "• AAA Analyses", + desc: `Pokémon can use any ability, barring the few that are restricted to their natural users.`, + threads: [ + `• Almost Any Ability`, + `• AAA Resources`, ], mod: 'gen7', - ruleset: ['Pokemon', 'Standard', 'Ability Clause', 'Ignore Illegal Abilities', 'Swagger Clause', 'Team Preview'], - banlist: ['Aegislash', 'Arceus', 'Archeops', 'Blaziken', 'Darkrai', 'Deoxys', 'Dialga', 'Dragonite', 'Dugtrio-Base', 'Giratina', 'Groudon', 'Ho-Oh', - 'Hoopa-Unbound', 'Kartana', 'Keldeo', 'Kyogre', 'Kyurem-Black', 'Kyurem-White', 'Lugia', 'Lunala', 'Marshadow', 'Mewtwo', 'Palkia', - 'Pheromosa', 'Rayquaza', 'Regigigas', 'Reshiram', 'Shaymin-Sky', 'Shedinja', 'Slaking', 'Solgaleo', 'Xerneas', 'Yveltal', 'Zekrom', - 'Power Construct', 'Shadow Tag', 'Gengarite', 'Kangaskhanite', 'Lucarionite', 'Salamencite', 'Baton Pass', - ], - onValidateSet: function (set) { - let bannedAbilities = {'Arena Trap': 1, 'Comatose': 1, 'Contrary': 1, 'Fluffy': 1, 'Fur Coat': 1, 'Huge Power': 1, 'Illusion': 1, 'Imposter': 1, 'Innards Out': 1, 'Parental Bond': 1, 'Protean': 1, 'Pure Power': 1, 'Simple':1, 'Speed Boost': 1, 'Stakeout': 1, 'Water Bubble': 1, 'Wonder Guard': 1}; - if (set.ability in bannedAbilities) { + ruleset: ['[Gen 7] OU', 'Ability Clause', 'Ignore Illegal Abilities'], + banlist: ['Archeops', 'Dragonite', 'Hoopa-Unbound', 'Kartana', 'Keldeo', 'Kyurem-Black', 'Regigigas', 'Shedinja', 'Slaking', 'Terrakion', 'Weavile'], + unbanlist: ['Aegislash', 'Genesect', 'Landorus', 'Metagross-Mega', 'Naganadel'], + restrictedAbilities: [ + 'Comatose', 'Contrary', 'Fluffy', 'Fur Coat', 'Huge Power', 'Illusion', 'Imposter', 'Innards Out', + 'Parental Bond', 'Protean', 'Pure Power', 'Simple', 'Speed Boost', 'Stakeout', 'Water Bubble', 'Wonder Guard', + ], + onValidateSet(set, format) { + let restrictedAbilities = format.restrictedAbilities || []; + if (restrictedAbilities.includes(set.ability)) { let template = this.getTemplate(set.species || set.name); let legalAbility = false; for (let i in template.abilities) { + // @ts-ignore if (set.ability === template.abilities[i]) legalAbility = true; } if (!legalAbility) return ['The ability ' + set.ability + ' is banned on Pok\u00e9mon that do not naturally have it.']; @@ -493,56 +917,231 @@ exports.Formats = [ }, }, { - name: "[Gen 7] Sketchmons", - desc: [ - "Pokémon gain access to one Sketched move.", - "• Sketchmons", - "• Sketchmons Resources", - "• Sketchmons Analyses", + name: "[Gen 7] Camomons", + desc: `Pokémon change type to match their first two moves.`, + threads: [ + `• Camomons`, + ], + mod: 'gen7', + // searchShow: false, + ruleset: ['[Gen 7] OU'], + banlist: ['Kartana', 'Kyurem-Black', 'Shedinja'], + onModifyTemplate(template, target, source, effect) { + if (!target) return; // Chat command + if (effect && ['imposter', 'transform'].includes(effect.id)) return; + let types = [...new Set(target.baseMoveSlots.slice(0, 2).map(move => this.getMove(move.id).type))]; + return Object.assign({}, template, {types: types}); + }, + onSwitchIn(pokemon) { + this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[silent]'); + }, + onAfterMega(pokemon) { + this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[silent]'); + }, + }, + { + name: "[Gen 7] STABmons", + desc: `Pokémon can use any move of their typing, in addition to the moves they can normally learn.`, + threads: [ + `• STABmons`, ], mod: 'gen7', - ruleset: ['[Gen 7] OU', 'Allow One Sketch', 'Sketch Clause'], - banlist: ['Dugtrio-Base'], - noSketch: ['Belly Drum', 'Celebrate', 'Conversion', "Forest's Curse", 'Geomancy', 'Happy Hour', 'Hold Hands', 'Lovely Kiss', 'Purify', 'Shell Smash', 'Shift Gear', 'Sketch', 'Spore', 'Sticky Web', 'Trick-or-Treat'], + searchShow: false, + ruleset: ['[Gen 7] OU', 'STABmons Move Legality'], + banlist: ['Aerodactyl-Mega', 'Blacephalon', 'Kartana', 'Komala', 'Kyurem-Black', 'Porygon-Z', 'Silvally', 'Tapu Koko', 'Tapu Lele', 'Thundurus-Base', 'King\'s Rock', 'Razor Fang'], + restrictedMoves: ['Acupressure', 'Belly Drum', 'Chatter', 'Extreme Speed', 'Geomancy', 'Lovely Kiss', 'Shell Smash', 'Shift Gear', 'Spore', 'Thousand Arrows'], }, { - name: "[Gen 7] Hidden Type", - desc: [ - "Pokémon have an added type determined by their IVs. Same as the Hidden Power type.", - "• Hidden Type", + name: "[Gen 7] Tier Shift", + desc: "Pokémon below OU get all their stats boosted. UU/RUBL get +10, RU/NUBL get +20, NU/PUBL get +30, and PU or lower get +40.", + threads: [ + "• Tier Shift", ], mod: 'gen7', searchShow: false, ruleset: ['[Gen 7] OU'], - onModifyTemplate: function (template, pokemon) { - if (template.types.includes(pokemon.hpType)) return; - return Object.assign({addedType: pokemon.hpType}, template); + banlist: ['Damp Rock', 'Deep Sea Tooth', 'Eviolite'], + onModifyTemplate(template, target, source, effect) { + if (!effect) return; + if (!template.abilities) return false; + /** @type {{[tier: string]: number}} */ + let boosts = { + 'UU': 10, + 'RUBL': 10, + 'RU': 20, + 'NUBL': 20, + 'NU': 30, + 'PUBL': 30, + 'PU': 40, + 'NFE': 40, + 'LC Uber': 40, + 'LC': 40, + }; + if (target.set.ability === 'Drizzle') return; + let pokemon = this.deepClone(template); + if (target.set.item) { + let item = this.getItem(target.set.item); + if (item.name === 'Kommonium Z' || item.name === 'Mewnium Z') return; + if (item.megaEvolves === pokemon.species) pokemon.tier = this.getTemplate(item.megaStone).tier; + } + if (pokemon.tier[0] === '(') pokemon.tier = pokemon.tier.slice(1, -1); + if (!(pokemon.tier in boosts)) return; + if (target.set.moves.includes('auroraveil')) pokemon.tier = 'UU'; + if (target.set.ability === 'Drought') pokemon.tier = 'RU'; + + let boost = boosts[pokemon.tier]; + for (let statName in pokemon.baseStats) { + if (statName === 'hp') continue; + pokemon.baseStats[statName] = this.clampIntRange(pokemon.baseStats[statName] + boost, 1, 255); + } + return pokemon; }, }, { - name: "[Gen 7] BH Doubles", - desc: [ - "Anything that can be hacked in-game and is usable in local battles is allowed.", - "• Balanced Hackmons", + name: "[Gen 7] Partners in Crime", + desc: `Doubles-based metagame where both active ally Pokémon share abilities and moves.`, + threads: [ + `• Partners in Crime`, ], - mod: 'gen7', + mod: 'pic', gameType: 'doubles', - searchShow: false, - ruleset: ['[Gen 7] Balanced Hackmons'], - banlist: [], + // searchShow: false, + ruleset: ['[Gen 7] Doubles OU', 'Sleep Clause Mod'], + banlist: [ + 'Kangaskhanite', 'Mawilite', 'Medichamite', + 'Huge Power', 'Imposter', 'Normalize', 'Pure Power', 'Wonder Guard', 'Mimic', 'Sketch', 'Sweet Scent', 'Transform', + ], + onSwitchInPriority: 2, + onSwitchIn(pokemon) { + if (this.p1.active.every(ally => ally && !ally.fainted)) { + let p1a = this.p1.active[0], p1b = this.p1.active[1]; + if (p1a.ability !== p1b.ability) { + let p1aInnate = 'ability' + p1b.ability; + p1a.volatiles[p1aInnate] = {id: p1aInnate, target: p1a}; + let p1bInnate = 'ability' + p1a.ability; + p1b.volatiles[p1bInnate] = {id: p1bInnate, target: p1b}; + } + } + if (this.p2.active.every(ally => ally && !ally.fainted)) { + let p2a = this.p2.active[0], p2b = this.p2.active[1]; + if (p2a.ability !== p2b.ability) { + let p2a_innate = 'ability' + p2b.ability; + p2a.volatiles[p2a_innate] = {id: p2a_innate, target: p2a}; + let p2b_innate = 'ability' + p2a.ability; + p2b.volatiles[p2b_innate] = {id: p2b_innate, target: p2b}; + } + } + let ally = pokemon.side.active.find(ally => ally && ally !== pokemon && !ally.fainted); + if (ally && ally.ability !== pokemon.ability) { + if (!pokemon.innate) { + pokemon.innate = 'ability' + ally.ability; + delete pokemon.volatiles[pokemon.innate]; + pokemon.addVolatile(pokemon.innate); + } + if (!ally.innate) { + ally.innate = 'ability' + pokemon.ability; + delete ally.volatiles[ally.innate]; + ally.addVolatile(ally.innate); + } + } + }, + onSwitchOut(pokemon) { + if (pokemon.innate) { + pokemon.removeVolatile(pokemon.innate); + delete pokemon.innate; + } + let ally = pokemon.side.active.find(ally => ally && ally !== pokemon && !ally.fainted); + if (ally && ally.innate) { + ally.removeVolatile(ally.innate); + delete ally.innate; + } + }, + onFaint(pokemon) { + if (pokemon.innate) { + pokemon.removeVolatile(pokemon.innate); + delete pokemon.innate; + } + let ally = pokemon.side.active.find(ally => ally && ally !== pokemon && !ally.fainted); + if (ally && ally.innate) { + ally.removeVolatile(ally.innate); + delete ally.innate; + } + }, }, { name: "[Gen 6] Gen-NEXT OU", mod: 'gennext', searchShow: false, + challengeShow: false, ruleset: ['Pokemon', 'Standard NEXT', 'Team Preview'], banlist: ['Uber'], }, + // Let's Go! + /////////////////////////////////////////////////////////////////// + + { + section: "Let's Go!", + column: 2, + }, + { + name: "[Gen 7 Let's Go] Random Battle", + + mod: 'letsgo', + team: 'random', + ruleset: ['Pokemon', 'Allow AVs', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + }, + { + name: "[Gen 7 Let's Go] OU", + threads: [ + `• LGPE OverUsed`, + ], + + mod: 'letsgo', + forcedLevel: 50, + ruleset: ['Pokemon', 'Species Clause', 'Nickname Clause', 'Evasion Moves Clause', 'OHKO Clause', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], + banlist: ['Illegal', 'Unreleased', 'Uber'], + }, + { + name: "[Gen 7 Let's Go] Singles No Restrictions", + threads: [ + `• Let's Go! Discussion`, + ], + + mod: 'letsgo', + searchShow: false, + ruleset: ['Pokemon', 'Allow AVs', 'Endless Battle Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod'], + banlist: ['Illegal', 'Unreleased'], + }, + { + name: "[Gen 7 Let's Go] Doubles OU", + threads: [ + `• LGPE DOU`, + ], + + mod: 'letsgo', + gameType: 'doubles', + forcedLevel: 50, + ruleset: ['Pokemon', 'Species Clause', 'Nickname Clause', 'Evasion Moves Clause', 'OHKO Clause', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], + banlist: ['Illegal', 'Unreleased', 'Mewtwo'], + }, + { + name: "[Gen 7 Let's Go] Doubles No Restrictions", + threads: [ + `• Let's Go! Discussion`, + ], + + mod: 'letsgo', + gameType: 'doubles', + searchShow: false, + ruleset: ['Pokemon', 'Allow AVs', 'Endless Battle Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod'], + banlist: ['Illegal', 'Unreleased'], + }, + // Randomized Metas /////////////////////////////////////////////////////////////////// @@ -551,17 +1150,18 @@ exports.Formats = [ column: 2, }, { - name: "[Gen 6] Battle Factory", + name: "[Gen 7] Battle Factory", + desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, - mod: 'gen6', + mod: 'gen7', team: 'randomFactory', ruleset: ['Pokemon', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'], }, { name: "[Gen 7] BSS Factory", - desc: [ - "Randomised 3v3 Singles featuring Pokémon and movesets popular in Battle Spot Singles.", - "• Information and Suggestions Thread", + desc: `Randomized 3v3 Singles featuring Pokémon and movesets popular in Battle Spot Singles.`, + threads: [ + `• Information and Suggestions Thread`, ], mod: 'gen7', @@ -570,7 +1170,46 @@ exports.Formats = [ validate: [3, 6], battle: 3, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], + }, + { + name: "[Gen 7] Monotype Random Battle", + + mod: 'gen7', + team: 'random', + ruleset: ['Pokemon', 'Same Type Clause', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + }, + { + name: "[Gen 7] Super Staff Bros Brawl", + desc: "Super Staff Bros returns for another round! Battle with a random team of pokemon created by the sim staff.", + threads: [ + `• Introduction & Roster`, + ], + + mod: 'ssb', + team: 'randomStaffBros', + ruleset: ['HP Percentage Mod', 'Cancel Mod', 'Sleep Clause Mod'], + onBegin() { + this.add('raw|SUPER STAFF BROS BRAWL!!'); + this.add('message', 'GET READY FOR THE NEXT BATTLE!'); + this.add(`raw|
    Wondering what all these custom moves, abilities, and items do?
    Check out the Super Staff Bros Brawl Guide and find out!
    `); + }, + onSwitchIn(pokemon) { + let name = toId(pokemon.illusion ? pokemon.illusion.name : pokemon.name); + if (this.getTemplate(name).exists) { + // Certain pokemon have volatiles named after their speciesid + // 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 + // statuse's to end in "user". + name += 'user'; + } + // Add the mon's status effect to it as a volatile. + let status = this.getEffect(name); + if (status && status.exists) { + pokemon.addVolatile(name, pokemon); + } + }, }, { name: "[Gen 7] Challenge Cup 1v1", @@ -583,28 +1222,92 @@ exports.Formats = [ ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], }, { - name: "[Gen 7] Monotype Random Battle", + name: "[Gen 7] Challenge Cup 2v2", mod: 'gen7', - team: 'random', + team: 'randomCC', + gameType: 'doubles', + teamLength: { + battle: 2, + }, searchShow: false, - ruleset: ['Pokemon', 'Same Type Clause', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], }, { name: "[Gen 7] Hackmons Cup", - desc: ["Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item."], + desc: `Randomized teams of level-balanced Pokémon with absolutely any ability, moves, and item.`, + + mod: 'gen7', + team: 'randomHC', + ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], + }, + { + name: "[Gen 7] Doubles Hackmons Cup", mod: 'gen7', + gameType: 'doubles', team: 'randomHC', + searchShow: false, ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], }, { - name: "[Gen 7] Doubles Hackmons Cup", + name: "[Gen 6] Random Battle", + + mod: 'gen6', + team: 'random', + ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + }, + { + name: "[Gen 6] Battle Factory", + desc: `Randomized teams of Pokémon for a generated Smogon tier with sets that are competitively viable.`, + + mod: 'gen6', + team: 'randomFactory', + searchShow: false, + ruleset: ['Pokemon', 'Sleep Clause Mod', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod', 'Mega Rayquaza Clause'], + }, + { + name: "[Gen 5] Random Battle", + + mod: 'gen5', + team: 'random', + ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + }, + { + name: "[Gen 4] Random Battle", + + mod: 'gen4', + team: 'random', + ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + }, + { + name: "[Gen 3] Random Battle", + + mod: 'gen3', + team: 'random', + ruleset: ['Pokemon', 'Standard'], + }, + { + name: "[Gen 2] Random Battle", + + mod: 'gen2', + team: 'random', + ruleset: ['Pokemon', 'Standard'], + }, + { + name: "[Gen 1] Random Battle", + + mod: 'gen1', + team: 'random', + ruleset: ['Pokemon', 'Standard'], + }, + { + name: "[Gen 1] Challenge Cup", - mod: 'gen7', - gameType: 'doubles', - team: 'randomHC', + mod: 'gen1', + team: 'randomCC', searchShow: false, + challengeShow: false, ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], }, @@ -616,124 +1319,235 @@ exports.Formats = [ column: 3, }, { - name: "[Gen 2] STABmons", - desc: [ - "Pokémon can use any move of their typing, in addition to the moves they can normally learn.", - "• GSC STABmons", + name: "[Gen 4] UU", + threads: [ + `• DPP UU Metagame Discussion`, + `• DPP UU Viability Ranking`, ], + mod: 'gen4', + // searchShow: false, + ruleset: ['Pokemon', 'Standard'], + banlist: ['Uber', 'OU', 'UUBL'], + }, + { + name: "[Gen 2] Inverse OU", + mod: 'gen2', - ruleset: ['[Gen 2] OU', 'Ignore STAB Moves'], - banlist: [], + ruleset: ['[Gen 2] OU', 'Inverse Mod'], + }, + { + name: "[Gen 3] OU (no Spikes)", + + mod: 'gen3', + ruleset: ['[Gen 3] OU'], + banlist: ['Spikes'], }, - // ORAS Singles + // Past Gens OU /////////////////////////////////////////////////////////////////// { - section: "ORAS Singles", + section: "Past Gens OU", column: 3, }, { name: "[Gen 6] OU", - desc: [ - "• OU Metagame Discussion", - "• OU Banlist", - "• OU Viability Ranking", + threads: [ + `• ORAS OU Banlist`, + `• ORAS OU Viability Rankings`, + `• ORAS OU Sample Teams`, ], mod: 'gen6', - ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Swagger Clause', 'Baton Pass Clause'], - banlist: ['Uber', 'Shadow Tag', 'Soul Dew'], + ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Swagger Clause'], + banlist: ['Uber', 'Arena Trap', 'Shadow Tag', 'Soul Dew', 'Baton Pass'], + }, + { + name: "[Gen 5] OU", + threads: [ + `• BW2 OU Viability Ranking`, + `• BW2 Sample Teams`, + ], + + mod: 'gen5', + ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Swagger Clause', 'Team Preview'], + banlist: ['Uber', 'Arena Trap', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Rush', 'Soul Dew'], + }, + { + name: "[Gen 4] OU", + threads: [ + `• DPP OU Metagame Discussion`, + `• DPP OU Viability Ranking`, + ], + + mod: 'gen4', + ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause', 'Baton Pass Clause'], + banlist: ['Uber', 'Soul Dew'], + }, + { + name: "[Gen 3] OU", + threads: [ + `• ADV OU Viability Ranking`, + `• ADV Sample Teams`, + ], + + mod: 'gen3', + ruleset: ['Pokemon', 'Standard'], + banlist: ['Uber', 'Smeargle + Ingrain'], + }, + { + name: "[Gen 2] OU", + threads: [ + `• GSC OU Viability Ranking`, + `• GSC Sample Teams`, + ], + + mod: 'gen2', + ruleset: ['Pokemon', 'Standard'], + banlist: ['Uber'], + }, + { + name: "[Gen 1] OU", + threads: [ + `• RBY OU Viability Ranking`, + `• RBY Sample Teams`, + ], + + mod: 'gen1', + ruleset: ['Pokemon', 'Standard'], + banlist: ['Uber'], + }, + + // OR/AS Singles + /////////////////////////////////////////////////////////////////// + + { + section: "OR/AS Singles", + column: 3, }, { name: "[Gen 6] Ubers", - desc: [ - "• Ubers Metagame Discussion", - "• Ubers Viability Ranking", + threads: [ + `• ORAS Ubers`, + `• ORAS Ubers Viability Rankings`, ], mod: 'gen6', + searchShow: false, ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Team Preview', 'Mega Rayquaza Clause'], }, { name: "[Gen 6] UU", - desc: [ - "• np: UU Stage 7.3", - "• UU Banlist", - "• UU Viability Ranking", + threads: [ + `• ORAS UU Banlist`, + `• ORAS UU Viability Rankings`, ], mod: 'gen6', + searchShow: false, ruleset: ['[Gen 6] OU'], - banlist: ['OU', 'BL', 'Drizzle', 'Drought', 'Baton Pass'], + banlist: ['OU', 'UUBL', 'Drizzle', 'Drought'], }, { name: "[Gen 6] RU", - desc: [ - "• np: RU Stage 19", - "• RU Banlist", - "• RU Viability Ranking", + threads: [ + `• ORAS RU Banlist`, + `• ORAS RU Viability Rankings`, ], mod: 'gen6', + searchShow: false, ruleset: ['[Gen 6] UU'], - banlist: ['UU', 'BL2'], + banlist: ['UU', 'RUBL'], }, { name: "[Gen 6] NU", - desc: [ - "• np: NU Stage 15", - "• NU Banlist", - "• NU Viability Ranking", + threads: [ + `• ORAS NU Banlist`, + `• ORAS NU Viability Rankings`, ], mod: 'gen6', + searchShow: false, ruleset: ['[Gen 6] RU'], - banlist: ['RU', 'BL3'], + banlist: ['RU', 'NUBL'], }, { name: "[Gen 6] PU", - desc: [ - "• np: PU Stage 10", - "• PU Viability Ranking", + threads: [ + `• ORAS PU Banlist`, + `• ORAS PU Viability Rankings`, ], mod: 'gen6', + searchShow: false, ruleset: ['[Gen 6] NU'], - banlist: ['NU', 'BL4', 'Chatter'], - unbanlist: ['Baton Pass'], + banlist: ['NU', 'PUBL', 'Chatter'], }, { name: "[Gen 6] LC", - desc: [ - "• LC Metagame Discussion", - "• LC Banlist", - "• LC Viability Ranking", + threads: [ + `• ORAS LC Banlist`, + `• ORAS LC Viability Rankings`, ], mod: 'gen6', + searchShow: false, maxLevel: 5, ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Little Cup'], banlist: ['LC Uber', 'Gligar', 'Misdreavus', 'Scyther', 'Sneasel', 'Tangela', 'Dragon Rage', 'Sonic Boom', 'Swagger'], }, + { + name: "[Gen 6] Monotype", + threads: [`• ORAS Monotype`], + + mod: 'gen6', + searchShow: false, + ruleset: ['Pokemon', 'Standard', 'Swagger Clause', 'Same Type Clause', 'Team Preview'], + banlist: [ + 'Aegislash', 'Altaria-Mega', 'Arceus', 'Blaziken', 'Charizard-Mega-X', 'Darkrai', 'Deoxys-Base', 'Deoxys-Attack', 'Dialga', 'Genesect', 'Gengar-Mega', + 'Giratina', 'Greninja', 'Groudon', 'Ho-Oh', 'Hoopa-Unbound', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lucario-Mega', 'Lugia', 'Mawile-Mega', 'Metagross-Mega', + 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Sableye-Mega', 'Salamence-Mega', 'Shaymin-Sky', 'Slowbro-Mega', 'Talonflame', 'Xerneas', 'Yveltal', 'Zekrom', + 'Shadow Tag', 'Damp Rock', 'Smooth Rock', 'Soul Dew', 'Baton Pass', + ], + }, { name: "[Gen 6] Anything Goes", - desc: [ - "• Anything Goes Discussion", - "• Anything Goes Resources", + threads: [ + `• ORAS Anything Goes`, + `• ORAS AG Resources`, ], mod: 'gen6', + searchShow: false, ruleset: ['Pokemon', 'Endless Battle Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Illegal', 'Unreleased'], }, + { + name: "[Gen 6] 1v1", + desc: `Bring three Pokémon to Team Preview and choose one to battle.`, + + mod: 'gen6', + searchShow: false, + teamLength: { + validate: [1, 3], + battle: 1, + }, + ruleset: ['Pokemon', 'Species Clause', 'Nickname Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Accuracy Moves Clause', 'Swagger Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], + banlist: [ + 'Illegal', 'Unreleased', 'Arceus', 'Blaziken', 'Darkrai', 'Deoxys', 'Deoxys-Attack', 'Deoxys-Defense', + 'Dialga', 'Giratina', 'Groudon', 'Ho-Oh', 'Kangaskhan-Mega', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', + 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Shaymin-Sky', 'Xerneas', 'Yveltal', 'Zekrom', + 'Focus Sash', 'Soul Dew', 'Perish Song', + ], + }, { name: "[Gen 6] CAP", - desc: [ - "• CAP Metagame Discussion", - "• CAP Viability Ranking", - "• CAP Sample Teams", + threads: [ + `• ORAS CAP Metagame Discussion`, + `• ORAS CAP Viability Rankings`, + `• ORAS CAP Sample Teams`, ], mod: 'gen6', @@ -742,36 +1556,21 @@ exports.Formats = [ }, { name: "[Gen 6] Battle Spot Singles", - desc: [ - "• Battle Spot Singles Discussion", - "• Battle Spot Singles Viability Ranking", + threads: [ + `• ORAS Battle Spot Singles`, + `• ORAS BSS Viability Rankings`, ], mod: 'gen6', + searchShow: false, maxForcedLevel: 50, teamLength: { validate: [3, 6], battle: 3, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], requirePentagon: true, }, - { - name: "[Gen 6] Inverse Battle", - desc: ["The effectiveness of attacks is inverted."], - - mod: 'gen6', - searchShow: false, - ruleset: ['Pokemon', 'Inverse Mod', 'Endless Battle Clause', 'Team Preview', 'HP Percentage Mod', 'Cancel Mod'], - banlist: ['Illegal', 'Unreleased'], - }, - { - name: "[Gen 6] Random Battle", - - mod: 'gen6', - team: 'random', - ruleset: ['PotD', 'Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], - }, { name: "[Gen 6] Custom Game", @@ -780,70 +1579,41 @@ exports.Formats = [ canUseRandomTeam: true, debug: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, - // ORAS Doubles/Triples + // OR/AS Doubles/Triples /////////////////////////////////////////////////////////////////// { - section: "ORAS Doubles/Triples", + section: "OR/AS Doubles/Triples", }, { name: "[Gen 6] Doubles OU", - desc: [ - "• np: Doubles OU Stage 5", - "• Doubles OU Banlist", - "• Doubles OU Viability Ranking", + threads: [ + `• ORAS Doubles OU Banlist`, + `• ORAS Doubles OU Viability Rankings`, ], - mod: 'gen6', - gameType: 'doubles', - ruleset: ['Pokemon', 'Standard Doubles', 'Swagger Clause', 'Team Preview'], - banlist: [ - 'Arceus', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-White', 'Lugia', 'Mewtwo', - 'Palkia', 'Rayquaza', 'Reshiram', 'Salamence-Mega', 'Salamencite', 'Shaymin-Sky', 'Xerneas', 'Yveltal', 'Zekrom', 'Soul Dew', - 'Dark Void', 'Gravity ++ Grass Whistle', 'Gravity ++ Hypnosis', 'Gravity ++ Lovely Kiss', 'Gravity ++ Sing', 'Gravity ++ Sleep Powder', - ], - }, - { - name: "[Gen 6] Doubles Ubers", - desc: ["• Doubles Ubers"], - mod: 'gen6', gameType: 'doubles', searchShow: false, - ruleset: ['Pokemon', 'Species Clause', 'Moody Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Evasion Abilities Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod', 'Team Preview'], - banlist: ['Illegal', 'Unreleased', 'Dark Void'], - }, - { - name: "[Gen 6] Doubles UU", - desc: ["• Doubles UU"], - - mod: 'gen6', - gameType: 'doubles', - searchShow: false, - ruleset: ['[Gen 6] Doubles OU'], - banlist: [ - 'Aegislash', 'Amoonguss', 'Arcanine', 'Azumarill', 'Bisharp', 'Breloom', 'Charizard-Mega-Y', 'Charizardite Y', - 'Conkeldurr', 'Cresselia', 'Diancie-Mega', 'Diancite', 'Ferrothorn', 'Garchomp', 'Gardevoir-Mega', 'Gardevoirite', - 'Gastrodon', 'Gengar', 'Greninja', 'Heatran', 'Hitmontop', 'Hoopa-Unbound', 'Hydreigon', 'Jirachi', - 'Kangaskhan-Mega', 'Kangaskhanite', 'Keldeo', 'Kyurem-Black', 'Landorus-Therian', 'Latios', 'Ludicolo', 'Milotic', - 'Politoed', 'Raichu', 'Rotom-Wash', 'Scizor', 'Scrafty', 'Shaymin-Sky', 'Suicune', 'Sylveon', 'Talonflame', - 'Terrakion', 'Thundurus', 'Togekiss', 'Tyranitar', 'Venusaur', 'Volcanion', 'Weavile', 'Whimsicott', 'Zapdos', - ], + ruleset: ['Pokemon', 'Standard Doubles', 'Swagger Clause', 'Team Preview'], + banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Gravity ++ Grass Whistle', 'Gravity ++ Hypnosis', 'Gravity ++ Lovely Kiss', 'Gravity ++ Sing', 'Gravity ++ Sleep Powder'], }, { name: "[Gen 6] VGC 2016", - desc: [ - "• VGC 2016 Rules", - "• VGC 2016 Viability Ranking", + threads: [ + `• VGC 2016 Rules`, + `• VGC 2016 Viability Rankings`, ], mod: 'gen6', gameType: 'doubles', + searchShow: false, maxForcedLevel: 50, teamLength: { validate: [4, 6], @@ -855,42 +1625,34 @@ exports.Formats = [ 'Shaymin', 'Shaymin-Sky', 'Arceus', 'Victini', 'Keldeo', 'Meloetta', 'Genesect', 'Diancie', 'Hoopa', 'Hoopa-Unbound', 'Volcanion', 'Soul Dew', ], requirePentagon: true, - onValidateTeam: function (team) { - const legends = {'Mewtwo':1, 'Lugia':1, 'Ho-Oh':1, 'Kyogre':1, 'Groudon':1, 'Rayquaza':1, 'Dialga':1, 'Palkia':1, 'Giratina':1, 'Reshiram':1, 'Zekrom':1, 'Kyurem':1, 'Xerneas':1, 'Yveltal':1, 'Zygarde':1}; + onValidateTeam(team) { + const legends = ['Mewtwo', 'Lugia', 'Ho-Oh', 'Kyogre', 'Groudon', 'Rayquaza', 'Dialga', 'Palkia', 'Giratina', 'Reshiram', 'Zekrom', 'Kyurem', 'Xerneas', 'Yveltal', 'Zygarde']; let n = 0; - for (let i = 0; i < team.length; i++) { - let template = this.getTemplate(team[i].species).baseSpecies; - if (template in legends) n++; + for (const set of team) { + let baseSpecies = this.getTemplate(set.species).baseSpecies; + if (legends.includes(baseSpecies)) n++; if (n > 2) return ["You can only use up to two legendary Pok\u00E9mon."]; } }, }, { name: "[Gen 6] Battle Spot Doubles", - desc: [ - "• Battle Spot Doubles Discussion", - "• Battle Spot Doubles Viability Ranking", + threads: [ + `• ORAS Battle Spot Doubles Discussion`, + `• ORAS BSD Viability Rankings`, ], mod: 'gen6', gameType: 'doubles', + searchShow: false, maxForcedLevel: 50, teamLength: { validate: [4, 6], battle: 4, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], requirePentagon: true, }, - { - name: "[Gen 6] Random Doubles Battle", - - mod: 'gen6', - gameType: 'doubles', - team: 'random', - searchShow: false, - ruleset: ['PotD', 'Pokemon', 'HP Percentage Mod', 'Cancel Mod'], - }, { name: "[Gen 6] Doubles Custom Game", @@ -899,6 +1661,7 @@ exports.Formats = [ searchShow: false, canUseRandomTeam: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, debug: true, // no restrictions, for serious (other than team preview) @@ -906,18 +1669,19 @@ exports.Formats = [ }, { name: "[Gen 6] Battle Spot Triples", - desc: [ - "• Battle Spot Triples Discussion", - "• Battle Spot Triples Viability Ranking", + threads: [ + `• ORAS Battle Spot Triples Discussion`, + `• ORAS BST Viability Rankings`, ], mod: 'gen6', gameType: 'triples', + searchShow: false, maxForcedLevel: 50, teamLength: { validate: [6, 6], }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], requirePentagon: true, }, { @@ -928,84 +1692,89 @@ exports.Formats = [ searchShow: false, canUseRandomTeam: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, debug: true, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, - // BW2 Singles + // B2/W2 Singles /////////////////////////////////////////////////////////////////// { - section: "BW2 Singles", + section: "B2/W2 Singles", column: 4, }, - { - name: "[Gen 5] OU", - desc: [ - "• BW2 OU Viability Ranking", - "• BW2 Sample Teams", - ], - - mod: 'gen5', - ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Swagger Clause', 'Team Preview'], - banlist: ['Uber', 'Drizzle ++ Swift Swim', 'Drought ++ Chlorophyll', 'Sand Stream ++ Sand Rush', 'Soul Dew'], - }, { name: "[Gen 5] Ubers", - desc: [ - "• BW2 Ubers Viability Ranking", - "• BW2 Ubers Sample Teams", + threads: [ + `• BW2 Ubers Viability Ranking`, + `• BW2 Ubers Sample Teams`, ], mod: 'gen5', + searchShow: false, ruleset: ['Pokemon', 'Team Preview', 'Standard Ubers'], }, { name: "[Gen 5] UU", - desc: [ - "• BW2 UU Viability Ranking", - "• BW2 Sample Teams", + threads: [ + `• BW2 UU Viability Ranking`, + `• BW2 Sample Teams`, ], mod: 'gen5', - ruleset: ['[Gen 5] OU'], - banlist: ['OU', 'BL', 'Drought', 'Sand Stream', 'Snow Warning'], + searchShow: false, + ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause', 'Baton Pass Clause', 'Swagger Clause', 'Team Preview'], + banlist: ['Uber', 'OU', 'UUBL', 'Arena Trap', 'Drought', 'Sand Stream', 'Snow Warning'], }, { name: "[Gen 5] RU", - desc: [ - "• BW2 RU Viability Ranking", - "• BW2 Sample Teams", + threads: [ + `• BW2 RU Viability Ranking`, + `• BW2 Sample Teams`, ], mod: 'gen5', + searchShow: false, ruleset: ['[Gen 5] UU'], - banlist: ['UU', 'BL2', 'Shell Smash + Baton Pass', 'Snow Warning'], + banlist: ['UU', 'RUBL', 'Shell Smash + Baton Pass'], }, { name: "[Gen 5] NU", - desc: [ - "• BW2 NU Viability Ranking", - "• BW2 Sample Teams", + threads: [ + `• BW2 NU Viability Ranking`, + `• BW2 Sample Teams`, ], mod: 'gen5', + searchShow: false, ruleset: ['[Gen 5] RU'], - banlist: ['RU', 'BL3', 'Prankster + Assist'], + banlist: ['RU', 'NUBL', 'Prankster + Assist'], }, { name: "[Gen 5] LC", - desc: [ - "• BW2 LC Viability Ranking", - "• BW2 Sample Teams", + threads: [ + `• BW2 LC Viability Ranking`, + `• BW2 Sample Teams`, ], mod: 'gen5', + searchShow: false, maxLevel: 5, ruleset: ['Pokemon', 'Standard', 'Team Preview', 'Little Cup'], - banlist: ['Berry Juice', 'Soul Dew', 'Dragon Rage', 'Sonic Boom', 'LC Uber', 'Gligar', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela'], + banlist: ['Berry Juice', 'Soul Dew', 'Dragon Rage', 'Sonic Boom', 'LC Uber', 'Sand Rush', 'Gligar', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela'], + }, + { + name: "[Gen 5] Monotype", + threads: [ + `• BW Monotype`, + ], + + mod: 'gen5', + searchShow: false, + ruleset: ['[Gen 5] OU', 'Same Type Clause'], }, { name: "[Gen 5] GBU Singles", @@ -1017,17 +1786,9 @@ exports.Formats = [ validate: [3, 6], battle: 3, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], banlist: ['Dark Void', 'Sky Drop'], }, - { - name: "[Gen 5] Random Battle", - - mod: 'gen5', - searchShow: false, - team: 'random', - ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], - }, { name: "[Gen 5] Custom Game", @@ -1036,32 +1797,31 @@ exports.Formats = [ canUseRandomTeam: true, debug: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, - // BW2 Doubles + // B2/W2 Doubles /////////////////////////////////////////////////////////////////// { - section: 'BW2 Doubles', + section: 'B2/W2 Doubles', column: 4, }, { name: "[Gen 5] Doubles OU", - desc: [ - "• BW2 Doubles Metagame Discussion", - "• BW2 Doubles Viability Ranking", + threads: [ + `• BW2 Doubles Metagame Discussion`, + `• BW2 Doubles Viability Ranking`, ], mod: 'gen5', gameType: 'doubles', + searchShow: false, ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause', 'Swagger Clause', 'Team Preview'], - banlist: [ - 'Arceus', 'Dialga', 'Giratina', 'Giratina-Origin', 'Groudon', 'Ho-Oh', 'Kyogre', 'Kyurem-White', 'Jirachi', - 'Lugia', 'Mewtwo', 'Palkia', 'Rayquaza', 'Reshiram', 'Zekrom', 'Soul Dew', 'Dark Void', 'Sky Drop', - ], + banlist: ['DUber', 'Soul Dew', 'Dark Void', 'Sky Drop'], }, { name: "[Gen 5] GBU Doubles", @@ -1074,7 +1834,7 @@ exports.Formats = [ validate: [4, 6], battle: 4, }, - ruleset: ['Pokemon', 'Standard GBU', 'Team Preview'], + ruleset: ['Pokemon', 'Standard GBU'], banlist: ['Dark Void', 'Sky Drop'], }, { @@ -1086,69 +1846,63 @@ exports.Formats = [ canUseRandomTeam: true, debug: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, // no restrictions, for serious (other than team preview) ruleset: ['Team Preview', 'Cancel Mod'], }, - // Past Generations + // DPP Singles /////////////////////////////////////////////////////////////////// { - section: "Past Generations", + section: "DPP Singles", column: 4, }, - { - name: "[Gen 4] OU", - desc: [ - "• DPP OU Viability Ranking", - "• DPP Sample Teams", - ], - - mod: 'gen4', - ruleset: ['Pokemon', 'Standard', 'Evasion Abilities Clause'], - banlist: ['Uber'], - }, { name: "[Gen 4] Ubers", - desc: [ - "• DPP Ubers Viability Ranking", - "• DPP Ubers Sample Teams", + threads: [ + `• DPP Ubers Information & Resources`, + `• DPP Ubers Viability Ranking`, ], mod: 'gen4', + searchShow: false, ruleset: ['Pokemon', 'Standard'], banlist: ['Arceus'], }, { - name: "[Gen 4] UU", - desc: [ - "• DPP UU Viability Ranking", - "• DPP Sample Teams", + name: "[Gen 4] NU", + threads: [ + `• DPP NU Metagame Discussion`, + `• DPP NU Viability Ranking`, ], mod: 'gen4', - ruleset: ['Pokemon', 'Standard'], - banlist: ['Uber', 'OU', 'BL'], + searchShow: false, + ruleset: ['[Gen 4] UU'], + banlist: ['UU', 'NUBL'], }, { name: "[Gen 4] LC", - desc: [ - "• DPP LC Guide", - "• DPP Sample Teams", + threads: [ + `• DPP LC Guide`, + `• DPP LC Viability Ranking`, ], mod: 'gen4', + searchShow: false, maxLevel: 5, ruleset: ['Pokemon', 'Standard', 'Little Cup'], - banlist: ['LC Uber', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma', 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Sonic Boom'], + banlist: ['LC Uber', 'Misdreavus', 'Murkrow', 'Scyther', 'Sneasel', 'Tangela', 'Yanma', 'Berry Juice', 'Deep Sea Tooth', 'Dragon Rage', 'Hypnosis', 'Sonic Boom'], }, { - name: "[Gen 4] Random Battle", + name: "[Gen 4] Anything Goes", mod: 'gen4', - team: 'random', - ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + searchShow: false, + ruleset: ['Pokemon', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], + banlist: ['Illegal', 'Unreleased'], }, { name: "[Gen 4] Custom Game", @@ -1158,10 +1912,30 @@ exports.Formats = [ canUseRandomTeam: true, debug: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, // no restrictions ruleset: ['Cancel Mod'], }, + + // DPP Doubles + /////////////////////////////////////////////////////////////////// + + { + section: "DPP Doubles", + column: 4, + }, + { + name: "[Gen 4] Doubles OU", + threads: [`• DPP Doubles`], + + mod: 'gen4', + gameType: 'doubles', + searchShow: false, + ruleset: ['[Gen 4] OU'], + banlist: ['Explosion', 'Soul Dew'], + unbanlist: ['Garchomp', 'Latias', 'Latios', 'Manaphy', 'Mew', 'Salamence', 'Wobbuffet', 'Wynaut'], + }, { name: "[Gen 4] Doubles Custom Game", @@ -1171,38 +1945,53 @@ exports.Formats = [ canUseRandomTeam: true, debug: true, maxLevel: 9999, + onBegin() { this.trunc = n => Math.trunc(n); }, defaultLevel: 100, // no restrictions ruleset: ['Cancel Mod'], }, + + // Past Generations + /////////////////////////////////////////////////////////////////// + { - name: "[Gen 3] OU", - desc: [ - "• ADV OU Viability Ranking", - "• ADV Sample Teams", + section: "Past Generations", + column: 4, + }, + { + name: "[Gen 3] Ubers", + threads: [ + `• ADV Ubers Information & Resources`, + `• ADV Ubers Viability Ranking`, ], mod: 'gen3', + searchShow: false, ruleset: ['Pokemon', 'Standard'], - banlist: ['Uber', 'Smeargle + Ingrain'], + banlist: ['Smeargle + Ingrain', 'Wobbuffet + Leftovers'], }, { - name: "[Gen 3] Ubers", - desc: [ - "• ADV Ubers Viability Ranking", - "• ADV Ubers Sample Teams", + name: "[Gen 3] UU", + threads: [ + `• ADV UU Metagame Discussion`, + `• ADV UU Viability Rankings`, ], mod: 'gen3', - ruleset: ['Pokemon', 'Standard'], - banlist: ['Wobbuffet + Leftovers'], + searchShow: false, + ruleset: ['[Gen 3] OU'], + banlist: ['OU', 'UUBL'], }, { - name: "[Gen 3] Random Battle", + name: "[Gen 3] NU", + threads: [ + `• ADV NU Viability Rankings`, + ], mod: 'gen3', - team: 'random', - ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + searchShow: false, + ruleset: ['[Gen 3] UU'], + banlist: ['UU'], }, { name: "[Gen 3] Custom Game", @@ -1213,21 +2002,19 @@ exports.Formats = [ ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], }, { - name: "[Gen 2] OU", - desc: [ - "• GSC OU Viability Ranking", - "• GSC Sample Teams", - ], + name: "[Gen 3] Doubles Custom Game", - mod: 'gen2', - ruleset: ['Pokemon', 'Standard'], - banlist: ['Uber'], + mod: 'gen3', + gameType: 'doubles', + searchShow: false, + debug: true, + ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], }, { name: "[Gen 2] Ubers", - desc: [ - "• GSC Ubers Discussion", - "• GSC Sample Teams", + threads: [ + `• GSC Ubers Information & Resources`, + `• GSC Sample Teams`, ], mod: 'gen2', @@ -1235,11 +2022,22 @@ exports.Formats = [ ruleset: ['Pokemon', 'Standard'], }, { - name: "[Gen 2] Random Battle", + name: "[Gen 2] UU", + threads: [`• GSC UU`], mod: 'gen2', - team: 'random', - ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], + searchShow: false, + ruleset: ['[Gen 2] OU'], + banlist: ['OU', 'UUBL'], + }, + { + name: "[Gen 2] NU", + threads: [`• GSC NU`], + + mod: 'gen2', + searchShow: false, + ruleset: ['[Gen 2] UU'], + banlist: ['UU'], }, { name: "[Gen 2] Custom Game", @@ -1250,29 +2048,34 @@ exports.Formats = [ ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], }, { - name: "[Gen 1] OU", - desc: [ - "• RBY OU Viability Ranking", - "• RBY Sample Teams", + name: "[Gen 1] Ubers", + threads: [ + `• RBY Ubers Viability Ranking`, + `• RBY Sample Teams`, ], mod: 'gen1', + searchShow: false, ruleset: ['Pokemon', 'Standard'], - banlist: ['Uber'], }, { - name: "[Gen 1] Ubers", - desc: [ - "• RBY Ubers Viability Ranking", - "• RBY Sample Teams", + name: "[Gen 1] UU", + threads: [ + `• RBY UU General Discussion`, + `• RBY UU Viability Ranking`, ], mod: 'gen1', searchShow: false, - ruleset: ['Pokemon', 'Standard'], + ruleset: ['[Gen 1] OU'], + banlist: ['OU', 'UUBL'], }, { name: "[Gen 1] OU (tradeback)", + desc: `RBY OU with movepool additions from the Time Capsule.`, + threads: [ + `• Information`, + ], mod: 'gen1', searchShow: false, @@ -1283,23 +2086,7 @@ exports.Formats = [ ], }, { - name: "[Gen 1] Random Battle", - - mod: 'gen1', - team: 'random', - ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], - }, - { - name: "[Gen 1] Challenge Cup", - - mod: 'gen1', - team: 'randomCC', - searchShow: false, - challengeShow: false, - ruleset: ['Pokemon', 'Sleep Clause Mod', 'HP Percentage Mod', 'Cancel Mod'], - }, - { - name: "[Gen 1] Stadium", + name: "[Gen 1] Stadium OU", mod: 'stadium', searchShow: false, @@ -1318,3 +2105,5 @@ exports.Formats = [ ruleset: ['Pokemon', 'HP Percentage Mod', 'Cancel Mod'], }, ]; + +exports.Formats = Formats; diff --git a/data/abilities.js b/data/abilities.js index 97f0b5164bd18..f57efd1068adb 100644 --- a/data/abilities.js +++ b/data/abilities.js @@ -38,11 +38,20 @@ Ratings and how they work: 'use strict'; -exports.BattleAbilities = { +/**@type {{[k: string]: AbilityData}} */ +let BattleAbilities = { + "noability": { + shortDesc: "Does nothing.", + id: "noability", + isNonstandard: "gen2", + name: "No Ability", + rating: 0.1, + num: 0, + }, "adaptability": { desc: "This Pokemon's moves that match one of its types have a same-type attack bonus (STAB) of 2 instead of 1.5.", shortDesc: "This Pokemon's same-type attack bonus (STAB) is 2 instead of 1.5.", - onModifyMove: function (move) { + onModifyMove(move) { move.stab = 2; }, id: "adaptability", @@ -51,12 +60,12 @@ exports.BattleAbilities = { num: 91, }, "aftermath": { - desc: "If this Pokemon is knocked out with a contact move, 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.", + desc: "If this Pokemon is knocked out with a contact move, that move's user loses 1/4 of its maximum HP, rounded down. If any active Pokemon has the Damp Ability, this effect is prevented.", shortDesc: "If this Pokemon is KOed with a contact move, that move's user loses 1/4 its max HP.", id: "aftermath", name: "Aftermath", onAfterDamageOrder: 1, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact'] && !target.hp) { this.damage(source.maxhp / 4, source, target); } @@ -68,18 +77,15 @@ exports.BattleAbilities = { desc: "This Pokemon's Normal-type moves become Flying-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 Flying type and have 1.2x power.", onModifyMovePriority: -1, - onModifyMove: function (move, pokemon) { - if (move.type === 'Normal' && !(move.id in {naturalgift:1, revelationdance:1}) && !(move.isZ && move.category !== 'Status')) { + onModifyMove(move, pokemon) { + if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) { move.type = 'Flying'; - if (move.category !== 'Status') pokemon.addVolatile('aerilate'); + move.aerilateBoosted = true; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x1333, 0x1000]); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.aerilateBoosted) return this.chainModify([0x1333, 0x1000]); }, id: "aerilate", name: "Aerilate", @@ -88,24 +94,23 @@ exports.BattleAbilities = { }, "airlock": { shortDesc: "While this Pokemon is active, the effects of weather conditions are disabled.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Air Lock'); }, suppressWeather: true, id: "airlock", name: "Air Lock", - rating: 3, + rating: 2.5, num: 76, }, "analytic": { desc: "The power of this Pokemon's move is multiplied by 1.3 if it is the last to move in a turn. Does not affect Doom Desire and Future Sight.", shortDesc: "This Pokemon's attacks have 1.3x power if it is the last to move in a turn.", onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon) { + onBasePower(basePower, pokemon) { let boosted = true; let allActives = pokemon.side.active.concat(pokemon.side.foe.active); - for (let i = 0; i < allActives.length; i++) { - let target = allActives[i]; + for (const target of allActives) { if (target === pokemon) continue; if (this.willMove(target)) { boosted = false; @@ -125,7 +130,7 @@ exports.BattleAbilities = { "angerpoint": { desc: "If this Pokemon, but not its substitute, is struck by a critical hit, its Attack is raised by 12 stages.", shortDesc: "If this Pokemon (not its substitute) takes a critical hit, its Attack is raised 12 stages.", - onHit: function (target, source, move) { + onHit(target, source, move) { if (!target.hp) return; if (move && move.effectType === 'Move' && move.crit) { target.setBoost({atk: 6}); @@ -140,12 +145,11 @@ exports.BattleAbilities = { "anticipation": { desc: "On switch-in, this Pokemon is alerted if any opposing Pokemon has an attack that is super effective on this Pokemon, or an OHKO move. Counter, Metal Burst, and Mirror Coat count as attacking moves of their respective types, while Hidden Power, Judgment, Natural Gift, Techno Blast, and Weather Ball are considered Normal-type moves.", shortDesc: "On switch-in, this Pokemon shudders if any foe has a supereffective or OHKO move.", - onStart: function (pokemon) { - let targets = pokemon.side.foe.active; - for (let i = 0; i < targets.length; i++) { - if (!targets[i] || targets[i].fainted) continue; - for (let j = 0; j < targets[i].moveset.length; j++) { - let move = this.getMove(targets[i].moveset[j].move); + onStart(pokemon) { + for (const target of pokemon.side.foe.active) { + if (!target || target.fainted) continue; + for (const moveSlot of target.moveSlots) { + let move = this.getMove(moveSlot.move); if (move.category !== 'Status' && (this.getImmunity(move.type, pokemon) && this.getEffectiveness(move.type, pokemon) > 0 || move.ohko)) { this.add('-ability', pokemon, 'Anticipation'); return; @@ -161,13 +165,13 @@ exports.BattleAbilities = { "arenatrap": { desc: "Prevents adjacent opposing Pokemon from choosing to switch out unless they are immune to trapping or are airborne.", shortDesc: "Prevents adjacent foes from choosing to switch unless they are airborne.", - onFoeTrapPokemon: function (pokemon) { + onFoeTrapPokemon(pokemon) { if (!this.isAdjacent(pokemon, this.effectData.target)) return; if (pokemon.isGrounded()) { pokemon.tryTrap(true); } }, - onFoeMaybeTrapPokemon: function (pokemon, source) { + onFoeMaybeTrapPokemon(pokemon, source) { if (!source) source = this.effectData.target; if (!this.isAdjacent(pokemon, source)) return; if (pokemon.isGrounded(!pokemon.knownType)) { // Negate immunity if the type is unknown @@ -182,8 +186,8 @@ exports.BattleAbilities = { "aromaveil": { desc: "This Pokemon and its allies cannot be affected by Attract, Disable, Encore, Heal Block, Taunt, or Torment.", shortDesc: "Protects user/allies from Attract, Disable, Encore, Heal Block, Taunt, and Torment.", - onAllyTryAddVolatile: function (status, target, source, effect) { - if (status.id in {attract:1, disable:1, encore:1, healblock:1, taunt:1, torment:1}) { + onAllyTryAddVolatile(status, target, source, effect) { + if (['attract', 'disable', 'encore', 'healblock', 'taunt', 'torment'].includes(status.id)) { if (effect.effectType === 'Move') { this.add('-activate', this.effectData.target, 'ability: Aroma Veil', '[of] ' + target); } @@ -196,17 +200,14 @@ exports.BattleAbilities = { num: 165, }, "aurabreak": { - desc: "While this Pokemon is active, the effects of the Abilities Dark Aura and Fairy Aura are reversed, multiplying the power of Dark- and Fairy-type moves, respectively, by 3/4 instead of 1.33.", + desc: "While this Pokemon is active, the effects of the Dark Aura and Fairy Aura Abilities are reversed, multiplying the power of Dark- and Fairy-type moves, respectively, by 3/4 instead of 1.33.", shortDesc: "While this Pokemon is active, the Dark Aura and Fairy Aura power modifier is 0.75x.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Aura Break'); }, - onAnyTryPrimaryHit: function (target, source, move) { + onAnyTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; - source.addVolatile('aurabreak'); - }, - effect: { - duration: 1, + move.hasAuraBreak = true; }, id: "aurabreak", name: "Aura Break", @@ -218,10 +219,9 @@ exports.BattleAbilities = { shortDesc: "Causes sleeping adjacent foes to lose 1/8 of their max HP at the end of each turn.", onResidualOrder: 26, onResidualSubOrder: 1, - onResidual: function (pokemon) { + onResidual(pokemon) { if (!pokemon.hp) return; - for (let i = 0; i < pokemon.side.foe.active.length; i++) { - let target = pokemon.side.foe.active[i]; + for (const target of pokemon.side.foe.active) { if (!target || !target.hp) continue; if (target.status === 'slp' || target.hasAbility('comatose')) { this.damage(target.maxhp / 8, target, pokemon); @@ -236,7 +236,7 @@ exports.BattleAbilities = { "battery": { shortDesc: "This Pokemon's allies have the power of their special attacks multiplied by 1.3.", onBasePowerPriority: 8, - onAllyBasePower: function (basePower, attacker, defender, move) { + onAllyBasePower(basePower, attacker, defender, move) { if (attacker !== this.effectData.target && move.category === 'Special') { this.debug('Battery boost'); return this.chainModify([0x14CD, 0x1000]); @@ -258,17 +258,14 @@ exports.BattleAbilities = { "battlebond": { desc: "If this Pokemon is a Greninja, it transforms into Ash-Greninja after knocking out a Pokemon. As Ash-Greninja, its Water Shuriken has 20 base power and always hits 3 times.", shortDesc: "After KOing a Pokemon: becomes Ash-Greninja, Water Shuriken: 20 power, hits 3x.", - onSourceFaint: function (target, source, effect) { + onSourceFaint(target, source, effect) { if (effect && effect.effectType === 'Move' && source.template.speciesid === 'greninja' && source.hp && !source.transformed && source.side.foe.pokemonLeft) { this.add('-activate', source, 'ability: Battle Bond'); - let template = this.getTemplate('Greninja-Ash'); - source.formeChange(template); - source.baseTemplate = template; - source.details = template.species + (source.level === 100 ? '' : ', L' + source.level) + (source.gender === '' ? '' : ', ' + source.gender) + (source.set.shiny ? ', shiny' : ''); - this.add('detailschange', source, source.details); + source.formeChange('Greninja-Ash', this.effect, true); } }, - onModifyMove: function (move, attacker) { + onModifyMovePriority: -1, + onModifyMove(move, attacker) { if (move.id === 'watershuriken' && attacker.template.species === 'Greninja-Ash') { move.multihit = 3; } @@ -281,7 +278,7 @@ exports.BattleAbilities = { "beastboost": { desc: "This Pokemon's highest stat is raised by 1 stage if it attacks and knocks out another Pokemon.", shortDesc: "This Pokemon's highest stat is raised by 1 if it attacks and KOes another Pokemon.", - onSourceFaint: function (target, source, effect) { + onSourceFaint(target, source, effect) { if (effect && effect.effectType === 'Move') { let stat = 'atk'; let bestStat = 0; @@ -291,7 +288,7 @@ exports.BattleAbilities = { bestStat = source.stats[i]; } } - this.boost({[stat]:1}, source); + this.boost({[stat]: 1}, source); } }, id: "beastboost", @@ -302,7 +299,7 @@ exports.BattleAbilities = { "berserk": { desc: "When this Pokemon has more than 1/2 its maximum HP and takes damage from an attack bringing it to 1/2 or less of its maximum HP, its Special Attack is raised by 1 stage. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect.", shortDesc: "This Pokemon's Sp. Atk is raised by 1 when it reaches 1/2 or less of its max HP.", - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (!source || source === target || !target.hp || !move.totalDamage) return; if (target.hp <= target.maxhp / 2 && target.hp + move.totalDamage > target.maxhp / 2) { this.boost({spa: 1}); @@ -315,10 +312,10 @@ exports.BattleAbilities = { }, "bigpecks": { shortDesc: "Prevents other Pokemon from lowering this Pokemon's Defense stat stage.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target === source) return; - if (boost['def'] && boost['def'] < 0) { - delete boost['def']; + if (boost.def && boost.def < 0) { + delete boost.def; if (!effect.secondaries) this.add("-fail", target, "unboost", "Defense", "[from] ability: Big Pecks", "[of] " + target); } }, @@ -329,16 +326,16 @@ exports.BattleAbilities = { }, "blaze": { 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 Fire-type attack.", - shortDesc: "When this Pokemon has 1/3 or less of its max HP, its Fire attacks do 1.5x damage.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's attacking stat is 1.5x with Fire attacks.", onModifyAtkPriority: 5, - onModifyAtk: function (atk, attacker, defender, move) { + onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) { this.debug('Blaze boost'); return this.chainModify(1.5); } }, onModifySpAPriority: 5, - onModifySpA: function (atk, attacker, defender, move) { + onModifySpA(atk, attacker, defender, move) { if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) { this.debug('Blaze boost'); return this.chainModify(1.5); @@ -352,21 +349,21 @@ exports.BattleAbilities = { "bulletproof": { desc: "This Pokemon is immune to ballistic moves. Ballistic moves include Bullet Seed, Octazooka, Barrage, Rock Wrecker, Zap Cannon, Acid Spray, Aura Sphere, Focus Blast, and all moves with Ball or Bomb in their name.", shortDesc: "Makes user immune to ballistic moves (Shadow Ball, Sludge Bomb, Focus Blast, etc).", - onTryHit: function (pokemon, target, move) { + onTryHit(pokemon, target, move) { if (move.flags['bullet']) { - this.add('-immune', pokemon, '[msg]', '[from] ability: Bulletproof'); + this.add('-immune', pokemon, '[from] ability: Bulletproof'); return null; } }, id: "bulletproof", name: "Bulletproof", - rating: 3, + rating: 3.5, num: 171, }, "cheekpouch": { desc: "If this Pokemon eats a Berry, it restores 1/3 of its maximum HP, rounded down, in addition to the Berry's effect.", shortDesc: "If this Pokemon eats a Berry, it restores 1/3 of its max HP after the Berry's effect.", - onEatItem: function (item, pokemon) { + onEatItem(item, pokemon) { this.heal(pokemon.maxhp / 3); }, id: "cheekpouch", @@ -376,23 +373,25 @@ exports.BattleAbilities = { }, "chlorophyll": { shortDesc: "If Sunny Day is active, this Pokemon's Speed is doubled.", - onModifySpe: function (spe) { + onModifySpe(spe) { if (this.isWeather(['sunnyday', 'desolateland'])) { return this.chainModify(2); } }, id: "chlorophyll", name: "Chlorophyll", - rating: 2.5, + rating: 3, num: 34, }, "clearbody": { shortDesc: "Prevents other Pokemon from lowering this Pokemon's stat stages.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target === source) return; let showMsg = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { + // @ts-ignore delete boost[i]; showMsg = true; } @@ -406,30 +405,30 @@ exports.BattleAbilities = { }, "cloudnine": { shortDesc: "While this Pokemon is active, the effects of weather conditions are disabled.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Cloud Nine'); }, suppressWeather: true, id: "cloudnine", name: "Cloud Nine", - rating: 3, + rating: 2.5, num: 13, }, "colorchange": { desc: "This Pokemon's type changes to match the type of the last move that hit it, unless that type is already one of its types. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect.", shortDesc: "This Pokemon's type changes to the type of a move it's hit by, unless it has the type.", - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (!target.hp) return; let type = move.type; if (target.isActive && move.effectType === 'Move' && move.category !== 'Status' && type !== '???' && !target.hasType(type)) { if (!target.setType(type)) return false; - this.add('-start', target, 'typechange', type, '[from] Color Change'); + this.add('-start', target, 'typechange', type, '[from] ability: Color Change'); if (target.side.active.length === 2 && target.position === 1) { // Curse Glitch - const decision = this.willMove(target); - if (decision && decision.move.id === 'curse') { - decision.targetLoc = -1; + const action = this.willMove(target); + if (action && action.move.id === 'curse') { + action.targetLoc = -1; } } } @@ -440,14 +439,14 @@ exports.BattleAbilities = { num: 16, }, "comatose": { - desc: "This Pokemon cannot be statused, and is considered to be asleep. Moongeist Beam, Sunsteel Strike, and the Abilities Mold Breaker, Teravolt, and Turboblaze cannot ignore this Ability.", + desc: "This Pokemon cannot be statused, and is considered to be asleep. Moongeist Beam, Sunsteel Strike, and the Mold Breaker, Teravolt, and Turboblaze Abilities cannot ignore this Ability.", shortDesc: "This Pokemon cannot be statused, and is considered to be asleep.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Comatose'); }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Comatose'); + this.add('-immune', target, '[from] ability: Comatose'); return false; }, // Permanent sleep "status" implemented in the relevant sleep-checking effects @@ -460,18 +459,19 @@ exports.BattleAbilities = { "competitive": { desc: "This Pokemon's Special Attack is raised by 2 stages for each of its stat stages that is lowered by an opposing Pokemon.", shortDesc: "This Pokemon's Sp. Atk is raised by 2 for each of its stats that is lowered by a foe.", - onAfterEachBoost: function (boost, target, source) { + onAfterEachBoost(boost, target, source) { if (!source || target.side === source.side) { return; } let statsLowered = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { statsLowered = true; } } if (statsLowered) { - this.boost({spa: 2}, null, null, null, true); + this.boost({spa: 2}, target, target, null, true); } }, id: "competitive", @@ -481,7 +481,7 @@ exports.BattleAbilities = { }, "compoundeyes": { shortDesc: "This Pokemon's moves have their accuracy multiplied by 1.3.", - onSourceModifyAccuracy: function (accuracy) { + onSourceModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; this.debug('compoundeyes - enhancing accuracy'); return accuracy * 1.3; @@ -493,9 +493,10 @@ exports.BattleAbilities = { }, "contrary": { shortDesc: "If this Pokemon has a stat stage raised it is lowered instead, and vice versa.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (effect && effect.id === 'zpower') return; for (let i in boost) { + // @ts-ignore boost[i] *= -1; } }, @@ -515,10 +516,10 @@ exports.BattleAbilities = { "cursedbody": { desc: "If this Pokemon is hit by an attack, there is a 30% chance that move gets disabled unless one of the attacker's moves is already disabled.", shortDesc: "If this Pokemon is hit by an attack, there is a 30% chance that move gets disabled.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (!source || source.volatiles['disable']) return; if (source !== target && move && move.effectType === 'Move' && !move.isFutureMove) { - if (this.random(10) < 3) { + if (this.randomChance(3, 10)) { source.addVolatile('disable', this.effectData.target); } } @@ -531,9 +532,9 @@ exports.BattleAbilities = { "cutecharm": { desc: "There is a 30% chance a Pokemon making contact with this Pokemon will become infatuated if it is of the opposite gender.", shortDesc: "30% chance of infatuating Pokemon of the opposite gender if they make contact.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move && move.flags['contact']) { - if (this.random(10) < 3) { + if (this.randomChance(3, 10)) { source.addVolatile('attract', this.effectData.target); } } @@ -544,17 +545,17 @@ exports.BattleAbilities = { num: 56, }, "damp": { - desc: "While this Pokemon is active, Self-Destruct, Explosion, and the Ability Aftermath are prevented from having an effect.", - shortDesc: "While this Pokemon is active, Self-Destruct, Explosion, and Aftermath have no effect.", + desc: "While this Pokemon is active, Explosion, Mind Blown, Self-Destruct, and the Aftermath Ability are prevented from having an effect.", + shortDesc: "Prevents Explosion/Mind Blown/Self-Destruct/Aftermath while this Pokemon is active.", id: "damp", - onAnyTryMove: function (target, source, effect) { - if (effect.id === 'selfdestruct' || effect.id === 'explosion') { + onAnyTryMove(target, source, effect) { + if (['explosion', 'mindblown', 'selfdestruct'].includes(effect.id)) { this.attrLastMove('[still]'); this.add('cant', this.effectData.target, 'ability: Damp', effect, '[of] ' + target); return false; } }, - onAnyDamage: function (damage, target, source, effect) { + onAnyDamage(damage, target, source, effect) { if (effect && effect.id === 'aftermath') { return false; } @@ -567,30 +568,24 @@ exports.BattleAbilities = { desc: "After another Pokemon uses a dance move, this Pokemon uses the same move. Moves used by this Ability cannot be copied again.", shortDesc: "After another Pokemon uses a dance move, this Pokemon uses the same move.", id: "dancer", - onAnyAfterMove: function (source, target, move) { - if (!this.effectData.target.hp || source === this.effectData.target || move.isExternal) return; - if (move.flags['dance']) { - this.faintMessages(); - this.add('-activate', this.effectData.target, 'ability: Dancer'); - this.runMove(move.id, this.effectData.target, 0, this.getAbility('dancer'), undefined, true); - } - }, name: "Dancer", + // implemented in runMove in scripts.js rating: 2.5, num: 216, }, "darkaura": { desc: "While this Pokemon is active, the power of Dark-type moves used by active Pokemon is multiplied by 1.33.", shortDesc: "While this Pokemon is active, a Dark move used by any Pokemon has 1.33x power.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Dark Aura'); }, - onAnyTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status') return; - if (move.type === 'Dark') { - source.addVolatile('aura'); - } + onAnyBasePower(basePower, source, target, move) { + if (target === source || move.category === 'Status' || move.type !== 'Dark') return; + if (!move.auraBooster) move.auraBooster = this.effectData.target; + if (move.auraBooster !== this.effectData.target) return; + return this.chainModify([move.hasAuraBreak ? 0x0C00 : 0x1547, 0x1000]); }, + isUnbreakable: true, id: "darkaura", name: "Dark Aura", rating: 3, @@ -599,7 +594,7 @@ exports.BattleAbilities = { "dazzling": { desc: "While this Pokemon is active, priority moves from opposing Pokemon targeted at allies are prevented from having an effect.", shortDesc: "While this Pokemon is active, allies are protected from opposing priority moves.", - onFoeTryMove: function (target, source, effect) { + onFoeTryMove(target, source, effect) { if ((source.side === this.effectData.target.side || effect.id === 'perishsong') && effect.priority > 0.1 && effect.target !== 'foeSide') { this.attrLastMove('[still]'); this.add('cant', this.effectData.target, 'ability: Dazzling', effect, '[of] ' + target); @@ -608,20 +603,20 @@ exports.BattleAbilities = { }, id: "dazzling", name: "Dazzling", - rating: 3.5, + rating: 3, num: 219, }, "defeatist": { desc: "While this Pokemon has 1/2 or less of its maximum HP, its Attack and Special Attack are halved.", shortDesc: "While this Pokemon has 1/2 or less of its max HP, its Attack and Sp. Atk are halved.", onModifyAtkPriority: 5, - onModifyAtk: function (atk, pokemon) { + onModifyAtk(atk, pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { return this.chainModify(0.5); } }, onModifySpAPriority: 5, - onModifySpA: function (atk, pokemon) { + onModifySpA(atk, pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { return this.chainModify(0.5); } @@ -634,18 +629,19 @@ exports.BattleAbilities = { "defiant": { desc: "This Pokemon's Attack is raised by 2 stages for each of its stat stages that is lowered by an opposing Pokemon.", shortDesc: "This Pokemon's Attack is raised by 2 for each of its stats that is lowered by a foe.", - onAfterEachBoost: function (boost, target, source) { + onAfterEachBoost(boost, target, source) { if (!source || target.side === source.side) { return; } let statsLowered = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { statsLowered = true; } } if (statsLowered) { - this.boost({atk: 2}, null, null, null, true); + this.boost({atk: 2}, target, target, null, true); } }, id: "defiant", @@ -656,17 +652,16 @@ exports.BattleAbilities = { "deltastream": { desc: "On switch-in, the weather becomes strong winds that remove the weaknesses of the Flying type from Flying-type Pokemon. This weather remains in effect until this Ability is no longer active for any Pokemon, or the weather is changed by Desolate Land or Primordial Sea.", shortDesc: "On switch-in, strong winds begin until this Ability is not active in battle.", - onStart: function (source) { + onStart(source) { this.setWeather('deltastream'); }, - onAnySetWeather: function (target, source, weather) { - if (this.getWeather().id === 'deltastream' && !(weather.id in {desolateland:1, primordialsea:1, deltastream:1})) return false; + onAnySetWeather(target, source, weather) { + if (this.getWeather().id === 'deltastream' && !['desolateland', 'primordialsea', 'deltastream'].includes(weather.id)) return false; }, - onEnd: function (pokemon) { + onEnd(pokemon) { if (this.weatherData.source !== pokemon) return; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - let target = this.sides[i].active[j]; + for (const side of this.sides) { + for (const target of side.active) { if (target === pokemon) continue; if (target && target.hp && target.hasAbility('deltastream')) { this.weatherData.source = target; @@ -684,17 +679,16 @@ exports.BattleAbilities = { "desolateland": { desc: "On switch-in, the weather becomes extremely harsh sunlight that prevents damaging Water-type moves from executing, in addition to all the effects of Sunny Day. This weather remains in effect until this Ability is no longer active for any Pokemon, or the weather is changed by Delta Stream or Primordial Sea.", shortDesc: "On switch-in, extremely harsh sunlight begins until this Ability is not active in battle.", - onStart: function (source) { + onStart(source) { this.setWeather('desolateland'); }, - onAnySetWeather: function (target, source, weather) { - if (this.getWeather().id === 'desolateland' && !(weather.id in {desolateland:1, primordialsea:1, deltastream:1})) return false; + onAnySetWeather(target, source, weather) { + if (this.getWeather().id === 'desolateland' && !['desolateland', 'primordialsea', 'deltastream'].includes(weather.id)) return false; }, - onEnd: function (pokemon) { + onEnd(pokemon) { if (this.weatherData.source !== pokemon) return; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - let target = this.sides[i].active[j]; + for (const side of this.sides) { + for (const target of side.active) { if (target === pokemon) continue; if (target && target.hp && target.hasAbility('desolateland')) { this.weatherData.source = target; @@ -713,27 +707,23 @@ exports.BattleAbilities = { desc: "If this Pokemon is a Mimikyu, the first hit it takes in battle deals 0 neutral damage. Its disguise is then broken and it changes to Busted Form. Confusion damage also breaks the disguise.", shortDesc: "If this Pokemon is a Mimikyu, the first hit it takes in battle deals 0 neutral damage.", onDamagePriority: 1, - onDamage: function (damage, target, source, effect) { - if (effect && effect.effectType === 'Move' && target.template.speciesid === 'mimikyu' && !target.transformed) { + onDamage(damage, target, source, effect) { + if (effect && effect.effectType === 'Move' && ['mimikyu', 'mimikyutotem'].includes(target.template.speciesid) && !target.transformed) { this.add('-activate', target, 'ability: Disguise'); this.effectData.busted = true; return 0; } }, - onEffectiveness: function (typeMod, type, move) { - if (!this.activeTarget) return; - let pokemon = this.activeTarget; - if (pokemon.template.speciesid !== 'mimikyu' || pokemon.transformed) return; - if (!pokemon.runImmunity(move.type)) return; + onEffectiveness(typeMod, target, type, move) { + if (!target) return; + if (!['mimikyu', 'mimikyutotem'].includes(target.template.speciesid) || target.transformed || (target.volatiles['substitute'] && !(move.flags['authentic'] || move.infiltrates))) return; + if (!target.runImmunity(move.type)) return; return 0; }, - onUpdate: function (pokemon) { - if (pokemon.template.speciesid === 'mimikyu' && this.effectData.busted) { - let template = this.getTemplate('Mimikyu-Busted'); - pokemon.formeChange(template); - pokemon.baseTemplate = template; - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('detailschange', pokemon, pokemon.details); + onUpdate(pokemon) { + if (['mimikyu', 'mimikyutotem'].includes(pokemon.template.speciesid) && this.effectData.busted) { + let templateid = pokemon.template.speciesid === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted'; + pokemon.formeChange(templateid, this.effect, true); } }, id: "disguise", @@ -744,19 +734,18 @@ exports.BattleAbilities = { "download": { desc: "On switch-in, this Pokemon's Attack or Special Attack is raised by 1 stage based on the weaker combined defensive stat of all opposing Pokemon. Attack is raised if their Defense is lower, and Special Attack is raised if their Special Defense is the same or lower.", shortDesc: "On switch-in, Attack or Sp. Atk is raised 1 stage based on the foes' weaker Defense.", - onStart: function (pokemon) { - let foeactive = pokemon.side.foe.active; + onStart(pokemon) { let totaldef = 0; let totalspd = 0; - for (let i = 0; i < foeactive.length; i++) { - if (!foeactive[i] || foeactive[i].fainted) continue; - totaldef += foeactive[i].getStat('def', false, true); - totalspd += foeactive[i].getStat('spd', false, true); + for (const target of pokemon.side.foe.active) { + if (!target || target.fainted) continue; + totaldef += target.getStat('def', false, true); + totalspd += target.getStat('spd', false, true); } if (totaldef && totaldef >= totalspd) { - this.boost({spa:1}); + this.boost({spa: 1}); } else if (totalspd) { - this.boost({atk:1}); + this.boost({atk: 1}); } }, id: "download", @@ -766,10 +755,10 @@ exports.BattleAbilities = { }, "drizzle": { shortDesc: "On switch-in, this Pokemon summons Rain Dance.", - onStart: function (source) { - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i].choice === 'runPrimal' && this.queue[i].pokemon === source && source.template.speciesid === 'kyogre') return; - if (this.queue[i].choice !== 'runSwitch' && this.queue[i].choice !== 'runPrimal') break; + onStart(source) { + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.template.speciesid === 'kyogre') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; } this.setWeather('raindance'); }, @@ -780,10 +769,10 @@ exports.BattleAbilities = { }, "drought": { shortDesc: "On switch-in, this Pokemon summons Sunny Day.", - onStart: function (source) { - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i].choice === 'runPrimal' && this.queue[i].pokemon === source && source.template.speciesid === 'groudon') return; - if (this.queue[i].choice !== 'runSwitch' && this.queue[i].choice !== 'runPrimal') break; + onStart(source) { + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.template.speciesid === 'groudon') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; } this.setWeather('sunnyday'); }, @@ -795,22 +784,22 @@ exports.BattleAbilities = { "dryskin": { desc: "This Pokemon is immune to Water-type moves and restores 1/4 of its maximum HP, rounded down, when hit by a Water-type move. The power of Fire-type moves is multiplied by 1.25 when used on this Pokemon. At the end of each turn, this Pokemon restores 1/8 of its maximum HP, rounded down, if the weather is Rain Dance, and loses 1/8 of its maximum HP, rounded down, if the weather is Sunny Day.", shortDesc: "This Pokemon is healed 1/4 by Water, 1/8 by Rain; is hurt 1.25x by Fire, 1/8 by Sun.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Water') { if (!this.heal(target.maxhp / 4)) { - this.add('-immune', target, '[msg]', '[from] ability: Dry Skin'); + this.add('-immune', target, '[from] ability: Dry Skin'); } return null; } }, onBasePowerPriority: 7, - onFoeBasePower: function (basePower, attacker, defender, move) { + onFoeBasePower(basePower, attacker, defender, move) { if (this.effectData.target !== defender) return; if (move.type === 'Fire') { return this.chainModify(1.25); } }, - onWeather: function (target, source, effect) { + onWeather(target, source, effect) { if (effect.id === 'raindance' || effect.id === 'primordialsea') { this.heal(target.maxhp / 8); } else if (effect.id === 'sunnyday' || effect.id === 'desolateland') { @@ -827,13 +816,13 @@ exports.BattleAbilities = { id: "earlybird", name: "Early Bird", // Implemented in statuses.js - rating: 2.5, + rating: 2, num: 48, }, "effectspore": { desc: "30% chance a Pokemon making contact with this Pokemon will be poisoned, paralyzed, or fall asleep.", shortDesc: "30% chance of poison/paralysis/sleep on others making contact with this Pokemon.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move && move.flags['contact'] && !source.status && source.runStatusImmunity('powder')) { let r = this.random(100); if (r < 11) { @@ -852,7 +841,7 @@ exports.BattleAbilities = { }, "electricsurge": { shortDesc: "On switch-in, this Pokemon summons Electric Terrain.", - onStart: function (source) { + onStart(source) { this.setTerrain('electricterrain'); }, id: "electricsurge", @@ -861,9 +850,9 @@ exports.BattleAbilities = { num: 226, }, "emergencyexit": { - desc: "When this Pokemon has more than 1/2 its maximum HP and takes damage bringing it to 1/2 or less of its maximum HP, it immediately switches out to a chosen ally. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect. This effect applies to both direct and indirect damage, except Curse and Substitute on use, Belly Drum, Pain Split, Struggle recoil, and confusion damage.", + desc: "When this Pokemon has more than 1/2 its maximum HP and takes damage bringing it to 1/2 or less of its maximum HP, it immediately switches out to a chosen ally. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect. This effect applies to both direct and indirect damage, except Curse and Substitute on use, Belly Drum, Pain Split, and confusion damage.", shortDesc: "This Pokemon switches out when it reaches 1/2 or less of its maximum HP.", - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (!source || source === target || !target.hp || !move.totalDamage) return; if (target.hp <= target.maxhp / 2 && target.hp + move.totalDamage > target.maxhp / 2) { if (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return; @@ -872,7 +861,7 @@ exports.BattleAbilities = { this.add('-activate', target, 'ability: Emergency Exit'); } }, - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (!target.hp || effect.effectType === 'Move') return; if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) { if (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return; @@ -882,21 +871,22 @@ exports.BattleAbilities = { }, id: "emergencyexit", name: "Emergency Exit", - rating: 2, + rating: 1.5, num: 194, }, "fairyaura": { desc: "While this Pokemon is active, the power of Fairy-type moves used by active Pokemon is multiplied by 1.33.", shortDesc: "While this Pokemon is active, a Fairy move used by any Pokemon has 1.33x power.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Fairy Aura'); }, - onAnyTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status') return; - if (move.type === 'Fairy') { - source.addVolatile('aura'); - } + onAnyBasePower(basePower, source, target, move) { + if (target === source || move.category === 'Status' || move.type !== 'Fairy') return; + if (!move.auraBooster) move.auraBooster = this.effectData.target; + if (move.auraBooster !== this.effectData.target) return; + return this.chainModify([move.hasAuraBreak ? 0x0C00 : 0x1547, 0x1000]); }, + isUnbreakable: true, id: "fairyaura", name: "Fairy Aura", rating: 3, @@ -904,7 +894,7 @@ exports.BattleAbilities = { }, "filter": { shortDesc: "This Pokemon receives 3/4 damage from supereffective attacks.", - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.typeMod > 0) { this.debug('Filter neutralize'); return this.chainModify(0.75); @@ -917,9 +907,9 @@ exports.BattleAbilities = { }, "flamebody": { shortDesc: "30% chance a Pokemon making contact with this Pokemon will be burned.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move && move.flags['contact']) { - if (this.random(10) < 3) { + if (this.randomChance(3, 10)) { source.trySetStatus('brn', target); } } @@ -933,7 +923,7 @@ exports.BattleAbilities = { desc: "While this Pokemon is burned, the power of its special attacks is multiplied by 1.5.", shortDesc: "While this Pokemon is burned, its special attacks have 1.5x power.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (attacker.status === 'brn' && move.category === 'Special') { return this.chainModify(1.5); } @@ -946,38 +936,38 @@ exports.BattleAbilities = { "flashfire": { desc: "This Pokemon is immune to Fire-type moves. The first time it is hit by a Fire-type move, its attacking stat is multiplied by 1.5 while using a Fire-type attack as long as it remains active and has this Ability. If this Pokemon is frozen, it cannot be defrosted by Fire-type attacks.", shortDesc: "This Pokemon's Fire attacks do 1.5x damage if hit by one Fire move; Fire immunity.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Fire') { move.accuracy = true; if (!target.addVolatile('flashfire')) { - this.add('-immune', target, '[msg]', '[from] ability: Flash Fire'); + this.add('-immune', target, '[from] ability: Flash Fire'); } return null; } }, - onEnd: function (pokemon) { + onEnd(pokemon) { pokemon.removeVolatile('flashfire'); }, effect: { noCopy: true, // doesn't get copied by Baton Pass - onStart: function (target) { + onStart(target) { this.add('-start', target, 'ability: Flash Fire'); }, onModifyAtkPriority: 5, - onModifyAtk: function (atk, attacker, defender, move) { + onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Fire') { this.debug('Flash Fire boost'); return this.chainModify(1.5); } }, onModifySpAPriority: 5, - onModifySpA: function (atk, attacker, defender, move) { + onModifySpA(atk, attacker, defender, move) { if (move.type === 'Fire') { this.debug('Flash Fire boost'); return this.chainModify(1.5); } }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'ability: Flash Fire', '[silent]'); }, }, @@ -989,32 +979,30 @@ exports.BattleAbilities = { "flowergift": { desc: "If this Pokemon is a Cherrim and Sunny Day is active, it changes to Sunshine Form and the Attack and Special Defense of it and its allies are multiplied by 1.5.", shortDesc: "If user is Cherrim and Sunny Day is active, it and allies' Attack and Sp. Def are 1.5x.", - onStart: function (pokemon) { + onStart(pokemon) { delete this.effectData.forme; }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (!pokemon.isActive || pokemon.baseTemplate.baseSpecies !== 'Cherrim' || pokemon.transformed) return; if (this.isWeather(['sunnyday', 'desolateland'])) { if (pokemon.template.speciesid !== 'cherrimsunshine') { - pokemon.formeChange('Cherrim-Sunshine'); - this.add('-formechange', pokemon, 'Cherrim-Sunshine', '[msg]', '[from] ability: Flower Gift'); + pokemon.formeChange('Cherrim-Sunshine', this.effect, false, '[msg]'); } } else { if (pokemon.template.speciesid === 'cherrimsunshine') { - pokemon.formeChange('Cherrim'); - this.add('-formechange', pokemon, 'Cherrim', '[msg]', '[from] ability: Flower Gift'); + pokemon.formeChange('Cherrim', this.effect, false, '[msg]'); } } }, onModifyAtkPriority: 3, - onAllyModifyAtk: function (atk) { + onAllyModifyAtk(atk) { if (this.effectData.target.baseTemplate.baseSpecies !== 'Cherrim') return; if (this.isWeather(['sunnyday', 'desolateland'])) { return this.chainModify(1.5); } }, onModifySpDPriority: 4, - onAllyModifySpD: function (spd) { + onAllyModifySpD(spd) { if (this.effectData.target.baseTemplate.baseSpecies !== 'Cherrim') return; if (this.isWeather(['sunnyday', 'desolateland'])) { return this.chainModify(1.5); @@ -1028,20 +1016,31 @@ exports.BattleAbilities = { "flowerveil": { desc: "Grass-type Pokemon on this Pokemon's side cannot have their stat stages lowered by other Pokemon or have a major status condition inflicted on them by other Pokemon.", shortDesc: "This side's Grass types can't have stats lowered or status inflicted by other Pokemon.", - onAllyBoost: function (boost, target, source, effect) { + onAllyBoost(boost, target, source, effect) { if ((source && target === source) || !target.hasType('Grass')) return; let showMsg = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { + // @ts-ignore delete boost[i]; showMsg = true; } } if (showMsg && !effect.secondaries) this.add('-fail', this.effectData.target, 'unboost', '[from] ability: Flower Veil', '[of] ' + target); }, - onAllySetStatus: function (status, target, source, effect) { - if (target.hasType('Grass')) { - if (!effect || !effect.status) return false; + onAllySetStatus(status, target, source, effect) { + if (target.hasType('Grass') && source && target !== source && effect) { + this.debug('interrupting setStatus with Flower Veil'); + if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { + this.add('-activate', this.effectData.target, 'ability: Flower Veil', '[of] ' + target); + } + return null; + } + }, + onAllyTryAddVolatile(status, target) { + if (target.hasType('Grass') && status.id === 'yawn') { + this.debug('Flower Veil blocking yawn'); this.add('-activate', this.effectData.target, 'ability: Flower Veil', '[of] ' + target); return null; } @@ -1054,8 +1053,7 @@ exports.BattleAbilities = { "fluffy": { desc: "This Pokemon receives 1/2 damage from contact moves, but double damage from Fire moves.", shortDesc: "This Pokemon takes 1/2 damage from contact moves, 2x damage from Fire moves.", - // TODO: are either of these effects actually base power modifiers? - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { let mod = 1; if (move.type === 'Fire') mod *= 2; if (move.flags['contact']) mod /= 2; @@ -1069,7 +1067,7 @@ exports.BattleAbilities = { "forecast": { desc: "If this Pokemon is a Castform, its type changes to the current weather condition's type, except Sandstorm.", shortDesc: "Castform's type changes to the current weather condition's type, except Sandstorm.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Castform' || pokemon.transformed) return; let forme = null; switch (this.effectiveWeather()) { @@ -1089,8 +1087,7 @@ exports.BattleAbilities = { break; } if (pokemon.isActive && forme) { - pokemon.formeChange(forme); - this.add('-formechange', pokemon, forme, '[msg]', '[from] ability: Forecast'); + pokemon.formeChange(forme, this.effect, false, '[msg]'); } }, id: "forecast", @@ -1101,29 +1098,30 @@ exports.BattleAbilities = { "forewarn": { desc: "On switch-in, this Pokemon is alerted to the move with the highest power, at random, known by an opposing Pokemon.", shortDesc: "On switch-in, this Pokemon is alerted to the foes' move with the highest power.", - onStart: function (pokemon) { - let targets = pokemon.side.foe.active; + onStart(pokemon) { + /**@type {(Move|Pokemon)[][]} */ let warnMoves = []; let warnBp = 1; - for (let i = 0; i < targets.length; i++) { - if (targets[i].fainted) continue; - for (let j = 0; j < targets[i].moveset.length; j++) { - let move = this.getMove(targets[i].moveset[j].move); + for (const target of pokemon.side.foe.active) { + if (target.fainted) continue; + for (const moveSlot of target.moveSlots) { + let move = this.getMove(moveSlot.move); let bp = move.basePower; - if (move.ohko) bp = 160; + 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, targets[i]]]; + warnMoves = [[move, target]]; warnBp = bp; } else if (bp === warnBp) { - warnMoves.push([move, targets[i]]); + warnMoves.push([move, target]); } } } if (!warnMoves.length) return; - let warnMove = warnMoves[this.random(warnMoves.length)]; - this.add('-activate', pokemon, 'ability: Forewarn', warnMove[0], '[of] ' + warnMove[1]); + const [warnMoveName, warnTarget] = this.sample(warnMoves); + this.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget); }, id: "forewarn", name: "Forewarn", @@ -1134,7 +1132,7 @@ exports.BattleAbilities = { shortDesc: "This Pokemon's allies receive 3/4 damage from other Pokemon's attacks.", id: "friendguard", name: "Friend Guard", - onAnyModifyDamage: function (damage, source, target, move) { + onAnyModifyDamage(damage, source, target, move) { if (target !== this.effectData.target && target.side === this.effectData.target.side) { this.debug('Friend Guard weaken'); return this.chainModify(0.75); @@ -1145,12 +1143,11 @@ exports.BattleAbilities = { }, "frisk": { shortDesc: "On switch-in, this Pokemon identifies the held items of all opposing Pokemon.", - onStart: function (pokemon) { - let foeactive = pokemon.side.foe.active; - for (let i = 0; i < foeactive.length; i++) { - if (!foeactive[i] || foeactive[i].fainted) continue; - if (foeactive[i].item) { - this.add('-item', foeactive[i], foeactive[i].getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]'); + onStart(pokemon) { + for (const target of pokemon.side.foe.active) { + if (!target || target.fainted) continue; + if (target.item) { + this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]'); } } }, @@ -1160,13 +1157,15 @@ exports.BattleAbilities = { num: 119, }, "fullmetalbody": { - desc: "Prevents other Pokemon from lowering this Pokemon's stat stages. Moongeist Beam, Sunsteel Strike, and the Abilities Mold Breaker, Teravolt, and Turboblaze cannot ignore this Ability.", + desc: "Prevents other Pokemon from lowering this Pokemon's stat stages. Moongeist Beam, Sunsteel Strike, and the Mold Breaker, Teravolt, and Turboblaze Abilities cannot ignore this Ability.", shortDesc: "Prevents other Pokemon from lowering this Pokemon's stat stages.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target === source) return; let showMsg = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { + // @ts-ignore delete boost[i]; showMsg = true; } @@ -1182,7 +1181,7 @@ exports.BattleAbilities = { "furcoat": { shortDesc: "This Pokemon's Defense is doubled.", onModifyDefPriority: 6, - onModifyDef: function (def) { + onModifyDef(def) { return this.chainModify(2); }, id: "furcoat", @@ -1192,7 +1191,7 @@ exports.BattleAbilities = { }, "galewings": { shortDesc: "If this Pokemon is at full HP, its Flying-type moves have their priority increased by 1.", - onModifyPriority: function (priority, pokemon, target, move) { + onModifyPriority(priority, pokemon, target, move) { if (move && move.type === 'Flying' && pokemon.hp === pokemon.maxhp) return priority + 1; }, id: "galewings", @@ -1204,18 +1203,15 @@ exports.BattleAbilities = { desc: "This Pokemon's Normal-type moves become Electric-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 Electric type and have 1.2x power.", onModifyMovePriority: -1, - onModifyMove: function (move, pokemon) { - if (move.type === 'Normal' && !(move.id in {naturalgift:1, revelationdance:1}) && !(move.isZ && move.category !== 'Status')) { + onModifyMove(move, pokemon) { + if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) { move.type = 'Electric'; - if (move.category !== 'Status') pokemon.addVolatile('galvanize'); + move.galvanizeBoosted = true; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x1333, 0x1000]); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.galvanizeBoosted) return this.chainModify([0x1333, 0x1000]); }, id: "galvanize", name: "Galvanize", @@ -1231,7 +1227,7 @@ exports.BattleAbilities = { }, "gooey": { shortDesc: "Pokemon making contact with this Pokemon have their Speed lowered by 1 stage.", - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.flags['contact']) { this.add('-ability', target, 'Gooey'); this.boost({spe: -1}, source, target, null, true); @@ -1245,17 +1241,17 @@ exports.BattleAbilities = { "grasspelt": { shortDesc: "If Grassy Terrain is active, this Pokemon's Defense is multiplied by 1.5.", onModifyDefPriority: 6, - onModifyDef: function (pokemon) { + onModifyDef(pokemon) { if (this.isTerrain('grassyterrain')) return this.chainModify(1.5); }, id: "grasspelt", name: "Grass Pelt", - rating: 0.5, + rating: 1, num: 179, }, "grassysurge": { shortDesc: "On switch-in, this Pokemon summons Grassy Terrain.", - onStart: function (source) { + onStart(source) { this.setTerrain('grassyterrain'); }, id: "grassysurge", @@ -1267,7 +1263,7 @@ exports.BattleAbilities = { desc: "If this Pokemon has a major status condition, its Attack is multiplied by 1.5; burn's physical damage halving is ignored.", shortDesc: "If this Pokemon is statused, its Attack is 1.5x; ignores burn halving physical damage.", onModifyAtkPriority: 5, - onModifyAtk: function (atk, pokemon) { + onModifyAtk(atk, pokemon) { if (pokemon.status) { return this.chainModify(1.5); } @@ -1284,10 +1280,11 @@ exports.BattleAbilities = { name: "Harvest", onResidualOrder: 26, onResidualSubOrder: 1, - onResidual: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland']) || this.random(2) === 0) { + onResidual(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland']) || this.randomChance(1, 2)) { if (pokemon.hp && !pokemon.item && this.getItem(pokemon.lastItem).isBerry) { pokemon.setItem(pokemon.lastItem); + pokemon.lastItem = ''; this.add('-item', pokemon, pokemon.getItem(), '[from] ability: Harvest'); } } @@ -1302,15 +1299,14 @@ exports.BattleAbilities = { name: "Healer", onResidualOrder: 5, onResidualSubOrder: 1, - onResidual: function (pokemon) { - let allyActive = pokemon.side.active; - if (allyActive.length === 1) { + onResidual(pokemon) { + if (pokemon.side.active.length === 1) { return; } - for (let i = 0; i < allyActive.length; i++) { - if (allyActive[i] && allyActive[i].hp && this.isAdjacent(pokemon, allyActive[i]) && allyActive[i].status && this.random(10) < 3) { + for (const allyActive of pokemon.side.active) { + if (allyActive && allyActive.hp && this.isAdjacent(pokemon, allyActive) && allyActive.status && this.randomChance(3, 10)) { this.add('-activate', pokemon, 'ability: Healer'); - allyActive[i].cureStatus(); + allyActive.cureStatus(); } } }, @@ -1321,12 +1317,12 @@ exports.BattleAbilities = { desc: "The power of Fire-type attacks against this Pokemon is halved, and burn damage taken is halved.", shortDesc: "The power of Fire-type attacks against this Pokemon is halved; burn damage halved.", onBasePowerPriority: 7, - onSourceBasePower: function (basePower, attacker, defender, move) { + onSourceBasePower(basePower, attacker, defender, move) { if (move.type === 'Fire') { return this.chainModify(0.5); } }, - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (effect && effect.id === 'brn') { return damage / 2; } @@ -1338,7 +1334,7 @@ exports.BattleAbilities = { }, "heavymetal": { shortDesc: "This Pokemon's weight is doubled.", - onModifyWeight: function (weight) { + onModifyWeight(weight) { return weight * 2; }, id: "heavymetal", @@ -1356,7 +1352,7 @@ exports.BattleAbilities = { "hugepower": { shortDesc: "This Pokemon's Attack is doubled.", onModifyAtkPriority: 5, - onModifyAtk: function (atk) { + onModifyAtk(atk) { return this.chainModify(2); }, id: "hugepower", @@ -1369,10 +1365,11 @@ exports.BattleAbilities = { shortDesc: "This Pokemon's Attack is 1.5x and accuracy of its physical attacks is 0.8x.", // This should be applied directly to the stat as opposed to chaining witht he others onModifyAtkPriority: 5, - onModifyAtk: function (atk) { + onModifyAtk(atk) { return this.modify(atk, 1.5); }, - onModifyMove: function (move) { + onModifyMovePriority: -1, + onModifyMove(move) { if (move.category === 'Physical' && typeof move.accuracy === 'number') { move.accuracy *= 0.8; } @@ -1387,7 +1384,7 @@ exports.BattleAbilities = { shortDesc: "This Pokemon has its status cured at the end of each turn if Rain Dance is active.", onResidualOrder: 5, onResidualSubOrder: 1, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.status && this.isWeather(['raindance', 'primordialsea'])) { this.debug('hydration'); this.add('-activate', pokemon, 'ability: Hydration'); @@ -1401,10 +1398,10 @@ exports.BattleAbilities = { }, "hypercutter": { shortDesc: "Prevents other Pokemon from lowering this Pokemon's Attack stat stage.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target === source) return; - if (boost['atk'] && boost['atk'] < 0) { - delete boost['atk']; + if (boost.atk && boost.atk < 0) { + delete boost.atk; if (!effect.secondaries) this.add("-fail", target, "unboost", "Attack", "[from] ability: Hyper Cutter", "[of] " + target); } }, @@ -1416,12 +1413,12 @@ exports.BattleAbilities = { "icebody": { desc: "If Hail 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.", shortDesc: "If Hail is active, this Pokemon heals 1/16 of its max HP each turn; immunity to Hail.", - onWeather: function (target, source, effect) { + onWeather(target, source, effect) { if (effect.id === 'hail') { this.heal(target.maxhp / 16); } }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'hail') return false; }, id: "icebody", @@ -1439,7 +1436,7 @@ exports.BattleAbilities = { "illusion": { desc: "When this Pokemon switches in, it appears as the last unfainted Pokemon in its party until it takes direct damage from another Pokemon's attack. This Pokemon's actual level and HP are displayed instead of those of the mimicked Pokemon.", shortDesc: "This Pokemon appears as the last Pokemon in the party until it takes direct damage.", - onBeforeSwitchIn: function (pokemon) { + onBeforeSwitchIn(pokemon) { pokemon.illusion = null; let i; for (i = pokemon.side.pokemon.length - 1; i > pokemon.position; i--) { @@ -1450,12 +1447,12 @@ exports.BattleAbilities = { if (pokemon === pokemon.side.pokemon[i]) return; pokemon.illusion = pokemon.side.pokemon[i]; }, - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (target.illusion && effect && effect.effectType === 'Move' && effect.id !== 'confused') { this.singleEvent('End', this.getAbility('Illusion'), target.abilityData, target, source, effect); } }, - onEnd: function (pokemon) { + onEnd(pokemon) { if (pokemon.illusion) { this.debug('illusion cleared'); pokemon.illusion = null; @@ -1464,7 +1461,7 @@ exports.BattleAbilities = { this.add('-end', pokemon, 'Illusion'); } }, - onFaint: function (pokemon) { + onFaint(pokemon) { pokemon.illusion = null; }, isUnbreakable: true, @@ -1475,16 +1472,16 @@ exports.BattleAbilities = { }, "immunity": { shortDesc: "This Pokemon cannot be poisoned. Gaining this Ability while poisoned cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { this.add('-activate', pokemon, 'ability: Immunity'); pokemon.cureStatus(); } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id !== 'psn' && status.id !== 'tox') return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Immunity'); + this.add('-immune', target, '[from] ability: Immunity'); return false; }, id: "immunity", @@ -1495,11 +1492,11 @@ exports.BattleAbilities = { "imposter": { desc: "On switch-in, this Pokemon Transforms into the opposing Pokemon that is facing it. If there is no Pokemon at that position, this Pokemon does not Transform.", shortDesc: "On switch-in, this Pokemon Transforms into the opposing Pokemon that is facing it.", - onStart: function (pokemon) { + onStart(pokemon) { if (this.activeMove && this.activeMove.id === 'skillswap') return; let target = pokemon.side.foe.active[pokemon.side.foe.active.length - 1 - pokemon.position]; if (target) { - pokemon.transformInto(target, pokemon, this.getAbility('imposter')); + pokemon.transformInto(target, this.getAbility('imposter')); } }, id: "imposter", @@ -1510,7 +1507,7 @@ exports.BattleAbilities = { "infiltrator": { desc: "This Pokemon's moves ignore substitutes and the opposing side's Reflect, Light Screen, Safeguard, Mist and Aurora Veil.", shortDesc: "Moves ignore substitutes and foe's Reflect/Light Screen/Safeguard/Mist/Aurora Veil.", - onModifyMove: function (move) { + onModifyMove(move) { move.infiltrates = true; }, id: "infiltrator", @@ -1524,7 +1521,7 @@ exports.BattleAbilities = { id: "innardsout", name: "Innards Out", onAfterDamageOrder: 1, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.effectType === 'Move' && !target.hp) { this.damage(damage, source, target); } @@ -1537,21 +1534,21 @@ exports.BattleAbilities = { onFlinch: false, id: "innerfocus", name: "Inner Focus", - rating: 1.5, + rating: 1, num: 39, }, "insomnia": { shortDesc: "This Pokemon cannot fall asleep. Gaining this Ability while asleep cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'slp') { this.add('-activate', pokemon, 'ability: Insomnia'); pokemon.cureStatus(); } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id !== 'slp') return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Insomnia'); + this.add('-immune', target, '[from] ability: Insomnia'); return false; }, id: "insomnia", @@ -1562,19 +1559,18 @@ exports.BattleAbilities = { "intimidate": { desc: "On switch-in, this Pokemon lowers the Attack of adjacent opposing Pokemon by 1 stage. Pokemon behind a substitute are immune.", shortDesc: "On switch-in, this Pokemon lowers the Attack of adjacent opponents by 1 stage.", - onStart: function (pokemon) { - let foeactive = pokemon.side.foe.active; + onStart(pokemon) { let activated = false; - for (let i = 0; i < foeactive.length; i++) { - if (!foeactive[i] || !this.isAdjacent(foeactive[i], pokemon)) continue; + for (const target of pokemon.side.foe.active) { + if (!target || !this.isAdjacent(target, pokemon)) continue; if (!activated) { this.add('-ability', pokemon, 'Intimidate', 'boost'); activated = true; } - if (foeactive[i].volatiles['substitute']) { - this.add('-immune', foeactive[i], '[msg]'); + if (target.volatiles['substitute']) { + this.add('-immune', target); } else { - this.boost({atk: -1}, foeactive[i], pokemon); + this.boost({atk: -1}, target, pokemon); } } }, @@ -1587,7 +1583,7 @@ exports.BattleAbilities = { desc: "Pokemon making contact with this Pokemon lose 1/8 of their maximum HP, rounded down.", shortDesc: "Pokemon making contact with this Pokemon lose 1/8 of their max HP.", onAfterDamageOrder: 1, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact']) { this.damage(source.maxhp / 8, source, target); } @@ -1601,7 +1597,7 @@ exports.BattleAbilities = { desc: "This Pokemon's punch-based attacks have their power multiplied by 1.2.", shortDesc: "This Pokemon's punch-based attacks have 1.2x power. Sucker Punch is not boosted.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.flags['punch']) { this.debug('Iron Fist boost'); return this.chainModify([0x1333, 0x1000]); @@ -1614,9 +1610,9 @@ exports.BattleAbilities = { }, "justified": { shortDesc: "This Pokemon's Attack is raised by 1 stage after it is damaged by a Dark-type move.", - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.type === 'Dark') { - this.boost({atk:1}); + this.boost({atk: 1}); } }, id: "justified", @@ -1627,19 +1623,19 @@ exports.BattleAbilities = { "keeneye": { 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.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target === source) return; - if (boost['accuracy'] && boost['accuracy'] < 0) { - delete boost['accuracy']; + if (boost.accuracy && boost.accuracy < 0) { + delete boost.accuracy; if (!effect.secondaries) this.add("-fail", target, "unboost", "accuracy", "[from] ability: Keen Eye", "[of] " + target); } }, - onModifyMove: function (move) { + onModifyMove(move) { move.ignoreEvasion = true; }, id: "keeneye", name: "Keen Eye", - rating: 1, + rating: 0.5, num: 51, }, "klutz": { @@ -1654,15 +1650,15 @@ exports.BattleAbilities = { "leafguard": { desc: "If Sunny Day is active, this Pokemon cannot gain a major status condition and Rest will fail for it.", shortDesc: "If Sunny Day is active, this Pokemon cannot be statused and Rest will fail for it.", - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (this.isWeather(['sunnyday', 'desolateland'])) { - if (effect && effect.status) this.add('-immune', target, '[msg]', '[from] ability: Leaf Guard'); + if (effect && effect.status) this.add('-immune', target, '[from] ability: Leaf Guard'); return false; } }, - onTryAddVolatile: function (status, target) { + onTryAddVolatile(status, target) { if (status.id === 'yawn' && this.isWeather(['sunnyday', 'desolateland'])) { - this.add('-immune', target, '[msg]', '[from] ability: Leaf Guard'); + this.add('-immune', target, '[from] ability: Leaf Guard'); return null; } }, @@ -1682,7 +1678,7 @@ exports.BattleAbilities = { }, "lightmetal": { shortDesc: "This Pokemon's weight is halved.", - onModifyWeight: function (weight) { + onModifyWeight(weight) { return weight / 2; }, id: "lightmetal", @@ -1693,16 +1689,16 @@ exports.BattleAbilities = { "lightningrod": { desc: "This Pokemon is immune to Electric-type moves and raises its Special Attack by 1 stage when hit by an Electric-type move. If this Pokemon is not the target of a single-target Electric-type move used by another Pokemon, this Pokemon redirects that move to itself if it is within the range of that move.", shortDesc: "This Pokemon draws Electric moves to itself to raise Sp. Atk by 1; Electric immunity.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Electric') { - if (!this.boost({spa:1})) { - this.add('-immune', target, '[msg]', '[from] ability: Lightning Rod'); + if (!this.boost({spa: 1})) { + this.add('-immune', target, '[from] ability: Lightning Rod'); } return null; } }, - onAnyRedirectTarget: function (target, source, source2, move) { - if (move.type !== 'Electric' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onAnyRedirectTarget(target, source, source2, move) { + if (move.type !== 'Electric' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (this.validTarget(this.effectData.target, source, move.target)) { if (this.effectData.target !== target) { this.add('-activate', this.effectData.target, 'ability: Lightning Rod'); @@ -1717,16 +1713,16 @@ exports.BattleAbilities = { }, "limber": { shortDesc: "This Pokemon cannot be paralyzed. Gaining this Ability while paralyzed cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'par') { this.add('-activate', pokemon, 'ability: Limber'); pokemon.cureStatus(); } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id !== 'par') return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Limber'); + this.add('-immune', target, '[from] ability: Limber'); return false; }, id: "limber", @@ -1737,8 +1733,9 @@ exports.BattleAbilities = { "liquidooze": { shortDesc: "This Pokemon damages those draining HP from it for as much as they would heal.", id: "liquidooze", - onSourceTryHeal: function (damage, target, source, effect) { + onSourceTryHeal(damage, target, source, effect) { this.debug("Heal is occurring: " + target + " <- " + source + " :: " + effect.id); + /**@type {{[k: string]: number}} */ let canOoze = {drain: 1, leechseed: 1, strengthsap: 1}; if (canOoze[effect.id]) { this.damage(damage); @@ -1753,7 +1750,7 @@ exports.BattleAbilities = { desc: "This Pokemon's sound-based moves become Water-type moves. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.", shortDesc: "This Pokemon's sound-based moves become Water type.", onModifyMovePriority: -1, - onModifyMove: function (move) { + onModifyMove(move) { if (move.flags['sound']) { move.type = 'Water'; } @@ -1765,7 +1762,7 @@ exports.BattleAbilities = { }, "longreach": { shortDesc: "This Pokemon's attacks do not make contact with the target.", - onModifyMove: function (move) { + onModifyMove(move) { delete move.flags['contact']; }, id: "longreach", @@ -1779,21 +1776,21 @@ exports.BattleAbilities = { id: "magicbounce", name: "Magic Bounce", onTryHitPriority: 1, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target === source || move.hasBounced || !move.flags['reflectable']) { return; } - let newMove = this.getMoveCopy(move.id); + let newMove = this.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = false; this.useMove(newMove, target, source); return null; }, - onAllyTryHitSide: function (target, source, move) { + onAllyTryHitSide(target, source, move) { if (target.side === source.side || move.hasBounced || !move.flags['reflectable']) { return; } - let newMove = this.getMoveCopy(move.id); + let newMove = this.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = false; this.useMove(newMove, this.effectData.target, source); @@ -1808,7 +1805,7 @@ exports.BattleAbilities = { "magicguard": { desc: "This Pokemon can only be damaged by direct attacks. Curse and Substitute on use, Belly Drum, Pain Split, Struggle recoil, and confusion damage are considered direct damage.", shortDesc: "This Pokemon can only be damaged by direct attacks.", - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (effect.effectType !== 'Move') { return false; } @@ -1821,7 +1818,7 @@ exports.BattleAbilities = { "magician": { desc: "If this Pokemon has no item, it steals the item off a Pokemon it hits with an attack. Does not affect Doom Desire and Future Sight.", shortDesc: "If this Pokemon has no item, it steals the item off a Pokemon it hits with an attack.", - onSourceHit: function (target, source, move) { + onSourceHit(target, source, move) { if (!move || !target) return; if (target !== source && move.category !== 'Status') { if (source.item || source.volatiles['gem'] || source.volatiles['fling']) return; @@ -1841,13 +1838,13 @@ exports.BattleAbilities = { }, "magmaarmor": { shortDesc: "This Pokemon cannot be frozen. Gaining this Ability while frozen cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'frz') { this.add('-activate', pokemon, 'ability: Magma Armor'); pokemon.cureStatus(); } }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'frz') return false; }, id: "magmaarmor", @@ -1858,12 +1855,12 @@ exports.BattleAbilities = { "magnetpull": { desc: "Prevents adjacent opposing Steel-type Pokemon from choosing to switch out unless they are immune to trapping.", shortDesc: "Prevents adjacent Steel-type foes from choosing to switch.", - onFoeTrapPokemon: function (pokemon) { + onFoeTrapPokemon(pokemon) { if (pokemon.hasType('Steel') && this.isAdjacent(pokemon, this.effectData.target)) { pokemon.tryTrap(true); } }, - onFoeMaybeTrapPokemon: function (pokemon, source) { + onFoeMaybeTrapPokemon(pokemon, source) { if (!source) source = this.effectData.target; if ((!pokemon.knownType || pokemon.hasType('Steel')) && this.isAdjacent(pokemon, source)) { pokemon.maybeTrapped = true; @@ -1878,7 +1875,7 @@ exports.BattleAbilities = { desc: "If this Pokemon has a major status condition, its Defense is multiplied by 1.5.", shortDesc: "If this Pokemon is statused, its Defense is 1.5x.", onModifyDefPriority: 6, - onModifyDef: function (def, pokemon) { + onModifyDef(def, pokemon) { if (pokemon.status) { return this.chainModify(1.5); } @@ -1892,7 +1889,7 @@ exports.BattleAbilities = { desc: "This Pokemon's pulse moves have their power multiplied by 1.5. Heal Pulse restores 3/4 of a target's maximum HP, rounded half down.", shortDesc: "This Pokemon's pulse moves have 1.5x power. Heal Pulse heals 3/4 target's max HP.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.flags['pulse']) { return this.chainModify(1.5); } @@ -1904,8 +1901,8 @@ exports.BattleAbilities = { }, "merciless": { shortDesc: "This Pokemon's attacks are critical hits if the target is poisoned.", - onModifyCritRatio: function (critRatio, source, target) { - if (target && target.status in {'psn':1, 'tox':1}) return 5; + onModifyCritRatio(critRatio, source, target) { + if (target && ['psn', 'tox'].includes(target.status)) return 5; }, id: "merciless", name: "Merciless", @@ -1913,16 +1910,15 @@ exports.BattleAbilities = { num: 196, }, "minus": { - desc: "If an active ally has this Ability or the Ability Plus, this Pokemon's Special Attack is multiplied by 1.5.", - shortDesc: "If an active ally has this Ability or the Ability Plus, this Pokemon's Sp. Atk is 1.5x.", + desc: "If an active ally has this Ability or the Plus Ability, this Pokemon's Special Attack is multiplied by 1.5.", + shortDesc: "If an active ally has this Ability or the Plus Ability, this Pokemon's Sp. Atk is 1.5x.", onModifySpAPriority: 5, - onModifySpA: function (spa, pokemon) { - let allyActive = pokemon.side.active; - if (allyActive.length === 1) { + onModifySpA(spa, pokemon) { + if (pokemon.side.active.length === 1) { return; } - for (let i = 0; i < allyActive.length; i++) { - if (allyActive[i] && allyActive[i].position !== pokemon.position && !allyActive[i].fainted && allyActive[i].hasAbility(['minus', 'plus'])) { + for (const allyActive of pokemon.side.active) { + if (allyActive && allyActive.position !== pokemon.position && !allyActive.fainted && allyActive.hasAbility(['minus', 'plus'])) { return this.chainModify(1.5); } } @@ -1934,7 +1930,7 @@ exports.BattleAbilities = { }, "mistysurge": { shortDesc: "On switch-in, this Pokemon summons Misty Terrain.", - onStart: function (source) { + onStart(source) { this.setTerrain('mistyterrain'); }, id: "mistysurge", @@ -1944,10 +1940,10 @@ exports.BattleAbilities = { }, "moldbreaker": { shortDesc: "This Pokemon's moves and their effects ignore the Abilities of other Pokemon.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Mold Breaker'); }, - onModifyMove: function (move) { + onModifyMove(move) { move.ignoreAbility = true; }, id: "moldbreaker", @@ -1960,24 +1956,28 @@ exports.BattleAbilities = { shortDesc: "Raises a random stat by 2 and lowers another stat by 1 at the end of each turn.", onResidualOrder: 26, onResidualSubOrder: 1, - onResidual: function (pokemon) { + onResidual(pokemon) { let stats = []; let boost = {}; for (let statPlus in pokemon.boosts) { + // @ts-ignore if (pokemon.boosts[statPlus] < 6) { stats.push(statPlus); } } - let randomStat = stats.length ? stats[this.random(stats.length)] : ""; + let randomStat = stats.length ? this.sample(stats) : ""; + // @ts-ignore if (randomStat) boost[randomStat] = 2; stats = []; for (let statMinus in pokemon.boosts) { + // @ts-ignore if (pokemon.boosts[statMinus] > -6 && statMinus !== randomStat) { stats.push(statMinus); } } - randomStat = stats.length ? stats[this.random(stats.length)] : ""; + randomStat = stats.length ? this.sample(stats) : ""; + // @ts-ignore if (randomStat) boost[randomStat] = -1; this.boost(boost); @@ -1990,10 +1990,10 @@ exports.BattleAbilities = { "motordrive": { desc: "This Pokemon is immune to Electric-type moves and raises its Speed by 1 stage when hit by an Electric-type move.", shortDesc: "This Pokemon's Speed is raised 1 stage if hit by an Electric move; Electric immunity.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Electric') { - if (!this.boost({spe:1})) { - this.add('-immune', target, '[msg]', '[from] ability: Motor Drive'); + if (!this.boost({spe: 1})) { + this.add('-immune', target, '[from] ability: Motor Drive'); } return null; } @@ -2006,9 +2006,9 @@ exports.BattleAbilities = { "moxie": { desc: "This Pokemon's Attack is raised by 1 stage if it attacks and knocks out another Pokemon.", shortDesc: "This Pokemon's Attack is raised by 1 stage if it attacks and KOes another Pokemon.", - onSourceFaint: function (target, source, effect) { + onSourceFaint(target, source, effect) { if (effect && effect.effectType === 'Move') { - this.boost({atk:1}, source); + this.boost({atk: 1}, source); } }, id: "moxie", @@ -2018,7 +2018,7 @@ exports.BattleAbilities = { }, "multiscale": { shortDesc: "If this Pokemon is at full HP, damage taken from attacks is halved.", - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (target.hp >= target.maxhp) { this.debug('Multiscale weaken'); return this.chainModify(0.5); @@ -2038,24 +2038,27 @@ exports.BattleAbilities = { num: 121, }, "mummy": { - desc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy. Does not affect the Abilities Multitype or Stance Change.", + desc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy. Does not affect the Battle Bond, Comatose, Disguise, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, and Zen Mode Abilities.", shortDesc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy.", id: "mummy", name: "Mummy", - onAfterDamage: function (damage, target, source, move) { - if (source && source !== target && move && move.flags['contact']) { - let oldAbility = source.setAbility('mummy', source, 'mummy', true); + onAfterDamage(damage, target, source, move) { + if (source && source !== target && move && move.flags['contact'] && source.ability !== 'mummy') { + let oldAbility = source.setAbility('mummy', target); if (oldAbility) { this.add('-activate', target, 'ability: Mummy', this.getAbility(oldAbility).name, '[of] ' + source); } } }, + onBasePower(basePower, pokemon, target, move) { + if (move.multihitType === 'parentalbond' && move.hit > 1) return this.chainModify(0.25); + }, rating: 2, num: 152, }, "naturalcure": { shortDesc: "This Pokemon has its major status condition cured when it switches out.", - onCheckShow: function (pokemon) { + onCheckShow(pokemon) { // This is complicated // For the most part, in-game, it's obvious whether or not Natural Cure activated, // since you can see how many of your opponent's pokemon are statused. @@ -2064,11 +2067,9 @@ exports.BattleAbilities = { if (pokemon.side.active.length === 1) return; if (pokemon.showCure === true || pokemon.showCure === false) return; - let active = pokemon.side.active; let cureList = []; let noCureCount = 0; - for (let i = 0; i < active.length; i++) { - let curPoke = active[i]; + for (const curPoke of pokemon.side.active) { // pokemon not statused if (!curPoke || !curPoke.status) { // this.add('-message', "" + curPoke + " skipped: not statused or doesn't exist"); @@ -2078,7 +2079,7 @@ exports.BattleAbilities = { // this.add('-message', "" + curPoke + " skipped: Natural Cure already known"); continue; } - let template = Dex.getTemplate(curPoke.species); + let template = this.getTemplate(curPoke.species); // pokemon can't get Natural Cure if (Object.values(template.abilities).indexOf('Natural Cure') < 0) { // this.add('-message', "" + curPoke + " skipped: no Natural Cure"); @@ -2106,8 +2107,8 @@ exports.BattleAbilities = { if (!cureList.length || !noCureCount) { // It's possible to know what pokemon were cured - for (let i = 0; i < cureList.length; i++) { - cureList[i].showCure = true; + for (const pokemon of cureList) { + pokemon.showCure = true; } } else { // It's not possible to know what pokemon were cured @@ -2115,12 +2116,12 @@ exports.BattleAbilities = { // Unlike a -hint, this is real information that battlers need, so we use a -message this.add('-message', "(" + cureList.length + " of " + pokemon.side.name + "'s pokemon " + (cureList.length === 1 ? "was" : "were") + " cured by Natural Cure.)"); - for (let i = 0; i < cureList.length; i++) { - cureList[i].showCure = false; + for (const pokemon of cureList) { + pokemon.showCure = false; } } }, - onSwitchOut: function (pokemon) { + onSwitchOut(pokemon) { if (!pokemon.status) return; // if pokemon.showCure is undefined, it was skipped because its ability @@ -2139,9 +2140,21 @@ exports.BattleAbilities = { rating: 3.5, num: 30, }, + "neuroforce": { + shortDesc: "This Pokemon's attacks that are super effective against the target do 1.25x damage.", + onModifyDamage(damage, source, target, move) { + if (move && move.typeMod > 0) { + return this.chainModify([0x1400, 0x1000]); + } + }, + id: "neuroforce", + name: "Neuroforce", + rating: 3, + num: 233, + }, "noguard": { shortDesc: "Every move used by or against this Pokemon will always hit.", - onAnyAccuracy: function (accuracy, target, source, move) { + onAnyAccuracy(accuracy, target, source, move) { if (move && (source === this.effectData.target || target === this.effectData.target)) { return true; } @@ -2156,18 +2169,15 @@ exports.BattleAbilities = { desc: "This Pokemon's moves are changed to be Normal type and have their power multiplied by 1.2. This effect comes before other effects that change a move's type.", shortDesc: "This Pokemon's moves are changed to be Normal type and have 1.2x power.", onModifyMovePriority: 1, - onModifyMove: function (move, pokemon) { - if (!(move.isZ && move.category !== 'Status') && !(move.id in {hiddenpower:1, judgment:1, multiattack:1, naturalgift:1, revelationdance:1, struggle:1, technoblast:1, weatherball:1})) { + onModifyMove(move, pokemon) { + if (!(move.isZ && move.category !== 'Status') && !['hiddenpower', 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'struggle', 'technoblast', 'weatherball'].includes(move.id)) { move.type = 'Normal'; - if (move.category !== 'Status') pokemon.addVolatile('normalize'); + move.normalizeBoosted = true; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x1333, 0x1000]); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.normalizeBoosted) return this.chainModify([0x1333, 0x1000]); }, id: "normalize", name: "Normalize", @@ -2177,7 +2187,7 @@ exports.BattleAbilities = { "oblivious": { desc: "This Pokemon cannot be infatuated or taunted. Gaining this Ability while affected cures it.", shortDesc: "This Pokemon cannot be infatuated or taunted. Gaining this Ability cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.volatiles['attract']) { this.add('-activate', pokemon, 'ability: Oblivious'); pokemon.removeVolatile('attract'); @@ -2189,12 +2199,12 @@ exports.BattleAbilities = { // Taunt's volatile already sends the -end message when removed } }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'attract') return false; }, - onTryHit: function (pokemon, target, move) { + onTryHit(pokemon, target, move) { if (move.id === 'attract' || move.id === 'captivate' || move.id === 'taunt') { - this.add('-immune', pokemon, '[msg]', '[from] ability: Oblivious'); + this.add('-immune', pokemon, '[from] ability: Oblivious'); return null; } }, @@ -2205,13 +2215,13 @@ exports.BattleAbilities = { }, "overcoat": { shortDesc: "This Pokemon is immune to powder moves and damage from Sandstorm or Hail.", - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm' || type === 'hail' || type === 'powder') return false; }, onTryHitPriority: 1, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (move.flags['powder'] && target !== source && this.getImmunity('powder', target)) { - this.add('-immune', target, '[msg]', '[from] ability: Overcoat'); + this.add('-immune', target, '[from] ability: Overcoat'); return null; } }, @@ -2221,17 +2231,17 @@ exports.BattleAbilities = { num: 142, }, "overgrow": { - desc: "When this Pokemon has 1/3 or less of its maximum HP, its attacking stat is multiplied by 1.5 while using a Grass-type attack.", - shortDesc: "When this Pokemon has 1/3 or less of its max HP, its Grass attacks do 1.5x damage.", + 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 Grass-type attack.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's attacking stat is 1.5x with Grass attacks.", onModifyAtkPriority: 5, - onModifyAtk: function (atk, attacker, defender, move) { + onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) { this.debug('Overgrow boost'); return this.chainModify(1.5); } }, onModifySpAPriority: 5, - onModifySpA: function (atk, attacker, defender, move) { + onModifySpA(atk, attacker, defender, move) { if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) { this.debug('Overgrow boost'); return this.chainModify(1.5); @@ -2244,55 +2254,44 @@ exports.BattleAbilities = { }, "owntempo": { shortDesc: "This Pokemon cannot be confused. Gaining this Ability while confused cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.volatiles['confusion']) { this.add('-activate', pokemon, 'ability: Own Tempo'); pokemon.removeVolatile('confusion'); } }, - onTryAddVolatile: function (status, pokemon) { + onTryAddVolatile(status, pokemon) { if (status.id === 'confusion') return null; }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move && move.volatileStatus === 'confusion') { this.add('-immune', target, 'confusion', '[from] ability: Own Tempo'); } }, id: "owntempo", name: "Own Tempo", - rating: 1, + rating: 1.5, num: 20, }, "parentalbond": { desc: "This Pokemon's damaging moves become multi-hit moves that hit twice. The second hit has its damage quartered. Does not affect multi-hit moves or moves that have multiple targets.", shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage quartered.", - onPrepareHit: function (source, target, move) { - if (move.id in {iceball: 1, rollout: 1}) return; + onPrepareHit(source, target, move) { + if (['iceball', 'rollout'].includes(move.id)) return; if (move.category !== 'Status' && !move.selfdestruct && !move.multihit && !move.flags['charge'] && !move.spreadHit && !move.isZ) { move.multihit = 2; - source.addVolatile('parentalbond'); + move.multihitType = 'parentalbond'; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower) { - if (this.effectData.hit) { - this.effectData.hit++; - return this.chainModify(0.25); - } else { - this.effectData.hit = 1; - } - }, - onSourceModifySecondaries: function (secondaries, target, source, move) { - if (move.id === 'secretpower' && this.effectData.hit < 2) { - // hack to prevent accidentally suppressing King's Rock/Razor Fang - return secondaries.filter(effect => effect.volatileStatus === 'flinch'); - } - }, - onAnyAfterMove: function () { - this.effectData.target.removeVolatile('parentalbond'); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.multihitType === 'parentalbond' && move.hit > 1) return this.chainModify(0.25); + }, + 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'); + } }, id: "parentalbond", name: "Parental Bond", @@ -2303,18 +2302,16 @@ exports.BattleAbilities = { shortDesc: "If this Pokemon has no item, it finds one used by an adjacent Pokemon this turn.", onResidualOrder: 26, onResidualSubOrder: 1, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.item) return; let pickupTargets = []; - let allActives = pokemon.side.active.concat(pokemon.side.foe.active); - for (let i = 0; i < allActives.length; i++) { - let target = allActives[i]; + for (const target of pokemon.side.active.concat(pokemon.side.foe.active)) { if (target.lastItem && target.usedItemThisTurn && this.isAdjacent(pokemon, target)) { pickupTargets.push(target); } } if (!pickupTargets.length) return; - let randomTarget = pickupTargets[this.random(pickupTargets.length)]; + let randomTarget = this.sample(pickupTargets); pokemon.setItem(randomTarget.lastItem); randomTarget.lastItem = ''; let item = pokemon.getItem(); @@ -2328,7 +2325,7 @@ exports.BattleAbilities = { "pickpocket": { desc: "If this Pokemon has no item, it steals the item off a Pokemon that makes contact with it. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect.", shortDesc: "If this Pokemon has no item, it steals the item off a Pokemon making contact with it.", - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (source && source !== target && move && move.flags['contact']) { if (target.item) { return; @@ -2341,6 +2338,7 @@ exports.BattleAbilities = { source.item = yourItem.id; return; } + this.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', '[of] ' + source); this.add('-item', target, yourItem, '[from] ability: Pickpocket', '[of] ' + source); } }, @@ -2353,18 +2351,15 @@ exports.BattleAbilities = { desc: "This Pokemon's Normal-type moves become Fairy-type moves and have their power multiplied by 1.2. This effect comes after other effects that change a move's type, but before Ion Deluge and Electrify's effects.", shortDesc: "This Pokemon's Normal-type moves become Fairy type and have 1.2x power.", onModifyMovePriority: -1, - onModifyMove: function (move, pokemon) { - if (move.type === 'Normal' && !(move.id in {naturalgift:1, revelationdance:1}) && !(move.isZ && move.category !== 'Status')) { + onModifyMove(move, pokemon) { + if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) { move.type = 'Fairy'; - if (move.category !== 'Status') pokemon.addVolatile('pixilate'); + move.pixilateBoosted = true; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x1333, 0x1000]); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.pixilateBoosted) return this.chainModify([0x1333, 0x1000]); }, id: "pixilate", name: "Pixilate", @@ -2372,16 +2367,15 @@ exports.BattleAbilities = { num: 182, }, "plus": { - desc: "If an active ally has this Ability or the Ability Minus, this Pokemon's Special Attack is multiplied by 1.5.", - shortDesc: "If an active ally has this Ability or the Ability Minus, this Pokemon's Sp. Atk is 1.5x.", + desc: "If an active ally has this Ability or the Minus Ability, this Pokemon's Special Attack is multiplied by 1.5.", + shortDesc: "If an active ally has this Ability or the Minus Ability, this Pokemon's Sp. Atk is 1.5x.", onModifySpAPriority: 5, - onModifySpA: function (spa, pokemon) { - let allyActive = pokemon.side.active; - if (allyActive.length === 1) { + onModifySpA(spa, pokemon) { + if (pokemon.side.active.length === 1) { return; } - for (let i = 0; i < allyActive.length; i++) { - if (allyActive[i] && allyActive[i].position !== pokemon.position && !allyActive[i].fainted && allyActive[i].hasAbility(['minus', 'plus'])) { + for (const allyActive of pokemon.side.active) { + if (allyActive && allyActive.position !== pokemon.position && !allyActive.fainted && allyActive.hasAbility(['minus', 'plus'])) { return this.chainModify(1.5); } } @@ -2394,7 +2388,8 @@ exports.BattleAbilities = { "poisonheal": { desc: "If this Pokemon is poisoned, it restores 1/8 of its maximum HP, rounded down, at the end of each turn instead of losing HP.", shortDesc: "This Pokemon is healed by 1/8 of its max HP each turn when poisoned; no HP loss.", - onDamage: function (damage, target, source, effect) { + onDamagePriority: 1, + onDamage(damage, target, source, effect) { if (effect.id === 'psn' || effect.id === 'tox') { this.heal(target.maxhp / 8); return false; @@ -2407,9 +2402,9 @@ exports.BattleAbilities = { }, "poisonpoint": { shortDesc: "30% chance a Pokemon making contact with this Pokemon will be poisoned.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move && move.flags['contact']) { - if (this.random(10) < 3) { + if (this.randomChance(3, 10)) { source.trySetStatus('psn', target); } } @@ -2422,7 +2417,7 @@ exports.BattleAbilities = { "poisontouch": { shortDesc: "This Pokemon's contact moves have a 30% chance of poisoning.", // upokecenter says this is implemented as an added secondary effect - onModifyMove: function (move) { + onModifyMove(move) { if (!move || !move.flags['contact']) return; if (!move.secondaries) { move.secondaries = []; @@ -2442,17 +2437,11 @@ exports.BattleAbilities = { desc: "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: "If Zygarde 10%/50%, changes to Complete if at 1/2 max HP or less at end of turn.", onResidualOrder: 27, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Zygarde' || pokemon.transformed || !pokemon.hp) return; if (pokemon.template.speciesid === 'zygardecomplete' || pokemon.hp > pokemon.maxhp / 2) return; this.add('-activate', pokemon, 'ability: Power Construct'); - let template = this.getTemplate('Zygarde-Complete'); - pokemon.formeChange(template); - pokemon.baseTemplate = template; - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('detailschange', pokemon, pokemon.details); - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; + pokemon.formeChange('Zygarde-Complete', this.effect, true); let newHP = Math.floor(Math.floor(2 * pokemon.template.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100) * pokemon.level / 100 + 10); pokemon.hp = newHP - (pokemon.maxhp - pokemon.hp); pokemon.maxhp = newHP; @@ -2466,11 +2455,11 @@ exports.BattleAbilities = { "powerofalchemy": { desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, Wonder Guard, and Zen Mode.", shortDesc: "This Pokemon copies the Ability of an ally that faints.", - onAllyFaint: function (target) { + onAllyFaint(target) { if (!this.effectData.target.hp) return; let ability = this.getAbility(target.ability); - let bannedAbilities = {comatose:1, flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, stancechange:1, trace:1, wonderguard:1, zenmode:1}; - if (bannedAbilities[target.ability]) return; + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'flowergift', 'forecast', 'illusion', 'imposter', 'multitype', 'powerconstruct', 'powerofalchemy', 'receiver', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'trace', 'wonderguard', 'zenmode']; + if (bannedAbilities.includes(target.ability)) return; this.add('-ability', this.effectData.target, ability, '[from] ability: Power of Alchemy', '[of] ' + target); this.effectData.target.setAbility(ability); }, @@ -2481,14 +2470,10 @@ exports.BattleAbilities = { }, "prankster": { shortDesc: "This Pokemon's Status moves have priority raised by 1, but Dark types are immune.", - onModifyPriority: function (priority, pokemon, target, move) { - if (move && move.category === 'Status') { - return priority + 1; - } - }, - onModifyMove: function (move) { + onModifyPriority(priority, pokemon, target, move) { if (move && move.category === 'Status') { move.pranksterBoosted = true; + return priority + 1; } }, id: "prankster", @@ -2499,32 +2484,31 @@ exports.BattleAbilities = { "pressure": { desc: "If this Pokemon is the target of an opposing Pokemon's move, that move loses one additional PP.", shortDesc: "If this Pokemon is the target of a foe's move, that move loses one additional PP.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Pressure'); }, - onDeductPP: function (target, source) { + onDeductPP(target, source) { if (target.side === source.side) return; return 1; }, id: "pressure", name: "Pressure", - rating: 1.5, + rating: 2, num: 46, }, "primordialsea": { desc: "On switch-in, the weather becomes heavy rain that prevents damaging Fire-type moves from executing, in addition to all the effects of Rain Dance. This weather remains in effect until this Ability is no longer active for any Pokemon, or the weather is changed by Delta Stream or Desolate Land.", shortDesc: "On switch-in, heavy rain begins until this Ability is not active in battle.", - onStart: function (source) { + onStart(source) { this.setWeather('primordialsea'); }, - onAnySetWeather: function (target, source, weather) { - if (this.getWeather().id === 'primordialsea' && !(weather.id in {desolateland:1, primordialsea:1, deltastream:1})) return false; + onAnySetWeather(target, source, weather) { + if (this.getWeather().id === 'primordialsea' && !['desolateland', 'primordialsea', 'deltastream'].includes(weather.id)) return false; }, - onEnd: function (pokemon) { + onEnd(pokemon) { if (this.weatherData.source !== pokemon) return; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - let target = this.sides[i].active[j]; + for (const side of this.sides) { + for (const target of side.active) { if (target === pokemon) continue; if (target && target.hp && target.hasAbility('primordialsea')) { this.weatherData.source = target; @@ -2540,9 +2524,9 @@ exports.BattleAbilities = { num: 189, }, "prismarmor": { - 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.", + desc: "This Pokemon receives 3/4 damage from supereffective attacks. Moongeist Beam, Sunsteel Strike, and the Mold Breaker, Teravolt, and Turboblaze Abilities cannot ignore this Ability.", shortDesc: "This Pokemon receives 3/4 damage from supereffective attacks.", - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.typeMod > 0) { this.debug('Prism Armor neutralize'); return this.chainModify(0.75); @@ -2557,12 +2541,12 @@ exports.BattleAbilities = { "protean": { 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.", shortDesc: "This Pokemon's type changes to match the type of the move it is about to use.", - onPrepareHit: function (source, target, move) { + onPrepareHit(source, target, move) { if (move.hasBounced) return; let type = move.type; if (type && type !== '???' && source.getTypes().join() !== type) { if (!source.setType(type)) return; - this.add('-start', source, 'typechange', type, '[from] Protean'); + this.add('-start', source, 'typechange', type, '[from] ability: Protean'); } }, id: "protean", @@ -2572,7 +2556,7 @@ exports.BattleAbilities = { }, "psychicsurge": { shortDesc: "On switch-in, this Pokemon summons Psychic Terrain.", - onStart: function (source) { + onStart(source) { this.setTerrain('psychicterrain'); }, id: "psychicsurge", @@ -2583,7 +2567,7 @@ exports.BattleAbilities = { "purepower": { shortDesc: "This Pokemon's Attack is doubled.", onModifyAtkPriority: 5, - onModifyAtk: function (atk) { + onModifyAtk(atk) { return this.chainModify(2); }, id: "purepower", @@ -2594,7 +2578,7 @@ exports.BattleAbilities = { "queenlymajesty": { desc: "While this Pokemon is active, priority moves from opposing Pokemon targeted at allies are prevented from having an effect.", shortDesc: "While this Pokemon is active, allies are protected from opposing priority moves.", - onFoeTryMove: function (target, source, effect) { + onFoeTryMove(target, source, effect) { if ((source.side === this.effectData.target.side || effect.id === 'perishsong') && effect.priority > 0.1 && effect.target !== 'foeSide') { this.attrLastMove('[still]'); this.add('cant', this.effectData.target, 'ability: Queenly Majesty', effect, '[of] ' + target); @@ -2603,13 +2587,13 @@ exports.BattleAbilities = { }, id: "queenlymajesty", name: "Queenly Majesty", - rating: 3.5, + rating: 3, num: 214, }, "quickfeet": { desc: "If this Pokemon has a major status condition, its Speed is multiplied by 1.5; the Speed drop from paralysis is ignored.", shortDesc: "If this Pokemon is statused, its Speed is 1.5x; ignores Speed drop from paralysis.", - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (pokemon.status) { return this.chainModify(1.5); } @@ -2622,7 +2606,7 @@ exports.BattleAbilities = { "raindish": { desc: "If Rain Dance is active, this Pokemon restores 1/16 of its maximum HP, rounded down, at the end of each turn.", shortDesc: "If Rain Dance is active, this Pokemon heals 1/16 of its max HP each turn.", - onWeather: function (target, source, effect) { + onWeather(target, source, effect) { if (effect.id === 'raindance' || effect.id === 'primordialsea') { this.heal(target.maxhp / 16); } @@ -2635,9 +2619,9 @@ exports.BattleAbilities = { "rattled": { desc: "This Pokemon's Speed is raised by 1 stage if hit by a Bug-, Dark-, or Ghost-type attack.", shortDesc: "This Pokemon's Speed is raised 1 stage if hit by a Bug-, Dark-, or Ghost-type attack.", - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && (effect.type === 'Dark' || effect.type === 'Bug' || effect.type === 'Ghost')) { - this.boost({spe:1}); + this.boost({spe: 1}); } }, id: "rattled", @@ -2648,11 +2632,11 @@ exports.BattleAbilities = { "receiver": { desc: "This Pokemon copies the Ability of an ally that faints. Abilities that cannot be copied are Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, Wonder Guard, and Zen Mode.", shortDesc: "This Pokemon copies the Ability of an ally that faints.", - onAllyFaint: function (target) { + onAllyFaint(target) { if (!this.effectData.target.hp) return; let ability = this.getAbility(target.ability); - let bannedAbilities = {comatose:1, flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, stancechange:1, trace:1, wonderguard:1, zenmode:1}; - if (bannedAbilities[target.ability]) return; + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'flowergift', 'forecast', 'illusion', 'imposter', 'multitype', 'powerconstruct', 'powerofalchemy', 'receiver', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'trace', 'wonderguard', 'zenmode']; + if (bannedAbilities.includes(target.ability)) return; this.add('-ability', this.effectData.target, ability, '[from] ability: Receiver', '[of] ' + target); this.effectData.target.setAbility(ability); }, @@ -2665,7 +2649,7 @@ exports.BattleAbilities = { desc: "This Pokemon's attacks with recoil or crash damage have their power multiplied by 1.2. Does not affect Struggle.", shortDesc: "This Pokemon's attacks with recoil or crash damage have 1.2x power; not Struggle.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.recoil || move.hasCustomRecoil) { this.debug('Reckless boost'); return this.chainModify([0x1333, 0x1000]); @@ -2680,18 +2664,15 @@ exports.BattleAbilities = { desc: "This Pokemon's Normal-type moves become Ice-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 Ice type and have 1.2x power.", onModifyMovePriority: -1, - onModifyMove: function (move, pokemon) { - if (move.type === 'Normal' && !(move.id in {naturalgift:1, revelationdance:1}) && !(move.isZ && move.category !== 'Status')) { + onModifyMove(move, pokemon) { + if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) { move.type = 'Ice'; - if (move.category !== 'Status') pokemon.addVolatile('refrigerate'); + move.refrigerateBoosted = true; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x1333, 0x1000]); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.refrigerateBoosted) return this.chainModify([0x1333, 0x1000]); }, id: "refrigerate", name: "Refrigerate", @@ -2700,7 +2681,7 @@ exports.BattleAbilities = { }, "regenerator": { shortDesc: "This Pokemon restores 1/3 of its maximum HP, rounded down, when it switches out.", - onSwitchOut: function (pokemon) { + onSwitchOut(pokemon) { pokemon.heal(pokemon.maxhp / 3); }, id: "regenerator", @@ -2712,7 +2693,7 @@ exports.BattleAbilities = { desc: "This Pokemon's attacks have their power multiplied by 1.25 against targets of the same gender or multiplied by 0.75 against targets of the opposite gender. There is no modifier if either this Pokemon or the target is genderless.", shortDesc: "This Pokemon's attacks do 1.25x on same gender targets; 0.75x on opposite gender.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (attacker.gender && defender.gender) { if (attacker.gender === defender.gender) { this.debug('Rivalry boost'); @@ -2739,19 +2720,22 @@ exports.BattleAbilities = { "rockhead": { desc: "This Pokemon does not take recoil damage besides Struggle, Life Orb, and crash damage.", shortDesc: "This Pokemon does not take recoil damage besides Struggle/Life Orb/crash damage.", - onDamage: function (damage, target, source, effect) { - if (effect.id === 'recoil' && this.activeMove.id !== 'struggle') return null; + 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; + } }, id: "rockhead", name: "Rock Head", - rating: 3, + rating: 2.5, num: 69, }, "roughskin": { desc: "Pokemon making contact with this Pokemon lose 1/8 of their maximum HP, rounded down.", shortDesc: "Pokemon making contact with this Pokemon lose 1/8 of their max HP.", onAfterDamageOrder: 1, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact']) { this.damage(source.maxhp / 8, source, target); } @@ -2772,7 +2756,7 @@ exports.BattleAbilities = { desc: "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: "This Pokemon's Ground/Rock/Steel attacks do 1.3x in Sandstorm; immunity to it.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (this.isWeather('sandstorm')) { if (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') { this.debug('Sand Force boost'); @@ -2780,7 +2764,7 @@ exports.BattleAbilities = { } } }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm') return false; }, id: "sandforce", @@ -2791,22 +2775,22 @@ exports.BattleAbilities = { "sandrush": { desc: "If Sandstorm is active, this Pokemon's Speed is doubled. This Pokemon takes no damage from Sandstorm.", shortDesc: "If Sandstorm is active, this Pokemon's Speed is doubled; immunity to Sandstorm.", - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (this.isWeather('sandstorm')) { return this.chainModify(2); } }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm') return false; }, id: "sandrush", name: "Sand Rush", - rating: 2.5, + rating: 3, num: 146, }, "sandstream": { shortDesc: "On switch-in, this Pokemon summons Sandstorm.", - onStart: function (source) { + onStart(source) { this.setWeather('sandstorm'); }, id: "sandstream", @@ -2817,10 +2801,10 @@ exports.BattleAbilities = { "sandveil": { desc: "If Sandstorm is active, this Pokemon's evasiveness is multiplied by 1.25. This Pokemon takes no damage from Sandstorm.", shortDesc: "If Sandstorm is active, this Pokemon's evasiveness is 1.25x; immunity to Sandstorm.", - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm') return false; }, - onModifyAccuracy: function (accuracy) { + onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; if (this.isWeather('sandstorm')) { this.debug('Sand Veil - decreasing accuracy'); @@ -2836,18 +2820,18 @@ exports.BattleAbilities = { desc: "This Pokemon is immune to Grass-type moves and raises its Attack by 1 stage when hit by a Grass-type move.", shortDesc: "This Pokemon's Attack is raised 1 stage if hit by a Grass move; Grass immunity.", onTryHitPriority: 1, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Grass') { - if (!this.boost({atk:1})) { - this.add('-immune', target, '[msg]', '[from] ability: Sap Sipper'); + if (!this.boost({atk: 1})) { + this.add('-immune', target, '[from] ability: Sap Sipper'); } return null; } }, - onAllyTryHitSide: function (target, source, move) { + onAllyTryHitSide(target, source, move) { if (target === this.effectData.target || target.side !== source.side) return; if (move.type === 'Grass') { - this.boost({atk:1}, this.effectData.target); + this.boost({atk: 1}, this.effectData.target); } }, id: "sapsipper", @@ -2858,44 +2842,40 @@ exports.BattleAbilities = { "schooling": { desc: "On switch-in, if this Pokemon is a Wishiwashi that is level 20 or above and has more than 1/4 of its maximum HP left, it changes to School Form. If it is in School Form and its HP drops to 1/4 of its maximum HP or less, it changes to Solo Form at the end of the turn. If it is in Solo Form and its HP is greater than 1/4 its maximum HP at the end of the turn, it changes to School Form.", shortDesc: "If user is Wishiwashi, changes to School Form if it has > 1/4 max HP, else Solo Form.", - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Wishiwashi' || pokemon.level < 20 || pokemon.transformed) return; if (pokemon.hp > pokemon.maxhp / 4) { if (pokemon.template.speciesid === 'wishiwashi') { pokemon.formeChange('Wishiwashi-School'); - this.add('-formechange', pokemon, 'Wishiwashi-School', '[from] ability: Schooling'); } } else { if (pokemon.template.speciesid === 'wishiwashischool') { pokemon.formeChange('Wishiwashi'); - this.add('-formechange', pokemon, 'Wishiwashi', '[from] ability: Schooling'); } } }, onResidualOrder: 27, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Wishiwashi' || pokemon.level < 20 || pokemon.transformed || !pokemon.hp) return; if (pokemon.hp > pokemon.maxhp / 4) { if (pokemon.template.speciesid === 'wishiwashi') { pokemon.formeChange('Wishiwashi-School'); - this.add('-formechange', pokemon, 'Wishiwashi-School', '[from] ability: Schooling'); } } else { if (pokemon.template.speciesid === 'wishiwashischool') { pokemon.formeChange('Wishiwashi'); - this.add('-formechange', pokemon, 'Wishiwashi', '[from] ability: Schooling'); } } }, id: "schooling", name: "Schooling", - rating: 2.5, + rating: 3, num: 208, }, "scrappy": { shortDesc: "This Pokemon can hit Ghost types with Normal- and Fighting-type moves.", onModifyMovePriority: -5, - onModifyMove: function (move) { + onModifyMove(move) { if (!move.ignoreImmunity) move.ignoreImmunity = {}; if (move.ignoreImmunity !== true) { move.ignoreImmunity['Fighting'] = true; @@ -2910,11 +2890,11 @@ exports.BattleAbilities = { "serenegrace": { shortDesc: "This Pokemon's moves have their secondary effect chance doubled.", onModifyMovePriority: -2, - onModifyMove: function (move) { + onModifyMove(move) { if (move.secondaries) { this.debug('doubling secondary chance'); - for (let i = 0; i < move.secondaries.length; i++) { - move.secondaries[i].chance *= 2; + for (const secondary of move.secondaries) { + if (secondary.chance) secondary.chance *= 2; } } }, @@ -2924,9 +2904,9 @@ exports.BattleAbilities = { num: 32, }, "shadowshield": { - desc: "If this Pokemon is at full HP, damage taken from attacks is halved. Moongeist Beam, Sunsteel Strike, and the Abilities Mold Breaker, Teravolt, and Turboblaze cannot ignore this Ability.", + desc: "If this Pokemon is at full HP, damage taken from attacks is halved. Moongeist Beam, Sunsteel Strike, and the Mold Breaker, Teravolt, and Turboblaze Abilities cannot ignore this Ability.", shortDesc: "If this Pokemon is at full HP, damage taken from attacks is halved.", - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (target.hp >= target.maxhp) { this.debug('Shadow Shield weaken'); return this.chainModify(0.5); @@ -2941,12 +2921,12 @@ exports.BattleAbilities = { "shadowtag": { desc: "Prevents 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 unless they also have this Ability.", - onFoeTrapPokemon: function (pokemon) { + onFoeTrapPokemon(pokemon) { if (!pokemon.hasAbility('shadowtag') && this.isAdjacent(pokemon, this.effectData.target)) { pokemon.tryTrap(true); } }, - onFoeMaybeTrapPokemon: function (pokemon, source) { + onFoeMaybeTrapPokemon(pokemon, source) { if (!source) source = this.effectData.target; if (!pokemon.hasAbility('shadowtag') && this.isAdjacent(pokemon, source)) { pokemon.maybeTrapped = true; @@ -2962,8 +2942,8 @@ exports.BattleAbilities = { shortDesc: "This Pokemon has a 33% chance to have its status cured at the end of each turn.", onResidualOrder: 5, onResidualSubOrder: 1, - onResidual: function (pokemon) { - if (pokemon.hp && pokemon.status && this.random(3) === 0) { + onResidual(pokemon) { + if (pokemon.hp && pokemon.status && this.randomChance(1, 3)) { this.debug('shed skin'); this.add('-activate', pokemon, 'ability: Shed Skin'); pokemon.cureStatus(); @@ -2977,19 +2957,18 @@ exports.BattleAbilities = { "sheerforce": { desc: "This Pokemon's attacks with secondary effects have their power multiplied by 1.3, but the secondary effects are removed.", shortDesc: "This Pokemon's attacks with secondary effects have 1.3x power; nullifies the effects.", - onModifyMove: function (move, pokemon) { + 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 - pokemon.addVolatile('sheerforce'); + move.hasSheerForce = true; } }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x14CD, 0x1000]); - }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.hasSheerForce) return this.chainModify([0x14CD, 0x1000]); }, id: "sheerforce", name: "Sheer Force", @@ -3006,7 +2985,7 @@ exports.BattleAbilities = { }, "shielddust": { shortDesc: "This Pokemon is not affected by the secondary effect of another Pokemon's attack.", - onModifySecondaries: function (secondaries) { + onModifySecondaries(secondaries) { this.debug('Shield Dust prevent secondary'); return secondaries.filter(effect => !!(effect.self || effect.dustproof)); }, @@ -3016,60 +2995,57 @@ exports.BattleAbilities = { num: 19, }, "shieldsdown": { - desc: "If this Pokemon is a Minior, it changes to its Core forme if it has 1/2 or less of its maximum HP, and changes to Meteor Form if it has more than 1/2 its maximum HP. This check is done on switch-in and at the end of each turn. While in its Meteor Form, it cannot become affected by major status conditions. Moongeist Beam, Sunsteel Strike, and the Abilities Mold Breaker, Teravolt, and Turboblaze cannot ignore this Ability.", + desc: "If this Pokemon is a Minior, it changes to its Core forme if it has 1/2 or less of its maximum HP, and changes to Meteor Form if it has more than 1/2 its maximum HP. This check is done on switch-in and at the end of each turn. While in its Meteor Form, it cannot become affected by major status conditions. Moongeist Beam, Sunsteel Strike, and the Mold Breaker, Teravolt, and Turboblaze Abilities cannot ignore this Ability.", shortDesc: "If Minior, switch-in/end of turn it changes to Core at 1/2 max HP or less, else Meteor.", - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Minior' || pokemon.transformed) return; if (pokemon.hp > pokemon.maxhp / 2) { if (pokemon.template.speciesid === 'minior') { pokemon.formeChange('Minior-Meteor'); - this.add('-formechange', pokemon, 'Minior-Meteor', '[from] ability: Shields Down'); } } else { if (pokemon.template.speciesid !== 'minior') { pokemon.formeChange(pokemon.set.species); - this.add('-formechange', pokemon, pokemon.set.species, '[from] ability: Shields Down'); } } }, onResidualOrder: 27, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Minior' || pokemon.transformed || !pokemon.hp) return; if (pokemon.hp > pokemon.maxhp / 2) { if (pokemon.template.speciesid === 'minior') { pokemon.formeChange('Minior-Meteor'); - this.add('-formechange', pokemon, 'Minior-Meteor', '[msg]', '[from] ability: Shields Down'); } } else { if (pokemon.template.speciesid !== 'minior') { pokemon.formeChange(pokemon.set.species); - this.add('-formechange', pokemon, pokemon.set.species, '[msg]', '[from] ability: Shields Down'); } } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (target.template.speciesid !== 'miniormeteor' || target.transformed) return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Shields Down'); + this.add('-immune', target, '[from] ability: Shields Down'); return false; }, - onTryAddVolatile: function (status, target) { + onTryAddVolatile(status, target) { if (target.template.speciesid !== 'miniormeteor' || target.transformed) return; if (status.id !== 'yawn') return; - this.add('-immune', target, '[msg]', '[from] ability: Shields Down'); + this.add('-immune', target, '[from] ability: Shields Down'); return null; }, isUnbreakable: true, id: "shieldsdown", name: "Shields Down", - rating: 2.5, + rating: 3, num: 197, }, "simple": { - shortDesc: "If this Pokemon's stat stages are raised or lowered, the effect is doubled instead.", - onBoost: function (boost, target, source, effect) { + shortDesc: "When this Pokemon's stat stages are raised or lowered, the effect is doubled instead.", + onBoost(boost, target, source, effect) { if (effect && effect.id === 'zpower') return; for (let i in boost) { + // @ts-ignore boost[i] *= 2; } }, @@ -3080,8 +3056,8 @@ exports.BattleAbilities = { }, "skilllink": { shortDesc: "This Pokemon's multi-hit attacks always hit the maximum number of times.", - onModifyMove: function (move) { - if (move.multihit && move.multihit.length) { + onModifyMove(move) { + if (move.multihit && Array.isArray(move.multihit) && move.multihit.length) { move.multihit = move.multihit[1]; } if (move.multiaccuracy) { @@ -3095,26 +3071,26 @@ exports.BattleAbilities = { }, "slowstart": { shortDesc: "On switch-in, this Pokemon's Attack and Speed are halved for 5 turns.", - onStart: function (pokemon) { + onStart(pokemon) { pokemon.addVolatile('slowstart'); }, - onEnd: function (pokemon) { + onEnd(pokemon) { delete pokemon.volatiles['slowstart']; this.add('-end', pokemon, 'Slow Start', '[silent]'); }, effect: { duration: 5, - onStart: function (target) { + onStart(target) { this.add('-start', target, 'ability: Slow Start'); }, onModifyAtkPriority: 5, - onModifyAtk: function (atk, pokemon) { + onModifyAtk(atk, pokemon) { return this.chainModify(0.5); }, - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { return this.chainModify(0.5); }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Slow Start'); }, }, @@ -3125,7 +3101,7 @@ exports.BattleAbilities = { }, "slushrush": { shortDesc: "If Hail is active, this Pokemon's Speed is doubled.", - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (this.isWeather('hail')) { return this.chainModify(2); } @@ -3137,7 +3113,7 @@ exports.BattleAbilities = { }, "sniper": { shortDesc: "If this Pokemon strikes with a critical hit, the damage is multiplied by 1.5.", - onModifyDamage: function (damage, source, target, move) { + onModifyDamage(damage, source, target, move) { if (move.crit) { this.debug('Sniper boost'); return this.chainModify(1.5); @@ -3145,16 +3121,16 @@ exports.BattleAbilities = { }, id: "sniper", name: "Sniper", - rating: 1, + rating: 1.5, num: 97, }, "snowcloak": { desc: "If Hail is active, this Pokemon's evasiveness is multiplied by 1.25. This Pokemon takes no damage from Hail.", shortDesc: "If Hail is active, this Pokemon's evasiveness is 1.25x; immunity to Hail.", - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'hail') return false; }, - onModifyAccuracy: function (accuracy) { + onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; if (this.isWeather('hail')) { this.debug('Snow Cloak - decreasing accuracy'); @@ -3168,7 +3144,7 @@ exports.BattleAbilities = { }, "snowwarning": { shortDesc: "On switch-in, this Pokemon summons Hail.", - onStart: function (source) { + onStart(source) { this.setWeather('hail'); }, id: "snowwarning", @@ -3180,12 +3156,12 @@ exports.BattleAbilities = { desc: "If Sunny Day is active, this Pokemon's Special Attack is multiplied by 1.5 and it loses 1/8 of its maximum HP, rounded down, at the end of each turn.", shortDesc: "If Sunny Day is active, this Pokemon's Sp. Atk is 1.5x; loses 1/8 max HP per turn.", onModifySpAPriority: 5, - onModifySpA: function (spa, pokemon) { + onModifySpA(spa, pokemon) { if (this.isWeather(['sunnyday', 'desolateland'])) { return this.chainModify(1.5); } }, - onWeather: function (target, source, effect) { + onWeather(target, source, effect) { if (effect.id === 'sunnyday' || effect.id === 'desolateland') { this.damage(target.maxhp / 8, target, target); } @@ -3197,7 +3173,7 @@ exports.BattleAbilities = { }, "solidrock": { shortDesc: "This Pokemon receives 3/4 damage from supereffective attacks.", - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.typeMod > 0) { this.debug('Solid Rock neutralize'); return this.chainModify(0.75); @@ -3211,8 +3187,9 @@ exports.BattleAbilities = { "soulheart": { desc: "This Pokemon's Special Attack is raised by 1 stage when another Pokemon faints.", shortDesc: "This Pokemon's Sp. Atk is raised by 1 stage when another Pokemon faints.", - onAnyFaint: function () { - this.boost({spa:1}, this.effectData.target); + onAnyFaintPriority: 1, + onAnyFaint() { + this.boost({spa: 1}, this.effectData.target); }, id: "soulheart", name: "Soul-Heart", @@ -3221,15 +3198,15 @@ exports.BattleAbilities = { }, "soundproof": { shortDesc: "This Pokemon is immune to sound-based moves, including Heal Bell.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (move.flags['sound']) { - this.add('-immune', target, '[msg]', '[from] ability: Soundproof'); + this.add('-immune', target, '[from] ability: Soundproof'); return null; } }, - onAllyTryHitSide: function (target, source, move) { + onAllyTryHitSide(target, source, move) { if (move.flags['sound']) { - this.add('-immune', this.effectData.target, '[msg]', '[from] ability: Soundproof'); + this.add('-immune', this.effectData.target, '[from] ability: Soundproof'); } }, id: "soundproof", @@ -3242,9 +3219,9 @@ exports.BattleAbilities = { shortDesc: "This Pokemon's Speed is raised 1 stage at the end of each full turn on the field.", onResidualOrder: 26, onResidualSubOrder: 1, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.activeTurns) { - this.boost({spe:1}); + this.boost({spe: 1}); } }, id: "speedboost", @@ -3253,9 +3230,17 @@ exports.BattleAbilities = { num: 3, }, "stakeout": { - shortDesc: "This Pokemon's attacks deal double damage if the target switched in this turn.", - onModifyDamage: function (damage, source, target) { - if (!target.activeTurns) { + shortDesc: "This Pokemon's attacking stat is doubled against a target that switched in this turn.", + 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); } @@ -3267,7 +3252,7 @@ exports.BattleAbilities = { }, "stall": { shortDesc: "This Pokemon moves last among Pokemon using the same or greater priority moves.", - onModifyPriority: function (priority) { + onModifyPriority(priority) { return Math.round(priority) - 0.1; }, id: "stall", @@ -3277,9 +3262,9 @@ exports.BattleAbilities = { }, "stamina": { shortDesc: "This Pokemon's Defense is raised by 1 stage after it is damaged by a move.", - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.effectType === 'Move' && effect.id !== 'confused') { - this.boost({def:1}); + this.boost({def: 1}); } }, id: "stamina", @@ -3291,13 +3276,11 @@ exports.BattleAbilities = { 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.", shortDesc: "If Aegislash, changes Forme to Blade before attacks and Shield before King's Shield.", onBeforeMovePriority: 0.5, - onBeforeMove: function (attacker, defender, move) { + onBeforeMove(attacker, defender, move) { if (attacker.template.baseSpecies !== 'Aegislash' || attacker.transformed) return; if (move.category === 'Status' && move.id !== 'kingsshield') return; let targetSpecies = (move.id === 'kingsshield' ? 'Aegislash' : 'Aegislash-Blade'); - if (attacker.template.species !== targetSpecies && attacker.formeChange(targetSpecies)) { - this.add('-formechange', attacker, targetSpecies, '[from] ability: Stance Change'); - } + if (attacker.template.species !== targetSpecies) attacker.formeChange(targetSpecies); }, id: "stancechange", name: "Stance Change", @@ -3306,9 +3289,9 @@ exports.BattleAbilities = { }, "static": { shortDesc: "30% chance a Pokemon making contact with this Pokemon will be paralyzed.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move && move.flags['contact']) { - if (this.random(10) < 3) { + if (this.randomChance(3, 10)) { source.trySetStatus('par', target); } } @@ -3320,7 +3303,7 @@ exports.BattleAbilities = { }, "steadfast": { shortDesc: "If this Pokemon flinches, its Speed is raised by 1 stage.", - onFlinch: function (pokemon) { + onFlinch(pokemon) { this.boost({spe: 1}); }, id: "steadfast", @@ -3329,9 +3312,16 @@ exports.BattleAbilities = { num: 80, }, "steelworker": { - shortDesc: "This Pokemon's Steel-type attacks have their power multiplied by 1.5.", - onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + shortDesc: "This Pokemon's attacking stat is multiplied by 1.5 while using a Steel-type attack.", + onModifyAtkPriority: 5, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Steel') { + this.debug('Steelworker boost'); + return this.chainModify(1.5); + } + }, + onModifySpAPriority: 5, + onModifySpA(atk, attacker, defender, move) { if (move.type === 'Steel') { this.debug('Steelworker boost'); return this.chainModify(1.5); @@ -3344,12 +3334,13 @@ exports.BattleAbilities = { }, "stench": { shortDesc: "This Pokemon's attacks without a chance to flinch have a 10% chance to flinch.", - onModifyMove: function (move) { + onModifyMovePriority: -1, + onModifyMove(move) { if (move.category !== "Status") { this.debug('Adding Stench flinch'); if (!move.secondaries) move.secondaries = []; - for (let i = 0; i < move.secondaries.length; i++) { - if (move.secondaries[i].volatileStatus === 'flinch') return; + for (const secondary of move.secondaries) { + if (secondary.volatileStatus === 'flinch') return; } move.secondaries.push({ chance: 10, @@ -3364,8 +3355,9 @@ exports.BattleAbilities = { }, "stickyhold": { shortDesc: "This Pokemon cannot lose its held item due to another Pokemon's attack.", - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if (this.suppressingAttackEvents() && pokemon !== this.activePokemon || !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; @@ -3379,16 +3371,16 @@ exports.BattleAbilities = { "stormdrain": { desc: "This Pokemon is immune to Water-type moves and raises its Special Attack by 1 stage when hit by a Water-type move. If this Pokemon is not the target of a single-target Water-type move used by another Pokemon, this Pokemon redirects that move to itself if it is within the range of that move.", shortDesc: "This Pokemon draws Water moves to itself to raise Sp. Atk by 1; Water immunity.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Water') { - if (!this.boost({spa:1})) { - this.add('-immune', target, '[msg]', '[from] ability: Storm Drain'); + if (!this.boost({spa: 1})) { + this.add('-immune', target, '[from] ability: Storm Drain'); } return null; } }, - onAnyRedirectTarget: function (target, source, source2, move) { - if (move.type !== 'Water' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onAnyRedirectTarget(target, source, source2, move) { + if (move.type !== 'Water' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (this.validTarget(this.effectData.target, source, move.target)) { if (this.effectData.target !== target) { this.add('-activate', this.effectData.target, 'ability: Storm Drain'); @@ -3405,7 +3397,7 @@ exports.BattleAbilities = { desc: "This Pokemon's bite-based attacks have their power multiplied by 1.5.", shortDesc: "This Pokemon's bite-based attacks have 1.5x power. Bug Bite is not boosted.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.flags['bite']) { return this.chainModify(1.5); } @@ -3418,14 +3410,14 @@ exports.BattleAbilities = { "sturdy": { desc: "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: "If this Pokemon is at full HP, it survives one hit with at least 1 HP. Immune to OHKO.", - onTryHit: function (pokemon, target, move) { + onTryHit(pokemon, target, move) { if (move.ohko) { - this.add('-immune', pokemon, '[msg]', '[from] ability: Sturdy'); + this.add('-immune', pokemon, '[from] ability: Sturdy'); return null; } }, onDamagePriority: -100, - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { this.add('-ability', target, 'Sturdy'); return target.hp - 1; @@ -3439,18 +3431,18 @@ exports.BattleAbilities = { "suctioncups": { shortDesc: "This Pokemon cannot be forced to switch out by another Pokemon's attack or item.", onDragOutPriority: 1, - onDragOut: function (pokemon) { + onDragOut(pokemon) { this.add('-activate', pokemon, 'ability: Suction Cups'); return null; }, id: "suctioncups", name: "Suction Cups", - rating: 2, + rating: 1, num: 21, }, "superluck": { shortDesc: "This Pokemon's critical hit ratio is raised by 1 stage.", - onModifyCritRatio: function (critRatio) { + onModifyCritRatio(critRatio) { return critRatio + 1; }, id: "superluck", @@ -3460,7 +3452,7 @@ exports.BattleAbilities = { }, "surgesurfer": { shortDesc: "If Electric Terrain is active, this Pokemon's Speed is doubled.", - onModifySpe: function (spe) { + onModifySpe(spe) { if (this.isTerrain('electricterrain')) { return this.chainModify(2); } @@ -3472,16 +3464,16 @@ exports.BattleAbilities = { }, "swarm": { 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.", - shortDesc: "When this Pokemon has 1/3 or less of its max HP, its Bug attacks do 1.5x damage.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's attacking stat is 1.5x with Bug attacks.", onModifyAtkPriority: 5, - onModifyAtk: function (atk, attacker, defender, move) { + onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) { this.debug('Swarm boost'); return this.chainModify(1.5); } }, onModifySpAPriority: 5, - onModifySpA: function (atk, attacker, defender, move) { + onModifySpA(atk, attacker, defender, move) { if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) { this.debug('Swarm boost'); return this.chainModify(1.5); @@ -3496,14 +3488,14 @@ exports.BattleAbilities = { shortDesc: "This Pokemon and its allies cannot fall asleep.", id: "sweetveil", name: "Sweet Veil", - onAllySetStatus: function (status, target, source, effect) { + onAllySetStatus(status, target, source, effect) { if (status.id === 'slp') { this.debug('Sweet Veil interrupts sleep'); this.add('-activate', this.effectData.target, 'ability: Sweet Veil', '[of] ' + target); return null; } }, - onAllyTryAddVolatile: function (status, target) { + onAllyTryAddVolatile(status, target) { if (status.id === 'yawn') { this.debug('Sweet Veil blocking yawn'); this.add('-activate', this.effectData.target, 'ability: Sweet Veil', '[of] ' + target); @@ -3515,30 +3507,29 @@ exports.BattleAbilities = { }, "swiftswim": { shortDesc: "If Rain Dance is active, this Pokemon's Speed is doubled.", - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (this.isWeather(['raindance', 'primordialsea'])) { return this.chainModify(2); } }, id: "swiftswim", name: "Swift Swim", - rating: 2.5, + rating: 3, num: 33, }, "symbiosis": { desc: "If an ally uses its item, this Pokemon gives its item to that ally immediately. Does not activate if the ally's item was stolen or knocked off.", shortDesc: "If an ally uses its item, this Pokemon gives its item to that ally immediately.", - onAllyAfterUseItem: function (item, pokemon) { - let sourceItem = this.effectData.target.getItem(); - if (!sourceItem) return; - if (!this.singleEvent('TakeItem', item, this.effectData.target.itemData, this.effectData.target, pokemon, this.effectData, item)) return; - sourceItem = this.effectData.target.takeItem(); - if (!sourceItem) { + onAllyAfterUseItem(item, pokemon) { + let source = this.effectData.target; + let myItem = source.takeItem(); + if (!myItem) return; + // @ts-ignore + if (!this.singleEvent('TakeItem', myItem, source.itemData, pokemon, source, this.effectData, myItem) || !pokemon.setItem(myItem)) { + source.item = myItem.id; return; } - if (pokemon.setItem(sourceItem)) { - this.add('-activate', this.effectData.target, 'ability: Symbiosis', sourceItem, '[of] ' + pokemon); - } + this.add('-activate', source, 'ability: Symbiosis', myItem, '[of] ' + pokemon); }, id: "symbiosis", name: "Symbiosis", @@ -3548,11 +3539,14 @@ exports.BattleAbilities = { "synchronize": { desc: "If another Pokemon burns, paralyzes, poisons, or badly poisons this Pokemon, that Pokemon receives the same major status condition.", shortDesc: "If another Pokemon burns/poisons/paralyzes this Pokemon, it also gets that status.", - onAfterSetStatus: function (status, target, source, effect) { + onAfterSetStatus(status, target, source, effect) { if (!source || source === target) return; if (effect && effect.id === 'toxicspikes') return; if (status.id === 'slp' || status.id === 'frz') return; this.add('-activate', target, 'ability: Synchronize'); + // Hack to make status-prevention abilities think Synchronize is a status move + // and show messages when activating against it. + // @ts-ignore source.trySetStatus(status, target, {status: status.id, id: 'synchronize'}); }, id: "synchronize", @@ -3562,7 +3556,7 @@ exports.BattleAbilities = { }, "tangledfeet": { shortDesc: "This Pokemon's evasiveness is doubled as long as it is confused.", - onModifyAccuracy: function (accuracy, target) { + onModifyAccuracy(accuracy, target) { if (typeof accuracy !== 'number') return; if (target && target.volatiles['confusion']) { this.debug('Tangled Feet - decreasing accuracy'); @@ -3576,10 +3570,10 @@ exports.BattleAbilities = { }, "tanglinghair": { shortDesc: "Pokemon making contact with this Pokemon have their Speed lowered by 1 stage.", - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.flags['contact']) { this.add('-ability', target, 'Tangling Hair'); - this.boost({spe: -1}, source, target, null, null, true); + this.boost({spe: -1}, source, target, null, false, true); } }, id: "tanglinghair", @@ -3591,7 +3585,7 @@ exports.BattleAbilities = { desc: "This Pokemon's moves of 60 power or less have their power multiplied by 1.5. Does affect Struggle.", shortDesc: "This Pokemon's moves of 60 power or less have 1.5x power. Includes Struggle.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (basePower <= 60) { this.debug('Technician boost'); return this.chainModify(1.5); @@ -3604,7 +3598,7 @@ exports.BattleAbilities = { }, "telepathy": { shortDesc: "This Pokemon does not take damage from attacks made by its allies.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && target.side === source.side && move.category !== 'Status') { this.add('-activate', target, 'ability: Telepathy'); return null; @@ -3617,10 +3611,10 @@ exports.BattleAbilities = { }, "teravolt": { shortDesc: "This Pokemon's moves and their effects ignore the Abilities of other Pokemon.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Teravolt'); }, - onModifyMove: function (move) { + onModifyMove(move) { move.ignoreAbility = true; }, id: "teravolt", @@ -3632,14 +3626,14 @@ exports.BattleAbilities = { desc: "If a Pokemon uses a Fire- or Ice-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon.", shortDesc: "Fire/Ice-type moves against this Pokemon deal damage with a halved attacking stat.", onModifyAtkPriority: 6, - onSourceModifyAtk: function (atk, attacker, defender, move) { + onSourceModifyAtk(atk, attacker, defender, move) { if (move.type === 'Ice' || move.type === 'Fire') { this.debug('Thick Fat weaken'); return this.chainModify(0.5); } }, onModifySpAPriority: 5, - onSourceModifySpA: function (atk, attacker, defender, move) { + onSourceModifySpA(atk, attacker, defender, move) { if (move.type === 'Ice' || move.type === 'Fire') { this.debug('Thick Fat weaken'); return this.chainModify(0.5); @@ -3652,7 +3646,7 @@ exports.BattleAbilities = { }, "tintedlens": { shortDesc: "This Pokemon's attacks that are not very effective on a target deal double damage.", - onModifyDamage: function (damage, source, target, move) { + onModifyDamage(damage, source, target, move) { if (move.typeMod < 0) { this.debug('Tinted Lens boost'); return this.chainModify(2); @@ -3665,16 +3659,16 @@ exports.BattleAbilities = { }, "torrent": { 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 Water-type attack.", - shortDesc: "When this Pokemon has 1/3 or less of its max HP, its Water attacks do 1.5x damage.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's attacking stat is 1.5x with Water attacks.", onModifyAtkPriority: 5, - onModifyAtk: function (atk, attacker, defender, move) { + onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) { this.debug('Torrent boost'); return this.chainModify(1.5); } }, onModifySpAPriority: 5, - onModifySpA: function (atk, attacker, defender, move) { + onModifySpA(atk, attacker, defender, move) { if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) { this.debug('Torrent boost'); return this.chainModify(1.5); @@ -3689,7 +3683,7 @@ exports.BattleAbilities = { desc: "While this Pokemon is poisoned, the power of its physical attacks is multiplied by 1.5.", shortDesc: "While this Pokemon is poisoned, its physical attacks have 1.5x power.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if ((attacker.status === 'psn' || attacker.status === 'tox') && move.category === 'Physical') { return this.chainModify(1.5); } @@ -3702,7 +3696,7 @@ exports.BattleAbilities = { "toughclaws": { shortDesc: "This Pokemon's contact moves have their power multiplied by 1.3.", onBasePowerPriority: 8, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.flags['contact']) { return this.chainModify([0x14CD, 0x1000]); } @@ -3713,18 +3707,23 @@ exports.BattleAbilities = { num: 181, }, "trace": { - desc: "On switch-in, this Pokemon copies a random adjacent opposing Pokemon's Ability. If there is no Ability that can be copied at that time, this Ability will activate as soon as an Ability can be copied. Abilities that cannot be copied are Comatose, Disguise, Flower Gift, Forecast, Illusion, Imposter, Multitype, Schooling, Stance Change, Trace, and Zen Mode.", + desc: "On switch-in, or when this Pokemon acquires this ability, this Pokemon copies a random adjacent opposing Pokemon's Ability. However, if one or more adjacent Pokemon has the Ability \"No Ability\", Trace won't copy anything even if there is another valid Ability it could normally copy. Otherwise, if there is no Ability that can be copied at that time, this Ability will activate as soon as an Ability can be copied. Abilities that cannot be copied are the previously mentioned \"No Ability\", as well as Comatose, Disguise, Flower Gift, Forecast, Illusion, Imposter, Multitype, Schooling, Stance Change, Trace, and Zen Mode.", shortDesc: "On switch-in, or when it can, this Pokemon copies a random adjacent foe's Ability.", - onUpdate: function (pokemon) { - if (!pokemon.isStarted) return; + onStart(pokemon) { + if (pokemon.side.foe.active.some(foeActive => foeActive && this.isAdjacent(pokemon, foeActive) && foeActive.ability === 'noability')) { + this.effectData.gaveUp = true; + } + }, + onUpdate(pokemon) { + if (!pokemon.isStarted || this.effectData.gaveUp) return; let possibleTargets = pokemon.side.foe.active.filter(foeActive => foeActive && this.isAdjacent(pokemon, foeActive)); while (possibleTargets.length) { let rand = 0; if (possibleTargets.length > 1) rand = this.random(possibleTargets.length); let target = possibleTargets[rand]; let ability = this.getAbility(target.ability); - let bannedAbilities = {battlebond: 1, comatose:1, disguise:1, flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, powerconstruct:1, powerofalchemy:1, receiver:1, rkssystem:1, schooling:1, shieldsdown:1, stancechange:1, trace:1, zenmode:1}; - if (bannedAbilities[target.ability]) { + let bannedAbilities = ['noability', 'battlebond', 'comatose', 'disguise', 'flowergift', 'forecast', 'illusion', 'imposter', 'multitype', 'powerconstruct', 'powerofalchemy', 'receiver', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'trace', 'zenmode']; + if (bannedAbilities.includes(target.ability)) { possibleTargets.splice(rand, 1); continue; } @@ -3740,7 +3739,7 @@ exports.BattleAbilities = { }, "triage": { shortDesc: "This Pokemon's healing moves have their priority increased by 3.", - onModifyPriority: function (priority, pokemon, target, move) { + onModifyPriority(priority, pokemon, target, move) { if (move && move.flags['heal']) return priority + 3; }, id: "triage", @@ -3750,17 +3749,21 @@ exports.BattleAbilities = { }, "truant": { shortDesc: "This Pokemon skips every other turn instead of using a move.", + onStart(pokemon) { + pokemon.removeVolatile('truant'); + if (pokemon.activeTurns && (pokemon.moveThisTurnResult !== undefined || !this.willMove(pokemon))) { + pokemon.addVolatile('truant'); + } + }, onBeforeMovePriority: 9, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon) { if (pokemon.removeVolatile('truant')) { this.add('cant', pokemon, 'ability: Truant'); return false; } pokemon.addVolatile('truant'); }, - effect: { - duration: 2, - }, + effect: {}, id: "truant", name: "Truant", rating: -2, @@ -3768,10 +3771,10 @@ exports.BattleAbilities = { }, "turboblaze": { shortDesc: "This Pokemon's moves and their effects ignore the Abilities of other Pokemon.", - onStart: function (pokemon) { + onStart(pokemon) { this.add('-ability', pokemon, 'Turboblaze'); }, - onModifyMove: function (move) { + onModifyMove(move) { move.ignoreAbility = true; }, id: "turboblaze", @@ -3784,7 +3787,7 @@ exports.BattleAbilities = { shortDesc: "This Pokemon ignores other Pokemon's stat stages when taking or doing damage.", id: "unaware", name: "Unaware", - onAnyModifyBoost: function (boosts, target) { + onAnyModifyBoost(boosts, target) { let source = this.effectData.target; if (source === target) return; if (source === this.activePokemon && target === this.activeTarget) { @@ -3804,18 +3807,18 @@ exports.BattleAbilities = { "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 or Ability.", shortDesc: "Speed is doubled on held item loss; boost is lost if it switches, gets new item/Ability.", - onAfterUseItem: function (item, pokemon) { + onAfterUseItem(item, pokemon) { if (pokemon !== this.effectData.target) return; pokemon.addVolatile('unburden'); }, - onTakeItem: function (item, pokemon) { + onTakeItem(item, pokemon) { pokemon.addVolatile('unburden'); }, - onEnd: function (pokemon) { + onEnd(pokemon) { pokemon.removeVolatile('unburden'); }, effect: { - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (!pokemon.item) { return this.chainModify(2); } @@ -3827,8 +3830,9 @@ exports.BattleAbilities = { num: 84, }, "unnerve": { + desc: "While this Pokemon is active, it prevents opposing Pokemon from using their Berries. Activation message broadcasts before other Abilities regardless of the Pokemon's Speed tiers.", shortDesc: "While this Pokemon is active, it prevents opposing Pokemon from using their Berries.", - onPreStart: function (pokemon) { + onPreStart(pokemon) { this.add('-ability', pokemon, 'Unnerve', pokemon.side.foe); }, onFoeTryEatItem: false, @@ -3839,28 +3843,28 @@ exports.BattleAbilities = { }, "victorystar": { shortDesc: "This Pokemon and its allies' moves have their accuracy multiplied by 1.1.", - onAllyModifyMove: function (move) { + onAllyModifyMove(move) { if (typeof move.accuracy === 'number') { move.accuracy *= 1.1; } }, id: "victorystar", name: "Victory Star", - rating: 2.5, + rating: 3, num: 162, }, "vitalspirit": { shortDesc: "This Pokemon cannot fall asleep. Gaining this Ability while asleep cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'slp') { this.add('-activate', pokemon, 'ability: Vital Spirit'); pokemon.cureStatus(); } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id !== 'slp') return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Vital Spirit'); + this.add('-immune', target, '[from] ability: Vital Spirit'); return false; }, id: "vitalspirit", @@ -3871,10 +3875,10 @@ exports.BattleAbilities = { "voltabsorb": { desc: "This Pokemon is immune to Electric-type moves and restores 1/4 of its maximum HP, rounded down, when hit by an Electric-type move.", shortDesc: "This Pokemon heals 1/4 of its max HP when hit by Electric moves; Electric immunity.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Electric') { if (!this.heal(target.maxhp / 4)) { - this.add('-immune', target, '[msg]', '[from] ability: Volt Absorb'); + this.add('-immune', target, '[from] ability: Volt Absorb'); } return null; } @@ -3887,10 +3891,10 @@ exports.BattleAbilities = { "waterabsorb": { desc: "This Pokemon is immune to Water-type moves and restores 1/4 of its maximum HP, rounded down, when hit by a Water-type move.", shortDesc: "This Pokemon heals 1/4 of its max HP when hit by Water moves; Water immunity.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target !== source && move.type === 'Water') { if (!this.heal(target.maxhp / 4)) { - this.add('-immune', target, '[msg]', '[from] ability: Water Absorb'); + this.add('-immune', target, '[from] ability: Water Absorb'); } return null; } @@ -3901,29 +3905,40 @@ exports.BattleAbilities = { num: 11, }, "waterbubble": { - desc: "This Pokemon's Water-type attacks have their power doubled, the power of Fire-type attacks against this Pokemon is halved, and this Pokemon cannot be burned. Gaining this Ability while burned cures it.", + desc: "This Pokemon's attacking stat is doubled while using a Water-type attack. If a Pokemon uses a Fire-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon. This Pokemon cannot be burned. Gaining this Ability while burned cures it.", shortDesc: "This Pokemon's Water power is 2x; it can't be burned; Fire power against it is halved.", - onBasePowerPriority: 7, - onSourceBasePower: function (basePower, attacker, defender, move) { + onModifyAtkPriority: 5, + onSourceModifyAtk(atk, attacker, defender, move) { if (move.type === 'Fire') { return this.chainModify(0.5); } }, - onBasePower: function (basePower, attacker, defender, move) { + onModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire') { + return this.chainModify(0.5); + } + }, + onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Water') { return this.chainModify(2); } }, - onUpdate: function (pokemon) { + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Water') { + return this.chainModify(2); + } + }, + onUpdate(pokemon) { if (pokemon.status === 'brn') { this.add('-activate', pokemon, 'ability: Water Bubble'); pokemon.cureStatus(); } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id !== 'brn') return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Water Bubble'); + this.add('-immune', target, '[from] ability: Water Bubble'); return false; }, id: "waterbubble", @@ -3933,9 +3948,9 @@ exports.BattleAbilities = { }, "watercompaction": { shortDesc: "This Pokemon's Defense is raised 2 stages after it is damaged by a Water-type move.", - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.type === 'Water') { - this.boost({def:2}); + this.boost({def: 2}); } }, id: "watercompaction", @@ -3945,16 +3960,16 @@ exports.BattleAbilities = { }, "waterveil": { shortDesc: "This Pokemon cannot be burned. Gaining this Ability while burned cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'brn') { this.add('-activate', pokemon, 'ability: Water Veil'); pokemon.cureStatus(); } }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id !== 'brn') return; if (!effect || !effect.status) return false; - this.add('-immune', target, '[msg]', '[from] ability: Water Veil'); + this.add('-immune', target, '[from] ability: Water Veil'); return false; }, id: "waterveil", @@ -3965,9 +3980,9 @@ exports.BattleAbilities = { "weakarmor": { desc: "If a physical attack hits this Pokemon, its Defense is lowered by 1 stage and its Speed is raised by 2 stages.", shortDesc: "If a physical attack hits this Pokemon, Defense is lowered by 1, Speed is raised by 2.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move.category === 'Physical') { - this.boost({def:-1, spe:2}); + this.boost({def: -1, spe: 2}, target, target); } }, id: "weakarmor", @@ -3977,11 +3992,13 @@ exports.BattleAbilities = { }, "whitesmoke": { shortDesc: "Prevents other Pokemon from lowering this Pokemon's stat stages.", - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target === source) return; let showMsg = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { + // @ts-ignore delete boost[i]; showMsg = true; } @@ -3994,9 +4011,9 @@ exports.BattleAbilities = { num: 73, }, "wimpout": { - desc: "When this Pokemon has more than 1/2 its maximum HP and takes damage bringing it to 1/2 or less of its maximum HP, it immediately switches out to a chosen ally. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect. This effect applies to both direct and indirect damage, except Curse and Substitute on use, Belly Drum, Pain Split, Struggle recoil, and confusion damage.", + desc: "When this Pokemon has more than 1/2 its maximum HP and takes damage bringing it to 1/2 or less of its maximum HP, it immediately switches out to a chosen ally. This effect applies after all hits from a multi-hit move; Sheer Force prevents it from activating if the move has a secondary effect. This effect applies to both direct and indirect damage, except Curse and Substitute on use, Belly Drum, Pain Split, and confusion damage.", shortDesc: "This Pokemon switches out when it reaches 1/2 or less of its maximum HP.", - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (!source || source === target || !target.hp || !move.totalDamage) return; if (target.hp <= target.maxhp / 2 && target.hp + move.totalDamage > target.maxhp / 2) { if (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return; @@ -4005,7 +4022,7 @@ exports.BattleAbilities = { this.add('-activate', target, 'ability: Wimp Out'); } }, - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (!target.hp || effect.effectType === 'Move') return; if (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) { if (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return; @@ -4020,11 +4037,11 @@ exports.BattleAbilities = { }, "wonderguard": { shortDesc: "This Pokemon can only be damaged by supereffective moves and indirect damage.", - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle') return; this.debug('Wonder Guard immunity: ' + move.id); if (target.runEffectiveness(move) <= 0) { - this.add('-immune', target, '[msg]', '[from] ability: Wonder Guard'); + this.add('-immune', target, '[from] ability: Wonder Guard'); return null; } }, @@ -4037,7 +4054,7 @@ exports.BattleAbilities = { desc: "All non-damaging moves that check accuracy have their accuracy changed to 50% when used on this Pokemon. This change is done before any other accuracy modifying effects.", shortDesc: "Status moves with accuracy checks are 50% accurate when used on this Pokemon.", onModifyAccuracyPriority: 10, - onModifyAccuracy: function (accuracy, target, source, move) { + onModifyAccuracy(accuracy, target, source, move) { if (move.category === 'Status' && typeof move.accuracy === 'number') { this.debug('Wonder Skin - setting accuracy to 50'); return 50; @@ -4049,10 +4066,10 @@ exports.BattleAbilities = { num: 147, }, "zenmode": { - desc: "If this Pokemon is a Darmanitan, it changes to Zen Mode if it has 1/2 or less of its maximum HP at the end of a turn. If Darmanitan's HP is above 1/2 of its maximum HP at the end of a turn, it changes back to Standard Mode. If Darmanitan loses this Ability while in Zen Mode it reverts to Standard Mode immediately.", + desc: "If this Pokemon is a Darmanitan, it changes to Zen Mode if it has 1/2 or less of its maximum HP at the end of a turn. If Darmanitan's HP is above 1/2 of its maximum HP at the end of a turn, it changes back to Standard Mode. This Ability cannot be removed or suppressed.", shortDesc: "If Darmanitan, at end of turn changes Mode to Standard if > 1/2 max HP, else Zen.", onResidualOrder: 27, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.baseTemplate.baseSpecies !== 'Darmanitan' || pokemon.transformed) { return; } @@ -4063,22 +4080,18 @@ exports.BattleAbilities = { pokemon.removeVolatile('zenmode'); } }, - onEnd: function (pokemon) { + onEnd(pokemon) { if (!pokemon.volatiles['zenmode'] || !pokemon.hp) return; pokemon.transformed = false; delete pokemon.volatiles['zenmode']; - if (pokemon.formeChange('Darmanitan')) { - this.add('-formechange', pokemon, 'Darmanitan', '[silent]'); - } + pokemon.formeChange('Darmanitan', this.effect, false, '[silent]'); }, effect: { - onStart: function (pokemon) { - if (pokemon.template.speciesid === 'darmanitanzen' || !pokemon.formeChange('Darmanitan-Zen')) return; - this.add('-formechange', pokemon, 'Darmanitan-Zen', '[from] ability: Zen Mode'); + onStart(pokemon) { + if (pokemon.template.speciesid !== 'darmanitanzen') pokemon.formeChange('Darmanitan-Zen'); }, - onEnd: function (pokemon) { - if (!pokemon.formeChange('Darmanitan')) return; - this.add('-formechange', pokemon, 'Darmanitan', '[from] ability: Zen Mode'); + onEnd(pokemon) { + pokemon.formeChange('Darmanitan'); }, }, id: "zenmode", @@ -4090,14 +4103,14 @@ exports.BattleAbilities = { // CAP "mountaineer": { shortDesc: "On switch-in, this Pokemon avoids all Rock-type attacks and Stealth Rock.", - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (effect && effect.id === 'stealthrock') { return false; } }, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (move.type === 'Rock' && !target.activeTurns) { - this.add('-immune', target, '[msg]', '[from] ability: Mountaineer'); + this.add('-immune', target, '[from] ability: Mountaineer'); return null; } }, @@ -4114,24 +4127,24 @@ exports.BattleAbilities = { isNonstandard: true, name: "Rebound", onTryHitPriority: 1, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (this.effectData.target.activeTurns) return; if (target === source || move.hasBounced || !move.flags['reflectable']) { return; } - let newMove = this.getMoveCopy(move.id); + let newMove = this.getActiveMove(move.id); newMove.hasBounced = true; this.useMove(newMove, target, source); return null; }, - onAllyTryHitSide: function (target, source, move) { + onAllyTryHitSide(target, source, move) { if (this.effectData.target.activeTurns) return; if (target.side === source.side || move.hasBounced || !move.flags['reflectable']) { return; } - let newMove = this.getMoveCopy(move.id); + let newMove = this.getActiveMove(move.id); newMove.hasBounced = true; this.useMove(newMove, this.effectData.target, source); return null; @@ -4143,7 +4156,8 @@ exports.BattleAbilities = { num: -3, }, "persistent": { - shortDesc: "The duration of certain field effects is increased by 2 turns if used by this Pokemon.", + desc: "The duration of Gravity, Heal Block, Magic Room, Safeguard, Tailwind, Trick Room, and Wonder Room is increased by 2 turns if the effect is started by this Pokemon.", + shortDesc: "When used, Gravity/Heal Block/Safeguard/Tailwind/Room effects last 2 more turns.", id: "persistent", isNonstandard: true, name: "Persistent", @@ -4152,3 +4166,5 @@ exports.BattleAbilities = { num: -4, }, }; + +exports.BattleAbilities = BattleAbilities; diff --git a/data/aliases.js b/data/aliases.js index d1fe36dc86ced..82650f22b7d22 100644 --- a/data/aliases.js +++ b/data/aliases.js @@ -1,44 +1,42 @@ 'use strict'; -exports.BattleAliases = { +/**@type {{[k: string]: string}} */ +let BattleAliases = { // formats - "randombattle": "[Gen 7] Random Battle", "randbats": "[Gen 7] Random Battle", + "uber": "[Gen 7] Ubers", "ag": "[Gen 7] Anything Goes", - "randomdoublesbattle": "[Gen 7] Random Doubles Battle", "randdubs": "[Gen 7] Random Doubles Battle", "doubles": "[Gen 7] Doubles OU", + "dubs": "[Gen 7] Doubles OU", "dou": "[Gen 7] Doubles OU", - "vgc2017": "[Gen 7] VGC 2017", + "duu": "[Gen 7] Doubles UU", + "dubsuu": "[Gen 7] Doubles UU", "vgc17": "[Gen 7] VGC 2017", - "vgc": "[Gen 7] VGC 2017", + "vgc18": "[Gen 7] VGC 2018", + "vgc": "[Gen 7] VGC 2019 Moon Series", //moon series starts jan 1 + "sun": "[Gen 7] VGC 2019 Sun Series", + "moon": "[Gen 7] VGC 2019 Moon Series", + "ultra": "[Gen 7] VGC 2019 Ultra Series", "bss": "[Gen 7] Battle Spot Singles", "bsd": "[Gen 7] Battle Spot Doubles", "bsdoubles": "[Gen 7] Battle Spot Doubles", "bstriples": "[Gen 6] Battle Spot Triples", "bssf": "[Gen 7] BSS Factory", - "balancedhackmons": "[Gen 7] Balanced Hackmons", "bh": "[Gen 7] Balanced Hackmons", - "1v1": "[Gen 7] 1v1", - "monotype": "[Gen 7] Monotype", - "mixandmega": "[Gen 7] Mix and Mega", "mnm": "[Gen 7] Mix and Mega", "aaa": "[Gen 7] Almost Any Ability", - "almostanyability": "[Gen 7] Almost Any Ability", - "sketchmons": "[Gen 7] Sketchmons", - "hiddentype": "[Gen 7] Hidden Type", - "ht": "[Gen 7] Hidden Type", - "bhdoubles": "[Gen 7] BH Doubles", - "theorymon": "[Gen 6] OU Theorymon", - "challengecup1v1": "[Gen 7] Challenge Cup 1v1", + "pic": "[Gen 7] Partners in Crime", + "2v2": "[Gen 7] 2v2 Doubles", + "letsgosingles": "[Gen 7 Let's Go] Singles No Restrictions", + "letsgodoubles": "[Gen 7 Let's Go] Doubles No Restrictions", "cc1v1": "[Gen 7] Challenge Cup 1v1", - "hackmonscup": "[Gen 7] Hackmons Cup", + "cc2v2": "[Gen 7] Challenge Cup 2v2", "hc": "[Gen 7] Hackmons Cup", - "monotyperandombattle": "[Gen 7] Monotype Random Battle", "monorandom": "[Gen 7] Monotype Random Battle", - "bf": "[Gen 6] Battle Factory", - "gen6inverse": "[Gen 6] Inverse Battle", - "uber": "[Gen 7] Ubers", + "bf": "[Gen 7] Battle Factory", + "gen6bf": "[Gen 6] Battle Factory", + "ssb": "[Gen 7] Super Staff Bros Brawl", // mega evos "fabio": "Ampharos-Mega", @@ -253,6 +251,7 @@ exports.BattleAliases = { "floetteeternalflower": "Floette-Eternal", "ashgreninja": "Greninja-Ash", "zydog": "Zygarde-10%", + "zydoge": "Zygarde-10%", "zygardedog": "Zygarde-10%", "zygarde50": "Zygarde", "zyc": "Zygarde-Complete", @@ -273,10 +272,20 @@ exports.BattleAliases = { "oricoriop": "Oricorio-Pa'u", "oricoriopsychic": "Oricorio-Pa'u", "lycanrocmidday": "Lycanroc", - "lycanrocd": "Lycanroc", "lycanrocday": "Lycanroc", "lycanrocn": "Lycanroc-Midnight", "lycanrocnight": "Lycanroc-Midnight", + "lycanrocd": "Lycanroc-Dusk", + "necrozmadm": "Necrozma-Dusk-Mane", + "necrozmadusk": "Necrozma-Dusk-Mane", + "duskmane": "Necrozma-Dusk-Mane", + "duskmanenecrozma": "Necrozma-Dusk-Mane", + "necrozmadw": "Necrozma-Dawn-Wings", + "necrozmadawn": "Necrozma-Dawn-Wings", + "dawnwings": "Necrozma-Dawn-Wings", + "dawnwingsnecrozma": "Necrozma-Dawn-Wings", + "necrozmau": "Necrozma-Ultra", + "ultranecrozma": "Necrozma-Ultra", "ufop": "Pokestar UFO-2", "ufopsychic": "Pokestar UFO-2", @@ -328,6 +337,37 @@ exports.BattleAliases = { "ufof": "Pokestar UFO", "ufoflying": "Pokestar UFO", + // event formes + "rockruffdusk": "Rockruff", + + // totem formes + "raticatet": "Raticate-Alola-Totem", + "totemalolanraticate": "Raticate-Alola-Totem", + "totemraticate": "Raticate-Alola-Totem", + "totemraticatea": "Raticate-Alola-Totem", + "totemraticatealola": "Raticate-Alola-Totem", + "marowakt": "Marowak-Alola-Totem", + "totemalolanmarowak": "Marowak-Alola-Totem", + "totemmarowak": "Marowak-Alola-Totem", + "totemmarowaka": "Marowak-Alola-Totem", + "totemmarowakalola": "Marowak-Alola-Totem", + "gumshoost": "Gumshoos-Totem", + "totemgumshoos": "Gumshoos-Totem", + "totemvikavolt": "Vikavolt-Totem", + "vikavoltt": "Vikavolt-Totem", + "ribombeet": "Ribombee-Totem", + "totemribombee": "Ribombee-Totem", + "araquanidt": "Araquanid-Totem", + "totemaraquanid": "Araquanid-Totem", + "lurantist": "Lurantis-Totem", + "totemlurantis": "Lurantis-Totem", + "salazzlet": "Salazzle-Totem", + "totemsalazzle": "Salazzle-Totem", + "mimikyut": "Mimikyu-Totem", + "totemmimikyu": "Mimikyu-Totem", + "kommoot": "Kommo-o-Totem", + "totemkommoo": "Kommo-o-Totem", + // cosmetic formes "burmygrass": "Burmy", "burmyplant": "Burmy", @@ -372,6 +412,11 @@ exports.BattleAliases = { "flabebeorange": "Flabebe", "flabebewhite": "Flabebe", "flabebeyellow": "Flabebe", + "flabbred": "Flabebe", + "flabbblue": "Flabebe", + "flabborange": "Flabebe", + "flabbwhite": "Flabebe", + "flabbyellow": "Flabebe", "floettered": "Floette", "floetteblue": "Floette", "floetteorange": "Floette", @@ -382,6 +427,15 @@ exports.BattleAliases = { "florgesorange": "Florges", "florgeswhite": "Florges", "florgesyellow": "Florges", + "furfroudandy": "Furfrou", + "furfroudebutante": "Furfrou", + "furfroudiamond": "Furfrou", + "furfrouheart": "Furfrou", + "furfroukabuki": "Furfrou", + "furfroulareine": "Furfrou", + "furfroumatron": "Furfrou", + "furfroupharaoh": "Furfrou", + "furfroustar": "Furfrou", "miniorred": "Minior", "miniororange": "Minior", "minioryellow": "Minior", @@ -393,7 +447,6 @@ exports.BattleAliases = { "pokestarmonica2": "Pokestar Giant", "pokestarufopropu1": "Pokestar UFO", "pokestarpropu1": "Pokestar UFO", - "pokestarufopropu2": "Pokestar UFO-2", "pokestarpropu2": "Pokestar UFO-2", "pokestarbrycenmanprop": "Pokestar Brycen-Man", "pokestarproph1": "Pokestar Brycen-Man", @@ -465,47 +518,43 @@ exports.BattleAliases = { // items "assvest": "Assault Vest", "av": "Assault Vest", + "balloon": "Air Balloon", "band": "Choice Band", "cb": "Choice Band", - "chesto": "Chesto Berry", - "chople": "Chople Berry", - "custap": "Custap Berry", "ebelt": "Expert Belt", "fightgem": "Fighting Gem", "flightgem": "Flying Gem", "goggles": "Safety Goggles", + "helmet": "Rocky Helmet", "lefties": "Leftovers", - "leppa": "Leppa Berry", "lo": "Life Orb", "lorb": "Life Orb", - "lum": "Lum Berry", - "occa": "Occa Berry", - "petaya": "Petaya Berry", - "salac": "Salac Berry", "sash": "Focus Sash", "scarf": "Choice Scarf", - "sitrus": "Sitrus Berry", "specs": "Choice Specs", "wp": "Weakness Policy", - "yache": "Yache Berry", // pokemon "aboma": "Abomasnow", - "arc": "Arceus", - "arceusnormal": "Arceus", "aegi": "Aegislash", "aegiblade": "Aegislash-Blade", "aegis": "Aegislash", "aero": "Aerodactyl", "amph": "Ampharos", + "arc": "Arceus", + "arceusnormal": "Arceus", "ashgren": "Greninja-Ash", "azu": "Azumarill", - "bliss": "Blissey", - "birdjesus": "Pidgeot", - "bee": "Beedrill", "bdrill": "Beedrill", + "bee": "Beedrill", + "birdjesus": "Pidgeot", + "bish": "Bisharp", + "blace": "Blacephalon", + "bliss": "Blissey", "bulu": "Tapu Bulu", + "camel": "Camerupt", "cathy": "Trevenant", + "chandy": "Chandelure", "chomp": "Garchomp", "clef": "Clefable", "coba": "Cobalion", @@ -514,9 +563,10 @@ exports.BattleAliases = { "cress": "Cresselia", "cube": "Kyurem-Black", "cune": "Suicune", + "darm": "Darmanitan", "dnite": "Dragonite", - "don": "Groudon", "dogars": "Koffing", + "don": "Groudon", "drill": "Excadrill", "driller": "Excadrill", "dug": "Dugtrio", @@ -530,6 +580,7 @@ exports.BattleAliases = { "gar": "Gengar", "garde": "Gardevoir", "gatr": "Feraligatr", + "gene": "Genesect", "gira": "Giratina", "gren": "Greninja", "gross": "Metagross", @@ -539,6 +590,7 @@ exports.BattleAliases = { "honch": "Honchkrow", "kanga": "Kangaskhan", "karp": "Magikarp", + "kart": "Kartana", "keld": "Keldeo", "klef": "Klefki", "koko": "Tapu Koko", @@ -549,32 +601,38 @@ exports.BattleAliases = { "lando": "Landorus", "landoi": "Landorus", "landot": "Landorus-Therian", + "lego": "Nihilego", "lele": "Tapu Lele", "linda": "Fletchinder", - "luke": "Lucario", + "luke": "Lucario", "lurk": "Golurk", - "mamo": "Mamoswine", "mage": "Magearna", + "mamo": "Mamoswine", "mandi": "Mandibuzz", "mence": "Salamence", "milo": "Milotic", + "morfentshusbando": "Gengar", + "naga": "Naganadel", "nape": "Infernape", "nebby": "Cosmog", + "neckboy": "Exeggutor-Alola", "obama": "Abomasnow", "ogre": "Kyogre", "ohmagod": "Plasmanta", - "pert": "Swampert", "p2": "Porygon2", + "pert": "Swampert", + "pex": "Toxapex", "phero": "Pheromosa", "pika": "Pikachu", "pory2": "Porygon2", - "pz": "Porygon-Z", "poryz": "Porygon-Z", "pyuku": "Pyukumuku", + "pz": "Porygon-Z", "queen": "Nidoqueen", - "rank": "Reuniclus", "rachi": "Jirachi", + "rank": "Reuniclus", "ray": "Rayquaza", + "reuni": "Reuniclus", "sab": "Sableye", "sable": "Sableye", "scept": "Sceptile", @@ -584,15 +642,19 @@ exports.BattleAliases = { "skarm": "Skarmory", "smogon": "Koffing", "smogonbird": "Talonflame", + "staka": "Stakataka", + "steela": "Celesteela", "sui": "Suicune", + "swole": "Buzzwole", "talon": "Talonflame", "tang": "Tangrowth", "terra": "Terrakion", "tflame": "Talonflame", + "thundy": "Thundurus", + "toed": "Politoed", "torn": "Tornadus", "tran": "Heatran", "ttar": "Tyranitar", - "thundy": "Thundurus", "venu": "Venusaur", "viriz": "Virizion", "whimsi": "Whimsicott", @@ -603,8 +665,9 @@ exports.BattleAliases = { "zard": "Charizard", "zong": "Bronzong", "zor": "Scizor", + "zyg": "Zygarde", - // ultra beasts + // ultra beast codenames "ub01": "Nihilego", "ub02a": "Buzzwole", "ub02b": "Pheromosa", @@ -612,6 +675,9 @@ exports.BattleAliases = { "ub04blade": "Kartana", "ub04blaster": "Celesteela", "ub05": "Guzzlord", + "ubburst": "Blacephalon", + "ubassembly": "Stakataka", + "ubadhesive": "Poipole", // moves "bb": "Brave Bird", @@ -625,8 +691,10 @@ exports.BattleAliases = { "dv": "Dark Void", "eq": "Earthquake", "espeed": "ExtremeSpeed", + "eterrain": "Electric Terrain", "faintattack": "Feint Attack", "glowpunch": "Power-up Punch", + "gterrain": "Grassy Terrain", "hp": "Hidden Power", "hpbug": "Hidden Power Bug", "hpdark": "Hidden Power Dark", @@ -646,8 +714,11 @@ exports.BattleAliases = { "hpwater": "Hidden Power Water", "hjk": "High Jump Kick", "hijumpkick": "High Jump Kick", + "mterrain": "Misty Terrain", "np": "Nasty Plot", + "pfists": "Plasma Fists", "playaround": "Play Rough", + "pterrain": "Psychic Terrain", "pup": "Power-up Punch", "qd": "Quiver Dance", "rocks": "Stealth Rock", @@ -666,57 +737,896 @@ exports.BattleAliases = { // z-moves "10mv": "10,000,000 Volt Thunderbolt", + "10mvt": "10,000,000 Volt Thunderbolt", + "clangorous": "Clangorous Soulblaze", + "cs": "Clangorous Soulblaze", + "ee": "Extreme Evoboost", + "extreme": "Extreme Evoboost", "genesis": "Genesis Supernova", "goa": "Guardian of Alola", + "gs": "Genesis Supernova", + "guardian": "Guardian of Alola", + "lets": "Let's Snuggle Forever", + "light": "Light That Burns the Sky", + "lsf": "Let's Snuggle Forever", + "ltbts": "Light That Burns the Sky", + "malicious": "Malicious Moonsault", + "menacing": "Menacing Moonraze Maelstrom", + "mmm": "Menacing Moonraze Maelstrom", "moonsault": "Malicious Moonsault", "oceanic": "Oceanic Operetta", + "oo": "Oceanic Operetta", + "pp": "Pulverizing Pancake", + "pulverizing": "Pulverizing Pancake", "sar": "Sinister Arrow Raid", + "searing": "Searing Sunraze Smash", + "sinister": "Sinister Arrow Raid", + "ss": "Stoked Sparksurfer", + "sss": "Searing Sunraze Smash", "sssss": "Soul-Stealing 7-Star Strike", "ss7ss": "Soul-Stealing 7-Star Strike", + "soul": "Soul-Stealing 7-Star Strike", "soulstealingsevenstarstrike": "Soul-Stealing 7-Star Strike", + "splintered": "Splintered Stormshards", "stoked": "Stoked Sparksurfer", + "stormshards": "Splintered Stormshards", "zbug": "Savage Spin-Out", + "zclangingscales": "Clangorous Soulblaze", "zdark": "Black Hole Eclipse", + "zdarkestlariat": "Malicious Moonsault", + "zdawnwingsnecrozma": "Menacing Moonraze Maelstrom", + "zdecidueye": "Sinister Arrow Raid", "zdragon": "Devastating Drake", + "zduskmanenecrozma": "Searing Sunraze Smash", "zelectric": "Gigavolt Havoc", + "zeevee": "Extreme Evoboost", "zevo": "Extreme Evoboost", "zfairy": "Twinkle Tackle", "zflying": "Supersonic Skystrike", "zfighting": "All-Out Pummeling", "zfire": "Inferno Overdrive", "zghost": "Never-Ending Nightmare", + "zgigaimpact": "Pulverizing Pancake", "zgrass": "Bloom Doom", "zground": "Tectonic Rage", "zice": "Subzero Slammer", + "zincineroar": "Malicious Moonsault", + "zkommoo": "Clangorous Soulblaze", + "zlastresort": "Extreme Evoboost", + "zlunala": "Menacing Moonraze Maelstrom", + "zlycanroc": "Splintered Stormshards", + "znaturesmadness": "Guardian of Alola", + "zmarshadow": "Soul-Stealing 7-Star Strike", + "zmew": "Genesis Supernova", + "zmimikyu": "Let's Snuggle Forever", + "zmoongeistbeam": "Menacing Moonraze Maelstrom", + "znecrozma": "Light That Burns the Sky", "znormal": "Breakneck Blitz", "zrock": "Continental Crush", - "zpsychic": "Shattered Psyche", + "zphotongeyser": "Light That Burns the Sky", + "zpikachu": "Catastropika", + "zpikachucap": "10,000,000 Volt Thunderbolt", + "zplayrough": "Let's Snuggle Forever", "zpoison": "Acid Downpour", + "zprimarina": "Oceanic Operetta", + "zpsychic": "Shattered Psyche", + "zraichu": "Stoked Sparksurfer", + "zsnorlax": "Pulverizing Pancake", + "zsolgaleo": "Searing Sunraze Smash", + "zsparklingaria": "Oceanic Operetta", + "zspectralthief": "Soul-Stealing 7-Star Strike", + "zspiritshackle": "Sinister Arrow Raid", + "zsunsteelstrike": "Searing Sunraze Smash", "zsteel": "Corkscrew Crash", + "zstoneedge": "Splintered Stormshards", + "ztapu": "Guardian of Alola", + "zthunderbolt": "10,000,000 Volt Thunderbolt", + "zultranecrozma": "Light That Burns the Sky", + "zvolttackle": "Catastropika", "zwater": "Hydro Vortex", // Japanese names - "birijion": "Virizion", - "terakion": "Terrakion", - "agirudaa": "Accelgor", - "randorosu": "Landorus", - "urugamosu": "Volcarona", - "erufuun": "Whimsicott", + "fushigidane": "Bulbasaur", + "fushigisou": "Ivysaur", + "fushigibana": "Venusaur", + "hitokage": "Charmander", + "rizaado": "Charmeleon", + "rizaadon": "Charizard", + "zenigame": "Squirtle", + "kameeru": "Wartortle", + "kamekkusu": "Blastoise", + "kyatapii": "Caterpie", + "toranseru": "Metapod", + "batafurii": "Butterfree", + "biidoru": "Weedle", + "kokuun": "Kakuna", + "supiaa": "Beedrill", + "poppo": "Pidgey", + "pijon": "Pidgeotto", + "pijotto": "Pidgeot", + "koratta": "Rattata", + "ratta": "Raticate", + "onisuzume": "Spearow", + "onidoriru": "Fearow", + "aabo": "Ekans", + "aabokku": "Arbok", + "pikachuu": "Pikachu", + "raichuu": "Raichu", + "sando": "Sandshrew", + "sandopan": "Sandslash", + "nidoranmesu": "Nidoran-F", + "nidoriina": "Nidorina", + "nidokuin": "Nidoqueen", + "nidoranosu": "Nidoran-M", + "nidoriino": "Nidorino", + "nidokingu": "Nidoking", + "pippi": "Clefairy", + "pikushii": "Clefable", + "rokon": "Vulpix", + "kyuukon": "Ninetales", + "purin": "Jigglypuff", + "pukurin": "Wigglytuff", + "zubatto": "Zubat", + "gorubatto": "Golbat", + "nazonokusa": "Oddish", + "kusaihana": "Gloom", + "rafureshia": "Vileplume", + "parasu": "Paras", + "parasekuto": "Parasect", + "konpan": "Venonat", + "morufuon": "Venomoth", + "deiguda": "Diglett", + "dagutorio": "Dugtrio", + "nyaasu": "Meowth", + "perushian": "Persian", + "kodakku": "Psyduck", + "gorudakku": "Golduck", + "mankii": "Mankey", + "okorizaru": "Primeape", + "gaadei": "Growlithe", + "uindei": "Arcanine", + "nyoromo": "Poliwag", + "nyorozo": "Poliwhirl", + "nyorobon": "Poliwrath", + "keeshy": "Abra", + "yungeraa": "Kadabra", + "fuudein": "Alakazam", + "wanrikii": "Machop", + "goorikii": "Machoke", + "kairikii": "Machamp", + "madatsubomi": "Bellsprout", + "utsudon": "Weepinbell", + "utsubotto": "Victreebel", + "menokurage": "Tentacool", + "dokukurage": "Tentacruel", + "ishitsubute": "Geodude", + "goroon": "Graveler", + "goroonya": "Golem", + "poniita": "Ponyta", + "gyaroppu": "Rapidash", + "yadon": "Slowpoke", + "yadoran": "Slowbro", + "koiru": "Magnemite", + "reakoiru": "Magneton", + "kamonegi": "Farfetch'd", + "doodoo": "Doduo", + "doodorio": "Dodrio", + "pauwau": "Seel", + "jugon": "Dewgong", + "betobetaa": "Grimer", + "betobeton": "Muk", + "sherudaa": "Shellder", + "parushen": "Cloyster", + "goosu": "Gastly", + "goosuto": "Haunter", + "gengaa": "Gengar", + "iwaaku": "Onix", + "suriipu": "Drowzee", + "suriipaa": "Hypno", + "kurabu": "Krabby", + "kinguraa": "Kingler", + "biriridama": "Voltorb", + "marumain": "Electrode", + "tamatama": "Exeggcute", + "nasshii": "Exeggutor", + "karakara": "Cubone", + "garagara": "Marowak", + "sawamuraa": "Hitmonlee", + "ebiwaraa": "Hitmonchan", + "beroringa": "Lickitung", + "dogaasu": "Koffing", + "matadogasu": "Weezing", + "saihoon": "Rhyhorn", + "saidon": "Rhydon", + "rakkii": "Chansey", + "monjara": "Tangela", + "garuura": "Kangaskhan", + "tattsuu": "Horsea", + "shiidora": "Seadra", + "tosakinto": "Goldeen", + "azumaou": "Seaking", + "hitodeman": "Staryu", + "sutaamii": "Starmie", + "bariyaado": "Mr. Mime", + "sutoraiku": "Scyther", + "ruujura": "Jynx", + "erebuu": "Electabuzz", + "buubaa": "Magmar", + "kairosu": "Pinsir", + "kentarosu": "Tauros", + "koikingu": "Magikarp", + "gyaradosu": "Gyarados", + "rapurasu": "Lapras", + "metamon": "Ditto", + "iibui": "Eevee", + "shawaazu": "Vaporeon", + "sandaasu": "Jolteon", + "buusutaa": "Flareon", + "porigon": "Porygon", + "omunaito": "Omanyte", + "omusutaa": "Omastar", + "kabutopusu": "Kabutops", + "putera": "Aerodactyl", + "kabigon": "Snorlax", + "furiizaa": "Articuno", + "sandaa": "Zapdos", + "fuaiyaa": "Moltres", + "miniryuu": "Dratini", + "hakuryuu": "Dragonair", + "kairyuu": "Dragonite", + "myuutsuu": "Mewtwo", + "myuu": "Mew", + "chikoriita": "Chikorita", + "beiriifu": "Bayleef", + "meganiumu": "Meganium", + "hinoarashi": "Cyndaquil", + "magumarashi": "Quilava", + "bakufuun": "Typhlosion", + "waninoko": "Totodile", + "arigeitsu": "Croconaw", + "oodairu": "Feraligatr", + "otachi": "Sentret", + "ootachi": "Furret", + "hoohoo": "Hoothoot", + "yorunozuku": "Noctowl", + "redeiba": "Ledyba", + "redeian": "Ledian", + "itomaru": "Spinarak", + "ariadosu": "Ariados", + "kurobatto": "Crobat", + "chonchii": "Chinchou", + "rantaan": "Lanturn", + "pichuu": "Pichu", + "py": "Cleffa", + "pupurin": "Igglybuff", + "togepii": "Togepi", + "togechikku": "Togetic", + "neitei": "Natu", + "neiteio": "Xatu", + "meriipu": "Mareep", + "mokoko": "Flaaffy", + "denryuu": "Ampharos", + "kireihana": "Bellossom", + "mariru": "Marill", + "mariruri": "Azumarill", + "usokkii": "Sudowoodo", + "nyorotono": "Politoed", + "hanekko": "Hoppip", + "popokko": "Skiploom", + "watakko": "Jumpluff", + "eipamu": "Aipom", + "himanattsu": "Sunkern", + "kimawari": "Sunflora", + "yanyanma": "Yanma", + "upaa": "Wooper", + "nuoo": "Quagsire", + "eefi": "Espeon", + "burakkii": "Umbreon", + "yamikarasu": "Murkrow", + "yadokingu": "Slowking", + "muuma": "Misdreavus", + "annoon": "Unown", + "soonansu": "Wobbuffet", + "kirinriki": "Girafarig", + "kunugidama": "Pineco", + "fuoretosu": "Forretress", + "nokotchi": "Dunsparce", + "guraigaa": "Gligar", + "haganeeru": "Steelix", + "buruu": "Snubbull", + "guranburu": "Granbull", + "hariisen": "Qwilfish", + "hassamu": "Scizor", + "tsubotsubo": "Shuckle", + "herakurosu": "Heracross", + "nyuura": "Sneasel", + "himeguma": "Teddiursa", + "ringuma": "Ursaring", + "magumaggu": "Slugma", + "magukarugo": "Magcargo", + "urimuu": "Swinub", + "inomuu": "Piloswine", + "saniigo": "Corsola", + "teppouo": "Remoraid", + "okutan": "Octillery", + "deribaado": "Delibird", + "mantain": "Mantine", + "eaamudo": "Skarmory", + "derubiru": "Houndour", + "herugaa": "Houndoom", + "kingudora": "Kingdra", + "gomazou": "Phanpy", + "donfuan": "Donphan", + "porigon2": "Porygon2", + "odoshishi": "Stantler", + "dooburu": "Smeargle", + "barukii": "Tyrogue", + "kapoeraa": "Hitmontop", + "muchuuru": "Smoochum", + "erekiddo": "Elekid", + "buby": "Magby", + "mirutanku": "Miltank", + "hapinasu": "Blissey", + "suikun": "Suicune", + "yoogirasu": "Larvitar", + "sanagirasu": "Pupitar", + "bangirasu": "Tyranitar", + "rugia": "Lugia", + "houou": "Ho-Oh", + "sereby": "Celebi", + "kimori": "Treecko", + "juputoru": "Grovyle", + "jukain": "Sceptile", + "achamo": "Torchic", + "wakashamo": "Combusken", + "bashaamo": "Blaziken", + "mizugorou": "Mudkip", + "numakuroo": "Marshtomp", + "raguraaji": "Swampert", + "pochiena": "Poochyena", + "guraena": "Mightyena", + "jiguzaguma": "Zigzagoon", + "massuguma": "Linoone", + "kemusso": "Wurmple", + "karasarisu": "Silcoon", + "agehanto": "Beautifly", + "mayurudo": "Cascoon", + "dokukeiru": "Dustox", + "hasuboo": "Lotad", + "hasuburero": "Lombre", + "runpappa": "Ludicolo", + "taneboo": "Seedot", + "konohana": "Nuzleaf", + "daatengu": "Shiftry", + "subame": "Taillow", + "oosubame": "Swellow", + "kyamome": "Wingull", + "perippaa": "Pelipper", + "rarutosu": "Ralts", + "kiruria": "Kirlia", + "saanaito": "Gardevoir", + "ametama": "Surskit", + "amemoosu": "Masquerain", + "kinokoko": "Shroomish", + "kinogassa": "Breloom", + "namakero": "Slakoth", + "yarukimono": "Vigoroth", + "kekkingu": "Slaking", + "tsuchinin": "Nincada", + "tekkanin": "Ninjask", + "nukenin": "Shedinja", + "gonyonyo": "Whismur", + "dogoomu": "Loudred", + "bakuongu": "Exploud", + "makunoshita": "Makuhita", + "hariteyama": "Hariyama", + "ruriri": "Azurill", + "nozupasu": "Nosepass", + "eneko": "Skitty", + "enekororo": "Delcatty", + "yamirami": "Sableye", + "kuchiito": "Mawile", + "kokodora": "Aron", + "kodora": "Lairon", + "bosugodora": "Aggron", + "asanan": "Meditite", + "chaaremu": "Medicham", + "rakurai": "Electrike", + "raiboruto": "Manectric", + "purasuru": "Plusle", + "mainan": "Minun", + "barubiito": "Volbeat", + "irumiize": "Illumise", + "rozeria": "Roselia", + "gokurin": "Gulpin", + "marunoomu": "Swalot", + "kibania": "Carvanha", + "samehadaa": "Sharpedo", + "hoeruko": "Wailmer", + "hoeruoo": "Wailord", + "donmeru": "Numel", + "bakuuda": "Camerupt", + "kootasu": "Torkoal", + "banebuu": "Spoink", + "buupiggu": "Grumpig", + "patchiiru": "Spinda", + "nakkuraa": "Trapinch", + "biburaaba": "Vibrava", + "furaigon": "Flygon", + "sabonea": "Cacnea", + "nokutasu": "Cacturne", + "chirutto": "Swablu", + "chirutarisu": "Altaria", + "zanguusu": "Zangoose", + "habuneeku": "Seviper", + "runatoon": "Lunatone", + "sorurokku": "Solrock", + "dojotchi": "Barboach", + "namazun": "Whiscash", + "heigani": "Corphish", + "shizarigaa": "Crawdaunt", + "yajiron": "Baltoy", + "nendooru": "Claydol", + "ririira": "Lileep", + "yureidoru": "Cradily", + "anopusu": "Anorith", + "aamarudo": "Armaldo", + "hinbasu": "Feebas", + "mirokarosu": "Milotic", + "powarun": "Castform", + "kakureon": "Kecleon", + "kagebouzu": "Shuppet", + "jupetta": "Banette", + "yomawaru": "Duskull", + "samayooru": "Dusclops", + "toropiusu": "Tropius", + "chiriin": "Chimecho", + "abusoru": "Absol", + "soonano": "Wynaut", + "yukiwarashi": "Snorunt", + "onigoori": "Glalie", + "tamazarashi": "Spheal", + "todoguraa": "Sealeo", + "todozeruga": "Walrein", + "paaruru": "Clamperl", + "hanteeru": "Huntail", + "sakurabisu": "Gorebyss", + "jiiransu": "Relicanth", + "rabukasu": "Luvdisc", + "tatsubei": "Bagon", + "komoruu": "Shelgon", + "boomanda": "Salamence", + "danbaru": "Beldum", + "metangu": "Metang", + "metagurosu": "Metagross", + "rejirokku": "Regirock", + "rejiaisu": "Regice", + "rejisuchiru": "Registeel", + "rateiasu": "Latias", + "rateiosu": "Latios", + "kaiooga": "Kyogre", + "guraadon": "Groudon", + "rekkuuza": "Rayquaza", + "jiraachi": "Jirachi", + "deokishisu": "Deoxys", + "naetoru": "Turtwig", + "hayashigame": "Grotle", + "dodaitosu": "Torterra", + "hikozaru": "Chimchar", + "moukazaru": "Monferno", + "goukazaru": "Infernape", + "potchama": "Piplup", + "pottaishi": "Prinplup", + "enperuto": "Empoleon", + "mukkuru": "Starly", + "mukubaado": "Staravia", + "mukuhooku": "Staraptor", + "bippa": "Bidoof", + "biidaru": "Bibarel", + "korobooshi": "Kricketot", + "korotokku": "Kricketune", + "korinku": "Shinx", + "rukushio": "Luxio", + "rentoraa": "Luxray", + "subomii": "Budew", + "rozureido": "Roserade", + "zugaidosu": "Cranidos", + "ramuparudo": "Rampardos", + "tatetopusu": "Shieldon", + "toridepusu": "Bastiodon", + "minomutchi": "Burmy", + "minomadamu": "Wormadam", + "gaameiru": "Mothim", + "mitsuhanii": "Combee", + "biikuin": "Vespiquen", + "buizeru": "Buizel", + "furoozeru": "Floatzel", + "cherinbo": "Cherubi", + "cherimu": "Cherrim", + "karanakushi": "Shellos", + "toritodon": "Gastrodon", + "eteboosu": "Ambipom", + "fuwante": "Drifloon", + "fuwaraido": "Drifblim", + "mimiroru": "Buneary", + "mimiroppu": "Lopunny", + "muumaaji": "Mismagius", + "donkarasu": "Honchkrow", + "nyarumaa": "Glameow", + "bunyatto": "Purugly", + "riishan": "Chingling", + "sukanpuu": "Stunky", + "sukatanku": "Skuntank", + "doomiraa": "Bronzor", + "dootakun": "Bronzong", + "usohachi": "Bonsly", + "manene": "Mime Jr.", + "pinpuku": "Happiny", + "perappu": "Chatot", + "mikaruge": "Spiritomb", + "fukamaru": "Gible", + "gabaito": "Gabite", + "gaburiasu": "Garchomp", + "gonbe": "Munchlax", + "rioru": "Riolu", + "rukario": "Lucario", + "hipopotasu": "Hippopotas", + "kabarudon": "Hippowdon", + "sukorupi": "Skorupi", + "dorapion": "Drapion", + "guregguru": "Croagunk", + "dokuroggu": "Toxicroak", + "masukippa": "Carnivine", + "keikouo": "Finneon", + "neoranto": "Lumineon", + "tamanta": "Mantyke", + "yukikaburi": "Snover", + "yukinooo": "Abomasnow", + "manyuura": "Weavile", + "jibakoiru": "Magnezone", + "beroberuto": "Lickilicky", + "dosaidon": "Rhyperior", + "mojanbo": "Tangrowth", + "erekiburu": "Electivire", + "buubaan": "Magmortar", + "togekissu": "Togekiss", + "megayanma": "Yanmega", + "riifia": "Leafeon", + "gureishia": "Glaceon", + "guraion": "Gliscor", + "manmuu": "Mamoswine", + "porigonz": "Porygon-Z", + "erureido": "Gallade", + "dainoozu": "Probopass", + "yonowaaru": "Dusknoir", + "yukimenoko": "Froslass", + "rotomu": "Rotom", + "yukushii": "Uxie", + "emuritto": "Mesprit", + "agunomu": "Azelf", + "deiaruga": "Dialga", + "parukia": "Palkia", + "hiidoran": "Heatran", + "rejigigasu": "Regigigas", + "girateina": "Giratina", + "kureseria": "Cresselia", + "fione": "Phione", + "manafi": "Manaphy", + "daakurai": "Darkrai", + "sheimi": "Shaymin", + "aruseusu": "Arceus", + "bikuteini": "Victini", + "tsutaaja": "Snivy", + "janobii": "Servine", + "jarooda": "Serperior", + "pokabu": "Tepig", + "chaobuu": "Pignite", + "enbuoo": "Emboar", + "mijumaru": "Oshawott", + "futachimaru": "Dewott", + "daikenki": "Samurott", + "minezumi": "Patrat", + "miruhoggu": "Watchog", + "yooterii": "Lillipup", + "haaderia": "Herdier", + "muurando": "Stoutland", + "choroneko": "Purrloin", + "reparudasu": "Liepard", + "yanappu": "Pansage", + "yanakkii": "Simisage", + "baoppu": "Pansear", + "baokkii": "Simisear", + "hiyappu": "Panpour", + "hiyakkii": "Simipour", + "mushaana": "Musharna", + "mamepato": "Pidove", + "hatooboo": "Tranquill", + "kenhorou": "Unfezant", + "shimama": "Blitzle", + "zeburaika": "Zebstrika", + "dangoro": "Roggenrola", + "gantoru": "Boldore", + "gigaiasu": "Gigalith", + "koromori": "Woobat", + "kokoromori": "Swoobat", + "moguryuu": "Drilbur", "doryuuzu": "Excadrill", + "tabunne": "Audino", + "dokkoraa": "Timburr", + "dotekkotsu": "Gurdurr", + "roobushin": "Conkeldurr", + "otamaro": "Tympole", + "gamagaru": "Palpitoad", + "gamageroge": "Seismitoad", + "nageki": "Throh", + "dageki": "Sawk", + "kurumiru": "Sewaddle", + "kurumayu": "Swadloon", + "hahakomori": "Leavanny", + "fushide": "Venipede", + "hoiiga": "Whirlipede", + "pendoraa": "Scolipede", + "monmen": "Cottonee", + "erufuun": "Whimsicott", + "churine": "Petilil", + "doredeia": "Lilligant", + "basurao": "Basculin", + "meguroko": "Sandile", + "warubiru": "Krokorok", + "warubiaru": "Krookodile", + "darumakka": "Darumaka", + "hihidaruma": "Darmanitan", + "marakatchi": "Maractus", + "ishizumai": "Dwebble", + "iwaparesu": "Crustle", + "zuruggu": "Scraggy", + "zuruzukin": "Scrafty", + "shinboraa": "Sigilyph", + "desumasu": "Yamask", + "desukaan": "Cofagrigus", + "purotooga": "Tirtouga", + "abagoora": "Carracosta", + "aaken": "Archen", + "aakeosu": "Archeops", + "yabukuron": "Trubbish", + "dasutodasu": "Garbodor", + "zoroa": "Zorua", + "zoroaaku": "Zoroark", + "chiraamy": "Minccino", + "chirachiino": "Cinccino", + "gochimu": "Gothita", + "gochimiru": "Gothorita", + "gochiruzeru": "Gothitelle", + "yuniran": "Solosis", + "daburan": "Duosion", + "rankurusu": "Reuniclus", + "koaruhii": "Ducklett", + "suwanna": "Swanna", + "baniputchi": "Vanillite", + "baniritchi": "Vanillish", + "baibanira": "Vanilluxe", + "shikijika": "Deerling", + "mebukijika": "Sawsbuck", + "emonga": "Emolga", + "kaburumo": "Karrablast", + "shubarugo": "Escavalier", + "tamagetake": "Foongus", + "morobareru": "Amoonguss", + "pururiru": "Frillish", "burungeru": "Jellicent", + "mamanbou": "Alomomola", + "bachuru": "Joltik", + "denchura": "Galvantula", + "tesshiido": "Ferroseed", "nattorei": "Ferrothorn", + "giaru": "Klink", + "gigiaru": "Klang", + "gigigiaru": "Klinklang", + "shibishirasu": "Tynamo", + "shibibiiru": "Eelektrik", + "shibirudon": "Eelektross", + "riguree": "Elgyem", + "oobemu": "Beheeyem", + "hitomoshi": "Litwick", + "ranpuraa": "Lampent", "shandera": "Chandelure", - "roobushin": "Conkeldurr", + "kibago": "Axew", + "onondo": "Fraxure", "ononokusu": "Haxorus", - "sazandora": "Hydreigon", - "chirachiino": "Cinccino", - "kyuremu": "Kyurem", - "jarooda": "Serperior", - "zoroaaku": "Zoroark", - "shinboraa": "Sigilyph", + "kumashun": "Cubchoo", + "tsunbeaa": "Beartic", + "furiijio": "Cryogonal", + "chobomaki": "Shelmet", + "agirudaa": "Accelgor", + "maggyo": "Stunfisk", + "kojofuu": "Mienfoo", + "kojondo": "Mienshao", + "kurimugan": "Druddigon", + "gobitto": "Golett", + "goruugu": "Golurk", + "komatana": "Pawniard", + "kirikizan": "Bisharp", + "baffuron": "Bouffalant", + "washibon": "Rufflet", + "uooguru": "Braviary", + "baruchai": "Vullaby", "barujiina": "Mandibuzz", - "rankurusu": "Reuniclus", + "kuitaran": "Heatmor", + "aianto": "Durant", + "monozu": "Deino", + "jiheddo": "Zweilous", + "sazandora": "Hydreigon", + "meraruba": "Larvesta", + "urugamosu": "Volcarona", + "kobaruon": "Cobalion", + "terakion": "Terrakion", + "birijion": "Virizion", + "torunerosu": "Tornadus", "borutorosu": "Thundurus", - // there's no need to type out the other Japanese names - // I'll autogenerate them at some point + "reshiramu": "Reshiram", + "zekuromu": "Zekrom", + "randorosu": "Landorus", + "kyuremu": "Kyurem", + "kerudeio": "Keldeo", + "meroetta": "Meloetta", + "genosekuto": "Genesect", + "harimaron": "Chespin", + "hariboogu": "Quilladin", + "burigaron": "Chesnaught", + "fuokko": "Fennekin", + "teerunaa": "Braixen", + "mafuokushii": "Delphox", + "keromatsu": "Froakie", + "gekogashira": "Frogadier", + "gekkouga": "Greninja", + "horubii": "Bunnelby", + "horuudo": "Diggersby", + "yayakoma": "Fletchling", + "hinoyakoma": "Fletchinder", + "fuaiaroo": "Talonflame", + "kofukimushi": "Scatterbug", + "kofuurai": "Spewpa", + "bibiyon": "Vivillon", + "shishiko": "Litleo", + "kaenjishi": "Pyroar", + "furabebe": "Flabébé", + "furaette": "Floette", + "furaajesu": "Florges", + "meeekuru": "Skiddo", + "googooto": "Gogoat", + "yanchamu": "Pancham", + "goronda": "Pangoro", + "torimian": "Furfrou", + "nyasupaa": "Espurr", + "nyaonikusu": "Meowstic", + "hitotsuki": "Honedge", + "nidangiru": "Doublade", + "girugarudo": "Aegislash", + "shushupu": "Spritzee", + "furefuwan": "Aromatisse", + "peroppafu": "Swirlix", + "peroriimu": "Slurpuff", + "maaiika": "Inkay", + "karamanero": "Malamar", + "kametete": "Binacle", + "gamenodesu": "Barbaracle", + "kuzumoo": "Skrelp", + "doramidoro": "Dragalge", + "udeppou": "Clauncher", + "burosutaa": "Clawitzer", + "erikiteru": "Helioptile", + "erezaado": "Heliolisk", + "chigorasu": "Tyrunt", + "gachigorasu": "Tyrantrum", + "amarusu": "Amaura", + "amaruruga": "Aurorus", + "ninfia": "Sylveon", + "ruchaburu": "Hawlucha", + "mereshii": "Carbink", + "numera": "Goomy", + "numeiru": "Sliggoo", + "numerugon": "Goodra", + "kureffi": "Klefki", + "bokuree": "Phantump", + "oorotto": "Trevenant", + "baketcha": "Pumpkaboo", + "panpujin": "Gourgeist", + "kachikooru": "Bergmite", + "kurebeesu": "Avalugg", + "onbatto": "Noibat", + "onbaan": "Noivern", + "zeruneasu": "Xerneas", + "iberutaru": "Yveltal", + "jigarude": "Zygarde", + "deianshii": "Diancie", + "fuupa": "Hoopa", + "borukenion": "Volcanion", + "mokuroo": "Rowlet", + "fukusuroo": "Dartrix", + "junaipaa": "Decidueye", + "nyabii": "Litten", + "nyahiito": "Torracat", + "gaogaen": "Incineroar", + "ashimari": "Popplio", + "oshamari": "Brionne", + "ashireenu": "Primarina", + "tsutsukera": "Pikipek", + "kerarappa": "Trumbeak", + "dodekabashi": "Toucannon", + "yanguusu": "Yungoos", + "dekaguusu": "Gumshoos", + "agojimushi": "Grubbin", + "denjimushi": "Charjabug", + "kuwaganon": "Vikavolt", + "makenkani": "Crabrawler", + "kekenkani": "Crabominable", + "odoridori": "Oricorio", + "aburii": "Cutiefly", + "aburibon": "Ribombee", + "iwanko": "Rockruff", + "rugarugan": "Lycanroc", + "yowashi": "Wishiwashi", + "hidoide": "Mareanie", + "dohidoide": "Toxapex", + "dorobanko": "Mudbray", + "banbadoro": "Mudsdale", + "shizukumo": "Dewpider", + "onishizukumo": "Araquanid", + "karikiri": "Fomantis", + "rarantesu": "Lurantis", + "nemashu": "Morelull", + "masheedo": "Shiinotic", + "yatoumori": "Salandit", + "ennyuuto": "Salazzle", + "nuikoguma": "Stufful", + "kiteruguma": "Bewear", + "amakaji": "Bounsweet", + "amamaiko": "Steenee", + "amaajo": "Tsareena", + "kyuwawaa": "Comfey", + "yareyuutan": "Oranguru", + "nagetsukesaru": "Passimian", + "kosokumushi": "Wimpod", + "gusokumusha": "Golisopod", + "sunabaa": "Sandygast", + "shirodesuna": "Palossand", + "namakobushi": "Pyukumuku", + "taipunuru": "Type: Null", + "shiruvuadei": "Silvally", + "meteno": "Minior", + "nekkoara": "Komala", + "bakugamesu": "Turtonator", + "mimikkyu": "Mimikyu", + "hagigishiri": "Bruxish", + "jijiiron": "Drampa", + "dadarin": "Dhelmise", + "jarako": "Jangmo-o", + "jarango": "Hakamo-o", + "jararanga": "Kommo-o", + "kapukokeko": "Tapu Koko", + "kaputetefu": "Tapu Lele", + "kapubururu": "Tapu Bulu", + "kapurehire": "Tapu Fini", + "kosumoggu": "Cosmog", + "kosumoumu": "Cosmoem", + "sorugareo": "Solgaleo", + "runaaara": "Lunala", + "utsuroido": "Nihilego", + "masshibuun": "Buzzwole", + "fierooche": "Pheromosa", + "denjumoku": "Xurkitree", + "tekkaguya": "Celesteela", + "kamitsurugi": "Kartana", + "akujikingu": "Guzzlord", + "nekurozuma": "Necrozma", + "magiana": "Magearna", + "maashadoo": "Marshadow", + "bebenomu": "Poipole", + "aagoyon": "Naganadel", + "tsundetsunde": "Stakataka", + "zugadoon": "Blacephalon", + "merutan": "Meltan", + "merumetaru": "Melmetal", }; + +exports.BattleAliases = BattleAliases; diff --git a/data/bss-factory-sets.json b/data/bss-factory-sets.json index 82a01e9af15d4..2c5e194e0f5c3 100644 --- a/data/bss-factory-sets.json +++ b/data/bss-factory-sets.json @@ -1 +1,3608 @@ -{"BSS":{"aegislash":{"flags":{},"sets":[{"species":"Aegislash","gender":"","item":"Weakness Policy","ability":"Stance Change","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["King's Shield"],["Shadow Ball"],["Flash Cannon","Sacred Sword"],["Shadow Sneak"]],"ivs":{"spe":0}},{"species":"Aegislash","gender":"","item":"Ghostium Z","ability":"Stance Change","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["King's Shield"],["Shadow Ball"],["Flash Cannon","Sacred Sword"],["Shadow Sneak"]],"ivs":{"spe":0}},{"species":"Aegislash","gender":"","item":"Life Orb","ability":"Stance Change","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance","King's Shield"],["Shadow Claw"],["Sacred Sword","Iron Head"],["Shadow Sneak"]]},{"species":"Aegislash","gender":"","item":"Ghostium Z","ability":"Stance Change","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Brave","moves":[["Swords Dance","King's Shield"],["Shadow Claw"],["Sacred Sword"],["Shadow Sneak"]]},{"species":"Aegislash","gender":"","item":"Focus Sash","ability":"Stance Change","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Shadow Ball"],["Flash Cannon"],["Hidden Power Ice","Head Smash"],["Shadow Sneak"]]},{"species":"Aegislash","gender":"","item":"Leftovers","ability":"Stance Change","evs":{"hp":220,"atk":0,"def":0,"spa":196,"spd":0,"spe":92},"nature":"Modest","moves":[["King's Shield","Hidden Power Ice","Hidden Power Fire"],["Toxic"],["Substitute"],["Shadow Ball"]],"ivs":{"atk":0}}]},"alakazam":{"flags":{"megaOnly":1},"sets":[{"species":"Alakazam","gender":"","item":"Alakazite","ability":"Magic Guard","evs":{"hp":244,"atk":0,"def":0,"spa":12,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic"],["Substitute"],["Protect"],["Disable"]],"ivs":{"atk":0}},{"species":"Alakazam","gender":"","item":"Alakazite","ability":"Magic Guard","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic","Psyshock"],["Focus Blast"],["Shadow Ball"],["Hidden Power Ice"]],"ivs":{"atk":0}}]},"amoonguss":{"flags":{},"sets":[{"species":"Amoonguss","gender":"","item":"Black Sludge","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Spore"],["Giga Drain"],["Sludge Bomb","Foul Play","Clear Smog"],["Synthesis","Hidden Power Fire"]],"ivs":{"atk":0}},{"species":"Amoonguss","gender":"","item":"Rocky Helmet","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Spore"],["Giga Drain"],["Sludge Bomb","Foul Play","Clear Smog"],["Synthesis","Hidden Power Fire"]],"ivs":{"atk":0}}]},"araquanid":{"flags":"","sets":[{"species":"Araquanid","gender":"","item":"Waterium Z","ability":"Water Bubble","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Liquidation"],["Leech Life","Lunge"],["Mirror Coat"],["Poison Jab","Toxic"]]},{"species":"Araquanid","gender":"","item":"Assault Vest","ability":"Water Bubble","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Liquidation"],["Leech Life","Lunge"],["Mirror Coat"],["Poison Jab"]]},{"species":"Araquanid","gender":"","item":"Choice Band","ability":"Water Bubble","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Liquidation"],["Leech Life","Lunge"],["Crunch","Sleep Talk"],["Poison Jab"]]},{"species":"Araquanid","gender":"","item":"Choice Specs","ability":"Water Bubble","evs":{"hp":252,"atk":0,"def":4,"spa":252,"spd":0,"spe":0},"nature":"Modest","moves":[["Surf","Scald"],["Ice Beam"],["Hidden Power Fire"],["Toxic","Sleep Talk"]],"ivs":{"atk":0}}]},"arcanine":{"flags":{},"sets":[{"species":"Arcanine","gender":"","item":"Firium Z","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Flare Blitz"],["Extreme Speed"],["Close Combat","Bulldoze"],["Wild Charge","Flame Charge","Will-O-Wisp"]]},{"species":"Arcanine","gender":"","item":"Rocky Helmet","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Will-O-Wisp"],["Morning Sun"],["Flamethrower","Burn Up"],["Snarl"]],"ivs":{"atk":0}}]},"azumarill":{"flags":{},"sets":[{"species":"Azumarill","gender":"","item":"Sitrus Berry","ability":"Huge Power","evs":{"hp":228,"atk":252,"def":12,"spa":0,"spd":12,"spe":4},"nature":"Adamant","moves":[["Belly Drum"],["Aqua Jet"],["Play Rough"],["Waterfall","Superpower","Knock Off"]]},{"species":"Azumarill","gender":"","item":"Normalium Z","ability":"Huge Power","evs":{"hp":228,"atk":252,"def":12,"spa":0,"spd":12,"spe":4},"nature":"Adamant","moves":[["Belly Drum"],["Aqua Jet"],["Play Rough"],["Waterfall","Superpower","Knock Off"]]},{"species":"Azumarill","gender":"","item":"Choice Band","ability":"Huge Power","evs":{"hp":228,"atk":252,"def":12,"spa":0,"spd":12,"spe":4},"nature":"Adamant","moves":[["Aqua Jet"],["Play Rough"],["Waterfall"],["Superpower","Knock Off"]]},{"species":"Azumarill","gender":"","item":"Assault Vest","ability":"Huge Power","evs":{"hp":124,"atk":252,"def":12,"spa":0,"spd":28,"spe":92},"nature":"Adamant","moves":[["Aqua Jet"],["Play Rough"],["Waterfall"],["Superpower","Knock Off"]]}]},"beedrill":{"flags":{"megaOnly":1},"sets":[{"species":"Beedrill","gender":"","item":"Beedrillite","ability":"Swarm","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Poison Jab"],["Drill Run"],["Knock Off","Swords Dance","Fell Stinger"]]}]},"pidgeot":{"flags":{"megaOnly":1},"sets":[{"species":"Pidgeot","gender":"","item":"Pidgeotite","ability":"Big Pecks","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hurricane"],["Heat Wave"],["Hidden Power Ground","Hidden Power Ice"],["U-turn","Roost","Substitute","Hyper Beam","Uproar"]]}]},"blastoise":{"flags":{"megaOnly":1},"sets":[{"species":"Blastoise","gender":"","item":"Blastoisinite","ability":"Torrent","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Water Pulse","Hydro Pump","Scald"],["Ice Beam"],["Dark Pulse","Aqua Jet","Mirror Coat"],["Aura Sphere"]],"ivs":{"atk":0}}]},"blaziken":{"flags":{"megaOnly":1},"sets":[{"species":"Blaziken","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Protect"],["High Jump Kick"],["Flare Blitz"],["Swords Dance","Stone Edge","Thunder Punch"]]},{"species":"Blaziken","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":52,"def":0,"spa":244,"spd":0,"spe":212},"nature":"Naive","moves":[["Protect"],["Overheat"],["Superpower","High Jump Kick"],["Hidden Power Ice"]]},{"species":"Blaziken","gender":"","item":"Grassium Z","ability":"Speed Boost","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Protect"],["Solar Beam"],["Hidden Power Ice","Focus Blast"],["Flamethrower","Fire Blast","Overheat"]],"ivs":{"atk":0}},{"species":"Blaziken","gender":"","item":"Weakness Policy","ability":"Speed Boost","evs":{"hp":252,"atk":0,"def":164,"spa":0,"spd":0,"spe":92},"nature":"Impish","moves":[["Substitute"],["Bulk Up"],["Baton Pass"],["High Jump Kick"]]},{"species":"Blaziken","gender":"","item":"Firium Z","ability":"Speed Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Protect"],["High Jump Kick"],["Flare Blitz"],["Baton Pass","Stone Edge","Thunder Punch","Will-O-Wisp"]]},{"species":"Blaziken","gender":"","item":"Blazikenite","ability":"Speed Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Flare Blitz"],["High Jump Kick"],["Stone Edge","Swords Dance"],["Protect"]]}]},"blissey":{"flags":{},"sets":[{"species":"Blissey","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":252,"spa":4,"spd":252,"spe":0},"nature":"Bold","moves":[["Toxic"],["Soft-Boiled"],["Seismic Toss","Flamethrower"],["Stealth Rock","Shadow Ball","Ice Beam"]],"ivs":{"atk":0}},{"species":"Blissey","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":252,"spa":252,"spd":0,"spe":4},"nature":"Bold","moves":[["Charge Beam","Minimize"],["Flamethrower","Ice Beam"],["Soft-Boiled"],["Substitute","Toxic"]],"ivs":{"atk":0}},{"species":"Blissey","gender":"","item":"Rocky Helmet","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":252,"spa":4,"spd":252,"spe":0},"nature":"Bold","moves":[["Toxic"],["Soft-Boiled"],["Seismic Toss","Flamethrower"],["Stealth Rock","Shadow Ball","Ice Beam"]],"ivs":{"atk":0}}]},"breloom":{"flags":{},"sets":[{"species":"Breloom","gender":"","item":"Focus Sash","ability":"Technician","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Spore"],["Mach Punch"],["Bullet Seed"],["Rock Tomb","Swords Dance"]]},{"species":"Breloom","gender":"","item":"Life Orb","ability":"Technician","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Spore"],["Mach Punch"],["Bullet Seed"],["Rock Tomb"]]},{"species":"Breloom","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spore"],["Substitute"],["Focus Punch"],["Rock Tomb"]]},{"species":"Breloom","gender":"","item":"Choice Scarf","ability":"Technician","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Superpower"],["Bullet Seed"],["Rock Tomb"],["Mach Punch"]]}]},"bronzong":{"flags":{},"sets":[{"species":"Bronzong","gender":"","item":"Occa Berry","ability":"Levitate","evs":{"hp":252,"atk":20,"def":4,"spa":4,"spd":228,"spe":0},"nature":"Sassy","moves":[["Trick Room"],["Stealth Rock","Hidden Power Ice"],["Gyro Ball"],["Explosion"]],"ivs":{"spe":0}},{"species":"Bronzong","gender":"","item":"Rocky Helmet","ability":"Levitate","evs":{"hp":252,"atk":20,"def":228,"spa":4,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Trick Room"],["Stealth Rock","Hidden Power Ice"],["Gyro Ball"],["Explosion"]],"ivs":{"spe":0}},{"species":"Bronzong","gender":"","item":"Psychium Z","ability":"Levitate","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["Hypnosis"],["Trick Room"],["Dream Eater"],["Gyro Ball","Hidden Power Ice"]],"ivs":{"spe":0}}]},"buzzwole":{"flags":{},"sets":[{"species":"Buzzwole","gender":"","item":"Rocky Helmet","ability":"Beast Boost","evs":{"hp":252,"atk":4,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Leech Life","Lunge"],["Roost"],["Earthquake","Toxic"],["Ice Punch"]]},{"species":"Buzzwole","gender":"","item":"Assault Vest","ability":"Beast Boost","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Leech Life","Lunge"],["Superpower","Hammer Arm"],["Earthquake","Thunder Punch"],["Ice Punch"]]},{"species":"Buzzwole","gender":"","item":"Fightinium Z","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Leech Life"],["Superpower"],["Earthquake","Thunder Punch"],["Ice Punch"]]},{"species":"Buzzwole","gender":"","item":"Choice Scarf","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Leech Life"],["Superpower"],["Earthquake","Thunder Punch"],["Ice Punch"]]}]},"celesteela":{"flags":{},"sets":[{"species":"Celesteela","gender":"","item":"Rocky Helmet","ability":"Beast Boost","evs":{"hp":244,"atk":4,"def":252,"spa":4,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Heavy Slam"],["Leech Seed"],["Flamethrower"],["Protect"]]},{"species":"Celesteela","gender":"","item":"Leftovers","ability":"Beast Boost","evs":{"hp":244,"atk":4,"def":4,"spa":4,"spd":252,"spe":0},"nature":"Sassy","moves":[["Heavy Slam"],["Leech Seed"],["Flamethrower"],["Protect"]]},{"species":"Celesteela","gender":"","item":"Leftovers","ability":"Beast Boost","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Heavy Slam"],["Leech Seed"],["Flame Charge","Substitute"],["Protect"]]},{"species":"Celesteela","gender":"","item":"","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Autotomize"],["Acrobatics"],["Heavy Slam"],["Earthquake"]]},{"species":"Celesteela","gender":"","item":"Assault Vest","ability":"Beast Boost","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Flash Cannon"],["Flamethrower"],["Hidden Power Ice"],["Air Slash"]],"ivs":{"atk":0}},{"species":"Celesteela","gender":"","item":"Assault Vest","ability":"Beast Boost","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Adamant","moves":[["Heavy Slam"],["Earthquake"],["Rock Slide"],["Flame Charge"]]},{"species":"Celesteela","gender":"","item":"Choice Band","ability":"Beast Boost","evs":{"hp":244,"atk":252,"def":4,"spa":0,"spd":4,"spe":4},"nature":"Adamant","moves":[["Heavy Slam"],["Explosion"],["Stone Edge"],["Earthquake"]]},{"species":"Celesteela","gender":"","item":"Flyinium Z","ability":"Beast Boost","evs":{"hp":244,"atk":244,"def":4,"spa":0,"spd":4,"spe":12},"nature":"Adamant","moves":[["Fly"],["Heavy Slam"],["Earthquake"],["Explosion"]]}]},"chandelure":{"flags":{},"sets":[{"species":"Chandelure","gender":"","item":"Focus Sash","ability":"Flash Fire","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Trick Room"],["Shadow Ball"],["Fire Blast","Overheat"],["Memento"]],"ivs":{"atk":0}},{"species":"Chandelure","gender":"","item":"Choice Scarf","ability":"Infiltrator","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Fire Blast","Overheat"],["Hidden Power Ice"],["Energy Ball","Memento"]],"ivs":{"atk":0}},{"species":"Chandelure","gender":"","item":"Focus Sash","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Fire Blast"],["Shadow Ball"],["Energy Ball"],["Hidden Power Ice"]],"ivs":{"atk":0}}]},"chansey":{"flags":{},"sets":[{"species":"Chansey","gender":"F","item":"Eviolite","ability":"Natural Cure","evs":{"hp":44,"atk":0,"def":252,"spa":0,"spd":212,"spe":0},"nature":"Bold","moves":[["Seismic Toss"],["Toxic"],["Soft-Boiled"],["Stealth Rock","Thunder Wave","Minimize"]],"ivs":{"atk":0}}]},"charizard":{"flags":{"megaOnly":1},"sets":[{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Flare Blitz"],["Outrage","Dragon Claw"],["Earthquake","Roost"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Flame Charge"],["Outrage","Dragon Claw"],["Flare Blitz"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":204,"atk":0,"def":164,"spa":0,"spd":0,"spe":140},"nature":"Jolly","moves":[["Will-O-Wisp"],["Roost"],["Flame Charge"],["Dragon Claw"]]},{"species":"Charizard","gender":"","item":"Charizardite Y","ability":"Blaze","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast","Overheat","Flamethrower"],["Solar Beam"],["Hidden Power Ice","Focus Blast"],["Flame Charge"]],"ivs":{"atk":0}},{"species":"Charizard","gender":"","item":"Charizardite Y","ability":"Blaze","evs":{"hp":252,"atk":0,"def":116,"spa":100,"spd":4,"spe":36},"nature":"Modest","moves":[["Flamethrower"],["Overheat"],["Hidden Power Ice"],["Solar Beam"]],"ivs":{"atk":0}}]},"clefable":{"flags":{},"sets":[{"species":"Clefable","gender":"","item":"Kee Berry","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Minimize"],["Moonblast","Stored Power"],["Moonlight"]],"ivs":{"atk":0}},{"species":"Clefable","gender":"","item":"Rocky Helmet","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Thunder Wave"],["Moonblast"],["Moonlight"]],"ivs":{"atk":0}}]},"cloyster":{"flags":{},"sets":[{"species":"Cloyster","gender":"","item":"Focus Sash","ability":"Skill Link","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Icicle Spear"],["Rock Blast"],["Ice Shard"]]},{"species":"Cloyster","gender":"","item":"King's Rock","ability":"Skill Link","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Icicle Spear"],["Rock Blast"],["Ice Shard"]]},{"species":"Cloyster","gender":"","item":"Waterium Z","ability":"Skill Link","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Icicle Spear"],["Rock Blast"],["Razor Shell"]]}]},"conkeldurr":{"flags":{},"sets":[{"species":"Conkeldurr","gender":"","item":"Assault Vest","ability":"Iron Fist","evs":{"hp":156,"atk":252,"def":0,"spa":0,"spd":100,"spe":0},"nature":"Adamant","moves":[["Drain Punch"],["Mach Punch"],["Ice Punch"],["Thunder Punch","Poison Jab","Knock Off"]],"ivs":{"spe":15}},{"species":"Conkeldurr","gender":"","item":"Assault Vest","ability":"Guts","evs":{"hp":156,"atk":252,"def":0,"spa":0,"spd":100,"spe":0},"nature":"Adamant","moves":[["Mach Punch"],["Drain Punch"],["Knock Off"],["Ice Punch","Poison Jab"]],"ivs":{"spe":15}},{"species":"Conkeldurr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":84,"atk":252,"def":0,"spa":0,"spd":172,"spe":0},"nature":"Adamant","moves":[["Drain Punch"],["Mach Punch"],["Ice Punch"],["Thunder Punch","Knock Off","Poison Jab"]],"ivs":{"spe":15}}]},"cresselia":{"flags":{},"sets":[{"species":"Cresselia","gender":"","item":"Rocky Helmet","ability":"Levitate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Moonlight"],["Ice Beam"],["Toxic","Thunder Wave"],["Psychic"]],"ivs":{"atk":0}},{"species":"Cresselia","gender":"","item":"Mago Berry","ability":"Levitate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Moonlight"],["Ice Beam","Psychic"],["Lunar Dance"],["Trick Room"]],"ivs":{"atk":0}},{"species":"Cresselia","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Moonlight"],["Psychic","Psyshock"],["Calm Mind"],["Moonblast","Ice Beam","Substitute"]],"ivs":{"atk":0}},{"species":"Cresselia","gender":"","item":"Flame Orb","ability":"Levitate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Psycho Shift"],["Toxic"],["Moonlight"],["Psychic","Ice Beam","Moonblast"]],"ivs":{"atk":0}}]},"ditto":{"flags":{},"sets":[{"species":"Ditto","gender":"","item":"Focus Sash","ability":"Imposter","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Transform"]],"ivs":{"spe":0}},{"species":"Ditto","gender":"","item":"Choice Scarf","ability":"Imposter","evs":{"hp":252,"atk":4,"def":4,"spa":0,"spd":248,"spe":0},"nature":"Sassy","moves":[["Transform"]],"ivs":{"def":30,"spd":30,"spe":0}},{"species":"Ditto","gender":"","item":"Choice Scarf","ability":"Imposter","evs":{"hp":252,"atk":4,"def":4,"spa":0,"spd":248,"spe":0},"nature":"Sassy","moves":[["Transform"]],"ivs":{"spa":0,"spd":30,"spe":1}}]},"dragonite":{"flags":{},"sets":[{"species":"Dragonite","gender":"","item":"Choice Band","ability":"Multiscale","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Outrage"],["Earthquake"],["Extreme Speed"],["Fire Punch","Thunder Punch"]]},{"species":"Dragonite","gender":"","item":"Lum Berry","ability":"Multiscale","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Outrage"],["Earthquake","Fire Punch"],["Extreme Speed"]]},{"species":"Dragonite","gender":"","item":"Flyinium Z","ability":"Multiscale","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Fly"],["Earthquake","Extreme Speed"]]},{"species":"Dragonite","gender":"","item":"Dragonium Z","ability":"Multiscale","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Extreme Speed"],["Earthquake","Fire Punch"]]}]},"eevee":{"flags":{},"sets":[{"species":"Eevee","gender":"","item":"Eevium Z","ability":"Anticipation","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Last Resort"],["Baton Pass"],["Substitute"],["Stored Power"]]}]},"entei":{"flags":{},"sets":[{"species":"Entei","gender":"","item":"Assault Vest","ability":"Pressure","evs":{"hp":132,"atk":252,"def":52,"spa":0,"spd":52,"spe":20},"nature":"Adamant","moves":[["Sacred Fire"],["Stone Edge"],["Bulldoze"],["Flame Charge"]]},{"species":"Entei","gender":"","item":"Choice Band","ability":"Pressure","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Sacred Fire"],["Stone Edge"],["Bulldoze"],["Iron Head"]]},{"species":"Entei","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":20,"atk":228,"def":4,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Substitute"],["Protect"],["Toxic"],["Sacred Fire"]]}]},"espeon":{"flags":{},"sets":[{"species":"Espeon","gender":"","item":"Light Clay","ability":"Magic Bounce","evs":{"hp":236,"atk":0,"def":44,"spa":4,"spd":4,"spe":220},"nature":"Timid","moves":[["Yawn"],["Psychic"],["Reflect"],["Light Screen"]],"ivs":{"atk":0}},{"species":"Espeon","gender":"","item":"Psychium Z","ability":"Magic Bounce","evs":{"hp":84,"atk":0,"def":0,"spa":196,"spd":0,"spe":228},"nature":"Timid","moves":[["Psychic"],["Future Sight"],["Calm Mind"],["Morning Sun","Dazzling Gleam"]],"ivs":{"atk":0}},{"species":"Espeon","gender":"","item":"Kee Berry","ability":"Magic Bounce","evs":{"hp":196,"atk":0,"def":36,"spa":4,"spd":52,"spe":220},"nature":"Timid","moves":[["Psychic","Psyshock","Stored Power"],["Calm Mind"],["Morning Sun"],["Dazzling Gleam"]],"ivs":{"atk":0}}]},"excadrill":{"flags":{},"sets":[{"species":"Excadrill","gender":"","item":"Choice Scarf","ability":"Mold Breaker","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Horn Drill"]]},{"species":"Excadrill","gender":"","item":"Groundium Z","ability":"Sand Rush","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Swords Dance"]]},{"species":"Excadrill","gender":"","item":"Focus Sash","ability":"Mold Breaker","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Rock Tomb"],["Earthquake"],["Iron Head"]]},{"species":"Excadrill","gender":"","item":"Assault Vest","ability":"Mold Breaker","evs":{"hp":44,"atk":156,"def":4,"spa":0,"spd":84,"spe":220},"nature":"Jolly","moves":[["Earthquake"],["Iron Head"],["Rock Tomb"],["Horn Drill"]]}]},"ferrothorn":{"flags":{},"sets":[{"species":"Ferrothorn","gender":"","item":"Rocky Helmet","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Gyro Ball"],["Power Whip"],["Leech Seed"],["Stealth Rock","Protect"]],"ivs":{"spe":0}},{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Gyro Ball"],["Power Whip"],["Leech Seed"],["Stealth Rock","Protect"]],"ivs":{"spe":0}},{"species":"Ferrothorn","gender":"","item":"Choice Band","ability":"Iron Barbs","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Brave","moves":[["Gyro Ball"],["Power Whip"],["Bullet Seed"],["Bulldoze","Knock Off"]],"ivs":{"spe":0}}]},"garchomp":{"flags":{},"sets":[{"species":"Garchomp","gender":"","item":"Choice Scarf","ability":"Rough Skin","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Outrage"],["Earthquake"],["Stone Edge","Rock Slide"],["Poison Jab","Fire Blast","Fire Fang","Toxic","Dragon Claw","Stealth Rock","Sleep Talk"]]},{"species":"Garchomp","gender":"","item":"Choice Band","ability":"Rough Skin","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Outrage"],["Earthquake"],["Stone Edge","Rock Slide"],["Fire Fang","Poison Jab","Dual Chop","Rock Tomb"]]},{"species":"Garchomp","gender":"","item":"Light Ball","ability":"Rough Skin","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Fling"],["Stealth Rock","Sand Attack"],["Rock Tomb"],["Earthquake"]]},{"species":"Garchomp","gender":"","item":"Rocky Helmet","ability":"Rough Skin","evs":{"hp":60,"atk":0,"def":196,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Toxic"],["Dragon Tail","Roar"],["Rock Tomb","Earthquake"],["Stealth Rock"]]},{"species":"Garchomp","gender":"","item":"Focus Sash","ability":"Rough Skin","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Outrage"],["Earthquake"],["Rock Tomb"],["Stealth Rock","Swords Dance"]]},{"species":"Garchomp","gender":"","item":"Dragonium Z","ability":"Sand Veil","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Outrage"],["Earthquake"],["Rock Tomb","Stone Edge"]]}]},"gengar":{"flags":{"megaOnly":1},"sets":[{"species":"Gengar","gender":"","item":"Gengarite","ability":"Cursed Body","shiny":true,"evs":{"hp":236,"atk":0,"def":4,"spa":12,"spd":4,"spe":252},"nature":"Timid","moves":[["Will-O-Wisp"],["Hex"],["Sludge Bomb"],["Substitute","Taunt","Destiny Bond"]],"ivs":{"atk":0}},{"species":"Gengar","gender":"","item":"Gengarite","ability":"Cursed Body","shiny":true,"evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Will-O-Wisp"],["Hex","Shadow Ball"],["Sludge Bomb"],["Substitute","Taunt","Destiny Bond","Focus Blast"]],"ivs":{"atk":0}},{"species":"Gengar","gender":"","item":"Focus Sash","ability":"Cursed Body","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Sludge Wave"],["Shadow Ball"],["Icy Wind"],["Destiny Bond"]],"ivs":{"atk":0}},{"species":"Gengar","gender":"","item":"Gengarite","ability":"Cursed Body","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":60,"spe":196},"nature":"Timid","moves":[["Perish Song"],["Protect"],["Will-O-Wisp"],["Hex","Sludge Bomb"]],"ivs":{"atk":0}}]},"gigalith":{"flags":{},"sets":[{"species":"Gigalith","gender":"","item":"Smooth Rock","ability":"Sand Stream","evs":{"hp":252,"atk":4,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Gravity","Earthquake"],["Explosion"],["Rock Blast","Rock Tomb"]]}]},"glalie":{"flags":{"megaOnly":1},"sets":[{"species":"Glalie","gender":"","item":"Leftovers","ability":"Moody","evs":{"hp":172,"atk":0,"def":0,"spa":0,"spd":84,"spe":252},"nature":"Timid","moves":[["Substitute"],["Protect"],["Sheer Cold","Toxic"],["Frost Breath","Freeze-Dry"]],"ivs":{"atk":0}},{"species":"Glalie","gender":"","item":"Leftovers","ability":"Moody","evs":{"hp":172,"atk":60,"def":20,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Earthquake"],["Freeze-Dry"],["Substitute"],["Protect"]]},{"species":"Glalie","gender":"","item":"Leftovers","ability":"Moody","evs":{"hp":172,"atk":0,"def":0,"spa":0,"spd":84,"spe":252},"nature":"Jolly","moves":[["Sheer Cold","Toxic"],["Earthquake"],["Substitute"],["Protect"]]},{"species":"Glalie","gender":"","item":"Glalitite","ability":"Moody","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Protect"],["Return"],["Earthquake"],["Explosion","Ice Shard"]],"happiness":255}]},"gliscor":{"flags":{},"sets":[{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":212,"atk":4,"def":4,"spa":0,"spd":84,"spe":204},"nature":"Jolly","moves":[["Earthquake"],["Guillotine","Toxic"],["Substitute"],["Protect"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":84,"atk":180,"def":20,"spa":0,"spd":4,"spe":220},"nature":"Jolly","moves":[["Fling"],["Acrobatics"],["Substitute","Earthquake"],["Swords Dance"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Earthquake"],["Rock Tomb"],["Taunt"]]}]},"golisopod":{"flags":{},"sets":[{"species":"Golisopod","gender":"","item":"Assault Vest","ability":"Emergency Exit","evs":{"hp":244,"atk":244,"def":20,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["First Impression"],["Liquidation"],["Aqua Jet"],["Leech Life","Sucker Punch","Rock Tomb"]]},{"species":"Golisopod","gender":"","item":"Sitrus Berry","ability":"Emergency Exit","evs":{"hp":236,"atk":252,"def":20,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["First Impression"],["Liquidation"],["Aqua Jet"],["Leech Life","Sucker Punch","Rock Tomb"]]},{"species":"Golisopod","gender":"","item":"Choice Band","ability":"Emergency Exit","evs":{"hp":244,"atk":244,"def":20,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["First Impression"],["Liquidation"],["Aqua Jet"],["Leech Life","Poison Jab"]]}]},"greninja":{"flags":{},"sets":[{"species":"Greninja","gender":"","item":"Life Orb","ability":"Protean","evs":{"hp":0,"atk":20,"def":0,"spa":236,"spd":0,"spe":252},"nature":"Naive","moves":[["Ice Beam"],["Water Shuriken","Hydro Pump","Grass Knot"],["Gunk Shot","Low Kick"],["Dark Pulse"]]},{"species":"Greninja","gender":"","item":"Normalium Z","ability":"Protean","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Happy Hour"],["Ice Beam"],["Water Shuriken","Hydro Pump","Dark Pulse"],["Low Kick","Gunk Shot"]]},{"species":"Greninja","gender":"","item":"Focus Sash","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Toxic Spikes"],["Spikes"],["Scald"],["U-turn"]]},{"species":"Greninja","gender":"","item":"Focus Sash","ability":"Protean","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Ice Beam"],["Water Shuriken","Hydro Pump"],["Gunk Shot","Low Kick"],["Dark Pulse"]]},{"species":"Greninja","gender":"","item":"Choice Scarf","ability":"Protean","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Grass Knot","U-Turn","Low Kick"],["Ice Beam"],["Gunk Shot"],["Dark Pulse","Rock Slide","Waterfall","Rock Tomb"]]},{"species":"Greninja","gender":"","item":"Rocky Helmet","ability":"Protean","evs":{"hp":76,"atk":68,"def":252,"spa":0,"spd":4,"spe":108},"nature":"Jolly","moves":[["Toxic"],["Low Kick"],["Ice Beam"],["Rock Tomb"]]}]},"gyarados":{"flags":{"megaOnly":1},"sets":[{"species":"Gyarados","gender":"","item":"Rocky Helmet","ability":"Intimidate","evs":{"hp":220,"atk":0,"def":244,"spa":0,"spd":0,"spe":44},"nature":"Impish","moves":[["Waterfall"],["Ice Fang"],["Taunt"],["Thunder Wave","Toxic"]]},{"species":"Gyarados","gender":"","item":"Gyaradosite","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Earthquake"],["Waterfall","Substitute","Taunt"],["Ice Fang","Crunch"]]},{"species":"Gyarados","gender":"","item":"Flyinium Z","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Bounce"],["Waterfall"],["Ice Fang","Earthquake"]]},{"species":"Gyarados","gender":"","item":"Lum Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Earthquake"],["Waterfall"],["Ice Fang","Taunt","Substitute"]]},{"species":"Gyarados","gender":"","item":"Choice Scarf","ability":"Moxie","evs":{"hp":84,"atk":252,"def":0,"spa":0,"spd":0,"spe":172},"nature":"Jolly","moves":[["Waterfall"],["Stone Edge"],["Earthquake"],["Ice Fang"]]}]},"heatran":{"flags":{},"sets":[{"species":"Heatran","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":212,"atk":0,"def":0,"spa":0,"spd":44,"spe":252},"nature":"Timid","moves":[["Toxic","Will-O-Wisp"],["Protect","Substitute"],["Magma Storm","Lava Plume"],["Earth Power","Taunt"]],"ivs":{"atk":0}},{"species":"Heatran","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":212,"atk":0,"def":4,"spa":44,"spd":156,"spe":92},"nature":"Calm","moves":[["Toxic","Will-O-Wisp"],["Protect"],["Magma Storm","Lava Plume"],["Earth Power","Substitute"]],"ivs":{"atk":0}},{"species":"Heatran","gender":"","item":"Choice Specs","ability":"Flash Fire","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Overheat","Fire Blast"],["Flash Cannon"],["Hidden Power Ice"],["Ancient Power","Earth Power"]],"ivs":{"atk":0}},{"species":"Heatran","gender":"","item":"Air Balloon","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Will-O-Wisp"],["Roar","Hidden Power Ice"],["Lava Plume"]],"ivs":{"atk":0}},{"species":"Heatran","gender":"","item":"Grassium Z","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Magma Storm"],["Solar Beam"],["Flash Cannon"],["Earth Power","Taunt"]],"ivs":{"atk":0}},{"species":"Heatran","gender":"","item":"Choice Scarf","ability":"Flash Fire","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Overheat","Fire Blast"],["Flash Cannon"],["Hidden Power Ice"],["Earth Power","Ancient Power"]],"ivs":{"atk":0}},{"species":"Heatran","gender":"","item":"Firium Z","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Overheat","Fire Blast"],["Flash Cannon"],["Earth Power"],["Taunt","Stealth Rock","Flame Charge"]],"ivs":{"atk":0}}]},"heracross":{"flags":{"megaOnly":1},"sets":[{"species":"Heracross","gender":"","item":"Heracronite","ability":"Moxie","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pin Missile"],["Rock Blast"],["Bullet Seed"],["Close Combat","Earthquake"]]},{"species":"Heracross","gender":"","item":"Heracronite","ability":"Guts","evs":{"hp":156,"atk":252,"def":0,"spa":0,"spd":0,"spe":100},"nature":"Adamant","moves":[["Pin Missile"],["Rock Blast"],["Bullet Seed"],["Close Combat","Earthquake","Swords Dance"]]},{"species":"Heracross","gender":"","item":"Choice Scarf","ability":"Moxie","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Megahorn"],["Close Combat"],["Stone Edge"],["Earthquake"]]}]},"hippowdon":{"flags":{},"sets":[{"species":"Hippowdon","gender":"","item":"Rocky Helmet","ability":"Sand Stream","evs":{"hp":212,"atk":0,"def":252,"spa":0,"spd":0,"spe":44},"nature":"Impish","moves":[["Yawn"],["Stealth Rock"],["Earthquake"],["Slack Off","Whirlwind","Rock Tomb","Ice Fang"]]},{"species":"Hippowdon","gender":"","item":"Sitrus Berry","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":52,"spa":0,"spd":204,"spe":0},"nature":"Careful","moves":[["Earthquake"],["Stealth Rock"],["Yawn"],["Rock Tomb","Whirlwind"]]},{"species":"Hippowdon","gender":"","item":"Iapapa Berry","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":52,"spa":0,"spd":204,"spe":0},"nature":"Careful","moves":[["Earthquake"],["Stealth Rock"],["Yawn"],["Whirlwind"]]},{"species":"Hippowdon","gender":"","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Yawn","Toxic"],["Earthquake"],["Slack Off"],["Protect"]]}]},"hydreigon":{"flags":{},"sets":[{"species":"Hydreigon","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Draco Meteor"],["Dark Pulse"],["Fire Blast"],["U-turn","Earth Power"]]},{"species":"Hydreigon","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Draco Meteor"],["Dark Pulse"],["Fire Blast"],["Earth Power","Flash Cannon"]]},{"species":"Hydreigon","gender":"","item":"Darkinium Z","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Draco Meteor"],["Dark Pulse"],["Fire Blast"],["Taunt","Earth Power","Substitute"]]},{"species":"Hydreigon","gender":"","item":"Darkinium Z","ability":"Levitate","evs":{"hp":252,"atk":0,"def":124,"spa":4,"spd":76,"spe":52},"nature":"Modest","moves":[["Dark Pulse"],["Taunt"],["Thunder Wave"],["Roost"]],"ivs":{"atk":0}}]},"jellicent":{"flags":{},"sets":[{"species":"Jellicent","gender":"M","item":"Sitrus Berry","ability":"Cursed Body","evs":{"hp":252,"atk":0,"def":244,"spa":0,"spd":0,"spe":12},"nature":"Bold","moves":[["Scald"],["Will-O-Wisp","Toxic"],["Recover"],["Taunt","Ice Beam","Hex"]],"ivs":{"atk":0}}]},"kangaskhan":{"flags":{"megaOnly":1},"sets":[{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return","Double-Edge","Facade","Crush Claw"],["Power-Up Punch","Fake Out"],["Earthquake","Fire Punch","Drain Punch"],["Sucker Punch","Ice Punch","Rock Tomb"]]},{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":212,"atk":252,"def":12,"spa":0,"spd":12,"spe":20},"nature":"Adamant","moves":[["Secret Power"],["Power-Up Punch"],["Substitute","Sucker Punch"],["Rock Slide","Rock Tomb","Drain Punch"]]},{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":212,"atk":20,"def":4,"spa":252,"spd":0,"spe":20},"nature":"Rash","moves":[["Double-Edge"],["Fire Blast","Flamethrower","Thunderbolt"],["Ice Beam","Shadow Ball"],["Earthquake","Rock Tomb"]]}]},"kartana":{"flags":{},"sets":[{"species":"Kartana","gender":"","item":"Choice Scarf","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Leaf Blade"],["Smart Strike","Guillotine"],["Sacred Sword"],["Night Slash"]]},{"species":"Kartana","gender":"","item":"Darkinium Z","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Smart Strike","Sacred Sword"],["Night Slash"]]},{"species":"Kartana","gender":"","item":"Fightinium Z","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Smart Strike"],["Sacred Sword"]]},{"species":"Kartana","gender":"","item":"Grassium Z","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Smart Strike"],["Sacred Sword","Night Slash"]]},{"species":"Kartana","gender":"","item":"Steelium Z","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Smart Strike"],["Sacred Sword","Night Slash"]]},{"species":"Kartana","gender":"","item":"Focus Sash","ability":"Beast Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Smart Strike"],["Sacred Sword","Night Slash"]]},{"species":"Kartana","gender":"","item":"Life Orb","ability":"Beast Boost","evs":{"hp":36,"atk":0,"def":0,"spa":0,"spd":220,"spe":252},"nature":"Timid","moves":[["Swords Dance"],["Leaf Blade"],["Smart Strike"],["Sacred Sword","Night Slash"]],"ivs":{"atk":21}}]},"kingdra":{"flags":{},"sets":[{"species":"Kingdra","gender":"","item":"Waterium Z","ability":"Swift Swim","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Draco Meteor"],["Ice Beam"],["Rain Dance"]],"ivs":{"atk":0}},{"species":"Kingdra","gender":"","item":"Scope Lens","ability":"Sniper","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Focus Energy"],["Draco Meteor"],["Hydro Pump"],["Yawn","Substitute","Agility"]],"ivs":{"atk":0}}]},"landorustherian":{"flags":{},"sets":[{"species":"Landorus-Therian","gender":"M","item":"Iapapa Berry","ability":"Intimidate","evs":{"hp":244,"atk":0,"def":36,"spa":0,"spd":228,"spe":0},"nature":"Careful","moves":[["Earthquake"],["Rock Tomb"],["U-turn"],["Stealth Rock","Fissure"]]},{"species":"Landorus-Therian","gender":"","item":"Rocky Helmet","ability":"Intimidate","evs":{"hp":212,"atk":0,"def":236,"spa":0,"spd":0,"spe":60},"nature":"Impish","moves":[["Earthquake"],["Rock Tomb"],["U-turn"],["Stealth Rock"]]},{"species":"Landorus-Therian","gender":"","item":"Groundium Z","ability":"Intimidate","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Rock Tomb"],["Knock Off"],["Stealth Rock"]]},{"species":"Landorus-Therian","gender":"","item":"Choice Scarf","ability":"Intimidate","evs":{"hp":44,"atk":212,"def":12,"spa":0,"spd":4,"spe":236},"nature":"Adamant","moves":[["Earthquake"],["U-turn"],["Rock Slide","Stone Edge"],["Superpower","Knock Off"]]},{"species":"Landorus-Therian","gender":"","item":"Assault Vest","ability":"Intimidate","evs":{"hp":244,"atk":36,"def":4,"spa":0,"spd":188,"spe":36},"nature":"Adamant","moves":[["Earthquake"],["Knock Off","Fissure"],["Rock Tomb"],["U-turn"]]},{"species":"Landorus-Therian","gender":"","item":"Flyinium Z","ability":"Intimidate","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Fly"],["Rock Polish","Rock Slide","Stone Edge"]]}]},"lapras":{"flags":{},"sets":[{"species":"Lapras","gender":"","item":"Assault Vest","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Quiet","moves":[["Sheer Cold"],["Surf","Hydro Pump"],["Freeze-Dry"],["Ice Shard"]],"ivs":{"atk":0}}]},"latias":{"flags":{},"sets":[{"species":"Latias","gender":"","item":"Rocky Helmet","ability":"Levitate","evs":{"hp":212,"atk":0,"def":36,"spa":4,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic","Reflect"],["Draco Meteor"],["Thunder Wave","Recover"],["Healing Wish"]],"ivs":{"atk":0}},{"species":"Latias","gender":"","item":"Safety Goggles","ability":"Levitate","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Calm Mind"],["Substitute","Recover"],["Draco Meteor","Hidden Power Fire"]],"ivs":{"atk":0}}]},"latios":{"flags":{},"sets":[{"species":"Latios","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic","Psyshock"],["Draco Meteor"],["Shadow Ball","Hidden Power Fire"],["Trick","Thunderbolt"]],"ivs":{"atk":0}},{"species":"Latios","gender":"","item":"Dragonium Z","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psychic","Psyshock"],["Shadow Ball","Hidden Power Fire"],["Thunderbolt","Calm Mind"]],"ivs":{"atk":0}},{"species":"Latios","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Timid","moves":[["Reflect"],["Light Screen"],["Memento"],["Draco Meteor"]],"ivs":{"atk":0}},{"species":"Latios","gender":"","item":"Groundium Z","ability":"Levitate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Zen Headbutt"],["Earthquake"],["Outrage"]]},{"species":"Latios","gender":"","item":"Psychium Z","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Heal Block"],["Psychic","Psyshock"],["Draco Meteor","Dragon Pulse"],["Shadow Ball","Hidden Power Fire","Roost"]],"ivs":{"atk":0}}]},"lucario":{"flags":{"megaOnly":1},"sets":[{"species":"Lucario","gender":"","item":"Lucarionite","ability":"Justified","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Bullet Punch","Extreme Speed"],["Earthquake","Ice Punch","Iron Tail"],["Swords Dance"]]},{"species":"Lucario","gender":"","item":"Lucarionite","ability":"Justified","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Flash Cannon"],["Focus Blast","Aura Sphere"],["Dark Pulse","Vacuum Wave"],["Nasty Plot"]]},{"species":"Lucario","gender":"","item":"Lucarionite","ability":"Justified","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Flash Cannon"],["Close Combat"],["Substitute","Ice Punch","Dark Pulse","Stone Edge"],["Extreme Speed","Bullet Punch","Vacuum Wave"]]},{"species":"Lucario","gender":"","item":"Focus Sash","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Counter"],["Close Combat"],["Rock Tomb"],["Extreme Speed","Bullet Punch"]]}]},"magnezone":{"flags":{},"sets":[{"species":"Magnezone","gender":"","item":"Assault Vest","ability":"Analytic","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Volt Switch"],["Hidden Power Fire","Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Magnezone","gender":"","item":"Assault Vest","ability":"Magnet Pull","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Volt Switch"],["Hidden Power Fire"]],"ivs":{"atk":0}},{"species":"Magnezone","gender":"","item":"Assault Vest","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Volt Switch"],["Hidden Power Fire","Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Magnezone","gender":"","item":"Choice Specs","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":0}},{"species":"Magnezone","gender":"","item":"Choice Specs","ability":"Analytic","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":0}},{"species":"Magnezone","gender":"","item":"Electrium Z","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":0}},{"species":"Magnezone","gender":"","item":"Air Balloon","ability":"Analytic","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Thunderbolt"],["Flash Cannon"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":0}}]},"mamoswine":{"flags":{},"sets":[{"species":"Mamoswine","gender":"","item":"Focus Sash","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Icicle Spear"],["Ice Shard"],["Earthquake"],["Stealth Rock","Rock Tomb","Endeavor"]]},{"species":"Mamoswine","gender":"","item":"Rocky Helmet","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":0,"spe":4},"nature":"Impish","moves":[["Earthquake"],["Ice Shard"],["Roar","Toxic"],["Stealth Rock"]]},{"species":"Mamoswine","gender":"","item":"Assault Vest","ability":"Thick Fat","evs":{"hp":44,"atk":164,"def":4,"spa":0,"spd":252,"spe":44},"nature":"Adamant","moves":[["Icicle Spear"],["Earthquake"],["Ice Shard"],["Fissure"]]},{"species":"Mamoswine","gender":"","item":"Life Orb","ability":"Thick Fat","evs":{"hp":108,"atk":252,"def":52,"spa":0,"spd":92,"spe":4},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Icicle Spear"],["Ice Shard"]]},{"species":"Mamoswine","gender":"","item":"Choice Scarf","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Icicle Spear","Icicle Crash"],["Ice Shard"],["Earthquake"],["Rock Slide","Superpower","Stone Edge","Knock Off"]]},{"species":"Piloswine","nickname":"Piloswine","gender":"","item":"Eviolite","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Rock Tomb","Roar"],["Ice Shard"],["Earthquake"],["Stealth Rock"]]}]},"mandibuzz":{"flags":{},"sets":[{"species":"Mandibuzz","gender":"","item":"Rocky Helmet","ability":"Overcoat","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Taunt","U-turn"],["Toxic"],["Roost"]],"ivs":{"atk":0}}]},"marowakalola":{"flags":{},"sets":[{"species":"Marowak-Alola","gender":"","item":"Thick Club","ability":"Lightning Rod","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Adamant","moves":[["Flare Blitz"],["Shadow Bone"],["Bonemerang"],["Will-O-Wisp"]]},{"species":"Marowak-Alola","gender":"","item":"Thick Club","ability":"Lightning Rod","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Jolly","moves":[["Flare Blitz"],["Shadow Bone"],["Bonemerang","Rock Slide","Will-O-Wisp"],["Flame Charge"]]},{"species":"Marowak-Alola","gender":"","item":"Thick Club","ability":"Lightning Rod","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Flare Blitz","Fire Punch"],["Shadow Bone"],["Bonemerang","Perish Song","Stealth Rock"],["Will-O-Wisp"]]}]},"mawile":{"flags":{"megaOnly":1},"sets":[{"species":"Mawile","gender":"","item":"Mawilite","ability":"Intimidate","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Iron Head","Fire Fang","Knock Off"],["Play Rough"],["Sucker Punch"],["Swords Dance"]]},{"species":"Mawile","gender":"","item":"Mawilite","ability":"Intimidate","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Knock Off","Iron Head","Fire Fang"],["Play Rough"],["Sucker Punch"],["Swords Dance"]]},{"species":"Mawile","gender":"","item":"Mawilite","ability":"Intimidate","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Substitute"],["Play Rough"],["Sucker Punch"],["Focus Punch"]],"ivs":{"spe":19}}]},"medicham":{"flags":{"megaOnly":1},"sets":[{"species":"Medicham","gender":"","item":"Medichamite","ability":"Pure Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Fake Out","Bullet Punch"],["High Jump Kick"],["Ice Punch"],["Thunder Punch","Zen Headbutt"]]}]},"metagross":{"flags":{"megaOnly":1},"sets":[{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Iron Head","Meteor Mash"],["Bullet Punch","Zen Headbutt","Thunder Punch"],["Ice Punch"],["Earthquake","Hammer Arm"]]},{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Meteor Mash","Zen Headbutt"],["Hone Claws"],["Substitute"],["Earthquake"]]},{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Iron Head"],["Zen Headbutt"],["Ice Punch"],["Stealth Rock"]]}]},"milotic":{"flags":{},"sets":[{"species":"Milotic","gender":"","item":"Flame Orb","ability":"Marvel Scale","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":0,"spe":4},"nature":"Bold","moves":[["Scald"],["Toxic","Ice Beam"],["Recover"],["Mirror Coat"]],"ivs":{"atk":0}},{"species":"Milotic","gender":"","item":"Assault Vest","ability":"Competitive","evs":{"hp":244,"atk":0,"def":44,"spa":212,"spd":4,"spe":4},"nature":"Modest","moves":[["Scald"],["Ice Beam"],["Mirror Coat"],["Icy Wind","Hidden Power Fire"]],"ivs":{"atk":0}}]},"mimikyu":{"flags":{},"sets":[{"species":"Mimikyu","gender":"","item":"Ghostium Z","ability":"Disguise","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Shadow Claw"],["Play Rough"],["Shadow Sneak"]]},{"species":"Mimikyu","gender":"","item":"Fairium Z","ability":"Disguise","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Shadow Claw"],["Play Rough"],["Shadow Sneak"]]},{"species":"Mimikyu","gender":"","item":"Life Orb","ability":"Disguise","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Shadow Claw"],["Play Rough"],["Shadow Sneak"]]},{"species":"Mimikyu","gender":"","item":"Focus Sash","ability":"Disguise","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Shadow Claw"],["Play Rough"],["Shadow Sneak"]]},{"species":"Mimikyu","gender":"","item":"Fairium Z","ability":"Disguise","evs":{"hp":244,"atk":196,"def":4,"spa":0,"spd":12,"spe":52},"nature":"Adamant","moves":[["Curse"],["Play Rough"],["Trick Room"],["Taunt","Will-O-Wisp","Shadow Sneak"]]},{"species":"Mimikyu","gender":"","item":"Ghostium Z","ability":"Disguise","evs":{"hp":244,"atk":4,"def":4,"spa":0,"spd":188,"spe":68},"nature":"Careful","moves":[["Shadow Claw"],["Curse"],["Substitute"],["Pain Split"]]}]},"mukalola":{"flags":{},"sets":[{"species":"Muk-Alola","gender":"","item":"Assault Vest","ability":"Poison Touch","evs":{"hp":164,"atk":92,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Brave","moves":[["Poison Jab","Gunk Shot"],["Knock Off"],["Shadow Sneak","Clear Smog"],["Pursuit","Flamethrower"]]},{"species":"Muk-Alola","gender":"","item":"Black Sludge","ability":"Poison Touch","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Minimize"],["Toxic","Curse"],["Knock Off"],["Poison Jab"]]},{"species":"Muk-Alola","gender":"","item":"Figy Berry","ability":"Gluttony","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Minimize"],["Knock Off"],["Poison Jab","Gunk Shot"],["Curse","Shadow Sneak"]]}]},"nihilego":{"flags":{},"sets":[{"species":"Nihilego","gender":"","item":"Focus Sash","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Power Gem"],["Sludge Wave"],["Hidden Power Ice","Hidden Power Fire","Toxic Spikes","Thunder Wave"],["Stealth Rock","Mirror Coat"]],"ivs":{"atk":0}},{"species":"Nihilego","gender":"","item":"Choice Scarf","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Power Gem"],["Sludge Wave"],["Hidden Power Ice","Hidden Power Fire"],["Thunderbolt","Psychic","Grass Knot","Clear Smog"]],"ivs":{"atk":0}}]},"ninetales":{"flags":{},"sets":[{"species":"Ninetales","gender":"","item":"Heat Rock","ability":"Drought","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Overheat"],["Power Swap"],["Will-O-Wisp","Hypnosis"],["Hidden Power Ground"]],"ivs":{"atk":0}},{"species":"Ninetales-Alola","gender":"","item":"Focus Sash","ability":"Snow Warning","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Blizzard"],["Aurora Veil"],["Encore","Hypnosis"],["Moonblast","Freeze-Dry","Icy Wind"]],"ivs":{"atk":0}},{"species":"Ninetales-Alola","gender":"","item":"Light Clay","ability":"Snow Warning","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":12,"spe":252},"nature":"Timid","moves":[["Blizzard"],["Aurora Veil"],["Encore","Hypnosis"],["Disable","Icy Wind","Freeze-Dry","Sheer Cold"]],"ivs":{"atk":0}},{"species":"Ninetales-Alola","gender":"","item":"Icium Z","ability":"Snow Warning","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Blizzard"],["Aurora Veil"],["Encore","Hypnosis"],["Moonblast","Freeze-Dry"]],"ivs":{"atk":0}}]},"pelipper":{"flags":{},"sets":[{"species":"Pelipper","gender":"","item":"Focus Sash","ability":"Drizzle","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hurricane"],["Hydro Pump","Scald"],["Ice Beam","Icy Wind"],["U-turn"]]},{"species":"Pelipper","gender":"","item":"Rocky Helmet","ability":"Drizzle","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Hurricane"],["Scald"],["Roost"],["U-turn","Toxic","Ice Beam"]]},{"species":"Pelipper","gender":"","item":"Choice Specs","ability":"Drizzle","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hurricane"],["Hydro Pump"],["Ice Beam"],["U-turn","Shock Wave","Scald","Sleep Talk"]]}]},"pheromosa":{"flags":{},"sets":[{"species":"Pheromosa","gender":"","item":"Choice Scarf","ability":"Beast Boost","evs":{"hp":116,"atk":84,"def":252,"spa":4,"spd":0,"spe":52},"nature":"Naughty","moves":[["High Jump Kick"],["U-turn"],["Ice Beam"],["Poison Jab"]]},{"species":"Pheromosa","gender":"","item":"Life Orb","ability":"Beast Boost","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["High Jump Kick"],["U-turn"],["Poison Jab"],["Ice Beam"]]},{"species":"Pheromosa","gender":"","item":"Focus Sash","ability":"Beast Boost","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Hasty","moves":[["High Jump Kick"],["U-turn"],["Poison Jab"],["Ice Beam"]]},{"species":"Pheromosa","gender":"","item":"Fightinium Z","ability":"Beast Boost","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Focus Blast"],["Bug Buzz"],["Hidden Power Rock","U-turn","Quiver Dance"],["Ice Beam"]],"ivs":{"atk":0}},{"species":"Pheromosa","gender":"","item":"Fist Plate","ability":"Beast Boost","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naughty","moves":[["High Jump Kick"],["U-turn"],["Fling"],["Ice Beam"]]}]},"pinsir":{"flags":{"megaOnly":1},"sets":[{"species":"Pinsir","gender":"","item":"Pinsirite","ability":"Hyper Cutter","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Return"],["Quick Attack","Feint"],["Close Combat","Earthquake"]]}]},"politoed":{"flags":{},"sets":[{"species":"Politoed","gender":"","item":"Eject Button","ability":"Drizzle","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Scald"],["Ice Beam"],["Perish Song"],["Encore","Protect","Hypnosis"]]},{"species":"Politoed","gender":"","item":"Psychium Z","ability":"Drizzle","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Hypnosis"],["Belly Drum"],["Waterfall"],["Earthquake"]]}]},"porygonz":{"flags":{},"sets":[{"species":"Porygon-Z","gender":"","item":"Normalium Z","ability":"Adaptability","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Conversion"],["Ice Beam"],["Dark Pulse"]],"ivs":{"atk":0}},{"species":"Porygon-Z","gender":"","item":"Normalium Z","ability":"Adaptability","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Conversion"],["Ice Beam"],["Thunderbolt","Hyper Beam"]],"ivs":{"atk":0}},{"species":"Porygon-Z","gender":"","item":"Normalium Z","ability":"Adaptability","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Tri Attack"],["Conversion"],["Dark Pulse","Shadow Ball","Ice Beam","Thunderbolt"],["Hyper Beam"]],"ivs":{"atk":0}},{"species":"Porygon-Z","gender":"","item":"Choice Scarf","ability":"Adaptability","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Tri Attack","Uproar"],["Ice Beam"],["Thunderbolt"],["Dark Pulse","Shadow Ball"]],"ivs":{"atk":0}}]},"porygon2":{"flags":{},"sets":[{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Analytic","evs":{"hp":244,"atk":0,"def":124,"spa":0,"spd":140,"spe":0},"nature":"Sassy","moves":[["Return"],["Foul Play"],["Ice Beam"],["Recover"]]},{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Trace","evs":{"hp":244,"atk":0,"def":140,"spa":20,"spd":100,"spe":4},"nature":"Modest","moves":[["Recover"],["Ice Beam"],["Discharge ","Thunderbolt"],["Toxic"]],"ivs":{"atk":0}},{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Trace","evs":{"hp":244,"atk":0,"def":204,"spa":0,"spd":60,"spe":0},"nature":"Bold","moves":[["Ice Beam"],["Shadow Ball","Foul Play"],["Discharge","Toxic"],["Recover"]],"ivs":{"atk":0}},{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Download","evs":{"hp":244,"atk":0,"def":204,"spa":0,"spd":60,"spe":0},"nature":"Bold","moves":[["Ice Beam"],["Tri Attack","Shadow Ball"],["Thunderbolt","Discharge"],["Recover"]],"ivs":{"atk":0}},{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Download","evs":{"hp":244,"atk":0,"def":0,"spa":252,"spd":12,"spe":0},"nature":"Quiet","moves":[["Ice Beam"],["Tri Attack","Shadow Ball"],["Thunderbolt ","Hidden Power Fire","Hidden Power Ground"],["Trick Room"]],"ivs":{"atk":0,"spe":0}}]},"primarina":{"flags":{},"sets":[{"species":"Primarina","gender":"","item":"Primarium Z","ability":"Torrent","evs":{"hp":252,"atk":0,"def":100,"spa":156,"spd":0,"spe":0},"nature":"Quiet","moves":[["Sparkling Aria"],["Moonblast"],["Aqua Jet"],["Perish Song","Encore","Hidden Power Fire","Sing"]]},{"species":"Primarina","gender":"","item":"Choice Specs","ability":"Torrent","evs":{"hp":252,"atk":0,"def":4,"spa":252,"spd":0,"spe":0},"nature":"Modest","moves":[["Sparkling Aria","Hydro Pump"],["Moonblast"],["Psychic","Energy Ball"],["Hidden Power Fire"]]}]},"pyukumuku":{"flags":{},"sets":[{"species":"Pyukumuku","gender":"","item":"Sitrus Berry","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Counter"],["Recover"],["Harden","Soak"],["Toxic"]]},{"species":"Pyukumuku","gender":"","item":"Rocky Helmet","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Counter"],["Recover"],["Harden","Soak"],["Toxic"]]},{"species":"Pyukumuku","gender":"","item":"Poisonium Z","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Purify"],["Recover"],["Double Team","Soak","Toxic"],["Baton Pass"]]},{"species":"Pyukumuku","gender":"","item":"Wiki Berry","ability":"Innards Out","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Counter"],["Recover"],["Harden","Soak"],["Toxic"]]}]},"raikou":{"flags":{},"sets":[{"species":"Raikou","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Shadow Ball","Extrasensory"],["Volt Switch"]],"ivs":{"atk":0}},{"species":"Raikou","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":220,"atk":0,"def":0,"spa":52,"spd":0,"spe":236},"nature":"Timid","moves":[["Substitute"],["Calm Mind"],["Thunderbolt"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Raikou","gender":"","item":"Light Clay","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Reflect"],["Light Screen"],["Thunderbolt","Volt Switch"],["Hidden Power Ice"]],"ivs":{"atk":0}}]},"reuniclus":{"flags":{},"sets":[{"species":"Reuniclus","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Calm Mind"],["Psychic","Psyshock"],["Focus Blast"],["Recover"]],"ivs":{"atk":0}},{"species":"Reuniclus","gender":"","item":"Psychium Z","ability":"Overcoat","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Quiet","moves":[["Trick Room"],["Psychic"],["Focus Blast"],["Shadow Ball"]],"ivs":{"atk":0,"spe":0}},{"species":"Reuniclus","gender":"","item":"Kee Berry","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Psychic","Psyshock"],["Focus Blast"],["Recover"]],"ivs":{"atk":0}}]},"rhyperior":{"flags":{},"sets":[{"species":"Rhyperior","gender":"","item":"Rockium Z","ability":"Solid Rock","evs":{"hp":204,"atk":252,"def":0,"spa":0,"spd":52,"spe":0},"nature":"Adamant","moves":[["Rock Wrecker"],["Earthquake"],["Ice Punch"],["Rock Blast"]]},{"species":"Rhyperior","gender":"","item":"Assault Vest","ability":"Solid Rock","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Adamant","moves":[["Rock Blast"],["Earthquake"],["Ice Punch"],["Horn Drill"]]},{"species":"Rhyperior","gender":"","item":"Weakness Policy","ability":"Solid Rock","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rock Blast"],["Earthquake"],["Ice Punch"],["Rock Polish"]]}]},"rotom":{"flags":{},"sets":[{"species":"Rotom-Heat","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":108,"atk":0,"def":0,"spa":252,"spd":0,"spe":148},"nature":"Modest","moves":[["Overheat"],["Thunderbolt","Trick"],["Volt Switch"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Overheat"],["Thunderbolt","Trick"],["Volt Switch"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Assault Vest","ability":"Levitate","evs":{"hp":252,"atk":0,"def":36,"spa":180,"spd":0,"spe":4},"nature":"Modest","moves":[["Overheat"],["Discharge","Thunderbolt"],["Volt Switch"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Firium Z","ability":"Levitate","evs":{"hp":108,"atk":0,"def":0,"spa":252,"spd":0,"spe":148},"nature":"Modest","moves":[["Overheat"],["Thunderbolt","Will-O-Wisp"],["Volt Switch"],["Hidden Power Ice","Electroweb"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Sitrus Berry","ability":"Levitate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":0,"spe":4},"nature":"Bold","moves":[["Overheat"],["Volt Switch"],["Will-O-Wisp"],["Hidden Power Ice","Foul Play"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":244,"spe":12},"nature":"Calm","moves":[["Overheat"],["Discharge"],["Substitute"],["Will-O-Wisp","Toxic"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":156,"atk":0,"def":0,"spa":0,"spd":220,"spe":132},"nature":"Calm","moves":[["Overheat"],["Discharge"],["Substitute"],["Will-O-Wisp","Toxic"]],"ivs":{"atk":0}},{"species":"Rotom-Heat","gender":"","item":"Sitrus Berry","ability":"Levitate","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":252,"spe":4},"nature":"Calm","moves":[["Overheat"],["Volt Switch"],["Will-O-Wisp","Thunder Wave"],["Discharge","Hidden Power Ice","Thunderbolt"]],"ivs":{"atk":0}},{"species":"Rotom-Wash","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":108,"atk":0,"def":0,"spa":252,"spd":0,"spe":148},"nature":"Modest","moves":[["Hydro Pump"],["Thunderbolt","Trick"],["Volt Switch"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Rotom-Wash","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Thunderbolt","Trick"],["Volt Switch"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Rotom-Wash","gender":"","item":"Waterium Z","ability":"Levitate","evs":{"hp":108,"atk":0,"def":0,"spa":252,"spd":0,"spe":148},"nature":"Modest","moves":[["Hydro Pump"],["Thunderbolt","Electro Web"],["Volt Switch"],["Hidden Power Ice","Will-O-Wisp"]],"ivs":{"atk":0}},{"species":"Rotom-Wash","gender":"","item":"Sitrus Berry","ability":"Levitate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":0,"spe":4},"nature":"Bold","moves":[["Hydro Pump"],["Volt Switch"],["Will-O-Wisp"],["Hidden Power Ice","Foul Play"]],"ivs":{"atk":0}},{"species":"Rotom-Wash","gender":"","item":"Sitrus Berry","ability":"Levitate","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Hydro Pump"],["Thunderbolt","Electro Web"],["Volt Switch"],["Hidden Power Ice","Will-O-Wisp"]],"ivs":{"atk":0}}]},"salamence":{"flags":{"megaOnly":1},"sets":[{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Draco Meteor"],["Flamethrower","Fire Blast"],["Roost"," Hyper Beam"]],"ivs":{"atk":0}},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Hyper Voice","Earthquake"],["Draco Meteor"],["Flamethrower","Fire Blast"],["Double-Edge"]]},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":244,"atk":4,"def":4,"spa":0,"spd":228,"spe":28},"nature":"Careful","moves":[["Dragon Dance"],["Facade"],["Roost"],["Earthquake","Substitute"]]},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Return","Double-Edge"],["Earthquake"],["Roost","Substitute","Fire Blast","Draco Meteor"]]},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Toxic"],["Substitute"],["Roost"],["Return"]]},{"species":"Salamence","gender":"","item":"Flyinium Z","ability":"Moxie","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Claw","Outrage"],["Fly"],["Earthquake"],["Dragon Dance"]]}]},"scizor":{"flags":{"megaOnly":1},"sets":[{"species":"Scizor","gender":"","item":"Scizorite","ability":"Technician","evs":{"hp":252,"atk":28,"def":52,"spa":0,"spd":172,"spe":4},"nature":"Adamant","moves":[["Bullet Punch"],["U-turn","Knock Off","Bug Bite"],["Swords Dance"],["Roost"]]},{"species":"Scizor","gender":"","item":"Scizorite","ability":"Technician","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Adamant","moves":[["Bullet Punch"],["U-turn"],["Superpower"],["Swords Dance","Knock Off"]]},{"species":"Scizor","gender":"","item":"Choice Band","ability":"Technician","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Adamant","moves":[["Bullet Punch"],["U-turn"],["Superpower"],["Knock Off","Pursuit"]]},{"species":"Scizor","gender":"","item":"Lum Berry","ability":"Technician","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Swords Dance","Iron Defense"],["Roost"],["Bullet Punch"],["Knock Off","U-turn","Toxic"]]}]},"serperior":{"flags":{},"sets":[{"species":"Serperior","gender":"","item":"Focus Sash","ability":"Contrary","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Hidden Power Fire","Hidden Power Ice","Hidden Power Rock"],["Glare"],["Taunt","Mirror Coat"]],"ivs":{"atk":0}},{"species":"Serperior","gender":"","item":"Rocky Helmet","ability":"Contrary","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Glare"],["Synthesis"],["Reflect","Hidden Power Fire"]],"ivs":{"atk":0}},{"species":"Serperior","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Glare","Taunt"],["Leech Seed"],["Substitute"]],"ivs":{"atk":0}}]},"sharpedo":{"flags":{"megaOnly":1},"sets":[{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Protect"],["Crunch"],["Ice Fang"],["Poison Fang","Earthquake","Waterfall","Aqua Jet"]]},{"species":"Sharpedo","gender":"","item":"Focus Sash","ability":"Speed Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Protect"],["Dark Pulse","Hydro Pump"],["Ice Beam"],["Destiny Bond"]],"ivs":{"atk":0}}]},"shuckle":{"flags":{},"sets":[{"species":"Shuckle","gender":"","item":"Red Card","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Sticky Web"],["Stealth Rock"],["Encore"],["Knock Off"]]},{"species":"Shuckle","gender":"","item":"Mental Herb","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Sticky Web"],["Stealth Rock"],["Encore"],["Rock Tomb"]]}]},"silvally":{"flags":{},"sets":[{"species":"Silvally","gender":"","item":"Normalium Z","ability":"RKS System","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Explosion"],["Swords Dance"],["Flame Charge"],["Crunch"]]},{"species":"Silvally","gender":"","item":"Darkinium Z","ability":"RKS System","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Parting Shot"],["Thunder Wave"],["Ice Beam"],["Flamethrower"]],"ivs":{"atk":0}},{"species":"Silvally-Electric","gender":"","item":"Electric Memory","ability":"RKS System","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Multi-Attack"],["Swords Dance"],["Flame Charge"],["Crunch","Ice Fang"]]},{"species":"Silvally-Fighting","gender":"","item":"Fighting Memory","ability":"RKS System","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Multi-Attack"],["Swords Dance"],["Flame Charge"],["Shadow Claw"]]},{"species":"Silvally-Ground","gender":"","item":"Ground Memory","ability":"RKS System","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Multi-Attack"],["Swords Dance"],["Flame Charge"],["Rock Slide","Stone Edge"]]},{"species":"Silvally-Steel","gender":"","item":"Steel Memory","ability":"RKS System","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Parting Shot"],["Thunder Wave"],["Flamethrower"],["Flash Cannon","Ice Beam"]],"ivs":{"atk":0}}]},"skarmory":{"flags":{},"sets":[{"species":"Skarmory","gender":"","item":"Flyinium Z","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Brave Bird"],["Taunt"],["Rock Tomb"]]},{"species":"Skarmory","gender":"","item":"Rocky Helmet","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Iron Head","Drill Peck"],["Roost"],["Iron Defense","Stealth Rock"],["Taunt","Toxic","Whirlwind"]]},{"species":"Skarmory","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Iron Head","Drill Peck"],["Roost"],["Iron Defense","Stealth Rock"],["Taunt","Toxic","Whirlwind"]]}]},"slowbro":{"flags":{"megaOnly":1},"sets":[{"species":"Slowbro","gender":"","item":"Slowbronite","ability":"Regenerator","evs":{"hp":244,"atk":0,"def":252,"spa":4,"spd":4,"spe":4},"nature":"Bold","moves":[["Scald"],["Psychic","Fire Blast","Iron Defense","Calm Mind"],["Ice Beam"],["Slack Off"]],"ivs":{"atk":0}},{"species":"Slowbro","gender":"","item":"Slowbronite","ability":"Regenerator","evs":{"hp":244,"atk":0,"def":4,"spa":252,"spd":4,"spe":4},"nature":"Modest","moves":[["Trick Room"],["Psychic","Psyshock","Flamethrower","Fire Blast"],["Scald"],["Ice Beam"]],"ivs":{"atk":0}},{"species":"Slowbro","gender":"","item":"Rocky Helmet","ability":"Regenerator","evs":{"hp":244,"atk":0,"def":252,"spa":4,"spd":4,"spe":4},"nature":"Bold","moves":[["Scald"],["Psychic","Flamethrower","Iron Defense"],["Ice Beam"],["Slack Off"]],"ivs":{"atk":0}},{"species":"Slowbro","gender":"","item":"Assault Vest","ability":"Regenerator","evs":{"hp":244,"atk":0,"def":252,"spa":4,"spd":4,"spe":4},"nature":"Bold","moves":[["Scald"],["Psychic","Psyshock"],["Ice Beam"],["Flamethrower","Fire Blast"]],"ivs":{"atk":0}}]},"snorlax":{"flags":{},"sets":[{"species":"Snorlax","gender":"","item":"Figy Berry","ability":"Gluttony","evs":{"hp":212,"atk":0,"def":236,"spa":0,"spd":60,"spe":0},"nature":"Impish","moves":[["Recycle"],["Yawn","Toxic"],["Return","Heavy Slam"],["Whirlwind"]]},{"species":"Snorlax","gender":"","item":"Figy Berry","ability":"Gluttony","evs":{"hp":244,"atk":28,"def":236,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Recycle"],["Earthquake","Fire Punch"],["Return"],["Curse"]]},{"species":"Snorlax","gender":"","item":"Figy Berry","ability":"Gluttony","evs":{"hp":244,"atk":28,"def":236,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Recycle"],["Earthquake","Fire Punch"],["Return"],["Belly Drum"]]}]},"steelix":{"flags":{"megaOnly":1},"sets":[{"species":"Steelix","gender":"","item":"Steelixite","ability":"Sturdy","evs":{"hp":244,"atk":148,"def":0,"spa":0,"spd":116,"spe":0},"nature":"Brave","moves":[["Gyro Ball"],["Earthquake"],["Curse"],["Rock Blast","Stone Edge"]],"ivs":{"spe":0}}]},"suicune":{"flags":{},"sets":[{"species":"Suicune","gender":"","item":"Chesto Berry","ability":"Pressure","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Scald"],["Ice Beam"],["Rest"]]},{"species":"Suicune","gender":"","item":"Rocky Helmet","ability":"Pressure","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Reflect"],["Scald"],["Ice Beam"],["Roar"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":156,"atk":0,"def":60,"spa":12,"spd":60,"spe":220},"nature":"Timid","moves":[["Toxic"],["Scald"],["Substitute"],["Protect"]]},{"species":"Suicune","gender":"","item":"Assault Vest","ability":"Pressure","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":0,"spe":4},"nature":"Modest","moves":[["Scald"],["Ice Beam"],["Mirror Coat"],["Icy Wind","Sheer Cold","Hidden Power Fire"]]}]},"tapubulu":{"flags":{},"sets":[{"species":"Tapu Bulu","gender":"","item":"Assault Vest","ability":"Grassy Surge","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Horn Leech"],["Wood Hammer"],["Nature's Madness","Superpower"],["Stone Edge","Rock Tomb"]]},{"species":"Tapu Bulu","gender":"","item":"Choice Band","ability":"Grassy Surge","evs":{"hp":116,"atk":252,"def":0,"spa":0,"spd":0,"spe":140},"nature":"Adamant","moves":[["Wood Hammer"],["Superpower"],["Zen Headbutt","Stone Edge"],["Horn Leech"]]},{"species":"Tapu Bulu","gender":"","item":"Leftovers","ability":"Grassy Surge","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Horn Leech"],["Substitute"],["Leech Seed"],["Protect","Disable"]]},{"species":"Tapu Bulu","gender":"","item":"Choice Scarf","ability":"Grassy Surge","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Horn Leech"],["Wood Hammer"],["Superpower","Zen Headbutt"],["Stone Edge","Rock Slide"]]}]},"tapufini":{"flags":{},"sets":[{"species":"Tapu Fini","gender":"","item":"Aguav Berry","ability":"Misty Surge","evs":{"hp":236,"atk":0,"def":212,"spa":28,"spd":20,"spe":12},"nature":"Bold","moves":[["Moonblast"],["Surf"],["Taunt"],["Nature's Madness"]],"ivs":{"atk":0}},{"species":"Tapu Fini","gender":"","item":"Tapunium Z","ability":"Misty Surge","evs":{"hp":236,"atk":0,"def":212,"spa":28,"spd":20,"spe":12},"nature":"Bold","moves":[["Moonblast"],["Surf","Hydro Pump","Brine"],["Taunt"],["Nature's Madness"]],"ivs":{"atk":0}},{"species":"Tapu Fini","gender":"","item":"Waterium Z","ability":"Misty Surge","evs":{"hp":236,"atk":0,"def":4,"spa":252,"spd":4,"spe":12},"nature":"Modest","moves":[["Hydro Pump"],["Moonblast"],["Nature's Madness"],["Taunt"]],"ivs":{"atk":0}},{"species":"Tapu Fini","gender":"","item":"Leftovers","ability":"Misty Surge","evs":{"hp":236,"atk":0,"def":4,"spa":252,"spd":4,"spe":12},"nature":"Modest","moves":[["Hydro Pump","Surf"],["Moonblast"],["Calm Mind"],["Taunt","Substitute","Hidden Power Fire"]],"ivs":{"atk":0}}]},"tapukoko":{"flags":{},"sets":[{"species":"Tapu Koko","gender":"","item":"Life Orb","ability":"Electric Surge","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch","U-turn"],["Thunderbolt"],["Dazzling Gleam"],["Grass Knot","Hidden Power Fire","Taunt"]],"ivs":{"atk":0}},{"species":"Tapu Koko","gender":"","item":"Electrium Z","ability":"Electric Surge","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch","U-turn"],["Thunderbolt"],["Dazzling Gleam"],["Grass Knot","Hidden Power Fire","Taunt","Calm Mind"]],"ivs":{"atk":0}},{"species":"Tapu Koko","gender":"","item":"Choice Specs","ability":"Electric Surge","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Dazzling Gleam"],["Grass Knot","Hidden Power Fire"]],"ivs":{"atk":0}},{"species":"Tapu Koko","gender":"","item":"Electrium Z","ability":"Electric Surge","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Wild Charge"],["Brave Bird"],["U-turn"],["Taunt"]]},{"species":"Tapu Koko","gender":"","item":"Electric Seed","ability":"Electric Surge","evs":{"hp":0,"atk":0,"def":68,"spa":196,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Thunderbolt"],["Dazzling Gleam"],["Roost"]],"ivs":{"atk":0}},{"species":"Tapu Koko","gender":"","item":"Light Clay","ability":"Electric Surge","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Timid","moves":[["Reflect"],["Light Screen"],["Volt Switch"],["Taunt"]],"ivs":{"atk":0}}]},"tapulele":{"flags":{},"sets":[{"species":"Tapu Lele","gender":"","item":"Choice Scarf","ability":"Psychic Surge","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Psychic"],["Moonblast"],["Shadow Ball"],["Hidden Power Fire","Focus Blast"]],"ivs":{"atk":0}},{"species":"Tapu Lele","gender":"","item":"Choice Specs","ability":"Psychic Surge","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic"],["Moonblast"],["Psyshock","Shadow Ball"],["Focus Blast","Hidden Power Fire"]],"ivs":{"atk":0}},{"species":"Tapu Lele","gender":"","item":"Fightinium Z","ability":"Psychic Surge","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic","Psyshock"],["Moonblast"],["Focus Blast"],["Calm Mind"]],"ivs":{"atk":0}},{"species":"Tapu Lele","gender":"","item":"Psychium Z","ability":"Psychic Surge","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic"],["Moonblast"],["Focus Blast","Shadow Ball","Hidden Power Fire"],["Calm Mind","Taunt"]],"ivs":{"atk":0}},{"species":"Tapu Lele","gender":"","item":"Assault Vest","ability":"Psychic Surge","evs":{"hp":92,"atk":0,"def":0,"spa":252,"spd":164,"spe":0},"nature":"Modest","moves":[["Psychic"],["Moonblast"],["Shadow Ball"],["Focus Blast","Hidden Power Fire"]],"ivs":{"atk":0}}]},"terrakion":{"flags":{},"sets":[{"species":"Terrakion","gender":"","item":"Focus Sash","ability":"Justified","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Rock Tomb"],["Stealth Rock"],["Stone Edge","Taunt","Quick Attack"]]},{"species":"Terrakion","gender":"","item":"Rockium Z","ability":"Justified","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Stone Edge"],["Swords Dance"],["Quick Attack","Earthquake","Poison Jab"]]}]},"thundurus":{"flags":{},"sets":[{"species":"Thundurus","gender":"","item":"Electrium Z","ability":"Prankster","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Nasty Plot","Thunder Wave","Taunt"],["Focus Blast","Grass Knot","Volt Switch"]],"ivs":{"atk":0}},{"species":"Thundurus","gender":"","item":"Fightinium Z","ability":"Prankster","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"],["Nasty Plot"]],"ivs":{"atk":0}},{"species":"Thundurus","gender":"","item":"Sitrus Berry","ability":"Prankster","evs":{"hp":244,"atk":0,"def":168,"spa":68,"spd":0,"spe":28},"nature":"Bold","moves":[["Thunder Wave"],["Thunderbolt"],["Hidden Power Ice"],["Taunt","Volt Switch"]]},{"species":"Thundurus","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":244,"atk":0,"def":28,"spa":4,"spd":204,"spe":28},"nature":"Calm","moves":[["Discharge"],["Toxic"],["Substitute"],["Protect"]],"ivs":{"atk":0}},{"species":"Thundurus","gender":"","item":"Salac Berry","ability":"Prankster","evs":{"hp":140,"atk":0,"def":12,"spa":164,"spd":4,"spe":188},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Substitute"],["Nasty Plot"]],"ivs":{"atk":0}},{"species":"Thundurus-Therian","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Hidden Power Ice"],["Focus Blast","Sludge Wave","Grass Knot"]],"ivs":{"atk":0}},{"species":"Thundurus-Therian","gender":"","item":"Choice Scarf","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Hidden Power Ice"],["Focus Blast","Sludge Wave"]],"ivs":{"atk":0}},{"species":"Thundurus-Therian","gender":"","item":"Fightinium Z","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Nasty Plot"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":0}},{"species":"Thundurus-Therian","gender":"","item":"Electrium Z","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Nasty Plot","Agility"],["Hidden Power Ice"],["Focus Blast","Sludge Wave","Grass Knot"]],"ivs":{"atk":0}}]},"togekiss":{"flags":{},"sets":[{"species":"Togekiss","gender":"","item":"Choice Scarf","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Air Slash"],["Fire Blast","Flamethrower"],["Aura Sphere","Ancient Power"],["Trick"]],"ivs":{"atk":0}},{"species":"Togekiss","gender":"","item":"Normalium Z","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Yawn"],["Air Slash"],["Nasty Plot"],["Flamethrower"]],"ivs":{"atk":0}},{"species":"Togekiss","gender":"","item":"Sitrus Berry","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":0,"spe":4},"nature":"Bold","moves":[["Thunder Wave"],["Roost"],["Air Slash"],["Nasty Plot","Flamethrower"]],"ivs":{"atk":0}},{"species":"Togekiss","gender":"","item":"Firium Z","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Nasty Plot"],["Air Slash"],["Thunder Wave","Yawn"]],"ivs":{"atk":0}}]},"toxapex":{"flags":{},"sets":[{"species":"Toxapex","gender":"","item":"Black Sludge","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":244,"spa":0,"spd":12,"spe":0},"nature":"Bold","moves":[["Scald"],["Toxic","Baneful Bunker","Toxic Spikes"],["Recover"],["Haze"]],"ivs":{"atk":0}},{"species":"Toxapex","gender":"","item":"Rocky Helmet","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":244,"spa":0,"spd":12,"spe":0},"nature":"Bold","moves":[["Scald"],["Toxic","Baneful Bunker","Toxic Spikes"],["Recover"],["Haze"]],"ivs":{"atk":0}},{"species":"Toxapex","gender":"","item":"Black Sludge","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Scald"],["Toxic","Baneful Bunker","Toxic Spikes"],["Recover"],["Haze"]],"ivs":{"atk":0}}]},"tyranitar":{"flags":{},"sets":[{"species":"Tyranitar","gender":"","item":"Rocky Helmet","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Ice Beam"],["Foul Play"],["Flamethrower","Fire Blast"]]},{"species":"Tyranitar","gender":"","item":"Rockium Z","ability":"Sand Stream","evs":{"hp":172,"atk":148,"def":84,"spa":100,"spd":0,"spe":4},"nature":"Brave","moves":[["Stealth Rock"],["Stone Edge"],["Fire Blast"],["Ice Beam"]]},{"species":"Tyranitar","gender":"","item":"Lum Berry","ability":"Sand Stream","evs":{"hp":252,"atk":44,"def":4,"spa":0,"spd":204,"spe":4},"nature":"Careful","moves":[["Foul Play","Rock Slide"],["Pursuit"],["Roar","Rock Tomb"],["Stealth Rock"]]},{"species":"Tyranitar","gender":"","item":"Expert Belt","ability":"Sand Stream","evs":{"hp":252,"atk":4,"def":100,"spa":20,"spd":132,"spe":0},"nature":"Sassy","moves":[["Rock Tomb"],["Ice Beam"],["Fire Blast"],["Roar","Stealth Rock"]]},{"species":"Tyranitar","gender":"","item":"Lum Berry","ability":"Sand Stream","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Crunch"],["Stone Edge","Rock Slide"],["Ice Punch","Earthquake","Fire Punch"]]},{"species":"Tyranitar","gender":"","item":"Choice Band","ability":"Sand Stream","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Crunch"],["Stone Edge"],["Ice Punch","Earthquake","Pursuit"],["Superpower","Fire Punch"]]},{"species":"Tyranitar","gender":"","item":"Choice Scarf","ability":"Sand Stream","evs":{"hp":0,"atk":132,"def":0,"spa":180,"spd":0,"spe":196},"nature":"Naive","moves":[["Rock Slide","Stone Edge"],["Ice Beam"],["Fire Blast","Superpower"],["Crunch","Rock Tomb","Earthquake"]]},{"species":"Tyranitar","gender":"","item":"Assault Vest","ability":"Sand Stream","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Crunch"],["Stone Edge"],["Ice Punch","Earthquake","Pursuit"],["Superpower","Fire Punch"]]}]},"umbreon":{"flags":{},"sets":[{"species":"Umbreon","gender":"","item":"Normalium Z","ability":"Synchronize","evs":{"hp":252,"atk":0,"def":156,"spa":0,"spd":0,"spe":100},"nature":"Bold","moves":[["Celebrate"],["Baton Pass"],["Taunt","Yawn"],["Foul Play","Substitute","Double Team"]],"ivs":{"atk":0}},{"species":"Umbreon","gender":"","item":"Leftovers","ability":"Inner Focus","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Toxic","Yawn"],["Wish","Moonlight"],["Protect"]],"ivs":{"atk":0}},{"species":"Umbreon","gender":"","item":"Rocky Helmet","ability":"Synchronize","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Heal Bell"],["Toxic"],["Moonlight"]],"ivs":{"atk":0}}]},"venusaur":{"flags":{"megaOnly":1},"sets":[{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Sludge Bomb"],["Giga Drain","Hidden Power Fire"],["Synthesis"],["Leech Seed","Sleep Powder"]],"ivs":{"atk":0}},{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Sludge Bomb"],["Giga Drain"],["Synthesis"],["Hidden Power Fire","Sleep Powder"]],"ivs":{"atk":0}},{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":252,"spe":4},"nature":"Calm","moves":[["Sludge Bomb"],["Leech Seed"],["Synthesis"],["Giga Drain"]],"ivs":{"atk":0}},{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":140,"atk":0,"def":4,"spa":252,"spd":4,"spe":108},"nature":"Modest","moves":[["Sludge Bomb"],["Leech Seed","Giga Drain"],["Hidden Power Fire"],["Synthesis"]],"ivs":{"atk":0}}]},"volcarona":{"flags":{},"sets":[{"species":"Volcarona","gender":"","item":"Flyinium Z","ability":"Flame Body","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Quiver Dance"],["Hurricane"],["Flamethrower","Fire Blast","Fiery Dance"],["Hidden Power Ground"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Buginium Z","ability":"Swarm","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Bug Buzz"],["Substitute"],["Fiery Dance"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Focus Sash","ability":"Flame Body","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Quiver Dance"],["Fiery Dance","Fire Blast"],["Giga Drain"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Focus Sash","ability":"Swarm","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Fiery Dance","Fire Blast"],["Bug Buzz"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Grassium Z","ability":"Flame Body","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Quiver Dance"],["Giga Drain","Solar Beam"],["Fiery Dance","Fire Blast"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Firium Z","ability":"Flame Body","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Quiver Dance"],["Fire Blast","Overheat"],["Giga Drain","Bug Buzz"],["Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Kee Berry","ability":"Flame Body","evs":{"hp":244,"atk":0,"def":148,"spa":0,"spd":0,"spe":116},"nature":"Bold","moves":[["Flamethrower","Fire Blast"],["Quiver Dance"],["Roost"],["Will-O-Wisp"]],"ivs":{"atk":0}},{"species":"Volcarona","gender":"","item":"Normalium Z","ability":"Flame Body","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Hyper Beam"],["Fiery Dance","Fire Blast"],["Giga Drain","Bug Buzz"]],"ivs":{"atk":0}}]},"weavile":{"flags":{},"sets":[{"species":"Weavile","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Low Kick"],["Ice Shard"],["Fake Out"]]},{"species":"Weavile","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Low Kick","Icicle Crash"],["Ice Shard"],["Fake Out"]]}]},"whimsicott":{"flags":{},"sets":[{"species":"Whimsicott","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Leech Seed"],["Substitute"],["Encore"],["Protect","Moonblast","Taunt"]]},{"species":"Whimsicott","gender":"","item":"Rocky Helmet","ability":"Prankster","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Leech Seed"],["Cotton Guard"],["Encore","Substitute"],["Protect","Moonblast","Taunt"]]},{"species":"Whimsicott","gender":"","item":"Focus Sash","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Charm","Endeavor"],["Light Screen","Encore"],["Memento","Tailwind"],["Moonblast"]]},{"species":"Whimsicott","gender":"","item":"Darkinium Z","ability":"Prankster","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Timid","moves":[["Memento"],["Encore"],["Taunt","Moonblast"],["Leech Seed","Tailwind"]]}]},"xurkitree":{"flags":{},"sets":[{"species":"Xurkitree","gender":"","item":"Choice Scarf","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Energy Ball"],["Volt Switch"]],"ivs":{"atk":0}},{"species":"Xurkitree","gender":"","item":"Psychium Z","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hypnosis"],["Tail Glow"],["Thunderbolt"],["Energy Ball","Hidden Power Ice"]],"ivs":{"atk":0}},{"species":"Xurkitree","gender":"","item":"Waterium Z","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Rain Dance"],["Thunder"],["Hidden Power Water"],["Energy Ball","Dazzling Gleam"]],"ivs":{"atk":0}},{"species":"Xurkitree","gender":"","item":"Electrium Z","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Thunderbolt","Thunder"],["Hidden Power Ice"],["Energy Ball"],["Volt Switch","Tail Glow"]],"ivs":{"atk":0}},{"species":"Xurkitree","gender":"","item":"Shuca Berry","ability":"Beast Boost","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Thunderbolt"],["Hidden Power Ice"],["Energy Ball"],["Volt Switch","Tail Glow"]],"ivs":{"atk":0}}]},"zapdos":{"flags":{},"sets":[{"species":"Zapdos","gender":"","item":"Rocky Helmet","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Roost"],["Discharge","Volt Switch"],["Heat Wave","Toxic"],["Hidden Power Ice"]]},{"species":"Zapdos","gender":"","item":"Choice Scarf","ability":"Static","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Heat Wave"],["Hidden Power Ice"]]},{"species":"Zapdos","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Roost"],["Discharge","Volt Switch"],["Heat Wave","Toxic"],["Hidden Power Ice"]]}]}}} +{ + "aegislash": { + "flags": {}, + "sets": [{ + "species": "Aegislash", + "item": "Weakness Policy", + "ability": "Stance Change", + "evs": {"hp": 252, "atk": 4, "spa": 252}, + "ivs": {"spe": 0}, + "nature": "Quiet", + "moves": [["King's Shield"], ["Shadow Ball"], ["Flash Cannon", "Sacred Sword"], ["Shadow Sneak"]] + }, { + "species": "Aegislash", + "item": "Ghostium Z", + "ability": "Stance Change", + "evs": {"hp": 252, "atk": 4, "spa": 252}, + "ivs": {"spe": 0}, + "nature": "Quiet", + "moves": [["King's Shield"], ["Shadow Ball"], ["Flash Cannon", "Sacred Sword"], ["Shadow Sneak"]] + }, { + "species": "Aegislash", + "item": "Life Orb", + "ability": "Stance Change", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance", "King's Shield"], ["Shadow Claw"], ["Sacred Sword", "Iron Head"], ["Shadow Sneak"]] + }, { + "species": "Aegislash", + "item": "Ghostium Z", + "ability": "Stance Change", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Brave", + "moves": [["Swords Dance", "King's Shield"], ["Shadow Claw"], ["Sacred Sword"], ["Shadow Sneak"]] + }, { + "species": "Aegislash", + "item": "Focus Sash", + "ability": "Stance Change", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Rash", + "moves": [["Shadow Ball"], ["Flash Cannon"], ["Hidden Power Ice", "Head Smash"], ["Shadow Sneak"]] + }, { + "species": "Aegislash", + "item": "Leftovers", + "ability": "Stance Change", + "evs": {"hp": 220, "spa": 196, "spe": 92}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["King's Shield", "Hidden Power Ice", "Hidden Power Fire"], ["Toxic"], ["Substitute"], ["Shadow Ball"]] + }] + }, + "alakazam": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Alakazam", + "item": "Alakazite", + "ability": "Magic Guard", + "evs": {"hp": 244, "spa": 12, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Substitute"], ["Protect"], ["Disable"]] + }, { + "species": "Alakazam", + "item": "Alakazite", + "ability": "Magic Guard", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic", "Psyshock"], ["Focus Blast"], ["Shadow Ball"], ["Hidden Power Ice"]] + }] + }, + "altaria": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Altaria", + "item": "Altarianite", + "ability": "Natural Cure", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Return"], ["Earthquake"], ["Roost"]] + }, { + "species": "Altaria", + "item": "Altarianite", + "ability": "Natural Cure", + "evs": {"hp": 252, "def": 52, "spa": 76, "spd": 124, "spe": 4}, + "nature": "Modest", + "moves": [["Hyper Voice"], ["Roost"], ["Fire Blast", "Cotton Guard"], ["Toxic", "Perish Song"]] + }] + }, + "amoonguss": { + "flags": {}, + "sets": [{ + "species": "Amoonguss", + "item": "Black Sludge", + "ability": "Regenerator", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Spore"], ["Giga Drain"], ["Sludge Bomb", "Foul Play", "Clear Smog"], ["Synthesis", "Hidden Power Fire"]] + }, { + "species": "Amoonguss", + "item": "Rocky Helmet", + "ability": "Regenerator", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Spore"], ["Giga Drain"], ["Sludge Bomb", "Foul Play", "Clear Smog"], ["Synthesis", "Hidden Power Fire"]] + }] + }, + "araquanid": { + "flags": {}, + "sets": [{ + "species": "Araquanid", + "item": "Waterium Z", + "ability": "Water Bubble", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Leech Life", "Lunge"], ["Mirror Coat"], ["Sticky Web"]] + }, { + "species": "Araquanid", + "item": "Assault Vest", + "ability": "Water Bubble", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Leech Life", "Lunge"], ["Mirror Coat"], ["Poison Jab"]] + }, { + "species": "Araquanid", + "item": "Choice Band", + "ability": "Water Bubble", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Leech Life", "Lunge"], ["Crunch", "Sleep Talk"], ["Poison Jab"]] + }, { + "species": "Araquanid", + "item": "Choice Specs", + "ability": "Water Bubble", + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Surf", "Scald"], ["Ice Beam"], ["Hidden Power Fire"], ["Toxic", "Sleep Talk"]] + }] + }, + "arcanine": { + "flags": {}, + "sets": [{ + "species": "Arcanine", + "item": "Firium Z", + "ability": "Intimidate", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Flare Blitz"], ["Extreme Speed"], ["Close Combat", "Bulldoze"], ["Wild Charge", "Flame Charge", "Will-O-Wisp"]] + }, { + "species": "Arcanine", + "item": "Rocky Helmet", + "ability": "Intimidate", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Will-O-Wisp"], ["Morning Sun"], ["Flamethrower", "Burn Up"], ["Snarl"]] + }] + }, + "aron": { + "flags": {}, + "sets": [{ + "species": "Aron", + "item": "Berry Juice", + "ability": "Sturdy", + "ivs": {"hp": 0, "atk": 0, "def": 0, "spa": 0, "spd": 0, "spe": 0}, + "nature": "Gentle", + "level": 1, + "moves": [["Stealth Rock"], ["Endeavor"], ["Toxic"], ["Protect"]] + }] + }, + "azumarill": { + "flags": {}, + "sets": [{ + "species": "Azumarill", + "item": "Sitrus Berry", + "ability": "Huge Power", + "evs": {"hp": 228, "atk": 252, "def": 12, "spd": 12, "spe": 4}, + "nature": "Adamant", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Liquidation", "Superpower", "Knock Off"]] + }, { + "species": "Azumarill", + "item": "Normalium Z", + "ability": "Huge Power", + "evs": {"hp": 228, "atk": 252, "def": 12, "spd": 12, "spe": 4}, + "nature": "Adamant", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Liquidation", "Superpower", "Knock Off"]] + }, { + "species": "Azumarill", + "item": "Choice Band", + "ability": "Huge Power", + "evs": {"hp": 228, "atk": 252, "def": 12, "spd": 12, "spe": 4}, + "nature": "Adamant", + "moves": [["Aqua Jet"], ["Play Rough"], ["Liquidation"], ["Superpower", "Knock Off"]] + }, { + "species": "Azumarill", + "item": "Assault Vest", + "ability": "Huge Power", + "evs": {"hp": 124, "atk": 252, "def": 12, "spd": 28, "spe": 92}, + "nature": "Adamant", + "moves": [["Aqua Jet"], ["Play Rough"], ["Liquidation"], ["Superpower", "Knock Off"]] + }] + }, + "beedrill": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Beedrill", + "item": "Beedrillite", + "ability": "Swarm", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["U-turn"], ["Poison Jab"], ["Drill Run"], ["Knock Off", "Swords Dance", "Fell Stinger"]] + }] + }, + "pidgeot": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Pidgeot", + "item": "Pidgeotite", + "ability": "Big Pecks", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Heat Wave"], ["Hidden Power Ground", "Hidden Power Ice"], ["U-turn", "Roost", "Substitute", "Hyper Beam", "Uproar"]] + }] + }, + "blastoise": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Blastoise", + "item": "Blastoisinite", + "ability": "Torrent", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Water Pulse", "Hydro Pump", "Scald"], ["Ice Beam"], ["Dark Pulse", "Aqua Jet", "Mirror Coat"], ["Aura Sphere"]] + }] + }, + "blacephalon": { + "flags": { + "zmoveOnly": 1 + }, + "sets": [{ + "species": "Blacephalon", + "item": "Firium Z", + "ability": "Beast Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Mind Blown"], ["Shadow Ball"], ["Hidden Power Ice"], ["Flamethrower", "Fire Blast", "Calm Mind"]] + }, { + "species": "Blacephalon", + "item": "Ghostium Z", + "ability": "Beast Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Mind Blown"], ["Shadow Ball"], ["Hidden Power Ice"], ["Flamethrower", "Fire Blast"]] + }, { + "species": "Blacephalon", + "item": "Life Orb", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Flamethrower", "Fire Blast"], ["Shadow Ball"], ["Substitute"], ["Pain Split"]] + }, { + "species": "Blacephalon", + "item": "Mago Berry", + "ability": "Beast Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Mind Blown"], ["Shadow Ball"], ["Substitute"], ["Calm Mind"]] + }, { + "species": "Blacephalon", + "item": "Focus Sash", + "ability": "Beast Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Shadow Ball"], ["Hidden Power Ice"], ["Flamethrower", "Fire Blast"], ["Flame Charge"]] + }, { + "species": "Blacephalon", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Mind Blown", "Trick"], ["Shadow Ball"], ["Hidden Power Ice"], ["Flamethrower", "Fire Blast"]] + }] + }, + "blaziken": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Blaziken", + "item": "Life Orb", + "ability": "Speed Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Protect"], ["High Jump Kick"], ["Flare Blitz"], ["Swords Dance", "Stone Edge", "Thunder Punch"]] + }, { + "species": "Blaziken", + "item": "Life Orb", + "ability": "Speed Boost", + "evs": {"atk": 52, "spa": 244, "spe": 212}, + "nature": "Naive", + "moves": [["Protect"], ["Overheat"], ["Superpower", "High Jump Kick"], ["Hidden Power Ice"]] + }, { + "species": "Blaziken", + "item": "Grassium Z", + "ability": "Speed Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Protect"], ["Solar Beam"], ["Hidden Power Ice", "Focus Blast"], ["Flamethrower", "Fire Blast", "Overheat"]] + }, { + "species": "Blaziken", + "item": "Weakness Policy", + "ability": "Speed Boost", + "evs": {"hp": 252, "def": 164, "spe": 92}, + "nature": "Impish", + "moves": [["Substitute"], ["Bulk Up"], ["Baton Pass"], ["High Jump Kick"]] + }, { + "species": "Blaziken", + "item": "Firium Z", + "ability": "Speed Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Protect"], ["High Jump Kick"], ["Flare Blitz"], ["Baton Pass", "Stone Edge", "Thunder Punch", "Will-O-Wisp"]] + }, { + "species": "Blaziken", + "item": "Blazikenite", + "ability": "Speed Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Flare Blitz"], ["High Jump Kick"], ["Stone Edge", "Swords Dance"], ["Protect"]] + }] + }, + "blissey": { + "flags": {}, + "sets": [{ + "species": "Blissey", + "item": "Leftovers", + "ability": "Natural Cure", + "evs": {"def": 252, "spa": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Toxic"], ["Soft-Boiled"], ["Seismic Toss", "Flamethrower"], ["Stealth Rock", "Shadow Ball", "Ice Beam"]] + }, { + "species": "Blissey", + "item": "Leftovers", + "ability": "Serene Grace", + "evs": {"def": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Charge Beam", "Minimize"], ["Flamethrower", "Ice Beam"], ["Soft-Boiled"], ["Substitute", "Toxic"]] + }, { + "species": "Blissey", + "item": "Rocky Helmet", + "ability": "Natural Cure", + "evs": {"def": 252, "spa": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Toxic"], ["Soft-Boiled"], ["Seismic Toss", "Flamethrower"], ["Stealth Rock", "Shadow Ball", "Ice Beam"]] + }] + }, + "breloom": { + "flags": {}, + "sets": [{ + "species": "Breloom", + "item": "Focus Sash", + "ability": "Technician", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Spore"], ["Mach Punch"], ["Bullet Seed"], ["Rock Tomb", "Swords Dance"]] + }, { + "species": "Breloom", + "item": "Life Orb", + "ability": "Technician", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Spore"], ["Mach Punch"], ["Bullet Seed"], ["Rock Tomb"]] + }, { + "species": "Breloom", + "item": "Toxic Orb", + "ability": "Poison Heal", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Spore"], ["Substitute"], ["Focus Punch"], ["Rock Tomb"]] + }, { + "species": "Breloom", + "item": "Choice Scarf", + "ability": "Technician", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Superpower"], ["Bullet Seed"], ["Rock Tomb"], ["Mach Punch"]] + }] + }, + "bronzong": { + "flags": {}, + "sets": [{ + "species": "Bronzong", + "item": "Occa Berry", + "ability": "Levitate", + "evs": {"hp": 252, "atk": 20, "def": 4, "spa": 4, "spd": 228}, + "ivs": {"atk": 0}, + "nature": "Sassy", + "moves": [["Trick Room"], ["Stealth Rock", "Hidden Power Ice"], ["Gyro Ball"], ["Explosion"]] + }, { + "species": "Bronzong", + "item": "Rocky Helmet", + "ability": "Levitate", + "evs": {"hp": 252, "atk": 20, "def": 228, "spa": 4, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Relaxed", + "moves": [["Trick Room"], ["Stealth Rock", "Hidden Power Ice"], ["Gyro Ball"], ["Explosion"]] + }, { + "species": "Bronzong", + "item": "Psychium Z", + "ability": "Levitate", + "evs": {"hp": 252, "atk": 4, "spa": 252}, + "ivs": {"atk": 0}, + "nature": "Quiet", + "moves": [["Hypnosis"], ["Trick Room"], ["Dream Eater"], ["Gyro Ball", "Hidden Power Ice"]] + }] + }, + "buzzwole": { + "flags": {}, + "sets": [{ + "species": "Buzzwole", + "item": "Rocky Helmet", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Impish", + "moves": [["Leech Life", "Lunge"], ["Roost"], ["Earthquake", "Toxic"], ["Ice Punch"]] + }, { + "species": "Buzzwole", + "item": "Assault Vest", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Leech Life", "Lunge"], ["Superpower", "Hammer Arm"], ["Earthquake", "Thunder Punch"], ["Ice Punch"]] + }, { + "species": "Buzzwole", + "item": "Fightinium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Leech Life"], ["Superpower"], ["Earthquake", "Thunder Punch"], ["Ice Punch"]] + }, { + "species": "Buzzwole", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Leech Life"], ["Superpower"], ["Earthquake", "Thunder Punch"], ["Ice Punch"]] + }] + }, + "celesteela": { + "flags": {}, + "sets": [{ + "species": "Celesteela", + "item": "Rocky Helmet", + "ability": "Beast Boost", + "evs": {"hp": 244, "atk": 4, "def": 252, "spa": 4, "spd": 4}, + "nature": "Relaxed", + "moves": [["Heavy Slam"], ["Leech Seed"], ["Flamethrower"], ["Protect"]] + }, { + "species": "Celesteela", + "item": "Leftovers", + "ability": "Beast Boost", + "evs": {"hp": 244, "atk": 4, "def": 4, "spa": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Heavy Slam"], ["Leech Seed"], ["Flamethrower"], ["Protect"]] + }, { + "species": "Celesteela", + "item": "Leftovers", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Heavy Slam"], ["Leech Seed"], ["Flame Charge", "Substitute"], ["Protect"]] + }, { + "species": "Celesteela", + "item": "", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Autotomize"], ["Acrobatics"], ["Heavy Slam"], ["Earthquake"]] + }, { + "species": "Celesteela", + "item": "Assault Vest", + "ability": "Beast Boost", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Flash Cannon"], ["Flamethrower"], ["Hidden Power Ice"], ["Air Slash"]] + }, { + "species": "Celesteela", + "item": "Assault Vest", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "spe": 4}, + "nature": "Adamant", + "moves": [["Heavy Slam"], ["Earthquake"], ["Rock Slide"], ["Flame Charge"]] + }, { + "species": "Celesteela", + "item": "Choice Band", + "ability": "Beast Boost", + "evs": {"hp": 244, "atk": 252, "def": 4, "spd": 4, "spe": 4}, + "nature": "Adamant", + "moves": [["Heavy Slam"], ["Explosion"], ["Stone Edge"], ["Earthquake"]] + }, { + "species": "Celesteela", + "item": "Flyinium Z", + "ability": "Beast Boost", + "evs": {"hp": 244, "atk": 244, "def": 4, "spd": 4, "spe": 12}, + "nature": "Adamant", + "moves": [["Fly"], ["Heavy Slam"], ["Earthquake"], ["Explosion"]] + }] + }, + "chandelure": { + "flags": {}, + "sets": [{ + "species": "Chandelure", + "item": "Focus Sash", + "ability": "Flash Fire", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Trick Room"], ["Shadow Ball"], ["Fire Blast", "Overheat"], ["Memento"]] + }, { + "species": "Chandelure", + "item": "Choice Scarf", + "ability": "Infiltrator", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Fire Blast", "Overheat"], ["Hidden Power Ice"], ["Energy Ball", "Memento"]] + }, { + "species": "Chandelure", + "item": "Focus Sash", + "ability": "Infiltrator", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Fire Blast"], ["Shadow Ball"], ["Energy Ball"], ["Hidden Power Ice"]] + }] + }, + "chansey": { + "flags": {}, + "sets": [{ + "species": "Chansey", + "gender": "F", + "item": "Eviolite", + "ability": "Natural Cure", + "evs": {"hp": 44, "def": 252, "spd": 212}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Seismic Toss"], ["Toxic"], ["Soft-Boiled"], ["Stealth Rock", "Thunder Wave", "Minimize"]] + }] + }, + "charizard": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Charizard", + "item": "Charizardite X", + "ability": "Blaze", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Flare Blitz"], ["Outrage", "Dragon Claw"], ["Earthquake", "Roost"]] + }, { + "species": "Charizard", + "item": "Charizardite X", + "ability": "Blaze", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Flame Charge"], ["Outrage", "Dragon Claw"], ["Flare Blitz"]] + }, { + "species": "Charizard", + "item": "Charizardite X", + "ability": "Blaze", + "evs": {"hp": 204, "def": 164, "spe": 140}, + "nature": "Jolly", + "moves": [["Will-O-Wisp"], ["Roost"], ["Flame Charge"], ["Dragon Claw"]] + }, { + "species": "Charizard", + "item": "Charizardite Y", + "ability": "Blaze", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast", "Overheat", "Flamethrower"], ["Solar Beam"], ["Hidden Power Ice", "Focus Blast"], ["Flame Charge"]] + }, { + "species": "Charizard", + "item": "Charizardite Y", + "ability": "Blaze", + "evs": {"hp": 252, "def": 116, "spa": 100, "spd": 4, "spe": 36}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Flamethrower"], ["Overheat"], ["Hidden Power Ice"], ["Solar Beam"]] + }] + }, + "clefable": { + "flags": {}, + "sets": [{ + "species": "Clefable", + "item": "Kee Berry", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Minimize"], ["Moonblast", "Stored Power"], ["Moonlight"]] + }, { + "species": "Clefable", + "item": "Rocky Helmet", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Thunder Wave"], ["Moonblast"], ["Moonlight"]] + }] + }, + "cloyster": { + "flags": {}, + "sets": [{ + "species": "Cloyster", + "item": "Focus Sash", + "ability": "Skill Link", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Ice Shard"]] + }, { + "species": "Cloyster", + "item": "King's Rock", + "ability": "Skill Link", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Ice Shard"]] + }, { + "species": "Cloyster", + "item": "Waterium Z", + "ability": "Skill Link", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Liquidation"]] + }] + }, + "conkeldurr": { + "flags": {}, + "sets": [{ + "species": "Conkeldurr", + "item": "Assault Vest", + "ability": "Iron Fist", + "evs": {"hp": 156, "atk": 252, "spd": 100}, + "ivs": {"spe": 15}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Thunder Punch", "Poison Jab", "Knock Off"]] + }, { + "species": "Conkeldurr", + "item": "Assault Vest", + "ability": "Guts", + "evs": {"hp": 156, "atk": 252, "spd": 100}, + "ivs": {"spe": 15}, + "nature": "Adamant", + "moves": [["Mach Punch"], ["Drain Punch"], ["Knock Off"], ["Ice Punch", "Poison Jab"]] + }, { + "species": "Conkeldurr", + "item": "Life Orb", + "ability": "Sheer Force", + "evs": {"hp": 84, "atk": 252, "spd": 172}, + "ivs": {"spe": 15}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Mach Punch"], ["Ice Punch"], ["Thunder Punch", "Knock Off", "Poison Jab"]] + }] + }, + "cresselia": { + "flags": {}, + "sets": [{ + "species": "Cresselia", + "item": "Rocky Helmet", + "ability": "Levitate", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Moonlight"], ["Ice Beam"], ["Toxic", "Thunder Wave"], ["Psychic"]] + }, { + "species": "Cresselia", + "item": "Mago Berry", + "ability": "Levitate", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Moonlight"], ["Ice Beam", "Psychic"], ["Lunar Dance"], ["Trick Room"]] + }, { + "species": "Cresselia", + "item": "Leftovers", + "ability": "Levitate", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Moonlight"], ["Psychic", "Psyshock"], ["Calm Mind"], ["Moonblast", "Ice Beam", "Substitute"]] + }, { + "species": "Cresselia", + "item": "Flame Orb", + "ability": "Levitate", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Psycho Shift"], ["Toxic"], ["Moonlight"], ["Psychic", "Ice Beam", "Moonblast"]] + }] + }, + "ditto": { + "flags": {}, + "sets": [{ + "species": "Ditto", + "item": "Focus Sash", + "ability": "Imposter", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Transform"]] + }, { + "species": "Ditto", + "item": "Choice Scarf", + "ability": "Imposter", + "evs": {"hp": 252, "atk": 4, "def": 4, "spd": 248}, + "ivs": {"def": 30, "spd": 30, "spe": 0}, + "nature": "Sassy", + "moves": [["Transform"]] + }, { + "species": "Ditto", + "item": "Choice Scarf", + "ability": "Imposter", + "evs": {"hp": 252, "atk": 4, "def": 4, "spd": 248}, + "ivs": {"spa": 0, "spd": 30, "spe": 1}, + "nature": "Sassy", + "moves": [["Transform"]] + }] + }, + "dragonite": { + "flags": {}, + "sets": [{ + "species": "Dragonite", + "item": "Choice Band", + "ability": "Multiscale", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Outrage"], ["Earthquake"], ["Extreme Speed"], ["Fire Punch", "Thunder Punch"]] + }, { + "species": "Dragonite", + "item": "Lum Berry", + "ability": "Multiscale", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Outrage"], ["Earthquake", "Fire Punch"], ["Extreme Speed"]] + }, { + "species": "Dragonite", + "item": "Flyinium Z", + "ability": "Multiscale", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Outrage"], ["Fly"], ["Earthquake", "Extreme Speed"]] + }, { + "species": "Dragonite", + "item": "Dragonium Z", + "ability": "Multiscale", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Outrage"], ["Extreme Speed"], ["Earthquake", "Fire Punch"]] + }] + }, + "eevee": { + "flags": { + "limEevee": 1 + }, + "sets": [{ + "species": "Eevee", + "item": "Eevium Z", + "ability": "Anticipation", + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Last Resort"], ["Baton Pass"], ["Substitute"], ["Stored Power"]] + }] + }, + "entei": { + "flags": {}, + "sets": [{ + "species": "Entei", + "item": "Assault Vest", + "ability": "Pressure", + "evs": {"hp": 132, "atk": 252, "def": 52, "spd": 52, "spe": 20}, + "nature": "Adamant", + "moves": [["Sacred Fire"], ["Stone Edge"], ["Bulldoze"], ["Flame Charge"]] + }, { + "species": "Entei", + "item": "Choice Band", + "ability": "Pressure", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Sacred Fire"], ["Stone Edge"], ["Bulldoze"], ["Iron Head"]] + }, { + "species": "Entei", + "item": "Leftovers", + "ability": "Pressure", + "evs": {"hp": 20, "atk": 228, "def": 4, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Substitute"], ["Protect"], ["Toxic"], ["Sacred Fire"]] + }] + }, + "espeon": { + "flags": {}, + "sets": [{ + "species": "Espeon", + "item": "Light Clay", + "ability": "Magic Bounce", + "evs": {"hp": 236, "def": 44, "spa": 4, "spd": 4, "spe": 220}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Yawn"], ["Psychic"], ["Reflect"], ["Light Screen"]] + }, { + "species": "Espeon", + "item": "Psychium Z", + "ability": "Magic Bounce", + "evs": {"hp": 84, "spa": 196, "spe": 228}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Future Sight"], ["Calm Mind"], ["Morning Sun", "Dazzling Gleam"]] + }, { + "species": "Espeon", + "item": "Kee Berry", + "ability": "Magic Bounce", + "evs": {"hp": 196, "def": 36, "spa": 4, "spd": 52, "spe": 220}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic", "Psyshock", "Stored Power"], ["Calm Mind"], ["Morning Sun"], ["Dazzling Gleam"]] + }] + }, + "excadrill": { + "flags": {}, + "sets": [{ + "species": "Excadrill", + "item": "Choice Scarf", + "ability": "Mold Breaker", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Horn Drill"]] + }, { + "species": "Excadrill", + "item": "Groundium Z", + "ability": "Sand Rush", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Swords Dance"]] + }, { + "species": "Excadrill", + "item": "Focus Sash", + "ability": "Mold Breaker", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Rock Tomb"], ["Earthquake"], ["Iron Head"]] + }, { + "species": "Excadrill", + "item": "Assault Vest", + "ability": "Mold Breaker", + "evs": {"hp": 44, "atk": 156, "def": 4, "spd": 84, "spe": 220}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Iron Head"], ["Rock Tomb"], ["Horn Drill"]] + }] + }, + "ferrothorn": { + "flags": {}, + "sets": [{ + "species": "Ferrothorn", + "item": "Rocky Helmet", + "ability": "Iron Barbs", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"spe": 0}, + "nature": "Relaxed", + "moves": [["Gyro Ball"], ["Power Whip"], ["Leech Seed"], ["Stealth Rock", "Protect"]] + }, { + "species": "Ferrothorn", + "item": "Leftovers", + "ability": "Iron Barbs", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Gyro Ball"], ["Power Whip"], ["Leech Seed"], ["Stealth Rock", "Protect"]] + }, { + "species": "Ferrothorn", + "item": "Choice Band", + "ability": "Iron Barbs", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Gyro Ball"], ["Power Whip"], ["Bullet Seed"], ["Bulldoze", "Knock Off"]] + }] + }, + "garchomp": { + "flags": {}, + "sets": [{ + "species": "Garchomp", + "item": "Choice Scarf", + "ability": "Rough Skin", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Outrage"], ["Earthquake"], ["Stone Edge", "Rock Slide"], ["Poison Jab", "Fire Blast", "Fire Fang", "Toxic", "Dragon Claw", "Stealth Rock", "Sleep Talk"]] + }, { + "species": "Garchomp", + "item": "Choice Band", + "ability": "Rough Skin", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Outrage"], ["Earthquake"], ["Stone Edge", "Rock Slide"], ["Fire Fang", "Poison Jab", "Dual Chop", "Rock Tomb"]] + }, { + "species": "Garchomp", + "item": "Light Ball", + "ability": "Rough Skin", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Fling"], ["Stealth Rock", "Sand Attack"], ["Rock Tomb"], ["Earthquake"]] + }, { + "species": "Garchomp", + "item": "Rocky Helmet", + "ability": "Rough Skin", + "evs": {"hp": 60, "def": 196, "spe": 252}, + "nature": "Jolly", + "moves": [["Toxic"], ["Dragon Tail", "Roar"], ["Rock Tomb", "Earthquake"], ["Stealth Rock"]] + }, { + "species": "Garchomp", + "item": "Focus Sash", + "ability": "Rough Skin", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Outrage"], ["Earthquake"], ["Rock Tomb"], ["Stealth Rock", "Swords Dance"]] + }, { + "species": "Garchomp", + "item": "Dragonium Z", + "ability": "Sand Veil", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Outrage"], ["Earthquake"], ["Rock Tomb", "Stone Edge"]] + }] + }, + "gardevoir": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Gardevoir", + "item": "Gardevoirite", + "ability": "Trace", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hyper Voice"], ["Psychic", "Psyshock"], ["Calm Mind"], ["Focus Blast", "Hidden Power Fire"]] + }] + }, + "gengar": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Gengar", + "item": "Gengarite", + "ability": "Cursed Body", + "shiny": true, + "evs": {"hp": 236, "def": 4, "spa": 12, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Will-O-Wisp"], ["Hex"], ["Sludge Bomb"], ["Substitute", "Taunt", "Destiny Bond"]] + }, { + "species": "Gengar", + "item": "Gengarite", + "ability": "Cursed Body", + "shiny": true, + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Will-O-Wisp"], ["Hex", "Shadow Ball"], ["Sludge Bomb"], ["Substitute", "Taunt", "Destiny Bond", "Focus Blast"]] + }, { + "species": "Gengar", + "item": "Focus Sash", + "ability": "Cursed Body", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Shadow Ball"], ["Icy Wind"], ["Destiny Bond"]] + }, { + "species": "Gengar", + "item": "Gengarite", + "ability": "Cursed Body", + "evs": {"hp": 252, "spd": 60, "spe": 196}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Perish Song"], ["Protect"], ["Will-O-Wisp"], ["Hex", "Sludge Bomb"]] + }] + }, + "gigalith": { + "flags": {}, + "sets": [{ + "species": "Gigalith", + "item": "Smooth Rock", + "ability": "Sand Stream", + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Gravity", "Earthquake"], ["Explosion"], ["Rock Blast", "Rock Tomb"]] + }] + }, + "glalie": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Glalie", + "item": "Leftovers", + "ability": "Moody", + "evs": {"hp": 172, "spd": 84, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Substitute"], ["Protect"], ["Sheer Cold", "Toxic"], ["Frost Breath", "Freeze-Dry"]] + }, { + "species": "Glalie", + "item": "Leftovers", + "ability": "Moody", + "evs": {"hp": 172, "atk": 60, "def": 20, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Earthquake"], ["Freeze-Dry"], ["Substitute"], ["Protect"]] + }, { + "species": "Glalie", + "item": "Leftovers", + "ability": "Moody", + "evs": {"hp": 172, "spd": 84, "spe": 252}, + "nature": "Jolly", + "moves": [["Sheer Cold", "Toxic"], ["Earthquake"], ["Substitute"], ["Protect"]] + }, { + "species": "Glalie", + "item": "Glalitite", + "ability": "Moody", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Protect"], ["Return"], ["Earthquake"], ["Explosion", "Ice Shard"]] + }] + }, + "gliscor": { + "flags": {}, + "sets": [{ + "species": "Gliscor", + "item": "Toxic Orb", + "ability": "Poison Heal", + "evs": {"hp": 212, "atk": 4, "def": 4, "spd": 84, "spe": 204}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Guillotine", "Toxic"], ["Substitute"], ["Protect"]] + }, { + "species": "Gliscor", + "item": "Toxic Orb", + "ability": "Poison Heal", + "evs": {"hp": 84, "atk": 180, "def": 20, "spd": 4, "spe": 220}, + "nature": "Jolly", + "moves": [["Fling"], ["Acrobatics"], ["Substitute", "Earthquake"], ["Swords Dance"]] + }, { + "species": "Gliscor", + "item": "Toxic Orb", + "ability": "Poison Heal", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Tomb"], ["Taunt"]] + }] + }, + "golisopod": { + "flags": {}, + "sets": [{ + "species": "Golisopod", + "item": "Assault Vest", + "ability": "Emergency Exit", + "evs": {"hp": 244, "atk": 244, "def": 20}, + "nature": "Adamant", + "moves": [["First Impression"], ["Liquidation"], ["Aqua Jet"], ["Leech Life", "Sucker Punch", "Rock Tomb"]] + }, { + "species": "Golisopod", + "item": "Sitrus Berry", + "ability": "Emergency Exit", + "evs": {"hp": 236, "atk": 252, "def": 20}, + "nature": "Adamant", + "moves": [["First Impression"], ["Liquidation"], ["Aqua Jet"], ["Leech Life", "Sucker Punch", "Rock Tomb"]] + }, { + "species": "Golisopod", + "item": "Choice Band", + "ability": "Emergency Exit", + "evs": {"hp": 244, "atk": 244, "def": 20}, + "nature": "Adamant", + "moves": [["First Impression"], ["Liquidation"], ["Aqua Jet"], ["Leech Life", "Poison Jab"]] + }] + }, + "greninja": { + "flags": {}, + "sets": [{ + "species": "Greninja", + "item": "Life Orb", + "ability": "Protean", + "evs": {"atk": 20, "spa": 236, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Water Shuriken", "Hydro Pump", "Grass Knot"], ["Gunk Shot", "Low Kick"], ["Dark Pulse"]] + }, { + "species": "Greninja", + "item": "Normalium Z", + "ability": "Protean", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Happy Hour"], ["Ice Beam"], ["Water Shuriken", "Hydro Pump", "Dark Pulse"], ["Low Kick", "Gunk Shot"]] + }, { + "species": "Greninja", + "item": "Focus Sash", + "ability": "Torrent", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Toxic Spikes"], ["Spikes"], ["Scald"], ["U-turn"]] + }, { + "species": "Greninja", + "item": "Focus Sash", + "ability": "Protean", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Water Shuriken", "Hydro Pump"], ["Gunk Shot", "Low Kick"], ["Dark Pulse"]] + }, { + "species": "Greninja", + "item": "Choice Scarf", + "ability": "Protean", + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Grass Knot", "U-turn", "Low Kick"], ["Ice Beam"], ["Gunk Shot"], ["Dark Pulse", "Rock Slide", "Waterfall", "Rock Tomb"]] + }, { + "species": "Greninja", + "item": "Rocky Helmet", + "ability": "Protean", + "evs": {"hp": 76, "atk": 68, "def": 252, "spd": 4, "spe": 108}, + "nature": "Jolly", + "moves": [["Toxic"], ["Low Kick"], ["Ice Beam"], ["Rock Tomb"]] + }] + }, + "gyarados": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Gyarados", + "item": "Rocky Helmet", + "ability": "Intimidate", + "evs": {"hp": 220, "def": 244, "spe": 44}, + "nature": "Impish", + "moves": [["Waterfall"], ["Ice Fang"], ["Taunt"], ["Thunder Wave", "Toxic"]] + }, { + "species": "Gyarados", + "item": "Gyaradosite", + "ability": "Intimidate", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Waterfall"], ["Earthquake", "Substitute", "Taunt"], ["Ice Fang", "Crunch"]] + }, { + "species": "Gyarados", + "item": "Flyinium Z", + "ability": "Intimidate", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Bounce"], ["Waterfall"], ["Ice Fang", "Earthquake"]] + }, { + "species": "Gyarados", + "item": "Lum Berry", + "ability": "Intimidate", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Earthquake", "Taunt", "Substitute"], ["Waterfall"], ["Ice Fang"]] + }, { + "species": "Gyarados", + "item": "Choice Scarf", + "ability": "Moxie", + "evs": {"hp": 84, "atk": 252, "spe": 172}, + "nature": "Jolly", + "moves": [["Waterfall"], ["Stone Edge", "Rock Slide"], ["Earthquake"], ["Ice Fang"]] + }] + }, + "heatran": { + "flags": {}, + "sets": [{ + "species": "Heatran", + "item": "Leftovers", + "ability": "Flash Fire", + "evs": {"hp": 212, "spd": 44, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Toxic", "Will-O-Wisp"], ["Protect", "Substitute"], ["Magma Storm", "Lava Plume"], ["Earth Power", "Taunt"]] + }, { + "species": "Heatran", + "item": "Leftovers", + "ability": "Flash Fire", + "evs": {"hp": 212, "def": 4, "spa": 44, "spd": 156, "spe": 92}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Toxic", "Will-O-Wisp"], ["Protect"], ["Magma Storm", "Lava Plume"], ["Earth Power", "Substitute"]] + }, { + "species": "Heatran", + "item": "Choice Specs", + "ability": "Flash Fire", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Overheat", "Fire Blast"], ["Flash Cannon"], ["Hidden Power Ice"], ["Ancient Power", "Earth Power"]] + }, { + "species": "Heatran", + "item": "Air Balloon", + "ability": "Flash Fire", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Will-O-Wisp"], ["Roar", "Hidden Power Ice"], ["Lava Plume"]] + }, { + "species": "Heatran", + "item": "Grassium Z", + "ability": "Flash Fire", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Magma Storm"], ["Solar Beam"], ["Flash Cannon"], ["Earth Power", "Taunt"]] + }, { + "species": "Heatran", + "item": "Choice Scarf", + "ability": "Flash Fire", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Overheat", "Fire Blast"], ["Flash Cannon"], ["Hidden Power Ice"], ["Earth Power", "Ancient Power"]] + }, { + "species": "Heatran", + "item": "Firium Z", + "ability": "Flash Fire", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Overheat", "Fire Blast"], ["Flash Cannon"], ["Earth Power"], ["Taunt", "Stealth Rock", "Flame Charge"]] + }] + }, + "heracross": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Heracross", + "item": "Heracronite", + "ability": "Moxie", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Pin Missile"], ["Rock Blast"], ["Bullet Seed"], ["Close Combat", "Earthquake"]] + }, { + "species": "Heracross", + "item": "Heracronite", + "ability": "Guts", + "evs": {"hp": 156, "atk": 252, "spe": 100}, + "nature": "Adamant", + "moves": [["Pin Missile"], ["Rock Blast"], ["Bullet Seed"], ["Close Combat", "Earthquake", "Swords Dance"]] + }, { + "species": "Heracross", + "item": "Choice Scarf", + "ability": "Moxie", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Megahorn"], ["Close Combat"], ["Stone Edge"], ["Earthquake"]] + }] + }, + "hippowdon": { + "flags": {}, + "sets": [{ + "species": "Hippowdon", + "item": "Rocky Helmet", + "ability": "Sand Stream", + "evs": {"hp": 212, "def": 252, "spe": 44}, + "nature": "Impish", + "moves": [["Yawn"], ["Stealth Rock"], ["Earthquake"], ["Slack Off", "Whirlwind", "Rock Tomb", "Ice Fang"]] + }, { + "species": "Hippowdon", + "item": "Sitrus Berry", + "ability": "Sand Stream", + "evs": {"hp": 252, "def": 52, "spd": 204}, + "nature": "Careful", + "moves": [["Earthquake"], ["Stealth Rock"], ["Yawn"], ["Rock Tomb", "Whirlwind"]] + }, { + "species": "Hippowdon", + "item": "Iapapa Berry", + "ability": "Sand Stream", + "evs": {"hp": 252, "def": 52, "spd": 204}, + "nature": "Careful", + "moves": [["Earthquake"], ["Stealth Rock"], ["Yawn"], ["Whirlwind"]] + }, { + "species": "Hippowdon", + "item": "Leftovers", + "ability": "Sand Stream", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Yawn", "Toxic"], ["Earthquake"], ["Slack Off"], ["Protect"]] + }] + }, + "hydreigon": { + "flags": {}, + "sets": [{ + "species": "Hydreigon", + "item": "Choice Scarf", + "ability": "Levitate", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"], ["U-turn", "Earth Power"]] + }, { + "species": "Hydreigon", + "item": "Choice Specs", + "ability": "Levitate", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"], ["Earth Power", "Flash Cannon"]] + }, { + "species": "Hydreigon", + "item": "Darkinium Z", + "ability": "Levitate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"], ["Taunt", "Earth Power", "Substitute"]] + }, { + "species": "Hydreigon", + "item": "Darkinium Z", + "ability": "Levitate", + "evs": {"hp": 252, "def": 124, "spa": 4, "spd": 76, "spe": 52}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Dark Pulse"], ["Taunt"], ["Thunder Wave"], ["Roost"]] + }, { + "species": "Hydreigon", + "item": "Poisonium Z", + "ability": "Levitate", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Belch"], ["Dark Pulse"], ["Draco Meteor", "Dragon Pulse"], ["Earth Power", "Fire Blast"]] + }] + }, + "jellicent": { + "flags": {}, + "sets": [{ + "species": "Jellicent", + "gender": "M", + "item": "Sitrus Berry", + "ability": "Cursed Body", + "evs": {"hp": 252, "def": 244, "spe": 12}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Will-O-Wisp", "Toxic"], ["Recover"], ["Taunt", "Ice Beam", "Hex"]] + }] + }, + "kangaskhan": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Kangaskhan", + "item": "Kangaskhanite", + "ability": "Scrappy", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Return", "Double-Edge", "Facade", "Crush Claw"], ["Power-Up Punch", "Fake Out"], ["Earthquake", "Fire Punch", "Drain Punch"], ["Sucker Punch", "Ice Punch", "Rock Tomb"]] + }, { + "species": "Kangaskhan", + "item": "Kangaskhanite", + "ability": "Scrappy", + "evs": {"hp": 212, "atk": 252, "def": 12, "spd": 12, "spe": 20}, + "nature": "Adamant", + "moves": [["Secret Power"], ["Power-Up Punch"], ["Substitute", "Sucker Punch"], ["Rock Slide", "Rock Tomb", "Drain Punch"]] + }, { + "species": "Kangaskhan", + "item": "Kangaskhanite", + "ability": "Scrappy", + "evs": {"hp": 212, "atk": 20, "def": 4, "spa": 252, "spe": 20}, + "nature": "Rash", + "moves": [["Double-Edge"], ["Fire Blast", "Flamethrower", "Thunderbolt"], ["Ice Beam", "Shadow Ball"], ["Earthquake", "Rock Tomb"]] + }] + }, + "kartana": { + "flags": {}, + "sets": [{ + "species": "Kartana", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Leaf Blade"], ["Smart Strike", "Guillotine"], ["Sacred Sword"], ["Night Slash"]] + }, { + "species": "Kartana", + "item": "Darkinium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Smart Strike", "Sacred Sword"], ["Night Slash"]] + }, { + "species": "Kartana", + "item": "Fightinium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Smart Strike"], ["Sacred Sword"]] + }, { + "species": "Kartana", + "item": "Grassium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Smart Strike"], ["Sacred Sword", "Night Slash"]] + }, { + "species": "Kartana", + "item": "Steelium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Smart Strike"], ["Sacred Sword", "Night Slash"]] + }, { + "species": "Kartana", + "item": "Focus Sash", + "ability": "Beast Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Smart Strike"], ["Sacred Sword", "Night Slash"]] + }, { + "species": "Kartana", + "item": "Life Orb", + "ability": "Beast Boost", + "evs": {"hp": 36, "spd": 220, "spe": 252}, + "ivs": {"atk": 21}, + "nature": "Timid", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Smart Strike"], ["Sacred Sword", "Night Slash"]] + }] + }, + "kingdra": { + "flags": {}, + "sets": [{ + "species": "Kingdra", + "item": "Waterium Z", + "ability": "Swift Swim", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Draco Meteor"], ["Ice Beam"], ["Rain Dance"]] + }, { + "species": "Kingdra", + "item": "Scope Lens", + "ability": "Sniper", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Focus Energy"], ["Draco Meteor"], ["Hydro Pump"], ["Yawn", "Substitute", "Agility"]] + }] + }, + "kommoo": { + "flags": { + "zmoveOnly": 1 + }, + "sets": [{ + "species": "Kommo-o-Totem", + "item": "Kommonium Z", + "ability": "Overcoat", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Clanging Scales"], ["Drain Punch", "Close Combat"], ["Flamethrower"], ["Flash Cannon", "Poison Jab"]] + }, { + "species": "Kommo-o-Totem", + "item": "Kommonium Z", + "ability": "Overcoat", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Clanging Scales"], ["Focus Blast"], ["Flamethrower"], ["Flash Cannon"]] + }, { + "species": "Kommo-o", + "item": "Focus Sash", + "ability": "Bulletproof", + "evs": {"atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Close Combat"], ["Rock Tomb"], ["Endeavor"]] + }, { + "species": "Kommo-o", + "item": "Salac Berry", + "ability": "Bulletproof", + "evs": {"hp": 12, "atk": 244, "spe": 252}, + "nature": "Jolly", + "moves": [["Belly Drum"], ["Drain Punch"], ["Substitute"], ["Poison Jab", "Iron Head", "Shadow Claw", "Earthquake"]] + }] + }, + "landorustherian": { + "flags": {}, + "sets": [{ + "species": "Landorus-Therian", + "gender": "M", + "item": "Iapapa Berry", + "ability": "Intimidate", + "evs": {"hp": 244, "def": 36, "spd": 228}, + "nature": "Careful", + "moves": [["Earthquake"], ["Rock Tomb"], ["U-turn"], ["Stealth Rock", "Fissure"]] + }, { + "species": "Landorus-Therian", + "item": "Rocky Helmet", + "ability": "Intimidate", + "evs": {"hp": 212, "def": 236, "spe": 60}, + "nature": "Impish", + "moves": [["Earthquake"], ["Rock Tomb"], ["U-turn"], ["Stealth Rock"]] + }, { + "species": "Landorus-Therian", + "item": "Groundium Z", + "ability": "Intimidate", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Tomb"], ["Knock Off"], ["Stealth Rock"]] + }, { + "species": "Landorus-Therian", + "item": "Choice Scarf", + "ability": "Intimidate", + "evs": {"hp": 44, "atk": 212, "def": 12, "spd": 4, "spe": 236}, + "nature": "Adamant", + "moves": [["Earthquake"], ["U-turn"], ["Rock Slide", "Stone Edge"], ["Superpower", "Knock Off"]] + }, { + "species": "Landorus-Therian", + "item": "Assault Vest", + "ability": "Intimidate", + "evs": {"hp": 244, "atk": 36, "def": 4, "spd": 188, "spe": 36}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Knock Off", "Fissure"], ["Rock Tomb"], ["U-turn"]] + }, { + "species": "Landorus-Therian", + "item": "Flyinium Z", + "ability": "Intimidate", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Earthquake"], ["Fly"], ["Rock Polish", "Rock Slide", "Stone Edge"]] + }] + }, + "lapras": { + "flags": {}, + "sets": [{ + "species": "Lapras", + "item": "Assault Vest", + "ability": "Water Absorb", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Quiet", + "moves": [["Sheer Cold"], ["Surf", "Hydro Pump"], ["Freeze-Dry"], ["Ice Shard"]] + }] + }, + "latias": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Latias", + "item": "Rocky Helmet", + "ability": "Levitate", + "evs": {"hp": 212, "def": 36, "spa": 4, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic", "Reflect"], ["Draco Meteor"], ["Thunder Wave", "Recover"], ["Healing Wish"]] + }, { + "species": "Latias", + "item": "Safety Goggles", + "ability": "Levitate", + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Calm Mind"], ["Substitute", "Recover"], ["Draco Meteor", "Hidden Power Fire"]] + }, { + "species": "Latias", + "item": "Latiasite", + "ability": "Levitate", + "evs": {"hp": 252, "def": 36, "spe": 220}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic", "Psyshock"], ["Calm Mind"], ["Recover"], ["Draco Meteor", "Ice Beam"]] + }] + }, + "latios": { + "flags": {}, + "sets": [{ + "species": "Latios", + "item": "Choice Specs", + "ability": "Levitate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic", "Psyshock"], ["Draco Meteor"], ["Shadow Ball", "Hidden Power Fire"], ["Trick", "Thunderbolt"]] + }, { + "species": "Latios", + "item": "Dragonium Z", + "ability": "Levitate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic", "Psyshock"], ["Shadow Ball", "Hidden Power Fire"], ["Thunderbolt", "Calm Mind"]] + }, { + "species": "Latios", + "item": "Light Clay", + "ability": "Levitate", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Reflect"], ["Light Screen"], ["Memento"], ["Draco Meteor"]] + }, { + "species": "Latios", + "item": "Groundium Z", + "ability": "Levitate", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Zen Headbutt"], ["Earthquake"], ["Outrage"]] + }, { + "species": "Latios", + "item": "Psychium Z", + "ability": "Levitate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Heal Block"], ["Psychic", "Psyshock"], ["Draco Meteor", "Dragon Pulse"], ["Shadow Ball", "Hidden Power Fire", "Roost"]] + }] + }, + "lopunny": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Lopunny", + "item": "Lopunnite", + "ability": "Limber", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Fake Out"], ["High Jump Kick"], ["Return"], ["Ice Punch", "Encore", "Power-Up Punch", "Substitute"]] + }] + }, + "lucario": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Lucario", + "item": "Lucarionite", + "ability": "Justified", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Bullet Punch", "Extreme Speed"], ["Earthquake", "Ice Punch", "Meteor Mash"], ["Swords Dance"]] + }, { + "species": "Lucario", + "item": "Lucarionite", + "ability": "Justified", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Flash Cannon"], ["Focus Blast", "Aura Sphere"], ["Dark Pulse", "Vacuum Wave"], ["Nasty Plot"]] + }, { + "species": "Lucario", + "item": "Lucarionite", + "ability": "Justified", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Flash Cannon"], ["Close Combat"], ["Substitute", "Ice Punch", "Dark Pulse", "Stone Edge"], ["Extreme Speed", "Bullet Punch", "Vacuum Wave"]] + }, { + "species": "Lucario", + "item": "Focus Sash", + "ability": "Inner Focus", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Counter"], ["Close Combat"], ["Rock Tomb"], ["Extreme Speed", "Bullet Punch"]] + }] + }, + "magnezone": { + "flags": {}, + "sets": [{ + "species": "Magnezone", + "item": "Assault Vest", + "ability": "Analytic", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Fire", "Hidden Power Ice"]] + }, { + "species": "Magnezone", + "item": "Assault Vest", + "ability": "Magnet Pull", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Fire"]] + }, { + "species": "Magnezone", + "item": "Assault Vest", + "ability": "Sturdy", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Fire", "Hidden Power Ice"]] + }, { + "species": "Magnezone", + "item": "Choice Specs", + "ability": "Sturdy", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Ice"], ["Volt Switch"]] + }, { + "species": "Magnezone", + "item": "Choice Specs", + "ability": "Analytic", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Ice"], ["Volt Switch"]] + }, { + "species": "Magnezone", + "item": "Electrium Z", + "ability": "Sturdy", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Ice"], ["Volt Switch"]] + }, { + "species": "Magnezone", + "item": "Air Balloon", + "ability": "Analytic", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Ice"], ["Volt Switch"]] + }] + }, + "mamoswine": { + "flags": {}, + "sets": [{ + "species": "Mamoswine", + "item": "Focus Sash", + "ability": "Thick Fat", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Spear"], ["Ice Shard"], ["Earthquake"], ["Stealth Rock", "Rock Tomb", "Endeavor"]] + }, { + "species": "Mamoswine", + "item": "Rocky Helmet", + "ability": "Thick Fat", + "evs": {"hp": 252, "def": 252, "spe": 4}, + "nature": "Impish", + "moves": [["Earthquake"], ["Ice Shard"], ["Roar", "Toxic"], ["Stealth Rock"]] + }, { + "species": "Mamoswine", + "item": "Assault Vest", + "ability": "Thick Fat", + "evs": {"hp": 44, "atk": 164, "def": 4, "spd": 252, "spe": 44}, + "nature": "Adamant", + "moves": [["Icicle Spear"], ["Earthquake"], ["Ice Shard"], ["Fissure"]] + }, { + "species": "Mamoswine", + "item": "Life Orb", + "ability": "Thick Fat", + "evs": {"hp": 108, "atk": 252, "def": 52, "spd": 92, "spe": 4}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Earthquake"], ["Icicle Spear"], ["Ice Shard"]] + }, { + "species": "Mamoswine", + "item": "Choice Scarf", + "ability": "Thick Fat", + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Spear", "Icicle Crash"], ["Ice Shard"], ["Earthquake"], ["Rock Slide", "Superpower", "Stone Edge", "Knock Off"]] + }, { + "species": "Piloswine", + "nickname": "Piloswine", + "item": "Eviolite", + "ability": "Thick Fat", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Rock Tomb", "Roar"], ["Ice Shard"], ["Earthquake"], ["Stealth Rock"]] + }] + }, + "mandibuzz": { + "flags": {}, + "sets": [{ + "species": "Mandibuzz", + "item": "Rocky Helmet", + "ability": "Overcoat", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Foul Play"], ["Taunt", "U-turn"], ["Toxic"], ["Roost"]] + }] + }, + "manectric": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Manectric", + "item": "Manectite", + "ability": "Lightning Rod", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Overheat", "Flamethrower"], ["Hidden Power Ice"], ["Volt Switch"]] + }] + }, + "marowakalola": { + "flags": {}, + "sets": [{ + "species": "Marowak-Alola", + "item": "Thick Club", + "ability": "Lightning Rod", + "evs": {"hp": 252, "atk": 252, "spe": 4}, + "nature": "Adamant", + "moves": [["Flare Blitz"], ["Shadow Bone"], ["Bonemerang"], ["Will-O-Wisp"]] + }, { + "species": "Marowak-Alola", + "item": "Thick Club", + "ability": "Lightning Rod", + "evs": {"hp": 252, "atk": 252, "spe": 4}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Shadow Bone"], ["Bonemerang", "Rock Slide", "Will-O-Wisp"], ["Flame Charge"]] + }, { + "species": "Marowak-Alola", + "item": "Thick Club", + "ability": "Lightning Rod", + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Flare Blitz", "Fire Punch"], ["Shadow Bone"], ["Bonemerang", "Perish Song", "Stealth Rock"], ["Will-O-Wisp"]] + }] + }, + "mawile": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Mawile", + "item": "Mawilite", + "ability": "Intimidate", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Iron Head", "Fire Fang", "Knock Off"], ["Play Rough"], ["Sucker Punch"], ["Swords Dance"]] + }, { + "species": "Mawile", + "item": "Mawilite", + "ability": "Intimidate", + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Knock Off", "Iron Head", "Fire Fang"], ["Play Rough"], ["Sucker Punch"], ["Swords Dance"]] + }, { + "species": "Mawile", + "item": "Mawilite", + "ability": "Intimidate", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"atk": 19}, + "nature": "Adamant", + "moves": [["Substitute"], ["Play Rough"], ["Sucker Punch"], ["Focus Punch"]] + }] + }, + "medicham": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Medicham", + "item": "Medichamite", + "ability": "Pure Power", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Fake Out", "Bullet Punch"], ["High Jump Kick"], ["Ice Punch"], ["Thunder Punch", "Zen Headbutt"]] + }] + }, + "metagross": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Metagross", + "item": "Metagrossite", + "ability": "Clear Body", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head", "Meteor Mash"], ["Bullet Punch", "Zen Headbutt", "Thunder Punch"], ["Ice Punch"], ["Earthquake", "Hammer Arm"]] + }, { + "species": "Metagross", + "item": "Metagrossite", + "ability": "Clear Body", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Meteor Mash", "Zen Headbutt"], ["Hone Claws"], ["Substitute"], ["Earthquake"]] + }, { + "species": "Metagross", + "item": "Metagrossite", + "ability": "Clear Body", + "evs": {"hp": 252, "atk": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["Zen Headbutt"], ["Ice Punch"], ["Stealth Rock"]] + }] + }, + "milotic": { + "flags": {}, + "sets": [{ + "species": "Milotic", + "item": "Flame Orb", + "ability": "Marvel Scale", + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Toxic", "Ice Beam"], ["Recover"], ["Mirror Coat"]] + }, { + "species": "Milotic", + "item": "Assault Vest", + "ability": "Competitive", + "evs": {"hp": 244, "def": 44, "spa": 212, "spd": 4, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Scald"], ["Ice Beam"], ["Mirror Coat"], ["Icy Wind", "Hidden Power Fire"]] + }] + }, + "mimikyu": { + "flags": {}, + "sets": [{ + "species": "Mimikyu", + "item": "Ghostium Z", + "ability": "Disguise", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Shadow Claw"], ["Play Rough"], ["Shadow Sneak"]] + }, { + "species": "Mimikyu", + "item": "Mimikium Z", + "ability": "Disguise", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Play Rough"], ["Shadow Sneak"], ["Shadow Claw", "Drain Punch", "Curse"]] + }, { + "species": "Mimikyu", + "item": "Life Orb", + "ability": "Disguise", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Shadow Claw"], ["Play Rough"], ["Shadow Sneak"]] + }, { + "species": "Mimikyu", + "item": "Focus Sash", + "ability": "Disguise", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Shadow Claw"], ["Play Rough"], ["Shadow Sneak"]] + }, { + "species": "Mimikyu", + "item": "Mimikium Z", + "ability": "Disguise", + "evs": {"hp": 228, "atk": 252, "def": 28}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Play Rough"], ["Shadow Sneak"], ["Curse"]] + }, { + "species": "Mimikyu", + "item": "Ghostium Z", + "ability": "Disguise", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Curse"], ["Substitute"], ["Pain Split"], ["Shadow Claw"]] + }] + }, + "mukalola": { + "flags": {}, + "sets": [{ + "species": "Muk-Alola", + "item": "Assault Vest", + "ability": "Poison Touch", + "evs": {"hp": 164, "atk": 92, "spd": 252}, + "nature": "Brave", + "moves": [["Poison Jab", "Gunk Shot"], ["Knock Off"], ["Shadow Sneak", "Clear Smog"], ["Pursuit", "Fire Punch"]] + }, { + "species": "Muk-Alola", + "item": "Black Sludge", + "ability": "Poison Touch", + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Minimize"], ["Toxic", "Curse"], ["Knock Off"], ["Poison Jab"]] + }, { + "species": "Muk-Alola", + "item": "Figy Berry", + "ability": "Gluttony", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Minimize", "Recycle"], ["Knock Off", "Fire Punch"], ["Poison Jab", "Gunk Shot"], ["Curse", "Shadow Sneak"]] + }] + }, + "naganadel": { + "flags": { + "zmoveOnly": 1 + }, + "sets": [{ + "species": "Naganadel", + "item": "Dragonium Z", + "ability": "Beast Boost", + "evs": {"hp": 20, "spa": 236, "spe": 252}, + "ivs": {"atk": 0, "def": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Draco Meteor", "Dragon Pulse"], ["Sludge Wave", "Sludge Bomb"], ["Fire Blast", "Flamethrower", "Hidden Power Ground"]] + }, { + "species": "Naganadel", + "item": "Choice Specs", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0, "def": 29}, + "nature": "Timid", + "moves": [["Draco Meteor", "Dragon Pulse"], ["Sludge Wave", "Sludge Bomb"], ["Fire Blast", "Flamethrower"], ["Hidden Power Ground"]] + }, { + "species": "Naganadel", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"def": 29}, + "nature": "Modest", + "moves": [["Draco Meteor", "Dragon Pulse"], ["Sludge Wave", "Sludge Bomb"], ["Fire Blast", "Flamethrower"], ["Hidden Power Ground", "U-turn"]] + }] + }, + "nidoking": { + "flags": {}, + "sets": [{ + "species": "Nidoking", + "item": "Focus Sash", + "ability": "Sheer Force", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Flamethrower", "Fire Blast", "Sucker Punch"]] + }, { + "species": "Nidoking", + "item": "Life Orb", + "ability": "Sheer Force", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Flamethrower", "Fire Blast", "Thunderbolt"]] + }, { + "species": "Nidoking", + "item": "Choice Scarf", + "ability": "Sheer Force", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Flamethrower", "Fire Blast", "Thunderbolt"]] + }] + }, + "nihilego": { + "flags": {}, + "sets": [{ + "species": "Nihilego", + "item": "Focus Sash", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Power Gem"], ["Sludge Wave"], ["Hidden Power Ice", "Hidden Power Fire", "Toxic Spikes", "Thunder Wave"], ["Stealth Rock", "Mirror Coat"]] + }, { + "species": "Nihilego", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Power Gem"], ["Sludge Wave"], ["Hidden Power Ice", "Hidden Power Fire"], ["Thunderbolt", "Psychic", "Grass Knot", "Clear Smog"]] + }] + }, + "ninetales": { + "flags": {}, + "sets": [{ + "species": "Ninetales", + "item": "Heat Rock", + "ability": "Drought", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Overheat"], ["Power Swap"], ["Will-O-Wisp", "Hypnosis"], ["Hidden Power Ground"]] + }, { + "species": "Ninetales-Alola", + "item": "Focus Sash", + "ability": "Snow Warning", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Blizzard"], ["Aurora Veil"], ["Encore", "Hypnosis"], ["Moonblast", "Freeze-Dry", "Icy Wind"]] + }, { + "species": "Ninetales-Alola", + "item": "Light Clay", + "ability": "Snow Warning", + "evs": {"hp": 244, "spd": 12, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Blizzard"], ["Aurora Veil"], ["Encore", "Hypnosis"], ["Disable", "Icy Wind", "Freeze-Dry", "Sheer Cold"]] + }, { + "species": "Ninetales-Alola", + "item": "Icium Z", + "ability": "Snow Warning", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Blizzard"], ["Aurora Veil"], ["Encore", "Hypnosis"], ["Moonblast", "Freeze-Dry"]] + }] + }, + "pelipper": { + "flags": {}, + "sets": [{ + "species": "Pelipper", + "item": "Focus Sash", + "ability": "Drizzle", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Hurricane"], ["Hydro Pump", "Scald"], ["Ice Beam", "Icy Wind"], ["U-turn"]] + }, { + "species": "Pelipper", + "item": "Rocky Helmet", + "ability": "Drizzle", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Hurricane"], ["Scald"], ["Roost"], ["U-turn", "Toxic", "Ice Beam"]] + }, { + "species": "Pelipper", + "item": "Choice Specs", + "ability": "Drizzle", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Hydro Pump"], ["Ice Beam"], ["U-turn", "Shock Wave", "Scald", "Sleep Talk"]] + }] + }, + "pheromosa": { + "flags": {}, + "sets": [{ + "species": "Pheromosa", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"hp": 116, "atk": 84, "def": 252, "spa": 4, "spe": 52}, + "nature": "Naughty", + "moves": [["High Jump Kick"], ["U-turn"], ["Ice Beam"], ["Poison Jab"]] + }, { + "species": "Pheromosa", + "item": "Life Orb", + "ability": "Beast Boost", + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Lonely", + "moves": [["High Jump Kick"], ["U-turn"], ["Poison Jab"], ["Ice Beam"]] + }, { + "species": "Pheromosa", + "item": "Focus Sash", + "ability": "Beast Boost", + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["High Jump Kick"], ["U-turn"], ["Poison Jab"], ["Ice Beam"]] + }, { + "species": "Pheromosa", + "item": "Fightinium Z", + "ability": "Beast Boost", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Focus Blast"], ["Bug Buzz"], ["Hidden Power Rock", "U-turn", "Quiver Dance"], ["Ice Beam"]] + }, { + "species": "Pheromosa", + "item": "Fist Plate", + "ability": "Beast Boost", + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naughty", + "moves": [["High Jump Kick"], ["U-turn"], ["Fling"], ["Ice Beam"]] + }] + }, + "pinsir": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Pinsir", + "item": "Pinsirite", + "ability": "Hyper Cutter", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Return"], ["Quick Attack", "Feint"], ["Close Combat", "Earthquake"]] + }] + }, + "politoed": { + "flags": {}, + "sets": [{ + "species": "Politoed", + "item": "Eject Button", + "ability": "Drizzle", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Ice Beam"], ["Perish Song"], ["Encore", "Protect", "Hypnosis"]] + }, { + "species": "Politoed", + "item": "Psychium Z", + "ability": "Drizzle", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Hypnosis"], ["Belly Drum"], ["Waterfall"], ["Earthquake"]] + }] + }, + "porygonz": { + "flags": {}, + "sets": [{ + "species": "Porygon-Z", + "item": "Normalium Z", + "ability": "Adaptability", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Conversion"], ["Ice Beam"], ["Dark Pulse"]] + }, { + "species": "Porygon-Z", + "item": "Normalium Z", + "ability": "Adaptability", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Conversion"], ["Ice Beam"], ["Thunderbolt", "Hyper Beam"]] + }, { + "species": "Porygon-Z", + "item": "Normalium Z", + "ability": "Adaptability", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Tri Attack"], ["Conversion"], ["Dark Pulse", "Shadow Ball", "Ice Beam", "Thunderbolt"], ["Hyper Beam"]] + }, { + "species": "Porygon-Z", + "item": "Choice Scarf", + "ability": "Adaptability", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Tri Attack", "Uproar"], ["Ice Beam"], ["Thunderbolt"], ["Dark Pulse", "Shadow Ball"]] + }] + }, + "porygon2": { + "flags": {}, + "sets": [{ + "species": "Porygon2", + "item": "Eviolite", + "ability": "Analytic", + "evs": {"hp": 244, "def": 124, "spd": 140}, + "nature": "Sassy", + "moves": [["Return"], ["Foul Play"], ["Ice Beam"], ["Recover"]] + }, { + "species": "Porygon2", + "item": "Eviolite", + "ability": "Trace", + "evs": {"hp": 244, "def": 140, "spa": 20, "spd": 100, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Recover"], ["Ice Beam"], ["Discharge", "Thunderbolt"], ["Toxic"]] + }, { + "species": "Porygon2", + "item": "Eviolite", + "ability": "Trace", + "evs": {"hp": 244, "def": 204, "spd": 60}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Ice Beam"], ["Shadow Ball", "Foul Play"], ["Discharge", "Toxic"], ["Recover"]] + }, { + "species": "Porygon2", + "item": "Eviolite", + "ability": "Download", + "evs": {"hp": 244, "def": 204, "spd": 60}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Ice Beam"], ["Tri Attack", "Shadow Ball"], ["Thunderbolt", "Discharge"], ["Recover"]] + }, { + "species": "Porygon2", + "item": "Eviolite", + "ability": "Download", + "evs": {"hp": 244, "spa": 252, "spd": 12}, + "ivs": {"atk": 0, "spe": 0}, + "nature": "Quiet", + "moves": [["Ice Beam"], ["Tri Attack", "Shadow Ball"], ["Thunderbolt", "Hidden Power Fire", "Hidden Power Ground"], ["Trick Room"]] + }] + }, + "primarina": { + "flags": {}, + "sets": [{ + "species": "Primarina", + "item": "Primarium Z", + "ability": "Torrent", + "evs": {"hp": 252, "def": 100, "spa": 156}, + "nature": "Quiet", + "moves": [["Sparkling Aria"], ["Moonblast"], ["Aqua Jet"], ["Perish Song", "Encore", "Hidden Power Fire", "Sing"]] + }, { + "species": "Primarina", + "item": "Choice Specs", + "ability": "Torrent", + "evs": {"hp": 252, "def": 4, "spa": 252}, + "nature": "Modest", + "moves": [["Sparkling Aria", "Hydro Pump"], ["Moonblast"], ["Psychic", "Energy Ball"], ["Hidden Power Fire"]] + }] + }, + "pyukumuku": { + "flags": {}, + "sets": [{ + "species": "Pyukumuku", + "item": "Sitrus Berry", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Counter"], ["Recover"], ["Harden", "Soak"], ["Toxic"]] + }, { + "species": "Pyukumuku", + "item": "Rocky Helmet", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Counter"], ["Recover"], ["Harden", "Soak"], ["Toxic"]] + }, { + "species": "Pyukumuku", + "item": "Poisonium Z", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Purify"], ["Recover"], ["Double Team", "Soak", "Toxic"], ["Baton Pass"]] + }, { + "species": "Pyukumuku", + "item": "Wiki Berry", + "ability": "Innards Out", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Counter"], ["Recover"], ["Harden", "Soak"], ["Toxic"]] + }] + }, + "quagsire": { + "flags": {}, + "sets": [{ + "species": "Quagsire", + "item": "Rocky Helmet", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Earthquake"], ["Curse"], ["Recover"], ["Yawn"]] + }, { + "species": "Quagsire", + "item": "Leftovers", + "ability": "Unaware", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Recover"], ["Toxic"], ["Stockpile"]] + }] + }, + "raikou": { + "flags": {}, + "sets": [{ + "species": "Raikou", + "item": "Choice Specs", + "ability": "Pressure", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Shadow Ball", "Extrasensory"], ["Volt Switch"]] + }, { + "species": "Raikou", + "item": "Leftovers", + "ability": "Pressure", + "evs": {"hp": 220, "spa": 52, "spe": 236}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Substitute"], ["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice"]] + }, { + "species": "Raikou", + "item": "Light Clay", + "ability": "Pressure", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Reflect"], ["Light Screen"], ["Thunderbolt", "Volt Switch"], ["Hidden Power Ice"]] + }] + }, + "reuniclus": { + "flags": {}, + "sets": [{ + "species": "Reuniclus", + "item": "Life Orb", + "ability": "Magic Guard", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Calm Mind"], ["Psychic", "Psyshock"], ["Focus Blast"], ["Recover"]] + }, { + "species": "Reuniclus", + "item": "Psychium Z", + "ability": "Overcoat", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0, "spe": 0}, + "nature": "Quiet", + "moves": [["Trick Room"], ["Psychic"], ["Focus Blast"], ["Shadow Ball"]] + }, { + "species": "Reuniclus", + "item": "Kee Berry", + "ability": "Magic Guard", + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Psychic", "Psyshock"], ["Focus Blast"], ["Recover"]] + }] + }, + "rhyperior": { + "flags": {}, + "sets": [{ + "species": "Rhyperior", + "item": "Rockium Z", + "ability": "Solid Rock", + "evs": {"hp": 204, "atk": 252, "spd": 52}, + "nature": "Adamant", + "moves": [["Rock Wrecker"], ["Earthquake"], ["Ice Punch"], ["Rock Blast"]] + }, { + "species": "Rhyperior", + "item": "Assault Vest", + "ability": "Solid Rock", + "evs": {"hp": 4, "atk": 252, "spd": 252}, + "nature": "Adamant", + "moves": [["Rock Blast"], ["Earthquake"], ["Ice Punch"], ["Horn Drill"]] + }, { + "species": "Rhyperior", + "item": "Weakness Policy", + "ability": "Solid Rock", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Rock Blast"], ["Earthquake"], ["Ice Punch"], ["Rock Polish"]] + }] + }, + "rotom": { + "flags": {}, + "sets": [{ + "species": "Rotom-Heat", + "item": "Choice Specs", + "ability": "Levitate", + "evs": {"hp": 108, "spa": 252, "spe": 148}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Overheat"], ["Thunderbolt", "Trick"], ["Volt Switch"], ["Hidden Power Ice"]] + }, { + "species": "Rotom-Heat", + "item": "Choice Scarf", + "ability": "Levitate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Overheat"], ["Thunderbolt", "Trick"], ["Volt Switch"], ["Hidden Power Ice"]] + }, { + "species": "Rotom-Heat", + "item": "Assault Vest", + "ability": "Levitate", + "evs": {"hp": 252, "def": 36, "spa": 180, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Overheat"], ["Discharge", "Thunderbolt"], ["Volt Switch"], ["Hidden Power Ice"]] + }, { + "species": "Rotom-Heat", + "item": "Firium Z", + "ability": "Levitate", + "evs": {"hp": 108, "spa": 252, "spe": 148}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Overheat"], ["Thunderbolt", "Will-O-Wisp"], ["Volt Switch"], ["Hidden Power Ice", "Electroweb"]] + }, { + "species": "Rotom-Heat", + "item": "Sitrus Berry", + "ability": "Levitate", + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Overheat"], ["Volt Switch"], ["Will-O-Wisp"], ["Hidden Power Ice", "Foul Play"]] + }, { + "species": "Rotom-Heat", + "item": "Leftovers", + "ability": "Levitate", + "evs": {"hp": 252, "spd": 244, "spe": 12}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Overheat"], ["Discharge"], ["Substitute"], ["Will-O-Wisp", "Toxic"]] + }, { + "species": "Rotom-Heat", + "item": "Leftovers", + "ability": "Levitate", + "evs": {"hp": 156, "spd": 220, "spe": 132}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Overheat"], ["Discharge"], ["Substitute"], ["Will-O-Wisp", "Toxic"]] + }, { + "species": "Rotom-Heat", + "item": "Sitrus Berry", + "ability": "Levitate", + "evs": {"hp": 252, "spd": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Overheat"], ["Volt Switch"], ["Will-O-Wisp", "Thunder Wave"], ["Discharge", "Hidden Power Ice", "Thunderbolt"]] + }, { + "species": "Rotom-Wash", + "item": "Choice Specs", + "ability": "Levitate", + "evs": {"hp": 108, "spa": 252, "spe": 148}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Thunderbolt", "Trick"], ["Volt Switch"], ["Hidden Power Ice"]] + }, { + "species": "Rotom-Wash", + "item": "Choice Scarf", + "ability": "Levitate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Thunderbolt", "Trick"], ["Volt Switch"], ["Hidden Power Ice"]] + }, { + "species": "Rotom-Wash", + "item": "Waterium Z", + "ability": "Levitate", + "evs": {"hp": 108, "spa": 252, "spe": 148}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Thunderbolt", "Electroweb"], ["Volt Switch"], ["Hidden Power Ice", "Will-O-Wisp"]] + }, { + "species": "Rotom-Wash", + "item": "Sitrus Berry", + "ability": "Levitate", + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Hydro Pump"], ["Volt Switch"], ["Will-O-Wisp"], ["Hidden Power Ice", "Foul Play"]] + }, { + "species": "Rotom-Wash", + "item": "Sitrus Berry", + "ability": "Levitate", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Thunderbolt", "Electroweb"], ["Volt Switch"], ["Hidden Power Ice", "Will-O-Wisp"]] + }] + }, + "salamence": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Salamence", + "item": "Salamencite", + "ability": "Intimidate", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hyper Voice"], ["Draco Meteor"], ["Flamethrower", "Fire Blast"], ["Roost", "Hyper Beam"]] + }, { + "species": "Salamence", + "item": "Salamencite", + "ability": "Intimidate", + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Hyper Voice", "Earthquake"], ["Draco Meteor"], ["Flamethrower", "Fire Blast"], ["Double-Edge"]] + }, { + "species": "Salamence", + "item": "Salamencite", + "ability": "Intimidate", + "evs": {"hp": 244, "atk": 4, "def": 4, "spd": 228, "spe": 28}, + "nature": "Careful", + "moves": [["Dragon Dance"], ["Facade"], ["Roost"], ["Earthquake", "Substitute"]] + }, { + "species": "Salamence", + "item": "Salamencite", + "ability": "Intimidate", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Return", "Double-Edge"], ["Earthquake"], ["Roost", "Substitute", "Fire Blast", "Draco Meteor"]] + }, { + "species": "Salamence", + "item": "Salamencite", + "ability": "Intimidate", + "evs": {"hp": 252, "atk": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Toxic"], ["Substitute"], ["Roost"], ["Return"]] + }, { + "species": "Salamence", + "item": "Flyinium Z", + "ability": "Moxie", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Claw", "Outrage"], ["Fly"], ["Earthquake"], ["Dragon Dance"]] + }] + }, + "scizor": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Scizor", + "item": "Scizorite", + "ability": "Technician", + "evs": {"hp": 252, "atk": 28, "def": 52, "spd": 172, "spe": 4}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["U-turn", "Knock Off", "Bug Bite"], ["Swords Dance"], ["Roost"]] + }, { + "species": "Scizor", + "item": "Scizorite", + "ability": "Technician", + "evs": {"hp": 252, "atk": 252, "spe": 4}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["U-turn"], ["Superpower"], ["Swords Dance", "Knock Off"]] + }, { + "species": "Scizor", + "item": "Choice Band", + "ability": "Technician", + "evs": {"hp": 252, "atk": 252, "spe": 4}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["U-turn"], ["Superpower"], ["Knock Off", "Pursuit"]] + }, { + "species": "Scizor", + "item": "Lum Berry", + "ability": "Technician", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Swords Dance", "Iron Defense"], ["Roost"], ["Bullet Punch"], ["Knock Off", "U-turn", "Toxic"]] + }] + }, + "serperior": { + "flags": { + "limEevee": 1 + }, + "sets": [{ + "species": "Serperior", + "item": "Focus Sash", + "ability": "Contrary", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Fire", "Hidden Power Ice", "Hidden Power Rock"], ["Glare"], ["Taunt", "Mirror Coat"]] + }, { + "species": "Serperior", + "item": "Rocky Helmet", + "ability": "Contrary", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Glare"], ["Synthesis"], ["Reflect", "Hidden Power Fire"]] + }, { + "species": "Serperior", + "item": "Leftovers", + "ability": "Contrary", + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Glare", "Taunt"], ["Leech Seed"], ["Substitute"]] + }] + }, + "sharpedo": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sharpedo", + "item": "Sharpedonite", + "ability": "Speed Boost", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Protect"], ["Crunch"], ["Ice Fang"], ["Poison Fang", "Earthquake", "Liquidation", "Aqua Jet"]] + }, { + "species": "Sharpedo", + "item": "Focus Sash", + "ability": "Speed Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Protect"], ["Dark Pulse", "Hydro Pump"], ["Ice Beam"], ["Destiny Bond"]] + }] + }, + "shuckle": { + "flags": {}, + "sets": [{ + "species": "Shuckle", + "item": "Red Card", + "ability": "Sturdy", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Encore"], ["Knock Off"]] + }, { + "species": "Shuckle", + "item": "Mental Herb", + "ability": "Sturdy", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Encore"], ["Rock Tomb"]] + }] + }, + "silvally": { + "flags": {}, + "sets": [{ + "species": "Silvally", + "item": "Normalium Z", + "ability": "RKS System", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Explosion"], ["Swords Dance"], ["Flame Charge"], ["Crunch"]] + }, { + "species": "Silvally", + "item": "Darkinium Z", + "ability": "RKS System", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Parting Shot"], ["Thunder Wave"], ["Ice Beam"], ["Flamethrower"]] + }, { + "species": "Silvally-Electric", + "item": "Electric Memory", + "ability": "RKS System", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Multi-Attack"], ["Swords Dance"], ["Flame Charge"], ["Crunch", "Ice Fang"]] + }, { + "species": "Silvally-Fighting", + "item": "Fighting Memory", + "ability": "RKS System", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Multi-Attack"], ["Swords Dance"], ["Flame Charge"], ["Shadow Claw"]] + }, { + "species": "Silvally-Ground", + "item": "Ground Memory", + "ability": "RKS System", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Multi-Attack"], ["Swords Dance"], ["Flame Charge"], ["Rock Slide", "Stone Edge"]] + }, { + "species": "Silvally-Steel", + "item": "Steel Memory", + "ability": "RKS System", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Parting Shot"], ["Thunder Wave"], ["Flamethrower"], ["Flash Cannon", "Ice Beam"]] + }] + }, + "skarmory": { + "flags": {}, + "sets": [{ + "species": "Skarmory", + "item": "Flyinium Z", + "ability": "Sturdy", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Brave Bird"], ["Taunt"], ["Rock Tomb"]] + }, { + "species": "Skarmory", + "item": "Rocky Helmet", + "ability": "Sturdy", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Iron Head", "Drill Peck"], ["Roost"], ["Iron Defense", "Stealth Rock"], ["Taunt", "Toxic", "Whirlwind"]] + }, { + "species": "Skarmory", + "item": "Leftovers", + "ability": "Sturdy", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Iron Head", "Drill Peck"], ["Roost"], ["Iron Defense", "Stealth Rock"], ["Taunt", "Toxic", "Whirlwind"]] + }] + }, + "slowbro": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Slowbro", + "item": "Slowbronite", + "ability": "Regenerator", + "evs": {"hp": 244, "def": 252, "spa": 4, "spd": 4, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Psychic", "Fire Blast", "Iron Defense", "Calm Mind"], ["Ice Beam"], ["Slack Off"]] + }, { + "species": "Slowbro", + "item": "Slowbronite", + "ability": "Regenerator", + "evs": {"hp": 244, "def": 4, "spa": 252, "spd": 4, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Trick Room"], ["Psychic", "Psyshock", "Flamethrower", "Fire Blast"], ["Scald"], ["Ice Beam"]] + }, { + "species": "Slowbro", + "item": "Rocky Helmet", + "ability": "Regenerator", + "evs": {"hp": 244, "def": 252, "spa": 4, "spd": 4, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Psychic", "Flamethrower", "Iron Defense"], ["Ice Beam"], ["Slack Off"]] + }, { + "species": "Slowbro", + "item": "Assault Vest", + "ability": "Regenerator", + "evs": {"hp": 244, "def": 252, "spa": 4, "spd": 4, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Psychic", "Psyshock"], ["Ice Beam"], ["Flamethrower", "Fire Blast"]] + }] + }, + "slurpuff": { + "flags": {}, + "sets": [{ + "species": "Slurpuff", + "item": "Focus Sash", + "ability": "Unburden", + "evs": {"atk": 252, "spe": 252}, + "ivs": {"hp": 0, "def": 0, "spd": 0}, + "nature": "Hasty", + "moves": [["Sticky Web"], ["Endeavor"], ["Yawn"], ["Play Rough"]] + }] + }, + "snorlax": { + "flags": {}, + "sets": [{ + "species": "Snorlax", + "item": "Figy Berry", + "ability": "Gluttony", + "evs": {"hp": 212, "def": 236, "spd": 60}, + "nature": "Impish", + "moves": [["Recycle"], ["Yawn", "Toxic"], ["Return", "Heavy Slam"], ["Whirlwind"]] + }, { + "species": "Snorlax", + "item": "Figy Berry", + "ability": "Gluttony", + "evs": {"hp": 244, "atk": 28, "def": 236}, + "nature": "Impish", + "moves": [["Recycle"], ["Earthquake", "Fire Punch"], ["Return"], ["Curse"]] + }, { + "species": "Snorlax", + "item": "Figy Berry", + "ability": "Gluttony", + "evs": {"hp": 244, "atk": 28, "def": 236}, + "nature": "Impish", + "moves": [["Recycle"], ["Earthquake", "Fire Punch"], ["Return"], ["Belly Drum"]] + }] + }, + "stakataka": { + "flags": { + "zmoveOnly": 1 + }, + "sets": [{ + "species": "Stakataka", + "item": "Rockium Z", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Gyro Ball"], ["Rock Blast", "Stone Edge", "Rock Slide"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": "Rockium Z", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Rock Blast", "Stone Edge", "Rock Slide"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": "Groundium Z", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Gyro Ball"], ["Rock Blast", "Stone Edge", "Rock Slide"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": "Groundium Z", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Rock Blast", "Stone Edge", "Rock Slide"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": "Choice Band", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Gyro Ball"], ["Rock Blast", "Stone Edge", "Rock Slide"], ["Earthquake"], ["Superpower"]] + }, { + "species": "Stakataka", + "item": "Choice Band", + "ability": "Beast Boost", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Rock Blast", "Stone Edge", "Rock Slide"], ["Earthquake"], ["Superpower"]] + }] + }, + "steelix": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Steelix", + "item": "Steelixite", + "ability": "Sturdy", + "evs": {"hp": 244, "atk": 148, "spd": 116}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Gyro Ball"], ["Earthquake"], ["Curse"], ["Rock Blast", "Stone Edge"]] + }] + }, + "suicune": { + "flags": {}, + "sets": [{ + "species": "Suicune", + "item": "Chesto Berry", + "ability": "Pressure", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Scald"], ["Ice Beam"], ["Rest"]] + }, { + "species": "Suicune", + "item": "Rocky Helmet", + "ability": "Pressure", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Reflect"], ["Scald"], ["Ice Beam"], ["Roar"]] + }, { + "species": "Suicune", + "item": "Leftovers", + "ability": "Pressure", + "evs": {"hp": 156, "def": 60, "spa": 12, "spd": 60, "spe": 220}, + "nature": "Timid", + "moves": [["Toxic"], ["Scald"], ["Substitute"], ["Protect"]] + }, { + "species": "Suicune", + "item": "Assault Vest", + "ability": "Pressure", + "evs": {"hp": 252, "spa": 252, "spe": 4}, + "nature": "Modest", + "moves": [["Scald"], ["Ice Beam"], ["Mirror Coat"], ["Icy Wind", "Sheer Cold", "Hidden Power Fire"]] + }] + }, + "swampert": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Swampert", + "item": "Swampertite", + "ability": "Torrent", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Waterfall"], ["Earthquake"], ["Ice Punch"], ["Rain Dance"]] + }, { + "species": "Swampert", + "item": "Sitrus Berry", + "ability": "Torrent", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Stealth Rock"], ["Yawn"], ["Roar"]] + }] + }, + "tapubulu": { + "flags": {}, + "sets": [{ + "species": "Tapu Bulu", + "item": "Assault Vest", + "ability": "Grassy Surge", + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Horn Leech"], ["Wood Hammer"], ["Nature's Madness", "Superpower"], ["Stone Edge", "Rock Tomb"]] + }, { + "species": "Tapu Bulu", + "item": "Choice Band", + "ability": "Grassy Surge", + "evs": {"hp": 116, "atk": 252, "spe": 140}, + "nature": "Adamant", + "moves": [["Wood Hammer"], ["Superpower"], ["Zen Headbutt", "Stone Edge"], ["Horn Leech"]] + }, { + "species": "Tapu Bulu", + "item": "Leftovers", + "ability": "Grassy Surge", + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Horn Leech"], ["Substitute"], ["Leech Seed"], ["Protect", "Disable", "Synthesis"]] + }, { + "species": "Tapu Bulu", + "item": "Choice Scarf", + "ability": "Grassy Surge", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Horn Leech"], ["Wood Hammer"], ["Superpower", "Zen Headbutt"], ["Stone Edge", "Rock Slide"]] + }] + }, + "tapufini": { + "flags": {}, + "sets": [{ + "species": "Tapu Fini", + "item": "Aguav Berry", + "ability": "Misty Surge", + "evs": {"hp": 236, "def": 212, "spa": 28, "spd": 20, "spe": 12}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Moonblast"], ["Surf"], ["Taunt"], ["Nature's Madness"]] + }, { + "species": "Tapu Fini", + "item": "Tapunium Z", + "ability": "Misty Surge", + "evs": {"hp": 236, "def": 212, "spa": 28, "spd": 20, "spe": 12}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Moonblast"], ["Surf", "Hydro Pump", "Brine"], ["Taunt"], ["Nature's Madness"]] + }, { + "species": "Tapu Fini", + "item": "Waterium Z", + "ability": "Misty Surge", + "evs": {"hp": 236, "def": 4, "spa": 252, "spd": 4, "spe": 12}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Moonblast"], ["Nature's Madness"], ["Taunt"]] + }, { + "species": "Tapu Fini", + "item": "Leftovers", + "ability": "Misty Surge", + "evs": {"hp": 236, "def": 4, "spa": 252, "spd": 4, "spe": 12}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump", "Surf"], ["Moonblast"], ["Calm Mind"], ["Taunt", "Substitute", "Hidden Power Fire"]] + }] + }, + "tapukoko": { + "flags": {}, + "sets": [{ + "species": "Tapu Koko", + "item": "Life Orb", + "ability": "Electric Surge", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch", "U-turn"], ["Thunderbolt"], ["Dazzling Gleam"], ["Grass Knot", "Hidden Power Fire", "Taunt"]] + }, { + "species": "Tapu Koko", + "item": "Electrium Z", + "ability": "Electric Surge", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch", "U-turn"], ["Thunderbolt"], ["Dazzling Gleam"], ["Grass Knot", "Hidden Power Fire", "Taunt", "Calm Mind"]] + }, { + "species": "Tapu Koko", + "item": "Choice Specs", + "ability": "Electric Surge", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Thunderbolt"], ["Dazzling Gleam"], ["Grass Knot", "Hidden Power Fire"]] + }, { + "species": "Tapu Koko", + "item": "Electrium Z", + "ability": "Electric Surge", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Wild Charge"], ["Brave Bird"], ["U-turn"], ["Taunt"]] + }, { + "species": "Tapu Koko", + "item": "Electric Seed", + "ability": "Electric Surge", + "evs": {"def": 68, "spa": 196, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Thunderbolt"], ["Dazzling Gleam"], ["Roost"]] + }, { + "species": "Tapu Koko", + "item": "Light Clay", + "ability": "Electric Surge", + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Reflect"], ["Light Screen"], ["Volt Switch"], ["Taunt"]] + }] + }, + "tapulele": { + "flags": {}, + "sets": [{ + "species": "Tapu Lele", + "item": "Choice Scarf", + "ability": "Psychic Surge", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Psychic"], ["Moonblast"], ["Shadow Ball"], ["Hidden Power Fire", "Focus Blast"]] + }, { + "species": "Tapu Lele", + "item": "Choice Specs", + "ability": "Psychic Surge", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Moonblast"], ["Psyshock", "Shadow Ball"], ["Focus Blast", "Hidden Power Fire"]] + }, { + "species": "Tapu Lele", + "item": "Fightinium Z", + "ability": "Psychic Surge", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic", "Psyshock"], ["Moonblast"], ["Focus Blast"], ["Calm Mind"]] + }, { + "species": "Tapu Lele", + "item": "Psychium Z", + "ability": "Psychic Surge", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Moonblast"], ["Focus Blast", "Shadow Ball", "Hidden Power Fire"], ["Calm Mind", "Taunt"]] + }, { + "species": "Tapu Lele", + "item": "Assault Vest", + "ability": "Psychic Surge", + "evs": {"hp": 92, "spa": 252, "spd": 164}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Psychic"], ["Moonblast"], ["Shadow Ball"], ["Focus Blast", "Hidden Power Fire"]] + }] + }, + "terrakion": { + "flags": {}, + "sets": [{ + "species": "Terrakion", + "item": "Focus Sash", + "ability": "Justified", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Rock Tomb"], ["Stealth Rock"], ["Stone Edge", "Taunt", "Quick Attack"]] + }, { + "species": "Terrakion", + "item": "Rockium Z", + "ability": "Justified", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Stone Edge"], ["Swords Dance"], ["Quick Attack", "Earthquake", "Poison Jab"]] + }] + }, + "thundurus": { + "flags": {}, + "sets": [{ + "species": "Thundurus", + "item": "Electrium Z", + "ability": "Prankster", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Nasty Plot", "Thunder Wave", "Taunt"], ["Focus Blast", "Grass Knot", "Volt Switch"]] + }, { + "species": "Thundurus", + "item": "Fightinium Z", + "ability": "Prankster", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"], ["Nasty Plot"]] + }, { + "species": "Thundurus", + "item": "Sitrus Berry", + "ability": "Prankster", + "evs": {"hp": 244, "def": 168, "spa": 68, "spe": 28}, + "nature": "Bold", + "moves": [["Thunder Wave"], ["Thunderbolt"], ["Hidden Power Ice"], ["Taunt", "Volt Switch"]] + }, { + "species": "Thundurus", + "item": "Leftovers", + "ability": "Prankster", + "evs": {"hp": 244, "def": 28, "spa": 4, "spd": 204, "spe": 28}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Discharge"], ["Toxic"], ["Substitute"], ["Protect"]] + }, { + "species": "Thundurus", + "item": "Salac Berry", + "ability": "Prankster", + "evs": {"hp": 140, "def": 12, "spa": 164, "spd": 4, "spe": 188}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Substitute"], ["Nasty Plot"]] + }, { + "species": "Thundurus-Therian", + "item": "Choice Specs", + "ability": "Volt Absorb", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Ice"], ["Focus Blast", "Sludge Wave", "Grass Knot"]] + }, { + "species": "Thundurus-Therian", + "item": "Choice Scarf", + "ability": "Volt Absorb", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Hidden Power Ice"], ["Focus Blast", "Sludge Wave"]] + }, { + "species": "Thundurus-Therian", + "item": "Fightinium Z", + "ability": "Volt Absorb", + "ivs": {"atk": 0}, + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Nasty Plot"], ["Hidden Power Ice"], ["Focus Blast"]] + }, { + "species": "Thundurus-Therian", + "item": "Electrium Z", + "ability": "Volt Absorb", + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Nasty Plot", "Agility"], ["Hidden Power Ice"], ["Focus Blast", "Sludge Wave", "Grass Knot"]] + }] + }, + "togekiss": { + "flags": {}, + "sets": [{ + "species": "Togekiss", + "item": "Choice Scarf", + "ability": "Serene Grace", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Air Slash"], ["Fire Blast", "Flamethrower"], ["Aura Sphere", "Ancient Power"], ["Trick"]] + }, { + "species": "Togekiss", + "item": "Normalium Z", + "ability": "Serene Grace", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Yawn"], ["Air Slash"], ["Nasty Plot"], ["Flamethrower"]] + }, { + "species": "Togekiss", + "item": "Sitrus Berry", + "ability": "Serene Grace", + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Thunder Wave"], ["Roost"], ["Air Slash"], ["Nasty Plot", "Flamethrower"]] + }, { + "species": "Togekiss", + "item": "Firium Z", + "ability": "Serene Grace", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Nasty Plot"], ["Air Slash"], ["Thunder Wave", "Yawn"]] + }] + }, + "toxapex": { + "flags": {}, + "sets": [{ + "species": "Toxapex", + "item": "Black Sludge", + "ability": "Regenerator", + "evs": {"hp": 252, "def": 244, "spd": 12}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Toxic", "Baneful Bunker", "Toxic Spikes", "Iron Defense"], ["Recover"], ["Haze"]] + }, { + "species": "Toxapex", + "item": "Rocky Helmet", + "ability": "Regenerator", + "evs": {"hp": 252, "def": 244, "spd": 12}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Toxic", "Baneful Bunker", "Toxic Spikes", "Iron Defense"], ["Recover"], ["Haze"]] + }, { + "species": "Toxapex", + "item": "Black Sludge", + "ability": "Regenerator", + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Scald"], ["Toxic", "Baneful Bunker", "Toxic Spikes"], ["Recover"], ["Haze"]] + }] + }, + "tyranitar": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Tyranitar", + "item": "Rocky Helmet", + "ability": "Sand Stream", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Ice Beam"], ["Foul Play"], ["Flamethrower", "Fire Blast"]] + }, { + "species": "Tyranitar", + "item": "Rockium Z", + "ability": "Sand Stream", + "evs": {"hp": 172, "atk": 148, "def": 84, "spa": 100, "spe": 4}, + "nature": "Brave", + "moves": [["Stealth Rock"], ["Stone Edge"], ["Fire Blast"], ["Ice Beam"]] + }, { + "species": "Tyranitar", + "item": "Lum Berry", + "ability": "Sand Stream", + "evs": {"hp": 252, "atk": 44, "def": 4, "spd": 204, "spe": 4}, + "nature": "Careful", + "moves": [["Foul Play", "Rock Slide"], ["Pursuit"], ["Roar", "Rock Tomb"], ["Stealth Rock"]] + }, { + "species": "Tyranitar", + "item": "Expert Belt", + "ability": "Sand Stream", + "evs": {"hp": 252, "atk": 4, "def": 100, "spa": 20, "spd": 132}, + "nature": "Sassy", + "moves": [["Rock Tomb"], ["Ice Beam"], ["Fire Blast"], ["Roar", "Stealth Rock"]] + }, { + "species": "Tyranitar", + "item": "Lum Berry", + "ability": "Sand Stream", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Crunch"], ["Stone Edge", "Rock Slide"], ["Ice Punch", "Earthquake", "Fire Punch"]] + }, { + "species": "Tyranitar", + "item": "Choice Band", + "ability": "Sand Stream", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Crunch"], ["Stone Edge"], ["Ice Punch", "Earthquake", "Pursuit"], ["Superpower", "Fire Punch"]] + }, { + "species": "Tyranitar", + "item": "Choice Scarf", + "ability": "Sand Stream", + "evs": {"atk": 132, "spa": 180, "spe": 196}, + "nature": "Naive", + "moves": [["Rock Slide", "Stone Edge"], ["Ice Beam"], ["Fire Blast", "Superpower"], ["Crunch", "Rock Tomb", "Earthquake"]] + }, { + "species": "Tyranitar", + "item": "Assault Vest", + "ability": "Sand Stream", + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Crunch"], ["Stone Edge"], ["Ice Punch", "Earthquake", "Pursuit"], ["Superpower", "Fire Punch"]] + }, { + "species": "Tyranitar", + "item": "Tyranitarite", + "ability": "Sand Stream", + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Stone Edge", "Crunch"], ["Ice Punch", "Earthquake"], ["Fire Punch", "Low Kick"]] + }] + }, + "umbreon": { + "flags": {}, + "sets": [{ + "species": "Umbreon", + "item": "Normalium Z", + "ability": "Synchronize", + "evs": {"hp": 252, "def": 156, "spe": 100}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Celebrate"], ["Baton Pass"], ["Taunt", "Yawn"], ["Foul Play", "Substitute", "Double Team"]] + }, { + "species": "Umbreon", + "item": "Leftovers", + "ability": "Inner Focus", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Foul Play"], ["Toxic", "Yawn"], ["Wish", "Moonlight"], ["Protect"]] + }, { + "species": "Umbreon", + "item": "Rocky Helmet", + "ability": "Synchronize", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Foul Play"], ["Heal Bell"], ["Toxic"], ["Moonlight"]] + }] + }, + "venusaur": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Venusaur", + "item": "Venusaurite", + "ability": "Chlorophyll", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Sludge Bomb"], ["Giga Drain", "Hidden Power Fire"], ["Synthesis"], ["Leech Seed", "Sleep Powder"]] + }, { + "species": "Venusaur", + "item": "Venusaurite", + "ability": "Chlorophyll", + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Sludge Bomb"], ["Giga Drain"], ["Synthesis"], ["Hidden Power Fire", "Sleep Powder"]] + }, { + "species": "Venusaur", + "item": "Venusaurite", + "ability": "Chlorophyll", + "evs": {"hp": 252, "spd": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Sludge Bomb"], ["Leech Seed"], ["Synthesis"], ["Giga Drain"]] + }, { + "species": "Venusaur", + "item": "Venusaurite", + "ability": "Chlorophyll", + "evs": {"hp": 140, "def": 4, "spa": 252, "spd": 4, "spe": 108}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Sludge Bomb"], ["Leech Seed", "Giga Drain"], ["Hidden Power Fire"], ["Synthesis"]] + }] + }, + "volcarona": { + "flags": {}, + "sets": [{ + "species": "Volcarona", + "item": "Flyinium Z", + "ability": "Flame Body", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Quiver Dance"], ["Hurricane"], ["Flamethrower", "Fire Blast", "Fiery Dance"], ["Hidden Power Ground"]] + }, { + "species": "Volcarona", + "item": "Buginium Z", + "ability": "Swarm", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Bug Buzz"], ["Substitute"], ["Fiery Dance"]] + }, { + "species": "Volcarona", + "item": "Focus Sash", + "ability": "Flame Body", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Quiver Dance"], ["Fiery Dance", "Fire Blast"], ["Giga Drain"], ["Hidden Power Ice"]] + }, { + "species": "Volcarona", + "item": "Focus Sash", + "ability": "Swarm", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fiery Dance", "Fire Blast"], ["Bug Buzz"], ["Hidden Power Ice"]] + }, { + "species": "Volcarona", + "item": "Grassium Z", + "ability": "Flame Body", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Quiver Dance"], ["Giga Drain", "Solar Beam"], ["Fiery Dance", "Fire Blast"], ["Hidden Power Ice"]] + }, { + "species": "Volcarona", + "item": "Firium Z", + "ability": "Flame Body", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Quiver Dance"], ["Fire Blast", "Overheat"], ["Giga Drain", "Bug Buzz"], ["Hidden Power Ice"]] + }, { + "species": "Volcarona", + "item": "Kee Berry", + "ability": "Flame Body", + "evs": {"hp": 244, "def": 148, "spe": 116}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Flamethrower", "Fire Blast"], ["Quiver Dance"], ["Roost"], ["Will-O-Wisp"]] + }, { + "species": "Volcarona", + "item": "Normalium Z", + "ability": "Flame Body", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Hyper Beam"], ["Fiery Dance", "Fire Blast"], ["Giga Drain", "Bug Buzz"]] + }] + }, + "weavile": { + "flags": {}, + "sets": [{ + "species": "Weavile", + "item": "Life Orb", + "ability": "Pressure", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Low Kick"], ["Ice Shard"], ["Fake Out"]] + }, { + "species": "Weavile", + "item": "Focus Sash", + "ability": "Pressure", + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Low Kick", "Icicle Crash"], ["Ice Shard"], ["Fake Out"]] + }] + }, + "whimsicott": { + "flags": { + "limEevee": 1 + }, + "sets": [{ + "species": "Whimsicott", + "item": "Leftovers", + "ability": "Prankster", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Leech Seed"], ["Substitute"], ["Encore"], ["Protect", "Moonblast", "Taunt"]] + }, { + "species": "Whimsicott", + "item": "Rocky Helmet", + "ability": "Prankster", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Leech Seed"], ["Cotton Guard"], ["Encore", "Substitute"], ["Protect", "Moonblast", "Taunt"]] + }, { + "species": "Whimsicott", + "item": "Focus Sash", + "ability": "Prankster", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Charm", "Endeavor"], ["Light Screen", "Encore"], ["Memento", "Tailwind"], ["Moonblast"]] + }, { + "species": "Whimsicott", + "item": "Darkinium Z", + "ability": "Prankster", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Timid", + "moves": [["Memento"], ["Encore"], ["Taunt", "Moonblast"], ["Leech Seed", "Tailwind"]] + }] + }, + "xurkitree": { + "flags": {}, + "sets": [{ + "species": "Xurkitree", + "item": "Choice Scarf", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Energy Ball"], ["Volt Switch"]] + }, { + "species": "Xurkitree", + "item": "Psychium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hypnosis"], ["Tail Glow"], ["Thunderbolt"], ["Energy Ball", "Hidden Power Ice"]] + }, { + "species": "Xurkitree", + "item": "Waterium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Rain Dance"], ["Thunder"], ["Hidden Power Water"], ["Energy Ball", "Dazzling Gleam"]] + }, { + "species": "Xurkitree", + "item": "Electrium Z", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt", "Thunder"], ["Hidden Power Ice"], ["Energy Ball"], ["Volt Switch", "Tail Glow"]] + }, { + "species": "Xurkitree", + "item": "Shuca Berry", + "ability": "Beast Boost", + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Energy Ball"], ["Volt Switch", "Tail Glow"]] + }] + }, + "zapdos": { + "flags": {}, + "sets": [{ + "species": "Zapdos", + "item": "Rocky Helmet", + "ability": "Static", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Roost"], ["Discharge", "Volt Switch"], ["Heat Wave", "Toxic"], ["Hidden Power Ice"]] + }, { + "species": "Zapdos", + "item": "Choice Scarf", + "ability": "Static", + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Heat Wave"], ["Hidden Power Ice"]] + }, { + "species": "Zapdos", + "item": "Leftovers", + "ability": "Pressure", + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Roost"], ["Discharge", "Volt Switch"], ["Heat Wave", "Toxic"], ["Hidden Power Ice"]] + }] + } +} diff --git a/data/factory-sets.json b/data/factory-sets.json index 82e06afe7b56a..82aeaba0a4516 100644 --- a/data/factory-sets.json +++ b/data/factory-sets.json @@ -1 +1,15992 @@ -{"Uber":{"klefki":{"flags":{},"sets":[{"species":"Klefki","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Spikes"],["Thunder Wave"],["Toxic"],["Play Rough"]]}]},"zekrom":{"flags":{},"sets":[{"species":"Zekrom","gender":"","item":"Choice Band","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bolt Strike"],["Outrage"],["Dragon Claw"],["Volt Switch"]]},{"species":"Zekrom","gender":"","item":"Choice Scarf","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Bolt Strike"],["Volt Switch"],["Draco Meteor"],["Outrage"]]},{"species":"Zekrom","gender":"","item":"Choice Scarf","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bolt Strike"],["Volt Switch"],["Sleep Talk"],["Outrage"]]},{"species":"Zekrom","gender":"","item":"Life Orb","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Bolt Strike"],["Draco Meteor"],["Dragon Claw"],["Tailwind"]]},{"species":"Zekrom","gender":"","item":"Shuca Berry","ability":"Teravolt","evs":{"hp":132,"atk":252,"def":0,"spa":0,"spd":0,"spe":124},"nature":"Adamant","moves":[["Substitute","Outrage"],["Hone Claws"],["Bolt Strike"],["Dragon Claw"]]}]},"yveltal":{"flags":{},"sets":[{"species":"Yveltal","gender":"","item":"Choice Scarf","ability":"Dark Aura","evs":{"hp":0,"atk":32,"def":4,"spa":248,"spd":0,"spe":224},"nature":"Modest","moves":[["Dark Pulse"],["Oblivion Wing"],["Foul Play"],["U-turn"]]},{"species":"Yveltal","gender":"","item":"Life Orb","ability":"Dark Aura","evs":{"hp":132,"atk":28,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Rash","moves":[["Dark Pulse"],["Oblivion Wing"],["Sucker Punch"],["Heat Wave"]]},{"species":"Yveltal","gender":"","item":"Leftovers","ability":"Dark Aura","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Foul Play"],["Taunt"],["Sucker Punch"],["Roost"]]},{"species":"Yveltal","gender":"","item":"Leftovers","ability":"Dark Aura","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Taunt"],["Toxic"],["Roost"]]}]},"xerneas":{"flags":{},"sets":[{"species":"Xerneas","gender":"","item":"Life Orb","ability":"Fairy Aura","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Moonblast"],["Close Combat"],["Rock Slide"],["Aromatherapy"]]},{"species":"Xerneas","gender":"","item":"Choice Scarf","ability":"Fairy Aura","evs":{"hp":0,"atk":76,"def":0,"spa":248,"spd":0,"spe":184},"nature":"Rash","moves":[["Moonblast"],["Sleep Talk"],["Close Combat"],["Rock Slide"]]},{"species":"Xerneas","gender":"","item":"Leftovers","ability":"Fairy Aura","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Aromatherapy"],["Rest"],["Sleep Talk"],["Moonblast"]]},{"species":"Xerneas","gender":"","item":"Power Herb","ability":"Fairy Aura","evs":{"hp":184,"atk":0,"def":28,"spa":252,"spd":0,"spe":44},"nature":"Modest","moves":[["Geomancy"],["Moonblast"],["Focus Blast"],["Thunder"]]},{"species":"Xerneas","gender":"","item":"Power Herb","ability":"Fairy Aura","evs":{"hp":184,"atk":0,"def":28,"spa":252,"spd":0,"spe":44},"nature":"Modest","moves":[["Geomancy"],["Moonblast"],["Hidden Power Ground"],["Thunder"]],"ivs":{"spa":30,"spd":30}}]},"tyranitar":{"flags":{},"sets":[{"species":"Tyranitar","gender":"","item":"Leftovers","ability":"Sand Stream","evs":{"hp":248,"atk":0,"def":96,"spa":0,"spd":166,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Pursuit"],["Rock Slide"],["Thunder Wave","Roar"]]},{"species":"Tyranitar","gender":"","item":"Shuca Berry","ability":"Sand Stream","evs":{"hp":248,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Pursuit"],["Rock Slide"],["Thunder Wave","Roar"]]},{"species":"Tyranitar","gender":"","item":"Shuca Berry","ability":"Sand Stream","evs":{"hp":248,"atk":72,"def":0,"spa":0,"spd":188,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Low Kick"],["Rock Slide"],["Thunder Wave","Roar"]]}]},"shayminsky":{"flags":{},"sets":[{"species":"Shaymin-Sky","gender":"","item":"Life Orb","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Seed Flare"],["Air Slash"],["Earth Power"],["Healing Wish"]]},{"species":"Shaymin-Sky","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Leech Seed"],["Seed Flare"],["Air Slash"]]}]},"salamence":{"flags":{"megaOnly":1},"sets":[{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":200,"atk":252,"def":0,"spa":0,"spd":0,"spe":56},"nature":"Adamant","moves":[["Double-Edge"],["Refresh","Earthquake"],["Roost"],["Dragon Dance"]]},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":200,"atk":252,"def":0,"spa":0,"spd":0,"spe":56},"nature":"Adamant","moves":[["Return"],["Refresh","Earthquake"],["Roost"],["Dragon Dance"]],"happiness":255},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Return"],["Earthquake"],["Roost"],["Dragon Dance"]],"happiness":255},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":0,"spe":124},"nature":"Impish","moves":[["Return"],["Refresh"],["Roost"],["Dragon Dance"]],"happiness":255}]},"sableye":{"flags":{"megaOnly":1},"sets":[{"species":"Sableye","gender":"","item":"Sablenite","ability":"Prankster","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Protect","Fake Out"],["Will-O-Wisp"],["Recover"]]}]},"reshiram":{"flags":{},"sets":[{"species":"Reshiram","gender":"","item":"Choice Scarf","ability":"Turboblaze","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Blue Flare"],["Draco Meteor"],["Sleep Talk"],["Stone Edge"]]},{"species":"Reshiram","gender":"","item":"Life Orb","ability":"Turboblaze","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Flame Charge"],["Blue Flare"],["Draco Meteor"],["Stone Edge"]]},{"species":"Reshiram","gender":"","item":"Leftovers","ability":"Turboblaze","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Blue Flare"],["Draco Meteor"],["Toxic"],["Roost"]]}]},"rayquaza":{"flags":{},"sets":[{"species":"Rayquaza","gender":"","item":"Life Orb","ability":"Air Lock","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Dragon Ascent"],["Earthquake"],["Extreme Speed"]]},{"species":"Rayquaza","gender":"","item":"Life Orb","ability":"Air Lock","evs":{"hp":0,"atk":40,"def":0,"spa":252,"spd":0,"spe":216},"nature":"Rash","moves":[["Draco Meteor"],["Dragon Ascent"],["Extreme Speed"],["Earthquake"]]},{"species":"Rayquaza","gender":"","item":"Life Orb","ability":"Air Lock","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Dragon Ascent"],["Earthquake"],["Extreme Speed"]]}]},"palkia":{"flags":{},"sets":[{"species":"Palkia","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Draco Meteor"],["Spacial Rend"],["Fire Blast"]]},{"species":"Palkia","gender":"","item":"Lustrous Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Spacial Rend"],["Fire Blast"],["Thunder Wave"]]},{"species":"Palkia","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Surf"],["Toxic"],["Rest"],["Sleep Talk"]]},{"species":"Palkia","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":60,"atk":0,"def":0,"spa":196,"spd":0,"spe":252},"nature":"Timid","moves":[["Rest"],["Toxic"],["Hydro Pump"],["Spacial Rend"]]}]},"mewtwo":{"flags":{},"sets":[{"species":"Mewtwo","gender":"","item":"Mewtwonite X","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Ice Beam"],["Low Kick"],["Earthquake"],["Rock Slide"]]},{"species":"Mewtwo","gender":"","item":"Mewtwonite X","ability":"Pressure","evs":{"hp":176,"atk":80,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Low Kick"],["Taunt"],["Earthquake"],["Ice Beam"]]},{"species":"Mewtwo","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psystrike"],["Calm Mind"],["Ice Beam"],["Focus Blast"]]},{"species":"Mewtwo","gender":"","item":"Mewtwonite Y","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psystrike"],["Calm Mind"],["Ice Beam"],["Focus Blast"]]}]},"mawile":{"flags":{"megaOnly":1},"sets":[{"species":"Mawile","gender":"","item":"Mawilite","ability":"Intimidate","evs":{"hp":248,"atk":16,"def":0,"spa":0,"spd":244,"spe":0},"nature":"Adamant","moves":[["Iron Head"],["Play Rough"],["Sucker Punch"],["Baton Pass"]]}]},"lugia":{"flags":{},"sets":[{"species":"Lugia","gender":"","item":"Leftovers","ability":"Multiscale","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Roost"],["Ice Beam"],["Whirlwind"],["Toxic"]]}]},"lucario":{"flags":{"megaOnly":1},"sets":[{"species":"Lucario","gender":"","item":"Lucarionite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Bullet Punch"],["Stone Edge"],["Iron Tail"]]}]},"latios":{"flags":{},"sets":[{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Defog"],["Memento","Recover"]]},{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Defog"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Calm Mind"],["Memento","Recover"]]},{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Calm Mind"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"latias":{"flags":{},"sets":[{"species":"Latias","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":212,"atk":0,"def":0,"spa":120,"spd":0,"spe":176},"nature":"Timid","moves":[["Defog"],["Draco Meteor"],["Psyshock"],["Recover","Healing Wish"]]},{"species":"Latias","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":80,"atk":0,"def":0,"spa":252,"spd":0,"spe":176},"nature":"Timid","moves":[["Calm Mind"],["Draco Meteor"],["Psyshock"],["Recover"]]}]},"kyuremwhite":{"flags":{},"sets":[{"species":"Kyurem-White","gender":"","item":"Choice Specs","ability":"Turboblaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Ice Beam"],["Fusion Flare"],["Earth Power"]]},{"species":"Kyurem-White","gender":"","item":"Life Orb","ability":"Turboblaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Ice Beam"],["Fusion Flare"],["Stone Edge"]]}]},"kyogre":{"flags":{},"sets":[{"species":"Kyogre","gender":"","item":"Blue Orb","ability":"Drizzle","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Origin Pulse"],["Thunder"],["Ice Beam"],["Calm Mind"]]},{"species":"Kyogre","gender":"","item":"Blue Orb","ability":"Drizzle","evs":{"hp":248,"atk":0,"def":248,"spa":0,"spd":0,"spe":12},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Scald"],["Ice Beam","Roar"]]},{"species":"Kyogre","gender":"","item":"Blue Orb","ability":"Drizzle","evs":{"hp":248,"atk":0,"def":0,"spa":248,"spd":0,"spe":12},"nature":"Modest","moves":[["Origin Pulse"],["Thunder","Rest","Substitute"],["Ice Beam"],["Calm Mind"]]},{"species":"Kyogre","gender":"","item":"Choice Specs","ability":"Drizzle","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Water Spout"],["Origin Pulse","Scald"],["Ice Beam"],["Thunder"]]},{"species":"Kyogre","gender":"","item":"Choice Scarf","ability":"Drizzle","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Water Spout"],["Ice Beam"],["Origin Pulse"],["Thunder","Sleep Talk"]]}]},"kangaskhan":{"flags":{"megaOnly":1},"sets":[{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Return"],["Fake Out"],["Power-Up Punch"],["Crunch"]],"happiness":255},{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Double-Edge"],["Fake Out"],["Sucker Punch"],["Low Kick"]]},{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return"],["Fake Out"],["Sucker Punch"],["Low Kick"]],"happiness":255}]},"hooh":{"flags":{},"sets":[{"species":"Ho-Oh","gender":"","item":"Choice Band","ability":"Regenerator","evs":{"hp":248,"atk":208,"def":0,"spa":0,"spd":52,"spe":0},"nature":"Adamant","moves":[["Brave Bird"],["Sacred Fire"],["Earthquake"],["Sleep Talk"]]},{"species":"Ho-Oh","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":248,"atk":208,"def":0,"spa":0,"spd":52,"spe":0},"nature":"Adamant","moves":[["Brave Bird"],["Sacred Fire"],["Recover"],["Thunder Wave","Earthquake","Substitute"]]}]},"groudon":{"flags":{},"sets":[{"species":"Groudon","gender":"","item":"Red Orb","ability":"Drought","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":200,"spe":56},"nature":"Adamant","moves":[["Rock Polish"],["Precipice Blades","Earthquake"],["Stone Edge"],["Swords Dance","Dragon Claw"]]},{"species":"Groudon","gender":"","item":"Red Orb","ability":"Drought","evs":{"hp":248,"atk":0,"def":56,"spa":0,"spd":192,"spe":12},"nature":"Impish","moves":[["Stealth Rock"],["Precipice Blades","Earthquake"],["Lava Plume","Stone Edge"],["Thunder Wave","Roar"]]},{"species":"Groudon","gender":"","item":"Red Orb","ability":"Drought","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":252,"spe":0},"nature":"Calm","moves":[["Lava Plume"],["Roar"],["Rest"],["Sleep Talk"]]},{"species":"Groudon","gender":"","item":"Leftovers","ability":"Drought","evs":{"hp":248,"atk":0,"def":248,"spa":0,"spd":0,"spe":12},"nature":"Impish","moves":[["Precipice Blades"],["Stealth Rock"],["Stone Edge"],["Dragon Tail","Roar"]]}]},"greninja":{"flags":{},"sets":[{"species":"Greninja","gender":"","item":"Focus Sash","ability":"Protean","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Toxic Spikes"],["Spikes"],["Taunt"],["Shadow Sneak"]]},{"species":"Greninja","gender":"","item":"Focus Sash","ability":"Protean","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Toxic Spikes"],["Scald"],["Taunt"],["Shadow Sneak"]]}]},"giratina":{"flags":{},"sets":[{"species":"Giratina","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Will-O-Wisp"],["Roar"]]},{"species":"Giratina","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Rest"],["Sleep Talk"],["Will-O-Wisp"],["Roar"]]}]},"giratinaorigin":{"flags":{},"sets":[{"species":"Giratina-Origin","gender":"","item":"Griseous Orb","ability":"Levitate","evs":{"hp":0,"atk":180,"def":0,"spa":252,"spd":0,"spe":76},"nature":"Rash","moves":[["Draco Meteor"],["Shadow Sneak"],["Dragon Tail"],["Defog"]]},{"species":"Giratina-Origin","gender":"","item":"Griseous Orb","ability":"Levitate","evs":{"hp":0,"atk":244,"def":252,"spa":0,"spd":0,"spe":12},"nature":"Adamant","moves":[["Defog"],["Shadow Sneak"],["Dragon Tail"],["Shadow Force"]]}]},"gengar":{"flags":{"megaOnly":1},"sets":[{"species":"Gengar","gender":"","item":"Gengarite","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Taunt"],["Destiny Bond"],["Sludge Wave"],["Focus Blast"]]},{"species":"Gengar","gender":"","item":"Gengarite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":84,"spe":176},"nature":"Timid","moves":[["Perish Song"],["Taunt"],["Protect"],["Disable"]]}]},"genesect":{"flags":{},"sets":[{"species":"Genesect","gender":"","item":"Choice Scarf","ability":"Download","evs":{"hp":0,"atk":248,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Hasty","moves":[["U-turn"],["Iron Head"],["Explosion"],["Ice Beam"]]}]},"ferrothorn":{"flags":{},"sets":[{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Leech Seed"],["Spikes"],["Power Whip","Gyro Ball"],["Protect"]]},{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Leech Seed"],["Spikes"],["Power Whip"],["Protect","Gyro Ball"]]}]},"excadrill":{"flags":{},"sets":[{"species":"Excadrill","gender":"","item":"Life Orb","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Iron Head"],["Earthquake"],["Rock Slide"],["Rapid Spin"]]},{"species":"Excadrill","gender":"","item":"Air Balloon","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"moves":[["Iron Head"],["Earthquake"],["Swords Dance"],["Rapid Spin"]]}]},"dialga":{"flags":{},"sets":[{"species":"Dialga","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":252,"spe":0},"nature":"Calm","moves":[["Stealth Rock"],["Toxic"],["Draco Meteor"],["Fire Blast"]]},{"species":"Dialga","gender":"","item":"Shuca Berry","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Draco Meteor"],["Flash Cannon"],["Fire Blast"],["Stealth Rock"]]}]},"deoxys":{"flags":{},"sets":[{"species":"Deoxys","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psycho Boost"],["Stealth Rock"],["Spikes"],["Taunt"]]}]},"deoxysattack":{"flags":{},"sets":[{"species":"Deoxys-Attack","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Psycho Boost"],["Low Kick"],["Ice Beam"],["Extreme Speed"]]},{"species":"Deoxys-Attack","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Spikes"],["Psycho Boost"],["Knock Off"],["Extreme Speed"]]}]},"deoxysdefense":{"flags":{},"sets":[{"species":"Deoxys-Defense","gender":"","item":"Mental Herb","ability":"Pressure","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Recover"],["Spikes"],["Skill Swap"],["Toxic"]]}]},"deoxysspeed":{"flags":{},"sets":[{"species":"Deoxys-Speed","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Taunt"],["Spikes"],["Knock Off"]]},{"species":"Deoxys-Speed","gender":"","item":"Light Clay","ability":"Pressure","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Taunt"],["Reflect"],["Light Screen"]]}]},"darkrai":{"flags":{},"sets":[{"species":"Darkrai","gender":"","item":"Life Orb","ability":"Bad Dreams","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Dark Void"],["Dark Pulse"],["Nasty Plot","Taunt"],["Sludge Bomb","Thunder","Focus Blast"]]}]},"blissey":{"flags":{},"sets":[{"species":"Blissey","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":20,"atk":0,"def":232,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Ice Beam"],["Toxic"],["Soft-Boiled","Wish"],["Heal Bell","Protect"]]},{"species":"Blissey","gender":"","item":"Shed Shell","ability":"Natural Cure","nature":"Calm","moves":[["Toxic"],["Seismic Toss","Snatch"],["Soft-Boiled","Wish"],["Heal Bell","Protect"]]}]},"blaziken":{"flags":{},"sets":[{"species":"Blaziken","gender":"","item":"Leftovers","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Baton Pass"],["Protect"],["Swords Dance"],["Flare Blitz"]]},{"species":"Blaziken","gender":"","item":"Blazikenite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Stone Edge","Knock Off"]]},{"species":"Blaziken","gender":"","item":"Blazikenite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Blaziken","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Blaziken","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Stone Edge","Knock Off"]]}]},"arceuswater":{"flags":{},"sets":[{"species":"Arceus-Water","gender":"","item":"Splash Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Ice Beam","Judgment"],["Defog"],["Recover"],["Toxic"]]}]},"arceussteel":{"flags":{},"sets":[{"species":"Arceus-Steel","gender":"","item":"Iron Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":84,"spd":0,"spe":176},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Recover"],["Earth Power","Thunder"]]},{"species":"Arceus-Steel","gender":"","item":"Iron Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Iron Head"],["Earthquake"],["Stone Edge","Recover","Extreme Speed"]]}]},"arceusfire":{"flags":{},"sets":[{"species":"Arceus-Fire","gender":"","item":"Flame Plate","ability":"Multitype","evs":{"hp":200,"atk":0,"def":0,"spa":252,"spd":0,"spe":56},"nature":"Modest","moves":[["Overheat","Fire Blast"],["Calm Mind"],["Thunder"],["Earth Power"]]}]},"arceusflying":{"flags":{},"sets":[{"species":"Arceus-Flying","gender":"","item":"Sky Plate","ability":"Multitype","evs":{"hp":96,"atk":0,"def":0,"spa":236,"spd":0,"spe":0},"nature":"Timid","moves":[["Judgment"],["Calm Mind"],["Recover"],["Refresh","Earth Power","Substitute"]]}]},"arceuspsychic":{"flags":{},"sets":[{"species":"Arceus-Psychic","gender":"","item":"Mind Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Fire Blast","Payback"],["Ice Beam"],["Recover"],["Toxic"]]}]},"arceuspoison":{"flags":{},"sets":[{"species":"Arceus-Poison","gender":"","item":"Toxic Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Impish","moves":[["Defog"],["Poison Jab"],["Thunder Wave"],["Recover"]]}]},"arceusbug":{"flags":{},"sets":[{"species":"Arceus-Bug","gender":"","item":"Insect Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["X-Scissor"],["Stone Edge"],["Earthquake"]]}]},"arceusfighting":{"flags":{},"sets":[{"species":"Arceus-Fighting","gender":"","item":"Fist Plate","ability":"Multitype","evs":{"hp":0,"atk":0,"def":40,"spa":252,"spd":0,"spe":216},"nature":"Modest","moves":[["Judgment"],["Thunder Wave"],["Recover"],["Ice Beam","Stone Edge"]]}]},"arceusfairy":{"flags":{},"sets":[{"species":"Arceus-Fairy","gender":"","item":"Pixie Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Judgment"],["Recover"],["Defog"],["Toxic"]]},{"species":"Arceus-Fairy","gender":"","item":"Pixie Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Judgment"],["Calm Mind"],["Recover"],["Earth Power","Thunder"]]}]},"arceusice":{"flags":{},"sets":[{"species":"Arceus-Ice","gender":"","item":"Icicle Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Judgment"],["Recover"],["Calm Mind"],["Thunder","Fire Blast"]]}]},"arceusrock":{"flags":{},"sets":[{"species":"Arceus-Rock","gender":"","item":"Stone Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Judgment"],["Defog"],["Recover"],["Will-O-Wisp"]]}]},"arceusghost":{"flags":{},"sets":[{"species":"Arceus-Ghost","gender":"","item":"Spooky Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Recover"],["Will-O-Wisp"]]},{"species":"Arceus-Ghost","gender":"","item":"Spooky Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Shadow Force"],["Shadow Claw","Brick Break"],["Extreme Speed"]]},{"species":"Arceus-Ghost","gender":"","item":"Spooky Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Shadow Force"],["Shadow Claw"],["Brick Break"]]}]},"arceusdragon":{"flags":{},"sets":[{"species":"Arceus-Dragon","gender":"","item":"Draco Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Judgment"],["Defog"],["Recover"],["Toxic"]]},{"species":"Arceus-Dragon","gender":"","item":"Draco Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":84,"spd":0,"spe":176},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Fire Blast"],["Recover"]]}]},"arceus":{"flags":{},"sets":[{"species":"Arceus","gender":"","item":"Life Orb","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Extreme Speed"],["Earthquake"],["Stone Edge","Shadow Claw"]]},{"species":"Arceus","gender":"","item":"Silk Scarf","ability":"Multitype","evs":{"hp":200,"atk":252,"def":0,"spa":0,"spd":0,"spe":56},"nature":"Adamant","moves":[["Swords Dance"],["Extreme Speed"],["Earthquake","Shadow Force"],["Refresh"]]}]},"arceusdark":{"flags":{},"sets":[{"species":"Arceus-Dark","gender":"","item":"Dread Plate","ability":"Multitype","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":144,"spe":112},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Recover"],["Refresh"]]}]},"arceusgrass":{"flags":{},"sets":[{"species":"Arceus-Grass","gender":"","item":"Meadow Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":144,"spe":112},"nature":"Timid","moves":[["Grass Knot"],["Recover"],["Ice Beam"],["Defog"]]}]},"arceuselectric":{"flags":{},"sets":[{"species":"Arceus-Electric","gender":"","item":"Zap Plate","ability":"Multitype","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Ice Beam"],["Recover"]]}]},"arceusground":{"flags":{},"sets":[{"species":"Arceus-Ground","gender":"","item":"Earth Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Earthquake"],["Stone Edge"],["Recover","Extreme Speed"]]}]},"aegislash":{"flags":{},"sets":[{"species":"Aegislash","gender":"","item":"Leftovers","ability":"Stance Change","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["King's Shield"],["Toxic"],["Gyro Ball"],["Pursuit"]]}]},"scizor":{"flags":{"megaOnly":1},"sets":[{"species":"Scizor","gender":"","item":"Scizorite","ability":"Technician","evs":{"hp":212,"atk":60,"def":152,"spa":0,"spd":84,"spe":0},"nature":"Impish","moves":[["Toxic"],["Roost"],["Defog"],["Bullet Punch"]]}]},"diancie":{"flags":{"megaOnly":1},"sets":[{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":68,"def":0,"spa":188,"spd":0,"spe":252},"nature":"Hasty","moves":[["Diamond Storm"],["Moonblast"],["Earth Power","Protect"],["Stealth Rock"]]},{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":68,"def":0,"spa":188,"spd":0,"spe":252},"nature":"Hasty","moves":[["Diamond Storm"],["Moonblast"],["Earth Power"],["Protect"]]}]},"landorus":{"flags":{},"sets":[{"species":"Landorus","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Knock Off"],["Earth Power"],["Rock Slide"],["Sludge Wave"]]},{"species":"Landorus","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Knock Off"],["Earth Power"],["Rock Slide"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]}},"OU":{"diancie":{"flags":{"megaOnly":1},"sets":[{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":44,"atk":32,"def":0,"spa":252,"spd":0,"spe":180},"nature":"Rash","moves":[["Moonblast"],["Diamond Storm"],["Earth Power"],["Rock Polish"]]},{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Moonblast"],["Earth Power"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":32,"def":0,"spa":224,"spd":0,"spe":252},"nature":"Naive","moves":[["Diamond Storm"],["Moonblast"],["Earth Power"],["Protect"]]}]},"hippowdon":{"flags":{},"sets":[{"species":"Hippowdon","gender":"M","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Slack Off"],["Stealth Rock"],["Stone Edge"],["Earthquake"]]},{"species":"Hippowdon","gender":"M","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Slack Off"],["Stealth Rock"],["Stone Edge"],["Earthquake"]]},{"species":"Hippowdon","gender":"M","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":144,"spa":0,"spd":112,"spe":0},"nature":"Careful","moves":[["Slack Off"],["Stealth Rock"],["Whirlwind"],["Earthquake"]]}]},"jirachi":{"flags":{},"sets":[{"species":"Jirachi","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":160,"def":0,"spa":0,"spd":0,"spe":96},"nature":"Jolly","moves":[["Iron Head"],["Fire Punch"],["Substitute"],["Toxic"]]},{"species":"Jirachi","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":224,"spe":32},"nature":"Careful","moves":[["Wish"],["Protect"],["Iron Head"],["Body Slam"]]},{"species":"Jirachi","gender":"","item":"Choice Scarf","ability":"Serene Grace","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Iron Head"],["Ice Punch"],["Fire Punch"]]}]},"celebi":{"flags":{},"sets":[{"species":"Celebi","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":148,"spe":108},"nature":"Bold","moves":[["Baton Pass"],["Nasty Plot"],["Giga Drain"],["Recover"]]},{"species":"Celebi","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":84,"spe":16},"nature":"Calm","moves":[["Thunder Wave"],["Recover"],["Giga Drain"],["Stealth Rock"]]}]},"zygarde":{"flags":{},"sets":[{"species":"Zygarde","gender":"","item":"Life Orb","ability":"Aura Break","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Earthquake"],["Outrage"],["Extreme Speed"]]},{"species":"Zygarde","gender":"","item":"Leftovers","ability":"Aura Break","evs":{"hp":200,"atk":0,"def":0,"spa":0,"spd":252,"spe":56},"nature":"Careful","moves":[["Substitute"],["Coil"],["Earthquake"],["Dragon Tail"]]}]},"weavile":{"flags":{},"sets":[{"species":"Weavile","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Ice Punch"],["Knock Off"],["Ice Shard"],["Low Kick"]]},{"species":"Weavile","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pursuit"],["Knock Off"],["Ice Shard"],["Icicle Crash"]]}]},"volcarona":{"flags":{},"sets":[{"species":"Volcarona","gender":"","item":"Leftovers","ability":"Flame Body","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":0,"spe":124},"nature":"Bold","moves":[["Quiver Dance"],["Fiery Dance"],["Giga Drain"],["Roost"]]},{"species":"Volcarona","gender":"","item":"Lum Berry","ability":"Flame Body","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Modest","moves":[["Quiver Dance"],["Fire Blast"],["Giga Drain"],["Bug Buzz"]]}]},"victini":{"flags":{},"sets":[{"species":"Victini","gender":"","item":"Choice Band","ability":"Victory Star","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["V-create"],["Bolt Strike"],["Brick Break"],["U-turn"]]},{"species":"Victini","gender":"","item":"Choice Scarf","ability":"Victory Star","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["V-create"],["Bolt Strike"],["U-turn"],["Final Gambit"]]},{"species":"Victini","gender":"","item":"Expert Belt","ability":"Victory Star","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Blue Flare"],["Thunder"],["Glaciate"],["Focus Blast"]]},{"species":"Victini","gender":"","item":"Leftovers","ability":"Victory Star","evs":{"hp":248,"atk":32,"def":68,"spa":0,"spd":0,"spe":160},"nature":"Adamant","moves":[["Taunt"],["V-create"],["Will-O-Wisp"],["Bolt Strike"]]},{"species":"Victini","gender":"","item":"Leftovers","ability":"Victory Star","evs":{"hp":96,"atk":252,"def":0,"spa":0,"spd":0,"spe":160},"nature":"Adamant","moves":[["Substitute"],["V-create"],["Bolt Strike"],["Power-Up Punch"]]}]},"tornadustherian":{"flags":{},"sets":[{"species":"Tornadus-Therian","gender":"","item":"Assault Vest","ability":"Regenerator","evs":{"hp":132,"atk":0,"def":0,"spa":160,"spd":0,"spe":216},"nature":"Timid","moves":[["Hurricane"],["Focus Blast"],["Knock Off"],["U-turn"]]},{"species":"Tornadus-Therian","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":0,"atk":76,"def":0,"spa":216,"spd":0,"spe":216},"nature":"Naive","moves":[["Hurricane"],["Superpower"],["U-turn"],["Taunt"]]}]},"togekiss":{"flags":{},"sets":[{"species":"Togekiss","gender":"","item":"Lum Berry","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Modest","moves":[["Nasty Plot"],["Air Slash"],["Aura Sphere"],["Roost"]]},{"species":"Togekiss","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Thunder Wave"],["Air Slash"],["Defog"],["Roost"]]}]},"staraptor":{"flags":{},"sets":[{"species":"Staraptor","gender":"","item":"Choice Band","ability":"Reckless","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Close Combat"],["U-turn"],["Double-Edge"]]},{"species":"Staraptor","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Double-Edge"],["Close Combat"],["U-turn"]]}]},"thundurustherian":{"flags":{},"sets":[{"species":"Thundurus-Therian","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus-Therian","gender":"","item":"Choice Scarf","ability":"Volt Absorb","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"],["U-turn"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus-Therian","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":128,"atk":0,"def":0,"spa":252,"spd":0,"spe":128},"nature":"Modest","moves":[["Agility"],["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"scolipede":{"flags":{},"sets":[{"species":"Scolipede","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":16,"atk":252,"def":4,"spa":0,"spd":0,"spe":236},"nature":"Adamant","moves":[["Megahorn"],["Earthquake"],["Poison Jab"],["Protect"]]}]},"medicham":{"flags":{"megaOnly":1},"sets":[{"species":"Medicham","gender":"","item":"Medichamite","ability":"Pure Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["High Jump Kick"],["Zen Headbutt"],["Fake Out"],["Ice Punch"]]}]},"manaphy":{"flags":{},"sets":[{"species":"Manaphy","gender":"","item":"Leftovers","ability":"Hydration","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Calm Mind"],["Rest"],["Rain Dance"],["Scald"]]},{"species":"Manaphy","gender":"","item":"Leftovers","ability":"Hydration","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Timid","moves":[["Tail Glow"],["Surf"],["Ice Beam"],["Energy Ball"]]},{"species":"Manaphy","gender":"","item":"Leftovers","ability":"Hydration","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Timid","moves":[["Tail Glow"],["Rain Dance"],["Scald"],["Psychic"]]}]},"klefki":{"flags":{},"sets":[{"species":"Klefki","gender":"","item":"Light Clay","ability":"Prankster","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Reflect"],["Light Screen"],["Spikes"],["Foul Play"]]},{"species":"Klefki","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Thunder Wave"],["Magnet Rise"],["Spikes"],["Play Rough"]]}]},"hawlucha":{"flags":{},"sets":[{"species":"Hawlucha","gender":"","item":"Sitrus Berry","ability":"Unburden","evs":{"hp":12,"atk":252,"def":0,"spa":0,"spd":0,"spe":244},"nature":"Jolly","moves":[["Substitute"],["Swords Dance"],["High Jump Kick"],["Acrobatics"]]},{"species":"Hawlucha","gender":"","item":"Power Herb","ability":"Unburden","evs":{"hp":12,"atk":252,"def":0,"spa":0,"spd":0,"spe":244},"nature":"Jolly","moves":[["Sky Attack"],["Swords Dance"],["High Jump Kick"],["Acrobatics"]]}]},"diggersby":{"flags":{},"sets":[{"species":"Diggersby","gender":"","item":"Choice Scarf","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return"],["Earthquake"],["Fire Punch"],["U-turn"]],"happiness":255},{"species":"Diggersby","gender":"","item":"Focus Sash","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Return"],["Quick Attack"]],"happiness":255},{"species":"Diggersby","gender":"","item":"Life Orb","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Return"],["Quick Attack"]],"happiness":255},{"species":"Diggersby","gender":"","item":"Focus Sash","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Return"],["Fire Punch"]],"happiness":255}]},"crawdaunt":{"flags":{},"sets":[{"species":"Crawdaunt","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Crabhammer"],["Knock Off"],["Aqua Jet"],["Swords Dance"]]},{"species":"Crawdaunt","gender":"","item":"Choice Band","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Crabhammer"],["Knock Off"],["Aqua Jet"],["Crunch"]]}]},"alakazam":{"flags":{},"sets":[{"species":"Alakazam","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Hidden Power Ice"],["Thunder Wave"]],"ivs":{"atk":30,"def":30}},{"species":"Alakazam","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Focus Blast"],["Encore"]]},{"species":"Alakazam","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Focus Blast"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Alakazam","gender":"","item":"Alakazite","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Focus Blast"],["Encore"]]}]},"zapdos":{"flags":{},"sets":[{"species":"Zapdos","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":252,"atk":0,"def":168,"spa":68,"spd":0,"spe":20},"nature":"Bold","moves":[["Thunderbolt"],["Roost"],["Defog"],["Heat Wave"]]}]},"venusaur":{"flags":{"megaOnly":1},"sets":[{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Leech Seed"]]},{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":232,"atk":0,"def":0,"spa":252,"spd":4,"spe":20},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fire"],["Synthesis"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"tyranitar":{"flags":{},"sets":[{"species":"Tyranitar","gender":"","item":"Choice Scarf","ability":"Sand Stream","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pursuit"],["Crunch"],["Stone Edge"],["Superpower"]]},{"species":"Tyranitar","gender":"","item":"Tyranitarite","ability":"Sand Stream","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Stone Edge"],["Superpower"],["Ice Punch"]]},{"species":"Tyranitar","gender":"","item":"Leftovers","ability":"Sand Stream","evs":{"hp":248,"atk":0,"def":80,"spa":0,"spd":180,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Stone Edge"],["Ice Beam"],["Pursuit"]]},{"species":"Tyranitar","gender":"","item":"Choice Band","ability":"Sand Stream","evs":{"hp":100,"atk":252,"def":0,"spa":0,"spd":0,"spe":156},"nature":"Adamant","moves":[["Pursuit"],["Crunch"],["Stone Edge"],["Superpower"]]}]},"thundurus":{"flags":{},"sets":[{"species":"Thundurus","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":76,"def":0,"spa":180,"spd":0,"spe":252},"nature":"Naive","moves":[["Thunderbolt"],["Knock Off"],["Superpower"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunder Wave"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":30,"def":30}}]},"terrakion":{"flags":{},"sets":[{"species":"Terrakion","gender":"","item":"Choice Scarf","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Stone Edge"],["X-Scissor"],["Rock Slide"]]},{"species":"Terrakion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Close Combat"],["Stone Edge"],["Swords Dance"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Terrakion","gender":"","item":"Focus Sash","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Close Combat"],["Stone Edge"],["Taunt"]]},{"species":"Terrakion","gender":"","item":"Lum Berry","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Rock Polish"],["Stone Edge"],["Close Combat"]]}]},"talonflame":{"flags":{},"sets":[{"species":"Talonflame","gender":"","ability":"Gale Wings","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Bulk Up"],["Acrobatics"],["Roost"],["Taunt"]]},{"species":"Talonflame","gender":"","item":"Choice Band","ability":"Gale Wings","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Brave Bird"],["Flare Blitz"],["U-turn"],["Steel Wing"]]},{"species":"Talonflame","gender":"","ability":"Gale Wings","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Acrobatics"],["Taunt"],["Roost"],["Will-O-Wisp"]]},{"species":"Talonflame","gender":"","item":"Sharp Beak","ability":"Gale Wings","evs":{"hp":88,"atk":252,"def":0,"spa":0,"spd":0,"spe":168},"nature":"Jolly","moves":[["Swords Dance"],["Brave Bird"],["Flare Blitz"],["Roost"]]},{"species":"Talonflame","gender":"","item":"Liechi Berry","ability":"Gale Wings","evs":{"hp":88,"atk":252,"def":0,"spa":0,"spd":0,"spe":168},"nature":"Jolly","moves":[["Swords Dance"],["Natural Gift"],["Brave Bird"],["Flare Blitz"]]},{"species":"Talonflame","gender":"","item":"Leftovers","ability":"Gale Wings","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Jolly","moves":[["Swords Dance"],["Brave Bird"],["Will-O-Wisp"],["Roost"]]}]},"sylveon":{"flags":{},"sets":[{"species":"Sylveon","gender":"","item":"Choice Specs","ability":"Pixilate","evs":{"hp":244,"atk":0,"def":0,"spa":252,"spd":0,"spe":12},"nature":"Modest","moves":[["Hyper Voice"],["Psyshock"],["Shadow Ball"],["Baton Pass"]]}]},"slowbro":{"flags":{},"sets":[{"species":"Slowbro","gender":"","item":"Slowbronite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":80,"spa":0,"spd":176,"spe":0},"nature":"Bold","moves":[["Scald"],["Calm Mind"],["Slack Off"],["Psyshock"]]},{"species":"Slowbro","gender":"","item":"Slowbronite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Fire Blast"],["Scald"],["Psyshock"],["Slack Off"]]},{"species":"Slowbro","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":232,"spa":0,"spd":24,"spe":0},"nature":"Bold","moves":[["Scald"],["Psyshock"],["Thunder Wave"],["Slack Off"]]}]},"skarmory":{"flags":{},"sets":[{"species":"Skarmory","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Iron Head"],["Spikes"],["Roost"],["Whirlwind"]]},{"species":"Skarmory","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Roost"],["Defog"],["Brave Bird"],["Whirlwind"]]},{"species":"Skarmory","gender":"F","item":"Custap Berry","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Spikes"],["Taunt"],["Stealth Rock"]]}]},"scizor":{"flags":{},"sets":[{"species":"Scizor","gender":"","item":"Scizorite","ability":"Light Metal","evs":{"hp":248,"atk":84,"def":0,"spa":0,"spd":176,"spe":0},"nature":"Impish","moves":[["Swords Dance"],["Roost"],["Bullet Punch"],["Knock Off"]]},{"species":"Scizor","gender":"","item":"Choice Band","ability":"Technician","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":8,"spe":0},"nature":"Adamant","moves":[["U-turn"],["Bullet Punch"],["Knock Off"],["Superpower"]]},{"species":"Scizor","gender":"","item":"Scizorite","ability":"Light Metal","evs":{"hp":252,"atk":4,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Defog"],["Roost"],["Bullet Punch"],["Knock Off"]]},{"species":"Scizor","gender":"","item":"Scizorite","ability":"Light Metal","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Bullet Punch"],["Bug Bite"],["Superpower"]]}]},"sableye":{"flags":{"megaOnly":1},"sets":[{"species":"Sableye","gender":"","item":"Sablenite","ability":"Prankster","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Recover"],["Shadow Ball"],["Will-O-Wisp"]]},{"species":"Sableye","gender":"","item":"Sablenite","ability":"Prankster","evs":{"hp":252,"atk":0,"def":112,"spa":0,"spd":144,"spe":0},"nature":"Careful","moves":[["Knock Off"],["Recover"],["Will-O-Wisp"],["Foul Play"]]}]},"rotomwash":{"flags":{},"sets":[{"species":"Rotom-Wash","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":216,"spa":0,"spd":0,"spe":44},"nature":"Bold","moves":[["Volt Switch"],["Hydro Pump"],["Will-O-Wisp"],["Pain Split"]]}]},"pinsir":{"flags":{"megaOnly":1},"sets":[{"species":"Pinsir","gender":"","item":"Pinsirite","ability":"Hyper Cutter","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Return"],["Close Combat"],["Quick Attack"]],"happiness":255},{"species":"Pinsir","gender":"","item":"Pinsirite","ability":"Hyper Cutter","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Return"],["Earthquake"],["Quick Attack"]],"happiness":255}]},"mew":{"flags":{},"sets":[{"species":"Mew","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":252,"atk":0,"def":104,"spa":0,"spd":0,"spe":152},"nature":"Impish","moves":[["Defog"],["Soft-Boiled"],["Will-O-Wisp"],["Knock Off"]]},{"species":"Mew","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":252,"atk":0,"def":104,"spa":0,"spd":0,"spe":152},"nature":"Impish","moves":[["Taunt"],["Soft-Boiled"],["Will-O-Wisp"],["Knock Off"]]}]},"metagross":{"flags":{"megaOnly":1},"sets":[{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Meteor Mash"],["Zen Headbutt"],["Hammer Arm"],["Grass Knot"]]},{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Meteor Mash"],["Zen Headbutt"],["Hammer Arm"],["Pursuit"]]},{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":80,"atk":252,"def":0,"spa":0,"spd":0,"spe":176},"nature":"Adamant","moves":[["Meteor Mash"],["Zen Headbutt"],["Earthquake"],["Agility"]]}]},"manectric":{"flags":{"megaOnly":1},"sets":[{"species":"Manectric","gender":"","item":"Manectite","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Manectric","gender":"","item":"Manectite","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Flamethrower"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"mandibuzz":{"flags":{},"sets":[{"species":"Mandibuzz","gender":"","item":"Leftovers","ability":"Overcoat","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":108,"spe":16},"nature":"Bold","moves":[["Foul Play"],["Roost"],["Taunt"],["Defog"]]}]},"mamoswine":{"flags":{},"sets":[{"species":"Mamoswine","gender":"","item":"Focus Sash","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Endeavor"],["Ice Shard"],["Earthquake"]]},{"species":"Mamoswine","gender":"","item":"Life Orb","ability":"Thick Fat","evs":{"hp":0,"atk":240,"def":0,"spa":16,"spd":0,"spe":252},"nature":"Naive","moves":[["Earthquake"],["Ice Shard"],["Icicle Crash"],["Freeze-Dry"]]}]},"magnezone":{"flags":{},"sets":[{"species":"Magnezone","gender":"","item":"Choice Scarf","ability":"Magnet Pull","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Hidden Power Fire"],["Flash Cannon"],["Thunderbolt"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Magnezone","gender":"","item":"Choice Specs","ability":"Magnet Pull","evs":{"hp":172,"atk":0,"def":0,"spa":252,"spd":0,"spe":84},"nature":"Modest","moves":[["Volt Switch"],["Hidden Power Fire"],["Flash Cannon"],["Thunderbolt"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"lopunny":{"flags":{"megaOnly":1},"sets":[{"species":"Lopunny","gender":"","item":"Lopunnite","ability":"Limber","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Return"],["Fake Out"],["Ice Punch"]],"happiness":255},{"species":"Lopunny","gender":"","item":"Lopunnite","ability":"Limber","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Return"],["Fake Out"],["Power-Up Punch"]],"happiness":255},{"species":"Lopunny","gender":"","item":"Lopunnite","ability":"Limber","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Return"],["Substitute"],["Encore"]],"happiness":255}]},"latios":{"flags":{},"sets":[{"species":"Latios","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Defog"],["Trick"]]},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Earthquake"],["Defog"]]},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Roost"],["Defog"]]},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Hidden Power Fire"],["Defog"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Calm Mind"],["Roost"]]},{"species":"Latios","gender":"M","item":"Latiosite","ability":"Levitate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Psyshock"],["Draco Meteor"],["Earthquake"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"latias":{"flags":{},"sets":[{"species":"Latias","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Defog"],["Draco Meteor"],["Psyshock"],["Healing Wish"]]},{"species":"Latias","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":72,"atk":0,"def":0,"spa":184,"spd":0,"spe":252},"nature":"Timid","moves":[["Defog"],["Draco Meteor"],["Psyshock"],["Roost"]]},{"species":"Latias","gender":"F","item":"Latiasite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":100,"spa":0,"spd":0,"spe":160},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Roost"],["Substitute"],["Calm Mind"],["Stored Power"]]},{"species":"Latias","gender":"F","item":"Latiasite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":68,"spa":0,"spd":0,"spe":192},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Thunder Wave"],["Roar"],["Recover"],["Dragon Pulse"]]}]},"landorustherian":{"flags":{},"sets":[{"species":"Landorus-Therian","gender":"","item":"Choice Scarf","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":24,"spa":0,"spd":0,"spe":232},"nature":"Jolly","moves":[["Earthquake"],["U-turn"],["Explosion"],["Stone Edge"]]},{"species":"Landorus-Therian","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":8,"spe":8},"nature":"Impish","moves":[["Stealth Rock"],["Earthquake"],["U-turn"],["Stone Edge"]]},{"species":"Landorus-Therian","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":56,"atk":220,"def":0,"spa":0,"spd":0,"spe":232},"nature":"Adamant","moves":[["Swords Dance"],["Rock Polish"],["Earthquake"],["Stone Edge"]]},{"species":"Landorus-Therian","gender":"","item":"Earth Plate","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Earthquake"],["Stone Edge"],["U-turn"]]}]},"kyuremblack":{"flags":{},"sets":[{"species":"Kyurem-Black","gender":"","item":"Choice Scarf","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":32,"spd":0,"spe":224},"nature":"Naive","moves":[["Outrage"],["Dragon Claw"],["Fusion Bolt"],["Ice Beam"]]},{"species":"Kyurem-Black","gender":"","item":"Life Orb","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":56,"spd":0,"spe":200},"nature":"Lonely","moves":[["Dragon Claw"],["Fusion Bolt"],["Ice Beam"],["Iron Head"]]},{"species":"Kyurem-Black","gender":"","item":"Life Orb","ability":"Teravolt","evs":{"hp":0,"atk":56,"def":0,"spa":252,"spd":0,"spe":200},"nature":"Mild","moves":[["Ice Beam"],["Fusion Bolt"],["Earth Power"],["Outrage"]]},{"species":"Kyurem-Black","gender":"","item":"Leftovers","ability":"Teravolt","evs":{"hp":56,"atk":0,"def":0,"spa":252,"spd":0,"spe":200},"nature":"Mild","moves":[["Substitute"],["Ice Beam"],["Fusion Bolt"],["Earth Power"]]}]},"keldeo":{"flags":{},"sets":[{"species":"Keldeo","gender":"","item":"Choice Specs","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Secret Sword"],["Scald"],["Icy Wind"]]},{"species":"Keldeo","gender":"","item":"Choice Scarf","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Secret Sword"],["Scald"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Keldeo","gender":"","item":"Leftovers","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Scald"],["Secret Sword"],["Substitute"],["Calm Mind"]]},{"species":"Keldeo","gender":"","item":"Salac Berry","ability":"Justified","evs":{"hp":8,"atk":0,"def":0,"spa":248,"spd":0,"spe":252},"nature":"Timid","moves":[["Endeavor"],["Substitute"],["Hydro Pump"],["Secret Sword"]]}]},"heracross":{"flags":{},"sets":[{"species":"Heracross","gender":"","item":"Heracronite","ability":"Guts","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Pin Missile"],["Rock Blast"],["Swords Dance"]]},{"species":"Heracross","gender":"","item":"Toxic Orb","ability":"Guts","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Megahorn"],["Facade"],["Swords Dance"]]}]},"heatran":{"flags":{},"sets":[{"species":"Heatran","gender":"","item":"Choice Scarf","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Overheat"],["Flash Cannon"],["Earth Power"],["Stone Edge"]]},{"species":"Heatran","gender":"","item":"Air Balloon","ability":"Flash Fire","evs":{"hp":12,"atk":0,"def":0,"spa":252,"spd":0,"spe":244},"nature":"Timid","moves":[["Stealth Rock"],["Fire Blast"],["Taunt"],["Earth Power"]]},{"species":"Heatran","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":192,"spe":68},"nature":"Calm","moves":[["Lava Plume"],["Toxic"],["Taunt"],["Stealth Rock"]]}]},"gyarados":{"flags":{},"sets":[{"species":"Gyarados","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":88,"atk":192,"def":4,"spa":0,"spd":0,"spe":224},"nature":"Adamant","moves":[["Substitute"],["Dragon Dance"],["Waterfall"],["Bounce"]]},{"species":"Gyarados","gender":"","item":"Gyaradosite","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Waterfall"],["Crunch"],["Earthquake"]]}]},"gallade":{"flags":{"megaOnly":1},"sets":[{"species":"Gallade","gender":"","item":"Galladite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Close Combat"],["Knock Off"],["Zen Headbutt"]]},{"species":"Gallade","gender":"","item":"Galladite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Close Combat"],["Ice Punch"],["Zen Headbutt"]]}]},"gliscor":{"flags":{},"sets":[{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":192,"spe":72},"nature":"Careful","moves":[["Swords Dance"],["Roost"],["Knock Off"],["Earthquake"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":192,"spe":72},"nature":"Careful","moves":[["Taunt"],["Roost"],["Knock Off"],["Earthquake"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":192,"spe":72},"nature":"Careful","moves":[["Taunt"],["Roost"],["Toxic"],["Earthquake"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":28,"spa":0,"spd":0,"spe":236},"nature":"Impish","moves":[["Substitute"],["Toxic"],["Protect"],["Earthquake"]]}]},"gengar":{"flags":{},"sets":[{"species":"Gengar","gender":"","item":"Black Sludge","ability":"Levitate","evs":{"hp":8,"atk":0,"def":0,"spa":248,"spd":0,"spe":252},"nature":"Timid","moves":[["Hex"],["Taunt"],["Will-O-Wisp"],["Sludge Wave"]]},{"species":"Gengar","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Wave"],["Focus Blast"],["Taunt"]]},{"species":"Gengar","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Pain Split"],["Shadow Ball"],["Focus Blast"]]}]},"gardevoir":{"flags":{"megaOnly":1},"sets":[{"species":"Gardevoir","gender":"","item":"Gardevoirite","ability":"Trace","evs":{"hp":0,"atk":0,"def":24,"spa":232,"spd":0,"spe":252},"nature":"Modest","moves":[["Calm Mind"],["Hyper Voice"],["Psyshock"],["Focus Blast"]]},{"species":"Gardevoir","gender":"","item":"Gardevoirite","ability":"Trace","evs":{"hp":0,"atk":0,"def":24,"spa":232,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psyshock"],["Focus Blast"],["Taunt"]]},{"species":"Gardevoir","gender":"","item":"Gardevoirite","ability":"Trace","evs":{"hp":0,"atk":0,"def":24,"spa":232,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psyshock"],["Focus Blast"],["Will-O-Wisp"]]}]},"garchomp":{"flags":{},"sets":[{"species":"Garchomp","gender":"","item":"Rocky Helmet","ability":"Rough Skin","evs":{"hp":252,"atk":0,"def":164,"spa":0,"spd":76,"spe":16},"nature":"Impish","moves":[["Stealth Rock"],["Earthquake"],["Dragon Tail"],["Fire Blast"]]},{"species":"Garchomp","gender":"","item":"Focus Sash","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Stealth Rock"],["Earthquake"],["Dragon Claw"],["Fire Blast"]]},{"species":"Garchomp","gender":"","item":"Lum Berry","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Earthquake"],["Outrage"],["Swords Dance"]]},{"species":"Garchomp","gender":"","item":"Garchompite","ability":"Rough Skin","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Draco Meteor"],["Earthquake"],["Fire Blast"],["Stone Edge"]]},{"species":"Garchomp","gender":"","item":"Choice Scarf","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Outrage"],["Stone Edge"],["Dragon Claw"]]}]},"ferrothorn":{"flags":{},"sets":[{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":88,"spa":0,"spd":168,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Leech Seed"],["Gyro Ball"],["Power Whip"]]},{"species":"Ferrothorn","gender":"","item":"Shed Shell","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":88,"spa":0,"spd":168,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Leech Seed"],["Gyro Ball"],["Protect"]]},{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":88,"spa":0,"spd":168,"spe":0},"nature":"Relaxed","moves":[["Protect"],["Leech Seed"],["Gyro Ball"],["Stealth Rock"]]}]},"excadrill":{"flags":{},"sets":[{"species":"Excadrill","gender":"","item":"Choice Scarf","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Rapid Spin"]]},{"species":"Excadrill","gender":"","item":"Air Balloon","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Swords Dance"]]},{"species":"Excadrill","gender":"","item":"Life Orb","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Rapid Spin"]]},{"species":"Excadrill","gender":"","item":"Leftovers","ability":"Mold Breaker","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Earthquake"],["Iron Head"],["Rapid Spin"],["Toxic"]]}]},"dragonite":{"flags":{},"sets":[{"species":"Dragonite","gender":"","item":"Choice Band","ability":"Multiscale","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Outrage"],["Extreme Speed"],["Thunder Punch"],["Superpower"]]},{"species":"Dragonite","gender":"","item":"Lum Berry","ability":"Multiscale","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Extreme Speed"],["Earthquake"]]},{"species":"Dragonite","gender":"","item":"Lum Berry","ability":"Multiscale","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Extreme Speed"],["Fire Punch"]]}]},"conkeldurr":{"flags":{},"sets":[{"species":"Conkeldurr","gender":"","item":"Assault Vest","ability":"Guts","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":236,"spe":20},"nature":"Adamant","moves":[["Drain Punch"],["Mach Punch"],["Ice Punch"],["Poison Jab"]]},{"species":"Conkeldurr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":48,"atk":252,"def":0,"spa":0,"spd":208,"spe":0},"nature":"Adamant","moves":[["Drain Punch"],["Mach Punch"],["Ice Punch"],["Thunder Punch"]]}]},"clefable":{"flags":{},"sets":[{"species":"Clefable","gender":"","item":"Leftovers","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":172,"spa":0,"spd":84,"spe":0},"nature":"Calm","moves":[["Calm Mind"],["Moonblast"],["Soft-Boiled"],["Flamethrower"]]},{"species":"Clefable","gender":"","item":"Leftovers","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Moonblast"],["Wish"],["Protect"],["Heal Bell"]]},{"species":"Clefable","gender":"","item":"Leftovers","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":172,"spa":0,"spd":84,"spe":0},"nature":"Calm","moves":[["Stealth Rock"],["Moonblast"],["Thunder Wave"],["Soft-Boiled"]]}]},"charizard":{"flags":{"megaOnly":1},"sets":[{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","nature":"Jolly","moves":[["Dragon Dance"],["Dragon Claw"],["Flare Blitz"],["Roost"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":248,"atk":24,"def":0,"spa":0,"spd":180,"spe":56},"nature":"Adamant","moves":[["Earthquake"],["Dragon Claw"],["Will-O-Wisp"],["Roost"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Dragon Claw"],["Flare Blitz"],["Earthquake"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":144,"atk":252,"def":0,"spa":0,"spd":0,"spe":112},"nature":"Adamant","moves":[["Tailwind"],["Outrage"],["Flare Blitz"],["Swords Dance"]]},{"species":"Charizard","gender":"","item":"Charizardite Y","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Solar Beam"],["Focus Blast"],["Roost"]]}]},"chansey":{"flags":{},"sets":[{"species":"Chansey","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":4,"atk":0,"def":252,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Soft-Boiled"],["Heal Bell"],["Stealth Rock"],["Seismic Toss"]]},{"species":"Chansey","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":4,"atk":0,"def":252,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Wish"],["Soft-Boiled"],["Seismic Toss"],["Toxic"]]}]},"breloom":{"flags":{},"sets":[{"species":"Breloom","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":12,"atk":244,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Superpower"],["Seed Bomb"],["Facade"]]},{"species":"Breloom","gender":"","item":"Focus Sash","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spore"],["Bullet Seed"],["Mach Punch"],["Rock Tomb"]]},{"species":"Breloom","gender":"","item":"Life Orb","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spore"],["Bullet Seed"],["Mach Punch"],["Swords Dance"]]}]},"bisharp":{"flags":{},"sets":[{"species":"Bisharp","gender":"","item":"BlackGlasses","ability":"Defiant","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":52,"spe":204},"nature":"Adamant","moves":[["Knock Off"],["Iron Head"],["Sucker Punch"],["Pursuit"]]},{"species":"Bisharp","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Swords Dance"],["Iron Head"],["Sucker Punch"]]},{"species":"Bisharp","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Low Kick"],["Iron Head"],["Sucker Punch"]]},{"species":"Bisharp","gender":"","item":"BlackGlasses","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Low Kick"],["Iron Head"],["Sucker Punch"]]}]},"azumarill":{"flags":{},"sets":[{"species":"Azumarill","gender":"","item":"Assault Vest","ability":"Huge Power","evs":{"hp":240,"atk":252,"def":0,"spa":0,"spd":16,"spe":0},"nature":"Adamant","moves":[["Play Rough"],["Waterfall"],["Aqua Jet"],["Knock Off"]]},{"species":"Azumarill","gender":"","item":"Sitrus Berry","ability":"Huge Power","evs":{"hp":92,"atk":252,"def":0,"spa":0,"spd":0,"spe":164},"nature":"Adamant","moves":[["Belly Drum"],["Aqua Jet"],["Play Rough"],["Knock Off"]]},{"species":"Azumarill","gender":"","item":"Choice Band","ability":"Huge Power","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Play Rough"],["Waterfall"],["Aqua Jet"],["Superpower"]]}]},"altaria":{"flags":{"megaOnly":1},"sets":[{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Roost"],["Return"],["Earthquake"]],"happiness":255},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":96,"spe":28},"nature":"Impish","moves":[["Dragon Dance"],["Roost"],["Return"],["Substitute"]],"happiness":255},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":96,"spe":28},"nature":"Impish","moves":[["Dragon Dance"],["Roost"],["Return"],["Heal Bell"]],"happiness":255},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":248,"atk":0,"def":0,"spa":168,"spd":0,"spe":92},"nature":"Modest","moves":[["Hyper Voice"],["Fire Blast"],["Roost"],["Earthquake"]]},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":104,"spa":0,"spd":156,"spe":0},"nature":"Bold","moves":[["Hyper Voice"],["Roost"],["Heal Bell"],["Flamethrower"]]},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Return"],["Earthquake"],["Fire Blast"]],"happiness":255}]},"serperior":{"flags":{},"sets":[{"species":"Serperior","gender":"","item":"Life Orb","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Fire"],["Glare"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Serperior","gender":"","item":"Meadow Plate","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Fire"],["Taunt"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Serperior","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Ground"],["Substitute"]],"ivs":{"spa":30,"spd":30}},{"species":"Serperior","gender":"","item":"Life Orb","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Fire"],["Giga Drain"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"feraligatr":{"flags":{},"sets":[{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Superpower"],["Dragon Dance"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Crunch"],["Dragon Dance"]]}]},"raikou":{"flags":{},"sets":[{"species":"Raikou","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Calm Mind"],["Thunderbolt"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Raikou","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Raikou","gender":"","item":"Assault Vest","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]}},"UU":{"gardevoir":{"flags":{},"sets":[{"species":"Gardevoir","gender":"","item":"Choice Specs","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Psyshock"],["Focus Blast"],["Trick"]]},{"species":"Gardevoir","gender":"","item":"Choice Specs","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Psyshock"],["Focus Blast"],["Shadow Ball"]]},{"species":"Gardevoir","gender":"","item":"Choice Specs","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Psyshock"],["Shadow Ball"],["Trick"]]},{"species":"Gardevoir","gender":"","item":"Leftovers","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Moonblast"],["Psyshock"],["Focus Blast","Substitute"]]}]},"sableye":{"flags":{},"sets":[{"species":"Sableye","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Recover"],["Will-O-Wisp"],["Taunt"],["Knock Off"]]}]},"diancie":{"flags":{},"sets":[{"species":"Diancie","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["Stealth Rock"],["Moonblast"],["Diamond Storm"],["Earth Power","Protect"]]}]},"metagross":{"flags":{},"sets":[{"species":"Metagross","gender":"","item":"Shuca Berry","ability":"Clear Body","evs":{"hp":40,"atk":252,"def":0,"spa":0,"spd":0,"spe":216},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake","Ice Punch","Thunder Punch"],["Zen Headbutt"],["Bullet Punch"]]}]},"gyarados":{"flags":{},"sets":[{"species":"Gyarados","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Waterfall"],["Bounce"],["Substitute","Earthquake","Stone Edge"]]},{"species":"Gyarados","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":216,"atk":60,"def":184,"spa":0,"spd":0,"spe":48},"nature":"Impish","moves":[["Rest"],["Sleep Talk"],["Waterfall"],["Toxic","Roar"]]}]},"hoopa":{"flags":{},"sets":[{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Trick Room"],["Shadow Ball"],["Psyshock","Psychic"],["Focus Blast"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Focus Blast"],["Psyshock"],["Substitute"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Focus Blast"],["Psyshock"],["Nasty Plot"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Focus Blast"],["Nasty Plot"],["Substitute"]]}]},"crobat":{"flags":{},"sets":[{"species":"Crobat","gender":"","item":"Choice Band","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Sleep Talk"],["Brave Bird"],["Cross Poison"],["U-turn"]]},{"species":"Crobat","gender":"","item":"Black Sludge","ability":"Infiltrator","evs":{"hp":248,"atk":0,"def":80,"spa":0,"spd":4,"spe":176},"nature":"Jolly","moves":[["Roost"],["Defog"],["Taunt"],["Brave Bird"]]}]},"entei":{"flags":{},"sets":[{"species":"Entei","gender":"","item":"Choice Band","ability":"Pressure","shiny":true,"evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Sacred Fire"],["Stone Edge"],["Bulldoze"]]},{"species":"Entei","gender":"","item":"Life Orb","ability":"Pressure","shiny":true,"evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Sacred Fire"],["Stone Edge"],["Bulldoze"]]},{"species":"Entei","gender":"","item":"Assault Vest","ability":"Pressure","shiny":true,"evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":240,"spe":16},"nature":"Adamant","moves":[["Extreme Speed"],["Sacred Fire"],["Stone Edge"],["Bulldoze"]]}]},"suicune":{"flags":{},"sets":[{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Calm Mind"],["Scald"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Roar"],["Scald"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":0,"spa":196,"spd":0,"spe":64},"nature":"Modest","moves":[["Substitute"],["Calm Mind"],["Hydro Pump"],["Ice Beam"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Hydro Pump"],["Ice Beam"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"aerodactyl":{"flags":{"megaOnly":1},"sets":[{"species":"Aerodactyl","gender":"","item":"Aerodactylite","ability":"Pressure","evs":{"hp":40,"atk":252,"def":0,"spa":0,"spd":0,"spe":216},"nature":"Jolly","moves":[["Hone Claws"],["Stone Edge"],["Aerial Ace"],["Aqua Tail"]]},{"species":"Aerodactyl","gender":"","item":"Aerodactylite","ability":"Pressure","evs":{"hp":40,"atk":252,"def":0,"spa":0,"spd":0,"spe":216},"nature":"Jolly","moves":[["Roost"],["Taunt"],["Stone Edge"],["Aerial Ace"]]}]},"hydreigon":{"flags":{},"sets":[{"species":"Hydreigon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Draco Meteor"],["Dark Pulse"],["Fire Blast"]]},{"species":"Hydreigon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Roost"],["Draco Meteor"],["Fire Blast"],["Superpower"]]},{"species":"Hydreigon","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Draco Meteor"],["Dark Pulse"],["Focus Blast"],["Flash Cannon"]]},{"species":"Hydreigon","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["U-turn"],["Draco Meteor"],["Dark Pulse"],["Focus Blast"]]}]},"machamp":{"flags":{},"sets":[{"species":"Machamp","gender":"","item":"Assault Vest","ability":"No Guard","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Bullet Punch"],["Dynamic Punch"],["Knock Off"],["Ice Punch"]]},{"species":"Machamp","gender":"","item":"Choice Band","ability":"No Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bullet Punch"],["Dynamic Punch"],["Knock Off"],["Ice Punch"]]},{"species":"Machamp","gender":"","item":"Leftovers","ability":"No Guard","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":0,"spe":8},"nature":"Adamant","moves":[["Rest"],["Sleep Talk"],["Dynamic Punch"],["Knock Off"]]},{"species":"Machamp","gender":"","item":"Leftovers","ability":"No Guard","evs":{"hp":212,"atk":252,"def":0,"spa":0,"spd":0,"spe":44},"nature":"Adamant","moves":[["Bulk Up"],["Dynamic Punch"],["Stone Edge"],["Ice Punch"]]}]},"mienshao":{"flags":{},"sets":[{"species":"Mienshao","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Fake Out"],["High Jump Kick"],["Knock Off"],["U-turn"]]},{"species":"Mienshao","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Knock Off"],["Poison Jab"],["U-turn"]]},{"species":"Mienshao","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Baton Pass"],["Substitute"],["High Jump Kick"],["Knock Off"]]}]},"absol":{"flags":{"megaOnly":1},"sets":[{"species":"Absol","gender":"","item":"Absolite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Sucker Punch"],["Knock Off"],["Superpower"]]},{"species":"Absol","gender":"","item":"Absolite","ability":"Justified","evs":{"hp":0,"atk":240,"def":0,"spa":44,"spd":0,"spe":224},"nature":"Naive","moves":[["Sucker Punch"],["Knock Off"],["Ice Beam"],["Fire Blast"]]}]},"aggron":{"flags":{"megaOnly":1},"sets":[{"species":"Aggron","gender":"","item":"Aggronite","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":16,"spa":0,"spd":244,"spe":0},"nature":"Impish","moves":[["Rest"],["Sleep Talk"],["Heavy Slam"],["Earthquake"]]},{"species":"Aggron","gender":"","item":"Aggronite","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":124,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Roar"],["Heavy Slam"],["Earthquake"]]}]},"beedrill":{"flags":{"megaOnly":1},"sets":[{"species":"Beedrill","gender":"","item":"Beedrillite","ability":"Swarm","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Protect"],["U-turn"],["Poison Jab"],["Drill Run"]]}]},"blastoise":{"flags":{"megaOnly":1},"sets":[{"species":"Blastoise","gender":"","item":"Blastoisinite","ability":"Rain Dish","evs":{"hp":56,"atk":0,"def":0,"spa":252,"spd":0,"spe":200},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Aura Sphere"],["Dark Pulse"]]},{"species":"Blastoise","gender":"","item":"Blastoisinite","ability":"Torrent","evs":{"hp":252,"atk":0,"def":148,"spa":44,"spd":64,"spe":0},"nature":"Bold","moves":[["Rapid Spin"],["Scald"],["Ice Beam"],["Dark Pulse"]]}]},"empoleon":{"flags":{},"sets":[{"species":"Empoleon","gender":"","item":"Leftovers","ability":"Torrent","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Stealth Rock"],["Defog"],["Roar"],["Scald"]]},{"species":"Empoleon","gender":"","item":"Choice Specs","ability":"Torrent","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Hydro Pump"],["Flash Cannon"],["Ice Beam"],["Grass Knot"]]},{"species":"Empoleon","gender":"","item":"Petaya Berry","ability":"Torrent","evs":{"hp":12,"atk":0,"def":4,"spa":252,"spd":0,"spe":240},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Agility"],["Substitute"],["Surf"],["Ice Beam"]]}]},"krookodile":{"flags":{},"sets":[{"species":"Krookodile","gender":"","item":"Choice Band","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pursuit"],["Earthquake"],["Knock Off"],["Superpower"]]},{"species":"Krookodile","gender":"","item":"Choice Scarf","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Knock Off"],["Stone Edge"],["Superpower"]]},{"species":"Krookodile","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Impish","moves":[["Stealth Rock"],["Taunt"],["Earthquake"],["Knock Off"]]}]},"nidoqueen":{"flags":{},"sets":[{"species":"Nidoqueen","gender":"F","item":"Life Orb","ability":"Sheer Force","evs":{"hp":128,"atk":0,"def":0,"spa":252,"spd":0,"spe":128},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Stealth Rock"],["Sludge Wave"],["Earth Power"],["Ice Beam"]]},{"species":"Nidoqueen","gender":"F","item":"Black Sludge","ability":"Sheer Force","evs":{"hp":248,"atk":0,"def":240,"spa":0,"spd":0,"spe":20},"nature":"Bold","moves":[["Stealth Rock"],["Roar"],["Earth Power"],["Ice Beam"]]}]},"shaymin":{"flags":{},"sets":[{"species":"Shaymin","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Substitute"],["Leech Seed"],["Seed Flare"],["Air Slash"]]},{"species":"Shaymin","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Rest"],["Seed Flare"],["Earth Power"],["Air Slash"]]}]},"swampert":{"flags":{},"sets":[{"species":"Swampert","gender":"","item":"Leftovers","ability":"Torrent","evs":{"hp":240,"atk":16,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Roar"],["Earthquake"],["Scald"]]},{"species":"Swampert","gender":"","item":"Choice Band","ability":"Torrent","evs":{"hp":204,"atk":252,"def":0,"spa":0,"spd":0,"spe":52},"nature":"Adamant","moves":[["Waterfall"],["Earthquake"],["Ice Beam"],["Superpower"]]},{"species":"Swampert","gender":"","item":"Chesto Berry","ability":"Torrent","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Curse"],["Earthquake"],["Ice Beam"]]},{"species":"Swampert","gender":"","item":"Swampertite","ability":"Torrent","evs":{"hp":104,"atk":252,"def":0,"spa":0,"spd":0,"spe":152},"nature":"Adamant","moves":[["Rain Dance"],["Waterfall"],["Earthquake"],["Ice Punch"]]}]},"ampharos":{"flags":{"megaOnly":1},"sets":[{"species":"Ampharos","gender":"","item":"Ampharosite","ability":"Static","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Agility"],["Dragon Pulse"],["Thunderbolt"],["Focus Blast"]]},{"species":"Ampharos","gender":"M","item":"Ampharosite","ability":"Static","evs":{"hp":132,"atk":0,"def":0,"spa":252,"spd":0,"spe":124},"nature":"Modest","moves":[["Volt Switch"],["Thunderbolt"],["Dragon Pulse"],["Focus Blast"]]},{"species":"Ampharos","gender":"","item":"Ampharosite","ability":"Static","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Volt Switch"],["Dragon Pulse"]]},{"species":"Ampharos","gender":"","item":"Ampharosite","ability":"Static","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Rest"],["Sleep Talk"],["Volt Switch"],["Dragon Pulse"]]}]},"arcanine":{"flags":{},"sets":[{"species":"Arcanine","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Morning Sun"],["Will-O-Wisp"],["Extreme Speed"],["Flare Blitz"]]},{"species":"Arcanine","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Flare Blitz"],["Close Combat"],["Wild Charge"]]},{"species":"Arcanine","gender":"","item":"Choice Band","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Flare Blitz"],["Close Combat"],["Wild Charge"]]}]},"azelf":{"flags":{},"sets":[{"species":"Azelf","gender":"","item":"Focus Sash","ability":"Levitate","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Hasty","moves":[["Stealth Rock"],["Taunt"],["Knock Off"],["Explosion"]]},{"species":"Azelf","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Taunt"],["Reflect"],["Light Screen"],["Explosion"]]},{"species":"Azelf","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Psyshock"],["Fire Blast"],["Dazzling Gleam"]]}]},"blissey":{"flags":{},"sets":[{"species":"Blissey","gender":"F","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Soft-Boiled"],["Wish"],["Toxic"],["Seismic Toss"]]},{"species":"Blissey","gender":"F","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Soft-Boiled"],["Heal Bell"],["Toxic"],["Seismic Toss"]]},{"species":"Blissey","gender":"F","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Protect"],["Wish"],["Heal Bell"],["Seismic Toss"]]}]},"chandelure":{"flags":{},"sets":[{"species":"Chandelure","gender":"","item":"Choice Scarf","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Trick"],["Fire Blast"],["Shadow Ball"],["Energy Ball"]]},{"species":"Chandelure","gender":"","item":"Choice Specs","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Trick"],["Overheat"],["Shadow Ball"],["Energy Ball"]]},{"species":"Chandelure","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":112,"atk":0,"def":0,"spa":140,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Calm Mind"],["Substitute"],["Flamethrower"],["Shadow Ball"]]}]},"chesnaught":{"flags":{},"sets":[{"species":"Chesnaught","gender":"","item":"Leftovers","ability":"Bulletproof","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Spiky Shield"],["Spikes"],["Leech Seed"],["Drain Punch"]]},{"species":"Chesnaught","gender":"","item":"Leftovers","ability":"Bulletproof","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Spiky Shield"],["Spikes"],["Leech Seed"],["Drain Punch"]]}]},"cloyster":{"flags":{},"sets":[{"species":"Cloyster","gender":"","item":"Focus Sash","ability":"Skill Link","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Shell Smash"],["Icicle Spear"],["Rock Blast"],["Ice Shard"]]},{"species":"Cloyster","gender":"","item":"Focus Sash","ability":"Skill Link","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rapid Spin"],["Spikes"],["Icicle Spear"],["Explosion"]]}]},"darmanitan":{"flags":{},"sets":[{"species":"Darmanitan","gender":"","item":"Choice Band","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Rock Slide"],["Superpower"],["U-turn"]]},{"species":"Darmanitan","gender":"","item":"Choice Scarf","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Rock Slide"],["Superpower"],["U-turn"]]},{"species":"Darmanitan","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Rock Slide"],["Superpower"],["U-turn"]]}]},"donphan":{"flags":{},"sets":[{"species":"Donphan","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Rapid Spin"],["Ice Shard"],["Earthquake"]]},{"species":"Donphan","gender":"","item":"Assault Vest","ability":"Sturdy","evs":{"hp":174,"atk":252,"def":0,"spa":0,"spd":0,"spe":82},"nature":"Adamant","moves":[["Rapid Spin"],["Ice Shard"],["Earthquake"],["Knock Off"]]}]},"espeon":{"flags":{},"sets":[{"species":"Espeon","gender":"","item":"Light Clay","ability":"Magic Bounce","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Morning Sun"],["Reflect"],["Light Screen"],["Psyshock"]]},{"species":"Espeon","gender":"","item":"Choice Specs","ability":"Magic Bounce","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Trick"],["Psyshock"],["Shadow Ball"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Espeon","gender":"","item":"Life Orb","ability":"Magic Bounce","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Baton Pass"],["Psyshock"],["Signal Beam"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Espeon","gender":"","item":"Leftovers","ability":"Magic Bounce","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Baton Pass"],["Calm Mind"],["Stored Power"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Espeon","gender":"","item":"Leftovers","ability":"Magic Bounce","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Baton Pass"],["Calm Mind"],["Stored Power"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"florges":{"flags":{},"sets":[{"species":"Florges","gender":"F","item":"Leftovers","ability":"Flower Veil","evs":{"hp":248,"atk":0,"def":236,"spa":0,"spd":24,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Protect"],["Wish"],["Aromatherapy"],["Moonblast"]]},{"species":"Florges","gender":"F","item":"Leftovers","ability":"Flower Veil","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Synthesis"],["Aromatherapy"],["Calm Mind"],["Moonblast"]]}]},"flygon":{"flags":{},"sets":[{"species":"Flygon","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Defog"],["Outrage"],["Earthquake"],["U-turn"]]},{"species":"Flygon","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Roost"],["Defog"],["Earthquake"],["U-turn"]]}]},"forretress":{"flags":{},"sets":[{"species":"Forretress","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Rapid Spin"],["Gyro Ball"],["Volt Switch"]]}]},"galvantula":{"flags":{},"sets":[{"species":"Galvantula","gender":"","item":"Focus Sash","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Sticky Web"],["Thunder"],["Bug Buzz"],["Energy Ball"]]},{"species":"Galvantula","gender":"M","item":"Life Orb","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Volt Switch"],["Thunder"],["Bug Buzz"],["Energy Ball"]]},{"species":"Galvantula","gender":"M","item":"Choice Specs","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Volt Switch"],["Thunder"],["Bug Buzz"],["Energy Ball"]]}]},"goodra":{"flags":{},"sets":[{"species":"Goodra","gender":"","item":"Assault Vest","ability":"Sap Sipper","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"nature":"Modest","moves":[["Draco Meteor"],["Fire Blast"],["Sludge Bomb"],["Dragon Tail"]]},{"species":"Goodra","gender":"","item":"Life Orb","ability":"Sap Sipper","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Draco Meteor"],["Fire Blast"],["Sludge Bomb"],["Ice Beam"]]}]},"haxorus":{"flags":{},"sets":[{"species":"Haxorus","gender":"","item":"Choice Band","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Sleep Talk"],["Outrage"],["Earthquake"],["Poison Jab"]]},{"species":"Haxorus","gender":"","item":"Life Orb","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Taunt"],["Outrage"],["Earthquake"]]},{"species":"Haxorus","gender":"M","item":"Lum Berry","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Outrage"],["Earthquake"],["Poison Jab"]]},{"species":"Haxorus","gender":"","item":"Life Orb","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Taunt"],["Outrage"],["Earthquake"]]}]},"heliolisk":{"flags":{},"sets":[{"species":"Heliolisk","gender":"","item":"Choice Specs","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Grass Knot"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Heliolisk","gender":"","item":"Life Orb","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Grass Knot"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"honchkrow":{"flags":{},"sets":[{"species":"Honchkrow","gender":"","item":"Life Orb","ability":"Moxie","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Roost"],["Sucker Punch"],["Brave Bird"],["Superpower"]]},{"species":"Honchkrow","gender":"","item":"Choice Scarf","ability":"Moxie","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Brave Bird"],["Night Slash"],["Superpower"],["Heat Wave"]]}]},"infernape":{"flags":{},"sets":[{"species":"Infernape","gender":"","item":"Focus Sash","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Fake Out"],["Stealth Rock"],["Close Combat"],["Overheat"]]},{"species":"Infernape","gender":"","item":"Choice Scarf","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Close Combat"],["Stone Edge"],["U-turn"]]},{"species":"Infernape","gender":"","item":"Choice Band","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Close Combat"],["Stone Edge"],["U-turn"]]},{"species":"Infernape","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Vacuum Wave"],["Fire Blast"],["Grass Knot"]]}]},"kingdra":{"flags":{},"sets":[{"species":"Kingdra","gender":"","item":"Lum Berry","ability":"Sniper","evs":{"hp":24,"atk":252,"def":0,"spa":0,"spd":0,"spe":232},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Waterfall"],["Iron Head"]]},{"species":"Kingdra","gender":"","item":"Leftovers","ability":"Sniper","evs":{"hp":24,"atk":252,"def":0,"spa":0,"spd":0,"spe":232},"nature":"Adamant","moves":[["Iron Head"],["Dragon Dance"],["Outrage"],["Waterfall"]]},{"species":"Kingdra","gender":"","item":"Scope Lens","ability":"Sniper","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Agility"],["Focus Energy"],["Draco Meteor"],["Waterfall"]]},{"species":"Kingdra","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":60,"def":0,"spa":252,"spd":0,"spe":196},"nature":"Mild","moves":[["Rain Dance"],["Hydro Pump"],["Draco Meteor"],["Waterfall"]]}]},"lucario":{"flags":{},"sets":[{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Bullet Punch"],["Close Combat"],["Crunch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Extreme Speed"],["Close Combat"],["Ice Punch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Bullet Punch"],["Close Combat"],["Ice Punch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Extreme Speed"],["Close Combat"],["Crunch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Steadfast","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Vacuum Wave"],["Aura Sphere"],["Flash Cannon"]]}]},"milotic":{"flags":{},"sets":[{"species":"Milotic","gender":"","item":"Life Orb","ability":"Competitive","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Recover"],["Hydro Pump"],["Ice Beam"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Milotic","gender":"","item":"Leftovers","ability":"Marvel Scale","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Haze"],["Scald"],["Ice Beam"]]},{"species":"Milotic","gender":"","item":"Leftovers","ability":"Marvel Scale","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Recover"],["Haze"],["Scald"],["Ice Beam"]]}]},"noivern":{"flags":{},"sets":[{"species":"Noivern","gender":"","item":"Choice Specs","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Switcheroo"],["Draco Meteor"],["Hurricane"],["Flamethrower"]]},{"species":"Noivern","gender":"","item":"Life Orb","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Draco Meteor"],["Hurricane"],["Flamethrower"]]},{"species":"Noivern","gender":"","item":"Leftovers","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Taunt"],["Draco Meteor"],["Air Slash"]]}]},"porygonz":{"flags":{},"sets":[{"species":"Porygon-Z","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Tri Attack"],["Dark Pulse"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Porygon-Z","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Trick"],["Tri Attack"],["Thunderbolt"],["Ice Beam"]]},{"species":"Porygon-Z","gender":"","item":"Choice Scarf","ability":"Adaptability","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Trick"],["Tri Attack"],["Thunderbolt"],["Ice Beam"]]}]},"porygon2":{"flags":{},"sets":[{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Trace","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Thunder Wave"],["Thunderbolt"],["Ice Beam"]]},{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Trace","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Recover"],["Thunder Wave"],["Thunderbolt"],["Ice Beam"]]}]},"rotomheat":{"flags":{},"sets":[{"species":"Rotom-Heat","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Trick"],["Overheat"],["Volt Switch"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Rotom-Heat","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Trick"],["Overheat"],["Volt Switch"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Rotom-Heat","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":216,"spa":0,"spd":0,"spe":44},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Pain Split"],["Will-O-Wisp"],["Overheat"],["Volt Switch"]]}]},"scrafty":{"flags":{},"sets":[{"species":"Scrafty","gender":"","item":"Leftovers","ability":"Shed Skin","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Bulk Up"],["Drain Punch"],["Knock Off"]]},{"species":"Scrafty","gender":"","item":"Life Orb","ability":"Moxie","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Drain Punch"],["Knock Off"],["Zen Headbutt"]]}]},"snorlax":{"flags":{},"sets":[{"species":"Snorlax","gender":"","item":"Choice Band","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":56,"spa":0,"spd":200,"spe":0},"nature":"Adamant","moves":[["Pursuit"],["Body Slam"],["Earthquake"],["Fire Punch"]]},{"species":"Snorlax","gender":"","item":"Assault Vest","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Pursuit"],["Body Slam"],["Earthquake"],["Fire Blast"]]},{"species":"Snorlax","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":144,"atk":0,"def":188,"spa":0,"spd":176,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Curse"],["Body Slam"]]}]},"tentacruel":{"flags":{},"sets":[{"species":"Tentacruel","gender":"","item":"Black Sludge","ability":"Liquid Ooze","evs":{"hp":240,"atk":0,"def":244,"spa":0,"spd":0,"spe":24},"nature":"Bold","moves":[["Toxic Spikes"],["Rapid Spin"],["Scald"],["Knock Off"]]}]},"toxicroak":{"flags":{},"sets":[{"species":"Toxicroak","gender":"","item":"Life Orb","ability":"Dry Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Sucker Punch"],["Gunk Shot"],["Drain Punch"]]},{"species":"Toxicroak","gender":"","item":"Black Sludge","ability":"Dry Skin","evs":{"hp":248,"atk":132,"def":116,"spa":0,"spd":0,"spe":12},"nature":"Adamant","moves":[["Substitute"],["Bulk Up"],["Sucker Punch"],["Drain Punch"]]}]},"umbreon":{"flags":{},"sets":[{"species":"Umbreon","gender":"M","item":"Leftovers","ability":"Synchronize","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Protect"],["Wish"],["Heal Bell"],["Foul Play"]]},{"species":"Umbreon","gender":"M","item":"Leftovers","ability":"Synchronize","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Protect"],["Wish"],["Heal Bell"],["Foul Play"]]}]},"vaporeon":{"flags":{},"sets":[{"species":"Vaporeon","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":200,"atk":0,"def":252,"spa":0,"spd":56,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Protect"],["Wish"],["Heal Bell"],["Scald"]]}]},"froslass":{"flags":{},"sets":[{"species":"Froslass","gender":"F","item":"Focus Sash","ability":"Cursed Body","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Destiny Bond"],["Spikes"],["Taunt"],["Icy Wind"]]}]},"houndoom":{"flags":{"megaOnly":1},"sets":[{"species":"Houndoom","gender":"","item":"Houndoominite","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Taunt"],["Fire Blast"],["Dark Pulse"]]},{"species":"Houndoom","gender":"","item":"Houndoominite","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Sunny Day"],["Fire Blast"],["Dark Pulse"],["Solar Beam"]]}]},"kyurem":{"flags":{},"sets":[{"species":"Kyurem","gender":"","item":"Choice Scarf","ability":"Pressure","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Draco Meteor"],["Ice Beam"],["Earth Power"],["Outrage"]]},{"species":"Kyurem","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Draco Meteor"],["Ice Beam"],["Earth Power"],["Flash Cannon"]]},{"species":"Kyurem","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Draco Meteor"],["Ice Beam"],["Earth Power"]]},{"species":"Kyurem","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":56,"atk":0,"def":0,"spa":235,"spd":0,"spe":216},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Substitute"],["Ice Beam"],["Earth Power"]]}]},"shuckle":{"flags":{},"sets":[{"species":"Shuckle","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Sticky Web"],["Encore"],["Knock Off"]]}]},"tornadus":{"flags":{},"sets":[{"species":"Tornadus","gender":"M","ability":"Defiant","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Acrobatics"],["Knock Off"],["Superpower"],["U-turn"]]},{"species":"Tornadus","gender":"M","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Tailwind"],["Hurricane"],["Heat Wave"],["Grass Knot"]]}]},"yanmega":{"flags":{},"sets":[{"species":"Yanmega","gender":"","item":"Choice Specs","ability":"Tinted Lens","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Sleep Talk"],["Bug Buzz"],["Air Slash"],["Giga Drain"]]},{"species":"Yanmega","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Protect"],["Bug Buzz"],["Air Slash"],["Giga Drain"]]}]},"zoroark":{"flags":{},"sets":[{"species":"Zoroark","gender":"","item":"Choice Specs","ability":"Illusion","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Trick"],["Night Daze"],["Focus Blast"],["Flamethrower"]]},{"species":"Zoroark","gender":"","item":"Life Orb","ability":"Illusion","evs":{"hp":0,"atk":196,"def":0,"spa":96,"spd":0,"spe":216},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Sucker Punch"],["Knock Off"],["Flamethrower"],["Grass Knot"]]},{"species":"Zoroark","gender":"","item":"Life Orb","ability":"Illusion","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Night Daze"],["Focus Blast"],["Flamethrower"]]}]},"cresselia":{"flags":{},"sets":[{"species":"Cresselia","gender":"F","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Moonlight"],["Thunder Wave"],["Psyshock"],["Moonblast"]]},{"species":"Cresselia","gender":"F","item":"Light Clay","ability":"Levitate","evs":{"hp":248,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Lunar Dance"],["Reflect"],["Light Screen"],["Moonblast"]]},{"species":"Cresselia","gender":"F","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":116,"spa":0,"spd":0,"spe":144},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Moonlight"],["Substitute"],["Calm Mind"],["Psyshock"]]},{"species":"Cresselia","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Reflect"],["Light Screen"],["Lunar Dance"],["Psyshock"]]},{"species":"Cresselia","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":136,"spa":0,"spd":0,"spe":120},"nature":"Bold","moves":[["Substitute"],["Calm Mind"],["Moonblast"],["Moonlight"]]},{"species":"Cresselia","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":116,"spa":0,"spd":0,"spe":144},"nature":"Bold","moves":[["Substitute"],["Calm Mind"],["Psyshock"],["Moonblast"]]}]},"gligar":{"flags":{},"sets":[{"species":"Gligar","gender":"","item":"Eviolite","ability":"Hyper Cutter","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Roost"],["Defog"],["Toxic"],["Earthquake"]]},{"species":"Gligar","gender":"","item":"Eviolite","ability":"Hyper Cutter","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Roost"],["Defog"],["Stealth Rock"],["Earthquake"]]},{"species":"Gligar","gender":"","item":"Eviolite","ability":"Hyper Cutter","evs":{"hp":248,"atk":0,"def":20,"spa":0,"spd":240,"spe":0},"nature":"Careful","moves":[["Roost"],["Defog"],["Toxic"],["Earthquake"]]},{"species":"Gligar","gender":"","item":"Eviolite","ability":"Immunity","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Swords Dance"],["Baton Pass"],["Roost"],["Earthquake"]]}]},"aromatisse":{"flags":{},"sets":[{"species":"Aromatisse","gender":"","item":"Leftovers","ability":"Aroma Veil","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Protect"],["Wish"],["Aromatherapy"],["Moonblast"]]},{"species":"Aromatisse","gender":"","item":"Leftovers","ability":"Aroma Veil","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Protect"],["Wish"],["Aromatherapy"],["Moonblast"]]}]},"roserade":{"flags":{},"sets":[{"species":"Roserade","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Spikes"],["Giga Drain"],["Sludge Bomb"],["Synthesis"]]},{"species":"Roserade","gender":"","item":"Black Sludge","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":244,"spe":16},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Rest"],["Spikes"],["Giga Drain"],["Sludge Bomb"]]}]},"cobalion":{"flags":{},"sets":[{"species":"Cobalion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Calm Mind"],["Focus Blast"],["Flash Cannon"],["Hidden Power Ghost"]],"ivs":{"def":30,"spd":30}},{"species":"Cobalion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Close Combat"],["Iron Head"],["Stone Edge"]]},{"species":"Cobalion","gender":"","item":"Leftovers","ability":"Justified","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Taunt"],["Close Combat"],["Iron Head"]]}]},"dragalge":{"flags":{},"sets":[{"species":"Dragalge","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":200,"atk":0,"def":0,"spa":252,"spd":0,"spe":56},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Wave"],["Hidden Power Fire"],["Focus Blast"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Dragalge","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":200,"atk":0,"def":0,"spa":252,"spd":0,"spe":56},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Wave"],["Scald"],["Focus Blast"]]},{"species":"Dragalge","gender":"","item":"Black Sludge","ability":"Adaptability","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Toxic Spikes"],["Dragon Tail"],["Sludge Bomb"],["Scald"]]},{"species":"Dragalge","gender":"","item":"Dragon Fang","ability":"Adaptability","evs":{"hp":188,"atk":0,"def":0,"spa":252,"spd":0,"spe":68},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Bomb"],["Focus Blast"],["Dragon Pulse"]]},{"species":"Dragalge","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":188,"atk":0,"def":0,"spa":252,"spd":0,"spe":68},"nature":"Modest","moves":[["Draco Meteor"],["Dragon Pulse"],["Sludge Wave"],["Focus Blast"]]}]},"reuniclus":{"flags":{},"sets":[{"species":"Reuniclus","gender":"","item":"Leftovers","ability":"Magic Guard","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Calm Mind"],["Psyshock"],["Focus Blast"]]},{"species":"Reuniclus","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Calm Mind"],["Psyshock"],["Focus Blast"]]}]},"whimsicott":{"flags":{},"sets":[{"species":"Whimsicott","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Encore"],["Giga Drain"],["Moonblast"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Whimsicott","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Encore"],["Taunt"],["Leech Seed"],["Moonblast"]]},{"species":"Whimsicott","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Giga Drain"],["Hidden Power Fire"],["Encore"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Whimsicott","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":248,"atk":0,"def":236,"spa":0,"spd":0,"spe":24},"nature":"Bold","moves":[["Encore"],["U-turn"],["Stun Spore"],["Moonblast"]]}]},"sharpedo":{"flags":{},"sets":[{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Protect"],["Waterfall"],["Crunch"],["Ice Fang"]]},{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naughty","moves":[["Protect"],["Crunch"],["Ice Fang"],["Hydro Pump"]]},{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Protect"],["Destiny Bond"],["Waterfall"],["Crunch"]]},{"species":"Sharpedo","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Protect"],["Destiny Bond"],["Waterfall"],["Crunch"]]}]},"sceptile":{"flags":{"megaOnly":1},"sets":[{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Giga Drain"],["Dragon Pulse"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Giga Drain"],["Dragon Pulse"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Dragon Pulse"],["Giga Drain"],["Focus Blast"],["Substitute"]]},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Giga Drain"],["Dragon Pulse"],["Focus Blast"],["Leaf Storm"]]},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Outrage"],["Earthquake"]]},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Dragon Pulse"],["Giga Drain"],["Focus Blast"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"rhyperior":{"flags":{},"sets":[{"species":"Rhyperior","gender":"","item":"Choice Band","ability":"Solid Rock","evs":{"hp":168,"atk":248,"def":0,"spa":0,"spd":0,"spe":92},"nature":"Adamant","moves":[["Stone Edge"],["Earthquake"],["Megahorn"],["Aqua Tail"]]},{"species":"Rhyperior","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":248,"atk":16,"def":244,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Megahorn"]]},{"species":"Rhyperior","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Megahorn"]]}]},"bronzong":{"flags":{},"sets":[{"species":"Bronzong","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Reflect"],["Light Screen"],["Explosion"]]},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Toxic"],["Gyro Ball"],["Earthquake"]]},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Toxic"],["Gyro Ball"],["Earthquake"]]}]},"feraligatr":{"flags":{},"sets":[{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":32,"atk":248,"def":0,"spa":0,"spd":0,"spe":228},"nature":"Jolly","moves":[["Dragon Dance"],["Waterfall"],["Ice Punch"],["Crunch"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":52,"atk":252,"def":0,"spa":0,"spd":0,"spe":204},"nature":"Adamant","moves":[["Swords Dance"],["Aqua Jet"],["Waterfall"],["Crunch"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Superpower"],["Aqua Jet"],["Swords Dance"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Superpower"],["Dragon Dance"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Crunch"],["Dragon Dance"]]}]},"slurpuff":{"flags":{},"sets":[{"species":"Slurpuff","gender":"","item":"Sitrus Berry","ability":"Unburden","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Belly Drum"],["Play Rough"],["Drain Punch"],["Return"]],"happiness":255},{"species":"Slurpuff","gender":"","item":"Chesto Berry","ability":"Unburden","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Rest"],["Calm Mind"],["Draining Kiss"],["Flamethrower"]]},{"species":"Slurpuff","gender":"","item":"Sitrus Berry","ability":"Unburden","evs":{"hp":52,"atk":252,"def":0,"spa":0,"spd":0,"spe":204},"nature":"Adamant","moves":[["Belly Drum"],["Play Rough"],["Return"],["Aromatherapy"]],"happiness":255}]},"pangoro":{"flags":{},"sets":[{"species":"Pangoro","gender":"","item":"Choice Band","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Superpower"],["Gunk Shot"],["Ice Punch"]]},{"species":"Pangoro","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Drain Punch"],["Knock Off"],["Gunk Shot"]]},{"species":"Pangoro","gender":"","item":"Lum Berry","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Drain Punch"],["Knock Off"],["Gunk Shot"]]}]},"abomasnow":{"flags":{"megaOnly":1},"sets":[{"species":"Abomasnow","gender":"","item":"Abomasite","ability":"Soundproof","evs":{"hp":0,"atk":128,"def":0,"spa":252,"spd":0,"spe":128},"nature":"Mild","moves":[["Blizzard"],["Giga Drain"],["Ice Shard"],["Focus Blast"]]},{"species":"Abomasnow","gender":"","item":"Abomasite","ability":"Soundproof","evs":{"hp":128,"atk":252,"def":0,"spa":0,"spd":0,"spe":128},"nature":"Adamant","moves":[["Ice Shard"],["Wood Hammer"],["Earthquake"],["Swords Dance"]]}]}},"RU":{"venusaur":{"flags":{},"sets":[{"species":"Venusaur","gender":"","item":"Life Orb","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Sludge Bomb"],["Synthesis"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Venusaur","gender":"","item":"Black Sludge","ability":"Overgrow","evs":{"hp":252,"atk":0,"def":0,"spa":92,"spd":0,"spe":164},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"diancie":{"flags":{},"sets":[{"species":"Diancie","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Heal Bell"],["Moonblast"],["Diamond Storm"]]},{"species":"Diancie","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Rest"],["Sleep Talk"],["Moonblast"]]},{"species":"Diancie","gender":"","item":"Life Orb","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":252,"spd":0,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Quiet","moves":[["Trick Room"],["Moonblast"],["Earth Power"],["Psychic","Diamond Storm","Explosion"]]}]},"manectric":{"flags":{},"sets":[{"species":"Manectric","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Flamethrower","Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Manectric","gender":"","item":"Choice Scarf","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Hidden Power Ice"],["Overheat","Switcheroo"]],"ivs":{"atk":30,"def":30}}]},"hoopa":{"flags":{},"sets":[{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute","Nasty Plot"],["Shadow Ball"],["Psyshock"],["Focus Blast"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Knock Off"],["Shadow Ball"],["Psyshock"],["Focus Blast"]]},{"species":"Hoopa","gender":"","item":"Leftovers","ability":"Magician","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Nasty Plot"],["Shadow Ball"],["Focus Blast"]]}]},"banette":{"flags":{"megaOnly":1},"sets":[{"species":"Banette","gender":"","item":"Banettite","ability":"Insomnia","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Destiny Bond","Gunk Shot"],["Knock Off"],["Sucker Punch"],["Will-O-Wisp","Taunt","Thunder Wave"]]}]},"jellicent":{"flags":{},"sets":[{"species":"Jellicent","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":212,"spa":0,"spd":0,"spe":44},"nature":"Bold","moves":[["Scald","Hex"],["Will-O-Wisp"],["Recover"],["Taunt"]]}]},"sigilyph":{"flags":{},"sets":[{"species":"Sigilyph","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Air Slash"],["Heat Wave"],["Roost"],["Psychic"]]},{"species":"Sigilyph","gender":"","item":"Flame Orb","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Roost"],["Psycho Shift"],["Air Slash"]]}]},"gastrodon":{"flags":{},"sets":[{"species":"Gastrodon","gender":"","item":"Leftovers","ability":"Storm Drain","evs":{"hp":252,"atk":0,"def":244,"spa":0,"spd":0,"spe":12},"nature":"Bold","moves":[["Scald"],["Recover"],["Toxic"],["Earth Power"]]}]},"delphox":{"flags":{},"sets":[{"species":"Delphox","gender":"","item":"Choice Scarf","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Psyshock"],["Dazzling Gleam"],["Trick","Overheat"]]},{"species":"Delphox","gender":"","item":"Choice Specs","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Psychic"],["Grass Knot"],["Flamethrower"]]},{"species":"Delphox","gender":"","item":"Choice Specs","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Psychic"],["Grass Knot"],["Hidden Power Water"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Delphox","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Fire Blast"],["Psychic"],["Grass Knot"]]},{"species":"Delphox","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Fire Blast"],["Psychic"],["Hidden Power Water"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Delphox","gender":"","item":"Leftovers","ability":"Blaze","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Calm Mind"],["Flamethrower"],["Psyshock"]]}]},"clawitzer":{"flags":{},"sets":[{"species":"Clawitzer","gender":"","item":"Life Orb","ability":"Mega Launcher","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Scald"],["Dark Pulse"],["Ice Beam"],["Aura Sphere"]]}]},"rotommow":{"flags":{},"sets":[{"species":"Rotom-Mow","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":48,"atk":0,"def":0,"spa":252,"spd":0,"spe":208},"nature":"Timid","moves":[["Leaf Storm"],["Volt Switch"],["Thunderbolt"],["Trick"]]}]},"rotom":{"flags":{},"sets":[{"species":"Rotom","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":124,"atk":0,"def":0,"spa":132,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Will-O-Wisp"],["Discharge"],["Hex"]]}]},"hitmontop":{"flags":{},"sets":[{"species":"Hitmontop","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Rapid Spin"],["Close Combat"],["Foresight"],["Toxic"]]}]},"braviary":{"flags":{},"sets":[{"species":"Braviary","gender":"","item":"Choice Scarf","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Superpower"],["U-turn"]],"happiness":255},{"species":"Braviary","gender":"","item":"Life orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Brave Bird"],["Return"],["Superpower"],["Roost"]],"happiness":255},{"species":"Braviary","gender":"","item":"Leftovers","ability":"Defiant","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":212,"spe":44},"nature":"Careful","moves":[["Substitute"],["Bulk Up"],["Roost"],["Brave Bird"]]}]},"registeel":{"flags":{},"sets":[{"species":"Registeel","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Curse"],["Iron Head"],["Rest"],["Sleep Talk"]]},{"species":"Registeel","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Seismic Toss"],["Protect"],["Thunder Wave","Toxic"],["Stealth Rock"]]}]},"omastar":{"flags":{},"sets":[{"species":"Omastar","gender":"","item":"Focus Sash","ability":"Weak Armor","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Spikes"],["Scald"],["Ice Beam"]]},{"species":"Omastar","gender":"","item":"Choice Specs","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Scald"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"magneton":{"flags":{},"sets":[{"species":"Magneton","gender":"","item":"Eviolite","ability":"Magnet Pull","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Magnet Rise"],["Thunderbolt"],["Flash Cannon"],["Hidden Power Water"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Magneton","gender":"","item":"Choice Specs","ability":"Analytic","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Volt Switch"],["Thunderbolt"],["Flash Cannon"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Magneton","gender":"","item":"Eviolite","ability":"Analytic","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Flash Cannon"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"jolteon":{"flags":{},"sets":[{"species":"Jolteon","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Water"],["Volt Switch"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Grass"],["Volt Switch"]],"ivs":{"atk":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":68,"atk":0,"def":0,"spa":252,"spd":0,"spe":188},"nature":"Timid","moves":[["Substitute"],["Baton Pass"],["Thunderbolt"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Life Orb","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Life Orb","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Water"],["Volt Switch"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Life Orb","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Grass"],["Volt Switch"]],"ivs":{"atk":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Expert Belt","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Expert Belt","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Water"],["Volt Switch"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Expert Belt","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Grass"],["Volt Switch"]],"ivs":{"atk":30,"spa":30}}]},"golbat":{"flags":{},"sets":[{"species":"Golbat","gender":"","item":"Eviolite","ability":"Infiltrator","evs":{"hp":248,"atk":0,"def":180,"spa":0,"spd":0,"spe":80},"nature":"Impish","moves":[["Taunt"],["Roost"],["Brave Bird"],["Super Fang","Toxic"]]}]},"exploud":{"flags":{},"sets":[{"species":"Exploud","gender":"","item":"Choice Specs","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Boomburst"],["Fire Blast"],["Sleep Talk"],["Focus Blast"]]},{"species":"Exploud","gender":"","item":"Life Orb","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Boomburst"],["Fire Blast"],["Surf"],["Focus Blast"]]}]},"eelektross":{"flags":{},"sets":[{"species":"Eelektross","gender":"","item":"Assault Vest","ability":"Levitate","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Modest","moves":[["Volt Switch"],["Giga Drain"],["Flamethrower"],["Knock Off"]]}]},"dugtrio":{"flags":{},"sets":[{"species":"Dugtrio","gender":"","item":"Life Orb","ability":"Arena Trap","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Earthquake"],["Substitute","Memento"],["Sucker Punch"],["Aerial Ace"]]},{"species":"Dugtrio","gender":"","item":"Life Orb","ability":"Arena Trap","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Earthquake"],["Substitute","Memento"],["Sucker Punch"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"druddigon":{"flags":{},"sets":[{"species":"Druddigon","gender":"","item":"Rocky Helmet","ability":"Rough Skin","evs":{"hp":236,"atk":0,"def":252,"spa":0,"spd":0,"spe":20},"nature":"Impish","moves":[["Dragon Tail"],["Stealth Rock"],["Fire Punch"],["Glare","Gunk Shot"]]},{"species":"Druddigon","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":236,"atk":252,"def":0,"spa":0,"spd":0,"spe":20},"nature":"Adamant","moves":[["Outrage","Dragon Claw"],["Sucker Punch"],["Fire Punch"],["Gunk Shot"]]}]},"accelgor":{"flags":{},"sets":[{"species":"Accelgor","gender":"","item":"Focus Sash","ability":"Sticky Hold","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Timid","moves":[["Spikes"],["Final Gambit"],["Encore"],["Bug Buzz"]]},{"species":"Accelgor","gender":"","item":"Life Orb","ability":"Sticky Hold","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Bug Buzz"],["Focus Blast"],["Spikes"],["Sludge Bomb"]]},{"species":"Accelgor","gender":"","item":"Life Orb","ability":"Sticky Hold","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Bug Buzz"],["Focus Blast"],["Spikes"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"spiritomb":{"flags":{},"sets":[{"species":"Spiritomb","gender":"","item":"Leftovers","ability":"Infiltrator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Dark Pulse"],["Rest"],["Sleep Talk"]]},{"species":"Spiritomb","gender":"","item":"Leftovers","ability":"Infiltrator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Will-O-Wisp"],["Foul Play"],["Rest"],["Sleep Talk"]]},{"species":"Spiritomb","gender":"","item":"BlackGlasses","ability":"Infiltrator","evs":{"hp":212,"atk":252,"def":0,"spa":0,"spd":0,"spe":44},"nature":"Adamant","moves":[["Sucker Punch"],["Pursuit"],["Will-O-Wisp"],["Foul Play","Taunt"]]}]},"drapion":{"flags":{},"sets":[{"species":"Drapion","gender":"","item":"Black Sludge","ability":"Battle Armor","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":216,"spe":44},"nature":"Careful","moves":[["Knock Off"],["Taunt"],["Toxic Spikes"],["Poison Jab"]]},{"species":"Drapion","gender":"","item":"Shuca Berry","ability":"Battle Armor","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Knock Off"],["Pursuit"],["Poison Jab"]]},{"species":"Drapion","gender":"","item":"Shuca Berry","ability":"Battle Armor","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Knock Off"],["Aqua Tail"],["Poison Jab"]]}]},"camerupt":{"flags":{"megaOnly":1},"sets":[{"species":"Camerupt","gender":"","item":"Cameruptite","ability":"Solid Rock","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Fire Blast","Flamethrower"],["Earth Power"],["Hidden Power Ice"],["Toxic"]],"ivs":{"atk":30,"def":30}}]},"bronzong":{"flags":{},"sets":[{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Brave","moves":[["Trick Room"],["Stealth Rock"],["Earthquake"],["Explosion"]]},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Hidden Power Fire"],["Gyro Ball"],["Earthquake"],["Toxic"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Gyro Ball"],["Psywave"],["Toxic"]]}]},"rhyperior":{"flags":{},"sets":[{"species":"Rhyperior","gender":"","item":"Choice Band","ability":"Solid Rock","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Stone Edge"],["Ice Punch"],["Megahorn"]]},{"species":"Rhyperior","gender":"","item":"Life Orb","ability":"Solid Rock","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Rock Polish"],["Earthquake"],["Stone Edge"],["Ice Punch","Swords Dance"]]},{"species":"Rhyperior","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":248,"atk":16,"def":0,"spa":0,"spd":244,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Ice Punch","Megahorn"]]}]},"hitmonlee":{"flags":{},"sets":[{"species":"Hitmonlee","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Knock Off"],["Rapid Spin"],["Close Combat"]]},{"species":"Hitmonlee","gender":"","item":"Life Orb","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["High Jump Kick"],["Knock Off"],["Mach Punch"],["Rapid Spin"]]},{"species":"Hitmonlee","gender":"","item":"Liechi Berry","ability":"Unburden","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Endure"],["Reversal"],["Knock Off"],["Mach Punch"]]}]},"glalie":{"flags":{"megaOnly":1},"sets":[{"species":"Glalie","gender":"","item":"Glalitite","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spikes"],["Double-Edge"],["Explosion"],["Ice Shard"]]},{"species":"Glalie","gender":"","item":"Glalitite","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Double-Edge"],["Freeze-Dry"],["Earthquake"],["Explosion"]]}]},"fletchinder":{"flags":{},"sets":[{"species":"Fletchinder","gender":"","ability":"Gale Wings","evs":{"hp":160,"atk":252,"def":74,"spa":0,"spd":24,"spe":0},"nature":"Adamant","moves":[["Acrobatics"],["Swords Dance"],["Will-O-Wisp"],["Roost"]]}]},"escavalier":{"flags":{},"sets":[{"species":"Escavalier","gender":"","item":"Assault Vest","ability":"Overcoat","evs":{"hp":174,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Megahorn"],["Iron Head"],["Knock Off"],["Drill Run","Pursuit"]]},{"species":"Escavalier","gender":"","item":"Choice Band","ability":"Overcoat","evs":{"hp":174,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Megahorn"],["Iron Head"],["Knock Off"],["Drill Run"]]}]},"aromatisse":{"flags":{},"sets":[{"species":"Aromatisse","gender":"","item":"Leftovers","ability":"Aroma Veil","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Wish"],["Protect"],["Moonblast"],["Aromatherapy"]]}]},"meloetta":{"flags":{},"sets":[{"species":"Meloetta","gender":"","item":"Assault Vest","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psyshock"],["Hyper Voice"],["Focus Blast"],["Shadow Ball","Grass Knot","Dazzling Gleam"]]},{"species":"Meloetta","gender":"","item":"Choice Scarf","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psyshock"],["Focus Blast"],["Dazzling Gleam","Shadow Ball","Trick","U-turn"]]},{"species":"Meloetta","gender":"","item":"Choice Specs","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psychic"],["Focus Blast"],["U-turn","Dazzling Gleam","Shadow Ball"]]},{"species":"Meloetta","gender":"","item":"Life Orb","ability":"Serene Grace","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Jolly","moves":[["Relic Song"],["Return"],["Close Combat"],["Knock Off"]],"happiness":255},{"species":"Meloetta","gender":"","item":"Colbur Berry","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Hyper Voice","Psychic"],["Shadow Ball"],["Focus Blast"]]},{"species":"Meloetta","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Perish Song"],["Knock Off"],["Heal Bell"],["Thunder Wave"]]},{"species":"Meloetta","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Modest","moves":[["Substitute"],["Calm Mind"],["Hyper Voice"],["Shadow Ball"]]}]},"alomomola":{"flags":{},"sets":[{"species":"Alomomola","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":120,"atk":0,"def":136,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Scald"],["Wish"],["Protect"],["Toxic"]]}]},"emboar":{"flags":{},"sets":[{"species":"Emboar","gender":"","item":"Choice Band","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Flare Blitz"],["Superpower"],["Wild Charge"],["Sucker Punch"]]},{"species":"Emboar","gender":"","item":"Expert Belt","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Flare Blitz"],["Superpower"],["Wild Charge"],["Sucker Punch"]]},{"species":"Emboar","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Superpower"],["Wild Charge"],["Toxic"]]}]},"seismitoad":{"flags":{},"sets":[{"species":"Seismitoad","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":200,"atk":0,"def":252,"spa":0,"spd":56,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Scald"],["Earthquake"],["Knock Off"]]},{"species":"Seismitoad","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Rain Dance"],["Hydro Pump"],["Earth Power"],["Sludge Bomb"]]},{"species":"Seismitoad","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":164,"atk":0,"def":0,"spa":252,"spd":0,"spe":92},"nature":"Modest","moves":[["Stealth Rock"],["Hydro Pump"],["Earth Power"],["Grass Knot"]]}]},"qwilfish":{"flags":{},"sets":[{"species":"Qwilfish","gender":"","item":"Black Sludge","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":232,"spa":0,"spd":0,"spe":24},"nature":"Bold","moves":[["Spikes"],["Pain Split"],["Scald"],["Taunt"]]},{"species":"Qwilfish","gender":"","item":"Focus Sash","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spikes"],["Taunt"],["Toxic Spikes"],["Explosion"]]}]},"granbull":{"flags":{},"sets":[{"species":"Granbull","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":232,"spa":0,"spd":0,"spe":24},"nature":"Impish","moves":[["Play Rough"],["Earthquake"],["Heal Bell"],["Roar"]]},{"species":"Granbull","gender":"","item":"Choice Band","ability":"Intimidate","evs":{"hp":212,"atk":252,"def":0,"spa":0,"spd":0,"spe":44},"nature":"Adamant","moves":[["Play Rough"],["Fire Punch"],["Thunder Punch"],["Close Combat"]]}]},"medicham":{"flags":{},"sets":[{"species":"Medicham","gender":"","item":"Life Orb","ability":"Pure Power","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["High Jump Kick"],["Zen Headbutt"],["Thunder Punch"],["Drain Punch"]]},{"species":"Medicham","gender":"","item":"Choice Scarf","ability":"Pure Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Zen Headbutt"],["Rock Slide","Poison Jab"],["Drain Punch","Trick"]]}]},"smeargle":{"flags":{},"sets":[{"species":"Smeargle","gender":"","item":"Focus Sash","ability":"Own Tempo","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Spore","Dark Void"],["Sticky Web"],["Stealth Rock"],["Explosion"]]}]},"absol":{"flags":{},"sets":[{"species":"Absol","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Superpower"],["Sucker Punch"],["Iron Tail","Pursuit"]]},{"species":"Absol","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Superpower"],["Sucker Punch"],["Swords Dance"]]}]},"aerodactyl":{"flags":{},"sets":[{"species":"Aerodactyl","gender":"","item":"Life Orb","ability":"Unnerve","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Stone Edge"],["Fire Fang","Earthquake"],["Aerial Ace"],["Roost"]]}]},"aggron":{"flags":{},"sets":[{"species":"Aggron","gender":"","item":"Choice Band","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Head Smash"],["Heavy Slam"],["Sleep Talk","Fire Punch"],["Low Kick"]]}]},"blastoise":{"flags":{},"sets":[{"species":"Blastoise","gender":"","item":"Leftovers","ability":"Torrent","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Scald"],["Rapid Spin"],["Toxic"],["Foresight","Refresh"]]}]},"slowking":{"flags":{},"sets":[{"species":"Slowking","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Scald"],["Psyshock"],["Calm Mind","Thunder Wave"],["Slack Off"]]},{"species":"Slowking","gender":"","item":"Choice Specs","ability":"Regenerator","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Scald"],["Psyshock"],["Fire Blast"],["Trick"]]},{"species":"Slowking","gender":"","item":"Colbur Berry","ability":"Regenerator","evs":{"hp":160,"atk":0,"def":0,"spa":0,"spd":0,"spe":96},"nature":"Bold","moves":[["Scald"],["Psyshock"],["Fire Blast"],["Thunder Wave"]]}]},"abomasnow":{"flags":{},"sets":[{"species":"Abomasnow","gender":"","item":"Life Orb","ability":"Snow Warning","evs":{"hp":0,"atk":132,"def":0,"spa":252,"spd":0,"spe":124},"nature":"Mild","moves":[["Blizzard"],["Giga Drain"],["Ice Shard"],["Focus Blast"]]}]},"flygon":{"flags":{},"sets":[{"species":"Flygon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Earth Power"],["Roost"],["Fire Blast"]]},{"species":"Flygon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Earth Power"],["Roost"],["Defog"]]},{"species":"Flygon","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":116,"spa":0,"spd":116,"spe":24},"nature":"Careful","moves":[["Defog"],["Roost"],["Earthquake"],["U-turn"]]},{"species":"Flygon","gender":"","item":"Choice Band","ability":"Levitate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Outrage"],["Earthquake"],["U-turn"],["Iron Tail"]]}]},"scrafty":{"flags":{},"sets":[{"species":"Scrafty","gender":"","item":"Choice Band","ability":"Intimidate","evs":{"hp":152,"atk":252,"def":0,"spa":0,"spd":0,"spe":104},"nature":"Adamant","moves":[["Knock Off"],["High Jump Kick"],["Drain Punch"],["Poison Jab"]]},{"species":"Scrafty","gender":"","item":"Chople Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["High Jump Kick"],["Poison Jab","Iron Head"],["Dragon Dance"]]},{"species":"Scrafty","gender":"","item":"Coba Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["High Jump Kick"],["Head Smash"],["Dragon Dance"]]}]},"houndoom":{"flags":{},"sets":[{"species":"Houndoom","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Fire Blast"],["Dark Pulse"],["Sucker Punch"],["Nasty Plot"]]},{"species":"Houndoom","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":220,"def":0,"spa":36,"spd":0,"spe":252},"nature":"Hasty","moves":[["Fire Blast"],["Crunch"],["Sucker Punch"],["Pursuit"]]}]},"togetic":{"flags":{},"sets":[{"species":"Togetic","gender":"","item":"Eviolite","ability":"Serene Grace","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Dazzling Gleam"],["Roost"],["Nasty Plot"],["Baton Pass"]]},{"species":"Togetic","gender":"","item":"Eviolite","ability":"Serene Grace","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Dazzling Gleam"],["Roost"],["Flamethrower"],["Thunder Wave"]]}]},"gallade":{"flags":{},"sets":[{"species":"Gallade","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Zen Headbutt"],["Knock Off"],["Swords Dance"]]},{"species":"Gallade","gender":"","item":"Choice Band","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Zen Headbutt"],["Knock Off"],["Drain Punch"]]}]},"virizion":{"flags":{},"sets":[{"species":"Virizion","gender":"","item":"Lum Berry","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Leaf Blade"],["Close Combat"],["Stone Edge","Zen Headbutt"],["Swords Dance"]]},{"species":"Virizion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Giga Drain"],["Focus Blast"],["Hidden Power Ice"],["Calm Mind"]],"ivs":{"atk":30,"def":30}},{"species":"Virizion","gender":"","item":"Leftovers","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Giga Drain"],["Focus Blast"],["Substitute"],["Calm Mind"]]}]},"uxie":{"flags":{},"sets":[{"species":"Uxie","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":64,"spa":0,"spd":0,"spe":192},"nature":"Bold","moves":[["Stealth Rock"],["Psyshock"],["Thunder Wave"],["U-turn"]]}]},"sneasel":{"flags":{},"sets":[{"species":"Sneasel","gender":"","item":"Life Orb","ability":"Pickpocket","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Icicle Crash"],["Ice Shard"],["Low Kick","Pursuit"]]}]},"samurott":{"flags":{},"sets":[{"species":"Samurott","gender":"","item":"Lum Berry","ability":"Shell Armor","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Waterfall"],["Megahorn"],["Aqua Jet"]]}]},"gurdurr":{"flags":{},"sets":[{"species":"Gurdurr","gender":"","item":"Eviolite","ability":"Guts","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":8,"spe":0},"nature":"Adamant","moves":[["Bulk Up"],["Drain Punch"],["Knock Off"],["Mach Punch"]]}]},"poliwrath":{"flags":{},"sets":[{"species":"Poliwrath","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Scald"],["Circle Throw"],["Rest"],["Sleep Talk"]]},{"species":"Poliwrath","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]},{"species":"Poliwrath","gender":"","item":"Life Orb","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]},{"species":"Poliwrath","gender":"","item":"Choice Specs","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]}]},"vivillon":{"flags":{},"sets":[{"species":"Vivillon","gender":"","item":"Leftovers","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Sleep Powder"],["Quiver Dance"],["Hurricane"],["Substitute"]]}]},"audino":{"flags":{"megaOnly":1},"sets":[{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Dazzling Gleam"],["Fire Blast"],["Surf"],["Healing Wish"]]}]},"mesprit":{"flags":{},"sets":[{"species":"Mesprit","gender":"","item":"Colbur Berry","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam","Ice Beam"],["Stealth Rock"],["Healing Wish"]]}]},"archeops":{"flags":{},"sets":[{"species":"Archeops","gender":"","item":"Focus Sash","ability":"Defeatist","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Stealth Rock"],["Taunt"],["Endeavor"],["Head Smash"]]}]},"malamar":{"flags":{},"sets":[{"species":"Malamar","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":108,"spe":152},"nature":"Jolly","moves":[["Superpower"],["Knock Off"],["Rest"],["Sleep Talk"]]}]},"roselia":{"flags":{},"sets":[{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":172,"spa":0,"spd":88,"spe":0},"nature":"Calm","moves":[["Spikes"],["Synthesis"],["Giga Drain"],["Sludge Bomb"]]}]},"piloswine":{"flags":{},"sets":[{"species":"Piloswine","gender":"","item":"Eviolite","ability":"Thick Fat","evs":{"hp":240,"atk":252,"def":0,"spa":0,"spd":0,"spe":16},"nature":"Adamant","moves":[["Stealth Rock"],["Ice Shard"],["Earthquake"],["Icicle Crash"]]}]},"sawk":{"flags":{},"sets":[{"species":"Sawk","gender":"","item":"Choice Band","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Zen Headbutt"],["Stone Edge"]]},{"species":"Sawk","gender":"","item":"Expert Belt","ability":"Mold Breaker","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Stone Edge"],["Zen Headbutt"]]},{"species":"Sawk","gender":"","item":"Lum Berry","ability":"Mold Breaker","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Earthquake"],["Stone Edge"]]},{"species":"Sawk","gender":"","item":"Choice Scarf","ability":"Sturdy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Stone Edge"],["Zen Headbutt"]]}]}},"NU":{"dodrio":{"flags":{},"sets":[{"species":"Dodrio","gender":"","item":"Choice Band","ability":"Early Bird","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Knock Off"],["Quick Attack"]],"happiness":255}]},"chatot":{"flags":{},"sets":[{"species":"Chatot","gender":"","item":"Choice Scarf","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["Chatter"],["U-turn"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Chatot","gender":"","item":"Choice Specs","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["Chatter"],["U-turn"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Chatot","gender":"","item":"Leftovers","ability":"Tangled Feet","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["Chatter"],["Nasty Plot"],["Encore"]]}]},"carracosta":{"flags":{},"sets":[{"species":"Carracosta","gender":"","item":"Life Orb","ability":"Solid Rock","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Waterfall"],["Stone Edge"],["Aqua Jet"]]},{"species":"Carracosta","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Scald"],["Rock Slide"],["Knock Off","Toxic"]]},{"species":"Carracosta","gender":"","item":"Life Orb","ability":"Solid Rock","evs":{"hp":0,"atk":28,"def":0,"spa":228,"spd":0,"spe":252},"nature":"Naive","moves":[["Shell Smash"],["Hydro Pump"],["Stone Edge"],["Ice Beam"]]}]},"beheeyem":{"flags":{},"sets":[{"species":"Beheeyem","gender":"","item":"Life Orb","ability":"Analytic","evs":{"hp":248,"atk":0,"def":8,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["Trick Room"],["Psychic"],["Thunderbolt"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Beheeyem","gender":"","item":"Choice Specs","ability":"Analytic","evs":{"hp":132,"atk":0,"def":0,"spa":252,"spd":0,"spe":124},"nature":"Modest","moves":[["Psychic","Psyshock"],["Signal Beam"],["Hidden Power Ground"],["Trick","Thunderbolt"]],"ivs":{"spa":30,"spd":30}}]},"basculin":{"flags":{},"sets":[{"species":"Basculin","gender":"","item":"Choice Band","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Waterfall"],["Aqua Jet"],["Zen Headbutt"],["Superpower"]]},{"species":"Basculin","gender":"","item":"Splash Plate","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Aqua Jet"],["Double-Edge"],["Superpower"]]}]},"barbaracle":{"flags":{},"sets":[{"species":"Barbaracle","gender":"","item":"Shuca Berry","ability":"Tough Claws","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Razor Shell"],["Return"],["Earthquake","Substitute"]],"happiness":255}]},"aurorus":{"flags":{},"sets":[{"species":"Aurorus","gender":"","item":"Choice Specs","ability":"Refrigerate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Hyper Voice"],["Freeze-Dry"],["Psychic","Frost Breath"],["Earth Power"]]},{"species":"Aurorus","gender":"","item":"Focus Sash","ability":"Snow Warning","evs":{"hp":0,"atk":32,"def":0,"spa":224,"spd":0,"spe":252},"nature":"Hasty","moves":[["Stealth Rock"],["Blizzard"],["Freeze-Dry"],["Rock Tomb"]]}]},"articuno":{"flags":{},"sets":[{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Ice Beam"],["Roost"],["Hurricane"],["Freeze-Dry"]]},{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hidden Power Fire"],["Roost"],["Hurricane"],["Freeze-Dry"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Articuno","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Roost"],["Hurricane"],["Freeze-Dry"]]}]},"zangoose":{"flags":{},"sets":[{"species":"Zangoose","gender":"","item":"Toxic Orb","ability":"Toxic Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Facade"],["Knock Off"],["Quick Attack"],["Close Combat"]]}]},"xatu":{"flags":{},"sets":[{"species":"Xatu","gender":"","item":"Colbur Berry","ability":"Magic Bounce","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Timid","moves":[["Psychic","Psyshock"],["Roost"],["Heat Wave"],["U-turn","Thunder Wave"]]},{"species":"Xatu","gender":"","item":"Leftovers","ability":"Magic Bounce","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Timid","moves":[["Calm Mind"],["Roost"],["Psyshock"],["Heat Wave","Signal Beam"]]},{"species":"Xatu","gender":"","item":"Life Orb","ability":"Magic Bounce","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic","Psyshock"],["Grass Knot"],["Heat Wave"],["Roost"]]}]},"weezing":{"flags":{},"sets":[{"species":"Weezing","gender":"","item":"Black Sludge","ability":"Levitate","evs":{"hp":252,"atk":0,"def":148,"spa":0,"spd":0,"spe":108},"nature":"Bold","moves":[["Will-O-Wisp"],["Sludge Bomb"],["Taunt"],["Pain Split"]]},{"species":"Weezing","gender":"","item":"Black Sludge","ability":"Levitate","evs":{"hp":252,"atk":0,"def":148,"spa":0,"spd":0,"spe":108},"nature":"Bold","moves":[["Will-O-Wisp"],["Sludge Bomb"],["Taunt"],["Toxic Spikes"]]}]},"vivillon":{"flags":{},"sets":[{"species":"Vivillon","gender":"","item":"Leftovers","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Sleep Powder"],["Hurricane"],["Substitute"]]},{"species":"Vivillon","gender":"","item":"Focus Sash","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Sleep Powder"],["Quiver Dance"],["Hurricane"],["Energy Ball"]]}]},"vileplume":{"flags":{},"sets":[{"species":"Vileplume","gender":"","item":"Black Sludge","ability":"Effect Spore","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Aromatherapy","Sleep Powder"]]},{"species":"Vileplume","gender":"","item":"Black Sludge","ability":"Effect Spore","evs":{"hp":112,"atk":0,"def":0,"spa":252,"spd":0,"spe":144},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fire"],["Synthesis"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Vileplume","gender":"","item":"Black Sludge","ability":"Effect Spore","evs":{"hp":112,"atk":0,"def":0,"spa":252,"spd":0,"spe":144},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Ground"],["Synthesis"]],"ivs":{"spa":30,"spd":30}}]},"swellow":{"flags":{},"sets":[{"species":"Swellow","gender":"","item":"Choice Specs","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["U-turn"],["Heat Wave"],["Sleep Talk"]]},{"species":"Swellow","gender":"","item":"Choice Specs","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["U-turn"],["Heat Wave"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Swellow","gender":"","item":"Toxic Orb","ability":"Guts","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Facade"],["Brave Bird"],["U-turn"],["Quick Attack"]]}]},"sandslash":{"flags":{},"sets":[{"species":"Sandslash","gender":"","item":"Lum Berry","ability":"Sand Rush","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Rapid Spin"],["Knock Off"],["Earthquake"],["Stealth Rock"]]}]},"samurott":{"flags":{},"sets":[{"species":"Samurott","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Hydro Pump"],["Ice Beam"],["Aqua Jet"],["Megahorn","Taunt"]]},{"species":"Samurott","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":120,"atk":252,"def":0,"spa":0,"spd":0,"spe":136},"nature":"Adamant","moves":[["Swords Dance"],["Waterfall"],["Aqua Jet"],["Megahorn"]]},{"species":"Samurott","gender":"","item":"Lum Berry","ability":"Torrent","evs":{"hp":120,"atk":252,"def":0,"spa":0,"spd":0,"spe":136},"nature":"Adamant","moves":[["Swords Dance"],["Waterfall"],["Aqua Jet"],["Megahorn"]]}]},"rotomfan":{"flags":{},"sets":[{"species":"Rotom-Fan","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Air Slash"],["Volt Switch"],["Trick"],["Thunderbolt"]]},{"species":"Rotom-Fan","gender":"","item":"Expert Belt","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Air Slash"],["Hidden Power Water"],["Will-O-Wisp"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Rotom-Fan","gender":"","item":"Expert Belt","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Air Slash"],["Hidden Power Grass"],["Will-O-Wisp"]],"ivs":{"atk":30,"spa":30}}]},"rotom":{"flags":{},"sets":[{"species":"Rotom","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Shadow Ball"],["Thunderbolt"],["Trick"]]},{"species":"Rotom","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Shadow Ball"],["Thunderbolt"],["Trick"]]},{"species":"Rotom","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":108,"spa":0,"spd":0,"spe":148},"nature":"Timid","moves":[["Will-O-Wisp"],["Shadow Ball"],["Volt Switch"],["Pain Split"]]},{"species":"Rotom","gender":"","item":"Spell Tag","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Will-O-Wisp"],["Hex"],["Volt Switch"],["Discharge","Shadow Ball"]]}]},"rhydon":{"flags":{},"sets":[{"species":"Rhydon","gender":"","item":"Eviolite","ability":"Lightning Rod","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Stone Edge"],["Rock Polish"]]},{"species":"Rhydon","gender":"","item":"Eviolite","ability":"Lightning Rod","evs":{"hp":252,"atk":16,"def":0,"spa":0,"spd":240,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Megahorn"]]}]},"regirock":{"flags":{},"sets":[{"species":"Regirock","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":44,"def":16,"spa":0,"spd":196,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Stone Edge","Rock Slide"],["Thunder Wave","Toxic"],["Drain Punch","Earthquake"]]}]},"pyroar":{"flags":{},"sets":[{"species":"Pyroar","gender":"","item":"Life Orb","ability":"Unnerve","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Hyper Voice"],["Hidden Power Grass"],["Will-O-Wisp"]],"ivs":{"atk":30,"spa":30}},{"species":"Pyroar","gender":"","item":"Choice Specs","ability":"Unnerve","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Hyper Voice"],["Hidden Power Grass"],["Flamethrower","Overheat"]],"ivs":{"atk":30,"spa":30}}]},"primeape":{"flags":{},"sets":[{"species":"Primeape","gender":"","item":"Choice Band","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["U-turn"],["Stone Edge"],["Earthquake","Gunk Shot"]]},{"species":"Primeape","gender":"","item":"Expert Belt","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["U-turn"],["Stone Edge"],["Encore"]]}]},"pawniard":{"flags":{},"sets":[{"species":"Pawniard","gender":"","item":"Eviolite","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Knock Off"],["Iron Head"],["Sucker Punch"]]}]},"musharna":{"flags":{},"sets":[{"species":"Musharna","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":240,"atk":0,"def":252,"spa":0,"spd":16,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Psyshock","Psychic"],["Baton Pass"],["Moonlight"]]},{"species":"Musharna","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":240,"atk":0,"def":252,"spa":0,"spd":16,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Psyshock"],["Heal Bell","Signal Beam"],["Moonlight"]]},{"species":"Musharna","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":240,"atk":0,"def":252,"spa":0,"spd":16,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Barrier"],["Moonlight"],["Stored Power"]]},{"species":"Musharna","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":240,"atk":0,"def":252,"spa":0,"spd":16,"spe":0},"nature":"Bold","moves":[["Baton Pass"],["Moonlight"],["Thunder Wave","Signal Beam"],["Psychic"]]}]},"muk":{"flags":{},"sets":[{"species":"Muk","gender":"","item":"Assault Vest","ability":"Poison Touch","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Adamant","moves":[["Gunk Shot"],["Poison Jab"],["Fire Punch"],["Ice Punch"]]},{"species":"Muk","gender":"","item":"Choice Band","ability":"Poison Touch","evs":{"hp":220,"atk":252,"def":0,"spa":0,"spd":0,"spe":36},"nature":"Adamant","moves":[["Gunk Shot"],["Shadow Sneak"],["Focus Punch"],["Ice Punch"]]}]},"mismagius":{"flags":{},"sets":[{"species":"Mismagius","gender":"","item":"Colbur Berry","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Taunt"],["Shadow Ball"],["Dazzling Gleam"],["Destiny Bond"]]},{"species":"Mismagius","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Taunt"],["Shadow Ball"],["Dazzling Gleam"],["Nasty Plot"]]},{"species":"Mismagius","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Taunt"],["Will-O-Wisp"],["Hex"],["Pain Split"]]}]},"miltank":{"flags":{},"sets":[{"species":"Miltank","gender":"","item":"Leftovers","ability":"Scrappy","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Curse"],["Body Slam"],["Milk Drink"],["Heal Bell"]]},{"species":"Miltank","gender":"","item":"Leftovers","ability":"Sap Sipper","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Impish","moves":[["Body Slam"],["Milk Drink"],["Toxic","Thunder Wave"],["Heal Bell"]]},{"species":"Miltank","gender":"","item":"Leftovers","ability":"Sap Sipper","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Impish","moves":[["Body Slam"],["Milk Drink"],["Toxic","Thunder Wave"],["Stealth Rock"]]}]},"mesprit":{"flags":{},"sets":[{"species":"Mesprit","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Psychic","Psyshock"],["Signal Beam","Ice Beam"],["Energy Ball"],["Healing Wish","Calm Mind"]]},{"species":"Mesprit","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Psychic","Psyshock"],["Signal Beam","Ice Beam"],["Hidden Power Ground"],["Healing Wish","Calm Mind"]],"ivs":{"spa":30,"spd":30}},{"species":"Mesprit","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Psychic"],["Ice Beam","Signal Beam"],["U-turn"],["Healing Wish"]]},{"species":"Mesprit","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Stealth Rock"],["Psychic"],["U-turn"],["Thunder Wave","Healing Wish"]]}]},"mantine":{"flags":{},"sets":[{"species":"Mantine","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":16,"spe":0},"nature":"Calm","moves":[["Defog"],["Scald"],["Air Slash"],["Toxic"]]},{"species":"Mantine","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":32,"atk":0,"def":0,"spa":252,"spd":0,"spe":224},"nature":"Modest","moves":[["Air Slash"],["Hydro Pump"],["Ice Beam"],["Rain Dance"]]}]},"malamar":{"flags":{},"sets":[{"species":"Malamar","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Superpower"],["Knock Off"]]},{"species":"Malamar","gender":"","item":"Choice Scarf","ability":"Contrary","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Superpower"],["Knock Off"],["Psycho Cut"],["Switcheroo"]]}]},"magmortar":{"flags":{},"sets":[{"species":"Magmortar","gender":"","item":"Assault Vest","ability":"Vital Spirit","evs":{"hp":64,"atk":0,"def":0,"spa":252,"spd":0,"spe":192},"nature":"Modest","moves":[["Fire Blast"],["Thunderbolt"],["Focus Blast"],["Flame Charge","Earthquake"]]},{"species":"Magmortar","gender":"","item":"Assault Vest","ability":"Vital Spirit","evs":{"hp":64,"atk":0,"def":0,"spa":252,"spd":0,"spe":192},"nature":"Modest","moves":[["Fire Blast"],["Thunderbolt"],["Hidden Power Grass"],["Flame Charge","Earthquake"]],"ivs":{"atk":30,"spa":30}},{"species":"Magmortar","gender":"","item":"Life Orb","ability":"Vital Spirit","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Fire Blast"],["Thunderbolt"],["Earthquake"],["Focus Blast"]]},{"species":"Magmortar","gender":"","item":"Life Orb","ability":"Vital Spirit","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Fire Blast"],["Thunderbolt"],["Earthquake"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"ludicolo":{"flags":{},"sets":[{"species":"Ludicolo","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Giga Drain"],["Ice Beam"],["Rain Dance"]]}]},"lilligant":{"flags":{},"sets":[{"species":"Lilligant","gender":"","item":"Life Orb","ability":"Own Tempo","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Sleep Powder"],["Giga Drain"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Lilligant","gender":"","item":"Life Orb","ability":"Own Tempo","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Sleep Powder"],["Giga Drain"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Lilligant","gender":"","item":"Choice Scarf","ability":"Own Tempo","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Sleep Powder"],["Leaf Storm"],["Hidden Power Rock"],["Healing Wish"]],"ivs":{"def":30,"spd":30,"spe":30}}]},"liepard":{"flags":{},"sets":[{"species":"Liepard","gender":"","item":"Black Glasses","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Dark Pulse"],["Copycat"],["Encore"]]},{"species":"Liepard","gender":"","item":"BlackGlasses","ability":"Prankster","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Encore"],["Sucker Punch"],["U-turn"]]}]},"lanturn":{"flags":{},"sets":[{"species":"Lanturn","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":72,"spe":184},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Volt Switch"],["Ice Beam","Signal Beam"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Lanturn","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":72,"spe":184},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Volt Switch"],["Ice Beam","Signal Beam"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Lanturn","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":40,"atk":0,"def":152,"spa":0,"spd":208,"spe":108},"nature":"Calm","moves":[["Scald"],["Volt Switch"],["Heal Bell"],["Toxic","Thunder Wave","Protect"]]},{"species":"Lanturn","gender":"","item":"Assault Vest","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":144,"spe":112},"nature":"Modest","moves":[["Scald"],["Volt Switch"],["Ice Beam"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"klinklang":{"flags":{},"sets":[{"species":"Klinklang","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":92,"atk":252,"def":0,"spa":0,"spd":0,"spe":164},"nature":"Adamant","moves":[["Shift Gear"],["Gear Grind"],["Return"],["Substitute"]],"happiness":255}]},"kangaskhan":{"flags":{},"sets":[{"species":"Kangaskhan","gender":"F","item":"Silk Scarf","ability":"Scrappy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Fake Out"],["Double-Edge"],["Sucker Punch"],["Earthquake"]]}]},"kabutops":{"flags":{},"sets":[{"species":"Kabutops","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rapid Spin"],["Stone Edge"],["Aqua Jet"],["Waterfall"]]},{"species":"Kabutops","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Stone Edge"],["Aqua Jet"],["Superpower","Waterfall"]]}]},"jynx":{"flags":{},"sets":[{"species":"Jynx","gender":"","item":"Choice Scarf","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Ice Beam"],["Psychic"],["Focus Blast"],["Trick"]]},{"species":"Jynx","gender":"","item":"Focus Sash","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Lovely Kiss"],["Ice Beam"],["Psychic"],["Focus Blast","Nasty Plot"]]},{"species":"Jynx","gender":"","item":"Life Orb","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Lovely Kiss"],["Nasty Plot"],["Psychic"],["Ice Beam"]]}]},"hariyama":{"flags":{},"sets":[{"species":"Hariyama","gender":"","item":"Assault Vest","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Bullet Punch"],["Fake Out","Earthquake"]]},{"species":"Hariyama","gender":"","item":"Choice Band","ability":"Guts","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":8,"spe":0},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Earthquake"],["Bullet Punch"]]}]},"golurk":{"flags":{},"sets":[{"species":"Golurk","gender":"","item":"Choice Band","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shadow Punch"],["Earthquake"],["Ice Punch"],["Zen Headbutt","Thunder Punch"]]},{"species":"Golurk","gender":"","item":"Colbur Berry","ability":"No Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Shadow Punch"],["Dynamic Punch"]]},{"species":"Golurk","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Rock Polish"],["Earthquake"],["Shadow Punch"],["Ice Punch"]]}]},"garbodor":{"flags":{},"sets":[{"species":"Garbodor","gender":"","item":"Rocky Helmet","ability":"Aftermath","evs":{"hp":252,"atk":0,"def":160,"spa":0,"spd":0,"spe":96},"nature":"Impish","moves":[["Spikes"],["Gunk Shot"],["Drain Punch"],["Toxic Spikes"]]},{"species":"Garbodor","gender":"","item":"Rocky Helmet","ability":"Aftermath","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Spikes"],["Gunk Shot"],["Drain Punch"],["Seed Bomb"]]}]},"ferroseed":{"flags":{},"sets":[{"species":"Ferroseed","gender":"","item":"Eviolite","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Gyro Ball","Knock Off"],["Leech Seed"],["Protect"]]},{"species":"Ferroseed","gender":"","item":"Eviolite","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":112,"spa":0,"spd":144,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Seed Bomb"],["Leech Seed"],["Thunder Wave"]]}]},"exeggutor":{"flags":{},"sets":[{"species":"Exeggutor","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Giga Drain"],["Psychic"],["Hidden Power Fire"],["Sleep Powder"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Exeggutor","gender":"","item":"Choice Specs","ability":"Chlorophyll","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Psychic"],["Leaf Storm"],["Giga Drain"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Exeggutor","gender":"","item":"Lum Berry","ability":"Harvest","evs":{"hp":248,"atk":0,"def":0,"spa":176,"spd":0,"spe":84},"nature":"Modest","moves":[["Sleep Powder"],["Giga Drain"],["Psychic"],["Rest"]]}]},"electivire":{"flags":{},"sets":[{"species":"Electivire","gender":"","item":"Life Orb","ability":"Motor Drive","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Wild Charge"],["Earthquake"],["Ice Punch"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"cryogonal":{"flags":{},"sets":[{"species":"Cryogonal","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Rapid Spin"],["Freeze-Dry"],["Frost Breath"],["Recover"]]},{"species":"Cryogonal","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Rapid Spin"],["Freeze-Dry"],["Hidden Power Ground"],["Recover"]],"ivs":{"spa":30,"spd":30}}]},"crustle":{"flags":{},"sets":[{"species":"Crustle","gender":"","item":"Custap Berry","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Spikes"],["Rock Blast"],["Knock Off"]]}]},"cacturne":{"flags":{},"sets":[{"species":"Cacturne","gender":"","item":"Life Orb","ability":"Water Absorb","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Dark Pulse"],["Giga Drain"],["Sucker Punch"],["Destiny Bond"]]}]},"audino":{"flags":{"megaOnly":1},"sets":[{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":208,"spa":48,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Dazzling Gleam"],["Wish"],["Protect"]]},{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":208,"spa":48,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Dazzling Gleam"],["Rest"],["Sleep Talk"]]},{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Calm Mind","Healing Wish"],["Dazzling Gleam"],["Fire Blast"],["Surf","Thunder Wave","Psychic"]]},{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":128,"spa":0,"spd":128,"spe":0},"nature":"Calm","moves":[["Wish"],["Protect"],["Heal Bell"],["Dazzling Gleam"]]}]},"archeops":{"flags":{},"sets":[{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Taunt"],["Roost"],["Acrobatics"],["Earth Power"]]},{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Taunt"],["Roost"],["Acrobatics"],["Defog"]]},{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Defog"],["Roost"],["Acrobatics"],["Earth Power"]]},{"species":"Archeops","gender":"","item":"Focus Sash","ability":"Defeatist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Taunt"],["Endeavor"],["Head Smash"]]},{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Acrobatics"],["Stone Edge"],["Earth Power"],["Roost"]]}]},"claydol":{"flags":{},"sets":[{"species":"Claydol","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Rapid Spin"],["Earth Power"],["Shadow Ball"],["Psychic","Psyshock"]]}]},"tauros":{"flags":{},"sets":[{"species":"Tauros","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Rock Climb"],["Earthquake"],["Fire Blast"],["Iron Tail","Zen Headbutt"]]}]},"mawile":{"flags":{},"sets":[{"species":"Mawile","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naughty","moves":[["Play Rough"],["Iron Head"],["Fire Blast"],["Sucker Punch"]]}]},"scyther":{"flags":{},"sets":[{"species":"Scyther","gender":"","item":"Eviolite","ability":"Technician","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Aerial Ace"],["U-turn"],["Roost"]]},{"species":"Scyther","gender":"","item":"Choice Band","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Aerial Ace"],["Knock Off","Pursuit"],["Quick Attack"]]},{"species":"Scyther","gender":"","item":"Choice Scarf","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Aerial Ace"],["Knock Off"],["Bug Bite"]]}]},"torterra":{"flags":{},"sets":[{"species":"Torterra","gender":"","item":"Leftovers","ability":"Overgrow","evs":{"hp":252,"atk":128,"def":128,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Wood Hammer"],["Earthquake"],["Stealth Rock"],["Synthesis"]]},{"species":"Torterra","gender":"","item":"Soft Sand","ability":"Overgrow","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rock Polish"],["Wood Hammer"],["Earthquake"],["Stone Edge"]]}]},"haunter":{"flags":{},"sets":[{"species":"Haunter","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Bomb"],["Destiny Bond"],["Trick"]]},{"species":"Haunter","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Bomb"],["Taunt"],["Destiny Bond","Will-O-Wisp"]]},{"species":"Haunter","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Bomb"],["Substitute"],["Pain Split"]]}]},"prinplup":{"flags":{},"sets":[{"species":"Prinplup","gender":"","item":"Eviolite","ability":"Torrent","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Defog"],["Scald"],["Stealth Rock"],["Toxic"]]}]},"tangela":{"flags":{},"sets":[{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":236,"atk":0,"def":48,"spa":224,"spd":0,"spe":0},"nature":"Modest","moves":[["Leaf Storm"],["Giga Drain","Ancient Power"],["Sleep Powder"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Giga Drain"],["Hidden Power Fire"],["Sleep Powder"],["Leech Seed"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"pelipper":{"flags":{},"sets":[{"species":"Pelipper","gender":"","item":"Leftovers","ability":"Keen Eye","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Defog"],["Scald"],["Roost"],["U-turn","Hurricane"]]}]},"piloswine":{"flags":{},"sets":[{"species":"Piloswine","gender":"","item":"Eviolite","ability":"Thick Fat","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Earthquake"],["Stealth Rock"],["Icicle Crash"],["Ice Shard"]]}]},"poliwrath":{"flags":{},"sets":[{"species":"Poliwrath","gender":"","item":"Choice Specs","ability":"Water Absorb","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Modest","moves":[["Hydro Pump"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]},{"species":"Poliwrath","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Modest","moves":[["Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]}]},"shiftry":{"flags":{},"sets":[{"species":"Shiftry","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Knock Off"],["Leaf Storm"],["Sucker Punch"],["Explosion"]]},{"species":"Shiftry","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Knock Off"],["Leaf Storm"],["Sucker Punch"],["Defog"]]},{"species":"Shiftry","gender":"","item":"Black Glasses","ability":"Chlorophyll","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Knock Off"],["Seed Bomb"],["Sucker Punch"]]}]},"charizard":{"flags":{},"sets":[{"species":"Charizard","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Air Slash"],["Focus Blast"],["Roost"]]},{"species":"Charizard","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Air Slash"],["Hidden Power Grass"],["Roost"]],"ivs":{"atk":30,"spa":30}},{"species":"Charizard","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Fire Blast"],["Air Slash"],["Earthquake"],["Roost"]]},{"species":"Charizard","gender":"","ability":"Blaze","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Acrobatics"],["Roost"],["Will-O-Wisp"]]}]},"floatzel":{"flags":{},"sets":[{"species":"Floatzel","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Focus Blast"],["Taunt"]]},{"species":"Floatzel","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Focus Blast"],["Baton Pass"]]}]},"abomasnow":{"flags":{},"sets":[{"species":"Abomasnow","gender":"","item":"Life Orb","ability":"Snow Warning","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Blizzard"],["Giga Drain"],["Earthquake"],["Ice Shard"]]},{"species":"Abomasnow","gender":"","item":"Life Orb","ability":"Snow Warning","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Ice Shard"],["Seed Bomb"],["Earthquake"]]}]},"hitmonchan":{"flags":{},"sets":[{"species":"Hitmonchan","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Drain Punch","Close Combat"],["Mach Punch"],["Ice Punch","Stone Edge"],["Rapid Spin"]]}]},"skuntank":{"flags":{},"sets":[{"species":"Skuntank","gender":"","item":"Lum Berry","ability":"Aftermath","evs":{"hp":0,"atk":232,"def":0,"spa":0,"spd":132,"spe":144},"nature":"Adamant","moves":[["Sucker Punch"],["Pursuit"],["Poison Jab"],["Taunt"]]},{"species":"Skuntank","gender":"","item":"Expert Belt","ability":"Aftermath","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Dark Pulse"],["Fire Blast"],["Hidden Power Grass"],["Defog"]],"ivs":{"atk":30,"spa":30}}]},"omastar":{"flags":{},"sets":[{"species":"Omastar","gender":"","item":"White Herb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shell Smash"],["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Omastar","gender":"","item":"Leftovers","ability":"Shell Armor","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Spikes"],["Stealth Rock"],["Scald"],["Icy Wind"]]},{"species":"Omastar","gender":"","item":"Leftovers","ability":"Shell Armor","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Spikes"],["Stealth Rock"],["Scald"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Omastar","gender":"","item":"Focus Sash","ability":"Weak Armor","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Spikes"],["Scald"],["Ice Beam"]]}]},"pinsir":{"flags":{},"sets":[{"species":"Pinsir","gender":"","item":"Life Orb","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["X-Scissor"],["Earthquake"],["Stone Edge"]]},{"species":"Pinsir","gender":"","item":"Choice Band","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["X-Scissor"],["Earthquake"],["Stone Edge"],["Close Combat"]]},{"species":"Pinsir","gender":"","item":"Focus Sash","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Stealth Rock"],["X-Scissor"],["Rock Tomb"],["Earthquake"]]}]},"grumpig":{"flags":{},"sets":[{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Calm Mind"],["Psyshock"],["Focus Blast"],["Signal Beam"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":0,"spa":160,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic","Psyshock"],["Focus Blast"],["Taunt"],["Thunder Wave","Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Psychic"],["Heal Bell"],["Thunder Wave"],["Whirlwind"]]}]},"sliggoo":{"flags":{},"sets":[{"species":"Sliggoo","gender":"","item":"Eviolite","ability":"Sap Sipper","evs":{"hp":252,"atk":0,"def":168,"spa":0,"spd":88,"spe":0},"nature":"Careful","moves":[["Curse"],["Outrage"],["Rest"],["Sleep Talk"]]},{"species":"Sliggoo","gender":"","item":"Eviolite","ability":"Sap Sipper","evs":{"hp":92,"atk":0,"def":0,"spa":252,"spd":0,"spe":164},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Bomb"],["Muddy Water"],["Thunderbolt"]]}]},"camerupt":{"flags":{},"sets":[{"species":"Camerupt","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":252,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Lava Plume"],["Earthquake"],["Toxic"]]},{"species":"Camerupt","gender":"","item":"Choice Specs","ability":"Solid Rock","evs":{"hp":140,"atk":0,"def":0,"spa":252,"spd":0,"spe":116},"nature":"Modest","moves":[["Fire Blast"],["Earth Power"],["Lava Plume"],["Hidden Power Electric"]],"ivs":{"spa":30}}]},"ninetales":{"flags":{},"sets":[{"species":"Ninetales","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Fire Blast"],["Psyshock"],["Energy Ball"]]}]},"manectric":{"flags":{},"sets":[{"species":"Manectric","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Hidden Power Grass"],["Overheat"]],"ivs":{"atk":30,"spa":30}}]},"roselia":{"flags":{},"sets":[{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Spikes"],["Giga Drain"],["Synthesis"],["Sludge Bomb"]]},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":80,"atk":0,"def":0,"spa":252,"spd":0,"spe":176},"nature":"Modest","moves":[["Spikes"],["Leaf Storm"],["Sludge Bomb"],["Sleep Powder"]]}]},"misdreavus":{"flags":{},"sets":[{"species":"Misdreavus","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Hex"],["Will-O-Wisp"],["Taunt"],["Pain Split"]]}]},"clefairy":{"flags":{},"sets":[{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Moonblast"],["Soft-Boiled"],["Thunder Wave"],["Healing Wish"]]},{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Moonblast"],["Soft-Boiled"],["Thunder Wave"],["Stealth Rock"]]}]}},"PU":{"prinplup":{"flags":{},"sets":[{"species":"Prinplup","gender":"","item":"Eviolite","ability":"Torrent","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Scald"],["Toxic"],["Defog"]]}]},"ampharos":{"flags":{},"sets":[{"species":"Ampharos","gender":"","item":"Life Orb","ability":"Static","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Agility"],["Thunderbolt"],["Focus Blast"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"cryogonal":{"flags":{},"sets":[{"species":"Cryogonal","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Freeze-Dry"],["Hidden Power Fighting"],["Recover"],["Rapid Spin"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Cryogonal","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":156,"spa":0,"spd":104,"spe":0},"nature":"Calm","moves":[["Freeze-Dry"],["Rapid Spin"],["Recover"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"glalie":{"flags":{},"sets":[{"species":"Glalie","gender":"","item":"Focus Sash","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Spikes"],["Taunt"],["Ice Beam","Freeze-Dry"],["Explosion"]]}]},"camerupt":{"flags":{},"sets":[{"species":"Camerupt","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":252,"spe":0},"nature":"Timid","moves":[["Stealth Rock"],["Lava Plume","Fire Blast"],["Earth Power"],["Roar","Toxic"]]}]},"altaria":{"flags":{},"sets":[{"species":"Altaria","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":116,"atk":252,"def":0,"spa":0,"spd":0,"spe":140},"nature":"Jolly","moves":[["Dragon Dance"],["Dragon Claw"],["Substitute","Earthquake"],["Roost"]]},{"species":"Altaria","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":116,"atk":0,"def":0,"spa":252,"spd":0,"spe":140},"nature":"Modest","moves":[["Draco Meteor"],["Roost"],["Fire Blast"],["Toxic"]]},{"species":"Altaria","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":116,"atk":0,"def":0,"spa":252,"spd":0,"spe":140},"nature":"Modest","moves":[["Draco Meteor"],["Roost"],["Fire Blast"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"audino":{"flags":{},"sets":[{"species":"Audino","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Knock Off"],["Wish"],["Protect"],["Encore","Toxic","Double-Edge","Thunder Wave"]]}]},"bouffalant":{"flags":{},"sets":[{"species":"Bouffalant","gender":"","item":"Leftovers","ability":"Sap Sipper","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Substitute"],["Swords Dance"],["Return"],["Earthquake"]],"happiness":255},{"species":"Bouffalant","gender":"","item":"Assault Vest","ability":"Sap Sipper","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Return"],["Earthquake"],["Megahorn"],["Pursuit","Head Charge"]],"happiness":255},{"species":"Bouffalant","gender":"","item":"Choice Band","ability":"Sap Sipper","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Head Charge"],["Earthquake"],["Megahorn"],["Pursuit"]]}]},"gorebyss":{"flags":{},"sets":[{"species":"Gorebyss","gender":"","item":"White Herb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Shell Smash"],["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"]],"ivs":{"spa":30}}]},"pawniard":{"flags":{},"sets":[{"species":"Pawniard","gender":"","item":"Eviolite","ability":"Defiant","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Iron Head"],["Sucker Punch"],["Swords Dance"]]}]},"gothitelle":{"flags":{},"sets":[{"species":"Gothitelle","gender":"","item":"Leftovers","ability":"Competitive","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Mean Look"],["Rest"],["Psychic"]]}]},"roselia":{"flags":{},"sets":[{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":128,"spa":0,"spd":128,"spe":0},"nature":"Calm","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Spikes"]]},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":128,"spa":0,"spd":128,"spe":0},"nature":"Calm","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Toxic Spikes"]]},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fighting"],["Sleep Powder"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fighting"],["Spikes"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fighting"],["Toxic Spikes"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"floatzel":{"flags":{},"sets":[{"species":"Floatzel","gender":"","item":"Choice Specs","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Surf","Switcheroo"]],"ivs":{"spa":30}},{"species":"Floatzel","gender":"","item":"Choice Specs","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Baton Pass"]],"ivs":{"spa":30}},{"species":"Floatzel","gender":"","item":"Choice Band","ability":"Water Veil","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Waterfall"],["Ice Punch"],["Return"],["Aqua Jet"]],"happiness":255},{"species":"Floatzel","gender":"","item":"Life Orb","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Hydro Pump"],["Ice Beam"],["Ice Punch"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Floatzel","gender":"","item":"Choice Scarf","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Surf","Switcheroo"]],"ivs":{"spa":30}},{"species":"Floatzel","gender":"","item":"Choice Scarf","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Baton Pass"]],"ivs":{"spa":30}}]},"stoutland":{"flags":{},"sets":[{"species":"Stoutland","gender":"","item":"Choice Band","ability":"Scrappy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return"],["Superpower"],["Facade"],["Pursuit","Crunch"]],"happiness":255}]},"dodrio":{"flags":{},"sets":[{"species":"Dodrio","gender":"","item":"Choice Band","ability":"Early Bird","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Knock Off"],["Quick Attack","Pursuit"]],"happiness":255},{"species":"Dodrio","gender":"","item":"Choice Scarf","ability":"Early Bird","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Knock Off"],["Pursuit"]],"happiness":255}]},"zebstrika":{"flags":{},"sets":[{"species":"Zebstrika","gender":"","item":"Life Orb","ability":"Sap Sipper","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Zebstrika","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"jumpluff":{"flags":{},"sets":[{"species":"Jumpluff","gender":"","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Acrobatics"],["Sleep Powder"],["U-turn","Seed Bomb"],["Memento"]]},{"species":"Jumpluff","gender":"","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Acrobatics"],["Sleep Powder"],["Seed Bomb"],["Swords Dance"]]}]},"grumpig":{"flags":{},"sets":[{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Calm Mind"],["Shadow Ball","Taunt"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":252,"spe":0},"nature":"Calm","moves":[["Psychic"],["Thunder Wave","Toxic"],["Focus Blast","Whirlwind"],["Protect"]]}]},"stunfisk":{"flags":{},"sets":[{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Protect"]]},{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Hidden Power Bug"]],"ivs":{"atk":30,"def":30,"spd":30}},{"species":"Stunfisk","gender":"","item":"Passho Berry","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Toxic"]]},{"species":"Stunfisk","gender":"","item":"Passho Berry","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Hidden Power Bug"]],"ivs":{"atk":30,"def":30,"spd":30}},{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Protect"]]},{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Hidden Power Bug"]],"ivs":{"atk":30,"def":30,"spd":30}}]},"rapidash":{"flags":{},"sets":[{"species":"Rapidash","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Wild Charge"],["Will-O-Wisp"],["Morning Sun"]]},{"species":"Rapidash","gender":"","item":"Charcoal","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Wild Charge"],["Will-O-Wisp"],["Morning Sun"]]}]},"tangela":{"flags":{},"sets":[{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Giga Drain"],["Synthesis"],["Hidden Power Fire"],["Sleep Powder","Knock Off"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Leaf Storm"],["Giga Drain"],["Hidden Power Fire"],["Sleep Powder"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"simipour":{"flags":{},"sets":[{"species":"Simipour","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Hydro Pump"],["Ice Beam"],["Grass Knot"],["Knock Off","Low Kick","Nasty Plot"]]},{"species":"Simipour","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Knock Off","Low Kick","Nasty Plot"]],"ivs":{"spa":30}},{"species":"Simipour","gender":"","item":"Choice Scarf","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Hydro Pump"],["Ice Beam"],["Grass Knot"],["Superpower","Knock Off"]]},{"species":"Simipour","gender":"","item":"Salac Berry","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Substitute"],["Nasty Plot"]]}]},"kadabra":{"flags":{},"sets":[{"species":"Kadabra","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball","Signal Beam"],["Thunder Wave"],["Encore"]]},{"species":"Kadabra","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Hidden Power Fighting"],["Thunder Wave"],["Encore"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Kadabra","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Thunder Wave"],["Encore"]]},{"species":"Kadabra","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Hidden Power Fighting"],["Shadow Ball"],["Substitute","Encore"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"raichu":{"flags":{},"sets":[{"species":"Raichu","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"atk":30,"def":30},"nature":"Timid","moves":[["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]]},{"species":"Raichu","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":30,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Focus Blast"],["Signal Beam"]]},{"species":"Raichu","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"atk":30,"def":30},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Focus Blast"],["Hidden Power Ice"]]},{"species":"Raichu","gender":"","item":"Life Orb","ability":"Static","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Signal Beam","Focus Blast"],["Surf"]]},{"species":"Raichu","gender":"","item":"Choice Scarf","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":30,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Signal Beam"],["Focus Blast"]]},{"species":"Raichu","gender":"","item":"Choice Scarf","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"atk":30,"def":30},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Hidden Power Ice"],["Focus Blast"]]}]},"regice":{"flags":{},"sets":[{"species":"Regice","gender":"","item":"Life Orb","ability":"Clear Body","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Ice Beam"],["Focus Blast"],["Thunderbolt"],["Rock Polish"]]},{"species":"Regice","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Thunder Wave"],["Ice Beam"],["Thunderbolt"],["Focus Blast"]]}]},"relicanth":{"flags":{},"sets":[{"species":"Relicanth","gender":"","item":"Stone Plate","ability":"Rock Head","evs":{"hp":104,"atk":252,"def":4,"spa":0,"spd":0,"spe":148},"nature":"Adamant","moves":[["Rock Polish"],["Head Smash"],["Waterfall"],["Earthquake"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Head Smash"],["Stealth Rock"],["Earthquake","Waterfall"],["Toxic","Yawn"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Head Smash"],["Stealth Rock"],["Earthquake","Waterfall"],["Protect"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Head Smash"],["Stealth Rock"],["Protect"],["Toxic","Yawn"]]},{"species":"Relicanth","gender":"","item":"Stone Plate","ability":"Rock Head","evs":{"hp":168,"atk":252,"def":0,"spa":0,"spd":0,"spe":88},"nature":"Adamant","moves":[["Head Smash"],["Stealth Rock"],["Waterfall"],["Toxic","Earthquake"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":168,"atk":252,"def":0,"spa":0,"spd":0,"spe":88},"nature":"Adamant","moves":[["Head Smash"],["Stealth Rock"],["Waterfall"],["Toxic","Earthquake"]]}]},"rotomfrost":{"flags":{},"sets":[{"species":"Rotom-Frost","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Blizzard"],["Trick","Will-O-Wisp"]]},{"species":"Rotom-Frost","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Blizzard"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Rotom-Frost","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Thunderbolt"],["Blizzard"],["Will-O-Wisp","Volt Switch"]]},{"species":"Rotom-Frost","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Thunderbolt"],["Blizzard"],["Pain Split","Will-O-Wisp"]]}]},"simisage":{"flags":{},"sets":[{"species":"Simisage","gender":"","item":"Life Orb","ability":"Overgrow","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Leaf Storm"],["Superpower"],["Gunk Shot"],["Knock Off"]]}]},"chatot":{"flags":{},"sets":[{"species":"Chatot","gender":"","item":"Choice Scarf","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"def":30,"spa":30,"spd":30,"spe":30},"nature":"Modest","moves":[["Boomburst"],["Heat Wave"],["Hidden Power Fighting"],["U-turn"]]},{"species":"Chatot","gender":"","item":"Choice Scarf","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"def":30,"spa":30,"spd":30,"spe":30},"nature":"Timid","moves":[["Boomburst"],["Heat Wave"],["Hidden Power Fighting"],["U-turn"]]},{"species":"Chatot","gender":"","item":"Choice Specs","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"def":30,"spa":30,"spd":30,"spe":30},"nature":"Modest","moves":[["Boomburst"],["Heat Wave"],["Hidden Power Fighting"],["U-turn"]]}]},"mrmime":{"flags":{},"sets":[{"species":"Mr. Mime","gender":"","item":"Choice Scarf","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam"],["Focus Blast"],["Healing Wish"]]},{"species":"Mr. Mime","gender":"","item":"Choice Specs","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam"],["Focus Blast"],["Shadow Ball"]]},{"species":"Mr. Mime","gender":"","item":"Life Orb","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam"],["Focus Blast"],["Shadow Ball","Healing Wish"]]}]},"mightyena":{"flags":{},"sets":[{"species":"Mightyena","gender":"","item":"Life Orb","ability":"Moxie","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Adamant","moves":[["Crunch"],["Sucker Punch"],["Play Rough"],["Iron Tail"]]}]},"fraxure":{"flags":{},"sets":[{"species":"Fraxure","gender":"","item":"Eviolite","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Outrage"],["Low Kick"],["Dual Chop","Taunt","Poison Jab"]]}]},"misdreavus":{"flags":{},"sets":[{"species":"Misdreavus","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Nasty Plot"],["Taunt","Will-O-Wisp"],["Shadow Ball"],["Thunderbolt"]]},{"species":"Misdreavus","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":124,"spa":0,"spd":0,"spe":136},"nature":"Timid","moves":[["Will-O-Wisp"],["Taunt"],["Foul Play"],["Pain Split","Thunder Wave"]]}]},"probopass":{"flags":{},"sets":[{"species":"Probopass","gender":"","item":"Leftovers","ability":"Magnet Pull","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Stealth Rock"],["Flash Cannon"],["Volt Switch"],["Earth Power","Thunder Wave"]]},{"species":"Probopass","gender":"","item":"Passho Berry","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Stealth Rock"],["Flash Cannon"],["Volt Switch"],["Earth Power","Thunder Wave"]]},{"species":"Probopass","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Modest","moves":[["Stealth Rock"],["Flash Cannon"],["Volt Switch"],["Earth Power","Toxic","Thunder Wave"]]}]},"sawsbuck":{"flags":{},"sets":[{"species":"Sawsbuck","gender":"","item":"Choice Scarf","ability":"Sap Sipper","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Double-Edge"],["Horn Leech"],["Jump Kick"],["Megahorn"]]},{"species":"Sawsbuck","gender":"","item":"Choice Scarf","ability":"Sap Sipper","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Double-Edge"],["Horn Leech"],["Jump Kick"],["Baton Pass"]]},{"species":"Sawsbuck","gender":"","item":"Salac Berry","ability":"Sap Sipper","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Return"],["Horn Leech"],["Substitute"],["Swords Dance"]],"happiness":255}]},"arbok":{"flags":{},"sets":[{"species":"Arbok","gender":"","item":"Black Sludge","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Coil"],["Gunk Shot"],["Sucker Punch"],["Earthquake"]]},{"species":"Arbok","gender":"","item":"Shuca Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Coil"],["Gunk Shot"],["Sucker Punch"],["Earthquake"]]},{"species":"Arbok","gender":"","item":"Black Sludge","ability":"Shed Skin","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":236,"spe":20},"nature":"Careful","moves":[["Coil"],["Gunk Shot"],["Rest"],["Earthquake"]]}]},"duosion":{"flags":{},"sets":[{"species":"Duosion","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Calm Mind"],["Recover"],["Psyshock","Psychic"],["Acid Armor","Signal Beam"]]}]},"ninetales":{"flags":{},"sets":[{"species":"Ninetales","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Nasty Plot"],["Fire Blast"],["Energy Ball"]]},{"species":"Ninetales","gender":"","item":"Passho Berry","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Fire Blast"],["Energy Ball"],["Hidden Power Ground"]],"ivs":{"spa":30,"spd":30}}]},"articuno":{"flags":{},"sets":[{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Agility"],["Ice Beam","Freeze-Dry"],["Hurricane"],["Roost"]]},{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Agility"],["Ice Beam","Freeze-Dry"],["Hurricane"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Ice Beam","Freeze-Dry"],["Hurricane"],["Roost"]]}]},"clefairy":{"flags":{},"sets":[{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Soft-Boiled"],["Moonblast"],["Thunder Wave","Knock Off","Healing Wish"],["Stealth Rock"]]},{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Calm Mind"],["Soft-Boiled"],["Moonblast"],["Thunder Wave","Knock Off","Encore"]]}]},"golduck":{"flags":{},"sets":[{"species":"Golduck","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Hydro Pump"],["Rain Dance"],["Ice Beam"],["Psyshock","Focus Blast"]]}]},"golem":{"flags":{},"sets":[{"species":"Golem","gender":"","item":"Custap Berry","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Explosion"],["Stealth Rock"],["Stone Edge"]]},{"species":"Golem","gender":"","item":"Weakness Policy","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Sucker Punch"],["Stealth Rock"],["Stone Edge"]]},{"species":"Golem","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":56,"def":0,"spa":0,"spd":204,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Stone Edge"],["Earthquake"],["Protect"]]}]},"gourgeistsuper":{"flags":{},"sets":[{"species":"Gourgeist-Super","gender":"","item":"Leftovers","ability":"Frisk","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Foul Play"],["Will-O-Wisp"],["Synthesis"],["Seed Bomb"]]}]},"lickilicky":{"flags":{},"sets":[{"species":"Lickilicky","gender":"","item":"Leftovers","ability":"Oblivious","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Wish"],["Protect"],["Body Slam","Knock Off"],["Dragon Tail","Heal Bell"]]}]},"monferno":{"flags":{},"sets":[{"species":"Monferno","gender":"","item":"Eviolite","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Mach Punch"],["Flare Blitz"],["Close Combat"]]},{"species":"Monferno","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Mach Punch"],["Flare Blitz"],["Close Combat"]]},{"species":"Monferno","gender":"","item":"Eviolite","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["U-turn","Thunder Punch"],["Mach Punch"],["Flare Blitz"],["Close Combat"]]},{"species":"Monferno","gender":"","item":"Eviolite","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["U-turn","Thunder Punch"],["Mach Punch"],["Flare Blitz"],["Stealth Rock"]]}]},"politoed":{"flags":{},"sets":[{"species":"Politoed","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"ivs":{"spa":30},"nature":"Modest","moves":[["Scald"],["Ice Beam"],["Hidden Power Electric"],["Encore","Toxic"]]},{"species":"Politoed","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Perish Song"],["Scald"],["Toxic"],["Protect"]]}]},"seaking":{"flags":{},"sets":[{"species":"Seaking","gender":"","item":"Leftovers","ability":"Lightning Rod","evs":{"hp":104,"atk":252,"def":0,"spa":0,"spd":0,"spe":152},"nature":"Adamant","moves":[["Waterfall"],["Knock Off"],["Megahorn"],["Haze","Protect"]]}]},"simisear":{"flags":{},"sets":[{"species":"Simisear","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Knock Off"],["Rock Slide"],["Superpower","Low Kick"],["Overheat","Fire Blast"]]},{"species":"Simisear","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Fire Blast"],["Grass Knot"],["Low Kick"],["Knock Off"]]},{"species":"Simisear","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Focus Blast"],["Grass Knot"],["Fire Blast"]]},{"species":"Simisear","gender":"","item":"Salac Berry","ability":"Blaze","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Substitute"],["Nasty Plot"],["Focus Blast"],["Fire Blast"]]}]},"swanna":{"flags":{},"sets":[{"species":"Swanna","gender":"","item":"Life Orb","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Defog"],["Roost"],["Scald"],["Hurricane"]]}]},"vullaby":{"flags":{},"sets":[{"species":"Vullaby","gender":"","item":"Eviolite","ability":"Overcoat","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Defog"],["Roost"],["U-turn","Whirlwind"],["Foul Play"]]},{"species":"Vullaby","gender":"","item":"Eviolite","ability":"Overcoat","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Defog"],["Roost"],["U-turn","Whirlwind"],["Foul Play"]]}]},"basculin":{"flags":{},"sets":[{"species":"Basculin","gender":"","item":"Choice Band","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Waterfall","Aqua Tail"],["Aqua Jet"],["Crunch","Zen Headbutt"],["Double-Edge"]]},{"species":"Basculin","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":30,"spd":31,"spe":31},"nature":"Naive","moves":[["Waterfall"],["Aqua Jet"],["Ice Beam"],["Superpower"]]},{"species":"Basculin","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"spa":30},"nature":"Naive","moves":[["Waterfall"],["Aqua Jet"],["Ice Beam"],["Hidden Power Electric"]]}]},"gabite":{"flags":{},"sets":[{"species":"Gabite","gender":"","item":"Eviolite","ability":"Rough Skin","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Toxic","Roar"],["Dragon Claw"],["Earthquake"]]},{"species":"Gabite","gender":"","item":"Eviolite","ability":"Rough Skin","evs":{"hp":248,"atk":220,"def":0,"spa":0,"spd":0,"spe":40},"nature":"Adamant","moves":[["Stealth Rock"],["Toxic","Roar"],["Dragon Claw"],["Earthquake"]]},{"species":"Gabite","gender":"","item":"Eviolite","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Outrage"],["Stealth Rock"],["Stone Edge","Toxic","Roar"]]}]},"gourgeistsmall":{"flags":{},"sets":[{"species":"Gourgeist-Small","gender":"","item":"Leftovers","ability":"Frisk","evs":{"hp":152,"atk":0,"def":104,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Leech Seed"],["Substitute"],["Foul Play","Seed Bomb"],["Will-O-Wisp","Disable"]]},{"species":"Gourgeist-Small","gender":"","item":"Choice Scarf","ability":"Frisk","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Seed Bomb"],["Trick"],["Rock Slide"],["Explosion","Destiny Bond"]]}]},"klang":{"flags":{},"sets":[{"species":"Klang","gender":"","item":"Eviolite","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":156,"spa":0,"spd":100,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Shift Gear"],["Gear Grind"]]}]},"leafeon":{"flags":{},"sets":[{"species":"Leafeon","gender":"","item":"Choice Band","ability":"Leaf Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Leaf Blade"],["Bullet Seed"],["Knock Off"],["X-Scissor","Double-Edge"]]},{"species":"Leafeon","gender":"","item":"Choice Band","ability":"Leaf Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Leaf Blade"],["Bullet Seed"],["Knock Off"],["Baton Pass"]]},{"species":"Leafeon","gender":"","item":"Yache Berry","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Synthesis"]]},{"species":"Leafeon","gender":"","item":"Yache Berry","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Baton Pass"]]},{"species":"Leafeon","gender":"","item":"Occa Berry","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Synthesis"]]},{"species":"Leafeon","gender":"","item":"Occa Berry","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Baton Pass"]]},{"species":"Leafeon","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["X-Scissor"]]},{"species":"Leafeon","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Baton Pass"]]}]},"leavanny":{"flags":{},"sets":[{"species":"Leavanny","gender":"","item":"Focus Sash","ability":"Chlorophyll","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Leaf Storm"],["Electroweb","Magic Coat"],["Sticky Web"],["Knock Off"]]}]},"metang":{"flags":{},"sets":[{"species":"Metang","gender":"","item":"Eviolite","ability":"Clear Body","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":0,"spe":8},"nature":"Adamant","moves":[["Meteor Mash"],["Stealth Rock"],["Pursuit","Bullet Punch"],["Earthquake","Zen Headbutt"]]},{"species":"Metang","gender":"","item":"Eviolite","ability":"Clear Body","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":252,"spe":8},"nature":"Careful","moves":[["Meteor Mash"],["Stealth Rock"],["Toxic"],["Pursuit","Bullet Punch","Earthquake","Zen Headbutt"]]},{"species":"Metang","gender":"","item":"Eviolite","ability":"Clear Body","nature":"Impish","moves":[["Meteor Mash"],["Stealth Rock"],["Toxic"],["Earthquake","Zen Headbutt","Pursuit","Bullet Punch"]]}]},"ninjask":{"flags":{},"sets":[{"species":"Ninjask","gender":"","item":"Choice Band","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"moves":[["U-turn"],["X-Scissor"],["Aerial Ace"],["Toxic"]]}]},"purugly":{"flags":{},"sets":[{"species":"Purugly","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Return"],["Fake Out"],["Knock Off"],["U-turn","Sucker Punch","Wake-Up Slap"]],"happiness":255}]},"solrock":{"flags":{},"sets":[{"species":"Solrock","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Will-O-Wisp"],["Zen Headbutt","Stone Edge"],["Morning Sun"]]},{"species":"Solrock","gender":"","item":"Colbur Berry","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Will-O-Wisp"],["Stone Edge"],["Morning Sun"]]}]},"venipede":{"flags":{},"sets":[{"species":"Venipede","gender":"","item":"Focus Sash","ability":"Speed Boost","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Protect"],["Spikes"],["Toxic Spikes"],["Endeavor"]]}]},"armaldo":{"flags":{},"sets":[{"species":"Armaldo","gender":"","item":"Leftovers","ability":"Battle Armor","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Rapid Spin"],["Knock Off"],["Stone Edge"],["Toxic"]]},{"species":"Armaldo","gender":"","item":"Leftovers","ability":"Battle Armor","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Rapid Spin"],["Knock Off"],["Stone Edge"],["Stealth Rock"]]},{"species":"Armaldo","gender":"","item":"Leftovers","ability":"Battle Armor","evs":{"hp":248,"atk":252,"def":8,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Stone Edge"],["Knock Off"],["Rapid Spin"],["Earthquake"]]}]},"dusknoir":{"flags":{},"sets":[{"species":"Dusknoir","gender":"","item":"Choice Band","ability":"Frisk","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Shadow Sneak"],["Thunder Punch"],["Earthquake"],["Trick"]]},{"species":"Dusknoir","gender":"","item":"Spell Tag","ability":"Frisk","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Shadow Sneak"],["Thunder Punch"],["Earthquake"],["Will-O-Wisp"]]}]},"huntail":{"flags":{},"sets":[{"species":"Huntail","gender":"","item":"White Herb","ability":"Water Veil","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naughty","moves":[["Shell Smash"],["Sucker Punch"],["Waterfall"],["Ice Beam"]]},{"species":"Huntail","gender":"","item":"White Herb","ability":"Swift Swim","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Sucker Punch"],["Waterfall"],["Double-Edge"]]}]},"murkrow":{"flags":{},"sets":[{"species":"Murkrow","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Sucker Punch"],["Pursuit"],["Thunder Wave"]]},{"species":"Murkrow","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Brave Bird"],["Sucker Punch"],["Hidden Power Fighting"],["Thunder Wave","Pursuit"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"vibrava":{"flags":{},"sets":[{"species":"Vibrava","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Earthquake"],["U-turn","Toxic"],["Defog"],["Roost"]]}]},"zweilous":{"flags":{},"sets":[{"species":"Zweilous","gender":"","item":"Eviolite","ability":"Hustle","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Crunch"],["Dragon Tail","Roar"]]},{"species":"Zweilous","gender":"","item":"Choice Band","ability":"Hustle","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Crunch"],["Outrage"],["Superpower"],["Sleep Talk"]]}]},"avalugg":{"flags":{},"sets":[{"species":"Avalugg","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Recover"],["Rapid Spin"],["Avalanche"],["Roar","Toxic"]]}]},"electrode":{"flags":{},"sets":[{"species":"Electrode","gender":"","item":"Life Orb","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Signal Beam"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"marowak":{"flags":{},"sets":[{"species":"Marowak","gender":"","item":"Thick Club","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bonemerang"],["Knock Off"],["Double-Edge"],["Stealth Rock"]]},{"species":"Marowak","gender":"","item":"Thick Club","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bonemerang"],["Knock Off"],["Double-Edge"],["Stone Edge"]]},{"species":"Marowak","gender":"","item":"Thick Club","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bonemerang"],["Knock Off"],["Stone Edge"],["Stealth Rock"]]}]},"quilladin":{"flags":{},"sets":[{"species":"Quilladin","gender":"","item":"Eviolite","ability":"Bulletproof","evs":{"hp":252,"atk":4,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Wood Hammer"],["Spikes"],["Synthesis"],["Roar"]]},{"species":"Quilladin","gender":"","item":"Eviolite","ability":"Bulletproof","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Wood Hammer"],["Taunt"],["Spikes"],["Zen Headbutt","Drain Punch"]]}]},"rampardos":{"flags":{},"sets":[{"species":"Rampardos","gender":"","item":"Focus Sash","ability":"Mold Breaker","evs":{"hp":0,"atk":144,"def":0,"spa":112,"spd":0,"spe":252},"nature":"Naive","moves":[["Stealth Rock"],["Superpower"],["Head Smash"],["Surf"]]}]},"drifblim":{"flags":{},"sets":[{"species":"Drifblim","gender":"","item":"Liechi Berry","ability":"Unburden","evs":{"hp":12,"atk":244,"def":0,"spa":0,"spd":40,"spe":212},"nature":"Adamant","moves":[["Substitute"],["Acrobatics"],["Knock Off"],["Will-O-Wisp"]]}]}}} +{ + "Uber": { + "groudon": { + "flags": {}, + "sets": [{ + "species": "Groudon", + "item": ["Red Orb"], + "ability": ["Drought"], + "evs": {"hp": 252, "def": 56, "spd": 200}, + "nature": "Relaxed", + "moves": [["Precipice Blades"], ["Toxic"], ["Overheat"], ["Stealth Rock"]] + }, { + "species": "Groudon", + "item": ["Red Orb"], + "ability": ["Drought"], + "evs": {"hp": 180, "spa": 252, "spe": 76}, + "nature": "Mild", + "moves": [["Overheat"], ["Stealth Rock"], ["Precipice Blades"], ["Toxic"]] + }, { + "species": "Groudon", + "item": ["Red Orb"], + "ability": ["Drought"], + "evs": {"atk": 252, "spd": 100, "spe": 156}, + "nature": "Adamant", + "moves": [["Precipice Blades"], ["Stone Edge"], ["Swords Dance"], ["Rock Polish"]] + }, { + "species": "Groudon", + "item": ["Red Orb"], + "ability": ["Drought"], + "evs": {"spa": 252, "spd": 100, "spe": 156}, + "nature": "Mild", + "moves": [["Precipice Blades"], ["Fire Blast"], ["Hidden Power Ice"], ["Rock Polish"]] + }, { + "species": "Groudon", + "item": ["Red Orb"], + "ability": ["Drought"], + "evs": {"spa": 212, "spd": 144, "spe": 152}, + "nature": "Mild", + "moves": [["Swords Dance"], ["Precipice Blades"], ["Rock Tomb"], ["Overheat"]] + }, { + "species": "Groudon", + "item": ["Red Orb"], + "ability": ["Drought"], + "evs": {"hp": 144, "atk": 156, "spd": 56, "spe": 152}, + "nature": "Adamant", + "moves": [["Precipice Blades"], ["Swords Dance"], ["Stealth Rock"], ["Rock Tomb"]] + }] + }, + "xerneas": { + "flags": {}, + "sets": [{ + "species": "Xerneas", + "item": ["Power Herb"], + "ability": ["Fairy Aura"], + "evs": {"hp": 72, "spa": 252, "spd": 100, "spe": 84}, + "nature": "Modest", + "moves": [["Geomancy"], ["Moonblast"], ["Thunder"], ["Focus Blast"]] + }, { + "species": "Xerneas", + "item": ["Power Herb"], + "ability": ["Fairy Aura"], + "evs": {"def": 168, "spa": 252, "spe": 88}, + "nature": "Modest", + "moves": [["Geomancy"], ["Moonblast"], ["Psyshock"], ["Hidden Power Fire"]] + }, { + "species": "Xerneas", + "item": ["Fairium Z"], + "ability": ["Fairy Aura"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Geomancy"], ["Moonblast"], ["Ingrain", "Sleep Talk"], ["Rest"]] + }, { + "species": "Xerneas", + "item": ["Choice Scarf"], + "ability": ["Fairy Aura"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Moonblast"], ["Focus Blast"], ["Aromatherapy"], ["Thunder"]] + }, { + "species": "Xerneas", + "item": ["Choice Specs"], + "ability": ["Fairy Aura"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Moonblast"], ["Grass Knot"], ["Thunder"], ["Hidden Power Fire"]] + }] + }, + "arceusground": { + "flags": {}, + "sets": [{ + "species": "Arceus-Ground", + "item": ["Earth Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "def": 64, "spe": 192}, + "nature": "Timid", + "moves": [["Judgment"], ["Ice Beam"], ["Defog", "Stealth Rock"], ["Recover"]] + }, { + "species": "Arceus-Ground", + "item": ["Groundium Z"], + "ability": ["Multitype"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Stone Edge"], ["Swords Dance"], ["Substitute", "Recover"]] + }, { + "species": "Arceus-Ground", + "item": ["Earth Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Judgment"], ["Ice Beam"], ["Calm Mind"], ["Recover"]] + }] + }, + "gengar": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Gengar", + "item": ["Gengarite"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Will-O-Wisp"], ["Taunt", "Substitute"], ["Hex"], ["Sludge Wave"]] + }, { + "species": "Gengar", + "item": ["Gengarite"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Icy Wind", "Thunder"], ["Taunt", "Substitute"]] + }] + }, + "salamence": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Salamence", + "item": ["Salamencite"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Double-Edge", "Body Slam"], ["Defog"], ["Roost"], ["Toxic", "Facade"]] + }, { + "species": "Salamence", + "item": ["Salamencite"], + "ability": ["Intimidate"], + "evs": {"hp": 44, "atk": 252, "spe": 212}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Double-Edge"], ["Roost"], ["Facade", "Earthquake"]] + }] + }, + "marshadow": { + "flags": {}, + "sets": [{ + "species": "Marshadow", + "item": ["Marshadium Z"], + "ability": ["Technician"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Spectral Thief"], ["Close Combat"], ["Shadow Sneak"], ["Bulk Up"]] + }, { + "species": "Marshadow", + "item": ["Life Orb"], + "ability": ["Technician"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Spectral Thief"], ["Close Combat"], ["Rock Tomb", "Hidden Power Ice"], ["Shadow Sneak"]] + }] + }, + "hooh": { + "flags": {}, + "sets": [{ + "species": "Ho-Oh", + "item": ["Leftovers"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 204, "spd": 52}, + "nature": "Impish", + "moves": [["Sacred Fire"], ["Brave Bird", "Defog"], ["Toxic"], ["Recover"]] + }, { + "species": "Ho-Oh", + "item": ["Life Orb"], + "ability": ["Regenerator"], + "evs": {"hp": 104, "atk": 252, "spe": 152}, + "nature": "Adamant", + "moves": [["Brave Bird"], ["Sacred Fire"], ["Recover"], ["Toxic"]] + }, { + "species": "Ho-Oh", + "item": ["Choice Band"], + "ability": ["Regenerator"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Sacred Fire"], ["Earthquake"], ["Toxic"]] + }] + }, + "yveltal": { + "flags": {}, + "sets": [{ + "species": "Yveltal", + "item": ["Life Orb"], + "ability": ["Dark Aura"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Rash", + "moves": [["Oblivion Wing"], ["Dark Pulse"], ["Sucker Punch", "Toxic"], ["Taunt"]] + }, { + "species": "Yveltal", + "item": ["Choice Scarf"], + "ability": ["Dark Aura"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Oblivion Wing"], ["Dark Pulse"], ["Foul Play"], ["U-turn"]] + }, { + "species": "Yveltal", + "item": ["Leftovers"], + "ability": ["Dark Aura"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Foul Play"], ["Taunt"], ["Roost"], ["Sucker Punch", "Toxic"]] + }, { + "species": "Yveltal", + "item": ["Choice Specs"], + "ability": ["Dark Aura"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Oblivion Wing"], ["Heat Wave"], ["U-turn"]] + }, { + "species": "Yveltal", + "item": ["Leftovers"], + "ability": ["Dark Aura"], + "evs": {"hp": 252, "spd": 68, "spe": 188}, + "nature": "Timid", + "moves": [["Dark Pulse", "Foul Play"], ["Taunt"], ["Roost"], ["Toxic"]] + }] + }, + "lucario": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Lucario", + "item": ["Lucarionite"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Meteor Mash"], ["Bullet Punch"], ["Swords Dance"]] + }] + }, + "kyogre": { + "flags": {}, + "sets": [{ + "species": "Kyogre", + "item": ["Blue Orb"], + "ability": ["Drizzle"], + "evs": {"hp": 32, "def": 124, "spa": 200, "spe": 152}, + "nature": "Modest", + "moves": [["Calm Mind"], ["Origin Pulse"], ["Ice Beam"], ["Substitute"]] + }, { + "species": "Kyogre", + "item": ["Blue Orb"], + "ability": ["Drizzle"], + "evs": {"hp": 32, "atk": 236, "def": 64, "spe": 176}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Earthquake"], ["Ice Beam"], ["Thunder"]] + }, { + "species": "Kyogre", + "item": ["Blue Orb"], + "ability": ["Drizzle"], + "evs": {"hp": 252, "def": 88, "spd": 168}, + "nature": "Calm", + "moves": [["Scald"], ["Rest"], ["Sleep Talk"], ["Ice Beam"]] + }, { + "species": "Kyogre", + "item": ["Choice Specs", "Choice Scarf"], + "ability": ["Drizzle"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Water Spout"], ["Origin Pulse"], ["Thunder"], ["Ice Beam"]] + }] + }, + "arceuswater": { + "flags": {}, + "sets": [{ + "species": "Arceus-Water", + "item": ["Splash Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "def": 64, "spe": 192}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Judgment"], ["Toxic"], ["Recover"]] + }, { + "species": "Arceus-Water", + "item": ["Splash Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "def": 16, "spa": 144, "spe": 96}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Judgment"], ["Stealth Rock"], ["Recover"]] + }] + }, + "arceusfairy": { + "flags": {}, + "sets": [{ + "species": "Arceus-Fairy", + "item": ["Pixie Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "def": 64, "spe": 192}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Recover"], ["Judgment"], ["Toxic", "Will-O-Wisp"]] + }, { + "species": "Arceus-Fairy", + "item": ["Pixie Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Recover"], ["Judgment"], ["Earth Power"]] + }] + }, + "celesteela": { + "flags": {}, + "sets": [{ + "species": "Celesteela", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Leech Seed"], ["Heavy Slam"], ["Toxic"], ["Protect", "Flamethrower"]] + }] + }, + "deoxysattack": { + "flags": {}, + "sets": [{ + "species": "Deoxys-Attack", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Rash", + "moves": [["Psycho Boost"], ["Ice Beam"], ["Superpower"], ["Spikes", "Dark Pulse", "Extreme Speed"]] + }] + }, + "giratinaorigin": { + "flags": {}, + "sets": [{ + "species": "Giratina-Origin", + "item": ["Griseous Orb"], + "ability": ["Levitate"], + "evs": {"def": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Toxic", "Thunder Wave"], ["Hex"], ["Defog"]] + }, { + "species": "Giratina-Origin", + "item": ["Griseous Orb"], + "ability": ["Levitate"], + "evs": {"atk": 252, "def": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Shadow Sneak"], ["Defog"], ["Dragon Tail"]] + }, { + "species": "Giratina-Origin", + "item": ["Griseous Orb"], + "ability": ["Levitate"], + "evs": {"def": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Roar"], ["Shadow Ball"], ["Defog"]] + }] + }, + "zygarde": { + "flags": {}, + "sets": [{ + "species": "Zygarde", + "item": ["Leftovers"], + "ability": ["Power Construct"], + "evs": {"hp": 240, "def": 252, "spe": 16}, + "nature": "Impish", + "moves": [["Rest"], ["Sleep Talk"], ["Thousand Arrows"], ["Dragon Tail", "Glare"]] + }, { + "species": "Zygarde", + "item": ["Leftovers"], + "ability": ["Power Construct"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Thousand Arrows"], ["Dragon Tail", "Protect"], ["Substitute"]] + }, { + "species": "Zygarde", + "item": ["Groundium Z"], + "ability": ["Power Construct"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Thousand Arrows"], ["Substitute"], ["Dragon Tail", "Glare"]] + }] + }, + "rayquaza": { + "flags": {}, + "sets": [{ + "species": "Rayquaza", + "item": ["Flyinium Z"], + "ability": ["Air Lock"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Dragon Ascent"], ["Earthquake"], ["Extreme Speed"]] + }, { + "species": "Rayquaza", + "item": ["Focus Sash"], + "ability": ["Air Lock"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Dragon Ascent"], ["Earthquake", "V-create"], ["Extreme Speed"]] + }, { + "species": "Rayquaza", + "item": ["Life Orb"], + "ability": ["Air Lock"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Dragon Ascent"], ["Draco Meteor"], ["Extreme Speed"], ["V-create"]] + }] + }, + "sableye": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Foul Play"], ["Fake Out"], ["Toxic", "Will-O-Wisp"], ["Recover"]] + }, { + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 24, "spd": 232}, + "nature": "Calm", + "moves": [["Fake Out"], ["Recover"], ["Foul Play"], ["Toxic", "Will-O-Wisp"]] + }] + }, + "ferrothorn": { + "flags": {}, + "sets": [{ + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Spikes"], ["Leech Seed"], ["Gyro Ball"], ["Power Whip", "Protect"]] + }] + }, + "toxapex": { + "flags": {}, + "sets": [{ + "species": "Toxapex", + "item": ["Rocky Helmet", "Shed Shell"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Toxic Spikes"], ["Scald"], ["Recover"], ["Haze"]] + }] + }, + "lugia": { + "flags": {}, + "sets": [{ + "species": "Lugia", + "item": ["Leftovers"], + "ability": ["Multiscale"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "nature": "Bold", + "moves": [["Toxic"], ["Roost"], ["Whirlwind", "Dragon Tail"], ["Psychic", "Ice Beam"]] + }] + }, + "arceus": { + "flags": {}, + "sets": [{ + "species": "Arceus", + "item": ["Chople Berry"], + "ability": ["Multitype"], + "evs": {"hp": 240, "atk": 252, "spe": 16}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Extreme Speed"], ["Shadow Claw"], ["Recover"]] + }, { + "species": "Arceus", + "item": ["Normalium Z"], + "ability": ["Multitype"], + "evs": {"hp": 240, "atk": 252, "spe": 16}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Extreme Speed"], ["Shadow Claw"], ["Substitute"]] + }] + }, + "deoxysspeed": { + "flags": {}, + "sets": [{ + "species": "Deoxys-Speed", + "item": ["Focus Sash"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Taunt"], ["Spikes"], ["Skill Swap"]] + }, { + "species": "Deoxys-Speed", + "item": ["Rocky Helmet"], + "ability": ["Pressure"], + "evs": {"hp": 252, "def": 232, "spe": 24}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Taunt"], ["Spikes"], ["Magic Coat"]] + }, { + "species": "Deoxys-Speed", + "item": ["Light Clay"], + "ability": ["Pressure"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Reflect"], ["Light Screen"], ["Stealth Rock"], ["Taunt"]] + }] + }, + "lunala": { + "flags": {}, + "sets": [{ + "species": "Lunala", + "item": ["Ghostium Z"], + "ability": ["Shadow Shield"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Moongeist Beam"], ["Psyshock"], ["Ice Beam", "Focus Blast"]] + }, { + "species": "Lunala", + "item": ["Choice Scarf"], + "ability": ["Shadow Shield"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Moongeist Beam"], ["Psyshock"], ["Ice Beam"], ["Focus Blast"]] + }] + }, + "dialga": { + "flags": {}, + "sets": [{ + "species": "Dialga", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"hp": 104, "spa": 252, "spe": 152}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Fire Blast"], ["Stealth Rock"], ["Thunder"]] + }] + }, + "excadrill": { + "flags": {}, + "sets": [{ + "species": "Excadrill", + "item": ["Focus Sash"], + "ability": ["Mold Breaker"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake", "Rock Tomb"], ["Toxic"], ["Rapid Spin"]] + }] + }, + "diancie": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Earth Power"], ["Calm Mind", "Heal Bell"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"hp": 80, "spa": 252, "spe": 176}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Earth Power"], ["Stealth Rock"]] + }] + }, + "scizor": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Bullet Punch"], ["Roost"], ["U-turn"], ["Swords Dance", "Toxic"]] + }] + }, + "tapulele": { + "flags": {}, + "sets": [{ + "species": "Tapu Lele", + "item": ["Choice Scarf"], + "ability": ["Psychic Surge"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Moonblast"], ["Grass Knot", "Aromatherapy"], ["Nature's Madness"]] + }] + }, + "mewtwo": { + "flags": {}, + "sets": [{ + "species": "Mewtwo", + "item": ["Mewtwonite Y"], + "ability": ["Unnerve"], + "evs": {"hp": 8, "def": 80, "spa": 228, "spe": 192}, + "nature": "Timid", + "moves": [["Psystrike"], ["Ice Beam"], ["Fire Blast", "Focus Blast"], ["Calm Mind", "Taunt"]] + }, { + "species": "Mewtwo", + "item": ["Mewtwonite X"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Low Kick"], ["Taunt"], ["Ice Beam", "Zen Headbutt"], ["Stone Edge"]] + }, { + "species": "Mewtwo", + "item": ["Psychium Z"], + "ability": ["Unnerve"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psystrike"], ["Ice Beam"], ["Fire Blast"], ["Calm Mind"]] + }] + }, + "blissey": { + "flags": {}, + "sets": [{ + "species": "Blissey", + "item": ["Shed Shell"], + "ability": ["Natural Cure"], + "evs": {"hp": 4, "def": 252, "spd": 252}, + "nature": "Calm", + "moves": [["Soft-Boiled"], ["Toxic", "Wish"], ["Heal Bell"], ["Confide"]] + }] + }, + "chansey": { + "flags": {}, + "sets": [{ + "species": "Chansey", + "item": ["Eviolite"], + "ability": ["Natural Cure"], + "evs": {"hp": 4, "def": 252, "spd": 252}, + "nature": "Bold", + "moves": [["Soft-Boiled"], ["Toxic"], ["Heal Bell"], ["Wish", "Stealth Rock"]] + }] + }, + "arceusdark": { + "flags": {}, + "sets": [{ + "species": "Arceus-Dark", + "item": ["Dread Plate"], + "ability": ["Multitype"], + "evs": {"hp": 248, "spa": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Refresh", "Will-O-Wisp"]] + }, { + "species": "Arceus-Dark", + "item": ["Dread Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "nature": "Timid", + "moves": [["Judgment"], ["Ice Beam"], ["Recover"], ["Toxic", "Will-O-Wisp"]] + }] + }, + "tyranitar": { + "flags": {}, + "sets": [{ + "species": "Tyranitar", + "item": ["Choice Band"], + "ability": ["Sand Stream"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Pursuit"], ["Crunch", "Earthquake"], ["Superpower", "Ice Punch"]] + }, { + "species": "Tyranitar", + "item": ["Chople Berry"], + "ability": ["Sand Stream"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Rock Tomb"], ["Pursuit"], ["Toxic", "Rest"]] + }] + }, + "magearna": { + "flags": {}, + "sets": [{ + "species": "Magearna", + "item": ["Leftovers"], + "ability": ["Soul-Heart"], + "evs": {"hp": 252, "spa": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Fleur Cannon"], ["Heart Swap"], ["Volt Switch"], ["Pain Split"]] + }, { + "species": "Magearna", + "item": ["Normalium Z"], + "ability": ["Soul-Heart"], + "evs": {"hp": 252, "spa": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Fleur Cannon"], ["Heart Swap"], ["Volt Switch"], ["Heal Bell"]] + }] + }, + "mukalola": { + "flags": {}, + "sets": [{ + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 252, "atk": 80, "spd": 176}, + "nature": "Adamant", + "moves": [["Pursuit"], ["Knock Off"], ["Poison Jab"], ["Shadow Sneak"]] + }] + }, + "giratina": { + "flags": {}, + "sets": [{ + "species": "Giratina", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "def": 204, "spd": 52}, + "ivs": {"spe": 30}, + "nature": "Impish", + "moves": [["Defog"], ["Dragon Tail", "Roar"], ["Will-O-Wisp"], ["Rest"]] + }] + }, + "gyarados": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Gyarados", + "item": ["Gyaradosite"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Crunch"], ["Taunt"], ["Waterfall", "Earthquake"]] + }] + }, + "palkia": { + "flags": {}, + "sets": [{ + "species": "Palkia", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Hasty", + "moves": [["Hydro Pump"], ["Spacial Rend", "Draco Meteor"], ["Thunder"], ["Focus Punch", "Fire Blast"]] + }] + }, + "blaziken": { + "flags": {}, + "sets": [{ + "species": "Blaziken", + "item": ["Blazikenite"], + "ability": ["Speed Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance", "Protect"], ["Flare Blitz"], ["Low Kick"], ["Stone Edge"]] + }] + }, + "skarmory": { + "flags": {}, + "sets": [{ + "species": "Skarmory", + "item": ["Shed Shell"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Spikes"], ["Toxic"], ["Whirlwind"], ["Roost"]] + }] + }, + "gothitelle": { + "flags": {}, + "sets": [{ + "species": "Gothitelle", + "item": ["Leftovers"], + "ability": ["Shadow Tag"], + "evs": {"hp": 244, "def": 108, "spd": 156}, + "nature": "Calm", + "moves": [["Charm"], ["Confide"], ["Rest"], ["Taunt"]] + }] + }, + "buzzwole": { + "flags": {}, + "sets": [{ + "species": "Buzzwole", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 248, "def": 184, "spd": 76}, + "nature": "Impish", + "moves": [["Hammer Arm"], ["Toxic"], ["Roost"], ["Earthquake", "Taunt"]] + }] + }, + "arceusghost": { + "flags": {}, + "sets": [{ + "species": "Arceus-Ghost", + "item": ["Ghostium Z"], + "ability": ["Multitype"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Shadow Force"], ["Substitute"], ["Shadow Claw", "Brick Break"]] + }] + }, + "cloyster": { + "flags": {}, + "sets": [{ + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes", "Toxic Spikes"], ["Rapid Spin"], ["Icicle Spear"], ["Shell Smash"]] + }] + }, + "arceuspoison": { + "flags": {}, + "sets": [{ + "species": "Arceus-Poison", + "item": ["Toxic Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Judgment"], ["Recover"], ["Calm Mind"], ["Fire Blast"]] + }] + }, + "arceusflying": { + "flags": {}, + "sets": [{ + "species": "Arceus-Flying", + "item": ["Sky Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Judgment"], ["Recover"], ["Refresh"]] + }] + }, + "shayminsky": { + "flags": {}, + "sets": [{ + "species": "Shaymin-Sky", + "item": ["Life Orb"], + "ability": ["Serene Grace"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Seed Flare"], ["Air Slash"], ["Healing Wish"], ["Hidden Power Ice", "Hidden Power Rock"]] + }] + }, + "smeargle": { + "flags": {}, + "sets": [{ + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Sticky Web"], ["Nuzzle"], ["Taunt"], ["Whirlwind", "Toxic Thread"]] + }] + }, + "klefki": { + "flags": {}, + "sets": [{ + "species": "Klefki", + "item": ["Leftovers"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Spikes"], ["Thunder Wave"], ["Toxic"], ["Play Rough"]] + }] + }, + "metagross": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Metagross", + "item": ["Metagrossite"], + "ability": ["Clear Body"], + "evs": {"hp": 184, "atk": 148, "spe": 176}, + "nature": "Jolly", + "moves": [["Meteor Mash"], ["Bullet Punch"], ["Ice Punch", "Earthquake"], ["Toxic", "Thunder Punch"]] + }] + }, + "arceusrock": { + "flags": {}, + "sets": [{ + "species": "Arceus-Rock", + "item": ["Stone Plate"], + "ability": ["Multitype"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Judgment"], ["Calm Mind", "Defog"], ["Will-O-Wisp"], ["Recover"]] + }] + }, + "zekrom": { + "flags": {}, + "sets": [{ + "species": "Zekrom", + "item": ["Dragonium Z"], + "ability": ["Teravolt"], + "evs": {"hp": 64, "atk": 252, "spe": 192}, + "nature": "Adamant", + "moves": [["Hone Claws"], ["Outrage"], ["Bolt Strike"], ["Substitute", "Draco Meteor"]] + }] + }, + "dugtrio": { + "flags": {}, + "sets": [{ + "species": "Dugtrio", + "item": ["Groundium Z"], + "ability": ["Arena Trap"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Toxic"], ["Memento"], ["Stealth Rock"]] + }] + }, + "arceuselectric": { + "flags": {}, + "sets": [{ + "species": "Arceus-Electric", + "item": ["Zap Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Judgment"], ["Ice Beam"], ["Recover"]] + }] + }, + "ditto": { + "flags": {}, + "sets": [{ + "species": "Ditto", + "item": ["Choice Scarf"], + "ability": ["Imposter"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "ivs": {"hp": 30, "atk": 30, "def": 30, "spd": 30, "spe": 0}, + "nature": "Relaxed", + "moves": [["Transform"]] + }] + }, + "darkrai": { + "flags": {}, + "sets": [{ + "species": "Darkrai", + "item": ["Life Orb"], + "ability": ["Bad Dreams"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Dark Pulse"], ["Hypnosis"], ["Thunder", "Sludge Bomb"]] + }] + }, + "tapukoko": { + "flags": {}, + "sets": [{ + "species": "Tapu Koko", + "item": ["Electrium Z"], + "ability": ["Electric Surge"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Thunder"], ["Nature's Madness"], ["Taunt"], ["U-turn"]] + }] + }, + "arceussteel": { + "flags": {}, + "sets": [{ + "species": "Arceus-Steel", + "item": ["Iron Plate"], + "ability": ["Multitype"], + "evs": {"hp": 248, "spa": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Judgment"], ["Earth Power"], ["Recover"]] + }] + }, + "aegislash": { + "flags": {}, + "sets": [{ + "species": "Aegislash", + "item": ["Iron Ball"], + "ability": ["Stance Change"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["King's Shield"], ["Gyro Ball"], ["Shadow Ball"], ["Toxic"]] + }] + }, + "landorus": { + "flags": {}, + "sets": [{ + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Earth Power"], ["Rock Slide"], ["Hidden Power Ice"], ["Knock Off"]] + }] + }, + "arceusdragon": { + "flags": {}, + "sets": [{ + "species": "Arceus-Dragon", + "item": ["Draco Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "def": 64, "spe": 192}, + "nature": "Timid", + "moves": [["Judgment"], ["Fire Blast"], ["Defog"], ["Recover"]] + }] + }, + "kyuremwhite": { + "flags": {}, + "sets": [{ + "species": "Kyurem-White", + "item": ["Life Orb"], + "ability": ["Turboblaze"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Draco Meteor"], ["Fusion Flare"], ["Roost"]] + }] + }, + "arceusgrass": { + "flags": {}, + "sets": [{ + "species": "Arceus-Grass", + "item": ["Meadow Plate"], + "ability": ["Multitype"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Grass Knot"], ["Ice Beam"], ["Fire Blast"], ["Recover"]] + }] + }, + "wobbuffet": { + "flags": {}, + "sets": [{ + "species": "Wobbuffet", + "item": ["Leftovers"], + "ability": ["Shadow Tag"], + "evs": {"hp": 204, "def": 32, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Encore"], ["Counter"], ["Mirror Coat"], ["Safeguard"]] + }] + }, + "latias": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 164, "spe": 92}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Defog"], ["Toxic"], ["Roost"]] + }] + }, + "necrozmaduskmane": { + "flags": {}, + "sets": [{ + "species": "Necrozma-Dusk-Mane", + "item": ["Solganium Z"], + "ability": ["Prism Armor"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Rock Polish"], ["Swords Dance"], ["Earthquake"], ["Sunsteel Strike"]] + }, { + "species": "Necrozma-Dusk-Mane", + "item": ["Leftovers"], + "ability": ["Prism Armor"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Toxic"], ["Moonlight"], ["Sunsteel Strike"]] + }, { + "species": "Necrozma-Dusk-Mane", + "item": ["Solganium Z"], + "ability": ["Prism Armor"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Swords Dance"], ["Trick Room"], ["Sunsteel Strike"], ["Earthquake"]] + }, { + "species": "Necrozma-Dusk-Mane", + "item": ["Life Orb"], + "ability": ["Prism Armor"], + "evs": {"hp": 108, "atk": 252, "spe": 148}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Morning Sun"], ["Sunsteel Strike"], ["Earthquake", "Photon Geyser"]] + }, { + "species": "Necrozma-Dusk-Mane", + "item": ["Ultranecrozium Z"], + "ability": ["Prism Armor"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Photon Geyser"], ["Earthquake"], ["Stone Edge", "Sunsteel Strike"]] + }, { + "species": "Necrozma-Dusk-Mane", + "item": ["Ultranecrozium Z"], + "ability": ["Prism Armor"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Photon Geyser"], ["Heat Wave"], ["Power Gem", "Dragon Pulse"]] + }] + }, + "naganadel": { + "flags": {}, + "sets": [{ + "species": "Naganadel", + "item": ["Dragonium Z"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Draco Meteor"], ["Sludge Wave"], ["Fire Blast"]] + }] + }, + "necrozmadawnwings": { + "flags": {}, + "sets": [{ + "species": "Necrozma-Dawn-Wings", + "item": ["Ultranecrozium Z"], + "ability": ["Prism Armor"], + "evs": {"atk": 252, "def": 32, "spe": 224}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Photon Geyser"], ["Earthquake"], ["Stone Edge"]] + }] + } + }, + "OU": { + "alakazam": { + "flags": {}, + "sets": [{ + "species": "Alakazam", + "item": ["Alakazite"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Recover"], ["Focus Blast"], ["Shadow Ball", "Hidden Power Ice", "Hidden Power Fire", "Calm Mind", "Substitute"]] + }, { + "species": "Alakazam", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"def": 0}, + "nature": "Hasty", + "moves": [["Counter"], ["Psychic"], ["Shadow Ball"], ["Hidden Power Fire"]] + }, { + "species": "Alakazam", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Focus Blast"], ["Psychic", "Psyshock"], ["Shadow Ball", "Hidden Power Fire"], ["Recover"]] + }] + }, + "bisharp": { + "flags": {}, + "sets": [{ + "species": "Bisharp", + "item": ["Dread Plate", "Darkinium Z"], + "ability": ["Defiant"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Swords Dance"]] + }] + }, + "blacephalon": { + "flags": {}, + "sets": [{ + "species": "Blacephalon", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Flamethrower"], ["Fire Blast"], ["Trick", "Explosion"]] + }, { + "species": "Blacephalon", + "item": ["Choice Specs"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Fire Blast", "Flamethrower"], ["Overheat"], ["Trick"]] + }, { + "species": "Blacephalon", + "item": ["Choice Specs"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Fire Blast", "Flamethrower"], ["Overheat"], ["Hidden Power Grass"]] + }, { + "species": "Blacephalon", + "item": ["Ghostium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 236, "spa": 20, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Flamethrower"], ["Substitute"], ["Calm Mind"]] + }] + }, + "buzzwole": { + "flags": {}, + "sets": [{ + "species": "Buzzwole", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 248, "atk": 24, "def": 116, "spd": 8, "spe": 112}, + "nature": "Impish", + "moves": [["Bulk Up"], ["Drain Punch"], ["Ice Punch"], ["Roost"]] + }] + }, + "celesteela": { + "flags": {}, + "sets": [{ + "species": "Celesteela", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 248, "def": 104, "spd": 156}, + "nature": "Relaxed", + "moves": [["Leech Seed"], ["Protect"], ["Heavy Slam"], ["Flamethrower"]] + }] + }, + "chansey": { + "flags": {}, + "sets": [{ + "species": "Chansey", + "item": ["Eviolite"], + "ability": ["Natural Cure"], + "evs": {"hp": 244, "def": 252, "spd": 12}, + "nature": "Bold", + "moves": [["Seismic Toss"], ["Toxic"], ["Stealth Rock"], ["Soft-Boiled"]] + }] + }, + "charizard": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Charizard", + "item": ["Charizardite X"], + "ability": ["Blaze"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Dragon Claw"], ["Earthquake"], ["Roost"]] + }, { + "species": "Charizard", + "item": ["Charizardite Y"], + "ability": ["Blaze"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Flamethrower", "Fire Blast"], ["Solar Beam"], ["Focus Blast"], ["Roost"]] + }, { + "species": "Charizard", + "item": ["Charizardite X"], + "ability": ["Blaze"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Dragon Claw", "Roost"], ["Flare Blitz"], ["Earthquake"]] + }] + }, + "clefable": { + "flags": {}, + "sets": [{ + "species": "Clefable", + "item": ["Leftovers"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Moonblast"], ["Soft-Boiled"], ["Calm Mind"], ["Stealth Rock", "Ice Beam", "Knock Off", "Thunder Wave", "Flamethrower"]] + }, { + "species": "Clefable", + "item": ["Leftovers"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Moonblast"], ["Soft-Boiled"], ["Stealth Rock"], ["Knock Off", "Wish"]] + }, { + "species": "Clefable", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Moonblast"], ["Wish"], ["Protect"], ["Heal Bell"]] + }] + }, + "diancie": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Hidden Power Fire"], ["Earth Power"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Hidden Power Fire"], ["Stealth Rock"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Rock Polish"], ["Moonblast"], ["Diamond Storm"], ["Earth Power"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Rock Polish"], ["Moonblast"], ["Diamond Storm"], ["Hidden Power Fire"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Substitute"], ["Endeavor"]] + }] + }, + "dragonite": { + "flags": {}, + "sets": [{ + "species": "Dragonite", + "item": ["Flyinium Z"], + "ability": ["Multiscale"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Fly"], ["Earthquake", "Fire Punch"], ["Extreme Speed"]] + }] + }, + "excadrill": { + "flags": {}, + "sets": [{ + "species": "Excadrill", + "item": ["Focus Sash"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Rapid Spin"], ["Earthquake"], ["Toxic"]] + }, { + "species": "Excadrill", + "item": ["Choice Scarf"], + "ability": ["Mold Breaker"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Iron Head"], ["Rapid Spin"], ["Rock Slide", "Toxic"]] + }] + }, + "ferrothorn": { + "flags": {}, + "sets": [{ + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "def": 92, "spd": 164}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Spikes", "Stealth Rock"], ["Leech Seed"], ["Power Whip"], ["Gyro Ball"]] + }, { + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "def": 92, "spd": 164}, + "nature": "Careful", + "moves": [["Spikes", "Stealth Rock"], ["Leech Seed"], ["Power Whip"], ["Knock Off", "Protect"]] + }] + }, + "garchomp": { + "flags": {}, + "sets": [{ + "species": "Garchomp", + "item": ["Dragonium Z"], + "ability": ["Rough Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Outrage"], ["Swords Dance"]] + }, { + "species": "Garchomp", + "item": ["Life Orb", "Groundium Z"], + "ability": ["Rough Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Dragon Claw", "Outrage"], ["Fire Fang"]] + }, { + "species": "Garchomp", + "item": ["Life Orb", "Groundium Z"], + "ability": ["Rough Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Swords Dance"], ["Earthquake"], ["Dragon Claw", "Outrage"], ["Fire Blast"]] + }, { + "species": "Garchomp", + "item": ["Choice Scarf"], + "ability": ["Rough Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Outrage"], ["Stone Edge"], ["Dragon Claw"]] + }, { + "species": "Garchomp", + "item": ["Choice Scarf"], + "ability": ["Rough Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Earthquake"], ["Outrage"], ["Stone Edge"], ["Fire Blast"]] + }, { + "species": "Garchomp", + "item": ["Garchompite"], + "ability": ["Rough Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Dragon Claw"], ["Fire Fang", "Stone Edge"], ["Swords Dance"]] + }] + }, + "gengar": { + "flags": {}, + "sets": [{ + "species": "Gengar", + "item": ["Life Orb", "Ghostium Z"], + "ability": ["Cursed Body"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Taunt"], ["Focus Blast"]] + }, { + "species": "Gengar", + "item": ["Choice Specs"], + "ability": ["Cursed Body"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Trick", "Thunderbolt"]] + }] + }, + "greninja": { + "flags": {}, + "sets": [{ + "species": "Greninja", + "gender": "M", + "item": ["Waterium Z"], + "ability": ["Protean"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Spikes"], ["Hydro Pump"], ["Gunk Shot"], ["Hidden Power Fire"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Fightinium Z"], + "ability": ["Protean"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Spikes"], ["Ice Beam"], ["Gunk Shot"], ["Low Kick"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 176, "spa": 80, "spe": 252}, + "nature": "Naive", + "moves": [["Rock Slide", "Gunk Shot"], ["U-turn"], ["Ice Beam"], ["Low Kick", "Spikes"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Focus Sash"], + "ability": ["Protean"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Toxic Spikes"], ["Taunt"], ["Ice Beam"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Expert Belt", "Life Orb"], + "ability": ["Protean"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Hydro Pump"], ["Dark Pulse"], ["Ice Beam"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Expert Belt", "Life Orb"], + "ability": ["Protean"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Spikes"], ["Hydro Pump"], ["Gunk Shot"], ["Ice Beam"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Life Orb", "Expert Belt"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Hydro Pump"], ["Extrasensory"], ["Gunk Shot"], ["Dark Pulse", "Hidden Power Fire"]] + }, { + "species": "Greninja", + "gender": "M", + "item": ["Life Orb", "Expert Belt"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Extrasensory"], ["Ice Beam"], ["Dark Pulse", "Hidden Power Fire"]] + }] + }, + "greninjaash": { + "flags": {}, + "sets": [{ + "species": "Greninja", + "gender": "M", + "item": ["Choice Specs", "Waterium Z"], + "ability": ["Battle Bond"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Dark Pulse"], ["Water Shuriken"], ["Spikes"]] + }] + }, + "heatran": { + "flags": {}, + "sets": [{ + "species": "Heatran", + "item": ["Leftovers"], + "ability": ["Flash Fire"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Toxic"]] + }, { + "species": "Heatran", + "item": ["Leftovers"], + "ability": ["Flash Fire"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Stealth Rock"]] + }, { + "species": "Heatran", + "item": ["Firium Z", "Groundium Z"], + "ability": ["Flash Fire"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Toxic", "Stealth Rock"], ["Taunt"]] + }, { + "species": "Heatran", + "item": ["Steelium Z"], + "ability": ["Flash Fire"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Flash Cannon"], ["Lava Plume", "Magma Storm"], ["Earth Power"], ["Stealth Rock", "Taunt"]] + }, { + "species": "Heatran", + "item": ["Leftovers"], + "ability": ["Flash Fire"], + "evs": {"hp": 248, "spd": 132, "spe": 128}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Magma Storm", "Lava Plume"], ["Toxic", "Will-O-Wisp"], ["Protect"], ["Taunt", "Stealth Rock"]] + }, { + "species": "Heatran", + "item": ["Choice Scarf"], + "ability": ["Flash Fire"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Flash Cannon"], ["Earth Power"], ["Stone Edge", "Will-O-Wisp"]] + }] + }, + "kartana": { + "flags": {}, + "sets": [{ + "species": "Kartana", + "item": ["Fightinium Z", "Grassium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Sacred Sword"], ["Smart Strike", "Knock Off"]] + }, { + "species": "Kartana", + "item": ["Steelium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Sacred Sword"], ["Smart Strike"]] + }, { + "species": "Kartana", + "item": ["Fightinium Z", "Grassium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Sacred Sword"], ["Defog"]] + }, { + "species": "Kartana", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Leaf Blade"], ["Sacred Sword"], ["Smart Strike"], ["Defog", "Knock Off"]] + }, { + "species": "Kartana", + "item": ["Choice Band"], + "ability": ["Beast Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Leaf Blade"], ["Sacred Sword"], ["Smart Strike"], ["Knock Off"]] + }, { + "species": "Kartana", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Leaf Blade"], ["Sacred Sword"], ["Knock Off"], ["Defog"]] + }] + }, + "keldeo": { + "flags": {}, + "sets": [{ + "species": "Keldeo", + "item": ["Choice Specs"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Secret Sword"], ["Icy Wind"], ["Scald"]] + }, { + "species": "Keldeo", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Hydro Pump"], ["Secret Sword"], ["Stone Edge"], ["Scald", "Surf"]] + }, { + "species": "Keldeo", + "item": ["Waterium Z"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Hydro Pump"], ["Secret Sword"], ["Taunt"]] + }] + }, + "kyuremblack": { + "flags": {}, + "sets": [{ + "species": "Kyurem-Black", + "item": ["Life Orb"], + "ability": ["Teravolt"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Hidden Power Fire", "Earth Power"], ["Roost"]] + }, { + "species": "Kyurem-Black", + "item": ["Icium Z"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Freeze Shock"], ["Fusion Bolt"], ["Ice Beam"], ["Earth Power", "Substitute"]] + }] + }, + "landorustherian": { + "flags": {}, + "sets": [{ + "species": "Landorus-Therian", + "item": ["Leftovers", "Rocky Helmet"], + "ability": ["Intimidate"], + "evs": {"hp": 252, "def": 240, "spe": 16}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Earthquake"], ["Hidden Power Ice"], ["U-turn"]] + }, { + "species": "Landorus-Therian", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"hp": 80, "atk": 148, "def": 84, "spe": 196}, + "nature": "Naive", + "moves": [["Earthquake"], ["U-turn"], ["Hidden Power Ice"], ["Defog", "Rock Slide", "Explosion", "Knock Off", "Superpower"]] + }, { + "species": "Landorus-Therian", + "item": ["Rockium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Stealth Rock"]] + }, { + "species": "Landorus-Therian", + "item": ["Flyinium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Fly"], ["Gravity", "Smack Down"], ["Swords Dance", "Stealth Rock"]] + }, { + "species": "Landorus-Therian", + "item": ["Focus Sash"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Explosion"], ["Swords Dance"]] + }] + }, + "latios": { + "flags": {}, + "sets": [{ + "species": "Latios", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Defog"], ["Trick", "Thunder Wave"]] + }, { + "species": "Latios", + "item": ["Psychium Z", "Soul Dew"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock", "Psychic"], ["Recover"], ["Calm Mind"]] + }, { + "species": "Latios", + "item": ["Psychium Z", "Soul Dew"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock", "Psychic"], ["Recover"], ["Defog"]] + }, { + "species": "Latios", + "item": ["Latiosite"], + "ability": ["Levitate"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Psychic"], ["Earthquake"], ["Ice Beam", "Draco Meteor", "Hidden Power Fire", "Defog"], ["Roost"]] + }] + }, + "lopunny": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Lopunny", + "item": ["Lopunnite"], + "ability": ["Limber"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Return"], ["High Jump Kick"], ["Power-Up Punch"], ["Encore", "Fake Out", "Ice Punch"]] + }] + }, + "magearna": { + "flags": {}, + "sets": [{ + "species": "Magearna", + "item": ["Assault Vest"], + "ability": ["Soul-Heart"], + "evs": {"hp": 248, "spd": 224, "spe": 36}, + "nature": "Sassy", + "moves": [["Fleur Cannon"], ["Iron Head"], ["Hidden Power Fire"], ["Volt Switch"]] + }, { + "species": "Magearna", + "item": ["Electrium Z"], + "ability": ["Soul-Heart"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shift Gear"], ["Ice Beam"], ["Thunderbolt"], ["Focus Blast"]] + }, { + "species": "Magearna", + "item": ["Fairium Z"], + "ability": ["Soul-Heart"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shift Gear"], ["Fleur Cannon"], ["Thunderbolt"], ["Hidden Power Fire"]] + }, { + "species": "Magearna", + "item": ["Leftovers", "Electrium Z"], + "ability": ["Soul-Heart"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Shift Gear"], ["Calm Mind"], ["Thunderbolt"], ["Ice Beam"]] + }, { + "species": "Magearna", + "item": ["Fairium Z", "Electrium Z"], + "ability": ["Soul-Heart"], + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"spe": 0}, + "nature": "Quiet", + "moves": [["Trick Room"], ["Fleur Cannon"], ["Focus Blast"], ["Thunderbolt"]] + }, { + "species": "Magearna", + "item": ["Fairium Z"], + "ability": ["Soul-Heart"], + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"spe": 0}, + "nature": "Quiet", + "moves": [["Trick Room"], ["Fleur Cannon"], ["Focus Blast"], ["Flash Cannon"]] + }, { + "species": "Magearna", + "item": ["Electrium Z"], + "ability": ["Soul-Heart"], + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"spe": 0}, + "nature": "Quiet", + "moves": [["Trick Room"], ["Flash Cannon"], ["Focus Blast"], ["Thunderbolt"]] + }] + }, + "magnezone": { + "flags": {}, + "sets": [{ + "species": "Magnezone", + "item": ["Electrium Z", "Steelium Z"], + "ability": ["Magnet Pull"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Substitute"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Fire"]] + }, { + "species": "Magnezone", + "item": ["Choice Scarf"], + "ability": ["Magnet Pull"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Fire"], ["Flash Cannon"], ["Volt Switch"]] + }, { + "species": "Magnezone", + "item": ["Choice Specs"], + "ability": ["Magnet Pull"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Hidden Power Fire"], ["Flash Cannon"], ["Volt Switch"]] + }] + }, + "manaphy": { + "flags": {}, + "sets": [{ + "species": "Manaphy", + "item": ["Waterium Z"], + "ability": ["Hydration"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Tail Glow"], ["Surf"], ["Psychic"], ["Rain Dance"]] + }, { + "species": "Manaphy", + "item": ["Leftovers"], + "ability": ["Hydration"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Tail Glow"], ["Scald"], ["Ice Beam"], ["Psychic"]] + }] + }, + "mawile": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Mawile", + "item": ["Mawilite"], + "ability": ["Intimidate", "Hyper Cutter"], + "evs": {"hp": 40, "atk": 252, "spe": 216}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Play Rough"], ["Sucker Punch"], ["Knock Off", "Thunder Punch"]] + }, { + "species": "Mawile", + "item": ["Mawilite"], + "ability": ["Hyper Cutter"], + "evs": {"hp": 92, "atk": 252, "spe": 164}, + "nature": "Adamant", + "moves": [["Play Rough"], ["Sucker Punch", "Ice Punch"], ["Thunder Punch"], ["Fire Fang", "Focus Punch"]] + }] + }, + "medicham": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Medicham", + "item": ["Medichamite"], + "ability": ["Telepathy"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Fake Out"], ["High Jump Kick"], ["Ice Punch"], ["Zen Headbutt"]] + }, { + "species": "Medicham", + "item": ["Medichamite"], + "ability": ["Telepathy"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Fake Out"], ["High Jump Kick"], ["Ice Punch"], ["Zen Headbutt"]] + }] + }, + "mew": { + "flags": {}, + "sets": [{ + "species": "Mew", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 240, "def": 156, "spe": 112}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam", "Earthquake"], ["Will-O-Wisp"], ["Soft-Boiled"], ["Stealth Rock", "Defog"]] + }, { + "species": "Mew", + "item": ["Mewnium Z"], + "ability": ["Synchronize"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Nasty Plot"], ["Psychic"], ["Fire Blast", "Aura Sphere"], ["Rock Polish"]] + }, { + "species": "Mew", + "item": ["Mewnium Z"], + "ability": ["Synchronize"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Psychic"], ["Fire Blast", "Aura Sphere"], ["Soft-Boiled"]] + }] + }, + "mimikyu": { + "flags": {}, + "sets": [{ + "species": "Mimikyu", + "item": ["Life Orb", "Ghostium Z"], + "ability": ["Disguise"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Shadow Sneak"], ["Play Rough"], ["Shadow Claw"]] + }] + }, + "moltres": { + "flags": {}, + "sets": [{ + "species": "Moltres", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 208, "def": 60, "spe": 240}, + "nature": "Timid", + "moves": [["Roost"], ["Defog"], ["Flamethrower"], ["Substitute"]] + }] + }, + "ninetalesalola": { + "flags": {}, + "sets": [{ + "species": "Ninetales-Alola", + "item": ["Light Clay"], + "ability": ["Snow Warning"], + "evs": {"hp": 248, "spa": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Aurora Veil"], ["Freeze-Dry"], ["Hypnosis"], ["Hail"]] + }] + }, + "pelipper": { + "flags": {}, + "sets": [{ + "species": "Pelipper", + "item": ["Choice Specs"], + "ability": ["Drizzle"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Hurricane"], ["Surf", "Knock Off"], ["U-turn"]] + }, { + "species": "Pelipper", + "item": ["Damp Rock"], + "ability": ["Drizzle"], + "evs": {"hp": 248, "def": 32, "spd": 228}, + "nature": "Bold", + "moves": [["Scald"], ["U-turn"], ["Roost"], ["Hurricane"]] + }, { + "species": "Pelipper", + "item": ["Damp Rock"], + "ability": ["Drizzle"], + "evs": {"hp": 248, "def": 32, "spd": 228}, + "nature": "Bold", + "moves": [["Scald"], ["U-turn"], ["Roost"], ["Defog"]] + }] + }, + "pinsir": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Pinsir", + "item": ["Pinsirite"], + "ability": ["Hyper Cutter"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Return"], ["Earthquake", "Close Combat"], ["Quick Attack"]] + }] + }, + "pyukumuku": { + "flags": {}, + "sets": [{ + "species": "Pyukumuku", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Toxic"], ["Soak"], ["Recover"], ["Block"]] + }, { + "species": "Pyukumuku", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Spite"], ["Rest", "Taunt"], ["Recover"], ["Block"]] + }, { + "species": "Pyukumuku", + "item": ["Aguav Berry"], + "ability": ["Innards Out"], + "level": 96, + "evs": {"hp": 252}, + "ivs": {"atk": 0, "def": 0, "spd": 0}, + "nature": "Hasty", + "moves": [["Toxic"], ["Soak"], ["Rest"], ["Block"]] + }] + }, + "ribombee": { + "flags": {}, + "sets": [{ + "species": "Ribombee", + "item": ["Focus Sash"], + "ability": ["Shield Dust"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Moonblast"], ["Hidden Power Fire"], ["Stun Spore", "Quiver Dance"]] + }] + }, + "sableye": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Knock Off"], ["Will-O-Wisp"], ["Recover"], ["Protect"]] + }] + }, + "scizor": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"hp": 248, "def": 244, "spd": 16}, + "nature": "Impish", + "moves": [["Curse", "Swords Dance"], ["Bullet Punch"], ["Knock Off", "U-turn"], ["Roost"]] + }] + }, + "skarmory": { + "flags": {}, + "sets": [{ + "species": "Skarmory", + "item": ["Shed Shell", "Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Roost"], ["Whirlwind", "Defog"], ["Toxic", "Spikes"], ["Counter", "Brave Bird"]] + }] + }, + "stakataka": { + "flags": {}, + "sets": [{ + "species": "Stakataka", + "item": ["Rockium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Trick Room"], ["Gyro Ball"], ["Stone Edge"], ["Superpower"]] + }] + }, + "tangrowth": { + "flags": {}, + "sets": [{ + "species": "Tangrowth", + "item": ["Assault Vest"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 28, "spd": 228}, + "nature": "Sassy", + "moves": [["Giga Drain", "Leaf Storm", "Grass Knot"], ["Knock Off"], ["Hidden Power Ice", "Hidden Power Fire"], ["Earthquake"]] + }, { + "species": "Tangrowth", + "item": ["Leftovers", "Rocky Helmet"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 212, "spd": 48}, + "nature": "Relaxed", + "moves": [["Giga Drain"], ["Knock Off"], ["Sleep Powder"], ["Hidden Power Ice", "Hidden Power Fire"]] + }] + }, + "tapubulu": { + "flags": {}, + "sets": [{ + "species": "Tapu Bulu", + "item": ["Assault Vest"], + "ability": ["Grassy Surge"], + "evs": {"hp": 248, "atk": 28, "def": 36, "spd": 52, "spe": 144}, + "nature": "Impish", + "moves": [["Horn Leech"], ["Wood Hammer"], ["Superpower"], ["Nature's Madness", "Megahorn", "Stone Edge"]] + }, { + "species": "Tapu Bulu", + "item": ["Rockium Z", "Fightinium Z"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Horn Leech"], ["Superpower"], ["Stone Edge"]] + }, { + "species": "Tapu Bulu", + "item": ["Life Orb"], + "ability": ["Grassy Surge"], + "evs": {"hp": 224, "spd": 216, "spe": 68}, + "nature": "Careful", + "moves": [["Swords Dance"], ["Synthesis"], ["Horn Leech"], ["Superpower"]] + }, { + "species": "Tapu Bulu", + "item": ["Grassium Z"], + "ability": ["Grassy Surge"], + "evs": {"hp": 224, "spd": 216, "spe": 68}, + "nature": "Careful", + "moves": [["Swords Dance"], ["Synthesis"], ["Horn Leech"], ["Superpower"]] + }, { + "species": "Tapu Bulu", + "item": ["Choice Band"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Wood Hammer"], ["Horn Leech"], ["Superpower"], ["Zen Headbutt", "Stone Edge"]] + }] + }, + "tapufini": { + "flags": {}, + "sets": [{ + "species": "Tapu Fini", + "item": ["Leftovers"], + "ability": ["Misty Surge"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Taunt"], ["Nature's Madness"], ["Moonblast"], ["Scald", "Defog"]] + }] + }, + "tapukoko": { + "flags": {}, + "sets": [{ + "species": "Tapu Koko", + "item": ["Choice Specs"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Dazzling Gleam"], ["Volt Switch"], ["Hidden Power Ice", "Hidden Power Fire"]] + }, { + "species": "Tapu Koko", + "item": ["Light Clay"], + "ability": ["Electric Surge"], + "evs": {"hp": 248, "atk": 8, "spe": 252}, + "nature": "Jolly", + "moves": [["Taunt"], ["Reflect"], ["Light Screen"], ["U-turn"]] + }, { + "species": "Tapu Koko", + "item": ["Electrium Z"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Roost"], ["Hidden Power Ice"], ["U-turn"]] + }, { + "species": "Tapu Koko", + "item": ["Fairium Z"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Calm Mind"], ["Hidden Power Fire"], ["Dazzling Gleam"]] + }, { + "species": "Tapu Koko", + "item": ["Electrium Z"], + "ability": ["Electric Surge"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Wild Charge"], ["Hidden Power Ice"], ["Taunt"], ["U-turn"]] + }, { + "species": "Tapu Koko", + "item": ["Electrium Z", "Leftovers"], + "ability": ["Electric Surge"], + "evs": {"hp": 20, "spa": 252, "spd": 20, "spe": 216}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Defog"], ["Roost"], ["U-turn", "Hidden Power Ice"]] + }, { + "species": "Tapu Koko", + "item": ["Shuca Berry"], + "ability": ["Electric Surge"], + "evs": {"hp": 104, "def": 12, "spa": 176, "spe": 216}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Defog", "Roost"], ["Volt Switch"], ["Hidden Power Ice"]] + }] + }, + "tapulele": { + "flags": {}, + "sets": [{ + "species": "Tapu Lele", + "item": ["Psychium Z"], + "ability": ["Psychic Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psyshock"], ["Moonblast"], ["Calm Mind"], ["Hidden Power Fire", "Focus Blast"]] + }, { + "species": "Tapu Lele", + "item": ["Fightinium Z"], + "ability": ["Psychic Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic", "Psyshock"], ["Moonblast"], ["Taunt"], ["Focus Blast"]] + }, { + "species": "Tapu Lele", + "item": ["Choice Specs"], + "ability": ["Psychic Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Moonblast"], ["Psyshock"], ["Hidden Power Fire"]] + }, { + "species": "Tapu Lele", + "item": ["Choice Scarf"], + "ability": ["Psychic Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Moonblast"], ["Hidden Power Fire"], ["Focus Blast", "Thunderbolt"]] + }] + }, + "toxapex": { + "flags": {}, + "sets": [{ + "species": "Toxapex", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Scald"], ["Haze"], ["Recover"], ["Toxic", "Toxic Spikes"]] + }] + }, + "tyranitar": { + "flags": {}, + "sets": [{ + "species": "Tyranitar", + "item": ["Choice Scarf"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Crunch"], ["Pursuit"], ["Earthquake", "Superpower"]] + }, { + "species": "Tyranitar", + "item": ["Choice Band"], + "ability": ["Sand Stream"], + "evs": {"hp": 80, "atk": 252, "spe": 176}, + "nature": "Adamant", + "moves": [["Stone Edge"], ["Crunch"], ["Pursuit"], ["Earthquake", "Fire Punch"]] + }, { + "species": "Tyranitar", + "item": ["Tyranitarite"], + "ability": ["Sand Stream"], + "evs": {"hp": 168, "atk": 252, "spe": 88}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Pursuit"], ["Crunch"], ["Fire Punch", "Earthquake"]] + }, { + "species": "Tyranitar", + "item": ["Tyranitarite"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Stone Edge"], ["Ice Punch"], ["Fire Punch", "Earthquake"]] + }] + }, + "venusaur": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 248, "def": 88, "spd": 156, "spe": 16}, + "nature": "Calm", + "moves": [["Giga Drain", "Leech Seed"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]] + }, { + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 248, "def": 104, "spd": 156}, + "nature": "Sassy", + "moves": [["Giga Drain", "Leech Seed"], ["Sludge Bomb"], ["Synthesis"], ["Earthquake"]] + }] + }, + "victini": { + "flags": {}, + "sets": [{ + "species": "Victini", + "item": ["Choice Scarf"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Trick", "Final Gambit"]] + }, { + "species": "Victini", + "item": ["Choice Band"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Zen Headbutt", "Brick Break"]] + }, { + "species": "Victini", + "item": ["Normalium Z"], + "ability": ["Victory Star"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Celebrate"], ["Searing Shot"], ["Stored Power"], ["Focus Blast"]] + }] + }, + "volcarona": { + "flags": {}, + "sets": [{ + "species": "Volcarona", + "item": ["Psychium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Bug Buzz"], ["Psychic"]] + }, { + "species": "Volcarona", + "item": ["Buginium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Bug Buzz"], ["Hidden Power Ground"]] + }, { + "species": "Volcarona", + "item": ["Buginium Z"], + "ability": ["Swarm"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Fire Blast"], ["Quiver Dance"], ["Substitute"]] + }] + }, + "zapdos": { + "flags": {}, + "sets": [{ + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Discharge"], ["Hidden Power Ice"], ["Heat Wave"], ["Roost"]] + }, { + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 240, "spe": 20}, + "nature": "Bold", + "moves": [["Discharge"], ["Roost"], ["Heat Wave"], ["Defog"]] + }] + }, + "zeraora": { + "flags": {}, + "sets": [{ + "species": "Zeraora", + "item": ["Choice Band"], + "ability": ["Volt Absorb"], + "evs": {"atk": 252, "spa": 64, "spe": 192}, + "nature": "Hasty", + "moves": [["Plasma Fists"], ["Knock Off"], ["Fire Punch", "Close Combat"], ["Hidden Power Ice"]] + }, { + "species": "Zeraora", + "item": ["Zap Plate"], + "ability": ["Volt Absorb"], + "evs": {"atk": 252, "spa": 64, "spe": 192}, + "nature": "Hasty", + "moves": [["Plasma Fists"], ["Knock Off"], ["Volt Switch"], ["Hidden Power Ice"]] + }] + }, + "zygarde": { + "flags": {}, + "sets": [{ + "species": "Zygarde", + "item": ["Groundium Z"], + "ability": ["Aura Break"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Thousand Arrows"], ["Substitute", "Iron Tail"], ["Extreme Speed"], ["Dragon Dance"]] + }, { + "species": "Zygarde", + "item": ["Weakness Policy"], + "ability": ["Aura Break"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Thousand Arrows"], ["Substitute", "Iron Tail"], ["Extreme Speed"], ["Dragon Dance"]] + }, { + "species": "Zygarde", + "item": ["Leftovers"], + "ability": ["Aura Break"], + "evs": {"hp": 236, "spd": 160, "spe": 112}, + "nature": "Jolly", + "moves": [["Thousand Arrows"], ["Substitute"], ["Dragon Dance"], ["Protect"]] + }, { + "species": "Zygarde", + "item": ["Leftovers"], + "ability": ["Aura Break"], + "evs": {"hp": 236, "spd": 160, "spe": 112}, + "nature": "Jolly", + "moves": [["Thousand Arrows"], ["Substitute"], ["Coil"], ["Glare"]] + }, { + "species": "Zygarde", + "item": ["Leftovers"], + "ability": ["Aura Break"], + "evs": {"hp": 236, "atk": 68, "def": 4, "spd": 168, "spe": 32}, + "nature": "Careful", + "moves": [["Thousand Arrows"], ["Rest"], ["Sleep Talk"], ["Dragon Dance"]] + }, { + "species": "Zygarde", + "item": ["Choice Band"], + "ability": ["Aura Break"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Thousand Arrows"], ["Extreme Speed"], ["Iron Tail", "Earthquake"], ["Outrage", "Superpower"]] + }, { + "species": "Zygarde", + "item": ["Iapapa Berry"], + "ability": ["Aura Break"], + "evs": {"atk": 228, "spd": 68, "spe": 212}, + "nature": "Adamant", + "moves": [["Thousand Arrows"], ["Substitute", "Extreme Speed"], ["Dragon Dance"], ["Coil"]] + }] + }, + "rotomwash": { + "flags": {}, + "sets": [{ + "species": "Rotom-Wash", + "item": ["Iapapa Berry", "Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 204, "spe": 56}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Hydro Pump"], ["Volt Switch"], ["Will-O-Wisp", "Pain Split"], ["Defog"]] + }] + }, + "gliscor": { + "flags": {}, + "sets": [{ + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "spd": 152, "spe": 112}, + "nature": "Jolly", + "moves": [["Defog"], ["Earthquake"], ["Roost"], ["Knock Off", "Taunt"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 44, "spd": 68, "spe": 152}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Roost"], ["Facade", "Ice Fang"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 44, "spd": 108, "spe": 112}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Roost"], ["U-turn"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 44, "spd": 68, "spe": 152}, + "nature": "Jolly", + "moves": [["Taunt"], ["Earthquake"], ["Roost"], ["Knock Off"]] + }] + }, + "azumarill": { + "flags": {}, + "sets": [{ + "species": "Azumarill", + "item": ["Normalium Z", "Sitrus Berry"], + "ability": ["Huge Power"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough", "Waterfall", "Liquidation"], ["Knock Off"]] + }, { + "species": "Azumarill", + "item": ["Leftovers", "Iapapa Berry"], + "ability": ["Sap Sipper"], + "evs": {"hp": 252, "spd": 228, "spe": 28}, + "nature": "Calm", + "moves": [["Perish Song"], ["Whirlpool"], ["Protect"], ["Toxic", "Hidden Power Fire"]] + }] + }, + "camerupt": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Camerupt", + "item": ["Cameruptite"], + "ability": ["Magma Armor"], + "evs": {"hp": 128, "spa": 252, "spe": 128}, + "nature": "Modest", + "moves": [["Fire Blast"], ["Earth Power"], ["Toxic"], ["Rock Slide", "Stealth Rock"]] + }] + }, + "ditto": { + "flags": {}, + "sets": [{ + "species": "Ditto", + "item": ["Choice Scarf"], + "ability": ["Imposter"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "ivs": {"spe": 0}, + "nature": "Relaxed", + "moves": [["Transform"]] + }] + }, + "hippowdon": { + "flags": {}, + "sets": [{ + "species": "Hippowdon", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 112, "spd": 144}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Earthquake"], ["Slack Off"], ["Whirlwind"]] + }] + }, + "hydreigon": { + "flags": {}, + "sets": [{ + "species": "Hydreigon", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Flash Cannon", "U-turn"], ["Fire Blast"]] + }] + }, + "manectric": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Manectric", + "item": ["Manectite"], + "ability": ["Lightning Rod"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Thunderbolt"], ["Overheat", "Flamethrower"], ["Hidden Power Ice"]] + }] + }, + "shuckle": { + "flags": {}, + "sets": [{ + "species": "Shuckle", + "item": ["Mental Herb"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "def": 168, "spd": 88}, + "ivs": {"spe": 0}, + "nature": "Relaxed", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Encore"], ["Rock Tomb", "Infestation", "Toxic"]] + }] + }, + "thundurus": { + "flags": {}, + "sets": [{ + "species": "Thundurus", + "item": ["Life Orb"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]] + }, { + "species": "Thundurus", + "item": ["Life Orb"], + "ability": ["Defiant"], + "evs": {"atk": 68, "spa": 188, "spe": 252}, + "nature": "Naive", + "moves": [["Thunderbolt"], ["Knock Off"], ["Superpower"], ["Hidden Power Ice"]] + }] + }, + "volcanion": { + "flags": {}, + "sets": [{ + "species": "Volcanion", + "item": ["Leftovers", "Waterium Z"], + "ability": ["Water Absorb"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Steam Eruption"], ["Flamethrower"], ["Earth Power"]] + }] + }, + "altaria": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Altaria", + "item": ["Altarianite"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "def": 176, "spd":68, "spe": 16}, + "nature": "Impish", + "moves": [["Body Slam"], ["Defog"], ["Earthquake"], ["Roost"]] + }] + }, + "crawdaunt": { + "flags": {}, + "sets": [{ + "species": "Crawdaunt", + "item": ["Life Orb"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Crabhammer"], ["Aqua Jet"], ["Swords Dance"]] + }, { + "species": "Crawdaunt", + "item": ["Choice Band"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Crabhammer"], ["Aqua Jet"], ["Superpower", "Crunch"]] + }] + }, + "gallade": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Zen Headbutt"], ["Knock Off"]] + }] + }, + "mukalola": { + "flags": {}, + "sets": [{ + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 248, "atk": 136, "def": 28, "spd": 92, "spe": 4}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Pursuit"], ["Poison Jab"], ["Fire Punch", "Rock Slide"]] + }] + }, + "nidoking": { + "flags": {}, + "sets": [{ + "species": "Nidoking", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Substitute", "Flamethrower"]] + }] + }, + "slowbro": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 212, "spe": 44}, + "nature": "Bold", + "moves": [["Scald"], ["Ice Beam"], ["Psyshock"], ["Slack Off"]] + }] + }, + "thundurustherian": { + "flags": {}, + "sets": [{ + "species": "Thundurus-Therian", + "item": ["Electrium Z"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Agility"], ["Thunderbolt"], ["Hidden Power Ice"], ["Nasty Plot", "Focus Blast"]] + }] + }, + "aerodactyl": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Aerodactyl", + "item": ["Aerodactylite"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Aerial Ace"], ["Ice Fang"], ["Fire Fang", "Earthquake"]] + }] + }, + "azelf": { + "flags": {}, + "sets": [{ + "species": "Azelf", + "item": ["Focus Sash"], + "ability": ["Levitate"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Taunt"], ["Fire Blast"], ["Hidden Power Ice"]] + }, { + "species": "Azelf", + "item": ["Focus Sash"], + "ability": ["Levitate"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Stealth Rock"], ["Taunt"], ["Fire Blast"], ["Explosion"]] + }] + }, + "scolipede": { + "flags": {}, + "sets": [{ + "species": "Scolipede", + "item": ["Waterium Z"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Megahorn"], ["Aqua Tail"], ["Earthquake"]] + }] + }, + "hoopaunbound": { + "flags": {}, + "sets": [{ + "species": "Hoopa-Unbound", + "item": ["Fightinium Z", "Darkinium Z"], + "ability": ["Magician"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Dark Pulse"], ["Psychic", "Psyshock"], ["Focus Blast"]] + }, { + "species": "Hoopa-Unbound", + "item": ["Choice Band"], + "ability": ["Magician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Hyperspace Fury"], ["Gunk Shot"], ["Fire Punch"], ["Zen Headbutt", "Drain Punch"]] + }, { + "species": "Hoopa-Unbound", + "item": ["Choice Specs"], + "ability": ["Magician"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Psyshock"], ["Focus Blast"], ["Trick", "Thunderbolt"]] + }] + }, + "mantine": { + "flags": {}, + "sets": [{ + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "def": 52, "spd": 208}, + "nature": "Calm", + "moves": [["Roost"], ["Scald"], ["Defog"], ["Toxic", "Haze"]] + }] + }, + "weavile": { + "flags": {}, + "sets": [{ + "species": "Weavile", + "item": ["Choice Band", "Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Knock Off"], ["Ice Shard"], ["Pursuit"]] + }] + }, + "alomomola": { + "flags": {}, + "sets": [{ + "species": "Alomomola", + "item": ["Leftovers"], + "ability": ["Regenerator"], + "evs": {"hp": 40, "def": 216, "spd": 252}, + "nature": "Bold", + "moves": [["Scald"], ["Toxic", "Knock Off"], ["Wish"], ["Protect"]] + }] + }, + "gastrodon": { + "flags": {}, + "sets": [{ + "species": "Gastrodon", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Sassy", + "moves": [["Scald"], ["Recover"], ["Toxic"], ["Earthquake"]] + }] + }, + "gyarados": { + "flags": {}, + "sets": [{ + "species": "Gyarados", + "item": ["Flyinium Z"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Bounce"], ["Waterfall"], ["Earthquake", "Taunt"]] + }, { + "species": "Gyarados", + "item": ["Gyaradosite"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Crunch"], ["Waterfall", "Ice Fang"], ["Earthquake", "Taunt"]] + }] + }, + "latias": { + "flags": {}, + "sets": [{ + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Recover"], ["Stored Power"], ["Substitute", "Reflect Type", "Thunderbolt", "Psyshock"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Surf"], ["Hidden Power Fire"], ["Roost"]] + }, { + "species": "Latias", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Healing Wish"], ["Trick", "Defog"]] + }] + }, + "reuniclus": { + "flags": {}, + "sets": [{ + "species": "Reuniclus", + "item": ["Leftovers"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 212, "spe": 44}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Psyshock"], ["Shadow Ball", "Focus Blast"], ["Recover"]] + }, { + "species": "Reuniclus", + "item": ["Leftovers"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 212, "spe": 44}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Psychic", "Psyshock"], ["Acid Armor"], ["Recover"]] + }] + }, + "suicune": { + "flags": {}, + "sets": [{ + "species": "Suicune", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 16, "spe": 240}, + "nature": "Timid", + "moves": [["Scald"], ["Substitute"], ["Calm Mind"], ["Protect"]] + }] + }, + "heracross": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Heracross", + "item": ["Heracronite"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Close Combat"], ["Pin Missile", "Substitute", "Bullet Seed"], ["Rock Blast"], ["Swords Dance"]] + }, { + "species": "Heracross", + "item": ["Heracronite"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Pin Missile", "Substitute", "Bullet Seed"], ["Rock Blast"], ["Swords Dance"]] + }] + }, + "mamoswine": { + "flags": {}, + "sets": [{ + "species": "Mamoswine", + "item": ["Life Orb"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Ice Shard"], ["Icicle Crash", "Icicle Spear"], ["Knock Off", "Stealth Rock"]] + }] + }, + "quagsire": { + "flags": {}, + "sets": [{ + "species": "Quagsire", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Recover"], ["Toxic", "Curse"]] + }] + }, + "jirachi": { + "flags": {}, + "sets": [{ + "species": "Jirachi", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 248, "spd": 196, "spe": 64}, + "nature": "Careful", + "moves": [["Wish"], ["Iron Head"], ["U-turn", "Body Slam"], ["Protect"]] + }, { + "species": "Jirachi", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 248, "spd": 108, "spe": 152}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Iron Head"], ["U-turn"], ["Healing Wish"]] + }, { + "species": "Jirachi", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["U-turn"], ["Healing Wish"], ["Fire Punch", "Heart Stamp"]] + }] + }, + "serperior": { + "flags": {}, + "sets": [{ + "species": "Serperior", + "item": ["Leftovers"], + "ability": ["Contrary"], + "evs": {"hp": 56, "spa": 200, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Fire"], ["Substitute"], ["Leech Seed"]] + }] + }, + "terrakion": { + "flags": {}, + "sets": [{ + "species": "Terrakion", + "item": ["Rockium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Stone Edge"], ["Close Combat"], ["Stealth Rock"]] + }, { + "species": "Terrakion", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Close Combat"], ["Rock Slide"], ["Toxic", "Earthquake"]] + }] + }, + "tornadustherian": { + "flags": {}, + "sets": [{ + "species": "Tornadus-Therian", + "item": ["Flyinium Z"], + "ability": ["Regenerator"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Defog"], ["Superpower", "U-turn"], ["Knock Off"]] + }, { + "species": "Tornadus-Therian", + "item": ["Rocky Helmet"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Defog"], ["Knock Off"], ["U-turn"]] + }] + }, + "araquanid": { + "flags": {}, + "sets": [{ + "species": "Araquanid", + "item": ["Focus Sash"], + "ability": ["Water Bubble"], + "evs": {"hp": 216, "atk": 252, "spa": 40}, + "nature": "Brave", + "moves": [["Sticky Web"], ["Liquidation"], ["Magic Coat"], ["Hidden Power Fire"]] + }, { + "species": "Araquanid", + "item": ["Focus Sash"], + "ability": ["Water Bubble"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Sticky Web"], ["Liquidation"], ["Magic Coat"], ["Toxic", "Mirror Coat"]] + }] + } + }, + "UU": { + "scizor": { + "flags": {}, + "sets": [{ + "species": "Scizor", + "item": ["Choice Band"], + "ability": ["Technician"], + "evs": {"hp": 164, "atk": 252, "spe": 92}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["U-turn"], ["Superpower"], ["Knock Off", "Pursuit"]] + }, { + "species": "Scizor", + "item": ["Iron Plate", "Life Orb"], + "ability": ["Technician"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Bullet Punch"], ["Bug Bite"], ["Superpower", "Knock Off"]] + }, { + "species": "Scizor", + "item": ["Fightinium Z", "Iron Plate"], + "ability": ["Technician"], + "evs": {"hp": 164, "atk": 252, "spe": 92}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Bullet Punch"], ["Superpower"], ["Roost", "Knock Off"]] + }, { + "species": "Scizor", + "item": ["Life Orb"], + "ability": ["Technician"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Bullet Punch"], ["Quick Attack"], ["Superpower"]] + }, { + "species": "Scizor", + "item": ["Leftovers"], + "ability": ["Technician"], + "evs": {"hp": 248, "def": 124, "spd": 136}, + "nature": "Impish", + "moves": [["Swords Dance", "Defog"], ["Bullet Punch"], ["U-turn"], ["Roost"]] + }] + }, + "aerodactyl": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Aerodactyl", + "item": ["Aerodactylite"], + "ability": ["Unnerve"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Wing Attack", "Aqua Tail"], ["Earthquake", "Fire Fang"], ["Pursuit", "Roost", "Hone Claws"]] + }] + }, + "altaria": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Altaria", + "item": ["Altarianite"], + "ability": ["Natural Cure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Return", "Facade"], ["Earthquake"], ["Roost"]] + }, { + "species": "Altaria", + "item": ["Altarianite"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Hyper Voice"], ["Roost"], ["Heal Bell", "Flamethrower"], ["Defog"]] + }, { + "species": "Altaria", + "item": ["Altarianite"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Hyper Voice"], ["Fire Blast"], ["Earthquake", "Heal Bell", "Defog"], ["Roost"]] + }] + }, + "bisharp": { + "flags": {}, + "sets": [{ + "species": "Bisharp", + "item": ["Life Orb", "Darkinium Z", "Dread Plate"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": ["Jolly", "Adamant"], + "moves": [["Knock Off"], ["Sucker Punch"], ["Swords Dance"], ["Iron Head"]] + }] + }, + "hydreigon": { + "flags": {}, + "sets": [{ + "species": "Hydreigon", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["U-turn"], ["Fire Blast", "Defog"]] + }, { + "species": "Hydreigon", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Flash Cannon", "U-turn"], ["Fire Blast"]] + }, { + "species": "Hydreigon", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Roost"], ["Fire Blast", "Flash Cannon"]] + }, { + "species": "Hydreigon", + "item": ["Life Orb", "Dragonium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Taunt"], ["Draco Meteor"], ["Roost"], ["Dark Pulse"]] + }, { + "species": "Hydreigon", + "item": ["Dragonium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Draco Meteor"], ["Roost"], ["Dark Pulse"]] + }, { + "species": "Hydreigon", + "item": ["Dread Plate"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Fire Blast"], ["Roost"], ["Dark Pulse"]] + }, { + "species": "Hydreigon", + "item": ["Fightinium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Defog"], ["Focus Blast"], ["Roost"], ["Dark Pulse"]] + }] + }, + "latias": { + "flags": {}, + "sets": [{ + "species": "Latias", + "item": ["Psychium Z", "Dragonium Z"], + "ability": ["Levitate"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Draco Meteor"], ["Psychic", "Psyshock"], ["Roost"]] + }, { + "species": "Latias", + "item": ["Electrium Z"], + "ability": ["Levitate"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Draco Meteor"], ["Psyshock", "Roost"], ["Thunder"]] + }, { + "species": "Latias", + "item": ["Electrium Z"], + "ability": ["Levitate"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Thunderbolt", "Thunder"], ["Ice Beam"], ["Roost"]] + }, { + "species": "Latias", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Psychic", "Psyshock"], ["Draco Meteor"], ["Hidden Power Fire", "Roost"]] + }, { + "species": "Latias", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Draco Meteor"], ["Hidden Power Fire", "Thunderbolt"], ["Roost"]] + }, { + "species": "Latias", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Draco Meteor"], ["Trick", "Defog"], ["Hidden Power Fire", "Healing Wish"]] + }] + }, + "manectric": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Manectric", + "item": ["Manectite"], + "ability": ["Lightning Rod"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Overheat", "Flamethrower"], ["Thunderbolt"], ["Hidden Power Ice", "Hidden Power Grass", "Toxic"]] + }] + }, + "amoonguss": { + "flags": {}, + "sets": [{ + "species": "Amoonguss", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 184, "spd": 72}, + "nature": "Calm", + "moves": [["Spore"], ["Giga Drain"], ["Hidden Power Fire"], ["Clear Smog"]] + }] + }, + "cobalion": { + "flags": {}, + "sets": [{ + "species": "Cobalion", + "item": ["Fightinium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Iron Head"], ["Rock Polish", "Stealth Rock"]] + }, { + "species": "Cobalion", + "item": ["Steelium Z", "Shuca Berry"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock", "Rock Polish"], ["Close Combat"], ["Iron Head"], ["Swords Dance"]] + }] + }, + "infernape": { + "flags": {}, + "sets": [{ + "species": "Infernape", + "item": ["Choice Scarf"], + "ability": ["Blaze"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["U-turn"], ["Close Combat"], ["Gunk Shot", "Stone Edge"]] + }, { + "species": "Infernape", + "item": ["Choice Band"], + "ability": ["Iron Fist"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["U-turn"], ["Close Combat"], ["Mach Punch"]] + }, { + "species": "Infernape", + "item": ["Fightinium Z"], + "ability": ["Blaze"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Fire Blast"], ["Vacuum Wave"], ["Focus Blast"]] + }, { + "species": "Infernape", + "item": ["Life Orb"], + "ability": ["Blaze"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Fire Blast"], ["Vacuum Wave", "Grass Knot"], ["Focus Blast"]] + }, { + "species": "Infernape", + "item": ["Life Orb"], + "ability": ["Blaze"], + "evs": {"atk": 168, "spa": 88, "spe": 252}, + "nature": "Naive", + "moves": [["Overheat", "Fire Blast"], ["Close Combat"], ["Grass Knot"], ["Gunk Shot"]] + }, { + "species": "Infernape", + "item": ["Fightinium Z", "Life Orb"], + "ability": ["Iron Fist"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Flare Blitz"], ["Close Combat"], ["Mach Punch"]] + }, { + "species": "Infernape", + "item": ["Life Orb"], + "ability": ["Blaze"], + "evs": {"atk": 160, "spa": 88, "spe": 252}, + "nature": "Naive", + "moves": [["Overheat", "Fire Blast"], ["Close Combat"], ["Slack Off"], ["Grass Knot", "Gunk Shot"]] + }] + }, + "mamoswine": { + "flags": {}, + "sets": [{ + "species": "Mamoswine", + "item": ["Life Orb"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Ice Shard"], ["Earthquake"], ["Icicle Crash"], ["Knock Off", "Stealth Rock"]] + }, { + "species": "Mamoswine", + "item": ["Life Orb"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Naughty", + "moves": [["Ice Shard"], ["Earthquake"], ["Icicle Crash"], ["Freeze-Dry"]] + }] + }, + "mukalola": { + "flags": {}, + "sets": [{ + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 4, "atk": 252, "spd": 252}, + "nature": "Adamant", + "moves": [["Pursuit"], ["Knock Off"], ["Gunk Shot", "Poison Jab"], ["Fire Punch", "Shadow Sneak"]] + }] + }, + "primarina": { + "flags": {}, + "sets": [{ + "species": "Primarina", + "item": ["Choice Specs"], + "ability": ["Torrent"], + "evs": {"hp": 92, "spa": 252, "spe": 164}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Moonblast"], ["Hydro Pump"], ["Psychic"], ["Sparkling Aria"]] + }, { + "species": "Primarina", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Moonblast"], ["Scald"], ["Rest"], ["Sleep Talk"]] + }] + }, + "stakataka": { + "flags": {}, + "sets": [{ + "species": "Stakataka", + "item": ["Rockium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Trick Room"], ["Gyro Ball"], ["Stone Edge"], ["Earthquake"]] + }, { + "species": "Stakataka", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Gyro Ball"], ["Stone Edge", "Rock Blast"], ["Protect"]] + }] + }, + "suicune": { + "flags": {}, + "sets": [{ + "species": "Suicune", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Protect"], ["Scald"], ["Substitute"]] + }, { + "species": "Suicune", + "item": ["Leftovers", "Waterium Z"], + "ability": ["Pressure"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Rest"], ["Sleep Talk"], ["Scald"]] + }] + }, + "zeraora": { + "flags": {}, + "sets": [{ + "species": "Zeraora", + "item": ["Expert Belt", "Life Orb", "Magnet", "Shuca Berry"], + "ability": ["Volt Absorb"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Plasma Fists"], ["Close Combat"], ["Grass Knot"], ["Knock Off", "Volt Switch"]] + }] + }, + "aggron": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Aggron", + "item": ["Aggronite"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Heavy Slam"], ["Earthquake"], ["Stealth Rock"], ["Toxic", "Fire Punch", "Curse"]] + }] + }, + "alomomola": { + "flags": {}, + "sets": [{ + "species": "Alomomola", + "item": ["Leftovers", "Rocky Helmet"], + "ability": ["Regenerator"], + "evs": {"hp": 40, "def": 252, "spd": 216}, + "nature": "Bold", + "moves": [["Wish"], ["Protect"], ["Toxic"], ["Scald", "Knock Off"]] + }] + }, + "beedrill": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Beedrill", + "item": ["Beedrillite"], + "ability": ["Swarm"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["U-turn"], ["Poison Jab"], ["Drill Run"], ["Knock Off", "Pursuit", "Toxic Spikes"]] + }] + }, + "blissey": { + "flags": {}, + "sets": [{ + "species": "Blissey", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Soft-Boiled"], ["Seismic Toss"], ["Toxic"], ["Heal Bell", "Stealth Rock"]] + }] + }, + "froslass": { + "flags": {}, + "sets": [{ + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Spikes"], ["Taunt"], ["Icy Wind"], ["Destiny Bond", "Will-O-Wisp"]] + }] + }, + "heracross": { + "flags": {}, + "sets": [{ + "species": "Heracross", + "item": ["Flame Orb"], + "ability": ["Guts"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Knock Off"], ["Facade"]] + }] + }, + "klefki": { + "flags": {}, + "sets": [{ + "species": "Klefki", + "item": ["Leftovers"], + "ability": ["Prankster"], + "evs": {"hp": 248, "spd": 252, "spe": 8}, + "nature": "Careful", + "moves": [["Spikes"], ["Thunder Wave"], ["Toxic", "Magnet Rise", "Reflect"], ["Play Rough"]] + }, { + "species": "Klefki", + "item": ["Leftovers"], + "ability": ["Prankster"], + "evs": {"hp": 248, "spd": 252, "spe": 8}, + "nature": "Calm", + "moves": [["Spikes"], ["Thunder Wave"], ["Toxic", "Magnet Rise", "Reflect"], ["Dazzling Gleam", "Foul Play"]] + }] + }, + "pidgeot": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Pidgeot", + "item": ["Pidgeotite"], + "ability": ["Big Pecks"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Heat Wave"], ["U-turn", "Work Up", "Hidden Power Ground"], ["Roost"]] + }] + }, + "sharpedo": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sharpedo", + "item": ["Sharpedonite"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Crunch"], ["Psychic Fangs", "Waterfall", "Earthquake"], ["Ice Fang"], ["Protect"]] + }] + }, + "starmie": { + "flags": {}, + "sets": [{ + "species": "Starmie", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Scald"], ["Toxic", "Reflect Type"], ["Recover"], ["Rapid Spin"]] + }, { + "species": "Starmie", + "item": ["Life Orb", "Waterium Z"], + "ability": ["Analytic"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Psyshock", "Thunderbolt"], ["Rapid Spin"]] + }, { + "species": "Starmie", + "item": ["Life Orb", "Waterium Z"], + "ability": ["Analytic"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Psyshock"], ["Thunderbolt"]] + }] + }, + "swampert": { + "flags": {}, + "sets": [{ + "species": "Swampert", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Earthquake"], ["Scald"], ["Roar", "Toxic", "Counter"]] + }] + }, + "togekiss": { + "flags": {}, + "sets": [{ + "species": "Togekiss", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Heal Bell", "Thunder Wave"], ["Air Slash"], ["Roost"]] + }, { + "species": "Togekiss", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Air Slash"], ["Heal Bell"], ["Roost"], ["Thunder Wave", "Defog"]] + }, { + "species": "Togekiss", + "item": ["Choice Specs", "Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Air Slash"], ["Dazzling Gleam"], ["Flamethrower", "Fire Blast"], ["Trick", "Aura Sphere"]] + }, { + "species": "Togekiss", + "item": ["Fightinium Z"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Aura Sphere"], ["Air Slash"], ["Roost"]] + }, { + "species": "Togekiss", + "item": ["Babiri Berry"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Flamethrower"], ["Air Slash"], ["Roost"]] + }] + }, + "azelf": { + "flags": {}, + "sets": [{ + "species": "Azelf", + "item": ["Focus Sash"], + "ability": ["Levitate"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Stealth Rock"], ["Explosion"], ["Taunt"], ["Fire Blast", "Knock Off"]] + }] + }, + "doublade": { + "flags": {}, + "sets": [{ + "species": "Doublade", + "item": ["Eviolite"], + "ability": ["No Guard"], + "evs": {"hp": 240, "atk": 252, "spd": 16}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Swords Dance"], ["Gyro Ball"], ["Shadow Claw", "Sacred Sword"], ["Shadow Sneak"]] + }, { + "species": "Doublade", + "item": ["Eviolite"], + "ability": ["No Guard"], + "evs": {"hp": 240, "atk": 252, "spd": 16}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Iron Head"], ["Shadow Claw", "Sacred Sword"], ["Shadow Sneak"]] + }] + }, + "crobat": { + "flags": {}, + "sets": [{ + "species": "Crobat", + "item": ["Flyinium Z", "Sky Plate"], + "ability": ["Infiltrator"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Taunt"], ["Roost"], ["Super Fang", "U-turn"]] + }, { + "species": "Crobat", + "item": ["Flyinium Z", "Sky Plate"], + "ability": ["Infiltrator"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Defog"], ["Roost"], ["U-turn"]] + }, { + "species": "Crobat", + "item": ["Black Sludge"], + "ability": ["Infiltrator"], + "evs": {"hp": 248, "atk": 36, "spe": 224}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["U-turn", "Toxic"], ["Roost"], ["Taunt", "Defog"]] + }] + }, + "empoleon": { + "flags": {}, + "sets": [{ + "species": "Empoleon", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "def": 76, "spd": 180}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Scald"], ["Defog", "Stealth Rock"], ["Toxic", "Knock Off"], ["Roar"]] + }, { + "species": "Empoleon", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "def": 76, "spd": 180}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Scald"], ["Defog", "Stealth Rock"], ["Toxic"], ["Protect"]] + }] + }, + "houndoom": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Houndoom", + "item": ["Houndoominite"], + "ability": ["Flash Fire"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Fire Blast"], ["Dark Pulse"], ["Sludge Bomb", "Taunt", "Flame Charge"]] + }] + }, + "hippowdon": { + "flags": {}, + "sets": [{ + "species": "Hippowdon", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 80, "spd": 176}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Earthquake"], ["Slack Off"], ["Toxic", "Whirlwind"]] + }] + }, + "krookodile": { + "flags": {}, + "sets": [{ + "species": "Krookodile", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Earthquake"], ["Pursuit"], ["Stone Edge", "Superpower"]] + }, { + "species": "Krookodile", + "item": ["Rocky Helmet", "Groundium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Knock Off"], ["Earthquake"], ["Taunt"]] + }] + }, + "kyurem": { + "flags": {}, + "sets": [{ + "species": "Kyurem", + "item": ["Choice Specs"], + "ability": ["Pressure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Ice Beam"], ["Hidden Power Fire", "Dragon Pulse"], ["Earth Power"]] + }, { + "species": "Kyurem", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 56, "spa": 200, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Substitute"], ["Earth Power"], ["Roost"]] + }] + }, + "moltres": { + "flags": {}, + "sets": [{ + "species": "Moltres", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 36, "spe": 224}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Roost"], ["Defog"], ["Flamethrower"], ["Toxic", "Will-O-Wisp"]] + }, { + "species": "Moltres", + "item": ["Flyinium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Fire Blast"], ["Roost"], ["U-turn", "Agility", "Defog"]] + }, { + "species": "Moltres", + "item": ["Choice Specs"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Fire Blast"], ["Flamethrower"], ["U-turn", "Air Slash"]] + }] + }, + "nidoking": { + "flags": {}, + "sets": [{ + "species": "Nidoking", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Earth Power"], ["Ice Beam"], ["Substitute", "Stealth Rock", "Taunt"]] + }] + }, + "sceptile": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sceptile", + "item": ["Sceptilite"], + "ability": ["Overgrow"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Giga Drain"], ["Focus Blast", "Hidden Power Fire", "Earthquake"]] + }, { + "species": "Sceptile", + "item": ["Sceptilite"], + "ability": ["Overgrow"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Focus Blast"], ["Hidden Power Fire"]] + }] + }, + "sylveon": { + "flags": {}, + "sets": [{ + "species": "Sylveon", + "item": ["Leftovers"], + "ability": ["Pixilate"], + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Hyper Voice"], ["Wish"], ["Protect"], ["Heal Bell"]] + }] + }, + "tentacruel": { + "flags": {}, + "sets": [{ + "species": "Tentacruel", + "item": ["Black Sludge", "Icium Z"], + "ability": ["Liquid Ooze"], + "evs": {"hp": 252, "def": 112, "spe": 144}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Rapid Spin"], ["Scald"], ["Haze"], ["Toxic", "Toxic Spikes", "Sludge Bomb", "Knock Off"]] + }] + }, + "terrakion": { + "flags": {}, + "sets": [{ + "species": "Terrakion", + "item": ["Rockium Z", "Life Orb", "Fightinium Z"], + "ability": ["Justified"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Close Combat"], ["Swords Dance"], ["Earthquake", "Substitute", "Rock Polish"]] + }, { + "species": "Terrakion", + "item": ["Choice Band"], + "ability": ["Justified"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Stone Edge"], ["Rock Slide", "Quick Attack"], ["Earthquake"]] + }, { + "species": "Terrakion", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Stone Edge"], ["Rock Slide", "Toxic"], ["Earthquake"]] + }] + }, + "blastoise": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Blastoise", + "item": ["Blastoisinite"], + "ability": ["Rain Dish"], + "evs": {"hp": 104, "spa": 252, "spe": 152}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Water Pulse", "Hydro Pump"], ["Dark Pulse"], ["Aura Sphere", "Ice Beam"], ["Rapid Spin"]] + }] + }, + "celebi": { + "flags": {}, + "sets": [{ + "species": "Celebi", + "item": ["Groundium Z"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Giga Drain"], ["Psychic"], ["Earth Power"]] + }, { + "species": "Celebi", + "item": ["Colbur Berry", "Leftovers"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Giga Drain"], ["Psychic"], ["Dazzling Gleam", "Hidden Power Fire"]] + }, { + "species": "Celebi", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 252, "def": 236, "spe": 20}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Nasty Plot"], ["Giga Drain"], ["Psychic"], ["Hidden Power Fire"]] + }, { + "species": "Celebi", + "item": ["Psychium Z"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Giga Drain"], ["Psychic"], ["Dazzling Gleam"]] + }] + }, + "chandelure": { + "flags": {}, + "sets": [{ + "species": "Chandelure", + "item": ["Choice Scarf"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Shadow Ball"], ["Memento", "Energy Ball"], ["Trick"]] + }, { + "species": "Chandelure", + "item": ["Ghostium Z", "Leftovers"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast", "Flamethrower"], ["Shadow Ball"], ["Calm Mind"], ["Substitute"]] + }, { + "species": "Chandelure", + "item": ["Choice Specs"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Shadow Ball"], ["Memento"], ["Trick"]] + }] + }, + "crawdaunt": { + "flags": {}, + "sets": [{ + "species": "Crawdaunt", + "item": ["Waterium Z", "Life Orb"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Crabhammer"], ["Knock Off"], ["Aqua Jet"]] + }, { + "species": "Crawdaunt", + "item": ["Choice Band"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Superpower", "Crunch"], ["Crabhammer"], ["Knock Off"], ["Aqua Jet"]] + }] + }, + "jellicent": { + "flags": {}, + "sets": [{ + "species": "Jellicent", + "item": ["Leftovers", "Colbur Berry"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "def": 176, "spe": 84}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald", "Hex"], ["Taunt"], ["Will-O-Wisp"], ["Recover"]] + }] + }, + "lucario": { + "flags": {}, + "sets": [{ + "species": "Lucario", + "item": ["Life Orb"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Extreme Speed"], ["Meteor Mash", "Bullet Punch"]] + }, { + "species": "Lucario", + "item": ["Life Orb"], + "ability": ["Inner Focus"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Aura Sphere", "Focus Blast"], ["Flash Cannon"], ["Vacuum Wave", "Dark Pulse"]] + }] + }, + "magneton": { + "flags": {}, + "sets": [{ + "species": "Magneton", + "item": ["Choice Scarf"], + "ability": ["Magnet Pull"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Fire"]] + }, { + "species": "Magneton", + "item": ["Choice Specs"], + "ability": ["Magnet Pull"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Fire", "Hidden Power Grass"]] + }] + }, + "mantine": { + "flags": {}, + "sets": [{ + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Roost"], ["Toxic", "Haze"], ["Defog"]] + }] + }, + "marowakalola": { + "flags": {}, + "sets": [{ + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Lightning Rod"], + "evs": {"hp": 52, "atk": 252, "spe": 204}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Flare Blitz", "Fire Punch"], ["Shadow Bone"], ["Low Kick", "Knock Off", "Swords Dance"]] + }] + }, + "nihilego": { + "flags": {}, + "sets": [{ + "species": "Nihilego", + "item": ["Electrium Z"], + "ability": ["Beast Boost"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Thunder"], ["Grass Knot"], ["Stealth Rock", "Toxic Spikes"]] + }, { + "species": "Nihilego", + "item": ["Life Orb"], + "ability": ["Beast Boost"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Thunderbolt"], ["Grass Knot"], ["Stealth Rock", "Toxic Spikes"]] + }, { + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Power Gem"], ["Grass Knot"], ["Thunderbolt"]] + }] + }, + "raikou": { + "flags": {}, + "sets": [{ + "species": "Raikou", + "item": ["Ghostium Z"], + "ability": ["Pressure"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Thunderbolt"], ["Hidden Power Grass"], ["Shadow Ball"]] + }, { + "species": "Raikou", + "item": ["Normalium Z"], + "ability": ["Pressure"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice", "Hidden Power Grass"], ["Hyper Beam"]] + }, { + "species": "Raikou", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice"], ["Substitute"]] + }] + }, + "rotommow": { + "flags": {}, + "sets": [{ + "species": "Rotom-Mow", + "item": ["Grassium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Leaf Storm"], ["Defog", "Hidden Power Fire"]] + }, { + "species": "Rotom-Mow", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Leaf Storm"], ["Trick", "Hidden Power Fire"]] + }] + }, + "salazzle": { + "flags": {}, + "sets": [{ + "species": "Salazzle", + "item": ["Poisonium Z"], + "ability": ["Oblivious"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Sludge Wave"], ["Fire Blast"], ["Hidden Power Grass"]] + }, { + "species": "Salazzle", + "item": ["Black Sludge"], + "ability": ["Corrosion"], + "evs": {"hp": 252, "spa": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Toxic"], ["Flamethrower"], ["Protect"], ["Substitute", "Taunt"]] + }] + }, + "steelix": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Steelix", + "item": ["Steelixite"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "atk": 208, "spd": 48}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Stealth Rock"], ["Earthquake"], ["Gyro Ball"], ["Curse"]] + }] + }, + "quagsire": { + "flags": {}, + "sets": [{ + "species": "Quagsire", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Recover"], ["Toxic"]] + }] + }, + "volcanion": { + "flags": {}, + "sets": [{ + "species": "Volcanion", + "item": ["Choice Specs"], + "ability": ["Water Absorb"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Steam Eruption"], ["Fire Blast", "Flamethrower"], ["Earth Power", "Hidden Power Electric"], ["Sludge Wave", "Sludge Bomb"]] + }, { + "species": "Volcanion", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "spa": 44, "spe": 216}, + "nature": "Modest", + "moves": [["Steam Eruption"], ["Flamethrower"], ["Toxic"], ["Substitute", "Protect"]] + }] + }, + "absol": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Absol", + "item": ["Absolite"], + "ability": ["Justified"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Knock Off"], ["Pursuit"], ["Fire Blast", "Superpower"], ["Sucker Punch", "Iron Tail"]] + }] + }, + "bewear": { + "flags": {}, + "sets": [{ + "species": "Bewear", + "item": ["Choice Band"], + "ability": ["Fluffy"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Return"], ["Superpower"], ["Shadow Claw", "Earthquake"], ["Facade"]] + }, { + "species": "Bewear", + "item": ["Normalium Z"], + "ability": ["Fluffy"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Drain Punch"], ["Double-Edge"], ["Earthquake"]] + }] + }, + "cofagrigus": { + "flags": {}, + "sets": [{ + "species": "Cofagrigus", + "item": ["Ghostium Z"], + "ability": ["Mummy"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "nature": "Quiet", + "moves": [["Shadow Ball"], ["Hidden Power Fighting"], ["Trick Room"], ["Nasty Plot"]], + "ivs": {"atk": 0, "spe": 0} + }] + }, + "florges": { + "flags": {}, + "sets": [{ + "species": "Florges", + "item": ["Leftovers"], + "ability": ["Flower Veil"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Moonblast"], ["Synthesis"], ["Wish"], ["Hidden Power Fire", "Defog", "Aromatherapy"]] + }] + }, + "haxorus": { + "flags": {}, + "sets": [{ + "species": "Haxorus", + "item": ["Dragonium Z", "Lum Berry"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance", "Swords Dance"], ["Outrage"], ["Earthquake"], ["Poison Jab"]] + }] + }, + "kommoo": { + "flags": {}, + "sets": [{ + "species": "Kommo-o", + "item": ["Dragonium Z", "Life Orb"], + "ability": ["Soundproof", "Bulletproof"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Clanging Scales"], ["Close Combat"], ["Flamethrower"], ["Stealth Rock", "Poison Jab", "Taunt"]] + }, { + "species": "Kommo-o", + "item": ["Dragonium Z"], + "ability": ["Soundproof", "Bulletproof"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Stealth Rock"], ["Close Combat"], ["Outrage"]] + }, { + "species": "Kommo-o", + "item": ["Dragonium Z", "Fightinium Z"], + "ability": ["Soundproof", "Bulletproof"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Poison Jab", "Ice Punch"], ["Close Combat"], ["Outrage"]] + }] + }, + "mandibuzz": { + "flags": {}, + "sets": [{ + "species": "Mandibuzz", + "item": ["Leftovers"], + "ability": ["Overcoat"], + "evs": {"hp": 248, "def": 68, "spd": 176, "spe": 16}, + "nature": "Careful", + "moves": [["Roost"], ["Defog"], ["Foul Play"], ["Knock Off", "Taunt", "Toxic", "U-turn"]] + }] + }, + "metagross": { + "flags": {}, + "sets": [{ + "species": "Metagross", + "item": ["Life Orb"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Meteor Mash"], ["Hidden Power Fire"], ["Grass Knot"], ["Stealth Rock"]] + }, { + "species": "Metagross", + "item": ["Life Orb", "Shuca Berry", "Colbur Berry"], + "ability": ["Clear Body"], + "evs": {"hp": 32, "atk": 252, "spe": 224}, + "nature": "Adamant", + "moves": [["Meteor Mash"], ["Stealth Rock"], ["Earthquake"], ["Explosion", "Thunder Punch", "Ice Punch", "Bullet Punch"]] + }] + }, + "necrozma": { + "flags": {}, + "sets": [{ + "species": "Necrozma", + "item": ["Iapapa Berry", "Metronome"], + "ability": ["Prism Armor"], + "evs": {"hp": 112, "spa": 252, "spe": 144}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Photon Geyser"], ["Heat Wave"], ["Stealth Rock"], ["Earthquake", "Signal Beam"]] + }, { + "species": "Necrozma", + "item": ["Choice Specs"], + "ability": ["Prism Armor"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Photon Geyser"], ["Heat Wave"], ["Earth Power"], ["Signal Beam"]] + }] + }, + "snorlax": { + "flags": {}, + "sets": [{ + "species": "Snorlax", + "item": ["Iapapa Berry"], + "ability": ["Gluttony"], + "evs": {"hp": 188, "def": 176, "spd": 144}, + "nature": "Careful", + "moves": [["Recycle"], ["Facade"], ["Fire Punch", "Earthquake"], ["Curse"]] + }, { + "species": "Snorlax", + "item": ["Leftovers"], + "ability": ["Thick Fat"], + "evs": {"hp": 188, "def": 176, "spd": 144}, + "nature": "Careful", + "moves": [["Rest"], ["Body Slam", "Return"], ["Sleep Talk"], ["Curse"]] + }] + }, + "talonflame": { + "flags": {}, + "sets": [{ + "species": "Talonflame", + "item": ["Flyinium Z"], + "ability": ["Gale Wings"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Brave Bird"], ["Flare Blitz"], ["Taunt", "Roost", "Flame Charge"]] + }] + }, + "toxicroak": { + "flags": {}, + "sets": [{ + "species": "Toxicroak", + "item": ["Life Orb", "Darkinium Z", "Poisonium Z"], + "ability": ["Dry Skin"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Gunk Shot"], ["Drain Punch"], ["Sucker Punch"]] + }] + }, + "barbaracle": { + "flags": {}, + "sets": [{ + "species": "Barbaracle", + "item": ["Rockium Z"], + "ability": ["Tough Claws"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Stone Edge"], ["Liquidation"], ["Grass Knot"]] + }, { + "species": "Barbaracle", + "item": ["Rockium Z"], + "ability": ["Tough Claws"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Stone Edge"], ["Liquidation"], ["Earthquake"]] + }] + }, + "bronzong": { + "flags": {}, + "sets": [{ + "species": "Bronzong", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Protect", "Psywave"]] + }] + }, + "chesnaught": { + "flags": {}, + "sets": [{ + "species": "Chesnaught", + "item": ["Leftovers", "Rocky Helmet"], + "ability": ["Bulletproof"], + "evs": {"hp": 244, "def": 252, "spd": 12}, + "nature": "Impish", + "moves": [["Spikes"], ["Wood Hammer"], ["Synthesis"], ["Drain Punch"]] + }] + }, + "darmanitan": { + "flags": {}, + "sets": [{ + "species": "Darmanitan", + "item": ["Choice Band", "Choice Scarf"], + "ability": ["Sheer Force"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["U-turn"], ["Rock Slide"], ["Earthquake"]] + }] + }, + "decidueye": { + "flags": {}, + "sets": [{ + "species": "Decidueye", + "item": ["Decidium Z"], + "ability": ["Overgrow"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Shadow Sneak", "Substitute"], ["Spirit Shackle"], ["Leaf Blade"]] + }] + }, + "mienshao": { + "flags": {}, + "sets": [{ + "species": "Mienshao", + "item": ["Choice Scarf", "Choice Band"], + "ability": ["Reckless"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["U-turn"], ["Knock Off"], ["Stone Edge", "Poison Jab"]] + }, { + "species": "Mienshao", + "item": ["Assault Vest"], + "ability": ["Regenerator"], + "evs": {"hp": 100, "spd": 156, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["U-turn"], ["Knock Off"], ["Fake Out"]] + }] + }, + "reuniclus": { + "flags": {}, + "sets": [{ + "species": "Reuniclus", + "item": ["Leftovers"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Psyshock"], ["Calm Mind"], ["Focus Blast", "Shadow Ball"], ["Recover"]] + }, { + "species": "Reuniclus", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 4, "spa": 252}, + "nature": "Quiet", + "moves": [["Psychic", "Psyshock"], ["Shadow Ball"], ["Focus Blast"], ["Trick Room"]] + }] + }, + "tornadus": { + "flags": {}, + "sets": [{ + "species": "Tornadus", + "item": ["Flyinium Z"], + "ability": ["Prankster"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Hasty", + "moves": [["Hurricane"], ["Superpower", "Heat Wave"], ["U-turn"], ["Defog", "Tailwind"]] + }, { + "species": "Tornadus", + "item": ["Life Orb"], + "ability": ["Prankster"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Hasty", + "moves": [["Hurricane"], ["Knock Off"], ["Grass Knot", "Superpower"], ["Defog", "Tailwind"]] + }] + }, + "tsareena": { + "flags": {}, + "sets": [{ + "species": "Tsareena", + "item": ["Choice Band"], + "ability": ["Queenly Majesty"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Power Whip"], ["U-turn"], ["Knock Off", "Rapid Spin"], ["High Jump Kick"]] + }, { + "species": "Tsareena", + "item": ["Meadow Plate"], + "ability": ["Queenly Majesty"], + "evs": {"hp": 56, "atk": 252, "spe": 200}, + "nature": "Adamant", + "moves": [["Power Whip"], ["U-turn", "Synthesis"], ["Knock Off"], ["Rapid Spin"]] + }] + }, + "umbreon": { + "flags": {}, + "sets": [{ + "species": "Umbreon", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Foul Play"], ["Wish"], ["Protect", "Moonlight"], ["Heal Bell", "Toxic"]] + }] + }, + "venomoth": { + "flags": {}, + "sets": [{ + "species": "Venomoth", + "item": ["Buginium Z"], + "ability": ["Tinted Lens"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Bug Buzz"], ["Sleep Powder"], ["Sludge Bomb", "Roost"]] + }] + }, + "zygarde10": { + "flags": {}, + "sets": [{ + "species": "Zygarde-10%", + "item": ["Choice Band"], + "ability": ["Aura Break"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Thousand Arrows"], ["Outrage"], ["Extreme Speed"], ["Toxic", "Earthquake"]] + }] + }, + "araquanid": { + "flags": {}, + "sets": [{ + "species": "Araquanid", + "item": ["Splash Plate", "Waterium Z"], + "ability": ["Water Bubble"], + "evs": {"hp": 68, "atk": 252, "spe": 188}, + "nature": "Adamant", + "moves": [["Sticky Web"], ["Liquidation"], ["Toxic"], ["Magic Coat", "Leech Life"]] + }] + }, + "feraligatr": { + "flags": {}, + "sets": [{ + "species": "Feraligatr", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Liquidation"], ["Ice Punch"], ["Crunch"]] + }, { + "species": "Feraligatr", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Agility"], ["Liquidation"], ["Crunch"], ["Ice Punch"]] + }] + }, + "nidoqueen": { + "flags": {}, + "sets": [{ + "species": "Nidoqueen", + "item": ["Black Sludge"], + "ability": ["Sheer Force"], + "evs": {"hp": 252, "def": 124, "spe": 132}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Toxic Spikes"], ["Earth Power"], ["Sludge Wave"]] + }, { + "species": "Nidoqueen", + "item": ["Black Sludge"], + "ability": ["Sheer Force"], + "evs": {"hp": 252, "def": 124, "spe": 132}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Ice Beam"], ["Toxic Spikes", "Stealth Rock"], ["Earth Power"], ["Sludge Wave"]] + }] + }, + "seismitoad": { + "flags": {}, + "sets": [{ + "species": "Seismitoad", + "item": ["Leftovers", "Expert Belt"], + "ability": ["Water Absorb"], + "evs": {"hp": 72, "spa": 252, "spe": 184}, + "nature": "Modest", + "moves": [["Hydro Pump", "Scald"], ["Earth Power"], ["Hidden Power Fire"], ["Stealth Rock"]] + }, { + "species": "Seismitoad", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 248, "spe": 8}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Toxic"], ["Stealth Rock"]] + }] + }, + "slowbro": { + "flags": {}, + "sets": [{ + "species": "Slowbro", + "item": ["Leftovers", "Waterium Z", "Psychium Z", "Colbur Berry"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Psyshock"], ["Slack Off"], ["Thunder Wave", "Counter", "Calm Mind"]] + }, { + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 76, "spd": 180}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Calm Mind", "Ice Beam", "Fire Blast"], ["Scald"], ["Psyshock"], ["Slack Off"]] + }, { + "species": "Slowbro", + "item": ["Waterium Z", "Colbur Berry"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Block"], ["Scald"], ["Rest"], ["Toxic"]] + }, { + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Scald"], ["Block"], ["Rest"]] + }] + }, + "roserade": { + "flags": {}, + "sets": [{ + "species": "Roserade", + "item": ["Life Orb", "Grassium Z"], + "ability": ["Technician"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Sleep Powder", "Spikes"]] + }] + }, + "rotomheat": { + "flags": {}, + "sets": [{ + "species": "Rotom-Heat", + "item": ["Firium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Overheat"], ["Volt Switch"], ["Hidden Power Grass", "Thunderbolt"], ["Will-O-Wisp", "Thunder Wave", "Defog"]] + }, { + "species": "Rotom-Heat", + "item": ["Iapapa Berry"], + "ability": ["Levitate"], + "evs": {"hp": 236, "spa": 20, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Overheat"], ["Volt Switch"], ["Toxic"], ["Defog", "Thunderbolt", "Pain Split"]] + }] + }, + "rhyperior": { + "flags": {}, + "sets": [{ + "species": "Rhyperior", + "item": ["Leftovers"], + "ability": ["Solid Rock"], + "evs": {"hp": 252, "atk": 16, "spd": 240}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Earthquake"], ["Toxic"], ["Stone Edge", "Rock Blast"]] + }] + }, + "diancie": { + "flags": {}, + "sets": [{ + "species": "Diancie", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Toxic"]] + }, { + "species": "Diancie", + "item": ["Normalium Z"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Heal Bell"]] + }] + }, + "palossand": { + "flags": {}, + "sets": [{ + "species": "Palossand", + "item": ["Colbur Berry"], + "ability": ["Water Compaction"], + "evs": {"hp": 252, "def": 132, "spd": 124}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Shore Up"], ["Toxic"], ["Earth Power"]] + }, { + "species": "Palossand", + "item": ["Leftovers"], + "ability": ["Water Compaction"], + "evs": {"hp": 252, "def": 164, "spd": 92}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Shore Up"], ["Toxic"], ["Earth Power"]] + }] + }, + "glalie": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Glalie", + "item": ["Glalitite"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes"], ["Return", "Double-Edge"], ["Ice Shard"], ["Explosion", "Earthquake"]] + }, { + "species": "Glalie", + "item": ["Glalitite"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Spikes"], ["Return", "Double-Edge"], ["Freeze-Dry"], ["Explosion", "Earthquake", "Hidden Power Fire"]] + }, { + "species": "Glalie", + "item": ["Glalitite"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Spikes"], ["Return", "Double-Edge"], ["Ice Shard"], ["Hidden Power Fire"]] + }] + }, + "gligar": { + "flags": {}, + "sets": [{ + "species": "Gligar", + "item": ["Eviolite"], + "ability": ["Immunity"], + "evs": {"spa": 252, "def": 156, "spd": 100}, + "nature": "Impish", + "moves": [["Stealth Rock", "Defog"], ["Earthquake"], ["Toxic", "U-turn", "Knock Off"], ["Roost"]] + }] + }, + "registeel": { + "flags": {}, + "sets": [{ + "species": "Registeel", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Stealth Rock"], ["Seismic Toss"], ["Toxic"], ["Protect"]] + }] + }, + "silvallysteel": { + "flags": {}, + "sets": [{ + "species": "Silvally-Steel", + "item": ["Steel Memory"], + "ability": ["RKS System"], + "evs": {"hp": 252, "spd": 240, "spe": 16}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Parting Shot"], ["Flamethrower"], ["Toxic"], ["Defog"]] + }] + }, + "pyukumuku": { + "flags": {}, + "sets": [{ + "species": "Pyukumuku", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Recover"], ["Soak"], ["Toxic"], ["Block", "Counter"]] + }] + } + }, + "RU": { + "abomasnow": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Abomasnow", + "item": ["Abomasite"], + "ability": ["Soundproof"], + "evs": {"atk": 92, "spa": 252, "spe": 164}, + "nature": "Rash", + "moves": [["Blizzard"], ["Wood Hammer"], ["Ice Shard"], ["Focus Blast"]] + }] + }, + "aerodactyl": { + "flags": {}, + "sets": [{ + "species": "Aerodactyl", + "item": ["Life Orb"], + "ability": ["Unnerve"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Ice Fang"], ["Earthquake"], ["Pursuit"]] + }] + }, + "ampharos": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Ampharos", + "item": ["Ampharosite"], + "ability": ["Static"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Volt Switch"], ["Dragon Pulse"], ["Focus Blast"], ["Thunderbolt"]] + }] + }, + "araquanid": { + "flags": {}, + "sets": [{ + "species": "Araquanid", + "item": ["Splash Plate"], + "ability": ["Water Bubble"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Sticky Web"], ["Liquidation"], ["Magic Coat"], ["Leech Life"]] + }] + }, + "arcanine": { + "flags": {}, + "sets": [{ + "species": "Arcanine", + "item": ["Life Orb"], + "ability": ["Flash Fire"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Wild Charge"], ["Flare Blitz"], ["Extreme Speed"]] + }] + }, + "barbaracle": { + "flags": {}, + "sets": [{ + "species": "Barbaracle", + "item": ["Rockium Z"], + "ability": ["Tough Claws"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Liquidation"], ["Stone Edge"], ["Low Kick"]] + }] + }, + "bewear": { + "flags": {}, + "sets": [{ + "species": "Bewear", + "item": ["Choice Band"], + "ability": ["Fluffy"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Return"], ["Superpower"], ["Ice Punch"], ["Earthquake"]] + }] + }, + "blastoise": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Blastoise", + "item": ["Blastoisinite"], + "ability": ["Rain Dish"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Rapid Spin"], ["Dark Pulse"], ["Aura Sphere"], ["Ice Beam"]] + }] + }, + "bronzong": { + "flags": {}, + "sets": [{ + "species": "Bronzong", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Toxic"], ["Gyro Ball"], ["Protect"]] + }] + }, + "cloyster": { + "flags": {}, + "sets": [{ + "species": "Cloyster", + "item": ["Normalium Z"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Explosion"], ["Hydro Pump"]] + }] + }, + "cresselia": { + "flags": {}, + "sets": [{ + "species": "Cresselia", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 112, "spe": 144}, + "nature": "Bold", + "moves": [["Moonlight"], ["Psyshock"], ["Moonblast"], ["Toxic"]] + }] + }, + "diancie": { + "flags": {}, + "sets": [{ + "species": "Diancie", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Heal Bell"]] + }] + }, + "donphan": { + "flags": {}, + "sets": [{ + "species": "Donphan", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Rapid Spin"], ["Earthquake"], ["Knock Off"], ["Toxic"]] + }] + }, + "dragalge": { + "flags": {}, + "sets": [{ + "species": "Dragalge", + "item": ["Dragonium Z"], + "ability": ["Adaptability"], + "evs": {"hp": 204, "spa": 252, "spe": 52}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Wave"], ["Hidden Power Fire"], ["Toxic Spikes"]] + }] + }, + "drapion": { + "flags": {}, + "sets": [{ + "species": "Drapion", + "item": ["Waterium Z"], + "ability": ["Sniper"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Knock Off"], ["Poison Jab"], ["Aqua Tail"]] + }] + }, + "emboar": { + "flags": {}, + "sets": [{ + "species": "Emboar", + "item": ["Choice Band"], + "ability": ["Reckless"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Superpower"], ["Wild Charge"], ["Earthquake"]] + }] + }, + "escavalier": { + "flags": {}, + "sets": [{ + "species": "Escavalier", + "item": ["Leftovers"], + "ability": ["Overcoat"], + "evs": {"hp": 252, "atk": 42, "spd": 204}, + "nature": "Adamant", + "moves": [["Megahorn"], ["Iron Head"], ["Protect"], ["Pursuit"]] + }] + }, + "espeon": { + "flags": {}, + "sets": [{ + "species": "Espeon", + "item": ["Leftovers"], + "ability": ["Magic Bounce"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Psychic"], ["Shadow Ball"], ["Morning Sun"]] + }] + }, + "feraligatr": { + "flags": {}, + "sets": [{ + "species": "Feraligatr", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Liquidation"], ["Ice Punch"], ["Crunch"]] + }] + }, + "florges": { + "flags": {}, + "sets": [{ + "species": "Florges", + "item": ["Leftovers"], + "ability": ["Flower Veil"], + "evs": {"hp": 252, "def": 120, "spe": 136}, + "nature": "Timid", + "moves": [["Defog"], ["Moonblast"], ["Synthesis"], ["Heal Bell"]] + }] + }, + "flygon": { + "flags": {}, + "sets": [{ + "species": "Flygon", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["U-turn"], ["Outrage"], ["Earthquake"], ["Dragon Claw"]] + }] + }, + "forretress": { + "flags": {}, + "sets": [{ + "species": "Forretress", + "item": ["Leftovers"], + "ability": ["Overcoat"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"spe": 0}, + "nature": "Relaxed", + "moves": [["Gyro Ball"], ["Spikes"], ["Volt Switch"], ["Rapid Spin"]] + }] + }, + "froslass": { + "flags": {}, + "sets": [{ + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Taunt"], ["Spikes"], ["Icy Wind"], ["Will-O-Wisp"]] + }] + }, + "galvantula": { + "flags": {}, + "sets": [{ + "species": "Galvantula", + "item": ["Life Orb"], + "ability": ["Compound Eyes"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Thunder"], ["Bug Buzz"], ["Hidden Power Ice"]] + }] + }, + "gardevoir": { + "flags": {}, + "sets": [{ + "species": "Gardevoir", + "item": ["Choice Scarf"], + "ability": ["Trace"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psyshock"], ["Moonblast"], ["Trick"], ["Healing Wish"]] + }] + }, + "gigalith": { + "flags": {}, + "sets": [{ + "species": "Gigalith", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Stone Edge"], ["Earthquake"], ["Toxic"]] + }] + }, + "golemalola": { + "flags": {}, + "sets": [{ + "species": "Golem-Alola", + "item": ["Choice Band"], + "ability": ["Magnet Pull"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Fire Punch"], ["Wild Charge"], ["Earthquake"], ["Stone Edge"]] + }] + }, + "golisopod": { + "flags": {}, + "sets": [{ + "species": "Golisopod", + "item": ["Choice Band"], + "ability": ["Emergency Exit"], + "evs": {"hp": 168, "atk": 252, "spe": 88}, + "nature": "Adamant", + "moves": [["First Impression"], ["Liquidation"], ["Leech Life"], ["Aqua Jet"]] + }] + }, + "goodra": { + "flags": {}, + "sets": [{ + "species": "Goodra", + "item": ["Choice Specs"], + "ability": ["Sap Sipper"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Fire Blast"], ["Thunderbolt"], ["Sludge Wave"]] + }] + }, + "honchkrow": { + "flags": {}, + "sets": [{ + "species": "Honchkrow", + "item": ["Life Orb"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Brave Bird"], ["Sucker Punch"], ["Pursuit"], ["Superpower"]] + }] + }, + "houndoom": { + "flags": {}, + "sets": [{ + "species": "Houndoom", + "item": ["Darkinium Z"], + "ability": ["Flash Fire"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Dark Pulse"], ["Fire Blast"], ["Taunt"]] + }] + }, + "kingdra": { + "flags": {}, + "sets": [{ + "species": "Kingdra", + "item": ["Scope Lens"], + "ability": ["Sniper"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Focus Energy"], ["Draco Meteor"], ["Hydro Pump"], ["Substitute"]] + }] + }, + "lycanrocdusk": { + "flags": {}, + "sets": [{ + "species": "Lycanroc-Dusk", + "item": ["Lycanium Z"], + "ability": ["Tough Claws"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Stone Edge"], ["Fire Fang"], ["Sucker Punch"]] + }] + }, + "machamp": { + "flags": {}, + "sets": [{ + "species": "Machamp", + "item": ["Flame Orb"], + "ability": ["Guts"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Close Combat"], ["Knock Off"], ["Facade"], ["Bullet Punch"]] + }] + }, + "mandibuzz": { + "flags": {}, + "sets": [{ + "species": "Mandibuzz", + "item": ["Leftovers"], + "ability": ["Overcoat"], + "evs": {"hp": 248, "def": 20, "spd": 240}, + "nature": "Careful", + "moves": [["Defog"], ["Taunt"], ["Roost"], ["Foul Play"]] + }] + }, + "mantine": { + "flags": {}, + "sets": [{ + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Scald"], ["Roost"], ["Defog"], ["Toxic"]] + }] + }, + "marowakalola": { + "flags": {}, + "sets": [{ + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Rock Head"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Flare Blitz"], ["Shadow Bone"], ["Swords Dance"], ["Low Kick"]] + }] + }, + "medicham": { + "flags": {}, + "sets": [{ + "species": "Medicham", + "item": ["Life Orb"], + "ability": ["Pure Power"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Zen Headbutt"], ["Thunder Punch"], ["Bullet Punch"]] + }] + }, + "metagross": { + "flags": {}, + "sets": [{ + "species": "Metagross", + "item": ["Colbur Berry"], + "ability": ["Clear Body"], + "evs": {"hp": 236, "atk": 96, "spe": 176}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Meteor Mash"], ["Earthquake"], ["Explosion"]] + }] + }, + "milotic": { + "flags": {}, + "sets": [{ + "species": "Milotic", + "item": ["Leftovers"], + "ability": ["Marvel Scale"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Recover"], ["Haze"], ["Refresh"]] + }] + }, + "mismagius": { + "flags": {}, + "sets": [{ + "species": "Mismagius", + "item": ["Ghostium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Shadow Ball"], ["Thunderbolt"], ["Taunt"]] + }] + }, + "necrozma": { + "flags": {}, + "sets": [{ + "species": "Necrozma", + "item": ["Twisted Spoon"], + "ability": ["Prism Armor"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Photon Geyser"], ["Moonlight"], ["Earth Power"]] + }] + }, + "nidoqueen": { + "flags": {}, + "sets": [{ + "species": "Nidoqueen", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Earth Power"], ["Ice Beam"], ["Taunt"]] + }] + }, + "ninetales": { + "flags": {}, + "sets": [{ + "species": "Ninetales", + "item": ["Firium Z"], + "ability": ["Drought"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Fire Blast"], ["Solar Beam"], ["Hidden Power Ice"]] + }] + }, + "noivern": { + "flags": {}, + "sets": [{ + "species": "Noivern", + "item": ["Leftovers"], + "ability": ["Infiltrator"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Taunt"], ["Super Fang"], ["Hurricane"], ["Roost"]] + }] + }, + "pangoro": { + "flags": {}, + "sets": [{ + "species": "Pangoro", + "item": ["Life Orb"], + "ability": ["Iron Fist"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Knock Off"], ["Drain Punch"], ["Bullet Punch"]] + }] + }, + "porygon2": { + "flags": {}, + "sets": [{ + "species": "Porygon2", + "item": ["Eviolite"], + "ability": ["Trace"], + "evs": {"hp": 252, "def": 104, "spd": 152}, + "nature": "Calm", + "moves": [["Recover"], ["Thunder Wave"], ["Ice Beam"], ["Foul Play"]] + }] + }, + "passimian": { + "flags": {}, + "sets": [{ + "species": "Passimian", + "item": ["Choice Scarf"], + "ability": ["Receiver"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["U-turn"], ["Knock Off"], ["Gunk Shot"]] + }] + }, + "pyukumuku": { + "flags": {}, + "sets": [{ + "species": "Pyukumuku", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Recover"], ["Toxic"], ["Soak"], ["Block"]] + }] + }, + "quagsire": { + "flags": {}, + "sets": [{ + "species": "Quagsire", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Recover"], ["Curse"]] + }] + }, + "raikou": { + "flags": {}, + "sets": [{ + "species": "Raikou", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Thunderbolt"], ["Hidden Power Ice"], ["Substitute"]] + }] + }, + "registeel": { + "flags": {}, + "sets": [{ + "species": "Registeel", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Stealth Rock"], ["Seismic Toss"], ["Toxic"], ["Protect"]] + }] + }, + "rhyperior": { + "flags": {}, + "sets": [{ + "species": "Rhyperior", + "item": ["Leftovers"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "atk": 16, "spd": 244}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Ice Punch"]] + }] + }, + "ribombee": { + "flags": {}, + "sets": [{ + "species": "Ribombee", + "item": ["Fairium Z"], + "ability": ["Shield Dust"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Moonblast"], ["Psychic"], ["Hidden Power Fire"]] + }] + }, + "roserade": { + "flags": {}, + "sets": [{ + "species": "Roserade", + "item": ["Life Orb"], + "ability": ["Technician"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Sludge Bomb"], ["Hidden Power Fire"], ["Synthesis"]] + }] + }, + "rotommow": { + "flags": {}, + "sets": [{ + "species": "Rotom-Mow", + "item": ["Grassium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Leaf Storm"], ["Defog"], ["Will-O-Wisp"]] + }] + }, + "salazzle": { + "flags": {}, + "sets": [{ + "species": "Salazzle", + "item": ["Poisonium Z"], + "ability": ["Oblivious"], + "evs": {"hp": 8, "spa": 248, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Fire Blast"], ["Sludge Wave"], ["Hidden Power Grass"]] + }] + }, + "sawk": { + "flags": {}, + "sets": [{ + "species": "Sawk", + "item": ["Fightinium Z"], + "ability": ["Sturdy"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Earthquake"], ["Knock Off"], ["Poison Jab"]] + }] + }, + "seismitoad": { + "flags": {}, + "sets": [{ + "species": "Seismitoad", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Scald"], ["Toxic"], ["Earthquake"], ["Stealth Rock"]] + }] + }, + "shaymin": { + "flags": {}, + "sets": [{ + "species": "Shaymin", + "item": ["Life Orb"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Seed Flare"], ["Earth Power"], ["Hidden Power Ice"], ["Synthesis"]] + }] + }, + "sigilyph": { + "flags": {}, + "sets": [{ + "species": "Sigilyph", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Heat Wave"], ["Roost"], ["Defog"]] + }] + }, + "slowbro": { + "flags": {}, + "sets": [{ + "species": "Slowbro", + "item": ["Leftovers"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Scald"], ["Psyshock"], ["Slack Off"]] + }] + }, + "slowking": { + "flags": {}, + "sets": [{ + "species": "Slowking", + "item": ["Assault Vest"], + "ability": ["Regenerator"], + "evs": {"hp": 212, "spa": 252, "spe": 44}, + "nature": "Modest", + "moves": [["Scald"], ["Future Sight"], ["Fire Blast"], ["Dragon Tail"]] + }] + }, + "slurpuff": { + "flags": {}, + "sets": [{ + "species": "Slurpuff", + "item": ["Sitrus Berry"], + "ability": ["Unburden"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Belly Drum"], ["Play Rough"], ["Return"], ["Drain Punch"]] + }] + }, + "sneasel": { + "flags": {}, + "sets": [{ + "species": "Sneasel", + "item": ["Life Orb"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Icicle Crash"], ["Ice Shard"], ["Pursuit"]] + }] + }, + "snorlax": { + "flags": {}, + "sets": [{ + "species": "Snorlax", + "item": ["Leftovers"], + "ability": ["Thick Fat"], + "happiness": 0, + "evs": {"hp": 188, "def": 128, "spd": 192}, + "nature": "Careful", + "moves": [["Curse"], ["Frustration"], ["Rest"], ["Earthquake"]] + }] + }, + "stoutland": { + "flags": {}, + "sets": [{ + "species": "Stoutland", + "item": ["Choice Band"], + "ability": ["Sand Rush"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Return"], ["Superpower"], ["Pursuit"], ["Crunch"]] + }] + }, + "swellow": { + "flags": {}, + "sets": [{ + "species": "Swellow", + "item": ["Choice Specs"], + "ability": ["Scrappy"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Boomburst"], ["U-turn"], ["Heat Wave"], ["Air Slash"]] + }] + }, + "torkoal": { + "flags": {}, + "sets": [{ + "species": "Torkoal", + "item": ["Heat Rock"], + "ability": ["Drought"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Lava Plume"], ["Explosion"], ["Toxic"]] + }] + }, + "torterra": { + "flags": {}, + "sets": [{ + "species": "Torterra", + "item": ["Leftovers"], + "ability": ["Overgrow"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Wood Hammer"], ["Earthquake"], ["Synthesis"]] + }] + }, + "toxicroak": { + "flags": {}, + "sets": [{ + "species": "Toxicroak", + "item": ["Life Orb"], + "ability": ["Dry Skin"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Gunk Shot"], ["Drain Punch"], ["Sucker Punch"]] + }] + }, + "tsareena": { + "flags": {}, + "sets": [{ + "species": "Tsareena", + "item": ["Meadow Plate"], + "ability": ["Queenly Majesty"], + "evs": {"atk": 252, "Def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Rapid Spin"], ["Power Whip"], ["Knock Off"], ["Synthesis"]] + }] + }, + "tyrantrum": { + "flags": {}, + "sets": [{ + "species": "Tyrantrum", + "item": ["Choice Band"], + "ability": ["Rock Head"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Head Smash"], ["Outrage"], ["Earthquake"], ["Superpower"]] + }] + }, + "umbreon": { + "flags": {}, + "sets": [{ + "species": "Umbreon", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Wish"], ["Protect"], ["Heal Bell"], ["Foul Play"]] + }] + }, + "uxie": { + "flags": {}, + "sets": [{ + "species": "Uxie", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 80, "spe": 176}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Psychic"], ["U-turn"], ["Yawn"]] + }] + }, + "vanilluxe": { + "flags": {}, + "sets": [{ + "species": "Vanilluxe", + "item": ["Choice Specs"], + "ability": ["Snow Warning"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Blizzard"], ["Freeze-Dry"], ["Flash Cannon"], ["Hidden Power Ground"]] + }] + }, + "vaporeon": { + "flags": {}, + "sets": [{ + "species": "Vaporeon", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Toxic"], ["Wish"], ["Protect"]] + }] + }, + "venusaur": { + "flags": {}, + "sets": [{ + "species": "Venusaur", + "item": ["Life Orb"], + "ability": ["Chlorophyll"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Growth"], ["Sludge Bomb"], ["Giga Drain"], ["Hidden Power Fire"]] + }] + }, + "vikavolt": { + "flags": {}, + "sets": [{ + "species": "Vikavolt", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"hp": 104, "spa": 252, "spe": 152}, + "nature": "Modest", + "moves": [["Bug Buzz"], ["Thunderbolt"], ["Energy Ball"], ["Volt Switch"]] + }] + }, + "virizion": { + "flags": {}, + "sets": [{ + "species": "Virizion", + "item": ["Fightinium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Leaf Blade"], ["Stone Edge"], ["Swords Dance"]] + }] + }, + "vivillon": { + "flags": {}, + "sets": [{ + "species": "Vivillon", + "item": ["Flyinium Z"], + "ability": ["Compound Eyes"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Hurricane"], ["Energy Ball"], ["Sleep Powder"]] + }] + }, + "xatu": { + "flags": {}, + "sets": [{ + "species": "Xatu", + "item": ["Rocky Helmet"], + "ability": ["Magic Bounce"], + "evs": {"hp": 252, "def": 152, "spe": 104}, + "nature": "Bold", + "moves": [["Roost"], ["U-turn"], ["Psychic"], ["Toxic"]] + }] + }, + "yanmega": { + "flags": {}, + "sets": [{ + "species": "Yanmega", + "item": ["Choice Specs"], + "ability": ["Tinted Lens"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Air Slash"], ["U-turn"], ["Giga Drain"]] + }] + }, + "zygarde10": { + "flags": {}, + "sets": [{ + "species": "Zygarde-10%", + "item": ["Choice Band"], + "ability": ["Aura Break"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Thousand Arrows"], ["Outrage"], ["Extreme Speed"], ["Toxic"]] + }] + } + }, + "NU": { + "accelgor": { + "flags": {}, + "sets": [{ + "species": "Accelgor", + "item": ["Choice Specs"], + "ability": ["Sticky Hold"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Focus Blast"], ["Sludge Bomb"], ["U-turn"]] + }, { + "species": "Accelgor", + "item": ["Focus Sash"], + "ability": ["Sticky Hold"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Spikes"], ["Final Gambit"], ["Encore"]] + }] + }, + "aerodactyl": { + "flags": {}, + "sets": [{ + "species": "Aerodactyl", + "item": ["Life Orb"], + "ability": ["Unnerve"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Earthquake"], ["Pursuit"], ["Wing Attack"]] + }] + }, + "ambipom": { + "flags": {}, + "sets": [{ + "species": "Ambipom", + "item": ["Life Orb"], + "ability": ["Technician"], + "happiness": 0, + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Fake Out"], ["Frustration"], ["Low Kick"], ["U-turn"]] + }] + }, + "aromatisse": { + "flags": {}, + "sets": [{ + "species": "Aromatisse", + "item": ["Leftovers"], + "ability": ["Aroma Veil"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Moonblast"], ["Wish"], ["Protect"], ["Heal Bell"]] + }, { + "species": "Aromatisse", + "item": ["Leftovers"], + "ability": ["Aroma Veil"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Moonblast"], ["Calm Mind"], ["Rest"], ["Sleep Talk"]] + }, { + "species": "Aromatisse", + "item": ["Fairium Z"], + "ability": ["Aroma Veil"], + "evs": {"hp": 252, "def": 4, "spa": 252}, + "ivs": {"atk": 0}, + "nature": "Quiet", + "moves": [["Nasty Plot"], ["Moonblast"], ["Psychic"], ["Trick Room"]] + }] + }, + "audino": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Audino", + "item": ["Audinite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 208, "spa": 48}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Rest"], ["Sleep Talk"]] + }, { + "species": "Audino", + "item": ["Audinite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "spa": 48, "spd": 208}, + "nature": "Calm", + "moves": [["Wish"], ["Protect"], ["Dazzling Gleam"], ["Knock Off"]] + }, { + "species": "Audino", + "item": ["Audinite"], + "ability": ["Regenerator"], + "evs": {"hp": 172, "spa": 252, "spe": 84}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Calm Mind"], ["Dazzling Gleam"], ["Fire Blast"], ["Surf"]] + }] + }, + "blastoise": { + "flags": {}, + "sets": [{ + "species": "Blastoise", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Scald"], ["Rapid Spin"], ["Refresh"], ["Toxic"]] + }] + }, + "braviary": { + "flags": {}, + "sets": [{ + "species": "Braviary", + "item": ["Choice Scarf"], + "ability": ["Defiant"], + "happiness": 0, + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["U-turn"], ["Superpower"], ["Frustration"]] + }, { + "species": "Braviary", + "item": ["Leftovers"], + "ability": ["Defiant"], + "evs": {"hp": 248, "spd": 168, "spe": 92}, + "nature": "Careful", + "moves": [["Substitute"], ["Bulk Up"], ["Brave Bird"], ["Roost"]] + }, { + "species": "Braviary", + "item": ["Sharp Beak"], + "ability": ["Defiant"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Superpower"], ["Bulk Up"], ["Brave Bird"], ["Roost"]] + }] + }, + "cinccino": { + "flags": {}, + "sets": [{ + "species": "Cinccino", + "item": ["Choice Band"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Tail Slap"], ["Bullet Seed"], ["Knock Off"], ["U-turn"]] + }] + }, + "clawitzer": { + "flags": {}, + "sets": [{ + "species": "Clawitzer", + "item": ["Choice Specs"], + "ability": ["Mega Launcher"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Scald"], ["Dark Pulse"], ["Ice Beam"], ["U-turn"]] + }] + }, + "comfey": { + "flags": {}, + "sets": [{ + "species": "Comfey", + "item": ["Pixie Plate"], + "ability": ["Triage"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Draining Kiss"], ["Taunt"], ["Synthesis"]] + }] + }, + "cryogonal": { + "flags": {}, + "sets": [{ + "species": "Cryogonal", + "item": ["Never-Melt Ice"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Freeze-Dry"], ["Knock Off"], ["Rapid Spin"], ["Recover"]] + }, { + "species": "Cryogonal", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 204, "spd": 148, "spe": 156}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Freeze-Dry"], ["Rapid Spin"], ["Toxic"], ["Recover"]] + }] + }, + "decidueye": { + "flags": {}, + "sets": [{ + "species": "Decidueye", + "item": ["Decidium Z"], + "ability": ["Overgrow"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Spirit Shackle"], ["Leaf Blade"], ["Shadow Sneak"]] + }, { + "species": "Decidueye", + "item": ["Leftovers"], + "ability": ["Overgrow"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Giga Drain"], ["U-turn"], ["Roost"], ["Defog"]] + }, { + "species": "Decidueye", + "item": ["Choice Scarf"], + "ability": ["Overgrow"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spirit Shackle"], ["Leaf Blade"], ["Brave Bird"], ["U-turn"]] + }] + }, + "delphox": { + "flags": {}, + "sets": [{ + "species": "Delphox", + "item": ["Choice Scarf"], + "ability": ["Blaze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Trick"]] + }, { + "species": "Delphox", + "item": ["Firium Z"], + "ability": ["Blaze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Psychic"], ["Grass Knot"], ["Calm Mind"]] + }, { + "species": "Delphox", + "item": ["Leftovers"], + "ability": ["Blaze"], + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Wish"], ["Protect"], ["Toxic"], ["Flamethrower"]] + }] + }, + "dhelmise": { + "flags": {}, + "sets": [{ + "species": "Dhelmise", + "item": ["Choice Band"], + "ability": ["Steelworker"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Power Whip"], ["Anchor Shot"], ["Knock Off"], ["Earthquake"]] + }, { + "species": "Dhelmise", + "item": ["Meadow Plate"], + "ability": ["Steelworker"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Power Whip"], ["Knock Off"], ["Rapid Spin"], ["Synthesis"]] + }, { + "species": "Dhelmise", + "item": ["Grassium Z"], + "ability": ["Steelworker"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Power Whip"], ["Knock Off"], ["Rapid Spin"], ["Synthesis"]] + }] + }, + "diancie": { + "flags": {}, + "sets": [{ + "species": "Diancie", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "def": 132, "spd": 124}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Moonblast"], ["Diamond Storm"], ["Heal Bell"]] + }, { + "species": "Diancie", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "def": 120, "spd": 136}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Moonblast"], ["Earth Power"], ["Substitute"]] + }, { + "species": "Diancie", + "item": ["Choice Specs"], + "ability": ["Clear Body"], + "evs": {"hp":0, "spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Moonblast"], ["Power Gem"], ["Earth Power"], ["Psychic"]] + }, { + "species": "Diancie", + "item": ["Life Orb"], + "ability": ["Clear Body"], + "evs": {"hp":0, "spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Quiet", + "moves": [["Trick Room"], ["Moonblast"], ["Earth Power"], ["Psychic"]] + }] + }, + "dodrio": { + "flags": {}, + "sets": [{ + "species": "Dodrio", + "item": ["Fightinium Z"], + "ability": ["Early Bird"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Knock Off"], ["Brave Bird"], ["Jump Kick"]] + }, { + "species": "Dodrio", + "item": ["Choice Band"], + "ability": ["Early Bird"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Quick Attack"], ["Knock Off"], ["Brave Bird"], ["Jump Kick"]] + }, { + "species": "Dodrio", + "item": ["Choice Scarf"], + "ability": ["Early Bird"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Return"], ["Knock Off"], ["Brave Bird"], ["Jump Kick"]] + }] + }, + "druddigon": { + "flags": {}, + "sets": [{ + "species": "Druddigon", + "item": ["Rocky Helmet"], + "ability": ["Mold Breaker"], + "evs": {"hp": 252, "def": 216, "spd": 12, "spe": 28}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Dragon Tail"], ["Earthquake"], ["Glare"]] + + }, { + "species": "Druddigon", + "item": ["Rocky Helmet"], + "ability": ["Rough Skin"], + "evs": {"hp": 252, "def": 216, "spd": 12, "spe": 28}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Dragon Tail"], ["Earthquake"], ["Glare"]] + }] + }, + "froslass": { + "flags": {}, + "sets": [{ + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Taunt"], ["Ice Beam"], ["Destiny Bond"]] + }, { + "species": "Froslass", + "item": ["Life Orb"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Ice Beam"], ["Spikes"], ["Destiny Bond"]] + }] + }, + "garbodor": { + "flags": {}, + "sets": [{ + "species": "Garbodor", + "item": ["Rocky Helmet"], + "ability": ["Aftermath"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "nature": "Impish", + "moves": [["Spikes"], ["Drain Punch"], ["Gunk Shot"], ["Toxic Spikes"]] + }, { + "species": "Garbodor", + "item": ["Toxic Plate"], + "ability": ["Aftermath"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Explosion"]] + }] + }, + "golbat": { + "flags": {}, + "sets": [{ + "species": "Golbat", + "item": ["Eviolite"], + "ability": ["Infiltrator"], + "evs": {"hp": 248, "def": 84, "spe": 176}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Toxic"], ["Defog"], ["Roost"]] + }, { + "species": "Golbat", + "item": ["Eviolite"], + "ability": ["Infiltrator"], + "evs": {"hp": 248, "def": 84, "spe": 176}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Taunt"], ["Toxic"], ["Roost"]] + }] + }, + "guzzlord": { + "flags": {}, + "sets": [{ + "species": "Guzzlord", + "item": ["Choice Specs"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 196, "spe": 60}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"], ["Hidden Power Steel"]] + }, { + "species": "Guzzlord", + "item": ["Dragonium Z"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 76, "spe": 180}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast"], ["Heavy Slam"]] + }] + }, + "hariyama": { + "flags": {}, + "sets": [{ + "species": "Hariyama", + "item": ["Assault Vest"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spd": 252}, + "nature": "Adamant", + "moves": [["Close Combat"], ["Fake Out"], ["Knock Off"], ["Bullet Punch"]] + }, { + "species": "Hariyama", + "item": ["Flame Orb"], + "ability": ["Guts"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Close Combat"], ["Knock Off"], ["Facade"], ["Bullet Punch"]] + }] + }, + "heliolisk": { + "flags": {}, + "sets": [{ + "species": "Heliolisk", + "item": ["Life Orb"], + "ability": ["Dry Skin"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Hyper Voice"], ["Surf"], ["Dark Pulse"]] + }, { + "species": "Heliolisk", + "item": ["Choice Specs"], + "ability": ["Dry Skin"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Thunderbolt"], ["Hyper Voice"], ["Focus Blast"]] + }] + }, + "hitmonlee": { + "flags": {}, + "sets": [{ + "species": "Hitmonlee", + "item": ["Choice Scarf"], + "ability": ["Reckless"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Knock Off"], ["Rapid Spin"], ["Earthquake"]] + }, { + "species": "Hitmonlee", + "item": ["Life Orb"], + "ability": ["Reckless"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Knock Off"], ["Rapid Spin"], ["Mach Punch"]] + }, { + "species": "Hitmonlee", + "item": ["Choice Band"], + "ability": ["Reckless"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Knock Off"], ["Mach Punch"], ["Earthquake"]] + }, { + "species": "Hitmonlee", + "item": ["White Herb"], + "ability": ["Unburden"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Curse"], ["Close Combat"], ["Stone Edge"], ["Earthquake"]] + }] + }, + "houndoom": { + "flags": {}, + "sets": [{ + "species": "Houndoom", + "item": ["Darkinium Z"], + "ability": ["Unnerve"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Dark Pulse"], ["Nasty Plot"], ["Flame Charge"]] + }, { + "species": "Houndoom", + "item": ["Life Orb"], + "ability": ["Unnerve"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Fire Blast"], ["Pursuit"], ["Dark Pulse"], ["Sucker Punch"]] + }] + }, + "incineroar": { + "flags": {}, + "sets": [{ + "species": "Incineroar", + "item": ["Iapapa Berry"], + "ability": ["Intimidate"], + "evs": {"hp": 244, "def": 128, "spd": 128, "spe":8}, + "nature": "Sassy", + "moves": [["Fire Blast"], ["Knock Off"], ["U-turn"], ["Earthquake"]] + }, { + "species": "Incineroar", + "item": ["Incinium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Darkest Lariat"], ["Earthquake"], ["Swords Dance"]] + }] + }, + "jellicent": { + "flags": {}, + "sets": [{ + "species": "Jellicent", + "item": ["Colbur Berry"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "def": 176, "spe": 84}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Hex"], ["Scald"], ["Recover"], ["Will-O-Wisp"]] + }, { + "species": "Jellicent", + "item": ["Colbur Berry"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "def": 176, "spe": 84}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Taunt"], ["Scald"], ["Recover"], ["Toxic"]] + }] + }, + "klinklang": { + "flags": {}, + "sets": [{ + "species": "Klinklang", + "item": ["Steelium Z", "Leftovers"], + "ability": ["Clear Body"], + "happiness": 0, + "evs": {"hp": 104, "atk": 252, "spe": 152}, + "nature": "Adamant", + "moves": [["Shift Gear"], ["Gear Grind"], ["Frustration"], ["Magnet Rise"]] + }, { + "species": "Klinklang", + "item": ["Electrium Z", "Lum Berry"], + "ability": ["Clear Body"], + "happiness": 0, + "evs": {"hp": 104, "atk": 252, "spe": 152}, + "nature": "Adamant", + "moves": [["Shift Gear"], ["Gear Grind"], ["Frustration"], ["Wild Charge"]] + }] + }, + "malamar": { + "flags": {}, + "sets": [{ + "species": "Malamar", + "item": ["Normalium Z"], + "ability": ["Contrary"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Happy Hour"], ["Superpower"], ["Knock Off"], ["Psycho Cut"]] + }, { + "species": "Malamar", + "item": ["Leftovers"], + "ability": ["Contrary"], + "evs": {"hp": 252, "spd": 252, "spe": 4}, + "nature": "Careful", + "moves": [["Rest"], ["Superpower"], ["Knock Off"], ["Sleep Talk"]] + }] + }, + "medicham": { + "flags": {}, + "sets": [{ + "species": "Medicham", + "item": ["Life Orb"], + "ability": ["Pure Power"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["Thunder Punch"], ["Zen Headbutt"], ["High Jump Kick"]] + }, { + "species": "Medicham", + "item": ["Choice Scarf"], + "ability": ["Pure Power"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Thunder Punch"], ["Trick"], ["Zen Headbutt"], ["High Jump Kick"]] + }] + }, + "minior": { + "flags": {}, + "sets": [{ + "species": "Minior", + "item": ["White Herb"], + "ability": ["Shields Down"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "ivs": {"hp": 10}, + "nature": "Adamant", + "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Stone Edge"]] + }] + }, + "mismagius": { + "flags": {}, + "sets": [{ + "species": "Mismagius", + "item": ["Ghostium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Dazzling Gleam"], ["Nasty Plot"], ["Taunt"]] + }, { + "species": "Mismagius", + "item": ["Colbur Berry", "Ghostium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hex"], ["Dazzling Gleam"], ["Nasty Plot"], ["Will-O-Wisp"]] + }] + }, + "omastar": { + "flags": {}, + "sets": [{ + "species": "Omastar", + "item": ["Focus Sash"], + "ability": ["Weak Armor"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Shell Smash"]] + }, { + "species": "Omastar", + "item": ["Waterium Z"], + "ability": ["Swift Swim"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Hydro Pump"], ["Earth Power"], ["Shell Smash"]] + }, { + "species": "Omastar", + "item": ["Leftovers"], + "ability": ["Swift Swim"], + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Spikes"], ["Scald"], ["Toxic"]] + }] + }, + "piloswine": { + "flags": {}, + "sets": [{ + "species": "Piloswine", + "item": ["Eviolite"], + "ability": ["Thick Fat"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Icicle Crash"], ["Earthquake"], ["Ice Shard"]] + }] + }, + "quagsire": { + "flags": {}, + "sets": [{ + "species": "Quagsire", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Curse"], ["Earthquake"], ["Scald"], ["Recover"]] + }] + }, + "rhydon": { + "flags": {}, + "sets": [{ + "species": "Rhydon", + "item": ["Eviolite"], + "ability": ["Reckless"], + "evs": {"hp": 252, "atk": 16, "spd": 240}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Swords Dance"]] + }] + }, + "rotom": { + "flags": {}, + "sets": [{ + "species": "Rotom", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Trick"], ["Shadow Ball"]] + }, { + "species": "Rotom", + "item": ["Iapapa Berry", "Ghostium Z"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 88, "spe": 168}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Defog"], ["Hex"], ["Will-O-Wisp"], ["Volt Switch", "Pain Split"]] + }] + }, + "samurott": { + "flags": {}, + "sets": [{ + "species": "Samurott", + "item": ["Buginium Z"], + "ability": ["Torrent"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Aqua Jet"], ["Waterfall"], ["Swords Dance"], ["Megahorn"]] + }] + }, + "sceptile": { + "flags": {}, + "sets": [{ + "species": "Sceptile", + "item": ["Choice Specs"], + "ability": ["Overgrow"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Giga Drain"], ["Focus Blast"], ["Hidden Power Ice"]] + }, { + "species": "Sceptile", + "item": ["Life Orb"], + "ability": ["Overgrow"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 30}, + "nature": "Hasty", + "moves": [["Leaf Storm"], ["Giga Drain"], ["Hidden Power Ice"], ["Earthquake"]] + }] + }, + "scrafty": { + "flags": {}, + "sets": [{ + "species": "Scrafty", + "item": ["Steelium Z"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Knock Off"], ["Dragon Dance"], ["Iron Tail"]] + }, { + "species": "Scrafty", + "item": ["Chople Berry"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Knock Off"], ["High Jump Kick"], ["Drain Punch"]] + }, { + "species": "Scrafty", + "item": ["Leftovers"], + "ability": ["Shed Skin"], + "evs": {"hp": 252, "spd": 244, "spe": 12}, + "nature": "Careful", + "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Rest"]] + }] + }, + "scyther": { + "flags": {}, + "sets": [{ + "species": "Scyther", + "item": ["Choice Scarf"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Aerial Ace"], ["Knock Off"], ["U-turn"], ["Bug Bite"]] + }] + }, + "shuckle": { + "flags": {}, + "sets": [{ + "species": "Shuckle", + "item": ["Mental Herb"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Encore"], ["Toxic"]] + }] + }, + "sigilyph": { + "flags": {}, + "sets": [{ + "species": "Sigilyph", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Dark Pulse"], ["Energy Ball"]] + }, { + "species": "Sigilyph", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Energy Ball"], ["Defog"]] + }] + }, + "silvallysteel": { + "flags": {}, + "sets": [{ + "species": "Silvally-Steel", + "item": ["Steel Memory"], + "ability": ["RKS System"], + "evs": {"hp": 252, "spd": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Defog"], ["Flamethrower"], ["Toxic"], ["Parting Shot"]] + }] + }, + "slowking": { + "flags": {}, + "sets": [{ + "species": "Slowking", + "item": ["Assault Vest"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "spa": 252, "spe": 8}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Scald"], ["Future Sight"], ["Fire Blast"], ["Dragon Tail"]] + }, { + "species": "Slowking", + "item": ["Life Orb", "Colbur Berry"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spa": 252}, + "ivs": {"atk": 0, "spe": 0}, + "nature": "Quiet", + "moves": [["Scald"], ["Psychic"], ["Trick Room"], ["Nasty Plot"]] + }] + }, + "slowbro": { + "flags": {}, + "sets": [{ + "species": "Slowbro", + "item": ["Colbur Berry", "Psychium Z"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Slack Off"], ["Scald"], ["Psyshock"], ["Toxic"]] + }, { + "species": "Slowbro", + "item": ["Colbur Berry"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Slack Off"], ["Scald"], ["Psyshock"], ["Calm Mind"]] + }] + }, + "smeargle": { + "flags": {}, + "sets": [{ + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Jolly", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Taunt"], ["Spore"]] + }] + }, + "sneasel": { + "flags": {}, + "sets": [{ + "species": "Sneasel", + "item": ["Choice Band"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Pursuit"], ["Icicle Crash"], ["Ice Shard"]] + }] + }, + "steelix": { + "flags": {}, + "sets": [{ + "species": "Steelix", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 244, "atk": 16, "spd": 248}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Earthquake"], ["Heavy Slam"], ["Toxic"]] + }] + }, + "uxie": { + "flags": {}, + "sets": [{ + "species": "Uxie", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 120, "spe": 136}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["U-turn"], ["Psychic"], ["Protect"]] + }] + }, + "vanilluxe": { + "flags": {}, + "sets": [{ + "species": "Vanilluxe", + "item": ["Choice Specs"], + "ability": ["Snow Warning"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Blizzard"], ["Freeze-Dry"], ["Flash Cannon"], ["Hidden Power Ground"]] + }, { + "species": "Vanilluxe", + "item": ["Choice Scarf"], + "ability": ["Snow Warning"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Blizzard"], ["Freeze-Dry"], ["Flash Cannon"], ["Hidden Power Ground"]] + }] + }, + "vaporeon": { + "flags": {}, + "sets": [{ + "species": "Vaporeon", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 192, "def": 252, "spd": 64}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Wish"], ["Protect"], ["Scald"], ["Toxic"]] + }, { + "species": "Vaporeon", + "item": ["Normalium Z"], + "ability": ["Water Absorb"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"], ["Celebrate"]] + }] + }, + "vileplume": { + "flags": {}, + "sets": [{ + "species": "Vileplume", + "item": ["Black Sludge"], + "ability": ["Effect Spore"], + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Strength Sap"], ["Giga Drain"], ["Sludge Bomb"], ["Aromatherapy"]] + }] + }, + "vikavolt": { + "flags": {}, + "sets": [{ + "species": "Vikavolt", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 252, "spa": 136, "spd": 44, "spe": 76}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Bug Buzz"], ["Volt Switch"], ["Energy Ball"], ["Roost"]] + }, { + "species": "Vikavolt", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"hp": 176, "def": 4, "spa": 252, "spe": 76}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Bug Buzz"], ["Volt Switch"], ["Energy Ball"], ["Thunderbolt"]] + }, { + "species": "Vikavolt", + "item": ["Buginium Z"], + "ability": ["Levitate"], + "evs": {"hp": 176, "def": 4, "spa": 252, "spe": 76}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Roost"], ["Bug Buzz"], ["Energy Ball"], ["Volt Switch"]] + }] + }, + "vivillonfancy": { + "flags": {}, + "sets": [{ + "species": "Vivillon-Fancy", + "item": ["Flyinium Z"], + "ability": ["Compound Eyes"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Sleep Powder"], ["Hurricane"], ["Substitute"]] + }] + }, + "vivillon": { + "flags": {}, + "sets": [{ + "species": "Vivillon", + "item": ["Leftovers"], + "ability": ["Compound Eyes"], + "evs": {"hp": 16, "spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Sleep Powder"], ["Quiver Dance"], ["Hurricane"]] + }, { + "species": "Vivillon", + "item": ["Focus Sash"], + "ability": ["Compound Eyes"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Sleep Powder"], ["Hurricane"], ["Energy Ball"]] + }] + }, + "whimsicott": { + "flags": {}, + "sets": [{ + "species": "Whimsicott", + "item": ["Choice Specs"], + "ability": ["Infiltrator"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Energy Ball"], ["Moonblast"], ["Psychic"], ["U-turn"]] + }, { + "species": "Whimsicott", + "item": ["Life Orb"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Energy Ball"], ["Moonblast"], ["Psychic"], ["Defog"]] + }, { + "species": "Whimsicott", + "item": ["Pixie Plate"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Giga Drain"], ["Moonblast"], ["Encore"], ["U-turn"]] + }, { + "species": "Whimsicott", + "item": ["Normalium Z"], + "ability": ["Infiltrator"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Growth"], ["Moonblast"], ["Energy Ball"], ["Psychic"]] + }] + }, + "xatu": { + "flags": {}, + "sets": [{ + "species": "Xatu", + "item": ["Rocky Helmet"], + "ability": ["Magic Bounce"], + "evs": {"hp": 252, "def": 212, "spe": 44}, + "nature": "Timid", + "moves": [["Psychic"], ["U-turn"], ["Grass Knot"], ["Roost"]] + }, { + "species": "Xatu", + "item": ["Colbur Berry"], + "ability": ["Magic Bounce"], + "evs": {"hp": 252, "def": 212, "spe": 44}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Psychic"], ["Signal Beam"], ["Roost"]] + }] + }, + "charizard": { + "flags": {}, + "sets": [{ + "species": "Charizard", + "item": ["Normalium Z"], + "ability": ["Solar Power"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Celebrate"], ["Fire Blast"], ["Air Slash"], ["Focus Blast"]] + }, { + "species": "Charizard", + "item": ["Firium Z"], + "ability": ["Solar Power"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Sunny Day"], ["Fire Blast"], ["Solar Beam"], ["Air Slash"]] + }] + }, + "gallade": { + "flags": {}, + "sets": [{ + "species": "Gallade", + "item": ["Lum Berry"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Zen Headbutt"], ["Leaf Blade"]] + }, { + "species": "Gallade", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Memento"], ["Close Combat"], ["Zen Headbutt"], ["Knock Off"]] + }] + }, + "kabutops": { + "flags": {}, + "sets": [{ + "species": "Kabutops", + "item": ["Rockium Z"], + "ability": ["Swift Swim"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Liquidation"], ["Stone Edge"], ["Aqua Jet"]] + }] + }, + "haunter": { + "flags": {}, + "sets": [{ + "species": "Haunter", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Dazzling Gleam"], ["Destiny Bond"]] + }, { + "species": "Haunter", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Dazzling Gleam"], ["Trick"]] + }, { + "species": "Haunter", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Substitute"], ["Pain Split"], ["Shadow Ball"], ["Sludge Bomb"]] + }] + }, + "absol": { + "flags": {}, + "sets": [{ + "species": "Absol", + "item": ["Life Orb"], + "ability": ["Super Luck"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Sucker Punch"], ["Knock Off"], ["Superpower", "Iron Tail"]] + }] + }, + "sawk": { + "flags": {}, + "sets": [{ + "species": "Sawk", + "item": ["Choice Scarf"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Knock Off"], ["Earthquake"], ["Ice Punch"]] + }, { + "species": "Sawk", + "item": ["Choice Band"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Knock Off"], ["Zen Headbutt"], ["Poison Jab"]] + }] + }, + "drampa": { + "flags": {}, + "sets": [{ + "species": "Drampa", + "item": ["Choice Specs"], + "ability": ["Berserk"], + "evs": {"hp": 136, "spa": 252, "spe": 120}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Hyper Voice"], ["Energy Ball"], ["Fire Blast"], ["Draco Meteor"]] + }] + }, + "hitmontop": { + "flags": {}, + "sets": [{ + "species": "Hitmontop", + "item": ["Leftovers"], + "ability": ["Intimidate"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Impish", + "moves": [["Close Combat"], ["Rapid Spin"], ["Foresight"], ["Toxic"]] + }] + }, + "magmortar": { + "flags": {}, + "sets": [{ + "species": "Magmortar", + "item": ["Assault Vest"], + "ability": ["Vital Spirit"], + "evs": {"hp": 64, "spa": 252, "spe": 192}, + "nature": "Mild", + "moves": [["Fire Blast"], ["Thunderbolt"], ["Hidden Power Grass"], ["Earthquake"]] + }, { + "species": "Magmortar", + "item": ["Fightinium Z"], + "ability": ["Vital Spirit"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Mild", + "moves": [["Fire Blast"], ["Thunderbolt"], ["Focus Blast"], ["Flame Charge"]] + }] + }, + "mesprit": { + "flags": {}, + "sets": [{ + "species": "Mesprit", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["U-turn"], ["Psyshock"], ["Ice Beam"], ["Healing Wish"]] + }] + }, + "ferroseed": { + "flags": {}, + "sets": [{ + "species": "Ferroseed", + "item": ["Eviolite"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "ivs": {"spe": 0}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Leech Seed"], ["Protect"], ["Gyro Ball"]] + }] + }, + "gourgeistsuper": { + "flags": {}, + "sets": [{ + "species": "Gourgeist-Super", + "item": ["Colbur Berry"], + "ability": ["Frisk"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Leech Seed"], ["Will-O-Wisp"], ["Synthesis"], ["Foul Play"]] + }] + }, + "spiritomb": { + "flags": {}, + "sets": [{ + "species": "Spiritomb", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "ivs": {"atk": 0}, + "nature": "Impish", + "moves": [["Rest"], ["Sleep Talk"], ["Calm Mind"], ["Dark Pulse"]] + }] + }, + "probopass": { + "flags": {}, + "sets": [{ + "species": "Probopass", + "item": ["Air Balloon"], + "ability": ["Magnet Pull"], + "evs": {"hp": 172, "spa": 252, "spe": 84}, + "nature": "Modest", + "moves": [["Power Gem"], ["Magnet Rise"], ["Earth Power"], ["Stealth Rock"]] + }] + }, + "togedemaru": { + "flags": {}, + "sets": [{ + "species": "Togedemaru", + "item": ["Leftovers"], + "ability": ["Lightning Rod"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Wish"], ["Spiky Shield"], ["Zing Zap", "U-turn"], ["Super Fang"]] + }] + }, + "ludicolo": { + "flags": {}, + "sets": [{ + "species": "Ludicolo", + "item": ["Life Orb"], + "ability": ["Swift Swim"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Rain Dance"], ["Hydro Pump"], ["Giga Drain"], ["Ice Beam"]] + }] + }, + "exeggutoralola": { + "flags": {}, + "sets": [{ + "species": "Exeggutor-Alola", + "item": ["Dragonium Z"], + "ability": ["Frisk"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"atk": 0, "spe": 0}, + "nature": "Quiet", + "moves": [["Giga Drain"], ["Draco Meteor"], ["Flamethrower"], ["Trick Room"]] + }] + }, + "typenull": { + "flags": {}, + "sets": [{ + "species": "Type: Null", + "item": ["Eviolite"], + "ability": ["Battle Armor"], + "happiness": 0, + "evs": {"hp": 252, "spd": 244, "spe": 12}, + "nature": "Careful", + "moves": [["Swords Dance"], ["Iron Defense"], ["Frustration"], ["Rest"]] + }, { + "species": "Type: Null", + "item": ["Eviolite"], + "ability": ["Battle Armor"], + "happiness": 0, + "evs": {"hp": 252, "spd": 244, "spe": 12}, + "nature": "Careful", + "moves": [["Sleep Talk"], ["U-turn"], ["Frustration"], ["Rest"]] + }] + }, + "altaria": { + "flags": {}, + "sets": [{ + "species": "Altaria", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 252, "def": 240, "spe": 16}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Defog"], ["Roost"], ["Flamethrower"], ["Toxic"]] + }] + }, + "ditto": { + "flags": {}, + "sets": [{ + "species": "Ditto", + "item": ["Choice Scarf"], + "ability": ["Imposter"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "ivs": {"atk": 30, "spa": 30, "spe": 0}, + "nature": "Relaxed", + "moves": [["Transform"]] + }] + }, + "passimian": { + "flags": {}, + "sets": [{ + "species": "Passimian", + "item": ["Choice Scarf"], + "ability": ["Receiver"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["U-turn"], ["Gunk Shot"], ["Knock Off"]] + }, { + "species": "Passimian", + "item": ["Choice Band"], + "ability": ["Receiver"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Close Combat"], ["U-turn"], ["Gunk Shot"], ["Knock Off"]] + }] + }, + "palossand": { + "flags": {}, + "sets": [{ + "species": "Palossand", + "item": ["Colbur Berry"], + "ability": ["Water Compaction"], + "evs": {"hp": 252, "def": 252, "spe": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Earth Power"], ["Shadow Ball"], ["Shore Up"]] + }] + }, + "zangoose": { + "flags": {}, + "sets": [{ + "species": "Zangoose", + "item": ["Sitrus Berry"], + "ability": ["Immunity"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Belly Drum"], ["Quick Attack"], ["Knock Off"], ["Close Combat"]] + }] + }, + "lycanroc": { + "flags": {}, + "sets": [{ + "species": "Lycanroc", + "item": ["Focus Sash"], + "ability": ["Keen Eye"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Stealth Rock"], ["Taunt"], ["Endeavor"], ["Stone Edge"]] + }] + } + }, + "PU": { + "altaria": { + "flags": {}, + "sets": [{ + "species": "Altaria", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 252, "spd": 240, "spe": 16}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Dragon Pulse"], ["Roost"], ["Flamethrower", "Toxic"], ["Defog"]] + }] + }, + "articuno": { + "flags": {}, + "sets": [{ + "species": "Articuno", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Substitute"], ["Roost"], ["Hurricane"], ["Freeze-Dry"]] + }, { + "species": "Articuno", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 248, "spd": 220, "spe": 40}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Heal Bell"], ["Roost"], ["Defog", "Toxic"], ["Freeze-Dry"]] + }] + }, + "mesprit": { + "flags": {}, + "sets": [{ + "species": "Mesprit", + "item": ["Colbur Berry"], + "ability": ["Levitate"], + "evs": {"hp": 252, "def": 240, "spe": 16}, + "nature": "Bold", + "moves": [["Psychic"], ["U-turn"], ["Stealth Rock"], ["Healing Wish"]] + }, { + "species": "Mesprit", + "item": ["Colbur Berry"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": ["Modest", "Timid"], + "moves": [["Psychic"], ["Stealth Rock"], ["Healing Wish", "U-turn"], ["Dazzling Gleam"]] + }, { + "species": "Mesprit", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Ice Beam"], ["Dazzling Gleam", "Trick"], ["U-turn"]] + }, { + "species": "Mesprit", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Healing Wish"], ["Hidden Power Ground", "U-turn"]] + }, { + "species": "Mesprit", + "item": ["Icium Z", "Leftovers"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Ice Beam"], ["Hidden Power Ground", "Substitute"], ["Calm Mind"]] + }] + }, + "skuntank": { + "flags": {}, + "sets": [{ + "species": "Skuntank", + "item": ["Black Sludge", "Darkinium Z"], + "ability": ["Aftermath"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Dark Pulse"], ["Acid Spray", "Sludge Bomb"], ["Taunt"], ["Defog"]] + }, { + "species": "Skuntank", + "item": ["Black Glasses", "Rocky Helmet", "Black Sludge"], + "ability": ["Aftermath"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Sucker Punch"], ["Pursuit"], ["Poison Jab"], ["Defog"]] + }, { + "species": "Skuntank", + "item": ["Black Glasses", "Rocky Helmet", "Black Sludge", "Darkinium Z"], + "ability": ["Aftermath"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Sucker Punch"], ["Pursuit"], ["Poison Jab", "Defog"], ["Crunch"]] + }] + }, + "carracosta": { + "flags": {}, + "sets": [{ + "species": "Carracosta", + "item": ["Rockium Z", "White Herb", "Life Orb"], + "ability": ["Solid Rock"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Hydro Pump"], ["Aqua Jet"], ["Stone Edge"]] + }, { + "species": "Carracosta", + "item": ["Leftovers"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Scald"], ["Rock Slide"], ["Toxic", "Knock Off"]] + }] + }, + "musharna": { + "flags": {}, + "sets": [{ + "species": "Musharna", + "item": ["Colbur Berry"], + "ability": ["Synchronize"], + "evs": {"hp": 248, "def": 252, "spa": 8}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Barrier"], ["Calm Mind"], ["Stored Power"], ["Moonlight"]] + }, { + "species": "Musharna", + "item": ["Fairium Z", "Colbur Berry"], + "ability": ["Synchronize"], + "evs": {"hp": 248, "def": 252, "spa": 8}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Dazzling Gleam"], ["Calm Mind"], ["Psychic"], ["Moonlight"]] + }] + }, + "weezing": { + "flags": {}, + "sets": [{ + "species": "Weezing", + "item": ["Black Sludge", "Rocky Helmet"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Pain Split", "Thunderbolt"], ["Sludge Bomb"], ["Taunt", "Will-O-Wisp"], ["Toxic Spikes"]] + }] + }, + "gurdurr": { + "flags": {}, + "sets": [{ + "species": "Gurdurr", + "item": ["Eviolite"], + "ability": ["Guts"], + "evs": {"hp": 248, "atk": 56, "def": 204}, + "nature": "Adamant", + "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Mach Punch"]] + }] + }, + "jynx": { + "flags": {}, + "sets": [{ + "species": "Jynx", + "item": ["Focus Sash", "Normalium Z"], + "ability": ["Dry Skin"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Nasty Plot", "Focus Blast"], ["Ice Beam"], ["Psyshock"], ["Lovely Kiss"]] + }, { + "species": "Jynx", + "item": ["Normalium Z", "Leftovers"], + "ability": ["Dry Skin"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Substitute"], ["Nasty Plot"], ["Lovely Kiss"]] + }] + }, + "lanturn": { + "flags": {}, + "sets": [{ + "species": "Lanturn", + "item": ["Assault Vest"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 132, "spe": 124}, + "nature": "Modest", + "moves": [["Scald"], ["Volt Switch"], ["Ice Beam"], ["Discharge"]] + }, { + "species": "Lanturn", + "item": ["Leftovers"], + "ability": ["Volt Absorb"], + "evs": {"hp": 40, "def": 140, "spd": 204, "spe": 124}, + "nature": "Calm", + "moves": [["Scald"], ["Volt Switch"], ["Heal Bell", "Protect"], ["Toxic"]] + }] + }, + "lilligant": { + "flags": {}, + "sets": [{ + "species": "Lilligant", + "item": ["Normalium Z"], + "ability": ["Chlorophyll"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hyper Beam"]] + }, { + "species": "Lilligant", + "item": ["Life Orb", "Grassium Z"], + "ability": ["Chlorophyll"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Sleep Powder"], ["Giga Drain"], ["Hidden Power Rock"]] + }, { + "species": "Lilligant", + "item": ["Choice Scarf"], + "ability": ["Chlorophyll"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Energy Ball"], ["Healing Wish"], ["Hidden Power Rock"]] + }, { + "species": "Lilligant", + "item": ["Choice Specs"], + "ability": ["Own Tempo"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Petal Dance"], ["Giga Drain"], ["Healing Wish"], ["Hidden Power Rock"]] + }] + }, + "bellossom": { + "flags": {}, + "sets": [{ + "species": "Bellossom", + "item": ["Grassium Z"], + "ability": ["Chlorophyll"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Strength Sap"], ["Giga Drain"], ["Moonblast", "Safeguard"]] + }] + }, + "sableye": { + "flags": {}, + "sets": [{ + "species": "Sableye", + "item": ["Leftovers"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Will-O-Wisp"], ["Taunt"], ["Recover"], ["Foul Play", "Knock Off"]] + }] + }, + "exeggutoralola": { + "flags": {}, + "sets": [{ + "species": "Exeggutor-Alola", + "item": ["Choice Specs"], + "ability": ["Frisk"], + "evs": {"hp": 212, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Leaf Storm"], ["Draco Meteor"], ["Flamethrower"], ["Sludge Bomb", "Giga Drain"]] + }] + }, + "golurk": { + "flags": {}, + "sets": [{ + "species": "Golurk", + "item": ["Colbur Berry"], + "ability": ["No Guard"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Dynamic Punch"], ["Ice Punch", "Stone Edge"]] + }] + }, + "hitmonchan": { + "flags": {}, + "sets": [{ + "species": "Hitmonchan", + "item": ["Assault Vest"], + "ability": ["Iron Fist"], + "evs": {"hp": 244, "atk": 152, "spe": 112}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Mach Punch"], ["Stone Edge", "Thunder Punch"], ["Rapid Spin"]] + }] + }, + "kangaskhan": { + "flags": {}, + "sets": [{ + "species": "Kangaskhan", + "item": ["Silk Scarf", "Normalium Z"], + "ability": ["Scrappy"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Fake Out"], ["Double-Edge"], ["Sucker Punch"], ["Earthquake"]] + }, { + "species": "Kangaskhan", + "item": ["Fightinium Z"], + "ability": ["Scrappy"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Fake Out", "Power-Up Punch"], ["Double-Edge"], ["Sucker Punch"], ["Focus Punch"]] + }] + }, + "primeape": { + "flags": {}, + "sets": [{ + "species": "Primeape", + "item": ["Choice Scarf"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["U-turn"], ["Earthquake", "Gunk Shot"], ["Stone Edge"]] + }, { + "species": "Primeape", + "item": ["Choice Band"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["U-turn"], ["Earthquake", "Gunk Shot"], ["Stone Edge"]] + }] + }, + "pyroar": { + "flags": {}, + "sets": [{ + "species": "Pyroar", + "item": ["Life Orb", "Firium Z"], + "ability": ["Unnerve"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Will-O-Wisp", "Taunt"]] + }, { + "species": "Pyroar", + "item": ["Choice Specs"], + "ability": ["Unnerve"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Flamethrower", "Overheat"]] + }, { + "species": "Pyroar", + "item": ["Choice Scarf"], + "ability": ["Unnerve"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Hyper Voice"], ["Hidden Power Grass"], ["Flamethrower"]] + }] + }, + "regirock": { + "flags": {}, + "sets": [{ + "species": "Regirock", + "item": ["Leftovers"], + "ability": ["Clear Body"], + "evs": {"hp": 248, "def": 56, "spd": 204}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Rock Slide", "Stone Edge"], ["Earthquake"], ["Toxic", "Protect"]] + }] + }, + "shiftry": { + "flags": {}, + "sets": [{ + "species": "Shiftry", + "item": ["Life Orb"], + "ability": ["Chlorophyll"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Lonely", + "moves": [["Knock Off"], ["Leaf Storm"], ["Sucker Punch"], ["Defog"]] + }, { + "species": "Shiftry", + "item": ["Grassium Z", "Life Orb"], + "ability": ["Chlorophyll"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": ["Adamant", "Jolly"], + "moves": [["Swords Dance"], ["Knock Off"], ["Seed Bomb"], ["Sucker Punch"]] + }, { + "species": "Shiftry", + "item": ["Choice Scarf"], + "ability": ["Pickpocket"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Leaf Blade"], ["Rock Slide"], ["Explosion", "Defog"]] + }, { + "species": "Shiftry", + "item": ["Choice Scarf"], + "ability": ["Pickpocket"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Leaf Blade"], ["Rock Slide"], ["Defog"]] + }] + }, + "abomasnow": { + "flags": {}, + "sets": [{ + "species": "Abomasnow", + "item": ["Life Orb"], + "ability": ["Snow Warning"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Rash", + "moves": [["Blizzard"], ["Giga Drain", "Wood Hammer"], ["Earthquake"], ["Ice Shard"]] + }, { + "species": "Abomasnow", + "item": ["Choice Scarf"], + "ability": ["Snow Warning"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Blizzard"], ["Giga Drain"], ["Earthquake"], ["Focus Blast"]] + }, { + "species": "Abomasnow", + "item": ["Life Orb", "Grassium Z"], + "ability": ["Snow Warning"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Seed Bomb", "Wood Hammer"], ["Earthquake"], ["Ice Shard"]] + }] + }, + "absol": { + "flags": {}, + "sets": [{ + "species": "Absol", + "item": ["Fairium Z", "Darkinium Z", "Life Orb"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Knock Off"], ["Sucker Punch"], ["Play Rough"]] + }] + }, + "gourgeistsuper": { + "flags": {}, + "sets": [{ + "species": "Gourgeist-Super", + "item": ["Colbur Berry"], + "ability": ["Frisk"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Will-O-Wisp"], ["Synthesis"], ["Foul Play"], ["Leech Seed", "Rock Slide"]] + }] + }, + "granbull": { + "flags": {}, + "sets": [{ + "species": "Granbull", + "item": ["Normalium Z", "Leftovers"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Play Rough"], ["Earthquake"], ["Thunder Wave"], ["Heal Bell"]] + }, { + "species": "Granbull", + "item": ["Choice Band"], + "ability": ["Intimidate"], + "evs": {"hp": 172, "atk": 252, "spe": 84}, + "nature": "Adamant", + "moves": [["Play Rough"], ["Earthquake"], ["Fire Punch"], ["Stone Edge"]] + }] + }, + "kabutops": { + "flags": {}, + "sets": [{ + "species": "Kabutops", + "item": ["Life Orb", "Lum Berry", "Rockium Z"], + "ability": ["Swift Swim"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Stone Edge"], ["Waterfall"], ["Aqua Jet"]] + }, { + "species": "Kabutops", + "item": ["Choice Scarf"], + "ability": ["Swift Swim"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Rapid Spin"], ["Stone Edge"], ["Waterfall"], ["Knock Off"]] + }] + }, + "lycanroc": { + "flags": {}, + "sets": [{ + "species": "Lycanroc", + "item": ["Lycanium Z", "Life Orb"], + "ability": ["Sand Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Stone Edge"], ["Drill Run"], ["Accelerock"]] + }] + }, + "raichualola": { + "flags": {}, + "sets": [{ + "species": "Raichu-Alola", + "item": ["Life Orb", "Aloraichium Z"], + "ability": ["Surge Surfer"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Thunderbolt"], ["Psychic", "Psyshock"], ["Focus Blast"]] + }] + }, + "raticatealola": { + "flags": {}, + "sets": [{ + "species": "Raticate-Alola", + "item": ["Darkinium Z", "Normalium Z"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Double-Edge"], ["Sucker Punch"], ["Knock Off"]] + }] + }, + "typenull": { + "flags": {}, + "sets": [{ + "species": "Type: Null", + "item": ["Eviolite"], + "ability": ["Battle Armor"], + "evs": {"hp": 248, "def": 80, "spd": 180}, + "nature": "Careful", + "moves": [["Swords Dance", "Toxic", "U-turn"], ["Rest"], ["Sleep Talk"], ["Return"]] + }] + }, + "cradily": { + "flags": {}, + "sets": [{ + "species": "Cradily", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Recover"], ["Giga Drain"], ["Rock Slide"]] + }] + }, + "jumpluff": { + "flags": {}, + "sets": [{ + "species": "Jumpluff", + "item": [""], + "ability": ["Infiltrator"], + "evs": {"atk": 252, "def": 4, "spd": 252}, + "nature": "Jolly", + "moves": [["U-turn", "Swords Dance"], ["Acrobatics"], ["Sleep Powder"], ["Strength Sap"]] + }] + }, + "floatzel": { + "flags": {}, + "sets": [{ + "species": "Floatzel", + "item": ["Waterium Z"], + "ability": ["Water Veil"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Bulk Up"], ["Waterfall"], ["Ice Punch"], ["Aqua Jet"]] + }, { + "species": "Floatzel", + "item": ["Normalium Z"], + "ability": ["Water Veil"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Bulk Up"], ["Waterfall"], ["Return"], ["Aqua Jet"]] + }, { + "species": "Floatzel", + "item": ["Life Orb"], + "ability": ["Water Veil"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Focus Blast"], ["Taunt"]] + }] + }, + "haunter": { + "flags": {}, + "sets": [{ + "species": "Haunter", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Bomb"], ["Shadow Ball"], ["Trick"], ["Destiny Bond"]] + }, { + "species": "Haunter", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Bomb"], ["Shadow Ball"], ["Substitute"], ["Destiny Bond", "Hidden Power Ground"]] + }, { + "species": "Haunter", + "item": ["Electrium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Bomb"], ["Shadow Ball"], ["Substitute"], ["Thunder"]] + }] + }, + "liepard": { + "flags": {}, + "sets": [{ + "species": "Liepard", + "item": ["Choice Band"], + "ability": ["Limber"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Pursuit"], ["Play Rough"], ["U-turn", "Sucker Punch", "Copycat"]] + }] + }, + "ludicolo": { + "flags": {}, + "sets": [{ + "species": "Ludicolo", + "item": ["Life Orb", "Waterium Z"], + "ability": ["Swift Swim"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Giga Drain"], ["Ice Beam"], ["Rain Dance"]] + }] + }, + "oricoriosensu": { + "flags": {}, + "sets": [{ + "species": "Oricorio-Sensu", + "item": ["Choice Scarf"], + "ability": ["Dancer"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Revelation Dance"], ["Hurricane"], ["U-turn"], ["Toxic", "Defog"]] + }, { + "species": "Oricorio-Sensu", + "item": ["Flyinium Z", "Leftovers"], + "ability": ["Dancer"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Revelation Dance"], ["Hurricane"], ["Substitute"], ["Calm Mind"]] + }, { + "species": "Oricorio-Sensu", + "item": ["Flyinium Z", "Rocky Helmet"], + "ability": ["Dancer"], + "evs": {"hp": 252, "def": 168, "spe": 88}, + "nature": "Timid", + "moves": [["Taunt"], ["Hurricane"], ["Roost"], ["Calm Mind"]] + }] + }, + "persianalola": { + "flags": {}, + "sets": [{ + "species": "Persian-Alola", + "item": ["Darkinium Z", "Leftovers"], + "ability": ["Fur Coat"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Jolly", + "moves": [["Foul Play"], ["Parting Shot"], ["Taunt"], ["Toxic"]] + }] + }, + "pinsir": { + "flags": {}, + "sets": [{ + "species": "Pinsir", + "item": ["Life Orb", "Lum Berry"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance", "Stealth Rock"], ["X-Scissor"], ["Earthquake"], ["Stone Edge"]] + }, { + "species": "Pinsir", + "item": ["Normalium Z"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Me First"], ["X-Scissor"], ["Earthquake"], ["Stone Edge"]] + }] + }, + "silvallydragon": { + "flags": {}, + "sets": [{ + "species": "Silvally-Dragon", + "item": ["Dragon Memory"], + "ability": ["RKS System"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Parting Shot"], ["Defog"], ["Flamethrower"]] + }] + }, + "silvallyfairy": { + "flags": {}, + "sets": [{ + "species": "Silvally-Fairy", + "item": ["Fairy Memory"], + "ability": ["RKS System"], + "evs": {"hp": 48, "atk": 208, "spe": 252}, + "nature": "Jolly", + "moves": [["Multi-Attack"], ["Parting Shot"], ["Defog"], ["Thunderbolt"]] + }] + }, + "swanna": { + "flags": {}, + "sets": [{ + "species": "Swanna", + "item": ["Life Orb", "Flyinium Z"], + "ability": ["Big Pecks"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Hurricane"], ["Scald"], ["Roost"], ["Defog"]] + }, { + "species": "Swanna", + "item": ["Choice Scarf"], + "ability": ["Hydration"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Brave Bird"], ["Scald"], ["Hurricane"], ["Defog"]] + }] + }, + "togedemaru": { + "flags": {}, + "sets": [{ + "species": "Togedemaru", + "item": ["Choice Scarf"], + "ability": ["Lightning Rod"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["Toxic"], ["U-turn"], ["Zing Zap"]] + }] + }, + "zangoose": { + "flags": {}, + "sets": [{ + "species": "Zangoose", + "item": ["Toxic Orb"], + "ability": ["Toxic Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": ["Jolly", "Adamant"], + "moves": [["Facade"], ["Knock Off"], ["Quick Attack"], ["Close Combat", "Swords Dance"]] + }] + }, + "aggron": { + "flags": {}, + "sets": [{ + "species": "Aggron", + "item": ["Choice Band"], + "ability": ["Rock Head"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": ["Adamant", "Jolly"], + "moves": [["Head Smash"], ["Heavy Slam"], ["Ice Punch", "Earthquake"], ["Superpower"]] + }, { + "species": "Aggron", + "item": ["Rockium Z", "Shuca Berry", "Chople Berry"], + "ability": ["Rock Head"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": ["Adamant", "Jolly"], + "moves": [["Head Smash"], ["Heavy Slam"], ["Stealth Rock"], ["Taunt"]] + }] + }, + "clefairy": { + "flags": {}, + "sets": [{ + "species": "Clefairy", + "item": ["Eviolite"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "ivs": {"atk": 0}, + "nature": "Calm", + "moves": [["Stealth Rock"], ["Soft-Boiled"], ["Moonblast"], ["Calm Mind", "Encore", "Thunder Wave"]] + }] + }, + "drampa": { + "flags": {}, + "sets": [{ + "species": "Drampa", + "item": ["Choice Specs"], + "ability": ["Sap Sipper"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Hyper Voice"], ["Fire Blast"], ["Focus Blast", "Dragon Pulse"]] + }] + }, + "dugtrioalola": { + "flags": {}, + "sets": [{ + "species": "Dugtrio-Alola", + "item": ["Leftovers"], + "ability": ["Tangling Hair"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Substitute"], ["Toxic"], ["Earthquake"], ["Iron Head"]] + }, { + "species": "Dugtrio-Alola", + "item": ["Life Orb"], + "ability": ["Tangling Hair"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Sucker Punch"], ["Earthquake"], ["Iron Head"]] + }] + }, + "gorebyss": { + "flags": {}, + "sets": [{ + "species": "Gorebyss", + "item": ["White Herb"], + "ability": ["Swift Swim"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]] + }] + }, + "kecleon": { + "flags": {}, + "sets": [{ + "species": "Kecleon", + "item": ["Assault Vest"], + "ability": ["Protean"], + "evs": {"hp": 172, "atk": 252, "spe": 84}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Drain Punch"], ["Shadow Sneak"], ["Sucker Punch", "Power-Up Punch"]] + }] + }, + "leafeon": { + "flags": {}, + "sets": [{ + "species": "Leafeon", + "item": ["Normalium Z"], + "ability": ["Chlorophyll"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Leaf Blade"], ["Knock Off"], ["Double-Edge"]] + }] + }, + "manectric": { + "flags": {}, + "sets": [{ + "species": "Manectric", + "item": ["Choice Scarf", "Choice Specs"], + "ability": ["Lightning Rod"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Volt Switch"], ["Overheat", "Flamethrower"], ["Hidden Power Grass"]] + }] + }, + "misdreavus": { + "flags": {}, + "sets": [{ + "species": "Misdreavus", + "item": ["Eviolite"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Hex"], ["Will-O-Wisp"], ["Thunder Wave", "Destiny Bond"], ["Taunt"]] + }] + }, + "pyukumuku": { + "flags": {}, + "sets": [{ + "species": "Pyukumuku", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spe": 4}, + "nature": "Bold", + "moves": [["Toxic"], ["Soak"], ["Recover"], ["Counter"]] + }] + }, + "lurantis": { + "flags": {}, + "sets": [{ + "species": "Lurantis", + "item": ["Leftovers"], + "ability": ["Contrary"], + "evs": {"hp": 252, "def": 252, "spa": 4}, + "ivs": {"atk": 0}, + "nature": "Bold", + "moves": [["Leaf Storm"], ["Superpower"], ["Defog"], ["Synthesis"]] + }] + }, + "mrmime": { + "flags": {}, + "sets": [{ + "species": "Mr. Mime", + "item": ["Life Orb", "Fairium Z"], + "ability": ["Filter"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Dazzling Gleam"], ["Psyshock"], ["Focus Blast"]] + }] + }, + "oricoriopompom": { + "flags": {}, + "sets": [{ + "species": "Oricorio-Pom-Pom", + "item": ["Flyinium Z", "Leftovers", "Rocky Helmet"], + "ability": ["Dancer"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Taunt", "Revelation Dance"], ["Calm Mind"], ["Hurricane"], ["Roost"]] + }] + }, + "throh": { + "flags": {}, + "sets": [{ + "species": "Throh", + "item": ["Leftovers"], + "ability": ["Guts"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Circle Throw"], ["Bulk Up", "Knock Off"], ["Rest"], ["Sleep Talk"]] + }] + }, + "poliwrath": { + "flags": {}, + "sets": [{ + "species": "Poliwrath", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "spa": 160, "spe": 100}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Scald"], ["Focus Blast"], ["Substitute"], ["Toxic"]] + }, { + "species": "Poliwrath", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "spa": 160, "spe": 100}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Scald"], ["Focus Blast"], ["Vacuum Wave"], ["Ice Beam"]] + }] + }, + "probopass": { + "flags": {}, + "sets": [{ + "species": "Probopass", + "item": ["Shuca Berry"], + "ability": ["Magnet Pull"], + "evs": {"hp": 172, "spa": 252, "spe": 84}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Stealth Rock"], ["Volt Switch"], ["Flash Cannon"], ["Earth Power"]] + }] + }, + "mudsdale": { + "flags": {}, + "sets": [{ + "species": "Mudsdale", + "item": ["Choice Band"], + "ability": ["Stamina"], + "evs": {"hp": 132, "atk": 252, "spe": 124}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Heavy Slam"], ["Close Combat"], ["Rock Slide"]] + }, { + "species": "Mudsdale", + "item": ["Leftovers", "Figy Berry"], + "ability": ["Stamina"], + "evs": {"hp": 252, "atk": 56, "def": 44, "spd": 156}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Toxic"], ["Stealth Rock"], ["Rock Slide", "Protect", "Roar"]] + }] + }, + "golem": { + "flags": {}, + "sets": [{ + "species": "Golem", + "item": ["Weakness Policy"], + "ability": ["Sturdy"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Earthquake"], ["Stone Edge", "Rock Blast"], ["Sucker Punch", "Explosion"]] + }] + }, + "kadabra": { + "flags": {}, + "sets": [{ + "species": "Kadabra", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Thunder Wave"], ["Shadow Ball"], ["Counter"]] + }] + }, + "mawile": { + "flags": {}, + "sets": [{ + "species": "Mawile", + "item": ["Leftovers"], + "ability": ["Intimidate"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Play Rough"], ["Super Fang", "Toxic"], ["Pain Split", "Knock Off"]] + }, { + "species": "Mawile", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Play Rough"], ["Iron Head"], ["Swords Dance"], ["Sucker Punch"]] + }] + }, + "munchlax": { + "flags": {}, + "sets": [{ + "species": "Munchlax", + "item": ["Eviolite"], + "ability": ["Thick Fat"], + "evs": {"atk": 4, "def": 252, "spd": 252}, + "nature": "Careful", + "moves": [["Body Slam"], ["Curse"], ["Sleep Talk"], ["Rest"]] + }] + }, + "murkrow": { + "flags": {}, + "sets": [{ + "species": "Murkrow", + "item": ["Flyinium Z"], + "ability": ["Prankster"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Mirror Move"], ["Brave Bird"], ["Sucker Punch"], ["Pursuit", "Protect"]] + }] + }, + "smeargle": { + "flags": {}, + "sets": [{ + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Taunt", "Nuzzle", "Magic Coat"], ["Spore"]] + }] + }, + "rotomfrost": { + "flags": {}, + "sets": [{ + "species": "Rotom-Frost", + "item": ["Icium Z", "Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Pain Split"], ["Blizzard"], ["Thunderbolt"]] + }, { + "species": "Rotom-Frost", + "item": ["Icium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Volt Switch"], ["Blizzard"], ["Thunderbolt"]] + }] + }, + "toucannon": { + "flags": {}, + "sets": [{ + "species": "Toucannon", + "item": ["Life Orb"], + "ability": ["Skill Link"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Rash", + "moves": [["Boomburst"], ["Brave Bird"], ["Overheat"], ["Bullet Seed"]] + }] + }, + "turtonator": { + "flags": {}, + "sets": [{ + "species": "Turtonator", + "item": ["Dragonium Z", "White Herb"], + "ability": ["Shell Armor"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shell Smash"], ["Fire Blast"], ["Draco Meteor"], ["Dragon Pulse", "Earthquake"]] + }] + }, + "ursaring": { + "flags": {}, + "sets": [{ + "species": "Ursaring", + "item": ["Flame Orb"], + "ability": ["Guts"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Facade"], ["Close Combat"], ["Crunch"], ["Swords Dance", "Protect"]] + }] + }, + "audino": { + "flags": {}, + "sets": [{ + "species": "Audino", + "item": ["Leftovers"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Wish"], ["Protect"], ["Knock Off"], ["Toxic", "Encore"]] + }] + }, + "combusken": { + "flags": {}, + "sets": [{ + "species": "Combusken", + "item": ["Fightinium Z", "Life Orb"], + "ability": ["Speed Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Protect"], ["Focus Blast"], ["Fire Blast"], ["Hidden Power Ice"]] + }, { + "species": "Combusken", + "item": ["Firium Z", "Fightinium Z", "Eviolite"], + "ability": ["Speed Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Protect"], ["Swords Dance"], ["Flare Blitz"], ["Sky Uppercut", "Low Kick"]] + }] + }, + "eelektross": { + "flags": {}, + "sets": [{ + "species": "Eelektross", + "item": ["Assault Vest"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Volt Switch"], ["Giga Drain"], ["Flamethrower"], ["Acid Spray", "Knock Off"]] + }] + }, + "ninjask": { + "flags": {}, + "sets": [{ + "species": "Ninjask", + "item": ["Groundium Z"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Leech Life"], ["Aerial Ace"], ["Dig"]] + }] + }, + "sandslash": { + "flags": {}, + "sets": [{ + "species": "Sandslash", + "item": ["Leftovers"], + "ability": ["Sand Rush"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Rapid Spin"], ["Earthquake"], ["Knock Off", "Toxic"]] + }] + }, + "silvallyghost": { + "flags": {}, + "sets": [{ + "species": "Silvally-Ghost", + "item": ["Ghost Memory"], + "ability": ["RKS System"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Ice Beam"], ["Parting Shot"], ["Defog"]] + }] + }, + "silvallywater": { + "flags": {}, + "sets": [{ + "species": "Silvally-Water", + "item": ["Water Memory"], + "ability": ["RKS System"], + "evs": {"hp": 248, "def": 124, "spe": 136}, + "nature": "Bold", + "moves": [["Surf"], ["Ice Beam", "Thunderbolt"], ["Parting Shot"], ["Defog"]] + }] + }, + "tangela": { + "flags": {}, + "sets": [{ + "species": "Tangela", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Giga Drain"], ["Hidden Power Ice"], ["Synthesis"], ["Leech Seed", "Sleep Powder", "Knock Off"]] + }] + }, + "stoutland": { + "flags": {}, + "sets": [{ + "species": "Stoutland", + "item": ["Choice Band"], + "ability": ["Scrappy"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Return"], ["Superpower"], ["Pursuit"], ["Facade"]] + }] + }, + "regice": { + "flags": {}, + "sets": [{ + "species": "Regice", + "item": ["Fightinium Z", "Life Orb"], + "ability": ["Clear Body"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Rock Polish"], ["Ice Beam"], ["Focus Blast"], ["Thunderbolt"]] + }] + }, + "victreebel": { + "flags": {}, + "sets": [{ + "species": "Victreebel", + "item": ["Life Orb"], + "ability": ["Chlorophyll"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Sunny Day"], ["Solar Beam"], ["Sludge Bomb"], ["Weather Ball"]] + }] + }, + "vigoroth": { + "flags": {}, + "sets": [{ + "species": "Vigoroth", + "item": ["Eviolite"], + "ability": ["Vital Spirit"], + "evs": {"hp": 248, "spd": 244, "spe": 16}, + "nature": "Careful", + "moves": [["Bulk Up"], ["Slack Off"], ["Return"], ["Taunt", "Substitute"]] + }] + }, + "aurorus": { + "flags": {}, + "sets": [{ + "species": "Aurorus", + "item": ["Choice Specs"], + "ability": ["Snow Warning"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Blizzard"], ["Freeze-Dry"], ["Earth Power"], ["Hidden Power Rock", "Flash Cannon"]] + }, { + "species": "Aurorus", + "item": ["Choice Scarf"], + "ability": ["Snow Warning"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Blizzard"], ["Freeze-Dry"], ["Earth Power"], ["Hidden Power Rock"]] + }, { + "species": "Aurorus", + "item": ["Focus Sash"], + "ability": ["Snow Warning"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Hasty", + "moves": [["Blizzard"], ["Encore"], ["Rock Tomb", "Earth Power"], ["Stealth Rock"]] + }] + }, + "sandslashalola": { + "flags": {}, + "sets": [{ + "species": "Sandslash-Alola", + "item": ["Icium Z", "Shuca Berry"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Icicle Crash"], ["Earthquake"], ["Substitute", "Iron Head"]] + }, { + "species": "Sandslash-Alola", + "item": ["Shuca Berry"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Rapid Spin", "Stealth Rock"], ["Icicle Crash"], ["Earthquake"], ["Knock Off", "Iron Head"]] + }] + }, + "spiritomb": { + "flags": {}, + "sets": [{ + "species": "Spiritomb", + "item": ["Black Glasses", "Aguav Berry", "Rocky Helmet"], + "ability": ["Infiltrator"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Brave", + "moves": [["Pursuit"], ["Sucker Punch"], ["Psychic"], ["Will-O-Wisp"]] + }, { + "species": "Spiritomb", + "item": ["Leftovers", "Darkinium Z"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Calm Mind"], ["Rest"], ["Sleep Talk"], ["Dark Pulse"]] + }] + }, + "froslass": { + "flags": {}, + "sets": [{ + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Spikes"], ["Icy Wind", "Ice Beam"], ["Taunt"], ["Destiny Bond"]] + }, { + "species": "Froslass", + "item": ["Choice Specs"], + "ability": ["Cursed Body"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Shadow Ball"], ["Trick"], ["Spikes", "Hidden Power Fighting"]] + }, { + "species": "Froslass", + "item": ["Icium Z", "Colbur Berry"], + "ability": ["Cursed Body"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Shadow Ball"], ["Spikes"], ["Will-O-Wisp", "Hidden Power Fighting"]] + }, { + "species": "Froslass", + "item": ["Colbur Berry", "Leftovers"], + "ability": ["Cursed Body"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Spikes"], ["Will-O-Wisp"], ["Taunt", "Protect"], ["Hex"]] + }] + }, + "omastar": { + "flags": {}, + "sets": [{ + "species": "Omastar", + "item": ["White Herb", "Waterium Z"], + "ability": ["Weak Armor"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Earth Power"]] + }] + }, + "qwilfish": { + "flags": {}, + "sets": [{ + "species": "Qwilfish", + "item": ["Rocky Helmet", "Black Sludge"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes"], ["Waterfall"], ["Taunt"], ["Toxic Spikes", "Poison Jab", "Destiny Bond"]] + }, { + "species": "Qwilfish", + "item": ["Rocky Helmet", "Black Sludge"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "ivs": {"atk": 0}, + "nature": "Timid", + "moves": [["Spikes"], ["Scald"], ["Taunt"], ["Thunder Wave", "Sludge Bomb"]] + }] + }, + "scyther": { + "flags": {}, + "sets": [{ + "species": "Scyther", + "item": ["Eviolite"], + "ability": ["Technician"], + "evs": {"hp": 248, "spd": 8, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Roost"], ["U-turn"], ["Aerial Ace"]] + }, { + "species": "Scyther", + "item": ["Choice Scarf"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Brick Break"], ["U-turn"], ["Aerial Ace"]] + }, { + "species": "Scyther", + "item": ["Choice Scarf"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off", "Pursuit"], ["Brick Break"], ["U-turn"], ["Aerial Ace"]] + }] + }, + "crabominable": { + "flags": {}, + "sets": [{ + "species": "Crabominable", + "item": ["Assault Vest"], + "ability": ["Iron Fist"], + "evs": {"hp": 248, "atk": 8, "spd": 252}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Ice Hammer"], ["Close Combat"], ["Earthquake", "Pursuit"]] + }] + } + }, + "LC": { + "abra": { + "flags": {}, + "sets": [{ + "species": "Abra", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"spa": 240, "spe": 200}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Hidden Power Fighting"], ["Substitute"]] + }, { + "species": "Abra", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"spa": 240, "spe": 200}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Energy Ball"], ["Substitute"]] + }, { + "species": "Abra", + "item": ["Life Orb"], + "ability": ["Magic Guard"], + "evs": {"spa": 240, "spe": 200}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Hidden Power Ground"], ["Substitute"]] + }, { + "species": "Abra", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 240, "spe": 200}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Hidden Power Fighting"], ["Shadow Ball", "Knock Off"]] + }, { + "species": "Abra", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 236, "spd": 76, "spe": 196}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Shadow Ball", "Energy Ball"], ["Counter"]] + }] + }, + "mienfoo": { + "flags": {}, + "sets": [{ + "species": "Mienfoo", + "item": ["Choice Scarf"], + "ability": ["Regenerator"], + "evs": {"atk": 236, "def": 36, "spe": 236}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Knock Off"], ["Stone Edge", "Poison Jab"], ["U-turn"]] + }, { + "species": "Mienfoo", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"atk": 76, "def": 196, "spe": 196}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Poison Jab", "High Jump Kick"], ["Knock Off"], ["U-turn"]] + }, { + "species": "Mienfoo", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"atk": 76, "def": 196, "spd": 196}, + "nature": "Adamant", + "moves": [["High Jump Kick"], ["Knock Off"], ["U-turn"], ["Fake Out", "Drain Punch", "Poison Jab"]] + }, { + "species": "Mienfoo", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 156, "def": 116, "spd": 196}, + "nature": "Impish", + "moves": [["Drain Punch"], ["Knock Off"], ["U-turn"], ["Fake Out", "High Jump Kick"]] + }, { + "species": "Mienfoo", + "item": ["Flyinium Z"], + "ability": ["Regenerator"], + "evs": {"atk": 156, "def": 116, "spe": 236}, + "nature": "Jolly", + "moves": [["Bounce"], ["High Jump Kick"], ["Knock Off"], ["U-turn"]] + }] + }, + "timburr": { + "flags": {}, + "sets": [{ + "species": "Timburr", + "item": ["Eviolite"], + "ability": ["Iron Fist"], + "evs": {"atk": 196, "def": 156, "spe": 156}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Knock Off"], ["Ice Punch", "Thunder Punch"], ["Mach Punch"]] + }, { + "species": "Timburr", + "item": ["Eviolite"], + "ability": ["Guts"], + "evs": {"atk": 116, "def": 156, "spd": 236}, + "nature": "Careful", + "moves": [["Bulk Up"], ["Drain Punch"], ["Knock Off"], ["Mach Punch"]] + }] + }, + "staryu": { + "flags": {}, + "sets": [{ + "species": "Staryu", + "item": ["Eviolite"], + "ability": ["Analytic"], + "evs": {"def": 156, "spa": 116, "spe": 236}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Psychic", "Thunderbolt", "Ice Beam"], ["Rapid Spin"], ["Recover"]] + }, { + "species": "Staryu", + "item": ["Eviolite"], + "ability": ["Natural Cure"], + "evs": {"hp": 116, "def": 156, "spe": 236}, + "nature": "Timid", + "moves": [["Scald"], ["Psychic", "Thunderbolt", "Ice Beam"], ["Rapid Spin"], ["Recover"]] + }, { + "species": "Staryu", + "item": ["Life Orb"], + "ability": ["Analytic"], + "evs": {"spa": 200, "spe": 240}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Psychic"], ["Ice Beam"], ["Thunderbolt"]] + }] + }, + "vullaby": { + "flags": {}, + "sets": [{ + "species": "Vullaby", + "item": ["Eviolite"], + "ability": ["Overcoat"], + "evs": {"hp": 116, "atk": 156, "spd": 76, "spe": 116}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Knock Off"], ["Roost"], ["U-turn"]] + }, { + "species": "Vullaby", + "item": ["Eviolite"], + "ability": ["Overcoat"], + "evs": {"hp": 116, "atk": 76, "def": 236, "spd": 76}, + "nature": "Impish", + "moves": [["Defog"], ["Brave Bird"], ["Knock Off"], ["Roost"]] + }, { + "species": "Vullaby", + "item": ["Eviolite", "Berry Juice"], + "ability": ["Weak Armor"], + "evs": {"hp": 116, "spa": 240, "spe": 116}, + "nature": "Modest", + "moves": [["Nasty Plot"], ["Air Slash"], ["Heat Wave"], ["Dark Pulse", "Hidden Power Grass"]] + }, { + "species": "Vullaby", + "item": ["Berry Juice"], + "ability": ["Weak Armor"], + "evs": {"hp": 36, "atk": 160, "spa": 80, "spd": 76, "spe": 116}, + "nature": "Serious", + "moves": [["Brave Bird"], ["Knock Off"], ["Heat Wave"], ["Hidden Power Grass"]] + }, { + "species": "Vullaby", + "item": ["Choice Scarf"], + "ability": ["Overcoat"], + "evs": {"atk": 236, "spd": 76, "spe": 196}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Knock Off"], ["U-turn"], ["Rock Smash", "Defog"]] + }, { + "species": "Vullaby", + "item": ["Flyinium Z"], + "ability": ["Weak Armor"], + "evs": {"hp": 116, "atk": 236, "spe": 116}, + "nature": "Adamant", + "moves": [["Mirror Move"], ["Brave Bird"], ["Knock Off"], ["Roost"]] + }] + }, + "croagunk": { + "flags": {}, + "sets": [{ + "species": "Croagunk", + "item": ["Berry Juice", "Fightinium Z", "Eviolite"], + "ability": ["Dry Skin"], + "evs": {"hp": 52, "def": 116, "spa": 188, "spd": 116, "spe": 36}, + "nature": "Modest", + "moves": [["Nasty Plot"], ["Sludge Bomb"], ["Focus Blast"], ["Vacuum Wave"]] + }, { + "species": "Croagunk", + "item": ["Eviolite"], + "ability": ["Dry Skin"], + "evs": {"hp": 52, "atk": 188, "def": 116, "spd": 116, "spe": 36}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Gunk Shot"], ["Sucker Punch"], ["Bulk Up", "Knock Off"]] + }, { + "species": "Croagunk", + "item": ["Eviolite"], + "ability": ["Dry Skin"], + "evs": {"hp": 132, "atk": 28, "def": 116, "spa": 108, "spd": 116}, + "nature": "Quiet", + "moves": [["Sludge Bomb"], ["Vacuum Wave"], ["Knock Off"], ["Drain Punch"]] + }, { + "species": "Croagunk", + "item": ["Eviolite"], + "ability": ["Dry Skin"], + "evs": {"hp": 132, "atk": 108, "def": 116, "spa": 28, "spd": 116}, + "nature": "Brave", + "moves": [["Fake Out"], ["Sucker Punch"], ["Drain Punch", "Gunk Shot"], ["Vacuum Wave"]] + }] + }, + "gastly": { + "flags": {}, + "sets": [{ + "species": "Gastly", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 200, "spd": 80, "spe": 200}, + "nature": "Timid", + "moves": [["Substitute"], ["Shadow Ball"], ["Sludge Bomb"], ["Dazzling Gleam"]] + }, { + "species": "Gastly", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 200, "spd": 80, "spe": 200}, + "nature": "Timid", + "moves": [["Substitute"], ["Shadow Ball"], ["Sludge Bomb"], ["Hidden Power Ground"]] + }, { + "species": "Gastly", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 200, "spd": 80, "spe": 200}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Dazzling Gleam"], ["Destiny Bond", "Knock Off"]] + }, { + "species": "Gastly", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 200, "spd": 80, "spe": 200}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Hidden Power Fighting"], ["Destiny Bond", "Knock Off"]] + }, { + "species": "Gastly", + "item": ["Berry Juice"], + "ability": ["Levitate"], + "evs": {"hp": 36, "def": 36, "spa": 116, "spd": 76, "spe": 196}, + "nature": "Timid", + "moves": [["Will-O-Wisp"], ["Hex"], ["Substitute"], ["Sludge Bomb", "Disable"]] + }, { + "species": "Gastly", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"def": 36, "spa": 196, "spd": 76, "spe": 196}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Bomb"], ["Thunderbolt", "Dazzling Gleam"], ["Trick", "Destiny Bond"]] + }] + }, + "diglett": { + "flags": {}, + "sets": [{ + "species": "Diglett", + "item": ["Focus Sash"], + "ability": ["Arena Trap"], + "evs": {"hp": 36, "atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Slide"], ["Sucker Punch", "Reversal"], ["Memento"]] + }, { + "species": "Diglett", + "item": ["Focus Sash"], + "ability": ["Arena Trap"], + "evs": {"hp": 36, "atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Slide"], ["Sucker Punch", "Reversal"], ["Stealth Rock"]] + }, { + "species": "Diglett", + "item": ["Life Orb", "Groundium Z"], + "ability": ["Arena Trap"], + "evs": {"hp": 36, "atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Slide"], ["Sucker Punch"], ["Substitute", "Sludge Bomb"]] + }] + }, + "foongus": { + "flags": {}, + "sets": [{ + "species": "Foongus", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 124, "def": 160, "spd": 160}, + "nature": "Bold", + "moves": [["Spore"], ["Sludge Bomb"], ["Giga Drain"], ["Synthesis", "Hidden Power Fighting", "Hidden Power Fire"]] + }] + }, + "grimeralola": { + "flags": {}, + "sets": [{ + "species": "Grimer-Alola", + "item": ["Eviolite"], + "ability": ["Poison Touch"], + "evs": {"hp": 36, "atk": 196, "def": 196, "spd": 36}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Poison Jab", "Gunk Shot"], ["Pursuit"], ["Shadow Sneak"]] + }, { + "species": "Grimer-Alola", + "item": ["Berry Juice"], + "ability": ["Poison Touch"], + "evs": {"hp": 36, "atk": 36, "def": 196, "spa": 36, "spd": 196}, + "nature": "Brave", + "moves": [["Knock Off"], ["Poison Jab"], ["Fire Blast", "Giga Drain"], ["Pursuit"]] + }] + }, + "onix": { + "flags": {}, + "sets": [{ + "species": "Onix", + "item": ["Berry Juice"], + "ability": ["Sturdy"], + "evs": {"hp": 76, "atk": 236, "spe": 196}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Endure"]] + }, { + "species": "Onix", + "item": ["Berry Juice"], + "ability": ["Sturdy"], + "evs": {"hp": 76, "atk": 236, "spe": 196}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Roar", "Dragon Tail"]] + }, { + "species": "Onix", + "item": ["Eviolite"], + "ability": ["Weak Armor"], + "evs": {"hp": 76, "atk": 236, "spe": 196}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Blast"], ["Explosion"]] + }] + }, + "doduo": { + "flags": {}, + "sets": [{ + "species": "Doduo", + "item": ["Choice Scarf"], + "ability": ["Early Bird"], + "evs": {"atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Double-Edge"], ["Jump Kick"], ["Knock Off"]] + }, { + "species": "Doduo", + "item": ["Choice Scarf"], + "ability": ["Early Bird"], + "evs": {"atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Return"], ["Jump Kick"], ["Knock Off"]] + }, { + "species": "Doduo", + "item": ["Life Orb"], + "ability": ["Early Bird"], + "evs": {"atk": 236, "spe": 236}, + "ivs": {"hp": 29}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Jump Kick"], ["Knock Off"], ["Quick Attack"]] + }, { + "species": "Doduo", + "item": ["Berry Juice"], + "ability": ["Early Bird"], + "evs": {"atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Jump Kick"], ["Knock Off"], ["Substitute", "Quick Attack"]] + }, { + "species": "Doduo", + "item": ["Berry Juice"], + "ability": ["Early Bird"], + "evs": {"atk": 236, "spe": 236}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Brave Bird"], ["Jump Kick", "Knock Off"], ["Quick Attack"]] + }] + }, + "ferroseed": { + "flags": {}, + "sets": [{ + "species": "Ferroseed", + "item": ["Berry Juice"], + "ability": ["Iron Barbs"], + "evs": {"hp": 84, "atk": 36, "def": 108, "spd": 228, "spe": 36}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Spikes"], ["Bullet Seed"], ["Knock Off"]] + }, { + "species": "Ferroseed", + "item": ["Eviolite"], + "ability": ["Iron Barbs"], + "evs": {"hp": 84, "atk": 36, "def": 108, "spd": 228, "spe": 36}, + "nature": "Impish", + "moves": [["Bullet Seed"], ["Knock Off", "Iron Head"], ["Thunder Wave"], ["Stealth Rock"]] + }, { + "species": "Ferroseed", + "item": ["Eviolite"], + "ability": ["Iron Barbs"], + "evs": {"hp": 84, "atk": 36, "def": 108, "spd": 228, "spe": 36}, + "nature": "Impish", + "moves": [["Bullet Seed"], ["Knock Off", "Iron Head"], ["Thunder Wave"], ["Spikes"]] + }] + }, + "pawniard": { + "flags": {}, + "sets": [{ + "species": "Pawniard", + "item": ["Eviolite"], + "ability": ["Defiant"], + "evs": {"atk": 156, "def": 36, "spd": 116, "spe": 196}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Knock Off"], ["Iron Head"], ["Sucker Punch"]] + }, { + "species": "Pawniard", + "item": ["Eviolite"], + "ability": ["Defiant"], + "evs": {"atk": 156, "def": 36, "spd": 116, "spe": 196}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Iron Head"], ["Thunder Wave"], ["Sucker Punch"]] + }, { + "species": "Pawniard", + "item": ["Eviolite"], + "ability": ["Defiant"], + "evs": {"atk": 156, "def": 36, "spd": 116, "spe": 196}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Iron Head"], ["Stealth Rock"], ["Sucker Punch"]] + }, { + "species": "Pawniard", + "item": ["Life Orb"], + "ability": ["Defiant"], + "evs": {"atk": 236, "def": 36, "spd": 36, "spe": 196}, + "ivs": {"hp": 0}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Iron Head"], ["Sucker Punch"], ["Substitute", "Pursuit"]] + }, { + "species": "Pawniard", + "item": ["Choice Scarf"], + "ability": ["Defiant"], + "evs": {"atk": 236, "def": 36, "spd": 36, "spe": 196}, + "nature": "Jolly", + "moves": [["Iron Head"], ["Knock Off"], ["Pursuit"], ["Brick Break", "Low Sweep"]] + }] + }, + "shellder": { + "flags": {}, + "sets": [{ + "species": "Shellder", + "item": ["Eviolite"], + "ability": ["Skill Link"], + "evs": {"hp": 36, "atk": 236, "def": 36, "spe": 196}, + "nature": "Impish", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Liquidation"], ["Rock Blast"]] + }] + }, + "snivy": { + "flags": {}, + "sets": [{ + "species": "Snivy", + "item": ["Eviolite"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ice"], ["Glare"], ["Synthesis"]] + }, { + "species": "Snivy", + "item": ["Eviolite"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ice"], ["Defog"], ["Synthesis"]] + }, { + "species": "Snivy", + "item": ["Eviolite"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ground"], ["Glare"], ["Synthesis"]] + }, { + "species": "Snivy", + "item": ["Eviolite"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ground"], ["Defog"], ["Synthesis"]] + }, { + "species": "Snivy", + "item": ["Berry Juice"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ice"], ["Knock Off", "Substitute"], ["Glare"]] + }, { + "species": "Snivy", + "item": ["Berry Juice"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ground"], ["Knock Off", "Substitute"], ["Glare"]] + }, { + "species": "Snivy", + "item": ["Choice Scarf"], + "ability": ["Contrary"], + "evs": {"spa": 240, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Hidden Power Ice"], ["Knock Off"], ["Energy Ball"]] + }] + }, + "snubbull": { + "flags": {}, + "sets": [{ + "species": "Snubbull", + "item": ["Eviolite"], + "ability": ["Intimidate"], + "evs": {"hp": 36, "atk": 116, "def": 36, "spd": 116, "spe": 196}, + "nature": "Jolly", + "moves": [["Play Rough"], ["Earthquake"], ["Heal Bell"], ["Thunder Wave"]] + }, { + "species": "Snubbull", + "item": ["Berry Juice"], + "ability": ["Intimidate"], + "evs": {"hp": 36, "atk": 116, "def": 116, "spd": 196, "spe": 36}, + "nature": "Impish", + "moves": [["Play Rough"], ["Earthquake", "Fire Punch"], ["Thief"], ["Bulk Up"]] + }] + }, + "chinchou": { + "flags": {}, + "sets": [{ + "species": "Chinchou", + "item": ["Berry Juice"], + "ability": ["Volt Absorb"], + "evs": {"hp": 76, "def": 212, "spa": 152, "spe": 60}, + "nature": "Bold", + "moves": [["Scald"], ["Ice Beam"], ["Heal Bell", "Dazzling Gleam"], ["Volt Switch"]] + }, { + "species": "Chinchou", + "item": ["Berry Juice"], + "ability": ["Volt Absorb"], + "evs": {"hp": 76, "def": 212, "spa": 152, "spe": 60}, + "nature": "Bold", + "moves": [["Scald"], ["Ice Beam"], ["Hidden Power Fire"], ["Volt Switch"]] + }, { + "species": "Chinchou", + "item": ["Berry Juice"], + "ability": ["Volt Absorb"], + "evs": {"hp": 76, "def": 212, "spa": 152, "spe": 60}, + "nature": "Bold", + "moves": [["Scald"], ["Ice Beam"], ["Hidden Power Ground"], ["Volt Switch"]] + }, { + "species": "Chinchou", + "item": ["Choice Scarf"], + "ability": ["Volt Absorb"], + "evs": {"def": 52, "spa": 232, "spe": 224}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Scald", "Thunderbolt"], ["Volt Switch"]] + }, { + "species": "Chinchou", + "item": ["Eviolite"], + "ability": ["Volt Absorb"], + "evs": {"hp": 76, "def": 212, "spa": 68, "spd": 148}, + "nature": "Bold", + "moves": [["Scald"], ["Ice Beam", "Thunderbolt"], ["Rest"], ["Sleep Talk"]] + }] + }, + "magnemite": { + "flags": {}, + "sets": [{ + "species": "Magnemite", + "item": ["Berry Juice"], + "ability": ["Sturdy"], + "evs": {"def": 36, "spa": 236, "spe": 236}, + "nature": "Modest", + "moves": [["Flash Cannon"], ["Endure"], ["Recycle"], ["Volt Switch"]] + }, { + "species": "Magnemite", + "item": ["Berry Juice"], + "ability": ["Sturdy"], + "evs": {"spa": 240, "spe": 236}, + "nature": "Timid", + "moves": [["Flash Cannon"], ["Hidden Power Ground"], ["Recycle"], ["Volt Switch"]] + }, { + "species": "Magnemite", + "item": ["Choice Scarf"], + "ability": ["Analytic"], + "evs": {"spa": 240, "spe": 236}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Hidden Power Ground"], ["Volt Switch"]] + }] + }, + "ponyta": { + "flags": {}, + "sets": [{ + "species": "Ponyta", + "item": ["Eviolite"], + "ability": ["Flame Body"], + "evs": {"atk": 76, "def": 156, "spd": 76, "spe": 196}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Will-O-Wisp"], ["High Horsepower", "Wild Charge"], ["Morning Sun"]] + }, { + "species": "Ponyta", + "item": ["Eviolite"], + "ability": ["Flame Body"], + "evs": {"atk": 76, "def": 156, "spd": 76, "spe": 196}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Wild Charge", "Flame Charge"], ["High Horsepower"], ["Morning Sun"]] + }, { + "species": "Ponyta", + "item": ["Grassium Z"], + "ability": ["Flash Fire"], + "evs": {"def": 76, "spa": 236, "spe": 196}, + "nature": "Timid", + "moves": [["Fire Blast", "Flamethrower"], ["Solar Beam"], ["Flame Charge"], ["Hypnosis"]] + }, { + "species": "Ponyta", + "item": ["Firium Z"], + "ability": ["Flash Fire"], + "evs": {"atk": 236, "def": 76, "spe": 196}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["High Horsepower"], ["Flame Charge"], ["Morning Sun", "Wild Charge"]] + }] + }, + "scraggy": { + "flags": {}, + "sets": [{ + "species": "Scraggy", + "item": ["Eviolite"], + "ability": ["Shed Skin"], + "evs": {"hp": 36, "atk": 156, "def": 36, "spd": 36, "spe": 212}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Drain Punch"], ["Knock Off"], ["Zen Headbutt", "High Jump Kick"]] + }, { + "species": "Scraggy", + "item": ["Eviolite"], + "ability": ["Moxie"], + "evs": {"hp": 36, "atk": 156, "def": 36, "spd": 36, "spe": 212}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["High Jump Kick"], ["Knock Off"], ["Poison Jab"]] + }, { + "species": "Scraggy", + "item": ["Choice Scarf"], + "ability": ["Moxie"], + "evs": {"hp": 36, "atk": 236, "spe": 212}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Drain Punch"], ["Knock Off"], ["Poison Jab", "Zen Headbutt"]] + }] + }, + "carvanha": { + "flags": {}, + "sets": [{ + "species": "Carvanha", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"atk": 196, "def": 36, "spd": 36, "spe": 236}, + "ivs": {"hp": 0}, + "nature": "Adamant", + "moves": [["Waterfall"], ["Crunch"], ["Psychic Fangs"], ["Protect"]] + }, { + "species": "Carvanha", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"atk": 196, "def": 36, "spd": 36, "spe": 236}, + "ivs": {"hp": 0}, + "nature": "Adamant", + "moves": [["Waterfall"], ["Crunch"], ["Aqua Jet"], ["Destiny Bond"]] + }, { + "species": "Carvanha", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"def": 36, "spa": 236, "spe": 236}, + "ivs": {"hp": 0}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Dark Pulse"], ["Ice Beam"], ["Protect"]] + }] + }, + "corphish": { + "flags": {}, + "sets": [{ + "species": "Corphish", + "item": ["Life Orb"], + "ability": ["Adaptability"], + "evs": {"atk": 196, "def": 76, "spe": 236}, + "ivs": {"hp": 0}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Crabhammer"], ["Knock Off"], ["Aqua Jet"]] + }, { + "species": "Corphish", + "item": ["Eviolite"], + "ability": ["Adaptability"], + "evs": {"atk": 196, "def": 76, "spe": 236}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Crabhammer"], ["Knock Off"], ["Aqua Jet"]] + }, { + "species": "Corphish", + "item": ["Eviolite"], + "ability": ["Adaptability"], + "evs": {"atk": 196, "def": 76, "spe": 236}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Crabhammer"], ["Knock Off"], ["Aqua Jet"]] + }, { + "species": "Corphish", + "item": ["Waterium Z"], + "ability": ["Adaptability"], + "evs": {"atk": 196, "def": 76, "spe": 236}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Crabhammer"], ["Knock Off"], ["Aqua Jet"]] + }] + }, + "drilbur": { + "flags": {}, + "sets": [{ + "species": "Drilbur", + "item": ["Berry Juice"], + "ability": ["Mold Breaker"], + "evs": {"hp": 36, "atk": 76, "def": 36, "spd": 76, "spe": 212}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Slide"], ["Rapid Spin"]] + }, { + "species": "Drilbur", + "item": ["Berry Juice"], + "ability": ["Mold Breaker"], + "evs": {"hp": 36, "atk": 76, "def": 36, "spd": 76, "spe": 212}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Rock Tomb"], ["Swords Dance"]] + }, { + "species": "Drilbur", + "item": ["Choice Scarf"], + "ability": ["Mold Breaker"], + "evs": {"atk": 236, "def": 36, "spe": 212}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Slide"], ["Poison Jab"], ["Rapid Spin"]] + }, { + "species": "Drilbur", + "item": ["Groundium Z"], + "ability": ["Mold Breaker"], + "evs": {"hp": 36, "atk": 236, "spe": 212}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Tomb"], ["Poison Jab"], ["Rapid Spin"]] + }] + }, + "dwebble": { + "flags": {}, + "sets": [{ + "species": "Dwebble", + "item": ["Eviolite"], + "ability": ["Weak Armor"], + "evs": {"hp": 116, "atk": 76, "def": 156, "spe": 156}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Counter"], ["Rock Blast"], ["Knock Off"]] + }, { + "species": "Dwebble", + "item": ["Eviolite"], + "ability": ["Weak Armor"], + "evs": {"hp": 116, "atk": 76, "def": 156, "spe": 156}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Spikes"], ["Rock Blast"], ["Knock Off"]] + }, { + "species": "Dwebble", + "item": ["Berry Juice"], + "ability": ["Sturdy"], + "evs": {"atk": 236, "spe": 236}, + "nature": "Adamant", + "moves": [["Shell Smash"], ["Rock Blast"], ["Earthquake"], ["Substitute", "Knock Off"]] + }] + }, + "elekid": { + "flags": {}, + "sets": [{ + "species": "Elekid", + "item": ["Life Orb"], + "ability": ["Vital Spirit"], + "evs": {"spa": 240, "spe": 236}, + "ivs": {"hp": 1, "atk": 0}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Psychic"], ["Hidden Power Grass"], ["Volt Switch"]] + }, { + "species": "Elekid", + "item": ["Electrium Z"], + "ability": ["Vital Spirit"], + "evs": {"spa": 240, "spe": 236}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Psychic"], ["Hidden Power Grass"], ["Substitute"]] + }] + }, + "mareanie": { + "flags": {}, + "sets": [{ + "species": "Mareanie", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 196, "def": 100, "spa": 12, "spd": 100, "spe": 76}, + "nature": "Calm", + "moves": [["Haze"], ["Scald"], ["Sludge Bomb"], ["Recover"]] + }, { + "species": "Mareanie", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 196, "def": 100, "spa": 12, "spd": 100, "spe": 76}, + "nature": "Calm", + "moves": [["Toxic Spikes"], ["Scald"], ["Sludge Bomb"], ["Recover"]] + }, { + "species": "Mareanie", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 116, "atk": 12, "def": 180, "spa": 12, "spd": 180}, + "nature": "Relaxed", + "moves": [["Gunk Shot"], ["Knock Off"], ["Scald"], ["Recover"]] + }] + }, + "mudbray": { + "flags": {}, + "sets": [{ + "species": "Mudbray", + "item": ["Eviolite"], + "ability": ["Stamina"], + "evs": {"hp": 116, "atk": 116, "def": 36, "spd": 236}, + "nature": "Careful", + "moves": [["Earthquake"], ["Heavy Slam"], ["Rest"], ["Sleep Talk"]] + }, { + "species": "Mudbray", + "item": ["Berry Juice"], + "ability": ["Stamina"], + "evs": {"hp": 116, "atk": 196, "def": 36, "spe": 156}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Rock Slide", "Rock Tomb"], ["Heavy Slam"], ["Stealth Rock"]] + }, { + "species": "Mudbray", + "item": ["Choice Scarf"], + "ability": ["Stamina"], + "evs": {"hp": 36, "atk": 196, "def": 36, "spe": 236}, + "nature": "Adamant", + "moves": [["Close Combat"], ["Earthquake"], ["Heavy Slam"], ["Rock Slide"]] + }] + }, + "rufflet": { + "flags": {}, + "sets": [{ + "species": "Rufflet", + "item": ["Eviolite"], + "ability": ["Hustle"], + "evs": {"hp": 116, "atk": 12, "def": 116, "spd": 196, "spe": 36}, + "nature": "Impish", + "moves": [["Bulk Up"], ["Brave Bird", "Aerial Ace"], ["Superpower"], ["Roost"]] + }, { + "species": "Rufflet", + "item": ["Choice Scarf"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 36, "spe": 196}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Aerial Ace"], ["Superpower"], ["U-turn"]] + }, { + "species": "Rufflet", + "item": ["Choice Scarf"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 36, "spe": 196}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Return"], ["Superpower"], ["U-turn"]] + }] + }, + "slowpoke": { + "flags": {}, + "sets": [{ + "species": "Slowpoke", + "item": ["Eviolite"], + "ability": ["Regenerator"], + "evs": {"hp": 116, "def": 76, "spa": 116, "spd": 196}, + "nature": "Careful", + "moves": [["Scald"], ["Psychic"], ["Thunder Wave", "Fire Blast", "Calm Mind"], ["Slack Off"]] + }] + }, + "spritzee": { + "flags": {}, + "sets": [{ + "species": "Spritzee", + "item": ["Eviolite"], + "ability": ["Aroma Veil"], + "evs": {"hp": 212, "def": 196, "spa": 12, "spd": 76, "spe": 12}, + "nature": "Bold", + "moves": [["Moonblast"], ["Wish"], ["Protect"], ["Calm Mind", "Aromatherapy", "Covet"]] + }, { + "species": "Spritzee", + "item": ["Berry Juice", "Eviolite"], + "ability": ["Aroma Veil"], + "evs": {"hp": 52, "def": 36, "spa": 252, "spd": 76, "spe": 92}, + "ivs": {"atk": 0}, + "nature": "Modest", + "moves": [["Nasty Plot"], ["Moonblast"], ["Draining Kiss"], ["Psychic"]] + }] + }, + "surskit": { + "flags": {}, + "sets": [{ + "species": "Surskit", + "item": ["Focus Sash"], + "ability": ["Swift Swim"], + "evs": {"hp": 36, "def": 20, "spa": 196, "spd": 20, "spe": 236}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Hydro Pump"], ["Ice Beam"], ["Giga Drain", "Thief"]] + }, { + "species": "Surskit", + "item": ["Eviolite", "Choice Scarf"], + "ability": ["Swift Swim"], + "evs": {"hp": 36, "def": 20, "spa": 196, "spd": 20, "spe": 236}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Hydro Pump", "Scald"], ["Ice Beam"], ["Giga Drain"]] + }] + }, + "zigzagoon": { + "flags": {}, + "sets": [{ + "species": "Zigzagoon", + "item": ["Berry Juice"], + "ability": ["Pickup"], + "evs": {"hp": 132, "atk": 196, "def": 108, "spd": 28, "spe": 36}, + "nature": "Adamant", + "moves": [["Belly Drum"], ["Extreme Speed"], ["Thief"], ["Return", "Seed Bomb"]] + }] + }, + "archen": { + "flags": {}, + "sets": [{ + "species": "Archen", + "item": ["Berry Juice"], + "ability": ["Defeatist"], + "evs": {"hp": 76, "atk": 180, "spe": 196}, + "nature": "Jolly", + "moves": [["Rock Slide"], ["Acrobatics"], ["Earthquake"], ["U-turn", "Stealth Rock"]] + }, { + "species": "Archen", + "item": ["Rockium Z"], + "ability": ["Defeatist"], + "evs": {"hp": 76, "atk": 180, "spe": 196}, + "nature": "Jolly", + "moves": [["Head Smash"], ["Earthquake"], ["Knock Off"], ["U-turn", "Rock Slide"]] + }, { + "species": "Archen", + "item": ["Berry Juice"], + "ability": ["Defeatist"], + "evs": {"hp": 76, "atk": 20, "def": 76, "spd": 76, "spe": 196}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Rock Slide"], ["Acrobatics", "Earthquake"], ["Knock Off", "Defog"]] + }] + }, + "bunnelby": { + "flags": {}, + "sets": [{ + "species": "Bunnelby", + "item": ["Life Orb"], + "ability": ["Huge Power"], + "evs": {"atk": 228, "def": 52, "spe": 220}, + "ivs": {"hp": 23}, + "nature": "Adamant", + "moves": [["Return"], ["Earthquake"], ["Iron Head", "Stone Edge"], ["Quick Attack"]] + }, { + "species": "Bunnelby", + "item": ["Choice Scarf"], + "ability": ["Huge Power"], + "evs": {"atk": 228, "def": 52, "spe": 220}, + "nature": "Jolly", + "moves": [["Return"], ["Earthquake"], ["Stone Edge"], ["U-turn"]] + }] + }, + "frillish": { + "flags": {}, + "sets": [{ + "species": "Frillish", + "item": ["Eviolite"], + "ability": ["Water Absorb"], + "evs": {"hp": 236, "def": 116, "spa": 76, "spd": 76}, + "nature": "Bold", + "moves": [["Scald"], ["Shadow Ball"], ["Will-O-Wisp"], ["Recover"]] + }, { + "species": "Frillish", + "item": ["Choice Scarf"], + "ability": ["Water Absorb"], + "evs": {"hp": 76, "spa": 236, "spe": 196}, + "nature": "Timid", + "moves": [["Water Spout"], ["Shadow Ball"], ["Ice Beam", "Energy Ball"], ["Trick", "Hydro Pump"]] + }] + }, + "kabuto": { + "flags": {}, + "sets": [{ + "species": "Kabuto", + "item": ["Eviolite"], + "ability": ["Weak Armor"], + "evs": {"hp": 116, "atk": 36, "def": 36, "spd": 156, "spe": 156}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Rock Slide"], ["Aqua Jet", "Knock Off"], ["Rapid Spin"]] + }, { + "species": "Kabuto", + "item": ["Eviolite"], + "ability": ["Weak Armor"], + "evs": {"hp": 116, "atk": 36, "def": 36, "spd": 156, "spe": 156}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Waterfall"], ["Knock Off"], ["Rapid Spin"]] + }] + }, + "munchlax": { + "flags": {}, + "sets": [{ + "species": "Munchlax", + "item": ["Berry Juice"], + "ability": ["Thick Fat"], + "evs": {"atk": 236, "def": 36, "spd": 236}, + "nature": "Adamant", + "moves": [["Body Slam", "Facade"], ["Earthquake"], ["Pursuit", "Counter"], ["Recycle"]] + }, { + "species": "Munchlax", + "item": ["Berry Juice"], + "ability": ["Thick Fat"], + "evs": {"atk": 236, "def": 36, "spd": 236}, + "nature": "Adamant", + "moves": [["Return"], ["Earthquake"], ["Pursuit", "Counter"], ["Recycle"]] + }, { + "species": "Munchlax", + "item": ["Eviolite"], + "ability": ["Thick Fat"], + "evs": {"atk": 236, "def": 36, "spd": 236}, + "nature": "Impish", + "moves": [["Return"], ["Curse", "Earthquake"], ["Rest"], ["Sleep Talk"]] + }] + }, + "omanyte": { + "flags": {}, + "sets": [{ + "species": "Omanyte", + "item": ["Eviolite"], + "ability": ["Weak Armor"], + "evs": {"hp": 76, "def": 36, "spa": 196, "spe": 156}, + "nature": "Timid", + "moves": [["Spikes"], ["Stealth Rock", "Toxic Spikes"], ["Hydro Pump"], ["Knock Off"]] + }, { + "species": "Omanyte", + "item": ["Eviolite"], + "ability": ["Shell Armor"], + "evs": {"def": 36, "spa": 200, "spe": 236}, + "nature": "Modest", + "moves": [["Shell Smash"], ["Hydro Pump"], ["Ice Beam"], ["Earth Power", "Hidden Power Grass"]] + }] + }, + "pancham": { + "flags": {}, + "sets": [{ + "species": "Pancham", + "item": ["Eviolite"], + "ability": ["Mold Breaker"], + "evs": {"atk": 180, "def": 100, "spd": 212, "spe": 12}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Drain Punch"], ["Knock Off"], ["Gunk Shot"]] + }, { + "species": "Pancham", + "item": ["Eviolite"], + "ability": ["Iron Fist"], + "evs": {"atk": 180, "def": 100, "spd": 52, "spe": 172}, + "nature": "Adamant", + "moves": [["Gunk Shot"], ["Drain Punch"], ["Ice Punch"], ["Swords Dance"]] + }, { + "species": "Pancham", + "item": ["Choice Scarf"], + "ability": ["Iron Fist"], + "evs": {"atk": 180, "def": 20, "spd": 52, "spe": 252}, + "nature": "Jolly", + "moves": [["Drain Punch"], ["Knock Off"], ["Zen Headbutt"], ["Parting Shot"]] + }, { + "species": "Pancham", + "item": ["Eviolite"], + "ability": ["Iron Fist"], + "evs": {"atk": 180, "def": 100, "spd": 212, "spe": 12}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Knock Off"], ["Gunk Shot", "Zen Headbutt"], ["Parting Shot"]] + }] + }, + "pumpkaboosuper": { + "flags": {}, + "sets": [{ + "species": "Pumpkaboo-Super", + "item": ["Eviolite"], + "ability": ["Frisk"], + "evs": {"hp": 204, "def": 196, "spd": 76, "spe": 28}, + "nature": "Impish", + "moves": [["Bullet Seed"], ["Fire Blast"], ["Will-O-Wisp"], ["Synthesis"]] + }, { + "species": "Pumpkaboo-Super", + "item": ["Eviolite"], + "ability": ["Frisk"], + "evs": {"hp": 204, "def": 36, "spa": 4, "spd": 236, "spe": 28}, + "nature": "Calm", + "moves": [["Giga Drain"], ["Synthesis"], ["Will-O-Wisp"], ["Fire Blast"]] + }, { + "species": "Pumpkaboo-Super", + "item": ["Eviolite"], + "ability": ["Frisk"], + "evs": {"hp": 204, "def": 36, "spd": 236, "spe": 28}, + "nature": "Careful", + "moves": [["Bullet Seed"], ["Will-O-Wisp"], ["Synthesis"], ["Shadow Sneak"]] + }, { + "species": "Pumpkaboo-Super", + "item": ["Eviolite"], + "ability": ["Frisk"], + "evs": {"hp": 44, "atk": 68, "def": 196, "spd": 156}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Trick Room"], ["Bullet Seed"], ["Synthesis"], ["Destiny Bond", "Explosion"]] + }] + }, + "tirtouga": { + "flags": {}, + "sets": [{ + "species": "Tirtouga", + "item": ["Eviolite"], + "ability": ["Solid Rock"], + "evs": {"hp": 4, "atk": 132, "def": 92, "spd": 76, "spe": 180}, + "nature": "Adamant", + "moves": [["Shell Smash"], ["Stone Edge"], ["Zen Headbutt", "Earthquake"], ["Aqua Jet"]] + }, { + "species": "Tirtouga", + "item": ["Eviolite"], + "ability": ["Solid Rock"], + "evs": {"hp": 4, "atk": 132, "def": 92, "spd": 76, "spe": 180}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Waterfall"], ["Stone Edge"], ["Zen Headbutt"]] + }, { + "species": "Tirtouga", + "item": ["Eviolite"], + "ability": ["Solid Rock"], + "evs": {"hp": 4, "atk": 132, "def": 92, "spd": 76, "spe": 180}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Waterfall"], ["Stone Edge"], ["Stealth Rock"]] + }, { + "species": "Tirtouga", + "item": ["Berry Juice"], + "ability": ["Sturdy"], + "evs": {"atk": 212, "def": 96, "spe": 180}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Waterfall"], ["Stone Edge", "Rock Slide"], ["Zen Headbutt"]] + }, { + "species": "Tirtouga", + "item": ["Eviolite"], + "ability": ["Solid Rock"], + "evs": {"hp": 84, "def": 252, "spa": 12, "spd": 156}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Scald"], ["Knock Off"], ["Stone Edge", "Aqua Jet"]] + }] + }, + "vulpixalola": { + "flags": {}, + "sets": [{ + "species": "Vulpix-Alola", + "item": ["Light Clay"], + "ability": ["Snow Warning"], + "evs": {"hp": 52, "spa": 200, "spe": 240}, + "nature": "Timid", + "moves": [["Aurora Veil"], ["Blizzard"], ["Freeze-Dry", "Icy Wind"], ["Hidden Power Ground"]] + }] + }, + "wynaut": { + "flags": {}, + "sets": [{ + "species": "Wynaut", + "item": ["Berry Juice"], + "ability": ["Shadow Tag"], + "evs": {"hp": 156, "def": 132, "spd": 132, "spe": 12}, + "nature": "Bold", + "moves": [["Counter"], ["Mirror Coat"], ["Encore"], ["Tickle"]] + }] + }, + "cottonee": { + "flags": {}, + "sets": [{ + "species": "Cottonee", + "item": ["Eviolite"], + "ability": ["Prankster"], + "evs": {"hp": 36, "def": 40, "spa": 144, "spd": 40, "spe": 232}, + "nature": "Timid", + "moves": [["Giga Drain"], ["Dazzling Gleam"], ["Knock Off"], ["Encore", "Stun Spore"]] + }, { + "species": "Cottonee", + "item": ["Darkinium Z"], + "ability": ["Prankster"], + "evs": {"hp": 36, "def": 40, "spa": 144, "spd": 40, "spe": 232}, + "nature": "Timid", + "moves": [["Giga Drain"], ["Dazzling Gleam"], ["Encore", "Knock Off"], ["Memento"]] + }] + }, + "hippopotas": { + "flags": {}, + "sets": [{ + "species": "Hippopotas", + "item": ["Eviolite"], + "ability": ["Sand Stream"], + "evs": {"hp": 132, "atk": 20, "def": 132, "spd": 180, "spe": 20}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Earthquake"], ["Slack Off"], ["Whirlwind", "Toxic"]] + }] + }, + "houndour": { + "flags": {}, + "sets": [{ + "species": "Houndour", + "item": ["Life Orb"], + "ability": ["Flash Fire"], + "evs": {"atk": 36, "def": 36, "spa": 196, "spe": 236}, + "ivs": {"hp": 9}, + "nature": "Naive", + "moves": [["Fire Blast"], ["Dark Pulse"], ["Sucker Punch"], ["Flame Charge", "Pursuit"]] + }, { + "species": "Houndour", + "item": ["Choice Scarf"], + "ability": ["Flash Fire"], + "evs": {"def": 36, "spa": 196, "spd": 36, "spe": 236}, + "nature": "Naive", + "moves": [["Fire Blast"], ["Dark Pulse"], ["Pursuit"], ["Destiny Bond"]] + }] + }, + "larvesta": { + "flags": {}, + "sets": [{ + "species": "Larvesta", + "item": ["Eviolite"], + "ability": ["Flame Body"], + "evs": {"hp": 76, "def": 236, "spd": 156, "spe": 36}, + "nature": "Impish", + "moves": [["Flare Blitz"], ["Leech Life", "Will-O-Wisp"], ["Morning Sun"], ["U-turn"]] + }, { + "species": "Larvesta", + "item": ["Choice Scarf"], + "ability": ["Flame Body"], + "evs": {"hp": 76, "atk": 236, "spe": 196}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Leech Life"], ["Wild Charge"], ["U-turn"]] + }] + }, + "snover": { + "flags": {}, + "sets": [{ + "species": "Snover", + "item": ["Choice Scarf", "Icium Z"], + "ability": ["Snow Warning"], + "evs": {"atk": 104, "spa": 184, "spe": 200}, + "nature": "Naive", + "moves": [["Blizzard"], ["Giga Drain"], ["Hidden Power Fire", "Hidden Power Ground"], ["Ice Shard"]] + }] + }, + "taillow": { + "flags": {}, + "sets": [{ + "species": "Taillow", + "item": ["Life Orb"], + "ability": ["Scrappy"], + "evs": {"def": 36, "spa": 196, "spd": 36, "spe": 236}, + "ivs": {"hp": 19}, + "nature": "Naive", + "moves": [["Boomburst"], ["Heat Wave", "Hidden Power Ground"], ["Brave Bird"], ["U-turn"]] + }, { + "species": "Taillow", + "item": ["Flame Orb"], + "ability": ["Guts"], + "evs": {"atk": 240, "spe": 236}, + "nature": "Jolly", + "moves": [["Facade"], ["Brave Bird"], ["Protect"], ["Quick Attack", "Hidden Power Grass"]] + }] + }, + "amaura": { + "flags": {}, + "sets": [{ + "species": "Amaura", + "item": ["Choice Scarf"], + "ability": ["Snow Warning"], + "evs": {"hp": 60, "spa": 220, "spe": 228}, + "nature": "Modest", + "moves": [["Blizzard"], ["Earth Power"], ["Thunderbolt"], ["Ancient Power"]] + }, { + "species": "Amaura", + "item": ["Choice Scarf"], + "ability": ["Snow Warning"], + "evs": {"hp": 60, "spa": 220, "spe": 228}, + "nature": "Modest", + "moves": [["Blizzard"], ["Earth Power"], ["Thunderbolt"], ["Stealth Rock"]] + }, { + "species": "Amaura", + "item": ["Choice Scarf"], + "ability": ["Refrigerate"], + "evs": {"hp": 60, "spa": 220, "spe": 228}, + "nature": "Modest", + "moves": [["Hyper Voice"], ["Earth Power"], ["Thunderbolt"], ["Hyper Beam"]] + }] + }, + "bulbasaur": { + "flags": {}, + "sets": [{ + "species": "Bulbasaur", + "item": ["Normalium Z"], + "ability": ["Overgrow"], + "evs": {"def": 44, "spa": 160, "spe": 240}, + "nature": "Modest", + "moves": [["Celebrate"], ["Sludge Bomb"], ["Giga Drain"], ["Sleep Powder", "Synthesis", "Hidden Power Fire"]] + }] + }, + "buneary": { + "flags": {}, + "sets": [{ + "species": "Buneary", + "item": ["Choice Band"], + "ability": ["Limber"], + "evs": {"atk": 228, "def": 4, "spe": 236}, + "nature": "Jolly", + "moves": [["Return"], ["Drain Punch"], ["Switcheroo"], ["Healing Wish"]] + }, { + "species": "Buneary", + "item": ["Choice Band"], + "ability": ["Limber"], + "evs": {"atk": 228, "def": 4, "spe": 236}, + "nature": "Jolly", + "moves": [["Return"], ["Drain Punch"], ["Switcheroo"], ["Baton Pass"]] + }, { + "species": "Buneary", + "item": ["Life Orb"], + "ability": ["Limber"], + "evs": {"atk": 228, "def": 4, "spe": 236}, + "nature": "Jolly", + "moves": [["Return"], ["Drain Punch"], ["Quick Attack"], ["Healing Wish"]] + }, { + "species": "Buneary", + "item": ["Life Orb"], + "ability": ["Limber"], + "evs": {"atk": 228, "def": 4, "spe": 236}, + "nature": "Jolly", + "moves": [["Return"], ["Drain Punch"], ["Quick Attack"], ["Baton Pass"]] + }, { + "species": "Buneary", + "item": ["Eviolite"], + "ability": ["Limber"], + "evs": {"atk": 228, "def": 4, "spe": 236}, + "nature": "Jolly", + "moves": [["Return"], ["Drain Punch", "Jump Kick"], ["Thunder Wave", "Heal Bell"], ["Healing Wish"]] + }] + }, + "clamperl": { + "flags": {}, + "sets": [{ + "species": "Clamperl", + "item": ["Deep Sea Tooth"], + "ability": ["Shell Armor"], + "evs": {"spa": 248, "spd": 76, "spe": 184}, + "nature": "Timid", + "moves": [["Shell Smash"], ["Surf"], ["Ice Beam"], ["Hidden Power Grass", "Hidden Power Electric"]] + }] + }, + "koffing": { + "flags": {}, + "sets": [{ + "species": "Koffing", + "item": ["Eviolite"], + "ability": ["Levitate"], + "evs": {"hp": 36, "def": 236, "spd": 236}, + "nature": "Bold", + "moves": [["Sludge Bomb"], ["Fire Blast", "Clear Smog"], ["Will-O-Wisp"], ["Pain Split"]] + }, { + "species": "Koffing", + "item": ["Eviolite"], + "ability": ["Levitate"], + "evs": {"hp": 36, "def": 236, "spd": 236}, + "nature": "Bold", + "moves": [["Sludge Bomb"], ["Toxic Spikes"], ["Will-O-Wisp"], ["Pain Split"]] + }, { + "species": "Koffing", + "item": ["Darkinium Z"], + "ability": ["Levitate"], + "evs": {"hp": 196, "def": 236, "spd": 76}, + "nature": "Bold", + "moves": [["Sludge Bomb"], ["Toxic Spikes"], ["Will-O-Wisp"], ["Memento"]] + }, { + "species": "Koffing", + "item": ["Berry Juice"], + "ability": ["Levitate"], + "evs": {"hp": 36, "def": 76, "spa": 36, "spd": 236, "spe": 76}, + "nature": "Bold", + "moves": [["Thief"], ["Will-O-Wisp"], ["Sludge Bomb", "Clear Smog"], ["Psybeam", "Fire Blast", "Thunderbolt"]] + }] + }, + "meowth": { + "flags": {}, + "sets": [{ + "species": "Meowth", + "item": ["Life Orb"], + "ability": ["Technician"], + "evs": {"atk": 236, "spa": 36, "spd": 36, "spe": 196}, + "ivs": {"hp": 19}, + "nature": "Lonely", + "moves": [["Fake Out"], ["Feint"], ["Water Pulse"], ["Aerial Ace", "Double-Edge"]] + }] + }, + "pikipek": { + "flags": {}, + "sets": [{ + "species": "Pikipek", + "item": ["Choice Scarf"], + "ability": ["Skill Link"], + "evs": {"atk": 236, "def": 36, "spe": 236}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Bullet Seed"], ["Brick Break"], ["Knock Off"]] + }, { + "species": "Pikipek", + "item": ["Life Orb"], + "ability": ["Skill Link"], + "evs": {"atk": 236, "def": 36, "spe": 236}, + "ivs": {"hp": 10}, + "nature": "Jolly", + "moves": [["Drill Peck", "Brave Bird"], ["Bullet Seed"], ["Brick Break", "U-turn"], ["Flame Charge"]] + }, { + "species": "Pikipek", + "item": ["Flyinium Z"], + "ability": ["Skill Link"], + "evs": {"atk": 236, "def": 36, "spe": 236}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Bullet Seed"], ["U-turn", "Brick Break", "Knock Off"], ["Flame Charge"]] + }] + }, + "pumpkaboosmall": { + "flags": {}, + "sets": [{ + "species": "Pumpkaboo-Small", + "item": ["Ghostium Z"], + "ability": ["Frisk"], + "evs": {"hp": 4, "def": 36, "spa": 164, "spd": 156, "spe": 148}, + "nature": "Modest", + "moves": [["Trick-or-Treat"], ["Shadow Ball"], ["Giga Drain", "Destiny Bond"], ["Fire Blast"]] + }] + }, + "riolu": { + "flags": {}, + "sets": [{ + "species": "Riolu", + "item": ["Eviolite"], + "ability": ["Prankster"], + "evs": {"hp": 116, "atk": 196, "def": 116, "spd": 36, "spe": 36}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["High Jump Kick"], ["Protect", "Meteor Mash", "Crunch"], ["Copycat"]] + }] + }, + "salandit": { + "flags": {}, + "sets": [{ + "species": "Salandit", + "item": ["Poisonium Z"], + "ability": ["Oblivious"], + "evs": {"def": 36, "spa": 192, "spd": 36, "spe": 220}, + "nature": "Timid", + "moves": [["Sludge Bomb"], ["Fire Blast"], ["Hidden Power Grass"], ["Nasty Plot", "Flame Charge"]] + }, { + "species": "Salandit", + "item": ["Life Orb"], + "ability": ["Corrosion"], + "evs": {"def": 36, "spa": 192, "spd": 40, "spe": 220}, + "ivs": {"hp": 3}, + "nature": "Timid", + "moves": [["Sludge Bomb"], ["Fire Blast"], ["Hidden Power Grass"], ["Nasty Plot", "Flame Charge"]] + }] + }, + "sandshrewalola": { + "flags": {}, + "sets": [{ + "species": "Sandshrew-Alola", + "item": ["Choice Scarf"], + "ability": ["Slush Rush"], + "evs": {"atk": 236, "spd": 76, "spe": 196}, + "nature": "Jolly", + "moves": [["Icicle Spear"], ["Iron Head"], ["Earthquake"], ["Rapid Spin"]] + }] + }, + "numel": { + "flags": {}, + "sets": [{ + "species": "Numel", + "item": ["Eviolite"], + "ability": ["Oblivious"], + "evs": {"hp": 36, "def": 36, "spa": 236, "spd": 156}, + "nature": "Calm", + "moves": [["Stealth Rock"], ["Lava Plume"], ["Earth Power"], ["Ancient Power", "Yawn"]] + }, { + "species": "Numel", + "item": ["Life Orb"], + "ability": ["Simple"], + "evs": {"hp": 36, "spa": 236, "spe": 236}, + "nature": "Timid", + "moves": [["Flame Charge"], ["Fire Blast"], ["Earth Power"], ["Ancient Power", "Growth"]] + }] + }, + "trapinch": { + "flags": {}, + "sets": [{ + "species": "Trapinch", + "item": ["Eviolite"], + "ability": ["Arena Trap"], + "evs": {"hp": 156, "atk": 36, "def": 76, "spd": 236}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Rock Slide"], ["Feint"], ["Toxic"]] + }] + }, + "trubbish": { + "flags": {}, + "sets": [{ + "species": "Trubbish", + "item": ["Berry Juice"], + "ability": ["Sticky Hold"], + "evs": {"hp": 116, "atk": 36, "def": 100, "spd": 20, "spe": 236}, + "nature": "Jolly", + "moves": [["Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Recycle"]] + }, { + "species": "Trubbish", + "item": ["Berry Juice"], + "ability": ["Sticky Hold"], + "evs": {"hp": 116, "atk": 36, "def": 100, "spd": 20, "spe": 236}, + "nature": "Jolly", + "moves": [["Toxic Spikes"], ["Gunk Shot"], ["Drain Punch"], ["Clear Smog"]] + }] + } + }, + "Mono": { + "armaldo": { + "flags": {}, + "sets": [{ + "species": "Armaldo", + "item": ["Leftovers"], + "ability": ["Battle Armor"], + "evs": {"hp": 248, "atk": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Stone Edge"], ["Knock Off"], ["Rapid Spin"]] + }, { + "species": "Armaldo", + "item": ["Leftovers"], + "ability": ["Battle Armor"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Stone Edge"], ["Earthquake"], ["Rapid Spin"]] + }, { + "species": "Armaldo", + "item": ["Assault Vest"], + "ability": ["Battle Armor"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Stone Edge"], ["X-Scissor"], ["Earthquake"], ["Rapid Spin"]] + }] + }, + "pinsir": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Pinsir", + "item": ["Pinsirite"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Return"], ["Close Combat"], ["Quick Attack"]] + }, { + "species": "Pinsir", + "item": ["Pinsirite"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Return"], ["Earthquake"], ["Quick Attack"]] + }] + }, + "volcarona": { + "flags": {}, + "sets": [{ + "species": "Volcarona", + "item": ["Firium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Bug Buzz"], ["Giga Drain"]] + }, { + "species": "Volcarona", + "item": ["Firium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Bug Buzz"], ["Hidden Power Ground"]] + }, { + "species": "Volcarona", + "item": ["Life Orb"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fiery Dance"], ["Bug Buzz"], ["Giga Drain"]] + }, { + "species": "Volcarona", + "item": ["Psychium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Psychic"], ["Giga Drain"]] + }, { + "species": "Volcarona", + "item": ["Psychium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Psychic"], ["Hidden Power Ground"]] + }, { + "species": "Volcarona", + "item": ["Firium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Bug Buzz"], ["Giga Drain"]] + }, { + "species": "Volcarona", + "item": ["Firium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Bug Buzz"], ["Hidden Power Ice"]] + }, { + "species": "Volcarona", + "item": ["Life Orb"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fiery Dance"], ["Bug Buzz"], ["Giga Drain"]] + }, { + "species": "Volcarona", + "item": ["Psychium Z"], + "ability": ["Flame Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Fire Blast"], ["Psychic"], ["Giga Drain", "Bug Buzz"]] + }] + }, + "araquanid": { + "flags": {}, + "sets": [{ + "species": "Araquanid", + "item": ["Assault Vest"], + "ability": ["Water Bubble"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Leech Life"], ["Mirror Coat"], ["Poison Jab", "Crunch"]] + }, { + "species": "Araquanid", + "item": ["Assault Vest"], + "ability": ["Water Bubble"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Brave", + "moves": [["Liquidation"], ["Leech Life"], ["Scald"], ["Mirror Coat"]] + }, { + "species": "Araquanid", + "item": ["Splash Plate"], + "ability": ["Water Bubble"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Sticky Web"], ["Liquidation"], ["Leech Life"], ["Mirror Coat", "Toxic"]] + }, { + "species": "Araquanid", + "item": ["Waterium Z"], + "ability": ["Water Bubble"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Leech Life"], ["Toxic"], ["Infestation"]] + }, { + "species": "Araquanid", + "item": ["Focus Sash"], + "ability": ["Water Bubble"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Liquidation"], ["Leech Life"], ["Sticky Web"], ["Mirror Coat"]] + }] + }, + "buzzwole": { + "flags": {}, + "sets": [{ + "species": "Buzzwole", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Leech Life"], ["Superpower"], ["Ice Punch"], ["Earthquake"]] + }, { + "species": "Buzzwole", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Leech Life"], ["Drain Punch"], ["Stone Edge"], ["Earthquake"]] + }, { + "species": "Buzzwole", + "item": ["Choice Band"], + "ability": ["Beast Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Leech Life"], ["Drain Punch"], ["Ice Punch", "Stone Edge"], ["Poison Jab"]] + }, { + "species": "Buzzwole", + "item": ["Assault Vest"], + "ability": ["Beast Boost"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Leech Life"], ["Drain Punch"], ["Ice Punch"], ["Earthquake"]] + }, { + "species": "Buzzwole", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Leech Life"], ["Drain Punch"], ["Ice Punch"], ["Roost"]] + }, { + "species": "Buzzwole", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Leech Life"], ["Superpower"], ["Ice Punch"], ["Earthquake"]] + }, { + "species": "Buzzwole", + "item": ["Choice Band"], + "ability": ["Beast Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Leech Life"], ["Hammer Arm"], ["Stone Edge"], ["Earthquake"]] + }] + }, + "galvantula": { + "flags": {}, + "sets": [{ + "species": "Galvantula", + "item": ["Focus Sash"], + "ability": ["Compound Eyes"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Thunder"], ["Energy Ball"], ["Bug Buzz"]] + }, { + "species": "Galvantula", + "item": ["Focus Sash"], + "ability": ["Compound Eyes"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Thunder"], ["Energy Ball"], ["Hidden Power Ice"]] + }, { + "species": "Galvantula", + "item": ["Focus Sash"], + "ability": ["Compound Eyes"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Thunder"], ["Energy Ball"], ["Hidden Power Ice"]] + }] + }, + "heracross": { + "flags": {}, + "sets": [{ + "species": "Heracross", + "item": ["Choice Scarf"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Megahorn"], ["Close Combat"], ["Stone Edge"], ["Earthquake", "Knock Off"]] + }, { + "species": "Heracross", + "item": ["Heracronite"], + "ability": ["Guts"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Pin Missile"], ["Close Combat"], ["Rock Blast"], ["Bullet Seed"]] + }, { + "species": "Heracross", + "item": ["Choice Scarf"], + "ability": ["Guts"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Megahorn"], ["Knock Off"], ["Stone Edge"]] + }, { + "species": "Heracross", + "item": ["Choice Scarf"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Megahorn"], ["Knock Off"], ["Stone Edge"]] + }, { + "species": "Heracross", + "item": ["Heracronite"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Pin Missile"], ["Bullet Seed"], ["Rock Blast"]] + }, { + "species": "Heracross", + "item": ["Heracronite"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Close Combat"], ["Pin Missile"], ["Rock Blast"], ["Substitute", "Swords Dance"]] + }] + }, + "scizor": { + "flags": {}, + "sets": [{ + "species": "Scizor", + "item": ["Choice Band"], + "ability": ["Technician"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["Superpower"], ["Knock Off", "Pursuit"], ["U-turn"]] + }, { + "species": "Scizor", + "item": ["Life Orb"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Bullet Punch"], ["Knock Off"], ["Superpower"]] + }, { + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Bullet Punch"], ["Roost"], ["Superpower", "Knock Off"]] + }, { + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Bullet Punch"], ["Bug Bite"], ["Superpower", "Knock Off"]] + }, { + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Defog"], ["Roost"], ["Bullet Punch"], ["U-turn"]] + }, { + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"hp": 200, "atk": 252, "spe": 56}, + "nature": "Adamant", + "moves": [["Bullet Punch"], ["Bug Bite", "Superpower", "Knock Off"], ["Swords Dance"], ["Roost"]] + }, { + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Bullet Punch"], ["Bug Bite"], ["Superpower"], ["Swords Dance"]] + }, { + "species": "Scizor", + "item": ["Scizorite"], + "ability": ["Light Metal"], + "evs": {"hp": 248, "def": 44, "spd": 216}, + "nature": "Careful", + "moves": [["Bullet Punch"], ["U-turn"], ["Roost"], ["Swords Dance", "Toxic"]] + }] + }, + "forretress": { + "flags": {}, + "sets": [{ + "species": "Forretress", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Volt Switch"], ["Rapid Spin"], ["Toxic"]] + }, { + "species": "Forretress", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Spikes"], ["Rapid Spin"], ["Toxic"]] + }, { + "species": "Forretress", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Toxic Spikes"], ["Rapid Spin"], ["Toxic"]] + }, { + "species": "Forretress", + "item": ["Red Card"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Spikes"], ["Rapid Spin"], ["Gyro Ball"], ["Volt Switch", "Pain Split"]] + }, { + "species": "Forretress", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Stealth Rock"], ["Rapid Spin"], ["Gyro Ball", "Volt Switch"], ["Pain Split"]] + }] + }, + "scolipede": { + "flags": {}, + "sets": [{ + "species": "Scolipede", + "item": ["Focus Sash"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Spikes"], ["Megahorn", "Poison Jab"], ["Earthquake"], ["Swords Dance", "Endeavor"]] + }, { + "species": "Scolipede", + "item": ["Waterium Z"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Poison Jab"], ["Aqua Tail"], ["Earthquake"]] + }, { + "species": "Scolipede", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Protect"], ["Poison Jab"], ["Earthquake"], ["Megahorn"]] + }, { + "species": "Scolipede", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Protect"], ["Poison Jab"], ["Earthquake"], ["Toxic Spikes"]] + }, { + "species": "Scolipede", + "item": ["Focus Sash"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes"], ["Megahorn"], ["Endeavor"], ["Earthquake"]] + }, { + "species": "Scolipede", + "item": ["Focus Sash"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes"], ["Megahorn"], ["Endeavor"], ["Toxic Spikes"]] + }, { + "species": "Scolipede", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Megahorn"], ["Earthquake"], ["Rock Slide", "Protect"]] + }, { + "species": "Scolipede", + "item": ["Buginium Z"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Megahorn"], ["Earthquake"], ["Rock Slide", "Poison Jab"]] + }, { + "species": "Scolipede", + "item": ["Waterium Z"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Megahorn"], ["Earthquake"], ["Aqua Tail"]] + }] + }, + "shuckle": { + "flags": {}, + "sets": [{ + "species": "Shuckle", + "item": ["Mental Herb"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Encore"], ["Infestation", "Knock Off"]] + }, { + "species": "Shuckle", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Sticky Web"], ["Stealth Rock"], ["Toxic"], ["Infestation", "Encore"]] + }, { + "species": "Shuckle", + "item": ["Mental Herb"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Encore"], ["Toxic", "Knock Off"]] + }] + }, + "ribombee": { + "flags": {}, + "sets": [{ + "species": "Ribombee", + "item": ["Focus Sash"], + "ability": ["Sweet Veil"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Moonblast"], ["Bug Buzz", "Psychic", "Energy Ball"], ["Sticky Web"]] + }, { + "species": "Ribombee", + "item": ["Focus Sash"], + "ability": ["Sweet Veil"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Moonblast"], ["Energy Ball"], ["Bug Buzz", "Psychic"]] + }, { + "species": "Ribombee", + "item": ["Focus Sash"], + "ability": ["Sweet Veil"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Quiver Dance"], ["Moonblast"], ["Energy Ball"], ["Defog"]] + }, { + "species": "Ribombee", + "item": ["Focus Sash"], + "ability": ["Sweet Veil"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Moonblast"], ["Bug Buzz"], ["Quiver Dance", "Stun Spore"]] + }, { + "species": "Ribombee", + "item": ["Focus Sash"], + "ability": ["Sweet Veil"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sticky Web"], ["Moonblast"], ["Bug Buzz"], ["Hidden Power Fire"]] + }] + }, + "yanmega": { + "flags": {}, + "sets": [{ + "species": "Yanmega", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Protect"], ["Bug Buzz"], ["Air Slash"], ["Giga Drain"]] + }, { + "species": "Yanmega", + "item": ["Life Orb"], + "ability": ["Speed Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Protect"], ["Bug Buzz"], ["Air Slash"], ["Ancient Power", "Psychic"]] + }, { + "species": "Yanmega", + "item": ["Choice Specs"], + "ability": ["Tinted Lens"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Air Slash"], ["Giga Drain"], ["U-turn"]] + }, { + "species": "Yanmega", + "item": ["Choice Specs"], + "ability": ["Tinted Lens"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Air Slash"], ["Hidden Power Fire"], ["U-turn"]] + }, { + "species": "Yanmega", + "item": ["Choice Specs"], + "ability": ["Tinted Lens"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Bug Buzz"], ["Air Slash"], ["Hidden Power Ice"], ["U-turn"]] + }] + }, + "durant": { + "flags": {}, + "sets": [{ + "species": "Durant", + "item": ["Choice Band"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["X-Scissor"], ["Rock Slide"], ["Superpower"]] + }, { + "species": "Durant", + "item": ["Choice Scarf"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["X-Scissor"], ["Rock Slide"], ["Superpower"]] + }, { + "species": "Durant", + "item": ["Darkinium Z"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["Stone Edge"], ["X-Scissor", "Superpower"], ["Hone Claws"]] + }, { + "species": "Durant", + "item": ["Darkinium Z"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Hone Claws"], ["Iron Head"], ["X-Scissor"], ["Crunch"]] + }, { + "species": "Durant", + "item": ["Choice Scarf"], + "ability": ["Hustle"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Iron Head"], ["X-Scissor"], ["Rock Slide"], ["Superpower"]] + }] + }, + "vivillon": { + "flags": {}, + "sets": [{ + "species": "Vivillon", + "item": ["Focus Sash"], + "ability": ["Compound Eyes"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Sleep Powder"], ["Quiver Dance"], ["Hurricane"], ["Energy Ball", "Bug Buzz"]] + }] + }, + "greninja": { + "flags": {}, + "sets": [{ + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Naive", + "moves": [["U-turn"], ["Gunk Shot"], ["Ice Beam"], ["Low Kick", "Rock Slide"]] + }, { + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["U-turn"], ["Gunk Shot"], ["Ice Beam"], ["Hydro Pump"]] + }, { + "species": "Greninja", + "item": ["Life Orb"], + "ability": ["Protean"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Gunk Shot"], ["Extrasensory"], ["Hydro Pump"]] + }, { + "species": "Greninja", + "item": ["Life Orb"], + "ability": ["Protean"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Gunk Shot"], ["Extrasensory"], ["Hidden Power Fire"]] + }, { + "species": "Greninja", + "item": ["Groundium Z"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Dig"], ["Extrasensory"], ["Ice Beam"], ["Gunk Shot"]] + }, { + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Rock Slide", "Low Kick"], ["U-turn"], ["Gunk Shot"], ["Ice Beam"]] + }, { + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Dark Pulse"], ["U-turn"], ["Gunk Shot"], ["Ice Beam"]] + }, { + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Hidden Power Fire"], ["U-turn"], ["Gunk Shot"], ["Ice Beam"]] + }, { + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Spikes"], ["U-turn"], ["Gunk Shot"], ["Ice Beam"]] + }, { + "species": "Greninja", + "item": ["Choice Scarf"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Toxic Spikes"], ["U-turn"], ["Gunk Shot"], ["Ice Beam"]] + }, { + "species": "Greninja", + "item": ["Life Orb"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Gunk Shot"], ["Rock Slide"], ["Hydro Pump"]] + }, { + "species": "Greninja", + "item": ["Life Orb"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Gunk Shot"], ["Dark Pulse"], ["Hidden Power Fire"]] + }, { + "species": "Greninja", + "item": ["Life Orb"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Gunk Shot"], ["Dark Pulse"], ["Hidden Power Electric"]] + }, { + "species": "Greninja", + "item": ["Groundium Z"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Extrasensory"], ["Dig"], ["Ice Beam"], ["Gunk Shot"]] + }, { + "species": "Greninja", + "item": ["Groundium Z"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Extrasensory"], ["Dig"], ["Ice Beam"], ["Hidden Power Electric"]] + }, { + "species": "Greninja", + "item": ["Groundium Z"], + "ability": ["Protean"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Extrasensory"], ["Dig"], ["Ice Beam"], ["Hidden Power Fire"]] + }] + }, + "sableye": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Will-O-Wisp"], ["Recover"], ["Calm Mind"], ["Dark Pulse", "Snarl", "Shadow Ball"]] + }, { + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 60, "spd": 200}, + "ivs": {"spe": 0}, + "nature": "Sassy", + "moves": [["Metal Burst"], ["Will-O-Wisp"], ["Recover"], ["Knock Off", "Foul Play"]] + }, { + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 112, "spd": 148}, + "nature": "Careful", + "moves": [["Will-O-Wisp"], ["Recover"], ["Knock Off"], ["Foul Play"]] + }, { + "species": "Sableye", + "item": ["Sablenite"], + "ability": ["Prankster"], + "evs": {"hp": 248, "def": 116, "spd": 144}, + "nature": "Careful", + "moves": [["Will-O-Wisp"], ["Recover"], ["Knock Off"], ["Fake Out", "Protect", "Foul Play"]] + }] + }, + "mukalola": { + "flags": {}, + "sets": [{ + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 248, "def": 12, "spd": 248}, + "nature": "Careful", + "moves": [["Knock Off"], ["Pursuit"], ["Gunk Shot"], ["Fire Punch", "Rock Slide"]] + }, { + "species": "Muk-Alola", + "item": ["Black Sludge"], + "ability": ["Poison Touch"], + "evs": {"hp": 248, "def": 12, "spd": 248}, + "nature": "Careful", + "moves": [["Knock Off"], ["Curse"], ["Rest"], ["Sleep Talk"]] + }, { + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 248, "def": 12, "spd": 248}, + "nature": "Careful", + "moves": [["Knock Off"], ["Poison Jab"], ["Pursuit"], ["Fire Blast", "Clear Smog", "Infestation"]] + }, { + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 248, "def": 12, "spd": 248}, + "nature": "Careful", + "moves": [["Knock Off"], ["Poison Jab"], ["Pursuit"], ["Clear Smog", "Infestation"]] + }, { + "species": "Muk-Alola", + "item": ["Assault Vest"], + "ability": ["Poison Touch"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Poison Jab"], ["Pursuit"], ["Fire Punch"]] + }] + }, + "bisharp": { + "flags": {}, + "sets": [{ + "species": "Bisharp", + "item": ["Darkinium Z"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Sucker Punch"], ["Swords Dance"], ["Iron Head"]] + }, { + "species": "Bisharp", + "item": ["Life Orb"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Sucker Punch"], ["Swords Dance"], ["Iron Head"]] + }, { + "species": "Bisharp", + "item": ["Focus Sash"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Sucker Punch"], ["Iron Head"], ["Swords Dance", "Knock Off"]] + }, { + "species": "Bisharp", + "item": ["Darkinium Z"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Knock Off"], ["Sucker Punch"], ["Swords Dance"], ["Iron Head"]] + }, { + "species": "Bisharp", + "item": ["Life Orb"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Sucker Punch"], ["Swords Dance"], ["Iron Head"]] + }] + }, + "hydreigon": { + "flags": {}, + "sets": [{ + "species": "Hydreigon", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Draco Meteor"], ["Fire Blast"], ["U-turn"]] + }, { + "species": "Hydreigon", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Draco Meteor"], ["Fire Blast"], ["Earth Power", "Focus Blast"]] + }, { + "species": "Hydreigon", + "item": ["Dread Plate"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Draco Meteor"], ["Roost"], ["Taunt"]] + }, { + "species": "Hydreigon", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Flamethrower"], ["Flash Cannon"]] + }, { + "species": "Hydreigon", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Flamethrower", "Fire Blast"], ["Flash Cannon"], ["U-turn"]] + }, { + "species": "Hydreigon", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast", "Flash Cannon"], ["Taunt"]] + }, { + "species": "Hydreigon", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Dark Pulse"], ["Fire Blast", "Flash Cannon"], ["Defog"]] + }] + }, + "mandibuzz": { + "flags": {}, + "sets": [{ + "species": "Mandibuzz", + "item": ["Rocky Helmet"], + "ability": ["Overcoat"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Foul Play"], ["Roost"], ["Defog"], ["Knock Off"]] + }, { + "species": "Mandibuzz", + "item": ["Leftovers"], + "ability": ["Overcoat"], + "evs": {"hp": 248, "def": 140, "spd": 120}, + "nature": "Bold", + "moves": [["Roost"], ["Defog"], ["Taunt", "Toxic"], ["Foul Play", "Knock Off"]] + }, { + "species": "Mandibuzz", + "item": ["Rocky Helmet"], + "ability": ["Overcoat"], + "evs": {"hp": 248, "def": 244, "spe": 16}, + "nature": "Impish", + "moves": [["Foul Play"], ["Defog"], ["Taunt"], ["Roost"]] + }] + }, + "tyranitar": { + "flags": {}, + "sets": [{ + "species": "Tyranitar", + "item": ["Tyranitarite"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Stone Edge"], ["Earthquake", "Ice Punch"], ["Crunch", "Fire Punch"]] + }, { + "species": "Tyranitar", + "item": ["Tyranitarite"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Stone Edge"], ["Earthquake"], ["Stealth Rock"]] + }, { + "species": "Tyranitar", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Stealth Rock"], ["Stone Edge"], ["Pursuit"], ["Thunder Wave", "Fire Blast"]] + }, { + "species": "Tyranitar", + "item": ["Choice Band"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Crunch"], ["Stone Edge"], ["Pursuit"], ["Earthquake"]] + }, { + "species": "Tyranitar", + "item": ["Choice Band"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Stone Edge"], ["Crunch"], ["Fire Punch", "Earthquake"], ["Pursuit"]] + }, { + "species": "Tyranitar", + "item": ["Assault Vest"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Stone Edge"], ["Ice Beam"], ["Fire Blast"], ["Pursuit"]] + }, { + "species": "Tyranitar", + "item": ["Weakness Policy"], + "ability": ["Sand Stream"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Dark Pulse"], ["Ice Beam"], ["Fire Blast"], ["Rock Polish"]] + }, { + "species": "Tyranitar", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Sassy", + "moves": [["Crunch"], ["Thunder Wave"], ["Stone Edge", "Fire Blast"], ["Pursuit", "Ice Beam"]] + }, { + "species": "Tyranitar", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Sassy", + "moves": [["Crunch"], ["Stealth Rock"], ["Stone Edge", "Fire Blast"], ["Pursuit", "Ice Beam"]] + }, { + "species": "Tyranitar", + "item": ["Tyranitarite"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Crunch"], ["Stone Edge"], ["Earthquake"]] + }, { + "species": "Tyranitar", + "item": ["Tyranitarite"], + "ability": ["Sand Stream"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Crunch"], ["Fire Punch"], ["Ice Punch"]] + }] + }, + "krookodile": { + "flags": {}, + "sets": [{ + "species": "Krookodile", + "item": ["Focus Sash"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Taunt"], ["Knock Off"], ["Earthquake"]] + }, { + "species": "Krookodile", + "item": ["Choice Scarf"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Earthquake"], ["Pursuit"], ["Stone Edge"]] + }, { + "species": "Krookodile", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["Stone Edge"], ["Pursuit"]] + }, { + "species": "Krookodile", + "item": ["Focus Sash"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["Taunt"], ["Pursuit"]] + }, { + "species": "Krookodile", + "item": ["Focus Sash"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["Stealth Rock"], ["Pursuit"]] + }, { + "species": "Krookodile", + "item": ["Choice Scarf"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["Stone Edge"], ["Superpower"]] + }] + }, + "sharpedo": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Sharpedo", + "item": ["Sharpedonite"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Protect"], ["Psychic Fangs"], ["Crunch"], ["Waterfall", "Ice Fang"]] + }, { + "species": "Sharpedo", + "item": ["Sharpedonite"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Protect"], ["Psychic Fangs"], ["Crunch"], ["Hydro Pump"]] + }, { + "species": "Sharpedo", + "item": ["Sharpedonite"], + "ability": ["Speed Boost"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Crunch"], ["Psychic Fangs"], ["Ice Fang", "Waterfall"], ["Protect"]] + }] + }, + "crawdaunt": { + "flags": {}, + "sets": [{ + "species": "Crawdaunt", + "item": ["Choice Band"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Superpower"]] + }, { + "species": "Crawdaunt", + "item": ["Life Orb"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Swords Dance"]] + }, { + "species": "Crawdaunt", + "item": ["Life Orb"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Swords Dance"]] + }, { + "species": "Crawdaunt", + "item": ["Choice Band"], + "ability": ["Adaptability"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Crabhammer"], ["Knock Off"], ["Aqua Jet"], ["Superpower", "Crunch"]] + }] + }, + "honchkrow": { + "flags": {}, + "sets": [{ + "species": "Honchkrow", + "item": ["Life Orb"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Sucker Punch"], ["Brave Bird"], ["Superpower"], ["Dark Pulse", "Heat Wave"]] + }] + }, + "weavile": { + "flags": {}, + "sets": [{ + "species": "Weavile", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Knock Off"], ["Ice Shard"], ["Low Kick", "Pursuit", "Swords Dance"]] + }, { + "species": "Weavile", + "item": ["Choice Band"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Knock Off"], ["Ice Shard"], ["Low Kick"]] + }, { + "species": "Weavile", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Icicle Crash"], ["Low Kick", "Pursuit"], ["Ice Shard"]] + }, { + "species": "Weavile", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Icicle Crash"], ["Swords Dance"], ["Ice Shard"]] + }, { + "species": "Weavile", + "item": ["Fightinium Z"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Swords Dance"], ["Low Kick"], ["Ice Shard"]] + }, { + "species": "Weavile", + "item": ["Groundium Z"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Swords Dance"], ["Dig"], ["Ice Shard"]] + }, { + "species": "Weavile", + "item": ["Choice Scarf"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Icicle Crash"], ["Low Kick"], ["Pursuit"]] + }] + }, + "cacturne": { + "flags": {}, + "sets": [{ + "species": "Cacturne", + "item": ["Life Orb"], + "ability": ["Water Absorb"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spikes"], ["Sucker Punch"], ["Seed Bomb"], ["Swords Dance"]] + }] + }, + "houndoom": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Houndoom", + "item": ["Houndoominite"], + "ability": ["Flash Fire"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Dark Pulse"], ["Sludge Bomb"], ["Nasty Plot"]] + }] + }, + "umbreon": { + "flags": {}, + "sets": [{ + "species": "Umbreon", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Foul Play"], ["Wish"], ["Protect"], ["Heal Bell", "Toxic"]] + }] + }, + "dragonite": { + "flags": {}, + "sets": [{ + "species": "Dragonite", + "item": ["Choice Band"], + "ability": ["Multiscale"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Outrage"], ["Fire Punch"], ["Extreme Speed"], ["Superpower"]] + }, { + "species": "Dragonite", + "item": ["Weakness Policy"], + "ability": ["Multiscale"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Outrage"], ["Fire Punch", "Earthquake"], ["Extreme Speed"]] + }, { + "species": "Dragonite", + "item": ["Lum Berry"], + "ability": ["Multiscale"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Outrage"], ["Fire Punch", "Earthquake"], ["Extreme Speed"]] + }, { + "species": "Dragonite", + "item": ["Choice Band"], + "ability": ["Multiscale"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Outrage"], ["Extreme Speed"], ["Fire Punch"], ["Superpower"]] + }, { + "species": "Dragonite", + "item": ["Lum Berry"], + "ability": ["Multiscale"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Outrage"], ["Extreme Speed"], ["Fire Punch"], ["Dragon Dance"]] + }] + }, + "kyuremblack": { + "flags": {}, + "sets": [{ + "species": "Kyurem-Black", + "item": ["Life Orb"], + "ability": ["Teravolt"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Roost"]] + }, { + "species": "Kyurem-Black", + "item": ["Choice Scarf"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Outrage"], ["Ice Beam"], ["Fusion Bolt"], ["Iron Head", "Earth Power"]] + }, { + "species": "Kyurem-Black", + "item": ["Icium Z"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Freeze Shock"], ["Ice Beam"], ["Fusion Bolt"], ["Earth Power"]] + }, { + "species": "Kyurem-Black", + "item": ["Choice Scarf"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Outrage"]] + }, { + "species": "Kyurem-Black", + "item": ["Choice Scarf"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Outrage", "Iron Head"]] + }, { + "species": "Kyurem-Black", + "item": ["Life Orb"], + "ability": ["Teravolt"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Hidden Power Fire"]] + }, { + "species": "Kyurem-Black", + "item": ["Life Orb"], + "ability": ["Teravolt"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Roost"]] + }, { + "species": "Kyurem-Black", + "item": ["Icium Z"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Naughty", + "moves": [["Freeze Shock"], ["Fusion Bolt"], ["Earth Power"], ["Ice Beam", "Outrage"]] + }, { + "species": "Kyurem-Black", + "item": ["Choice Band"], + "ability": ["Teravolt"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Ice Beam"], ["Fusion Bolt"], ["Earth Power"], ["Outrage"]] + }] + }, + "garchomp": { + "flags": {}, + "sets": [{ + "species": "Garchomp", + "item": ["Focus Sash"], + "ability": ["Rough Skin"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Stealth Rock"], ["Earthquake"], ["Fire Blast"], ["Outrage", "Stone Edge"]] + }, { + "species": "Garchomp", + "item": ["Rocky Helmet"], + "ability": ["Rough Skin"], + "evs": {"hp": 248, "atk": 8, "def": 252}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Earthquake"], ["Fire Blast"], ["Dragon Tail"]] + }, { + "species": "Garchomp", + "item": ["Dragonium Z"], + "ability": ["Rough Skin"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Outrage"], ["Earthquake"], ["Fire Fang"]] + }, { + "species": "Garchomp", + "item": ["Garchompite"], + "ability": ["Rough Skin"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Stealth Rock"]] + }, { + "species": "Garchomp", + "item": ["Choice Scarf"], + "ability": ["Rough Skin"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Earthquake"], ["Outrage"], ["Stone Edge"], ["Fire Blast"]] + }, { + "species": "Garchomp", + "item": ["Dragonium Z"], + "ability": ["Sand Veil"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Outrage"], ["Fire Fang"]] + }, { + "species": "Garchomp", + "item": ["Firium Z"], + "ability": ["Sand Veil"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Outrage"], ["Fire Fang"]] + }, { + "species": "Garchomp", + "item": ["Garchompite"], + "ability": ["Rough Skin"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Dragon Claw", "Fire Fang"]] + }, { + "species": "Garchomp", + "item": ["Garchompite"], + "ability": ["Rough Skin"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Stone Edge"], ["Stealth Rock"]] + }, { + "species": "Garchomp", + "item": ["Garchompite"], + "ability": ["Rough Skin"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Earthquake"], ["Draco Meteor"], ["Fire Blast"], ["Stone Edge"]] + }, { + "species": "Garchomp", + "item": ["Garchompite"], + "ability": ["Rough Skin"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Earthquake"], ["Draco Meteor"], ["Fire Blast"], ["Stealth Rock"]] + }] + }, + "latios": { + "flags": {}, + "sets": [{ + "species": "Latios", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic"], ["Ice Beam"], ["Defog"]] + }, { + "species": "Latios", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic"], ["Hidden Power Steel"], ["Defog"]] + }, { + "species": "Latios", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic"], ["Hidden Power Fire"], ["Trick"]] + }, { + "species": "Latios", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic"], ["Defog"], ["Trick"]] + }, { + "species": "Latios", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Hidden Power Steel"], ["Trick"]] + }, { + "species": "Latios", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Hidden Power Fire"], ["Trick"]] + }, { + "species": "Latios", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic"], ["Defog"], ["Trick"]] + }, { + "species": "Latios", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Surf"], ["Trick"]] + }, { + "species": "Latios", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Surf", "Earthquake"], ["Roost"]] + }, { + "species": "Latios", + "item": ["Life Orb"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Surf", "Earthquake"], ["Defog"]] + }, { + "species": "Latios", + "item": ["Soul Dew"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Roost"], ["Defog"]] + }, { + "species": "Latios", + "item": ["Dragonium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Calm Mind"], ["Roost"]] + }, { + "species": "Latios", + "item": ["Psychium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psyshock"], ["Heal Block"], ["Calm Mind"]] + }, { + "species": "Latios", + "item": ["Latiosite"], + "ability": ["Levitate"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Psychic"], ["Hidden Power Fire"], ["Earthquake"], ["Roost"]] + }, { + "species": "Latios", + "item": ["Latiosite"], + "ability": ["Levitate"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Psychic"], ["Draco Meteor"], ["Earthquake"], ["Roost"]] + }, { + "species": "Latios", + "item": ["Latiosite"], + "ability": ["Levitate"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Psychic"], ["Hidden Power Fire"], ["Earthquake"], ["Roost"]] + }, { + "species": "Latios", + "item": ["Latiosite"], + "ability": ["Levitate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Zen Headbutt"], ["Dragon Dance"], ["Earthquake"], ["Roost"]] + }] + }, + "altaria": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Altaria", + "item": ["Altarianite"], + "ability": ["Natural Cure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Dragon Dance"], ["Return"], ["Roost"], ["Earthquake", "Heal Bell"]] + }, { + "species": "Altaria", + "item": ["Altarianite"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Return"], ["Roost"], ["Refresh"]] + }] + }, + "latias": { + "flags": {}, + "sets": [{ + "species": "Latias", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Psychic"], ["Defog"], ["Healing Wish", "Trick"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Ice Beam"], ["Thunderbolt"], ["Recover"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Stored Power"], ["Refresh"], ["Recover"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spa": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Ice Beam"], ["Thunderbolt"], ["Recover"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spd": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Stored Power"], ["Calm Mind"], ["Roost"], ["Thunderbolt"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spd": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Stored Power"], ["Calm Mind"], ["Roost"], ["Refresh"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spd": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Calm Mind"], ["Roost"], ["Thunderbolt"]] + }, { + "species": "Latias", + "item": ["Latiasite"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spd": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Defog"], ["Roost"], ["Thunderbolt"]] + }, { + "species": "Latias", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Draco Meteor"], ["Thunderbolt", "Psyshock"], ["Defog"], ["Healing Wish"]] + }] + }, + "kommoo": { + "flags": {}, + "sets": [{ + "species": "Kommo-o", + "item": ["Kommonium Z"], + "ability": ["Bulletproof"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Clanging Scales"], ["Close Combat"], ["Poison Jab"], ["Dragon Dance"]] + }, { + "species": "Kommo-o", + "item": ["Kommonium Z"], + "ability": ["Bulletproof"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Clanging Scales"], ["Close Combat"], ["Flamethrower"], ["Flash Cannon"]] + }, { + "species": "Kommo-o", + "item": ["Kommonium Z"], + "ability": ["Soundproof"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Clanging Scales"], ["Poison Jab"], ["Earthquake"], ["Dragon Dance"]] + }, { + "species": "Kommo-o", + "item": ["Kommonium Z"], + "ability": ["Soundproof"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Clanging Scales"], ["Flamethrower"], ["Earthquake"], ["Dragon Dance"]] + }, { + "species": "Kommo-o", + "item": ["Kommonium Z"], + "ability": ["Soundproof"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Clanging Scales"], ["Close Combat"], ["Earthquake"], ["Dragon Dance"]] + }] + }, + "dragalge": { + "flags": {}, + "sets": [{ + "species": "Dragalge", + "item": ["Black Sludge"], + "ability": ["Adaptability"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Toxic Spikes"], ["Draco Meteor"], ["Sludge Wave"], ["Thunderbolt"]] + }, { + "species": "Dragalge", + "item": ["Black Sludge"], + "ability": ["Adaptability"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Toxic Spikes"], ["Draco Meteor"], ["Sludge Wave"], ["Hidden Power Fire"]] + }, { + "species": "Dragalge", + "item": ["Choice Specs"], + "ability": ["Adaptability"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Bomb", "Sludge Wave"], ["Thunderbolt"], ["Scald"]] + }, { + "species": "Dragalge", + "item": ["Choice Specs"], + "ability": ["Adaptability"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Bomb", "Sludge Wave"], ["Thunderbolt"], ["Hidden Power Fire"]] + }, { + "species": "Dragalge", + "item": ["Assault Vest"], + "ability": ["Adaptability"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Bomb"], ["Thunderbolt"], ["Scald"]] + }, { + "species": "Dragalge", + "item": ["Choice Specs"], + "ability": ["Adaptability"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Wave"], ["Thunderbolt"], ["Scald"]] + }, { + "species": "Dragalge", + "item": ["Choice Specs"], + "ability": ["Adaptability"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Wave"], ["Thunderbolt"], ["Focus Blast", "Dragon Pulse"]] + }, { + "species": "Dragalge", + "item": ["Choice Specs"], + "ability": ["Adaptability"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Wave"], ["Thunderbolt"], ["Hidden Power Fire"]] + }, { + "species": "Dragalge", + "item": ["Choice Specs"], + "ability": ["Adaptability"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Wave"], ["Thunderbolt"], ["Toxic Spikes"]] + }, { + "species": "Dragalge", + "item": ["Dragonium Z"], + "ability": ["Adaptability"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "nature": "Modest", + "moves": [["Draco Meteor"], ["Sludge Wave"], ["Thunderbolt"], ["Scald"]] + }] + }, + "salamence": { + "flags": {}, + "sets": [{ + "species": "Salamence", + "item": ["Choice Scarf"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Outrage"], ["Earthquake"], ["Fire Fang"], ["Dragon Claw", "Iron Tail"]] + }, { + "species": "Salamence", + "item": ["Flyinium Z"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Outrage"], ["Fly"], ["Earthquake"]] + }, { + "species": "Salamence", + "item": ["Dragonium Z"], + "ability": ["Moxie"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Outrage"], ["Fire Fang"], ["Earthquake"]] + }] + }, + "goodra": { + "flags": {}, + "sets": [{ + "species": "Goodra", + "item": ["Assault Vest"], + "ability": ["Gooey"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Draco Meteor", "Dragon Pulse"], ["Fire Blast", "Flamethrower"], ["Sludge Bomb"], ["Ice Beam", "Thunderbolt", "Dragon Tail"]] + }] + }, + "rotomwash": { + "flags": {}, + "sets": [{ + "species": "Rotom-Wash", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Volt Switch"], ["Hydro Pump"], ["Will-O-Wisp"], ["Defog"]] + }, { + "species": "Rotom-Wash", + "item": ["Psychium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dream Eater"], ["Thunderbolt"], ["Hydro Pump"], ["Volt Switch"]] + }, { + "species": "Rotom-Wash", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Volt Switch"], ["Hydro Pump"], ["Will-O-Wisp"], ["Defog"]] + }, { + "species": "Rotom-Wash", + "item": ["Psychium Z"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Dream Eater"], ["Thunderbolt"], ["Hydro Pump"], ["Volt Switch"]] + }] + }, + "tapukoko": { + "flags": {}, + "sets": [{ + "species": "Tapu Koko", + "item": ["Magnet"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["U-turn"], ["Taunt", "Dazzling Gleam"]] + }, { + "species": "Tapu Koko", + "item": ["Magnet"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Taunt"], ["Roost"]] + }, { + "species": "Tapu Koko", + "item": ["Choice Specs"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Dazzling Gleam", "Grass Knot"], ["Volt Switch"]] + }, { + "species": "Tapu Koko", + "item": ["Choice Band"], + "ability": ["Electric Surge"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Wild Charge"], ["Brave Bird"], ["U-turn"], ["Thunderbolt"]] + }, { + "species": "Tapu Koko", + "item": ["Flyinium Z"], + "ability": ["Electric Surge"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Wild Charge"], ["Brave Bird"], ["U-turn"], ["Thunderbolt"]] + }, { + "species": "Tapu Koko", + "item": ["Magnet"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["U-turn"], ["Taunt", "Grass Knot"]] + }, { + "species": "Tapu Koko", + "item": ["Choice Specs"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Volt Switch"], ["Grass Knot"]] + }, { + "species": "Tapu Koko", + "item": ["Magnet"], + "ability": ["Electric Surge"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Roost"], ["Taunt"]] + }] + }, + "zapdos": { + "flags": {}, + "sets": [{ + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Static"], + "evs": {"hp": 252, "def": 148, "spe": 108}, + "nature": "Bold", + "moves": [["Volt Switch"], ["Heat Wave"], ["Roost"], ["Hidden Power Ice"]] + }, { + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 148, "spe": 108}, + "nature": "Calm", + "moves": [["Volt Switch"], ["Heat Wave"], ["Roost"], ["Defog"]] + }, { + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 240, "spe": 16}, + "nature": "Calm", + "moves": [["Discharge"], ["Toxic"], ["Roost"], ["Defog"]] + }, { + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 136, "spe": 120}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Toxic"], ["Substitute"], ["Roost"]] + }, { + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 16, "spe": 240}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Toxic"], ["Substitute"], ["Roost"]] + }, { + "species": "Zapdos", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 240, "spe": 16}, + "nature": "Timid", + "moves": [["Discharge"], ["Toxic"], ["Roost"], ["Defog"]] + }] + }, + "golemalola": { + "flags": {}, + "sets": [{ + "species": "Golem-Alola", + "item": ["Leftovers"], + "ability": ["Galvanize"], + "evs": {"hp": 252, "spd": 54, "spe": 204}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Return"], ["Stone Edge"], ["Earthquake"]] + }, { + "species": "Golem-Alola", + "item": ["Life Orb"], + "ability": ["Galvanize"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Return"], ["Stone Edge"], ["Explosion"]] + }, { + "species": "Golem-Alola", + "item": ["Focus Sash"], + "ability": ["Galvanize"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Stealth Rock"], ["Return"], ["Stone Edge"], ["Explosion"]] + }, { + "species": "Golem-Alola", + "item": ["Electrium Z"], + "ability": ["Magnet Pull"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Thunder Punch", "Wild Charge"], ["Earthquake"], ["Fire Punch"], ["Stone Edge", "Volt Switch", "Brick Break"]] + }, { + "species": "Golem-Alola", + "item": ["Firium Z"], + "ability": ["Magnet Pull"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Thunder Punch"], ["Earthquake"], ["Fire Punch"], ["Stone Edge", "Brick Break"]] + }, { + "species": "Golem-Alola", + "item": ["Choice Band"], + "ability": ["Magnet Pull"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Thunder Punch", "Wild Charge"], ["Earthquake"], ["Fire Punch"], ["Volt Switch", "Brick Break"]] + }, { + "species": "Golem-Alola", + "item": ["Choice Band"], + "ability": ["Galvanize"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Double-Edge"], ["Earthquake"], ["Fire Punch", "Stone Edge"], ["Explosion"]] + }, { + "species": "Golem-Alola", + "item": ["Choice Band"], + "ability": ["Galvanize"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Return"], ["Earthquake"], ["Fire Punch", "Stone Edge"], ["Explosion"]] + }] + }, + "raichualola": { + "flags": {}, + "sets": [{ + "species": "Raichu-Alola", + "item": ["Life Orb"], + "ability": ["Surge Surfer"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Psychic"], ["Grass Knot"], ["Focus Blast", "Surf"]] + }] + }, + "magnezone": { + "flags": {}, + "sets": [{ + "species": "Magnezone", + "item": ["Air Balloon"], + "ability": ["Magnet Pull"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Fire"]] + }, { + "species": "Magnezone", + "item": ["Choice Specs"], + "ability": ["Magnet Pull"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Fire"]] + }, { + "species": "Magnezone", + "item": ["Choice Scarf"], + "ability": ["Magnet Pull"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Ground"]] + }, { + "species": "Magnezone", + "item": ["Choice Scarf"], + "ability": ["Magnet Pull"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Flash Cannon"], ["Volt Switch"], ["Hidden Power Fire"]] + }] + }, + "thundurus": { + "flags": {}, + "sets": [{ + "species": "Thundurus", + "item": ["Flyinium Z"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Wild Charge"], ["Fly"], ["Knock Off"], ["Superpower"]] + }, { + "species": "Thundurus", + "item": ["Choice Band"], + "ability": ["Defiant"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Wild Charge"], ["Knock Off"], ["Superpower"], ["U-turn"]] + }, { + "species": "Thundurus", + "item": ["Life Orb"], + "ability": ["Prankster"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Thunderbolt"], ["Hidden Power Ice"], ["Grass Knot", "Taunt"]] + }, { + "species": "Thundurus", + "item": ["Life Orb"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Nasty Plot", "Grass Knot"], ["Taunt"]] + }] + }, + "xurkitree": { + "flags": {}, + "sets": [{ + "species": "Xurkitree", + "item": ["Psychium Z"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Energy Ball"], ["Hypnosis"], ["Tail Glow"]] + }, { + "species": "Xurkitree", + "item": ["Electrium Z"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Energy Ball"], ["Electric Terrain"], ["Tail Glow"]] + }, { + "species": "Xurkitree", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Energy Ball"], ["Hidden Power Ice"], ["Volt Switch"]] + }] + }, + "manectric": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Manectric", + "item": ["Manectite"], + "ability": ["Lightning Rod"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Volt Switch"], ["Overheat"]] + }] + }, + "ampharos": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Ampharos", + "item": ["Ampharosite"], + "ability": ["Static"], + "evs": {"hp": 252, "def": 4, "spa": 252}, + "nature": "Modest", + "moves": [["Volt Switch"], ["Dragon Pulse"], ["Thunderbolt"], ["Focus Blast"]] + }, { + "species": "Ampharos", + "item": ["Ampharosite"], + "ability": ["Static"], + "evs": {"hp": 252, "def": 252, "spa": 4}, + "nature": "Bold", + "moves": [["Volt Switch"], ["Dragon Pulse"], ["Rest"], ["Sleep Talk"]] + }] + }, + "raikou": { + "flags": {}, + "sets": [{ + "species": "Raikou", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Substitute"], ["Calm Mind"]] + }, { + "species": "Raikou", + "item": ["Choice Specs"], + "ability": ["Pressure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Volt Switch"], ["Extrasensory"]] + }, { + "species": "Raikou", + "item": ["Assault Vest"], + "ability": ["Pressure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Volt Switch"], ["Extrasensory", "Shadow Ball"]] + }] + }, + "thundurustherian": { + "flags": {}, + "sets": [{ + "species": "Thundurus-Therian", + "item": ["Electrium Z"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Nasty Plot"], ["Agility", "Grass Knot"]] + }, { + "species": "Thundurus-Therian", + "item": ["Choice Scarf"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Grass Knot"], ["Volt Switch"]] + }, { + "species": "Thundurus-Therian", + "item": ["Choice Scarf"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Volt Switch"], ["Thunderbolt"], ["Hidden Power Ice"], ["Focus Blast"]] + }, { + "species": "Thundurus-Therian", + "item": ["Electrium Z"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Agility"], ["Nasty Plot"]] + }, { + "species": "Thundurus-Therian", + "item": ["Fightinium Z"], + "ability": ["Volt Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Hidden Power Ice"], ["Nasty Plot"], ["Focus Blast"]] + }] + }, + "azumarill": { + "flags": {}, + "sets": [{ + "species": "Azumarill", + "item": ["Normalium Z"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]] + }, { + "species": "Azumarill", + "item": ["Normalium Z"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]] + }, { + "species": "Azumarill", + "item": ["Sitrus Berry"], + "ability": ["Huge Power"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]] + }, { + "species": "Azumarill", + "item": ["Sitrus Berry"], + "ability": ["Huge Power"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Belly Drum"], ["Aqua Jet"], ["Play Rough"], ["Knock Off"]] + }, { + "species": "Azumarill", + "item": ["Leftovers"], + "ability": ["Sap Sipper"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Whirlpool"], ["Perish Song"], ["Rest"], ["Protect"]] + }, { + "species": "Azumarill", + "item": ["Leftovers"], + "ability": ["Sap Sipper"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Whirlpool"], ["Perish Song"], ["Rest"], ["Protect"]] + }] + }, + "klefki": { + "flags": {}, + "sets": [{ + "species": "Klefki", + "item": ["Light Clay"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Reflect"], ["Light Screen"], ["Thunder Wave"], ["Foul Play"]] + }, { + "species": "Klefki", + "item": ["Light Clay"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Reflect"], ["Light Screen"], ["Thunder Wave"], ["Spikes"]] + }, { + "species": "Klefki", + "item": ["Light Clay"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Reflect"], ["Light Screen"], ["Foul Play"], ["Spikes"]] + }, { + "species": "Klefki", + "item": ["Light Clay"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Reflect"], ["Light Screen"], ["Spikes"], ["Thunder Wave"]] + }] + }, + "diancie": { + "flags": {}, + "sets": [{ + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Hidden Power Fire"], ["Psychic", "Earth Power"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Moonblast"], ["Diamond Storm"], ["Hidden Power Fire"], ["Stealth Rock"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Moonblast"], ["Diamond Storm"], ["Psychic"], ["Stealth Rock"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Moonblast"], ["Diamond Storm"], ["Psychic"], ["Hidden Power Fire"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Moonblast"], ["Diamond Storm"], ["Psychic"], ["Rock Polish", "Calm Mind"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Diamond Storm"], ["Moonblast"], ["Hidden Power Fire"], ["Psychic", "Rock Polish"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Hidden Power Fire"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Diamond Storm"], ["Moonblast"], ["Earth Power"], ["Hidden Power Ice"]] + }, { + "species": "Diancie", + "item": ["Diancite"], + "ability": ["Clear Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Moonblast"], ["Power Gem"], ["Psychic"]] + }, { + "species": "Diancie", + "item": ["Weakness Policy"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "atk": 252, "spa": 4}, + "nature": "Brave", + "moves": [["Trick Room"], ["Diamond Storm"], ["Moonblast"], ["Explosion"]] + }] + }, + "clefable": { + "flags": {}, + "sets": [{ + "species": "Clefable", + "item": ["Babiri Berry"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Soft-Boiled"], ["Moonblast"], ["Fire Blast"], ["Calm Mind"]] + }, { + "species": "Clefable", + "item": ["Babiri Berry"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Soft-Boiled"], ["Moonblast"], ["Fire Blast"], ["Stealth Rock"]] + }, { + "species": "Clefable", + "item": ["Leftovers"], + "ability": ["Magic Guard"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Soft-Boiled"], ["Moonblast"], ["Thunder Wave"], ["Calm Mind"]] + }] + }, + "tapubulu": { + "flags": {}, + "sets": [{ + "species": "Tapu Bulu", + "item": ["Choice Scarf"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Wood Hammer"], ["Horn Leech"], ["Stone Edge"], ["Superpower"]] + }, { + "species": "Tapu Bulu", + "item": ["Choice Band"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Wood Hammer"], ["Horn Leech"], ["Zen Headbutt"], ["Superpower"]] + }, { + "species": "Tapu Bulu", + "item": ["Fightinium Z"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Wood Hammer"], ["Superpower"], ["Swords Dance"], ["Horn Leech", "Stone Edge", "Substitute"]] + }, { + "species": "Tapu Bulu", + "item": ["Choice Scarf"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Wood Hammer"], ["Superpower"], ["Stone Edge"], ["Horn Leech"]] + }, { + "species": "Tapu Bulu", + "item": ["Fightinium Z"], + "ability": ["Grassy Surge"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Horn Leech"], ["Superpower"], ["Stone Edge", "Substitute"]] + }] + }, + "primarina": { + "flags": {}, + "sets": [{ + "species": "Primarina", + "item": ["Choice Specs"], + "ability": ["Torrent"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Moonblast"], ["Psychic"], ["Hidden Power Fire"]] + }, { + "species": "Primarina", + "item": ["Choice Specs"], + "ability": ["Torrent"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Moonblast"], ["Hidden Power Fire"], ["Psychic"]] + }] + }, + "togekiss": { + "flags": {}, + "sets": [{ + "species": "Togekiss", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Air Slash"], ["Aura Sphere"], ["Fire Blast"], ["Trick"]] + }, { + "species": "Togekiss", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Air Slash"], ["Aura Sphere"], ["Fire Blast"], ["Defog"]] + }, { + "species": "Togekiss", + "item": ["Babiri Berry"], + "ability": ["Serene Grace"], + "evs": {"hp": 248, "def": 52, "spa": 32, "spe": 176}, + "nature": "Timid", + "moves": [["Air Slash"], ["Aura Sphere"], ["Fire Blast"], ["Roost"]] + }, { + "species": "Togekiss", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Air Slash"], ["Fire Blast"], ["Dazzling Gleam"], ["Trick"]] + }, { + "species": "Togekiss", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Air Slash"], ["Fire Blast"], ["Dazzling Gleam"], ["Defog"]] + }, { + "species": "Togekiss", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Air Slash"], ["Fire Blast"], ["Defog"], ["Trick"]] + }] + }, + "gardevoir": { + "flags": {}, + "sets": [{ + "species": "Gardevoir", + "item": ["Choice Scarf"], + "ability": ["Trace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Moonblast"], ["Psychic"], ["Focus Blast"], ["Trick", "Healing Wish"]] + }, { + "species": "Gardevoir", + "item": ["Gardevoirite"], + "ability": ["Trace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Will-O-Wisp", "Taunt", "Encore"]] + }, { + "species": "Gardevoir", + "item": ["Choice Scarf"], + "ability": ["Trace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Moonblast"], ["Psyshock"], ["Trick", "Focus Blast"], ["Healing Wish"]] + }, { + "species": "Gardevoir", + "item": ["Gardevoirite"], + "ability": ["Trace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Will-O-Wisp"]] + }, { + "species": "Gardevoir", + "item": ["Gardevoirite"], + "ability": ["Trace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hyper Voice"], ["Psyshock"], ["Focus Blast"], ["Substitute", "Encore"]] + }] + }, + "mimikyu": { + "flags": {}, + "sets": [{ + "species": "Mimikyu", + "item": ["Ghostium Z"], + "ability": ["Disguise"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Shadow Claw"], ["Play Rough"], ["Shadow Sneak"]] + }, { + "species": "Mimikyu", + "item": ["Mimikium Z"], + "ability": ["Disguise"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Shadow Claw"], ["Play Rough"], ["Shadow Sneak"]] + }, { + "species": "Mimikyu", + "item": ["Life Orb"], + "ability": ["Disguise"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Play Rough"], ["Shadow Claw"], ["Shadow Sneak"]] + }, { + "species": "Mimikyu", + "item": ["Red Card"], + "ability": ["Disguise"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"spe": 0}, + "nature": "Adamant", + "moves": [["Trick Room"], ["Play Rough"], ["Destiny Bond"], ["Shadow Sneak"]] + }] + }, + "slurpuff": { + "flags": {}, + "sets": [{ + "species": "Slurpuff", + "item": ["Sitrus Berry"], + "ability": ["Unburden"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Play Rough"], ["Drain Punch"], ["Belly Drum"], ["Sticky Web"]] + }, { + "species": "Slurpuff", + "item": ["Sitrus Berry"], + "ability": ["Unburden"], + "evs": {"hp": 4, "atk": 252, "spe": 252}, + "nature": "Jolly", + "moves": [["Play Rough"], ["Drain Punch"], ["Belly Drum"], ["Return"]] + }] + }, + "tapufini": { + "flags": {}, + "sets": [{ + "species": "Tapu Fini", + "item": ["Leftovers"], + "ability": ["Misty Surge"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Taunt"], ["Nature's Madness"], ["Scald"], ["Defog"]] + }, { + "species": "Tapu Fini", + "item": ["Leftovers"], + "ability": ["Misty Surge"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Taunt"], ["Moonblast"], ["Surf", "Hydro Pump"], ["Calm Mind"]] + }, { + "species": "Tapu Fini", + "item": ["Leftovers"], + "ability": ["Misty Surge"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Nature's Madness"], ["Taunt"], ["Moonblast"], ["Scald"]] + }, { + "species": "Tapu Fini", + "item": ["Leftovers"], + "ability": ["Misty Surge"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Nature's Madness"], ["Taunt"], ["Moonblast"], ["Defog"]] + }] + }, + "whimsicott": { + "flags": {}, + "sets": [{ + "species": "Whimsicott", + "item": ["Leftovers"], + "ability": ["Prankster"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Stun Spore"], ["Leech Seed"], ["Encore"], ["Substitute"]] + }, { + "species": "Whimsicott", + "item": ["Choice Scarf"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Moonblast"], ["Giga Drain"], ["Nature Power"], ["Defog"]] + }, { + "species": "Whimsicott", + "item": ["Life Orb"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Moonblast"], ["Hidden Power Fire"], ["Stun Spore"], ["Encore"]] + }, { + "species": "Whimsicott", + "item": ["Darkinium Z"], + "ability": ["Prankster"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Stun Spore"], ["Moonblast", "Giga Drain"], ["Encore"], ["Memento"]] + }] + }, + "keldeo": { + "flags": {}, + "sets": [{ + "species": "Keldeo", + "item": ["Choice Specs"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Icy Wind"]] + }, { + "species": "Keldeo", + "item": ["Choice Specs"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Hidden Power Electric"]] + }, { + "species": "Keldeo", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Icy Wind"]] + }, { + "species": "Keldeo", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Hidden Power Electric"]] + }, { + "species": "Keldeo", + "item": ["Choice Specs"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Icy Wind"]] + }, { + "species": "Keldeo", + "item": ["Choice Specs"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Hidden Power Electric"]] + }, { + "species": "Keldeo", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Icy Wind"]] + }, { + "species": "Keldeo", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Secret Sword"], ["Hydro Pump"], ["Hidden Power Electric"]] + }] + }, + "gallade": { + "flags": {}, + "sets": [{ + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off", "Shadow Sneak"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Shadow Sneak"], ["Knock Off"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Zen Headbutt"], ["Knock Off", "Shadow Sneak"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Shadow Sneak"], ["Knock Off"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Drain Punch"], ["Zen Headbutt"], ["Knock Off"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Galladite"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Zen Headbutt"], ["Substitute"], ["Swords Dance"]] + }, { + "species": "Gallade", + "item": ["Assault Vest"], + "ability": ["Justified"], + "evs": {"hp": 248, "def": 236, "spd": 24}, + "nature": "Impish", + "moves": [["Rock Slide"], ["Drain Punch"], ["Knock Off"], ["Shadow Sneak"]] + }] + }, + "terrakion": { + "flags": {}, + "sets": [{ + "species": "Terrakion", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Stone Edge"], ["Earthquake"], ["Iron Head"]] + }, { + "species": "Terrakion", + "item": ["Rockium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Stone Edge"], ["Swords Dance"], ["Rock Polish"]] + }, { + "species": "Terrakion", + "item": ["Focus Sash"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Close Combat"], ["Stone Edge"], ["Stealth Rock"], ["Swords Dance"]] + }, { + "species": "Terrakion", + "item": ["Choice Scarf"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Close Combat"], ["Earthquake"], ["Poison Jab", "Iron Head"]] + }, { + "species": "Terrakion", + "item": ["Choice Band"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Close Combat"], ["Earthquake"], ["Poison Jab", "Iron Head"]] + }, { + "species": "Terrakion", + "item": ["Fightinium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Stone Edge", "Rock Slide"], ["Rock Polish"]] + }] + }, + "breloom": { + "flags": {}, + "sets": [{ + "species": "Breloom", + "item": ["Focus Sash"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spore"], ["Bullet Seed"], ["Mach Punch"], ["Rock Tomb", "Swords Dance"]] + }, { + "species": "Breloom", + "item": ["Focus Sash"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Spore"], ["Swords Dance", "Rock Tomb"], ["Bullet Seed"], ["Mach Punch"]] + }, { + "species": "Breloom", + "item": ["Rockium Z"], + "ability": ["Technician"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Bullet Seed"], ["Mach Punch"], ["Stone Edge"]] + }] + }, + "cobalion": { + "flags": {}, + "sets": [{ + "species": "Cobalion", + "item": ["Leftovers"], + "ability": ["Justified"], + "evs": {"hp": 252, "atk": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Taunt"], ["Iron Head"], ["Volt Switch"]] + }, { + "species": "Cobalion", + "item": ["Fightinium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Close Combat"], ["Iron Head"], ["Stone Edge", "Substitute"]] + }] + }, + "infernape": { + "flags": {}, + "sets": [{ + "species": "Infernape", + "item": ["Focus Sash"], + "ability": ["Blaze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Fire Blast"], ["Taunt"], ["Endeavor"]] + }, { + "species": "Infernape", + "item": ["Focus Sash"], + "ability": ["Blaze"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Stealth Rock"], ["Fire Blast"], ["Taunt"], ["Close Combat"]] + }, { + "species": "Infernape", + "item": ["Choice Scarf"], + "ability": ["Blaze"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Close Combat"], ["Earthquake", "Thunder Punch"], ["U-turn"]] + }, { + "species": "Infernape", + "item": ["Focus Sash"], + "ability": ["Iron Fist"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Close Combat"], ["Mach Punch"], ["Swords Dance"]] + }, { + "species": "Infernape", + "item": ["Focus Sash"], + "ability": ["Iron Fist"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Close Combat"], ["Mach Punch"], ["Stealth Rock"]] + }] + }, + "hawlucha": { + "flags": {}, + "sets": [{ + "species": "Hawlucha", + "item": ["Power Herb"], + "ability": ["Unburden"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Sky Attack"], ["High Jump Kick"], ["Acrobatics"], ["Swords Dance"]] + }, { + "species": "Hawlucha", + "item": ["Sitrus Berry"], + "ability": ["Unburden"], + "evs": {"hp": 12, "atk": 244, "spe": 252}, + "nature": "Jolly", + "moves": [["Acrobatics"], ["High Jump Kick"], ["Substitute"], ["Swords Dance"]] + }, { + "species": "Hawlucha", + "item": ["Power Herb"], + "ability": ["Unburden"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Sky Attack"], ["High Jump Kick"], ["Acrobatics"], ["Defog"]] + }, { + "species": "Hawlucha", + "item": ["Power Herb"], + "ability": ["Unburden"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Acrobatics"], ["Sky Attack"], ["Swords Dance"]] + }, { + "species": "Hawlucha", + "item": ["Sitrus Berry"], + "ability": ["Unburden"], + "evs": {"hp": 12, "atk": 244, "spe": 252}, + "nature": "Jolly", + "moves": [["High Jump Kick"], ["Acrobatics"], ["Substitute"], ["Swords Dance"]] + }] + }, + "lucario": { + "flags": {}, + "sets": [{ + "species": "Lucario", + "item": ["Life Orb"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Meteor Mash"], ["Close Combat"], ["Extreme Speed", "Bullet Punch"], ["Swords Dance"]] + }, { + "species": "Lucario", + "item": ["Electrium Z"], + "ability": ["Inner Focus"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Thunder Punch"], ["Close Combat"], ["Bullet Punch"], ["Swords Dance"]] + }, { + "species": "Lucario", + "item": ["Life Orb"], + "ability": ["Inner Focus"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Focus Blast"], ["Flash Cannon"], ["Dark Pulse", "Psychic"], ["Nasty Plot"]] + }, { + "species": "Lucario", + "item": ["Electrium Z"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Close Combat"], ["Thunder Punch"], ["Extreme Speed"]] + }, { + "species": "Lucario", + "item": ["Life Orb"], + "ability": ["Justified"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Close Combat"], ["Meteor Mash"], ["Extreme Speed"]] + }] + }, + "toxicroak": { + "flags": {}, + "sets": [{ + "species": "Toxicroak", + "item": ["Life Orb"], + "ability": ["Dry Skin"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Gunk Shot"], ["Drain Punch"], ["Sucker Punch"], ["Swords Dance"]] + }, { + "species": "Toxicroak", + "item": ["Life Orb"], + "ability": ["Dry Skin"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Focus Blast"], ["Dark Pulse"], ["Nasty Plot"]] + }] + }, + "chesnaught": { + "flags": {}, + "sets": [{ + "species": "Chesnaught", + "item": ["Salac Berry"], + "ability": ["Bulletproof"], + "evs": {"hp": 12, "atk": 244, "spe": 252}, + "nature": "Jolly", + "moves": [["Belly Drum"], ["Seed Bomb"], ["Drain Punch"], ["Substitute"]] + }] + }, + "conkeldurr": { + "flags": {}, + "sets": [{ + "species": "Conkeldurr", + "item": ["Assault Vest"], + "ability": ["Guts"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Drain Punch"], ["Knock Off"], ["Ice Punch"], ["Mach Punch"]] + }] + }, + "charizard": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Charizard", + "item": ["Charizardite X"], + "ability": ["Blaze"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Dragon Claw"], ["Flare Blitz"], ["Earthquake"]] + }, { + "species": "Charizard", + "item": ["Charizardite Y"], + "ability": ["Blaze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast", "Flamethrower"], ["Solar Beam"], ["Focus Blast"], ["Roost"]] + }, { + "species": "Charizard", + "item": ["Charizardite Y"], + "ability": ["Blaze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast", "Flamethrower"], ["Solar Beam"], ["Focus Blast"], ["Defog"]] + }, { + "species": "Charizard", + "item": ["Charizardite Y"], + "ability": ["Blaze"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Solar Beam"], ["Focus Blast"], ["Roost"]] + }] + }, + "torkoal": { + "flags": {}, + "sets": [{ + "species": "Torkoal", + "item": ["Heat Rock"], + "ability": ["Drought"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Lava Plume"], ["Stealth Rock"], ["Rapid Spin"], ["Yawn", "Toxic"]] + }] + }, + "blacephalon": { + "flags": {}, + "sets": [{ + "species": "Blacephalon", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Shadow Ball"], ["Hidden Power Ice"], ["Trick"]] + }, { + "species": "Blacephalon", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Flamethrower"], ["Shadow Ball"], ["Psychic", "Psyshock"], ["Mind Blown"]] + }, { + "species": "Blacephalon", + "item": ["Ghostium Z"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Flamethrower", "Fire Blast"], ["Shadow Ball"], ["Psyshock"]] + }, { + "species": "Blacephalon", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Shadow Ball"], ["Psychic", "Psyshock"], ["Trick"]] + }, { + "species": "Blacephalon", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Shadow Ball"], ["Psychic", "Psyshock"], ["Hidden Power Ice"]] + }, { + "species": "Blacephalon", + "item": ["Choice Specs"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Flamethrower"], ["Shadow Ball"], ["Psyshock"], ["Trick"]] + }, { + "species": "Blacephalon", + "item": ["Choice Specs"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Flamethrower"], ["Shadow Ball"], ["Psyshock"], ["Hidden Power Ice"]] + }, { + "species": "Blacephalon", + "item": ["Firium Z"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Calm Mind"], ["Fire Blast"], ["Shadow Ball"], ["Taunt", "Psyshock"]] + }] + }, + "heatran": { + "flags": {}, + "sets": [{ + "species": "Heatran", + "item": ["Air Balloon"], + "ability": ["Flash Fire"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Toxic"]] + }, { + "species": "Heatran", + "item": ["Leftovers"], + "ability": ["Flash Fire"], + "evs": {"hp": 248, "spa": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Lava Plume"], ["Earth Power"], ["Stealth Rock"], ["Flash Cannon", "Roar"]] + }, { + "species": "Heatran", + "item": ["Air Balloon"], + "ability": ["Flash Fire"], + "evs": {"atk": 28, "spa": 224, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Stone Edge"], ["Taunt"]] + }, { + "species": "Heatran", + "item": ["Air Balloon"], + "ability": ["Flash Fire"], + "evs": {"atk": 28, "spa": 224, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Stone Edge"], ["Stealth Rock"]] + }, { + "species": "Heatran", + "item": ["Leftovers"], + "ability": ["Flash Fire"], + "evs": {"hp": 252, "atk": 28, "spd": 184, "spe": 44}, + "nature": "Calm", + "moves": [["Lava Plume"], ["Earth Power"], ["Stone Edge"], ["Stealth Rock"]] + }, { + "species": "Heatran", + "item": ["Leftovers"], + "ability": ["Flash Fire"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Magma Storm"], ["Earth Power"], ["Taunt"], ["Toxic"]] + }, { + "species": "Heatran", + "item": ["Choice Specs"], + "ability": ["Flash Fire"], + "evs": {"hp": 252, "spa": 252, "spd": 4}, + "ivs": {"spe": 0}, + "nature": "Quiet", + "moves": [["Eruption"], ["Fire Blast"], ["Flash Cannon"], ["Earth Power"]] + }] + }, + "rotomheat": { + "flags": {}, + "sets": [{ + "species": "Rotom-Heat", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spa": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Defog"], ["Will-O-Wisp"], ["Pain Split", "Overheat"], ["Volt Switch"]] + }, { + "species": "Rotom-Heat", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Overheat"], ["Hidden Power Ice"], ["Thunderbolt"], ["Volt Switch", "Trick"]] + }, { + "species": "Rotom-Heat", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Overheat"], ["Hidden Power Ice"], ["Defog"], ["Volt Switch", "Trick"]] + }, { + "species": "Rotom-Heat", + "item": ["Light Clay"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Reflect"], ["Light Screen"], ["Will-O-Wisp", "Pain Split"], ["Volt Switch"]] + }] + }, + "victini": { + "flags": {}, + "sets": [{ + "species": "Victini", + "item": ["Choice Band"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["V-create"], ["Bolt Strike"], ["Zen Headbutt"], ["U-turn"]] + }, { + "species": "Victini", + "item": ["Choice Scarf"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["V-create"], ["Bolt Strike"], ["Zen Headbutt"], ["U-turn", "Trick"]] + }, { + "species": "Victini", + "item": ["Normalium Z"], + "ability": ["Victory Star"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Celebrate"], ["Stored Power"], ["Searing Shot"], ["Thunderbolt", "Energy Ball", "Focus Blast"]] + }, { + "species": "Victini", + "item": ["Choice Scarf"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Blue Flare"]] + }, { + "species": "Victini", + "item": ["Choice Scarf"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Blue Flare"]] + }, { + "species": "Victini", + "item": ["Choice Band"], + "ability": ["Victory Star"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["V-create"], ["Bolt Strike"], ["U-turn"], ["Brick Break", "Trick", "Zen Headbutt"]] + }, { + "species": "Victini", + "item": ["Normalium Z"], + "ability": ["Victory Star"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Celebrate"], ["Stored Power"], ["Searing Shot"], ["Focus Blast"]] + }] + }, + "marowakalola": { + "flags": {}, + "sets": [{ + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Lightning Rod"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Shadow Bone"], ["Fire Punch"], ["Earthquake"], ["Swords Dance"]] + }, { + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Lightning Rod"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Shadow Bone"], ["Flare Blitz"], ["Earthquake"], ["Knock Off"]] + }, { + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Lightning Rod"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Shadow Bone"], ["Flare Blitz"], ["Earthquake"], ["Stealth Rock"]] + }, { + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Lightning Rod"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Flare Blitz"], ["Shadow Bone"], ["Earthquake"], ["Swords Dance"]] + }, { + "species": "Marowak-Alola", + "item": ["Thick Club"], + "ability": ["Lightning Rod"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Flare Blitz"], ["Shadow Bone"], ["Stealth Rock"], ["Swords Dance"]] + }] + }, + "volcanion": { + "flags": {}, + "sets": [{ + "species": "Volcanion", + "item": ["Shuca Berry"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Steam Eruption"], ["Flamethrower"], ["Earth Power", "Toxic"]] + }, { + "species": "Volcanion", + "item": ["Air Balloon"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Steam Eruption"], ["Fire Blast"], ["Earth Power"]] + }, { + "species": "Volcanion", + "item": ["Air Balloon"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Defog"], ["Steam Eruption"], ["Fire Blast"], ["Hidden Power Grass"]] + }, { + "species": "Volcanion", + "item": ["Assault Vest"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "spa": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Steam Eruption"], ["Flamethrower"], ["Earth Power"], ["Sludge Wave"]] + }, { + "species": "Volcanion", + "item": ["Choice Scarf"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Steam Eruption"], ["Earth Power"], ["Sludge Wave"]] + }, { + "species": "Volcanion", + "item": ["Choice Scarf"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Fire Blast"], ["Steam Eruption"], ["Earth Power"], ["Defog"]] + }, { + "species": "Volcanion", + "item": ["Choice Specs"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Steam Eruption"], ["Fire Blast"], ["Sludge Wave"], ["Hidden Power Electric"]] + }, { + "species": "Volcanion", + "item": ["Choice Specs"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Steam Eruption"], ["Fire Blast"], ["Sludge Wave"], ["Hidden Power Electric"]] + }] + }, + "darmanitan": { + "flags": {}, + "sets": [{ + "species": "Darmanitan", + "item": ["Choice Scarf"], + "ability": ["Sheer Force"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Rock Slide"], ["Superpower", "Earthquake"], ["U-turn"]] + }, { + "species": "Darmanitan", + "item": ["Choice Band"], + "ability": ["Sheer Force"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Flare Blitz"], ["Rock Slide"], ["Earthquake"], ["U-turn", "Superpower"]] + }] + }, + "entei": { + "flags": {}, + "sets": [{ + "species": "Entei", + "item": ["Choice Band"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Sacred Fire"], ["Stomping Tantrum"], ["Stone Edge"], ["Extreme Speed"]] + }, { + "species": "Entei", + "item": ["Life Orb"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Sacred Fire"], ["Stomping Tantrum", "Bulldoze"], ["Stone Edge"], ["Extreme Speed"]] + }] + }, + "talonflame": { + "flags": {}, + "sets": [{ + "species": "Talonflame", + "item": ["Flyinium Z"], + "ability": ["Gale Wings"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Brave Bird"], ["Flare Blitz"], ["Roost"]] + }] + }, + "landorus": { + "flags": {}, + "sets": [{ + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Focus Blast"], ["Rock Slide", "Rock Polish"]] + }, { + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Focus Blast"], ["Stealth Rock"]] + }, { + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Focus Blast"], ["Knock Off", "Rock Slide"]] + }, { + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Rock Slide"], ["Stealth Rock"]] + }, { + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Focus Blast"], ["Gravity"]] + }, { + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Focus Blast"], ["Rock Polish", "Calm Mind"]] + }, { + "species": "Landorus", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Earth Power"], ["Sludge Wave"], ["Focus Blast"], ["Rock Slide"]] + }] + }, + "landorustherian": { + "flags": {}, + "sets": [{ + "species": "Landorus-Therian", + "item": ["Leftovers"], + "ability": ["Intimidate"], + "evs": {"hp": 252, "def": 240, "spe": 16}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Earthquake"], ["U-turn"], ["Knock Off", "Stone Edge"]] + }, { + "species": "Landorus-Therian", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Stone Edge"], ["U-turn"], ["Knock Off"]] + }, { + "species": "Landorus-Therian", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Stone Edge"], ["U-turn"], ["Defog"]] + }, { + "species": "Landorus-Therian", + "item": ["Rockium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Stone Edge"], ["Rock Polish"], ["Swords Dance"]] + }, { + "species": "Landorus-Therian", + "item": ["Flyinium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Fly"], ["Earthquake"], ["Rock Polish", "Smack Down"]] + }, { + "species": "Landorus-Therian", + "item": ["Rockium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Stone Edge"], ["Earthquake"], ["Rock Polish"]] + }, { + "species": "Landorus-Therian", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["U-turn"], ["Stone Edge"]] + }, { + "species": "Landorus-Therian", + "item": ["Choice Scarf"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["U-turn"], ["Defog"]] + }, { + "species": "Landorus-Therian", + "item": ["Rocky Helmet"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Earthquake"], ["Knock Off"], ["Gravity"], ["U-turn"]] + }, { + "species": "Landorus-Therian", + "item": ["Rocky Helmet"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Earthquake"], ["Knock Off"], ["Stealth Rock"], ["U-turn"]] + }, { + "species": "Landorus-Therian", + "item": ["Rocky Helmet"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Earthquake"], ["Knock Off"], ["Defog"], ["U-turn"]] + }] + }, + "mantine": { + "flags": {}, + "sets": [{ + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 160, "spe": 96}, + "nature": "Calm", + "moves": [["Scald"], ["Defog"], ["Haze"], ["Roost"]] + }, { + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 240, "spd": 16}, + "nature": "Calm", + "moves": [["Scald"], ["Defog"], ["Toxic"], ["Roost"]] + }, { + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "spd": 160, "spe": 96}, + "nature": "Calm", + "moves": [["Scald"], ["Defog"], ["Roost"], ["Haze"]] + }, { + "species": "Mantine", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "def": 240, "spd": 16}, + "nature": "Calm", + "moves": [["Scald"], ["Defog"], ["Roost"], ["Toxic"]] + }] + }, + "skarmory": { + "flags": {}, + "sets": [{ + "species": "Skarmory", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 224, "def": 252, "spd": 32}, + "nature": "Impish", + "moves": [["Iron Head"], ["Roost"], ["Defog"], ["Whirlwind"]] + }, { + "species": "Skarmory", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 224, "def": 252, "spd": 32}, + "nature": "Impish", + "moves": [["Iron Head"], ["Roost"], ["Stealth Rock"], ["Whirlwind"]] + }, { + "species": "Skarmory", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 224, "def": 252, "spd": 32}, + "nature": "Impish", + "moves": [["Counter"], ["Roost"], ["Defog"], ["Toxic"]] + }, { + "species": "Skarmory", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 224, "def": 252, "spd": 32}, + "nature": "Impish", + "moves": [["Brave Bird"], ["Roost"], ["Spikes"], ["Whirlwind"]] + }, { + "species": "Skarmory", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 224, "def": 252, "spd": 32}, + "nature": "Impish", + "moves": [["Brave Bird"], ["Roost"], ["Stealth Rock"], ["Whirlwind"]] + }, { + "species": "Skarmory", + "item": ["Salac Berry"], + "ability": ["Sturdy"], + "evs": {"atk": 252, "spe": 252}, + "ivs": {"hp": 0, "def": 0, "spd": 0}, + "nature": "Hasty", + "moves": [["Brave Bird"], ["Stealth Rock"], ["Spikes"], ["Taunt"]] + }] + }, + "celesteela": { + "flags": {}, + "sets": [{ + "species": "Celesteela", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Heavy Slam"], ["Leech Seed"], ["Flamethrower"], ["Protect"]] + }, { + "species": "Celesteela", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Heavy Slam"], ["Leech Seed"], ["Toxic"], ["Protect"]] + }, { + "species": "Celesteela", + "item": ["Leftovers"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "def": 104, "spd": 152}, + "nature": "Relaxed", + "moves": [["Heavy Slam"], ["Flamethrower"], ["Leech Seed"], ["Protect"]] + }, { + "species": "Celesteela", + "item": ["Assault Vest"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "spa": 224, "spd": 32}, + "nature": "Quiet", + "moves": [["Flamethrower"], ["Earthquake"], ["Hidden Power Ice"], ["Giga Drain"]] + }] + }, + "gliscor": { + "flags": {}, + "sets": [{ + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 12, "spd": 196, "spe": 56}, + "nature": "Careful", + "moves": [["Earthquake"], ["Roost"], ["Taunt"], ["Knock Off"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 12, "spd": 196, "spe": 56}, + "nature": "Careful", + "moves": [["Earthquake"], ["Roost"], ["Taunt"], ["Stealth Rock"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 12, "spd": 196, "spe": 56}, + "nature": "Careful", + "moves": [["Earthquake"], ["Roost"], ["Taunt"], ["Defog"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 12, "spd": 188, "spe": 64}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Roost"], ["Stealth Rock"], ["Knock Off", "Taunt", "Toxic"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 12, "spd": 188, "spe": 64}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Roost"], ["Taunt"], ["Knock Off"]] + }, { + "species": "Gliscor", + "item": ["Toxic Orb"], + "ability": ["Poison Heal"], + "evs": {"hp": 244, "def": 12, "spd": 188, "spe": 64}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Roost"], ["Swords Dance"], ["Knock Off", "Facade"]] + }] + }, + "aerodactyl": { + "flags": {}, + "sets": [{ + "species": "Aerodactyl", + "item": ["Focus Sash"], + "ability": ["Pressure"], + "evs": {"atk": 252, "spe": 252}, + "ivs": {"hp": 0, "def": 0, "spd": 0}, + "nature": "Hasty", + "moves": [["Stealth Rock"], ["Taunt"], ["Tailwind"], ["Double-Edge"]] + }, { + "species": "Aerodactyl", + "item": ["Aerodactylite"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Earthquake"], ["Pursuit"], ["Ice Fang"]] + }, { + "species": "Aerodactyl", + "item": ["Aerodactylite"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Earthquake"], ["Pursuit"], ["Stealth Rock"]] + }, { + "species": "Aerodactyl", + "item": ["Aerodactylite"], + "ability": ["Pressure"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stone Edge"], ["Earthquake"], ["Pursuit"], ["Ice Fang"]] + }] + }, + "tornadustherian": { + "flags": {}, + "sets": [{ + "species": "Tornadus-Therian", + "item": ["Flyinium Z"], + "ability": ["Regenerator"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Taunt"], ["Knock Off"], ["Heat Wave", "U-turn"]] + }, { + "species": "Tornadus-Therian", + "item": ["Flyinium Z"], + "ability": ["Regenerator"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Taunt"], ["Knock Off"], ["Defog"]] + }, { + "species": "Tornadus-Therian", + "item": ["Assault Vest"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Hurricane"], ["Knock Off"], ["U-turn"], ["Heat Wave", "Superpower"]] + }] + }, + "gyarados": { + "flags": {}, + "sets": [{ + "species": "Gyarados", + "item": ["Flyinium Z"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Waterfall"], ["Bounce"], ["Taunt", "Earthquake", "Substitute"]] + }, { + "species": "Gyarados", + "item": ["Flyinium Z"], + "ability": ["Moxie"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Dragon Dance"], ["Bounce"], ["Waterfall"], ["Earthquake", "Taunt"]] + }, { + "species": "Gyarados", + "item": ["Gyaradosite"], + "ability": ["Intimidate"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Waterfall"], ["Crunch"], ["Dragon Dance"], ["Taunt", "Earthquake"]] + }] + }, + "gengar": { + "flags": {}, + "sets": [{ + "species": "Gengar", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Trick"]] + }, { + "species": "Gengar", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Dazzling Gleam", "Destiny Bond"]] + }, { + "species": "Gengar", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Focus Blast"], ["Shadow Ball", "Taunt"], ["Destiny Bond"]] + }, { + "species": "Gengar", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Trick"]] + }, { + "species": "Gengar", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Destiny Bond"]] + }, { + "species": "Gengar", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Hidden Power Ice"]] + }, { + "species": "Gengar", + "item": ["Choice Specs"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Trick"]] + }, { + "species": "Gengar", + "item": ["Electrium Z"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Sludge Wave"], ["Focus Blast"], ["Thunderbolt"]] + }] + }, + "decidueye": { + "flags": {}, + "sets": [{ + "species": "Decidueye", + "item": ["Leftovers"], + "ability": ["Overgrow"], + "evs": {"hp": 248, "atk": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Defog"], ["Roost"], ["Spirit Shackle"], ["Toxic", "U-turn"]] + }, { + "species": "Decidueye", + "item": ["Leftovers"], + "ability": ["Overgrow"], + "evs": {"hp": 232, "atk": 104, "def": 16, "spd": 60, "spe": 96}, + "nature": "Careful", + "moves": [["Swords Dance"], ["Defog"], ["Spirit Shackle"], ["Roost"]] + }, { + "species": "Decidueye", + "item": ["Leftovers"], + "ability": ["Overgrow"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Roost"], ["Spirit Shackle"], ["Leaf Blade", "Sucker Punch"], ["Swords Dance"]] + }, { + "species": "Decidueye", + "item": ["Leftovers"], + "ability": ["Overgrow"], + "evs": {"hp": 248, "atk": 252, "def": 8}, + "nature": "Adamant", + "moves": [["Spirit Shackle"], ["U-turn", "Toxic"], ["Defog"], ["Roost"]] + }, { + "species": "Decidueye", + "item": ["Decidium Z"], + "ability": ["Overgrow"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Spirit Shackle"], ["Leaf Blade", "Sucker Punch"], ["Roost"]] + }] + }, + "jellicent": { + "flags": {}, + "sets": [{ + "species": "Jellicent", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "spd": 172, "spe": 84}, + "nature": "Calm", + "moves": [["Toxic"], ["Scald"], ["Taunt"], ["Recover"]] + }, { + "species": "Jellicent", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "spd": 252, "spe": 8}, + "nature": "Calm", + "moves": [["Toxic"], ["Scald"], ["Acid Armor"], ["Recover"]] + }, { + "species": "Jellicent", + "item": ["Leftovers"], + "ability": ["Water Absorb"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Will-O-Wisp"], ["Scald"], ["Trick Room"], ["Recover"]] + }] + }, + "cofagrigus": { + "flags": {}, + "sets": [{ + "species": "Cofagrigus", + "item": ["Leftovers"], + "ability": ["Mummy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Trick Room"], ["Shadow Ball"], ["Will-O-Wisp"], ["Pain Split"]] + }, { + "species": "Cofagrigus", + "item": ["Colbur Berry"], + "ability": ["Mummy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Relaxed", + "moves": [["Trick Room"], ["Shadow Ball"], ["Toxic Spikes"], ["Memento", "Destiny Bond"]] + }, { + "species": "Cofagrigus", + "item": ["Ghostium Z"], + "ability": ["Mummy"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Quiet", + "moves": [["Nasty Plot"], ["Shadow Ball"], ["Hidden Power Fighting"], ["Trick Room"]] + }] + }, + "dhelmise": { + "flags": {}, + "sets": [{ + "species": "Dhelmise", + "item": ["Assault Vest"], + "ability": ["Steelworker"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Power Whip"], ["Anchor Shot"], ["Earthquake"], ["Rapid Spin"]] + }, { + "species": "Dhelmise", + "item": ["Ghostium Z"], + "ability": ["Steelworker"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Power Whip"], ["Anchor Shot"], ["Shadow Claw"], ["Swords Dance"]] + }] + }, + "doublade": { + "flags": {}, + "sets": [{ + "species": "Doublade", + "item": ["Eviolite"], + "ability": ["No Guard"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Iron Head"], ["Sacred Sword"], ["Shadow Sneak"]] + }, { + "species": "Doublade", + "item": ["Eviolite"], + "ability": ["No Guard"], + "evs": {"hp": 248, "atk": 252, "spd": 8}, + "nature": "Brave", + "moves": [["Swords Dance"], ["Gyro Ball"], ["Sacred Sword"], ["Shadow Sneak"]] + }, { + "species": "Doublade", + "item": ["Eviolite"], + "ability": ["No Guard"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Shadow Sneak"], ["Iron Head"], ["Shadow Claw", "Sacred Sword"]] + }] + }, + "golurk": { + "flags": {}, + "sets": [{ + "species": "Golurk", + "item": ["Focus Sash"], + "ability": ["No Guard"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Dynamic Punch"], ["Stone Edge"], ["Stealth Rock"]] + }] + }, + "hoopa": { + "flags": {}, + "sets": [{ + "species": "Hoopa", + "item": ["Choice Specs"], + "ability": ["Magician"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Psyshock"], ["Focus Blast"], ["Trick"]] + }, { + "species": "Hoopa", + "item": ["Life Orb"], + "ability": ["Magician"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Shadow Ball"], ["Psyshock"], ["Focus Blast"]] + }, { + "species": "Hoopa", + "item": ["Focus Sash"], + "ability": ["Magician"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Shadow Ball"], ["Focus Blast"], ["Nasty Plot"], ["Trick Room", "Psyshock"]] + }] + }, + "froslass": { + "flags": {}, + "sets": [{ + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Ice Beam"], ["Taunt", "Will-O-Wisp"], ["Destiny Bond"]] + }, { + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Ice Beam"], ["Taunt"], ["Destiny Bond", "Will-O-Wisp"]] + }, { + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Ice Beam"], ["Will-O-Wisp", "Thunder Wave"], ["Destiny Bond"]] + }, { + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Shadow Ball"], ["Taunt"], ["Destiny Bond", "Will-O-Wisp"]] + }, { + "species": "Froslass", + "item": ["Focus Sash"], + "ability": ["Snow Cloak"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Spikes"], ["Shadow Ball"], ["Will-O-Wisp", "Icy Wind"], ["Destiny Bond"]] + }, { + "species": "Froslass", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Shadow Ball"], ["Switcheroo"], ["Destiny Bond"]] + }, { + "species": "Froslass", + "item": ["Choice Scarf"], + "ability": ["Cursed Body"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Ice Beam"], ["Shadow Ball"], ["Switcheroo"], ["Spikes"]] + }] + }, + "gourgeist": { + "flags": {}, + "sets": [{ + "species": "Gourgeist", + "item": ["Leftovers"], + "ability": ["Frisk"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Seed Bomb"], ["Will-O-Wisp"], ["Leech Seed"], ["Synthesis"]] + }] + }, + "shedinja": { + "flags": {}, + "sets": [{ + "species": "Shedinja", + "item": ["Focus Sash"], + "ability": ["Wonder Guard"], + "evs": {"atk": 252, "spe": 252}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Shadow Sneak"], ["Will-O-Wisp", "Toxic"], ["Protect"]] + }] + }, + "ferrothorn": { + "flags": {}, + "sets": [{ + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Gyro Ball"], ["Stealth Rock"], ["Leech Seed"], ["Protect"]] + }, { + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Gyro Ball"], ["Spikes"], ["Leech Seed"], ["Protect"]] + }, { + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "def": 72, "spd": 184}, + "nature": "Careful", + "moves": [["Power Whip"], ["Spikes"], ["Protect", "Knock Off"], ["Leech Seed"]] + }, { + "species": "Ferrothorn", + "item": ["Leftovers"], + "ability": ["Iron Barbs"], + "evs": {"hp": 252, "def": 72, "spd": 184}, + "nature": "Careful", + "moves": [["Power Whip"], ["Stealth Rock"], ["Protect", "Knock Off"], ["Leech Seed"]] + }] + }, + "venusaur": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 252, "def": 212, "spd": 28, "spe": 16}, + "nature": "Calm", + "moves": [["Synthesis"], ["Leech Seed", "Sleep Powder"], ["Sludge Bomb"], ["Giga Drain"]] + }, { + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 252, "def": 164, "spd": 76, "spe": 16}, + "nature": "Calm", + "moves": [["Synthesis"], ["Leech Seed", "Sleep Powder"], ["Sludge Bomb"], ["Hidden Power Fire"]] + }, { + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 252, "def": 240, "spe": 16}, + "nature": "Bold", + "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Leech Seed", "Sleep Powder"]] + }, { + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 252, "def": 240, "spe": 16}, + "nature": "Bold", + "moves": [["Giga Drain"], ["Sludge Bomb"], ["Synthesis"], ["Hidden Power Fire"]] + }, { + "species": "Venusaur", + "item": ["Venusaurite"], + "ability": ["Chlorophyll"], + "evs": {"hp": 164, "spd": 252, "spe": 92}, + "nature": "Calm", + "moves": [["Giga Drain"], ["Hidden Power Fire"], ["Synthesis"], ["Leech Seed"]] + }] + }, + "cradily": { + "flags": {}, + "sets": [{ + "species": "Cradily", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Recover"], ["Stealth Rock"], ["Rock Slide"], ["Toxic"]] + }, { + "species": "Cradily", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Giga Drain"], ["Stealth Rock"], ["Recover"], ["Toxic"]] + }, { + "species": "Cradily", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Giga Drain"], ["Earth Power", "Mirror Coat"], ["Recover"], ["Toxic"]] + }, { + "species": "Cradily", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Giga Drain"], ["Stealth Rock"], ["Recover"], ["Toxic"]] + }] + }, + "celebi": { + "flags": {}, + "sets": [{ + "species": "Celebi", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "spa": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Psychic"], ["Leech Seed", "Recover"], ["U-turn"]] + }, { + "species": "Celebi", + "item": ["Groundium Z"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Psychic"], ["Earth Power"], ["Hidden Power Fire"]] + }, { + "species": "Celebi", + "item": ["Life Orb"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Nasty Plot"], ["Psychic"], ["Earth Power"], ["Hidden Power Fire"]] + }, { + "species": "Celebi", + "item": ["Choice Scarf"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Psychic"], ["Earth Power"], ["Healing Wish"]] + }, { + "species": "Celebi", + "item": ["Groundium Z"], + "ability": ["Natural Cure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Hidden Power Fire"], ["Giga Drain"], ["Recover"]] + }, { + "species": "Celebi", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "spd": 244, "spe": 16}, + "nature": "Calm", + "moves": [["Stealth Rock"], ["Recover"], ["Giga Drain"], ["U-turn"]] + }, { + "species": "Celebi", + "item": ["Leftovers"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "def": 244, "spe": 16}, + "nature": "Bold", + "moves": [["Stealth Rock"], ["Recover"], ["Giga Drain"], ["U-turn"]] + }] + }, + "rotommow": { + "flags": {}, + "sets": [{ + "species": "Rotom-Mow", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Leaf Storm"], ["Hidden Power Ice"], ["Trick"]] + }, { + "species": "Rotom-Mow", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Leaf Storm"], ["Hidden Power Ice"], ["Volt Switch"]] + }, { + "species": "Rotom-Mow", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Leaf Storm"], ["Hidden Power Ice"], ["Defog"]] + }, { + "species": "Rotom-Mow", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Leaf Storm"], ["Trick"], ["Volt Switch"]] + }, { + "species": "Rotom-Mow", + "item": ["Choice Specs"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Leaf Storm"], ["Hidden Power Ice"], ["Volt Switch"]] + }, { + "species": "Rotom-Mow", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Modest", + "moves": [["Leaf Storm"], ["Defog"], ["Will-O-Wisp"], ["Volt Switch"]] + }] + }, + "serperior": { + "flags": {}, + "sets": [{ + "species": "Serperior", + "item": ["Leftovers"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Rock"], ["Substitute"]] + }, { + "species": "Serperior", + "item": ["Leftovers"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Leech Seed"], ["Substitute"]] + }, { + "species": "Serperior", + "item": ["Leftovers"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Substitute"]] + }, { + "species": "Serperior", + "item": ["Choice Scarf"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Glare"]] + }, { + "species": "Serperior", + "item": ["Choice Scarf"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Fire"], ["Defog"]] + }, { + "species": "Serperior", + "item": ["Choice Scarf"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Rock"], ["Glare"]] + }, { + "species": "Serperior", + "item": ["Choice Scarf"], + "ability": ["Contrary"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Leaf Storm"], ["Dragon Pulse"], ["Hidden Power Rock"], ["Defog"]] + }] + }, + "gourgeistsuper": { + "flags": {}, + "sets": [{ + "species": "Gourgeist-Super", + "item": ["Leftovers"], + "ability": ["Frisk"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Seed Bomb"], ["Will-O-Wisp"], ["Leech Seed"], ["Synthesis"]] + }] + }, + "amoonguss": { + "flags": {}, + "sets": [{ + "species": "Amoonguss", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Spore"], ["Clear Smog"], ["Giga Drain"], ["Hidden Power Fire"]] + }, { + "species": "Amoonguss", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Spore"], ["Clear Smog"], ["Sludge Bomb", "Foul Play"], ["Hidden Power Fire"]] + }, { + "species": "Amoonguss", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Spore"], ["Giga Drain"], ["Clear Smog"], ["Hidden Power Fire"]] + }, { + "species": "Amoonguss", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Spore"], ["Giga Drain"], ["Sludge Bomb"], ["Foul Play", "Stun Spore"]] + }] + }, + "excadrill": { + "flags": {}, + "sets": [{ + "species": "Excadrill", + "item": ["Choice Band"], + "ability": ["Sand Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Rapid Spin"]] + }, { + "species": "Excadrill", + "item": ["Life Orb"], + "ability": ["Sand Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Swords Dance"], ["Earthquake"], ["Iron Head"], ["Rock Slide"]] + }, { + "species": "Excadrill", + "item": ["Life Orb"], + "ability": ["Sand Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Rapid Spin"], ["Earthquake"], ["Iron Head"], ["Rock Slide"]] + }, { + "species": "Excadrill", + "item": ["Choice Scarf"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Iron Head"], ["Rock Slide"], ["Toxic"]] + }, { + "species": "Excadrill", + "item": ["Focus Sash"], + "ability": ["Mold Breaker"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Rock Tomb", "Toxic"], ["Stealth Rock"], ["Rapid Spin"]] + }] + }, + "hippowdon": { + "flags": {}, + "sets": [{ + "species": "Hippowdon", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Earthquake"], ["Stealth Rock"], ["Slack Off"], ["Whirlwind", "Toxic"]] + }, { + "species": "Hippowdon", + "item": ["Leftovers"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 140, "spd": 116}, + "nature": "Impish", + "moves": [["Earthquake"], ["Stealth Rock"], ["Slack Off"], ["Stone Edge"]] + }, { + "species": "Hippowdon", + "item": ["Eject Button"], + "ability": ["Sand Stream"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Earthquake"], ["Stealth Rock"], ["Slack Off"], ["Whirlwind", "Toxic"]] + }] + }, + "dugtrio": { + "flags": {}, + "sets": [{ + "species": "Dugtrio", + "item": ["Focus Sash"], + "ability": ["Arena Trap"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "ivs": {"hp": 21, "def": 0, "spd": 0}, + "nature": "Naive", + "moves": [["Earthquake"], ["Reversal"], ["Sucker Punch"], ["Sludge Wave"]] + }] + }, + "mamoswine": { + "flags": {}, + "sets": [{ + "species": "Mamoswine", + "item": ["Choice Band"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Icicle Crash"], ["Knock Off", "Superpower"], ["Ice Shard"]] + }, { + "species": "Mamoswine", + "item": ["Choice Scarf"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Icicle Crash"], ["Superpower", "Knock Off"], ["Ice Shard"]] + }, { + "species": "Mamoswine", + "item": ["Life Orb"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Earthquake"], ["Knock Off"], ["Freeze-Dry"], ["Ice Shard"]] + }, { + "species": "Mamoswine", + "item": ["Life Orb"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Hasty", + "moves": [["Earthquake"], ["Stealth Rock"], ["Freeze-Dry"], ["Ice Shard"]] + }, { + "species": "Mamoswine", + "item": ["Focus Sash"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Knock Off"], ["Ice Shard"], ["Endeavor"]] + }, { + "species": "Mamoswine", + "item": ["Focus Sash"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Stealth Rock"], ["Ice Shard"], ["Endeavor"]] + }, { + "species": "Mamoswine", + "item": ["Focus Sash"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Ice Shard"], ["Endeavor"]] + }, { + "species": "Mamoswine", + "item": ["Focus Sash"], + "ability": ["Oblivious"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Earthquake"], ["Ice Shard"], ["Endeavor", "Knock Off"]] + }, { + "species": "Mamoswine", + "item": ["Life Orb"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Icicle Crash"], ["Ice Shard"], ["Knock Off", "Superpower"]] + }, { + "species": "Mamoswine", + "item": ["Groundium Z"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Icicle Crash"], ["Ice Shard"], ["Stealth Rock"]] + }] + }, + "seismitoad": { + "flags": {}, + "sets": [{ + "species": "Seismitoad", + "item": ["Assault Vest"], + "ability": ["Water Absorb"], + "evs": {"hp": 252, "spd": 116, "spe": 140}, + "nature": "Calm", + "moves": [["Scald"], ["Sludge Wave"], ["Earth Power", "Grass Knot"], ["Knock Off"]] + }, { + "species": "Seismitoad", + "item": ["Choice Specs"], + "ability": ["Water Absorb"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Sludge Wave"], ["Earth Power"], ["Grass Knot"]] + }, { + "species": "Seismitoad", + "item": ["Assault Vest"], + "ability": ["Water Absorb"], + "evs": {"hp": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Scald"], ["Sludge Wave"], ["Earth Power", "Grass Knot"], ["Knock Off"]] + }, { + "species": "Seismitoad", + "item": ["Waterium Z"], + "ability": ["Swift Swim"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Earth Power"], ["Stealth Rock"], ["Sludge Wave"]] + }] + }, + "gastrodon": { + "flags": {}, + "sets": [{ + "species": "Gastrodon", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Calm", + "moves": [["Scald"], ["Earth Power"], ["Toxic"], ["Recover"]] + }, { + "species": "Gastrodon", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Bold", + "moves": [["Scald"], ["Earth Power"], ["Toxic"], ["Recover"]] + }, { + "species": "Gastrodon", + "item": ["Leftovers"], + "ability": ["Storm Drain"], + "evs": {"hp": 252, "def": 40, "spd": 216}, + "nature": "Careful", + "moves": [["Scald"], ["Earth Power"], ["Recover"], ["Toxic"]] + }] + }, + "diggersby": { + "flags": {}, + "sets": [{ + "species": "Diggersby", + "item": ["Choice Band"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Return"], ["Fire Punch"], ["Quick Attack"]] + }, { + "species": "Diggersby", + "item": ["Choice Scarf"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Return"], ["Fire Punch"], ["Quick Attack"]] + }, { + "species": "Diggersby", + "item": ["Focus Sash"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Earthquake"], ["Spikes"], ["Endeavor"], ["Quick Attack"]] + }, { + "species": "Diggersby", + "item": ["Choice Band"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Return"], ["Earthquake"], ["Fire Punch"], ["Quick Attack"]] + }, { + "species": "Diggersby", + "item": ["Choice Band"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Return"], ["Earthquake"], ["Fire Punch"], ["Quick Attack"]] + }, { + "species": "Diggersby", + "item": ["Life Orb"], + "ability": ["Huge Power"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Return"], ["Earthquake"], ["Quick Attack"], ["Swords Dance"]] + }] + }, + "steelix": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Steelix", + "item": ["Steelixite"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Impish", + "moves": [["Curse"], ["Heavy Slam"], ["Rest"], ["Sleep Talk"]] + }, { + "species": "Steelix", + "item": ["Steelixite"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Toxic"], ["Heavy Slam"], ["Earthquake"], ["Dragon Tail", "Roar"]] + }, { + "species": "Steelix", + "item": ["Steelixite"], + "ability": ["Sturdy"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Stealth Rock"], ["Heavy Slam"], ["Earthquake"], ["Dragon Tail", "Roar"]] + }] + }, + "nidoking": { + "flags": {}, + "sets": [{ + "species": "Nidoking", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Flamethrower"]] + }, { + "species": "Nidoking", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Fire Blast", "Thunderbolt"]] + }, { + "species": "Nidoking", + "item": ["Choice Scarf"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Sludge Wave"], ["Ice Beam"], ["Flamethrower", "Thunderbolt"]] + }, { + "species": "Nidoking", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Ice Beam"], ["Flamethrower"], ["Stealth Rock"]] + }, { + "species": "Nidoking", + "item": ["Life Orb"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Earth Power"], ["Ice Beam"], ["Flamethrower"], ["Thunderbolt"]] + }] + }, + "camerupt": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Camerupt", + "item": ["Cameruptite"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Quiet", + "moves": [["Flamethrower"], ["Earth Power"], ["Rock Slide"], ["Hidden Power Ice"]] + }, { + "species": "Camerupt", + "item": ["Cameruptite"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "spa": 252, "spd": 8}, + "nature": "Quiet", + "moves": [["Flamethrower"], ["Earth Power"], ["Rock Slide"], ["Hidden Power Grass"]] + }, { + "species": "Camerupt", + "item": ["Cameruptite"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "spa": 252, "spe": 8}, + "nature": "Modest", + "moves": [["Flamethrower", "Fire Blast"], ["Earth Power"], ["Ancient Power"], ["Toxic", "Will-O-Wisp"]] + }, { + "species": "Camerupt", + "item": ["Cameruptite"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "spa": 252, "spe": 8}, + "nature": "Modest", + "moves": [["Flamethrower", "Fire Blast"], ["Earth Power"], ["Ancient Power"], ["Hidden Power Ice"]] + }] + }, + "quagsire": { + "flags": {}, + "sets": [{ + "species": "Quagsire", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Relaxed", + "moves": [["Earthquake"], ["Scald"], ["Toxic"], ["Recover"]] + }, { + "species": "Quagsire", + "item": ["Leftovers"], + "ability": ["Unaware"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Recover"], ["Protect", "Toxic"]] + }] + }, + "ninetalesalola": { + "flags": {}, + "sets": [{ + "species": "Ninetales-Alola", + "item": ["Light Clay"], + "ability": ["Snow Warning"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Aurora Veil"], ["Blizzard", "Freeze-Dry"], ["Moonblast"], ["Encore"]] + }, { + "species": "Ninetales-Alola", + "item": ["Light Clay"], + "ability": ["Snow Warning"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Aurora Veil"], ["Blizzard", "Freeze-Dry"], ["Moonblast"], ["Encore"]] + }, { + "species": "Ninetales-Alola", + "item": ["Light Clay"], + "ability": ["Snow Warning"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Aurora Veil"], ["Blizzard", "Freeze-Dry"], ["Moonblast"], ["Hidden Power Fire"]] + }] + }, + "avalugg": { + "flags": {}, + "sets": [{ + "species": "Avalugg", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Rapid Spin"], ["Avalanche"], ["Toxic", "Roar"], ["Recover"]] + }, { + "species": "Avalugg", + "item": ["Leftovers"], + "ability": ["Sturdy"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Rapid Spin"], ["Avalanche"], ["Toxic", "Roar", "Earthquake", "Mirror Coat"], ["Recover"]] + }] + }, + "cloyster": { + "flags": {}, + "sets": [{ + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Hydro Pump"]] + }, { + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Liquidation"]] + }, { + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Hydro Pump"], ["Hidden Power Fire"]] + }, { + "species": "Cloyster", + "item": ["Waterium Z"], + "ability": ["Skill Link"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Hydro Pump"], ["Hidden Power Fire"]] + }, { + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Rock Blast"], ["Ice Shard"]] + }, { + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Spikes"], ["Rapid Spin"]] + }, { + "species": "Cloyster", + "item": ["Focus Sash"], + "ability": ["Skill Link"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Shell Smash"], ["Icicle Spear"], ["Toxic Spikes"], ["Rapid Spin"]] + }] + }, + "piloswine": { + "flags": {}, + "sets": [{ + "species": "Piloswine", + "item": ["Eviolite"], + "ability": ["Thick Fat"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Careful", + "moves": [["Stealth Rock"], ["Earthquake"], ["Ice Shard", "Roar"], ["Toxic"]] + }] + }, + "sandslashalola": { + "flags": {}, + "sets": [{ + "species": "Sandslash-Alola", + "item": ["Life Orb"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Iron Head"], ["Earthquake"], ["Rapid Spin"]] + }, { + "species": "Sandslash-Alola", + "item": ["Life Orb"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Iron Head"], ["Earthquake"], ["Swords Dance"]] + }, { + "species": "Sandslash-Alola", + "item": ["Life Orb"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Iron Head"], ["Earthquake"], ["Stealth Rock"]] + }, { + "species": "Sandslash-Alola", + "item": ["Icium Z"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Icicle Crash"], ["Iron Head"], ["Earthquake"], ["Swords Dance"]] + }] + }, + "lapras": { + "flags": {}, + "sets": [{ + "species": "Lapras", + "item": ["Choice Specs"], + "ability": ["Water Absorb"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Surf"], ["Freeze-Dry"], ["Hidden Power Fire"], ["Hydro Pump", "Thunderbolt"]] + }] + }, + "rotomfrost": { + "flags": {}, + "sets": [{ + "species": "Rotom-Frost", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Will-O-Wisp"], ["Pain Split"], ["Defog"], ["Volt Switch"]] + }, { + "species": "Rotom-Frost", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Will-O-Wisp"], ["Pain Split"], ["Hidden Power Fire"], ["Volt Switch"]] + }, { + "species": "Rotom-Frost", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 92, "spe": 168}, + "nature": "Bold", + "moves": [["Will-O-Wisp"], ["Pain Split"], ["Defog"], ["Volt Switch"]] + }, { + "species": "Rotom-Frost", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Blizzard"], ["Thunderbolt"], ["Trick"], ["Volt Switch"]] + }, { + "species": "Rotom-Frost", + "item": ["Choice Scarf"], + "ability": ["Levitate"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Blizzard"], ["Defog"], ["Trick"], ["Volt Switch"]] + }] + }, + "walrein": { + "flags": {}, + "sets": [{ + "species": "Walrein", + "item": ["Choice Specs"], + "ability": ["Thick Fat"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Surf"], ["Hidden Power Fire"], ["Signal Beam"], ["Frost Breath", "Ice Beam", "Toxic"]] + }] + }, + "cryogonal": { + "flags": {}, + "sets": [{ + "species": "Cryogonal", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Freeze-Dry"], ["Rapid Spin"], ["Recover"], ["Toxic"]] + }, { + "species": "Cryogonal", + "item": ["Leftovers"], + "ability": ["Levitate"], + "evs": {"hp": 248, "def": 8, "spe": 252}, + "nature": "Timid", + "moves": [["Freeze-Dry"], ["Rapid Spin"], ["Recover"], ["Toxic"]] + }] + }, + "articuno": { + "flags": {}, + "sets": [{ + "species": "Articuno", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Freeze-Dry"], ["Substitute"], ["Roost"], ["Toxic"]] + }, { + "species": "Articuno", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 248, "def": 8, "spd": 252}, + "nature": "Calm", + "moves": [["Freeze-Dry"], ["Defog"], ["Roost"], ["Toxic", "Hurricane"]] + }] + }, + "beartic": { + "flags": {}, + "sets": [{ + "species": "Beartic", + "item": ["Life Orb"], + "ability": ["Slush Rush"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Icicle Crash"], ["Superpower"], ["Stone Edge", "Swords Dance"], ["Aqua Jet"]] + }] + }, + "chansey": { + "flags": {}, + "sets": [{ + "species": "Chansey", + "item": ["Eviolite"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Seismic Toss"], ["Soft-Boiled"], ["Stealth Rock"], ["Toxic"]] + }, { + "species": "Chansey", + "item": ["Eviolite"], + "ability": ["Natural Cure"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Seismic Toss"], ["Soft-Boiled"], ["Stealth Rock"], ["Thunder Wave", "Heal Bell", "Wish"]] + }] + }, + "lopunny": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Lopunny", + "item": ["Lopunnite"], + "ability": ["Limber"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Encore"], ["Return"], ["High Jump Kick"], ["Power-Up Punch"]] + }, { + "species": "Lopunny", + "item": ["Lopunnite"], + "ability": ["Limber"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Fake Out"], ["Return"], ["High Jump Kick"], ["Ice Punch", "Encore", "Substitute"]] + }] + }, + "porygon2": { + "flags": {}, + "sets": [{ + "species": "Porygon2", + "item": ["Eviolite"], + "ability": ["Download"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Recover"], ["Ice Beam"], ["Discharge"], ["Hidden Power Fire"]] + }, { + "species": "Porygon2", + "item": ["Eviolite"], + "ability": ["Trace"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Recover"], ["Ice Beam"], ["Foul Play"], ["Toxic"]] + }, { + "species": "Porygon2", + "item": ["Eviolite"], + "ability": ["Trace"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Bold", + "moves": [["Recover"], ["Ice Beam"], ["Hidden Power Fire"], ["Toxic"]] + }] + }, + "staraptor": { + "flags": {}, + "sets": [{ + "species": "Staraptor", + "item": ["Leftovers"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Impish", + "moves": [["Brave Bird"], ["Roost"], ["Defog"], ["U-turn", "Toxic"]] + }, { + "species": "Staraptor", + "item": ["Rocky Helmet"], + "ability": ["Intimidate"], + "evs": {"hp": 248, "def": 244, "spe": 16}, + "nature": "Impish", + "moves": [["Brave Bird"], ["Roost"], ["Defog"], ["U-turn", "Close Combat"]] + }, { + "species": "Staraptor", + "item": ["Choice Scarf"], + "ability": ["Reckless"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Double-Edge"], ["Close Combat"], ["U-turn"]] + }] + }, + "ditto": { + "flags": {}, + "sets": [{ + "species": "Ditto", + "item": ["Choice Scarf"], + "ability": ["Imposter"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "ivs": {"atk": 30, "spa": 30, "spe": 0}, + "nature": "Impish", + "moves": [["Transform"]] + }] + }, + "porygonz": { + "flags": {}, + "sets": [{ + "species": "Porygon-Z", + "item": ["Normalium Z"], + "ability": ["Adaptability"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Ice Beam"], ["Thunderbolt"], ["Conversion"]] + }, { + "species": "Porygon-Z", + "item": ["Normalium Z"], + "ability": ["Adaptability"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Shadow Ball"], ["Conversion"], ["Thunderbolt"], ["Recover"]] + }, { + "species": "Porygon-Z", + "item": ["Choice Scarf"], + "ability": ["Adaptability"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Tri Attack"], ["Shadow Ball"], ["Ice Beam"], ["Thunderbolt", "Trick"]] + }] + }, + "pidgeot": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Pidgeot", + "item": ["Pidgeotite"], + "ability": ["Big Pecks"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Roost"], ["Heat Wave"], ["U-turn"]] + }, { + "species": "Pidgeot", + "item": ["Pidgeotite"], + "ability": ["Big Pecks"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Roost"], ["Defog"], ["U-turn"]] + }, { + "species": "Pidgeot", + "item": ["Pidgeotite"], + "ability": ["Big Pecks"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Heat Wave"], ["Roost"], ["U-turn"]] + }, { + "species": "Pidgeot", + "item": ["Pidgeotite"], + "ability": ["Big Pecks"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hurricane"], ["Heat Wave"], ["Hidden Power Ground"], ["U-turn"]] + }] + }, + "meloetta": { + "flags": {}, + "sets": [{ + "species": "Meloetta", + "item": ["Choice Specs"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Psyshock"], ["Focus Blast", "Dazzling Gleam"], ["Shadow Ball"], ["Hyper Voice"]] + }, { + "species": "Meloetta", + "item": ["Choice Specs"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psyshock"], ["Focus Blast"], ["Shadow Ball"], ["Hyper Voice", "U-turn"]] + }, { + "species": "Meloetta", + "item": ["Choice Specs"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psyshock"], ["Focus Blast"], ["Shadow Ball"], ["Hidden Power Fire"]] + }, { + "species": "Meloetta", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["U-turn", "Trick"]] + }, { + "species": "Meloetta", + "item": ["Choice Specs"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Psyshock"], ["Focus Blast", "Dazzling Gleam"], ["Shadow Ball"], ["Hyper Voice"]] + }, { + "species": "Meloetta", + "item": ["Choice Specs"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psyshock"], ["Focus Blast"], ["Shadow Ball"], ["Hyper Voice", "U-turn"]] + }, { + "species": "Meloetta", + "item": ["Choice Specs"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psyshock"], ["Focus Blast"], ["Shadow Ball"], ["Hidden Power Fire"]] + }, { + "species": "Meloetta", + "item": ["Assault Vest"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Psychic"], ["Focus Blast"], ["Hidden Power Fire"], ["U-turn"]] + }, { + "species": "Meloetta", + "item": ["Choice Scarf"], + "ability": ["Serene Grace"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["U-turn"]] + }] + }, + "bewear": { + "flags": {}, + "sets": [{ + "species": "Bewear", + "item": ["Leftovers"], + "ability": ["Fluffy"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Return"], ["Drain Punch"], ["Ice Punch"], ["Earthquake", "Bulk Up", "Swords Dance", "Toxic"]] + }, { + "species": "Bewear", + "item": ["Fightinium Z"], + "ability": ["Fluffy"], + "evs": {"hp": 76, "atk": 252, "spe": 180}, + "nature": "Adamant", + "moves": [["Swords Dance"], ["Return"], ["Superpower"], ["Ice Punch", "Rock Slide"]] + }, { + "species": "Bewear", + "item": ["Chesto Berry"], + "ability": ["Fluffy"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Impish", + "moves": [["Bulk Up"], ["Drain Punch"], ["Return"], ["Rest"]] + }, { + "species": "Bewear", + "item": ["Choice Band"], + "ability": ["Fluffy"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Double-Edge"], ["Drain Punch"], ["Ice Punch"], ["Superpower", "Earthquake"]] + }, { + "species": "Bewear", + "item": ["Choice Band"], + "ability": ["Fluffy"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Return"], ["Drain Punch"], ["Ice Punch"], ["Superpower", "Earthquake"]] + }] + }, + "smeargle": { + "flags": {}, + "sets": [{ + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Spore"], ["Nuzzle"]] + }, { + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Spore"], ["Magic Coat"]] + }, { + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Spore"], ["Toxic Spikes"]] + }, { + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Spore"], ["Memento", "Endeavor"]] + }, { + "species": "Smeargle", + "item": ["Focus Sash"], + "ability": ["Own Tempo"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Sticky Web"], ["Spore"], ["Rapid Spin"]] + }] + }, + "snorlax": { + "flags": {}, + "sets": [{ + "species": "Snorlax", + "item": ["Figy Berry"], + "ability": ["Gluttony"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Curse"], ["Recycle"], ["Facade", "Body Slam"], ["Earthquake"]] + }, { + "species": "Snorlax", + "item": ["Figy Berry"], + "ability": ["Gluttony"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Careful", + "moves": [["Curse"], ["Recycle"], ["Return"], ["Earthquake"]] + }, { + "species": "Snorlax", + "item": ["Choice Band"], + "ability": ["Thick Fat"], + "evs": {"atk": 252, "def": 252, "spe": 4}, + "nature": "Adamant", + "moves": [["Double-Edge"], ["Earthquake"], ["Fire Punch"], ["Pursuit"]] + }] + }, + "heliolisk": { + "flags": {}, + "sets": [{ + "species": "Heliolisk", + "item": ["Choice Specs"], + "ability": ["Dry Skin"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Thunderbolt"], ["Focus Blast", "Hyper Voice"], ["Surf", "Grass Knot"], ["Volt Switch"]] + }] + }, + "audino": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Audino", + "item": ["Audinite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Wish"], ["Protect"], ["Calm Mind", "Toxic"], ["Dazzling Gleam"]] + }] + }, + "toxapex": { + "flags": {}, + "sets": [{ + "species": "Toxapex", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Recover"], ["Haze"], ["Toxic Spikes"]] + }, { + "species": "Toxapex", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Recover"], ["Baneful Bunker"], ["Toxic Spikes"]] + }, { + "species": "Toxapex", + "item": ["Black Sludge"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Toxic Spikes"], ["Recover"], ["Haze", "Baneful Bunker"]] + }] + }, + "crobat": { + "flags": {}, + "sets": [{ + "species": "Crobat", + "item": ["Black Sludge"], + "ability": ["Infiltrator"], + "evs": {"hp": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Defog"], ["Roost"], ["U-turn", "Taunt"]] + }, { + "species": "Crobat", + "item": ["Black Sludge"], + "ability": ["Infiltrator"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Super Fang"], ["Roost"], ["U-turn", "Taunt"]] + }, { + "species": "Crobat", + "item": ["Black Sludge"], + "ability": ["Infiltrator"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Brave Bird"], ["Defog"], ["Roost"], ["U-turn", "Taunt"]] + }] + }, + "nihilego": { + "flags": {}, + "sets": [{ + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Power Gem"], ["Sludge Wave"], ["Hidden Power Ice"], ["Thunderbolt"]] + }, { + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Power Gem"], ["Sludge Wave"], ["Hidden Power Ice"], ["Stealth Rock"]] + }, { + "species": "Nihilego", + "item": ["Air Balloon"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Power Gem"], ["Hidden Power Ice"], ["Sludge Wave", "Grass Knot"], ["Stealth Rock"]] + }, { + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Power Gem"], ["Thunderbolt"], ["Grass Knot"]] + }, { + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Power Gem"], ["Thunderbolt"], ["Hidden Power Ice"]] + }, { + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Power Gem"], ["Thunderbolt"], ["Psychic"]] + }, { + "species": "Nihilego", + "item": ["Choice Scarf"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Power Gem"], ["Thunderbolt"], ["Hidden Power Ice"]] + }, { + "species": "Nihilego", + "item": ["Focus Sash"], + "ability": ["Beast Boost"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Sludge Wave"], ["Power Gem"], ["Thunderbolt"], ["Toxic Spikes"]] + }] + }, + "nidoqueen": { + "flags": {}, + "sets": [{ + "species": "Nidoqueen", + "item": ["Focus Sash"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Earth Power"], ["Ice Beam"], ["Flamethrower"]] + }, { + "species": "Nidoqueen", + "item": ["Shuca Berry"], + "ability": ["Sheer Force"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Earth Power"], ["Ice Beam"], ["Taunt"]] + }] + }, + "skuntank": { + "flags": {}, + "sets": [{ + "species": "Skuntank", + "item": ["Darkinium Z"], + "ability": ["Aftermath"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Sucker Punch"], ["Defog"], ["Poison Jab"], ["Pursuit"]] + }, { + "species": "Skuntank", + "item": ["Life Orb"], + "ability": ["Aftermath"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Naughty", + "moves": [["Sucker Punch"], ["Fire Blast"], ["Poison Jab"], ["Pursuit"]] + }, { + "species": "Skuntank", + "item": ["Life Orb"], + "ability": ["Aftermath"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Naughty", + "moves": [["Sucker Punch"], ["Fire Blast"], ["Defog"], ["Pursuit"]] + }] + }, + "beedrill": { + "flags": { + "megaOnly": 1 + }, + "sets": [{ + "species": "Beedrill", + "item": ["Beedrillite"], + "ability": ["Sniper"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Poison Jab"], ["Drill Run"], ["Knock Off", "Pursuit"], ["U-turn"]] + }, { + "species": "Beedrill", + "item": ["Beedrillite"], + "ability": ["Sniper"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Poison Jab"], ["Drill Run"], ["Swords Dance"], ["U-turn"]] + }] + }, + "tentacruel": { + "flags": {}, + "sets": [{ + "species": "Tentacruel", + "item": ["Black Sludge"], + "ability": ["Liquid Ooze"], + "evs": {"hp": 252, "spd": 240, "spe": 16}, + "nature": "Calm", + "moves": [["Rapid Spin"], ["Scald"], ["Acid Spray"], ["Knock Off"]] + }, { + "species": "Tentacruel", + "item": ["Black Sludge"], + "ability": ["Liquid Ooze"], + "evs": {"hp": 252, "spd": 240, "spe": 16}, + "nature": "Calm", + "moves": [["Rapid Spin"], ["Scald"], ["Acid Spray"], ["Toxic Spikes"]] + }, { + "species": "Tentacruel", + "item": ["Air Balloon"], + "ability": ["Liquid Ooze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Rapid Spin"], ["Scald", "Hydro Pump"], ["Acid Spray"], ["Ice Beam"]] + }, { + "species": "Tentacruel", + "item": ["Air Balloon"], + "ability": ["Liquid Ooze"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Rapid Spin"], ["Scald", "Hydro Pump"], ["Acid Spray"], ["Toxic Spikes"]] + }, { + "species": "Tentacruel", + "item": ["Black Sludge"], + "ability": ["Liquid Ooze"], + "evs": {"hp": 252, "spd": 148, "spe": 108}, + "nature": "Calm", + "moves": [["Scald"], ["Toxic Spikes"], ["Rapid Spin"], ["Sludge Bomb"]] + }] + }, + "mew": { + "flags": {}, + "sets": [{ + "species": "Mew", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "spd": 120, "spe": 136}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Taunt"], ["Will-O-Wisp"], ["Roost"]] + }, { + "species": "Mew", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "spd": 148, "spe": 108}, + "nature": "Careful", + "moves": [["Knock Off"], ["Taunt"], ["Will-O-Wisp"], ["Roost"]] + }, { + "species": "Mew", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "spd": 120, "spe": 136}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Defog"], ["Will-O-Wisp"], ["Roost"]] + }, { + "species": "Mew", + "item": ["Leftovers"], + "ability": ["Synchronize"], + "evs": {"hp": 252, "spd": 120, "spe": 136}, + "nature": "Jolly", + "moves": [["Knock Off"], ["Stealth Rock"], ["Will-O-Wisp"], ["Roost"]] + }, { + "species": "Mew", + "item": ["Mewnium Z"], + "ability": ["Synchronize"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Focus Blast"], ["Rock Polish"], ["Nasty Plot"]] + }, { + "species": "Mew", + "item": ["Mewnium Z"], + "ability": ["Synchronize"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Focus Blast", "Earth Power"], ["Rock Polish"], ["Nasty Plot"]] + }] + }, + "alakazam": { + "flags": {}, + "sets": [{ + "species": "Alakazam", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"def": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Focus Blast"], ["Shadow Ball"], ["Counter"]] + }, { + "species": "Alakazam", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"def": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Focus Blast"], ["Hidden Power Fire"], ["Counter"]] + }, { + "species": "Alakazam", + "item": ["Focus Sash"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "ivs": {"def": 0}, + "nature": "Timid", + "moves": [["Psychic"], ["Dazzling Gleam"], ["Shadow Ball"], ["Counter"]] + }, { + "species": "Alakazam", + "item": ["Alakazite"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Shadow Ball"], ["Focus Blast"], ["Encore", "Substitute"]] + }, { + "species": "Alakazam", + "item": ["Alakazite"], + "ability": ["Magic Guard"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Psychic"], ["Calm Mind"], ["Focus Blast", "Shadow Ball"], ["Substitute"]] + }] + }, + "deoxysspeed": { + "flags": {}, + "sets": [{ + "species": "Deoxys-Speed", + "item": ["Focus Sash"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Spikes"], ["Taunt"], ["Knock Off"]] + }, { + "species": "Deoxys-Speed", + "item": ["Focus Sash"], + "ability": ["Pressure"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Stealth Rock"], ["Spikes"], ["Taunt"], ["Psycho Boost"]] + }, { + "species": "Deoxys-Speed", + "item": ["Light Clay"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Reflect"], ["Light Screen"], ["Stealth Rock"], ["Taunt"]] + }] + }, + "jirachi": { + "flags": {}, + "sets": [{ + "species": "Jirachi", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 252, "def": 148, "spe": 108}, + "nature": "Impish", + "moves": [["Iron Head"], ["Stealth Rock"], ["U-turn"], ["Toxic", "Thunder Wave", "Healing Wish"]] + }, { + "species": "Jirachi", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 252, "spd": 148, "spe": 108}, + "nature": "Careful", + "moves": [["Iron Head"], ["Stealth Rock"], ["U-turn"], ["Toxic", "Thunder Wave", "Healing Wish"]] + }, { + "species": "Jirachi", + "item": ["Normalium Z"], + "ability": ["Serene Grace"], + "evs": {"atk": 4, "spa": 252, "spe": 252}, + "nature": "Naive", + "moves": [["Happy Hour"], ["Iron Head"], ["Psychic"], ["Thunderbolt"]] + }, { + "species": "Jirachi", + "item": ["Leftovers"], + "ability": ["Serene Grace"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Calm Mind"], ["Psychic"], ["Thunderbolt"]] + }] + }, + "slowbro": { + "flags": {}, + "sets": [{ + "species": "Slowbro", + "item": ["Colbur Berry"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Fire Blast", "Flamethrower"], ["Ice Beam", "Grass Knot"], ["Slack Off"]] + }, { + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Psychic"], ["Calm Mind"], ["Slack Off"]] + }, { + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Iron Defense"], ["Calm Mind"], ["Rest"]] + }, { + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Calm Mind"], ["Psychic"], ["Slack Off"]] + }, { + "species": "Slowbro", + "item": ["Slowbronite"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Calm Mind"], ["Iron Defense"], ["Rest"]] + }, { + "species": "Slowbro", + "item": ["Leftovers"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Fire Blast"], ["Slack Off"], ["Psychic"]] + }] + }, + "metagross": { + "flags": {}, + "sets": [{ + "species": "Metagross", + "item": ["Choice Band"], + "ability": ["Clear Body"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Bullet Punch"], ["Earthquake"]] + }, { + "species": "Metagross", + "item": ["Choice Band"], + "ability": ["Clear Body"], + "evs": {"atk": 252, "def": 4, "spe": 252}, + "nature": "Adamant", + "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Bullet Punch", "Trick"], ["Earthquake"]] + }, { + "species": "Metagross", + "item": ["Assault Vest"], + "ability": ["Clear Body"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "nature": "Adamant", + "moves": [["Meteor Mash"], ["Zen Headbutt"], ["Bullet Punch"], ["Earthquake"]] + }] + }, + "deoxysdefense": { + "flags": {}, + "sets": [{ + "species": "Deoxys-Defense", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Toxic"], ["Night Shade"], ["Protect"]] + }, { + "species": "Deoxys-Defense", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Toxic"], ["Seismic Toss"], ["Protect"]] + }, { + "species": "Deoxys-Defense", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Toxic"], ["Seismic Toss", "Night Shade"], ["Spikes"]] + }, { + "species": "Deoxys-Defense", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Toxic"], ["Seismic Toss", "Night Shade"], ["Taunt"]] + }, { + "species": "Deoxys-Defense", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Stealth Rock"], ["Taunt"], ["Seismic Toss", "Night Shade"], ["Spikes"]] + }] + }, + "rhyperior": { + "flags": {}, + "sets": [{ + "species": "Rhyperior", + "item": ["Weakness Policy"], + "ability": ["Solid Rock"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Impish", + "moves": [["Earthquake"], ["Stone Edge", "Rock Slide"], ["Fire Punch"], ["Ice Punch"]] + }, { + "species": "Rhyperior", + "item": ["Leftovers"], + "ability": ["Solid Rock"], + "evs": {"hp": 248, "def": 252, "spd": 8}, + "nature": "Adamant", + "moves": [["Earthquake"], ["Rock Slide"], ["Fire Punch"], ["Counter"]] + }] + }, + "omastar": { + "flags": {}, + "sets": [{ + "species": "Omastar", + "item": ["Air Balloon"], + "ability": ["Weak Armor"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Shell Smash"], ["Surf", "Hydro Pump"], ["Ice Beam"], ["Hidden Power Grass"]] + }, { + "species": "Omastar", + "item": ["Air Balloon"], + "ability": ["Weak Armor"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Shell Smash"], ["Surf", "Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"]] + }] + }, + "stakataka": { + "flags": {}, + "sets": [{ + "species": "Stakataka", + "item": ["Rockium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Stone Edge"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": ["Air Balloon"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Stone Edge"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": ["Rockium Z"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Stone Edge"], ["Earthquake"], ["Trick Room"]] + }, { + "species": "Stakataka", + "item": ["Air Balloon"], + "ability": ["Beast Boost"], + "evs": {"hp": 252, "atk": 252, "spd": 4}, + "ivs": {"def": 15, "spe": 0}, + "nature": "Lonely", + "moves": [["Gyro Ball"], ["Stone Edge"], ["Earthquake"], ["Trick Room"]] + }] + }, + "lycanrocdusk": { + "flags": {}, + "sets": [{ + "species": "Lycanroc-Dusk", + "item": ["Life Orb"], + "ability": ["Tough Claws"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Accelerock"], ["Fire Fang"], ["Stone Edge"], ["Swords Dance"]] + }, { + "species": "Lycanroc-Dusk", + "item": ["Lycanium Z"], + "ability": ["Tough Claws"], + "evs": {"atk": 252, "spd": 4, "spe": 252}, + "nature": "Jolly", + "moves": [["Accelerock"], ["Fire Fang"], ["Stone Edge"], ["Swords Dance"]] + }] + }, + "minior": { + "flags": {}, + "sets": [{ + "species": "Minior", + "item": ["Focus Sash"], + "ability": ["Shields Down"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Power Gem"]] + }, { + "species": "Minior", + "item": ["Focus Sash"], + "ability": ["Shields Down"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Hidden Power Fire"]] + }, { + "species": "Minior", + "item": ["Rockium Z"], + "ability": ["Shields Down"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Stone Edge"], ["Earthquake"], ["Hidden Power Fire"]] + }, { + "species": "Minior", + "item": ["White Herb"], + "ability": ["Shields Down"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Power Gem"]] + }, { + "species": "Minior", + "item": ["White Herb"], + "ability": ["Shields Down"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Shell Smash"], ["Acrobatics"], ["Earthquake"], ["Hidden Power Fire"]] + }] + }, + "bronzong": { + "flags": {}, + "sets": [{ + "species": "Bronzong", + "item": ["Occa Berry"], + "ability": ["Levitate"], + "evs": {"hp": 252, "atk": 252, "def": 4}, + "ivs": {"spe": 0}, + "nature": "Brave", + "moves": [["Trick Room"], ["Stealth Rock"], ["Gyro Ball"], ["Explosion"]] + }] + }, + "empoleon": { + "flags": {}, + "sets": [{ + "species": "Empoleon", + "item": ["Assault Vest"], + "ability": ["Torrent"], + "evs": {"hp": 252, "atk": 4, "spd": 252}, + "nature": "Sassy", + "moves": [["Hydro Pump"], ["Rock Slide"], ["Earthquake"], ["Grass Knot"]] + }, { + "species": "Empoleon", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Scald"], ["Defog"], ["Stealth Rock"], ["Roar"]] + }] + }, + "swampert": { + "flags": {}, + "sets": [{ + "species": "Swampert", + "item": ["Swampertite"], + "ability": ["Torrent"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Stealth Rock"], ["Roar"]] + }, { + "species": "Swampert", + "item": ["Leftovers"], + "ability": ["Torrent"], + "evs": {"hp": 252, "atk": 4, "def": 252}, + "nature": "Relaxed", + "moves": [["Scald"], ["Earthquake"], ["Stealth Rock"], ["Roar"]] + }, { + "species": "Swampert", + "item": ["Swampertite"], + "ability": ["Torrent"], + "evs": {"atk": 252, "spa": 4, "spe": 252}, + "nature": "Naive", + "moves": [["Waterfall"], ["Earthquake"], ["Sludge Wave"], ["Stealth Rock"]] + }] + }, + "suicune": { + "flags": {}, + "sets": [{ + "species": "Suicune", + "item": ["Leftovers"], + "ability": ["Pressure"], + "evs": {"hp": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Substitute"], ["Calm Mind"], ["Scald"], ["Protect"]] + }] + }, + "kingdra": { + "flags": {}, + "sets": [{ + "species": "Kingdra", + "item": ["Choice Specs"], + "ability": ["Swift Swim"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Draco Meteor"], ["Surf"], ["Ice Beam"]] + }] + }, + "manaphy": { + "flags": {}, + "sets": [{ + "species": "Manaphy", + "item": ["Waterium Z"], + "ability": ["Hydration"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Surf"], ["Psychic"], ["Rain Dance"], ["Tail Glow"]] + }, { + "species": "Manaphy", + "item": ["Sitrus Berry"], + "ability": ["Hydration"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Timid", + "moves": [["Surf"], ["Psychic"], ["Ice Beam"], ["Tail Glow"]] + }] + }, + "pelipper": { + "flags": {}, + "sets": [{ + "species": "Pelipper", + "item": ["Leftovers"], + "ability": ["Drizzle"], + "evs": {"hp": 248, "def": 252, "spe": 8}, + "nature": "Bold", + "moves": [["Scald"], ["Hurricane", "U-turn"], ["Roost"], ["Defog"]] + }, { + "species": "Pelipper", + "item": ["Choice Specs"], + "ability": ["Drizzle"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Hurricane"], ["U-turn"], ["Defog"]] + }, { + "species": "Pelipper", + "item": ["Choice Scarf"], + "ability": ["Drizzle"], + "evs": {"spa": 252, "spd": 4, "spe": 252}, + "nature": "Modest", + "moves": [["Hydro Pump"], ["Hurricane"], ["U-turn"], ["Defog"]] + }] + }, + "alomomola": { + "flags": {}, + "sets": [{ + "species": "Alomomola", + "item": ["Leftovers"], + "ability": ["Regenerator"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Wish"], ["Protect"], ["Toxic", "Knock Off"]] + }] + }, + "lanturn": { + "flags": {}, + "sets": [{ + "species": "Lanturn", + "item": ["Leftovers"], + "ability": ["Volt Absorb"], + "evs": {"hp": 252, "def": 4, "spd": 252}, + "nature": "Calm", + "moves": [["Volt Switch"], ["Protect"], ["Toxic"], ["Heal Bell"]] + }] + }, + "milotic": { + "flags": {}, + "sets": [{ + "species": "Milotic", + "item": ["Icium Z"], + "ability": ["Competitive"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Recover"]] + }, { + "species": "Milotic", + "item": ["Expert Belt"], + "ability": ["Competitive"], + "evs": {"def": 4, "spa": 252, "spe": 252}, + "nature": "Timid", + "moves": [["Hydro Pump"], ["Ice Beam"], ["Hidden Power Electric"], ["Recover"]] + }] + }, + "politoed": { + "flags": {}, + "sets": [{ + "species": "Politoed", + "item": ["Eject Button"], + "ability": ["Drizzle"], + "evs": {"hp": 252, "def": 252, "spd": 4}, + "nature": "Bold", + "moves": [["Scald"], ["Perish Song", "Encore"], ["Rest"], ["Toxic"]] + }] + } + } +} diff --git a/data/formats-data.js b/data/formats-data.js index 00fecf489a1e8..c0abdf2ed5fd8 100644 --- a/data/formats-data.js +++ b/data/formats-data.js @@ -1,16 +1,20 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: TemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { randomBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "leechseed", "synthesis"], randomDoubleBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["sweetscent", "growth", "solarbeam", "synthesis"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "growl", "leechseed", "vinewhip"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tackle", "growl", "leechseed", "vinewhip"]}, - {"generation": 5, "level": 1, "shiny": 1, "ivs": {"def": 31}, "isHidden": false, "moves":["falseswipe", "block", "frenzyplant", "weatherball"]}, - {"generation": 6, "level": 5, "isHidden": false, "moves":["growl", "leechseed", "vinewhip", "poisonpowder"], "pokeball": "cherishball"}, - {"generation": 6, "level": 5, "isHidden": true, "moves":["tackle", "growl", "celebrate"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["sweetscent", "growth", "solarbeam", "synthesis"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "growl", "leechseed", "vinewhip"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tackle", "growl", "leechseed", "vinewhip"]}, + {"generation": 5, "level": 1, "shiny": 1, "ivs": {"def": 31}, "isHidden": false, "moves": ["falseswipe", "block", "frenzyplant", "weatherball"], "pokeball": "pokeball"}, + {"generation": 6, "level": 5, "isHidden": false, "moves": ["growl", "leechseed", "vinewhip", "poisonpowder"], "pokeball": "cherishball"}, + {"generation": 6, "level": 5, "isHidden": true, "moves": ["tackle", "growl", "celebrate"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, ], tier: "LC", }, @@ -23,29 +27,34 @@ exports.BattleFormatsData = { randomBattleMoves: ["sunnyday", "sleeppowder", "gigadrain", "hiddenpowerfire", "sludgebomb", "leechseed", "substitute"], randomDoubleBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "protect"], eventPokemon: [ - {"generation": 6, "level": 100, "isHidden": true, "moves":["solarbeam", "frenzyplant", "synthesis", "grasspledge"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "isHidden": true, "moves": ["solarbeam", "frenzyplant", "synthesis", "grasspledge"], "pokeball": "cherishball"}, ], - tier: "RU", + tier: "NUBL", + doublesTier: "(DUU)", }, venusaurmega: { randomBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "sludgebomb", "leechseed", "synthesis", "earthquake", "knockoff"], randomDoubleBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "protect"], requiredItem: "Venusaurite", - tier: "OU", + tier: "UUBL", + doublesTier: "DUU", }, charmander: { randomBattleMoves: ["flamethrower", "overheat", "dragonpulse", "hiddenpowergrass", "fireblast"], randomDoubleBattleMoves: ["heatwave", "dragonpulse", "hiddenpowergrass", "fireblast", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "growl", "ember"]}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Mild", "moves":["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Naive", "moves":["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Naughty", "moves":["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["scratch", "growl", "ember", "smokescreen"]}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Hardy", "moves":["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, - {"generation": 5, "level": 1, "shiny": 1, "ivs": {"spe": 31}, "isHidden": false, "moves":["falseswipe", "block", "blastburn", "acrobatics"]}, - {"generation": 6, "level": 5, "isHidden": false, "moves":["growl", "ember", "smokescreen", "dragonrage"], "pokeball": "cherishball"}, - {"generation": 6, "level": 5, "isHidden": true, "moves":["scratch", "growl", "celebrate"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "growl", "ember"], "pokeball": "pokeball"}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Mild", "moves": ["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Naive", "moves": ["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Naughty", "moves": ["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["scratch", "growl", "ember", "smokescreen"]}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Hardy", "moves": ["return", "hiddenpower", "quickattack", "howl"], "pokeball": "cherishball"}, + {"generation": 5, "level": 1, "shiny": 1, "ivs": {"spe": 31}, "isHidden": false, "moves": ["falseswipe", "block", "blastburn", "acrobatics"], "pokeball": "pokeball"}, + {"generation": 6, "level": 5, "isHidden": false, "moves": ["growl", "ember", "smokescreen", "dragonrage"], "pokeball": "cherishball"}, + {"generation": 6, "level": 5, "isHidden": true, "moves": ["scratch", "growl", "celebrate"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, ], tier: "LC", }, @@ -58,37 +67,45 @@ exports.BattleFormatsData = { randomBattleMoves: ["fireblast", "airslash", "focusblast", "roost", "swordsdance", "flamecharge", "acrobatics", "earthquake", "willowisp"], randomDoubleBattleMoves: ["heatwave", "fireblast", "airslash", "overheat", "dragonpulse", "roost", "tailwind", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["wingattack", "slash", "dragonrage", "firespin"]}, - {"generation": 6, "level": 36, "gender": "M", "isHidden": false, "moves":["firefang", "flameburst", "airslash", "inferno"], "pokeball": "cherishball"}, - {"generation": 6, "level": 36, "gender": "M", "isHidden": false, "moves":["firefang", "airslash", "dragonclaw", "dragonrage"], "pokeball": "cherishball"}, - {"generation": 6, "level": 36, "shiny": true, "gender": "M", "isHidden": false, "moves":["overheat", "solarbeam", "focusblast", "holdhands"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "isHidden": true, "moves":["flareblitz", "blastburn", "scaryface", "firepledge"], "pokeball": "cherishball"}, - {"generation": 7, "level": 40, "gender": "M", "nature": "Jolly", "isHidden": false, "moves":["flareblitz", "dragonclaw", "fly", "dragonrage"], "pokeball": "cherishball"}, - {"generation": 7, "level": 40, "gender": "M", "nature": "Adamant", "isHidden": false, "moves":["flamethrower", "dragonrage", "slash", "seismictoss"], "pokeball": "pokeball"}, + {"generation": 3, "level": 70, "moves": ["wingattack", "slash", "dragonrage", "firespin"], "pokeball": "pokeball"}, + {"generation": 6, "level": 36, "gender": "M", "isHidden": false, "moves": ["firefang", "flameburst", "airslash", "inferno"], "pokeball": "cherishball"}, + {"generation": 6, "level": 36, "gender": "M", "isHidden": false, "moves": ["firefang", "airslash", "dragonclaw", "dragonrage"], "pokeball": "cherishball"}, + {"generation": 6, "level": 36, "shiny": true, "gender": "M", "isHidden": false, "moves": ["overheat", "solarbeam", "focusblast", "holdhands"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "isHidden": true, "moves": ["flareblitz", "blastburn", "scaryface", "firepledge"], "pokeball": "cherishball"}, + {"generation": 6, "level": 36, "gender": "M", "nature": "Serious", "isHidden": false, "moves": ["flamethrower", "ember", "firespin", "flameburst"], "pokeball": "cherishball"}, + {"generation": 7, "level": 40, "gender": "M", "nature": "Jolly", "isHidden": false, "moves": ["flareblitz", "dragonclaw", "fly", "dragonrage"], "pokeball": "cherishball"}, + {"generation": 7, "level": 40, "gender": "M", "nature": "Adamant", "isHidden": false, "moves": ["flamethrower", "dragonrage", "slash", "seismictoss"], "pokeball": "pokeball"}, + {"generation": 7, "level": 50, "isHidden": false, "moves": ["dragondance", "flareblitz", "fly", "earthquake"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "PUBL", + doublesTier: "(DUU)", }, charizardmegax: { randomBattleMoves: ["dragondance", "flareblitz", "dragonclaw", "earthquake", "roost", "willowisp"], randomDoubleBattleMoves: ["dragondance", "flareblitz", "dragonclaw", "earthquake", "rockslide", "roost", "substitute"], requiredItem: "Charizardite X", tier: "OU", + doublesTier: "(DUU)", }, charizardmegay: { randomBattleMoves: ["fireblast", "airslash", "roost", "solarbeam", "focusblast", "dragonpulse"], randomDoubleBattleMoves: ["heatwave", "fireblast", "airslash", "roost", "solarbeam", "focusblast", "protect"], requiredItem: "Charizardite Y", tier: "OU", + doublesTier: "DOU", }, squirtle: { randomBattleMoves: ["icebeam", "hydropump", "rapidspin", "scald", "aquajet", "toxic"], randomDoubleBattleMoves: ["muddywater", "icebeam", "hydropump", "fakeout", "scald", "followme", "icywind", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "tailwhip", "bubble", "withdraw"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tackle", "tailwhip", "bubble", "withdraw"]}, - {"generation": 5, "level": 1, "shiny": 1, "ivs": {"hp": 31}, "isHidden": false, "moves":["falseswipe", "block", "hydrocannon", "followme"]}, - {"generation": 6, "level": 5, "isHidden": false, "moves":["tailwhip", "watergun", "withdraw", "bubble"], "pokeball": "cherishball"}, - {"generation": 6, "level": 5, "isHidden": true, "moves":["tackle", "tailwhip", "celebrate"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "tailwhip", "bubble", "withdraw"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tackle", "tailwhip", "bubble", "withdraw"]}, + {"generation": 5, "level": 1, "shiny": 1, "ivs": {"hp": 31}, "isHidden": false, "moves": ["falseswipe", "block", "hydrocannon", "followme"], "pokeball": "pokeball"}, + {"generation": 6, "level": 5, "isHidden": false, "moves": ["tailwhip", "watergun", "withdraw", "bubble"], "pokeball": "cherishball"}, + {"generation": 6, "level": 5, "isHidden": true, "moves": ["tackle", "tailwhip", "celebrate"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, ], tier: "LC", }, @@ -101,122 +118,214 @@ exports.BattleFormatsData = { randomBattleMoves: ["icebeam", "rapidspin", "scald", "toxic", "dragontail", "roar"], randomDoubleBattleMoves: ["muddywater", "icebeam", "hydropump", "fakeout", "scald", "followme", "icywind", "protect", "waterspout"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["protect", "raindance", "skullbash", "hydropump"]}, - {"generation": 6, "level": 100, "isHidden": true, "moves":["hydropump", "hydrocannon", "irondefense", "waterpledge"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["protect", "raindance", "skullbash", "hydropump"], "pokeball": "pokeball"}, + {"generation": 6, "level": 100, "isHidden": true, "moves": ["hydropump", "hydrocannon", "irondefense", "waterpledge"], "pokeball": "cherishball"}, ], - tier: "RU", + tier: "NU", + doublesTier: "(DUU)", }, blastoisemega: { randomBattleMoves: ["icebeam", "hydropump", "rapidspin", "scald", "dragontail", "darkpulse", "aurasphere"], randomDoubleBattleMoves: ["muddywater", "icebeam", "hydropump", "fakeout", "scald", "darkpulse", "aurasphere", "followme", "icywind", "protect"], requiredItem: "Blastoisinite", - tier: "UU", + tier: "RU", + doublesTier: "(DUU)", }, caterpie: { randomBattleMoves: ["bugbite", "snore", "tackle", "electroweb"], + encounters: [ + {"generation": 1, "level": 3, "shiny": false}, + {"generation": 2, "level": 3}, + {"generation": 3, "level": 3}, + ], tier: "LC", }, metapod: { randomBattleMoves: ["snore", "bugbite", "tackle", "electroweb"], + encounters: [ + {"generation": 1, "level": 4, "shiny": false}, + {"generation": 2, "level": 4}, + {"generation": 3, "level": 4}, + {"generation": 4, "level": 3}, + {"generation": 6, "level": 4}, + {"generation": 7, "level": 3}, + ], tier: "NFE", }, butterfree: { randomBattleMoves: ["sleeppowder", "quiverdance", "bugbuzz", "airslash", "gigadrain", "substitute"], randomDoubleBattleMoves: ["quiverdance", "bugbuzz", "substitute", "sleeppowder", "airslash", "shadowball", "protect"], eventPokemon: [ - {"generation": 3, "level": 30, "moves":["morningsun", "psychic", "sleeppowder", "aerialace"]}, + {"generation": 3, "level": 30, "moves": ["morningsun", "psychic", "sleeppowder", "aerialace"]}, ], - tier: "PU", + encounters: [ + {"generation": 2, "level": 7}, + {"generation": 4, "level": 6}, + {"generation": 7, "level": 9}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, weedle: { randomBattleMoves: ["bugbite", "stringshot", "poisonsting", "electroweb"], + encounters: [ + {"generation": 1, "level": 3, "shiny": false}, + {"generation": 2, "level": 3}, + {"generation": 3, "level": 3}, + ], tier: "LC", }, kakuna: { randomBattleMoves: ["electroweb", "bugbite", "irondefense", "poisonsting"], + encounters: [ + {"generation": 1, "level": 4, "shiny": false}, + {"generation": 2, "level": 4}, + {"generation": 3, "level": 4}, + {"generation": 4, "level": 3}, + {"generation": 6, "level": 4}, + {"generation": 7, "level": 3}, + ], tier: "NFE", }, beedrill: { randomBattleMoves: ["toxicspikes", "tailwind", "uturn", "endeavor", "poisonjab", "knockoff"], randomDoubleBattleMoves: ["xscissor", "uturn", "poisonjab", "drillrun", "brickbreak", "knockoff", "protect", "stringshot"], eventPokemon: [ - {"generation": 3, "level": 30, "moves":["batonpass", "sludgebomb", "twineedle", "swordsdance"]}, + {"generation": 3, "level": 30, "moves": ["batonpass", "sludgebomb", "twineedle", "swordsdance"]}, ], - tier: "PU", + encounters: [ + {"generation": 2, "level": 7}, + {"generation": 4, "level": 6}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, beedrillmega: { randomBattleMoves: ["xscissor", "swordsdance", "uturn", "poisonjab", "drillrun", "knockoff"], randomDoubleBattleMoves: ["xscissor", "uturn", "substitute", "poisonjab", "drillrun", "knockoff", "protect"], requiredItem: "Beedrillite", tier: "UU", + doublesTier: "DUU", }, pidgey: { randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "workup", "uturn", "thief"], randomDoubleBattleMoves: ["bravebird", "heatwave", "return", "uturn", "tailwind", "protect"], + encounters: [ + {"generation": 1, "level": 2, "shiny": false}, + {"generation": 2, "level": 2}, + {"generation": 3, "level": 2}, + ], tier: "LC", }, pidgeotto: { randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "workup", "uturn", "thief"], randomDoubleBattleMoves: ["bravebird", "heatwave", "return", "uturn", "tailwind", "protect"], eventPokemon: [ - {"generation": 3, "level": 30, "abilities":["keeneye"], "moves":["refresh", "wingattack", "steelwing", "featherdance"]}, + {"generation": 3, "level": 30, "abilities": ["keeneye"], "moves": ["refresh", "wingattack", "steelwing", "featherdance"]}, + ], + encounters: [ + {"generation": 1, "level": 9, "shiny": false}, + {"generation": 2, "level": 7}, + {"generation": 3, "level": 7}, + {"generation": 4, "level": 7}, ], tier: "NFE", }, pidgeot: { - randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "doubleedge", "uturn", "hurricane"], + randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "uturn", "defog"], randomDoubleBattleMoves: ["bravebird", "heatwave", "return", "doubleedge", "uturn", "tailwind", "protect"], eventPokemon: [ - {"generation": 5, "level": 61, "gender": "M", "nature": "Naughty", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "abilities":["keeneye"], "moves":["whirlwind", "wingattack", "skyattack", "mirrormove"], "pokeball": "cherishball"}, + {"generation": 5, "level": 61, "gender": "M", "nature": "Naughty", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "abilities": ["keeneye"], "moves": ["whirlwind", "wingattack", "skyattack", "mirrormove"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 7, "level": 29, "isHidden": false}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, pidgeotmega: { randomBattleMoves: ["roost", "heatwave", "uturn", "hurricane", "defog"], randomDoubleBattleMoves: ["tailwind", "heatwave", "uturn", "hurricane", "protect"], requiredItem: "Pidgeotite", tier: "UU", + doublesTier: "(DUU)", }, rattata: { randomBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn", "wildcharge", "thunderwave", "crunch", "revenge"], randomDoubleBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn", "wildcharge", "superfang", "crunch", "protect"], + encounters: [ + {"generation": 1, "level": 2, "shiny": false}, + {"generation": 2, "level": 2}, + {"generation": 3, "level": 2}, + ], tier: "LC", }, rattataalola: { tier: "LC", }, raticate: { - randomBattleMoves: ["protect", "facade", "flamewheel", "suckerpunch", "uturn", "swordsdance"], - randomDoubleBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn", "crunch", "protect"], + randomBattleMoves: ["protect", "facade", "stompingtantrum", "suckerpunch", "uturn", "swordsdance"], + randomDoubleBattleMoves: ["facade", "stompingtantrum", "suckerpunch", "uturn", "crunch", "protect"], eventPokemon: [ - {"generation": 3, "level": 34, "moves":["refresh", "superfang", "scaryface", "hyperfang"]}, + {"generation": 3, "level": 34, "moves": ["refresh", "superfang", "scaryface", "hyperfang"]}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + {"generation": 2, "level": 6}, + {"generation": 4, "level": 13}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, raticatealola: { - randomBattleMoves: ["swordsdance", "return", "suckerpunch", "crunch", "doubleedge"], + randomBattleMoves: ["swordsdance", "return", "suckerpunch", "knockoff", "doubleedge"], randomDoubleBattleMoves: ["doubleedge", "suckerpunch", "protect", "crunch", "uturn"], - tier: "PU", + encounters: [ + {"generation": 7, "level": 17}, + ], + tier: "(PU)", + doublesTier: "(DUU)", + }, + raticatealolatotem: { + eventPokemon: [ + {"generation": 7, "level": 20, "perfectIVs": 3, "moves": ["bite", "pursuit", "hyperfang", "assurance"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, spearow: { randomBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "quickattack", "pursuit", "drillrun", "featherdance"], randomDoubleBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "quickattack", "drillrun", "protect"], eventPokemon: [ - {"generation": 3, "level": 22, "moves":["batonpass", "falseswipe", "leer", "aerialace"]}, + {"generation": 3, "level": 22, "moves": ["batonpass", "falseswipe", "leer", "aerialace"]}, + ], + encounters: [ + {"generation": 1, "level": 3, "shiny": false}, + {"generation": 2, "level": 2}, + {"generation": 3, "level": 3}, ], tier: "LC", }, fearow: { randomBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "pursuit", "drillrun"], randomDoubleBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "quickattack", "drillrun", "protect"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 19, "shiny": false}, + {"generation": 2, "level": 7}, + {"generation": 4, "level": 7}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, ekans: { randomBattleMoves: ["coil", "gunkshot", "glare", "suckerpunch", "earthquake", "rest"], randomDoubleBattleMoves: ["gunkshot", "seedbomb", "suckerpunch", "aquatail", "earthquake", "rest", "rockslide", "protect"], eventPokemon: [ - {"generation": 3, "level": 14, "gender": "F", "nature": "Docile", "ivs": {"hp": 26, "atk": 28, "def": 6, "spa": 14, "spd": 30, "spe": 11}, "abilities":["shedskin"], "moves":["leer", "wrap", "poisonsting", "bite"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["wrap", "leer", "poisonsting"]}, + {"generation": 3, "level": 14, "gender": "F", "nature": "Docile", "ivs": {"hp": 26, "atk": 28, "def": 6, "spa": 14, "spd": 30, "spe": 11}, "abilities": ["shedskin"], "moves": ["leer", "wrap", "poisonsting", "bite"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["wrap", "leer", "poisonsting"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 6, "shiny": false}, + {"generation": 2, "level": 4}, ], tier: "LC", }, @@ -224,26 +333,31 @@ exports.BattleFormatsData = { randomBattleMoves: ["coil", "gunkshot", "suckerpunch", "aquatail", "earthquake", "rest"], randomDoubleBattleMoves: ["gunkshot", "suckerpunch", "aquatail", "crunch", "earthquake", "rest", "rockslide", "protect"], eventPokemon: [ - {"generation": 3, "level": 33, "moves":["refresh", "sludgebomb", "glare", "bite"]}, + {"generation": 3, "level": 33, "moves": ["refresh", "sludgebomb", "glare", "bite"]}, ], - tier: "PU", + encounters: [ + {"generation": 2, "level": 10}, + {"generation": 4, "level": 10}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, pichu: { randomBattleMoves: ["fakeout", "volttackle", "encore", "irontail", "toxic", "thunderbolt"], randomDoubleBattleMoves: ["fakeout", "volttackle", "encore", "irontail", "protect", "thunderbolt"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "surf"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "wish"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "teeterdance"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "followme"]}, - {"generation": 4, "level": 1, "moves":["volttackle", "thunderbolt", "grassknot", "return"]}, - {"generation": 4, "level": 30, "shiny": true, "gender": "M", "nature": "Jolly", "moves":["charge", "volttackle", "endeavor", "endure"], "pokeball": "cherishball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "surf"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "teeterdance"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "followme"], "pokeball": "pokeball"}, + {"generation": 4, "level": 1, "moves": ["volttackle", "thunderbolt", "grassknot", "return"], "pokeball": "pokeball"}, + {"generation": 4, "level": 30, "shiny": true, "gender": "M", "nature": "Jolly", "moves": ["charge", "volttackle", "endeavor", "endure"], "pokeball": "cherishball"}, ], tier: "LC", }, pichuspikyeared: { eventPokemon: [ - {"generation": 4, "level": 30, "gender": "F", "nature": "Naughty", "moves":["helpinghand", "volttackle", "swagger", "painsplit"]}, + {"generation": 4, "level": 30, "gender": "F", "nature": "Naughty", "moves": ["helpinghand", "volttackle", "swagger", "painsplit"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 4, @@ -253,59 +367,67 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "volttackle", "voltswitch", "grassknot", "hiddenpowerice", "brickbreak", "extremespeed", "encore", "substitute", "knockoff"], randomDoubleBattleMoves: ["fakeout", "thunderbolt", "volttackle", "voltswitch", "grassknot", "hiddenpowerice", "brickbreak", "extremespeed", "encore", "substitute", "knockoff", "protect", "discharge"], eventPokemon: [ - {"generation": 3, "level": 50, "moves":["thunderbolt", "agility", "thunder", "lightscreen"]}, - {"generation": 3, "level": 10, "moves":["thundershock", "growl", "tailwhip", "thunderwave"]}, - {"generation": 3, "level": 10, "moves":["fly", "tailwhip", "growl", "thunderwave"]}, - {"generation": 3, "level": 5, "moves":["surf", "growl", "tailwhip", "thunderwave"]}, - {"generation": 3, "level": 10, "moves":["fly", "growl", "tailwhip", "thunderwave"]}, - {"generation": 3, "level": 10, "moves":["thundershock", "growl", "thunderwave", "surf"]}, - {"generation": 3, "level": 70, "moves":["thunderbolt", "thunder", "lightscreen", "fly"]}, - {"generation": 3, "level": 70, "moves":["thunderbolt", "thunder", "lightscreen", "surf"]}, - {"generation": 3, "level": 70, "moves":["thunderbolt", "thunder", "lightscreen", "agility"]}, - {"generation": 4, "level": 10, "gender": "F", "nature": "Hardy", "moves":["surf", "volttackle", "tailwhip", "thunderwave"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["thundershock", "growl", "tailwhip", "thunderwave"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Hardy", "moves":["surf", "thunderbolt", "lightscreen", "quickattack"], "pokeball": "cherishball"}, - {"generation": 4, "level": 20, "gender": "F", "nature": "Bashful", "moves":["present", "quickattack", "thundershock", "tailwhip"], "pokeball": "cherishball"}, - {"generation": 4, "level": 20, "gender": "M", "nature": "Jolly", "moves":["grassknot", "thunderbolt", "flash", "doubleteam"], "pokeball": "cherishball"}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Modest", "moves":["surf", "thunder", "protect"], "pokeball": "cherishball"}, - {"generation": 4, "level": 20, "gender": "F", "nature": "Bashful", "moves":["quickattack", "thundershock", "tailwhip", "present"], "pokeball": "cherishball"}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Mild", "moves":["surf", "thunder", "protect"], "pokeball": "cherishball"}, - {"generation": 4, "level": 20, "gender": "F", "nature": "Bashful", "moves":["present", "quickattack", "thunderwave", "tailwhip"], "pokeball": "cherishball"}, - {"generation": 4, "level": 30, "gender": "M", "nature": "Naughty", "moves":["lastresort", "present", "thunderbolt", "quickattack"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Relaxed", "moves":["rest", "sleeptalk", "yawn", "snore"], "pokeball": "cherishball"}, - {"generation": 4, "level": 20, "gender": "M", "nature": "Docile", "moves":["present", "quickattack", "thundershock", "tailwhip"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Naughty", "moves":["volttackle", "irontail", "quickattack", "thunderbolt"], "pokeball": "cherishball"}, - {"generation": 4, "level": 20, "gender": "M", "nature": "Bashful", "moves":["present", "quickattack", "thundershock", "tailwhip"], "pokeball": "cherishball"}, - {"generation": 5, "level": 30, "gender": "F", "isHidden": true, "moves":["sing", "teeterdance", "encore", "electroball"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "isHidden": false, "moves":["fly", "irontail", "electroball", "quickattack"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "shiny": 1, "gender": "F", "isHidden": false, "moves":["thunder", "volttackle", "grassknot", "quickattack"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "shiny": 1, "gender": "F", "isHidden": false, "moves":["extremespeed", "thunderbolt", "grassknot", "brickbreak"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "gender": "F", "nature": "Timid", "isHidden": true, "moves":["fly", "thunderbolt", "grassknot", "protect"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["thundershock", "tailwhip", "thunderwave", "headbutt"]}, - {"generation": 5, "level": 100, "gender": "M", "isHidden": true, "moves":["volttackle", "quickattack", "feint", "voltswitch"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "gender": "M", "nature": "Brave", "isHidden": false, "moves":["thunderbolt", "quickattack", "irontail", "electroball"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "growl", "playnice", "quickattack"], "pokeball": "cherishball"}, - {"generation": 6, "level": 22, "isHidden": false, "moves":["quickattack", "electroball", "doubleteam", "megakick"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["thunderbolt", "quickattack", "surf", "holdhands"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "gender": "F", "isHidden": false, "moves":["thunderbolt", "quickattack", "heartstamp", "holdhands"], "pokeball": "healball"}, - {"generation": 6, "level": 36, "shiny": true, "isHidden": true, "moves":["thunder", "substitute", "playnice", "holdhands"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "gender": "F", "isHidden": false, "moves":["playnice", "charm", "nuzzle", "sweetkiss"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "gender": "M", "nature": "Naughty", "isHidden": false, "moves":["thunderbolt", "quickattack", "irontail", "electroball"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "shiny": true, "isHidden": false, "moves":["teeterdance", "playnice", "tailwhip", "nuzzle"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "perfectIVs": 2, "isHidden": true, "moves":["fakeout", "encore", "volttackle", "endeavor"], "pokeball": "cherishball"}, - {"generation": 6, "level": 99, "isHidden": false, "moves":["happyhour", "playnice", "holdhands", "flash"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["fly", "surf", "agility", "celebrate"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["bestow", "holdhands", "return", "playnice"], "pokeball": "healball"}, - {"generation": 7, "level": 10, "nature": "Jolly", "isHidden": false, "moves":["celebrate", "growl", "playnice", "quickattack"], "pokeball": "cherishball"}, - {"generation": 7, "level": 10, "isHidden": false, "moves":["bestow", "holdhands", "return", "playnice"], "pokeball": "cherishball"}, - {"generation": 7, "level": 10, "isHidden": false, "moves":["holdhands", "playnice", "teeterdance", "happyhour"], "pokeball": "cherishball"}, - {"generation": 7, "level": 10, "isHidden": false, "moves":["growl", "quickattack", "thundershock", "happyhour"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "moves": ["thunderbolt", "agility", "thunder", "lightscreen"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "moves": ["thundershock", "growl", "tailwhip", "thunderwave"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "moves": ["fly", "tailwhip", "growl", "thunderwave"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "moves": ["surf", "growl", "tailwhip", "thunderwave"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "moves": ["fly", "growl", "tailwhip", "thunderwave"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "moves": ["thundershock", "growl", "thunderwave", "surf"], "pokeball": "pokeball"}, + {"generation": 3, "level": 70, "moves": ["thunderbolt", "thunder", "lightscreen", "fly"], "pokeball": "pokeball"}, + {"generation": 3, "level": 70, "moves": ["thunderbolt", "thunder", "lightscreen", "surf"], "pokeball": "pokeball"}, + {"generation": 3, "level": 70, "moves": ["thunderbolt", "thunder", "lightscreen", "agility"], "pokeball": "pokeball"}, + {"generation": 4, "level": 10, "gender": "F", "nature": "Hardy", "moves": ["surf", "volttackle", "tailwhip", "thunderwave"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["thundershock", "growl", "tailwhip", "thunderwave"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Hardy", "moves": ["surf", "thunderbolt", "lightscreen", "quickattack"], "pokeball": "cherishball"}, + {"generation": 4, "level": 20, "gender": "F", "nature": "Bashful", "moves": ["present", "quickattack", "thundershock", "tailwhip"], "pokeball": "cherishball"}, + {"generation": 4, "level": 20, "gender": "M", "nature": "Jolly", "moves": ["grassknot", "thunderbolt", "flash", "doubleteam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Modest", "moves": ["surf", "thunder", "protect"], "pokeball": "cherishball"}, + {"generation": 4, "level": 20, "gender": "F", "nature": "Bashful", "moves": ["quickattack", "thundershock", "tailwhip", "present"], "pokeball": "cherishball"}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Mild", "moves": ["surf", "thunder", "protect"], "pokeball": "cherishball"}, + {"generation": 4, "level": 20, "gender": "F", "nature": "Bashful", "moves": ["present", "quickattack", "thunderwave", "tailwhip"], "pokeball": "cherishball"}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Naughty", "moves": ["lastresort", "present", "thunderbolt", "quickattack"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Relaxed", "moves": ["rest", "sleeptalk", "yawn", "snore"], "pokeball": "cherishball"}, + {"generation": 4, "level": 20, "gender": "M", "nature": "Docile", "moves": ["present", "quickattack", "thundershock", "tailwhip"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Naughty", "moves": ["volttackle", "irontail", "quickattack", "thunderbolt"], "pokeball": "cherishball"}, + {"generation": 4, "level": 20, "gender": "M", "nature": "Bashful", "moves": ["present", "quickattack", "thundershock", "tailwhip"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "gender": "F", "isHidden": true, "moves": ["sing", "teeterdance", "encore", "electroball"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "isHidden": false, "moves": ["fly", "irontail", "electroball", "quickattack"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "shiny": 1, "gender": "F", "isHidden": false, "moves": ["thunder", "volttackle", "grassknot", "quickattack"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "gender": "F", "isHidden": false, "moves": ["extremespeed", "thunderbolt", "grassknot", "brickbreak"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "F", "nature": "Timid", "isHidden": true, "moves": ["fly", "thunderbolt", "grassknot", "protect"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["thundershock", "tailwhip", "thunderwave", "headbutt"]}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": true, "moves": ["volttackle", "quickattack", "feint", "voltswitch"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Brave", "isHidden": false, "moves": ["thunderbolt", "quickattack", "irontail", "electroball"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "growl", "playnice", "quickattack"], "pokeball": "cherishball"}, + {"generation": 6, "level": 22, "isHidden": false, "moves": ["quickattack", "electroball", "doubleteam", "megakick"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["thunderbolt", "quickattack", "surf", "holdhands"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "gender": "F", "isHidden": false, "moves": ["thunderbolt", "quickattack", "heartstamp", "holdhands"], "pokeball": "healball"}, + {"generation": 6, "level": 36, "shiny": true, "isHidden": true, "moves": ["thunder", "substitute", "playnice", "holdhands"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "gender": "F", "isHidden": false, "moves": ["playnice", "charm", "nuzzle", "sweetkiss"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "gender": "M", "nature": "Naughty", "isHidden": false, "moves": ["thunderbolt", "quickattack", "irontail", "electroball"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "shiny": true, "isHidden": false, "moves": ["teeterdance", "playnice", "tailwhip", "nuzzle"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "perfectIVs": 2, "isHidden": true, "moves": ["fakeout", "encore", "volttackle", "endeavor"], "pokeball": "cherishball"}, + {"generation": 6, "level": 99, "isHidden": false, "moves": ["happyhour", "playnice", "holdhands", "flash"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["fly", "surf", "agility", "celebrate"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["bestow", "holdhands", "return", "playnice"], "pokeball": "healball"}, + {"generation": 7, "level": 10, "nature": "Jolly", "isHidden": false, "moves": ["celebrate", "growl", "playnice", "quickattack"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["bestow", "holdhands", "return", "playnice"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["holdhands", "playnice", "teeterdance", "happyhour"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["growl", "quickattack", "thundershock", "happyhour"], "pokeball": "cherishball"}, + {"generation": 7, "level": 40, "shiny": 1, "perfectIVs": 3, "isHidden": false, "moves": ["nuzzle", "discharge", "slam", "surf"], "pokeball": "pokeball"}, + {"generation": 7, "level": 5, "isHidden": false, "moves": ["celebrate", "sweetscent", "counter", "refresh"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["fly", "surf", "thunderbolt", "quickattack"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 3, "shiny": false}, + {"generation": 2, "level": 4}, + {"generation": 3, "level": 3}, ], tier: "NFE", }, pikachucosplay: { eventPokemon: [ - {"generation": 6, "level": 20, "moves":["quickattack", "electroball", "thunderwave", "thundershock"]}, + {"generation": 6, "level": 20, "perfectIVs": 3, "moves": ["quickattack", "electroball", "thunderwave", "thundershock"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 6, @@ -313,7 +435,7 @@ exports.BattleFormatsData = { }, pikachurockstar: { eventPokemon: [ - {"generation": 6, "level": 20, "moves":["quickattack", "electroball", "thunderwave", "meteormash"]}, + {"generation": 6, "level": 20, "perfectIVs": 3, "moves": ["quickattack", "electroball", "thunderwave", "meteormash"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 6, @@ -321,7 +443,7 @@ exports.BattleFormatsData = { }, pikachubelle: { eventPokemon: [ - {"generation": 6, "level": 20, "moves":["quickattack", "electroball", "thunderwave", "iciclecrash"]}, + {"generation": 6, "level": 20, "perfectIVs": 3, "moves": ["quickattack", "electroball", "thunderwave", "iciclecrash"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 6, @@ -329,7 +451,7 @@ exports.BattleFormatsData = { }, pikachupopstar: { eventPokemon: [ - {"generation": 6, "level": 20, "moves":["quickattack", "electroball", "thunderwave", "drainingkiss"]}, + {"generation": 6, "level": 20, "perfectIVs": 3, "moves": ["quickattack", "electroball", "thunderwave", "drainingkiss"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 6, @@ -337,7 +459,7 @@ exports.BattleFormatsData = { }, pikachuphd: { eventPokemon: [ - {"generation": 6, "level": 20, "moves":["quickattack", "electroball", "thunderwave", "electricterrain"]}, + {"generation": 6, "level": 20, "perfectIVs": 3, "moves": ["quickattack", "electroball", "thunderwave", "electricterrain"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 6, @@ -345,7 +467,7 @@ exports.BattleFormatsData = { }, pikachulibre: { eventPokemon: [ - {"generation": 6, "level": 20, "moves":["quickattack", "electroball", "thunderwave", "flyingpress"]}, + {"generation": 6, "level": 20, "perfectIVs": 3, "moves": ["quickattack", "electroball", "thunderwave", "flyingpress"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 6, @@ -353,118 +475,169 @@ exports.BattleFormatsData = { }, pikachuoriginal: { eventPokemon: [ - {"generation": 7, "level": 1, "nature": "Hardy", "moves":["thunderbolt", "quickattack", "thunder", "agility"]}, + {"generation": 7, "level": 1, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "thunder", "agility"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pikachuhoenn: { eventPokemon: [ - {"generation": 7, "level": 6, "nature": "Hardy", "moves":["thunderbolt", "quickattack", "thunder", "irontail"]}, + {"generation": 7, "level": 6, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "thunder", "irontail"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pikachusinnoh: { eventPokemon: [ - {"generation": 7, "level": 10, "nature": "Hardy", "moves":["thunderbolt", "quickattack", "irontail", "volttackle"]}, + {"generation": 7, "level": 10, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "irontail", "volttackle"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pikachuunova: { eventPokemon: [ - {"generation": 7, "level": 14, "nature": "Hardy", "moves":["thunderbolt", "quickattack", "irontail", "volttackle"]}, + {"generation": 7, "level": 14, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "irontail", "volttackle"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pikachukalos: { eventPokemon: [ - {"generation": 7, "level": 17, "nature": "Hardy", "moves":["thunderbolt", "quickattack", "irontail", "electroball"]}, + {"generation": 7, "level": 17, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "irontail", "electroball"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pikachualola: { eventPokemon: [ - {"generation": 7, "level": 20, "nature": "Hardy", "moves":["thunderbolt", "quickattack", "irontail", "electroball"]}, + {"generation": 7, "level": 20, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "irontail", "electroball"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", + }, + pikachupartner: { + eventPokemon: [ + {"generation": 7, "level": 21, "shiny": 1, "nature": "Hardy", "moves": ["thunderbolt", "quickattack", "thunder", "irontail"], "pokeball": "pokeball"}, + ], + eventOnly: true, + gen: 7, + tier: "(PU)", + doublesTier: "(DUU)", + }, + pikachustarter: { + eventPokemon: [ + {"generation": 7, "level": 5, "perfectIVs": 6, "moves": ["thundershock", "tailwhip", "growl"], "pokeball": "pokeball"}, + ], + eventOnly: true, + isNonstandard: true, + tier: "Illegal", }, raichu: { randomBattleMoves: ["nastyplot", "encore", "thunderbolt", "grassknot", "hiddenpowerice", "focusblast", "voltswitch"], randomDoubleBattleMoves: ["fakeout", "encore", "thunderbolt", "grassknot", "hiddenpowerice", "focusblast", "voltswitch", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "DUU", }, raichualola: { randomBattleMoves: ["nastyplot", "thunderbolt", "psyshock", "focusblast", "voltswitch", "surf"], randomDoubleBattleMoves: ["thunderbolt", "fakeout", "encore", "psychic", "protect", "voltswitch"], tier: "PU", + doublesTier: "(DUU)", }, sandshrew: { randomBattleMoves: ["earthquake", "rockslide", "swordsdance", "rapidspin", "xscissor", "stealthrock", "toxic", "knockoff"], randomDoubleBattleMoves: ["earthquake", "rockslide", "swordsdance", "xscissor", "knockoff", "protect"], eventPokemon: [ - {"generation": 3, "level": 12, "gender": "M", "nature": "Docile", "ivs": {"hp": 4, "atk": 23, "def": 8, "spa": 31, "spd": 1, "spe": 25}, "moves":["scratch", "defensecurl", "sandattack", "poisonsting"]}, + {"generation": 3, "level": 12, "gender": "M", "nature": "Docile", "ivs": {"hp": 4, "atk": 23, "def": 8, "spa": 31, "spd": 1, "spe": 25}, "moves": ["scratch", "defensecurl", "sandattack", "poisonsting"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 6, "shiny": false}, ], tier: "LC", }, sandshrewalola: { eventPokemon: [ - {"generation": 7, "level": 10, "isHidden": false, "moves":["rapidspin", "iceball", "powdersnow", "bide"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["rapidspin", "iceball", "powdersnow", "bide"], "pokeball": "cherishball"}, ], tier: "LC", }, sandslash: { randomBattleMoves: ["earthquake", "swordsdance", "rapidspin", "toxic", "stealthrock", "knockoff"], randomDoubleBattleMoves: ["earthquake", "rockslide", "stoneedge", "swordsdance", "xscissor", "knockoff", "protect"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 10}, + {"generation": 4, "level": 10}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, sandslashalola: { - randomBattleMoves: ["substitute", "swordsdance", "iciclecrash", "ironhead", "earthquake", "rapidspin"], + randomBattleMoves: ["swordsdance", "iciclecrash", "ironhead", "earthquake", "rapidspin", "stealthrock", "knockoff"], randomDoubleBattleMoves: ["protect", "swordsdance", "iciclecrash", "ironhead", "earthquake", "rockslide"], - tier: "NU", + tier: "PU", + doublesTier: "(DUU)", }, nidoranf: { randomBattleMoves: ["toxicspikes", "crunch", "poisonjab", "honeclaws"], randomDoubleBattleMoves: ["helpinghand", "crunch", "poisonjab", "protect"], + encounters: [ + {"generation": 1, "level": 2}, + ], tier: "LC", }, nidorina: { randomBattleMoves: ["toxicspikes", "crunch", "poisonjab", "honeclaws", "icebeam", "thunderbolt", "shadowclaw"], randomDoubleBattleMoves: ["helpinghand", "crunch", "poisonjab", "protect", "icebeam", "thunderbolt", "shadowclaw"], + encounters: [ + {"generation": 4, "level": 15, "pokeball": "safariball"}, + ], tier: "NFE", }, nidoqueen: { randomBattleMoves: ["toxicspikes", "stealthrock", "fireblast", "icebeam", "earthpower", "sludgewave"], randomDoubleBattleMoves: ["protect", "fireblast", "icebeam", "earthpower", "sludgebomb", "thunderbolt"], eventPokemon: [ - {"generation": 6, "level": 41, "perfectIVs": 2, "isHidden": false, "abilities":["poisonpoint"], "moves":["tailwhip", "doublekick", "poisonsting", "bodyslam"], "pokeball": "cherishball"}, + {"generation": 6, "level": 41, "perfectIVs": 2, "isHidden": false, "abilities": ["poisonpoint"], "moves": ["tailwhip", "doublekick", "poisonsting", "bodyslam"], "pokeball": "cherishball"}, ], - tier: "UU", + tier: "RU", + doublesTier: "(DUU)", }, nidoranm: { randomBattleMoves: ["suckerpunch", "poisonjab", "headsmash", "honeclaws", "shadowclaw"], randomDoubleBattleMoves: ["suckerpunch", "poisonjab", "shadowclaw", "helpinghand", "protect"], + encounters: [ + {"generation": 1, "level": 2}, + ], tier: "LC", }, nidorino: { randomBattleMoves: ["suckerpunch", "poisonjab", "headsmash", "honeclaws", "shadowclaw"], randomDoubleBattleMoves: ["suckerpunch", "poisonjab", "shadowclaw", "helpinghand", "protect"], + encounters: [ + {"generation": 4, "level": 15, "pokeball": "safariball"}, + ], tier: "NFE", }, nidoking: { randomBattleMoves: ["substitute", "fireblast", "icebeam", "earthpower", "sludgewave", "superpower"], randomDoubleBattleMoves: ["protect", "fireblast", "thunderbolt", "icebeam", "earthpower", "sludgebomb", "focusblast"], + eventPokemon: [ + {"generation": 7, "level": 68, "isHidden": false, "abilities": ["poisonpoint"], "moves": ["earthquake", "poisonjab", "throatchop", "aquatail"], "pokeball": "cherishball"}, + ], tier: "UU", + doublesTier: "(DUU)", }, cleffa: { randomBattleMoves: ["reflect", "thunderwave", "lightscreen", "toxic", "fireblast", "encore", "wish", "protect", "aromatherapy"], @@ -474,26 +647,34 @@ exports.BattleFormatsData = { clefairy: { randomBattleMoves: ["healingwish", "reflect", "thunderwave", "lightscreen", "toxic", "fireblast", "encore", "wish", "protect", "aromatherapy", "stealthrock", "moonblast", "knockoff", "moonlight"], randomDoubleBattleMoves: ["reflect", "thunderwave", "lightscreen", "safeguard", "fireblast", "followme", "protect", "moonblast"], - tier: "NFE", + encounters: [ + {"generation": 1, "level": 8}, + ], + tier: "PU", + doublesTier: "NFE", }, clefable: { randomBattleMoves: ["calmmind", "softboiled", "fireblast", "moonblast", "stealthrock", "thunderwave"], randomDoubleBattleMoves: ["reflect", "thunderwave", "lightscreen", "safeguard", "fireblast", "followme", "protect", "moonblast", "dazzlinggleam", "softboiled"], tier: "OU", + doublesTier: "DUU", }, vulpix: { randomBattleMoves: ["flamethrower", "fireblast", "willowisp", "energyball", "substitute", "toxic", "hypnosis", "painsplit"], randomDoubleBattleMoves: ["heatwave", "fireblast", "willowisp", "energyball", "substitute", "protect"], eventPokemon: [ - {"generation": 3, "level": 18, "gender": "F", "nature": "Quirky", "ivs": {"hp": 15, "atk": 6, "def": 3, "spa": 25, "spd": 13, "spe": 22}, "moves":["tailwhip", "roar", "quickattack", "willowisp"]}, - {"generation": 3, "level": 18, "moves":["charm", "heatwave", "ember", "dig"]}, + {"generation": 3, "level": 18, "gender": "F", "nature": "Quirky", "ivs": {"hp": 15, "atk": 6, "def": 3, "spa": 25, "spd": 13, "spe": 22}, "moves": ["tailwhip", "roar", "quickattack", "willowisp"], "pokeball": "pokeball"}, + {"generation": 3, "level": 18, "moves": ["charm", "heatwave", "ember", "dig"]}, + ], + encounters: [ + {"generation": 1, "level": 18}, ], tier: "LC Uber", }, vulpixalola: { eventPokemon: [ - {"generation": 7, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "babydolleyes", "iceshard"], "pokeball": "cherishball"}, - {"generation": 7, "level": 10, "gender": "F", "nature": "Modest", "isHidden": false, "moves":["powdersnow"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "babydolleyes", "iceshard"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "gender": "F", "nature": "Modest", "isHidden": false, "moves": ["powdersnow"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -501,57 +682,85 @@ exports.BattleFormatsData = { randomBattleMoves: ["fireblast", "willowisp", "solarbeam", "nastyplot", "substitute", "hiddenpowerice"], randomDoubleBattleMoves: ["heatwave", "fireblast", "willowisp", "solarbeam", "substitute", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "gender": "M", "nature": "Bold", "ivs": {"def": 31}, "isHidden": true, "moves":["heatwave", "solarbeam", "psyshock", "willowisp"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Bold", "ivs": {"def": 31}, "isHidden": true, "moves": ["heatwave", "solarbeam", "psyshock", "willowisp"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "RU", + doublesTier: "DUU", }, ninetalesalola: { randomBattleMoves: ["nastyplot", "blizzard", "moonblast", "substitute", "hiddenpowerfire", "freezedry", "auroraveil"], randomDoubleBattleMoves: ["blizzard", "moonblast", "protect", "hiddenpowerfire", "freezedry", "auroraveil", "encore"], - tier: "UU", + tier: "UUBL", + doublesTier: "DOU", }, igglybuff: { randomBattleMoves: ["wish", "thunderwave", "reflect", "lightscreen", "healbell", "seismictoss", "counter", "protect"], randomDoubleBattleMoves: ["wish", "thunderwave", "reflect", "lightscreen", "seismictoss", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "abilities":["cutecharm"], "moves":["sing", "charm", "defensecurl", "tickle"]}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["cutecharm"], "moves": ["sing", "charm", "defensecurl", "tickle"], "pokeball": "pokeball"}, ], tier: "LC", }, jigglypuff: { randomBattleMoves: ["wish", "thunderwave", "reflect", "lightscreen", "healbell", "seismictoss", "counter", "stealthrock", "protect", "knockoff", "dazzlinggleam"], randomDoubleBattleMoves: ["wish", "thunderwave", "reflect", "lightscreen", "seismictoss", "protect", "knockoff", "dazzlinggleam"], + encounters: [ + {"generation": 1, "level": 3, "shiny": false}, + {"generation": 2, "level": 3}, + {"generation": 3, "level": 3}, + ], tier: "NFE", }, wigglytuff: { randomBattleMoves: ["wish", "protect", "fireblast", "stealthrock", "dazzlinggleam", "hypervoice"], randomDoubleBattleMoves: ["thunderwave", "reflect", "lightscreen", "protect", "dazzlinggleam", "fireblast", "icebeam", "hypervoice"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 22}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, zubat: { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "whirlwind", "heatwave", "superfang"], randomDoubleBattleMoves: ["bravebird", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "protect", "heatwave", "superfang"], + encounters: [ + {"generation": 1, "level": 6, "shiny": false}, + {"generation": 2, "level": 2}, + ], tier: "LC", }, golbat: { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "defog", "superfang", "uturn"], randomDoubleBattleMoves: ["bravebird", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "protect", "heatwave", "superfang"], + encounters: [ + {"generation": 2, "level": 13}, + {"generation": 3, "level": 5}, + {"generation": 4, "level": 10}, + {"generation": 6, "level": 19, "maxEggMoves": 1}, + {"generation": 7, "level": 20}, + ], tier: "NU", + doublesTier: "NFE", }, crobat: { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "defog", "uturn", "superfang"], randomDoubleBattleMoves: ["bravebird", "taunt", "tailwind", "crosspoison", "uturn", "protect", "superfang"], eventPokemon: [ - {"generation": 4, "level": 30, "gender": "M", "nature": "Timid", "moves":["heatwave", "airslash", "sludgebomb", "superfang"], "pokeball": "cherishball"}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Timid", "moves": ["heatwave", "airslash", "sludgebomb", "superfang"], "pokeball": "cherishball"}, + {"generation": 7, "level": 64, "gender": "M", "isHidden": false, "moves": ["airslash", "toxic", "darkpulse", "sludgebomb"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "(DUU)", }, oddish: { randomBattleMoves: ["gigadrain", "sludgebomb", "synthesis", "sleeppowder", "stunspore", "toxic", "hiddenpowerfire", "leechseed", "dazzlinggleam", "sunnyday"], randomDoubleBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "stunspore", "protect", "hiddenpowerfire", "leechseed", "dazzlinggleam", "sunnyday"], eventPokemon: [ - {"generation": 3, "level": 26, "gender": "M", "nature": "Quirky", "ivs": {"hp": 23, "atk": 24, "def": 20, "spa": 21, "spd": 9, "spe": 16}, "moves":["poisonpowder", "stunspore", "sleeppowder", "acid"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["absorb", "leechseed"]}, + {"generation": 3, "level": 26, "gender": "M", "nature": "Quirky", "ivs": {"hp": 23, "atk": 24, "def": 20, "spa": 21, "spd": 9, "spe": 16}, "moves": ["poisonpowder", "stunspore", "sleeppowder", "acid"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["absorb", "leechseed"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 12, "shiny": false}, ], tier: "LC", }, @@ -559,82 +768,122 @@ exports.BattleFormatsData = { randomBattleMoves: ["gigadrain", "sludgebomb", "synthesis", "sleeppowder", "stunspore", "toxic", "hiddenpowerfire", "leechseed", "dazzlinggleam", "sunnyday"], randomDoubleBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "stunspore", "protect", "hiddenpowerfire", "leechseed", "dazzlinggleam", "sunnyday"], eventPokemon: [ - {"generation": 3, "level": 50, "moves":["sleeppowder", "acid", "moonlight", "petaldance"]}, + {"generation": 3, "level": 50, "moves": ["sleeppowder", "acid", "moonlight", "petaldance"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 2, "level": 14}, + {"generation": 4, "level": 14}, + {"generation": 6, "level": 18, "maxEggMoves": 1}, ], tier: "NFE", }, vileplume: { - randomBattleMoves: ["gigadrain", "sludgebomb", "synthesis", "sleeppowder", "hiddenpowerfire", "aromatherapy"], + randomBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "hiddenpowerfire", "aromatherapy", "strengthsap"], randomDoubleBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "stunspore", "protect", "hiddenpowerfire", "moonblast"], tier: "NU", + doublesTier: "(DUU)", }, bellossom: { randomBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerfire", "hiddenpowerrock", "quiverdance", "moonblast"], randomDoubleBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "stunspore", "protect", "hiddenpowerfire", "moonblast", "sunnyday", "solarbeam"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, paras: { randomBattleMoves: ["spore", "stunspore", "xscissor", "seedbomb", "synthesis", "leechseed", "aromatherapy", "knockoff"], randomDoubleBattleMoves: ["spore", "stunspore", "xscissor", "seedbomb", "ragepowder", "leechseed", "protect", "knockoff", "wideguard"], eventPokemon: [ - {"generation": 3, "level": 28, "abilities":["effectspore"], "moves":["refresh", "spore", "slash", "falseswipe"]}, + {"generation": 3, "level": 28, "abilities": ["effectspore"], "moves": ["refresh", "spore", "slash", "falseswipe"]}, + ], + encounters: [ + {"generation": 1, "level": 8, "shiny": false}, ], tier: "LC", }, parasect: { randomBattleMoves: ["spore", "substitute", "leechlife", "seedbomb", "leechseed", "knockoff"], randomDoubleBattleMoves: ["spore", "stunspore", "leechlife", "seedbomb", "ragepowder", "leechseed", "protect", "knockoff", "wideguard"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 13}, + {"generation": 2, "level": 5}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, venonat: { randomBattleMoves: ["sleeppowder", "morningsun", "toxicspikes", "sludgebomb", "signalbeam", "stunspore", "psychic"], randomDoubleBattleMoves: ["sleeppowder", "morningsun", "ragepowder", "sludgebomb", "signalbeam", "stunspore", "psychic", "protect"], + encounters: [ + {"generation": 1, "level": 13, "shiny": false}, + ], tier: "LC", }, venomoth: { - randomBattleMoves: ["sleeppowder", "quiverdance", "batonpass", "bugbuzz", "sludgebomb", "substitute"], + randomBattleMoves: ["sleeppowder", "quiverdance", "bugbuzz", "sludgebomb", "substitute"], randomDoubleBattleMoves: ["sleeppowder", "roost", "ragepowder", "quiverdance", "protect", "bugbuzz", "sludgebomb", "gigadrain", "substitute", "psychic"], eventPokemon: [ - {"generation": 3, "level": 32, "abilities":["shielddust"], "moves":["refresh", "silverwind", "substitute", "psychic"]}, + {"generation": 3, "level": 32, "abilities": ["shielddust"], "moves": ["refresh", "silverwind", "substitute", "psychic"]}, + ], + encounters: [ + {"generation": 1, "level": 30, "shiny": false}, + {"generation": 2, "level": 10}, + {"generation": 4, "level": 8}, + {"generation": 6, "level": 30}, ], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, diglett: { randomBattleMoves: ["earthquake", "rockslide", "stealthrock", "suckerpunch", "reversal", "substitute", "shadowclaw"], randomDoubleBattleMoves: ["earthquake", "rockslide", "protect", "suckerpunch", "shadowclaw"], + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + {"generation": 2, "level": 2}, + ], tier: "LC", }, diglettalola: { eventPokemon: [ - {"generation": 7, "level": 10, "isHidden": false, "abilities":["tanglinghair"], "moves":["mudslap", "astonish", "growl", "metalclaw"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "abilities": ["tanglinghair"], "moves": ["mudslap", "astonish", "growl", "metalclaw"], "pokeball": "cherishball"}, ], tier: "LC", }, dugtrio: { - randomBattleMoves: ["earthquake", "stoneedge", "stealthrock", "suckerpunch", "reversal", "substitute"], + randomBattleMoves: ["earthquake", "stoneedge", "stealthrock", "suckerpunch", "reversal", "substitute", "memento"], randomDoubleBattleMoves: ["earthquake", "rockslide", "protect", "suckerpunch", "stoneedge"], eventPokemon: [ - {"generation": 3, "level": 40, "moves":["charm", "earthquake", "sandstorm", "triattack"]}, + {"generation": 3, "level": 40, "moves": ["charm", "earthquake", "sandstorm", "triattack"]}, ], - tier: "OU", + encounters: [ + {"generation": 1, "level": 15}, + {"generation": 2, "level": 5}, + {"generation": 4, "level": 19}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, dugtrioalola: { - randomBattleMoves: ["earthquake", "ironhead", "substitute", "reversal", "stoneedge", "suckerpunch"], + randomBattleMoves: ["earthquake", "ironhead", "substitute", "reversal", "stoneedge", "suckerpunch", "stealthrock"], randomDoubleBattleMoves: ["earthquake", "ironhead", "protect", "rockslide", "stoneedge", "suckerpunch"], tier: "PU", + doublesTier: "(DUU)", }, meowth: { randomBattleMoves: ["fakeout", "uturn", "thief", "taunt", "return", "hypnosis"], randomDoubleBattleMoves: ["fakeout", "uturn", "nightslash", "taunt", "return", "hypnosis", "feint", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["scratch", "growl", "petaldance"]}, - {"generation": 3, "level": 5, "moves":["scratch", "growl"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "growl", "bite"]}, - {"generation": 3, "level": 22, "moves":["sing", "slash", "payday", "bite"]}, - {"generation": 4, "level": 21, "gender": "F", "nature": "Jolly", "abilities":["pickup"], "moves":["bite", "fakeout", "furyswipes", "screech"], "pokeball": "cherishball"}, - {"generation": 4, "level": 10, "gender": "M", "nature": "Jolly", "abilities":["pickup"], "moves":["fakeout", "payday", "assist", "scratch"], "pokeball": "cherishball"}, - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities":["pickup"], "moves":["furyswipes", "sing", "nastyplot", "snatch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 20, "isHidden": false, "abilities":["pickup"], "moves":["happyhour", "screech", "bite", "fakeout"], "pokeball": "cherishball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["scratch", "growl", "petaldance"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "moves": ["scratch", "growl"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "growl", "bite"], "pokeball": "pokeball"}, + {"generation": 3, "level": 22, "moves": ["sing", "slash", "payday", "bite"]}, + {"generation": 4, "level": 21, "gender": "F", "nature": "Jolly", "abilities": ["pickup"], "moves": ["bite", "fakeout", "furyswipes", "screech"], "pokeball": "cherishball"}, + {"generation": 4, "level": 10, "gender": "M", "nature": "Jolly", "abilities": ["pickup"], "moves": ["fakeout", "payday", "assist", "scratch"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities": ["pickup"], "moves": ["furyswipes", "sing", "nastyplot", "snatch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 20, "isHidden": false, "abilities": ["pickup"], "moves": ["happyhour", "screech", "bite", "fakeout"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 10}, + {"generation": 3, "level": 3, "shiny": false, "gender": "M", "nature": "Naive", "ivs": {"hp": 4, "atk": 5, "def": 4, "spa": 5, "spd": 4, "spe": 4}, "abilities": ["pickup"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -644,19 +893,28 @@ exports.BattleFormatsData = { persian: { randomBattleMoves: ["fakeout", "uturn", "taunt", "return", "knockoff"], randomDoubleBattleMoves: ["fakeout", "uturn", "knockoff", "taunt", "return", "hypnosis", "feint", "protect"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 18}, + {"generation": 4, "level": 19}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, persianalola: { randomBattleMoves: ["nastyplot", "darkpulse", "powergem", "hypnosis", "hiddenpowerfighting"], - randomDoublesBattleMoves: ["fakeout", "foulplay", "darkpulse", "powergem", "snarl", "hiddenpowerfighting", "partingshot", "protect"], + randomDoubleBattleMoves: ["fakeout", "foulplay", "darkpulse", "powergem", "snarl", "hiddenpowerfighting", "partingshot", "protect"], tier: "PU", + doublesTier: "(DUU)", }, psyduck: { randomBattleMoves: ["hydropump", "scald", "icebeam", "hiddenpowergrass", "crosschop", "encore", "psychic", "signalbeam"], randomDoubleBattleMoves: ["hydropump", "scald", "icebeam", "hiddenpowergrass", "crosschop", "encore", "psychic", "signalbeam", "surf", "icywind", "protect"], eventPokemon: [ - {"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"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["watersport", "scratch", "tailwhip", "mudsport"]}, + {"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"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["watersport", "scratch", "tailwhip", "mudsport"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 15}, ], tier: "LC", }, @@ -664,30 +922,50 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "scald", "icebeam", "psyshock", "encore", "calmmind", "substitute"], randomDoubleBattleMoves: ["hydropump", "scald", "icebeam", "hiddenpowergrass", "focusblast", "encore", "psychic", "icywind", "protect"], eventPokemon: [ - {"generation": 3, "level": 33, "moves":["charm", "waterfall", "psychup", "brickbreak"]}, + {"generation": 3, "level": 33, "moves": ["charm", "waterfall", "psychup", "brickbreak"]}, + {"generation": 7, "level": 50, "gender": "M", "nature": "Timid", "ivs": {"hp": 31, "atk": 30, "def": 31, "spa": 31, "spd": 31, "spe": 31}, "isHidden": true, "moves": ["hydropump", "scald", "encore", "protect"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + {"generation": 2, "level": 10}, + {"generation": 3, "level": 25, "pokeball": "safariball"}, + {"generation": 4, "level": 10}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, mankey: { randomBattleMoves: ["closecombat", "uturn", "icepunch", "rockslide", "punishment", "earthquake", "poisonjab"], randomDoubleBattleMoves: ["closecombat", "uturn", "icepunch", "rockslide", "punishment", "earthquake", "poisonjab", "protect"], + encounters: [ + {"generation": 1, "level": 3, "shiny": false}, + {"generation": 3, "level": 2}, + ], tier: "LC", }, primeape: { randomBattleMoves: ["closecombat", "uturn", "icepunch", "stoneedge", "encore", "earthquake", "gunkshot"], randomDoubleBattleMoves: ["closecombat", "uturn", "icepunch", "rockslide", "punishment", "earthquake", "poisonjab", "protect", "taunt", "stoneedge"], eventPokemon: [ - {"generation": 3, "level": 34, "abilities":["vitalspirit"], "moves":["helpinghand", "crosschop", "focusenergy", "reversal"]}, + {"generation": 3, "level": 34, "abilities": ["vitalspirit"], "moves": ["helpinghand", "crosschop", "focusenergy", "reversal"]}, + ], + encounters: [ + {"generation": 2, "level": 15}, + {"generation": 4, "level": 15}, ], tier: "PU", + doublesTier: "(DUU)", }, growlithe: { randomBattleMoves: ["flareblitz", "wildcharge", "hiddenpowergrass", "closecombat", "morningsun", "willowisp", "toxic", "flamethrower"], randomDoubleBattleMoves: ["flareblitz", "wildcharge", "hiddenpowergrass", "closecombat", "willowisp", "snarl", "heatwave", "helpinghand", "protect"], eventPokemon: [ - {"generation": 3, "level": 32, "gender": "F", "nature": "Quiet", "ivs": {"hp": 11, "atk": 24, "def": 28, "spa": 1, "spd": 20, "spe": 2}, "abilities":["intimidate"], "moves":["leer", "odorsleuth", "takedown", "flamewheel"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["bite", "roar", "ember"]}, - {"generation": 3, "level": 28, "moves":["charm", "flamethrower", "bite", "takedown"]}, + {"generation": 3, "level": 32, "gender": "F", "nature": "Quiet", "ivs": {"hp": 11, "atk": 24, "def": 28, "spa": 1, "spd": 20, "spe": 2}, "abilities": ["intimidate"], "moves": ["leer", "odorsleuth", "takedown", "flamewheel"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["bite", "roar", "ember"], "pokeball": "pokeball"}, + {"generation": 3, "level": 28, "moves": ["charm", "flamethrower", "bite", "takedown"]}, + ], + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, ], tier: "LC", }, @@ -695,74 +973,106 @@ exports.BattleFormatsData = { randomBattleMoves: ["flareblitz", "wildcharge", "extremespeed", "closecombat", "morningsun", "willowisp", "toxic", "crunch", "roar"], randomDoubleBattleMoves: ["flareblitz", "wildcharge", "closecombat", "willowisp", "snarl", "protect", "extremespeed"], eventPokemon: [ - {"generation": 4, "level": 50, "abilities":["intimidate"], "moves":["flareblitz", "thunderfang", "crunch", "extremespeed"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "isHidden": false, "abilities":["intimidate"], "moves":["flareblitz", "extremespeed", "willowisp", "protect"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "abilities": ["intimidate"], "moves": ["flareblitz", "thunderfang", "crunch", "extremespeed"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "isHidden": false, "abilities": ["intimidate"], "moves": ["flareblitz", "extremespeed", "willowisp", "protect"], "pokeball": "cherishball"}, ], - tier: "UU", + tier: "RU", + doublesTier: "DUU", }, poliwag: { randomBattleMoves: ["hydropump", "icebeam", "encore", "bellydrum", "hypnosis", "waterfall", "return"], randomDoubleBattleMoves: ["hydropump", "icebeam", "encore", "icywind", "hypnosis", "waterfall", "return", "protect", "helpinghand"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["bubble", "sweetkiss"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["bubble", "sweetkiss"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, + {"generation": 2, "level": 3}, ], tier: "LC", }, poliwhirl: { randomBattleMoves: ["hydropump", "icebeam", "encore", "bellydrum", "hypnosis", "waterfall", "return", "earthquake"], randomDoubleBattleMoves: ["hydropump", "icebeam", "encore", "icywind", "hypnosis", "waterfall", "return", "protect", "helpinghand", "earthquake"], + 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, "isHidden": false, "gender": "F", "nature": "Naughty", "abilities": ["damp"], "pokeball": "pokeball"}, + ], tier: "NFE", }, poliwrath: { randomBattleMoves: ["hydropump", "focusblast", "icebeam", "rest", "sleeptalk", "scald", "circlethrow", "raindance"], randomDoubleBattleMoves: ["bellydrum", "encore", "waterfall", "protect", "icepunch", "earthquake", "brickbreak", "rockslide"], eventPokemon: [ - {"generation": 3, "level": 42, "moves":["helpinghand", "hydropump", "raindance", "brickbreak"]}, + {"generation": 3, "level": 42, "moves": ["helpinghand", "hydropump", "raindance", "brickbreak"]}, ], tier: "PU", + doublesTier: "(DUU)", }, politoed: { randomBattleMoves: ["scald", "toxic", "encore", "perishsong", "protect", "hypnosis", "rest"], randomDoubleBattleMoves: ["scald", "hypnosis", "icywind", "encore", "helpinghand", "protect", "icebeam", "focusblast", "hydropump", "hiddenpowergrass"], eventPokemon: [ - {"generation": 5, "level": 50, "gender": "M", "nature": "Calm", "ivs": {"hp": 31, "atk": 13, "def": 31, "spa": 5, "spd": 31, "spe": 5}, "isHidden": true, "moves":["scald", "icebeam", "perishsong", "protect"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Calm", "ivs": {"hp": 31, "atk": 13, "def": 31, "spa": 5, "spd": 31, "spe": 5}, "isHidden": true, "moves": ["scald", "icebeam", "perishsong", "protect"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "DOU", }, abra: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], + encounters: [ + {"generation": 1, "level": 6}, + ], tier: "LC", }, kadabra: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], + encounters: [ + {"generation": 2, "level": 15}, + {"generation": 4, "level": 15}, + {"generation": 7, "level": 11, "isHidden": false, "pokeball": "pokeball"}, + ], tier: "NFE", }, alakazam: { randomBattleMoves: ["psyshock", "psychic", "focusblast", "shadowball", "hiddenpowerice", "hiddenpowerfire"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "focusblast", "shadowball", "encore", "substitute", "dazzlinggleam"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["futuresight", "calmmind", "psychic", "trick"]}, + {"generation": 3, "level": 70, "moves": ["futuresight", "calmmind", "psychic", "trick"], "pokeball": "pokeball"}, ], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, alakazammega: { randomBattleMoves: ["calmmind", "psyshock", "focusblast", "shadowball", "encore", "substitute"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "focusblast", "shadowball", "encore", "substitute", "dazzlinggleam"], requiredItem: "Alakazite", tier: "OU", + doublesTier: "(DUU)", }, machop: { randomBattleMoves: ["dynamicpunch", "bulkup", "icepunch", "rockslide", "bulletpunch", "knockoff"], randomDoubleBattleMoves: ["dynamicpunch", "protect", "icepunch", "rockslide", "bulletpunch", "knockoff"], + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + ], tier: "LC", }, machoke: { randomBattleMoves: ["dynamicpunch", "bulkup", "icepunch", "rockslide", "bulletpunch", "poweruppunch", "knockoff"], randomDoubleBattleMoves: ["dynamicpunch", "protect", "icepunch", "rockslide", "bulletpunch", "knockoff"], eventPokemon: [ - {"generation": 5, "level": 30, "isHidden": false, "moves":["lowsweep", "foresight", "seismictoss", "revenge"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["lowsweep", "foresight", "seismictoss", "revenge"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 2, "level": 14}, + {"generation": 4, "level": 14}, ], tier: "NFE", }, @@ -770,47 +1080,77 @@ exports.BattleFormatsData = { randomBattleMoves: ["dynamicpunch", "icepunch", "stoneedge", "bulletpunch", "knockoff", "substitute"], randomDoubleBattleMoves: ["dynamicpunch", "protect", "icepunch", "stoneedge", "rockslide", "bulletpunch", "knockoff", "wideguard"], eventPokemon: [ - {"generation": 3, "level": 38, "gender": "M", "nature": "Quiet", "ivs": {"hp": 9, "atk": 23, "def": 25, "spa": 20, "spd": 15, "spe": 10}, "abilities":["guts"], "moves":["seismictoss", "foresight", "revenge", "vitalthrow"]}, - {"generation": 6, "level": 50, "shiny": true, "gender": "M", "nature": "Adamant", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31}, "isHidden": false, "abilities":["noguard"], "moves":["dynamicpunch", "stoneedge", "wideguard", "knockoff"], "pokeball": "cherishball"}, - {"generation": 7, "level": 34, "gender": "F", "nature": "Brave", "ivs": {"atk": 31}, "isHidden": false, "abilities":["guts"], "moves":["strength", "bulkup", "quickguard", "doubleedge"], "pokeball": "cherishball"}, + {"generation": 3, "level": 38, "gender": "M", "nature": "Quiet", "ivs": {"hp": 9, "atk": 23, "def": 25, "spa": 20, "spd": 15, "spe": 10}, "abilities": ["guts"], "moves": ["seismictoss", "foresight", "revenge", "vitalthrow"], "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}, "isHidden": false, "abilities": ["noguard"], "moves": ["dynamicpunch", "stoneedge", "wideguard", "knockoff"], "pokeball": "cherishball"}, + {"generation": 6, "level": 39, "gender": "M", "nature": "Hardy", "isHidden": false, "abilities": ["noguard"], "moves": ["seismictoss", "dynamicpunch", "dig", "focusenergy"], "pokeball": "cherishball"}, + {"generation": 7, "level": 34, "gender": "F", "nature": "Brave", "ivs": {"atk": 31}, "isHidden": false, "abilities": ["guts"], "moves": ["strength", "bulkup", "quickguard", "doubleedge"], "pokeball": "cherishball"}, ], - tier: "NU", + encounters: [ + {"generation": 1, "level": 16}, + {"generation": 2, "level": 5}, + ], + tier: "RU", + doublesTier: "(DUU)", }, bellsprout: { - randomBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb"], - randomDoubleBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "protect"], + randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb"], + randomDoubleBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["vinewhip", "teeterdance"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["vinewhip", "growth"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["vinewhip", "teeterdance"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["vinewhip", "growth"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 12, "shiny": false}, + {"generation": 2, "level": 3}, ], tier: "LC", }, weepinbell: { - randomBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "knockoff"], - randomDoubleBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "protect", "knockoff"], + randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "knockoff"], + randomDoubleBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "knockoff", "protect"], eventPokemon: [ - {"generation": 3, "level": 32, "moves":["morningsun", "magicalleaf", "sludgebomb", "sweetscent"]}, + {"generation": 3, "level": 32, "moves": ["morningsun", "magicalleaf", "sludgebomb", "sweetscent"]}, + ], + encounters: [ + {"generation": 2, "level": 12}, + {"generation": 4, "level": 10}, ], tier: "NFE", }, victreebel: { - randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "knockoff", "swordsdance"], - randomDoubleBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "protect", "knockoff"], - tier: "PU", + randomBattleMoves: ["sleeppowder", "sludgebomb", "gigadrain", "hiddenpowerfire", "suckerpunch", "swordsdance", "powerwhip", "knockoff"], + randomDoubleBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "knockoff", "protect"], + tier: "(PU)", + doublesTier: "(DUU)", }, tentacool: { randomBattleMoves: ["toxicspikes", "rapidspin", "scald", "sludgebomb", "icebeam", "knockoff", "gigadrain", "toxic", "dazzlinggleam"], randomDoubleBattleMoves: ["muddywater", "scald", "sludgebomb", "icebeam", "knockoff", "gigadrain", "protect", "dazzlinggleam"], + encounters: [ + {"generation": 1, "level": 5}, + ], tier: "LC", }, tentacruel: { randomBattleMoves: ["toxicspikes", "rapidspin", "scald", "sludgebomb", "acidspray", "knockoff"], randomDoubleBattleMoves: ["muddywater", "scald", "sludgebomb", "acidspray", "icebeam", "knockoff", "gigadrain", "protect", "dazzlinggleam"], + encounters: [ + {"generation": 1, "level": 20}, + {"generation": 2, "level": 20}, + {"generation": 3, "level": 20}, + {"generation": 4, "level": 15}, + {"generation": 6, "level": 21, "maxEggMoves": 1}, + ], tier: "UU", + doublesTier: "(DUU)", }, geodude: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "rockblast"], randomDoubleBattleMoves: ["rockslide", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "protect"], + encounters: [ + {"generation": 1, "level": 7, "shiny": false}, + {"generation": 2, "level": 2}, + ], tier: "LC", }, geodudealola: { @@ -819,6 +1159,11 @@ exports.BattleFormatsData = { graveler: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "rockblast"], randomDoubleBattleMoves: ["rockslide", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "protect"], + encounters: [ + {"generation": 2, "level": 23}, + {"generation": 4, "level": 16, "pokeball": "safariball"}, + {"generation": 6, "level": 24, "isHidden": false}, + ], tier: "NFE", }, graveleralola: { @@ -827,33 +1172,46 @@ exports.BattleFormatsData = { golem: { randomBattleMoves: ["stealthrock", "earthquake", "explosion", "suckerpunch", "toxic", "rockblast"], randomDoubleBattleMoves: ["rockslide", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, golemalola: { - randomBattleMoves: ["stealthrock", "stoneedge", "thunderpunch", "earthquake", "toxic"], + randomBattleMoves: ["stealthrock", "stoneedge", "return", "thunderpunch", "earthquake", "toxic"], randomDoubleBattleMoves: ["doubleedge", "stoneedge", "rockslide", "earthquake", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, ponyta: { randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "hypnosis", "flamecharge"], randomDoubleBattleMoves: ["flareblitz", "wildcharge", "protect", "hypnosis", "flamecharge"], + encounters: [ + {"generation": 1, "level": 28, "shiny": false}, + ], tier: "LC", }, rapidash: { - randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "drillrun", "willowisp"], + randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "highhorsepower", "willowisp"], randomDoubleBattleMoves: ["flareblitz", "wildcharge", "protect", "hypnosis", "flamecharge", "megahorn", "drillrun", "willowisp"], eventPokemon: [ - {"generation": 3, "level": 40, "moves":["batonpass", "solarbeam", "sunnyday", "flamethrower"]}, + {"generation": 3, "level": 40, "moves": ["batonpass", "solarbeam", "sunnyday", "flamethrower"]}, ], - tier: "PU", + encounters: [ + {"generation": 2, "level": 14, "gender": "M", "shiny": false}, + {"generation": 3, "level": 37}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, slowpoke: { randomBattleMoves: ["scald", "aquatail", "zenheadbutt", "thunderwave", "toxic", "slackoff", "trickroom"], randomDoubleBattleMoves: ["scald", "aquatail", "zenheadbutt", "thunderwave", "slackoff", "trickroom", "protect"], eventPokemon: [ - {"generation": 3, "level": 31, "gender": "F", "nature": "Naive", "ivs": {"hp": 17, "atk": 11, "def": 19, "spa": 20, "spd": 5, "spe": 10}, "abilities":["oblivious"], "moves":["watergun", "confusion", "disable", "headbutt"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["curse", "yawn", "tackle", "growl"]}, - {"generation": 5, "level": 30, "isHidden": false, "moves":["confusion", "disable", "headbutt", "waterpulse"], "pokeball": "cherishball"}, + {"generation": 3, "level": 31, "gender": "F", "nature": "Naive", "ivs": {"hp": 17, "atk": 11, "def": 19, "spa": 20, "spd": 5, "spe": 10}, "abilities": ["oblivious"], "moves": ["watergun", "confusion", "disable", "headbutt"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["curse", "yawn", "tackle", "growl"], "pokeball": "pokeball"}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["confusion", "disable", "headbutt", "waterpulse"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 15}, ], tier: "LC", }, @@ -861,170 +1219,258 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "toxic", "thunderwave", "psyshock", "fireblast", "icebeam", "slackoff"], randomDoubleBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "slackoff", "trickroom", "protect", "psyshock"], eventPokemon: [ - {"generation": 6, "level": 100, "nature": "Quiet", "isHidden": false, "abilities":["oblivious"], "moves":["scald", "trickroom", "slackoff", "irontail"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "nature": "Quiet", "isHidden": false, "abilities": ["oblivious"], "moves": ["scald", "trickroom", "slackoff", "irontail"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + {"generation": 1, "level": 23}, + {"generation": 2, "level": 20}, + {"generation": 3, "level": 32}, + {"generation": 4, "level": 15}, + {"generation": 5, "level": 35, "isHidden": false}, + {"generation": 7, "level": 15}, ], tier: "NU", + doublesTier: "(DUU)", }, slowbromega: { randomBattleMoves: ["calmmind", "scald", "psyshock", "slackoff", "fireblast", "psychic", "icebeam"], randomDoubleBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "thunderwave", "slackoff", "trickroom", "protect", "psyshock"], requiredItem: "Slowbronite", - tier: "BL", + tier: "RUBL", + doublesTier: "(DUU)", }, slowking: { randomBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "toxic", "slackoff", "trickroom", "nastyplot", "dragontail", "psyshock"], randomDoubleBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "slackoff", "trickroom", "protect", "psyshock"], tier: "NU", + doublesTier: "(DUU)", }, magnemite: { randomBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch"], randomDoubleBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "protect", "electroweb", "discharge"], + encounters: [ + {"generation": 1, "level": 16, "shiny": false}, + ], tier: "LC", }, magneton: { randomBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "chargebeam", "hiddenpowerfire"], randomDoubleBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "protect", "electroweb", "discharge", "hiddenpowerfire"], eventPokemon: [ - {"generation": 3, "level": 30, "moves":["refresh", "doubleedge", "raindance", "thunder"]}, + {"generation": 3, "level": 30, "moves": ["refresh", "doubleedge", "raindance", "thunder"]}, + ], + encounters: [ + {"generation": 2, "level": 5, "shiny": false}, + {"generation": 3, "level": 26}, + {"generation": 4, "level": 17, "pokeball": "safariball"}, ], tier: "UU", + doublesTier: "NFE", }, magnezone: { randomBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "hiddenpowerfire"], randomDoubleBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "protect", "electroweb", "discharge", "hiddenpowerfire"], tier: "OU", + doublesTier: "(DUU)", }, farfetchd: { - randomBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "roost", "nightslash"], - randomDoubleBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "protect", "nightslash"], + randomBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "roost", "knockoff"], + randomDoubleBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "protect", "knockoff"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["yawn", "wish"]}, - {"generation": 3, "level": 36, "moves":["batonpass", "slash", "swordsdance", "aerialace"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["yawn", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 36, "moves": ["batonpass", "slash", "swordsdance", "aerialace"]}, ], - tier: "PU", + 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": ["keeneye"], "pokeball": "pokeball"}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, doduo: { randomBattleMoves: ["bravebird", "return", "doubleedge", "roost", "quickattack", "pursuit"], randomDoubleBattleMoves: ["bravebird", "return", "doubleedge", "quickattack", "protect"], + encounters: [ + {"generation": 1, "level": 18, "shiny": false}, + {"generation": 2, "level": 4}, + ], tier: "LC", }, dodrio: { randomBattleMoves: ["bravebird", "return", "swordsdance", "roost", "quickattack", "knockoff", "jumpkick"], randomDoubleBattleMoves: ["bravebird", "return", "doubleedge", "quickattack", "knockoff", "protect"], eventPokemon: [ - {"generation": 3, "level": 34, "moves":["batonpass", "drillpeck", "agility", "triattack"]}, + {"generation": 3, "level": 34, "moves": ["batonpass", "drillpeck", "agility", "triattack"]}, ], - tier: "NU", + encounters: [ + {"generation": 1, "level": 29, "shiny": false}, + {"generation": 2, "level": 10, "gender": "F", "shiny": false}, + {"generation": 2, "level": 30}, + {"generation": 3, "level": 29, "pokeball": "safariball"}, + {"generation": 4, "level": 15, "gender": "F", "shiny": false, "nature": "Impish", "ivs": {"hp": 20, "atk": 20, "def": 20, "spa": 15, "spd": 15, "spe": 15}, "abilities": ["runaway"], "pokeball": "pokeball"}, + ], + tier: "PU", + doublesTier: "(DUU)", }, seel: { randomBattleMoves: ["surf", "icebeam", "aquajet", "protect", "rest", "toxic", "drillrun"], randomDoubleBattleMoves: ["surf", "icebeam", "aquajet", "protect", "rest", "toxic", "fakeout", "drillrun", "icywind"], eventPokemon: [ - {"generation": 3, "level": 23, "abilities":["thickfat"], "moves":["helpinghand", "surf", "safeguard", "icebeam"]}, + {"generation": 3, "level": 23, "abilities": ["thickfat"], "moves": ["helpinghand", "surf", "safeguard", "icebeam"]}, + ], + encounters: [ + {"generation": 1, "level": 22, "shiny": false}, ], tier: "LC", }, dewgong: { randomBattleMoves: ["surf", "icebeam", "perishsong", "encore", "toxic", "protect"], randomDoubleBattleMoves: ["surf", "icebeam", "protect", "perishsong", "fakeout", "encore", "toxic"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 15}, + {"generation": 2, "level": 5}, + {"generation": 3, "level": 32}, + {"generation": 5, "level": 30, "isHidden": false}, + {"generation": 6, "level": 30, "maxEggMoves": 1}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, grimer: { randomBattleMoves: ["curse", "gunkshot", "poisonjab", "shadowsneak", "painsplit", "icepunch", "firepunch", "memento"], randomDoubleBattleMoves: ["gunkshot", "poisonjab", "shadowsneak", "protect", "icepunch", "firepunch"], eventPokemon: [ - {"generation": 3, "level": 23, "moves":["helpinghand", "sludgebomb", "shadowpunch", "minimize"]}, + {"generation": 3, "level": 23, "moves": ["helpinghand", "sludgebomb", "shadowpunch", "minimize"]}, + ], + encounters: [ + {"generation": 1, "level": 23, "shiny": false}, ], tier: "LC", }, grimeralola: { eventPokemon: [ - {"generation": 7, "level": 10, "isHidden": false, "abilities":["poisontouch"], "moves":["bite", "harden", "poisongas", "pound"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "abilities": ["poisontouch"], "moves": ["bite", "harden", "poisongas", "pound"], "pokeball": "cherishball"}, ], tier: "LC", }, muk: { randomBattleMoves: ["curse", "gunkshot", "poisonjab", "shadowsneak", "icepunch", "firepunch", "memento"], randomDoubleBattleMoves: ["gunkshot", "poisonjab", "shadowsneak", "protect", "icepunch", "firepunch", "brickbreak"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 25}, + {"generation": 2, "level": 5}, + {"generation": 3, "level": 32}, + {"generation": 4, "level": 15}, + {"generation": 5, "level": 5, "isHidden": false}, + {"generation": 5, "level": 35, "isHidden": true}, + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, mukalola: { - randomBattleMoves: ["curse", "gunkshot", "knockoff", "poisonjab", "shadowsneak", "stoneedge", "pursuit"], + randomBattleMoves: ["curse", "gunkshot", "knockoff", "poisonjab", "shadowsneak", "pursuit", "icepunch", "firepunch"], randomDoubleBattleMoves: ["gunkshot", "knockoff", "stoneedge", "snarl", "protect", "poisonjab", "shadowsneak"], tier: "UU", + doublesTier: "DUU", }, shellder: { - randomBattleMoves: ["shellsmash", "hydropump", "razorshell", "rockblast", "iciclespear", "rapidspin"], - randomDoubleBattleMoves: ["shellsmash", "hydropump", "razorshell", "rockblast", "iciclespear", "protect"], + randomBattleMoves: ["shellsmash", "hydropump", "liquidation", "rockblast", "iciclespear", "rapidspin"], + randomDoubleBattleMoves: ["shellsmash", "hydropump", "liquidation", "rockblast", "iciclespear", "protect"], eventPokemon: [ - {"generation": 3, "level": 24, "gender": "F", "nature": "Brave", "ivs": {"hp": 5, "atk": 19, "def": 18, "spa": 5, "spd": 11, "spe": 13}, "abilities":["shellarmor"], "moves":["withdraw", "iciclespear", "supersonic", "aurorabeam"]}, - {"generation": 3, "level": 10, "gender": "M", "abilities":["shellarmor"], "moves":["tackle", "withdraw", "iciclespear"]}, - {"generation": 3, "level": 29, "abilities":["shellarmor"], "moves":["refresh", "takedown", "surf", "aurorabeam"]}, + {"generation": 3, "level": 24, "gender": "F", "nature": "Brave", "ivs": {"hp": 5, "atk": 19, "def": 18, "spa": 5, "spd": 11, "spe": 13}, "abilities": ["shellarmor"], "moves": ["withdraw", "iciclespear", "supersonic", "aurorabeam"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["shellarmor"], "moves": ["tackle", "withdraw", "iciclespear"], "pokeball": "pokeball"}, + {"generation": 3, "level": 29, "abilities": ["shellarmor"], "moves": ["refresh", "takedown", "surf", "aurorabeam"]}, + ], + encounters: [ + {"generation": 1, "level": 10}, ], tier: "LC", }, cloyster: { randomBattleMoves: ["shellsmash", "hydropump", "rockblast", "iciclespear", "iceshard", "rapidspin", "spikes", "toxicspikes"], - randomDoubleBattleMoves: ["shellsmash", "hydropump", "razorshell", "rockblast", "iciclespear", "protect"], + randomDoubleBattleMoves: ["shellsmash", "hydropump", "liquidation", "rockblast", "iciclespear", "protect"], eventPokemon: [ - {"generation": 5, "level": 30, "gender": "M", "nature": "Naughty", "isHidden": false, "abilities":["skilllink"], "moves":["iciclespear", "rockblast", "hiddenpower", "razorshell"]}, + {"generation": 5, "level": 30, "gender": "M", "nature": "Naughty", "isHidden": false, "abilities": ["skilllink"], "moves": ["iciclespear", "rockblast", "hiddenpower", "razorshell"], "pokeball": "pokeball"}, ], tier: "RU", + doublesTier: "(DUU)", }, gastly: { randomBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "painsplit", "hypnosis", "gigadrain", "trick", "dazzlinggleam"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "taunt", "hypnosis", "gigadrain", "trick", "dazzlinggleam", "protect"], + encounters: [ + {"generation": 1, "level": 18, "shiny": false}, + ], tier: "LC", }, haunter: { randomBattleMoves: ["shadowball", "sludgebomb", "dazzlinggleam", "substitute", "destinybond"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "taunt", "hypnosis", "gigadrain", "trick", "dazzlinggleam", "protect"], eventPokemon: [ - {"generation": 5, "level": 30, "moves":["confuseray", "suckerpunch", "shadowpunch", "payback"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "moves": ["confuseray", "suckerpunch", "shadowpunch", "payback"], "pokeball": "cherishball"}, ], - tier: "NFE", + encounters: [ + {"generation": 1, "level": 20, "shiny": false}, + {"generation": 2, "level": 15}, + {"generation": 3, "level": 20}, + {"generation": 4, "level": 16}, + ], + tier: "PU", + doublesTier: "NFE", }, gengar: { randomBattleMoves: ["shadowball", "sludgewave", "focusblast", "substitute", "disable", "painsplit", "willowisp"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "focusblast", "substitute", "disable", "taunt", "hypnosis", "willowisp", "dazzlinggleam", "protect"], eventPokemon: [ - {"generation": 3, "level": 23, "gender": "F", "nature": "Hardy", "ivs": {"hp": 19, "atk": 14, "def": 0, "spa": 14, "spd": 17, "spe": 27}, "moves":["spite", "curse", "nightshade", "confuseray"]}, - {"generation": 6, "level": 25, "nature": "Timid", "moves":["psychic", "confuseray", "suckerpunch", "shadowpunch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 25, "moves":["nightshade", "confuseray", "suckerpunch", "shadowpunch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "moves":["shadowball", "sludgebomb", "willowisp", "destinybond"], "pokeball": "cherishball"}, - {"generation": 6, "level": 25, "shiny": true, "moves":["shadowball", "sludgewave", "confuseray", "astonish"], "pokeball": "duskball"}, - {"generation": 6, "level": 50, "shiny": true, "gender": "M", "moves":["meanlook", "hypnosis", "psychic", "hyperbeam"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["meanlook", "hypnosis", "psychic", "hyperbeam"], "pokeball": "cherishball"}, + {"generation": 3, "level": 23, "gender": "F", "nature": "Hardy", "ivs": {"hp": 19, "atk": 14, "def": 0, "spa": 14, "spd": 17, "spe": 27}, "moves": ["spite", "curse", "nightshade", "confuseray"], "pokeball": "pokeball"}, + {"generation": 6, "level": 25, "nature": "Timid", "moves": ["psychic", "confuseray", "suckerpunch", "shadowpunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 25, "moves": ["nightshade", "confuseray", "suckerpunch", "shadowpunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["shadowball", "sludgebomb", "willowisp", "destinybond"], "pokeball": "cherishball"}, + {"generation": 6, "level": 25, "shiny": true, "moves": ["shadowball", "sludgewave", "confuseray", "astonish"], "pokeball": "duskball"}, + {"generation": 6, "level": 50, "shiny": true, "gender": "M", "moves": ["meanlook", "hypnosis", "psychic", "hyperbeam"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["meanlook", "hypnosis", "psychic", "hyperbeam"], "pokeball": "cherishball"}, ], - tier: "OU", + tier: "UU", + doublesTier: "DUU", }, gengarmega: { randomBattleMoves: ["shadowball", "sludgewave", "focusblast", "taunt", "destinybond", "disable", "perishsong", "protect"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "focusblast", "substitute", "disable", "taunt", "hypnosis", "willowisp", "dazzlinggleam", "protect"], requiredItem: "Gengarite", tier: "Uber", + doublesTier: "DUber", }, onix: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "dragontail", "curse"], randomDoubleBattleMoves: ["stealthrock", "earthquake", "stoneedge", "rockslide", "protect", "explosion"], + encounters: [ + {"generation": 1, "level": 13, "shiny": false}, + ], tier: "LC", }, steelix: { randomBattleMoves: ["stealthrock", "earthquake", "ironhead", "roar", "toxic", "rockslide"], - randomDoubleBattleMoves: ["stealthrock", "earthquake", "ironhead", "rockslide", "protect", "explosion"], + randomDoubleBattleMoves: ["stealthrock", "earthquake", "ironhead", "rockslide", "protect", "explosion", "wideguard"], tier: "NU", + doublesTier: "(DUU)", }, steelixmega: { randomBattleMoves: ["stealthrock", "earthquake", "heavyslam", "roar", "toxic", "dragontail"], randomDoubleBattleMoves: ["stealthrock", "earthquake", "heavyslam", "rockslide", "protect", "explosion"], requiredItem: "Steelixite", tier: "UU", + doublesTier: "(DUU)", }, drowzee: { randomBattleMoves: ["psychic", "seismictoss", "thunderwave", "wish", "protect", "toxic", "shadowball", "trickroom", "calmmind", "dazzlinggleam"], randomDoubleBattleMoves: ["psychic", "seismictoss", "thunderwave", "wish", "protect", "hypnosis", "shadowball", "trickroom", "calmmind", "dazzlinggleam", "toxic"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "abilities":["insomnia"], "moves":["bellydrum", "wish"]}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["insomnia"], "moves": ["bellydrum", "wish"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 9, "shiny": false}, ], tier: "LC", }, @@ -1032,38 +1478,66 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "seismictoss", "foulplay", "wish", "protect", "thunderwave", "toxic"], randomDoubleBattleMoves: ["psychic", "seismictoss", "thunderwave", "wish", "protect", "hypnosis", "trickroom", "dazzlinggleam", "foulplay"], eventPokemon: [ - {"generation": 3, "level": 34, "abilities":["insomnia"], "moves":["batonpass", "psychic", "meditate", "shadowball"]}, + {"generation": 3, "level": 34, "abilities": ["insomnia"], "moves": ["batonpass", "psychic", "meditate", "shadowball"]}, ], - tier: "PU", + encounters: [ + {"generation": 2, "level": 16}, + {"generation": 4, "level": 16}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, krabby: { randomBattleMoves: ["crabhammer", "swordsdance", "agility", "rockslide", "substitute", "xscissor", "superpower", "knockoff"], randomDoubleBattleMoves: ["crabhammer", "swordsdance", "rockslide", "substitute", "xscissor", "superpower", "knockoff", "protect"], + encounters: [ + {"generation": 1, "level": 10}, + ], tier: "LC", }, kingler: { - randomBattleMoves: ["crabhammer", "xscissor", "rockslide", "swordsdance", "agility", "superpower", "knockoff"], + randomBattleMoves: ["liquidation", "xscissor", "rockslide", "swordsdance", "agility", "superpower", "knockoff"], randomDoubleBattleMoves: ["crabhammer", "xscissor", "rockslide", "substitute", "superpower", "knockoff", "protect", "wideguard"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 15}, + {"generation": 3, "level": 25}, + {"generation": 4, "level": 22}, + ], + tier: "NU", + doublesTier: "(DUU)", }, voltorb: { randomBattleMoves: ["voltswitch", "thunderbolt", "taunt", "foulplay", "hiddenpowerice"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "taunt", "foulplay", "hiddenpowerice", "protect", "thunderwave"], eventPokemon: [ - {"generation": 3, "level": 19, "moves":["refresh", "mirrorcoat", "spark", "swift"]}, + {"generation": 3, "level": 19, "moves": ["refresh", "mirrorcoat", "spark", "swift"]}, + ], + encounters: [ + {"generation": 1, "level": 14, "shiny": false}, + {"generation": 1, "level": 40}, ], tier: "LC", }, electrode: { randomBattleMoves: ["voltswitch", "thunderbolt", "taunt", "foulplay", "hiddenpowergrass", "signalbeam"], randomDoubleBattleMoves: ["voltswitch", "discharge", "taunt", "foulplay", "hiddenpowerice", "protect", "thunderwave"], - tier: "PU", + encounters: [ + {"generation": 1, "level": 3}, + {"generation": 2, "level": 23}, + {"generation": 3, "level": 3, "shiny": false, "nature": "Hasty", "ivs": {"hp": 19, "atk": 16, "def": 18, "spa": 25, "spd": 25, "spe": 19}, "abilities": ["static"], "pokeball": "pokeball"}, + {"generation": 4, "level": 23}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, exeggcute: { randomBattleMoves: ["substitute", "leechseed", "gigadrain", "psychic", "sleeppowder", "stunspore", "hiddenpowerfire", "synthesis"], randomDoubleBattleMoves: ["substitute", "leechseed", "gigadrain", "psychic", "sleeppowder", "stunspore", "hiddenpowerfire", "protect", "trickroom"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["sweetscent", "wish"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["sweetscent", "wish"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 20, "shiny": false}, ], tier: "LC", }, @@ -1071,35 +1545,53 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "leechseed", "gigadrain", "psychic", "sleeppowder", "hiddenpowerfire"], randomDoubleBattleMoves: ["substitute", "leechseed", "gigadrain", "psychic", "sleeppowder", "hiddenpowerfire", "protect", "trickroom", "psyshock"], eventPokemon: [ - {"generation": 3, "level": 46, "moves":["refresh", "psychic", "hypnosis", "ancientpower"]}, + {"generation": 3, "level": 46, "moves": ["refresh", "psychic", "hypnosis", "ancientpower"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, exeggutoralola: { - randomBattleMoves: ["dracometeor", "leafstorm", "flamethrower", "earthquake", "woodhammer", "gigadrain", "dragonhammer"], + randomBattleMoves: ["dracometeor", "leafstorm", "flamethrower", "earthquake", "woodhammer", "gigadrain", "dragonhammer", "knockoff"], randomDoubleBattleMoves: ["dracometeor", "leafstorm", "protect", "flamethrower", "trickroom", "woodhammer", "dragonhammer"], eventPokemon: [ - {"generation": 7, "level": 50, "gender": "M", "nature": "Modest", "isHidden": true, "moves":["powerswap", "celebrate", "leafstorm", "dracometeor"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "M", "nature": "Modest", "isHidden": true, "moves": ["powerswap", "celebrate", "leafstorm", "dracometeor"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "PUBL", + doublesTier: "(DUU)", }, cubone: { randomBattleMoves: ["substitute", "bonemerang", "doubleedge", "rockslide", "firepunch", "earthquake"], randomDoubleBattleMoves: ["substitute", "bonemerang", "doubleedge", "rockslide", "firepunch", "earthquake", "protect"], + encounters: [ + {"generation": 1, "level": 16, "shiny": false}, + ], tier: "LC", }, marowak: { randomBattleMoves: ["bonemerang", "earthquake", "knockoff", "doubleedge", "stoneedge", "stealthrock", "substitute"], randomDoubleBattleMoves: ["substitute", "bonemerang", "doubleedge", "rockslide", "firepunch", "earthquake", "protect", "swordsdance"], eventPokemon: [ - {"generation": 3, "level": 44, "moves":["sing", "earthquake", "swordsdance", "rockslide"]}, + {"generation": 3, "level": 44, "moves": ["sing", "earthquake", "swordsdance", "rockslide"]}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 24, "shiny": false}, + {"generation": 2, "level": 12}, + {"generation": 4, "level": 14}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, marowakalola: { randomBattleMoves: ["flamecharge", "shadowbone", "bonemerang", "willowisp", "stoneedge", "flareblitz", "substitute"], randomDoubleBattleMoves: ["shadowbone", "bonemerang", "willowisp", "stoneedge", "flareblitz", "protect"], - tier: "OU", + tier: "RU", + doublesTier: "DUU", + }, + marowakalolatotem: { + eventPokemon: [ + {"generation": 7, "level": 25, "perfectIVs": 3, "moves": ["leer", "hex", "bonemerang", "willowisp"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, tyrogue: { randomBattleMoves: ["highjumpkick", "rapidspin", "fakeout", "bulletpunch", "machpunch", "toxic", "counter"], @@ -1110,67 +1602,100 @@ exports.BattleFormatsData = { randomBattleMoves: ["highjumpkick", "knockoff", "stoneedge", "rapidspin", "machpunch", "poisonjab", "fakeout"], randomDoubleBattleMoves: ["knockoff", "rockslide", "machpunch", "fakeout", "highjumpkick", "earthquake", "blazekick", "wideguard", "protect"], eventPokemon: [ - {"generation": 3, "level": 38, "abilities":["limber"], "moves":["refresh", "highjumpkick", "mindreader", "megakick"]}, + {"generation": 3, "level": 38, "abilities": ["limber"], "moves": ["refresh", "highjumpkick", "mindreader", "megakick"]}, + ], + encounters: [ + {"generation": 1, "level": 30}, ], tier: "NU", + doublesTier: "(DUU)", }, hitmonchan: { randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "firepunch", "machpunch", "rapidspin"], randomDoubleBattleMoves: ["fakeout", "drainpunch", "icepunch", "firepunch", "machpunch", "earthquake", "rockslide", "protect", "thunderpunch"], eventPokemon: [ - {"generation": 3, "level": 38, "abilities":["keeneye"], "moves":["helpinghand", "skyuppercut", "mindreader", "megapunch"]}, + {"generation": 3, "level": 38, "abilities": ["keeneye"], "moves": ["helpinghand", "skyuppercut", "mindreader", "megapunch"]}, + ], + encounters: [ + {"generation": 1, "level": 30}, ], tier: "PU", + doublesTier: "(DUU)", }, hitmontop: { - randomBattleMoves: ["suckerpunch", "machpunch", "rapidspin", "closecombat", "toxic"], + randomBattleMoves: ["suckerpunch", "stoneedge", "rapidspin", "closecombat", "toxic"], randomDoubleBattleMoves: ["fakeout", "feint", "suckerpunch", "closecombat", "helpinghand", "machpunch", "wideguard"], eventPokemon: [ - {"generation": 5, "level": 55, "gender": "M", "nature": "Adamant", "isHidden": false, "abilities":["intimidate"], "moves":["fakeout", "closecombat", "suckerpunch", "helpinghand"]}, + {"generation": 5, "level": 55, "gender": "M", "nature": "Adamant", "isHidden": false, "abilities": ["intimidate"], "moves": ["fakeout", "closecombat", "suckerpunch", "helpinghand"]}, ], tier: "NU", + doublesTier: "DUU", }, lickitung: { randomBattleMoves: ["wish", "protect", "dragontail", "curse", "bodyslam", "return", "powerwhip", "swordsdance", "earthquake", "toxic", "healbell"], randomDoubleBattleMoves: ["wish", "protect", "dragontail", "knockoff", "bodyslam", "return", "powerwhip", "swordsdance", "earthquake"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["healbell", "wish"]}, - {"generation": 3, "level": 38, "moves":["helpinghand", "doubleedge", "defensecurl", "rollout"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["healbell", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 38, "moves": ["helpinghand", "doubleedge", "defensecurl", "rollout"]}, + ], + encounters: [ + {"generation": 1, "level": 15}, ], tier: "LC", }, lickilicky: { randomBattleMoves: ["wish", "protect", "bodyslam", "knockoff", "dragontail", "healbell", "swordsdance", "explosion", "earthquake", "powerwhip"], randomDoubleBattleMoves: ["wish", "protect", "dragontail", "knockoff", "bodyslam", "rockslide", "powerwhip", "earthquake", "explosion"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, koffing: { randomBattleMoves: ["painsplit", "sludgebomb", "willowisp", "fireblast", "toxic", "clearsmog", "rest", "sleeptalk", "thunderbolt"], randomDoubleBattleMoves: ["protect", "sludgebomb", "willowisp", "fireblast", "toxic", "rest", "sleeptalk", "thunderbolt"], + encounters: [ + {"generation": 1, "level": 30, "shiny": false}, + ], tier: "LC", }, weezing: { randomBattleMoves: ["painsplit", "sludgebomb", "willowisp", "fireblast", "protect", "toxicspikes"], randomDoubleBattleMoves: ["protect", "sludgebomb", "willowisp", "fireblast", "toxic", "painsplit", "thunderbolt", "explosion"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 16}, + {"generation": 3, "level": 32}, + {"generation": 4, "level": 15, "pokeball": "safariball"}, + ], + tier: "NU", + doublesTier: "(DUU)", }, rhyhorn: { randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast", "rockpolish"], randomDoubleBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockslide", "protect"], + encounters: [ + {"generation": 1, "level": 20}, + ], tier: "LC", }, rhydon: { randomBattleMoves: ["stealthrock", "earthquake", "rockblast", "roar", "swordsdance", "stoneedge", "megahorn", "rockpolish"], randomDoubleBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockslide", "protect"], eventPokemon: [ - {"generation": 3, "level": 46, "moves":["helpinghand", "megahorn", "scaryface", "earthquake"]}, + {"generation": 3, "level": 46, "moves": ["helpinghand", "megahorn", "scaryface", "earthquake"]}, + ], + encounters: [ + {"generation": 1, "level": 15}, + {"generation": 2, "level": 10}, + {"generation": 4, "level": 41}, + {"generation": 6, "level": 30}, ], tier: "NU", + doublesTier: "NFE", }, rhyperior: { - randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast", "rockpolish", "dragontail"], - randomDoubleBattleMoves: ["stoneedge", "earthquake", "hammerarm", "megahorn", "stealthrock", "rockslide", "aquatail", "protect"], + randomBattleMoves: ["stoneedge", "earthquake", "icepunch", "megahorn", "stealthrock", "rockblast", "rockpolish", "dragontail"], + randomDoubleBattleMoves: ["stoneedge", "earthquake", "hammerarm", "megahorn", "stealthrock", "rockslide", "icepunch", "protect"], tier: "RU", + doublesTier: "(DUU)", }, happiny: { randomBattleMoves: ["aromatherapy", "toxic", "thunderwave", "counter", "endeavor", "lightscreen", "fireblast"], @@ -1181,25 +1706,33 @@ exports.BattleFormatsData = { randomBattleMoves: ["softboiled", "healbell", "stealthrock", "thunderwave", "toxic", "seismictoss", "wish", "protect", "counter"], randomDoubleBattleMoves: ["aromatherapy", "toxic", "thunderwave", "helpinghand", "softboiled", "lightscreen", "seismictoss", "protect", "wish"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["sweetscent", "wish"]}, - {"generation": 3, "level": 10, "moves":["pound", "growl", "tailwhip", "refresh"]}, - {"generation": 3, "level": 39, "moves":["sweetkiss", "thunderbolt", "softboiled", "skillswap"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["sweetscent", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "moves": ["pound", "growl", "tailwhip", "refresh"], "pokeball": "pokeball"}, + {"generation": 3, "level": 39, "moves": ["sweetkiss", "thunderbolt", "softboiled", "skillswap"]}, + ], + encounters: [ + {"generation": 1, "level": 7, "shiny": false}, ], tier: "OU", + doublesTier: "NFE", }, blissey: { randomBattleMoves: ["toxic", "flamethrower", "seismictoss", "softboiled", "wish", "healbell", "protect", "thunderwave", "stealthrock"], randomDoubleBattleMoves: ["wish", "softboiled", "protect", "toxic", "aromatherapy", "seismictoss", "helpinghand", "thunderwave", "flamethrower", "icebeam"], eventPokemon: [ - {"generation": 5, "level": 10, "isHidden": true, "moves":["pound", "growl", "tailwhip", "refresh"]}, + {"generation": 5, "level": 10, "isHidden": true, "moves": ["pound", "growl", "tailwhip", "refresh"]}, ], tier: "UU", + doublesTier: "(DUU)", }, tangela: { randomBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerfire", "hiddenpowerice", "leechseed", "knockoff", "leafstorm", "sludgebomb", "synthesis"], randomDoubleBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerrock", "hiddenpowerice", "leechseed", "knockoff", "leafstorm", "stunspore", "protect", "hiddenpowerfire"], eventPokemon: [ - {"generation": 3, "level": 30, "abilities":["chlorophyll"], "moves":["morningsun", "solarbeam", "sunnyday", "ingrain"]}, + {"generation": 3, "level": 30, "abilities": ["chlorophyll"], "moves": ["morningsun", "solarbeam", "sunnyday", "ingrain"]}, + ], + encounters: [ + {"generation": 1, "level": 13}, ], tier: "LC Uber", }, @@ -1207,32 +1740,41 @@ exports.BattleFormatsData = { randomBattleMoves: ["gigadrain", "leafstorm", "knockoff", "earthquake", "hiddenpowerfire", "rockslide", "sleeppowder", "leechseed", "synthesis"], randomDoubleBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerice", "leechseed", "knockoff", "ragepowder", "focusblast", "protect", "powerwhip", "earthquake"], eventPokemon: [ - {"generation": 4, "level": 50, "gender": "M", "nature": "Brave", "moves":["sunnyday", "morningsun", "ancientpower", "naturalgift"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Brave", "moves": ["sunnyday", "morningsun", "ancientpower", "naturalgift"], "pokeball": "cherishball"}, ], tier: "OU", + doublesTier: "(DUU)", }, kangaskhan: { randomBattleMoves: ["return", "suckerpunch", "earthquake", "drainpunch", "crunch", "fakeout"], randomDoubleBattleMoves: ["fakeout", "return", "suckerpunch", "earthquake", "doubleedge", "drainpunch", "crunch", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "abilities":["earlybird"], "moves":["yawn", "wish"]}, - {"generation": 3, "level": 10, "abilities":["earlybird"], "moves":["cometpunch", "leer", "bite"]}, - {"generation": 3, "level": 35, "abilities":["earlybird"], "moves":["sing", "earthquake", "tailwhip", "dizzypunch"]}, - {"generation": 6, "level": 50, "isHidden": false, "abilities":["scrappy"], "moves":["fakeout", "return", "earthquake", "suckerpunch"], "pokeball": "cherishball"}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["earlybird"], "moves": ["yawn", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "abilities": ["earlybird"], "moves": ["cometpunch", "leer", "bite"], "pokeball": "pokeball"}, + {"generation": 3, "level": 35, "abilities": ["earlybird"], "moves": ["sing", "earthquake", "tailwhip", "dizzypunch"]}, + {"generation": 6, "level": 50, "isHidden": false, "abilities": ["scrappy"], "moves": ["fakeout", "return", "earthquake", "suckerpunch"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 25, "shiny": false}, ], tier: "PU", + doublesTier: "(DUU)", }, kangaskhanmega: { randomBattleMoves: ["fakeout", "return", "suckerpunch", "earthquake", "poweruppunch", "crunch"], randomDoubleBattleMoves: ["fakeout", "return", "suckerpunch", "earthquake", "doubleedge", "poweruppunch", "drainpunch", "crunch", "protect"], requiredItem: "Kangaskhanite", tier: "Uber", + doublesTier: "DUber", }, horsea: { randomBattleMoves: ["hydropump", "icebeam", "substitute", "hiddenpowergrass", "raindance"], randomDoubleBattleMoves: ["hydropump", "icebeam", "substitute", "hiddenpowergrass", "raindance", "muddywater", "protect"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves":["bubble"]}, + {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves": ["bubble"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, ], tier: "LC", }, @@ -1240,35 +1782,57 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "icebeam", "agility", "substitute", "hiddenpowergrass"], randomDoubleBattleMoves: ["hydropump", "icebeam", "substitute", "hiddenpowergrass", "agility", "muddywater", "protect"], eventPokemon: [ - {"generation": 3, "level": 45, "abilities":["poisonpoint"], "moves":["leer", "watergun", "twister", "agility"]}, + {"generation": 3, "level": 45, "abilities": ["poisonpoint"], "moves": ["leer", "watergun", "twister", "agility"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 20}, + {"generation": 2, "level": 20}, + {"generation": 3, "level": 25}, + {"generation": 4, "level": 15}, ], tier: "NFE", }, kingdra: { - randomBattleMoves: ["dragondance", "waterfall", "outrage", "ironhead", "substitute", "raindance", "hydropump", "dracometeor"], + randomBattleMoves: ["raindance", "hydropump", "dracometeor", "icebeam", "dragondance", "waterfall", "outrage"], randomDoubleBattleMoves: ["hydropump", "icebeam", "raindance", "dracometeor", "dragonpulse", "muddywater", "protect"], eventPokemon: [ - {"generation": 3, "level": 50, "abilities":["swiftswim"], "moves":["leer", "watergun", "twister", "agility"]}, - {"generation": 5, "level": 50, "gender": "M", "nature": "Timid", "ivs": {"hp": 31, "atk": 17, "def": 8, "spa": 31, "spd": 11, "spe": 31}, "isHidden": false, "abilities":["swiftswim"], "moves":["dracometeor", "muddywater", "dragonpulse", "protect"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "abilities": ["swiftswim"], "moves": ["leer", "watergun", "twister", "agility"], "pokeball": "pokeball"}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Timid", "ivs": {"hp": 31, "atk": 17, "def": 8, "spa": 31, "spd": 11, "spe": 31}, "isHidden": false, "abilities": ["swiftswim"], "moves": ["dracometeor", "muddywater", "dragonpulse", "protect"], "pokeball": "cherishball"}, ], - tier: "BL3", + tier: "NUBL", + doublesTier: "DOU", }, goldeen: { randomBattleMoves: ["waterfall", "megahorn", "knockoff", "drillrun", "icebeam"], randomDoubleBattleMoves: ["waterfall", "megahorn", "knockoff", "drillrun", "icebeam", "protect"], + encounters: [ + {"generation": 1, "level": 5}, + ], tier: "LC", }, seaking: { randomBattleMoves: ["waterfall", "megahorn", "knockoff", "drillrun", "scald", "icebeam"], randomDoubleBattleMoves: ["waterfall", "surf", "megahorn", "knockoff", "drillrun", "icebeam", "icywind", "protect"], - tier: "PU", + 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}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, staryu: { randomBattleMoves: ["scald", "thunderbolt", "icebeam", "rapidspin", "recover", "dazzlinggleam", "hydropump"], randomDoubleBattleMoves: ["scald", "thunderbolt", "icebeam", "protect", "recover", "dazzlinggleam", "hydropump"], eventPokemon: [ - {"generation": 3, "level": 50, "moves":["minimize", "lightscreen", "cosmicpower", "hydropump"]}, - {"generation": 3, "level": 18, "nature": "Timid", "ivs": {"hp": 10, "atk": 3, "def": 22, "spa": 24, "spd": 3, "spe": 18}, "abilities":["illuminate"], "moves":["harden", "watergun", "rapidspin", "recover"]}, + {"generation": 3, "level": 50, "moves": ["minimize", "lightscreen", "cosmicpower", "hydropump"], "pokeball": "pokeball"}, + {"generation": 3, "level": 18, "nature": "Timid", "ivs": {"hp": 10, "atk": 3, "def": 22, "spa": 24, "spd": 3, "spe": 18}, "abilities": ["illuminate"], "moves": ["harden", "watergun", "rapidspin", "recover"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, ], tier: "LC", }, @@ -1276,53 +1840,65 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "icebeam", "rapidspin", "recover", "psyshock", "scald", "hydropump"], randomDoubleBattleMoves: ["surf", "thunderbolt", "icebeam", "protect", "recover", "psychic", "psyshock", "scald", "hydropump"], eventPokemon: [ - {"generation": 3, "level": 41, "moves":["refresh", "waterfall", "icebeam", "recover"]}, + {"generation": 3, "level": 41, "moves": ["refresh", "waterfall", "icebeam", "recover"]}, ], tier: "UU", + doublesTier: "DUU", }, mimejr: { - randomBattleMoves: ["batonpass", "psychic", "thunderwave", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore"], + randomBattleMoves: ["psychic", "thunderwave", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore"], randomDoubleBattleMoves: ["fakeout", "psychic", "thunderwave", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore", "icywind", "protect"], tier: "LC", }, mrmime: { - randomBattleMoves: ["nastyplot", "psychic", "psyshock", "dazzlinggleam", "shadowball", "batonpass", "focusblast", "healingwish", "encore"], + randomBattleMoves: ["nastyplot", "psychic", "psyshock", "dazzlinggleam", "shadowball", "focusblast", "healingwish", "encore"], randomDoubleBattleMoves: ["fakeout", "thunderwave", "hiddenpowerfighting", "psychic", "thunderbolt", "encore", "icywind", "protect", "wideguard", "dazzlinggleam", "followme"], eventPokemon: [ - {"generation": 3, "level": 42, "abilities":["soundproof"], "moves":["followme", "psychic", "encore", "thunderpunch"]}, + {"generation": 3, "level": 42, "abilities": ["soundproof"], "moves": ["followme", "psychic", "encore", "thunderpunch"]}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 6}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, scyther: { - randomBattleMoves: ["swordsdance", "roost", "bugbite", "quickattack", "brickbreak", "aerialace", "batonpass", "uturn", "knockoff"], + randomBattleMoves: ["swordsdance", "roost", "bugbite", "quickattack", "brickbreak", "aerialace", "uturn", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "protect", "bugbite", "quickattack", "brickbreak", "aerialace", "feint", "uturn", "knockoff"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["swarm"], "moves":["quickattack", "leer", "focusenergy"]}, - {"generation": 3, "level": 40, "abilities":["swarm"], "moves":["morningsun", "razorwind", "silverwind", "slash"]}, - {"generation": 5, "level": 30, "isHidden": false, "moves":["agility", "wingattack", "furycutter", "slash"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["swarm"], "moves": ["quickattack", "leer", "focusenergy"], "pokeball": "pokeball"}, + {"generation": 3, "level": 40, "abilities": ["swarm"], "moves": ["morningsun", "razorwind", "silverwind", "slash"]}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["agility", "wingattack", "furycutter", "slash"], "pokeball": "cherishball"}, ], - tier: "LC Uber", + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + {"generation": 1, "level": 25}, + ], + tier: "PU", + doublesTier: "LC Uber", }, scizor: { randomBattleMoves: ["swordsdance", "bulletpunch", "bugbite", "superpower", "uturn", "pursuit", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "protect", "feint", "knockoff"], eventPokemon: [ - {"generation": 3, "level": 50, "gender": "M", "abilities":["swarm"], "moves":["furycutter", "metalclaw", "swordsdance", "slash"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Adamant", "abilities":["swarm"], "moves":["xscissor", "swordsdance", "irondefense", "agility"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "abilities":["technician"], "moves":["bulletpunch", "bugbite", "roost", "swordsdance"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["leer", "focusenergy", "pursuit", "steelwing"]}, - {"generation": 6, "level": 50, "gender": "M", "isHidden": false, "moves":["xscissor", "nightslash", "doublehit", "ironhead"], "pokeball": "cherishball"}, - {"generation": 6, "level": 25, "nature": "Adamant", "isHidden": false, "abilities":["technician"], "moves":["aerialace", "falseswipe", "agility", "furycutter"], "pokeball": "cherishball"}, - {"generation": 6, "level": 25, "isHidden": false, "moves":["metalclaw", "falseswipe", "agility", "furycutter"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "isHidden": false, "abilities":["technician"], "moves":["bulletpunch", "swordsdance", "roost", "uturn"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "gender": "M", "abilities": ["swarm"], "moves": ["furycutter", "metalclaw", "swordsdance", "slash"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Adamant", "abilities": ["swarm"], "moves": ["xscissor", "swordsdance", "irondefense", "agility"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "abilities": ["technician"], "moves": ["bulletpunch", "bugbite", "roost", "swordsdance"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["leer", "focusenergy", "pursuit", "steelwing"]}, + {"generation": 6, "level": 50, "gender": "M", "isHidden": false, "moves": ["xscissor", "nightslash", "doublehit", "ironhead"], "pokeball": "cherishball"}, + {"generation": 6, "level": 25, "nature": "Adamant", "isHidden": false, "abilities": ["technician"], "moves": ["aerialace", "falseswipe", "agility", "furycutter"], "pokeball": "cherishball"}, + {"generation": 6, "level": 25, "isHidden": false, "moves": ["metalclaw", "falseswipe", "agility", "furycutter"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "isHidden": false, "abilities": ["technician"], "moves": ["bulletpunch", "swordsdance", "roost", "uturn"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "(DUU)", }, scizormega: { - randomBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "batonpass", "pursuit", "defog", "knockoff"], + randomBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "defog", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "protect", "feint", "knockoff"], requiredItem: "Scizorite", tier: "OU", + doublesTier: "DUU", }, smoochum: { randomBattleMoves: ["icebeam", "psychic", "hiddenpowerfighting", "trick", "shadowball", "grassknot"], @@ -1332,13 +1908,21 @@ exports.BattleFormatsData = { jynx: { randomBattleMoves: ["icebeam", "psychic", "focusblast", "trick", "nastyplot", "lovelykiss", "substitute", "psyshock"], randomDoubleBattleMoves: ["icebeam", "psychic", "hiddenpowerfighting", "shadowball", "protect", "lovelykiss", "substitute", "psyshock"], - tier: "PU", + 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": ["oblivious"], "pokeball": "pokeball"}, + {"generation": 4, "level": 22}, + {"generation": 7, "level": 9}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, elekid: { randomBattleMoves: ["thunderbolt", "crosschop", "voltswitch", "substitute", "icepunch", "psychic", "hiddenpowergrass"], randomDoubleBattleMoves: ["thunderbolt", "crosschop", "voltswitch", "substitute", "icepunch", "psychic", "hiddenpowergrass", "protect"], eventPokemon: [ - {"generation": 3, "level": 20, "moves":["icepunch", "firepunch", "thunderpunch", "crosschop"]}, + {"generation": 3, "level": 20, "moves": ["icepunch", "firepunch", "thunderpunch", "crosschop"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -1346,11 +1930,17 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "voltswitch", "substitute", "hiddenpowerice", "hiddenpowergrass", "focusblast", "psychic"], randomDoubleBattleMoves: ["thunderbolt", "crosschop", "voltswitch", "substitute", "icepunch", "psychic", "hiddenpowergrass", "protect", "focusblast", "discharge"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["quickattack", "leer", "thunderpunch"]}, - {"generation": 3, "level": 43, "moves":["followme", "crosschop", "thunderwave", "thunderbolt"]}, - {"generation": 4, "level": 30, "gender": "M", "nature": "Naughty", "moves":["lowkick", "shockwave", "lightscreen", "thunderpunch"]}, - {"generation": 5, "level": 30, "isHidden": false, "moves":["lowkick", "swift", "shockwave", "lightscreen"], "pokeball": "cherishball"}, - {"generation": 6, "level": 30, "gender": "M", "isHidden": true, "moves":["lowkick", "shockwave", "lightscreen", "thunderpunch"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["quickattack", "leer", "thunderpunch"], "pokeball": "pokeball"}, + {"generation": 3, "level": 43, "moves": ["followme", "crosschop", "thunderwave", "thunderbolt"]}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Naughty", "moves": ["lowkick", "shockwave", "lightscreen", "thunderpunch"], "pokeball": "pokeball"}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["lowkick", "swift", "shockwave", "lightscreen"], "pokeball": "cherishball"}, + {"generation": 6, "level": 30, "gender": "M", "isHidden": true, "moves": ["lowkick", "shockwave", "lightscreen", "thunderpunch"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 33, "shiny": false}, + {"generation": 2, "level": 15}, + {"generation": 4, "level": 15}, + {"generation": 7, "level": 25}, ], tier: "NFE", }, @@ -1358,10 +1948,11 @@ exports.BattleFormatsData = { randomBattleMoves: ["wildcharge", "crosschop", "icepunch", "flamethrower", "earthquake", "voltswitch"], randomDoubleBattleMoves: ["wildcharge", "crosschop", "icepunch", "substitute", "flamethrower", "earthquake", "protect", "followme"], eventPokemon: [ - {"generation": 4, "level": 50, "gender": "M", "nature": "Adamant", "moves":["thunderpunch", "icepunch", "crosschop", "earthquake"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Serious", "moves":["lightscreen", "thunderpunch", "discharge", "thunderbolt"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Adamant", "moves": ["thunderpunch", "icepunch", "crosschop", "earthquake"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Serious", "moves": ["lightscreen", "thunderpunch", "discharge", "thunderbolt"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, magby: { randomBattleMoves: ["flareblitz", "substitute", "fireblast", "hiddenpowergrass", "hiddenpowerice", "crosschop", "thunderpunch", "overheat"], @@ -1370,11 +1961,17 @@ exports.BattleFormatsData = { magmar: { randomBattleMoves: ["flareblitz", "substitute", "fireblast", "hiddenpowergrass", "hiddenpowerice", "crosschop", "thunderpunch", "focusblast"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["leer", "smog", "firepunch", "leer"]}, - {"generation": 3, "level": 36, "moves":["followme", "fireblast", "crosschop", "thunderpunch"]}, - {"generation": 4, "level": 30, "gender": "M", "nature": "Quiet", "moves":["smokescreen", "firespin", "confuseray", "firepunch"]}, - {"generation": 5, "level": 30, "isHidden": false, "moves":["smokescreen", "feintattack", "firespin", "confuseray"], "pokeball": "cherishball"}, - {"generation": 6, "level": 30, "gender": "M", "isHidden": true, "moves":["smokescreen", "firespin", "confuseray", "firepunch"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["leer", "smog", "firepunch", "ember"], "pokeball": "pokeball"}, + {"generation": 3, "level": 36, "moves": ["followme", "fireblast", "crosschop", "thunderpunch"]}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Quiet", "moves": ["smokescreen", "firespin", "confuseray", "firepunch"], "pokeball": "pokeball"}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["smokescreen", "feintattack", "firespin", "confuseray"], "pokeball": "cherishball"}, + {"generation": 6, "level": 30, "gender": "M", "isHidden": true, "moves": ["smokescreen", "firespin", "confuseray", "firepunch"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 34, "shiny": false}, + {"generation": 2, "level": 14}, + {"generation": 4, "level": 14}, + {"generation": 7, "level": 16}, ], tier: "NFE", }, @@ -1382,170 +1979,229 @@ exports.BattleFormatsData = { randomBattleMoves: ["fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerice", "thunderbolt", "earthquake", "substitute"], randomDoubleBattleMoves: ["fireblast", "taunt", "focusblast", "hiddenpowergrass", "hiddenpowerice", "thunderbolt", "heatwave", "willowisp", "protect", "followme"], eventPokemon: [ - {"generation": 4, "level": 50, "gender": "F", "nature": "Modest", "moves":["flamethrower", "psychic", "hyperbeam", "solarbeam"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Hardy", "moves":["confuseray", "firepunch", "lavaplume", "flamethrower"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "F", "nature": "Modest", "moves": ["flamethrower", "psychic", "hyperbeam", "solarbeam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Hardy", "moves": ["confuseray", "firepunch", "lavaplume", "flamethrower"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, pinsir: { randomBattleMoves: ["earthquake", "xscissor", "closecombat", "stoneedge", "stealthrock", "knockoff"], randomDoubleBattleMoves: ["protect", "swordsdance", "xscissor", "earthquake", "closecombat", "substitute", "rockslide"], eventPokemon: [ - {"generation": 3, "level": 35, "abilities":["hypercutter"], "moves":["helpinghand", "guillotine", "falseswipe", "submission"]}, - {"generation": 6, "level": 50, "gender": "F", "nature": "Adamant", "isHidden": false, "moves":["xscissor", "earthquake", "stoneedge", "return"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "nature": "Jolly", "isHidden": true, "moves":["earthquake", "swordsdance", "feint", "quickattack"], "pokeball": "cherishball"}, + {"generation": 3, "level": 35, "abilities": ["hypercutter"], "moves": ["helpinghand", "guillotine", "falseswipe", "submission"]}, + {"generation": 6, "level": 50, "gender": "F", "nature": "Adamant", "isHidden": false, "moves": ["xscissor", "earthquake", "stoneedge", "return"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Jolly", "isHidden": true, "moves": ["earthquake", "swordsdance", "feint", "quickattack"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 15, "shiny": false}, + {"generation": 1, "level": 20}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, pinsirmega: { randomBattleMoves: ["swordsdance", "earthquake", "closecombat", "quickattack", "return"], randomDoubleBattleMoves: ["feint", "protect", "swordsdance", "xscissor", "earthquake", "closecombat", "substitute", "quickattack", "return", "rockslide"], requiredItem: "Pinsirite", tier: "OU", + doublesTier: "(DUU)", }, tauros: { randomBattleMoves: ["rockclimb", "earthquake", "zenheadbutt", "rockslide", "doubleedge"], randomDoubleBattleMoves: ["return", "earthquake", "zenheadbutt", "rockslide", "stoneedge", "protect", "doubleedge"], eventPokemon: [ - {"generation": 3, "level": 25, "nature": "Docile", "ivs": {"hp": 14, "atk": 19, "def": 12, "spa": 17, "spd": 5, "spe": 26}, "abilities":["intimidate"], "moves":["rage", "hornattack", "scaryface", "pursuit"], "pokeball": "safariball"}, - {"generation": 3, "level": 10, "abilities":["intimidate"], "moves":["tackle", "tailwhip", "rage", "hornattack"]}, - {"generation": 3, "level": 46, "abilities":["intimidate"], "moves":["refresh", "earthquake", "tailwhip", "bodyslam"]}, + {"generation": 3, "level": 25, "nature": "Docile", "ivs": {"hp": 14, "atk": 19, "def": 12, "spa": 17, "spd": 5, "spe": 26}, "abilities": ["intimidate"], "moves": ["rage", "hornattack", "scaryface", "pursuit"], "pokeball": "safariball"}, + {"generation": 3, "level": 10, "abilities": ["intimidate"], "moves": ["tackle", "tailwhip", "rage", "hornattack"], "pokeball": "pokeball"}, + {"generation": 3, "level": 46, "abilities": ["intimidate"], "moves": ["refresh", "earthquake", "tailwhip", "bodyslam"]}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 21, "shiny": false}, + ], + tier: "PUBL", + doublesTier: "(DUU)", }, magikarp: { randomBattleMoves: ["bounce", "flail", "tackle", "hydropump"], eventPokemon: [ - {"generation": 4, "level": 5, "gender": "M", "nature": "Relaxed", "moves":["splash"]}, - {"generation": 4, "level": 6, "gender": "F", "nature": "Rash", "moves":["splash"]}, - {"generation": 4, "level": 7, "gender": "F", "nature": "Hardy", "moves":["splash"]}, - {"generation": 4, "level": 5, "gender": "F", "nature": "Lonely", "moves":["splash"]}, - {"generation": 4, "level": 4, "gender": "M", "nature": "Modest", "moves":["splash"]}, - {"generation": 5, "level": 99, "shiny": true, "gender": "M", "isHidden": false, "moves":["flail", "hydropump", "bounce", "splash"], "pokeball": "cherishball"}, - {"generation": 6, "level": 1, "shiny": 1, "isHidden": false, "moves":["splash", "celebrate", "happyhour"], "pokeball": "cherishball"}, - {"generation": 7, "level": 19, "shiny": true, "isHidden": false, "moves":["splash", "bounce"], "pokeball": "cherishball"}, + {"generation": 4, "level": 5, "gender": "M", "nature": "Relaxed", "moves": ["splash"], "pokeball": "pokeball"}, + {"generation": 4, "level": 6, "gender": "F", "nature": "Rash", "moves": ["splash"], "pokeball": "pokeball"}, + {"generation": 4, "level": 7, "gender": "F", "nature": "Hardy", "moves": ["splash"], "pokeball": "pokeball"}, + {"generation": 4, "level": 5, "gender": "F", "nature": "Lonely", "moves": ["splash"], "pokeball": "pokeball"}, + {"generation": 4, "level": 4, "gender": "M", "nature": "Modest", "moves": ["splash"], "pokeball": "pokeball"}, + {"generation": 5, "level": 99, "shiny": true, "gender": "M", "isHidden": false, "moves": ["flail", "hydropump", "bounce", "splash"], "pokeball": "cherishball"}, + {"generation": 6, "level": 1, "shiny": 1, "isHidden": false, "moves": ["splash", "celebrate", "happyhour"], "pokeball": "cherishball"}, + {"generation": 7, "level": 19, "shiny": true, "isHidden": false, "moves": ["splash", "bounce"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 5}, ], tier: "LC", }, gyarados: { - randomBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "rest", "sleeptalk", "dragontail", "stoneedge", "substitute"], + randomBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "dragontail", "stoneedge", "substitute"], randomDoubleBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "taunt", "protect", "thunderwave", "stoneedge", "substitute", "icefang"], eventPokemon: [ - {"generation": 6, "level": 50, "isHidden": false, "moves":["waterfall", "earthquake", "icefang", "dragondance"], "pokeball": "cherishball"}, - {"generation": 6, "level": 20, "shiny": true, "isHidden": false, "moves":["waterfall", "bite", "icefang", "ironhead"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "isHidden": false, "moves": ["waterfall", "earthquake", "icefang", "dragondance"], "pokeball": "cherishball"}, + {"generation": 6, "level": 20, "shiny": true, "isHidden": false, "moves": ["waterfall", "bite", "icefang", "ironhead"], "pokeball": "cherishball"}, ], - tier: "BL", + encounters: [ + {"generation": 1, "level": 15}, + {"generation": 2, "level": 15}, + {"generation": 3, "level": 5}, + {"generation": 4, "level": 10}, + {"generation": 5, "level": 1, "isHidden": false}, + {"generation": 7, "level": 10}, + ], + tier: "UUBL", + doublesTier: "DOU", }, gyaradosmega: { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "substitute", "icefang", "crunch"], randomDoubleBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "taunt", "protect", "thunderwave", "stoneedge", "substitute", "icefang", "crunch"], requiredItem: "Gyaradosite", tier: "OU", + doublesTier: "(DOU)", }, lapras: { randomBattleMoves: ["icebeam", "thunderbolt", "healbell", "toxic", "hydropump", "substitute"], randomDoubleBattleMoves: ["icebeam", "thunderbolt", "hydropump", "surf", "substitute", "protect", "iceshard", "icywind"], eventPokemon: [ - {"generation": 3, "level": 44, "moves":["hydropump", "raindance", "blizzard", "healbell"]}, + {"generation": 3, "level": 44, "moves": ["hydropump", "raindance", "blizzard", "healbell"]}, ], - tier: "PU", + encounters: [ + {"generation": 1, "level": 15}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, ditto: { randomBattleMoves: ["transform"], eventPokemon: [ - {"generation": 7, "level": 10, "isHidden": false, "moves":["transform"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "isHidden": false, "moves": ["transform"], "pokeball": "cherishball"}, ], - tier: "PU", + 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}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, eevee: { - randomBattleMoves: ["quickattack", "return", "bite", "batonpass", "irontail", "yawn", "protect", "wish"], + randomBattleMoves: ["quickattack", "return", "bite", "irontail", "yawn", "protect", "wish"], randomDoubleBattleMoves: ["quickattack", "return", "bite", "helpinghand", "irontail", "yawn", "protect", "wish"], eventPokemon: [ - {"generation": 4, "level": 10, "gender": "F", "nature": "Lonely", "abilities":["adaptability"], "moves":["covet", "bite", "helpinghand", "attract"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "shiny": true, "gender": "M", "nature": "Hardy", "abilities":["adaptability"], "moves":["irontail", "trumpcard", "flail", "quickattack"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "gender": "F", "nature": "Hardy", "isHidden": false, "abilities":["adaptability"], "moves":["sing", "return", "echoedvoice", "attract"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "sandattack", "babydolleyes", "swift"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "shiny": true, "isHidden": true, "moves":["swift", "quickattack", "babydolleyes", "helpinghand"], "pokeball": "cherishball"}, - {"generation": 7, "level": 10, "nature": "Jolly", "isHidden": false, "moves":["celebrate", "sandattack", "babydolleyes"], "pokeball": "cherishball"}, + {"generation": 4, "level": 10, "gender": "F", "nature": "Lonely", "abilities": ["adaptability"], "moves": ["covet", "bite", "helpinghand", "attract"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "shiny": true, "gender": "M", "nature": "Hardy", "abilities": ["adaptability"], "moves": ["irontail", "trumpcard", "flail", "quickattack"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "F", "nature": "Hardy", "isHidden": false, "abilities": ["adaptability"], "moves": ["sing", "return", "echoedvoice", "attract"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "sandattack", "babydolleyes", "swift"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "shiny": true, "isHidden": true, "moves": ["swift", "quickattack", "babydolleyes", "helpinghand"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "nature": "Jolly", "isHidden": false, "moves": ["celebrate", "sandattack", "babydolleyes"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 25}, ], tier: "LC", }, + eeveestarter: { + eventPokemon: [ + {"generation": 7, "level": 5, "perfectIVs": 6, "moves": ["tackle", "tailwhip", "growl"], "pokeball": "pokeball"}, + ], + eventOnly: true, + isNonstandard: true, + tier: "Illegal", + }, vaporeon: { - randomBattleMoves: ["wish", "protect", "scald", "roar", "icebeam", "healbell", "batonpass"], + randomBattleMoves: ["wish", "protect", "scald", "roar", "icebeam", "healbell"], randomDoubleBattleMoves: ["helpinghand", "wish", "protect", "scald", "muddywater", "icebeam", "toxic", "hydropump"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "watergun"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves":["scald", "icebeam", "raindance", "rest"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "watergun"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves": ["scald", "icebeam", "raindance", "rest"], "pokeball": "cherishball"}, ], tier: "NU", + doublesTier: "(DUU)", }, jolteon: { - randomBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowerice", "batonpass", "substitute", "signalbeam"], + randomBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowerice", "shadowball", "signalbeam"], randomDoubleBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowergrass", "hiddenpowerice", "helpinghand", "protect", "substitute", "signalbeam"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "thundershock"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": false, "moves":["thunderbolt", "shadowball", "lightscreen", "voltswitch"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "thundershock"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": false, "moves": ["thunderbolt", "shadowball", "lightscreen", "voltswitch"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "(DUU)", }, flareon: { - randomBattleMoves: ["flamecharge", "facade", "flareblitz", "superpower", "quickattack", "batonpass"], + randomBattleMoves: ["flamecharge", "facade", "flareblitz", "superpower", "quickattack"], randomDoubleBattleMoves: ["flamecharge", "facade", "flareblitz", "superpower", "wish", "protect", "helpinghand"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "ember"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves":["flareblitz", "facade", "willowisp", "quickattack"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "ember"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves": ["flareblitz", "facade", "willowisp", "quickattack"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, espeon: { - randomBattleMoves: ["psychic", "psyshock", "substitute", "shadowball", "calmmind", "morningsun", "batonpass", "dazzlinggleam"], + randomBattleMoves: ["psychic", "psyshock", "substitute", "shadowball", "calmmind", "morningsun", "dazzlinggleam"], randomDoubleBattleMoves: ["psychic", "psyshock", "substitute", "wish", "shadowball", "hiddenpowerfighting", "helpinghand", "protect", "dazzlinggleam"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["psybeam", "psychup", "psychic", "morningsun"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "confusion"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves":["psychic", "dazzlinggleam", "shadowball", "reflect"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["psybeam", "psychup", "psychic", "morningsun"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "confusion"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves": ["psychic", "dazzlinggleam", "shadowball", "reflect"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "(DUU)", }, umbreon: { randomBattleMoves: ["wish", "protect", "healbell", "toxic", "foulplay"], randomDoubleBattleMoves: ["moonlight", "wish", "protect", "healbell", "snarl", "foulplay", "helpinghand"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["feintattack", "meanlook", "screech", "moonlight"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "pursuit"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": false, "moves":["snarl", "toxic", "protect", "moonlight"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["feintattack", "meanlook", "screech", "moonlight"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "pursuit"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": false, "moves": ["snarl", "toxic", "protect", "moonlight"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "(DUU)", }, leafeon: { - randomBattleMoves: ["swordsdance", "leafblade", "substitute", "xscissor", "synthesis", "batonpass", "knockoff"], + randomBattleMoves: ["swordsdance", "leafblade", "healbell", "xscissor", "synthesis", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "leafblade", "substitute", "xscissor", "protect", "helpinghand", "knockoff"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "razorleaf"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves":["leafblade", "swordsdance", "sunnyday", "synthesis"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "razorleaf"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves": ["leafblade", "swordsdance", "sunnyday", "synthesis"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, glaceon: { randomBattleMoves: ["icebeam", "hiddenpowerground", "shadowball", "healbell", "wish", "protect", "toxic"], randomDoubleBattleMoves: ["icebeam", "hiddenpowerground", "shadowball", "wish", "protect", "healbell", "helpinghand"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tailwhip", "tackle", "helpinghand", "sandattack"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "tailwhip", "sandattack", "icywind"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": false, "moves":["blizzard", "shadowball", "hail", "auroraveil"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tailwhip", "tackle", "helpinghand", "sandattack"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "tailwhip", "sandattack", "icywind"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": false, "moves": ["blizzard", "shadowball", "hail", "auroraveil"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, porygon: { randomBattleMoves: ["triattack", "icebeam", "recover", "toxic", "thunderwave", "discharge", "trick"], eventPokemon: [ - {"generation": 5, "level": 10, "isHidden": true, "moves":["tackle", "conversion", "sharpen", "psybeam"]}, + {"generation": 5, "level": 10, "isHidden": true, "moves": ["tackle", "conversion", "sharpen", "psybeam"]}, + ], + encounters: [ + {"generation": 1, "level": 18}, ], tier: "LC Uber", }, @@ -1553,56 +2209,71 @@ exports.BattleFormatsData = { randomBattleMoves: ["triattack", "icebeam", "recover", "toxic", "thunderwave", "thunderbolt"], randomDoubleBattleMoves: ["triattack", "icebeam", "discharge", "shadowball", "thunderbolt", "protect", "recover"], tier: "RU", + doublesTier: "DOU", }, porygonz: { randomBattleMoves: ["triattack", "shadowball", "icebeam", "thunderbolt", "conversion", "trick", "nastyplot"], randomDoubleBattleMoves: ["protect", "triattack", "darkpulse", "hiddenpowerfighting", "icebeam", "thunderbolt", "agility", "trick", "nastyplot"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, omanyte: { randomBattleMoves: ["shellsmash", "surf", "icebeam", "earthpower", "hiddenpowerelectric", "spikes", "toxicspikes", "stealthrock", "hydropump"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities":["swiftswim"], "moves":["bubblebeam", "supersonic", "withdraw", "bite"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities": ["swiftswim"], "moves": ["bubblebeam", "supersonic", "withdraw", "bite"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 30}, ], tier: "LC", }, omastar: { randomBattleMoves: ["shellsmash", "scald", "icebeam", "earthpower", "spikes", "stealthrock", "hydropump"], randomDoubleBattleMoves: ["shellsmash", "muddywater", "icebeam", "earthpower", "hiddenpowerelectric", "protect", "hydropump"], - tier: "NU", + tier: "PU", + doublesTier: "(DUU)", }, kabuto: { randomBattleMoves: ["aquajet", "rockslide", "rapidspin", "stealthrock", "honeclaws", "waterfall", "toxic"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities":["battlearmor"], "moves":["confuseray", "dig", "scratch", "harden"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities": ["battlearmor"], "moves": ["confuseray", "dig", "scratch", "harden"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 30}, ], tier: "LC", }, kabutops: { - randomBattleMoves: ["aquajet", "stoneedge", "rapidspin", "swordsdance", "waterfall", "knockoff"], - randomDoubleBattleMoves: ["aquajet", "stoneedge", "protect", "rockslide", "swordsdance", "waterfall", "superpower", "knockoff"], + randomBattleMoves: ["aquajet", "stoneedge", "rapidspin", "swordsdance", "liquidation", "knockoff"], + randomDoubleBattleMoves: ["aquajet", "stoneedge", "protect", "rockslide", "swordsdance", "liquidation", "superpower", "knockoff"], tier: "PU", + doublesTier: "(DUU)", }, aerodactyl: { randomBattleMoves: ["stealthrock", "taunt", "stoneedge", "earthquake", "defog", "roost", "doubleedge"], randomDoubleBattleMoves: ["wideguard", "taunt", "stoneedge", "rockslide", "earthquake", "aquatail", "protect", "icefang", "skydrop", "tailwind"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities":["pressure"], "moves":["steelwing", "icefang", "firefang", "thunderfang"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities": ["pressure"], "moves": ["steelwing", "icefang", "firefang", "thunderfang"], "pokeball": "cherishball"}, ], - tier: "RU", + encounters: [ + {"generation": 1, "level": 30}, + ], + tier: "NU", + doublesTier: "(DUU)", }, aerodactylmega: { randomBattleMoves: ["aquatail", "pursuit", "honeclaws", "stoneedge", "firefang", "aerialace", "roost"], randomDoubleBattleMoves: ["wideguard", "taunt", "stoneedge", "rockslide", "earthquake", "ironhead", "aerialace", "protect", "icefang", "skydrop", "tailwind"], requiredItem: "Aerodactylite", tier: "UU", + doublesTier: "DUU", }, munchlax: { randomBattleMoves: ["rest", "curse", "sleeptalk", "bodyslam", "earthquake", "return", "firepunch", "icepunch", "whirlwind", "toxic"], eventPokemon: [ - {"generation": 4, "level": 5, "moves":["metronome", "tackle", "defensecurl", "selfdestruct"]}, - {"generation": 4, "level": 5, "gender": "F", "nature": "Relaxed", "abilities":["thickfat"], "moves":["metronome", "odorsleuth", "tackle", "curse"], "pokeball": "cherishball"}, - {"generation": 7, "level": 5, "isHidden": false, "abilities":["thickfat"], "moves":["tackle", "metronome", "holdback", "happyhour"], "pokeball": "cherishball"}, + {"generation": 4, "level": 5, "moves": ["metronome", "tackle", "defensecurl", "selfdestruct"]}, + {"generation": 4, "level": 5, "gender": "F", "nature": "Relaxed", "abilities": ["thickfat"], "moves": ["metronome", "odorsleuth", "tackle", "curse"], "pokeball": "cherishball"}, + {"generation": 7, "level": 5, "isHidden": false, "abilities": ["thickfat"], "moves": ["tackle", "metronome", "holdback", "happyhour"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -1610,144 +2281,187 @@ exports.BattleFormatsData = { randomBattleMoves: ["rest", "curse", "sleeptalk", "bodyslam", "earthquake", "return", "firepunch", "crunch", "pursuit", "whirlwind"], randomDoubleBattleMoves: ["curse", "protect", "bodyslam", "earthquake", "return", "firepunch", "icepunch", "crunch", "selfdestruct"], eventPokemon: [ - {"generation": 3, "level": 43, "moves":["refresh", "fissure", "curse", "bodyslam"]}, + {"generation": 3, "level": 43, "moves": ["refresh", "fissure", "curse", "bodyslam"]}, + {"generation": 7, "level": 30, "isHidden": false, "abilities": ["thickfat"], "moves": ["sunnyday", "block", "bodyslam", "celebrate"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 1, "level": 30}, ], tier: "RU", + doublesTier: "DUber", }, articuno: { randomBattleMoves: ["icebeam", "roost", "freezedry", "toxic", "substitute", "hurricane"], randomDoubleBattleMoves: ["freezedry", "roost", "protect", "substitute", "hurricane", "tailwind"], eventPokemon: [ - {"generation": 3, "level": 50, "shiny": 1, "moves":["mist", "agility", "mindreader", "icebeam"]}, - {"generation": 3, "level": 70, "moves":["agility", "mindreader", "icebeam", "reflect"]}, - {"generation": 3, "level": 50, "moves":["icebeam", "healbell", "extrasensory", "haze"]}, - {"generation": 4, "level": 60, "shiny": 1, "moves":["agility", "icebeam", "reflect", "roost"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["mist", "agility", "mindreader", "icebeam"]}, - {"generation": 6, "level": 70, "isHidden": false, "moves":["icebeam", "reflect", "hail", "tailwind"]}, - {"generation": 6, "level": 70, "isHidden": true, "moves":["freezedry", "icebeam", "hail", "reflect"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["mist", "agility", "mindreader", "icebeam"]}, + {"generation": 3, "level": 70, "moves": ["agility", "mindreader", "icebeam", "reflect"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["icebeam", "healbell", "extrasensory", "haze"]}, + {"generation": 4, "level": 60, "shiny": 1, "moves": ["agility", "icebeam", "reflect", "roost"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["mist", "agility", "mindreader", "icebeam"]}, + {"generation": 6, "level": 70, "isHidden": false, "moves": ["icebeam", "reflect", "hail", "tailwind"]}, + {"generation": 6, "level": 70, "isHidden": true, "moves": ["freezedry", "icebeam", "hail", "reflect"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["ancientpower", "freezedry", "reflect", "hail"]}, + ], + encounters: [ + {"generation": 1, "level": 50}, ], eventOnly: true, tier: "PU", + doublesTier: "(DUU)", }, zapdos: { randomBattleMoves: ["thunderbolt", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn", "defog"], randomDoubleBattleMoves: ["thunderbolt", "heatwave", "hiddenpowergrass", "hiddenpowerice", "tailwind", "protect", "discharge"], eventPokemon: [ - {"generation": 3, "level": 50, "shiny": 1, "moves":["thunderwave", "agility", "detect", "drillpeck"]}, - {"generation": 3, "level": 70, "moves":["agility", "detect", "drillpeck", "charge"]}, - {"generation": 3, "level": 50, "moves":["thunderbolt", "extrasensory", "batonpass", "metalsound"]}, - {"generation": 4, "level": 60, "shiny": 1, "moves":["charge", "agility", "discharge", "roost"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["thunderwave", "agility", "detect", "drillpeck"]}, - {"generation": 6, "level": 70, "isHidden": false, "moves":["agility", "discharge", "raindance", "lightscreen"]}, - {"generation": 6, "level": 70, "isHidden": true, "moves":["discharge", "thundershock", "raindance", "agility"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["thunderwave", "agility", "detect", "drillpeck"]}, + {"generation": 3, "level": 70, "moves": ["agility", "detect", "drillpeck", "charge"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["thunderbolt", "extrasensory", "batonpass", "metalsound"]}, + {"generation": 4, "level": 60, "shiny": 1, "moves": ["charge", "agility", "discharge", "roost"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["thunderwave", "agility", "detect", "drillpeck"]}, + {"generation": 6, "level": 70, "isHidden": false, "moves": ["agility", "discharge", "raindance", "lightscreen"]}, + {"generation": 6, "level": 70, "isHidden": true, "moves": ["discharge", "thundershock", "raindance", "agility"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["ancientpower", "discharge", "pluck", "raindance"]}, + ], + encounters: [ + {"generation": 1, "level": 50}, ], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, moltres: { - randomBattleMoves: ["fireblast", "hiddenpowergrass", "roost", "substitute", "toxic", "willowisp", "hurricane"], - randomDoubleBattleMoves: ["fireblast", "hiddenpowergrass", "airslash", "roost", "substitute", "protect", "uturn", "willowisp", "hurricane", "heatwave", "tailwind"], + randomBattleMoves: ["fireblast", "roost", "substitute", "toxic", "willowisp", "hurricane"], + randomDoubleBattleMoves: ["fireblast", "airslash", "roost", "substitute", "protect", "uturn", "willowisp", "hurricane", "heatwave", "tailwind"], eventPokemon: [ - {"generation": 3, "level": 50, "shiny": 1, "moves":["firespin", "agility", "endure", "flamethrower"]}, - {"generation": 3, "level": 70, "moves":["agility", "endure", "flamethrower", "safeguard"]}, - {"generation": 3, "level": 50, "moves":["extrasensory", "morningsun", "willowisp", "flamethrower"]}, - {"generation": 4, "level": 60, "shiny": 1, "moves":["flamethrower", "safeguard", "airslash", "roost"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["firespin", "agility", "endure", "flamethrower"]}, - {"generation": 6, "level": 70, "isHidden": false, "moves":["safeguard", "airslash", "sunnyday", "heatwave"]}, - {"generation": 6, "level": 70, "isHidden": true, "moves":["skyattack", "heatwave", "sunnyday", "safeguard"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["firespin", "agility", "endure", "flamethrower"]}, + {"generation": 3, "level": 70, "moves": ["agility", "endure", "flamethrower", "safeguard"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["extrasensory", "morningsun", "willowisp", "flamethrower"]}, + {"generation": 4, "level": 60, "shiny": 1, "moves": ["flamethrower", "safeguard", "airslash", "roost"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["firespin", "agility", "endure", "flamethrower"]}, + {"generation": 6, "level": 70, "isHidden": false, "moves": ["safeguard", "airslash", "sunnyday", "heatwave"]}, + {"generation": 6, "level": 70, "isHidden": true, "moves": ["skyattack", "heatwave", "sunnyday", "safeguard"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["ancientpower", "flamethrower", "airslash", "sunnyday"]}, + ], + encounters: [ + {"generation": 1, "level": 50}, ], eventOnly: true, - tier: "BL3", + tier: "UU", + doublesTier: "(DUU)", }, dratini: { randomBattleMoves: ["dragondance", "outrage", "waterfall", "fireblast", "extremespeed", "dracometeor", "substitute"], + encounters: [ + {"generation": 1, "level": 10}, + ], tier: "LC", }, dragonair: { randomBattleMoves: ["dragondance", "outrage", "waterfall", "fireblast", "extremespeed", "dracometeor", "substitute"], + encounters: [ + {"generation": 1, "level": 15}, + {"generation": 2, "level": 10}, + {"generation": 3, "level": 25, "pokeball": "safariball"}, + {"generation": 4, "level": 15}, + {"generation": 7, "level": 10}, + ], tier: "NFE", }, dragonite: { randomBattleMoves: ["dragondance", "outrage", "firepunch", "extremespeed", "earthquake", "roost"], randomDoubleBattleMoves: ["dragondance", "firepunch", "extremespeed", "dragonclaw", "earthquake", "roost", "substitute", "superpower", "dracometeor", "protect", "skydrop"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["agility", "safeguard", "wingattack", "outrage"]}, - {"generation": 3, "level": 55, "moves":["healbell", "hyperbeam", "dragondance", "earthquake"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Mild", "moves":["dracometeor", "thunderbolt", "outrage", "dragondance"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "gender": "M", "isHidden": true, "moves":["extremespeed", "firepunch", "dragondance", "outrage"], "pokeball": "cherishball"}, - {"generation": 5, "level": 55, "gender": "M", "isHidden": true, "moves":["dragonrush", "safeguard", "wingattack", "thunderpunch"]}, - {"generation": 5, "level": 55, "gender": "M", "isHidden": true, "moves":["dragonrush", "safeguard", "wingattack", "extremespeed"]}, - {"generation": 5, "level": 50, "gender": "M", "nature": "Brave", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves":["fireblast", "safeguard", "outrage", "hyperbeam"], "pokeball": "cherishball"}, - {"generation": 6, "level": 55, "gender": "M", "isHidden": true, "moves":["dragondance", "outrage", "hurricane", "extremespeed"], "pokeball": "cherishball"}, - {"generation": 6, "level": 62, "gender": "M", "ivs": {"hp": 31, "def": 31, "spa": 31, "spd": 31}, "isHidden": false, "moves":["agility", "slam", "barrier", "hyperbeam"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["agility", "safeguard", "wingattack", "outrage"], "pokeball": "pokeball"}, + {"generation": 3, "level": 55, "moves": ["healbell", "hyperbeam", "dragondance", "earthquake"]}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Mild", "moves": ["dracometeor", "thunderbolt", "outrage", "dragondance"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": true, "moves": ["extremespeed", "firepunch", "dragondance", "outrage"], "pokeball": "cherishball"}, + {"generation": 5, "level": 55, "gender": "M", "isHidden": true, "moves": ["dragonrush", "safeguard", "wingattack", "thunderpunch"]}, + {"generation": 5, "level": 55, "gender": "M", "isHidden": true, "moves": ["dragonrush", "safeguard", "wingattack", "extremespeed"]}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Brave", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves": ["fireblast", "safeguard", "outrage", "hyperbeam"], "pokeball": "cherishball"}, + {"generation": 6, "level": 55, "gender": "M", "isHidden": true, "moves": ["dragondance", "outrage", "hurricane", "extremespeed"], "pokeball": "cherishball"}, + {"generation": 6, "level": 62, "gender": "M", "ivs": {"hp": 31, "def": 31, "spa": 31, "spd": 31}, "isHidden": false, "moves": ["agility", "slam", "barrier", "hyperbeam"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 5, "level": 50, "isHidden": false}, + {"generation": 7, "level": 10}, ], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, mewtwo: { randomBattleMoves: ["psystrike", "aurasphere", "fireblast", "icebeam", "calmmind", "recover"], randomDoubleBattleMoves: ["psystrike", "aurasphere", "fireblast", "icebeam", "calmmind", "substitute", "recover", "thunderbolt", "willowisp", "taunt", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "shiny": 1, "moves":["swift", "recover", "safeguard", "psychic"]}, - {"generation": 4, "level": 70, "shiny": 1, "moves":["psychocut", "amnesia", "powerswap", "guardswap"]}, - {"generation": 5, "level": 70, "isHidden": false, "moves":["psystrike", "shadowball", "aurasphere", "electroball"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "nature": "Timid", "ivs": {"spa": 31, "spe": 31}, "isHidden": true, "moves":["psystrike", "icebeam", "healpulse", "hurricane"], "pokeball": "cherishball"}, - {"generation": 6, "level": 70, "isHidden": false, "moves":["recover", "psychic", "barrier", "aurasphere"]}, - {"generation": 6, "level": 100, "shiny": true, "isHidden": true, "moves":["psystrike", "psychic", "recover", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "shiny": 1, "moves": ["swift", "recover", "safeguard", "psychic"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["psychocut", "amnesia", "powerswap", "guardswap"]}, + {"generation": 5, "level": 70, "isHidden": false, "moves": ["psystrike", "shadowball", "aurasphere", "electroball"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "nature": "Timid", "ivs": {"spa": 31, "spe": 31}, "isHidden": true, "moves": ["psystrike", "icebeam", "healpulse", "hurricane"], "pokeball": "cherishball"}, + {"generation": 6, "level": 70, "isHidden": false, "moves": ["recover", "psychic", "barrier", "aurasphere"]}, + {"generation": 6, "level": 100, "shiny": true, "isHidden": true, "moves": ["psystrike", "psychic", "recover", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["psychic", "recover", "swift", "psychocut"]}, + ], + encounters: [ + {"generation": 1, "level": 70}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, mewtwomegax: { randomBattleMoves: ["bulkup", "drainpunch", "earthquake", "taunt", "stoneedge", "zenheadbutt", "icebeam"], randomDoubleBattleMoves: ["bulkup", "drainpunch", "earthquake", "taunt", "stoneedge", "zenheadbutt", "icebeam"], requiredItem: "Mewtwonite X", tier: "Uber", + doublesTier: "DUber", }, mewtwomegay: { randomBattleMoves: ["psystrike", "aurasphere", "shadowball", "fireblast", "icebeam", "calmmind", "recover", "willowisp", "taunt"], randomDoubleBattleMoves: ["psystrike", "aurasphere", "shadowball", "fireblast", "icebeam", "calmmind", "recover", "willowisp", "taunt"], requiredItem: "Mewtwonite Y", tier: "Uber", + doublesTier: "DUber", }, mew: { - randomBattleMoves: ["defog", "roost", "willowisp", "knockoff", "taunt", "icebeam", "earthpower", "aurasphere", "stealthrock", "nastyplot", "psyshock", "batonpass"], + randomBattleMoves: ["defog", "roost", "willowisp", "knockoff", "taunt", "icebeam", "earthpower", "aurasphere", "stealthrock", "nastyplot", "psyshock"], randomDoubleBattleMoves: ["taunt", "willowisp", "transform", "roost", "psyshock", "nastyplot", "aurasphere", "fireblast", "icebeam", "thunderbolt", "protect", "fakeout", "helpinghand", "tailwind"], eventPokemon: [ - {"generation": 3, "level": 30, "shiny": 1, "moves":["pound", "transform", "megapunch", "metronome"]}, - {"generation": 3, "level": 10, "moves":["pound", "transform"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["fakeout"]}, - {"generation": 3, "level": 10, "moves":["fakeout"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["feintattack"]}, - {"generation": 3, "level": 10, "moves":["feintattack"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["hypnosis"]}, - {"generation": 3, "level": 10, "moves":["hypnosis"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["nightshade"]}, - {"generation": 3, "level": 10, "moves":["nightshade"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["roleplay"]}, - {"generation": 3, "level": 10, "moves":["roleplay"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["zapcannon"]}, - {"generation": 3, "level": 10, "moves":["zapcannon"]}, - {"generation": 4, "level": 50, "moves":["ancientpower", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["barrier", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["megapunch", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["amnesia", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["transform", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["psychic", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["synthesis", "return", "hypnosis", "teleport"], "pokeball": "cherishball"}, - {"generation": 4, "level": 5, "moves":["pound"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["pound"], "pokeball": "cherishball"}, - {"generation": 7, "level": 5, "moves":["pound"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "moves":["psychic", "barrier", "metronome", "transform"], "pokeball": "cherishball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["pound", "transform", "megapunch", "metronome"]}, + {"generation": 3, "level": 10, "moves": ["pound", "transform"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["fakeout"]}, + {"generation": 3, "level": 10, "moves": ["fakeout"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["feintattack"]}, + {"generation": 3, "level": 10, "moves": ["feintattack"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["hypnosis"]}, + {"generation": 3, "level": 10, "moves": ["hypnosis"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["nightshade"]}, + {"generation": 3, "level": 10, "moves": ["nightshade"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["roleplay"]}, + {"generation": 3, "level": 10, "moves": ["roleplay"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["zapcannon"]}, + {"generation": 3, "level": 10, "moves": ["zapcannon"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["ancientpower", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["barrier", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["megapunch", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["amnesia", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["transform", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["psychic", "metronome", "teleport", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["synthesis", "return", "hypnosis", "teleport"], "pokeball": "cherishball"}, + {"generation": 4, "level": 5, "moves": ["pound"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["pound"], "pokeball": "cherishball"}, + {"generation": 7, "level": 5, "perfectIVs": 5, "moves": ["pound"], "pokeball": "pokeball"}, + {"generation": 7, "level": 50, "moves": ["psychic", "barrier", "metronome", "transform"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, chikorita: { randomBattleMoves: ["reflect", "lightscreen", "aromatherapy", "grasswhistle", "leechseed", "toxic", "gigadrain", "synthesis"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "growl", "razorleaf"]}, - {"generation": 3, "level": 5, "moves":["tackle", "growl", "ancientpower", "frenzyplant"]}, - {"generation": 6, "level": 5, "isHidden": false, "moves":["tackle", "growl"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "growl", "razorleaf"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "moves": ["tackle", "growl", "ancientpower", "frenzyplant"], "pokeball": "pokeball"}, + {"generation": 6, "level": 5, "isHidden": false, "moves": ["tackle", "growl"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -1759,16 +2473,17 @@ exports.BattleFormatsData = { randomBattleMoves: ["reflect", "lightscreen", "aromatherapy", "leechseed", "toxic", "gigadrain", "synthesis", "dragontail"], randomDoubleBattleMoves: ["reflect", "lightscreen", "leechseed", "leafstorm", "gigadrain", "synthesis", "dragontail", "healpulse", "toxic", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "isHidden": true, "moves":["solarbeam", "sunnyday", "synthesis", "bodyslam"]}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["solarbeam", "sunnyday", "synthesis", "bodyslam"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, cyndaquil: { randomBattleMoves: ["eruption", "fireblast", "flamethrower", "hiddenpowergrass", "hiddenpowerice"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "leer", "smokescreen"]}, - {"generation": 3, "level": 5, "moves":["tackle", "leer", "reversal", "blastburn"]}, - {"generation": 6, "level": 5, "isHidden": false, "moves":["tackle", "leer"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "leer", "smokescreen"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "moves": ["tackle", "leer", "reversal", "blastburn"], "pokeball": "pokeball"}, + {"generation": 6, "level": 5, "isHidden": false, "moves": ["tackle", "leer"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -1780,17 +2495,18 @@ exports.BattleFormatsData = { randomBattleMoves: ["eruption", "fireblast", "hiddenpowergrass", "extrasensory", "focusblast"], randomDoubleBattleMoves: ["eruption", "fireblast", "hiddenpowergrass", "extrasensory", "focusblast", "heatwave", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["quickattack", "flamewheel", "swift", "flamethrower"]}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["overheat", "flamewheel", "flamecharge", "swift"]}, + {"generation": 3, "level": 70, "moves": ["quickattack", "flamewheel", "swift", "flamethrower"], "pokeball": "pokeball"}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["overheat", "flamewheel", "flamecharge", "swift"], "pokeball": "pokeball"}, ], - tier: "NU", + tier: "PUBL", + doublesTier: "(DUU)", }, totodile: { randomBattleMoves: ["aquajet", "waterfall", "crunch", "icepunch", "superpower", "dragondance", "swordsdance"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "leer", "rage"]}, - {"generation": 3, "level": 5, "moves":["scratch", "leer", "crunch", "hydrocannon"]}, - {"generation": 6, "level": 5, "isHidden": false, "moves":["scratch", "leer"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "leer", "rage"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "moves": ["scratch", "leer", "crunch", "hydrocannon"], "pokeball": "pokeball"}, + {"generation": 6, "level": 5, "isHidden": false, "moves": ["scratch", "leer"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -1799,57 +2515,92 @@ exports.BattleFormatsData = { tier: "NFE", }, feraligatr: { - randomBattleMoves: ["aquajet", "waterfall", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake"], - randomDoubleBattleMoves: ["aquajet", "waterfall", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake", "protect"], + randomBattleMoves: ["aquajet", "liquidation", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake"], + randomDoubleBattleMoves: ["aquajet", "liquidation", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "isHidden": true, "moves":["icepunch", "crunch", "waterfall", "screech"]}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["icepunch", "crunch", "waterfall", "screech"], "pokeball": "pokeball"}, ], tier: "RU", + doublesTier: "(DUU)", }, sentret: { randomBattleMoves: ["superfang", "trick", "toxic", "uturn", "knockoff"], + encounters: [ + {"generation": 2, "level": 2}, + ], tier: "LC", }, furret: { randomBattleMoves: ["uturn", "trick", "aquatail", "firepunch", "knockoff", "doubleedge"], randomDoubleBattleMoves: ["uturn", "suckerpunch", "icepunch", "firepunch", "knockoff", "doubleedge", "superfang", "followme", "helpinghand", "protect"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 6}, + {"generation": 4, "level": 6}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, hoothoot: { randomBattleMoves: ["reflect", "toxic", "roost", "whirlwind", "nightshade", "magiccoat"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "growl", "foresight"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "growl", "foresight"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 2, "level": 2}, ], tier: "LC", }, noctowl: { - randomBattleMoves: ["roost", "whirlwind", "airslash", "nightshade", "toxic", "defog"], + randomBattleMoves: ["roost", "whirlwind", "nightshade", "toxic", "defog", "hurricane", "heatwave"], randomDoubleBattleMoves: ["roost", "tailwind", "airslash", "hypervoice", "heatwave", "protect", "hypnosis"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 7}, + {"generation": 4, "level": 5}, + {"generation": 7, "level": 19}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, ledyba: { - randomBattleMoves: ["roost", "agility", "lightscreen", "encore", "reflect", "knockoff", "swordsdance", "batonpass", "toxic"], + randomBattleMoves: ["roost", "lightscreen", "encore", "reflect", "knockoff", "toxic"], eventPokemon: [ - {"generation": 3, "level": 10, "moves":["refresh", "psybeam", "aerialace", "supersonic"]}, + {"generation": 3, "level": 10, "moves": ["refresh", "psybeam", "aerialace", "supersonic"]}, + ], + encounters: [ + {"generation": 2, "level": 3}, ], tier: "LC", }, ledian: { randomBattleMoves: ["roost", "lightscreen", "encore", "reflect", "knockoff", "toxic", "uturn"], randomDoubleBattleMoves: ["protect", "lightscreen", "encore", "reflect", "knockoff", "bugbuzz", "uturn", "tailwind"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 7}, + {"generation": 4, "level": 5}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, spinarak: { - randomBattleMoves: ["agility", "toxic", "xscissor", "toxicspikes", "poisonjab", "batonpass", "stickyweb"], + randomBattleMoves: ["toxic", "lunge", "toxicspikes", "poisonjab", "stickyweb"], eventPokemon: [ - {"generation": 3, "level": 14, "moves":["refresh", "dig", "signalbeam", "nightshade"]}, + {"generation": 3, "level": 14, "moves": ["refresh", "dig", "signalbeam", "nightshade"]}, + ], + encounters: [ + {"generation": 2, "level": 3}, ], tier: "LC", }, ariados: { randomBattleMoves: ["megahorn", "toxicspikes", "poisonjab", "suckerpunch", "stickyweb"], randomDoubleBattleMoves: ["protect", "megahorn", "stringshot", "poisonjab", "stickyweb", "ragepowder"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 7}, + {"generation": 4, "level": 5}, + {"generation": 6, "level": 19, "maxEggMoves": 1}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, chinchou: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowergrass", "hydropump", "icebeam", "surf", "thunderwave", "scald", "discharge", "healbell"], @@ -1858,64 +2609,83 @@ exports.BattleFormatsData = { lanturn: { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "hydropump", "icebeam", "thunderwave", "scald", "thunderbolt", "healbell", "toxic"], randomDoubleBattleMoves: ["thunderbolt", "hiddenpowergrass", "hydropump", "icebeam", "thunderwave", "scald", "discharge", "protect", "surf"], + encounters: [ + {"generation": 4, "level": 20}, + {"generation": 6, "level": 26, "maxEggMoves": 1}, + {"generation": 7, "level": 10}, + ], tier: "PU", + doublesTier: "(DUU)", }, togepi: { randomBattleMoves: ["protect", "fireblast", "toxic", "thunderwave", "softboiled", "dazzlinggleam"], eventPokemon: [ - {"generation": 3, "level": 20, "gender": "F", "abilities":["serenegrace"], "moves":["metronome", "charm", "sweetkiss", "yawn"]}, - {"generation": 3, "level": 25, "moves":["triattack", "followme", "ancientpower", "helpinghand"]}, + {"generation": 3, "level": 20, "gender": "F", "abilities": ["serenegrace"], "moves": ["metronome", "charm", "sweetkiss", "yawn"], "pokeball": "pokeball"}, + {"generation": 3, "level": 25, "moves": ["triattack", "followme", "ancientpower", "helpinghand"]}, ], tier: "LC", }, togetic: { - randomBattleMoves: ["nastyplot", "dazzlinggleam", "fireblast", "batonpass", "roost", "defog", "toxic", "thunderwave", "healbell"], + randomBattleMoves: ["nastyplot", "dazzlinggleam", "fireblast", "roost", "defog", "toxic", "thunderwave", "healbell"], tier: "NFE", }, togekiss: { - randomBattleMoves: ["roost", "thunderwave", "nastyplot", "airslash", "aurasphere", "batonpass", "healbell", "defog"], + randomBattleMoves: ["roost", "thunderwave", "nastyplot", "airslash", "aurasphere", "healbell", "defog"], randomDoubleBattleMoves: ["roost", "thunderwave", "nastyplot", "airslash", "followme", "dazzlinggleam", "tailwind", "protect"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["extremespeed", "aurasphere", "airslash", "present"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["extremespeed", "aurasphere", "airslash", "present"]}, ], tier: "UU", + doublesTier: "DUU", }, natu: { randomBattleMoves: ["thunderwave", "roost", "toxic", "reflect", "lightscreen", "uturn", "wish", "psychic", "nightshade"], eventPokemon: [ - {"generation": 3, "level": 22, "moves":["batonpass", "futuresight", "nightshade", "aerialace"]}, + {"generation": 3, "level": 22, "moves": ["batonpass", "futuresight", "nightshade", "aerialace"]}, ], tier: "LC", }, xatu: { - randomBattleMoves: ["thunderwave", "toxic", "roost", "psychic", "uturn", "reflect", "lightscreen", "nightshade", "heatwave"], + randomBattleMoves: ["thunderwave", "toxic", "roost", "psychic", "uturn", "reflect", "calmmind", "nightshade", "heatwave"], randomDoubleBattleMoves: ["thunderwave", "tailwind", "roost", "psychic", "uturn", "reflect", "lightscreen", "grassknot", "heatwave", "protect"], + encounters: [ + {"generation": 2, "level": 15, "shiny": false}, + {"generation": 4, "level": 16, "shiny": false, "gender": "M", "nature": "Modest", "ivs": {"hp": 15, "atk": 20, "def": 15, "spa": 20, "spd": 20, "spe": 20}, "abilities": ["synchronize"], "pokeball": "pokeball"}, + {"generation": 6, "level": 24, "maxEggMoves": 1}, + {"generation": 7, "level": 21}, + ], tier: "NU", + doublesTier: "(DUU)", }, mareep: { randomBattleMoves: ["reflect", "lightscreen", "thunderbolt", "discharge", "thunderwave", "toxic", "hiddenpowerice", "cottonguard", "powergem"], eventPokemon: [ - {"generation": 3, "level": 37, "gender": "F", "moves":["thunder", "thundershock", "thunderwave", "cottonspore"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "growl", "thundershock"]}, - {"generation": 3, "level": 17, "moves":["healbell", "thundershock", "thunderwave", "bodyslam"]}, - {"generation": 6, "level": 10, "isHidden": false, "moves":["holdback", "tackle", "thunderwave", "thundershock"], "pokeball": "cherishball"}, + {"generation": 3, "level": 37, "gender": "F", "moves": ["thunder", "thundershock", "thunderwave", "cottonspore"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "growl", "thundershock"], "pokeball": "pokeball"}, + {"generation": 3, "level": 17, "moves": ["healbell", "thundershock", "thunderwave", "bodyslam"]}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["holdback", "tackle", "thunderwave", "thundershock"], "pokeball": "cherishball"}, ], tier: "LC", }, flaaffy: { randomBattleMoves: ["reflect", "lightscreen", "thunderbolt", "discharge", "thunderwave", "toxic", "hiddenpowerice", "cottonguard", "powergem"], + encounters: [ + {"generation": 7, "level": 11, "isHidden": false, "pokeball": "pokeball"}, + ], tier: "NFE", }, ampharos: { randomBattleMoves: ["voltswitch", "reflect", "lightscreen", "focusblast", "thunderbolt", "toxic", "healbell", "hiddenpowerice"], randomDoubleBattleMoves: ["focusblast", "hiddenpowerice", "hiddenpowergrass", "thunderbolt", "discharge", "dragonpulse", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, ampharosmega: { randomBattleMoves: ["voltswitch", "focusblast", "agility", "thunderbolt", "healbell", "dragonpulse"], randomDoubleBattleMoves: ["focusblast", "hiddenpowerice", "hiddenpowergrass", "thunderbolt", "discharge", "dragonpulse", "protect"], requiredItem: "Ampharosite", - tier: "OU", + tier: "RU", + doublesTier: "DUU", }, azurill: { randomBattleMoves: ["scald", "return", "bodyslam", "encore", "toxic", "protect", "knockoff"], @@ -1926,9 +2696,14 @@ exports.BattleFormatsData = { tier: "NFE", }, azumarill: { - randomBattleMoves: ["waterfall", "aquajet", "playrough", "superpower", "bellydrum", "knockoff"], + randomBattleMoves: ["liquidation", "aquajet", "playrough", "superpower", "bellydrum", "knockoff"], randomDoubleBattleMoves: ["waterfall", "aquajet", "playrough", "superpower", "bellydrum", "knockoff", "protect"], - tier: "BL", + encounters: [ + {"generation": 5, "level": 5, "isHidden": false}, + {"generation": 6, "level": 16, "maxEggMoves": 1}, + ], + tier: "UUBL", + doublesTier: "DUU", }, bonsly: { randomBattleMoves: ["rockslide", "brickbreak", "doubleedge", "toxic", "stealthrock", "suckerpunch", "explosion"], @@ -1937,47 +2712,57 @@ exports.BattleFormatsData = { sudowoodo: { randomBattleMoves: ["headsmash", "earthquake", "suckerpunch", "woodhammer", "toxic", "stealthrock"], randomDoubleBattleMoves: ["headsmash", "earthquake", "suckerpunch", "woodhammer", "explosion", "stealthrock", "rockslide", "helpinghand", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, hoppip: { randomBattleMoves: ["encore", "sleeppowder", "uturn", "toxic", "leechseed", "substitute", "protect"], + encounters: [ + {"generation": 2, "level": 3}, + ], tier: "LC", }, skiploom: { randomBattleMoves: ["encore", "sleeppowder", "uturn", "toxic", "leechseed", "substitute", "protect"], + encounters: [ + {"generation": 4, "level": 12}, + ], tier: "NFE", }, jumpluff: { - randomBattleMoves: ["swordsdance", "sleeppowder", "uturn", "encore", "toxic", "acrobatics", "leechseed", "seedbomb", "substitute"], - randomDoubleBattleMoves: ["encore", "sleeppowder", "uturn", "helpinghand", "leechseed", "gigadrain", "ragepowder", "protect"], + randomBattleMoves: ["swordsdance", "sleeppowder", "uturn", "encore", "toxic", "acrobatics", "leechseed", "seedbomb", "substitute", "strengthsap"], + randomDoubleBattleMoves: ["encore", "sleeppowder", "uturn", "helpinghand", "leechseed", "gigadrain", "ragepowder", "protect", "strengthsap"], eventPokemon: [ - {"generation": 5, "level": 27, "gender": "M", "isHidden": true, "moves":["falseswipe", "sleeppowder", "bulletseed", "leechseed"]}, + {"generation": 5, "level": 27, "gender": "M", "isHidden": true, "moves": ["falseswipe", "sleeppowder", "bulletseed", "leechseed"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, aipom: { randomBattleMoves: ["fakeout", "return", "brickbreak", "seedbomb", "knockoff", "uturn", "icepunch", "irontail"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "tailwhip", "sandattack"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "tailwhip", "sandattack"], "pokeball": "pokeball"}, ], - tier: "LC", + tier: "LC Uber", }, ambipom: { - randomBattleMoves: ["fakeout", "return", "knockoff", "uturn", "switcheroo", "seedbomb", "lowkick"], + randomBattleMoves: ["fakeout", "tailslap", "knockoff", "uturn", "switcheroo", "seedbomb", "lowkick"], randomDoubleBattleMoves: ["fakeout", "return", "knockoff", "uturn", "doublehit", "icepunch", "lowkick", "protect"], tier: "NU", + doublesTier: "(DUU)", }, sunkern: { randomBattleMoves: ["sunnyday", "gigadrain", "solarbeam", "hiddenpowerfire", "toxic", "earthpower", "leechseed"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["chlorophyll"], "moves":["absorb", "growth"]}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["chlorophyll"], "moves": ["absorb", "growth"], "pokeball": "pokeball"}, ], tier: "LC", }, sunflora: { randomBattleMoves: ["sunnyday", "gigadrain", "solarbeam", "hiddenpowerfire", "earthpower"], randomDoubleBattleMoves: ["sunnyday", "gigadrain", "solarbeam", "hiddenpowerfire", "hiddenpowerice", "earthpower", "protect", "encore"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, yanma: { randomBattleMoves: ["bugbuzz", "airslash", "hiddenpowerground", "uturn", "protect", "gigadrain", "ancientpower"], @@ -1985,33 +2770,46 @@ exports.BattleFormatsData = { }, yanmega: { randomBattleMoves: ["bugbuzz", "airslash", "ancientpower", "uturn", "protect", "gigadrain"], - tier: "BL3", + tier: "RU", + doublesTier: "(DUU)", }, wooper: { randomBattleMoves: ["recover", "earthquake", "scald", "toxic", "stockpile", "yawn", "protect"], + encounters: [ + {"generation": 2, "level": 4}, + ], tier: "LC", }, quagsire: { randomBattleMoves: ["recover", "earthquake", "scald", "toxic", "encore", "icebeam"], randomDoubleBattleMoves: ["icywind", "earthquake", "waterfall", "scald", "rockslide", "curse", "yawn", "icepunch", "protect"], + encounters: [ + {"generation": 2, "level": 15}, + {"generation": 4, "level": 10}, + ], tier: "PU", + doublesTier: "(DUU)", }, murkrow: { randomBattleMoves: ["substitute", "suckerpunch", "bravebird", "heatwave", "roost", "darkpulse", "thunderwave"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["insomnia"], "moves":["peck", "astonish"]}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["insomnia"], "moves": ["peck", "astonish"], "pokeball": "pokeball"}, ], tier: "LC Uber", }, honchkrow: { randomBattleMoves: ["substitute", "superpower", "suckerpunch", "bravebird", "roost", "heatwave", "pursuit"], randomDoubleBattleMoves: ["substitute", "superpower", "suckerpunch", "bravebird", "roost", "heatwave", "protect"], + eventPokemon: [ + {"generation": 7, "level": 65, "gender": "M", "isHidden": false, "abilities": ["superluck"], "moves": ["nightslash", "skyattack", "heatwave", "icywind"], "pokeball": "cherishball"}, + ], tier: "RU", + doublesTier: "(DUU)", }, misdreavus: { randomBattleMoves: ["nastyplot", "thunderbolt", "dazzlinggleam", "willowisp", "shadowball", "taunt", "painsplit"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["growl", "psywave", "spite"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["growl", "psywave", "spite"], "pokeball": "pokeball"}, ], tier: "LC Uber", }, @@ -2019,15 +2817,23 @@ exports.BattleFormatsData = { randomBattleMoves: ["nastyplot", "substitute", "willowisp", "shadowball", "thunderbolt", "dazzlinggleam", "taunt", "painsplit", "destinybond"], randomDoubleBattleMoves: ["nastyplot", "substitute", "willowisp", "shadowball", "thunderbolt", "dazzlinggleam", "taunt", "protect"], tier: "NU", + doublesTier: "(DUU)", }, unown: { randomBattleMoves: ["hiddenpowerpsychic"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 5}, + {"generation": 3, "level": 25}, + {"generation": 4, "level": 5}, + {"generation": 6, "level": 32}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, wynaut: { randomBattleMoves: ["destinybond", "counter", "mirrorcoat", "encore"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["splash", "charm", "encore", "tickle"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["splash", "charm", "encore", "tickle"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -2035,120 +2841,150 @@ exports.BattleFormatsData = { randomBattleMoves: ["counter", "mirrorcoat", "encore", "destinybond", "safeguard"], randomDoubleBattleMoves: ["counter", "mirrorcoat", "encore", "destinybond", "safeguard"], eventPokemon: [ - {"generation": 3, "level": 5, "moves":["counter", "mirrorcoat", "safeguard", "destinybond"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["counter", "mirrorcoat", "safeguard", "destinybond"]}, - {"generation": 6, "level": 10, "gender": "M", "isHidden": false, "moves":["counter"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "gender": "M", "isHidden": false, "moves":["counter", "mirrorcoat"], "pokeball": "cherishball"}, + {"generation": 3, "level": 5, "moves": ["counter", "mirrorcoat", "safeguard", "destinybond"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["counter", "mirrorcoat", "safeguard", "destinybond"], "pokeball": "pokeball"}, + {"generation": 6, "level": 10, "gender": "M", "isHidden": false, "moves": ["counter"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "gender": "M", "isHidden": false, "moves": ["counter", "mirrorcoat"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 2, "level": 5}, + {"generation": 4, "level": 3}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, girafarig: { - randomBattleMoves: ["psychic", "psyshock", "thunderbolt", "nastyplot", "batonpass", "substitute", "hypervoice"], + randomBattleMoves: ["psychic", "psyshock", "thunderbolt", "nastyplot", "substitute", "hypervoice"], randomDoubleBattleMoves: ["psychic", "psyshock", "thunderbolt", "nastyplot", "protect", "agility", "hypervoice"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pineco: { randomBattleMoves: ["rapidspin", "toxicspikes", "spikes", "bugbite", "stealthrock"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "protect", "selfdestruct"]}, - {"generation": 3, "level": 20, "moves":["refresh", "pinmissile", "spikes", "counter"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "protect", "selfdestruct"], "pokeball": "pokeball"}, + {"generation": 3, "level": 20, "moves": ["refresh", "pinmissile", "spikes", "counter"]}, ], tier: "LC", }, forretress: { randomBattleMoves: ["rapidspin", "toxic", "spikes", "voltswitch", "stealthrock", "gyroball"], randomDoubleBattleMoves: ["rockslide", "drillrun", "toxic", "voltswitch", "stealthrock", "gyroball", "protect"], - tier: "UU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "RU", + doublesTier: "(DUU)", }, dunsparce: { - randomBattleMoves: ["coil", "rockslide", "bite", "headbutt", "glare", "bodyslam", "roost"], + randomBattleMoves: ["coil", "rockslide", "bite", "headbutt", "glare", "bodyslam", "roost", "stealthrock"], randomDoubleBattleMoves: ["coil", "rockslide", "bite", "headbutt", "glare", "bodyslam", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, gligar: { randomBattleMoves: ["stealthrock", "toxic", "roost", "defog", "earthquake", "uturn", "knockoff"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["poisonsting", "sandattack"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["poisonsting", "sandattack"], "pokeball": "pokeball"}, ], - tier: "RU", + tier: "UU", + doublesTier: "LC Uber", }, gliscor: { - randomBattleMoves: ["roost", "substitute", "taunt", "earthquake", "protect", "toxic", "stealthrock", "knockoff"], + randomBattleMoves: ["roost", "substitute", "taunt", "earthquake", "protect", "toxic", "stealthrock", "knockoff", "uturn"], randomDoubleBattleMoves: ["tailwind", "substitute", "taunt", "earthquake", "protect", "stoneedge", "knockoff"], - tier: "UU", + tier: "OU", + doublesTier: "(DUU)", }, snubbull: { randomBattleMoves: ["thunderwave", "firepunch", "crunch", "closecombat", "icepunch", "earthquake", "playrough"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "scaryface", "tailwhip", "charm"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "scaryface", "tailwhip", "charm"], "pokeball": "pokeball"}, ], tier: "LC", }, granbull: { randomBattleMoves: ["thunderwave", "playrough", "crunch", "earthquake", "healbell"], randomDoubleBattleMoves: ["thunderwave", "playrough", "crunch", "earthquake", "snarl", "rockslide", "protect"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 15}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, qwilfish: { - randomBattleMoves: ["toxicspikes", "waterfall", "spikes", "painsplit", "thunderwave", "taunt", "destinybond"], - randomDoubleBattleMoves: ["poisonjab", "waterfall", "swordsdance", "protect", "thunderwave", "taunt", "destinybond"], + randomBattleMoves: ["toxicspikes", "liquidation", "spikes", "painsplit", "thunderwave", "taunt", "destinybond"], + randomDoubleBattleMoves: ["poisonjab", "liquidation", "swordsdance", "protect", "thunderwave", "taunt", "destinybond"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "poisonsting", "harden", "minimize"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "poisonsting", "harden", "minimize"], "pokeball": "pokeball"}, ], - tier: "NU", + tier: "PU", + doublesTier: "(DUU)", }, shuckle: { randomBattleMoves: ["toxic", "encore", "stealthrock", "knockoff", "stickyweb", "infestation"], randomDoubleBattleMoves: ["encore", "stealthrock", "knockoff", "stickyweb", "guardsplit", "powersplit", "toxic", "helpinghand"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["sturdy"], "moves":["constrict", "withdraw", "wrap"]}, - {"generation": 3, "level": 20, "abilities":["sturdy"], "moves":["substitute", "toxic", "sludgebomb", "encore"]}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["sturdy"], "moves": ["constrict", "withdraw", "wrap"], "pokeball": "pokeball"}, + {"generation": 3, "level": 20, "abilities": ["sturdy"], "moves": ["substitute", "toxic", "sludgebomb", "encore"], "pokeball": "pokeball"}, ], - tier: "NU", + tier: "(PU)", + doublesTier: "(DUU)", }, heracross: { randomBattleMoves: ["closecombat", "megahorn", "stoneedge", "swordsdance", "knockoff", "earthquake"], randomDoubleBattleMoves: ["closecombat", "megahorn", "stoneedge", "swordsdance", "knockoff", "earthquake", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "gender": "F", "nature": "Adamant", "isHidden": false, "moves":["bulletseed", "pinmissile", "closecombat", "megahorn"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "nature": "Adamant", "isHidden": false, "abilities":["guts"], "moves":["pinmissile", "bulletseed", "earthquake", "rockblast"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "gender": "F", "nature": "Adamant", "isHidden": false, "moves": ["bulletseed", "pinmissile", "closecombat", "megahorn"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Adamant", "isHidden": false, "abilities": ["guts"], "moves": ["pinmissile", "bulletseed", "earthquake", "rockblast"], "pokeball": "cherishball"}, ], - tier: "BL2", + tier: "UU", + doublesTier: "(DUU)", }, heracrossmega: { randomBattleMoves: ["closecombat", "pinmissile", "rockblast", "swordsdance", "bulletseed", "substitute"], randomDoubleBattleMoves: ["closecombat", "pinmissile", "rockblast", "swordsdance", "bulletseed", "knockoff", "earthquake", "protect"], requiredItem: "Heracronite", - tier: "OU", + tier: "UUBL", + doublesTier: "(DUU)", }, sneasel: { randomBattleMoves: ["iceshard", "iciclecrash", "lowkick", "pursuit", "swordsdance", "knockoff"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "leer", "taunt", "quickattack"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "leer", "taunt", "quickattack"], "pokeball": "pokeball"}, ], tier: "NU", + doublesTier: "LC Uber", }, weavile: { randomBattleMoves: ["iceshard", "iciclecrash", "knockoff", "pursuit", "swordsdance", "lowkick"], randomDoubleBattleMoves: ["iceshard", "iciclecrash", "knockoff", "fakeout", "swordsdance", "lowkick", "taunt", "protect", "feint"], eventPokemon: [ - {"generation": 4, "level": 30, "gender": "M", "nature": "Jolly", "moves":["fakeout", "iceshard", "nightslash", "brickbreak"], "pokeball": "cherishball"}, - {"generation": 6, "level": 48, "gender": "M", "perfectIVs": 2, "isHidden": false, "moves":["nightslash", "icepunch", "brickbreak", "xscissor"], "pokeball": "cherishball"}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Jolly", "moves": ["fakeout", "iceshard", "nightslash", "brickbreak"], "pokeball": "cherishball"}, + {"generation": 6, "level": 48, "gender": "M", "perfectIVs": 2, "isHidden": false, "moves": ["nightslash", "icepunch", "brickbreak", "xscissor"], "pokeball": "cherishball"}, ], - tier: "UU", + tier: "UUBL", + doublesTier: "DUU", }, teddiursa: { randomBattleMoves: ["swordsdance", "protect", "facade", "closecombat", "firepunch", "crunch", "playrough", "gunkshot"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["pickup"], "moves":["scratch", "leer", "lick"]}, - {"generation": 3, "level": 11, "abilities":["pickup"], "moves":["refresh", "metalclaw", "lick", "return"]}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["pickup"], "moves": ["scratch", "leer", "lick"], "pokeball": "pokeball"}, + {"generation": 3, "level": 11, "abilities": ["pickup"], "moves": ["refresh", "metalclaw", "lick", "return"]}, + ], + encounters: [ + {"generation": 2, "level": 2}, ], tier: "LC", }, ursaring: { randomBattleMoves: ["swordsdance", "facade", "closecombat", "crunch", "protect"], randomDoubleBattleMoves: ["swordsdance", "facade", "closecombat", "earthquake", "crunch", "protect"], - tier: "PU", + encounters: [ + {"generation": 2, "level": 25}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, slugma: { randomBattleMoves: ["stockpile", "recover", "lavaplume", "willowisp", "toxic", "hiddenpowergrass", "earthpower", "memento"], @@ -2158,37 +2994,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["recover", "lavaplume", "toxic", "hiddenpowergrass", "stealthrock", "fireblast", "earthpower", "shellsmash", "ancientpower"], randomDoubleBattleMoves: ["protect", "heatwave", "willowisp", "shellsmash", "hiddenpowergrass", "ancientpower", "stealthrock", "fireblast", "earthpower"], eventPokemon: [ - {"generation": 3, "level": 38, "moves":["refresh", "heatwave", "earthquake", "flamethrower"]}, + {"generation": 3, "level": 38, "moves": ["refresh", "heatwave", "earthquake", "flamethrower"]}, ], - tier: "PU", + encounters: [ + {"generation": 3, "level": 25}, + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, swinub: { randomBattleMoves: ["earthquake", "iciclecrash", "iceshard", "superpower", "endeavor", "stealthrock"], eventPokemon: [ - {"generation": 3, "level": 22, "abilities":["oblivious"], "moves":["charm", "ancientpower", "mist", "mudshot"]}, + {"generation": 3, "level": 22, "abilities": ["oblivious"], "moves": ["charm", "ancientpower", "mist", "mudshot"]}, ], tier: "LC", }, piloswine: { - randomBattleMoves: ["earthquake", "iciclecrash", "iceshard", "superpower", "endeavor", "stealthrock"], - tier: "NFE", + randomBattleMoves: ["earthquake", "iciclecrash", "iceshard", "endeavor", "stealthrock"], + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "NU", + doublesTier: "NFE", }, mamoswine: { randomBattleMoves: ["iceshard", "earthquake", "endeavor", "iciclecrash", "stealthrock", "superpower", "knockoff"], randomDoubleBattleMoves: ["iceshard", "earthquake", "rockslide", "iciclecrash", "protect", "superpower", "knockoff"], eventPokemon: [ - {"generation": 5, "level": 34, "gender": "M", "isHidden": true, "moves":["hail", "icefang", "takedown", "doublehit"]}, - {"generation": 6, "level": 50, "shiny": true, "gender": "M", "nature": "Adamant", "isHidden": true, "moves":["iciclespear", "earthquake", "iciclecrash", "rockslide"]}, + {"generation": 5, "level": 34, "gender": "M", "isHidden": true, "moves": ["hail", "icefang", "takedown", "doublehit"]}, + {"generation": 6, "level": 50, "shiny": true, "gender": "M", "nature": "Adamant", "isHidden": true, "moves": ["iciclespear", "earthquake", "iciclecrash", "rockslide"], "pokeball": "pokeball"}, ], tier: "UU", + doublesTier: "DUU", }, corsola: { randomBattleMoves: ["recover", "toxic", "powergem", "scald", "stealthrock"], randomDoubleBattleMoves: ["protect", "icywind", "powergem", "scald", "stealthrock", "earthpower", "icebeam"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["tackle", "mudsport"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["tackle", "mudsport"], "pokeball": "pokeball"}, + {"generation": 7, "level": 50, "gender": "F", "nature": "Serious", "isHidden": false, "abilities": ["hustle"], "moves": ["tackle", "powergem"], "pokeball": "ultraball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, remoraid: { randomBattleMoves: ["waterspout", "hydropump", "fireblast", "hiddenpowerground", "icebeam", "seedbomb", "rockblast"], @@ -2198,18 +3046,24 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "fireblast", "icebeam", "energyball", "rockblast", "gunkshot", "scald"], randomDoubleBattleMoves: ["hydropump", "surf", "fireblast", "icebeam", "energyball", "chargebeam", "protect"], eventPokemon: [ - {"generation": 4, "level": 50, "gender": "F", "nature": "Serious", "abilities":["suctioncups"], "moves":["octazooka", "icebeam", "signalbeam", "hyperbeam"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "F", "nature": "Serious", "abilities": ["suctioncups"], "moves": ["octazooka", "icebeam", "signalbeam", "hyperbeam"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 4, "level": 19}, + {"generation": 7, "level": 10}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, delibird: { - randomBattleMoves: ["rapidspin", "iceshard", "icepunch", "aerialace", "spikes", "destinybond"], + randomBattleMoves: ["defog", "iceshard", "icepunch", "aerialace", "spikes", "destinybond"], randomDoubleBattleMoves: ["fakeout", "iceshard", "icepunch", "aerialace", "brickbreak", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["present"]}, - {"generation": 6, "level": 10, "isHidden": false, "abilities":["vitalspirit"], "moves":["present", "happyhour"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["present"], "pokeball": "pokeball"}, + {"generation": 6, "level": 10, "isHidden": false, "abilities": ["vitalspirit"], "moves": ["present", "happyhour"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, mantyke: { randomBattleMoves: ["raindance", "hydropump", "scald", "airslash", "icebeam", "rest", "sleeptalk", "toxic"], @@ -2219,20 +3073,22 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "airslash", "roost", "toxic", "defog"], randomDoubleBattleMoves: ["raindance", "scald", "airslash", "icebeam", "tailwind", "wideguard", "helpinghand", "protect", "surf"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "bubble", "supersonic"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "bubble", "supersonic"], "pokeball": "pokeball"}, ], tier: "RU", + doublesTier: "(DUU)", }, skarmory: { randomBattleMoves: ["whirlwind", "bravebird", "roost", "spikes", "stealthrock", "defog"], randomDoubleBattleMoves: ["skydrop", "bravebird", "tailwind", "taunt", "feint", "protect", "ironhead"], tier: "OU", + doublesTier: "(DUU)", }, houndour: { randomBattleMoves: ["pursuit", "suckerpunch", "fireblast", "darkpulse", "hiddenpowerfighting", "nastyplot"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["leer", "ember", "howl"]}, - {"generation": 3, "level": 17, "moves":["charm", "feintattack", "ember", "roar"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["leer", "ember", "howl"], "pokeball": "pokeball"}, + {"generation": 3, "level": 17, "moves": ["charm", "feintattack", "ember", "roar"]}, ], tier: "LC", }, @@ -2240,48 +3096,63 @@ exports.BattleFormatsData = { randomBattleMoves: ["nastyplot", "darkpulse", "suckerpunch", "fireblast", "hiddenpowergrass"], randomDoubleBattleMoves: ["nastyplot", "darkpulse", "suckerpunch", "heatwave", "hiddenpowerfighting", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "nature": "Timid", "isHidden": false, "abilities":["flashfire"], "moves":["flamethrower", "darkpulse", "solarbeam", "sludgebomb"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Timid", "isHidden": false, "abilities": ["flashfire"], "moves": ["flamethrower", "darkpulse", "solarbeam", "sludgebomb"], "pokeball": "cherishball"}, ], - tier: "NU", + encounters: [ + {"generation": 4, "level": 20}, + ], + tier: "PUBL", + doublesTier: "(DUU)", }, houndoommega: { randomBattleMoves: ["nastyplot", "darkpulse", "taunt", "fireblast", "hiddenpowergrass"], randomDoubleBattleMoves: ["nastyplot", "darkpulse", "taunt", "heatwave", "hiddenpowergrass", "protect"], requiredItem: "Houndoominite", - tier: "BL", + tier: "RUBL", + doublesTier: "(DUU)", }, phanpy: { randomBattleMoves: ["stealthrock", "earthquake", "iceshard", "headsmash", "knockoff", "seedbomb", "superpower", "playrough"], + encounters: [ + {"generation": 2, "level": 2}, + ], tier: "LC", }, donphan: { randomBattleMoves: ["stealthrock", "rapidspin", "iceshard", "earthquake", "knockoff", "stoneedge"], randomDoubleBattleMoves: ["stealthrock", "knockoff", "iceshard", "earthquake", "rockslide", "protect"], + encounters: [ + {"generation": 6, "level": 24, "maxEggMoves": 1}, + ], tier: "RU", + doublesTier: "(DUU)", }, stantler: { randomBattleMoves: ["doubleedge", "megahorn", "jumpkick", "earthquake", "suckerpunch"], randomDoubleBattleMoves: ["return", "megahorn", "jumpkick", "earthquake", "suckerpunch", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["intimidate"], "moves":["tackle", "leer"]}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["intimidate"], "moves": ["tackle", "leer"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, smeargle: { - randomBattleMoves: ["spore", "spikes", "stealthrock", "destinybond", "whirlwind", "stickyweb"], + randomBattleMoves: ["spore", "stealthrock", "destinybond", "whirlwind", "stickyweb"], randomDoubleBattleMoves: ["spore", "fakeout", "wideguard", "helpinghand", "followme", "tailwind", "kingsshield", "transform"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["owntempo"], "moves":["sketch"]}, - {"generation": 5, "level": 50, "gender": "F", "nature": "Jolly", "ivs": {"atk": 31, "spe": 31}, "isHidden": false, "abilities":["technician"], "moves":["falseswipe", "spore", "odorsleuth", "meanlook"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["owntempo"], "moves": ["sketch"], "pokeball": "pokeball"}, + {"generation": 5, "level": 50, "gender": "F", "nature": "Jolly", "ivs": {"atk": 31, "spe": 31}, "isHidden": false, "abilities": ["technician"], "moves": ["falseswipe", "spore", "odorsleuth", "meanlook"], "pokeball": "cherishball"}, + {"generation": 6, "level": 40, "gender": "M", "nature": "Jolly", "isHidden": false, "abilities": ["owntempo"], "moves": ["sketch", "furyswipes", "seismictoss", "flamethrower"], "pokeball": "cherishball"}, ], - tier: "OU", + tier: "(PU)", + doublesTier: "(DUU)", }, pokestarsmeargle: { isNonstandard: true, eventPokemon: [ - {"generation": 5, "level": 60, "gender": "M", "abilities":["owntempo"], "moves":["mindreader", "guillotine", "tailwhip", "gastroacid"]}, - {"generation": 5, "level": 30, "gender": "M", "abilities":["owntempo"], "moves":["outrage", "magiccoat"]}, - {"generation": 5, "level": 99, "gender": "M", "abilities":["owntempo"], "moves":["nastyplot", "sheercold", "attract", "shadowball"]}, + {"generation": 5, "level": 60, "gender": "M", "abilities": ["owntempo"], "moves": ["mindreader", "guillotine", "tailwhip", "gastroacid"]}, + {"generation": 5, "level": 30, "gender": "M", "abilities": ["owntempo"], "moves": ["outrage", "magiccoat"]}, + {"generation": 5, "level": 99, "gender": "M", "abilities": ["owntempo"], "moves": ["nastyplot", "sheercold", "attract", "shadowball"]}, ], gen: 5, tier: "Illegal", @@ -2290,57 +3161,77 @@ exports.BattleFormatsData = { randomBattleMoves: ["milkdrink", "stealthrock", "bodyslam", "healbell", "curse", "earthquake", "toxic"], randomDoubleBattleMoves: ["protect", "helpinghand", "bodyslam", "milkdrink", "curse", "earthquake", "thunderwave"], eventPokemon: [ - {"generation": 6, "level": 20, "perfectIVs": 3, "isHidden": false, "abilities":["scrappy"], "moves":["rollout", "attract", "stomp", "milkdrink"], "pokeball": "cherishball"}, + {"generation": 6, "level": 20, "perfectIVs": 3, "isHidden": false, "abilities": ["scrappy"], "moves": ["rollout", "attract", "stomp", "milkdrink"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, raikou: { randomBattleMoves: ["thunderbolt", "hiddenpowerice", "aurasphere", "calmmind", "substitute", "voltswitch", "extrasensory"], randomDoubleBattleMoves: ["thunderbolt", "hiddenpowerice", "extrasensory", "calmmind", "substitute", "snarl", "protect"], eventPokemon: [ - {"generation": 3, "level": 50, "shiny": 1, "moves":["thundershock", "roar", "quickattack", "spark"]}, - {"generation": 3, "level": 70, "moves":["quickattack", "spark", "reflect", "crunch"]}, - {"generation": 4, "level": 40, "shiny": 1, "moves":["roar", "quickattack", "spark", "reflect"]}, - {"generation": 4, "level": 30, "shiny": true, "nature": "Rash", "moves":["zapcannon", "aurasphere", "extremespeed", "weatherball"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["spark", "reflect", "crunch", "thunderfang"]}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["thundershock", "roar", "quickattack", "spark"]}, + {"generation": 3, "level": 70, "moves": ["quickattack", "spark", "reflect", "crunch"], "pokeball": "pokeball"}, + {"generation": 4, "level": 40, "shiny": 1, "moves": ["roar", "quickattack", "spark", "reflect"]}, + {"generation": 4, "level": 30, "shiny": true, "nature": "Rash", "moves": ["zapcannon", "aurasphere", "extremespeed", "weatherball"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["spark", "reflect", "crunch", "thunderfang"]}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["reflect", "crunch", "thunderfang", "discharge"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["reflect", "crunch", "thunderfang", "discharge"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["thunderbolt", "voltswitch", "extrasensory", "calmmind"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 2, "level": 40}, + {"generation": 3, "level": 40}, ], eventOnly: true, - unreleasedHidden: true, - tier: "UU", + tier: "RU", + doublesTier: "(DUU)", }, entei: { - randomBattleMoves: ["extremespeed", "flareblitz", "bulldoze", "stoneedge", "sacredfire"], + randomBattleMoves: ["extremespeed", "flareblitz", "stompingtantrum", "stoneedge", "sacredfire"], randomDoubleBattleMoves: ["extremespeed", "flareblitz", "ironhead", "bulldoze", "stoneedge", "sacredfire", "protect"], eventPokemon: [ - {"generation": 3, "level": 50, "shiny": 1, "moves":["ember", "roar", "firespin", "stomp"]}, - {"generation": 3, "level": 70, "moves":["firespin", "stomp", "flamethrower", "swagger"]}, - {"generation": 4, "level": 40, "shiny": 1, "moves":["roar", "firespin", "stomp", "flamethrower"]}, - {"generation": 4, "level": 30, "shiny": true, "nature": "Adamant", "moves":["flareblitz", "howl", "extremespeed", "crushclaw"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["stomp", "flamethrower", "swagger", "firefang"]}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["ember", "roar", "firespin", "stomp"]}, + {"generation": 3, "level": 70, "moves": ["firespin", "stomp", "flamethrower", "swagger"], "pokeball": "pokeball"}, + {"generation": 4, "level": 40, "shiny": 1, "moves": ["roar", "firespin", "stomp", "flamethrower"]}, + {"generation": 4, "level": 30, "shiny": true, "nature": "Adamant", "moves": ["flareblitz", "howl", "extremespeed", "crushclaw"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["stomp", "flamethrower", "swagger", "firefang"]}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["stomp", "bite", "swagger", "lavaplume"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["stomp", "bite", "swagger", "lavaplume"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["sacredfire", "stoneedge", "ironhead", "flamecharge"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 2, "level": 40}, + {"generation": 3, "level": 40}, ], eventOnly: true, - unreleasedHidden: true, - tier: "UU", + tier: "RUBL", + doublesTier: "DUU", }, suicune: { randomBattleMoves: ["hydropump", "icebeam", "scald", "hiddenpowergrass", "rest", "sleeptalk", "calmmind"], randomDoubleBattleMoves: ["hydropump", "icebeam", "scald", "hiddenpowergrass", "snarl", "tailwind", "protect", "calmmind"], eventPokemon: [ - {"generation": 3, "level": 50, "shiny": 1, "moves":["bubblebeam", "raindance", "gust", "aurorabeam"]}, - {"generation": 3, "level": 70, "moves":["gust", "aurorabeam", "mist", "mirrorcoat"]}, - {"generation": 4, "level": 40, "shiny": 1, "moves":["raindance", "gust", "aurorabeam", "mist"]}, - {"generation": 4, "level": 30, "shiny": true, "nature": "Relaxed", "moves":["sheercold", "airslash", "extremespeed", "aquaring"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["aurorabeam", "mist", "mirrorcoat", "icefang"]}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["bubblebeam", "raindance", "gust", "aurorabeam"]}, + {"generation": 3, "level": 70, "moves": ["gust", "aurorabeam", "mist", "mirrorcoat"], "pokeball": "pokeball"}, + {"generation": 4, "level": 40, "shiny": 1, "moves": ["raindance", "gust", "aurorabeam", "mist"]}, + {"generation": 4, "level": 30, "shiny": true, "nature": "Relaxed", "moves": ["sheercold", "airslash", "extremespeed", "aquaring"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["aurorabeam", "mist", "mirrorcoat", "icefang"]}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["bubblebeam", "aurorabeam", "mist", "raindance"]}, + ], + encounters: [ + {"generation": 2, "level": 40}, + {"generation": 3, "level": 40}, ], eventOnly: true, - unreleasedHidden: true, tier: "UU", + doublesTier: "DOU", }, larvitar: { randomBattleMoves: ["earthquake", "stoneedge", "facade", "dragondance", "superpower", "crunch"], eventPokemon: [ - {"generation": 3, "level": 20, "moves":["sandstorm", "dragondance", "bite", "outrage"]}, - {"generation": 5, "level": 5, "shiny": true, "gender": "M", "isHidden": false, "moves":["bite", "leer", "sandstorm", "superpower"], "pokeball": "cherishball"}, + {"generation": 3, "level": 20, "moves": ["sandstorm", "dragondance", "bite", "outrage"], "pokeball": "pokeball"}, + {"generation": 5, "level": 5, "shiny": true, "gender": "M", "isHidden": false, "moves": ["bite", "leer", "sandstorm", "superpower"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -2352,72 +3243,97 @@ exports.BattleFormatsData = { randomBattleMoves: ["crunch", "stoneedge", "pursuit", "earthquake", "fireblast", "icebeam", "stealthrock"], randomDoubleBattleMoves: ["crunch", "stoneedge", "rockslide", "earthquake", "firepunch", "icepunch", "stealthrock", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["thrash", "scaryface", "crunch", "earthquake"]}, - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["fireblast", "icebeam", "stoneedge", "crunch"], "pokeball": "cherishball"}, - {"generation": 5, "level": 55, "gender": "M", "isHidden": true, "moves":["payback", "crunch", "earthquake", "seismictoss"]}, - {"generation": 6, "level": 50, "isHidden": false, "moves":["stoneedge", "crunch", "earthquake", "icepunch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "nature": "Jolly", "isHidden": false, "moves":["rockslide", "earthquake", "crunch", "stoneedge"], "pokeball": "cherishball"}, - {"generation": 6, "level": 55, "shiny": true, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 14, "spd": 31, "spe": 0}, "isHidden": false, "moves":["crunch", "rockslide", "lowkick", "protect"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "isHidden": false, "moves":["rockslide", "crunch", "icepunch", "lowkick"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["thrash", "scaryface", "crunch", "earthquake"], "pokeball": "pokeball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["fireblast", "icebeam", "stoneedge", "crunch"], "pokeball": "cherishball"}, + {"generation": 5, "level": 55, "gender": "M", "isHidden": true, "moves": ["payback", "crunch", "earthquake", "seismictoss"]}, + {"generation": 6, "level": 50, "isHidden": false, "moves": ["stoneedge", "crunch", "earthquake", "icepunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Jolly", "isHidden": false, "moves": ["rockslide", "earthquake", "crunch", "stoneedge"], "pokeball": "cherishball"}, + {"generation": 6, "level": 55, "shiny": true, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 14, "spd": 31, "spe": 0}, "isHidden": false, "moves": ["crunch", "rockslide", "lowkick", "protect"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "isHidden": false, "moves": ["rockslide", "crunch", "icepunch", "lowkick"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 5, "level": 50, "isHidden": false}, ], tier: "OU", + doublesTier: "DOU", }, tyranitarmega: { randomBattleMoves: ["crunch", "stoneedge", "earthquake", "icepunch", "dragondance"], randomDoubleBattleMoves: ["crunch", "stoneedge", "earthquake", "icepunch", "dragondance", "rockslide", "protect"], requiredItem: "Tyranitarite", - tier: "OU", + tier: "(OU)", + doublesTier: "DOU", }, lugia: { randomBattleMoves: ["toxic", "roost", "substitute", "whirlwind", "thunderwave", "dragontail", "aeroblast"], randomDoubleBattleMoves: ["aeroblast", "roost", "substitute", "tailwind", "icebeam", "psychic", "calmmind", "skydrop", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "shiny": 1, "moves":["recover", "hydropump", "raindance", "swift"]}, - {"generation": 3, "level": 50, "moves":["psychoboost", "earthquake", "hydropump", "featherdance"]}, - {"generation": 4, "level": 45, "shiny": 1, "moves":["extrasensory", "raindance", "hydropump", "aeroblast"]}, - {"generation": 4, "level": 70, "shiny": 1, "moves":["aeroblast", "punishment", "ancientpower", "safeguard"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["whirlwind", "weatherball"], "pokeball": "dreamball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["raindance", "hydropump", "aeroblast", "punishment"]}, - {"generation": 6, "level": 50, "nature": "Timid", "isHidden": false, "moves":["aeroblast", "hydropump", "dragonrush", "icebeam"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "shiny": 1, "moves": ["recover", "hydropump", "raindance", "swift"]}, + {"generation": 3, "level": 50, "moves": ["psychoboost", "earthquake", "hydropump", "featherdance"]}, + {"generation": 4, "level": 45, "shiny": 1, "moves": ["extrasensory", "raindance", "hydropump", "aeroblast"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["aeroblast", "punishment", "ancientpower", "safeguard"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["whirlwind", "weatherball"], "pokeball": "dreamball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["raindance", "hydropump", "aeroblast", "punishment"]}, + {"generation": 6, "level": 50, "nature": "Timid", "isHidden": false, "moves": ["aeroblast", "hydropump", "dragonrush", "icebeam"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["skillswap", "aeroblast", "extrasensory", "ancientpower"]}, + {"generation": 7, "level": 100, "isHidden": true, "moves": ["aeroblast", "hurricane", "defog", "tailwind"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["skillswap", "aeroblast", "extrasensory", "ancientpower"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["aeroblast", "earthpower", "psychic", "tailwind"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 2, "level": 40}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, hooh: { randomBattleMoves: ["substitute", "sacredfire", "bravebird", "earthquake", "roost", "toxic", "flamecharge"], randomDoubleBattleMoves: ["substitute", "sacredfire", "bravebird", "earthquake", "roost", "toxic", "tailwind", "skydrop", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "shiny": 1, "moves":["recover", "fireblast", "sunnyday", "swift"]}, - {"generation": 4, "level": 45, "shiny": 1, "moves":["extrasensory", "sunnyday", "fireblast", "sacredfire"]}, - {"generation": 4, "level": 70, "shiny": 1, "moves":["sacredfire", "punishment", "ancientpower", "safeguard"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["whirlwind", "weatherball"], "pokeball": "dreamball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["sunnyday", "fireblast", "sacredfire", "punishment"]}, - {"generation": 6, "level": 50, "shiny": true, "isHidden": false, "moves":["sacredfire", "bravebird", "recover", "celebrate"], "pokeball": "cherishball"}, - {"generation": 7, "level": 100, "isHidden": false, "moves":["sacredfire", "bravebird", "recover", "safeguard"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "shiny": 1, "moves": ["recover", "fireblast", "sunnyday", "swift"]}, + {"generation": 4, "level": 45, "shiny": 1, "moves": ["extrasensory", "sunnyday", "fireblast", "sacredfire"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["sacredfire", "punishment", "ancientpower", "safeguard"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["whirlwind", "weatherball"], "pokeball": "dreamball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["sunnyday", "fireblast", "sacredfire", "punishment"]}, + {"generation": 6, "level": 50, "shiny": true, "isHidden": false, "moves": ["sacredfire", "bravebird", "recover", "celebrate"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["sacredfire", "bravebird", "recover", "safeguard"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["burnup", "sacredfire", "extrasensory", "ancientpower"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["burnup", "sacredfire", "extrasensory", "ancientpower"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["sacredfire", "bravebird", "earthquake", "tailwind"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 2, "level": 40}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, celebi: { - randomBattleMoves: ["nastyplot", "psychic", "gigadrain", "recover", "healbell", "batonpass", "earthpower", "hiddenpowerfire", "leafstorm", "uturn", "thunderwave"], + randomBattleMoves: ["nastyplot", "psychic", "gigadrain", "recover", "healbell", "earthpower", "hiddenpowerfire", "leafstorm", "uturn", "thunderwave"], randomDoubleBattleMoves: ["protect", "psychic", "gigadrain", "leechseed", "recover", "earthpower", "hiddenpowerfire", "nastyplot", "leafstorm", "uturn", "thunderwave"], eventPokemon: [ - {"generation": 3, "level": 10, "moves":["confusion", "recover", "healbell", "safeguard"]}, - {"generation": 3, "level": 70, "moves":["ancientpower", "futuresight", "batonpass", "perishsong"]}, - {"generation": 3, "level": 10, "moves":["leechseed", "recover", "healbell", "safeguard"]}, - {"generation": 3, "level": 30, "moves":["healbell", "safeguard", "ancientpower", "futuresight"]}, - {"generation": 4, "level": 50, "moves":["leafstorm", "recover", "nastyplot", "healingwish"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "moves":["recover", "healbell", "safeguard", "holdback"], "pokeball": "luxuryball"}, - {"generation": 6, "level": 100, "moves":["confusion", "recover", "healbell", "safeguard"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "moves": ["confusion", "recover", "healbell", "safeguard"], "pokeball": "pokeball"}, + {"generation": 3, "level": 70, "moves": ["ancientpower", "futuresight", "batonpass", "perishsong"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "moves": ["leechseed", "recover", "healbell", "safeguard"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "moves": ["healbell", "safeguard", "ancientpower", "futuresight"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["leafstorm", "recover", "nastyplot", "healingwish"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "moves": ["recover", "healbell", "safeguard", "holdback"], "pokeball": "luxuryball"}, + {"generation": 6, "level": 100, "moves": ["confusion", "recover", "healbell", "safeguard"], "pokeball": "cherishball"}, + {"generation": 7, "level": 30, "moves": ["healbell", "safeguard", "ancientpower", "futuresight"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 2, "level": 30}, ], eventOnly: true, tier: "UU", + doublesTier: "(DUU)", }, treecko: { randomBattleMoves: ["substitute", "leechseed", "leafstorm", "hiddenpowerice", "hiddenpowerrock", "endeavor"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["pound", "leer", "absorb"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["pound", "leer", "absorb"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["pound", "leer", "absorb"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["pound", "leer", "absorb"]}, ], tier: "LC", }, @@ -2429,47 +3345,51 @@ exports.BattleFormatsData = { randomBattleMoves: ["gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "hiddenpowerflying"], randomDoubleBattleMoves: ["gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "hiddenpowerfire", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves":["leafstorm", "dragonpulse", "focusblast", "rockslide"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves": ["leafstorm", "dragonpulse", "focusblast", "rockslide"], "pokeball": "cherishball"}, ], tier: "NU", + doublesTier: "(DUU)", }, sceptilemega: { randomBattleMoves: ["substitute", "gigadrain", "dragonpulse", "focusblast", "swordsdance", "outrage", "leafblade", "earthquake", "hiddenpowerfire"], randomDoubleBattleMoves: ["substitute", "gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "dragonpulse", "hiddenpowerfire", "protect"], requiredItem: "Sceptilite", - tier: "UU", + tier: "RUBL", + doublesTier: "DUU", }, torchic: { - randomBattleMoves: ["protect", "batonpass", "substitute", "hiddenpowergrass", "swordsdance", "firepledge"], + randomBattleMoves: ["protect", "substitute", "hiddenpowergrass", "swordsdance", "firepledge"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "growl", "focusenergy", "ember"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["scratch", "growl", "focusenergy", "ember"]}, - {"generation": 6, "level": 10, "gender": "M", "isHidden": true, "moves":["scratch", "growl", "focusenergy", "ember"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "growl", "focusenergy", "ember"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["scratch", "growl", "focusenergy", "ember"]}, + {"generation": 6, "level": 10, "gender": "M", "isHidden": true, "moves": ["scratch", "growl", "focusenergy", "ember"], "pokeball": "cherishball"}, ], tier: "LC", }, combusken: { - randomBattleMoves: ["flareblitz", "skyuppercut", "protect", "swordsdance", "substitute", "batonpass", "shadowclaw"], + randomBattleMoves: ["flareblitz", "skyuppercut", "protect", "swordsdance", "shadowclaw"], tier: "NFE", }, blaziken: { - randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "substitute", "batonpass", "stoneedge", "knockoff"], + randomBattleMoves: ["blazekick", "highjumpkick", "protect", "swordsdance", "stoneedge", "knockoff"], eventPokemon: [ - {"generation": 3, "level": 70, "moves":["blazekick", "slash", "mirrormove", "skyuppercut"]}, - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves":["flareblitz", "highjumpkick", "thunderpunch", "stoneedge"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "moves": ["blazekick", "slash", "mirrormove", "skyuppercut"], "pokeball": "pokeball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves": ["flareblitz", "highjumpkick", "thunderpunch", "stoneedge"], "pokeball": "cherishball"}, ], tier: "Uber", + doublesTier: "(DUU)", }, blazikenmega: { - randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "substitute", "batonpass", "stoneedge", "knockoff"], + randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "stoneedge", "knockoff"], requiredItem: "Blazikenite", tier: "Uber", + doublesTier: "DUU", }, mudkip: { randomBattleMoves: ["hydropump", "earthpower", "hiddenpowerelectric", "icebeam", "sludgewave"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["tackle", "growl", "mudslap", "watergun"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tackle", "growl", "mudslap", "watergun"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["tackle", "growl", "mudslap", "watergun"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tackle", "growl", "mudslap", "watergun"]}, ], tier: "LC", }, @@ -2481,107 +3401,156 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "scald", "icebeam", "roar", "toxic", "protect"], randomDoubleBattleMoves: ["waterfall", "earthquake", "icebeam", "stealthrock", "wideguard", "scald", "rockslide", "muddywater", "protect", "icywind"], eventPokemon: [ - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves":["earthquake", "icebeam", "hydropump", "hammerarm"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves": ["earthquake", "icebeam", "hydropump", "hammerarm"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "(DUU)", }, swampertmega: { randomBattleMoves: ["raindance", "waterfall", "earthquake", "icepunch", "superpower"], randomDoubleBattleMoves: ["waterfall", "earthquake", "raindance", "icepunch", "superpower", "protect"], requiredItem: "Swampertite", tier: "OU", + doublesTier: "DOU", }, poochyena: { randomBattleMoves: ["superfang", "foulplay", "suckerpunch", "toxic", "crunch", "firefang", "icefang", "poisonfang"], eventPokemon: [ - {"generation": 3, "level": 10, "abilities":["runaway"], "moves":["healbell", "dig", "poisonfang", "howl"]}, + {"generation": 3, "level": 10, "abilities": ["runaway"], "moves": ["healbell", "dig", "poisonfang", "howl"]}, + ], + encounters: [ + {"generation": 3, "level": 2}, ], tier: "LC", }, mightyena: { randomBattleMoves: ["crunch", "suckerpunch", "playrough", "firefang", "irontail"], randomDoubleBattleMoves: ["suckerpunch", "crunch", "playrough", "firefang", "taunt", "protect"], - tier: "PU", + eventPokemon: [ + {"generation": 7, "level": 64, "gender": "M", "isHidden": false, "abilities": ["intimidate"], "moves": ["crunch", "firefang", "icefang", "thunderfang"], "pokeball": "cherishball"}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, zigzagoon: { randomBattleMoves: ["trick", "thunderwave", "icebeam", "thunderbolt", "gunkshot", "lastresort"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": true, "abilities":["pickup"], "moves":["tackle", "growl", "tailwhip"]}, - {"generation": 3, "level": 5, "shiny": 1, "abilities":["pickup"], "moves":["tackle", "growl", "tailwhip", "extremespeed"]}, + {"generation": 3, "level": 5, "shiny": true, "abilities": ["pickup"], "moves": ["tackle", "growl", "tailwhip"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["pickup"], "moves": ["tackle", "growl", "tailwhip", "extremespeed"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 3, "level": 2}, ], tier: "LC", }, linoone: { - randomBattleMoves: ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"], - randomDoubleBattleMoves: ["bellydrum", "extremespeed", "seedbomb", "protect", "shadowclaw"], + randomBattleMoves: ["bellydrum", "extremespeed", "stompingtantrum", "shadowclaw"], + randomDoubleBattleMoves: ["bellydrum", "extremespeed", "stompingtantrum", "protect", "shadowclaw"], eventPokemon: [ - {"generation": 6, "level": 50, "isHidden": false, "moves":["extremespeed", "helpinghand", "babydolleyes", "protect"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "isHidden": false, "moves": ["extremespeed", "helpinghand", "babydolleyes", "protect"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 4, "level": 3}, + {"generation": 6, "level": 17, "maxEggMoves": 1}, ], tier: "RU", + doublesTier: "(DUU)", }, wurmple: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], + encounters: [ + {"generation": 3, "level": 2}, + ], tier: "LC", }, silcoon: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], tier: "NFE", + encounters: [ + {"generation": 3, "level": 5}, + {"generation": 4, "level": 5}, + {"generation": 6, "level": 2, "maxEggMoves": 1}, + ], }, beautifly: { randomBattleMoves: ["quiverdance", "bugbuzz", "aircutter", "psychic", "gigadrain", "hiddenpowerrock"], randomDoubleBattleMoves: ["quiverdance", "bugbuzz", "gigadrain", "hiddenpowerrock", "aircutter", "tailwind", "stringshot", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, cascoon: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], + encounters: [ + {"generation": 3, "level": 5}, + {"generation": 4, "level": 5}, + {"generation": 6, "level": 2, "maxEggMoves": 1}, + ], tier: "NFE", }, dustox: { randomBattleMoves: ["roost", "defog", "bugbuzz", "sludgebomb", "quiverdance", "uturn", "shadowball"], randomDoubleBattleMoves: ["tailwind", "stringshot", "strugglebug", "bugbuzz", "protect", "sludgebomb", "quiverdance", "shadowball"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, lotad: { randomBattleMoves: ["gigadrain", "icebeam", "scald", "naturepower", "raindance"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["astonish", "growl", "absorb"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["astonish", "growl", "absorb"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 3, "level": 3}, ], tier: "LC", }, lombre: { randomBattleMoves: ["fakeout", "swordsdance", "waterfall", "seedbomb", "icepunch", "firepunch", "thunderpunch", "poweruppunch", "gigadrain", "icebeam"], + encounters: [ + {"generation": 6, "level": 13, "maxEggMoves": 1}, + ], tier: "NFE", }, ludicolo: { randomBattleMoves: ["raindance", "hydropump", "scald", "gigadrain", "icebeam", "focusblast"], randomDoubleBattleMoves: ["raindance", "hydropump", "surf", "gigadrain", "icebeam", "fakeout", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "abilities":["swiftswim"], "moves":["fakeout", "hydropump", "icebeam", "gigadrain"], "pokeball": "cherishball"}, - {"generation": 5, "level": 30, "gender": "M", "nature": "Calm", "isHidden": false, "abilities":["swiftswim"], "moves":["scald", "gigadrain", "icebeam", "sunnyday"]}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "abilities": ["swiftswim"], "moves": ["fakeout", "hydropump", "icebeam", "gigadrain"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "gender": "M", "nature": "Calm", "isHidden": false, "abilities": ["swiftswim"], "moves": ["scald", "gigadrain", "icebeam", "sunnyday"], "pokeball": "pokeball"}, ], tier: "PU", + doublesTier: "(DUU)", }, seedot: { randomBattleMoves: ["defog", "naturepower", "seedbomb", "explosion", "foulplay"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["bide", "harden", "growth"]}, - {"generation": 3, "level": 17, "moves":["refresh", "gigadrain", "bulletseed", "secretpower"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["bide", "harden", "growth"], "pokeball": "pokeball"}, + {"generation": 3, "level": 17, "moves": ["refresh", "gigadrain", "bulletseed", "secretpower"]}, + ], + encounters: [ + {"generation": 3, "level": 3}, ], tier: "LC", }, nuzleaf: { randomBattleMoves: ["naturepower", "seedbomb", "explosion", "swordsdance", "rockslide", "lowsweep"], + encounters: [ + {"generation": 6, "level": 13, "maxEggMoves": 1}, + ], tier: "NFE", }, shiftry: { randomBattleMoves: ["leafstorm", "swordsdance", "leafblade", "suckerpunch", "defog", "lowkick", "knockoff"], randomDoubleBattleMoves: ["leafstorm", "swordsdance", "leafblade", "suckerpunch", "knockoff", "lowkick", "fakeout", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, taillow: { randomBattleMoves: ["bravebird", "facade", "quickattack", "uturn", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["peck", "growl", "focusenergy", "featherdance"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["peck", "growl", "focusenergy", "featherdance"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 3, "level": 4}, ], tier: "LC", }, @@ -2589,83 +3558,113 @@ exports.BattleFormatsData = { randomBattleMoves: ["protect", "facade", "bravebird", "uturn", "quickattack"], randomDoubleBattleMoves: ["bravebird", "facade", "quickattack", "uturn", "protect"], eventPokemon: [ - {"generation": 3, "level": 43, "moves":["batonpass", "skyattack", "agility", "facade"]}, + {"generation": 3, "level": 43, "moves": ["batonpass", "skyattack", "agility", "facade"]}, + ], + encounters: [ + {"generation": 4, "level": 20}, ], tier: "RU", + doublesTier: "(DUU)", }, wingull: { randomBattleMoves: ["scald", "icebeam", "tailwind", "uturn", "airslash", "knockoff", "defog"], - tier: "LC", + encounters: [ + {"generation": 3, "level": 2}, + ], + tier: "LC Uber", }, pelipper: { randomBattleMoves: ["scald", "uturn", "hurricane", "toxic", "roost", "defog", "knockoff"], randomDoubleBattleMoves: ["scald", "surf", "hurricane", "wideguard", "protect", "tailwind", "knockoff"], + encounters: [ + {"generation": 4, "level": 15}, + {"generation": 6, "level": 18, "maxEggMoves": 1}, + ], tier: "OU", + doublesTier: "DOU", }, ralts: { randomBattleMoves: ["trickroom", "destinybond", "psychic", "willowisp", "hypnosis", "dazzlinggleam", "substitute", "trick"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["growl", "wish"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["growl", "charm"]}, - {"generation": 3, "level": 20, "moves":["sing", "shockwave", "reflect", "confusion"]}, - {"generation": 6, "level": 1, "isHidden": true, "moves":["growl", "encore"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["growl", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["growl", "charm"], "pokeball": "pokeball"}, + {"generation": 3, "level": 20, "moves": ["sing", "shockwave", "reflect", "confusion"]}, + {"generation": 6, "level": 1, "isHidden": true, "moves": ["growl", "encore"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 3, "level": 4}, ], tier: "LC", }, kirlia: { randomBattleMoves: ["trick", "dazzlinggleam", "psychic", "willowisp", "signalbeam", "thunderbolt", "destinybond", "substitute"], + encounters: [ + {"generation": 4, "level": 6}, + ], tier: "NFE", }, gardevoir: { randomBattleMoves: ["psychic", "thunderbolt", "focusblast", "shadowball", "moonblast", "calmmind", "substitute", "willowisp"], randomDoubleBattleMoves: ["psyshock", "focusblast", "shadowball", "moonblast", "taunt", "willowisp", "thunderbolt", "trickroom", "helpinghand", "protect", "dazzlinggleam"], eventPokemon: [ - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "abilities":["trace"], "moves":["hypnosis", "thunderbolt", "focusblast", "psychic"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": true, "gender": "F", "isHidden": false, "abilities":["synchronize"], "moves":["dazzlinggleam", "moonblast", "storedpower", "calmmind"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "abilities": ["trace"], "moves": ["hypnosis", "thunderbolt", "focusblast", "psychic"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": true, "gender": "F", "isHidden": false, "abilities": ["synchronize"], "moves": ["dazzlinggleam", "moonblast", "storedpower", "calmmind"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "DUU", }, gardevoirmega: { randomBattleMoves: ["calmmind", "hypervoice", "psyshock", "focusblast", "substitute", "taunt", "willowisp"], randomDoubleBattleMoves: ["psyshock", "focusblast", "shadowball", "calmmind", "thunderbolt", "hypervoice", "protect"], requiredItem: "Gardevoirite", - tier: "OU", + tier: "UUBL", + doublesTier: "DOU", }, gallade: { randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "shadowsneak", "closecombat", "zenheadbutt", "knockoff", "trick"], randomDoubleBattleMoves: ["closecombat", "trick", "stoneedge", "shadowsneak", "drainpunch", "icepunch", "zenheadbutt", "knockoff", "trickroom", "protect", "helpinghand"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, gallademega: { randomBattleMoves: ["swordsdance", "closecombat", "drainpunch", "knockoff", "zenheadbutt", "substitute"], randomDoubleBattleMoves: ["closecombat", "stoneedge", "drainpunch", "icepunch", "zenheadbutt", "swordsdance", "knockoff", "protect"], requiredItem: "Galladite", - tier: "OU", + tier: "UUBL", + doublesTier: "(DUU)", }, surskit: { randomBattleMoves: ["hydropump", "signalbeam", "hiddenpowerfire", "stickyweb", "gigadrain", "powersplit"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["bubble", "mudsport"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["bubble", "quickattack"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["bubble", "mudsport"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["bubble", "quickattack"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 3, "level": 3}, ], tier: "LC", }, masquerain: { - randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "hydropump", "roost", "batonpass", "stickyweb"], + randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "hydropump", "roost", "stickyweb"], randomDoubleBattleMoves: ["hydropump", "bugbuzz", "airslash", "quiverdance", "tailwind", "roost", "strugglebug", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 21, "maxEggMoves": 1}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, shroomish: { randomBattleMoves: ["spore", "substitute", "leechseed", "gigadrain", "protect", "toxic", "stunspore"], eventPokemon: [ - {"generation": 3, "level": 15, "abilities":["effectspore"], "moves":["refresh", "falseswipe", "megadrain", "stunspore"]}, + {"generation": 3, "level": 15, "abilities": ["effectspore"], "moves": ["refresh", "falseswipe", "megadrain", "stunspore"]}, ], tier: "LC", }, breloom: { randomBattleMoves: ["spore", "machpunch", "bulletseed", "rocktomb", "swordsdance"], randomDoubleBattleMoves: ["spore", "helpinghand", "machpunch", "bulletseed", "rocktomb", "protect", "drainpunch"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, slakoth: { randomBattleMoves: ["doubleedge", "hammerarm", "firepunch", "counter", "retaliate", "toxic"], @@ -2676,86 +3675,101 @@ exports.BattleFormatsData = { tier: "NFE", }, slaking: { - randomBattleMoves: ["earthquake", "pursuit", "nightslash", "doubleedge", "retaliate"], + randomBattleMoves: ["earthquake", "pursuit", "nightslash", "retaliate", "gigaimpact", "firepunch"], randomDoubleBattleMoves: ["earthquake", "nightslash", "doubleedge", "retaliate", "hammerarm", "rockslide"], eventPokemon: [ - {"generation": 4, "level": 50, "gender": "M", "nature": "Adamant", "moves":["gigaimpact", "return", "shadowclaw", "aerialace"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Adamant", "moves": ["gigaimpact", "return", "shadowclaw", "aerialace"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, nincada: { randomBattleMoves: ["xscissor", "dig", "aerialace", "nightslash"], tier: "LC", }, ninjask: { - randomBattleMoves: ["batonpass", "swordsdance", "substitute", "protect", "leechlife"], + randomBattleMoves: ["swordsdance", "aerialace", "nightslash", "dig", "leechlife", "uturn"], randomDoubleBattleMoves: ["batonpass", "swordsdance", "substitute", "protect", "leechlife", "aerialace"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, shedinja: { - randomBattleMoves: ["swordsdance", "willowisp", "xscissor", "shadowsneak", "shadowclaw", "batonpass"], + randomBattleMoves: ["swordsdance", "willowisp", "xscissor", "shadowsneak", "shadowclaw"], randomDoubleBattleMoves: ["swordsdance", "willowisp", "xscissor", "shadowsneak", "shadowclaw", "protect"], eventPokemon: [ - {"generation": 3, "level": 50, "moves":["spite", "confuseray", "shadowball", "grudge"]}, - {"generation": 3, "level": 20, "shiny": 1, "moves":["doubleteam", "furycutter", "screech"]}, - {"generation": 3, "level": 25, "shiny": 1, "moves":["swordsdance"]}, - {"generation": 3, "level": 31, "shiny": 1, "moves":["slash"]}, - {"generation": 3, "level": 38, "shiny": 1, "moves":["agility"]}, - {"generation": 3, "level": 45, "shiny": 1, "moves":["batonpass"]}, - {"generation": 4, "level": 52, "shiny": 1, "moves":["xscissor"]}, + {"generation": 3, "level": 50, "moves": ["spite", "confuseray", "shadowball", "grudge"], "pokeball": "pokeball"}, + {"generation": 3, "level": 20, "shiny": 1, "moves": ["doubleteam", "furycutter", "screech"]}, + {"generation": 3, "level": 25, "shiny": 1, "moves": ["swordsdance"]}, + {"generation": 3, "level": 31, "shiny": 1, "moves": ["slash"]}, + {"generation": 3, "level": 38, "shiny": 1, "moves": ["agility"]}, + {"generation": 3, "level": 45, "shiny": 1, "moves": ["batonpass"]}, + {"generation": 4, "level": 52, "shiny": 1, "moves": ["xscissor"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, whismur: { randomBattleMoves: ["hypervoice", "fireblast", "shadowball", "icebeam", "extrasensory"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["pound", "uproar", "teeterdance"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["pound", "uproar", "teeterdance"], "pokeball": "pokeball"}, ], tier: "LC", }, loudred: { randomBattleMoves: ["hypervoice", "fireblast", "shadowball", "icebeam", "circlethrow", "bodyslam"], + encounters: [ + {"generation": 6, "level": 16, "maxEggMoves": 1}, + ], tier: "NFE", }, exploud: { randomBattleMoves: ["boomburst", "fireblast", "icebeam", "surf", "focusblast"], randomDoubleBattleMoves: ["boomburst", "fireblast", "icebeam", "surf", "focusblast", "protect", "hypervoice"], eventPokemon: [ - {"generation": 3, "level": 100, "moves":["roar", "rest", "sleeptalk", "hypervoice"]}, - {"generation": 3, "level": 50, "moves":["stomp", "screech", "hyperbeam", "roar"]}, + {"generation": 3, "level": 100, "moves": ["roar", "rest", "sleeptalk", "hypervoice"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["stomp", "screech", "hyperbeam", "roar"], "pokeball": "pokeball"}, ], - tier: "BL3", + tier: "NUBL", + doublesTier: "(DUU)", }, makuhita: { randomBattleMoves: ["crosschop", "bulletpunch", "closecombat", "icepunch", "bulkup", "fakeout", "earthquake"], eventPokemon: [ - {"generation": 3, "level": 18, "moves":["refresh", "brickbreak", "armthrust", "rocktomb"]}, + {"generation": 3, "level": 18, "moves": ["refresh", "brickbreak", "armthrust", "rocktomb"]}, ], tier: "LC", }, hariyama: { randomBattleMoves: ["bulletpunch", "closecombat", "icepunch", "stoneedge", "bulkup", "knockoff"], randomDoubleBattleMoves: ["bulletpunch", "closecombat", "icepunch", "stoneedge", "fakeout", "knockoff", "helpinghand", "wideguard", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 22, "isHidden": false}, + ], + tier: "NU", + doublesTier: "DUU", }, nosepass: { randomBattleMoves: ["powergem", "thunderwave", "stealthrock", "painsplit", "explosion", "voltswitch"], eventPokemon: [ - {"generation": 3, "level": 26, "moves":["helpinghand", "thunderbolt", "thunderwave", "rockslide"]}, + {"generation": 3, "level": 26, "moves": ["helpinghand", "thunderbolt", "thunderwave", "rockslide"]}, ], tier: "LC", }, probopass: { - randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "flashcannon", "powergem", "voltswitch", "painsplit"], + randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "flashcannon", "voltswitch", "earthpower"], randomDoubleBattleMoves: ["stealthrock", "thunderwave", "helpinghand", "earthpower", "powergem", "wideguard", "protect", "flashcannon"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, skitty: { randomBattleMoves: ["doubleedge", "zenheadbutt", "thunderwave", "fakeout", "playrough", "healbell"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "abilities":["cutecharm"], "moves":["tackle", "growl", "tailwhip", "payday"]}, - {"generation": 3, "level": 5, "shiny": 1, "abilities":["cutecharm"], "moves":["growl", "tackle", "tailwhip", "rollout"]}, - {"generation": 3, "level": 10, "gender": "M", "abilities":["cutecharm"], "moves":["growl", "tackle", "tailwhip", "attract"]}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["cutecharm"], "moves": ["tackle", "growl", "tailwhip", "payday"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["cutecharm"], "moves": ["growl", "tackle", "tailwhip", "rollout"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["cutecharm"], "moves": ["growl", "tackle", "tailwhip", "attract"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 3, "level": 3, "shiny": false, "gender": "F", "ivs": {"hp": 5, "atk": 4, "def": 4, "spa": 5, "spd": 4, "spe": 4}, "abilities": ["cutecharm"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -2763,44 +3777,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["doubleedge", "suckerpunch", "wildcharge", "fakeout", "thunderwave", "healbell"], randomDoubleBattleMoves: ["doubleedge", "suckerpunch", "playrough", "wildcharge", "fakeout", "thunderwave", "protect", "helpinghand"], eventPokemon: [ - {"generation": 3, "level": 18, "abilities":["cutecharm"], "moves":["sweetkiss", "secretpower", "attract", "shockwave"]}, + {"generation": 3, "level": 18, "abilities": ["cutecharm"], "moves": ["sweetkiss", "secretpower", "attract", "shockwave"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, sableye: { randomBattleMoves: ["recover", "willowisp", "taunt", "toxic", "knockoff", "foulplay"], randomDoubleBattleMoves: ["recover", "willowisp", "taunt", "fakeout", "knockoff", "foulplay", "helpinghand", "snarl", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "abilities":["keeneye"], "moves":["leer", "scratch", "foresight", "nightshade"]}, - {"generation": 3, "level": 33, "abilities":["keeneye"], "moves":["helpinghand", "shadowball", "feintattack", "recover"]}, - {"generation": 5, "level": 50, "gender": "M", "isHidden": true, "moves":["foulplay", "octazooka", "tickle", "trick"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "nature": "Relaxed", "ivs": {"hp": 31, "spa": 31}, "isHidden": true, "moves":["calmmind", "willowisp", "recover", "shadowball"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "nature": "Bold", "isHidden": true, "moves":["willowisp", "recover", "taunt", "shockwave"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "abilities": ["keeneye"], "moves": ["leer", "scratch", "foresight", "nightshade"], "pokeball": "pokeball"}, + {"generation": 3, "level": 33, "abilities": ["keeneye"], "moves": ["helpinghand", "shadowball", "feintattack", "recover"]}, + {"generation": 5, "level": 50, "gender": "M", "isHidden": true, "moves": ["foulplay", "octazooka", "tickle", "trick"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Relaxed", "ivs": {"hp": 31, "spa": 31}, "isHidden": true, "moves": ["calmmind", "willowisp", "recover", "shadowball"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "nature": "Bold", "isHidden": true, "moves": ["willowisp", "recover", "taunt", "shockwave"], "pokeball": "cherishball"}, ], tier: "PU", + doublesTier: "DUU", }, sableyemega: { randomBattleMoves: ["recover", "willowisp", "darkpulse", "calmmind", "shadowball"], randomDoubleBattleMoves: ["fakeout", "knockoff", "darkpulse", "shadowball", "willowisp", "protect"], requiredItem: "Sablenite", tier: "OU", + doublesTier: "DUU", }, mawile: { - randomBattleMoves: ["swordsdance", "ironhead", "substitute", "playrough", "suckerpunch", "batonpass"], + randomBattleMoves: ["swordsdance", "ironhead", "stealthrock", "playrough", "suckerpunch", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "ironhead", "firefang", "substitute", "playrough", "suckerpunch", "knockoff", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["astonish", "faketears"]}, - {"generation": 3, "level": 22, "moves":["sing", "falseswipe", "vicegrip", "irondefense"]}, - {"generation": 6, "level": 50, "isHidden": false, "abilities":["intimidate"], "moves":["ironhead", "playrough", "firefang", "suckerpunch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "isHidden": false, "abilities":["intimidate"], "moves":["suckerpunch", "protect", "playrough", "ironhead"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["astonish", "faketears"], "pokeball": "pokeball"}, + {"generation": 3, "level": 22, "moves": ["sing", "falseswipe", "vicegrip", "irondefense"]}, + {"generation": 6, "level": 50, "isHidden": false, "abilities": ["intimidate"], "moves": ["ironhead", "playrough", "firefang", "suckerpunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "isHidden": false, "abilities": ["intimidate"], "moves": ["suckerpunch", "protect", "playrough", "ironhead"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, mawilemega: { randomBattleMoves: ["swordsdance", "ironhead", "firefang", "substitute", "playrough", "suckerpunch", "knockoff", "focuspunch"], randomDoubleBattleMoves: ["swordsdance", "ironhead", "firefang", "substitute", "playrough", "suckerpunch", "knockoff", "protect"], requiredItem: "Mawilite", tier: "OU", + doublesTier: "DOU", }, aron: { randomBattleMoves: ["headsmash", "ironhead", "earthquake", "superpower", "stealthrock", "endeavor"], @@ -2814,36 +3833,44 @@ exports.BattleFormatsData = { randomBattleMoves: ["autotomize", "headsmash", "earthquake", "lowkick", "heavyslam", "aquatail", "stealthrock"], randomDoubleBattleMoves: ["rockslide", "headsmash", "earthquake", "lowkick", "heavyslam", "aquatail", "stealthrock", "protect"], eventPokemon: [ - {"generation": 3, "level": 100, "moves":["irontail", "protect", "metalsound", "doubleedge"]}, - {"generation": 3, "level": 50, "moves":["takedown", "irontail", "protect", "metalsound"]}, - {"generation": 6, "level": 50, "nature": "Brave", "isHidden": false, "abilities":["rockhead"], "moves":["ironhead", "earthquake", "headsmash", "rockslide"], "pokeball": "cherishball"}, + {"generation": 3, "level": 100, "moves": ["irontail", "protect", "metalsound", "doubleedge"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["takedown", "irontail", "protect", "metalsound"], "pokeball": "pokeball"}, + {"generation": 6, "level": 50, "nature": "Brave", "isHidden": false, "abilities": ["rockhead"], "moves": ["ironhead", "earthquake", "headsmash", "rockslide"], "pokeball": "cherishball"}, ], tier: "PU", + doublesTier: "(DUU)", }, aggronmega: { - randomBattleMoves: ["earthquake", "heavyslam", "icepunch", "stealthrock", "thunderwave", "roar", "toxic"], + randomBattleMoves: ["earthquake", "heavyslam", "rockslide", "stealthrock", "thunderwave", "roar", "toxic"], randomDoubleBattleMoves: ["rockslide", "earthquake", "lowkick", "heavyslam", "aquatail", "protect"], requiredItem: "Aggronite", tier: "UU", + doublesTier: "(DUU)", }, meditite: { randomBattleMoves: ["highjumpkick", "psychocut", "icepunch", "thunderpunch", "trick", "fakeout", "bulletpunch", "drainpunch", "zenheadbutt"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["bide", "meditate", "confusion"]}, - {"generation": 3, "level": 20, "moves":["dynamicpunch", "confusion", "shadowball", "detect"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["bide", "meditate", "confusion"], "pokeball": "pokeball"}, + {"generation": 3, "level": 20, "moves": ["dynamicpunch", "confusion", "shadowball", "detect"], "pokeball": "pokeball"}, ], tier: "LC Uber", }, medicham: { randomBattleMoves: ["highjumpkick", "drainpunch", "zenheadbutt", "icepunch", "bulletpunch"], randomDoubleBattleMoves: ["highjumpkick", "drainpunch", "zenheadbutt", "icepunch", "bulletpunch", "protect", "fakeout"], + encounters: [ + {"generation": 4, "level": 35}, + {"generation": 6, "level": 34, "maxEggMoves": 1}, + ], tier: "NU", + doublesTier: "(DUU)", }, medichammega: { randomBattleMoves: ["highjumpkick", "drainpunch", "icepunch", "fakeout", "zenheadbutt"], randomDoubleBattleMoves: ["highjumpkick", "drainpunch", "zenheadbutt", "icepunch", "bulletpunch", "protect", "fakeout"], requiredItem: "Medichamite", tier: "OU", + doublesTier: "(DUU)", }, electrike: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "switcheroo", "flamethrower", "hiddenpowergrass"], @@ -2853,44 +3880,50 @@ exports.BattleFormatsData = { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat", "flamethrower"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat", "flamethrower", "snarl", "protect"], eventPokemon: [ - {"generation": 3, "level": 44, "moves":["refresh", "thunder", "raindance", "bite"]}, - {"generation": 6, "level": 50, "nature": "Timid", "isHidden": false, "abilities":["lightningrod"], "moves":["overheat", "thunderbolt", "voltswitch", "protect"], "pokeball": "cherishball"}, + {"generation": 3, "level": 44, "moves": ["refresh", "thunder", "raindance", "bite"]}, + {"generation": 6, "level": 50, "nature": "Timid", "isHidden": false, "abilities": ["lightningrod"], "moves": ["overheat", "thunderbolt", "voltswitch", "protect"], "pokeball": "cherishball"}, ], tier: "PU", + doublesTier: "(DUU)", }, manectricmega: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat", "flamethrower", "snarl", "protect"], requiredItem: "Manectite", - tier: "OU", + tier: "UU", + doublesTier: "DOU", }, plusle: { - randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "batonpass", "hiddenpowerice", "encore"], + randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "hiddenpowerice", "encore"], randomDoubleBattleMoves: ["nastyplot", "thunderbolt", "substitute", "protect", "hiddenpowerice", "encore", "helpinghand"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["growl", "thunderwave", "mudsport"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["growl", "thunderwave", "quickattack"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["growl", "thunderwave", "mudsport"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["growl", "thunderwave", "quickattack"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, minun: { - randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "batonpass", "hiddenpowerice", "encore"], + randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "hiddenpowerice", "encore"], randomDoubleBattleMoves: ["nastyplot", "thunderbolt", "substitute", "protect", "hiddenpowerice", "encore", "helpinghand"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["growl", "thunderwave", "watersport"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["growl", "thunderwave", "quickattack"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["growl", "thunderwave", "watersport"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["growl", "thunderwave", "quickattack"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, volbeat: { - randomBattleMoves: ["tailglow", "batonpass", "substitute", "bugbuzz", "thunderwave", "encore", "tailwind"], - randomDoubleBattleMoves: ["stringshot", "strugglebug", "helpinghand", "bugbuzz", "thunderwave", "encore", "tailwind", "protect"], - tier: "PU", + randomBattleMoves: ["uturn", "roost", "thunderwave", "encore", "tailwind", "defog"], + randomDoubleBattleMoves: ["stringshot", "strugglebug", "helpinghand", "thunderwave", "encore", "tailwind", "protect"], + tier: "(PU)", + doublesTier: "(DUU)", }, illumise: { - randomBattleMoves: ["substitute", "batonpass", "bugbuzz", "encore", "thunderbolt", "tailwind", "uturn", "thunderwave"], + randomBattleMoves: ["uturn", "roost", "bugbuzz", "thunderwave", "encore", "wish", "defog"], randomDoubleBattleMoves: ["protect", "helpinghand", "bugbuzz", "encore", "thunderbolt", "tailwind", "uturn"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, budew: { randomBattleMoves: ["spikes", "sludgebomb", "sleeppowder", "gigadrain", "stunspore", "rest"], @@ -2899,50 +3932,58 @@ exports.BattleFormatsData = { roselia: { randomBattleMoves: ["spikes", "toxicspikes", "sleeppowder", "gigadrain", "stunspore", "rest", "sludgebomb", "synthesis"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["absorb", "growth", "poisonsting"]}, - {"generation": 3, "level": 22, "moves":["sweetkiss", "magicalleaf", "leechseed", "grasswhistle"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["absorb", "growth", "poisonsting"], "pokeball": "pokeball"}, + {"generation": 3, "level": 22, "moves": ["sweetkiss", "magicalleaf", "leechseed", "grasswhistle"]}, ], - tier: "NFE", + tier: "PU", + doublesTier: "NFE", }, roserade: { randomBattleMoves: ["sludgebomb", "gigadrain", "sleeppowder", "leafstorm", "spikes", "toxicspikes", "rest", "synthesis", "hiddenpowerfire"], randomDoubleBattleMoves: ["sludgebomb", "gigadrain", "sleeppowder", "leafstorm", "protect", "hiddenpowerfire"], tier: "RU", + doublesTier: "(DUU)", }, gulpin: { randomBattleMoves: ["stockpile", "sludgebomb", "sludgewave", "icebeam", "toxic", "painsplit", "yawn", "encore"], eventPokemon: [ - {"generation": 3, "level": 17, "moves":["sing", "shockwave", "sludge", "toxic"]}, + {"generation": 3, "level": 17, "moves": ["sing", "shockwave", "sludge", "toxic"]}, ], tier: "LC", }, swalot: { randomBattleMoves: ["sludgebomb", "icebeam", "toxic", "yawn", "encore", "painsplit", "earthquake"], randomDoubleBattleMoves: ["sludgebomb", "icebeam", "protect", "yawn", "encore", "gunkshot", "earthquake"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, carvanha: { randomBattleMoves: ["protect", "hydropump", "icebeam", "waterfall", "crunch", "aquajet", "destinybond"], eventPokemon: [ - {"generation": 3, "level": 15, "moves":["refresh", "waterpulse", "bite", "scaryface"]}, - {"generation": 6, "level": 1, "isHidden": true, "moves":["leer", "bite", "hydropump"]}, + {"generation": 3, "level": 15, "moves": ["refresh", "waterpulse", "bite", "scaryface"]}, + {"generation": 6, "level": 1, "isHidden": true, "moves": ["leer", "bite", "hydropump"], "pokeball": "pokeball"}, ], tier: "LC", }, sharpedo: { - randomBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "waterfall", "destinybond"], - randomDoubleBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "waterfall", "destinybond"], + randomBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "waterfall"], + randomDoubleBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "liquidation"], eventPokemon: [ - {"generation": 6, "level": 50, "nature": "Adamant", "isHidden": true, "moves":["aquajet", "crunch", "icefang", "destinybond"], "pokeball": "cherishball"}, - {"generation": 6, "level": 43, "gender": "M", "perfectIVs": 2, "isHidden": false, "moves":["scaryface", "slash", "poisonfang", "crunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Adamant", "isHidden": true, "moves": ["aquajet", "crunch", "icefang", "destinybond"], "pokeball": "cherishball"}, + {"generation": 6, "level": 43, "gender": "M", "perfectIVs": 2, "isHidden": false, "moves": ["scaryface", "slash", "poisonfang", "crunch"], "pokeball": "cherishball"}, ], - tier: "RU", + encounters: [ + {"generation": 7, "level": 10}, + ], + tier: "RUBL", + doublesTier: "(DUU)", }, sharpedomega: { - randomBattleMoves: ["protect", "icefang", "crunch", "earthquake", "waterfall", "psychicfangs"], - randomDoubleBattleMoves: ["protect", "icefang", "crunch", "waterfall", "psychicfangs"], + randomBattleMoves: ["protect", "crunch", "waterfall", "icefang", "psychicfangs", "destinybond"], + randomDoubleBattleMoves: ["protect", "icefang", "crunch", "liquidation", "psychicfangs"], requiredItem: "Sharpedonite", tier: "UU", + doublesTier: "(DUU)", }, wailmer: { randomBattleMoves: ["waterspout", "surf", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerelectric"], @@ -2952,16 +3993,23 @@ exports.BattleFormatsData = { randomBattleMoves: ["waterspout", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerfire"], randomDoubleBattleMoves: ["waterspout", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerfire", "protect"], eventPokemon: [ - {"generation": 3, "level": 100, "moves":["rest", "waterspout", "amnesia", "hydropump"]}, - {"generation": 3, "level": 50, "moves":["waterpulse", "mist", "rest", "waterspout"]}, + {"generation": 3, "level": 100, "moves": ["rest", "waterspout", "amnesia", "hydropump"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["waterpulse", "mist", "rest", "waterspout"], "pokeball": "pokeball"}, ], - tier: "PU", + encounters: [ + {"generation": 3, "level": 25}, + {"generation": 4, "level": 35}, + {"generation": 5, "level": 30, "isHidden": false}, + {"generation": 7, "level": 10}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, numel: { randomBattleMoves: ["curse", "earthquake", "rockslide", "fireblast", "flamecharge", "rest", "sleeptalk", "stockpile", "hiddenpowerelectric", "earthpower", "lavaplume"], eventPokemon: [ - {"generation": 3, "level": 14, "abilities":["oblivious"], "moves":["charm", "takedown", "dig", "ember"]}, - {"generation": 6, "level": 1, "isHidden": false, "moves":["growl", "tackle", "ironhead"]}, + {"generation": 3, "level": 14, "abilities": ["oblivious"], "moves": ["charm", "takedown", "dig", "ember"]}, + {"generation": 6, "level": 1, "isHidden": false, "moves": ["growl", "tackle", "ironhead"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -2969,45 +4017,56 @@ exports.BattleFormatsData = { randomBattleMoves: ["rockpolish", "fireblast", "earthpower", "lavaplume", "stealthrock", "hiddenpowergrass", "roar", "stoneedge"], randomDoubleBattleMoves: ["rockpolish", "fireblast", "earthpower", "heatwave", "eruption", "hiddenpowergrass", "protect"], eventPokemon: [ - {"generation": 6, "level": 43, "gender": "M", "perfectIVs": 2, "isHidden": false, "abilities":["solidrock"], "moves":["curse", "takedown", "rockslide", "yawn"], "pokeball": "cherishball"}, + {"generation": 6, "level": 43, "gender": "M", "perfectIVs": 2, "isHidden": false, "abilities": ["solidrock"], "moves": ["curse", "takedown", "rockslide", "yawn"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, cameruptmega: { randomBattleMoves: ["stealthrock", "fireblast", "earthpower", "ancientpower", "willowisp", "toxic"], randomDoubleBattleMoves: ["fireblast", "earthpower", "heatwave", "eruption", "rockslide", "protect"], requiredItem: "Cameruptite", - tier: "UU", + tier: "NUBL", + doublesTier: "DOU", }, torkoal: { randomBattleMoves: ["shellsmash", "fireblast", "earthpower", "solarbeam", "stealthrock", "rapidspin", "yawn", "lavaplume"], randomDoubleBattleMoves: ["protect", "heatwave", "earthpower", "willowisp", "shellsmash", "fireblast", "solarbeam"], - tier: "RU", + tier: "(PU)", + doublesTier: "DOU", }, spoink: { randomBattleMoves: ["psychic", "reflect", "lightscreen", "thunderwave", "trick", "healbell", "calmmind", "hiddenpowerfighting", "shadowball"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "abilities":["owntempo"], "moves":["splash", "uproar"]}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["owntempo"], "moves": ["splash", "uproar"], "pokeball": "pokeball"}, ], tier: "LC", }, grumpig: { randomBattleMoves: ["psychic", "thunderwave", "healbell", "whirlwind", "toxic", "focusblast", "reflect", "lightscreen"], randomDoubleBattleMoves: ["psychic", "psyshock", "thunderwave", "trickroom", "taunt", "protect", "focusblast", "reflect", "lightscreen"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, spinda: { randomBattleMoves: ["return", "superpower", "suckerpunch", "trickroom"], randomDoubleBattleMoves: ["doubleedge", "return", "superpower", "suckerpunch", "trickroom", "fakeout", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["tackle", "uproar", "sing"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["tackle", "uproar", "sing"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, trapinch: { randomBattleMoves: ["earthquake", "rockslide", "crunch", "quickattack", "superpower"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves":["bite"]}, + {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves": ["bite"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -3016,35 +4075,40 @@ exports.BattleFormatsData = { tier: "NFE", }, flygon: { - randomBattleMoves: ["earthquake", "outrage", "uturn", "roost", "stoneedge", "firepunch", "dragondance"], + randomBattleMoves: ["earthquake", "outrage", "uturn", "roost", "defog", "firepunch", "dragondance"], randomDoubleBattleMoves: ["earthquake", "protect", "dragonclaw", "uturn", "rockslide", "firepunch", "fireblast", "tailwind", "dragondance"], eventPokemon: [ - {"generation": 3, "level": 45, "moves":["sandtomb", "crunch", "dragonbreath", "screech"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Naive", "moves":["dracometeor", "uturn", "earthquake", "dragonclaw"], "pokeball": "cherishball"}, + {"generation": 3, "level": 45, "moves": ["sandtomb", "crunch", "dragonbreath", "screech"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Naive", "moves": ["dracometeor", "uturn", "earthquake", "dragonclaw"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "(DUU)", }, cacnea: { randomBattleMoves: ["swordsdance", "spikes", "suckerpunch", "seedbomb", "drainpunch"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["poisonsting", "leer", "absorb", "encore"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["poisonsting", "leer", "absorb", "encore"], "pokeball": "pokeball"}, ], tier: "LC", }, cacturne: { - randomBattleMoves: ["swordsdance", "spikes", "suckerpunch", "seedbomb", "drainpunch", "substitute"], + randomBattleMoves: ["swordsdance", "spikes", "suckerpunch", "seedbomb", "drainpunch", "substitute", "darkpulse", "focusblast", "gigadrain"], randomDoubleBattleMoves: ["swordsdance", "spikyshield", "suckerpunch", "seedbomb", "drainpunch", "substitute"], eventPokemon: [ - {"generation": 3, "level": 45, "moves":["ingrain", "feintattack", "spikes", "needlearm"]}, + {"generation": 3, "level": 45, "moves": ["ingrain", "feintattack", "spikes", "needlearm"], "pokeball": "pokeball"}, ], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, swablu: { randomBattleMoves: ["roost", "toxic", "cottonguard", "pluck", "hypervoice", "return"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["peck", "growl", "falseswipe"]}, - {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves":["peck", "growl"]}, - {"generation": 6, "level": 1, "isHidden": true, "moves":["peck", "growl", "hypervoice"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["peck", "growl", "falseswipe"], "pokeball": "pokeball"}, + {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves": ["peck", "growl"], "pokeball": "pokeball"}, + {"generation": 6, "level": 1, "isHidden": true, "moves": ["peck", "growl", "hypervoice"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -3052,58 +4116,64 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "dracometeor", "outrage", "dragonclaw", "earthquake", "roost", "fireblast", "healbell"], randomDoubleBattleMoves: ["dragondance", "dracometeor", "protect", "dragonclaw", "earthquake", "fireblast", "tailwind"], eventPokemon: [ - {"generation": 3, "level": 45, "moves":["takedown", "dragonbreath", "dragondance", "refresh"]}, - {"generation": 3, "level": 36, "moves":["healbell", "dragonbreath", "solarbeam", "aerialace"]}, - {"generation": 5, "level": 35, "gender": "M", "isHidden": true, "moves":["takedown", "naturalgift", "dragonbreath", "falseswipe"]}, - {"generation": 6, "level": 100, "nature": "Modest", "isHidden": true, "moves":["hypervoice", "fireblast", "protect", "agility"], "pokeball": "cherishball"}, + {"generation": 3, "level": 45, "moves": ["takedown", "dragonbreath", "dragondance", "refresh"], "pokeball": "pokeball"}, + {"generation": 3, "level": 36, "moves": ["healbell", "dragonbreath", "solarbeam", "aerialace"]}, + {"generation": 5, "level": 35, "gender": "M", "isHidden": true, "moves": ["takedown", "naturalgift", "dragonbreath", "falseswipe"]}, + {"generation": 6, "level": 100, "nature": "Modest", "isHidden": true, "moves": ["hypervoice", "fireblast", "protect", "agility"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, altariamega: { randomBattleMoves: ["dragondance", "return", "hypervoice", "healbell", "earthquake", "roost", "dracometeor", "fireblast"], randomDoubleBattleMoves: ["dragondance", "return", "doubleedge", "dragonclaw", "earthquake", "protect", "fireblast"], requiredItem: "Altarianite", - tier: "OU", + tier: "UU", + doublesTier: "(DUU)", }, zangoose: { randomBattleMoves: ["swordsdance", "closecombat", "knockoff", "quickattack", "facade"], randomDoubleBattleMoves: ["protect", "closecombat", "knockoff", "quickattack", "facade"], eventPokemon: [ - {"generation": 3, "level": 18, "moves":["leer", "quickattack", "swordsdance", "furycutter"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["scratch", "leer", "quickattack", "swordsdance"]}, - {"generation": 3, "level": 28, "moves":["refresh", "brickbreak", "counter", "crushclaw"]}, + {"generation": 3, "level": 18, "moves": ["leer", "quickattack", "swordsdance", "furycutter"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["scratch", "leer", "quickattack", "swordsdance"], "pokeball": "pokeball"}, + {"generation": 3, "level": 28, "moves": ["refresh", "brickbreak", "counter", "crushclaw"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, seviper: { randomBattleMoves: ["flamethrower", "sludgewave", "gigadrain", "darkpulse", "switcheroo", "coil", "earthquake", "poisonjab", "suckerpunch"], randomDoubleBattleMoves: ["flamethrower", "gigadrain", "earthquake", "suckerpunch", "aquatail", "protect", "glare", "poisonjab", "sludgebomb"], eventPokemon: [ - {"generation": 3, "level": 18, "moves":["wrap", "lick", "bite", "poisontail"]}, - {"generation": 3, "level": 30, "moves":["poisontail", "screech", "glare", "crunch"]}, - {"generation": 3, "level": 10, "gender": "M", "moves":["wrap", "lick", "bite"]}, + {"generation": 3, "level": 18, "moves": ["wrap", "lick", "bite", "poisontail"], "pokeball": "pokeball"}, + {"generation": 3, "level": 30, "moves": ["poisontail", "screech", "glare", "crunch"], "pokeball": "pokeball"}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["wrap", "lick", "bite"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, lunatone: { - randomBattleMoves: ["psychic", "earthpower", "stealthrock", "rockpolish", "batonpass", "calmmind", "icebeam", "powergem", "moonlight", "toxic"], + randomBattleMoves: ["psychic", "earthpower", "stealthrock", "rockpolish", "calmmind", "icebeam", "powergem", "moonlight", "toxic"], randomDoubleBattleMoves: ["psychic", "earthpower", "rockpolish", "calmmind", "helpinghand", "icebeam", "powergem", "moonlight", "trickroom", "protect"], eventPokemon: [ - {"generation": 3, "level": 10, "moves":["tackle", "harden", "confusion"]}, - {"generation": 3, "level": 25, "moves":["batonpass", "psychic", "raindance", "rocktomb"]}, - {"generation": 7, "level": 30, "moves":["cosmicpower", "hiddenpower", "moonblast", "powergem"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "moves": ["tackle", "harden", "confusion"], "pokeball": "pokeball"}, + {"generation": 3, "level": 25, "moves": ["batonpass", "psychic", "raindance", "rocktomb"]}, + {"generation": 7, "level": 30, "moves": ["cosmicpower", "hiddenpower", "moonblast", "powergem"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, solrock: { randomBattleMoves: ["stealthrock", "explosion", "rockslide", "reflect", "lightscreen", "willowisp", "morningsun"], randomDoubleBattleMoves: ["protect", "helpinghand", "stoneedge", "zenheadbutt", "willowisp", "trickroom", "rockslide"], eventPokemon: [ - {"generation": 3, "level": 10, "moves":["tackle", "harden", "confusion"]}, - {"generation": 3, "level": 41, "moves":["batonpass", "psychic", "sunnyday", "cosmicpower"]}, - {"generation": 7, "level": 30, "moves":["cosmicpower", "hiddenpower", "solarbeam", "stoneedge"], "pokeball": "cherishball"}, + {"generation": 3, "level": 10, "moves": ["tackle", "harden", "confusion"], "pokeball": "pokeball"}, + {"generation": 3, "level": 41, "moves": ["batonpass", "psychic", "sunnyday", "cosmicpower"]}, + {"generation": 7, "level": 30, "moves": ["cosmicpower", "hiddenpower", "solarbeam", "stoneedge"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, barboach: { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "return", "bounce"], @@ -3113,66 +4183,78 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "stoneedge", "zenheadbutt"], randomDoubleBattleMoves: ["dragondance", "waterfall", "earthquake", "stoneedge", "zenheadbutt", "protect"], eventPokemon: [ - {"generation": 4, "level": 51, "gender": "F", "nature": "Gentle", "abilities":["oblivious"], "moves":["earthquake", "aquatail", "zenheadbutt", "gigaimpact"], "pokeball": "cherishball"}, + {"generation": 4, "level": 51, "gender": "F", "nature": "Gentle", "abilities": ["oblivious"], "moves": ["earthquake", "aquatail", "zenheadbutt", "gigaimpact"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 4, "level": 10}, + {"generation": 7, "level": 10}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, corphish: { randomBattleMoves: ["dragondance", "waterfall", "crunch", "superpower", "swordsdance", "knockoff", "aquajet"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["bubble", "watersport"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["bubble", "watersport"], "pokeball": "pokeball"}, ], tier: "LC", }, crawdaunt: { randomBattleMoves: ["dragondance", "crabhammer", "superpower", "swordsdance", "knockoff", "aquajet"], - randomDoubleBattleMoves: ["dragondance", "crabhammer", "crunch", "superpower", "swordsdance", "knockoff", "aquajet", "protect"], + randomDoubleBattleMoves: ["dragondance", "liquidation", "crunch", "superpower", "swordsdance", "knockoff", "aquajet", "protect"], eventPokemon: [ - {"generation": 3, "level": 100, "moves":["taunt", "crabhammer", "swordsdance", "guillotine"]}, - {"generation": 3, "level": 50, "moves":["knockoff", "taunt", "crabhammer", "swordsdance"]}, + {"generation": 3, "level": 100, "moves": ["taunt", "crabhammer", "swordsdance", "guillotine"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["knockoff", "taunt", "crabhammer", "swordsdance"], "pokeball": "pokeball"}, + ], + encounters: [ + {"generation": 7, "level": 10}, ], tier: "UU", + doublesTier: "DUU", }, baltoy: { randomBattleMoves: ["stealthrock", "earthquake", "toxic", "psychic", "reflect", "lightscreen", "icebeam", "rapidspin"], eventPokemon: [ - {"generation": 3, "level": 17, "moves":["refresh", "rocktomb", "mudslap", "psybeam"]}, + {"generation": 3, "level": 17, "moves": ["refresh", "rocktomb", "mudslap", "psybeam"]}, ], tier: "LC", }, claydol: { randomBattleMoves: ["stealthrock", "toxic", "psychic", "icebeam", "earthquake", "rapidspin"], randomDoubleBattleMoves: ["earthpower", "trickroom", "psychic", "icebeam", "earthquake", "protect"], - tier: "NU", + tier: "PU", + doublesTier: "(DUU)", }, lileep: { randomBattleMoves: ["stealthrock", "recover", "ancientpower", "hiddenpowerfire", "gigadrain", "stockpile"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves":["recover", "rockslide", "constrict", "acid"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves": ["recover", "rockslide", "constrict", "acid"], "pokeball": "cherishball"}, ], tier: "LC", }, cradily: { randomBattleMoves: ["stealthrock", "recover", "gigadrain", "toxic", "seedbomb", "rockslide", "curse"], randomDoubleBattleMoves: ["protect", "recover", "seedbomb", "rockslide", "earthquake", "curse", "swordsdance"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, anorith: { randomBattleMoves: ["stealthrock", "brickbreak", "toxic", "xscissor", "rockslide", "swordsdance", "rockpolish"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves":["harden", "mudsport", "watergun", "crosspoison"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves": ["harden", "mudsport", "watergun", "crosspoison"], "pokeball": "cherishball"}, ], tier: "LC", }, armaldo: { randomBattleMoves: ["stealthrock", "stoneedge", "toxic", "xscissor", "knockoff", "rapidspin", "earthquake"], randomDoubleBattleMoves: ["rockslide", "stoneedge", "stringshot", "xscissor", "swordsdance", "knockoff", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, feebas: { randomBattleMoves: ["protect", "confuseray", "hypnosis", "scald", "toxic"], eventPokemon: [ - {"generation": 4, "level": 5, "gender": "F", "nature": "Calm", "moves":["splash", "mirrorcoat"], "pokeball": "cherishball"}, + {"generation": 4, "level": 5, "gender": "F", "nature": "Calm", "moves": ["splash", "mirrorcoat"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -3180,37 +4262,43 @@ exports.BattleFormatsData = { randomBattleMoves: ["recover", "scald", "toxic", "icebeam", "dragontail", "rest", "sleeptalk"], randomDoubleBattleMoves: ["recover", "scald", "hydropump", "icebeam", "dragontail", "hypnosis", "protect", "hiddenpowergrass"], eventPokemon: [ - {"generation": 3, "level": 35, "moves":["waterpulse", "twister", "recover", "raindance"]}, - {"generation": 4, "level": 50, "gender": "F", "nature": "Bold", "moves":["recover", "raindance", "icebeam", "hydropump"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "shiny": true, "gender": "M", "nature": "Timid", "moves":["raindance", "recover", "hydropump", "icywind"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves":["recover", "hydropump", "icebeam", "mirrorcoat"], "pokeball": "cherishball"}, - {"generation": 5, "level": 58, "gender": "M", "nature": "Lax", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves":["recover", "surf", "icebeam", "toxic"], "pokeball": "cherishball"}, + {"generation": 3, "level": 35, "moves": ["waterpulse", "twister", "recover", "raindance"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "F", "nature": "Bold", "moves": ["recover", "raindance", "icebeam", "hydropump"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "shiny": true, "gender": "M", "nature": "Timid", "moves": ["raindance", "recover", "hydropump", "icywind"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves": ["recover", "hydropump", "icebeam", "mirrorcoat"], "pokeball": "cherishball"}, + {"generation": 5, "level": 58, "gender": "M", "nature": "Lax", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves": ["recover", "surf", "icebeam", "toxic"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "DOU", }, castform: { - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, castformsunny: { randomBattleMoves: ["sunnyday", "weatherball", "solarbeam", "icebeam"], + requiredAbility: 'Forecast', battleOnly: true, }, castformrainy: { randomBattleMoves: ["raindance", "weatherball", "thunder", "hurricane"], + requiredAbility: 'Forecast', battleOnly: true, }, castformsnowy: { + requiredAbility: 'Forecast', battleOnly: true, }, kecleon: { randomBattleMoves: ["fakeout", "knockoff", "drainpunch", "suckerpunch", "shadowsneak", "stealthrock", "recover"], randomDoubleBattleMoves: ["knockoff", "fakeout", "trickroom", "recover", "drainpunch", "suckerpunch", "shadowsneak", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, shuppet: { randomBattleMoves: ["trickroom", "destinybond", "taunt", "shadowsneak", "suckerpunch", "willowisp"], eventPokemon: [ - {"generation": 3, "level": 45, "abilities":["insomnia"], "moves":["spite", "willowisp", "feintattack", "shadowball"]}, + {"generation": 3, "level": 45, "abilities": ["insomnia"], "moves": ["spite", "willowisp", "feintattack", "shadowball"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -3218,41 +4306,52 @@ exports.BattleFormatsData = { randomBattleMoves: ["destinybond", "taunt", "shadowclaw", "suckerpunch", "willowisp", "shadowsneak", "knockoff"], randomDoubleBattleMoves: ["shadowclaw", "suckerpunch", "willowisp", "shadowsneak", "knockoff", "protect"], eventPokemon: [ - {"generation": 3, "level": 37, "abilities":["insomnia"], "moves":["helpinghand", "feintattack", "shadowball", "curse"]}, - {"generation": 5, "level": 37, "gender": "F", "isHidden": true, "moves":["feintattack", "hex", "shadowball", "cottonguard"]}, + {"generation": 3, "level": 37, "abilities": ["insomnia"], "moves": ["helpinghand", "feintattack", "shadowball", "curse"]}, + {"generation": 5, "level": 37, "gender": "F", "isHidden": true, "moves": ["feintattack", "hex", "shadowball", "cottonguard"]}, ], - tier: "PU", + encounters: [ + {"generation": 5, "level": 32, "isHidden": false}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, banettemega: { randomBattleMoves: ["destinybond", "taunt", "shadowclaw", "suckerpunch", "willowisp", "knockoff"], randomDoubleBattleMoves: ["destinybond", "taunt", "shadowclaw", "suckerpunch", "willowisp", "knockoff", "protect"], requiredItem: "Banettite", - tier: "UU", + tier: "RU", + doublesTier: "(DUU)", }, duskull: { randomBattleMoves: ["willowisp", "shadowsneak", "painsplit", "substitute", "nightshade", "destinybond", "trickroom"], eventPokemon: [ - {"generation": 3, "level": 45, "moves":["pursuit", "curse", "willowisp", "meanlook"]}, - {"generation": 3, "level": 19, "moves":["helpinghand", "shadowball", "astonish", "confuseray"]}, + {"generation": 3, "level": 45, "moves": ["pursuit", "curse", "willowisp", "meanlook"], "pokeball": "pokeball"}, + {"generation": 3, "level": 19, "moves": ["helpinghand", "shadowball", "astonish", "confuseray"]}, ], tier: "LC", }, dusclops: { randomBattleMoves: ["willowisp", "shadowsneak", "icebeam", "painsplit", "substitute", "seismictoss", "toxic", "trickroom"], + encounters: [ + {"generation": 4, "level": 16}, + {"generation": 6, "level": 30}, + ], tier: "NFE", }, dusknoir: { randomBattleMoves: ["willowisp", "shadowsneak", "icepunch", "painsplit", "substitute", "earthquake", "focuspunch"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "icepunch", "painsplit", "protect", "earthquake", "helpinghand", "trickroom"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, tropius: { randomBattleMoves: ["leechseed", "substitute", "airslash", "gigadrain", "toxic", "protect"], randomDoubleBattleMoves: ["leechseed", "protect", "airslash", "gigadrain", "earthquake", "hiddenpowerfire", "tailwind", "sunnyday", "roost"], eventPokemon: [ - {"generation": 4, "level": 53, "gender": "F", "nature": "Jolly", "abilities":["chlorophyll"], "moves":["airslash", "synthesis", "sunnyday", "solarbeam"], "pokeball": "cherishball"}, + {"generation": 4, "level": 53, "gender": "F", "nature": "Jolly", "abilities": ["chlorophyll"], "moves": ["airslash", "synthesis", "sunnyday", "solarbeam"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, chingling: { randomBattleMoves: ["hypnosis", "reflect", "lightscreen", "toxic", "recover", "psychic", "signalbeam", "healbell"], @@ -3262,135 +4361,161 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "yawn", "recover", "calmmind", "shadowball", "healingwish", "healbell", "taunt"], randomDoubleBattleMoves: ["protect", "psychic", "thunderwave", "recover", "shadowball", "dazzlinggleam", "trickroom", "helpinghand", "taunt"], eventPokemon: [ - {"generation": 3, "level": 10, "gender": "M", "moves":["wrap", "growl", "astonish"]}, + {"generation": 3, "level": 10, "gender": "M", "moves": ["wrap", "growl", "astonish"], "pokeball": "pokeball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, absol: { randomBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "superpower", "pursuit", "playrough"], randomDoubleBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "fireblast", "superpower", "protect", "playrough"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "abilities":["pressure"], "moves":["scratch", "leer", "wish"]}, - {"generation": 3, "level": 5, "shiny": 1, "abilities":["pressure"], "moves":["scratch", "leer", "spite"]}, - {"generation": 3, "level": 35, "abilities":["pressure"], "moves":["razorwind", "bite", "swordsdance", "spite"]}, - {"generation": 3, "level": 70, "abilities":["pressure"], "moves":["doubleteam", "slash", "futuresight", "perishsong"]}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["pressure"], "moves": ["scratch", "leer", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "abilities": ["pressure"], "moves": ["scratch", "leer", "spite"], "pokeball": "pokeball"}, + {"generation": 3, "level": 35, "abilities": ["pressure"], "moves": ["razorwind", "bite", "swordsdance", "spite"], "pokeball": "pokeball"}, + {"generation": 3, "level": 70, "abilities": ["pressure"], "moves": ["doubleteam", "slash", "futuresight", "perishsong"], "pokeball": "pokeball"}, ], tier: "PU", + doublesTier: "(DUU)", }, absolmega: { randomBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "fireblast", "superpower", "pursuit", "playrough", "icebeam"], randomDoubleBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "fireblast", "superpower", "protect", "playrough"], requiredItem: "Absolite", - tier: "UU", + tier: "RUBL", + doublesTier: "(DUU)", }, snorunt: { randomBattleMoves: ["spikes", "icebeam", "iceshard", "shadowball", "toxic"], eventPokemon: [ - {"generation": 3, "level": 20, "abilities":["innerfocus"], "moves":["sing", "waterpulse", "bite", "icywind"]}, + {"generation": 3, "level": 20, "abilities": ["innerfocus"], "moves": ["sing", "waterpulse", "bite", "icywind"]}, ], tier: "LC", }, glalie: { randomBattleMoves: ["spikes", "icebeam", "iceshard", "taunt", "earthquake", "explosion", "superfang"], randomDoubleBattleMoves: ["icebeam", "iceshard", "taunt", "earthquake", "freezedry", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, glaliemega: { randomBattleMoves: ["freezedry", "iceshard", "earthquake", "explosion", "return", "spikes"], randomDoubleBattleMoves: ["crunch", "iceshard", "freezedry", "earthquake", "explosion", "protect", "return"], requiredItem: "Glalitite", - tier: "RU", + tier: "NU", + doublesTier: "(DUU)", }, froslass: { randomBattleMoves: ["icebeam", "spikes", "destinybond", "shadowball", "taunt", "thunderwave"], randomDoubleBattleMoves: ["icebeam", "protect", "destinybond", "shadowball", "taunt", "thunderwave"], - tier: "RU", + tier: "PU", + doublesTier: "(DUU)", }, spheal: { randomBattleMoves: ["substitute", "protect", "toxic", "surf", "icebeam", "yawn", "superfang"], eventPokemon: [ - {"generation": 3, "level": 17, "abilities":["thickfat"], "moves":["charm", "aurorabeam", "watergun", "mudslap"]}, + {"generation": 3, "level": 17, "abilities": ["thickfat"], "moves": ["charm", "aurorabeam", "watergun", "mudslap"]}, ], tier: "LC", }, sealeo: { randomBattleMoves: ["substitute", "protect", "toxic", "surf", "icebeam", "yawn", "superfang"], + encounters: [ + {"generation": 4, "level": 25, "isHidden": false}, + {"generation": 6, "level": 28, "maxEggMoves": 1}, + ], tier: "NFE", }, walrein: { randomBattleMoves: ["superfang", "protect", "toxic", "surf", "icebeam", "roar"], randomDoubleBattleMoves: ["protect", "icywind", "surf", "icebeam", "superfang", "roar"], eventPokemon: [ - {"generation": 5, "level": 50, "isHidden": false, "abilities":["thickfat"], "moves":["icebeam", "brine", "hail", "sheercold"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "isHidden": false, "abilities": ["thickfat"], "moves": ["icebeam", "brine", "hail", "sheercold"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 5, "level": 30, "isHidden": false}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, clamperl: { randomBattleMoves: ["shellsmash", "icebeam", "surf", "hiddenpowergrass", "hiddenpowerelectric", "substitute"], tier: "LC", }, huntail: { - randomBattleMoves: ["shellsmash", "waterfall", "icebeam", "batonpass", "suckerpunch"], + randomBattleMoves: ["shellsmash", "waterfall", "icebeam", "substitute", "suckerpunch"], randomDoubleBattleMoves: ["shellsmash", "waterfall", "icefang", "batonpass", "suckerpunch", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, gorebyss: { - randomBattleMoves: ["shellsmash", "batonpass", "hydropump", "icebeam", "hiddenpowergrass", "substitute"], + randomBattleMoves: ["shellsmash", "hydropump", "icebeam", "hiddenpowergrass", "substitute"], randomDoubleBattleMoves: ["shellsmash", "batonpass", "surf", "icebeam", "hiddenpowergrass", "substitute", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, relicanth: { randomBattleMoves: ["headsmash", "waterfall", "earthquake", "doubleedge", "stealthrock", "toxic"], randomDoubleBattleMoves: ["headsmash", "waterfall", "earthquake", "doubleedge", "rockslide", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, luvdisc: { randomBattleMoves: ["icebeam", "toxic", "sweetkiss", "protect", "scald"], randomDoubleBattleMoves: ["icebeam", "toxic", "sweetkiss", "protect", "scald", "icywind", "healpulse"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, bagon: { randomBattleMoves: ["outrage", "dragondance", "firefang", "rockslide", "dragonclaw"], eventPokemon: [ - {"generation": 3, "level": 5, "shiny": 1, "moves":["rage", "bite", "wish"]}, - {"generation": 3, "level": 5, "shiny": 1, "moves":["rage", "bite", "irondefense"]}, - {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves":["rage"]}, - {"generation": 6, "level": 1, "isHidden": false, "moves":["rage", "thrash"]}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["rage", "bite", "wish"], "pokeball": "pokeball"}, + {"generation": 3, "level": 5, "shiny": 1, "moves": ["rage", "bite", "irondefense"], "pokeball": "pokeball"}, + {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves": ["rage"], "pokeball": "pokeball"}, + {"generation": 6, "level": 1, "isHidden": false, "moves": ["rage", "thrash"], "pokeball": "pokeball"}, ], tier: "LC", }, shelgon: { randomBattleMoves: ["outrage", "brickbreak", "dragonclaw", "dragondance", "crunch", "zenheadbutt"], + encounters: [ + {"generation": 7, "level": 15}, + ], tier: "NFE", }, salamence: { randomBattleMoves: ["outrage", "fireblast", "earthquake", "dracometeor", "dragondance", "dragonclaw", "fly"], randomDoubleBattleMoves: ["protect", "fireblast", "earthquake", "dracometeor", "tailwind", "dragondance", "dragonclaw", "hydropump", "rockslide"], eventPokemon: [ - {"generation": 3, "level": 50, "moves":["protect", "dragonbreath", "scaryface", "fly"]}, - {"generation": 3, "level": 50, "moves":["refresh", "dragonclaw", "dragondance", "aerialace"]}, - {"generation": 4, "level": 50, "gender": "M", "nature": "Naughty", "moves":["hydropump", "stoneedge", "fireblast", "dragonclaw"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves":["dragondance", "dragonclaw", "outrage", "aerialace"], "pokeball": "cherishball"}, + {"generation": 3, "level": 50, "moves": ["protect", "dragonbreath", "scaryface", "fly"], "pokeball": "pokeball"}, + {"generation": 3, "level": 50, "moves": ["refresh", "dragonclaw", "dragondance", "aerialace"]}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Naughty", "moves": ["hydropump", "stoneedge", "fireblast", "dragonclaw"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves": ["dragondance", "dragonclaw", "outrage", "aerialace"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 7, "level": 9}, ], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, salamencemega: { randomBattleMoves: ["doubleedge", "return", "fireblast", "earthquake", "dracometeor", "roost", "dragondance"], randomDoubleBattleMoves: ["doubleedge", "return", "fireblast", "earthquake", "dracometeor", "protect", "dragondance", "dragonclaw"], requiredItem: "Salamencite", tier: "Uber", + doublesTier: "DOU", }, beldum: { randomBattleMoves: ["ironhead", "zenheadbutt", "headbutt", "irondefense"], eventPokemon: [ - {"generation": 6, "level": 5, "shiny": true, "isHidden": false, "moves":["holdback", "ironhead", "zenheadbutt", "irondefense"], "pokeball": "cherishball"}, + {"generation": 6, "level": 5, "shiny": true, "isHidden": false, "moves": ["holdback", "ironhead", "zenheadbutt", "irondefense"], "pokeball": "cherishball"}, ], tier: "LC", }, metang: { randomBattleMoves: ["stealthrock", "meteormash", "toxic", "earthquake", "bulletpunch", "zenheadbutt"], eventPokemon: [ - {"generation": 3, "level": 30, "moves":["takedown", "confusion", "metalclaw", "refresh"]}, + {"generation": 3, "level": 30, "moves": ["takedown", "confusion", "metalclaw", "refresh"], "pokeball": "pokeball"}, ], tier: "NFE", }, @@ -3398,121 +4523,145 @@ exports.BattleFormatsData = { randomBattleMoves: ["meteormash", "earthquake", "agility", "stealthrock", "zenheadbutt", "bulletpunch", "thunderpunch", "explosion", "icepunch"], randomDoubleBattleMoves: ["meteormash", "earthquake", "protect", "zenheadbutt", "bulletpunch", "thunderpunch", "explosion", "icepunch", "hammerarm"], eventPokemon: [ - {"generation": 4, "level": 62, "nature": "Brave", "moves":["bulletpunch", "meteormash", "hammerarm", "zenheadbutt"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves":["meteormash", "earthquake", "bulletpunch", "hammerarm"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "isHidden": false, "moves":["bulletpunch", "zenheadbutt", "hammerarm", "icepunch"], "pokeball": "cherishball"}, - {"generation": 5, "level": 45, "isHidden": false, "moves":["earthquake", "zenheadbutt", "protect", "meteormash"]}, - {"generation": 5, "level": 45, "isHidden": true, "moves":["irondefense", "agility", "hammerarm", "doubleedge"]}, - {"generation": 5, "level": 45, "isHidden": true, "moves":["psychic", "meteormash", "hammerarm", "doubleedge"]}, - {"generation": 5, "level": 58, "nature": "Serious", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves":["earthquake", "hyperbeam", "psychic", "meteormash"], "pokeball": "cherishball"}, + {"generation": 4, "level": 62, "nature": "Brave", "moves": ["bulletpunch", "meteormash", "hammerarm", "zenheadbutt"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "shiny": 1, "isHidden": false, "moves": ["meteormash", "earthquake", "bulletpunch", "hammerarm"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "isHidden": false, "moves": ["bulletpunch", "zenheadbutt", "hammerarm", "icepunch"], "pokeball": "cherishball"}, + {"generation": 5, "level": 45, "shiny": true, "isHidden": false, "moves": ["meteormash", "zenheadbutt", "earthquake", "protect"], "pokeball": "pokeball"}, + {"generation": 5, "level": 45, "isHidden": true, "moves": ["irondefense", "agility", "hammerarm", "doubleedge"]}, + {"generation": 5, "level": 45, "isHidden": true, "moves": ["psychic", "meteormash", "hammerarm", "doubleedge"]}, + {"generation": 5, "level": 58, "nature": "Serious", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves": ["earthquake", "hyperbeam", "psychic", "meteormash"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "nature": "Jolly", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 31, "spd": 31, "spe": 31}, "isHidden": false, "moves": ["ironhead", "icepunch", "bulletpunch", "stompingtantrum"], "pokeball": "cherishball"}, ], - tier: "UU", + tier: "RU", + doublesTier: "DUU", }, metagrossmega: { randomBattleMoves: ["meteormash", "earthquake", "agility", "zenheadbutt", "hammerarm", "icepunch"], randomDoubleBattleMoves: ["meteormash", "earthquake", "protect", "zenheadbutt", "thunderpunch", "icepunch"], requiredItem: "Metagrossite", tier: "Uber", + doublesTier: "DOU", }, regirock: { randomBattleMoves: ["stealthrock", "thunderwave", "stoneedge", "drainpunch", "curse", "rest", "rockslide", "toxic"], randomDoubleBattleMoves: ["stealthrock", "thunderwave", "stoneedge", "drainpunch", "curse", "rockslide", "protect"], eventPokemon: [ - {"generation": 3, "level": 40, "shiny": 1, "moves":["rockthrow", "curse", "superpower", "ancientpower"]}, - {"generation": 3, "level": 40, "moves":["curse", "superpower", "ancientpower", "hyperbeam"]}, - {"generation": 4, "level": 30, "shiny": 1, "moves":["stomp", "rockthrow", "curse", "superpower"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["irondefense", "chargebeam", "lockon", "zapcannon"]}, - {"generation": 6, "level": 40, "shiny": 1, "isHidden": false, "moves":["bulldoze", "curse", "ancientpower", "irondefense"]}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["explosion", "icepunch", "stoneedge", "hammerarm"]}, + {"generation": 3, "level": 40, "shiny": 1, "moves": ["rockthrow", "curse", "superpower", "ancientpower"]}, + {"generation": 3, "level": 40, "moves": ["curse", "superpower", "ancientpower", "hyperbeam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 30, "shiny": 1, "moves": ["stomp", "rockthrow", "curse", "superpower"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["irondefense", "chargebeam", "lockon", "zapcannon"]}, + {"generation": 6, "level": 40, "shiny": 1, "isHidden": false, "moves": ["bulldoze", "curse", "ancientpower", "irondefense"]}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["explosion", "icepunch", "stoneedge", "hammerarm"], "pokeball": "pokeball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["stoneedge", "hammerarm", "lockon", "zapcannon"]}, ], eventOnly: true, tier: "PU", + doublesTier: "(DUU)", }, regice: { randomBattleMoves: ["thunderwave", "icebeam", "thunderbolt", "rest", "sleeptalk", "focusblast", "rockpolish"], randomDoubleBattleMoves: ["thunderwave", "icebeam", "thunderbolt", "icywind", "protect", "focusblast", "rockpolish"], eventPokemon: [ - {"generation": 3, "level": 40, "shiny": 1, "moves":["icywind", "curse", "superpower", "ancientpower"]}, - {"generation": 3, "level": 40, "moves":["curse", "superpower", "ancientpower", "hyperbeam"]}, - {"generation": 4, "level": 30, "shiny": 1, "moves":["stomp", "icywind", "curse", "superpower"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["amnesia", "chargebeam", "lockon", "zapcannon"]}, - {"generation": 6, "level": 40, "shiny": 1, "isHidden": false, "moves":["bulldoze", "curse", "ancientpower", "amnesia"]}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["thunderbolt", "amnesia", "icebeam", "hail"]}, + {"generation": 3, "level": 40, "shiny": 1, "moves": ["icywind", "curse", "superpower", "ancientpower"]}, + {"generation": 3, "level": 40, "moves": ["curse", "superpower", "ancientpower", "hyperbeam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 30, "shiny": 1, "moves": ["stomp", "icywind", "curse", "superpower"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["amnesia", "chargebeam", "lockon", "zapcannon"]}, + {"generation": 6, "level": 40, "shiny": 1, "isHidden": false, "moves": ["bulldoze", "curse", "ancientpower", "amnesia"]}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["thunderbolt", "amnesia", "icebeam", "hail"], "pokeball": "pokeball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["icebeam", "hammerarm", "lockon", "zapcannon"]}, ], eventOnly: true, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, registeel: { randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "protect", "seismictoss", "curse", "ironhead", "rest", "sleeptalk"], randomDoubleBattleMoves: ["stealthrock", "ironhead", "curse", "rest", "thunderwave", "protect", "seismictoss"], eventPokemon: [ - {"generation": 3, "level": 40, "shiny": 1, "moves":["metalclaw", "curse", "superpower", "ancientpower"]}, - {"generation": 3, "level": 40, "moves":["curse", "superpower", "ancientpower", "hyperbeam"]}, - {"generation": 4, "level": 30, "shiny": 1, "moves":["stomp", "metalclaw", "curse", "superpower"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["amnesia", "chargebeam", "lockon", "zapcannon"]}, - {"generation": 6, "level": 40, "shiny": 1, "isHidden": false, "moves":["curse", "ancientpower", "irondefense", "amnesia"]}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["ironhead", "rockslide", "gravity", "irondefense"]}, + {"generation": 3, "level": 40, "shiny": 1, "moves": ["metalclaw", "curse", "superpower", "ancientpower"]}, + {"generation": 3, "level": 40, "moves": ["curse", "superpower", "ancientpower", "hyperbeam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 30, "shiny": 1, "moves": ["stomp", "metalclaw", "curse", "superpower"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["amnesia", "chargebeam", "lockon", "zapcannon"]}, + {"generation": 6, "level": 40, "shiny": 1, "isHidden": false, "moves": ["curse", "ancientpower", "irondefense", "amnesia"]}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["ironhead", "rockslide", "gravity", "irondefense"], "pokeball": "pokeball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["flashcannon", "hammerarm", "lockon", "zapcannon"]}, ], eventOnly: true, tier: "RU", + doublesTier: "(DUU)", }, latias: { randomBattleMoves: ["dracometeor", "psyshock", "hiddenpowerfire", "roost", "thunderbolt", "healingwish", "defog"], randomDoubleBattleMoves: ["dragonpulse", "psychic", "tailwind", "helpinghand", "healpulse", "lightscreen", "reflect", "protect"], eventPokemon: [ - {"generation": 3, "level": 40, "shiny": 1, "moves":["watersport", "refresh", "mistball", "psychic"]}, - {"generation": 3, "level": 50, "shiny": 1, "moves":["mistball", "psychic", "recover", "charm"]}, - {"generation": 3, "level": 70, "moves":["mistball", "psychic", "recover", "charm"]}, - {"generation": 4, "level": 35, "shiny": 1, "moves":["dragonbreath", "watersport", "refresh", "mistball"]}, - {"generation": 4, "level": 40, "shiny": 1, "moves":["watersport", "refresh", "mistball", "zenheadbutt"]}, - {"generation": 5, "level": 68, "shiny": 1, "moves":["psychoshift", "charm", "psychic", "healpulse"]}, - {"generation": 6, "level": 30, "shiny": 1, "moves":["healpulse", "dragonbreath", "mistball", "psychoshift"]}, + {"generation": 3, "level": 40, "shiny": 1, "moves": ["watersport", "refresh", "mistball", "psychic"]}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["mistball", "psychic", "recover", "charm"]}, + {"generation": 3, "level": 70, "moves": ["mistball", "psychic", "recover", "charm"], "pokeball": "pokeball"}, + {"generation": 4, "level": 35, "shiny": 1, "moves": ["dragonbreath", "watersport", "refresh", "mistball"]}, + {"generation": 4, "level": 40, "shiny": 1, "moves": ["watersport", "refresh", "mistball", "zenheadbutt"]}, + {"generation": 5, "level": 68, "shiny": 1, "moves": ["psychoshift", "charm", "psychic", "healpulse"]}, + {"generation": 6, "level": 30, "shiny": 1, "moves": ["healpulse", "dragonbreath", "mistball", "psychoshift"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["mistball", "dragonpulse", "psychoshift", "wish"]}, + {"generation": 7, "level": 60, "moves": ["mistball", "dragonpulse", "psychoshift", "wish"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["mistball", "psychic", "dracometeor", "tailwind"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "UU", + doublesTier: "(DUU)", }, latiasmega: { randomBattleMoves: ["calmmind", "dragonpulse", "surf", "dracometeor", "roost", "hiddenpowerfire", "substitute", "psyshock"], randomDoubleBattleMoves: ["dragonpulse", "psychic", "tailwind", "helpinghand", "healpulse", "lightscreen", "reflect", "protect"], requiredItem: "Latiasite", - tier: "OU", + tier: "UUBL", + doublesTier: "(DUU)", }, latios: { randomBattleMoves: ["dracometeor", "hiddenpowerfire", "surf", "thunderbolt", "psyshock", "roost", "trick", "defog"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "surf", "thunderbolt", "psyshock", "substitute", "trick", "tailwind", "protect", "hiddenpowerfire"], eventPokemon: [ - {"generation": 3, "level": 40, "shiny": 1, "moves":["protect", "refresh", "lusterpurge", "psychic"]}, - {"generation": 3, "level": 50, "shiny": 1, "moves":["lusterpurge", "psychic", "recover", "dragondance"]}, - {"generation": 3, "level": 70, "moves":["lusterpurge", "psychic", "recover", "dragondance"]}, - {"generation": 4, "level": 35, "shiny": 1, "moves":["dragonbreath", "protect", "refresh", "lusterpurge"]}, - {"generation": 4, "level": 40, "shiny": 1, "moves":["protect", "refresh", "lusterpurge", "zenheadbutt"]}, - {"generation": 5, "level": 68, "shiny": 1, "moves":["psychoshift", "dragondance", "psychic", "healpulse"]}, - {"generation": 6, "level": 30, "shiny": 1, "moves":["healpulse", "dragonbreath", "lusterpurge", "psychoshift"]}, - {"generation": 6, "level": 50, "nature": "Modest", "moves":["dragonpulse", "lusterpurge", "psychic", "healpulse"], "pokeball": "cherishball"}, + {"generation": 3, "level": 40, "shiny": 1, "moves": ["protect", "refresh", "lusterpurge", "psychic"]}, + {"generation": 3, "level": 50, "shiny": 1, "moves": ["lusterpurge", "psychic", "recover", "dragondance"]}, + {"generation": 3, "level": 70, "moves": ["lusterpurge", "psychic", "recover", "dragondance"], "pokeball": "pokeball"}, + {"generation": 4, "level": 35, "shiny": 1, "moves": ["dragonbreath", "protect", "refresh", "lusterpurge"]}, + {"generation": 4, "level": 40, "shiny": 1, "moves": ["protect", "refresh", "lusterpurge", "zenheadbutt"]}, + {"generation": 5, "level": 68, "shiny": 1, "moves": ["psychoshift", "dragondance", "psychic", "healpulse"]}, + {"generation": 6, "level": 30, "shiny": 1, "moves": ["healpulse", "dragonbreath", "lusterpurge", "psychoshift"]}, + {"generation": 6, "level": 50, "nature": "Modest", "moves": ["dragonpulse", "lusterpurge", "psychic", "healpulse"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["lusterpurge", "dragonpulse", "psychoshift", "dragonbreath"]}, + {"generation": 7, "level": 60, "moves": ["lusterpurge", "dragonpulse", "psychoshift", "dragonbreath"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["lusterpurge", "psychic", "dracometeor", "tailwind"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "OU", + tier: "UUBL", + doublesTier: "(DUU)", }, latiosmega: { - randomBattleMoves: ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "memento", "defog"], + randomBattleMoves: ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "defog"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "surf", "thunderbolt", "psyshock", "substitute", "tailwind", "protect", "hiddenpowerfire"], requiredItem: "Latiosite", - tier: "OU", + tier: "UUBL", + doublesTier: "(DUU)", }, kyogre: { randomBattleMoves: ["waterspout", "originpulse", "scald", "thunder", "icebeam"], randomDoubleBattleMoves: ["waterspout", "muddywater", "originpulse", "thunder", "icebeam", "calmmind", "rest", "sleeptalk", "protect"], eventPokemon: [ - {"generation": 3, "level": 45, "shiny": 1, "moves":["bodyslam", "calmmind", "icebeam", "hydropump"]}, - {"generation": 3, "level": 70, "shiny": 1, "moves":["hydropump", "rest", "sheercold", "doubleedge"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["aquaring", "icebeam", "ancientpower", "waterspout"]}, - {"generation": 5, "level": 80, "shiny": 1, "moves":["icebeam", "ancientpower", "waterspout", "thunder"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "moves":["waterspout", "thunder", "icebeam", "sheercold"], "pokeball": "cherishball"}, - {"generation": 6, "level": 45, "moves":["bodyslam", "aquaring", "icebeam", "originpulse"]}, - {"generation": 6, "level": 100, "nature": "Timid", "moves":["waterspout", "thunder", "sheercold", "icebeam"], "pokeball": "cherishball"}, + {"generation": 3, "level": 45, "shiny": 1, "moves": ["bodyslam", "calmmind", "icebeam", "hydropump"]}, + {"generation": 3, "level": 70, "shiny": 1, "moves": ["hydropump", "rest", "sheercold", "doubleedge"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["aquaring", "icebeam", "ancientpower", "waterspout"]}, + {"generation": 5, "level": 80, "shiny": 1, "moves": ["icebeam", "ancientpower", "waterspout", "thunder"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "moves": ["waterspout", "thunder", "icebeam", "sheercold"], "pokeball": "cherishball"}, + {"generation": 6, "level": 45, "moves": ["bodyslam", "aquaring", "icebeam", "originpulse"]}, + {"generation": 6, "level": 100, "nature": "Timid", "moves": ["waterspout", "thunder", "sheercold", "icebeam"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["icebeam", "originpulse", "calmmind", "muddywater"]}, + {"generation": 7, "level": 60, "shiny": true, "moves": ["icebeam", "originpulse", "calmmind", "muddywater"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "moves": ["icebeam", "originpulse", "calmmind", "muddywater"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["originpulse", "icebeam", "waterspout", "calmmind"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, kyogreprimal: { randomBattleMoves: ["calmmind", "waterspout", "originpulse", "scald", "thunder", "icebeam", "rest", "sleeptalk"], @@ -3520,22 +4669,27 @@ exports.BattleFormatsData = { requiredItem: "Blue Orb", }, groudon: { - randomBattleMoves: ["precipiceblades", "earthquake", "stealthrock", "lavaplume", "stoneedge", "dragontail", "roar", "toxic", "swordsdance", "rockpolish", "firepunch"], + randomBattleMoves: ["earthquake", "stealthrock", "lavaplume", "stoneedge", "roar", "toxic", "thunderwave", "dragonclaw", "firepunch"], randomDoubleBattleMoves: ["precipiceblades", "rockslide", "protect", "stoneedge", "swordsdance", "rockpolish", "dragonclaw", "firepunch"], eventPokemon: [ - {"generation": 3, "level": 45, "shiny": 1, "moves":["slash", "bulkup", "earthquake", "fireblast"]}, - {"generation": 3, "level": 70, "shiny": 1, "moves":["fireblast", "rest", "fissure", "solarbeam"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["rest", "earthquake", "ancientpower", "eruption"]}, - {"generation": 5, "level": 80, "shiny": 1, "moves":["earthquake", "ancientpower", "eruption", "solarbeam"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "moves":["eruption", "hammerarm", "earthpower", "solarbeam"], "pokeball": "cherishball"}, - {"generation": 6, "level": 45, "moves":["lavaplume", "rest", "earthquake", "precipiceblades"]}, - {"generation": 6, "level": 100, "nature": "Adamant", "moves":["firepunch", "solarbeam", "hammerarm", "rockslide"], "pokeball": "cherishball"}, + {"generation": 3, "level": 45, "shiny": 1, "moves": ["slash", "bulkup", "earthquake", "fireblast"]}, + {"generation": 3, "level": 70, "shiny": 1, "moves": ["fireblast", "rest", "fissure", "solarbeam"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["rest", "earthquake", "ancientpower", "eruption"]}, + {"generation": 5, "level": 80, "shiny": 1, "moves": ["earthquake", "ancientpower", "eruption", "solarbeam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "moves": ["eruption", "hammerarm", "earthpower", "solarbeam"], "pokeball": "cherishball"}, + {"generation": 6, "level": 45, "moves": ["lavaplume", "rest", "earthquake", "precipiceblades"]}, + {"generation": 6, "level": 100, "nature": "Adamant", "moves": ["firepunch", "solarbeam", "hammerarm", "rockslide"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["earthquake", "precipiceblades", "bulkup", "solarbeam"]}, + {"generation": 7, "level": 60, "shiny": true, "moves": ["earthquake", "precipiceblades", "bulkup", "solarbeam"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "moves": ["earthquake", "precipiceblades", "bulkup", "solarbeam"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["precipiceblades", "earthpower", "firepunch", "swordsdance"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, groudonprimal: { - randomBattleMoves: ["stealthrock", "precipiceblades", "earthquake", "lavaplume", "stoneedge", "overheat", "rockpolish", "thunderwave"], + randomBattleMoves: ["stealthrock", "precipiceblades", "lavaplume", "stoneedge", "dragontail", "rockpolish", "swordsdance", "firepunch"], randomDoubleBattleMoves: ["precipiceblades", "lavaplume", "rockslide", "stoneedge", "swordsdance", "overheat", "rockpolish", "firepunch", "protect"], requiredItem: "Red Orb", }, @@ -3543,97 +4697,105 @@ exports.BattleFormatsData = { randomBattleMoves: ["outrage", "vcreate", "extremespeed", "dragondance", "earthquake", "dracometeor", "dragonclaw"], randomDoubleBattleMoves: ["tailwind", "vcreate", "extremespeed", "dragondance", "earthquake", "dracometeor", "dragonclaw", "protect"], eventPokemon: [ - {"generation": 3, "level": 70, "shiny": 1, "moves":["fly", "rest", "extremespeed", "outrage"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["rest", "airslash", "ancientpower", "outrage"]}, - {"generation": 5, "level": 70, "shiny": true, "moves":["dragonpulse", "ancientpower", "outrage", "dragondance"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "moves":["extremespeed", "hyperbeam", "dragonpulse", "vcreate"], "pokeball": "cherishball"}, - {"generation": 6, "level": 70, "moves":["extremespeed", "dragonpulse", "dragondance", "dragonascent"]}, - {"generation": 6, "level": 70, "shiny": true, "moves":["dragonpulse", "thunder", "twister", "extremespeed"], "pokeball": "cherishball"}, - {"generation": 6, "level": 70, "shiny": true, "moves":["dragonascent", "dragonclaw", "extremespeed", "dragondance"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "shiny": true, "moves":["dragonascent", "dracometeor", "fly", "celebrate"], "pokeball": "cherishball"}, + {"generation": 3, "level": 70, "shiny": 1, "moves": ["fly", "rest", "extremespeed", "outrage"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["rest", "airslash", "ancientpower", "outrage"]}, + {"generation": 5, "level": 70, "shiny": true, "moves": ["dragonpulse", "ancientpower", "outrage", "dragondance"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "moves": ["extremespeed", "hyperbeam", "dragonpulse", "vcreate"], "pokeball": "cherishball"}, + {"generation": 6, "level": 70, "moves": ["extremespeed", "dragonpulse", "dragondance", "dragonascent"]}, + {"generation": 6, "level": 70, "shiny": true, "moves": ["dragonpulse", "thunder", "twister", "extremespeed"], "pokeball": "cherishball"}, + {"generation": 6, "level": 70, "shiny": true, "moves": ["dragonascent", "dragonclaw", "extremespeed", "dragondance"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "shiny": true, "moves": ["dragonascent", "dracometeor", "fly", "celebrate"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["rest", "extremespeed", "dragonpulse", "dragondance"]}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, rayquazamega: { // randomBattleMoves: ["vcreate", "extremespeed", "swordsdance", "earthquake", "dragonascent", "dragonclaw", "dragondance"], randomDoubleBattleMoves: ["vcreate", "extremespeed", "swordsdance", "earthquake", "dragonascent", "dragonclaw", "dragondance", "protect"], requiredMove: "Dragon Ascent", tier: "AG", + doublesTier: "DUber", }, jirachi: { randomBattleMoves: ["ironhead", "uturn", "firepunch", "icepunch", "trick", "stealthrock", "bodyslam", "toxic", "wish", "substitute"], randomDoubleBattleMoves: ["bodyslam", "ironhead", "icywind", "thunderwave", "helpinghand", "trickroom", "uturn", "followme", "zenheadbutt", "protect"], eventPokemon: [ - {"generation": 3, "level": 5, "moves":["wish", "confusion", "rest"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"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"]}, - {"generation": 3, "level": 30, "moves":["helpinghand", "psychic", "refresh", "rest"]}, - {"generation": 4, "level": 5, "moves":["wish", "confusion", "rest"], "pokeball": "cherishball"}, - {"generation": 4, "level": 5, "moves":["wish", "confusion", "rest", "dracometeor"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "moves":["healingwish", "psychic", "swift", "meteormash"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "moves":["dracometeor", "meteormash", "wish", "followme"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "moves":["wish", "healingwish", "cosmicpower", "meteormash"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "moves":["wish", "healingwish", "swift", "return"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "shiny": true, "moves":["wish", "swift", "healingwish", "moonblast"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "shiny": true, "moves":["wish", "confusion", "helpinghand", "return"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["heartstamp", "playrough", "wish", "cosmicpower"], "pokeball": "cherishball"}, - {"generation": 6, "level": 25, "shiny": true, "moves":["wish", "confusion", "swift", "happyhour"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["wish", "confusion", "rest"], "pokeball": "cherishball"}, - {"generation": 7, "level": 15, "moves":["swift", "wish", "healingwish", "rest"], "pokeball": "cherishball"}, + {"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": 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"}, + {"generation": 5, "level": 50, "moves": ["healingwish", "psychic", "swift", "meteormash"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "moves": ["dracometeor", "meteormash", "wish", "followme"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "moves": ["wish", "healingwish", "cosmicpower", "meteormash"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "moves": ["wish", "healingwish", "swift", "return"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "shiny": true, "moves": ["wish", "swift", "healingwish", "moonblast"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "shiny": true, "moves": ["wish", "confusion", "helpinghand", "return"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["heartstamp", "playrough", "wish", "cosmicpower"], "pokeball": "cherishball"}, + {"generation": 6, "level": 25, "shiny": true, "moves": ["wish", "confusion", "swift", "happyhour"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["wish", "confusion", "rest"], "pokeball": "cherishball"}, + {"generation": 7, "level": 15, "moves": ["swift", "wish", "healingwish", "rest"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "OU", + doublesTier: "DUber", }, deoxys: { randomBattleMoves: ["psychoboost", "stealthrock", "spikes", "firepunch", "superpower", "extremespeed", "knockoff", "taunt"], randomDoubleBattleMoves: ["psychoboost", "superpower", "extremespeed", "icebeam", "thunderbolt", "firepunch", "protect", "knockoff", "psyshock"], eventPokemon: [ - {"generation": 3, "level": 30, "shiny": 1, "moves":["taunt", "pursuit", "psychic", "superpower"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["knockoff", "spikes", "psychic", "snatch"]}, - {"generation": 3, "level": 30, "shiny": 1, "moves":["knockoff", "pursuit", "psychic", "swift"]}, - {"generation": 3, "level": 70, "moves":["cosmicpower", "recover", "psychoboost", "hyperbeam"]}, - {"generation": 4, "level": 50, "moves":["psychoboost", "zapcannon", "irondefense", "extremespeed"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["psychoboost", "swift", "doubleteam", "extremespeed"]}, - {"generation": 4, "level": 50, "moves":["psychoboost", "detect", "counter", "mirrorcoat"]}, - {"generation": 4, "level": 50, "moves":["psychoboost", "meteormash", "superpower", "hyperbeam"]}, - {"generation": 4, "level": 50, "moves":["psychoboost", "leer", "wrap", "nightshade"]}, - {"generation": 5, "level": 100, "moves":["nastyplot", "darkpulse", "recover", "psychoboost"], "pokeball": "duskball"}, - {"generation": 6, "level": 80, "moves":["cosmicpower", "recover", "psychoboost", "hyperbeam"]}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["taunt", "pursuit", "psychic", "superpower"]}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["knockoff", "spikes", "psychic", "snatch"]}, + {"generation": 3, "level": 30, "shiny": 1, "moves": ["knockoff", "pursuit", "psychic", "swift"]}, + {"generation": 3, "level": 70, "moves": ["cosmicpower", "recover", "psychoboost", "hyperbeam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["psychoboost", "zapcannon", "irondefense", "extremespeed"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["psychoboost", "swift", "doubleteam", "extremespeed"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["psychoboost", "detect", "counter", "mirrorcoat"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["psychoboost", "meteormash", "superpower", "hyperbeam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["psychoboost", "leer", "wrap", "nightshade"], "pokeball": "pokeball"}, + {"generation": 5, "level": 100, "moves": ["nastyplot", "darkpulse", "recover", "psychoboost"], "pokeball": "duskball"}, + {"generation": 6, "level": 80, "moves": ["cosmicpower", "recover", "psychoboost", "hyperbeam"]}, ], eventOnly: true, tier: "Uber", + doublesTier: "(DUU)", }, deoxysattack: { randomBattleMoves: ["psychoboost", "superpower", "icebeam", "knockoff", "extremespeed", "firepunch", "stealthrock"], randomDoubleBattleMoves: ["psychoboost", "superpower", "extremespeed", "icebeam", "thunderbolt", "firepunch", "protect", "knockoff"], eventOnly: true, tier: "Uber", + doublesTier: "DOU", }, deoxysdefense: { randomBattleMoves: ["spikes", "stealthrock", "recover", "taunt", "toxic", "seismictoss", "knockoff"], randomDoubleBattleMoves: ["protect", "stealthrock", "recover", "taunt", "reflect", "seismictoss", "lightscreen", "trickroom", "psychic"], eventOnly: true, tier: "Uber", + doublesTier: "(DUU)", }, deoxysspeed: { randomBattleMoves: ["spikes", "stealthrock", "superpower", "psychoboost", "taunt", "magiccoat", "knockoff"], randomDoubleBattleMoves: ["superpower", "icebeam", "psychoboost", "taunt", "lightscreen", "reflect", "protect", "knockoff"], eventOnly: true, tier: "Uber", + doublesTier: "(DUU)", }, turtwig: { randomBattleMoves: ["reflect", "lightscreen", "stealthrock", "seedbomb", "substitute", "leechseed", "toxic"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tackle", "withdraw", "absorb"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["tackle", "withdraw", "absorb", "stockpile"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tackle", "withdraw", "absorb"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["tackle", "withdraw", "absorb", "stockpile"]}, ], tier: "LC", }, @@ -3645,17 +4807,18 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "woodhammer", "stoneedge", "synthesis", "rockpolish"], randomDoubleBattleMoves: ["protect", "earthquake", "woodhammer", "stoneedge", "rockslide", "wideguard", "rockpolish"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["woodhammer", "earthquake", "outrage", "stoneedge"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["woodhammer", "earthquake", "outrage", "stoneedge"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, chimchar: { randomBattleMoves: ["stealthrock", "overheat", "hiddenpowergrass", "fakeout", "uturn", "gunkshot"], eventPokemon: [ - {"generation": 4, "level": 40, "gender": "M", "nature": "Mild", "moves":["flamethrower", "thunderpunch", "grassknot", "helpinghand"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["scratch", "leer", "ember", "taunt"]}, - {"generation": 4, "level": 40, "gender": "M", "nature": "Hardy", "moves":["flamethrower", "thunderpunch", "grassknot", "helpinghand"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["leer", "ember", "taunt", "fakeout"]}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Mild", "moves": ["flamethrower", "thunderpunch", "grassknot", "helpinghand"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["scratch", "leer", "ember", "taunt"]}, + {"generation": 4, "level": 40, "gender": "M", "nature": "Hardy", "moves": ["flamethrower", "thunderpunch", "grassknot", "helpinghand"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["leer", "ember", "taunt", "fakeout"]}, ], tier: "LC", }, @@ -3667,20 +4830,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "uturn", "earthquake", "closecombat", "flareblitz", "stoneedge", "machpunch", "nastyplot", "fireblast", "vacuumwave", "grassknot", "hiddenpowerice"], randomDoubleBattleMoves: ["fakeout", "heatwave", "closecombat", "uturn", "grassknot", "stoneedge", "machpunch", "feint", "taunt", "flareblitz", "hiddenpowerice", "thunderpunch", "protect"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["fireblast", "closecombat", "uturn", "grassknot"], "pokeball": "cherishball"}, - {"generation": 6, "level": 88, "isHidden": true, "moves":["fireblast", "closecombat", "firepunch", "focuspunch"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["fireblast", "closecombat", "uturn", "grassknot"], "pokeball": "cherishball"}, + {"generation": 6, "level": 88, "isHidden": true, "moves": ["fireblast", "closecombat", "firepunch", "focuspunch"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "(DUU)", }, piplup: { randomBattleMoves: ["stealthrock", "hydropump", "scald", "icebeam", "hiddenpowerelectric", "hiddenpowerfire", "yawn", "defog"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["pound", "growl", "bubble"]}, - {"generation": 5, "level": 15, "shiny": 1, "isHidden": false, "moves":["hydropump", "featherdance", "watersport", "peck"], "pokeball": "cherishball"}, - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves":["sing", "round", "featherdance", "peck"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["pound", "growl", "bubble", "featherdance"]}, - {"generation": 6, "level": 7, "isHidden": false, "moves":["pound", "growl", "return"], "pokeball": "cherishball"}, - {"generation": 7, "level": 30, "gender": "M", "nature": "Hardy", "isHidden": false, "moves":["hydropump", "bubblebeam", "whirlpool", "drillpeck"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["pound", "growl", "bubble"]}, + {"generation": 5, "level": 15, "shiny": 1, "isHidden": false, "moves": ["hydropump", "featherdance", "watersport", "peck"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves": ["sing", "round", "featherdance", "peck"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["pound", "growl", "bubble", "featherdance"]}, + {"generation": 6, "level": 7, "isHidden": false, "moves": ["pound", "growl", "return"], "pokeball": "cherishball"}, + {"generation": 7, "level": 30, "gender": "M", "nature": "Hardy", "isHidden": false, "moves": ["hydropump", "bubblebeam", "whirlpool", "drillpeck"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -3689,40 +4853,49 @@ exports.BattleFormatsData = { tier: "NFE", }, empoleon: { - randomBattleMoves: ["hydropump", "flashcannon", "grassknot", "hiddenpowerfire", "icebeam", "scald", "toxic", "roar", "stealthrock"], + randomBattleMoves: ["hydropump", "flashcannon", "grassknot", "defog", "icebeam", "scald", "toxic", "roar", "stealthrock"], randomDoubleBattleMoves: ["icywind", "scald", "surf", "icebeam", "hiddenpowerelectric", "protect", "grassknot", "flashcannon"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["hydropump", "icebeam", "aquajet", "grassknot"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["hydropump", "icebeam", "aquajet", "grassknot"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "(DUU)", }, starly: { randomBattleMoves: ["bravebird", "return", "uturn", "pursuit"], eventPokemon: [ - {"generation": 4, "level": 1, "gender": "M", "nature": "Mild", "moves":["tackle", "growl"]}, + {"generation": 4, "level": 1, "gender": "M", "nature": "Mild", "moves": ["tackle", "growl"], "pokeball": "pokeball"}, ], tier: "LC", }, staravia: { randomBattleMoves: ["bravebird", "return", "uturn", "pursuit", "defog"], + encounters: [ + {"generation": 4, "level": 4}, + ], tier: "NFE", }, staraptor: { randomBattleMoves: ["bravebird", "closecombat", "uturn", "quickattack", "roost", "doubleedge"], randomDoubleBattleMoves: ["bravebird", "closecombat", "uturn", "quickattack", "doubleedge", "tailwind", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, bidoof: { randomBattleMoves: ["return", "aquatail", "curse", "quickattack", "stealthrock", "superfang"], eventPokemon: [ - {"generation": 4, "level": 1, "gender": "M", "nature": "Lonely", "abilities":["simple"], "moves":["tackle"]}, + {"generation": 4, "level": 1, "gender": "M", "nature": "Lonely", "abilities": ["simple"], "moves": ["tackle"], "pokeball": "pokeball"}, ], tier: "LC", }, bibarel: { - randomBattleMoves: ["return", "waterfall", "swordsdance", "quickattack", "aquajet"], - randomDoubleBattleMoves: ["return", "waterfall", "curse", "aquajet", "quickattack", "protect", "rest"], - tier: "PU", + randomBattleMoves: ["return", "liquidation", "swordsdance", "quickattack", "aquajet"], + randomDoubleBattleMoves: ["return", "liquidation", "curse", "aquajet", "quickattack", "protect", "rest"], + encounters: [ + {"generation": 4, "level": 4}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, kricketot: { randomBattleMoves: ["endeavor", "mudslap", "bugbite", "strugglebug"], @@ -3731,7 +4904,8 @@ exports.BattleFormatsData = { kricketune: { randomBattleMoves: ["leechlife", "endeavor", "taunt", "toxic", "stickyweb", "knockoff"], randomDoubleBattleMoves: ["leechlife", "protect", "taunt", "stickyweb", "knockoff"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, shinx: { randomBattleMoves: ["wildcharge", "icefang", "firefang", "crunch"], @@ -3744,55 +4918,62 @@ exports.BattleFormatsData = { luxray: { randomBattleMoves: ["wildcharge", "icefang", "voltswitch", "crunch", "superpower", "facade"], randomDoubleBattleMoves: ["wildcharge", "icefang", "voltswitch", "crunch", "superpower", "facade", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, cranidos: { randomBattleMoves: ["headsmash", "rockslide", "earthquake", "zenheadbutt", "firepunch", "rockpolish", "crunch"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves":["pursuit", "takedown", "crunch", "headbutt"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves": ["pursuit", "takedown", "crunch", "headbutt"], "pokeball": "cherishball"}, ], tier: "LC", }, rampardos: { randomBattleMoves: ["headsmash", "earthquake", "rockpolish", "crunch", "rockslide", "firepunch"], randomDoubleBattleMoves: ["headsmash", "earthquake", "zenheadbutt", "rockslide", "crunch", "stoneedge", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, shieldon: { randomBattleMoves: ["stealthrock", "metalburst", "fireblast", "icebeam", "protect", "toxic", "roar"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves":["metalsound", "takedown", "bodyslam", "protect"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "moves": ["metalsound", "takedown", "bodyslam", "protect"], "pokeball": "cherishball"}, ], tier: "LC", }, bastiodon: { randomBattleMoves: ["stealthrock", "rockblast", "metalburst", "protect", "toxic", "roar"], randomDoubleBattleMoves: ["stealthrock", "stoneedge", "metalburst", "protect", "wideguard", "guardsplit"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, burmy: { randomBattleMoves: ["bugbite", "hiddenpowerice", "electroweb", "protect"], tier: "LC", }, wormadam: { - randomBattleMoves: ["gigadrain", "bugbuzz", "protect", "toxic", "synthesis"], + randomBattleMoves: ["gigadrain", "bugbuzz", "quiverdance", "hiddenpowerrock", "leafstorm"], randomDoubleBattleMoves: ["leafstorm", "gigadrain", "bugbuzz", "hiddenpowerice", "hiddenpowerrock", "stringshot", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, wormadamsandy: { - randomBattleMoves: ["earthquake", "toxic", "rockblast", "protect", "stealthrock"], + randomBattleMoves: ["earthquake", "toxic", "protect", "stealthrock"], randomDoubleBattleMoves: ["earthquake", "suckerpunch", "rockblast", "protect", "stringshot"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, wormadamtrash: { randomBattleMoves: ["stealthrock", "toxic", "gyroball", "protect"], randomDoubleBattleMoves: ["strugglebug", "stringshot", "gyroball", "bugbuzz", "flashcannon", "suckerpunch", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, mothim: { randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "gigadrain", "hiddenpowerground", "uturn"], randomDoubleBattleMoves: ["quiverdance", "bugbuzz", "airslash", "gigadrain", "roost", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, combee: { randomBattleMoves: ["bugbuzz", "aircutter", "endeavor", "ominouswind", "tailwind"], @@ -3801,24 +4982,31 @@ exports.BattleFormatsData = { vespiquen: { randomBattleMoves: ["substitute", "healorder", "toxic", "attackorder", "defendorder", "infestation"], randomDoubleBattleMoves: ["tailwind", "healorder", "stringshot", "attackorder", "strugglebug", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pachirisu: { randomBattleMoves: ["nuzzle", "thunderbolt", "superfang", "toxic", "uturn"], randomDoubleBattleMoves: ["nuzzle", "thunderbolt", "superfang", "followme", "uturn", "helpinghand", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "nature": "Impish", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 14, "spd": 31, "spe": 31}, "isHidden": true, "moves":["nuzzle", "superfang", "followme", "protect"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Impish", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 14, "spd": 31, "spe": 31}, "isHidden": true, "moves": ["nuzzle", "superfang", "followme", "protect"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, buizel: { - randomBattleMoves: ["waterfall", "aquajet", "switcheroo", "brickbreak", "bulkup", "batonpass", "icepunch"], + randomBattleMoves: ["waterfall", "aquajet", "switcheroo", "brickbreak", "bulkup", "icepunch"], tier: "LC", }, floatzel: { - randomBattleMoves: ["bulkup", "batonpass", "waterfall", "icepunch", "substitute", "taunt", "aquajet", "brickbreak"], - randomDoubleBattleMoves: ["waterfall", "aquajet", "switcheroo", "raindance", "protect", "icepunch", "crunch", "taunt"], - tier: "PU", + randomBattleMoves: ["bulkup", "liquidation", "icepunch", "substitute", "taunt", "aquajet", "brickbreak"], + randomDoubleBattleMoves: ["liquidation", "aquajet", "switcheroo", "raindance", "protect", "icepunch", "crunch", "taunt"], + encounters: [ + {"generation": 4, "level": 22}, + {"generation": 5, "level": 10, "isHidden": false}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, cherubi: { randomBattleMoves: ["sunnyday", "solarbeam", "weatherball", "hiddenpowerice", "aromatherapy", "dazzlinggleam"], @@ -3827,11 +5015,13 @@ exports.BattleFormatsData = { cherrim: { randomBattleMoves: ["energyball", "dazzlinggleam", "hiddenpowerfire", "synthesis", "healingwish"], randomDoubleBattleMoves: ["sunnyday", "solarbeam", "weatherball", "gigadrain", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, cherrimsunshine: { randomBattleMoves: ["sunnyday", "solarbeam", "gigadrain", "weatherball", "hiddenpowerice"], randomDoubleBattleMoves: ["sunnyday", "solarbeam", "gigadrain", "weatherball", "protect"], + requiredAbility: 'Flower Gift', battleOnly: true, }, shellos: { @@ -3841,7 +5031,11 @@ exports.BattleFormatsData = { gastrodon: { randomBattleMoves: ["earthquake", "icebeam", "scald", "toxic", "recover", "clearsmog"], randomDoubleBattleMoves: ["earthpower", "icebeam", "scald", "muddywater", "recover", "icywind", "protect"], + encounters: [ + {"generation": 4, "level": 20}, + ], tier: "PU", + doublesTier: "DOU", }, drifloon: { randomBattleMoves: ["shadowball", "substitute", "calmmind", "hypnosis", "hiddenpowerfighting", "thunderbolt", "destinybond", "willowisp"], @@ -3850,7 +5044,11 @@ exports.BattleFormatsData = { drifblim: { randomBattleMoves: ["acrobatics", "willowisp", "substitute", "destinybond", "shadowball", "hex"], randomDoubleBattleMoves: ["shadowball", "substitute", "hypnosis", "hiddenpowerfighting", "thunderbolt", "destinybond", "willowisp", "protect"], - tier: "PU", + encounters: [ + {"generation": 7, "level": 11, "isHidden": false, "pokeball": "pokeball"}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, buneary: { randomBattleMoves: ["fakeout", "return", "switcheroo", "thunderpunch", "jumpkick", "firepunch", "icepunch", "healingwish"], @@ -3859,13 +5057,15 @@ exports.BattleFormatsData = { lopunny: { randomBattleMoves: ["return", "switcheroo", "highjumpkick", "icepunch", "healingwish"], randomDoubleBattleMoves: ["return", "switcheroo", "highjumpkick", "firepunch", "icepunch", "fakeout", "protect", "encore"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, lopunnymega: { randomBattleMoves: ["return", "highjumpkick", "substitute", "fakeout", "icepunch"], randomDoubleBattleMoves: ["return", "highjumpkick", "protect", "fakeout", "icepunch", "encore"], requiredItem: "Lopunnite", tier: "OU", + doublesTier: "DUU", }, glameow: { randomBattleMoves: ["fakeout", "uturn", "suckerpunch", "hypnosis", "quickattack", "return", "foulplay"], @@ -3874,7 +5074,11 @@ exports.BattleFormatsData = { purugly: { randomBattleMoves: ["fakeout", "uturn", "suckerpunch", "quickattack", "return", "knockoff"], randomDoubleBattleMoves: ["fakeout", "uturn", "suckerpunch", "quickattack", "return", "knockoff", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 32, "maxEggMoves": 1}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, stunky: { randomBattleMoves: ["pursuit", "suckerpunch", "crunch", "fireblast", "explosion", "taunt", "playrough", "defog"], @@ -3883,7 +5087,11 @@ exports.BattleFormatsData = { skuntank: { randomBattleMoves: ["pursuit", "suckerpunch", "crunch", "fireblast", "taunt", "poisonjab", "defog"], randomDoubleBattleMoves: ["protect", "suckerpunch", "crunch", "fireblast", "taunt", "poisonjab", "playrough", "snarl"], + encounters: [ + {"generation": 4, "level": 29}, + ], tier: "PU", + doublesTier: "(DUU)", }, bronzor: { randomBattleMoves: ["stealthrock", "psychic", "toxic", "hypnosis", "reflect", "lightscreen", "trickroom", "trick"], @@ -3892,23 +5100,29 @@ exports.BattleFormatsData = { bronzong: { randomBattleMoves: ["stealthrock", "earthquake", "toxic", "reflect", "lightscreen", "trickroom", "explosion", "gyroball"], randomDoubleBattleMoves: ["earthquake", "protect", "reflect", "lightscreen", "trickroom", "explosion", "gyroball"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "RU", + doublesTier: "DOU", }, chatot: { randomBattleMoves: ["nastyplot", "boomburst", "heatwave", "hiddenpowerground", "substitute", "chatter", "uturn"], randomDoubleBattleMoves: ["nastyplot", "heatwave", "encore", "substitute", "chatter", "uturn", "protect", "hypervoice", "boomburst"], eventPokemon: [ - {"generation": 4, "level": 25, "gender": "M", "nature": "Jolly", "abilities":["keeneye"], "moves":["mirrormove", "furyattack", "chatter", "taunt"]}, + {"generation": 4, "level": 25, "gender": "M", "nature": "Jolly", "abilities": ["keeneye"], "moves": ["mirrormove", "furyattack", "chatter", "taunt"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, spiritomb: { randomBattleMoves: ["shadowsneak", "suckerpunch", "pursuit", "willowisp", "darkpulse", "rest", "sleeptalk", "foulplay", "painsplit", "calmmind"], randomDoubleBattleMoves: ["shadowsneak", "suckerpunch", "icywind", "willowisp", "snarl", "darkpulse", "protect", "foulplay", "painsplit"], eventPokemon: [ - {"generation": 5, "level": 61, "gender": "F", "nature": "Quiet", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves":["darkpulse", "psychic", "silverwind", "embargo"], "pokeball": "cherishball"}, + {"generation": 5, "level": 61, "gender": "F", "nature": "Quiet", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves": ["darkpulse", "psychic", "silverwind", "embargo"], "pokeball": "cherishball"}, ], - tier: "NU", + tier: "PU", + doublesTier: "(DUU)", }, gible: { randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "fireblast", "stoneedge", "stealthrock"], @@ -3922,45 +5136,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "stoneedge", "fireblast", "swordsdance", "stealthrock", "firefang"], randomDoubleBattleMoves: ["substitute", "dragonclaw", "earthquake", "stoneedge", "rockslide", "swordsdance", "protect", "firefang"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["outrage", "earthquake", "swordsdance", "stoneedge"], "pokeball": "cherishball"}, - {"generation": 5, "level": 48, "gender": "M", "isHidden": true, "moves":["dragonclaw", "dig", "crunch", "outrage"]}, - {"generation": 6, "level": 48, "gender": "M", "isHidden": false, "moves":["dracometeor", "dragonclaw", "dig", "crunch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "gender": "M", "isHidden": false, "moves":["slash", "dragonclaw", "dig", "crunch"], "pokeball": "cherishball"}, - {"generation": 6, "level": 66, "gender": "F", "perfectIVs": 3, "isHidden": false, "moves":["dragonrush", "earthquake", "brickbreak", "gigaimpact"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["outrage", "earthquake", "swordsdance", "stoneedge"], "pokeball": "cherishball"}, + {"generation": 5, "level": 48, "gender": "M", "isHidden": true, "moves": ["dragonclaw", "dig", "crunch", "outrage"]}, + {"generation": 6, "level": 48, "gender": "M", "isHidden": false, "moves": ["dracometeor", "dragonclaw", "dig", "crunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "gender": "M", "isHidden": false, "moves": ["slash", "dragonclaw", "dig", "crunch"], "pokeball": "cherishball"}, + {"generation": 6, "level": 66, "gender": "F", "perfectIVs": 3, "isHidden": false, "moves": ["dragonrush", "earthquake", "brickbreak", "gigaimpact"], "pokeball": "cherishball"}, ], tier: "OU", + doublesTier: "DOU", }, garchompmega: { randomBattleMoves: ["outrage", "dracometeor", "earthquake", "stoneedge", "fireblast", "swordsdance"], randomDoubleBattleMoves: ["substitute", "dragonclaw", "earthquake", "stoneedge", "rockslide", "swordsdance", "protect", "fireblast"], requiredItem: "Garchompite", tier: "(OU)", + doublesTier: "(DOU)", }, riolu: { randomBattleMoves: ["crunch", "rockslide", "copycat", "drainpunch", "highjumpkick", "icepunch", "swordsdance"], eventPokemon: [ - {"generation": 4, "level": 30, "gender": "M", "nature": "Serious", "abilities":["steadfast"], "moves":["aurasphere", "shadowclaw", "bulletpunch", "drainpunch"]}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Serious", "abilities": ["steadfast"], "moves": ["aurasphere", "shadowclaw", "bulletpunch", "drainpunch"], "pokeball": "pokeball"}, ], tier: "LC", }, lucario: { - randomBattleMoves: ["swordsdance", "closecombat", "crunch", "extremespeed", "icepunch", "nastyplot", "aurasphere", "darkpulse", "vacuumwave", "flashcannon"], + randomBattleMoves: ["swordsdance", "closecombat", "crunch", "extremespeed", "icepunch", "meteormash", "nastyplot", "aurasphere", "darkpulse", "vacuumwave", "flashcannon"], randomDoubleBattleMoves: ["followme", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "aurasphere", "darkpulse", "vacuumwave", "flashcannon", "protect"], eventPokemon: [ - {"generation": 4, "level": 50, "gender": "M", "nature": "Modest", "abilities":["steadfast"], "moves":["aurasphere", "darkpulse", "dragonpulse", "waterpulse"], "pokeball": "cherishball"}, - {"generation": 4, "level": 30, "gender": "M", "nature": "Adamant", "abilities":["innerfocus"], "moves":["forcepalm", "bonerush", "sunnyday", "blazekick"], "pokeball": "cherishball"}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["detect", "metalclaw", "counter", "bulletpunch"]}, - {"generation": 5, "level": 50, "gender": "M", "nature": "Naughty", "ivs": {"atk": 31}, "isHidden": true, "moves":["bulletpunch", "closecombat", "stoneedge", "shadowclaw"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "nature": "Jolly", "isHidden": false, "abilities":["innerfocus"], "moves":["closecombat", "aurasphere", "flashcannon", "quickattack"], "pokeball": "cherishball"}, - {"generation": 7, "level": 40, "gender": "M", "nature": "Serious", "isHidden": false, "abilities":["steadfast"], "moves":["aurasphere", "highjumpkick", "dragonpulse", "extremespeed"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "gender": "M", "nature": "Modest", "abilities": ["steadfast"], "moves": ["aurasphere", "darkpulse", "dragonpulse", "waterpulse"], "pokeball": "cherishball"}, + {"generation": 4, "level": 30, "gender": "M", "nature": "Adamant", "abilities": ["innerfocus"], "moves": ["forcepalm", "bonerush", "sunnyday", "blazekick"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["detect", "metalclaw", "counter", "bulletpunch"]}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Naughty", "ivs": {"atk": 31}, "isHidden": true, "moves": ["bulletpunch", "closecombat", "stoneedge", "shadowclaw"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "nature": "Jolly", "isHidden": false, "abilities": ["innerfocus"], "moves": ["closecombat", "aurasphere", "flashcannon", "quickattack"], "pokeball": "cherishball"}, + {"generation": 7, "level": 40, "gender": "M", "nature": "Serious", "isHidden": false, "abilities": ["steadfast"], "moves": ["aurasphere", "highjumpkick", "dragonpulse", "extremespeed"], "pokeball": "pokeball"}, ], - tier: "BL2", + tier: "UU", + doublesTier: "(DUU)", }, lucariomega: { - randomBattleMoves: ["swordsdance", "closecombat", "crunch", "icepunch", "bulletpunch", "nastyplot", "aurasphere", "darkpulse", "flashcannon"], - randomDoubleBattleMoves: ["followme", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "aurasphere", "darkpulse", "vacuumwave", "flashcannon", "protect"], + randomBattleMoves: ["swordsdance", "closecombat", "crunch", "icepunch", "bulletpunch", "meteormash", "nastyplot", "aurasphere", "darkpulse", "flashcannon"], + randomDoubleBattleMoves: ["followme", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "meteormash", "aurasphere", "darkpulse", "vacuumwave", "flashcannon", "protect"], requiredItem: "Lucarionite", tier: "Uber", + doublesTier: "(DUU)", }, hippopotas: { randomBattleMoves: ["earthquake", "slackoff", "whirlwind", "stealthrock", "protect", "toxic", "stockpile"], @@ -3970,6 +5188,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "slackoff", "whirlwind", "stealthrock", "toxic", "stoneedge"], randomDoubleBattleMoves: ["earthquake", "slackoff", "rockslide", "stealthrock", "protect", "stoneedge", "whirlwind"], tier: "UU", + doublesTier: "(DUU)", }, skorupi: { randomBattleMoves: ["toxicspikes", "xscissor", "poisonjab", "knockoff", "pinmissile", "whirlwind"], @@ -3978,25 +5197,36 @@ exports.BattleFormatsData = { drapion: { randomBattleMoves: ["knockoff", "taunt", "toxicspikes", "poisonjab", "whirlwind", "swordsdance", "aquatail", "earthquake"], randomDoubleBattleMoves: ["snarl", "taunt", "protect", "earthquake", "aquatail", "swordsdance", "poisonjab", "knockoff"], - tier: "NU", + encounters: [ + {"generation": 4, "level": 22, "pokeball": "safariball"}, + {"generation": 6, "level": 30}, + ], + tier: "RU", + doublesTier: "(DUU)", }, croagunk: { randomBattleMoves: ["fakeout", "vacuumwave", "suckerpunch", "drainpunch", "darkpulse", "knockoff", "gunkshot", "toxic"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["astonish", "mudslap", "poisonsting", "taunt"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["mudslap", "poisonsting", "taunt", "poisonjab"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["astonish", "mudslap", "poisonsting", "taunt"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["mudslap", "poisonsting", "taunt", "poisonjab"]}, ], tier: "LC", }, toxicroak: { randomBattleMoves: ["swordsdance", "gunkshot", "drainpunch", "suckerpunch", "icepunch", "substitute"], randomDoubleBattleMoves: ["suckerpunch", "drainpunch", "substitute", "swordsdance", "knockoff", "icepunch", "gunkshot", "fakeout", "protect"], - tier: "NU", + encounters: [ + {"generation": 4, "level": 22, "pokeball": "safariball"}, + {"generation": 6, "level": 30}, + ], + tier: "RU", + doublesTier: "(DUU)", }, carnivine: { randomBattleMoves: ["swordsdance", "powerwhip", "return", "sleeppowder", "substitute", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "powerwhip", "return", "sleeppowder", "substitute", "leechseed", "knockoff", "ragepowder", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, finneon: { randomBattleMoves: ["surf", "uturn", "icebeam", "hiddenpowerelectric", "hiddenpowergrass"], @@ -4005,7 +5235,11 @@ exports.BattleFormatsData = { lumineon: { randomBattleMoves: ["scald", "icebeam", "uturn", "toxic", "defog"], randomDoubleBattleMoves: ["surf", "uturn", "icebeam", "toxic", "raindance", "tailwind", "scald", "protect"], - tier: "PU", + encounters: [ + {"generation": 4, "level": 20}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, snover: { randomBattleMoves: ["blizzard", "iceshard", "gigadrain", "leechseed", "substitute", "woodhammer"], @@ -4014,155 +5248,193 @@ exports.BattleFormatsData = { abomasnow: { randomBattleMoves: ["woodhammer", "iceshard", "blizzard", "gigadrain", "leechseed", "substitute", "focuspunch", "earthquake"], randomDoubleBattleMoves: ["blizzard", "iceshard", "gigadrain", "protect", "focusblast", "woodhammer", "earthquake"], - tier: "PU", + encounters: [ + {"generation": 4, "level": 38}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, abomasnowmega: { randomBattleMoves: ["blizzard", "gigadrain", "woodhammer", "earthquake", "iceshard", "hiddenpowerfire"], randomDoubleBattleMoves: ["blizzard", "iceshard", "gigadrain", "protect", "focusblast", "woodhammer", "earthquake"], requiredItem: "Abomasite", - tier: "UU", + tier: "NU", + doublesTier: "DUU", }, rotom: { randomBattleMoves: ["thunderbolt", "voltswitch", "shadowball", "substitute", "painsplit", "hiddenpowerice", "trick", "willowisp"], randomDoubleBattleMoves: ["thunderbolt", "voltswitch", "shadowball", "substitute", "painsplit", "hiddenpowerice", "trick", "willowisp", "electroweb", "protect"], eventPokemon: [ - {"generation": 5, "level": 10, "nature": "Naughty", "moves":["uproar", "astonish", "trick", "thundershock"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "nature": "Quirky", "moves":["shockwave", "astonish", "trick", "thunderwave"], "pokeball": "cherishball"}, + {"generation": 5, "level": 10, "nature": "Naughty", "moves": ["uproar", "astonish", "trick", "thundershock"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "nature": "Quirky", "moves": ["shockwave", "astonish", "trick", "thunderwave"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "moves": ["uproar", "confide", "disarmingvoice"], "pokeball": "cherishball"}, ], tier: "NU", + doublesTier: "(DUU)", }, rotomheat: { randomBattleMoves: ["overheat", "thunderbolt", "voltswitch", "hiddenpowerice", "painsplit", "willowisp", "trick"], randomDoubleBattleMoves: ["overheat", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "trick", "electroweb", "protect"], - tier: "RU", + tier: "UU", + doublesTier: "(DUU)", }, rotomwash: { randomBattleMoves: ["hydropump", "thunderbolt", "voltswitch", "painsplit", "hiddenpowerice", "willowisp", "trick"], randomDoubleBattleMoves: ["hydropump", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "trick", "electroweb", "protect", "hiddenpowergrass"], tier: "OU", + doublesTier: "DUU", }, rotomfrost: { randomBattleMoves: ["blizzard", "thunderbolt", "voltswitch", "substitute", "painsplit", "willowisp", "trick"], randomDoubleBattleMoves: ["blizzard", "thunderbolt", "voltswitch", "substitute", "painsplit", "willowisp", "trick", "electroweb", "protect"], tier: "PU", + doublesTier: "(DUU)", }, rotomfan: { - randomBattleMoves: ["airslash", "thunderbolt", "voltswitch", "painsplit", "willowisp", "trick"], + randomBattleMoves: ["airslash", "thunderbolt", "voltswitch", "painsplit", "willowisp", "defog"], randomDoubleBattleMoves: ["airslash", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "electroweb", "discharge", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, rotommow: { randomBattleMoves: ["leafstorm", "thunderbolt", "voltswitch", "painsplit", "hiddenpowerfire", "willowisp", "trick"], randomDoubleBattleMoves: ["leafstorm", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerfire", "willowisp", "trick", "electroweb", "protect"], - tier: "NU", + tier: "RU", + doublesTier: "(DUU)", }, uxie: { randomBattleMoves: ["stealthrock", "thunderwave", "psychic", "uturn", "healbell", "knockoff", "yawn"], randomDoubleBattleMoves: ["uturn", "psyshock", "yawn", "healbell", "stealthrock", "thunderbolt", "protect", "helpinghand", "thunderwave"], eventPokemon: [ - {"generation": 4, "level": 50, "shiny": 1, "moves":["confusion", "yawn", "futuresight", "amnesia"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["swift", "yawn", "futuresight", "amnesia"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["futuresight", "amnesia", "extrasensory", "flail"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["yawn", "futuresight", "amnesia", "extrasensory"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["confusion", "yawn", "futuresight", "amnesia"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["swift", "yawn", "futuresight", "amnesia"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["futuresight", "amnesia", "extrasensory", "flail"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["yawn", "futuresight", "amnesia", "extrasensory"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["extrasensory", "yawn", "amnesia", "swift"]}, ], eventOnly: true, - tier: "NU", + tier: "RU", + doublesTier: "(DUU)", }, mesprit: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "energyball", "signalbeam", "hiddenpowerfire", "icebeam", "healingwish", "stealthrock", "uturn"], randomDoubleBattleMoves: ["calmmind", "psychic", "thunderbolt", "icebeam", "substitute", "uturn", "trick", "protect", "knockoff", "helpinghand"], eventPokemon: [ - {"generation": 4, "level": 50, "shiny": 1, "moves":["confusion", "luckychant", "futuresight", "charm"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["swift", "luckychant", "futuresight", "charm"]}, - {"generation": 5, "level": 50, "shiny": 1, "moves":["futuresight", "charm", "extrasensory", "copycat"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["luckychant", "futuresight", "charm", "extrasensory"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["confusion", "luckychant", "futuresight", "charm"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["swift", "luckychant", "futuresight", "charm"]}, + {"generation": 5, "level": 50, "shiny": 1, "moves": ["futuresight", "charm", "extrasensory", "copycat"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["luckychant", "futuresight", "charm", "extrasensory"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["extrasensory", "charm", "futuresight", "swift"]}, ], eventOnly: true, - tier: "NU", + tier: "PU", + doublesTier: "(DUU)", }, azelf: { - randomBattleMoves: ["nastyplot", "psyshock", "fireblast", "dazzlinggleam", "stealthrock", "knockoff", "taunt", "explosion"], + randomBattleMoves: ["nastyplot", "psyshock", "fireblast", "dazzlinggleam", "stealthrock", "knockoff", "taunt", "explosion", "uturn"], randomDoubleBattleMoves: ["nastyplot", "psychic", "fireblast", "thunderbolt", "icepunch", "knockoff", "zenheadbutt", "uturn", "trick", "taunt", "protect", "dazzlinggleam"], eventPokemon: [ - {"generation": 4, "level": 50, "shiny": 1, "moves":["confusion", "uproar", "futuresight", "nastyplot"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["swift", "uproar", "futuresight", "nastyplot"]}, - {"generation": 5, "level": 50, "shiny": 1, "moves":["futuresight", "nastyplot", "extrasensory", "lastresort"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["uproar", "futuresight", "nastyplot", "extrasensory"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["confusion", "uproar", "futuresight", "nastyplot"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["swift", "uproar", "futuresight", "nastyplot"]}, + {"generation": 5, "level": 50, "shiny": 1, "moves": ["futuresight", "nastyplot", "extrasensory", "lastresort"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["uproar", "futuresight", "nastyplot", "extrasensory"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["extrasensory", "nastyplot", "uproar", "swift"]}, ], eventOnly: true, tier: "UU", + doublesTier: "(DUU)", }, dialga: { randomBattleMoves: ["stealthrock", "toxic", "dracometeor", "fireblast", "flashcannon", "roar", "thunderbolt"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "protect", "thunderbolt", "flashcannon", "earthpower", "fireblast", "aurasphere"], eventPokemon: [ - {"generation": 4, "level": 47, "shiny": 1, "moves":["metalclaw", "ancientpower", "dragonclaw", "roaroftime"]}, - {"generation": 4, "level": 70, "shiny": 1, "moves":["roaroftime", "healblock", "earthpower", "slash"]}, - {"generation": 4, "level": 1, "shiny": 1, "moves":["dragonbreath", "scaryface"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["dragonbreath", "scaryface"], "pokeball": "dreamball"}, - {"generation": 5, "level": 100, "shiny": true, "isHidden": false, "moves":["dragonpulse", "dracometeor", "aurasphere", "roaroftime"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["aurasphere", "irontail", "roaroftime", "flashcannon"]}, - {"generation": 6, "level": 100, "nature": "Modest", "isHidden": true, "moves":["metalburst", "overheat", "roaroftime", "flashcannon"], "pokeball": "cherishball"}, + {"generation": 4, "level": 47, "shiny": 1, "moves": ["metalclaw", "ancientpower", "dragonclaw", "roaroftime"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["roaroftime", "healblock", "earthpower", "slash"]}, + {"generation": 4, "level": 1, "shiny": 1, "moves": ["dragonbreath", "scaryface"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["dragonbreath", "scaryface"], "pokeball": "dreamball"}, + {"generation": 5, "level": 100, "shiny": true, "isHidden": false, "moves": ["dragonpulse", "dracometeor", "aurasphere", "roaroftime"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["aurasphere", "irontail", "roaroftime", "flashcannon"]}, + {"generation": 6, "level": 100, "nature": "Modest", "isHidden": true, "moves": ["metalburst", "overheat", "roaroftime", "flashcannon"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["aurasphere", "irontail", "roaroftime", "flashcannon"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["aurasphere", "irontail", "roaroftime", "flashcannon"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["roaroftime", "aurasphere", "dracometeor", "flashcannon"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "isHidden": false, "moves": ["flashcannon", "dracometeor", "roaroftime", "aurasphere"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, palkia: { randomBattleMoves: ["spacialrend", "dracometeor", "hydropump", "thunderwave", "dragontail", "fireblast"], randomDoubleBattleMoves: ["spacialrend", "dracometeor", "surf", "hydropump", "thunderbolt", "fireblast", "protect"], eventPokemon: [ - {"generation": 4, "level": 47, "shiny": 1, "moves":["waterpulse", "ancientpower", "dragonclaw", "spacialrend"]}, - {"generation": 4, "level": 70, "shiny": 1, "moves":["spacialrend", "healblock", "earthpower", "slash"]}, - {"generation": 4, "level": 1, "shiny": 1, "moves":["dragonbreath", "scaryface"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["dragonbreath", "scaryface"], "pokeball": "dreamball"}, - {"generation": 5, "level": 100, "shiny": true, "isHidden": false, "moves":["hydropump", "dracometeor", "spacialrend", "aurasphere"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["earthpower", "aurasphere", "spacialrend", "hydropump"]}, - {"generation": 6, "level": 100, "nature": "Timid", "isHidden": true, "moves":["earthpower", "aurasphere", "spacialrend", "hydropump"], "pokeball": "cherishball"}, + {"generation": 4, "level": 47, "shiny": 1, "moves": ["waterpulse", "ancientpower", "dragonclaw", "spacialrend"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["spacialrend", "healblock", "earthpower", "slash"]}, + {"generation": 4, "level": 1, "shiny": 1, "moves": ["dragonbreath", "scaryface"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["dragonbreath", "scaryface"], "pokeball": "dreamball"}, + {"generation": 5, "level": 100, "shiny": true, "isHidden": false, "moves": ["hydropump", "dracometeor", "spacialrend", "aurasphere"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["earthpower", "aurasphere", "spacialrend", "hydropump"]}, + {"generation": 6, "level": 100, "nature": "Timid", "isHidden": true, "moves": ["earthpower", "aurasphere", "spacialrend", "hydropump"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["aurasphere", "aquatail", "spacialrend", "hydropump"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["aurasphere", "aquatail", "spacialrend", "hydropump"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["spacialrend", "aurasphere", "dracometeor", "hydropump"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "isHidden": false, "moves": ["hydropump", "dracometeor", "spacialrend", "aurasphere"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, heatran: { randomBattleMoves: ["fireblast", "lavaplume", "stealthrock", "earthpower", "flashcannon", "protect", "toxic", "roar"], randomDoubleBattleMoves: ["heatwave", "substitute", "earthpower", "protect", "eruption", "willowisp"], eventPokemon: [ - {"generation": 4, "level": 70, "shiny": 1, "moves":["scaryface", "lavaplume", "firespin", "ironhead"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["metalsound", "crunch", "scaryface", "lavaplume"]}, - {"generation": 4, "level": 50, "nature": "Quiet", "moves":["eruption", "magmastorm", "earthpower", "ancientpower"]}, - {"generation": 5, "level": 68, "shiny": 1, "isHidden": false, "moves":["scaryface", "lavaplume", "firespin", "ironhead"]}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["metalsound", "crunch", "scaryface", "lavaplume"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["scaryface", "lavaplume", "firespin", "ironhead"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["metalsound", "crunch", "scaryface", "lavaplume"]}, + {"generation": 4, "level": 50, "nature": "Quiet", "moves": ["eruption", "magmastorm", "earthpower", "ancientpower"], "pokeball": "pokeball"}, + {"generation": 5, "level": 68, "shiny": 1, "isHidden": false, "moves": ["scaryface", "lavaplume", "firespin", "ironhead"]}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["metalsound", "crunch", "scaryface", "lavaplume"]}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["crunch", "scaryface", "lavaplume", "firespin"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["crunch", "scaryface", "lavaplume", "firespin"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["magmastorm", "heatwave", "earthpower", "flashcannon"], "pokeball": "cherishball"}, ], eventOnly: true, unreleasedHidden: true, tier: "OU", + doublesTier: "DOU", }, regigigas: { randomBattleMoves: ["thunderwave", "confuseray", "substitute", "return", "knockoff", "drainpunch"], randomDoubleBattleMoves: ["thunderwave", "substitute", "return", "icywind", "rockslide", "earthquake", "knockoff", "wideguard"], eventPokemon: [ - {"generation": 4, "level": 70, "shiny": 1, "moves":["confuseray", "stomp", "superpower", "zenheadbutt"]}, - {"generation": 4, "level": 1, "shiny": 1, "moves":["dizzypunch", "knockoff", "foresight", "confuseray"]}, - {"generation": 4, "level": 100, "moves":["ironhead", "rockslide", "icywind", "crushgrip"], "pokeball": "cherishball"}, - {"generation": 5, "level": 68, "shiny": 1, "moves":["revenge", "wideguard", "zenheadbutt", "payback"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["foresight", "revenge", "wideguard", "zenheadbutt"]}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["confuseray", "stomp", "superpower", "zenheadbutt"]}, + {"generation": 4, "level": 1, "shiny": 1, "moves": ["dizzypunch", "knockoff", "foresight", "confuseray"]}, + {"generation": 4, "level": 100, "moves": ["ironhead", "rockslide", "icywind", "crushgrip"], "pokeball": "cherishball"}, + {"generation": 5, "level": 68, "shiny": 1, "moves": ["revenge", "wideguard", "zenheadbutt", "payback"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["foresight", "revenge", "wideguard", "zenheadbutt"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["zenheadbutt", "revenge", "dizzypunch", "confuseray"]}, + {"generation": 7, "level": 60, "moves": ["zenheadbutt", "revenge", "dizzypunch", "confuseray"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["crushgrip", "drainpunch", "zenheadbutt", "heavyslam"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, giratina: { randomBattleMoves: ["rest", "sleeptalk", "dragontail", "roar", "willowisp", "shadowball", "dragonpulse"], randomDoubleBattleMoves: ["tailwind", "shadowsneak", "protect", "dragontail", "willowisp", "calmmind", "dragonpulse", "shadowball"], eventPokemon: [ - {"generation": 4, "level": 70, "shiny": 1, "moves":["shadowforce", "healblock", "earthpower", "slash"]}, - {"generation": 4, "level": 47, "shiny": 1, "moves":["ominouswind", "ancientpower", "dragonclaw", "shadowforce"]}, - {"generation": 4, "level": 1, "shiny": 1, "moves":["dragonbreath", "scaryface"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["dragonbreath", "scaryface"], "pokeball": "dreamball"}, - {"generation": 5, "level": 100, "shiny": true, "isHidden": false, "moves":["dragonpulse", "dragonclaw", "aurasphere", "shadowforce"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["aurasphere", "shadowclaw", "shadowforce", "hex"]}, - {"generation": 6, "level": 100, "nature": "Brave", "isHidden": true, "moves":["aurasphere", "dracometeor", "shadowforce", "ironhead"], "pokeball": "cherishball"}, + {"generation": 4, "level": 70, "shiny": 1, "moves": ["shadowforce", "healblock", "earthpower", "slash"]}, + {"generation": 4, "level": 47, "shiny": 1, "moves": ["ominouswind", "ancientpower", "dragonclaw", "shadowforce"]}, + {"generation": 4, "level": 1, "shiny": 1, "moves": ["dragonbreath", "scaryface"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["dragonbreath", "scaryface"], "pokeball": "dreamball"}, + {"generation": 5, "level": 100, "shiny": true, "isHidden": false, "moves": ["dragonpulse", "dragonclaw", "aurasphere", "shadowforce"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["aurasphere", "shadowclaw", "shadowforce", "hex"]}, + {"generation": 6, "level": 100, "nature": "Brave", "isHidden": true, "moves": ["aurasphere", "dracometeor", "shadowforce", "ironhead"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["shadowforce", "aurasphere", "earthpower", "dragonclaw"]}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, giratinaorigin: { randomBattleMoves: ["dracometeor", "shadowsneak", "dragontail", "willowisp", "defog", "toxic", "shadowball", "earthquake"], @@ -4170,86 +5442,99 @@ exports.BattleFormatsData = { eventOnly: true, requiredItem: "Griseous Orb", tier: "Uber", + doublesTier: "DUber", }, cresselia: { randomBattleMoves: ["moonlight", "psychic", "icebeam", "thunderwave", "toxic", "substitute", "psyshock", "moonblast", "calmmind"], randomDoubleBattleMoves: ["psyshock", "icywind", "thunderwave", "trickroom", "moonblast", "moonlight", "skillswap", "reflect", "lightscreen", "icebeam", "protect", "helpinghand"], eventPokemon: [ - {"generation": 4, "level": 50, "shiny": 1, "moves":["mist", "aurorabeam", "futuresight", "slash"]}, - {"generation": 5, "level": 68, "shiny": 1, "moves":["futuresight", "slash", "moonlight", "psychocut"]}, - {"generation": 5, "level": 68, "nature": "Modest", "moves":["icebeam", "psyshock", "energyball", "hiddenpower"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["mist", "aurorabeam", "futuresight", "slash"]}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["mist", "aurorabeam", "futuresight", "slash"]}, + {"generation": 5, "level": 68, "shiny": 1, "moves": ["futuresight", "slash", "moonlight", "psychocut"]}, + {"generation": 5, "level": 68, "nature": "Modest", "moves": ["icebeam", "psyshock", "energyball", "hiddenpower"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["mist", "aurorabeam", "futuresight", "slash"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["aurorabeam", "futuresight", "slash", "moonlight"]}, ], eventOnly: true, tier: "RU", + doublesTier: "DOU", }, phione: { randomBattleMoves: ["raindance", "scald", "uturn", "rest", "icebeam"], randomDoubleBattleMoves: ["raindance", "scald", "uturn", "rest", "icebeam", "helpinghand", "icywind", "protect"], eventPokemon: [ - {"generation": 4, "level": 50, "moves":["grassknot", "raindance", "rest", "surf"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["grassknot", "raindance", "rest", "surf"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, manaphy: { randomBattleMoves: ["tailglow", "surf", "icebeam", "energyball", "psychic"], randomDoubleBattleMoves: ["tailglow", "surf", "icebeam", "energyball", "protect", "scald", "icywind", "helpinghand"], eventPokemon: [ - {"generation": 4, "level": 5, "moves":["tailglow", "bubble", "watersport"]}, - {"generation": 4, "level": 1, "shiny": 1, "moves":["tailglow", "bubble", "watersport"]}, - {"generation": 4, "level": 50, "moves":["heartswap", "waterpulse", "whirlpool", "acidarmor"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "nature": "Impish", "moves":["aquaring", "waterpulse", "watersport", "heartswap"], "pokeball": "cherishball"}, - {"generation": 6, "level": 1, "moves":["tailglow", "bubble", "watersport", "heartswap"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["tailglow", "bubble", "watersport"], "pokeball": "cherishball"}, + {"generation": 4, "level": 5, "moves": ["tailglow", "bubble", "watersport"]}, + {"generation": 4, "level": 1, "shiny": 1, "moves": ["tailglow", "bubble", "watersport"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "moves": ["heartswap", "waterpulse", "whirlpool", "acidarmor"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "nature": "Impish", "moves": ["aquaring", "waterpulse", "watersport", "heartswap"], "pokeball": "cherishball"}, + {"generation": 6, "level": 1, "moves": ["tailglow", "bubble", "watersport", "heartswap"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["tailglow", "bubble", "watersport"], "pokeball": "cherishball"}, + {"generation": 7, "level": 15, "moves": ["tailglow", "waterpulse", "aquaring", "heartswap"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, darkrai: { randomBattleMoves: ["hypnosis", "darkpulse", "focusblast", "nastyplot", "substitute", "sludgebomb"], randomDoubleBattleMoves: ["darkpulse", "focusblast", "nastyplot", "substitute", "snarl", "icebeam", "protect"], eventPokemon: [ - {"generation": 4, "level": 40, "shiny": 1, "moves":["quickattack", "hypnosis", "pursuit", "nightmare"]}, - {"generation": 4, "level": 50, "moves":["roaroftime", "spacialrend", "nightmare", "hypnosis"], "pokeball": "cherishball"}, - {"generation": 4, "level": 50, "moves":["darkvoid", "darkpulse", "shadowball", "doubleteam"]}, - {"generation": 4, "level": 50, "shiny": 1, "moves":["hypnosis", "feintattack", "nightmare", "doubleteam"]}, - {"generation": 5, "level": 50, "moves":["darkvoid", "ominouswind", "feintattack", "nightmare"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "moves":["darkvoid", "darkpulse", "phantomforce", "dreameater"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["darkvoid", "ominouswind", "nightmare", "feintattack"], "pokeball": "cherishball"}, + {"generation": 4, "level": 40, "shiny": 1, "moves": ["quickattack", "hypnosis", "pursuit", "nightmare"]}, + {"generation": 4, "level": 50, "moves": ["roaroftime", "spacialrend", "nightmare", "hypnosis"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["darkvoid", "darkpulse", "shadowball", "doubleteam"], "pokeball": "pokeball"}, + {"generation": 4, "level": 50, "shiny": 1, "moves": ["hypnosis", "feintattack", "nightmare", "doubleteam"]}, + {"generation": 5, "level": 50, "moves": ["darkvoid", "ominouswind", "feintattack", "nightmare"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["darkvoid", "darkpulse", "phantomforce", "dreameater"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["darkvoid", "ominouswind", "nightmare", "feintattack"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "moves": ["darkvoid", "feintattack", "nightmare", "ominouswind"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, shaymin: { randomBattleMoves: ["seedflare", "earthpower", "airslash", "psychic", "rest", "substitute", "leechseed"], randomDoubleBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "rest", "substitute", "leechseed", "tailwind", "protect"], eventPokemon: [ - {"generation": 4, "level": 50, "moves":["seedflare", "aromatherapy", "substitute", "energyball"], "pokeball": "cherishball"}, - {"generation": 4, "level": 30, "shiny": 1, "moves":["growth", "magicalleaf", "leechseed", "synthesis"]}, - {"generation": 5, "level": 50, "moves":["seedflare", "leechseed", "synthesis", "sweetscent"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "moves":["growth", "magicalleaf", "seedflare", "airslash"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["seedflare", "aromatherapy", "substitute", "energyball"], "pokeball": "cherishball"}, + {"generation": 4, "level": 50, "moves": ["seedflare", "aromatherapy", "substitute", "energyball"], "pokeball": "cherishball"}, + {"generation": 4, "level": 30, "shiny": 1, "moves": ["growth", "magicalleaf", "leechseed", "synthesis"], "pokeball": "pokeball"}, + {"generation": 5, "level": 50, "moves": ["seedflare", "leechseed", "synthesis", "sweetscent"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "moves": ["growth", "magicalleaf", "seedflare", "airslash"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["seedflare", "aromatherapy", "substitute", "energyball"], "pokeball": "cherishball"}, + {"generation": 7, "level": 20, "moves": ["return", "growth", "seedflare", "celebrate"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "RU", + doublesTier: "(DUU)", }, shayminsky: { randomBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "substitute", "leechseed", "healingwish"], randomDoubleBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "rest", "substitute", "leechseed", "tailwind", "protect", "hiddenpowerice"], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, arceus: { randomBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover"], randomDoubleBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover", "protect"], eventPokemon: [ - {"generation": 4, "level": 100, "moves":["judgment", "roaroftime", "spacialrend", "shadowforce"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "moves":["recover", "hyperbeam", "perishsong", "judgment"]}, - {"generation": 6, "level": 100, "shiny": 1, "moves":["judgment", "blastburn", "hydrocannon", "earthpower"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["judgment", "perishsong", "hyperbeam", "recover"], "pokeball": "cherishball"}, + {"generation": 4, "level": 100, "moves": ["judgment", "roaroftime", "spacialrend", "shadowforce"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "moves": ["recover", "hyperbeam", "perishsong", "judgment"]}, + {"generation": 6, "level": 100, "shiny": 1, "moves": ["judgment", "blastburn", "hydrocannon", "earthpower"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["judgment", "perishsong", "hyperbeam", "recover"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["judgment", "extremespeed", "recover", "hyperbeam"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, arceusbug: { randomBattleMoves: ["swordsdance", "xscissor", "stoneedge", "recover", "earthquake", "ironhead"], @@ -4258,49 +5543,49 @@ exports.BattleFormatsData = { requiredItems: ["Insect Plate", "Buginium Z"], }, arceusdark: { - randomBattleMoves: ["calmmind", "judgment", "recover", "fireblast", "thunderbolt"], + randomBattleMoves: ["calmmind", "judgment", "recover", "fireblast", "toxic"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "focusblast", "safeguard", "snarl", "willowisp", "protect"], eventOnly: true, requiredItems: ["Dread Plate", "Darkinium Z"], }, arceusdragon: { - randomBattleMoves: ["swordsdance", "outrage", "extremespeed", "earthquake", "recover", "calmmind", "judgment", "fireblast", "earthpower"], + randomBattleMoves: ["swordsdance", "outrage", "extremespeed", "earthquake", "recover", "judgment", "fireblast", "willowisp", "defog"], randomDoubleBattleMoves: ["swordsdance", "dragonclaw", "extremespeed", "earthquake", "recover", "protect"], eventOnly: true, requiredItems: ["Draco Plate", "Dragonium Z"], }, arceuselectric: { - randomBattleMoves: ["calmmind", "judgment", "recover", "icebeam", "grassknot", "fireblast", "willowisp"], + randomBattleMoves: ["calmmind", "judgment", "recover", "icebeam", "earthpower"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "icebeam", "protect"], eventOnly: true, requiredItems: ["Zap Plate", "Electrium Z"], }, arceusfairy: { - randomBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "defog", "thunderbolt", "toxic", "fireblast"], + randomBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "defog", "earthpower", "toxic"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "protect", "earthpower", "thunderbolt"], eventOnly: true, requiredItems: ["Pixie Plate", "Fairium Z"], }, arceusfighting: { - randomBattleMoves: ["calmmind", "judgment", "stoneedge", "shadowball", "recover", "toxic", "defog"], + randomBattleMoves: ["calmmind", "judgment", "stoneedge", "shadowball", "recover", "roar", "icebeam"], randomDoubleBattleMoves: ["calmmind", "judgment", "icebeam", "shadowball", "recover", "willowisp", "protect"], eventOnly: true, requiredItems: ["Fist Plate", "Fightinium Z"], }, arceusfire: { - randomBattleMoves: ["calmmind", "judgment", "grassknot", "thunderbolt", "icebeam", "recover"], + randomBattleMoves: ["calmmind", "fireblast", "roar", "thunderbolt", "icebeam", "recover"], randomDoubleBattleMoves: ["calmmind", "judgment", "thunderbolt", "recover", "heatwave", "protect", "willowisp"], eventOnly: true, requiredItems: ["Flame Plate", "Firium Z"], }, arceusflying: { - randomBattleMoves: ["calmmind", "judgment", "earthpower", "fireblast", "substitute", "recover"], + randomBattleMoves: ["calmmind", "judgment", "earthpower", "fireblast", "toxic", "recover"], randomDoubleBattleMoves: ["calmmind", "judgment", "safeguard", "recover", "substitute", "tailwind", "protect"], eventOnly: true, requiredItems: ["Sky Plate", "Flyinium Z"], }, arceusghost: { - randomBattleMoves: ["calmmind", "judgment", "focusblast", "recover", "swordsdance", "shadowforce", "brickbreak", "willowisp", "roar", "defog"], + randomBattleMoves: ["swordsdance", "shadowforce", "shadowclaw", "brickbreak", "extremespeed", "recover", "judgment", "toxic", "defog"], randomDoubleBattleMoves: ["calmmind", "judgment", "focusblast", "recover", "swordsdance", "shadowforce", "brickbreak", "willowisp", "protect"], eventOnly: true, requiredItems: ["Spooky Plate", "Ghostium Z"], @@ -4312,7 +5597,7 @@ exports.BattleFormatsData = { requiredItems: ["Meadow Plate", "Grassium Z"], }, arceusground: { - randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "extremespeed", "icebeam"], + randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "judgment", "icebeam", "toxic", "stealthrock"], randomDoubleBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "calmmind", "judgment", "icebeam", "rockslide", "protect"], eventOnly: true, requiredItems: ["Earth Plate", "Groundium Z"], @@ -4324,31 +5609,31 @@ exports.BattleFormatsData = { requiredItems: ["Icicle Plate", "Icium Z"], }, arceuspoison: { - randomBattleMoves: ["calmmind", "sludgebomb", "fireblast", "recover", "willowisp", "defog", "thunderwave"], + randomBattleMoves: ["calmmind", "sludgebomb", "fireblast", "recover", "icebeam", "defog"], randomDoubleBattleMoves: ["calmmind", "judgment", "sludgebomb", "heatwave", "recover", "willowisp", "protect", "earthpower"], eventOnly: true, requiredItems: ["Toxic Plate", "Poisonium Z"], }, arceuspsychic: { - randomBattleMoves: ["judgment", "calmmind", "focusblast", "recover", "defog", "thunderbolt", "willowisp"], + randomBattleMoves: ["judgment", "calmmind", "fireblast", "recover", "icebeam", "toxic"], randomDoubleBattleMoves: ["calmmind", "psyshock", "focusblast", "recover", "willowisp", "judgment", "protect"], eventOnly: true, requiredItems: ["Mind Plate", "Psychium Z"], }, arceusrock: { - randomBattleMoves: ["recover", "swordsdance", "earthquake", "stoneedge", "extremespeed"], + randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "judgment", "willowisp", "stealthrock"], randomDoubleBattleMoves: ["swordsdance", "stoneedge", "recover", "rockslide", "earthquake", "protect"], eventOnly: true, requiredItems: ["Stone Plate", "Rockium Z"], }, arceussteel: { - randomBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "thunderbolt", "swordsdance", "ironhead", "earthquake", "stoneedge"], + randomBattleMoves: ["judgment", "recover", "willowisp", "defog", "roar", "swordsdance", "ironhead", "earthquake", "stoneedge"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "protect", "willowisp"], eventOnly: true, requiredItems: ["Iron Plate", "Steelium Z"], }, arceuswater: { - randomBattleMoves: ["recover", "calmmind", "judgment", "substitute", "willowisp", "thunderbolt"], + randomBattleMoves: ["recover", "calmmind", "judgment", "icebeam", "toxic", "defog"], randomDoubleBattleMoves: ["recover", "calmmind", "judgment", "icebeam", "fireblast", "icywind", "surf", "protect"], eventOnly: true, requiredItems: ["Splash Plate", "Waterium Z"], @@ -4357,21 +5642,22 @@ exports.BattleFormatsData = { randomBattleMoves: ["vcreate", "boltstrike", "uturn", "zenheadbutt", "grassknot", "focusblast", "blueflare"], randomDoubleBattleMoves: ["vcreate", "boltstrike", "uturn", "psychic", "focusblast", "blueflare", "protect"], eventPokemon: [ - {"generation": 5, "level": 15, "moves":["quickattack", "incinerate", "confusion", "endure"]}, - {"generation": 5, "level": 50, "moves":["vcreate", "fusionflare", "fusionbolt", "searingshot"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "moves":["vcreate", "blueflare", "boltstrike", "glaciate"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "moves":["confusion", "quickattack", "vcreate", "searingshot"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["incinerate", "quickattack", "endure", "confusion"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "moves":["quickattack", "swagger", "vcreate"], "pokeball": "cherishball"}, - {"generation": 7, "level": 15, "moves":["vcreate", "reversal", "storedpower", "celebrate"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "moves": ["quickattack", "incinerate", "confusion", "endure"]}, + {"generation": 5, "level": 50, "moves": ["vcreate", "fusionflare", "fusionbolt", "searingshot"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "moves": ["vcreate", "blueflare", "boltstrike", "glaciate"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "moves": ["confusion", "quickattack", "vcreate", "searingshot"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["incinerate", "quickattack", "endure", "confusion"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "moves": ["quickattack", "swagger", "vcreate"], "pokeball": "cherishball"}, + {"generation": 7, "level": 15, "moves": ["vcreate", "reversal", "storedpower", "celebrate"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "BL", + tier: "OU", + doublesTier: "DOU", }, snivy: { randomBattleMoves: ["leafstorm", "hiddenpowerfire", "substitute", "leechseed", "hiddenpowerice", "gigadrain"], eventPokemon: [ - {"generation": 5, "level": 5, "gender": "M", "nature": "Hardy", "isHidden": false, "moves":["growth", "synthesis", "energyball", "aromatherapy"], "pokeball": "cherishball"}, + {"generation": 5, "level": 5, "gender": "M", "nature": "Hardy", "isHidden": false, "moves": ["growth", "synthesis", "energyball", "aromatherapy"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -4383,10 +5669,11 @@ exports.BattleFormatsData = { randomBattleMoves: ["leafstorm", "dragonpulse", "hiddenpowerfire", "substitute", "leechseed", "glare"], randomDoubleBattleMoves: ["leafstorm", "hiddenpowerfire", "substitute", "taunt", "dragonpulse", "protect"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["leafstorm", "substitute", "gigadrain", "leechseed"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["leafstorm", "holdback", "wringout", "gigadrain"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["leafstorm", "substitute", "gigadrain", "leechseed"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["leafstorm", "holdback", "wringout", "gigadrain"], "pokeball": "cherishball"}, ], - tier: "BL", + tier: "OU", + doublesTier: "(DUU)", }, tepig: { randomBattleMoves: ["flamecharge", "flareblitz", "wildcharge", "superpower", "headsmash"], @@ -4397,13 +5684,14 @@ exports.BattleFormatsData = { tier: "NFE", }, emboar: { - randomBattleMoves: ["flareblitz", "superpower", "wildcharge", "stoneedge", "fireblast", "grassknot", "suckerpunch"], + randomBattleMoves: ["flareblitz", "superpower", "wildcharge", "headsmash", "fireblast", "grassknot", "suckerpunch"], randomDoubleBattleMoves: ["flareblitz", "superpower", "flamecharge", "wildcharge", "headsmash", "protect", "heatwave", "rockslide"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["flareblitz", "hammerarm", "wildcharge", "headsmash"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["flareblitz", "holdback", "headsmash", "takedown"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["flareblitz", "hammerarm", "wildcharge", "headsmash"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["flareblitz", "holdback", "headsmash", "takedown"], "pokeball": "cherishball"}, ], - tier: "NU", + tier: "RU", + doublesTier: "(DUU)", }, oshawott: { randomBattleMoves: ["swordsdance", "waterfall", "aquajet", "xscissor"], @@ -4414,22 +5702,24 @@ exports.BattleFormatsData = { tier: "NFE", }, samurott: { - randomBattleMoves: ["swordsdance", "waterfall", "aquajet", "megahorn", "superpower", "hydropump", "icebeam", "grassknot"], + randomBattleMoves: ["swordsdance", "liquidation", "aquajet", "megahorn", "sacredsword", "hydropump", "icebeam", "grassknot"], randomDoubleBattleMoves: ["hydropump", "aquajet", "icebeam", "scald", "hiddenpowergrass", "taunt", "helpinghand", "protect"], eventPokemon: [ - {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves":["hydropump", "icebeam", "megahorn", "superpower"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "isHidden": true, "moves":["razorshell", "holdback", "confide", "hydropump"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "gender": "M", "isHidden": false, "moves": ["hydropump", "icebeam", "megahorn", "superpower"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "isHidden": true, "moves": ["razorshell", "holdback", "confide", "hydropump"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "PUBL", + doublesTier: "(DUU)", }, patrat: { - randomBattleMoves: ["swordsdance", "batonpass", "substitute", "hypnosis", "return", "superfang"], + randomBattleMoves: ["swordsdance", "substitute", "hypnosis", "return", "superfang"], tier: "LC", }, watchog: { - randomBattleMoves: ["hypnosis", "substitute", "batonpass", "superfang", "swordsdance", "return", "knockoff"], + randomBattleMoves: ["hypnosis", "substitute", "superfang", "swordsdance", "return", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "knockoff", "substitute", "hypnosis", "return", "superfang", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, lillipup: { randomBattleMoves: ["return", "wildcharge", "firefang", "crunch", "icefang"], @@ -4437,12 +5727,19 @@ exports.BattleFormatsData = { }, herdier: { randomBattleMoves: ["return", "wildcharge", "firefang", "crunch", "icefang"], + encounters: [ + {"generation": 5, "level": 20, "isHidden": true}, + ], tier: "NFE", }, stoutland: { randomBattleMoves: ["return", "crunch", "wildcharge", "superpower", "icefang"], randomDoubleBattleMoves: ["return", "wildcharge", "superpower", "crunch", "icefang", "protect"], + encounters: [ + {"generation": 5, "level": 23, "isHidden": false}, + ], tier: "PU", + doublesTier: "(DUU)", }, purrloin: { randomBattleMoves: ["encore", "taunt", "uturn", "knockoff", "thunderwave"], @@ -4452,28 +5749,30 @@ exports.BattleFormatsData = { randomBattleMoves: ["knockoff", "encore", "suckerpunch", "thunderwave", "uturn", "substitute", "nastyplot", "darkpulse", "copycat"], randomDoubleBattleMoves: ["encore", "thunderwave", "substitute", "knockoff", "playrough", "uturn", "suckerpunch", "fakeout", "protect"], eventPokemon: [ - {"generation": 5, "level": 20, "gender": "F", "nature": "Jolly", "isHidden": true, "moves":["fakeout", "foulplay", "encore", "swagger"]}, + {"generation": 5, "level": 20, "gender": "F", "nature": "Jolly", "isHidden": true, "moves": ["fakeout", "foulplay", "encore", "swagger"]}, ], tier: "PU", + doublesTier: "(DUU)", }, pansage: { randomBattleMoves: ["leafstorm", "hiddenpowerfire", "hiddenpowerice", "gigadrain", "nastyplot", "substitute", "leechseed"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": 1, "gender": "M", "nature": "Brave", "ivs": {"spa": 31}, "isHidden": false, "moves":["bulletseed", "bite", "solarbeam", "dig"]}, - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["leer", "lick", "vinewhip", "leafstorm"]}, - {"generation": 5, "level": 30, "gender": "M", "nature": "Serious", "isHidden": false, "moves":["seedbomb", "solarbeam", "rocktomb", "dig"], "pokeball": "cherishball"}, + {"generation": 5, "level": 1, "shiny": 1, "gender": "M", "nature": "Brave", "ivs": {"spa": 31}, "isHidden": false, "moves": ["bulletseed", "bite", "solarbeam", "dig"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["leer", "lick", "vinewhip", "leafstorm"]}, + {"generation": 5, "level": 30, "gender": "M", "nature": "Serious", "isHidden": false, "moves": ["seedbomb", "solarbeam", "rocktomb", "dig"], "pokeball": "cherishball"}, ], tier: "LC", }, simisage: { randomBattleMoves: ["nastyplot", "gigadrain", "focusblast", "hiddenpowerice", "substitute", "leafstorm", "knockoff", "superpower"], - randomDoubleBattleMoves: ["nastyplot", "leafstorm", "hiddenpowerfire", "hiddenpowerice", "gigadrain", "focusblast", "substitute", "taunt", "synthesis", "helpinghand", "protect"], - tier: "PU", + randomDoubleBattleMoves: ["nastyplot", "leafstorm", "hiddenpowerfire", "hiddenpowerice", "gigadrain", "focusblast", "substitute", "taunt", "synthesis", "helpinghand", "spikyshield"], + tier: "(PU)", + doublesTier: "(DUU)", }, pansear: { randomBattleMoves: ["nastyplot", "fireblast", "hiddenpowerelectric", "hiddenpowerground", "sunnyday", "solarbeam", "overheat"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["leer", "lick", "incinerate", "heatwave"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["leer", "lick", "incinerate", "heatwave"]}, ], tier: "LC", }, @@ -4481,38 +5780,41 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "nastyplot", "fireblast", "focusblast", "grassknot", "hiddenpowerrock"], randomDoubleBattleMoves: ["nastyplot", "fireblast", "focusblast", "grassknot", "hiddenpowerground", "substitute", "heatwave", "taunt", "protect"], eventPokemon: [ - {"generation": 6, "level": 5, "perfectIVs": 2, "isHidden": false, "moves":["workup", "honeclaws", "poweruppunch", "gigaimpact"], "pokeball": "cherishball"}, + {"generation": 6, "level": 5, "perfectIVs": 2, "isHidden": false, "moves": ["workup", "honeclaws", "poweruppunch", "gigaimpact"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, panpour: { randomBattleMoves: ["nastyplot", "hydropump", "hiddenpowergrass", "substitute", "surf", "icebeam"], eventPokemon: [ - {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves":["leer", "lick", "watergun", "hydropump"]}, + {"generation": 5, "level": 10, "gender": "M", "isHidden": true, "moves": ["leer", "lick", "watergun", "hydropump"]}, ], tier: "LC", }, simipour: { randomBattleMoves: ["substitute", "nastyplot", "hydropump", "icebeam", "focusblast"], randomDoubleBattleMoves: ["nastyplot", "hydropump", "icebeam", "substitute", "surf", "taunt", "helpinghand", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, munna: { - randomBattleMoves: ["psychic", "hiddenpowerfighting", "hypnosis", "calmmind", "moonlight", "thunderwave", "batonpass", "psyshock", "healbell", "signalbeam"], + randomBattleMoves: ["psychic", "hiddenpowerfighting", "hypnosis", "calmmind", "moonlight", "thunderwave", "psyshock", "healbell", "signalbeam"], tier: "LC", }, musharna: { - randomBattleMoves: ["calmmind", "psychic", "psyshock", "signalbeam", "batonpass", "moonlight", "healbell", "thunderwave"], + randomBattleMoves: ["calmmind", "psychic", "psyshock", "signalbeam", "moonlight", "healbell", "thunderwave"], randomDoubleBattleMoves: ["trickroom", "thunderwave", "moonlight", "psychic", "hiddenpowerfighting", "helpinghand", "psyshock", "hypnosis", "signalbeam", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "isHidden": true, "moves":["defensecurl", "luckychant", "psybeam", "hypnosis"]}, + {"generation": 5, "level": 50, "isHidden": true, "moves": ["defensecurl", "luckychant", "psybeam", "hypnosis"]}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pidove: { randomBattleMoves: ["pluck", "uturn", "return", "detect", "roost", "wish"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": 1, "gender": "F", "nature": "Hardy", "ivs": {"atk": 31}, "isHidden": false, "abilities":["superluck"], "moves":["gust", "quickattack", "aircutter"]}, + {"generation": 5, "level": 1, "shiny": 1, "gender": "F", "nature": "Hardy", "ivs": {"atk": 31}, "isHidden": false, "abilities": ["superluck"], "moves": ["gust", "quickattack", "aircutter"], "pokeball": "pokeball"}, ], tier: "LC", }, @@ -4523,7 +5825,11 @@ exports.BattleFormatsData = { unfezant: { randomBattleMoves: ["return", "pluck", "hypnosis", "tailwind", "uturn", "roost", "nightslash"], randomDoubleBattleMoves: ["pluck", "uturn", "return", "protect", "tailwind", "taunt", "roost", "nightslash"], - tier: "PU", + encounters: [ + {"generation": 5, "level": 22, "isHidden": false}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, blitzle: { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "wildcharge", "mefirst"], @@ -4532,7 +5838,8 @@ exports.BattleFormatsData = { zebstrika: { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "overheat", "wildcharge", "thunderbolt"], randomDoubleBattleMoves: ["voltswitch", "hiddenpowergrass", "overheat", "wildcharge", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, roggenrola: { randomBattleMoves: ["autotomize", "stoneedge", "stealthrock", "rockblast", "earthquake", "explosion"], @@ -4540,12 +5847,16 @@ exports.BattleFormatsData = { }, boldore: { randomBattleMoves: ["autotomize", "stoneedge", "stealthrock", "rockblast", "earthquake", "explosion"], + encounters: [ + {"generation": 5, "level": 24, "isHidden": false}, + ], tier: "NFE", }, gigalith: { randomBattleMoves: ["stealthrock", "rockblast", "earthquake", "explosion", "stoneedge", "superpower"], randomDoubleBattleMoves: ["stealthrock", "rockslide", "earthquake", "explosion", "stoneedge", "autotomize", "superpower", "wideguard", "protect"], - tier: "RU", + tier: "NUBL", + doublesTier: "(DUU)", }, woobat: { randomBattleMoves: ["calmmind", "psychic", "airslash", "gigadrain", "roost", "heatwave", "storedpower"], @@ -4554,7 +5865,8 @@ exports.BattleFormatsData = { swoobat: { randomBattleMoves: ["substitute", "calmmind", "storedpower", "heatwave", "psychic", "airslash", "roost"], randomDoubleBattleMoves: ["calmmind", "psychic", "airslash", "gigadrain", "protect", "heatwave", "tailwind"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, drilbur: { randomBattleMoves: ["swordsdance", "rapidspin", "earthquake", "rockslide", "shadowclaw", "return", "xscissor"], @@ -4563,23 +5875,30 @@ exports.BattleFormatsData = { excadrill: { randomBattleMoves: ["swordsdance", "earthquake", "ironhead", "rockslide", "rapidspin"], randomDoubleBattleMoves: ["swordsdance", "drillrun", "earthquake", "rockslide", "ironhead", "substitute", "protect"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "OU", + doublesTier: "DOU", }, audino: { randomBattleMoves: ["wish", "protect", "healbell", "toxic", "thunderwave", "reflect", "lightscreen", "doubleedge"], randomDoubleBattleMoves: ["healpulse", "protect", "healbell", "trickroom", "thunderwave", "reflect", "lightscreen", "doubleedge", "helpinghand", "hypervoice"], eventPokemon: [ - {"generation": 5, "level": 30, "gender": "F", "nature": "Calm", "isHidden": false, "abilities":["healer"], "moves":["healpulse", "helpinghand", "refresh", "doubleslap"], "pokeball": "cherishball"}, - {"generation": 5, "level": 30, "gender": "F", "nature": "Serious", "isHidden": false, "abilities":["healer"], "moves":["healpulse", "helpinghand", "refresh", "present"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "nature": "Relaxed", "isHidden": false, "abilities":["regenerator"], "moves":["trickroom", "healpulse", "simplebeam", "thunderbolt"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "gender": "F", "nature": "Calm", "isHidden": false, "abilities": ["healer"], "moves": ["healpulse", "helpinghand", "refresh", "doubleslap"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "gender": "F", "nature": "Serious", "isHidden": false, "abilities": ["healer"], "moves": ["healpulse", "helpinghand", "refresh", "present"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "gender": "F", "nature": "Jolly", "isHidden": false, "abilities": ["healer"], "moves": ["healpulse", "helpinghand", "refresh", "present"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "nature": "Relaxed", "isHidden": false, "abilities": ["regenerator"], "moves": ["trickroom", "healpulse", "simplebeam", "thunderbolt"], "pokeball": "cherishball"}, ], tier: "PU", + doublesTier: "(DUU)", }, audinomega: { randomBattleMoves: ["wish", "calmmind", "healbell", "dazzlinggleam", "hypervoice", "protect", "fireblast"], randomDoubleBattleMoves: ["healpulse", "protect", "healbell", "trickroom", "thunderwave", "hypervoice", "helpinghand", "dazzlinggleam"], requiredItem: "Audinite", - tier: "RU", + tier: "NU", + doublesTier: "(DUU)", }, timburr: { randomBattleMoves: ["machpunch", "bulkup", "drainpunch", "icepunch", "knockoff"], @@ -4587,12 +5906,14 @@ exports.BattleFormatsData = { }, gurdurr: { randomBattleMoves: ["bulkup", "machpunch", "drainpunch", "icepunch", "knockoff"], - tier: "NFE", + tier: "PU", + doublesTier: "NFE", }, conkeldurr: { randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "knockoff", "machpunch"], randomDoubleBattleMoves: ["wideguard", "machpunch", "drainpunch", "icepunch", "knockoff", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, tympole: { randomBattleMoves: ["hydropump", "surf", "sludgewave", "earthpower", "hiddenpowerelectric"], @@ -4605,17 +5926,23 @@ exports.BattleFormatsData = { seismitoad: { randomBattleMoves: ["hydropump", "scald", "sludgewave", "earthquake", "knockoff", "stealthrock", "toxic", "raindance"], randomDoubleBattleMoves: ["hydropump", "muddywater", "sludgebomb", "earthquake", "hiddenpowerelectric", "icywind", "protect"], + encounters: [ + {"generation": 5, "level": 15, "isHidden": false}, + ], tier: "NU", + doublesTier: "(DUU)", }, throh: { randomBattleMoves: ["bulkup", "circlethrow", "icepunch", "stormthrow", "rest", "sleeptalk", "knockoff"], randomDoubleBattleMoves: ["helpinghand", "circlethrow", "icepunch", "stormthrow", "wideguard", "knockoff", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, sawk: { randomBattleMoves: ["closecombat", "earthquake", "icepunch", "poisonjab", "bulkup", "knockoff"], randomDoubleBattleMoves: ["closecombat", "knockoff", "icepunch", "rockslide", "protect"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, sewaddle: { randomBattleMoves: ["calmmind", "gigadrain", "bugbuzz", "hiddenpowerfire", "hiddenpowerice", "airslash"], @@ -4623,12 +5950,19 @@ exports.BattleFormatsData = { }, swadloon: { randomBattleMoves: ["calmmind", "gigadrain", "bugbuzz", "hiddenpowerfire", "hiddenpowerice", "airslash", "stickyweb"], + encounters: [ + {"generation": 5, "level": 19, "isHidden": false}, + ], tier: "NFE", }, leavanny: { - randomBattleMoves: ["stickyweb", "swordsdance", "leafblade", "xscissor", "knockoff", "batonpass"], + randomBattleMoves: ["stickyweb", "swordsdance", "leafblade", "xscissor", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "leafblade", "xscissor", "protect", "stickyweb", "poisonjab"], - tier: "PU", + encounters: [ + {"generation": 5, "level": 20, "isHidden": true}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, venipede: { randomBattleMoves: ["toxicspikes", "infestation", "spikes", "endeavor", "protect"], @@ -4639,21 +5973,23 @@ exports.BattleFormatsData = { tier: "NFE", }, scolipede: { - randomBattleMoves: ["substitute", "spikes", "toxicspikes", "megahorn", "rockslide", "earthquake", "swordsdance", "batonpass", "poisonjab"], + randomBattleMoves: ["protect", "spikes", "toxicspikes", "megahorn", "rockslide", "earthquake", "swordsdance", "poisonjab"], randomDoubleBattleMoves: ["substitute", "protect", "megahorn", "rockslide", "poisonjab", "swordsdance", "batonpass", "aquatail", "superpower"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, cottonee: { randomBattleMoves: ["encore", "taunt", "substitute", "leechseed", "toxic", "stunspore"], tier: "LC", }, whimsicott: { - randomBattleMoves: ["encore", "taunt", "substitute", "leechseed", "uturn", "toxic", "stunspore", "memento", "tailwind", "moonblast"], - randomDoubleBattleMoves: ["encore", "taunt", "substitute", "leechseed", "uturn", "helpinghand", "stunspore", "moonblast", "tailwind", "dazzlinggleam", "gigadrain", "protect"], + randomBattleMoves: ["encore", "taunt", "leechseed", "uturn", "toxic", "stunspore", "memento", "tailwind", "moonblast", "defog"], + randomDoubleBattleMoves: ["encore", "taunt", "substitute", "leechseed", "uturn", "helpinghand", "stunspore", "moonblast", "tailwind", "dazzlinggleam", "gigadrain", "protect", "defog"], eventPokemon: [ - {"generation": 5, "level": 50, "gender": "F", "nature": "Timid", "ivs": {"spe": 31}, "isHidden": false, "abilities":["prankster"], "moves":["swagger", "gigadrain", "beatup", "helpinghand"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "F", "nature": "Timid", "ivs": {"spe": 31}, "isHidden": false, "abilities": ["prankster"], "moves": ["swagger", "gigadrain", "beatup", "helpinghand"], "pokeball": "cherishball"}, ], tier: "NU", + doublesTier: "DOU", }, petilil: { randomBattleMoves: ["sunnyday", "sleeppowder", "solarbeam", "hiddenpowerfire", "hiddenpowerice", "healingwish"], @@ -4663,16 +5999,19 @@ exports.BattleFormatsData = { randomBattleMoves: ["sleeppowder", "quiverdance", "petaldance", "gigadrain", "hiddenpowerfire", "hiddenpowerrock"], randomDoubleBattleMoves: ["quiverdance", "gigadrain", "sleeppowder", "hiddenpowerice", "hiddenpowerfire", "hiddenpowerrock", "petaldance", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, basculin: { - randomBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "headsmash"], - randomDoubleBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "doubleedge", "protect"], - tier: "PU", + randomBattleMoves: ["liquidation", "aquajet", "superpower", "crunch", "headsmash"], + randomDoubleBattleMoves: ["liquidation", "aquajet", "superpower", "crunch", "doubleedge", "protect"], + tier: "(PU)", + doublesTier: "(DUU)", }, basculinbluestriped: { - randomBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "headsmash"], - randomDoubleBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "doubleedge", "protect"], - tier: "PU", + randomBattleMoves: ["liquidation", "aquajet", "superpower", "crunch", "headsmash"], + randomDoubleBattleMoves: ["liquidation", "aquajet", "superpower", "crunch", "doubleedge", "protect"], + tier: "(PU)", + doublesTier: "(DUU)", }, sandile: { randomBattleMoves: ["earthquake", "stoneedge", "pursuit", "crunch"], @@ -4686,6 +6025,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "stoneedge", "pursuit", "knockoff", "stealthrock", "superpower"], randomDoubleBattleMoves: ["earthquake", "stoneedge", "protect", "knockoff", "superpower"], tier: "UU", + doublesTier: "DUU", }, darumaka: { randomBattleMoves: ["uturn", "flareblitz", "firepunch", "rockslide", "superpower"], @@ -4695,10 +6035,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "flareblitz", "rockslide", "earthquake", "superpower"], randomDoubleBattleMoves: ["uturn", "flareblitz", "firepunch", "rockslide", "earthquake", "superpower", "protect"], eventPokemon: [ - {"generation": 5, "level": 35, "isHidden": true, "moves":["thrash", "bellydrum", "flareblitz", "hammerarm"]}, - {"generation": 6, "level": 35, "gender": "M", "nature": "Calm", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": true, "moves":["thrash", "bellydrum", "flareblitz", "hammerarm"], "pokeball": "cherishball"}, + {"generation": 5, "level": 35, "isHidden": true, "moves": ["thrash", "bellydrum", "flareblitz", "hammerarm"]}, + {"generation": 6, "level": 35, "gender": "M", "nature": "Calm", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": true, "moves": ["thrash", "bellydrum", "flareblitz", "hammerarm"], "pokeball": "cherishball"}, ], - tier: "UU", + encounters: [ + {"generation": 6, "level": 32, "maxEggMoves": 1}, + ], + tier: "RUBL", + doublesTier: "(DUU)", }, darmanitanzen: { requiredAbility: "Zen Mode", @@ -4707,7 +6051,8 @@ exports.BattleFormatsData = { maractus: { randomBattleMoves: ["spikes", "gigadrain", "leechseed", "hiddenpowerfire", "toxic", "suckerpunch", "spikyshield"], randomDoubleBattleMoves: ["grassyterrain", "gigadrain", "leechseed", "hiddenpowerfire", "helpinghand", "suckerpunch", "spikyshield"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, dwebble: { randomBattleMoves: ["stealthrock", "spikes", "shellsmash", "earthquake", "rockblast", "xscissor", "stoneedge"], @@ -4716,12 +6061,16 @@ exports.BattleFormatsData = { crustle: { randomBattleMoves: ["stealthrock", "spikes", "shellsmash", "earthquake", "rockblast", "xscissor", "stoneedge"], randomDoubleBattleMoves: ["protect", "shellsmash", "earthquake", "rockslide", "xscissor", "stoneedge"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 33, "maxEggMoves": 1}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, scraggy: { randomBattleMoves: ["dragondance", "icepunch", "highjumpkick", "drainpunch", "rest", "bulkup", "crunch", "knockoff"], eventPokemon: [ - {"generation": 5, "level": 1, "gender": "M", "nature": "Adamant", "isHidden": false, "abilities":["moxie"], "moves":["headbutt", "leer", "highjumpkick", "lowkick"], "pokeball": "cherishball"}, + {"generation": 5, "level": 1, "gender": "M", "nature": "Adamant", "isHidden": false, "abilities": ["moxie"], "moves": ["headbutt", "leer", "highjumpkick", "lowkick"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -4729,14 +6078,16 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "icepunch", "highjumpkick", "drainpunch", "rest", "bulkup", "knockoff"], randomDoubleBattleMoves: ["fakeout", "drainpunch", "knockoff", "icepunch", "stoneedge", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "gender": "M", "nature": "Brave", "isHidden": false, "abilities":["moxie"], "moves":["firepunch", "payback", "drainpunch", "substitute"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Brave", "isHidden": false, "abilities": ["moxie"], "moves": ["firepunch", "payback", "drainpunch", "substitute"], "pokeball": "cherishball"}, ], tier: "NU", + doublesTier: "DOU", }, sigilyph: { randomBattleMoves: ["cosmicpower", "roost", "storedpower", "psychoshift"], randomDoubleBattleMoves: ["psyshock", "heatwave", "icebeam", "airslash", "energyball", "shadowball", "tailwind", "protect"], tier: "NU", + doublesTier: "(DUU)", }, yamask: { randomBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "haze", "rest", "sleeptalk", "painsplit"], @@ -4745,31 +6096,40 @@ exports.BattleFormatsData = { cofagrigus: { randomBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "haze", "painsplit"], randomDoubleBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "protect", "painsplit"], - tier: "BL3", + eventPokemon: [ + {"generation": 7, "level": 66, "gender": "M", "moves": ["willowisp", "shadowball", "powersplit", "darkpulse"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 6, "level": 32, "maxEggMoves": 1}, + ], + tier: "NUBL", + doublesTier: "DUU", }, tirtouga: { - randomBattleMoves: ["shellsmash", "aquajet", "waterfall", "stoneedge", "earthquake", "stealthrock"], + randomBattleMoves: ["shellsmash", "aquajet", "liquidation", "stoneedge", "earthquake", "stealthrock"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities":["sturdy"], "moves":["bite", "protect", "aquajet", "bodyslam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "isHidden": false, "abilities": ["sturdy"], "moves": ["bite", "protect", "aquajet", "bodyslam"], "pokeball": "cherishball"}, ], tier: "LC", }, carracosta: { randomBattleMoves: ["shellsmash", "aquajet", "liquidation", "stoneedge", "earthquake", "stealthrock"], - randomDoubleBattleMoves: ["shellsmash", "aquajet", "waterfall", "stoneedge", "earthquake", "protect", "wideguard", "rockslide"], + randomDoubleBattleMoves: ["shellsmash", "aquajet", "liquidation", "stoneedge", "earthquake", "protect", "wideguard", "rockslide"], tier: "PU", + doublesTier: "(DUU)", }, archen: { randomBattleMoves: ["stoneedge", "rockslide", "earthquake", "uturn", "pluck", "headsmash"], eventPokemon: [ - {"generation": 5, "level": 15, "gender": "M", "moves":["headsmash", "wingattack", "doubleteam", "scaryface"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "gender": "M", "moves": ["headsmash", "wingattack", "doubleteam", "scaryface"], "pokeball": "cherishball"}, ], tier: "LC", }, archeops: { randomBattleMoves: ["headsmash", "acrobatics", "stoneedge", "earthquake", "aquatail", "uturn", "tailwind"], randomDoubleBattleMoves: ["stoneedge", "rockslide", "earthquake", "uturn", "acrobatics", "tailwind", "taunt", "protect"], - tier: "NU", + tier: "PUBL", + doublesTier: "(DUU)", }, trubbish: { randomBattleMoves: ["clearsmog", "toxicspikes", "spikes", "gunkshot", "painsplit", "toxic"], @@ -4778,7 +6138,13 @@ exports.BattleFormatsData = { garbodor: { randomBattleMoves: ["spikes", "toxicspikes", "gunkshot", "haze", "painsplit", "toxic", "drainpunch"], randomDoubleBattleMoves: ["protect", "painsplit", "gunkshot", "seedbomb", "drainpunch", "explosion", "rockblast"], + encounters: [ + {"generation": 5, "level": 31, "isHidden": false}, + {"generation": 6, "level": 30}, + {"generation": 7, "level": 24}, + ], tier: "NU", + doublesTier: "(DUU)", }, zorua: { randomBattleMoves: ["suckerpunch", "extrasensory", "darkpulse", "hiddenpowerfighting", "uturn", "knockoff"], @@ -4788,10 +6154,15 @@ exports.BattleFormatsData = { randomBattleMoves: ["suckerpunch", "darkpulse", "focusblast", "flamethrower", "uturn", "nastyplot", "knockoff", "trick", "sludgebomb"], randomDoubleBattleMoves: ["suckerpunch", "darkpulse", "focusblast", "flamethrower", "uturn", "nastyplot", "knockoff", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "gender": "M", "nature": "Quirky", "moves":["agility", "embargo", "punishment", "snarl"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "moves":["sludgebomb", "darkpulse", "flamethrower", "suckerpunch"], "pokeball": "ultraball"}, + {"generation": 5, "level": 50, "gender": "M", "nature": "Quirky", "moves": ["agility", "embargo", "punishment", "snarl"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["sludgebomb", "darkpulse", "flamethrower", "suckerpunch"], "pokeball": "ultraball"}, + {"generation": 6, "level": 45, "gender": "M", "nature": "Naughty", "moves": ["scaryface", "furyswipes", "nastyplot", "punishment"], "pokeball": "cherishball"}, ], - tier: "RU", + encounters: [ + {"generation": 5, "level": 25, "isHidden": false}, + ], + tier: "RUBL", + doublesTier: "(DUU)", }, minccino: { randomBattleMoves: ["return", "tailslap", "wakeupslap", "uturn", "aquatail"], @@ -4801,6 +6172,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["tailslap", "aquatail", "uturn", "knockoff", "bulletseed", "rockblast"], randomDoubleBattleMoves: ["tailslap", "aquatail", "uturn", "knockoff", "bulletseed", "rockblast", "protect"], tier: "NU", + doublesTier: "(DUU)", }, gothita: { randomBattleMoves: ["psychic", "thunderbolt", "hiddenpowerfighting", "shadowball", "substitute", "calmmind", "trick", "grassknot"], @@ -4809,15 +6181,22 @@ exports.BattleFormatsData = { gothorita: { randomBattleMoves: ["psychic", "psyshock", "thunderbolt", "hiddenpowerfighting", "shadowball", "substitute", "calmmind", "trick", "grassknot"], eventPokemon: [ - {"generation": 5, "level": 32, "gender": "M", "isHidden": true, "moves":["psyshock", "flatter", "futuresight", "mirrorcoat"]}, - {"generation": 5, "level": 32, "gender": "M", "isHidden": true, "moves":["psyshock", "flatter", "futuresight", "imprison"]}, + {"generation": 5, "level": 32, "gender": "M", "isHidden": true, "moves": ["psyshock", "flatter", "futuresight", "mirrorcoat"]}, + {"generation": 5, "level": 32, "gender": "M", "isHidden": true, "moves": ["psyshock", "flatter", "futuresight", "imprison"]}, + ], + encounters: [ + {"generation": 5, "level": 31, "isHidden": false}, ], tier: "NFE", }, gothitelle: { randomBattleMoves: ["psychic", "thunderbolt", "shadowball", "hiddenpowerfire", "hiddenpowerfighting", "substitute", "calmmind", "trick", "psyshock"], randomDoubleBattleMoves: ["psychic", "thunderbolt", "shadowball", "hiddenpowerfighting", "reflect", "lightscreen", "psyshock", "energyball", "trickroom", "taunt", "healpulse", "protect"], - tier: "PU", + encounters: [ + {"generation": 5, "level": 34, "isHidden": false}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, solosis: { randomBattleMoves: ["calmmind", "recover", "psychic", "hiddenpowerfighting", "shadowball", "trickroom", "psyshock"], @@ -4825,21 +6204,32 @@ exports.BattleFormatsData = { }, duosion: { randomBattleMoves: ["calmmind", "recover", "psychic", "hiddenpowerfighting", "shadowball", "trickroom", "psyshock"], + encounters: [ + {"generation": 5, "level": 31, "isHidden": false}, + ], tier: "NFE", }, reuniclus: { randomBattleMoves: ["calmmind", "recover", "psychic", "focusblast", "shadowball", "trickroom", "psyshock"], randomDoubleBattleMoves: ["energyball", "helpinghand", "psychic", "focusblast", "shadowball", "trickroom", "psyshock", "hiddenpowerfire", "protect"], - tier: "BL2", + encounters: [ + {"generation": 5, "level": 34, "isHidden": false}, + ], + tier: "RUBL", + doublesTier: "(DUU)", }, ducklett: { - randomBattleMoves: ["scald", "airslash", "roost", "hurricane", "icebeam", "hiddenpowergrass", "bravebird", "defog"], + randomBattleMoves: ["scald", "airslash", "roost", "hurricane", "icebeam", "hiddenpowergrass", "bravebird", "defog", "liquidation", "aquajet"], tier: "LC", }, swanna: { - randomBattleMoves: ["airslash", "roost", "hurricane", "icebeam", "raindance", "defog", "scald"], + randomBattleMoves: ["bravebird", "roost", "hurricane", "icebeam", "raindance", "defog", "scald"], randomDoubleBattleMoves: ["airslash", "roost", "hurricane", "surf", "icebeam", "raindance", "tailwind", "scald", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, vanillite: { randomBattleMoves: ["icebeam", "explosion", "hiddenpowerelectric", "hiddenpowerfighting", "autotomize"], @@ -4852,30 +6242,36 @@ exports.BattleFormatsData = { vanilluxe: { randomBattleMoves: ["blizzard", "explosion", "hiddenpowerground", "flashcannon", "autotomize", "freezedry"], randomDoubleBattleMoves: ["blizzard", "taunt", "hiddenpowerground", "flashcannon", "autotomize", "protect", "freezedry"], - tier: "PU", + tier: "NUBL", + doublesTier: "(DUU)", }, deerling: { - randomBattleMoves: ["agility", "batonpass", "seedbomb", "jumpkick", "synthesis", "return", "thunderwave"], + randomBattleMoves: ["agility", "seedbomb", "jumpkick", "synthesis", "return", "thunderwave"], eventPokemon: [ - {"generation": 5, "level": 30, "gender": "F", "isHidden": true, "moves":["feintattack", "takedown", "jumpkick", "aromatherapy"]}, + {"generation": 5, "level": 30, "gender": "F", "isHidden": true, "moves": ["feintattack", "takedown", "jumpkick", "aromatherapy"]}, ], tier: "LC", }, sawsbuck: { - randomBattleMoves: ["swordsdance", "hornleech", "jumpkick", "return", "substitute", "batonpass"], + randomBattleMoves: ["swordsdance", "hornleech", "jumpkick", "return", "substitute"], randomDoubleBattleMoves: ["swordsdance", "hornleech", "jumpkick", "return", "substitute", "synthesis", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, emolga: { - randomBattleMoves: ["encore", "chargebeam", "batonpass", "substitute", "thunderbolt", "airslash", "roost"], + randomBattleMoves: ["encore", "chargebeam", "uturn", "thunderbolt", "airslash", "roost"], randomDoubleBattleMoves: ["helpinghand", "tailwind", "encore", "substitute", "thunderbolt", "airslash", "roost", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, karrablast: { randomBattleMoves: ["swordsdance", "megahorn", "return", "substitute"], eventPokemon: [ - {"generation": 5, "level": 30, "isHidden": false, "moves":["furyattack", "headbutt", "falseswipe", "bugbuzz"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "isHidden": false, "moves":["megahorn", "takedown", "xscissor", "flail"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["furyattack", "headbutt", "falseswipe", "bugbuzz"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "isHidden": false, "moves": ["megahorn", "takedown", "xscissor", "flail"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -4883,6 +6279,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["megahorn", "pursuit", "ironhead", "knockoff", "swordsdance", "drillrun"], randomDoubleBattleMoves: ["megahorn", "protect", "ironhead", "knockoff", "swordsdance", "drillrun"], tier: "RU", + doublesTier: "(DUU)", }, foongus: { randomBattleMoves: ["spore", "stunspore", "gigadrain", "clearsmog", "hiddenpowerfire", "synthesis", "sludgebomb"], @@ -4891,7 +6288,12 @@ exports.BattleFormatsData = { amoonguss: { randomBattleMoves: ["spore", "stunspore", "gigadrain", "clearsmog", "hiddenpowerfire", "synthesis", "sludgebomb", "foulplay"], randomDoubleBattleMoves: ["spore", "stunspore", "gigadrain", "ragepowder", "hiddenpowerfire", "synthesis", "sludgebomb", "protect"], + encounters: [ + {"generation": 5, "level": 37, "isHidden": false}, + {"generation": 5, "level": 35, "isHidden": true}, + ], tier: "UU", + doublesTier: "DOU", }, frillish: { randomBattleMoves: ["scald", "willowisp", "recover", "toxic", "shadowball", "taunt"], @@ -4901,14 +6303,19 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "willowisp", "recover", "toxic", "shadowball", "icebeam", "taunt"], randomDoubleBattleMoves: ["scald", "willowisp", "recover", "trickroom", "shadowball", "icebeam", "waterspout", "icywind", "protect"], eventPokemon: [ - {"generation": 5, "level": 40, "isHidden": true, "moves":["waterpulse", "ominouswind", "brine", "raindance"]}, + {"generation": 5, "level": 40, "isHidden": true, "moves": ["waterpulse", "ominouswind", "brine", "raindance"]}, ], - tier: "NU", + encounters: [ + {"generation": 5, "level": 5, "isHidden": false}, + ], + tier: "PU", + doublesTier: "(DUU)", }, alomomola: { randomBattleMoves: ["wish", "protect", "knockoff", "toxic", "scald"], randomDoubleBattleMoves: ["wish", "protect", "knockoff", "icywind", "scald", "helpinghand", "wideguard"], tier: "UU", + doublesTier: "(DUU)", }, joltik: { randomBattleMoves: ["thunderbolt", "bugbuzz", "hiddenpowerice", "gigadrain", "voltswitch"], @@ -4917,16 +6324,22 @@ exports.BattleFormatsData = { galvantula: { randomBattleMoves: ["thunder", "hiddenpowerice", "gigadrain", "bugbuzz", "voltswitch", "stickyweb"], randomDoubleBattleMoves: ["thunder", "hiddenpowerice", "gigadrain", "bugbuzz", "voltswitch", "stickyweb", "protect"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "RU", + doublesTier: "(DUU)", }, ferroseed: { randomBattleMoves: ["spikes", "stealthrock", "leechseed", "seedbomb", "protect", "thunderwave", "gyroball"], - tier: "LC", + tier: "NU", + doublesTier: "LC", }, ferrothorn: { - randomBattleMoves: ["spikes", "stealthrock", "leechseed", "powerwhip", "thunderwave", "protect", "knockoff", "gyroball"], - randomDoubleBattleMoves: ["gyroball", "stealthrock", "leechseed", "powerwhip", "thunderwave", "knockoff", "protect"], + randomBattleMoves: ["spikes", "stealthrock", "leechseed", "powerwhip", "protect", "knockoff", "gyroball"], + randomDoubleBattleMoves: ["gyroball", "stealthrock", "leechseed", "powerwhip", "knockoff", "protect"], tier: "OU", + doublesTier: "DOU", }, klink: { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "substitute"], @@ -4934,12 +6347,16 @@ exports.BattleFormatsData = { }, klang: { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "substitute"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "NFE", }, klinklang: { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "substitute"], randomDoubleBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "protect"], - tier: "BL4", + tier: "NU", + doublesTier: "(DUU)", }, tynamo: { randomBattleMoves: ["spark", "chargebeam", "thunderwave", "tackle"], @@ -4953,6 +6370,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "flamethrower", "uturn", "voltswitch", "acidspray", "gigadrain", "knockoff", "superpower", "aquatail"], randomDoubleBattleMoves: ["thunderbolt", "flamethrower", "uturn", "voltswitch", "knockoff", "gigadrain", "protect"], tier: "PU", + doublesTier: "(DUU)", }, elgyem: { randomBattleMoves: ["nastyplot", "psychic", "thunderbolt", "hiddenpowerfighting", "recover", "trickroom", "signalbeam"], @@ -4961,7 +6379,8 @@ exports.BattleFormatsData = { beheeyem: { randomBattleMoves: ["nastyplot", "psychic", "psyshock", "thunderbolt", "hiddenpowerfighting", "trick", "trickroom", "signalbeam"], randomDoubleBattleMoves: ["nastyplot", "psychic", "thunderbolt", "hiddenpowerfighting", "recover", "trick", "trickroom", "signalbeam", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, litwick: { randomBattleMoves: ["shadowball", "energyball", "fireblast", "hiddenpowerground", "trickroom", "substitute", "painsplit"], @@ -4969,88 +6388,108 @@ exports.BattleFormatsData = { }, lampent: { randomBattleMoves: ["calmmind", "shadowball", "energyball", "fireblast", "hiddenpowerground", "substitute", "painsplit"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "NFE", }, chandelure: { randomBattleMoves: ["calmmind", "shadowball", "energyball", "fireblast", "hiddenpowerground", "trick", "substitute", "painsplit"], randomDoubleBattleMoves: ["shadowball", "energyball", "overheat", "heatwave", "hiddenpowerice", "trick", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "gender": "F", "nature": "Modest", "ivs": {"spa": 31}, "isHidden": false, "abilities":["flashfire"], "moves":["heatwave", "shadowball", "energyball", "psychic"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "gender": "F", "nature": "Modest", "ivs": {"spa": 31}, "isHidden": false, "abilities": ["flashfire"], "moves": ["heatwave", "shadowball", "energyball", "psychic"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "DUU", }, axew: { randomBattleMoves: ["dragondance", "outrage", "dragonclaw", "swordsdance", "aquatail", "superpower", "poisonjab", "taunt", "substitute"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": 1, "gender": "M", "nature": "Naive", "ivs": {"spe": 31}, "isHidden": false, "abilities":["moldbreaker"], "moves":["scratch", "dragonrage"]}, - {"generation": 5, "level": 10, "gender": "F", "isHidden": false, "abilities":["moldbreaker"], "moves":["dragonrage", "return", "endure", "dragonclaw"], "pokeball": "cherishball"}, - {"generation": 5, "level": 30, "gender": "M", "nature": "Naive", "isHidden": false, "abilities":["rivalry"], "moves":["dragonrage", "scratch", "outrage", "gigaimpact"], "pokeball": "cherishball"}, + {"generation": 5, "level": 1, "shiny": 1, "gender": "M", "nature": "Naive", "ivs": {"spe": 31}, "isHidden": false, "abilities": ["moldbreaker"], "moves": ["scratch", "dragonrage"], "pokeball": "pokeball"}, + {"generation": 5, "level": 10, "gender": "F", "isHidden": false, "abilities": ["moldbreaker"], "moves": ["dragonrage", "return", "endure", "dragonclaw"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "gender": "M", "nature": "Naive", "isHidden": false, "abilities": ["rivalry"], "moves": ["dragonrage", "scratch", "outrage", "gigaimpact"], "pokeball": "cherishball"}, ], tier: "LC", }, fraxure: { randomBattleMoves: ["dragondance", "swordsdance", "outrage", "dragonclaw", "aquatail", "superpower", "poisonjab", "taunt", "substitute"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "NFE", }, haxorus: { randomBattleMoves: ["dragondance", "swordsdance", "outrage", "dragonclaw", "earthquake", "poisonjab", "taunt", "substitute"], randomDoubleBattleMoves: ["dragondance", "swordsdance", "protect", "dragonclaw", "earthquake", "poisonjab", "taunt", "substitute"], eventPokemon: [ - {"generation": 5, "level": 59, "gender": "F", "nature": "Naive", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "abilities":["moldbreaker"], "moves":["earthquake", "dualchop", "xscissor", "dragondance"], "pokeball": "cherishball"}, + {"generation": 5, "level": 59, "gender": "F", "nature": "Naive", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "abilities": ["moldbreaker"], "moves": ["earthquake", "dualchop", "xscissor", "dragondance"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "(DUU)", }, cubchoo: { randomBattleMoves: ["icebeam", "surf", "hiddenpowergrass", "superpower"], eventPokemon: [ - {"generation": 5, "level": 15, "isHidden": false, "moves":["powdersnow", "growl", "bide", "icywind"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "isHidden": false, "moves": ["powdersnow", "growl", "bide", "icywind"], "pokeball": "cherishball"}, ], tier: "LC", }, beartic: { randomBattleMoves: ["iciclecrash", "superpower", "nightslash", "stoneedge", "swordsdance", "aquajet"], randomDoubleBattleMoves: ["iciclecrash", "superpower", "nightslash", "stoneedge", "swordsdance", "aquajet", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, cryogonal: { randomBattleMoves: ["icebeam", "recover", "toxic", "rapidspin", "haze", "freezedry", "hiddenpowerground"], randomDoubleBattleMoves: ["icebeam", "recover", "icywind", "protect", "reflect", "freezedry", "hiddenpowerground"], tier: "NU", + doublesTier: "(DUU)", }, shelmet: { - randomBattleMoves: ["spikes", "yawn", "substitute", "acidarmor", "batonpass", "recover", "toxic", "bugbuzz", "infestation"], + randomBattleMoves: ["spikes", "yawn", "substitute", "acidarmor", "recover", "toxic", "bugbuzz", "infestation", "toxicspikes"], eventPokemon: [ - {"generation": 5, "level": 30, "isHidden": false, "moves":["strugglebug", "megadrain", "yawn", "protect"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "isHidden": false, "moves":["encore", "gigadrain", "bodyslam", "bugbuzz"], "pokeball": "cherishball"}, + {"generation": 5, "level": 30, "isHidden": false, "moves": ["strugglebug", "megadrain", "yawn", "protect"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "isHidden": false, "moves": ["encore", "gigadrain", "bodyslam", "bugbuzz"], "pokeball": "cherishball"}, ], tier: "LC", }, accelgor: { - randomBattleMoves: ["spikes", "yawn", "bugbuzz", "focusblast", "gigadrain", "hiddenpowerrock", "encore"], + randomBattleMoves: ["spikes", "yawn", "bugbuzz", "focusblast", "gigadrain", "hiddenpowerrock", "encore", "toxicspikes"], randomDoubleBattleMoves: ["protect", "yawn", "bugbuzz", "focusblast", "gigadrain", "hiddenpowerrock", "encore", "sludgebomb"], tier: "NU", + doublesTier: "(DUU)", }, stunfisk: { randomBattleMoves: ["discharge", "earthpower", "scald", "toxic", "rest", "sleeptalk", "stealthrock"], randomDoubleBattleMoves: ["discharge", "earthpower", "scald", "electroweb", "protect", "stealthrock"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, mienfoo: { - randomBattleMoves: ["uturn", "drainpunch", "stoneedge", "swordsdance", "batonpass", "highjumpkick", "fakeout", "knockoff"], + randomBattleMoves: ["uturn", "drainpunch", "stoneedge", "swordsdance", "highjumpkick", "fakeout", "knockoff"], tier: "LC", }, mienshao: { - randomBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "substitute", "swordsdance", "batonpass", "knockoff"], + randomBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "poisonjab", "swordsdance", "knockoff"], randomDoubleBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "drainpunch", "swordsdance", "wideguard", "knockoff", "feint", "protect"], - tier: "UU", + eventPokemon: [ + {"generation": 7, "level": 65, "gender": "M", "isHidden": false, "abilities": ["innerfocus"], "moves": ["fakeout", "dualchop", "highjumpkick", "uturn"], "pokeball": "cherishball"}, + ], + tier: "RUBL", + doublesTier: "DUU", }, druddigon: { randomBattleMoves: ["outrage", "earthquake", "suckerpunch", "dragonclaw", "dragontail", "substitute", "glare", "stealthrock", "firepunch", "gunkshot"], randomDoubleBattleMoves: ["superpower", "earthquake", "suckerpunch", "dragonclaw", "glare", "protect", "firepunch", "thunderpunch"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves":["leer", "scratch"]}, + {"generation": 5, "level": 1, "shiny": true, "isHidden": false, "moves": ["leer", "scratch"], "pokeball": "pokeball"}, ], tier: "NU", + doublesTier: "(DUU)", }, golett: { randomBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stealthrock", "rockpolish"], @@ -5060,26 +6499,35 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stealthrock", "rockpolish"], randomDoubleBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stoneedge", "protect", "rockpolish"], eventPokemon: [ - {"generation": 5, "level": 70, "shiny": true, "isHidden": false, "abilities":["ironfist"], "moves":["shadowpunch", "hyperbeam", "gyroball", "hammerarm"], "pokeball": "cherishball"}, + {"generation": 5, "level": 70, "shiny": true, "isHidden": false, "abilities": ["ironfist"], "moves": ["shadowpunch", "hyperbeam", "gyroball", "hammerarm"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 6, "level": 30}, ], tier: "PU", + doublesTier: "(DUU)", }, pawniard: { randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "knockoff"], tier: "LC", }, bisharp: { - randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "knockoff"], + randomBattleMoves: ["swordsdance", "knockoff", "ironhead", "suckerpunch", "lowkick"], randomDoubleBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "knockoff", "protect"], - tier: "OU", + encounters: [ + {"generation": 7, "level": 33, "isHidden": false}, + ], + tier: "UU", + doublesTier: "DUU", }, bouffalant: { randomBattleMoves: ["headcharge", "earthquake", "stoneedge", "megahorn", "swordsdance", "superpower"], randomDoubleBattleMoves: ["headcharge", "earthquake", "stoneedge", "megahorn", "swordsdance", "superpower", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31}, "isHidden": true, "moves":["headcharge", "facade", "earthquake", "rockslide"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31}, "isHidden": true, "moves": ["headcharge", "facade", "earthquake", "rockslide"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, rufflet: { randomBattleMoves: ["bravebird", "rockslide", "return", "uturn", "substitute", "bulkup", "roost"], @@ -5089,9 +6537,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["bravebird", "superpower", "return", "uturn", "substitute", "rockslide", "bulkup", "roost"], randomDoubleBattleMoves: ["bravebird", "superpower", "return", "uturn", "tailwind", "rockslide", "bulkup", "roost", "skydrop", "protect"], eventPokemon: [ - {"generation": 5, "level": 25, "gender": "M", "isHidden": true, "moves":["wingattack", "honeclaws", "scaryface", "aerialace"]}, + {"generation": 5, "level": 25, "gender": "M", "isHidden": true, "moves": ["wingattack", "honeclaws", "scaryface", "aerialace"]}, + ], + encounters: [ + {"generation": 6, "level": 45, "isHidden": false}, ], tier: "NU", + doublesTier: "(DUU)", }, vullaby: { randomBattleMoves: ["knockoff", "roost", "taunt", "whirlwind", "toxic", "defog", "uturn", "bravebird"], @@ -5101,39 +6553,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["foulplay", "knockoff", "roost", "taunt", "whirlwind", "toxic", "uturn", "bravebird", "defog"], randomDoubleBattleMoves: ["knockoff", "roost", "taunt", "tailwind", "snarl", "uturn", "bravebird", "protect"], eventPokemon: [ - {"generation": 5, "level": 25, "gender": "F", "isHidden": true, "moves":["pluck", "nastyplot", "flatter", "feintattack"]}, + {"generation": 5, "level": 25, "gender": "F", "isHidden": true, "moves": ["pluck", "nastyplot", "flatter", "feintattack"]}, ], - tier: "UU", + tier: "RU", + doublesTier: "(DUU)", }, heatmor: { randomBattleMoves: ["fireblast", "suckerpunch", "focusblast", "gigadrain", "knockoff"], randomDoubleBattleMoves: ["fireblast", "suckerpunch", "focusblast", "gigadrain", "heatwave", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, durant: { - randomBattleMoves: ["honeclaws", "ironhead", "xscissor", "stoneedge", "batonpass", "superpower"], + randomBattleMoves: ["honeclaws", "ironhead", "xscissor", "stoneedge", "superpower"], randomDoubleBattleMoves: ["honeclaws", "ironhead", "xscissor", "rockslide", "protect", "superpower"], - tier: "RU", + tier: "RUBL", + doublesTier: "(DUU)", }, deino: { randomBattleMoves: ["outrage", "crunch", "firefang", "dragontail", "thunderwave", "superpower"], eventPokemon: [ - {"generation": 5, "level": 1, "shiny": true, "moves":["tackle", "dragonrage"]}, + {"generation": 5, "level": 1, "shiny": true, "moves": ["tackle", "dragonrage"], "pokeball": "pokeball"}, ], tier: "LC", }, zweilous: { randomBattleMoves: ["outrage", "crunch", "headsmash", "dragontail", "superpower", "rest", "sleeptalk"], + encounters: [ + {"generation": 5, "level": 49}, + ], tier: "NFE", }, hydreigon: { randomBattleMoves: ["uturn", "dracometeor", "dragonpulse", "earthpower", "fireblast", "darkpulse", "roost", "flashcannon", "superpower"], randomDoubleBattleMoves: ["uturn", "dracometeor", "dragonpulse", "earthpower", "fireblast", "darkpulse", "roost", "flashcannon", "superpower", "tailwind", "protect"], eventPokemon: [ - {"generation": 5, "level": 70, "shiny": true, "gender": "M", "moves":["hypervoice", "dragonbreath", "flamethrower", "focusblast"], "pokeball": "cherishball"}, - {"generation": 6, "level": 52, "gender": "M", "perfectIVs": 2, "moves":["dragonrush", "crunch", "rockslide", "frustration"], "pokeball": "cherishball"}, + {"generation": 5, "level": 70, "shiny": true, "gender": "M", "moves": ["hypervoice", "dragonbreath", "flamethrower", "focusblast"], "pokeball": "cherishball"}, + {"generation": 6, "level": 52, "gender": "M", "perfectIVs": 2, "moves": ["dragonrush", "crunch", "rockslide", "frustration"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 6, "level": 59}, ], tier: "UU", + doublesTier: "DUU", }, larvesta: { randomBattleMoves: ["flareblitz", "uturn", "wildcharge", "zenheadbutt", "morningsun", "willowisp"], @@ -5143,172 +6605,210 @@ exports.BattleFormatsData = { randomBattleMoves: ["quiverdance", "fierydance", "fireblast", "bugbuzz", "roost", "gigadrain", "hiddenpowerice", "hiddenpowerground"], randomDoubleBattleMoves: ["quiverdance", "fierydance", "fireblast", "bugbuzz", "roost", "gigadrain", "hiddenpowerice", "heatwave", "willowisp", "ragepowder", "tailwind", "protect"], eventPokemon: [ - {"generation": 5, "level": 35, "isHidden": false, "moves":["stringshot", "leechlife", "gust", "firespin"]}, - {"generation": 5, "level": 77, "gender": "M", "nature": "Calm", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves":["bugbuzz", "overheat", "hyperbeam", "quiverdance"], "pokeball": "cherishball"}, + {"generation": 5, "level": 35, "isHidden": false, "moves": ["stringshot", "leechlife", "gust", "firespin"]}, + {"generation": 5, "level": 77, "gender": "M", "nature": "Calm", "ivs": {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30, "spe": 30}, "isHidden": false, "moves": ["bugbuzz", "overheat", "hyperbeam", "quiverdance"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 7, "level": 41}, ], tier: "OU", + doublesTier: "DOU", }, cobalion: { randomBattleMoves: ["closecombat", "ironhead", "swordsdance", "substitute", "stoneedge", "voltswitch", "hiddenpowerice", "taunt", "stealthrock"], randomDoubleBattleMoves: ["closecombat", "ironhead", "swordsdance", "substitute", "stoneedge", "thunderwave", "protect"], eventPokemon: [ - {"generation": 5, "level": 42, "shiny": 1, "moves":["helpinghand", "retaliate", "ironhead", "sacredsword"]}, - {"generation": 5, "level": 45, "shiny": 1, "moves":["helpinghand", "retaliate", "ironhead", "sacredsword"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["sacredsword", "swordsdance", "quickguard", "workup"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["retaliate", "ironhead", "sacredsword", "swordsdance"]}, + {"generation": 5, "level": 42, "shiny": 1, "moves": ["helpinghand", "retaliate", "ironhead", "sacredsword"]}, + {"generation": 5, "level": 45, "shiny": 1, "moves": ["helpinghand", "retaliate", "ironhead", "sacredsword"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["sacredsword", "swordsdance", "quickguard", "workup"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["retaliate", "ironhead", "sacredsword", "swordsdance"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["sacredsword", "swordsdance", "quickattack", "ironhead"]}, ], eventOnly: true, tier: "UU", + doublesTier: "(DUU)", }, terrakion: { randomBattleMoves: ["stoneedge", "closecombat", "swordsdance", "substitute", "stealthrock", "earthquake"], randomDoubleBattleMoves: ["stoneedge", "closecombat", "substitute", "rockslide", "earthquake", "taunt", "protect"], eventPokemon: [ - {"generation": 5, "level": 42, "shiny": 1, "moves":["helpinghand", "retaliate", "rockslide", "sacredsword"]}, - {"generation": 5, "level": 45, "shiny": 1, "moves":["helpinghand", "retaliate", "rockslide", "sacredsword"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["sacredsword", "swordsdance", "quickguard", "workup"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["retaliate", "rockslide", "sacredsword", "swordsdance"]}, + {"generation": 5, "level": 42, "shiny": 1, "moves": ["helpinghand", "retaliate", "rockslide", "sacredsword"]}, + {"generation": 5, "level": 45, "shiny": 1, "moves": ["helpinghand", "retaliate", "rockslide", "sacredsword"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["sacredsword", "swordsdance", "quickguard", "workup"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["retaliate", "rockslide", "sacredsword", "swordsdance"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["sacredsword", "swordsdance", "rockslide", "stoneedge"]}, ], eventOnly: true, tier: "UU", + doublesTier: "(DUU)", }, virizion: { randomBattleMoves: ["swordsdance", "closecombat", "leafblade", "stoneedge", "calmmind", "focusblast", "gigadrain", "hiddenpowerice", "substitute"], randomDoubleBattleMoves: ["taunt", "closecombat", "stoneedge", "leafblade", "swordsdance", "synthesis", "protect"], eventPokemon: [ - {"generation": 5, "level": 42, "shiny": 1, "moves":["helpinghand", "retaliate", "gigadrain", "sacredsword"]}, - {"generation": 5, "level": 45, "shiny": 1, "moves":["helpinghand", "retaliate", "gigadrain", "sacredsword"]}, - {"generation": 5, "level": 65, "shiny": 1, "moves":["sacredsword", "swordsdance", "quickguard", "workup"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["retaliate", "gigadrain", "sacredsword", "swordsdance"]}, + {"generation": 5, "level": 42, "shiny": 1, "moves": ["helpinghand", "retaliate", "gigadrain", "sacredsword"]}, + {"generation": 5, "level": 45, "shiny": 1, "moves": ["helpinghand", "retaliate", "gigadrain", "sacredsword"]}, + {"generation": 5, "level": 65, "shiny": 1, "moves": ["sacredsword", "swordsdance", "quickguard", "workup"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["retaliate", "gigadrain", "sacredsword", "swordsdance"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["sacredsword", "swordsdance", "gigadrain", "leafblade"]}, ], eventOnly: true, - tier: "NU", + tier: "RU", + doublesTier: "(DUU)", }, tornadus: { - randomBattleMoves: ["bulkup", "acrobatics", "knockoff", "substitute", "hurricane", "heatwave", "superpower", "uturn", "taunt", "tailwind"], + randomBattleMoves: ["bulkup", "acrobatics", "hurricane", "heatwave", "superpower", "uturn", "defog", "tailwind"], randomDoubleBattleMoves: ["hurricane", "airslash", "uturn", "superpower", "focusblast", "taunt", "substitute", "heatwave", "tailwind", "protect", "skydrop"], eventPokemon: [ - {"generation": 5, "level": 40, "shiny": 1, "isHidden": false, "moves":["revenge", "aircutter", "extrasensory", "agility"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["uproar", "astonish", "gust"], "pokeball": "dreamball"}, - {"generation": 5, "level": 70, "isHidden": false, "moves":["hurricane", "hammerarm", "airslash", "hiddenpower"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["extrasensory", "agility", "airslash", "crunch"]}, + {"generation": 5, "level": 40, "shiny": 1, "isHidden": false, "moves": ["revenge", "aircutter", "extrasensory", "agility"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["uproar", "astonish", "gust"], "pokeball": "dreamball"}, + {"generation": 5, "level": 70, "isHidden": false, "moves": ["hurricane", "hammerarm", "airslash", "hiddenpower"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["extrasensory", "agility", "airslash", "crunch"]}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["airslash", "crunch", "tailwind", "raindance"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["airslash", "crunch", "tailwind", "raindance"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["hurricane", "heatwave", "grassknot", "tailwind"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "UU", + tier: "RUBL", + doublesTier: "(DUU)", }, tornadustherian: { - randomBattleMoves: ["hurricane", "airslash", "heatwave", "knockoff", "superpower", "uturn", "taunt"], + randomBattleMoves: ["hurricane", "heatwave", "knockoff", "superpower", "uturn", "taunt"], randomDoubleBattleMoves: ["hurricane", "airslash", "focusblast", "uturn", "heatwave", "skydrop", "tailwind", "taunt", "protect"], eventOnly: true, - tier: "BL", + tier: "OU", + doublesTier: "(DUU)", }, thundurus: { randomBattleMoves: ["thunderwave", "nastyplot", "thunderbolt", "hiddenpowerice", "hiddenpowerflying", "focusblast", "substitute", "knockoff", "taunt"], randomDoubleBattleMoves: ["thunderwave", "nastyplot", "thunderbolt", "hiddenpowerice", "hiddenpowerflying", "focusblast", "substitute", "knockoff", "taunt", "protect"], eventPokemon: [ - {"generation": 5, "level": 40, "shiny": 1, "isHidden": false, "moves":["revenge", "shockwave", "healblock", "agility"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["uproar", "astonish", "thundershock"], "pokeball": "dreamball"}, - {"generation": 5, "level": 70, "isHidden": false, "moves":["thunder", "hammerarm", "focusblast", "wildcharge"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves":["healblock", "agility", "discharge", "crunch"]}, + {"generation": 5, "level": 40, "shiny": 1, "isHidden": false, "moves": ["revenge", "shockwave", "healblock", "agility"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["uproar", "astonish", "thundershock"], "pokeball": "dreamball"}, + {"generation": 5, "level": 70, "isHidden": false, "moves": ["thunder", "hammerarm", "focusblast", "wildcharge"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "isHidden": false, "moves": ["healblock", "agility", "discharge", "crunch"]}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["discharge", "crunch", "charge", "nastyplot"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["discharge", "crunch", "charge", "nastyplot"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "isHidden": false, "moves": ["thunderbolt", "focusblast", "grassknot", "nastyplot"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, thundurustherian: { randomBattleMoves: ["nastyplot", "thunderbolt", "hiddenpowerflying", "hiddenpowerice", "focusblast", "voltswitch"], randomDoubleBattleMoves: ["nastyplot", "thunderbolt", "hiddenpowerflying", "hiddenpowerice", "focusblast", "voltswitch", "protect"], eventOnly: true, - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, reshiram: { randomBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "toxic", "flamecharge", "stoneedge", "roost"], randomDoubleBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "heatwave", "flamecharge", "roost", "protect", "tailwind"], eventPokemon: [ - {"generation": 5, "level": 50, "moves":["dragonbreath", "slash", "extrasensory", "fusionflare"]}, - {"generation": 5, "level": 70, "moves":["extrasensory", "fusionflare", "dragonpulse", "imprison"]}, - {"generation": 5, "level": 100, "moves":["blueflare", "fusionflare", "mist", "dracometeor"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["dragonbreath", "slash", "extrasensory", "fusionflare"]}, + {"generation": 5, "level": 50, "moves": ["dragonbreath", "slash", "extrasensory", "fusionflare"]}, + {"generation": 5, "level": 70, "moves": ["extrasensory", "fusionflare", "dragonpulse", "imprison"]}, + {"generation": 5, "level": 100, "moves": ["blueflare", "fusionflare", "mist", "dracometeor"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["dragonbreath", "slash", "extrasensory", "fusionflare"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["slash", "extrasensory", "fusionflare", "dragonpulse"]}, + {"generation": 7, "level": 60, "moves": ["slash", "extrasensory", "fusionflare", "dragonpulse"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["fusionflare", "blueflare", "dracometeor", "earthpower"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, zekrom: { randomBattleMoves: ["boltstrike", "outrage", "dragonclaw", "dracometeor", "voltswitch", "honeclaws", "substitute", "roost"], randomDoubleBattleMoves: ["voltswitch", "protect", "dragonclaw", "boltstrike", "honeclaws", "substitute", "dracometeor", "fusionbolt", "roost", "tailwind"], eventPokemon: [ - {"generation": 5, "level": 50, "moves":["dragonbreath", "slash", "zenheadbutt", "fusionbolt"]}, - {"generation": 5, "level": 70, "moves":["zenheadbutt", "fusionbolt", "dragonclaw", "imprison"]}, - {"generation": 5, "level": 100, "moves":["boltstrike", "fusionbolt", "haze", "outrage"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["dragonbreath", "slash", "zenheadbutt", "fusionbolt"]}, + {"generation": 5, "level": 50, "moves": ["dragonbreath", "slash", "zenheadbutt", "fusionbolt"]}, + {"generation": 5, "level": 70, "moves": ["zenheadbutt", "fusionbolt", "dragonclaw", "imprison"]}, + {"generation": 5, "level": 100, "moves": ["boltstrike", "fusionbolt", "haze", "outrage"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["dragonbreath", "slash", "zenheadbutt", "fusionbolt"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["slash", "zenheadbutt", "fusionbolt", "dragonclaw"]}, + {"generation": 7, "level": 60, "moves": ["slash", "zenheadbutt", "fusionbolt", "dragonclaw"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["fusionbolt", "boltstrike", "outrage", "stoneedge"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, landorus: { randomBattleMoves: ["calmmind", "rockpolish", "earthpower", "focusblast", "psychic", "sludgewave", "stealthrock", "knockoff", "rockslide"], randomDoubleBattleMoves: ["earthpower", "focusblast", "hiddenpowerice", "psychic", "sludgebomb", "rockslide", "protect"], eventPokemon: [ - {"generation": 5, "level": 70, "shiny": 1, "isHidden": false, "moves":["rockslide", "earthquake", "sandstorm", "fissure"]}, - {"generation": 5, "level": 5, "isHidden": true, "moves":["block", "mudshot", "rocktomb"], "pokeball": "dreamball"}, - {"generation": 6, "level": 65, "shiny": 1, "isHidden": false, "moves":["extrasensory", "swordsdance", "earthpower", "rockslide"]}, - {"generation": 6, "level": 50, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 1, "spd": 31, "spe": 24}, "isHidden": false, "moves":["earthquake", "knockoff", "uturn", "rocktomb"], "pokeball": "cherishball"}, + {"generation": 5, "level": 70, "shiny": 1, "isHidden": false, "moves": ["rockslide", "earthquake", "sandstorm", "fissure"]}, + {"generation": 5, "level": 5, "isHidden": true, "moves": ["block", "mudshot", "rocktomb"], "pokeball": "dreamball"}, + {"generation": 6, "level": 65, "shiny": 1, "isHidden": false, "moves": ["extrasensory", "swordsdance", "earthpower", "rockslide"]}, + {"generation": 6, "level": 50, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31, "def": 31, "spa": 1, "spd": 31, "spe": 24}, "isHidden": false, "moves": ["earthquake", "knockoff", "uturn", "rocktomb"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "isHidden": false, "moves": ["earthpower", "rockslide", "earthquake", "sandstorm"]}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, landorustherian: { randomBattleMoves: ["swordsdance", "rockpolish", "earthquake", "stoneedge", "uturn", "superpower", "stealthrock", "fly"], randomDoubleBattleMoves: ["rockslide", "earthquake", "stoneedge", "uturn", "superpower", "knockoff", "protect"], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, kyurem: { - randomBattleMoves: ["dracometeor", "icebeam", "earthpower", "outrage", "substitute", "dragonpulse", "focusblast", "roost"], + randomBattleMoves: ["dracometeor", "icebeam", "earthpower", "outrage", "substitute", "focusblast", "roost"], randomDoubleBattleMoves: ["substitute", "icebeam", "dracometeor", "dragonpulse", "focusblast", "glaciate", "earthpower", "roost", "protect"], eventPokemon: [ - {"generation": 5, "level": 75, "shiny": 1, "moves":["glaciate", "dragonpulse", "imprison", "endeavor"]}, - {"generation": 5, "level": 70, "shiny": 1, "moves":["scaryface", "glaciate", "dragonpulse", "imprison"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["dragonbreath", "slash", "scaryface", "glaciate"]}, - {"generation": 6, "level": 100, "moves":["glaciate", "scaryface", "dracometeor", "ironhead"], "pokeball": "cherishball"}, + {"generation": 5, "level": 75, "shiny": 1, "moves": ["glaciate", "dragonpulse", "imprison", "endeavor"]}, + {"generation": 5, "level": 70, "shiny": 1, "moves": ["scaryface", "glaciate", "dragonpulse", "imprison"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["dragonbreath", "slash", "scaryface", "glaciate"]}, + {"generation": 6, "level": 100, "moves": ["glaciate", "scaryface", "dracometeor", "ironhead"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["slash", "scaryface", "glaciate", "dragonpulse"]}, ], eventOnly: true, - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, kyuremblack: { randomBattleMoves: ["outrage", "fusionbolt", "icebeam", "roost", "substitute", "earthpower", "dragonclaw"], randomDoubleBattleMoves: ["protect", "fusionbolt", "icebeam", "roost", "substitute", "honeclaws", "earthpower", "dragonclaw"], eventPokemon: [ - {"generation": 5, "level": 75, "shiny": 1, "moves":["freezeshock", "dragonpulse", "imprison", "endeavor"]}, - {"generation": 5, "level": 70, "shiny": 1, "moves":["fusionbolt", "freezeshock", "dragonpulse", "imprison"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["dragonbreath", "slash", "fusionbolt", "freezeshock"]}, - {"generation": 6, "level": 100, "moves":["freezeshock", "fusionbolt", "dracometeor", "ironhead"], "pokeball": "cherishball"}, + {"generation": 5, "level": 75, "shiny": 1, "moves": ["freezeshock", "dragonpulse", "imprison", "endeavor"]}, + {"generation": 5, "level": 70, "shiny": 1, "moves": ["fusionbolt", "freezeshock", "dragonpulse", "imprison"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["dragonbreath", "slash", "fusionbolt", "freezeshock"]}, + {"generation": 6, "level": 100, "moves": ["freezeshock", "fusionbolt", "dracometeor", "ironhead"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["slash", "fusionbolt", "freezeshock", "dragonpulse"]}, ], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, kyuremwhite: { randomBattleMoves: ["dracometeor", "icebeam", "fusionflare", "earthpower", "focusblast", "dragonpulse", "substitute", "roost", "toxic"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "icebeam", "fusionflare", "earthpower", "focusblast", "roost", "protect"], eventPokemon: [ - {"generation": 5, "level": 75, "shiny": 1, "moves":["iceburn", "dragonpulse", "imprison", "endeavor"]}, - {"generation": 5, "level": 70, "shiny": 1, "moves":["fusionflare", "iceburn", "dragonpulse", "imprison"]}, - {"generation": 6, "level": 50, "shiny": 1, "moves":["dragonbreath", "slash", "fusionflare", "iceburn"]}, - {"generation": 6, "level": 100, "moves":["iceburn", "fusionflare", "dracometeor", "ironhead"], "pokeball": "cherishball"}, + {"generation": 5, "level": 75, "shiny": 1, "moves": ["iceburn", "dragonpulse", "imprison", "endeavor"]}, + {"generation": 5, "level": 70, "shiny": 1, "moves": ["fusionflare", "iceburn", "dragonpulse", "imprison"]}, + {"generation": 6, "level": 50, "shiny": 1, "moves": ["dragonbreath", "slash", "fusionflare", "iceburn"]}, + {"generation": 6, "level": 100, "moves": ["iceburn", "fusionflare", "dracometeor", "ironhead"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["slash", "fusionflare", "iceburn", "dragonpulse"]}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, keldeo: { randomBattleMoves: ["hydropump", "secretsword", "calmmind", "hiddenpowerflying", "hiddenpowerelectric", "substitute", "scald", "icywind"], randomDoubleBattleMoves: ["hydropump", "secretsword", "protect", "hiddenpowerflying", "hiddenpowerelectric", "substitute", "surf", "icywind", "taunt"], eventPokemon: [ - {"generation": 5, "level": 15, "moves":["aquajet", "leer", "doublekick", "bubblebeam"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "moves":["sacredsword", "hydropump", "aquajet", "swordsdance"], "pokeball": "cherishball"}, - {"generation": 6, "level": 15, "moves":["aquajet", "leer", "doublekick", "hydropump"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["aquajet", "leer", "doublekick", "bubblebeam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "moves": ["aquajet", "leer", "doublekick", "bubblebeam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "moves": ["sacredsword", "hydropump", "aquajet", "swordsdance"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "moves": ["aquajet", "leer", "doublekick", "hydropump"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["aquajet", "leer", "doublekick", "bubblebeam"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "OU", + doublesTier: "(DUU)", }, keldeoresolute: { eventOnly: true, @@ -5318,11 +6818,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "calmmind", "psyshock", "hypervoice", "shadowball", "focusblast"], randomDoubleBattleMoves: ["calmmind", "psyshock", "thunderbolt", "hypervoice", "shadowball", "focusblast", "protect"], eventPokemon: [ - {"generation": 5, "level": 15, "moves":["quickattack", "confusion", "round"], "pokeball": "cherishball"}, - {"generation": 5, "level": 50, "moves":["round", "teeterdance", "psychic", "closecombat"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "moves": ["quickattack", "confusion", "round"], "pokeball": "cherishball"}, + {"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"}, ], eventOnly: true, - tier: "BL3", + tier: "RUBL", + doublesTier: "(DUU)", }, meloettapirouette: { randomBattleMoves: ["relicsong", "closecombat", "knockoff", "return"], @@ -5334,13 +6837,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "bugbuzz", "icebeam", "flamethrower", "thunderbolt", "ironhead", "shiftgear", "extremespeed", "blazekick"], randomDoubleBattleMoves: ["uturn", "bugbuzz", "icebeam", "flamethrower", "thunderbolt", "ironhead", "shiftgear", "extremespeed", "blazekick", "protect"], eventPokemon: [ - {"generation": 5, "level": 50, "moves":["technoblast", "magnetbomb", "solarbeam", "signalbeam"], "pokeball": "cherishball"}, - {"generation": 5, "level": 15, "moves":["technoblast", "magnetbomb", "solarbeam", "signalbeam"], "pokeball": "cherishball"}, - {"generation": 5, "level": 100, "shiny": true, "nature": "Hasty", "ivs": {"atk": 31, "spe": 31}, "moves":["extremespeed", "technoblast", "blazekick", "shiftgear"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "moves":["technoblast", "magnetbomb", "solarbeam", "signalbeam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 50, "moves": ["technoblast", "magnetbomb", "solarbeam", "signalbeam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 15, "moves": ["technoblast", "magnetbomb", "solarbeam", "signalbeam"], "pokeball": "cherishball"}, + {"generation": 5, "level": 100, "shiny": true, "nature": "Hasty", "ivs": {"atk": 31, "spe": 31}, "moves": ["extremespeed", "technoblast", "blazekick", "shiftgear"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "moves": ["technoblast", "magnetbomb", "solarbeam", "signalbeam"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DOU", }, genesectburn: { randomBattleMoves: ["uturn", "bugbuzz", "icebeam", "technoblast", "thunderbolt", "ironhead", "extremespeed"], @@ -5377,12 +6881,13 @@ exports.BattleFormatsData = { chesnaught: { randomBattleMoves: ["leechseed", "synthesis", "spikes", "drainpunch", "spikyshield", "woodhammer"], randomDoubleBattleMoves: ["leechseed", "synthesis", "hammerarm", "spikyshield", "stoneedge", "woodhammer", "rockslide"], - tier: "RU", + tier: "UU", + doublesTier: "(DUU)", }, fennekin: { randomBattleMoves: ["fireblast", "psychic", "psyshock", "grassknot", "willowisp", "hypnosis", "hiddenpowerrock", "flamecharge"], eventPokemon: [ - {"generation": 6, "level": 15, "gender": "F", "nature": "Hardy", "isHidden": false, "moves":["scratch", "flamethrower", "hiddenpower"], "pokeball": "cherishball"}, + {"generation": 6, "level": 15, "gender": "F", "nature": "Hardy", "isHidden": false, "moves": ["scratch", "flamethrower", "hiddenpower"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -5394,11 +6899,12 @@ exports.BattleFormatsData = { randomBattleMoves: ["calmmind", "fireblast", "psyshock", "grassknot", "switcheroo", "shadowball"], randomDoubleBattleMoves: ["calmmind", "fireblast", "psyshock", "grassknot", "switcheroo", "shadowball", "heatwave", "dazzlinggleam", "protect"], tier: "NU", + doublesTier: "(DUU)", }, froakie: { randomBattleMoves: ["quickattack", "hydropump", "icebeam", "waterfall", "toxicspikes", "poweruppunch", "uturn"], eventPokemon: [ - {"generation": 6, "level": 7, "isHidden": false, "moves":["pound", "growl", "bubble", "return"], "pokeball": "cherishball"}, + {"generation": 6, "level": 7, "isHidden": false, "moves": ["pound", "growl", "bubble", "return"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -5410,21 +6916,23 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "icebeam", "darkpulse", "gunkshot", "uturn", "spikes", "toxicspikes", "taunt"], randomDoubleBattleMoves: ["hydropump", "uturn", "surf", "icebeam", "matblock", "taunt", "darkpulse", "protect"], eventPokemon: [ - {"generation": 6, "level": 36, "ivs": {"spe": 31}, "isHidden": true, "moves":["watershuriken", "shadowsneak", "hydropump", "substitute"], "pokeball": "cherishball"}, - {"generation": 6, "level": 100, "isHidden": true, "moves":["hydrocannon", "gunkshot", "matblock", "happyhour"], "pokeball": "cherishball"}, + {"generation": 6, "level": 36, "ivs": {"spe": 31}, "isHidden": true, "moves": ["watershuriken", "shadowsneak", "hydropump", "substitute"], "pokeball": "cherishball"}, + {"generation": 6, "level": 100, "isHidden": true, "moves": ["hydrocannon", "gunkshot", "matblock", "happyhour"], "pokeball": "cherishball"}, ], tier: "OU", + doublesTier: "DUU", }, greninjaash: { randomBattleMoves: ["hydropump", "icebeam", "darkpulse", "watershuriken", "uturn"], eventPokemon: [ - {"generation": 7, "level": 36, "ivs": {"hp": 20, "atk": 31, "def": 20, "spa": 31, "spd": 20, "spe": 31}, "moves":["watershuriken", "aerialace", "doubleteam", "nightslash"]}, + {"generation": 7, "level": 36, "ivs": {"hp": 20, "atk": 31, "def": 20, "spa": 31, "spd": 20, "spe": 31}, "moves": ["watershuriken", "aerialace", "doubleteam", "nightslash"], "pokeball": "pokeball"}, ], eventOnly: true, gen: 7, requiredAbility: "Battle Bond", battleOnly: true, tier: "OU", + doublesTier: "DUU", }, bunnelby: { randomBattleMoves: ["agility", "earthquake", "return", "quickattack", "uturn", "stoneedge", "spikes", "bounce"], @@ -5433,20 +6941,25 @@ exports.BattleFormatsData = { diggersby: { randomBattleMoves: ["earthquake", "return", "wildcharge", "uturn", "swordsdance", "quickattack", "knockoff", "agility"], randomDoubleBattleMoves: ["earthquake", "uturn", "return", "wildcharge", "protect", "quickattack"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, fletchling: { - randomBattleMoves: ["roost", "swordsdance", "uturn", "return", "overheat", "flamecharge", "tailwind"], + randomBattleMoves: ["roost", "swordsdance", "uturn", "return", "overheat", "flamecharge"], tier: "LC", }, fletchinder: { - randomBattleMoves: ["roost", "swordsdance", "uturn", "return", "overheat", "flamecharge", "tailwind", "acrobatics"], + randomBattleMoves: ["roost", "swordsdance", "uturn", "return", "overheat", "flamecharge", "acrobatics"], + encounters: [ + {"generation": 7, "level": 16}, + ], tier: "NFE", }, talonflame: { - randomBattleMoves: ["bravebird", "flareblitz", "roost", "swordsdance", "uturn", "willowisp", "tailwind"], + randomBattleMoves: ["bravebird", "flareblitz", "roost", "swordsdance", "uturn", "willowisp"], randomDoubleBattleMoves: ["bravebird", "flareblitz", "roost", "swordsdance", "uturn", "willowisp", "tailwind", "taunt", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "DUU", }, scatterbug: { randomBattleMoves: ["tackle", "stringshot", "stunspore", "bugbite", "poisonpowder"], @@ -5459,17 +6972,18 @@ exports.BattleFormatsData = { vivillon: { randomBattleMoves: ["sleeppowder", "quiverdance", "hurricane", "bugbuzz", "substitute"], randomDoubleBattleMoves: ["sleeppowder", "quiverdance", "hurricane", "bugbuzz", "roost", "protect"], - tier: "BL4", + tier: "NU", + doublesTier: "(DUU)", }, vivillonfancy: { eventPokemon: [ - {"generation": 6, "level": 12, "isHidden": false, "moves":["gust", "lightscreen", "strugglebug", "holdhands"], "pokeball": "cherishball"}, + {"generation": 6, "level": 12, "isHidden": false, "moves": ["gust", "lightscreen", "strugglebug", "holdhands"], "pokeball": "cherishball"}, ], eventOnly: true, }, vivillonpokeball: { eventPokemon: [ - {"generation": 6, "level": 12, "isHidden": false, "moves":["stunspore", "gust", "lightscreen", "strugglebug"]}, + {"generation": 6, "level": 12, "isHidden": false, "moves": ["stunspore", "gust", "lightscreen", "strugglebug"], "pokeball": "pokeball"}, ], eventOnly: true, }, @@ -5481,9 +6995,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["sunnyday", "fireblast", "hypervoice", "solarbeam", "willowisp", "darkpulse"], randomDoubleBattleMoves: ["hypervoice", "fireblast", "willowisp", "protect", "sunnyday", "solarbeam"], eventPokemon: [ - {"generation": 6, "level": 49, "gender": "M", "perfectIVs": 2, "isHidden": false, "abilities":["unnerve"], "moves":["hypervoice", "fireblast", "darkpulse"], "pokeball": "cherishball"}, + {"generation": 6, "level": 49, "gender": "M", "perfectIVs": 2, "isHidden": false, "abilities": ["unnerve"], "moves": ["hypervoice", "fireblast", "darkpulse"], "pokeball": "cherishball"}, ], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "PUBL", + doublesTier: "(DUU)", }, flabebe: { randomBattleMoves: ["moonblast", "toxic", "wish", "psychic", "aromatherapy", "protect", "calmmind"], @@ -5500,9 +7018,10 @@ exports.BattleFormatsData = { tier: "Unreleased", }, florges: { - randomBattleMoves: ["calmmind", "moonblast", "synthesis", "aromatherapy", "wish", "toxic", "protect"], - randomDoubleBattleMoves: ["moonblast", "dazzlinggleam", "wish", "psychic", "aromatherapy", "protect", "calmmind"], + randomBattleMoves: ["calmmind", "moonblast", "synthesis", "aromatherapy", "wish", "toxic", "protect", "defog"], + randomDoubleBattleMoves: ["moonblast", "dazzlinggleam", "wish", "psychic", "aromatherapy", "protect", "calmmind", "defog"], tier: "RU", + doublesTier: "(DUU)", }, skiddo: { randomBattleMoves: ["hornleech", "brickbreak", "bulkup", "leechseed", "milkdrink", "rockslide"], @@ -5511,24 +7030,33 @@ exports.BattleFormatsData = { gogoat: { randomBattleMoves: ["bulkup", "hornleech", "earthquake", "rockslide", "substitute", "leechseed", "milkdrink"], randomDoubleBattleMoves: ["hornleech", "earthquake", "brickbreak", "bulkup", "leechseed", "milkdrink", "rockslide", "protect"], - tier: "PU", + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, pancham: { randomBattleMoves: ["partingshot", "skyuppercut", "crunch", "stoneedge", "bulldoze", "shadowclaw", "bulkup"], eventPokemon: [ - {"generation": 6, "level": 30, "gender": "M", "nature": "Adamant", "isHidden": false, "abilities":["moldbreaker"], "moves":["armthrust", "stoneedge", "darkpulse"], "pokeball": "cherishball"}, + {"generation": 6, "level": 30, "gender": "M", "nature": "Adamant", "isHidden": false, "abilities": ["moldbreaker"], "moves": ["armthrust", "stoneedge", "darkpulse"], "pokeball": "cherishball"}, ], tier: "LC", }, pangoro: { randomBattleMoves: ["knockoff", "superpower", "gunkshot", "icepunch", "partingshot", "drainpunch"], randomDoubleBattleMoves: ["partingshot", "hammerarm", "crunch", "circlethrow", "icepunch", "earthquake", "poisonjab", "protect"], + encounters: [ + {"generation": 7, "level": 24}, + ], tier: "RU", + doublesTier: "(DUU)", }, furfrou: { randomBattleMoves: ["return", "cottonguard", "thunderwave", "substitute", "toxic", "suckerpunch", "uturn", "rest"], randomDoubleBattleMoves: ["return", "cottonguard", "uturn", "thunderwave", "suckerpunch", "snarl", "wildcharge", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, espurr: { randomBattleMoves: ["fakeout", "yawn", "thunderwave", "psychic", "trick", "darkpulse"], @@ -5537,12 +7065,14 @@ exports.BattleFormatsData = { meowstic: { randomBattleMoves: ["toxic", "yawn", "thunderwave", "psychic", "reflect", "lightscreen", "healbell"], randomDoubleBattleMoves: ["fakeout", "thunderwave", "psychic", "reflect", "lightscreen", "safeguard", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, meowsticf: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "shadowball", "energyball", "thunderbolt"], randomDoubleBattleMoves: ["psyshock", "darkpulse", "fakeout", "energyball", "signalbeam", "thunderbolt", "protect", "helpinghand"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, honedge: { randomBattleMoves: ["swordsdance", "shadowclaw", "shadowsneak", "ironhead", "rockslide", "aerialace", "destinybond"], @@ -5551,30 +7081,34 @@ exports.BattleFormatsData = { doublade: { randomBattleMoves: ["swordsdance", "shadowclaw", "shadowsneak", "ironhead", "sacredsword"], randomDoubleBattleMoves: ["swordsdance", "shadowclaw", "shadowsneak", "ironhead", "sacredsword", "rockslide", "protect"], - tier: "RU", + tier: "UU", + doublesTier: "NFE", }, aegislash: { randomBattleMoves: ["kingsshield", "swordsdance", "shadowclaw", "sacredsword", "ironhead", "shadowsneak", "hiddenpowerice", "shadowball", "flashcannon"], randomDoubleBattleMoves: ["kingsshield", "swordsdance", "shadowclaw", "sacredsword", "ironhead", "shadowsneak", "wideguard", "hiddenpowerice", "shadowball", "flashcannon"], eventPokemon: [ - {"generation": 6, "level": 50, "gender": "F", "nature": "Quiet", "moves":["wideguard", "kingsshield", "shadowball", "flashcannon"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "gender": "F", "nature": "Quiet", "moves": ["wideguard", "kingsshield", "shadowball", "flashcannon"], "pokeball": "cherishball"}, ], tier: "Uber", + doublesTier: "DOU", }, aegislashblade: { + requiredAbility: 'Stance Change', battleOnly: true, }, spritzee: { - randomBattleMoves: ["calmmind", "drainingkiss", "moonblast", "psychic", "aromatherapy", "wish", "trickroom", "thunderbolt"], + randomBattleMoves: ["calmmind", "drainingkiss", "moonblast", "psychic", "aromatherapy", "wish", "trickroom", "thunderbolt", "nastyplot"], tier: "LC", }, aromatisse: { randomBattleMoves: ["wish", "protect", "moonblast", "aromatherapy", "reflect", "lightscreen"], randomDoubleBattleMoves: ["moonblast", "aromatherapy", "wish", "trickroom", "thunderbolt", "protect", "healpulse"], eventPokemon: [ - {"generation": 6, "level": 50, "nature": "Relaxed", "isHidden": true, "moves":["trickroom", "healpulse", "disable", "moonblast"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Relaxed", "isHidden": true, "moves": ["trickroom", "healpulse", "disable", "moonblast"], "pokeball": "cherishball"}, ], - tier: "NU", + tier: "PUBL", + doublesTier: "(DUU)", }, swirlix: { randomBattleMoves: ["calmmind", "drainingkiss", "dazzlinggleam", "surf", "psychic", "flamethrower", "bellydrum", "thunderbolt", "return", "thief", "cottonguard"], @@ -5583,31 +7117,37 @@ exports.BattleFormatsData = { slurpuff: { randomBattleMoves: ["substitute", "bellydrum", "playrough", "return", "drainpunch", "calmmind", "drainingkiss", "dazzlinggleam", "flamethrower", "surf"], randomDoubleBattleMoves: ["substitute", "bellydrum", "playrough", "return", "drainpunch", "dazzlinggleam", "surf", "psychic", "flamethrower", "protect"], - tier: "BL3", + tier: "NUBL", + doublesTier: "(DUU)", }, inkay: { randomBattleMoves: ["topsyturvy", "switcheroo", "superpower", "psychocut", "flamethrower", "rockslide", "trickroom"], eventPokemon: [ - {"generation": 6, "level": 10, "isHidden": false, "moves":["happyhour", "foulplay", "hypnosis", "topsyturvy"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["happyhour", "foulplay", "hypnosis", "topsyturvy"], "pokeball": "cherishball"}, ], tier: "LC", }, malamar: { - randomBattleMoves: ["superpower", "knockoff", "psychocut", "rockslide", "substitute", "trickroom"], + randomBattleMoves: ["superpower", "knockoff", "psychocut", "rest", "sleeptalk", "happyhour"], randomDoubleBattleMoves: ["superpower", "psychocut", "rockslide", "trickroom", "knockoff", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31}, "isHidden": false, "abilities":["contrary"], "moves":["superpower", "knockoff", "facade", "rockslide"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "nature": "Adamant", "ivs": {"hp": 31, "atk": 31}, "isHidden": false, "abilities": ["contrary"], "moves": ["superpower", "knockoff", "facade", "rockslide"], "pokeball": "cherishball"}, ], tier: "NU", + doublesTier: "(DUU)", }, binacle: { - randomBattleMoves: ["shellsmash", "razorshell", "stoneedge", "earthquake", "crosschop", "poisonjab", "xscissor", "rockslide"], + randomBattleMoves: ["shellsmash", "liquidation", "stoneedge", "earthquake", "crosschop", "poisonjab", "xscissor", "rockslide"], tier: "LC", }, barbaracle: { - randomBattleMoves: ["shellsmash", "stoneedge", "razorshell", "earthquake", "crosschop", "stealthrock"], - randomDoubleBattleMoves: ["shellsmash", "razorshell", "earthquake", "crosschop", "rockslide", "protect"], - tier: "PU", + randomBattleMoves: ["shellsmash", "stoneedge", "liquidation", "earthquake", "crosschop", "stealthrock"], + randomDoubleBattleMoves: ["shellsmash", "liquidation", "earthquake", "crosschop", "rockslide", "protect"], + encounters: [ + {"generation": 6, "level": 30}, + ], + tier: "NUBL", + doublesTier: "(DUU)", }, skrelp: { randomBattleMoves: ["scald", "sludgebomb", "thunderbolt", "shadowball", "toxicspikes", "hydropump"], @@ -5616,7 +7156,11 @@ exports.BattleFormatsData = { dragalge: { randomBattleMoves: ["dracometeor", "sludgewave", "focusblast", "scald", "hiddenpowerfire", "toxicspikes", "dragonpulse"], randomDoubleBattleMoves: ["dracometeor", "sludgebomb", "focusblast", "scald", "hiddenpowerfire", "protect", "dragonpulse"], + encounters: [ + {"generation": 6, "level": 35, "isHidden": false}, + ], tier: "RU", + doublesTier: "(DUU)", }, clauncher: { randomBattleMoves: ["waterpulse", "flashcannon", "uturn", "crabhammer", "aquajet", "sludgebomb"], @@ -5625,7 +7169,11 @@ exports.BattleFormatsData = { clawitzer: { randomBattleMoves: ["scald", "waterpulse", "darkpulse", "aurasphere", "icebeam", "uturn"], randomDoubleBattleMoves: ["waterpulse", "icebeam", "uturn", "darkpulse", "aurasphere", "muddywater", "helpinghand", "protect"], + encounters: [ + {"generation": 6, "level": 35, "isHidden": false}, + ], tier: "NU", + doublesTier: "(DUU)", }, helioptile: { randomBattleMoves: ["surf", "voltswitch", "hiddenpowerice", "raindance", "thunder", "darkpulse", "thunderbolt"], @@ -5634,77 +7182,89 @@ exports.BattleFormatsData = { heliolisk: { randomBattleMoves: ["raindance", "thunder", "hypervoice", "surf", "darkpulse", "hiddenpowerice", "voltswitch", "thunderbolt"], randomDoubleBattleMoves: ["surf", "voltswitch", "hiddenpowerice", "raindance", "thunder", "darkpulse", "thunderbolt", "electricterrain", "protect"], - tier: "RU", + tier: "NU", + doublesTier: "(DUU)", }, tyrunt: { randomBattleMoves: ["stealthrock", "dragondance", "stoneedge", "dragonclaw", "earthquake", "icefang", "firefang"], eventPokemon: [ - {"generation": 6, "level": 10, "isHidden": true, "moves":["tailwhip", "tackle", "roar", "stomp"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": true, "moves": ["tailwhip", "tackle", "roar", "stomp"], "pokeball": "cherishball"}, ], tier: "LC", }, tyrantrum: { randomBattleMoves: ["stealthrock", "dragondance", "dragonclaw", "earthquake", "superpower", "outrage", "headsmash"], randomDoubleBattleMoves: ["rockslide", "dragondance", "headsmash", "dragonclaw", "earthquake", "icefang", "firefang", "protect"], - tier: "BL3", + tier: "RU", + doublesTier: "(DUU)", }, amaura: { randomBattleMoves: ["naturepower", "hypervoice", "ancientpower", "thunderbolt", "darkpulse", "thunderwave", "dragontail", "flashcannon"], eventPokemon: [ - {"generation": 6, "level": 10, "isHidden": true, "moves":["growl", "powdersnow", "thunderwave", "rockthrow"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": true, "moves": ["growl", "powdersnow", "thunderwave", "rockthrow"], "pokeball": "cherishball"}, ], tier: "LC", }, aurorus: { - randomBattleMoves: ["ancientpower", "thunderbolt", "encore", "thunderwave", "earthpower", "freezedry", "hypervoice", "stealthrock"], - randomDoubleBattleMoves: ["hypervoice", "ancientpower", "thunderbolt", "encore", "thunderwave", "flashcannon", "freezedry", "icywind", "protect"], - tier: "NU", + randomBattleMoves: ["ancientpower", "blizzard", "thunderwave", "earthpower", "freezedry", "hypervoice", "stealthrock"], + randomDoubleBattleMoves: ["hypervoice", "ancientpower", "thunderwave", "flashcannon", "freezedry", "icywind", "protect"], + tier: "PU", + doublesTier: "(DUU)", }, sylveon: { - randomBattleMoves: ["hypervoice", "calmmind", "wish", "protect", "psyshock", "batonpass", "shadowball"], + randomBattleMoves: ["hypervoice", "calmmind", "wish", "protect", "psyshock", "shadowball"], randomDoubleBattleMoves: ["hypervoice", "calmmind", "wish", "protect", "psyshock", "helpinghand", "shadowball", "hiddenpowerground"], eventPokemon: [ - {"generation": 6, "level": 10, "isHidden": false, "moves":["celebrate", "helpinghand", "sandattack", "fairywind"], "pokeball": "cherishball"}, - {"generation": 6, "level": 10, "gender": "F", "isHidden": false, "moves":["disarmingvoice", "babydolleyes", "quickattack", "drainingkiss"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves":["hyperbeam", "drainingkiss", "psyshock", "calmmind"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "isHidden": false, "moves": ["celebrate", "helpinghand", "sandattack", "fairywind"], "pokeball": "cherishball"}, + {"generation": 6, "level": 10, "gender": "F", "isHidden": false, "moves": ["disarmingvoice", "babydolleyes", "quickattack", "drainingkiss"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves": ["hyperbeam", "drainingkiss", "psyshock", "calmmind"], "pokeball": "cherishball"}, ], tier: "UU", + doublesTier: "DUU", }, hawlucha: { randomBattleMoves: ["substitute", "swordsdance", "highjumpkick", "acrobatics", "roost", "stoneedge"], randomDoubleBattleMoves: ["swordsdance", "highjumpkick", "uturn", "stoneedge", "skydrop", "encore", "protect"], - tier: "UU", + tier: "OU", + doublesTier: "(DUU)", }, dedenne: { randomBattleMoves: ["substitute", "recycle", "thunderbolt", "nuzzle", "grassknot", "hiddenpowerice", "toxic"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "nuzzle", "grassknot", "hiddenpowerice", "uturn", "helpinghand", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, carbink: { randomBattleMoves: ["stealthrock", "lightscreen", "reflect", "explosion", "powergem", "moonblast"], randomDoubleBattleMoves: ["trickroom", "lightscreen", "reflect", "explosion", "powergem", "moonblast", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, goomy: { randomBattleMoves: ["sludgebomb", "thunderbolt", "toxic", "protect", "infestation"], eventPokemon: [ - {"generation": 7, "level": 1, "shiny": 1, "isHidden": true, "moves":["bodyslam", "dragonpulse", "counter"], "pokeball": "cherishball"}, + {"generation": 7, "level": 1, "shiny": 1, "isHidden": true, "moves": ["bodyslam", "dragonpulse", "counter"], "pokeball": "cherishball"}, ], tier: "LC", }, sliggoo: { randomBattleMoves: ["sludgebomb", "thunderbolt", "toxic", "protect", "infestation", "icebeam"], + encounters: [ + {"generation": 6, "level": 30}, + ], tier: "NFE", }, goodra: { randomBattleMoves: ["dracometeor", "dragonpulse", "fireblast", "sludgebomb", "thunderbolt", "earthquake", "dragontail"], randomDoubleBattleMoves: ["thunderbolt", "icebeam", "dragonpulse", "fireblast", "muddywater", "dracometeor", "focusblast", "protect"], tier: "RU", + doublesTier: "(DUU)", }, klefki: { randomBattleMoves: ["reflect", "lightscreen", "spikes", "magnetrise", "playrough", "thunderwave", "foulplay", "toxic"], randomDoubleBattleMoves: ["reflect", "lightscreen", "safeguard", "playrough", "substitute", "thunderwave", "protect", "flashcannon", "dazzlinggleam"], tier: "UU", + doublesTier: "(DUU)", }, phantump: { randomBattleMoves: ["hornleech", "leechseed", "phantomforce", "substitute", "willowisp", "rest"], @@ -5713,7 +7273,8 @@ exports.BattleFormatsData = { trevenant: { randomBattleMoves: ["hornleech", "shadowclaw", "leechseed", "willowisp", "rest", "substitute", "phantomforce"], randomDoubleBattleMoves: ["hornleech", "woodhammer", "leechseed", "shadowclaw", "willowisp", "trickroom", "earthquake", "rockslide", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, pumpkaboo: { randomBattleMoves: ["willowisp", "shadowsneak", "destinybond", "synthesis", "seedbomb", "leechseed"], @@ -5732,31 +7293,35 @@ exports.BattleFormatsData = { pumpkaboosuper: { randomBattleMoves: ["willowisp", "shadowsneak", "leechseed", "synthesis", "seedbomb"], eventPokemon: [ - {"generation": 6, "level": 50, "moves":["trickortreat", "astonish", "scaryface", "shadowsneak"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["trickortreat", "astonish", "scaryface", "shadowsneak"], "pokeball": "cherishball"}, ], tier: "LC", }, gourgeist: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, gourgeistsmall: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect"], unreleasedHidden: true, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, gourgeistlarge: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect", "trickroom"], unreleasedHidden: true, - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, gourgeistsuper: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect", "trickroom"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, bergmite: { randomBattleMoves: ["avalanche", "recover", "stoneedge", "curse", "gyroball", "rapidspin"], @@ -5765,148 +7330,177 @@ exports.BattleFormatsData = { avalugg: { randomBattleMoves: ["avalanche", "recover", "toxic", "rapidspin", "roar", "earthquake"], randomDoubleBattleMoves: ["avalanche", "recover", "earthquake", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, noibat: { randomBattleMoves: ["airslash", "hurricane", "dracometeor", "uturn", "roost", "switcheroo"], tier: "LC", }, noivern: { - randomBattleMoves: ["dracometeor", "hurricane", "airslash", "flamethrower", "boomburst", "switcheroo", "uturn", "roost", "taunt"], + randomBattleMoves: ["dracometeor", "hurricane", "flamethrower", "boomburst", "switcheroo", "uturn", "roost", "taunt"], randomDoubleBattleMoves: ["airslash", "hurricane", "dragonpulse", "dracometeor", "focusblast", "flamethrower", "uturn", "roost", "boomburst", "switcheroo", "tailwind", "taunt", "protect"], - tier: "BL3", + tier: "RU", + doublesTier: "(DUU)", }, xerneas: { - randomBattleMoves: ["geomancy", "moonblast", "thunder", "focusblast", "thunderbolt", "hiddenpowerfire", "psyshock", "rockslide", "closecombat"], + randomBattleMoves: ["geomancy", "moonblast", "focusblast", "thunderbolt", "hiddenpowerfire", "psyshock", "rockslide", "closecombat"], randomDoubleBattleMoves: ["geomancy", "dazzlinggleam", "thunder", "focusblast", "thunderbolt", "hiddenpowerfire", "psyshock", "rockslide", "closecombat", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "moves":["gravity", "geomancy", "moonblast", "megahorn"]}, - {"generation": 6, "level": 100, "shiny": true, "moves":["geomancy", "moonblast", "aromatherapy", "focusblast"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["gravity", "geomancy", "moonblast", "megahorn"]}, + {"generation": 6, "level": 100, "shiny": true, "moves": ["geomancy", "moonblast", "aromatherapy", "focusblast"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["geomancy", "hornleech", "nightslash", "moonblast"]}, + {"generation": 7, "level": 60, "moves": ["geomancy", "hornleech", "nightslash", "moonblast"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["geomancy", "focusblast", "grassknot", "moonblast"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, yveltal: { - randomBattleMoves: ["darkpulse", "hurricane", "foulplay", "oblivionwing", "uturn", "suckerpunch", "taunt", "toxic", "roost"], + randomBattleMoves: ["darkpulse", "oblivionwing", "focusblast", "uturn", "foulplay", "suckerpunch", "toxic", "taunt", "roost"], randomDoubleBattleMoves: ["darkpulse", "oblivionwing", "taunt", "focusblast", "hurricane", "roost", "suckerpunch", "snarl", "skydrop", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "moves":["snarl", "oblivionwing", "disable", "darkpulse"]}, - {"generation": 6, "level": 100, "shiny": true, "moves":["oblivionwing", "suckerpunch", "darkpulse", "foulplay"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["snarl", "oblivionwing", "disable", "darkpulse"]}, + {"generation": 6, "level": 100, "shiny": true, "moves": ["oblivionwing", "suckerpunch", "darkpulse", "foulplay"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["oblivionwing", "darkpulse", "phantomforce", "psychic"]}, + {"generation": 7, "level": 60, "moves": ["oblivionwing", "darkpulse", "phantomforce", "psychic"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "moves": ["oblivionwing", "darkpulse", "heatwave", "tailwind"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, zygarde: { randomBattleMoves: ["dragondance", "thousandarrows", "outrage", "extremespeed", "irontail"], randomDoubleBattleMoves: ["dragondance", "thousandarrows", "extremespeed", "rockslide", "coil", "stoneedge", "glare", "protect"], eventPokemon: [ - {"generation": 6, "level": 70, "moves":["crunch", "earthquake", "camouflage", "dragonpulse"]}, - {"generation": 6, "level": 100, "moves":["landswrath", "extremespeed", "glare", "outrage"], "pokeball": "cherishball"}, - {"generation": 7, "level": 50, "moves":["bind", "landswrath", "sandstorm", "haze"]}, - {"generation": 7, "level": 50, "isHidden": true, "moves":["bind", "landswrath", "sandstorm", "haze"]}, + {"generation": 6, "level": 70, "moves": ["crunch", "earthquake", "camouflage", "dragonpulse"]}, + {"generation": 6, "level": 100, "moves": ["landswrath", "extremespeed", "glare", "outrage"], "pokeball": "cherishball"}, + {"generation": 7, "level": 30, "moves": ["safeguard", "dig", "bind", "landswrath"]}, + {"generation": 7, "level": 50, "moves": ["bind", "landswrath", "sandstorm", "haze"]}, + {"generation": 7, "level": 50, "isHidden": true, "moves": ["bind", "landswrath", "sandstorm", "haze"]}, + {"generation": 7, "level": 60, "shiny": true, "moves": ["landswrath", "glare", "safeguard", "dragonbreath"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "shiny": true, "isHidden": true, "moves": ["landswrath", "glare", "safeguard", "dragonbreath"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "shiny": true, "moves": ["thousandarrows", "outrage", "extremespeed", "dragondance"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "shiny": true, "isHidden": true, "moves": ["thousandarrows", "outrage", "extremespeed", "dragondance"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "OU", + tier: "Uber", + doublesTier: "DOU", }, zygarde10: { randomBattleMoves: ["dragondance", "thousandarrows", "outrage", "extremespeed", "irontail", "substitute"], randomDoubleBattleMoves: ["dragondance", "thousandarrows", "extremespeed", "irontail", "protect"], eventPokemon: [ - {"generation": 7, "level": 30, "moves":["safeguard", "dig", "bind", "landswrath"]}, - {"generation": 7, "level": 50, "isHidden": true, "moves":["safeguard", "dig", "bind", "landswrath"]}, + {"generation": 7, "level": 30, "moves": ["safeguard", "dig", "bind", "landswrath"]}, + {"generation": 7, "level": 50, "isHidden": true, "moves": ["safeguard", "dig", "bind", "landswrath"]}, + {"generation": 7, "level": 60, "shiny": true, "isHidden": true, "moves": ["landswrath", "glare", "safeguard", "dragonbreath"], "pokeball": "cherishball"}, + {"generation": 7, "level": 100, "shiny": true, "isHidden": true, "moves": ["thousandarrows", "outrage", "extremespeed", "dragondance"], "pokeball": "cherishball"}, ], eventOnly: true, gen: 7, - tier: "UU", + tier: "RU", + doublesTier: "(DUU)", }, zygardecomplete: { gen: 7, requiredAbility: "Power Construct", battleOnly: true, tier: "Uber", + doublesTier: "DUber", }, diancie: { randomBattleMoves: ["reflect", "lightscreen", "stealthrock", "diamondstorm", "moonblast", "hiddenpowerfire"], randomDoubleBattleMoves: ["diamondstorm", "moonblast", "reflect", "lightscreen", "safeguard", "substitute", "calmmind", "psychic", "dazzlinggleam", "protect"], eventPokemon: [ - {"generation": 6, "level": 50, "perfectIVs": 0, "moves":["diamondstorm", "reflect", "return", "moonblast"], "pokeball": "cherishball"}, - {"generation": 6, "level": 50, "shiny": true, "moves":["diamondstorm", "moonblast", "reflect", "return"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "perfectIVs": 0, "moves": ["diamondstorm", "reflect", "return", "moonblast"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "shiny": true, "moves": ["diamondstorm", "moonblast", "reflect", "return"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "RU", + tier: "NU", + doublesTier: "DOU", }, dianciemega: { randomBattleMoves: ["calmmind", "moonblast", "earthpower", "hiddenpowerfire", "psyshock", "diamondstorm"], randomDoubleBattleMoves: ["diamondstorm", "moonblast", "calmmind", "psyshock", "earthpower", "hiddenpowerfire", "dazzlinggleam", "protect"], requiredItem: "Diancite", tier: "OU", + doublesTier: "DOU", }, hoopa: { randomBattleMoves: ["nastyplot", "psyshock", "shadowball", "focusblast", "trick"], randomDoubleBattleMoves: ["hyperspacehole", "shadowball", "focusblast", "protect", "psychic", "trickroom"], eventPokemon: [ - {"generation": 6, "level": 50, "moves":["hyperspacehole", "nastyplot", "psychic", "astonish"], "pokeball": "cherishball"}, + {"generation": 6, "level": 50, "moves": ["hyperspacehole", "nastyplot", "psychic", "astonish"], "pokeball": "cherishball"}, + {"generation": 7, "level": 15, "moves": ["shadowball", "nastyplot", "psychic", "hyperspacehole"], "pokeball": "cherishball"}, ], eventOnly: true, - tier: "RU", + tier: "NUBL", + doublesTier: "(DUU)", }, hoopaunbound: { randomBattleMoves: ["nastyplot", "substitute", "psyshock", "psychic", "darkpulse", "focusblast", "hyperspacefury", "zenheadbutt", "icepunch", "drainpunch", "gunkshot", "knockoff", "trick"], randomDoubleBattleMoves: ["psychic", "darkpulse", "focusblast", "protect", "hyperspacefury", "zenheadbutt", "icepunch", "drainpunch", "gunkshot"], eventOnly: true, - tier: "OU", + tier: "UUBL", + doublesTier: "DOU", }, volcanion: { randomBattleMoves: ["substitute", "steameruption", "fireblast", "sludgewave", "hiddenpowerice", "earthpower", "superpower"], randomDoubleBattleMoves: ["substitute", "steameruption", "heatwave", "sludgebomb", "rockslide", "earthquake", "protect"], eventPokemon: [ - {"generation": 6, "level": 70, "moves":["steameruption", "overheat", "hydropump", "mist"], "pokeball": "cherishball"}, - {"generation": 6, "level": 70, "moves":["steameruption", "flamethrower", "hydropump", "explosion"], "pokeball": "cherishball"}, + {"generation": 6, "level": 70, "moves": ["steameruption", "overheat", "hydropump", "mist"], "pokeball": "cherishball"}, + {"generation": 6, "level": 70, "moves": ["steameruption", "flamethrower", "hydropump", "explosion"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "UU", + doublesTier: "DOU", }, rowlet: { - unreleasedHidden: true, tier: "LC", }, dartrix: { - unreleasedHidden: true, tier: "NFE", }, decidueye: { randomBattleMoves: ["spiritshackle", "uturn", "leafblade", "roost", "swordsdance", "suckerpunch"], randomDoubleBattleMoves: ["spiritshackle", "leafblade", "bravebird", "protect", "suckerpunch"], - unreleasedHidden: true, - tier: "UU", + eventPokemon: [ + {"generation": 7, "level": 50, "isHidden": true, "moves": ["leafblade", "phantomforce", "shadowsneak", "bravebird"], "pokeball": "pokeball"}, + ], + tier: "NU", + doublesTier: "(DUU)", }, litten: { - unreleasedHidden: true, tier: "LC", }, torracat: { - unreleasedHidden: true, tier: "NFE", }, incineroar: { - randomBattleMoves: ["fakeout", "darkestlariat", "flareblitz", "uturn", "earthquake"], + randomBattleMoves: ["fakeout", "darkestlariat", "flareblitz", "uturn", "earthquake", "knockoff"], randomDoubleBattleMoves: ["fakeout", "darkestlariat", "flareblitz", "crosschop", "willowisp", "taunt", "snarl"], - unreleasedHidden: true, + eventPokemon: [ + {"generation": 7, "level": 50, "isHidden": true, "moves": ["fakeout", "uturn", "darkestlariat", "flareblitz"], "pokeball": "pokeball"}, + ], tier: "NU", + doublesTier: "DOU", }, popplio: { - unreleasedHidden: true, tier: "LC", }, brionne: { - unreleasedHidden: true, tier: "NFE", }, primarina: { - randomBattleMoves: ["hypervoice", "moonblast", "icebeam", "encore", "reflect", "lightscreen", "scald"], + randomBattleMoves: ["hydropump", "moonblast", "scald", "psychic", "hiddenpowerfire"], randomDoubleBattleMoves: ["hypervoice", "moonblast", "substitute", "protect", "icebeam"], - unreleasedHidden: true, + eventPokemon: [ + {"generation": 7, "level": 50, "isHidden": true, "moves": ["hypervoice", "moonblast", "icywind", "perishsong"], "pokeball": "pokeball"}, + ], tier: "UU", + doublesTier: "(DUU)", }, pikipek: { tier: "LC", @@ -5915,17 +7509,31 @@ exports.BattleFormatsData = { tier: "NFE", }, toucannon: { - randomBattleMoves: ["substitute", "beakblast", "swordsdance", "roost", "brickbreak", "bulletseed", "rockblast"], + randomBattleMoves: ["return", "beakblast", "swordsdance", "roost", "brickbreak", "bulletseed"], randomDoubleBattleMoves: ["bulletseed", "rockblast", "bravebird", "tailwind", "protect"], - tier: "PU", + encounters: [ + {"generation": 7, "level": 26}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, yungoos: { tier: "LC", }, gumshoos: { - randomBattleMoves: ["uturn", "return", "crunch", "earthquake"], + randomBattleMoves: ["uturn", "return", "crunch", "earthquake", "firepunch"], randomDoubleBattleMoves: ["uturn", "return", "superfang", "protect", "crunch"], - tier: "PU", + encounters: [ + {"generation": 7, "level": 17}, + ], + tier: "(PU)", + doublesTier: "(DUU)", + }, + gumshoostotem: { + eventPokemon: [ + {"generation": 7, "level": 20, "perfectIVs": 3, "moves": ["sandattack", "odorsleuth", "bide", "bite"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, grubbin: { tier: "LC", @@ -5937,6 +7545,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["agility", "bugbuzz", "thunderbolt", "voltswitch", "energyball", "hiddenpowerice"], randomDoubleBattleMoves: ["thunderbolt", "bugbuzz", "stringshot", "protect", "voltswitch", "hiddenpowerice"], tier: "NU", + doublesTier: "DUU", + }, + vikavolttotem: { + eventPokemon: [ + {"generation": 7, "level": 35, "perfectIVs": 3, "moves": ["spark", "acrobatics", "guillotine", "bugbuzz"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, crabrawler: { tier: "LC", @@ -5944,63 +7559,92 @@ exports.BattleFormatsData = { crabominable: { randomBattleMoves: ["icehammer", "closecombat", "earthquake", "stoneedge"], randomDoubleBattleMoves: ["icehammer", "closecombat", "stoneedge", "protect", "wideguard", "earthquake"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, oricorio: { - randomBattleMoves: ["revelationdance", "hurricane", "toxic", "roost", "uturn"], + randomBattleMoves: ["calmmind", "revelationdance", "hurricane", "toxic", "roost", "uturn"], randomDoubleBattleMoves: ["revelationdance", "airslash", "hurricane", "tailwind", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, oricoriopompom: { - randomBattleMoves: ["revelationdance", "hurricane", "toxic", "roost", "uturn"], + randomBattleMoves: ["calmmind", "revelationdance", "hurricane", "toxic", "roost", "uturn"], randomDoubleBattleMoves: ["revelationdance", "airslash", "hurricane", "tailwind", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, oricoriopau: { - randomBattleMoves: ["revelationdance", "hurricane", "toxic", "roost", "uturn"], + randomBattleMoves: ["calmmind", "revelationdance", "hurricane", "toxic", "roost", "uturn"], randomDoubleBattleMoves: ["revelationdance", "airslash", "hurricane", "tailwind", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, oricoriosensu: { - randomBattleMoves: ["revelationdance", "hurricane", "toxic", "roost", "uturn"], + randomBattleMoves: ["calmmind", "revelationdance", "hurricane", "toxic", "roost", "uturn"], randomDoubleBattleMoves: ["revelationdance", "airslash", "hurricane", "tailwind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cutiefly: { tier: "LC Uber", }, ribombee: { - randomBattleMoves: ["quiverdance", "bugbuzz", "moonblast", "hiddenpowerfire", "roost", "batonpass"], + randomBattleMoves: ["quiverdance", "bugbuzz", "moonblast", "hiddenpowerfire", "roost"], randomDoubleBattleMoves: ["quiverdance", "pollenpuff", "moonblast", "protect", "batonpass"], - tier: "BL3", + tier: "NUBL", + doublesTier: "(DUU)", + }, + ribombeetotem: { + eventPokemon: [ + {"generation": 7, "level": 50, "perfectIVs": 3, "moves": ["bugbuzz", "dazzlinggleam", "aromatherapy", "quiverdance"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, rockruff: { tier: "LC", }, + rockruffdusk: { + eventPokemon: [ + {"generation": 7, "level": 10, "moves": ["tackle", "bite", "firefang", "happyhour"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "moves": ["tackle", "bite", "thunderfang", "happyhour"], "pokeball": "cherishball"}, + ], + tier: "LC", + }, lycanroc: { - randomBattleMoves: ["swordsdance", "accelerock", "stoneedge", "crunch", "firefang"], + randomBattleMoves: ["swordsdance", "accelerock", "stoneedge", "drillrun", "firefang"], randomDoubleBattleMoves: ["accelerock", "stoneedge", "crunch", "firefang", "protect", "taunt"], tier: "PU", + doublesTier: "(DUU)", }, lycanrocmidnight: { - randomBattleMoves: ["bulkup", "stoneedge", "stealthrock", "suckerpunch", "swordsdance", "firefang"], + randomBattleMoves: ["stoneedge", "stealthrock", "suckerpunch", "swordsdance", "firepunch"], randomDoubleBattleMoves: ["stoneedge", "suckerpunch", "swordsdance", "protect", "taunt"], eventPokemon: [ - {"generation": 7, "level": 50, "isHidden": true, "moves":["stoneedge", "firefang", "suckerpunch", "swordsdance"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "isHidden": true, "moves": ["stoneedge", "firefang", "suckerpunch", "swordsdance"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", + }, + lycanrocdusk: { + randomBattleMoves: ["swordsdance", "accelerock", "stoneedge", "drillrun", "firefang", "return"], + randomDoubleBattleMoves: ["accelerock", "stoneedge", "rockslide", "drillrun", "firefang", "protect"], + tier: "RU", + doublesTier: "(DUU)", }, wishiwashi: { randomBattleMoves: ["scald", "hydropump", "icebeam", "hiddenpowergrass", "earthquake"], randomDoubleBattleMoves: ["hydropump", "icebeam", "endeavor", "protect", "hiddenpowergrass", "earthquake", "helpinghand"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, wishiwashischool: { + requiredAbility: 'Schooling', battleOnly: true, }, mareanie: { eventPokemon: [ - {"generation": 7, "level": 1, "shiny": 1, "isHidden": true, "moves":["toxic", "stockpile", "swallow"], "pokeball": "cherishball"}, + {"generation": 7, "level": 1, "shiny": 1, "isHidden": true, "moves": ["toxic", "stockpile", "swallow"], "pokeball": "cherishball"}, ], tier: "LC", }, @@ -6008,30 +7652,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["toxicspikes", "banefulbunker", "recover", "scald", "haze"], randomDoubleBattleMoves: ["scald", "banefulbunker", "haze", "wideguard", "lightscreen"], tier: "OU", + doublesTier: "(DUU)", }, mudbray: { tier: "LC", }, mudsdale: { - randomBattleMoves: ["earthquake", "closecombat", "payback", "rockslide", "heavyslam"], + randomBattleMoves: ["earthquake", "closecombat", "rockslide", "heavyslam", "stealthrock"], randomDoubleBattleMoves: ["highhorsepower", "heavyslam", "closecombat", "rockslide", "protect", "earthquake", "rocktomb"], + encounters: [ + {"generation": 7, "level": 29}, + ], tier: "PU", + doublesTier: "(DUU)", }, dewpider: { tier: "LC", }, araquanid: { - randomBattleMoves: ["liquidation", "leechlife", "lunge", "toxic", "mirrorcoat", "crunch"], + randomBattleMoves: ["liquidation", "leechlife", "lunge", "toxic", "mirrorcoat", "stickyweb"], randomDoubleBattleMoves: ["liquidation", "leechlife", "lunge", "poisonjab", "protect", "wideguard"], tier: "RU", + doublesTier: "DUU", + }, + araquanidtotem: { + eventPokemon: [ + {"generation": 7, "level": 25, "perfectIVs": 3, "moves": ["spiderweb", "bugbite", "bubblebeam", "bite"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, fomantis: { tier: "LC", }, lurantis: { - randomBattleMoves: ["leafstorm", "hiddenpowerfire", "gigadrain", "substitute"], + randomBattleMoves: ["leafstorm", "hiddenpowerice", "superpower", "knockoff", "synthesis"], randomDoubleBattleMoves: ["leafstorm", "gigadrain", "hiddenpowerice", "hiddenpowerfire", "protect"], tier: "PU", + doublesTier: "(DUU)", + }, + lurantistotem: { + eventPokemon: [ + {"generation": 7, "level": 30, "perfectIVs": 3, "moves": ["growth", "ingrain", "leafblade", "synthesis"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, morelull: { tier: "LC", @@ -6039,18 +7702,29 @@ exports.BattleFormatsData = { shiinotic: { randomBattleMoves: ["spore", "strengthsap", "moonblast", "substitute", "leechseed"], randomDoubleBattleMoves: ["spore", "gigadrain", "moonblast", "sludgebomb", "protect"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, salandit: { tier: "LC", }, salazzle: { - randomBattleMoves: ["nastyplot", "fireblast", "sludgewave", "hiddenpowerground"], + randomBattleMoves: ["nastyplot", "fireblast", "sludgewave", "hiddenpowergrass"], randomDoubleBattleMoves: ["protect", "flamethrower", "sludgebomb", "hiddenpowerground", "hiddenpowerice", "fakeout", "encore", "willowisp", "taunt"], eventPokemon: [ - {"generation": 7, "level": 50, "isHidden": false, "moves":["fakeout", "toxic", "sludgebomb", "flamethrower"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "isHidden": false, "moves": ["fakeout", "toxic", "sludgebomb", "flamethrower"], "pokeball": "cherishball"}, + ], + encounters: [ + {"generation": 7, "level": 16}, ], tier: "RU", + doublesTier: "(DUU)", + }, + salazzletotem: { + eventPokemon: [ + {"generation": 7, "level": 30, "perfectIVs": 3, "moves": ["smog", "doubleslap", "flameburst", "toxic"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, stufful: { tier: "LC", @@ -6059,240 +7733,299 @@ exports.BattleFormatsData = { randomBattleMoves: ["hammerarm", "icepunch", "swordsdance", "return", "shadowclaw", "doubleedge"], randomDoubleBattleMoves: ["hammerarm", "icepunch", "doubleedge", "protect", "wideguard"], eventPokemon: [ - {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves":["babydolleyes", "brutalswing", "superpower", "bind"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "gender": "F", "isHidden": true, "moves": ["babydolleyes", "brutalswing", "superpower", "bind"], "pokeball": "cherishball"}, ], tier: "RU", + doublesTier: "(DUU)", }, bounsweet: { tier: "LC", }, steenee: { eventPokemon: [ - {"generation": 7, "level": 20, "nature": "Naive", "isHidden": false, "abilities":["leafguard"], "moves":["magicalleaf", "doubleslap", "sweetscent"], "pokeball": "cherishball"}, + {"generation": 7, "level": 20, "nature": "Naive", "isHidden": false, "abilities": ["leafguard"], "moves": ["magicalleaf", "doubleslap", "sweetscent"], "pokeball": "cherishball"}, ], tier: "NFE", }, tsareena: { - randomBattleMoves: ["highjumpkick", "tropkick", "playrough", "uturn"], + randomBattleMoves: ["powerwhip", "highjumpkick", "knockoff", "uturn", "rapidspin", "synthesis"], randomDoubleBattleMoves: ["highjumpkick", "playrough", "tropkick", "uturn", "feint", "protect"], - tier: "UU", + tier: "RU", + doublesTier: "DUU", }, comfey: { randomBattleMoves: ["aromatherapy", "drainingkiss", "toxic", "synthesis", "uturn"], randomDoubleBattleMoves: ["floralhealing", "drainingkiss", "uturn", "lightscreen", "taunt"], eventPokemon: [ - {"generation": 7, "level": 10, "nature": "Jolly", "isHidden": false, "moves":["celebrate", "leechseed", "drainingkiss", "magicalleaf"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "nature": "Jolly", "isHidden": false, "moves": ["celebrate", "leechseed", "drainingkiss", "magicalleaf"], "pokeball": "cherishball"}, ], - tier: "RU", + tier: "NU", + doublesTier: "(DUU)", }, oranguru: { - randomBattleMoves: ["nastyplot", "psyshock", "focusblast", "thunderbolt"], + randomBattleMoves: ["nastyplot", "psyshock", "focusblast", "thunderbolt", "trickroom"], randomDoubleBattleMoves: ["trickroom", "foulplay", "instruct", "psychic", "protect", "lightscreen", "reflect"], eventPokemon: [ - {"generation": 7, "level": 1, "shiny": 1, "isHidden": false, "abilities":["telepathy"], "moves":["instruct", "psychic", "psychicterrain"], "pokeball": "cherishball"}, + {"generation": 7, "level": 1, "shiny": 1, "isHidden": false, "abilities": ["telepathy"], "moves": ["instruct", "psychic", "psychicterrain"], "pokeball": "cherishball"}, ], unreleasedHidden: true, - tier: "PU", + tier: "(PU)", + doublesTier: "DOU", }, passimian: { - randomBattleMoves: ["rockslide", "closecombat", "earthquake", "ironhead", "uturn"], + randomBattleMoves: ["rockslide", "closecombat", "earthquake", "ironhead", "uturn", "knockoff"], randomDoubleBattleMoves: ["closecombat", "uturn", "rockslide", "protect", "ironhead", "taunt"], eventPokemon: [ - {"generation": 7, "level": 1, "shiny": 1, "isHidden": false, "moves":["bestow", "fling", "feint"], "pokeball": "cherishball"}, + {"generation": 7, "level": 1, "shiny": 1, "isHidden": false, "moves": ["bestow", "fling", "feint"], "pokeball": "cherishball"}, ], unreleasedHidden: true, - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, wimpod: { tier: "LC", }, golisopod: { - randomBattleMoves: ["spikes", "firstimpression", "liquidation", "suckerpunch", "aquajet", "toxic", "leechlife"], + randomBattleMoves: ["spikes", "firstimpression", "liquidation", "aquajet", "toxic", "leechlife"], randomDoubleBattleMoves: ["firstimpression", "aquajet", "liquidation", "leechlife", "protect", "suckerpunch", "wideguard"], tier: "RU", + doublesTier: "(DUU)", }, sandygast: { tier: "LC", }, palossand: { - randomBattleMoves: ["shoreup", "earthpower", "shadowball", "protect", "toxic"], + randomBattleMoves: ["shoreup", "earthpower", "shadowball", "protect", "toxic", "stealthrock"], randomDoubleBattleMoves: ["shoreup", "protect", "shadowball", "earthpower"], - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, pyukumuku: { - randomBattleMoves: ["batonpass", "counter", "reflect", "lightscreen"], + randomBattleMoves: ["toxic", "recover", "counter", "reflect", "lightscreen"], randomDoubleBattleMoves: ["reflect", "lightscreen", "counter", "helpinghand", "safeguard", "memento"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, typenull: { + randomBattleMoves: ["return", "uturn", "swordsdance", "rest", "sleeptalk"], eventPokemon: [ - {"generation": 7, "level": 40, "shiny": 1, "moves":["crushclaw", "scaryface", "xscissor", "takedown"]}, + {"generation": 7, "level": 40, "shiny": 1, "perfectIVs": 3, "moves": ["crushclaw", "scaryface", "xscissor", "takedown"]}, + {"generation": 7, "level": 60, "shiny": 1, "perfectIVs": 3, "moves": ["metalsound", "ironhead", "doublehit", "airslash"]}, ], eventOnly: true, - tier: "NFE", + tier: "(PU)", + doublesTier: "NFE", }, silvally: { randomBattleMoves: ["swordsdance", "return", "doubleedge", "crunch", "flamecharge", "flamethrower", "icebeam", "uturn", "ironhead"], randomDoubleBattleMoves: ["protect", "doubleedge", "uturn", "crunch", "icebeam", "partingshot", "flamecharge", "swordsdance", "explosion"], - tier: "PU", + eventPokemon: [ + {"generation": 7, "level": 100, "shiny": true, "moves": ["multiattack", "partingshot", "punishment", "scaryface"], "pokeball": "cherishball"}, + ], + tier: "(PU)", + doublesTier: "(DUU)", }, silvallybug: { - randomBattleMoves: ["flamethrower", "icebeam", "thunderbolt", "uturn"], + randomBattleMoves: ["flamethrower", "icebeam", "thunderbolt", "uturn", "defog"], randomDoubleBattleMoves: ["protect", "uturn", "flamethrower", "icebeam", "thunderbolt", "thunderwave"], requiredItem: "Bug Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallydark: { randomBattleMoves: ["multiattack", "swordsdance", "flamecharge", "ironhead"], randomDoubleBattleMoves: ["protect", "multiattack", "icebeam", "partingshot", "uturn", "snarl", "thunderwave"], requiredItem: "Dark Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallydragon: { randomBattleMoves: ["multiattack", "ironhead", "flamecharge", "flamethrower", "icebeam", "dracometeor", "swordsdance", "uturn"], randomDoubleBattleMoves: ["protect", "dracometeor", "icebeam", "flamethrower", "partingshot", "uturn", "thunderwave"], requiredItem: "Dragon Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyelectric: { randomBattleMoves: ["multiattack", "flamethrower", "icebeam", "partingshot", "toxic"], randomDoubleBattleMoves: ["protect", "thunderbolt", "icebeam", "uturn", "partingshot", "snarl", "thunderwave"], requiredItem: "Electric Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyfairy: { randomBattleMoves: ["multiattack", "flamethrower", "rockslide", "thunderwave", "partingshot"], randomDoubleBattleMoves: ["protect", "multiattack", "uturn", "icebeam", "partingshot", "flamethrower", "thunderwave"], requiredItem: "Fairy Memory", tier: "PU", + doublesTier: "(DUU)", }, silvallyfighting: { randomBattleMoves: ["swordsdance", "multiattack", "shadowclaw", "flamecharge", "ironhead"], randomDoubleBattleMoves: ["protect", "multiattack", "rockslide", "swordsdance", "flamecharge"], requiredItem: "Fighting Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyfire: { - randomBattleMoves: ["multiattack", "icebeam", "thunderbolt", "uturn"], + randomBattleMoves: ["multiattack", "icebeam", "thunderbolt", "uturn", "defog"], randomDoubleBattleMoves: ["protect", "flamethrower", "snarl", "uturn", "thunderbolt", "icebeam", "thunderwave"], requiredItem: "Fire Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyflying: { randomBattleMoves: ["multiattack", "flamethrower", "ironhead", "partingshot", "thunderwave"], randomDoubleBattleMoves: ["protect", "multiattack", "partingshot", "swordsdance", "flamecharge", "uturn", "ironhead", "thunderwave"], requiredItem: "Flying Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyghost: { randomBattleMoves: ["multiattack", "flamethrower", "icebeam", "partingshot", "toxic"], randomDoubleBattleMoves: ["protect", "multiattack", "uturn", "icebeam", "partingshot"], requiredItem: "Ghost Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallygrass: { randomBattleMoves: ["multiattack", "flamethrower", "icebeam", "partingshot", "toxic"], randomDoubleBattleMoves: ["protect", "flamethrower", "multiattack", "icebeam", "uturn", "partingshot", "thunderwave"], requiredItem: "Grass Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyground: { randomBattleMoves: ["multiattack", "swordsdance", "flamecharge", "rockslide"], randomDoubleBattleMoves: ["protect", "multiattack", "icebeam", "thunderbolt", "flamecharge", "rockslide", "swordsdance"], requiredItem: "Ground Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyice: { randomBattleMoves: ["multiattack", "thunderbolt", "flamethrower", "uturn", "toxic"], randomDoubleBattleMoves: ["protect", "icebeam", "thunderbolt", "partingshot", "uturn", "thunderwave"], requiredItem: "Ice Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallypoison: { randomBattleMoves: ["multiattack", "flamethrower", "icebeam", "partingshot", "toxic"], randomDoubleBattleMoves: ["protect", "multiattack", "uturn", "partingshot", "flamethrower", "icebeam", "thunderwave"], requiredItem: "Poison Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallypsychic: { randomBattleMoves: ["multiattack", "flamethrower", "rockslide", "partingshot", "thunderwave"], randomDoubleBattleMoves: ["protect", "multiattack", "partingshot", "uturn", "flamethrower", "thunderwave"], requiredItem: "Psychic Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallyrock: { randomBattleMoves: ["multiattack", "flamethrower", "icebeam", "partingshot", "toxic"], randomDoubleBattleMoves: ["protect", "rockslide", "uturn", "icebeam", "flamethrower", "partingshot"], requiredItem: "Rock Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, silvallysteel: { - randomBattleMoves: ["multiattack", "crunch", "flamethrower", "thunderbolt"], + randomBattleMoves: ["multiattack", "crunch", "flamethrower", "thunderbolt", "defog"], randomDoubleBattleMoves: ["protect", "multiattack", "swordsdance", "rockslide", "flamecharge", "uturn", "partingshot"], requiredItem: "Steel Memory", - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, silvallywater: { - randomBattleMoves: ["multiattack", "icebeam", "thunderbolt", "partingshot"], + randomBattleMoves: ["multiattack", "icebeam", "thunderbolt", "partingshot", "defog"], randomDoubleBattleMoves: ["protect", "multiattack", "icebeam", "thunderbolt", "flamethrower", "partingshot", "uturn", "thunderwave"], requiredItem: "Water Memory", - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, minior: { randomBattleMoves: ["shellsmash", "powergem", "acrobatics", "earthquake"], randomDoubleBattleMoves: ["shellsmash", "powergem", "acrobatics", "earthquake", "protect"], - tier: "NU", + tier: "PUBL", + doublesTier: "(DUU)", }, miniormeteor: { + requiredAbility: 'Shields Down', battleOnly: true, }, komala: { randomBattleMoves: ["return", "suckerpunch", "woodhammer", "earthquake", "playrough", "uturn"], randomDoubleBattleMoves: ["protect", "return", "uturn", "suckerpunch", "woodhammer", "shadowclaw", "playrough", "swordsdance"], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, turtonator: { - randomBattleMoves: ["fireblast", "shelltrap", "earthquake", "dragontail", "explosion", "dracometeor"], + randomBattleMoves: ["fireblast", "shellsmash", "earthquake", "dragontail", "explosion", "dragonpulse", "dracometeor"], randomDoubleBattleMoves: ["dragonpulse", "dracometeor", "fireblast", "shellsmash", "protect", "focusblast", "explosion"], eventPokemon: [ - {"generation": 7, "level": 1, "shiny": 1, "moves":["flamethrower", "bodyslam", "wideguard"], "pokeball": "cherishball"}, - {"generation": 7, "level": 30, "gender": "M", "nature": "Brave", "moves":["flamethrower", "shelltrap", "dragontail"], "pokeball": "cherishball"}, + {"generation": 7, "level": 1, "shiny": 1, "moves": ["flamethrower", "bodyslam", "wideguard"], "pokeball": "cherishball"}, + {"generation": 7, "level": 30, "gender": "M", "nature": "Brave", "moves": ["flamethrower", "shelltrap", "dragontail"], "pokeball": "cherishball"}, ], - tier: "PU", + tier: "(PU)", + doublesTier: "(DUU)", }, togedemaru: { - randomBattleMoves: ["spikyshield", "zingzap", "nuzzle", "uturn", "wish"], - randomDoubleBattleMoves: ["zingzap", "nuzzle", "spikyshield", "encore", "fakeout", "uturn"], - tier: "PU", + randomBattleMoves: ["ironhead", "spikyshield", "zingzap", "nuzzle", "uturn", "wish"], + randomDoubleBattleMoves: ["ironhead", "zingzap", "nuzzle", "spikyshield", "encore", "fakeout", "uturn"], + tier: "NU", + doublesTier: "DOU", + }, + togedemarutotem: { + eventPokemon: [ + {"generation": 7, "level": 30, "perfectIVs": 3, "moves": ["nuzzle", "magnetrise", "discharge", "zingzap"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, mimikyu: { - randomBattleMoves: ["swordsdance", "shadowsneak", "playrough", "woodhammer", "shadowclaw"], + randomBattleMoves: ["swordsdance", "shadowsneak", "playrough", "taunt", "shadowclaw"], randomDoubleBattleMoves: ["trickroom", "shadowclaw", "playrough", "woodhammer", "willowisp", "shadowsneak", "swordsdance", "protect"], eventPokemon: [ - {"generation": 7, "level": 10, "moves":["copycat", "babydolleyes", "splash", "astonish"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "moves": ["copycat", "babydolleyes", "splash", "astonish"], "pokeball": "cherishball"}, + {"generation": 7, "level": 10, "shiny": true, "moves": ["astonish", "playrough", "copycat", "substitute"], "pokeball": "cherishball"}, ], tier: "OU", + doublesTier: "DOU", }, mimikyubusted: { + requiredAbility: 'Disguise', + battleOnly: true, + }, + mimikyutotem: { + eventPokemon: [ + {"generation": 7, "level": 40, "perfectIVs": 3, "moves": ["feintattack", "charm", "slash", "shadowclaw"], "pokeball": "pokeball"}, + ], + eventOnly: true, + }, + mimikyubustedtotem: { + requiredAbility: 'Disguise', battleOnly: true, }, bruxish: { - randomBattleMoves: ["psychicfangs", "crunch", "waterfall", "icefang", "aquajet", "swordsdance"], - randomDoubleBattleMoves: ["trickroom", "psychicfangs", "crunch", "waterfall", "protect", "swordsdance"], - tier: "RU", + randomBattleMoves: ["psychicfangs", "crunch", "liquidation", "icefang", "aquajet", "swordsdance"], + randomDoubleBattleMoves: ["trickroom", "psychicfangs", "crunch", "liquidation", "protect", "swordsdance"], + tier: "NUBL", + doublesTier: "DUU", }, drampa: { randomBattleMoves: ["dracometeor", "dragonpulse", "hypervoice", "fireblast", "thunderbolt", "glare", "substitute", "roost"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "hypervoice", "fireblast", "icebeam", "energyball", "thunderbolt", "protect", "roost"], eventPokemon: [ - {"generation": 7, "level": 1, "shiny": 1, "isHidden": true, "moves":["playnice", "echoedvoice", "hurricane"], "pokeball": "cherishball"}, + {"generation": 7, "level": 1, "shiny": 1, "isHidden": true, "moves": ["playnice", "echoedvoice", "hurricane"], "pokeball": "cherishball"}, ], tier: "PU", + doublesTier: "(DUU)", }, dhelmise: { - randomBattleMoves: ["swordsdance", "powerwhip", "phantomforce", "anchorshot", "switcheroo", "earthquake"], + randomBattleMoves: ["powerwhip", "anchorshot", "knockoff", "earthquake", "rapidspin", "synthesis"], randomDoubleBattleMoves: ["powerwhip", "shadowclaw", "anchorshot", "protect", "gyroball"], - tier: "RU", + tier: "NU", + doublesTier: "(DUU)", }, jangmoo: { tier: "LC", @@ -6301,54 +8034,69 @@ exports.BattleFormatsData = { tier: "NFE", }, kommoo: { - randomBattleMoves: ["dragondance", "outrage", "dragonclaw", "skyuppercut", "poisonjab"], + randomBattleMoves: ["dragondance", "outrage", "closecombat", "poisonjab", "clangingscales"], randomDoubleBattleMoves: ["clangingscales", "focusblast", "flashcannon", "substitute", "protect", "dracometeor"], - tier: "RU", + encounters: [ + {"generation": 7, "level": 41}, + ], + tier: "UU", + doublesTier: "DOU", + }, + kommoototem: { + eventPokemon: [ + {"generation": 7, "level": 50, "perfectIVs": 3, "moves": ["workup", "screech", "irondefense", "dragonclaw"], "pokeball": "pokeball"}, + ], + eventOnly: true, }, tapukoko: { randomBattleMoves: ["wildcharge", "voltswitch", "naturesmadness", "bravebird", "uturn", "dazzlinggleam"], randomDoubleBattleMoves: ["wildcharge", "voltswitch", "dazzlinggleam", "bravebird", "protect", "thunderbolt", "hiddenpowerice", "taunt", "skydrop", "naturesmadness", "uturn"], eventPokemon: [ - {"generation": 7, "level": 60, "isHidden": false, "moves":["naturesmadness", "discharge", "agility", "electroball"]}, - {"generation": 7, "level": 60, "shiny": true, "nature": "Timid", "isHidden": false, "moves":["naturesmadness", "discharge", "agility", "electroball"], "pokeball": "cherishball"}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["naturesmadness", "discharge", "agility", "electroball"]}, + {"generation": 7, "level": 60, "shiny": true, "nature": "Timid", "isHidden": false, "moves": ["naturesmadness", "discharge", "agility", "electroball"], "pokeball": "cherishball"}, ], eventOnly: true, unreleasedHidden: true, tier: "OU", + doublesTier: "DOU", }, tapulele: { - randomBattleMoves: ["moonblast", "psyshock", "calmmind", "focusblast", "taunt"], + randomBattleMoves: ["moonblast", "psychic", "psyshock", "calmmind", "focusblast", "hiddenpowerfire", "taunt"], randomDoubleBattleMoves: ["moonblast", "psychic", "dazzlinggleam", "focusblast", "protect", "taunt", "shadowball", "thunderbolt"], eventPokemon: [ - {"generation": 7, "level": 60, "isHidden": false, "moves":["naturesmadness", "extrasensory", "flatter", "moonblast"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["naturesmadness", "extrasensory", "flatter", "moonblast"]}, + {"generation": 7, "level": 60, "shiny": true, "isHidden": false, "moves": ["naturesmadness", "extrasensory", "flatter", "moonblast"], "pokeball": "cherishball"}, ], eventOnly: true, unreleasedHidden: true, tier: "OU", + doublesTier: "DOU", }, tapubulu: { randomBattleMoves: ["woodhammer", "hornleech", "stoneedge", "superpower", "megahorn", "bulkup"], randomDoubleBattleMoves: ["woodhammer", "hornleech", "stoneedge", "superpower", "leechseed", "protect", "naturesmadness"], eventPokemon: [ - {"generation": 7, "level": 60, "isHidden": false, "moves":["naturesmadness", "zenheadbutt", "megahorn", "skullbash"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["naturesmadness", "zenheadbutt", "megahorn", "skullbash"]}, ], eventOnly: true, unreleasedHidden: true, tier: "OU", + doublesTier: "DOU", }, tapufini: { - randomBattleMoves: ["calmmind", "moonblast", "surf", "substitute", "icebeam", "hydropump"], + randomBattleMoves: ["calmmind", "moonblast", "scald", "taunt", "icebeam", "hydropump"], randomDoubleBattleMoves: ["muddywater", "moonblast", "calmmind", "icebeam", "healpulse", "protect", "taunt", "swagger"], eventPokemon: [ - {"generation": 7, "level": 60, "isHidden": false, "moves":["naturesmadness", "muddywater", "aquaring", "hydropump"]}, + {"generation": 7, "level": 60, "isHidden": false, "moves": ["naturesmadness", "muddywater", "aquaring", "hydropump"]}, ], eventOnly: true, unreleasedHidden: true, tier: "OU", + doublesTier: "DOU", }, cosmog: { eventPokemon: [ - {"generation": 7, "level": 5, "moves":["splash"]}, + {"generation": 7, "level": 5, "moves": ["splash"]}, ], eventOnly: true, tier: "LC", @@ -6360,111 +8108,210 @@ exports.BattleFormatsData = { randomBattleMoves: ["sunsteelstrike", "zenheadbutt", "flareblitz", "morningsun", "stoneedge", "earthquake"], randomDoubleBattleMoves: ["wideguard", "protect", "sunsteelstrike", "morningsun", "zenheadbutt", "flareblitz"], eventPokemon: [ - {"generation": 7, "level": 55, "moves":["sunsteelstrike", "cosmicpower", "crunch", "zenheadbutt"]}, + {"generation": 7, "level": 55, "moves": ["sunsteelstrike", "cosmicpower", "crunch", "zenheadbutt"]}, + {"generation": 7, "level": 60, "moves": ["sunsteelstrike", "cosmicpower", "crunch", "zenheadbutt"]}, ], tier: "Uber", + doublesTier: "DUber", }, lunala: { randomBattleMoves: ["moongeistbeam", "psyshock", "calmmind", "focusblast", "roost"], randomDoubleBattleMoves: ["wideguard", "protect", "roost", "moongeistbeam", "psychic", "focusblast"], eventPokemon: [ - {"generation": 7, "level": 55, "moves":["moongeistbeam", "cosmicpower", "nightdaze", "shadowball"]}, + {"generation": 7, "level": 55, "moves": ["moongeistbeam", "cosmicpower", "nightdaze", "shadowball"]}, + {"generation": 7, "level": 60, "moves": ["moongeistbeam", "cosmicpower", "nightdaze", "shadowball"]}, ], tier: "Uber", + doublesTier: "DUber", }, nihilego: { randomBattleMoves: ["stealthrock", "acidspray", "powergem", "toxicspikes", "sludgewave"], randomDoubleBattleMoves: ["powergem", "sludgebomb", "grassknot", "protect", "thunderbolt", "hiddenpowerice"], eventPokemon: [ - {"generation": 7, "level": 55, "moves":["powergem", "mirrorcoat", "acidspray", "venomdrench"]}, + {"generation": 7, "level": 55, "moves": ["powergem", "mirrorcoat", "acidspray", "venomdrench"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["powergem", "acidspray", "stealthrock", "mirrorcoat"]}, ], eventOnly: true, - tier: "OU", + tier: "UU", + doublesTier: "(DUU)", }, buzzwole: { - randomBattleMoves: ["superpower", "leechlife", "stoneedge", "poisonjab", "earthquake"], - randomDoubleBattleMoves: ["hammerarm", "superpower", "leechlife", "icepunch", "poisonjab"], + randomBattleMoves: ["superpower", "drainpunch", "leechlife", "stoneedge", "poisonjab", "earthquake"], + randomDoubleBattleMoves: ["drainpunch", "superpower", "leechlife", "icepunch", "poisonjab", "protect"], eventPokemon: [ - {"generation": 7, "level": 65, "moves":["counter", "hammerarm", "lunge", "dynamicpunch"]}, + {"generation": 7, "level": 65, "moves": ["counter", "hammerarm", "lunge", "dynamicpunch"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["counter", "hammerarm", "lunge", "dynamicpunch"]}, ], eventOnly: true, - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, pheromosa: { randomBattleMoves: ["highjumpkick", "uturn", "icebeam", "poisonjab", "bugbuzz"], randomDoubleBattleMoves: ["highjumpkick", "uturn", "icebeam", "poisonjab", "bugbuzz", "protect", "speedswap"], eventPokemon: [ - {"generation": 7, "level": 60, "moves":["triplekick", "lunge", "bugbuzz", "mefirst"]}, + {"generation": 7, "level": 60, "moves": ["triplekick", "lunge", "bugbuzz", "mefirst"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["triplekick", "lunge", "bugbuzz", "mefirst"]}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, xurkitree: { randomBattleMoves: ["thunderbolt", "voltswitch", "energyball", "dazzlinggleam", "hiddenpowerice"], randomDoubleBattleMoves: ["thunderbolt", "hiddenpowerice", "tailglow", "protect", "energyball", "hypnosis"], eventPokemon: [ - {"generation": 7, "level": 65, "moves":["hypnosis", "discharge", "electricterrain", "powerwhip"]}, + {"generation": 7, "level": 65, "moves": ["hypnosis", "discharge", "electricterrain", "powerwhip"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["hypnosis", "discharge", "electricterrain", "powerwhip"]}, ], eventOnly: true, - tier: "UU", + tier: "UUBL", + doublesTier: "DUU", }, celesteela: { randomBattleMoves: ["autotomize", "heavyslam", "airslash", "fireblast", "earthquake", "leechseed", "protect"], randomDoubleBattleMoves: ["protect", "heavyslam", "fireblast", "earthquake", "wideguard", "leechseed", "flamethrower", "substitute"], eventPokemon: [ - {"generation": 7, "level": 65, "moves":["autotomize", "seedbomb", "skullbash", "irondefense"]}, + {"generation": 7, "level": 65, "moves": ["autotomize", "seedbomb", "skullbash", "irondefense"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["autotomize", "seedbomb", "skullbash", "irondefense"]}, ], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, kartana: { - randomBattleMoves: ["leafblade", "sacredsword", "smartstrike", "psychocut", "swordsdance"], - randomDoubleBattleMoves: ["leafblade", "sacredsword", "smartstrike", "psychocut", "protect", "nightslash"], + randomBattleMoves: ["leafblade", "sacredsword", "smartstrike", "knockoff", "swordsdance"], + randomDoubleBattleMoves: ["leafblade", "sacredsword", "smartstrike", "psychocut", "protect", "knockoff"], eventPokemon: [ - {"generation": 7, "level": 60, "moves":["leafblade", "xscissor", "detect", "airslash"]}, + {"generation": 7, "level": 60, "moves": ["leafblade", "xscissor", "detect", "airslash"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["leafblade", "xscissor", "detect", "airslash"]}, ], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, guzzlord: { - randomBattleMoves: ["dracometeor", "hammerarm", "crunch", "earthquake", "fireblast"], + randomBattleMoves: ["dracometeor", "hammerarm", "knockoff", "earthquake", "fireblast"], randomDoubleBattleMoves: ["dracometeor", "crunch", "darkpulse", "wideguard", "fireblast", "protect"], eventPokemon: [ - {"generation": 7, "level": 70, "moves":["thrash", "gastroacid", "heavyslam", "wringout"]}, + {"generation": 7, "level": 70, "moves": ["thrash", "gastroacid", "heavyslam", "wringout"]}, + {"generation": 7, "level": 60, "shiny": 1, "moves": ["hammerarm", "thrash", "gastroacid", "heavyslam"]}, ], eventOnly: true, - tier: "PU", + tier: "NU", + doublesTier: "(DUU)", }, necrozma: { - randomBattleMoves: ["autotomize", "swordsdance", "stoneedge", "psychocut", "earthquake", "psyshock"], - randomDoubleBattleMoves: ["calmmind", "autotomize", "irondefense", "trickroom", "moonlight", "storedpower", "psyshock"], + randomBattleMoves: ["calmmind", "photongeyser", "darkpulse", "moonlight", "stealthrock", "storedpower"], + randomDoubleBattleMoves: ["calmmind", "trickroom", "moonlight", "storedpower", "psyshock", "darkpulse"], + eventPokemon: [ + {"generation": 7, "level": 75, "moves": ["stealthrock", "irondefense", "wringout", "prismaticlaser"]}, + {"generation": 7, "level": 65, "moves": ["photongeyser", "irondefense", "powergem", "nightslash"]}, + ], + eventOnly: true, + tier: "RU", + doublesTier: "(DUU)", + }, + necrozmaduskmane: { + randomBattleMoves: ["swordsdance", "sunsteelstrike", "photongeyser", "earthquake", "knockoff", "autotomize"], + randomDoubleBattleMoves: ["swordsdance", "sunsteelstrike", "photongeyser", "earthquake", "knockoff", "rockslide"], + eventPokemon: [ + {"generation": 7, "level": 65, "moves": ["sunsteelstrike"]}, + ], + eventOnly: true, + tier: "Uber", + doublesTier: "DUber", + }, + necrozmadawnwings: { + randomBattleMoves: ["calmmind", "moongeistbeam", "photongeyser", "heatwave", "powergem", "trickroom"], eventPokemon: [ - {"generation": 7, "level": 75, "moves":["stealthrock", "irondefense", "wringout", "prismaticlaser"]}, + {"generation": 7, "level": 65, "moves": ["moongeistbeam"]}, ], eventOnly: true, - tier: "BL3", + tier: "Uber", + doublesTier: "DUber", + }, + necrozmaultra: { + requiredItem: "Ultranecrozium Z", + battleOnly: true, + tier: "Uber", + doublesTier: "DUber", }, magearna: { randomBattleMoves: ["shiftgear", "flashcannon", "aurasphere", "fleurcannon", "ironhead", "thunderbolt", "icebeam"], randomDoubleBattleMoves: ["dazzlinggleam", "flashcannon", "substitute", "protect", "trickroom", "fleurcannon", "aurasphere", "voltswitch"], eventPokemon: [ - {"generation": 7, "level": 50, "moves":["fleurcannon", "flashcannon", "luckychant", "helpinghand"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "moves": ["fleurcannon", "flashcannon", "luckychant", "helpinghand"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "OU", + doublesTier: "DUber", }, magearnaoriginal: { isUnreleased: true, tier: "Unreleased", }, marshadow: { - randomBattleMoves: ["spectralthief", "closecombat", "stoneedge", "shadowsneak", "icepunch"], + randomBattleMoves: ["bulkup", "spectralthief", "closecombat", "rocktomb", "shadowsneak", "icepunch"], randomDoubleBattleMoves: ["spectralthief", "closecombat", "shadowsneak", "icepunch", "protect"], eventPokemon: [ - {"generation": 7, "level": 50, "moves":["spectralthief", "closecombat", "forcepalm", "shadowball"], "pokeball": "cherishball"}, + {"generation": 7, "level": 50, "moves": ["spectralthief", "closecombat", "forcepalm", "shadowball"], "pokeball": "cherishball"}, ], eventOnly: true, tier: "Uber", + doublesTier: "DUber", + }, + poipole: { + eventPokemon: [ + {"generation": 7, "level": 40, "shiny": 1, "perfectIVs": 3, "moves": ["charm", "venomdrench", "nastyplot", "poisonjab"], "pokeball": "pokeball"}, + {"generation": 7, "level": 40, "shiny": true, "nature": "Modest", "perfectIVs": 3, "moves": ["venomdrench", "nastyplot", "poisonjab", "dragonpulse"], "pokeball": "cherishball"}, + ], + eventOnly: true, + tier: "NFE", + }, + naganadel: { + randomBattleMoves: ["nastyplot", "dragonpulse", "sludgewave", "fireblast", "dracometeor", "uturn"], + randomDoubleBattleMoves: ["tailwind", "dragonpulse", "sludgebomb", "fireblast", "dracometeor", "uturn", "protect"], + tier: "Uber", + doublesTier: "DUU", + }, + stakataka: { + randomBattleMoves: ["gyroball", "stoneedge", "trickroom", "earthquake", "superpower", "stealthrock"], + randomDoubleBattleMoves: ["gyroball", "stoneedge", "trickroom", "earthquake", "superpower", "stealthrock", "rockslide"], + eventPokemon: [ + {"generation": 7, "level": 60, "shiny": 1, "moves": ["irondefense", "ironhead", "rockblast", "wideguard"]}, + ], + eventOnly: true, + tier: "RUBL", + doublesTier: "DOU", + }, + blacephalon: { + randomBattleMoves: ["mindblown", "fireblast", "shadowball", "hiddenpowerice", "trick", "willowisp", "calmmind"], + randomDoubleBattleMoves: ["mindblown", "fireblast", "shadowball", "hiddenpowerice", "heatwave", "protect"], + eventPokemon: [ + {"generation": 7, "level": 60, "shiny": 1, "moves": ["fireblast", "shadowball", "trick", "mindblown"]}, + ], + eventOnly: true, + tier: "OU", + doublesTier: "DUU", + }, + zeraora: { + randomBattleMoves: ["plasmafists", "closecombat", "voltswitch", "hiddenpowerice", "knockoff", "grassknot", "workup"], + randomDoubleBattleMoves: ["plasmafists", "closecombat", "voltswitch", "hiddenpowerice", "knockoff", "grassknot", "fakeout", "protect"], + eventPokemon: [ + {"generation": 7, "level": 50, "moves": ["plasmafists", "thunderpunch", "closecombat", "thunder"]}, + ], + eventOnly: true, + tier: "UU", + doublesTier: "(DUU)", + }, + meltan: { + isNonstandard: true, + tier: "Illegal", + }, + melmetal: { + isNonstandard: true, + tier: "Illegal", }, missingno: { randomBattleMoves: ["watergun", "skyattack", "doubleedge", "metronome"], @@ -6477,7 +8324,7 @@ exports.BattleFormatsData = { tier: "CAP", }, necturna: { - randomBattleMoves: ["powerwhip", "hornleech", "willowisp", "shadowsneak", "stoneedge", "sacredfire", "boltstrike", "vcreate", "extremespeed", "closecombat", "shellsmash", "spore", "milkdrink", "batonpass", "stickyweb"], + randomBattleMoves: ["powerwhip", "hornleech", "willowisp", "shadowsneak", "stoneedge", "sacredfire", "boltstrike", "vcreate", "extremespeed", "closecombat", "shellsmash", "spore", "milkdrink", "stickyweb"], isNonstandard: true, tier: "CAP", }, @@ -6531,7 +8378,41 @@ exports.BattleFormatsData = { randomBattleMoves: ["aurasphere", "moonblast", "taunt", "partingshot", "gigadrain", "yawn"], isNonstandard: true, eventPokemon: [ - {"generation": 6, "level": 16, "isHidden": false, "abilities":["naturalcure"], "moves":["celebrate", "holdhands", "fly", "metronome"], "pokeball": "cherishball"}, + {"generation": 6, "level": 16, "isHidden": false, "abilities": ["naturalcure"], "moves": ["celebrate", "holdhands", "fly", "metronome"], "pokeball": "cherishball"}, + ], + tier: "CAP", + }, + pajantom: { + randomBattleMoves: ["spiritshackle", "dragonclaw", "toxicspikes", "psychicfangs", "earthquake", "substitute", "leechlife"], + isNonstandard: true, + tier: "CAP", + }, + jumbao: { + randomBattleMoves: ["moonblast", "flameburst", "focusblast", "synthesis", "solarbeam", "hiddenpowerground", "healingwish"], + isNonstandard: true, + tier: "CAP", + }, + caribolt: { + randomBattleMoves: ["swordsdance", "quickattack", "powerwhip", "return", "voltswitch"], + isNonstandard: true, + eventPokemon: [ + {"generation": 7, "level": 50, "moves": ["celebrate", "hornleech", "wildcharge", "metronome"], "pokeball": "cherishball"}, + ], + tier: "CAP", + }, + smokomodo: { + randomBattleMoves: ["flareblitz", "earthquake", "hiddenpowerice", "toxic", "stealthrock"], + isNonstandard: true, + eventPokemon: [ + {"generation": 7, "level": 50, "moves": ["celebrate", "eruption", "magnitude", "camouflage"], "pokeball": "cherishball"}, + ], + tier: "CAP", + }, + snaelstrom: { + randomBattleMoves: ["stealthrock", "icebeam", "toxic", "spikyshield", "scald", "rapidspin"], + isNonstandard: true, + eventPokemon: [ + {"generation": 7, "level": 50, "moves": ["celebrate", "liquidation", "leechlife", "metronome"], "pokeball": "cherishball"}, ], tier: "CAP", }, @@ -6650,6 +8531,26 @@ exports.BattleFormatsData = { isNonstandard: true, tier: "CAP LC", }, + rebble: { + isNonstandard: true, + tier: "CAP LC", + }, + tactite: { + isNonstandard: true, + tier: "CAP NFE", + }, + privatyke: { + isNonstandard: true, + tier: "CAP LC", + }, + voodoll: { + isNonstandard: true, + tier: "CAP LC", + }, + mumbao: { + isNonstandard: true, + tier: "CAP LC", + }, pokestarufo: { isNonstandard: true, eventPokemon: [ @@ -6811,3 +8712,5 @@ exports.BattleFormatsData = { tier: "Illegal", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/items.js b/data/items.js index 7f5fcbff97338..68f11d5f0b2f7 100644 --- a/data/items.js +++ b/data/items.js @@ -1,19 +1,20 @@ 'use strict'; -exports.BattleItems = { +/**@type {{[k: string]: ItemData}} */ +let BattleItems = { "abomasite": { id: "abomasite", name: "Abomasite", spritenum: 575, megaStone: "Abomasnow-Mega", megaEvolves: "Abomasnow", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 674, gen: 6, - desc: "If holder is an Abomasnow, this item allows it to Mega Evolve in battle.", + desc: "If held by an Abomasnow, this item allows it to Mega Evolve in battle.", }, "absolite": { id: "absolite", @@ -21,13 +22,13 @@ exports.BattleItems = { spritenum: 576, megaStone: "Absol-Mega", megaEvolves: "Absol", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 677, gen: 6, - desc: "If holder is an Absol, this item allows it to Mega Evolve in battle.", + desc: "If held by an Absol, this item allows it to Mega Evolve in battle.", }, "absorbbulb": { id: "absorbbulb", @@ -36,7 +37,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move.type === 'Water' && target.useItem()) { this.boost({spa: 1}); } @@ -53,14 +54,14 @@ exports.BattleItems = { basePower: 60, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && user.baseTemplate.species === 'Dialga' && (move.type === 'Steel' || move.type === 'Dragon')) { return this.chainModify([0x1333, 0x1000]); } }, num: 135, gen: 4, - desc: "If holder is a Dialga, its Steel- and Dragon-type attacks have 1.2x power.", + desc: "If held by a Dialga, its Steel- and Dragon-type attacks have 1.2x power.", }, "adrenalineorb": { id: "adrenalineorb", @@ -69,7 +70,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onAfterBoost: function (boost, target, source, effect) { + onAfterBoost(boost, target, source, effect) { if (effect.id === 'intimidate' && target.useItem()) { this.boost({spe: 1}); } @@ -84,13 +85,13 @@ exports.BattleItems = { spritenum: 577, megaStone: "Aerodactyl-Mega", megaEvolves: "Aerodactyl", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 672, gen: 6, - desc: "If holder is an Aerodactyl, this item allows it to Mega Evolve in battle.", + desc: "If held by an Aerodactyl, this item allows it to Mega Evolve in battle.", }, "aggronite": { id: "aggronite", @@ -98,13 +99,13 @@ exports.BattleItems = { spritenum: 578, megaStone: "Aggron-Mega", megaEvolves: "Aggron", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 667, gen: 6, - desc: "If holder is an Aggron, this item allows it to Mega Evolve in battle.", + desc: "If held by an Aggron, this item allows it to Mega Evolve in battle.", }, "aguavberry": { id: "aguavberry", @@ -115,15 +116,15 @@ exports.BattleItems = { basePower: 80, type: "Dragon", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 2); if (pokemon.getNature().minus === 'spd') { pokemon.addVolatile('confusion'); @@ -140,13 +141,13 @@ exports.BattleItems = { fling: { basePower: 10, }, - onStart: function (target) { + onStart(target) { if (!target.ignoringItem() && !this.getPseudoWeather('gravity')) { this.add('-item', target, 'Air Balloon'); } }, // airborneness implemented in sim/pokemon.js:Pokemon#isGrounded - onAfterDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { this.debug('effect: ' + effect.id); if (effect.effectType === 'Move' && effect.id !== 'confused') { this.add('-enditem', target, 'Air Balloon'); @@ -155,7 +156,7 @@ exports.BattleItems = { this.runEvent('AfterUseItem', target, null, null, 'airballoon'); } }, - onAfterSubDamage: function (damage, target, source, effect) { + onAfterSubDamage(damage, target, source, effect) { this.debug('effect: ' + effect.id); if (effect.effectType === 'Move' && effect.id !== 'confused') { this.add('-enditem', target, 'Air Balloon'); @@ -174,13 +175,13 @@ exports.BattleItems = { spritenum: 579, megaStone: "Alakazam-Mega", megaEvolves: "Alakazam", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 679, gen: 6, - desc: "If holder is an Alakazam, this item allows it to Mega Evolve in battle.", + desc: "If held by an Alakazam, this item allows it to Mega Evolve in battle.", }, "aloraichiumz": { id: "aloraichiumz", @@ -192,7 +193,7 @@ exports.BattleItems = { zMoveUser: ["Raichu-Alola"], num: 803, gen: 7, - desc: "If holder is an Alolan Raichu with Thunderbolt, it can use Stoked Sparksurfer.", + desc: "If held by an Alolan Raichu with Thunderbolt, it can use Stoked Sparksurfer.", }, "altarianite": { id: "altarianite", @@ -200,13 +201,13 @@ exports.BattleItems = { spritenum: 615, megaStone: "Altaria-Mega", megaEvolves: "Altaria", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 755, gen: 6, - desc: "If holder is an Altaria, this item allows it to Mega Evolve in battle.", + desc: "If held by an Altaria, this item allows it to Mega Evolve in battle.", }, "ampharosite": { id: "ampharosite", @@ -214,13 +215,13 @@ exports.BattleItems = { spritenum: 580, megaStone: "Ampharos-Mega", megaEvolves: "Ampharos", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 658, gen: 6, - desc: "If holder is an Ampharos, this item allows it to Mega Evolve in battle.", + desc: "If held by an Ampharos, this item allows it to Mega Evolve in battle.", }, "apicotberry": { id: "apicotberry", @@ -231,13 +232,13 @@ exports.BattleItems = { basePower: 100, type: "Ground", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { - this.boost({spd:1}); + onEat(pokemon) { + this.boost({spd: 1}); }, num: 205, gen: 3, @@ -263,12 +264,12 @@ exports.BattleItems = { basePower: 80, type: "Ice", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'frz') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'frz') { pokemon.cureStatus(); } @@ -285,14 +286,13 @@ exports.BattleItems = { basePower: 80, }, onModifySpDPriority: 1, - onModifySpD: function (spd) { + onModifySpD(spd) { return this.chainModify(1.5); }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (this.getMove(moves[i].move).category === 'Status') { - pokemon.disableMove(moves[i].id); + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.move).category === 'Status') { + pokemon.disableMove(moveSlot.id); } } }, @@ -306,13 +306,13 @@ exports.BattleItems = { spritenum: 617, megaStone: "Audino-Mega", megaEvolves: "Audino", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 757, gen: 6, - desc: "If holder is an Audino, this item allows it to Mega Evolve in battle.", + desc: "If held by an Audino, this item allows it to Mega Evolve in battle.", }, "babiriberry": { id: "babiriberry", @@ -323,7 +323,7 @@ exports.BattleItems = { basePower: 80, type: "Steel", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Steel' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -332,7 +332,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 199, gen: 4, desc: "Halves damage taken from a supereffective Steel-type attack. Single use.", @@ -343,13 +343,13 @@ exports.BattleItems = { spritenum: 582, megaStone: "Banette-Mega", megaEvolves: "Banette", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 668, gen: 6, - desc: "If holder is a Banette, this item allows it to Mega Evolve in battle.", + desc: "If held by a Banette, this item allows it to Mega Evolve in battle.", }, "beastball": { id: "beastball", @@ -365,13 +365,13 @@ exports.BattleItems = { spritenum: 628, megaStone: "Beedrill-Mega", megaEvolves: "Beedrill", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 770, gen: 6, - desc: "If holder is a Beedrill, this item allows it to Mega Evolve in battle.", + desc: "If held by a Beedrill, this item allows it to Mega Evolve in battle.", }, "belueberry": { id: "belueberry", @@ -395,7 +395,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { if (this.runEvent('TryHeal', pokemon) && pokemon.useItem()) { this.heal(20); @@ -414,10 +414,11 @@ exports.BattleItems = { basePower: 10, }, onTryHealPriority: 1, - onTryHeal: function (damage, target, source, effect) { + onTryHeal(damage, target, source, effect) { + /**@type {{[k: string]: number}} */ let heals = {drain: 1, leechseed: 1, ingrain: 1, aquaring: 1, strengthsap: 1}; if (heals[effect.id]) { - return Math.ceil((damage * 1.3) - 0.5); // Big Root rounds half down + return this.chainModify([0x14CC, 0x1000]); } }, num: 296, @@ -444,7 +445,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Fighting') { return this.chainModify([0x1333, 0x1000]); } @@ -462,7 +463,16 @@ exports.BattleItems = { }, onResidualOrder: 5, onResidualSubOrder: 2, - onResidual: function (pokemon) { + onResidual(pokemon) { + if (this.isTerrain('grassyterrain')) return; + if (pokemon.hasType('Poison')) { + this.heal(pokemon.maxhp / 16); + } else { + this.damage(pokemon.maxhp / 8); + } + }, + onTerrain(pokemon) { + if (!this.isTerrain('grassyterrain')) return; if (pokemon.hasType('Poison')) { this.heal(pokemon.maxhp / 16); } else { @@ -481,7 +491,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Dark') { return this.chainModify([0x1333, 0x1000]); } @@ -496,13 +506,13 @@ exports.BattleItems = { spritenum: 583, megaStone: "Blastoise-Mega", megaEvolves: "Blastoise", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 661, gen: 6, - desc: "If holder is a Blastoise, this item allows it to Mega Evolve in battle.", + desc: "If held by a Blastoise, this item allows it to Mega Evolve in battle.", }, "blazikenite": { id: "blazikenite", @@ -510,45 +520,33 @@ exports.BattleItems = { spritenum: 584, megaStone: "Blaziken-Mega", megaEvolves: "Blaziken", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 664, gen: 6, - desc: "If holder is a Blaziken, this item allows it to Mega Evolve in battle.", + desc: "If held by a Blaziken, this item allows it to Mega Evolve in battle.", }, "blueorb": { id: "blueorb", name: "Blue Orb", spritenum: 41, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { if (pokemon.isActive && pokemon.baseTemplate.species === 'Kyogre') { this.insertQueue({pokemon: pokemon, choice: 'runPrimal'}); } }, - onPrimal: function (pokemon) { - let template = this.getTemplate('Kyogre-Primal'); - pokemon.formeChange(template); - pokemon.baseTemplate = template; - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - if (pokemon.illusion) { - pokemon.ability = ''; // Don't allow Illusion to wear off - this.add('-primal', pokemon.illusion); - } else { - this.add('detailschange', pokemon, pokemon.details); - this.add('-primal', pokemon); - } - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; + onPrimal(pokemon) { + pokemon.formeChange('Kyogre-Primal', this.effect, true); }, - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (source.baseTemplate.baseSpecies === 'Kyogre') return false; return true; }, num: 535, gen: 6, - desc: "If holder is a Kyogre, this item triggers its Primal Reversion in battle.", + desc: "If held by a Kyogre, this item triggers its Primal Reversion in battle.", }, "blukberry": { id: "blukberry", @@ -564,14 +562,25 @@ exports.BattleItems = { gen: 3, desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, + "bottlecap": { + id: "bottlecap", + name: "Bottle Cap", + spritenum: 696, + fling: { + basePower: 30, + }, + num: 795, + gen: 7, + desc: "Used for Hyper Training. One of a Pokemon's stats is calculated with an IV of 31.", + }, "brightpowder": { id: "brightpowder", - name: "BrightPowder", + name: "Bright Powder", spritenum: 51, fling: { basePower: 10, }, - onModifyAccuracy: function (accuracy) { + onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; this.debug('brightpowder - decreasing accuracy'); return accuracy * 0.9; @@ -586,7 +595,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 53, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Bug') { if (source.useItem()) { @@ -604,7 +613,7 @@ exports.BattleItems = { name: "Bug Memory", spritenum: 673, onMemory: 'Bug', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -632,7 +641,7 @@ exports.BattleItems = { id: "burndrive", name: "Burn Drive", spritenum: 54, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 649) || pokemon.baseTemplate.num === 649) { return false; } @@ -650,13 +659,13 @@ exports.BattleItems = { spritenum: 625, megaStone: "Camerupt-Mega", megaEvolves: "Camerupt", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 767, gen: 6, - desc: "If holder is a Camerupt, this item allows it to Mega Evolve in battle.", + desc: "If held by a Camerupt, this item allows it to Mega Evolve in battle.", }, "cellbattery": { id: "cellbattery", @@ -665,7 +674,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move.type === 'Electric' && target.useItem()) { this.boost({atk: 1}); } @@ -682,7 +691,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Fire') { return this.chainModify([0x1333, 0x1000]); } @@ -697,13 +706,13 @@ exports.BattleItems = { spritenum: 585, megaStone: "Charizard-Mega-X", megaEvolves: "Charizard", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 660, gen: 6, - desc: "If holder is a Charizard, this item allows it to Mega Evolve in battle.", + desc: "If held by a Charizard, this item allows it to Mega Evolve in battle.", }, "charizarditey": { id: "charizarditey", @@ -711,13 +720,13 @@ exports.BattleItems = { spritenum: 586, megaStone: "Charizard-Mega-Y", megaEvolves: "Charizard", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 678, gen: 6, - desc: "If holder is a Charizard, this item allows it to Mega Evolve in battle.", + desc: "If held by a Charizard, this item allows it to Mega Evolve in battle.", }, "chartiberry": { id: "chartiberry", @@ -728,7 +737,7 @@ exports.BattleItems = { basePower: 80, type: "Rock", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Rock' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -737,7 +746,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 195, gen: 4, desc: "Halves damage taken from a supereffective Rock-type attack. Single use.", @@ -751,12 +760,12 @@ exports.BattleItems = { basePower: 80, type: "Fire", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'par') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'par') { pokemon.cureStatus(); } @@ -782,12 +791,12 @@ exports.BattleItems = { basePower: 80, type: "Water", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'slp') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'slp') { pokemon.cureStatus(); } @@ -805,7 +814,7 @@ exports.BattleItems = { basePower: 80, type: "Normal", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Normal' && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -814,7 +823,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 200, gen: 4, desc: "Halves damage taken from a Normal-type attack. Single use.", @@ -823,7 +832,7 @@ exports.BattleItems = { id: "chilldrive", name: "Chill Drive", spritenum: 67, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 649) || pokemon.baseTemplate.num === 649) { return false; } @@ -842,17 +851,17 @@ exports.BattleItems = { fling: { basePower: 10, }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.volatiles['choicelock']) { this.debug('removing choicelock: ' + pokemon.volatiles.choicelock); } pokemon.removeVolatile('choicelock'); }, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { pokemon.addVolatile('choicelock'); }, onModifyAtkPriority: 1, - onModifyAtk: function (atk) { + onModifyAtk(atk) { return this.chainModify(1.5); }, isChoice: true, @@ -867,16 +876,16 @@ exports.BattleItems = { fling: { basePower: 10, }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.volatiles['choicelock']) { this.debug('removing choicelock: ' + pokemon.volatiles.choicelock); } pokemon.removeVolatile('choicelock'); }, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { pokemon.addVolatile('choicelock'); }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(1.5); }, isChoice: true, @@ -891,17 +900,17 @@ exports.BattleItems = { fling: { basePower: 10, }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.volatiles['choicelock']) { this.debug('removing choicelock: ' + pokemon.volatiles.choicelock); } pokemon.removeVolatile('choicelock'); }, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { pokemon.addVolatile('choicelock'); }, onModifySpAPriority: 1, - onModifySpA: function (spa) { + onModifySpA(spa) { return this.chainModify(1.5); }, isChoice: true, @@ -918,7 +927,7 @@ exports.BattleItems = { basePower: 80, type: "Fighting", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Fighting' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -927,7 +936,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 189, gen: 4, desc: "Halves damage taken from a supereffective Fighting-type attack. Single use.", @@ -952,7 +961,7 @@ exports.BattleItems = { basePower: 80, type: "Flying", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Flying' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -961,7 +970,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 192, gen: 4, desc: "Halves damage taken from a supereffective Flying-type attack. Single use.", @@ -975,7 +984,7 @@ exports.BattleItems = { basePower: 80, type: "Dark", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Dark' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -984,7 +993,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 198, gen: 4, desc: "Halves damage taken from a supereffective Dark-type attack. Single use.", @@ -1018,7 +1027,6 @@ exports.BattleItems = { "custapberry": { id: "custapberry", name: "Custap Berry", - isUnreleased: true, spritenum: 86, isBerry: true, naturalGift: { @@ -1026,16 +1034,16 @@ exports.BattleItems = { type: "Ghost", }, onModifyPriorityPriority: -1, - onModifyPriority: function (priority, pokemon) { + onModifyPriority(priority, pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { if (pokemon.eatItem()) { - this.add('-activate', pokemon, 'item: Custap Berry'); + this.add('-activate', pokemon, 'item: Custap Berry', '[consumed]'); pokemon.removeVolatile('custapberry'); return Math.round(priority) + 0.1; } } }, - onEat: function () { }, + onEat() { }, num: 210, gen: 4, desc: "Holder moves first in its priority bracket when at 1/4 max HP or less. Single use.", @@ -1057,7 +1065,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 89, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Dark') { if (source.useItem()) { @@ -1075,7 +1083,7 @@ exports.BattleItems = { name: "Dark Memory", spritenum: 683, onMemory: 'Dark', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1099,6 +1107,18 @@ exports.BattleItems = { gen: 7, desc: "If holder has a Dark move, this item allows it to use a Dark Z-Move.", }, + "dawnstone": { + id: "dawnstone", + name: "Dawn Stone", + spritenum: 92, + fling: { + basePower: 80, + }, + num: 109, + gen: 4, + desc: "Evolves male Kirlia into Gallade and female Snorunt into Froslass when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "decidiumz": { id: "decidiumz", name: "Decidium Z", @@ -1109,7 +1129,7 @@ exports.BattleItems = { zMoveUser: ["Decidueye"], num: 798, gen: 7, - desc: "If holder is a Decidueye with Spirit Shackle, it can use Sinister Arrow Raid.", + desc: "If held by a Decidueye with Spirit Shackle, it can use Sinister Arrow Raid.", }, "deepseascale": { id: "deepseascale", @@ -1119,14 +1139,15 @@ exports.BattleItems = { basePower: 30, }, onModifySpDPriority: 2, - onModifySpD: function (spd, pokemon) { + onModifySpD(spd, pokemon) { if (pokemon.baseTemplate.species === 'Clamperl') { return this.chainModify(2); } }, num: 227, gen: 3, - desc: "If holder is a Clamperl, its Sp. Def is doubled.", + desc: "If held by a Clamperl, its Sp. Def is doubled. Evolves Clamperl into Gorebyss when traded.", + shortDesc: "If held by a Clamperl, its Sp. Def is doubled.", }, "deepseatooth": { id: "deepseatooth", @@ -1136,14 +1157,15 @@ exports.BattleItems = { basePower: 90, }, onModifySpAPriority: 1, - onModifySpA: function (spa, pokemon) { + onModifySpA(spa, pokemon) { if (pokemon.baseTemplate.species === 'Clamperl') { return this.chainModify(2); } }, num: 226, gen: 3, - desc: "If holder is a Clamperl, its Sp. Atk is doubled.", + desc: "If held by a Clamperl, its Sp. Atk is doubled. Evolves Clamperl into Huntail when traded.", + shortDesc: "If held by a Clamperl, its Sp. Atk is doubled.", }, "destinyknot": { id: "destinyknot", @@ -1153,7 +1175,7 @@ exports.BattleItems = { basePower: 10, }, onAttractPriority: -100, - onAttract: function (target, source) { + onAttract(target, source) { this.debug('attract intercepted: ' + target + ' from ' + source); if (!source || source === target) return; if (!source.volatiles.attract) source.addVolatile('attract', target); @@ -1168,13 +1190,13 @@ exports.BattleItems = { spritenum: 624, megaStone: "Diancie-Mega", megaEvolves: "Diancie", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 764, gen: 6, - desc: "If holder is a Diancie, this item allows it to Mega Evolve in battle.", + desc: "If held by a Diancie, this item allows it to Mega Evolve in battle.", }, "diveball": { id: "diveball", @@ -1199,7 +1221,7 @@ exports.BattleItems = { id: "dousedrive", name: "Douse Drive", spritenum: 103, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 649) || pokemon.baseTemplate.num === 649) { return false; } @@ -1217,12 +1239,12 @@ exports.BattleItems = { spritenum: 105, onPlate: 'Dragon', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Dragon') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -1241,7 +1263,7 @@ exports.BattleItems = { basePower: 70, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Dragon') { return this.chainModify([0x1333, 0x1000]); } @@ -1256,7 +1278,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 107, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Dragon') { if (source.useItem()) { @@ -1274,7 +1296,7 @@ exports.BattleItems = { name: "Dragon Memory", spritenum: 682, onMemory: 'Dragon', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1285,6 +1307,17 @@ exports.BattleItems = { gen: 7, desc: "Holder's Multi-Attack is Dragon type.", }, + "dragonscale": { + id: "dragonscale", + name: "Dragon Scale", + spritenum: 108, + fling: { + basePower: 30, + }, + num: 250, + gen: 2, + desc: "Evolves Seadra into Kingdra when traded.", + }, "dragoniumz": { id: "dragoniumz", name: "Dragonium Z", @@ -1304,12 +1337,12 @@ exports.BattleItems = { spritenum: 110, onPlate: 'Dark', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Dark') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -1328,6 +1361,17 @@ exports.BattleItems = { gen: 5, desc: "A special Poke Ball that appears out of nowhere in a bag at the Entree Forest.", }, + "dubiousdisc": { + id: "dubiousdisc", + name: "Dubious Disc", + spritenum: 113, + fling: { + basePower: 50, + }, + num: 324, + gen: 4, + desc: "Evolves Porygon2 into Porygon-Z when traded.", + }, "durinberry": { id: "durinberry", name: "Durin Berry", @@ -1351,18 +1395,30 @@ exports.BattleItems = { gen: 4, desc: "A Poke Ball that makes it easier to catch wild Pokemon at night or in caves.", }, + "duskstone": { + id: "duskstone", + name: "Dusk Stone", + spritenum: 116, + fling: { + basePower: 80, + }, + num: 108, + gen: 4, + desc: "Evolves Murkrow into Honchkrow, Misdreavus into Mismagius, Lampent into Chandelure, and Doublade into Aegislash when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "earthplate": { id: "earthplate", name: "Earth Plate", spritenum: 117, onPlate: 'Ground', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Ground') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -1383,7 +1439,7 @@ exports.BattleItems = { zMoveUser: ["Eevee"], num: 805, gen: 7, - desc: "If holder is an Eevee with Last Resort, it can use Extreme Evoboost.", + desc: "If held by an Eevee with Last Resort, it can use Extreme Evoboost.", }, "ejectbutton": { id: "ejectbutton", @@ -1393,7 +1449,7 @@ exports.BattleItems = { basePower: 30, }, onAfterMoveSecondaryPriority: 2, - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (source && source !== target && target.hp && move && move.category !== 'Status') { if (!this.canSwitch(target.side) || target.forceSwitchFlag) return; if (target.useItem()) { @@ -1423,8 +1479,8 @@ exports.BattleItems = { isUnreleased: true, spritenum: 120, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (move.type === 'Electric') { if (source.useItem()) { this.add('-enditem', source, 'Electric Gem', '[from] gem', '[move] ' + move.name); @@ -1441,7 +1497,7 @@ exports.BattleItems = { name: "Electric Memory", spritenum: 679, onMemory: 'Electric', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1459,11 +1515,16 @@ exports.BattleItems = { fling: { basePower: 10, }, - onUpdate: function (pokemon) { - if (this.isTerrain('electricterrain') && pokemon.useItem()) { + onStart(pokemon) { + if (!pokemon.ignoringItem() && this.isTerrain('electricterrain') && pokemon.useItem()) { this.boost({def: 1}); } }, + onAnyTerrainStart() { + if (this.isTerrain('electricterrain') && this.effectData.target.useItem()) { + this.boost({def: 1}, this.effectData.target); + } + }, num: 881, gen: 7, desc: "If the terrain is Electric Terrain, raises holder's Defense by 1 stage. Single use.", @@ -1495,24 +1556,23 @@ exports.BattleItems = { "enigmaberry": { id: "enigmaberry", name: "Enigma Berry", - isUnreleased: true, spritenum: 124, isBerry: true, naturalGift: { basePower: 100, type: "Bug", }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move && move.typeMod > 0) { if (target.eatItem()) { this.heal(target.maxhp / 4); } } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function () { }, + onEat() { }, num: 208, gen: 3, desc: "Restores 1/4 max HP after holder is hit by a supereffective move. Single use.", @@ -1525,13 +1585,13 @@ exports.BattleItems = { basePower: 40, }, onModifyDefPriority: 2, - onModifyDef: function (def, pokemon) { + onModifyDef(def, pokemon) { if (pokemon.baseTemplate.nfe) { return this.chainModify(1.5); } }, onModifySpDPriority: 2, - onModifySpD: function (spd, pokemon) { + onModifySpD(spd, pokemon) { if (pokemon.baseTemplate.nfe) { return this.chainModify(1.5); } @@ -1547,7 +1607,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onModifyDamage: function (damage, source, target, move) { + onModifyDamage(damage, source, target, move) { if (move && move.typeMod > 0) { return this.chainModify([0x1333, 0x1000]); } @@ -1575,7 +1635,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 611, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Fairy') { if (source.useItem()) { @@ -1593,7 +1653,7 @@ exports.BattleItems = { name: "Fairy Memory", spritenum: 684, onMemory: 'Fairy', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1618,7 +1678,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 139, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Fighting') { if (source.useItem()) { @@ -1636,7 +1696,7 @@ exports.BattleItems = { name: "Fighting Memory", spritenum: 668, onMemory: 'Fighting', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1669,15 +1729,15 @@ exports.BattleItems = { basePower: 80, type: "Bug", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 2); if (pokemon.getNature().minus === 'atk') { pokemon.addVolatile('confusion'); @@ -1693,8 +1753,8 @@ exports.BattleItems = { isUnreleased: true, spritenum: 141, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (move.type === 'Fire') { if (source.useItem()) { this.add('-enditem', source, 'Fire Gem', '[from] gem', '[move] ' + move.name); @@ -1711,7 +1771,7 @@ exports.BattleItems = { name: "Fire Memory", spritenum: 676, onMemory: 'Fire', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1722,6 +1782,18 @@ exports.BattleItems = { gen: 7, desc: "Holder's Multi-Attack is Fire type.", }, + "firestone": { + id: "firestone", + name: "Fire Stone", + spritenum: 142, + fling: { + basePower: 30, + }, + num: 82, + gen: 1, + desc: "Evolves Vulpix into Ninetales, Growlithe into Arcanine, Eevee into Flareon, and Pansear into Simisear when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "firiumz": { id: "firiumz", name: "Firium Z", @@ -1741,12 +1813,12 @@ exports.BattleItems = { spritenum: 143, onPlate: 'Fighting', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Fighting') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -1767,8 +1839,8 @@ exports.BattleItems = { }, onResidualOrder: 26, onResidualSubOrder: 2, - onResidual: function (pokemon) { - pokemon.trySetStatus('brn'); + onResidual(pokemon) { + pokemon.trySetStatus('brn', pokemon); }, num: 273, gen: 4, @@ -1780,12 +1852,12 @@ exports.BattleItems = { spritenum: 146, onPlate: 'Fire', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Fire') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -1803,7 +1875,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onModifyWeight: function (weight) { + onModifyWeight(weight) { return weight / 2; }, num: 539, @@ -1816,7 +1888,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 149, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Flying') { if (source.useItem()) { @@ -1834,7 +1906,7 @@ exports.BattleItems = { name: "Flying Memory", spritenum: 669, onMemory: 'Flying', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -1865,8 +1937,8 @@ exports.BattleItems = { fling: { basePower: 10, }, - onDamage: function (damage, target, source, effect) { - if (this.random(10) === 0 && damage >= target.hp && effect && effect.effectType === 'Move') { + onDamage(damage, target, source, effect) { + if (this.randomChance(1, 10) && damage >= target.hp && effect && effect.effectType === 'Move') { this.add("-activate", target, "item: Focus Band"); return target.hp - 1; } @@ -1882,7 +1954,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { if (target.useItem()) { return target.hp - 1; @@ -1908,7 +1980,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onModifyPriority: function (priority, pokemon) { + onModifyPriority(priority, pokemon) { return Math.round(priority) - 0.1; }, num: 316, @@ -1921,13 +1993,13 @@ exports.BattleItems = { spritenum: 616, megaStone: "Gallade-Mega", megaEvolves: "Gallade", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 756, gen: 6, - desc: "If holder is a Gallade, this item allows it to Mega Evolve in battle.", + desc: "If held by a Gallade, this item allows it to Mega Evolve in battle.", }, "ganlonberry": { id: "ganlonberry", @@ -1938,13 +2010,13 @@ exports.BattleItems = { basePower: 100, type: "Ice", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { - this.boost({def:1}); + onEat(pokemon) { + this.boost({def: 1}); }, num: 202, gen: 3, @@ -1956,13 +2028,13 @@ exports.BattleItems = { spritenum: 589, megaStone: "Garchomp-Mega", megaEvolves: "Garchomp", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 683, gen: 6, - desc: "If holder is a Garchomp, this item allows it to Mega Evolve in battle.", + desc: "If held by a Garchomp, this item allows it to Mega Evolve in battle.", }, "gardevoirite": { id: "gardevoirite", @@ -1970,13 +2042,13 @@ exports.BattleItems = { spritenum: 587, megaStone: "Gardevoir-Mega", megaEvolves: "Gardevoir", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 657, gen: 6, - desc: "If holder is a Gardevoir, this item allows it to Mega Evolve in battle.", + desc: "If held by a Gardevoir, this item allows it to Mega Evolve in battle.", }, "gengarite": { id: "gengarite", @@ -1984,13 +2056,13 @@ exports.BattleItems = { spritenum: 588, megaStone: "Gengar-Mega", megaEvolves: "Gengar", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 656, gen: 6, - desc: "If holder is a Gengar, this item allows it to Mega Evolve in battle.", + desc: "If held by a Gengar, this item allows it to Mega Evolve in battle.", }, "ghostgem": { id: "ghostgem", @@ -1998,7 +2070,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 161, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Ghost') { if (source.useItem()) { @@ -2016,7 +2088,7 @@ exports.BattleItems = { name: "Ghost Memory", spritenum: 674, onMemory: 'Ghost', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -2046,13 +2118,24 @@ exports.BattleItems = { spritenum: 623, megaStone: "Glalie-Mega", megaEvolves: "Glalie", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 763, gen: 6, - desc: "If holder is a Glalie, this item allows it to Mega Evolve in battle.", + desc: "If held by a Glalie, this item allows it to Mega Evolve in battle.", + }, + "goldbottlecap": { + id: "goldbottlecap", + name: "Gold Bottle Cap", + spritenum: 697, + fling: { + basePower: 30, + }, + num: 796, + gen: 7, + desc: "Used for Hyper Training. All of a Pokemon's stats are calculated with an IV of 31.", }, "grassgem": { id: "grassgem", @@ -2060,8 +2143,8 @@ exports.BattleItems = { isUnreleased: true, spritenum: 172, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (move.type === 'Grass') { if (source.useItem()) { this.add('-enditem', source, 'Grass Gem', '[from] gem', '[move] ' + move.name); @@ -2078,7 +2161,7 @@ exports.BattleItems = { name: "Grass Memory", spritenum: 678, onMemory: 'Grass', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -2109,11 +2192,16 @@ exports.BattleItems = { fling: { basePower: 10, }, - onUpdate: function (pokemon) { - if (this.isTerrain('grassyterrain') && pokemon.useItem()) { + onStart(pokemon) { + if (!pokemon.ignoringItem() && this.isTerrain('grassyterrain') && pokemon.useItem()) { this.boost({def: 1}); } }, + onAnyTerrainStart() { + if (this.isTerrain('grassyterrain') && this.effectData.target.useItem()) { + this.boost({def: 1}, this.effectData.target); + } + }, num: 884, gen: 7, desc: "If the terrain is Grassy Terrain, raises holder's Defense by 1 stage. Single use.", @@ -2160,12 +2248,12 @@ exports.BattleItems = { basePower: 60, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (user.baseTemplate.num === 487 && (move.type === 'Ghost' || move.type === 'Dragon')) { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 487) || pokemon.baseTemplate.num === 487) { return false; } @@ -2174,7 +2262,7 @@ exports.BattleItems = { forcedForme: "Giratina-Origin", num: 112, gen: 4, - desc: "If holder is a Giratina, its Ghost- and Dragon-type attacks have 1.2x power.", + desc: "If held by a Giratina, its Ghost- and Dragon-type attacks have 1.2x power.", }, "groundgem": { id: "groundgem", @@ -2182,7 +2270,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 182, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Ground') { if (source.useItem()) { @@ -2200,7 +2288,7 @@ exports.BattleItems = { name: "Ground Memory", spritenum: 671, onMemory: 'Ground', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -2230,13 +2318,13 @@ exports.BattleItems = { spritenum: 589, megaStone: "Gyarados-Mega", megaEvolves: "Gyarados", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 676, gen: 6, - desc: "If holder is a Gyarados, this item allows it to Mega Evolve in battle.", + desc: "If held by a Gyarados, this item allows it to Mega Evolve in battle.", }, "habanberry": { id: "habanberry", @@ -2247,7 +2335,7 @@ exports.BattleItems = { basePower: 80, type: "Dragon", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Dragon' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -2256,7 +2344,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 197, gen: 4, desc: "Halves damage taken from a supereffective Dragon-type attack. Single use.", @@ -2269,7 +2357,7 @@ exports.BattleItems = { basePower: 100, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Rock') { return this.chainModify([0x1333, 0x1000]); } @@ -2322,13 +2410,13 @@ exports.BattleItems = { spritenum: 590, megaStone: "Heracross-Mega", megaEvolves: "Heracross", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 680, gen: 6, - desc: "If holder is a Heracross, this item allows it to Mega Evolve in battle.", + desc: "If held by a Heracross, this item allows it to Mega Evolve in battle.", }, "hondewberry": { id: "hondewberry", @@ -2350,13 +2438,13 @@ exports.BattleItems = { spritenum: 591, megaStone: "Houndoom-Mega", megaEvolves: "Houndoom", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 666, gen: 6, - desc: "If holder is a Houndoom, this item allows it to Mega Evolve in battle.", + desc: "If held by a Houndoom, this item allows it to Mega Evolve in battle.", }, "iapapaberry": { id: "iapapaberry", @@ -2367,15 +2455,15 @@ exports.BattleItems = { basePower: 80, type: "Dark", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 2); if (pokemon.getNature().minus === 'def') { pokemon.addVolatile('confusion'); @@ -2391,7 +2479,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 218, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Ice') { if (source.useItem()) { @@ -2409,7 +2497,7 @@ exports.BattleItems = { name: "Ice Memory", spritenum: 681, onMemory: 'Ice', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -2420,18 +2508,30 @@ exports.BattleItems = { gen: 7, desc: "Holder's Multi-Attack is Ice type.", }, + "icestone": { + id: "icestone", + name: "Ice Stone", + spritenum: 693, + fling: { + basePower: 30, + }, + num: 849, + gen: 7, + desc: "Evolves Alolan Sandshrew into Alolan Sandslash and Alolan Vulpix into Alolan Ninetales when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "icicleplate": { id: "icicleplate", name: "Icicle Plate", spritenum: 220, onPlate: 'Ice', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Ice') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -2476,7 +2576,7 @@ exports.BattleItems = { zMoveUser: ["Incineroar"], num: 799, gen: 7, - desc: "If holder is an Incineroar with Darkest Lariat, it can use Malicious Moonsault.", + desc: "If held by an Incineroar with Darkest Lariat, it can use Malicious Moonsault.", }, "insectplate": { id: "insectplate", @@ -2484,12 +2584,12 @@ exports.BattleItems = { spritenum: 223, onPlate: 'Bug', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Bug') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -2507,12 +2607,13 @@ exports.BattleItems = { fling: { basePower: 130, }, - onEffectiveness: function (typeMod, target, type, move) { + onEffectiveness(typeMod, target, type, move) { + if (!target) return; if (target.volatiles['ingrain'] || target.volatiles['smackdown'] || this.getPseudoWeather('gravity')) return; if (move.type === 'Ground' && target.hasType('Flying')) return 0; }, // airborneness negation implemented in sim/pokemon.js:Pokemon#isGrounded - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 278, @@ -2525,12 +2626,12 @@ exports.BattleItems = { spritenum: 225, onPlate: 'Steel', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Steel') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -2544,25 +2645,35 @@ exports.BattleItems = { "jabocaberry": { id: "jabocaberry", name: "Jaboca Berry", - isUnreleased: true, spritenum: 230, isBerry: true, naturalGift: { basePower: 100, type: "Dragon", }, - onAfterDamage: function (damage, target, source, move) { - if (source && source !== target && move && move.category === 'Physical') { + onAfterDamage(damage, target, source, move) { + if (source && source.hp && source !== target && move && move.category === 'Physical') { if (target.eatItem()) { this.damage(source.maxhp / 8, source, target); } } }, - onEat: function () { }, + onEat() { }, num: 211, gen: 4, desc: "If holder is hit by a physical move, attacker loses 1/8 of its max HP. Single use.", }, + "jawfossil": { + id: "jawfossil", + name: "Jaw Fossil", + spritenum: 694, + fling: { + basePower: 100, + }, + num: 710, + gen: 6, + desc: "Can be revived into Tyrunt.", + }, "kasibberry": { id: "kasibberry", name: "Kasib Berry", @@ -2572,7 +2683,7 @@ exports.BattleItems = { basePower: 80, type: "Ghost", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Ghost' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -2581,7 +2692,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 196, gen: 4, desc: "Halves damage taken from a supereffective Ghost-type attack. Single use.", @@ -2595,7 +2706,7 @@ exports.BattleItems = { basePower: 80, type: "Poison", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Poison' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -2604,7 +2715,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 190, gen: 4, desc: "Halves damage taken from a supereffective Poison-type attack. Single use.", @@ -2618,12 +2729,12 @@ exports.BattleItems = { basePower: 100, type: "Fairy", }, - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (move.category === 'Physical') { target.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.boost({def: 1}); }, num: 687, @@ -2650,13 +2761,13 @@ exports.BattleItems = { spritenum: 592, megaStone: "Kangaskhan-Mega", megaEvolves: "Kangaskhan", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 675, gen: 6, - desc: "If holder is a Kangaskhan, this item allows it to Mega Evolve in battle.", + desc: "If held by a Kangaskhan, this item allows it to Mega Evolve in battle.", }, "kingsrock": { id: "kingsrock", @@ -2667,11 +2778,11 @@ exports.BattleItems = { volatileStatus: 'flinch', }, onModifyMovePriority: -1, - onModifyMove: function (move) { + onModifyMove(move) { if (move.category !== "Status") { if (!move.secondaries) move.secondaries = []; - for (let i = 0; i < move.secondaries.length; i++) { - if (move.secondaries[i].volatileStatus === 'flinch') return; + for (const secondary of move.secondaries) { + if (secondary.volatileStatus === 'flinch') return; } move.secondaries.push({ chance: 10, @@ -2681,7 +2792,20 @@ exports.BattleItems = { }, num: 221, gen: 2, - desc: "Holder's attacks without a chance to flinch gain a 10% chance to flinch.", + desc: "Holder's attacks without a chance to flinch gain a 10% chance to flinch. Evolves Poliwhirl into Politoed and Slowpoke into Slowking when traded.", + shortDesc: "Holder's attacks without a chance to flinch gain a 10% chance to flinch.", + }, + "kommoniumz": { + id: "kommoniumz", + name: "Kommonium Z", + spritenum: 690, + onTakeItem: false, + zMove: "Clangorous Soulblaze", + zMoveFrom: "Clanging Scales", + zMoveUser: ["Kommo-o", "Kommo-o-Totem"], + num: 926, + gen: 7, + desc: "If held by a Kommo-o with Clanging Scales, it can use Clangorous Soulblaze.", }, "laggingtail": { id: "laggingtail", @@ -2690,7 +2814,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onModifyPriority: function (priority, pokemon) { + onModifyPriority(priority, pokemon) { return Math.round(priority) - 0.1; }, num: 279, @@ -2706,12 +2830,12 @@ exports.BattleItems = { basePower: 100, type: "Flying", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { pokemon.addVolatile('focusenergy'); }, num: 206, @@ -2724,13 +2848,13 @@ exports.BattleItems = { spritenum: 629, megaStone: "Latias-Mega", megaEvolves: "Latias", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 684, gen: 6, - desc: "If holder is a Latias, this item allows it to Mega Evolve in battle.", + desc: "If held by a Latias, this item allows it to Mega Evolve in battle.", }, "latiosite": { id: "latiosite", @@ -2738,13 +2862,13 @@ exports.BattleItems = { spritenum: 630, megaStone: "Latios-Mega", megaEvolves: "Latios", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 685, gen: 6, - desc: "If holder is a Latios, this item allows it to Mega Evolve in battle.", + desc: "If held by a Latios, this item allows it to Mega Evolve in battle.", }, "laxincense": { id: "laxincense", @@ -2753,7 +2877,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onModifyAccuracy: function (accuracy) { + onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; this.debug('lax incense - decreasing accuracy'); return accuracy * 0.9; @@ -2762,6 +2886,18 @@ exports.BattleItems = { gen: 3, desc: "The accuracy of attacks against the holder is 0.9x.", }, + "leafstone": { + id: "leafstone", + name: "Leaf Stone", + spritenum: 241, + fling: { + basePower: 30, + }, + num: 85, + gen: 1, + desc: "Evolves Gloom into Vileplume, Weepinbell into Victreebel, Exeggcute into Exeggutor or Alolan Exeggutor, Nuzleaf into Shiftry, and Pansage into Simisage when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "leftovers": { id: "leftovers", name: "Leftovers", @@ -2771,7 +2907,12 @@ exports.BattleItems = { }, onResidualOrder: 5, onResidualSubOrder: 2, - onResidual: function (pokemon) { + onResidual(pokemon) { + if (this.isTerrain('grassyterrain')) return; + this.heal(pokemon.maxhp / 16); + }, + onTerrain(pokemon) { + if (!this.isTerrain('grassyterrain')) return; this.heal(pokemon.maxhp / 16); }, num: 234, @@ -2787,45 +2928,23 @@ exports.BattleItems = { basePower: 80, type: "Fighting", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (!pokemon.hp) return; - let move = pokemon.getMoveData(pokemon.lastMove); - if (move && move.pp === 0) { - pokemon.addVolatile('leppaberry'); - pokemon.volatiles['leppaberry'].move = move; + if (pokemon.moveSlots.some(move => move.pp === 0)) { pokemon.eatItem(); } }, - onEat: function (pokemon) { - let move; - if (pokemon.volatiles['leppaberry']) { - move = pokemon.volatiles['leppaberry'].move; - pokemon.removeVolatile('leppaberry'); - } else { - let pp = 99; - for (let moveid in pokemon.moveset) { - if (pokemon.moveset[moveid].pp < pp) { - move = pokemon.moveset[moveid]; - pp = move.pp; - } - } - } - move.pp += 10; - if (move.pp > move.maxpp) move.pp = move.maxpp; - this.add('-activate', pokemon, 'item: Leppa Berry', move.move); + onEat(pokemon) { + let moveSlot = pokemon.moveSlots.find(move => move.pp === 0) || + pokemon.moveSlots.find(move => move.pp < move.maxpp); + if (!moveSlot) return; + moveSlot.pp += 10; + if (moveSlot.pp > moveSlot.maxpp) moveSlot.pp = moveSlot.maxpp; + this.add('-activate', pokemon, 'item: Leppa Berry', moveSlot.move, '[consumed]'); if (pokemon.item !== 'leppaberry') { - let foeActive = pokemon.side.foe.active; - let foeIsStale = false; - for (let i = 0; i < foeActive.length; i++) { - if (foeActive[i].hp && foeActive[i].isStale >= 2) { - foeIsStale = true; - break; - } - } - if (!foeIsStale) return; + pokemon.isStale = 2; + pokemon.isStaleSource = 'useleppa'; } - pokemon.isStale = 2; - pokemon.isStaleSource = 'useleppa'; }, num: 154, gen: 3, @@ -2848,13 +2967,13 @@ exports.BattleItems = { basePower: 100, type: "Grass", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { - this.boost({atk:1}); + onEat(pokemon) { + this.boost({atk: 1}); }, num: 201, gen: 3, @@ -2867,11 +2986,11 @@ exports.BattleItems = { fling: { basePower: 30, }, - onModifyDamage: function (damage, source, target, move) { + onModifyDamage(damage, source, target, move) { return this.chainModify([0x14CC, 0x1000]); }, - onAfterMoveSecondarySelf: function (source, target, move) { - if (source && source !== target && move && move.category !== 'Status' && !move.ohko) { + onAfterMoveSecondarySelf(source, target, move) { + if (source && source !== target && move && move.category !== 'Status') { this.damage(source.maxhp / 10, source, source, this.getItem('lifeorb')); } }, @@ -2888,20 +3007,20 @@ exports.BattleItems = { status: 'par', }, onModifyAtkPriority: 1, - onModifyAtk: function (atk, pokemon) { + onModifyAtk(atk, pokemon) { if (pokemon.baseTemplate.baseSpecies === 'Pikachu') { return this.chainModify(2); } }, onModifySpAPriority: 1, - onModifySpA: function (spa, pokemon) { + onModifySpA(spa, pokemon) { if (pokemon.baseTemplate.baseSpecies === 'Pikachu') { return this.chainModify(2); } }, num: 236, gen: 2, - desc: "If holder is a Pikachu, its Attack and Sp. Atk are doubled.", + desc: "If held by a Pikachu, its Attack and Sp. Atk are doubled.", }, "lightclay": { id: "lightclay", @@ -2921,13 +3040,13 @@ exports.BattleItems = { spritenum: 626, megaStone: "Lopunny-Mega", megaEvolves: "Lopunny", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 768, gen: 6, - desc: "If holder is a Lopunny, this item allows it to Mega Evolve in battle.", + desc: "If held by a Lopunny, this item allows it to Mega Evolve in battle.", }, "loveball": { id: "loveball", @@ -2943,13 +3062,13 @@ exports.BattleItems = { spritenum: 594, megaStone: "Lucario-Mega", megaEvolves: "Lucario", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 673, gen: 6, - desc: "If holder is a Lucario, this item allows it to Mega Evolve in battle.", + desc: "If held by a Lucario, this item allows it to Mega Evolve in battle.", }, "luckypunch": { id: "luckypunch", @@ -2958,14 +3077,14 @@ exports.BattleItems = { fling: { basePower: 40, }, - onModifyCritRatio: function (critRatio, user) { + onModifyCritRatio(critRatio, user) { if (user.baseTemplate.species === 'Chansey') { return critRatio + 2; } }, num: 256, gen: 2, - desc: "If holder is a Chansey, its critical hit ratio is raised by 2 stages.", + desc: "If held by a Chansey, its critical hit ratio is raised by 2 stages.", }, "lumberry": { id: "lumberry", @@ -2976,12 +3095,12 @@ exports.BattleItems = { basePower: 80, type: "Flying", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status || pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { pokemon.cureStatus(); pokemon.removeVolatile('confusion'); }, @@ -2996,7 +3115,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move.type === 'Water' && target.useItem()) { this.boost({spd: 1}); } @@ -3005,6 +3124,18 @@ exports.BattleItems = { gen: 6, desc: "Raises holder's Sp. Def by 1 stage if hit by a Water-type attack. Single use.", }, + "lunaliumz": { + id: "lunaliumz", + name: "Lunalium Z", + spritenum: 686, + onTakeItem: false, + zMove: "Menacing Moonraze Maelstrom", + zMoveFrom: "Moongeist Beam", + zMoveUser: ["Lunala", "Necrozma-Dawn-Wings"], + num: 922, + gen: 7, + desc: "Lunala or Dawn Wings Necrozma with Moongeist Beam can use a special Z-Move.", + }, "lureball": { id: "lureball", name: "Lure Ball", @@ -3021,14 +3152,14 @@ exports.BattleItems = { basePower: 60, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && user.baseTemplate.species === 'Palkia' && (move.type === 'Water' || move.type === 'Dragon')) { return this.chainModify([0x1333, 0x1000]); } }, num: 136, gen: 4, - desc: "If holder is a Palkia, its Water- and Dragon-type attacks have 1.2x power.", + desc: "If held by a Palkia, its Water- and Dragon-type attacks have 1.2x power.", }, "luxuryball": { id: "luxuryball", @@ -3038,6 +3169,18 @@ exports.BattleItems = { gen: 3, desc: "A comfortable Poke Ball that makes a caught wild Pokemon quickly grow friendly.", }, + "lycaniumz": { + id: "lycaniumz", + name: "Lycanium Z", + spritenum: 689, + onTakeItem: false, + zMove: "Splintered Stormshards", + zMoveFrom: "Stone Edge", + zMoveUser: ["Lycanroc", "Lycanroc-Midnight", "Lycanroc-Dusk"], + num: 925, + gen: 7, + desc: "If held by a Lycanroc forme with Stone Edge, it can use Splintered Stormshards.", + }, "machobrace": { id: "machobrace", name: "Macho Brace", @@ -3047,12 +3190,23 @@ exports.BattleItems = { fling: { basePower: 60, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 215, gen: 3, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", + }, + "magmarizer": { + id: "magmarizer", + name: "Magmarizer", + spritenum: 272, + fling: { + basePower: 80, + }, + num: 323, + gen: 4, + desc: "Evolves Magmar into Magmortar when traded.", }, "magnet": { id: "magnet", @@ -3062,7 +3216,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Electric') { return this.chainModify([0x1333, 0x1000]); } @@ -3080,15 +3234,15 @@ exports.BattleItems = { basePower: 80, type: "Ghost", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 2); if (pokemon.getNature().minus === 'spe') { pokemon.addVolatile('confusion'); @@ -3117,11 +3271,12 @@ exports.BattleItems = { id: "mail", name: "Mail", spritenum: 403, - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (!this.activeMove) return false; if (this.activeMove.id !== 'knockoff' && this.activeMove.id !== 'thief' && this.activeMove.id !== 'covet') return false; }, isUnreleased: true, + num: 0, gen: 2, desc: "Cannot be given to or taken from a Pokemon, except by Covet/Knock Off/Thief.", }, @@ -3131,13 +3286,13 @@ exports.BattleItems = { spritenum: 596, megaStone: "Manectric-Mega", megaEvolves: "Manectric", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 682, gen: 6, - desc: "If holder is a Manectric, this item allows it to Mega Evolve in battle.", + desc: "If held by a Manectric, this item allows it to Mega Evolve in battle.", }, "marangaberry": { id: "marangaberry", @@ -3148,12 +3303,12 @@ exports.BattleItems = { basePower: 100, type: "Dark", }, - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (move.category === 'Special') { target.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.boost({spd: 1}); }, num: 688, @@ -3170,7 +3325,7 @@ exports.BattleItems = { zMoveUser: ["Marshadow"], num: 802, gen: 7, - desc: "If holder is Marshadow with Spectral Thief, it can use Soul-Stealing 7-Star Strike.", + desc: "If held by Marshadow with Spectral Thief, it can use Soul-Stealing 7-Star Strike.", }, "masterball": { id: "masterball", @@ -3186,13 +3341,13 @@ exports.BattleItems = { spritenum: 598, megaStone: "Mawile-Mega", megaEvolves: "Mawile", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 681, gen: 6, - desc: "If holder is a Mawile, this item allows it to Mega Evolve in battle.", + desc: "If held by a Mawile, this item allows it to Mega Evolve in battle.", }, "meadowplate": { id: "meadowplate", @@ -3200,12 +3355,12 @@ exports.BattleItems = { spritenum: 282, onPlate: 'Grass', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Grass') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -3222,13 +3377,13 @@ exports.BattleItems = { spritenum: 599, megaStone: "Medicham-Mega", megaEvolves: "Medicham", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 665, gen: 6, - desc: "If holder is a Medicham, this item allows it to Mega Evolve in battle.", + desc: "If held by a Medicham, this item allows it to Mega Evolve in battle.", }, "mentalherb": { id: "mentalherb", @@ -3236,13 +3391,13 @@ exports.BattleItems = { spritenum: 285, fling: { basePower: 10, - effect: function (pokemon) { + effect(pokemon) { let conditions = ['attract', 'taunt', 'encore', 'torment', 'disable', 'healblock']; - for (let i = 0; i < conditions.length; i++) { - if (pokemon.volatiles[conditions[i]]) { - for (let j = 0; j < conditions.length; j++) { - pokemon.removeVolatile(conditions[j]); - if (conditions[i] === 'attract' && conditions[j] === 'attract') { + for (const firstCondition of conditions) { + if (pokemon.volatiles[firstCondition]) { + for (const secondCondition of conditions) { + pokemon.removeVolatile(secondCondition); + if (firstCondition === 'attract' && secondCondition === 'attract') { this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); } } @@ -3251,14 +3406,14 @@ exports.BattleItems = { } }, }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { let conditions = ['attract', 'taunt', 'encore', 'torment', 'disable', 'healblock']; - for (let i = 0; i < conditions.length; i++) { - if (pokemon.volatiles[conditions[i]]) { + for (const firstCondition of conditions) { + if (pokemon.volatiles[firstCondition]) { if (!pokemon.useItem()) return; - for (let j = 0; j < conditions.length; j++) { - pokemon.removeVolatile(conditions[j]); - if (conditions[i] === 'attract' && conditions[j] === 'attract') { + for (const secondCondition of conditions) { + pokemon.removeVolatile(secondCondition); + if (firstCondition === 'attract' && secondCondition === 'attract') { this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); } } @@ -3276,13 +3431,13 @@ exports.BattleItems = { spritenum: 618, megaStone: "Metagross-Mega", megaEvolves: "Metagross", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 758, gen: 6, - desc: "If holder is a Metagross, this item allows it to Mega Evolve in battle.", + desc: "If held by a Metagross, this item allows it to Mega Evolve in battle.", }, "metalcoat": { id: "metalcoat", @@ -3292,14 +3447,15 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Steel') { return this.chainModify([0x1333, 0x1000]); } }, num: 233, gen: 2, - desc: "Holder's Steel-type attacks have 1.2x power.", + desc: "Holder's Steel-type attacks have 1.2x power. Evolves Onix into Steelix and Scyther into Scizor when traded.", + shortDesc: "Holder's Steel-type attacks have 1.2x power.", }, "metalpowder": { id: "metalpowder", @@ -3309,14 +3465,14 @@ exports.BattleItems = { }, spritenum: 287, onModifyDefPriority: 2, - onModifyDef: function (def, pokemon) { + onModifyDef(def, pokemon) { if (pokemon.template.species === 'Ditto' && !pokemon.transformed) { return this.chainModify(2); } }, num: 257, gen: 2, - desc: "If holder is a Ditto that hasn't Transformed, its Defense is doubled.", + desc: "If held by a Ditto that hasn't Transformed, its Defense is doubled.", }, "metronome": { id: "metronome", @@ -3325,15 +3481,16 @@ exports.BattleItems = { fling: { basePower: 30, }, - onStart: function (pokemon) { + onStart(pokemon) { pokemon.addVolatile('metronome'); }, effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.effectData.numConsecutive = 0; this.effectData.lastMove = ''; }, - onBeforeMove: function (pokemon, target, move) { + onTryMovePriority: -2, + onTryMove(pokemon, target, move) { if (!pokemon.hasItem('metronome')) { pokemon.removeVolatile('metronome'); return; @@ -3345,7 +3502,7 @@ exports.BattleItems = { } this.effectData.lastMove = move.id; }, - onModifyDamage: function (damage, source, target, move) { + onModifyDamage(damage, source, target, move) { let numConsecutive = this.effectData.numConsecutive > 5 ? 5 : this.effectData.numConsecutive; let dmgMod = [0x1000, 0x1333, 0x1666, 0x1999, 0x1CCC, 0x2000]; return this.chainModify([dmgMod[numConsecutive], 0x1000]); @@ -3365,7 +3522,7 @@ exports.BattleItems = { zMoveUser: ["Mew"], num: 806, gen: 7, - desc: "If holder is a Mew with Psychic, it can use Genesis Supernova.", + desc: "If held by a Mew with Psychic, it can use Genesis Supernova.", }, "mewtwonitex": { id: "mewtwonitex", @@ -3373,13 +3530,13 @@ exports.BattleItems = { spritenum: 600, megaStone: "Mewtwo-Mega-X", megaEvolves: "Mewtwo", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 662, gen: 6, - desc: "If holder is a Mewtwo, this item allows it to Mega Evolve in battle.", + desc: "If held by a Mewtwo, this item allows it to Mega Evolve in battle.", }, "mewtwonitey": { id: "mewtwonitey", @@ -3387,35 +3544,34 @@ exports.BattleItems = { spritenum: 601, megaStone: "Mewtwo-Mega-Y", megaEvolves: "Mewtwo", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 663, gen: 6, - desc: "If holder is a Mewtwo, this item allows it to Mega Evolve in battle.", + desc: "If held by a Mewtwo, this item allows it to Mega Evolve in battle.", }, "micleberry": { id: "micleberry", name: "Micle Berry", - isUnreleased: true, spritenum: 290, isBerry: true, naturalGift: { basePower: 100, type: "Rock", }, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { pokemon.addVolatile('micleberry'); }, effect: { duration: 2, - onSourceModifyAccuracy: function (accuracy, target, source) { + onSourceModifyAccuracy(accuracy, target, source) { this.add('-enditem', source, 'Micle Berry'); source.removeVolatile('micleberry'); if (typeof accuracy === 'number') { @@ -3427,18 +3583,30 @@ exports.BattleItems = { gen: 4, desc: "Holder's next move has 1.2x accuracy when at 1/4 max HP or less. Single use.", }, + "mimikiumz": { + id: "mimikiumz", + name: "Mimikium Z", + spritenum: 688, + onTakeItem: false, + zMove: "Let's Snuggle Forever", + zMoveFrom: "Play Rough", + zMoveUser: ["Mimikyu", "Mimikyu-Busted", "Mimikyu-Totem", "Mimikyu-Busted-Totem"], + num: 924, + gen: 7, + desc: "If held by a Mimikyu with Play Rough, it can use Let's Snuggle Forever.", + }, "mindplate": { id: "mindplate", name: "Mind Plate", spritenum: 291, onPlate: 'Psychic', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Psychic') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -3457,7 +3625,7 @@ exports.BattleItems = { }, spritenum: 292, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Grass') { return this.chainModify([0x1333, 0x1000]); } @@ -3473,11 +3641,16 @@ exports.BattleItems = { fling: { basePower: 10, }, - onUpdate: function (pokemon) { - if (this.isTerrain('mistyterrain') && pokemon.useItem()) { + onStart(pokemon) { + if (!pokemon.ignoringItem() && this.isTerrain('mistyterrain') && pokemon.useItem()) { this.boost({spd: 1}); } }, + onAnyTerrainStart() { + if (this.isTerrain('mistyterrain') && this.effectData.target.useItem()) { + this.boost({spd: 1}, this.effectData.target); + } + }, num: 883, gen: 7, desc: "If the terrain is Misty Terrain, raises holder's Sp. Def by 1 stage. Single use.", @@ -3490,6 +3663,18 @@ exports.BattleItems = { gen: 2, desc: "A Poke Ball for catching Pokemon that evolve using the Moon Stone.", }, + "moonstone": { + id: "moonstone", + name: "Moon Stone", + spritenum: 295, + fling: { + basePower: 30, + }, + num: 81, + gen: 1, + desc: "Evolves Nidorina into Nidoqueen, Nidorino into Nidoking, Clefairy into Clefable, Jigglypuff into Wigglytuff, Skitty into Delcatty, and Munna into Musharna when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "muscleband": { id: "muscleband", name: "Muscle Band", @@ -3498,7 +3683,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.category === 'Physical') { return this.chainModify([0x1199, 0x1000]); } @@ -3515,7 +3700,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Water') { return this.chainModify([0x1333, 0x1000]); } @@ -3563,7 +3748,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Ice') { return this.chainModify([0x1333, 0x1000]); } @@ -3592,8 +3777,8 @@ exports.BattleItems = { name: "Normal Gem", spritenum: 307, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (move.type === 'Normal') { if (source.useItem()) { this.add('-enditem', source, 'Normal Gem', '[from] gem', '[move] ' + move.name); @@ -3625,7 +3810,7 @@ exports.BattleItems = { basePower: 80, type: "Fire", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Fire' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -3634,7 +3819,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 184, gen: 4, desc: "Halves damage taken from a supereffective Fire-type attack. Single use.", @@ -3647,7 +3832,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Psychic') { return this.chainModify([0x1333, 0x1000]); } @@ -3676,21 +3861,32 @@ exports.BattleItems = { basePower: 80, type: "Poison", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(10); }, num: 155, gen: 3, desc: "Restores 10 HP when at 1/2 max HP or less. Single use.", }, + "ovalstone": { + id: "ovalstone", + name: "Oval Stone", + spritenum: 321, + fling: { + basePower: 80, + }, + num: 110, + gen: 4, + desc: "Evolves Happiny into Chansey when held and leveled up during the day.", + }, "pamtreberry": { id: "pamtreberry", name: "Pamtre Berry", @@ -3723,7 +3919,7 @@ exports.BattleItems = { basePower: 80, type: "Water", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Water' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -3732,7 +3928,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 185, gen: 4, desc: "Halves damage taken from a supereffective Water-type attack. Single use.", @@ -3746,7 +3942,7 @@ exports.BattleItems = { basePower: 80, type: "Psychic", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Psychic' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -3755,7 +3951,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 193, gen: 4, desc: "Halves damage taken from a supereffective Psychic-type attack. Single use.", @@ -3769,12 +3965,12 @@ exports.BattleItems = { basePower: 80, type: "Electric", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.cureStatus(); } @@ -3792,12 +3988,12 @@ exports.BattleItems = { basePower: 80, type: "Ground", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { pokemon.removeVolatile('confusion'); }, num: 156, @@ -3813,13 +4009,13 @@ exports.BattleItems = { basePower: 100, type: "Poison", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { - this.boost({spa:1}); + onEat(pokemon) { + this.boost({spa: 1}); }, num: 204, gen: 3, @@ -3831,13 +4027,13 @@ exports.BattleItems = { spritenum: 622, megaStone: "Pidgeot-Mega", megaEvolves: "Pidgeot", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 762, gen: 6, - desc: "If holder is a Pidgeot, this item allows it to Mega Evolve in battle.", + desc: "If held by a Pidgeot, this item allows it to Mega Evolve in battle.", }, "pikaniumz": { id: "pikaniumz", @@ -3849,7 +4045,7 @@ exports.BattleItems = { zMoveUser: ["Pikachu"], num: 794, gen: 7, - desc: "If holder is a Pikachu with Volt Tackle, it can use Catastropika.", + desc: "If held by a Pikachu with Volt Tackle, it can use Catastropika.", }, "pikashuniumz": { id: "pikashuniumz", @@ -3858,10 +4054,10 @@ exports.BattleItems = { onTakeItem: false, zMove: "10,000,000 Volt Thunderbolt", zMoveFrom: "Thunderbolt", - zMoveUser: ["Pikachu-Original", "Pikachu-Hoenn", "Pikachu-Sinnoh", "Pikachu-Unova", "Pikachu-Kalos", "Pikachu-Alola"], + zMoveUser: ["Pikachu-Original", "Pikachu-Hoenn", "Pikachu-Sinnoh", "Pikachu-Unova", "Pikachu-Kalos", "Pikachu-Alola", "Pikachu-Partner"], num: 836, gen: 7, - desc: "If holder is cap Pikachu with Thunderbolt, it can use 10,000,000 Volt Thunderbolt.", + desc: "If held by cap Pikachu with Thunderbolt, it can use 10,000,000 Volt Thunderbolt.", }, "pinapberry": { id: "pinapberry", @@ -3883,13 +4079,13 @@ exports.BattleItems = { spritenum: 602, megaStone: "Pinsir-Mega", megaEvolves: "Pinsir", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 671, gen: 6, - desc: "If holder is a Pinsir, this item allows it to Mega Evolve in battle.", + desc: "If held by a Pinsir, this item allows it to Mega Evolve in battle.", }, "pixieplate": { id: "pixieplate", @@ -3897,12 +4093,12 @@ exports.BattleItems = { spritenum: 610, onPlate: 'Fairy', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Fairy') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -3933,7 +4129,7 @@ exports.BattleItems = { status: 'psn', }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Poison') { return this.chainModify([0x1333, 0x1000]); } @@ -3948,7 +4144,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 344, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Poison') { if (source.useItem()) { @@ -3966,7 +4162,7 @@ exports.BattleItems = { name: "Poison Memory", spritenum: 670, onMemory: 'Poison', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -4020,12 +4216,12 @@ exports.BattleItems = { fling: { basePower: 70, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 293, gen: 4, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, "powerband": { id: "powerband", @@ -4035,12 +4231,12 @@ exports.BattleItems = { fling: { basePower: 70, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 292, gen: 4, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, "powerbelt": { id: "powerbelt", @@ -4050,12 +4246,12 @@ exports.BattleItems = { fling: { basePower: 70, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 290, gen: 4, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, "powerbracer": { id: "powerbracer", @@ -4065,18 +4261,20 @@ exports.BattleItems = { fling: { basePower: 70, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 289, gen: 4, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, "powerherb": { id: "powerherb", - onChargeMove: function (pokemon, target, move) { + 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 } }, @@ -4097,12 +4295,12 @@ exports.BattleItems = { fling: { basePower: 70, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 291, gen: 4, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, "powerweight": { id: "powerweight", @@ -4112,12 +4310,12 @@ exports.BattleItems = { fling: { basePower: 70, }, - onModifySpe: function (spe) { + onModifySpe(spe) { return this.chainModify(0.5); }, num: 294, gen: 4, - desc: "Holder's Speed is halved. The Ability Klutz does not ignore this effect.", + desc: "Holder's Speed is halved. The Klutz Ability does not ignore this effect.", }, "premierball": { id: "premierball", @@ -4137,7 +4335,18 @@ exports.BattleItems = { zMoveUser: ["Primarina"], num: 800, gen: 7, - desc: "If holder is a Primarina with Sparkling Aria, it can use Oceanic Operetta.", + desc: "If held by a Primarina with Sparkling Aria, it can use Oceanic Operetta.", + }, + "prismscale": { + id: "prismscale", + name: "Prism Scale", + spritenum: 365, + fling: { + basePower: 30, + }, + num: 537, + gen: 5, + desc: "Evolves Feebas into Milotic when traded.", }, "protectivepads": { id: "protectivepads", @@ -4146,12 +4355,56 @@ exports.BattleItems = { fling: { basePower: 30, }, - onModifyMove: function (move) { - delete move.flags['contact']; + onAttractPriority: -1, + onAttract(target, source, effect) { + if (target !== source && target === this.activePokemon && this.activeMove && this.activeMove.flags['contact']) return false; + }, + onBoostPriority: -1, + onBoost(boost, target, source, effect) { + if (target !== source && target === this.activePokemon && this.activeMove && this.activeMove.flags['contact']) { + if (effect && effect.effectType === 'Ability') { + // Ability activation always happens for boosts + this.add('-activate', target, 'item: Protective Pads'); + } + return false; + } + }, + onDamagePriority: -1, + onDamage(damage, target, source, effect) { + if (target !== source && target === this.activePokemon && this.activeMove && this.activeMove.flags['contact']) { + if (effect && effect.effectType === 'Ability') { + this.add('-activate', source, effect.fullname); + this.add('-activate', target, 'item: Protective Pads'); + } + return false; + } + }, + onSetAbility(ability, target, source, effect) { + if (target !== source && target === this.activePokemon && this.activeMove && this.activeMove.flags['contact']) { + if (effect && effect.effectType === 'Ability') { + this.add('-activate', source, effect.fullname); + this.add('-activate', target, 'item: Protective Pads'); + } + return false; + } + }, + onSetStatus(status, target, source, effect) { + if (target !== source && target === this.activePokemon && this.activeMove && this.activeMove.flags['contact']) return false; }, num: 880, gen: 7, - desc: "Holder's attacks do not make contact with the target.", + desc: "Holder's moves are protected from adverse contact effects, except Pickpocket.", + }, + "protector": { + id: "protector", + name: "Protector", + spritenum: 367, + fling: { + basePower: 80, + }, + num: 321, + gen: 4, + desc: "Evolves Rhydon into Rhyperior when traded.", }, "psychicgem": { id: "psychicgem", @@ -4159,7 +4412,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 369, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Psychic') { if (source.useItem()) { @@ -4177,7 +4430,7 @@ exports.BattleItems = { name: "Psychic Memory", spritenum: 680, onMemory: 'Psychic', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -4195,11 +4448,16 @@ exports.BattleItems = { fling: { basePower: 10, }, - onUpdate: function (pokemon) { - if (this.isTerrain('psychicterrain') && pokemon.useItem()) { + onStart(pokemon) { + if (!pokemon.ignoringItem() && this.isTerrain('psychicterrain') && pokemon.useItem()) { this.boost({spd: 1}); } }, + onAnyTerrainStart() { + if (this.isTerrain('psychicterrain') && this.effectData.target.useItem()) { + this.boost({spd: 1}, this.effectData.target); + } + }, num: 882, gen: 7, desc: "If the terrain is Psychic Terrain, raises holder's Sp. Def by 1 stage. Single use.", @@ -4242,8 +4500,8 @@ exports.BattleItems = { "quickclaw": { id: "quickclaw", onModifyPriorityPriority: -1, - onModifyPriority: function (priority, pokemon) { - if (this.random(5) === 0) { + onModifyPriority(priority, pokemon) { + if (this.randomChance(1, 5)) { this.add('-activate', pokemon, 'item: Quick Claw'); return Math.round(priority) + 0.1; } @@ -4264,14 +4522,14 @@ exports.BattleItems = { fling: { basePower: 10, }, - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (pokemon.template.species === 'Ditto' && !pokemon.transformed) { return this.chainModify(2); } }, num: 274, gen: 4, - desc: "If holder is a Ditto that hasn't Transformed, its Speed is doubled.", + desc: "If held by a Ditto that hasn't Transformed, its Speed is doubled.", }, "rabutaberry": { id: "rabutaberry", @@ -4308,12 +4566,12 @@ exports.BattleItems = { basePower: 80, type: "Grass", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'brn') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'brn') { pokemon.cureStatus(); } @@ -4329,12 +4587,13 @@ exports.BattleItems = { fling: { basePower: 80, }, - onModifyCritRatio: function (critRatio) { + onModifyCritRatio(critRatio) { return critRatio + 1; }, num: 326, gen: 4, - desc: "Holder's critical hit ratio is raised by 1 stage.", + desc: "Holder's critical hit ratio is raised by 1 stage. Evolves Sneasel into Weavile when held and leveled up during the night.", + shortDesc: "Holder's critical hit ratio is raised by 1 stage.", }, "razorfang": { id: "razorfang", @@ -4345,11 +4604,11 @@ exports.BattleItems = { volatileStatus: 'flinch', }, onModifyMovePriority: -1, - onModifyMove: function (move) { + onModifyMove(move) { if (move.category !== "Status") { if (!move.secondaries) move.secondaries = []; - for (let i = 0; i < move.secondaries.length; i++) { - if (move.secondaries[i].volatileStatus === 'flinch') return; + for (const secondary of move.secondaries) { + if (secondary.volatileStatus === 'flinch') return; } move.secondaries.push({ chance: 10, @@ -4359,7 +4618,8 @@ exports.BattleItems = { }, num: 327, gen: 4, - desc: "Holder's attacks without a chance to flinch gain a 10% chance to flinch.", + desc: "Holder's attacks without a chance to flinch gain a 10% chance to flinch. Evolves Gligar into Gliscor when held and leveled up during the night.", + shortDesc: "Holder's attacks without a chance to flinch gain a 10% chance to flinch.", }, "razzberry": { id: "razzberry", @@ -4376,6 +4636,17 @@ exports.BattleItems = { gen: 3, desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, + "reapercloth": { + id: "reapercloth", + name: "Reaper Cloth", + spritenum: 385, + fling: { + basePower: 10, + }, + num: 325, + gen: 4, + desc: "Evolves Dusclops into Dusknoir when traded.", + }, "redcard": { id: "redcard", name: "Red Card", @@ -4383,10 +4654,10 @@ exports.BattleItems = { fling: { basePower: 10, }, - onAfterMoveSecondary: function (target, source, move) { + onAfterMoveSecondary(target, source, move) { if (source && source !== target && source.hp && target.hp && move && move.category !== 'Status') { if (!source.isActive || !this.canSwitch(source.side) || source.forceSwitchFlag || target.forceSwitchFlag) return; - if (target.useItem(null, source)) { // This order is correct - the item is used up even against a pokemon with Ingrain or that otherwise can't be forced out + if (target.useItem(source)) { // This order is correct - the item is used up even against a pokemon with Ingrain or that otherwise can't be forced out if (this.runEvent('DragOut', source, target, move)) { source.forceSwitchFlag = true; } @@ -4401,33 +4672,21 @@ exports.BattleItems = { id: "redorb", name: "Red Orb", spritenum: 390, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { if (pokemon.isActive && pokemon.baseTemplate.species === 'Groudon') { this.insertQueue({pokemon: pokemon, choice: 'runPrimal'}); } }, - onPrimal: function (pokemon) { - let template = this.getTemplate('Groudon-Primal'); - pokemon.formeChange(template); - pokemon.baseTemplate = template; - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - if (pokemon.illusion) { - pokemon.ability = ''; // Don't allow Illusion to wear off - this.add('-primal', pokemon.illusion); - } else { - this.add('detailschange', pokemon, pokemon.details); - this.add('-primal', pokemon); - } - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; + onPrimal(pokemon) { + pokemon.formeChange('Groudon-Primal', this.effect, true); }, - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (source.baseTemplate.baseSpecies === 'Groudon') return false; return true; }, num: 534, gen: 6, - desc: "If holder is a Groudon, this item triggers its Primal Reversion in battle.", + desc: "If held by a Groudon, this item triggers its Primal Reversion in battle.", }, "repeatball": { id: "repeatball", @@ -4446,7 +4705,7 @@ exports.BattleItems = { basePower: 80, type: "Grass", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Grass' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -4455,7 +4714,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 187, gen: 4, desc: "Halves damage taken from a supereffective Grass-type attack. Single use.", @@ -4478,7 +4737,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 415, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Rock') { if (source.useItem()) { @@ -4499,7 +4758,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Rock') { return this.chainModify([0x1333, 0x1000]); } @@ -4513,7 +4772,7 @@ exports.BattleItems = { name: "Rock Memory", spritenum: 672, onMemory: 'Rock', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -4545,7 +4804,7 @@ exports.BattleItems = { basePower: 60, }, onAfterDamageOrder: 2, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact']) { this.damage(source.maxhp / 6, source, target); } @@ -4573,7 +4832,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Grass') { return this.chainModify([0x1333, 0x1000]); } @@ -4591,7 +4850,7 @@ exports.BattleItems = { basePower: 80, type: "Fairy", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Fairy' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -4600,7 +4859,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 686, gen: 6, desc: "Halves damage taken from a supereffective Fairy-type attack. Single use.", @@ -4608,21 +4867,20 @@ exports.BattleItems = { "rowapberry": { id: "rowapberry", name: "Rowap Berry", - isUnreleased: true, spritenum: 420, isBerry: true, naturalGift: { basePower: 100, type: "Dark", }, - onAfterDamage: function (damage, target, source, move) { - if (source && source !== target && move && move.category === 'Special') { + onAfterDamage(damage, target, source, move) { + if (source && source.hp && source !== target && move && move.category === 'Special') { if (target.eatItem()) { this.damage(source.maxhp / 8, source, target); } } }, - onEat: function () { }, + onEat() { }, num: 212, gen: 4, desc: "If holder is hit by a special move, attacker loses 1/8 of its max HP. Single use.", @@ -4633,13 +4891,24 @@ exports.BattleItems = { spritenum: 614, megaStone: "Sableye-Mega", megaEvolves: "Sableye", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 754, gen: 6, - desc: "If holder is a Sableye, this item allows it to Mega Evolve in battle.", + desc: "If held by a Sableye, this item allows it to Mega Evolve in battle.", + }, + "sachet": { + id: "sachet", + name: "Sachet", + spritenum: 691, + fling: { + basePower: 80, + }, + num: 647, + gen: 6, + desc: "Evolves Spritzee into Aromatisse when traded.", }, "safariball": { id: "safariball", @@ -4656,10 +4925,10 @@ exports.BattleItems = { fling: { basePower: 80, }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm' || type === 'hail' || type === 'powder') return false; }, - onTryHit: function (pokemon, source, move) { + onTryHit(pokemon, source, move) { if (move.flags['powder'] && pokemon !== source && this.getImmunity('powder', pokemon)) { this.add('-activate', pokemon, 'item: Safety Goggles', move.name); return null; @@ -4669,6 +4938,17 @@ exports.BattleItems = { gen: 6, desc: "Holder is immune to powder moves and damage from Sandstorm or Hail.", }, + "sailfossil": { + id: "sailfossil", + name: "Sail Fossil", + spritenum: 695, + fling: { + basePower: 100, + }, + num: 711, + gen: 6, + desc: "Can be revived into Amaura.", + }, "salacberry": { id: "salacberry", name: "Salac Berry", @@ -4678,13 +4958,13 @@ exports.BattleItems = { basePower: 100, type: "Fighting", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { - this.boost({spe:1}); + onEat(pokemon) { + this.boost({spe: 1}); }, num: 203, gen: 3, @@ -4696,13 +4976,13 @@ exports.BattleItems = { spritenum: 627, megaStone: "Salamence-Mega", megaEvolves: "Salamence", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 769, gen: 6, - desc: "If holder is a Salamence, this item allows it to Mega Evolve in battle.", + desc: "If held by a Salamence, this item allows it to Mega Evolve in battle.", }, "sceptilite": { id: "sceptilite", @@ -4710,13 +4990,13 @@ exports.BattleItems = { spritenum: 613, megaStone: "Sceptile-Mega", megaEvolves: "Sceptile", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 753, gen: 6, - desc: "If holder is a Sceptile, this item allows it to Mega Evolve in battle.", + desc: "If held by a Sceptile, this item allows it to Mega Evolve in battle.", }, "scizorite": { id: "scizorite", @@ -4724,13 +5004,13 @@ exports.BattleItems = { spritenum: 605, megaStone: "Scizor-Mega", megaEvolves: "Scizor", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 670, gen: 6, - desc: "If holder is a Scizor, this item allows it to Mega Evolve in battle.", + desc: "If held by a Scizor, this item allows it to Mega Evolve in battle.", }, "scopelens": { id: "scopelens", @@ -4739,7 +5019,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onModifyCritRatio: function (critRatio) { + onModifyCritRatio(critRatio) { return critRatio + 1; }, num: 232, @@ -4754,7 +5034,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Water') { return this.chainModify([0x1333, 0x1000]); } @@ -4771,7 +5051,7 @@ exports.BattleItems = { basePower: 50, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && move.type === 'Flying') { return this.chainModify([0x1333, 0x1000]); } @@ -4786,13 +5066,13 @@ exports.BattleItems = { spritenum: 619, megaStone: "Sharpedo-Mega", megaEvolves: "Sharpedo", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 759, gen: 6, - desc: "If holder is a Sharpedo, this item allows it to Mega Evolve in battle.", + desc: "If held by a Sharpedo, this item allows it to Mega Evolve in battle.", }, "shedshell": { id: "shedshell", @@ -4802,7 +5082,7 @@ exports.BattleItems = { basePower: 10, }, onTrapPokemonPriority: -10, - onTrapPokemon: function (pokemon) { + onTrapPokemon(pokemon) { pokemon.trapped = pokemon.maybeTrapped = false; }, num: 295, @@ -4817,7 +5097,7 @@ exports.BattleItems = { basePower: 30, }, onAfterMoveSecondarySelfPriority: -1, - onAfterMoveSecondarySelf: function (pokemon, target, move) { + onAfterMoveSecondarySelf(pokemon, target, move) { if (move.category !== 'Status') { this.heal(pokemon.lastDamage / 8, pokemon); } @@ -4826,11 +5106,23 @@ exports.BattleItems = { gen: 3, desc: "After an attack, holder gains 1/8 of the damage in HP dealt to other Pokemon.", }, + "shinystone": { + id: "shinystone", + name: "Shiny Stone", + spritenum: 439, + fling: { + basePower: 80, + }, + num: 107, + gen: 4, + desc: "Evolves Togetic into Togekiss, Roselia into Roserade, Minccino into Cinccino, and Floette into Florges when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "shockdrive": { id: "shockdrive", name: "Shock Drive", spritenum: 442, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 649) || pokemon.baseTemplate.num === 649) { return false; } @@ -4851,7 +5143,7 @@ exports.BattleItems = { basePower: 80, type: "Ground", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Ground' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -4860,7 +5152,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 191, gen: 4, desc: "Halves damage taken from a supereffective Ground-type attack. Single use.", @@ -4873,7 +5165,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Normal') { return this.chainModify([0x1333, 0x1000]); } @@ -4890,7 +5182,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Bug') { return this.chainModify([0x1333, 0x1000]); } @@ -4908,15 +5200,15 @@ exports.BattleItems = { basePower: 80, type: "Psychic", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 4); }, num: 158, @@ -4940,12 +5232,12 @@ exports.BattleItems = { spritenum: 450, onPlate: 'Flying', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Flying') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -4962,13 +5254,13 @@ exports.BattleItems = { spritenum: 620, megaStone: "Slowbro-Mega", megaEvolves: "Slowbro", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 760, gen: 6, - desc: "If holder is a Slowbro, this item allows it to Mega Evolve in battle.", + desc: "If held by a Slowbro, this item allows it to Mega Evolve in battle.", }, "smoothrock": { id: "smoothrock", @@ -4991,7 +5283,7 @@ exports.BattleItems = { zMoveUser: ["Snorlax"], num: 804, gen: 7, - desc: "If holder is a Snorlax with Giga Impact, it can use Pulverizing Pancake.", + desc: "If held by a Snorlax with Giga Impact, it can use Pulverizing Pancake.", }, "snowball": { id: "snowball", @@ -5000,7 +5292,7 @@ exports.BattleItems = { fling: { basePower: 30, }, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move.type === 'Ice' && target.useItem()) { this.boost({atk: 1}); } @@ -5017,7 +5309,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Ground') { return this.chainModify([0x1333, 0x1000]); } @@ -5026,6 +5318,18 @@ exports.BattleItems = { gen: 2, desc: "Holder's Ground-type attacks have 1.2x power.", }, + "solganiumz": { + id: "solganiumz", + name: "Solganium Z", + spritenum: 685, + onTakeItem: false, + zMove: "Searing Sunraze Smash", + zMoveFrom: "Sunsteel Strike", + zMoveUser: ["Solgaleo", "Necrozma-Dusk-Mane"], + num: 921, + gen: 7, + desc: "Solgaleo or Dusk Mane Necrozma with Sunsteel Strike can use a special Z-Move.", + }, "souldew": { id: "souldew", name: "Soul Dew", @@ -5034,14 +5338,14 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move && (user.baseTemplate.num === 380 || user.baseTemplate.num === 381) && (move.type === 'Psychic' || move.type === 'Dragon')) { return this.chainModify([0x1333, 0x1000]); } }, num: 225, gen: 3, - desc: "If holder's a Latias/Latios, its Dragon- and Psychic-type moves have 1.2x power.", + desc: "If held by a Latias/Latios, its Dragon- and Psychic-type moves have 1.2x power.", }, "spelltag": { id: "spelltag", @@ -5051,7 +5355,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Ghost') { return this.chainModify([0x1333, 0x1000]); } @@ -5081,12 +5385,12 @@ exports.BattleItems = { spritenum: 463, onPlate: 'Water', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Water') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -5103,12 +5407,12 @@ exports.BattleItems = { spritenum: 464, onPlate: 'Ghost', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Ghost') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -5136,20 +5440,22 @@ exports.BattleItems = { basePower: 100, type: "Psychic", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { let stats = []; for (let stat in pokemon.boosts) { + // @ts-ignore if (stat !== 'accuracy' && stat !== 'evasion' && pokemon.boosts[stat] < 6) { stats.push(stat); } } if (stats.length) { - let randomStat = stats[this.random(stats.length)]; + let randomStat = this.sample(stats); + /**@type {{[k: string]: number}} */ let boost = {}; boost[randomStat] = 2; this.boost(boost); @@ -5165,13 +5471,13 @@ exports.BattleItems = { spritenum: 621, megaStone: "Steelix-Mega", megaEvolves: "Steelix", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 761, gen: 6, - desc: "If holder is a Steelix, this item allows it to Mega Evolve in battle.", + desc: "If held by a Steelix, this item allows it to Mega Evolve in battle.", }, "steelgem": { id: "steelgem", @@ -5179,7 +5485,7 @@ exports.BattleItems = { isUnreleased: true, spritenum: 473, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { + onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Steel') { if (source.useItem()) { @@ -5197,7 +5503,7 @@ exports.BattleItems = { name: "Steel Memory", spritenum: 675, onMemory: 'Steel', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -5228,14 +5534,14 @@ exports.BattleItems = { basePower: 60, }, spritenum: 475, - onModifyCritRatio: function (critRatio, user) { + onModifyCritRatio(critRatio, user) { if (user.baseTemplate.species === 'Farfetch\'d') { return critRatio + 2; } }, num: 259, gen: 2, - desc: "If holder is a Farfetch'd, its critical hit ratio is raised by 2 stages.", + desc: "If held by a Farfetch'd, its critical hit ratio is raised by 2 stages.", }, "stickybarb": { id: "stickybarb", @@ -5246,12 +5552,13 @@ exports.BattleItems = { }, onResidualOrder: 26, onResidualSubOrder: 2, - onResidual: function (pokemon) { + onResidual(pokemon) { this.damage(pokemon.maxhp / 8); }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (source && source !== target && !source.item && move && move.flags['contact']) { let barb = target.takeItem(); + if (!barb) return; // Gen 4 Multitype source.setItem(barb); // no message for Sticky Barb changing hands } @@ -5266,12 +5573,12 @@ exports.BattleItems = { spritenum: 477, onPlate: 'Rock', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Rock') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -5282,19 +5589,31 @@ exports.BattleItems = { gen: 4, desc: "Holder's Rock-type attacks have 1.2x power. Judgment is Rock type.", }, + "sunstone": { + id: "sunstone", + name: "Sun Stone", + spritenum: 480, + fling: { + basePower: 30, + }, + num: 80, + gen: 2, + desc: "Evolves Gloom into Bellossom, Sunkern into Sunflora, Cottonee into Whimsicott, Petilil into Lilligant, and Helioptile into Heliolisk when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "swampertite": { id: "swampertite", name: "Swampertite", spritenum: 612, megaStone: "Swampert-Mega", megaEvolves: "Swampert", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 752, gen: 6, - desc: "If holder is a Swampert, this item allows it to Mega Evolve in battle.", + desc: "If held by a Swampert, this item allows it to Mega Evolve in battle.", }, "tamatoberry": { id: "tamatoberry", @@ -5319,7 +5638,7 @@ exports.BattleItems = { basePower: 80, type: "Bug", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Bug' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -5328,7 +5647,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 194, gen: 4, desc: "Halves damage taken from a supereffective Bug-type attack. Single use.", @@ -5343,7 +5662,7 @@ exports.BattleItems = { zMoveUser: ["Tapu Koko", "Tapu Lele", "Tapu Bulu", "Tapu Fini"], num: 801, gen: 7, - desc: "If holder is a Tapu with Nature's Madness, it can use Guardian of Alola.", + desc: "If held by a Tapu with Nature's Madness, it can use Guardian of Alola.", }, "terrainextender": { id: "terrainextender", @@ -5364,14 +5683,26 @@ exports.BattleItems = { basePower: 90, }, onModifyAtkPriority: 1, - onModifyAtk: function (atk, pokemon) { + onModifyAtk(atk, pokemon) { if (pokemon.baseTemplate.baseSpecies === 'Cubone' || pokemon.baseTemplate.baseSpecies === 'Marowak') { return this.chainModify(2); } }, num: 258, gen: 2, - desc: "If holder is a Cubone or a Marowak, its Attack is doubled.", + desc: "If held by a Cubone or a Marowak, its Attack is doubled.", + }, + "thunderstone": { + id: "thunderstone", + name: "Thunder Stone", + spritenum: 492, + fling: { + basePower: 30, + }, + num: 83, + gen: 1, + desc: "Evolves Pikachu into Raichu or Alolan Raichu, Eevee into Jolteon, and Eelektrik into Eelektross when used.", + shortDesc: "Evolves certain species of Pokemon when used.", }, "timerball": { id: "timerball", @@ -5391,8 +5722,8 @@ exports.BattleItems = { }, onResidualOrder: 26, onResidualSubOrder: 2, - onResidual: function (pokemon) { - pokemon.trySetStatus('tox'); + onResidual(pokemon) { + pokemon.trySetStatus('tox', pokemon); }, num: 272, gen: 4, @@ -5404,12 +5735,12 @@ exports.BattleItems = { spritenum: 516, onPlate: 'Poison', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Poison') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -5428,7 +5759,7 @@ exports.BattleItems = { basePower: 30, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Psychic') { return this.chainModify([0x1333, 0x1000]); } @@ -5443,13 +5774,13 @@ exports.BattleItems = { spritenum: 607, megaStone: "Tyranitar-Mega", megaEvolves: "Tyranitar", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 669, gen: 6, - desc: "If holder is a Tyranitar, this item allows it to Mega Evolve in battle.", + desc: "If held by a Tyranitar, this item allows it to Mega Evolve in battle.", }, "ultraball": { id: "ultraball", @@ -5459,19 +5790,42 @@ exports.BattleItems = { gen: 1, desc: "An ultra-performance Ball that provides a higher catch rate than a Great Ball.", }, + "ultranecroziumz": { + id: "ultranecroziumz", + name: "Ultranecrozium Z", + spritenum: 687, + onTakeItem: false, + zMove: "Light That Burns the Sky", + zMoveFrom: "Photon Geyser", + zMoveUser: ["Necrozma-Ultra"], + num: 923, + gen: 7, + desc: "Dusk Mane/Dawn Wings Necrozma: Ultra Burst, then Z-Move w/ Photon Geyser.", + }, + "upgrade": { + id: "upgrade", + name: "Up-Grade", + spritenum: 523, + fling: { + basePower: 30, + }, + num: 252, + gen: 2, + desc: "Evolves Porygon into Porygon2 when traded.", + }, "venusaurite": { id: "venusaurite", name: "Venusaurite", spritenum: 608, megaStone: "Venusaur-Mega", megaEvolves: "Venusaur", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: 659, gen: 6, - desc: "If holder is a Venusaur, this item allows it to Mega Evolve in battle.", + desc: "If held by a Venusaur, this item allows it to Mega Evolve in battle.", }, "wacanberry": { id: "wacanberry", @@ -5482,7 +5836,7 @@ exports.BattleItems = { basePower: 80, type: "Electric", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Electric' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -5491,7 +5845,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 186, gen: 4, desc: "Halves damage taken from a supereffective Electric-type attack. Single use.", @@ -5502,8 +5856,8 @@ exports.BattleItems = { isUnreleased: true, spritenum: 528, isGem: true, - onSourceTryPrimaryHit: function (target, source, move) { - if (target === source || move.category === 'Status' || move.id in {firepledge:1, grasspledge:1, waterpledge:1}) return; + onSourceTryPrimaryHit(target, source, move) { + if (target === source || move.category === 'Status' || ['firepledge', 'grasspledge', 'waterpledge'].includes(move.id)) return; if (move.type === 'Water') { if (source.useItem()) { this.add('-enditem', source, 'Water Gem', '[from] gem', '[move] ' + move.name); @@ -5520,7 +5874,7 @@ exports.BattleItems = { name: "Water Memory", spritenum: 677, onMemory: 'Water', - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 773) || pokemon.baseTemplate.num === 773) { return false; } @@ -5531,6 +5885,18 @@ exports.BattleItems = { gen: 7, desc: "Holder's Multi-Attack is Water type.", }, + "waterstone": { + id: "waterstone", + name: "Water Stone", + spritenum: 529, + fling: { + basePower: 30, + }, + num: 84, + gen: 1, + desc: "Evolves Poliwhirl into Poliwrath, Shellder into Cloyster, Staryu into Starmie, Eevee into Vaporeon, Lombre into Ludicolo, and Panpour into Simipour when used.", + shortDesc: "Evolves certain species of Pokemon when used.", + }, "wateriumz": { id: "wateriumz", name: "Waterium Z", @@ -5567,7 +5933,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Water') { return this.chainModify([0x1333, 0x1000]); } @@ -5584,7 +5950,7 @@ exports.BattleItems = { basePower: 80, }, onHitPriority: 1, - onHit: function (target, source, move) { + onHit(target, source, move) { if (target.hp && move.category !== 'Status' && !move.damage && !move.damageCallback && move.typeMod > 0 && target.useItem()) { this.boost({atk: 2, spa: 2}); } @@ -5608,16 +5974,29 @@ exports.BattleItems = { gen: 3, desc: "Cannot be eaten by the holder. No effect when eaten with Bug Bite or Pluck.", }, + "whippeddream": { + id: "whippeddream", + name: "Whipped Dream", + spritenum: 692, + fling: { + basePower: 80, + }, + num: 646, + gen: 6, + desc: "Evolves Swirlix into Slurpuff when traded.", + }, "whiteherb": { id: "whiteherb", name: "White Herb", spritenum: 535, fling: { basePower: 10, - effect: function (pokemon) { + effect(pokemon) { let activate = false; + /**@type {{[k: string]: number}} */ let boosts = {}; for (let i in pokemon.boosts) { + // @ts-ignore if (pokemon.boosts[i] < 0) { activate = true; boosts[i] = 0; @@ -5629,10 +6008,12 @@ exports.BattleItems = { } }, }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { let activate = false; + /**@type {{[k: string]: number}} */ let boosts = {}; for (let i in pokemon.boosts) { + // @ts-ignore if (pokemon.boosts[i] < 0) { activate = true; boosts[i] = 0; @@ -5654,7 +6035,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onSourceModifyAccuracy: function (accuracy) { + onSourceModifyAccuracy(accuracy) { if (typeof accuracy === 'number') { return accuracy * 1.1; } @@ -5672,15 +6053,15 @@ exports.BattleItems = { basePower: 80, type: "Rock", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony'))) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 2); if (pokemon.getNature().minus === 'spa') { pokemon.addVolatile('confusion'); @@ -5698,7 +6079,7 @@ exports.BattleItems = { basePower: 10, }, onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.category === 'Special') { return this.chainModify([0x1199, 0x1000]); } @@ -5716,7 +6097,7 @@ exports.BattleItems = { basePower: 80, type: "Ice", }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Ice' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'] || (move.infiltrates && this.gen >= 6))) { if (target.eatItem()) { this.debug('-50% reduction'); @@ -5725,7 +6106,7 @@ exports.BattleItems = { } } }, - onEat: function () { }, + onEat() { }, num: 188, gen: 4, desc: "Halves damage taken from a supereffective Ice-type attack. Single use.", @@ -5736,12 +6117,12 @@ exports.BattleItems = { spritenum: 572, onPlate: 'Electric', onBasePowerPriority: 6, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Electric') { return this.chainModify([0x1333, 0x1000]); } }, - onTakeItem: function (item, pokemon, source) { + onTakeItem(item, pokemon, source) { if ((source && source.baseTemplate.num === 493) || pokemon.baseTemplate.num === 493) { return false; } @@ -5759,7 +6140,7 @@ exports.BattleItems = { fling: { basePower: 10, }, - onSourceModifyAccuracy: function (accuracy, target) { + onSourceModifyAccuracy(accuracy, target) { if (typeof accuracy === 'number' && !this.willMove(target)) { this.debug('Zoom Lens boosting accuracy'); return accuracy * 1.2; @@ -5776,11 +6157,12 @@ exports.BattleItems = { id: "berserkgene", name: "Berserk Gene", spritenum: 388, - onUpdate: function (pokemon) { + onUpdate(pokemon) { this.boost({atk: 2}); pokemon.addVolatile('confusion'); pokemon.setItem(''); }, + num: 0, gen: 2, isNonstandard: 'gen2', desc: "(Gen 2) On switch-in, raises holder's Attack by 2 and confuses it. Single use.", @@ -5794,15 +6176,16 @@ exports.BattleItems = { basePower: 80, type: "Poison", }, - onUpdate: function (pokemon) { + onResidualOrder: 5, + onResidual(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(10); }, num: 155, @@ -5819,12 +6202,12 @@ exports.BattleItems = { basePower: 80, type: "Ground", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { pokemon.removeVolatile('confusion'); }, num: 156, @@ -5841,12 +6224,12 @@ exports.BattleItems = { basePower: 80, type: "Ice", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'frz') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'frz') { pokemon.cureStatus(); } @@ -5856,20 +6239,6 @@ exports.BattleItems = { isNonstandard: 'gen2', desc: "(Gen 2) Holder is cured if it is frozen. Single use.", }, - "dragonscale": { - id: "dragonscale", - name: "Dragon Scale", - spritenum: 108, - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Dragon') { - return basePower * 1.1; - } - }, - num: 250, - gen: 2, - isNonstandard: 'gen2', - desc: "(Gen 2) Holder's Dragon-type attacks have 1.1x power. Evolves Seadra (trade).", - }, "goldberry": { id: "goldberry", name: "Gold Berry", @@ -5879,15 +6248,16 @@ exports.BattleItems = { basePower: 80, type: "Psychic", }, - onUpdate: function (pokemon) { + onResidualOrder: 5, + onResidual(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onTryEatItem: function (item, pokemon) { + onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon)) return false; }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(30); }, num: 158, @@ -5904,12 +6274,12 @@ exports.BattleItems = { basePower: 80, type: "Grass", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'brn') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'brn') { pokemon.cureStatus(); } @@ -5928,12 +6298,12 @@ exports.BattleItems = { basePower: 80, type: "Water", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'slp') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'slp') { pokemon.cureStatus(); } @@ -5952,12 +6322,12 @@ exports.BattleItems = { basePower: 80, type: "Flying", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status || pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { pokemon.cureStatus(); pokemon.removeVolatile('confusion'); }, @@ -5975,44 +6345,36 @@ exports.BattleItems = { basePower: 80, type: "Fighting", }, - onUpdate: function (pokemon) { - let move = pokemon.getMoveData(pokemon.lastMove); - if (move && move.pp === 0) { + onUpdate(pokemon) { + if (!pokemon.hp) return; + let moveSlot = pokemon.lastMove && pokemon.getMoveData(pokemon.lastMove.id); + if (moveSlot && moveSlot.pp === 0) { pokemon.addVolatile('leppaberry'); - pokemon.volatiles['leppaberry'].move = move; + pokemon.volatiles['leppaberry'].moveSlot = moveSlot; pokemon.eatItem(); } }, - onEat: function (pokemon) { - let move; + onEat(pokemon) { + let moveSlot; if (pokemon.volatiles['leppaberry']) { - move = pokemon.volatiles['leppaberry'].move; + moveSlot = pokemon.volatiles['leppaberry'].moveSlot; pokemon.removeVolatile('leppaberry'); } else { let pp = 99; - for (let moveid in pokemon.moveset) { - if (pokemon.moveset[moveid].pp < pp) { - move = pokemon.moveset[moveid]; - pp = move.pp; + for (const possibleMoveSlot of pokemon.moveSlots) { + if (possibleMoveSlot.pp < pp) { + moveSlot = possibleMoveSlot; + pp = moveSlot.pp; } } } - move.pp += 5; - if (move.pp > move.maxpp) move.pp = move.maxpp; - this.add('-activate', pokemon, 'item: Leppa Berry', move.move); + moveSlot.pp += 5; + if (moveSlot.pp > moveSlot.maxpp) moveSlot.pp = moveSlot.maxpp; + this.add('-activate', pokemon, 'item: Mystery Berry', moveSlot.move); if (pokemon.item !== 'leppaberry') { - let foeActive = pokemon.side.foe.active; - let foeIsStale = false; - for (let i = 0; i < 1; i++) { - if (foeActive.isStale >= 2) { - foeIsStale = true; - break; - } - } - if (!foeIsStale) return; + pokemon.isStale = 2; + pokemon.isStaleSource = 'useleppa'; } - pokemon.isStale = 2; - pokemon.isStaleSource = 'useleppa'; }, num: 154, gen: 2, @@ -6023,7 +6385,7 @@ exports.BattleItems = { id: "pinkbow", name: "Pink Bow", spritenum: 444, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Normal') { return basePower * 1.1; } @@ -6037,7 +6399,7 @@ exports.BattleItems = { id: "polkadotbow", name: "Polkadot Bow", spritenum: 444, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.type === 'Normal') { return basePower * 1.1; } @@ -6056,12 +6418,12 @@ exports.BattleItems = { basePower: 80, type: "Fire", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'par') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'par') { pokemon.cureStatus(); } @@ -6080,12 +6442,12 @@ exports.BattleItems = { basePower: 80, type: "Electric", }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.cureStatus(); } @@ -6104,13 +6466,15 @@ exports.BattleItems = { spritenum: 577, megaStone: "Crucibelle-Mega", megaEvolves: "Crucibelle", - onTakeItem: function (item, source) { + onTakeItem(item, source) { if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; return true; }, num: -1, gen: 6, isNonstandard: true, - desc: "If holder is a Crucibelle, this item allows it to Mega Evolve in battle.", + desc: "If held by a Crucibelle, this item allows it to Mega Evolve in battle.", }, }; + +exports.BattleItems = BattleItems; diff --git a/data/learnsets.js b/data/learnsets.js index f0ff107293cca..0b9a335dbc569 100644 --- a/data/learnsets.js +++ b/data/learnsets.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleLearnsets = { +/**@type {{[k: string]: {learnset: {[k: string]: MoveSource[]}}}} */ +let BattleLearnsets = { missingno: {learnset: { blizzard: ["5L1"], bubblebeam: ["5L1"], @@ -28,2664 +29,11 @@ exports.BattleLearnsets = { triattack: ["5L1"], watergun: ["5L1"], }}, - tomohawk: {learnset: { - acrobatics: ["7M", "5M"], - aerialace: ["7M", "7L17", "5M", "5L17"], - airslash: ["7L33", "5L37"], - attract: ["7M", "5M"], - aurasphere: ["7L1", "5L1"], - aquatail: ["7T"], - batonpass: ["7E", "5E"], - brickbreak: ["7E", "5M"], - bulkup: ["7M", "5M"], - bulldoze: ["7M", "5M"], - confide: ["7M"], - confuseray: ["7M", "5E"], - doubleteam: ["7M", "5M"], - earthpower: ["5L33"], - earthquake: ["7M", "5M"], - echoedvoice: ["7M", "5M"], - facade: ["7M", "5M"], - falseswipe: ["7M", "5M"], - flash: ["6M", "5M"], - fling: ["7M", "5M"], - fly: ["7M", "5M"], - focusblast: ["7M", "5M"], - focusenergy: ["7E", "5E"], - frustration: ["7E", "5M"], - furyswipes: ["7L1", "5L1"], - gigaimpact: ["7M", "5M"], - grassknot: ["7M", "5M"], - harden: ["7L1", "5L1"], - haze: ["7E", "5E"], - healingwish: ["7L60", "5L60"], - heatwave: ["7L42", "5L45"], - helpinghand: ["7T"], - hiddenpower: ["7M", "5M"], - hurricane: ["7L51", "5L55"], - hyperbeam: ["7M", "5M"], - hypervoice: ["7L45", "5L49"], - incinerate: ["6M", "5M"], - irontail: ["7T"], - memento: ["7E", "5E"], - morningsun: ["7L20", "5L20"], - naturepower: ["7E", "5E"], - poweruppunch: ["6L99"], - protect: ["7M", "5M"], - quash: ["7M", "5M"], - raindance: ["7M", "7L29", "5M", "5L29"], - rapidspin: ["7E", "5E"], - reflect: ["5M"], - rest: ["7M", "7L53", "5M", "5L53"], - retaliate: ["6M", "5M"], - return: ["7M", "5M"], - roar: ["7M", "5M"], - rockslide: ["7M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "5M"], - roost: ["7E", "7M", "5E"], - round: ["7M", "5M"], - safeguard: ["7M", "5M"], - scratch: ["7L4"], - secretpower: ["7M"], - skyattack: ["7L55"], - skydrop: ["7M", "7L49", "5M", "5L50"], - snore: ["7T"], - solarbeam: ["7M", "5M"], - stealthrock: ["7E", "5E"], - steelwing: ["7M"], - strength: ["6M", "5M"], - submission: ["7L37", "5L42"], - substitute: ["7M", "5M"], - sunnyday: ["7M", "7L1", "5M", "5L1"], - superpower: ["7L50", "5L51"], - swagger: ["7M", "5M"], - taunt: ["7M", "5M"], - thief: ["7M", "5M"], - toxic: ["7M", "5M"], - whirlwind: ["7L23", "5L23"], - workup: ["7M", "5M"], - yawn: ["7E", "5E"], - }}, - necturna: {learnset: { - attract: ["7M", "5M"], - calmmind: ["7M", "5M"], - confide: ["7M"], - curse: ["7E", "5E"], - cut: ["7M", "5M"], - darkpulse: ["7M"], - doubleteam: ["7M", "5M"], - dreameater: ["7M", "5M"], - energyball: ["7M", "5M"], - facade: ["7M", "5M"], - flash: ["6M", "5M"], - frustration: ["7M", "5M"], - futuresight: ["7E", "5E"], - gigadrain: ["7E", "6T", "5E"], - gigaimpact: ["7M", "5M"], - grassknot: ["7M", "5M"], - grassyterrain: ["7L34"], - gravity: ["7E", "6T", "5E"], - hex: ["7L28", "5L25"], - hiddenpower: ["7M", "5M"], - hornleech: ["7L1", "5L31"], - hyperbeam: ["7M", "5M"], - ingrain: ["7E", "5E"], - leafblade: ["7E", "5E"], - leafstorm: ["7E", "5E"], - leechlife: ["7M"], - leechseed: ["7L12"], - leer: ["7L1", "5L1"], - magicalleaf: ["7L17"], - naturalgift: ["7E", "5E"], - naturepower: ["7M"], - nightmare: ["7E", "5E"], - nightshade: ["7L39"], - ominouswind: ["7E", "5L7"], - painsplit: ["7L45", "6T", "5L40"], - payback: ["7M", "5M"], - phantomforce: ["7L61"], - poisonfang: ["7L1", "5L1"], - powerwhip: ["7L56", "5L60"], - protect: ["7M", "5M"], - psychic: ["7M", "5M"], - psychup: ["7M", "5M"], - rest: ["7M", "5M"], - return: ["7M", "5M"], - round: ["7M", "5M"], - seedbomb: ["7T"], - secretpower: ["7M"], - sleeptalk: ["7M"], - shadowball: ["7M", "7L50", "5M", "5L50"], - shadowclaw: ["7M", "5M"], - shadowsneak: ["7L6", "5L13"], - sketch: ["7E", "5E"], - snore: ["7T"], - solarbeam: ["7M", "5M"], - spite: ["7T"], - stoneedge: ["7M", "5M"], - substitute: ["7M", "5M"], - sunnyday: ["7M", "5M"], - superfang: ["7L1", "6T", "5L1"], - swagger: ["7M", "5M"], - telekinesis: ["6M", "5M"], - thief: ["7M", "5M"], - thunderfang: ["7L1", "5L1"], - torment: ["7M", "5M"], - toxic: ["7M", "5M"], - toxicspikes: ["7L23", "5L19"], - vinewhip: ["7L1", "5L1"], - willowisp: ["7M", "7L23", "5M", "5L19"], - worryseed: ["7T"], - }}, - mollux: {learnset: { - acid: ["7L4", "5L4"], - acidarmor: ["7L33", "5L28"], - acidspray: ["7L12", "5L12"], - aquaring: ["7E", "5E"], - attract: ["7M", "5M"], - bide: ["7L1", "5L1"], - bind: ["7T"], - calmmind: ["7M", "5M"], - charm: ["7E", "5E"], - clearsmog: ["7L25", "5L20"], - confide: ["7M"], - confuseray: ["7L17", "5L17"], - drainingkiss: ["7L20", "7E"], - doubleteam: ["7M", "5M"], - ember: ["7L1", "5L1"], - eruption: ["7L57", "5L52"], - explosion: ["7M", "5M"], - facade: ["7M", "5M"], - finalgambit: ["7L60", "5L57"], - fireblast: ["7M", "5M"], - firespin: ["7E", "5E"], - flamecharge: ["7M", "5M"], - flamethrower: ["7M", "5M"], - flash: ["6M", "5M"], - frustration: ["7M", "5M"], - gastroacid: ["7M", "6T", "5E"], - gigaimpact: ["7M", "5M"], - gunkshot: ["7L52", "6T", "5L49"], - healbell: ["7E", "6T", "5E"], - healpulse: ["7E", "5E"], - heatwave: ["7L36", "6T", "5L33"], - helpinghand: ["7E", "6T", "5E"], - hiddenpower: ["7M", "5M"], - hyperbeam: ["7M", "5M"], - inferno: ["7L49", "5L44"], - lavaplume: ["7L28", "5L25"], - leechlife: ["7M"], - lightscreen: ["7M", "5M"], - moonlight: ["7L33", "5L28"], - overheat: ["7M", "5M"], - protect: ["7M", "5M"], - raindance: ["7M", "5M"], - rapidspin: ["7E", "5E"], - recover: ["7L41", "5L36"], - rest: ["7M", "5M"], - return: ["7M", "5M"], - round: ["7M", "5M"], - secretpower: ["7M"], - shockwave: ["7T"], - sleeptalk: ["7E", "7M", "5E"], - sludgebomb: ["7M", "5M"], - sludgewave: ["7M", "5M"], - snore: ["7T"], - solarbeam: ["7M", "5M"], - spotlight: ["7L65"], - stealthrock: ["7E", "6T", "5E"], - substitute: ["7M", "5M"], - sunnyday: ["7M", "5M"], - swagger: ["7M", "5M"], - thief: ["7M", "5M"], - thunder: ["7M", "5M"], - thunderbolt: ["7M", "5M"], - thunderwave: ["7M", "5M"], - toxic: ["7M", "5M"], - toxicspikes: ["7L44", "5L41"], - trick: ["7E", "6T", "5E"], - venomdrench: ["7E"], - venoshock: ["7M", "5M"], - willowisp: ["7M", "5M"], - withdraw: ["7L9", "5L9"], - }}, - aurumoth: {learnset: { - allyswitch: ["5M"], - ancientpower: ["7L47", "5L47"], - attract: ["7M", "5M"], - blizzard: ["7M", "5M"], - bugbite: ["7T", "5T"], - bugbuzz: ["7E", "5E"], - closecombat: ["7E", "5E"], - confide: ["7M"], - counter: ["7E", "5E"], - cut: ["6M", "5M"], - disable: ["7E", "5E"], - doubleteam: ["7M", "5M"], - dragondance: ["7L1", "5L1"], - dreameater: ["7M", "5M"], - echoedvoice: ["7M", "5M"], - electroweb: ["7T", "5T"], - facade: ["7M", "5M"], - feint: ["7E", "5E"], - finalgambit: ["5L41", "5L41"], - flash: ["6M", "5M"], - fling: ["7M", "5M"], - focusblast: ["7M", "5M"], - frustration: ["7M", "5M"], - gigaimpact: ["7M", "5M"], - hail: ["7M", "5M"], - healingwish: ["7L61", "5L61"], - healpulse: ["7L21", "5L21"], - helpinghand: ["7T", "5T"], - hiddenpower: ["7M", "5M"], - hydropump: ["7E", "5E"], - hyperbeam: ["7M", "5M"], - icebeam: ["7M", "5M"], - icywind: ["7T", "5T"], - infestation: ["7M"], - lightscreen: ["7M", "5M"], - magiccoat: ["7T", "5T"], - magicroom: ["7T", "5T"], - megahorn: ["7E", "5E"], - ominouswind: ["7L27", "5L27"], - overheat: ["7M", "5M"], - protect: ["7M", "5M"], - psychic: ["7M", "5M"], - psychicterrain: ["7L1"], - psychup: ["7M", "5M"], - psyshock: ["7M", "5M"], - quiverdance: ["7L1", "5L1"], - raindance: ["7M", "5M"], - recycle: ["7T", "5T"], - reflect: ["7M", "5M"], - rest: ["7M", "5M"], - retaliate: ["5M"], - return: ["7M", "5M"], - roleplay: ["7T", "5T"], - round: ["7M", "5M"], - safeguard: ["7M", "7E", "5M", "5E"], - secretpower: ["7M"], - shadowball: ["7M", "5M"], - shockwave: ["7M"], - signalbeam: ["7T"], - silverwind: ["7L1", "5L1"], - skillswap: ["7T", "5T"], - sleeptalk: ["7M"], - snore: ["7T"], - solarbeam: ["7M", "5M"], - spotlight: ["7L1"], - steelwing: ["7M"], - stringshot: ["7L1", "5L1"], - strugglebug: ["5M"], - substitute: ["7M", "5M"], - sunnyday: ["7M", "7L1", "5M", "5L1"], - surf: ["7M", "5M"], - swagger: ["7M", "5M"], - tackle: ["7L1", "5L1"], - tailglow: ["7L67", "5L67"], - telekinesis: ["5M"], - thunder: ["7M", "5M"], - thunderbolt: ["7M", "5M"], - toxic: ["7M", "5M"], - trick: ["7T", "5T"], - waterpulse: ["7T"], - willowisp: ["7M", "7L34", "5M", "5L34"], - wingattack: ["7E", "5E"], - wish: ["7L54", "5L54"], - wonderroom: ["7T", "5T"], - xscissor: ["7M", "5M"], - zenheadbutt: ["7T", "5T"], - }}, - malaconda: {learnset: { - aromatherapy: ["7E", "5E"], - attract: ["7M", "5M"], - beatup: ["7E", "5E"], - bind: ["7T", "5T"], - brutalswing: ["7M"], - confide: ["7M"], - crunch: ["7L43", "5L42"], - cut: ["6M", "5M"], - darkpulse: ["7M", "5T"], - doubleteam: ["7M", "5M"], - dragontail: ["7M", "5M"], - energyball: ["7M", "5M"], - facade: ["7M", "5M"], - feint: ["7E"], - followme: ["7L1"], - foulplay: ["7T", "5T"], - frustration: ["7M", "5M"], - gigadrain: ["7T", "5T"], - gigaimpact: ["7M", "5M"], - glare: ["7E", "7L38", "5E"], - grassknot: ["7M", "7L20", "5M", "5L18"], - haze: ["7E", "5E"], - healbell: ["7T", "5T"], - hiddenpower: ["7M", "5M"], - hyperbeam: ["7M", "5M"], - icefang: ["7E"], - irontail: ["7T", "5T"], - knockoff: ["7T", "5T"], - leafblade: ["7L34", "5L36"], - leer: ["7L1"], - naturepower: ["7M"], - nightslash: ["7E", "5E"], - payback: ["7M", "5M"], - poisonpowder: ["7E", "5E"], - powerwhip: ["7L48", "5L57"], - protect: ["7M", "5M"], - punishment: ["7L62", "5L66"], - pursuit: ["7L10", "5L1"], - rapidspin: ["7L1", "5L1"], - recycle: ["7T"], - rest: ["7M", "5M"], - retaliate: ["7M", "5M"], - return: ["7M", "5M"], - roar: ["7M", "5M"], - round: ["7M", "5M"], - scaryface: ["7E", "7L15", "5E"], - screech: ["7E", "5E"], - secretpower: ["7M"], - seedbomb: ["7T", "5T"], - slam: ["7L29", "5L30"], - sleeptalk: ["7M", "5T"], - snarl: ["7M", "5M"], - snore: ["7T", "5T"], - solarbeam: ["7M", "5M"], - solarblade: ["7L66"], - spikyshield: ["7L52"], - spite: ["7T", "5T"], - strength: ["6M", "5M"], - stunspore: ["7E", "5E"], - substitute: ["7M", "5M"], - suckerpunch: ["7L24", "5L25"], - sunnyday: ["7M", "5M"], - swagger: ["7M", "5M"], - sweetscent: ["7E", "5E"], - synthesis: ["7T", "5T"], - taunt: ["7M", "5M"], - thief: ["7M", "5M"], - thunderfang: ["7E"], - toxic: ["7M", "5M"], - uturn: ["7M", "5M"], - vinewhip: ["7L6", "5L1"], - wildcharge: ["7M", "5M"], - worryseed: ["7T", "5T"], - wrap: ["7L1", "5L1"], - wringout: ["7L57", "5L48"], - }}, - cawmodore: {learnset: { - acrobatics: ["7M", "5M"], - aerialace: ["7M", "5M"], - airslash: ["7E", "5E"], - attract: ["7M", "5M"], - belch: ["7L52"], - bellydrum: ["7L1", "7E", "5L35"], - block: ["7T", "5T"], - brickbreak: ["7M", "5M"], - brine: ["7L44", "5L44"], - bulletpunch: ["7L39", "5L39"], - confide: ["7M"], - detect: ["7L26", "5L26"], - doubleteam: ["7M", "5M"], - drainpunch: ["7T", "5T"], - drillpeck: ["7E", "5E"], - endeavor: ["7T", "5T"], - facade: ["7M", "5M"], - flashcannon: ["7M", "7L58", "5M", "5L52"], - fly: ["7M", "5M"], - frustration: ["7M", "5M"], - gigaimpact: ["7M", "5M"], - growl: ["7L5", "5L5"], - hiddenpower: ["7M", "5M"], - hurricane: ["7L64", "5L58"], - hyperbeam: ["7M", "5M"], - ironhead: ["7T", "5T"], - knockoff: ["7T", "5T"], - leer: ["7L1", "5L0"], - metalclaw: ["7L13", "5L13"], - metalsound: ["7E", "5E"], - mirrormove: ["7E", "5E"], - peck: ["7L1", "5L0"], - pluck: ["7M", "5M"], - protect: ["7M", "5M"], - psychup: ["7M", "5M"], - pursuit: ["7E", "5E"], - quickattack: ["7E", "5E"], - quickguard: ["7E", "5E"], - raindance: ["7M", "5M"], - razorwind: ["7E", "5E"], - rest: ["7M", "5M"], - retaliate: ["7M", "5M"], - return: ["7M", "5M"], - rocksmash: ["6M", "5M"], - round: ["7M", "5M"], - screech: ["7L18", "5L18"], - secretpower: ["7M"], - shockwave: ["7T"], - skyattack: ["7T", "5T"], - skydrop: ["7M", "5M"], - sleeptalk: ["7M", "5T"], - smackdown: ["7M", "5M"], - snatch: ["7T", "5T"], - snore: ["7T", "5T"], - steelwing: ["7M", "7L31", "5L31"], - strength: ["6M", "5M"], - substitute: ["7M", "5M"], - surf: ["7M", "5M"], - swagger: ["7M", "5M"], - swift: ["7L9", "5L9"], - tailwind: ["5L48", "5T", "5L48"], - toxic: ["7M", "5M"], - waterpulse: ["7T"], - watersport: ["7E", "5E"], - wingattack: ["7L22", "5L22"], - }}, - volkraken: {learnset: { - absorb: ["7L1"], - aquajet: ["7E"], - aquaring: ["7L46", "6L46"], - assurance: ["7E", "6E"], - attract: ["7M", "6M"], - bind: ["7T"], - bite: ["7L1", "6L1"], - bounce: ["7T"], - captivate: ["7E", "6E"], - confide: ["7M", "6M"], - constrict: ["7L1", "6L1"], - covet: ["7T"], - destinybond: ["7L32", "6L32"], - dive: ["6L39", "6L37"], - doubleteam: ["7M", "6M"], - facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - fireblast: ["7M", "6M"], - firelash: ["7L35"], - firespin: ["7L18", "6L18"], - flameburst: ["7L23", "6L23"], - flamethrower: ["7M", "6M"], - flash: ["7L1", "6M", "6L1"], - flashcannon: ["7M", "6M"], - fling: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - heatwave: ["7L51", "6T", "6L51"], - hiddenpower: ["7M", "6M"], - hydropump: ["7L56", "6L56"], - hyperbeam: ["7M", "6M"], - incinerate: ["7M"], - infestation: ["7M"], - leechlife: ["7M", "6L1"], - memento: ["7L66", "6L66"], - overheat: ["7M", "6M"], - payback: ["7M", "6M"], - powergem: ["7L42", "6L42"], - protect: ["7M", "6M"], - quash: ["7M", "6M"], - raindance: ["7M", "6M"], - reflect: ["7M", "7L1", "6M", "6L1"], - reflecttype: ["7E"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - scald: ["7M", "7L28", "6M", "6L28"], - scaryface: ["7E", "6E"], - secretpower: ["7M"], - sleeptalk: ["7M", "6M"], - snore: ["7T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - thief: ["7M", "6M"], - tickle: ["7E", "6E"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - waterfall: ["7M", "6M"], - watergun: ["7L1", "6L1"], - waterpulse: ["7E", "6T", "6E"], - whirlpool: ["7L14", "6L14"], - willowisp: ["7M", "6M"], - wringout: ["7L60"], - }}, - plasmanta: {learnset: { - acid: ["7L12", "6L12"], - aquatail: ["7L33", "6T", "6L33"], - aurasphere: ["7E"], - attract: ["7M", "6M"], - block: ["7T"], - clearsmog: ["7L22", "6L22"], - confide: ["7M", "6M"], - crosspoison: ["7L51", "6L51"], - cut: ["6M"], - dazzlinggleam: ["7M", "6M"], - discharge: ["7L47", "6L47"], - doubleteam: ["7M", "6M"], - eerieimpulse: ["7L65", "6L65"], - electricterrain: ["7L1"], - electroweb: ["7T"], - encore: ["7L16", "6L16"], - facade: ["7M", "6M"], - flashcannon: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - haze: ["7E", "6E"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - iondeluge: ["7L26", "6L26"], - irontail: ["7T"], - magnetrise: ["7T"], - paraboliccharge: ["7L38", "6L38"], - poisonjab: ["7M"], - poisonsting: ["7L1", "6L1"], - poisontail: ["7L29", "6L29"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psyshock: ["7M", "6M"], - psywave: ["7L42", "6L42"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - shockwave: ["7E", "6T", "6E"], - signalbeam: ["7E", "6T", "6E"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - snore: ["7T"], - splash: ["7E", "6E"], - substitute: ["7M", "6M"], - supersonic: ["7L1", "6L1"], - swagger: ["7M", "7L56", "6M", "6L56"], - taunt: ["7M", "6M"], - thunder: ["7M", "7L60", "6M", "6L60"], - thunderbolt: ["7M", "6M"], - thundershock: ["7L1", "6L1"], - thunderwave: ["7M", "7L19", "6M", "6L19"], - toxic: ["7M", "6M"], - venomdrench: ["7E"], - venoshock: ["7M", "6M"], - waterpulse: ["7E", "6T", "6E"], - wideguard: ["7E", "6E"], - wildcharge: ["7M", "6M"], - zenheadbutt: ["7T"], - }}, - naviathan: {learnset: { - attract: ["7M", "6M"], - bite: ["7E", "6E"], - blizzard: ["7M", "6M"], - brine: ["7L45", "6L45"], - brutalswing: ["7M"], - bubblebeam: ["7L25", "6L25"], - calmmind: ["7M", "6M"], - confide: ["7M", "6M"], - dive: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dragonbreath: ["7L1", "6L1"], - dragonclaw: ["7M", "6M"], - dragondance: ["7E", "6E"], - dragonpulse: ["6T"], - drillpeck: ["7L31", "6L31"], - echoedvoice: ["7M", "6M"], - facade: ["7M", "6M"], - featherdance: ["7E", "6E"], - feint: ["7E", "6E"], - flashcannon: ["7M", "7L35", "6M", "6L35"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - gust: ["7L1", "6L1"], - hail: ["7M", "6M"], - haze: ["7E", "6E"], - heavyslam: ["7L1", "7L68"], - hiddenpower: ["7M", "6M"], - hurricane: ["7L64", "6L64"], - hydropump: ["7L60", "6L60"], - hyperbeam: ["7M", "6M"], - icebeam: ["7M", "6M"], - icefang: ["7E", "6E"], - icepunch: ["6T"], - iciclecrash: ["7L51", "6L51"], - iciclespear: ["7E", "6E"], - icywind: ["6T"], - irondefense: ["6T"], - ironhead: ["7L65", "6T", "6L65"], - irontail: ["7E", "6T", "6E"], - metalclaw: ["7L11", "6L11"], - metalsound: ["7L21", "6L21"], - metronome: ["7E", "6E"], - peck: ["7L1", "6L1"], - protect: ["7M", "6M"], - psychicfangs: ["7E"], - raindance: ["7M", "6M"], - refresh: ["7E", "6E"], - rest: ["7M", "6M"], - retaliate: ["7M", "6M"], - return: ["7M", "6M"], - rocksmash: ["7M", "6M"], - round: ["7M", "6M"], - scald: ["7M", "6M"], - scaryface: ["7L1", "6L1"], - secretpower: ["7M"], - selfdestruct: ["7L74", "6L74"], - slackoff: ["7L39", "6L39"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - splash: ["7L1", "6L1"], - strength: ["6M"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - taunt: ["7M", "6M"], - thunderfang: ["7E", "6E"], - thunderpunch: ["6T"], - toxic: ["7M", "6M"], - waterfall: ["7M", "6M"], - watergun: ["7L7", "6L7"], - waterpulse: ["7E", "6T", "6E"], - whirlpool: ["7E", "6E"], - wideguard: ["7L54", "7E", "6L54", "6E"], - wildcharge: ["7M", "6M"], - }}, - crucibelle: {learnset: { - acidarmor: ["7L32", "6L32"], - astonish: ["7L1", "6L1"], - attract: ["7M", "6M"], - block: ["6T"], - coil: ["7E", "6E"], - confuseray: ["7L16", "6L16"], - confusion: ["7L14", "6L14"], - defensecurl: ["7E", "6E"], - doubleteam: ["7M", "6M"], - embargo: ["7M", "6M"], - endure: ["7L1", "6L1"], - explosion: ["7M", "7L60", "6M", "6L60"], - facade: ["7M", "6M"], - faketears: ["7L10", "6L10"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - gravity: ["6T"], - gunkshot: ["7L56", "6T", "6L56"], - headsmash: ["7L1", "6L1"], - helpinghand: ["6T"], - hex: ["7L44", "6L44"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - infestation: ["7M", "6M"], - ironhead: ["6T"], - lowkick: ["6T"], - magicroom: ["6T"], - payback: ["7M", "6M"], - poisonjab: ["7M", "6M"], - protect: ["7M", "7L1", "6M", "6L1"], - psybeam: ["7L40", "6L40"], - psychic: ["7M", "6M"], - reflect: ["7M", "7L25", "6M", "6L25"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockblast: ["7L52", "6L52"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "7L36", "6M", "6L36"], - rocksmash: ["7M", "6M"], - rockthrow: ["7L5", "6L5"], - rocktomb: ["7M", "6M"], - rollout: ["7E", "6E"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["7M"], - shadowball: ["7M", "6M"], - skillswap: ["6T"], - sleeptalk: ["7M", "6M"], - sludge: ["7L28", "6L28"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - smackdown: ["7M", "7L23", "6M", "6L23"], - snatch: ["6T"], - snore: ["6T"], - stealthrock: ["6T"], - stoneedge: ["7M", "6M"], - substitute: ["7M", "6M"], - swagger: ["7M", "6M"], - torment: ["7M", "7L48", "6M", "6L48"], - toxic: ["7M", "7L7", "6M", "6L7"], - toxicspikes: ["7L19", "6L19"], - trick: ["6T"], - uturn: ["7M", "6M"], - venoshock: ["7M", "6M"], - withdraw: ["7L1", "6L1"], - wonderroom: ["6T"], - woodhammer: ["7E", "6E"], - zenheadbutt: ["6T"], - }}, - kerfluffle: {learnset: { - attract: ["7M", "6M"], - aurasphere: ["7L45", "6L45"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "6M"], - celebrate: ["6S0"], - charm: ["7E", "6E"], - closecombat: ["7L53", "6L53"], - confide: ["7L25", "6L25"], - crushclaw: ["7M", "6M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M"], - drainingkiss: ["7L17", "6L17"], - drainpunch: ["6T"], - dreameater: ["7M", "7L57", "6L57", "6M"], - encore: ["7E", "6E"], - endure: ["7L21", "6L21"], - energyball: ["7M", "6M"], - facade: ["7M", "6M"], - fairywind: ["7L1", "7L5", "6L1", "6L5"], - featherdance: ["7L1", "6L1"], - flashcannon: ["7M", "6M"], - fly: ["6S0"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigadrain: ["6T"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - helpinghand: ["6T"], - hiddenpower: ["7M", "6M"], - holdhands: ["6S0"], - hyperbeam: ["7M", "6M"], - lowkick: ["6T"], - metronome: ["6S0"], - moonblast: ["7L49", "6L49"], - nightmare: ["7L57", "6L57"], - partingshot: ["7L33", "6L33"], - playrough: ["7L37", "6L37"], - poweruppunch: ["7M", "6M"], - protect: ["7M", "6M"], - psychup: ["7M", "6M"], - quickguard: ["7E", "6E"], - rest: ["7M", "7L41", "6L41", "6M"], - retaliate: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - scaryface: ["7L29", "6L29"], - scratch: ["7L1", "6L1"], - secretpower: ["7M"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - snarl: ["7M", "6M"], - snore: ["6T"], - strength: ["7M", "6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - taunt: ["7M", "6M"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - wakeupslap: ["7L13", "6L13"], - wideguard: ["7E", "6E"], - wish: ["7E", "6E"], - workup: ["7M"], - yawn: ["7L9", "6L9"], - }}, - syclant: {learnset: { - absorb: ["7L1"], - attract: ["7M", "4M"], - avalanche: ["7L50", "4M", "4L49"], - blizzard: ["7M", "4M"], - brickbreak: ["7M", "4M"], - brutalswing: ["7M"], - bugbite: ["4T"], - bugbuzz: ["7L46", "4L42"], - bulldoze: ["7M"], - captivate: ["4M"], - confide: ["7M"], - counter: ["4T"], - cut: ["4M"], - doubleedge: ["4T"], - doubleteam: ["7M", "4M"], - earthpower: ["7E", "4T", "4E"], - earthquake: ["7M", "4M"], - endure: ["4M"], - facade: ["7M", "4M"], - falseswipe: ["7M", "4M"], - fellstinger: ["7E"], - fling: ["7M", "4M"], - focusblast: ["7M", "4M"], - focusenergy: ["7L10", "4L8"], - focuspunch: ["6T", "4M"], - frostbreath: ["7M"], - frustration: ["7M", "4M"], - furyattack: ["7L14", "4L1"], - furycutter: ["7L23", "4T"], - gigaimpact: ["7M", "4M"], - hail: ["7M", "7L37", "4M", "4L35"], - hiddenpower: ["7M", "4M"], - honeclaws: ["7M"], - hyperbeam: ["7M", "4M"], - icebeam: ["7M", "4M"], - icepunch: ["7L1", "4T", "4L30"], - iceshard: ["7L5", "4L5"], - iciclecrash: ["7L41"], - iciclespear: ["7L1"], - icywind: ["7L19", "4T", "4L18"], - leechlife: ["7M", "4L1"], - leer: ["7L1", "4L1"], - mimic: ["7E", "4T"], - naturalgift: ["4M"], - pinmissile: ["7E", "4E"], - protect: ["7M", "4M"], - raindance: ["7M", "4M"], - rest: ["7M", "4M"], - return: ["7M", "4M"], - rockslide: ["7M", "4M"], - rocksmash: ["6M", "5M", "4M"], - round: ["7M"], - secretpower: ["7M", "4M"], - sheercold: ["5L59", "4L60"], - silverwind: ["4M"], - signalbeam: ["7E", "7T"], - slash: ["7L28", "4L14"], - sleeptalk: ["7M", "4M"], - snore: ["4T"], - spikes: ["7E", "4E"], - stoneedge: ["7M", "4M"], - strength: ["6M", "5M", "4M"], - stringshot: ["4T"], - strugglebug: ["7M"], - substitute: ["7M", "4M"], - superpower: ["7E", "4T", "4E"], - swagger: ["7M", "4M"], - swordsdance: ["7M", "4M"], - tailglow: ["7E", "4E"], - taunt: ["7M", "4M"], - toxic: ["7M", "4M"], - uturn: ["7M", "4M"], - waterpulse: ["6T", "4M"], - xscissor: ["7M", "7L32", "4M", "4L27"], - }}, - revenankh: {learnset: { - ancientpower: ["4T"], - armthrust: ["7L13", "4L18"], - attract: ["7M", "4M"], - bide: ["7L1", "4L1"], - bind: ["7T"], - brickbreak: ["7M", "4M"], - brutalswing: ["7M"], - bulkup: ["7M", "4M"], - bulldoze: ["7M"], - captivate: ["4M"], - confide: ["7M"], - counter: ["7E", "4T"], - curse: ["7E", "4E"], - destinybond: ["7E", "4E"], - doubleteam: ["7M", "4M"], - drainpunch: ["7M", "4M"], - dreameater: ["7M", "4M"], - dualchop: ["7T"], - earthquake: ["7M", "4M"], - embargo: ["7M", "4M"], - endure: ["4M"], - facade: ["7M", "4M"], - fling: ["7M", "4M"], - focusblast: ["7M", "4M"], - focuspunch: ["7T", "4M"], - forcepalm: ["7E", "4E"], - frustration: ["7M", "4M"], - gigaimpact: ["7M", "4M"], - glare: ["7L26", "4L26"], - hammerarm: ["7L57", "4L44"], - headbutt: ["7T"], - helpinghand: ["7T", "4T"], - hex: ["7E"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - icepunch: ["7T", "4T"], - knockoff: ["7T", "4T"], - machpunch: ["7E", "4E"], - meanlook: ["7L18", "4L23"], - memento: ["7E", "4E"], - metronome: ["7E", "4T"], - mimic: ["7E", "4T"], - moonlight: ["7L62", "4L62"], - mudslap: ["4T"], - nastyplot: ["7E", "4E"], - naturalgift: ["4M"], - ominouswind: ["7E", "4T", "4E"], - painsplit: ["7T", "4T"], - payback: ["7L38", "4M"], - poweruppunch: ["7M"], - powerwhip: ["7L52", "4L38"], - protect: ["7M", "4M"], - psychup: ["7M", "4M"], - punishment: ["7L71", "4L52"], - quickguard: ["7L48"], - raindance: ["7M", "4M"], - rest: ["7M", "4M"], - retaliate: ["7M"], - return: ["7M", "4M"], - revenge: ["7L33", "4L33"], - rockslide: ["7M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "7L23", "4M", "4L13"], - round: ["7M"], - safeguard: ["7M", "4M"], - sandstorm: ["7M", "4M"], - sandtomb: ["7L5", "4L5"], - secretpower: ["7M", "4M"], - shadowball: ["7M", "4M"], - shadowclaw: ["7M"], - shadowpunch: ["7L29", "4L29"], - shadowsneak: ["7E", "4E"], - sleeptalk: ["7M", "4M"], - smackdown: ["7M"], - snore: ["7T"], - spite: ["7T", "4T"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "4M"], - suckerpunch: ["4T"], - sunnyday: ["7M", "4M"], - superpower: ["7T", "4T"], - swagger: ["7M", "4M"], - taunt: ["7M", "4M"], - telekinesis: ["7M"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - trick: ["7T", "4T"], - vacuumwave: ["4T"], - willowisp: ["7M"], - workup: ["7M"], - wrap: ["7L1", "4L1"], - wringout: ["7L66", "4L9"], - }}, - pyroak: {learnset: { - amnesia: ["7L37"], - ancientpower: ["4T"], - aromatherapy: ["7E", "4E"], - aromaticmist: ["7L59"], - attract: ["7M", "4M"], - block: ["7T", "4T"], - bulldoze: ["7M"], - bulletseed: ["7L1", "4M", "4L1"], - burnup: ["7L68"], - confide: ["7M"], - counter: ["7E", "4T", "4E"], - doubleedge: ["7E", "4T"], - doubleteam: ["7M", "4M"], - dragonbreath: ["7E", "4E"], - dragonpulse: ["7T"], - dragontail: ["7M"], - earthpower: ["7T", "4T"], - earthquake: ["7M", "4M"], - ember: ["7L5", "4L9"], - endure: ["4M"], - energyball: ["7M", "7L1", "4M"], - facade: ["7M", "4M"], - fireblast: ["7M", "4M"], - firespin: ["7E", "4L28"], - flameburst: ["7L24"], - flamecharge: ["7M"], - flamethrower: ["7M", "4M"], - flamewheel: ["7L19", "4L17"], - flareblitz: ["7L1", "4L1"], - flash: ["4M"], - flashcannon: ["7M", "7L46"], - frustration: ["7M", "4M"], - gigadrain: ["7L32", "4M", "4L21"], - gigaimpact: ["7M", "4M"], - grassknot: ["7M", "4M"], - grasswhistle: ["7E", "4E"], - grassyterrain: ["7E"], - growth: ["7L28", "4L5"], - headbutt: ["4T"], - heatcrash: ["7L41"], - heatwave: ["7T", "4T"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - incinerate: ["7M"], - ironhead: ["7T"], - irondefense: ["7L37", "4T", "4L42"], - irontail: ["7T", "4M"], - lavaplume: ["7L50", "4L54"], - leechseed: ["7L10", "4L13"], - lightscreen: ["7M", "4M"], - lowkick: ["7T", "4T"], - mimic: ["4T"], - mudslap: ["4T"], - naturalgift: ["4M"], - naturepower: ["7M"], - overheat: ["7M", "4M"], - petalblizzard: ["7E"], - petaldance: ["7L55", "4L36"], - protect: ["7M", "4M"], - psybeam: ["7E", "4E"], - rest: ["7M", "4M"], - return: ["7M", "4M"], - revenge: ["7E", "4E"], - roar: ["7M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "4M"], - round: ["7M"], - safeguard: ["7M", "4M"], - sandtomb: ["7E", "4E"], - secretpower: ["7M", "4M"], - seedbomb: ["7L23", "4T"], - sleeptalk: ["7M", "4M"], - snore: ["4T"], - solarbeam: ["7M", "4M"], - stealthrock: ["7T", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "4M"], - sunnyday: ["7M", "4M"], - swagger: ["7M", "4M"], - sweetscent: ["7L1", "4L1"], - swordsdance: ["7M", "4M"], - synthesis: ["7L14", "4T", "4L48"], - toxic: ["7M", "4M"], - watersport: ["7E", "4E"], - wildcharge: ["7M"], - willowisp: ["7M", "4M"], - woodhammer: ["7L1", "4L1"], - worryseed: ["7T", "4T"], - zapcannon: ["7L64", "4L60"], - zenheadbutt: ["7T"], - }}, - fidgit: {learnset: { - acrobatics: ["7M"], - afteryou: ["7T"], - aerialace: ["7M", "4M"], - attract: ["7M", "4M"], - block: ["7T", "4T"], - bodyslam: ["7L30", "4T", "4L30"], - brutalswing: ["7M"], - bulldoze: ["7M"], - captivate: ["4M"], - cometpunch: ["7L1", "4L1"], - confide: ["7M"], - copycat: ["7L19", "4L19"], - dig: ["7M"], - disable: ["7E", "4E"], - doubleedge: ["7E", "4T"], - doubleteam: ["7M", "4M"], - drillrun: ["7L1"], - earthpower: ["7L60", "4T", "4L59"], - earthquake: ["7M", "4M"], - encore: ["7L5", "4L5"], - endure: ["4M"], - entrainment: ["7E"], - facade: ["7M", "4M"], - fling: ["7M", "4M"], - followme: ["7E", "4E"], - frustration: ["7M", "4M"], - gastroacid: ["7T", "4T"], - gigaimpact: ["7M", "4M"], - gravity: ["7L47", "4T", "4L49"], - gust: ["7L1", "4L1"], - healblock: ["7L54", "4L53"], - helpinghand: ["7L1", "4T", "4L1"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - icywind: ["7T", "4T"], - knockoff: ["7L14", "4T", "4L14"], - lightscreen: ["7M", "4M"], - luckychant: ["7L65", "4L67"], - magicroom: ["7T"], - mefirst: ["7E", "4E"], - metronome: ["7E", "4T", "4E"], - mimic: ["7E", "4T", "4E"], - mudslap: ["4T"], - naturalgift: ["4M"], - ominouswind: ["4T"], - poisonjab: ["7M", "4M"], - protect: ["7M", "4M"], - psychup: ["7M", "4M"], - raindance: ["7M", "4M"], - rapidspin: ["7L9", "4L9"], - reflect: ["7M", "4M"], - rest: ["7M", "4M"], - return: ["7M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "4M"], - roleplay: ["7T"], - rototiller: ["7L1"], - round: ["7M"], - safeguard: ["7M", "4M"], - sandstorm: ["7M", "4M"], - sandtomb: ["7E", "4E"], - secretpower: ["7M", "4M"], - shadowball: ["7M", "4M"], - skillswap: ["7M", "4M"], - sleeptalk: ["7M", "4M"], - sludgebomb: ["7M", "7L35", "4M", "4L35"], - sludgewave: ["7M"], - snatch: ["7M", "4M"], - snore: ["7T", "4T"], - spikes: ["7E", "4E"], - stealthrock: ["7T", "4M"], - stoneedge: ["7M", "4M"], - substitute: ["7M", "4M"], - sunnyday: ["7M", "4M"], - swagger: ["7M", "4M"], - swift: ["4T"], - tailwind: ["7L1", "4T", "4L1"], - taunt: ["7M", "4M"], - thief: ["7M", "4M"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - toxicspikes: ["7L41", "4L41"], - trickroom: ["7M", "4M"], - twister: ["4T"], - uturn: ["7M", "4M"], - venoshock: ["7M"], - whirlwind: ["7L25", "4L25"], - wideguard: ["7L1"], - wish: ["7E", "4E"], - wonderroom: ["7T"], - }}, - stratagem: {learnset: { - accelerock: ["7L21"], - acupressure: ["7L26", "4L20"], - aerialace: ["7M", "4M"], - ancientpower: ["7L30", "4T"], - bulldoze: ["7M"], - calmmind: ["7M", "4M"], - confide: ["7M"], - cut: ["4M"], - dazzlinggleam: ["7M"], - defensecurl: ["7L1", "4L1"], - disable: ["7L17", "4L17"], - doubleedge: ["7L43", "4L32"], - doubleteam: ["7M", "4M"], - earthpower: ["7L47", "4T"], - earthquake: ["7M", "4M"], - embargo: ["7M", "4M"], - endure: ["4M"], - energyball: ["7M", "4M"], - explosion: ["7M", "4M"], - facade: ["7M", "4M"], - falseswipe: ["7M", "4M"], - fireblast: ["7M", "4M"], - flamethrower: ["7M", "4M"], - flash: ["4M"], - frustration: ["7M", "4M"], - gigadrain: ["7T", "4M"], - gigaimpact: ["7M", "4M"], - headbutt: ["4T"], - headsmash: ["7L69", "4L50"], - heatwave: ["7T", "4T"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - incinerate: ["7M"], - laserfocus: ["7L1"], - lockon: ["7L65"], - metalsound: ["7L52", "4L37"], - mudshot: ["7L34", "4L25"], - mudslap: ["7L8", "4T"], - naturalgift: ["4M"], - ominouswind: ["4T"], - paleowave: ["7L1", "4L42"], - powergem: ["7L39", "4L29"], - protect: ["7M", "4M"], - quickguard: ["7L1"], - raindance: ["7M", "4M"], - rest: ["7M", "4M"], - return: ["7M", "4M"], - rockblast: ["7L13", "4L15"], - rockclimb: ["4M"], - rockpolish: ["7M", "4M"], - rockslide: ["7M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "4M"], - rollout: ["7L4", "4T", "4L1"], - round: ["7M"], - sandstorm: ["7M", "4M"], - secretpower: ["7M", "4M"], - shadowball: ["7M", "4M"], - sleeptalk: ["7M", "4M"], - smackdown: ["7M"], - smartstrike: ["7M"], - snore: ["7T", "4T"], - speedswap: ["7L56"], - stealthrock: ["7T", "4M"], - stoneedge: ["7M", "4M"], - substitute: ["7M", "4M"], - sunnyday: ["7M", "4M"], - swagger: ["7M"], - swift: ["4T"], - tackle: ["7L1", "4L1"], - toxic: ["7M", "4M"], - trick: ["7T", "4T"], - vacuumwave: ["7L60", "4T"], - weatherball: ["7L1", "4L1"], - zenheadbutt: ["7T"], - }}, - arghonaut: {learnset: { - aquajet: ["7L19", "4L27"], - armthrust: ["7L14", "4L21"], - attract: ["7M", "4M"], - blizzard: ["7M", "4M"], - brickbreak: ["7M", "4M"], - brine: ["4M"], - bubble: ["7L1", "4L1"], - bulkup: ["7M", "7E", "4E"], - bulldoze: ["7M"], - captivate: ["4M"], - chipaway: ["7L30"], - circlethrow: ["7L1"], - closecombat: ["7E"], - confide: ["7M"], - crosschop: ["7M", "4E"], - cut: ["4M"], - dive: ["4T"], - doubleteam: ["7M", "4M"], - drainpunch: ["4M"], - earthquake: ["7M", "4M"], - embargo: ["7M", "4M"], - endure: ["4M"], - facade: ["7M", "4M"], - fling: ["7M", "4M"], - focusblast: ["7M", "4M"], - focuspunch: ["7L73", "4M", "4L67"], - foulplay: ["7T"], - frustration: ["7M", "4M"], - gigaimpact: ["7M", "4M"], - gunkshot: ["7T", "4T"], - hail: ["7M", "4M"], - headbutt: ["7E", "4T", "4E"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - icebeam: ["7M", "4M"], - icepunch: ["7T", "4T"], - icywind: ["7T", "4T"], - knockoff: ["7T", "4T"], - lowkick: ["7T", "4T"], - lowsweep: ["7M"], - machpunch: ["7L35", "4L32"], - mudslap: ["4T"], - naturalgift: ["4M"], - octazooka: ["7E", "4E"], - poisonjab: ["7M"], - poweruppunch: ["7M"], - protect: ["7M", "4M"], - punishment: ["7L67", "4L60"], - raindance: ["7M", "4M"], - recover: ["7E", "4E"], - rest: ["7M", "4M"], - retaliate: ["7M"], - return: ["7M", "4M"], - revenge: ["7L46", "4L41"], - roar: ["7M", "4M"], - rockslide: ["7M", "4M"], - rocksmash: ["4M"], - rocktomb: ["7M", "4M"], - round: ["7M"], - scald: ["7M", "7L40"], - scaryface: ["7E", "4E"], - secretpower: ["7M", "4M"], - sleeptalk: ["7M", "4M"], - sludgebomb: ["7M", "4M"], - smokescreen: ["7L7", "4L7"], - snatch: ["7M", "4M"], - snore: ["7T", "4T"], - spikes: ["7E"], - stoneedge: ["7M", "4M"], - strength: ["4M"], - submission: ["7L56", "4L55"], - substitute: ["7M", "4M"], - superpower: ["7T", "4T"], - surf: ["7M", "4M"], - swagger: ["7M", "4M"], - taunt: ["7M", "7L24", "4M", "4L36"], - thief: ["7M", "7L51", "4M", "4L47"], - thunderpunch: ["7T", "4T"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - vacuumwave: ["4T"], - waterfall: ["7M", "4M"], - waterpulse: ["7T", "4M"], - whirlpool: ["4M"], - wideguard: ["7L62"], - workup: ["7M"], - wrap: ["7L1", "4L1"], - yawn: ["7L10", "4L1"], - }}, - kitsunoh: {learnset: { - attract: ["7M", "4M"], - bulldoze: ["7M"], - bulletpunch: ["7L1"], - captivate: ["4M"], - confide: ["7M"], - copycat: ["7L22", "4L22"], - curse: ["7E", "4E"], - cut: ["7M", "4M"], - darkpulse: ["7M", "4M"], - defog: ["7E", "4M"], - dig: ["7M", "4M"], - doubleteam: ["7M", "4M"], - dreameater: ["7M", "4M"], - earthquake: ["7M", "4M"], - embargo: ["7M", "4M"], - endeavor: ["7T", "4T"], - facade: ["7M", "4M"], - fakeout: ["7L27", "4L35"], - falseswipe: ["7M", "4M"], - featherdance: ["7E", "4E"], - feintattack: ["7L14", "4L14"], - flail: ["7E", "4E"], - flash: ["7M", "4M"], - flashcannon: ["7M", "4M"], - fling: ["7M", "4M"], - foulplay: ["7M"], - frustration: ["7M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "4M"], - hex: ["7E"], - honeclaws: ["7L31"], - hyperbeam: ["7M", "4M"], - icepunch: ["7T", "4T"], - icywind: ["7T", "4T"], - irondefense: ["7T", "4T"], - ironhead: ["7L43", "4T"], - irontail: ["7E", "4M"], - knockoff: ["7T", "4T"], - lastresort: ["7T", "4T"], - lick: ["7L6", "4L6"], - lowkick: ["7T", "4T"], - magiccoat: ["7T", "4T"], - memento: ["7L52", "4L31"], - metalclaw: ["7L1", "4L27"], - metalsound: ["7E", "4E"], - meteormash: ["7E", "4E"], - naturalgift: ["4M"], - odorsleuth: ["7L10", "4L10"], - ominouswind: ["4T"], - painsplit: ["7T", "4T"], - payback: ["7M", "4M"], - perishsong: ["7L56", "4L55"], - playrough: ["7E"], - protect: ["7M", "4M"], - psychoshift: ["7E", "4E"], - psychup: ["7M", "4M"], - raindance: ["7M", "4M"], - rest: ["7M", "4M"], - retaliate: ["7M"], - return: ["7M", "4M"], - revenge: ["7L39", "4L44"], - roar: ["7M", "4M"], - round: ["7M"], - safeguard: ["7M", "4M"], - scratch: ["7L1", "4L1"], - secretpower: ["7M", "4M"], - shadowball: ["7M", "4M"], - shadowclaw: ["7M", "7L35", "4M", "4L40"], - shadowsneak: ["7L18", "4L18"], - shadowstrike: ["7L48", "4L49"], - sleeptalk: ["7M", "4M"], - snatch: ["7M", "4M"], - snore: ["7T", "4T"], - spite: ["7T", "4T"], - substitute: ["7M", "4M"], - suckerpunch: ["7E", "4T"], - sunnyday: ["7M", "4M"], - superfang: ["7T", "4T"], - superpower: ["7T", "4T"], - swagger: ["7M", "4M"], - tailwhip: ["7L1", "4L1"], - taunt: ["7M", "4M"], - telekinesis: ["7M"], - thief: ["7M", "4M"], - thunderpunch: ["7T", "4T"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - trick: ["7T", "4T"], - trickroom: ["7M", "4M"], - uturn: ["7M", "4M"], - willowisp: ["7M", "4M"], - wish: ["7E"], - yawn: ["7E", "4E"], - }}, - cyclohm: {learnset: { - aerialace: ["7M", "4M"], - aquatail: ["7T"], - attract: ["7M", "4M"], - bide: ["7L1", "4L1"], - blizzard: ["7M", "4M"], - bulldoze: ["7M"], - captivate: ["4M"], - charge: ["7L11", "4L11"], - chargebeam: ["7M", "4M"], - confide: ["7M"], - discharge: ["7L33", "4L37"], - doublehit: ["7L20", "4L22"], - doubleteam: ["7M", "4M"], - dracometeor: ["7T", "4T"], - dragonbreath: ["7E", "7L29", "4E"], - dragonclaw: ["7M", "4M"], - dragonpulse: ["7T", "4M"], - dragonrage: ["7L24", "4L7"], - dragontail: ["7M"], - earthquake: ["7M", "4M"], - electricterrain: ["7L1"], - endure: ["4M"], - electroweb: ["7T"], - facade: ["7M", "4M"], - fireblast: ["7M", "4M"], - flamethrower: ["7M", "4M"], - flash: ["4M"], - frustration: ["7M", "4M"], - gigaimpact: ["7M", "4M"], - growl: ["7L1", "4L1"], - hail: ["7M", "4M"], - headbutt: ["4T"], - healbell: ["7E", "4E"], - hiddenpower: ["7M", "4M"], - honeclaws: ["7M"], - hydropump: ["7E", "4E"], - hyperbeam: ["7M", "4M"], - icebeam: ["7M", "4M"], - icywind: ["7T"], - incinerate: ["7M"], - irontail: ["7T"], - lightscreen: ["7M", "4M"], - mudslap: ["7E", "4T", "4E"], - naturalgift: ["4M"], - naturepower: ["7M"], - outrage: ["4T"], - powdersnow: ["7E"], - powergem: ["7E", "4E"], - protect: ["7M", "4M"], - raindance: ["7M", "7L37", "4M", "4L19"], - rest: ["7M", "4M"], - return: ["7M", "4M"], - roar: ["7M", "4M"], - round: ["7M"], - sandstorm: ["7M", "4M"], - secretpower: ["7M", "4M"], - shockwave: ["7T", "4M"], - signalbeam: ["4T"], - slackoff: ["7L48", "4L42"], - sleeptalk: ["7M", "4M"], - snore: ["4T"], - sonicboom: ["7L16", "4L29"], - strength: ["4M"], - substitute: ["7M", "4M"], - sunnyday: ["7M", "4M"], - surf: ["7M", "4M"], - swagger: ["7M"], - swift: ["4T"], - tackle: ["7L1", "4L1"], - thrash: ["7L53", "4L50"], - thunder: ["7M", "7L65", "4M"], - thunderbolt: ["7M", "4M"], - thundershock: ["7L11", "4L15"], - thunderwave: ["7M", "4M"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - triattack: ["7L1", "4L33"], - trickroom: ["7M", "4M"], - twister: ["7L7", "4T"], - voltswitch: ["7M"], - waterfall: ["7M", "4M"], - waterpulse: ["7T", "4M"], - weatherball: ["7L42"], - whirlwind: ["7L1", "4L1"], - wildcharge: ["7M"], - zapcannon: ["7L59", "4L59"], - }}, - colossoil: {learnset: { - ancientpower: ["4T"], - aquatail: ["7T", "4T"], - attract: ["7M", "4M"], - bite: ["5L10", "4L11"], - block: ["7T"], - bodyslam: ["7L42", "4T", "4L22"], - bounce: ["7L48", "4T", "4L35"], - brickbreak: ["7M", "4M"], - brutalswing: ["7M"], - bulldoze: ["7M"], - captivate: ["4M"], - chipaway: ["7E"], - confide: ["7M"], - crunch: ["7L58", "4L55"], - darkpulse: ["7M", "4M"], - dig: ["4M"], - dive: ["4T"], - doubleedge: ["7E", "4T", "4E"], - doubleteam: ["7M", "4M"], - drillrun: ["7L1"], - earthpower: ["7T", "4T"], - earthquake: ["7M", "4M"], - embargo: ["7M", "4M"], - encore: ["7E", "4E"], - endure: ["4M"], - facade: ["7M", "4M"], - fakeout: ["7E", "4E"], - firefang: ["7E", "4E"], - fissure: ["7E", "4E"], - flail: ["7E", "4E"], - foulplay: ["7T"], - frustration: ["7M", "4M"], - furyattack: ["7L26"], - gigaimpact: ["7M", "4M"], - hiddenpower: ["7M", "4M"], - highhorsepower: ["7L1"], - hornattack: ["7L5", "4L6"], - horndrill: ["7L74", "7E", "4L70", "4E"], - hyperbeam: ["7M", "4M"], - irontail: ["7T", "4M"], - knockoff: ["7T", "4T"], - leer: ["7L1", "4L1"], - magnitude: ["7L32", "4L42"], - megahorn: ["7L64", "4L63"], - mimic: ["7E", "4T"], - mudslap: ["7L16", "4T"], - naturalgift: ["4M"], - payback: ["7M", "4M"], - peck: ["7L1", "4L1"], - protect: ["7M", "4M"], - pursuit: ["7L37", "4L29"], - raindance: ["7M", "4M"], - rapidspin: ["7L21", "4L17"], - rest: ["7M", "4M"], - retaliate: ["7M"], - return: ["7M", "4M"], - roar: ["7M", "4M"], - rockslide: ["7M", "4M"], - rocksmash: ["7M", "4M"], - rocktomb: ["7M"], - rollout: ["4T"], - round: ["7M"], - sandstorm: ["7M", "4M"], - sandtomb: ["7E", "4E"], - screech: ["7E", "4E"], - secretpower: ["7M", "4M"], - sleeptalk: ["7M", "4M"], - smartstrike: ["7M"], - snarl: ["7M"], - snatch: ["7M", "4M"], - snore: ["7T", "4T"], - spitup: ["7L53", "4L48"], - stockpile: ["7L53", "4L48"], - stoneedge: ["7M", "4M"], - strength: ["4M"], - substitute: ["7M", "4M"], - suckerpunch: ["7E", "4T", "4E"], - sunnyday: ["7M", "4M"], - superpower: ["7T", "4T"], - swagger: ["7M", "4M"], - swallow: ["7L53", "4L48"], - taunt: ["7M", "4M"], - thunderfang: ["7E", "4E"], - torment: ["7M"], - toxic: ["7M", "4M"], - uturn: ["7M", "4M"], - wideguard: ["7E"], - }}, - krilowatt: {learnset: { - aquatail: ["7L1"], - attract: ["7M", "4M"], - blizzard: ["7M", "4M"], - bubble: ["7L1", "4L1"], - bubblebeam: ["7L28", "4L28"], - bulldoze: ["7M"], - captivate: ["4M"], - charge: ["7L1", "4L1"], - confide: ["7M"], - confuseray: ["7L11", "4L11"], - copycat: ["7L39", "4L39"], - counter: ["7L33", "7E", "4L33", "4E"], - cut: ["6M", "5M", "4M"], - discharge: ["7M", "7L51", "4L51"], - dive: ["6M", "4T"], - doubleteam: ["7M", "4M"], - earthpower: ["7T", "4T"], - earthquake: ["7M", "4M"], - electroweb: ["7T"], - endure: ["4M"], - entrainment: ["7E"], - facade: ["7M", "4M"], - flash: ["4M"], - fling: ["7M", "4M"], - followme: ["7E", "4E"], - frustration: ["7M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "4M"], - guillotine: ["7L57", "4L57"], - hail: ["7M", "4M"], - heartswap: ["7L53", "4L46"], - helpinghand: ["7T", "4T"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - icebeam: ["7M", "4M"], - icepunch: ["7T", "4T"], - iceshard: ["7L1", "4L1"], - icywind: ["7T", "4T"], - imprison: ["7L17", "4L17"], - irontail: ["7T"], - lowkick: ["7T", "4T"], - lowsweep: ["7M"], - magneticflux: ["7L1"], - mefirst: ["7E", "4E"], - metronome: ["7E", "4E"], - mindreader: ["7E", "4E"], - mirrorcoat: ["7L24", "7E", "4L24", "4E"], - muddywater: ["7L68", "4L68"], - naturalgift: ["4M"], - payback: ["7M", "4M"], - protect: ["7M", "4M"], - raindance: ["7M", "4M"], - recycle: ["7T", "4M"], - rest: ["7M", "4M"], - return: ["7M", "4M"], - round: ["7M"], - scald: ["7M"], - secretpower: ["7T", "4M"], - sheercold: ["7E", "4E"], - shockwave: ["7T", "4M"], - signalbeam: ["7T", "4T"], - sleeptalk: ["7M", "4M"], - snore: ["7T"], - speedswap: ["7E"], - substitute: ["7M", "4M"], - surf: ["7M", "4M"], - swagger: ["7M"], - swift: ["4T"], - thunder: ["7M", "7L63", "4M", "4L63"], - thunderbolt: ["7M", "4M"], - thunderpunch: ["7T", "4T"], - thundershock: ["7L5", "4L5"], - thunderwave: ["7M", "4M"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - voltswitch: ["7M"], - waterfall: ["7M", "4M"], - waterpulse: ["7T", "4M"], - whirlpool: ["7M", "4M"], - wildcharge: ["7M", "7L53"], - }}, - voodoom: {learnset: { - acupressure: ["7L40", "4L40"], - afteryou: ["7T"], - astonish: ["7L1", "4L1"], - attract: ["7M", "4M"], - aurasphere: ["7L45", "4L45"], - batonpass: ["7E", "4E"], - beatup: ["7L55", "4L55"], - brickbreak: ["7M", "4M"], - bulkup: ["7M", "4M"], - bulldoze: ["7M"], - captivate: ["4M"], - charge: ["7L19", "4L19"], - closecombat: ["7L35", "4L35"], - confide: ["7M"], - copycat: ["7L1", "4L1"], - counter: ["7E", "4T"], - darkpulse: ["7M", "4M"], - doubleteam: ["7M"], - drainpunch: ["7T", "4M"], - dreameater: ["7M", "4M"], - earthquake: ["7M", "4M"], - endure: ["4M"], - facade: ["7M", "4M"], - feintattack: ["7L30", "4L30"], - flashcannon: ["7M"], - fling: ["7M", "4M"], - focusblast: ["7M", "4M"], - focuspunch: ["7T", "4M"], - followme: ["7L20", "4L20"], - foulplay: ["7L61"], - frustration: ["7M", "4M"], - gigaimpact: ["7M", "4M"], - grudge: ["7L15", "4L15"], - hex: ["7L48"], - hiddenpower: ["7M", "4M"], - hyperbeam: ["7M", "4M"], - hypervoice: ["7T"], - icepunch: ["7T", "4T"], - imprison: ["7E", "4E"], - knockoff: ["7T", "4T"], - lowkick: ["7T", "4T"], - lowsweep: ["7M"], - machpunch: ["7E", "4E"], - magiccoat: ["7T", "4T"], - magicroom: ["7T"], - memento: ["7E", "4E"], - metronome: ["7E", "4T"], - mimic: ["4T"], - mudslap: ["4T"], - nastyplot: ["7E"], - naturalgift: ["4M"], - nightmare: ["7E", "4T"], - nightslash: ["7M", "7L1", "4L1"], - painsplit: ["7L1", "4T", "4L1"], - payback: ["7M", "4M"], - perishsong: ["7E", "4E"], - pinmissile: ["7L25", "4L25"], - powertrip: ["7E"], - poweruppunch: ["7M"], - protect: ["7M", "4M"], - psychic: ["7M", "4M"], - pursuit: ["7E", "4E"], - rest: ["7M", "4M"], - retaliate: ["7M"], - return: ["7M", "4M"], - revenge: ["7L1", "4L1"], - rockslide: ["7M", "4M"], - rocksmash: ["7M", "4M"], - round: ["7M"], - screech: ["7E", "4E"], - secretpower: ["7M", "4M"], - shockwave: ["7T", "4M"], - sleeptalk: ["7M", "4M"], - smartstrike: ["7M"], - smellingsalts: ["7E", "4E"], - snarl: ["7M"], - snatch: ["4M"], - snore: ["7T", "4T"], - spite: ["7L1", "4T", "4L1"], - stoneedge: ["7M", "4M"], - strength: ["7M", "4M"], - substitute: ["7M", "7L50", "4M", "4L50"], - sunnyday: ["7M", "4M"], - swagger: ["7M", "4M"], - taunt: ["7M", "4M"], - tearfullook: ["7L22"], - thief: ["7M", "4M"], - thunderbolt: ["7M"], - thunderwave: ["7M", "4M"], - torment: ["7M", "4M"], - toxic: ["7M", "4M"], - uproar: ["7T", "4T"], - vacuumwave: ["4T"], - workup: ["7M"], - wrap: ["7L1", "4L1"], - }}, - syclar: {learnset: { - attract: ["4M"], - avalanche: ["4M"], - blizzard: ["4M"], - bugbite: ["4T"], - bugbuzz: ["4L42"], - captivate: ["4M"], - counter: ["4T"], - cut: ["4M"], - doubleteam: ["4M"], - earthpower: ["4T", "4E"], - endure: ["4M"], - facade: ["4M"], - falseswipe: ["4M"], - fling: ["4M"], - focusenergy: ["4L13"], - frustration: ["4M"], - furyattack: ["4L1"], - furycutter: ["4T"], - hail: ["4M", "4L28"], - hiddenpower: ["4M"], - icebeam: ["4M"], - iceshard: ["4L8"], - icywind: ["4T", "4L18"], - leechlife: ["4L5"], - leer: ["4L1"], - mimic: ["4T"], - naturalgift: ["4M"], - pinmissile: ["4E"], - protect: ["4M"], - rest: ["4M"], - return: ["4M"], - secretpower: ["4M"], - sheercold: ["4L49"], - silverwind: ["4M"], - sleeptalk: ["4M"], - snore: ["4T"], - spikes: ["4E"], - stringshot: ["4T"], - substitute: ["4M"], - superpower: ["4T", "4E"], - swagger: ["4M"], - swordsdance: ["4M"], - tailglow: ["4E"], - taunt: ["4M"], - toxic: ["4M"], - uturn: ["4M"], - waterpulse: ["4M"], - xscissor: ["4M", "4L23"], - }}, - embirch: {learnset: { - aromatherapy: ["4E"], - attract: ["4M"], - block: ["4T"], - bulletseed: ["4M", "4L1"], - counter: ["4T", "4E"], - doubleedge: ["4T", "4L33"], - doubleteam: ["4M"], - dragonbreath: ["4E"], - ember: ["4L9"], - endure: ["4M"], - energyball: ["4M"], - facade: ["4M"], - firespin: ["4L25"], - flamethrower: ["4M"], - flamewheel: ["4L17"], - flash: ["4M"], - frustration: ["4M"], - gigadrain: ["4M", "4L21"], - grassknot: ["4M"], - grasswhistle: ["4E"], - growth: ["4L5"], - headbutt: ["4T"], - heatwave: ["4T"], - hiddenpower: ["4M"], - irondefense: ["4T"], - irontail: ["4M"], - lavaplume: ["4L40"], - leechseed: ["4L13"], - lightscreen: ["4M"], - lowkick: ["4T"], - mimic: ["4T"], - mudslap: ["4T"], - naturalgift: ["4M"], - overheat: ["4M"], - petaldance: ["4L29"], - protect: ["4M"], - psybeam: ["4E"], - rest: ["4M"], - return: ["4M"], - revenge: ["4E"], - roar: ["4M"], - rockclimb: ["4M"], - rockslide: ["4M"], - rocksmash: ["4M"], - rocktomb: ["4M"], - safeguard: ["4M"], - sandtomb: ["4E"], - secretpower: ["4M"], - seedbomb: ["4T"], - sleeptalk: ["4M"], - snore: ["4T"], - solarbeam: ["4M"], - stealthrock: ["4M"], - strength: ["4M"], - substitute: ["4M"], - sunnyday: ["4M"], - swagger: ["4M"], - sweetscent: ["4L1"], - swordsdance: ["4M"], - synthesis: ["4T", "4L37"], - toxic: ["4M"], - watersport: ["4E"], - willowisp: ["4M"], - worryseed: ["4T"], - zapcannon: ["4L44"], - }}, - flarelm: {learnset: { - aromatherapy: ["4E"], - attract: ["4M"], - block: ["4T"], - bulletseed: ["4M", "4L1"], - counter: ["4T", "4E"], - doubleedge: ["4T"], - doubleteam: ["4M"], - dragonbreath: ["4E"], - ember: ["4L9"], - endure: ["4M"], - energyball: ["4M"], - facade: ["4M"], - firespin: ["4L28"], - flamethrower: ["4M"], - flamewheel: ["4L17"], - flash: ["4M"], - frustration: ["4M"], - gigadrain: ["4M", "4L21"], - grassknot: ["4M"], - grasswhistle: ["4E"], - growth: ["4L5"], - headbutt: ["4T"], - heatwave: ["4T"], - hiddenpower: ["4M"], - irondefense: ["4T", "4L40"], - irontail: ["4M"], - lavaplume: ["4L48"], - leechseed: ["4L13"], - lightscreen: ["4M"], - lowkick: ["4T"], - mimic: ["4T"], - mudslap: ["4T"], - naturalgift: ["4M"], - overheat: ["4M"], - petaldance: ["4L36"], - protect: ["4M"], - psybeam: ["4E"], - rest: ["4M"], - return: ["4M"], - revenge: ["4E"], - roar: ["4M"], - rockclimb: ["4M"], - rockslide: ["4M"], - rocksmash: ["4M"], - rocktomb: ["4M"], - safeguard: ["4M"], - sandtomb: ["4E"], - secretpower: ["4M"], - seedbomb: ["4T"], - sleeptalk: ["4M"], - snore: ["4T"], - solarbeam: ["4M"], - stealthrock: ["4M"], - strength: ["4M"], - substitute: ["4M"], - sunnyday: ["4M"], - swagger: ["4M"], - sweetscent: ["4L1"], - swordsdance: ["4M"], - synthesis: ["4T", "4L44"], - toxic: ["4M"], - watersport: ["4E"], - willowisp: ["4M"], - worryseed: ["4T"], - zapcannon: ["4L52"], - }}, - breezi: {learnset: { - aerialace: ["4M", "4L55"], - attract: ["4M"], - block: ["4T"], - bodyslam: ["4T", "4L30"], - captivate: ["4M"], - copycat: ["4L19"], - disable: ["4E"], - doubleedge: ["4T"], - doubleteam: ["4M"], - encore: ["4L5"], - endure: ["4M"], - facade: ["4M"], - fling: ["4M"], - followme: ["4E"], - frustration: ["4M"], - gastroacid: ["4T"], - gust: ["4L1"], - healblock: ["4L50"], - helpinghand: ["4T", "4L1"], - hiddenpower: ["4M"], - icywind: ["4T"], - knockoff: ["4T", "4L14"], - lightscreen: ["4M"], - luckychant: ["4L59"], - mefirst: ["4E"], - metronome: ["4E"], - mimic: ["4T", "4E"], - mudslap: ["4T"], - naturalgift: ["4M"], - ominouswind: ["4T"], - poisonjab: ["4M"], - protect: ["4M"], - psychup: ["4M"], - raindance: ["4M"], - reflect: ["4M"], - rest: ["4M", "4L44"], - return: ["4M"], - safeguard: ["4M", "4L9"], - sandstorm: ["4M"], - sandtomb: ["4E"], - secretpower: ["4M"], - shadowball: ["4M"], - skillswap: ["4M"], - sleeptalk: ["4M"], - sludgebomb: ["4M", "4L34"], - snatch: ["4M"], - snore: ["4T"], - spikes: ["4E"], - substitute: ["4M"], - sunnyday: ["4M"], - swagger: ["4M"], - swift: ["4T"], - tailwind: ["4T", "4L1"], - toxic: ["4M"], - toxicspikes: ["4L39"], - trickroom: ["4M"], - twister: ["4T"], - uturn: ["4M"], - whirlwind: ["4L25"], - wish: ["4E"], - }}, - scratchet: {learnset: { - aerialace: ["5M"], - attract: ["5M"], - batonpass: ["5E"], - brickbreak: ["5M"], - bulkup: ["5M", "5L40"], - bulldoze: ["5M"], - confuseray: ["5E"], - doubleteam: ["5M"], - echoedvoice: ["5M"], - facade: ["5M"], - falseswipe: ["5M"], - flash: ["5M"], - fling: ["5M"], - focusblast: ["5M"], - focusenergy: ["5L13", "5E"], - frustration: ["5M"], - furyswipes: ["5L1"], - grassknot: ["5M"], - harden: ["5L9"], - haze: ["5E"], - hiddenpower: ["5M"], - hypervoice: ["5L36"], - memento: ["5E"], - naturepower: ["5E"], - protect: ["5M"], - quash: ["5M"], - raindance: ["5M"], - rapidspin: ["5E"], - rest: ["5M", "5L53"], - retaliate: ["5M", "5L57"], - return: ["5M"], - roar: ["5M", "5L23"], - rockslide: ["5M"], - rocksmash: ["5M", "5L18"], - rocktomb: ["5M"], - roost: ["5E"], - round: ["5M"], - safeguard: ["5M"], - stealthrock: ["5E"], - strength: ["5M"], - submission: ["5L32"], - substitute: ["5M"], - sunnyday: ["5M"], - superpower: ["5L45"], - swagger: ["5M"], - taunt: ["5M", "5L49"], - thief: ["5M"], - toxic: ["5M"], - workup: ["5M", "5L27"], - yawn: ["5E"], - }}, - necturine: {learnset: { - attract: ["5M"], - calmmind: ["5M"], - curse: ["5E"], - cut: ["5M"], - doubleteam: ["5M"], - dreameater: ["5M"], - energyball: ["5M"], - facade: ["5M"], - flash: ["5M"], - frustration: ["5M"], - futuresight: ["5E"], - gigadrain: ["5E"], - grassknot: ["5M"], - gravity: ["5E"], - hex: ["5L25"], - hiddenpower: ["5M"], - ingrain: ["5E"], - leafblade: ["5E"], - leafstorm: ["5E"], - leer: ["5L1"], - naturalgift: ["5L31", "5E"], - nightmare: ["5E"], - ominouswind: ["5L7"], - painsplit: ["5L37"], - payback: ["5M"], - powerwhip: ["5L50"], - protect: ["5M"], - psychic: ["5M"], - psychup: ["5M"], - rest: ["5M"], - return: ["5M"], - round: ["5M"], - shadowball: ["5M", "5L44"], - shadowsneak: ["5L13"], - sketch: ["5E"], - solarbeam: ["5M"], - substitute: ["5M"], - sunnyday: ["5M"], - swagger: ["5M"], - telekinesis: ["5M"], - thief: ["5M"], - torment: ["5M"], - toxic: ["5M"], - toxicspikes: ["5L19"], - vinewhip: ["5L1"], - willowisp: ["5M", "5L19"], - }}, - cupra: {learnset: { - allyswitch: ["5M"], - ancientpower: ["5L44"], - attract: ["5M"], - bugbite: ["5T", "5L7"], - bugbuzz: ["5E"], - closecombat: ["5E"], - counter: ["5E"], - cut: ["5M"], - disable: ["5E"], - doubleteam: ["5M"], - dreameater: ["5M"], - echoedvoice: ["5M"], - electroweb: ["5T"], - facade: ["5M"], - feint: ["5E"], - finalgambit: ["5L38"], - flash: ["5M"], - fling: ["5M"], - frustration: ["5M"], - hail: ["5M"], - healpulse: ["5L21"], - helpinghand: ["5T"], - hiddenpower: ["5M"], - hydropump: ["5E"], - lightscreen: ["5M"], - magiccoat: ["5T"], - magicroom: ["5T"], - megahorn: ["5E"], - protect: ["5M"], - psychic: ["5M"], - psychup: ["5M"], - psyshock: ["5M"], - raindance: ["5M"], - recycle: ["5T"], - reflect: ["5M"], - rest: ["5M"], - retaliate: ["5M"], - return: ["5M"], - roleplay: ["5T"], - round: ["5M"], - safeguard: ["5M", "5E"], - shadowball: ["5M"], - skillswap: ["5T"], - stringshot: ["5L1"], - strugglebug: ["5M", "5L27"], - substitute: ["5M"], - sunnyday: ["5M", "5L14"], - swagger: ["5M"], - tackle: ["5L1"], - telekinesis: ["5M"], - toxic: ["5M"], - trick: ["5T"], - willowisp: ["5M", "5L32"], - wingattack: ["5E"], - wish: ["5L48"], - wonderroom: ["5T"], - xscissor: ["5M"], - zenheadbutt: ["5T", "5L54"], - }}, - argalis: {learnset: { - allyswitch: ["5M"], - ancientpower: ["5L47"], - attract: ["5M"], - bugbite: ["5L7"], - bugbuzz: ["5E"], - closecombat: ["5E"], - counter: ["5E"], - cut: ["5M"], - disable: ["5E"], - doubleteam: ["5M"], - dreameater: ["5M"], - echoedvoice: ["5M"], - electroweb: ["5T"], - facade: ["5M"], - feint: ["5E"], - finalgambit: ["5L41"], - flash: ["5M"], - fling: ["5M"], - focusblast: ["5M"], - frustration: ["5M"], - hail: ["5M"], - healpulse: ["5L21"], - helpinghand: ["5T"], - hiddenpower: ["5M"], - hydropump: ["5E"], - icebeam: ["5M"], - icywind: ["5T"], - lightscreen: ["5L57"], - magiccoat: ["5T"], - magicroom: ["5T"], - megahorn: ["5E"], - ominouswind: ["5L27"], - protect: ["5M"], - psychic: ["5M", "5L62"], - psychup: ["5M"], - psyshock: ["5M"], - raindance: ["5M"], - recycle: ["5T"], - reflect: ["5L57"], - rest: ["5M"], - retaliate: ["5M"], - return: ["5M"], - roleplay: ["5T"], - round: ["5M"], - safeguard: ["5M", "5E"], - shadowball: ["5M"], - skillswap: ["5T"], - stringshot: ["5L1"], - strugglebug: ["5M"], - substitute: ["5M"], - sunnyday: ["5L14"], - swagger: ["5M"], - tackle: ["5L1"], - telekinesis: ["5M"], - thunderbolt: ["5M"], - toxic: ["5M"], - trick: ["5T"], - willowisp: ["5L34"], - wingattack: ["5E"], - wish: ["5L52"], - wonderroom: ["5T"], - xscissor: ["5M"], - zenheadbutt: ["5T"], - }}, - brattler: {learnset: { - aromatherapy: ["5E"], - attract: ["5M"], - beatup: ["5E"], - bind: ["5T"], - crunch: ["5L39"], - cut: ["5M"], - darkpulse: ["5T"], - doubleteam: ["5M"], - dragontail: ["5M"], - energyball: ["5M"], - facade: ["5M"], - foulplay: ["5T"], - frustration: ["5M"], - gigadrain: ["5T"], - glare: ["5E"], - grassknot: ["5L18"], - haze: ["5E"], - healbell: ["5T"], - hiddenpower: ["5M"], - irontail: ["5T"], - knockoff: ["5T"], - leafblade: ["5L34"], - nightslash: ["5E"], - payback: ["5M"], - poisonpowder: ["5E"], - powerwhip: ["5L50"], - protect: ["5M"], - punishment: ["5L55"], - pursuit: ["5L6", "5L1"], - rest: ["5M"], - retaliate: ["5M"], - return: ["5M"], - roar: ["5M"], - round: ["5M"], - scaryface: ["5E"], - screech: ["5E"], - seedbomb: ["5T"], - slam: ["5L30"], - sleeptalk: ["5T"], - snarl: ["5M"], - snore: ["5T"], - solarbeam: ["5M"], - spite: ["5T"], - strength: ["5M"], - stunspore: ["5E"], - substitute: ["5M"], - suckerpunch: ["5L25"], - sunnyday: ["5M"], - swagger: ["5M"], - sweetscent: ["5E"], - synthesis: ["5T"], - taunt: ["5M"], - thief: ["5M"], - toxic: ["5M"], - uturn: ["5M"], - vinewhip: ["5L1"], - wildcharge: ["5M"], - worryseed: ["5T"], - wrap: ["5L12", "5L1"], - wringout: ["5L44"], - }}, - cawdet: {learnset: { - acrobatics: ["5M"], - aerialace: ["5M"], - airslash: ["5E"], - attract: ["5M"], - bellydrum: ["5L34"], - block: ["5T"], - brickbreak: ["5M"], - brine: ["5L42"], - bulletpunch: ["5L38"], - detect: ["5L26"], - doubleteam: ["5M"], - drainpunch: ["5T"], - drillpeck: ["5E"], - endeavor: ["5T"], - facade: ["5M"], - flashcannon: ["5M", "5L49"], - fly: ["5M"], - frustration: ["5M"], - growl: ["5L5"], - hiddenpower: ["5M"], - hurricane: ["5L53"], - ironhead: ["5T"], - knockoff: ["5T"], - leer: ["5L0"], - metalclaw: ["5L13"], - metalsound: ["5E"], - mirrormove: ["5E"], - peck: ["5L0"], - pluck: ["5M"], - protect: ["5M"], - pursuit: ["5E"], - psychup: ["5M"], - quickattack: ["5E"], - quickguard: ["5E"], - raindance: ["5M"], - razorwind: ["5E"], - rest: ["5M"], - retaliate: ["5M"], - return: ["5M"], - rocksmash: ["5M"], - round: ["5M"], - screech: ["5L18"], - skyattack: ["5T"], - skydrop: ["5M"], - sleeptalk: ["5T"], - smackdown: ["5M"], - snatch: ["5T"], - snore: ["5T"], - steelwing: ["5L31"], - strength: ["5M"], - substitute: ["5M"], - surf: ["5M"], - swagger: ["5M"], - swift: ["5L9"], - tailwind: ["5T", "5L45"], - toxic: ["5M"], - watersport: ["5E"], - wingattack: ["5L22"], - }}, - volkritter: {learnset: { - aquaring: ["6L44"], - assurance: ["6E"], - attract: ["6M"], - bite: ["6L1"], - captivate: ["6E"], - confide: ["6M"], - constrict: ["6L1"], - destinybond: ["6L32"], - dive: ["6L36"], - doubleteam: ["6M"], - facade: ["6M"], - falseswipe: ["6M"], - fireblast: ["6M"], - firespin: ["6L18"], - flameburst: ["6L23"], - flamethrower: ["6M"], - flash: ["6M", "6L1"], - flashcannon: ["6M"], - fling: ["6M"], - frustration: ["6M"], - heatwave: ["6L48"], - hiddenpower: ["6M"], - hydropump: ["6L51"], - incinerate: ["6M"], - leechlife: ["6L1"], - memento: ["6L59"], - overheat: ["6M"], - payback: ["6M"], - powergem: ["6L39"], - protect: ["6M"], - quash: ["6M"], - raindance: ["6M"], - reflect: ["6M", "6L4"], - rest: ["6M"], - return: ["6M"], - round: ["6M"], - scald: ["6M", "6L28"], - scaryface: ["6E"], - sleeptalk: ["6M"], - substitute: ["6M"], - sunnyday: ["6M"], - surf: ["6M"], - swagger: ["6M"], - thief: ["6M"], - tickle: ["6E"], - torment: ["6M"], - toxic: ["6M"], - uturn: ["6M"], - waterfall: ["6M"], - watergun: ["6L1"], - waterpulse: ["6E"], - whirlpool: ["6L14"], - willowisp: ["6M"], - }}, - snugglow: {learnset: { - acid: ["6L12"], - aquatail: ["6L32"], - attract: ["6M"], - clearsmog: ["6L22"], - confide: ["6M"], - cut: ["6M"], - dazzlinggleam: ["6M"], - discharge: ["6L42"], - doubleteam: ["6M"], - eerieimpulse: ["6L49"], - encore: ["6L16"], - facade: ["6M"], - flashcannon: ["6M"], - frustration: ["6M"], - haze: ["6E"], - hiddenpower: ["6M"], - iondeluge: ["6L26"], - paraboliccharge: ["6L36"], - poisonsting: ["6L6"], - poisontail: ["6L29"], - protect: ["6M"], - psychic: ["6M"], - psyshock: ["6M"], - psywave: ["6L39"], - raindance: ["6M"], - rest: ["6M"], - return: ["6M"], - round: ["6M"], - shockwave: ["6E"], - signalbeam: ["6E"], - sleeptalk: ["6M"], - sludgebomb: ["6M"], - sludgewave: ["6M"], - splash: ["6E"], - substitute: ["6M"], - supersonic: ["6L1"], - swagger: ["6M"], - taunt: ["6M"], - thunder: ["6M", "6L46"], - thunderbolt: ["6M"], - thundershock: ["6L1"], - thunderwave: ["6M", "6L19"], - toxic: ["6M"], - venoshock: ["6M"], - waterpulse: ["6E"], - wideguard: ["6E"], - wildcharge: ["6M"], - }}, - floatoy: {learnset: { - attract: ["6M"], - bite: ["6E"], - blizzard: ["6M"], - brine: ["6L38"], - bubblebeam: ["6L23"], - calmmind: ["6M"], - confide: ["6M"], - dive: ["6M"], - doubleteam: ["6M"], - dragonbreath: ["6L1"], - dragonclaw: ["6M"], - dragondance: ["6E"], - dragonpulse: ["6T"], - drillpeck: ["6L27"], - echoedvoice: ["6M"], - facade: ["6M"], - featherdance: ["6E"], - feint: ["6E"], - frustration: ["6M"], - gust: ["6L1"], - hail: ["6M"], - haze: ["6E"], - hiddenpower: ["6M"], - hydropump: ["6L50"], - icebeam: ["6M"], - icefang: ["6E"], - icepunch: ["6T"], - iciclecrash: ["6L42"], - iciclespear: ["6E"], - icywind: ["6T"], - ironhead: ["6T", "6L53"], - irontail: ["6T", "6E"], - metalclaw: ["6L11"], - metronome: ["6E"], - peck: ["6L1"], - protect: ["6M"], - raindance: ["6M"], - refresh: ["6E"], - rest: ["6M"], - return: ["6M"], - rocksmash: ["6M"], - round: ["6M"], - scald: ["6M"], - scaryface: ["6L1"], - secretpower: ["6M"], - slackoff: ["6L39"], - sleeptalk: ["6M"], - snore: ["6T"], - splash: ["6L1"], - substitute: ["6M"], - surf: ["6M"], - swagger: ["6M"], - taunt: ["6M"], - thunderfang: ["6E"], - toxic: ["6M"], - waterfall: ["6M"], - watergun: ["6L7"], - waterpulse: ["6T", "6E"], - whirlpool: ["6E"], - wideguard: ["6E"], - }}, - caimanoe: {learnset: { - attract: ["6M"], - bite: ["6E"], - blizzard: ["6M"], - brine: ["6L43"], - bubblebeam: ["6L25"], - calmmind: ["6M"], - confide: ["6M"], - dive: ["6M"], - doubleteam: ["6M"], - dragonbreath: ["6L1"], - dragonclaw: ["6M"], - dragondance: ["6E"], - dragonpulse: ["6T"], - drillpeck: ["6L31"], - echoedvoice: ["6M"], - facade: ["6M"], - featherdance: ["6E"], - feint: ["6E"], - flashcannon: ["6M", "6L35"], - frustration: ["6M"], - gust: ["6L1"], - hail: ["6M"], - haze: ["6E"], - hiddenpower: ["6M"], - hydropump: ["6L60"], - icebeam: ["6M"], - icefang: ["6E"], - icepunch: ["6T"], - iciclecrash: ["6L47"], - iciclespear: ["6E"], - icywind: ["6T"], - irondefense: ["6T"], - ironhead: ["6T", "6L58"], - irontail: ["6T", "6E"], - metalclaw: ["6L11"], - metalsound: ["6L21"], - metronome: ["6E"], - peck: ["6L1"], - protect: ["6M"], - raindance: ["6M"], - refresh: ["6E"], - rest: ["6M"], - retaliate: ["6M"], - return: ["6M"], - rocksmash: ["6M"], - round: ["6M"], - scald: ["6M"], - scaryface: ["6L1"], - secretpower: ["6M"], - selfdestruct: ["6L62"], - slackoff: ["6L39"], - sleeptalk: ["6M"], - snore: ["6T"], - splash: ["6L1"], - strength: ["6M"], - substitute: ["6M"], - surf: ["6M"], - swagger: ["6M"], - taunt: ["6M"], - thunderfang: ["6E"], - thunderpunch: ["6T"], - toxic: ["6M"], - waterfall: ["6M"], - watergun: ["6L7"], - waterpulse: ["6T", "6E"], - whirlpool: ["6E"], - wideguard: ["6E"], - }}, - pluffle: {learnset: { - attract: ["6M"], - charm: ["6E"], - confide: ["6L25"], - dazzlinggleam: ["6M"], - doubleteam: ["6M"], - drainingkiss: ["6L13"], - dreameater: ["6M", "6L42"], - encore: ["6L16", "6E"], - energyball: ["6M"], - facade: ["6M"], - fairywind: ["6L5", "6L1"], - featherdance: ["6L1"], - flashcannon: ["6M"], - frustration: ["6M"], - gigadrain: ["6T"], - grassknot: ["6M"], - helpinghand: ["6T"], - hiddenpower: ["6M"], - moonblast: ["6L36"], - nightmare: ["6L42"], - partingshot: ["6L24"], - playrough: ["6L27"], - protect: ["6M"], - psychup: ["6M"], - quickguard: ["6E"], - rest: ["6M", "6L31"], - retaliate: ["6M"], - return: ["6M"], - round: ["6M"], - scaryface: ["6L20"], - scratch: ["6L1"], - sleeptalk: ["6M"], - sludgebomb: ["6M"], - sludgewave: ["6M"], - snarl: ["6M"], - snore: ["6T"], - substitute: ["6M"], - sunnyday: ["6M"], - swagger: ["6M"], - taunt: ["6M"], - torment: ["6M"], - toxic: ["6M"], - wakeupslap: ["6L10"], - wideguard: ["6E"], - wish: ["6E"], - yawn: ["6L7"], - }}, bulbasaur: {learnset: { amnesia: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], block: ["5S3"], bodyslam: ["7V", "3T"], bulletseed: ["4M", "3M"], @@ -2693,69 +41,70 @@ exports.BattleLearnsets = { celebrate: ["6S5"], charm: ["7E", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], doubleedge: ["7L27", "7V", "6L27", "5L27", "4L27", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["5S3"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], frenzyplant: ["5S3"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gigadrain: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grasspledge: ["7T", "6T", "5T"], grasswhistle: ["7E", "6E", "5E", "4E", "3E"], grassyterrain: ["7E", "6E"], - growl: ["7L3", "7V", "6L3", "6S4", "6S5", "5L3", "5S2", "4L3", "3L4", "3S1"], + growl: ["7L3", "7V", "6L3", "6S5", "6S4", "5L3", "5S2", "4L3", "3L4", "3S1"], growth: ["7L25", "7V", "6L25", "5L25", "4L25", "3L32", "3S0"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], ingrain: ["7E", "6E", "5E", "4E"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], leafstorm: ["7E", "6E", "5E", "4E"], - leechseed: ["7V", "6L7", "6S4", "5L7", "5S2", "4L7", "3L7", "3S1"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + leechseed: ["7L7", "7V", "6L7", "6S4", "5L7", "5S2", "4L7", "3L7", "3S1"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], magicalleaf: ["7E", "6E", "5E", "4E", "3E"], megadrain: ["7V"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], - petaldance: ["7E", "6E", "5E", "4E", "3E"], + petaldance: ["7E", "7V", "6E", "5E", "4E", "3E"], poisonpowder: ["7L13", "7V", "6L13", "6S4", "5L13", "4L13", "3L15"], powerwhip: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], razorleaf: ["7L19", "7V", "6L19", "5L19", "4L19", "3L20"], + razorwind: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], - skullbash: ["7E", "6E", "5E", "4E", "3E"], + seedbomb: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + skullbash: ["7E", "7V", "6E", "5E", "4E", "3E"], sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludge: ["7E", "6E", "5E", "4E"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3L46", "3S0"], strength: ["6M", "5M", "4M", "3M"], stringshot: ["4T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L21", "6L21", "5L21", "4L21", "3L25", "3S0"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L21", "7V", "6L21", "5L21", "4L21", "3L25", "3S0"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L39", "3S0"], + synthesis: ["7T", "7L33", "7V", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L39", "3S0"], tackle: ["7L1", "7V", "6L1", "6S5", "5L1", "5S2", "4L1", "3L1", "3S1"], takedown: ["7L15", "7V", "6L15", "5L15", "4L15"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -2763,163 +112,166 @@ exports.BattleLearnsets = { vinewhip: ["7L9", "7L7", "7V", "6L9", "6S4", "5L9", "5S2", "4L9", "3L10", "3S1"], weatherball: ["5S3"], workup: ["7M"], - worryseed: ["7L31", "6T", "6L31", "5T", "5L31", "4T", "4L31"], + worryseed: ["7T", "7L31", "6T", "6L31", "5T", "5L31", "4T", "4L31"], }}, ivysaur: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], bodyslam: ["7V", "3T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], doubleedge: ["7L31", "7V", "6L31", "5L31", "4L31", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grasspledge: ["7T", "6T", "5T"], growl: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], growth: ["7L28", "7V", "6L28", "5L28", "4L28", "3L38"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], leechseed: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], megadrain: ["7V"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], razorleaf: ["7L20", "7V", "6L20", "5L20", "4L20", "3L22"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L44", "4M", "4L44", "3M", "3L56"], strength: ["6M", "5M", "4M", "3M"], stringshot: ["4T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L23", "6L23", "5L23", "4L23", "3L29"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L23", "7V", "6L23", "5L23", "4L23", "3L29"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39", "3L47"], + synthesis: ["7T", "7L39", "7V", "6T", "6L39", "5T", "5L39", "4T", "4L39", "3L47"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7L15", "7V", "6L15", "5L15", "4L15"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], vinewhip: ["7L9", "7V", "6L9", "5L9", "4L9", "3L10"], workup: ["7M"], - worryseed: ["7L36", "6T", "6L36", "5T", "5L36", "4T", "4L36"], + worryseed: ["7T", "7L36", "6T", "6L36", "5T", "5L36", "4T", "4L36"], }}, venusaur: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], - block: ["6T", "5T", "4T"], + bind: ["7T", "6T", "5T"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], bulldoze: ["7M", "6M", "5M"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], doubleedge: ["7L31", "7V", "6L31", "5L31", "4L31", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], earthquake: ["7M", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], frenzyplant: ["7T", "6T", "6S0", "5T", "4T", "3T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], grasspledge: ["7T", "6T", "6S0", "5T"], growl: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], growth: ["7L28", "7V", "6L28", "5L28", "4L28", "3L41"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], leechseed: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], megadrain: ["7V"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], petalblizzard: ["7L50", "6L50"], petaldance: ["7L1", "6L32", "5L32", "4L32"], poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], razorleaf: ["7L20", "7V", "6L20", "5L20", "4L20", "3L22"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7L53", "7V", "6M", "6L53", "6S0", "5M", "5L53", "4M", "4L53", "3M", "3L65"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M", "3M"], stringshot: ["4T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L23", "6L23", "5L23", "4L23", "3L29"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L23", "7V", "6L23", "5L23", "4L23", "3L29"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["7L45", "6T", "6L45", "6S0", "5T", "5L45", "4T", "4L45", "3L53"], + synthesis: ["7T", "7L45", "7V", "6T", "6L45", "6S0", "5T", "5L45", "4T", "4L45", "3L53"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7L15", "7V", "6L15", "5L15", "4L15"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], vinewhip: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], workup: ["7M"], - worryseed: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39"], + worryseed: ["7T", "7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39"], }}, charmander: {learnset: { acrobatics: ["5S6"], aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["7E", "6E"], - ancientpower: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E", "4E", "3E"], - bellydrum: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7E", "7V", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7E", "7V", "6E", "5E", "4E", "3E"], + bellydrum: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], - bite: ["7E", "6E", "5E", "4E", "3E"], + bite: ["7E", "7V", "6E", "5E", "4E", "3E"], blastburn: ["5S6"], block: ["5S6"], bodyslam: ["7V", "3T"], @@ -2929,167 +281,171 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], counter: ["7E", "7V", "6E", "5E", "4E", "3T"], crunch: ["7E", "6E", "5E", "4E"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragonclaw: ["7M", "6M", "5M", "4M", "3M"], dragondance: ["7E", "6E", "5E", "4E", "3E"], - dragonpulse: ["7E", "6T", "6E", "5E"], + dragonpulse: ["7T", "7E", "6T", "6E", "5E"], dragonrage: ["7L16", "7V", "6L16", "6S7", "5L16", "4L16", "3L43"], dragonrush: ["7E", "6E", "5E", "4E"], - dynamicpunch: ["3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], ember: ["7L7", "7V", "6L7", "6S7", "5L7", "5S4", "4L7", "3L7", "3S0"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["5S6"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firefang: ["7L25", "6L25", "5L25", "4L25"], firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], firespin: ["7L43", "7V", "6L43", "5L43", "4L37", "3L49"], flameburst: ["7L28", "6L28", "5L28"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L34", "3M", "3L31"], flareblitz: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - growl: ["7L1", "7V", "6L1", "6S7", "6S8", "5L1", "5S4", "4L1", "3L1", "3S0"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "4S1", "4S2", "4S3", "4S5", "3M"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + growl: ["7L1", "7V", "6L1", "6S8", "6S7", "5L1", "5S4", "4L1", "3L1", "3S0"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "4S5", "4S3", "4S2", "4S1", "3M"], honeclaws: ["6M", "5M"], - howl: ["4S1", "4S2", "4S3", "4S5"], + howl: ["4S5", "4S3", "4S2", "4S1"], incinerate: ["6M", "5M"], inferno: ["7L46", "6L46", "5L46"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], leer: ["7V"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metalclaw: ["7E", "6E", "5E", "4E", "3L13"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["7E", "6E", "5T", "5E", "4E", "3E"], + outrage: ["7E", "7V", "6E", "5T", "5E", "4E", "3E"], overheat: ["7M", "6M", "5M", "4M", "3M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["4S1", "4S2", "4S3", "4S5"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["4S5", "4S3", "4S2", "4S1"], rage: ["7V", "3L19"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "4S1", "4S2", "4S3", "4S5", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "4S5", "4S3", "4S2", "4S1", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scaryface: ["7L19", "6L19", "5L19", "4L19", "3L25"], + scaryface: ["7L19", "7V", "6L19", "5L19", "4L19", "3L25"], scratch: ["7L1", "7V", "6L1", "6S8", "5L1", "5S4", "4L1", "3L1", "3S0"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], shadowclaw: ["7M", "6M", "5M", "4M"], skullbash: ["7V"], slash: ["7L34", "7V", "6L34", "5L34", "4L28", "3L37"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L10", "6L10", "6S7", "5L10", "5S4", "4L10", "3L13"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L10", "7V", "6L10", "6S7", "5L10", "5S4", "4L10", "3L13"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], takedown: ["7V"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "6M", "5M", "4M"], workup: ["7M"], }}, charmeleon: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T"], + dragonpulse: ["7T", "6T"], dragonrage: ["7L17", "7V", "6L17", "5L17", "4L17", "3L48"], - dynamicpunch: ["3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], ember: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firefang: ["7L28", "6L28", "5L28", "4L28"], firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], firespin: ["7L50", "7V", "6L50", "5L50", "4L43", "3L55"], flameburst: ["7L32", "6L32", "5L32"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L39", "3M", "3L34"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], incinerate: ["6M", "5M"], inferno: ["7L54", "6L54", "5L54"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], leer: ["7V"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metalclaw: ["3L13"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], outrage: ["5T"], overheat: ["7M", "6M", "5M", "4M", "3M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V", "3L20"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scaryface: ["7L21", "6L21", "5L21", "4L21", "3L27"], + scaryface: ["7L21", "7V", "6L21", "5L21", "4L21", "3L27"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], shadowclaw: ["7M", "6M", "5M", "4M"], skullbash: ["7V"], slash: ["7L39", "7V", "6L39", "5L39", "4L32", "3L41"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L10", "6L10", "5L10", "4L10", "3L13"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L10", "7V", "6L10", "5L10", "4L10", "3L13"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "6M", "5M", "4M"], workup: ["7M"], @@ -3097,8 +453,8 @@ exports.BattleLearnsets = { charizard: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["4T"], - airslash: ["7L1", "6L1", "6S1", "6S2", "5L1", "4L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], + airslash: ["7L1", "6L1", "6S2", "6S1", "5L1", "4L1"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blastburn: ["7T", "6T", "6S4", "5T", "4T", "3T"], bodyslam: ["7V", "3T"], @@ -3108,105 +464,109 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - defog: ["4M"], + defensecurl: ["7V", "3T"], + defog: ["7T", "4M"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonclaw: ["7M", "7L1", "7S5", "6M", "6L1", "6S2", "5M", "5L1", "4M", "4L1", "3M"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L17", "7V", "7S5", "7S6", "6L17", "6S2", "5L17", "4L17", "3L54", "3S0"], + dragonbreath: ["7V"], + dragonclaw: ["7M", "7L1", "7S6", "6M", "6L1", "6S2", "5M", "5L1", "4M", "4L1", "3M"], + dragondance: ["7S8"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L17", "7V", "7S7", "7S6", "7V", "6L17", "6S2", "5L17", "4L17", "3L54", "3S0"], dragontail: ["7M", "6M", "5M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "7S8", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - ember: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], + ember: ["7L7", "7L1", "7V", "6L1", "6S5", "5L1", "4L1", "3L1"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firefang: ["7L28", "6L28", "6S1", "6S2", "5L28", "4L28"], + firefang: ["7L28", "6L28", "6S2", "6S1", "5L28", "4L28"], firepledge: ["7T", "6T", "6S4", "5T"], - firepunch: ["6T", "5T", "4T", "3T"], - firespin: ["7L56", "7V", "6L56", "5L56", "4L49", "3L64", "3S0"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + firespin: ["7L56", "7V", "6L56", "6S5", "5L56", "4L49", "3L64", "3S0"], fissure: ["7V"], - flameburst: ["7L32", "6L32", "6S1", "5L32"], + flameburst: ["7L32", "6L32", "6S5", "6S1", "5L32"], flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L47", "7V", "7S6", "6M", "6L47", "5M", "5L47", "4M", "4L42", "3M", "3L34"], - flareblitz: ["7L77", "7L1", "7S5", "6L1", "6S4", "5L77", "4L66"], + flamethrower: ["7M", "7L47", "7V", "7S7", "7V", "6M", "6L47", "6S5", "5M", "5L47", "4M", "4L42", "3M", "3L34"], + flareblitz: ["7L77", "7L1", "7S8", "7S6", "6L1", "6S4", "5L77", "4L66"], fling: ["7M", "6M", "5M", "4M"], - fly: ["7M", "7V", "7S5", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "7S8", "7S6", "7V", "6M", "5M", "4M", "3M"], focusblast: ["7M", "6M", "6S3", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - heatwave: ["7L71", "7L1", "6T", "6L1", "5T", "5L71", "4T", "4L59", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "7L71", "7L1", "6T", "6L1", "5T", "5L71", "4T", "4L59", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], holdhands: ["6S3"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], inferno: ["7L62", "6L62", "6S1", "5L62"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], leer: ["7V"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metalclaw: ["3L1"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], overheat: ["7M", "6M", "6S3", "5M", "4M", "3M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V", "3L20"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - scaryface: ["7L21", "6L21", "6S4", "5L21", "4L21", "3L27"], + sandstorm: ["7V"], + scaryface: ["7L21", "7V", "6L21", "6S4", "5L21", "4L21", "3L27"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7V", "7S6", "3T"], + seismictoss: ["7V", "7S7", "3T"], shadowclaw: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], skullbash: ["7V"], skydrop: ["7M", "6M", "5M"], - slash: ["7L41", "7V", "7S6", "6L41", "5L41", "4L32", "3L44", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L10", "6L1", "5L1", "4L1", "3L1"], - snore: ["6T", "5T", "4T", "3T"], + slash: ["7L41", "7V", "7S7", "7V", "6L41", "5L41", "4L32", "3L44", "3S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L10", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "6S3", "5M", "4M"], - steelwing: ["7M", "6M", "4M", "3M"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], willowisp: ["7M", "6M", "5M", "4M"], - wingattack: ["7L1", "6L36", "5L36", "4L36", "3L36", "3S0"], + wingattack: ["7L1", "7V", "6L36", "5L36", "4L36", "3L36", "3S0"], workup: ["7M"], }}, squirtle: {learnset: { aquajet: ["7E", "6E", "5E", "4E"], aquaring: ["7E", "6E", "5E", "4E"], - aquatail: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], aurasphere: ["7E", "6E"], bide: ["7V"], bite: ["7L16", "7V", "6L16", "5L16", "4L16", "3L18"], @@ -3220,87 +580,89 @@ exports.BattleLearnsets = { captivate: ["4M"], celebrate: ["6S4"], confide: ["7M", "6M"], + confusion: ["7V"], counter: ["7V", "3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["7E", "6T", "6E"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + dragonpulse: ["7T", "7E", "6T", "6E"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["7E", "6E", "5E", "4E"], falseswipe: ["5S2"], - flail: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["5S2"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydrocannon: ["5S2"], hydropump: ["7L40", "7V", "6L40", "5L40", "4L37", "3L47"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L34", "6T", "6L34", "5T", "5L34", "4T", "4L34"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L34", "6T", "6L34", "5T", "5L34", "4T", "4L34"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], - mist: ["7E", "6E", "5E", "4E", "3E"], + mirrorcoat: ["7E", "7V", "6E", "5E", "4E", "3E"], + mist: ["7E", "7V", "6E", "5E", "4E", "3E"], muddywater: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L28"], + protect: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L28"], rage: ["7V"], - raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L34", "3M", "3L33"], - rapidspin: ["7L19", "6L19", "5L19", "4L19", "3L23"], + raindance: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L34", "3M", "3L33"], + rapidspin: ["7L19", "7V", "6L19", "5L19", "4L19", "3L23"], reflect: ["7V"], refresh: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7L31", "7V", "6L31", "5L31", "4L31", "3L40"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7L1", "7V", "6L1", "6S4", "5L1", "5S1", "4L1", "3L1", "3S0"], - tailwhip: ["7L4", "7V", "6L4", "6S3", "6S4", "5L4", "5S1", "4L4", "3L4", "3S0"], + tailwhip: ["7L4", "7V", "6L4", "6S4", "6S3", "5L4", "5S1", "4L4", "3L4", "3S0"], takedown: ["7V"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7L7", "7V", "6L7", "6S3", "5L13", "4L13", "3L13"], waterpledge: ["7T", "6T", "5T"], - waterpulse: ["7L25", "6T", "6L25", "5L25", "4M", "4L25", "3M"], + waterpulse: ["7T", "7L25", "6T", "6L25", "5L25", "4M", "4L25", "3M"], waterspout: ["7E", "6E", "5E", "4E"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], withdraw: ["7L10", "7V", "6L10", "6S3", "5L10", "5S1", "4L10", "3L10", "3S0"], workup: ["7M"], yawn: ["7E", "6E", "5E", "4E", "3E"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, wartortle: {learnset: { - aquatail: ["7L33", "6T", "6L32", "5T", "5L32", "4T", "4L32"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L33", "6T", "6L32", "5T", "5L32", "4T", "4L32"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L17", "7V", "6L16", "5L16", "4L16", "3L19"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -3312,72 +674,73 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + dragonpulse: ["7T", "6T"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L49", "7V", "6L48", "5L48", "4L44", "3L53"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "7L25", "6M", "6L24", "5M", "5L24", "4M", "4L24", "3M", "3L31"], + protect: ["7M", "7L25", "7V", "6M", "6L24", "5M", "5L24", "4M", "4L24", "3M", "3L31"], rage: ["7V"], - raindance: ["7M", "7L45", "6M", "6L44", "5M", "5L44", "4M", "4L40", "3M", "3L37"], - rapidspin: ["7L21", "6L20", "5L20", "4L20", "3L25"], + raindance: ["7M", "7L45", "7V", "6M", "6L44", "5M", "5L44", "4M", "4L40", "3M", "3L37"], + rapidspin: ["7L21", "7V", "6L20", "5L20", "4L20", "3L25"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7L37", "7V", "6L36", "5L36", "4L36", "3L45"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7L7", "7L1", "7V", "6L1", "5L13", "4L13", "3L13"], waterpledge: ["7T", "6T", "5T"], - waterpulse: ["7L29", "6T", "6L28", "5L28", "4M", "4L28", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "7L29", "6T", "6L28", "5L28", "4M", "4L28", "3M"], + whirlpool: ["7V", "4M"], withdraw: ["7L10", "7V", "6L10", "5L10", "4L10", "3L10"], workup: ["7M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, blastoise: {learnset: { - aquatail: ["7L33", "6T", "6L32", "5T", "5L32", "4T", "4L32"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L33", "6T", "6L32", "5T", "5L32", "4T", "4L32"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], bite: ["7L17", "7V", "6L16", "5L16", "4L16", "3L19"], @@ -3391,96 +754,98 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], darkpulse: ["7M", "6M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T"], + dragonpulse: ["7T", "6T"], dragontail: ["7M", "6M", "5M"], - dynamicpunch: ["3T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], flashcannon: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydrocannon: ["7T", "6T", "6S1", "5T", "4T", "3T"], hydropump: ["7L60", "7V", "6L60", "6S1", "5L60", "4L53", "3L68", "3S0"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L47", "6T", "6L46", "6S1", "5T", "5L46", "4T", "4L46"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L47", "6T", "6L46", "6S1", "5T", "5L46", "4T", "4L46"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + liquidation: ["7T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], poweruppunch: ["6M"], - protect: ["7M", "7L25", "6M", "6L24", "5M", "5L24", "4M", "4L24", "3M", "3L31", "3S0"], + protect: ["7M", "7L25", "7V", "6M", "6L24", "5M", "5L24", "4M", "4L24", "3M", "3L31", "3S0"], rage: ["7V"], - raindance: ["7M", "7L54", "6M", "6L53", "5M", "5L53", "4M", "4L46", "3M", "3L42", "3S0"], - rapidspin: ["7L21", "6L20", "5L20", "4L20", "3L25"], + raindance: ["7M", "7L54", "7V", "6M", "6L53", "5M", "5L53", "4M", "4L46", "3M", "3L42", "3S0"], + rapidspin: ["7L21", "7V", "6L20", "5L20", "4L20", "3L25"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7L40", "7V", "6L39", "5L39", "4L39", "3L55", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7L7", "7L1", "7V", "6L1", "5L13", "4L13", "3L13"], waterpledge: ["7T", "6T", "6S1", "5T"], - waterpulse: ["7L29", "6T", "6L28", "5L28", "4M", "4L28", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "7L29", "6T", "6L28", "5L28", "4M", "4L28", "3M"], + whirlpool: ["7V", "4M"], withdraw: ["7L10", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], workup: ["7M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, caterpie: {learnset: { - bugbite: ["7L9", "6T", "6L15", "5T", "5L15", "4T", "4L15"], - electroweb: ["6T", "5T"], - snore: ["6T", "5T", "4T"], + bugbite: ["7T", "7L9", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + electroweb: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T", "4T"], stringshot: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], }}, metapod: {learnset: { - bugbite: ["6T", "5T", "4T"], - electroweb: ["6T", "5T"], + bugbite: ["7T", "6T", "5T", "4T"], + electroweb: ["7T", "6T", "5T"], harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - irondefense: ["6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], stringshot: ["4T"], }}, butterfree: {learnset: { @@ -3488,37 +853,38 @@ exports.BattleLearnsets = { aerialace: ["7M", "6M", "5M", "4M", "3M", "3S0"], aircutter: ["5D", "4T"], airslash: ["7L43"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], bugbuzz: ["7L31", "6L42", "5L42", "4L40"], captivate: ["7L37", "6L40", "5L40", "4M", "4L36"], confide: ["7M", "6M"], - confusion: ["7L11", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - defog: ["4M"], + confusion: ["7L11", "7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + curse: ["7V"], + defog: ["7T", "4M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gust: ["7L1", "7V", "6L16", "5L16", "4L16", "3L28"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], megadrain: ["7V"], mimic: ["7V", "3T"], morningsun: ["3S0"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], ominouswind: ["4T"], poisonpowder: ["7L13", "7V", "6L12", "5L12", "4L12", "3L13"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L17", "7V", "6L24", "5L24", "4L24", "3L34"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], psychup: ["7M", "6M", "5M", "4M"], @@ -3530,28 +896,29 @@ exports.BattleLearnsets = { razorwind: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "5D", "4M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5D", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L25", "6M", "6L36", "5M", "5L36", "4M", "4L34", "3M", "3L40"], + safeguard: ["7M", "7L25", "7V", "6M", "6L36", "5M", "5L36", "4M", "4L34", "3M", "3L40"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["7L19", "6L28", "5L28", "4M", "4L28", "3L47"], - skillswap: ["6T", "5T", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeppowder: ["7L13", "7V", "6L12", "5L12", "4L12", "3L15", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], stunspore: ["7L13", "7V", "6L12", "5L12", "4L12", "3L14"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], supersonic: ["7L23", "7V", "6L18", "5L18", "4L18", "3L18"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swift: ["7V", "4T", "3T"], - tailwind: ["7L41", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + tailwind: ["7T", "7L41", "6T", "6L30", "5T", "5L30", "4T", "4L30"], takedown: ["7V"], teleport: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], @@ -3562,16 +929,16 @@ exports.BattleLearnsets = { whirlwind: ["7L29", "7V", "6L22", "5L22", "4L22", "3L23"], }}, weedle: {learnset: { - bugbite: ["7L9", "6T", "6L15", "5T", "5L15", "4T", "4L15"], - electroweb: ["6T", "5T"], + bugbite: ["7T", "7L9", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + electroweb: ["7T", "6T", "5T"], poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], stringshot: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], }}, kakuna: {learnset: { - bugbite: ["6T", "5T", "4T"], - electroweb: ["6T", "5T"], + bugbite: ["7T", "6T", "5T", "4T"], + electroweb: ["7T", "6T", "5T"], harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - irondefense: ["6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], stringshot: ["4T"], }}, beedrill: {learnset: { @@ -3580,36 +947,38 @@ exports.BattleLearnsets = { agility: ["7L38", "7V", "6L31", "5L31", "4L31", "3L40"], aircutter: ["5D", "4T"], assurance: ["7L26", "6L34", "5L34", "4L34"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], bide: ["7V"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defog: ["4M"], + defog: ["7T", "4M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], - electroweb: ["6T", "5T"], - endeavor: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "3L45"], - endure: ["4M", "3T"], + drillrun: ["7T", "6T", "5T"], + electroweb: ["7T", "6T", "5T"], + endeavor: ["7T", "7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "3L45"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M", "4M"], fellstinger: ["7L44", "6L45"], flash: ["6M", "5M", "4M"], focusenergy: ["7L20", "7V", "6L13", "5L13", "4L13", "3L15"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L11", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - furycutter: ["5D", "4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L11", "7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + furycutter: ["7V", "5D", "4T", "3T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], @@ -3617,32 +986,34 @@ exports.BattleLearnsets = { payback: ["7M", "6M", "5M", "4M"], pinmissile: ["7L32", "7V", "6L28", "5L28", "4L28", "3L35"], poisonjab: ["7M", "7L35", "6M", "6L37", "5M", "5L37", "4M", "4L37"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L17", "6L22", "5L22", "4L22", "3L30"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L17", "7V", "6L22", "5L22", "4L22", "3L30"], rage: ["7L14", "7V", "6L19", "5L19", "4L19", "3L25"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], silverwind: ["4M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T", "3S0"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L29", "6L25", "5L25", "4L25"], twineedle: ["7L1", "7V", "6L16", "5L16", "4L16", "3L20", "3S0"], @@ -3655,59 +1026,61 @@ exports.BattleLearnsets = { agility: ["7L29", "7V", "6L29", "5L29", "4L29", "3L39"], aircutter: ["7E", "6E", "5E", "4T", "4E", "3E"], airslash: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bravebird: ["7E", "6E", "5E", "4E"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["7E", "6E", "5E", "4M"], + curse: ["7V"], + defog: ["7T", "7E", "6E", "5E", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], featherdance: ["7L25", "6L25", "5L25", "4L25", "3L31"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gust: ["7L9", "7V", "6L9", "5L9", "5D", "4L9", "3L9"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gust: ["7L9", "7V", "6L9", "5D", "5L9", "4L9", "3L9"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["7L53", "6L53", "5L53"], mimic: ["7V", "3T"], mirrormove: ["7L45", "7V", "6L45", "5L45", "4L45", "3L47"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], quickattack: ["7L13", "7V", "6L13", "5L13", "4L13", "3L13"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L37", "6M", "6L37", "5T", "5L37", "4M", "4L37"], round: ["7M", "6M", "5M"], sandattack: ["7L5", "7V", "6L5", "5L5", "4L5", "3L5"], secretpower: ["6M", "5D", "4M", "3M"], - skyattack: ["7V", "6T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "5D", "4M", "4E", "3M", "3E"], + skyattack: ["7T", "7V", "6T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5D", "5E", "4M", "4E", "3M", "3E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["7L21", "6L21", "5L21", "4T", "4L21"], - uproar: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7L17", "7V", "6L17", "5L17", "4L17", "3L19"], wingattack: ["7L33", "7V", "6L33", "5L33", "4L33", "3L25"], @@ -3718,29 +1091,31 @@ exports.BattleLearnsets = { agility: ["7L32", "7V", "6L32", "5L32", "4L32", "3L43"], aircutter: ["4T"], airslash: ["7L57", "6L57", "5L57", "4L57"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], featherdance: ["7L27", "6L27", "5L27", "4L27", "3L34", "3S0"], fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gust: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["7L62", "6L62", "5L62"], mimic: ["7V", "3T"], mirrormove: ["7L52", "7V", "6L52", "5L52", "4L52", "3L52"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickattack: ["7L13", "7V", "6L13", "5L13", "4L13", "3L13"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], @@ -3748,26 +1123,26 @@ exports.BattleLearnsets = { reflect: ["7V"], refresh: ["3S0"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L42", "6M", "6L42", "5T", "5L42", "4M", "4L42"], round: ["7M", "6M", "5M"], sandattack: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7V", "6T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M", "3S0"], + skyattack: ["7T", "7V", "6T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M", "3S0"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["7L47", "6T", "6L47", "5T", "5L47", "4T", "4L47"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "7L47", "6T", "6L47", "5T", "5L47", "4T", "4L47"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["7L22", "6L22", "5L22", "4T", "4L22"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7L17", "7V", "6L17", "5L17", "4L17", "3L20"], wingattack: ["7L37", "7V", "6L37", "5L37", "4L37", "3L27", "3S0"], @@ -3778,57 +1153,60 @@ exports.BattleLearnsets = { agility: ["7L32", "7V", "6L32", "5L32", "4L32", "3L48"], aircutter: ["4T"], airslash: ["7L62", "6L62", "5L62", "4L62"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], featherdance: ["7L27", "6L27", "5L27", "4L27", "3L34"], fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gust: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["7L68", "7L1", "6L1", "5L68"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + laserfocus: ["7T"], mimic: ["7V", "3T"], mirrormove: ["7L56", "7V", "6L56", "5L56", "5S0", "4L56", "3L62"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickattack: ["7L13", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L44", "6M", "6L44", "5T", "5L44", "4M", "4L44"], round: ["7M", "6M", "5M"], sandattack: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7V", "6T", "5T", "5S0", "4T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + skyattack: ["7T", "7V", "6T", "5T", "5S0", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["7L50", "6T", "6L50", "5T", "5L50", "4T", "4L50"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "7L50", "6T", "6L50", "5T", "5L50", "4T", "4L50"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["7L22", "6L22", "5L22", "4T", "4L22"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7L17", "7V", "6L17", "5L17", "5S0", "4L17", "3L20"], wingattack: ["7L38", "7V", "6L38", "5L38", "5S0", "4L38", "3L27"], @@ -3836,84 +1214,85 @@ exports.BattleLearnsets = { }}, rattata: {learnset: { assurance: ["7L19", "6L25", "5L25", "4L25"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bite: ["7L10", "7E", "6L10", "6E", "5L10", "5E", "4L10", "4E", "3E"], + bite: ["7L10", "7E", "7V", "6L10", "6E", "5L10", "5E", "4L10", "4E", "3E"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], bubblebeam: ["7V"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - covet: ["6T", "5T"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + covet: ["7T", "6T", "5T"], crunch: ["7L22", "6L22", "5L22", "4L22"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L31", "7V", "6L31", "5L31", "4L31", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endeavor: ["7L34", "6T", "6L34", "5T", "5L34", "4T", "4L34", "3L41"], - endure: ["4M", "3T"], + endeavor: ["7T", "7L34", "6T", "6L34", "5T", "5L34", "4T", "4L34", "3L41"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], finalgambit: ["7E", "6E", "5E"], - flamewheel: ["7E", "6E", "5E", "4E", "3E"], + flamewheel: ["7E", "7V", "6E", "5E", "4E", "3E"], focusenergy: ["7L7", "7V", "6L7", "5L7", "4L7", "3L20"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyswipes: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyswipes: ["7E", "7V", "6E", "5E", "4E", "3E"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperfang: ["7L16", "7V", "6L16", "5L16", "4L16", "3L13"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "5D", "4M", "3M"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - mefirst: ["7E", "6E", "5E", "5D", "4E"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5D", "5T", "4M", "3M"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + mefirst: ["7E", "6E", "5D", "5E", "4E"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L13", "6L13", "5L13", "4L13", "3L27"], - quickattack: ["7L4", "7V", "6L4", "5L4", "5D", "4L4", "3L7"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L13", "7V", "6L13", "5L13", "4L13", "3L27"], + quickattack: ["7L4", "7V", "6L4", "5D", "5L4", "4L4", "3L7"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7E", "6E", "5E"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7L25", "6L19", "5L19", "4T", "4L19"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["7L28", "7V", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L34"], - swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "7L28", "7V", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L34"], + swagger: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], swift: ["7V", "4T", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], uturn: ["7M", "6M", "5M", "4M"], watergun: ["7V"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, rattataalola: {learnset: { assurance: ["7L19"], @@ -3922,12 +1301,13 @@ exports.BattleLearnsets = { blizzard: ["7M"], confide: ["7M"], counter: ["7E"], + covet: ["7T"], crunch: ["7L22"], darkpulse: ["7M"], doubleedge: ["7L31"], doubleteam: ["7M"], embargo: ["7M"], - endeavor: ["7L34"], + endeavor: ["7T", "7L34"], facade: ["7M"], finalgambit: ["7E"], focusenergy: ["7L7"], @@ -3937,6 +1317,9 @@ exports.BattleLearnsets = { hiddenpower: ["7M"], hyperfang: ["7L16"], icebeam: ["7M"], + icywind: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], mefirst: ["7E"], protect: ["7M"], pursuit: ["7L13"], @@ -3950,15 +1333,17 @@ exports.BattleLearnsets = { round: ["7M"], shadowball: ["7M"], shadowclaw: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], sludgebomb: ["7M"], snarl: ["7M"], - snatch: ["7E"], + snatch: ["7T", "7E"], + snore: ["7T"], stockpile: ["7E"], substitute: ["7M"], suckerpunch: ["7L25"], sunnyday: ["7M"], - superfang: ["7L28"], + superfang: ["7T", "7L28"], swagger: ["7M"], swallow: ["7E"], switcheroo: ["7E"], @@ -3968,12 +1353,13 @@ exports.BattleLearnsets = { thief: ["7M"], torment: ["7M"], toxic: ["7M"], - uproar: ["7E"], + uproar: ["7T", "7E"], uturn: ["7M"], + zenheadbutt: ["7T"], }}, raticate: {learnset: { assurance: ["7L19", "6L29", "5L29", "4L29"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L10", "6L10", "5L10", "4L10"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -3984,36 +1370,37 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], crunch: ["7L24", "6L24", "5L24", "4L24"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], darkpulse: ["7M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L39", "7V", "6L39", "5L39", "4L39", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], embargo: ["7M"], - endeavor: ["7L44", "6T", "6L44", "5T", "5L44", "4T", "4L44", "3L50"], - endure: ["4M", "3T"], + endeavor: ["7T", "7L44", "6T", "6L44", "5T", "5L44", "4T", "4L44", "3L50"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], focusenergy: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperfang: ["7L16", "7V", "6L16", "5L16", "4L16", "3L13", "3S0"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L13", "6L13", "5L13", "4L13", "3L30"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L13", "7V", "6L13", "5L13", "4L13", "3L30"], quash: ["7M"], quickattack: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], rage: ["7V"], @@ -4021,46 +1408,48 @@ exports.BattleLearnsets = { refresh: ["3S0"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scaryface: ["7L1", "6L20", "5L20", "4L20", "3L20", "3S0"], + scaryface: ["7L1", "7V", "6L20", "5L20", "4L20", "3L20", "3S0"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M"], sludgewave: ["7M"], snarl: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7L29", "6L19", "5L19", "4T", "4L19"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["7L34", "7V", "6T", "6L34", "5T", "5L34", "4T", "4L34", "3L40", "3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "7L34", "7V", "6T", "6L34", "5T", "5L34", "4T", "4L34", "3L40", "3S0"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], torment: ["7M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], uturn: ["7M", "6M", "5M", "4M"], venoshock: ["7M"], watergun: ["7V"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, raticatealola: {learnset: { assurance: ["7L19"], @@ -4069,12 +1458,13 @@ exports.BattleLearnsets = { blizzard: ["7M"], bulkup: ["7M"], confide: ["7M"], + covet: ["7T"], crunch: ["7L24"], darkpulse: ["7M"], doubleedge: ["7L39"], doubleteam: ["7M"], embargo: ["7M"], - endeavor: ["7L44"], + endeavor: ["7T", "7L44"], facade: ["7M"], focusenergy: ["7L7", "7L1"], frustration: ["7M"], @@ -4084,6 +1474,10 @@ exports.BattleLearnsets = { hyperbeam: ["7M"], hyperfang: ["7L16"], icebeam: ["7M"], + icywind: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], + lastresort: ["7T"], protect: ["7M"], pursuit: ["7L13"], quash: ["7M"], @@ -4096,24 +1490,96 @@ exports.BattleLearnsets = { scaryface: ["7L1"], shadowball: ["7M"], shadowclaw: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], sludgebomb: ["7M"], sludgewave: ["7M"], snarl: ["7M"], + snatch: ["7T"], + snore: ["7T"], + stompingtantrum: ["7T"], substitute: ["7M"], suckerpunch: ["7L29"], sunnyday: ["7M"], - superfang: ["7L34"], + superfang: ["7T", "7L34"], swagger: ["7M"], swordsdance: ["7M", "7L1"], tackle: ["7L1"], tailwhip: ["7L1"], taunt: ["7M"], thief: ["7M"], + throatchop: ["7T"], torment: ["7M"], toxic: ["7M"], + uproar: ["7T"], uturn: ["7M"], venoshock: ["7M"], + zenheadbutt: ["7T"], + }}, + raticatealolatotem: {learnset: { + assurance: ["7L19", "7S0"], + attract: ["7M"], + bite: ["7L10", "7S0"], + blizzard: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + covet: ["7T"], + crunch: ["7L24"], + darkpulse: ["7M"], + doubleedge: ["7L39"], + doubleteam: ["7M"], + embargo: ["7M"], + endeavor: ["7T", "7L44"], + facade: ["7M"], + focusenergy: ["7L7", "7L1"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + hyperfang: ["7L16", "7S0"], + icebeam: ["7M"], + icywind: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], + lastresort: ["7T"], + protect: ["7M"], + pursuit: ["7L13", "7S0"], + quash: ["7M"], + quickattack: ["7L4", "7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + round: ["7M"], + scaryface: ["7L1"], + shadowball: ["7M"], + shadowclaw: ["7M"], + shockwave: ["7T"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snarl: ["7M"], + snatch: ["7T"], + snore: ["7T"], + stompingtantrum: ["7T"], + substitute: ["7M"], + suckerpunch: ["7L29"], + sunnyday: ["7M"], + superfang: ["7T", "7L34"], + swagger: ["7M"], + swordsdance: ["7M", "7L1"], + tackle: ["7L1"], + tailwhip: ["7L1"], + taunt: ["7M"], + thief: ["7M"], + throatchop: ["7T"], + torment: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + uturn: ["7M"], + venoshock: ["7M"], + zenheadbutt: ["7T"], }}, spearow: {learnset: { aerialace: ["7M", "7L15", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L25", "3S0"], @@ -4121,64 +1587,66 @@ exports.BattleLearnsets = { aircutter: ["4T"], assurance: ["7L22", "6L29", "5L29", "4L29"], astonish: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], bide: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drillpeck: ["7L36", "7V", "6L37", "5L37", "4L37", "3L37"], - drillrun: ["6T", "5T"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S0"], + falseswipe: ["7M", "7V", "6M", "5M", "4E", "3E", "3S0"], featherdance: ["7E", "6E", "5E", "4E"], - feintattack: ["7E", "6E", "5E", "5D", "4E", "3E"], + feintattack: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], fly: ["7M", "7V", "6M", "5M", "4M", "3M"], focusenergy: ["7L29"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyattack: ["7L11", "7V", "6L9", "5L9", "4L9", "3L13"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], leer: ["7L4", "7V", "6L5", "5L5", "4L5", "3L7", "3S0"], mimic: ["7V", "3T"], mirrormove: ["7L18", "7V", "6L21", "5L21", "4L21", "3L31"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - peck: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + peck: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L8", "6L13", "5L13", "4L13", "3L19"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L8", "7V", "6L13", "5L13", "4L13", "3L19"], + quickattack: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7E", "7V", "6E", "5E"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L32", "6M", "6L33", "5T", "5L33", "4M", "4L33"], round: ["7M", "6M", "5M"], - scaryface: ["7E", "6E", "5E", "4E", "3E"], + scaryface: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7E", "7V", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "5D", "4M", "3M"], + skyattack: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5D", "5E", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - triattack: ["7E", "6E", "5E", "4E", "3E"], + triattack: ["7E", "7V", "6E", "5E", "4E", "3E"], twister: ["4T"], - uproar: ["7E", "6T", "6E", "5T", "5E", "4E"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7E", "7V", "6E", "5E", "4E"], workup: ["7M", "5M"], @@ -4188,60 +1656,64 @@ exports.BattleLearnsets = { agility: ["7L27", "7V", "6L29", "5L29", "4L29", "3L47"], aircutter: ["4T"], assurance: ["7L23", "6L35", "5L35", "4L35"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drillpeck: ["7L41", "7V", "6L47", "5L47", "4L47", "3L40"], - drillrun: ["7L45", "7L1", "6T", "6L1", "5T", "5L53"], + drillrun: ["7T", "7L45", "7L1", "6T", "6L1", "5T", "5L53"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M"], fly: ["7M", "7V", "6M", "5M", "4M", "3M"], focusenergy: ["7L32"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyattack: ["7L11", "7V", "6L1", "5L1", "4L1", "3L1"], gigaimpact: ["7M", "6M", "5M", "4M"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + laserfocus: ["7T"], leer: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["7V", "3T"], mirrormove: ["7L18", "7V", "6L23", "5L23", "4L23", "3L32"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L8", "7L1", "6L13", "5L13", "4L13", "3L26"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L8", "7L1", "7V", "6L13", "5L13", "4L13", "3L26"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L36", "6M", "6L41", "5T", "5L41", "4M", "4L41"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7V", "6T", "5T", "4T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + skyattack: ["7T", "7V", "6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7V"], workup: ["7M", "5M"], @@ -4249,12 +1721,12 @@ exports.BattleLearnsets = { ekans: {learnset: { acid: ["7L20", "7V", "6L20", "5L20", "4L20", "3L32"], acidspray: ["7L28", "6L28", "5L28"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E", "5D", "4E", "3E"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], belch: ["7L38", "6L38"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], bite: ["7L9", "7V", "6L9", "5L9", "4L9", "3L13", "3S0"], bodyslam: ["7V", "3T"], brutalswing: ["7M"], @@ -4262,26 +1734,28 @@ exports.BattleLearnsets = { captivate: ["4M"], coil: ["7L44", "6L44", "5L44"], confide: ["7M", "6M"], - darkpulse: ["7M", "6M", "5T", "5D", "4M"], + crunch: ["7V"], + curse: ["7V"], + darkpulse: ["7M", "6M", "5D", "5T", "4M"], dig: ["7V", "6M", "5M", "4M", "3M"], disable: ["7E", "6E", "5E", "4E"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L36", "6T", "6L36", "5T", "5L36", "4T", "4L33"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L36", "6T", "6L36", "5T", "5L36", "4T", "4L33"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], glare: ["7L12", "7V", "6L12", "5L12", "4L12", "3L20"], - gunkshot: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L41"], - haze: ["7L41", "6L41", "5L41", "4L36", "3L44"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "7L49", "6T", "6L49", "5T", "5L49", "4T", "4L41"], + haze: ["7L41", "7V", "6L41", "5L41", "4L36", "3L44"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], megadrain: ["7V"], mimic: ["7V", "3T"], mudbomb: ["7L33", "6L33", "5L33", "4L28"], @@ -4289,53 +1763,53 @@ exports.BattleLearnsets = { payback: ["7M", "6M", "5M", "4M"], poisonfang: ["7E", "6E", "5E", "4E", "3E"], poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L4", "7V", "6L4", "5L4", "5D", "4L4", "3L8", "3S0", "3S1"], + poisonsting: ["7L4", "7V", "6L4", "5D", "5L4", "4L4", "3L8", "3S1", "3S0"], poisontail: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], scaryface: ["7E", "6E", "5E", "4E"], screech: ["7L17", "7V", "6L17", "5L17", "4L17", "3L25"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - slam: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + slam: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], - snatch: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], spitup: ["7L25", "6L25", "5L25", "4L25", "3L37"], stockpile: ["7L25", "6L25", "5L25", "4L25", "3L37"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7E", "6E", "5E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7L25", "6L25", "5L25", "4L25", "3L37"], switcheroo: ["7E", "6E", "5E", "4E"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], }}, arbok: {learnset: { acid: ["7L20", "7V", "6L20", "5L20", "4L20", "3L38"], acidspray: ["7L32", "6L32", "5L32"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7L48", "6L48"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], bite: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], bodyslam: ["7V", "3T"], brutalswing: ["7M"], @@ -4344,29 +1818,30 @@ exports.BattleLearnsets = { coil: ["7L56", "6L56", "5L56"], confide: ["7M", "6M"], crunch: ["7L1", "6L22", "5L22", "4L22"], + curse: ["7V"], darkpulse: ["7M", "6M", "5T", "4M"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragontail: ["7M", "6M", "5M"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], firefang: ["7L1", "6L1", "5L1", "4L1"], fissure: ["7V"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L44", "6T", "6L44", "5T", "5L44", "4T", "4L42"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L44", "6T", "6L44", "5T", "5L44", "4T", "4L42"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], glare: ["7L12", "7V", "6L12", "5L12", "4L12", "3L20", "3S0"], - gunkshot: ["7L63", "6T", "6L63", "5T", "5L63", "4T", "4L56"], - haze: ["7L51", "6L51", "5L51", "4L48", "3L56"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "7L63", "6T", "6L63", "5T", "5L63", "4T", "4L56"], + haze: ["7L51", "7V", "6L51", "5L51", "4L48", "3L56"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icefang: ["7L1", "6L1", "5L1", "4L1"], infestation: ["7M", "6M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], megadrain: ["7V"], mimic: ["7V", "3T"], @@ -4375,34 +1850,36 @@ exports.BattleLearnsets = { payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], refresh: ["3S0"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], screech: ["7L17", "7V", "6L17", "5L17", "4L17", "3L28"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], sludgewave: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], spitup: ["7L27", "6L27", "5L27", "4L28", "3L46"], stockpile: ["7L27", "6L27", "5L27", "4L28", "3L46"], + stompingtantrum: ["7T"], strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7L27", "6L27", "5L27", "4L28", "3L46"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunderfang: ["7L1", "6L1", "5L1", "4L1"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -4410,82 +1887,85 @@ exports.BattleLearnsets = { wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], }}, pichu: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bestow: ["7E", "6E", "5E"], - bide: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7E", "7V", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], captivate: ["4M"], charge: ["7E", "6E", "5E", "4E", "4S5", "3E"], chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2", "3S3"], + charm: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S3", "3S2", "3S1", "3S0"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], - defensecurl: ["3T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], disarmingvoice: ["7E", "6E"], doubleedge: ["3T"], - doubleslap: ["7E", "6E", "5E", "4E", "3E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleslap: ["7E", "7V", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], electricterrain: ["7E"], - electroweb: ["6T"], - encore: ["7E", "6E", "5E", "4E", "3E"], + electroweb: ["7T", "6T"], + encore: ["7E", "7V", "6E", "5E", "4E", "3E"], endeavor: ["4S5"], - endure: ["7E", "6E", "5E", "4M", "4S5", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "4S5", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["7E", "6E", "5E", "4E"], flail: ["7E", "6E", "5E", "4E"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], followme: ["3S3"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M", "4S4"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], luckychant: ["7E", "6E", "5E"], - magnetrise: ["6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L13", "6L13", "5L18", "4L18"], naturalgift: ["4M"], - present: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "4S4", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - rollout: ["4T", "3T"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "4S4", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], surf: ["3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L10", "6L10", "5L13", "4L13", "3L11"], - swift: ["4T", "3T"], - tailwhip: ["7L5", "6L5", "5L5", "4L5", "3L6"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L10", "7V", "6L10", "5L13", "4L13", "3L11"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7L5", "7V", "6L5", "5L5", "4L5", "3L6"], teeterdance: ["3S2"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "4S4", "3M"], - thunderpunch: ["7E", "6T", "6E", "5E", "4E"], - thundershock: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2", "3S3"], - thunderwave: ["7M", "7L18", "6M", "6L13", "5M", "5L10", "4M", "4L10", "3T", "3L8"], + thunderpunch: ["7T", "7E", "6T", "6E", "5E", "4E"], + thundershock: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S3", "3S2", "3S1", "3S0"], + thunderwave: ["7M", "7L18", "7V", "6M", "6L13", "5M", "5L10", "4M", "4L10", "3T", "3L8"], tickle: ["7E", "6E", "5E", "4E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], voltswitch: ["7M", "6M", "5M"], - volttackle: ["6E", "5E", "4E", "4S4", "4S5", "3E"], + volttackle: ["6E", "5E", "4E", "4S5", "4S4", "3E"], wildcharge: ["7M", "6M", "5M"], wish: ["7E", "6E", "5E", "4E", "3E", "3S1"], + zapcannon: ["7V"], }}, pichuspikyeared: {learnset: { attract: ["4M"], @@ -4533,111 +2013,108 @@ exports.BattleLearnsets = { volttackle: ["4S0"], }}, pikachu: {learnset: { - agility: ["7L45", "7V", "6L37", "6S41", "5L37", "4L34", "3L33", "3S0", "3S8"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bestow: ["7E", "7S44", "6S42"], - bide: ["7E", "7V"], + agility: ["7L45", "7V", "6L37", "6S41", "5L37", "4L34", "3L33", "3S8", "3S0"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bestow: ["7S44", "6S42"], + bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "5S26", "4M", "3M"], captivate: ["4M"], - celebrate: ["7S43", "6S31", "6S41"], - charge: ["7E"], + celebrate: ["7S43", "7S48", "6S41", "6S31"], chargebeam: ["7M", "6M", "5M", "4M"], charm: ["6S36"], confide: ["7M", "6M"], - counter: ["3T"], - covet: ["6T", "5T"], - defensecurl: ["3T"], + counter: ["7S48", "3T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], - disarmingvoice: ["7E"], - discharge: ["7L34", "6L34", "5L42", "4L37"], + discharge: ["7L34", "7S47", "6L34", "5L42", "4L37"], doubleedge: ["7V", "3T"], - doubleslap: ["7E"], doubleteam: ["7M", "7L23", "7V", "6M", "6L21", "6S32", "5M", "5L21", "4M", "4L18", "4S13", "3M", "3L15"], - dynamicpunch: ["3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - electricterrain: ["7E"], - electroball: ["7L13", "6L13", "6S32", "6S37", "5L18", "5S23", "5S24", "5S30"], - electroweb: ["6T"], - encore: ["7E", "6S39", "5S23"], + electroball: ["7L13", "6L13", "6S37", "6S32", "5L18", "5S30", "5S24", "5S23"], + electroweb: ["7T", "6T"], + encore: ["6S39", "5S23"], endeavor: ["6S39"], - endure: ["7E", "4M", "3T"], + endure: ["7V", "4M", "3T"], extremespeed: ["5S26"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6S39"], + fakeout: ["6S39"], feint: ["7L21", "6L21", "5L34", "5S29", "4L29"], - flail: ["7E"], flash: ["7V", "6M", "6S40", "5M", "4M", "4S13", "3M"], fling: ["7M", "6M", "5M", "4M"], - fly: ["6S41", "5S24", "5S27", "3S2", "3S4", "3S6"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "5S25", "5S26", "5S27", "4M", "4S13"], - growl: ["7L5", "7V", "7S43", "7S46", "6L5", "6S31", "5L1", "4L1", "3L1", "3S1", "3S2", "3S3", "3S4", "3S5", "3S10"], - happyhour: ["7S45", "7S46", "6S40"], - headbutt: ["5S28", "4T"], + fly: ["7S49", "6S41", "5S27", "5S24", "3S6", "3S4", "3S2"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "5S27", "5S26", "5S25", "4M", "4S13"], + growl: ["7L5", "7V", "7S46", "7S43", "7V", "6L5", "6S31", "5L1", "4L1", "3L1", "3S10", "3S5", "3S4", "3S3", "3S2", "3S1"], + happyhour: ["7S46", "7S45", "6S40"], + headbutt: ["7V", "5S28", "4T"], heartstamp: ["6S34"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - holdhands: ["7S44", "7S45", "6S33", "6S34", "6S35", "6S40", "6S42"], - irontail: ["6T", "6S37", "5T", "5S24", "5S30", "4M", "4S21", "3M"], - knockoff: ["6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + holdhands: ["7S45", "7S44", "6S42", "6S40", "6S35", "6S34", "6S33"], + irontail: ["7T", "7V", "6T", "6S37", "5T", "5S30", "5S24", "4M", "4S21", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], lastresort: ["4S18"], - lightscreen: ["7M", "7L53", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L42", "4S11", "3M", "3L50", "3S0", "3S6", "3S7", "3S8"], - luckychant: ["7E"], - magnetrise: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L53", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L42", "4S11", "3M", "3L50", "3S8", "3S7", "3S6", "3S0"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["7V", "6S32", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nuzzle: ["7L29", "6L23", "6S36", "6S38"], + nuzzle: ["7L29", "7S47", "6L23", "6S38", "6S36"], payday: ["7V"], - playnice: ["7L7", "7S43", "7S44", "7S45", "6L7", "6S31", "6S35", "6S36", "6S38", "6S40", "6S42"], - present: ["7E", "4S12", "4S15", "4S17", "4S18", "4S20", "4S22"], - protect: ["7M", "6M", "5M", "5S27", "4M", "4S14", "4S16", "3M"], - quickattack: ["7L10", "7V", "7S43", "7S46", "6L10", "6S31", "6S32", "6S33", "6S34", "6S37", "5L13", "5S24", "5S25", "5S29", "5S30", "4L13", "4S11", "4S12", "4S15", "4S17", "4S18", "4S20", "4S21", "4S22", "3L11"], + playnice: ["7L7", "7S45", "7S44", "7S43", "6L7", "6S42", "6S40", "6S38", "6S36", "6S35", "6S31"], + present: ["4S22", "4S20", "4S18", "4S17", "4S15", "4S12"], + protect: ["7M", "7V", "6M", "5M", "5S27", "4M", "4S16", "4S14", "3M"], + quickattack: ["7L10", "7V", "7S49", "7S46", "7S43", "7V", "6L10", "6S37", "6S34", "6S33", "6S32", "6S31", "5L13", "5S30", "5S29", "5S25", "5S24", "4L13", "4S22", "4S21", "4S20", "4S18", "4S17", "4S15", "4S12", "4S11", "3L11"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], + refresh: ["7S48"], rest: ["7M", "7V", "6M", "5M", "4M", "4S19", "3M"], - return: ["7M", "7S44", "6M", "6S42", "5M", "4M", "3M"], - reversal: ["7E"], + return: ["7M", "7S44", "7V", "6M", "6S42", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sing: ["5S23"], skullbash: ["7V"], - slam: ["7L37", "7V", "6L26", "5L26", "4L21", "3L20"], - sleeptalk: ["7M", "6M", "5T", "4M", "4S19", "3T"], - snore: ["6T", "5T", "4T", "4S19", "3T"], + slam: ["7L37", "7V", "7S47", "7V", "6L26", "5L26", "4L21", "3L20"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "4S19", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "4S19", "3T"], spark: ["7L26", "6L26"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "6S35", "5M", "4M", "3T"], - surf: ["6S33", "6S41", "4S9", "4S11", "4S14", "4S16", "3S3", "3S5", "3S7"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7S49", "7S47", "6S41", "6S33", "4S16", "4S14", "4S11", "4S9", "3S7", "3S5", "3S3"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], sweetkiss: ["6S36"], + sweetscent: ["7S48"], swift: ["7V", "4T", "3T"], - tailwhip: ["7L1", "7V", "6L1", "6S38", "5L5", "5S28", "4L5", "4S9", "4S12", "4S15", "4S17", "4S20", "4S22", "3L6", "3S1", "3S2", "3S3", "3S4", "3S10"], + tailwhip: ["7L1", "7V", "6L1", "6S38", "5L5", "5S28", "4L5", "4S22", "4S20", "4S17", "4S15", "4S12", "4S9", "3L6", "3S10", "3S4", "3S3", "3S2", "3S1"], takedown: ["7V"], teeterdance: ["7S45", "6S38", "5S23"], - thunder: ["7M", "7L58", "7V", "6M", "6L50", "6S35", "5M", "5L50", "5S25", "4M", "4L45", "4S14", "4S16", "3M", "3L41", "3S0", "3S6", "3S7", "3S8"], - thunderbolt: ["7M", "7L42", "7V", "6M", "6L29", "6S33", "6S34", "6S37", "5M", "5L29", "5S26", "5S27", "5S30", "4M", "4L26", "4S11", "4S13", "4S18", "4S21", "3M", "3L26", "3S0", "3S6", "3S7", "3S8"], - thunderpunch: ["7E", "6T", "5T", "4T", "3T"], - thundershock: ["7L1", "7V", "7S46", "6L1", "5L1", "5S28", "4L1", "4S12", "4S15", "4S20", "4S22", "3L1", "3S1", "3S5", "3S10"], - thunderwave: ["7M", "7L18", "7V", "6M", "6L13", "5M", "5L10", "5S28", "4M", "4L10", "4S9", "4S17", "3T", "3L8", "3S1", "3S2", "3S3", "3S4", "3S5", "3S10"], - tickle: ["7E"], + thunder: ["7M", "7L58", "7V", "6M", "6L50", "6S35", "5M", "5L50", "5S25", "4M", "4L45", "4S16", "4S14", "3M", "3L41", "3S8", "3S7", "3S6", "3S0"], + thunderbolt: ["7M", "7L42", "7V", "7S49", "6M", "6L29", "6S37", "6S34", "6S33", "5M", "5L29", "5S30", "5S27", "5S26", "4M", "4L26", "4S21", "4S18", "4S13", "4S11", "3M", "3L26", "3S8", "3S7", "3S6", "3S0"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + thundershock: ["7L1", "7V", "7S46", "7V", "6L1", "5L1", "5S28", "4L1", "4S22", "4S20", "4S15", "4S12", "3L1", "3S10", "3S5", "3S1"], + thunderwave: ["7M", "7L18", "7V", "6M", "6L13", "5M", "5L10", "5S28", "4M", "4L10", "4S17", "4S9", "3T", "3L8", "3S10", "3S5", "3S4", "3S3", "3S2", "3S1"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M", "5S29"], - volttackle: ["7T", "6S39", "5S25", "5S29", "4S9", "4S21"], + volttackle: ["7T", "6S39", "5S29", "5S25", "4S21", "4S9"], wildcharge: ["7M", "7L50", "6M", "6L50", "5M"], - wish: ["7E"], yawn: ["4S19"], + zapcannon: ["7V"], }}, pikachucosplay: {learnset: { agility: ["6L45"], @@ -4986,18 +2463,26 @@ exports.BattleLearnsets = { brickbreak: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], discharge: ["7L34"], doubleteam: ["7M", "7L23"], echoedvoice: ["7M"], electroball: ["7L13"], + electroweb: ["7T"], facade: ["7M"], feint: ["7L21"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], grassknot: ["7M"], growl: ["7L5"], + helpinghand: ["7T"], hiddenpower: ["7M"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], nuzzle: ["7L29"], playnice: ["7L7"], protect: ["7M"], @@ -5006,14 +2491,18 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], slam: ["7L37"], sleeptalk: ["7M"], + snore: ["7T"], spark: ["7L26"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], thunder: ["7M", "7L58", "7S0"], thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M", "7L18"], toxic: ["7M"], @@ -5027,19 +2516,26 @@ exports.BattleLearnsets = { brickbreak: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], discharge: ["7L34"], doubleteam: ["7M", "7L23"], echoedvoice: ["7M"], electroball: ["7L13"], + electroweb: ["7T"], facade: ["7M"], feint: ["7L21"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], grassknot: ["7M"], growl: ["7L5"], + helpinghand: ["7T"], hiddenpower: ["7M"], - irontail: ["7S0"], + irontail: ["7T", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], nuzzle: ["7L29"], playnice: ["7L7"], protect: ["7M"], @@ -5048,14 +2544,18 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], slam: ["7L37"], sleeptalk: ["7M"], + snore: ["7T"], spark: ["7L26"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], thunder: ["7M", "7L58", "7S0"], thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M", "7L18"], toxic: ["7M"], @@ -5069,19 +2569,26 @@ exports.BattleLearnsets = { brickbreak: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], discharge: ["7L34"], doubleteam: ["7M", "7L23"], echoedvoice: ["7M"], electroball: ["7L13"], + electroweb: ["7T"], facade: ["7M"], feint: ["7L21"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], grassknot: ["7M"], growl: ["7L5"], + helpinghand: ["7T"], hiddenpower: ["7M"], - irontail: ["7S0"], + irontail: ["7T", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], nuzzle: ["7L29"], playnice: ["7L7"], protect: ["7M"], @@ -5090,14 +2597,18 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], slam: ["7L37"], sleeptalk: ["7M"], + snore: ["7T"], spark: ["7L26"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], thunder: ["7M", "7L58"], thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M", "7L18"], toxic: ["7M"], @@ -5111,19 +2622,26 @@ exports.BattleLearnsets = { brickbreak: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], discharge: ["7L34"], doubleteam: ["7M", "7L23"], echoedvoice: ["7M"], electroball: ["7L13"], + electroweb: ["7T"], facade: ["7M"], feint: ["7L21"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], grassknot: ["7M"], growl: ["7L5"], + helpinghand: ["7T"], hiddenpower: ["7M"], - irontail: ["7S0"], + irontail: ["7T", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], nuzzle: ["7L29"], playnice: ["7L7"], protect: ["7M"], @@ -5132,14 +2650,18 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], slam: ["7L37"], sleeptalk: ["7M"], + snore: ["7T"], spark: ["7L26"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], thunder: ["7M", "7L58"], thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M", "7L18"], toxic: ["7M"], @@ -5153,19 +2675,26 @@ exports.BattleLearnsets = { brickbreak: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], discharge: ["7L34"], doubleteam: ["7M", "7L23"], echoedvoice: ["7M"], electroball: ["7L13", "7S0"], + electroweb: ["7T"], facade: ["7M"], feint: ["7L21"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], grassknot: ["7M"], growl: ["7L5"], + helpinghand: ["7T"], hiddenpower: ["7M"], - irontail: ["7S0"], + irontail: ["7T", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], nuzzle: ["7L29"], playnice: ["7L7"], protect: ["7M"], @@ -5174,14 +2703,18 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], slam: ["7L37"], sleeptalk: ["7M"], + snore: ["7T"], spark: ["7L26"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], thunder: ["7M", "7L58"], thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M", "7L18"], toxic: ["7M"], @@ -5195,19 +2728,26 @@ exports.BattleLearnsets = { brickbreak: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], discharge: ["7L34"], doubleteam: ["7M", "7L23"], echoedvoice: ["7M"], electroball: ["7L13", "7S0"], + electroweb: ["7T"], facade: ["7M"], feint: ["7L21"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], grassknot: ["7M"], growl: ["7L5"], + helpinghand: ["7T"], hiddenpower: ["7M"], - irontail: ["7S0"], + irontail: ["7T", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], nuzzle: ["7L29"], playnice: ["7L7"], protect: ["7M"], @@ -5216,14 +2756,18 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], slam: ["7L37"], sleeptalk: ["7M"], + snore: ["7T"], spark: ["7L26"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], thunder: ["7M", "7L58"], thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M", "7L18"], toxic: ["7M"], @@ -5231,8 +2775,94 @@ exports.BattleLearnsets = { volttackle: ["7T"], wildcharge: ["7M", "7L50"], }}, + pikachupartner: {learnset: { + agility: ["7L45"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + covet: ["7T"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13"], + electroweb: ["7T"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + focuspunch: ["7T"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + irontail: ["7T", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L53"], + magnetrise: ["7T"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + slam: ["7L37"], + sleeptalk: ["7M"], + snore: ["7T"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58", "7S0"], + thunderbolt: ["7M", "7L42", "7S0"], + thunderpunch: ["7T"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T"], + wildcharge: ["7M", "7L50"], + }}, + pikachustarter: {learnset: { + agility: ["7L27"], + brickbreak: ["7M"], + calmmind: ["7M"], + dig: ["7M"], + doublekick: ["7L9"], + doubleteam: ["7L12"], + facade: ["7M"], + floatyfall: ["7T"], + growl: ["7L1", "7S0"], + headbutt: ["7M"], + helpinghand: ["7M"], + irontail: ["7M"], + lightscreen: ["7M", "7L18"], + payday: ["7M"], + pikapapow: ["7T"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + slam: ["7L24"], + splishysplash: ["7T"], + substitute: ["7M"], + tailwhip: ["7L3", "7S0"], + thunder: ["7M", "7L30"], + thunderbolt: ["7M", "7L21"], + thunderpunch: ["7M"], + thundershock: ["7L1", "7S0"], + thunderwave: ["7M", "7L15"], + toxic: ["7M"], + zippyzap: ["7T"], + }}, raichu: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -5240,107 +2870,128 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], - defensecurl: ["3T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - electroweb: ["6T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], growl: ["7V"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magnetrise: ["6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payday: ["7V"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thundershock: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, raichualola: {learnset: { + allyswitch: ["7T"], attract: ["7M"], brickbreak: ["7M"], calmmind: ["7M"], chargebeam: ["7M"], confide: ["7M"], + covet: ["7T"], doubleteam: ["7M"], echoedvoice: ["7M"], + electroweb: ["7T"], facade: ["7M"], fling: ["7M"], focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], gigaimpact: ["7M"], grassknot: ["7M"], + helpinghand: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], lightscreen: ["7M"], + magiccoat: ["7T"], + magicroom: ["7T"], + magnetrise: ["7T"], protect: ["7M"], psychic: ["7M", "7L1"], psyshock: ["7M"], quickattack: ["7L1"], raindance: ["7M"], + recycle: ["7T"], reflect: ["7M"], rest: ["7M"], return: ["7M"], round: ["7M"], safeguard: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], sleeptalk: ["7M"], + snore: ["7T"], speedswap: ["7L1"], substitute: ["7M"], swagger: ["7M"], tailwhip: ["7L1"], + telekinesis: ["7T"], thief: ["7M"], thunder: ["7M"], thunderbolt: ["7M", "7L1"], + thunderpunch: ["7T"], thundershock: ["7L1"], thunderwave: ["7M"], toxic: ["7M"], @@ -5349,7 +3000,7 @@ exports.BattleLearnsets = { }}, sandshrew: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -5357,56 +3008,58 @@ exports.BattleLearnsets = { captivate: ["4M"], chipaway: ["7E", "6E", "5E"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], - covet: ["6T", "5T"], + counter: ["7E", "7V", "6E", "5D", "5E", "4E", "3T", "3E"], + covet: ["7T", "6T", "5T"], crushclaw: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["7L1", "6L1", "5L3", "4L3", "3T", "3L6", "3S0"], + defensecurl: ["7L1", "7V", "6L1", "5L3", "4L3", "3T", "3L6", "3S0"], + detect: ["7V"], dig: ["7L30", "7V", "6M", "6L30", "5M", "5L30", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], - flail: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L11", "6L11", "5L25", "4T", "4L25", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L11", "7V", "6L11", "5L25", "4T", "4L25", "3T"], furyswipes: ["7L20", "7V", "6L20", "5L19", "4L19", "3L37"], gyroball: ["7M", "7L34", "6M", "6L34", "5M", "5L33", "4M", "4L33"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + honeclaws: ["7E", "6M", "5M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], magnitude: ["7L14", "6L14", "5L17"], - metalclaw: ["7E", "6E", "5E", "4E", "3E"], + metalclaw: ["7E", "7V", "6E", "5E", "4E", "3E"], mimic: ["7V", "3T"], mudshot: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], nightslash: ["7E", "6E", "5E", "4E"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L5", "7V", "6L5", "5L9", "4L9", "3L17", "3S0"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - rapidspin: ["7L9", "7E", "6L9", "6E", "5L13", "5E", "4L13", "4E", "3E"], + rapidspin: ["7L9", "7E", "7V", "6L9", "6E", "5L13", "5E", "4L13", "4E", "3E"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["7E", "6E", "5E", "4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L7", "6L7", "5L21", "4T", "4L21", "3T"], + rollout: ["7L7", "7V", "6L7", "5L21", "4T", "4L21", "3T"], rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], - sandattack: ["7L3", "7V", "6L3", "5L7", "5D", "4L7", "3L11", "3S0"], - sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L37", "4M", "4L37", "3M", "3L53"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], + sandattack: ["7L3", "7V", "6L3", "5D", "5L7", "4L7", "3L11", "3S0"], + sandstorm: ["7M", "7L42", "7V", "6M", "6L42", "5M", "5L37", "4M", "4L37", "3M", "3L53"], sandtomb: ["7L23", "6L23", "5L27", "4L27", "3L45"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], secretpower: ["6M", "4M", "3M"], @@ -5414,25 +3067,27 @@ exports.BattleLearnsets = { shadowclaw: ["7M", "6M", "5M", "4M"], skullbash: ["7V"], slash: ["7L26", "7V", "6L26", "5L31", "4L31", "3L23"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "5D", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5D", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7L17", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L30"], swordsdance: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L38", "4M", "4E", "3T", "3E"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], xscissor: ["7M", "6M", "5M", "4M"], }}, sandshrewalola: {learnset: { aerialace: ["7M"], amnesia: ["7E"], + aquatail: ["7T"], attract: ["7M"], auroraveil: ["7M"], bide: ["7L3", "7S0"], @@ -5442,6 +3097,7 @@ exports.BattleLearnsets = { chipaway: ["7E"], confide: ["7M"], counter: ["7E"], + covet: ["7T"], crushclaw: ["7E"], curse: ["7E"], defensecurl: ["7L1"], @@ -5451,6 +3107,7 @@ exports.BattleLearnsets = { facade: ["7M"], flail: ["7E"], fling: ["7M"], + focuspunch: ["7T"], frostbreath: ["7M"], frustration: ["7M"], furycutter: ["7L11"], @@ -5458,11 +3115,16 @@ exports.BattleLearnsets = { gyroball: ["7M", "7L34"], hail: ["7M", "7L42"], hiddenpower: ["7M"], + honeclaws: ["7E"], iceball: ["7L7", "7S0"], + icepunch: ["7T"], iciclecrash: ["7E"], iciclespear: ["7E"], - irondefense: ["7L23"], - ironhead: ["7L30"], + icywind: ["7T"], + irondefense: ["7T", "7L23"], + ironhead: ["7T", "7L30"], + irontail: ["7T"], + knockoff: ["7T"], leechlife: ["7M"], metalclaw: ["7L14", "7E"], nightslash: ["7E"], @@ -5479,19 +3141,23 @@ exports.BattleLearnsets = { shadowclaw: ["7M"], slash: ["7L26"], sleeptalk: ["7M"], + snore: ["7T"], + stealthrock: ["7T"], substitute: ["7M"], sunnyday: ["7M"], + superfang: ["7T"], swagger: ["7M"], swift: ["7L17"], swordsdance: ["7M", "7L38"], thief: ["7M"], + throatchop: ["7T"], toxic: ["7M"], workup: ["7M"], xscissor: ["7M"], }}, sandslash: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -5499,53 +3165,55 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], crushclaw: ["7L1", "6L22", "5L22", "4L22"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + detect: ["7V"], dig: ["7L33", "7V", "6M", "6L30", "5M", "5L30", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "7L53", "7V", "6M", "6L46", "5M", "5L46", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L11", "6L11", "5L28", "4T", "4L28", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L11", "7V", "6L11", "5L28", "4T", "4L28", "3T"], furyswipes: ["7L20", "7V", "6L20", "5L19", "4L19", "3L42"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "7L38", "6M", "6L34", "5M", "5L45", "4M", "4L45"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], magnitude: ["7L14", "6L14", "5L17"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L5", "7L1", "7V", "6L1", "5L9", "4L9", "3L17"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], rapidspin: ["7L9", "6L9", "5L13", "4L13"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L7", "6L7", "5L21", "4T", "4L21", "3T"], + rollout: ["7L7", "7V", "6L7", "5L21", "4T", "4L21", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], sandattack: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["7M", "7L48", "6M", "6L42", "5M", "5L52", "4M", "4L52", "3M", "3L62"], + sandstorm: ["7M", "7L48", "7V", "6M", "6L42", "5M", "5L52", "4M", "4L52", "3M", "3L62"], sandtomb: ["7L24", "6L23", "5L33", "4L33", "3L52"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], @@ -5553,37 +3221,42 @@ exports.BattleLearnsets = { shadowclaw: ["7M", "6M", "5M", "4M"], skullbash: ["7V"], slash: ["7L28", "7V", "6L26", "5L40", "4L40", "3L24"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7L17", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L33"], swordsdance: ["7M", "7L43", "7V", "6M", "6L38", "5M", "5L38", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], xscissor: ["7M", "6M", "5M", "4M"], }}, sandslashalola: {learnset: { aerialace: ["7M"], + aquatail: ["7T"], attract: ["7M"], auroraveil: ["7M"], blizzard: ["7M"], brickbreak: ["7M"], bulldoze: ["7M"], confide: ["7M"], + covet: ["7T"], defensecurl: ["7L1"], doubleteam: ["7M"], + drillrun: ["7T"], earthquake: ["7M"], facade: ["7M"], fling: ["7M"], focusblast: ["7M"], + focuspunch: ["7T"], frostbreath: ["7M"], frustration: ["7M"], gigaimpact: ["7M"], @@ -5592,8 +3265,14 @@ exports.BattleLearnsets = { hiddenpower: ["7M"], hyperbeam: ["7M"], iceball: ["7L1"], + icepunch: ["7T"], iciclecrash: ["7L1"], iciclespear: ["7L1"], + icywind: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], leechlife: ["7M"], metalburst: ["7L1"], metalclaw: ["7L1"], @@ -5607,96 +3286,102 @@ exports.BattleLearnsets = { shadowclaw: ["7M"], slash: ["7L1"], sleeptalk: ["7M"], + snore: ["7T"], + stealthrock: ["7T"], substitute: ["7M"], sunnyday: ["7M"], + superfang: ["7T"], swagger: ["7M"], swordsdance: ["7M"], thief: ["7M"], + throatchop: ["7T"], toxic: ["7M"], workup: ["7M"], xscissor: ["7M"], }}, nidoranf: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], bite: ["7L21", "7V", "6L21", "5L21", "4L21", "3L20"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], captivate: ["7L43", "6L43", "5L43", "4M", "4L43"], - charm: ["7E", "6E", "5E", "4E", "3E"], + charm: ["7E", "7V", "6E", "5E", "4E", "3E"], chipaway: ["7E", "6E", "5E"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], crunch: ["7L37", "6L37", "5L37", "4L37", "3L47"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7E", "6E", "5E", "4E", "3E"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], doubleedge: ["7V", "3T"], doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flatter: ["7L33", "6L33", "5L33", "4L33", "3L38"], - focusenergy: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L19", "7V", "6L19", "5L19", "4L19", "3L30"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - helpinghand: ["7L25", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L23"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L25", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L23"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poisonfang: ["7L45", "6L45", "5L45", "4L45"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], poisontail: ["7E", "6E", "5E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], pursuit: ["7E", "6E", "5E", "4E"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + scratch: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7E", "7V", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["5D"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "5D", "4T"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5D", "5T", "4T"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], tailwhip: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], takedown: ["7E", "7V", "6E", "5E", "4E", "3E"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L31", "6L31", "5L31", "4L31"], venomdrench: ["7E", "6E"], venoshock: ["7M", "6M", "5M"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, nidorina: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L23", "7V", "6L23", "5L23", "4L23", "3L22"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -5706,69 +3391,72 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], counter: ["3T"], crunch: ["7L43", "6L43", "5L43", "4L43", "3L53"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flatter: ["7L38", "6L38", "5L38", "4L38", "3L43"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L20", "7V", "6L20", "5L20", "4L20", "3L34"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - helpinghand: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L26"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L26"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], horndrill: ["7V"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poisonfang: ["7L58", "6L58", "5L58", "4L58"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L18"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], tailwhip: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L35", "6L35", "5L35", "4L35"], venoshock: ["7M", "6M", "5M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, nidoqueen: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -5780,184 +3468,190 @@ exports.BattleLearnsets = { chipaway: ["7L23", "6L23", "5L23"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doublekick: ["7L1", "7V", "6L1", "6S0", "5L1", "4L1", "3L1"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - drillrun: ["6T"], - dynamicpunch: ["3T"], - earthpower: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + drillrun: ["7T", "6T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], horndrill: ["7V"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payday: ["7V"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L1", "7V", "6L1", "6S0", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quash: ["7M", "6M", "5M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - superpower: ["7L58", "7L1", "6T", "6L1", "5T", "5L58", "4T", "4L58", "3L43"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + superpower: ["7T", "7L58", "7L1", "6T", "6L1", "5T", "5L58", "4T", "4L58", "3L43"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], tailwhip: ["7L1", "7V", "6L1", "6S0", "5L1", "4L1", "3L1"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], }}, nidoranm: {learnset: { - amnesia: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E", "4E", "3E"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], captivate: ["7L43", "6L43", "5L43", "4M", "4L43"], chipaway: ["7E", "6E", "5E"], confide: ["7M", "6M"], - confusion: ["7E", "6E", "5E", "4E", "3E"], - counter: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + confusion: ["7E", "7V", "6E", "5E", "4E", "3E"], + counter: ["7E", "7V", "6E", "5D", "5E", "4E", "3T", "3E"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7E", "6E", "5E", "4E", "3E"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], doubleedge: ["7V", "3T"], doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flatter: ["7L33", "6L33", "5L33", "4L33", "3L38"], focusenergy: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyattack: ["7L19", "7V", "6L19", "5L19", "4L19", "3L30"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], headsmash: ["7E", "6E", "5E", "4E"], - helpinghand: ["7L25", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L23"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + helpinghand: ["7T", "7L25", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L23"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hornattack: ["7L21", "7V", "6L21", "5L21", "4L21", "3L20"], horndrill: ["7L45", "7V", "6L45", "5L45", "4L45", "3L47"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + peck: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], poisonjab: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], poisontail: ["7E", "6E", "5E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7E", "6E", "5E", "4T", "4E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "5D", "4T"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5D", "5T", "4T"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], takedown: ["7E", "7V", "6E", "5E", "4E", "3E"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L31", "6L31", "5L31", "4L31"], venomdrench: ["7E", "6E"], venoshock: ["7M", "6M", "5M"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, nidorino: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], @@ -5965,71 +3659,74 @@ exports.BattleLearnsets = { captivate: ["7L50", "6L50", "5L50", "4M", "4L50"], confide: ["7M", "6M"], counter: ["3T"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flatter: ["7L38", "6L38", "5L38", "4L38", "3L43"], focusenergy: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyattack: ["7L20", "7V", "6L20", "5L20", "4L20", "3L34"], - headbutt: ["4T"], - helpinghand: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L26"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L26"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hornattack: ["7L23", "7V", "6L23", "5L23", "4L23", "3L22"], horndrill: ["7L58", "7V", "6L58", "5L58", "4L58", "3L53"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L18"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L35", "6L35", "5L35", "4L35"], venoshock: ["7M", "6M", "5M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, nidoking: {learnset: { - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7S0", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], @@ -6041,214 +3738,218 @@ exports.BattleLearnsets = { chipaway: ["7L23", "6L23", "5L23"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doublekick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - drillrun: ["6T", "5T"], - dynamicpunch: ["3T"], - earthpower: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + earthquake: ["7M", "7V", "7S0", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hornattack: ["7V"], horndrill: ["7V"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], megahorn: ["7L58", "7L1", "6L1", "5L58", "4L58", "3L43"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payday: ["7V"], peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], poisonjab: ["7M", "6M", "5M", "4M"], poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quash: ["7M", "6M", "5M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], smackdown: ["7M", "6M", "5M"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - superpower: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7L35", "7V", "6L35", "5L35", "4L23", "3L22"], + throatchop: ["7T", "7S0"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], }}, cleffa: {learnset: { - afteryou: ["6T", "5T"], - amnesia: ["7E", "6E", "5E", "4E", "3E"], - aromatherapy: ["7E", "6E", "5E", "5D", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7E", "6E", "5E", "4E", "3E"], + afteryou: ["7T", "6T", "5T"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], + aromatherapy: ["7E", "6E", "5D", "5E", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bellydrum: ["7E", "7V", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], captivate: ["4M"], - charm: ["7L1", "6L1", "5L1", "4L1", "3L1"], + charm: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], confide: ["7M", "6M"], copycat: ["7L13", "6L13", "5L13", "4L13"], counter: ["3T"], - covet: ["7E", "6T", "6E", "5T", "5E", "4E"], - defensecurl: ["3T"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L4", "6L4", "5L4", "5D", "4L4", "3L4"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + encore: ["7L4", "7V", "6L4", "5D", "5L4", "4L4", "3L4"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], faketears: ["7E", "6E", "5E", "4E"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], healpulse: ["7E", "6E"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T", "3T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], magicalleaf: ["7L16", "6L16", "5L16", "4L16", "3L17"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["7E", "6E", "5E", "4E", "3T", "3E"], - mimic: ["7E", "6E", "5E", "4E", "3T", "3E"], + metronome: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + mimic: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], mistyterrain: ["7E", "6E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], - present: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + nightmare: ["7V", "3T"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sing: ["7L7", "6L7", "5L7", "4L7", "3L8"], - sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sing: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], + sleeptalk: ["7M", "7V", "6M", "5D", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], softboiled: ["3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - splash: ["7E", "6E", "5E", "4E", "3E"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + splash: ["7E", "7V", "6E", "5E", "4E", "3E"], storedpower: ["7E", "6E", "5E"], substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L10", "6L10", "5L10", "4L10", "3L13"], - telekinesis: ["5M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L10", "7V", "6L10", "5L10", "4L10", "3L13"], + telekinesis: ["7T", "5M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], tickle: ["7E", "6E", "5E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], wish: ["7E", "6E", "5E", "4E", "3E"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, clefairy: {learnset: { - afteryou: ["7L58", "6T", "6L1", "5T", "5L52"], - amnesia: ["7E"], - aromatherapy: ["7E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7E"], + afteryou: ["7T", "7L58", "6T", "6L1", "5T", "5L52"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bestow: ["7L19", "6L19", "5L25"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7L40", "7V", "6L40", "5L40", "3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], calmmind: ["7M", "6M", "5M", "4M", "3M"], @@ -6257,130 +3958,126 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], cosmicpower: ["7L34", "6L34", "5L28", "4L25", "3L33"], counter: ["7V", "3T"], - covet: ["7E", "6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], defensecurl: ["7L13", "7V", "6L13", "5L13", "4L13", "3T", "3L25"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], disarmingvoice: ["7L1", "6L1"], doubleedge: ["7V", "3T"], doubleslap: ["7L10", "7V", "6L10", "5L10", "4L10", "3L13"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L1", "6L1", "5L4", "4L4", "3L5"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + encore: ["7L1", "7V", "6L1", "5L4", "4L4", "3L5"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["7L16", "6L16", "5L16", "4L16", "3L17"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7L49", "6T", "6L49", "5T", "5L37", "4T", "4L34"], + gravity: ["7T", "7L49", "6T", "6L49", "5T", "5L37", "4T", "4L34"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], healingwish: ["7L55", "6L1", "5L49", "4L46"], - healpulse: ["7E"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "7V", "6M", "5M", "5L46", "4M", "4L40", "3M", "3L41"], luckychant: ["7L37", "6L37", "5L31", "4L28"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], meteormash: ["7L50", "6L50", "5L55", "4L43", "3L45"], - metronome: ["7L31", "7E", "7V", "6L31", "5L34", "4L31", "3T", "3L29"], - mimic: ["7E", "7V", "3T"], + metronome: ["7L31", "7V", "6L31", "5L34", "4L31", "3T", "3L29"], + mimic: ["7V", "3T"], minimize: ["7L25", "7V", "6L25", "5L19", "4L19", "3L21"], - mistyterrain: ["7E"], moonblast: ["7L46", "6L46"], - moonlight: ["7L43", "6L43", "5L40", "4L37", "3L37"], - mudslap: ["4T", "3T"], + moonlight: ["7L43", "7V", "6L43", "5L40", "4L37", "3L37"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - present: ["7E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T", "3T"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sing: ["7L7", "7V", "6L7", "5L7", "4L7", "3L9"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], softboiled: ["3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - splash: ["7E"], spotlight: ["7L1"], - stealthrock: ["6T", "5T", "4M"], - storedpower: ["7L28", "7E", "6L28", "5L43"], + stealthrock: ["7T", "6T", "5T", "4M"], + storedpower: ["7L28", "6L28", "5L43"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - tickle: ["7E"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], wakeupslap: ["7L22", "6L22", "5L22", "4L22"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - wish: ["7E"], - wonderroom: ["6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + wonderroom: ["7T", "6T", "5T"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, clefable: {learnset: { - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], calmmind: ["7M", "6M", "5M", "4M", "3M"], @@ -6388,110 +4085,115 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], disarmingvoice: ["7L1", "6L1"], doubleedge: ["7V", "3T"], doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], mimic: ["7V", "3T"], minimize: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - mudslap: ["4T", "3T"], + moonlight: ["7V"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T", "3T"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], softboiled: ["3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], spotlight: ["7L1"], - stealthrock: ["6T", "5T", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - wonderroom: ["6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + wonderroom: ["7T", "6T", "5T"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, vulpix: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], babydolleyes: ["7L9", "6L9"], bide: ["7V"], bodyslam: ["7V", "3T"], @@ -6499,74 +4201,76 @@ exports.BattleLearnsets = { charm: ["3S1"], confide: ["7M", "6M"], confuseray: ["7L12", "7V", "6L12", "5L17", "4L17", "3L21"], - covet: ["6T", "5T"], - darkpulse: ["7M", "6M", "5T", "5D", "4M"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + darkpulse: ["7M", "6M", "5D", "5T", "4M"], dig: ["7V", "6M", "5M", "4M", "3M", "3S1"], - disable: ["7E", "6E", "5E", "4E", "3E"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], ember: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4E"], extrasensory: ["7L31", "7E", "6L31", "6E", "5L51", "5E", "4L44", "4E"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L23", "7E", "6L20", "6E", "5L20", "5E", "4E", "3E"], + feintattack: ["7L23", "7E", "7V", "6L20", "6E", "5L20", "5E", "4E", "3E"], fireblast: ["7M", "7L42", "7V", "6M", "6L42", "5M", "5L54", "4M", "4L47", "3M"], firespin: ["7L15", "7V", "6L12", "5L14", "4L34", "3L41"], - flail: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], flameburst: ["7L28", "6L23", "5L24"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "7L36", "7V", "6M", "6L34", "5M", "5L37", "4M", "4L24", "3M", "3L29"], flareblitz: ["7E", "6E", "5E", "4E"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grudge: ["7L44", "6L44", "5L47", "4L41", "3L37"], - headbutt: ["4T"], - heatwave: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E", "3S1"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E", "3S1"], hex: ["7L26", "7E", "6L26", "6E", "5L28", "5E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], howl: ["7E", "6E", "5E", "4E", "3E"], - hypnosis: ["7E", "6E", "5E", "4E", "3E"], + hypnosis: ["7E", "7V", "6E", "5E", "4E", "3E"], imprison: ["7L39", "6L18", "5L21", "4L21", "3L25"], incinerate: ["6M", "5M"], inferno: ["7L50", "6L50", "5L44"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], mimic: ["7V", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], overheat: ["7M", "6M", "5M", "4M", "3M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L18", "6M", "6L18", "5M", "5L34", "4M", "4L31"], powerswap: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "4E", "3E"], quickattack: ["7L10", "7V", "6L10", "5L11", "4L11", "3L13", "3S0"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L7", "7V", "6M", "6L7", "5M", "5L7", "5D", "4M", "4L7", "3M", "3L9", "3S0"], - roleplay: ["6T", "5T", "4T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L7", "7V", "6M", "6L7", "5D", "5M", "5L7", "4M", "4L7", "3M", "3L9", "3S0"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L34", "6M", "6L34", "5M", "5L27", "4M", "4L27", "3M", "3L33"], + safeguard: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L27", "4M", "4L27", "3M", "3L33"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], tailslap: ["7E", "6E", "5E"], tailwhip: ["7L4", "7V", "6L4", "5L4", "4L4", "3L5", "3S0"], takedown: ["7V"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "7L20", "6M", "6L20", "5M", "5L31", "4M", "4L14", "3L17", "3S0"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, vulpixalola: {learnset: { agility: ["7E"], + aquatail: ["7T"], attract: ["7M"], aurorabeam: ["7L28"], auroraveil: ["7M"], @@ -6577,6 +4281,7 @@ exports.BattleLearnsets = { charm: ["7E"], confide: ["7M"], confuseray: ["7L12"], + covet: ["7T"], darkpulse: ["7M"], disable: ["7E"], doubleteam: ["7M"], @@ -6585,21 +4290,25 @@ exports.BattleLearnsets = { facade: ["7M"], feintattack: ["7L23"], flail: ["7E"], + foulplay: ["7T"], freezedry: ["7E"], frostbreath: ["7M"], frustration: ["7M"], grudge: ["7L44"], hail: ["7M"], + healbell: ["7T"], hex: ["7L26"], hiddenpower: ["7M"], howl: ["7E"], hypnosis: ["7E"], icebeam: ["7M", "7L36"], iceshard: ["7L10", "7S0"], - icywind: ["7L15"], + icywind: ["7T", "7L15"], imprison: ["7L39"], + irontail: ["7T"], mist: ["7L20"], moonblast: ["7E"], + painsplit: ["7T"], payback: ["7M", "7L18"], powdersnow: ["7L1", "7S1"], powerswap: ["7E"], @@ -6609,107 +4318,120 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], roar: ["7M", "7L7"], + roleplay: ["7T"], round: ["7M"], safeguard: ["7M", "7L34"], secretpower: ["7E"], sheercold: ["7L50"], sleeptalk: ["7M"], - spite: ["7E"], + snore: ["7T"], + spite: ["7T", "7E"], substitute: ["7M"], swagger: ["7M"], tailslap: ["7E"], tailwhip: ["7L4", "7S0"], toxic: ["7M"], + zenheadbutt: ["7T"], }}, ninetales: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], calmmind: ["7M", "6M", "5M", "4M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L1", "5L1", "4L1", "3L1"], - covet: ["6T", "5T"], + confuseray: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], darkpulse: ["7M", "6M", "5T", "4M"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dreameater: ["7M", "6M", "5M", "4M"], ember: ["7V", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firespin: ["3L45"], + firespin: ["7V", "3L45"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "7L1", "6M", "6L1", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "5S0", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "5S0", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], imprison: ["7L1", "6L1"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], mimic: ["7V", "3T"], nastyplot: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], ominouswind: ["4T"], overheat: ["7M", "6M", "5M", "4M", "3M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], psyshock: ["7M", "6M", "5M", "5S0"], quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["7M", "7V", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + safeguard: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "5S0", "4M"], - spite: ["6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], tailwhip: ["7V"], takedown: ["7V"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "6M", "5M", "5S0", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, ninetalesalola: {learnset: { + aquatail: ["7T"], attract: ["7M"], auroraveil: ["7M"], blizzard: ["7M"], calmmind: ["7M"], confide: ["7M"], confuseray: ["7L1"], + covet: ["7T"], darkpulse: ["7M"], dazzlinggleam: ["7M", "7L1"], doubleteam: ["7M"], dreameater: ["7M"], facade: ["7M"], + foulplay: ["7T"], frostbreath: ["7M"], frustration: ["7M"], gigaimpact: ["7M"], hail: ["7M"], + healbell: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], icebeam: ["7M", "7L1"], iceshard: ["7L1"], + icywind: ["7T"], imprison: ["7L1"], + irontail: ["7T"], + laserfocus: ["7T"], nastyplot: ["7L1"], + painsplit: ["7T"], payback: ["7M"], protect: ["7M"], psychup: ["7M"], @@ -6718,320 +4440,331 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], roar: ["7M"], + roleplay: ["7T"], round: ["7M"], safeguard: ["7M", "7L1"], sleeptalk: ["7M"], + snore: ["7T"], + spite: ["7T"], substitute: ["7M"], swagger: ["7M"], toxic: ["7M"], + wonderroom: ["7T"], + zenheadbutt: ["7T"], }}, igglybuff: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], captivate: ["7E", "6E", "5E", "4M"], - charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + charm: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], confide: ["7M", "6M"], copycat: ["7L11", "6L11", "5L17", "4L17"], counter: ["3T"], - covet: ["7E", "6T", "6E", "5T", "5E", "4E"], - defensecurl: ["7L3", "6L3", "5L5", "4L5", "3T", "3L4", "3S0"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + curse: ["7V"], + defensecurl: ["7L3", "7V", "6L3", "5L5", "4L5", "3T", "3L4", "3S0"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6E", "5E", "5D", "4E", "3E"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5D", "5E", "4E", "3E"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + gravity: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], healpulse: ["7E", "6E"], - helpinghand: ["6T", "5T", "5D", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T", "3T"], + helpinghand: ["7T", "6T", "5D", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], mistyterrain: ["7E", "6E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - perishsong: ["7E", "6E", "5E", "4E", "3E"], - pound: ["7L5", "6L5", "5L9", "4L9", "3L9"], - present: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], + perishsong: ["7E", "7V", "6E", "5E", "4E", "3E"], + pound: ["7L5", "7V", "6L5", "5L9", "4L9", "3L9"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], punishment: ["7E", "6E", "5E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sing: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sing: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L9", "6L9", "5L13", "4L13", "3L14"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L9", "7V", "6L9", "5L13", "4L13", "3L14"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], tickle: ["3S0"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], wish: ["7E", "6E", "5E", "4E", "3E"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, jigglypuff: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7L32", "7V", "6L33", "5L33", "4L29", "3T", "3L34"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], - captivate: ["7E", "4M"], + captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["7E", "6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], defensecurl: ["7L3", "7V", "6L3", "5L5", "4L5", "3T", "3L4"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], disable: ["7L14", "7V", "6L13", "5L13", "4L13", "3L14"], disarmingvoice: ["7L11", "6L11"], doubleedge: ["7L45", "7V", "6L49", "5L53", "4L49", "3T", "3L49"], doubleslap: ["7L17", "7V", "6L18", "5L25", "4L21", "3L24"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E"], - feintattack: ["7E"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7E", "6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "7L35", "6M", "6L37", "5M", "5L37", "4M", "4L33"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - healpulse: ["7E"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["7L41", "6T", "6L44", "5T", "5L49", "4L45", "3L44"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "7L41", "6T", "6L44", "5T", "5L49", "4L45", "3L44"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7E", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7L38", "7V", "6L37", "5L45", "4L41", "3T", "3L39"], - mistyterrain: ["7E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - perishsong: ["7E"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], playnice: ["7L9", "6L8"], pound: ["7L5", "7V", "6L5", "5L9", "4L9", "3L9"], poweruppunch: ["6M"], - present: ["7E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psywave: ["7V"], - punishment: ["7E"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], rest: ["7M", "7L30", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L25", "3M", "3L29"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["7L20", "6L21", "5L21", "4T", "4L17", "3T", "3L19"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["7L20", "7V", "6L21", "5L21", "4T", "4L17", "3T", "3L19"], round: ["7M", "7L22", "6M", "6L17", "5M", "5L17"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], skullbash: ["7V"], - sleeptalk: ["7M", "7E", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], spitup: ["7L25"], - stealthrock: ["6T", "5T", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], stockpile: ["7L25"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7L25"], takedown: ["7V"], + telekinesis: ["7T"], teleport: ["7V"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], wakeupslap: ["7L27", "6L28", "5L41", "4L37"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], - wish: ["7E"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, wigglytuff: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], disable: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], doubleedge: ["7L1", "7V", "6L1", "3T"], doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], playrough: ["7L1", "6L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T", "3T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], + telekinesis: ["7T"], teleport: ["7V"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, zubat: {learnset: { absorb: ["7L1"], @@ -7040,30 +4773,31 @@ exports.BattleLearnsets = { aircutter: ["7L19", "6L19", "5L25", "4T", "4L25", "3L31"], airslash: ["7L41", "6L41", "5L45", "4L41"], astonish: ["7L7", "6L7", "5L9", "4L9", "3L6"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L11", "7V", "6L11", "5L13", "4L13", "3L16"], bravebird: ["7E", "6E", "5E", "4E"], captivate: ["4M"], confide: ["7M", "6M"], confuseray: ["7L17", "7V", "6L17", "5L21", "4L21", "3L26"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defog: ["7E", "6E", "5E", "4M"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + defog: ["7T", "7E", "6E", "5E", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], fly: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - gust: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], + gust: ["7E", "7V", "6E", "5E", "4E", "3E"], haze: ["7L35", "7V", "6L35", "5L41", "4L37", "3L46"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7E", "6E", "5E", "5D", "4E"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7E", "6E", "5D", "5E", "4E"], leechlife: ["7M", "7L31", "7V", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L29", "6L29", "5L29", "4L29", "3L36"], + meanlook: ["7L29", "7V", "6L29", "5L29", "4L29", "3L36"], megadrain: ["7V"], mimic: ["7V", "3T"], nastyplot: ["7E", "6E", "5E", "4E"], @@ -7072,44 +4806,44 @@ exports.BattleLearnsets = { payback: ["7M", "6M", "5M", "4M"], pluck: ["5M", "4M"], poisonfang: ["7L25", "6L25", "5L37", "4L33", "3L41"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], + quickattack: ["7E", "7V", "6E", "5E", "4E", "3E"], quickguard: ["7L43", "6L43"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5E", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "5D", "4T"], - supersonic: ["7L5", "7V", "6L4", "5L5", "5D", "4L5", "3L6"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5D", "5T", "4T"], + supersonic: ["7L5", "7V", "6L4", "5D", "5L5", "4L5", "3L6"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7L23", "7V", "6L23", "5L24", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], venomdrench: ["7E", "6E"], venoshock: ["7M", "7L37", "6M", "6L37", "5M"], whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], wingattack: ["7L13", "7V", "6L13", "5L17", "4L17", "3L21"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, golbat: {learnset: { absorb: ["7L1"], @@ -7118,27 +4852,29 @@ exports.BattleLearnsets = { aircutter: ["7L19", "6L19", "5L27", "4T", "4L27", "3L35"], airslash: ["7L48", "6L48", "5L57", "4L51"], astonish: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L11", "7L1", "7V", "6L1", "5L13", "4L13", "3L16"], captivate: ["4M"], confide: ["7M", "6M"], confuseray: ["7L17", "7V", "6L17", "5L21", "4L21", "3L28"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fly: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], haze: ["7L40", "7V", "6L40", "5L51", "4L45", "3L56"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], leechlife: ["7M", "7L35", "7V", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L32", "6L32", "5L33", "4L33", "3L42"], + meanlook: ["7L32", "7V", "6L32", "5L33", "4L33", "3L42"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], @@ -7146,139 +4882,142 @@ exports.BattleLearnsets = { payback: ["7M", "6M", "5M", "4M"], pluck: ["5M", "4M"], poisonfang: ["7L27", "6L27", "5L45", "4L39", "3L49"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickguard: ["7L51", "6L51"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], screech: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7L24", "7V", "6L24", "5L24", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], venoshock: ["7M", "7L43", "6M", "6L43", "5M"], whirlwind: ["7V"], wingattack: ["7L13", "7V", "6L13", "5L17", "4L17", "3L21"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, crobat: {learnset: { absorb: ["7L1"], acrobatics: ["7M", "6M", "6L33", "5M", "5L39"], aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["7L19", "6L19", "5L27", "4T", "4L27", "3L35"], - airslash: ["7L48", "6L48", "5L57", "4L51", "4S0"], + airslash: ["7L48", "7S1", "6L48", "5L57", "4L51", "4S0"], astonish: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L11", "7L1", "6L1", "5L13", "4L13", "3L16"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L11", "7L1", "7V", "6L1", "5L13", "4L13", "3L16"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L17", "6L17", "5L21", "4L21", "3L28"], + confuseray: ["7L17", "7V", "6L17", "5L21", "4L21", "3L28"], crosspoison: ["7L1", "6L1", "5L1", "4L1"], - darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], + curse: ["7V"], + darkpulse: ["7M", "7S1", "6M", "5T", "4M"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - haze: ["7L40", "6L40", "5L51", "4L45", "3L56"], - heatwave: ["6T", "5T", "4T", "4S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - leechlife: ["7M", "7L35", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L32", "6L32", "5L33", "4L33", "3L42"], + haze: ["7L40", "7V", "6L40", "5L51", "4L45", "3L56"], + heatwave: ["7T", "6T", "5T", "4T", "4S0"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + leechlife: ["7M", "7L35", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L32", "7V", "6L32", "5L33", "4L33", "3L42"], mimic: ["3T"], naturalgift: ["4M"], ominouswind: ["4T"], payback: ["7M", "6M", "5M", "4M"], pluck: ["5M", "4M"], poisonfang: ["7L27", "6L27", "5L45", "4L39", "3L49"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickguard: ["7L51", "6L51"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - screech: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - skyattack: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "4S0", "3M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + skyattack: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7S1", "6M", "5M", "4M", "4S0", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T", "4S0"], - supersonic: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L24", "6L24", "5L24", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T", "4S0"], + supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L24", "7V", "6L24", "5L24", "4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7S1", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], venoshock: ["7M", "7L43", "6M", "6L43", "5M"], - wingattack: ["7L13", "6L13", "5L17", "4L17", "3L21"], + wingattack: ["7L13", "7V", "6L13", "5L17", "4L17", "3L21"], xscissor: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, oddish: {learnset: { absorb: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], acid: ["7L9", "7V", "6L9", "5L9", "4L9", "3L23", "3S0"], - afteryou: ["7E", "6T", "6E", "5T", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "7E", "6T", "6E", "5T", "5E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bulletseed: ["4M", "3M"], captivate: ["4M"], charm: ["7E", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "6M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E", "3E"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["6T", "5T", "4T"], - gigadrain: ["7L31", "6T", "6L31", "5T", "5L37", "5D", "4M", "4L37", "3M"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "6T", "5T", "4T"], + gigadrain: ["7T", "7L31", "7V", "6T", "6L31", "5D", "5T", "5L37", "4M", "4L37", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grassyterrain: ["7L47", "6L45"], growth: ["7L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], ingrain: ["7E", "6E", "5E", "4E", "3E"], leechseed: ["3S1"], @@ -7286,127 +5025,130 @@ exports.BattleLearnsets = { megadrain: ["7L19", "7V", "6L19", "5L21", "4L21"], mimic: ["7V", "3T"], moonblast: ["7L43", "6L43"], - moonlight: ["7L27", "6L27", "5L33", "4L33", "3L32"], + moonlight: ["7L27", "7V", "6L27", "5L33", "4L33", "3L32"], naturalgift: ["7L39", "6L29", "5L29", "4M", "4L29"], naturepower: ["7M", "7E", "6M", "6E", "5E"], petaldance: ["7L51", "7V", "6L41", "5L41", "4L41", "3L39"], poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L14", "3S0"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - razorleaf: ["7E", "6E", "5E", "4E", "3E"], + razorleaf: ["7E", "7V", "6E", "5E", "4E", "3E"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeppowder: ["7L15", "7V", "6L15", "5L17", "4L17", "3L18", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + strengthsap: ["7E"], stunspore: ["7L14", "7V", "6L14", "5L15", "4L15", "3L16", "3S0"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L5", "6L5", "5L5", "5D", "4L5", "3L7"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L5", "7V", "6L5", "5D", "5L5", "4L5", "3L7"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + synthesis: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], takedown: ["7V"], - teeterdance: ["7E", "6E", "5E", "5D", "4E"], + teeterdance: ["7E", "6E", "5D", "5E", "4E"], tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "7L35", "7V", "6M", "6L35", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], }}, gloom: {learnset: { absorb: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], acid: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L24", "3S0"], - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "6M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - endure: ["4M", "3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["6T", "5T", "4T"], - gigadrain: ["7L34", "6T", "6L34", "5T", "5L47", "4M", "4L47", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "6T", "5T", "4T"], + gigadrain: ["7T", "7L34", "7V", "6T", "6L34", "5T", "5L47", "4M", "4L47", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grassyterrain: ["7L54", "6L54"], growth: ["7L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], luckychant: ["7L24", "6L24", "5L29", "4L29"], megadrain: ["7L19", "7V", "6L19", "5L23", "4L23"], mimic: ["7V", "3T"], - moonlight: ["7L29", "6L29", "5L41", "4L41", "3L35", "3S0"], + moonlight: ["7L29", "7V", "6L29", "5L41", "4L41", "3L35", "3S0"], naturalgift: ["7L44", "6L35", "5L35", "4M", "4L35"], naturepower: ["7M", "6M"], petalblizzard: ["7L49", "6L49"], petaldance: ["7L59", "7V", "6L53", "5L53", "4L53", "3L44", "3S0"], poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeppowder: ["7L15", "7V", "6L15", "5L17", "4L17", "3L18", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], stunspore: ["7L14", "7V", "6L14", "5L15", "4L15", "3L16"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], toxic: ["7M", "7L39", "7V", "6M", "6L39", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], }}, vileplume: {learnset: { - absorb: ["3L1"], + absorb: ["7V", "3L1"], acid: ["7V"], - afteryou: ["6T", "5T"], + afteryou: ["7T", "6T", "5T"], aromatherapy: ["7L1", "6L1", "5L1", "4L1", "3L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "6M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - endure: ["4M", "3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["6T", "5T", "4T"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "6T", "5T", "4T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], megadrain: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], @@ -7416,56 +5158,59 @@ exports.BattleLearnsets = { petalblizzard: ["7L49", "6L49"], petaldance: ["7L59", "7V", "6L53", "5L53", "4L53", "3L44"], poisonpowder: ["7L1", "7V", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeppowder: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7L69", "7V", "6M", "6L64", "5M", "5L65", "4M", "4L65", "3M"], stunspore: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], }}, bellossom: {learnset: { - absorb: ["3L1"], - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + absorb: ["7V", "3L1"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "6M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["6T", "5T", "4T"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "6T", "5T", "4T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], + laserfocus: ["7T"], leafblade: ["7L1", "6L1", "5L1", "4L1"], leafstorm: ["7L69", "7L1", "6L1", "5L53", "4L53"], magicalleaf: ["7L1", "6L23", "5L23", "4L23", "3L1"], @@ -7474,208 +5219,214 @@ exports.BattleLearnsets = { naturalgift: ["4M"], naturepower: ["7M", "6M"], petalblizzard: ["7L49", "6L49"], - petaldance: ["7L59", "3L44"], - protect: ["7M", "6M", "5M", "4M", "3M"], + petaldance: ["7L59", "7V", "3L44"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quiverdance: ["7L39"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["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: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M", "3L55"], - stunspore: ["7L1", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3L55"], + stunspore: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], }}, paras: {learnset: { absorb: ["7L11"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["6T", "5T"], + afteryou: ["7T", "6T", "5T"], agility: ["7E", "6E", "5E", "4E"], aromatherapy: ["7L43", "6L43", "5L43", "4L38", "3L49"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + bugbite: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - crosspoison: ["7E", "6E", "5E", "5D", "4E"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + crosspoison: ["7E", "6E", "5D", "5E", "4E"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M", "4E", "3E", "3S0"], + falseswipe: ["7M", "7V", "6M", "5M", "4M", "4E", "3E", "3S0"], fellstinger: ["7E", "6E"], - flail: ["7E", "6E", "5E", "4E", "3E"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L17", "6L17", "5L17", "4T", "3T"], - gigadrain: ["7L38", "6T", "6L38", "5T", "5L38", "4M", "4L33", "3M", "3L43"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L17", "7V", "6L17", "5L17", "4T", "3T"], + gigadrain: ["7T", "7L38", "7V", "6T", "6L38", "5T", "5L38", "4M", "4L33", "3M", "3L43"], grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7E"], growth: ["7L33", "7V", "6L33", "5L33", "4L27", "3L37"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], leechlife: ["7M", "7V", "6L11", "5L11", "4L11", "3L19"], leechseed: ["7E", "6E", "5E"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], megadrain: ["7V"], metalclaw: ["7E", "6E", "5E", "4E"], mimic: ["7V", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], naturepower: ["7M", "6M"], - poisonpowder: ["7L6", "6L6", "5L6", "4L6", "3L13"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "4E", "3E"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + poisonpowder: ["7L6", "7V", "6L6", "5L6", "4L6", "3L13"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], ragepowder: ["7L49", "6L49", "5L49"], reflect: ["7V"], refresh: ["3S0"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], slash: ["7L27", "7V", "6L27", "5L27", "4L22", "3L31", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], spore: ["7L22", "7V", "6L22", "5L22", "4L17", "3L25", "3S0"], stringshot: ["4T"], strugglebug: ["6M", "5M"], - stunspore: ["7L6", "7V", "6L6", "5L6", "5D", "4L6", "3L7"], + stunspore: ["7L6", "7V", "6L6", "5D", "5L6", "4L6", "3L7"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7E", "6E", "5E", "4E", "3E"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "7V", "6E", "5E", "4E", "3E"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "5D", "4T"], + synthesis: ["7T", "6T", "5D", "5T", "4T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], wideguard: ["7E", "6E"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], xscissor: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L43"], }}, parasect: {learnset: { absorb: ["7L11", "7L1"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["6T", "5T"], + afteryou: ["7T", "6T", "5T"], aromatherapy: ["7L51", "6L51", "5L51", "4L47", "3L59"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], crosspoison: ["7L1", "6L1", "5L1", "4L1"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L17", "6L17", "5L17", "4T", "3T"], - gigadrain: ["7L44", "6T", "6L44", "5T", "5L44", "4M", "4L39", "3M", "3L51"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L17", "7V", "6L17", "5L17", "4T", "3T"], + gigadrain: ["7T", "7L44", "7V", "6T", "6L44", "5T", "5L44", "4M", "4L39", "3M", "3L51"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], growth: ["7L37", "7V", "6L37", "5L37", "4L30", "3L43"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], leechlife: ["7M", "7V", "6L1", "5L1", "4L1", "3L19"], lightscreen: ["7M", "6M", "5M"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], - poisonpowder: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + poisonpowder: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], ragepowder: ["7L59", "6L59", "5L59"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], slash: ["7L29", "7V", "6L29", "5L29", "4L22", "3L35"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], spore: ["7L22", "7V", "6L22", "5L22", "4L17", "3L27"], stringshot: ["4T"], strugglebug: ["6M", "5M"], stunspore: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], xscissor: ["7M", "7L66", "6M", "6L66", "5M", "5L66", "4M", "4L55"], }}, venonat: {learnset: { agility: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "5D", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], bide: ["7V"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + bugbite: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], captivate: ["4M"], confide: ["7M", "6M"], confusion: ["7L11", "7V", "6L11", "5L11", "4L11", "3L17"], - disable: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + curse: ["7V"], + disable: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], - foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "4E", "3M", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "4E", "3M", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], leechlife: ["7M", "7L35", "7V", "6L17", "5L17", "4L17", "3L25"], megadrain: ["7V"], @@ -7684,7 +5435,7 @@ exports.BattleLearnsets = { naturalgift: ["4M"], poisonfang: ["7L41", "6L41", "5L41", "4L41"], poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L20"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L17", "7V", "6L25", "5L25", "4L25", "3L33"], psychic: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L41"], psywave: ["7V"], @@ -7692,58 +5443,60 @@ exports.BattleLearnsets = { ragepowder: ["7E", "6E", "5E"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], - signalbeam: ["7L25", "7E", "6T", "6L35", "6E", "5T", "5L35", "5E", "4T", "4L35", "4E", "3E"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + signalbeam: ["7T", "7L25", "7E", "6T", "6L35", "6E", "5T", "5L35", "5E", "4T", "4L35", "4E", "3E"], + skillswap: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M", "3M"], sleeppowder: ["7L29", "7V", "6L29", "5L29", "4L29", "3L36"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], stunspore: ["7L23", "7V", "6L23", "5L23", "4L23", "3L28"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], supersonic: ["7L5", "7V", "6L5", "5L5", "4L5", "3L9"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + swift: ["7V", "4T", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7E", "6E", "5E", "4E"], venoshock: ["7M", "6M", "5M"], - zenheadbutt: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + zenheadbutt: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], }}, venomoth: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], bugbuzz: ["7L59", "7L1", "6L1", "5L59", "4L59"], captivate: ["4M"], confide: ["7M", "6M"], confusion: ["7L11", "7V", "6L11", "5L11", "4L11", "3L17"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], disable: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["7V", "6M", "5M", "4M", "3M"], - foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + foresight: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L1", "6L31", "5L31", "4L31", "3L31"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gust: ["7L1", "7V", "6L31", "5L31", "4L31", "3L31"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], leechlife: ["7M", "7L37", "7V", "6L17", "5L17", "4L17", "3L25"], @@ -7753,7 +5506,7 @@ exports.BattleLearnsets = { ominouswind: ["4T"], poisonfang: ["7L47", "6L47", "5L47", "4L47"], poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L20"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L17", "7V", "6L25", "5L25", "4L25", "3L36"], psychic: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L55", "3M", "3L52", "3S0"], psywave: ["7V"], @@ -7763,100 +5516,103 @@ exports.BattleLearnsets = { reflect: ["7V"], refresh: ["3S0"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["7L25", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + signalbeam: ["7T", "7L25", "6T", "6L37", "5T", "5L37", "4T", "4L37"], silverwind: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1", "3S0"], - skillswap: ["6T", "5T", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeppowder: ["7L29", "7V", "6L29", "5L29", "4L29", "3L42"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], stunspore: ["7L23", "7V", "6L23", "5L23", "4L23", "3L28"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T", "3S0"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swift: ["7V", "4T", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], uturn: ["7M", "6M", "5M", "4M"], venoshock: ["7M", "6M", "5M"], whirlwind: ["7V"], - zenheadbutt: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + zenheadbutt: ["7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], }}, diglett: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7E", "7V", "6E", "5E", "4E", "3E"], astonish: ["7L7", "7E", "6L7", "6E", "5L7", "5E", "4L7", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E", "5D", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], bide: ["7V"], bodyslam: ["7V", "3T"], bulldoze: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dig: ["7L31", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L18", "3M", "3L17"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["7L28", "6T", "6L29", "5T", "5L29", "4T", "4L26"], + earthpower: ["7T", "7L28", "6T", "6L29", "5T", "5L29", "4T", "4L26"], earthquake: ["7M", "7L39", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L41"], echoedvoice: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], finalgambit: ["7E", "6E", "5E"], fissure: ["7L43", "7V", "6L45", "5L45", "4L40", "3L49"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["3L21"], growl: ["7L4", "7V", "6L4", "5L4", "4L4", "3L5"], headbutt: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - magnitude: ["7L14", "6L15", "5L15", "4L12", "3L9"], + magnitude: ["7L14", "7V", "6L15", "5L15", "4L12", "3L9"], memento: ["7E", "6E", "5E"], mimic: ["7V", "3T"], mudbomb: ["7L25", "7E", "6L26", "6E", "5L26", "5E", "4L29", "4E"], - mudslap: ["7L10", "6L12", "5L12", "4T", "4L15", "3T", "3L25"], + mudslap: ["7L10", "7V", "6L12", "5L12", "4T", "4L15", "3T", "3L25"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], reversal: ["7E", "6E", "5E", "4E"], rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + sandattack: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], sandstorm: ["7M", "6M", "5M", "4M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], slash: ["7L35", "7V", "6L37", "5L37", "4L34", "3L33"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "5D", "4M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], + stompingtantrum: ["7T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7L22", "6L23", "5L23", "4T", "4L23"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], uproar: ["7E", "6E", "5T", "5E", "4E", "3E"], }}, @@ -7870,7 +5626,7 @@ exports.BattleLearnsets = { confide: ["7M"], dig: ["7L31"], doubleteam: ["7M"], - earthpower: ["7L28"], + earthpower: ["7T", "7L28"], earthquake: ["7M", "7L39"], echoedvoice: ["7M"], endure: ["7E"], @@ -7883,7 +5639,8 @@ exports.BattleLearnsets = { growl: ["7L4", "7S0"], headbutt: ["7E"], hiddenpower: ["7M"], - ironhead: ["7L35"], + irondefense: ["7T"], + ironhead: ["7T", "7L35"], magnitude: ["7L14"], memento: ["7E"], metalclaw: ["7L1", "7S0"], @@ -7903,6 +5660,9 @@ exports.BattleLearnsets = { shadowclaw: ["7M"], sleeptalk: ["7M"], sludgebomb: ["7M"], + snore: ["7T"], + stealthrock: ["7T"], + stompingtantrum: ["7T"], substitute: ["7M"], suckerpunch: ["7L22"], sunnyday: ["7M"], @@ -7915,42 +5675,43 @@ exports.BattleLearnsets = { dugtrio: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], astonish: ["7L7", "6L7", "5L7", "4L7"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], bulldoze: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], captivate: ["4M"], charm: ["3S0"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dig: ["7L35", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L18", "3M", "3L17"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["7L30", "6T", "6L33", "5T", "5L33", "4T", "4L28"], + earthpower: ["7T", "7L30", "6T", "6L33", "5T", "5L33", "4T", "4L28"], earthquake: ["7M", "7L47", "7V", "6M", "6L50", "5M", "5L50", "4M", "4L45", "3M", "3L51", "3S0"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7L53", "7V", "6L57", "5L57", "4L50", "3L64"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["3L21"], gigaimpact: ["7M", "6M", "5M", "4M"], growl: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - magnitude: ["7L14", "6L15", "5L15", "4L12", "3L9"], + magnitude: ["7L14", "7V", "6L15", "5L15", "4L12", "3L9"], mimic: ["7V", "3T"], mudbomb: ["7L25", "6L28", "5L28", "4L33"], - mudslap: ["7L10", "6L12", "5L12", "4T", "4L15", "3T", "3L25"], + mudslap: ["7L10", "7V", "6L12", "5L12", "4T", "4L15", "3T", "3L25"], naturalgift: ["4M"], nightslash: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], @@ -7961,20 +5722,21 @@ exports.BattleLearnsets = { secretpower: ["6M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], slash: ["7L41", "7V", "6L45", "5L45", "4L40", "3L38"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7L22", "6L23", "5L23", "4T", "4L23"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - triattack: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + triattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], uproar: ["5T"], }}, dugtrioalola: {learnset: { @@ -7985,7 +5747,7 @@ exports.BattleLearnsets = { confide: ["7M"], dig: ["7L35"], doubleteam: ["7M"], - earthpower: ["7L30"], + earthpower: ["7T", "7L30"], earthquake: ["7M", "7L47"], echoedvoice: ["7M"], facade: ["7M"], @@ -7996,7 +5758,8 @@ exports.BattleLearnsets = { growl: ["7L4", "7L1"], hiddenpower: ["7M"], hyperbeam: ["7M"], - ironhead: ["7L41"], + irondefense: ["7T"], + ironhead: ["7T", "7L41"], magnitude: ["7L14"], metalclaw: ["7L1"], mudbomb: ["7L25"], @@ -8016,6 +5779,9 @@ exports.BattleLearnsets = { sleeptalk: ["7M"], sludgebomb: ["7M"], sludgewave: ["7M"], + snore: ["7T"], + stealthrock: ["7T"], + stompingtantrum: ["7T"], stoneedge: ["7M"], substitute: ["7M"], suckerpunch: ["7L22"], @@ -8028,98 +5794,102 @@ exports.BattleLearnsets = { }}, meowth: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - amnesia: ["7E", "6E", "5E", "4E", "3E"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], assist: ["7E", "6E", "5E", "4E", "4S5", "3E"], assurance: ["7L41", "6L41", "5L41", "4L41"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bite: ["7L6", "7V", "6L6", "6S7", "5L6", "4L6", "4S4", "3L10", "3S2", "3S3"], + bite: ["7L6", "7V", "6L6", "6S7", "5L6", "4L6", "4S4", "3L10", "3S3", "3S2"], bodyslam: ["7V", "3T"], bubblebeam: ["7V"], captivate: ["7L46", "6L46", "5L46", "4M", "4L46"], - charm: ["7E", "6E", "5E", "4E", "3E"], + charm: ["7E", "7V", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L9", "6L9", "6S7", "5L9", "4L9", "4S4", "4S5", "3L43"], + fakeout: ["7L9", "6L9", "6S7", "5L9", "4L9", "4S5", "4S4", "3L43"], feint: ["7L50", "6L50", "5L54", "4L54"], - feintattack: ["7L22", "6L22", "5L22", "4L22", "3L25"], + feintattack: ["7L22", "7V", "6L22", "5L22", "4L22", "3L25"], flail: ["7E", "6E", "5E", "4E"], flash: ["6M", "5M", "4M", "3M"], - foulplay: ["7E", "6T", "6E", "5T", "5E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "7E", "6T", "6E", "5T", "5E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L14", "7V", "6L14", "5L14", "5S6", "4L14", "4S4", "3L36"], - growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2"], - gunkshot: ["6T", "5T", "4T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S2", "3S1", "3S0"], + gunkshot: ["7T", "6T", "5T", "4T"], happyhour: ["6S7"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7E", "6E", "5E", "5D", "4E", "3E"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L38", "6L38", "5L38", "5S6", "4L38"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], nightslash: ["7L49", "6L49", "5L49", "4L49"], odorsleuth: ["7E", "6E", "5E", "4E"], payback: ["7M", "6M", "5M", "4M"], payday: ["7L30", "7V", "6L30", "5L30", "4L30", "4S5", "3L18", "3S3"], petaldance: ["3S0"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], punishment: ["7E", "6E", "5E", "4E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "4S5", "3L1", "3S0", "3S1", "3S2"], + scratch: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "4S5", "3L1", "3S2", "3S1", "3S0"], screech: ["7L17", "7V", "6L17", "6S7", "5L17", "4L17", "4S4", "3L31"], secretpower: ["6M", "5D", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], sing: ["5S6", "3S3"], skullbash: ["7V"], slash: ["7L33", "7V", "6L33", "5L33", "4L33", "3L40", "3S3"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["7E", "6T", "6E", "5T", "5E", "5S6", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E", "5S6", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T", "3L45"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T", "3L45"], swift: ["7V", "4T", "3T"], tailwhip: ["7E", "6E", "5E", "4E"], takedown: ["7V"], taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, meowthalola: {learnset: { aerialace: ["7M"], @@ -8131,7 +5901,7 @@ exports.BattleLearnsets = { captivate: ["7L46"], charm: ["7E"], confide: ["7M"], - covet: ["7E"], + covet: ["7T", "7E"], darkpulse: ["7M", "7L55"], doubleteam: ["7M"], dreameater: ["7M"], @@ -8143,12 +5913,18 @@ exports.BattleLearnsets = { feintattack: ["7L22"], flail: ["7E"], flatter: ["7E"], - foulplay: ["7E"], + foulplay: ["7T", "7E"], frustration: ["7M"], furyswipes: ["7L14"], growl: ["7L1"], + gunkshot: ["7T"], hiddenpower: ["7M"], + hypervoice: ["7T"], hypnosis: ["7E"], + icywind: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], + lastresort: ["7T"], nastyplot: ["7L38"], nightslash: ["7L49"], partingshot: ["7E"], @@ -8164,114 +5940,124 @@ exports.BattleLearnsets = { round: ["7M"], scratch: ["7L1"], screech: ["7L17"], + seedbomb: ["7T"], shadowball: ["7M"], shadowclaw: ["7M"], + shockwave: ["7T"], slash: ["7L33"], sleeptalk: ["7M"], - snatch: ["7E"], - spite: ["7E"], + snatch: ["7T", "7E"], + snore: ["7T"], + spite: ["7T", "7E"], substitute: ["7M"], sunnyday: ["7M"], swagger: ["7M"], taunt: ["7M", "7L25"], thief: ["7M"], + throatchop: ["7T"], thunder: ["7M"], thunderbolt: ["7M"], torment: ["7M"], toxic: ["7M"], + uproar: ["7T"], uturn: ["7M"], + waterpulse: ["7T"], workup: ["7M"], }}, persian: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], assurance: ["7L49", "6L49", "5L49", "4L49"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], bodyslam: ["7V", "3T"], bubblebeam: ["7V"], captivate: ["7L56", "6L56", "5L56", "4M", "4L56"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L55"], feint: ["7L65", "6L65", "5L68", "4L68"], - feintattack: ["7L22", "6L22", "5L22", "4L22", "3L25"], + feintattack: ["7L22", "7V", "6L22", "5L22", "4L22", "3L25"], flash: ["6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L14", "7V", "6L14", "5L14", "4L14", "3L42"], gigaimpact: ["7M", "6M", "5M", "4M"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L44", "6L44", "5L44", "4L44"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], nightslash: ["7L61", "6L61", "5L61", "4L61"], payback: ["7M", "6M", "5M", "4M"], payday: ["7V", "3L18"], playrough: ["7L1", "6L1"], powergem: ["7L32", "6L32", "5L32", "4L32"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], screech: ["7L17", "7V", "6L17", "5L17", "4L17", "3L34"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], slash: ["7L37", "7V", "6L37", "5L37", "4L37", "3L49"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T", "3L61"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T", "3L61"], swift: ["7L1", "7V", "6L28", "5L28", "4T", "3T"], switcheroo: ["7L1", "6L1", "5L1", "4L1"], takedown: ["7V"], taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, persianalola: {learnset: { aerialace: ["7M"], @@ -8280,6 +6066,7 @@ exports.BattleLearnsets = { bite: ["7L6", "7L1"], captivate: ["7L56"], confide: ["7M"], + covet: ["7T"], darkpulse: ["7M", "7L69"], doubleteam: ["7M"], dreameater: ["7M"], @@ -8289,12 +6076,19 @@ exports.BattleLearnsets = { fakeout: ["7L9", "7L1"], feint: ["7L65"], feintattack: ["7L22"], + foulplay: ["7T"], frustration: ["7M"], furyswipes: ["7L14"], gigaimpact: ["7M"], growl: ["7L1"], + gunkshot: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], + hypervoice: ["7T"], + icywind: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], + lastresort: ["7T"], nastyplot: ["7L44"], nightslash: ["7L61"], payback: ["7M"], @@ -8310,11 +6104,16 @@ exports.BattleLearnsets = { round: ["7M"], scratch: ["7L1"], screech: ["7L17"], + seedbomb: ["7T"], shadowball: ["7M"], shadowclaw: ["7M"], + shockwave: ["7T"], slash: ["7L37"], sleeptalk: ["7M"], snarl: ["7M"], + snatch: ["7T"], + snore: ["7T"], + spite: ["7T"], substitute: ["7M"], sunnyday: ["7M"], swagger: ["7M"], @@ -8322,18 +6121,21 @@ exports.BattleLearnsets = { switcheroo: ["7L1"], taunt: ["7M", "7L25"], thief: ["7M"], + throatchop: ["7T"], thunder: ["7M"], thunderbolt: ["7M"], torment: ["7M"], toxic: ["7M"], + uproar: ["7T"], uturn: ["7M"], + waterpulse: ["7T"], workup: ["7M"], }}, psyduck: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], amnesia: ["7L37", "6L43", "5L48", "4L44"], - aquatail: ["7L28", "6T", "6L29", "5T", "5L32", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L28", "6T", "6L29", "5T", "5L32", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], @@ -8347,95 +6149,96 @@ exports.BattleLearnsets = { confuseray: ["7E", "6E", "5E", "4E"], confusion: ["7L10", "7V", "6L11", "5L18", "4L18", "3L16", "3S0"], counter: ["7V", "3T"], - crosschop: ["7E", "6E", "5E", "4E", "3E"], + crosschop: ["7E", "7V", "6E", "5E", "4E", "3E"], + curse: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], disable: ["7L19", "7V", "6L11", "5L14", "4L14", "3L10", "3S0"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - encore: ["7E", "6E", "5E", "5D", "4E"], - endure: ["4M", "3T"], + dynamicpunch: ["7V", "3T"], + encore: ["7E", "6E", "5D", "5E", "4E"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L13", "7V", "6L15", "5L27", "4L27", "3L40"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hydropump: ["7L40", "7V", "6L46", "5L53", "4L48", "3L50"], - hypnosis: ["7E", "6E", "5E", "4E", "3E"], + hypnosis: ["7E", "7V", "6E", "5E", "4E", "3E"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], mudbomb: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["3S1"], naturalgift: ["4M"], payday: ["7V"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "4E", "3E"], - psychic: ["7M", "6M", "5M", "4M", "4E", "3E"], - psychup: ["7M", "7L34", "6M", "6L39", "5M", "5L40", "4M", "4L35", "3T", "3L31"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + psychic: ["7M", "7V", "6M", "5M", "4M", "4E", "3E"], + psychup: ["7M", "7L34", "7V", "6M", "6L39", "5M", "5L40", "4M", "4L35", "3T", "3L31"], psyshock: ["7M", "6M", "5M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], refresh: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - screech: ["7L22", "6L25", "5L31", "4L31", "3L23", "3S0"], + screech: ["7L22", "7V", "6L25", "5L31", "4L31", "3L23", "3S0"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], seismictoss: ["7V", "3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], simplebeam: ["7E", "6E"], skullbash: ["7V"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], soak: ["7L31", "6L36", "5L35"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], synchronoise: ["7E", "6E", "5E"], - tailwhip: ["7L4", "7V", "6L4", "5L5", "4L5", "3L5", "3S0", "3S1"], + tailwhip: ["7L4", "7V", "6L4", "5L5", "4L5", "3L5", "3S1", "3S0"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7L7", "7V", "6L8", "5L9", "4L9"], - waterpulse: ["7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], - watersport: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], - whirlpool: ["4M"], - wonderroom: ["7L43", "6T", "6L50", "5T", "5L57"], - worryseed: ["6T", "5T", "4T"], + waterpulse: ["7T", "7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], + watersport: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1", "3S1"], + whirlpool: ["7V", "4M"], + wonderroom: ["7T", "7L43", "6T", "6L50", "5T", "5L57"], + worryseed: ["7T", "6T", "5T", "4T"], yawn: ["7E", "6E", "5E", "4E"], - zenheadbutt: ["7L25", "6T", "6L29", "5T", "5L44", "4T", "4L40"], + zenheadbutt: ["7T", "7L25", "6T", "6L29", "5T", "5L44", "4T", "4L40"], }}, golduck: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], amnesia: ["7L41", "6L49", "5L56", "4L50"], aquajet: ["7L1", "6L1", "5L1", "4L1"], - aquatail: ["7L28", "6T", "6L32", "5T", "5L32", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L28", "6T", "6L32", "5T", "5L32", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], @@ -8448,91 +6251,95 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], confusion: ["7L10", "7V", "6L11", "5L18", "4L18", "3L16"], counter: ["7V", "3T"], + curse: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], disable: ["7L19", "7V", "6L11", "5L14", "4L14", "3L1"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + dynamicpunch: ["7V", "3T"], + encore: ["7S1"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], furyswipes: ["7L13", "7V", "6L15", "5L27", "4L27", "3L44"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hydropump: ["7L46", "7V", "6L54", "5L63", "4L56", "3L58"], + hydropump: ["7L46", "7V", "7S1", "6L54", "5L63", "4L56", "3L58"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], lightscreen: ["7M", "6M", "5M"], - lowkick: ["6T", "5T", "4T"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], mefirst: ["7L1"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payday: ["7V"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "7S1", "6M", "5M", "4M", "3M"], psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "7L36", "6M", "6L43", "5M", "5L44", "4M", "4L37", "3T", "3L31", "3S0"], + psychup: ["7M", "7L36", "7V", "6M", "6L43", "5M", "5L44", "4M", "4L37", "3T", "3L31", "3S0"], psyshock: ["7M", "6M", "5M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + scald: ["7M", "7S1", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - screech: ["7L22", "6L25", "5L31", "4L31", "3L23"], + screech: ["7L22", "7V", "6L25", "5L31", "4L31", "3L23"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], soak: ["7L31", "6L38", "5L37"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M", "3S0"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], watergun: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1"], - waterpulse: ["7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], + waterpulse: ["7T", "7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], - whirlpool: ["4M"], - wonderroom: ["7L51", "6T", "6L60", "5T", "5L69"], - worryseed: ["6T", "5T", "4T"], - zenheadbutt: ["7L25", "6T", "6L25", "5T", "5L50", "4T", "4L44"], + whirlpool: ["7V", "4M"], + wonderroom: ["7T", "7L51", "6T", "6L60", "5T", "5L69"], + worryseed: ["7T", "6T", "5T", "4T"], + zenheadbutt: ["7T", "7L25", "6T", "6L25", "5T", "5L50", "4T", "4L44"], }}, mankey: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], assurance: ["7L26", "6L25", "5L25", "4L25"], - attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -8542,98 +6349,100 @@ exports.BattleLearnsets = { closecombat: ["7L36", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], confide: ["7M", "6M"], counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], - covet: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], - crosschop: ["7L22", "6L37", "5L37", "4L37", "3L31"], - defensecurl: ["3T"], + covet: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1"], + crosschop: ["7L22", "7V", "6L37", "5L37", "4L37", "3L31"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["3T"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], encore: ["7E", "6E", "5E", "4E"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], finalgambit: ["7L50", "6L53", "5L53"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], focusenergy: ["7L1", "7V", "6L1", "5L1", "4L1", "3L21"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L5", "7V", "6L9", "5L9", "4L9", "3L16"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], karatechop: ["7L8", "7V", "6L13", "5L13", "4L13", "3L11"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "5D", "4T", "4L1", "3L6"], + lowkick: ["7T", "7L1", "7V", "6T", "6L1", "5D", "5T", "5L1", "4T", "4L1", "3L6"], lowsweep: ["7M", "6M", "5M"], - meditate: ["7E", "6E", "5E", "4E", "3E"], + meditate: ["7E", "7V", "6E", "5E", "4E", "3E"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], nightslash: ["7E", "6E"], - outrage: ["7L47", "6T", "5T", "4T"], + outrage: ["7T", "7L47", "6T", "5T", "4T"], overheat: ["7M", "6M", "5M", "4M", "3M"], payback: ["7M", "6M", "5M", "4M"], payday: ["7V"], poisonjab: ["7M", "6M", "5M", "4M"], powertrip: ["7E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7V", "3T"], punishment: ["7L29", "6L45", "5L45", "4L45"], pursuit: ["7L12"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7E", "6E", "5E", "4E", "3E"], - reversal: ["7E", "6E", "5E", "5D", "4E", "3E"], + reversal: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], screech: ["7L40", "7V", "6L21", "5L21", "4L21", "3L41"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["7L15", "7V", "6L17", "5L17", "4L17", "3T", "3L26"], skullbash: ["7V"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "3T"], smackdown: ["7M", "6M", "5M"], smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snore: ["6T", "3T"], - spite: ["6T", "5T", "4T"], - stompingtantrum: ["7L43"], + snore: ["7T", "7V", "6T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T", "7L43"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L19", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L36"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L19", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L36"], swift: ["7V", "4T", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7L33", "7V", "6L41", "5L41", "4L41", "3L46"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "5D", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], vacuumwave: ["4T"], workup: ["7M", "5M"], @@ -8642,7 +6451,7 @@ exports.BattleLearnsets = { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], assurance: ["7L26", "6L25", "5L25", "4L25"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -8652,94 +6461,97 @@ exports.BattleLearnsets = { closecombat: ["7L39", "6L59", "5L59", "4L59"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["6T", "5T"], - crosschop: ["7L22", "6L41", "5L41", "4L41", "3L35", "3S0"], - defensecurl: ["3T"], + covet: ["7T", "6T", "5T"], + crosschop: ["7L22", "7V", "6L41", "5L41", "4L41", "3L35", "3S0"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["3T"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], finalgambit: ["7L57", "7L1", "6L1", "5L63"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fling: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], focusblast: ["7M", "6M", "5M", "4M"], focusenergy: ["7L1", "7V", "6L1", "5L1", "4L1", "3L21", "3S0"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furyswipes: ["7L5", "7V", "6L9", "5L9", "4L9", "3L16"], gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T", "3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], karatechop: ["7L8", "7V", "6L13", "5L13", "4L13", "3L11"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + lowkick: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], lowsweep: ["7M", "6M", "5M"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["7L53", "6T", "5T", "4T"], + outrage: ["7T", "7L53", "6T", "5T", "4T"], overheat: ["7M", "6M", "5M", "4M", "3M"], payback: ["7M", "6M", "5M", "4M"], payday: ["7V"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7V", "3T"], punishment: ["7L30", "6L53", "5L53", "4L53"], pursuit: ["7L12"], rage: ["7L1", "7V", "6L28", "5L28", "4L28", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], reversal: ["3S0"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], screech: ["7L44", "7V", "6L21", "5L21", "4L21", "3L53"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["7L15", "7V", "6L17", "5L17", "4L17", "3T", "3L26"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "3T"], - spite: ["6T", "5T", "4T"], - stompingtantrum: ["7L48"], + snore: ["7T", "7V", "6T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T", "7L48"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L19", "6M", "6L35", "5M", "5L35", "4M", "4L35", "3T", "3L44"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L19", "7V", "6M", "6L35", "5M", "5L35", "4M", "4L35", "3T", "3L44"], swift: ["7V", "4T", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7L35", "7V", "6L47", "5L47", "4L47", "3L62"], + throatchop: ["7T"], thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], vacuumwave: ["4T"], workup: ["7M", "5M"], @@ -8747,140 +6559,146 @@ exports.BattleLearnsets = { growlithe: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], agility: ["7L30", "7V", "6L30", "5L42", "4L39", "3L43"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bite: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S1", "3S2"], - bodyslam: ["7E", "7V", "6E", "5E", "5D", "4E", "3T", "3E"], + bite: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S2", "3S1"], + bodyslam: ["7E", "7V", "6E", "5D", "5E", "4E", "3T", "3E"], burnup: ["7E"], captivate: ["4M"], charm: ["3S2"], closecombat: ["7E", "6E", "5E"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E"], - crunch: ["7L39", "7E", "6L39", "6E", "5L45", "5E", "4L42", "4E", "3E"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + crunch: ["7L39", "7E", "7V", "6L39", "6E", "5L45", "5E", "4L42", "4E", "3E"], + curse: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T"], doublekick: ["7E", "6E", "5E"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragonrage: ["7V"], ember: ["7L6", "7V", "6L6", "5L6", "4L6", "3L7", "3S1"], - endure: ["5D", "4M", "3T"], + endure: ["7V", "5D", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firefang: ["7L21", "6L21", "5L28", "4L28"], - firespin: ["7E", "6E", "5E", "4E", "3E"], + firespin: ["7E", "7V", "6E", "5E", "4E", "3E"], flameburst: ["7L28", "6L28", "5L31"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L39", "4M", "4L34", "3M", "3L49", "3S2"], - flamewheel: ["7L17", "6L17", "5L20", "4L20", "3L31", "3S0"], + flamewheel: ["7L17", "7V", "6L17", "5L20", "4L20", "3L31", "3S0"], flareblitz: ["7L45", "7E", "6L45", "6E", "5L56", "5E", "4L48", "4E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - heatwave: ["7L41", "7E", "6T", "6L41", "6E", "5T", "5L51", "5E", "4T", "4L45", "4E", "3E"], - helpinghand: ["7L12", "6T", "6L12", "5T", "5L17", "4T", "4L17", "3L37"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "7L41", "7E", "6T", "6L41", "6E", "5T", "5L51", "5E", "4T", "4L45", "4E", "3E"], + helpinghand: ["7T", "7L12", "6T", "6L12", "5T", "5L17", "4T", "4L17", "3L37"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], howl: ["7E", "6E", "5E", "4E", "3E"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], leer: ["7L8", "7V", "6L8", "5L9", "4L9", "3L13", "3S0"], mimic: ["7V", "3T"], morningsun: ["7E", "6E", "5E", "4E"], mudslap: ["4T"], naturalgift: ["4M"], odorsleuth: ["7L10", "6L10", "5L14", "4L14", "3L19", "3S0"], - outrage: ["7L43", "6T", "6L43", "5T", "5L43"], + outrage: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["7L32", "6M", "6L32", "5M", "5L48"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], reversal: ["7L19", "6L19", "5L25", "4L25"], - roar: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M", "3L1", "3S1"], - rocksmash: ["6M", "5M", "4M", "3M"], + roar: ["7M", "7L1", "7V", "6M", "6L1", "5D", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S1"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - takedown: ["7L23", "7V", "6L23", "5L34", "4L31", "3L25", "3S0", "3S2"], + takedown: ["7L23", "7V", "6L23", "5L34", "4L31", "3L25", "3S2", "3S0"], thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7E", "6E", "5E", "4E", "3E"], + thrash: ["7E", "7V", "6E", "5E", "4E", "3E"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], }}, arcanine: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], bodyslam: ["7V", "3T"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], crunch: ["4S0"], + curse: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + dragonbreath: ["7V"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragonrage: ["7V"], ember: ["7V", "3L1"], - endure: ["4M", "3T"], - extremespeed: ["7L34", "7S1", "6L34", "5L39", "4L39", "4S0", "3L49"], + endure: ["7V", "4M", "3T"], + extremespeed: ["7L34", "7S1", "7V", "6L34", "5L39", "4L39", "4S0", "3L49"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firefang: ["7L1", "6L1", "5L1", "4L1"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flamewheel: ["7V"], flareblitz: ["7S1", "4S0"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], leer: ["7V"], mimic: ["7V", "3T"], mudslap: ["4T"], naturalgift: ["4M"], odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], - outrage: ["6T", "5T"], + outrage: ["7T", "6T", "5T"], overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "7S1", "6M", "5M", "4M", "3M"], + protect: ["7M", "7S1", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], takedown: ["7V"], teleport: ["7V"], @@ -8892,8 +6710,8 @@ exports.BattleLearnsets = { }}, poliwag: {learnset: { amnesia: ["7V"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7L31", "6L31", "5L31", "4L31", "3L37"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bellydrum: ["7L31", "7V", "6L31", "5L31", "4L31", "3L37"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7L21", "7V", "6L21", "5L21", "4L21", "3T", "3L31"], @@ -8901,66 +6719,67 @@ exports.BattleLearnsets = { bubblebeam: ["7L25", "7E", "7V", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3E"], captivate: ["4M"], confide: ["7M", "6M"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleslap: ["7L15", "7V", "6L15", "5L15", "4L15", "3L19"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], encore: ["7E", "6E", "5E", "4E"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "4E"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endeavor: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L38", "7V", "6L38", "5L38", "4L38", "3L43"], - hypnosis: ["7L8", "7V", "6L8", "5L8", "5D", "4L8", "3L7"], + hypnosis: ["7L8", "7V", "6L8", "5D", "5L8", "4L8", "3L7"], iceball: ["7E", "6E", "5E", "4E", "3E"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], mimic: ["7V", "3T"], - mindreader: ["7E", "6E", "5E", "4E", "3E"], - mist: ["7E", "6E", "5E", "5D", "4E", "3E"], + mindreader: ["7E", "7V", "6E", "5E", "4E", "3E"], + mist: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], mudbomb: ["7L41", "6L41", "5L41", "4L41"], mudshot: ["7L28", "7E", "6L28", "6E", "5L28", "5E", "4L28", "4E"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L25"], + raindance: ["7M", "7L18", "7V", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L25"], refresh: ["7E", "6E", "5E", "4E"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - splash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5D", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + splash: ["7E", "7V", "6E", "5E", "4E", "3E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], sweetkiss: ["3S0"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wakeupslap: ["7L35", "6L35", "5L35", "4L35"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7L5", "7V", "6L5", "5L11", "4L11", "3L13"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], watersport: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E", "3E"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], }}, poliwhirl: {learnset: { amnesia: ["7V"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7L37", "6L37", "5L37", "4L37", "3L43"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bellydrum: ["7L37", "7V", "6L37", "5L37", "4L37", "3L43"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7L21", "7V", "6L21", "5L21", "4L21", "3T", "3L35"], @@ -8971,70 +6790,72 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleslap: ["7L15", "7V", "6L15", "5L15", "4L15", "3L19"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L48", "7V", "6L48", "5L48", "4L48", "3L51"], hypnosis: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], mudbomb: ["7L53", "6L53", "5L53", "4L53"], mudshot: ["7L32", "6L32", "5L32", "4L32"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L27"], + raindance: ["7M", "7L18", "7V", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L27"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wakeupslap: ["7L43", "6L43", "5L43", "4L43"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7L5", "7L1", "7V", "6L1", "5L11", "4L11", "3L1"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], watersport: ["7L1", "6L1", "5L1", "4L1"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], }}, poliwrath: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], @@ -9046,151 +6867,157 @@ exports.BattleLearnsets = { circlethrow: ["7L53", "7L1", "6L1", "5L53"], confide: ["7M", "6M"], counter: ["7V", "3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["7L32", "6L32", "5L32", "4L43", "3T"], + dualchop: ["7T"], + dynamicpunch: ["7L32", "7V", "6L32", "5L32", "4L43", "3T"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T", "3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["3S0"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], lowsweep: ["7M", "6M", "5M"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mindreader: ["7L43", "6L43", "5L43", "4L53", "3L51"], - mudslap: ["4T", "3T"], + mindreader: ["7L43", "7V", "6L43", "5L43", "4L53", "3L51"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], vacuumwave: ["4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], workup: ["7M", "5M"], }}, politoed: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + bounce: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7L1", "6L1", "5L1", "4L1"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleslap: ["7L1", "6L1", "5L1", "4L1", "3L1"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["7L48", "6T", "6L48", "5T", "5L48", "4L48"], - hypnosis: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "7L48", "6T", "6L48", "5T", "5L48", "4L48"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], - perishsong: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L1"], + perishsong: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "5S0", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "5S0", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M", "5S0"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3T", "3L51"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L27", "7V", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3T", "3L51"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7V", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], }}, abra: {learnset: { - allyswitch: ["7E", "6E", "5M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], + allyswitch: ["7T", "7E", "6E", "5M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrier: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], bodyslam: ["7V", "3T"], calmmind: ["7M", "6M", "5M", "4M", "3M"], @@ -9198,89 +7025,92 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], embargo: ["7M", "6M", "5M", "4M"], - encore: ["7E", "6E", "5E", "4E", "3E"], - endure: ["4M", "3T"], + encore: ["7E", "7V", "6E", "5E", "4E", "3E"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + firepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "5D", "4T"], + gravity: ["7T", "6T", "5D", "5T", "4T"], guardsplit: ["7E", "6E", "5E"], guardswap: ["7E", "6E", "5E", "4E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + lightscreen: ["7M", "7V", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], powertrick: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychicterrain: ["7E"], psychoshift: ["7E", "6E"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - teleport: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + telekinesis: ["7T", "5M"], + teleport: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, kadabra: {learnset: { - allyswitch: ["7L36", "6L24", "5M", "5L24"], - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T", "7L36", "6L24", "5M", "5L24"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], calmmind: ["7M", "6M", "5M", "4M", "3M"], @@ -9289,92 +7119,94 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], confusion: ["7L16", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], counter: ["7V", "3T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], dig: ["7V"], disable: ["7L18", "7V", "6L18", "5L18", "4L18", "3L18"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L43", "6L43", "5L48", "4L42", "3L30"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L43", "7V", "6L43", "5L48", "4L42", "3L30"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], kinesis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], miracleeye: ["7L23", "6L22", "5L22", "4L22"], naturalgift: ["4M"], - nightmare: ["3T"], - protect: ["7M", "6M", "5M", "4M", "3M"], + nightmare: ["7V", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L21", "7V", "6L21", "5L28", "4L24", "3L21"], psychic: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L46", "4M", "4L40", "3M", "3L36"], psychocut: ["7L28", "6L28", "5L40", "4L34"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], recover: ["7L31", "7V", "6L31", "5L36", "4L30", "3L25"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7L26", "7V", "6M", "6L26", "5M", "5L30", "4M", "4L28", "3M", "3L23"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["7L41", "6T", "6L41", "5T", "5L42", "4T", "4L36", "3L33"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "7L41", "6T", "6L41", "5T", "5L42", "4T", "4L36", "3L33"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["7L33", "6L33", "5M", "5L34"], + telekinesis: ["7T", "7L33", "6L33", "5M", "5L34"], teleport: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["7L46", "6T", "6L46", "5T", "5L52", "4T", "4L46", "3L43"], + trick: ["7T", "7L46", "6T", "6L46", "5T", "5L52", "4T", "4L46", "3L43"], trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, alakazam: {learnset: { - allyswitch: ["7L36", "6L24", "5M", "5L24"], - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T", "7L36", "6L24", "5M", "5L24"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], calmmind: ["7M", "7L41", "6M", "6L41", "5M", "5L42", "4M", "4L36", "3M", "3L33", "3S0"], @@ -9383,188 +7215,193 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], confusion: ["7L16", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], counter: ["7V", "3T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], dig: ["7V"], disable: ["7L18", "7V", "6L18", "5L18", "4L18", "3L18"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L43", "6L43", "5L48", "4L42", "3L30", "3S0"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L43", "7V", "6L43", "5L48", "4L42", "3L30", "3S0"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], kinesis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], miracleeye: ["7L23", "6L22", "5L22", "4L22"], naturalgift: ["4M"], - nightmare: ["3T"], - protect: ["7M", "6M", "5M", "4M", "3M"], + nightmare: ["7V", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L21", "7V", "6L21", "5L28", "4L24", "3L21"], psychic: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L46", "4M", "4L40", "3M", "3L36", "3S0"], psychocut: ["7L28", "6L28", "5L40", "4L34"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], recover: ["7L31", "7V", "6L31", "5L36", "4L30", "3L25"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7L26", "7V", "6M", "6L26", "5M", "5L30", "4M", "4L28", "3M", "3L23"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["7L33", "6L33", "5M", "5L34"], + telekinesis: ["7T", "7L33", "6L33", "5M", "5L34"], teleport: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["7L46", "6T", "6L46", "5T", "5L52", "4T", "4L46", "3L43", "3S0"], + trick: ["7T", "7L46", "6T", "6L46", "5T", "5L52", "4T", "4L46", "3L43", "3S0"], trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, machop: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "7L37", "6M", "6L37", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E", "6E", "5E", "5D", "4E"], + bulletpunch: ["7E", "6E", "5D", "5E", "4E"], captivate: ["4M"], closecombat: ["7E", "6E", "5E", "4E"], confide: ["7M", "6M"], counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], - crosschop: ["7L39", "6L39", "5L43", "4L37", "3L40"], + crosschop: ["7L39", "7V", "6L39", "5L43", "4L37", "3L40"], + curse: ["7V"], + detect: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["7L31", "6T", "6L31", "5T"], - dynamicpunch: ["7L45", "6L45", "5L49", "4L46", "3T", "3L49"], + dualchop: ["7T", "7L31", "6T", "6L31", "5T"], + dynamicpunch: ["7L45", "7V", "6L45", "5L49", "4L46", "3T", "3L49"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - encore: ["7E", "6E", "5E", "4E", "3E"], - endure: ["4M", "3T"], + encore: ["7E", "7V", "6E", "5E", "4E", "3E"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + firepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], focusenergy: ["7L3", "7V", "6L3", "5L7", "4L7", "3L7"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L9", "6L9", "5L19", "4L13", "3L22"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L9", "7V", "6L9", "5L19", "4L13", "3L22"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], heavyslam: ["7E", "6E", "5E"], - helpinghand: ["6T", "5T", "5D", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + helpinghand: ["7T", "6T", "5D", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], incinerate: ["6M", "5M"], karatechop: ["7L7", "7V", "6L7", "5L10", "4L10", "3L13"], - knockoff: ["7L21", "7E", "6T", "6L21", "6E", "5T", "5E"], + knockoff: ["7T", "7L21", "7E", "6T", "6L21", "6E", "5T", "5E"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], - lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "5D", "4T", "4L1", "3L1"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], + lowkick: ["7T", "7L1", "7V", "6T", "6L1", "5D", "5T", "5L1", "4T", "4L1", "3L1"], lowsweep: ["7M", "7L13", "6M", "6L13", "5M", "5L13"], - meditate: ["7E", "6E", "5E", "4E", "3E"], + meditate: ["7E", "7V", "6E", "5E", "4E", "3E"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], powertrick: ["7E", "6E", "5E", "4E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickguard: ["7E", "6E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7L19", "6L19", "5L25", "4L22", "3L25"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollingkick: ["7E", "6E", "5E", "4E", "3E"], + roleplay: ["7T", "6T", "5T", "4T"], + rollingkick: ["7E", "7V", "6E", "5E", "4E", "3E"], round: ["7M", "6M", "5M"], - scaryface: ["7L43", "6L43", "5L46", "4L43", "3L43"], + scaryface: ["7L43", "7V", "6L43", "5L46", "4L43", "3L43"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7L15", "7V", "6L15", "5L22", "4L19", "3T", "3L19"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7L33", "7V", "6L33", "5L34", "4L31", "3L37"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], tickle: ["7E", "6E", "5E"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], vacuumwave: ["4T"], - vitalthrow: ["7L25", "6L25", "5L31", "4L25", "3L31"], + vitalthrow: ["7L25", "7V", "6L25", "5L31", "4L25", "3L31"], wakeupslap: ["7L27", "6L27", "5L37", "4L34"], workup: ["7M", "5M"], }}, machoke: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -9573,166 +7410,173 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - crosschop: ["7L47", "6L44", "5L44", "4L40", "3L46"], + crosschop: ["7L47", "7V", "6L44", "5L44", "4L40", "3L46"], + curse: ["7V"], + detect: ["7V"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["7L33", "6T", "6L33", "5T"], - dynamicpunch: ["7L57", "6L55", "5L55", "4L51", "3T", "3L59"], + dualchop: ["7T", "7L33", "6T", "6L33", "5T"], + dynamicpunch: ["7L57", "7V", "6L55", "5L55", "4L51", "3T", "3L59"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], focusenergy: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L9", "6L9", "5L19", "5S0", "4L13", "3L22"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L9", "7V", "6L9", "5L19", "5S0", "4L13", "3L22"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], karatechop: ["7L7", "7L1", "7V", "6L1", "5L1", "4L10", "3L13"], - knockoff: ["7L21", "6T", "6L21", "5T"], + knockoff: ["7T", "7L21", "6T", "6L21", "5T"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], - lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + lowkick: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], lowsweep: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "5S0"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7L19", "6L19", "5L25", "5S0", "4L22", "3L25"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - scaryface: ["7L53", "6L51", "5L51", "4L44", "3L51"], + scaryface: ["7L53", "7V", "6L51", "5L51", "4L44", "3L51"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7L15", "7V", "6L15", "5L22", "5S0", "4L19", "3T", "3L19"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7L37", "7V", "6L36", "5L36", "4L32", "3L41"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], vacuumwave: ["4T"], - vitalthrow: ["7L25", "6L25", "5L32", "4L25", "3L33"], + vitalthrow: ["7L25", "7V", "6L25", "5L32", "4L25", "3L33"], wakeupslap: ["7L27", "6L27", "5L40", "4L36"], workup: ["7M", "5M"], }}, machamp: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "7L43", "7S2", "6M", "6L43", "5M", "4M", "3M"], + bulkup: ["7M", "7L43", "7S3", "6M", "6L43", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], bulletpunch: ["4C"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - crosschop: ["7L47", "6L44", "5L44", "4L40", "3L46"], - dig: ["7V", "6M", "5M", "4M", "3M"], - doubleedge: ["7S2", "7V", "3T"], + crosschop: ["7L47", "7V", "6L44", "5L44", "4L40", "3L46"], + curse: ["7V"], + detect: ["7V"], + dig: ["7V", "6M", "6S2", "5M", "4M", "3M"], + doubleedge: ["7V", "7S3", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["7L33", "6T", "6L33", "5T"], - dynamicpunch: ["7L57", "6L55", "6S1", "5L55", "4L51", "3T", "3L59"], + dualchop: ["7T", "7L33", "6T", "6L33", "5T"], + dynamicpunch: ["7L57", "7V", "6L55", "6S2", "6S1", "5L55", "4L51", "3T", "3L59"], earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L9", "6L9", "5L19", "4L13", "3L22", "3S0"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L3", "7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L9", "7V", "6L9", "5L19", "4L13", "3L22", "3S0"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], karatechop: ["7L7", "7L1", "7V", "6L1", "5L1", "4L10", "3L13"], - knockoff: ["7L21", "6T", "6L21", "6S1", "5T"], + knockoff: ["7T", "7L21", "6T", "6L21", "6S1", "5T"], leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], - lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + lowkick: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], lowsweep: ["7M", "7L13", "6M", "6L13", "5M", "5L13"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickguard: ["7S2"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickguard: ["7S3"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7L19", "6L19", "5L25", "4L22", "3L25", "3S0"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - scaryface: ["7L53", "6L51", "5L51", "4L44", "3L51"], + scaryface: ["7L53", "7V", "6L51", "5L51", "4L44", "3L51"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7L15", "7V", "6L15", "5L22", "4L19", "3T", "3L19", "3S0"], + seismictoss: ["7L15", "7V", "6L15", "6S2", "5L22", "4L19", "3T", "3L19", "3S0"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "6S1", "5M", "4M"], - strength: ["7L1", "7S2", "7V", "6M", "5M", "4M", "3M"], + strength: ["7L1", "7V", "7S3", "7V", "6M", "5M", "4M", "3M"], submission: ["7L37", "7V", "6L36", "5L36", "4L32", "3L41"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], vacuumwave: ["4T"], - vitalthrow: ["7L25", "6L25", "5L32", "4L25", "3L33", "3S0"], + vitalthrow: ["7L25", "7V", "6L25", "5L32", "4L25", "3L33", "3S0"], wakeupslap: ["7L27", "6L27", "5L40", "4L36"], wideguard: ["7L1", "6L1", "6S1", "5L1"], workup: ["7M", "5M"], @@ -9740,32 +7584,33 @@ exports.BattleLearnsets = { bellsprout: {learnset: { acid: ["7L23", "7V", "6L23", "5L23", "4L23", "3L23"], acidspray: ["7E", "6E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7E", "6E"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], bulletseed: ["7E", "6E", "5E", "4M", "3M"], captivate: ["4M"], clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - encore: ["7E", "6E", "5E", "4E", "3E"], - endure: ["4M", "3T"], + encore: ["7E", "7V", "6E", "5E", "4E", "3E"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + gigadrain: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], growth: ["7L7", "7V", "6L7", "5L7", "4L7", "3L6", "3S1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], ingrain: ["7E", "6E", "5E", "4E", "3E"], - knockoff: ["7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27"], - leechlife: ["7E", "6E", "5E", "4E", "3E"], + knockoff: ["7T", "7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27"], + leechlife: ["7E", "7V", "6E", "5E", "4E", "3E"], magicalleaf: ["7E", "6E", "5E", "4E", "3E"], megadrain: ["7V"], mimic: ["7V", "3T"], @@ -9774,65 +7619,67 @@ exports.BattleLearnsets = { poisonjab: ["7M", "7L41"], poisonpowder: ["7L15", "7V", "6L15", "5L15", "4L15", "3L17"], powerwhip: ["7E", "6E", "5E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], razorleaf: ["7L39", "7V", "6L39", "5L39", "4L39", "3L37"], reflect: ["7M", "7V", "6M", "5M", "4E", "3E"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "5D", "4T"], + seedbomb: ["7T", "6T", "5D", "5T", "4T"], slam: ["7L47", "7V", "6L41", "5L41", "4L41", "3L45"], sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + strengthsap: ["7E"], stunspore: ["7L17", "7V", "6L17", "5L17", "4L17", "3L19"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L29", "6L29", "5L29", "4L29", "3L30"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L29", "7V", "6L29", "5L29", "4L29", "3L30"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + synthesis: ["7T", "7E", "7V", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], takedown: ["7V"], teeterdance: ["3S0"], thief: ["7M", "6M", "5M", "4M", "3M"], tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - vinewhip: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], + vinewhip: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S1", "3S0"], weatherball: ["7E", "6E", "5E", "4E"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], wrap: ["7L11", "7V", "6L11", "5L11", "4L11", "3L11"], wringout: ["7L50", "6L47", "5L47", "4L47"], }}, weepinbell: {learnset: { acid: ["7L24", "7V", "6L23", "5L23", "4L23", "3L24"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], bugbite: ["5T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L39", "6T", "6L35", "5T", "5L35", "4T", "4L35"], - gigadrain: ["6T", "5T", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L39", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], growth: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - knockoff: ["7L29", "6T", "6L27", "5T", "5L27", "4T", "4L27"], + knockoff: ["7T", "7L29", "6T", "6L27", "5T", "5L27", "4T", "4L27"], magicalleaf: ["3S0"], megadrain: ["7V"], mimic: ["7V", "3T"], @@ -9841,64 +7688,65 @@ exports.BattleLearnsets = { naturepower: ["7M", "6M"], poisonjab: ["7M", "7L47"], poisonpowder: ["7L15", "7V", "6L15", "5L15", "4L15", "3L17"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], razorleaf: ["7L44", "7V", "6L39", "5L39", "4L39", "3L42"], reflect: ["7M", "7V", "6M", "5M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], slam: ["7L54", "7V", "6L41", "5L41", "4L41", "3L54"], sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], stunspore: ["7L17", "7V", "6L17", "5L17", "4L17", "3L19"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L32", "6L29", "5L29", "4L29", "3L33", "3S0"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L32", "7V", "6L29", "5L29", "4L29", "3L33", "3S0"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], vinewhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], wrap: ["7L11", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], wringout: ["7L58", "6L47", "5L47", "4L47"], }}, victreebel: {learnset: { acid: ["7V"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], bodyslam: ["7V", "3T"], bugbite: ["5T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["6T", "5T", "4T"], - gigadrain: ["6T", "5T", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "6T", "5T", "4T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], leafblade: ["7L44", "6L47", "5L47", "4L47"], leafstorm: ["7L32", "6L47", "5L47", "4L47"], leaftornado: ["7L1", "6L27", "5L27"], @@ -9908,49 +7756,49 @@ exports.BattleLearnsets = { naturepower: ["7M", "6M"], poisonjab: ["7M"], poisonpowder: ["7V"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], razorleaf: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], reflect: ["7M", "7V", "6M", "5M"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeppowder: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], spitup: ["7L1", "6L1", "5L1", "4L1", "3L1"], stockpile: ["7L1", "6L1", "5L1", "4L1", "3L1"], stunspore: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7L1", "6L1", "5L1", "4L1", "3L1"], - sweetscent: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sweetscent: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], - vinewhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], - worryseed: ["6T", "5T", "4T"], + vinewhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + worryseed: ["7T", "6T", "5T", "4T"], wrap: ["7V"], }}, tentacool: {learnset: { acid: ["7L10", "7V", "6L10", "5L12", "4L12", "3L19"], acidspray: ["7L22", "6L22", "5L26"], - acupressure: ["7E", "6E", "5E", "5D", "4E"], + acupressure: ["7E", "6E", "5D", "5E", "4E"], aquaring: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "7V", "6E", "5E", "4E", "3E"], barrier: ["7L28", "7V", "6L28", "5L29", "4L26", "3L36"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], brine: ["7L34", "6L34", "4M"], bubble: ["7E", "6E", "5E"], @@ -9959,54 +7807,55 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], confuseray: ["7E", "6E", "5E", "4E", "3E"], constrict: ["7L7", "7V", "6L7", "5L8", "4L8", "3L12"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "6M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "5D", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5D", "5T", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], hex: ["7L40", "6L40", "5L43"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L46", "7V", "6L46", "5L47", "4L40", "3L49"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], infestation: ["7M", "6M"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - magiccoat: ["6T", "5T", "4T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + magiccoat: ["7T", "6T", "5T", "4T"], megadrain: ["7V"], mimic: ["7V", "3T"], - mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], + mirrorcoat: ["7E", "7V", "6E", "5E", "4E", "3E"], muddywater: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L33"], poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "7V", "6E", "5E", "4E", "3E"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], scald: ["7M", "6M", "5M"], screech: ["7L37", "7V", "6L37", "5L40", "4L36", "3L43"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "7L43", "6M", "6L43", "5M", "5L50"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - supersonic: ["7L4", "7V", "6L4", "5L5", "5D", "4L5", "3L6"], + supersonic: ["7L4", "7V", "6L4", "5D", "5L5", "4L5", "3L6"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], @@ -10016,71 +7865,72 @@ exports.BattleLearnsets = { venoshock: ["7M", "6M", "5M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["7L16", "6T", "6L16", "5L33", "4M", "4L29", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "7L16", "6T", "6L16", "5L33", "4M", "4L29", "3M"], + whirlpool: ["7V", "4M"], wrap: ["7L19", "7V", "6L19", "5L22", "4L22", "3L30"], wringout: ["7L49", "6L49", "5L54", "4L43"], }}, tentacruel: {learnset: { acid: ["7L10", "7L1", "7V", "6L1", "5L12", "4L12", "3L19"], acidspray: ["7L22", "6L22", "5L26"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], barrier: ["7L28", "7V", "6L28", "5L29", "4L26", "3L38"], bide: ["7V"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], brine: ["7L36", "6L36", "4M"], bubblebeam: ["7L25", "7V", "6L19", "5L19", "4L19", "3L25"], captivate: ["4M"], confide: ["7M", "6M"], constrict: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "6M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], hex: ["7L44", "6L44", "5L47"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L52", "7V", "6L52", "5L52", "4L49", "3L55"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], - magiccoat: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "7L32", "6M", "6L32", "5M", "5L38", "4M", "4L36"], poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], reflecttype: ["7L1", "6L1"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], screech: ["7L40", "7V", "6L40", "5L43", "4L42", "3L47"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "7L48", "6M", "6L48", "5M", "5L56"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], supersonic: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], @@ -10089,97 +7939,97 @@ exports.BattleLearnsets = { venoshock: ["7M", "6M", "5M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["7L16", "6T", "6L16", "5L34", "4M", "4L29", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "7L16", "6T", "6L16", "5L34", "4M", "4L29", "3M"], + whirlpool: ["7V", "4M"], wrap: ["7L19", "7V", "6L19", "5L22", "4L22", "3L30"], wringout: ["7L56", "7L1", "6L1", "5L61", "4L55"], }}, geodude: {learnset: { ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], autotomize: ["7E", "6E", "5E"], bide: ["7V"], - block: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + block: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "7L22", "6M", "6L22", "5M", "5L32"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - curse: ["7E", "6E", "5E", "4E"], - defensecurl: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3T", "3L1"], + curse: ["7E", "7V", "6E", "5E", "4E"], + defensecurl: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3T", "3L1"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L40", "7V", "6L40", "5L46", "4L36", "3T", "3L46"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L39", "4M", "4L29", "3M", "3L36"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], explosion: ["7M", "7L36", "7V", "6M", "6L36", "5M", "5L43", "4M", "4L32", "3T", "3L41"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flail: ["7E", "6E", "5E", "4E"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "6M", "5M", "4M"], hammerarm: ["7E", "6E", "5E", "4E"], harden: ["7V"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T"], - magnitude: ["7L12", "6L12", "5L15", "4L15", "3L16"], + irondefense: ["7T", "6T", "5T"], + magnitude: ["7L12", "7V", "6L12", "5L15", "4L15", "3L16"], megapunch: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L4", "6L4", "5L4", "4L4", "3L6"], naturalgift: ["4M"], naturepower: ["7M", "6M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L30", "6L22", "5L22", "4L25", "3L31"], - rockclimb: ["7E", "6E", "5E", "5D", "4M"], + rockclimb: ["7E", "6E", "5D", "5E", "4M"], rockpolish: ["7M", "7L6", "6M", "6L6", "5M", "5L8", "4M", "4L8"], rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rockthrow: ["7L16", "7V", "6L16", "5L11", "4L11", "3L11"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L18", "4T", "4L22", "3T", "3L26"], + rollout: ["7L10", "7V", "6L10", "5L18", "4T", "4L22", "3T", "3L26"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], selfdestruct: ["7L24", "7V", "6L24", "5L29", "4L18", "3T", "3L21"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L18", "6M", "6L18", "5M", "5L25"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7L28", "6T", "6L28", "5T", "5L36", "5D", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7L28", "6T", "6L28", "5D", "5T", "5L36", "4M"], stoneedge: ["7M", "7L42", "6M", "6L42", "5M", "5L50", "4M", "4L39"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wideguard: ["7E", "6E"], }}, geodudealola: {learnset: { attract: ["7M"], autotomize: ["7E"], - block: ["7E"], + block: ["7T", "7E"], brickbreak: ["7M"], brutalswing: ["7M"], bulldoze: ["7M"], @@ -10192,18 +8042,23 @@ exports.BattleLearnsets = { discharge: ["7L34"], doubleedge: ["7L40"], doubleteam: ["7M"], + earthpower: ["7T"], earthquake: ["7M"], + electroweb: ["7T"], endure: ["7E"], explosion: ["7M", "7L36"], facade: ["7M"], fireblast: ["7M"], + firepunch: ["7T"], flail: ["7E"], flamethrower: ["7M"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], gyroball: ["7M"], hiddenpower: ["7M"], - magnetrise: ["7E"], + irondefense: ["7T"], + magnetrise: ["7T", "7E"], naturepower: ["7M"], protect: ["7M"], rest: ["7M"], @@ -10221,99 +8076,105 @@ exports.BattleLearnsets = { selfdestruct: ["7L24"], sleeptalk: ["7M"], smackdown: ["7M", "7L18"], + snore: ["7T"], spark: ["7L12"], - stealthrock: ["7L28"], + stealthrock: ["7T", "7L28"], stoneedge: ["7M", "7L42"], substitute: ["7M"], sunnyday: ["7M"], + superpower: ["7T"], swagger: ["7M"], tackle: ["7L1"], thunder: ["7M"], thunderbolt: ["7M"], - thunderpunch: ["7L22"], + thunderpunch: ["7T", "7L22"], toxic: ["7M"], voltswitch: ["7M"], wideguard: ["7E"], }}, graveler: {learnset: { ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - block: ["6T", "5T", "4T"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "7L22", "6M", "6L22", "5M", "5L36"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L50", "7V", "6L50", "5L58", "4L44", "3T", "3L62"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L47", "4M", "4L33", "3M", "3L45"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L53", "4M", "4L38", "3T", "3L53"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "6M", "5M", "4M"], harden: ["7V"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T"], - magnitude: ["7L12", "6L12", "5L15", "4L15", "3L16"], + irondefense: ["7T", "6T", "5T"], + magnitude: ["7L12", "7V", "6L12", "5L15", "4L15", "3L16"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], naturalgift: ["4M"], naturepower: ["7M", "6M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L34", "6L22", "5L22", "4L27", "3L37"], rockclimb: ["4M"], rockpolish: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rockthrow: ["7L16", "7V", "6L16", "5L11", "4L11", "3L1"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L18", "4T", "4L22", "3T", "3L29"], + rollout: ["7L10", "7V", "6L10", "5L18", "4T", "4L22", "3T", "3L29"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], selfdestruct: ["7L24", "7V", "6L24", "5L31", "4L18", "3T", "3L21"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L18", "6M", "6L18", "5M", "5L27"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7L30", "6T", "6L30", "5T", "5L42", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7L30", "6T", "6L30", "5T", "5L42", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L54", "6M", "6L54", "5M", "5L64", "4M", "4L49"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], }}, graveleralola: {learnset: { + allyswitch: ["7T"], attract: ["7M"], + block: ["7T"], brickbreak: ["7M"], brutalswing: ["7M"], bulldoze: ["7M"], @@ -10324,15 +8185,21 @@ exports.BattleLearnsets = { discharge: ["7L40"], doubleedge: ["7L50"], doubleteam: ["7M"], + earthpower: ["7T"], earthquake: ["7M"], + electroweb: ["7T"], explosion: ["7M", "7L44"], facade: ["7M"], fireblast: ["7M"], + firepunch: ["7T"], flamethrower: ["7M"], fling: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], gyroball: ["7M"], hiddenpower: ["7M"], + irondefense: ["7T"], + magnetrise: ["7T"], naturepower: ["7M"], protect: ["7M"], rest: ["7M"], @@ -10346,109 +8213,117 @@ exports.BattleLearnsets = { round: ["7M"], sandstorm: ["7M"], selfdestruct: ["7L24"], + shockwave: ["7T"], sleeptalk: ["7M"], smackdown: ["7M", "7L18"], + snore: ["7T"], spark: ["7L12"], - stealthrock: ["7L30"], + stealthrock: ["7T", "7L30"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L54"], substitute: ["7M"], sunnyday: ["7M"], + superpower: ["7T"], swagger: ["7M"], tackle: ["7L1"], thunder: ["7M"], thunderbolt: ["7M"], - thunderpunch: ["7L22"], + thunderpunch: ["7T", "7L22"], toxic: ["7M"], voltswitch: ["7M"], }}, golem: {learnset: { ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - block: ["6T", "5T", "4T"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "7L22", "6M", "6L22", "5M", "5L36"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L50", "7V", "6L50", "5L58", "4L44", "3T", "3L62"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L47", "4M", "4L33", "3M", "3L45"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L53", "4M", "4L38", "3T", "3L53"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "6M", "5M", "4M"], harden: ["7V"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], heavyslam: ["7L60", "7L1", "6L1", "5L69"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T", "4T"], - magnitude: ["7L12", "6L12", "5L15", "4L15", "3L16"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T", "4T"], + magnitude: ["7L12", "7V", "6L12", "5L15", "4L15", "3L16"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], naturalgift: ["4M"], naturepower: ["7M", "6M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L34", "6L22", "5L22", "4L27", "3L37"], rockclimb: ["4M"], rockpolish: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rockthrow: ["7L16", "7V", "6L16", "5L11", "4L11", "3L1"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "4L22", "3T", "3L29"], + rollout: ["7V", "4T", "4L22", "3T", "3L29"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], selfdestruct: ["7L24", "7V", "6L24", "5L31", "4L18", "3T", "3L21"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L18", "6M", "6L18", "5M", "5L27"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7L30", "6T", "6L30", "5T", "5L42", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7L30", "6T", "6L30", "5T", "5L42", "4M"], steamroller: ["7L10", "6L10", "5L18"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L54", "6M", "6L54", "5M", "5L64", "4M", "4L49"], strength: ["7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], }}, golemalola: {learnset: { + allyswitch: ["7T"], attract: ["7M"], + block: ["7T"], brickbreak: ["7M"], brutalswing: ["7M"], bulldoze: ["7M"], @@ -10459,20 +8334,27 @@ exports.BattleLearnsets = { discharge: ["7L40"], doubleedge: ["7L50"], doubleteam: ["7M"], + earthpower: ["7T"], earthquake: ["7M"], echoedvoice: ["7M"], + electroweb: ["7T"], explosion: ["7M", "7L44"], facade: ["7M"], fireblast: ["7M"], + firepunch: ["7T"], flamethrower: ["7M"], fling: ["7M"], focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], gigaimpact: ["7M"], gyroball: ["7M"], heavyslam: ["7L60", "7L1"], hiddenpower: ["7M"], hyperbeam: ["7M"], + irondefense: ["7T"], + ironhead: ["7T"], + magnetrise: ["7T"], naturepower: ["7M"], protect: ["7M"], rest: ["7M"], @@ -10486,102 +8368,110 @@ exports.BattleLearnsets = { round: ["7M"], sandstorm: ["7M"], selfdestruct: ["7L24"], + shockwave: ["7T"], sleeptalk: ["7M"], smackdown: ["7M", "7L18"], + snore: ["7T"], spark: ["7L12"], - stealthrock: ["7L30"], + stealthrock: ["7T", "7L30"], steamroller: ["7L10"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L54"], substitute: ["7M"], sunnyday: ["7M"], + superpower: ["7T"], swagger: ["7M"], tackle: ["7L1"], thunder: ["7M"], thunderbolt: ["7M"], - thunderpunch: ["7L22"], + thunderpunch: ["7T", "7L22"], toxic: ["7M"], voltswitch: ["7M"], wildcharge: ["7M"], }}, ponyta: {learnset: { agility: ["7L37", "7V", "6L37", "5L37", "4L33", "3L38"], - allyswitch: ["7E", "6E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T", "7E", "6E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], - bounce: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L42", "3L45"], + bounce: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L42", "3L45"], captivate: ["7E", "6E", "5E", "4M"], - charm: ["7E", "6E", "5E", "4E", "3E"], + charm: ["7E", "7V", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], + curse: ["7V"], doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], - doublekick: ["7E", "6E", "5E", "4E", "3E"], + doublekick: ["7E", "7V", "6E", "5E", "4E", "3E"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], ember: ["7L9", "7V", "6L9", "5L9", "4L10", "3L14"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M", "3L53"], firespin: ["7L25", "7V", "6L25", "5L25", "4L24", "3L25"], flamecharge: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flamewheel: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L15", "4E", "3E"], + flamewheel: ["7L13", "7E", "7V", "6L13", "6E", "5L13", "5E", "4L15", "4E", "3E"], flareblitz: ["7L49", "6L49", "5L49", "4L46"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L5"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "5D", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5D", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + highhorsepower: ["7E"], horndrill: ["7E", "7V", "6E", "5E", "4E"], - hypnosis: ["7E", "6E", "5E", "4E", "3E"], + hypnosis: ["7E", "7V", "6E", "5E", "4E", "3E"], incinerate: ["6M", "5M"], inferno: ["7L33", "6L33", "5L33"], - irontail: ["6T", "5T", "4M", "3M"], - lowkick: ["7E", "6T", "6E", "5T", "5E"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E"], mimic: ["7V", "3T"], morningsun: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7V", "3L1"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], stomp: ["7L17", "7V", "6L17", "5L17", "4L19", "3L19"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + tackle: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], tailwhip: ["7L4", "7V", "6L4", "5L4", "4L6", "3L9"], takedown: ["7L29", "7V", "6L29", "5L29", "4L28", "3L31"], - thrash: ["7E", "6E", "5E", "5D", "4E", "3E"], + thrash: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], }}, rapidash: {learnset: { agility: ["7L37", "7V", "6L37", "5L37", "4L33", "3L38"], - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], bide: ["7V"], bodyslam: ["7V", "3T"], - bounce: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L47", "3L50"], + bounce: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L47", "3L50"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], doubleedge: ["7V", "3T"], doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], ember: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M", "3L63"], firespin: ["7L25", "7V", "6L25", "5L25", "4L24", "3L25"], @@ -10589,60 +8479,61 @@ exports.BattleLearnsets = { flamethrower: ["7M", "6M", "5M", "4M", "3M", "3S0"], flamewheel: ["7L13", "6L13", "5L13", "4L15"], flareblitz: ["7L49", "6L49", "5L49", "4L56"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L1", "6L40", "5L40", "4L40", "3L40"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L1", "7V", "6L40", "5L40", "4L40", "3L40"], gigaimpact: ["7M", "6M", "5M", "4M"], growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], horndrill: ["7V"], hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], inferno: ["7L33", "6L33", "5L33"], - irontail: ["6T", "5T", "4M", "3M"], - lowkick: ["6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lowkick: ["7T", "6T", "5T"], megahorn: ["7L1", "6L1", "5L1", "4L1"], mimic: ["7V", "3T"], naturalgift: ["4M"], overheat: ["7M", "6M", "5M", "4M", "3M"], poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], rage: ["7V"], reflect: ["7V"], rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M", "3S0"], stomp: ["7L17", "7V", "6L17", "5L17", "4L19", "3L19"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swift: ["7V", "4T", "3T"], - tackle: ["3L1"], + tackle: ["7V", "3L1"], tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7L29", "7V", "6L29", "5L29", "4L28", "3L31"], + throatchop: ["7T"], toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], }}, slowpoke: {learnset: { - afteryou: ["6T", "5T"], + afteryou: ["7T", "6T", "5T"], amnesia: ["7L41", "7V", "6L41", "5L41", "4L43", "3L36"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7E", "6E"], - bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bellydrum: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - block: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + block: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], bodyslam: ["7V", "3T"], brine: ["5D", "4M"], bubblebeam: ["7V"], @@ -10650,98 +8541,99 @@ exports.BattleLearnsets = { calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L14", "7V", "6L14", "5L14", "5S2", "4L15", "3L17", "3S0"], - curse: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], - dig: ["7V", "6M", "5M", "4M", "3M"], - disable: ["7L19", "7V", "6L19", "5L19", "5S2", "4L20", "3L24", "3S0"], + confusion: ["7L14", "7V", "7V", "6L14", "5L14", "5S2", "4L15", "3L17", "3S0"], + curse: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "7V", "6L19", "5L19", "5S2", "4L20", "3L24", "3S0"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L5", "7V", "6L5", "5L5", "4L6", "3L6", "3S1"], + growl: ["7L5", "7V", "7V", "6L5", "5L5", "4L6", "3L6", "3S1"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["7L23", "7V", "6L23", "5L23", "5S2", "4T", "4L25", "3L29", "3S0"], + headbutt: ["7L23", "7V", "7V", "6L23", "5L23", "5S2", "4T", "4L25", "3L29", "3S0"], healpulse: ["7L58", "6L58", "5L58"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], mefirst: ["7E", "6E", "5E", "4E"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payday: ["7V"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L48", "3M", "3L40"], - psychup: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L57", "3T", "3L47"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L45", "7V", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L48", "3M", "3L40"], + psychup: ["7M", "7L54", "7V", "6M", "6L54", "5M", "5L54", "4M", "4L57", "3T", "3L47"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L53", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L53", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], + safeguard: ["7M", "7V", "6M", "5M", "4M", "4E", "3M", "3E"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], slackoff: ["7L36", "6L36", "5L36", "4L39"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - stomp: ["7E", "6E", "5E", "4E", "3E"], - strength: ["7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + stomp: ["7E", "7V", "6E", "5E", "4E", "3E"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - watergun: ["7L9", "7V", "6L9", "5L9", "4L11", "3L13", "3S0"], - waterpulse: ["7L28", "6T", "6L28", "5L28", "5S2", "4M", "4L29", "3M"], + watergun: ["7L9", "7V", "7V", "6L9", "5L9", "4L11", "3L13", "3S0"], + waterpulse: ["7T", "7L28", "6T", "6L28", "5L28", "5S2", "4M", "4L29", "3M"], whirlpool: ["4M"], - wonderroom: ["7E", "6T", "6E", "5T", "5E"], - yawn: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], - zenheadbutt: ["7L32", "7E", "6T", "6L32", "6E", "5T", "5L32", "5E", "4T", "4L34", "4E"], + wonderroom: ["7T", "7E", "6T", "6E", "5T", "5E"], + yawn: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1", "3S1"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L32", "7E", "6T", "6L32", "6E", "5T", "5L32", "5E", "4T", "4L34", "4E"], }}, slowbro: {learnset: { aerialace: ["7M", "6M", "5M"], - afteryou: ["6T", "5T"], - amnesia: ["7L43", "7V", "6L43", "5L43", "4L47", "3L36"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L43", "7V", "7V", "6L43", "5L43", "4L47", "3L36"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brine: ["4M"], @@ -10750,109 +8642,111 @@ exports.BattleLearnsets = { calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L14", "7V", "6L14", "5L14", "4L15", "3L17"], + confusion: ["7L14", "7V", "7V", "6L14", "5L14", "4L15", "3L17"], counter: ["7V", "3T"], - curse: ["7L1", "6L1", "5L1", "4L1", "3L1"], - dig: ["7V", "6M", "5M", "4M", "3M"], - disable: ["7L19", "7V", "6L19", "5L19", "4L20", "3L24"], + curse: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "7V", "6L19", "5L19", "4L20", "3L24"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + growl: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["7L23", "7V", "6L23", "5L23", "4T", "4L25", "3L29"], + headbutt: ["7L23", "7V", "7V", "6L23", "5L23", "4T", "4L25", "3L29"], healpulse: ["7L68", "7L1", "6L1", "5L68"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - irontail: ["6T", "6S0", "5T", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "6S0", "5T", "4M", "3M"], lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payday: ["7V"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L54", "3M", "3L44"], - psychup: ["7M", "7L62", "6M", "6L62", "5M", "5L62", "4M", "4L67", "3T", "3L55"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L49", "7V", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L54", "3M", "3L44"], + psychup: ["7M", "7L62", "7V", "6M", "6L62", "5M", "5L62", "4M", "4L67", "3T", "3L55"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "7L55", "6M", "6L55", "5M", "5L55", "4M", "4L61", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L61", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "6S0", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], slackoff: ["7L36", "6L36", "6S0", "5L36", "4L41"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "6S0", "5M", "4M"], - watergun: ["7L9", "7V", "6L9", "5L9", "4L11", "3L13"], - waterpulse: ["7L28", "6T", "6L28", "5L28", "4M", "4L29", "3M"], + watergun: ["7L9", "7V", "7V", "6L9", "5L9", "4L11", "3L13"], + waterpulse: ["7T", "7L28", "6T", "6L28", "5L28", "4M", "4L29", "3M"], whirlpool: ["4M"], - withdraw: ["7L1", "7V", "6L37", "5L37", "4L37", "3L37"], - wonderroom: ["6T", "5T"], + withdraw: ["7L1", "7V", "7V", "6L37", "5L37", "4L37", "3L37"], + wonderroom: ["7T", "6T", "5T"], yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], - zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32", "4T", "4L34"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L32", "6T", "6L32", "5T", "5L32", "4T", "4L34"], }}, slowking: {learnset: { - afteryou: ["6T", "5T"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brine: ["4M"], @@ -10860,228 +8754,233 @@ exports.BattleLearnsets = { calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L14", "6L14", "5L14", "4L15", "3L17"], + confusion: ["7L14", "7V", "6L14", "5L14", "4L15", "3L17"], counter: ["3T"], - curse: ["7L1", "6L1", "5L1", "4L1", "3L1"], - dig: ["6M", "5M", "4M", "3M"], - disable: ["7L19", "6L19", "5L19", "4L20", "3L24"], + curse: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + dig: ["7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "6L19", "5L19", "4L20", "3L24"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragontail: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L5", "6L5", "5L5", "4L6", "3L6"], + growl: ["7L5", "7V", "6L5", "5L5", "4L6", "3L6"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["7L23", "6L23", "5L23", "4T", "4L25", "3L29"], + headbutt: ["7L23", "7V", "6L23", "5L23", "4T", "4L25", "3L29"], healpulse: ["7L58", "7L1", "6L1", "5L58"], - hiddenpower: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L36", "6L36", "5L36", "4L39"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], powergem: ["7L1", "6L1", "5L1", "4L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L48", "3M", "3L40"], - psychup: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L57", "3T", "3L47"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L48", "3M", "3L40"], + psychup: ["7M", "7L54", "7V", "6M", "6L54", "5M", "5L54", "4M", "4L57", "3T", "3L47"], psyshock: ["7M", "6M", "5M"], quash: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L43", "3T", "3L36"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - telekinesis: ["5M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L43", "3T", "3L36"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + telekinesis: ["7T", "5M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], trumpcard: ["7L49", "6L49", "5L49", "4L53"], - watergun: ["7L9", "6L9", "5L9", "4L11", "3L13"], - waterpulse: ["7L28", "6T", "6L28", "5L28", "4M", "4L29", "3M"], - whirlpool: ["4M"], - wonderroom: ["6T", "5T"], + watergun: ["7L9", "7V", "6L9", "5L9", "4L11", "3L13"], + waterpulse: ["7T", "7L28", "6T", "6L28", "5L28", "4M", "4L29", "3M"], + whirlpool: ["7V", "4M"], + wonderroom: ["7T", "6T", "5T"], yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], - zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32", "4T", "4L34"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L32", "6T", "6L32", "5T", "5L32", "4T", "4L34"], }}, magnemite: {learnset: { bide: ["7V"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], + curse: ["7V"], discharge: ["7L37", "6L37", "5L43", "4L38"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], electroball: ["7L29", "6L29", "5L27"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "7L31", "6M", "6L31", "5M", "5L35", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gravity: ["6T", "5T", "5D", "4T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gravity: ["7T", "6T", "5D", "5T", "4T"], gyroball: ["7M", "7L47", "6M", "6L47", "5M", "5L54", "4M", "4L49"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irondefense: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "7L13", "6M", "5M", "4M"], - lockon: ["7L41", "6L41", "5L30", "4L27", "3L32"], - magiccoat: ["6T", "5T", "4T"], - magnetbomb: ["7L7", "6L17", "5L33", "4L30"], - magnetrise: ["7L43", "6T", "6L43", "5T", "5L49", "4T", "4L46"], - metalsound: ["7L25", "6L25", "5L1", "5D", "4L1", "3L1"], + lockon: ["7L41", "7V", "6L41", "5L30", "4L27", "3L32"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetbomb: ["7L11", "7L7", "6L17", "5L33", "4L30"], + magnetrise: ["7T", "7L43", "6T", "6L43", "5T", "5L49", "4T", "4L46"], + metalsound: ["7L25", "6L25", "5D", "5L1", "4L1", "3L1"], mimic: ["7V", "3T"], mirrorshot: ["7L23", "6L23", "5L46", "4L43"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "5D", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5D", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L35", "7V", "6L35", "5L38", "4L33", "3L44"], + screech: ["7L35", "7V", "7V", "6L35", "5L38", "4L33", "3L44"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - sonicboom: ["7L17", "7V", "6L11", "5L14", "4L14", "3L16"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + sonicboom: ["7L17", "7V", "7V", "6L11", "5L14", "4L14", "3L16"], spark: ["7L19", "6L19", "5L22", "4L22", "3L26"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L1", "7V", "6L4", "5L11", "4L11", "3L11"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T", "3L38"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + supersonic: ["7L1", "7V", "7V", "6L4", "5L11", "4L11", "3L11"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T", "3L38"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], teleport: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thundershock: ["7L5", "7V", "6L7", "5L6", "5D", "4L6", "3L6"], - thunderwave: ["7M", "7L11", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["7L5", "7V", "7V", "6L7", "5D", "5L6", "4L6", "3L6"], + thunderwave: ["7M", "7L11", "7L7", "7V", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L49", "6L49", "5L59", "4L54", "3L50"], + zapcannon: ["7L49", "7V", "6L49", "5L59", "4L54", "3L50"], }}, magneton: {learnset: { bide: ["7V"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], + curse: ["7V"], discharge: ["7L43", "6L43", "5L46", "4L40"], doubleedge: ["7V", "3T", "3S0"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], electricterrain: ["7L1", "6L1"], electroball: ["7L29", "6L29", "5L27"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "7L33", "6M", "6L33", "5M", "5L39", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "7L59", "6M", "6L59", "5M", "5L60", "4M", "4L54"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - irondefense: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "7L13", "6M", "5M", "4M"], - lockon: ["7L49", "6L49", "5L30", "4L27", "3L35"], - magiccoat: ["6T", "5T", "4T"], - magnetbomb: ["7L7", "7L1", "6L17", "5L34", "4L30"], - magnetrise: ["7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], + lockon: ["7L49", "7V", "6L49", "5L30", "4L27", "3L35"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetbomb: ["7L11", "7L7", "7L1", "6L17", "5L34", "4L30"], + magnetrise: ["7T", "7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], metalsound: ["7L25", "6L25", "5L1", "4L1", "3L1"], mimic: ["7V", "3T"], mirrorshot: ["7L23", "6L23", "5L50", "4L46"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], refresh: ["3S0"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L39", "7V", "6L39", "5L40", "4L34", "3L53"], + screech: ["7L39", "7V", "7V", "6L39", "5L40", "4L34", "3L53"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - sonicboom: ["7L17", "7V", "6L1", "5L14", "4L14", "3L16"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + sonicboom: ["7L17", "7V", "7V", "6L1", "5L14", "4L14", "3L16"], spark: ["7L19", "6L19", "5L22", "4L22", "3L26"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + supersonic: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], teleport: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S0"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thundershock: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - thunderwave: ["7M", "7L11", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - triattack: ["7L1", "6L1", "5L1", "4L1", "3L44"], + thundershock: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L11", "7L7", "7L1", "7V", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L44"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L63", "7L1", "6L1", "5L66", "4L60", "3L62"], + zapcannon: ["7L63", "7L1", "7V", "6L1", "5L66", "4L60", "3L62"], }}, magnezone: {learnset: { + allyswitch: ["7T"], barrier: ["7L1", "6L1", "5L1", "4L1"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], @@ -11089,7 +8988,7 @@ exports.BattleLearnsets = { doubleteam: ["7M", "6M", "5M", "4M"], electricterrain: ["7L1", "6L1"], electroball: ["7L29", "6L29", "5L27"], - electroweb: ["6T", "5T"], + electroweb: ["7T", "6T", "5T"], endure: ["4M"], explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], @@ -11097,18 +8996,18 @@ exports.BattleLearnsets = { flashcannon: ["7M", "7L33", "6M", "6L33", "5M", "5L39", "4M"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "7L59", "6M", "6L59", "5M", "5L60", "4M", "4L54"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "7L13", "6M", "5M", "4M"], lockon: ["7L49", "6L49", "5L30", "4L27"], - magiccoat: ["6T", "5T", "4T"], - magnetbomb: ["7L7", "7L1", "6L17", "5L34", "4L30"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetbomb: ["7L11", "7L7", "7L1", "6L17", "5L34", "4L30"], magneticflux: ["7L1", "6L1"], - magnetrise: ["7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], + magnetrise: ["7T", "7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], metalsound: ["7L25", "6L25", "5L1", "4L1"], mirrorcoat: ["7L1", "6L1", "5L1", "4L1"], mirrorshot: ["7L23", "6L23", "5L50", "4L46"], @@ -11116,7 +9015,7 @@ exports.BattleLearnsets = { protect: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], @@ -11124,10 +9023,10 @@ exports.BattleLearnsets = { round: ["7M", "6M", "5M"], screech: ["7L39", "6L39", "5L40", "4L34"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], sonicboom: ["7L17", "6L1", "5L14", "4L14"], spark: ["7L19", "6L19", "5L22", "4L22"], substitute: ["7M", "6M", "5M", "4M"], @@ -11139,7 +9038,7 @@ exports.BattleLearnsets = { thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], thundershock: ["7L5", "7L1", "6L1", "5L1", "4L1"], - thunderwave: ["7M", "7L11", "6M", "6L13", "5M", "5L17", "4M", "4L17"], + thunderwave: ["7M", "7L11", "7L7", "7L1", "6M", "6L13", "5M", "5L17", "4M", "4L17"], toxic: ["7M", "6M", "5M", "4M"], triattack: ["7L1"], voltswitch: ["7M", "6M", "5M"], @@ -11149,10 +9048,10 @@ exports.BattleLearnsets = { farfetchd: {learnset: { acrobatics: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], aerialace: ["7M", "7L9", "6M", "6L9", "5M", "5L13", "4M", "4L13", "3M", "3S0"], - agility: ["7L31", "7V", "6L31", "5L31", "4L31", "3L36"], + agility: ["7L31", "7V", "7V", "6L31", "5L31", "4L31", "3L36"], aircutter: ["7L21", "6L21", "5L21", "4T", "4L21"], airslash: ["7L49", "6L49", "5L49", "4L37"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], bide: ["7V"], bodyslam: ["7V", "3T"], @@ -11160,75 +9059,80 @@ exports.BattleLearnsets = { brutalswing: ["7M"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E", "4E"], - curse: ["7E", "6E", "5E", "4E", "3E"], - cut: ["7V", "6M", "5M", "4M", "3M"], - defog: ["4M"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L43", "3L46"], + falseswipe: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L43", "3L46"], featherdance: ["7E", "6E", "5E", "4E", "3E"], feint: ["7L43", "6L43", "5L43", "4L43"], - flail: ["7E", "6E", "5E", "4E", "3E"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L7", "7V", "6L7", "5L7", "4L7", "3L16"], - furycutter: ["7L1", "6L1", "5L1", "5D", "4T", "4L1", "3L26"], - gust: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["7L13", "6T", "6L13", "5T", "5L9", "4T", "4L9", "3L21"], - lastresort: ["6T", "5T", "4T"], - leafblade: ["7E", "6E", "5E", "5D", "4E"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L11"], + finalgambit: ["7E"], + firstimpression: ["7E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L7", "7V", "7V", "6L7", "5L7", "4L7", "3L16"], + furycutter: ["7L1", "6L1", "5D", "5L1", "4T", "4L1", "3L26"], + gust: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "7L13", "6T", "6L13", "5T", "5L9", "4T", "4L9", "3L21"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + leafblade: ["7E", "6E", "5D", "5E", "4E"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L11"], mimic: ["7V", "3T"], - mirrormove: ["7E", "6E", "5E", "4E", "3E"], - mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + mirrormove: ["7E", "7V", "6E", "5E", "4E", "3E"], + mudslap: ["7E", "7V", "6E", "5E", "4T", "4E", "3T"], naturalgift: ["4M"], nightslash: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4L33", "4E"], ominouswind: ["4T"], - peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + peck: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], pluck: ["5M", "4M"], poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + quickattack: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], razorwind: ["7V"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7E", "6E", "5E"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], + roost: ["7M", "7E", "6M", "6E", "5D", "5T", "5E", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L6"], + sandattack: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L6"], secretpower: ["6M", "4M", "3M"], simplebeam: ["7E", "6E"], skullbash: ["7V"], - skyattack: ["6T", "5T"], - slash: ["7L19", "7V", "6L19", "5L19", "4L19", "3L41", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "4E", "3M", "3E"], + skyattack: ["7T", "6T", "5T"], + slash: ["7L19", "7V", "7V", "6L19", "5L19", "4L19", "3L41", "3S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5E", "4M", "4E", "3M", "3E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - swordsdance: ["7M", "7L25", "7V", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L31", "3S0"], - tailwind: ["6T", "5T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + swordsdance: ["7M", "7L25", "7V", "7V", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L31", "3S0"], + tailwind: ["7T", "6T", "5T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], trumpcard: ["7E", "6E", "5E"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7V"], wish: ["3S0"], @@ -11238,355 +9142,363 @@ exports.BattleLearnsets = { doduo: {learnset: { acupressure: ["7L33", "6L28", "5L28", "4L28"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L26", "7V", "6L33", "5L37", "4L37", "3L45"], + agility: ["7L26", "7V", "7V", "6L33", "5L37", "4L37", "3L45"], aircutter: ["4T"], assurance: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], bravebird: ["7E", "6E", "5E", "4E"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], doubleedge: ["7V", "3T"], doublehit: ["7L22", "6L25", "5L32", "4L32"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillpeck: ["7L43", "7V", "6L37", "5L41", "4L41", "3L37"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L43", "7V", "7V", "6L37", "5L41", "4L41", "3L37"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L47", "7E", "6T", "6L45", "6E", "5T", "5L46", "5E", "4T", "4L46", "4E", "3E"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - flail: ["7E", "6E", "5E", "5D", "4E", "3E"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L12", "7V", "6L13", "5L14", "4L14", "3L13"], - growl: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - haze: ["7E", "6E", "5E", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "7L47", "7E", "6T", "6L45", "6E", "5T", "5L46", "5E", "4T", "4L46", "4E", "3E"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L12", "7V", "7V", "6L13", "5L14", "4L14", "3L13"], + growl: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], jumpkick: ["7L40"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], mirrormove: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], - peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + peck: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], pluck: ["7L19", "6L21", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L15", "6L17", "5L19", "4L19", "3L9"], - quickattack: ["7L5", "7E", "6L5", "6E", "5L5", "5E", "4L5", "4E", "3E"], - rage: ["7L8", "7V", "6L9", "5L10", "4L10", "3L25"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L15", "7V", "6L17", "5L19", "4L19", "3L9"], + quickattack: ["7L5", "7E", "7V", "6L5", "6E", "5L5", "5E", "4L5", "4E", "3E"], + rage: ["7L8", "7V", "7V", "6L9", "5L10", "4L10", "3L25"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "5D", "4M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5D", "5T", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], skyattack: ["7V", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7L36"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7L50", "6L49", "5L50"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - triattack: ["7V", "3L21"], - uproar: ["7L29", "6T", "6L23", "5T", "5L23", "4T", "4L23", "3L33"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V", "7V", "3L21"], + uproar: ["7T", "7L29", "6T", "6L23", "5T", "5L23", "4T", "4L23", "3L33"], whirlwind: ["7V"], workup: ["7M", "5M"], }}, dodrio: {learnset: { acupressure: ["7L34", "6L28", "5L28", "4L28"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L26", "7V", "6L35", "5L41", "4L41", "3L60", "3S0"], + agility: ["7L26", "7V", "7V", "6L35", "5L41", "4L41", "3L60", "3S0"], aircutter: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], bide: ["7V"], bodyslam: ["7V", "3T"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], doubleedge: ["7V", "3T"], doublehit: ["7L22"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillpeck: ["7L47", "7V", "6L41", "5L47", "4L47", "3L47", "3S0"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L47", "7V", "7V", "6L41", "5L47", "4L47", "3L47", "3S0"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L52", "6T", "6L53", "5T", "5L54", "4T", "4L54"], - endure: ["4M", "3T"], + endeavor: ["7T", "7L52", "6T", "6L53", "5T", "5L54", "4T", "4L54"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L12", "7V", "6L13", "5L14", "4L14", "3L1"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L12", "7V", "7V", "6L13", "5L14", "4L14", "3L1"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], jumpkick: ["7L43"], - knockoff: ["6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], - peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + peck: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], pluck: ["7L19", "6L1", "5M", "5L1", "4M", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L15", "6L17", "5L19", "4L19", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L15", "7V", "6L17", "5L19", "4L19", "3L1"], quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], - rage: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L25"], + rage: ["7L8", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L25"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - skyattack: ["7V", "6T", "5T", "4T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + skyattack: ["7T", "7V", "6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], + stompingtantrum: ["7T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7L38"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7L56", "6L59", "5L60"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - triattack: ["7L1", "7V", "6L25", "5L34", "4L34", "3L21", "3S0"], - uproar: ["7L29", "6T", "6L23", "5T", "5L23", "4T", "4L23", "3L38"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L1", "7V", "7V", "6L25", "5L34", "4L34", "3L21", "3S0"], + uproar: ["7T", "7L29", "6T", "6L23", "5T", "5L23", "4T", "4L23", "3L38"], whirlwind: ["7V"], workup: ["7M", "5M"], }}, seel: {learnset: { aquajet: ["7L31", "6L31", "5L31", "4L31"], aquaring: ["7L23", "6L23", "5L23", "4L23"], - aquatail: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L27", "7V", "6L27", "5L27", "4L27", "3L21"], + aquatail: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L27", "7V", "7V", "6L27", "5L27", "4L27", "3L21"], belch: ["7E", "6E"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brine: ["7L33", "6L33", "5L33", "4M", "4L33"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - disable: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7V"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], dive: ["7L41", "6M", "6L41", "5M", "5L41", "4T", "4L41", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3E"], - endure: ["4M", "3T"], + encore: ["7L13", "7E", "7V", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3E"], + endure: ["7V", "4M", "3T"], entrainment: ["7E", "6E"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["7E", "6E", "5E", "4E", "3E"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L3", "7V", "6L3", "5L3", "4L3", "3L9"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L3", "7V", "7V", "6L3", "5L3", "4L3", "3L9"], hail: ["7M", "7L53", "6M", "6L53", "5M", "5L53", "4M", "3M"], - headbutt: ["7L1", "7V", "6L1", "5L1", "5D", "4T", "4L1", "3L1"], + headbutt: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4T", "4L1", "3L1"], helpinghand: ["3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], horndrill: ["7E", "7V", "6E", "5E", "4E", "3E"], - icebeam: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L41", "3S0"], + icebeam: ["7M", "7L47", "7V", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L41", "3S0"], iceshard: ["7L17", "6L17", "5L17", "4L17"], - iciclespear: ["7E", "6E", "5E", "5D", "4E", "3E"], - icywind: ["7L11", "6T", "6L11", "5T", "5L11", "4T", "4L11", "3T", "3L17"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - lick: ["7E", "6E", "5E", "4E", "3E"], + iciclespear: ["7E", "6E", "5D", "5E", "4E", "3E"], + icywind: ["7T", "7L11", "7V", "6T", "6L11", "5T", "5L11", "4T", "4L11", "3T", "3L17"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + lick: ["7E", "7V", "6E", "5E", "4E", "3E"], mimic: ["7V", "3T"], naturalgift: ["4M"], payday: ["7V"], - perishsong: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7V"], + perishsong: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L21", "7V", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3M", "3L29"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L21", "7V", "7V", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3M", "3L29"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L51", "6M", "6L51", "5M", "5L51", "4M", "4L51", "3M", "3L49", "3S0"], + safeguard: ["7M", "7L51", "7V", "6M", "6L51", "5M", "5L51", "4M", "4L51", "3M", "3L49", "3S0"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], skullbash: ["7V"], - slam: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "3T"], + slam: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5D", "5T", "5E", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spitup: ["7E", "6E", "5E", "4E"], stockpile: ["7E", "6E", "5E", "4E"], strength: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S0"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7E", "6E", "5E", "4E"], - takedown: ["7L37", "7V", "6L37", "5L37", "4L37", "3L37"], + takedown: ["7L37", "7V", "7V", "6L37", "5L37", "4L37", "3L37"], thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], watersport: ["7L7", "6L7", "5L7", "4L7"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], }}, dewgong: {learnset: { aquajet: ["7L31", "6L31", "5L31", "4L31"], aquaring: ["7L23", "6L23", "5L23", "4L23"], - aquatail: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L43"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L27", "7V", "6L27", "5L27", "4L27", "3L1"], + aquatail: ["7T", "7L49", "6T", "6L49", "5T", "5L49", "4T", "4L43"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L27", "7V", "7V", "6L27", "5L27", "4L27", "3L1"], avalanche: ["4M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brine: ["7L33", "6L33", "5L33", "4M", "4L33"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["7L45", "6M", "6L45", "5M", "5L45", "4T", "4L41", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], encore: ["7L13", "6L13", "5L13", "4L13"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + growl: ["7L3", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], hail: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "4M", "3M"], - headbutt: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7L1", "7V", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], horndrill: ["7V"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L47", "3M", "3L51"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7L55", "7V", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L47", "3M", "3L51"], iceshard: ["7L17", "6L17", "5L17", "4L17"], - icywind: ["7L11", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], - irontail: ["6T", "5T"], + icywind: ["7T", "7L11", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + irontail: ["7T", "6T", "5T"], + liquidation: ["7T"], mimic: ["7V", "3T"], naturalgift: ["4M"], payday: ["7V"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L21", "7V", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3M", "3L29"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L21", "7V", "7V", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3M", "3L29"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "4M", "4L51", "3M", "3L64"], + safeguard: ["7M", "7L61", "7V", "6M", "6L61", "5M", "5L61", "4M", "4L51", "3M", "3L64"], secretpower: ["6M", "4M", "3M"], sheercold: ["7L1", "6L34", "5L34", "4L34", "3L34"], - signalbeam: ["7L7", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + signalbeam: ["7T", "7L7", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - takedown: ["7L39", "7V", "6L39", "5L39", "4L37", "3L42"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7L39", "7V", "7V", "6L39", "5L39", "4L37", "3L42"], thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], }}, grimer: {learnset: { - acidarmor: ["7L43", "7V", "6L40", "5L39", "4L39", "3L34"], + acidarmor: ["7L43", "7V", "7V", "6L40", "5L39", "4L39", "3L34"], acidspray: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7L46", "6L46"], bide: ["7V"], bodyslam: ["7V", "3T"], captivate: ["4M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7L12", "7V", "6L12", "5L12", "4L12", "3L8"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + disable: ["7L12", "7V", "7V", "6L12", "5L12", "4L12", "3L8"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "7L26", "6M", "6L26", "5M", "5L28", "4M", "4L28"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], - gunkshot: ["7L40", "6T", "6L40", "5T", "5L49", "4T", "4L44"], - harden: ["7L4", "7V", "6L4", "5L4", "4L4", "3L4"], - haze: ["7E", "6E", "5E", "5D", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + gunkshot: ["7T", "7L40", "6T", "6L40", "5T", "5L49", "4T", "4L44"], + harden: ["7L4", "7V", "7V", "6L4", "5L4", "4L4", "3L4"], + haze: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], helpinghand: ["3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], imprison: ["7E", "6E", "5E", "4E", "3E"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], - lick: ["7E", "6E", "5E", "4E", "3E"], - meanlook: ["7E", "6E", "5E", "4E", "3E"], + lick: ["7E", "7V", "6E", "5E", "4E", "3E"], + meanlook: ["7E", "7V", "6E", "5E", "4E", "3E"], megadrain: ["7V"], memento: ["7L48", "6L48", "5L52", "4L49", "3L53"], mimic: ["7V", "3T"], - minimize: ["7L21", "7V", "6L18", "5L17", "4L17", "3L19", "3S0"], + minimize: ["7L21", "7V", "7V", "6L18", "5L17", "4L17", "3L19", "3S0"], mudbomb: ["7L18", "6L18", "5L23", "4L23"], - mudslap: ["7L7", "6L7", "5L7", "4T", "4L7", "3T"], + mudslap: ["7L7", "7V", "6L7", "5L7", "4T", "4L7", "3T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], - poisongas: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + poisongas: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], poisonjab: ["7M", "6M", "5M", "4M"], - pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + pound: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scaryface: ["7E", "6E", "5E"], - screech: ["7L37", "7V", "6L32", "5L33", "4L33", "3L26"], + screech: ["7L37", "7V", "7V", "6L32", "5L33", "4L33", "3L26"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], shadowball: ["7M", "6M", "5M", "4M"], shadowpunch: ["7E", "6E", "5E", "4E", "3E", "3S0"], - shadowsneak: ["7E", "6E", "5E", "5D", "4E"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7L15", "7V", "6L15", "5L20", "4L20", "3L13"], - sludgebomb: ["7M", "7L29", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L43", "3S0"], + shadowsneak: ["7E", "6E", "5D", "5E", "4E"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludge: ["7L15", "7V", "7V", "6L15", "5L20", "4L20", "3L13"], + sludgebomb: ["7M", "7L29", "7V", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L43", "3S0"], sludgewave: ["7M", "7L32", "6M", "6L32", "5M", "5L44"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spitup: ["7E", "6E", "5E", "4E"], stockpile: ["7E", "6E", "5E", "4E"], strength: ["6M", "5M", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7E", "6E", "5E", "4E"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], venoshock: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, grimeralola: {learnset: { acidarmor: ["7L43"], @@ -11606,23 +9518,29 @@ exports.BattleLearnsets = { explosion: ["7M"], facade: ["7M"], fireblast: ["7M"], + firepunch: ["7T"], flamethrower: ["7M"], fling: ["7M", "7L26"], frustration: ["7M"], - gunkshot: ["7L40"], + gastroacid: ["7T"], + gigadrain: ["7T"], + gunkshot: ["7T", "7L40"], harden: ["7L4", "7S0"], hiddenpower: ["7M"], + icepunch: ["7T"], imprison: ["7E"], infestation: ["7M"], - knockoff: ["7L29"], + knockoff: ["7T", "7L29"], meanlook: ["7E"], memento: ["7L48"], minimize: ["7L21"], + painsplit: ["7T"], payback: ["7M"], poisonfang: ["7L18"], poisongas: ["7L1", "7S0"], poisonjab: ["7M"], pound: ["7L1", "7S0"], + poweruppunch: ["7E"], protect: ["7M"], pursuit: ["7E"], quash: ["7M"], @@ -11637,11 +9555,13 @@ exports.BattleLearnsets = { screech: ["7L37"], shadowball: ["7M"], shadowsneak: ["7E"], + shockwave: ["7T"], sleeptalk: ["7M"], sludgebomb: ["7M"], sludgewave: ["7M"], snarl: ["7M"], - spite: ["7E"], + snore: ["7T"], + spite: ["7T", "7E"], spitup: ["7E"], stockpile: ["7E"], stoneedge: ["7M"], @@ -11651,89 +9571,92 @@ exports.BattleLearnsets = { swallow: ["7E"], taunt: ["7M"], thief: ["7M"], + thunderpunch: ["7T"], torment: ["7M"], toxic: ["7M"], venoshock: ["7M"], }}, muk: {learnset: { - acidarmor: ["7L46", "7V", "6L43", "5L42", "4L44", "3L34"], - attract: ["7M", "6M", "5M", "4M", "3M"], + acidarmor: ["7L46", "7V", "7V", "6L43", "5L42", "4L44", "3L34"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7L52", "6L52"], bide: ["7V"], - block: ["6T", "5T", "4T"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], darkpulse: ["7M", "6M", "5T", "4M"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7L12", "7V", "6L12", "5L12", "4L12", "3L8"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + disable: ["7L12", "7V", "7V", "6L12", "5L12", "4L12", "3L8"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "7L26", "6M", "6L26", "5M", "5L28", "4M", "4L28"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["7L40", "6T", "6L40", "5T", "5L58", "4T", "4L54"], - harden: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], + gunkshot: ["7T", "7L40", "6T", "6L40", "5T", "5L58", "4T", "4L54"], + harden: ["7L4", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], megadrain: ["7V"], memento: ["7L57", "6L57", "5L64", "4L65", "3L61"], mimic: ["7V", "3T"], - minimize: ["7L21", "7V", "6L18", "5L17", "4L17", "3L19"], + minimize: ["7L21", "7V", "7V", "6L18", "5L17", "4L17", "3L19"], mudbomb: ["7L18", "6L18", "5L23", "4L23"], - mudslap: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3T"], + mudslap: ["7L7", "7L1", "7V", "6L1", "5L1", "4T", "4L1", "3T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], - poisongas: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poisongas: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], poisonjab: ["7M", "6M", "5M", "4M"], - pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + pound: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7L37", "7V", "6L32", "5L33", "4L33", "3L26"], + screech: ["7L37", "7V", "7V", "6L32", "5L33", "4L33", "3L26"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7L15", "7V", "6L15", "5L20", "4L20", "3L13"], - sludgebomb: ["7M", "7L29", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L47"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludge: ["7L15", "7V", "7V", "6L15", "5L20", "4L20", "3L13"], + sludgebomb: ["7M", "7L29", "7V", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L47"], sludgewave: ["7M", "7L32", "6M", "6L32", "5M", "5L50"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], venomdrench: ["7L1", "6L38"], venoshock: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, mukalola: {learnset: { acidarmor: ["7L46"], @@ -11741,6 +9664,7 @@ exports.BattleLearnsets = { attract: ["7M"], belch: ["7L52"], bite: ["7L7", "7L1"], + block: ["7T"], brickbreak: ["7M"], brutalswing: ["7M"], confide: ["7M"], @@ -11752,19 +9676,25 @@ exports.BattleLearnsets = { explosion: ["7M"], facade: ["7M"], fireblast: ["7M"], + firepunch: ["7T"], flamethrower: ["7M"], fling: ["7M", "7L26"], focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], + gastroacid: ["7T"], + gigadrain: ["7T"], gigaimpact: ["7M"], - gunkshot: ["7L40"], + gunkshot: ["7T", "7L40"], harden: ["7L4", "7L1"], hiddenpower: ["7M"], hyperbeam: ["7M"], + icepunch: ["7T"], infestation: ["7M"], - knockoff: ["7L29"], + knockoff: ["7T", "7L29"], memento: ["7L57"], minimize: ["7L21"], + painsplit: ["7T"], payback: ["7M"], poisonfang: ["7L18"], poisongas: ["7L1"], @@ -11773,6 +9703,7 @@ exports.BattleLearnsets = { protect: ["7M"], quash: ["7M"], raindance: ["7M"], + recycle: ["7T"], rest: ["7M"], return: ["7M"], rockpolish: ["7M"], @@ -11781,16 +9712,20 @@ exports.BattleLearnsets = { round: ["7M"], screech: ["7L37"], shadowball: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], sludgebomb: ["7M"], sludgewave: ["7M"], snarl: ["7M"], + snore: ["7T"], + spite: ["7T"], stoneedge: ["7M"], substitute: ["7M"], sunnyday: ["7M"], swagger: ["7M"], taunt: ["7M"], thief: ["7M"], + thunderpunch: ["7T"], torment: ["7M"], toxic: ["7M"], venomdrench: ["7L1"], @@ -11798,571 +9733,586 @@ exports.BattleLearnsets = { }}, shellder: {learnset: { aquaring: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L37", "7V", "6L37", "5L37", "4L32", "3L17", "3S0", "3S2"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L37", "7V", "7V", "6L37", "5L37", "4L32", "3L17", "3S2", "3S0"], avalanche: ["7E", "6E", "5E"], - barrier: ["7E", "6E", "5E", "5D", "4E", "3E"], + barrier: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], brine: ["7L44", "6L44", "5L44", "4M", "4L44"], - bubblebeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + bubblebeam: ["7E", "7V", "7V", "6E", "5E", "4E", "3E"], captivate: ["4M"], - clamp: ["7L25", "7V", "6L25", "5L25", "4L25", "3L41"], + clamp: ["7L25", "7V", "7V", "6L25", "5L25", "4L25", "3L41"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L61", "6L61", "5L61"], - icebeam: ["7M", "7L52", "7V", "6M", "6L52", "5M", "5L52", "4M", "4L49", "3M", "3L49"], + icebeam: ["7M", "7L52", "7V", "7V", "6M", "6L52", "5M", "5L52", "4M", "4L49", "3M", "3L49"], iceshard: ["7L28", "6L28", "5L28", "4L28"], - iciclespear: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3L8", "3E", "3S0", "3S1"], - icywind: ["6T", "5T", "5D", "4T", "3T"], - irondefense: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L40"], - leer: ["7L20", "7V", "6L20", "5L20", "4L20", "3L33"], + iciclespear: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3L8", "3E", "3S1", "3S0"], + icywind: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], + irondefense: ["7T", "7L49", "6T", "6L49", "5T", "5L49", "4T", "4L40"], + leer: ["7L20", "7V", "7V", "6L20", "5L20", "4L20", "3L33"], + liquidation: ["7T"], mimic: ["7V", "3T"], mudshot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16", "3M", "3L25"], + protect: ["7M", "7L16", "7V", "6M", "6L16", "5M", "5L16", "4M", "4L16", "3M", "3L25"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "7V", "6E", "5E", "4E", "3E"], razorshell: ["7L32", "6L32", "5L32"], reflect: ["7V"], refresh: ["3S2"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7E", "6E", "5E", "4E"], round: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], shellsmash: ["7L56", "6L56", "5L56"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - supersonic: ["7L8", "7V", "6L8", "5L8", "4L8", "3L9", "3S0"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - takedown: ["7E", "7V", "6E", "5E", "4E", "3E", "3S2"], + supersonic: ["7L8", "7V", "7V", "6L8", "5L8", "4L8", "3L9", "3S0"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S2"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + takedown: ["7E", "7V", "7V", "6E", "5E", "4E", "3E", "3S2"], teleport: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], twineedle: ["7E", "6E", "5E"], watergun: ["7L1", "7V"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - whirlpool: ["7L40", "6L40", "5L40", "4M", "4L37"], - withdraw: ["7L4", "7V", "6L4", "5L4", "5D", "4L4", "3L1", "3S0", "3S1"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7L40", "7V", "6L40", "5L40", "4M", "4L37"], + withdraw: ["7L4", "7V", "7V", "6L4", "5D", "5L4", "4L4", "3L1", "3S1", "3S0"], }}, cloyster: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], avalanche: ["4M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], brine: ["4M"], bubblebeam: ["7V"], captivate: ["4M"], clamp: ["7V"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "5S0", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "5S0", "4M", "3M"], hydropump: ["7L1", "6L1"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], iciclecrash: ["7L50", "6L50", "5L52"], iciclespear: ["5S0"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], mimic: ["7V", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + protect: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], rapidspin: ["3C"], razorshell: ["5S0"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["5S0"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], shellsmash: ["7L1", "6L1"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - spikecannon: ["7L13", "7V", "6L13", "5L13", "4L40", "3L41"], - spikes: ["7L28", "6L28", "5L28", "4L28", "3L33"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spikecannon: ["7L13", "7V", "7V", "6L13", "5L13", "4L40", "3L41"], + spikes: ["7L28", "7V", "6L28", "5L28", "4L28", "3L33"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + supersonic: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], teleport: ["7V"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L1", "6L1", "5L1", "4L1"], triattack: ["7V"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - withdraw: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + withdraw: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], }}, gastly: {learnset: { + allyswitch: ["7T"], astonish: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], captivate: ["4M"], clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - confuseray: ["7L19", "7V", "6L19", "5L19", "4L19", "3L21"], - curse: ["7L12", "6L12", "5L12", "4L12", "3L13"], + confuseray: ["7L19", "7V", "7V", "6L19", "5L19", "4L19", "3L21"], + curse: ["7L12", "7V", "6L12", "5L12", "4L12", "3L13"], darkpulse: ["7M", "7L36", "6M", "6L36", "5T", "5L36", "4M", "4L36"], dazzlinggleam: ["7M", "6M"], - destinybond: ["7L40", "6L40", "5L40", "4L40", "3L33"], - disable: ["7E", "6E", "5E", "5D", "4E"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L28"], + destinybond: ["7L40", "7V", "6L40", "5L40", "4L40", "3L33"], + disable: ["7E", "6E", "5D", "5E", "4E"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L33", "7V", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L28"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], explosion: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + firepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], grudge: ["7E", "6E", "5E", "4E", "3E"], - haze: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], hex: ["7L43", "6L43", "5L43"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - icywind: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + icepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + icywind: ["7T", "6T", "5T", "4T"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], - lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L8", "6L8", "5L8", "4L8", "3L13"], + knockoff: ["7T", "6T", "5T", "4T"], + lick: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L8", "7V", "6L8", "5L8", "4L8", "3L13"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], - nightmare: ["7L47", "6L47", "5L47", "4L43", "3T", "3L41"], - nightshade: ["7L15", "7V", "6L15", "5L15", "4L15", "3L16"], + nightmare: ["7L47", "7V", "6L47", "5L47", "4L43", "3T", "3L41"], + nightshade: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L16"], ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "4M", "4L26"], - perishsong: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psywave: ["7E", "7V", "6E", "5E", "4E", "3E"], + perishsong: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + psywave: ["7E", "7V", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflecttype: ["7E", "6E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scaryface: ["7E", "6E", "5E"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], - shadowball: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L36"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + shadowball: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L36"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], sludgewave: ["5D"], smog: ["7E", "6E", "5E"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7L5", "6T", "6L5", "5T", "5L5", "4T", "4L5", "3L8"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7L5", "7V", "6T", "6L5", "5T", "5L5", "4T", "4L5", "3L8"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7L22", "6L22", "5L22", "4T", "4L22"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7V"], + telekinesis: ["7T", "5M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7V", "7V"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + thunderpunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], }}, haunter: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L19", "7V", "6L19", "5L19", "5S0", "4L19", "3L21"], - curse: ["7L12", "6L12", "5L12", "4L12", "3L13"], + confuseray: ["7L19", "7V", "7V", "6L19", "5L19", "5S0", "4L19", "3L21"], + curse: ["7L12", "7V", "6L12", "5L12", "4L12", "3L13"], darkpulse: ["7M", "7L44", "6M", "6L44", "5T", "5L44", "4M", "4L44"], dazzlinggleam: ["7M", "6M"], - destinybond: ["7L50", "6L50", "5L50", "4L50", "3L39"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3T", "3L31"], + destinybond: ["7L50", "7V", "6L50", "5L50", "4L50", "3L39"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L39", "7V", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3T", "3L31"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T"], + firepunch: ["7T", "6T", "5T", "4T"], fling: ["7M", "6M", "5M", "4M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], hex: ["7L55", "6L55", "5L55"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], - lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L8", "6L8", "5L8", "4L8", "3L13"], + knockoff: ["7T", "6T", "5T", "4T"], + lick: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L8", "7V", "6L8", "5L8", "4L8", "3L13"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], - nightmare: ["7L61", "6L61", "5L61", "4L55", "3T", "3L53"], - nightshade: ["7L15", "7V", "6L15", "5L15", "4L15", "3L16"], + nightmare: ["7L61", "7V", "6L61", "5L61", "4L55", "3T", "3L53"], + nightshade: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L16"], ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S0", "4M", "4L28"], poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], - shadowball: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3M", "3L45"], + shadowball: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3M", "3L45"], shadowclaw: ["7M", "6M", "5M", "4M"], shadowpunch: ["7L1", "6L25", "5L25", "5S0", "4L25", "3L25"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7L5", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["7L22", "6L22", "5L22", "5S0", "4T", "4L22"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7V"], + telekinesis: ["7T", "5M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7V", "7V"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], }}, gengar: {learnset: { + allyswitch: ["7T"], astonish: ["6S4"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L19", "7V", "6L19", "6S1", "6S2", "6S4", "5L19", "4L19", "3L21", "3S0"], + confuseray: ["7L19", "7V", "7V", "6L19", "6S4", "6S2", "6S1", "5L19", "4L19", "3L21", "3S0"], counter: ["7V", "3T"], - curse: ["7L12", "6L12", "5L12", "4L12", "3L13", "3S0"], + curse: ["7L12", "7V", "6L12", "5L12", "4L12", "3L13", "3S0"], darkpulse: ["7M", "7L44", "6M", "6L44", "5T", "5L44", "4M", "4L44"], dazzlinggleam: ["7M", "6M"], - destinybond: ["7L50", "6L50", "6S3", "5L50", "4L50", "3L39"], + destinybond: ["7L50", "7V", "6L50", "6S3", "5L50", "4L50", "3L39"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3T", "3L31"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7L39", "7V", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3T", "3L31"], + dynamicpunch: ["7V", "3T"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], hex: ["7L55", "6L55", "5L55"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "6S5", "6S6", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "6S5", "6S6", "5L1", "4L1", "3L1"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "6S6", "6S5", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "6S6", "6S5", "5L1", "4L1", "3L1"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], - lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L8", "6L8", "6S5", "6S6", "5L8", "4L8", "3L13"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lick: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L8", "7V", "6L8", "6S6", "6S5", "5L8", "4L8", "3L13"], megadrain: ["7V"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], naturalgift: ["4M"], - nightmare: ["7L61", "6L61", "5L61", "4L55", "3T", "3L53"], - nightshade: ["7L15", "7V", "6L15", "6S2", "5L15", "4L15", "3L16", "3S0"], + nightmare: ["7L61", "7V", "6L61", "5L61", "4L55", "3T", "3L53"], + nightshade: ["7L15", "7V", "7V", "6L15", "6S2", "5L15", "4L15", "3L16", "3S0"], ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "6S1", "6S5", "6S6", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "6S6", "6S5", "6S1", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], selfdestruct: ["7V", "3T"], - shadowball: ["7M", "7L33", "6M", "6L33", "6S3", "6S4", "5M", "5L33", "4M", "4L33", "3M", "3L45"], + shadowball: ["7M", "7L33", "7V", "6M", "6L33", "6S4", "6S3", "5M", "5L33", "4M", "4L33", "3M", "3L45"], shadowclaw: ["7M", "6M", "5M", "4M"], - shadowpunch: ["7L1", "6L25", "6S1", "6S2", "5L25", "4L25", "3L25"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowpunch: ["7L1", "6L25", "6S2", "6S1", "5L25", "4L25", "3L25"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], sludgebomb: ["7M", "6M", "6S3", "5M", "4M", "3M"], sludgewave: ["6S4"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1", "3S0"], - strength: ["7V", "6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7L5", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1", "3S0"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L22", "6L22", "6S1", "6S2", "5L22", "4T", "4L22"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L22", "6L22", "6S2", "6S1", "5L22", "4T", "4L22"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "6S3", "5M", "4M"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], }}, onix: {learnset: { ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "5D", "4L1", "3L8"], - block: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + bind: ["7T", "7L1", "7V", "7V", "6T", "6L1", "5D", "5T", "5L1", "4L1", "3L8"], + block: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], bodyslam: ["7V", "3T"], brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - curse: ["7L4", "6L4", "5L46", "4L38"], + curse: ["7L4", "7V", "6L4", "5L46", "4L38"], defensecurl: ["7E", "6E", "5E", "4E"], - dig: ["7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "3M"], + dig: ["7L43", "7V", "7V", "6M", "6L43", "5M", "5L43", "4M", "3M"], doubleedge: ["7L49", "7V", "6L49", "5L57", "4L46", "3T", "3L56"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], dragonbreath: ["7L25", "6L25", "5L41", "4L33", "3L30"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7V"], - flail: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "7L20", "6M", "6L20", "5M", "4M"], - harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L19"], - headbutt: ["4T"], + harden: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L19"], + headbutt: ["7V", "4T"], heavyslam: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["7L40", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7L40", "7V", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], naturepower: ["7M", "6M"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], - rage: ["7L13", "7V", "6L13", "5L14", "4L14", "3L23"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L13", "7V", "7V", "6L13", "5L14", "4L14", "3L23"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7E", "6E", "5E", "4E"], - rockclimb: ["7E", "6E", "5E", "5D", "4M"], + rockclimb: ["7E", "6E", "5D", "5E", "4M"], rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L30", "4M", "4L30"], - rockslide: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L7", "7V", "6L7", "5L9", "4L9", "3L12"], + rockslide: ["7M", "7L34", "7V", "7V", "6M", "6L34", "5M", "5L34", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rockthrow: ["7L7", "7V", "7V", "6L7", "5L9", "4L9", "3L12"], rocktomb: ["7M", "7L10", "6M", "6L10", "5M", "5L17", "4M", "4L17", "3M"], rollout: ["7E", "6E", "5E", "4T", "4E"], rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L52", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], + sandstorm: ["7M", "7L52", "7V", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], sandtomb: ["7L37", "6L37", "5L54", "4L41", "3L49"], - screech: ["7L31", "7V", "6L31", "5L6", "4L6", "3L1"], + screech: ["7L31", "7V", "7V", "6L31", "5L6", "4L6", "3L1"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["7V", "3T"], skullbash: ["7V"], - slam: ["7L28", "7V", "6L28", "5L33", "4L25", "3L37"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + slam: ["7L28", "7V", "7V", "6L28", "5L33", "4L25", "3L37"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7L16", "7E", "6T", "6L16", "6E", "5T", "5L38", "5E", "5D", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7L16", "7E", "6T", "6L16", "6E", "5D", "5T", "5L38", "5E", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L46", "6M", "6L46", "5M", "5L62", "4M", "4L49"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], + wideguard: ["7E"], }}, steelix: {learnset: { ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], autotomize: ["7L19", "6L19", "5L30"], - bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1", "3L8"], - block: ["6T", "5T", "4T"], + bind: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4L1", "3L8"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L37", "6L37", "5L54", "4L41", "3L49"], - curse: ["7L4", "6L4", "5L46", "4L38"], - cut: ["6M", "5M", "4M", "3M"], + crunch: ["7L37", "7V", "6L37", "5L54", "4L41", "3L49"], + curse: ["7L4", "7V", "6L4", "5L46", "4L38"], + cut: ["7V", "6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], - dig: ["7L43", "6M", "6L43", "5M", "5L43", "4M", "3M"], + defensecurl: ["7V", "3T"], + dig: ["7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "3M"], doubleedge: ["7L49", "6L49", "5L57", "4L46", "3T", "3L56"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonbreath: ["7L25", "6L25", "5L41", "4L33", "3L30"], - dragonpulse: ["6T", "5T", "4M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7L25", "7V", "6L25", "5L41", "4L33", "3L30"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], firefang: ["7L1", "6L1", "5L1", "4L1"], flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "7L20", "6M", "6L20", "5M", "4M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L19"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L19"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icefang: ["7L1", "6L1", "5L1", "4L1"], - ironhead: ["6T", "5T", "4T"], - irontail: ["7L40", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], - magnetrise: ["6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7L40", "7V", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], + magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], naturepower: ["7M", "6M"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], - rage: ["7L13", "6L13", "5L14", "4L14", "3L23"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L13", "7V", "6L13", "5L14", "4L14", "3L23"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M", "4L30"], rockslide: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L7", "6L7", "5L9", "4L9", "3L12"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rockthrow: ["7L7", "7V", "6L7", "5L9", "4L9", "3L12"], rocktomb: ["7M", "7L10", "6M", "6L10", "5M", "5L17", "4M", "4L17", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L52", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], - screech: ["7L31", "6L31", "5L6", "4L6", "3L1"], + sandstorm: ["7M", "7L52", "7V", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], + screech: ["7L31", "7V", "6L31", "5L6", "4L6", "3L1"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["3T"], - slam: ["7L28", "6L28", "5L33", "4L25", "3L37"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + slam: ["7L28", "7V", "6L28", "5L33", "4L25", "3L37"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7L16", "6T", "6L16", "5T", "5L38", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7L16", "6T", "6L16", "5T", "5L38", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L46", "6M", "6L46", "5M", "5L62", "4M", "4L49"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], taunt: ["7M", "6M", "5M", "4M", "3M"], thunderfang: ["7L1", "6L1", "5L1", "4L1"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], }}, drowzee: {learnset: { + allyswitch: ["7T"], assist: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrier: ["7E", "7V", "6E", "5E", "4E", "3E"], bellydrum: ["3S0"], bide: ["7V"], bodyslam: ["7V", "3T"], @@ -12370,94 +10320,100 @@ exports.BattleLearnsets = { calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L9", "7V", "6L9", "5L9", "4L9", "3L11"], + confusion: ["7L9", "7V", "7V", "6L9", "5L9", "4L9", "3L11"], counter: ["7V", "3T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - disable: ["7L5", "7V", "6L5", "5L5", "4L7", "3L7"], + disable: ["7L5", "7V", "7V", "6L5", "5L5", "4L7", "3L7"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "5D", "4M"], - dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - flash: ["7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5D", "5T", "4M"], + dreameater: ["7M", "7V", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], flatter: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L61", "6L61", "5L61", "4L53", "3L45"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L61", "7V", "6L61", "5L61", "4L53", "3L45"], grassknot: ["7M", "6M", "5M", "4M"], guardswap: ["7E", "6E", "5E", "4E"], - headbutt: ["7L29", "7L13", "7V", "6L13", "5L13", "4T", "4L15", "3L17"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], + headbutt: ["7L29", "7L13", "7V", "7V", "6L13", "5L13", "4T", "4L15", "3L17"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + lightscreen: ["7M", "7V", "6M", "5M", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meditate: ["7L21", "7V", "6L21", "5L21", "4L21", "3L27"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meditate: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L27"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], nastyplot: ["7L53", "7E", "6L53", "6E", "5L53", "5E", "4L43", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], - poisongas: ["7L17", "7V", "6L17", "5L17", "4L18", "3L21"], - pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + nightmare: ["7V", "3T"], + poisongas: ["7L17", "7V", "7V", "6L17", "5L17", "4L18", "3L21"], + pound: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + powersplit: ["7E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L25", "6L25", "5L25", "4L26"], - psychic: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L40", "3M", "3L31"], - psychocut: ["7E", "6E", "5E", "5D", "4E"], - psychup: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L29", "3T", "3L37"], + psychic: ["7M", "7L49", "7V", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L40", "3M", "3L31"], + psychicterrain: ["7E"], + psychocut: ["7E", "6E", "5D", "5E", "4E"], + psychup: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L29", "3T", "3L37"], psyshock: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "3T"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L37", "3T", "3L41"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L37", "3T", "3L41"], synchronoise: ["7L37", "6L37", "5L37"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + thunderpunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], + wakeupslap: ["7L29"], wish: ["3S0"], - zenheadbutt: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], }}, hypno: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], bide: ["7V"], bodyslam: ["7V", "3T"], @@ -12465,521 +10421,539 @@ exports.BattleLearnsets = { calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + confusion: ["7L9", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], counter: ["7V", "3T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - disable: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + disable: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L61", "7L1", "6L1", "5L61", "4L69", "3L57"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L61", "7L1", "7V", "6L1", "5L61", "4L69", "3L57"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["7L29", "7L13", "7V", "6L13", "5L13", "4T", "4L15", "3L17"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - icepunch: ["6T", "5T", "4T", "3T"], + headbutt: ["7L29", "7L13", "7V", "7V", "6L13", "5L13", "4T", "4L15", "3L17"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meditate: ["7L21", "7V", "6L21", "5L21", "4L21", "3L29", "3S0"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meditate: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L29", "3S0"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], nastyplot: ["7L53", "7L1", "6L1", "5L53", "4L55"], naturalgift: ["4M"], - nightmare: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], - poisongas: ["7L17", "7V", "6L17", "5L17", "4L18", "3L21"], - pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + nightmare: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + poisongas: ["7L17", "7V", "7V", "6L17", "5L17", "4L18", "3L21"], + pound: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7L25", "6L25", "5L25", "4L28"], - psychic: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L50", "3M", "3L35", "3S0"], - psychup: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L43"], + psychic: ["7M", "7L49", "7V", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L50", "3M", "3L35", "3S0"], + psychup: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L43"], psyshock: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M", "3S0"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "3T"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L45", "3T", "3L49"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L45", "3T", "3L49"], switcheroo: ["7L1", "6L1", "5L1", "4L1"], synchronoise: ["7L37", "6L37", "5L37"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L64"], + wakeupslap: ["7L29"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L64"], }}, krabby: {learnset: { agility: ["7E", "6E", "5E", "4E"], - allyswitch: ["7E", "6E"], - amnesia: ["7E", "6E", "5E", "5D", "4E", "3E"], + allyswitch: ["7T", "7E", "6E"], + amnesia: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], ancientpower: ["7E", "6E", "5E", "4T", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7E", "7V", "6E", "5E"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M"], brine: ["7L39", "6L39", "5L39", "4M", "4L39"], - bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bubble: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], bubblebeam: ["7L15", "7V", "6L15", "5L15", "4L15"], captivate: ["4M"], chipaway: ["7E", "6E", "5E"], confide: ["7M", "6M"], - crabhammer: ["7L41", "7V", "6L41", "5L41", "4L41", "3L45"], - cut: ["7V", "6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "4E", "3M", "3E"], + crabhammer: ["7L41", "7V", "7V", "6L41", "5L41", "4L41", "3L45"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], + dig: ["7V", "6M", "5M", "4M", "4E", "3M", "3E"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M", "4M"], - flail: ["7L45", "7E", "6L45", "6E", "5L45", "5E", "4L45", "4E", "3L49", "3E"], + flail: ["7L45", "7E", "7V", "6L45", "6E", "5L45", "5E", "4L45", "4E", "3L49", "3E"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - guillotine: ["7L31", "7V", "6L31", "5L31", "4L31", "3L34"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + guillotine: ["7L31", "7V", "7V", "6L31", "5L31", "4L31", "3L34"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L11", "7V", "6L11", "5L11", "4L11", "3L16"], - haze: ["7E", "6E", "5E", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L11", "7V", "7V", "6L11", "5L11", "4L11", "3L16"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - leer: ["7L9", "7V", "6L9", "5L9", "4L9", "3L5"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + leer: ["7L9", "7V", "7V", "6L9", "5L9", "4L9", "3L5"], + liquidation: ["7T"], metalclaw: ["7L21", "6L21", "5L21", "4L21"], mimic: ["7V", "3T"], mudshot: ["7L19", "6L19", "5L19", "4L19", "3L23"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], - protect: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L38"], + protect: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L38"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "5D", "4M", "3M"], - slam: ["7L35", "7E", "6L35", "6E", "5L35", "5E", "4L35", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stomp: ["7L25", "7V", "6L25", "5L25", "4L25", "3L27"], - strength: ["7V", "6M", "5M", "4M", "3M"], + slam: ["7L35", "7E", "7V", "6L35", "6E", "5L35", "5E", "4L35", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stomp: ["7L25", "7V", "7V", "6L25", "5L25", "4L25", "3L27"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], tickle: ["7E", "6E", "5E", "4E"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - vicegrip: ["7L5", "7V", "6L5", "5L5", "5D", "4L5", "3L12"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + vicegrip: ["7L5", "7V", "7V", "6L5", "5D", "5L5", "4L5", "3L12"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], xscissor: ["7M", "6M", "5M", "4M"], }}, kingler: {learnset: { + allyswitch: ["7T"], ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M"], brine: ["7L51", "6L51", "5L51", "4M", "4L51"], - bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bubble: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], bubblebeam: ["7L15", "7V", "6L15", "5L15", "4L15"], captivate: ["4M"], confide: ["7M", "6M"], - crabhammer: ["7L56", "7V", "6L56", "5L56", "4L56", "3L57"], - cut: ["7V", "6M", "5M", "4M", "3M"], + crabhammer: ["7L56", "7V", "7V", "6L56", "5L56", "4L56", "3L57"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M", "4M"], flail: ["7L63", "6L63", "5L63", "4L63", "3L65"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - guillotine: ["7L37", "7V", "6L37", "5L37", "4L37", "3L38"], + guillotine: ["7L37", "7V", "7V", "6L37", "5L37", "4L37", "3L38"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L11", "7V", "6L11", "5L11", "4L11", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L11", "7V", "7V", "6L11", "5L11", "4L11", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L9", "7L1", "7V", "6L1", "5L1", "4L9", "3L1"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + leer: ["7L9", "7L1", "7V", "7V", "6L1", "5L1", "4L9", "3L1"], + liquidation: ["7T"], metalclaw: ["7L21", "6L21", "5L21", "4L21", "3L1"], mimic: ["7V", "3T"], mudshot: ["7L19", "6L19", "5L19", "4L19", "3L23"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], - protect: ["7M", "7L32", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L42"], + protect: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L42"], quash: ["7M", "6M", "5M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], slam: ["7L44", "6L44", "5L44", "4L44"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stomp: ["7L25", "7V", "6L25", "5L25", "4L25", "3L27"], - strength: ["7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stomp: ["7L25", "7V", "7V", "6L25", "5L25", "4L25", "3L27"], + stompingtantrum: ["7T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - vicegrip: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + vicegrip: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], wideguard: ["7L1", "6L1", "5L1"], xscissor: ["7M", "6M", "5M", "4M"], }}, voltorb: {learnset: { bide: ["7V"], - charge: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + charge: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], chargebeam: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L26"], confide: ["7M", "6M"], + curse: ["7V"], discharge: ["7L37", "6L37"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], eerieimpulse: ["7L6", "6L6"], electroball: ["7L22", "6L22", "5L29"], - endure: ["4M", "3T"], - explosion: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L47", "4M", "4L43", "3T", "3L46"], + endure: ["7V", "4M", "3T"], + explosion: ["7M", "7L41", "7V", "7V", "6M", "6L41", "5M", "5L47", "4M", "4L43", "3T", "3L46"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "7L46", "6M", "6L43", "5M", "5L43", "4M", "4L40"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - lightscreen: ["7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L37"], - magiccoat: ["6T", "5T", "4T"], - magnetrise: ["7L34", "6T", "6L34", "5T", "5L40", "4T", "4L36"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + lightscreen: ["7M", "7L29", "7V", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L37"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetrise: ["7T", "7L34", "6T", "6L34", "5T", "5L40", "4T", "4L36"], mimic: ["7V", "3T"], - mirrorcoat: ["7L48", "6L48", "5L50", "4L47", "3L49", "3S0"], + mirrorcoat: ["7L48", "7V", "6L48", "5L50", "4L47", "3L49", "3S0"], naturalgift: ["5D", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], refresh: ["3S0"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L11", "6L11", "5L15", "4T", "4L15", "3T", "3L32"], - round: ["7M", "6M", "5M"], - screech: ["7L13", "7V", "6L13", "5L19", "4L19", "3L8"], - secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L26", "7V", "6L26", "5L33", "4L29", "3T", "3L27"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "5D", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - sonicboom: ["7L4", "7V", "6L4", "5L8", "4L8", "3L15"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7L11", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L32"], + round: ["7M", "6M", "5M"], + screech: ["7L13", "7V", "7V", "6L13", "5L19", "4L19", "3L8"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L26", "7V", "7V", "6L26", "5L33", "4L29", "3T", "3L27"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5D", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + sonicboom: ["7L4", "7V", "7V", "6L4", "5L8", "4L8", "3L15"], spark: ["7L9", "6L9", "5L12", "4L12", "3L21", "3S0"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L20", "7V", "6L20", "5L36", "4T", "4L33", "3T", "3L42", "3S0"], - tackle: ["7L1", "7V", "6L1", "5L5", "4L5", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L20", "7V", "7V", "6L20", "5L36", "4T", "4L33", "3T", "3L42", "3S0"], + tackle: ["7L1", "7V", "7V", "6L1", "5L5", "4L5", "3L1"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], teleport: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, electrode: {learnset: { bide: ["7V"], charge: ["7L1", "6L1", "5L1", "4L1", "3L1"], chargebeam: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L26"], confide: ["7M", "6M"], + curse: ["7V"], discharge: ["7L41", "6L41"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], eerieimpulse: ["7L6", "7L1", "6L6"], electroball: ["7L22", "6L22", "5L29"], - endure: ["4M", "3T"], - explosion: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L57", "4M", "4L51", "3T", "3L54"], + endure: ["7V", "4M", "3T"], + explosion: ["7M", "7L47", "7V", "7V", "6M", "6L47", "5M", "5L57", "4M", "4L51", "3T", "3L54"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "7L54", "6M", "6L51", "5M", "5L51", "4M", "4L46"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - lightscreen: ["7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L41"], - magiccoat: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + lightscreen: ["7M", "7L29", "7V", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L41"], + magiccoat: ["7T", "6T", "5T", "4T"], magneticflux: ["7L1", "6L1"], - magnetrise: ["7L36", "6T", "6L36", "5T", "5L46", "4T", "4L40"], + magnetrise: ["7T", "7L36", "6T", "6L36", "5T", "5L46", "4T", "4L40"], mimic: ["7V", "3T"], - mirrorcoat: ["7L58", "6L58", "5L62", "4L57", "3L59"], + mirrorcoat: ["7L58", "7V", "6L58", "5L62", "4L57", "3L59"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L11", "6L11", "5L15", "4T", "4L15", "3T", "3L34"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7L11", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L34"], round: ["7M", "6M", "5M"], - screech: ["7L13", "7V", "6L13", "5L19", "4L19", "3L1"], + screech: ["7L13", "7V", "7V", "6L13", "5L19", "4L19", "3L1"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L26", "7V", "6L26", "5L35", "4L29", "3T", "3L27"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + selfdestruct: ["7L26", "7V", "7V", "6L26", "5L35", "4L29", "3T", "3L27"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - sonicboom: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + sonicboom: ["7L4", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], spark: ["7L9", "6L1", "5L1", "4L1", "3L21"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L20", "7V", "6L20", "5L40", "4T", "4L35", "3T", "3L48"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L20", "7V", "7V", "6L20", "5L40", "4T", "4L35", "3T", "3L48"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T"], teleport: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, exeggcute: {learnset: { - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrage: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + ancientpower: ["7E", "7V", "6E", "5E", "4T", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrage: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], bestow: ["7L50", "6L50", "5L53"], bide: ["7V"], - block: ["7E", "6T", "6E", "5T", "5E"], + block: ["7T", "7E", "6T", "6E", "5T", "5E"], bulletseed: ["7L17", "6L17", "5L17", "4M", "4L17", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L27", "6L27", "5L27", "4L27", "3L19"], - curse: ["7E", "6E", "5E", "4E", "3E"], + confusion: ["7L27", "7V", "6L27", "5L27", "4L27", "3L19"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], eggbomb: ["7V"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], extrasensory: ["7L47", "6L47", "5L47"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7E", "7V", "6T", "6E", "5D", "5T", "5E", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grassyterrain: ["7E", "6E"], - gravity: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + gravity: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], infestation: ["7M", "6M"], ingrain: ["7E", "6E", "5E", "4E", "3E"], leafstorm: ["7E", "6E", "5E", "4E"], - leechseed: ["7L11", "7V", "6L11", "5L11", "4L11", "3L13"], + leechseed: ["7L11", "7V", "7V", "6L11", "5L11", "4L11", "3L13"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], luckychant: ["7E", "6E", "5E", "4E"], + megadrain: ["7V"], mimic: ["7V", "3T"], - moonlight: ["7E", "6E", "5E", "4E", "3E"], + moonlight: ["7E", "7V", "6E", "5E", "4E", "3E"], naturalgift: ["7L37", "7E", "6L37", "6E", "5L37", "5E", "4M", "4L37"], naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], - nightmare: ["3T"], - poisonpowder: ["7L21", "7V", "6L21", "5L21", "4L21", "3L31"], + nightmare: ["7V", "3T"], + poisonpowder: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L31"], powerswap: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "5L47", "4M", "4L47", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "5L47", "4M", "4L47", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], psywave: ["7V"], rage: ["7V"], - reflect: ["7M", "7L7", "7V", "6M", "6L7", "5M", "5L7", "4M", "4L7", "4E", "3M", "3L7", "3E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + reflect: ["7M", "7L7", "7V", "7V", "6M", "6L7", "5M", "5L7", "4M", "4L7", "4E", "3M", "3L7", "3E"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], selfdestruct: ["7V", "3T"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - sleeppowder: ["7L23", "7V", "6L23", "5L23", "4L23", "3L37"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], - strength: ["6M", "5M", "4M", "3M"], - stunspore: ["7L19", "7V", "6L19", "5L19", "4L19", "3L25"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeppowder: ["7L23", "7V", "7V", "6L23", "5L23", "4L23", "3L37"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L43", "7V", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + strength: ["7V", "6M", "5M", "4M", "3M"], + stunspore: ["7L19", "7V", "7V", "6L19", "5L19", "4L19", "3L25"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], sweetscent: ["3S0"], swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + synthesis: ["7T", "7E", "7V", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + uproar: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], wish: ["3S0"], - worryseed: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33"], + worryseed: ["7T", "7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33"], }}, exeggutor: {learnset: { ancientpower: ["4T", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrage: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrage: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], bide: ["7V"], - block: ["6T", "5T"], + block: ["7T", "6T", "5T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + confusion: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - eggbomb: ["7L27", "7V", "6L27", "5L27", "4L27", "3L31"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + eggbomb: ["7L27", "7V", "7V", "6L27", "5L27", "4L27", "3L31"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], infestation: ["7M", "6M"], leafstorm: ["7L47", "6L47", "5L47", "4L47"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], megadrain: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], - nightmare: ["3T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + nightmare: ["7V", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S0"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], psywave: ["7V"], rage: ["7V"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], refresh: ["3S0"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + seedbomb: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], selfdestruct: ["7V", "3T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - stomp: ["7L1", "7V", "6L1", "5L1", "4L1", "3L19"], - strength: ["7V", "6M", "5M", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + stomp: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L19"], + stompingtantrum: ["7T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], trickroom: ["7M", "6M", "5M", "4M"], woodhammer: ["7L37", "6L37", "5L37", "4L37"], - worryseed: ["6T", "5T", "4T"], - zenheadbutt: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, exeggutoralola: {learnset: { attract: ["7M"], barrage: ["7L1"], + block: ["7T"], brickbreak: ["7M"], brutalswing: ["7M"], bulldoze: ["7M"], @@ -12989,6 +10963,7 @@ exports.BattleLearnsets = { doubleteam: ["7M"], dracometeor: ["7T", "7S0"], dragonhammer: ["7L1"], + dragonpulse: ["7T"], dragontail: ["7M"], dreameater: ["7M"], earthquake: ["7M"], @@ -12998,15 +10973,22 @@ exports.BattleLearnsets = { facade: ["7M"], flamethrower: ["7M"], frustration: ["7M"], + gigadrain: ["7T"], gigaimpact: ["7M"], grassknot: ["7M"], + gravity: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], hypnosis: ["7L1"], infestation: ["7M"], + ironhead: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], leafstorm: ["7L47", "7S0"], lightscreen: ["7M"], + lowkick: ["7T"], naturepower: ["7M"], + outrage: ["7T"], powerswap: ["7S0"], protect: ["7M"], psychic: ["7M"], @@ -13016,30 +10998,38 @@ exports.BattleLearnsets = { rest: ["7M"], return: ["7M"], round: ["7M"], - seedbomb: ["7L1"], + seedbomb: ["7T", "7L1"], + skillswap: ["7T"], sleeptalk: ["7M"], sludgebomb: ["7M"], + snore: ["7T"], solarbeam: ["7M"], + stompingtantrum: ["7T"], substitute: ["7M"], sunnyday: ["7M"], + superpower: ["7T"], swagger: ["7M"], swordsdance: ["7M"], + synthesis: ["7T"], + telekinesis: ["7T"], thief: ["7M"], toxic: ["7M"], trickroom: ["7M"], woodhammer: ["7L37"], + worryseed: ["7T"], + zenheadbutt: ["7T"], }}, cubone: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7E", "7V", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bellydrum: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], - boneclub: ["7L7", "7V", "6L7", "5L7", "5D", "4L7", "3L9"], - bonemerang: ["7L21", "7V", "6L21", "5L21", "4L21", "3L25"], - bonerush: ["7L51", "6L37", "5L37", "4L37", "3L41"], + boneclub: ["7L7", "7V", "7V", "6L7", "5D", "5L7", "4L7", "3L9"], + bonemerang: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L25"], + bonerush: ["7L51", "7V", "6L37", "5L37", "4L37", "3L41"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], bubblebeam: ["7V"], @@ -13048,91 +11038,92 @@ exports.BattleLearnsets = { chipaway: ["7E", "6E", "5E"], confide: ["7M", "6M"], counter: ["7V", "3T"], - detect: ["7E", "6E", "5E", "4E"], - dig: ["7V", "6M", "5M", "4M", "3M"], + curse: ["7E", "7V"], + detect: ["7E", "7V", "6E", "5E", "4E"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L43", "7V", "6L43", "5L43", "4L43", "3T", "3L45"], doublekick: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endeavor: ["7T", "7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3L33"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + falseswipe: ["7M", "7L27", "7V", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3L33"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33"], - focusenergy: ["7L17", "7V", "6L17", "5L17", "4L17", "3L21"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L17", "7V", "7V", "6L17", "5L17", "4L17", "3L21"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furycutter: ["4T"], - growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["7L11", "7V", "6L11", "5L11", "4T", "4L11", "3L13"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L11", "7V", "7V", "6L11", "5L11", "4T", "4L11", "3L13"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["7E", "6T", "6E", "5T", "5E", "4E"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], - lowkick: ["6T", "5T", "5D", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + leer: ["7L13", "7V", "7V", "6L13", "5L13", "4L13", "3L17"], + lowkick: ["7T", "6T", "5D", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - perishsong: ["7E", "6E", "5E", "5D", "4E", "3E"], + perishsong: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L23", "7V", "6L23", "5L23", "4L23", "3L29"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L23", "7V", "7V", "6L23", "5L23", "4L23", "3L29"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["7L47", "6M", "6L47", "5M", "5L47"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - skullbash: ["7E", "7V", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + skullbash: ["7E", "7V", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], stompingtantrum: ["7L37"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - tailwhip: ["7L3", "7V", "6L3", "5L3", "4L3", "3L5"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + tailwhip: ["7L3", "7V", "7V", "6L3", "5L3", "4L3", "3L5"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L31", "7V", "6L31", "5L31", "4L31", "3L37"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7L31", "7V", "7V", "6L31", "5L31", "4L31", "3L37"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], watergun: ["7V"], }}, marowak: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], - boneclub: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - bonemerang: ["7L21", "7V", "6L21", "5L21", "4L21", "3L25"], - bonerush: ["7L65", "6L43", "5L43", "4L43", "3L53"], + boneclub: ["7L7", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + bonemerang: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L25"], + bonerush: ["7L65", "7V", "6L43", "5L43", "4L43", "3L53"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], bubblebeam: ["7V"], @@ -13140,86 +11131,91 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - dig: ["7V", "6M", "5M", "4M", "3M"], + curse: ["7V"], + detect: ["7V"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L53", "7V", "6L53", "5L53", "4L53", "3T", "3L61"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S0"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L49"], - endure: ["4M", "3T"], + endeavor: ["7T", "7L49", "6T", "6L49", "5T", "5L49", "4T", "4L49"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3L39"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + falseswipe: ["7M", "7L27", "7V", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3L39"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L17", "7V", "6L17", "5L17", "4L17", "3L21"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L17", "7V", "7V", "6L17", "5L17", "4L17", "3L21"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["7L11", "7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L11", "7L1", "7V", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], - lowkick: ["6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L13", "7V", "7V", "6L13", "5L13", "4L13", "3L17"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L23", "7V", "6L23", "5L23", "4L23", "3L32"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L23", "7V", "7V", "6L23", "5L23", "4L23", "3L32"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["7L59", "6M", "6L59", "5M", "5L59"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T", "3S0"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], sing: ["3S0"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stompingtantrum: ["7L43"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T", "7L43"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T", "3S0"], - tailwhip: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L3", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L33", "7V", "6L33", "5L33", "4L33", "3L46"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7L33", "7V", "7V", "6L33", "5L33", "4L33", "3L46"], + throatchop: ["7T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], watergun: ["7V"], }}, marowakalola: {learnset: { aerialace: ["7M"], + allyswitch: ["7T"], attract: ["7M"], blizzard: ["7M"], boneclub: ["7L7", "7L1"], @@ -13232,26 +11228,39 @@ exports.BattleLearnsets = { darkpulse: ["7M"], doubleteam: ["7M"], dreameater: ["7M"], + earthpower: ["7T"], earthquake: ["7M"], echoedvoice: ["7M"], - endeavor: ["7L49"], + endeavor: ["7T", "7L49"], facade: ["7M"], falseswipe: ["7M"], fireblast: ["7M"], + firepunch: ["7T"], flamecharge: ["7M"], flamethrower: ["7M"], flamewheel: ["7L11", "7L1"], flareblitz: ["7L53"], fling: ["7M", "7L37"], focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], gigaimpact: ["7M"], growl: ["7L1"], + heatwave: ["7T"], hex: ["7L17"], hiddenpower: ["7M"], hyperbeam: ["7M"], icebeam: ["7M"], + icywind: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], leer: ["7L13"], + lowkick: ["7T"], + outrage: ["7T"], + painsplit: ["7T"], protect: ["7M"], raindance: ["7M"], rest: ["7M"], @@ -13265,7 +11274,10 @@ exports.BattleLearnsets = { shadowbone: ["7L27"], sleeptalk: ["7M"], smackdown: ["7M"], - stompingtantrum: ["7L43"], + snore: ["7T"], + spite: ["7T"], + stealthrock: ["7T"], + stompingtantrum: ["7T", "7L43"], stoneedge: ["7M"], substitute: ["7M"], sunnyday: ["7M"], @@ -13274,13 +11286,97 @@ exports.BattleLearnsets = { tailwhip: ["7L3", "7L1"], thief: ["7M"], thrash: ["7L33"], + throatchop: ["7T"], thunder: ["7M"], thunderbolt: ["7M"], + thunderpunch: ["7T"], toxic: ["7M"], + uproar: ["7T"], willowisp: ["7M", "7L23"], }}, + marowakalolatotem: {learnset: { + aerialace: ["7M"], + allyswitch: ["7T"], + attract: ["7M"], + blizzard: ["7M"], + boneclub: ["7L7", "7L1"], + bonemerang: ["7L21", "7S0"], + bonerush: ["7L65"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + darkpulse: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M"], + earthpower: ["7T"], + earthquake: ["7M"], + echoedvoice: ["7M"], + endeavor: ["7T", "7L49"], + facade: ["7M"], + falseswipe: ["7M"], + fireblast: ["7M"], + firepunch: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flamewheel: ["7L11", "7L1"], + flareblitz: ["7L53"], + fling: ["7M", "7L37"], + focusblast: ["7M"], + focuspunch: ["7T"], + frustration: ["7M"], + gigaimpact: ["7M"], + growl: ["7L1"], + heatwave: ["7T"], + hex: ["7L17", "7S0"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], + leer: ["7L13", "7S0"], + lowkick: ["7T"], + outrage: ["7T"], + painsplit: ["7T"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + retaliate: ["7L59"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandstorm: ["7M"], + shadowball: ["7M"], + shadowbone: ["7L27"], + sleeptalk: ["7M"], + smackdown: ["7M"], + snore: ["7T"], + spite: ["7T"], + stealthrock: ["7T"], + stompingtantrum: ["7T", "7L43"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwhip: ["7L3", "7L1"], + thief: ["7M"], + thrash: ["7L33"], + throatchop: ["7T"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7T"], + toxic: ["7M"], + uproar: ["7T"], + willowisp: ["7M", "7L23", "7S0"], + }}, tyrogue: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "6M", "5M", "4M", "3M"], @@ -13289,310 +11385,313 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["7E", "6E", "5E", "4E", "3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L1", "6L1", "5L1", "5D", "4L1"], - feint: ["7E", "6E", "5E", "5D"], + fakeout: ["7L1", "6L1", "5D", "5L1", "4L1"], + feint: ["7E", "6E", "5D", "5E"], foresight: ["7L1", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["7L1", "7E", "6T", "6L1", "6E", "5T", "5L1", "5E", "4T", "4L1", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - highjumpkick: ["7E", "6E", "5E", "4E", "3E"], - lowkick: ["6T", "5T", "4T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L1", "7E", "6T", "6L1", "6E", "5T", "5L1", "5E", "4T", "4L1", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + highjumpkick: ["7E", "7V", "6E", "5E", "4E", "3E"], + laserfocus: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - machpunch: ["7E", "6E", "5E", "5D", "4E", "3E"], + machpunch: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], megakick: ["3T"], mimic: ["3T"], - mindreader: ["7E", "6E", "5E", "4E", "3E"], - mudslap: ["4T", "3T"], + mindreader: ["7E", "7V", "6E", "5E", "4E", "3E"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], pursuit: ["7E", "6E", "5E"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "7V", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], vacuumwave: ["7E", "6E", "5E", "4T", "4E"], workup: ["7M", "5M"], }}, hitmonlee: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], blazekick: ["7L45", "6L45", "5L45", "4L41"], bodyslam: ["7V", "3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L20"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E"], captivate: ["4M"], closecombat: ["7L57", "7L1", "6L1", "5L57", "4L53"], confide: ["7M", "6M"], - counter: ["7E", "7V", "3T"], - covet: ["6T", "5T"], + counter: ["7V", "3T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doublekick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], + doublekick: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7L49", "7E", "6L49", "5L49", "4M", "4L45", "3T", "3L41"], + endure: ["7L49", "7V", "6L49", "5L49", "4M", "4L45", "3T", "3L41"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L25", "7E", "6L25", "5L25", "4L25"], + feint: ["7L25", "6L25", "5L25", "4L25"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L21", "7V", "6L21", "5L21", "4L21", "3L21"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L37", "6L37", "5L37", "4L37", "3L36"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["7E", "6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - highjumpkick: ["7L29", "7E", "7V", "6L29", "5L29", "4L29", "3L26", "3S0"], - jumpkick: ["7L13", "7L1", "7V", "6L13", "5L13", "4L13", "3L16"], - knockoff: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], + focusenergy: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L21"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L37", "7V", "6L37", "5L37", "4L37", "3L36"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + highjumpkick: ["7L29", "7V", "7V", "6L29", "5L29", "4L29", "3L26", "3S0"], + jumpkick: ["7L13", "7L1", "7V", "7V", "6L13", "5L13", "4L13", "3L16"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - machpunch: ["7E"], - meditate: ["7L5", "7L1", "7V", "6L5", "5L5", "4L5", "3L6"], - megakick: ["7L53", "7L1", "7V", "6L1", "5L53", "4L49", "3T", "3L46", "3S0"], + meditate: ["7L5", "7L1", "7V", "7V", "6L5", "5L5", "4L5", "3L6"], + megakick: ["7L53", "7L1", "7V", "7V", "6L1", "5L53", "4L49", "3T", "3L46", "3S0"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mindreader: ["7L33", "7E", "6L33", "5L33", "4L33", "3L31", "3S0"], - mudslap: ["4T", "3T"], + mindreader: ["7L33", "7V", "6L33", "5L33", "4L33", "3L31", "3S0"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E"], refresh: ["3S0"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], - reversal: ["7L61", "7L1", "6L1", "5L61", "4L57", "3L51"], + reversal: ["7L61", "7L1", "7V", "6L1", "5L61", "4L57", "3L51"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollingkick: ["7L9", "7L1", "7V", "6L9", "5L9", "4L9", "3L11"], + roleplay: ["7T", "6T", "5T", "4T"], + rollingkick: ["7L9", "7L1", "7V", "7V", "6L9", "5L9", "4L9", "3L11"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - vacuumwave: ["7E", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], wideguard: ["7L41", "6L41", "5L41"], workup: ["7M", "5M"], }}, hitmonchan: {learnset: { - agility: ["7L6", "7L1", "7V", "6L6", "5L6", "4L6", "3L7"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L6", "7L1", "7V", "7V", "6L6", "5L6", "4L6", "3L7"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7L16", "7E", "6L16", "5L16", "4L16"], + bulletpunch: ["7L16", "6L16", "5L16", "4L16"], captivate: ["4M"], closecombat: ["7L66", "7L1", "6L1", "5L66", "4L56"], - cometpunch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + cometpunch: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], confide: ["7M", "6M"], - counter: ["7L61", "7E", "7L1", "7V", "6L1", "5L61", "4L51", "3T", "3L50"], - covet: ["6T", "5T"], - detect: ["7L50", "6L50", "5L51", "4L46", "3L44"], + counter: ["7L61", "7L1", "7V", "7V", "6L1", "5L61", "4L51", "3T", "3L50"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7L50", "7V", "6L50", "5L51", "4L46", "3L44"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L21", "7E", "6L21", "5L21", "4L21"], - firepunch: ["7L36", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], + feint: ["7L21", "6L21", "5L21", "4L21"], + firepunch: ["7T", "7L36", "7V", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["7L56", "7L1", "6T", "6L1", "5L56", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["7E", "6T", "5T", "4T", "3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - highjumpkick: ["7E"], - icepunch: ["7L36", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], - lowkick: ["6T", "5T", "4T"], + focuspunch: ["7T", "7L56", "7L1", "6T", "6L1", "5L56", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7L36", "7V", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], + laserfocus: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - machpunch: ["7L16", "7E", "7L1", "6L16", "5L16", "4L16", "3L20"], + machpunch: ["7L16", "7L1", "7V", "6L16", "5L16", "4L16", "3L20"], megakick: ["7V", "3T"], - megapunch: ["7L46", "7V", "6L46", "5L46", "4L41", "3T", "3L38", "3S0"], + megapunch: ["7L46", "7V", "7V", "6L46", "5L46", "4L41", "3T", "3L38", "3S0"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mindreader: ["7E", "3S0"], - mudslap: ["4T", "3T"], + mindreader: ["3S0"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L11", "7E", "7L1", "6L11", "5L11", "4L11", "3L13"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L11", "7L1", "7V", "6L11", "5L11", "4L11", "3L13"], quickguard: ["7L31", "6L31", "5L31"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7V"], skyuppercut: ["7L41", "6L41", "5L41", "4L36", "3L32", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7L36", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - vacuumwave: ["7L26", "7E", "6L26", "5L26", "4T", "4L26"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + thunderpunch: ["7T", "7L36", "7V", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["7L26", "6L26", "5L26", "4T", "4L26"], workup: ["7M", "5M"], }}, hitmontop: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - agility: ["7L37", "6L37", "5L37", "4L37", "3L37"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L37", "7V", "6L37", "5L37", "4L37", "3L37"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E"], captivate: ["4M"], closecombat: ["7L55", "7L1", "6L1", "5L55", "5S0", "4L51"], confide: ["7M", "6M"], - counter: ["7L28", "7E", "6L28", "5L28", "4L28", "3T", "3L31"], - covet: ["6T", "5T"], - detect: ["7L50", "7L1", "6L50", "5L51", "4L46", "3L43"], - dig: ["6M", "5M", "4M", "3M"], + counter: ["7L28", "7V", "6L28", "5L28", "4L28", "3T", "3L31"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7L50", "7L1", "7V", "6L50", "5L51", "4L46", "3L43"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], drillrun: ["5T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["7L60", "7L1", "6T", "6L1", "5T", "5L60", "4T", "4L55", "3L49"], - endure: ["7E", "4M", "3T"], + endeavor: ["7T", "7L60", "7L1", "6T", "6L1", "5T", "5L60", "4T", "4L55", "3L49"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["5S0"], - feint: ["7L24", "7E", "6L33", "5L33", "4L33"], - focusenergy: ["7L6", "7L1", "6L6", "5L6", "4L6", "3L7"], + feint: ["7L24", "6L33", "5L33", "4L33"], + focusenergy: ["7L6", "7L1", "7V", "6L6", "5L6", "4L6", "3L7"], foresight: ["4C"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L42"], - headbutt: ["4T"], - helpinghand: ["7E", "6T", "5T", "5S0", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - highjumpkick: ["7E"], - lowkick: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "5S0", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + laserfocus: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - machpunch: ["7E", "3C"], + machpunch: ["3C"], megakick: ["3T"], mimic: ["3T"], - mindreader: ["7E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L10", "7E", "7L1", "6L10", "5L10", "4L10", "3L13"], - quickattack: ["7L15", "7L1", "6L15", "5L15", "4L15", "3L19"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L10", "7L1", "7V", "6L10", "5L10", "4L10", "3L13"], + quickattack: ["7L15", "7L1", "7V", "6L15", "5L15", "4L15", "3L19"], quickguard: ["7L46", "6L46", "5L46"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7L19", "7E", "6L24", "5L24", "4L24", "3L25"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L19", "7V", "6L24", "5L24", "4L24", "3L25"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rollingkick: ["7L1", "6L1", "5L1", "4L1", "3L1"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollingkick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], rollout: ["4T"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["5S0", "4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - triplekick: ["7L33", "6L19", "5L19", "4L19", "3L20"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triplekick: ["7L33", "7V", "6L19", "5L19", "4L19", "3L20"], twister: ["4T"], - vacuumwave: ["7E", "4T"], + vacuumwave: ["4T"], wideguard: ["7L46", "6L46", "5L46"], workup: ["7M", "5M"], }}, lickitung: {learnset: { amnesia: ["7E", "6E", "5E", "4E"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7E", "6E"], - bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bellydrum: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], - bind: ["6T", "5T"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "7V", "7V", "6E", "5E", "4E", "3T", "3E"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], bubblebeam: ["7V"], @@ -13601,107 +11700,109 @@ exports.BattleLearnsets = { chipaway: ["7L37", "6L37", "5L37"], confide: ["7M", "6M"], counter: ["7V", "3T"], - curse: ["7E", "6E", "5E", "4E", "3E"], - cut: ["7V", "6M", "5M", "4M", "3M"], - defensecurl: ["7L9", "7V", "6L9", "5L9", "4L9", "3T", "3L12", "3S1"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L9", "7V", "7V", "6L9", "5L9", "4L9", "3T", "3L12", "3S1"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7L25", "7V", "6L25", "5L25", "4L25", "3L34"], + disable: ["7L25", "7V", "7V", "6L25", "5L25", "4L25", "3L34"], doubleedge: ["7V", "3T", "3S1"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], dragontail: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hammerarm: ["7E", "6E", "5E", "4E"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], healbell: ["3S0"], helpinghand: ["3S1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3L18"], - lick: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - magnitude: ["7E", "6E", "5E", "4E", "3E"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3L18"], + lick: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + magnitude: ["7E", "7V", "6E", "5E", "4E", "3E"], mefirst: ["7L41", "6L41", "5L41", "4L37"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], muddywater: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], poweruppunch: ["6M"], powerwhip: ["7L53", "6L53", "5L53", "4L49"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], refresh: ["7L45", "6L45", "5L45", "4L41", "3L51"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["5D", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L33", "6L33", "5L33", "4T", "4L33", "3T", "3S1"], + rollout: ["7L33", "7V", "6L33", "5L33", "4T", "4L33", "3T", "3S1"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - screech: ["7L49", "7V", "6L49", "5L49", "4L45", "3L45"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + screech: ["7L49", "7V", "7V", "6L49", "5L49", "4L45", "3L45"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - slam: ["7L29", "7V", "6L29", "5L29", "4L29", "3L40"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "4E", "3T", "3E"], + slam: ["7L29", "7V", "7V", "6L29", "5L29", "4L29", "3L40"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5D", "5T", "5E", "4M", "4E", "3T", "3E"], smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + snore: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stomp: ["7L21", "7V", "6L21", "5L21", "4L21", "3L23"], - strength: ["7V", "6M", "5M", "4M", "3M"], + stomp: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L23"], + stompingtantrum: ["7T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L5", "7V", "6L5", "5L5", "4L5", "3L7"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7V", "7V", "6L5", "5L5", "4L5", "3L7"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7E"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], wish: ["3S0"], workup: ["7M", "5M"], - wrap: ["7L17", "7V", "6L17", "5L17", "4L17", "3L29"], + wrap: ["7L17", "7V", "7V", "6L17", "5L17", "4L17", "3L29"], wringout: ["7L57", "6L57", "5L57", "4L53"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], }}, lickilicky: {learnset: { - aquatail: ["6T", "5T", "4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], - bind: ["6T", "5T"], + bind: ["7T", "6T", "5T"], blizzard: ["7M", "6M", "5M", "4M"], - block: ["6T", "5T", "4T"], + block: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M"], brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], @@ -13720,11 +11821,11 @@ exports.BattleLearnsets = { explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], + firepunch: ["7T", "6T", "5T", "4T"], flamethrower: ["7M", "6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "4M", "4L57"], @@ -13732,11 +11833,11 @@ exports.BattleLearnsets = { hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], - knockoff: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], lick: ["7L1", "6L1", "5L1", "4L1"], mefirst: ["7L41", "6L41", "5L41", "4L37"], mudslap: ["4T"], @@ -13760,12 +11861,13 @@ exports.BattleLearnsets = { screech: ["7L49", "6L49", "5L49", "4L45"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], + shockwave: ["7T", "6T", "4M"], slam: ["7L29", "6L29", "5L29", "4L29"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], stomp: ["7L21", "6L21", "5L21", "4L21"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], @@ -13776,253 +11878,261 @@ exports.BattleLearnsets = { thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], + waterpulse: ["7T", "6T", "4M"], whirlpool: ["4M"], workup: ["7M", "5M"], wrap: ["7L17", "6L17", "5L17", "4L17"], wringout: ["7L57", "7L1", "6L1", "5L57", "4L53"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, koffing: {learnset: { assurance: ["7L12", "6L12", "5L15", "4L15"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7L42", "6L42"], bide: ["7V"], captivate: ["4M"], clearsmog: ["7L15", "6L15", "5L19"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E"], - darkpulse: ["7M", "6M", "5T", "5D", "4M"], - destinybond: ["7L40", "7E", "6L40", "6E", "5L51", "5E", "4L46", "4E", "3L45", "3E"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L42", "4M", "4L37", "3T", "3L41"], + curse: ["7E", "7V", "6E", "5E", "4E"], + darkpulse: ["7M", "6M", "5D", "5T", "4M"], + destinybond: ["7L40", "7E", "7V", "6L40", "6E", "5L51", "5E", "4L46", "4E", "3L45", "3E"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + explosion: ["7M", "7L37", "7V", "7V", "6M", "6L37", "5M", "5L42", "4M", "4L37", "3T", "3L41"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grudge: ["7E", "6E", "5E", "4E"], gyroball: ["7M", "7L29", "6M", "6L29", "5M", "5L37", "4M", "4L33"], - haze: ["7L26", "7V", "6L26", "5L33", "4L28", "3L33"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L26", "7V", "7V", "6L26", "5L33", "4L28", "3L33"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], memento: ["7L45", "6L45", "5L55", "4L51", "3L49"], mimic: ["7V", "3T"], naturalgift: ["4M"], - painsplit: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + painsplit: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], payback: ["7M", "6M", "5M", "4M"], - poisongas: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "4E", "3E"], - psywave: ["7E", "6E", "5E", "4E", "3E"], + poisongas: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + psywave: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L23", "7V", "6L23", "5L24", "4L19", "3T", "3L17"], + selfdestruct: ["7L23", "7V", "7V", "6L23", "5L24", "4L19", "3T", "3L17"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7L18", "7V", "6L18", "5L28", "4L24", "3L21"], - sludgebomb: ["7M", "7L34", "6M", "6L34", "5M", "5L46", "4M", "4L42", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludge: ["7L18", "7V", "7V", "6L18", "5L28", "4L24", "3L21"], + sludgebomb: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L46", "4M", "4L42", "3M"], sludgewave: ["5D"], - smog: ["7L4", "7V", "6L4", "5L6", "5D", "4L6", "3L9"], - smokescreen: ["7L7", "7V", "6L7", "5L10", "4L10", "3L25"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + smog: ["7L4", "7V", "7V", "6L4", "5D", "5L6", "4L6", "3L9"], + smokescreen: ["7L7", "7V", "7V", "6L7", "5L10", "4L10", "3L25"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], spitup: ["7E", "6E", "5E"], stockpile: ["7E", "6E", "5E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7E", "6E", "5E"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7E", "6E"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], + venomdrench: ["7E"], venoshock: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], + zapcannon: ["7V"], }}, weezing: {learnset: { assurance: ["7L12", "6L12", "5L15", "4L15"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7L51", "6L50"], bide: ["7V"], captivate: ["4M"], clearsmog: ["7L15", "6L15", "5L19"], confide: ["7M", "6M"], + curse: ["7V"], darkpulse: ["7M", "6M", "5T", "4M"], - destinybond: ["7L46", "6L46", "5L59", "4L55", "3L51"], + destinybond: ["7L46", "7V", "6L46", "5L59", "4L55", "3L51"], doublehit: ["7L1", "6L29", "5L39", "4L33"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L46", "4M", "4L40", "3T", "3L44"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + explosion: ["7M", "7L40", "7V", "7V", "6M", "6L40", "5M", "5L46", "4M", "4L40", "3T", "3L44"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "7L29", "6M", "5M", "4M"], - haze: ["7L26", "7V", "6L26", "5L33", "4L28", "3L33"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + haze: ["7L26", "7V", "7V", "6L26", "5L33", "4L28", "3L33"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], memento: ["7L57", "6L54", "5L65", "4L63", "3L58"], mimic: ["7V", "3T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], - poisongas: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + poisongas: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L23", "7V", "6L23", "5L24", "4L19", "3T", "3L1"], + selfdestruct: ["7L23", "7V", "7V", "6L23", "5L24", "4L19", "3T", "3L1"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7L18", "7V", "6L18", "5L28", "4L24", "3L21"], - sludgebomb: ["7M", "7L34", "6M", "6L34", "5M", "5L52", "4M", "4L48", "3M"], - smog: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - smokescreen: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L25"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludge: ["7L18", "7V", "7V", "6L18", "5L28", "4L24", "3L21"], + sludgebomb: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L52", "4M", "4L48", "3M"], + smog: ["7L4", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + smokescreen: ["7L7", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L25"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], venoshock: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], + zapcannon: ["7V"], }}, rhyhorn: {learnset: { ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], bulldoze: ["7M", "7L21", "6M", "6L21", "5M", "5L30"], captivate: ["4M"], chipaway: ["7L25", "6L25", "5L34"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], - crunch: ["7E", "6E", "5E", "4E", "3E"], + counter: ["7E", "7V", "6E", "5D", "5E", "4E", "3T", "3E"], + crunch: ["7E", "7V", "6E", "5E", "4E", "3E"], crushclaw: ["7E", "6E", "5E", "4E", "3E"], - curse: ["7E", "6E", "5E", "4E", "3E"], - dig: ["7V", "6M", "5M", "4M", "3M"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "5D", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragonrush: ["7E", "6E", "5E", "4E"], - drillrun: ["7L33", "6T", "6L33", "5T", "5L45"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L56", "4M", "4L49", "3M", "3L52"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + drillrun: ["7T", "7L33", "6T", "6L33", "5T", "5L45"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L45", "7V", "7V", "6M", "6L45", "5M", "5L56", "4M", "4L49", "3M", "3L52"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], firefang: ["7E", "6E", "5E", "4E"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L5", "7V", "6L5", "5L12", "4L13", "3L15"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L5", "7V", "7V", "6L5", "5L12", "4L13", "3L15"], guardsplit: ["7E", "6E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - horndrill: ["7L53", "7V", "6L53", "5L63", "4L37", "3L38"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + horndrill: ["7L53", "7V", "7V", "6L53", "5L63", "4L37", "3L38"], icebeam: ["7M", "6M", "5M", "4M", "3M"], icefang: ["7E", "6E", "5E", "4E"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], leer: ["7V"], - magnitude: ["7E", "6E", "5E", "4E", "3E"], + magnitude: ["7E", "7V", "6E", "5E", "4E", "3E"], megahorn: ["7L49", "6L49", "5L67", "4L57", "3L57"], metalburst: ["7E", "6E"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7V"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L29", "6L23", "5L23", "4L25", "3L29"], rockclimb: ["7E", "6E", "5E", "4M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L9", "6L9", "5L19", "4L21", "3L24"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + scaryface: ["7L9", "7V", "6L9", "5L19", "4L21", "3L24"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7E", "7V", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L13", "6M", "6L13"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stomp: ["7L17", "7V", "6L8", "5L8", "4L9", "3L10"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stomp: ["7L17", "7V", "7V", "6L8", "5L8", "4L9", "3L10"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L41", "6M", "6L41", "5M", "5L52", "4M", "4L45"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L37", "7V", "6L37", "5L41", "4L33", "3L43"], + tailwhip: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L37", "7V", "7V", "6L37", "5L41", "4L33", "3L43"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7V"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderfang: ["7E", "6E", "5E", "4E"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + zapcannon: ["7V"], }}, rhydon: {learnset: { ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], @@ -14032,109 +12142,112 @@ exports.BattleLearnsets = { chipaway: ["7L25", "6L25", "5L34"], confide: ["7M", "6M"], counter: ["7V", "3T"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - dig: ["7V", "6M", "5M", "4M", "3M"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - drillrun: ["7L33", "6T", "6L33", "5T", "5L47"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L48", "7V", "6M", "6L48", "5M", "5L62", "4M", "4L49", "3M", "3L58", "3S0"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + drillrun: ["7T", "7L33", "6T", "6L33", "5T", "5L47"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L48", "7V", "7V", "6M", "6L48", "5M", "5L62", "4M", "4L49", "3M", "3L58", "3S0"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], hammerarm: ["7L1", "6L42", "5L42", "4L42"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], helpinghand: ["3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - horndrill: ["7L62", "7L1", "7V", "6L1", "5L71", "4L37", "3L38"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + horndrill: ["7L62", "7L1", "7V", "7V", "6L1", "5L71", "4L37", "3L38"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], leer: ["7V"], megahorn: ["7L55", "6L1", "5L77", "4L57", "3L66", "3S0"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], payday: ["7V"], poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L29", "6L23", "5L23", "4L25", "3L29"], rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L9", "7L1", "6L1", "5L19", "4L21", "3L24", "3S0"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + scaryface: ["7L9", "7L1", "7V", "6L1", "5L19", "4L21", "3L24", "3S0"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "7L13", "6M", "6L13", "5M"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stomp: ["7L17", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stomp: ["7L17", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L41", "6M", "6L41", "5M", "5L56", "4M", "4L45"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L37", "7V", "6L37", "5L41", "4L33", "3L46"], + tailwhip: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L37", "7V", "7V", "6L37", "5L41", "4L33", "3L46"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], watergun: ["7V"], whirlpool: ["4M"], + zapcannon: ["7V"], }}, rhyperior: {learnset: { ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], avalanche: ["4M"], blizzard: ["7M", "6M", "5M", "4M"], - block: ["6T", "5T", "4T"], + block: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M"], brutalswing: ["7M"], bulldoze: ["7M", "7L21", "6M", "6L21", "5M"], @@ -14144,21 +12257,21 @@ exports.BattleLearnsets = { cut: ["6M", "5M", "4M"], dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - drillrun: ["7L33", "6T", "6L33", "5T", "5L47"], - earthpower: ["6T", "5T", "4T"], + drillrun: ["7T", "7L33", "6T", "6L33", "5T", "5L47"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "7L48", "6M", "6L48", "5M", "5L62", "4M", "4L49"], - endeavor: ["6T", "5T", "4T"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], + firepunch: ["7T", "6T", "5T", "4T"], flamethrower: ["7M", "6M", "5M", "4M"], flashcannon: ["7M", "6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], furyattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], furycutter: ["4T"], @@ -14170,15 +12283,15 @@ exports.BattleLearnsets = { horndrill: ["7L62", "7L1", "6L1", "5L71", "4L37"], hyperbeam: ["7M", "6M", "5M", "4M"], icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], megahorn: ["7L55", "6L1", "5L77", "4L57"], mudslap: ["4T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], poweruppunch: ["6M"], @@ -14200,19 +12313,20 @@ exports.BattleLearnsets = { scaryface: ["7L9", "7L1", "6L1", "5L19", "4L21"], secretpower: ["6M", "4M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], smackdown: ["7M", "7L13", "6M", "6L13", "5M"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], stomp: ["7L17", "6L1", "5L1", "4L1"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L41", "6M", "6L41", "5M", "5L56", "4M", "4L45"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swordsdance: ["7M", "6M", "5M", "4M"], @@ -14221,9 +12335,9 @@ exports.BattleLearnsets = { thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], whirlpool: ["4M"], }}, happiny: {learnset: { @@ -14234,12 +12348,12 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], copycat: ["7L5", "6L5", "5L5", "4L5"], counter: ["7E", "6E", "5E", "4E"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "4M"], + drainpunch: ["7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["7E", "6E", "5E", "4M"], facade: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], @@ -14248,16 +12362,16 @@ exports.BattleLearnsets = { fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + gravity: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - healbell: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + healbell: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], hiddenpower: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], lightscreen: ["7M", "6M", "5M", "4M"], metronome: ["7E", "6E", "5E", "4E"], mudbomb: ["7E", "6E", "5E", "4E"], @@ -14269,7 +12383,7 @@ exports.BattleLearnsets = { psychic: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], refresh: ["7L9", "6L9", "5L9", "4L9"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], @@ -14278,9 +12392,9 @@ exports.BattleLearnsets = { safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M", "4E"], sunnyday: ["7M", "6M", "5M", "4M"], @@ -14288,17 +12402,18 @@ exports.BattleLearnsets = { sweetkiss: ["7L12", "6L12", "5L12", "4L12"], thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, chansey: {learnset: { + allyswitch: ["7T"], aromatherapy: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bestow: ["7L20", "6L20", "5L20"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], @@ -14307,122 +12422,128 @@ exports.BattleLearnsets = { captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7E", "7V", "6E", "5E", "5D", "4E", "3T"], - covet: ["6T", "5T"], + counter: ["7E", "7V", "6E", "5D", "5E", "4E", "3T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["7L1", "7V", "6L1", "5L1", "4L31", "3T", "3L41"], - doubleedge: ["7L54", "7L1", "7V", "6L1", "5L54", "4L46", "3T", "3L57"], - doubleslap: ["7L12", "7V", "6L12", "5L12", "4L16", "3L17"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + defensecurl: ["7L1", "7V", "7V", "6L1", "5L1", "4L31", "3T", "3L41"], + doubleedge: ["7L65", "7L54", "7L1", "7V", "7V", "6L1", "5L54", "4L46", "3T", "3L57"], + doubleslap: ["7L12", "7V", "7V", "6L12", "5L12", "4L16", "3L17"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - eggbomb: ["7L42", "7V", "6L42", "5L42", "4L38", "3L35"], - endeavor: ["6T", "5T", "4T"], - endure: ["7E", "6E", "5E", "4M", "3T"], + eggbomb: ["7L44", "7L42", "7V", "7V", "6L42", "5L42", "4L38", "3L35"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - fling: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L27"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L35", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L27"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - growl: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], + gravity: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + growl: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S1"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - healbell: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - healingwish: ["7L50", "6L50", "5L50", "4L42"], - healpulse: ["7L38", "6L38", "5L38"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + healingwish: ["7L57", "7L50", "6L50", "5L50", "4L42"], + healpulse: ["7L39", "7L38", "6L38", "5L38"], + helpinghand: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L34", "3M", "3L49"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "7L50", "7L46", "7V", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L34", "3M", "3L49"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], - metronome: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + metronome: ["7E", "7V", "7V", "6E", "5E", "4E", "3T", "3E"], mimic: ["7V", "3T"], - minimize: ["7L23", "7V", "6L23", "5L23", "4L20", "3L23"], + minimize: ["7L23", "7V", "7V", "6L23", "5L23", "4L20", "3L23"], mudbomb: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], - pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + pound: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], poweruppunch: ["6M"], - present: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7V"], refresh: ["7L9", "6L9", "5L9", "4L9", "3L9", "3S1"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7E", "7V", "6E", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sing: ["7L31", "7V", "6L31", "5L31", "4L23", "3L29"], - skillswap: ["6T", "5T", "4M", "3M", "3S2"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sing: ["7L31", "7V", "7V", "6L31", "5L31", "4L23", "3L29"], + skillswap: ["7T", "6T", "5T", "4M", "3M", "3S2"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - softboiled: ["7L16", "7V", "6L16", "5L16", "4L12", "3T", "3L13", "3S2"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + softboiled: ["7L16", "7V", "7V", "6L16", "5L16", "4L12", "3T", "3L13", "3S2"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], sweetkiss: ["3S2"], sweetscent: ["3S0"], - tailwhip: ["7L5", "7V", "6L5", "5L5", "4L5", "3L5", "3S1"], + tailwhip: ["7L5", "7V", "7V", "6L5", "5L5", "4L5", "3L5", "3S1"], takedown: ["7L27", "7V", "6L27", "5L27"], + telekinesis: ["7T"], teleport: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], wish: ["3S0"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, blissey: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bestow: ["7L20", "6L20", "5L20"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], @@ -14431,179 +12552,187 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["7L1", "6L1", "5L1", "4L31", "3T", "3L33"], - doubleedge: ["7L54", "7L1", "6L1", "5L54", "4L46", "3T", "3L47"], - doubleslap: ["7L12", "6L12", "5L12", "4L16", "3L13"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L31", "3T", "3L33"], + doubleedge: ["7L65", "7L54", "7L1", "7V", "6L1", "5L54", "4L46", "3T", "3L47"], + doubleslap: ["7L12", "7V", "6L12", "5L12", "4L16", "3L13"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - eggbomb: ["7L42", "6L42", "5L42", "4L38", "3L28"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + eggbomb: ["7L44", "7L42", "7V", "6L42", "5L42", "4L38", "3L28"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L27"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - growl: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L1"], + gravity: ["7T", "6T", "5T", "4T"], + growl: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - healingwish: ["7L50", "6L50", "5L50", "4L42"], - healpulse: ["7L38", "6L38", "5L38"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + healingwish: ["7L57", "7L50", "6L50", "5L50", "4L42"], + healpulse: ["7L39", "7L38", "6L38", "5L38"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L34", "3M", "3L40"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "7L50", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L34", "3M", "3L40"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], mimic: ["3T"], - minimize: ["7L23", "6L23", "5L23", "4L20", "3L18"], - mudslap: ["4T", "3T"], + minimize: ["7L23", "7V", "6L23", "5L23", "4L20", "3L18"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - pound: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L1"], + pound: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], refresh: ["7L9", "6L9", "5L9", "5S0", "4L9", "3L7"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sing: ["7L31", "6L31", "5L31", "4L23", "3L23"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - softboiled: ["7L16", "6L16", "5L16", "4L12", "3T", "3L10"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sing: ["7L31", "7V", "6L31", "5L31", "4L23", "3L23"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + softboiled: ["7L16", "7V", "6L16", "5L16", "4L12", "3T", "3L10"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tailwhip: ["7L5", "6L5", "5L5", "5S0", "4L5", "3L4"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tailwhip: ["7L5", "7V", "6L5", "5L5", "5S0", "4L5", "3L4"], takedown: ["7L27", "6L27", "5L27"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, tangela: {learnset: { - absorb: ["7L10", "7V", "6L10", "5L8", "4L8", "3L10"], - amnesia: ["7E", "6E", "5E", "4E", "3E"], + absorb: ["7L10", "7V", "7V", "6L10", "5L8", "4L8", "3L10"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], ancientpower: ["7L38", "6L38", "5L36", "4T", "4L33"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["7L17", "7V", "6T", "6L17", "5T", "5L22", "4L22", "3L28"], + bind: ["7T", "7L17", "7V", "7V", "6T", "6L17", "5T", "5L22", "4L22", "3L28"], bodyslam: ["7V", "3T"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7E", "6E", "5E", "4E", "3E"], - constrict: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - cut: ["7V", "6M", "5M", "4M", "3M"], + confusion: ["7E", "7V", "6E", "5E", "4E", "3E"], + constrict: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "4E"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E", "3E"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4M", "3M"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7L36", "7E", "7V", "6T", "6L36", "6E", "5T", "5L36", "5E", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], grassyterrain: ["7L48", "6L48"], - growth: ["7L20", "7V", "6L20", "5L12", "4L12", "3L13"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + growth: ["7L20", "7V", "7V", "6L20", "5L12", "4L12", "3L13"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], ingrain: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - knockoff: ["7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], + knockoff: ["7T", "7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], leafstorm: ["7E", "6E", "5E", "4E"], - leechseed: ["7E", "6E", "5E", "5D", "4E", "3E"], - megadrain: ["7L23", "7E", "7V", "6L23", "6E", "5L26", "5E", "4L26", "4E", "3L31", "3E"], + leechseed: ["7E", "6E", "5D", "5E", "4E", "3E"], + megadrain: ["7L23", "7E", "7V", "7V", "6L23", "6E", "5L26", "5E", "4L26", "4E", "3L31", "3E"], mimic: ["7V", "3T"], morningsun: ["3S0"], naturalgift: ["7L33", "7E", "6L33", "6E", "5L40", "5E", "4M", "4L40"], naturepower: ["7M", "7E", "6E", "5E", "4E", "3E"], - painsplit: ["6T", "5T", "4T"], - poisonpowder: ["7L14", "7V", "6L14", "5L15", "4L15", "3L19"], + painsplit: ["7T", "6T", "5T", "4T"], + poisonpowder: ["7L14", "7V", "7V", "6L14", "5L15", "4L15", "3L19"], powerswap: ["7E", "6E", "5E", "4E"], powerwhip: ["7L50", "6L50", "5L54", "4L54"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], rage: ["7V"], ragepowder: ["7E", "6E", "5E"], - reflect: ["7M", "6M", "5M", "4M", "4E", "3E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "4E", "3E"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "5D", "4T"], - shockwave: ["6T", "4M"], + seedbomb: ["7T", "6T", "5D", "5T", "4T"], + shockwave: ["7T", "6T", "4M"], skullbash: ["7V"], - slam: ["7L41", "7V", "6L41", "5L43", "4L43", "3L40"], - sleeppowder: ["7L4", "7V", "6L4", "5L5", "5D", "4L5", "3L4"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], - stunspore: ["7L30", "7V", "6L30", "5L29", "4L29", "3L37"], + slam: ["7L41", "7V", "7V", "6L41", "5L43", "4L43", "3L40"], + sleeppowder: ["7L4", "7V", "7V", "6L4", "5D", "5L5", "4L5", "3L4"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S0"], + stunspore: ["7L30", "7V", "7V", "6L30", "5L29", "4L29", "3L37"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], tickle: ["7L44", "6L44", "5L47", "4L47", "3L46"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - vinewhip: ["7L7", "7V", "6L7", "5L19", "4L19", "3L22"], - worryseed: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + vinewhip: ["7L7", "7V", "7V", "6L7", "5L19", "4L19", "3L22"], + wakeupslap: ["7E"], + worryseed: ["7T", "6T", "5T", "4T"], wringout: ["7L46", "6L46", "5L50", "4L50"], }}, tangrowth: {learnset: { @@ -14611,8 +12740,8 @@ exports.BattleLearnsets = { aerialace: ["7M", "6M", "5M", "4M"], ancientpower: ["7L40", "6L40", "5L36", "4T", "4L33", "4S0"], attract: ["7M", "6M", "5M", "4M"], - bind: ["7L17", "6T", "6L17", "5T", "5L22", "4L22"], - block: ["7L56", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L57"], + bind: ["7T", "7L17", "6T", "6L17", "5T", "5L22", "4L22"], + block: ["7T", "7L56", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L57"], brickbreak: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], bulletseed: ["4M"], @@ -14622,7 +12751,7 @@ exports.BattleLearnsets = { cut: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], earthquake: ["7M", "6M", "5M", "4M"], - endeavor: ["6T", "5T"], + endeavor: ["7T", "6T", "5T"], endure: ["4M"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], @@ -14630,7 +12759,7 @@ exports.BattleLearnsets = { fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["7L36", "6T", "6L36", "5T", "5L36", "4M"], + gigadrain: ["7T", "7L36", "6T", "6L36", "5T", "5L36", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], grassyterrain: ["7L50", "6L50"], @@ -14640,13 +12769,13 @@ exports.BattleLearnsets = { hyperbeam: ["7M", "6M", "5M", "4M"], infestation: ["7M", "6M"], ingrain: ["7L1", "6L1", "5L1", "4L1"], - knockoff: ["7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], + knockoff: ["7T", "7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], megadrain: ["7L23", "6L23", "5L26", "4L26"], morningsun: ["4S0"], mudslap: ["4T"], naturalgift: ["7L33", "6L33", "5L40", "4M", "4L40", "4S0"], naturepower: ["7M", "6M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], poisonpowder: ["7L14", "6L14", "5L15", "4L15"], @@ -14661,36 +12790,37 @@ exports.BattleLearnsets = { rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], - shockwave: ["6T", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M"], slam: ["7L43", "6L43", "5L43", "4L43"], sleeppowder: ["7L4", "6L4", "5L5", "4L5"], sleeptalk: ["7M", "6M", "5T", "4M"], sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M"], stunspore: ["7L30", "6L30", "5L29", "4L29"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M", "4S0"], swagger: ["7M", "6M", "5M", "4M"], swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T"], thief: ["7M", "6M", "5M", "4M"], tickle: ["7L46", "6L46", "5L47", "4L47"], toxic: ["7M", "6M", "5M", "4M"], vinewhip: ["7L7", "6L7", "5L19", "4L19"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], wringout: ["7L49", "6L49", "5L50", "4L50"], }}, kangaskhan: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], - bite: ["7L13", "7V", "6L13", "5L13", "4L13", "3L7", "3S1"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L13", "7V", "7V", "6L13", "5L13", "4L13", "3L7", "3S1"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], @@ -14698,578 +12828,599 @@ exports.BattleLearnsets = { captivate: ["4M"], chipaway: ["7L31", "6L31", "5L31"], circlethrow: ["7E", "6E", "5E"], - cometpunch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + cometpunch: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], confide: ["7M", "6M"], - counter: ["7E", "7V", "6E", "5E", "5D", "4E", "3T", "3E"], - covet: ["6T", "5T"], + counter: ["7E", "7V", "6E", "5D", "5E", "4E", "3T", "3E"], + covet: ["7T", "6T", "5T"], crunch: ["7L37", "6L37", "5L37", "4L31"], crushclaw: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7E", "6E", "5E", "4E", "3E"], - dizzypunch: ["7L34", "7V", "6L34", "5L34", "4L25", "3L43", "3S2"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], + dizzypunch: ["7L34", "7V", "7V", "6L34", "5L34", "4L25", "3L43", "3S2"], doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T"], doublehit: ["7L19", "6L19", "5L19", "4L43"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "5D", "4M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "7V", "6M", "6S3", "5M", "4M", "3M", "3S2"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - endure: ["7L43", "6L43", "5L43", "4M", "4L34", "3T", "3L37"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L7", "6L7", "6S3", "5L7", "5D", "4L7", "3L19"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5D", "5T", "4M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "7V", "6M", "6S3", "5M", "4M", "3M", "3S2"], + endeavor: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + endure: ["7L43", "7V", "6L43", "5L43", "4M", "4L34", "3T", "3L37"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L7", "6L7", "6S3", "5D", "5L7", "4L7", "3L19"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7E", "6E", "5E", "4E", "3E"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focusenergy: ["7E", "7V", "6E", "5E", "4E", "3E"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], hammerarm: ["7E", "6E", "5E", "4E"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - lowkick: ["6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], - megapunch: ["7L25", "7V", "6L25", "5L25", "4L19", "3T", "3L25"], + megapunch: ["7L25", "7V", "7V", "6L25", "5L25", "4L19", "3T", "3L25"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["7L46", "6T", "6L46", "5T", "5L46", "4T", "4L37"], + outrage: ["7T", "7L46", "6T", "6L46", "5T", "5L46", "4T", "4L37"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L22", "7V", "6L22", "5L22", "4L22", "3L31"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L22", "7V", "7V", "6L22", "5L22", "4L22", "3L31"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "6S3", "5M", "4M", "3M"], - reversal: ["7L50", "6L50", "5L55", "4L49", "3L49"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "6S3", "5M", "4M", "3M"], + reversal: ["7L50", "7V", "6L50", "5L55", "4L49", "3L49"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], sing: ["3S2"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], - stomp: ["7E", "6E", "5E", "4E", "3E"], - strength: ["7V", "6M", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], + stomp: ["7E", "7V", "6E", "5E", "4E", "3E"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], suckerpunch: ["7L49", "6L49", "6S3", "5L49", "4T", "4L46"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tailwhip: ["7L10", "7V", "6L10", "5L10", "4L10", "3L13", "3S2"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tailwhip: ["7L10", "7V", "7V", "6L10", "5L10", "4L10", "3L13", "3S2"], takedown: ["7V"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], trumpcard: ["7E", "6E", "5E"], - uproar: ["7E", "6T", "6E", "5T", "5E", "4T"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], wish: ["3S0"], workup: ["7M", "5M"], yawn: ["3S0"], + zapcannon: ["7V"], }}, horsea: {learnset: { - agility: ["7L36", "7V", "6L23", "5L23", "4L23", "3L36"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + agility: ["7L36", "7V", "7V", "6L23", "5L23", "4L23", "3L36"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["7L31", "6L30", "5L30", "5D", "4M", "4L30"], - bubble: ["7L1", "7V", "6L1", "5L1", "5S0", "5D", "4L1", "3L1"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["7L31", "6L30", "5D", "5L30", "4M", "4L30"], + bubble: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "5S0", "4L1", "3L1"], bubblebeam: ["7L21", "7V", "6L18", "5L18", "4L18"], captivate: ["4M"], clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - disable: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7V"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "7V", "6E", "5E", "4E", "3E"], dragondance: ["7L46", "6L38", "5L38", "4L38", "3L50"], - dragonpulse: ["7L41", "6T", "6L41", "5T", "5L42", "4M", "4L42"], - dragonrage: ["7E", "6E", "5E", "4E", "3E"], - endure: ["4M", "3T"], + dragonpulse: ["7T", "7L41", "6T", "6L41", "5T", "5L42", "4M", "4L42"], + dragonrage: ["7E", "7V", "6E", "5E", "4E", "3E"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], flashcannon: ["7M", "6M", "5M", "4M"], focusenergy: ["7L26", "6L14", "5L14", "4L14"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L52", "7V", "6L35", "5L35", "4L35", "3L43"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L52", "7V", "7V", "6L35", "5L35", "4L35", "3L43"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - leer: ["7L9", "7V", "6L8", "5L8", "4L8", "3L15"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + leer: ["7L9", "7V", "7V", "6L8", "5L8", "4L8", "3L15"], mimic: ["7V", "3T"], muddywater: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - octazooka: ["7E", "6E", "5E", "5D", "4E", "3E"], - outrage: ["7E", "6T", "6E", "5T", "5E", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], + octazooka: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + outrage: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7E", "6E", "5E", "4E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L5", "7V", "6L4", "5L4", "4L4", "3L8"], - snore: ["6T", "5T", "4T", "3T"], - splash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L5", "7V", "7V", "6L4", "5L4", "4L4", "3L8"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + splash: ["7E", "7V", "6E", "5E", "4E", "3E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - twister: ["7L17", "6L17", "5L26", "4T", "4L26", "3L29"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L13", "7V", "6L1", "5L11", "4L11", "3L22"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - whirlpool: ["4M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L17", "7V", "6L17", "5L26", "4T", "4L26", "3L29"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L13", "7V", "7V", "6L1", "5L11", "4L11", "3L22"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7V", "4M"], }}, seadra: {learnset: { - agility: ["7L38", "7V", "6L23", "5L23", "4L23", "3L40", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L38", "7V", "7V", "6L23", "5L23", "4L23", "3L40", "3S0"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], brine: ["7L31", "6L30", "5L30", "4M", "4L30"], - bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bubble: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], bubblebeam: ["7L21", "7V", "6L18", "5L18", "4L18"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragondance: ["7L52", "6L48", "5L48", "4L48", "3L62"], - dragonpulse: ["7L45", "6T", "6L45", "5T", "5L57", "4M", "4L57"], - endure: ["4M", "3T"], + dragonpulse: ["7T", "7L45", "6T", "6L45", "5T", "5L57", "4M", "4L57"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], focusenergy: ["7L26", "6L14", "5L14", "4L14"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L60", "7L1", "7V", "6L1", "5L40", "4L40", "3L51"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L60", "7L1", "7V", "7V", "6L1", "5L40", "4L40", "3L51"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - leer: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + laserfocus: ["7T"], + leer: ["7L9", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], mimic: ["7V", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], + outrage: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - twister: ["7L17", "6L17", "5L26", "4T", "4L26", "3L29", "3S0"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L13", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L17", "7V", "6L17", "5L26", "4T", "4L26", "3L29", "3S0"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L13", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], }}, kingdra: {learnset: { - agility: ["7L38", "6L23", "5L23", "4L23", "3L40", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L38", "7V", "6L23", "5L23", "4L23", "3L40", "3S0"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brine: ["7L31", "6L30", "5L30", "4M", "4L30"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], bubblebeam: ["7L21", "6L18", "5L18", "4L18"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dracometeor: ["7T", "6T", "5T", "5S1", "4T"], + dragonbreath: ["7V"], dragondance: ["7L52", "6L48", "5L48", "4L48", "3L62"], - dragonpulse: ["7L45", "6T", "6L1", "5T", "5L57", "5S1", "4M", "4L57"], - endure: ["4M", "3T"], + dragonpulse: ["7T", "7L45", "6T", "6L1", "5T", "5L57", "5S1", "4M", "4L57"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], focusenergy: ["7L26", "6L14", "5L14", "4L14"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L60", "7L1", "6L1", "5L40", "4L40", "3L51"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L60", "7L1", "7V", "6L1", "5L40", "4L40", "3L51"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - leer: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], mimic: ["3T"], muddywater: ["5S1"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "5S1", "4M", "3M"], + outrage: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "5S1", "4M", "3M"], quash: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - snore: ["6T", "5T", "4T", "3T"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["7L17", "6L17", "5L26", "4T", "4L26", "3L29", "3S0"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L13", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L17", "7V", "6L17", "5L26", "4T", "4L26", "3L29", "3S0"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L13", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], yawn: ["7L1", "6L1", "5L1", "4L1"], }}, goldeen: {learnset: { - agility: ["7L29", "7V", "6L29", "5L47", "4L47", "3L52"], + agility: ["7L29", "7V", "7V", "6L29", "5L47", "4L47", "3L52"], aquaring: ["7L21", "6L21", "5L27", "4L27"], - aquatail: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7E", "6E", "5E", "4E"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L13", "6L13", "5L21", "4L21", "3L24"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L24", "7V", "6L24", "5L31", "4L31", "3L29"], + flail: ["7L13", "7V", "6L13", "5L21", "4L21", "3L24"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L24", "7V", "7V", "6L24", "5L31", "4L31", "3L29"], furycutter: ["4T"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L8", "7V", "6L8", "5L11", "4L11", "3L15"], - horndrill: ["7L37", "7V", "6L37", "5L41", "4L41", "3L43"], - hydropump: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L8", "7V", "7V", "6L8", "5L11", "4L11", "3L15"], + horndrill: ["7L37", "7V", "7V", "6L37", "5L41", "4L41", "3L43"], + hydropump: ["7E", "7V", "6E", "5E", "4E", "3E"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "6T", "5T", "4T"], megahorn: ["7L45", "6L45", "5L57", "4L51", "3L57"], mimic: ["7V", "3T"], mudshot: ["7E", "6E", "5E"], mudslap: ["7E", "6E", "5E", "4T", "4E"], mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], - peck: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + peck: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "5D", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E"], skullbash: ["7E", "7V", "6E", "5E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], soak: ["7L40", "6L40", "5L51"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - supersonic: ["7L5", "7V", "6L5", "5L7", "4L7", "3L10"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + supersonic: ["7L5", "7V", "7V", "6L5", "5L7", "4L7", "3L10"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwhip: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L37", "4M", "4L37", "3M", "3L38"], + throatchop: ["7T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7L32", "7V", "7V", "6M", "6L32", "5M", "5L37", "4M", "4L37", "3M", "3L38"], watergun: ["7V"], - waterpulse: ["7L16", "6T", "6L16", "5L17", "5D", "4M", "4L17", "3M"], + waterpulse: ["7T", "7L16", "6T", "6L16", "5D", "5L17", "4M", "4L17", "3M"], watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], whirlpool: ["4M"], }}, seaking: {learnset: { - agility: ["7L29", "7V", "6L29", "5L56", "4L56", "3L61"], + agility: ["7L29", "7V", "7V", "6L29", "5L56", "4L56", "3L61"], aquaring: ["7L21", "6L21", "5L27", "4L27"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], - endure: ["5D", "4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], + endure: ["7V", "5D", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L13", "6L13", "5L21", "4L21", "3L24"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L24", "7V", "6L24", "5L31", "4L31", "3L29"], + flail: ["7L13", "7V", "6L13", "5L21", "4L21", "3L24"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L24", "7V", "7V", "6L24", "5L31", "4L31", "3L29"], furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L8", "7V", "6L8", "5L11", "4L11", "3L15"], - horndrill: ["7L40", "7V", "6L40", "5L47", "4L47", "3L49"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L8", "7V", "7V", "6L8", "5L11", "4L11", "3L15"], + horndrill: ["7L40", "7V", "7V", "6L40", "5L47", "4L47", "3L49"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "6T", "5T", "4T"], megahorn: ["7L54", "7L1", "6L1", "5L72", "4L63", "3L69"], mimic: ["7V", "3T"], mudslap: ["4T"], naturalgift: ["4M"], - peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + peck: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T"], + signalbeam: ["7T", "6T", "5T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5D", "5T", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], soak: ["7L46", "6L46", "5L63"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + supersonic: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwhip: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L40", "4M", "4L40", "3M", "3L41"], + throatchop: ["7T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7L32", "7V", "7V", "6M", "6L32", "5M", "5L40", "4M", "4L40", "3M", "3L41"], watergun: ["7V"], - waterpulse: ["7L16", "6T", "6L16", "5L17", "5D", "4M", "4L17", "3M"], + waterpulse: ["7T", "7L16", "6T", "6L16", "5D", "5L17", "4M", "4L17", "3M"], watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], whirlpool: ["4M"], }}, staryu: {learnset: { + attract: ["7V"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], brine: ["7L28", "6L28", "5L36", "4M"], - bubblebeam: ["7L18", "7V", "6L18", "5L28", "4L28", "3L28"], + bubblebeam: ["7L18", "7V", "7V", "6L18", "5L28", "4L28", "3L28"], camouflage: ["7L22", "6L15", "5L19", "4L19", "3L19"], confide: ["7M", "6M"], confuseray: ["7L40", "6L40"], cosmicpower: ["7L49", "6L48", "5L55", "4L51", "3L42", "3S0"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gravity: ["6T", "5T", "4T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "7L24", "6M", "6L24", "5M", "5L37", "4M", "4L37"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L53", "7V", "6L52", "5L60", "4L55", "3L46", "3S0"], + harden: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L53", "7V", "7V", "6L52", "5L60", "4L55", "3L46", "3S0"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "5D", "4T", "3T"], - lightscreen: ["7M", "7L46", "7V", "6M", "6L33", "5M", "5L42", "4M", "4L42", "3M", "3L37", "3S0"], - magiccoat: ["6T", "5T", "4T"], + icywind: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], + lightscreen: ["7M", "7L46", "7V", "7V", "6M", "6L33", "5M", "5L42", "4M", "4L42", "3M", "3L37", "3S0"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], - minimize: ["7L31", "7V", "6L25", "5L33", "4L33", "3L33", "3S0"], + minimize: ["7L31", "7V", "7V", "6L25", "5L33", "4L33", "3L33", "3S0"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], powergem: ["7L37", "6L37", "5L51", "4L46"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L42", "7V", "6M", "6L42", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L42", "7V", "7V", "6M", "6L42", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psywave: ["7L13", "7V", "6L13"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7L7", "6L7", "5L10", "4L10", "3L10", "3S1"], - recover: ["7L10", "7V", "6L10", "5L15", "4L15", "3L15", "3S1"], - recycle: ["6T", "5T", "5D", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7L7", "7V", "6L7", "5L10", "4L10", "3L10", "3S1"], + recover: ["7L10", "7V", "7V", "6L10", "5L15", "4L15", "3L15", "3S1"], + recycle: ["7T", "6T", "5D", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], reflecttype: ["7L35", "6L35", "5L46"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rollout: ["4T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L16", "7V", "6L16", "5L24", "4T", "4L24", "3T", "3L24"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L16", "7V", "7V", "6L16", "5L24", "4T", "4L24", "3T", "3L24"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], teleport: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], twister: ["4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L4", "7V", "6L4", "5L6", "5D", "4L6", "3L6", "3S1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "7V", "7V", "6L4", "5D", "5L6", "4L6", "3L6", "3S1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + zapcannon: ["7V"], }}, starmie: {learnset: { + allyswitch: ["7T"], + attract: ["7V"], avalanche: ["4M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], brine: ["4M"], - bubblebeam: ["7V"], + bubblebeam: ["7V", "7V"], confide: ["7M", "6M"], - confuseray: ["7L40", "6L22", "5L28", "4L28", "3L33"], + confuseray: ["7L40", "7V", "6L22", "5L28", "4L28", "3L33"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], harden: ["7V"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L1", "6L1"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7L1", "6L1", "5L1", "4L1", "3L1"], - recover: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + recover: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], refresh: ["3S0"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rollout: ["4T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spotlight: ["7L1"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], - tackle: ["7V"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L1", "7V", "7V", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + tackle: ["7V", "7V"], takedown: ["7V"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], twister: ["4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M", "3S0"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - wonderroom: ["6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], }}, mimejr: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M", "4M"], barrier: ["7L1", "6L1", "5L1", "4L1"], batonpass: ["7L46", "6L46", "5L46", "4L46"], @@ -15282,10 +13433,10 @@ exports.BattleLearnsets = { confuseray: ["7E", "6E", "5E", "4E"], confusion: ["7L1", "6L1", "5L1", "4L1"], copycat: ["7L4", "6L4", "5L4", "4L4"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], doubleslap: ["7L11", "6L11", "5L15", "4L15"], doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "4M"], + drainpunch: ["7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M"], encore: ["7L18", "6L18", "5L11", "4L11"], endure: ["4M"], @@ -15293,54 +13444,56 @@ exports.BattleLearnsets = { fakeout: ["7E", "6E", "5E", "4E"], flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], futuresight: ["7E", "6E", "5E", "4E"], grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], healingwish: ["7E", "6E", "5E", "4E"], - helpinghand: ["6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hypnosis: ["7E", "6E", "5E", "4E"], - icywind: ["7E", "6T", "6E", "5T", "5E"], + icywind: ["7T", "7E", "6T", "6E", "5T", "5E"], infestation: ["7M", "6M"], lightscreen: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["7E", "6T", "6E", "5T", "5E"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "7E", "6T", "6E", "5T", "5E"], meditate: ["7L8", "6L8", "5L8", "4L8"], mimic: ["7L15", "7E", "6L15", "6E", "5L18", "5E", "4L18", "4E"], mudslap: ["4T"], nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], + pound: ["7L1"], powersplit: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M", "4M"], psybeam: ["7L25", "6L25", "5L25", "4L25"], psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39", "4M", "4L39"], + psychicterrain: ["7E"], psychup: ["7M", "6M", "5M", "4M", "4E"], psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["7L32", "6T", "6L32", "5T", "5L32", "4M", "4L32"], + recycle: ["7T", "7L32", "6T", "6L32", "5T", "5L32", "4M", "4L32"], reflect: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - roleplay: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + roleplay: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], round: ["7M", "6M", "5M"], safeguard: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L50"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], substitute: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], taunt: ["7M", "6M", "5M", "4M"], teeterdance: ["7E", "6E", "5E", "4E"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], @@ -15348,17 +13501,18 @@ exports.BattleLearnsets = { tickle: ["7L1", "6L1", "5L1", "4L1"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4T", "4L36", "4E"], + trick: ["7T", "7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4T", "4L36", "4E"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], wakeupslap: ["7E", "6E", "5E", "4E"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], }}, mrmime: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], - batonpass: ["7L46", "6L46", "5L46", "4L46", "3L47"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrier: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + batonpass: ["7L46", "7V", "6L46", "5L46", "4L46", "3L47"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -15367,528 +13521,543 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confuseray: ["7E", "6E", "5E", "4E"], - confusion: ["7L1", "7V", "6L1", "5L1", "4L1", "3L5"], + confusion: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L5"], copycat: ["7L4", "6L4", "5L4", "4L4"], counter: ["7V", "3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], doubleedge: ["7V", "3T"], - doubleslap: ["7L11", "7V", "6L11", "5L15", "4L15", "3L15"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - encore: ["7L18", "6L18", "5L11", "4L11", "3L25", "3S0"], - endure: ["4M", "3T"], + doubleslap: ["7L11", "7V", "7V", "6L11", "5L15", "4L15", "3L15"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V"], + encore: ["7L18", "7V", "6L18", "5L11", "4L11", "3L25", "3S0"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["7E", "6E", "5E", "4E", "3E"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["3S0"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], guardswap: ["7L1", "6L1", "5L1", "4L1"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypnosis: ["7E", "6E", "5E", "4E", "3E"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["7E", "6T", "6E", "5T", "5E"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7E", "7V", "6E", "5E", "4E", "3E"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7E", "6T", "6E", "5T", "5E"], infestation: ["7M", "6M"], - irondefense: ["6T", "5T", "4T"], - lightscreen: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L19"], + irondefense: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "7L22", "7V", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L19"], magicalleaf: ["7L1", "6L1", "5L1", "4L1", "3L22"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["7E", "6T", "6E", "5T", "5E"], - meditate: ["7L8", "7V", "6L8", "5L8", "4L8", "3L12"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "7E", "6T", "6E", "5T", "5E"], + meditate: ["7L8", "7V", "7V", "6L8", "5L8", "4L8", "3L12"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], - mimic: ["7L15", "7E", "7V", "6L15", "6E", "5L18", "5E", "4L18", "4E", "3T", "3E"], + mimic: ["7L15", "7E", "7V", "7V", "6L15", "6E", "5L18", "5E", "4L18", "4E", "3T", "3E"], mistyterrain: ["7L1", "6L1"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1"], powersplit: ["7E", "6E", "5E"], powerswap: ["7L1", "6L1", "5L1", "4L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L25", "6L25", "5L25", "4L25", "3L29"], - psychic: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3M", "3L43", "3S0"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L25", "7V", "6L25", "5L25", "4L25", "3L29"], + psychic: ["7M", "7L39", "7V", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3M", "3L43", "3S0"], + psychicterrain: ["7E"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], psyshock: ["7M", "6M", "5M"], psywave: ["7L15", "7V", "6L15", "5L15"], quickguard: ["7L1", "6L1", "5L1"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["7L32", "6T", "6L32", "5T", "5L32", "4M", "4L32", "3L33"], - reflect: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L19"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43", "3L40"], + recycle: ["7T", "7L32", "6T", "6L32", "5T", "5L32", "4M", "4L32", "3L33"], + reflect: ["7M", "7L22", "7V", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L19"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43", "3L40"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L50", "3M", "3L50"], + safeguard: ["7M", "7L50", "7V", "6M", "6L50", "5M", "5L50", "4M", "4L50", "3M", "3L50"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "5D", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5D", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], - substitute: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3T", "3L8"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + substitute: ["7M", "7L29", "7V", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3T", "3L8"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - teeterdance: ["7E", "6E", "5E", "5D", "4E"], - telekinesis: ["5M"], + teeterdance: ["7E", "6E", "5D", "5E", "4E"], + telekinesis: ["7T", "5M"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T", "3S0"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T", "3S0"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - trick: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4T", "4L36", "4E", "3L36", "3E"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4T", "4L36", "4E", "3L36", "3E"], trickroom: ["7M", "6M", "5M", "4M"], wakeupslap: ["7E", "6E", "5E", "4E"], wideguard: ["7L1", "6L1", "5L1"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, scyther: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L17", "7V", "6L17", "5L17", "5S2", "4L17", "3L21"], + agility: ["7L17", "7V", "7V", "6L17", "5L17", "5S2", "4L17", "3L21"], airslash: ["7L50", "6L50", "5L53", "4L53"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "5D", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], bide: ["7V"], brickbreak: ["7M", "6M", "5M", "4M"], brutalswing: ["7M"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], bugbuzz: ["7E", "6E", "5E", "4E"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - cut: ["7V", "6M", "5M", "4M", "3M"], - defog: ["7E", "6E", "5E", "4M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], + defog: ["7T", "7E", "6E", "5E", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], doublehit: ["7L49", "6L49", "5L49", "4L49"], - doubleteam: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L41"], - endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + doubleteam: ["7M", "7L37", "7V", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L41"], + endure: ["7E", "7V", "6E", "5E", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13", "3L16"], + falseswipe: ["7M", "7L13", "7V", "6M", "6L13", "5M", "5L13", "4M", "4L13", "3L16"], feint: ["7L61", "6L61", "5L61", "4L61"], - focusenergy: ["7L5", "7V", "6L5", "5L5", "4L5", "3L6", "3S0"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L25", "6L25", "5L25", "5S2", "4T", "4L25", "3T", "3L46"], + focusenergy: ["7L5", "7V", "7V", "6L5", "5L5", "4L5", "3L6", "3S0"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L25", "7V", "6L25", "5L25", "5S2", "4T", "4L25", "3T", "3L46"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], mimic: ["7V", "3T"], morningsun: ["3S1"], naturalgift: ["4M"], nightslash: ["7L45", "7E", "6L45", "6E", "5L45", "5E", "4L45", "4E"], ominouswind: ["4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L9", "6L9", "5L9", "4L9", "3L11"], - quickattack: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L9", "7V", "6L9", "5L9", "4L9", "3L11"], + quickattack: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], quickguard: ["7E", "6E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - razorwind: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4L33", "4E", "3E", "3S1"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + razorwind: ["7L33", "7E", "7V", "6L33", "6E", "5L33", "5E", "4L33", "4E", "3E", "3S1"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], secretpower: ["6M", "4M", "3M"], silverwind: ["7E", "6E", "5E", "4M", "4E", "3E", "3S1"], skullbash: ["7V"], - slash: ["7L29", "7V", "6L29", "5L29", "5S2", "4L29", "3L31", "3S1"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + slash: ["7L29", "7V", "7V", "6L29", "5L29", "5S2", "4L29", "3L31", "3S1"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5E", "4M", "3M"], strugglebug: ["6M", "5M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - swordsdance: ["7M", "7L57", "7V", "6M", "6L57", "5M", "5L57", "4M", "4L57", "3T", "3L36"], - tailwind: ["6T", "5T", "5D", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + swordsdance: ["7M", "7L57", "7V", "7V", "6M", "6L57", "5M", "5L57", "4M", "4L57", "3T", "3L36"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], uturn: ["7M", "6M", "5M", "4M"], vacuumwave: ["7L1", "6L1", "5L1", "4L1"], - wingattack: ["7L21", "7V", "6L21", "5L21", "5S2", "4L21", "3L26"], + wingattack: ["7L21", "7V", "7V", "6L21", "5L21", "5S2", "4L21", "3L26"], xscissor: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], }}, scizor: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "6S5", "5M", "4M", "3M"], - agility: ["7L17", "6L17", "6S5", "6S6", "5L17", "4L17", "4S1", "3L21"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L17", "7V", "6L17", "6S6", "6S5", "5L17", "4L17", "4S1", "3L21"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], brickbreak: ["7M", "6M", "5M", "4M"], brutalswing: ["7M"], - bugbite: ["6T", "5T", "5S2", "4T"], + bugbite: ["7T", "6T", "5T", "5S2", "4T"], bulletpunch: ["7L1", "6L1", "6S7", "5L1", "5S2", "4L1"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - defog: ["4M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["3T"], doublehit: ["7L49", "6L49", "6S4", "5L49", "4L49"], - doubleteam: ["7M", "6M", "5M", "4M", "3M", "3L41"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M", "3L41"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L13", "6M", "6L13", "6S5", "6S6", "5M", "5L13", "4M", "4L13", "3L16"], + falseswipe: ["7M", "7L13", "7V", "6M", "6L13", "6S6", "6S5", "5M", "5L13", "4M", "4L13", "3L16"], feint: ["7L61", "7L1", "6L1", "5L61", "4L61"], flashcannon: ["7M", "6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L5", "6L5", "5L5", "5S3", "4L5", "3L6"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L25", "6L25", "6S5", "6S6", "5L25", "4T", "4L25", "3T", "3L46", "3S0"], + focusenergy: ["7L5", "7V", "6L5", "5L5", "5S3", "4L5", "3L6"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L25", "7V", "6L25", "6S6", "6S5", "5L25", "4T", "4L25", "3T", "3L46", "3S0"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irondefense: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37", "4S1", "3L41"], - ironhead: ["7L50", "6T", "6L50", "6S4", "5T", "5L53", "4T", "4L53"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "5S3", "4L1", "3L1"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37", "4S1", "3L41"], + ironhead: ["7T", "7L50", "6T", "6L50", "6S4", "5T", "5L53", "4T", "4L53"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "6L1", "5L1", "5S3", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], - metalclaw: ["7L21", "6L21", "6S6", "5L21", "4L21", "3L26", "3S0"], + metalclaw: ["7L21", "7V", "6L21", "6S6", "5L21", "4L21", "3L26", "3S0"], mimic: ["3T"], naturalgift: ["4M"], nightslash: ["7L45", "6L45", "6S4", "5L45", "4L45"], ominouswind: ["4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L9", "6L9", "5L9", "5S3", "4L9", "3L11"], - quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L9", "7V", "6L9", "5L9", "5S3", "4L9", "3L11"], + quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7L33", "6L33", "5L33", "4L33"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "6S7", "5T", "5S2", "4M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], silverwind: ["4M"], - slash: ["7L29", "6L29", "5L29", "4L29", "3L31", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "5S3", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], + slash: ["7L29", "7V", "6L29", "5L29", "4L29", "3L31", "3S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "5S3", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "7L57", "6M", "6L57", "6S7", "5M", "5L57", "5S2", "4M", "4L57", "4S1", "3T", "3L36", "3S0"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7L57", "7V", "6M", "6L57", "6S7", "5M", "5L57", "5S2", "4M", "4L57", "4S1", "3T", "3L36", "3S0"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], uturn: ["7M", "6M", "6S7", "5M", "4M"], venoshock: ["7M", "6M", "5M"], xscissor: ["7M", "7L41", "6M", "6L41", "6S4", "5M", "5L41", "4M", "4L41", "4S1"], }}, smoochum: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], auroraveil: ["7M"], avalanche: ["7L35", "6L35", "5L35", "4M", "4L31"], - blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L45", "3M", "3L57"], + blizzard: ["7M", "7L48", "7V", "6M", "6L48", "5M", "5L48", "4M", "4L45", "3M", "3L57"], bodyslam: ["3T"], calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["7E", "6E", "5E", "5D", "4M"], + captivate: ["7E", "6E", "5D", "5E", "4M"], confide: ["7M", "6M"], - confusion: ["7L15", "6L15", "5L15", "4L15", "3L21"], + confusion: ["7L15", "7V", "6L15", "5L15", "4L15", "3L21"], copycat: ["7L41", "6L41", "5L41", "4L38"], counter: ["3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fakeout: ["7E", "6E", "5E", "4E", "3E"], faketears: ["7L28", "6L28", "5L28", "4L25", "3L37"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - healbell: ["6T", "5T", "4T"], + healbell: ["7T", "6T", "5T", "4T"], heartstamp: ["7L21", "6L21", "5L21"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - icywind: ["6T", "5T", "4T", "3T"], - lick: ["7L5", "6L5", "5L5", "4L5", "3L1"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + lick: ["7L5", "7V", "6L5", "5L5", "4L5", "3L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], luckychant: ["7L31", "6L31", "5L31", "4L28"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meanlook: ["7L25", "6L25", "5L25", "4L21", "3L33"], - meditate: ["7E", "6E", "5E", "4E", "3E"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meanlook: ["7L25", "7V", "6L25", "5L25", "4L21", "3L33"], + meditate: ["7E", "7V", "6E", "5E", "4E", "3E"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], mimic: ["3T"], miracleeye: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payback: ["7M", "6M", "5M", "4M"], - perishsong: ["7L45", "6L45", "5L45", "4L41", "3L49"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], - powdersnow: ["7L11", "6L11", "5L11", "4L11", "3L13"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "4L35", "3M", "3L45"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + perishsong: ["7L45", "7V", "6L45", "5L45", "4L41", "3L49"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + powdersnow: ["7L11", "7V", "6L11", "5L11", "4L11", "3L13"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L38", "4M", "4L35", "3M", "3L45"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sing: ["7L18", "6L18", "5L18", "4L18", "3L25"], - skillswap: ["6T", "5T", "5D", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sing: ["7L18", "7V", "6L18", "5L18", "4L18", "3L25"], + skillswap: ["7T", "6T", "5D", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L8", "6L8", "5L8", "5D", "4L8", "3L9"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L8", "7V", "6L8", "5D", "5L8", "4L8", "3L9"], + sweetscent: ["7V"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], wakeupslap: ["7E", "6E", "5E"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wish: ["7E", "6E", "5E", "4E", "3E"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, jynx: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], auroraveil: ["7M"], avalanche: ["7L39", "6L39", "5L39", "4M", "4L33"], bide: ["7V"], - blizzard: ["7M", "7L60", "7V", "6M", "6L60", "5M", "5L60", "4M", "4L55", "3M", "3L67"], - bodyslam: ["7L44", "7V", "6L44", "5L44", "4L39", "3T", "3L51"], + blizzard: ["7M", "7L60", "7V", "7V", "6M", "6L60", "5M", "5L60", "4M", "4L55", "3M", "3L67"], + bodyslam: ["7L44", "7V", "7V", "6L44", "5L44", "4L39", "3T", "3L51"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["7E", "4M"], + captivate: ["4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], doubleedge: ["7V", "3T"], - doubleslap: ["7L15", "7V", "6L15", "5L15", "4L15", "3L21"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleslap: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L21"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], drainingkiss: ["7L1", "6L1"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E"], faketears: ["7L28", "6L28", "5L28", "4L25", "3L41"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], heartstamp: ["7L21", "6L21", "5L21"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["7L18", "7E", "7V", "6T", "6L18", "5T", "5L18", "4T", "4L18", "3T", "3L25"], - icywind: ["6T", "5T", "4T", "3T"], - lick: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["7T", "7L18", "7V", "7V", "6T", "6L18", "5T", "5L18", "4T", "4L18", "3T", "3L25"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + lick: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lovelykiss: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meanlook: ["7L25", "6L25", "5L25", "4L21", "3L35"], - meditate: ["7E"], + lovelykiss: ["7L8", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meanlook: ["7L25", "7V", "6L25", "5L25", "4L21", "3L35"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - miracleeye: ["7E"], - mudslap: ["4T", "3T"], - nastyplot: ["7E"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payback: ["7M", "6M", "5M", "4M"], - perishsong: ["7L55", "7L1", "6L1", "5L55", "4L49", "3L57"], - pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - powdersnow: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], + perishsong: ["7L55", "7L1", "7V", "6L1", "5L55", "4L49", "3L57"], + pound: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + powdersnow: ["7L11", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7V"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - wakeupslap: ["7L33", "7E", "6L33", "5L33", "4L28"], + wakeupslap: ["7L33", "6L33", "5L33", "4L28"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - wish: ["7E"], + waterpulse: ["7T", "6T", "4M", "3M"], + wonderroom: ["7T"], wringout: ["7L49", "6L49", "5L49", "4L44"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, elekid: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrier: ["7E", "7V", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], - crosschop: ["7E", "6E", "5E", "5D", "4E", "3E", "3S0"], + covet: ["7T", "6T", "5T"], + crosschop: ["7E", "7V", "6E", "5D", "5E", "4E", "3E", "3S0"], + curse: ["7V"], + detect: ["7V"], discharge: ["7L33", "6L33", "5L41", "4L34"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7E", "7V", "6E", "5E", "4E", "3T"], electroball: ["7L22", "6L22", "5L31"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], feint: ["7E", "6E", "5E", "4E"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E", "3S0"], - flash: ["6M", "5M", "4M", "3M"], + firepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E", "3S0"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hammerarm: ["7E", "6E", "5E"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E", "3S0"], - karatechop: ["7E", "6E", "5E", "4E", "3E"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lightscreen: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "4M", "4L25", "3M", "3L17"], - lowkick: ["7L8", "6T", "6L8", "5T", "5L11", "4T", "4L10"], - magnetrise: ["6T", "5T", "5D", "4T"], - meditate: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E", "3S0"], + karatechop: ["7E", "7V", "6E", "5E", "4E", "3E"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "7L26", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L25", "3M", "3L17"], + lowkick: ["7T", "7L8", "6T", "6L8", "5T", "5L11", "4T", "4L10"], + magnetrise: ["7T", "6T", "5D", "5T", "4T"], + meditate: ["7E", "7V", "6E", "5E", "4E", "3E"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollingkick: ["7E", "6E", "5E", "4E", "3E"], + rollingkick: ["7E", "7V", "6E", "5E", "4E", "3E"], round: ["7M", "6M", "5M"], - screech: ["7L36", "6L36", "5L51", "4L43", "3L33"], + screech: ["7L36", "7V", "6L36", "5L51", "4L43", "3L33"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shockwave: ["7L15", "6T", "6L15", "5L21", "4M", "4L19", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "7L15", "6T", "6L15", "5L21", "4M", "4L19", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L12", "6L12", "5L16", "4T", "4L16", "3T", "3L25"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7L43", "6M", "6L43", "5M", "5L56", "4M", "4L46", "3M", "3L49"], - thunderbolt: ["7M", "7L40", "6M", "6L40", "5M", "5L46", "4M", "4L37", "3M", "3L41"], - thunderpunch: ["7L29", "6T", "6L29", "5T", "5L36", "4T", "4L28", "3T", "3L9", "3S0"], - thundershock: ["7L5", "6L5", "5L6", "5D", "4L7"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L12", "7V", "6L12", "5L16", "4T", "4L16", "3T", "3L25"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L56", "4M", "4L46", "3M", "3L49"], + thunderbolt: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L46", "4M", "4L37", "3M", "3L41"], + thunderpunch: ["7T", "7L29", "7V", "6T", "6L29", "5T", "5L36", "4T", "4L28", "3T", "3L9", "3S0"], + thundershock: ["7L5", "6L5", "5D", "5L6", "4L7"], thunderwave: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, electabuzz: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -15896,84 +14065,82 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["6T", "5T"], - crosschop: ["7E", "3S1"], + covet: ["7T", "6T", "5T"], + crosschop: ["3S1"], + curse: ["7V"], + detect: ["7V"], discharge: ["7L36", "6L36", "5L44", "4L37"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["7E", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7V", "3T"], electroball: ["7L22", "6L22", "5L32"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7E"], - firepunch: ["7E", "6T", "5T", "4T", "3T"], - flash: ["7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["3S1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - hammerarm: ["7E"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - karatechop: ["7E"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - lightscreen: ["7M", "7L26", "7V", "6M", "6L26", "6S4", "5M", "5L26", "5S3", "4M", "4L25", "4S2", "3M", "3L17"], - lowkick: ["7L8", "6T", "6L8", "6S4", "5T", "5L11", "5S3", "4T", "4L10", "4S2"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lightscreen: ["7M", "7L26", "7V", "7V", "6M", "6L26", "6S4", "5M", "5L26", "5S3", "4M", "4L25", "4S2", "3M", "3L17"], + lowkick: ["7T", "7L8", "6T", "6L8", "6S4", "5T", "5L11", "5S3", "4T", "4L10", "4S2"], lowsweep: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T", "4T"], - meditate: ["7E"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], psywave: ["7V"], - quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + quickattack: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollingkick: ["7E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7L42", "7V", "6L42", "5L56", "4L52", "3L36"], + screech: ["7L42", "7V", "7V", "6L42", "5L56", "4L52", "3L36"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], - shockwave: ["7L15", "6T", "6L15", "6S4", "5L21", "5S3", "4M", "4L19", "4S2", "3M"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "7L15", "6T", "6L15", "6S4", "5L21", "5S3", "4M", "4L19", "4S2", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L12", "7V", "6L12", "5L16", "5S3", "4T", "4L16", "3T", "3L25"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L12", "7V", "7V", "6L12", "5L16", "5S3", "4T", "4L16", "3T", "3L25"], takedown: ["7V"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L58", "3M", "3L58"], - thunderbolt: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L43", "3M", "3L47", "3S1"], - thunderpunch: ["7L29", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L55", "7V", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L58", "3M", "3L58"], + thunderbolt: ["7M", "7L49", "7V", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L43", "3M", "3L47", "3S1"], + thunderpunch: ["7T", "7L29", "7V", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], thundershock: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1"], thunderwave: ["7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "3T", "3S1"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, electivire: {learnset: { attract: ["7M", "6M", "5M", "4M"], @@ -15982,38 +14149,38 @@ exports.BattleLearnsets = { captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], crosschop: ["4S0"], dig: ["6M", "5M", "4M"], discharge: ["7L36", "6L36", "5L44", "4L37", "4S1"], doubleteam: ["7M", "6M", "5M", "4M"], - dualchop: ["6T", "5T"], + dualchop: ["7T", "6T", "5T"], earthquake: ["7M", "6M", "5M", "4M", "4S0"], electricterrain: ["7L65", "7L1", "6L1"], electroball: ["7L22", "6L22", "5L32"], - electroweb: ["6T", "5T"], + electroweb: ["7T", "6T", "5T"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + firepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], flamethrower: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "7L62", "6M", "6L62", "5M", "5L68", "4M", "4L67"], headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T", "4S0"], + icepunch: ["7T", "6T", "5T", "4T", "4S0"], iondeluge: ["7L1", "6L1"], - irontail: ["6T", "5T", "4M"], + irontail: ["7T", "6T", "5T", "4M"], leer: ["7L1", "6L1", "5L1", "4L1"], lightscreen: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "4M", "4L25", "4S1"], - lowkick: ["7L8", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + lowkick: ["7T", "7L8", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], lowsweep: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], naturalgift: ["4M"], poweruppunch: ["6M"], @@ -16030,10 +14197,11 @@ exports.BattleLearnsets = { round: ["7M", "6M", "5M"], screech: ["7L42", "6L42", "5L56", "4L52"], secretpower: ["6M", "4M"], - shockwave: ["7L15", "6T", "6L15", "5L21", "4M", "4L19"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "7L15", "6T", "6L15", "5L21", "4M", "4L19"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], @@ -16042,7 +14210,7 @@ exports.BattleLearnsets = { thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "7L55", "6M", "6L55", "5M", "5L62", "4M", "4L58"], thunderbolt: ["7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S1"], - thunderpunch: ["7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S0", "4S1"], + thunderpunch: ["7T", "7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S1", "4S0"], thundershock: ["7L5", "7L1", "6L1", "5L1", "4L1"], thunderwave: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M"], torment: ["7M", "6M", "5M", "4M"], @@ -16051,8 +14219,8 @@ exports.BattleLearnsets = { wildcharge: ["7M", "6M", "5M"], }}, magby: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrier: ["7E", "7V", "6E", "5E", "4E", "3E"], belch: ["7E", "6E"], bellydrum: ["7E", "6E", "5E", "4E"], bodyslam: ["3T"], @@ -16060,155 +14228,150 @@ exports.BattleLearnsets = { captivate: ["4M"], clearsmog: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - confuseray: ["7L26", "6L26", "5L25", "4L25", "3L43"], + confuseray: ["7L26", "7V", "6L26", "5L25", "4L25", "3L43"], counter: ["3T"], - covet: ["6T", "5T"], - crosschop: ["7E", "6E", "5E", "4E", "3E"], + covet: ["7T", "6T", "5T"], + crosschop: ["7E", "7V", "6E", "5E", "4E", "3E"], + curse: ["7V"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["7E", "6E", "5E", "4E", "3T"], - ember: ["7L5", "6L5", "5L7", "5D", "4L7", "3L1"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7E", "7V", "6E", "5E", "4E", "3T"], + ember: ["7L5", "7V", "6L5", "5D", "5L7", "4L7", "3L1"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], feintattack: ["7L12", "6L12", "5L16", "4L16"], - fireblast: ["7M", "7L43", "6M", "6L43", "5M", "5L49", "4M", "4L46", "3M", "3L49"], - firepunch: ["7L29", "6T", "6L29", "5T", "5L34", "4T", "4L28", "3T", "3L19"], + fireblast: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L49", "4M", "4L46", "3M", "3L49"], + firepunch: ["7T", "7L29", "7V", "6T", "6L29", "5T", "5L34", "4T", "4L28", "3T", "3L19"], firespin: ["7L15", "6L15", "5L19", "4L19"], flameburst: ["7L22", "6L22", "5L28"], flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L40", "6M", "6L40", "5M", "5L43", "4M", "4L37", "3M", "3L37"], + flamethrower: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L43", "4M", "4L37", "3M", "3L37"], flareblitz: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], focusenergy: ["7E", "6E", "5E"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "5D", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5D", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - karatechop: ["7E", "6E", "5E", "4E", "3E"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], + karatechop: ["7E", "7V", "6E", "5E", "4E", "3E"], lavaplume: ["7L33", "6L33", "5L37", "4L34"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L7"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L7"], machpunch: ["7E", "6E", "5E", "4E"], megakick: ["3T"], - megapunch: ["7E", "6E", "5E", "4E", "3T", "3E"], + megapunch: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], overheat: ["7M", "6M", "5M", "4M"], powerswap: ["7E", "6E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smog: ["7L1", "6L1", "5L1", "4L1", "3L13"], - smokescreen: ["7L8", "6L8", "5L10", "4L10", "3L25"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smog: ["7L1", "7V", "6L1", "5L1", "4L1", "3L13"], + smokescreen: ["7L8", "7V", "6L8", "5L10", "4L10", "3L25"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L36", "6M", "6L36", "5M", "5L46", "4M", "4L43", "3M", "3L31"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3T", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + sunnyday: ["7M", "7L36", "7V", "6M", "6L36", "5M", "5L46", "4M", "4L43", "3M", "3L31"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7E", "7V", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3T", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], willowisp: ["7M", "6M", "5M", "4M"], }}, magmar: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E"], - belch: ["7E"], - bellydrum: ["7E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], clearsmog: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - confuseray: ["7L26", "7V", "6L26", "6S4", "5L26", "5S3", "4L25", "4S2", "3L49"], + confuseray: ["7L26", "7V", "7V", "6L26", "6S4", "5L26", "5S3", "4L25", "4S2", "3L49"], counter: ["7V", "3T"], - covet: ["6T", "5T"], - crosschop: ["7E", "3S1"], + covet: ["7T", "6T", "5T"], + crosschop: ["3S1"], + curse: ["7V"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["7E", "3T"], - ember: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7V", "3T"], + ember: ["7L5", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], feintattack: ["7L12", "6L12", "5L16", "5S3", "4L16"], - fireblast: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L54", "3M", "3L57", "3S1"], - firepunch: ["7L29", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], + fireblast: ["7M", "7L55", "7V", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L54", "3M", "3L57", "3S1"], + firepunch: ["7T", "7L29", "7V", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], firespin: ["7L15", "6L15", "6S4", "5L21", "5S3", "4L19", "4S2"], flameburst: ["7L22", "6L22", "5L32"], flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L41", "3M", "3L41"], - flareblitz: ["7E"], + flamethrower: ["7M", "7L49", "7V", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L41", "3M", "3L41"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7E"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["3S1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "5T", "4M", "3M"], - karatechop: ["7E"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], lavaplume: ["7L36", "6L36", "5L44", "4L36"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - lowkick: ["6T", "5T", "4T"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - machpunch: ["7E"], megakick: ["7V", "3T"], - megapunch: ["7E", "7V", "3T"], + megapunch: ["7V", "3T"], metronome: ["7V"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], overheat: ["7M", "6M", "5M", "4M"], - powerswap: ["7E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], psywave: ["7V"], rage: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7E"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smog: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], - smokescreen: ["7L8", "7V", "6L8", "6S4", "5L11", "5S3", "4L10", "4S2", "3L25"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smog: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + smokescreen: ["7L8", "7V", "7V", "6L8", "6S4", "5L11", "5S3", "4L10", "4S2", "3L25"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L42", "6M", "6L42", "5M", "5L56", "4M", "4L49", "3M", "3L33"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L42", "7V", "6M", "6L42", "5M", "5L56", "4M", "4L49", "3M", "3L33"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7E", "6T", "5T", "4T", "3T", "3S1"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T", "3S1"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "6M", "5M", "4M"], }}, magmortar: {learnset: { @@ -16219,35 +14382,35 @@ exports.BattleLearnsets = { clearsmog: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], confuseray: ["7L26", "6L26", "5L26", "4L25", "4S1"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], doubleteam: ["7M", "6M", "5M", "4M"], - dualchop: ["6T", "5T"], + dualchop: ["7T", "6T", "5T"], earthquake: ["7M", "6M", "5M", "4M"], ember: ["7L5", "7L1", "6L1", "5L1", "4L1"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], feintattack: ["7L12", "6L12", "5L16", "4L16"], fireblast: ["7M", "7L55", "6M", "6L55", "5M", "5L62", "4M", "4L58"], - firepunch: ["7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S1"], + firepunch: ["7T", "7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S1"], firespin: ["7L15", "6L15", "5L21", "4L19"], flameburst: ["7L22", "6L22", "5L32"], flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S0", "4S1"], + flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S1", "4S0"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "7L62", "6M", "6L62", "5M", "5L68", "4M", "4L67", "4S0"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], + irontail: ["7T", "6T", "5T", "4M"], lavaplume: ["7L36", "6L36", "5L44", "4L37", "4S1"], leer: ["7L1", "6L1", "5L1", "4L1"], - lowkick: ["6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], mudslap: ["4T"], naturalgift: ["4M"], @@ -16266,8 +14429,9 @@ exports.BattleLearnsets = { sleeptalk: ["7M", "6M", "5T", "4M"], smog: ["7L1", "6L1", "5L1", "4L1"], smokescreen: ["7L8", "7L1", "6L1", "5L1", "4L1"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M", "4S0"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "7L42", "6M", "6L42", "5M", "5L56", "4M", "4L52"], @@ -16275,191 +14439,196 @@ exports.BattleLearnsets = { taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + thunderpunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], willowisp: ["7M", "6M", "5M", "4M"], }}, pinsir: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["7L4", "7V", "6T", "6L4", "5T", "5L4", "4L4", "3L7"], + bind: ["7T", "7L4", "7V", "7V", "6T", "6L4", "5T", "5L4", "4L4", "3L7"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "7L26", "6M", "6L18", "5M", "5L21", "4M", "4L21", "3M", "3L31"], brutalswing: ["7M"], - bugbite: ["7E", "6T", "6E", "5T", "5E"], + bugbite: ["7T", "7E", "6T", "6E", "5T", "5E"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - closecombat: ["7E", "6E", "5E", "5D", "4E"], + closecombat: ["7E", "6E", "5D", "5E", "4E"], confide: ["7M", "6M"], - cut: ["7V", "6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], doublehit: ["7L22", "6L22"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "6S1", "6S2", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "6S2", "6S1", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M", "4M", "4E", "3E", "3S0"], feint: ["7E", "6E", "6S2", "5E", "4E"], feintattack: ["7E", "6E", "5E", "4E", "3E"], - flail: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7E", "6E", "5E", "4E", "3E"], - furycutter: ["4T", "3T"], + focusenergy: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - guillotine: ["7L50", "7V", "6L47", "5L47", "4L47", "3L37", "3S0"], - harden: ["7L11", "7V", "6L11", "5L13", "4L13", "3L19"], - headbutt: ["4T"], + guillotine: ["7L50", "7V", "7V", "6L47", "5L47", "4L47", "3L37", "3S0"], + harden: ["7L11", "7V", "7V", "6L11", "5L13", "4L13", "3L19"], + headbutt: ["7V", "4T"], helpinghand: ["3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - mefirst: ["7E", "6E", "5E", "5D"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + mefirst: ["7E", "6E", "5D", "5E"], mimic: ["7V", "3T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], quickattack: ["7E", "6E", "6S2", "5E", "4E"], rage: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "6S1", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "6S1", "5M", "4M", "3M"], revenge: ["7L15", "6L15", "5L18", "4L18", "3L25"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7L8", "7V", "6L8", "5L8", "4L8", "3T", "3L13"], + seismictoss: ["7L8", "7V", "7V", "6L8", "5L8", "4L8", "3T", "3L13"], slash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], stoneedge: ["7M", "6M", "6S1", "5M", "4M"], stormthrow: ["7L36", "6L33", "5L33"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], - submission: ["7L33", "7V", "6L26", "5L42", "4L42", "3L43", "3S0"], + submission: ["7L33", "7V", "7V", "6L26", "5L42", "4L42", "3L43", "3S0"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7L47", "7E", "6T", "6L43", "6E", "5T", "5L52", "5E", "4T", "4L52"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "7L40", "7V", "6M", "6L40", "6S2", "5M", "5L38", "4M", "4L38", "3T", "3L49"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "7L47", "7E", "6T", "6L43", "6E", "5T", "5L52", "5E", "4T", "4L52"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7L40", "7V", "7V", "6M", "6L40", "6S2", "5M", "5L38", "4M", "4L38", "3T", "3L49"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thrash: ["7L43", "6L36", "5L35", "4L35"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - vicegrip: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + throatchop: ["7T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + vicegrip: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], vitalthrow: ["7L18", "6L18", "5L25", "4L25"], xscissor: ["7M", "7L29", "6M", "6L29", "6S1", "5M", "5L30", "4M", "4L30"], }}, tauros: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T", "3S2"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + curse: ["7V"], + doubleedge: ["7L63", "7V", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S2"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], fissure: ["7V"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "7L63", "6M", "6L63", "5M", "5L63", "4M", "4L55"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L8", "6L8", "5L8", "4L8", "3L8", "3S0", "3S1"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "7L71", "7L63", "6M", "6L63", "5M", "5L63", "4M", "4L55"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L8", "7V", "6L8", "5L8", "4L8", "3L8", "3S1", "3S0"], horndrill: ["7V"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "5D", "4M", "3M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5D", "5T", "4M", "3M"], leer: ["7V"], mimic: ["7V", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L15", "6L15", "5L15", "4L15", "3L19", "3S0"], - rage: ["7L5", "7V", "6L5", "5L5", "5D", "4L5", "3L4", "3S0", "3S1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7L15", "7V", "6L15", "5L15", "4L15", "3L19", "3S0"], + rage: ["7L5", "7V", "7V", "6L5", "5D", "5L5", "4L5", "3L4", "3S1", "3S0"], raindance: ["7M", "6M", "5M", "4M", "3M"], refresh: ["3S2"], - rest: ["7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "4L19", "3M", "3L34"], + rest: ["7M", "7L19", "7V", "7V", "6M", "6L19", "5M", "5L19", "4M", "4L19", "3M", "3L34"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["5D", "4M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L11", "6L11", "5L11", "4L11", "3L13", "3S0"], + scaryface: ["7L11", "7V", "6L11", "5L11", "4L11", "3L13", "3S0"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], stomp: ["7V"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L41", "3T", "3L26"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], - tailwhip: ["7L3", "7V", "6L3", "5L3", "4L3", "3L1", "3S1", "3S2"], - takedown: ["7L41", "7V", "6L41", "5L41", "4L35", "3L53"], - thrash: ["7L50", "6L50", "5L55", "4L48", "3L43"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L48", "7V", "6M", "6L48", "5M", "5L48", "4M", "4L41", "3T", "3L26"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + tailwhip: ["7L3", "7V", "7V", "6L3", "5L3", "4L3", "3L1", "3S2", "3S1"], + takedown: ["7L41", "7L35", "7V", "7V", "6L41", "5L41", "4L35", "3L53"], + thrash: ["7L55", "7L50", "7V", "6L50", "5L55", "4L48", "3L43"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "7L29", "6L29", "5M", "5L29"], - zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L29"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L41", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L29"], }}, magikarp: {learnset: { - bounce: ["7S7", "6T", "5T", "5S5", "5D", "4T"], + bounce: ["7T", "7S7", "6T", "5D", "5T", "5S5", "4T"], celebrate: ["6S6"], - flail: ["7L30", "6L30", "5L30", "5S5", "4L30", "3L30"], + flail: ["7L30", "7V", "6L30", "5L30", "5S5", "4L30", "3L30"], happyhour: ["6S6"], hydropump: ["5S5"], - splash: ["7L1", "7S7", "7V", "6L1", "6S6", "5L1", "5S5", "5D", "4L1", "4S0", "4S1", "4S2", "4S3", "4S4", "3L1"], - tackle: ["7L15", "7V", "6L15", "5L15", "4L15", "3L15"], + splash: ["7L1", "7V", "7S7", "7V", "6L1", "6S6", "5D", "5L1", "5S5", "4L1", "4S4", "4S3", "4S2", "4S1", "4S0", "3L1"], + tackle: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L15"], }}, gyarados: {learnset: { - aquatail: ["7L30", "6T", "6L35", "5T", "5L35", "4T", "4L35"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L30", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], bide: ["7V"], - bite: ["7L1", "7V", "6L20", "6S1", "5L20", "4L20", "3L20"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L1", "7V", "7V", "6L20", "6S1", "5L20", "4L20", "3L20"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brine: ["4M"], brutalswing: ["7M"], bubblebeam: ["7V"], @@ -16467,321 +14636,364 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], crunch: ["7L39", "6L41"], + curse: ["7V"], darkpulse: ["7M", "6M", "5T", "4M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragondance: ["7L45", "6L44", "6S0", "5L44", "4L44", "3L50"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L36", "7V", "6L23", "5L23", "4L23", "3L25"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L36", "7V", "7V", "6L23", "5L23", "4L23", "3L25"], dragontail: ["7M", "6M", "5M"], earthquake: ["7M", "6M", "6S0", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["7L48"], - hydropump: ["7L42", "7V", "6L41", "5L41", "4L41", "3L40"], - hyperbeam: ["7M", "7L54", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L55"], + hydropump: ["7L42", "7V", "7V", "6L41", "5L41", "4L41", "3L40"], + hyperbeam: ["7M", "7L54", "7V", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L55"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icefang: ["7L27", "6L32", "6S0", "6S1", "5L32", "4L32"], - icywind: ["6T", "5T", "4T", "3T"], + icefang: ["7L27", "6L32", "6S1", "6S0", "5L32", "4L32"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - ironhead: ["6T", "6S1", "5T", "4T"], - irontail: ["6T", "5T"], - leer: ["7L21", "7V", "6L26", "5L26", "4L26", "3L30"], + ironhead: ["7T", "6T", "6S1", "5T", "4T"], + irontail: ["7T", "6T", "5T"], + leer: ["7L21", "7V", "7V", "6L26", "5L26", "4L26", "3L30"], mimic: ["7V", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "7L51", "6M", "6L38", "5M", "5L38", "4M", "4L38", "3M", "3L45"], + raindance: ["7M", "7L51", "7V", "6M", "6L38", "5M", "5L38", "4M", "4L38", "3M", "3L45"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], scaryface: ["7L33"], secretpower: ["6M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], tackle: ["7V"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - twister: ["7L24", "6L29", "5L29", "4T", "4L29", "3L35"], - uproar: ["6T", "5T", "4T"], - waterfall: ["7M", "6M", "6S0", "6S1", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L24", "7V", "6L29", "5L29", "4T", "4L29", "3L35"], + uproar: ["7T", "6T", "5T", "4T"], + waterfall: ["7M", "7V", "6M", "6S1", "6S0", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + zapcannon: ["7V"], }}, lapras: {learnset: { ancientpower: ["7E", "6E", "5E", "4T", "4E"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7V"], avalanche: ["7E", "6E", "5E", "4M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], - block: ["6T", "5T", "4T"], - bodyslam: ["7L18", "7V", "6L18", "5L18", "4L18", "3T", "3L13"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3S0"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["7L18", "7V", "7V", "6L18", "5L18", "4L18", "3T", "3L13"], brine: ["7L37", "6L37", "5L37", "4M", "4L37"], bubblebeam: ["7V"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L7", "7V", "6L7", "5L7", "5D", "4L7", "3L19"], - curse: ["7E", "6E", "5E", "4E", "3E"], + confuseray: ["7L7", "7V", "7V", "6L7", "5D", "5L7", "4L7", "3L19"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragondance: ["7E", "6E", "5E", "4E", "3E"], - dragonpulse: ["7E", "6T", "6E", "5T", "5E", "4M"], + dragonpulse: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], dragonrage: ["7V"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - drillrun: ["6T", "5T"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + drillrun: ["7T", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fissure: ["7E", "6E", "5E", "4E"], - foresight: ["7E", "6E", "5E", "4E", "3E"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], freezedry: ["7E", "6E"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], futuresight: ["7E", "6E", "5E"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + growl: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T", "3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - horndrill: ["7E", "7V", "6E", "5E", "5D", "4E", "3E"], - hydropump: ["7L47", "7V", "6L47", "5L49", "4L49", "3L49", "3S0"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icebeam: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L31"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + horndrill: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + hydropump: ["7L47", "7V", "7V", "6L47", "5L49", "4L49", "3L49", "3S0"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "7L32", "7V", "7V", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L31"], iceshard: ["7L10", "6L10", "5L10", "4L10"], - icywind: ["6T", "5T", "5D", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], + icywind: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], mimic: ["7V", "3T"], - mist: ["7L4", "7V", "6L4", "5L4", "4L4", "3L7"], + mist: ["7L4", "7V", "7V", "6L4", "5L4", "4L4", "3L7"], naturalgift: ["4M"], - nightmare: ["3T"], - outrage: ["6T", "5T", "4T"], - perishsong: ["7L27", "6L27", "5L27", "4L27", "3L25"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + nightmare: ["7V", "3T"], + outrage: ["7T", "6T", "5T", "4T"], + perishsong: ["7L27", "7V", "6L27", "5L27", "4L27", "3L25"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L37", "3S0"], + raindance: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L37", "3S0"], reflect: ["7V"], refresh: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + safeguard: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], secretpower: ["6M", "4M", "3M"], sheercold: ["7L50", "6L50", "5L55", "4L55", "3L55"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sing: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], skullbash: ["7V"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7V"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], tickle: ["7E", "6E", "5E", "4E", "3E"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["7L14", "6T", "6L14", "5L14", "4M", "4L14", "3M"], - whirlpool: ["7E", "6E", "5E", "4M", "4E"], - zenheadbutt: ["6T", "5T", "4T"], + watergun: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7L14", "6T", "6L14", "5L14", "4M", "4L14", "3M"], + whirlpool: ["7E", "7V", "6E", "5E", "4M", "4E"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, ditto: {learnset: { - transform: ["7L1", "7V", "7S0", "6L1", "5L1", "4L1", "3L1"], + transform: ["7L1", "7V", "7S0", "7V", "6L1", "5L1", "4L1", "3L1"], }}, eevee: {learnset: { - attract: ["7M", "6M", "5M", "5S2", "4M", "4S0", "3M"], - babydolleyes: ["7L9", "7S5", "6L9", "6S3", "6S4"], - batonpass: ["7L33", "6L33", "5L36", "4L36", "3L36"], + attract: ["7M", "7V", "6M", "5M", "5S2", "4M", "4S0", "3M"], + babydolleyes: ["7L9", "7S5", "6L9", "6S4", "6S3"], + batonpass: ["7L33", "7V", "6L33", "5L36", "4L36", "3L36"], bide: ["7V"], - bite: ["7L17", "7V", "6L17", "5L29", "4L29", "4S0", "3L30"], + bite: ["7L17", "7V", "7V", "6L17", "5L29", "4L29", "4S0", "3L30"], bodyslam: ["7V", "3T"], captivate: ["7E", "6E", "4M"], celebrate: ["7S5", "6S3"], - charm: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "5D", "4E", "3E"], + charm: ["7L29", "7E", "7V", "6L29", "6E", "5D", "5L29", "5E", "4E", "3E"], confide: ["7M", "6M"], - covet: ["7L1", "7E", "6T", "6L23", "6E", "5T", "5L21", "5E", "4E", "4S0"], - curse: ["7E", "6E", "5E", "4E", "3E"], - detect: ["7E", "6E", "5E", "4E"], + covet: ["7T", "7L1", "7E", "6T", "6L23", "6E", "5T", "5L21", "5E", "4E", "4S0"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + detect: ["7E", "7V", "6E", "5E", "4E"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7L37", "7V", "6L37", "5L37", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M", "5S2"], - endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + endure: ["7E", "7V", "6E", "5E", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], faketears: ["7E", "6E", "5E", "4E"], - flail: ["7E", "6E", "5E", "4E", "4S1", "3E"], - focusenergy: ["7V"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "7V", "6L1", "5L15", "4L15", "3L16"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "6S4", "5T", "5L1", "4T", "4L1", "4S0", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T", "4M", "4S1", "3M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + flail: ["7E", "7V", "6E", "5E", "4E", "4S1", "3E"], + focusenergy: ["7V", "7V"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "7V", "6L1", "5L15", "4L15", "3L16"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "6S4", "5T", "5L1", "4T", "4L1", "4S0", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "4S1", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "7V", "6L13", "6S4", "5L22", "4L22", "4S1", "3L23"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "7V", "6L13", "6S4", "5L22", "4L22", "4S1", "3L23"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], refresh: ["7L20", "6L20"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "5S2", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "5S2", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "7S5", "7V", "6L5", "6S3", "5L8", "5D", "4L8", "3L8"], + sandattack: ["7L5", "7V", "7S5", "7V", "6L5", "6S3", "5D", "5L8", "4L8", "3L8"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], sing: ["5S2"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], storedpower: ["7E", "6E", "5E"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L17", "7V", "6L10", "6S3", "6S4", "5D", "4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L17", "7V", "7V", "6L10", "6S4", "6S3", "5D", "4T", "3T"], synchronoise: ["7E", "6E", "5E"], - tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L25", "7V", "6L25", "5L43", "4L43", "3L42"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L25", "7V", "7V", "6L25", "5L43", "4L43", "3L42"], tickle: ["7E", "6E", "5E", "4E", "3E"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], trumpcard: ["7L45", "6L45", "5L57", "4L57", "4S1"], wish: ["7E", "6E", "5E", "4E", "3E"], workup: ["7M", "5M"], yawn: ["7E", "6E", "5E", "4E"], }}, + eeveestarter: {learnset: { + baddybad: ["7T"], + bite: ["7L17"], + bouncybubble: ["7T"], + buzzybuzz: ["7T"], + dig: ["7M"], + doubleedge: ["7L28"], + doublekick: ["7L10"], + facade: ["7M"], + freezyfrost: ["7T"], + glitzyglow: ["7T"], + growl: ["7L1", "7S0"], + headbutt: ["7M"], + helpinghand: ["7M", "7L31"], + irontail: ["7M"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + sandattack: ["7L14"], + sappyseed: ["7T"], + shadowball: ["7M"], + sizzlyslide: ["7T"], + sparklyswirl: ["7T"], + substitute: ["7M"], + swift: ["7L21"], + tackle: ["7L1", "7S0"], + tailwhip: ["7L3", "7S0"], + takedown: ["7L24"], + toxic: ["7M"], + veeveevolley: ["7T"], + }}, vaporeon: {learnset: { - acidarmor: ["7L29", "7V", "6L29", "5L64", "4L64", "3L47"], + acidarmor: ["7L29", "7V", "7V", "6L29", "5L64", "4L64", "3L47"], aquaring: ["7L25", "6L25", "5L43", "4L43"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L20", "7V", "6L20", "5L36", "4L36", "3L36"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L20", "7V", "7V", "6L20", "5L36", "4L36", "3L36"], babydolleyes: ["7L9"], bide: ["7V"], - bite: ["7V", "5L29", "4L29", "3L30"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7V", "7V", "5L29", "4L29", "3L30"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brine: ["4M"], bubblebeam: ["7V"], captivate: ["4M"], celebrate: ["6S1"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7L33", "7V", "6L33", "5L57", "4L57", "3L42"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L45", "7V", "6L45", "5L71", "4L71", "3L52"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + haze: ["7L33", "7V", "7V", "6L33", "5L57", "4L57", "3L42"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L45", "7V", "7V", "6L45", "5L71", "4L71", "3L52"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "7S2", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], mimic: ["7V", "3T"], mist: ["7V"], muddywater: ["7L37", "6L37", "5L78", "4L78"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "7V", "6L13", "5L22", "4L22", "3L23"], rage: ["7V"], - raindance: ["7M", "7S2", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7S2", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "7S2", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7S2", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + sandattack: ["7L5", "7V", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], scald: ["7M", "7S2", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], - tailwhip: ["7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], - waterpulse: ["7L17", "6T", "6L17", "4M", "3M"], - whirlpool: ["4M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + waterpulse: ["7T", "7L17", "6T", "6L17", "4M", "3M"], + whirlpool: ["7V", "4M"], workup: ["7M", "5M"], }}, jolteon: {learnset: { - agility: ["7L29", "7V", "6L29", "5L64", "4L64", "3L47"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L29", "7V", "7V", "6L29", "5L64", "4L64", "3L47"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], babydolleyes: ["7L9"], bide: ["7V"], bodyslam: ["7V", "3T"], @@ -16789,286 +15001,304 @@ exports.BattleLearnsets = { celebrate: ["6S1"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], discharge: ["7L37", "6L37", "5L78", "4L78"], doubleedge: ["7V", "3T"], - doublekick: ["7L17", "7V", "6L17", "5L29", "4L29", "3L30"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doublekick: ["7L17", "7V", "7V", "6L17", "5L29", "4L29", "3L30"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], lightscreen: ["7M", "7S2", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - pinmissile: ["7L25", "7V", "6L25", "5L36", "4L36", "3L36"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + pinmissile: ["7L25", "7V", "7V", "6L25", "5L36", "4L36", "3L36"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "7V", "6L13", "5L22", "4L22", "3L23"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + sandattack: ["7L5", "7V", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7S2", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "7S2", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], - tailwhip: ["7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], takedown: ["7V"], - thunder: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L71", "4M", "4L71", "3M", "3L52"], + thunder: ["7M", "7L45", "7V", "7V", "6M", "6L45", "5M", "5L71", "4M", "4L71", "3M", "3L52"], thunderbolt: ["7M", "7V", "7S2", "6M", "5M", "4M", "3M"], thunderfang: ["7L20", "6L20", "5L43", "4L43"], - thundershock: ["7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], - thunderwave: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L57", "4M", "4L57", "3T", "3L42"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["7L1", "7V", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + thunderwave: ["7M", "7L33", "7V", "7V", "6M", "6L33", "5M", "5L57", "4M", "4L57", "3T", "3L42"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "7S2", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, flareon: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], babydolleyes: ["7L9"], bide: ["7V"], - bite: ["7L17", "7V", "6L17", "5L29", "4L29", "3L30"], + bite: ["7L17", "7V", "7V", "6L17", "5L29", "4L29", "3L30"], bodyslam: ["7V", "3T"], captivate: ["4M"], celebrate: ["6S1"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - ember: ["7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], - endure: ["4M", "3T"], + ember: ["7L1", "7V", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + endure: ["7V", "4M", "3T"], facade: ["7M", "7S2", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "5L71", "4M", "4L71", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "5L71", "4M", "4L71", "3M"], firefang: ["7L20", "6L20", "5L43", "4L43"], - firespin: ["7L25", "7V", "6L25", "5L36", "4L36", "3L36"], + firespin: ["7L25", "7V", "7V", "6L25", "5L36", "4L36", "3L36"], flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7V", "6M", "5M", "4M", "3M", "3L52"], + flamethrower: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3L52"], flareblitz: ["7L45", "7S2", "6L45"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], lavaplume: ["7L37", "6L37", "5L78", "4L78"], - leer: ["7V", "3L47"], + leer: ["7V", "7V", "3L47"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "7V", "7S2", "6L13", "5L22", "4L22", "3L23"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "7S2", "7V", "6L13", "5L22", "4L22", "3L23"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + sandattack: ["7L5", "7V", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], scaryface: ["7L29", "6L29", "5L64", "4L64"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smog: ["7L33", "7V", "6L33", "5L57", "4L57", "3L42"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smog: ["7L33", "7V", "7V", "6L33", "5L57", "4L57", "3L42"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], - tailwhip: ["7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "7S2", "6M", "5M", "4M"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, espeon: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], babydolleyes: ["7L9"], bodyslam: ["3T"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], celebrate: ["6S2"], confide: ["7M", "6M"], - confusion: ["7L1", "6L9", "6S2", "5L15", "4L15", "3L16"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], + confusion: ["7L1", "7V", "6L9", "6S2", "5L15", "4L15", "3L16"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], dazzlinggleam: ["7M", "7S3", "6M"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], futuresight: ["7L25", "6L25", "5L43", "4L43"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S1", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mimic: ["3T"], - morningsun: ["7L33", "6L33", "5L71", "4L71", "3L52", "3S0"], - mudslap: ["4T", "3T"], + morningsun: ["7L33", "7V", "6L33", "5L71", "4L71", "3L52", "3S0"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], powerswap: ["7L45", "6L45", "5L78", "4L78"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L20", "6L20", "5L36", "4L36", "3L36", "3S0"], - psychic: ["7M", "7L37", "7S3", "6M", "6L37", "5M", "5L64", "4M", "4L64", "3M", "3L47", "3S0"], - psychup: ["7M", "7L29", "6M", "6L29", "5M", "5L57", "4M", "4L57", "3T", "3L42", "3S0"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L20", "7V", "6L20", "5L36", "4L36", "3L36", "3S0"], + psychic: ["7M", "7L37", "7S3", "7V", "6M", "6L37", "5M", "5L64", "4M", "4L64", "3M", "3L47", "3S0"], + psychup: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L57", "4M", "4L57", "3T", "3L42", "3S0"], psyshock: ["7M", "6M", "5M"], - quickattack: ["7L13", "6L13", "5L22", "4L22", "3L23"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7M", "7S3", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], + sandattack: ["7L5", "7V", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7S3", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shadowball: ["7M", "7S3", "7V", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L17", "6L17", "5L29", "4T", "4L29", "3T", "3L30"], - tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1"], - tailwhip: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], - telekinesis: ["5M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L17", "7V", "6L17", "5L29", "4T", "4L29", "3T", "3L30"], + tackle: ["7L1", "7V", "6L1", "5L1", "5S1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], + telekinesis: ["7T", "5M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, umbreon: {learnset: { assurance: ["7L25", "6L25", "5L43", "4L43"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], babydolleyes: ["7L9"], bodyslam: ["3T"], captivate: ["4M"], celebrate: ["6S2"], confide: ["7M", "6M"], - confuseray: ["7L17", "6L17", "5L29", "4L29", "3L30"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], + confuseray: ["7L17", "7V", "6L17", "5L29", "4L29", "3L30"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L20", "6L20", "5L36", "4L36", "3L36", "3S0"], - flash: ["6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L20", "7V", "6L20", "5L36", "4L36", "3L36", "3S0"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], guardswap: ["7L45", "6L45", "5L78", "4L78"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S1", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], - meanlook: ["7L37", "6L37", "5L57", "4L57", "3L42", "3S0"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + meanlook: ["7L37", "7V", "6L37", "5L57", "4L57", "3L42", "3S0"], mimic: ["3T"], - moonlight: ["7L33", "7S3", "6L33", "5L71", "4L71", "3L52", "3S0"], - mudslap: ["4T", "3T"], + moonlight: ["7L33", "7S3", "7V", "6L33", "5L71", "4L71", "3L52", "3S0"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "7S3", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7L1", "6L9", "6S2", "5L15", "4L15", "3L16"], - quickattack: ["7L13", "6L13", "5L22", "4L22", "3L23"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7S3", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + pursuit: ["7L1", "7V", "6L9", "6S2", "5L15", "4L15", "3L16"], + quickattack: ["7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], - screech: ["7L29", "6L29", "5L64", "4L64", "3L47", "3S0"], + sandattack: ["7L5", "7V", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], + screech: ["7L29", "7V", "6L29", "5L64", "4L64", "3L47", "3S0"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], snarl: ["7M", "7S3", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1"], - tailwhip: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "5S1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], taunt: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7S3", "6M", "5M", "4M", "3M"], - wonderroom: ["6T", "5T"], + toxic: ["7M", "7S3", "7V", "6M", "5M", "4M", "3M"], + wonderroom: ["7T", "6T", "5T"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, leafeon: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], @@ -17078,7 +15308,7 @@ exports.BattleLearnsets = { captivate: ["4M"], celebrate: ["6S1"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], @@ -17088,19 +15318,20 @@ exports.BattleLearnsets = { flash: ["6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - gigadrain: ["7L25", "6T", "6L25", "5T", "5L43", "4M", "4L43"], + gigadrain: ["7T", "7L25", "6T", "6L25", "5T", "5L43", "4M", "4L43"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], grasswhistle: ["7L17", "6L17", "5L57", "4L57"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], leafblade: ["7L45", "7S2", "6L45", "5L71", "4L71"], magicalleaf: ["7L20", "6L20", "5L36", "4L36"], mudslap: ["4T"], @@ -17118,10 +15349,10 @@ exports.BattleLearnsets = { round: ["7M", "6M", "5M"], sandattack: ["7L5", "6L5", "6S1", "5L8", "5S0", "4L8"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], shadowball: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], @@ -17129,16 +15360,16 @@ exports.BattleLearnsets = { swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], swordsdance: ["7M", "7L29", "7S2", "6M", "6L29", "5M", "5L78", "4M", "4L78"], - synthesis: ["7L33", "7S2", "6T", "6L33", "5T", "5L29", "4T", "4L29"], + synthesis: ["7T", "7L33", "7S2", "6T", "6L33", "5T", "5L29", "4T", "4L29"], tackle: ["7L1", "6L1", "5L1", "5S0", "4L1"], tailwhip: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], toxic: ["7M", "6M", "5M", "4M"], workup: ["7M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], xscissor: ["7M", "6M", "5M", "4M"], }}, glaceon: {learnset: { - aquatail: ["6T", "5T", "4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], auroraveil: ["7M", "7S2"], avalanche: ["4M"], @@ -17149,7 +15380,7 @@ exports.BattleLearnsets = { captivate: ["4M"], celebrate: ["6S1"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], @@ -17160,17 +15391,18 @@ exports.BattleLearnsets = { gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "7L37", "7S2", "6M", "6L37", "5M", "5L64", "4M", "4L64"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M"], icefang: ["7L20", "6L20", "5L43", "4L43"], iceshard: ["7L25", "6L25", "5L36", "4L36"], - icywind: ["7L1", "6T", "6L9", "6S1", "5T", "5L15", "4T", "4L15"], - irontail: ["6T", "5T", "4M"], - lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + icywind: ["7T", "7L1", "6T", "6L9", "6S1", "5T", "5L15", "4T", "4L15"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], mirrorcoat: ["7L33", "6L33", "5L57", "4L57"], mudslap: ["4T"], naturalgift: ["4M"], @@ -17186,9 +15418,9 @@ exports.BattleLearnsets = { sandattack: ["7L5", "6L5", "6S1", "5L8", "5S0", "4L8"], secretpower: ["6M", "4M"], shadowball: ["7M", "7S2", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], @@ -17197,157 +15429,165 @@ exports.BattleLearnsets = { tackle: ["7L1", "6L1", "5L1", "5S0", "4L1"], tailwhip: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], toxic: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], }}, porygon: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L12", "7V", "6L12", "5L12", "4L12", "3L9"], + agility: ["7L12", "7V", "7V", "6L12", "5L12", "4L12", "3L9"], + allyswitch: ["7T"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - conversion: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + conversion: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], conversion2: ["7L1", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], + defensecurl: ["7V"], discharge: ["7L40", "6L40", "5L40", "4L40"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + gravity: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - lockon: ["7L45", "6L45", "5L45", "4L45", "3L32"], - magiccoat: ["7L56", "6T", "6L56", "5T", "5L56", "4T", "4L56"], - magnetrise: ["7L23", "6T", "6L23", "5T", "5L23", "4L23"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], + lockon: ["7L45", "7V", "6L45", "5L45", "4L45", "3L32"], + magiccoat: ["7T", "7L56", "6T", "6L56", "5T", "5L56", "4T", "4L56"], + magnetrise: ["7T", "7L23", "6T", "6L23", "5T", "5L23", "4L23"], mimic: ["7V", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L7", "7V", "6L7", "5L7", "5S0", "4L7", "3L12"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L7", "7V", "7V", "6L7", "5L7", "5S0", "4L7", "3L12"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L18", "7V", "6L18", "5L18", "4L18", "3L20"], - recycle: ["7L34", "6T", "6L34", "5T", "5L34", "4M", "4L34", "3L44"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L18", "7V", "7V", "6L18", "5L18", "4L18", "3L20"], + recycle: ["7T", "7L34", "6T", "6L34", "5T", "5L34", "4M", "4L34", "3L44"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sharpen: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L24"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + sharpen: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L24"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tackle: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], takedown: ["7V"], + telekinesis: ["7T"], teleport: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - triattack: ["7L50", "7V", "6L50", "5L51", "4L51", "3L36"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L50", "7V", "7V", "6L50", "5L51", "4L51", "3L36"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zapcannon: ["7L62", "6L62", "5L62", "4L62", "3L48"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7L62", "7V", "6L62", "5L62", "4L62", "3L48"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, porygon2: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L12", "6L12", "5L12", "4L12", "3L9"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L12", "7V", "6L12", "5L12", "4L12", "3L9"], + allyswitch: ["7T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - conversion: ["7L1", "6L1", "5L1", "4L1", "3L1"], - conversion2: ["7L1", "6L1", "5L1", "4L1", "3L1"], - defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L24"], + conversion: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + conversion2: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L24"], discharge: ["7L40", "6L40", "5L40", "4L40"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L67", "4M", "4L67", "3M"], + gravity: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L67", "7V", "6M", "6L67", "5M", "5L67", "4M", "4L67", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - lockon: ["7L45", "6L45", "5L45", "4L45", "3L32"], - magiccoat: ["7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L56"], - magnetrise: ["7L23", "6T", "6L23", "5T", "5L23", "4L23"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], + lockon: ["7L45", "7V", "6L45", "5L45", "4L45", "3L32"], + magiccoat: ["7T", "7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L56"], + magnetrise: ["7T", "7L23", "6T", "6L23", "5T", "5L23", "4L23"], mimic: ["3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L7", "6L7", "5L7", "4L7", "3L12"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L7", "7V", "6L7", "5L7", "4L7", "3L12"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L18", "6L18", "5L18", "4L18", "3L20"], - recycle: ["7L34", "6T", "6L34", "5T", "5L34", "4M", "4L34", "3L44"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L18", "7V", "6L18", "5L18", "4L18", "3L20"], + recycle: ["7T", "7L34", "6T", "6L34", "5T", "5L34", "4M", "4L34", "3L44"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - triattack: ["7L50", "6L50", "5L51", "4L51", "3L36"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L50", "7V", "6L50", "5L51", "4L51", "3L36"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zapcannon: ["7L62", "7L1", "6L1", "5L62", "4L62", "3L48"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7L62", "7L1", "7V", "6L1", "5L62", "4L62", "3L48"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, porygonz: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], agility: ["7L12", "6L12", "5L12", "4L12"], + allyswitch: ["7T"], blizzard: ["7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], @@ -17357,27 +15597,27 @@ exports.BattleLearnsets = { discharge: ["7L40", "6L40", "5L40", "4L40"], doubleteam: ["7M", "6M", "5M", "4M"], dreameater: ["7M", "6M", "5M", "4M"], - electroweb: ["6T", "5T"], + electroweb: ["7T", "6T", "5T"], embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L34"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], - foulplay: ["6T", "5T"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L67", "4M", "4L67"], icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - lastresort: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + lastresort: ["7T", "6T", "5T", "4T"], lockon: ["7L45", "6L45", "5L45", "4L45"], - magiccoat: ["7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L56"], - magnetrise: ["7L23", "6T", "6L23", "5T", "5L23", "4L23"], + magiccoat: ["7T", "7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L56"], + magnetrise: ["7T", "7L23", "6T", "6L23", "5T", "5L23", "4L23"], nastyplot: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M"], psybeam: ["7L7", "6L7", "5L7", "4L7"], psychic: ["7M", "6M", "5M", "4M"], @@ -17385,309 +15625,315 @@ exports.BattleLearnsets = { psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], recover: ["7L18", "6L18", "5L18", "4L18"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["7T"], thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], triattack: ["7L50", "6L50", "5L51", "4L51"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - uproar: ["6T", "5T", "4T"], - wonderroom: ["5T"], + uproar: ["7T", "6T", "5T", "4T"], + wonderroom: ["7T", "5T"], zapcannon: ["7L62", "7L1", "6L1", "5L62", "4L62"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, omanyte: {learnset: { - ancientpower: ["7L37", "6L37", "5L37", "4T", "4L37", "3L49"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7L37", "7V", "6L37", "5L37", "4T", "4L37", "3L49"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7E", "7V", "6E", "5E"], - bind: ["6T", "5T"], - bite: ["7L7", "6L7", "5L7", "5S0", "5D", "4L7", "3L13"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bind: ["7T", "6T", "5T"], + bite: ["7L7", "7V", "6L7", "5D", "5L7", "5S0", "4L7", "3L13"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brine: ["7L28", "6L28", "5L28", "4M", "4L28"], - bubblebeam: ["7E", "7V", "6E", "5E", "5S0", "4E", "3E"], + bubblebeam: ["7E", "7V", "7V", "6E", "5E", "5S0", "4E", "3E"], captivate: ["4M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + constrict: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hornattack: ["7V"], - hydropump: ["7L55", "7V", "6L55", "5L55", "4L52", "3L55"], + hydropump: ["7L55", "7V", "7V", "6L55", "5L55", "4L52", "3L55"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "5D", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - leer: ["7L19", "7V", "6L19", "5L19", "4L19", "3L31"], + icywind: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + leer: ["7L19", "7V", "7V", "6L19", "5L19", "4L19", "3L31"], mimic: ["7V", "3T"], - muddywater: ["7E", "6E", "5E", "5D", "4E"], + muddywater: ["7E", "6E", "5D", "5E", "4E"], mudshot: ["7L25", "6L25", "5L25", "4L25", "3L25"], naturalgift: ["4M"], - protect: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + protect: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L37"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], reflecttype: ["7E", "6E"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L46", "6L46", "5L46", "4L46"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L16", "6L16", "5L16", "4T", "4L16", "3T"], + rollout: ["7L16", "7V", "6L16", "5L16", "4T", "4L16", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shellsmash: ["7L50", "6L50", "5L52"], - slam: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + slam: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spikecannon: ["7V"], spikes: ["7E", "6E", "5E", "4E", "3E"], - stealthrock: ["6T", "5T", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - supersonic: ["7E", "6E", "5E", "5S0", "4E", "3E"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7E", "7V", "6E", "5E", "5S0", "4E", "3E"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], tickle: ["7L43", "6L43", "5L43", "4L43", "3L43"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7E", "6E", "5E", "4E"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L10", "7V", "6L10", "5L10", "4L10", "3L19"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - whirlpool: ["7E", "6E", "5E", "4M"], - withdraw: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + watergun: ["7L10", "7V", "7V", "6L10", "5L10", "4L10", "3L19"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7E", "7V", "6E", "5E", "4M"], + withdraw: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], wringout: ["7E", "6E", "5E", "4E"], }}, omastar: {learnset: { - ancientpower: ["7L37", "6L37", "5L37", "4T", "4L37", "3L55"], - attract: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L37", "7V", "6L37", "5L37", "4T", "4L37", "3L55"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], - bite: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bind: ["7T", "6T", "5T"], + bite: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brine: ["7L28", "6L28", "5L28", "4M", "4L28"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + constrict: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hornattack: ["7V"], horndrill: ["7V"], - hydropump: ["7L75", "7L1", "7V", "6L1", "5L75", "4L67", "3L65"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L75", "7L1", "7V", "7V", "6L1", "5L75", "4L67", "3L65"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L19", "7V", "6L19", "5L19", "4L19", "3L31"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + leer: ["7L19", "7V", "7V", "6L19", "5L19", "4L19", "3L31"], mimic: ["7V", "3T"], mudshot: ["7L25", "6L25", "5L25", "4L25", "3L25"], naturalgift: ["4M"], - protect: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + protect: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L37"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockblast: ["7L56", "6L56", "5L56", "4L56"], rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L16", "6L16", "5L16", "4T", "4L16", "3T"], + rollout: ["7L16", "7V", "6L16", "5L16", "4T", "4L16", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], shellsmash: ["7L67", "6L67", "5L67"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spikecannon: ["7L1", "7V", "6L40", "5L40", "4L40", "3L40"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spikecannon: ["7L1", "7V", "7V", "6L40", "5L40", "4L40", "3L40"], + stealthrock: ["7T", "6T", "5T", "4M"], stoneedge: ["7M", "6M", "5M", "4M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], tickle: ["7L48", "6L48", "5L48", "4L48", "3L46"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L10", "7V", "6L10", "5L10", "4L10", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - withdraw: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + watergun: ["7L10", "7V", "7V", "6L10", "5L10", "4L10", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + withdraw: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], }}, kabuto: {learnset: { - absorb: ["7L6", "7V", "6L6", "5L6", "5D", "4L6", "3L13"], + absorb: ["7L6", "7V", "7V", "6L6", "5D", "5L6", "4L6", "3L13"], aerialace: ["7M", "3M"], - ancientpower: ["7L46", "6L46", "5L46", "4T", "4L46", "3L55"], + ancientpower: ["7L46", "7V", "6L46", "5L46", "4T", "4L46", "3L55"], aquajet: ["7L31", "6L31", "5L31", "4L31"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "7V", "6E", "5E", "4E", "3E"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brine: ["4M"], - bubblebeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + bubblebeam: ["7E", "7V", "7V", "6E", "5E", "4E", "3E"], captivate: ["4M"], confide: ["7M", "6M"], confuseray: ["7E", "6E", "5E", "5S0", "4E", "3E"], - dig: ["6M", "5M", "5S0", "4M", "4E", "3M", "3E"], + curse: ["7V"], + dig: ["7V", "6M", "5M", "5S0", "4M", "4E", "3M", "3E"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endure: ["7L26", "6L26", "5L26", "4M", "4L26", "3T", "3L37"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + endure: ["7L26", "7V", "6L26", "5L26", "4M", "4L26", "3T", "3L37"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "5D", "4E", "3E"], + flail: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], foresight: ["7E", "6E", "5E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hydropump: ["7V"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - leer: ["7L11", "7V", "6L11", "5L11", "4L11", "3L19"], - megadrain: ["7L36", "6L36", "5L36", "4L36", "3L49"], + icywind: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + leer: ["7L11", "7V", "7V", "6L11", "5L11", "4L11", "3L19"], + megadrain: ["7L36", "7V", "6L36", "5L36", "4L36", "3L49"], metalsound: ["7L41", "6L41", "5L41", "4L41", "3L43"], mimic: ["7V", "3T"], mudshot: ["7L16", "7E", "6L16", "6E", "5L16", "5E", "4L16", "4E", "3L25"], mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "7V", "6E", "5E", "4E", "3E"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - sandattack: ["7L21", "6L21", "5L21", "4L21", "3L31"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L21", "7V", "6L21", "5L21", "4L21", "3L31"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], - scratch: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + scratch: ["7L1", "7V", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], slash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "5D", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7E", "7V", "6E"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], wringout: ["7L50", "6L50", "5L51", "4L51"], }}, kabutops: {learnset: { - absorb: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + absorb: ["7L6", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7L54", "6L54", "5L54", "4T", "4L54", "3L65"], + ancientpower: ["7L54", "7V", "6L54", "5L54", "4T", "4L54", "3L65"], aquajet: ["7L31", "6L31", "5L31", "4L31"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brine: ["4M"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], - cut: ["7V", "6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endure: ["7L26", "6L26", "5L26", "4M", "4L26", "3T", "3L37"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + endure: ["7L26", "7V", "6L26", "5L26", "4M", "4L26", "3T", "3L37"], facade: ["7M", "6M", "5M", "4M", "3M"], feint: ["7L1", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T", "3L1"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T", "3L1"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hydropump: ["7V"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L11", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], - megadrain: ["7L36", "6L36", "5L36", "4L36", "3L55"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + leer: ["7L11", "7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], + megadrain: ["7L36", "7V", "6L36", "5L36", "4L36", "3L55"], megakick: ["7V", "3T"], metalsound: ["7L45", "6L45", "5L45", "4L45", "3L46"], mimic: ["7V", "3T"], @@ -17696,142 +15942,144 @@ exports.BattleLearnsets = { naturalgift: ["4M"], naturepower: ["7M", "6M"], nightslash: ["7L72", "7L1", "6L1", "5L72", "4L72"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7V"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - sandattack: ["7L21", "6L21", "5L21", "4L21", "3L31"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L21", "7V", "6L21", "5L21", "4L21", "3L31"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], - scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + scratch: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], skullbash: ["7V"], - slash: ["7L1", "7V", "6L40", "5L40", "4L40", "3L40"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + slash: ["7L1", "7V", "7V", "6L40", "5L40", "4L40", "3L40"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], stoneedge: ["7M", "6M", "5M", "4M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], takedown: ["7V"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], wringout: ["7L63", "6L63", "5L63", "4L63"], xscissor: ["7M", "6M", "5M", "4M"], }}, aerodactyl: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L17", "7V", "6L17", "5L17", "4L17", "3L8"], + agility: ["7L17", "7V", "7V", "6L17", "5L17", "4L17", "3L8"], aircutter: ["4T"], - ancientpower: ["7L25", "6L25", "5L25", "4T", "4L25", "3L29"], - aquatail: ["6T", "5T", "4T"], - assurance: ["7E", "6E", "5E", "5D", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L25", "7V", "6L25", "5L25", "4T", "4L25", "3L29"], + aquatail: ["7T", "6T", "5T", "4T"], + assurance: ["7E", "6E", "5D", "5E", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bite: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L15"], + bite: ["7L1", "7V", "7V", "6L1", "5D", "5L1", "4L1", "3L15"], brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], crunch: ["7L33", "6L33", "5L33", "4L33"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defog: ["4M"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "7V", "6E", "5E", "4E", "3E"], dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragonrage: ["7V"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], firefang: ["7L1", "6L1", "5L1", "5S0", "4L1"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "7L81", "6M", "6L81", "5M", "5L81", "4M", "4L73"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L65", "7V", "6M", "6L65", "5M", "5L65", "4M", "4L57", "3M", "3L50"], + hyperbeam: ["7M", "7L65", "7V", "7V", "6M", "6L65", "5M", "5L65", "4M", "4L57", "3M", "3L50"], icefang: ["7L1", "6L1", "5L1", "5S0", "4L1"], incinerate: ["6M", "5M"], - ironhead: ["7L57", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L49"], - irontail: ["6T", "5T", "4M", "3M"], + ironhead: ["7T", "7L57", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L49"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], mimic: ["7V", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7V"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "4M", "4L9", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L9", "7V", "6M", "6L9", "5M", "5L9", "4M", "4L9", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "7L73", "6M", "6L73", "5M", "5L73", "4M", "4L65", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L1", "6L1", "5L1", "4L1", "3L36"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + scaryface: ["7L1", "7V", "6L1", "5L1", "4L1", "3L36"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7V", "6T", "5T", "4T", "3T"], + skyattack: ["7T", "7V", "6T", "5T", "4T", "3T"], skydrop: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "5D", "4M"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "5S0", "4M", "4E", "3M", "3E"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5E", "5S0", "4M", "4E", "3M", "3E"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L22"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwind: ["7E", "6T", "6E", "5T", "5E", "4T"], - takedown: ["7L41", "7V", "6L41", "5L41", "4L41", "3L43"], + supersonic: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L22"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwind: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + takedown: ["7L41", "7V", "7V", "6L41", "5L41", "4L41", "3L43"], taunt: ["7M", "6M", "5M", "4M", "3M"], thief: ["7M", "6M", "5M", "4M", "3M"], thunderfang: ["7L1", "6L1", "5L1", "5S0", "4L1"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + whirlwind: ["7E", "7V", "7V", "6E", "5E", "4E", "3E"], wideguard: ["7E", "6E"], - wingattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + wingattack: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], }}, munchlax: {learnset: { - afteryou: ["7E", "6T", "6E", "5T", "5E"], + afteryou: ["7T", "7E", "6T", "6E", "5T", "5E"], amnesia: ["7L9", "6L9", "5L9", "4L9"], attract: ["7M", "6M", "5M", "4M"], belch: ["7E", "6E"], @@ -17845,7 +16093,7 @@ exports.BattleLearnsets = { chipaway: ["7L17", "6L17", "5L25"], confide: ["7M", "6M"], counter: ["7E", "6E", "5E", "4E"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], curse: ["7E", "6E", "5E", "4E", "4S1"], defensecurl: ["7L4", "6L4", "5L4", "4L4", "4S0"], doubleedge: ["7E", "6E", "5E", "4E"], @@ -17854,24 +16102,24 @@ exports.BattleLearnsets = { endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], + firepunch: ["7T", "6T", "5T", "4T"], flamethrower: ["7M", "6M", "5M", "4M"], fling: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L36"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], + gunkshot: ["7T", "6T", "5T", "4T"], happyhour: ["7S2"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], holdback: ["7S2"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - lastresort: ["7L57", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L49"], - lick: ["7L12", "7E", "7L1", "6L1", "6E", "5L12", "5E", "4L12", "4E"], - metronome: ["7L1", "7S2", "6L1", "5L1", "4L1", "4S0", "4S1"], + lastresort: ["7T", "7L57", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L49"], + lick: ["7L12", "7L1", "7E", "6L1", "6E", "5L12", "5E", "4L12", "4E"], + metronome: ["7L1", "7S2", "6L1", "5L1", "4L1", "4S1", "4S0"], mudslap: ["4T"], naturalgift: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4M", "4L44"], odorsleuth: ["7L1", "6L1", "5L1", "4L1", "4S1"], @@ -17880,7 +16128,7 @@ exports.BattleLearnsets = { psychic: ["7M", "6M", "5M", "4M"], pursuit: ["7E", "6E", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["7L1", "6T", "6L1", "5T", "5L17", "4M", "4L17"], + recycle: ["7T", "7L1", "6T", "6L1", "5T", "5L17", "4M", "4L17"], rest: ["7M", "6M", "5M", "4M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], @@ -17893,520 +16141,540 @@ exports.BattleLearnsets = { sandstorm: ["7M", "6M", "5M", "4M"], screech: ["7L20", "6L20", "5L20", "4L20"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], selfdestruct: ["7E", "6E", "5E", "4S0"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["7L50", "6T", "6L1", "5T", "5L52"], - snore: ["6T", "5T", "4T"], + snatch: ["7T", "7L50", "6T", "6L1", "5T", "5L52"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], stockpile: ["7L28", "6L28", "5L28", "4L25"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M", "4E"], sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swallow: ["7L33", "6L33", "5L33", "4L28"], - tackle: ["7L1", "7S2", "6L1", "5L1", "4L1", "4S0", "4S1"], + tackle: ["7L1", "7S2", "6L1", "5L1", "4L1", "4S1", "4S0"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M"], whirlpool: ["4M"], whirlwind: ["7E", "6E", "5E", "4E"], workup: ["7M", "5M"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, snorlax: {learnset: { - afteryou: ["7E", "6T", "6E", "5T", "5E"], - amnesia: ["7L9", "7V", "6L9", "5L9", "5D", "4L9", "3L5"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L9", "7V", "7V", "6L9", "5D", "5L9", "4L9", "3L5"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], belch: ["7E", "6E"], - bellydrum: ["7L44", "6L44", "5L17", "4L17", "3L13"], + bellydrum: ["7L44", "7V", "6L44", "5L17", "4L17", "3L13"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - block: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L36", "3L37"], - bodyslam: ["7L25", "7V", "6L25", "5L36", "4L33", "3T", "3L33", "3S0"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "7L41", "7S1", "6T", "6L41", "5T", "5L41", "4T", "4L36", "3L37"], + bodyslam: ["7L25", "7V", "7S1", "6L25", "5L36", "4L33", "3T", "3L33", "3S0"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubblebeam: ["7V"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], + celebrate: ["7S1"], charm: ["7E", "6E", "5E", "4E", "3E"], chipaway: ["7L17", "6L17", "5L25"], confide: ["7M", "6M"], counter: ["7E", "7V", "6E", "5E", "4E", "3T"], - covet: ["6T", "5T", "3L42"], + covet: ["7T", "6T", "5T", "3L42"], crunch: ["7L49", "6L49", "5L49", "4L44"], - curse: ["7E", "6E", "5E", "4E", "3E", "3S0"], - defensecurl: ["7L4", "6L4", "5L4", "4L4", "3T", "3L9"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E", "3S0"], + defensecurl: ["7L4", "7V", "6L4", "5L4", "4L4", "3T", "3L9"], doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "5D", "4T", "3T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], fissure: ["7E", "7V", "6E", "5E", "4E", "3E", "3S0"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "7L35", "6M", "6L57", "5M", "5L57", "4M", "4L49"], - gunkshot: ["6T", "5T", "4T"], + gunkshot: ["7T", "6T", "5T", "4T"], harden: ["7V"], - headbutt: ["7V", "4T", "3L17"], + headbutt: ["7V", "7V", "4T", "3L17"], heavyslam: ["7L50", "6L50", "5L52"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], highhorsepower: ["7L57"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3L51"], - hypervoice: ["6T", "5T"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M", "3L51"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - lick: ["7L12", "7E", "6L12", "6E", "5L12", "5E", "4L12", "4E", "3E"], + ironhead: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], + lick: ["7L12", "7E", "7V", "6L12", "6E", "5L12", "5E", "4L12", "4E", "3E"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], payday: ["7V"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], - psychup: ["3T"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7V", "3T"], psywave: ["7V"], pursuit: ["7E", "6E", "5E", "4E"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "5D", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5D", "5T", "4M"], reflect: ["7V"], refresh: ["3S0"], - rest: ["7M", "7L28", "7V", "6M", "6L28", "5M", "5L28", "4M", "4L25", "3M", "3L25"], + rest: ["7M", "7L28", "7V", "7V", "6M", "6L28", "5M", "5L28", "4M", "4L25", "3M", "3L25"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M"], + rocksmash: ["7V", "6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L36", "6L36", "5L44", "4T", "4L41", "3T", "3L46"], + rollout: ["7L36", "7V", "6L36", "5L44", "4T", "4L41", "3T", "3L46"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["7V", "3T"], selfdestruct: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "7L33", "6M", "6L33", "5T", "5L33", "4M", "4L28", "3T", "3L37"], + sleeptalk: ["7M", "7L33", "7V", "6M", "6L33", "5T", "5L33", "4M", "4L28", "3T", "3L37"], smackdown: ["7M", "6M", "5M"], - snore: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3T", "3L28"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + snatch: ["7T"], + snore: ["7T", "7L28", "7V", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3T", "3L28"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + stompingtantrum: ["7T"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "7S1", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], whirlwind: ["7E", "6E", "5E", "4E"], wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], yawn: ["7L20", "6L20", "5L20", "4L20", "3L21"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, articuno: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L36", "7V", "6L36", "5L36", "4L36", "4S3", "4S4", "3L25", "3S0", "3S1"], + agility: ["7L36", "7V", "7V", "6L36", "5L36", "4L36", "4S4", "4S3", "3L25", "3S1", "3S0"], aircutter: ["4T"], - ancientpower: ["7L29", "6L29", "5L29", "4T", "4L29"], + ancientpower: ["7L29", "7S7", "6L29", "5L29", "4T", "4L29"], auroraveil: ["7M"], avalanche: ["4M"], bide: ["7V"], - blizzard: ["7M", "7L78", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L73"], + blizzard: ["7M", "7L78", "7V", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L73"], bubblebeam: ["7V"], confide: ["7M", "6M"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], extrasensory: ["3S2"], facade: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - freezedry: ["7L43", "6L1", "6S6"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + freezedry: ["7L43", "7S7", "6L1", "6S6"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "7L57", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], + gust: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L57", "7S7", "6M", "6L57", "6S6", "6S5", "5M", "5L85", "4M", "4L85", "3M"], haze: ["3S2"], healbell: ["3S2"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["7L92", "6L1", "5L92"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "7L71", "7V", "6M", "6L43", "6S5", "6S6", "5M", "5L43", "4M", "4L43", "4S3", "4S4", "3M", "3L49", "3S0", "3S1", "3S2"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7L71", "7V", "7V", "6M", "6L43", "6S6", "6S5", "5M", "5L43", "4M", "4L43", "4S4", "4S3", "3M", "3L49", "3S2", "3S1", "3S0"], iceshard: ["7L15", "6L15", "5L15", "4L15"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + laserfocus: ["7T"], mimic: ["7V", "3T"], - mindreader: ["7L22", "6L22", "5L22", "4L22", "4S4", "3L37", "3S0", "3S1"], - mist: ["7L8", "7V", "6L8", "5L8", "4L8", "4S4", "3L13", "3S0"], - mudslap: ["4T", "3T"], + mindreader: ["7L22", "7V", "6L22", "5L22", "4L22", "4S4", "3L37", "3S1", "3S0"], + mist: ["7L8", "7V", "7V", "6L8", "5L8", "4L8", "4S4", "3L13", "3S0"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], peck: ["7V"], pluck: ["5M", "4M"], - powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], + powdersnow: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7V"], - reflect: ["7M", "7L50", "7V", "6M", "6L50", "6S5", "6S6", "5M", "5L50", "4M", "4L50", "4S3", "3M", "3L61", "3S1"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + reflect: ["7M", "7L50", "7V", "7S7", "7V", "6M", "6L50", "6S6", "6S5", "5M", "5L50", "4M", "4L50", "4S3", "3M", "3L61", "3S1"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L85", "6M", "6L1", "5T", "5L57", "4M", "4L57", "4S3"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], sheercold: ["7L99", "6L1", "5L78", "4L78", "3L85"], - signalbeam: ["6T", "5T", "4T"], - skyattack: ["7V", "6T", "5T", "4T", "3T"], + signalbeam: ["7T", "6T", "5T", "4T"], + skyattack: ["7T", "7V", "6T", "5T", "4T", "3T"], skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwind: ["7L64", "6T", "6L1", "6S5", "5T", "5L64", "4T", "4L64"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwind: ["7T", "7L64", "6T", "6L1", "6S5", "5T", "5L64", "4T", "4L64"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], uturn: ["7M", "6M", "5M", "4M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlwind: ["7V"], }}, zapdos: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L43", "7V", "6L43", "6S5", "6S6", "5L43", "4L43", "4S3", "4S4", "3L25", "3S0", "3S1"], + agility: ["7L43", "7V", "7V", "6L43", "6S6", "6S5", "5L43", "4L43", "4S4", "4S3", "3L25", "3S1", "3S0"], aircutter: ["4T"], - ancientpower: ["7L29", "6L29", "5L29", "4T", "4L29"], + ancientpower: ["7L29", "7S7", "6L29", "5L29", "4T", "4L29"], batonpass: ["3S2"], bide: ["7V"], charge: ["7L36", "6L36", "5L36", "4L36", "4S3", "3L61", "3S1"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - defog: ["4M"], - detect: ["7L15", "6L15", "5L15", "4L15", "4S4", "3L37", "3S0", "3S1"], - discharge: ["7L50", "6L50", "6S5", "6S6", "5L50", "4L50", "4S3"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7L15", "7V", "6L15", "5L15", "4L15", "4S4", "3L37", "3S1", "3S0"], + discharge: ["7L50", "7S7", "6L50", "6S6", "6S5", "5L50", "4L50", "4S3"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drillpeck: ["7L71", "7V", "6L1", "5L71", "4L71", "4S4", "3L49", "3S0", "3S1"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L71", "7V", "7V", "6L1", "5L71", "4L71", "4S4", "3L49", "3S1", "3S0"], + endure: ["7V", "4M", "3T"], extrasensory: ["3S2"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - lightscreen: ["7M", "7L64", "7V", "6M", "6L64", "6S5", "5M", "5L64", "4M", "4L64", "3M", "3L73"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L64", "7V", "7V", "6M", "6L64", "6S5", "5M", "5L64", "4M", "4L64", "3M", "3L73"], magneticflux: ["7L92"], metalsound: ["3S2"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], - pluck: ["7L22", "6L22", "5M", "5L22", "4M", "4L22"], - protect: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L22", "7S7", "6L22", "5M", "5L22", "4M", "4L22"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "7L57", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], + raindance: ["7M", "7L57", "7S7", "7V", "6M", "6L57", "6S6", "6S5", "5M", "5L85", "4M", "4L85", "3M"], razorwind: ["7V"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L85", "6M", "6L1", "5T", "5L57", "4M", "4L57", "4S3"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skyattack: ["7V", "6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skyattack: ["7T", "7V", "6T", "5T", "4T", "3T"], skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thunder: ["7M", "7L78", "7V", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L85"], + thunder: ["7M", "7L78", "7V", "7V", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L85"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], - thundershock: ["7L1", "7V", "6L1", "6S6", "5L1", "4L1", "3L1"], - thunderwave: ["7M", "7L8", "7V", "6M", "6L8", "5M", "5L8", "4M", "4L8", "4S4", "3T", "3L13", "3S0"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["7L1", "7V", "7V", "6L1", "6S6", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L8", "7V", "7V", "6M", "6L8", "5M", "5L8", "4M", "4L8", "4S4", "3T", "3L13", "3S0"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], uturn: ["7M", "6M", "5M", "4M"], voltswitch: ["7M", "6M", "5M"], whirlwind: ["7V"], wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L99", "6L1", "5L92"], + zapcannon: ["7L99", "7V", "6L1", "5L92"], }}, moltres: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L15", "7V", "6L15", "5L15", "4L15", "4S4", "3L25", "3S0", "3S1"], + agility: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "4S4", "3L25", "3S1", "3S0"], aircutter: ["4T"], - airslash: ["7L50", "6L50", "6S5", "5L50", "4L50", "4S3"], - ancientpower: ["7L29", "6L29", "5L29", "4T", "4L29"], + airslash: ["7L50", "7S7", "6L50", "6S5", "5L50", "4L50", "4S3"], + ancientpower: ["7L29", "7S7", "6L29", "5L29", "4T", "4L29"], bide: ["7V"], burnup: ["7L99"], confide: ["7M", "6M"], - defog: ["4M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - ember: ["7L1", "6L1", "5L1", "4L1", "3L1"], - endure: ["7L22", "6L22", "5L22", "4M", "4L22", "4S4", "3T", "3L37", "3S0", "3S1"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["7L22", "7V", "6L22", "5L22", "4M", "4L22", "4S4", "3T", "3L37", "3S1", "3S0"], extrasensory: ["3S2"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firespin: ["7L8", "7V", "6L8", "5L8", "4L8", "4S4", "3L13", "3S0"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firespin: ["7L8", "7V", "7V", "6L8", "5L8", "4L8", "4S4", "3L13", "3S0"], flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S3", "4S4", "3M", "3L49", "3S0", "3S1", "3S2"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "7L36", "7S7", "7V", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S4", "4S3", "3M", "3L49", "3S2", "3S1", "3S0"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - heatwave: ["7L64", "6T", "6L1", "6S5", "6S6", "5T", "5L64", "4T", "4L64", "3L73"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "7L64", "6T", "6L1", "6S6", "6S5", "5T", "5L64", "4T", "4L64", "3L73"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["7L92", "6L1", "5L92"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], + laserfocus: ["7T"], leer: ["7V"], mimic: ["7V", "3T"], morningsun: ["3S2"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], overheat: ["7M", "6M", "5M", "4M", "3M"], peck: ["7V"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7V"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L85", "6M", "6L1", "5T", "5L57", "4M", "4L57", "4S3"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L43", "6M", "6L43", "6S5", "6S6", "5M", "5L43", "4M", "4L43", "4S3", "3M", "3L61", "3S1"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + safeguard: ["7M", "7L43", "7V", "6M", "6L43", "6S6", "6S5", "5M", "5L43", "4M", "4L43", "4S3", "3M", "3L61", "3S1"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7L78", "7V", "6T", "6L1", "6S6", "5T", "5L78", "4T", "4L78", "3T", "3L85"], + skyattack: ["7T", "7L78", "7V", "7V", "6T", "6L1", "6S6", "5T", "5L78", "4T", "4L78", "3T", "3L85"], skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "7L71", "6M", "6L71", "5M", "5L71", "4M", "4L71"], - steelwing: ["7M", "6M", "4M", "3M"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L57", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + sunnyday: ["7M", "7L57", "7S7", "7V", "6M", "6L57", "6S6", "6S5", "5M", "5L85", "4M", "4L85", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], uturn: ["7M", "6M", "5M", "4M"], whirlwind: ["7V"], willowisp: ["7M", "6M", "5M", "4M", "3S2"], - wingattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + wingattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], }}, dratini: {learnset: { - agility: ["7L25", "7V", "6L25", "5L25", "4L25", "3L36"], + agility: ["7L25", "7V", "7V", "6L25", "5L25", "4L25", "3L36"], aquajet: ["7E", "6E", "5E"], - aquatail: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L31"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L31"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brutalswing: ["7M"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7E", "6E", "5E", "5D", "4E", "3E"], + dragonbreath: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], dragondance: ["7L51", "7E", "6L51", "6E", "5L51", "5E", "4L45", "4E", "3E"], - dragonpulse: ["7E", "6T", "6E", "5T", "5E", "4M"], - dragonrage: ["7L15", "7V", "6L15", "5L15", "4L15", "3L22"], + dragonpulse: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + dragonrage: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L22"], dragonrush: ["7L41", "7E", "6L41", "6E", "5L41", "5E", "4L35", "4E"], dragontail: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - endure: ["4M", "3T"], - extremespeed: ["7E", "6E", "5E", "4E"], + endure: ["7V", "4M", "3T"], + extremespeed: ["7E", "7V", "6E", "5E", "4E"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L61", "7V", "6M", "6L61", "5M", "5L61", "4M", "4L55", "3M", "3L57"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L61", "7V", "7V", "6M", "6L61", "5M", "5L61", "4M", "4L55", "3M", "3L57"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], mimic: ["7V", "3T"], - mist: ["7E", "6E", "5E", "4E", "3E"], + mist: ["7E", "7V", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], - outrage: ["7L55", "6T", "6L55", "5T", "5L55", "4T", "4L51", "3L50"], - protect: ["7M", "6M", "5M", "4M", "3M"], + outrage: ["7T", "7L55", "7V", "6T", "6L55", "5T", "5L55", "4T", "4L51", "3L50"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L41", "3M", "3L43"], + safeguard: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L41", "3M", "3L43"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - slam: ["7L21", "7V", "6L21", "5L21", "4L21", "3L29"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + slam: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L29"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "7L5", "7V", "6M", "6L5", "5M", "5L5", "5D", "4M", "4L5", "3T", "3L8"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - twister: ["7L11", "6L11", "5L11", "4T", "4L11", "3L15"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L5", "7V", "7V", "6M", "6L5", "5D", "5M", "5L5", "4M", "4L5", "3T", "3L8"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L11", "7V", "6L11", "5L11", "4T", "4L11", "3L15"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["7E", "6T", "6E", "5E", "5D", "4M", "3M"], + waterpulse: ["7T", "7E", "6T", "6E", "5D", "5E", "4M", "3M"], whirlpool: ["4M"], - wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + wrap: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + zapcannon: ["7V"], }}, dragonair: {learnset: { - agility: ["7L25", "7V", "6L25", "5L25", "4L25", "3L38"], - aquatail: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L33"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L25", "7V", "7V", "6L25", "5L25", "4L25", "3L38"], + aquatail: ["7T", "7L39", "6T", "6L39", "5T", "5L39", "4T", "4L33"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7V"], - bind: ["6T", "5T"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brutalswing: ["7M"], bubblebeam: ["7V"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], + detect: ["7V"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7V"], dragondance: ["7L61", "6L61", "5L61", "4L53"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L15", "7V", "6L15", "5L15", "4L15", "3L22"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L22"], dragonrush: ["7L47", "6L47", "5L47", "4L39"], dragontail: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], horndrill: ["7V"], - hyperbeam: ["7M", "7L75", "7V", "6M", "6L75", "5M", "5L75", "4M", "4L67", "3M", "3L65"], + hyperbeam: ["7M", "7L75", "7V", "7V", "6M", "6L75", "5M", "5L75", "4M", "4L67", "3M", "3L65"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], mimic: ["7V", "3T"], naturalgift: ["4M"], - outrage: ["7L67", "6T", "6L67", "5T", "5L67", "4T", "4L61", "3L56"], - protect: ["7M", "6M", "5M", "4M", "3M"], + outrage: ["7T", "7L67", "7V", "6T", "6L67", "5T", "5L67", "4T", "4L61", "3L56"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L53", "6M", "6L53", "5M", "5L53", "4M", "4L47", "3M", "3L47"], + safeguard: ["7M", "7L53", "7V", "6M", "6L53", "5M", "5L53", "4M", "4L47", "3M", "3L47"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], - slam: ["7L21", "7V", "6L21", "5L21", "4L21", "3L29"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + slam: ["7L21", "7V", "7V", "6L21", "5L21", "4L21", "3L29"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], takedown: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "7L5", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - twister: ["7L11", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L5", "7L1", "7V", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L11", "7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], - wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + wrap: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + zapcannon: ["7V"], }}, dragonite: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L25", "7V", "6L25", "6S8", "5L25", "4L25", "3L38", "3S0"], + agility: ["7L25", "7V", "7V", "6L25", "6S8", "5L25", "4L25", "3L38", "3S0"], aircutter: ["4T"], - aquatail: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L33"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L39", "6T", "6L39", "5T", "5L39", "4T", "4L33"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], barrier: ["6S8"], bide: ["7V"], - bind: ["6T", "5T"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], @@ -18414,111 +16682,115 @@ exports.BattleLearnsets = { bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], + curse: ["7V"], cut: ["6M", "5M", "4M", "3M"], - defog: ["4M"], + defog: ["7T", "4M"], + detect: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], dracometeor: ["7T", "6T", "5T", "4T", "4S2"], + dragonbreath: ["7V"], dragonclaw: ["7M", "6M", "5M", "4M", "3M"], dragondance: ["7L61", "6L61", "6S7", "5L61", "5S3", "4L53", "4S2", "3S1"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L15", "7V", "6L15", "5L15", "4L15", "3L22"], - dragonrush: ["7L47", "6L47", "5L47", "5S4", "5S5", "4L39"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L15", "7V", "7V", "6L15", "5L15", "4L15", "3L22"], + dragonrush: ["7L47", "6L47", "5L47", "5S5", "5S4", "4L39"], dragontail: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], - dynamicpunch: ["3T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M", "3S1"], - endure: ["4M", "3T"], - extremespeed: ["6S7", "5S3", "5S5"], + endure: ["7V", "4M", "3T"], + extremespeed: ["6S7", "5S5", "5S3"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "5S6", "4M", "3M"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "5S3", "4T", "4L1", "3T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "5S6", "4M", "3M"], + firepunch: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "5S3", "4T", "4L1", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], healbell: ["3S1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], horndrill: ["7V"], hurricane: ["7L81", "7L1", "6L1", "6S7", "5L81"], - hyperbeam: ["7M", "7L75", "7V", "6M", "6L75", "6S8", "5M", "5L75", "5S6", "4M", "4L73", "3M", "3L75", "3S1"], + hyperbeam: ["7M", "7L75", "7V", "7V", "6M", "6L75", "6S8", "5M", "5L75", "5S6", "4M", "4L73", "3M", "3L75", "3S1"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - outrage: ["7L67", "6T", "6L67", "6S7", "5T", "5L67", "5S3", "5S6", "4T", "4L64", "4S2", "3L61", "3S0"], + outrage: ["7T", "7L67", "7V", "6T", "6L67", "6S7", "5T", "5L67", "5S6", "5S3", "4T", "4L64", "4S2", "3L61", "3S0"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7V"], reflect: ["7V"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roar: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], roost: ["7M", "7L1", "6M", "6L1", "5T", "5L1", "4M", "4L1"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L53", "6M", "6L53", "5M", "5L53", "5S4", "5S5", "5S6", "4M", "4L47", "3M", "3L47", "3S0"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + safeguard: ["7M", "7L53", "7V", "6M", "6L53", "5M", "5L53", "5S6", "5S5", "5S4", "4M", "4L47", "3M", "3L47", "3S0"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], skullbash: ["7V"], skydrop: ["7M", "6M", "5M"], - slam: ["7L21", "7V", "6L21", "6S8", "5L21", "4L21", "3L29"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + slam: ["7L21", "7V", "7V", "6L21", "6S8", "5L21", "4L21", "3L29"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], - tailwind: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "7V", "4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "4S2", "3M"], - thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "5S4", "4T", "4L1", "3T"], - thunderwave: ["7M", "7L5", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - twister: ["7L11", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "5S4", "4T", "4L1", "3T"], + thunderwave: ["7M", "7L5", "7L1", "7V", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L11", "7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - wingattack: ["7L1", "6L55", "5L55", "5S4", "5S5", "4L55", "3L55", "3S0"], - wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + wingattack: ["7L1", "7V", "6L55", "5L55", "5S5", "5S4", "4L55", "3L55", "3S0"], + wrap: ["7L1", "7V", "7V", "6L1", "5L1", "4L1", "3L1"], + zapcannon: ["7V"], }}, mewtwo: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - amnesia: ["7L79", "7V", "6L79", "5L50", "4L57", "4S1", "3L77"], - aquatail: ["6T", "5T", "4T"], - aurasphere: ["7L70", "6L70", "6S4", "6S5", "5L93", "5S2", "4L100"], + amnesia: ["7L79", "7V", "7V", "6L79", "5L50", "4L57", "4S1", "3L77"], + aquatail: ["7T", "6T", "5T", "4T"], + aurasphere: ["7L70", "6L70", "6S5", "6S4", "5L93", "5S2", "4L100"], avalanche: ["4M"], - barrier: ["7L64", "7V", "6L64", "6S4", "5L1", "4L8", "3L11"], + barrier: ["7L64", "7V", "7V", "6L64", "6S4", "5L1", "4L8", "3L11"], bide: ["7V"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7V", "3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], @@ -18528,152 +16800,155 @@ exports.BattleLearnsets = { calmmind: ["7M", "6M", "5M", "4M", "3M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + confusion: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], counter: ["7V", "3T"], - disable: ["7L1", "6L1", "5L1", "4L1", "3L1"], + curse: ["7V"], + detect: ["7V"], + disable: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], dive: ["6M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], electroball: ["5S2"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L15", "6L15", "5L15", "4L22", "3L44"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L15", "7V", "6L15", "5L15", "4L22", "3L44"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], guardswap: ["7L43", "6L43", "5L57", "4L64", "4S1"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], healpulse: ["5S3"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hurricane: ["5S3"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "7V", "6M", "5M", "5S3", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - laserfocus: ["7L1"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T", "7L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mefirst: ["7L93", "6L93", "5L71", "4L79"], megakick: ["7V", "3T"], megapunch: ["7V", "3T"], metronome: ["7V", "3T"], mimic: ["7V", "3T"], miracleeye: ["7L29", "6L29", "5L29", "4L36"], - mist: ["7L86", "7V", "6L86", "5L36", "4L43", "3L22"], - mudslap: ["4T", "3T"], + mist: ["7L86", "7V", "7V", "6L86", "5L36", "4L43", "3L22"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payday: ["7V"], poisonjab: ["7M", "6M", "5M", "4M"], powerswap: ["7L43", "6L43", "5L57", "4L64", "4S1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L57", "7V", "6M", "6L57", "6S4", "6S5", "5M", "5L64", "4M", "4L71", "3M", "3L66", "3S0"], - psychocut: ["7L36", "6L36", "5L43", "4L50", "4S1"], - psychup: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L29", "3T", "3L33"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L57", "7V", "7S6", "7V", "6M", "6L57", "6S5", "6S4", "5M", "5L64", "4M", "4L71", "3M", "3L66", "3S0"], + psychocut: ["7L36", "7S6", "6L36", "5L43", "4L50", "4S1"], + psychup: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L29", "3T", "3L33"], psyshock: ["7M", "6M", "5M"], - psystrike: ["7L100", "6L100", "6S5", "5L100", "5S2", "5S3"], + psystrike: ["7L100", "6L100", "6S5", "5L100", "5S3", "5S2"], psywave: ["7L1", "7V"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L50", "7V", "6L50", "6S4", "6S5", "5L79", "4L86", "3L44", "3S0"], - recycle: ["6T", "5T", "4M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L50", "7V", "7S6", "7V", "6L50", "6S5", "6S4", "5L79", "4L86", "3L44", "3S0"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L86", "4M", "4L93", "3M", "3L55", "3S0"], + safeguard: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L86", "4M", "4L93", "3M", "3L55", "3S0"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["7V", "3T"], selfdestruct: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "5S2", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "5S2", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L8", "7V", "6L8", "5L8", "4T", "4L15", "3T", "3L22", "3S0"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L8", "7V", "7S6", "7V", "6L8", "5L8", "4T", "4L15", "3T", "3L22", "3S0"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], teleport: ["7V"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, mew: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["6T", "5T"], + afteryou: ["7T", "6T", "5T"], aircutter: ["4T"], - allyswitch: ["5M"], + allyswitch: ["7T", "5M"], amnesia: ["7L60", "6L60", "5L60", "4L60", "4S17"], - ancientpower: ["7L50", "6L50", "5L50", "4T", "4L50", "4S14", "3L50"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurasphere: ["7L100", "6L100", "5L100", "4L100", "4S14", "4S15", "4S16", "4S17", "4S18", "4S19"], + ancientpower: ["7L50", "7V", "6L50", "5L50", "4T", "4L50", "4S14", "3L50"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurasphere: ["7L100", "6L100", "5L100", "4L100", "4S19", "4S18", "4S17", "4S16", "4S15", "4S14"], auroraveil: ["7M"], avalanche: ["4M"], barrier: ["7L40", "7S24", "6L40", "5L40", "4L40", "4S15"], batonpass: ["7L80", "6L80", "5L80", "4L80"], bide: ["7V"], - bind: ["6T", "5T"], - blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["7V", "3T"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brine: ["4M"], brutalswing: ["7M"], bubblebeam: ["7V"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], bulletseed: ["4M", "3M"], @@ -18682,542 +16957,566 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], counter: ["7V", "3T"], - covet: ["6T", "5T"], - cut: ["7V", "6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + cut: ["7V", "7V", "6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - defog: ["4M"], - dig: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7V", "3T"], + defog: ["7T", "4M"], + detect: ["7V"], + dig: ["7V", "7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["7V", "3T"], - doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragonrage: ["7V"], dragontail: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], - drillrun: ["6T", "5T"], - dualchop: ["6T", "5T"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "7V", "6M", "5M", "4M", "3T"], + drillrun: ["7T", "6T", "5T"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], eggbomb: ["7V"], - electroweb: ["6T", "5T"], + electroweb: ["7T", "6T", "5T"], embargo: ["7M", "6M", "5M", "4M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["3S2", "3S3"], + fakeout: ["3S3", "3S2"], falseswipe: ["7M", "6M", "5M", "4M"], - feintattack: ["3S4", "3S5"], - fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + feintattack: ["3S5", "3S4"], + fireblast: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fissure: ["7V"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7V", "6M", "5M", "4M", "3M"], + flash: ["7V", "7V", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gastroacid: ["6T", "5T", "4T"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gastroacid: ["7T", "6T", "5T", "4T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - gunkshot: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], + gunkshot: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], horndrill: ["7V"], - hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["4S20", "3S6", "3S7"], + hyperbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["4S20", "3S7", "3S6"], icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], infestation: ["7M", "6M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], leechlife: ["7M"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - magnetrise: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T", "4T"], mefirst: ["7L70", "6L70", "5L70", "4L70"], megadrain: ["7V"], megakick: ["7V", "3T"], - megapunch: ["7L10", "7V", "6L10", "5L10", "4L10", "4S16", "3T", "3L20", "3S0"], - metronome: ["7L20", "7V", "7S24", "6L20", "5L20", "4L20", "4S14", "4S15", "4S16", "4S17", "4S18", "4S19", "3T", "3L30", "3S0"], + megapunch: ["7L10", "7V", "7V", "6L10", "5L10", "4L10", "4S16", "3T", "3L20", "3S0"], + metronome: ["7L20", "7V", "7S24", "7V", "6L20", "5L20", "4L20", "4S19", "4S18", "4S17", "4S16", "4S15", "4S14", "3T", "3L30", "3S0"], mimic: ["7V", "3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L90", "6L90", "5L90", "4L90"], naturalgift: ["4M"], naturepower: ["7M", "6M"], - nightmare: ["3T"], - nightshade: ["3S8", "3S9"], + nightmare: ["7V", "3T"], + nightshade: ["3S9", "3S8"], ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], overheat: ["7M", "6M", "5M", "4M", "3M"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], payday: ["7V"], pluck: ["5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], - pound: ["7L1", "7V", "7S23", "6L1", "6S22", "5L1", "4L1", "4S21", "3L1", "3S0", "3S1"], + pound: ["7L1", "7V", "7S23", "7V", "6L1", "6S22", "5L1", "4L1", "4S21", "3L1", "3S1", "3S0"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L30", "7V", "7S24", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S19", "3M", "3L40"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L30", "7V", "7S24", "7V", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S19", "3M", "3L40"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], psywave: ["7V"], quash: ["7M", "6M", "5M"], rage: ["7V"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], razorwind: ["7V"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], reflecttype: ["7L1", "6L1", "5L1"], - rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "4S20", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "4S20", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T", "3S10", "3S11"], - rollout: ["4T", "3T"], + roleplay: ["7T", "6T", "5T", "4T", "3S11", "3S10"], + rollout: ["7V", "4T", "3T"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["7V", "3T"], selfdestruct: ["7V", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], - skillswap: ["6T", "5T", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], skullbash: ["7V"], - skyattack: ["7V", "6T", "5T", "4T", "3T"], + skyattack: ["7T", "7V", "6T", "5T", "4T", "3T"], skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], smackdown: ["7M", "6M", "5M"], smartstrike: ["7M"], snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], softboiled: ["7V", "3T"], - solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - steelwing: ["7M", "6M", "4M", "3M"], + solarbeam: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], submission: ["7V"], substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "7V", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7V", "4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + swift: ["7V", "7V", "4T", "3T"], swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T", "4S20"], - tailwind: ["6T", "5T", "4T"], + synthesis: ["7T", "6T", "5T", "4T", "4S20"], + tailwind: ["7T", "6T", "5T", "4T"], takedown: ["7V"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - teleport: ["7V", "4S14", "4S15", "4S16", "4S17", "4S18", "4S19", "4S20"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + teleport: ["7V", "4S20", "4S19", "4S18", "4S17", "4S16", "4S15", "4S14"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + thunder: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], - transform: ["7L1", "7V", "7S24", "6L1", "5L1", "4L1", "4S18", "3L10", "3S0", "3S1"], + toxic: ["7M", "7V", "7V", "6M", "5M", "4M", "3M"], + transform: ["7L1", "7V", "7S24", "7V", "6L1", "5L1", "4L1", "4S18", "3L10", "3S1", "3S0"], triattack: ["7V"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], vacuumwave: ["4T"], venoshock: ["7M", "6M", "5M"], voltswitch: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], watergun: ["7V"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], whirlwind: ["7V"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], workup: ["7M", "5M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], xscissor: ["7M", "6M", "5M", "4M"], - zapcannon: ["3S12", "3S13"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V", "3S13", "3S12"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, chikorita: {learnset: { - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E", "3S1"], + ancientpower: ["7E", "7V", "6E", "5E", "4T", "4E", "3E", "3S1"], aromatherapy: ["7L42", "7E", "6L42", "6E", "5L42", "5E", "4L42", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L34", "7E", "6L34", "6E", "5L34", "5E", "4L34", "4E", "3T", "3L29"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L34", "7E", "7V", "6L34", "6E", "5L34", "5E", "4L34", "4E", "3T", "3L29"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - cut: ["6M", "5M", "4M", "3M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E", "3E"], - flash: ["6M", "5M", "4M", "3M"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], frenzyplant: ["3S1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], furycutter: ["4T"], - gigadrain: ["6T", "5T", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grasspledge: ["7T", "6T", "5T"], grasswhistle: ["7E", "6E", "5E", "4E", "3E"], grassyterrain: ["7E", "6E"], - growl: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], - headbutt: ["4T"], + growl: ["7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], + headbutt: ["7V", "4T"], healpulse: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], ingrain: ["7E", "6E", "5E", "4E", "3E"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], leafstorm: ["7E", "6E", "5E", "4E"], - leechseed: ["7E", "6E", "5E", "4E", "3E"], - lightscreen: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L36"], + leechseed: ["7E", "7V", "6E", "5E", "4E", "3E"], + lightscreen: ["7M", "7L31", "7V", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L36"], magicalleaf: ["7L20", "6L20", "5L20", "4L20"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7L23", "6L23", "5L23", "4M", "4L23"], naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], - poisonpowder: ["7L9", "6L9", "5L9", "4L9", "3L15"], - protect: ["7M", "6M", "5M", "4M", "3M"], - razorleaf: ["7L6", "6L6", "5L6", "4L6", "3L8", "3S0"], - reflect: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L12"], + poisonpowder: ["7L9", "7V", "6L9", "5L9", "4L9", "3L15"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + razorleaf: ["7L6", "7V", "6L6", "5L6", "4L6", "3L8", "3S0"], + reflect: ["7M", "7L17", "7V", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L12"], refresh: ["7E", "6E", "5E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L39", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3M", "3L43"], + safeguard: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3M", "3L43"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L45", "3M", "3L50"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L45", "3M", "3L50"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L28", "6L28", "5L28", "4L28"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L12", "6T", "6L12", "5T", "5L12", "4T", "4L12", "3L22"], - tackle: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - vinewhip: ["7E", "6E", "5E", "4E", "3E"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L28", "7V", "6L28", "5L28", "4L28"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "7L12", "7V", "6T", "6L12", "5T", "5L12", "4T", "4L12", "3L22"], + tackle: ["7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vinewhip: ["7E", "7V", "6E", "5E", "4E", "3E"], workup: ["7M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], wringout: ["7E", "6E", "5E", "4E"], }}, bayleef: {learnset: { ancientpower: ["4T"], aromatherapy: ["7L50", "6L50", "5L50", "4L50"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L40", "6L40", "5L40", "4L40", "3T", "3L31"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L40", "7V", "6L40", "5L40", "4L40", "3T", "3L31"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grasspledge: ["7T", "6T", "5T"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L39"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L36", "7V", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L39"], magicalleaf: ["7L22", "6L22", "5L22", "4L22"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7L26", "6L26", "5L26", "4M", "4L26"], naturepower: ["7M", "6M"], - poisonpowder: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L15"], - protect: ["7M", "6M", "5M", "4M", "3M"], - razorleaf: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - reflect: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L1"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + poisonpowder: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L15"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + razorleaf: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + reflect: ["7M", "7L18", "7V", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L47"], + safeguard: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L47"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L54", "3M", "3L55"], - strength: ["6M", "5M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L54", "7V", "6M", "6L54", "5M", "5L54", "4M", "4L54", "3M", "3L55"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L32", "6L32", "5L32", "4L32"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L32", "7V", "6L32", "5L32", "4L32"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L12", "6T", "6L12", "5T", "5L12", "4T", "4L12", "3L23"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + synthesis: ["7T", "7L12", "7V", "6T", "6L12", "5T", "5L12", "4T", "4L12", "3L23"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], workup: ["7M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], }}, meganium: {learnset: { ancientpower: ["4T"], aromatherapy: ["7L60", "6L60", "5L60", "4L60"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L46", "6L46", "6S0", "5L46", "4L46", "3T", "3L31"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L46", "7V", "6L46", "6S0", "5L46", "4L46", "3T", "3L31"], bulldoze: ["7M", "6M", "5M"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragontail: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], frenzyplant: ["7T", "6T", "5T", "4T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], grasspledge: ["7T", "6T", "5T"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L41"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L41"], magicalleaf: ["7L22", "6L22", "5L22", "4L22"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7L26", "6L26", "5L26", "4M", "4L26"], naturepower: ["7M", "6M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], petalblizzard: ["7L70", "7L1", "6L1"], petaldance: ["7L1", "6L32", "5L32", "4L32"], - poisonpowder: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L15"], - protect: ["7M", "6M", "5M", "4M", "3M"], - razorleaf: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - reflect: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L1"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + poisonpowder: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L15"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + razorleaf: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + reflect: ["7M", "7L18", "7V", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L54", "3M", "3L51"], + safeguard: ["7M", "7L54", "7V", "6M", "6L54", "5M", "5L54", "4M", "4L54", "3M", "3L51"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L66", "6M", "6L66", "6S0", "5M", "5L66", "4M", "4L66", "3M", "3L61"], - strength: ["6M", "5M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L66", "7V", "6M", "6L66", "6S0", "5M", "5L66", "4M", "4L66", "3M", "3L61"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "6S0", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L34", "6L34", "5L34", "4L34"], + sunnyday: ["7M", "7V", "6M", "6S0", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L34", "7V", "6L34", "5L34", "4L34"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L12", "6T", "6L12", "6S0", "5T", "5L12", "4T", "4L12", "3L23"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + synthesis: ["7T", "7L12", "7V", "6T", "6L12", "6S0", "5T", "5L12", "4T", "4L12", "3L23"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], workup: ["7M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "6T", "5T", "4T"], }}, cyndaquil: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], blastburn: ["3S1"], bodyslam: ["3T"], burnup: ["7L58"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], crushclaw: ["7E", "6E", "5E", "4E", "3E"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["7L22", "6L22", "5L22", "4L22", "3T"], - dig: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L22", "7V", "6L22", "5L22", "4L22", "3T"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L55", "7E", "6L55", "6E", "5L55", "5E", "4L46", "4E", "3T"], doublekick: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - ember: ["7L10", "6L10", "5L10", "4L10", "3L12"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L10", "7V", "6L10", "5L10", "4L10", "3L12"], + endure: ["7V", "4M", "3T"], eruption: ["7L64", "6L58", "5L58", "4L49"], extrasensory: ["7E", "6E", "5E", "4E"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firepledge: ["7T", "6T", "5T"], flameburst: ["7E", "6E", "5E"], flamecharge: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - flamethrower: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L46"], - flamewheel: ["7L19", "6L19", "5L19", "4L19", "3L27"], + flamethrower: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L46"], + flamewheel: ["7L19", "7V", "6L19", "5L19", "4L19", "3L27"], flareblitz: ["7E", "6E", "5E", "4E"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyswipes: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyswipes: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], howl: ["7E", "6E", "5E", "4E", "3E"], incinerate: ["6M", "5M"], inferno: ["7L46", "6L46", "5L46"], + irontail: ["7V"], lavaplume: ["7L37", "6L37", "5L37", "4L31"], - leer: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + leer: ["7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "7E", "6M", "6E", "5E"], overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3L19", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E", "3S1"], - rollout: ["7L49", "6L49", "5L49", "4T", "4L40", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7E", "7V", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3L19", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E", "3S1"], + rollout: ["7L49", "7V", "6L49", "5L49", "4T", "4L40", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L6", "6L6", "5L6", "4L4", "3L6", "3S0"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L6", "7V", "6L6", "5L6", "4L4", "3L6", "3S0"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + submission: ["7V"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L31", "6L31", "5L31", "4T", "4L28", "3T", "3L36"], - tackle: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], - thrash: ["7E", "6E", "5E", "4E", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L31", "7V", "6L31", "5L31", "4T", "4L28", "3T", "3L36"], + tackle: ["7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], + thrash: ["7E", "7V", "6E", "5E", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], workup: ["7M"], }}, quilava: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], burnup: ["7L68"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["7L24", "6L24", "5L24", "4L24", "3T"], - dig: ["6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L24", "7V", "6L24", "5L24", "4L24", "3T"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L64", "6L64", "5L64", "4L53", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - ember: ["7L10", "6L10", "5L10", "4L10", "3L12"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L10", "7V", "6L10", "5L10", "4L10", "3L12"], + endure: ["7V", "4M", "3T"], eruption: ["7L75", "6L68", "5L68", "4L57"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firepledge: ["7T", "6T", "5T"], flamecharge: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], - flamethrower: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L42", "3M", "3L54"], - flamewheel: ["7L20", "6L20", "5L20", "4L20", "3L31"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L42", "3M", "3L54"], + flamewheel: ["7L20", "7V", "6L20", "5L20", "4L20", "3L31"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], inferno: ["7L53", "6L53", "5L53"], + irontail: ["7V"], lavaplume: ["7L42", "6L42", "5L42", "4L35"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "6L13", "5L13", "4L13", "3L21"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["7L57", "6L57", "5L57", "4T", "4L46", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L13", "4L13", "3L21"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rollout: ["7L57", "7V", "6L57", "5L57", "4T", "4L46", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L31", "6L31", "5L31", "4T", "4L31", "3T", "3L42"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L31", "7V", "6L31", "5L31", "4T", "4L31", "3T", "3L42"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], workup: ["7M"], }}, typhlosion: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], blastburn: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -19226,174 +17525,183 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["7L24", "6L24", "5L24", "4L24", "3T"], - dig: ["6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L24", "7V", "6L24", "5L24", "4L24", "3T"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L69", "7L1", "6L1", "5L69", "4L53", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - ember: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L10", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["7V", "4M", "3T"], eruption: ["7L82", "7L1", "6L1", "5L74", "4L57"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamecharge: ["7M", "7L35", "6M", "6L35", "6S1", "5M", "5L35"], - flamethrower: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L42", "3M", "3L60", "3S0"], - flamewheel: ["7L20", "6L20", "6S1", "5L20", "4L20", "3L31", "3S0"], + flamethrower: ["7M", "7L48", "7V", "6M", "6L48", "5M", "5L48", "4M", "4L42", "3M", "3L60", "3S0"], + flamewheel: ["7L20", "7V", "6L20", "6S1", "5L20", "4L20", "3L31", "3S0"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], inferno: ["7L56", "6L56", "5L56"], + irontail: ["7V"], + laserfocus: ["7T"], lavaplume: ["7L43", "6L43", "5L43", "4L35"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], overheat: ["7M", "6M", "6S1", "5M", "4M", "3M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "6L13", "5L13", "4L13", "3L21", "3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L13", "4L13", "3L21", "3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["7L61", "6L61", "5L61", "4T", "4L46", "3T"], + rollout: ["7L61", "7V", "6L61", "5L61", "4T", "4L46", "3T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smokescreen: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smokescreen: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L31", "6L31", "6S1", "5L31", "4T", "4L31", "3T", "3L45", "3S0"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L31", "7V", "6L31", "6S1", "5L31", "4T", "4L31", "3T", "3L45", "3S0"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + throatchop: ["7T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], workup: ["7M"], }}, totodile: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + ancientpower: ["7E", "7V", "6E", "5E", "4T", "4E", "3E"], aquajet: ["7E", "6E", "5E", "4E"], - aquatail: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L36"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L13", "6L13", "5L13", "4L13", "3L20"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["7E", "6T", "6E", "5T", "5E"], + aquatail: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L36"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L13", "7V", "6L13", "5L13", "4L13", "3L20"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "7E", "6T", "6E", "5T", "5E"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chipaway: ["7L29", "6L29", "5L29"], confide: ["7M", "6M"], counter: ["3T"], - crunch: ["7L27", "7E", "6L27", "6E", "5L27", "5E", "4L27", "4E", "3E", "3S1"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + crunch: ["7L27", "7E", "7V", "6L27", "6E", "5L27", "5E", "4L27", "4E", "3E", "3S1"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragonclaw: ["7M", "6M", "5M", "4E", "3E"], dragondance: ["7E", "6E", "5E", "4E"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], faketears: ["7E", "6E", "5E"], flail: ["7L22", "6L22", "5L22", "4L22"], flatter: ["7E", "6E"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hydrocannon: ["3S1"], - hydropump: ["7L50", "7E", "6L50", "6E", "5L50", "5E", "4L43", "4E", "3L52", "3E"], + hydropump: ["7L50", "7E", "7V", "6L50", "6E", "5L50", "5E", "4L43", "4E", "3L52", "3E"], icebeam: ["7M", "6M", "5M", "4M", "3M"], icefang: ["7L20", "6L20", "5L20", "4L20"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], metalclaw: ["7E", "6E", "5E", "4E"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L8", "6L8", "5L8", "4L8", "3L7", "3S0"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L8", "7V", "6L8", "5L8", "4L8", "3L7", "3S0"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - scaryface: ["7L15", "6L15", "5L15", "4L15", "3L27"], - scratch: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], - screech: ["7L36", "6L36", "5L36", "4L34", "3L43"], + scaryface: ["7L15", "7V", "6L15", "5L15", "4L15", "3L27"], + scratch: ["7L1", "7V", "6L1", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], + screech: ["7L36", "7V", "6L36", "5L36", "4L34", "3L43"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L34", "6L34", "5L34", "4L29", "3L35"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + slash: ["7L34", "7V", "6L34", "5L34", "4L29", "3L35"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["7L48", "6T", "6L48", "5T", "5L48", "4T", "4L41"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "7L48", "6T", "6L48", "5T", "5L48", "4T", "4L41"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - thrash: ["7L41", "7E", "6L41", "6E", "5L41", "5E", "4L22", "4E", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + thrash: ["7L41", "7E", "7V", "6L41", "6E", "5L41", "5E", "4L22", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L6", "6L6", "5L6", "4L6", "3L13"], + watergun: ["7L6", "7V", "6L6", "5L6", "4L6", "3L13"], waterpledge: ["7T", "6T", "5T"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], watersport: ["7E", "6E", "5E", "4E", "3E"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], workup: ["7M"], }}, croconaw: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], ancientpower: ["4T"], - aquatail: ["7L51", "6T", "6L51", "5T", "5L51", "4T", "4L42"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L13", "6L13", "5L13", "4L13", "3L21"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T"], + aquatail: ["7T", "7L51", "6T", "6L51", "5T", "5L51", "4L42"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L13", "7V", "6L13", "5L13", "4L13", "3L21"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], @@ -19401,85 +17709,87 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], counter: ["3T"], crunch: ["7L30", "6L30", "5L30", "4L30"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragonclaw: ["7M", "6M", "5M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flail: ["7L24", "6L24", "5L24", "4L24"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hydropump: ["7L60", "6L60", "5L60", "4L51", "3L55"], + hydropump: ["7L60", "7V", "6L60", "5L60", "4L51", "3L55"], icebeam: ["7M", "6M", "5M", "4M", "3M"], icefang: ["7L21", "6L21", "5L21", "4L21"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L8", "6L8", "5L8", "4L8", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L8", "7V", "6L8", "5L8", "4L8", "3L1"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - scaryface: ["7L15", "6L15", "5L15", "4L15", "3L28"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], - screech: ["7L42", "6L42", "5L42", "4L39", "3L45"], + scaryface: ["7L15", "7V", "6L15", "5L15", "4L15", "3L28"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L42", "7V", "6L42", "5L42", "4L39", "3L45"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L39", "6L39", "5L39", "4L33", "3L37"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M", "3M"], + slash: ["7L39", "7V", "6L39", "5L39", "4L33", "3L37"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["7L57", "6T", "6L57", "5T", "5L57", "4T", "4L48"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "7L57", "6T", "6L57", "5T", "5L57", "4T", "4L48"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], thrash: ["7L48", "6L48", "5L48", "4L24"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L13"], + watergun: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L13"], waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], workup: ["7M"], }}, feraligatr: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], agility: ["7L1", "6L30", "5L30", "4L30"], ancientpower: ["4T"], - aquatail: ["7L63", "6T", "6L63", "5T", "5L63", "4T", "4L50"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L63", "6T", "6L63", "5T", "5L63", "4T", "4L50"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], avalanche: ["4M"], - bite: ["7L13", "6L13", "5L13", "4L13", "3L21"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T"], + bite: ["7L13", "7V", "6L13", "5L13", "4L13", "3L21"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], @@ -19488,89 +17798,93 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], counter: ["3T"], crunch: ["7L32", "6L32", "6S0", "5L32", "4L32"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], dragontail: ["7M", "6M", "5M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flail: ["7L24", "6L24", "5L24", "4L24"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hydrocannon: ["7T", "6T", "5T", "4T"], - hydropump: ["7L76", "6L76", "5L76", "4L63", "3L58"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L76", "7V", "6L76", "5L76", "4L63", "3L58"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], icefang: ["7L21", "6L21", "5L21", "4L21"], - icepunch: ["6T", "6S0", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "6S0", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - scaryface: ["7L15", "6L15", "5L15", "4L15", "3L28"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], - screech: ["7L50", "6L50", "6S0", "5L50", "4L45", "3L47"], + scaryface: ["7L15", "7V", "6L15", "5L15", "4L15", "3L28"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L50", "7V", "6L50", "6S0", "5L50", "4L45", "3L47"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L45", "6L45", "5L45", "4L37", "3L38"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M", "3M"], + slash: ["7L45", "7V", "6L45", "5L45", "4L37", "3L38"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["7L71", "6T", "6L71", "5T", "5L71", "4T", "4L58"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "7L71", "6T", "6L71", "5T", "5L71", "4T", "4L58"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], thrash: ["7L58", "6L58", "5L58", "4L24"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], waterfall: ["7M", "6M", "6S0", "5M", "4M", "3M"], - watergun: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + watergun: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], workup: ["7M"], }}, sentret: {learnset: { - amnesia: ["7L36", "6L36", "5L36", "4L36", "3L49"], - aquatail: ["6T", "5T", "4T"], + amnesia: ["7L36", "7V", "6L36", "5L36", "4L36", "3L49"], + aquatail: ["7T", "6T", "5T", "4T"], assist: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + babydolleyes: ["7E"], batonpass: ["7L39", "6L39", "5L39", "4L39"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -19579,85 +17893,88 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], charm: ["7E", "6E", "5E", "4E"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E", "5D", "4E"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["7L4", "6L4", "5L4", "4L4", "3T", "3L4"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], + covet: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4E"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L4", "7V", "6L4", "5L4", "4L4", "3T", "3L4"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["5D", "4M", "3T"], + endure: ["7V", "5D", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focusenergy: ["7E", "6E", "5E", "4E", "3E"], - focuspunch: ["6T", "4M", "3M"], + focusenergy: ["7E", "7V", "6E", "5E", "4E", "3E"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["7L19", "6L19", "5L19", "4L19", "3L31"], foresight: ["7L1", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L13", "6L13", "5L13", "4L13", "3L12"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + furyswipes: ["7L13", "7V", "6L13", "5L13", "4L13", "3L12"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16", "3L17"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16", "3L17"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hypervoice: ["7L47", "6T", "6L47", "5T", "5L47", "4L47"], + hypervoice: ["7T", "7L47", "6T", "6L47", "5T", "5L47", "4L47"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], mefirst: ["7L42", "6L42", "5L42", "4L42"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["7E", "6E", "5E", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], - quickattack: ["7L7", "6L7", "5L7", "4L7", "3L7"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], + quickattack: ["7L7", "7V", "6L7", "5L7", "4L7", "3L7"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L40"], + rest: ["7M", "7L28", "7V", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L40"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - rollout: ["4T", "3T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + scratch: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slam: ["7L25", "6L25", "5L25", "4L25", "3L24"], - slash: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + slam: ["7L25", "7V", "6L25", "5L25", "4L25", "3L24"], + slash: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7V"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], - uproar: ["6T", "5T", "4T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], workup: ["7M", "5M"], }}, furret: {learnset: { agility: ["7L1"], - amnesia: ["7L42", "6L42", "5L42", "4L42", "3L59"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7L42", "7V", "6L42", "5L42", "4L42", "3L59"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["7L46", "6L46", "5L46", "4L46"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], @@ -19667,79 +17984,81 @@ exports.BattleLearnsets = { chargebeam: ["7M", "6M", "5M", "4M"], coil: ["7L1"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3T", "3L1"], - dig: ["6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["7L21", "6L21", "5L21", "4L21", "3L37"], foresight: ["7L1", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L13", "6L13", "5L13", "4L13", "3L12"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + furyswipes: ["7L13", "7V", "6L13", "5L13", "4L13", "3L12"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["7L17", "6T", "6L17", "5T", "5L17", "4T", "4L17", "3L19"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L17", "6T", "6L17", "5T", "5L17", "4T", "4L17", "3L19"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["7L56", "6T", "6L56", "5T", "5L56", "4L56"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "7L56", "6T", "6L56", "5T", "5L56", "4L56"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], mefirst: ["7L50", "6L50", "5L50", "4L50"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L32", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L48"], + rest: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L48"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slam: ["7L28", "6L28", "5L28", "4L28", "3L28"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + slam: ["7L28", "7V", "6L28", "5L28", "4L28", "3L28"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7L36", "6L36", "5L36", "4T", "4L36"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T"], - uproar: ["6T", "5T", "4T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], workup: ["7M", "5M"], }}, @@ -19748,354 +18067,370 @@ exports.BattleLearnsets = { agility: ["7E", "6E", "5E", "4E"], aircutter: ["4T"], airslash: ["7L31", "6L33", "5L33", "4L29"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L10", "6L21", "5L21", "4L21", "3L34"], - defog: ["7E", "6E", "5E", "4M"], + confusion: ["7L10", "7V", "6L21", "5L21", "4L21", "3L34"], + curse: ["7V"], + defog: ["7T", "7E", "6E", "5E", "4M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "7L46", "6M", "6L57", "5M", "5L57", "4M", "4L49", "3T", "3L48"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L46", "7V", "6M", "6L57", "5M", "5L57", "4M", "4L49", "3T", "3L48"], echoedvoice: ["7M", "7L13", "6M", "6L25", "5M", "5L25"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], extrasensory: ["7L22", "6L45", "5L45", "4L37"], facade: ["7M", "6M", "5M", "4M", "3M"], featherdance: ["7E", "6E", "5E", "4E", "3E"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - flash: ["3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - foresight: ["7L1", "6L1", "5L1", "5D", "4L1", "3L6", "3S0"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L4", "6L5", "5L5", "4L5", "3L16"], - magiccoat: ["6T", "5T", "4T"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + flash: ["7V", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L6", "3S0"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hurricane: ["7E"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L4", "7V", "6L5", "5L5", "4L5", "3L16"], + magiccoat: ["7T", "6T", "5T", "4T"], + meanlook: ["7E"], mimic: ["3T"], - mirrormove: ["7E", "6E", "5E", "4E", "3E"], + mirrormove: ["7E", "7V", "6E", "5E", "4E", "3E"], moonblast: ["7L40"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7E", "6E", "5E", "5D", "4E"], + nightmare: ["7V", "3T"], + nightshade: ["7E", "6E", "5D", "5E", "4E"], ominouswind: ["4T"], - peck: ["7L7", "6L9", "5L9", "4L9", "3L11"], + peck: ["7L7", "7V", "6L9", "5L9", "4L9", "3L11"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "6M", "5M", "4M", "3M"], psychoshift: ["7L19", "6L49", "5L49", "4L41"], psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "5D", "4M"], - reflect: ["7M", "7L28", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L22"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5D", "5T", "4M"], + reflect: ["7M", "7L28", "7V", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L22"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L37", "6M", "6L53", "5T", "5L53", "4M", "4L45"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], silverwind: ["4M"], - skyattack: ["7E", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + skyattack: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], synchronoise: ["7L43", "6L41", "5L41"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L25", "6L29", "5L29", "4L25", "3L28"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L25", "7V", "6L29", "5L29", "4L25", "3L28"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["7L34", "6T", "6L13", "5T", "5L13", "4T", "4L13"], - whirlwind: ["7E", "6E", "5E", "4E", "3E"], - wingattack: ["7E", "6E", "5E", "4E", "3E"], + uproar: ["7T", "7L34", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + wingattack: ["7E", "7V", "6E", "5E", "4E", "3E"], workup: ["7M", "5M"], - zenheadbutt: ["7L16", "6T", "6L37", "5T", "5L37", "4T", "4L33"], + zenheadbutt: ["7T", "7L16", "6T", "6L37", "5T", "5L37", "4T", "4L33"], }}, noctowl: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["4T"], airslash: ["7L35", "6L37", "5L37", "4L32"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L10", "6L22", "5L22", "4L22", "3L41"], - defog: ["4M"], + confusion: ["7L10", "7V", "6L22", "5L22", "4L22", "3L41"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "7L55", "7L1", "6M", "6L1", "5M", "5L67", "4M", "4L57", "3T", "3L57"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L55", "7L1", "7V", "6M", "6L1", "5M", "5L67", "4M", "4L57", "3T", "3L57"], echoedvoice: ["7M", "7L13", "6M", "6L27", "5M", "5L27"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], extrasensory: ["7L23", "6L52", "5L52", "4L42"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L16"], - magiccoat: ["6T", "5T", "4T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L16"], + laserfocus: ["7T"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], moonblast: ["7L47"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], ominouswind: ["4T"], - peck: ["7L7", "6L9", "5L9", "4L9", "3L1"], + peck: ["7L7", "7V", "6L9", "5L9", "4L9", "3L1"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "6M", "5M", "4M", "3M"], psychoshift: ["7L19", "6L57", "5L57", "4L47"], psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "7L31", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L25"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "7L31", "7V", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L25"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7L43", "6M", "6L62", "5T", "5L62", "4M", "4L52"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], silverwind: ["4M"], - skyattack: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + skyattack: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], synchronoise: ["7L51", "6L47", "5L47"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L27", "6L32", "5L32", "4L27", "3L33"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L27", "7V", "6L32", "5L32", "4L27", "3L33"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["7L39", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + uproar: ["7T", "7L39", "6T", "6L13", "5T", "5L13", "4T", "4L13"], workup: ["7M", "5M"], - zenheadbutt: ["7L16", "6T", "6L42", "5T", "5L42", "4T", "4L37"], + zenheadbutt: ["7T", "7L16", "6T", "6L42", "5T", "5L42", "4T", "4L37"], }}, ledyba: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M", "3S0"], - agility: ["7L29", "6L30", "5L30", "4L30", "3L43"], + agility: ["7L29", "7V", "6L30", "5L30", "4L30", "3L43"], aircutter: ["4T"], airslash: ["7L36"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L26", "6L22", "5L22", "4L22", "3L29"], - bide: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7L26", "7V", "6L22", "5L22", "4L22", "3L29"], + bide: ["7E", "7V", "6E", "5E", "4E", "3E"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + bugbite: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], bugbuzz: ["7L33", "7E", "6L41", "6E", "5L41", "5E", "4L41", "4E"], captivate: ["4M"], - cometpunch: ["7L22", "6L9", "5L9", "5D", "4L9", "3L15"], + cometpunch: ["7L22", "7V", "6L9", "5D", "5L9", "4L9", "3L15"], confide: ["7M", "6M"], - dig: ["6M", "5M", "4M", "3M"], + counter: ["7E"], + curse: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], dizzypunch: ["7E", "6E", "5E"], - doubleedge: ["7L40", "6L38", "5L38", "4L38", "3T", "3L50"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["7E", "6T", "6E", "5T", "5E", "4M"], - dynamicpunch: ["3T"], + doubleedge: ["7L40", "7V", "6L38", "5L38", "4L38", "3T", "3L50"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + dynamicpunch: ["7V", "3T"], encore: ["7E", "6E", "5E", "4E"], - endure: ["4M", "3T"], + endure: ["7E", "7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], infestation: ["7M", "6M"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - lightscreen: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lightscreen: ["7M", "7L12", "7V", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], machpunch: ["7L15", "6L17", "5L17", "4L17"], megapunch: ["3T"], mimic: ["3T"], naturalgift: ["4M"], ominouswind: ["4T"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "4E", "3E", "3S0"], - reflect: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "7V", "6E", "5E", "4E", "3E", "3S0"], + reflect: ["7M", "7L12", "7V", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], refresh: ["3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], + safeguard: ["7M", "7L12", "7V", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], silverwind: ["7L19", "7E", "6L25", "6E", "5L25", "5E", "4M", "4L25", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L5", "6L6", "5L6", "4L6", "3L8", "3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L8", "6L33", "5L33", "4T", "4L33", "3T", "3L36"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7V", "6L6", "5L6", "4L6", "3L8", "3S0"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + swift: ["7L8", "7V", "6L33", "5L33", "4T", "4L33", "3T", "3L36"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["7E", "6T", "6E", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "5D", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "7E", "6T", "6E", "5T", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], }}, ledian: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L33", "6L36", "5L36", "4L36", "3L51"], + agility: ["7L33", "7V", "6L36", "5L36", "4L36", "3L51"], aircutter: ["4T"], airslash: ["7L42"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L29", "6L24", "5L24", "4L24", "3L33"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7L29", "7V", "6L24", "5L24", "4L24", "3L33"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bugbite: ["6T", "5T", "4T"], + bugbite: ["7T", "6T", "5T", "4T"], bugbuzz: ["7L38", "6L53", "5L53", "4L53"], captivate: ["4M"], - cometpunch: ["7L24", "6L1", "5L1", "4L1", "3L15"], + cometpunch: ["7L24", "7V", "6L1", "5L1", "4L1", "3L15"], confide: ["7M", "6M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L47", "6L48", "5L48", "4L48", "3T", "3L60"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + curse: ["7V"], + defog: ["7T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L47", "7V", "6L48", "5L48", "4L48", "3T", "3L60"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], - lightscreen: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], + knockoff: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "7L12", "7V", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], machpunch: ["7L15", "6L17", "5L17", "4L17"], megapunch: ["3T"], mimic: ["3T"], naturalgift: ["4M"], ominouswind: ["4T"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7L12", "7V", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], + safeguard: ["7M", "7L12", "7V", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], secretpower: ["6M", "4M", "3M"], silverwind: ["7L20", "6L29", "5L29", "4M", "4L29"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], strength: ["6M", "5M", "4M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L8", "7L1", "6L41", "5L41", "4T", "4L41", "3T", "3L42"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + swift: ["7L8", "7L1", "7V", "6L41", "5L41", "4T", "4L41", "3T", "3L42"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], }}, spinarak: {learnset: { absorb: ["7L5"], - agility: ["7L33", "6L33", "5L33", "4L33", "3L45"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "4E", "3E"], + agility: ["7L33", "7V", "6L33", "5L33", "4L33", "3L45"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "7V", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - bugbite: ["6T", "5T", "5D", "4T"], + bounce: ["7T", "6T", "5T", "4T"], + bugbite: ["7T", "6T", "5D", "5T", "4T"], captivate: ["4M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L8", "5L8", "4L8", "3L11"], + constrict: ["7L1", "7V", "6L8", "5L8", "4L8", "3L11"], crosspoison: ["7L47", "6L47", "5L47"], - dig: ["6M", "5M", "4M", "3M", "3S0"], - disable: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M", "3S0"], + disable: ["7E", "7V", "6E", "5E", "4E", "3E"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - electroweb: ["7E", "6T", "6E", "5T", "5E", "5D"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + electroweb: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyswipes: ["7L22", "6L22", "5L22", "4L22", "3L30"], - gigadrain: ["6T", "5T", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyswipes: ["7L22", "7V", "6L22", "5L22", "4L22", "3L30"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], infestation: ["7M", "7L8", "6M"], - leechlife: ["7M", "6L12", "5L12", "4L12", "3L23"], + leechlife: ["7M", "7V", "6L12", "5L12", "4L12", "3L23"], + lunge: ["7E"], megahorn: ["7E", "6E"], mimic: ["3T"], naturalgift: ["4M"], - nightshade: ["7L15", "6L15", "5L15", "4L15", "3L17", "3S0"], + nightshade: ["7L15", "7V", "6L15", "5L15", "4L15", "3L17", "3S0"], nightslash: ["7E", "6E", "5E"], pinmissile: ["7L36", "6L36", "5L36", "4L36"], poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "4E"], - poisonsting: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "4E", "3E"], - psychic: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L53"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + poisonsting: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + psychic: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L53"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], ragepowder: ["7E", "6E", "5E"], refresh: ["3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scaryface: ["7L12", "6L5", "5L5", "4L5", "3L6"], + scaryface: ["7L12", "7V", "6L5", "5L5", "4L5", "3L6"], + screech: ["7V"], secretpower: ["6M", "4M", "3M"], shadowsneak: ["7L19", "6L19", "5L19", "4L19"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - sonicboom: ["7E", "6E", "5E", "4E", "3E"], - spiderweb: ["7L29", "6L29", "5L29", "4L29", "3L37"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E", "3S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + sonicboom: ["7E", "7V", "6E", "5E", "4E", "3E"], + spiderweb: ["7L29", "7V", "6L29", "5L29", "4L29", "3L37"], stickyweb: ["7L50", "6L50"], - stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + stringshot: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7L26", "6L26", "5L26", "4T", "4L26"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7E", "6E", "5E", "4E"], toxicthread: ["7L54"], twineedle: ["7E", "6E", "5E"], @@ -20104,65 +18439,69 @@ exports.BattleLearnsets = { }}, ariados: {learnset: { absorb: ["7L5", "7L1"], - agility: ["7L37", "6L37", "5L37", "4L37", "3L53"], - attract: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L37", "7V", "6L37", "5L37", "4L37", "3L53"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - bugbite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bounce: ["7T", "6T", "5T", "4T"], + bugbite: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], captivate: ["4M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + constrict: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], crosspoison: ["7L55", "6L55", "5L55"], - dig: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + electroweb: ["7T", "6T", "5T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fellstinger: ["7L1", "6L1"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], focusenergy: ["7L1"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyswipes: ["7L23", "6L23", "5L23", "4L23", "3L34"], - gigadrain: ["6T", "5T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyswipes: ["7L23", "7V", "6L23", "5L23", "4L23", "3L34"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "7L8", "6M"], - leechlife: ["7M", "6L12", "5L12", "4L12", "3L25"], + leechlife: ["7M", "7V", "6L12", "5L12", "4L12", "3L25"], mimic: ["3T"], naturalgift: ["4M"], - nightshade: ["7L15", "6L15", "5L15", "4L15", "3L17"], + nightshade: ["7L15", "7V", "6L15", "5L15", "4L15", "3L17"], pinmissile: ["7L41", "6L41", "5L41", "4L41"], poisonjab: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L50"], - poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L63"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L63"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scaryface: ["7L12", "6L1", "5L1", "4L1", "3L1"], + scaryface: ["7L12", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7V"], secretpower: ["6M", "4M", "3M"], shadowsneak: ["7L19", "6L19", "5L19", "4L19"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], smartstrike: ["7M"], - snore: ["6T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spiderweb: ["7L32", "6L32", "5L32", "4L32", "3L43"], + snore: ["7T", "7V", "6T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spiderweb: ["7L32", "7V", "6L32", "5L32", "4L32", "3L43"], stickyweb: ["7L58", "6L58"], - stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + stompingtantrum: ["7T"], + stringshot: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7L28", "6L28", "5L28", "4T", "4L28"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swordsdance: ["7M", "7L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicthread: ["7L63"], venomdrench: ["7L1", "6L1"], venoshock: ["7M", "6M", "5M"], @@ -20170,350 +18509,350 @@ exports.BattleLearnsets = { }}, chinchou: {learnset: { agility: ["7E", "6E", "5E", "4E"], - amnesia: ["7E", "6E", "5E", "5D", "4E", "3E"], + amnesia: ["7E", "6E", "5D", "5E", "4E", "3E"], aquaring: ["7L42", "6L42", "5L42", "4L39"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brine: ["7E", "6E", "5E", "4M"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], bubblebeam: ["7L20", "6L20", "5L31", "4L28"], captivate: ["4M"], charge: ["7L50", "6L50", "5L50", "4L45", "3L49"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L17", "6L17", "5L12", "4L17", "3L29"], + confuseray: ["7L17", "7V", "6L17", "5L12", "4L17", "3L29"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], discharge: ["7L34", "6L34", "5L39", "4L34"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], electroball: ["7L9", "6L9", "5L28"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L31", "7E", "6L9", "6E", "5L9", "5E", "4L9", "4E", "3L13", "3E"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L31", "7E", "7V", "6L9", "6E", "5L9", "5E", "4L9", "4E", "3L13", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - healbell: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L45", "6L45", "5L45", "4L42", "3L41"], + healbell: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L45", "7V", "6L45", "5L45", "4L42", "3L41"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], iondeluge: ["7L47", "6L47"], mimic: ["3T"], mist: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psybeam: ["7E", "6E", "5E", "4E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - shockwave: ["7E", "6T", "6E", "5E", "5D", "4M", "3M"], - signalbeam: ["7L28", "6T", "6L28", "5T", "5L34", "4T", "4L31"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "7E", "6T", "6E", "5D", "5E", "4M", "3M"], + signalbeam: ["7T", "7L28", "6T", "6L28", "5T", "5L34", "4T", "4L31"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], soak: ["7E", "6E"], - spark: ["7L23", "6L20", "5L20", "4L20", "3L25"], + spark: ["7L23", "7V", "6L20", "5L20", "4L20", "3L25"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - supersonic: ["7L1", "6L1", "5L1", "4L1", "3L5"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - takedown: ["7L39", "6L23", "5L23", "4L23", "3L37"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L5"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7L39", "7V", "6L23", "5L23", "4L23", "3L37"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "7L6", "6M", "6L6", "5M", "5L6", "5D", "4M", "4L6", "3T", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L6", "7V", "6M", "6L6", "5D", "5M", "5L6", "4M", "4L6", "3T", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L12", "6L1", "5L17", "4L12", "3L17"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - whirlpool: ["7E", "6E", "5E", "4M", "4E"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L12", "7V", "6L1", "5L17", "4L12", "3L17"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7E", "7V", "6E", "5E", "4M", "4E"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, lanturn: {learnset: { aquaring: ["7L47", "6L47", "5L52", "4L47"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brine: ["4M"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], bubblebeam: ["7L20", "6L20", "5L35", "4L30"], captivate: ["4M"], charge: ["7L58", "6L58", "5L64", "4L57", "3L61"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L17", "6L17", "5L17", "4L17", "3L32"], + confuseray: ["7L17", "7V", "6L17", "5L17", "4L17", "3L32"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], discharge: ["7L37", "6L37", "5L47", "4L40"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], eerieimpulse: ["7L1", "6L1"], electroball: ["7L9", "7L1", "6L1", "5L30"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L33", "6L9", "5L9", "4L9", "3L13"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L33", "7V", "6L9", "5L9", "4L9", "3L13"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - healbell: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L51", "6L51", "5L57", "4L52", "3L50"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + healbell: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L51", "7V", "6L51", "5L57", "4L52", "3L50"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], iondeluge: ["7L54", "6L54"], mimic: ["3T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7L29", "6T", "6L29", "5T", "5L40", "4T", "4L35"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L23", "6L20", "5L20", "4L20", "3L25"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7L29", "6T", "6L29", "5T", "5L40", "4T", "4L35"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spark: ["7L23", "7V", "6L20", "5L20", "4L20", "3L25"], spitup: ["7L1", "6L27", "5L27", "4L27"], + spotlight: ["7L1"], stockpile: ["7L1", "6L27", "5L27", "4L27"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - supersonic: ["7L1", "6L1", "5L1", "4L1", "3L1"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7L1", "6L27", "5L27", "4L27"], - takedown: ["7L43", "6L23", "5L23", "4L23", "3L43"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + takedown: ["7L43", "7V", "6L23", "5L23", "4L23", "3L43"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L6", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L12", "6L1", "5L12", "4L12", "3L17"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L12", "7V", "6L1", "5L12", "4L12", "3L17"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, togepi: {learnset: { - afteryou: ["7L53", "6T", "6L53", "5T", "5L53"], + afteryou: ["7T", "7L53", "6T", "6L53", "5T", "5L53"], ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33", "3L21", "3S1"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["7L41", "6L41", "5L41", "4L42", "3L41"], bestow: ["7L25", "6L25", "5L25"], bodyslam: ["3T"], captivate: ["4M"], - charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + charm: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - doubleedge: ["7L45", "6L45", "5L45", "4L46", "3T", "3L37"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + defensecurl: ["7V", "3T"], + detect: ["7V"], + doubleedge: ["7L45", "7V", "6L45", "5L45", "4L46", "3T", "3L37"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L17", "6L17", "5L17", "4L19", "3L17"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + encore: ["7L17", "7V", "6L17", "5L17", "4L19", "3L17"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], extrasensory: ["7E", "6E", "5E", "4E"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], followme: ["7L21", "6L21", "5L21", "4L24", "3L25", "3S1"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], helpinghand: ["3S1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], incinerate: ["6M", "5M"], - lastresort: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L51"], + lastresort: ["7T", "7L49", "6T", "6L49", "5T", "5L49", "4T", "4L51"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7E", "6E", "5E", "5D", "4E"], - magiccoat: ["6T", "5T", "4T"], + luckychant: ["7E", "6E", "5D", "5E", "4E"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["7L5", "6L5", "5L5", "5D", "4L6", "3T", "3L4", "3S0"], + metronome: ["7L5", "7V", "6L5", "5D", "5L5", "4L6", "3T", "3L4", "3S0"], mimic: ["3T"], - mirrormove: ["7E", "6E", "5E", "4E", "3E"], + mirrormove: ["7E", "7V", "6E", "5E", "4E", "3E"], morningsun: ["7E", "6E", "5E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - peck: ["7E", "6E", "5E", "4E", "3E"], - present: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7E", "7V", "6E", "5E", "4E", "3E"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], psychoshift: ["7E", "6E", "5E", "4E"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L33"], + safeguard: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L33"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], softboiled: ["3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], storedpower: ["7E", "6E", "5E"], substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L9", "6L9", "5L9", "4L10", "3L9", "3S0"], - swift: ["4T", "3T"], - telekinesis: ["5M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L9", "7V", "6L9", "5L9", "4L10", "3L9", "3S0"], + swift: ["7V", "4T", "3T"], + telekinesis: ["7T", "5M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], triattack: ["3S1"], - trick: ["6T", "5T", "4T"], - uproar: ["6T", "5T", "5D", "4T"], - waterpulse: ["6T", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + uproar: ["7T", "6T", "5D", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], wish: ["7L29", "6L29", "5L29", "4L28", "3L29"], workup: ["7M", "5M"], yawn: ["7L13", "6L13", "5L13", "4L15", "3L13", "3S0"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, togetic: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["7L53", "6T", "6L53", "5T", "5L53"], + afteryou: ["7T", "7L53", "6T", "6L53", "5T", "5L53"], aircutter: ["4T"], ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33", "3L21"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["7L41", "6L41", "5L41", "4L42", "3L41"], bestow: ["7L25", "6L25", "5L25"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], - charm: ["7L1", "6L1", "5L1", "4L1", "3L1"], + charm: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - defog: ["4M"], - doubleedge: ["7L45", "6L45", "5L45", "4L46", "3T", "3L37"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + defensecurl: ["7V", "3T"], + defog: ["7T", "4M"], + detect: ["7V"], + doubleedge: ["7L45", "7V", "6L45", "5L45", "4L46", "3T", "3L37"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L17", "6L17", "5L17", "4L19", "3L17"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], - extrasensory: ["7E"], + encore: ["7L17", "7V", "6L17", "5L17", "4L19", "3L17"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fairywind: ["7L14", "6L14"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - focuspunch: ["6T", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], followme: ["7L21", "6L21", "5L21", "4L24", "3L25"], - foresight: ["7E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], incinerate: ["6M", "5M"], - lastresort: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L51"], + lastresort: ["7T", "7L49", "6T", "6L49", "5T", "5L49", "4T", "4L51"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7E"], magicalleaf: ["7L1", "6L1", "5L1", "4L1", "3L1"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["7L5", "7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + metronome: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], mimic: ["3T"], - mirrormove: ["7E"], - morningsun: ["7E"], - mudslap: ["4T", "3T"], - nastyplot: ["7E"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - peck: ["7E"], - present: ["7E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychoshift: ["7E"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L33"], - secretpower: ["7E", "6M", "4M", "3M"], + safeguard: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L33"], + secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], skyattack: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], softboiled: ["3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - steelwing: ["7M", "6M", "4M", "3M"], - storedpower: ["7E"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swift: ["7V", "4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], twister: ["4T"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wish: ["7L29", "6L29", "5L29", "4L28", "3L29"], workup: ["7M", "5M"], yawn: ["7L13", "6L13", "5L13", "4L15", "3L13"], - zenheadbutt: ["6T", "5T", "4T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, togekiss: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - afteryou: ["7L1", "6T", "6L1"], + afteryou: ["7T", "7L1", "6T", "6L1"], aircutter: ["4T"], airslash: ["7L1", "6L1", "5L1", "5S0", "4L1"], ancientpower: ["4T"], @@ -20522,14 +18861,14 @@ exports.BattleLearnsets = { brickbreak: ["7M", "6M", "5M", "4M"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], dazzlinggleam: ["7M", "6M"], - defog: ["4M"], + defog: ["7T", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "4M"], + drainpunch: ["7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M"], extremespeed: ["7L1", "6L1", "5L1", "5S0", "4L1"], facade: ["7M", "6M", "5M", "4M"], @@ -20538,20 +18877,21 @@ exports.BattleLearnsets = { flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], fly: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - heatwave: ["6T", "5T", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], incinerate: ["6M", "5M"], - lastresort: ["6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], naturalgift: ["4M"], ominouswind: ["4T"], @@ -20573,268 +18913,275 @@ exports.BattleLearnsets = { safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], - skyattack: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + skyattack: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], steelwing: ["7M", "6M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], + tailwind: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], twister: ["4T"], - waterpulse: ["6T", "4M"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, natu: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M", "3S0"], aircutter: ["4T"], - allyswitch: ["7E", "6E", "5M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T", "7E", "6E", "5M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["3S0"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L23", "6L23", "5L23", "4L23", "3L40"], + confuseray: ["7L23", "7V", "6L23", "5L23", "4L23", "3L40"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - drillpeck: ["7E", "6E", "5E", "4E", "3E"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + drillpeck: ["7E", "7V", "6E", "5E", "4E", "3E"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - featherdance: ["7E", "6E", "5E", "5D", "4E", "3E"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L44", "6L36", "5L36", "4L36", "3L30", "3S0"], - gigadrain: ["6T", "5T", "5D", "4M", "3M"], + featherdance: ["7E", "6E", "5D", "5E", "4E", "3E"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L44", "7V", "6L36", "5L36", "4L36", "3L30", "3S0"], + gigadrain: ["7T", "7V", "6T", "5D", "5T", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], guardswap: ["7L47", "6L47", "5L47", "4L44"], - haze: ["7E", "6E", "5E", "4E", "3E"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], luckychant: ["7L12", "6L12", "5L12", "4L12"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mefirst: ["7L50", "6L20", "5L20", "4L20"], mimic: ["3T"], miracleeye: ["7L36", "6L17", "5L17", "4L17"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L6", "6L6", "5L6", "5D", "4L6", "3L10", "3S0"], + nightmare: ["7V", "3T"], + nightshade: ["7L6", "7V", "6L6", "5D", "5L6", "4L6", "3L10", "3S0"], ominouswind: ["7L20", "6L20", "5L44", "4T", "4L39"], - painsplit: ["6T", "5T", "4T"], - peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + painsplit: ["7T", "6T", "5T", "4T"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], pluck: ["5M", "4M"], powerswap: ["7L47", "6L47", "5L47", "4L44"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L33", "6M", "6L33", "5M", "5L50", "4M", "4L47", "3M", "3L50"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L50", "4M", "4L47", "3M", "3L50"], psychoshift: ["7L39", "6L33", "5L33", "4L33"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], psyshock: ["7M", "6M", "5M"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7E", "7V", "6E", "5E", "4E", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], reflect: ["7M", "6M", "5M", "4M", "3M"], refresh: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], simplebeam: ["7E", "6E"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - skyattack: ["6T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "4E", "3M", "3E"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + skyattack: ["7T", "6T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "7E", "7V", "6M", "6E", "5E", "4M", "4E", "3M", "3E"], storedpower: ["7L17", "6L17", "5L39"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7E", "6E", "5E", "4T", "4E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], synchronoise: ["7E", "6E", "5E"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], - teleport: ["7L9", "6L9", "5L9", "4L9", "3L20"], - thief: ["7M", "6M", "5M", "4M", "3M"], + tailwind: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], + teleport: ["7L9", "7V", "6L9", "5L9", "4L9", "3L20"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], twister: ["4T"], uturn: ["7M", "6M", "5M", "4M"], wish: ["7L28", "6L28", "5L28", "4L28", "3L30"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, xatu: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["4T"], airslash: ["7L1", "6L25"], - allyswitch: ["5M"], - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T", "5M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L23", "6L23", "5L23", "4L23", "3L50"], + confuseray: ["7L23", "7V", "6L23", "5L23", "4L23", "3L50"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defog: ["4M"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L49", "6L42", "5L42", "4L42", "3L35"], - gigadrain: ["6T", "5T", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L49", "7V", "6L42", "5L42", "4L42", "3L35"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], guardswap: ["7L53", "6L53", "5L59", "4L54"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], luckychant: ["7L12", "6L12", "5L12", "4L12"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mefirst: ["7L57", "6L20", "5L20", "4L20"], mimic: ["3T"], miracleeye: ["7L39", "6L17", "5L17", "4L17"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L6", "7L1", "6L1", "5L6", "4L6", "3L10"], + nightmare: ["7V", "3T"], + nightshade: ["7L6", "7L1", "7V", "6L1", "5L6", "4L6", "3L10"], ominouswind: ["7L20", "6L20", "5L54", "4T", "4L47"], - painsplit: ["6T", "5T", "4T"], - peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + painsplit: ["7T", "6T", "5T", "4T"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], pluck: ["5M", "4M"], powerswap: ["7L53", "6L53", "5L54", "4L54"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L35", "6M", "6L35", "5M", "5L66", "4M", "4L59", "3M", "3L65"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L35", "7V", "6M", "6L35", "5M", "5L66", "4M", "4L59", "3M", "3L65"], psychoshift: ["7L43", "6L37", "5L37", "4L37"], - psychup: ["7M", "6M", "5M", "4M", "3T"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], - skillswap: ["6T", "5T", "4M", "3M"], - skyattack: ["6T", "5T", "4T", "3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + skyattack: ["7T", "6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], steelwing: ["7M", "6M", "4M", "3M"], storedpower: ["7L17", "6L17", "5L47"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["7L1", "6T", "6L1", "5T", "5L27", "4T", "4L27"], - telekinesis: ["5M"], - teleport: ["7L9", "7L1", "6L1", "5L9", "4L9", "3L20"], - thief: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["7T", "7L1", "6T", "6L1", "5T", "5L27", "4T", "4L27"], + telekinesis: ["7T", "5M"], + teleport: ["7L9", "7L1", "7V", "6L1", "5L9", "4L9", "3L20"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], twister: ["4T"], uturn: ["7M", "6M", "5M", "4M"], wish: ["7L29", "6L29", "5L30", "4L30", "3L35"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, mareep: {learnset: { - afteryou: ["7E", "6T", "6E", "5T", "5E"], + afteryou: ["7T", "7E", "6T", "6E", "5T", "5E"], agility: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E", "3S2"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "7V", "6E", "5E", "4E", "3T", "3E", "3S2"], captivate: ["4M"], charge: ["7L15", "7E", "6L15", "6E", "5L23", "5E", "4L23", "4E", "3E"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], confuseray: ["7L25", "6L25", "5L25"], cottonguard: ["7L36", "6L36", "5L32"], - cottonspore: ["7L11", "6L11", "5L19", "4L19", "3L23", "3S0"], - defensecurl: ["3T"], + cottonspore: ["7L11", "7V", "6L11", "5L19", "4L19", "3L23", "3S0"], + curse: ["7V"], + defensecurl: ["7V", "3T"], discharge: ["7L32", "6L32", "5L37", "4L28"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], eerieimpulse: ["7E", "6E"], electricterrain: ["7E", "6E"], electroball: ["7L22", "6L22", "5L28"], - electroweb: ["6T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], flatter: ["7E", "6E", "5E", "4E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L5", "4L5", "3L1", "3S1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T", "3S2"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L5", "4L5", "3L1", "3S1"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T", "3S2"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], holdback: ["6S3"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - lightscreen: ["7M", "7L43", "6M", "6L43", "5M", "5L46", "4M", "4L37", "3M", "3L30"], - magnetrise: ["6T", "5T", "4T"], + irontail: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4M", "3M"], + lightscreen: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L46", "4M", "4L37", "3M", "3L30"], + magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["3T"], naturalgift: ["4M"], odorsleuth: ["7E", "6E", "5E", "4E", "3E"], powergem: ["7L29", "6L29", "5L50", "4L41"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["5D", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7V", "5D", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], sandattack: ["7E", "6E", "5E", "4E"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "5D", "4M", "3M"], - signalbeam: ["7L39", "6T", "6L39", "5T", "5L41", "4T", "4L32"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "5D", "4M", "3M"], + signalbeam: ["7T", "7L39", "6T", "6L39", "5T", "5L41", "4T", "4L32"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "6S3", "5L1", "4L1", "3L1", "3S1"], - takedown: ["7L18", "7E", "6L18", "6E", "5L18", "5E", "4E", "3E"], - thunder: ["7M", "7L46", "6M", "6L46", "5M", "5L55", "4M", "4L46", "3M", "3L37", "3S0"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thundershock: ["7L8", "6L8", "6S3", "5L10", "5D", "4L10", "3L9", "3S0", "3S1", "3S2"], - thunderwave: ["7M", "7L4", "6M", "6L4", "6S3", "5M", "5L14", "4M", "4L14", "3T", "3L16", "3S0", "3S2"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "6S3", "5L1", "4L1", "3L1", "3S1"], + takedown: ["7L18", "7E", "7V", "6L18", "6E", "5L18", "5E", "4E", "3E"], + thunder: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L55", "4M", "4L46", "3M", "3L37", "3S0"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["7L8", "7V", "6L8", "6S3", "5D", "5L10", "4L10", "3L9", "3S2", "3S1", "3S0"], + thunderwave: ["7M", "7L4", "7V", "6M", "6L4", "6S3", "5M", "5L14", "4M", "4L14", "3T", "3L16", "3S2", "3S0"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, flaaffy: {learnset: { - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], @@ -20843,67 +19190,69 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], confuseray: ["7L29", "6L29", "5L29"], cottonguard: ["7L43", "6L43", "5L36"], - cottonspore: ["7L11", "6L11", "5L20", "4L20", "3L27"], + cottonspore: ["7L11", "7V", "6L11", "5L20", "4L20", "3L27"], counter: ["3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], discharge: ["7L38", "6L38", "5L42", "4L31"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], electroball: ["7L25", "6L25", "5L31"], - electroweb: ["6T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "7L52", "6M", "6L52", "5M", "5L53", "4M", "4L42", "3M", "3L36"], - magnetrise: ["6T", "5T", "4T"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lightscreen: ["7M", "7L52", "7V", "6M", "6L52", "5M", "5L53", "4M", "4L42", "3M", "3L36"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], naturalgift: ["4M"], powergem: ["7L34", "6L34", "5L59", "4L47"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7L47", "6T", "6L47", "5T", "5L47", "4T", "4L36"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7L47", "6T", "6L47", "5T", "5L47", "4T", "4L36"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7L20", "6L20", "5L20"], - thunder: ["7M", "7L56", "6M", "6L56", "5M", "5L65", "4M", "4L53", "3M", "3L45"], + thunder: ["7M", "7L56", "7V", "6M", "6L56", "5M", "5L65", "4M", "4L53", "3M", "3L45"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thundershock: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L14", "4M", "4L14", "3T", "3L18"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + thundershock: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L4", "7L1", "7V", "6M", "6L1", "5M", "5L14", "4M", "4L14", "3T", "3L18"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V"], }}, ampharos: {learnset: { - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], @@ -20914,78 +19263,80 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], confuseray: ["7L29", "6L29", "5L29"], cottonguard: ["7L46", "6L46", "5L40"], - cottonspore: ["7L11", "6L11", "5L20", "4L20", "3L27"], + cottonspore: ["7L11", "7V", "6L11", "5L20", "4L20", "3L27"], counter: ["3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], discharge: ["7L40", "6L40", "5L48", "4L34"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["7L65", "7L1", "6T", "6L1"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "7L65", "7L1", "6T", "6L1"], + dynamicpunch: ["7V", "3T"], echoedvoice: ["7M", "6M", "5M"], electroball: ["7L25", "6L25", "5L33"], - electroweb: ["6T"], - endure: ["4M", "3T"], + electroweb: ["7T", "6T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], - flash: ["6M", "5M", "4M", "3M"], + firepunch: ["7T", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], iondeluge: ["7L1", "6L1"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "7L57", "6M", "6L57", "5M", "5L63", "4M", "4L51", "3M", "3L42"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L57", "7V", "6M", "6L57", "5M", "5L63", "4M", "4L51", "3M", "3L42"], magneticflux: ["7L1", "6L1"], - magnetrise: ["6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], powergem: ["7L35", "6L35", "5L71", "4L59"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7L51", "6T", "6L51", "5T", "5L55", "4T", "4L42"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7L51", "6T", "6L51", "5T", "5L55", "4T", "4L42"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], takedown: ["7L20", "6L20", "5L20"], - thunder: ["7M", "7L62", "6M", "6L62", "5M", "5L79", "4M", "4L68", "3M", "3L57"], + thunder: ["7M", "7L62", "7V", "6M", "6L62", "5M", "5L79", "4M", "4L68", "3M", "3L57"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30", "3T", "3L30"], - thundershock: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7L1", "7V", "6T", "6L30", "5T", "5L30", "4T", "4L30", "3T", "3L30"], + thundershock: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L4", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], voltswitch: ["7M", "6M", "5M"], wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L1", "6L1"], + zapcannon: ["7L1", "7V", "6L1"], }}, azurill: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["7E", "6E", "5E", "4E", "3T"], - bounce: ["7L23", "6T", "6L23", "5T", "5L23"], + bounce: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], bubble: ["7L7", "6L7", "5L10", "4L10", "3L10"], bubblebeam: ["7L13", "6L13", "5L13"], camouflage: ["7E", "6E"], @@ -20993,7 +19344,7 @@ exports.BattleLearnsets = { charm: ["7L10", "6L10", "5L2", "4L2", "3L3"], confide: ["7M", "6M"], copycat: ["7E", "6E"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], @@ -21004,13 +19355,13 @@ exports.BattleLearnsets = { frustration: ["7M", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], - helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T"], + helpinghand: ["7T", "7L16", "6T", "6L16", "5T", "5L16", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M"], mimic: ["3T"], muddywater: ["7E", "6E", "5E"], @@ -21021,14 +19372,14 @@ exports.BattleLearnsets = { refresh: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["3T"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], sing: ["7E", "6E", "5E", "4E", "3E"], slam: ["7L20", "7E", "6L20", "6E", "5L15", "5E", "4L15", "4E", "3L15", "3E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], soak: ["7E", "6E", "5E"], splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "6M", "5M", "4M", "3T"], @@ -21038,202 +19389,206 @@ exports.BattleLearnsets = { tailwhip: ["7L2", "6L2", "5L7", "4L7", "3L6"], tickle: ["7E", "6E", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], waterfall: ["7M", "6M", "5M", "4M", "3M"], watergun: ["7L1", "6L1", "5L18", "4L18", "3L21"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], watersport: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], whirlpool: ["4M"], workup: ["7M", "5M"], }}, marill: {learnset: { - amnesia: ["7E", "6E", "5E", "4E", "3E"], - aquajet: ["7E", "6E", "5E", "5D", "4E"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], + aquajet: ["7E", "6E", "5D", "5E", "4E"], aquaring: ["7L28", "6L28", "5L23", "4L23"], - aquatail: ["7L20", "6T", "6L20", "5T", "5L37", "4T", "4L37"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7E", "6E", "5E", "4E", "3E"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L20", "6T", "6L20", "5T", "5L37", "4T", "4L37"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bellydrum: ["7E", "7V", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["7E", "6E", "5E", "4E", "3T"], - bounce: ["6T", "5T"], + bounce: ["7T", "6T", "5T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubble: ["7L7", "6L7", "5L1"], - bubblebeam: ["7L13", "6L13", "5L18", "4L18", "3L21"], + bubblebeam: ["7L13", "7V", "6L13", "5L18", "4L18", "3L21"], camouflage: ["7E", "6E"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - defensecurl: ["7L10", "6L10", "5L2", "5D", "4L2", "3T", "3L3"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + defensecurl: ["7L10", "7V", "6L10", "5D", "5L2", "4L2", "3T", "3L3"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["7L37", "6L23", "5L27", "4L27", "3T", "3L28"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + doubleedge: ["7L37", "7V", "6L23", "5L27", "4L27", "3T", "3L28"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7V"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], grassknot: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L16", "6T", "6L16", "5T", "5L16", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L47", "6L40", "5L42", "4L42", "3L45"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "5D", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + icepunch: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "7V", "6M", "5M", "4E", "3E"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], muddywater: ["7E", "6E", "5E"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - perishsong: ["7E", "6E", "5E", "4E", "3E"], + perishsong: ["7E", "7V", "6E", "5E", "4E", "3E"], playrough: ["7L23", "6L23"], poweruppunch: ["6M"], - present: ["6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "7L31", "6M", "6L31", "5M", "5L32", "4M", "4L32", "3M", "3L36"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L31", "7V", "6M", "6L31", "5M", "5L32", "4M", "4L32", "3M", "3L36"], refresh: ["7E", "6E", "5E", "4E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], + rollout: ["7L10", "7V", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - superpower: ["7L40", "7E", "6T", "6L37", "6E", "5T", "5L37", "5E", "4T", "4E"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L2", "6L2", "5L7", "4L7", "3L6"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L10", "4L10", "3L10"], - waterpulse: ["6T", "4M", "3M"], + superpower: ["7T", "7L40", "7E", "6T", "6L37", "6E", "5T", "5L37", "5E", "4T", "4E"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L2", "7V", "6L2", "5L7", "4L7", "3L6"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L1", "5L10", "4L10", "3L10"], + waterpulse: ["7T", "6T", "4M", "3M"], watersport: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], workup: ["7M", "5M"], }}, azumarill: {learnset: { aquaring: ["7L31", "6L31", "5L27", "4L27"], - aquatail: ["7L21", "6T", "6L21", "5T", "5L47", "4T", "4L47"], - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "7L21", "6T", "6L21", "5T", "5L47", "4T", "4L47"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T"], + bounce: ["7T", "6T", "5T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bubble: ["7L7", "6L7", "5L1"], - bubblebeam: ["7L13", "6L13", "5L20", "4L20", "3L24"], + bubblebeam: ["7L13", "7V", "6L13", "5L20", "4L20", "3L24"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - defensecurl: ["7L10", "6L10", "5L1", "4L1", "3T", "3L1"], + covet: ["7T", "6T", "5T"], + curse: ["7V"], + defensecurl: ["7L10", "7V", "6L10", "5L1", "4L1", "3T", "3L1"], dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["7L42", "6L25", "5L33", "4L33", "3T", "3L34"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + doubleedge: ["7L42", "7V", "6L25", "5L33", "4L33", "3T", "3L34"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7L16", "6T", "6L16", "5T", "5L16", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hydropump: ["7L55", "6L46", "5L54", "4L54", "3L57"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M"], + liquidation: ["7T"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], playrough: ["7L25", "6L25"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "7L35", "6M", "6L35", "5M", "5L40", "4M", "4L40", "3M", "3L45"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L35", "7V", "6M", "6L35", "5M", "5L40", "4M", "4L40", "3M", "3L45"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "7V", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["7L46", "6T", "6L42", "5T", "5L42", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L2", "7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], + superpower: ["7T", "7L46", "6T", "6L42", "5T", "5L42", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L2", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], watersport: ["7L5", "7L1", "6L1", "5L1"], - whirlpool: ["4M"], + whirlpool: ["7V", "4M"], workup: ["7M", "5M"], }}, bonsly: {learnset: { - afteryou: ["6T", "5T"], + afteryou: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M", "4M"], - block: ["7L29", "6T", "6L26", "5T", "5L22", "4T", "4L22"], + block: ["7T", "7L29", "6T", "6L26", "5T", "5L22", "4T", "4L22"], brickbreak: ["7M", "6M", "5M", "4M"], calmmind: ["7M", "6M", "5M", "4M"], captivate: ["4M"], confide: ["7M", "6M"], copycat: ["7L1", "6L1", "5L1", "4L1"], counter: ["7L36", "6L33"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], curse: ["7E", "6E", "5E"], defensecurl: ["7E", "6E", "5E", "4E"], dig: ["6M", "5M", "4M"], doubleedge: ["7L43", "6L40", "5L46", "4L46"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], endure: ["7E", "6E", "5E", "4M"], explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], faketears: ["7L1", "6L1", "5L1", "4L1"], feintattack: ["7L19", "6L19", "5L25", "4L25"], flail: ["7L5", "6L5", "5L6", "4L6"], - foulplay: ["6T", "5T"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], harden: ["7E", "6E", "5E", "4E"], headbutt: ["7E", "6E", "5E", "4T", "4E"], - helpinghand: ["6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - lowkick: ["7L8", "6T", "6L8", "5T", "5L9", "4T", "4L9"], + lowkick: ["7T", "7L8", "6T", "6L8", "5T", "5L9", "4T", "4L9"], mimic: ["7L15", "6L15", "5L17", "4L17"], naturalgift: ["4M"], naturepower: ["7M", "6M"], @@ -21245,7 +19600,7 @@ exports.BattleLearnsets = { rockslide: ["7M", "7L33", "6M", "6L29", "5M", "5L33", "4M", "4L33"], rockthrow: ["7L12", "6L12", "5L14", "4L14"], rocktomb: ["7M", "7L26", "6M", "6L22", "5M", "5L30", "4M", "4L30"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], rollout: ["7E", "6E", "5E", "4T", "4E"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M"], @@ -21255,8 +19610,9 @@ exports.BattleLearnsets = { slam: ["5L38", "4L38"], sleeptalk: ["7M", "6M", "5T", "4M"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + stompingtantrum: ["7T"], substitute: ["7M", "6M", "5M", "4M"], suckerpunch: ["7L40", "6L36", "5L41", "4T", "4L41"], sunnyday: ["7M", "6M", "5M", "4M"], @@ -21264,12 +19620,12 @@ exports.BattleLearnsets = { tearfullook: ["7L22"], thief: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], }}, sudowoodo: {learnset: { - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - block: ["7L29", "6T", "6L26", "5T", "5L22", "4T", "4L22", "3L33"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "7L29", "6T", "6L26", "5T", "5L22", "4T", "4L22", "3L33"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], @@ -21278,359 +19634,376 @@ exports.BattleLearnsets = { confide: ["7M", "6M"], copycat: ["7L1", "6L1", "5L1", "4L1"], counter: ["7L36", "6L33", "5L33", "3T"], - covet: ["6T", "5T"], - curse: ["7E", "6E", "5E"], - defensecurl: ["7E", "6E", "5E", "4E", "3T"], - dig: ["6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + curse: ["7E", "7V", "6E", "5E"], + defensecurl: ["7E", "7V", "6E", "5E", "4E", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L43", "6L40", "5L46", "4L46", "3T", "3L57"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L25", "4L25", "3L41"], - firepunch: ["6T", "5T", "4T", "3T"], - flail: ["7L5", "7L1", "6L1", "5L1", "5D", "4L1", "3L9"], + feintattack: ["7L19", "7V", "6L19", "5L25", "4L25", "3L41"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flail: ["7L5", "7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L9"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hammerarm: ["7L50", "6L47", "5L49", "4L49"], harden: ["7E", "6E", "5E", "4E"], - headbutt: ["7E", "6E", "5E", "4T", "4E"], + headbutt: ["7E", "7V", "6E", "5E", "4T", "4E"], headsmash: ["7L54"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - lowkick: ["7L8", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L17"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + lowkick: ["7T", "7L8", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L17"], megakick: ["3T"], megapunch: ["3T"], - mimic: ["7L15", "6L15", "5L17", "4L17", "3T", "3L1"], - mudslap: ["4T", "3T"], + mimic: ["7L15", "7V", "6L15", "5L17", "4L17", "3T", "3L1"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], naturepower: ["7M", "6M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L33", "6M", "6L29", "5M", "5L33", "4M", "4L33", "3T", "3L25"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L12", "7L1", "6L1", "5L1", "4L1", "3L1"], + rockslide: ["7M", "7L33", "7V", "6M", "6L29", "5M", "5L33", "4M", "4L33", "3T", "3L25"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rockthrow: ["7L12", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], rocktomb: ["7M", "7L26", "6M", "6L22", "5M", "5L30", "4M", "4L30", "3M"], - roleplay: ["6T", "5T", "5D", "4T"], - rollout: ["7E", "6E", "5E", "5D", "4T", "4E", "3T"], + roleplay: ["7T", "6T", "5D", "5T", "4T"], + rollout: ["7E", "7V", "6E", "5D", "5E", "4T", "4E", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], sandtomb: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - selfdestruct: ["7E", "6E", "5E", "4E", "3T", "3E"], - slam: ["7L1", "6L15", "5L38", "4L38", "3L49"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + selfdestruct: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + slam: ["7L1", "7V", "6L15", "5L38", "4L38", "3L49"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "7L47", "6M", "6L43", "5M", "5L43", "4M"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7L40", "6L36", "5L41", "4T", "4L41"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], tearfullook: ["7L22"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], woodhammer: ["7L1", "6L1", "5L1", "4L1"], }}, hoppip: {learnset: { + absorb: ["7L1"], acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - amnesia: ["7E", "6E", "5E", "4E", "3E"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], aromatherapy: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["7L46", "6T", "6L46", "5T", "5L46", "5D", "4T", "4L40"], - bulletseed: ["7L19", "6L19", "5L19", "5D", "4M", "4L19", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "7L46", "6T", "6L46", "5D", "5T", "5L46", "4T", "4L40"], + bulletseed: ["7L19", "6L19", "5D", "5L19", "4M", "4L19", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7E", "6E", "5E", "4E", "3E"], + confusion: ["7E", "7V", "6E", "5E", "4E", "3E"], cottonguard: ["7E", "6E", "5E"], - cottonspore: ["7L34", "6L34", "5L34", "4L28", "3L25"], + cottonspore: ["7L34", "7V", "6L34", "5L34", "4L28", "3L25"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - encore: ["7E", "6E", "5E", "5D", "4E", "3E"], - endure: ["7E", "6E", "5E", "4M", "3T"], + defensecurl: ["7V", "3T"], + doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + encore: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], fairywind: ["7L10", "6L10"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L43", "6T", "6L43", "5T", "5L43", "4M", "4L37", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7L43", "7V", "6T", "6L43", "5T", "5L43", "4M", "4L37", "3M"], grassknot: ["7M", "6M", "5M", "4M"], grassyterrain: ["7E", "6E"], - headbutt: ["4T"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7V"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - leechseed: ["7L22", "6L22", "5L22", "4L22", "3L20"], - megadrain: ["7L25", "6L25", "5L25", "4L25", "3L30"], + leechseed: ["7L22", "7V", "6L22", "5L22", "4L22", "3L20"], + megadrain: ["7L25", "7V", "6L25", "5L25", "4L25", "3L30"], memento: ["7L49", "6L49", "5L49", "4L43"], mimic: ["3T"], naturalgift: ["4M"], - poisonpowder: ["7L12", "6L12", "5L12", "4L12", "3L13"], - protect: ["7M", "6M", "5M", "4M", "3M"], + payday: ["7V"], + poisonpowder: ["7L12", "7V", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4E", "3E"], ragepowder: ["7L31", "6L31", "5L31"], - reflect: ["7M", "6M", "5M", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7V", "6M", "5M", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], silverwind: ["4M"], - sleeppowder: ["7L16", "6L16", "5L16", "4L16", "3L17"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], - stunspore: ["7L14", "6L14", "5L14", "4L14", "3L15"], + sleeppowder: ["7L16", "7V", "6L16", "5L16", "4L16", "3L17"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + splash: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + strengthsap: ["7E"], + stunspore: ["7L14", "7V", "6L14", "5L14", "4L14", "3L15"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L4", "6T", "6L4", "5T", "5L4", "5D", "4T", "4L4", "3L5"], - tackle: ["7L8", "6L8", "5L10", "4L10", "3L10"], - tailwhip: ["7L6", "6L6", "5L7", "4L7", "3L5"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + synthesis: ["7T", "7L4", "7V", "6T", "6L4", "5D", "5T", "5L4", "4T", "4L4", "3L5"], + tackle: ["7L8", "7V", "6L8", "5L10", "4L10", "3L10"], + tailwhip: ["7L6", "7V", "6L6", "5L7", "4L7", "3L5"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], uturn: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L31"], - worryseed: ["7L40", "7E", "6T", "6L40", "6E", "5T", "5L40", "5E", "4T", "4L34", "4E"], + worryseed: ["7T", "7L40", "7E", "6T", "6L40", "6E", "5T", "5L40", "5E", "4T", "4L34", "4E"], }}, skiploom: {learnset: { + absorb: ["7L1"], acrobatics: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["7L56", "6T", "6L56", "5T", "5L56", "4T", "4L48"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "7L56", "6T", "6L56", "5T", "5L56", "4T", "4L48"], bulletseed: ["7L20", "6L20", "5L20", "4M", "4L20", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - cottonspore: ["7L40", "6L40", "5L40", "4L32", "3L29"], + cottonspore: ["7L40", "7V", "6L40", "5L40", "4L32", "3L29"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], fairywind: ["7L10", "6L10"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L52", "6T", "6L52", "5T", "5L52", "4M", "4L44", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7L52", "7V", "6T", "6L52", "5T", "5L52", "4M", "4L44", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - leechseed: ["7L24", "6L24", "5L24", "4L24", "3L22"], - megadrain: ["7L28", "6L28", "5L28", "4L28", "3L36"], + leechseed: ["7L24", "7V", "6L24", "5L24", "4L24", "3L22"], + megadrain: ["7L28", "7V", "6L28", "5L28", "4L28", "3L36"], memento: ["7L60", "6L60", "5L60", "4L52"], mimic: ["3T"], naturalgift: ["4M"], - poisonpowder: ["7L12", "6L12", "5L12", "4L12", "3L13"], - protect: ["7M", "6M", "5M", "4M", "3M"], + poisonpowder: ["7L12", "7V", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M"], ragepowder: ["7L36", "6L36", "5L36"], reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], - sleeppowder: ["7L16", "6L16", "5L16", "4L16", "3L17"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], - stunspore: ["7L14", "6L14", "5L14", "4L14", "3L15"], + sleeppowder: ["7L16", "7V", "6L16", "5L16", "4L16", "3L17"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + splash: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + stunspore: ["7L14", "7V", "6L14", "5L14", "4L14", "3L15"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - tackle: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + synthesis: ["7T", "7L4", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], uturn: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L36"], - worryseed: ["7L48", "6T", "6L48", "5T", "5L48", "4T", "4L40"], + worryseed: ["7T", "7L48", "6T", "6L48", "5T", "5L48", "4T", "4L40"], }}, jumpluff: {learnset: { + absorb: ["7L1"], acrobatics: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["7L64", "6T", "6L64", "5T", "5L64", "4T", "4L48"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "7L64", "6T", "6L64", "5T", "5L64", "4T", "4L48"], bulletseed: ["7L20", "6L20", "5L20", "5S0", "4M", "4L20", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - cottonspore: ["7L44", "6L44", "5L44", "4L32", "3L33"], + cottonspore: ["7L44", "7V", "6L44", "5L44", "4L32", "3L33"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], + defensecurl: ["7V", "3T"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], fairywind: ["7L10", "6L10"], falseswipe: ["5S0"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L59", "6T", "6L59", "5T", "5L59", "4M", "4L44", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7L59", "7V", "6T", "6L59", "5T", "5L59", "4M", "4L44", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], infestation: ["7M", "6M"], - leechseed: ["7L24", "6L24", "5L24", "5S0", "4L24", "3L22"], - megadrain: ["7L29", "6L29", "5L29", "4L28", "3L44"], + leechseed: ["7L24", "7V", "6L24", "5L24", "5S0", "4L24", "3L22"], + megadrain: ["7L29", "7V", "6L29", "5L29", "4L28", "3L44"], memento: ["7L69", "6L69", "5L69", "4L52"], mimic: ["3T"], naturalgift: ["4M"], - poisonpowder: ["7L12", "6L12", "5L12", "4L12", "3L13"], - protect: ["7M", "6M", "5M", "4M", "3M"], + poisonpowder: ["7L12", "7V", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M"], ragepowder: ["7L39", "6L39", "5L39"], reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], - sleeppowder: ["7L16", "6L16", "5L16", "5S0", "4L16", "3L17"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], - stunspore: ["7L14", "6L14", "5L14", "4L14", "3L15"], + sleeppowder: ["7L16", "7V", "6L16", "5L16", "5S0", "4L16", "3L17"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + splash: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + stunspore: ["7L14", "7V", "6L14", "5L14", "4L14", "3L15"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - tackle: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + synthesis: ["7T", "7L4", "7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], uturn: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L36"], - worryseed: ["7L54", "6T", "6L54", "5T", "5L54", "4T", "4L40"], + worryseed: ["7T", "7L54", "6T", "6L54", "5T", "5L54", "4T", "4L40"], }}, aipom: {learnset: { acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "4L29", "4E", "3L50", "3E"], + agility: ["7L29", "7E", "7V", "6L29", "6E", "5L29", "5E", "4L29", "4E", "3L50", "3E"], astonish: ["7L8", "6L8", "5L8", "4L8", "3L13"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L11", "6L11", "5L11", "4L11", "3L18"], - beatup: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7L11", "7V", "6L11", "5L11", "4L11", "3L18"], + beatup: ["7E", "7V", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], - bounce: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + bounce: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - covet: ["7E", "6T", "6E", "5T", "5E", "4E"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doublehit: ["7L32", "6L32", "5L32", "4L32"], - doubleslap: ["7E", "6E", "5E", "4E", "3E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], + doubleslap: ["7E", "7V", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6E", "5E", "5D", "4E"], - firepunch: ["6T", "5T", "5D", "4T", "3T"], + fakeout: ["7E", "6E", "5D", "5E", "4E"], + firepunch: ["7T", "7V", "6T", "5D", "5T", "4T", "3T"], fling: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L18", "6L18", "5L18", "4L18", "3L31"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + furyswipes: ["7L18", "7V", "6L18", "5L18", "4L18", "3L31"], grassknot: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - icepunch: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L39", "6L39", "5L39", "4L39"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], payback: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], quickguard: ["7E", "6E"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7E", "6E", "5E"], - rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandattack: ["7L4", "6L4", "5L4", "4L4", "3L6", "3S0"], - scratch: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - screech: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3L43", "3E"], + sandattack: ["7L4", "7V", "6L4", "5L4", "4L4", "3L6", "3S0"], + scratch: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + screech: ["7L25", "7E", "7V", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3L43", "3E"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slam: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + slam: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - strength: ["6M", "5M", "4M", "3M"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L22", "6L22", "5L22", "4T", "4L22", "3T", "3L38"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L22", "7V", "6L22", "5L22", "4T", "4L22", "3T", "3L38"], switcheroo: ["7E", "6E", "5E"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailslap: ["7E"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], tickle: ["7L15", "6L15", "5L15", "4L15", "3L25"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, ambipom: {learnset: { acrobatics: ["7M", "6M", "5M"], @@ -21639,11 +20012,11 @@ exports.BattleLearnsets = { astonish: ["7L8", "7L1", "6L1", "5L1", "4L1"], attract: ["7M", "6M", "5M", "4M"], batonpass: ["7L11", "6L11", "5L11", "4L11"], - bounce: ["6T", "5T", "4T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M"], captivate: ["4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M", "4M"], dig: ["6M", "5M", "4M"], doublehit: ["7L32", "6L32", "5L32", "4L32"], @@ -21652,25 +20025,26 @@ exports.BattleLearnsets = { dualchop: ["7L1"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], + firepunch: ["7T", "6T", "5T", "4T"], fling: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], - focuspunch: ["6T", "4M"], - foulplay: ["6T", "5T"], + focuspunch: ["7T", "6T", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], furyswipes: ["7L18", "6L18", "5L18", "4L18"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], + gunkshot: ["7T", "6T", "5T", "4T"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], mudslap: ["4T"], nastyplot: ["7L39", "6L39", "5L39", "4L39"], @@ -21683,21 +20057,21 @@ exports.BattleLearnsets = { retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], sandattack: ["7L4", "7L1", "6L1", "5L1", "4L1"], scratch: ["7L1", "6L1", "5L1", "4L1"], screech: ["7L25", "6L25", "5L25", "4L25"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], shadowball: ["7M", "6M", "5M", "4M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], - spite: ["6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], @@ -21708,98 +20082,99 @@ exports.BattleLearnsets = { thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], thunderwave: ["7M", "6M", "5M", "4M"], tickle: ["7L15", "6L15", "5L15", "4L15"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], }}, sunkern: {learnset: { - absorb: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + absorb: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bide: ["7E", "6E", "5E"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E", "3E"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L37", "6L37", "5L37", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "5D", "4T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5D", "5T", "4T"], encore: ["7E", "6E", "5E", "4E", "3E"], - endeavor: ["7L25", "6T", "6L25", "5T", "5L21", "4T", "4L21", "3L25"], - endure: ["7E", "6E", "5E", "4M", "3T"], + endeavor: ["7T", "7L25", "6T", "6L25", "5T", "5L21", "4T", "4L21", "3L25"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L22", "6T", "6L22", "5T", "5L41", "4M", "4L41", "3M", "3L42"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7L22", "7V", "6T", "6L22", "5T", "5L41", "4M", "4L41", "3M", "3L42"], grassknot: ["7M", "6M", "5M", "4M"], grasswhistle: ["7L7", "7E", "6L7", "6E", "5L13", "5E", "4L13", "4E", "3E"], grassyterrain: ["7E", "6E"], - growth: ["7L1", "6L1", "5L1", "4L1", "3L6", "3S0"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + growth: ["7L1", "7V", "6L1", "5L1", "4L1", "3L6", "3S0"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], ingrain: ["7L4", "7E", "6L4", "6E", "5L9", "5E", "4L9", "4E", "3L18"], leechseed: ["7L13", "7E", "6L13", "6E", "5L17", "5E", "4L17", "4E", "3E"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - megadrain: ["7L10", "6L10", "5L5", "5D", "4L5", "3L13"], + megadrain: ["7L10", "7V", "6L10", "5D", "5L5", "4L5", "3L13"], mimic: ["3T"], morningsun: ["7E", "6E", "5E"], naturalgift: ["7L31", "7E", "6L31", "6E", "5L31", "5E", "4M"], naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], razorleaf: ["7L16", "6L16", "5L29", "4L29"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["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: ["7L43", "6T", "6L43", "5T", "5L45", "4T", "4L45"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "3M"], + seedbomb: ["7T", "7L43", "6T", "6L43", "5T", "5L45", "4T", "4L45"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7E", "6E", "5E", "5D", "4E"], + sunnyday: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "7V", "6E", "5D", "5E", "4E"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L28", "6T", "6L28", "5T", "5L33", "4T", "4L33", "3L37"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - worryseed: ["7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], + synthesis: ["7T", "7L28", "7V", "6T", "6L28", "5T", "5L33", "4T", "4L33", "3L37"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + worryseed: ["7T", "7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], }}, sunflora: {learnset: { - absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + absorb: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bulletseed: ["7L25", "6L25", "5L21", "4M", "4L21", "3M", "3L25"], captivate: ["4M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["7L37", "6L37", "5L37", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], flowershield: ["7L1", "6L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L22", "6T", "6L22", "5T", "5L22", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7L22", "7V", "6T", "6L22", "5T", "5L22", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], grasswhistle: ["7L7", "6L7", "5L13", "4L13"], - growth: ["7L1", "6L1", "5L1", "4L1", "3L6"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + growth: ["7L1", "7V", "6L1", "5L1", "4L1", "3L6"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], ingrain: ["7L4", "6L4", "5L9", "4L9", "3L18"], leafstorm: ["7L43", "6L43", "5L45", "4L43"], leechseed: ["7L13", "6L13", "5L17", "4L17"], @@ -21809,92 +20184,94 @@ exports.BattleLearnsets = { naturalgift: ["7L31", "6L31", "5L31", "4M"], naturepower: ["7M", "6M"], petalblizzard: ["7L50", "6L50"], - petaldance: ["7L28", "6L28", "5L33", "4L33", "3L37"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - razorleaf: ["7L16", "6L16", "5L29", "4L29", "3L13"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + petaldance: ["7L28", "7V", "6L28", "5L33", "4L33", "3L37"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + razorleaf: ["7L16", "7V", "6L16", "5L29", "4L29", "3L13"], + rest: ["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: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L34", "6M", "6L34", "5M", "5L41", "4M", "4L41", "3M", "3L42"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L41", "4M", "4L41", "3M", "3L42"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - worryseed: ["7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], + synthesis: ["7T", "6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + worryseed: ["7T", "7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], }}, yanma: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], aircutter: ["4T"], airslash: ["7L54", "6L54", "5L54", "4L54"], ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bugbite: ["6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bugbite: ["7T", "6T", "5T", "4T"], bugbuzz: ["7L57", "6L57", "5L57", "4L57"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], - detect: ["7L17", "6L17", "5L17", "4L17", "3L25"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7L17", "7V", "6L17", "5L17", "4L17", "3L25"], doubleedge: ["7E", "6E", "5E", "3T"], - doubleteam: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11", "3M", "3L12"], + doubleteam: ["7M", "7L11", "7V", "6M", "6L11", "5M", "5L11", "4M", "4L11", "3M", "3L12"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7E", "6E", "5E", "5D", "4E"], + feint: ["7E", "6E", "5D", "5E", "4E"], feintattack: ["7E", "6E", "5E", "4E"], - flash: ["6M", "5M", "4M", "3M"], - foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "5D", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5D", "5T", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], hypnosis: ["7L38", "6L38", "5L38", "4L38", "3L23"], - leechlife: ["7E", "6E", "5E", "4E", "3E"], + leechlife: ["7E", "7V", "6E", "5E", "4E", "3E"], mimic: ["3T"], naturalgift: ["4M"], ominouswind: ["4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "6M", "5M", "4M", "3M"], pursuit: ["7L30", "7E", "6L30", "6E", "5L30", "5E", "4L30", "4E"], - quickattack: ["7L6", "6L6", "5L6", "5D", "4L6", "3L6"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L6", "7V", "6L6", "5D", "5L6", "4L6", "3L6"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - screech: ["7L46", "6L46", "5L46", "4L46", "3L49"], + screech: ["7L46", "7V", "6L46", "5L46", "4L46", "3L49"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - sonicboom: ["7L14", "6L14", "5L14", "4L14", "3L17"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + sonicboom: ["7L14", "7V", "6L14", "5L14", "4L14", "3L17"], steelwing: ["7M", "6M", "4M", "3M"], stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L22", "6L22", "5L22", "4L22", "3L31"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27", "3L34"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + supersonic: ["7L22", "7V", "6L22", "5L22", "4L22", "3L31"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27", "3L34"], uturn: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L49"], - whirlwind: ["7E", "6E", "5E", "4E", "3E"], - wingattack: ["7L43", "6L43", "5L43", "4L43", "3L39"], + whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + wingattack: ["7L43", "7V", "6L43", "5L43", "4L43", "3L39"], }}, yanmega: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], @@ -21902,11 +20279,11 @@ exports.BattleLearnsets = { airslash: ["7L54", "7L1", "6L1", "5L54", "4L49"], ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33"], attract: ["7M", "6M", "5M", "4M"], - bugbite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bugbite: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], bugbuzz: ["7L57", "7L1", "6L1", "5L57", "4L54"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], + defog: ["7T", "4M"], detect: ["7L17", "6L17", "5L17", "4L17"], doubleteam: ["7M", "7L11", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], dreameater: ["7M", "6M", "5M", "4M"], @@ -21916,11 +20293,12 @@ exports.BattleLearnsets = { flash: ["6M", "5M", "4M"], foresight: ["7L1", "6L1", "5L1", "4L1"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], + gigadrain: ["7T", "6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], + laserfocus: ["7T"], leechlife: ["7M"], mudslap: ["4T"], naturalgift: ["4M"], @@ -21938,11 +20316,11 @@ exports.BattleLearnsets = { screech: ["7L46", "6L46", "5L46", "4L43"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T", "4T"], silverwind: ["4M"], slash: ["7L43", "6L43", "5L43", "4L38"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], sonicboom: ["7L14", "6L14", "5L14", "4L14"], steelwing: ["7M", "6M", "4M"], @@ -21954,96 +20332,98 @@ exports.BattleLearnsets = { swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], tackle: ["7L1", "6L1", "5L1", "4L1"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], thief: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27"], + uproar: ["7T", "7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27"], uturn: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L46"], }}, wooper: {learnset: { acidspray: ["7E", "6E", "5E"], - afteryou: ["7E", "6T", "6E", "5T", "5E"], - amnesia: ["7L23", "6L23", "5L23", "4L23", "3L21"], - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], - aquatail: ["6T", "5T", "5D", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L23", "7V", "6L23", "5L23", "4L23", "3L21"], + ancientpower: ["7E", "7V", "6E", "5E", "4T", "4E", "3E"], + aquatail: ["7T", "6T", "5D", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + bodyslam: ["7E", "7V", "6E", "5D", "5E", "4E", "3T", "3E"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7E", "6E", "5E", "4E"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + defensecurl: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doublekick: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3M", "3L36"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3M", "3L36"], eerieimpulse: ["7E", "6E"], encore: ["7E", "6E", "5E", "4E"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], guardswap: ["7E", "6E"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7L43", "6L43", "5L43", "4L43", "3L51"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L43", "7V", "6L43", "5L43", "4L43", "3L51"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], infestation: ["7M", "6M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], mimic: ["3T"], - mist: ["7L43", "6L43", "5L43", "4L43", "3L51"], + mist: ["7L43", "7V", "6L43", "5L43", "4L43", "3L51"], mudbomb: ["7L19", "6L19", "5L19", "4L19"], muddywater: ["7L47", "6L47", "5L47", "4L47"], mudshot: ["7L9", "6L9", "5L9", "4L9", "3L16"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L5", "7E", "6L5", "6E", "5L5", "5E", "4L5", "4E", "3E"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L41"], + poweruppunch: ["7E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L41"], recover: ["7E", "6E", "5E", "4E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4E", "3E"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + safeguard: ["7M", "7V", "6M", "5M", "4E", "3E"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - slam: ["7L15", "6L15", "5L15", "4L15", "3L11"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + slam: ["7L15", "7V", "6L15", "5L15", "4L15", "3L11"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], spitup: ["7E", "6E", "5E", "4E", "3E"], stockpile: ["7E", "6E", "5E", "4E", "3E"], + stompingtantrum: ["7T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], swallow: ["7E", "6E", "5E", "4E", "3E"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + watergun: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], yawn: ["7L29", "6L29", "5L29", "4L29", "3L31"], }}, quagsire: {learnset: { - afteryou: ["6T", "5T"], - amnesia: ["7L24", "6L24", "5L24", "4L24", "3L23"], + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L24", "7V", "6L24", "5L24", "4L24", "3L23"], ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], @@ -22051,74 +20431,76 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L42"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L36", "7V", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L42"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7L48", "6L48", "5L48", "4L48", "3L61"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L48", "7V", "6L48", "5L48", "4L48", "3L61"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], infestation: ["7M", "6M"], - irontail: ["6T", "5T", "4M", "3M"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], - mist: ["7L48", "6L48", "5L48", "4L48", "3L61"], + mist: ["7L48", "7V", "6L48", "5L48", "4L48", "3L61"], mudbomb: ["7L19", "6L19", "5L19", "4L19"], muddywater: ["7L53", "6L53", "5L53", "4L53"], mudshot: ["7L9", "6L9", "5L9", "4L9", "3L16"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41", "3M", "3L49"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L41", "3M", "3L49"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - slam: ["7L15", "6L15", "5L15", "4L15", "3L11"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + slam: ["7L15", "7V", "6L15", "5L15", "4L15", "3L11"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], thief: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], yawn: ["7L31", "6L31", "5L31", "4L31", "3L35"], }}, murkrow: {learnset: { @@ -22126,80 +20508,83 @@ exports.BattleLearnsets = { aircutter: ["4T"], assurance: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25"], astonish: ["7L1", "6L1", "5L1", "4L1", "3L9", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], bravebird: ["7E", "6E", "5E", "4E"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "5D", "4E", "3E"], + confuseray: ["7E", "6E", "5D", "5E", "4E", "3E"], + curse: ["7V"], darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], + defog: ["7T", "4M"], + detect: ["7V"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - drillpeck: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + drillpeck: ["7E", "7V", "6E", "5E", "4E", "3E"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], featherdance: ["7E", "6E", "5E", "4E", "3E"], - feintattack: ["7L35", "7E", "6L35", "6E", "5L35", "5E", "4L35", "4E", "3L35"], + feintattack: ["7L35", "7E", "7V", "6L35", "6E", "5L35", "5E", "4L35", "4E", "3L35"], flatter: ["7E", "6E"], - fly: ["7M", "6M", "5M", "4M", "3M"], - foulplay: ["7L45", "6T", "6L45", "5T", "5L45"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7L11", "6L11", "5L11", "4L11", "3L22"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - meanlook: ["7L41", "6L41", "5L41", "4L41", "3L48"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + haze: ["7L11", "7V", "6L11", "5L11", "4L11", "3L22"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + meanlook: ["7L41", "7V", "6L41", "5L41", "4L41", "3L48"], mimic: ["3T"], - mirrormove: ["7E", "6E", "5E", "4E", "3E"], - mudslap: ["4T", "3T"], + mirrormove: ["7E", "7V", "6E", "5E", "4E", "3E"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L21", "6L21", "5L21", "4L21", "3L27"], + nightmare: ["7V", "3T"], + nightshade: ["7L21", "7V", "6L21", "5L21", "4L21", "3L27"], ominouswind: ["4T"], payback: ["7M", "6M", "5M", "4M"], - peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + peck: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], perishsong: ["7E", "6E", "5E", "4E", "3E"], pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], psychic: ["7M", "6M", "5M", "4M"], psychoshift: ["7E", "6E", "5E", "4E"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7L5", "6L5", "5L5", "4L5", "3L14"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + pursuit: ["7L5", "7V", "6L5", "5L5", "4L5", "3L14"], quash: ["7M", "7L65", "6M", "6L65", "5M", "5L65"], + quickattack: ["7V"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roost: ["7M", "7E", "6M", "6E", "5D", "5T", "5E", "4M"], round: ["7M", "6M", "5M"], screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - skyattack: ["7E", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + skyattack: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "3T"], - spite: ["6T", "5T", "4T"], - steelwing: ["7M", "6M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7L55", "6L55", "5L55", "4T", "4L45"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["7L50", "6T", "6L50", "5T", "5L51", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["7T", "7L50", "6T", "6L50", "5T", "5L51", "4T"], taunt: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L40"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], torment: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], - whirlwind: ["7E", "6E", "5E", "4E", "3E"], - wingattack: ["7L15", "7E", "6L15", "6E", "5L15", "5E", "4L15", "4E", "3E"], + uproar: ["7T", "6T", "5T", "4T"], + whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + wingattack: ["7L15", "7E", "7V", "6L15", "6E", "5L15", "5E", "4L15", "4E", "3E"], }}, honchkrow: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], @@ -22210,26 +20595,26 @@ exports.BattleLearnsets = { captivate: ["4M"], confide: ["7M", "6M"], darkpulse: ["7M", "7L75", "6M", "6L75", "5T", "5L75", "4M", "4L55"], - defog: ["4M"], + defog: ["7T", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], dreameater: ["7M", "6M", "5M", "4M"], embargo: ["7M", "6M", "5M", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], fly: ["7M", "6M", "5M", "4M"], - foulplay: ["7L45", "6T", "6L45", "5T", "5L45"], + foulplay: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], haze: ["7L1", "6L1", "5L1", "4L1"], - heatwave: ["6T", "5T", "4T"], + heatwave: ["7T", "7S0", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T"], + icywind: ["7T", "7S0", "6T", "5T"], incinerate: ["6M", "5M"], mudslap: ["4T"], nastyplot: ["7L35", "6L35", "5L35", "4L35"], naturalgift: ["4M"], - nightslash: ["7L55", "7L1", "6L1", "5L55", "4L45"], + nightslash: ["7L55", "7L1", "7S0", "6L1", "5L55", "4L45"], ominouswind: ["4T"], payback: ["7M", "6M", "5M", "4M"], pluck: ["5M", "4M"], @@ -22246,117 +20631,120 @@ exports.BattleLearnsets = { round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - skyattack: ["6T", "5T", "4T"], + skyattack: ["7T", "7S0", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T"], - spite: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T"], + spite: ["7T", "6T", "5T", "4T"], steelwing: ["7M", "6M", "4M"], substitute: ["7M", "6M", "5M", "4M"], suckerpunch: ["7L1", "6L1", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], swift: ["4T"], - tailwind: ["6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], thunderwave: ["7M", "6M", "5M", "4M"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], wingattack: ["7L1", "6L1", "5L1", "4L1"], }}, misdreavus: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], astonish: ["7L10", "6L10", "5L10", "4L10", "3L11"], - attract: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L14", "6L14", "5L14", "4L14", "3L17"], - curse: ["7E", "6E", "5E", "4E"], + confuseray: ["7L14", "7V", "6L14", "5L14", "4L14", "3L17"], + curse: ["7E", "7V", "6E", "5E", "4E"], darkpulse: ["7M", "6M", "5T", "4M"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - destinybond: ["7E", "6E", "5E", "5D", "4E", "3E"], + defensecurl: ["7V", "3T"], + destinybond: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], grudge: ["7L50", "6L50", "5L50", "4L46", "3L53"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + headbutt: ["7V", "4T"], + healbell: ["7T", "6T", "5T", "4T"], hex: ["7L23", "6L23", "5L23"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T", "4T"], imprison: ["7E", "6E", "5E", "4E", "3E"], inferno: ["5D"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meanlook: ["7L19", "6L19", "5L19", "4L19", "3L23"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meanlook: ["7L19", "7V", "6L19", "5L19", "4L19", "3L23"], mefirst: ["7E", "6E"], memento: ["7E", "6E", "5E", "4E"], mimic: ["3T"], nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], ominouswind: ["7E", "6E", "5E", "4T", "4E"], - painsplit: ["7L32", "6T", "6L32", "5T", "5L32", "4T", "4L28", "3L37"], + painsplit: ["7T", "7L32", "7V", "6T", "6L32", "5T", "5L32", "4T", "4L28", "3L37"], payback: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L32"], - perishsong: ["7L46", "6L46", "5L46", "4L41", "3L45"], + perishsong: ["7L46", "7V", "6L46", "5L46", "4L41", "3L45"], powergem: ["7L55", "6L55", "5L55", "4L50"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L28", "6L28", "5L28", "4L23", "3L30"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - psywave: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L28", "7V", "6L28", "5L28", "4L23", "3L30"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + psywave: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M"], + shadowball: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M"], shadowsneak: ["7E", "6E", "5E", "4E"], - shockwave: ["6T", "4M", "3M"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7L5", "7E", "6T", "6L5", "6E", "5T", "5L5", "5E", "4T", "4L5", "4E", "3L6", "3S0"], + shockwave: ["7T", "6T", "4M", "3M"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7L5", "7E", "7V", "6T", "6L5", "6E", "5T", "5L5", "5E", "4T", "4L5", "4E", "3L6", "3S0"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["7E", "6E", "5E", "4T", "4E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["7E", "6T", "6E", "5T", "5E"], + wonderroom: ["7T", "7E", "6T", "6E", "5T", "5E"], + zapcannon: ["7V"], }}, mismagius: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], + allyswitch: ["7T"], astonish: ["7L1", "6L1", "5L1", "4L1"], attract: ["7M", "6M", "5M", "4M"], calmmind: ["7M", "6M", "5M", "4M"], @@ -22373,24 +20761,25 @@ exports.BattleLearnsets = { energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], - foulplay: ["6T", "5T"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], growl: ["7L1", "6L1", "5L1", "4L1"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + healbell: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], luckychant: ["7L1", "6L1", "5L1", "4L1"], magicalleaf: ["7L1", "6L1", "5L1", "4L1"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mysticalfire: ["7L1", "6L1"], naturalgift: ["4M"], ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "6M", "5M", "4M"], phantomforce: ["7L1", "6L1"], powergem: ["7L1", "6L1"], @@ -22404,280 +20793,293 @@ exports.BattleLearnsets = { round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - skillswap: ["6T", "5T", "4M"], + shockwave: ["7T", "6T", "4M"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], substitute: ["7M", "6M", "5M", "4M"], suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], thunderwave: ["7M", "6M", "5M", "4M"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], + wonderroom: ["7T", "6T", "5T"], }}, unown: {learnset: { - hiddenpower: ["7M", "7L1", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], }}, wynaut: {learnset: { charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - counter: ["7L15", "6L15", "5L15", "4L15", "3L15"], - destinybond: ["7L15", "6L15", "5L15", "4L15", "3L15"], + counter: ["7L15", "6L15", "5L15", "4L15", "3L15", "3S0"], + destinybond: ["7L15", "6L15", "5L15", "4L15", "3L15", "3S0"], encore: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - mirrorcoat: ["7L15", "6L15", "5L15", "4L15", "3L15"], - safeguard: ["7M", "7L15", "6M", "6L15", "5L15", "4L15", "3L15"], + mirrorcoat: ["7L15", "6L15", "5L15", "4L15", "3L15", "3S0"], + safeguard: ["7M", "7L15", "6M", "6L15", "5L15", "4L15", "3L15", "3S0"], splash: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], tickle: ["3S0"], }}, wobbuffet: {learnset: { charm: ["5D"], - counter: ["7L1", "6L1", "6S2", "6S3", "5L1", "4L1", "3L1", "3S0", "3S1"], - destinybond: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + counter: ["7L1", "7V", "6L1", "6S3", "6S2", "5L1", "4L1", "3L1", "3S1", "3S0"], + destinybond: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], encore: ["5D"], - mirrorcoat: ["7L1", "6L1", "6S3", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], - safeguard: ["7M", "7L1", "6M", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + mirrorcoat: ["7L1", "7V", "6L1", "6S3", "5D", "5L1", "4L1", "3L1", "3S1", "3S0"], + safeguard: ["7M", "7L1", "7V", "6M", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], }}, girafarig: {learnset: { - agility: ["7L23", "6L14", "5L14", "4L14", "3L31"], - amnesia: ["7E", "6E", "5E", "4E", "3E"], + agility: ["7L23", "7V", "6L14", "5L14", "4L14", "3L31"], + allyswitch: ["7T"], + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], assurance: ["7L10", "6L10", "5L28", "4L28"], astonish: ["7L1", "6L1", "5L1", "4L1", "3L7"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L41", "6L23", "5L23", "4L23", "3L37"], - beatup: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + batonpass: ["7L41", "7V", "6L23", "5L23", "4L23", "3L37"], + beatup: ["7E", "7V", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], bulldoze: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "5D", "4L1", "3L13"], - crunch: ["7L37", "6L37", "5L46", "4L46", "3L49"], + confusion: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L13"], + crunch: ["7L37", "7V", "6L37", "5L46", "4L46", "3L49"], + curse: ["7V"], dazzlinggleam: ["7M", "6M"], doubleedge: ["3T"], doublehit: ["7L28", "6L28", "5L32", "4L32"], doublekick: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gravity: ["7T", "6T", "5T", "4T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], guardswap: ["7L1", "6L1", "5L1", "4L1"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + magiccoat: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], meanlook: ["7E", "6E", "5E"], mimic: ["3T"], - mirrorcoat: ["7E", "6E", "5E", "5D", "4E"], - mudslap: ["4T", "3T"], + mirrorcoat: ["7E", "6E", "5D", "5E", "4E"], + mudslap: ["7V", "4T", "3T"], nastyplot: ["7L46", "6L46"], naturalgift: ["4M"], - nightmare: ["3T"], + nightmare: ["7V", "3T"], odorsleuth: ["7L5", "6L5", "5L5", "4L5", "3L25"], powerswap: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L19", "6L19", "5L19", "4L19", "3L43"], - psychic: ["7M", "7L50", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L19", "7V", "6L19", "5L19", "4L19", "3L43"], + psychic: ["7M", "7L50", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], + psychicfangs: ["7E"], + psychicterrain: ["7E"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], razorwind: ["7E", "6E", "5E", "4E"], - recycle: ["6T", "5T", "4M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stomp: ["7L14", "6L10", "5L10", "4L10", "3L19"], - strength: ["6M", "5M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stomp: ["7L14", "7V", "6L10", "5L10", "4L10", "3L19"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7E", "6E", "5E", "4E", "3E"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7E", "7V", "6E", "5E", "4E", "3E"], + telekinesis: ["7T", "5M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], wish: ["7E", "6E", "5E", "4E", "3E"], workup: ["7M", "5M"], - zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L41", "4T", "4L41"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L32", "6T", "6L32", "5T", "5L41", "4T", "4L41"], }}, pineco: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L20", "6L20", "5L20", "4L17", "3L29"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bide: ["7L20", "7V", "6L20", "5L20", "4L17", "3L29"], bodyslam: ["3T"], - bugbite: ["7L9", "6T", "6L9", "5T", "5L9", "4T", "4L9"], + bugbite: ["7T", "7L9", "6T", "6L9", "5T", "5L9", "4T", "4L9"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["7E", "6E", "5E", "4E", "3T", "3E", "3S1"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L45", "7E", "6L45", "6E", "5L45", "5E", "4L42", "4E", "3T", "3L50"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + doubleedge: ["7L45", "7E", "7V", "6L45", "6E", "5L45", "5E", "4L42", "4E", "3T", "3L50"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], - explosion: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L31", "3T", "3L36"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], + explosion: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L31", "3T", "3L36"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], - gravity: ["6T", "5T", "5D", "4T"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + gravity: ["7T", "6T", "5D", "5T", "4T"], gyroball: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L39"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irondefense: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L34"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "7L39", "6T", "6L39", "5T", "5L39", "4T", "4L34"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], naturalgift: ["7L23", "6L23", "5L23", "4M", "4L20"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L28"], - pinmissile: ["7E", "6E", "5E", "4E", "3E", "3S1"], + pinmissile: ["7E", "7V", "6E", "5E", "4E", "3E", "3S1"], powertrick: ["7E", "6E", "5E", "4E"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], - rapidspin: ["7L17", "6L17", "5L17", "4L12", "3L22"], - reflect: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], + protect: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], + rapidspin: ["7L17", "7V", "6L17", "5L17", "4L12", "3L22"], + reflect: ["7M", "7V", "6M", "5M", "4M", "4E", "3M", "3E"], refresh: ["3S1"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], revenge: ["7E", "6E", "5E", "4E"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], sandtomb: ["7E", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L6", "6L6", "5L6", "5D", "4L6", "3T", "3L8", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spikes: ["7L28", "6L28", "5L28", "4L23", "3L43", "3S1"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], - strength: ["6M", "5M", "4M", "3M"], + selfdestruct: ["7L6", "7V", "6L6", "5D", "5L6", "4L6", "3T", "3L8", "3S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spikes: ["7L28", "7V", "6L28", "5L28", "4L23", "3L43", "3S1"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7E", "6E", "5E", "4E", "3E"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - takedown: ["7L12", "6L12", "5L12", "4L9", "3L15"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - toxicspikes: ["7E", "6E", "5E", "5D", "4E"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + swift: ["7E", "7V", "6E", "5E", "4E", "3E"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + takedown: ["7L12", "7V", "6L12", "5L12", "4L9", "3L15"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7E", "6E", "5D", "5E", "4E"], venoshock: ["7M", "6M", "5M"], }}, forretress: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], autotomize: ["7L1", "6L32", "5L32"], - bide: ["7L20", "6L20", "5L20", "4L17", "3L29"], - block: ["6T", "5T", "4T"], + bide: ["7L20", "7V", "6L20", "5L20", "4L17", "3L29"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], - bugbite: ["7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bugbite: ["7T", "7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L50", "6L56", "5L56", "4L50", "3T", "3L59"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drillrun: ["6T", "5T"], + doubleedge: ["7L50", "7V", "6L56", "5L56", "4L50", "3T", "3L59"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["7T", "6T", "5T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "7L36", "6M", "6L42", "5M", "5L42", "4M", "4L33", "3T", "3L39"], + endure: ["7V", "4M", "3T"], + explosion: ["7M", "7L36", "7V", "6M", "6L42", "5M", "5L42", "4M", "4L33", "3T", "3L39"], facade: ["7M", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], gyroball: ["7M", "7L46", "6M", "6L50", "5M", "5L50", "4M", "4L45"], - headbutt: ["4T"], + headbutt: ["7V", "4T"], heavyslam: ["7L64", "7L1", "6L1", "5L70"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irondefense: ["7L42", "6T", "6L46", "5T", "5L46", "4T", "4L38"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "7L42", "6T", "6L46", "5T", "5L46", "4T", "4L38"], + laserfocus: ["7T"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magnetrise: ["7L56", "7L1", "6T", "6L1", "5T", "5L60", "4T", "4L57"], + magnetrise: ["7T", "7L56", "7L1", "6T", "6L1", "5T", "5L60", "4T", "4L57"], mimic: ["3T"], mirrorshot: ["7L1", "6L31", "5L31", "4L31"], naturalgift: ["7L23", "6L23", "5L23", "4M", "4L20"], - painsplit: ["6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], payback: ["7M", "7L32", "6M", "6L36", "5M", "5L36", "4M", "4L28"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - rapidspin: ["7L17", "6L17", "5L17", "4L12", "3L22"], + protect: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + rapidspin: ["7L17", "7V", "6L17", "5L17", "4L12", "3L22"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L6", "7L1", "6L1", "5L1", "4L1", "3T", "3L1"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spikes: ["7L28", "6L28", "5L28", "4L23", "3L49"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M", "3M"], + selfdestruct: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spikes: ["7L28", "7V", "6L28", "5L28", "4L23", "3L49"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], stringshot: ["4T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L12", "6L12", "5L12", "4L1", "3L15"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L12", "7V", "6L12", "5L12", "4L1", "3L15"], + telekinesis: ["7T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], toxicspikes: ["7L1", "6L1", "5L1", "4L1"], venoshock: ["7M", "6M", "5M"], voltswitch: ["7M", "6M", "5M"], @@ -22685,202 +21087,207 @@ exports.BattleLearnsets = { }}, dunsparce: {learnset: { agility: ["7E", "6E", "5E", "4E"], - airslash: ["7L41"], - ancientpower: ["7L16", "7E", "6L19", "6E", "5L48", "5E", "4T", "4L41", "4E", "3E"], - aquatail: ["6T", "5T", "4T"], + airslash: ["7L43", "7L41"], + ancientpower: ["7L18", "7L16", "7E", "7V", "6L19", "6E", "5L48", "5E", "4T", "4L41", "4E", "3E"], + aquatail: ["7T", "6T", "5T", "4T"], astonish: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7E", "6E", "5E", "4E", "3E"], - bind: ["6T", "5T"], - bite: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bide: ["7E", "7V", "6E", "5E", "4E", "3E"], + bind: ["7T", "6T", "5T"], + bite: ["7E", "7V", "6E", "5E", "4E", "3E"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L18", "3T"], + bodyslam: ["7L21", "7L18", "3T"], bulldoze: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], - coil: ["7L28", "6L37", "5L43"], + coil: ["7L31", "7L28", "6L37", "5L43"], confide: ["7M", "6M"], counter: ["3T"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defensecurl: ["7L1", "6L1", "5L4", "5D", "4L5", "3T", "3L4"], - dig: ["7L31", "6M", "6L31", "5M", "5L53", "4M", "4L45", "3M"], - doubleedge: ["7L36", "6L34", "5L34", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonrush: ["7L43"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - drillrun: ["7L21", "6T", "6L43", "5T", "5L43"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + defensecurl: ["7L1", "7V", "6L1", "5D", "5L4", "4L5", "3T", "3L4"], + dig: ["7L33", "7L31", "7V", "6M", "6L31", "5M", "5L53", "4M", "4L45", "3M"], + doubleedge: ["7L38", "7L36", "6L34", "5L34", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonrush: ["7L46", "7L43"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + drillrun: ["7T", "7L23", "7L21", "6T", "6L43", "5T", "5L43"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["7L38", "6T", "6L46", "5T", "5L58", "4T", "4L49", "3L41"], - endure: ["7L46", "6L40", "5L40", "4M", "3T"], + endeavor: ["7T", "7L41", "7L38", "6T", "6L46", "5T", "5L58", "4T", "4L49", "3L41"], + endure: ["7L48", "7L46", "7V", "6L40", "5L40", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], fireblast: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L48", "6L49", "5L63", "4L53", "3L44"], + flail: ["7L51", "7L48", "6L49", "5L63", "4L53", "3L44"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - glare: ["7L33", "6L28", "5L12", "4L13", "3L14"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + glare: ["7L36", "7L33", "7V", "6L28", "5L12", "4L13", "3L14"], gyroball: ["7M", "6M", "5M", "4M"], - headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], + headbutt: ["7E", "7V", "6E", "5E", "4T", "4E", "3E"], hex: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - magiccoat: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], + magiccoat: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7L13", "7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], + nightmare: ["7V", "3T"], + painsplit: ["7T", "6T", "5T", "4T"], poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7L8", "6L10", "5L24", "4L25", "3L24"], - rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + pursuit: ["7L8", "7V", "6L10", "5L24", "4L25", "3L24"], + rage: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L3", "6L4", "5L16", "4T", "4L17", "3T", "3L21"], - roost: ["7M", "7L23", "6M", "6L25", "5T", "5L33", "4M", "4L33"], + rollout: ["7L3", "7V", "6L4", "5L16", "4T", "4L17", "3T", "3L21"], + roost: ["7M", "7L26", "7L23", "6M", "6L25", "5T", "5L33", "4M", "4L33"], round: ["7M", "6M", "5M"], - screech: ["7L11", "6L13", "5L28", "4L29", "3L31"], + screech: ["7L11", "7V", "6L13", "5L28", "4L29", "3L31"], secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["7L6", "6T", "6L7", "5T", "5L20", "4T", "4L21", "3L21"], - stealthrock: ["6T", "5T", "5D", "4M"], - strength: ["6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spite: ["7T", "7L6", "7V", "6T", "6L7", "5T", "5L20", "4T", "4L21", "3L21"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - takedown: ["7L26", "6L22", "5L38", "4L37", "3L34"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7L28", "7L26", "7V", "6L22", "5L38", "4L37", "3L34"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], trumpcard: ["7E", "6E", "5E", "4E"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], wildcharge: ["7M", "6M", "5M"], - yawn: ["7L13", "6L16", "5L8", "4L9", "3L11"], - zenheadbutt: ["6T", "5T", "4T"], + yawn: ["7L16", "7L13", "6L16", "5L8", "4L9", "3L11"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, gligar: {learnset: { acrobatics: ["7M", "7L22", "6M", "6L22", "5M", "5L27"], aerialace: ["7M", "6M", "5M", "4M", "3M"], agility: ["7E", "6E", "5E", "4E"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], batonpass: ["7E", "6E", "5E", "4E"], brickbreak: ["7M", "6M", "5M", "4M"], - bugbite: ["6T", "5T"], + bugbite: ["7T", "6T", "5T"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], crosspoison: ["7E", "6E", "5E", "4E"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], + defog: ["7T", "4M"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["7E", "6E", "5E", "4E", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], dreameater: ["3T"], - earthpower: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], falseswipe: ["7M", "6M", "5M", "4M"], - feint: ["7E", "6E", "5E", "5D", "4E"], - feintattack: ["7L19", "6L19", "5L23", "4L23", "3L28"], + feint: ["7E", "6E", "5D", "5E", "4E"], + feintattack: ["7L19", "7V", "6L19", "5L23", "4L23", "3L28"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L16", "6L16", "5L20", "4T", "4L20", "3T"], - guillotine: ["7L55", "6L55", "5L49", "4L45", "3L52"], - harden: ["7L7", "6L7", "5L9", "4L9", "3L13"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7L16", "7V", "6L16", "5L20", "4T", "4L20", "3T"], + guillotine: ["7L55", "7V", "6L55", "5L49", "4L45", "3L52"], + harden: ["7L7", "7V", "6L7", "5L9", "4L9", "3L13"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["7L10", "6T", "6L10", "5T", "5L12", "4T", "4L12"], - metalclaw: ["7E", "6E", "5E", "4E", "3E"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "7L10", "6T", "6L10", "5T", "5L12", "4T", "4L12"], + metalclaw: ["7E", "7V", "6E", "5E", "4E", "3E"], mimic: ["3T"], naturalgift: ["4M"], nightslash: ["7E", "6E", "5E", "4E"], payback: ["7M", "6M", "5M", "4M"], poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], poisontail: ["7E", "6E", "5E"], powertrick: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L13", "6L13", "5L16", "4L16", "3L20"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L16", "4L16", "3L20"], raindance: ["7M", "6M", "5M", "4M", "3M"], - razorwind: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["7E", "6E", "5E"], rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L4", "6L4", "5L5", "5D", "4L5", "3L6", "3S0"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L4", "7V", "6L4", "5D", "5L5", "4L5", "3L6", "3S0"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], sandtomb: ["7E", "6E", "5E", "4E", "3E"], - screech: ["7L35", "6L35", "5L31", "4L27", "3L44"], + screech: ["7L35", "7V", "6L35", "5L31", "4L27", "3L44"], secretpower: ["6M", "4M", "3M"], skyuppercut: ["7L45", "6L45", "5L45"], - slash: ["7L27", "6L27", "5L34", "4L31", "3L36"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], + slash: ["7L27", "7V", "6L27", "5L34", "4L31", "3L36"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], steelwing: ["7M", "6M", "4M", "3M"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L38", "4M", "4L34", "3T"], - tailwind: ["6T", "5T", "5D", "4T"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], uturn: ["7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], venoshock: ["7M", "6M", "5M"], - wingattack: ["7E", "6E", "5E", "4E", "3E"], + wingattack: ["7E", "7V", "6E", "5E", "4E", "3E"], xscissor: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], }}, gliscor: {learnset: { acrobatics: ["7M", "7L22", "6M", "6L22", "5M", "5L27"], aerialace: ["7M", "6M", "5M", "4M"], - aquatail: ["6T", "5T", "4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], batonpass: ["4C"], brickbreak: ["7M", "6M", "5M", "4M"], brutalswing: ["7M"], - bugbite: ["6T", "5T"], + bugbite: ["7T", "6T", "5T"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], cut: ["6M", "5M", "4M"], darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], + defog: ["7T", "4M"], dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], @@ -22898,8 +21305,8 @@ exports.BattleLearnsets = { honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M"], icefang: ["7L1", "6L1", "5L1", "4L1"], - irontail: ["6T", "5T", "4M"], - knockoff: ["7L10", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "7L10", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], mudslap: ["4T"], naturalgift: ["4M"], nightslash: ["7L27", "6L27", "5L34", "4L31"], @@ -22920,37556 +21327,43609 @@ exports.BattleLearnsets = { sandstorm: ["7M", "6M", "5M", "4M"], screech: ["7L35", "6L35", "5L31", "4L27"], secretpower: ["6M", "4M"], - skyattack: ["6T", "5T", "4T"], + skyattack: ["7T", "6T", "5T", "4T"], skyuppercut: ["7L45", "6L45", "5L45"], sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - steelwing: ["7M", "6M", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + steelwing: ["7M", "6M", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L38", "4M", "4L34"], + tailwind: ["7T", "6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], + }}, + snubbull: {learnset: { + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L7", "7V", "6L7", "5L7", "4L7", "3L13"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L8", "3S0"], + closecombat: ["7E", "6E", "5D", "5E", "4E"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["7T", "6T", "5T"], + crunch: ["7L49", "7E", "7V", "6L49", "6E", "5L49", "5E", "4L49", "4E", "3L53", "3E"], + curse: ["7V"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7V", "3T"], + detect: ["7V"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5D", "5E", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E"], + feintattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7L19", "7V", "6L19", "5L19", "4T", "4L19"], + healbell: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icefang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lastresort: ["7T", "6T", "5T", "4T"], + leer: ["7V"], + lick: ["7L13", "7V", "6L13", "5L13", "4L13", "3L19"], + lowkick: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + mimic: ["7E", "6E", "5E", "3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], + playrough: ["7L37", "6L37"], + poweruppunch: ["6M"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L31", "7V", "6L31", "5L31", "4L31", "3L34"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7V", "6M", "5M", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L25", "7V", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L26"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L4", "3S0"], + takedown: ["7V", "5L37", "4L37", "3L43"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zapcannon: ["7V"], + }}, + granbull: {learnset: { + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L7", "7V", "6L7", "5L7", "4L7", "3L13"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L1", "7V", "6L1", "5L1", "4L1", "3L8"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["7T", "6T", "5T"], + crunch: ["7L59", "6L59", "5L59", "4L59", "3L61"], + curse: ["7V"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7V", "3T"], + detect: ["7V"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7L19", "7V", "6L19", "5L19", "4T", "4L19"], + healbell: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], + lick: ["7L13", "7V", "6L13", "5L13", "4L13", "3L19"], + lowkick: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + outrage: ["7T", "7L67", "7L1", "6T", "6L1", "5T", "5L67"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "7L51", "6M", "6L51", "5M", "5L51", "4M", "4L51"], + playrough: ["7L43", "6L43"], + poweruppunch: ["6M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rage: ["7L35", "7V", "6L35", "5L35", "4L35", "3L38"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L27", "7V", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L28"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L4"], + takedown: ["7V", "5L43", "4L43", "3L49"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zapcannon: ["7V"], + }}, + qwilfish: {learnset: { + acidspray: ["7E", "6E", "5E"], + aquajet: ["7E", "6E", "5D", "5E", "4E"], + aquatail: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L33"], + bubble: ["7L13", "6L13"], + bubblebeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + destinybond: ["7L53", "7L1", "6L1", "5L53", "4L53", "3L45"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fellstinger: ["7L60", "7L1", "6L1"], + flail: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L9", "7V", "6L9", "5L9", "4L9", "3L9", "3S0"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L57", "7L1", "7V", "6L1", "5L57", "4L57", "3L37"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + liquidation: ["7T"], + mimic: ["3T"], + minimize: ["7L9", "7V", "6L9", "5L9", "4L9", "3L9", "3S0"], + naturalgift: ["4M"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L37", "7V", "6L37", "5L37", "4L37", "3L21"], + poisonjab: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L49", "4E"], + poisonsting: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + revenge: ["7L29", "6L29", "5L29", "4L29", "3L25"], + rollout: ["7L17", "7V", "6L17", "5L17", "4T", "4L17", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "5D", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spikes: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + spitup: ["7L25", "6L25", "5L25", "4L25"], + stockpile: ["7L25", "6L25", "5L25", "4L25"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + takedown: ["7L41", "7V", "6L41", "5L41", "4L41", "3L33"], + taunt: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L21", "6L21", "5L21", "4L21"], + venoshock: ["7M", "6M", "5M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L1", "5L13", "4L13", "3L13"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7V", "4M"], + }}, + shuckle: {learnset: { + acid: ["7E", "6E", "5E"], + acupressure: ["7E", "6E", "5E", "4E"], + afteryou: ["7T", "6T", "5T"], + ancientpower: ["4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bide: ["7L1", "7V", "6L1", "5L1", "4L1", "3L28"], + bind: ["7T", "6T", "5T"], + bodyslam: ["3T"], + bugbite: ["7T", "7L42", "6T", "6L42", "5T", "5L49", "4T", "4L40"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + encore: ["7L5", "7V", "6L5", "5D", "5L7", "4L9", "3L14", "3S1"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + finalgambit: ["7E", "6E", "5E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L27", "6T", "6L27", "5T", "5L31", "4T", "4L35"], + guardsplit: ["7L45", "6L45", "5L55"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + mimic: ["3T"], + mudslap: ["7E", "7V", "6E", "5E", "4T", "4E", "3T"], + naturalgift: ["4M"], + powersplit: ["7L45", "6L45", "5L55"], + powertrick: ["7L31", "6L31", "5L43", "4L48"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L20", "7V", "6M", "6L20", "5M", "5L25", "4M", "4L27", "3M", "3L37"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockblast: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "3T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rockthrow: ["7L23", "6L23", "5L23"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L1", "7V", "6L1", "5L37", "4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L16", "7V", "6M", "6L16", "5M", "5L19", "4M", "4L14", "3M", "3L23"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + sandtomb: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + shellsmash: ["7L34", "6L34", "5D", "5L34"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M", "3S1"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stickyweb: ["7L53", "7L1", "6L1"], + stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["7L12", "6M", "6L12", "5M", "5L1"], + substitute: ["7M", "6M", "5M", "4M", "3T", "3S1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "7V", "6E", "5E", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M", "3S1"], + venoshock: ["7M", "6M", "5M"], + withdraw: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + wrap: ["7L9", "7V", "6L9", "5L13", "4L22", "3L9", "3S0"], + }}, + heracross: {learnset: { + aerialace: ["7M", "7L10", "6M", "6L10", "5M", "5L13", "4M", "4L13"], + armthrust: ["7L1", "6L1"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bide: ["7E", "7V", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "7L28", "6M", "6L25", "5M", "5L19", "4M", "4L19", "3M", "3L23"], + brutalswing: ["7M"], + bugbite: ["7T", "6T", "5T", "4T"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7L1", "6L1", "6S1", "6S0"], + captivate: ["4M"], + chipaway: ["7L16", "6L16", "5L16"], + closecombat: ["7L43", "6L34", "6S0", "5L37", "4L37"], + confide: ["7M", "6M"], + counter: ["7L19", "7V", "6L19", "5L25", "4L25", "3T", "3L30"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "7V", "6M", "6S1", "5M", "4M", "3M"], + endure: ["7L1", "7V", "6L1", "5L1", "4M", "4L1", "3T", "3L11"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4E", "3E"], + feint: ["7L7", "6L7", "5L49", "4L49"], + flail: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "7E", "6T", "6E", "5D", "5E", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L25", "7V", "6L7", "5L7", "4L7", "3L17"], + furycutter: ["7V", "4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + harden: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7V", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L6"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], + megahorn: ["7L37", "7E", "7V", "6L37", "6E", "6S0", "5L55", "5E", "4L55", "3L53"], + mimic: ["3T"], + naturalgift: ["4M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + pinmissile: ["7L31", "6L31", "6S1", "6S0"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E", "4E"], + reversal: ["7L46", "7V", "6L43", "5L43", "4L43", "3L45"], + rockblast: ["7E", "6E", "6S1"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "6E", "5E", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L34", "7V", "6L28", "5L31", "4L31", "3L37"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + venoshock: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + sneasel: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L20", "7V", "6L20", "5L24", "4L24", "3L36"], + assist: ["7E", "6E", "5E", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E", "4M"], + beatup: ["7L28", "7V", "6L28", "5L42", "4L38", "3L57"], + bite: ["7E", "7V", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["7V", "3T"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doublehit: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7V", "3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + falseswipe: ["7M", "6M", "5M", "4M"], + feint: ["7E", "6E", "5E"], + feintattack: ["7L10", "7V", "6L10", "5L14", "4L14", "3L22"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + furyswipes: ["7L16", "7V", "6L16", "5L21", "4L21", "3L29"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + honeclaws: ["7L25", "6M", "6L25", "5M", "5L35"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7E", "7V", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3T"], + iceshard: ["7L47", "7E", "6L47", "6E", "5L51", "5E", "4L49", "4E"], + iciclecrash: ["7E", "6E"], + icywind: ["7T", "7L14", "7V", "6T", "6L14", "5T", "5L28", "4T", "4L28", "3T", "3L43"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["7T", "6T", "5D", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + metalclaw: ["7L22", "7V", "6L22", "5L49", "4L42", "3L64"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + nightmare: ["7V", "3T"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + punishment: ["7L44", "7E", "6L44", "6E", "5L44", "5E", "4E"], + pursuit: ["7E", "6E", "5E", "4E"], + quickattack: ["7L8", "7V", "6L8", "5L8", "4L8", "3L8", "3S0"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7V", "6M", "5M", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + screech: ["7L32", "7V", "6L32", "5L10", "4L10", "3L15"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L35", "7V", "6L35", "5L38", "4L35", "3L50"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7L40", "6T", "6L40", "5T", "5L40", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "7L1", "6M", "6L1", "5D", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T", "7E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + weavile: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + assurance: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "6S1", "5M", "4M", "4S0"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "7L47", "6M", "6L47", "5T", "5L51", "4M", "4L49"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["4S0"], + falseswipe: ["7M", "6M", "5M", "4M"], + feintattack: ["7L10", "6L10", "5L14", "4L14"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L42", "4M", "4L38"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L16", "6L16", "5L21", "4L21"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L25", "6M", "6L25", "5M", "5L35"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "6T", "6S1", "5T", "4T"], + iceshard: ["4S0"], + icywind: ["7T", "7L14", "6T", "6L14", "5T", "5L28", "4T", "4L28"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + metalclaw: ["7L22", "6L22", "5L49", "4L42"], + mudslap: ["4T"], + nastyplot: ["7L20", "6L20", "5L24", "4L24"], + naturalgift: ["4M"], + nightslash: ["7L35", "6L35", "6S1", "5L35", "4L35", "4S0"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + punishment: ["7L44", "6L44"], + quickattack: ["7L8", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7L1", "6L1", "5L1", "4L1"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L32", "6L32", "5L10", "4L10"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7L40", "6T", "6L40", "5T", "5L40", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M"], - strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L38", "4M", "4L34"], - tailwind: ["6T", "5T", "4T"], - taunt: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], thief: ["7M", "6M", "5M", "4M"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], + throatchop: ["7T"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], - venoshock: ["7M", "6M", "5M"], - xscissor: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "6S1", "5M", "4M"], }}, - snubbull: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L7", "6L7", "5L7", "4L7", "3L13"], + teddiursa: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L1", "6L1"], + bellydrum: ["7E", "6E", "5E", "4E"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - charm: ["7L1", "6L1", "5L1", "5D", "4L1", "3L8", "3S0"], - closecombat: ["7E", "6E", "5E", "5D", "4E"], + charm: ["7L36", "6L36", "5L36", "4L36"], + chipaway: ["7E", "6E", "5E"], + closecombat: ["7E", "6E", "5E", "4E"], confide: ["7M", "6M"], - counter: ["3T"], - covet: ["6T", "5T"], - crunch: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E", "3L53", "3E"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7E", "6E", "5E", "5D", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + covet: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1"], + crosschop: ["7E", "6E", "5E", "4E"], + crunch: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6E"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["7L19", "6L19", "5L19", "4T", "4L19"], - healbell: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icefang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], - icepunch: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - lastresort: ["6T", "5T", "4T"], - lick: ["7L13", "6L13", "5L13", "4L13", "3L19"], - lowkick: ["6T", "5T", "4T"], + faketears: ["7L1", "7E", "6L1", "6E", "5D", "5L1", "5E", "4L1", "4E", "3L19", "3E"], + feintattack: ["7L15", "7V", "6L15", "5L15", "4L15", "3L25"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + fling: ["7M", "7L57", "7L1", "6M", "6L1", "5M", "5L57", "4M", "4L57"], + focusenergy: ["7V"], + focuspunch: ["7T", "6T", "5D", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + furyswipes: ["7L8", "7V", "6L8", "5L8", "4L8", "3L13"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + lastresort: ["7T", "6T", "5T", "4T"], + leer: ["7V", "5L1", "4L1", "3L1", "3S0"], + lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L7", "3S1", "3S0"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["7E", "6E", "5E", "4E", "3T", "3E"], - mimic: ["7E", "6E", "5E", "3T"], - mudslap: ["4T", "3T"], + metalclaw: ["7E", "7V", "6E", "5E", "4E", "3E", "3S1"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - payback: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], - playrough: ["7L37", "6L37"], + nightslash: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + playnice: ["7L25", "6L25"], + playrough: ["7E", "6E"], poweruppunch: ["6M"], - present: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L31", "6L31", "5L31", "4L31", "3L34"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S1"], + rest: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L31"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L26"], - rocksmash: ["6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M", "3S1"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - scaryface: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snarl: ["7M", "6M", "5M"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + seismictoss: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L29", "7V", "6L29", "5L29", "4L29", "3L37"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7T", "7L43", "7V", "6T", "6L43", "5T", "5L43", "4T", "4L43", "3T", "3L43"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L4", "3S0"], - takedown: ["5L37", "4L37", "3L43"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L22", "6L22", "5L22", "4L22"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7E", "7V", "6E", "5E", "4E", "3E"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7L50", "7V", "6L50", "5L50", "4L50", "3L49"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - wildcharge: ["7M", "6M", "5M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], workup: ["7M", "5M"], + yawn: ["7E", "6E", "5E", "4E", "3E"], + zapcannon: ["7V"], }}, - granbull: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L7", "6L7", "5L7", "4L7", "3L13"], + ursaring: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - charm: ["7L1", "6L1", "5L1", "4L1", "3L8"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["6T", "5T"], - crunch: ["7L59", "6L59", "5L59", "4L59", "3L61"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + covet: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7L1", "6L1", "5L1", "4L1", "3L19"], + feintattack: ["7L15", "7V", "6L15", "5L15", "4L15", "3L25"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + furyswipes: ["7L8", "7V", "6L8", "5L8", "4L8", "3L1"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["7L19", "6L19", "5L19", "4T", "4L19"], - healbell: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icefang: ["7L1", "6L1", "5L1", "4L1"], - icepunch: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - lick: ["7L13", "6L13", "5L13", "4L13", "3L19"], - lowkick: ["6T", "5T", "4T"], + gunkshot: ["7T", "6T", "5T", "4T"], + hammerarm: ["7L67", "7L1", "6L1", "5L67", "4L67"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - outrage: ["7L67", "7L1", "6T", "6L1", "5T", "5L67"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - payback: ["7M", "7L51", "6M", "6L51", "5M", "5L51", "4M", "4L51"], - playrough: ["7L43", "6L43"], + payback: ["7M", "6M", "5M", "4M"], + playnice: ["7L25", "6L25"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L35", "6L35", "5L35", "4L35", "3L38"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L31"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L28"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - scaryface: ["7L1", "6L1", "5L1", "4L1", "3L1"], + scaryface: ["7L38", "6L38", "5L38", "4L38"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L29", "7V", "6L29", "5L29", "4L29", "3L37"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "7L49", "7V", "6T", "6L49", "5T", "5L49", "4T", "4L49", "3T", "3L43"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L4"], - takedown: ["5L43", "4L43", "3L49"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7L22", "6L22", "5L22", "4L22"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7L58", "7V", "6L58", "5L58", "4L58", "3L49"], + throatchop: ["7T"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - wildcharge: ["7M", "6M", "5M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], workup: ["7M", "5M"], + zapcannon: ["7V"], }}, - qwilfish: {learnset: { - acidspray: ["7E", "6E", "5E"], - aquajet: ["7E", "6E", "5E", "5D", "4E"], - aquatail: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - astonish: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L33"], - bubble: ["7L13", "6L13"], - bubblebeam: ["7E", "6E", "5E", "4E", "3E"], + slugma: {learnset: { + acidarmor: ["7E", "7V", "6E", "5E", "4E", "3E"], + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L36", "7V", "6L32", "5L32", "4L31", "3L29"], + ancientpower: ["7L22", "6L22", "5L28", "4T", "4L26"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L41", "7V", "6L41", "5L46", "4L46", "3T", "3L50"], captivate: ["4M"], + clearsmog: ["7L20", "6L20"], confide: ["7M", "6M"], - defensecurl: ["3T"], - destinybond: ["7L53", "7L1", "6L1", "5L53", "4L53", "3L45"], - dive: ["6M", "5M", "4T", "3M"], + curse: ["7E", "7V", "6E", "5E", "4E"], + defensecurl: ["7V", "3T"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "7L50", "7E", "6T", "6L50", "6E", "5T", "5L55", "5E", "4T", "4L56"], + ember: ["7L6", "7V", "6L5", "5D", "5L5", "4L8", "3L8"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flameburst: ["7L27", "6L23", "5L23"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L48", "7V", "6M", "6L48", "5M", "5L50", "4M", "4L53", "3M", "3L36"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + guardswap: ["7E", "6E"], + harden: ["7L13", "7V", "6L13", "5L14", "4L16", "3L22"], + heatwave: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["7L15", "6M", "6L15", "5M"], + inferno: ["7E", "6E", "5D", "5E"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T", "4T"], + lavaplume: ["7L34", "6L34", "5L37", "4L38"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + memento: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L43", "6L19", "5L19", "4L23"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L41", "4M", "4L41", "3T", "3L43"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rockthrow: ["7L8", "7V", "6L8", "5L10", "4L11", "3L15"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["7E", "7V", "6E", "5E", "4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smog: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + smokescreen: ["7E", "6E", "5E", "4E"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E"], + stockpile: ["7E", "6E", "5E", "4E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + magcargo: {learnset: { + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L36", "7V", "6L32", "5L32", "4L31", "3L29"], + ancientpower: ["7L22", "6L22", "5L28", "4T", "4L26"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L43", "7V", "6L43", "5L52", "4L52", "3T", "3L60"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + clearsmog: ["7L20", "6L20"], + confide: ["7M", "6M"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "7L58", "7L1", "6T", "6L1", "5T", "5L67", "4T", "4L66"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + ember: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["7V", "4M", "3T"], explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fellstinger: ["7L60", "7L1", "6L1"], - flail: ["7E", "6E", "5E", "4E", "3E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flameburst: ["7L27", "6L23", "5L23"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L54", "7V", "6M", "6L54", "5M", "5L59", "4M", "4L61", "3M", "3L36", "3S0"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L13", "7V", "6L13", "5L14", "4L16", "3L22"], + heatwave: ["7T", "6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["7L15", "6M", "6L15", "5M"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T", "4T"], + lavaplume: ["7L34", "6L34", "5L37", "4L40"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L47", "6L19", "5L19", "4L23"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L44", "4M", "4L45", "3T", "3L48"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rockthrow: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7V", "4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shellsmash: ["7L1", "6L38", "5L38"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smog: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + swinub: {learnset: { + amnesia: ["7L48", "7V", "6L48", "5L49", "4L49", "3L55"], + ancientpower: ["7E", "7V", "6E", "5D", "5E", "4T", "4E", "3E", "3S0"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E"], + bite: ["7E", "7V", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L44", "4M", "4L44", "3M", "3L46"], + bodyslam: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["3S0"], + confide: ["7M", "6M"], + curse: ["7E", "7V", "6E", "5E", "4E"], + defensecurl: ["7V", "3T"], + detect: ["7V"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7L14", "7V", "6L14", "5L16", "4M", "4L16", "3T", "3L19"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "4E"], + flail: ["7L40", "6L40", "5L40"], + freezedry: ["7E", "6E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L9", "6L9", "5L9", "4L9", "3L9", "3S0"], - haze: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L57", "7L1", "6L1", "5L57", "4L57", "3L37"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + iceshard: ["7L24", "6L24", "5L28", "4L28"], + iciclecrash: ["7E", "6E", "5E"], + iciclespear: ["7E", "6E", "5D", "5E", "4E", "3E"], + icywind: ["7T", "7L21", "7V", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], - minimize: ["7L9", "6L9", "5L9", "4L9", "3L9", "3S0"], + mist: ["7L35", "7V", "6L35", "5L40", "4L40", "3L37", "3S0"], + mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mudshot: ["7E", "6E", "5E", "4E", "3E", "3S0"], + mudslap: ["7L11", "7V", "6L11", "5L13", "4T", "4L13", "3T"], + mudsport: ["7L5", "6L5", "5L4", "4L4"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - pinmissile: ["7L37", "6L37", "5L37", "4L37", "3L21"], - poisonjab: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L49", "4E"], - poisonsting: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - revenge: ["7L29", "6L29", "5L29", "4L29", "3L25"], - rollout: ["7L17", "6L17", "5L17", "4T", "4L17", "3T"], + odorsleuth: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + powdersnow: ["7L8", "7V", "6L8", "5L8", "4L8", "3L10"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "5D", "4M", "3M"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spikes: ["7L1", "6L1", "5L1", "4L1", "3L1"], - spitup: ["7L25", "6L25", "5L25", "4L25"], - stockpile: ["7L25", "6L25", "5L25", "4L25"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - takedown: ["7L41", "6L41", "5L41", "4L41", "3L33"], - taunt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - toxicspikes: ["7L21", "6L21", "5L21", "4L21"], - venoshock: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L13", "4L13", "3L13"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - whirlpool: ["4M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "7E", "7V", "6L28", "6E", "5L32", "5E", "4L32", "4E", "3L28", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], }}, - shuckle: {learnset: { - acid: ["7E", "6E", "5E"], - acupressure: ["7E", "6E", "5E", "4E"], - afteryou: ["6T", "5T"], - ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L1", "6L1", "5L1", "4L1", "3L28"], - bind: ["6T", "5T"], + piloswine: {learnset: { + amnesia: ["7L58", "7V", "6L58", "5L65", "4L65", "3L70"], + ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "7L52", "7V", "6M", "6L52", "5M", "5L56", "4M", "4L56", "3M", "3L56"], bodyslam: ["3T"], - bugbite: ["7L42", "6T", "6L42", "5T", "5L49", "4T", "4L40"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - defensecurl: ["3T"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + detect: ["7V"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - encore: ["7L5", "6L5", "5L7", "5D", "4L9", "3L14", "3S1"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L40", "4M", "4L40", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7L14", "7V", "6L14", "5L16", "4M", "4L16", "3T", "3L1"], facade: ["7M", "6M", "5M", "4M", "3M"], - finalgambit: ["7E", "6E", "5E"], - flash: ["6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L27", "6T", "6L27", "5T", "5L31", "4T", "4L35"], - guardsplit: ["7L45", "6L45", "5L55"], - gyroball: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L1", "7V", "6L33", "5L33", "4L33", "3L33"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7V", "3L1"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L24", "6L24", "5L28", "4L28"], + icywind: ["7T", "7L21", "7V", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mist: ["7L37", "7V", "6L37", "5L48", "4L48", "3L42"], + mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mudslap: ["7L11", "7V", "6L11", "5L13", "4T", "4L13", "3T"], + mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], + peck: ["7L1", "6L1", "5L1", "4L1"], + powdersnow: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7L28", "7V", "6L28", "5L32", "4L32", "3L28"], + thrash: ["7L41", "6L41", "5L41"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + }}, + mamoswine: {learnset: { + ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "7L52", "6M", "6L52", "5M", "5L56", "4M", "4L56"], + block: ["7T", "6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M"], + doublehit: ["7L33", "6L33", "5L33", "5S0", "4L33"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L46", "6M", "6L46", "6S1", "5M", "5L40", "4M", "4L40"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7L14", "6L14", "5L16", "4M", "4L16"], + facade: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L1"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "7L21", "6M", "6L21", "5M", "5L25", "5S0", "4M", "4L25"], headbutt: ["4T"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - infestation: ["7M", "6M"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L24", "6L24", "5L28", "5S0", "4L28"], + iciclecrash: ["6S1"], + iciclespear: ["6S1"], + icywind: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + mist: ["7L37", "6L37", "5L48", "4L48"], + mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mudslap: ["7L11", "6L11", "5L13", "4T", "4L13"], + mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1"], + peck: ["7L1", "6L1", "5L1", "4L1"], + powdersnow: ["7L8", "7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "6S1", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L58", "7L1", "6L1", "5L65", "4L65"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + takedown: ["7L28", "6L28", "5L32", "5S0", "4L32"], + thrash: ["7L41", "6L41", "5L41"], + toxic: ["7M", "6M", "5M", "4M"], + }}, + corsola: {learnset: { + amnesia: ["7E", "7V", "6E", "5E", "4E", "3E"], + ancientpower: ["7L17", "7V", "6L17", "5L32", "4T", "4L32", "3L45"], + aquaring: ["7L38", "7E", "6L38", "6E", "5L37", "5E", "4L37", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brine: ["7L27", "6L27", "4M"], + bubble: ["7L4", "7V", "6L4", "5D", "5L8", "4L8", "3L12"], + bubblebeam: ["7L10", "7V", "6L10", "5L25", "4L25", "3L23"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + camouflage: ["7E", "6E"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5D", "5E", "4E", "3E"], + curse: ["7E", "7V", "6E", "5E", "4E"], + defensecurl: ["7V", "3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "7L47", "6T", "6L47", "5T", "5L53", "4T", "4L53"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7L35", "7V", "6L35", "5L35", "4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L50", "6L50", "5L52"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "6L1", "5L4", "4L4", "3L6"], + headbutt: ["7V", "4T"], + headsmash: ["7E", "6E", "5E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + iciclespear: ["7E", "6E", "5E", "4E", "3E"], + icywind: ["7T", "6T", "5T", "4T"], + ingrain: ["7E", "6E", "5E", "4E", "3E"], + irondefense: ["7T", "7L29", "6T", "6L29", "5T", "5L29"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + liquidation: ["7T", "7E"], + luckychant: ["7L23", "6L23", "5L28", "4L28"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + mirrorcoat: ["7L45", "7V", "6L45", "5L48", "4L48", "3L39"], + mist: ["7E", "7V", "6E", "5E", "4E", "3E"], + mudslap: ["7V", "4T", "3T"], + mudsport: ["3S0"], naturalgift: ["4M"], - powersplit: ["7L45", "6L45", "5L55"], - powertrick: ["7L31", "6L31", "5L43", "4L48"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L20", "6M", "6L20", "5M", "5L25", "4M", "4L27", "3M", "3L37"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7E", "6E", "5E"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], + powergem: ["7L41", "7S1", "6L41", "5L44", "4L44"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L8", "7V", "6L8", "5L13", "4L13", "3L17"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L13", "6L13", "5L16", "4L16", "3L17"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockblast: ["7L31", "6L31", "5L20", "4L20", "3L34"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L23", "6L23", "5L23"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L1", "6L1", "5L37", "4T", "3T"], + rollout: ["7V", "4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L16", "6M", "6L16", "5M", "5L19", "4M", "4L14", "3M", "3L23"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - sandtomb: ["7E", "6E", "5E", "4E"], + safeguard: ["7M", "7V", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - shellsmash: ["7L34", "6L34", "5L34", "5D"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S1"], - sludgewave: ["7M", "6M", "5M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spikecannon: ["7L20", "7V", "6L20", "5L40", "4L40", "3L28"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "7S1", "6L1", "5L1", "4L1", "3L1", "3S0"], + throatchop: ["7T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7V", "4M"], + }}, + remoraid: {learnset: { + acidspray: ["7E", "6E", "5E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L14", "7E", "7V", "6L14", "6E", "5L14", "5E", "4L14", "4E", "3L22", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["5D", "4M"], + bubblebeam: ["7L18", "7V", "6L18", "5L19", "4L19", "3L22"], + bulletseed: ["7L38", "6L38", "5L27", "4M", "4L27"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L22", "7V", "6L22", "5L23", "4L23", "3L33"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gunkshot: ["7T", "6T", "5T", "4T"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L42", "6L42", "5L42"], + hyperbeam: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L45", "4M", "4L45", "3M", "3L55"], + icebeam: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L40", "4M", "4L40", "3M", "3L44"], + icywind: ["7T", "6T", "5T", "4T"], + incinerate: ["6M", "5M"], + lockon: ["7L6", "7V", "6L6", "5D", "5L6", "4L6", "3L11"], + mimic: ["3T"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + octazooka: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L10", "7V", "6L10", "5L10", "4L10", "3L22"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockblast: ["7E", "6E", "5D", "5E", "4E", "3E"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "7V", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + signalbeam: ["7T", "7L30", "6T", "6L30", "5T", "5L36", "4T", "4L36"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stickyweb: ["7L53", "7L1", "6L1"], - stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + soak: ["7L50", "6L50", "5L49"], stringshot: ["4T"], - strugglebug: ["7L12", "6M", "6L12", "5M", "5L1"], - substitute: ["7M", "6M", "5M", "4M", "3T", "3S1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7E", "6E", "5E", "4E", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M", "3S1"], - venoshock: ["7M", "6M", "5M"], - withdraw: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - wrap: ["7L9", "6L9", "5L13", "4L22", "3L9", "3S0"], + supersonic: ["7E", "7V", "6E", "5E", "4E", "3E"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7E", "7V", "6E", "5E", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7L26", "7E", "6T", "6L26", "6E", "5L32", "5E", "4M", "4L32", "3M"], + waterspout: ["7E", "6E", "5E", "4E"], + whirlpool: ["7V", "4M"], }}, - heracross: {learnset: { - aerialace: ["7M", "7L10", "6M", "6L10", "5M", "5L13", "4M", "4L13"], - armthrust: ["7L1", "6L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7E", "6E", "5E", "4E", "3E"], - bodyslam: ["3T"], - brickbreak: ["7M", "7L28", "6M", "6L25", "5M", "5L19", "4M", "4L19", "3M", "3L23"], - brutalswing: ["7M"], - bugbite: ["6T", "5T", "4T"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], - bulletseed: ["7L1", "6L1", "6S0", "6S1"], + octillery: {learnset: { + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L14", "7L1", "7V", "6L1", "5L1", "4L1", "3L22"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["4M"], + bubblebeam: ["7L18", "7V", "6L18", "5L19", "4L19", "3L22"], + bulletseed: ["7L46", "6L46", "5L29", "4M", "4L29", "3M"], captivate: ["4M"], - chipaway: ["7L16", "6L16", "5L16"], - closecombat: ["7L43", "6L34", "6S0", "5L37", "4L37"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7L19", "6L19", "5L25", "4L25", "3T", "3L30"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "6S1", "5M", "4M", "3M"], - endure: ["7L1", "6L1", "5L1", "4M", "4L1", "3T", "3L11"], + constrict: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L11"], + curse: ["7V"], + defensecurl: ["7V", "3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4E", "3E"], - feint: ["7L7", "6L7", "5L49", "4L49"], - flail: ["7E", "6E", "5E", "5D", "4E", "3E"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "5D", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L25", "6L7", "5L7", "4L7", "3L17"], - furycutter: ["4T", "3T"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L22", "7V", "6L22", "5L23", "4L23", "3L38"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - harden: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L1", "6L1", "5L1", "5D", "4L1", "3L6"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], - megahorn: ["7L37", "7E", "6L37", "6E", "6S0", "5L55", "5E", "4L55", "3L53"], + gunkshot: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L52", "6L52", "5L52"], + hyperbeam: ["7M", "7L58", "7V", "6M", "6L58", "5M", "5L55", "4M", "4L55", "4S0", "3M", "3L70"], + icebeam: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L48", "4M", "4L48", "4S0", "3M", "3L54"], + icywind: ["7T", "6T", "5T", "4T"], + incinerate: ["6M", "5M"], mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightslash: ["7L1", "6L1", "5L1", "4L1"], - pinmissile: ["7L31", "6L31", "6S0", "6S1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - revenge: ["7E", "6E", "5E", "4E"], - reversal: ["7L46", "6L43", "5L43", "4L43", "3L45"], - rockblast: ["7E", "6E", "6S1"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + octazooka: ["7L1", "7V", "6L25", "5L25", "4L25", "4S0", "3L25"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L10", "7L1", "7V", "6L1", "5L1", "4L1", "3L22"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockblast: ["7L1", "6L1", "5L1", "4L1"], round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7E", "6E", "5E", "3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + seedbomb: ["7T", "6T", "5T", "4T"], + seismictoss: ["3T"], + signalbeam: ["7T", "7L34", "6T", "6L34", "5T", "5L42", "4T", "4L42", "4S0"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - strugglebug: ["6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + soak: ["7L64", "6L64", "5L61"], + stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L34", "6L28", "5L31", "4L31", "3L37"], - thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - vacuumwave: ["4T"], - venoshock: ["7M", "6M", "5M"], - workup: ["7M", "5M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], + wringout: ["7L28", "6L28", "5L36", "4L36"], }}, - sneasel: {learnset: { + delibird: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L20", "6L20", "5L24", "4L24", "3L36"], - assist: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["7E", "6E", "5E", "4M"], - beatup: ["7L28", "6L28", "5L42", "4L38", "3L57"], - bite: ["7E", "6E", "5E", "4E", "3E"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + auroraveil: ["7M"], + avalanche: ["4M"], + bestow: ["7E", "6E", "5E"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - crushclaw: ["7E", "6E", "5E", "4E", "3E"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + counter: ["7E", "3T"], + curse: ["7V"], + defog: ["7T", "4M"], + destinybond: ["7E", "6E"], + detect: ["7V"], doubleedge: ["3T"], - doublehit: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L25"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6E", "5E", "4E", "3E"], - falseswipe: ["7M", "6M", "5M", "4M"], - feint: ["7E", "6E", "5E"], - feintattack: ["7L10", "6L10", "5L14", "4L14", "3L22"], + fakeout: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L16", "6L16", "5L21", "4L21", "3L29"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + focuspunch: ["7T", "6T", "5D", "4M", "3M"], + freezedry: ["7E", "6E"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "7V", "6E", "5E", "4E", "3E"], + gunkshot: ["7T", "6T", "5T", "4T"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["7L25", "6M", "6L25", "5M", "5L35"], + happyhour: ["6S1"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + iceball: ["7E", "6E", "5E", "4E", "3E"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3T"], - iceshard: ["7L47", "7E", "6L47", "6E", "5L51", "5E", "4L49", "4E"], - iciclecrash: ["7E", "6E"], - icywind: ["7L14", "6T", "6L14", "5T", "5L28", "4T", "4L28", "3T", "3L43"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - lowkick: ["6T", "5T", "5D", "4T"], - lowsweep: ["7M", "6M", "5M"], - metalclaw: ["7L22", "6L22", "5L49", "4L42", "3L64"], + icepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + iceshard: ["7E", "6E", "5D", "5E", "4E"], + icywind: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "3T"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], + pluck: ["5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - punishment: ["7L44", "7E", "6L44", "6E", "5L44", "5E", "4E"], - pursuit: ["7E", "6E", "5E", "4E"], - quickattack: ["7L8", "6L8", "5L8", "4L8", "3L8", "3S0"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + present: ["7L1", "7V", "6L1", "6S1", "5D", "5L1", "4L1", "3L1", "3S0"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "7V", "6E", "5E", "4E", "3E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "7V", "6E", "5E", "4E", "3E"], + recycle: ["7T", "6T", "5T", "4M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - screech: ["7L32", "6L32", "5L10", "4L10", "3L15"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L35", "6L35", "5L38", "4L35", "3L50"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snatch: ["7L40", "6T", "6L40", "5T", "5L40", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - strength: ["6M", "5M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + seismictoss: ["3T"], + signalbeam: ["7T", "6T", "5T", "4T"], + skyattack: ["7T", "6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "3T"], + spikes: ["7E", "6E"], + splash: ["7E", "7V", "6E", "5E", "4E", "3E"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M", "3L1", "3S0"], - thief: ["7M", "6M", "5M", "4M", "3M"], - throatchop: ["7E"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - whirlpool: ["4M"], - xscissor: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, - weavile: {learnset: { + mantyke: {learnset: { + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M"], - assurance: ["7L1", "6L1", "5L1", "4L1"], + agility: ["7L32", "6L32", "5L19", "4L19"], + aircutter: ["4T"], + airslash: ["7L36", "6L36", "5L36"], + amnesia: ["7E", "6E", "5E"], + aquaring: ["7L39", "6L39", "5L46", "4L46"], attract: ["7M", "6M", "5M", "4M"], - avalanche: ["4M"], blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "6S1", "5M", "4M", "4S0"], - calmmind: ["7M", "6M", "5M", "4M"], + bounce: ["7T", "7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], + bubble: ["7L1", "6L1", "5L1", "4L1"], + bubblebeam: ["7L7", "6L7", "5L10", "4L10"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "7L47", "6M", "6L47", "5T", "5L51", "4M", "4L49"], - dig: ["6M", "5M", "4M"], + confuseray: ["7L11", "6L11", "5L37", "4L37"], + dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - fakeout: ["4S0"], - falseswipe: ["7M", "6M", "5M", "4M"], - feintattack: ["7L10", "6L10", "5L14", "4L14"], - fling: ["7M", "7L28", "6M", "6L28", "5M", "5L42", "4M", "4L38"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foulplay: ["6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - furyswipes: ["7L16", "6L16", "5L21", "4L21"], - gigaimpact: ["7M", "6M", "5M", "4M"], hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], + haze: ["7E", "6E", "5E", "4E"], + headbutt: ["7L16", "6L16", "5L13", "4T", "4L13"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["7L25", "6M", "6L25", "5M", "5L35"], - hyperbeam: ["7M", "6M", "5M", "4M"], + hydropump: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "6S1", "5T", "4T"], - iceshard: ["4S0"], - icywind: ["7L14", "6T", "6L14", "5T", "5L28", "4T", "4L28"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "4L1"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - metalclaw: ["7L22", "6L22", "5L49", "4L42"], + icywind: ["7T", "6T", "5T", "4T"], + mirrorcoat: ["7E", "6E", "5E", "4E"], mudslap: ["4T"], - nastyplot: ["7L20", "6L20", "5L24", "4L24"], + mudsport: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - nightslash: ["7L35", "6L35", "6S1", "5L35", "4L35", "4S0"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - punishment: ["7L44", "6L44"], - quickattack: ["7L8", "7L1", "6L1", "5L1", "4L1"], raindance: ["7M", "6M", "5M", "4M"], - reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - revenge: ["7L1", "6L1", "5L1", "4L1"], - rocksmash: ["6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4E"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1"], - screech: ["7L32", "6L32", "5L10", "4L10"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + slam: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - snarl: ["7M", "6M", "5M"], - snatch: ["7L40", "6T", "6L40", "5T", "5L40", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + splash: ["7E", "6E", "5E", "4E"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7L3", "6L3", "5L4", "4L4"], surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - thief: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["7T", "7E", "6E"], + takedown: ["7L27", "6L27", "5L31", "4L31"], toxic: ["7M", "6M", "5M", "4M"], + twister: ["7E", "6E", "5E", "4E"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "7L19", "6T", "6L19", "5L28", "4M", "4L28"], + watersport: ["7E", "6E", "5E", "4E"], whirlpool: ["4M"], - xscissor: ["7M", "6M", "6S1", "5M", "4M"], + wideguard: ["7L23", "7E", "6L23", "6E", "5L23", "5E"], + wingattack: ["7L14", "6L14", "5L22", "4L22"], }}, - teddiursa: {learnset: { + mantine: {learnset: { + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - babydolleyes: ["7L1", "6L1"], - bellydrum: ["7E", "6E", "5E", "4E"], + agility: ["7L32", "7V", "6L32", "5L19", "4L19", "3L29"], + aircutter: ["5D", "4T"], + airslash: ["7L36", "6L36", "5L36"], + amnesia: ["7E", "6E", "5E"], + aquaring: ["7L39", "6L39", "5L46", "4L46"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], + brine: ["4M"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + bubblebeam: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L15"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7L1", "6L1", "5L1", "4M", "4L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L11", "7V", "6L11", "5L37", "4L37", "3L50"], + curse: ["7V"], + defog: ["7T", "4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["7T", "6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "7V", "6E", "5E", "4E", "3E"], + headbutt: ["7L16", "7V", "6L16", "5L13", "4T", "4L13"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L49", "7E", "7V", "6L49", "6E", "5L49", "5E", "4L49", "4E", "3E"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5D", "5E", "4E"], + mudslap: ["7V", "4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psybeam: ["7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3E"], + rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "7L1"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + signalbeam: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + slam: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + splash: ["7E", "6E", "5E", "4E"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7L3", "7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L8", "3S0"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L27", "7V", "6L27", "5L31", "4L31", "3L22"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7E", "7V", "6E", "5E", "4E", "3E"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "7L19", "6T", "6L19", "5L28", "4M", "4L28", "3M", "3L43"], + watersport: ["7E", "6E", "5E", "4E"], + whirlpool: ["7V", "4M"], + wideguard: ["7L23", "7E", "6L23", "6E", "5L23", "5E"], + wingattack: ["7L14", "7V", "6L14", "5L22", "4L22", "3L36"], + }}, + skarmory: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L31", "7V", "6L12", "5L12", "4L12", "3L16"], + aircutter: ["7L12", "6L12", "5L23", "4T", "4L23", "3L29"], + airslash: ["7L45", "6L42", "5L42", "4L39"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + autotomize: ["7L50", "6L39", "5L39"], + bravebird: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["7T", "4M"], + detect: ["7V"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + endure: ["7E", "7V", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L20", "6L20", "5L20", "4L20"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L17", "7V", "6L17", "5L17", "4L17", "3L26"], + furycutter: ["4T"], + guardswap: ["7E", "6E", "5E", "4E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + metalclaw: ["7L9", "6L9"], + metalsound: ["7L42", "6L31", "5L31", "4L31", "3L45"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7L53", "6L50", "5L50", "4L45"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + peck: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1"], + pluck: ["5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5D", "5T", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L6", "7V", "6L6", "5L6", "4L6", "3L10"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + skydrop: ["7M", "6M", "5M"], + slash: ["7L39", "6L39", "5L45", "4L42"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spikes: ["7L28", "6L28", "5L28", "4L27", "3L42"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + steelwing: ["7M", "7L34", "7V", "6M", "6L34", "5L34", "4M", "4L34", "3M", "3L32"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7L23", "7V", "6L9", "5L9", "4T", "4L9", "3T", "3L13"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwind: ["7T", "6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + houndour: {learnset: { + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7L25", "7E", "7V", "6L25", "6E", "5L25", "5E", "4L27", "4E", "3E"], + bite: ["7L16", "7V", "6L16", "5L16", "4L17", "3L25"], + bodyslam: ["3T"], + captivate: ["4M"], + charm: ["3S1"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + crunch: ["7L49", "7V", "6L49", "5L49", "4L48", "3L49"], + curse: ["7V"], + darkpulse: ["7M", "6M", "5D", "5T", "4M"], + destinybond: ["7E", "6E"], + detect: ["7V"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L40"], + ember: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7E", "6E", "5D", "5E", "4E"], + feintattack: ["7L32", "7V", "6L32", "5L32", "4L35", "3L37", "3S1"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L28", "7E", "6L28", "6E", "5L28", "5E", "4L30", "4E"], + firespin: ["7E", "7V", "6E", "5E", "4E", "3E"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L44", "4M", "4L43", "3M", "3L43"], + foulplay: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + howl: ["7L4", "6L4", "5D", "5L4", "4L4", "3L7", "3S0"], + hypervoice: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + inferno: ["7L56", "6L56", "5L56"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + nastyplot: ["7L52", "7E", "6L52", "6E", "5L52", "5E", "4L53", "4E"], + naturalgift: ["4M"], + nightmare: ["7V", "3T"], + odorsleuth: ["7L20", "6L20", "5L20", "4L22", "3L31"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + punishment: ["7E", "6E", "5E", "4E"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], + rage: ["7E", "7V", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], + roar: ["7M", "7L13", "7V", "6M", "6L13", "5M", "5L13", "4M", "4L14", "3M", "3L19", "3S1"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "5M", "4M", "3M"], + smog: ["7L8", "7V", "6L8", "5L8", "4L9", "3L13"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderfang: ["7E", "6E", "5E", "4E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], + }}, + houndoom: {learnset: { + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + beatup: ["7L26", "6L26", "5L26", "4L28"], + bite: ["7L16", "7V", "6L16", "5L16", "4L17", "3L27"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L56", "7V", "6L56", "5L56", "4L54", "3L59"], + curse: ["7V"], + darkpulse: ["7M", "6M", "6S0", "5T", "4M"], + detect: ["7V"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L44"], + ember: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L35", "7V", "6L35", "5L35", "4L38", "3L43"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L30", "6L30", "5L30", "4L32"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L50", "7V", "6M", "6L50", "6S0", "5M", "5L50", "4M", "4L48", "3M", "3L51"], + foulplay: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + howl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + inferno: ["7L65", "7L1", "6L1", "5L65"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + nastyplot: ["7L60", "7L1", "6L1", "5L60", "4L60"], + naturalgift: ["4M"], + nightmare: ["7V", "3T"], + odorsleuth: ["7L20", "6L20", "5L20", "4L22", "3L35"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L13", "7V", "6M", "6L13", "5M", "5L13", "4M", "4L14", "3M", "3L19"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "7V", "6M", "6S0", "5M", "4M", "3M"], + smog: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L13"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "6S0", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + phanpy: {learnset: { + ancientpower: ["7E", "7V", "6E", "5E", "4T", "4E", "3E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L33", "6L33", "5L33", "4L33"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + curse: ["7V"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L9"], + doubleedge: ["7L42", "7V", "6L42", "5L42", "4L42", "3T", "3L49"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + endure: ["7L19", "7V", "6L19", "5L28", "4M", "4L28", "3T", "3L41"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7L6", "7V", "6L6", "5D", "5L6", "4L6", "3L17"], + focusenergy: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + headsmash: ["7E", "6E", "5E", "4E"], + heavyslam: ["7E", "6E", "5D", "5E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + highhorsepower: ["7E"], + hypervoice: ["7T", "6T", "5T"], + iceshard: ["7E", "6E", "5E", "4E"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4L37"], + mimic: ["3T"], + mudslap: ["7E", "7V", "6E", "5E", "4T", "3T"], + naturalgift: ["7L15", "6L15", "5L19", "4M", "4L19"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], + playrough: ["7E", "6E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "7V", "6L10", "5L15", "4T", "4L15", "3T", "3L33"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5D", "5T", "4T"], + slam: ["7L24", "6L24", "5L24", "4L24"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "7V", "6L10", "5L10", "4L10", "3L25"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + }}, + donphan: {learnset: { + ancientpower: ["4T"], + assurance: ["7L15", "6L15", "5L31", "4L31"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], + brutalswing: ["7M"], + bulldoze: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7V"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L9"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L46", "4M", "4L46", "3M", "3L49"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flail: ["7V", "4L1", "3L17"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furyattack: ["7L1", "7V", "6L25", "5L25", "4L25", "3L25"], + gigaimpact: ["7M", "7L50", "6M", "6L50", "5M", "5L54", "4M", "4L54"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + irondefense: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "7L19", "6T", "6L10", "5T", "5L10", "4T", "4L10"], + lastresort: ["7T", "6T", "5T"], + magnitude: ["7L30", "6L19", "5L19", "4L19"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rapidspin: ["7L6", "7V", "6L6", "5L6", "4L6", "3L41"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "7V", "6L10", "5L15", "4T", "4L15", "3T", "3L33"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + scaryface: ["7L37", "6L37", "5L39", "4L39"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + slam: ["7L24", "6L24", "5L24", "4L24"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + }}, + stantler: {learnset: { + astonish: ["7L7", "6L7", "5L7", "4L7", "3L11"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7E", "7V", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - charm: ["7L36", "6L36", "5L36", "4L36"], - chipaway: ["7E", "6E", "5E"], - closecombat: ["7E", "6E", "5E", "4E"], + calmmind: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L47"], + captivate: ["7L50", "6L50", "5L53", "4M", "4L49"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - covet: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], - crosschop: ["7E", "6E", "5E", "4E"], - crunch: ["7E", "6E", "5E", "5D", "4E", "3E"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + confuseray: ["7L23", "7V", "6L23", "5L23", "4L23", "3L41"], + curse: ["7V"], + detect: ["7V"], + disable: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + doubleedge: ["3T"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7E", "6E", "5E", "4E", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "5D", "4L1", "4E", "3L19", "3E"], - feintattack: ["7L15", "6L15", "5L15", "4L15", "3L25"], - firepunch: ["6T", "5T", "4T", "3T"], - fling: ["7M", "7L57", "7L1", "6M", "6L1", "5M", "5L57", "4M", "4L57"], - focuspunch: ["6T", "5D", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L8", "6L8", "5L8", "4L8", "3L13"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hypervoice: ["6T", "5T"], - icepunch: ["6T", "5T", "4T", "3T"], - lastresort: ["6T", "5T", "4T"], - leer: ["5L1", "4L1", "3L1", "3S0"], - lick: ["7L1", "6L1", "5L1", "4L1", "3L7", "3S0", "3S1"], - megakick: ["3T"], - megapunch: ["3T"], - metalclaw: ["7E", "6E", "5E", "4E", "3E", "3S1"], - metronome: ["3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L10", "7V", "6L10", "5L10", "4L10", "3L17"], + imprison: ["7L49", "6L49", "5L49", "4L43"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + jumpkick: ["7L43", "6L43", "5L43"], + lastresort: ["7T", "6T", "5T", "4T"], + leer: ["7L3", "7V", "6L3", "5L3", "4L3", "3L7", "3S0"], + lightscreen: ["7M", "7V", "6M", "5M", "4M", "3M"], + magicroom: ["7T", "6T", "5T"], + mefirst: ["7L55", "7L1", "7E", "6L1", "6E", "5L55", "5E", "4L53"], + megahorn: ["7E", "6E", "5E", "4E"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], + mudsport: ["7E", "6E", "5E"], naturalgift: ["4M"], - nightslash: ["7E", "6E", "5E", "4E"], - payback: ["7M", "6M", "5M", "4M"], - playnice: ["7L25", "6L25"], - playrough: ["7E", "6E"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S1"], - rest: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L31"], + nightmare: ["7V", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + rage: ["7E", "6E", "5E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M", "3S1"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L31"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + sandattack: ["7L16", "7V", "6L16", "5L16", "4L16", "3L27"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - seismictoss: ["7E", "6E", "5E", "4E", "3T", "3E"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L29", "6L29", "5L29", "4L29", "3L37"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], - snore: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43", "3T", "3L43"], - strength: ["6M", "5M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5D", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + stomp: ["7L13", "7V", "6L13", "5L13", "4L13", "3L21"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L22", "6L22", "5L22", "4L22"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - takedown: ["7E", "6E", "5E", "4E", "3E"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L50", "6L50", "5L50", "4L50", "3L49"], - thunderpunch: ["6T", "5T", "4T", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + takedown: ["7L21", "7V", "6L21", "5L21", "4L21", "3L37"], + thief: ["7M", "7V", "6M", "5M", "4M", "3M"], + thrash: ["7E", "6E", "5E", "4E"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + wildcharge: ["7M", "6M", "5M"], workup: ["7M", "5M"], - yawn: ["7E", "6E", "5E", "4E", "3E"], + zenheadbutt: ["7T", "7L38", "7E", "6T", "6L38", "6E", "5T", "5L38", "5E", "4T", "4L38", "4E"], }}, - ursaring: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - bodyslam: ["3T"], + smeargle: {learnset: { + captivate: ["5D"], + falseswipe: ["5S1"], + flamethrower: ["6S2"], + furyswipes: ["6S2"], + meanlook: ["5S1"], + odorsleuth: ["5S1"], + seismictoss: ["6S2"], + sketch: ["7L91", "7L81", "7L71", "7L61", "7L51", "7L41", "7L31", "7L21", "7L11", "7L1", "7V", "6L1", "6S2", "5D", "5L1", "4L1", "3L1", "3S0"], + sleeptalk: ["5D"], + spore: ["5S1"], + }}, + miltank: {learnset: { + afteryou: ["7T", "6T", "5T"], + attract: ["7M", "7V", "6M", "6S0", "5M", "4M", "3M"], + belch: ["7E", "6E"], + bide: ["7L15", "7V", "6L15", "5L15", "4L15", "3L26"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["7L24", "7V", "6L24", "5L24", "4L24", "3T", "3L43"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], confide: ["7M", "6M"], counter: ["3T"], - covet: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + curse: ["7E", "7V", "6E", "5D", "5E", "4E", "3E"], + defensecurl: ["7L5", "7V", "6L5", "5D", "5L5", "4L5", "3T", "3L8"], + dizzypunch: ["7E", "6E", "5E", "4E"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7V", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "7V", "6E", "5E", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7L1", "6L1", "5L1", "4L1", "3L19"], - feintattack: ["7L15", "6L15", "5L15", "4L15", "3L25"], - firepunch: ["6T", "5T", "4T", "3T"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L8", "6L8", "5L8", "4L8", "3L1"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], - hammerarm: ["7L67", "7L1", "6L1", "5L67", "4L67"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icepunch: ["6T", "5T", "4T", "3T"], - lastresort: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lick: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], + growl: ["7L3", "7V", "6L3", "5L3", "4L3", "3L4"], + gyroball: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["7V", "4T"], + healbell: ["7T", "7L48", "7V", "6T", "6L48", "5T", "5L48", "4T", "4L48", "3L53"], + heartstamp: ["7E", "6E", "5E"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5D", "5T", "4M", "3M"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], + milkdrink: ["7L11", "7V", "6L11", "6S0", "5L11", "4L11", "3L19"], mimic: ["3T"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - playnice: ["7L25", "6L25"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L31"], + present: ["7E", "7V", "6E", "5E", "4E", "3E"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + punishment: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + reversal: ["7E", "7V", "6E", "5E", "4E", "3E"], rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7L19", "7V", "6L19", "6S0", "5L19", "4T", "4L19", "3T", "3L34"], round: ["7M", "6M", "5M"], - scaryface: ["7L38", "6L38", "5L38", "4L38"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - seismictoss: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L29", "6L29", "5L29", "4L29", "3L37"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L49", "3T", "3L43"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + seismictoss: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7E", "7V", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stomp: ["7L8", "7V", "6L8", "6S0", "5L8", "4L8", "3L13"], + stompingtantrum: ["7T"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L22", "6L22", "5L22", "4L22"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L58", "6L58", "5L58", "4L58", "3L49"], - thunderpunch: ["6T", "5T", "4T", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wakeupslap: ["7L50", "6L50", "5L55", "4L55"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], workup: ["7M", "5M"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], }}, - slugma: {learnset: { - acidarmor: ["7E", "6E", "5E", "4E", "3E"], - afteryou: ["6T", "5T"], - amnesia: ["7L36", "6L32", "5L32", "4L31", "3L29"], - ancientpower: ["7L22", "6L22", "5L28", "4T", "4L26"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L41", "6L41", "5L46", "4L46", "3T", "3L50"], - captivate: ["4M"], - clearsmog: ["7L20", "6L20"], + raikou: {learnset: { + aurasphere: ["4S3"], + bite: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L78", "7S7", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E"], - defensecurl: ["3T"], + crunch: ["7L43", "7S5", "7S6", "7V", "6L43", "6S4", "5L43", "4L43", "3L61", "3S1"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], + discharge: ["7L57", "7L1", "7S5", "7S6", "6L1", "5L57", "4L57"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["7L50", "7E", "6T", "6L50", "6E", "5T", "5L55", "5E", "4T", "4L56"], - ember: ["7L6", "6L5", "5L5", "5D", "4L8", "3L8"], - endure: ["4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + extrasensory: ["7L64", "7L1", "7S7", "6L1", "5L64", "4L64"], + extremespeed: ["4S3"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flameburst: ["7L27", "6L23", "5L23"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L48", "6M", "6L48", "5M", "5L50", "4M", "4L53", "3M", "3L36"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - guardswap: ["7E", "6E"], - harden: ["7L13", "6L13", "5L14", "4L16", "3L22"], - heatwave: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["7L15", "6M", "6L15", "5M"], - inferno: ["7E", "6E", "5E", "5D"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T", "4T"], - lavaplume: ["7L34", "6L34", "5L37", "4L38"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - memento: ["7E", "6E", "5E", "4E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L43", "6L19", "5L19", "4L23"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L41", "4M", "4L41", "3T", "3L43"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L8", "6L8", "5L10", "4L11", "3L15"], - rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["7E", "6E", "5E", "4T", "3T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + quash: ["7M", "6M", "5M"], + quickattack: ["7L22", "7V", "6L22", "5L22", "4L22", "4S2", "3L31", "3S1", "3S0"], + raindance: ["7M", "7L71", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M"], + reflect: ["7M", "7L36", "7S5", "7S6", "7V", "6M", "6L36", "6S4", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L15", "7V", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], + rockclimb: ["4M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smog: ["7L1", "6L1", "5L1", "4L1", "3L1"], - smokescreen: ["7E", "6E", "5E", "4E"], - snore: ["6T", "5T", "4T", "3T"], - spitup: ["7E", "6E", "5E", "4E"], - stockpile: ["7E", "6E", "5E", "4E"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spark: ["7L29", "7V", "6L29", "6S4", "5L29", "4L29", "4S2", "3L41", "3S1", "3S0"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7E", "6E", "5E", "4E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], - yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + throatchop: ["7T"], + thunder: ["7M", "7L85", "7V", "6M", "6L85", "5M", "5L85", "4M", "4L71", "3M", "3L71"], + thunderbolt: ["7M", "7S7", "6M", "5M", "4M", "3M"], + thunderfang: ["7L50", "7S5", "7S6", "6L50", "6S4", "5L50", "4L50"], + thundershock: ["7L8", "7V", "6L8", "5L8", "4L8", "3L11", "3S0"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "7S7", "6M", "5M"], + weatherball: ["4S3"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7V", "4S3"], }}, - magcargo: {learnset: { - afteryou: ["6T", "5T"], - amnesia: ["7L36", "6L32", "5L32", "4L31", "3L29"], - ancientpower: ["7L22", "6L22", "5L28", "4T", "4L26"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L43", "6L43", "5L52", "4L52", "3T", "3L60"], + entei: {learnset: { + bite: ["7L1", "7S5", "7S6", "7V", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - clearsmog: ["7L20", "6L20"], + calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], confide: ["7M", "6M"], - defensecurl: ["3T"], + crushclaw: ["4S3"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["7L58", "7L1", "6T", "6L1", "5T", "5L67", "4T", "4L66"], - earthquake: ["7M", "6M", "5M", "4M", "3M", "3S0"], - ember: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], - explosion: ["7M", "6M", "5M", "4M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L8", "7V", "6L8", "5L8", "4L8", "3L11", "3S0"], + endure: ["7V", "4M", "3T"], + eruption: ["7L85", "7L1", "6L1", "5L85", "4L85"], + extrasensory: ["7L64", "7L1", "6L1", "5L64", "4L64"], + extremespeed: ["4S3"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flameburst: ["7L27", "6L23", "5L23"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L54", "6M", "6L54", "5M", "5L59", "4M", "4L61", "3M", "3L36", "3S0"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L71", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L71"], + firefang: ["7L50", "6L50", "6S4", "5L50", "4L50"], + firespin: ["7L22", "7V", "6L22", "5L22", "4L22", "4S2", "3L31", "3S1", "3S0"], + flamecharge: ["7M", "7S7", "6M", "5M"], + flamethrower: ["7M", "7L36", "7V", "6M", "6L36", "6S4", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], + flareblitz: ["4S3"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gyroball: ["7M", "6M", "5M", "4M"], - harden: ["7L13", "6L13", "5L14", "4L16", "3L22"], - heatwave: ["6T", "5T", "4T", "3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["7L15", "6M", "6L15", "5M"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T", "4T"], - lavaplume: ["7L34", "6L34", "5L37", "4L40"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + howl: ["4S3"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + ironhead: ["7T", "7S7", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lavaplume: ["7L57", "7L1", "7S5", "7S6", "6L1", "5L57", "4L57"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L47", "6L19", "5L19", "4L23"], + overheat: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], reflect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L44", "4M", "4L45", "3T", "3L48"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L15", "7V", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], + rockclimb: ["4M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sacredfire: ["7L1", "7S7", "6L1"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shellsmash: ["7L1", "6L38", "5L38"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - smog: ["7L1", "6L1", "5L1", "4L1", "3L1"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stomp: ["7L29", "7S5", "7S6", "7V", "6L29", "6S4", "5L29", "4L29", "4S2", "3L41", "3S1", "3S0"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7S7", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L43", "7S5", "7S6", "7V", "6M", "6L43", "6S4", "5M", "5L43", "4M", "4L43", "3T", "3L61", "3S1"], + swift: ["7V", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], willowisp: ["7M", "6M", "5M", "4M"], - yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], }}, - swinub: {learnset: { - amnesia: ["7L48", "6L48", "5L49", "4L49", "3L55"], - ancientpower: ["7E", "6E", "5E", "5D", "4T", "4E", "3E", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["7E", "6E", "5E"], - bite: ["7E", "6E", "5E", "4E", "3E"], - blizzard: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44", "3M", "3L46"], - bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + suicune: {learnset: { + airslash: ["4S3"], + aquaring: ["4S3"], + aurorabeam: ["7L29", "7S5", "7V", "6L29", "6S4", "5L29", "4L29", "4S2", "3L41", "3S1", "3S0"], + avalanche: ["4M"], + bite: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "7L85", "7V", "6M", "6L85", "5M", "5L85", "4M", "4L85", "3M"], + bodyslam: ["3T"], + brine: ["4M"], + bubblebeam: ["7L8", "7L1", "7S5", "7V", "6L8", "5L8", "4L8", "3L11", "3S0"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - charm: ["3S0"], + calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], - endeavor: ["6T", "5T", "4T"], - endure: ["7L14", "6L14", "5L16", "4M", "4L16", "3T", "3L19"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7V", "4M", "3T"], + extrasensory: ["7L64", "6L1", "5L64", "4L64"], + extremespeed: ["4S3"], facade: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7E", "6E", "5E", "4E"], - flail: ["7L40", "6L40", "5L40"], - freezedry: ["7E", "6E"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L22", "7V", "6L22", "5L22", "4L22", "4S2", "3L31", "3S1", "3S0"], hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hydropump: ["7L71", "7V", "6L1", "5L71", "4L71", "3L71"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - iceshard: ["7L24", "6L24", "5L28", "4L28"], - iciclecrash: ["7E", "6E", "5E"], - iciclespear: ["7E", "6E", "5E", "5D", "4E", "3E"], - icywind: ["7L21", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L50", "6L50", "5L50", "4L50"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - mist: ["7L35", "6L35", "5L40", "4L40", "3L37", "3S0"], - mudbomb: ["7L18", "6L18", "5L20", "4L20"], - mudshot: ["7E", "6E", "5E", "4E", "3E", "3S0"], - mudslap: ["7L11", "6L11", "5L13", "4T", "4L13", "3T"], - mudsport: ["7L5", "6L5", "5L4", "4L4"], + mirrorcoat: ["7L43", "7V", "6L43", "6S4", "5L43", "4L43", "3L61", "3S1"], + mist: ["7L36", "7S5", "7V", "6L36", "6S4", "5L36", "4L36", "4S2", "3L51", "3S1"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - powdersnow: ["7L8", "6L8", "5L8", "4L8", "3L10"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + ominouswind: ["4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "7L15", "7L1", "7S5", "7V", "6M", "6L15", "6S4", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], - strength: ["6M", "5M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M"], + sheercold: ["7L1", "4S3"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L28", "7E", "6L28", "6E", "5L32", "5E", "4L32", "4E", "3L28", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["7T", "7L57", "6T", "6L1", "5T", "5L57", "4T", "4L57"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7V", "4M"], }}, - piloswine: {learnset: { - amnesia: ["7L58", "6L58", "5L65", "4L65", "3L70"], - ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - blizzard: ["7M", "7L52", "6M", "6L52", "5M", "5L56", "4M", "4L56", "3M", "3L56"], + larvitar: {learnset: { + ancientpower: ["7E", "7V", "6E", "5E", "4T", "4E", "3E"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L1", "7V", "6L1", "5D", "5L1", "5S1", "4L1", "3L1", "3S0"], bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], + chipaway: ["7L14", "6L14", "5L14"], confide: ["7M", "6M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + crunch: ["7L41", "7V", "6L41", "5L41", "4L37", "3L43"], + curse: ["7E", "7V", "6E", "5E", "4E", "3E"], + darkpulse: ["7M", "7L32", "6M", "6L32", "5D", "5T", "5L32", "4M", "4L28"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L40", "4M", "4L40", "3M"], - endeavor: ["6T", "5T", "4T"], - endure: ["7L14", "6L14", "5L16", "4M", "4L16", "3T", "3L1"], - facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L1", "6L33", "5L33", "4L33", "3L33"], - gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["3L1"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7L24", "6L24", "5L28", "4L28"], - icywind: ["7L21", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E", "3E", "3S0"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L41", "3M", "3L50"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7E", "7V", "6E", "5E", "4E", "3E"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L50", "3M", "3L57"], + irondefense: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + ironhead: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "7V", "6L1", "5L1", "5S1", "4L1", "3L1"], mimic: ["3T"], - mist: ["7L37", "6L37", "5L48", "4L48", "3L42"], - mudbomb: ["7L18", "6L18", "5L20", "4L20"], - mudslap: ["7L11", "6L11", "5L13", "4T", "4L13", "3T"], - mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], - peck: ["7L1", "6L1", "5L1", "4L1"], - powdersnow: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + outrage: ["7T", "7E", "7V", "6T", "6E", "5T", "5E", "4E", "3E", "3S0"], + payback: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L32"], + poweruppunch: ["6M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "7V", "6E", "5E", "4E", "3E"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "4L14", "3T", "3L22"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "7L5", "7V", "6M", "6L5", "5M", "5L5", "5S1", "4M", "4L5", "3M", "3L8", "3S0"], + scaryface: ["7L23", "7V", "6L23", "5L23", "4L19", "3L36"], + screech: ["7L10", "7V", "6L10", "5L10", "4L10", "3L15"], secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M"], + stomp: ["7E", "7V", "6E", "5E", "4E", "3E"], + stoneedge: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L46"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - takedown: ["7L28", "6L28", "5L32", "4L32", "3L28"], - thrash: ["7L41", "6L41", "5L41"], - toxic: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "5S1", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L28", "7V", "6L28", "5L28", "4L23", "3L29"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], }}, - mamoswine: {learnset: { - ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1"], - attract: ["7M", "6M", "5M", "4M"], - avalanche: ["4M"], - blizzard: ["7M", "7L52", "6M", "6L52", "5M", "5L56", "4M", "4L56"], - block: ["6T", "5T", "4T"], + pupitar: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + bite: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], + chipaway: ["7L14", "6L14", "5L14"], confide: ["7M", "6M"], - dig: ["6M", "5M", "4M"], - doublehit: ["7L33", "6L33", "5L33", "5S0", "4L33"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L46", "6M", "6L46", "6S1", "5M", "5L40", "4M", "4L40"], - endeavor: ["6T", "5T", "4T"], - endure: ["7L14", "6L14", "5L16", "4M", "4L16"], - facade: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furyattack: ["7L1"], - gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "7L21", "6M", "6L21", "5M", "5L25", "5S0", "4M", "4L25"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icefang: ["7L24", "6L24", "5L28", "5S0", "4L28"], - iciclecrash: ["6S1"], - iciclespear: ["6S1"], - icywind: ["6T", "5T", "4T"], - ironhead: ["6T", "5T"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M", "4M"], - mist: ["7L37", "6L37", "5L48", "4L48"], - mudbomb: ["7L18", "6L18", "5L20", "4L20"], - mudslap: ["7L11", "6L11", "5L13", "4T", "4L13"], - mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + crunch: ["7L47", "7V", "6L47", "5L47", "4L41", "3L47"], + curse: ["7V"], + darkpulse: ["7M", "7L34", "6M", "6L34", "5T", "5L34", "4M", "4L28"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L54", "7V", "6M", "6L54", "5M", "5L54", "4M", "4L47", "3M", "3L56"], + endure: ["7V", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L67", "7V", "6M", "6L67", "5M", "5L67", "4M", "4L60", "3M", "3L65"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L1", "6L1", "5L1", "4L1"], - peck: ["7L1", "6L1", "5L1", "4L1"], - powdersnow: ["7L8", "7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "6S1", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], + outrage: ["7T", "6T", "5T"], + payback: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L34"], + poweruppunch: ["6M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "4L14", "3T", "3L22"], + rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scaryface: ["7L58", "7L1", "6L1", "5L65", "4L65"], - secretpower: ["6M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M"], - takedown: ["7L28", "6L28", "5L32", "5S0", "4L32"], - thrash: ["7L41", "6L41", "5L41"], - toxic: ["7M", "6M", "5M", "4M"], - }}, - corsola: {learnset: { - amnesia: ["7E", "6E", "5E", "4E", "3E"], - ancientpower: ["7L17", "6L17", "5L32", "4T", "4L32", "3L45"], - aquaring: ["7L38", "7E", "6L38", "6E", "5L37", "5E", "4L37", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], - bide: ["7E", "6E", "5E"], + sandstorm: ["7M", "7L5", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + scaryface: ["7L23", "7V", "6L23", "5L23", "4L19", "3L38"], + screech: ["7L10", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stoneedge: ["7M", "7L60", "6M", "6L60", "5M", "5L60", "4M", "4L54"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L28", "7V", "6L28", "5L28", "4L23", "3L29"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + }}, + tyranitar: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7V", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], - brine: ["7L27", "6L27", "4M"], - bubble: ["7L4", "6L4", "5L8", "5D", "4L8", "3L12"], - bubblebeam: ["7L10", "6L10", "5L25", "4L25", "3L23"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - camouflage: ["7E", "6E"], captivate: ["4M"], + chipaway: ["7L14", "6L14", "5L14"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "5D", "4E", "3E"], - curse: ["7E", "6E", "5E", "4E"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + counter: ["3T"], + crunch: ["7L47", "7V", "6L47", "6S6", "6S5", "6S4", "6S3", "5L47", "5S2", "5S1", "4L41", "3L47", "3S0"], + curse: ["7V"], + cut: ["7V", "6M", "5M", "4M", "3M"], + darkpulse: ["7M", "7L34", "6M", "6L34", "5T", "5L34", "4M", "4L28"], + detect: ["7V"], + dig: ["7V", "6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["7L47", "6T", "6L47", "5T", "5L53", "4T", "4L53"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T", "4T"], - endure: ["7L35", "6L35", "5L35", "4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["7V", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L54", "7V", "6M", "6L54", "6S4", "6S3", "5M", "5L54", "5S2", "4M", "4L47", "3M", "3L61", "3S0"], + endure: ["7V", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L50", "6L50", "5L52"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L1", "6L1", "5L4", "4L4", "3L6"], - headbutt: ["4T"], - headsmash: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - iciclespear: ["7E", "6E", "5E", "4E", "3E"], - icywind: ["6T", "5T", "4T"], - ingrain: ["7E", "6E", "5E", "4E", "3E"], - irondefense: ["7L29", "6T", "6L29", "5T", "5L29"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - liquidation: ["7E"], - luckychant: ["7L23", "6L23", "5L28", "4L28"], - magiccoat: ["6T", "5T", "4T"], + fireblast: ["7M", "7V", "6M", "5M", "5S1", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + firepunch: ["7T", "7V", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + furycutter: ["7V", "4T", "3T"], + gigaimpact: ["7M", "7L82", "6M", "6L82", "5M", "5L82", "4M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L73", "7V", "6M", "6L73", "5M", "5L73", "4M", "4L70", "3M", "3L75"], + icebeam: ["7M", "6M", "5M", "5S1", "4M", "3M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "6T", "6S6", "6S3", "5T", "4T"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "6S6", "6S5", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - mirrorcoat: ["7L45", "6L45", "5L48", "4L48", "3L39"], - mist: ["7E", "6E", "5E", "4E", "3E"], - mudslap: ["4T", "3T"], - mudsport: ["3S0"], + mudslap: ["7V", "4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], - powergem: ["7L41", "6L41", "5L44", "4L44"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L8", "6L8", "5L13", "4L13", "3L17"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7L13", "6L13", "5L16", "4L16", "3L17"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7L31", "6L31", "5L20", "4L20", "3L34"], + nightmare: ["7V", "3T"], + outrage: ["7T", "6T", "5T", "4T"], + payback: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "5S2", "4M", "4L34"], + poweruppunch: ["6M"], + protect: ["7M", "7V", "6M", "6S5", "5M", "4M", "3M"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L19", "7V", "6M", "6L19", "6S6", "6S5", "6S4", "5M", "5L19", "4M", "4L14", "3T", "3L22"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + sandstorm: ["7M", "7L5", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + scaryface: ["7L23", "7V", "6L23", "5L23", "4L19", "3L38", "3S0"], + screech: ["7L10", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spikecannon: ["7L20", "6L20", "5L40", "4L40", "3L28"], - stealthrock: ["6T", "5T", "5D", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + seismictoss: ["5S2", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L63", "6M", "6L63", "6S4", "6S3", "5M", "5L63", "5S1", "4M", "4L54"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L28", "7V", "6L28", "5L28", "4L23", "3L29", "3S0"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + thunderpunch: ["7T", "6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], }}, - remoraid: {learnset: { - acidspray: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L14", "7E", "6L14", "6E", "5L14", "5E", "4L14", "4E", "3L22", "3E"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["5D", "4M"], - bubblebeam: ["7L18", "6L18", "5L19", "4L19", "3L22"], - bulletseed: ["7L38", "6L38", "5L27", "4M", "4L27"], - captivate: ["4M"], + lugia: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aeroblast: ["7L43", "7S10", "7S9", "7S8", "7S7", "7V", "6L43", "6S6", "6S5", "5L43", "4L43", "4S3", "4S2", "3L77"], + aircutter: ["4T"], + ancientpower: ["7L57", "7S9", "7S7", "7V", "6L57", "5L57", "4T", "4L57", "4S3", "3L88"], + aquatail: ["7T", "6T", "5T", "4T"], + avalanche: ["4M"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93", "3M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - defensecurl: ["3T"], + curse: ["7V"], + defog: ["7T", "7S8", "4M"], + detect: ["7V"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - entrainment: ["7E", "6E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrush: ["7L15", "6L15", "6S6", "5L15", "4L15"], + dragontail: ["7M", "6M", "5M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + earthpower: ["7T", "7S10", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M", "3S1"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7V", "4M", "3T"], + extrasensory: ["7L23", "7S9", "7S7", "6L23", "5L23", "4L23", "4S2"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E"], + featherdance: ["3S1"], + flash: ["6M", "5M", "4M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L79", "7V", "6L79", "5L79", "4L79", "3L99"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L9", "7V", "6L9", "5L9", "4L9", "3L22"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7V", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hurricane: ["7S8"], + hydropump: ["7L37", "7V", "6L37", "6S6", "6S5", "5L37", "4L29", "4S2", "3L44", "3S1", "3S0"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "6S6", "5M", "4M", "3M"], + icywind: ["7T", "7V", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7V", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["7L85", "6L85", "5L85", "4M", "4L51"], + nightmare: ["7V", "3T"], + ominouswind: ["4T"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "7S10", "6M", "5M", "4M", "3M"], + psychoboost: ["3S1"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + punishment: ["7L50", "6L50", "6S5", "5L50", "4L50", "4S3"], + raindance: ["7M", "7L29", "7V", "6M", "6L29", "6S5", "5M", "5L29", "4M", "4L29", "4S2", "3M", "3L55", "3S0"], + recover: ["7L71", "7V", "6L71", "5L71", "4L23", "3L33", "3S0"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L65", "7V", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S3", "3M", "3L11"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "7S9", "7S7", "6T", "5T", "4M", "3M"], + skyattack: ["7T", "7L99", "6T", "6L99", "5T", "5L99", "4T", "4L99"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "4L43", "3T", "3L66", "3S0"], + tailwind: ["7T", "7S10", "7S8", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + twister: ["4T"], + waterfall: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + weatherball: ["7L1", "6L1", "5L1", "5S4", "4L1"], + whirlpool: ["7V", "4M"], + whirlwind: ["7L1", "7V", "6L1", "5L1", "5S4", "4L1", "3L1"], + wonderroom: ["7T", "6T", "5T"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], + }}, + hooh: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + ancientpower: ["7L57", "7S8", "7S7", "7V", "6L57", "5L57", "4T", "4L57", "4S2", "3L88"], + bravebird: ["7L15", "7S9", "7S6", "6L15", "6S5", "5L15", "4L15"], + bulldoze: ["7M", "6M", "5M"], + burnup: ["7S8", "7S7"], + calmmind: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93", "3M"], + celebrate: ["6S5"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + curse: ["7V"], + defog: ["7T", "4M"], + detect: ["7V"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7V"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7V", "7S9", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7V", "4M", "3T"], + extrasensory: ["7L23", "7S8", "7S7", "6L23", "5L23", "4L23", "4S1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L37", "7V", "6M", "6L37", "6S4", "5M", "5L37", "4M", "4L29", "4S1", "3M", "3L44", "3S0"], + flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - focusenergy: ["7L22", "6L22", "5L23", "4L23", "3L33"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gunkshot: ["6T", "5T", "4T"], - haze: ["7E", "6E", "5E", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L42", "6L42", "5L42"], - hyperbeam: ["7M", "7L46", "6M", "6L46", "5M", "5L45", "4M", "4L45", "3M", "3L55"], - icebeam: ["7M", "7L34", "6M", "6L34", "5M", "5L40", "4M", "4L40", "3M", "3L44"], - icywind: ["6T", "5T", "4T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L79", "7V", "6L79", "5L79", "4L79", "3L99"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L9", "7V", "6L9", "5L9", "4L9", "3L22"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], incinerate: ["6M", "5M"], - lockon: ["7L6", "6L6", "5L6", "5D", "4L6", "3L11"], + ironhead: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], - mudshot: ["7E", "6E", "5E"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - octazooka: ["7E", "6E", "5E", "4E", "3E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L10", "6L10", "5L10", "4L10", "3L22"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7E", "6E", "5E", "5D", "4E", "3E"], + mudslap: ["7V", "4T", "3T"], + naturalgift: ["7L85", "6L85", "5L85", "4M", "4L51"], + nightmare: ["7V", "3T"], + ominouswind: ["4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + pluck: ["5M", "4M"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + punishment: ["7L50", "6L50", "6S4", "5L50", "4L50", "4S2"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L71", "7S6", "7V", "6L71", "6S5", "5L71", "4L23", "3L33", "3S0"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + rocksmash: ["7V", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E", "4E", "3E"], + sacredfire: ["7L43", "7S9", "7S8", "7S7", "7S6", "7V", "6L43", "6S5", "6S4", "5L43", "4L43", "4S2", "4S1", "3L77"], + safeguard: ["7M", "7L65", "7S6", "7V", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S2", "3M", "3L11"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - signalbeam: ["7L30", "6T", "6L30", "5T", "5L36", "4T", "4L36"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], - soak: ["7L50", "6L50", "5L49"], - stringshot: ["4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skyattack: ["7T", "7L99", "6T", "6L99", "5T", "5L99", "4T", "4L99", "3T"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "7V", "6M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7E", "6E", "5E", "4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["7L26", "7E", "6T", "6L26", "6E", "5L32", "5E", "4M", "4L32", "3M"], - waterspout: ["7E", "6E", "5E", "4E"], - whirlpool: ["4M"], + sunnyday: ["7M", "7L29", "7V", "6M", "6L29", "6S4", "5M", "5L29", "4M", "4L29", "4S1", "3M", "3L55", "3S0"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "4L43", "3T", "3L66", "3S0"], + tailwind: ["7T", "7S9", "6T", "5T", "4T"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + weatherball: ["7L1", "6L1", "5L1", "5S3", "4L1"], + whirlwind: ["7L1", "7V", "6L1", "5L1", "5S3", "4L1", "3L1"], + willowisp: ["7M", "6M", "5M", "4M"], + zapcannon: ["7V"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - octillery: {learnset: { + celebi: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + ancientpower: ["7L28", "7S7", "7V", "6L28", "5L28", "4T", "4L28", "3L20", "3S3", "3S1"], + batonpass: ["7L37", "7V", "6L37", "5L37", "4L37", "3L40", "3S1"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "7V", "6L1", "6S6", "5L1", "4L1", "3L1", "3S0"], + curse: ["7V"], + cut: ["6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7V", "3T"], + detect: ["7V"], + doubleedge: ["3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7V", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "7V", "6M", "5M", "4M", "3M"], + futuresight: ["7L64", "7S7", "7V", "6L64", "5L64", "4L64", "3L30", "3S3", "3S1"], + gigadrain: ["7T", "7V", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + healbell: ["7T", "7L1", "7S7", "7V", "6T", "6L1", "6S6", "6S5", "5T", "5L1", "4T", "4L1", "3L1", "3S3", "3S2", "3S0"], + healblock: ["7L55", "6L55", "5L55", "4L55"], + healingwish: ["7L73", "6L73", "5L73", "4L73", "4S4"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7V", "6M", "5M", "4M", "3M"], + holdback: ["6S5"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + leafstorm: ["7L82", "6L82", "5L82", "4L82", "4S4"], + leechseed: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S2"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["7V", "4T", "3T"], + nastyplot: ["4S4"], + naturalgift: ["7L46", "6L46", "5L46", "4M", "4L46"], + naturepower: ["7M", "6M"], + nightmare: ["7V", "3T"], + perishsong: ["7L91", "7V", "6L91", "5L91", "4L91", "3L50", "3S1"], + protect: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7V", "6M", "5M", "4M", "3T"], + raindance: ["7M", "7V", "6M", "5M", "4M", "3M"], + recover: ["7L1", "7V", "6L1", "6S6", "6S5", "5L1", "4L1", "4S4", "3L1", "3S2", "3S0"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "7V", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L10", "7S7", "7V", "6M", "6L10", "6S6", "6S5", "5M", "5L10", "4M", "4L10", "3M", "3L10", "3S3", "3S2", "3S0"], + sandstorm: ["7M", "7V", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "7V", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["4M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "7V", "6M", "5T", "4M", "3T"], + snore: ["7T", "7V", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7V", "6M", "5M", "4M", "3T"], + sweetscent: ["7V"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wonderroom: ["7T", "6T", "5T"], + worryseed: ["7T", "6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], + }}, + treecko: {learnset: { + absorb: ["7L5", "6L5", "5L6", "5S1", "4L6", "3L6", "3S0"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L25", "6L25", "5L31", "4L31", "3L31"], attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L22"], - bind: ["6T", "5T"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["4M"], - bubblebeam: ["7L18", "6L18", "5L19", "4L19", "3L22"], - bulletseed: ["7L46", "6L46", "5L29", "4M", "4L29", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["7E", "6E", "5E", "4M", "3M"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - constrict: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L11"], - defensecurl: ["3T"], - dive: ["6M", "5M", "4T", "3M"], + counter: ["3T"], + crunch: ["7E", "6E", "5E", "4E", "3E"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + detect: ["7L33", "6L33", "5L41", "4L41", "3L41"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], + doublekick: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["3T"], + endeavor: ["7T", "7L45", "7E", "6T", "6L45", "6E", "5T", "5E", "4T", "4E", "3E"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + energyball: ["7M", "7L37", "6M", "6L37", "5M", "5L51", "4M", "4L51"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L22", "6L22", "5L23", "4L23", "3L38"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "7L21", "6T", "6L21", "5T", "5L46", "4M", "4L46", "3M", "3L46"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + grasswhistle: ["7E", "6E", "5E", "4E"], + grassyterrain: ["7E", "6E"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L52", "6L52", "5L52"], - hyperbeam: ["7M", "7L58", "6M", "6L58", "5M", "5L55", "4M", "4L55", "4S0", "3M", "3L70"], - icebeam: ["7M", "7L40", "6M", "6L40", "5M", "5L48", "4M", "4L48", "4S0", "3M", "3L54"], - icywind: ["6T", "5T", "4T"], - incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7E", "6E", "5E", "4E", "3E"], + leer: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + lowkick: ["7T", "6T", "5T", "4T"], + magicalleaf: ["7E", "6E", "5E", "4E"], + megadrain: ["7L13", "6L13", "5L26", "4L26", "3L26"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - naturalgift: ["4M"], - octazooka: ["7L1", "6L25", "5L25", "4L25", "4S0", "3L25"], - payback: ["7M", "6M", "5M", "4M"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + pound: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L22"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L17", "6L16", "5L16", "4L16", "3L16"], + quickattack: ["7L9", "6L9", "5L11", "4L11", "3L11"], + quickguard: ["7L41", "6L41"], + razorwind: ["7E", "6E", "5E", "4E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7L1", "6L1", "5L1", "4L1"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L49", "6L21", "5L21", "4L21", "3L21"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["3T"], - signalbeam: ["7L34", "6T", "6L34", "5T", "5L42", "4T", "4L42", "4S0"], + slam: ["7L29", "6L29", "5L36", "4L36", "3L36"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - sludgewave: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - soak: ["7L64", "6L64", "5L61"], - stringshot: ["4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - wringout: ["7L28", "6L28", "5L36", "4L36"], + workup: ["7M"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, - delibird: {learnset: { + grovyle: {learnset: { + absorb: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L28", "6L28", "5L35", "4L35", "3L35"], attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7E", "6E", "5E", "4E", "3E"], - auroraveil: ["7M"], - avalanche: ["4M"], - bestow: ["7E", "6E", "5E"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M"], - brutalswing: ["7M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - defog: ["4M"], - destinybond: ["7E", "6E"], + cut: ["6M", "5M", "4M", "3M"], + detect: ["7L38", "6L38", "5L47", "4L47", "3L47"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drillpeck: ["7L25"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["3T"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6E", "5E", "4E"], + falseswipe: ["7M", "7L48", "6M", "6L48", "5M", "5L53", "4M", "4L53", "3L53"], + flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - focuspunch: ["6T", "5D", "4M", "3M"], - freezedry: ["7E", "6E"], - frostbreath: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], - gunkshot: ["6T", "5T", "4T"], - hail: ["7M", "6M", "5M", "4M", "3M"], - happyhour: ["6S1"], + furycutter: ["7L1", "6L16", "5L16", "4T", "4L16", "3T", "3L16"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - iceball: ["7E", "6E", "5E", "4E", "3E"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4E"], - iceshard: ["7E", "6E", "5E", "5D", "4E"], - icywind: ["7E", "6T", "6E", "5T", "5E", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + leafblade: ["7L23", "6L23", "5L29", "4L29", "3L29"], + leafstorm: ["7L58", "6L58", "5L59", "4L59"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megadrain: ["7L13", "6L13"], megakick: ["3T"], megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - pluck: ["5M", "4M"], + naturepower: ["7M", "6M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], - present: ["7L1", "6L1", "6S1", "5L1", "5D", "4L1", "3L1", "3S0"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E", "6E", "5E", "4E", "3E"], - recycle: ["6T", "5T", "4M"], + pursuit: ["7L18", "6L17", "5L17", "4L17", "3L17"], + quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + quickguard: ["7L53", "6L53"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L63", "6L23", "5L23", "4L23", "3L23"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["3T"], - signalbeam: ["6T", "5T", "4T"], - skyattack: ["6T", "5T", "4T", "3T"], + slam: ["7L33", "6L33", "5L41", "4L41", "3L41"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "3T"], - spikes: ["7E", "6E"], - splash: ["7E", "6E", "5E", "4E", "3E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - }}, - mantyke: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M", "4M"], - agility: ["7L32", "6L32", "5L19", "4L19"], - aircutter: ["4T"], - airslash: ["7L36", "6L36", "5L36"], - amnesia: ["7E", "6E", "5E"], - aquaring: ["7L39", "6L39", "5L46", "4L46"], - attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - bounce: ["7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], - bubble: ["7L1", "6L1", "5L1", "4L1"], - bubblebeam: ["7L7", "6L7", "5L10", "4L10"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - confide: ["7M", "6M"], - confuseray: ["7L11", "6L11", "5L37", "4L37"], - dive: ["6M", "5M", "4T"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M"], - haze: ["7E", "6E", "5E", "4E"], - headbutt: ["7L16", "6L16", "5L13", "4T", "4L13"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hydropump: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - mirrorcoat: ["7E", "6E", "5E", "4E"], - mudslap: ["4T"], - mudsport: ["7E", "6E", "5E", "4E"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4E"], - round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4E"], - slam: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - splash: ["7E", "6E", "5E", "4E"], - substitute: ["7M", "6M", "5M", "4M"], - supersonic: ["7L3", "6L3", "5L4", "4L4"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - tailwind: ["7E", "6E"], - takedown: ["7L27", "6L27", "5L31", "4L31"], - toxic: ["7M", "6M", "5M", "4M"], - twister: ["7E", "6E", "5E", "4E"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpulse: ["7L19", "6T", "6L19", "5L28", "4M", "4L28"], - watersport: ["7E", "6E", "5E", "4E"], - whirlpool: ["4M"], - wideguard: ["7L23", "7E", "6L23", "6E", "5L23", "5E"], - wingattack: ["7L14", "6L14", "5L22", "4L22"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T", "4T"], + xscissor: ["7M", "7L43", "6M", "6L43", "5M", "4M"], }}, - mantine: {learnset: { + sceptile: {learnset: { + absorb: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L32", "6L32", "5L19", "4L19", "3L29"], - aircutter: ["5D", "4T"], - airslash: ["7L36", "6L36", "5L36"], - amnesia: ["7E", "6E", "5E"], - aquaring: ["7L39", "6L39", "5L46", "4L46"], - aquatail: ["6T", "5T", "4T"], + agility: ["7L28", "6L28", "5L35", "4L35", "3L35"], attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], - brine: ["4M"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - bubblebeam: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L15"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], - bulletseed: ["7L1", "6L1", "5L1", "4M", "4L1"], + bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L11", "6L11", "5L37", "4L37", "3L50"], - defog: ["4M"], - dive: ["6M", "5M", "4T", "3M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + detect: ["7L39", "6L39", "5L51", "4L51", "3L51"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "6T", "5T", "5S0", "4M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dualchop: ["7T", "7L1", "6T", "6L36"], + dynamicpunch: ["3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L51", "6M", "6L51", "5M", "5L59", "4M", "4L59", "3L59"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "5S0", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frenzyplant: ["7T", "6T", "5T", "4T"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L1", "6L16", "4T", "3T", "3L16"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], - hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E", "3E"], - headbutt: ["7L16", "6L16", "5L13", "4T", "4L13"], - helpinghand: ["6T", "5T", "4T"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E", "3E"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leafblade: ["7L23", "6L23", "5L29", "4L29", "3L29"], + leafstorm: ["7L63", "7L1", "6L1", "5L67", "5S0", "4L67"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megadrain: ["7L13", "6L13"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - mirrorcoat: ["7E", "6E", "5E", "5D", "4E"], mudslap: ["4T", "3T"], - mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], + naturepower: ["7M", "6M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + outrage: ["7T", "6T", "5T", "4T"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L1", "6L1", "5L1", "4L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L18", "6L17", "5L17", "4L17", "3L17"], + quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + quickguard: ["7L57", "6L57"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3E"], - rocktomb: ["7M", "6M", "5M", "4M"], - roost: ["7M", "7L1"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "5S0", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L69", "6L23", "5L23", "4L23", "3L23"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - signalbeam: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - slam: ["7E", "6E", "5E", "4E", "3E"], + seedbomb: ["7T", "6T", "5T", "4T"], + seismictoss: ["3T"], + slam: ["7L33", "6L33", "5L43", "4L43", "3L43"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - splash: ["7E", "6E", "5E", "4E"], - stringshot: ["4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - supersonic: ["7L3", "7L1", "6L1", "5L1", "5D", "4L1", "3L8", "3S0"], - surf: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L27", "6L27", "5L31", "4L31", "3L22"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["7E", "6E", "5E", "4E", "3E"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["7L19", "6T", "6L19", "5L28", "4M", "4L28", "3M", "3L43"], - watersport: ["7E", "6E", "5E", "4E"], - whirlpool: ["4M"], - wideguard: ["7L23", "7E", "6L23", "6E", "5L23", "5E"], - wingattack: ["7L14", "6L14", "5L22", "4L22", "3L36"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T", "4T"], + xscissor: ["7M", "7L45", "6M", "6L16", "5M", "5L16", "4M", "4L16"], }}, - skarmory: {learnset: { + torchic: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L31", "6L12", "5L12", "4L12", "3L16"], - aircutter: ["7L12", "6L12", "5L23", "4T", "4L23", "3L29"], - airslash: ["7L45", "6L42", "5L42", "4L39"], - assurance: ["7E", "6E", "5E", "4E"], + agility: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], - autotomize: ["7L50", "6L39", "5L39"], - bravebird: ["7E", "6E", "5E", "4E"], + batonpass: ["7E", "6E", "5E", "4E"], + bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - curse: ["7E", "6E", "5E", "4E", "3E"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crushclaw: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E"], cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], + defog: ["7T"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drillpeck: ["7E", "6E", "5E", "5D", "4E", "3E"], - endure: ["7E", "6E", "5E", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "6L5", "6S2", "5L10", "5S2", "5S1", "4L10", "3L10", "3S0"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L20", "6L20", "5L20", "4L20"], - flash: ["6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7E", "6E", "5E", "4E"], + feint: ["7E", "6E", "5E", "4E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + firespin: ["7L19", "6L19", "5L25", "4L25", "3L25"], + flameburst: ["7L28", "7E", "6L28", "6E", "5E"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L46", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + focusenergy: ["7L32", "6L7", "6S2", "5L7", "5S2", "5S1", "4L7", "3L7", "3S0"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L17", "6L17", "5L17", "4L17", "3L26"], - furycutter: ["4T"], - guardswap: ["7E", "6E", "5E", "4E"], + growl: ["7L1", "6L1", "6S2", "5L1", "5S2", "5S1", "4L1", "3L1", "3S0"], + headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - metalclaw: ["7L9", "6L9"], - metalsound: ["7L42", "6L31", "5L31", "4L31", "3L45"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], + mirrormove: ["7L41", "6L37", "5L37", "4L37", "3L37"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightslash: ["7L53", "6L50", "5L50", "4L45"], - ominouswind: ["4T"], - payback: ["7M", "6M", "5M", "4M"], - peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - pluck: ["5M", "4M"], + nightslash: ["7E", "6E", "5E", "4E"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7L14", "6L14", "5L16", "4L16", "3L16"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L23", "6L23", "5L28", "4L28", "3L28"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roost: ["7M", "6M", "5T", "5D", "4M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L6", "6L6", "5L6", "4L6", "3L10"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L10", "6L10", "5L19", "4L19", "3L19"], + scratch: ["7L1", "6L1", "6S2", "5L1", "5S2", "5S1", "4L1", "3L1", "3S0"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - skydrop: ["7M", "6M", "5M"], - slash: ["7L39", "6L39", "5L45", "4L42"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L37", "6L34", "5L34", "4L34", "3L34"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spikes: ["7L28", "6L28", "5L28", "4L27", "3L42"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], - steelwing: ["7M", "7L34", "6M", "6L34", "5L34", "4M", "4L34", "3M", "3L32"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L23", "6L9", "5L9", "4T", "4L9", "3T", "3L13"], - swordsdance: ["7M", "6M", "5M", "4M"], - tailwind: ["6T", "5T", "4T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - whirlwind: ["7E", "6E", "5E", "4E", "3E"], - xscissor: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], }}, - houndour: {learnset: { + combusken: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L27", "4E", "3E"], - bite: ["7L16", "6L16", "5L16", "4L17", "3L25"], bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L31", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L28"], captivate: ["4M"], - charm: ["3S1"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - crunch: ["7L49", "6L49", "5L49", "4L48", "3L49"], - darkpulse: ["7M", "6M", "5T", "5D", "4M"], - destinybond: ["7E", "6E"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["7T"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], + doublekick: ["7L1", "6L16", "5L16", "4L16", "3L16"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L40"], - ember: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7E", "6E", "5E", "5D", "4E"], - feintattack: ["7L32", "6L32", "5L32", "4L35", "3L37", "3S1"], fireblast: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L28", "7E", "6L28", "6E", "5L28", "5E", "4L30", "4E"], - firespin: ["7E", "6E", "5E", "4E", "3E"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L43", "3M", "3L43"], - foulplay: ["7L40", "6T", "6L40", "5T", "5L40"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamecharge: ["7M", "7L20", "6M", "6L20", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7L58", "6L54", "5L54", "4L54"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L36", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L4", "6L4", "5L4", "5D", "4L4", "3L7", "3S0"], - hypervoice: ["6T", "5T"], + honeclaws: ["6M", "5M"], incinerate: ["6M", "5M"], - inferno: ["7L56", "6L56", "5L56"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + lastresort: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], + mirrormove: ["7L47", "6L43", "5L43", "4L43", "3L43"], mudslap: ["4T", "3T"], - nastyplot: ["7L52", "7E", "6L52", "6E", "5L52", "5E", "4L53", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], - odorsleuth: ["7L20", "6L20", "5L20", "4L22", "3L31"], overheat: ["7M", "6M", "5M", "4M", "3M"], - payback: ["7M", "6M", "5M", "4M"], + peck: ["7L14", "6L14", "5L17", "4L17", "3L17"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - punishment: ["7E", "6E", "5E", "4E"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], - rage: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L25", "6L25", "5L32", "4L32", "3L32"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - roar: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L14", "3M", "3L19", "3S1"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], + sandattack: ["7L10", "7L1", "6L1", "5L21", "4L21", "3L21"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skyuppercut: ["7L53", "6L50", "5L50", "4L50", "3L50"], + slash: ["7L42", "6L39", "5L39", "4L39", "3L39"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - smog: ["7L8", "6L8", "5L8", "4L9", "3L13"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7E", "6E", "5E", "4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7E", "6E", "5E", "4E"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], }}, - houndoom: {learnset: { + blaziken: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7L26", "6L26", "5L26", "4L28"], - bite: ["7L16", "6L16", "5L16", "4L17", "3L27"], + blastburn: ["7T", "6T", "5T", "4T"], + blazekick: ["7L1", "6L36", "5L36", "4L36", "3L36", "3S0"], bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], + bravebird: ["7L50", "6L49", "5L49", "4L49"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L31", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L28"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - crunch: ["7L56", "6L56", "5L56", "4L54", "3L59"], - darkpulse: ["7M", "6M", "6S0", "5T", "4M"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["7T"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], + doublekick: ["7L1", "6L16", "5L16", "4L16", "3L16"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L44"], - ember: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L35", "6L35", "5L35", "4L38", "3L43"], fireblast: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L30", "6L30", "5L30", "4L32"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L50", "6M", "6L50", "6S0", "5M", "5L50", "4M", "4L48", "3M", "3L51"], - foulplay: ["7L45", "6T", "6L45", "5T", "5L45"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + flamecharge: ["7M", "7L20", "6M", "6L20", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7L63", "7L1", "6L1", "5L66", "5S1", "4L66"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L37", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + highjumpkick: ["7L1", "6L1", "5L1", "5S1"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], incinerate: ["6M", "5M"], - inferno: ["7L65", "7L1", "6L1", "5L65"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], + mirrormove: ["3L49", "3S0"], mudslap: ["4T", "3T"], - nastyplot: ["7L60", "7L1", "6L1", "5L60", "4L60"], naturalgift: ["4M"], - nightmare: ["3T"], - odorsleuth: ["7L20", "6L20", "5L20", "4L22", "3L35"], overheat: ["7M", "6M", "5M", "4M", "3M"], - payback: ["7M", "6M", "5M", "4M"], + peck: ["7L14", "6L14", "5L17", "4L17", "3L17"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L25", "6L25", "5L32", "4L32", "3L32"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L14", "3M", "3L19"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + sandattack: ["7L10", "7L1", "6L1", "5L21", "4L21", "3L21"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skyuppercut: ["7L57", "6L57", "5L59", "4L59", "3L59", "3S0"], + slash: ["7L44", "6L42", "5L42", "4L42", "3L42", "3S0"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "6S0", "5M", "4M", "3M"], - smog: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L13"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "6S0", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stoneedge: ["7M", "6M", "5M", "5S1", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["7T", "6T", "5T", "5S1", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + vacuumwave: ["4T"], willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], }}, - phanpy: {learnset: { - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + mudkip: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], - bulldoze: ["7M", "6M", "5M"], + avalanche: ["7E", "6E", "5E"], + barrier: ["7E", "6E"], + bide: ["7L17", "6L15", "5L15", "4L15", "3L15"], + bite: ["7E", "6E", "5E", "4E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], captivate: ["4M"], - charm: ["7L33", "6L33", "5L33", "4L33"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L9"], - doubleedge: ["7L42", "6L42", "5L42", "4L42", "3T", "3L49"], + counter: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - endure: ["7L19", "6L19", "5L28", "4M", "4L28", "3T", "3L41"], + endeavor: ["7T", "7L44", "6T", "6L44", "5T", "5L46", "4T", "4L46", "3L46"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7E", "6E", "5E", "4E", "3E"], - flail: ["7L6", "6L6", "5L6", "5D", "4L6", "3L17"], - focusenergy: ["7E", "6E", "5E", "4E", "3E"], + foresight: ["7L12", "6L12", "5L19", "4L19", "3L19"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - gunkshot: ["6T", "5T", "4T"], + growl: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], - headsmash: ["7E", "6E", "5E", "4E"], - heavyslam: ["7E", "6E", "5E", "5D"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - iceshard: ["7E", "6E", "5E", "4E"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7L37", "6T", "6L37", "5T", "5L37", "4L37"], + hydropump: ["7L41", "6L41", "5L42", "4L42", "3L42"], + iceball: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mudslap: ["7E", "6E", "5E", "4T", "3T"], - naturalgift: ["7L15", "6L15", "5L19", "4M", "4L19"], - odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], - playrough: ["7E", "6E"], - protect: ["7M", "6M", "5M", "4M", "3M"], + mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["7L9", "6L6", "5L6", "5S1", "4T", "4L6", "3T", "3L6", "3S0"], + mudsport: ["7L20", "6L20", "5L24", "4L24", "3L24"], + naturalgift: ["4M"], + protect: ["7M", "7L28", "6M", "6L28", "5M", "5L37", "4M", "4L37", "3M", "3L37"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L25", "6L25"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L33"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "5D", "4T"], - slam: ["7L24", "6L24", "5L24", "4L24"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - stealthrock: ["6T", "5T", "4M"], + sludge: ["7E", "6E", "5E", "4E"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stomp: ["7E", "6E", "5E", "4E", "3E"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L28", "6L10", "5L10", "4L10", "3L25"], + tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + takedown: ["7L36", "6L28", "5L28", "4L28", "3L28"], toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7T", "7E", "6T", "6E", "5E", "4E", "3E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "6L4", "5L10", "5S1", "4L10", "3L10", "3S0"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L33", "4E", "3L33"], + wideguard: ["7E", "6E", "5E"], + workup: ["7M"], + yawn: ["7E", "6E", "5E", "4E"], }}, - donphan: {learnset: { + marshtomp: {learnset: { ancientpower: ["4T"], - assurance: ["7L15", "6L15", "5L31", "4L31"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + bide: ["7L18", "6L15", "5L15", "4L15", "3L15"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - brutalswing: ["7M"], - bulldoze: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L9"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L43", "6M", "6L43", "5M", "5L46", "4M", "4L46", "3M", "3L49"], + dynamicpunch: ["3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L48", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L46"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], + endeavor: ["7T", "7L52", "6T", "6L52", "5T", "5L53", "4T", "4L53", "3L53"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - flail: ["4L1", "3L17"], + fling: ["7M", "6M", "5M", "4M"], + foresight: ["7L12", "6L12", "5L20", "4L20", "3L20"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L1", "6L25", "5L25", "4L25", "3L25"], - gigaimpact: ["7M", "7L50", "6M", "6L50", "5M", "5L54", "4M", "4L54"], growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - gunkshot: ["6T", "5T", "4T"], - gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hornattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - irondefense: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["7L19", "6T", "6L10", "5T", "5L10", "4T", "4L10"], - lastresort: ["6T", "5T"], - magnitude: ["7L30", "6L19", "5L19", "4L19"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudbomb: ["7L22", "6L22", "5L25", "4L25"], + muddywater: ["7L38", "6L37", "5L37", "4L37", "3L37"], + mudshot: ["7L1", "6L16", "5L16", "4L16", "3L16"], + mudslap: ["7L9", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["3L25"], naturalgift: ["4M"], - odorsleuth: ["3L1"], - poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7L6", "6L6", "5L6", "4L6", "3L41"], + poweruppunch: ["6M"], + protect: ["7M", "7L32", "6M", "6L32", "5M", "5L42", "4M", "4L42", "3M", "3L42"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + rockslide: ["7M", "7L28", "6M", "6L28", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L33"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L37", "6L37", "5L39", "4L39"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - slam: ["7L24", "6L24", "5L24", "4L24"], + seismictoss: ["3T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L42", "6L31", "5L31", "4L31", "3L31"], toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M"], }}, - stantler: {learnset: { - astonish: ["7L7", "6L7", "5L7", "4L7", "3L11"], + swampert: {learnset: { + ancientpower: ["4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7E", "6E", "5E", "4E", "3E"], + avalanche: ["4M"], + bide: ["7L18", "6L15", "5L15", "4L15", "3L15"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L47"], - captivate: ["7L50", "6L50", "5L53", "4M", "4L49"], - chargebeam: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L23", "6L23", "5L23", "4L23", "3L41"], - disable: ["7E", "6E", "5E", "5D", "4E", "3E"], + counter: ["3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], - doublekick: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L51", "6M", "6L51", "5M", "5L52", "5S0", "4M", "4L52", "3M", "3L52"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L56", "6T", "6L56", "5T", "5L61", "4T", "4L61", "3L61"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - extrasensory: ["7E", "6E", "5E", "4E", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L12", "6L12", "5L20", "4L20", "3L20"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7L63", "7L1", "6L1", "5L69", "5S0", "4L69"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7L10", "6L10", "5L10", "4L10", "3L17"], - imprison: ["7L49", "6L49", "5L49", "4L43"], - irontail: ["6T", "5T", "4M", "3M"], - jumpkick: ["7L43", "6L43", "5L43"], - lastresort: ["6T", "5T", "4T"], - leer: ["7L3", "6L3", "5L3", "4L3", "3L7", "3S0"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magicroom: ["6T", "5T"], - mefirst: ["7L55", "7E", "7L1", "6L1", "6E", "5L55", "5E", "4L53"], - megahorn: ["7E", "6E", "5E", "4E"], + hydrocannon: ["7T", "6T", "5T", "4T"], + hydropump: ["5S0"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - mudslap: ["4T", "3T"], - mudsport: ["7E", "6E", "5E"], + mudbomb: ["7L22", "6L22", "5L25", "4L25"], + muddywater: ["7L39", "6L39", "5L39", "4L39", "3L39"], + mudshot: ["7L1", "6L16", "5L16", "4L16", "3L16"], + mudslap: ["7L9", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["3L25"], naturalgift: ["4M"], - nightmare: ["3T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - psyshock: ["7M", "6M", "5M"], - rage: ["7E", "6E", "5E"], + outrage: ["7T", "6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "7L32", "6M", "6L32", "5M", "5L46", "4M", "4L46", "3M", "3L46"], raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], roar: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L31"], + rockclimb: ["4M"], + rockslide: ["7M", "7L28", "6M", "6L28", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sandattack: ["7L16", "6L16", "5L16", "4L16", "3L27"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "5D", "4M", "3M"], + seismictoss: ["3T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - stomp: ["7L13", "6L13", "5L13", "4L13", "3L21"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - takedown: ["7L21", "6L21", "5L21", "4L21", "3L37"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7E", "6E", "5E", "4E"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L44", "6L31", "5L31", "4L31", "3L31"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["7L38", "7E", "6T", "6L38", "6E", "5T", "5L38", "5E", "4T", "4L38", "4E"], - }}, - smeargle: {learnset: { - captivate: ["5D"], - falseswipe: ["5S1"], - meanlook: ["5S1"], - odorsleuth: ["5S1"], - sketch: ["7L91", "7L81", "7L71", "7L61", "7L51", "7L41", "7L31", "7L21", "7L11", "7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - sleeptalk: ["5D"], - spore: ["5S1"], + uproar: ["7T", "6T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M"], }}, - miltank: {learnset: { - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "6S0", "5M", "4M", "3M"], - belch: ["7E", "6E"], - bide: ["7L15", "6L15", "5L15", "4L15", "3L26"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], - bodyslam: ["7L24", "6L24", "5L24", "4L24", "3T", "3L43"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + poochyena: {learnset: { + assurance: ["7L22", "6L22", "5L29", "4L29"], + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "6L10", "5L13", "4L13", "3L13"], + bodyslam: ["3T"], + captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - curse: ["7E", "6E", "5E", "5D", "4E", "3E"], - defensecurl: ["7L5", "6L5", "5L5", "5D", "4L5", "3T", "3L8"], - dizzypunch: ["7E", "6E", "5E", "4E"], - doubleedge: ["7E", "6E", "5E", "4E", "3T"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], + crunch: ["7L34", "6L37", "5L53", "4L53", "3L41"], + darkpulse: ["7M", "6M", "5D", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M", "3S0"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + embargo: ["7M", "7L28", "6M", "6L28", "5M", "5L41", "4M", "4L41"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L3", "6L3", "5L3", "4L3", "3L4"], - gyroball: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], - hammerarm: ["7E", "6E", "5E", "4E"], headbutt: ["4T"], - healbell: ["7L48", "6T", "6L48", "5T", "5L48", "4T", "4L48", "3L53"], - heartstamp: ["7E", "6E", "5E"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + healbell: ["3S0"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "5D", "4M", "3M"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], - milkdrink: ["7L11", "6L11", "6S0", "5L11", "4L11", "3L19"], + howl: ["7L4", "6L4", "5D", "5L5", "4L5", "3L5", "3S0"], + hypervoice: ["7T", "6T", "5T"], + icefang: ["7E", "6E", "5E", "4E"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + leer: ["7E", "6E", "5E", "4E", "3E"], + mefirst: ["7E", "6E", "5E", "4E"], mimic: ["3T"], mudslap: ["4T", "3T"], - naturalgift: ["7E", "6E", "5E", "4M"], - poweruppunch: ["6M"], - present: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L46", "7E", "6E"], + poisonfang: ["7E", "6E", "5D", "5E", "4E", "3E", "3S0"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - punishment: ["7E", "6E", "5E", "4E"], + psychup: ["3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + roar: ["7M", "7L16", "6M", "6L16", "5M", "5L21", "4M", "4L21", "3M", "3L21"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L19", "6L19", "6S0", "5L19", "4T", "4L19", "3T", "3L34"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L7", "6L7", "5L9", "4L9", "3L9"], + scaryface: ["7L25", "6L25", "5L33", "4L33", "3L29"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7E", "6E", "5E", "4E", "3T", "3E"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], - stomp: ["7L8", "6L8", "6S0", "5L8", "4L8", "3L13"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L43", "7E", "6L40", "6E", "5L49", "5E", "4T", "4L49", "4E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7L19", "6M", "6L19", "5M", "5L25", "4M", "4L25", "3T", "3L25"], tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7L40", "6L34", "5L45", "4L45", "3L33"], + taunt: ["7M", "7L31", "6M", "6L31", "5M", "5L37", "4M", "4L37", "3M", "3L37"], + thief: ["7M", "6M", "5M", "4M", "3M", "3L45"], + thunderfang: ["7E", "6E", "5E", "4E"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - wakeupslap: ["7L50", "6L50", "5L55", "4L55"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - workup: ["7M", "5M"], - zenheadbutt: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + uproar: ["7T", "6T", "5T", "4T"], + yawn: ["7L37", "7E", "6E", "5E", "4E", "3E"], }}, - raikou: {learnset: { - aurasphere: ["4S3"], - bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mightyena: {learnset: { + assurance: ["7L24", "6L24", "5L32", "4L32"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], - chargebeam: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L43", "6L43", "5L43", "4L43", "3L61", "3S1"], - cut: ["6M", "5M", "4M", "3M"], + counter: ["3T"], + covet: ["7T", "6T", "5T"], + crunch: ["7L40", "7L1", "7S0", "6L1", "3L47"], + darkpulse: ["7M", "6M", "5T", "4M"], dig: ["6M", "5M", "4M", "3M"], - discharge: ["7L57", "7L1", "6L1", "5L57", "4L57"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L32", "6M", "6L32", "5M", "5L47", "4M", "4L47"], endure: ["4M", "3T"], - extrasensory: ["7L64", "7L1", "6L1", "5L64", "4L64"], - extremespeed: ["4S3"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + firefang: ["7L1", "7S0"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], + hypervoice: ["7T", "6T", "5T"], + icefang: ["7L1", "7S0"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L56"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quash: ["7M", "6M", "5M"], - quickattack: ["7L22", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], - raindance: ["7M", "7L71", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M"], - reflect: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], - rockclimb: ["4M"], + roar: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L22", "3M", "3L22"], rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + scaryface: ["7L28", "6L28", "5L37", "4L37", "3L32"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L29", "6L29", "5L29", "4L29", "4S2", "3L41", "3S0", "3S1"], + snarl: ["7M", "7L1", "6M", "6L18", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L52", "6L48", "5L62", "4T", "4L62"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - thunder: ["7M", "7L85", "6M", "6L85", "5M", "5L85", "4M", "4L71", "3M", "3L71"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L50", "6L50", "5L50", "4L50"], - thundershock: ["7L8", "6L8", "5L8", "4L8", "3L11", "3S0"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7L20", "6M", "6L20", "5M", "5L27", "4M", "4L27", "3T", "3L27"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L48", "6L40", "5L52", "4L52", "3L37"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L42", "4M", "4L42", "3M", "3L42"], + thief: ["7M", "7L1", "6M", "6L1", "5M", "5L57", "4M", "4L57", "3M", "3L52"], + throatchop: ["7T"], + thunderfang: ["7L1", "7S0"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - voltswitch: ["7M", "6M", "5M"], - weatherball: ["4S3"], - wildcharge: ["7M", "6M", "5M"], - zapcannon: ["4S3"], + uproar: ["7T", "6T", "5T", "4T"], + yawn: ["7L44"], }}, - entei: {learnset: { - bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + zigzagoon: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L12", "6L11"], + bellydrum: ["7L37", "6L37", "5L45", "4L41", "3L41"], + bestow: ["7L25", "6L25", "5L33"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], - crushclaw: ["4S3"], + covet: ["7T", "7L23", "6T", "6L23", "5T", "5L29", "4L29", "3L29"], cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - ember: ["7L8", "6L8", "5L8", "4L8", "3L11", "3S0"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], - eruption: ["7L85", "7L1", "6L1", "5L85", "4L85"], - extrasensory: ["7L64", "7L1", "6L1", "5L64", "4L64"], - extremespeed: ["4S3"], + extremespeed: ["7E", "3S1"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7L71", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L71"], - firefang: ["7L50", "6L50", "5L50", "4L50"], - firespin: ["7L22", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], - flareblitz: ["4S3"], - flash: ["6M", "5M", "4M", "3M"], + flail: ["7L29", "6L29", "5L37", "4L33", "3L33"], + fling: ["7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L45"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], + furycutter: ["4T", "3T"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7L11", "6L9", "5L9", "4T", "4L9", "3L9"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["4S3"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - lavaplume: ["7L57", "7L1", "6L1", "5L57", "4L57"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + honeclaws: ["6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5D", "5T", "4T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + mudsport: ["7L17", "6L17", "5L21", "4L21", "3L21"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + pinmissile: ["7L19", "6L19", "5L25", "4L25", "3L25"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quash: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L35", "6M", "6L35", "5M", "5L41", "4M", "4L37", "3M", "3L37"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], - rockclimb: ["4M"], + rockclimb: ["7E", "6E", "5E"], rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sacredfire: ["7L1", "6L1"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L7", "6L7", "5L13", "4L13", "3L13"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stomp: ["7L29", "6L29", "5L29", "4L29", "4S2", "3L41", "3S0", "3S1"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + simplebeam: ["7E", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3T", "3L61", "3S1"], + superfang: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1", "3S1", "3S0"], + tailwhip: ["7L5", "6L5", "5L5", "4L5", "3L5", "3S1", "3S0"], + takedown: ["7L31", "6L31"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["7E", "6E", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], + trick: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], }}, - suicune: {learnset: { - airslash: ["4S3"], - aquaring: ["4S3"], - aurorabeam: ["7L29", "6L29", "5L29", "4L29", "4S2", "3L41", "3S0", "3S1"], - avalanche: ["4M"], - bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], - blizzard: ["7M", "7L85", "6M", "6L85", "5M", "5L85", "4M", "4L85", "3M"], + linoone: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["6S0"], + bellydrum: ["7L43", "6L43", "5L59", "4L53", "3L53"], + bestow: ["7L27", "6L27", "5L41"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brine: ["4M"], - bubblebeam: ["7L8", "7L1", "6L8", "5L8", "4L8", "3L11", "3S0"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], + covet: ["7T", "7L24", "6T", "6L24", "5T", "5L35", "4L35", "3L35"], cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], dig: ["6M", "5M", "4M", "3M"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], + doubleedge: ["7L35", "6L35", "3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], - extrasensory: ["7L64", "6L1", "5L64", "4L64"], - extremespeed: ["4S3"], + extremespeed: ["6S0"], facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L48", "6M", "6L48", "5M", "5L65", "4M", "4L59"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L19", "6L19", "5L29", "4L29", "3L29"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L22", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], - hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["7L11", "6L1", "5L1", "4T", "4L1", "3L1"], + helpinghand: ["7T", "6T", "6S0", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L71", "6L1", "5L71", "4L71", "3L71"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7L50", "6L50", "5L50", "4L50"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mirrorcoat: ["7L43", "6L43", "5L43", "4L43", "3L61", "3S1"], - mist: ["7L36", "6L36", "5L36", "4L36", "4S2", "3L51", "3S1"], mudslap: ["4T", "3T"], + mudsport: ["7L17", "6L17", "5L23", "4L23", "3L23"], naturalgift: ["4M"], - ominouswind: ["4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quash: ["7M", "6M", "5M"], - raindance: ["7M", "7L15", "7L1", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + playrough: ["7L1", "6L1"], + protect: ["7M", "6M", "6S0", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L40", "6M", "6L40", "5M", "5L53", "4M", "4L47", "3M", "3L47"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L13", "4L13", "3L13"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M"], - sheercold: ["7L1", "4S3"], - signalbeam: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + slash: ["7L32", "6L32", "5L47", "4L41", "3L41"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tailwind: ["7L57", "6T", "6L1", "5T", "5L57", "4T", "4L57"], + switcheroo: ["7L1", "6L1", "5L1", "4L1"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], + workup: ["7M", "5M"], }}, - larvitar: {learnset: { - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], - assurance: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L1", "6L1", "5L1", "5S1", "5D", "4L1", "3L1", "3S0"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], + wurmple: {learnset: { + bugbite: ["7T", "7L15", "6T", "6L15", "5D", "5T", "5L15", "4T", "4L15"], + electroweb: ["7T", "6T", "5T"], + poisonsting: ["7L5", "6L5", "5D", "5L5", "4L5", "3L5"], + snore: ["7T", "6T", "5D", "5T", "4T"], + stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + silcoon: {learnset: { + bugbite: ["7T", "6T", "5T", "4T"], + electroweb: ["7T", "6T", "5T"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + irondefense: ["7T", "6T", "5T", "4T"], + stringshot: ["4T"], + }}, + beautifly: {learnset: { + absorb: ["7L12", "6L1", "5L1", "4L1", "3L1"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L20", "6L20", "4T"], + attract: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L35", "6L35", "5L41", "4L41"], captivate: ["4M"], - chipaway: ["7L14", "6L14", "5L14"], confide: ["7M", "6M"], - crunch: ["7L41", "6L41", "5L41", "4L37", "3L43"], - curse: ["7E", "6E", "5E", "4E", "3E"], - darkpulse: ["7M", "7L32", "6M", "6L32", "5T", "5L32", "5D", "4M", "4L28"], - dig: ["6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragondance: ["7E", "6E", "5E", "4E", "3E", "3S0"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L41", "3M", "3L50"], + electroweb: ["7T", "6T", "5T"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - focusenergy: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + gigadrain: ["7T", "7L32", "6T", "6L32", "5T", "5L38", "4M", "4L38", "3M", "3L38"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L1", "5L13", "4L13", "3L13"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L55", "6M", "6L55", "5M", "5L55", "4M", "4L50", "3M", "3L57"], - irondefense: ["7E", "6T", "6E", "5T", "5E", "4E"], - ironhead: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - leer: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + laserfocus: ["7T"], + megadrain: ["7L22", "6L22", "5L24", "4L24", "3L24"], mimic: ["3T"], - mudslap: ["4T", "3T"], + morningsun: ["7L17", "6L17", "5L20", "4L20", "3L20"], naturalgift: ["4M"], - outrage: ["7E", "6T", "6E", "5T", "5E", "4E", "3E", "3S0"], - payback: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L32"], - poweruppunch: ["6M"], + ominouswind: ["4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + quiverdance: ["7L40", "6L40", "5L45"], + rage: ["7L37", "6L37"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L14", "3T", "3L22"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L5", "6M", "6L5", "5M", "5L5", "5S1", "4M", "4L5", "3M", "3L8", "3S0"], - scaryface: ["7L23", "6L23", "5L23", "4L19", "3L36"], - screech: ["7L10", "6L10", "5L10", "4L10", "3L15"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["7L25", "6L25", "5L34", "4M", "4L34", "3L34"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "5D", "4M"], - stomp: ["7E", "6E", "5E", "4E", "3E"], - stoneedge: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L46"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L15", "6L15", "5L17", "4L17", "3L17"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "5S1", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L28", "6L28", "5L28", "4L23", "3L29"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + whirlwind: ["7L30", "6L27", "5L27", "4L27", "3L27"], }}, - pupitar: {learnset: { - ancientpower: ["4T"], + cascoon: {learnset: { + bugbite: ["7T", "6T", "5T", "4T"], + electroweb: ["7T", "6T", "5T"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + irondefense: ["7T", "6T", "5T", "4T"], + stringshot: ["4T"], + }}, + dustox: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L35", "6L35", "5L41", "4L41"], captivate: ["4M"], - chipaway: ["7L14", "6L14", "5L14"], confide: ["7M", "6M"], - crunch: ["7L47", "6L47", "5L47", "4L41", "3L47"], - darkpulse: ["7M", "7L34", "6M", "6L34", "5T", "5L34", "4M", "4L28"], - dig: ["6M", "5M", "4M", "3M"], + confusion: ["7L12", "6L1", "5L1", "4L1", "3L1"], + defog: ["7T", "4M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L47", "3M", "3L56"], + electroweb: ["7T", "6T", "5T"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L1", "5L13", "4L13", "3L13"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L67", "4M", "4L60", "3M", "3L65"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], mimic: ["3T"], - mudslap: ["4T", "3T"], + moonlight: ["7L17", "6L17", "5L20", "4L20", "3L20"], naturalgift: ["4M"], - outrage: ["6T", "5T"], - payback: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L34"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + ominouswind: ["4T"], + poisonpowder: ["7L15", "6L15"], + protect: ["7M", "7L37", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L17"], + psybeam: ["7L22", "6L22", "5L24", "4L24", "3L24"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + quiverdance: ["7L40", "6L40", "5L45"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L14", "3T", "3L22"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - scaryface: ["7L23", "6L23", "5L23", "4L19", "3L38"], - screech: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["7L25", "6L25", "5L34", "4M", "4L34", "3L34"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "7L60", "6M", "6L60", "5M", "5L60", "4M", "4L54"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L28", "6L28", "5L28", "4L23", "3L29"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L38", "4M", "4L38", "3M", "3L38"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "7L20", "6M", "6L20", "5M"], + whirlwind: ["7L30", "6L27", "5L27", "4L27", "3L27"], }}, - tyranitar: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], + lotad: {learnset: { + absorb: ["7L6", "6L5", "5D", "5L5", "4L5", "3L7", "3S0"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], + bubble: ["7L9", "6L9"], + bubblebeam: ["7L21", "6L21", "5L25", "4L25"], + bulletseed: ["4M", "3M"], captivate: ["4M"], - chipaway: ["7L14", "6L14", "5L14"], confide: ["7M", "6M"], - counter: ["3T"], - crunch: ["7L47", "6L47", "6S3", "6S4", "6S5", "6S6", "5L47", "5S1", "5S2", "4L41", "3L47", "3S0"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "7L34", "6M", "6L34", "5T", "5L34", "4M", "4L28"], - dig: ["6M", "5M", "4M", "3M"], + counter: ["7E", "6E", "5E", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "6M", "5M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L54", "6M", "6L54", "6S3", "6S4", "5M", "5L54", "5S2", "4M", "4L47", "3M", "3L61", "3S0"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], + energyball: ["7M", "7L36", "6M", "6L36", "5M", "5L45", "4M", "4L43"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "5S1", "4M", "3M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigaimpact: ["7M", "7L82", "6M", "6L82", "5M", "5L82", "4M"], + gigadrain: ["7T", "7L30", "7E", "6T", "6L30", "6E", "5T", "5E", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L3", "6L3", "5L3", "4L3", "3L3", "3S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L73", "6M", "6L73", "5M", "5L73", "4M", "4L70", "3M", "3L75"], - icebeam: ["7M", "6M", "5M", "5S1", "4M", "3M"], - icefang: ["7L1", "6L1", "5L1", "4L1"], - icepunch: ["6T", "6S3", "6S6", "5T", "4T"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "6S5", "6S6", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + leechseed: ["7E", "6E", "5D", "5E", "4E", "3E"], + megadrain: ["7L18", "6L18", "5L19", "4L19", "3L43"], mimic: ["3T"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - nightmare: ["3T"], - outrage: ["6T", "5T", "4T"], - payback: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "5S2", "4M", "4L34"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "6S5", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + mist: ["7L15", "6L11", "5L11", "4L11", "3L21"], + naturalgift: ["7L12", "6L12", "5L15", "4M", "4L15"], + naturepower: ["7M", "7L24", "6M", "6L7", "5L7", "4L7", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L27", "6M", "6L27", "5M", "5L37", "4M", "4L35", "3M", "3L31"], + razorleaf: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L19", "6M", "6L19", "6S4", "6S5", "6S6", "5M", "5L19", "4M", "4L14", "3T", "3L22"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - scaryface: ["7L23", "6L23", "5L23", "4L19", "3L38", "3S0"], - screech: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["5S2", "3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "7L63", "6M", "6L63", "6S3", "6S4", "5M", "5L63", "5S1", "4M", "4L54"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L28", "6L28", "5L28", "4L23", "3L29", "3S0"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], + sweetscent: ["7E", "6E", "5E", "4E", "3E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + teeterdance: ["7E", "6E", "5E"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + watergun: ["7E", "6E", "5E", "4E", "3E"], + waterpulse: ["7T", "6T", "5D", "4M", "3M"], whirlpool: ["4M"], + zenheadbutt: ["7T", "7L33", "6T", "6L31", "5T", "5L31", "4T", "4L27"], }}, - lugia: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - aeroblast: ["7L43", "6L43", "6S5", "6S6", "5L43", "4L43", "4S2", "4S3", "3L77"], - aircutter: ["4T"], - ancientpower: ["7L57", "6L57", "5L57", "4T", "4L57", "4S3", "3L88"], - aquatail: ["6T", "5T", "4T"], - avalanche: ["4M"], + lombre: {learnset: { + absorb: ["7L6", "6L5", "5L5", "4L5", "3L7"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brine: ["4M"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93", "3M"], - chargebeam: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L9", "6L9"], + bubblebeam: ["7L24", "6L24", "5L25", "4L25"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], - dragonrush: ["7L15", "6L15", "6S6", "5L15", "4L15"], - dragontail: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M", "3S1"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["3T"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], - extrasensory: ["7L23", "6L23", "5L23", "4L23", "4S2"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - featherdance: ["3S1"], - flash: ["6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L16", "6L11", "5L11", "4L11", "3L19"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L79", "6L79", "5L79", "4L79", "3L99"], - gigadrain: ["6T", "5T", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L9", "6L9", "5L9", "4L9", "3L22"], + furyswipes: ["7L12", "6L12", "5L15", "4L15", "3L25"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L3", "6L3", "5L3", "4L3", "3L3"], hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L37", "6L37", "6S5", "6S6", "5L37", "4L29", "4S2", "3L44", "3S0", "3S1"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icebeam: ["7M", "6M", "6S6", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L44", "6L44", "5L45", "4L43", "3L49"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "7L36", "6T", "6L36"], mimic: ["3T"], mudslap: ["4T", "3T"], - naturalgift: ["7L85", "6L85", "5L85", "4M", "4L51"], - nightmare: ["3T"], - ominouswind: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "7L28", "6M", "6L7", "5L7", "4L7", "3L13"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychoboost: ["3S1"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - punishment: ["7L50", "6L50", "6S5", "5L50", "4L50", "4S3"], - raindance: ["7M", "7L29", "6M", "6L29", "6S5", "5M", "5L29", "4M", "4L29", "4S2", "3M", "3L55", "3S0"], - recover: ["7L71", "6L71", "5L71", "4L23", "3L33", "3S0"], - reflect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S3", "3M", "3L11"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - skyattack: ["7L99", "6T", "6L99", "5T", "5L99", "4T", "4L99"], - skydrop: ["7M", "6M", "5M"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "4L43", "3T", "3L66", "3S0"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M", "3L37"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - twister: ["4T"], + uproar: ["7T", "7L32", "6T", "6L32", "5T", "5L37", "4T", "4L35", "3L43"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - weatherball: ["7L1", "6L1", "5L1", "5S4", "4L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + watersport: ["7L20", "6L19", "5L19", "4L19", "3L31"], whirlpool: ["4M"], - whirlwind: ["7L1", "6L1", "5L1", "5S4", "4L1", "3L1"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "7L40", "6T", "6L31", "5T", "5L31", "4T", "4L27"], }}, - hooh: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["4T"], - ancientpower: ["7L57", "6L57", "5L57", "4T", "4L57", "4S2", "3L88"], - bravebird: ["7L15", "7S6", "6L15", "6S5", "5L15", "4L15"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93", "3M"], - celebrate: ["6S5"], - chargebeam: ["7M", "6M", "5M", "4M"], + ludicolo: {learnset: { + absorb: ["3L1"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], + counter: ["3T"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["3T"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], - extrasensory: ["7L23", "6L23", "5L23", "4L23", "4S1"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7L37", "6M", "6L37", "6S4", "5M", "5L37", "4M", "4L29", "4S1", "3M", "3L44", "3S0"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["5S0"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], flash: ["6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L79", "6L79", "5L79", "4L79", "3L99"], - gigadrain: ["6T", "5T", "4M", "3M"], + gigadrain: ["7T", "6T", "5T", "5S1", "5S0", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L9", "6L9", "5L9", "4L9", "3L22"], - heatwave: ["6T", "5T", "4T"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["5S0"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "5M", "5S1", "5S0", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "6T"], + megadrain: ["7L1", "6L1", "5L1", "4L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - naturalgift: ["7L85", "6L85", "5L85", "4M", "4L51"], - nightmare: ["3T"], - ominouswind: ["4T"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - pluck: ["5M", "4M"], + naturalgift: ["4M"], + naturepower: ["7M", "7L1", "6M", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - punishment: ["7L50", "6L50", "6S4", "5L50", "4L50", "4S2"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L71", "7S6", "6L71", "6S5", "5L71", "4L23", "3L33", "3S0"], - reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], rocksmash: ["6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sacredfire: ["7L43", "7S6", "6L43", "6S4", "6S5", "5L43", "4L43", "4S1", "4S2", "3L77"], - safeguard: ["7M", "7L65", "7S6", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S2", "3M", "3L11"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M", "5S1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skyattack: ["7L99", "6T", "6L99", "5T", "5L99", "4T", "4L99", "3T"], - skydrop: ["7M", "6M", "5M"], + seedbomb: ["7T", "6T", "5T", "4T"], + seismictoss: ["3T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - steelwing: ["7M", "6M", "4M", "3M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L29", "6M", "6L29", "6S4", "5M", "5L29", "4M", "4L29", "4S1", "3M", "3L55", "3S0"], + sunnyday: ["7M", "6M", "5M", "5S1", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "4L43", "3T", "3L66", "3S0"], - tailwind: ["6T", "5T", "4T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - weatherball: ["7L1", "6L1", "5L1", "5S3", "4L1"], - whirlwind: ["7L1", "6L1", "5L1", "5S3", "4L1", "3L1"], - willowisp: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - celebi: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28", "3L20", "3S1", "3S3"], - batonpass: ["7L37", "6L37", "5L37", "4L37", "3L40", "3S1"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - chargebeam: ["7M", "6M", "5M", "4M"], + seedot: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + bodyslam: ["3T"], + bulletseed: ["7E", "6E", "5D", "5E", "4M", "3M", "3S1"], + captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "6S6", "5L1", "4L1", "3L1", "3S0"], - cut: ["6M", "5M", "4M", "3M"], - dazzlinggleam: ["7M", "6M"], defensecurl: ["3T"], + defog: ["7T", "7E", "6E", "5E"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthpower: ["6T", "5T", "4T"], - echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7L33", "6M", "6L33", "5M", "5L43", "4M", "4L43", "3T", "3L43"], facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4E", "3E"], flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], + foulplay: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L64", "6L64", "5L64", "4L64", "3L30", "3S1", "3S3"], - gigadrain: ["6T", "5T", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "6T", "5T", "4M", "3M", "3S1"], grassknot: ["7M", "6M", "5M", "4M"], - healbell: ["7L1", "6T", "6L1", "6S5", "6S6", "5T", "5L1", "4T", "4L1", "3L1", "3S0", "3S2", "3S3"], - healblock: ["7L55", "6L55", "5L55", "4L55"], - healingwish: ["7L73", "6L73", "5L73", "4L73", "4S4"], - helpinghand: ["6T", "5T", "4T"], + grassyterrain: ["7E", "6E"], + growth: ["7L9", "6L7", "5D", "5L7", "4L7", "3L7", "3S0"], + harden: ["7L3", "6L3", "5L3", "4L3", "3L3", "3S0"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - holdback: ["6S5"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - leafstorm: ["7L82", "6L82", "5L82", "4L82", "4S4"], - leechseed: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S2"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magicalleaf: ["7L19", "6L19", "5L19", "4L19"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - metronome: ["3T"], + leechseed: ["7E", "6E", "5E", "4E", "3E"], mimic: ["3T"], - mudslap: ["4T", "3T"], - nastyplot: ["4S4"], - naturalgift: ["7L46", "6L46", "5L46", "4M", "4L46"], - naturepower: ["7M", "6M"], - nightmare: ["3T"], - perishsong: ["7L91", "6L91", "5L91", "4L91", "3L50", "3S1"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + naturepower: ["7M", "7L15", "6M", "6L13", "5L13", "4L13", "3L13"], + powerswap: ["7E", "6E", "5E", "4E"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L1", "6L1", "6S5", "6S6", "5L1", "4L1", "4S4", "3L1", "3S0", "3S2"], - reflect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], + refresh: ["3S1"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L10", "6M", "6L10", "6S5", "6S6", "5M", "5L10", "4M", "4L10", "3M", "3L10", "3S0", "3S2", "3S3"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + secretpower: ["6M", "4M", "3M", "3S1"], + seedbomb: ["7T", "6T", "5T", "4T"], + selfdestruct: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["4M"], - skillswap: ["6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thunderwave: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L21"], + takedown: ["7E", "6E", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], - wonderroom: ["6T", "5T"], - worryseed: ["6T", "5T", "4T"], - zenheadbutt: ["6T", "5T", "4T"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, - treecko: {learnset: { - absorb: ["7L5", "6L5", "5L6", "5S1", "4L6", "3L6", "3S0"], - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L25", "6L25", "5L31", "4L31", "3L31"], + nuzleaf: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulletseed: ["7E", "6E", "5E", "4M", "3M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - crunch: ["7E", "6E", "5E", "4E", "3E"], - crushclaw: ["7E", "6E", "5E", "4E", "3E"], cut: ["6M", "5M", "4M", "3M"], - detect: ["7L33", "6L33", "5L41", "4L41", "3L41"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + defog: ["7T"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doublekick: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonbreath: ["7E", "6E", "5E", "4E", "3E"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["3T"], - endeavor: ["7L45", "7E", "6T", "6L45", "6E", "5T", "5E", "4T", "4E", "3E"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], - energyball: ["7M", "7L37", "6M", "6L37", "5M", "5L51", "4M", "4L51"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + extrasensory: ["7L36", "6L36", "5L49", "4L49", "3L49"], facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L12", "6L12", "5L19", "4L19", "3L19"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L24", "6L24", "5L31", "4L31", "3L31"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], - gigadrain: ["7L21", "6T", "6L21", "5T", "5L46", "4M", "4L46", "3M", "3L46"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], grassknot: ["7M", "6M", "5M", "4M"], - grasspledge: ["7T", "6T", "5T"], - grasswhistle: ["7E", "6E", "5E", "4E"], - grassyterrain: ["7E", "6E"], + growth: ["7L6", "6L6", "5L7", "4L7", "3L7"], + harden: ["7L3", "6L3", "5L3", "4L3", "3L3"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - leafstorm: ["7E", "6E", "5E", "4E"], - leechseed: ["7E", "6E", "5E", "4E", "3E"], - leer: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], - lowkick: ["6T", "5T", "4T"], - magicalleaf: ["7E", "6E", "5E", "4E"], - megadrain: ["7L13", "6L13", "5L26", "4L26", "3L26"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leafblade: ["7L28", "6L28"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], megakick: ["3T"], - megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - mudsport: ["7E", "6E", "5E", "4E", "3E"], - naturalgift: ["7E", "6E", "5E", "4M"], - naturepower: ["7M", "6M"], - pound: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + naturalgift: ["4M"], + naturepower: ["7M", "7L16", "6M", "6L9", "5L13", "4L13", "3L13"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L17", "6L16", "5L16", "4L16", "3L16"], - quickattack: ["7L9", "6L9", "5L11", "4L11", "3L11"], - quickguard: ["7L41", "6L41"], - razorwind: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + razorleaf: ["7L1", "6L1", "5L1", "4L1"], + razorwind: ["7L20", "6L20", "5L37", "4L37", "3L37"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - screech: ["7L49", "6L21", "5L21", "4L21", "3L21"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - seismictoss: ["3T"], - slam: ["7L29", "6L29", "5L36", "4L36", "3L36"], + seedbomb: ["7T", "6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "7L32", "6M", "6L32", "5M", "5L43", "4M", "4L43", "3T", "3L43"], swift: ["4T", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - thunderpunch: ["6T", "5T", "4T", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "7L9", "6M", "6L16", "5M", "5L25", "4M", "4L25", "3M", "3L25"], toxic: ["7M", "6M", "5M", "4M", "3M"], - workup: ["7M"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - grovyle: {learnset: { - absorb: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - acrobatics: ["7M", "6M", "5M"], + shiftry: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L28", "6L28", "5L35", "4L35", "3L35"], + aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], cut: ["6M", "5M", "4M", "3M"], - detect: ["7L38", "6L38", "5L47", "4L47", "3L47"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + defog: ["7T", "4M"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["3T"], - endeavor: ["6T", "5T", "4T"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L48", "6M", "6L48", "5M", "5L53", "4M", "4L53", "3L53"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L1", "6L1", "5L1", "4L1"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focusblast: ["7M", "6M", "5M", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L1", "6L16", "5L16", "4T", "4L16", "3T", "3L16"], - gigadrain: ["6T", "5T", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - grasspledge: ["7T", "6T", "5T"], + growth: ["3L1"], + harden: ["3L1"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - leafblade: ["7L23", "6L23", "5L29", "4L29", "3L29"], - leafstorm: ["7L58", "6L58", "5L59", "4L59"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], + hurricane: ["7L32", "6L32"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + leafstorm: ["7L44", "6L44", "5L49", "4L49"], + leaftornado: ["7L20", "6L19", "5L19"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - megadrain: ["7L13", "6L13"], megakick: ["3T"], - megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], + nastyplot: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + naturepower: ["7M", "6M", "3L1"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["3L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L18", "6L17", "5L17", "4L17", "3L17"], - quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - quickguard: ["7L53", "6L53"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + razorleaf: ["7L1", "6L1", "5L1", "4L1"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - screech: ["7L63", "6L23", "5L23", "4L23", "3L23"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - seismictoss: ["3T"], - slam: ["7L33", "6L33", "5L41", "4L41", "3L41"], + seedbomb: ["7T", "6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + silverwind: ["4M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thunderpunch: ["6T", "5T", "4T", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - workup: ["7M"], - worryseed: ["6T", "5T", "4T"], - xscissor: ["7M", "7L43", "6M", "6L43", "5M", "4M"], + twister: ["4T"], + whirlwind: ["7L1", "6L1", "5L1", "4L1"], + worryseed: ["7T", "6T", "5T", "4T"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - sceptile: {learnset: { - absorb: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L28", "6L28", "5L35", "4L35", "3L35"], + taillow: {learnset: { + aerialace: ["7M", "7L21", "6M", "6L21", "5M", "5L34", "4M", "4L34", "3M", "3L34"], + agility: ["7L29", "6L29", "5L43", "4L43", "3L43"], + aircutter: ["4T"], + airslash: ["7L33", "6L33", "5L53", "4L53"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], - bulletseed: ["4M", "3M"], + boomburst: ["7E", "6E"], + bravebird: ["7L41", "7E", "6L41", "6E", "5D", "5E", "4E"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - detect: ["7L39", "6L39", "5L51", "4L51", "3L51"], - dig: ["6M", "5M", "4M", "3M"], + defog: ["7T", "7E", "6E", "5E", "4M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "5S0", "4M"], - drainpunch: ["6T", "5T", "4M"], - dualchop: ["7L1", "6T", "6L36"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + doubleteam: ["7M", "7L17", "6M", "6L17", "5M", "5L19", "4M", "4L19", "3M", "3L19"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L37", "6T", "6L26", "5T", "5L26", "4T", "4L26", "3L26"], + endure: ["5D", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L51", "6M", "6L51", "5M", "5L59", "4M", "4L59", "3L59"], - flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "5S0", "4M"], - focuspunch: ["6T", "4M", "3M"], - frenzyplant: ["7T", "6T", "5T", "4T"], + featherdance: ["3S0"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L5", "6L4", "5L4", "4L4", "3L4", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7E"], + mimic: ["3T"], + mirrormove: ["7E", "6E", "5D", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L9", "6L7", "5L8", "4L8", "3L8"], + quickguard: ["7L25", "6L25"], + rage: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L45"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7T", "7E", "6T", "6E", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7E", "6E", "5E", "4E"], + wingattack: ["7L13", "6L13", "5L13", "4L13", "3L13"], + workup: ["7M", "5M"], + }}, + swellow: {learnset: { + aerialace: ["7M", "7L21", "6M", "6L21", "5M", "5L38", "4M", "4L38", "3M", "3L38"], + agility: ["7L33", "6L33", "5L49", "4L49", "3L49", "3S0"], + aircutter: ["4T"], + airslash: ["7L39", "7L1", "6L1", "5L61", "4L61"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bravebird: ["7L51", "7L1", "6L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defog: ["7T", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L17", "6M", "6L17", "5M", "5L19", "4M", "4L19", "3M", "3L19"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L45", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L28"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M", "3S0"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L1", "6L16", "4T", "3T", "3L16"], - gigadrain: ["6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasspledge: ["7T", "6T", "5T"], - headbutt: ["4T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - leafblade: ["7L23", "6L23", "5L29", "4L29", "3L29"], - leafstorm: ["7L63", "7L1", "6L1", "5L67", "5S0", "4L67"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - megadrain: ["7L13", "6L13"], - megakick: ["3T"], - megapunch: ["3T"], + laserfocus: ["7T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - nightslash: ["7L1", "6L1", "5L1", "4L1"], - outrage: ["6T", "5T", "4T"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], - poweruppunch: ["6M"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L18", "6L17", "5L17", "4L17", "3L17"], quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - quickguard: ["7L57", "6L57"], + quickguard: ["7L27", "6L27"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L57"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7T", "6T", "5T", "4T", "3T", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + wingattack: ["7L13", "6L13", "5L13", "4L13", "3L13"], + workup: ["7M", "5M"], + }}, + wingull: {learnset: { + aerialace: ["7M", "7L29", "6M", "6L29", "5M", "5L42", "4M", "4L42", "3M"], + agility: ["7L36", "7E", "6L36", "6E", "5L37", "5E", "4L37", "4E", "3L55", "3E"], + aircutter: ["7L22", "6L22", "5L33", "4T"], + airslash: ["7L40", "6L40", "5L47", "4L47"], + aquaring: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["7T", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gust: ["7E", "6E", "5E", "4E", "3E"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L43", "6L43", "5L50"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + liquidation: ["7T"], + mimic: ["3T"], + mist: ["7L12", "7E", "6L12", "6E", "5L16", "5E", "4L16", "4E", "3L21", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L26", "6L26", "5L34", "4L34", "3L43"], + quickattack: ["7L19", "6L19", "5L24", "4L24", "3L31"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L33", "7E", "6M", "6L26", "6E", "5T", "5L29", "5E", "4M", "4L29"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["7T", "6T", "5D", "4M", "3M"], + skyattack: ["7T", "6T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + soak: ["7E", "6E"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7L5", "6L5", "5L6", "4L6", "3L7"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["7E", "6E", "5D", "5E", "4T", "4E", "3E"], + uproar: ["7T", "6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + wideguard: ["7E", "6E"], + wingattack: ["7L8", "6L8", "5L11", "4L11", "3L13"], + }}, + pelipper: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L22", "6L28", "5L34", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["7T", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L28", "6M", "6L39", "5M", "5L43", "4M", "4L43"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["7T", "6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L55", "7L1", "6L1", "5L63"], + hydropump: ["7L50", "7L1", "6L1", "5L57", "4L57", "3L61"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], + mimic: ["3T"], + mist: ["7L12", "6L12", "5L16", "4L16", "3L21"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "7L19", "6M", "6L19", "5M", "5L24", "4M", "4L24"], + pluck: ["5M", "4M"], + protect: ["7M", "7L1", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "5S0", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L39", "6M", "6L22", "5T", "5L31", "4M", "4L31"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - screech: ["7L69", "6L23", "5L23", "4L23", "3L23"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - seismictoss: ["3T"], - slam: ["7L33", "6L33", "5L43", "4L43", "3L43"], + seedbomb: ["7T", "6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M", "3M"], + skyattack: ["7T", "6T", "5T", "4T", "3T"], + skydrop: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + soak: ["7L1", "6L1", "5L1"], + spitup: ["7L33", "6L33", "5L38", "4L38", "3L47"], + steelwing: ["7M", "6M", "4M", "3M"], + stockpile: ["7L33", "6L33", "5L38", "4L38", "3L33"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "6L5", "5L6", "4L6", "3L7"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L33", "6L33", "5L38", "4L38", "3L33"], swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thunderpunch: ["6T", "5T", "4T", "3T"], + tailwind: ["7T", "7L44", "7L1", "6T", "6L1", "5T", "5L50", "4T", "4L50"], + thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - workup: ["7M"], - worryseed: ["6T", "5T", "4T"], - xscissor: ["7M", "7L45", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + twister: ["4T"], + uproar: ["7T", "6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], + watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + wingattack: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], }}, - torchic: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7E", "6E", "5E", "4E"], + ralts: {learnset: { + allyswitch: ["7T", "7E", "6E", "5M"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "4E"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], + calmmind: ["7M", "7L24", "6M", "6L24", "5M", "5L28", "4M", "4L23", "3M", "3L21"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L34", "6L34", "5L43", "4L39", "3S1"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - crushclaw: ["7E", "6E", "5E", "4E"], - curse: ["7E", "6E", "5E"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + confuseray: ["7E", "6E", "5E", "4E"], + confusion: ["7L4", "6L4", "5D", "5L6", "4L6", "3L6", "3S2"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + destinybond: ["7E", "6E", "5D", "5E", "4E", "3E"], + disable: ["7E", "6E", "5E", "4E", "3E"], + disarmingvoice: ["7L11", "6L11"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7L6", "6M", "6L6", "5M", "5L10", "4M", "4L10", "3M", "3L11"], + drainingkiss: ["7L22", "6L22"], + dreameater: ["7M", "7L39", "6M", "6L39", "5M", "5L50", "4M", "4L45", "3T", "3L46"], echoedvoice: ["7M", "6M", "5M"], - ember: ["7L5", "6L5", "6S2", "5L10", "5S1", "5S2", "4L10", "3L10", "3S0"], - endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + encore: ["7E", "6E", "6S0", "5E", "4E"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - featherdance: ["7E", "6E", "5E", "4E"], - feint: ["7E", "6E", "5E", "4E"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepledge: ["7T", "6T", "5T"], - firespin: ["7L19", "6L19", "5L25", "4L25", "3L25"], - flameburst: ["7L28", "7E", "6L28", "6E", "5E"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L46", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], - focusenergy: ["7L32", "6L7", "6S2", "5L7", "5S1", "5S2", "4L7", "3L7", "3S0"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "6S2", "5L1", "5S1", "5S2", "4L1", "3L1", "3S0"], + futuresight: ["7L32", "6L32", "5L39", "4L34", "3L36"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "6S0", "5L1", "4L1", "3L1", "3S1", "3S0"], + grudge: ["7E", "6E", "5E", "4E"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], + healpulse: ["7L19", "6L19", "5L23"], + helpinghand: ["7T", "6T", "5D", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - lowkick: ["7E", "6T", "6E", "5T", "5E"], - megakick: ["3T"], - megapunch: ["3T"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L37", "6L37", "5L45", "4L43", "3L41"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + imprison: ["7L29", "6L29", "5L34", "4L32", "3L31"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L14", "6L14", "5L17", "4L17"], + magicalleaf: ["7L17", "6L17", "5L21", "4L21"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meanlook: ["7E", "6E", "5E", "4E", "3E"], + memento: ["7E", "6E", "5E", "4E", "3E"], mimic: ["3T"], - mirrormove: ["7L41", "6L37", "5L37", "4L37", "3L37"], + mistyterrain: ["7E", "6E"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightslash: ["7E", "6E", "5E", "4E"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - peck: ["7L14", "6L14", "5L16", "4L16", "3L16"], + nightmare: ["3T"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L23", "6L23", "5L28", "4L28", "3L28"], + psychic: ["7M", "7L27", "6M", "6L27", "5M", "5L32", "4M", "4L28", "3M", "3L26"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M", "3S2"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E", "5E", "4E", "3E"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L10", "6L10", "5L19", "4L19", "3L19"], - scratch: ["7L1", "6L1", "6S2", "5L1", "5S1", "5S2", "4L1", "3L1", "3S0"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L37", "6L34", "5L34", "4L34", "3L34"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowsneak: ["7E", "6E", "5E", "4E"], + shockwave: ["7T", "6T", "4M", "3M", "3S2"], + signalbeam: ["7T", "6T", "5T", "4T"], + sing: ["3S2"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + storedpower: ["7L42", "6L42", "5L54"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T"], + synchronoise: ["7E", "6E", "5E"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + teleport: ["7L9", "6L9", "5L12", "4L12", "3L16"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], - workup: ["7M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M", "4E", "3E"], + wish: ["3S0"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - combusken: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], + kirlia: {learnset: { + allyswitch: ["7T", "5M"], attract: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "7L31", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L28"], + calmmind: ["7M", "7L26", "6M", "6L26", "5M", "5L31", "4M", "4L25", "3M", "3L21"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L40", "6L40", "5L50", "4L45"], confide: ["7M", "6M"], - counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + confusion: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + disarmingvoice: ["7L11", "6L11"], doubleedge: ["3T"], - doublekick: ["7L1", "6L16", "5L16", "4L16", "3L16"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["3T"], + doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + drainingkiss: ["7L23", "6L23"], + dreameater: ["7M", "7L47", "6M", "6L47", "5M", "5L59", "4M", "4L53", "3T", "3L54"], echoedvoice: ["7M", "6M", "5M"], - ember: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T", "4T", "3T"], - flamecharge: ["7M", "7L20", "6M", "6L20", "5M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flareblitz: ["7L58", "6L54", "5L54", "4L54"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L36", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + futuresight: ["7L37", "6L37", "5L45", "4L39", "3L40"], + grassknot: ["7M", "6M", "5M", "4M"], growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], + healpulse: ["7L19", "6L19", "5L25"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - lastresort: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L44", "6L44", "5L53", "4L50", "3L47"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + imprison: ["7L33", "6L33", "5L39", "4L36", "3L33"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L14", "6L14", "5L17", "4L17"], + magicalleaf: ["7L17", "6L17", "5L22", "4L22", "3L1"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mimic: ["3T"], - mirrormove: ["7L47", "6L43", "5L43", "4L43", "3L43"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - peck: ["7L14", "6L14", "5L17", "4L17", "3L17"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + nightmare: ["3T"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L25", "6L25", "5L32", "4L32", "3L32"], + psychic: ["7M", "7L30", "6M", "6L30", "5M", "5L36", "4M", "4L31", "3M", "3L26"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L10", "7L1", "6L1", "5L21", "4L21", "3L21"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - skyuppercut: ["7L53", "6L50", "5L50", "4L50", "3L50"], - slash: ["7L42", "6L39", "5L39", "4L39", "3L39"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + storedpower: ["7L51", "6L51", "5L64"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - thunderpunch: ["6T", "5T", "4T", "3T"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + teleport: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - vacuumwave: ["4T"], - willowisp: ["7M", "6M", "5M", "4M"], - workup: ["7M", "5M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - blaziken: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M", "4M", "3M"], + gardevoir: {learnset: { + allyswitch: ["7T", "5M"], attract: ["7M", "6M", "5M", "4M", "3M"], - blastburn: ["7T", "6T", "5T", "4T"], - blazekick: ["7L1", "6L36", "5L36", "4L36", "3L36", "3S0"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - bravebird: ["7L50", "6L49", "5L49", "4L49"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "7L31", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L28"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + calmmind: ["7M", "7L26", "6M", "6L26", "6S1", "5M", "5L33", "4M", "4L25", "3M", "3L21"], + captivate: ["7L44", "6L44", "5L60", "4M", "4L53"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + confusion: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + dazzlinggleam: ["7M", "6M", "6S1"], + defensecurl: ["3T"], + disarmingvoice: ["7L11", "6L11"], doubleedge: ["3T"], - doublekick: ["7L1", "6L16", "5L16", "4L16", "3L16"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dualchop: ["6T", "5T"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + drainingkiss: ["7L23", "6L23"], + dreameater: ["7M", "7L53", "6M", "6L53", "5M", "5L73", "4M", "4L65", "3T", "3L60"], echoedvoice: ["7M", "6M", "5M"], - ember: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], - flamecharge: ["7M", "7L20", "6M", "6L20", "5M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flareblitz: ["7L63", "7L1", "6L1", "5L66", "5S1", "4L66"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L37", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], + focusblast: ["7M", "6M", "5M", "5S0", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + futuresight: ["7L40", "6L40", "5L53", "4L45", "3L42"], gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], + healbell: ["7T", "6T", "5T", "4T"], + healingwish: ["7L1", "6L1", "5L1", "4L1"], + healpulse: ["7L19", "6L19", "5L25"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - highjumpkick: ["7L1", "6L1", "5L1", "5S1"], - honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["6M", "5M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L49", "6L49", "5L65", "5S0", "4L60", "3L51"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + imprison: ["7L35", "6L35", "5L45", "4L40", "3L33"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magicalleaf: ["7L17", "6L17", "5L22", "4L22"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mimic: ["3T"], - mirrormove: ["3L49", "3S0"], + mistyterrain: ["7L1", "6L1"], + moonblast: ["7L62", "7L1", "6L1", "6S1"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - peck: ["7L14", "6L14", "5L17", "4L17", "3L17"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + nightmare: ["3T"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L25", "6L25", "5L32", "4L32", "3L32"], + psychic: ["7M", "7L31", "6M", "6L31", "5M", "5L40", "5S0", "4M", "4L33", "3M", "3L26"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandattack: ["7L10", "7L1", "6L1", "5L21", "4L21", "3L21"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - skyuppercut: ["7L57", "6L57", "5L59", "4L59", "3L59", "3S0"], - slash: ["7L44", "6L42", "5L42", "4L42", "3L42", "3S0"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stoneedge: ["7M", "6M", "5M", "5S1", "4M"], - strength: ["6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + storedpower: ["7L58", "7L1", "6L1", "6S1", "5L80"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - thunderpunch: ["6T", "5T", "5S1", "4T", "3T"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + teleport: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "5S0", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M"], + wish: ["7L14", "6L14", "5L17", "4L17"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], + }}, + gallade: {learnset: { + aerialace: ["7M", "7L17", "6M", "5M", "4M"], + allyswitch: ["7T", "5M"], + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + closecombat: ["7L53", "7L1", "6L1", "5L59", "4L53"], + confide: ["7M", "6M"], + confusion: ["7L4", "7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + dualchop: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "7L44", "6M", "6L44", "5M", "5L50", "4M", "4L45"], + feint: ["7L40", "6L40", "5L45", "4L39"], + firepunch: ["7T", "6T", "5T", "4T"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L14", "6L14", "5L17", "4T", "4L17"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healpulse: ["7L19", "6L19", "5L25"], + helpinghand: ["7T", "7L35", "6T", "6L35", "5T", "5L39", "4T", "4L36"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["7T", "6T", "5T"], + icepunch: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leafblade: ["7L1", "6L1", "5L1", "4L1"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + painsplit: ["7T", "6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L49", "6M", "6L49", "5M", "5L53", "4M", "4L50"], + psychic: ["7M", "6M", "5M", "4M"], + psychocut: ["7L31", "6L31", "5L36", "4L31"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + quickguard: ["7L11", "6L11"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], + slash: ["7L1", "6L17", "5L22", "4L22"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "4M"], + storedpower: ["7L58", "7L1", "6L1", "5L64"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L26", "6M", "6L26", "5M", "5L31", "4M", "4L25"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], + teleport: ["7L9", "7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], vacuumwave: ["4T"], - willowisp: ["7M", "6M", "5M", "4M"], + wideguard: ["7L23", "6L23"], + willowisp: ["7M", "6M", "5M"], + wonderroom: ["7T", "6T", "5T"], workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - mudkip: {learnset: { - ancientpower: ["7E", "6E", "5E", "4T", "4E"], - aquatail: ["6T", "5T", "4T"], + surskit: {learnset: { + agility: ["7L22", "6L22", "5L31", "4L31", "3L31"], + aquajet: ["7L30", "7E", "6L30", "6E", "5E"], attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["7E", "6E", "5E"], - barrier: ["7E", "6E"], - bide: ["7L17", "6L15", "5L15", "4L15", "3L15"], - bite: ["7E", "6E", "5E", "4E"], + batonpass: ["7L35", "6L35", "5L43", "4L43"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], + bubble: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1", "3S1", "3S0"], + bubblebeam: ["7L17", "6L17", "5L25", "4L25", "3L25"], + bugbite: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L44", "6T", "6L44", "5T", "5L46", "4T", "4L46", "3L46"], - endure: ["4M", "3T"], + endure: ["7E", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - foresight: ["7L12", "6L12", "5L19", "4L19", "3L19"], + fellstinger: ["7E", "6E"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], - hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + gigadrain: ["7T", "6T", "5D", "5T", "4M", "3M"], + haze: ["7L25", "6L25", "5L37", "4L37", "3L37"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L41", "6L41", "5L42", "4L42", "3L42"], - iceball: ["7E", "6E", "5E", "4E", "3E"], + hydropump: ["7E", "6E", "5D", "5E", "4E", "3E"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + liquidation: ["7T"], + lunge: ["7E"], mimic: ["3T"], - mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], - mudbomb: ["7E", "6E", "5E", "4E"], - mudslap: ["7L9", "6L6", "5L6", "5S1", "4T", "4L6", "3T", "3L6", "3S0"], - mudsport: ["7L20", "6L20", "5L24", "4L24", "3L24"], + mindreader: ["7E", "6E", "5E", "4E", "3E"], + mist: ["7L25", "6L25", "5L37", "4L37", "3L37"], + mudshot: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T"], + mudsport: ["3S0"], naturalgift: ["4M"], - protect: ["7M", "7L28", "6M", "6L28", "5M", "5L37", "4M", "4L37", "3M", "3L37"], + powersplit: ["7E", "6E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L6", "6L6", "5L7", "4L7", "3L7", "3S1"], raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L25", "6L25"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7E", "6E", "5E", "4E"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stomp: ["7E", "6E", "5E", "4E", "3E"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stickyweb: ["7L38", "6L38"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], - takedown: ["7L36", "6L28", "5L28", "4L28", "3L28"], + sweetscent: ["7L9", "6L9", "5L13", "4L13", "3L13"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7E", "6T", "6E", "5E", "4E", "3E"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L4", "6L4", "5L10", "5S1", "4L10", "3L10", "3S0"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L33", "4E", "3L33"], - wideguard: ["7E", "6E", "5E"], - workup: ["7M"], - yawn: ["7E", "6E", "5E", "4E"], + waterpulse: ["7T", "6T", "4M", "3M"], + watersport: ["7L14", "6L14", "5L19", "4L19", "3L19"], }}, - marshtomp: {learnset: { - ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], + masquerain: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L22", "6L22", "4T"], + airslash: ["7L38", "6L38", "5L47", "4L47"], attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L18", "6L15", "5L15", "4L15", "3L15"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L42", "7L1", "6L1", "5L61", "4L61"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - dive: ["6M", "5M", "4T", "3M"], + defog: ["7T", "4M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L48", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L46"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L52", "6T", "6L52", "5T", "5L53", "4T", "4L53", "3L53"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - foresight: ["7L12", "6L12", "5L20", "4L20", "3L20"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L17", "6L17", "5L22", "4L22", "3L26"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["3C"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], - mimic: ["3T"], - mudbomb: ["7L22", "6L22", "5L25", "4L25"], - muddywater: ["7L38", "6L37", "5L37", "4L37", "3L37"], - mudshot: ["7L1", "6L16", "5L16", "4L16", "3L16"], - mudslap: ["7L9", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], - mudsport: ["3L25"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + liquidation: ["7T"], + mimic: ["3T"], + mudslap: ["4T"], naturalgift: ["4M"], - poweruppunch: ["6M"], - protect: ["7M", "7L32", "6M", "6L32", "5M", "5L42", "4M", "4L42", "3M", "3L42"], + nightmare: ["3T"], + ominouswind: ["7L1", "6L1", "5L1", "4T", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + quiverdance: ["7L52", "7L1", "6L1", "5L68"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "7L28", "6M", "6L28", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], + scaryface: ["7L22", "6L22", "5L26", "4L26", "3L33"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["7L32", "6L32", "5L40", "4M", "4L40", "3L47"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L26", "6L26", "5L33", "4L33", "3L40"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L42", "6L31", "5L31", "4L31", "3L31"], + sweetscent: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - workup: ["7M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + watersport: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L1"], + whirlwind: ["7L48", "7L1", "6L1", "5L54", "4L54", "3L53"], }}, - swampert: {learnset: { - ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], + shroomish: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - bide: ["7L18", "6L15", "5L15", "4L15", "3L15"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7E", "6E", "5D", "5E", "4M", "3M"], captivate: ["4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], - counter: ["3T"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L51", "6M", "6L51", "5M", "5L52", "5S0", "4M", "4L52", "3M", "3L52"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L56", "6T", "6L56", "5T", "5L61", "4T", "4L61", "3L61"], + drainpunch: ["7T", "7E", "6T", "6E", "5T", "5E"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L12", "6L12", "5L20", "4L20", "3L20"], + faketears: ["7E", "6E", "5E", "4E", "3E"], + falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + focuspunch: ["7T", "7E", "6T", "6E", "5D", "5E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "6M", "5M", "4M", "3M"], - hammerarm: ["7L63", "7L1", "6L1", "5L69", "5S0", "4L69"], - headbutt: ["4T"], + gigadrain: ["7T", "7L26", "6T", "6L26", "5T", "5L37", "4M", "4L37", "3M", "3L45"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L29", "6L29", "5L33", "4L33", "3L36"], + headbutt: ["7L15", "6L15", "5L21", "4T", "4L21", "3L22"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydrocannon: ["7T", "6T", "5T", "4T"], - hydropump: ["5S0"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], + leechseed: ["7L8", "6L8", "5L13", "4L13", "3L10"], + megadrain: ["7L12", "6L12", "5L17", "4L17", "3L16", "3S0"], mimic: ["3T"], - mudbomb: ["7L22", "6L22", "5L25", "4L25"], - muddywater: ["7L39", "6L39", "5L39", "4L39", "3L39"], - mudshot: ["7L1", "6L16", "5L16", "4L16", "3L16"], - mudslap: ["7L9", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], - mudsport: ["3L25"], - naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - poweruppunch: ["6M"], - protect: ["7M", "7L32", "6M", "6L32", "5M", "5L46", "4M", "4L46", "3M", "3L46"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + naturalgift: ["7E", "6E", "5E", "4M"], + poisonpowder: ["7L19", "6L19", "5L25", "4L25", "3L28"], + protect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockslide: ["7M", "7L28", "6M", "6L28", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], + seedbomb: ["7T", "7L36", "7E", "6T", "6L36", "6E", "5T", "5L41", "5E", "4T", "4L41", "4E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spore: ["7L40", "6L40", "5L45", "4L45", "3L54"], + stunspore: ["7L5", "6L5", "5D", "5L9", "4L9", "3L7", "3S0"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L44", "6L31", "5L31", "4L31", "3L31"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - workup: ["7M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L5", "4L5", "3L4"], + toxic: ["7M", "7L33", "6M", "6L33", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + wakeupslap: ["7E", "6E", "5E", "4E"], + worryseed: ["7T", "7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], }}, - poochyena: {learnset: { - assurance: ["7L22", "6L22", "5L29", "4L29"], - astonish: ["7E", "6E", "5E", "4E", "3E"], + breloom: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L10", "6L10", "5L13", "4L13", "3L13"], bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - covet: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], - crunch: ["7L34", "6L37", "5L53", "4L53", "3L41"], - darkpulse: ["7M", "6M", "5T", "5D", "4M"], - dig: ["6M", "5M", "4M", "3M", "3S0"], + counter: ["7L22", "6L22", "5L25", "4L25", "3T", "3L28"], + cut: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "7L28", "6M", "6L28", "5M", "5L41", "4M", "4L41"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["7L50", "6L45", "5L45", "4L45", "3T", "3L54"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7E", "6E", "5E", "4E"], - foulplay: ["6T", "5T"], + falseswipe: ["7M", "6M", "5M"], + feint: ["7L19", "6L19"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + forcepalm: ["7L28", "6L28", "5L29", "4L29"], frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - healbell: ["3S0"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["7L15", "6L15", "5L21", "4T", "4L21", "3L22"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L4", "6L4", "5L5", "5D", "4L5", "3L5", "3S0"], - hypervoice: ["6T", "5T"], - icefang: ["7E", "6E", "5E", "4E"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7E", "6E", "5E", "4E", "3E"], - mefirst: ["7E", "6E", "5E", "4E"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leechseed: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L1", "6L23", "5L23", "4L23", "3L23"], + megadrain: ["7L12", "6L12", "5L17", "4L17", "3L16"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], + mindreader: ["7L33", "6L33", "5L37", "4L37", "3L45"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], - payback: ["7M", "6M", "5M", "4M"], - playrough: ["7L46", "7E", "6E"], - poisonfang: ["7E", "6E", "5E", "5D", "4E", "3E", "3S0"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L16", "6M", "6L16", "5M", "5L21", "4M", "4L21", "3M", "3L21"], + rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "6L7", "5L9", "4L9", "3L9"], - scaryface: ["7L25", "6L25", "5L33", "4L33", "3L29"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snatch: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + seedbomb: ["7T", "7L44", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + seismictoss: ["3T"], + skyuppercut: ["7L39", "6L33", "5L33", "4L33", "3L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stunspore: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L43", "7E", "6L40", "6E", "5L49", "5E", "4T", "4L49", "4E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "7L19", "6M", "6L19", "5M", "5L25", "4M", "4L25", "3T", "3L25"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L40", "6L34", "5L45", "4L45", "3L33"], - taunt: ["7M", "7L31", "6M", "6L31", "5M", "5L37", "4M", "4L37", "3M", "3L37"], - thief: ["7M", "6M", "5M", "4M", "3M", "3L45"], - thunderfang: ["7E", "6E", "5E", "4E"], - torment: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - yawn: ["7L37", "7E", "6E", "5E", "4E", "3E"], + vacuumwave: ["4T"], + venoshock: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - mightyena: {learnset: { - assurance: ["7L24", "6L24", "5L32", "4L32"], + slakoth: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L17", "6L17", "5L25", "4L25", "3L25"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], - bodyslam: ["3T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chipaway: ["7L25", "6L25", "5L37"], confide: ["7M", "6M"], - counter: ["3T"], - covet: ["6T", "5T"], - crunch: ["7L40", "7L1", "6L1", "3L47"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M", "3M"], + counter: ["7L30", "6L30", "5L43", "4L37", "3T", "3L37"], + covet: ["7T", "7L22", "6T", "6L22", "5T", "5L31", "4L31", "3L31"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "7L32", "6M", "6L32", "5M", "5L47", "4M", "4L47"], + dynamicpunch: ["3T"], + encore: ["7L6", "6L6", "5L7", "4L7", "3L7"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L1"], - foulplay: ["6T", "5T"], + feintattack: ["7L14", "6L14", "5L19", "4L19", "3L19"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flail: ["7L33", "6L33", "5L49", "4L43", "3L43"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], + furycutter: ["4T", "3T"], + gunkshot: ["7T", "6T", "5T", "4T"], + hammerarm: ["7E", "6E", "5E", "4E"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icefang: ["7L1"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], - payback: ["7M", "6M", "5M", "4M"], - playrough: ["7L56"], + nightslash: ["7E", "6E", "5D", "5E", "4E"], + playrough: ["7L38", "6L38"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L22", "3M", "3L22"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - scaryface: ["7L28", "6L28", "5L37", "4L37", "3L32"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "7L1", "6M", "6L18", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + slackoff: ["7L9", "6L9", "5L13", "4L13", "3L13"], + slash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L52", "6L48", "5L62", "4T", "4L62"], + suckerpunch: ["5D", "4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "7L20", "6M", "6L20", "5M", "5L27", "4M", "4L27", "3T", "3L27"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L48", "6L40", "5L52", "4L52", "3L37"], - taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L42", "4M", "4L42", "3M", "3L42"], - thief: ["7M", "7L1", "6M", "6L1", "5M", "5L57", "4M", "4L57", "3M", "3L52"], - thunderfang: ["7L1"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + tickle: ["7E", "6E", "5E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - yawn: ["7L44"], + waterpulse: ["7T", "6T", "4M", "3M"], + workup: ["7M", "5M"], + yawn: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], }}, - zigzagoon: {learnset: { + vigoroth: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M", "4M", "3M"], - babydolleyes: ["7L12", "6L11"], - bellydrum: ["7L37", "6L37", "5L45", "4L41", "3L41"], - bestow: ["7L25", "6L25", "5L33"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7E", "6E", "5E", "4E", "3E"], + chipaway: ["7L27", "6L27", "5L43"], confide: ["7M", "6M"], - covet: ["7L23", "6T", "6L23", "5T", "5L29", "4L29", "3L29"], + counter: ["7L33", "6L33", "5L37", "4L37", "3T", "3L37"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], - extremespeed: ["3S1"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["7L17", "6L17", "5L25", "4M", "4L25", "3T", "3L25"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L29", "6L29", "5L37", "4L33", "3L33"], - fling: ["7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L45"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "7L37", "6T", "6L37", "5L49", "4M", "4L43", "3M", "3L43"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["7L11", "6L9", "5L9", "4T", "4L9", "3L9"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + furyswipes: ["7L14", "6L14", "5L19", "4L19", "3L19"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hypervoice: ["6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "5D", "4T"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], - mudsport: ["7L17", "6L17", "5L21", "4L21", "3L21"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], - pinmissile: ["7L19", "6L19", "5L25", "4L25", "3L25"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L35", "6M", "6L35", "5M", "5L41", "4M", "4L37", "3M", "3L37"], + rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["7E", "6E", "5E"], + reversal: ["7L43", "7L1", "6L1", "5L55", "4L49", "3L49"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "6L7", "5L13", "4L13", "3L13"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - simplebeam: ["7E", "6E", "5E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + slash: ["7L23", "6L23", "5L31", "4L31", "3L31"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7T", "6T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], - tailwhip: ["7L5", "6L5", "5L5", "4L5", "3L5", "3S0", "3S1"], - takedown: ["7L31", "6L31"], - thief: ["7M", "6M", "5M", "4M", "3M"], + taunt: ["7M", "6M", "5M", "4M", "3M"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - tickle: ["7E", "6E", "5E", "4E", "3E"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + uproar: ["7T", "7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], workup: ["7M", "5M"], }}, - linoone: {learnset: { + slaking: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "4S0", "3M"], + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L17", "6L17", "5L25", "4L25", "3L25"], attract: ["7M", "6M", "5M", "4M", "3M"], - babydolleyes: ["6S0"], - bellydrum: ["7L43", "6L43", "5L59", "4L53", "3L53"], - bestow: ["7L27", "6L27", "5L41"], blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + chipaway: ["7L27", "6L27", "5L37"], confide: ["7M", "6M"], - covet: ["7L24", "6T", "6L24", "5T", "5L35", "4L35", "3L35"], + counter: ["7L33", "6L33", "5L43", "4L37", "3T", "3L37"], + covet: ["7T", "7L23", "6T", "6L23", "5T", "5L31", "4L31", "3L31"], cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L35", "6L35", "3T"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], - extremespeed: ["6S0"], facade: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "7L48", "6M", "6L48", "5M", "5L65", "4M", "4L59"], + feintattack: ["7L14", "6L14", "5L19", "4L19", "3L19"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flail: ["7L39", "6L39", "5L49", "4L43", "3L43"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L47", "7L1", "6M", "6L1", "5M", "5L55", "4M", "4L49"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], - furyswipes: ["7L19", "6L19", "5L29", "4L29", "3L29"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["7L11", "6L1", "5L1", "4T", "4L1", "3L1"], - helpinghand: ["6T", "6S0", "5T", "4T"], + gigaimpact: ["7M", "6M", "5M", "4M", "4S0"], + gunkshot: ["7T", "6T", "5T", "4T"], + hammerarm: ["7L61", "7L1", "6L1", "5L67", "4L61"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - mudsport: ["7L17", "6L17", "5L23", "4L23", "3L23"], naturalgift: ["4M"], - odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], - playrough: ["7L1", "6L1"], - protect: ["7M", "6M", "6S0", "5M", "4M", "3M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + punishment: ["7L53", "7L1", "6L1", "5L61", "4L55"], + quash: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L40", "6M", "6L40", "5M", "5L53", "4M", "4L47", "3M", "3L47"], + rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "4S0", "3M"], roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], - rototiller: ["7L1", "6L1"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L13", "4L13", "3L13"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slash: ["7L32", "6L32", "5L47", "4L41", "3L41"], + shadowclaw: ["7M", "6M", "5M", "4M", "4S0"], + shockwave: ["7T", "6T", "4M", "3M"], + slackoff: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - switcheroo: ["7L1", "6L1", "5L1", "4L1"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwhip: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3T", "3L36"], + taunt: ["7M", "6M", "5M", "4M", "3M"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M", "3M"], workup: ["7M", "5M"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], }}, - wurmple: {learnset: { - bugbite: ["7L15", "6T", "6L15", "5T", "5L15", "5D", "4T", "4L15"], - electroweb: ["6T", "5T"], - poisonsting: ["7L5", "6L5", "5L5", "5D", "4L5", "3L5"], - snore: ["6T", "5T", "5D", "4T"], - stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - }}, - silcoon: {learnset: { - bugbite: ["6T", "5T", "4T"], - electroweb: ["6T", "5T"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - irondefense: ["6T", "5T", "4T"], - stringshot: ["4T"], - }}, - beautifly: {learnset: { - absorb: ["7L12", "6L1", "5L1", "4L1", "3L1"], - acrobatics: ["7M", "6M", "5M"], + nincada: {learnset: { + absorb: ["7L5"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["7L20", "6L20", "4T"], - attract: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L35", "6L35", "5L41", "4L41"], - captivate: ["4M"], + bide: ["7L29", "6L29"], + bugbite: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + bugbuzz: ["7E", "6E", "5E", "4E"], confide: ["7M", "6M"], - defog: ["4M"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["7L37", "6M", "6L37", "5M", "5L45", "4M", "4L45", "3M", "3L45"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - electroweb: ["6T", "5T"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + endure: ["7E", "6E", "5D", "5E", "4M", "4E", "3T", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L33", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3L25"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + finalgambit: ["7E", "6E", "5E"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L32", "6T", "6L32", "5T", "5L38", "4M", "4L38", "3M", "3L38"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L1", "6L1", "5L13", "4L13", "3L13"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gust: ["7E", "6E", "5E", "4E", "3E"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - infestation: ["7M", "6M"], - megadrain: ["7L22", "6L22", "5L24", "4L24", "3L24"], + honeclaws: ["6M", "5M"], + leechlife: ["7M", "6L5", "5D", "5L5", "4L5", "3L5"], + metalclaw: ["7L21", "6L21", "5L38", "4L38", "3L38"], mimic: ["3T"], - morningsun: ["7L17", "6L17", "5L20", "4L20", "3L20"], + mindreader: ["7L25", "6L19", "5L19", "4L19", "3L19"], + mudslap: ["7L17", "6L17", "5L31", "4T", "4L31", "3T", "3L31"], naturalgift: ["4M"], - ominouswind: ["4T"], + nightslash: ["7E", "6E", "5D", "5E", "4E"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - quiverdance: ["7L40", "6L40", "5L45"], - rage: ["7L37", "6L37"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandattack: ["7L9", "6L9", "5L9", "4L9", "3L9"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["7L25", "6L25", "5L34", "4M", "4L34", "3L34"], + silverwind: ["7E", "6E", "5E", "4E", "3E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], stringshot: ["4T"], strugglebug: ["6M", "5M"], - stunspore: ["7L15", "6L15", "5L17", "4L17", "3L17"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uturn: ["7M", "6M", "5M", "4M"], - venoshock: ["7M", "6M", "5M"], - whirlwind: ["7L30", "6L27", "5L27", "4L27", "3L27"], - }}, - cascoon: {learnset: { - bugbite: ["6T", "5T", "4T"], - electroweb: ["6T", "5T"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - irondefense: ["6T", "5T", "4T"], - stringshot: ["4T"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - dustox: {learnset: { - acrobatics: ["7M", "6M", "5M"], + ninjask: {learnset: { + absorb: ["7L5", "7L1"], aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L17", "6L17", "5L38", "4L38", "3L38"], aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L35", "6L35", "5L41", "4L41"], + batonpass: ["7L35", "6L35", "5L45", "4L45", "3L45"], + bugbite: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L12", "6L1", "5L1", "4L1", "3L1"], - defog: ["4M"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - electroweb: ["6T", "5T"], + doubleteam: ["7M", "7L1", "6M", "6L20", "5M", "5L20", "4M", "4L20", "3M", "3L20"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + furycutter: ["7L1", "6L20", "5L20", "4T", "4L20", "3T", "3L20"], + furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L1", "6L1", "5L13", "4L13", "3L13"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - infestation: ["7M", "6M"], - lightscreen: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + laserfocus: ["7T"], + leechlife: ["7M", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - moonlight: ["7L17", "6L17", "5L20", "4L20", "3L20"], + mindreader: ["7L29", "6L19", "5L19", "4L19", "3L19"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - poisonpowder: ["7L15", "6L15"], - protect: ["7M", "7L37", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L17"], - psybeam: ["7L22", "6L22", "5L24", "4L24", "3L24"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - quiverdance: ["7L40", "6L40", "5L45"], + protect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], + sandattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L1", "6L20", "5L20", "4L20", "3L20"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["7L25", "6L25", "5L34", "4M", "4L34", "3L34"], + silverwind: ["4M"], + slash: ["7L23", "6L23", "5L31", "4L31", "3L31"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7T", "6T", "5T", "4T"], stringshot: ["4T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], + swordsdance: ["7M", "7L41", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L25"], thief: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L38", "4M", "4L38", "3M", "3L38"], - twister: ["4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], - venoshock: ["7M", "7L20", "6M", "6L20", "5M"], - whirlwind: ["7L30", "6L27", "5L27", "4L27", "3L27"], + xscissor: ["7M", "7L47", "6M", "6L47", "5M", "5L52", "4M", "4L52"], }}, - lotad: {learnset: { - absorb: ["7L6", "6L5", "5L5", "5D", "4L5", "3L7", "3S0"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bubble: ["7L9", "6L9"], - bubblebeam: ["7L21", "6L21", "5L25", "4L25"], - bulletseed: ["4M", "3M"], - captivate: ["4M"], + shedinja: {learnset: { + absorb: ["7L5", "7L1"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["3S4"], + allyswitch: ["7T"], + batonpass: ["3S5"], + bugbite: ["7T", "6T", "5T", "4T"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E"], - dive: ["6M"], + confuseray: ["7L29", "6L29", "5L31", "4L31", "3L31", "3S0"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], + doubleteam: ["7M", "6M", "5M", "4M", "3M", "3S1"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], endure: ["4M", "3T"], - energyball: ["7M", "7L36", "6M", "6L36", "5M", "5L45", "4M", "4L43"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7E", "6E", "5E", "4E", "3E"], + falseswipe: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L30", "7E", "6T", "6L30", "6E", "5T", "5E", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L3", "6L3", "5L3", "4L3", "3L3", "3S0"], - hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], + furycutter: ["4T", "3T", "3S1"], + furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grudge: ["7L37", "6L37", "5L45", "4L45", "3L45", "3S0"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + healblock: ["7L41", "6L41", "5L52", "4L52"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - leechseed: ["7E", "6E", "5E", "5D", "4E", "3E"], - megadrain: ["7L18", "6L18", "5L19", "4L19", "3L43"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leechlife: ["7M", "6L5", "5L5", "4L5", "3L5"], mimic: ["3T"], - mist: ["7L15", "6L11", "5L11", "4L11", "3L21"], - naturalgift: ["7L12", "6L12", "5L15", "4M", "4L15"], - naturepower: ["7M", "7L24", "6M", "6L7", "5L7", "4L7", "3L13"], + mindreader: ["7L25", "6L19", "5L19", "4L19", "3L19"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + phantomforce: ["7L45", "6L45"], protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "7L27", "6M", "6L27", "5M", "5L37", "4M", "4L35", "3M", "3L31"], - razorleaf: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + sandattack: ["7L9", "7L1", "6L9", "5L9", "4L9", "3L9"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["3S1"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "7L33", "6M", "6L33", "5M", "5L59", "4M", "4L59", "3M", "3L38", "3S0"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowsneak: ["7L21", "6L21", "5L38", "4L38"], + slash: ["3S3"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7T", "7L17", "6T", "6L17", "5T", "5L25", "4T", "4L25", "3L25", "3S0"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7E", "6E", "5E", "4E", "3E"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - teeterdance: ["7E", "6E", "5E"], + swordsdance: ["3S2"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M", "4M", "3M"], - tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - watergun: ["7E", "6E", "5E", "4E", "3E"], - waterpulse: ["6T", "5D", "4M", "3M"], - whirlpool: ["4M"], - zenheadbutt: ["7L33", "6T", "6L31", "5T", "5L31", "4T", "4L27"], + trick: ["7T", "6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + xscissor: ["7M", "6M", "5M", "4M", "4S6"], }}, - lombre: {learnset: { - absorb: ["7L6", "6L5", "5L5", "4L5", "3L7"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + whismur: {learnset: { + astonish: ["7L8", "6L8", "5L11", "4L11", "3L11"], attract: ["7M", "6M", "5M", "4M", "3M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bubble: ["7L9", "6L9"], - bubblebeam: ["7L24", "6L24", "5L25", "4L25"], - bulletseed: ["4M", "3M"], captivate: ["4M"], + circlethrow: ["7E", "6E", "5E"], confide: ["7M", "6M"], - dive: ["6M", "5M", "4T", "3M"], + counter: ["3T"], + defensecurl: ["3T"], + disarmingvoice: ["7E", "6E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], dynamicpunch: ["3T"], - echoedvoice: ["7M", "6M", "5M"], + echoedvoice: ["7M", "7L4", "6M", "6L4", "5M"], + endeavor: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4E"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7E", "6E", "5E", "4E", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L16", "6L11", "5L11", "4L11", "3L19"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyswipes: ["7L12", "6L12", "5L15", "4L15", "3L25"], - gigadrain: ["6T", "5T", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L3", "6L3", "5L3", "4L3", "3L3"], - hail: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7E", "6E", "5E", "4E"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hydropump: ["7L44", "6L44", "5L45", "4L43", "3L49"], - hypervoice: ["6T", "5T"], + howl: ["7L11", "6L11", "5L15", "4L15", "3L15"], + hypervoice: ["7T", "7L39", "6T", "6L39", "5T", "5L51", "4L45", "3L45"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["7L36", "6T", "6L36"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "7L28", "6M", "6L7", "5L7", "4L7", "3L13"], - poweruppunch: ["6M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L32", "6M", "6L32", "5M", "5L45", "4M", "4L41", "3M", "3L41"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + roar: ["7M", "7L29", "6M", "6L29", "5M", "5L35", "4M", "4L35", "3M", "3L35"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + screech: ["7L15", "6L15", "5L31", "4L31", "3L31"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7L36", "6M", "6L36", "5T", "5L45", "4M", "4L41", "3T", "3L41"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + smokescreen: ["7E", "6E", "5E", "4E"], + snore: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], + stomp: ["7L22", "6L22", "5L25", "4L25", "3L25"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M", "3L37"], - thunderpunch: ["6T", "5T", "4T", "3T"], + supersonic: ["7L18", "6L18", "5L21", "4L21", "3L21"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + synchronoise: ["7L43", "6L41", "5L41"], + takedown: ["7E", "6E", "5E", "4E", "3E"], + teeterdance: ["3S0"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7L32", "6T", "6L32", "5T", "5L37", "4T", "4L35", "3L43"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - watersport: ["7L20", "6L19", "5L19", "4L19", "3L31"], - whirlpool: ["4M"], - zenheadbutt: ["7L40", "6T", "6L31", "5T", "5L31", "4T", "4L27"], + uproar: ["7T", "7L25", "6T", "6L5", "5D", "5T", "5L5", "4T", "4L5", "3L5", "3S0"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlwind: ["7E"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5D", "5T", "4T"], }}, - ludicolo: {learnset: { - absorb: ["3L1"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + loudred: {learnset: { + astonish: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L1", "6L20", "5L20", "4L20"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulletseed: ["4M", "3M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - dive: ["6M", "5M", "4T", "3M"], + defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], dynamicpunch: ["3T"], - echoedvoice: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "7L4", "7L1", "6M", "6L1", "5M"], + endeavor: ["7T", "6T", "5T"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["5S0"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "5S0", "5S1", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hydropump: ["5S0"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - icebeam: ["7M", "6M", "5M", "5S0", "5S1", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["6T"], - megadrain: ["7L1", "6L1", "5L1", "4L1"], + howl: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], + hypervoice: ["7T", "7L45", "6T", "6L45", "5T", "5L65", "4L57", "3L57"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "7L1", "6M", "6L1", "5L1", "4L1", "3L1"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L36", "6M", "6L36", "5M", "5L57", "4M", "4L51", "3M", "3L51"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], + roar: ["7M", "7L32", "6M", "6L32", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M", "5S1"], + screech: ["7L15", "6L15", "5L37", "4L37", "3L37"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], seismictoss: ["3T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7L41", "6M", "6L41", "5T", "5L57", "4M", "4L51", "3T", "3L51"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L23", "6L23", "5L29", "4L29", "3L29"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "5S1", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L18", "6L18", "5L23", "4L23", "3L23"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + synchronoise: ["7L50", "6L50", "5L51"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - zenheadbutt: ["6T", "5T", "4T"], + uproar: ["7T", "7L27", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - seedot: {learnset: { - amnesia: ["7E", "6E", "5E", "4E", "3E"], + exploud: {learnset: { + astonish: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], - beatup: ["7E", "6E", "5E"], - bide: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + avalanche: ["4M"], + bite: ["7L1", "6L20", "5L20", "4L20"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bulletseed: ["7E", "6E", "5E", "5D", "4M", "3M", "3S1"], + boomburst: ["7L58", "7L1", "6L1"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L1", "6L40", "5L40", "4L40"], defensecurl: ["3T"], - defog: ["7E", "6E", "5E"], - dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "7L4", "7L1", "6M", "6L1", "5M"], + endeavor: ["7T", "6T", "5T"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - explosion: ["7M", "7L33", "6M", "6L33", "5M", "5L43", "4M", "4L43", "3T", "3L43"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4E", "3E"], - flash: ["6M", "5M", "4M", "3M"], - foulplay: ["7E", "6T", "6E", "5T", "5E", "5D"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M", "3S1"], - grassknot: ["7M", "6M", "5M", "4M"], - grassyterrain: ["7E", "6E"], - growth: ["7L9", "6L7", "5L7", "5D", "4L7", "3L7", "3S0"], - harden: ["7L3", "6L3", "5L3", "4L3", "3L3", "3S0"], + gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - leechseed: ["7E", "6E", "5E", "4E", "3E"], + howl: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "7L64", "6M", "6L64", "5M", "5L79", "4M", "4L71", "3M", "3L40", "3S1"], + hypervoice: ["7T", "7L47", "6T", "6L47", "5T", "5L71", "4L63", "3L63", "3S0"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], - nastyplot: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "7L15", "6M", "6L13", "5L13", "4L13", "3L13"], - powerswap: ["7E", "6E", "5E", "4E"], + outrage: ["7T", "6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], - razorwind: ["7E", "6E", "5E", "4E", "3E"], - refresh: ["3S1"], - rest: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L36", "6M", "6L36", "5M", "5L55", "4M", "4L55", "3M", "3L55", "3S0"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L32", "6M", "6L32", "5M", "5L45", "4M", "4L45", "3M", "3L45", "3S1", "3S0"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M", "3S1"], - seedbomb: ["6T", "5T", "4T"], - selfdestruct: ["3T"], + screech: ["7L15", "6L15", "5L37", "4L37", "3L37", "3S1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "7L42", "6M", "6L42", "5T", "5L63", "4M", "4L55", "3T", "3L55", "3S0"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], + stomp: ["7L23", "6L23", "5L29", "4L29", "3L29", "3S1"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L18", "6L18", "5L23", "4L23", "3L23"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L21"], - takedown: ["7E", "6E", "5E", "4E", "3E"], + synchronoise: ["7L53", "6L53", "5L55"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + uproar: ["7T", "7L27", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - nuzleaf: {learnset: { + makuhita: {learnset: { + armthrust: ["7L7", "6L7", "5D", "5L7", "4L7", "3L10", "3S0"], attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7L25", "6L25", "5L25", "4L25", "3L37"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulletseed: ["4M", "3M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S0"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "4E"], captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], + closecombat: ["7L40", "6L40", "5L40", "4L40"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crosschop: ["7E", "6E", "5E", "4E", "3E"], + detect: ["7E", "6E", "5E", "4E", "3E"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - explosion: ["7M", "6M", "5M", "4M", "3T"], - extrasensory: ["7L36", "6L36", "5L49", "4L49", "3L49"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7L37", "6L37", "5L37", "4M", "4L37", "3T", "3L40"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L12", "6L12", "5L19", "4L19", "3L19"], - falseswipe: ["7M", "6M", "5M"], - feintattack: ["7L24", "6L24", "5L31", "4L31", "3L31"], - flash: ["6M", "5M", "4M", "3M"], + fakeout: ["7L10", "6L10", "5L13", "4L13", "3L19"], + feint: ["7E", "6E", "5E", "4E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], - foulplay: ["6T", "5T"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + forcepalm: ["7L13", "6L13", "5L28", "4L28"], + foresight: ["7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - growth: ["7L6", "6L6", "5L7", "4L7", "3L7"], - harden: ["7L3", "6L3", "5L3", "4L3", "3L3"], headbutt: ["4T"], + heavyslam: ["7L46", "6L46", "5L46"], + helpinghand: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - leafblade: ["7L28", "6L28"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5D", "5T", "4T", "3T"], + knockoff: ["7T", "7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19", "3L28"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "7L16", "6M", "6L9", "5L13", "4L13", "3L13"], - payback: ["7M", "6M", "5M", "4M"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - razorleaf: ["7L1", "6L1", "5L1", "4L1"], - razorwind: ["7L20", "6L20", "5L37", "4L37", "3L37"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], + revenge: ["7E", "6E", "5E", "4E", "3E"], + reversal: ["7L43", "6L43", "5L43", "4L43", "3L49"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + sandattack: ["7L4", "6L4", "5L4", "4L4", "3L4"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], + seismictoss: ["7L31", "6L31", "5L31", "4L31", "3T", "3L46"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7L28", "6L22", "5L22", "4L22", "3L31"], + snore: ["7T", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L32", "6M", "6L32", "5M", "5L43", "4M", "4L43", "3T", "3L43"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - torment: ["7M", "7L9", "6M", "6L16", "5M", "5L25", "4M", "4L25", "3M", "3L25"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - worryseed: ["6T", "5T", "4T"], + vacuumwave: ["4T"], + vitalthrow: ["7L22", "6L10", "5L10", "4L10", "3L13"], + wakeupslap: ["7L34", "7E", "6L34", "6E", "5L34", "5E", "4L34", "4E"], + whirlpool: ["4M"], + whirlwind: ["7L16", "6L16", "5L16", "4L16", "3L22"], + wideguard: ["7E", "6E", "5E"], + workup: ["7M", "5M"], }}, - shiftry: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["4T"], + hariyama: {learnset: { + armthrust: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7L26", "6L26", "5L27", "4L27", "3L40"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - bulletseed: ["4M", "3M"], + brine: ["7L1", "6L1", "5L1", "4M", "4L1"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], + closecombat: ["7L46", "6L46", "5L52", "4L52"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], - defog: ["4M"], + counter: ["3T"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - explosion: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7L42", "6L42", "5L47", "4M", "4L47", "3T", "3L44"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M"], - feintattack: ["7L1", "6L1", "5L1", "4L1"], - flash: ["6M", "5M", "4M", "3M"], + fakeout: ["7L10", "6L10", "5L13", "4L13", "3L19"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - foulplay: ["6T", "5T"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7T", "6T", "4M", "3M"], + forcepalm: ["7L13", "6L13", "5L32", "4L32"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growth: ["3L1"], - harden: ["3L1"], headbutt: ["4T"], + heavyslam: ["7L54", "6L54", "5L62"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hurricane: ["7L32", "6L32"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - leafstorm: ["7L44", "6L44", "5L49", "4L49"], - leaftornado: ["7L20", "6L19", "5L19"], - lowkick: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19", "3L29"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - nastyplot: ["7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], - naturepower: ["7M", "6M", "3L1"], - ominouswind: ["4T"], payback: ["7M", "6M", "5M", "4M"], - pound: ["3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - razorleaf: ["7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], + reversal: ["7L50", "6L50", "5L57", "4L57", "3L55"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], - round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - silverwind: ["4M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - whirlwind: ["7L1", "6L1", "5L1", "4L1"], - worryseed: ["6T", "5T", "4T"], - xscissor: ["7M", "6M", "5M", "4M"], - }}, - taillow: {learnset: { - aerialace: ["7M", "7L21", "6M", "6L21", "5M", "5L34", "4M", "4L34", "3M", "3L34"], - agility: ["7L29", "6L29", "5L43", "4L43", "3L43"], - aircutter: ["4T"], - airslash: ["7L33", "6L33", "5L53", "4L53"], - attract: ["7M", "6M", "5M", "4M", "3M"], - boomburst: ["7E", "6E"], - bravebird: ["7L41", "7E", "6L41", "6E", "5E", "5D", "4E"], - captivate: ["4M"], - confide: ["7M", "6M"], - counter: ["3T"], - defog: ["7E", "6E", "5E", "4M"], - doubleedge: ["3T"], - doubleteam: ["7M", "7L17", "6M", "6L17", "5M", "5L19", "4M", "4L19", "3M", "3L19"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L37", "6T", "6L26", "5T", "5L26", "4T", "4L26", "3L26"], - endure: ["5D", "4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - featherdance: ["3S0"], - fly: ["7M", "6M", "5M", "4M", "3M"], - focusenergy: ["7L5", "6L4", "5L4", "4L4", "3L4", "3S0"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hurricane: ["7E"], - mimic: ["3T"], - mirrormove: ["7E", "6E", "5E", "5D", "4E", "3E"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - ominouswind: ["4T"], - peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], - quickattack: ["7L9", "6L7", "5L8", "4L8", "3L8"], - quickguard: ["7L25", "6L25"], - rage: ["7E", "6E", "5E", "4E", "3E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7L45"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + sandattack: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - skyattack: ["7E", "6T", "6E", "5E", "4E", "3T", "3E"], + seismictoss: ["7L34", "6L34", "5L37", "4L37", "3T", "3L51"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7L30", "6L22", "5L22", "4L22", "3L33"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "5D", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uturn: ["7M", "6M", "5M", "4M"], - whirlwind: ["7E", "6E", "5E", "4E"], - wingattack: ["7L13", "6L13", "5L13", "4L13", "3L13"], + vacuumwave: ["4T"], + vitalthrow: ["7L22", "6L10", "5L10", "4L10", "3L13"], + wakeupslap: ["7L38", "6L38", "5L42", "4L42"], + whirlpool: ["4M"], + whirlwind: ["7L16", "6L16", "5L16", "4L16", "3L22"], workup: ["7M", "5M"], }}, - swellow: {learnset: { - aerialace: ["7M", "7L21", "6M", "6L21", "5M", "5L38", "4M", "4L38", "3M", "3L38"], - agility: ["7L33", "6L33", "5L49", "4L49", "3L49", "3S0"], - aircutter: ["4T"], - airslash: ["7L39", "7L1", "6L1", "5L61", "4L61"], + nosepass: {learnset: { + ancientpower: ["5D", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["3S0"], - bravebird: ["7L51", "7L1", "6L1"], + block: ["7T", "7L7", "7E", "6T", "6L7", "6E", "5T", "5L19", "5E", "4T", "4L19", "4E", "3L16"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - defog: ["4M"], - doubleedge: ["3T"], - doubleteam: ["7M", "7L17", "6M", "6L17", "5M", "5L19", "4M", "4L19", "3M", "3L19"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L45", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L28"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M", "3S0"], - fly: ["7M", "6M", "5M", "4M", "3M"], - focusenergy: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + discharge: ["7L31", "6L31", "5L55", "4L49"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["7T", "7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], + gravity: ["7T", "6T", "5T", "4T"], + harden: ["7L4", "6L4", "5L7", "4L7", "3L7"], + headbutt: ["4T"], + helpinghand: ["3S0"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + lockon: ["7L43", "6L43", "5L73", "4L67", "3L46"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], + magnitude: ["7E", "6E", "5E", "4E", "3E"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - ominouswind: ["4T"], - peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], - pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], + painsplit: ["7T", "6T", "5T", "4T"], + powergem: ["7L25", "6L25", "5L49", "4L49"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - quickguard: ["7L27", "6L27"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43", "3M", "3L37"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7L57"], - roost: ["7M", "6M", "5T", "4M"], + rockblast: ["7L28", "6L18", "5L18"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31", "3T", "3L28", "3S0"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L10", "6L10", "5L13", "4L13", "3L13"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37", "3M", "3L31"], secretpower: ["6M", "4M", "3M"], - skyattack: ["6T", "5T", "4T", "3T", "3S0"], + selfdestruct: ["3T"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spark: ["7L19", "6L19", "5L25"], + stealthrock: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M", "3S0"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25", "3T", "3L22", "3S0"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uturn: ["7M", "6M", "5M", "4M"], - wingattack: ["7L13", "6L13", "5L13", "4L13", "3L13"], - workup: ["7M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wideguard: ["7E", "6E"], + zapcannon: ["7L43", "6L43", "5L67", "4L61", "3L43"], }}, - wingull: {learnset: { - aerialace: ["7M", "7L29", "6M", "6L29", "5M", "5L42", "4M", "4L42", "3M"], - agility: ["7L36", "7E", "6L36", "6E", "5L37", "5E", "4L37", "4E", "3L55", "3E"], - aircutter: ["7L22", "6L22", "5L33", "4T"], - airslash: ["7L40", "6L40", "5L47", "4L47"], - aquaring: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - brine: ["7E", "6E", "5E", "4M"], + probopass: {learnset: { + allyswitch: ["7T"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + block: ["7T", "7L7", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], - doubleedge: ["3T"], + dazzlinggleam: ["7M", "6M"], + discharge: ["7L31", "6L31", "5L55", "4L49"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "6T", "5T", "4T"], + irondefense: ["7T", "7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + ironhead: ["7T", "6T", "5T", "4T"], + lockon: ["7L43", "6L43", "5L73", "4L67"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetbomb: ["7L10", "7L1", "6L1", "5L1", "4L1"], + magneticflux: ["7L1"], + magnetrise: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + painsplit: ["7T", "6T", "5T", "4T"], + powergem: ["7L25", "6L25", "5L49", "4L49"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43"], + return: ["7M", "6M", "5M", "4M"], + rockblast: ["7L28", "6L18", "5L18"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + spark: ["7L19", "6L19", "5L25"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + thunderwave: ["7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + triattack: ["7L1"], + voltswitch: ["7M", "6M", "5M"], + wideguard: ["7L1", "6L1"], + zapcannon: ["7L43", "6L43", "5L67", "4L61"], + }}, + skitty: {learnset: { + assist: ["7L31", "6L22", "5L22", "4L18", "3L19"], + attract: ["7M", "7L10", "6M", "6L8", "5M", "5L8", "4M", "4L4", "3M", "3L7", "3S2"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["7L43", "7E", "6L43", "6E", "5D", "5L46", "5E", "4M", "4L42"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L25", "6L25", "5L25", "4L22", "3L25"], + confide: ["7M", "6M"], + copycat: ["7L19", "6L18", "5L18", "4L11"], + cosmicpower: ["7E", "6E"], + covet: ["7T", "7L34", "6T", "6L34", "5T", "5L36", "4L32", "3L31"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disarmingvoice: ["7L13", "6L13"], + doubleedge: ["7L40", "6L40", "5L42", "4L39", "3T", "3L39"], + doubleslap: ["7L16", "6L15", "5L15", "4L15", "3L15"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + faketears: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7L22", "6L22", "5L29", "4L25", "3L27"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7L4", "6L4", "5D", "5L4", "4L4"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - gust: ["7E", "6E", "5E", "4E", "3E"], - hail: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S2", "3S1", "3S0"], + headbutt: ["4T"], + healbell: ["7T", "7L37", "6T", "6L37", "5T", "5L39", "4T", "4L36", "3L37"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hurricane: ["7L43", "6L43", "5L50"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], mimic: ["3T"], - mist: ["7L12", "7E", "6L12", "6E", "5L16", "5E", "4L16", "4E", "3L21", "3E"], + mudbomb: ["7E", "6E", "5E", "4E"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - ominouswind: ["4T"], - pluck: ["5M", "4M"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["3S0"], + playrough: ["7L46", "6L46"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L26", "6L26", "5L34", "4L34", "3L43"], - quickattack: ["7L19", "6L19", "5L24", "4L24", "3L31"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "7E", "7L33", "6M", "6L26", "6E", "5T", "5L29", "5E", "4M", "4L29"], + rollout: ["4T", "3T", "3S1"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "5D", "4M", "3M"], - skyattack: ["6T", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + simplebeam: ["7E", "6E", "5E"], + sing: ["7L7", "6L7", "5L11", "4L8", "3L13"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - soak: ["7E", "6E"], - steelwing: ["7M", "6M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - supersonic: ["7L5", "6L5", "5L6", "4L6", "3L7"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + suckerpunch: ["7E", "6E", "5E", "4T", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S2", "3S1", "3S0"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L3", "3S2", "3S1", "3S0"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["7E", "6E", "5D", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["7E", "6E", "5E", "5D", "4T", "4E", "3E"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - watergun: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - waterpulse: ["7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], - watersport: ["7E", "6E", "5E", "4E", "3E"], - wideguard: ["7E", "6E"], - wingattack: ["7L8", "6L8", "5L11", "4L11", "3L13"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], + wakeupslap: ["7L28", "6L28", "5L32", "4L29"], + waterpulse: ["7T", "6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, - pelipper: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], + delcatty: {learnset: { + attract: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - brine: ["7L22", "6L28", "5L34", "4M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - defog: ["4M"], + covet: ["7T", "6T", "5T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], + doubleslap: ["7L1", "6L1", "5L1", "4L1", "3L1"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "7L28", "6M", "6L39", "5M", "5L43", "4M", "4L43"], - fly: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L1", "6L1", "5L1", "4L1"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - gunkshot: ["6T", "5T", "4T"], - hail: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["3L1"], + headbutt: ["4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hurricane: ["7L55", "7L1", "6L1", "5L63"], - hydropump: ["7L50", "7L1", "6L1", "5L57", "4L57", "3L61"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mist: ["7L12", "6L12", "5L16", "4L16", "3L21"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - ominouswind: ["4T"], - payback: ["7M", "7L19", "6M", "6L19", "5M", "5L24", "4M", "4L24"], - pluck: ["5M", "4M"], - protect: ["7M", "7L1", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L25"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "7L39", "6M", "6L22", "5T", "5L31", "4M", "4L31"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - shockwave: ["6T", "4M", "3M"], - skyattack: ["6T", "5T", "4T", "3T"], - skydrop: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M", "3S0"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M", "3S0"], + sing: ["7L1", "6L1", "5L1", "4L1", "3L1"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - soak: ["7L1", "6L1", "5L1"], - spitup: ["7L33", "6L33", "5L38", "4L38", "3L47"], - steelwing: ["7M", "6M", "4M", "3M"], - stockpile: ["7L33", "6L33", "5L38", "4L38", "3L33"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - supersonic: ["7L5", "6L5", "5L6", "4L6", "3L7"], - surf: ["7M", "6M", "5M", "4M", "3M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7L33", "6L33", "5L38", "4L38", "3L33"], + sweetkiss: ["3S0"], swift: ["4T", "3T"], - tailwind: ["7L44", "7L1", "6T", "6L1", "5T", "5L50", "4T", "4L50"], - thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], - watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], - whirlpool: ["4M"], - wingattack: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + uproar: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - ralts: {learnset: { - allyswitch: ["7E", "6E", "5M"], + sableye: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], + astonish: ["7L9", "6L9", "5L11", "4L11", "3L13"], attract: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - calmmind: ["7M", "7L24", "6M", "6L24", "5M", "5L28", "4M", "4L23", "3M", "3L21"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L34", "6L34", "5L43", "4L39", "3S1"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "6S3", "5M", "4M", "3M"], + captivate: ["7E", "6E", "5E", "4M"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "4E"], - confusion: ["7L4", "6L4", "5L6", "5D", "4L6", "3L6", "3S2"], + confuseray: ["7L31", "6L31", "5L46", "4L46", "3L37"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - destinybond: ["7E", "6E", "5E", "5D", "4E", "3E"], - disable: ["7E", "6E", "5E", "4E", "3E"], - disarmingvoice: ["7L11", "6L11"], + detect: ["7L14", "6L14", "5L22", "4L22", "3L25"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], - doubleteam: ["7M", "7L6", "6M", "6L6", "5M", "5L10", "4M", "4L10", "3M", "3L11"], - drainingkiss: ["7L22", "6L22"], - dreameater: ["7M", "7L39", "6M", "6L39", "5M", "5L50", "4M", "4L45", "3T", "3L46"], - echoedvoice: ["7M", "6M", "5M"], - encore: ["7E", "6E", "6S0", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fakeout: ["7L21", "6L18", "5L18", "4L18", "3L21"], + feint: ["7E", "6E", "5E", "4E"], + feintattack: ["7L19", "6L19", "5L32", "4L32", "3L29", "3S1"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], flash: ["6M", "5M", "4M", "3M"], + flatter: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L4", "6L4", "5D", "5L4", "4L4", "3L5", "3S0"], + foulplay: ["7T", "7L41", "6T", "6L41", "5T", "5L50", "5S2"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L32", "6L32", "5L39", "4L34", "3L36"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "6S0", "5L1", "4L1", "3L1", "3S0", "3S1"], - grudge: ["7E", "6E", "5E", "4E"], + furycutter: ["4T", "3T"], + furyswipes: ["7L11", "6L11", "5L15", "4L15", "3L17"], + gravity: ["7T", "6T", "5T", "4T"], headbutt: ["4T"], - healpulse: ["7L19", "6L19", "5L23"], - helpinghand: ["6T", "5T", "5D", "4T"], + helpinghand: ["3S1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L37", "6L37", "5L45", "4L43", "3L41"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - imprison: ["7L29", "6L29", "5L34", "4L32", "3L31"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7L14", "6L14", "5L17", "4L17"], - magicalleaf: ["7L17", "6L17", "5L21", "4L21"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meanlook: ["7E", "6E", "5E", "4E", "3E"], - memento: ["7E", "6E", "5E", "4E", "3E"], + honeclaws: ["6M", "5M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T"], + imprison: ["7E", "6E"], + incinerate: ["6M", "5M"], + knockoff: ["7T", "7L26", "6T", "6L26", "5T", "5L29", "4T", "4L29", "3L33"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T", "4T"], + meanlook: ["7L46", "7E", "6L1", "6E", "5L60", "5E", "4L57", "3L45"], + megakick: ["3T"], + megapunch: ["3T"], + metalburst: ["7E", "6E", "5E"], + metronome: ["3T"], mimic: ["3T"], - mistyterrain: ["7E", "6E"], + moonlight: ["7E", "6E", "5E", "4E", "3E"], mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], + nightshade: ["7L6", "6L6", "5L8", "4L8", "3L9", "3S0"], + octazooka: ["5S2"], + ominouswind: ["4T"], + painsplit: ["7T", "6T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + powergem: ["7L36", "6L36", "5L43", "4L43"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L27", "6M", "6L27", "5M", "5L32", "4M", "4L28", "3M", "3L26"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + punishment: ["7L24", "6L24", "5L36", "4L36"], + quash: ["7M", "7L44", "6M", "6L44"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M", "3S2"], + recover: ["7E", "6E", "6S4", "6S3", "5E", "4E", "3E", "3S1"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowsneak: ["7E", "6E", "5E", "4E"], - shockwave: ["6T", "4M", "3M", "3S2"], - signalbeam: ["6T", "5T", "4T"], - sing: ["3S2"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "7L39", "6M", "6L39", "6S3", "5M", "5L57", "4M", "4L53", "3M", "3L41", "3S1"], + shadowclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L39", "4M", "4L39"], + shadowsneak: ["7L16", "6L16", "5L25", "4L25"], + shockwave: ["7T", "6T", "6S4", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - storedpower: ["7L42", "6L42", "5L54"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5D", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5D", "5E", "4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T"], - synchronoise: ["7E", "6E", "5E"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - teleport: ["7L9", "6L9", "5L12", "4L12", "3L16"], + taunt: ["7M", "6M", "6S4", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + tickle: ["5S2"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "6M", "5M", "4E", "3E"], - wish: ["3S0"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + trick: ["7T", "7E", "6T", "6E", "5T", "5E", "5S2", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], + willowisp: ["7M", "6M", "6S4", "6S3", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "7L34", "6T", "6L1", "5T", "5L53", "4T", "4L50"], }}, - kirlia: {learnset: { - allyswitch: ["5M"], + mawile: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L25", "6L25", "5L31", "4L31", "3L31"], + bite: ["7L9", "6L9", "5L11", "4L11", "3L11"], bodyslam: ["3T"], - calmmind: ["7M", "7L26", "6M", "6L26", "5M", "5L31", "4M", "4L25", "3M", "3L21"], - captivate: ["4M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["7E", "6E", "5E", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L40", "6L40", "5L50", "4L45"], confide: ["7M", "6M"], - confusion: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - disarmingvoice: ["7L11", "6L11"], + counter: ["3T"], + crunch: ["7L29", "6L29", "5L36", "4L36", "3L36"], + darkpulse: ["7M", "6M", "5T", "4M"], doubleedge: ["3T"], - doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - drainingkiss: ["7L23", "6L23"], - dreameater: ["7M", "7L47", "6M", "6L47", "5M", "5L59", "4M", "4L53", "3T", "3L54"], - echoedvoice: ["7M", "6M", "5M"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], + fairywind: ["7L1", "6L1"], + faketears: ["7L5", "6L5", "5D", "5L6", "4L6", "3L6", "3S0"], + falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S1"], + feintattack: ["7L21", "6L21", "5L26", "4L26", "3L26"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "6S2", "5D", "5E", "4E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L37", "6L37", "5L45", "4L39", "3L40"], + gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + growl: ["7L1", "6L1"], + guardswap: ["7E", "6E", "5E", "4E"], headbutt: ["4T"], - healpulse: ["7L19", "6L19", "5L25"], - helpinghand: ["6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L44", "6L44", "5L53", "4L50", "3L47"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - imprison: ["7L33", "6L33", "5L39", "4L36", "3L33"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7L14", "6L14", "5L17", "4L17"], - magicalleaf: ["7L17", "6L17", "5L22", "4L22", "3L1"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7E", "6E", "5E", "4E"], + icepunch: ["7T", "6T", "5D", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "7L33", "6T", "6L33", "5T", "5L41", "4T", "4L41", "3L41", "3S1"], + ironhead: ["7T", "7L45", "7L1", "6T", "6L1", "6S3", "6S2", "5T", "5L56", "4T", "4L56"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalburst: ["7E", "6E", "5E"], mimic: ["3T"], + mistyterrain: ["7E", "6E"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L30", "6M", "6L30", "5M", "5L36", "4M", "4L31", "3M", "3L26"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L49", "7L1", "6L1", "6S3", "6S2"], + poisonfang: ["7E", "6E", "5E", "4E", "3E"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "6M", "6S3", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4E", "3T", "3E"], + punishment: ["7E", "6E", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + seismictoss: ["7E", "6E", "3T"], + shadowball: ["7M", "6M", "5M", "4M"], + sing: ["3S1"], + slam: ["7E", "6E", "5E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - storedpower: ["7L51", "6L51", "5L64"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L41", "6L41", "5L51", "4L51", "3L46"], + stealthrock: ["7T", "6T", "5T"], + stockpile: ["7L41", "6L41", "5L51", "4L51", "3L46"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L37", "7E", "6L37", "6E", "6S3", "6S2", "5L46", "5E", "4T", "4L46", "4E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - teleport: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L41", "6L41", "5L51", "4L51", "3L46"], + sweetscent: ["7L13", "6L13", "5L16", "4L16", "3L16"], + swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + taunt: ["7M", "7L1", "6M", "6L1", "5M", "4M", "3M"], + thunderfang: ["7E", "6E", "5E", "4E"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + tickle: ["7E", "6E", "5E", "4E", "3E"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "6M", "5M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + vicegrip: ["7L17", "6L17", "5L21", "4L21", "3L21", "3S1"], }}, - gardevoir: {learnset: { - allyswitch: ["5M"], + aron: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - calmmind: ["7M", "7L26", "6M", "6L26", "6S1", "5M", "5L33", "4M", "4L25", "3M", "3L21"], - captivate: ["7L44", "6L44", "5L60", "4M", "4L53"], - chargebeam: ["7M", "6M", "5M", "4M"], - confide: ["7M", "6M"], - confusion: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - dazzlinggleam: ["7M", "6M", "6S1"], - defensecurl: ["3T"], - disarmingvoice: ["7L11", "6L11"], - doubleedge: ["3T"], - doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - drainingkiss: ["7L23", "6L23"], - dreameater: ["7M", "7L53", "6M", "6L53", "5M", "5L73", "4M", "4L65", "3T", "3L60"], - echoedvoice: ["7M", "6M", "5M"], + autotomize: ["7L43", "6L39", "5L43"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L40", "6L40", "5L50", "4L43", "3T", "3L44"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonrush: ["7E", "6E", "5E", "4E"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "5S0", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L40", "6L40", "5L53", "4L45", "3L42"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - healingwish: ["7L1", "6L1", "5L1", "4L1"], - healpulse: ["7L19", "6L19", "5L25"], - helpinghand: ["6T", "5T", "4T"], + furycutter: ["4T", "3T"], + harden: ["7L1", "6L1", "5D", "5L4", "4L4", "3L4"], + headbutt: ["7L7", "6L7", "5L11", "4T", "4L11", "3L10"], + headsmash: ["7E", "6E", "5D", "5E", "4E"], + heavyslam: ["7L46", "6L43", "5L46"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L49", "6L49", "5L65", "5S0", "4L60", "3L51"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - imprison: ["7L35", "6L35", "5L45", "4L40", "3L33"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magicalleaf: ["7L17", "6L17", "5L22", "4L22"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "7L37", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], + ironhead: ["7T", "7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], + irontail: ["7T", "7L34", "6T", "6L34", "5T", "5L39", "4M", "4L39", "3M", "3L29"], + magnetrise: ["7T", "6T", "5T", "4T"], + metalburst: ["7L49", "6L49", "5L53", "4L46"], + metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], + metalsound: ["7L31", "6L31", "5L36", "4L36", "3L39"], mimic: ["3T"], - mistyterrain: ["7L1", "6L1"], - moonblast: ["7L62", "7L1", "6L1", "6S1"], - mudslap: ["4T", "3T"], + mudslap: ["7L4", "6L4", "5L8", "4T", "4L8", "3T", "3L7"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L31", "6M", "6L31", "5M", "5L40", "5S0", "4M", "4L33", "3M", "3L26"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L32", "4M", "4L32", "3M", "3L34"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E"], + roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - storedpower: ["7L58", "7L1", "6L1", "6S1", "5L80"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - teleport: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "5S0", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L22", "5L25", "4L25", "3L25"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "6M", "5M"], - wish: ["7L14", "6L14", "5L17", "4L17"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], - }}, - gallade: {learnset: { - aerialace: ["7M", "7L17", "6M", "5M", "4M"], - allyswitch: ["5M"], - attract: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - closecombat: ["7L53", "7L1", "6L1", "5L59", "4L53"], - confide: ["7M", "6M"], - confusion: ["7L4", "7L1", "6L1", "5L1", "4L1"], - cut: ["6M", "5M", "4M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - dualchop: ["6T", "5T"], - earthquake: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - falseswipe: ["7M", "7L44", "6M", "6L44", "5M", "5L50", "4M", "4L45"], - feint: ["7L40", "6L40", "5L45", "4L39"], - firepunch: ["6T", "5T", "4T"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["7L14", "6L14", "5L17", "4T", "4L17"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healpulse: ["7L19", "6L19", "5L25"], - helpinghand: ["7L35", "6T", "6L35", "5T", "5L39", "4T", "4L36"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icepunch: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - leafblade: ["7L1", "6L1", "5L1", "4L1"], - leer: ["7L1", "6L1", "5L1", "4L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - mudslap: ["4T"], - naturalgift: ["4M"], - nightslash: ["7L1", "6L1", "5L1", "4L1"], - painsplit: ["6T", "5T", "4T"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], - protect: ["7M", "7L49", "6M", "6L49", "5M", "5L53", "4M", "4L50"], - psychic: ["7M", "6M", "5M", "4M"], - psychocut: ["7L31", "6L31", "5L36", "4L31"], - psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - quickguard: ["7L11", "6L11"], - raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - slash: ["7L1", "6L17", "5L22", "4L22"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stoneedge: ["7M", "6M", "5M", "4M"], - storedpower: ["7L58", "7L1", "6L1", "5L64"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "7L26", "6M", "6L26", "5M", "5L31", "4M", "4L25"], - taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], - teleport: ["7L9", "7L1", "6L1", "5L1", "4L1"], - thief: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - vacuumwave: ["4T"], - wideguard: ["7L23", "6L23"], - willowisp: ["7M", "6M", "5M"], - wonderroom: ["6T", "5T"], - workup: ["7M", "5M"], - xscissor: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, - surskit: {learnset: { - agility: ["7L22", "6L22", "5L31", "4L31", "3L31"], - aquajet: ["7L30", "7E", "6L30", "6E", "5E"], + lairon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L35", "6L35", "5L43", "4L43"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bubble: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], - bubblebeam: ["7L17", "6L17", "5L25", "4L25", "3L25"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + autotomize: ["7L47", "6L45", "5L51"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - doubleedge: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L43", "6L43", "5L62", "4L51", "3T", "3L53"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fellstinger: ["7E", "6E"], - flash: ["6M", "5M", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "5D", "4M", "3M"], - haze: ["7L25", "6L25", "5L37", "4L37", "3L37"], + furycutter: ["4T", "3T"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + heavyslam: ["7L51", "6L51", "5L56"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7E", "6E", "5E", "5D", "4E", "3E"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], - lunge: ["7E"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], + ironhead: ["7T", "7L22", "6T", "6L22", "5T", "5L29", "4T", "4L29"], + irontail: ["7T", "7L35", "6T", "6L35", "5T", "5L45", "4M", "4L45", "3M", "3L29"], + magnetrise: ["7T", "6T", "5T", "4T"], + metalburst: ["7L55", "6L55", "5L67", "4L56"], + metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], + metalsound: ["7L31", "6L31", "5L40", "4L40", "3L45"], mimic: ["3T"], - mindreader: ["7E", "6E", "5E", "4E", "3E"], - mist: ["7L25", "6L25", "5L37", "4L37", "3L37"], - mudshot: ["7E", "6E", "5E", "4E", "3E"], - mudslap: ["4T"], - mudsport: ["3S0"], + mudslap: ["7L4", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], naturalgift: ["4M"], - powersplit: ["7E", "6E"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7E", "6E", "5E", "4E", "3E"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quickattack: ["7L6", "6L6", "5L7", "4L7", "3L7", "3S1"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stickyweb: ["7L38", "6L38"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L9", "6L9", "5L13", "4L13", "3L13"], - swift: ["4T", "3T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L22", "5L25", "4L25", "3L25"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - watersport: ["7L14", "6L14", "5L19", "4L19", "3L19"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, - masquerain: {learnset: { + aggron: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["7L22", "6L22", "4T"], - airslash: ["7L38", "6L38", "5L47", "4L47"], + ancientpower: ["4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L51", "6L48", "5L57"], + avalanche: ["4M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L42", "7L1", "6L1", "5L61", "4L61"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - defog: ["4M"], - doubleedge: ["3T"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L45", "6L45", "5L74", "4L57", "3T", "3L63", "3S0"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "6S2", "5M", "4M", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], + furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L17", "6L17", "5L22", "4L22", "3L26"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + headsmash: ["6S2"], + heavyslam: ["7L57", "6L57", "5L65"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["3C"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], + ironhead: ["7T", "7L22", "6T", "6L22", "6S2", "5T", "5L29", "4T", "4L29"], + irontail: ["7T", "7L35", "6T", "6L35", "5T", "5L48", "4M", "4L48", "3M", "3L29", "3S1", "3S0"], + lowkick: ["7T", "6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalburst: ["7L63", "6L63", "5L82", "4L65"], + metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], + metalsound: ["7L31", "6L31", "5L40", "4L40", "3L50", "3S1", "3S0"], mimic: ["3T"], - mudslap: ["4T"], + mudslap: ["7L4", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], naturalgift: ["4M"], - nightmare: ["3T"], - ominouswind: ["7L1", "6L1", "5L1", "4T", "4L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quickattack: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - quiverdance: ["7L52", "7L1", "6L1", "5L68"], + outrage: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37", "3S1", "3S0"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], + roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L25", "6M", "6L25", "6S2", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - scaryface: ["7L22", "6L22", "5L26", "4L26", "3L33"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["7L32", "6L32", "5L40", "4M", "4L40", "3L47"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + smackdown: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], - stunspore: ["7L26", "6L26", "5L33", "4L33", "3L40"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L22", "5L25", "4L25", "3L25", "3S1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], - watersport: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L1"], - whirlwind: ["7L48", "7L1", "6L1", "5L54", "4L54", "3L53"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], }}, - shroomish: {learnset: { - absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], + meditite: {learnset: { + acupressure: ["7L33", "6L33", "5L39"], attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], bodyslam: ["3T"], - bulletseed: ["7E", "6E", "5E", "5D", "4M", "3M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulletpunch: ["7E", "6E", "5E", "4E"], + calmmind: ["7M", "7L23", "6M", "6L23", "5M", "5L25", "4M", "4L25", "3M", "3L28"], captivate: ["4M"], - charm: ["7E", "6E", "5E", "4E", "3E"], confide: ["7M", "6M"], + confusion: ["7L7", "6L7", "5L8", "4L8", "3L9", "3S1", "3S0"], + counter: ["7L44", "6L44", "3T"], + detect: ["7L9", "6L9", "5L11", "4L11", "3L12", "3S1"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["7E", "6T", "6E", "5T", "5E"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + drainpunch: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E", "3S1"], + endure: ["7L12", "6L12", "5D", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6E", "5E", "4E", "3E"], - falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S0"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + feint: ["7L15", "6L15", "5L22", "4L22"], + firepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], flash: ["6M", "5M", "4M", "3M"], - focuspunch: ["7E", "6T", "6E", "5E", "5D"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + forcepalm: ["7L17", "6L17", "5L29", "4L29"], + foresight: ["7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["7L26", "6T", "6L26", "5T", "5L37", "4M", "4L37", "3M", "3L45"], grassknot: ["7M", "6M", "5M", "4M"], - growth: ["7L29", "6L29", "5L33", "4L33", "3L36"], - headbutt: ["7L15", "6L15", "5L21", "4T", "4L21", "3L22"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - leechseed: ["7L8", "6L8", "5L13", "4L13", "3L10"], - megadrain: ["7L12", "6L12", "5L17", "4L17", "3L16", "3S0"], + gravity: ["7T", "6T", "5T", "4T"], + guardswap: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7L20", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L17"], + highjumpkick: ["7L28", "6L28", "5L32", "4L32", "3L32"], + icepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T", "4T"], + meditate: ["7L4", "6L4", "5D", "5L4", "4L4", "3L4", "3S0"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], - naturalgift: ["7E", "6E", "5E", "4M"], - poisonpowder: ["7L19", "6L19", "5L25", "4L25", "3L28"], + mindreader: ["7L25", "6L18", "5L18", "4L18", "3L22"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["7T", "6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + powerswap: ["7E", "6E", "5E", "4E"], + powertrick: ["7L36", "6L36", "5L43", "4L39"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S0"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychocut: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L36", "3T", "3L36"], + psyshock: ["7M", "6M", "5M"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L41", "6L41", "5L50", "4L46", "3L44"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L39", "6L39", "5L46", "4L43", "3L41"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - seedbomb: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L41", "5E", "4T", "4L41", "4E"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M", "3S1"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spore: ["7L40", "6L40", "5L45", "4L45", "3L54"], - stunspore: ["7L5", "6L5", "5L9", "5D", "4L9", "3L7", "3S0"], + snore: ["7T", "6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - tackle: ["7L1", "6L1", "5L5", "4L5", "3L4"], - toxic: ["7M", "7L33", "6M", "6L33", "5M", "4M", "3M"], - venoshock: ["7M", "6M", "5M"], - wakeupslap: ["7E", "6E", "5E", "4E"], - worryseed: ["7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], + swagger: ["7M", "6M", "5M", "4M", "3T", "3L20"], + swift: ["4T", "3T"], + telekinesis: ["7T", "5M"], + thunderpunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + vacuumwave: ["4T"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - breloom: {learnset: { - absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], + medicham: {learnset: { + acupressure: ["7L33", "6L33", "5L42"], attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L1"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulletseed: ["4M", "3M"], + calmmind: ["7M", "7L23", "6M", "6L23", "5M", "5L25", "4M", "4L25", "3M", "3L28"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7L22", "6L22", "5L25", "4L25", "3T", "3L28"], - cut: ["6M", "5M", "4M", "3M"], + confusion: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + counter: ["7L53", "6L53", "3T"], + detect: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["7L50", "6L45", "5L45", "4L45", "3T", "3L54"], - endure: ["4M", "3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["7L12", "6L12", "4M", "3T"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M"], - feint: ["7L19", "6L19"], + feint: ["7L15", "6L15", "5L22", "4L22"], + firepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - forcepalm: ["7L28", "6L28", "5L29", "4L29"], + focuspunch: ["7T", "6T", "4M", "3M"], + forcepalm: ["7L17", "6L17", "5L29", "4L29"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["7L15", "6L15", "5L21", "4T", "4L21", "3L22"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7L20", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L17"], + highjumpkick: ["7L28", "6L28", "5L32", "4L32", "3L32"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - leechseed: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], lowsweep: ["7M", "6M", "5M"], - machpunch: ["7L1", "6L23", "5L23", "4L23", "3L23"], - megadrain: ["7L12", "6L12", "5L17", "4L17", "3L16"], + magiccoat: ["7T", "6T", "5T", "4T"], + meditate: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], megakick: ["3T"], megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], - mindreader: ["7L33", "6L33", "5L37", "4L37", "3L45"], + mindreader: ["7L25", "6L18", "5L18", "4L18", "3L22"], mudslap: ["4T", "3T"], naturalgift: ["4M"], + painsplit: ["7T", "6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + powertrick: ["7L36", "6L36", "5L49", "4L42"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L36", "3T", "3L36"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L47", "6L47", "5L62", "4L55", "3L54"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], + reversal: ["7L42", "6L42", "5L55", "4L49", "3L46"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["7L44", "6T", "6L41", "5T", "5L41", "4T", "4L41"], seismictoss: ["3T"], - skyuppercut: ["7L39", "6L33", "5L33", "4L33", "3L36"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stoneedge: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], - stunspore: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T", "3L20"], + swift: ["4T", "3T"], + telekinesis: ["7T", "5M"], + thunderpunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], vacuumwave: ["4T"], - venoshock: ["7M", "6M", "5M"], workup: ["7M", "5M"], - worryseed: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "7L1", "6T", "6L1", "5T", "4T"], }}, - slakoth: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["7E", "6T", "6E", "5T", "5E"], - amnesia: ["7L17", "6L17", "5L25", "4L25", "3L25"], + electrike: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L24", "6L24", "5L28", "4L28", "3L33"], + bodyslam: ["3T"], captivate: ["4M"], - chipaway: ["7L25", "6L25", "5L37"], + charge: ["7L44", "6L44", "5L44", "4L44", "3L41"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7L30", "6L30", "5L43", "4L37", "3T", "3L37"], - covet: ["7L22", "6T", "6L22", "5T", "5L31", "4L31", "3L31"], - crushclaw: ["7E", "6E", "5E", "4E", "3E"], + crunch: ["7E", "6E", "5E", "4E", "3E"], curse: ["7E", "6E", "5E", "4E", "3E"], - cut: ["6M", "5M", "4M", "3M"], + discharge: ["7L29", "7E", "6L29", "6E", "5L41", "5E", "4L41", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - encore: ["7L6", "6L6", "5L7", "4L7", "3L7"], + eerieimpulse: ["7E", "6E"], + electroball: ["7E", "6E", "5E"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L14", "6L14", "5L19", "4L19", "3L19"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flail: ["7L33", "6L33", "5L49", "4L43", "3L43"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + flameburst: ["7E", "6E", "5E"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gunkshot: ["6T", "5T", "4T"], - hammerarm: ["7E", "6E", "5E", "4E"], - headbutt: ["4T"], + headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], + howl: ["7L7", "6L7", "5L12", "4L12", "3L12"], + icefang: ["7E", "6E", "5D", "5E", "4E"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + leer: ["7L4", "6L4", "5L9", "4L9", "3L9"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["3T"], mudslap: ["4T", "3T"], - naturalgift: ["4M"], - nightslash: ["7E", "6E", "5E", "5D", "4E"], - playrough: ["7L38", "6L38"], - poweruppunch: ["6M"], + naturalgift: ["4M"], + odorsleuth: ["7L16", "6L16", "5L25", "4L25", "3L25"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L10", "6L10", "5L17", "4L17", "3L17"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L34", "6M", "6L34", "5M", "5L36", "4M", "4L36", "3M", "3L28"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slackoff: ["7L9", "6L9", "5L13", "4L13", "3L13"], - slash: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + signalbeam: ["7T", "6T", "5D", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spark: ["7L13", "6L13", "5L20", "4L20", "3L20"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["5D", "4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + swift: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], + switcheroo: ["7E", "6E", "5E", "4E"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L49", "6M", "6L49", "5M", "5L52", "4M", "4L49", "3M", "3L36"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - tickle: ["7E", "6E", "5E"], + thunderfang: ["7L19", "7E", "6L19", "6E", "5L33", "5E", "4L33", "4E"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5D", "5M", "5L4", "4M", "4L4", "3T", "3L4"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - workup: ["7M", "5M"], - yawn: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L39", "6M", "6L39", "5M", "5L49"], }}, - vigoroth: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["6T", "5T"], + manectric: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L24", "6L24", "5L30", "4L30", "3L39", "3S0"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chipaway: ["7L27", "6L27", "5L43"], + charge: ["7L48", "6L48", "5L54", "4L54", "3L53"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7L33", "6L33", "5L37", "4L37", "3T", "3L37"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], + discharge: ["7L30", "6L30", "5L49", "4L49"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - encore: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], - endure: ["7L17", "6L17", "5L25", "4M", "4L25", "3T", "3L25"], + electricterrain: ["7L60", "7L1", "6L1"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["7L37", "6T", "6L37", "5L49", "4M", "4L43", "3M", "3L43"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L14", "6L14", "5L19", "4L19", "3L19"], - gunkshot: ["6T", "5T", "4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], + howl: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leer: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + odorsleuth: ["7L16", "6L16", "5L25", "4L25", "3L25"], + overheat: ["7M", "6M", "6S1", "5M", "4M"], + protect: ["7M", "6M", "6S1", "5M", "4M", "3M"], + quickattack: ["7L10", "6L10", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], + refresh: ["3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7L43", "7L1", "6L1", "5L55", "4L49", "3L49"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L36", "6M", "6L36", "5M", "5L42", "4M", "4L42", "3M", "3L31"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slash: ["7L23", "6L23", "5L31", "4L31", "3L31"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spark: ["7L13", "6L13", "5L20", "4L20", "3L20"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L54", "6M", "6L54", "5M", "5L66", "4M", "4L61", "3M", "3L45", "3S0"], + thunderbolt: ["7M", "6M", "6S1", "5M", "4M", "3M"], + thunderfang: ["7L19", "6L19", "5L37", "4L37"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - workup: ["7M", "5M"], + uproar: ["7T", "6T", "5T"], + voltswitch: ["7M", "6M", "6S1", "5M"], + wildcharge: ["7M", "7L42", "6M", "6L42", "5M", "5L61"], }}, - slaking: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "4S0", "3M"], - afteryou: ["6T", "5T"], - amnesia: ["7L17", "6L17", "5L25", "4L25", "3L25"], + plusle: {learnset: { + agility: ["7L37", "6L37", "5L48", "4L44", "3L47"], attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + batonpass: ["7L34", "6L34", "5L44", "4L42", "3L40"], + bestow: ["7L13", "6L13"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chipaway: ["7L27", "6L27", "5L37"], + charge: ["7L28", "6L28", "5L38", "4L35", "3L31"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L25", "7E", "6L25"], confide: ["7M", "6M"], - counter: ["7L33", "6L33", "5L43", "4L37", "3T", "3L37"], - covet: ["7L23", "6T", "6L23", "5T", "5L31", "4L31", "3L31"], - cut: ["6M", "5M", "4M", "3M"], + copycat: ["7L22", "6L22", "5L24", "4L24"], + counter: ["3T"], + covet: ["7T"], + defensecurl: ["3T"], + discharge: ["7L31", "7E", "6L31", "6E", "5D", "5E", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - encore: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L19", "6L19", "5L29"], + electroweb: ["7T", "6T"], + encore: ["7L10", "6L10", "5L17", "4L17", "3L22"], endure: ["4M", "3T"], + entrainment: ["7L49", "6L1", "5L63"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L14", "6L14", "5L19", "4L19", "3L19"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flail: ["7L39", "6L39", "5L49", "4L43", "3L43"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "7L47", "7L1", "6M", "6L1", "5M", "5L55", "4M", "4L49"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + faketears: ["7E", "6L35", "5L21", "4L21", "3L28"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigaimpact: ["7M", "6M", "5M", "4M", "4S0"], - gunkshot: ["6T", "5T", "4T"], - hammerarm: ["7L61", "7L1", "6L1", "5L67", "4L61"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], headbutt: ["4T"], + helpinghand: ["7T", "7L4", "6T", "6L4", "5T", "5L10", "4T", "4L10", "3L13"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "7L40", "6T", "6L40", "5T", "5L51", "4T", "4L48"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magnetrise: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], + mudsport: ["3S0"], + nastyplot: ["7L46", "6L1", "5L56", "4L51"], naturalgift: ["4M"], - poweruppunch: ["6M"], + nuzzle: ["7L1", "6L1"], + playnice: ["7L1", "6L1"], protect: ["7M", "6M", "5M", "4M", "3M"], - punishment: ["7L53", "7L1", "6L1", "5L61", "4L55"], - quash: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L7", "4L7", "3L10", "3S1"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "4S0", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M", "4S0"], - shockwave: ["6T", "4M", "3M"], - slackoff: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5D", "5T", "4T"], + sing: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3T", "3L36"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spark: ["7L7", "6L7", "5L15", "4L15", "3L19"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7E", "6E", "5E", "4E"], + swift: ["7L16", "6L16", "5L31", "4T", "4L29", "3T"], + tearfullook: ["7E"], + thunder: ["7M", "7L43", "6M", "6L42", "5M", "5L42", "4M", "4L38", "3M", "3L37"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5D", "5M", "5L3", "4M", "4L3", "3T", "3L4", "3S1", "3S0"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - workup: ["7M", "5M"], - yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + uproar: ["7T", "6T", "5T", "4T"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], }}, - nincada: {learnset: { - absorb: ["7L5"], - aerialace: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L29", "6L29"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - bugbuzz: ["7E", "6E", "5E", "4E"], + minun: {learnset: { + agility: ["7L37", "6L37", "5L48", "4L44", "3L47"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L34", "6L34", "5L44", "4L42", "3L40"], + bodyslam: ["3T"], + captivate: ["4M"], + charge: ["7L28", "6L28", "5L38", "4L35", "3L31"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7E", "6L21", "5L21", "4L21", "3L28"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["7L37", "6M", "6L37", "5M", "5L45", "4M", "4L45", "3M", "3L45"], + copycat: ["7L22", "6L22", "5L24", "4L24"], + counter: ["3T"], + covet: ["7T"], + defensecurl: ["3T"], + discharge: ["7L31", "7E", "6L31", "6E", "5D", "5E", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "5D", "4M", "4E", "3T", "3E"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L19", "6L19", "5L29"], + electroweb: ["7T", "6T"], + encore: ["7L10", "6L10", "5L17", "4L17", "3L22"], + endure: ["4M", "3T"], + entrainment: ["7L49", "6L1", "5L63"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L33", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3L25"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - finalgambit: ["7E", "6E", "5E"], + faketears: ["7L25", "7E", "6L25", "5L35", "4L31"], flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], - gigadrain: ["6T", "5T", "4M", "3M"], - gust: ["7E", "6E", "5E", "4E", "3E"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], + headbutt: ["4T"], + helpinghand: ["7T", "7L4", "6T", "6L4", "5T", "5L10", "4T", "4L10", "3L13"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - leechlife: ["7M", "6L5", "5L5", "5D", "4L5", "3L5"], - metalclaw: ["7L21", "6L21", "5L38", "4L38", "3L38"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magnetrise: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], - mindreader: ["7L25", "6L19", "5L19", "4L19", "3L19"], - mudslap: ["7L17", "6L17", "5L31", "4T", "4L31", "3T", "3L31"], + mudslap: ["4T", "3T"], + nastyplot: ["7L46", "6L1", "5L56", "4L51"], naturalgift: ["4M"], - nightslash: ["7E", "6E", "5E", "5D", "4E"], + nuzzle: ["7L1", "6L1"], + playnice: ["7L1", "6L1"], protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "6L1", "5L7", "4L7", "3L10", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sandattack: ["7L9", "6L9", "5L9", "4L9", "3L9"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - silverwind: ["7E", "6E", "5E", "4E", "3E"], + seismictoss: ["3T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5D", "5T", "4T"], + sing: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spark: ["7L7", "6L7", "5L15", "4L15", "3L19"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7E", "6E", "5E", "4E"], + swift: ["7L16", "6L16", "5L31", "4T", "4L29", "3T"], + switcheroo: ["7L13", "6L13"], + tearfullook: ["7E"], + thunder: ["7M", "7L43", "6M", "6L42", "5M", "5L42", "4M", "4L38", "3M", "3L37"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5D", "5M", "5L3", "4M", "4L3", "3T", "3L4", "3S1", "3S0"], toxic: ["7M", "6M", "5M", "4M", "3M"], - xscissor: ["7M", "6M", "5M", "4M"], + trumpcard: ["7L40", "6L40", "5L51", "4L48"], + uproar: ["7T", "6T", "5T", "4T"], + voltswitch: ["7M", "6M", "5M"], + watersport: ["3S0"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], }}, - ninjask: {learnset: { - absorb: ["7L5", "7L1"], + volbeat: {learnset: { + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L17", "6L17", "5L38", "4L38", "3L38"], aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L35", "6L35", "5L45", "4L45", "3L45"], - bugbite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L40", "7E", "6L40", "6E", "5L41", "5E", "4L41", "4E"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], - defog: ["4M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "7L1", "6M", "6L20", "5M", "5L20", "4M", "4L20", "3M", "3L20"], + confuseray: ["7L8", "6L8", "5L9", "4L9", "3L5"], + counter: ["3T"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], + dizzypunch: ["7E", "6E", "5E"], + doubleedge: ["7L47", "6L45", "5L45", "4L45", "3T", "3L37"], + doubleteam: ["7M", "7L5", "6M", "6L5", "5M", "5L5", "4M", "4L5", "3M", "3L9"], + dynamicpunch: ["3T"], + encore: ["7E", "6E", "5E", "4E"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M", "3M"], + flash: ["7L1", "6M", "6L1", "5D", "5M", "5L1", "4M", "4L1", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L1", "6L20", "5L20", "4T", "4L20", "3T", "3L20"], - furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], - gigadrain: ["6T", "5T", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + helpinghand: ["7T", "7L36", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L33"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - leechlife: ["7M", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "7L50"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lunge: ["7E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], - mindreader: ["7L29", "6L19", "5L19", "4L19", "3L19"], + moonlight: ["7L19", "6L13", "5L13", "4L13", "3L13"], mudslap: ["4T", "3T"], naturalgift: ["4M"], ominouswind: ["4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], + playrough: ["7L43", "6L43"], + poweruppunch: ["6M"], + protect: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L29"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L12", "6L12", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], - screech: ["7L1", "6L20", "5L20", "4L20", "3L20"], secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "6E", "5E", "3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - silverwind: ["4M"], - slash: ["7L23", "6L23", "5L31", "4L31", "3L31"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "7L26", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L25"], + silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], stringshot: ["4T"], - strugglebug: ["6M", "5M"], + strugglebug: ["7L15", "6M", "6L15", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - swordsdance: ["7M", "7L41", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L25"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailglow: ["7L22", "6L21", "5L21", "4L21", "3L21"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + trick: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4E", "3E"], uturn: ["7M", "6M", "5M", "4M"], - xscissor: ["7M", "7L47", "6M", "6L47", "5M", "5L52", "4M", "4L52"], + waterpulse: ["7T", "6T", "4M", "3M"], + zenheadbutt: ["7T", "7L33", "6T", "6L33", "5T", "5L37", "4T", "4L37"], }}, - shedinja: {learnset: { - absorb: ["7L5", "7L1"], + illumise: {learnset: { + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["3S4"], - batonpass: ["3S5"], - bugbite: ["6T", "5T", "4T"], + aircutter: ["4T"], + aromatherapy: ["7E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L40", "7E", "6L40", "6E", "5L41", "5E", "4L41", "4E"], + captivate: ["7E", "6E", "5E", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L9", "6L9", "5D", "5L9", "4L9", "3L9"], confide: ["7M", "6M"], - confuseray: ["7L29", "6L29", "5L31", "4L31", "3L31", "3S0"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], + confuseray: ["7E", "6E", "5E"], + counter: ["3T"], + covet: ["7T", "7L47", "6T", "6L45", "5T", "5L45", "4L45", "3L37"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M", "3S1"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + encore: ["7L26", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3L25"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], + faketears: ["7E", "6E", "5D", "5E"], flash: ["6M", "5M", "4M", "3M"], + flatter: ["7L29", "6L29", "5L29", "4L29", "3L29"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T", "3S1"], - furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], - gigadrain: ["6T", "5T", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grudge: ["7L37", "6L37", "5L45", "4L45", "3L45", "3S0"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - healblock: ["7L41", "6L41", "5L52", "4L52"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + growth: ["7E", "6E", "5E", "4E", "3E"], + helpinghand: ["7T", "7L36", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L33"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - leechlife: ["7M", "6L5", "5L5", "4L5", "3L5"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "7L50"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], - mindreader: ["7L25", "6L19", "5L19", "4L19", "3L19"], + moonlight: ["7L19", "6L13", "5L13", "4L13", "3L13"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - phantomforce: ["7L45", "6L45"], + ominouswind: ["4T"], + playnice: ["7L1", "6L1"], + playrough: ["7L43", "6L43"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L12", "6L12", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L9", "7L1", "6L9", "5L9", "4L9", "3L9"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], - screech: ["3S1"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7L33", "6M", "6L33", "5M", "5L59", "4M", "4L59", "3M", "3L38", "3S0"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shadowsneak: ["7L21", "6L21", "5L38", "4L38"], - slash: ["3S3"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["7L17", "6T", "6L17", "5T", "5L25", "4T", "4L25", "3L25", "3S0"], stringshot: ["4T"], - strugglebug: ["6M", "5M"], + strugglebug: ["7L15", "6M", "6L15", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["3S2"], - telekinesis: ["5M"], + sweetscent: ["7L5", "6L5", "5L5", "4L5", "3L5"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - willowisp: ["7M", "6M", "5M", "4M"], - xscissor: ["7M", "6M", "5M", "4M", "4S6"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wish: ["7L22", "6L21", "5L21", "4L21", "3L21"], + zenheadbutt: ["7T", "7L33", "6T", "6L33", "5T", "5L37", "4T", "4L37"], }}, - whismur: {learnset: { - astonish: ["7L8", "6L8", "5L11", "4L11", "3L11"], + budew: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7E", "6E", "5E", "4E"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7E", "6E", "5E", "4E"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L4", "6L4", "5L4", "4L4"], + hiddenpower: ["7M", "6M", "5M", "4M"], + leafstorm: ["7E", "6E", "5E", "4E"], + megadrain: ["7L13", "6L13", "5L13", "4L13"], + mindreader: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + pinmissile: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeppowder: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spikes: ["7E", "6E", "5E", "4E"], + stunspore: ["7L10", "6L10", "5L10", "4L10"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + watersport: ["7L7", "6L7", "5L7", "4L7"], + worryseed: ["7T", "7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16"], + }}, + roselia: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + aromatherapy: ["7L43", "6L43", "5L43", "4L43", "3L53"], attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], + bulletseed: ["7E", "6E", "4M", "3M"], captivate: ["4M"], - circlethrow: ["7E", "6E", "5E"], confide: ["7M", "6M"], - counter: ["3T"], - defensecurl: ["3T"], - disarmingvoice: ["7E", "6E"], + cottonspore: ["7E", "6E", "5E", "4E", "3E"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - echoedvoice: ["7M", "7L4", "6M", "6L4", "5M"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "5D", "4E"], endure: ["4M", "3T"], - extrasensory: ["7E", "6E", "5E", "4E", "3E"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6E", "5E"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - hammerarm: ["7E", "6E", "5E", "4E"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L11", "6L11", "5L15", "4L15", "3L15"], - hypervoice: ["7L39", "6T", "6L39", "5T", "5L51", "4L45", "3L45"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "7L25", "7E", "6T", "6L25", "6E", "5T", "5L25", "5E", "4M", "4L25", "3M", "3L33"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L22", "7E", "6L22", "6E", "5L22", "5E", "4L22", "3L29", "3S1"], + growth: ["7L4", "6L4", "5D", "5L4", "4L4", "3L5", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L34", "6L34", "5L34", "4L34", "3L41"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7L16", "6L16", "5L16", "4L16", "3L21", "3S1"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19", "3L25", "3S1"], + megadrain: ["7L13", "6L13", "5L13", "4L13", "3L17"], mimic: ["3T"], + mindreader: ["7E", "6E", "5E", "4E"], mudslap: ["4T", "3T"], - naturalgift: ["4M"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + nightmare: ["3T"], + petalblizzard: ["7L37", "6L37"], + petaldance: ["7L50", "6L37", "5L40", "4L40", "3L49"], + pinmissile: ["7E", "6E", "5E", "4E", "3E"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L7", "6L7", "5L7", "4L7", "3L9", "3S0"], + powerwhip: ["7E"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L32", "6M", "6L32", "5M", "5L45", "4M", "4L41", "3M", "3L41"], - retaliate: ["6M", "5M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L29", "6M", "6L29", "5M", "5L35", "4M", "4L35", "3M", "3L35"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L15", "6L15", "5L31", "4L31", "3L31"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "7L36", "6M", "6L36", "5T", "5L45", "4M", "4L41", "3T", "3L41"], - smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - smokescreen: ["7E", "6E", "5E", "4E"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + sleeppowder: ["7E", "6E", "5D", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stomp: ["7L22", "6L22", "5L25", "4L25", "3L25"], + spikes: ["7E", "6E", "5E", "4E", "3E"], + stunspore: ["7L10", "6L10", "5L10", "4L10", "3L13"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L18", "6L18", "5L21", "4L21", "3L21"], - swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - synchronoise: ["7L43", "6L41", "5L41"], - takedown: ["7E", "6E", "5E", "4E", "3E"], - teeterdance: ["3S0"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7L25", "6T", "6L5", "5T", "5L5", "5D", "4T", "4L5", "3L5", "3S0"], - waterpulse: ["6T", "4M", "3M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "5D", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["3S1"], + sweetscent: ["7L31", "6L31", "5L31", "4L31", "3L37"], + swift: ["5D", "4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "7L46", "7E", "6T", "6L46", "6E", "5T", "5L46", "5E", "4T", "4L46", "4E", "3L57", "3E"], + toxic: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L45"], + toxicspikes: ["7L28", "6L28", "5L28", "4L28"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - loudred: {learnset: { - astonish: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + roserade: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigadrain: ["7T", "6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7L1", "6L1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + laserfocus: ["7T"], + magicalleaf: ["7L1", "6L1", "5L1", "4L1"], + megadrain: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + sweetscent: ["7L1", "6L1", "5L1", "4L1"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + venomdrench: ["7L1", "6L1"], + venoshock: ["7M", "6M", "5M"], + weatherball: ["7L1", "6L1", "5L1", "4L1"], + worryseed: ["7T", "6T", "5T", "4T"], + }}, + gulpin: {learnset: { + acidarmor: ["7E", "6E", "5D", "5E", "4E", "3E"], + acidspray: ["7L17", "6L17", "5L34"], + amnesia: ["7L12", "6L12", "5L17", "4L17", "3L17"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L1", "6L20", "5L20", "4L20"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L41", "6L40"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], + curse: ["7E", "6E", "5E", "4E"], defensecurl: ["3T"], + destinybond: ["7E", "6E", "5E", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "7L4", "7L1", "6M", "6L1", "5M"], - endeavor: ["6T", "5T"], + encore: ["7L20", "6L20", "5L23", "4L23", "3L23"], endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L36", "6T", "6L36", "5T", "5L49", "4T", "4L44"], + gigadrain: ["7T", "6T", "5D", "5T", "4M", "3M"], + gunkshot: ["7T", "7L49", "7E", "6T", "6L49", "6E", "5T", "5L59", "5E", "4T", "4L54"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], - hypervoice: ["7L45", "6T", "6L45", "5T", "5L65", "4L57", "3L57"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - lowkick: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7E", "6E", "5E", "4T", "3T"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], + nightmare: ["3T"], + painsplit: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + poisongas: ["7L8", "6L8", "5D", "5L9", "4L9", "3L9"], pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L36", "6M", "6L36", "5M", "5L57", "4M", "4L51", "3M", "3L51"], - retaliate: ["6M", "5M"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L32", "6M", "6L32", "5M", "5L43", "4M", "4L43", "3M", "3L43"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L15", "6L15", "5L37", "4L37", "3L37"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], + seedbomb: ["7T", "6T", "5T", "4T"], + selfdestruct: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "7L41", "6M", "6L41", "5T", "5L57", "4M", "4L51", "3T", "3L51"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M", "3S0"], + sing: ["3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L10", "6L10", "5L14", "4L14", "3L14", "3S0"], + sludgebomb: ["7M", "7L33", "6M", "6L33", "5M", "5L44", "4M", "4L39", "3M", "3L39"], + sludgewave: ["7M", "6M", "5M"], + smog: ["7E", "6E", "5E", "4E", "3E"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stomp: ["7L23", "6L23", "5L29", "4L29", "3L29"], + spitup: ["7L28", "6L28", "5L39", "4L34", "3L34"], + stockpile: ["7L28", "6L28", "5L39", "4L34", "3L34"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L18", "6L18", "5L23", "4L23", "3L23"], swagger: ["7M", "6M", "5M", "4M", "3T"], - synchronoise: ["7L50", "6L50", "5L51"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7L27", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + swallow: ["7L28", "6L28", "5L39", "4L34", "3L34"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7L25", "6M", "6L25", "5M", "5L28", "4M", "4L28", "3M", "3L28", "3S0"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wringout: ["7L44", "6L44", "5L54", "4L49"], + yawn: ["7L5", "6L5", "5L6", "4L6", "3L6"], }}, - exploud: {learnset: { - astonish: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + swalot: {learnset: { + acidspray: ["7L17", "6L17", "5L38"], + amnesia: ["7L12", "6L12", "5L17", "4L17", "3L17"], attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - bite: ["7L1", "6L20", "5L20", "4L20"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - boomburst: ["7L58", "7L1", "6L1"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L49", "6L46"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["7L1", "6L26", "5L26", "4L26", "3T", "3L26"], bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], counter: ["3T"], - crunch: ["7L1", "6L40", "5L40", "4L40"], defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "7L4", "7L1", "6M", "6L1", "5M"], - endeavor: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + encore: ["7L20", "6L20", "5L23", "4L23", "3L23"], endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L42", "6T", "6L42", "5T", "5L59", "4T", "4L52"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["7T", "7L61", "7L1", "6T", "6L1", "5T", "5L73", "4T", "4L66"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], - hyperbeam: ["7M", "7L64", "6M", "6L64", "5M", "5L79", "4M", "4L71", "3M", "3L40", "3S1"], - hypervoice: ["7L47", "6T", "6L47", "5T", "5L71", "4L63", "3L63", "3S0"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7L1", "6L1", "5L1", "4L1"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - lowkick: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - overheat: ["7M", "6M", "5M", "4M", "3M"], + nightmare: ["3T"], + painsplit: ["7T", "6T", "5T", "4T"], + poisongas: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L36", "6M", "6L36", "5M", "5L55", "4M", "4L55", "3M", "3L55", "3S0"], - retaliate: ["6M", "5M"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L32", "6M", "6L32", "5M", "5L45", "4M", "4L45", "3M", "3L45", "3S0", "3S1"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L15", "6L15", "5L37", "4L37", "3L37", "3S1"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], + seedbomb: ["7T", "6T", "5T", "4T"], + selfdestruct: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "7L42", "6M", "6L42", "5T", "5L63", "4M", "4L55", "3T", "3L55", "3S0"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], + shockwave: ["7T", "6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + sludgebomb: ["7M", "7L37", "6M", "6L37", "5M", "5L52", "4M", "4L45", "3M", "3L48"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stomp: ["7L23", "6L23", "5L29", "4L29", "3L29", "3S1"], + spitup: ["7L30", "6L30", "5L45", "4L38", "3L40"], + stockpile: ["7L30", "6L30", "5L45", "4L38", "3L40"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - supersonic: ["7L18", "6L18", "5L23", "4L23", "3L23"], - surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - synchronoise: ["7L53", "6L53", "5L55"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7L27", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + swallow: ["7L30", "6L30", "5L45", "4L38", "3L40"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + toxic: ["7M", "7L25", "6M", "6L25", "5M", "5L30", "4M", "4L30", "3M", "3L31"], + venomdrench: ["7L1"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wringout: ["7L54", "7L1", "6L1", "5L66", "4L59"], + yawn: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], }}, - makuhita: {learnset: { - armthrust: ["7L7", "6L7", "5L7", "5D", "4L7", "3L10", "3S0"], + carvanha: {learnset: { + agility: ["7L39", "6L36", "5L36", "4L36", "3L43"], + ancientpower: ["7E", "6E", "5E", "4T", "4E"], + aquajet: ["7L11", "6L11", "5L31", "4L31"], + assurance: ["7L15", "6L15", "5L26", "4L26"], attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7L25", "6L25", "5L25", "4L25", "3L37"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S0"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E", "6E", "5E", "4E"], + bite: ["7L1", "6L1", "6S1", "5D", "5L1", "4L1", "3L1", "3S0"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], captivate: ["4M"], - chipaway: ["7E", "6E", "5E"], - closecombat: ["7L40", "6L40", "5L40", "4L40"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - crosschop: ["7E", "6E", "5E", "4E", "3E"], - detect: ["7E", "6E", "5E", "4E", "3E"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], + crunch: ["7L36", "6L28", "5L28", "4L28", "3L22"], + darkpulse: ["7M", "6M", "5D", "5T", "4M"], + destinybond: ["7E", "6E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7L37", "6L37", "5L37", "4M", "4L37", "3T", "3L40"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L10", "6L10", "5L13", "4L13", "3L19"], - feint: ["7E", "6E", "5E", "4E"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], - firepunch: ["6T", "5T", "4T", "3T"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], - forcepalm: ["7L13", "6L13", "5L28", "4L28"], - foresight: ["7E", "6E", "5E", "4E", "3E"], + focusenergy: ["7L8", "6L8", "5L8", "4L8", "3L13"], frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - heavyslam: ["7L46", "6L46", "5L46"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + furycutter: ["4T", "3T"], + hail: ["7M", "6M", "5M", "4M", "3M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "5D", "4T", "3T"], - knockoff: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19", "3L28"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + hydropump: ["7E", "6E", "6S1", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L25", "6L16", "5L16", "4L16"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + leer: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7L32", "6L32"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychicfangs: ["7E"], + rage: ["7L4", "6L4", "5L6", "4L6", "3L7"], raindance: ["7M", "6M", "5M", "4M", "3M"], refresh: ["3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - revenge: ["7E", "6E", "5E", "4E", "3E"], - reversal: ["7L43", "6L43", "5L43", "4L43", "3L49"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], - roleplay: ["6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandattack: ["7L4", "6L4", "5L4", "4L4", "3L4"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L29", "6L11", "5L11", "4L11", "3L16", "3S0"], + screech: ["7L18", "6L18", "5L18", "4L18", "3L28"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7L31", "6L31", "5L31", "4L31", "3T", "3L46"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - smellingsalts: ["7L28", "6L22", "5L22", "4L22", "3L31"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], + superfang: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], + swagger: ["7M", "7L22", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3T", "3L37"], + swift: ["7E", "6E", "5E", "4T", "3T"], + takedown: ["7L43", "6L38", "5L38", "4L38", "3L31"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7E", "6E", "5D", "5E", "4E", "3E"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - vacuumwave: ["4T"], - vitalthrow: ["7L22", "6L10", "5L10", "4L10", "3L13"], - wakeupslap: ["7L34", "7E", "6L34", "6E", "5L34", "5E", "4L34", "4E"], + uproar: ["7T", "6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M", "3S0"], whirlpool: ["4M"], - whirlwind: ["7L16", "6L16", "5L16", "4L16", "3L22"], - wideguard: ["7E", "6E", "5E"], - workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - hariyama: {learnset: { - armthrust: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + sharpedo: {learnset: { + agility: ["7L45", "6L45", "5L45", "4L45", "3L53"], + ancientpower: ["4T"], + aquajet: ["7L11", "6L11", "6S0", "5L34", "4L34"], + assurance: ["7L15", "6L15", "5L26", "4L26"], attract: ["7M", "6M", "5M", "4M", "3M"], - bellydrum: ["7L26", "6L26", "5L27", "4L27", "3L40"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brine: ["7L1", "6L1", "5L1", "4M", "4L1"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["4M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - closecombat: ["7L46", "6L46", "5L52", "4L52"], confide: ["7M", "6M"], - counter: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + crunch: ["7L40", "6L28", "6S1", "6S0", "5L28", "4L28", "3L22"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["6S0"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7L42", "6L42", "5L47", "4M", "4L47", "3T", "3L44"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L10", "6L10", "5L13", "4L13", "3L19"], - firepunch: ["6T", "5T", "4T", "3T"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], - focuspunch: ["6T", "4M", "3M"], - forcepalm: ["7L13", "6L13", "5L32", "4L32"], + feint: ["7L1", "6L1", "5L1", "4L1"], + focusenergy: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heavyslam: ["7L54", "6L54", "5L62"], - helpinghand: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - knockoff: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19", "3L29"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L25", "6L16", "6S0", "5L16", "4L16"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + liquidation: ["7T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], + nightslash: ["7L62", "7L1", "6L1", "5L56", "4L56"], payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7L34", "6L34", "6S1"], poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7L50", "6L50", "5L57", "4L57", "3L55"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - round: ["7M", "6M", "5M"], - sandattack: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - secretpower: ["6M", "4M", "3M"], - seismictoss: ["7L34", "6L34", "5L37", "4L37", "3T", "3L51"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - smellingsalts: ["7L30", "6L22", "5L22", "4L22", "3L33"], - snore: ["6T", "5T", "4T", "3T"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - vacuumwave: ["4T"], - vitalthrow: ["7L22", "6L10", "5L10", "4L10", "3L13"], - wakeupslap: ["7L38", "6L38", "5L42", "4L42"], - whirlpool: ["4M"], - whirlwind: ["7L16", "6L16", "5L16", "4L16", "3L22"], - workup: ["7M", "5M"], - }}, - nosepass: {learnset: { - ancientpower: ["5D", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - block: ["7L7", "7E", "6T", "6L7", "6E", "5T", "5L19", "5E", "4T", "4L19", "4E", "3L16"], - bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - confide: ["7M", "6M"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["3T"], - discharge: ["7L31", "6L31", "5L55", "4L49"], - doubleedge: ["7E", "6E", "5E", "4E", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthpower: ["7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gravity: ["6T", "5T", "4T"], - harden: ["7L4", "6L4", "5L7", "4L7", "3L7"], - headbutt: ["4T"], - helpinghand: ["3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - lockon: ["7L43", "6L43", "5L73", "4L67", "3L46"], - magiccoat: ["6T", "5T", "4T"], - magnetrise: ["6T", "5T", "4T"], - magnitude: ["7E", "6E", "5E", "4E", "3E"], - mimic: ["3T"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - powergem: ["7L25", "6L25", "5L49", "4L49"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43", "3M", "3L37"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7L28", "6L18", "5L18"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31", "3T", "3L28", "3S0"], + roar: ["7M", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L10", "6L10", "5L13", "4L13", "3L13"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], - round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37", "3M", "3L31"], - secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L19", "6L19", "5L25"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "5D", "4M"], - stoneedge: ["7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M", "3S0"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25", "3T", "3L22", "3S0"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - voltswitch: ["7M", "6M", "5M"], - wideguard: ["7E", "6E"], - zapcannon: ["7L43", "6L43", "5L67", "4L61", "3L43"], - }}, - probopass: {learnset: { - ancientpower: ["4T"], - attract: ["7M", "6M", "5M", "4M"], - block: ["7L7", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - confide: ["7M", "6M"], - dazzlinggleam: ["7M", "6M"], - discharge: ["7L31", "6L31", "5L55", "4L49"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - explosion: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], - flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - irondefense: ["7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - ironhead: ["6T", "5T", "4T"], - lockon: ["7L43", "6L43", "5L73", "4L67"], - magiccoat: ["6T", "5T", "4T"], - magnetbomb: ["7L10", "7L1", "6L1", "5L1", "4L1"], - magneticflux: ["7L1"], - magnetrise: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - mudslap: ["4T"], - naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - powergem: ["7L25", "6L25", "5L49", "4L49"], - protect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43"], - return: ["7M", "6M", "5M", "4M"], - rockblast: ["7L28", "6L18", "5L18"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], - round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37"], - secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - spark: ["7L19", "6L19", "5L25"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - taunt: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - triattack: ["7L1"], - voltswitch: ["7M", "6M", "5M"], - wideguard: ["7L1", "6L1"], - zapcannon: ["7L43", "6L43", "5L67", "4L61"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L29", "6L11", "6S1", "5L11", "4L11", "3L16"], + screech: ["7L18", "6L18", "5L18", "4L18", "3L28"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7L51", "6L50", "5L50", "4L50", "3L48"], + slash: ["7L1", "6L30", "6S1", "5L30", "4L30", "3L33"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L22", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3T", "3L43"], + swift: ["4T", "3T"], + taunt: ["7M", "7L56", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L38"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7T", "6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - skitty: {learnset: { - assist: ["7L31", "6L22", "5L22", "4L18", "3L19"], - attract: ["7M", "7L10", "6M", "6L8", "5M", "5L8", "4M", "4L4", "3M", "3L7", "3S2"], - batonpass: ["7E", "6E", "5E", "4E", "3E"], + wailmer: {learnset: { + amnesia: ["7L37", "6L37", "5L37", "4L37", "3L46"], + aquaring: ["7E", "6E", "5E", "4E"], + astonish: ["7L16", "6L16", "5L17", "4L17", "3L23"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["7L43", "7E", "6L43", "6E", "5L46", "5E", "5D", "4M", "4L42"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L25", "6L25", "5L25", "4L22", "3L25"], + bodyslam: ["7E", "6E", "5E", "4E", "3T"], + bounce: ["7T", "7L45", "6T", "6L44", "5D", "5T", "5L44", "4T", "4L44"], + brine: ["7L25", "6L25", "5L31", "4M", "4L31"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + clearsmog: ["7E", "6E"], confide: ["7M", "6M"], - copycat: ["7L19", "6L18", "5L18", "4L11"], - cosmicpower: ["7E", "6E"], - covet: ["7L34", "6T", "6L34", "5T", "5L36", "4L32", "3L31"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - disarmingvoice: ["7L13", "6L13"], - doubleedge: ["7L40", "6L40", "5L42", "4L39", "3T", "3L39"], - doubleslap: ["7L16", "6L15", "5L15", "4L15", "3L15"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["7E", "6E", "5E", "4E", "3T"], + dive: ["7L41", "6M", "6L33", "5M", "5L41", "4T", "4L41", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], - faketears: ["7E", "6E", "5E", "4E", "3E"], - feintattack: ["7L22", "6L22", "5L29", "4L25", "3L27"], - flash: ["6M", "5M", "4M", "3M"], - foresight: ["7L4", "6L4", "5L4", "5D", "4L4"], + fissure: ["7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2"], + growl: ["7L4", "6L4", "5L4", "4L4", "3L5"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], - healbell: ["7L37", "6T", "6L37", "5T", "5L39", "4T", "4L36", "3L37"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + heavyslam: ["7L53", "6L50", "5L50"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hydropump: ["7L49", "6L47", "5L47", "4L47", "3L50"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + icywind: ["7T", "6T", "5T", "4T", "3T"], mimic: ["3T"], - mudbomb: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], + mist: ["7L22", "6L22", "5L24", "4L24", "3L32"], naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - payday: ["3S0"], - playrough: ["7L46", "6L46"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], + rest: ["7M", "7L29", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L37"], return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T", "3S1"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L11", "4T", "4L11", "3T", "3L14"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - simplebeam: ["7E", "6E", "5E"], - sing: ["7L7", "6L7", "5L11", "4L8", "3L13"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - suckerpunch: ["7E", "6E", "5E", "4T", "4E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L3", "3S0", "3S1", "3S2"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - tickle: ["7E", "6E", "5E", "5D", "4E", "3E"], + selfdestruct: ["3T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5D", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + soak: ["7E", "6E", "5E"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + thrash: ["7E", "6E", "5E", "4E", "3E"], + tickle: ["7E", "6E", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], - wakeupslap: ["7L28", "6L28", "5L32", "4L29"], - waterpulse: ["6T", "4M", "3M"], - wildcharge: ["7M", "6M", "5M"], - wish: ["7E", "6E", "5E", "4E", "3E"], - workup: ["7M", "5M"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "6L7", "5D", "5L7", "4L7", "3L10"], + waterpulse: ["7T", "7L19", "6T", "6L19", "5L21", "4M", "4L21", "3M", "3L28"], + waterspout: ["7L33", "6L34", "5L34", "4L34", "3L41"], + whirlpool: ["7L13", "6L13", "5L14", "4M", "4L14", "3L19"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - delcatty: {learnset: { - attract: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], + wailord: {learnset: { + amnesia: ["7L37", "6L37", "5L37", "4L37", "3L52", "3S0"], + astonish: ["7L16", "6L16", "5L17", "4L17", "3L23"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "7L51", "6T", "6L51", "5T", "5L54", "4T", "4L54"], + brine: ["7L25", "6L29", "5L31", "4M", "4L31"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], + dive: ["7L44", "6M", "6L44", "5M", "5L46", "4T", "4L46", "3M"], doubleedge: ["3T"], - doubleslap: ["7L1", "6L1", "5L1", "4L1", "3L1"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L1", "6L1", "5L1", "4L1"], - flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["3L1"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], + heavyslam: ["7L65", "7L1", "6L1", "5L70"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L58", "6L58", "5L62", "4L62", "3L59", "3S0"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mist: ["7L22", "6L22", "5L24", "4L24", "3L32", "3S1"], naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], + nobleroar: ["7L1"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], + rest: ["7M", "7L29", "6M", "6L25", "5M", "5L27", "4M", "4L27", "3M", "3L37", "3S1", "3S0"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M", "3S0"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M", "3S0"], - sing: ["7L1", "6L1", "5L1", "4L1", "3L1"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + soak: ["7L1"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["3S0"], - swift: ["4T", "3T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T"], - waterpulse: ["6T", "4M", "3M"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7L19", "6T", "6L19", "5L21", "4M", "4L21", "3M", "3L28", "3S1"], + waterspout: ["7L33", "6L33", "5L34", "4L34", "3L44", "3S1", "3S0"], + whirlpool: ["7L13", "6L13", "5L14", "4M", "4L14", "3L19"], + zenheadbutt: ["7T", "6T", "5T"], }}, - sableye: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - astonish: ["7L9", "6L9", "5L11", "4L11", "3L13"], + numel: {learnset: { + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L19", "6L19", "5L31", "4L25", "3L31"], + ancientpower: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - calmmind: ["7M", "6M", "6S3", "5M", "4M", "3M"], - captivate: ["7E", "6E", "5E", "4M"], + bodyslam: ["7E", "6E", "5D", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["3S0"], confide: ["7M", "6M"], - confuseray: ["7L31", "6L31", "5L46", "4L46", "3L37"], - counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - dazzlinggleam: ["7M", "6M"], - detect: ["7L14", "6L14", "5L22", "4L22", "3L25"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], + curse: ["7L29", "6L29", "5L29"], + defensecurl: ["7E", "6E", "5E", "4E", "3T", "3E"], + dig: ["6M", "5M", "4M", "3M", "3S0"], + doubleedge: ["7L47", "6L47", "5L55", "4L51", "3T", "3L49"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M", "3T"], + earthpower: ["7T", "7L26", "6T", "6L26", "5T", "5L41", "4T", "4L35"], + earthquake: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L41", "3M", "3L35"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "6L5", "5D", "5L5", "4L5", "3L11", "3S0"], + endure: ["7E", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7L21", "6L18", "5L18", "4L18", "3L21"], - feint: ["7E", "6E", "5E", "4E"], - feintattack: ["7L19", "6L19", "5L32", "4L32", "3L29", "3S1"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], - flatter: ["7E", "6E", "5E", "4E"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L4", "6L4", "5L4", "5D", "4L4", "3L5", "3S0"], - foulplay: ["7L41", "6T", "6L41", "5T", "5L50", "5S2"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flameburst: ["7L15", "6L15", "5L21"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L43", "6M", "6L43", "5M", "5L51", "4M", "4L45", "3M", "3L41"], + focusenergy: ["7L8", "6L8", "5L15", "4L15", "3L25"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L11", "6L11", "5L15", "4L15", "3L17"], - gravity: ["6T", "5T", "4T"], + growl: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], + growth: ["7E", "6E"], headbutt: ["4T"], - helpinghand: ["3S1"], + heatwave: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], + heavyslam: ["7E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T"], - imprison: ["7E", "6E"], + howl: ["7E", "6E", "5E", "4E", "3E"], incinerate: ["6M", "5M"], - knockoff: ["7L26", "6T", "6L26", "5T", "5L29", "4T", "4L29", "3L33"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - meanlook: ["7L46", "7E", "6L1", "6E", "5L60", "5E", "4L57", "3L45"], - megakick: ["3T"], - megapunch: ["3T"], - metalburst: ["7E", "6E", "5E"], - metronome: ["3T"], + ironhead: ["7T", "7E", "6T", "6E", "6S1", "5T", "5E"], + lavaplume: ["7L22", "6L22", "5L35", "4L31"], + magnitude: ["7L12", "6L8", "5L11", "4L11", "3L19"], mimic: ["3T"], - moonlight: ["7E", "6E", "5E", "4E", "3E"], + mudbomb: ["7E", "6E", "5E", "4E"], mudslap: ["4T", "3T"], - nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L6", "6L6", "5L8", "4L8", "3L9", "3S0"], - octazooka: ["5S2"], - ominouswind: ["4T"], - painsplit: ["6T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - powergem: ["7L36", "6L36", "5L43", "4L43"], - poweruppunch: ["6M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - punishment: ["7L24", "6L24", "5L36", "4L36"], - quash: ["7M", "7L44", "6M", "6L44"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7E", "6E", "6S3", "6S4", "5E", "4E", "3E", "3S1"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rollout: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7E", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "7L39", "6M", "6L39", "6S3", "5M", "5L57", "4M", "4L53", "3M", "3L41", "3S1"], - shadowclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L39", "4M", "4L39"], - shadowsneak: ["7L16", "6L16", "5L25", "4L25"], - shockwave: ["6T", "6S4", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "5D", "4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E"], + stealthrock: ["7T", "6T", "5T", "4M"], + stockpile: ["7E", "6E", "5E", "4E"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7E", "6E", "5E", "5D", "4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "6S4", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - tickle: ["5S2"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swallow: ["7E", "6E", "5E", "4E"], + tackle: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], + takedown: ["7L31", "6L31", "5L25", "4L21", "3L29", "3S0"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "5S2", "4T"], - waterpulse: ["6T", "4M", "3M"], - willowisp: ["7M", "6M", "6S3", "6S4", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["7L34", "6T", "6L1", "5T", "5L53", "4T", "4L50"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L36", "7E", "6L36", "6E", "5L36", "5E", "4E"], }}, - mawile: {learnset: { - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + camerupt: {learnset: { + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L19", "6L19", "5L31", "4L25", "3L31"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L25", "6L25", "5L31", "4L31", "3L31"], - bite: ["7L9", "6L9", "5L11", "4L11", "3L11"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["7E", "6E", "5E", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - crunch: ["7L29", "6L29", "5L36", "4L36", "3L36"], - darkpulse: ["7M", "6M", "5T", "4M"], + curse: ["7L29", "6L29", "6S0", "5L29"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - embargo: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "7L26", "6T", "6L26", "5T", "5L49", "4T", "4L39"], + earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L57", "4M", "4L49", "3M", "3L37"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], + eruption: ["7L52", "7L1", "6L1", "5L67", "4L57", "3L45"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fairywind: ["7L1", "6L1"], - faketears: ["7L5", "6L5", "5L6", "5D", "4L6", "3L6", "3S0"], - falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S1"], - feintattack: ["7L21", "6L21", "5L26", "4L26", "3L26"], fireblast: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7E", "6E", "6S2", "5E", "5D", "4E"], + fissure: ["7L59", "7L1", "6L1", "5L75", "4L67", "3L55"], + flameburst: ["7L15", "6L15", "5L21"], + flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], flashcannon: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], + focusenergy: ["7L8", "7L1", "6L1", "5L15", "4L15", "3L25"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1"], - guardswap: ["7E", "6E", "5E", "4E"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7E", "6E", "5E", "4E"], - icepunch: ["6T", "5T", "5D", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irondefense: ["7L33", "6T", "6L33", "5T", "5L41", "4T", "4L41", "3L41", "3S1"], - ironhead: ["7L45", "7L1", "6T", "6L1", "6S2", "6S3", "5T", "5L56", "4T", "4L56"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T"], - magnetrise: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], - metalburst: ["7E", "6E", "5E"], + ironhead: ["7T", "6T", "5T", "4T"], + lavaplume: ["7L22", "6L22", "5L33", "4L31"], + magnitude: ["7L12", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - mistyterrain: ["7E", "6E"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - playrough: ["7L49", "7L1", "6L1", "6S2", "6S3"], - poisonfang: ["7E", "6E", "5E", "4E", "3E"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "6S3", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4E", "3T", "3E"], - punishment: ["7E", "6E", "5E", "4E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L1", "6M", "6L33", "6S0", "5M", "5L39", "4M", "4L33", "3T", "3L33"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7E", "6E", "3T"], - shadowball: ["7M", "6M", "5M", "4M"], - sing: ["3S1"], - slam: ["7E", "6E", "5E"], + selfdestruct: ["3T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spitup: ["7L41", "6L41", "5L51", "4L51", "3L46"], - stealthrock: ["6T", "5T"], - stockpile: ["7L41", "6L41", "5L51", "4L51", "3L46"], - stoneedge: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L37", "7E", "6L37", "6E", "6S2", "6S3", "5L46", "5E", "4T", "4L46", "4E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superfang: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7L41", "6L41", "5L51", "4L51", "3L46"], - sweetscent: ["7L13", "6L13", "5L16", "4L16", "3L16"], - swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - taunt: ["7M", "7L1", "6M", "6L1", "5M", "4M", "3M"], - thunderfang: ["7E", "6E", "5E", "4E"], - thunderpunch: ["6T", "5T", "4T", "3T"], - tickle: ["7E", "6E", "5E", "4E", "3E"], - torment: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L31", "6L31", "6S0", "5L25", "4L21", "3L29"], toxic: ["7M", "6M", "5M", "4M", "3M"], - vicegrip: ["7L17", "6L17", "5L21", "4L21", "3L21", "3S1"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L39", "6L39", "6S0", "5L39"], }}, - aron: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["4T"], + torkoal: {learnset: { + afteryou: ["7T", "6T", "5T"], + amnesia: ["7L40", "6L40", "5L49", "4L49", "3L40"], attract: ["7M", "6M", "5M", "4M", "3M"], - autotomize: ["7L43", "6L39", "5L43"], - bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + bodyslam: ["7L27", "6L27", "5L33", "4L33", "3T", "3L20"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L40", "6L40", "5L50", "4L43", "3T", "3L44"], + curse: ["7L22", "6L12", "5L12", "4L12", "3L7"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonrush: ["7E", "6E", "5E", "4E"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], - endure: ["4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "4E"], + ember: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + eruption: ["7E", "6E", "5E", "4E", "3E"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firespin: ["7L13", "6L13", "5L17", "4L17", "3L17"], + fissure: ["7E", "6E", "5D", "5E", "4E"], + flail: ["7L42", "6L1", "5L52", "4L52", "3L43"], + flameburst: ["7E", "6E", "5E"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L34", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L30"], + flamewheel: ["7L18", "6L18"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - harden: ["7L1", "6L1", "5L4", "5D", "4L4", "3L4"], - headbutt: ["7L7", "6L7", "5L11", "4T", "4L11", "3L10"], - headsmash: ["7E", "6E", "5E", "5D", "4E"], - heavyslam: ["7L46", "6L43", "5L46"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["7T", "7L45", "6T", "6L1", "5T", "5L55", "4T", "4L55", "3L46"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - irondefense: ["7L37", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], - ironhead: ["7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], - irontail: ["7L34", "6T", "6L34", "5T", "5L39", "4M", "4L39", "3M", "3L29"], - magnetrise: ["6T", "5T", "4T"], - metalburst: ["7L49", "6L49", "5L53", "4L46"], - metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], - metalsound: ["7L31", "6L31", "5L36", "4L36", "3L39"], + hyperbeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + inferno: ["7L50", "6L1", "5L60"], + irondefense: ["7T", "7L38", "6T", "6L38", "5T", "5L44", "4T", "4L44", "3L33"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lavaplume: ["7L25", "6L25", "5L39", "4L39"], mimic: ["3T"], - mudslap: ["7L4", "6L4", "5L8", "4T", "4L8", "3T", "3L7"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - protect: ["7M", "7L16", "6M", "6L16", "5M", "5L32", "4M", "4L32", "3M", "3L34"], - raindance: ["7M", "6M", "5M", "4M", "3M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7L30", "6M", "6L1", "5M", "5L36", "4M", "4L36", "3M", "3L27"], + rapidspin: ["7L10", "6L10", "5L23", "4L23"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7E", "6E"], - roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], - stomp: ["7E", "6E", "5E", "4E", "3E"], + selfdestruct: ["3T"], + shellsmash: ["7L47", "6L1", "5L65"], + skullbash: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smog: ["7L4", "6L4", "5L4", "4L4", "3L4"], + smokescreen: ["7L15", "6L15", "5L20", "4L20", "3L14"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7E", "6T", "6E", "5T", "5E", "4T"], + superpower: ["7T", "7E", "6T", "6E"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L28", "6L22", "5L25", "4L25", "3L25"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + withdraw: ["7L7", "6L7", "5L7", "4L7"], + yawn: ["7E", "6E", "5E", "4E", "3E"], }}, - lairon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["4T"], + spoink: {learnset: { + allyswitch: ["7T"], + amnesia: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], - autotomize: ["7L47", "6L45", "5L51"], bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], + bounce: ["7T", "7L50", "6T", "6L50", "5T", "5L53", "4T", "4L48", "3L43"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L43", "6L43", "5L62", "4L51", "3T", "3L53"], + confuseray: ["7L18", "6L18", "5L18", "4L18", "3L25"], + covet: ["7T", "6T", "5T"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + endure: ["7E", "6E", "5E", "4M", "3T"], + extrasensory: ["7E", "6E", "5E", "4E", "3E"], facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], - heavyslam: ["7L51", "6L51", "5L56"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - irondefense: ["7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], - ironhead: ["7L22", "6T", "6L22", "5T", "5L29", "4T", "4L29"], - irontail: ["7L35", "6T", "6L35", "5T", "5L45", "4M", "4L45", "3M", "3L29"], - magnetrise: ["6T", "5T", "4T"], - metalburst: ["7L55", "6L55", "5L67", "4L56"], - metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], - metalsound: ["7L31", "6L31", "5L40", "4L40", "3L45"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magiccoat: ["7T", "7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L28"], mimic: ["3T"], - mudslap: ["7L4", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mirrorcoat: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - protect: ["7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + odorsleuth: ["7L10", "6L10", "5L10", "4L10", "3L10"], + payback: ["7M", "7L40", "6M", "6L40", "5M", "5L41", "4M", "4L34"], + powergem: ["7L29", "6L29", "5L48", "4L46"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L14", "6L14", "5L14", "4L14", "3L16"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L46", "4M", "4L41", "3M", "3L34"], + psychup: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], + psyshock: ["7M", "7L38", "6M", "6L38", "5M", "5L34"], + psywave: ["7L7", "6L7", "5D", "5L7", "4L7", "3L7"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5D", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L37"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + simplebeam: ["7E", "6E"], + skillswap: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7L33", "6T", "6L29", "5T", "5L29", "4T", "4L29", "3T", "3L37"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L28", "6L22", "5L25", "4L25", "3L25"], + swift: ["4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], - }}, - aggron: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], + trick: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["3S0"], + whirlwind: ["7E", "6E", "5E"], + zenheadbutt: ["7T", "7L26", "7E", "6T", "6L26", "6E", "5T", "5L26", "5E", "4T", "4L26", "4E"], + }}, + grumpig: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M", "4M", "3M"], - autotomize: ["7L51", "6L48", "5L57"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + belch: ["7L1"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], + bounce: ["7T", "7L60", "6T", "6L60", "5T", "5L68", "4T", "4L60", "3L55"], + brickbreak: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], + confuseray: ["7L18", "6L18", "5L18", "4L18", "3L25"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7L45", "6L45", "5L74", "4L57", "3T", "3L63", "3S0"], + covet: ["7T", "6T", "5T"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "6S2", "5M", "4M", "3M"], - endeavor: ["6T", "5T", "4T"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], - headsmash: ["6S2"], - heavyslam: ["7L57", "6L57", "5L65"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - irondefense: ["7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], - ironhead: ["7L22", "6T", "6L22", "6S2", "5T", "5L29", "4T", "4L29"], - irontail: ["7L35", "6T", "6L35", "5T", "5L48", "4M", "4L48", "3M", "3L29", "3S0", "3S1"], - lowkick: ["6T", "5T", "4T"], - magnetrise: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L28"], megakick: ["3T"], megapunch: ["3T"], - metalburst: ["7L63", "6L63", "5L82", "4L65"], - metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], - metalsound: ["7L31", "6L31", "5L40", "4L40", "3L50", "3S0", "3S1"], mimic: ["3T"], - mudslap: ["7L4", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], + odorsleuth: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + payback: ["7M", "7L46", "6M", "6L46", "5M", "5L47", "4M", "4L37"], + powergem: ["7L29", "6L29", "5L60", "4L55"], poweruppunch: ["6M"], - protect: ["7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37", "3S0", "3S1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L1"], + psychic: ["7M", "7L52", "6M", "6L52", "5M", "5L55", "4M", "4L47", "3M", "3L37"], + psychup: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], + psyshock: ["7M", "7L42", "6M", "6L42", "5M", "5L37"], + psywave: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L35", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L43"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L25", "6M", "6L25", "6S2", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - smartstrike: ["7M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "7L35", "6T", "6L29", "5T", "5L29", "4T", "4L29", "3T", "3L43"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L28", "6L22", "5L25", "4L25", "3L25", "3S1"], + swift: ["4T", "3T"], taunt: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + teeterdance: ["7L1", "6L32"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7T", "7L26", "6T", "6L26", "5T", "5L26", "4T", "4L26"], }}, - meditite: {learnset: { - acupressure: ["7L33", "6L33", "5L39"], + spinda: {learnset: { + assist: ["7E", "6E", "5E", "4E", "3E"], attract: ["7M", "6M", "5M", "4M", "3M"], batonpass: ["7E", "6E", "5E", "4E", "3E"], - bide: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulletpunch: ["7E", "6E", "5E", "4E"], - calmmind: ["7M", "7L23", "6M", "6L23", "5M", "5L25", "4M", "4L25", "3M", "3L28"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L7", "6L7", "5L8", "4L8", "3L9", "3S0", "3S1"], - counter: ["7L44", "6L44", "3T"], - detect: ["7L9", "6L9", "5L11", "4L11", "3L12", "3S1"], - doubleedge: ["3T"], + copycat: ["7L5", "6L5", "5D", "5L10", "4L10"], + counter: ["3T"], + covet: ["7T", "6T", "5T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dizzypunch: ["7L23", "6L23", "5L28", "4L28", "3L27"], + doubleedge: ["7L46", "6L46", "5L46", "4L46", "3T", "3L45"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["7E", "6T", "6E", "5T", "5E", "5D", "4M"], + drainpunch: ["7T", "6T", "5T", "4M"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E", "3S1"], - endure: ["7L12", "6L12", "5D", "4M", "3T"], + dynamicpunch: ["3T"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6E", "5E", "4E", "3E"], - feint: ["7L15", "6L15", "5L22", "4L22"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + fakeout: ["7E", "6E", "5D", "5E", "4E"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7L10", "6L10", "5L14", "4L14", "3L12"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flail: ["7L50", "6L50", "5L50", "4L50", "3L49"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - forcepalm: ["7L17", "6L17", "5L29", "4L29"], - foresight: ["7E", "6E", "5E", "4E", "3E"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - guardswap: ["7E", "6E", "5E", "4E"], + guardsplit: ["7E", "6E"], headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "7L20", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L17"], - highjumpkick: ["7L28", "6L28", "5L32", "4L32", "3L32"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - meditate: ["7L4", "6L4", "5L4", "5D", "4L4", "3L4", "3S0"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L19", "6L19", "5L23", "4L23", "3L23"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "3T"], + lastresort: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], metronome: ["3T"], mimic: ["3T"], - mindreader: ["7L25", "6L18", "5L18", "4L18", "3L22"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - poisonjab: ["7M", "6M", "5M", "4M"], - powerswap: ["7E", "6E", "5E", "4E"], - powertrick: ["7L36", "6L36", "5L43", "4L39"], + nightmare: ["3T"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L14", "6L14", "5L19", "4L19", "3L16"], psychic: ["7M", "6M", "5M", "4M", "3M"], psychocut: ["7E", "6E", "5E", "4E"], - psychup: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L36", "3T", "3L36"], - psyshock: ["7M", "6M", "5M"], - quickguard: ["7E", "6E"], + psychoshift: ["7E", "6E"], + psychup: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41", "3T", "3L38"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L41", "6L41", "5L50", "4L46", "3L44"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E"], + recycle: ["7T", "6T", "5T", "4M"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7L39", "6L39", "5L46", "4L43", "3L41"], - rockslide: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + roleplay: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M", "3S1"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + sing: ["3S0"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spotlight: ["7E"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L28", "6L28", "5L32", "4T", "4L32"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T", "3L20"], + superpower: ["5D"], + swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - telekinesis: ["5M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + teeterdance: ["7L32", "6L32", "5L37", "4L37", "3L34"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L55", "6L50", "5L55", "4L55", "3L56"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - vacuumwave: ["4T"], + trick: ["7T", "7E", "6T", "6E", "5T", "5E", "4E", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "7L37", "6T", "6L5", "5T", "5L5", "4T", "4L5", "3L5", "3S0"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - medicham: {learnset: { - acupressure: ["7L33", "6L33", "5L42"], + trapinch: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bide: ["7L1", "6L1", "5L17"], + bite: ["7L1", "6L1", "5D", "5L1", "5S0", "4L1", "3L1"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - calmmind: ["7M", "7L23", "6M", "6L23", "5M", "5L25", "4M", "4L25", "3M", "3L28"], + bugbite: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - counter: ["7L53", "6L53", "3T"], - detect: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + crunch: ["7L22", "6L22", "5L33", "4L33", "3L33"], + dig: ["7L19", "6M", "6L19", "5M", "5L41", "4M", "4L41", "3M", "3L41"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - endure: ["7L12", "6L12", "4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "7L26", "7E", "6T", "6L26", "6E", "5T", "5L65", "5E", "4T", "4L65"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L73", "4M", "4L73", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L15", "6L15", "5L22", "4L22"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], - flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - forcepalm: ["7L17", "6L17", "5L29", "4L29"], + feint: ["7L29", "6L1", "5L81", "4L81"], + feintattack: ["7L1", "6L1", "5L17", "4L17", "3L17"], + fissure: ["7L47", "6L1", "5L89", "4L89"], + flail: ["7E", "6E", "5E", "4E"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], + furycutter: ["7E", "6E", "5E", "4T", "4E"], + gigadrain: ["7T", "6T", "5D", "5T", "4M", "3M"], + gust: ["7E", "6E", "5E", "4E", "3E"], headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "7L20", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L17"], - highjumpkick: ["7L28", "6L28", "5L32", "4L32", "3L32"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - meditate: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], mimic: ["3T"], - mindreader: ["7L25", "6L18", "5L18", "4L18", "3L22"], - mudslap: ["4T", "3T"], + mudshot: ["7E", "6E", "5E", "4E"], + mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - poisonjab: ["7M", "6M", "5M", "4M"], - powertrick: ["7L36", "6L36", "5L49", "4L42"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L36", "3T", "3L36"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L47", "6L47", "5L62", "4L55", "3L54"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - reversal: ["7L42", "6L42", "5L55", "4L49", "3L46"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L9", "4L9", "3L9"], + sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], + sandtomb: ["7L12", "6L10", "5L25", "4L25", "3L25"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T", "3L20"], - swift: ["4T", "3T"], - telekinesis: ["5M"], - thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + superpower: ["7T", "7L40", "6T", "6L1", "5T", "5L67"], + swagger: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - vacuumwave: ["4T"], - workup: ["7M", "5M"], - zenheadbutt: ["7L1", "6T", "6L1", "5T", "4T"], }}, - electrike: {learnset: { + vibrava: {learnset: { + aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L24", "6L24", "5L28", "4L28", "3L33"], + bide: ["7L1", "6L1", "5L17"], + bite: ["3L1"], bodyslam: ["3T"], + boomburst: ["7L47", "6L47"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L29", "6L29"], + bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], captivate: ["4M"], - charge: ["7L44", "6L44", "5L44", "4L44", "3L41"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7E", "6E", "5E", "4E", "3E"], - curse: ["7E", "6E", "5E", "4E", "3E"], - discharge: ["7L29", "7E", "6L29", "6E", "5L41", "5E", "4L41", "4E"], + crunch: ["3L33"], + defog: ["7T", "4M"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - eerieimpulse: ["7E", "6E"], - electroball: ["7E", "6E", "5E"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L1", "6L35", "5L35", "4L35", "3L35"], + dragonpulse: ["7T", "6T", "5T", "4M"], + earthpower: ["7T", "7L26", "6T", "6L26", "5T", "5L39", "4T"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "4M", "3M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7E", "6E", "5E", "4E"], - flameburst: ["7E", "6E", "5E"], - flamethrower: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M", "3M"], + feintattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], + furycutter: ["4T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L7", "6L7", "5L12", "4L12", "3L12"], - icefang: ["7E", "6E", "5E", "5D", "4E"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L4", "6L4", "5L9", "4L9", "3L9"], - lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], + hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L16", "6L16", "5L25", "4L25", "3L25"], + ominouswind: ["4T"], + outrage: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L10", "6L10", "5L17", "4L17", "3L17"], - raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L34", "6M", "6L34", "5M", "5L36", "4M", "4L36", "3M", "3L28"], + rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], + sandtomb: ["7L12", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L22", "6L22", "5L41", "4L41", "3L41"], secretpower: ["6M", "4M", "3M"], - shockwave: ["7E", "6T", "6E", "5E", "4M", "3M"], - signalbeam: ["6T", "5T", "5D", "4T"], + signalbeam: ["7T", "6T", "5T"], + silverwind: ["4M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L13", "6L13", "5L20", "4L20", "3L20"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + steelwing: ["7M", "6M", "4M", "3M"], strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T"], + supersonic: ["7L19", "6L19", "5L33", "4L33"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], - switcheroo: ["7E", "6E", "5E", "4E"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7L49", "6M", "6L49", "5M", "5L52", "4M", "4L49", "3M", "3L36"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderfang: ["7L19", "7E", "6L19", "6E", "5L33", "5E", "4L33", "4E"], - thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L4", "5D", "4M", "4L4", "3T", "3L4"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + throatchop: ["7T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L39", "6M", "6L39", "5M", "5L49"], + twister: ["4T"], + uproar: ["7T", "7L40", "6T", "6L40"], + uturn: ["7M", "6M", "5M", "4M"], }}, - manectric: {learnset: { + flygon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L24", "6L24", "5L30", "4L30", "3L39", "3S0"], + bide: ["7L1", "6L1", "5L17"], + bite: ["3L1"], bodyslam: ["3T"], + brutalswing: ["7M"], + bugbite: ["7T", "6T", "5T", "4T"], + bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], captivate: ["4M"], - charge: ["7L48", "6L48", "5L54", "4L54", "3L53"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - discharge: ["7L30", "6L30", "5L49", "4L49"], + crunch: ["3L33", "3S0"], + defog: ["7T", "4M"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - electricterrain: ["7L60", "7L1", "6L1"], + dracometeor: ["7T", "6T", "5T", "4T", "4S1"], + dragonbreath: ["7L1", "6L35", "5L35", "4L35", "3L35", "3S0"], + dragonclaw: ["7M", "7L1", "6M", "6L45", "5M", "5L45", "4M", "4L45", "4S1", "3M"], + dragondance: ["7L1"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrush: ["7L47", "6L47"], + dragontail: ["7M", "7L29", "6M", "6L29", "5M", "5L65"], + earthpower: ["7T", "7L26", "6T", "6L26", "5T", "5L39", "4T"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "4M", "4S1", "3M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - flamethrower: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M", "3M"], + feintattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L65"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L16", "6L16", "5L25", "4L25", "3L25"], - overheat: ["7M", "6M", "6S1", "5M", "4M"], - protect: ["7M", "6M", "6S1", "5M", "4M", "3M"], - quickattack: ["7L10", "6L10", "5L17", "4L17", "3L17"], - raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], - refresh: ["3S0"], + ominouswind: ["4T"], + outrage: ["7T", "6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "7L36", "6M", "6L36", "5M", "5L42", "4M", "4L42", "3M", "3L31"], + rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L53"], + sandtomb: ["7L12", "6L1", "5L1", "4L1", "3L1", "3S0"], + screech: ["7L22", "6L22", "5L41", "4L41", "3L41", "3S0"], secretpower: ["6M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T"], + silverwind: ["4M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L13", "6L13", "5L20", "4L20", "3L20"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T"], + supersonic: ["7L19", "6L19", "5L33", "4L33"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "7L54", "6M", "6L54", "5M", "5L66", "4M", "4L61", "3M", "3L45", "3S0"], - thunderbolt: ["7M", "6M", "6S1", "5M", "4M", "3M"], - thunderfang: ["7L19", "6L19", "5L37", "4L37"], - thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + tailwind: ["7T", "6T", "5T", "4T"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T"], - voltswitch: ["7M", "6M", "6S1", "5M"], - wildcharge: ["7M", "7L42", "6M", "6L42", "5M", "5L61"], + twister: ["4T"], + uproar: ["7T", "7L40", "6T", "6L40"], + uturn: ["7M", "6M", "5M", "4M", "4S1"], }}, - plusle: {learnset: { - agility: ["7L37", "6L37", "5L48", "4L44", "3L47"], + cacnea: {learnset: { + absorb: ["7L4", "6L4", "5D", "5L5", "4L5", "3L5", "3S0"], + acid: ["7E", "6E", "5E", "4E", "3E"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L34", "6L34", "5L44", "4L42", "3L40"], - bestow: ["7L13", "6L13"], + belch: ["7E", "6E"], + block: ["7T", "7E", "6T", "6E", "5T", "5E"], bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], - charge: ["7L28", "6L28", "5L38", "4L35", "3L31"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L25", "7E", "6L25"], confide: ["7M", "6M"], - copycat: ["7L22", "6L22", "5L24", "4L24"], + cottonspore: ["7L46", "6L46", "5L49", "4L49", "3L41"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["7L54", "6L54", "5L57", "4L57", "3L49"], + disable: ["7E", "6E", "5E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E"], + encore: ["3S0"], + endure: ["4M", "3T"], + energyball: ["7M", "7L42", "6M", "6L42", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L29", "4L29", "3L29"], + fellstinger: ["7E", "6E"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E", "4E", "3E"], + growth: ["7L7", "6L7", "5L9", "4L9", "3L9"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L22", "6L22", "5L25", "4L25", "3L25"], + leechseed: ["7L10", "6L10", "5L13", "4L13", "3L13"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + magicalleaf: ["7E", "6E", "5E", "4E"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + needlearm: ["7L16", "6L16", "5L45", "4L45", "3L37"], + payback: ["7M", "7L26", "6M", "6L26", "5M", "5L41", "4M", "4L41"], + pinmissile: ["7L38", "6L21", "5L21", "4L21", "3L21"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + sandattack: ["7L13", "6L13", "5L17", "4L17", "3L17"], + sandstorm: ["7M", "7L50", "6M", "6L50", "5M", "5L53", "4M", "4L53", "3M", "3L45"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smellingsalts: ["7E", "6E", "5E", "4E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L30", "6L30", "5L33", "4L33", "3L33"], + spite: ["7T", "6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L34", "6L34", "5L37", "4T", "4L37"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + switcheroo: ["7E", "6E", "5E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + teeterdance: ["7E", "6E", "5D", "5E", "4E", "3E"], + thunderpunch: ["7T", "6T", "5D", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + }}, + cacturne: {learnset: { + absorb: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7L49", "6L49", "5L59", "4L59", "3L47"], counter: ["3T"], - defensecurl: ["3T"], - discharge: ["7L31", "7E", "6L31", "6E", "5E", "5D", "4E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["7L59", "7L1", "6L1", "5L71", "4L71", "3L59"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7T", "6T", "5T", "4M"], dynamicpunch: ["3T"], - echoedvoice: ["7M", "6M", "5M"], - electroball: ["7L19", "6L19", "5L29"], - electroweb: ["6T"], - encore: ["7L10", "6L10", "5L17", "4L17", "3L22"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], - entrainment: ["7L49", "6L1", "5L63"], + energyball: ["7M", "7L44", "6M", "6L44", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6L35", "5L21", "4L21", "3L28"], + feintattack: ["7L19", "6L19", "5L29", "4L29", "3L29", "3S0"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + growth: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - helpinghand: ["7L4", "6T", "6L4", "5T", "5L10", "4T", "4L10", "3L13"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["7L40", "6T", "6L40", "5T", "5L51", "4T", "4L48"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7E", "6E", "5E"], - magnetrise: ["6T", "5T", "4T"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L22", "6L22", "5L25", "4L25", "3L25", "3S0"], + leechseed: ["7L10", "6L10", "5L13", "4L13", "3L13"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - mudsport: ["3S0"], - nastyplot: ["7L46", "6L1", "5L56", "4L51"], naturalgift: ["4M"], - nuzzle: ["7L1", "6L1"], - playnice: ["7L1", "6L1"], + naturepower: ["7M", "6M"], + needlearm: ["7L16", "6L16", "5L53", "4L53", "3L41", "3S0"], + payback: ["7M", "7L26", "6M", "6L26", "5M", "5L47", "4M", "4L47"], + pinmissile: ["7L38", "6L21", "5L21", "4L21", "3L21"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L1", "6L1", "5L7", "4L7", "3L10", "3S1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + sandattack: ["7L13", "6L13", "5L17", "4L17", "3L17"], + sandstorm: ["7M", "7L54", "6M", "6L54", "5M", "5L65", "4M", "4L65", "3M", "3L53"], secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], seismictoss: ["3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "5D", "4T"], - sing: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L7", "6L7", "5L15", "4L15", "3L19"], - substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L30", "6L30", "5L35", "4L35", "3L35", "3S0"], + spikyshield: ["7L1", "6L32"], + spite: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L35", "6L35", "5L41", "4T", "4L41"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7E", "6E", "5E", "4E"], - swift: ["7L16", "6L16", "5L31", "4T", "4L29", "3T"], - thunder: ["7M", "7L43", "6M", "6L42", "5M", "5L42", "4M", "4L38", "3M", "3L37"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L3", "5D", "4M", "4L3", "3T", "3L4", "3S0", "3S1"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - wish: ["7E", "6E", "5E", "4E", "3E"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - minun: {learnset: { - agility: ["7L37", "6L37", "5L48", "4L44", "3L47"], + swablu: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7E", "6E", "5E", "4E", "3E"], + aircutter: ["4T"], + astonish: ["7L3", "6L3", "5L5", "4L5", "3L8"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L34", "6L34", "5L44", "4L42", "3L40"], bodyslam: ["3T"], captivate: ["4M"], - charge: ["7L28", "6L28", "5L38", "4L35", "3L31"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7E", "6L21", "5L21", "4L21", "3L28"], confide: ["7M", "6M"], - copycat: ["7L22", "6L22", "5L24", "4L24"], - counter: ["3T"], - defensecurl: ["3T"], - discharge: ["7L31", "7E", "6L31", "6E", "5E", "5D", "4E"], + cottonguard: ["7L34", "6L34", "5L40"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], + disarmingvoice: ["7L11", "6L11"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], + dragonpulse: ["7T", "7L38", "6T", "6L38", "5T", "5L50", "4M", "4L45"], + dragonrush: ["7E", "6E", "5E", "4E"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], echoedvoice: ["7M", "6M", "5M"], - electroball: ["7L19", "6L19", "5L29"], - electroweb: ["6T"], - encore: ["7L10", "6L10", "5L17", "4L17", "3L22"], endure: ["4M", "3T"], - entrainment: ["7L49", "6L1", "5L63"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7L25", "7E", "6L25", "5L35", "4L31"], - flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], + falseswipe: ["3S0"], + featherdance: ["7E", "6E", "5D", "5E", "4E"], + fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], - headbutt: ["4T"], - helpinghand: ["7L4", "6T", "6L4", "5T", "5L10", "4T", "4L10", "3L13"], + furyattack: ["7L7", "6L7", "5L13", "4L13", "3L18"], + growl: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1", "3S0"], + haze: ["7E", "6E", "5E", "4E", "3E"], + healbell: ["7T", "6T", "5T", "4T"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - irontail: ["6T", "5T", "4M", "3M"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7E", "6E", "5E"], - magnetrise: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + hypervoice: ["7T", "7E", "6T", "6E", "6S2", "5T", "5E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], + mirrormove: ["7L30", "6L30", "5L36", "4L36", "3L38"], + mist: ["7L14", "6L14", "5L23", "4L23", "3L28"], + moonblast: ["7L46", "6L46"], mudslap: ["4T", "3T"], - nastyplot: ["7L46", "6L1", "5L56", "4L51"], - naturalgift: ["4M"], - nuzzle: ["7L1", "6L1"], - playnice: ["7L1", "6L1"], + naturalgift: ["7L20", "6L20", "5L32", "4M", "4L32"], + ominouswind: ["4T"], + outrage: ["7T", "6T", "5T", "4T"], + peck: ["7L1", "6L1", "6S2", "5D", "5L1", "5S1", "4L1", "3L1", "3S0"], + perishsong: ["7L42", "6L42", "5L55", "4L50", "3L48"], + playrough: ["7E"], + pluck: ["5M", "4M"], + powerswap: ["7E", "6E", "5E", "4E"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7L1", "6L1", "5L7", "4L7", "3L10", "3S1"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7E", "6E", "5E", "4E", "3E"], raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L26", "6L26", "5L45", "4L40", "3L41"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], - round: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5D", "5T", "5E", "4M"], + round: ["7M", "7L17", "6M", "6L17", "5M", "5L18"], + safeguard: ["7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "5D", "4T"], - sing: ["7E", "6E", "5E", "4E"], + sing: ["7L5", "6L5", "5L9", "4L9", "3L11"], + skyattack: ["7T", "6T", "3T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spark: ["7L7", "6L7", "5L15", "4L15", "3L19"], - substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7E", "6E", "5E", "4E"], - swift: ["7L16", "6L16", "5L31", "4T", "4L29", "3T"], - switcheroo: ["7L13", "6L13"], - thunder: ["7M", "7L43", "6M", "6L42", "5M", "5L42", "4M", "4L38", "3M", "3L37"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L3", "5D", "4M", "4L3", "3T", "3L4", "3S0", "3S1"], + swift: ["4T", "3T"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L23", "6L23", "5L28", "4L28", "3L31"], + thief: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trumpcard: ["7L40", "6L40", "5L51", "4L48"], - uproar: ["6T", "5T", "4T"], - voltswitch: ["7M", "6M", "5M"], - watersport: ["3S0"], - wildcharge: ["7M", "6M", "5M"], - wish: ["7E", "6E", "5E", "4E", "3E"], + twister: ["4T"], + uproar: ["7T", "6T", "5T", "4T"], }}, - volbeat: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M", "4M", "3M"], + altaria: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M", "3S1"], + agility: ["6S3"], aircutter: ["4T"], + astonish: ["7L3", "7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "4E", "3E"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L40", "7E", "6L40", "6E", "5L41", "5E", "4L41", "4E"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L8", "6L8", "5L9", "4L9", "3L5"], - counter: ["3T"], + cottonguard: ["7L34", "6L34", "5L46"], dazzlinggleam: ["7M", "6M"], - dizzypunch: ["7E", "6E", "5E"], - doubleedge: ["7L47", "6L45", "5L45", "4L45", "3T", "3L37"], - doubleteam: ["7M", "7L5", "6M", "6L5", "5M", "5L5", "4M", "4L5", "3M", "3L9"], - dynamicpunch: ["3T"], - encore: ["7E", "6E", "5E", "4E"], + defog: ["7T"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L1", "6L35", "5L35", "5S2", "4L35", "3L35", "3S1", "3S0"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7L30", "6L30", "5L39", "4L39", "3L40", "3S0"], + dragonpulse: ["7T", "7L40", "6T", "6L40", "5T", "5L62", "4M", "4L54"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["7L1", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + falseswipe: ["5S2"], + fireblast: ["7M", "6M", "6S3", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], - helpinghand: ["7L36", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L33"], + furyattack: ["7L7", "6L7", "5L13", "4L13", "3L18"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + healbell: ["7T", "6T", "5T", "4T", "3S1"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "7L50"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "6S3", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], mimic: ["3T"], - moonlight: ["7L19", "6L13", "5L13", "4L13", "3L13"], + mist: ["7L14", "6L14", "5L23", "4L23", "3L28"], + moonblast: ["7L52", "6L52"], mudslap: ["4T", "3T"], - naturalgift: ["4M"], + naturalgift: ["7L20", "6L20", "5L32", "5S2", "4M", "4L32"], ominouswind: ["4T"], - playrough: ["7L43", "6L43"], - poweruppunch: ["6M"], - protect: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L29"], + outrage: ["7T", "6T", "5T", "4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + perishsong: ["7L46", "6L46", "5L70", "4L62", "3L54"], + pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "6S3", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], - quickattack: ["7L12", "6L12", "5L17", "4L17", "3L17"], raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L26", "6L26", "5L54", "4L46", "3L45", "3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], roost: ["7M", "6M", "5T", "4M"], - round: ["7M", "6M", "5M"], + round: ["7M", "7L17", "6M", "6L17", "5M", "5L18"], + safeguard: ["7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["7E", "6E", "5E", "3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["7L26", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L25"], - silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], + sing: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + skyattack: ["7T", "7L59", "7L1", "6T", "6L1", "5T", "5L77", "4T", "4L70", "3T", "3L59"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stringshot: ["4T"], - strugglebug: ["7L15", "6M", "6L15", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M", "3S1"], + steelwing: ["7M", "6M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailglow: ["7L22", "6L21", "5L21", "4L21", "3L21"], - tailwind: ["6T", "5T", "5D", "4T"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L23", "6L23", "5L28", "5S2", "4L28", "3L31", "3S1", "3S0"], thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "5D", "4E", "3E"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], - zenheadbutt: ["7L33", "6T", "6L33", "5T", "5L37", "4T", "4L37"], + twister: ["4T"], + uproar: ["7T", "6T", "5T", "4T"], + wonderroom: ["7T", "6T", "5T"], }}, - illumise: {learnset: { - acrobatics: ["7M", "6M", "5M"], + zangoose: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "4E", "3E"], + bellydrum: ["7E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L40", "7E", "6L40", "6E", "5L41", "5E", "4L41", "4E"], - captivate: ["7E", "6E", "5E", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L9", "6L9", "5L9", "5D", "4L9", "3L9"], + brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S2"], + captivate: ["4M"], + closecombat: ["7L50", "6L47", "5L53", "4L53"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E"], - counter: ["3T"], - covet: ["7L47", "6T", "6L45", "5T", "5L45", "4L45", "3L37"], - dazzlinggleam: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E", "3S2"], + crushclaw: ["7L26", "6L22", "5L31", "4L31", "3L31", "3S2"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["3T"], + detect: ["7L36", "6L33", "5L40", "4L40", "3L46"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E"], doubleedge: ["3T"], + doublehit: ["7E", "6E", "5D", "5E", "4E"], + doublekick: ["7E", "6E", "5E", "4E", "3E"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], dynamicpunch: ["3T"], - encore: ["7L26", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3L25"], + embargo: ["7M", "7L33", "6M", "6L19", "5M", "5L27", "4M", "4L27"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6E", "5E", "5D"], - flash: ["6M", "5M", "4M", "3M"], - flatter: ["7L29", "6L29", "5L29", "4L29", "3L29"], + falseswipe: ["7M", "7L29", "6M", "6L29", "5M", "5L44", "4M", "4L44", "3L55"], + feint: ["7E", "6E", "5E"], + finalgambit: ["7E", "6E", "5E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigadrain: ["6T", "5T", "4M", "3M"], - growth: ["7E", "6E", "5E", "4E", "3E"], - helpinghand: ["7L36", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L33"], + furycutter: ["7L8", "6L8", "5L14", "4T", "4L14", "3T", "3L13", "3S0"], + furyswipes: ["7E", "6E", "5E", "4E"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "7L50"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["7L15", "6M", "6L15", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L4", "3S1", "3S0"], + lowkick: ["7T", "6T", "5D", "5T", "4T"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["3T"], + metalclaw: ["7E", "6E", "5E", "4E"], mimic: ["3T"], - moonlight: ["7L19", "6L13", "5L13", "4L13", "3L13"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - ominouswind: ["4T"], - playnice: ["7L1", "6L1"], - playrough: ["7L43", "6L43"], + nightslash: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - quickattack: ["7L12", "6L12", "5L17", "4L17", "3L17"], + pursuit: ["7L12", "6L12", "5L22", "4L22", "3L25"], + quickattack: ["7L5", "6L5", "5D", "5L5", "4L5", "3L7", "3S1", "3S0"], + quickguard: ["7E", "6E"], raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], + refresh: ["3S2"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], + revenge: ["7L22", "6L22", "5L26"], + roar: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + slash: ["7L19", "6L15", "5L18", "4L18", "3L19"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stringshot: ["4T"], - strugglebug: ["7L15", "6M", "6L15", "5M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L5", "6L5", "5L5", "4L5", "3L5"], swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["6T", "5T", "5D", "4T"], + swordsdance: ["7M", "7L47", "6M", "6L43", "5M", "5L9", "4M", "4L9", "3T", "3L10", "3S1", "3S0"], + taunt: ["7M", "7L43", "6M", "6L40", "5M", "5L35", "4M", "4L35", "3M", "3L37"], thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], - wish: ["7L22", "6L21", "5L21", "4L21", "3L21"], - zenheadbutt: ["7L33", "6T", "6L33", "5T", "5L37", "4T", "4L37"], + waterpulse: ["7T", "6T", "4M", "3M"], + workup: ["7M", "5M"], + xscissor: ["7M", "7L40", "6M", "6L36", "5M", "5L48", "4M", "4L48"], }}, - budew: {learnset: { - absorb: ["7L1", "6L1", "5L1", "4L1"], - attract: ["7M", "6M", "5M", "4M"], - bulletseed: ["4M"], + seviper: {learnset: { + aquatail: ["7T", "6T", "5D", "5T", "4T"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L41", "6L43"], + bind: ["7T", "6T", "5T"], + bite: ["7L4", "6L4", "5D", "5L10", "4L10", "3L10", "3S2", "3S0"], + bodyslam: ["7E", "6E", "5D", "5E", "4E", "3T", "3E"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], + coil: ["7L44", "6L46", "5L64"], confide: ["7M", "6M"], - cottonspore: ["7E", "6E", "5E", "4E"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - extrasensory: ["7E", "6E", "5E", "4E"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7E", "6E", "5E"], - growth: ["7L4", "6L4", "5L4", "4L4"], - hiddenpower: ["7M", "6M", "5M", "4M"], - leafstorm: ["7E", "6E", "5E", "4E"], - megadrain: ["7L13", "6L13", "5L13", "4L13"], - mindreader: ["7E", "6E", "5E", "4E"], - mudslap: ["4T"], - naturalgift: ["7E", "6E", "5E", "4M"], - naturepower: ["7M", "6M"], - pinmissile: ["7E", "6E", "5E", "4E"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - razorleaf: ["7E", "6E", "5E", "4E"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + crunch: ["7L39", "6L40", "5L28", "4L28", "3L28", "3S1"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragontail: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L11"], + finalgambit: ["7E", "6E", "5E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gastroacid: ["7T", "7L29", "6T", "6L31", "5T", "5L34"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + glare: ["7L19", "6L19", "5L25", "4L25", "3L25", "3S1"], + haze: ["7L34", "6L37", "5L43", "4L43", "3L43"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lick: ["7L6", "6L7", "5L7", "4L7", "3L7", "3S2", "3S0"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7L26", "7E", "6L28", "6E", "5L46", "5E", "4L46", "4E"], + payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7L21", "6L22", "5L34", "4L34", "3L34"], + poisonjab: ["7M", "7L31", "6M", "6L34", "5M", "5L52", "4M", "4L52"], + poisontail: ["7L9", "6L10", "5L16", "4L16", "3L16", "3S1", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + punishment: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], - shadowball: ["7M", "6M", "5M", "4M"], - sleeppowder: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - spikes: ["7E", "6E", "5E", "4E"], - stunspore: ["7L10", "6L10", "5L10", "4L10"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - venoshock: ["7M", "6M", "5M"], - watersport: ["7L7", "6L7", "5L7", "4L7"], - worryseed: ["7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16"], + scaryface: ["7E", "6E", "5E", "4E"], + screech: ["7L14", "6L13", "5L19", "4L19", "3L19", "3S1"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E", "3E"], + stockpile: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L1", "6M", "6L1", "5M", "5L37", "4M", "4L37", "3T", "3L37"], + swallow: ["7E", "6E", "5E", "4E", "3E"], + swift: ["4T", "3T"], + switcheroo: ["7E", "6E", "5E", "4E"], + swordsdance: ["7M", "7L36"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + venomdrench: ["7L24", "6L25"], + venoshock: ["7M", "7L16", "6M", "6L16", "5M", "5L55"], + wrap: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S2", "3S0"], + wringout: ["7L46", "7E", "6L49", "6E", "5L61", "5E", "4L55"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - roselia: {learnset: { - absorb: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - aromatherapy: ["7L43", "6L43", "5L43", "4L43", "3L53"], - attract: ["7M", "6M", "5M", "4M", "3M"], + lunatone: {learnset: { + acrobatics: ["7M", "6M", "5M"], + allyswitch: ["7T"], + ancientpower: ["4T"], + batonpass: ["3S1"], + blizzard: ["7M", "6M", "5M", "4M"], bodyslam: ["3T"], - bulletseed: ["7E", "6E", "4M", "3M"], - captivate: ["4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cottonspore: ["7E", "6E", "5E", "4E", "3E"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], - dazzlinggleam: ["7M", "6M"], + confusion: ["7L1", "6L1", "5D", "5L1", "4L1", "3L7", "3S0"], + cosmicpower: ["7L25", "7S2", "6L25", "5L34", "4L34", "3L31"], + defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["7T", "6T", "5D", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["7L25", "7E", "6T", "6L25", "6E", "5T", "5L25", "5E", "4M", "4L25", "3M", "3L33"], + futuresight: ["7L41", "6L41", "5L53", "4L53", "3L43"], + gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7L22", "7E", "6L22", "6E", "5L22", "5E", "4L22", "3L29", "3S1"], - growth: ["7L4", "6L4", "5L4", "5D", "4L4", "3L5", "3S0"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - ingrain: ["7L34", "6L34", "5L34", "4L34", "3L41"], - leafstorm: ["7E", "6E", "5E", "4E"], - leechseed: ["7L16", "6L16", "5L16", "4L16", "3L21", "3S1"], - magicalleaf: ["7L19", "6L19", "5L19", "4L19", "3L25", "3S1"], - megadrain: ["7L13", "6L13", "5L13", "4L13", "3L17"], + gravity: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + healblock: ["7L33", "6L33", "5L42", "4L42"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L5", "6L5", "5L12", "4L12", "3L19"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "7L49", "6T", "6L1", "5T", "5L64"], mimic: ["3T"], - mindreader: ["7E", "6E", "5E", "4E"], - mudslap: ["4T", "3T"], - naturalgift: ["7E", "6E", "5E", "4M"], - naturepower: ["7M", "6M"], - nightmare: ["3T"], - petalblizzard: ["7L37", "6L37"], - petaldance: ["7L50", "6L37", "5L40", "4L40", "3L49"], - pinmissile: ["7E", "6E", "5E", "4E", "3E"], - poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L7", "6L7", "5L7", "4L7", "3L9", "3S0"], + moonblast: ["7L1", "7S2", "6L1"], + moonlight: ["5D"], + naturalgift: ["4M"], + painsplit: ["7T", "6T", "5T", "4T"], + powergem: ["7L1", "7S2"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L29", "6M", "6L29", "5M", "5L45", "4M", "4L45", "3M", "3L37", "3S1"], psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M"], - razorleaf: ["7E", "6E", "5E", "4E"], + psyshock: ["7M", "7L1", "6M", "5M"], + psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M", "3S1"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], + rockslide: ["7M", "7L21", "6M", "6L21", "5M", "5L25", "4M", "3T"], + rockthrow: ["7L1", "6L1", "5L9", "4L9", "3L13"], + rocktomb: ["7M", "6M", "5M", "4M", "3M", "3S1"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + selfdestruct: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sleeppowder: ["7E", "6E", "5E", "5D", "4E"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spikes: ["7E", "6E", "5E", "4E", "3E"], - stunspore: ["7L10", "6L10", "5L10", "4L10", "3L13"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L37", "6M", "6L37", "5M", "5L41", "4M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["3S1"], - sweetscent: ["7L31", "6L31", "5L31", "4L31", "3L37"], - swift: ["5D", "4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L46", "7E", "6T", "6L46", "6E", "5T", "5L46", "5E", "4T", "4L46", "4E", "3L57", "3E"], - toxic: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L45"], - toxicspikes: ["7L28", "6L28", "5L28", "4L28"], - venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + telekinesis: ["7T", "5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - roserade: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - bulletseed: ["4M"], - captivate: ["4M"], + solrock: {learnset: { + acrobatics: ["7M", "6M", "5M"], + allyswitch: ["7T"], + ancientpower: ["4T"], + batonpass: ["3S1"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigadrain: ["6T", "5T", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grassyterrain: ["7L1", "6L1"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - magicalleaf: ["7L1", "6L1", "5L1", "4L1"], - megadrain: ["7L1", "6L1", "5L1", "4L1"], - mudslap: ["4T"], + confusion: ["7L1", "6L1", "5D", "5L1", "4L1", "3L7", "3S0"], + cosmicpower: ["7L25", "7S2", "6L25", "5L34", "4L34", "3L31", "3S1"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], + endure: ["4M", "3T"], + explosion: ["7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firespin: ["7L5", "6L5", "5L12", "4L12", "3L19"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7L1"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + healblock: ["7L33", "6L33", "5L42", "4L42"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], + mimic: ["3T"], + morningsun: ["5D"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["7T", "6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L29", "6M", "6L29", "5M", "5L33", "4M", "3M", "3S1"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], + rockslide: ["7M", "7L21", "6M", "6L21", "5M", "5L45", "4M", "4L45", "3T", "3L37"], + rockthrow: ["7L1", "6L1", "5L9", "4L9", "3L13"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], - shadowball: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - sweetscent: ["7L1", "6L1", "5L1", "4L1"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - venomdrench: ["7L1", "6L1"], - venoshock: ["7M", "6M", "5M"], - weatherball: ["7L1", "6L1", "5L1", "4L1"], - worryseed: ["6T", "5T", "4T"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L41", "7S2", "6M", "6L41", "5M", "5L53", "4M", "4L53", "3M", "3L43"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L37", "7S2", "6M", "6L37", "5M", "5L41", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + telekinesis: ["7T", "5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "7L49", "6T", "6L1", "5T", "5L64"], + zenheadbutt: ["7T", "6T", "5D", "5T", "4T"], }}, - gulpin: {learnset: { - acidarmor: ["7E", "6E", "5E", "5D", "4E", "3E"], - acidspray: ["7L17", "6L17", "5L34"], - amnesia: ["7L12", "6L12", "5L17", "4L17", "3L17"], + barboach: {learnset: { + amnesia: ["7L15", "6L15", "5L18", "4L18", "3L21"], + aquatail: ["7T", "7L28", "6T", "6L28", "5T", "5L35", "4T", "4L35"], attract: ["7M", "6M", "5M", "4M", "3M"], - belch: ["7L41", "6L40"], - bodyslam: ["3T"], - bulletseed: ["4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - curse: ["7E", "6E", "5E", "4E"], - defensecurl: ["3T"], - destinybond: ["7E", "6E", "5E", "4E"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - dynamicpunch: ["3T"], - encore: ["7L20", "6L20", "5L23", "4L23", "3L23"], + dragondance: ["7E", "6E", "5E", "4E"], + earthpower: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + earthquake: ["7M", "7L32", "6M", "6L32", "5M", "5L39", "4M", "4L39", "3M", "3L31"], endure: ["4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7L44", "6L44", "5L47", "4L47", "3L41"], + flail: ["7E", "6E", "5E", "4E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L36", "6T", "6L36", "5T", "5L49", "4T", "4L44"], - gigadrain: ["6T", "5T", "5D", "4M", "3M"], - gunkshot: ["7L49", "7E", "6T", "6L49", "6E", "5T", "5L59", "5E", "4T", "4L54"], + futuresight: ["7L39", "6L39", "5L43", "4L43", "3L36"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7E", "6E", "5E", "4E"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + magnitude: ["7L20", "6L20", "5L26", "4L26", "3L16"], mimic: ["3T"], - mudslap: ["7E", "6E", "5E", "4T", "3T"], + mudbomb: ["7L13", "6L13", "5L14", "4L14"], + muddywater: ["7L35", "7E", "6L35", "6E", "5E"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7L1", "6L1", "5D", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["7L6", "6L6", "5L6", "4L6", "3L6"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - poisongas: ["7L8", "6L8", "5L9", "5D", "4L9", "3L9"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L25", "6M", "6L25", "5M", "5L31", "4M", "4L31", "3M", "3L26"], return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M", "3S0"], - sing: ["3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7L10", "6L10", "5L14", "4L14", "3L14", "3S0"], - sludgebomb: ["7M", "7L33", "6M", "6L33", "5M", "5L44", "4M", "4L39", "3M", "3L39"], - sludgewave: ["7M", "6M", "5M"], - smog: ["7E", "6E", "5E", "4E", "3E"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spitup: ["7L28", "6L28", "5L39", "4L34", "3L34"], - stockpile: ["7L28", "6L28", "5L39", "4L34", "3L34"], - strength: ["6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5D", "5T", "4M", "3T"], + snore: ["7T", "7L25", "6T", "6L25", "5T", "5L31", "4T", "4L31", "3T", "3L26"], + spark: ["7E", "6E", "5D", "5E", "4E", "3E"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7L28", "6L28", "5L39", "4L34", "3L34"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7L25", "6M", "6L25", "5M", "5L28", "4M", "4L28", "3M", "3L28", "3S0"], - venomdrench: ["7E", "6E"], - venoshock: ["7M", "6M", "5M"], - waterpulse: ["6T", "4M", "3M"], - wringout: ["7L44", "6L44", "5L54", "4L49"], - yawn: ["7L5", "6L5", "5L6", "4L6", "3L6"], + takedown: ["7E", "6E", "5E", "4E"], + thrash: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L9", "6L9", "5L10", "4L10", "3L11"], + waterpulse: ["7T", "7L17", "6T", "6L17", "5L22", "4M", "4L22", "3M"], + watersport: ["7L6", "6L6", "5L6", "4L6", "3L6"], + whirlpool: ["7E", "6E", "5E", "4M", "4E", "3E"], }}, - swalot: {learnset: { - acidspray: ["7L17", "6L17", "5L38"], - amnesia: ["7L12", "6L12", "5L17", "4L17", "3L17"], + whiscash: {learnset: { + amnesia: ["7L15", "6L15", "5L18", "4L18", "3L21"], + aquatail: ["7T", "7L28", "6T", "6L28", "5T", "5L39", "4T", "4L39", "4S0"], attract: ["7M", "6M", "5M", "4M", "3M"], - belch: ["7L49", "6L46"], - block: ["6T", "5T", "4T"], - bodyslam: ["7L1", "6L26", "5L26", "4L26", "3T", "3L26"], + belch: ["7L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], bulldoze: ["7M", "6M", "5M"], - bulletseed: ["4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - defensecurl: ["3T"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M"], - encore: ["7L20", "6L20", "5L23", "4L23", "3L23"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L34", "6M", "6L34", "5M", "5L45", "4M", "4L45", "4S0", "3M", "3L36"], endure: ["4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7L52", "6L52", "5L57", "4L57", "3L56"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L42", "6T", "6L42", "5T", "5L59", "4T", "4L52"], - gigadrain: ["6T", "5T", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["7L61", "7L1", "6T", "6L1", "5T", "5L73", "4T", "4L66"], + futuresight: ["7L45", "6L45", "5L51", "4L51", "3L46"], + gigaimpact: ["7M", "6M", "5M", "4M", "4S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + magnitude: ["7L20", "6L20", "5L26", "4L26", "3L16"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudbomb: ["7L13", "6L13", "5L14", "4L14"], + muddywater: ["7L39", "6L39"], + mudslap: ["7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], naturalgift: ["4M"], - nightmare: ["3T"], - painsplit: ["6T", "5T", "4T"], - poisongas: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], - pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3M", "3L26"], return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludge: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], - sludgebomb: ["7M", "7L37", "6M", "6L37", "5M", "5L52", "4M", "4L45", "3M", "3L48"], - sludgewave: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spitup: ["7L30", "6L30", "5L45", "4L38", "3L40"], - stockpile: ["7L30", "6L30", "5L45", "4L38", "3L40"], + snore: ["7T", "7L25", "6T", "6L25", "5T", "5L33", "4T", "4L33", "3T", "3L26"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7L30", "6L30", "5L45", "4L38", "3L40"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "7L25", "6M", "6L25", "5M", "5L30", "4M", "4L30", "3M", "3L31"], - venomdrench: ["7L1"], - venoshock: ["7M", "6M", "5M"], - waterpulse: ["6T", "4M", "3M"], - wringout: ["7L54", "7L1", "6L1", "5L66", "4L59"], - yawn: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + thrash: ["7L1"], + tickle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L9", "7L1", "6L1", "5L10", "4L10", "3L11"], + waterpulse: ["7T", "7L17", "6T", "6L17", "5L22", "4M", "4L22", "3M"], + watersport: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + zenheadbutt: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "4S0"], }}, - carvanha: {learnset: { - agility: ["7L39", "6L36", "5L36", "4L36", "3L43"], - ancientpower: ["7E", "6E", "5E", "4T", "4E"], - aquajet: ["7L11", "6L11", "5L31", "4L31"], - assurance: ["7L15", "6L15", "5L26", "4L26"], + corphish: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + aquajet: ["7E", "6E"], attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L1", "6L1", "6S1", "5L1", "5D", "4L1", "3L1", "3S0"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["7E", "6E", "5E", "4M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + bubblebeam: ["7L14", "6L14", "5L20", "4L20", "3L19"], captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], confide: ["7M", "6M"], - crunch: ["7L36", "6L28", "5L28", "4L28", "3L22"], - darkpulse: ["7M", "6M", "5T", "5D", "4M"], - destinybond: ["7E", "6E"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + counter: ["3T"], + crabhammer: ["7L43", "6L38", "5L38", "4L38", "3L34"], + crunch: ["7L39", "6L39", "5L47", "4L47", "3L43"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "3T"], + doublehit: ["7L20", "6L20"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E"], + endeavor: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - focusenergy: ["7L8", "6L8", "5L8", "4L8", "3L13"], + falseswipe: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], + guillotine: ["7L48", "6L48", "5L53", "4L53", "3L44"], hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L5", "6L5", "5D", "5L7", "4L7", "3L7"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7E", "6E", "6S1", "5E", "4E", "3E"], + honeclaws: ["6M", "5M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7L25", "6L16", "5L16", "4L16"], - icywind: ["6T", "5T", "4T", "3T"], - leer: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "7L23", "7E", "6T", "6L23", "6E", "5T", "5L26", "5E", "4T", "4L26", "4E", "3L25"], + leer: ["7L10", "6L10", "5L13", "4L13", "3L13"], + metalclaw: ["7E", "6E", "5D", "5E", "4E"], mimic: ["3T"], mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], + nightslash: ["7L26", "6L26", "5L35", "4L35"], payback: ["7M", "6M", "5M", "4M"], - poisonfang: ["7L32", "6L32"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychicfangs: ["7E"], - rage: ["7L4", "6L4", "5L6", "4L6", "3L7"], + protect: ["7M", "7L17", "6M", "6L17", "5M", "5L23", "4M", "4L23", "3M", "3L22"], raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S0"], + razorshell: ["7L31", "6L31"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - scaryface: ["7L29", "6L11", "5L11", "4L11", "3L16", "3S0"], - screech: ["7L18", "6L18", "5L18", "4L18", "3L28"], secretpower: ["6M", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superfang: ["6T", "5T", "4T"], + superpower: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L22", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3T", "3L37"], - swift: ["7E", "6E", "5E", "4T", "3T"], - takedown: ["7L43", "6L38", "5L38", "4L38", "3L31"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7E", "6E", "5E", "5D", "4E", "3E"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + switcheroo: ["7E", "6E"], + swordsdance: ["7M", "7L37", "6M", "6L37", "5M", "5L44", "4M", "4L44", "3T", "3L37"], + taunt: ["7M", "7L34", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L31"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + trumpcard: ["7E", "6E", "5E"], + vicegrip: ["7L7", "6L7", "5L10", "4L10", "3L10"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M", "3S0"], + waterpulse: ["7T", "6T", "4M", "3M"], + watersport: ["3S0"], whirlpool: ["4M"], - zenheadbutt: ["6T", "5T", "4T"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - sharpedo: {learnset: { - agility: ["7L45", "6L45", "5L45", "4L45", "3L53"], + crawdaunt: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], ancientpower: ["4T"], - aquajet: ["7L11", "6L11", "6S0", "5L34", "4L34"], - assurance: ["7L15", "6L15", "5L26", "4L26"], attract: ["7M", "6M", "5M", "4M", "3M"], avalanche: ["4M"], - bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["4M"], - bulldoze: ["7M", "6M", "5M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L14", "6L14", "5L20", "4L20", "3L19"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L40", "6L28", "6S0", "6S1", "5L28", "4L28", "3L22"], + counter: ["3T"], + crabhammer: ["7L48", "6L44", "5L44", "4L44", "3L38", "3S1", "3S0"], + crunch: ["7L43", "6L43", "5L57", "4L57", "3L51"], + cut: ["6M", "5M", "4M", "3M"], darkpulse: ["7M", "6M", "5T", "4M"], - destinybond: ["6S0"], + dig: ["6M", "5M", "4M", "3M"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], + doublehit: ["7L20", "6L20"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L1", "6L1", "5L1", "4L1"], - focusenergy: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + falseswipe: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], + guillotine: ["7L54", "6L1", "5L65", "4L65", "3L52", "3S0"], hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7L25", "6L16", "6S0", "5L16", "4L16"], - icywind: ["6T", "5T", "4T", "3T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "7L23", "6T", "6L23", "5T", "5L26", "4T", "4L26", "3L25", "3S1"], + leer: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + liquidation: ["7T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightslash: ["7L62", "7L1", "6L1", "5L56", "4L56"], + naturepower: ["7M", "6M"], + nightslash: ["7L26", "6L26", "5L39", "4L39"], payback: ["7M", "6M", "5M", "4M"], - poisonfang: ["7L34", "6L34", "6S1"], - poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7L17", "6M", "6L17", "5M", "5L23", "4M", "4L23", "3M", "3L22"], raindance: ["7M", "6M", "5M", "4M", "3M"], + razorshell: ["7L32", "6L32"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - scaryface: ["7L29", "6L11", "6S1", "5L11", "4L11", "3L16"], - screech: ["7L18", "6L18", "5L18", "4L18", "3L28"], secretpower: ["6M", "4M", "3M"], - skullbash: ["7L51", "6L50", "5L50", "4L50", "3L48"], - slash: ["7L1", "6L30", "6S1", "5L30", "4L30", "3L33"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superfang: ["6T", "5T", "4T"], + superpower: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L22", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3T", "3L43"], - swift: ["4T", "3T"], - taunt: ["7M", "7L56", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L38"], - thief: ["7M", "6M", "5M", "4M", "3M"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L1", "6L30", "5L30", "4T", "4L30", "3T"], + swordsdance: ["7M", "7L40", "6M", "6L40", "5M", "5L52", "4M", "4L52", "3T", "3L43", "3S1", "3S0"], + taunt: ["7M", "7L36", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L33", "3S1", "3S0"], toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + vicegrip: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], - zenheadbutt: ["6T", "5T", "4T"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - wailmer: {learnset: { - amnesia: ["7L37", "6L37", "5L37", "4L37", "3L46"], - aquaring: ["7E", "6E", "5E", "4E"], - astonish: ["7L16", "6L16", "5L17", "4L17", "3L23"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "4E", "3T"], - bounce: ["7L45", "6T", "6L44", "5T", "5L44", "5D", "4T", "4L44"], - brine: ["7L25", "6L25", "5L31", "4M", "4L31"], + baltoy: {learnset: { + allyswitch: ["7T", "5M"], + ancientpower: ["7L19", "6L19", "5L26", "4T", "4L25", "3L25"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - clearsmog: ["7E", "6E"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defensecurl: ["7E", "6E", "5E", "4E", "3T"], - dive: ["7L41", "6M", "6L33", "5M", "5L41", "4T", "4L41", "3M"], - doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + cosmicpower: ["7L22", "6L22", "5L37", "4L45", "3L37"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillrun: ["7T", "6T", "5T"], + earthpower: ["7T", "7L37", "6T", "6L37", "5T", "5L51", "4T", "4L53"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], + explosion: ["7M", "7L46", "6M", "6L46", "5M", "5L60", "4M", "4L71", "3T", "3L45"], + extrasensory: ["7L31", "6L28", "5L43"], facade: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L4", "6L4", "5L4", "4L4", "3L5"], - hail: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5D", "5T", "4T"], + guardsplit: ["7L34", "6L34", "5L48"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L4", "4L3", "3L3"], headbutt: ["4T"], - heavyslam: ["7L53", "6L50", "5L50"], + healblock: ["7L10", "6L10", "5L54", "4L61"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L49", "6L47", "5L47", "4L47", "3L50"], - hypervoice: ["6T", "5T"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + imprison: ["7L43", "6L43"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mist: ["7L22", "6L22", "5L24", "4L24", "3L32"], + mudslap: ["7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7", "3S0"], naturalgift: ["4M"], + powersplit: ["7L34", "6L34", "5L48"], + powertrick: ["7L25", "6L17", "5L31", "4L31"], protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L16", "6L13", "5L15", "4L11", "3L11", "3S0"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L29", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L37"], + rapidspin: ["7L4", "6L4", "5D", "5L7", "4L5", "3L5"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L10", "6L10", "5L11", "4T", "4L11", "3T", "3L14"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocktomb: ["7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15", "3S0"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L34", "4M", "4L37", "3M", "3L31"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "4E", "3T", "3E"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], - soak: ["7E", "6E", "5E"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], - strength: ["6M", "5M", "4M", "3M"], + selfdestruct: ["7L28", "6L25", "5L21", "4L19", "3T", "3L19"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - thrash: ["7E", "6E", "5E", "4E", "3E"], - tickle: ["7E", "6E", "5E", "4E", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + telekinesis: ["7T", "5M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L7", "6L7", "5L7", "5D", "4L7", "3L10"], - waterpulse: ["7L19", "6T", "6L19", "5L21", "4M", "4L21", "3M", "3L28"], - waterspout: ["7L33", "6L34", "5L34", "4L34", "3L41"], - whirlpool: ["7L13", "6L13", "5L14", "4M", "4L14", "3L19"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5D", "5T", "4T"], }}, - wailord: {learnset: { - amnesia: ["7L37", "6L37", "5L37", "4L37", "3L52", "3S0"], - astonish: ["7L16", "6L16", "5L17", "4L17", "3L23"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - bounce: ["7L51", "6T", "6L51", "5T", "5L54", "4T", "4L54"], - brine: ["7L25", "6L29", "5L31", "4M", "4L31"], + claydol: {learnset: { + allyswitch: ["7T", "5M"], + ancientpower: ["7L19", "6L19", "5L26", "4T", "4L25", "3L25"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - defensecurl: ["3T"], - dive: ["7L44", "6M", "6L44", "5M", "5L46", "4T", "4L46", "3M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + cosmicpower: ["7L22", "6L22", "5L47", "4L51", "3L42"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillrun: ["7T", "6T", "5T"], + earthpower: ["7T", "7L40", "6T", "6L40", "5T", "5L59", "4T", "4L62"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], + explosion: ["7M", "7L58", "6M", "6L58", "5M", "5L72", "4M", "4L86", "3T", "3L55"], + extrasensory: ["7L31", "6L28", "5L39"], facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + guardsplit: ["7L34", "6L34", "5L54"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - heavyslam: ["7L65", "7L1", "6L1", "5L70"], + healblock: ["7L10", "6L10", "5L64", "4L73"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L58", "6L58", "5L62", "4L62", "3L59", "3S0"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], + hyperbeam: ["7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L36"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], + imprison: ["7L52", "6L52"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mist: ["7L22", "6L22", "5L24", "4L24", "3L32", "3S1"], + mudslap: ["7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7"], naturalgift: ["4M"], - nobleroar: ["7L1"], + powersplit: ["7L34", "6L34", "5L54"], + powertrick: ["7L25", "6L17", "5L31", "4L31"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L16", "6L13", "5L15", "4L11", "3L11"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "7L46", "6M", "6L46", "5M", "5L34", "4M", "4L40", "3M", "3L31"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L28", "6L25", "5L21", "4L19", "3T", "3L19"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + telekinesis: ["7T", "5M"], + teleport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], + }}, + lileep: {learnset: { + acid: ["7L5", "6L5", "5D", "5L8", "5S0", "4L8", "3L15"], + amnesia: ["7L36", "6L29", "5L29", "4L29", "3L36"], + ancientpower: ["7L17", "6L17", "5L43", "4T", "4L43", "3L43"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bind: ["7T", "6T", "5T"], + bodyslam: ["3T"], + brine: ["7L21", "6L21"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L13", "6L13", "5L22", "4L22", "3L29"], + constrict: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L8"], + curse: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7T", "6T", "5T", "4T"], + endure: ["7E", "6E", "5E", "4M", "3T"], + energyball: ["7M", "7L41", "6M", "6L41", "5M", "5L50", "4M", "4L50"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7T", "7L31", "6T", "6L31", "5T", "5L36", "4T", "4L36"], + gigadrain: ["7T", "7L26", "6T", "6L26", "5D", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7L9", "6L9", "5L15", "4L15", "3L22"], + megadrain: ["7E", "6E", "5E"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5D", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L29", "6M", "6L25", "5M", "5L27", "4M", "4L27", "3M", "3L37", "3S0", "3S1"], + psychup: ["3T"], + recover: ["7E", "6E", "5E", "5S0", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L10", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "5S0", "4M", "4E", "3T", "3E"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - soak: ["7L1"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], - strength: ["6M", "5M", "4M", "3M"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L46", "6L46", "5L57", "4L57", "3L50"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + stockpile: ["7L46", "6L46", "5L57", "4L57", "3L50"], + stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L46", "6L46", "5L57", "4L57", "3L50"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "6T", "5T", "4T"], + tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["7L19", "6T", "6L19", "5L21", "4M", "4L21", "3M", "3L28", "3S1"], - waterspout: ["7L33", "6L33", "5L34", "4L34", "3L44", "3S0", "3S1"], - whirlpool: ["7L13", "6L13", "5L14", "4M", "4L14", "3L19"], - zenheadbutt: ["6T", "5T"], + worryseed: ["7T", "6T", "5T", "4T"], + wringout: ["7L52", "7E", "6L52", "6E", "5L64", "5E", "4L64", "4E"], }}, - numel: {learnset: { - afteryou: ["6T", "5T"], - amnesia: ["7L19", "6L19", "5L31", "4L25", "3L31"], - ancientpower: ["7E", "6E", "5E", "4E"], + cradily: {learnset: { + acid: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + amnesia: ["7L36", "6L29", "5L29", "4L29", "3L36"], + ancientpower: ["7L17", "6L17", "5L36", "4T", "4L36", "3L48"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + bind: ["7T", "6T", "5T"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["3T"], + brine: ["7L21", "6L21"], bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], captivate: ["4M"], - charm: ["3S0"], confide: ["7M", "6M"], - curse: ["7L29", "6L29", "5L29"], - defensecurl: ["7E", "6E", "5E", "4E", "3T", "3E"], - dig: ["6M", "5M", "4M", "3M", "3S0"], - doubleedge: ["7L47", "6L47", "5L55", "4L51", "3T", "3L49"], + confuseray: ["7L13", "6L13", "5L22", "4L22", "3L29"], + constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["7L26", "6T", "6L26", "5T", "5L41", "4T", "4L35"], - earthquake: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L41", "3M", "3L35"], - echoedvoice: ["7M", "6M", "5M"], - ember: ["7L5", "6L5", "5L5", "5D", "4L5", "3L11", "3S0"], - endure: ["7E", "6E", "5E", "4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "7L44", "6M", "6L44", "5M", "5L56", "4M", "4L56"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flameburst: ["7L15", "6L15", "5L21"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L43", "6M", "6L43", "5M", "5L51", "4M", "4L45", "3M", "3L41"], - focusenergy: ["7L8", "6L8", "5L15", "4L15", "3L25"], + flash: ["6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], - growth: ["7E", "6E"], + gastroacid: ["7T", "7L31", "6T", "6L31", "5T", "5L46", "4T", "4L46"], + gigadrain: ["7T", "7L26", "6T", "6L26", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - heatwave: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - howl: ["7E", "6E", "5E", "4E", "3E"], - incinerate: ["6M", "5M"], - ironhead: ["7E", "6T", "6E", "6S1", "5T", "5E"], - lavaplume: ["7L22", "6L22", "5L35", "4L31"], - magnitude: ["7L12", "6L8", "5L11", "4L11", "3L19"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - mudbomb: ["7E", "6E", "5E", "4E"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7E", "6E", "5E", "4E", "3E"], secretpower: ["6M", "4M", "3M"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spitup: ["7E", "6E", "5E", "4E"], - stealthrock: ["6T", "5T", "4M"], - stockpile: ["7E", "6E", "5E", "4E"], - stomp: ["7E", "6E", "5E", "4E", "3E"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L52", "6L1", "5L66", "4L66", "3L60"], + stealthrock: ["7T", "6T", "5T", "4M"], + stockpile: ["7L52", "6L1", "5L66", "4L66", "3L60"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7E", "6E", "5E", "4E"], - tackle: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], - takedown: ["7L31", "6L31", "5L25", "4L21", "3L29", "3S0"], + swallow: ["7L52", "6L1", "5L66", "4L66", "3L60"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], - yawn: ["7L36", "7E", "6L36", "6E", "5L36", "5E", "4E"], + worryseed: ["7T", "6T", "5T", "4T"], + wringout: ["7L61", "7L1", "6L1", "5L76", "4L76"], }}, - camerupt: {learnset: { - afteryou: ["6T", "5T"], - amnesia: ["7L19", "6L19", "5L31", "4L25", "3L31"], + anorith: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L21", "6L21", "5L31", "4T", "4L31", "3L37"], + aquajet: ["7E", "6E"], attract: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L29", "6L29"], + bugbite: ["7T", "7L25", "6T", "6L25", "5T"], captivate: ["4M"], confide: ["7M", "6M"], - curse: ["7L29", "6L29", "6S0", "5L29"], - defensecurl: ["3T"], + crosspoison: ["7E", "6E", "5D", "5E", "5S0", "4E"], + crushclaw: ["7L39", "6L39", "5L55", "4L55"], + curse: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["7L26", "6T", "6L26", "5T", "5L49", "4T", "4L39"], - earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L57", "4M", "4L49", "3M", "3L37"], - echoedvoice: ["7M", "6M", "5M"], - ember: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + earthpower: ["7T", "6T", "5T", "4T"], endure: ["4M", "3T"], - eruption: ["7L52", "7L1", "6L1", "5L67", "4L57", "3L45"], - explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7L59", "7L1", "6L1", "5L75", "4L67", "3L55"], - flameburst: ["7L15", "6L15", "5L21"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L8", "7L1", "6L1", "5L15", "4L15", "3L25"], + falseswipe: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + furycutter: ["7L10", "6L10", "5L37", "4T", "4L37", "3T", "3L43"], + harden: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L7"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - lavaplume: ["7L22", "6L22", "5L33", "4L31"], - magnitude: ["7L12", "6L1", "5L1", "4L1", "3L1"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + metalclaw: ["7L17", "6L17", "5L19", "4L19", "3L25"], mimic: ["3T"], mudslap: ["4T", "3T"], + mudsport: ["7L4", "6L4", "5L7", "5S0", "4L7", "3L13"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7L49", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L31"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L55", "6L49", "5L49", "4L49", "3L55"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "7L1", "6M", "6L33", "6S0", "5M", "5L39", "4M", "4L33", "3T", "3L33"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E", "4E"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], + slash: ["7L34", "6L34", "5L43", "4L43", "3L49"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], + smackdown: ["7M", "7L13", "6M", "6L13", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5D", "5T", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L31", "6L31", "6S0", "5L25", "4L21", "3L29"], + swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], - yawn: ["7L39", "6L39", "6S0", "5L39"], + watergun: ["7L7", "6L7", "5L13", "5S0", "4L13", "3L19"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L61", "4M", "4L61"], }}, - torkoal: {learnset: { - afteryou: ["6T", "5T"], - amnesia: ["7L40", "6L40", "5L49", "4L49", "3L40"], + armaldo: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L21", "6L21", "5L31", "4T", "4L31", "3L37"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7L27", "6L27", "5L33", "4L33", "3T", "3L20"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L29", "6L29"], + brutalswing: ["7M"], + bugbite: ["7T", "7L25", "6T", "5T"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - curse: ["7L22", "6L12", "5L12", "4L12", "3L7"], + crushclaw: ["7L39", "6L1", "5L67", "4L67"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "4E"], - ember: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], - eruption: ["7E", "6E", "5E", "4E", "3E"], - explosion: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firespin: ["7L13", "6L13", "5L17", "4L17", "3L17"], - fissure: ["7E", "6E", "5E", "5D", "4E"], - flail: ["7L42", "6L1", "5L52", "4L52", "3L43"], - flameburst: ["7E", "6E", "5E"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L34", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L30"], - flamewheel: ["7L18", "6L18"], + falseswipe: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L10", "6L10", "5L37", "4T", "4L37", "3T", "3L46"], gigaimpact: ["7M", "6M", "5M", "4M"], - gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - heatwave: ["7L45", "6T", "6L1", "5T", "5L55", "4T", "4L55", "3L46"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - inferno: ["7L50", "6L1", "5L60"], - irondefense: ["7L38", "6T", "6L38", "5T", "5L44", "4T", "4L44", "3L33"], - irontail: ["6T", "5T", "4M", "3M"], - lavaplume: ["7L25", "6L25", "5L39", "4L39"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], + metalclaw: ["7L17", "6L17", "5L19", "4L19", "3L25"], mimic: ["3T"], mudslap: ["4T", "3T"], + mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "7L30", "6M", "6L1", "5M", "5L36", "4M", "4L36", "3M", "3L27"], - rapidspin: ["7L10", "6L10", "5L23", "4L23"], + protect: ["7M", "7L53", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L31"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L61", "6L55", "5L55", "4L55", "3L64"], + rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shellsmash: ["7L47", "6L1", "5L65"], - skullbash: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - smog: ["7L4", "6L4", "5L4", "4L4", "3L4"], - smokescreen: ["7L15", "6L15", "5L20", "4L20", "3L14"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "5D", "4M"], + seismictoss: ["3T"], + slash: ["7L34", "7L25", "6L25", "5L46", "4L46", "3L55"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L13", "6M", "6L13", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7E", "6T", "6E"], + superpower: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], - withdraw: ["7L7", "6L7", "5L7", "4L7"], - yawn: ["7E", "6E", "5E", "4E", "3E"], + watergun: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + xscissor: ["7M", "7L46", "6M", "6L46", "5M", "5L73", "4M", "4L73"], }}, - spoink: {learnset: { - amnesia: ["7E", "6E", "5E", "4E"], + feebas: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bounce: ["7L50", "6T", "6L50", "5T", "5L53", "4T", "4L48", "3L43"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7E", "6E", "5E"], + captivate: ["7E", "6E", "5D", "5E", "4M"], confide: ["7M", "6M"], - confuseray: ["7L18", "6L18", "5L18", "4L18", "3L25"], - covet: ["6T", "5T"], + confuseray: ["7E", "6E", "5E", "4E", "3E"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - endure: ["7E", "6E", "5E", "4M", "3T"], - extrasensory: ["7E", "6E", "5E", "4E", "3E"], + dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + dragonpulse: ["7T", "7E", "6T", "6E", "5T", "5E"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flail: ["7L30", "6L30", "5L30", "4L30", "3L30"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E", "3E"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - luckychant: ["7E", "6E", "5E"], - magiccoat: ["7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L28"], + hypnosis: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], mimic: ["3T"], - mirrorcoat: ["7E", "6E", "5E", "4E"], + mirrorcoat: ["7E", "6E", "5D", "5E", "4E", "4S0", "3E"], + mist: ["7E", "6E", "5E", "4E"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], - odorsleuth: ["7L10", "6L10", "5L10", "4L10", "3L10"], - payback: ["7M", "7L40", "6M", "6L40", "5M", "5L41", "4M", "4L34"], - powergem: ["7L29", "6L29", "5L48", "4L46"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L14", "6L14", "5L14", "4L14", "3L16"], - psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L46", "4M", "4L41", "3M", "3L34"], - psychup: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], - psyshock: ["7M", "7L38", "6M", "6L38", "5M", "5L34"], - psywave: ["7L7", "6L7", "5L7", "5D", "4L7", "3L7"], raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "5D", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L37"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - simplebeam: ["7E", "6E"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["7L33", "6T", "6L29", "5T", "5L29", "4T", "4L29", "3T", "3L37"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + splash: ["7L1", "6L1", "5D", "5L1", "4L1", "4S0", "3L1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M", "3M"], + tackle: ["7L15", "6L15", "5L15", "4L15", "3L15"], + tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["3S0"], - whirlwind: ["7E", "6E", "5E"], - zenheadbutt: ["7L26", "7E", "6T", "6L26", "6E", "5T", "5L26", "5E", "4T", "4L26", "4E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], }}, - grumpig: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - belch: ["7L1"], + milotic: {learnset: { + aquaring: ["7L17", "6L21", "5L49", "4L49"], + aquatail: ["7T", "7L31", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + attract: ["7M", "7L34", "6M", "6L37", "5M", "5L41", "4M", "4L41", "3M", "3L45"], + avalanche: ["4M"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["7L60", "6T", "6L60", "5T", "5L68", "4T", "4L60", "3L55"], - brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + captivate: ["7L21", "6L24", "5L25", "4M", "4L25"], + coil: ["7L41", "6L44"], confide: ["7M", "6M"], - confuseray: ["7L18", "6L18", "5L18", "4L18", "3L25"], - counter: ["3T"], - covet: ["6T", "5T"], + disarmingvoice: ["7L11", "6L11"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "7L24", "6M", "6L27", "5M"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L44", "6L37", "5L37", "5S3", "4L37", "4S2", "4S1", "3L40"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L28"], - megakick: ["3T"], - megapunch: ["3T"], + icebeam: ["7M", "6M", "5M", "5S4", "5S3", "4M", "4S1", "3M"], + icywind: ["7T", "6T", "5T", "4T", "4S2", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], + mirrorcoat: ["5S3"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - odorsleuth: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], - payback: ["7M", "7L46", "6M", "6L46", "5M", "5L47", "4M", "4L37"], - powergem: ["7L29", "6L29", "5L60", "4L55"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L1"], - psychic: ["7M", "7L52", "6M", "6L52", "5M", "5L55", "4M", "4L47", "3M", "3L37"], - psychup: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], - psyshock: ["7M", "7L42", "6M", "6L42", "5M", "5L37"], - psywave: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L35", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L43"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "7L47", "6M", "6L33", "5M", "5L33", "4M", "4L33", "4S2", "4S1", "3M", "3L35", "3S0"], + recover: ["7L27", "6L21", "5L21", "5S4", "5S3", "4L21", "4S2", "4S1", "3L30", "3S0"], + refresh: ["7L7", "7L1", "6L7", "5L9", "4L9", "3L15"], + rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L37", "6M", "6L41", "5M", "5L45", "4M", "4L45", "3M", "3L50"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["7L35", "6T", "6L29", "5T", "5L29", "4T", "4L29", "3T", "3L43"], - splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + snore: ["7T", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "5S4", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - teeterdance: ["7L1", "6L32"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["7L26", "6T", "6L26", "5T", "5L26", "4T", "4L26"], + toxic: ["7M", "6M", "5M", "5S4", "4M", "3M"], + twister: ["7L14", "6L14", "5L17", "4T", "4L17", "3L25", "3S0"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7L1", "6T", "6L13", "5L13", "4M", "4L13", "3M", "3L20", "3S0"], + watersport: ["7L4", "7L1", "6L4", "5L5", "4L5", "3L10"], + whirlpool: ["4M"], + wrap: ["7L1", "6L1", "5L1", "4L1", "3L5"], }}, - spinda: {learnset: { - assist: ["7E", "6E", "5E", "4E", "3E"], + castform: {learnset: { + amnesia: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "4E", "3E"], + avalanche: ["4M"], + blizzard: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - copycat: ["7L5", "6L5", "5L10", "5D", "4L10"], - counter: ["3T"], - covet: ["6T", "5T"], + cosmicpower: ["7E", "6E"], defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - disable: ["7E", "6E", "5E", "4E", "3E"], - dizzypunch: ["7L23", "6L23", "5L28", "4L28", "3L27"], - doubleedge: ["7L46", "6L46", "5L46", "4L46", "3T", "3L45"], + defog: ["7T"], + disable: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - encore: ["7E", "6E", "5E", "4E", "3E"], + ember: ["7L10", "6L10", "5D", "5L10", "4L10", "3L10"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6E", "5E", "5D", "4E"], - faketears: ["7E", "6E", "5E"], - feintattack: ["7L10", "6L10", "5L14", "4L14", "3L12"], - firepunch: ["6T", "5T", "4T", "3T"], - flail: ["7L50", "6L50", "5L50", "4L50", "3L49"], + fireblast: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - guardsplit: ["7E", "6E"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + guardswap: ["7E", "6E"], + hail: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], + headbutt: ["7L15", "6L15", "5L20"], + hex: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L19", "6L19", "5L23", "4L23", "3L23"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["7E", "6T", "6E", "5T", "5E", "4T", "3T"], - lastresort: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + hurricane: ["7L45", "6L45"], + hydropump: ["7L35", "6L35", "5L50"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lastresort: ["7T", "6T", "5T", "4T"], + luckychant: ["7E", "6E", "5E", "4E"], mimic: ["3T"], - mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - poweruppunch: ["6M"], + ominouswind: ["7E", "6E", "5D", "5E", "4T", "4E"], + powdersnow: ["7L10", "6L10", "5L10", "4L10", "3L10"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L14", "6L14", "5L19", "4L19", "3L16"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychocut: ["7E", "6E", "5E", "4E"], - psychoshift: ["7E", "6E"], - psychup: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41", "3T", "3L38"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7E", "6E", "5E"], - recycle: ["6T", "5T", "4M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + raindance: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], + reflecttype: ["7E", "6E"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - sing: ["3S0"], - skillswap: ["6T", "5T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smellingsalts: ["7E", "6E", "5E", "4E", "3E"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spotlight: ["7E"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L28", "6L28", "5L32", "4T", "4L32"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["5D"], + sunnyday: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - teeterdance: ["7L32", "6L32", "5L37", "4L37", "3L34"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7T", "6T", "5T", "4T"], thief: ["7M", "6M", "5M", "4M", "3M"], - thrash: ["7L55", "6L50", "5L55", "4L55", "3L56"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["7L37", "6T", "6L5", "5T", "5L5", "4T", "4L5", "3L5", "3S0"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - wildcharge: ["7M", "6M", "5M"], - wish: ["7E", "6E", "5E", "4E", "3E"], + watergun: ["7L10", "6L10", "5L10", "4L10", "3L10"], + waterpulse: ["7T", "6T", "5D", "4M", "3M"], + weatherball: ["7L25", "6L25", "5L40", "4L30", "3L30"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], }}, - trapinch: {learnset: { + kecleon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7T", "6T", "5T"], + ancientpower: ["7L21", "6L1", "5L55", "4T", "4L55", "3L49"], + aquatail: ["7T", "6T", "5T", "4T"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L1", "6L1", "5L17"], - bite: ["7L1", "6L1", "5L1", "5S0", "5D", "4L1", "3L1"], + bind: ["7T", "7L4", "6T", "6L4", "5T", "5L4", "4L4", "3L4"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "4T"], - bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + camouflage: ["7L30", "7E", "6L30", "6E"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L22", "6L22", "5L33", "4L33", "3L33"], - dig: ["7L19", "6M", "6L19", "5M", "5L41", "4M", "4L41", "3M", "3L41"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dizzypunch: ["7E", "6E", "5E", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["7L26", "7E", "6T", "6L26", "6E", "5T", "5L65", "5E", "4T", "4L65"], - earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L73", "4M", "4L73", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], + drainpunch: ["7T", "6T", "5T", "4M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L29", "6L1", "5L81", "4L81"], - feintattack: ["7L1", "6L1", "5L17", "4L17", "3L17"], - fissure: ["7L47", "6L1", "5L89", "4L89"], - flail: ["7E", "6E", "5E", "4E"], - focusenergy: ["7E", "6E", "5E", "4E", "3E"], + fakeout: ["7E", "6E", "5E", "4E"], + feint: ["7L10", "6L10", "5L14", "4L14"], + feintattack: ["7L16", "6L7", "5D", "5L7", "4L7", "3L7"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + foulplay: ["7T", "7E", "6T", "6E", "5T", "5E"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7E", "6E", "5E", "4T", "4E"], - gigadrain: ["6T", "5T", "5D", "4M", "3M"], - gust: ["7E", "6E", "5E", "4E", "3E"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "6L10", "5L10", "4L10", "3L12"], + grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], + lick: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7T", "6T", "5T", "4T"], + magiccoat: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], - mudshot: ["7E", "6E", "5E", "4E"], - mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], + poweruppunch: ["7E", "6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - quickattack: ["7E", "6E", "5E", "4E", "3E"], + psybeam: ["7L18", "6L18", "5L18", "4L15", "3L17"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7E", "6E", "5E", "4E"], + recycle: ["7T", "6T", "5T", "4M"], + reflecttype: ["5D"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "6L1", "5L9", "4L9", "3L9"], - sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], - sandtomb: ["7L12", "6L10", "5L25", "4L25", "3L25"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L38", "6L32", "5L32", "4L32", "3L24"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "5D"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "7L33", "6M", "6L33", "5M", "5L49", "4M", "4L49"], + shadowsneak: ["7L7", "6L7", "5L22", "4L20"], + shockwave: ["7T", "6T", "4M", "3M"], + skillswap: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4M", "3M"], + slash: ["7L25", "6L25", "5L27", "4L25", "3L31"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["7T", "6T", "5T", "4M"], strength: ["6M", "5M", "4M", "3M"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], + substitute: ["7M", "7L42", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3T", "3L40"], + suckerpunch: ["7L46", "6L43", "5L43", "4T", "4L43"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7L40", "6T", "6L1", "5T", "5L67"], swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + synchronoise: ["7L50", "6L1", "5L58"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wonderroom: ["7T", "6T", "5T"], + workup: ["7M", "5M"], }}, - vibrava: {learnset: { - aircutter: ["4T"], + shuppet: {learnset: { + allyswitch: ["7T"], + astonish: ["7E", "6E", "5E", "4E", "3E"], attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L1", "6L1", "5L17"], - bite: ["3L1"], bodyslam: ["3T"], - boomburst: ["7L47", "6L47"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L29", "6L29"], - bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["3L33"], - defog: ["4M"], - dig: ["6M", "5M", "4M", "3M"], + confuseray: ["7E", "6E", "5E", "4E"], + curse: ["7L26", "6L19", "5L13", "4L13", "3L20"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + destinybond: ["7E", "6E", "5D", "5E", "4E", "3E"], + disable: ["7E", "6E", "5E", "4E", "3E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L1", "6L35", "5L35", "4L35", "3L35"], - dragonpulse: ["6T", "5T", "4M"], - earthpower: ["7L26", "6T", "6L26", "5T", "5L39", "4T"], - earthquake: ["7M", "7L33", "6M", "6L33", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L43", "4M", "4L38"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], - fly: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L28", "4L28", "3L37", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T"], - gigadrain: ["6T", "5T", "4M", "3M"], + grudge: ["7L46", "6L46", "5L50", "4L46", "3L56"], + gunkshot: ["7T", "7E", "6E", "5E"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], + hex: ["7L22", "6L22", "5L31"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + imprison: ["7E", "6E", "5E", "4E", "3E"], + knockoff: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mimic: ["3T"], - mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], naturalgift: ["4M"], - ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], + nightmare: ["3T"], + nightshade: ["7L7", "6L7", "5D", "5L8", "4L8", "3L13"], + ominouswind: ["7E", "6E", "5E", "4T"], + painsplit: ["7T", "6T", "5D", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M", "4E"], + phantomforce: ["7L54", "7E", "6L54", "6E"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], - sandtomb: ["7L12", "6L1", "5L1", "4L1", "3L1"], - screech: ["7L22", "6L22", "5L41", "4L41", "3L41"], + screech: ["7L4", "6L4", "5L5", "4L5", "3L8"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T"], - silverwind: ["4M"], + shadowball: ["7M", "7L30", "6M", "6L30", "5M", "5L35", "4M", "4L31", "3M", "3L44", "3S0"], + shadowsneak: ["7L13", "7E", "6L13", "6E", "5L20", "5E", "4L20", "4E"], + shockwave: ["7T", "6T", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - sonicboom: ["7L1", "6L1", "5L1", "4L1"], - steelwing: ["7M", "6M", "4M", "3M"], - strength: ["6M", "5M", "4M", "3M"], - strugglebug: ["6M", "5M"], + snatch: ["7T", "7L42", "6T", "6L42", "5T", "5L46", "4M", "4L43", "3M", "3L49"], + snore: ["7T", "6T", "3T"], + spite: ["7T", "7L10", "6T", "6L10", "5T", "5L16", "4T", "4L16", "3L25", "3S0"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L38", "6L34", "5L38", "4T", "4L35"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T"], - supersonic: ["7L19", "6L19", "5L33", "4L33"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uproar: ["7L40", "6T", "6L40"], - uturn: ["7M", "6M", "5M", "4M"], + trick: ["7T", "7L50", "6T", "6L50", "5T", "5L55", "4T", "4L50"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32", "3S0"], }}, - flygon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - aircutter: ["4T"], + banette: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bide: ["7L1", "6L1", "5L17"], - bite: ["3L1"], bodyslam: ["3T"], - brutalswing: ["7M"], - bugbite: ["6T", "5T", "4T"], - bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["3L33", "3S0"], - defog: ["4M"], - dig: ["6M", "5M", "4M", "3M"], + cottonguard: ["5S1"], + curse: ["7L26", "6L1", "5L1", "4L1", "3L1", "3S0"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T", "4S1"], - dragonbreath: ["7L1", "6L35", "5L35", "4L35", "3L35", "3S0"], - dragonclaw: ["7M", "7L1", "6M", "6L45", "5M", "5L45", "4M", "4L45", "4S1", "3M"], - dragondance: ["7L1"], - dragonpulse: ["6T", "5T", "4M"], - dragonrush: ["7L47", "6L47"], - dragontail: ["7M", "7L29", "6M", "6L29", "5M", "5L65"], - earthpower: ["7L26", "6T", "6L26", "5T", "5L39", "4T"], - earthquake: ["7M", "7L33", "6M", "6L33", "5M", "4M", "4S1", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L51", "4M", "4L42"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L28", "5S1", "4L28", "3L39", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], + grudge: ["7L52", "6L52", "5L66", "4L58", "3L64"], + gunkshot: ["7T"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], + helpinghand: ["3S0"], + hex: ["7L22", "6L22", "5L31", "5S1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L65"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + knockoff: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + metronome: ["3T"], mimic: ["3T"], - mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], - poweruppunch: ["6M"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + phantomforce: ["7L64", "7L1", "6L1"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], - sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L53"], - sandtomb: ["7L12", "6L1", "5L1", "4L1", "3L1", "3S0"], - screech: ["7L22", "6L22", "5L41", "4L41", "3L41", "3S0"], + screech: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], secretpower: ["6M", "4M", "3M"], - signalbeam: ["6T", "5T"], - silverwind: ["4M"], + shadowball: ["7M", "7L30", "6M", "6L30", "5M", "5L35", "5S1", "4M", "4L31", "3M", "3L48", "3S0"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowsneak: ["7L13", "6L13", "5L20", "4L20"], + shockwave: ["7T", "6T", "4M", "3M"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - sonicboom: ["7L1", "6L1", "5L1", "4L1"], - steelwing: ["7M", "6M", "4M", "3M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - strugglebug: ["6M", "5M"], + snatch: ["7T", "7L46", "6T", "6L46", "5T", "5L58", "4M", "4L51", "3M", "3L55"], + snore: ["7T", "6T", "3T"], + spite: ["7T", "7L10", "7L1", "6T", "6L1", "5T", "5L16", "4T", "4L16", "3L25"], substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L40", "6L34", "5L42", "4T", "4L35"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T"], - supersonic: ["7L19", "6L19", "5L33", "4L33"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - thunderpunch: ["6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uproar: ["7L40", "6T", "6L40"], - uturn: ["7M", "6M", "5M", "4M", "4S1"], + trick: ["7T", "7L58", "6T", "6L58", "5T", "5L75", "4T", "4L66"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32"], }}, - cacnea: {learnset: { - absorb: ["7L4", "6L4", "5L5", "5D", "4L5", "3L5", "3S0"], - acid: ["7E", "6E", "5E", "4E", "3E"], + duskull: {learnset: { + allyswitch: ["7T"], + astonish: ["7L9", "6L9", "5L14", "4L14", "3L16", "3S1"], attract: ["7M", "6M", "5M", "4M", "3M"], - belch: ["7E", "6E"], - block: ["7E", "6T", "6E", "5T", "5E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulletseed: ["4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cottonspore: ["7L46", "6L46", "5L49", "4L49", "3L41"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - destinybond: ["7L54", "6L54", "5L57", "4L57", "3L49"], - disable: ["7E", "6E", "5E"], + confuseray: ["7L30", "6L17", "5L17", "4L17", "3L23", "3S1"], + curse: ["7L33", "6L30", "5L30", "4L30", "3L34", "3S0"], + darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + destinybond: ["7E", "6E", "5E", "4E", "3E"], + disable: ["7L6", "6L6", "5D", "5L6", "4L6", "3L5"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E"], - encore: ["3S0"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], - energyball: ["7M", "7L42", "6M", "6L42", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L29", "4L29", "3L29"], - fellstinger: ["7E", "6E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + foresight: ["7L14", "6L9", "5L9", "4L9", "3L12"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7E", "6E", "5E", "4E", "3E"], - growth: ["7L7", "6L7", "5L9", "4L9", "3L9"], + futuresight: ["7L54", "6L49", "5L49", "4L46", "3L49"], + gravity: ["7T", "6T", "5T", "4T"], + grudge: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7E", "6E"], headbutt: ["4T"], + helpinghand: ["3S1"], + hex: ["7L38", "6L38", "5L38"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - ingrain: ["7L22", "6L22", "5L25", "4L25", "3L25"], - leechseed: ["7L10", "6L10", "5L13", "4L13", "3L13"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - lowkick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - magicalleaf: ["7E", "6E", "5E", "4E"], - megapunch: ["3T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + imprison: ["7E", "6E", "5E", "4E", "3E"], + infestation: ["7M", "6M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L46", "6L41", "5L41", "4L38", "3L45", "3S0"], + memento: ["7E", "6E", "5E", "4E", "3E"], mimic: ["3T"], - mudslap: ["4T", "3T"], - nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - needlearm: ["7L16", "6L16", "5L45", "4L45", "3L37"], - payback: ["7M", "7L26", "6M", "6L26", "5M", "5L41", "4M", "4L41"], - pinmissile: ["7L38", "6L21", "5L21", "4L21", "3L21"], - poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - poweruppunch: ["6M"], + nightmare: ["3T"], + nightshade: ["7L1", "6L1", "5L1", "4L1", "3L1"], + ominouswind: ["7E", "6E", "5E", "4T", "4E"], + painsplit: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E", "3E"], + payback: ["7M", "7L49", "6M", "6L46", "5M", "5L46", "4M", "4L41"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L22", "6L22", "5L25", "4L25", "3L27", "3S0"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], - sandattack: ["7L13", "6L13", "5L17", "4L17", "3L17"], - sandstorm: ["7M", "7L50", "6M", "6L50", "5M", "5L53", "4M", "4L53", "3M", "3L45"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - seismictoss: ["3T"], + shadowball: ["7M", "7L41", "6M", "6L41", "5M", "4M", "3M", "3S1"], + shadowsneak: ["7L17", "6L17", "5L22", "4L22"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smellingsalts: ["7E", "6E", "5E", "4E"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spikes: ["7L30", "6L30", "5L33", "4L33", "3L33"], - spite: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L34", "6L34", "5L37", "4T", "4L37"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - switcheroo: ["7E", "6E", "5E"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - teeterdance: ["7E", "6E", "5E", "5D", "4E", "3E"], - thunderpunch: ["6T", "5T", "5D", "4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - venoshock: ["7M", "6M", "5M"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "4T"], + trick: ["7T", "6T", "5D", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3L38", "3S0"], + wonderroom: ["7T", "6T", "5T"], }}, - cacturne: {learnset: { - absorb: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + dusclops: {learnset: { + allyswitch: ["7T"], + astonish: ["7L9", "7L1", "6L1", "5L14", "4L14", "3L16"], attract: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T"], + bind: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1", "3L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M"], - bulletseed: ["4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cottonspore: ["7L49", "6L49", "5L59", "4L59", "3L47"], + confuseray: ["7L30", "6L17", "5L17", "4L17", "3L23"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7L33", "6L30", "5L30", "4L30", "3L34"], darkpulse: ["7M", "6M", "5T", "4M"], - destinybond: ["7L59", "7L1", "6L1", "5L71", "4L71", "3L59"], + disable: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], - energyball: ["7M", "7L44", "6M", "6L44", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L29", "4L29", "3L29", "3S0"], + firepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], flash: ["6M", "5M", "4M", "3M"], fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["6T", "5T"], + focuspunch: ["7T", "6T", "4M", "3M"], + foresight: ["7L14", "6L9", "5L9", "4L9", "3L12"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], + futuresight: ["7L64", "7L1", "6L1", "5L61", "4L61", "3L58"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growth: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + gravity: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], headbutt: ["4T"], + hex: ["7L40", "6L40", "5L42"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - ingrain: ["7L22", "6L22", "5L25", "4L25", "3L25", "3S0"], - leechseed: ["7L10", "6L10", "5L13", "4L13", "3L13"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], + meanlook: ["7L52", "6L49", "5L49", "4L43", "3L51"], megakick: ["3T"], megapunch: ["3T"], + metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - needlearm: ["7L16", "6L16", "5L53", "4L53", "3L41", "3S0"], - payback: ["7M", "7L26", "6M", "6L26", "5M", "5L47", "4M", "4L47"], - pinmissile: ["7L38", "6L21", "5L21", "4L21", "3L21"], - poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1"], + nightmare: ["3T"], + nightshade: ["7L1", "6L1", "5L1", "4L1", "3L1"], + ominouswind: ["4T"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "7L57", "6M", "6L57", "5M", "5L58", "4M", "4L51"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L22", "6L22", "5L25", "4L25", "3L27"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], - roleplay: ["6T", "5T", "4T"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7L13", "6L13", "5L17", "4L17", "3L17"], - sandstorm: ["7M", "7L54", "6M", "6L54", "5M", "5L65", "4M", "4L65", "3M", "3L53"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], seismictoss: ["3T"], + shadowball: ["7M", "7L45", "6M", "6L45", "5M", "4M", "3M"], + shadowpunch: ["7L1", "6L37", "5L37", "4L37", "3L37"], + shadowsneak: ["7L17", "6L17", "5L22", "4L22"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spikes: ["7L30", "6L30", "5L35", "4L35", "3L35", "3S0"], - spikyshield: ["7L1", "6L32"], - spite: ["6T", "5T", "4T"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L35", "6L35", "5L41", "4T", "4L41"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["6T", "5T", "4T"], - thunderpunch: ["6T", "5T", "4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3L41"], + wonderroom: ["7T", "6T", "5T"], }}, - swablu: {learnset: { + dusknoir: {learnset: { + allyswitch: ["7T"], + astonish: ["7L9", "7L1", "6L1", "5L14", "4L14"], + attract: ["7M", "6M", "5M", "4M"], + bind: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L30", "6L17", "5L17", "4L17"], + curse: ["7L33", "6L30", "5L30", "4L30"], + darkpulse: ["7M", "6M", "5T", "4M"], + disable: ["7L6", "7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foresight: ["7L14", "6L9", "5L9", "4L9"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L64", "7L1", "6L1", "5L61", "4L61"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + headbutt: ["4T"], + hex: ["7L40", "6L40", "5L42"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + icywind: ["7T", "6T", "5T", "4T"], + infestation: ["7M", "6M"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1", "4L1"], + meanlook: ["7L52", "6L49", "5L49", "4L43"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightshade: ["7L1", "6L1", "5L1", "4L1"], + ominouswind: ["4T"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "7L57", "6M", "6L57", "5M", "5L58", "4M", "4L51"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["7L22", "6L22", "5L25", "4L25"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7L45", "6M", "6L45", "5M", "4M"], + shadowpunch: ["7L1", "6L37", "5L37", "4L37"], + shadowsneak: ["7L17", "6L17", "5L22", "4L22"], + skillswap: ["7T", "6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33"], + wonderroom: ["7T", "6T"], + }}, + tropius: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7E", "6E", "5E", "4E", "3E"], aircutter: ["4T"], - astonish: ["7L3", "6L3", "5L5", "4L5", "3L8"], + airslash: ["7L36", "6L36", "5L51", "4L47", "4S0"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], + bestow: ["7L46", "6L1", "5L57"], + bodyslam: ["7L41", "6L37", "5L37", "4L37", "3T", "3L37"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7E", "6E", "5E", "4M", "3M"], captivate: ["4M"], confide: ["7M", "6M"], - cottonguard: ["7L34", "6L34", "5L40"], - dazzlinggleam: ["7M", "6M"], - disarmingvoice: ["7L11", "6L11"], + curse: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["7L38", "6T", "6L38", "5T", "5L50", "4M", "4L45"], - dragonrush: ["7E", "6E", "5E", "4E"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - echoedvoice: ["7M", "6M", "5M"], + dragondance: ["7E", "6E", "5E", "4E"], + dragonhammer: ["7E"], + dragonpulse: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["3S0"], - featherdance: ["7E", "6E", "5E", "5D", "4E"], + flash: ["6M", "5M", "4M", "3M"], fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L7", "6L7", "5L13", "4L13", "3L18"], - growl: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1", "3S0"], - haze: ["7E", "6E", "5E", "4E", "3E"], - healbell: ["6T", "5T", "4T"], - heatwave: ["6T", "5T", "4T"], + furycutter: ["4T", "3T"], + gigadrain: ["7T", "6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L1", "6L1", "5L7", "4L7", "3L7"], + gust: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["7E", "6T", "6E", "6S2", "5T", "5E"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leafblade: ["7E", "6E", "5E", "4E"], + leafstorm: ["7L61", "7L1", "7E", "6L1", "6E", "5L71", "5E", "4L61", "4E"], + leaftornado: ["7L26", "6L26", "5L47"], + leechseed: ["7E", "6E", "5D", "5E", "4E", "3E"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + magicalleaf: ["7L16", "6L16", "5L31", "4L31", "3L31"], mimic: ["3T"], - mirrormove: ["7L30", "6L30", "5L36", "4L36", "3L38"], - mist: ["7L14", "6L14", "5L23", "4L23", "3L28"], - moonblast: ["7L46", "6L46"], mudslap: ["4T", "3T"], - naturalgift: ["7L20", "6L20", "5L32", "4M", "4L32"], + naturalgift: ["7L30", "7E", "6L1", "6E", "5L67", "5E", "4M", "4L57"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], - peck: ["7L1", "6L1", "6S2", "5L1", "5S1", "5D", "4L1", "3L1", "3S0"], - perishsong: ["7L42", "6L42", "5L55", "4L50", "3L48"], - pluck: ["5M", "4M"], - powerswap: ["7E", "6E", "5E", "4E"], + outrage: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7E", "6E", "5E", "4E", "3E"], - rage: ["7E", "6E", "5E", "4E", "3E"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7L26", "6L26", "5L45", "4L40", "3L41"], + razorleaf: ["7L1", "6L1", "5L11", "4L11", "3L11"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], - round: ["7M", "7L17", "6M", "6L17", "5M", "5L18"], - safeguard: ["7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - sing: ["7L5", "6L5", "5L9", "4L9", "3L11"], - skyattack: ["6T", "3T"], + seedbomb: ["7T", "6T", "5T"], + silverwind: ["5D", "4M"], + slam: ["7E", "6E", "5E", "4E", "3E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L56", "6M", "6L56", "5M", "5L61", "4M", "4L51", "4S0", "3M", "3L41"], + steelwing: ["7M", "6M", "4M", "3M"], + stomp: ["7L10", "6L10", "5L17", "4L17", "3L17"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "4S0", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L23", "6L23", "5L28", "4L28", "3L31"], - thief: ["7M", "6M", "5M", "4M", "3M"], + sweetscent: ["7L6", "6L6", "5L21", "4L21", "3L21"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7T", "7L50", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E", "4T", "4L41", "4E", "4S0", "3L47"], + tailwind: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M", "3M"], twister: ["4T"], - uproar: ["6T", "5T", "4T"], + whirlwind: ["7L21", "6L21", "5L27", "4L27", "3L27"], + worryseed: ["7T", "6T", "5T", "4T"], + }}, + chingling: {learnset: { + allyswitch: ["7T"], + astonish: ["7L7", "6L7", "5L9", "4L9"], + attract: ["7M", "6M", "5M", "4M"], + bind: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L10", "6L10", "5L14", "4L14"], + cosmicpower: ["7E", "6E"], + curse: ["7E", "6E", "5E", "4E"], + dazzlinggleam: ["7M", "6M"], + disable: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "4E"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + entrainment: ["7L19", "6L19", "5L25"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + growl: ["7L4", "6L4", "5L6", "4L6"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7E", "6E", "5E", "4E"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7L16", "6T", "6L16", "5T", "5L22", "4T", "4L22"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["7T", "6T", "5T", "4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recover: ["7E", "6E", "5E", "4E"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "7L32", "6T", "6L17", "5T", "5L17", "4T", "4L17"], + wish: ["7E", "6E", "5E", "4E"], + wrap: ["7L1", "6L1", "5L1", "4L1"], + yawn: ["7L13", "6L13"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - altaria: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M", "3S1"], - agility: ["6S3"], - aircutter: ["4T"], - astonish: ["7L3", "7L1", "6L1", "5L1", "4L1", "3L1"], + chimecho: {learnset: { + allyswitch: ["7T"], + astonish: ["7L7", "7L1", "6L1", "5L9", "4L9", "3L9", "3S0"], attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cottonguard: ["7L34", "6L34", "5L46"], + confusion: ["7L10", "7L1", "6L1", "5L14", "4L14", "3L14"], + cosmicpower: ["7E", "6E"], + craftyshield: ["7E"], + curse: ["7E", "6E", "5E", "4E", "3E"], dazzlinggleam: ["7M", "6M"], - disarmingvoice: ["7L11", "6L11"], - doubleedge: ["3T"], + defensecurl: ["3T"], + defog: ["7T"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["7L42", "6L33", "5L33", "4L33", "3T", "3L33"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L1", "6L35", "5L35", "5S2", "4L35", "3L35", "3S0", "3S1"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragondance: ["7L30", "6L30", "5L39", "4L39", "3L40", "3S0"], - dragonpulse: ["7L40", "6T", "6L40", "5T", "5L62", "4M", "4L54"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L22", "6L22", "5L46", "4L46"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["5S2"], - fireblast: ["7M", "6M", "6S3", "5M", "4M", "3M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furyattack: ["7L7", "6L7", "5L13", "4L13", "3L18"], - gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - healbell: ["6T", "5T", "4T", "3S1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "6S3", "5T"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + growl: ["7L4", "7L1", "6L1", "5L6", "4L6", "3L6", "3S0"], + healbell: ["7T", "7L27", "6T", "6L27", "5T", "5L38", "4T", "4L38", "3L38"], + healingwish: ["7L57", "7L1", "6L1", "5L57", "4L49"], + healpulse: ["7L47", "6L47", "5L49"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5D", "5T"], + hypnosis: ["7E", "6E", "5D", "5E", "4E", "3E"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], mimic: ["3T"], - mist: ["7L14", "6L14", "5L23", "4L23", "3L28"], - moonblast: ["7L52", "6L52"], - mudslap: ["4T", "3T"], - naturalgift: ["7L20", "6L20", "5L32", "5S2", "4M", "4L32"], - ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], - peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], - perishsong: ["7L46", "6L46", "5L70", "4L62", "3L54"], - pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], - protect: ["7M", "6M", "6S3", "5M", "4M", "3M"], + naturalgift: ["4M"], + nightmare: ["3T"], + perishsong: ["7E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M", "3L46"], psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L16", "6L16", "5L30", "4L30", "3L30"], raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7L26", "6L26", "5L54", "4L46", "3L45", "3S0"], + recover: ["7E", "6E"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], - round: ["7M", "7L17", "6M", "6L17", "5M", "5L18"], - safeguard: ["7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L41", "4M", "4L41", "3M", "3L41"], secretpower: ["6M", "4M", "3M"], - sing: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - skyattack: ["7L59", "7L1", "6T", "6L1", "5T", "5L77", "4T", "4L70", "3T", "3L59"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M", "3S1"], - steelwing: ["7M", "6M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + storedpower: ["7E", "6E", "5E"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L23", "6L23", "5L28", "5S2", "4L28", "3L31", "3S0", "3S1"], - thief: ["7M", "6M", "5M", "4M", "3M"], + synchronoise: ["7L52", "7L1", "6L1", "5L54"], + takedown: ["7L19", "6L19", "5L22", "4L22", "3L17"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7T", "5M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - uproar: ["6T", "5T", "4T"], - wonderroom: ["6T", "5T"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "7L32", "6T", "6L17", "5T", "5L17", "4T", "4L17", "3L22"], + wish: ["7E", "6E", "5E", "4E"], + wrap: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1", "3S0"], + yawn: ["7L13", "6L13", "5L25", "4L25", "3L25"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - zangoose: {learnset: { + absol: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], + assurance: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bite: ["7L16", "6L16", "5L28", "4L28", "3L21", "3S2"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S2"], + bounce: ["7T", "6T", "5T", "4T"], + brutalswing: ["7M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], - closecombat: ["7L50", "6L47", "5L53", "4L53"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E", "3T", "3E", "3S2"], - crushclaw: ["7L26", "6L22", "5L31", "4L31", "3L31", "3S2"], + counter: ["3T"], curse: ["7E", "6E", "5E", "4E", "3E"], - defensecurl: ["3T"], - detect: ["7L36", "6L33", "5L40", "4L40", "3L46"], - dig: ["6M", "5M", "4M", "3M"], - disable: ["7E", "6E", "5E", "4E"], - doubleedge: ["3T"], - doublehit: ["7E", "6E", "5E", "5D", "4E"], - doublekick: ["7E", "6E", "5E", "4E", "3E"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - embargo: ["7M", "7L33", "6M", "6L19", "5M", "5L27", "4M", "4L27"], - endeavor: ["6T", "5T", "4T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + detect: ["7L33", "6L1", "5L49", "4L49"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "7L19", "6M", "6L19", "5M", "5L33", "4M", "4L33", "3M", "3L31", "3S3"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "7L29", "6M", "6L29", "5M", "5L44", "4M", "4L44", "3L55"], - feint: ["7E", "6E", "5E"], - finalgambit: ["7E", "6E", "5E"], + falseswipe: ["7M", "6M", "5M", "4M"], + feint: ["7L1", "6L1", "5D", "5L1", "4L1"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flail: ["7E", "6E", "5E", "4E", "3E"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L8", "6L8", "5L14", "4T", "4L14", "3T", "3L13", "3S0"], - furyswipes: ["7E", "6E", "5E", "4E"], - gigadrain: ["6T", "5T", "4M", "3M"], + furycutter: ["4T", "3T"], + futuresight: ["7L53", "7L1", "6L1", "5L41", "4L41", "3L41", "3S3"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], headbutt: ["4T"], + hex: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["7L15", "6M", "6L15", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L4", "3S0", "3S1"], - lowkick: ["6T", "5T", "5D", "4T"], - megakick: ["3T"], - megapunch: ["3T"], - metalclaw: ["7E", "6E", "5E", "4E"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L4", "7L1", "6L1", "5L4", "4L4", "3L5", "3S1", "3S0"], + magiccoat: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + meanlook: ["7E", "6E", "5E", "4E"], + mefirst: ["7L41", "7E", "6L1", "6E", "5L57", "5E", "4L57", "4E"], + megahorn: ["7E", "6E", "5D", "5E", "4E"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightslash: ["7E", "6E", "5E", "4E"], + nightmare: ["3T"], + nightslash: ["7L29", "6L29", "5L52", "4L52"], payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + perishsong: ["7L57", "7L1", "7E", "6L1", "6E", "5L65", "5E", "4L65", "3L46", "3S3"], + playrough: ["7E", "6E"], protect: ["7M", "6M", "5M", "4M", "3M"], - pursuit: ["7L12", "6L12", "5L22", "4L22", "3L25"], - quickattack: ["7L5", "6L5", "5L5", "5D", "4L5", "3L7", "3S0", "3S1"], - quickguard: ["7E", "6E"], + psychocut: ["7L37", "6L37", "5L60", "4L60"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + punishment: ["7E", "6E", "5E", "4E"], + pursuit: ["7L10", "6L10", "5L20", "4L20"], + quickattack: ["7L7", "7L1", "6L1", "5L12", "4L12", "3L13"], raindance: ["7M", "6M", "5M", "4M", "3M"], - razorwind: ["7E", "6E", "5E", "4E", "3E"], - refresh: ["3S2"], + razorwind: ["7L49", "6L1", "5L17", "4L17", "3L17", "3S2"], rest: ["7M", "6M", "5M", "4M", "3M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - revenge: ["7L22", "6L22", "5L26"], - roar: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], - rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1", "3S0"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slash: ["7L19", "6L15", "5L18", "4L18", "3L19"], + shockwave: ["7T", "6T", "4M", "3M"], + slash: ["7L22", "6L22", "5L36", "4L36", "3L36", "3S3"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T", "3S2", "3S1"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + suckerpunch: ["7L45", "7E", "6L45", "6E", "5L44", "5E", "4T", "4L44", "4E"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "6T", "5D", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - swordsdance: ["7M", "7L47", "6M", "6L43", "5M", "5L9", "4M", "4L9", "3T", "3L10", "3S0", "3S1"], - taunt: ["7M", "7L43", "6M", "6L40", "5M", "5L35", "4M", "4L35", "3M", "3L37"], + swordsdance: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L26", "3S2"], + taunt: ["7M", "7L13", "6M", "6L1", "5M", "5L9", "4M", "4L9", "3M", "3L9"], thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7T"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - workup: ["7M", "5M"], - xscissor: ["7M", "7L40", "6M", "6L36", "5M", "5L48", "4M", "4L48"], + waterpulse: ["7T", "6T", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + wish: ["3S0"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], }}, - seviper: {learnset: { - aquatail: ["6T", "5T", "5D", "4T"], - assurance: ["7E", "6E", "5E", "4E"], + snorunt: {learnset: { attract: ["7M", "6M", "5M", "4M", "3M"], - belch: ["7L41", "6L43"], - bind: ["6T", "5T"], - bite: ["7L4", "6L4", "5L10", "5D", "4L10", "3L10", "3S0", "3S2"], - bodyslam: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], + avalanche: ["7E", "6E", "5E", "4M"], + bide: ["7E", "6E", "5E", "4E"], + bite: ["7L19", "6L10", "5L10", "4L10", "3L10", "3S0"], + blizzard: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L43"], + block: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + bodyslam: ["3T"], captivate: ["4M"], - coil: ["7L44", "6L46", "5L64"], confide: ["7M", "6M"], - crunch: ["7L39", "6L40", "5L28", "4L28", "3L28", "3S1"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M", "3M"], + crunch: ["7L41", "6L31", "5L31", "4L31", "3L28"], + disable: ["7E", "6E", "5E", "4E"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragontail: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7L5", "6M", "6L4", "5M", "5L4", "4M", "4L4", "3M", "3L7"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - feint: ["7L11"], - finalgambit: ["7E", "6E", "5E"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M", "4M", "3M"], + frostbreath: ["7M", "7L37", "6M", "6L37", "5M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gastroacid: ["7L29", "6T", "6L31", "5T", "5L34"], - gigadrain: ["6T", "5T", "4M", "3M"], - glare: ["7L19", "6L19", "5L25", "4L25", "3L25", "3S1"], - haze: ["7L34", "6L37", "5L43", "4L43", "3L43"], - headbutt: ["4T"], + hail: ["7M", "7L50", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L37"], + headbutt: ["7L28", "6L19", "5L19", "4T", "4L19", "3L19"], + hex: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - infestation: ["7M", "6M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lick: ["7L6", "6L7", "5L7", "4L7", "3L7", "3S0", "3S2"], + icebeam: ["7M", "6M", "5M", "4M", "3M", "3L34"], + icefang: ["7L23", "6L23", "5L28", "4L28"], + iceshard: ["7L10", "6L10", "5L37", "4L37"], + icywind: ["7T", "7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3T", "3L16", "3S0"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], mimic: ["3T"], - mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightslash: ["7L26", "7E", "6L28", "6E", "5L46", "5E", "4L46", "4E"], - payback: ["7M", "6M", "5M", "4M"], - poisonfang: ["7L21", "6L22", "5L34", "4L34", "3L34"], - poisonjab: ["7M", "7L31", "6M", "6L34", "5M", "5L52", "4M", "4L52"], - poisontail: ["7L9", "6L10", "5L16", "4L16", "3L16", "3S0", "3S1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - punishment: ["7E", "6E", "5E"], + powdersnow: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + protect: ["7M", "7L32", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L25"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["7E", "6E", "5E", "4T", "4E"], round: ["7M", "6M", "5M"], - scaryface: ["7E", "6E", "5E", "4E"], - screech: ["7L14", "6L13", "5L19", "4L19", "3L19", "3S1"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sing: ["3S0"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - sludgewave: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spitup: ["7E", "6E", "5E", "4E", "3E"], - stockpile: ["7E", "6E", "5E", "4E", "3E"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spikes: ["7E", "6E", "5E", "4E", "3E"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L1", "6M", "6L1", "5M", "5L37", "4M", "4L37", "3T", "3L37"], - swallow: ["7E", "6E", "5E", "4E", "3E"], - swift: ["4T", "3T"], - switcheroo: ["7E", "6E", "5E", "4E"], - swordsdance: ["7M", "7L36"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - thief: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + switcheroo: ["7E", "6E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - venomdrench: ["7L24", "6L25"], - venoshock: ["7M", "7L16", "6M", "6L16", "5M", "5L55"], - wrap: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S2"], - wringout: ["7L46", "7E", "6L49", "6E", "5L61", "5E", "4L55"], - xscissor: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "5D", "4M", "3M", "3S0"], + weatherball: ["7E", "6E", "5D", "5E", "4E"], }}, - lunatone: {learnset: { - acrobatics: ["7M", "6M", "5M"], - ancientpower: ["4T"], - batonpass: ["3S1"], - blizzard: ["7M", "6M", "5M", "4M"], + glalie: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L19", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L51", "4M", "4L51", "3M", "3L53"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - chargebeam: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "5D", "4L1", "3L7", "3S0"], - cosmicpower: ["7L25", "7S2", "6L25", "5L34", "4L34", "3L31"], + crunch: ["7L41", "6L31", "5L31", "4L31", "3L28"], + darkpulse: ["7M", "6M", "5T", "4M"], defensecurl: ["3T"], doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthpower: ["6T", "5T", "5D", "4T"], + doubleteam: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], endure: ["4M", "3T"], - explosion: ["7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], + freezedry: ["7L1", "6L42"], + frostbreath: ["7M", "7L37", "6M", "6L37", "5M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L41", "6L41", "5L53", "4L53", "3L43"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], gyroball: ["7M", "6M", "5M", "4M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - healblock: ["7L33", "6L33", "5L42", "4L42"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], + hail: ["7M", "7L54", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L42"], + headbutt: ["7L28", "6L19", "5L19", "4T", "4L19", "3L19"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7L5", "6L5", "5L12", "4L12", "3L19"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T"], - ironhead: ["6T", "5T", "4T"], + icebeam: ["7M", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L34"], + icefang: ["7L23", "6L23", "5L28", "4L28"], + iceshard: ["7L10", "7L1", "6L1"], + icywind: ["7T", "7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3T", "3L16"], + ironhead: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["7L49", "6T", "6L1", "5T", "5L64"], mimic: ["3T"], - moonblast: ["7L1", "7S2", "6L1"], - moonlight: ["5D"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - powergem: ["7L1", "7S2"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L29", "6M", "6L29", "5M", "5L45", "4M", "4L45", "3M", "3L37", "3S1"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "7L1", "6M", "5M"], - psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], - raindance: ["7M", "6M", "5M", "4M", "3M", "3S1"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7L32", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], - rockslide: ["7M", "7L21", "6M", "6L21", "5M", "5L25", "4M", "3T"], - rockthrow: ["7L1", "6L1", "5L9", "4L9", "3L13"], - rocktomb: ["7M", "6M", "5M", "4M", "3M", "3S1"], rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], selfdestruct: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + sheercold: ["7L61", "7L1", "6L1", "5L59", "4L59", "3L61"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "7L37", "6M", "6L37", "5M", "5L41", "4M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + spite: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - telekinesis: ["5M"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trickroom: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M", "3M"], }}, - solrock: {learnset: { - acrobatics: ["7M", "6M", "5M"], - ancientpower: ["4T"], - batonpass: ["3S1"], - bodyslam: ["3T"], + froslass: {learnset: { + allyswitch: ["7T"], + astonish: ["7L19", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + auroraveil: ["7M"], + avalanche: ["4M"], + blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L51", "4M", "4L51"], + block: ["7T", "6T", "5T", "4T"], + captivate: ["7L41", "6L31", "5L31", "4M", "4L31"], + confide: ["7M", "6M"], + confuseray: ["7L32", "6L19", "5L19", "4L19"], + destinybond: ["7L61", "7L1", "6L1", "5L59", "4L59"], + doubleteam: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + drainingkiss: ["7L23", "6L23"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "7L54", "6M", "6L40", "5M", "5L40", "4M", "4L40"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "6T", "5T", "4T"], + iceshard: ["7L10", "7L1", "6L1", "5L37", "4L37"], + icywind: ["7T", "7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["7L1", "6L22", "5L22", "4T", "4L22"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7L42", "6M", "6L42", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + wakeupslap: ["7L37", "6L28", "5L28", "4L28"], + waterpulse: ["7T", "6T", "4M"], + willowisp: ["7M", "7L28"], + }}, + spheal: {learnset: { + aquaring: ["7E", "6E", "5E", "4E"], + aquatail: ["7T", "6T", "5D", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L21", "6L21", "5L25", "4L25", "3L25", "3S0"], + bellydrum: ["7E", "6E"], + blizzard: ["7M", "7L41", "6M", "6L41", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + bodyslam: ["7L26", "6L19", "5L19", "4L19", "3T", "3L19"], + brine: ["7L17", "6L17", "4M"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - chargebeam: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + charm: ["3S0"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "5D", "4L1", "3L7", "3S0"], - cosmicpower: ["7L25", "7S2", "6L25", "5L34", "4L34", "3L31", "3S1"], - defensecurl: ["3T"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthpower: ["6T", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L9", "6L7", "5L7", "4L7", "3L7"], endure: ["4M", "3T"], - explosion: ["7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firespin: ["7L5", "6L5", "5L12", "4L12", "3L19"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flareblitz: ["7L1"], - flash: ["6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5D", "5E", "4E", "3E"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - gyroball: ["7M", "6M", "5M", "4M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - healblock: ["7L33", "6L33", "5L42", "4L42"], - heatwave: ["6T", "5T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L36", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], mimic: ["3T"], - morningsun: ["5D"], + mudslap: ["4T", "3T", "3S0"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - painsplit: ["6T", "5T", "4T"], + powdersnow: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L29", "6M", "6L29", "5M", "5L33", "4M", "3M", "3S1"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L31", "6M", "6L31", "5M", "5L37", "4M", "4L37", "3M", "3L37"], return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], - rockslide: ["7M", "7L21", "6M", "6L21", "5M", "5L45", "4M", "4L45", "3T", "3L37"], - rockthrow: ["7L1", "6L1", "5L9", "4L9", "3L13"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rollout: ["7L5", "7E", "6L5", "6E", "5E", "4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L41", "7S2", "6M", "6L41", "5M", "5L53", "4M", "4L53", "3M", "3L43"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "7L37", "7S2", "6M", "6L37", "5M", "5L41", "4M"], + sheercold: ["7L46", "6L46", "5L49", "4L49", "3L49"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7T", "7L31", "6T", "6L31", "5T", "5L37", "4T", "4L37", "3T", "3L37"], + spitup: ["7E", "6E", "5E", "4E", "3E"], + stockpile: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S1"], + superfang: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - telekinesis: ["5M"], + swallow: ["7E", "6E", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["7L49", "6T", "6L1", "5T", "5L64"], - zenheadbutt: ["6T", "5T", "5D", "4T"], - }}, - barboach: {learnset: { - amnesia: ["7L15", "6L15", "5L18", "4L18", "3L21"], - aquatail: ["7L28", "6T", "6L28", "5T", "5L35", "4T", "4L35"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], + yawn: ["7E", "6E", "5E", "4E", "3E"], + }}, + sealeo: {learnset: { + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], + aurorabeam: ["7L21", "6L21", "5L25", "4L25", "3L25"], + blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L47", "4M", "4L47", "3M", "3L47"], + bodyslam: ["7L26", "6L19", "5L19", "4L19", "3T", "3L19"], + brine: ["7L17", "6L17", "4M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "3T", "3L1"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragondance: ["7E", "6E", "5E", "4E"], - earthpower: ["7E", "6T", "6E", "5T", "5E", "4T"], - earthquake: ["7M", "7L32", "6M", "6L32", "5M", "5L39", "4M", "4L39", "3M", "3L31"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L9", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7L44", "6L44", "5L47", "4L47", "3L41"], - flail: ["7E", "6E", "5E", "4E"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L39", "6L39", "5L43", "4L43", "3L36"], - hail: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L38", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L31"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7E", "6E", "5E", "4E"], + iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - magnitude: ["7L20", "6L20", "5L26", "4L26", "3L16"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], mimic: ["3T"], - mudbomb: ["7L13", "6L13", "5L14", "4L14"], - muddywater: ["7L35", "7E", "6L35", "6E", "5E"], - mudshot: ["7E", "6E", "5E"], - mudslap: ["7L1", "6L1", "5L1", "5D", "4T", "4L1", "3T", "3L1"], - mudsport: ["7L6", "6L6", "5L6", "4L6", "3L6"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], protect: ["7M", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L25", "6M", "6L25", "5M", "5L31", "4M", "4L31", "3M", "3L26"], + rest: ["7M", "7L31", "6M", "6L31", "5M", "5L39", "4M", "4L39", "3M", "3L39"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L5", "6L5", "4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], - snore: ["7L25", "6T", "6L25", "5T", "5L31", "4T", "4L31", "3T", "3L26"], - spark: ["7E", "6E", "5E", "5D", "4E", "3E"], + sheercold: ["7L52", "6L52", "5L55", "4L55", "3L55"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7T", "7L31", "6T", "6L31", "5T", "5L39", "4T", "4L39", "3T", "3L39"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - takedown: ["7E", "6E", "5E", "4E"], - thrash: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L9", "6L9", "5L10", "4L10", "3L11"], - waterpulse: ["7L17", "6T", "6L17", "5L22", "4M", "4L22", "3M"], - watersport: ["7L6", "6L6", "5L6", "4L6", "3L6"], - whirlpool: ["7E", "6E", "5E", "4M", "4E", "3E"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], }}, - whiscash: {learnset: { - amnesia: ["7L15", "6L15", "5L18", "4L18", "3L21"], - aquatail: ["7L28", "6T", "6L28", "5T", "5L39", "4T", "4L39", "4S0"], + walrein: {learnset: { + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - belch: ["7L1"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], + aurorabeam: ["7L19", "6L19", "5L25", "4L25", "3L25"], + avalanche: ["4M"], + blizzard: ["7M", "7L49", "6M", "6L49", "5M", "5L52", "4M", "4L52", "3M", "3L50"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["7L25", "6L19", "5L19", "4L19", "3T", "3L19"], + brine: ["7L19", "6L19", "5S0", "4M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], + crunch: ["7L1", "6L1", "5L1", "4L1"], + defensecurl: ["7L1", "6L1", "3T", "3L1"], dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L34", "6M", "6L34", "5M", "5L45", "4M", "4L45", "4S0", "3M", "3L36"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L7", "6L1", "5L1", "4L1", "3L1"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7L52", "6L52", "5L57", "4L57", "3L56"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L45", "6L45", "5L51", "4L51", "3L46"], - gigaimpact: ["7M", "6M", "5M", "4M", "4S0"], - hail: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L38", "6M", "6L31", "5M", "5L31", "5S0", "4M", "4L31", "3M", "3L31"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - magnitude: ["7L20", "6L20", "5L26", "4L26", "3L16"], + iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], + icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], + icefang: ["7L1", "6L44", "5L44", "4L44"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], mimic: ["3T"], - mudbomb: ["7L13", "6L13", "5L14", "4L14"], - muddywater: ["7L39", "6L39"], - mudslap: ["7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], - mudsport: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], protect: ["7M", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3M", "3L26"], + rest: ["7M", "7L31", "6M", "6L31", "5M", "5L39", "4M", "4L39", "3M", "3L39"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L7", "6L7", "4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], + sheercold: ["7L60", "6L60", "5L65", "5S0", "4L65", "3L61"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["7L25", "6T", "6L25", "5T", "5L33", "4T", "4L33", "3T", "3L26"], - stoneedge: ["7M", "6M", "5M", "4M"], + snore: ["7T", "7L31", "6T", "6L31", "5T", "5L39", "4T", "4L39", "3T", "3L39"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thrash: ["7L1"], - tickle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L9", "7L1", "6L1", "5L10", "4L10", "3L11"], - waterpulse: ["7L17", "6T", "6L17", "5L22", "4M", "4L22", "3M"], - watersport: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "6T", "4M", "3M"], whirlpool: ["4M"], - zenheadbutt: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "4S0"], }}, - corphish: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], - aquajet: ["7E", "6E"], + clamperl: {learnset: { + aquaring: ["7E", "6E", "5D", "5E", "4E"], attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - bubblebeam: ["7L14", "6L14", "5L20", "4L20", "3L19"], - captivate: ["4M"], - chipaway: ["7E", "6E", "5E"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["5D", "4M"], + clamp: ["7L1", "6L1", "5L1", "4L1", "3L1"], confide: ["7M", "6M"], - counter: ["3T"], - crabhammer: ["7L43", "6L38", "5L38", "4L38", "3L34"], - crunch: ["7L39", "6L39", "5L47", "4L47", "3L43"], - cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["7E", "6E", "5E", "3T"], - doublehit: ["7L20", "6L20"], + confuseray: ["7E", "6E", "5E", "4E", "3E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragondance: ["7E", "6E", "5E", "4E"], - endeavor: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], - endure: ["4M", "3T"], + endure: ["7E", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - guillotine: ["7L48", "6L48", "5L53", "4L53", "3L44"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L5", "6L5", "5L7", "5D", "4L7", "3L7"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["7L23", "7E", "6T", "6L23", "6E", "5T", "5L26", "5E", "4T", "4L26", "4E", "3L25"], - leer: ["7L10", "6L10", "5L13", "4L13", "3L13"], - metalclaw: ["7E", "6E", "5E", "5D", "4E"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], mimic: ["3T"], - mudslap: ["4T", "3T"], + muddywater: ["7E", "6E", "5E", "4E"], mudsport: ["7E", "6E", "5E", "4E", "3E"], naturalgift: ["4M"], - nightslash: ["7L26", "6L26", "5L35", "4L35"], - payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "7L17", "6M", "6L17", "5M", "5L23", "4M", "4L23", "3M", "3L22"], + protect: ["7M", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - razorshell: ["7L31", "6L31"], + refresh: ["7E", "6E", "5E", "4E", "3E"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], + shellsmash: ["7L50", "6L50", "5L51"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - switcheroo: ["7E", "6E"], - swordsdance: ["7M", "7L37", "6M", "6L37", "5M", "5L44", "4M", "4L44", "3T", "3L37"], - taunt: ["7M", "7L34", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L31"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trumpcard: ["7E", "6E", "5E"], - vicegrip: ["7L7", "6L7", "5L10", "4L10", "3L10"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - watersport: ["3S0"], - whirlpool: ["4M"], - xscissor: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7T", "7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7L1", "6L1", "5D", "5L1", "4M", "4L1", "3L1"], }}, - crawdaunt: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["4T"], + huntail: {learnset: { + aquatail: ["7T", "7L39", "6T", "6L39", "5T", "5L46", "4T", "4L46"], attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], + batonpass: ["7L29", "6L29", "5L33", "4L33", "3L43"], + bind: ["7T", "6T", "5T"], + bite: ["7L1", "6L1", "5L6", "4L6", "3L8"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], - bubblebeam: ["7L14", "6L14", "5L20", "4L20", "3L19"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["7L19", "6L19", "5L28", "4M", "4L28"], captivate: ["4M"], + coil: ["7L45", "6L45"], confide: ["7M", "6M"], - counter: ["3T"], - crabhammer: ["7L48", "6L44", "5L44", "4L44", "3L38", "3S0", "3S1"], - crunch: ["7L43", "6L43", "5L57", "4L57", "3L51"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M", "3M"], - dive: ["6M", "5M", "4T", "3M"], + crunch: ["7L34", "6L34", "5L42", "4L42", "3L36"], + dive: ["7L26", "6M", "6L26", "5M", "5L37", "4T", "4L37", "3M"], doubleedge: ["3T"], - doublehit: ["7L20", "6L20"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endeavor: ["6T", "5T", "4T"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], + feintattack: ["7L11", "6L11"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - guillotine: ["7L54", "6L1", "5L65", "4L65", "3L52", "3S0"], hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], + hydropump: ["7L50", "6L50", "5L51", "4L51", "3L50"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["7L23", "6T", "6L23", "5T", "5L26", "4T", "4L26", "3L25", "3S1"], - leer: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + icefang: ["7L16", "6L16", "5L24", "4L24"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - nightslash: ["7L26", "6L26", "5L39", "4L39"], - payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "7L17", "6M", "6L17", "5M", "5L23", "4M", "4L23", "3M", "3L22"], + protect: ["7M", "6M", "5M", "4M", "3M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - razorshell: ["7L32", "6L32"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], + scaryface: ["7L9", "6L9", "5L19", "4L19", "3L29"], + screech: ["7L5", "6L5", "5L10", "4L10", "3L15"], secretpower: ["6M", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - sludgewave: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M", "3M"], + snatch: ["7T", "6T", "5T", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["6T", "5T", "4T"], + suckerpunch: ["7L23", "6L23", "4T"], + superfang: ["7T", "6T", "5T", "4T"], surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L1", "6L30", "5L30", "4T", "4L30", "3T"], - swordsdance: ["7M", "7L40", "6M", "6L40", "5M", "5L52", "4M", "4L52", "3T", "3L43", "3S0", "3S1"], - taunt: ["7M", "7L36", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L33", "3S0", "3S1"], + swift: ["4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - vicegrip: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - xscissor: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "7L14", "6T", "6L14", "5L15", "4M", "4L15", "3M", "3L22"], + whirlpool: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1"], }}, - baltoy: {learnset: { - allyswitch: ["5M"], - ancientpower: ["7L19", "6L19", "5L26", "4T", "4L25", "3L25"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + gorebyss: {learnset: { + agility: ["7L9", "6L9", "5L10", "4L10", "3L15"], + amnesia: ["7L16", "6L16", "5L19", "4L19", "3L29"], + aquaring: ["7L19", "6L19", "5L24", "4L24"], + aquatail: ["7T", "7L39", "6T", "6L39", "5T", "5L46", "4T", "4L46"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L29", "6L29", "5L33", "4L33", "3L43"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["4M"], + captivate: ["7L23", "6L23", "5L28", "4M", "4L28"], + coil: ["7L45", "6L45"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], - cosmicpower: ["7L22", "6L22", "5L37", "4L45", "3L37"], - dazzlinggleam: ["7M", "6M"], - dig: ["6M", "5M", "4M", "3M"], + confusion: ["7L1", "6L1", "5L6", "4L6", "3L8"], + dive: ["7L26", "6M", "6L26", "5M", "5L37", "4T", "4L37", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - drillrun: ["6T", "5T"], - earthpower: ["7L37", "6T", "6L37", "5T", "5L51", "4T", "4L53"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + drainingkiss: ["7L11", "6L11"], endure: ["4M", "3T"], - explosion: ["7M", "7L46", "6M", "6L46", "5M", "5L60", "4M", "4L71", "3T", "3L45"], - extrasensory: ["7L31", "6L28", "5L43"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "5D", "4T"], - guardsplit: ["7L34", "6L34", "5L48"], - gyroball: ["7M", "6M", "5M", "4M"], - harden: ["7L1", "6L1", "5L4", "4L3", "3L3"], - headbutt: ["4T"], - healblock: ["7L10", "6L10", "5L54", "4L61"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L50", "6L50", "5L51", "4L51", "3L50"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - imprison: ["7L43", "6L43"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], mimic: ["3T"], - mudslap: ["7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7", "3S0"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - powersplit: ["7L34", "6L34", "5L48"], - powertrick: ["7L25", "6L17", "5L31", "4L31"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L16", "6L13", "5L15", "4L11", "3L11", "3S0"], - psychic: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], + psychic: ["7M", "7L34", "6M", "6L34", "5M", "5L42", "4M", "4L42", "3M", "3L36"], + psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7L4", "6L4", "5L7", "5D", "4L5", "3L5"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocktomb: ["7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15", "3S0"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L34", "4M", "4L37", "3M", "3L31"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L28", "6L25", "5L21", "4L19", "3T", "3L19"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T", "3T"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - telekinesis: ["5M"], + swift: ["4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "5D", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "7L14", "6T", "6L14", "5L15", "4M", "4L15", "3M", "3L22"], + watersport: ["7L5", "6L5"], + whirlpool: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1"], }}, - claydol: {learnset: { - allyswitch: ["5M"], - ancientpower: ["7L19", "6L19", "5L26", "4T", "4L25", "3L25"], + relicanth: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7L21", "6L1", "5L43", "4T", "4L43", "3L43"], + aquatail: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], - cosmicpower: ["7L22", "6L22", "5L47", "4L51", "3L42"], - dazzlinggleam: ["7M", "6M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], + dive: ["7L26", "6M", "6L26", "5M", "5L57", "4T", "4L57", "3M"], + doubleedge: ["7L50", "6L50", "5L50", "4L50", "3T", "3L57"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - drillrun: ["6T", "5T"], - earthpower: ["7L40", "6T", "6L40", "5T", "5L59", "4T", "4L62"], + earthpower: ["7T", "6T", "5D", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], - explosion: ["7M", "7L58", "6M", "6L58", "5M", "5L72", "4M", "4L86", "3T", "3L55"], - extrasensory: ["7L31", "6L28", "5L39"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + flail: ["7L1"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - guardsplit: ["7L34", "6L34", "5L54"], - gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], headbutt: ["4T"], - healblock: ["7L10", "6L10", "5L64", "4L73"], + headsmash: ["7L56", "7L1", "6L1", "5L78", "4L78"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L36"], + hydropump: ["7L46", "6L1", "5L71", "4L71", "3L64"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - imprison: ["7L52", "6L52"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + magnitude: ["7E", "6E", "5E", "4E", "3E"], mimic: ["3T"], - mudslap: ["7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7"], + muddywater: ["7E", "6E", "5E", "4E"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + mudsport: ["7L6", "7L1", "6L1", "5L36", "4L36", "3L36"], naturalgift: ["4M"], - powersplit: ["7L34", "6L34", "5L54"], - powertrick: ["7L25", "6L17", "5L31", "4L31"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L16", "6L13", "5L15", "4L11", "3L11"], - psychic: ["7M", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rapidspin: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L41", "6M", "6L41", "5M", "5L64", "4M", "4L64", "3M", "3L50"], return: ["7M", "6M", "5M", "4M", "3M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "7L46", "6M", "6L46", "5M", "5L34", "4M", "4L40", "3M", "3L31"], - secretpower: ["6M", "4M", "3M"], - selfdestruct: ["7L28", "6L25", "5L21", "4L19", "3T", "3L19"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - telekinesis: ["5M"], - teleport: ["7L1", "6L1", "5L1", "4L1", "3L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], - }}, - lileep: {learnset: { - acid: ["7L5", "6L5", "5L8", "5S0", "5D", "4L8", "3L15"], - amnesia: ["7L36", "6L29", "5L29", "4L29", "3L36"], - ancientpower: ["7L17", "6L17", "5L43", "4T", "4L43", "3L43"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], - bind: ["6T", "5T"], - bodyslam: ["3T"], - brine: ["7L21", "6L21"], - bulletseed: ["4M", "3M"], - captivate: ["4M"], - confide: ["7M", "6M"], - confuseray: ["7L13", "6L13", "5L22", "4L22", "3L29"], - constrict: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L8"], - curse: ["7E", "6E", "5E", "4E"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endure: ["7E", "6E", "5E", "4M", "3T"], - energyball: ["7M", "7L41", "6M", "6L41", "5M", "5L50", "4M", "4L50"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L31", "6T", "6L31", "5T", "5L36", "4T", "4L36"], - gigadrain: ["7L26", "6T", "6L26", "5T", "5D", "4M", "3M"], - grassknot: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - infestation: ["7M", "6M"], - ingrain: ["7L9", "6L9", "5L15", "4L15", "3L22"], - megadrain: ["7E", "6E", "5E"], - mimic: ["3T"], - mirrorcoat: ["7E", "6E", "5E", "5D", "4E", "3E"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], - recover: ["7E", "6E", "5E", "5S0", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "5S0", "4M", "4E", "3T", "3E"], - rocktomb: ["7M", "6M", "5M", "4M"], + rocktomb: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L15"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + skullbash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5D", "5T", "5E", "4M", "4E", "3T", "3E"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spitup: ["7L46", "6L46", "5L57", "4L57", "3L50"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], - stockpile: ["7L46", "6L46", "5L57", "4L57", "3L50"], - stringshot: ["4T"], + snore: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7L46", "6L46", "5L57", "4L57", "3L50"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - tickle: ["7E", "6E", "5E", "4E"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L31", "6L29", "5L29", "4L29", "3L29"], toxic: ["7M", "6M", "5M", "4M", "3M"], - worryseed: ["6T", "5T", "4T"], - wringout: ["7L52", "7E", "6L52", "6E", "5L64", "5E", "4L64", "4E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L10", "7L1", "6L1", "5D", "5L8", "4L8", "3L8"], + waterpulse: ["7T", "6T", "4M", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], + yawn: ["7L35", "6L22", "5L22", "4L22", "3L22"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - cradily: {learnset: { - acid: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], - amnesia: ["7L36", "6L29", "5L29", "4L29", "3L36"], - ancientpower: ["7L17", "6L17", "5L36", "4T", "4L36", "3L48"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bind: ["6T", "5T"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - brine: ["7L21", "6L21"], - bulldoze: ["7M", "6M", "5M"], - bulletseed: ["4M", "3M"], - captivate: ["4M"], + luvdisc: {learnset: { + agility: ["7L7", "6L7", "5L9", "4L9", "3L16"], + aquajet: ["7E", "6E", "5E", "4E"], + aquaring: ["7L40", "7E", "6L40", "6E", "5L46", "5E", "4L37", "4E"], + attract: ["7M", "7L20", "6M", "6L22", "5M", "5L27", "4M", "4L22", "3M", "3L28"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["7L37", "7E", "6L46", "6E", "5L51", "5E", "4M", "4L40", "4E"], + charm: ["7L1", "6L1", "5D", "5L4", "4L4", "3L4"], confide: ["7M", "6M"], - confuseray: ["7L13", "6L13", "5L22", "4L22", "3L29"], - constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + drainingkiss: ["7L9", "6L9"], endure: ["4M", "3T"], - energyball: ["7M", "7L44", "6M", "6L44", "5M", "5L56", "4M", "4L56"], + entrainment: ["7E", "6E"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M"], + flail: ["7L26", "6L27", "5L31", "4L46", "3L40"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gastroacid: ["7L31", "6T", "6L31", "5T", "5L46", "4T", "4L46"], - gigadrain: ["7L26", "6T", "6L26", "5T", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + healpulse: ["7E", "6E", "5E"], + heartstamp: ["7L22"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - infestation: ["7M", "6M"], - ingrain: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + hydropump: ["7L46", "6L40", "5L40"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["7T", "6T", "5D", "5T", "4T", "3T"], + liquidation: ["7T"], + luckychant: ["7L13", "6L14", "5L17", "4L17"], mimic: ["3T"], - mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5D", "5E", "4E", "3E"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["3T"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], + safeguard: ["7M", "7L49", "6M", "6L55", "5M", "5L55", "4M", "4L51", "3M", "3L48"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - sludgewave: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spitup: ["7L52", "6L1", "5L66", "4L66", "3L60"], - stealthrock: ["6T", "5T", "4M"], - stockpile: ["7L52", "6L1", "5L66", "4L66", "3L60"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - stringshot: ["4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + soak: ["7L42"], + splash: ["7E", "6E", "5E", "4E", "3E"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7L52", "6L1", "5L66", "4L66", "3L60"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], + sweetkiss: ["7L31", "6L31", "5L37", "4L27", "3L36"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L34", "6L14", "5L14", "4L14", "3L24"], toxic: ["7M", "6M", "5M", "4M", "3M"], - worryseed: ["6T", "5T", "4T"], - wringout: ["7L61", "7L1", "6L1", "5L76", "4L76"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "6L4", "5L7", "4L7", "3L12"], + waterpulse: ["7T", "7L17", "6T", "6L17", "5L22", "4M", "4L31", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], }}, - anorith: {learnset: { + bagon: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7L21", "6L21", "5L31", "4T", "4L31", "3L37"], - aquajet: ["7E", "6E"], attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "6L5", "5D", "5L5", "4L5", "3L5", "3S1", "3S0"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brine: ["7L29", "6L29"], - bugbite: ["7L25", "6T", "6L25", "5T"], captivate: ["4M"], confide: ["7M", "6M"], - crosspoison: ["7E", "6E", "5E", "5S0", "5D", "4E"], - crushclaw: ["7L39", "6L39", "5L55", "4L55"], - curse: ["7E", "6E", "5E", "4E"], + crunch: ["7L25", "6L25", "5L46", "4L46", "3L41"], cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], + defensecurl: ["7E", "6E", "5E"], + doubleedge: ["7L49", "6L49", "5L55", "4L55", "3T", "3L53"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - endure: ["4M", "3T"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L13", "6L13", "5L31", "4L31", "3L33"], + dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L50", "4M", "4L50", "3M", "3L49"], + dragondance: ["7E", "6E", "5D", "5E", "4E", "3E"], + dragonpulse: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + dragonrage: ["7E", "6E", "5E", "4E", "3E"], + dragonrush: ["7E", "6E", "5E", "4E"], + ember: ["7L4", "6L4", "5L25", "4L25", "3L25"], + endure: ["7E", "6E", "5E", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + flamethrower: ["7M", "7L44", "6M", "6L44", "5M", "4M", "3M"], + focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L10", "6L10", "5L37", "4T", "4L37", "3T", "3L43"], - harden: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L7"], - headbutt: ["4T"], + furycutter: ["4T", "3T"], + headbutt: ["7L17", "6L16", "5L16", "4T", "4L16", "3L17"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - irondefense: ["7E", "6T", "6E", "5T", "5E", "4T"], - knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - metalclaw: ["7L17", "6L17", "5L19", "4L19", "3L25"], + hydropump: ["7E", "6E", "5E", "4E", "3E"], + hypervoice: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + irondefense: ["3S1"], + leer: ["7L7", "6L7", "5L10", "4L10", "3L9"], mimic: ["3T"], mudslap: ["4T", "3T"], - mudsport: ["7L4", "6L4", "5L7", "5S0", "4L7", "3L13"], naturalgift: ["4M"], - protect: ["7M", "7L49", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L31"], - rapidspin: ["7E", "6E", "5E", "4E", "3E"], + outrage: ["7T", "6T", "5D", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L1", "6L1", "6S3", "5L1", "5S2", "4L1", "3L1", "3S1", "3S0"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7L55", "6L49", "5L49", "4L49", "3L55"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E", "4E"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scratch: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - screech: ["7E", "6E", "5E", "4E"], + scaryface: ["7L39", "6L39", "5L40", "4L40", "3L37"], secretpower: ["6M", "4M", "3M"], - slash: ["7L34", "6L34", "5L43", "4L43", "3L49"], + shadowclaw: ["7M", "6M", "5M", "4M", "4E"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "7L13", "6M", "6L13", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "5D", "4M"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + thrash: ["7E", "6E", "6S3", "5E", "4E", "3E"], toxic: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L7", "6L7", "5L13", "5S0", "4L13", "3L19"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L61", "4M", "4L61"], + twister: ["7E", "6E", "5E", "4T", "4E", "3E"], + wish: ["3S0"], + zenheadbutt: ["7T", "7L34", "6T", "6L34", "5T", "5L35", "4T", "4L35"], }}, - armaldo: {learnset: { + shelgon: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7L21", "6L21", "5L31", "4T", "4L31", "3L37"], - aquatail: ["6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], + bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brine: ["7L29", "6L29"], - brutalswing: ["7M"], - bugbite: ["6T", "5T"], - bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - crushclaw: ["7L39", "6L1", "5L67", "4L67"], + crunch: ["7L25", "6L25", "5L50", "4L50", "3L56"], cut: ["6M", "5M", "4M", "3M"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], + defensecurl: ["3T"], + doubleedge: ["7L56", "6L56", "5L61", "4L61", "3T", "3L78"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L13", "6L13", "5L32", "4L32", "3L38"], + dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L55", "4M", "4L55", "3M", "3L69"], + dragonpulse: ["7T", "6T", "5T", "4M"], + ember: ["7L4", "7L1", "6L1", "5L25", "4L25", "3L25"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "4M", "3M"], + focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["7L10", "6L10", "5L37", "4T", "4L37", "3T", "3L46"], - gigaimpact: ["7M", "6M", "5M", "4M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], + furycutter: ["4T", "3T"], + headbutt: ["7L17", "6L1", "5L1", "4T", "4L1", "3L1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - irondefense: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - metalclaw: ["7L17", "6L17", "5L19", "4L19", "3L25"], + hypervoice: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "6T", "5T", "4T"], + leer: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], mudslap: ["4T", "3T"], - mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], naturalgift: ["4M"], - protect: ["7M", "7L53", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L31"], + outrage: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7L1", "6M", "6L30", "5M", "5L30", "4M", "4L30", "3M", "3L30"], + rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockblast: ["7L61", "6L55", "5L55", "4L55", "3L64"], - rockpolish: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + scaryface: ["7L42", "6L42", "5L43", "4L43", "3L47"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - slash: ["7L34", "7L25", "6L25", "5L46", "4L46", "3L55"], + shadowclaw: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "7L13", "6M", "6L13", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - xscissor: ["7M", "7L46", "6M", "6L46", "5M", "5L73", "4M", "4L73"], + twister: ["4T"], + zenheadbutt: ["7T", "7L35", "6T", "6L35", "5T", "5L37", "4T", "4L37"], }}, - feebas: {learnset: { + salamence: {learnset: { + aerialace: ["7M", "6M", "5M", "5S3", "4M", "3M", "3S1"], + aircutter: ["4T"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - brine: ["7E", "6E", "5E"], - captivate: ["7E", "6E", "5E", "5D", "4M"], + bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "4E", "3E"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], + crunch: ["7L25", "6L25", "5L53", "4L53", "3L61"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + defog: ["7T", "4M"], + doubleedge: ["7L63", "6L1", "5L70", "4L70", "3T", "3L93"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonbreath: ["7E", "6E", "5E", "4E", "3E"], - dragonpulse: ["7E", "6T", "6E", "5T", "5E"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L13", "6L13", "5L32", "4L32", "3L38", "3S0"], + dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L61", "5S3", "4M", "4L61", "4S2", "3M", "3L79", "3S1"], + dragondance: ["5S3", "3S1"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "7L1", "6M", "6L1", "5M", "5L80"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L4", "7L1", "6L1", "5L25", "4L25", "3L25"], endure: ["4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L30", "6L30", "5L30", "4L30", "3L30"], + fireblast: ["7M", "6M", "5M", "4M", "4S2", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "4M", "3M"], + fly: ["7M", "7L1", "6M", "6L50", "5M", "5L50", "4M", "4L50", "3M", "3L50", "3S0"], + focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], frustration: ["7M", "6M", "5M", "4M", "3M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - haze: ["7E", "6E", "5E", "4E"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7L17", "6L1", "5L1", "4T", "4L1", "3L1"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypnosis: ["7E", "6E", "5E", "4E", "3E"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - lightscreen: ["7M", "6M", "5M", "4E", "3E"], + honeclaws: ["6M", "5M"], + hydropump: ["4S2"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + laserfocus: ["7T"], + leer: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], mimic: ["3T"], - mirrorcoat: ["7E", "6E", "5E", "5D", "4E", "4S0", "3E"], - mist: ["7E", "6E", "5E", "4E"], - mudsport: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], + ominouswind: ["4T"], + outrage: ["7T", "6T", "5T", "5S3", "4T"], + protect: ["7M", "7L1", "6M", "6L30", "5M", "5L30", "4M", "4L30", "3M", "3L30", "3S0"], + rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S1"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + scaryface: ["7L42", "6L42", "5L43", "4L43", "3L47", "3S0"], secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - splash: ["7L1", "6L1", "5L1", "5D", "4L1", "4S0", "3L1"], + snore: ["7T", "6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M", "4S2"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tackle: ["7L15", "6L15", "5L15", "4L15", "3L15"], - tickle: ["7E", "6E", "5E", "4E"], + tailwind: ["7T", "6T", "5T", "4T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + twister: ["4T"], + zenheadbutt: ["7T", "7L35", "6T", "6L35", "5T", "5L37", "4T", "4L37"], }}, - milotic: {learnset: { - aquaring: ["7L17", "6L21", "5L49", "4L49"], - aquatail: ["7L31", "6T", "6L29", "5T", "5L29", "4T", "4L29"], - attract: ["7M", "7L34", "6M", "6L37", "5M", "5L41", "4M", "4L41", "3M", "3L45"], - avalanche: ["4M"], - bind: ["6T", "5T"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + beldum: {learnset: { + headbutt: ["4T"], + holdback: ["6S0"], + irondefense: ["7T", "6T", "6S0", "5T", "4T"], + ironhead: ["7T", "6T", "6S0", "5D", "5T", "4T"], + takedown: ["7L1", "6L1", "5D", "5L1", "4L1", "3L1"], + zenheadbutt: ["7T", "6T", "6S0", "5D", "5T", "4T"], + }}, + metang: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L41", "6L38", "5L44", "4L44", "3L56"], + allyswitch: ["7T"], bodyslam: ["3T"], - brutalswing: ["7M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], bulldoze: ["7M", "6M", "5M"], - captivate: ["7L21", "6L24", "5L25", "4M", "4L25"], - coil: ["7L41", "6L44"], + bulletpunch: ["7L26", "6L26", "5L32", "4L32"], confide: ["7M", "6M"], - disarmingvoice: ["7L11", "6L11"], - dive: ["6M", "5M", "4T", "3M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "7L24", "6M", "6L27", "5M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L44", "6L37", "5L37", "5S3", "4L37", "4S1", "4S2", "3L40"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "5S3", "5S4", "4M", "4S1", "3M"], - icywind: ["6T", "5T", "4T", "4S2", "3T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L50", "6M", "6L50", "5M", "5L56", "4M", "4L56", "3M", "3L62"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L47", "6T", "6L47", "5T", "5L40", "4T", "4L40", "3L44"], + ironhead: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magnetrise: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + metalclaw: ["7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], + meteormash: ["7L44", "6L44", "5L48", "4L48", "3L50"], mimic: ["3T"], - mirrorcoat: ["5S3"], + miracleeye: ["7L29", "6L26", "5L26"], mudslap: ["4T", "3T"], naturalgift: ["4M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L36", "4M", "4L36", "3M", "3L38"], psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "7L47", "6M", "6L33", "5M", "5L33", "4M", "4L33", "4S1", "4S2", "3M", "3L35", "3S0"], - recover: ["7L27", "6L21", "5L21", "5S3", "5S4", "4L21", "4S1", "4S2", "3L30", "3S0"], - refresh: ["7L7", "7L1", "6L7", "5L9", "4L9", "3L15"], + psyshock: ["7M", "6M", "5M"], + pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L37", "6M", "6L41", "5M", "5L45", "4M", "4L45", "3M", "3L50"], - scald: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L35", "6L35", "5L24", "4L24", "3L26"], secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "5S4", "4M", "3M"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - toxic: ["7M", "6M", "5M", "5S4", "4M", "3M"], - twister: ["7L14", "6L14", "5L17", "4T", "4L17", "3L25", "3S0"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["7L1", "6T", "6L13", "5L13", "4M", "4L13", "3M", "3L20", "3S0"], - watersport: ["7L4", "7L1", "6L4", "5L5", "4L5", "3L10"], - whirlpool: ["4M"], - wrap: ["7L1", "6L1", "5L1", "4L1", "3L5"], + takedown: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + telekinesis: ["7T", "5M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + zenheadbutt: ["7T", "7L32", "6T", "6L29", "5T", "5L52", "4T", "4L52"], }}, - castform: {learnset: { - amnesia: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["4M"], - blizzard: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], + metagross: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L41", "6L38", "5L44", "5S4", "4L44", "3L66"], + allyswitch: ["7T"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], - captivate: ["4M"], - clearsmog: ["7E", "6E", "5E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7L26", "7S7", "6L26", "5L32", "5S2", "5S1", "4L32", "4S0"], confide: ["7M", "6M"], - cosmicpower: ["7E", "6E"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + cut: ["6M", "5M", "4M", "3M"], defensecurl: ["3T"], - disable: ["7E", "6E", "5E", "4E"], - doubleedge: ["3T"], + doubleedge: ["5S5", "5S4", "3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - ember: ["7L10", "6L10", "5L10", "5D", "4L10", "3L10"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "5S6", "5S3", "5S1", "4M", "3M"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "6M", "5M", "4M", "3T"], facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], 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"], - hex: ["7E", "6E", "5E"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + hammerarm: ["7L1", "6L45", "5L45", "5S5", "5S4", "5S2", "5S1", "4L45", "4S0"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hurricane: ["7L45", "6L45"], - hydropump: ["7L35", "6L35", "5L50"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - lastresort: ["6T", "5T", "4T"], - luckychant: ["7E", "6E", "5E", "4E"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L60", "6M", "6L60", "5M", "5L71", "5S6", "4M", "4L71", "3M", "3L77"], + icepunch: ["7T", "7S7", "6T", "5T", "5S2", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L52", "6T", "6L52", "5T", "5L40", "5S4", "4T", "4L40", "3L44"], + ironhead: ["7T", "7S7", "6T", "5T", "4T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magnetrise: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + metalclaw: ["7L1", "6L1", "5L1", "4L1", "3L1"], + meteormash: ["7L44", "6L44", "5L53", "5S6", "5S5", "5S3", "5S1", "4L53", "4S0", "3L55"], mimic: ["3T"], + miracleeye: ["7L29", "6L26", "5L26"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - ominouswind: ["7E", "6E", "5E", "5D", "4T", "4E"], - 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"], - reflecttype: ["7E", "6E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "5S3", "4M", "3M"], + psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L36", "5S6", "5S5", "4M", "4L36", "3M", "3L38"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], + scaryface: ["7L35", "6L35", "5L24", "4L24", "3L1"], secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T", "7S7"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "7L20", "6M", "6L20", "5M", "5L30", "4M", "4L20", "3M", "3L20"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - tailwind: ["6T", "5T", "4T"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7L1", "6L1", "5L1", "4L1", "3L1"], + telekinesis: ["7T", "5M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L10", "6L10", "5L10", "4L10", "3L10"], - waterpulse: ["6T", "5D", "4M", "3M"], - weatherball: ["7L25", "6L25", "5L40", "4L30", "3L30"], - workup: ["7M", "5M"], + trick: ["7T", "6T", "5T", "4T"], + zenheadbutt: ["7T", "7L32", "6T", "6L29", "5T", "5L62", "5S3", "5S2", "4T", "4L62", "4S0"], }}, - kecleon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - afteryou: ["6T", "5T"], - ancientpower: ["7L21", "6L1", "5L55", "4T", "4L55", "3L49"], - aquatail: ["6T", "5T", "4T"], - astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bind: ["7L4", "6T", "6L4", "5T", "5L4", "4L4", "3L4"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], + regirock: {learnset: { + ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S1", "3S0"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], brickbreak: ["7M", "6M", "5M", "4M", "3M"], - camouflage: ["7L30", "7E", "6L30", "6E"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "6S4", "5M"], + chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], confide: ["7M", "6M"], counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], + curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S1", "3S0"], defensecurl: ["3T"], dig: ["6M", "5M", "4M", "3M"], - disable: ["7E", "6E", "5E", "4E", "3E"], - dizzypunch: ["7E", "6E", "5E", "4E"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], + drainpunch: ["7T", "6T", "5T", "4M"], dynamicpunch: ["3T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], + explosion: ["7M", "7L1", "6M", "6L1", "6S5", "5M", "5L1", "4M", "4L1", "3T", "3L1"], facade: ["7M", "6M", "5M", "4M", "3M"], - fakeout: ["7E", "6E", "5E", "4E"], - feint: ["7L10", "6L10", "5L14", "4L14"], - feintattack: ["7L16", "6L7", "5L7", "5D", "4L7", "3L7"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foulplay: ["7E", "6T", "6E", "5T", "5E"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - furyswipes: ["7L13", "6L10", "5L10", "4L10", "3L12"], - grassknot: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + hammerarm: ["7L49", "7S6", "6L1", "6S5", "5L81", "4L81"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - lick: ["7L1", "6L1", "5L1", "4L1", "3L1"], - lowkick: ["6T", "5T", "4T"], - magiccoat: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], + icepunch: ["7T", "6T", "6S5", "5T", "4T", "3T"], + irondefense: ["7T", "7L37", "6T", "6L37", "6S4", "5T", "5L41", "5S3", "4L41", "3L41"], + ironhead: ["7T", "6T", "5T", "4T"], + lockon: ["7L55", "7S6", "6L1", "5L57", "5S3", "4L57", "3L57"], megakick: ["3T"], megapunch: ["3T"], - metronome: ["3T"], mimic: ["3T"], mudslap: ["4T", "3T"], - nastyplot: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psybeam: ["7L18", "6L18", "5L18", "4L15", "3L17"], psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7E", "6E", "5E", "4E"], - recycle: ["6T", "5T", "4M"], - reflecttype: ["5D"], rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L7", "7L1", "6L1", "5L9", "4L9", "4S2", "3L9", "3S0"], rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], - screech: ["7L38", "6L32", "5L32", "4L32", "3L24"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "7L33", "6M", "6L33", "5M", "5L49", "4M", "4L49"], - shadowsneak: ["7L7", "6L7", "5L22", "4L20"], - shockwave: ["6T", "4M", "3M"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], - slash: ["7L25", "6L25", "5L27", "4L25", "3L31"], + selfdestruct: ["3T"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stealthrock: ["6T", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L43", "7S6", "6M", "6L43", "6S5", "5M", "5L73", "4M", "4L73"], strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "7L42", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3T", "3L40"], - suckerpunch: ["7L46", "6L43", "5L43", "4T", "4L43"], + substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S1", "3S0"], swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - synchronoise: ["7L50", "6L1", "5L58"], - tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], - thief: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - trickroom: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], - wonderroom: ["6T", "5T"], - workup: ["7M", "5M"], + zapcannon: ["7L55", "7S6", "6L1", "5L65", "5S3", "4L65", "3L49"], }}, - shuppet: {learnset: { - astonish: ["7E", "6E", "5E", "4E", "3E"], - attract: ["7M", "6M", "5M", "4M", "3M"], + regice: {learnset: { + amnesia: ["7L37", "6L37", "6S5", "6S4", "5L41", "5S3", "4L41", "3L41"], + ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S1", "3S0"], + auroraveil: ["7M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "6S4", "5M"], + chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "4E"], - curse: ["7L26", "6L19", "5L13", "4L13", "3L20"], - darkpulse: ["7M", "6M", "5T", "4M"], - dazzlinggleam: ["7M", "6M"], - destinybond: ["7E", "6E", "5E", "5D", "4E", "3E"], - disable: ["7E", "6E", "5E", "4E", "3E"], + counter: ["3T"], + curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S1", "3S0"], + defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L43", "4M", "4L38"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], + explosion: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L28", "4L28", "3L37", "3S0"], - flash: ["6M", "5M", "4M", "3M"], - foresight: ["7E", "6E", "5E", "4E", "3E"], - foulplay: ["6T", "5T"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - grudge: ["7L46", "6L46", "5L50", "4L46", "3L56"], - gunkshot: ["7E", "6E", "5E"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + hail: ["7M", "6M", "6S5", "5M", "4M", "3M"], + hammerarm: ["7L49", "7S6", "6L1", "5L81", "4L81"], headbutt: ["4T"], - hex: ["7L22", "6L22", "5L31"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - imprison: ["7E", "6E", "5E", "4E", "3E"], - knockoff: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], + icebeam: ["7M", "7L43", "7S6", "6M", "6L43", "6S5", "5M", "5L73", "4M", "4L73", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "7L7", "7L1", "6T", "6L1", "5T", "5L9", "4T", "4L9", "4S2", "3T", "3L9", "3S0"], + ironhead: ["7T", "6T", "5T", "4T"], + lockon: ["7L55", "7S6", "6L1", "5L57", "5S3", "4L57", "3L57"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L7", "6L7", "5L8", "5D", "4L8", "3L13"], - ominouswind: ["7E", "6E", "5E", "4T"], - painsplit: ["6T", "5T", "5D", "4T"], - payback: ["7M", "6M", "5M", "4M", "4E"], - phantomforce: ["7L54", "7E", "6L54", "6E"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7E", "6E", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L4", "6L4", "5L5", "4L5", "3L8"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7L30", "6M", "6L30", "5M", "5L35", "4M", "4L31", "3M", "3L44", "3S0"], - shadowsneak: ["7L13", "7E", "6L13", "6E", "5L20", "5E", "4L20", "4E"], - shockwave: ["6T", "4M", "3M"], - skillswap: ["6T", "5T", "4M", "3M"], + seismictoss: ["3T"], + selfdestruct: ["3T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["7L42", "6T", "6L42", "5T", "5L46", "4M", "4L43", "3M", "3L49"], - snore: ["6T", "3T"], - spite: ["7L10", "6T", "6L10", "5T", "5L16", "4T", "4L16", "3L25", "3S0"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L38", "6L34", "5L38", "4T", "4L35"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S1", "3S0"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "6S5", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7L50", "6T", "6L50", "5T", "5L55", "4T", "4L50"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32", "3S0"], + zapcannon: ["7L55", "7S6", "6L1", "5L65", "5S3", "4L65", "3L49"], }}, - banette: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + registeel: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7L37", "6L37", "6S4", "5L41", "5S3", "4L41", "3L41"], + ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S1", "3S0"], + block: ["7T", "6T", "5T", "4T"], bodyslam: ["3T"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "5M"], + chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], confide: ["7M", "6M"], - cottonguard: ["5S1"], - curse: ["7L26", "6L1", "5L1", "4L1", "3L1", "3S0"], - darkpulse: ["7M", "6M", "5T", "4M"], - dazzlinggleam: ["7M", "6M"], + counter: ["3T"], + curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S1", "3S0"], + defensecurl: ["3T"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L51", "4M", "4L42"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], + explosion: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L19", "6L19", "5L28", "5S1", "4L28", "3L39", "3S0"], - flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "7L43", "7S6", "6M", "6L43", "5M", "5L73", "4M", "4L73"], fling: ["7M", "6M", "5M", "4M"], - foulplay: ["6T", "5T"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grudge: ["7L52", "6L52", "5L66", "4L58", "3L64"], + gravity: ["7T", "6T", "6S5", "5T", "4T"], + hammerarm: ["7L49", "7S6", "6L1", "5L81", "4L81"], headbutt: ["4T"], - helpinghand: ["3S0"], - hex: ["7L22", "6L22", "5L31", "5S1"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], - knockoff: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - metronome: ["3T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "7L37", "6T", "6L37", "6S5", "6S4", "5T", "5L41", "4T", "4L41", "3L41"], + ironhead: ["7T", "7L43", "6T", "6L1", "6S5", "5T", "5L73", "4T", "4L73"], + lockon: ["7L55", "7S6", "6L1", "5L57", "5S3", "4L57", "3L57"], + magnetrise: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["7L7", "7L1", "6L1", "5L9", "4L9", "4S2", "3L9", "3S0"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - phantomforce: ["7L64", "7L1", "6L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], psychup: ["7M", "6M", "5M", "4M", "3T"], raindance: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "6S5", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - screech: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7L30", "6M", "6L30", "5M", "5L35", "5S1", "4M", "4L31", "3M", "3L48", "3S0"], + seismictoss: ["3T"], + selfdestruct: ["3T"], shadowclaw: ["7M", "6M", "5M", "4M"], - shadowsneak: ["7L13", "6L13", "5L20", "4L20"], - shockwave: ["6T", "4M", "3M"], - skillswap: ["6T", "5T", "4M", "3M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["7L46", "6T", "6L46", "5T", "5L58", "4M", "4L51", "3M", "3L55"], - snore: ["6T", "3T"], - spite: ["7L10", "7L1", "6T", "6L1", "5T", "5L16", "4T", "4L16", "3L25"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L40", "6L34", "5L42", "4T", "4L35"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7T", "7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S1", "3S0"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], thunder: ["7M", "6M", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["7L58", "6T", "6L58", "5T", "5L75", "4T", "4L66"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32"], + zapcannon: ["7L55", "7S6", "6L1", "5L65", "5S3", "4L65", "3L49"], }}, - duskull: {learnset: { - astonish: ["7L9", "6L9", "5L14", "4L14", "3L16", "3S1"], + latias: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S2", "3S1"], confide: ["7M", "6M"], - confuseray: ["7L30", "6L17", "5L17", "4L17", "3L23", "3S1"], - curse: ["7L33", "6L30", "5L30", "4L30", "3L34", "3S0"], - darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], - destinybond: ["7E", "6E", "5E", "4E", "3E"], - disable: ["7L6", "6L6", "5L6", "5D", "4L6", "3L5"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "7S9", "6T", "5T", "4T"], + dragonbreath: ["7L20", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "7L56", "7S8", "7S7", "6T", "6L1", "5T", "5L80", "4M", "4L70"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - embargo: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - foresight: ["7L14", "6L9", "5L9", "4L9", "3L12"], + fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L54", "6L49", "5L49", "4L46", "3L49"], - gravity: ["6T", "5T", "4T"], - grudge: ["7E", "6E", "5E", "4E", "3E"], - haze: ["7E", "6E"], - headbutt: ["4T"], - helpinghand: ["3S1"], - hex: ["7L38", "6L38", "5L38"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + guardsplit: ["7L46", "6L1", "5L75"], + healingwish: ["7L61", "7L1", "6L1", "5L85", "4L60"], + healpulse: ["7L16", "6L1", "6S6", "5L65", "5S5"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - imprison: ["7E", "6E", "5E", "4E", "3E"], - infestation: ["7M", "6M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L46", "6L41", "5L41", "4L38", "3L45", "3S0"], - memento: ["7E", "6E", "5E", "4E", "3E"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mimic: ["3T"], + mistball: ["7L24", "7S9", "7S8", "7S7", "6L24", "6S6", "5L35", "4L35", "4S4", "4S3", "3L35", "3S2", "3S1", "3S0"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L1", "6L1", "5L1", "4L1", "3L1"], - ominouswind: ["7E", "6E", "5E", "4T", "4E"], - painsplit: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], - payback: ["7M", "7L49", "6M", "6L46", "5M", "5L46", "4M", "4L41"], + outrage: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L51", "7S9", "6M", "6L51", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S2", "3S1", "3S0"], + psychoshift: ["7L28", "7S8", "7S7", "6L28", "6S6", "5L50", "5S5", "4L50"], psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7L22", "6L22", "5L25", "4L25", "3L27", "3S0"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L1", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L32", "6L32", "5L45", "4L45", "3L45", "3S2", "3S1"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + reflecttype: ["7L36", "6L1", "5L70"], + refresh: ["7L13", "6L13", "5L30", "4L30", "4S4", "4S3", "3L30", "3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L15", "4M", "4L15", "3M", "3L15"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "7L41", "6M", "6L41", "5M", "4M", "3M", "3S1"], - shadowsneak: ["7L17", "6L17", "5L22", "4L22"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + storedpower: ["7L10", "6L10"], substitute: ["7M", "6M", "5M", "4M", "3T"], suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swift: ["4T", "3T"], + tailwind: ["7T", "7S9", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "5D", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3L38", "3S0"], - wonderroom: ["6T", "5T"], + trick: ["7T", "6T", "5T", "4T"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + watersport: ["7L4", "6L4", "5L25", "4L25", "4S4", "4S3", "3L25", "3S0"], + whirlpool: ["4M"], + wish: ["7L1", "7S8", "7S7", "6L1", "5L5", "4L5", "3L5"], + zenheadbutt: ["7T", "7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], }}, - dusclops: {learnset: { - astonish: ["7L9", "7L1", "6L1", "5L14", "4L14", "3L16"], + latios: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + allyswitch: ["7T"], attract: ["7M", "6M", "5M", "4M", "3M"], - bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1", "3L1"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L30", "6L17", "5L17", "4L17", "3L23"], - counter: ["3T"], - curse: ["7L33", "6L30", "5L30", "4L30", "3L34"], - darkpulse: ["7M", "6M", "5T", "4M"], - disable: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], + dive: ["6M", "5M", "4T", "3M"], doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "7S10", "6T", "5T", "4T"], + dragonbreath: ["7L20", "7S9", "7S8", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S2", "3S1"], + dragonpulse: ["7T", "7L56", "7S9", "7S8", "6T", "6L1", "6S7", "5T", "5L80", "4M", "4L70"], dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], - embargo: ["7M", "6M", "5M", "4M"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], flash: ["6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - foresight: ["7L14", "6L9", "5L9", "4L9", "3L12"], + fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L64", "7L1", "6L1", "5L61", "4L61", "3L58"], + furycutter: ["4T", "3T"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - headbutt: ["4T"], - hex: ["7L40", "6L40", "5L42"], + grassknot: ["7M", "6M", "5M", "4M"], + healblock: ["7L1", "6L1", "5L5", "4L5"], + healpulse: ["7L16", "6L1", "6S7", "6S6", "5L65", "5S5"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - meanlook: ["7L52", "6L49", "5L49", "4L43", "3L51"], - megakick: ["3T"], - megapunch: ["3T"], - metronome: ["3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lusterpurge: ["7L24", "7S10", "7S9", "7S8", "6L24", "6S7", "6S6", "5L35", "4L35", "4S4", "4S3", "3L35", "3S2", "3S1", "3S0"], + magiccoat: ["7T", "6T", "5T", "4T"], + memento: ["7L61", "7L1", "6L1", "5L85", "4L60", "3L5"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L1", "6L1", "5L1", "4L1", "3L1"], - ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "7L57", "6M", "6L57", "5M", "5L58", "4M", "4L51"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M"], + outrage: ["7T", "6T", "5T", "4T"], + powersplit: ["7L46", "6L1", "5L75"], + protect: ["7M", "7L4", "6M", "6L4", "5M", "5L25", "4M", "4L25", "4S4", "4S3", "3M", "3L25", "3S0"], + psychic: ["7M", "7L51", "7S10", "6M", "6L51", "6S7", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S2", "3S1", "3S0"], + psychoshift: ["7L28", "7S9", "7S8", "6L28", "6S6", "5L50", "5S5", "4L50"], psychup: ["7M", "6M", "5M", "4M", "3T"], - pursuit: ["7L22", "6L22", "5L25", "4L25", "3L27"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L1", "6L1", "5L1", "4L1", "3L1"], raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L32", "6L32", "5L45", "4L45", "3L45", "3S2", "3S1"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L13", "6L13", "5L30", "4L30", "4S4", "4S3", "3L30", "3S0"], rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L15", "4M", "4L15", "3M", "3L15"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "7L45", "6M", "6L45", "5M", "4M", "3M"], - shadowpunch: ["7L1", "6L37", "5L37", "4L37", "3L37"], - shadowsneak: ["7L17", "6L17", "5L22", "4L22"], - skillswap: ["6T", "5T", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M", "3M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + storedpower: ["7L10", "6L10"], substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swift: ["4T", "3T"], + tailwind: ["7T", "7S10", "6T", "5T", "4T"], + telekinesis: ["7T", "7L36", "6L1", "5M", "5L70"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3L41"], - wonderroom: ["6T", "5T"], - }}, - dusknoir: {learnset: { - astonish: ["7L9", "7L1", "6L1", "5L14", "4L14"], - attract: ["7M", "6M", "5M", "4M"], - bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - confide: ["7M", "6M"], - confuseray: ["7L30", "6L17", "5L17", "4L17"], - curse: ["7L33", "6L30", "5L30", "4L30"], - darkpulse: ["7M", "6M", "5T", "4M"], - disable: ["7L6", "7L1", "6L1", "5L1", "4L1"], - doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - earthquake: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foresight: ["7L14", "6L9", "5L9", "4L9"], - frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7L64", "7L1", "6L1", "5L61", "4L61"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - headbutt: ["4T"], - hex: ["7L40", "6L40", "5L42"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - icywind: ["6T", "5T", "4T"], - infestation: ["7M", "6M"], - leer: ["7L1", "6L1", "5L1", "4L1"], - meanlook: ["7L52", "6L49", "5L49", "4L43"], - mudslap: ["4T"], - naturalgift: ["4M"], - nightshade: ["7L1", "6L1", "5L1", "4L1"], - ominouswind: ["4T"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "7L57", "6M", "6L57", "5M", "5L58", "4M", "4L51"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - pursuit: ["7L22", "6L22", "5L25", "4L25"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "7L45", "6M", "6L45", "5M", "4M"], - shadowpunch: ["7L1", "6L37", "5L37", "4L37"], - shadowsneak: ["7L17", "6L17", "5L22", "4L22"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M"], - thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33"], - wonderroom: ["6T"], + trick: ["7T", "6T", "5T", "4T"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], }}, - tropius: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - aircutter: ["4T"], - airslash: ["7L36", "6L36", "5L51", "4L47", "4S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bestow: ["7L46", "6L1", "5L57"], - bodyslam: ["7L41", "6L37", "5L37", "4L37", "3T", "3L37"], - brutalswing: ["7M"], + kyogre: {learnset: { + ancientpower: ["7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], + aquaring: ["7L30", "6L30", "6S5", "5L30", "4L30", "4S2"], + aquatail: ["7T", "7L15", "6T", "6L15", "5T", "5L65", "4T", "4L65"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["7L20", "6L15", "6S5", "5L15", "4L15", "3T", "3L20", "3S0"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], bulldoze: ["7M", "6M", "5M"], - bulletseed: ["7E", "6E", "5E", "4M", "3M"], - captivate: ["4M"], + calmmind: ["7M", "7L50", "7S7", "7S8", "7S9", "7S10", "6M", "6L50", "5M", "5L60", "4M", "4L30", "3M", "3L30", "3S0"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E"], - cut: ["6M", "5M", "4M", "3M"], - defog: ["4M"], - doubleedge: ["3T"], + defensecurl: ["3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7L80", "6L80", "5L80", "4L65", "3T", "3L65", "3S1"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragondance: ["7E", "6E", "5E", "4E"], - dragonpulse: ["6T", "5T"], earthquake: ["7M", "6M", "5M", "4M", "3M"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - gigadrain: ["6T", "5T", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growth: ["7L1", "6L1", "5L7", "4L7", "3L7"], - gust: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L75", "6L75", "5L90", "4L45", "3L45", "3S1", "3S0"], hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - leafblade: ["7E", "6E", "5E", "4E"], - leafstorm: ["7L61", "7E", "7L1", "6L1", "6E", "5L71", "5E", "4L61", "4E"], - leaftornado: ["7L26", "6L26", "5L47"], - leechseed: ["7E", "6E", "5E", "5D", "4E", "3E"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], - magicalleaf: ["7L16", "6L16", "5L31", "4L31", "3L31"], + icebeam: ["7M", "7L35", "7S7", "7S8", "7S9", "7S10", "6M", "6L35", "6S6", "6S5", "5M", "5L35", "5S4", "5S3", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + ironhead: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], mimic: ["3T"], + muddywater: ["7L60", "7S7", "7S8", "7S9", "6L20", "5L20", "4L20"], mudslap: ["4T", "3T"], - naturalgift: ["7L30", "7E", "6L1", "6E", "5L67", "5E", "4M", "4L57"], - naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], - ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], + naturalgift: ["4M"], + originpulse: ["7L45", "7S7", "7S8", "7S9", "7S10", "6L45", "6S5"], protect: ["7M", "6M", "5M", "4M", "3M"], - razorleaf: ["7L1", "6L1", "5L11", "4L11", "3L11"], - razorwind: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "4L50", "3M", "3L50", "3S1"], return: ["7M", "6M", "5M", "4M", "3M"], roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], secretpower: ["6M", "4M", "3M"], - seedbomb: ["6T", "5T"], - silverwind: ["5D", "4M"], - slam: ["7E", "6E", "5E", "4E", "3E"], + sheercold: ["7L65", "6L65", "6S6", "5L75", "5S4", "4L60", "3L60", "3S1"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L56", "6M", "6L56", "5M", "5L61", "4M", "4L51", "4S0", "3M", "3L41"], - steelwing: ["7M", "6M", "4M", "3M"], - stomp: ["7L10", "6L10", "5L17", "4L17", "3L17"], + snore: ["7T", "6T", "5T", "4T", "3T"], strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "4S0", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetscent: ["7L6", "6L6", "5L21", "4L21", "3L21"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - synthesis: ["7L50", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E", "4T", "4L41", "4E", "4S0", "3L47"], - tailwind: ["6T", "5T", "4T"], + swift: ["4T", "3T"], + thunder: ["7M", "6M", "6S6", "5M", "5S4", "5S3", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - whirlwind: ["7L21", "6L21", "5L27", "4L27", "3L27"], - worryseed: ["6T", "5T", "4T"], - }}, - chingling: {learnset: { - astonish: ["7L7", "6L7", "5L9", "4L9"], - attract: ["7M", "6M", "5M", "4M"], - bind: ["6T", "5T"], - calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - confide: ["7M", "6M"], - confusion: ["7L10", "6L10", "5L14", "4L14"], - cosmicpower: ["7E", "6E"], - curse: ["7E", "6E", "5E", "4E"], - dazzlinggleam: ["7M", "6M"], - disable: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "4E"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], - entrainment: ["7L19", "6L19", "5L25"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7E", "6E", "5E", "4E"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - growl: ["7L4", "6L4", "5L6", "4L6"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7E", "6E", "5E", "4E"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7L16", "6T", "6L16", "5T", "5L22", "4T", "4L22"], - lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M"], - recover: ["7E", "6E", "5E", "4E"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - storedpower: ["7E", "6E", "5E"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["7L32", "6T", "6L17", "5T", "5L17", "4T", "4L17"], - wish: ["7E", "6E", "5E", "4E"], - wrap: ["7L1", "6L1", "5L1", "4L1"], - yawn: ["7L13", "6L13"], - zenheadbutt: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "7L1", "6T", "6L1", "5L1", "4M", "4L1", "3M", "3L1"], + waterspout: ["7L90", "7S10", "6L50", "6S6", "5L50", "5S4", "5S3", "4L50", "4S2", "3L75"], + whirlpool: ["4M"], }}, - chimecho: {learnset: { - astonish: ["7L7", "7L1", "6L1", "5L9", "4L9", "3L9", "3S0"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bind: ["6T", "5T"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + groudon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L50", "7S7", "7S8", "7S9", "6M", "6L50", "5M", "5L60", "4M", "4L30", "3M", "3L30", "3S0"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L10", "7L1", "6L1", "5L14", "4L14", "3L14"], - cosmicpower: ["7E", "6E"], - curse: ["7E", "6E", "5E", "4E", "3E"], - dazzlinggleam: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], defensecurl: ["3T"], - disable: ["7E", "6E", "5E", "4E", "3E"], - doubleedge: ["7L42", "6L33", "5L33", "4L33", "3T", "3L33"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dreameater: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - echoedvoice: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthpower: ["7T", "7L15", "7S10", "6T", "6L15", "5T", "5L65", "5S4", "4T", "4L65"], + earthquake: ["7M", "7L35", "7S7", "7S8", "7S9", "6M", "6L35", "6S5", "5M", "5L35", "5S3", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - extrasensory: ["7L22", "6L22", "5L46", "4L46"], + eruption: ["7L90", "6L50", "5L50", "5S4", "5S3", "4L50", "4S2", "3L75"], facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L75", "6M", "6L75", "5M", "5L90", "4M", "4L45", "3M", "3L45", "3S1", "3S0"], + firepunch: ["7T", "7S10", "6T", "6S6", "5T", "4T", "3T"], + fissure: ["7L65", "6L65", "5L75", "4L60", "3L60", "3S1"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7E", "6E", "5E", "4E"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - growl: ["7L4", "7L1", "6L1", "5L6", "4L6", "3L6", "3S0"], - healbell: ["7L27", "6T", "6L27", "5T", "5L38", "4T", "4L38", "3L38"], - healingwish: ["7L57", "7L1", "6L1", "5L57", "4L49"], - healpulse: ["7L47", "6L47", "5L49"], - helpinghand: ["6T", "5T", "4T"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hammerarm: ["7L80", "6L20", "6S6", "5L20", "5S4", "4L20"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T", "5D"], - hypnosis: ["7E", "6E", "5E", "5D", "4E", "3E"], - icywind: ["6T", "5T", "4T", "3T"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], + lavaplume: ["7L20", "6L15", "6S5", "5L15", "4L15"], + megakick: ["3T"], + megapunch: ["3T"], mimic: ["3T"], + mudshot: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + poweruppunch: ["6M"], + precipiceblades: ["7L45", "7S7", "7S8", "7S9", "7S10", "6L45", "6S5"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "6M", "5M", "4M", "3M", "3L46"], psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L16", "6L16", "5L30", "4L30", "3L30"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7E", "6E"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L30", "6M", "6L30", "6S5", "5M", "5L30", "4M", "4L30", "4S2", "3M", "3L50", "3S1"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "6S6", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L41", "4M", "4L41", "3M", "3L41"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M", "3M"], + slash: ["4L20", "3L20", "3S0"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - storedpower: ["7E", "6E", "5E"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L60", "7S7", "7S8", "7S9", "6M", "6L60", "6S6", "5M", "5L80", "5S4", "5S3", "4M", "4L65", "3M", "3L65", "3S1"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - synchronoise: ["7L52", "7L1", "6L1", "5L54"], - takedown: ["7L19", "6L19", "5L22", "4L22", "3L17"], - taunt: ["7M", "6M", "5M", "4M", "3M"], - telekinesis: ["5M"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M", "3M"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7S10", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["7L32", "6T", "6L17", "5T", "5L17", "4T", "4L17", "3L22"], - wish: ["7E", "6E", "5E", "4E"], - wrap: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], - yawn: ["7L13", "6L13", "5L25", "4L25", "3L25"], - zenheadbutt: ["6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], }}, - absol: {learnset: { + rayquaza: {learnset: { aerialace: ["7M", "6M", "5M", "4M", "3M"], - assurance: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7E", "6E", "5E", "4E", "3E"], - bite: ["7L16", "6L16", "5L28", "4L28", "3L21", "3S2"], + airslash: ["7L30", "6L30", "5L35", "4L35", "4S1"], + ancientpower: ["7L15", "6L15", "5L45", "5S2", "4T", "4L15", "4S1", "3L15"], + aquatail: ["7T", "6T", "5T", "4T"], + avalanche: ["4M"], + bind: ["7T", "6T", "5T"], blizzard: ["7M", "6M", "5M", "4M", "3M"], bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], brutalswing: ["7M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + celebrate: ["6S7"], confide: ["7M", "6M"], - counter: ["3T"], - curse: ["7E", "6E", "5E", "4E", "3E"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5T", "4M"], - detect: ["7L33", "6L1", "5L49", "4L49"], - doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], - doubleteam: ["7M", "7L19", "6M", "6L19", "5M", "5L33", "4M", "4L33", "3M", "3L31", "3S3"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], + crunch: ["7L20", "6L15", "5L15", "4L15", "3L35"], + defog: ["7T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "6S7", "5T", "4T"], + dragonascent: ["7T", "6T", "6S7", "6S6", "6S4"], + dragonclaw: ["7M", "6M", "6S6", "5M", "4M", "4L20", "3M", "3L20"], + dragondance: ["7L60", "7S8", "6L60", "6S6", "6S4", "5L60", "5S2", "4L30", "3L30"], + dragonpulse: ["7T", "7L50", "7S8", "6T", "6L50", "6S5", "6S4", "5T", "5L90", "5S3", "5S2", "4M", "4L75"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "6S6", "5M", "4M", "3M"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L45", "7S8", "6L45", "6S5", "6S4", "5L75", "5S3", "4L60", "3L60", "3S0"], facade: ["7M", "6M", "5M", "4M", "3M"], - falseswipe: ["7M", "6M", "5M", "4M"], - feint: ["7L1", "6L1", "5L1", "5D", "4L1"], - feintattack: ["7E", "6E", "5E", "4E", "3E"], fireblast: ["7M", "6M", "5M", "4M", "3M"], flamethrower: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - foulplay: ["6T", "5T"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "7L65", "6M", "6L65", "6S7", "5M", "5L65", "4M", "4L45", "3M", "3L45", "3S0"], + focusblast: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M", "3M"], furycutter: ["4T", "3T"], - futuresight: ["7L53", "7L1", "6L1", "5L41", "4L41", "3L41", "3S3"], gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - hex: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L90", "6M", "6L80", "5M", "5L80", "5S3", "4M", "4L65", "3M", "3L75"], + hypervoice: ["7T", "7L75", "6T", "6L20", "5T", "5L20", "4L20"], icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - knockoff: ["6T", "5T", "4T"], - leer: ["7L4", "7L1", "6L1", "5L4", "4L4", "3L5", "3S0", "3S1"], - magiccoat: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], - meanlook: ["7E", "6E", "5E", "4E"], - mefirst: ["7L41", "7E", "6L1", "6E", "5L57", "5E", "4L57", "4E"], - megahorn: ["7E", "6E", "5E", "5D", "4E"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M", "3M"], mimic: ["3T"], mudslap: ["4T", "3T"], naturalgift: ["4M"], - nightmare: ["3T"], - nightslash: ["7L29", "6L29", "5L52", "4L52"], - payback: ["7M", "6M", "5M", "4M"], - perishsong: ["7L57", "7E", "7L1", "6L1", "6E", "5L65", "5E", "4L65", "3L46", "3S3"], - playrough: ["7E", "6E"], + outrage: ["7T", "7L80", "6T", "6L50", "5T", "5L50", "5S2", "4T", "4L50", "4S1", "3L65", "3S0"], + overheat: ["7M", "6M", "5M", "4M", "3M"], protect: ["7M", "6M", "5M", "4M", "3M"], - psychocut: ["7L37", "6L37", "5L60", "4L60"], psychup: ["7M", "6M", "5M", "4M", "3T"], - punishment: ["7E", "6E", "5E", "4E"], - pursuit: ["7L10", "6L10", "5L20", "4L20"], - quickattack: ["7L7", "7L1", "6L1", "5L12", "4L12", "3L13"], raindance: ["7M", "6M", "5M", "4M", "3M"], - razorwind: ["7L49", "6L1", "5L17", "4L17", "3L17", "3S2"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], + rest: ["7M", "7L35", "7S8", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S1", "3M", "3L50", "3S0"], return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], rockslide: ["7M", "6M", "5M", "4M", "3T"], rocksmash: ["6M", "5M", "4M", "3M"], rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], round: ["7M", "6M", "5M"], sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slash: ["7L22", "6L22", "5L36", "4L36", "3L36", "3S3"], + shockwave: ["7T", "6T", "4M", "3M"], + skydrop: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T", "3S1", "3S2"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - suckerpunch: ["7L45", "7E", "6L45", "6E", "5L44", "5E", "4T", "4L44", "4E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["6T", "5T", "5D", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], swift: ["4T", "3T"], - swordsdance: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L26", "3S2"], - taunt: ["7M", "7L13", "6M", "6L1", "5M", "5L9", "4M", "4L9", "3M", "3L9"], - thief: ["7M", "6M", "5M", "4M", "3M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwind: ["7T", "6T", "5T", "4T"], + thunder: ["7M", "6M", "6S5", "5M", "4M", "3M"], thunderbolt: ["7M", "6M", "5M", "4M", "3M"], thunderwave: ["7M", "6M", "5M", "4M", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - willowisp: ["7M", "6M", "5M", "4M"], - wish: ["3S0"], - xscissor: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + twister: ["7L1", "6L1", "6S5", "5L1", "4T", "4L1", "3L1"], + uproar: ["7T", "6T", "5T", "4T"], + vcreate: ["5S3"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7T", "6T", "4M", "3M"], + whirlpool: ["4M"], }}, - snorunt: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], - avalanche: ["7E", "6E", "5E", "4M"], - bide: ["7E", "6E", "5E", "4E"], - bite: ["7L19", "6L10", "5L10", "4L10", "3L10", "3S0"], - blizzard: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L43"], - block: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + jirachi: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], bodyslam: ["3T"], - captivate: ["4M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L41", "6L31", "5L31", "4L31", "3L28"], - disable: ["7E", "6E", "5E", "4E"], - doubleedge: ["3T"], - doubleteam: ["7M", "7L5", "6M", "6L4", "5M", "5L4", "4M", "4L4", "3M", "3L7"], + confusion: ["7L1", "6L1", "6S21", "6S20", "6S18", "5L1", "4L1", "4S12", "4S11", "3L1", "3S9", "3S8", "3S7", "3S6", "3S5", "3S4", "3S3", "3S2", "3S1", "3S0"], + cosmicpower: ["7L60", "6L60", "6S19", "5L60", "5S15", "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"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M", "3M"], - faketears: ["7E", "6E", "5E"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], flash: ["6M", "5M", "4M", "3M"], - frostbreath: ["7M", "7L37", "6M", "6L37", "5M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + followme: ["5S14"], frustration: ["7M", "6M", "5M", "4M", "3M"], - hail: ["7M", "7L50", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L37"], - headbutt: ["7L28", "6L19", "5L19", "4T", "4L19", "3L19"], - hex: ["7E", "6E", "5E"], + futuresight: ["7L55", "6L55", "5L55", "4L55", "3L40"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], + happyhour: ["6S20"], + headbutt: ["4T"], + healingwish: ["7L50", "7S22", "6L50", "6S17", "5L50", "5S16", "5S15", "5S13", "4L50"], + heartstamp: ["6S19"], + helpinghand: ["7T", "7L15", "6T", "6L15", "6S18", "5T", "5L15", "4T", "4L15", "3L15", "3S10"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M", "3L34"], - icefang: ["7L23", "6L23", "5L28", "4L28"], - iceshard: ["7L10", "6L10", "5L37", "4L37"], - icywind: ["7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3T", "3L16", "3S0"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7L65", "6T", "6L65", "5T", "5L65", "4T", "4L65"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L30"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + meteormash: ["5S15", "5S14", "5S13"], + metronome: ["3T"], mimic: ["3T"], + moonblast: ["6S17"], + mudslap: ["4T", "3T"], naturalgift: ["4M"], - powdersnow: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - protect: ["7M", "7L32", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L25"], + nightmare: ["3T"], + playrough: ["6S19"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7E", "6E", "5E", "4T", "4E"], + recycle: ["7T", "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", "4S12", "4S11", "3M", "3L5", "3S10", "3S9", "3S8", "3S7", "3S6", "3S5", "3S4", "3S3", "3S2", "3S1", "3S0"], + return: ["7M", "6M", "6S18", "5M", "5S16", "4M", "3M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sing: ["3S0"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spikes: ["7E", "6E", "5E", "4E", "3E"], - spite: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T", "3T"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], swagger: ["7M", "6M", "5M", "4M", "3T"], - switcheroo: ["7E", "6E"], + swift: ["7L10", "7S22", "6L10", "6S20", "6S17", "5L10", "5S16", "5S13", "4T", "4L10", "3T", "3L10"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "5D", "4M", "3M", "3S0"], - weatherball: ["7E", "6E", "5E", "5D", "4E"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wish: ["7L1", "7S22", "6L1", "6S21", "6S20", "6S19", "6S18", "6S17", "5L1", "5S16", "5S15", "5S14", "4L1", "4S12", "4S11", "3L1", "3S9", "3S8", "3S7", "3S6", "3S5", "3S4", "3S3", "3S2", "3S1", "3S0"], + zenheadbutt: ["7T", "7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], }}, - glalie: {learnset: { - attract: ["7M", "6M", "5M", "4M", "3M"], + deoxys: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L55", "6L55", "5L73", "4L73", "3L35"], + allyswitch: ["7T", "5M"], + amnesia: ["7L55", "6L55", "5L73", "4L73", "3L35"], avalanche: ["4M"], - bite: ["7L19", "6L1", "5L1", "4L1", "3L1"], - blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L51", "4M", "4L51", "3M", "3L53"], - block: ["6T", "5T", "4T"], + bind: ["7T", "6T", "5T"], bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L41", "6L31", "5L31", "4L31", "3L28"], - darkpulse: ["7M", "6M", "5T", "4M"], - defensecurl: ["3T"], + cosmicpower: ["7L55", "6L55", "6S10", "5L73", "4L73", "3L35", "3S3"], + counter: ["7L73", "6L73", "5L97", "4L97", "4S6", "3T", "3L50"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5S9"], + detect: ["4S6"], doubleedge: ["3T"], - doubleteam: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L17", "4M", "4L17", "4S5", "3M", "3L10"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], endure: ["4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L73", "6L73", "5L97", "4L97", "4S5", "4S4", "3L50"], facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7T", "6T", "5T", "4T", "3T"], flash: ["6M", "5M", "4M", "3M"], - freezedry: ["7L1", "6L42"], - frostbreath: ["7M", "7L37", "6M", "6L37", "5M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M", "3M"], frustration: ["7M", "6M", "5M", "4M", "3M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gyroball: ["7M", "6M", "5M", "4M"], - hail: ["7M", "7L54", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L42"], - headbutt: ["7L28", "6L19", "5L19", "4T", "4L19", "3L19"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L34"], - icefang: ["7L23", "6L23", "5L28", "4L28"], - iceshard: ["7L10", "7L1", "6L1"], - icywind: ["7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3T", "3L16"], - ironhead: ["6T", "5T", "4T"], - leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "7L73", "6M", "6L73", "6S10", "5M", "5L97", "4M", "4L97", "4S7", "3M", "3L50", "3S3"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7T", "6T", "5T", "4T", "3T"], + icywind: ["7T", "6T", "5T", "4T", "3T"], + irondefense: ["7L55", "6T", "6L55", "5T", "5L73", "4T", "4L73", "4S4", "3L35"], + knockoff: ["7T", "7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25", "3L15", "3S2", "3S1"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1", "4L1", "4S8", "3L1"], lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + meteormash: ["4S7"], mimic: ["3T"], + mirrorcoat: ["7L73", "6L73", "5L97", "4L97", "4S6", "3L50"], + mudslap: ["4T", "3T"], + nastyplot: ["5S9"], naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "7L32", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L25"], + nightmare: ["3T"], + nightshade: ["7L7", "6L7", "5L9", "4L9", "4S8", "3L5"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L31", "6M", "6L31", "5M", "5L41", "4M", "4L41", "3M", "3L25", "3S2", "3S1", "3S0"], + psychoboost: ["7L67", "6L67", "6S10", "5L89", "5S9", "4L89", "4S8", "4S7", "4S6", "4S5", "4S4", "3L45", "3S3"], + psychoshift: ["7L43", "6L43", "5L57", "4L57"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + pursuit: ["7L25", "6L25", "5L33", "4L33", "3L20", "3S2", "3S0"], raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L61", "6L61", "6S10", "5L81", "5S9", "4L81", "3L40", "3S3"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], rest: ["7M", "6M", "5M", "4M", "3M"], return: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M", "3M"], secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], + seismictoss: ["3T"], shadowball: ["7M", "6M", "5M", "4M", "3M"], - sheercold: ["7L61", "7L1", "6L1", "5L59", "4L59", "3L61"], - signalbeam: ["6T", "5T", "4T"], + shockwave: ["7T", "6T", "4M", "3M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M", "3M"], sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - spite: ["6T", "5T", "4T"], + snatch: ["7T", "7L37", "6T", "6L37", "5T", "5L49", "4M", "4L49", "3M", "3L30", "3S1"], + snore: ["7T", "6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L25", "6L25", "5L33", "4L33", "3L20", "3S1"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M", "3M"], substitute: ["7M", "6M", "5M", "4M", "3T"], - superfang: ["6T", "5T", "4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7L37", "6T", "6L37", "5L49", "4T", "4L49", "4S7", "3S0"], swagger: ["7M", "6M", "5M", "4M", "3T"], - taunt: ["7M", "6M", "5M", "4M", "3M"], + swift: ["7L37", "6L37", "5L49", "4T", "4L49", "4S5", "3T", "3L30", "3S2"], + taunt: ["7M", "7L19", "6M", "6L19", "5M", "5L25", "4M", "4L25", "3M", "3L15", "3S0"], + telekinesis: ["7T", "5M"], + teleport: ["7L13", "6L13", "5L17", "4L17", "3L10"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7T", "6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], torment: ["7M", "6M", "5M", "4M", "3M"], toxic: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M", "3M"], + wonderroom: ["7T", "6T", "5T"], + wrap: ["7L1", "6L1", "5L1", "4L1", "4S8", "3L1"], + zapcannon: ["7L61", "6L61", "5L81", "4L81", "4S4", "3L40"], + zenheadbutt: ["7T", "7L49", "6T", "6L49", "5T", "5L65", "4T", "4L65"], }}, - froslass: {learnset: { - astonish: ["7L19", "6L1", "5L1", "4L1"], + turtwig: {learnset: { + absorb: ["7L9", "6L9", "5L9", "5S1", "5S0", "4L9"], + amnesia: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M"], - auroraveil: ["7M"], - avalanche: ["4M"], - blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L51", "4M", "4L51"], - block: ["6T", "5T", "4T"], - captivate: ["7L41", "6L31", "5L31", "4M", "4L31"], + bite: ["7L21", "6L21", "5L21", "4L21"], + bodyslam: ["7E", "6E", "5E", "4E"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L37", "6L37", "5L37", "4L37"], + curse: ["7L17", "6L17", "5L17", "4L17"], + cut: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "7L41", "6T", "6L41", "5T", "5L41", "4M", "4L41"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + grassyterrain: ["7E", "6E"], + growth: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + heavyslam: ["7E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["7T", "6T", "5T", "4M"], + leafstorm: ["7L45", "6L45", "5L45", "4L45"], + leechseed: ["7L29", "6L29", "5L29", "4L29"], + lightscreen: ["7M", "6M", "5M", "4M"], + megadrain: ["7L25", "6L25", "5L25", "4L25"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L13", "6L13", "5L13", "4L13"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandtomb: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spitup: ["7E", "6E", "5E", "4E"], + stealthrock: ["7T", "6T", "5T", "4M"], + stockpile: ["7E", "6E", "5E", "5S1", "4E"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7E", "6E", "5E", "4E"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33"], + tackle: ["7L1", "6L1", "5L1", "5S1", "5S0", "4L1"], + thrash: ["7E", "6E", "5E", "4E"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + wideguard: ["7E", "6E", "5E"], + withdraw: ["7L5", "6L5", "5L5", "5S1", "5S0", "4L5"], + workup: ["7M"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + grotle: {learnset: { + absorb: ["7L9", "7L1", "6L9", "5L9", "4L9"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L22", "6L22", "5L22", "4L22"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L42", "6L42", "5L42", "4L42"], + curse: ["7L17", "6L17", "5L17", "4L17"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "7L47", "6T", "6L47", "5T", "5L47", "4M", "4L47"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["7T", "6T", "5T", "4M"], + leafstorm: ["7L52", "6L52", "5L52", "4L52"], + leechseed: ["7L32", "6L32", "5L32", "4L32"], + lightscreen: ["7M", "6M", "5M", "4M"], + megadrain: ["7L27", "6L27", "5L27", "4L27"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L13", "6L13", "5L13", "4L13"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + withdraw: ["7L5", "7L1", "6L1", "5L1", "4L1"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T", "4T"], + }}, + torterra: {learnset: { + absorb: ["7L9", "7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L22", "6L22", "5L22", "4L22"], + block: ["7T", "6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L45", "6L45", "5L45", "4L45"], + curse: ["7L17", "6L17", "5L17", "4L17"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "5S0", "4M", "4L32"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frenzyplant: ["7T", "6T", "5T", "4T"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "7L51", "6T", "6L51", "5T", "5L51", "4M", "4L51"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + leafstorm: ["7L57", "6L57", "5L57", "4L57"], + leechseed: ["7L33", "6L33", "5L33", "4L33"], + lightscreen: ["7M", "6M", "5M", "4M"], + megadrain: ["7L27", "6L27", "5L27", "4L27"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + outrage: ["7T", "6T", "5T", "5S0", "4T"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L13", "7L1", "6L1", "5L1", "4L1"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "5S0", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + withdraw: ["7L5", "7L1", "6L1", "5L1", "4L1"], + woodhammer: ["7L1", "6L1", "5L1", "5S0", "4L1"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T", "4T"], + }}, + chimchar: {learnset: { + acrobatics: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + aerialace: ["7M", "6M", "5M", "4M"], + assist: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + blazekick: ["7E", "6E", "5E", "4E"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + ember: ["7L7", "6L7", "5L7", "5S3", "5S1", "4L7"], + encore: ["7E", "6E", "5E", "4E"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31"], + fakeout: ["7E", "6E", "5E", "5S3", "4E"], + fireblast: ["7M", "6M", "5M", "4M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + firespin: ["7L33", "6L33", "5L33", "4L33"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L41", "4S2", "4S0"], + flamewheel: ["7L17", "6L17", "5L17", "4L17"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E", "4E"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyswipes: ["7L15", "6L15", "5L15", "4L15"], + grassknot: ["7M", "6M", "5M", "4M", "4S2", "4S0"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], + heatwave: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "4S2", "4S0"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "5S3", "5S1", "4L1"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mudslap: ["4T"], + nastyplot: ["7L23", "6L23", "5L23", "4L23"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "6M", "5M", "4M"], + quickguard: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "5S1", "4L1"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slackoff: ["7L41", "6L41", "5L41", "4L39"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + submission: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "5S3", "5S1", "4M", "4L9"], + thunderpunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E", "4S2", "4S0"], + torment: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + monferno: {learnset: { + acrobatics: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + closecombat: ["7L36", "6L36", "5L36", "4L36"], + confide: ["7M", "6M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dualchop: ["7T", "6T", "5T"], + ember: ["7L7", "7L1", "6L1", "5L1", "4L1"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L26", "6L26", "5L26", "4L26"], + fireblast: ["7M", "6M", "5M", "4M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "6T", "5T", "4T"], + firespin: ["7L39", "6L39", "5L39", "4L39"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flamewheel: ["7L19", "6L19", "5L19", "4L19"], + flareblitz: ["7L56", "6L56", "5L56", "4L49"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyswipes: ["7L16", "6L16", "5L16", "4L16"], + grassknot: ["7M", "6M", "5M", "4M"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L1", "6L14", "5L14", "4L14"], + mudslap: ["4T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slackoff: ["7L49", "6L49", "5L49", "4L46"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "4M", "4L9"], + thunderpunch: ["7T", "6T", "5T", "4T"], + torment: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + infernape: {learnset: { + acrobatics: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + blastburn: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L58", "6M", "6L58", "5M", "5L58", "4M", "4L53"], + captivate: ["4M"], + closecombat: ["7L1", "6L36", "6S1", "5L36", "5S0", "4L41"], confide: ["7M", "6M"], - confuseray: ["7L32", "6L19", "5L19", "4L19"], - destinybond: ["7L61", "7L1", "6L1", "5L59", "4L59"], - doubleteam: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - drainingkiss: ["7L23", "6L23"], - dreameater: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dualchop: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + ember: ["7L7", "7L1", "6L1", "5L1", "4L1"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], + feint: ["7L26", "6L26", "5L26", "4L29"], + fireblast: ["7M", "6M", "6S1", "5M", "5S0", "4M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "6T", "6S1", "5T", "4T"], + firespin: ["7L42", "6L42", "5L42", "4L45"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flamewheel: ["7L19", "6L19", "5L19", "4L21"], + flareblitz: ["7L68", "7L1", "6L1", "5L68", "4L57"], fling: ["7M", "6M", "5M", "4M"], - frostbreath: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "6S1", "4M"], frustration: ["7M", "6M", "5M", "4M"], + furyswipes: ["7L16", "6L16", "5L16", "4L17"], gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "7L54", "6M", "6L40", "5M", "5L40", "4M", "4L40"], + grassknot: ["7M", "6M", "5M", "5S0", "4M"], + gunkshot: ["7T", "6T", "5T", "4T"], headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - iceshard: ["7L10", "7L1", "6L1", "5L37", "4L37"], - icywind: ["7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], leer: ["7L1", "6L1", "5L1", "4L1"], - lightscreen: ["7M", "6M", "5M", "4M"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L1", "6L14", "5L14", "4L14"], mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["7L1", "6L22", "5L22", "4T", "4L22"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - powdersnow: ["7L1", "6L1", "5L1", "4L1"], + overheat: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], + punishment: ["7L29", "6L29", "5L29", "4L33"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], rollout: ["4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], secretpower: ["6M", "4M"], - shadowball: ["7M", "7L42", "6M", "6L42", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], + shadowclaw: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + thunderpunch: ["7T", "6T", "5T", "4T"], torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - wakeupslap: ["7L37", "6L28", "5L28", "4L28"], - waterpulse: ["6T", "4M"], - willowisp: ["7M", "7L28"], + uturn: ["7M", "6M", "5M", "5S0", "4M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], }}, - spheal: {learnset: { + piplup: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7E", "6E", "5E", "4E"], aquaring: ["7E", "6E", "5E", "4E"], - aquatail: ["6T", "5T", "5D", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L21", "6L21", "5L25", "4L25", "3L25", "3S0"], - bellydrum: ["7E", "6E"], - blizzard: ["7M", "7L41", "6M", "6L41", "5M", "5L43", "4M", "4L43", "3M", "3L43"], - bodyslam: ["7L26", "6L19", "5L19", "4L19", "3T", "3L19"], - brine: ["7L17", "6L17", "4M"], - bulldoze: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M", "4M"], + bide: ["7L22", "7E", "6L22", "6E", "5L22", "5E", "4L18"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L29", "6L29", "5L29", "4M", "4L29"], + bubble: ["7L8", "6L8", "5L8", "5S3", "5S0", "4L8"], + bubblebeam: ["7L18", "7S5", "6L18", "5L18", "4L18"], captivate: ["4M"], - charm: ["3S0"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "4E", "3E"], - defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + defog: ["7T", "4M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doublehit: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + drillpeck: ["7L39", "7S5", "6L39", "5L39", "4L39"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L9", "6L7", "5L7", "4L7", "3L7"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fissure: ["7E", "6E", "5E", "5D", "4E", "3E"], - frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "7L36", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["7E", "6E", "5E", "5S3", "5S2", "5S1", "4E"], + flail: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L25", "6L25", "5L25", "4L25"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "6L4", "6S4", "5L4", "5S3", "5S0", "4L4"], + hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - mimic: ["3T"], - mudslap: ["4T", "3T", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hydropump: ["7L43", "7E", "7S5", "6L43", "6E", "5L43", "5E", "5S1", "4L43", "4E"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + mist: ["7L36", "6L36", "5L36", "4L36"], + mudslap: ["7E", "6E", "5E", "4T", "4E"], + mudsport: ["7E", "6E", "5E", "4E"], naturalgift: ["4M"], - powdersnow: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L31", "6M", "6L31", "5M", "5L37", "4M", "4L37", "3M", "3L37"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L5", "7E", "6L5", "6E", "5E", "4T", "3T"], - round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - sheercold: ["7L46", "6L46", "5L49", "4L49", "3L49"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], - snore: ["7L31", "6T", "6L31", "5T", "5L37", "4T", "4L37", "3T", "3L37"], - spitup: ["7E", "6E", "5E", "4E", "3E"], - stockpile: ["7E", "6E", "5E", "4E", "3E"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swallow: ["7E", "6E", "5E", "4E", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - watersport: ["7E", "6E", "5E", "4E", "3E"], - whirlpool: ["4M"], - yawn: ["7E", "6E", "5E", "4E", "3E"], + peck: ["7L15", "6L15", "5L15", "5S2", "5S1", "4L15"], + pluck: ["5M", "4M"], + pound: ["7L1", "6L1", "6S4", "5L1", "5S3", "5S0", "4L1"], + powertrip: ["7E"], + protect: ["7M", "6M", "5M", "4M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "6S4", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M", "5S2"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sing: ["5S2"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + stealthrock: ["7T", "6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + supersonic: ["7E", "6E", "5E", "4E"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M"], + watersport: ["7L11", "6L11", "5L11", "5S1", "4L11"], + whirlpool: ["7L32", "7S5", "6L32", "5L32", "4M", "4L32"], + workup: ["7M"], + yawn: ["7E", "6E", "5E", "4E"], }}, - sealeo: {learnset: { - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L21", "6L21", "5L25", "4L25", "3L25"], - blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L47", "4M", "4L47", "3M", "3L47"], - bodyslam: ["7L26", "6L19", "5L19", "4L19", "3T", "3L19"], - brine: ["7L17", "6L17", "4M"], - bulldoze: ["7M", "6M", "5M"], + prinplup: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + bide: ["7L24", "6L24", "5L24", "4L19"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L33", "6L33", "5L33", "4M", "4L33"], + bubble: ["7L8", "7L1", "6L8", "5L8", "4L8"], + bubblebeam: ["7L19", "6L19", "5L19", "4L19"], captivate: ["4M"], confide: ["7M", "6M"], - defensecurl: ["7L1", "6L1", "3T", "3L1"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + defog: ["7T", "4M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + drillpeck: ["7L46", "6L46", "5L46", "4L46"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L9", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "7L38", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L28", "6L28", "5L28", "4L28"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irontail: ["6T", "5T", "4M", "3M"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L50", "6L50", "5L51", "4L51"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + metalclaw: ["7L1", "6L16", "5L16", "4L16"], + mist: ["7L42", "6L42", "5L42", "4L42"], + mudslap: ["4T"], naturalgift: ["4M"], - powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L31", "6M", "6L31", "5M", "5L39", "4M", "4L39", "3M", "3L39"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L5", "6L5", "4T", "3T"], + peck: ["7L15", "6L15", "5L15", "4L15"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - sheercold: ["7L52", "6L52", "5L55", "4L55", "3L55"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["7L31", "6T", "6L31", "5T", "5L39", "4T", "4L39", "3T", "3L39"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M"], + watersport: ["7L11", "6L11", "5L11", "4L11"], + whirlpool: ["7L37", "6L37", "5L37", "4M", "4L37"], + workup: ["7M"], }}, - walrein: {learnset: { - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - aurorabeam: ["7L19", "6L19", "5L25", "4L25", "3L25"], + empoleon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aquajet: ["7L1", "6L36", "5L36", "5S0", "4L36"], + attract: ["7M", "6M", "5M", "4M"], avalanche: ["4M"], - blizzard: ["7M", "7L49", "6M", "6L49", "5M", "5L52", "4M", "4L52", "3M", "3L50"], - block: ["6T", "5T", "4T"], - bodyslam: ["7L25", "6L19", "5L19", "4L19", "3T", "3L19"], - brine: ["7L19", "6L19", "5S0", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L33", "6L33", "5L33", "4M", "4L33"], + bubble: ["7L8", "7L1", "6L1", "5L1", "4L1"], + bubblebeam: ["7L19", "6L19", "5L19", "4L19"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L1", "6L1", "5L1", "4L1"], - defensecurl: ["7L1", "6L1", "3T", "3L1"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + defog: ["7T", "4M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + drillpeck: ["7L52", "6L52", "5L52", "4L52"], + earthquake: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], - encore: ["7L7", "6L1", "5L1", "4L1", "3L1"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L28", "6L28", "5L28", "4L28"], furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], - hail: ["7M", "7L38", "6M", "6L31", "5M", "5L31", "5S0", "4M", "4L31", "3M", "3L31"], + grassknot: ["7M", "6M", "5M", "5S0", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], - icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], - icefang: ["7L1", "6L44", "5L44", "4L44"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hydrocannon: ["7T", "6T", "5T", "4T"], + hydropump: ["7L59", "6L59", "5L59", "5S0", "4L59"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "5S0", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + liquidation: ["7T"], + metalclaw: ["7L1", "6L16", "5L16", "4L16"], + mist: ["7L46", "6L46", "5L46", "4L46"], + mudslap: ["4T"], naturalgift: ["4M"], - powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L31", "6M", "6L31", "5M", "5L39", "4M", "4L39", "3M", "3L39"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["7L7", "6L7", "4T", "3T"], + peck: ["7L15", "6L15", "5L15", "4L15"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - sheercold: ["7L60", "6L60", "5L65", "5S0", "4L65", "3L61"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["7L31", "6T", "6L31", "5T", "5L39", "4T", "4L39", "3T", "3L39"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + steelwing: ["7M", "6M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L19"], + swordsdance: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + throatchop: ["7T"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "6T", "4M"], + whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39"], + workup: ["7M"], }}, - clamperl: {learnset: { - aquaring: ["7E", "6E", "5E", "5D", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - barrier: ["7E", "6E", "5E", "4E", "3E"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], - brine: ["7E", "6E", "5E", "4M"], - captivate: ["5D", "4M"], - clamp: ["7L1", "6L1", "5L1", "4L1", "3L1"], + starly: {learnset: { + aerialace: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + agility: ["7L33", "6L33", "5L33", "4L33"], + aircutter: ["4T"], + astonish: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + bravebird: ["7L37", "6L37", "5L37", "4L37"], + captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "4E", "3E"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["7E", "6E", "5E", "4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], - mimic: ["3T"], - muddywater: ["7E", "6E", "5E", "4E"], - mudsport: ["7E", "6E", "5E", "4E", "3E"], + defog: ["7T", "4M"], + detect: ["7E", "6E", "5E"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L17", "6T", "6L17", "5T", "5L17", "4T", "4L17"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["7E", "6E", "5E", "4E"], + finalgambit: ["7L41", "6L41", "5L41"], + fly: ["7M", "6M", "5M", "4M"], + foresight: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7E", "6E", "5E", "4E"], + growl: ["7L1", "6L1", "5L1", "4L1", "4S0"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + mirrormove: ["7E", "6E"], + mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7E", "6E", "5E", "4E", "3E"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7E", "6E", "5E", "4E"], + quickattack: ["7L5", "6L5", "5L5", "4L5"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7E", "6E", "5E"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - shellsmash: ["7L50", "6L50", "5L51"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], - waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], - whirlpool: ["7L1", "6L1", "5L1", "5D", "4M", "4L1", "3L1"], + sandattack: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "4S0"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L29", "6L29", "5L29", "4L29"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["7T", "7E", "6T", "6E", "5E"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L21", "6L21", "5L21", "4L21"], + wingattack: ["7L9", "6L9", "5L9", "4L9"], + workup: ["7M", "5M"], + }}, + staravia: {learnset: { + aerialace: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + agility: ["7L38", "6L38", "5L38", "4L38"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + bravebird: ["7L43", "6L43", "5L43", "4L43"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["7T", "4M"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L18", "6T", "6L18", "5T", "5L18", "4T", "4L18"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["5D"], + finalgambit: ["7L48", "6L48", "5L48"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], + takedown: ["7L33", "6L33", "5L33", "4L33"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["7T", "6T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L23", "6L23", "5L23", "4L23"], + wingattack: ["7L9", "6L9", "5D", "5L9", "4L9"], + workup: ["7M", "5M"], }}, - huntail: {learnset: { - aquatail: ["7L39", "6T", "6L39", "5T", "5L46", "4T", "4L46"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L29", "6L29", "5L33", "4L33", "3L43"], - bind: ["6T", "5T"], - bite: ["7L1", "6L1", "5L6", "4L6", "3L8"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - brine: ["7L19", "6L19", "5L28", "4M", "4L28"], + staraptor: {learnset: { + aerialace: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + agility: ["7L41", "6L41", "5L41", "4L41"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + bravebird: ["7L49", "6L49", "5L49", "4L49"], captivate: ["4M"], - coil: ["7L45", "6L45"], + closecombat: ["7L1", "6L34", "5L34", "4L34"], confide: ["7M", "6M"], - crunch: ["7L34", "6L34", "5L42", "4L42", "3L36"], - dive: ["7L26", "6M", "6L26", "5M", "5L37", "4T", "4L37", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - feintattack: ["7L11", "6L11"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + defog: ["7T", "4M"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L18", "6T", "6L18", "5T", "5L18", "4T", "4L18"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + finalgambit: ["7L57", "6L57", "5L57"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L50", "6L50", "5L51", "4L51", "3L50"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icefang: ["7L16", "6L16", "5L24", "4L24"], - icywind: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + growl: ["7L1", "6L1", "5L1", "4L1"], + heatwave: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + laserfocus: ["7T"], + mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - scaryface: ["7L9", "6L9", "5L19", "4L19", "3L29"], - screech: ["7L5", "6L5", "5L10", "4L10", "3L15"], - secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["6T", "5T", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["7L23", "6L23", "4T"], - superfang: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["7L14", "6T", "6L14", "5L15", "4M", "4L15", "3M", "3L22"], - whirlpool: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1"], + secretpower: ["6M", "4M"], + skyattack: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["7T", "6T", "5T", "4T"], + takedown: ["7L33", "6L33", "5L33", "4L33"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["7T", "6T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L23", "6L23", "5L23", "4L23"], + wingattack: ["7L9", "7L1", "6L1", "5L1", "4L1"], + workup: ["7M", "5M"], }}, - gorebyss: {learnset: { - agility: ["7L9", "6L9", "5L10", "4L10", "3L15"], - amnesia: ["7L16", "6L16", "5L19", "4L19", "3L29"], - aquaring: ["7L19", "6L19", "5L24", "4L24"], - aquatail: ["7L39", "6T", "6L39", "5T", "5L46", "4T", "4L46"], - attract: ["7M", "6M", "5M", "4M", "3M"], - batonpass: ["7L29", "6L29", "5L33", "4L33", "3L43"], - bind: ["6T", "5T"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - brine: ["4M"], - captivate: ["7L23", "6L23", "5L28", "4M", "4L28"], - coil: ["7L45", "6L45"], + bidoof: {learnset: { + amnesia: ["7L41", "6L29", "5L29", "4L29"], + aquatail: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L6", "4L6", "3L8"], - dive: ["7L26", "6M", "6L26", "5M", "5L37", "4T", "4L37", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainingkiss: ["7L11", "6L11"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L50", "6L50", "5L51", "4L51", "3L50"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - infestation: ["7M", "6M"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + covet: ["7T", "6T", "5T"], + crunch: ["7L25"], + curse: ["7L49", "6L45", "5L45", "4L45"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L5", "7E", "6L9", "6E", "5L9", "5E", "4L9", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E", "4M"], + facade: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L5", "5L5", "4L5"], + headbutt: ["7L13", "6L17", "5L17", "4T", "4L17"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperfang: ["7L17", "6L21", "5L21", "4L21"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + lastresort: ["7T", "6T", "5T", "4T"], + mudslap: ["4T"], + mudsport: ["7E"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L34", "6M", "6L34", "5M", "5L42", "4M", "4L42", "3M", "3L36"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + odorsleuth: ["7E", "6E", "5E", "4E"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["7E", "6E", "5E"], + rocksmash: ["6M", "5M", "4M"], + rollout: ["7L9", "7E", "6L13", "6E", "5L13", "5E", "4T", "4L13", "4E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["7L14", "6T", "6L14", "5L15", "4M", "4L15", "3M", "3L22"], - watersport: ["7L5", "6L5"], - whirlpool: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1"], + secretpower: ["6M", "5D", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + skullbash: ["7E", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "7L33", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + superpower: ["7T", "7L45", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L37"], + tackle: ["7L1", "6L1", "5D", "5L1", "4L1", "4S0"], + takedown: ["7L29", "6L33", "5L33", "4L33"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + watersport: ["7E", "6E", "5E", "4E"], + workup: ["7M", "5M"], + yawn: ["7L21", "6L25", "5L25", "4L25"], }}, - relicanth: {learnset: { - amnesia: ["7E", "6E", "5E", "4E", "3E"], - ancientpower: ["7L21", "6L1", "5L43", "4T", "4L43", "3L43"], - aquatail: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - attract: ["7M", "6M", "5M", "4M", "3M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bounce: ["6T", "5T", "4T"], - brine: ["7E", "6E", "5E", "4M"], + bibarel: {learnset: { + amnesia: ["7L48", "6L33", "5L33", "4L33"], + aquajet: ["7L1"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - dive: ["7L26", "6M", "6L26", "5M", "5L57", "4T", "4L57", "3M"], - doubleedge: ["7L50", "6L50", "5L50", "4L50", "3T", "3L57"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthpower: ["6T", "5T", "5D", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L1"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + covet: ["7T", "6T", "5T"], + crunch: ["7L28"], + curse: ["7L58", "6L53", "5L53", "4L53"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L5", "6L9", "5L9", "4L9"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], - headbutt: ["4T"], - headsmash: ["7L56", "7L1", "6L1", "5L78", "4L78"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L46", "6L1", "5L71", "4L71", "3L64"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - magnitude: ["7E", "6E", "5E", "4E", "3E"], - mimic: ["3T"], - muddywater: ["7E", "6E", "5E", "4E"], - mudshot: ["7E", "6E", "5E"], - mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], - mudsport: ["7L6", "7L1", "6L1", "5L36", "4L36", "3L36"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + headbutt: ["7L13", "6L18", "5L18", "4T", "4L18"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hyperfang: ["7L18", "6L23", "5L23", "4L23"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + lastresort: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], + mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L41", "6M", "6L41", "5M", "5L64", "4M", "4L64", "3M", "3L50"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L15"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + rollout: ["7L9", "6L13", "5L13", "4T", "4L13"], + rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - skullbash: ["7E", "6E", "5E", "4E", "3E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "4E", "3T", "3E"], - smackdown: ["7M", "6M", "5M"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L31", "6L29", "5L29", "4L29", "3L29"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L10", "7L1", "6L1", "5L8", "5D", "4L8", "3L8"], - waterpulse: ["6T", "4M", "3M"], - watersport: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "7L38", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + superpower: ["7T", "7L53", "6T", "6L48", "5T", "5L48", "4T", "4L48"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L43"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L33", "6L38", "5L38", "4L38"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L15", "5L15", "4L15"], + waterpulse: ["7T", "6T", "4M"], whirlpool: ["4M"], - yawn: ["7L35", "6L22", "5L22", "4L22", "3L22"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + workup: ["7M", "5M"], + yawn: ["7L23", "6L28", "5L28", "4L28"], }}, - luvdisc: {learnset: { - agility: ["7L7", "6L7", "5L9", "4L9", "3L16"], - aquajet: ["7E", "6E", "5E", "4E"], - aquaring: ["7L40", "7E", "6L40", "6E", "5L46", "5E", "4L37", "4E"], - attract: ["7M", "7L20", "6M", "6L22", "5M", "5L27", "4M", "4L22", "3M", "3L28"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bounce: ["6T", "5T", "4T"], - brine: ["7E", "6E", "5E", "4M"], - captivate: ["7L37", "7E", "6L46", "6E", "5L51", "5E", "4M", "4L40", "4E"], - charm: ["7L1", "6L1", "5L4", "5D", "4L4", "3L4"], + kricketot: {learnset: { + bide: ["7L1", "6L1", "5L1", "4L1"], + bugbite: ["7T", "7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16"], + endeavor: ["7T", "6T", "5D", "5T", "4T"], + growl: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + snore: ["7T", "6T", "5T", "4T"], + stringshot: ["4T"], + strugglebug: ["7L6", "6M", "6L6", "5D", "5L6"], + uproar: ["7T", "6T", "5D", "5T", "4T"], + }}, + kricketune: {learnset: { + absorb: ["7L14"], + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + bide: ["7L1", "6L1", "5L1", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["7T", "6T", "5T", "4T"], + bugbuzz: ["7L46", "6L46", "5L46", "4L34"], + captivate: ["4M"], confide: ["7M", "6M"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainingkiss: ["7L9", "6L9"], - endure: ["4M", "3T"], - entrainment: ["7E", "6E"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flail: ["7L26", "6L27", "5L31", "4L46", "3L40"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - healpulse: ["7E", "6E", "5E"], - heartstamp: ["7L22"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L46", "6L40", "5L40"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "5D", "4T", "3T"], - luckychant: ["7L13", "6L14", "5L17", "4L17"], - mimic: ["3T"], - mudsport: ["7E", "6E", "5E", "5D", "4E", "3E"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L36", "6L36"], + flash: ["6M", "5M", "4M"], + focusenergy: ["7L22", "6L22", "5L22", "4L22"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L1", "6L10", "5L10", "4T", "4L10"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + healbell: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["7T", "6T", "5T"], + infestation: ["7M", "6M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + leechlife: ["7M", "6L14", "5L14", "4L14"], + mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + nightslash: ["7L42", "6L42", "5L42", "4L42"], + perishsong: ["7L50", "6L50", "5L50", "4L38"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L49", "6M", "6L55", "5M", "5L55", "4M", "4L51", "3M", "3L48"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - soak: ["7L42"], - splash: ["7E", "6E", "5E", "4E", "3E"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - supersonic: ["7E", "6E", "5E", "4E", "3E"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - sweetkiss: ["7L31", "6L31", "5L37", "4L27", "3L36"], - swift: ["4T", "3T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], - takedown: ["7L34", "6L14", "5L14", "4L14", "3L24"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - watergun: ["7L4", "6L4", "5L7", "4L7", "3L12"], - waterpulse: ["7L17", "6T", "6L17", "5L22", "4M", "4L31", "3M"], - watersport: ["7E", "6E", "5E", "4E", "3E"], - whirlpool: ["4M"], + screech: ["7L34", "6L34", "5L34", "4L30"], + secretpower: ["6M", "4M"], + silverwind: ["4M"], + sing: ["7L18", "6L18", "5L18", "4L18"], + slash: ["7L26", "6L26", "5L26", "4L26"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stickyweb: ["7L44", "6L44"], + strength: ["6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "4L38"], + throatchop: ["7T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + xscissor: ["7M", "7L30", "6M", "6L30", "5M", "5L30", "4M", "4L26"], }}, - bagon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L10", "6L5", "5L5", "5D", "4L5", "3L5", "3S0", "3S1"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], + shinx: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + babydolleyes: ["7L11", "6L11"], + bite: ["7L17", "6L17", "5L17", "4L13"], captivate: ["4M"], + charge: ["7L9", "6L9", "5D", "5L9", "4L9"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "5L46", "4L46", "3L41"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["7E", "6E", "5E"], - doubleedge: ["7L49", "6L49", "5L55", "4L55", "3T", "3L53"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L13", "6L13", "5L31", "4L31", "3L33"], - dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L50", "4M", "4L50", "3M", "3L49"], - dragondance: ["7E", "6E", "5E", "5D", "4E", "3E"], - dragonpulse: ["7E", "6T", "6E", "5T", "5E", "4M"], - dragonrage: ["7E", "6E", "5E", "4E", "3E"], - dragonrush: ["7E", "6E", "5E", "4E"], - ember: ["7L4", "6L4", "5L25", "4L25", "3L25"], - endure: ["7E", "6E", "5E", "4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], + crunch: ["7L33", "6L33", "5L33", "4L29"], + discharge: ["7L41", "6L41", "5L41", "4L41"], + doublekick: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M", "4M"], + eerieimpulse: ["7E", "6E"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + faketears: ["7E", "6E"], firefang: ["7E", "6E", "5E", "4E"], - flamethrower: ["7M", "7L44", "6M", "6L44", "5M", "4M", "3M"], - focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - headbutt: ["7L17", "6L16", "5L16", "4T", "4L16", "3L17"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hydropump: ["7E", "6E", "5E", "4E", "3E"], - hypervoice: ["6T", "5T"], - incinerate: ["6M", "5M"], - irondefense: ["3S1"], - leer: ["7L7", "6L7", "5L10", "4L10", "3L9"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + helpinghand: ["7T", "7E", "6T", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + howl: ["7E", "6E", "5E", "4E"], + icefang: ["7E", "6E", "5E", "4E"], + irontail: ["7T", "6T", "5T", "4M"], + leer: ["7L5", "6L5", "5L5", "4L5"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5D", "5T", "4T"], + mudslap: ["4T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "5D", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - rage: ["7L1", "6L1", "6S3", "5L1", "5S2", "4L1", "3L1", "3S0", "3S1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + nightslash: ["7E", "6E", "5D", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L21", "6M", "6L21", "5M", "5L21", "4M", "4L21"], round: ["7M", "6M", "5M"], - scaryface: ["7L39", "6L39", "5L40", "4L40", "3L37"], - secretpower: ["6M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thrash: ["7E", "6E", "6S3", "5E", "4E", "3E"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["7E", "6E", "5E", "4T", "4E", "3E"], - wish: ["3S0"], - zenheadbutt: ["7L34", "6T", "6L34", "5T", "5L35", "4T", "4L35"], + scaryface: ["7L37", "6L37", "5L37", "4L37"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "7E", "6T", "6E", "5E", "4M"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + swift: ["7E", "6E", "5E", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7E", "6E", "5E", "4E"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "4L29", "4E"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], }}, - shelgon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], + luxio: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L18", "6L18", "5L18", "4L13"], captivate: ["4M"], + charge: ["7L9", "6L9", "5L9", "4L9"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "5L50", "4L50", "3L56"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - doubleedge: ["7L56", "6L56", "5L61", "4L61", "3T", "3L78"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L13", "6L13", "5L32", "4L32", "3L38"], - dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L55", "4M", "4L55", "3M", "3L69"], - dragonpulse: ["6T", "5T", "4M"], - ember: ["7L4", "7L1", "6L1", "5L25", "4L25", "3L25"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "4M", "3M"], - focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - headbutt: ["7L17", "6L1", "5L1", "4T", "4L1", "3L1"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hypervoice: ["6T", "5T"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - leer: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + crunch: ["7L38", "6L38", "5L38", "4L33"], + discharge: ["7L48", "6L48", "5L48", "4L48"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["7T", "6T", "5T", "4M"], + leer: ["7L5", "7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], + mudslap: ["4T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - protect: ["7M", "7L1", "6M", "6L30", "5M", "5L30", "4M", "4L30", "3M", "3L30"], - rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "4M", "4L23"], round: ["7M", "6M", "5M"], - scaryface: ["7L42", "6L42", "5L43", "4L43", "3L47"], - secretpower: ["6M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L37", "4T", "4L37"], + scaryface: ["7L43", "6L43", "5L43", "4L43"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L33", "6L33", "5L33", "4L33"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], }}, - salamence: {learnset: { - aerialace: ["7M", "6M", "5M", "5S3", "4M", "3M", "3S1"], - aircutter: ["4T"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], + luxray: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L18", "6L18", "5L18", "4L13"], captivate: ["4M"], + charge: ["7L9", "7L1", "6L1", "5L1", "4L1"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "5L53", "4L53", "3L61"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - defog: ["4M"], - doubleedge: ["7L63", "6L1", "5L70", "4L70", "3T", "3L93"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L13", "6L13", "5L32", "4L32", "3L38", "3S0"], - dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L61", "5S3", "4M", "4L61", "4S2", "3M", "3L79", "3S1"], - dragondance: ["5S3", "3S1"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "7L1", "6M", "6L1", "5M", "5L80"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - ember: ["7L4", "7L1", "6L1", "5L25", "4L25", "3L25"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "4S2", "3M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "4M", "3M"], - fly: ["7M", "7L1", "6M", "6L50", "5M", "5L50", "4M", "4L50", "3M", "3L50", "3S0"], - focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + crunch: ["7L42", "6L42", "5L42", "4L35"], + discharge: ["7L56", "6L56", "5L56", "4L56"], + doubleteam: ["7M", "6M", "5M", "4M"], + electricterrain: ["7L67", "7L1", "6L1"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["7L17", "6L1", "5L1", "4T", "4L1", "3L1"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hydropump: ["4S2"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - hypervoice: ["6T", "5T"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M", "3M"], - leer: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + headbutt: ["4T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], + leer: ["7L5", "7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], + mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["4T"], - outrage: ["6T", "5T", "5S3", "4T"], - protect: ["7M", "7L1", "6M", "6L30", "5M", "5L30", "4M", "4L30", "3M", "3L30", "3S0"], - rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S1"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], - roost: ["7M", "6M", "5T", "4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "4M", "4L23"], round: ["7M", "6M", "5M"], - scaryface: ["7L42", "6L42", "5L43", "4L43", "3L47", "3S0"], - secretpower: ["6M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - steelwing: ["7M", "6M", "4M", "3M"], - stoneedge: ["7M", "6M", "5M", "4M", "4S2"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["4T"], - zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L37", "4T", "4L37"], - }}, - beldum: {learnset: { - headbutt: ["4T"], - holdback: ["6S0"], - irondefense: ["6T", "6S0", "5T", "4T"], - ironhead: ["6T", "6S0", "5T", "5D", "4T"], - takedown: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], - zenheadbutt: ["6T", "6S0", "5T", "5D", "4T"], + scaryface: ["7L49", "6L49", "5L49", "4L49"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L35", "6L35", "5L35", "4L35"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L63", "6M", "6L63", "5M", "5L63"], }}, - metang: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L41", "6L38", "5L44", "4L44", "3L56"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], + cranidos: {learnset: { + ancientpower: ["7L33", "6L33", "5L33", "4T", "4L28"], + assurance: ["7L24", "6L24", "5L24", "4L24"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7L26", "6L26", "5L32", "4L32"], + captivate: ["4M"], + chipaway: ["7L28", "6L28", "5L28"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - gyroball: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L50", "6M", "6L50", "5M", "5L56", "4M", "4L56", "3M", "3L62"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L47", "6T", "6L47", "5T", "5L40", "4T", "4L40", "3L44"], - ironhead: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magnetrise: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - metalclaw: ["7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], - meteormash: ["7L44", "6L44", "5L48", "4L48", "3L50"], - mimic: ["3T"], - miracleeye: ["7L29", "6L26", "5L26"], - mudslap: ["4T", "3T"], + crunch: ["7E", "6E", "5E", "5S0", "4E"], + curse: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5D", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L6", "6L6", "5L6", "4L6"], + frustration: ["7M", "6M", "5M", "4M"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["7L1", "6L1", "5D", "5L1", "5S0", "4T", "4L1"], + headsmash: ["7L46", "6L46", "5L46", "4L43"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + ironhead: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + leer: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + mudslap: ["4T"], naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L36", "4M", "4L36", "3M", "3L38"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L10", "6L10", "5L10", "5S0", "4L10"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L35", "6L35", "5L24", "4L24", "3L26"], - secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - takedown: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], - telekinesis: ["5M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - zenheadbutt: ["7L32", "6T", "6L29", "5T", "5L52", "4T", "4L52"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L19", "6L19", "5L19", "4L19"], + screech: ["7L42", "6L42", "5L42", "4L37"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + slam: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stomp: ["7E", "6E", "5E", "4E"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + takedown: ["7L15", "6L15", "5L15", "5S0", "4L15"], + thief: ["7M", "6M", "5M", "4M"], + thrash: ["7E", "6E", "5E", "4E"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + whirlwind: ["7E", "6E", "5E", "4E"], + zenheadbutt: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "4T", "4L33"], }}, - metagross: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L41", "6L38", "5L44", "5S4", "4L44", "3L66"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], + rampardos: {learnset: { + ancientpower: ["7L36", "6L36", "5L36", "4T", "4L28"], + assurance: ["7L24", "6L24", "5L24", "4L24"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7L26", "6L26", "5L32", "5S1", "5S2", "4L32", "4S0"], + captivate: ["4M"], + chipaway: ["7L28", "6L28", "5L28"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - doubleedge: ["5S4", "5S5", "3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "5S1", "5S3", "5S6", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "6M", "5M", "4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endeavor: ["7T", "7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L6", "7L1", "6L6", "5L6", "4L6"], + focuspunch: ["7T", "6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - gyroball: ["7M", "6M", "5M", "4M"], - hammerarm: ["7L1", "6L45", "5L45", "5S1", "5S2", "5S4", "5S5", "4L45", "4S0"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L60", "6M", "6L60", "5M", "5L71", "5S6", "4M", "4L71", "3M", "3L77"], - icepunch: ["6T", "5T", "5S2", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L52", "6T", "6L52", "5T", "5L40", "5S4", "4T", "4L40", "3L44"], - ironhead: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magnetrise: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - metalclaw: ["7L1", "6L1", "5L1", "4L1", "3L1"], - meteormash: ["7L44", "6L44", "5L53", "5S1", "5S3", "5S5", "5S6", "4L53", "4S0", "3L55"], - mimic: ["3T"], - miracleeye: ["7L29", "6L26", "5L26"], - mudslap: ["4T", "3T"], + headbutt: ["7L1", "6L1", "5L1", "4T", "4L1"], + headsmash: ["7L58", "6L58", "5L58", "4L52"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], naturalgift: ["4M"], + outrage: ["7T", "6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "5S3", "4M", "3M"], - psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L36", "5S5", "5S6", "4M", "4L36", "3M", "3L38"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L10", "7L1", "6L10", "5L10", "4L10"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L35", "6L35", "5L24", "4L24", "3L1"], - secretpower: ["6M", "4M", "3M"], - selfdestruct: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - sludgebomb: ["7M", "6M", "5M", "4M", "3M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - takedown: ["7L1", "6L1", "5L1", "4L1", "3L1"], - telekinesis: ["5M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - zenheadbutt: ["7L32", "6T", "6L29", "5T", "5L62", "5S2", "5S3", "4T", "4L62", "4S0"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L19", "6L19", "5L19", "4L19"], + screech: ["7L51", "6L51", "5L51", "4L43"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + whirlpool: ["4M"], + zenheadbutt: ["7T", "7L43", "6T", "6L43", "5T", "5L43", "4T", "4L36"], }}, - regirock: {learnset: { - ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S0", "3S1"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "6S4", "5M"], - chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], + shieldon: {learnset: { + ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["7E", "6E", "5E", "5S0", "4E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S0", "3S1"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - drainpunch: ["6T", "5T", "4M"], - dynamicpunch: ["3T"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "7L1", "6M", "6L1", "6S5", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - hammerarm: ["7L49", "6L1", "6S5", "5L81", "4L81"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], - icepunch: ["6T", "6S5", "5T", "4T", "3T"], - irondefense: ["7L37", "6T", "6L37", "6S4", "5T", "5L41", "5S3", "4L41", "3L41"], - ironhead: ["6T", "5T", "4T"], - lockon: ["7L55", "6L1", "5L57", "5S3", "4L57", "3L57"], - megakick: ["3T"], - megapunch: ["3T"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + counter: ["7E", "6E", "5D", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["7L33", "6L33", "5L33", "4M", "4L33"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + fissure: ["7E", "6E", "5D", "5E", "4E"], + flamethrower: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M"], + guardsplit: ["7E", "6E"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + heavyslam: ["7L46", "6L46", "5L46"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19"], + ironhead: ["7T", "7L42", "6T", "6L42", "5T", "5L42", "4T", "4L43"], + irontail: ["7T", "6T", "5T", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], + metalburst: ["7L37", "6L37", "5L37", "4L37"], + metalsound: ["7L10", "6L10", "5L10", "5S0", "4L10"], + mudslap: ["4T"], naturalgift: ["4M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], + protect: ["7M", "7L1", "6M", "6L1", "5D", "5M", "5L1", "5S0", "4M", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockblast: ["7E", "6E", "5E", "4E"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rockthrow: ["7L7", "7L1", "6L1", "5L9", "4L9", "4S2", "3S0", "3L9"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - selfdestruct: ["3T"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7E", "6E", "5E", "4E"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], - stoneedge: ["7M", "7L43", "6M", "6L43", "6S5", "5M", "5L73", "4M", "4L73"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S0", "3S1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - zapcannon: ["7L55", "6L1", "5L65", "5S3", "4L65", "3L49"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "5S0", "4L15"], + taunt: ["7M", "7L6", "6M", "6L6", "5M", "5L6", "4M", "4L6"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + wideguard: ["7E", "6E", "5E"], }}, - regice: {learnset: { - amnesia: ["7L37", "6L37", "6S4", "6S5", "5L41", "5S3", "4L41", "3L41"], - ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S0", "3S1"], - auroraveil: ["7M"], + bastiodon: {learnset: { + ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28"], + attract: ["7M", "6M", "5M", "4M"], avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "6S4", "5M"], - chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], + blizzard: ["7M", "6M", "5M", "4M"], + block: ["7T", "7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S0", "3S1"], - defensecurl: ["3T"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - facade: ["7M", "6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["7L36", "6L36", "5L36", "4M", "4L36"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], flashcannon: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - hail: ["7M", "6M", "6S5", "5M", "4M", "3M"], - hammerarm: ["7L49", "6L1", "5L81", "4L81"], headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], - icebeam: ["7M", "7L43", "6M", "6L43", "6S5", "5M", "5L73", "4M", "4L73", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["7L7", "7L1", "6T", "6L1", "5T", "5L9", "4T", "4L9", "4S2", "3T", "3L9", "3S0"], - ironhead: ["6T", "5T", "4T"], - lockon: ["7L55", "6L1", "5L57", "5S3", "4L57", "3L57"], - megakick: ["3T"], - megapunch: ["3T"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + heavyslam: ["7L58", "6L58", "5L58"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19"], + ironhead: ["7T", "7L51", "6T", "6L51", "5T", "5L51", "4T", "4L52"], + irontail: ["7T", "6T", "5T", "4M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magnetrise: ["7T", "6T", "5T", "4T"], + metalburst: ["7L43", "6L43", "5L43", "4L43"], + metalsound: ["7L10", "7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], naturalgift: ["4M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], + outrage: ["7T", "6T", "5T", "4T"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T", "3T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - selfdestruct: ["3T"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - superpower: ["7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S0", "3S1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "6S5", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - zapcannon: ["7L55", "6L1", "5L65", "5S3", "4L65", "3L49"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shockwave: ["7T", "6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + taunt: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], }}, - registeel: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - amnesia: ["7L37", "6L37", "6S4", "5L41", "5S3", "4L41", "3L41"], - ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S0", "3S1"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "5M"], - chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], - confide: ["7M", "6M"], - counter: ["3T"], - curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S0", "3S1"], - defensecurl: ["3T"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dynamicpunch: ["3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - explosion: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flashcannon: ["7M", "7L43", "6M", "6L43", "5M", "5L73", "4M", "4L73"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "6S5", "5T", "4T"], - hammerarm: ["7L49", "6L1", "5L81", "4L81"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], - icepunch: ["6T", "5T", "4T", "3T"], - irondefense: ["7L37", "6T", "6L37", "6S4", "6S5", "5T", "5L41", "4T", "4L41", "3L41"], - ironhead: ["7L43", "6T", "6L1", "6S5", "5T", "5L73", "4T", "4L73"], - lockon: ["7L55", "6L1", "5L57", "5S3", "4L57", "3L57"], - magnetrise: ["6T", "5T"], - megakick: ["3T"], - megapunch: ["3T"], - metalclaw: ["7L7", "7L1", "6L1", "5L9", "4L9", "4S2", "3L9", "3S0"], - mimic: ["3T"], - mudslap: ["4T", "3T"], - naturalgift: ["4M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "6S5", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - selfdestruct: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S0", "3S1"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - zapcannon: ["7L55", "6L1", "5L65", "5S3", "4L65", "3L49"], + burmy: {learnset: { + bugbite: ["7T", "7L15", "6T", "6L15", "5D", "5T", "5L15", "4T", "4L15"], + electroweb: ["7T", "6T", "5T"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5L20", "4L20"], + protect: ["7M", "7L1", "6M", "6L1", "5D", "5L1", "4L1"], + snore: ["7T", "6T", "5D", "5T", "4T"], + stringshot: ["4T"], + tackle: ["7L10", "6L10", "5L10", "4L10"], }}, - latias: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S1", "3S2"], + wormadam: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bugbite: ["7T", "7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50"], + bulletseed: ["4M"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M", "3M"], - defog: ["4M"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L20", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["7L56", "6T", "6L1", "5T", "5L80", "4M", "4L70"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["7T", "6T", "5T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + facade: ["7M", "6M", "5M", "4M"], + flail: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - guardsplit: ["7L46", "6L1", "5L75"], - healingwish: ["7L61", "7L1", "6L1", "5L85", "4L60"], - healpulse: ["7L16", "6L1", "6S6", "5L65", "5S5"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - mimic: ["3T"], - mistball: ["7L24", "6L24", "6S6", "5L35", "4L35", "4S3", "4S4", "3L35", "3S0", "3S1", "3S2"], - mudslap: ["4T", "3T"], + growth: ["7L29", "6L29", "5L29", "4L29"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + leafstorm: ["7L47", "6L47", "5L47", "4L47"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L51", "6M", "6L51", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S0", "3S1", "3S2"], - psychoshift: ["7L28", "6L28", "6S6", "5L50", "5S5", "4L50"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L32", "6L32", "5L45", "4L45", "3L45", "3S1", "3S2"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - reflecttype: ["7L36", "6L1", "5L70"], - refresh: ["7L13", "6L13", "5L30", "4L30", "4S3", "4S4", "3L30", "3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], - roost: ["7M", "6M", "5T", "4M"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L26", "6L26", "5L26", "4L26"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L15", "4M", "4L15", "3M", "3L15"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - steelwing: ["7M", "6M", "4M", "3M"], - storedpower: ["7L10", "6L10"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - twister: ["4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - watersport: ["7L4", "6L4", "5L25", "4L25", "4S3", "4S4", "3L25", "3S0"], - whirlpool: ["4M"], - wish: ["7L1", "6L1", "5L5", "4L5", "3L5"], - zenheadbutt: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["7T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - latios: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - attract: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], + wormadamsandy: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bugbite: ["7T", "7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50"], bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M", "3M"], - defog: ["4M"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7L20", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragondance: ["7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S1", "3S2"], - dragonpulse: ["7L56", "6T", "6L1", "6S7", "5T", "5L80", "4M", "4L70"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M", "3M"], - flash: ["6M", "5M", "4M", "3M"], - fly: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + electroweb: ["7T", "6T", "5T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fissure: ["7L47", "6L47", "5L47", "4L47"], + flail: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - healblock: ["7L1", "6L1", "5L5", "4L5"], - healpulse: ["7L16", "6L1", "6S6", "6S7", "5L65", "5S5"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lusterpurge: ["7L24", "6L24", "6S6", "6S7", "5L35", "4L35", "4S3", "4S4", "3L35", "3S0", "3S1", "3S2"], - magiccoat: ["6T", "5T", "4T"], - memento: ["7L61", "7L1", "6L1", "5L85", "4L60", "3L5"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + harden: ["7L29", "6L29", "5L29", "4L29"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + mudslap: ["4T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - powersplit: ["7L46", "6L1", "5L75"], - protect: ["7M", "7L4", "6M", "6L4", "5M", "5L25", "4M", "4L25", "4S3", "4S4", "3M", "3L25", "3S0"], - psychic: ["7M", "7L51", "6M", "6L51", "6S7", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S0", "3S1", "3S2"], - psychoshift: ["7L28", "6L28", "6S6", "5L50", "5S5", "4L50"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L1", "6L1", "5L1", "4L1", "3L1"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L32", "6L32", "5L45", "4L45", "3L45", "3S1", "3S2"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - refresh: ["7L13", "6L13", "5L30", "4L30", "4S3", "4S4", "3L30", "3S0"], - rest: ["7M", "6M", "5M", "4M", "3M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - roost: ["7M", "6M", "5T", "4M"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockblast: ["7L26", "6L26", "5L26", "4L26"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L15", "4M", "4L15", "3M", "3L15"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - steelwing: ["7M", "6M", "4M", "3M"], - storedpower: ["7L10", "6L10"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["7L36", "6L1", "5M", "5L70"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - twister: ["4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["7T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], }}, - kyogre: {learnset: { - ancientpower: ["7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], - aquaring: ["7L30", "6L30", "6S5", "5L30", "4L30", "4S2"], - aquatail: ["7L15", "6T", "6L15", "5T", "5L65", "4T", "4L65"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - block: ["6T", "5T", "4T"], - bodyslam: ["7L20", "6L15", "6S5", "5L15", "4L15", "3T", "3L20", "3S0"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brine: ["4M"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L50", "6M", "6L50", "5M", "5L60", "4M", "4L30", "3M", "3L30", "3S0"], + wormadamtrash: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bugbite: ["7T", "7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], confide: ["7M", "6M"], - defensecurl: ["3T"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["7L80", "6L80", "5L80", "4L65", "3T", "3L65", "3S1"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - earthquake: ["7M", "6M", "5M", "4M", "3M"], - endure: ["4M", "3T"], - facade: ["7M", "6M", "5M", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["7T", "6T", "5T"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flail: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M", "3M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hydropump: ["7L75", "6L75", "5L90", "4L45", "3L45", "3S0", "3S1"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icebeam: ["7M", "7L35", "6M", "6L35", "6S5", "6S6", "5M", "5L35", "5S3", "5S4", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], - icywind: ["6T", "5T", "4T", "3T"], - ironhead: ["6T", "5T", "4T"], - mimic: ["3T"], - muddywater: ["7L60", "6L20", "5L20", "4L20"], - mudslap: ["4T", "3T"], + gunkshot: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "7L47", "6T", "6L47", "5T", "5L47", "4T", "4L47"], + magnetrise: ["7T", "6T", "5T", "4T"], + metalburst: ["7L1"], + metalsound: ["7L29", "6L29", "5L29", "4L29"], + mirrorshot: ["7L26", "6L26", "5L26", "4L26"], naturalgift: ["4M"], - originpulse: ["7L45", "6L45", "6S5"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "4L50", "3M", "3L50", "3S1"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - scald: ["7M", "6M", "5M"], - scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], - secretpower: ["6M", "4M", "3M"], - sheercold: ["7L65", "6L65", "6S6", "5L75", "5S4", "4L60", "3L60", "3S1"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - thunder: ["7M", "6M", "6S6", "5M", "5S3", "5S4", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["7L1", "6T", "6L1", "5L1", "4M", "4L1", "3M", "3L1"], - waterspout: ["7L90", "6L50", "6S6", "5L50", "5S3", "5S4", "4L50", "4S2", "3L75"], - whirlpool: ["4M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["7T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], }}, - groudon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], - block: ["6T", "5T", "4T"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - bulkup: ["7M", "7L50", "6M", "6L50", "5M", "5L60", "4M", "4L30", "3M", "3L30", "3S0"], - bulldoze: ["7M", "6M", "5M"], + mothim: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + airslash: ["7L41", "6L41", "5L41", "4L41"], + attract: ["7M", "6M", "5M", "4M"], + bugbite: ["7T", "7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50", "6L47", "5L47", "4L47"], + camouflage: ["7L35", "6L35", "5L35", "4L35"], + captivate: ["4M"], confide: ["7M", "6M"], - counter: ["3T"], - cut: ["6M", "5M", "4M", "3M"], - defensecurl: ["3T"], - dig: ["6M", "5M", "4M", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dragonclaw: ["7M", "6M", "5M", "4M", "3M"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "6M", "5M"], - dynamicpunch: ["3T"], - earthpower: ["7L15", "6T", "6L15", "5T", "5L65", "5S4", "4T", "4L65"], - earthquake: ["7M", "7L35", "6M", "6L35", "6S5", "5M", "5L35", "5S3", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], - endure: ["4M", "3T"], - eruption: ["7L90", "6L50", "5L50", "5S3", "5S4", "4L50", "4S2", "3L75"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "7L75", "6M", "6L75", "5M", "5L90", "4M", "4L45", "3M", "3L45", "3S0", "3S1"], - firepunch: ["6T", "6S6", "5T", "4T", "3T"], - fissure: ["7L65", "6L65", "5L75", "4L60", "3L60", "3S1"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + defog: ["7T", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["7T", "6T", "5T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - hammerarm: ["7L80", "6L20", "6S6", "5L20", "5S4", "4L20"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - lavaplume: ["7L20", "6L15", "6S5", "5L15", "4L15"], - megakick: ["3T"], - megapunch: ["3T"], - mimic: ["3T"], - mudshot: ["7L1", "6L1", "5L1", "4L1", "3L1"], - mudslap: ["4T", "3T"], + gust: ["7L26", "6L26", "5L26", "4L26"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + lunge: ["7L47"], + mudslap: ["4T"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - poweruppunch: ["6M"], - precipiceblades: ["7L45", "6L45", "6S5"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - rest: ["7M", "7L30", "6M", "6L30", "6S5", "5M", "5L30", "4M", "4L30", "4S2", "3M", "3L50", "3S1"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "6S6", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - rollout: ["4T", "3T"], + ominouswind: ["4T"], + poisonpowder: ["7L29", "6L29", "5L29", "4L29"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1", "6L50", "5L50"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], - secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - slash: ["4L20", "3L20", "3S0"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "7L60", "6M", "6L60", "6S6", "5M", "5L80", "5S3", "5S4", "4M", "4L65", "3M", "3L65", "3S1"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M", "3T"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - uproar: ["6T", "5T", "4T"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["7L38", "6L38", "5L38", "4M", "4L38"], + skillswap: ["7T", "6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], }}, - rayquaza: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - airslash: ["7L30", "6L30", "5L35", "4L35", "4S1"], - ancientpower: ["7L15", "6L15", "5L45", "5S2", "4T", "4L15", "4S1", "3L15"], - aquatail: ["6T", "5T", "4T"], - avalanche: ["4M"], - bind: ["6T", "5T"], - blizzard: ["7M", "6M", "5M", "4M", "3M"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - bulkup: ["7M", "6M", "5M", "4M", "3M"], - bulldoze: ["7M", "6M", "5M"], - celebrate: ["6S7"], + combee: {learnset: { + aircutter: ["5D", "4T"], + bugbite: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + bugbuzz: ["7L29", "6L29", "5L29"], + endeavor: ["7T", "6T", "5T", "4T"], + gust: ["7L1", "6L1", "5D", "5L1", "4L1"], + mudslap: ["4T"], + ominouswind: ["4T"], + snore: ["7T", "6T", "5T", "4T"], + stringshot: ["4T"], + sweetscent: ["7L1", "6L1", "5L1", "4L1"], + swift: ["4T"], + tailwind: ["7T", "6T", "5D", "5T", "4T"], + }}, + vespiquen: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + airslash: ["7L37", "6L37", "5L37"], + attackorder: ["7L45", "6L45", "5L37", "4L37"], + attract: ["7M", "6M", "5M", "4M"], + bugbite: ["7T", "6T", "5T", "4T"], + captivate: ["7L41", "6L41", "5L33", "4M", "4L33"], confide: ["7M", "6M"], - crunch: ["7L20", "6L15", "5L15", "4L15", "3L35"], - dive: ["6M", "5M", "4T", "3M"], - doubleedge: ["3T"], - doubleteam: ["7M", "6M", "5M", "4M", "3M"], - dracometeor: ["7T", "6T", "6S7", "5T", "4T"], - dragonascent: ["7T", "6T", "6S4", "6S6", "6S7"], - dragonclaw: ["7M", "6M", "6S6", "5M", "4M", "4L20", "3M", "3L20"], - dragondance: ["7L60", "6L60", "6S4", "6S6", "5L60", "5S2", "4L30", "3L30"], - dragonpulse: ["7L50", "6T", "6L50", "6S4", "6S5", "5T", "5L90", "5S2", "5S3", "4M", "4L75"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "6S6", "5M", "4M", "3M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - extremespeed: ["7L45", "6L45", "6S4", "6S5", "5L75", "5S3", "4L60", "3L60", "3S0"], - facade: ["7M", "6M", "5M", "4M", "3M"], - fireblast: ["7M", "6M", "5M", "4M", "3M"], - flamethrower: ["7M", "6M", "5M", "4M", "3M"], + confuseray: ["7L1", "6L1", "5L7", "4L7"], + cut: ["6M", "5M", "4M"], + defendorder: ["7L17", "6L17", "5L13", "4L13"], + defog: ["7T", "4M"], + destinybond: ["7L53", "7L1", "6L1", "5L43", "4L43"], + doubleteam: ["7M", "6M", "5M", "4M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L57", "7L1", "6L1"], + flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - fly: ["7M", "7L65", "6M", "6L65", "6S7", "5M", "5L65", "4M", "4L45", "3M", "3L45", "3S0"], - focusblast: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - furycutter: ["4T", "3T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L5", "6L5", "5L9", "4T", "4L9"], + furyswipes: ["7L13", "6L13", "5L19", "4L19"], gigaimpact: ["7M", "6M", "5M", "4M"], - gyroball: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + gust: ["7L1", "6L1", "5L1", "4L1"], + healorder: ["7L29", "6L29", "5L25", "4L25"], + hiddenpower: ["7M", "6M", "5M", "4M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L90", "6M", "6L80", "5M", "5L80", "5S3", "4M", "4L65", "3M", "3L75"], - hypervoice: ["7L75", "6T", "6L20", "5T", "5L20", "4L20"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icywind: ["6T", "5T", "4T", "3T"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M", "3M"], - mimic: ["3T"], - mudslap: ["4T", "3T"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + laserfocus: ["7T"], + mudslap: ["4T"], naturalgift: ["4M"], - outrage: ["7L80", "6T", "6L50", "5T", "5L50", "5S2", "4T", "4L50", "4S1", "3L65", "3S0"], - overheat: ["7M", "6M", "5M", "4M", "3M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "7L35", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S1", "3M", "3L50", "3S0"], - return: ["7M", "6M", "5M", "4M", "3M"], - roar: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M"], + ominouswind: ["4T"], + poisonsting: ["7L1", "6L1", "5L3", "4L3"], + powergem: ["7L25", "6L25", "5L21", "4L21"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L9", "6L9", "5L15", "4L15"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], - secretpower: ["6M", "4M", "3M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M", "3M"], - skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - surf: ["7M", "6M", "5M", "4M", "3M"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["4T", "3T"], - swordsdance: ["7M", "6M", "5M", "4M"], - tailwind: ["6T", "5T", "4T"], - thunder: ["7M", "6M", "6S5", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - twister: ["7L1", "6L1", "6S5", "5L1", "4T", "4L1", "3L1"], - uproar: ["6T", "5T", "4T"], - vcreate: ["5S3"], - waterfall: ["7M", "6M", "5M", "4M", "3M"], - waterpulse: ["6T", "4M", "3M"], - whirlpool: ["4M"], + secretpower: ["6M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["4M"], + slash: ["7L1", "6L21", "5L31", "4L31"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L49", "6M", "6L49", "5M", "5L39", "4M", "4L39"], + sweetscent: ["7L1", "6L1", "5L1", "4L1"], + swift: ["4T"], + tailwind: ["7T", "6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7L33", "6M", "6L33", "5M", "5L27", "4M", "4L27"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - jirachi: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - ancientpower: ["4T"], - bodyslam: ["3T"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], + pachirisu: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + babydolleyes: ["7E"], + bestow: ["7E", "6E", "5E"], + bide: ["7L1", "6L1", "5L1", "4L1"], + bite: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + charge: ["7E", "6E", "5E"], chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L9", "6L9", "5L9", "4L9"], 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"], - 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"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], + covet: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4E"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + discharge: ["7L41", "6L41", "5L41", "4L29"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L25", "6L25", "5L25"], + electroweb: ["7T", "6T"], + endure: ["7L17", "6L17", "5L17", "4M", "4L17"], + facade: ["7M", "6M", "5M", "4M"], + faketears: ["7E", "6E", "5E", "4E"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + flatter: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], - followme: ["5S14"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - futuresight: ["7L55", "6L55", "5L55", "4L55", "3L40"], - gigaimpact: ["7M", "6M", "5M", "4M"], + followme: ["7E", "6E", "6S0", "5E"], + frustration: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - happyhour: ["6S20"], + growl: ["7L1", "6L1", "5L1", "4L1"], + gunkshot: ["7T", "6T", "5T", "4T"], 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"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], - lastresort: ["7L65", "6T", "6L65", "5T", "5L65", "4T", "4L65"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - meteormash: ["5S13", "5S14", "5S15"], - metronome: ["3T"], - mimic: ["3T"], - moonblast: ["6S17"], - mudslap: ["4T", "3T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperfang: ["7L49", "6L49", "5L49"], + iondeluge: ["7E", "6E"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + laserfocus: ["7T"], + lastresort: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L37"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], + mudslap: ["4T"], naturalgift: ["4M"], - nightmare: ["3T"], - playrough: ["6S19"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], - 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"], + nuzzle: ["7L19", "6L19", "6S0"], + protect: ["7M", "6M", "6S0", "5M", "4M"], + quickattack: ["7L5", "6L5", "5D", "5L5", "4L5"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["7E", "6E", "5E", "4T", "4E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - sandstorm: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snore: ["6T", "5T", "4T", "3T"], - stealthrock: ["6T", "5T", "4M"], - 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"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shockwave: ["7T", "6T", "5D", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + substitute: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "7L37", "6T", "6L37", "6S0", "5T", "5L37", "4T", "4L33"], + swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7L29", "6L29", "5L29", "4L25"], + swift: ["7L21", "6L21", "5L21", "4T", "4L21"], + tailwhip: ["7E", "6E", "5E"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + thunderwave: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "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"], - zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + voltswitch: ["7M", "6M", "5M"], }}, - deoxys: {learnset: { - aerialace: ["7M", "6M", "5M", "4M", "3M"], - agility: ["7L55", "6L55", "5L73", "4L73", "3L35"], - allyswitch: ["5M"], - amnesia: ["7L55", "6L55", "5L73", "4L73", "3L35"], - avalanche: ["4M"], - bind: ["6T", "5T"], - bodyslam: ["3T"], - brickbreak: ["7M", "6M", "5M", "4M", "3M"], - brutalswing: ["7M"], - calmmind: ["7M", "6M", "5M", "4M", "3M"], - chargebeam: ["7M", "6M", "5M", "4M"], + buizel: {learnset: { + agility: ["7L41", "6L41", "5L28", "4L28"], + aquajet: ["7L24", "6L24", "5L21", "4L21"], + aquaring: ["7E", "6E", "5E"], + aquatail: ["7T", "7L38", "7E", "6T", "6L38", "6E", "5T", "5L55", "5E"], + attract: ["7M", "6M", "5M", "4M"], + batonpass: ["7E", "6E", "5E", "4E"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], confide: ["7M", "6M"], - cosmicpower: ["7L55", "6L55", "6S10", "5L73", "4L73", "3L35", "3S3"], - counter: ["7L73", "6L73", "5L97", "4L97", "4S6", "3T", "3L50"], - cut: ["6M", "5M", "4M", "3M"], - darkpulse: ["7M", "6M", "5S9"], - detect: ["4S6"], - doubleedge: ["3T"], - doubleteam: ["7L13", "7M", "6M", "6L13", "5M", "5L17", "4M", "4L17", "4S5", "3M", "3L10"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M", "3T"], - dynamicpunch: ["3T"], - endure: ["4M", "3T"], - energyball: ["7M", "6M", "5M", "4M"], - extremespeed: ["7L73", "6L73", "5L97", "4L97", "4S4", "4S5", "3L50"], - facade: ["7M", "6M", "5M", "4M", "3M"], - firepunch: ["6T", "5T", "4T", "3T"], - flash: ["6M", "5M", "4M", "3M"], - flashcannon: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M", "3M"], - frustration: ["7M", "6M", "5M", "4M", "3M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M", "3M"], - hyperbeam: ["7M", "7L73", "6M", "6L73", "6S10", "5M", "5L97", "4M", "4L97", "4S7", "3M", "3L50", "3S3"], - icebeam: ["7M", "6M", "5M", "4M", "3M"], - icepunch: ["6T", "5T", "4T", "3T"], - icywind: ["6T", "5T", "4T", "3T"], - irondefense: ["7L55", "6T", "6L55", "5T", "5L73", "4L73", "4S4", "3L35"], - knockoff: ["7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25", "3L15", "3S1", "3S2"], - leer: ["7L1", "6L1", "5L1", "4L1", "4S8", "3L1"], - lightscreen: ["7M", "6M", "5M", "4M", "3M"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T", "4T"], - megakick: ["3T"], - megapunch: ["3T"], - meteormash: ["4S7"], - mimic: ["3T"], - mirrorcoat: ["7L73", "6L73", "5L97", "4L97", "4S6", "3L50"], - mudslap: ["4T", "3T"], - nastyplot: ["5S9"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doublehit: ["7L27", "6L27", "5L27"], + doubleslap: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7E", "6E", "5E", "4E"], + furyswipes: ["7E", "6E", "5E", "4E"], + growl: ["7L4", "6L4", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + helpinghand: ["7T", "7E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hydropump: ["7L45", "6L45", "5L45"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + mefirst: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E", "4T", "4E"], naturalgift: ["4M"], - nightmare: ["3T"], - nightshade: ["7L7", "6L7", "5L9", "4L9", "4S8", "3L5"], - poisonjab: ["7M", "6M", "5M", "4M"], + odorsleuth: ["7E", "6E", "5E", "4E"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M", "3M"], - psychic: ["7M", "7L31", "6M", "6L31", "5M", "5L41", "4M", "4L41", "3M", "3L25", "3S0", "3S1", "3S2"], - psychoboost: ["7L67", "6L67", "6S10", "5L89", "5S9", "4L89", "4S4", "4S5", "4S6", "4S7", "4S8", "3L45", "3S3"], - psychoshift: ["7L43", "6L43", "5L57", "4L57"], - psychup: ["7M", "6M", "5M", "4M", "3T"], - psyshock: ["7M", "6M", "5M"], - pursuit: ["7L25", "6L25", "5L33", "4L33", "3L20", "3S0", "3S2"], - raindance: ["7M", "6M", "5M", "4M", "3M"], - recover: ["7L61", "6L61", "6S10", "5L81", "5S9", "4L81", "3L40", "3S3"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M", "3M"], - rest: ["7M", "6M", "5M", "4M", "3M"], - return: ["7M", "6M", "5M", "4M", "3M"], - rockslide: ["7M", "6M", "5M", "4M", "3T"], - rocksmash: ["6M", "5M", "4M", "3M"], - rocktomb: ["7M", "6M", "5M", "4M", "3M"], - roleplay: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L18", "6L18", "5L10", "4L10"], + quickattack: ["7L11", "6L11", "5L3", "4L3"], + raindance: ["7M", "6M", "5M", "4M"], + razorwind: ["7L35", "6L35", "5L45", "4L45"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M", "3M"], - secretpower: ["6M", "4M", "3M"], - seismictoss: ["3T"], - shadowball: ["7M", "6M", "5M", "4M", "3M"], - shockwave: ["6T", "4M", "3M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M", "3M"], - sleeptalk: ["7M", "6M", "5T", "4M", "3T"], - snatch: ["7L37", "6T", "6L37", "5T", "5L49", "4M", "4L49", "3M", "3L30", "3S1"], - snore: ["6T", "5T", "4T", "3T"], - solarbeam: ["7M", "6M", "5M", "4M", "3M"], - spikes: ["7L25", "6L25", "5L33", "4L33", "3L20", "3S1"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M", "3M"], - substitute: ["7M", "6M", "5M", "4M", "3T"], - sunnyday: ["7M", "6M", "5M", "4M", "3M"], - superpower: ["7L37", "6T", "6L37", "5L49", "4L49", "4S7", "3S0"], - swagger: ["7M", "6M", "5M", "4M", "3T"], - swift: ["7L37", "6L37", "5L49", "4T", "4L49", "4S5", "3T", "3L30", "3S2"], - taunt: ["7L19", "7M", "6M", "6L19", "5M", "5L25", "4M", "4L25", "3M", "3L15", "3S0"], - telekinesis: ["5M"], - teleport: ["7L13", "6L13", "5L17", "4L17", "3L10"], - thunder: ["7M", "6M", "5M", "4M", "3M"], - thunderbolt: ["7M", "6M", "5M", "4M", "3M"], - thunderpunch: ["6T", "5T", "4T", "3T"], - thunderwave: ["7M", "6M", "5M", "4M", "3T"], - torment: ["7M", "6M", "5M", "4M", "3M"], - toxic: ["7M", "6M", "5M", "4M", "3M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M", "3M"], - wonderroom: ["6T", "5T"], - wrap: ["7L1", "6L1", "5L1", "4L1", "4S8", "3L1"], - zapcannon: ["7L61", "6L61", "5L81", "4L81", "4S4", "3L40"], - zenheadbutt: ["7L49", "6T", "6L49", "5T", "5L65", "4T", "4L65"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + slash: ["7E", "6E", "5D", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + soak: ["7E", "6E"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "6L21", "5L15", "4T", "4L15"], + switcheroo: ["7E", "6E", "5E"], + tailslap: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L15", "6L15", "5D", "5L6", "4L6"], + waterpulse: ["7T", "6T", "5D", "4M"], + watersport: ["7L7", "6L7", "5D", "5L1", "4L1"], + whirlpool: ["7L31", "6L31", "5L36", "4M", "4L36"], }}, - turtwig: {learnset: { - absorb: ["7L9", "6L9", "5L9", "5S0", "5S1", "4L9"], - amnesia: ["7E", "6E", "5E", "4E"], + floatzel: {learnset: { + agility: ["7L51", "6L51", "5L29", "4L29"], + aquajet: ["7L24", "6L24", "5L21", "4L21"], + aquatail: ["7T", "7L46", "6T", "6L46", "5T", "5L62", "4T"], attract: ["7M", "6M", "5M", "4M"], - bite: ["7L21", "6L21", "5L21", "4L21"], - bodyslam: ["7E", "6E", "5E", "4E"], - bulletseed: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulkup: ["7M", "6M", "5M", "4M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L37", "6L37", "5L37", "4L37"], - curse: ["7L17", "6L17", "5L17", "4L17"], - cut: ["6M", "5M", "4M"], - doubleedge: ["7E", "6E", "5E", "4E"], + crunch: ["7L1", "6L1", "5L26", "4L26"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doublehit: ["7L29", "6L29", "5L29"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["7E", "6T", "6E", "5T", "5E", "4T"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["7L41", "6T", "6L41", "5T", "5L41", "4M", "4L41"], - grassknot: ["7M", "6M", "5M", "4M"], - grasspledge: ["7T", "6T", "5T"], - grassyterrain: ["7E", "6E"], - growth: ["7E", "6E", "5E", "4E"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + helpinghand: ["7T"], hiddenpower: ["7M", "6M", "5M", "4M"], - irontail: ["6T", "5T", "4M"], - leafstorm: ["7L45", "6L45", "5L45", "4L45"], - leechseed: ["7L29", "6L29", "5L29", "4L29"], - lightscreen: ["7M", "6M", "5M", "4M"], - megadrain: ["7L25", "6L25", "5L25", "4L25"], + hydropump: ["7L57", "6L57", "5L57"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], - razorleaf: ["7L13", "6L13", "5L13", "4L13"], - reflect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L18", "6L18", "5L10", "4L10"], + quickattack: ["7L11", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + razorwind: ["7L41", "6L41", "5L50", "4L50"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], + roar: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandtomb: ["7E", "6E", "5E", "4E"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - spitup: ["7E", "6E", "5E", "4E"], - stealthrock: ["6T", "5T", "4M"], - stockpile: ["7E", "6E", "5E", "5S1", "4E"], + snore: ["7T", "6T", "5T", "4T"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swallow: ["7E", "6E", "5E", "4E"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33"], - tackle: ["7L1", "6L1", "5L1", "5S0", "5S1", "4L1"], - thrash: ["7E", "6E", "5E", "4E"], - tickle: ["7E", "6E", "5E", "4E"], + swift: ["7L21", "6L21", "5L15", "4T", "4L15"], + taunt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - wideguard: ["7E", "6E", "5E"], - withdraw: ["7L5", "6L5", "5L5", "5S0", "5S1", "4L5"], - workup: ["7M"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L15", "6L15", "5L6", "4L6"], + waterpulse: ["7T", "6T", "4M"], + watersport: ["7L7", "7L1", "6L1", "5L1", "4L1"], + whirlpool: ["7L35", "6L35", "5L39", "4M", "4L39"], }}, - grotle: {learnset: { - absorb: ["7L9", "7L1", "6L9", "5L9", "4L9"], + cherubi: {learnset: { + aromatherapy: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M"], - bite: ["7L22", "6L22", "5L22", "4L22"], - bulletseed: ["4M"], + bulletseed: ["5D", "4M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L42", "6L42", "5L42", "4L42"], - curse: ["7L17", "6L17", "5L17", "4L17"], - cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], endure: ["4M"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], + flowershield: ["7E", "6E"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["7L47", "6T", "6L47", "5T", "5L47", "4M", "4L47"], + gigadrain: ["7T", "6T", "5T", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - grasspledge: ["7T", "6T", "5T"], - headbutt: ["4T"], + grasswhistle: ["7E", "6E", "5E", "4E"], + grassyterrain: ["7E"], + growth: ["7L7", "6L7", "5L7", "4L7"], + healingwish: ["7E", "6E", "5E"], + healpulse: ["7E", "6E", "5D", "5E"], + helpinghand: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], hiddenpower: ["7M", "6M", "5M", "4M"], - irontail: ["6T", "5T", "4M"], - leafstorm: ["7L52", "6L52", "5L52", "4L52"], - leechseed: ["7L32", "6L32", "5L32", "4L32"], - lightscreen: ["7M", "6M", "5M", "4M"], - megadrain: ["7L27", "6L27", "5L27", "4L27"], - mudslap: ["4T"], - naturalgift: ["4M"], - naturepower: ["7M", "6M"], + leechseed: ["7L10", "6L10", "5D", "5L10", "4L10"], + luckychant: ["7L40", "6L40", "5L40", "4L40"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19"], + morningsun: ["7L1", "6L1", "5L1"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], + petalblizzard: ["7L47", "6L47"], protect: ["7M", "6M", "5M", "4M"], - razorleaf: ["7L13", "6L13", "5L13", "4L13"], - reflect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7E", "6E", "5E", "4E"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M"], + rollout: ["7E", "6E", "5E", "4T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], + sunnyday: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], swagger: ["7M", "6M", "5M", "4M"], + sweetscent: ["7E", "6E", "5E", "4E"], swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + synthesis: ["7T", "6T", "5T", "4T"], tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L31", "6L31", "5L31", "4L31"], + tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M"], - withdraw: ["7L5", "7L1", "6L1", "5L1", "4L1"], - workup: ["7M"], - worryseed: ["6T", "5T", "4T"], + weatherball: ["7E", "6E", "5E", "4E"], + worryseed: ["7T", "7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28"], }}, - torterra: {learnset: { - absorb: ["7L9", "7L1", "6L1", "5L1", "4L1"], + cherrim: {learnset: { attract: ["7M", "6M", "5M", "4M"], - bite: ["7L22", "6L22", "5L22", "4L22"], - block: ["6T", "5T", "4T"], - bulldoze: ["7M", "6M", "5M"], bulletseed: ["4M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L45", "6L45", "5L45", "4L45"], - curse: ["7L17", "6L17", "5L17", "4L17"], - cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "5S0", "4M", "4L32"], endure: ["4M"], energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], - frenzyplant: ["7T", "6T", "5T", "4T"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["7L51", "6T", "6L51", "5T", "5L51", "4M", "4L51"], + gigadrain: ["7T", "6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - grasspledge: ["7T", "6T", "5T"], - headbutt: ["4T"], + growth: ["7L7", "7L1", "6L1", "5L1", "4L1"], + helpinghand: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - leafstorm: ["7L57", "6L57", "5L57", "4L57"], - leechseed: ["7L33", "6L33", "5L33", "4L33"], - lightscreen: ["7M", "6M", "5M", "4M"], - megadrain: ["7L27", "6L27", "5L27", "4L27"], - mudslap: ["4T"], + laserfocus: ["7T"], + leechseed: ["7L10", "7L1", "6L10", "5L10", "4L10"], + luckychant: ["7L48", "6L48", "5L48", "4L48"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19"], + morningsun: ["7L1", "6L1", "5L1"], naturalgift: ["4M"], naturepower: ["7M", "6M"], - outrage: ["6T", "5T", "5S0", "4T"], + petalblizzard: ["7L50", "6L50"], + petaldance: ["7L1", "6L25", "5L25", "4L25"], protect: ["7M", "6M", "5M", "4M"], - razorleaf: ["7L13", "7L1", "6L1", "5L1", "4L1"], - reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], + seedbomb: ["7T", "6T", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "5S0", "4M"], - strength: ["6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], + sunnyday: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], swagger: ["7M", "6M", "5M", "4M"], swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39"], + synthesis: ["7T", "6T", "5T", "4T"], tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L35", "6L35", "5L35", "4L35"], toxic: ["7M", "6M", "5M", "4M"], - withdraw: ["7L5", "7L1", "6L1", "5L1", "4L1"], - woodhammer: ["7L1", "6L1", "5L1", "5S0", "4L1"], - workup: ["7M"], - worryseed: ["6T", "5T", "4T"], + worryseed: ["7T", "7L30", "6T", "6L30", "5T", "5L30", "4T", "4L30"], }}, - chimchar: {learnset: { - acrobatics: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - aerialace: ["7M", "6M", "5M", "4M"], - assist: ["7E", "6E", "5E", "4E"], + shellos: {learnset: { + acidarmor: ["7E", "6E"], + amnesia: ["7E", "6E", "5E", "4E"], + ancientpower: ["4T"], attract: ["7M", "6M", "5M", "4M"], - blazekick: ["7E", "6E", "5E", "4E"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["7L29", "6L29", "5L29", "4L29"], + brine: ["7E", "6E", "5E", "4M"], captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], counter: ["7E", "6E", "5E", "4E"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M"], - dig: ["6M", "5M", "4M"], - doublekick: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E"], + dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - ember: ["7L7", "6L7", "5L7", "5S1", "5S3", "4L7"], - encore: ["7E", "6E", "5E", "4E"], - endeavor: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], endure: ["4M"], - facade: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31"], - fakeout: ["7E", "6E", "5E", "5S3", "4E"], - fireblast: ["7M", "6M", "5M", "4M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - firespin: ["7L33", "6L33", "5L33", "4L33"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L41", "4S0", "4S2"], - flamewheel: ["7L17", "6L17", "5L17", "4L17"], - fling: ["7M", "6M", "5M", "4M"], - focusenergy: ["7E", "6E", "5E", "4E"], - focuspunch: ["7E", "6T", "6E", "5E", "4M"], + facade: ["7M", "6M", "5M", "4M"], + fissure: ["7E", "6E", "5E", "4E"], frustration: ["7M", "6M", "5M", "4M"], - furyswipes: ["7L15", "6L15", "5L15", "4L15"], - grassknot: ["7M", "6M", "5M", "4M", "4S0", "4S2"], - gunkshot: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M"], + harden: ["7L4", "6L4", "5L4", "4L4"], headbutt: ["4T"], - heatwave: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "4S0", "4S2"], - hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], - leer: ["7L1", "6L1", "5L1", "5S1", "5S3", "4L1"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - mudslap: ["4T"], - nastyplot: ["7L23", "6L23", "5L23", "4L23"], + hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + infestation: ["7M", "6M"], + memento: ["7E", "6E", "5E", "4E"], + mirrorcoat: ["7E", "6E", "5E", "4E"], + mist: ["7E", "6E", "5E"], + mudbomb: ["7L11", "6L11", "5L11", "4L11"], + muddywater: ["7L37", "6L37", "5L37", "4L37"], + mudslap: ["7L1", "6L1", "5D", "5L1", "4T", "4L1"], + mudsport: ["7L2", "6L2", "5L2", "4L2"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M"], - quickguard: ["7E", "6E", "5E"], + raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + recover: ["7L46", "6L46", "5L46", "4L46"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "5S1", "4L1"], - secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slackoff: ["7L41", "6L41", "5L41", "4L39"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "5D", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M"], - submission: ["7E", "6E", "5E"], + sludge: ["7E", "6E", "5E", "4E"], + snore: ["7T", "6T", "5T", "4T"], + spitup: ["7E", "6E", "5E", "4E"], + stockpile: ["7E", "6E", "5E", "4E"], + stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "5S1", "5S3", "4M", "4L9"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "4S0", "4S2"], - torment: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + swallow: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - vacuumwave: ["4T"], - willowisp: ["7M", "6M", "5M", "4M"], - workup: ["7M"], + trumpcard: ["7E", "6E", "5E", "4E"], + waterpulse: ["7T", "7L7", "6T", "6L7", "5L7", "4M", "4L7"], + whirlpool: ["4M"], + yawn: ["7E", "6E", "5D", "5E", "4E"], }}, - monferno: {learnset: { - acrobatics: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], - aerialace: ["7M", "6M", "5M", "4M"], + gastrodon: {learnset: { + ancientpower: ["4T"], attract: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + block: ["7T", "6T", "5T", "4T"], + bodyslam: ["7L29", "6L29", "5L29", "4L29"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - closecombat: ["7L36", "6L36", "5L36", "4L36"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M"], dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - dualchop: ["6T", "5T"], - ember: ["7L7", "7L1", "6L1", "5L1", "4L1"], - endeavor: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - feint: ["7L26", "6L26", "5L26", "4L26"], - fireblast: ["7M", "6M", "5M", "4M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T", "4T"], - firespin: ["7L39", "6L39", "5L39", "4L39"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M", "4M"], - flamewheel: ["7L19", "6L19", "5L19", "4L19"], - flareblitz: ["7L56", "6L56", "5L56", "4L49"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + flash: ["6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furyswipes: ["7L16", "6L16", "5L16", "4L16"], - grassknot: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + harden: ["7L4", "7L1", "6L1", "5L1", "4L1"], headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], - leer: ["7L1", "6L1", "5L1", "4L1"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - machpunch: ["7L1", "6L14", "5L14", "4L14"], - mudslap: ["4T"], + hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + infestation: ["7M", "6M"], + mudbomb: ["7L11", "6L11", "5L11", "4L11"], + muddywater: ["7L41", "6L41", "5L41", "4L41"], + mudslap: ["7L1", "6L1", "5L1", "4T", "4L1"], + mudsport: ["7L2", "7L1", "6L1", "5L1", "4L1"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + recover: ["7L54", "6L54", "5L54", "4L54"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], - rollout: ["4T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slackoff: ["7L49", "6L49", "5L49", "4L46"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], + stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "4M", "4L9"], - thunderpunch: ["6T", "5T", "4T"], - torment: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], toxic: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "6M", "5M", "4M"], - vacuumwave: ["4T"], - willowisp: ["7M", "6M", "5M", "4M"], - workup: ["7M", "5M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "7L7", "7L1", "6T", "6L1", "5L1", "4M", "4L1"], + whirlpool: ["4M"], }}, - infernape: {learnset: { - acrobatics: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], - aerialace: ["7M", "6M", "5M", "4M"], + drifloon: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aircutter: ["4T"], + allyswitch: ["7T"], + amnesia: ["7L40", "6L40", "5L40"], + astonish: ["7L4", "6L4", "5L6", "4L6"], attract: ["7M", "6M", "5M", "4M"], - blastburn: ["7T", "6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "7L58", "6M", "6L58", "5M", "5L58", "4M", "4L53"], + batonpass: ["7L44", "6L44", "5L38", "4L33"], + bind: ["7T", "6T", "5T"], + bodyslam: ["7E", "6E", "5E", "4E"], + calmmind: ["7M", "6M", "5M", "4M"], captivate: ["4M"], - closecombat: ["7L1", "6L36", "6S1", "5L36", "5S0", "4L41"], + chargebeam: ["7M", "6M", "5M", "4M"], + clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + constrict: ["7L1", "6L1", "5L1", "4L1"], cut: ["6M", "5M", "4M"], - dig: ["6M", "5M", "4M"], + defog: ["7T", "7E", "6E", "5E", "4M"], + destinybond: ["7E", "6E", "5E", "4E"], + disable: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], - dualchop: ["6T", "5T"], - earthquake: ["7M", "6M", "5M", "4M"], - ember: ["7L7", "7L1", "6L1", "5L1", "4L1"], - endeavor: ["6T", "5T", "4T"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M"], + explosion: ["7M", "7L50", "6M", "6L50", "5M", "5L46", "4M", "4L43"], facade: ["7M", "6M", "5M", "4M"], - feint: ["7L26", "6L26", "5L26", "4L29"], - fireblast: ["7M", "6M", "6S1", "5M", "5S0", "4M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "6S1", "5T", "4T"], - firespin: ["7L42", "6L42", "5L42", "4L45"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M", "4M"], - flamewheel: ["7L19", "6L19", "5L19", "4L21"], - flareblitz: ["7L68", "7L1", "6L1", "5L68", "4L57"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "6S1", "4M"], + flash: ["6M", "5M", "4M"], + focusenergy: ["7L13", "6L13", "5L14", "4L14"], frustration: ["7M", "6M", "5M", "4M"], - furyswipes: ["7L16", "6L16", "5L16", "4L17"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "5S0", "4M"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], + gust: ["7L8", "6L8", "5L11", "4L11"], + gyroball: ["7M", "6M", "5M", "4M"], + haze: ["7E", "6E", "5E", "4E"], + hex: ["7L27", "6L27", "5L22"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], - leer: ["7L1", "6L1", "5L1", "4L1"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - machpunch: ["7L1", "6L14", "5L14", "4L14"], + hypnosis: ["7E", "6E", "5D", "5E", "4E"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], + memento: ["7E", "6E", "5E", "4E"], + minimize: ["7L1", "6L1", "5D", "5L1", "4L1"], mudslap: ["4T"], naturalgift: ["4M"], - overheat: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + ominouswind: ["7L20", "6L20", "5L33", "4T", "4L30"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], protect: ["7M", "6M", "5M", "4M"], - punishment: ["7L29", "6L29", "5L29", "4L33"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7T", "6T", "5T", "4M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], rollout: ["4T"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1"], secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], + shadowball: ["7M", "7L36", "6M", "6L36", "5M", "5L43", "4M", "4L38"], + shockwave: ["7T", "6T", "4M"], + silverwind: ["4M"], + skillswap: ["7T", "6T", "5D", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + spitup: ["7L32", "6L32", "5L30", "4L27"], + stockpile: ["7L25", "6L25", "5L27", "4L22"], substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7L32", "6L32", "5L30", "4L27"], swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - thunderpunch: ["6T", "5T", "4T"], - torment: ["7M", "6M", "5M", "4M"], + tailwind: ["7T", "7E", "6T", "6E", "5T", "4T"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "6M", "5M", "5S0", "4M"], - vacuumwave: ["4T"], + trick: ["7T", "6T", "5T", "4T"], + weatherball: ["7E", "6E", "5E", "4E"], willowisp: ["7M", "6M", "5M", "4M"], - workup: ["7M", "5M"], }}, - piplup: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - agility: ["7E", "6E", "5E", "4E"], - aquaring: ["7E", "6E", "5E", "4E"], + drifblim: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aircutter: ["4T"], + allyswitch: ["7T"], + amnesia: ["7L46", "6L46", "5L46"], + astonish: ["7L4", "7L1", "6L1", "5L1", "4L1"], attract: ["7M", "6M", "5M", "4M"], - bide: ["7L22", "7E", "6L22", "6E", "5L22", "5E", "4L18"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["7L29", "6L29", "5L29", "4M", "4L29"], - bubble: ["7L8", "6L8", "5L8", "5S0", "5S3", "4L8"], - bubblebeam: ["7L18", "7S5", "6L18", "5L18", "4L18"], + batonpass: ["7L52", "6L52", "5L44", "4L37"], + bind: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M", "4M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + constrict: ["7L1", "6L1", "5L1", "4L1"], cut: ["6M", "5M", "4M"], - defog: ["4M"], - dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], - doublehit: ["7E", "6E", "5E", "4E"], + defog: ["7T", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - drillpeck: ["7L39", "7S5", "6L39", "5L39", "4L39"], - echoedvoice: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M"], + explosion: ["7M", "7L60", "6M", "6L60", "5M", "5L56", "4M", "4L51"], facade: ["7M", "6M", "5M", "4M"], - featherdance: ["7E", "6E", "5E", "5S1", "5S2", "5S3", "4E"], - flail: ["7E", "6E", "5E", "4E"], - fling: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L13", "6L13", "5L14", "4L14"], frustration: ["7M", "6M", "5M", "4M"], - furyattack: ["7L25", "6L25", "5L25", "4L25"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L4", "6L4", "6S4", "5L4", "5S0", "5S3", "4L4"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L8", "7L1", "6L1", "5L1", "4L1"], + gyroball: ["7M", "6M", "5M", "4M"], + hex: ["7L27", "6L27", "5L22"], hiddenpower: ["7M", "6M", "5M", "4M"], - hydropump: ["7L43", "7E", "7S5", "6L43", "6E", "5L43", "5E", "5S1", "4L43", "4E"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["7E", "6T", "6E", "5T", "5E", "4T"], - mist: ["7L36", "6L36", "5L36", "4L36"], - mudslap: ["7E", "6E", "5E", "4T", "4E"], - mudsport: ["7E", "6E", "5E", "4E"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + magiccoat: ["7T", "6T", "5T", "4T"], + minimize: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], naturalgift: ["4M"], - peck: ["7L15", "6L15", "5L15", "5S1", "5S2", "4L15"], - pluck: ["5M", "4M"], - pound: ["7L1", "6L1", "6S4", "5L1", "5S0", "5S3", "4L1"], + ominouswind: ["7L20", "6L20", "5L37", "4T", "4L32"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], + phantomforce: ["7L65", "7L1", "6L1"], protect: ["7M", "6M", "5M", "4M"], - quash: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7T", "6T", "5T", "4M"], rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "6S4", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - round: ["7M", "6M", "5M", "5S2"], - scald: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - signalbeam: ["6T", "5T", "4T"], - sing: ["5S2"], + shadowball: ["7M", "7L40", "6M", "6L40", "5M", "5L51", "4M", "4L44"], + shockwave: ["7T", "6T", "4M"], + silverwind: ["4M"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + spitup: ["7L34", "6L34", "5L32", "4L27"], + stockpile: ["7L25", "6L25", "5L27", "4L22"], substitute: ["7M", "6M", "5M", "4M"], - supersonic: ["7E", "6E", "5E", "4E"], - surf: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7L34", "6L34", "5L32", "4L27"], + swift: ["4T"], + tailwind: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M"], - watersport: ["7L11", "6L11", "5L11", "5S1", "4L11"], - whirlpool: ["7L32", "7S5", "6L32", "5L32", "4M", "4L32"], - workup: ["7M"], - yawn: ["7E", "6E", "5E", "4E"], + trick: ["7T", "6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], }}, - prinplup: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - attract: ["7M", "6M", "5M", "4M"], - bide: ["7L24", "6L24", "5L24", "4L19"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["7L33", "6L33", "5L33", "4M", "4L33"], - bubble: ["7L8", "7L1", "6L8", "5L8", "4L8"], - bubblebeam: ["7L19", "6L19", "5L19", "4L19"], + buneary: {learnset: { + afteryou: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], + agility: ["7L33", "6L33", "5L33", "4L33"], + attract: ["7M", "6M", "5M", "4M", "4E"], + babydolleyes: ["7L13", "6L10"], + batonpass: ["7L26", "6L26", "5L26", "4L26"], + bounce: ["7T", "7L56", "6T", "6L56", "5T", "5L56", "4T", "4L46"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L46", "6L46", "5L46", "4L43"], + circlethrow: ["7E", "6E", "5E"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + copycat: ["7E", "6E", "5E"], + cosmicpower: ["7E", "6E"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M", "4M"], - defog: ["4M"], + defensecurl: ["7L1", "6L1", "5L1", "4L1"], dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], + dizzypunch: ["7L36", "6L36", "5L36", "4L36"], + doublehit: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], - drillpeck: ["7L46", "6L46", "5L46", "4L46"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], + drainpunch: ["7T", "6T", "5D", "5T", "4M"], + encore: ["7E", "6E", "5E", "4E"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7L6", "6L6", "5L6", "4M", "4L6"], + entrainment: ["7L50", "6L50", "5L53"], facade: ["7M", "6M", "5M", "4M"], + fakeout: ["7E", "6E", "5D", "5E", "4E"], + faketears: ["7E", "6E", "5E", "4E"], + firepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + flail: ["7E", "6E", "5E", "4E"], fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furyattack: ["7L28", "6L28", "5L28", "4L28"], + focuspunch: ["7T", "7E", "6T", "6E", "5E", "4M"], + foresight: ["7L1", "6L1", "5D", "5L1", "4L1"], + frustration: ["7M", "7L1", "6M", "6L13", "5M", "5L13", "4M", "4L13"], grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], - hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + healbell: ["7T", "6T", "5T", "4T"], + healingwish: ["7L63", "6L63", "5L63", "4L53"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - hydropump: ["7L50", "6L50", "5L51", "4L51"], + hypervoice: ["7T", "6T", "5T"], icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - metalclaw: ["7L1", "6L16", "5L16", "4L16"], - mist: ["7L42", "6L42", "5L42", "4L42"], + icepunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + irontail: ["7T", "6T", "5T", "4M"], + jumpkick: ["7L23", "6L23", "5L23", "4L23"], + lastresort: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + magiccoat: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], + mudsport: ["7E", "6E"], naturalgift: ["4M"], - peck: ["7L15", "6L15", "5L15", "4L15"], - pluck: ["5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["7E", "6M"], protect: ["7M", "6M", "5M", "4M"], - quash: ["7M", "6M", "5M"], + quickattack: ["7L16", "6L16", "5L16", "4L16"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + skyuppercut: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + splash: ["7L1", "6L1", "5L1", "4L1"], substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - tackle: ["7L1", "6L1", "5L1", "4L1"], + sweetkiss: ["7E", "6E", "5E", "4E"], + swift: ["4T"], + switcheroo: ["7E", "6E", "5E", "4E"], + teeterdance: ["7E", "6E"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "7E", "6T", "6E", "5T", "5E", "4E"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M"], - watersport: ["7L11", "6L11", "5L11", "4L11"], - whirlpool: ["7L37", "6L37", "5L37", "4M", "4L37"], - workup: ["7M"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M"], + workup: ["7M", "5M"], }}, - empoleon: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - aquajet: ["7L1", "6L36", "5L36", "5S0", "4L36"], + lopunny: {learnset: { + afteryou: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], + agility: ["7L33", "6L33", "5L33", "4L33"], attract: ["7M", "6M", "5M", "4M"], - avalanche: ["4M"], + babydolleyes: ["7L13"], + batonpass: ["7L26", "6L26", "5L26", "4L26"], blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["7L33", "6L33", "5L33", "4M", "4L33"], - bubble: ["7L8", "7L1", "6L1", "5L1", "4L1"], - bubblebeam: ["7L19", "6L19", "5L19", "4L19"], - bulldoze: ["7M", "6M", "5M"], + bounce: ["7T", "7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L46"], + brutalswing: ["7M"], captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L46", "6L46", "5L46", "4L43"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M", "4M"], - defog: ["4M"], + defensecurl: ["7L1", "6L1", "5L1", "4L1"], dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], + dizzypunch: ["7L36", "6L36", "5L36", "4L36"], doubleteam: ["7M", "6M", "5M", "4M"], - drillpeck: ["7L52", "6L52", "5L52", "4L52"], - earthquake: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], + drainpunch: ["7T", "6T", "5T", "4M"], + endeavor: ["7T", "6T", "5T", "4T"], + endure: ["7L6", "6L6", "5L6", "4M", "4L6"], + entrainment: ["7L53", "6L53", "5L53"], facade: ["7M", "6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T"], fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foresight: ["7L1", "6L1", "5L1", "4L1"], frustration: ["7M", "6M", "5M", "4M"], - furyattack: ["7L28", "6L28", "5L28", "4L28"], furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "5S0", "4M"], - growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], - hail: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + healbell: ["7T", "6T", "5T", "4T"], + healingwish: ["7L63", "7L1", "6L1", "5L63", "4L53"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - hydrocannon: ["7T", "6T", "5T", "4T"], - hydropump: ["7L59", "6L59", "5L59", "5S0", "4L59"], + highjumpkick: ["7L66", "6L66"], hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "5S0", "4M"], - icywind: ["6T", "5T", "4T"], - irondefense: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - metalclaw: ["7L1", "6L16", "5L16", "4L16"], - mist: ["7L46", "6L46", "5L46", "4L46"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + jumpkick: ["7L23", "6L23", "5L23", "4L23"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + mirrorcoat: ["7L1", "6L1", "5L1", "4L1"], mudslap: ["4T"], naturalgift: ["4M"], - peck: ["7L15", "6L15", "5L15", "4L15"], - pluck: ["5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], - quash: ["7M", "6M", "5M"], + quickattack: ["7L16", "6L16", "5L16", "4L16"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "7L1", "6M", "6L13", "5M", "5L13", "4M", "4L13"], rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - steelwing: ["7M", "6M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + splash: ["7L1", "6L1", "5L1", "4L1"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L19"], - swordsdance: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["6T", "4M"], - whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39"], - workup: ["7M"], - }}, - starly: {learnset: { - aerialace: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], - agility: ["7L33", "6L33", "5L33", "4L33"], - aircutter: ["4T"], - astonish: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M"], - bravebird: ["7L37", "6L37", "5L37", "4L37"], - captivate: ["4M"], - confide: ["7M", "6M"], - defog: ["4M"], - detect: ["7E", "6E", "5E"], - doubleedge: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L17", "6T", "6L17", "5T", "5L17", "4T", "4L17"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - featherdance: ["7E", "6E", "5E", "4E"], - finalgambit: ["7L41", "6L41", "5L41"], - fly: ["7M", "6M", "5M", "4M"], - foresight: ["7E", "6E", "5E", "4E"], - frustration: ["7M", "6M", "5M", "4M"], - furyattack: ["7E", "6E", "5E", "4E"], - growl: ["7L1", "6L1", "5L1", "4L1", "4S0"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - mirrormove: ["7E", "6E"], - mudslap: ["4T"], - naturalgift: ["4M"], - ominouswind: ["4T"], - pluck: ["5M", "4M"], - protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7E", "6E", "5E", "4E"], - quickattack: ["7L5", "6L5", "5L5", "4L5"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - revenge: ["7E", "6E", "5E"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], - round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E", "4E"], - secretpower: ["6M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M"], - substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1", "4S0"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L29", "6L29", "5L29", "4L29"], - thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uproar: ["7E", "6T", "6E", "5E"], - uturn: ["7M", "6M", "5M", "4M"], - whirlwind: ["7L21", "6L21", "5L21", "4L21"], - wingattack: ["7L9", "6L9", "5L9", "4L9"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], }}, - staravia: {learnset: { - aerialace: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], - agility: ["7L38", "6L38", "5L38", "4L38"], - aircutter: ["4T"], - attract: ["7M", "6M", "5M", "4M"], - bravebird: ["7L43", "6L43", "5L43", "4L43"], - captivate: ["4M"], + glameow: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + assist: ["7L29", "6L29", "5L29", "4L29"], + assurance: ["7E", "6E", "5D", "5E", "4E"], + attract: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L45"], + bite: ["7E", "6E", "5E", "4E"], + captivate: ["7L32", "6L32", "5L32", "4M", "4L32"], + charm: ["7L25", "6L25", "5L25", "4L25"], confide: ["7M", "6M"], - defog: ["4M"], - doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L18", "6T", "6L18", "5T", "5L18", "4T", "4L18"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - featherdance: ["5D"], - finalgambit: ["7L48", "6L48", "5L48"], - fly: ["7M", "6M", "5M", "4M"], + fakeout: ["7L1", "6L1", "5D", "5L1", "4L1"], + faketears: ["7E", "6E", "5E", "4E"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1"], - heatwave: ["6T", "5T", "4T"], + furycutter: ["4T"], + furyswipes: ["7L20", "6L20", "5L20", "4L20"], + growl: ["7L8", "6L8", "5L8", "4L8"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L48", "6M", "6L48", "5M", "5L48"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L13", "6L13", "5L13", "4L13"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "7E", "6T", "6E", "5T", "5E", "4T"], mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["4T"], - pluck: ["5M", "4M"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L50", "6L50"], protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + psychup: ["7M", "6M", "5M", "4M"], + quickattack: ["7E", "6E", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roost: ["7M", "6M", "5T", "4M"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], + sandattack: ["7E", "6E", "5E", "4E"], + scratch: ["7L5", "6L5", "5L5", "4L5"], + secretpower: ["6M", "5D", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + slash: ["7L37", "6L37", "5L37", "4L37"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - steelwing: ["7M", "6M", "4M"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + snore: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L41", "6L41", "5L41", "4T", "4L41"], sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - tailwind: ["6T", "5T", "5D", "4T"], - takedown: ["7L33", "6L33", "5L33", "4L33"], + tailwhip: ["7E", "6E", "5E", "4E"], + taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uproar: ["6T"], uturn: ["7M", "6M", "5M", "4M"], - whirlwind: ["7L23", "6L23", "5L23", "4L23"], - wingattack: ["7L9", "6L9", "5L9", "5D", "4L9"], + wakeupslap: ["7E", "6E", "5E"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], }}, - staraptor: {learnset: { - aerialace: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], - agility: ["7L41", "6L41", "5L41", "4L41"], - aircutter: ["4T"], - attract: ["7M", "6M", "5M", "4M"], - bravebird: ["7L49", "6L49", "5L49", "4L49"], - captivate: ["4M"], - closecombat: ["7L1", "6L34", "5L34", "4L34"], + purugly: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + assist: ["7L29", "6L29", "5L29", "4L29"], + attract: ["7M", "7L52", "6M", "6L52", "5M", "5L52", "4M", "4L53"], + bodyslam: ["7L45", "6L45", "5L45", "4L45"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["7L32", "6L32", "5L32", "4M", "4L32"], + charm: ["7L25", "6L25", "5L25", "4L25"], confide: ["7M", "6M"], - defog: ["4M"], - doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L18", "6T", "6L18", "5T", "5L18", "4T", "4L18"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - finalgambit: ["7L57", "6L57", "5L57"], - fly: ["7M", "6M", "5M", "4M"], + fakeout: ["7L1", "6L1", "5L1", "4L1"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flash: ["6M", "5M", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L20", "6L20", "5L20", "4L20"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1"], - heatwave: ["6T", "5T", "4T"], + growl: ["7L8", "7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L60", "6M", "6L60", "5M", "5L60"], hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["7T", "6T", "5T"], + hypnosis: ["7L13", "6L13", "5L13", "4L13"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["4T"], - pluck: ["5M", "4M"], + payback: ["7M", "6M", "5M", "4M"], protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roost: ["7M", "6M", "5T", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], + scratch: ["7L5", "7L1", "6L1", "5L1", "4L1"], secretpower: ["6M", "4M"], - skyattack: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + slash: ["7L37", "6L37", "5L37", "4L37"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - steelwing: ["7M", "6M", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T"], substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7L1", "6M", "6L38", "5M", "5L38", "4M", "4L38"], swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - tailwind: ["6T", "5T", "4T"], - takedown: ["7L33", "6L33", "5L33", "4L33"], + taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uproar: ["6T"], uturn: ["7M", "6M", "5M", "4M"], - whirlwind: ["7L23", "6L23", "5L23", "4L23"], - wingattack: ["7L9", "7L1", "6L1", "5L1", "4L1"], + waterpulse: ["7T", "6T", "4M"], workup: ["7M", "5M"], }}, - bidoof: {learnset: { - amnesia: ["7L41", "6L29", "5L29", "4L29"], - aquatail: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + stunky: {learnset: { + acidspray: ["7L19", "6L32", "5L32"], + astonish: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], + belch: ["7L43", "6L46"], + bite: ["7L21"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - crunch: ["7L25"], - curse: ["7L49", "6L45", "5L45", "4L45"], + crunch: ["7E", "6E", "5E", "4E"], cut: ["6M", "5M", "4M"], - defensecurl: ["7L5", "7E", "6L9", "6E", "5L9", "5E", "4L9", "4E"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["7T", "4M"], dig: ["6M", "5M", "4M"], doubleedge: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E", "4M"], + endure: ["4M"], + explosion: ["7M", "7L45", "6M", "6L49", "5M", "5L49", "4M", "4L44"], facade: ["7M", "6M", "5M", "4M"], + feint: ["7L15", "6L18", "5L18", "4L18"], + fireblast: ["7M", "6M", "5M", "4M"], + flameburst: ["7E", "6E", "5E"], + flamethrower: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1"], + foulplay: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - furyswipes: ["7E", "6E", "5E", "4E"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L5", "5L5", "4L5"], - headbutt: ["7L13", "6L17", "5L17", "4T", "4L17"], + furyswipes: ["7L9", "6L10", "5L10", "4L10"], + haze: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hyperfang: ["7L17", "6L21", "5L21", "4L21"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - lastresort: ["6T", "5T", "4T"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + leer: ["7E", "6E", "5E", "4E"], + memento: ["7L33", "6L43", "5L43", "4L37"], mudslap: ["4T"], naturalgift: ["4M"], - odorsleuth: ["7E", "6E", "5E", "4E"], - pluck: ["5M", "4M"], + nightslash: ["7L31", "6L37", "5L37", "4L31"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7E", "6E"], + poisongas: ["7L3", "6L4", "5L4", "4L4"], protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7E", "6E", "5E", "4E"], + punishment: ["7E", "6E", "5E", "4E"], + pursuit: ["7E", "6E", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - rockclimb: ["7E", "6E", "5E"], + roar: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], - rollout: ["7L9", "7E", "6L13", "6E", "5L13", "5E", "4T", "4L13", "4E"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "5D", "4M"], + scaryface: ["7E", "6E", "5E", "4E"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L7", "6L7", "5D", "5L7", "4L7"], + secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - skullbash: ["7E", "6E", "5E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L25", "6L22", "5L22", "4L22"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + smog: ["7E", "6E", "5E", "4E"], + smokescreen: ["7L13", "6L14", "5L14", "4L14"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L39", "5D", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], - superfang: ["7L33", "6T", "6L37", "5T", "5L37", "4T", "4L37"], - superpower: ["7L45", "6T", "6L41", "5T", "5L41", "4T", "4L41"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - swordsdance: ["7M", "7L37"], - tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "4S0"], - takedown: ["7L29", "6L33", "5L33", "4L33"], taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - watersport: ["7E", "6E", "5E", "4E"], - workup: ["7M", "5M"], - yawn: ["7L21", "6L25", "5L25", "4L25"], + throatchop: ["7T"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L20"], + venomdrench: ["7L37"], + venoshock: ["7M", "6M", "5M"], }}, - bibarel: {learnset: { - amnesia: ["7L48", "6L33", "5L33", "4L33"], - aquajet: ["7L1"], - aquatail: ["6T", "5T", "4T"], + skuntank: {learnset: { + acidspray: ["7L19", "6L32", "5L32"], attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], + belch: ["7L43", "6L56"], + bite: ["7L21"], captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - crunch: ["7L28"], - curse: ["7L58", "6L53", "5L53", "4L53"], cut: ["6M", "5M", "4M"], - defensecurl: ["7L5", "6L9", "5L9", "4L9"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["7T", "4M"], dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], + explosion: ["7M", "7L45", "6M", "6L61", "5M", "5L61", "4M", "4L52"], facade: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + feint: ["7L15", "6L18", "5L18", "4L18"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "7L1", "6M", "6L34", "5M", "5L34", "4M", "4L34"], + focusenergy: ["7L1", "6L1", "5L1", "4L1"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], + furyswipes: ["7L9", "6L10", "5L10", "4L10"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1"], - headbutt: ["7L13", "6L18", "5L18", "4T", "4L18"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hyperfang: ["7L18", "6L23", "5L23", "4L23"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - lastresort: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M"], + memento: ["7L33", "6L51", "5L51", "4L41"], mudslap: ["4T"], naturalgift: ["4M"], - pluck: ["5M", "4M"], + nightslash: ["7L31", "6L41", "5L41", "4L31"], + payback: ["7M", "6M", "5M", "4M"], + poisongas: ["7L3", "7L1", "6L1", "5L1", "4L1"], + poisonjab: ["7M", "6M", "5M", "4M"], protect: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], + roar: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], - rollout: ["7L9", "6L13", "5L13", "4T", "4L13"], - rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L7", "7L1", "6L7", "5L7", "4L7"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L25", "6L22", "5L22", "4L22"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + smokescreen: ["7L13", "6L14", "5L14", "4L14"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L39", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], - superfang: ["7L38", "6T", "6L43", "5T", "5L43", "4T", "4L43"], - superpower: ["7L53", "6T", "6L48", "5T", "5L48", "4T", "4L48"], - surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - swordsdance: ["7M", "7L43"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L33", "6L38", "5L38", "4L38"], taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - watergun: ["7L1", "6L15", "5L15", "4L15"], - waterpulse: ["6T", "4M"], - whirlpool: ["4M"], - workup: ["7M", "5M"], - yawn: ["7L23", "6L28", "5L28", "4L28"], - }}, - kricketot: {learnset: { - bide: ["7L1", "6L1", "5L1", "4L1"], - bugbite: ["7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16"], - endeavor: ["6T", "5T", "5D", "4T"], - growl: ["7L1", "6L1", "5L1", "4L1"], - mudslap: ["4T"], - snore: ["6T", "5T", "4T"], - stringshot: ["4T"], - strugglebug: ["7L6", "6M", "6L6", "5L6", "5D"], - uproar: ["6T", "5T", "5D", "4T"], + throatchop: ["7T"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L20"], + venomdrench: ["7L37"], + venoshock: ["7M", "6M", "5M"], }}, - kricketune: {learnset: { - absorb: ["7L14"], - aerialace: ["7M", "6M", "5M", "4M"], - attract: ["7M", "6M", "5M", "4M"], - bide: ["7L1", "6L1", "5L1", "4L1"], - brickbreak: ["7M", "6M", "5M", "4M"], - bugbite: ["6T", "5T", "4T"], - bugbuzz: ["7L46", "6L46", "5L46", "4L34"], - captivate: ["4M"], + bronzor: {learnset: { + allyswitch: ["7T"], + ancientpower: ["4T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], + confuseray: ["7L11", "6L11", "5L11", "4L14"], + confusion: ["7L1", "6L1", "5L1", "4L1"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["6T", "5T", "4T"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], + extrasensory: ["7L39", "6L39", "5L19", "4L19"], facade: ["7M", "6M", "5M", "4M"], - falseswipe: ["7M", "6M", "5M", "4M"], - fellstinger: ["7L36", "6L36"], + feintattack: ["7L21", "6L21", "5L21", "4L41"], flash: ["6M", "5M", "4M"], - focusenergy: ["7L22", "6L22", "5L22", "4L22"], + flashcannon: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["7L1", "6L10", "5L10", "4T", "4L10"], - gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1"], - healbell: ["6T", "5T"], + futuresight: ["7L29", "6L29", "5L29", "4L37"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5D", "5T", "4T"], + gyroball: ["7M", "7L35", "6M", "6L35", "5M", "5L35", "4M", "4L35"], + healblock: ["7L45", "6L45", "5L45", "4L52"], + heavyslam: ["7L49", "6L49", "5L49"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - infestation: ["7M", "6M"], - knockoff: ["6T", "5T", "4T"], - leechlife: ["7M", "6L14", "5L14", "4L14"], - mudslap: ["4T"], + hypnosis: ["7L5", "6L5", "5D", "5L5", "4L7"], + imprison: ["7L9", "6L9", "5L9", "4L12"], + irondefense: ["7T", "7L19", "6T", "6L19", "5T", "5L19", "4L26"], + lightscreen: ["7M", "6M", "5M", "4M"], + metalsound: ["7L31", "6L31", "5L31"], naturalgift: ["4M"], - nightslash: ["7L42", "6L42", "5L42", "4L42"], - perishsong: ["7L50", "6L50", "5L50", "4L38"], - poweruppunch: ["6M"], + payback: ["7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L49"], protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L15", "6L15", "5L15"], raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], - screech: ["7L34", "6L34", "5L34", "4L30"], + safeguard: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L30"], + sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - silverwind: ["4M"], - sing: ["7L18", "6L18", "5L18", "4L18"], - slash: ["7L26", "6L26", "5L26", "4L26"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5D", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stickyweb: ["7L44", "6L44"], - strength: ["6M", "5M", "4M"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "4L38"], - toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - xscissor: ["7M", "7L30", "6M", "6L30", "5M", "5L30", "4M", "4L26"], - }}, - shinx: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - babydolleyes: ["7L11", "6L11"], - bite: ["7L17", "6L17", "5L17", "4L13"], - captivate: ["4M"], - charge: ["7L9", "6L9", "5L9", "5D", "4L9"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["7T", "5M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], + }}, + bronzong: {learnset: { + allyswitch: ["7T"], + ancientpower: ["4T"], + block: ["7T", "7L1", "6T", "6L33", "5T", "5L33", "4T", "4L33"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L33", "6L33", "5L33", "4L29"], - discharge: ["7L41", "6L41", "5L41", "4L41"], - doublekick: ["7E", "6E", "5E"], + confuseray: ["7L11", "6L11", "5L11", "4L14"], + confusion: ["7L1", "6L1", "5L1", "4L1"], doubleteam: ["7M", "6M", "5M", "4M"], - eerieimpulse: ["7E", "6E"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], + explosion: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L42", "6L42", "5L19", "4L19"], facade: ["7M", "6M", "5M", "4M"], - faketears: ["7E", "6E"], - firefang: ["7E", "6E", "5E", "4E"], + feintattack: ["7L21", "6L21", "5L21", "4L50"], flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - headbutt: ["4T"], - helpinghand: ["7E", "6T", "6E", "5E"], + futuresight: ["7L29", "6L29", "5L29", "4L43"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + gyroball: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L38"], + healblock: ["7L52", "6L52", "5L52", "4L67"], + heavyslam: ["7L58", "6L58", "5L58"], hiddenpower: ["7M", "6M", "5M", "4M"], - howl: ["7E", "6E", "5E", "4E"], - icefang: ["7E", "6E", "5E", "4E"], - irontail: ["6T", "5T", "4M"], - leer: ["7L5", "6L5", "5L5", "4L5"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypnosis: ["7L5", "7L1", "6L1", "5L1", "4L1"], + imprison: ["7L9", "7L1", "6L1", "5L1", "4L1"], + irondefense: ["7T", "7L19", "6T", "6L19", "5T", "5L19", "4L26"], + ironhead: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "5D", "4T"], - mudslap: ["4T"], + metalsound: ["7L31", "6L31", "5L31"], naturalgift: ["4M"], - nightslash: ["7E", "6E", "5E", "5D", "4E"], + payback: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L61"], protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7E", "6E", "5E", "4E"], - raindance: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L15", "6L15", "5L15"], + raindance: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "7L21", "6M", "6L21", "5M", "5L21", "4M", "4L21"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], round: ["7M", "6M", "5M"], - scaryface: ["7L37", "6L37", "5L37", "4L37"], + safeguard: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L30"], + sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - shockwave: ["7E", "6T", "6E", "5E", "4M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - spark: ["7L13", "6L13", "5L13", "4L13"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], - swift: ["7E", "6E", "5E", "4T"], + sunnyday: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + swagger: ["7M", "6M", "5M", "4M"], tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7E", "6E", "5E", "4E"], - thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderfang: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "4L29", "4E"], - thunderwave: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], toxic: ["7M", "6M", "5M", "4M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - luxio: {learnset: { + chatot: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7E", "6E", "5E", "4E"], + aircutter: ["7E", "6E", "5E", "4T"], attract: ["7M", "6M", "5M", "4M"], - bite: ["7L18", "6L18", "5L18", "4L13"], + boomburst: ["7E", "6E"], captivate: ["4M"], - charge: ["7L9", "6L9", "5L9", "4L9"], - chargebeam: ["7M", "6M", "5M", "4M"], - confide: ["7M", "6M"], - crunch: ["7L38", "6L38", "5L38", "4L33"], - discharge: ["7L48", "6L48", "5L48", "4L48"], + chatter: ["7L21", "7L1", "6L1", "5L21", "4L21", "4S0"], + confide: ["7M", "7L1", "6M", "6L1"], + defog: ["7T", "7E", "6E", "5E", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + encore: ["7E", "6E", "5E", "4E"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], + featherdance: ["7L50", "6L50", "5L53", "4L41"], + fly: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - headbutt: ["4T"], - helpinghand: ["6T"], + furyattack: ["7L17", "6L17", "5L17", "4L17", "4S0"], + growl: ["7L5", "6L5", "5L5", "4L5"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - irontail: ["6T", "5T", "4M"], - leer: ["7L5", "7L1", "6L1", "5L1", "4L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], + hypervoice: ["7T", "7L57", "7L1", "6T", "6L1", "5T", "5L57", "4L45"], + mimic: ["7L33", "6L33", "5L33", "4L29"], + mirrormove: ["7L9", "6L9", "5D", "5L9", "4L9", "4S0"], mudslap: ["4T"], + nastyplot: ["7E", "6E", "5D", "5E", "4E"], naturalgift: ["4M"], + nightshade: ["7E", "6E", "5E", "4E"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5L1", "4L1"], + pluck: ["5M", "4M"], protect: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "4M", "4L23"], - round: ["7M", "6M", "5M"], - scaryface: ["7L43", "6L43", "5L43", "4L43"], + roleplay: ["7T", "6T", "5D", "5T", "4T"], + roost: ["7M", "7L41", "6M", "6L41", "5T", "5L41", "4M", "4L33"], + round: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - spark: ["7L13", "6L13", "5L13", "4L13"], - strength: ["6M", "5M", "4M"], + sing: ["7L13", "6L13", "5L13", "4L13"], + skyattack: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + snore: ["7T", "6T", "5T", "4T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M"], substitute: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7E", "6E", "5E", "4E"], + swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], + synchronoise: ["7L49", "6L49", "5L49"], + tailwind: ["7T", "6T", "5T", "4T"], + taunt: ["7M", "7L25", "7L1", "6M", "6L1", "5M", "5L25", "4M", "4L25", "4S0"], thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderfang: ["7L33", "6L33", "5L33", "4L33"], - thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + twister: ["4T"], + uproar: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L37"], + uturn: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], }}, - luxray: {learnset: { + spiritomb: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M", "4M"], - bite: ["7L18", "6L18", "5L18", "4L13"], - captivate: ["4M"], - charge: ["7L9", "7L1", "6L1", "5L1", "4L1"], - chargebeam: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["7E", "6E", "5E", "4M"], confide: ["7M", "6M"], - crunch: ["7L42", "6L42", "5L42", "4L35"], - discharge: ["7L56", "6L56", "5L56", "4L56"], + confuseray: ["7L1", "6L1", "5L1", "4L1"], + curse: ["7L1", "6L1", "5L1", "4L1"], + darkpulse: ["7M", "7L49", "6M", "6L49", "5T", "5L49", "5S0", "4M", "4L49"], + destinybond: ["7E", "6E", "5E", "4E"], + disable: ["7E"], doubleteam: ["7M", "6M", "5M", "4M"], - electricterrain: ["7L67", "7L1", "6L1"], + dreameater: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], + embargo: ["7M", "6M", "5M", "5S0", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L7", "6L7", "5L7", "4L7"], flash: ["6M", "5M", "4M"], + foulplay: ["7T", "7E", "6T", "6E", "5T"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T"], + grudge: ["7E", "6E", "5E", "4E"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - irontail: ["6T", "5T", "4M"], - leer: ["7L5", "7L1", "6L1", "5L1", "4L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], - mudslap: ["4T"], + hypnosis: ["7L13", "6L13", "5L13", "4L13"], + icywind: ["7T", "6T", "5D", "5T", "4T"], + imprison: ["7E", "6E", "5E", "4E"], + infestation: ["7M", "6M"], + memento: ["7L43", "6L43", "5L43", "4L43"], + nastyplot: ["7L37", "6L37", "5L37", "4L37"], naturalgift: ["4M"], + nightmare: ["7E", "6E", "5E"], + ominouswind: ["7L25", "6L25", "5L25", "4T", "4L25"], + painsplit: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "5S0", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["7L1", "6L1", "5L1", "4L1"], + quash: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "4M", "4L23"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scaryface: ["7L49", "6L49", "5L49", "4L49"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowsneak: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + shockwave: ["7T", "6T", "4M"], + silverwind: ["5S0", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], + smokescreen: ["7E", "6E", "5E", "4E"], snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - spark: ["7L13", "6L13", "5L13", "4L13"], - strength: ["6M", "5M", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "7L1", "6T", "6L1", "5D", "5T", "5L1", "4T", "4L1"], substitute: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], - swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderfang: ["7L35", "6L35", "5L35", "4L35"], - thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L63", "6M", "6L63", "5M", "5L63"], + trick: ["7T", "6T", "5T", "4T"], + uproar: ["7T", "6T", "5T", "4T"], + waterpulse: ["7T", "6T", "4M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], }}, - cranidos: {learnset: { - ancientpower: ["7L33", "6L33", "5L33", "4T", "4L28"], - assurance: ["7L24", "6L24", "5L24", "4L24"], + gible: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["7E", "6E", "5E", "4E"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chipaway: ["7L28", "6L28", "5L28"], confide: ["7M", "6M"], - crunch: ["7E", "6E", "5E", "5S0", "4E"], - curse: ["7E", "6E", "5E", "4E"], - dig: ["6M", "5M", "4M"], + cut: ["6M", "5M", "4M"], + dig: ["7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31"], doubleedge: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], - dragonpulse: ["6T", "5T", "4M"], - earthpower: ["6T", "5T", "4T"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7E", "6E", "5E", "4E"], + dragonclaw: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L7", "6L7", "5D", "5L7", "4L7"], + dragonrush: ["7L37", "6L37", "5L37", "4L37"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M"], + endure: ["5D", "4M"], facade: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "5D", "4T"], flamethrower: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L6", "6L6", "5L6", "4L6"], frustration: ["7M", "6M", "5M", "4M"], - hammerarm: ["7E", "6E", "5E", "4E"], - headbutt: ["7L1", "6L1", "5L1", "5S0", "5D", "4T", "4L1"], - headsmash: ["7L46", "6L46", "5L46", "4L43"], + furycutter: ["4T"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], incinerate: ["6M", "5M"], - ironhead: ["7E", "6T", "6E", "5T", "5E", "5D", "4T"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], - leer: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + ironhead: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + metalclaw: ["7E", "6E", "5E", "4E"], + mudshot: ["7E", "6E", "5E", "4E"], mudslap: ["4T"], naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + outrage: ["7T", "7E", "6T", "6E", "5D", "5T", "5E", "4T", "4E"], protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L10", "6L10", "5L10", "5S0", "4L10"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], + rockclimb: ["7E", "6E", "5E", "4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scaryface: ["7L19", "6L19", "5L19", "4L19"], - screech: ["7L42", "6L42", "5L42", "4L37"], + sandattack: ["7L3", "6L3", "5L3", "4L3"], + sandstorm: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + sandtomb: ["7L19", "7E", "6L19", "6E", "5L19", "5E", "4L19", "4E"], + scaryface: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], - slam: ["7E", "6E", "5E", "4E"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L25", "6L25", "5L25", "4L25"], sleeptalk: ["7M", "6M", "5T", "4M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stomp: ["7E", "6E", "5E", "4E"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M"], - swordsdance: ["7M", "6M", "5M", "4M"], - takedown: ["7L15", "6L15", "5L15", "5S0", "4L15"], - thief: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "4L15"], thrash: ["7E", "6E", "5E", "4E"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - whirlwind: ["7E", "6E", "5E", "4E"], - zenheadbutt: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L33"], + twister: ["7E", "6E", "5E", "4T", "4E"], }}, - rampardos: {learnset: { - ancientpower: ["7L36", "6L36", "5L36", "4T", "4L28"], - assurance: ["7L24", "6L24", "5L24", "4L24"], + gabite: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], attract: ["7M", "6M", "5M", "4M"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], - chipaway: ["7L28", "6L28", "5L28"], confide: ["7M", "6M"], cut: ["6M", "5M", "4M"], - dig: ["6M", "5M", "4M"], + dig: ["7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40"], doubleteam: ["7M", "6M", "5M", "4M"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T", "4T"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonclaw: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L7", "7L1", "6L7", "5L7", "4L7"], + dragonrush: ["7L49", "6L49", "5L49", "4L49"], + dualchop: ["7T", "7L1", "6T", "6L24", "5T", "5L24"], + earthpower: ["7T", "6T", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M"], - endeavor: ["7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], flamethrower: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L6", "7L1", "6L6", "5L6", "4L6"], - focuspunch: ["6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["7L1", "6L1", "5L1", "4T", "4L1"], - headsmash: ["7L58", "6L58", "5L58", "4L52"], + furycutter: ["4T"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - leer: ["7L1", "6L1", "5L1", "4L1"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], mudslap: ["4T"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + outrage: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L10", "7L1", "6L10", "5L10", "4L10"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], roar: ["7M", "6M", "5M", "4M"], rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scaryface: ["7L19", "6L19", "5L19", "4L19"], - screech: ["7L51", "6L51", "5L51", "4L43"], + sandattack: ["7L3", "7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + sandtomb: ["7L19", "6L19", "5L19", "4L19"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L28", "6L28", "5L28", "4L28"], sleeptalk: ["7M", "6M", "5T", "4M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], - surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swordsdance: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], takedown: ["7L15", "6L15", "5L15", "4L15"], - thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - whirlpool: ["4M"], - zenheadbutt: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L36"], + twister: ["4T"], }}, - shieldon: {learnset: { - ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28"], + garchomp: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - bodyslam: ["7E", "6E", "5E", "5S0", "4E"], + brickbreak: ["7M", "6M", "6S4", "5M", "4M"], + brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "5D", "4E"], - curse: ["7E", "6E", "5E", "4E"], - dig: ["6M", "5M", "4M"], - doubleedge: ["7E", "6E", "5E", "4E"], + crunch: ["7L1", "6L48", "6S3", "6S2", "5L48", "5S1", "4L48"], + cut: ["6M", "5M", "4M"], + dig: ["7L40", "6M", "6L40", "6S3", "6S2", "5M", "5L40", "5S1", "4M", "4L40"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["7L33", "6L33", "5L33", "4M", "4L33"], + dracometeor: ["7T", "6T", "6S2", "5T", "4T"], + dragonclaw: ["7M", "7L33", "6M", "6L33", "6S3", "6S2", "5M", "5L33", "5S1", "4M", "4L33"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragonrage: ["7L7", "7L1", "6L1", "5L1", "4L1"], + dragonrush: ["7L55", "6L55", "6S4", "5L55", "4L55"], + dragontail: ["7M", "6M", "5M"], + dualchop: ["7T", "7L1", "6T", "6L24", "5T", "5L24"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "6S4", "5M", "5S0", "4M"], + endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - fissure: ["7E", "6E", "5E", "5D", "4E"], + firefang: ["7L1", "6L1", "5L1", "4L1"], flamethrower: ["7M", "6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], - focusenergy: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - guardsplit: ["7E", "6E"], - headbutt: ["7E", "6E", "5E", "4T", "4E"], - heavyslam: ["7L46", "6L46", "5L46"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "6S4", "5M", "4M"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], incinerate: ["6M", "5M"], - irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19"], - ironhead: ["7L42", "6T", "6L42", "5T", "5L42", "4T", "4L43"], - irontail: ["6T", "5T", "4M"], - magnetrise: ["6T", "5T", "4T"], - metalburst: ["7L37", "6L37", "5L37", "4L37"], - metalsound: ["7L10", "6L10", "5L10", "5S0", "4L10"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "5S0", "5D", "4M", "4L1"], + outrage: ["7T", "6T", "5T", "5S1", "5S0", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], roar: ["7M", "6M", "5M", "4M"], - rockblast: ["7E", "6E", "5E", "4E"], - rockpolish: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scaryface: ["7E", "6E", "5E", "4E"], - screech: ["7E", "6E", "5E", "4E"], + sandattack: ["7L3", "7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + sandtomb: ["7L19", "6L19", "5L19", "4L19"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L28", "6L28", "6S3", "5L28", "4L28"], sleeptalk: ["7M", "6M", "5T", "4M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "5S0", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "5S0", "4M"], tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L15", "6L15", "5L15", "5S0", "4L15"], - taunt: ["7M", "7L6", "6M", "6L6", "5M", "5L6", "4M", "4L6"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + takedown: ["7L15", "6L15", "5L15", "4L15"], toxic: ["7M", "6M", "5M", "4M"], - wideguard: ["7E", "6E", "5E"], + twister: ["4T"], + whirlpool: ["4M"], }}, - bastiodon: {learnset: { - ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28"], + riolu: {learnset: { + agility: ["7E", "6E", "5E", "4E"], attract: ["7M", "6M", "5M", "4M"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M"], - block: ["7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + aurasphere: ["4S0"], + bite: ["7E", "6E", "5E", "4E"], + blazekick: ["7E", "6E", "5E", "4E"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5D", "5E", "4E", "4S0"], captivate: ["4M"], + circlethrow: ["7E", "6E", "5E"], confide: ["7M", "6M"], + copycat: ["7L19", "6L19", "5L29", "4L29"], + counter: ["7L6", "6L6", "5L6", "4L6"], + crosschop: ["7E", "6E", "5E", "4E"], + crunch: ["7E", "6E", "5E", "4E"], + detect: ["7E", "6E", "5E", "4E"], dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], + drainpunch: ["7T", "6T", "5T", "4M", "4S0"], + dualchop: ["7T", "6T", "5T"], earthquake: ["7M", "6M", "5M", "4M"], - endure: ["7L36", "6L36", "5L36", "4M", "4L36"], + endure: ["7L1", "6L1", "5D", "5L1", "4M", "4L1"], facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], + feint: ["7L11", "6L11", "5L15", "4L15"], + finalgambit: ["7L50", "6L50", "5L55"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "5D", "4M"], + followme: ["7E", "6E", "5E", "4E"], + forcepalm: ["7L15", "6L15", "5L11", "4L11"], + foresight: ["7L1", "6L1", "5L1", "4L1"], frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], headbutt: ["4T"], - heavyslam: ["7L58", "6L58", "5L58"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19"], - ironhead: ["7L51", "6T", "6L51", "5T", "5L51", "4T", "4L52"], - irontail: ["6T", "5T", "4M"], - magiccoat: ["6T", "5T", "4T"], - magnetrise: ["6T", "5T", "4T"], - metalburst: ["7L43", "6L43", "5L43", "4L43"], - metalsound: ["7L10", "7L1", "6L1", "5L1", "4L1"], + highjumpkick: ["7E", "6E", "5E", "4E"], + icepunch: ["7T", "6T", "5T", "4T"], + irondefense: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T", "4T"], + meteormash: ["7E"], + mindreader: ["7E", "6E", "5E", "4E"], mudslap: ["4T"], + nastyplot: ["7L47", "6L47", "5L47"], naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L1", "6L1", "5L1", "4L1"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], + reversal: ["7L29", "6L29", "5L19", "4L19"], roar: ["7M", "6M", "5M", "4M"], - rockpolish: ["7M", "6M", "5M", "4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M"], + screech: ["7L24", "6L24", "5L24", "4L24"], secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M", "4S0"], + skyuppercut: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L15", "6L15", "5L15", "4L15"], - taunt: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], + vacuumwave: ["7E", "6E", "5E", "4T", "4E"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - burmy: {learnset: { - bugbite: ["7L15", "6T", "6L15", "5T", "5L15", "5D", "4T", "4L15"], - electroweb: ["6T", "5T"], - hiddenpower: ["7M", "7L20", "6M", "6L20", "5L20", "4L20"], - protect: ["7M", "7L1", "6M", "6L1", "5L1", "5D", "4L1"], - snore: ["6T", "5T", "5D", "4T"], - stringshot: ["4T"], - tackle: ["7L10", "6L10", "5L10", "4L10"], - }}, - wormadam: {learnset: { - attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], - bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], - bugbuzz: ["7L50"], - bulletseed: ["4M"], - captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + lucario: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + aurasphere: ["7L1", "7S5", "6L1", "6S4", "5L51", "4L37", "4S0"], + blazekick: ["4S1"], + bonerush: ["7L29", "6L29", "5L19", "4L19", "4S1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["5S3", "5S2"], + calmmind: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M"], + captivate: ["4M"], + closecombat: ["7L55", "6L1", "6S4", "5L55", "5S3", "4L42"], confide: ["7M", "6M"], - confusion: ["7L23", "6L23", "5L23", "4L23"], + counter: ["7L6", "6L6", "5L6", "5S2", "4L6"], + darkpulse: ["7M", "6M", "5T", "5L1", "4M", "4L1", "4S0"], + detect: ["7L1", "6L1", "5L1", "5S2", "4L1"], + dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - electroweb: ["6T", "5T"], - endeavor: ["6T", "5T", "4T"], + dragonpulse: ["7T", "7L60", "7S5", "6T", "6L1", "5T", "5L60", "4M", "4L47", "4S0"], + drainpunch: ["7T", "6T", "5T", "4M"], + dualchop: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L65", "7S5", "6L1", "5L65", "4L51"], facade: ["7M", "6M", "5M", "4M"], - flail: ["7L38", "6L38", "5L38", "4L38"], - flash: ["6M", "5M", "4M"], + feint: ["7L11", "6L11", "5L15", "4L15"], + flashcannon: ["7M", "6M", "6S4", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + forcepalm: ["5L11", "4L11", "4S1"], + foresight: ["7L1", "6L1", "5L1", "4L1"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], + furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growth: ["7L29", "6L29", "5L29", "4L29"], - hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + headbutt: ["4T"], + healpulse: ["7L51", "6L51", "5L42"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + highjumpkick: ["7S5"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M"], - infestation: ["7M", "6M"], - leafstorm: ["7L47", "6L47", "5L47", "4L47"], + icepunch: ["7T", "6T", "5T", "4T"], + irondefense: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + laserfocus: ["7T", "7L1"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T", "4T"], + mefirst: ["7L37", "6L37", "5L29", "4L29"], + metalclaw: ["7L1", "6L1", "5L1", "5S2", "4L1"], + metalsound: ["7L24", "6L24", "5L24", "4L24"], + mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], - psybeam: ["7L32", "6L32", "5L32", "4L32"], - psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], - psychup: ["7M", "6M", "5M", "4M"], - quiverdance: ["7L1"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["7L15", "6M", "6L15"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + quickattack: ["7L1", "6L1", "6S4", "5L1", "4L1"], + quickguard: ["7L33", "6L33", "5L33"], raindance: ["7M", "6M", "5M", "4M"], - razorleaf: ["7L26", "6L26", "5L26", "4L26"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], + shadowclaw: ["7M", "6M", "5M", "5S3", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "5S3", "4M"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L1", "4T"], - sunnyday: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M", "4S1"], swagger: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - thief: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L19", "6M", "6L19", "5M", "5L37", "4M", "4L33"], + thunderpunch: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T", "4T"], + vacuumwave: ["4T"], + waterpulse: ["7T", "6T", "4M", "4S0"], + workup: ["7M", "7L42", "5M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - wormadamsandy: {learnset: { - attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], - bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], - bugbuzz: ["7L50"], + hippopotas: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L7", "6L7", "5D", "5L7", "4L7"], + bodyslam: ["7E", "6E", "5E", "4E"], bulldoze: ["7M", "6M", "5M"], - captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L23", "6L23", "5L23", "4L23"], - dig: ["6M", "5M", "4M"], + crunch: ["7L31", "6L31", "5L31", "4L31"], + curse: ["7E", "6E", "5E", "4E"], + dig: ["7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], + doubleedge: ["7L44", "6L44", "5L44", "4L44"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M"], - electroweb: ["6T", "5T"], - endeavor: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - fissure: ["7L47", "6L47", "5L47", "4L47"], - flail: ["7L38", "6L38", "5L38", "4L38"], - flash: ["6M", "5M", "4M"], + fissure: ["7L50", "6L50", "5L50", "4L50"], frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - harden: ["7L29", "6L29", "5L29", "4L29"], - hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], - hyperbeam: ["7M", "6M", "5M", "4M"], - infestation: ["7M", "6M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["7T", "6T", "5T", "4M"], mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], - psybeam: ["7L32", "6L32", "5L32", "4L32"], - psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], - psychup: ["7M", "6M", "5M", "4M"], - quiverdance: ["7L1"], - raindance: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rockblast: ["7L26", "6L26", "5L26", "4L26"], + revenge: ["7E", "6E", "5E", "4E"], + roar: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], + sandattack: ["7L1", "6L1", "5L1", "4L1"], sandstorm: ["7M", "6M", "5M", "4M"], + sandtomb: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E"], secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], + slackoff: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spitup: ["7E", "6E", "5E", "4E"], + stealthrock: ["7T", "6T", "5T", "4M"], + stockpile: ["7E", "6E", "5D", "5E", "4E"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L1", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5D", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7E", "6E", "5E", "4E"], tackle: ["7L1", "6L1", "5L1", "4L1"], - thief: ["7M", "6M", "5M", "4M"], + takedown: ["7L19", "6L19", "5L19", "4L19"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - venoshock: ["7M", "6M", "5M"], + waterpulse: ["7T", "6T", "4M"], + whirlwind: ["7E", "6E", "5E"], + yawn: ["7L13", "6L13", "5L13", "4L13"], }}, - wormadamtrash: {learnset: { - attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], - bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], - bugbuzz: ["7L50"], - captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + hippowdon: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L7", "7L1", "6L1", "5L1", "4L1"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L23", "6L23", "5L23", "4L23"], + crunch: ["7L31", "6L31", "5L31", "4L31"], + dig: ["7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], + doubleedge: ["7L50", "6L50", "5L50", "4L50"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - electroweb: ["6T", "5T"], - endeavor: ["6T", "5T", "4T"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - flail: ["7L38", "6L38", "5L38", "4L38"], - flash: ["6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + fissure: ["7L60", "6L60", "5L60", "4L60"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], - gyroball: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["7L47", "6T", "6L47", "5T", "5L47", "4T", "4L47"], - magnetrise: ["6T", "5T", "4T"], - metalburst: ["7L1"], - metalsound: ["7L29", "6L29", "5L29", "4L29"], - mirrorshot: ["7L26", "6L26", "5L26", "4L26"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + mudslap: ["4T"], naturalgift: ["4M"], - protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], - psybeam: ["7L32", "6L32", "5L32", "4L32"], - psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], - psychup: ["7M", "6M", "5M", "4M"], - quiverdance: ["7L1"], - raindance: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], + sandattack: ["7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "6M", "5M", "4M"], + sandtomb: ["7L25", "6L25", "5L25", "4L25"], secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stringshot: ["4T"], - strugglebug: ["6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L1", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M"], tackle: ["7L1", "6L1", "5L1", "4L1"], - thief: ["7M", "6M", "5M", "4M"], + takedown: ["7L19", "6L19", "5L19", "4L19"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - venoshock: ["7M", "6M", "5M"], + waterpulse: ["7T", "6T", "4M"], + yawn: ["7L13", "7L1", "6L1", "5L1", "4L1"], }}, - mothim: {learnset: { - acrobatics: ["7M", "6M", "5M"], + skorupi: {learnset: { + acupressure: ["7L13", "6L13", "5L17", "4L17"], aerialace: ["7M", "6M", "5M", "4M"], - aircutter: ["4T"], - airslash: ["7L41", "6L41", "5L41", "4L41"], + agility: ["7E", "6E", "5D", "5E", "4E"], + aquatail: ["7T", "6T", "5D", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], - bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], - bugbuzz: ["7L50", "6L47", "5L47", "4L47"], - camouflage: ["7L35", "6L35", "5L35", "4L35"], + bite: ["7L1", "6L1", "5D", "5L1", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["7T", "7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], captivate: ["4M"], confide: ["7M", "6M"], - confusion: ["7L23", "6L23", "5L23", "4L23"], - defog: ["4M"], + confuseray: ["7E", "6E", "5E", "4E"], + crosspoison: ["7L49", "6L49", "5L61", "4L50"], + crunch: ["7L45", "6L45", "5L56", "4L45"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - electroweb: ["6T", "5T"], endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + feintattack: ["7E", "6E", "5E", "4E"], + fellstinger: ["7L47", "6L47"], flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L26", "6L26", "5L26", "4L26"], - hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], - hyperbeam: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L30", "6M", "6L30", "5M", "5L45"], infestation: ["7M", "6M"], - lunge: ["7L47"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], + knockoff: ["7T", "7L5", "6T", "6L5", "5T", "5L6", "4T", "4L6"], + leer: ["7L1", "6L1", "5L1", "4L1"], mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["4T"], - poisonpowder: ["7L29", "6L29", "5L29", "4L29"], - protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], - psybeam: ["7L32", "6L32", "5L32", "4L32"], - psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], - psychup: ["7M", "6M", "5M", "4M"], - quiverdance: ["7L1", "6L50", "5L50"], + nightslash: ["7L38", "7E", "6L38", "6E", "5L38", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L9", "6L9", "5L12", "4L12"], + poisonfang: ["7L23", "6L23", "5L39", "4L39"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1"], + poisontail: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L16", "7E", "6L16", "6E", "5L16", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - roost: ["7M", "6M", "5T", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], + sandattack: ["7E", "6E", "5E", "4E"], + scaryface: ["7L41", "6L41", "5L23", "4L23"], + screech: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["7L38", "6L38", "5L38", "4M", "4L38"], - skillswap: ["6T", "5T", "4M"], + slash: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stringshot: ["4T"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - tailwind: ["6T", "5T", "4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uturn: ["7M", "6M", "5M", "4M"], - venoshock: ["7M", "6M", "5M"], - }}, - combee: {learnset: { - aircutter: ["5D", "4T"], - bugbite: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], - bugbuzz: ["7L29", "6L29", "5L29"], - endeavor: ["6T", "5T", "4T"], - gust: ["7L1", "6L1", "5L1", "5D", "4L1"], - mudslap: ["4T"], - ominouswind: ["4T"], - snore: ["6T", "5T", "4T"], - stringshot: ["4T"], - sweetscent: ["7L1", "6L1", "5L1", "4L1"], - swift: ["4T"], - tailwind: ["6T", "5T", "5D", "4T"], + toxicspikes: ["7L34", "6L34", "5L28", "4L28"], + twineedle: ["7E", "6E", "5E"], + venoshock: ["7M", "7L27", "6M", "6L27", "5M", "5L50"], + whirlwind: ["7E", "6E", "5E", "4E"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - vespiquen: {learnset: { - acrobatics: ["7M", "6M", "5M"], + drapion: {learnset: { + acupressure: ["7L13", "6L13", "5L17", "4L17"], aerialace: ["7M", "6M", "5M", "4M"], - aircutter: ["4T"], - airslash: ["7L37", "6L37", "5L37"], - attackorder: ["7L45", "6L45", "5L37", "4L37"], + aquatail: ["7T", "6T", "5T", "4T"], attract: ["7M", "6M", "5M", "4M"], - bugbite: ["6T", "5T", "4T"], - captivate: ["7L41", "6L41", "5L33", "4M", "4L33"], + bite: ["7L1", "6L1", "5L1", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bugbite: ["7T", "7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L1", "5L7", "4L7"], + crosspoison: ["7L57", "6L57", "5L73", "4L58"], + crunch: ["7L49", "6L49", "5L65", "4L49"], cut: ["6M", "5M", "4M"], - defendorder: ["7L17", "6L17", "5L13", "4L13"], - defog: ["4M"], - destinybond: ["7L53", "7L1", "6L1", "5L43", "4L43"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - endeavor: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - fellstinger: ["7L57", "7L1", "6L1"], + falseswipe: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L53", "6L53"], + firefang: ["7L1", "6L1", "5L1", "4L1"], flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["7L5", "6L5", "5L9", "4T", "4L9"], - furyswipes: ["7L13", "6L13", "5L19", "4L19"], + furycutter: ["4T"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L1", "6L1", "5L1", "4L1"], - healorder: ["7L29", "6L29", "5L25", "4L25"], + headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], + honeclaws: ["7L30", "6M", "6L30", "5M", "5L48"], hyperbeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], infestation: ["7M", "6M"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + leer: ["7L1", "6L1", "5L1", "4L1"], mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["4T"], - poisonsting: ["7L1", "6L1", "5L3", "4L3"], - powergem: ["7L25", "6L25", "5L21", "4L21"], + nightslash: ["7L38", "6L38", "5L38"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L9", "6L9", "5L12", "4L1"], + poisonfang: ["7L23", "6L23", "5L39", "4L39"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1"], protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L9", "6L9", "5L15", "4L15"], - quash: ["7M", "6M", "5M"], + pursuit: ["7L16", "6L16", "5L16"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roost: ["7M", "6M", "5T", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], + scaryface: ["7L43", "6L43", "5L23", "4L23"], secretpower: ["6M", "4M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["4M"], - slash: ["7L1", "6L21", "5L31", "4L31"], + shadowball: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], - stringshot: ["4T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M", "4M"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L49", "6M", "6L49", "5M", "5L39", "4M", "4L39"], - sweetscent: ["7L1", "6L1", "5L1", "4L1"], - swift: ["4T"], - tailwind: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], thief: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "7L33", "6M", "6L33", "5M", "5L27", "4M", "4L27"], - uturn: ["7M", "6M", "5M", "4M"], - venoshock: ["7M", "6M", "5M"], + throatchop: ["7T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + toxicspikes: ["7L34", "6L34", "5L28", "4L28"], + venoshock: ["7M", "7L27", "6M", "6L27", "5M", "5L56"], xscissor: ["7M", "6M", "5M", "4M"], }}, - pachirisu: {learnset: { + croagunk: {learnset: { + acupressure: ["7E", "6E", "5E"], + astonish: ["7L1", "6L1", "5L1", "5S0", "4L1"], attract: ["7M", "6M", "5M", "4M"], - bestow: ["7E", "6E", "5E"], - bide: ["7L1", "6L1", "5L1", "4L1"], - bite: ["7E", "6E", "5E", "4E"], + belch: ["7L47", "6L47"], + bounce: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "4E"], captivate: ["4M"], - charge: ["7E", "6E", "5E"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L9", "6L9", "5L9", "4L9"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E", "5D", "4E"], - cut: ["6M", "5M", "4M"], - defensecurl: ["7E", "6E", "5E", "4E"], + counter: ["7E", "6E", "5E", "4E"], + crosschop: ["7E", "6E", "5E", "4E"], + darkpulse: ["7M", "6M", "5T", "4M"], dig: ["6M", "5M", "4M"], - discharge: ["7L41", "6L41", "5L41", "4L29"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - electroball: ["7L25", "6L25", "5L25"], - electroweb: ["6T"], - endure: ["7L17", "6L17", "5L17", "4M", "4L17"], + drainpunch: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + dualchop: ["7T", "6T", "5T"], + dynamicpunch: ["7E", "6E", "5E", "4E"], + earthquake: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - faketears: ["7E", "6E", "5E", "4E"], - flail: ["7E", "6E", "5E", "4E"], - flash: ["6M", "5M", "4M"], - flatter: ["7E", "6E", "5E", "4E"], + fakeout: ["7E", "6E", "5E", "4E"], + feint: ["7E", "6E", "5E", "4E"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flatter: ["7L50", "6L50", "5L50", "4L45"], fling: ["7M", "6M", "5M", "4M"], - followme: ["7E", "6E", "6S0", "5E"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growl: ["7L1", "6L1", "5L1", "4L1"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], + furycutter: ["4T"], + gunkshot: ["7T", "6T", "5D", "5T", "4T"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hyperfang: ["7L49", "6L49", "5L49"], - iondeluge: ["7E", "6E"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], - lastresort: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L37"], - lightscreen: ["7M", "6M", "5M", "4M"], - magnetrise: ["6T", "5T", "4T"], - mudslap: ["4T"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7E", "6E", "5E", "4E"], + mefirst: ["7E", "6E", "5E", "4E"], + mudbomb: ["7L29", "6L29", "5L29", "4L29"], + mudslap: ["7L3", "6L3", "5L3", "5S1", "5S0", "4T", "4L3"], + nastyplot: ["7L38", "6L38", "5L38", "4L36"], naturalgift: ["4M"], - nuzzle: ["7L19", "6L19", "6S0"], - protect: ["7M", "6M", "6S0", "5M", "4M"], - quickattack: ["7L5", "6L5", "5L5", "5D", "4L5"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "5S1", "4M", "4L38"], + poisonsting: ["7L8", "6L8", "5D", "5L8", "5S1", "5S0", "4L8"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L15", "6L15", "5L15", "4L15"], + quickguard: ["7E", "6E"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - rollout: ["7E", "6E", "5E", "4T", "4E"], + revenge: ["7L22", "6L22", "5L22", "4L22"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], - shockwave: ["6T", "5D", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spark: ["7L13", "6L13", "5L13", "4L13"], + sludgebomb: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L43"], + sludgewave: ["7M", "6M", "5M"], + smellingsalts: ["7E", "6E", "5E", "4E"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - superfang: ["7L37", "6T", "6L37", "6S0", "5T", "5L37", "4T", "4L33"], - swagger: ["7M", "6M", "5M", "4M"], - sweetkiss: ["7L29", "6L29", "5L29", "4L25"], - swift: ["7L21", "6L21", "5L21", "4T", "4L21"], - tailwhip: ["7E", "6E", "5E"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + taunt: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "5S1", "5S0", "4M", "4L10"], + thief: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - voltswitch: ["7M", "6M", "5M"], + vacuumwave: ["7E", "6E", "5E", "4T", "4E"], + venoshock: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + wakeupslap: ["7E", "6E", "5E", "4E"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - buizel: {learnset: { - agility: ["7L41", "6L41", "5L28", "4L28"], - aquajet: ["7L24", "6L24", "5L21", "4L21"], - aquaring: ["7E", "6E", "5E"], - aquatail: ["7L38", "7E", "6T", "6L38", "6E", "5T", "5L55", "5E"], + toxicroak: {learnset: { + astonish: ["7L1", "6L1", "5L1", "4L1"], attract: ["7M", "6M", "5M", "4M"], - batonpass: ["7E", "6E", "5E", "4E"], - blizzard: ["7M", "6M", "5M", "4M"], + belch: ["7L58", "6L58"], + bounce: ["7T", "6T", "5T", "4T"], brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["4M"], bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], - doublehit: ["7L27", "6L27", "5L27"], - doubleslap: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], + dualchop: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flatter: ["7L62", "6L62", "5L62", "4L54"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["7E", "6E", "5E", "4E"], - furyswipes: ["7E", "6E", "5E", "4E"], - growl: ["7L4", "6L4", "5L1", "4L1"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["7E", "6E", "5E", "4T", "4E"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hydropump: ["7L45", "6L45", "5L45"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - mefirst: ["7E", "6E", "5E"], - mudslap: ["7E", "6E", "5E", "4T", "4E"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7T", "6T", "5T", "4T"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lowkick: ["7T", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mudbomb: ["7L29", "6L29", "5L29", "4L29"], + mudslap: ["7L3", "7L1", "6L1", "5L1", "4T", "4L1"], + nastyplot: ["7L41", "6L41", "5L41", "4L36"], naturalgift: ["4M"], - odorsleuth: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L41"], + poisonsting: ["7L8", "7L1", "6L1", "5L1", "4L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L18", "6L18", "5L10", "4L10"], - quickattack: ["7L11", "6L11", "5L3", "4L3"], + pursuit: ["7L15", "6L15", "5L15", "4L15"], raindance: ["7M", "6M", "5M", "4M"], - razorwind: ["7L35", "6L35", "5L45", "4L45"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], + revenge: ["7L22", "6L22", "5L22", "4L22"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - slash: ["7E", "6E", "5E", "5D", "4E"], + shadowball: ["7M", "6M", "5M", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - soak: ["7E", "6E"], - sonicboom: ["7L1", "6L1", "5L1", "4L1"], + sludgebomb: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L49"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["7L21", "6L21", "5L15", "4T", "4L15"], - switcheroo: ["7E", "6E", "5E"], - tailslap: ["7E", "6E", "5E"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7T", "6T", "5T", "4T"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5T", "4T"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - watergun: ["7L15", "6L15", "5L6", "5D", "4L6"], - waterpulse: ["6T", "5D", "4M"], - watersport: ["7L7", "6L7", "5L1", "5D", "4L1"], - whirlpool: ["7L31", "6L31", "5L36", "4M", "4L36"], + vacuumwave: ["4T"], + venoshock: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - floatzel: {learnset: { - agility: ["7L51", "6L51", "5L29", "4L29"], - aquajet: ["7L24", "6L24", "5L21", "4L21"], - aquatail: ["7L46", "6T", "6L46", "5T", "5L62", "4T"], + carnivine: {learnset: { + acidspray: ["7E"], attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["4M"], - bulkup: ["7M", "6M", "5M", "4M"], + bind: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1"], + bite: ["7L7", "6L7", "5D", "5L7", "4L7"], + bugbite: ["7T", "6T", "5T", "4T"], + bulletseed: ["4M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7L1", "6L1", "5L26", "4L26"], - dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], - doublehit: ["7L29", "6L29", "5L29"], + crunch: ["7L41", "6L41", "5L41", "4L37"], + cut: ["6M", "5M", "4M"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], + feintattack: ["7L27", "6L27", "5L27", "4L27"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gastroacid: ["7T", "6T", "5D", "5T", "4T"], + gigadrain: ["7T", "7E", "6T", "6E", "5T", "5E", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L1", "6L1", "5L1", "4L1"], hiddenpower: ["7M", "6M", "5M", "4M"], - hydropump: ["7L57", "6L57", "5L57"], hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icefang: ["7L1", "6L1", "5L1", "4L1"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - lowkick: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + ingrain: ["7L21", "6L21", "5L21", "4L21"], + knockoff: ["7T", "6T", "5T", "4T"], + leaftornado: ["7L31", "6L31", "5L31"], + leechseed: ["7E", "6E", "5E", "4E"], + magicalleaf: ["7E", "6E", "5E", "4E"], mudslap: ["4T"], naturalgift: ["4M"], + naturepower: ["7M", "6M"], payback: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], + powerwhip: ["7L50", "6L50", "5L51", "4L47"], protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L18", "6L18", "5L10", "4L10"], - quickattack: ["7L11", "7L1", "6L1", "5L1", "4L1"], - raindance: ["7M", "6M", "5M", "4M"], - razorwind: ["7L41", "6L41", "5L50", "4L50"], + ragepowder: ["7E", "6E", "5D", "5E"], + razorleaf: ["7E", "6E", "5E", "4E"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + slam: ["7E", "6E", "5E", "4E"], + sleeppowder: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - sonicboom: ["7L1", "6L1", "5L1", "4L1"], - strength: ["6M", "5M", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spitup: ["7L37", "6L37", "5L37", "4L31"], + stockpile: ["7L37", "6L37", "5L37", "4L31"], + stunspore: ["7E", "6E", "5E", "4E"], substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["7L21", "6L21", "5L15", "4T", "4L15"], - taunt: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + swallow: ["7L37", "6L37", "5L37", "4L31"], + sweetscent: ["7L17", "6L17", "5L17", "4L17"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - watergun: ["7L15", "6L15", "5L6", "4L6"], - waterpulse: ["6T", "4M"], - watersport: ["7L7", "7L1", "6L1", "5L1", "4L1"], - whirlpool: ["7L35", "6L35", "5L39", "4M", "4L39"], + vinewhip: ["7L11", "6L11", "5L11", "4L11"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + wringout: ["7L47", "6L47", "5L47", "4L41"], }}, - cherubi: {learnset: { - aromatherapy: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M"], - bulletseed: ["5D", "4M"], - captivate: ["4M"], + finneon: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + aircutter: ["4T"], + aquaring: ["7L33", "6L33", "5L33", "4L33"], + aquatail: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + attract: ["7M", "7L10", "6M", "6L10", "5D", "5M", "5L10", "4M", "4L10"], + aurorabeam: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7T", "7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["7L26", "6L26", "5L26", "4M", "4L26"], + charm: ["7E", "6E", "5E", "4E"], confide: ["7M", "6M"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["7E", "6E", "5E"], + confuseray: ["7E"], + defog: ["7T", "4M"], + dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], + flail: ["7E", "6E", "5E", "4E"], flash: ["6M", "5M", "4M"], - flowershield: ["7E", "6E"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7E", "6E", "5E", "4E"], - growth: ["7L7", "6L7", "5L7", "4L7"], - healingwish: ["7E", "6E", "5E"], - healpulse: ["7E", "6E", "5E", "5D"], - helpinghand: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + gust: ["7L17", "6L17", "5L17", "4L17"], + hail: ["7M", "6M", "5M", "4M"], hiddenpower: ["7M", "6M", "5M", "4M"], - leechseed: ["7L10", "6L10", "5L10", "5D", "4L10"], - luckychant: ["7L40", "6L40", "5L40", "4L40"], - magicalleaf: ["7L19", "6L19", "5L19", "4L19"], - morningsun: ["7L1", "6L1", "5L1"], - naturalgift: ["7E", "6E", "5E", "4M"], - naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], - petalblizzard: ["7L47", "6L47"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], protect: ["7M", "6M", "5M", "4M"], - razorleaf: ["7E", "6E", "5E", "4E"], + psybeam: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rollout: ["7E", "6E", "5E", "4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], + safeguard: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + signalbeam: ["7T", "7E", "6T", "6E", "5T", "5E"], + silverwind: ["7L49", "6L49", "5L49", "4M", "4L49"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], + snore: ["7T", "6T", "5T", "4T"], + soak: ["7L54", "6L54", "5L54"], + splash: ["7E", "6E", "5E", "4E"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - sweetscent: ["7E", "6E", "5E", "4E"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L31", "6L31", "5L31", "4L31"], + sweetkiss: ["7E", "6E", "5D", "5E", "4E"], + swift: ["4T"], + tailwind: ["7T", "6T", "5T", "4T"], tickle: ["7E", "6E", "5E", "4E"], toxic: ["7M", "6M", "5M", "4M"], - weatherball: ["7E", "6E", "5E", "4E"], - worryseed: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28"], + twister: ["4T"], + uturn: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L42"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L6", "6L6", "5L6", "4L6"], + waterpulse: ["7T", "7L22", "6T", "6L22", "5D", "5L22", "4M", "4L22"], + whirlpool: ["7L38", "6L38", "5L38", "4M", "4L38"], }}, - cherrim: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - bulletseed: ["4M"], - captivate: ["4M"], + lumineon: {learnset: { + aircutter: ["4T"], + aquaring: ["7L35", "6L35", "5L35", "4L35"], + aquatail: ["7T", "6T", "5T", "4T"], + attract: ["7M", "7L10", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7T", "7L53", "6T", "6L53", "5T", "5L53", "4T", "4L53"], + brine: ["4M"], + captivate: ["7L26", "6L26", "5L26", "4M", "4L26"], confide: ["7M", "6M"], - dazzlinggleam: ["7M", "6M"], + defog: ["7T", "4M"], + dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - growth: ["7L7", "7L1", "6L1", "5L1", "4L1"], - helpinghand: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + gust: ["7L17", "7L1", "6L1", "5L17", "4L17"], + hail: ["7M", "6M", "5M", "4M"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - leechseed: ["7L10", "7L1", "6L10", "5L10", "4L10"], - luckychant: ["7L48", "6L48", "5L48", "4L48"], - magicalleaf: ["7L19", "6L19", "5L19", "4L19"], - morningsun: ["7L1", "6L1", "5L1"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], naturalgift: ["4M"], - naturepower: ["7M", "6M"], - petalblizzard: ["7L50", "6L50"], - petaldance: ["7L1", "6L25", "5L25", "4L25"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], + safeguard: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], + signalbeam: ["7T", "6T", "5T"], + silverwind: ["7L59", "6L59", "5L59", "4M", "4L59"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], + snore: ["7T", "6T", "5T", "4T"], + soak: ["7L66", "7L1", "6L1", "5L66"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L35", "6L35", "5L35", "4L35"], + swift: ["4T"], + tailwind: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - worryseed: ["7L30", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + twister: ["4T"], + uturn: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L48"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L6", "7L1", "6L1", "5L1", "4L1"], + waterpulse: ["7T", "7L22", "6T", "6L22", "5L22", "4M", "4L22"], + whirlpool: ["7L42", "6L42", "5L42", "4M", "4L42"], }}, - shellos: {learnset: { - acidarmor: ["7E", "6E"], - amnesia: ["7E", "6E", "5E", "4E"], - ancientpower: ["4T"], + snover: {learnset: { attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - bodyslam: ["7L29", "6L29", "5L29", "4L29"], - brine: ["7E", "6E", "5E", "4M"], + avalanche: ["7E", "6E", "5D", "5E", "4M"], + blizzard: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bulletseed: ["7E", "6E", "5E", "4M"], captivate: ["4M"], - clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E"], - curse: ["7E", "6E", "5E", "4E"], - dive: ["6M", "5M", "4T"], + doubleedge: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], - fissure: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "6T", "5D", "5T", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L13", "6L13", "5L13", "4L13"], + growth: ["7E", "6E", "5E", "4E"], hail: ["7M", "6M", "5M", "4M"], - harden: ["7L4", "6L4", "5L4", "4L4"], headbutt: ["4T"], - hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + hiddenpower: ["7M", "6M", "5M", "4M"], icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - infestation: ["7M", "6M"], - memento: ["7E", "6E", "5E", "4E"], - mirrorcoat: ["7E", "6E", "5E", "4E"], - mist: ["7E", "6E", "5E"], - mudbomb: ["7L11", "6L11", "5L11", "4L11"], - muddywater: ["7L37", "6L37", "5L37", "4L37"], - mudslap: ["7L1", "6L1", "5L1", "5D", "4T", "4L1"], - mudsport: ["7L2", "6L2", "5L2", "4L2"], - naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T"], + iceshard: ["7L26", "6L26", "5L26", "4L26"], + icywind: ["7T", "7L9", "6T", "6L9", "5T", "5L9", "4T", "4L9"], + ingrain: ["7L31", "6L31", "5L31", "4L31"], + irontail: ["7T", "6T", "5T", "4M"], + leechseed: ["7E", "6E", "5E", "4E"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magicalleaf: ["7E", "6E", "5E", "4E"], + mist: ["7L21", "7E", "6L21", "6E", "5L21", "5E", "4L21", "4E"], + mudslap: ["4T"], + naturalgift: ["7E", "6E", "5E", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1"], protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], - recover: ["7L46", "6L46", "5L46", "4L46"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L5", "6L5", "5D", "5L5", "4L5"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "5D", "4M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E", "4T", "4E"], + shadowball: ["7M", "6M", "5M", "4M"], + sheercold: ["7L46", "6L46", "5L46", "4L46"], + skullbash: ["7E", "6E", "5E", "4E"], sleeptalk: ["7M", "6M", "5T", "4M"], - sludge: ["7E", "6E", "5E", "4E"], - snore: ["6T", "5T", "4T"], - spitup: ["7E", "6E", "5E", "4E"], - stockpile: ["7E", "6E", "5E", "4E"], - stringshot: ["4T"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stomp: ["7E", "6E", "5E", "4E"], substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swallow: ["7E", "6E", "5E", "4E"], + swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - trumpcard: ["7E", "6E", "5E", "4E"], - waterpulse: ["7L7", "6T", "6L7", "5L7", "4M", "4L7"], - whirlpool: ["4M"], - yawn: ["7E", "6E", "5E", "5D", "4E"], + waterpulse: ["7T", "6T", "4M"], + woodhammer: ["7L36", "6L36", "5L36", "4L36"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - gastrodon: {learnset: { - ancientpower: ["4T"], + abomasnow: {learnset: { attract: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - block: ["6T", "5T", "4T"], - bodyslam: ["7L29", "6L29", "5L29", "4L29"], - brine: ["4M"], + avalanche: ["4M"], + blizzard: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47"], + block: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M"], captivate: ["4M"], confide: ["7M", "6M"], - dig: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7T", "6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L13", "6L13", "5L13", "4L13"], hail: ["7M", "6M", "5M", "4M"], - harden: ["7L4", "7L1", "6L1", "5L1", "4L1"], headbutt: ["4T"], - hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - infestation: ["7M", "6M"], - mudbomb: ["7L11", "6L11", "5L11", "4L11"], - muddywater: ["7L41", "6L41", "5L41", "4L41"], - mudslap: ["7L1", "6L1", "5L1", "4T", "4L1"], - mudsport: ["7L2", "7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + iceshard: ["7L26", "6L26", "5L26", "4L26"], + icywind: ["7T", "7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + ingrain: ["7L31", "6L31", "5L31", "4L31"], + irontail: ["7T", "6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + mist: ["7L21", "6L21", "5L21", "4L21"], + mudslap: ["4T"], naturalgift: ["4M"], - painsplit: ["6T", "5T", "4T"], + outrage: ["7T", "6T", "5T", "4T"], + powdersnow: ["7L1", "6L1", "5L1", "4L1"], protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], - recover: ["7L54", "6L54", "5L54", "4L54"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L5", "7L1", "6L1", "5L1", "4L1"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], + seedbomb: ["7T", "6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sheercold: ["7L58", "6L58", "5L58", "4L58"], sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - stoneedge: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stompingtantrum: ["7T"], strength: ["6M", "5M", "4M"], - stringshot: ["4T"], substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpulse: ["7L7", "7L1", "6T", "6L1", "5L1", "4M", "4L1"], - whirlpool: ["4M"], + waterpulse: ["7T", "6T", "4M"], + woodhammer: ["7L36", "6L36", "5L36", "4L36"], + worryseed: ["7T", "6T", "5T", "4T"], }}, - drifloon: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aircutter: ["4T"], - amnesia: ["7L40", "6L40", "5L40"], - astonish: ["7L4", "6L4", "5L6", "4L6"], - attract: ["7M", "6M", "5M", "4M"], - batonpass: ["7L44", "6L44", "5L38", "4L33"], - bind: ["6T", "5T"], - bodyslam: ["7E", "6E", "5E", "4E"], - calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["4M"], + rotom: {learnset: { + allyswitch: ["7T"], + astonish: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], + charge: ["7L57", "7L1", "6L1", "5L57", "4L43"], chargebeam: ["7M", "6M", "5M", "4M"], - clearsmog: ["7E", "6E", "5E"], - confide: ["7M", "6M"], - constrict: ["7L1", "6L1", "5L1", "4L1"], - cut: ["6M", "5M", "4M"], - defog: ["7E", "6E", "5E", "4M"], - destinybond: ["7E", "6E", "5E", "4E"], - disable: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "7S2", "6M"], + confuseray: ["7L1", "6L1", "5L1", "4L1"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["7T"], + disarmingvoice: ["7S2"], + discharge: ["7L64", "7L1", "6L1", "5L64", "4L50"], + doubleteam: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15"], dreameater: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "6M", "5M", "4M"], + electroball: ["7L43", "6L43", "5L43"], + electroweb: ["7T", "6T", "5T"], endure: ["4M"], - explosion: ["7M", "7L50", "6M", "6L50", "5M", "5L46", "4M", "4L43"], facade: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], - focusenergy: ["7L13", "6L13", "5L14", "4L14"], + foulplay: ["7T", "6T"], frustration: ["7M", "6M", "5M", "4M"], - gust: ["7L8", "6L8", "5L11", "4L11"], - gyroball: ["7M", "6M", "5M", "4M"], - haze: ["7E", "6E", "5E", "4E"], - hex: ["7L27", "6L27", "5L22"], + hex: ["7L50", "6L50", "5L50"], hiddenpower: ["7M", "6M", "5M", "4M"], - hypnosis: ["7E", "6E", "5E", "5D", "4E"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - magiccoat: ["6T", "5T", "4T"], - memento: ["7E", "6E", "5E", "4E"], - minimize: ["7L1", "6L1", "5L1", "5D", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], mudslap: ["4T"], naturalgift: ["4M"], - ominouswind: ["7L20", "6L20", "5L33", "4T", "4L30"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], + ominouswind: ["7L29", "6L29", "5L29", "4T", "4L29"], + painsplit: ["7T", "6T", "5T", "4T"], protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], round: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - shadowball: ["7M", "7L36", "6M", "6L36", "5M", "5L43", "4M", "4L38"], - shockwave: ["6T", "4M"], - silverwind: ["4M"], - skillswap: ["6T", "5T", "5D", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "7L22", "6T", "6L22", "6S1", "5D", "5L22", "4M", "4L22"], + signalbeam: ["7T", "6T", "5D", "5T", "4T"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - spitup: ["7L32", "6L32", "5L30", "4L27"], - stockpile: ["7L25", "6L25", "5L27", "4L22"], - substitute: ["7M", "6M", "5M", "4M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + substitute: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swallow: ["7L32", "6L32", "5L30", "4L27"], swift: ["4T"], - tailwind: ["7E", "6T", "6E", "5T", "4T"], - telekinesis: ["5M"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], + thundershock: ["7L1", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], + thunderwave: ["7M", "7L1", "6M", "6L1", "6S1", "5D", "5M", "5L1", "4M", "4L1"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - weatherball: ["7E", "6E", "5E", "4E"], + trick: ["7T", "7L1", "6T", "6L1", "6S1", "5T", "5L1", "5S0", "4T", "4L1"], + uproar: ["7T", "7L8", "7S2", "6T", "6L8", "5T", "5L8", "5S0", "4T", "4L8"], + voltswitch: ["7M", "6M", "5M"], willowisp: ["7M", "6M", "5M", "4M"], }}, - drifblim: {learnset: { + rotomheat: {learnset: { + overheat: ["7L1", "6L1", "5T", "4T"], + }}, + rotomwash: {learnset: { + hydropump: ["7L1", "6L1", "5T", "4T"], + }}, + rotomfrost: {learnset: { + blizzard: ["7L1", "6L1", "5T", "4T"], + }}, + rotomfan: {learnset: { + airslash: ["7L1", "6L1", "5T", "4T"], + }}, + rotommow: {learnset: { + leafstorm: ["7L1", "6L1", "5T", "4T"], + }}, + uxie: {learnset: { acrobatics: ["7M", "6M", "5M"], - aircutter: ["4T"], - amnesia: ["7L46", "6L46", "5L46"], - astonish: ["7L4", "7L1", "6L1", "5L1", "4L1"], - attract: ["7M", "6M", "5M", "4M"], - batonpass: ["7L52", "6L52", "5L44", "4L37"], - bind: ["6T", "5T"], + allyswitch: ["7T"], + amnesia: ["7L46", "7S4", "6L46", "6S3", "5L46", "5S2", "4L46", "4S1", "4S0"], calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1", "5L1", "4L1"], - cut: ["6M", "5M", "4M"], - defog: ["4M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], + dazzlinggleam: ["7M", "6M"], doubleteam: ["7M", "6M", "5M", "4M"], dreameater: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - explosion: ["7M", "7L60", "6M", "6L60", "5M", "5L56", "4M", "4L51"], + endure: ["7L16", "6L16", "5L16", "4M", "4L16"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L50", "7S4", "6L50", "6S3", "5L51", "5S2", "4L51"], facade: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T"], + flail: ["7L61", "7L1", "6L1", "5L61", "5S2", "4L61"], flash: ["6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L13", "6L13", "5L14", "4L14"], + fling: ["7M", "6M", "5M", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S1", "4S0"], + gigadrain: ["7T", "6T", "5T", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L8", "7L1", "6L1", "5L1", "4L1"], - gyroball: ["7M", "6M", "5M", "4M"], - hex: ["7L27", "6L27", "5L22"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - magiccoat: ["6T", "5T", "4T"], - minimize: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "6T", "5T", "4T"], + imprison: ["7L6", "6L6", "5L6", "4L6"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + memento: ["7L76", "7L1", "6L1", "5L76", "4L76"], mudslap: ["4T"], - naturalgift: ["4M"], - ominouswind: ["7L20", "6L20", "5L37", "4T", "4L32"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], - phantomforce: ["7L65", "7L1", "6L1"], + naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], psychic: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - rest: ["7M", "6M", "5M", "4M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], return: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - shadowball: ["7M", "7L40", "6M", "6L40", "5M", "5L51", "4M", "4L44"], - shockwave: ["6T", "4M"], - silverwind: ["4M"], - skillswap: ["6T", "5T", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - spitup: ["7L34", "6L34", "5L32", "4L27"], - stockpile: ["7L25", "6L25", "5L27", "4L22"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swallow: ["7L34", "6L34", "5L32", "4L27"], - swift: ["4T"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "7S4", "6L21", "5L21", "4T", "4L21", "4S1"], + telekinesis: ["7T", "5M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "6T", "5T", "4T"], thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - willowisp: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M"], + wonderroom: ["7T", "6T", "5T"], + yawn: ["7L31", "7S4", "6L31", "6S3", "5L31", "4L31", "4S1", "4S0"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - buneary: {learnset: { - afteryou: ["7L43", "6T", "6L43", "5T", "5L43"], - agility: ["7L33", "6L33", "5L33", "4L33"], - attract: ["7M", "6M", "5M", "4M", "4E"], - babydolleyes: ["7L13", "6L10"], - batonpass: ["7L26", "6L26", "5L26", "4L26"], - bounce: ["7L56", "6T", "6L56", "5T", "5L56", "4T", "4L46"], - captivate: ["4M"], + mesprit: {learnset: { + acrobatics: ["7M", "6M", "5M"], + allyswitch: ["7T"], + blizzard: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L46", "6L46", "5L46", "4L43"], - circlethrow: ["7E", "6E", "5E"], + charm: ["7L46", "7S4", "6L46", "6S3", "5L46", "5S2", "4L46", "4S1", "4S0"], confide: ["7M", "6M"], - copycat: ["7E", "6E", "5E"], - cosmicpower: ["7E", "6E"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M"], - defensecurl: ["7L1", "6L1", "5L1", "4L1"], - dig: ["6M", "5M", "4M"], - dizzypunch: ["7L36", "6L36", "5L36", "4L36"], - doublehit: ["7E", "6E", "5E", "4E"], + confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], + copycat: ["7L61", "7L1", "6L1", "5L61", "5S2", "4L61"], + dazzlinggleam: ["7M", "6M"], doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "5D", "4M"], - encore: ["7E", "6E", "5E", "4E"], - endeavor: ["6T", "5T", "4T"], - endure: ["7L6", "6L6", "5L6", "4M", "4L6"], - entrainment: ["7L50", "6L50", "5L53"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L50", "7S4", "6L50", "6S3", "5L51", "5S2", "4L51"], facade: ["7M", "6M", "5M", "4M"], - fakeout: ["7E", "6E", "5E", "5D", "4E"], - faketears: ["7E", "6E", "5E", "4E"], - firepunch: ["7E", "6T", "6E", "5T", "5E", "4E"], - flail: ["7E", "6E", "5E", "4E"], + firepunch: ["7T", "6T", "5T", "4T"], + flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - focuspunch: ["7E", "6T", "6E", "5E", "4M"], - foresight: ["7L1", "6L1", "5L1", "5D", "4L1"], - frustration: ["7M", "7L1", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L36", "7S4", "6L36", "6S3", "5L36", "5S2", "4L36", "4S1", "4S0"], + gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - healingwish: ["7L63", "6L63", "5L63", "4L53"], - helpinghand: ["6T", "5T", "4T"], + healingwish: ["7L76", "7L1", "6L1", "5L76", "4L76"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], + hyperbeam: ["7M", "6M", "5M", "4M"], icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["7E", "6T", "6E", "5T", "5E", "4E"], - irontail: ["6T", "5T", "4M"], - jumpkick: ["7L23", "6L23", "5L23", "4L23"], - lastresort: ["6T", "5T", "4T"], - lowkick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - magiccoat: ["6T", "5T", "4T"], + icepunch: ["7T", "6T", "5T", "4T"], + imprison: ["7L6", "6L6", "5L6", "4L6"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M", "4M"], + luckychant: ["7L31", "6L31", "6S3", "5L31", "4L31", "4S1", "4S0"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mudslap: ["4T"], - mudsport: ["7E", "6E"], - naturalgift: ["4M"], - pound: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7L16", "6L16", "5L16", "4L16"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], return: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - skyuppercut: ["7E", "6E", "5E", "4E"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - splash: ["7L1", "6L1", "5L1", "4L1"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - sweetkiss: ["7E", "6E", "5E", "4E"], - swift: ["4T"], - switcheroo: ["7E", "6E", "5E", "4E"], - teeterdance: ["7E", "6E"], + swift: ["7L21", "7S4", "6L21", "5L21", "4T", "4L21", "4S1"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4E"], + thunderpunch: ["7T", "6T", "5T", "4T"], thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M"], - workup: ["7M", "5M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - lopunny: {learnset: { - afteryou: ["7L43", "6T", "6L43", "5T", "5L43"], - agility: ["7L33", "6L33", "5L33", "4L33"], - attract: ["7M", "6M", "5M", "4M"], - babydolleyes: ["7L13"], - batonpass: ["7L26", "6L26", "5L26", "4L26"], - blizzard: ["7M", "6M", "5M", "4M"], - bounce: ["7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L46"], - brutalswing: ["7M"], - captivate: ["4M"], + azelf: {learnset: { + acrobatics: ["7M", "6M", "5M"], + allyswitch: ["7T"], + calmmind: ["7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L46", "6L46", "5L46", "4L43"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M", "4M"], - defensecurl: ["7L1", "6L1", "5L1", "4L1"], - dig: ["6M", "5M", "4M"], - dizzypunch: ["7L36", "6L36", "5L36", "4L36"], + confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], + dazzlinggleam: ["7M", "6M"], + detect: ["7L16", "6L16", "5L16", "4L16"], doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "4M"], - endeavor: ["6T", "5T", "4T"], - endure: ["7L6", "6L6", "5L6", "4M", "4L6"], - entrainment: ["7L53", "6L53", "5L53"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7L76", "6M", "6L76", "5M", "5L76", "4M", "4L76"], + extrasensory: ["7L50", "7S4", "6L50", "6S3", "5L51", "5S2", "4L51"], facade: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["7T", "6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foresight: ["7L1", "6L1", "5L1", "4L1"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], + futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S1", "4S0"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - healingwish: ["7L63", "7L1", "6L1", "5L63", "4L53"], - helpinghand: ["6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - highjumpkick: ["7L66", "6L66"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - jumpkick: ["7L23", "6L23", "5L23", "4L23"], - lastresort: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - mirrorcoat: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["7T", "6T", "5T", "4T"], + imprison: ["7L6", "6L6", "5L6", "4L6"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T", "4M"], + knockoff: ["7T", "6T", "5T", "4T"], + laserfocus: ["7T"], + lastresort: ["7T", "7L61", "7L1", "6T", "6L1", "5T", "5L61", "4T", "4L61"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], mudslap: ["4T"], - naturalgift: ["4M"], - pound: ["7L1", "6L1", "5L1", "4L1"], + nastyplot: ["7L46", "7S4", "6L46", "6S3", "5L46", "5S2", "4L46", "4S1", "4S0"], + naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], + payback: ["7M", "6M", "5M", "4M"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7L16", "6L16", "5L16", "4L16"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "7L1", "6M", "6L13", "5M", "5L13", "4M", "4L13"], - rocksmash: ["6M", "5M", "4M"], - rototiller: ["7L1", "6L1"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["7T", "6T", "5T", "4T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - splash: ["7L1", "6L1", "5L1", "4L1"], - strength: ["6M", "5M", "4M"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], + swift: ["7L21", "7S4", "6L21", "5L21", "4T", "4L21", "4S1"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["7T", "5M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], + thunderpunch: ["7T", "6T", "5T", "4T"], thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M"], - workup: ["7M", "5M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "7L31", "7S4", "6T", "6L31", "6S3", "5T", "5L31", "5S2", "4T", "4L31", "4S1", "4S0"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - glameow: {learnset: { + dialga: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - assist: ["7L29", "6L29", "5L29", "4L29"], - assurance: ["7E", "6E", "5E", "5D", "4E"], - attract: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L45"], - bite: ["7E", "6E", "5E", "4E"], - captivate: ["7L32", "6L32", "5L32", "4M", "4L32"], - charm: ["7L25", "6L25", "5L25", "4L25"], + ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S0"], + aurasphere: ["7L37", "7S7", "7S8", "7S9", "7S10", "6L37", "6S5", "5L37", "5S4", "4L37"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], cut: ["6M", "5M", "4M"], - dig: ["6M", "5M", "4M"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "7S9", "7S10", "6T", "5T", "5S4", "4T"], + dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "4S0"], + dragonpulse: ["7T", "6T", "5T", "5S4", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "4S1"], + earthquake: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - fakeout: ["7L1", "6L1", "5L1", "5D", "4L1"], - faketears: ["7E", "6E", "5E", "4E"], - feintattack: ["7L17", "6L17", "5L17", "4L17"], - flail: ["7E", "6E", "5E", "4E"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], flash: ["6M", "5M", "4M"], - foulplay: ["6T", "5T"], + flashcannon: ["7M", "7L50", "7S7", "7S8", "7S9", "7S10", "6M", "6L50", "6S6", "6S5", "5M", "5L50", "4M", "4L42"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - furyswipes: ["7L20", "6L20", "5L20", "4L20"], - growl: ["7L8", "6L8", "5L8", "4L8"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], headbutt: ["4T"], + healblock: ["4L50", "4S1"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["7L48", "6M", "6L48", "5M", "5L48"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L13", "6L13", "5L13", "4L13"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7E", "6T", "6E", "5T", "5E", "4T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "7L42", "7S7", "7S8", "6T", "6L42", "6S5", "5T", "5L42", "4M"], + magnetrise: ["7T", "6T", "5T", "4T"], + metalburst: ["7L24", "6L24", "6S6", "5L24", "4L24"], + metalclaw: ["7L6", "6L6", "5L6", "4L6", "4S0"], mudslap: ["4T"], naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - playrough: ["7L50", "6L50"], + outrage: ["7T", "6T", "5T", "4T"], + overheat: ["7M", "6M", "6S6", "5M", "4M"], + powergem: ["7L19", "6L19", "5L19", "4L19"], protect: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], - quickattack: ["7E", "6E", "5E", "4E"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + roaroftime: ["7L46", "7S7", "7S8", "7S9", "7S10", "6L46", "6S6", "6S5", "5L46", "5S4", "4L40", "4S1", "4S0"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E", "4E"], - scratch: ["7L5", "6L5", "5L5", "4L5"], - secretpower: ["6M", "5D", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + secretpower: ["6M", "4M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - slash: ["7L37", "6L37", "5L37", "4L37"], + shockwave: ["7T", "6T", "4M"], + slash: ["7L15", "6L15", "5L15", "4L15", "4S1"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["7E", "6T", "6E", "5T", "5E", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L41", "6L41", "5L41", "4T", "4L41"], sunnyday: ["7M", "6M", "5M", "4M"], - superfang: ["6T", "5T", "4T"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - tailwhip: ["7E", "6E", "5E", "4E"], - taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "6M", "5M", "4M"], - wakeupslap: ["7E", "6E", "5E"], - waterpulse: ["6T", "4M"], - workup: ["7M", "5M"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], }}, - purugly: {learnset: { + palkia: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - assist: ["7L29", "6L29", "5L29", "4L29"], - attract: ["7M", "7L52", "6M", "6L52", "5M", "5L52", "4M", "4L53"], - bodyslam: ["7L45", "6L45", "5L45", "4L45"], + ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S0"], + aquaring: ["7L24"], + aquatail: ["7T", "7L42", "7L24", "7S7", "7S8", "6T", "6L24", "5T", "5L24", "4T", "4L24"], + aurasphere: ["7L37", "7S7", "7S8", "7S9", "7S10", "6L37", "6S6", "6S5", "5L37", "5S4", "4L37"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulkup: ["7M", "6M", "5M", "4M"], bulldoze: ["7M", "6M", "5M"], - captivate: ["7L32", "6L32", "5L32", "4M", "4L32"], - charm: ["7L25", "6L25", "5L25", "4L25"], confide: ["7M", "6M"], - covet: ["6T", "5T"], cut: ["6M", "5M", "4M"], - dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "7S9", "7S10", "6T", "5T", "5S4", "4T"], + dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "4S0"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "7L33", "6T", "6L33", "6S6", "6S5", "5T", "5L33", "4T", "4L33", "4S1"], + earthquake: ["7M", "6M", "5M", "4M"], echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - fakeout: ["7L1", "6L1", "5L1", "4L1"], - feintattack: ["7L17", "6L17", "5L17", "4L17"], - flash: ["6M", "5M", "4M"], - foulplay: ["6T", "5T"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - furyswipes: ["7L20", "6L20", "5L20", "4L20"], gigaimpact: ["7M", "6M", "5M", "4M"], - growl: ["7L8", "7L1", "6L1", "5L1", "4L1"], + gravity: ["7T", "6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + healblock: ["4L50", "4S1"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["7L60", "6M", "6L60", "5M", "5L60"], + honeclaws: ["6M", "5M"], + hydropump: ["7L50", "7S7", "7S8", "7S9", "7S10", "6L50", "6S6", "6S5", "5L50", "5S4", "4L42"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - hypnosis: ["7L13", "6L13", "5L13", "4L13"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], + hypervoice: ["7T", "6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + liquidation: ["7T"], mudslap: ["4T"], naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], + outrage: ["7T", "6T", "5T", "4T"], + powergem: ["7L19", "6L19", "5L19", "4L19"], protect: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], roar: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scratch: ["7L5", "7L1", "6L1", "5L1", "4L1"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - slash: ["7L37", "6L37", "5L37", "4L37"], + shockwave: ["7T", "6T", "4M"], + slash: ["7L15", "6L15", "5L15", "4L15", "4S1"], sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], + spacialrend: ["7L46", "7S7", "7S8", "7S9", "7S10", "6L46", "6S6", "6S5", "5L46", "5S4", "4L40", "4S1", "4S0"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "7L1", "6M", "6L38", "5M", "5L38", "4M", "4L38"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], thunder: ["7M", "6M", "5M", "4M"], thunderbolt: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - workup: ["7M", "5M"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + waterpulse: ["7T", "7L6", "6T", "6L6", "5L6", "4M", "4L6", "4S0"], + whirlpool: ["4M"], }}, - stunky: {learnset: { - acidspray: ["7L19", "6L32", "5L32"], - astonish: ["7E", "6E", "5E", "4E"], + heatran: {learnset: { + ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1", "4S2"], attract: ["7M", "6M", "5M", "4M"], - belch: ["7L43", "6L46"], - bite: ["7L21"], + bugbite: ["7T", "6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], captivate: ["4M"], confide: ["7M", "6M"], - crunch: ["7E", "6E", "5E", "4E"], - cut: ["6M", "5M", "4M"], + crunch: ["7L33", "7S5", "7S6", "6L33", "6S4", "5L33", "4L33", "4S1"], darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], dig: ["6M", "5M", "4M"], - doubleedge: ["7E", "6E", "5E", "4E"], doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + earthpower: ["7T", "7L73", "7L1", "7S7", "6T", "6L1", "5T", "5L73", "4T", "4L73", "4S2"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], - explosion: ["7M", "7L45", "6M", "6L49", "5M", "5L49", "4M", "4L44"], + eruption: ["4S2"], + explosion: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], - feint: ["7L15", "6L18", "5L18", "4L18"], fireblast: ["7M", "6M", "5M", "4M"], - flameburst: ["7E", "6E", "5E"], + firefang: ["7L17", "6L17", "5L17", "4L17"], + firespin: ["7L57", "7L1", "7S5", "7S6", "6L1", "5L57", "5S3", "4L57", "4S0"], + flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "6M", "5M", "4M"], - focusenergy: ["7L1", "6L1", "5L1", "4L1"], - foulplay: ["7E", "6T", "6E", "5T", "5E", "5D"], + flashcannon: ["7M", "7S7", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - furyswipes: ["7L9", "6L10", "5L10", "4L10"], - haze: ["7E", "6E", "5E", "4E"], + gigaimpact: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + heatwave: ["7T", "7L81", "7L1", "7S7", "6T", "6L1", "5T", "5L81", "4T", "4L81"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], - leer: ["7E", "6E", "5E", "4E"], - memento: ["7L33", "6L43", "5L43", "4L37"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "7L65", "7L1", "6T", "6L1", "5T", "5L65", "5S3", "4T", "4L65", "4S0"], + lavaplume: ["7L49", "7S5", "7S6", "6L49", "6S4", "5L49", "5S3", "4L49", "4S1", "4S0"], + leer: ["7L9", "6L9", "5L9", "4L9"], + magmastorm: ["7L96", "7L1", "7S7", "6L1", "5L96", "4L96", "4S2"], + metalsound: ["7L25", "6L25", "6S4", "5L25", "4L25", "4S1"], mudslap: ["4T"], naturalgift: ["4M"], - nightslash: ["7L31", "6L37", "5L37", "4L31"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M"], payback: ["7M", "6M", "5M", "4M"], - playrough: ["7E", "6E"], - poisongas: ["7L3", "6L4", "5L4", "4L4"], protect: ["7M", "6M", "5M", "4M"], - punishment: ["7E", "6E", "5E", "4E"], - pursuit: ["7E", "6E", "5E", "4E"], - raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scaryface: ["7E", "6E", "5E", "4E"], - scratch: ["7L1", "6L1", "5L1", "4L1"], - screech: ["7L7", "6L7", "5L7", "5D", "4L7"], + scaryface: ["7L41", "7S5", "7S6", "6L41", "6S4", "5L41", "5S3", "4L41", "4S1", "4S0"], secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L25", "6L22", "5L22", "4L22"], sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - smog: ["7E", "6E", "5E", "4E"], - smokescreen: ["7L13", "6L14", "5L14", "4L14"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["7T", "6T", "5T", "4M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L88", "6M", "6L88", "5M", "5L88", "4M", "4L88"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L39", "5D", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L20"], - venomdrench: ["7L37"], - venoshock: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7T", "6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], }}, - skuntank: {learnset: { - acidspray: ["7L19", "6L32", "5L32"], - attract: ["7M", "6M", "5M", "4M"], - belch: ["7L43", "6L56"], - bite: ["7L21"], - captivate: ["4M"], + regigigas: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + ancientpower: ["4T"], + avalanche: ["4M"], + block: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], - dig: ["6M", "5M", "4M"], + confuseray: ["7L1", "7S5", "7S6", "6L1", "5L1", "4L1", "4S1", "4S0"], + crushgrip: ["7L75", "7L1", "7S7", "6L1", "5L75", "4L75", "4S2"], + dizzypunch: ["7L1", "7S5", "7S6", "6L1", "5L1", "4L1", "4S1"], doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["7T", "7S7", "6T", "5T", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], - explosion: ["7M", "7L45", "6M", "6L61", "5M", "5L61", "4M", "4L52"], facade: ["7M", "6M", "5M", "4M"], - feint: ["7L15", "6L18", "5L18", "4L18"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "7L1", "6M", "6L34", "5M", "5L34", "4M", "4L34"], - focusenergy: ["7L1", "6L1", "5L1", "4L1"], - foulplay: ["6T", "5T"], + firepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foresight: ["7L1", "6L1", "6S4", "5L1", "4L1", "4S1"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - furyswipes: ["7L9", "6L10", "5L10", "4L10"], - gigaimpact: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "7L100", "6M", "6L100", "5M", "5L100", "4M", "4L100"], + gravity: ["7T", "6T", "5T", "4T"], headbutt: ["4T"], + heavyslam: ["7L90", "7L1", "7S7", "6L1", "5L90"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], - memento: ["7L33", "6L51", "5L51", "4L41"], + icepunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + icywind: ["7T", "6T", "5T", "4T", "4S2"], + ironhead: ["7T", "6T", "5T", "4T", "4S2"], + knockoff: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4L1", "4S1"], + megapunch: ["4L1"], mudslap: ["4T"], naturalgift: ["4M"], - nightslash: ["7L31", "6L41", "5L41", "4L31"], - payback: ["7M", "6M", "5M", "4M"], - poisongas: ["7L3", "7L1", "6L1", "5L1", "4L1"], - poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M"], + naturepower: ["7M", "6M"], + payback: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "5S3"], + poweruppunch: ["6M"], + psychup: ["7M", "6M", "5M", "4M"], raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], + revenge: ["7L25", "7S5", "7S6", "6L25", "6S4", "5L25", "5S3", "4L25"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4S2"], rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1", "4L1"], - screech: ["7L7", "7L1", "6L7", "5L7", "4L7"], + safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L25", "6L22", "5L22", "4L22"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - smokescreen: ["7L13", "6L14", "5L14", "4L14"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + stomp: ["4L1", "4S0"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L39", "4T"], sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7T", "6T", "5T", "4T", "4L25", "4S0"], swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L20"], - venomdrench: ["7L37"], - venoshock: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + wideguard: ["7L40", "6L40", "6S4", "5L40", "5S3"], + zenheadbutt: ["7T", "7L50", "7S5", "7S6", "7S7", "6T", "6L50", "6S4", "5T", "5L50", "5S3", "4T", "4L50", "4S0"], }}, - bronzor: {learnset: { - ancientpower: ["4T"], + giratina: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S1"], + aquatail: ["7T", "6T", "5T", "4T"], + aurasphere: ["7L37", "7S7", "6L37", "6S6", "6S5", "5L37", "5S4", "4L37"], + brutalswing: ["7M"], bulldoze: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M", "4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L11", "6L11", "5L11", "4L14"], - confusion: ["7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["7T", "4M"], + destinybond: ["7L24", "6L24", "5L24", "4L24"], doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "6S6", "5T", "4T"], + dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + dragonclaw: ["7M", "7L28", "7S7", "6M", "6L28", "5M", "5L28", "5S4", "4M", "4L28", "4S1"], + dragonpulse: ["7T", "6T", "5T", "5S4", "4M"], + dragontail: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "7L33", "7S7", "6T", "6L33", "5T", "5L33", "4T", "4L33", "4S0"], earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], - extrasensory: ["7L39", "6L39", "5L19", "4L19"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], - feintattack: ["7L21", "6L21", "5L21", "4L41"], - flash: ["6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7L29", "6L29", "5L29", "4L37"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "5D", "4T"], - gyroball: ["7M", "7L35", "6M", "6L35", "5M", "5L35", "4M", "4L35"], - healblock: ["7L45", "6L45", "5L45", "4L52"], - heavyslam: ["7L49", "6L49", "5L49"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + headbutt: ["4T"], + healblock: ["4L50", "4S0"], + hex: ["7L50", "6L50", "6S5", "5L50"], hiddenpower: ["7M", "6M", "5M", "4M"], - hypnosis: ["7L5", "6L5", "5L5", "5D", "4L7"], - imprison: ["7L9", "6L9", "5L9", "4L12"], - irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4L26"], - lightscreen: ["7M", "6M", "5M", "4M"], - metalsound: ["7L31", "6L31", "5L31"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "6S6", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + magiccoat: ["7T", "6T", "5T", "4T"], + mudslap: ["4T"], naturalgift: ["4M"], - payback: ["7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L49"], + ominouswind: ["7L6", "6L6", "5L6", "4T", "4L6", "4S1"], + outrage: ["7T", "6T", "5T", "4T"], + painsplit: ["7T", "6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], protect: ["7M", "6M", "5M", "4M"], psychic: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L15", "6L15", "5L15"], raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L30"], - sandstorm: ["7M", "6M", "5M", "4M"], + safeguard: ["7M", "6M", "5M", "4M"], + scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "5D", "4M"], + shadowclaw: ["7M", "7L42", "6M", "6L42", "6S5", "5M", "5L42", "4M", "4L42"], + shadowforce: ["7L46", "7S7", "6L46", "6S6", "6S5", "5L46", "5S4", "4L40", "4S1", "4S0"], + shadowsneak: ["7L19", "6L19", "5L19", "4L19"], + shockwave: ["7T", "6T", "4M"], + silverwind: ["4M"], + slash: ["7L15", "6L15", "5L15", "4L15", "4S0"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spite: ["7T", "6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - telekinesis: ["5M"], + swift: ["4T"], + tailwind: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], + twister: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], }}, - bronzong: {learnset: { - ancientpower: ["4T"], - block: ["7L1", "6T", "6L33", "5T", "5L33", "4T", "4L33"], - bulldoze: ["7M", "6M", "5M"], + cresselia: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "6M", "5M", "4M"], + aurorabeam: ["7L29", "7S4", "6L29", "6S3", "5L29", "4L29", "4S0"], calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - confuseray: ["7L11", "6L11", "5L11", "4L14"], confusion: ["7L1", "6L1", "5L1", "4L1"], - doubleteam: ["7M", "6M", "5M", "4M"], + doubleteam: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], dreameater: ["7M", "6M", "5M", "4M"], - earthquake: ["7M", "6M", "5M", "4M"], endure: ["4M"], - explosion: ["7M", "6M", "5M", "4M"], - extrasensory: ["7L42", "6L42", "5L19", "4L19"], + energyball: ["7M", "6M", "5M", "5S2", "4M"], facade: ["7M", "6M", "5M", "4M"], - feintattack: ["7L21", "6L21", "5L21", "4L50"], flash: ["6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7L29", "6L29", "5L29", "4L43"], + furycutter: ["4T"], + futuresight: ["7L38", "7S4", "6L38", "6S3", "5L38", "5S1", "4L38", "4S0"], gigaimpact: ["7M", "6M", "5M", "4M"], grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - gyroball: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L38"], - healblock: ["7L52", "6L52", "5L52", "4L67"], - heavyslam: ["7L58", "6L58", "5L58"], - hiddenpower: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "5S2", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypnosis: ["7L5", "7L1", "6L1", "5L1", "4L1"], - imprison: ["7L9", "7L1", "6L1", "5L1", "4L1"], - irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4L26"], - ironhead: ["6T", "5T", "4T"], + icebeam: ["7M", "6M", "5M", "5S2", "4M"], + icywind: ["7T", "6T", "5T", "4T"], lightscreen: ["7M", "6M", "5M", "4M"], - metalsound: ["7L31", "6L31", "5L31"], + lunardance: ["7L84", "7L1", "6L1", "5L84", "4L84"], + magiccoat: ["7T", "6T", "5T", "4T"], + magicroom: ["7T", "6T", "5T"], + mist: ["7L20", "6L20", "6S3", "5L20", "4L20", "4S0"], + moonblast: ["7L99", "6L99"], + moonlight: ["7L57", "7L1", "7S4", "6L1", "5L57", "5S1", "4L57"], + mudslap: ["4T"], naturalgift: ["4M"], - payback: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L61"], protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93"], + psychocut: ["7L66", "7L1", "6L1", "5L66", "4L66"], + psychoshift: ["7L75", "7L1", "6L1", "5L75", "4L75"], psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L15", "6L15", "5L15"], - raindance: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - recycle: ["6T", "5T", "4M"], + psyshock: ["7M", "6M", "5M", "5S2"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7T", "6T", "5T", "4M"], reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], return: ["7M", "6M", "5M", "4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - rollout: ["4T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L30"], - sandstorm: ["7M", "6M", "5M", "4M"], + safeguard: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], + slash: ["7L47", "7S4", "6L47", "6S3", "5L47", "5S1", "4L47", "4S0"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], + snore: ["7T", "6T", "5T", "4T"], solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - telekinesis: ["5M"], + swift: ["4T"], + telekinesis: ["7T", "5M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], + trick: ["7T", "6T", "5T", "5S1", "4T"], trickroom: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - chatot: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - agility: ["7E", "6E", "5E", "4E"], - aircutter: ["7E", "6E", "5E", "4T"], - attract: ["7M", "6M", "5M", "4M"], - boomburst: ["7E", "6E"], - captivate: ["4M"], - chatter: ["7L21", "7L1", "6L1", "5L21", "4L21", "4S0"], - confide: ["7M", "7L1", "6M", "6L1"], - defog: ["7E", "6E", "5E", "4M"], + phione: {learnset: { + acidarmor: ["7L31", "6L31", "5L31", "4L31"], + ancientpower: ["4T"], + aquaring: ["7L54", "6L54", "5L54", "4L54"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["4M"], + bubble: ["7L1", "6L1", "5L1", "4L1"], + bubblebeam: ["7L24", "6L24", "5L24", "4L24"], + charm: ["7L9", "6L9", "5L9", "4L9"], + confide: ["7M", "6M"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dive: ["7L61", "6M", "6L61", "5M", "5L61", "4T", "4L61"], doubleteam: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], - encore: ["7E", "6E", "5E", "4E"], endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - featherdance: ["7L50", "6L50", "5L53", "4L41"], - fly: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furyattack: ["7L17", "6L17", "5L17", "4L17", "4S0"], - growl: ["7L5", "6L5", "5L5", "4L5"], - heatwave: ["6T", "5T", "4T"], + grassknot: ["7M", "6M", "5M", "4M", "4S0"], + hail: ["7M", "6M", "5M", "4M"], + healbell: ["7T", "6T", "5T", "4T"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - hypervoice: ["7L57", "7L1", "6T", "6L1", "5T", "5L57", "4L45"], - mimic: ["7L33", "6L33", "5L33", "4L29"], - mirrormove: ["7L9", "6L9", "5L9", "5D", "4L9", "4S0"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], + liquidation: ["7T"], mudslap: ["4T"], - nastyplot: ["7E", "6E", "5E", "5D", "4E"], naturalgift: ["4M"], - nightshade: ["7E", "6E", "5E", "4E"], - ominouswind: ["4T"], - peck: ["7L1", "6L1", "5L1", "4L1"], - pluck: ["5M", "4M"], protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L69", "6M", "6L69", "5M", "5L69", "4M", "4L69", "4S0"], + rest: ["7M", "6M", "5M", "4M", "4S0"], return: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "5D", "4T"], - roost: ["7M", "7L41", "6M", "6L41", "5T", "5L41", "4M", "4L33"], - round: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], - sing: ["7L13", "6L13", "5L13", "4L13"], - skyattack: ["6T", "5T", "4T"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], - snore: ["6T", "5T", "4T"], - steelwing: ["7M", "7E", "6M", "6E", "5E", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - supersonic: ["7E", "6E", "5E", "4E"], + supersonic: ["7L16", "6L16", "5L16", "4L16"], + surf: ["7M", "6M", "5M", "4M", "4S0"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - synchronoise: ["7L49", "6L49", "5L49"], - tailwind: ["6T", "5T", "4T"], - taunt: ["7M", "7L25", "7L1", "6M", "6L1", "5M", "5L25", "4M", "4L25", "4S0"], - thief: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uproar: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L37"], + uproar: ["7T", "6T", "5T", "4T"], uturn: ["7M", "6M", "5M", "4M"], - workup: ["7M", "5M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "7L46", "6T", "6L46", "5L46", "4M", "4L46"], + watersport: ["7L1", "6L1", "5L1", "4L1"], + whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39"], }}, - spiritomb: {learnset: { - attract: ["7M", "6M", "5M", "4M"], + manaphy: {learnset: { + acidarmor: ["7L31", "6L31", "5L31", "4L31", "4S2"], + ancientpower: ["4T"], + aquaring: ["7L54", "7S6", "6L54", "5L54", "4L54", "4S3"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7T", "6T", "5T", "4T"], + brine: ["4M"], + bubble: ["7L1", "6L1", "6S5", "6S4", "5L1", "4L1", "4S1", "4S0"], + bubblebeam: ["7L24", "6L24", "5L24", "4L24"], calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["7E", "6E", "5E", "4M"], + charm: ["7L9", "6L9", "5L9", "4L9"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L1", "5L1", "4L1"], - curse: ["7L1", "6L1", "5L1", "4L1"], - darkpulse: ["7M", "7L49", "6M", "6L49", "5T", "5L49", "5S0", "4M", "4L49"], - destinybond: ["7E", "6E", "5E", "4E"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dive: ["7L61", "6M", "6L61", "5M", "5L61", "4T", "4L61"], doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], - embargo: ["7M", "6M", "5M", "5S0", "4M"], endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], facade: ["7M", "6M", "5M", "4M"], - feintattack: ["7L7", "6L7", "5L7", "4L7"], flash: ["6M", "5M", "4M"], - foulplay: ["7E", "6T", "6E", "5T"], + fling: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], gigaimpact: ["7M", "6M", "5M", "4M"], - grudge: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + healbell: ["7T", "6T", "5T", "4T"], + heartswap: ["7L76", "7S6", "6L76", "6S4", "5L76", "4L76", "4S3", "4S2"], + helpinghand: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], hyperbeam: ["7M", "6M", "5M", "4M"], - hypnosis: ["7L13", "6L13", "5L13", "4L13"], - icywind: ["6T", "5T", "5D", "4T"], - imprison: ["7E", "6E", "5E", "4E"], - infestation: ["7M", "6M"], - memento: ["7L43", "6L43", "5L43", "4L43"], - nastyplot: ["7L37", "6L37", "5L37", "4L37"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + liquidation: ["7T"], + mudslap: ["4T"], naturalgift: ["4M"], - nightmare: ["7E", "6E", "5E"], - ominouswind: ["7L25", "6L25", "5L25", "4T", "4L25"], - painsplit: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "5S0", "4M"], + psychic: ["7M", "6M", "5M", "4M"], psychup: ["7M", "6M", "5M", "4M"], - pursuit: ["7L1", "6L1", "5L1", "4L1"], - quash: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L69", "6M", "6L69", "5M", "5L69", "4M", "4L69"], + reflect: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M", "4M"], shadowball: ["7M", "6M", "5M", "4M"], - shadowsneak: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], - shockwave: ["6T", "4M"], - silverwind: ["5S0", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + skillswap: ["7T", "6T", "5T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - smokescreen: ["7E", "6E", "5E", "4E"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["7L1", "6T", "6L1", "5T", "5L1", "5D", "4T", "4L1"], + snore: ["7T", "6T", "5T", "4T"], substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], - sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7L16", "6L16", "5L16", "4L16"], + surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tailglow: ["7L1", "7S6", "6L1", "6S5", "6S4", "5L1", "4L1", "4S1", "4S0"], toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - uproar: ["6T", "5T", "4T"], - waterpulse: ["6T", "4M"], - willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], + uproar: ["7T", "6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "7L46", "7S6", "6T", "6L46", "5L46", "4M", "4L46", "4S3", "4S2"], + watersport: ["7L1", "6L1", "6S5", "6S4", "5L1", "4L1", "4S3", "4S1", "4S0"], + whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39", "4S2"], }}, - gible: {learnset: { + darkrai: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - attract: ["7M", "6M", "5M", "4M"], - bodyslam: ["7E", "6E", "5E", "4E"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], cut: ["6M", "5M", "4M"], - dig: ["7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31"], - doubleedge: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonbreath: ["7E", "6E", "5E", "4E"], - dragonclaw: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L7", "6L7", "5L7", "5D", "4L7"], - dragonrush: ["7L37", "6L37", "5L37", "4L37"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["5D", "4M"], + darkpulse: ["7M", "7L93", "6M", "6L93", "6S5", "5T", "5L93", "4M", "4L93", "4S2"], + darkvoid: ["7L66", "7S7", "6L66", "6S6", "6S5", "5L66", "5S4", "4L66", "4S2"], + disable: ["7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47", "4S3", "4S2"], + drainpunch: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "7L84", "6M", "6L84", "6S5", "5M", "5L84", "4M", "4L84"], + embargo: ["7M", "6M", "5M", "4M", "4L75"], + endure: ["4M"], facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "6M", "5M", "4M"], + feintattack: ["7L29", "7S7", "6L29", "6S6", "5L29", "5S4", "4L29", "4S3"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7T", "6T", "4M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + haze: ["7L57", "6L57", "5L57", "4L57"], headbutt: ["4T"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypnosis: ["7L20", "6L20", "5L20", "4L20", "4S3", "4S1", "4S0"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - ironhead: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - metalclaw: ["7E", "6E", "5E", "4E"], - mudshot: ["7E", "6E", "5E", "4E"], + knockoff: ["7T", "6T", "5T", "4T"], + lastresort: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], + nastyplot: ["7L75", "6L75", "5L75", "4L75"], naturalgift: ["4M"], - outrage: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + nightmare: ["7L38", "7S7", "6L38", "6S6", "5L38", "5S4", "4L38", "4S3", "4S1", "4S0"], + nightshade: ["4L1"], + ominouswind: ["7L1", "7S7", "6L1", "6S6", "5L1", "5S4", "4T", "4L1"], + payback: ["7M", "6M", "5M", "4M"], + phantomforce: ["6S5"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["4L29", "4S0"], + quickattack: ["7L11", "6L11", "5L11", "4L11", "4S0"], raindance: ["7M", "6M", "5M", "4M"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["7E", "6E", "5E", "4M"], + roaroftime: ["4S1"], + rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L3", "6L3", "5L3", "4L3"], - sandstorm: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], - sandtomb: ["7L19", "7E", "6L19", "6E", "5L19", "5E", "4L19", "4E"], - scaryface: ["7E", "6E", "5E", "4E"], secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M", "4S2"], shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L25", "6L25", "5L25", "4L25"], + shockwave: ["7T", "6T", "4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T", "4M"], + snore: ["7T", "6T", "5T", "4T"], + spacialrend: ["4S1"], + spite: ["7T", "6T", "5T", "4T"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L15", "6L15", "5L15", "4L15"], - thrash: ["7E", "6E", "5E", "4E"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["7E", "6E", "5E", "4T", "4E"], + trick: ["7T", "6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["7T", "6T", "5T"], + xscissor: ["7M", "6M", "5M", "4M"], }}, - gabite: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - attract: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + shaymin: {learnset: { + aircutter: ["4T"], + airslash: ["7L64", "6L64", "6S3", "5L64", "4L64"], + aromatherapy: ["7L64", "6L64", "6S4", "5L64", "4L64", "4S0"], + bulletseed: ["4M"], + celebrate: ["7S5"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - dig: ["7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["4L1"], doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonclaw: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L7", "7L1", "6L7", "5L7", "4L7"], - dragonrush: ["7L49", "6L49", "5L49", "4L49"], - dualchop: ["7L1", "6T", "6L24", "5T", "5L24"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "6T", "5T", "4T"], + endeavor: ["7T", "6T", "5T", "4T"], endure: ["4M"], + energyball: ["7M", "7L73", "6M", "6L73", "6S4", "5M", "5L73", "4M", "4L73", "4S0"], facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], + gigadrain: ["7T", "6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["4L82"], + growth: ["7L1", "7S5", "6L1", "6S3", "5L1", "4L1", "4S1"], headbutt: ["4T"], + healingwish: ["7L91", "6L91", "5L91", "4L91"], hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + leafstorm: ["7L91", "6L91", "5L91", "4L91"], + leechseed: ["7L19", "6L19", "5L19", "5S2", "4L19", "4S1"], + luckychant: ["4L91"], + magicalleaf: ["7L10", "6L10", "6S3", "5L10", "4L10", "4S1"], mudslap: ["4T"], - naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], + naturalgift: ["7L46", "6L46", "5L46", "4M", "4L46"], + naturepower: ["7M", "6M"], + ominouswind: ["4T"], protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + quickattack: ["7L28", "6L28", "5L28", "4L28"], rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + return: ["7M", "7S5", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L3", "7L1", "6L1", "5L1", "4L1"], - sandstorm: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], - sandtomb: ["7L19", "6L19", "5L19", "4L19"], + safeguard: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L28", "6L28", "5L28", "4L28"], + seedbomb: ["7T", "6T", "5T", "4T"], + seedflare: ["7L100", "7S5", "6L100", "6S4", "6S3", "5L100", "5S2", "4L100", "4S0"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "6S4", "5M", "4M", "4S0"], sunnyday: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7L82", "6L82", "5L82", "4L82"], + sweetscent: ["7L37", "6L37", "5L37", "5S2", "4L37"], swift: ["4T"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L15", "6L15", "5L15", "4L15"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7T", "7L28", "6T", "6L28", "5T", "5L28", "5S2", "4T", "4L28", "4S1"], + tailwind: ["7T", "6T", "5T", "4T"], toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], + worryseed: ["7T", "7L55", "6T", "6L55", "5T", "5L55", "4T", "4L55"], + zenheadbutt: ["7T", "6T", "5T", "4T"], }}, - garchomp: {learnset: { + arceus: {learnset: { aerialace: ["7M", "6M", "5M", "4M"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "6S4", "5M", "4M"], - brutalswing: ["7M"], + ancientpower: ["4T"], + aquatail: ["7T", "6T", "5T", "4T"], + avalanche: ["4M"], + blastburn: ["6S2"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + bulletseed: ["4M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - crunch: ["7L1", "6L48", "6S2", "6S3", "5L48", "5S1", "4L48"], + cosmicpower: ["7L1", "6L1", "5L1", "4L1"], cut: ["6M", "5M", "4M"], - dig: ["7L40", "6M", "6L40", "6S2", "6S3", "5M", "5L40", "5S1", "4M", "4L40"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["7T", "4M"], + dive: ["6M", "4T"], doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "6S2", "5T", "4T"], - dragonclaw: ["7M", "7L33", "6M", "6L33", "6S2", "6S3", "5M", "5L33", "5S1", "4M", "4L33"], - dragonpulse: ["6T", "5T", "4M"], - dragonrage: ["7L7", "7L1", "6L1", "5L1", "4L1"], - dragonrush: ["7L55", "6L55", "6S4", "5L55", "4L55"], - dragontail: ["7M", "6M", "5M"], - dualchop: ["7L1", "6T", "6L24", "5T", "5L24"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "6S4", "5M", "5S0", "4M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonclaw: ["7M", "6M", "5M", "4M"], + dragonpulse: ["7T", "6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthpower: ["7T", "7L20", "6T", "6L20", "6S2", "5T", "5L20", "4T", "4L20"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L40", "7S4", "6L40", "5L40", "4L40"], facade: ["7M", "6M", "5M", "4M"], - falseswipe: ["7M", "6M", "5M", "4M"], fireblast: ["7M", "6M", "5M", "4M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], flamethrower: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], frustration: ["7M", "6M", "5M", "4M"], furycutter: ["4T"], - gigaimpact: ["7M", "6M", "6S4", "5M", "4M"], + futuresight: ["7L60", "6L60", "5L60", "4L60"], + gigadrain: ["7T", "6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7T", "7L10", "6T", "6L10", "5T", "5L10", "4T", "4L10"], + hail: ["7M", "6M", "5M", "4M"], headbutt: ["4T"], + heatwave: ["7T", "6T", "5T", "4T"], hiddenpower: ["7M", "6M", "5M", "4M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M"], + hydrocannon: ["6S2"], + hyperbeam: ["7M", "7L80", "7S4", "6M", "6L80", "6S3", "5M", "5L80", "5S1", "4M", "4L80"], + hypervoice: ["7T", "7L30", "6T", "6L30", "5T", "5L30", "4L30"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7T", "6T", "5T", "4T"], incinerate: ["6M", "5M"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], + irondefense: ["7T", "6T", "5T", "4T"], + ironhead: ["7T", "6T", "5T", "4T"], + irontail: ["7T", "6T", "5T", "4M"], + judgment: ["7L100", "7S4", "6L100", "6S3", "6S2", "5L100", "5S1", "4L100", "4S0"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + liquidation: ["7T"], + magiccoat: ["7T", "6T", "5T", "4T"], mudslap: ["4T"], - naturalgift: ["4M"], - outrage: ["6T", "5T", "5S0", "5S1", "4T"], + naturalgift: ["7L1", "6L1", "5L1", "4M", "4L1"], + ominouswind: ["4T"], + outrage: ["7T", "6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M"], + payback: ["7M", "6M", "5M", "4M"], + perishsong: ["7L90", "6L90", "6S3", "5L90", "5S1", "4L90"], poisonjab: ["7M", "6M", "5M", "4M"], protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + punishment: ["7L1", "6L1", "5L1", "4L1"], + quash: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M", "4M"], + recover: ["7L70", "7S4", "6L70", "6S3", "5L70", "5S1", "4L70"], + recycle: ["7T", "6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + refresh: ["7L50", "6L50", "5L50", "4L50"], rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M", "4M"], roar: ["7M", "6M", "5M", "4M"], + roaroftime: ["4S0"], rockclimb: ["4M"], rockslide: ["7M", "6M", "5M", "4M"], rocksmash: ["6M", "5M", "4M"], rocktomb: ["7M", "6M", "5M", "4M"], round: ["7M", "6M", "5M"], - sandattack: ["7L3", "7L1", "6L1", "5L1", "4L1"], - sandstorm: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - sandtomb: ["7L19", "6L19", "5L19", "4L19"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], secretpower: ["6M", "4M"], + seismictoss: ["7L1", "6L1", "5L1", "4L1"], + shadowball: ["7M", "6M", "5M", "4M"], shadowclaw: ["7M", "6M", "5M", "4M"], - slash: ["7L28", "6L28", "6S3", "5L28", "4L28"], + shadowforce: ["4S0"], + shockwave: ["7T", "6T", "4M"], + signalbeam: ["7T", "6T", "5T", "4T"], + silverwind: ["4M"], sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "5S0", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spacialrend: ["4S0"], + stealthrock: ["7T", "6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], strength: ["6M", "5M", "4M"], substitute: ["7M", "6M", "5M", "4M"], sunnyday: ["7M", "6M", "5M", "4M"], surf: ["7M", "6M", "5M", "4M"], swagger: ["7M", "6M", "5M", "4M"], swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "5S0", "4M"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L15", "6L15", "5L15", "4L15"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwind: ["7T", "6T", "5T", "4T"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], toxic: ["7M", "6M", "5M", "4M"], + trick: ["7T", "6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7T", "6T", "4M"], whirlpool: ["4M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7T", "6T", "5T", "4T"], + }}, + victini: {learnset: { + blueflare: ["5S2"], + boltstrike: ["5S2"], + bounce: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + celebrate: ["7S6"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "6S4", "6S3", "5L1", "5S0"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7L65", "6L65", "5L65"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endure: ["7L9", "6L9", "6S4", "5L9", "5S0"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + finalgambit: ["7L81", "6L81", "5L81"], + fireblast: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], + flameburst: ["7L41", "6L41", "5L41"], + flamecharge: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + flamethrower: ["7M", "6M", "5M"], + flareblitz: ["7L73", "6L73", "5L73"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "5M"], + fusionbolt: ["5S1"], + fusionflare: ["5S1"], + gigaimpact: ["7M", "6M", "5M"], + glaciate: ["5S2"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L17", "6L17", "5L17"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["7L1", "6M", "6L1", "6S4", "5M", "5L1", "5S0"], + inferno: ["7L57", "6L57", "5L57"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + overheat: ["7M", "7L97", "6M", "6L97", "5M", "5L97"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "6S5", "6S4", "6S3", "5L1", "5S0"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + reversal: ["7L33", "7S6", "6L33", "5L33"], + rocksmash: ["6M", "5M"], + roleplay: ["7T", "6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + searingshot: ["7L1", "6L1", "6S3", "5L1", "5S1"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + storedpower: ["7L89", "7S6", "6L89", "5L89"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "6S5", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + vcreate: ["7S6", "6S5", "6S3", "5S2", "5S1"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "7L49", "6T", "6L49", "5T", "5L49"], + }}, + snivy: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + aromatherapy: ["5S0"], + attract: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], + coil: ["7L31", "6L31", "5L31"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + defog: ["7T"], + doubleteam: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M", "5S0"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], + gigadrain: ["7T", "7L34", "6T", "6L34", "5T", "5L34"], + glare: ["7E", "6E", "5E"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T", "6T", "5T"], + grassyterrain: ["7E", "6E"], + growth: ["7L13", "6L13", "5L13", "5S0"], + hiddenpower: ["7M", "6M", "5M"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + knockoff: ["7T", "6T", "5T"], + leafblade: ["7L28", "6L28", "5L28"], + leafstorm: ["7L43", "6L43", "5L43"], + leaftornado: ["7L16", "6L16", "5L16"], + leechseed: ["7L19", "6L19", "5L19"], + leer: ["7L4", "6L4", "5L4"], + lightscreen: ["7M", "6M", "5M"], + magicalleaf: ["7E", "6E", "5E"], + meanlook: ["7E", "6E", "5E"], + megadrain: ["7L22", "6L22", "5L22"], + mirrorcoat: ["7E", "6E", "5E"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + slam: ["7L25", "6L25", "5L25"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7E", "6E", "5E"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T", "5S0"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + twister: ["7E", "6E", "5E"], + vinewhip: ["7L7", "6L7", "5L7"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T"], + wrap: ["7L10", "6L10", "5L10"], + wringout: ["7L37", "6L37", "5L37"], + }}, + servine: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + attract: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], + coil: ["7L36", "6L36", "5L36"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + defog: ["7T"], + doubleteam: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "7L48", "6T", "6L48", "5T", "5L48"], + gigadrain: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T", "6T", "5T"], + growth: ["7L13", "6L13", "5L13"], + hiddenpower: ["7M", "6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leafblade: ["7L32", "6L32", "5L32"], + leafstorm: ["7L52", "6L52", "5L52"], + leaftornado: ["7L16", "6L16", "5L16"], + leechseed: ["7L20", "6L20", "5L20"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L24", "6L24", "5L24"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + vinewhip: ["7L7", "7L1", "6L1", "5L1"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T"], + wrap: ["7L10", "7L1", "6L1", "5L1"], + wringout: ["7L44", "6L44", "5L44"], + }}, + serperior: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + attract: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + brutalswing: ["7M"], + calmmind: ["7M", "6M", "5M"], + coil: ["7L38", "6L38", "5L38"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + defog: ["7T"], + doubleteam: ["7M", "6M", "5M"], + dragonpulse: ["7T", "6T", "5T"], + dragontail: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frenzyplant: ["7T", "6T", "5T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "7L56", "6T", "6L56", "5T", "5L56"], + gigadrain: ["7T", "7L44", "6T", "6L44", "6S1", "5T", "5L44", "5S0"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T", "6T", "5T"], + growth: ["7L13", "6L13", "5L13"], + hiddenpower: ["7M", "6M", "5M"], + holdback: ["6S1"], + hyperbeam: ["7M", "6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leafblade: ["7L32", "6L32", "5L32"], + leafstorm: ["7L62", "6L62", "6S1", "5L62", "5S0"], + leaftornado: ["7L16", "6L16", "5L16"], + leechseed: ["7L20", "6L20", "5L20", "5S0"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L24", "6L24", "5L24"], + naturepower: ["7M", "6M"], + outrage: ["7T", "6T", "5T"], + protect: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "5S0"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + vinewhip: ["7L7", "7L1", "6L1", "5L1"], + workup: ["7M"], + worryseed: ["7T", "6T", "5T"], + wrap: ["7L10", "7L1", "6L1", "5L1"], + wringout: ["7L50", "6L50", "6S1", "5L50"], + }}, + tepig: {learnset: { + assurance: ["7L31", "6L31", "5L31"], + attract: ["7M", "6M", "5M"], + bodyslam: ["7E", "6E", "5E"], + burnup: ["7E"], + confide: ["7M", "6M"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + curse: ["7E", "6E", "5E"], + defensecurl: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "6L7", "5L7"], + endeavor: ["7T", "7E", "6T", "6E", "5T", "5E"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T", "6T", "5T"], + flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + flamethrower: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + flareblitz: ["7L43", "6L43", "5L43"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + headsmash: ["7L37", "6L37", "5L37"], + heatcrash: ["7L27", "6L27", "5L27"], + heatwave: ["7T", "6T", "5T"], + heavyslam: ["7E", "6E", "5E"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + magnitude: ["7E", "6E", "5E"], + odorsleuth: ["7L9", "6L9", "5L9"], + overheat: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L21", "6L21", "5L21"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + smog: ["7L19", "6L19", "5L19"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "7E", "6T", "6E", "5T", "5E"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L3", "6L3", "5L3"], + takedown: ["7L25", "6L25", "5L25"], + taunt: ["7M", "6M", "5M"], + thrash: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M"], + yawn: ["7E", "6E", "5E"], + zenheadbutt: ["7T", "6T"], }}, - riolu: {learnset: { - agility: ["7E", "6E", "5E", "4E"], - attract: ["7M", "6M", "5M", "4M"], - aurasphere: ["4S0"], - bite: ["7E", "6E", "5E", "4E"], - blazekick: ["7E", "6E", "5E", "4E"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], + pignite: {learnset: { + armthrust: ["7L1", "6L17", "5L17"], + assurance: ["7L36", "6L36", "5L36"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E", "6E", "5E", "5D", "4E", "4S0"], - captivate: ["4M"], - circlethrow: ["7E", "6E", "5E"], confide: ["7M", "6M"], - copycat: ["7L19", "6L19", "5L29", "4L29"], - counter: ["7L6", "6L6", "5L6", "4L6"], - crosschop: ["7E", "6E", "5E", "4E"], - crunch: ["7E", "6E", "5E", "4E"], - detect: ["7E", "6E", "5E", "4E"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "4M", "4S0"], - dualchop: ["6T", "5T"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["7L1", "6L1", "5L1", "5D", "4M", "4L1"], - facade: ["7M", "6M", "5M", "4M"], - feint: ["7L11", "6L11", "5L15", "4L15"], - finalgambit: ["7L50", "6L50", "5L55"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "5D", "4M"], - followme: ["7E", "6E", "5E", "4E"], - forcepalm: ["7L15", "6L15", "5L11", "4L11"], - foresight: ["7L1", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - highjumpkick: ["7E", "6E", "5E", "4E"], - icepunch: ["6T", "5T", "4T"], - irondefense: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - irontail: ["6T", "5T", "4M"], - lowkick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + covet: ["7T", "6T", "5T"], + defensecurl: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7L1", "6L1", "5L1"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "6T", "5T"], + flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + flamethrower: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + flareblitz: ["7L52", "6L52", "5L52"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + headsmash: ["7L44", "6L44", "5L44"], + heatcrash: ["7L31", "6L31", "5L31"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + lowkick: ["7T", "6T", "5T"], lowsweep: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T", "4T"], - mindreader: ["7E", "6E", "5E", "4E"], - mudslap: ["4T"], - nastyplot: ["7L47", "6L47", "5L47"], - naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], + odorsleuth: ["7L9", "7L1", "6L1", "5L1"], + overheat: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - quickattack: ["7L1", "6L1", "5L1", "4L1"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - reversal: ["7L29", "6L29", "5L19", "4L19"], - roar: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L23", "6L23", "5L23"], round: ["7M", "6M", "5M"], - screech: ["7L24", "6L24", "5L24", "4L24"], - secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M", "4S0"], - skyuppercut: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - vacuumwave: ["7E", "6E", "5E", "4T", "4E"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smog: ["7L20", "6L20", "5L20"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L3", "7L1", "6L1", "5L1"], + takedown: ["7L28", "6L28", "5L28"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T", "4T"], + zenheadbutt: ["7T", "6T"], }}, - lucario: {learnset: { - agility: ["7E"], - attract: ["7M", "6M", "5M", "4M"], - aurasphere: ["7L1", "7S5", "6L1", "6S4", "5L51", "4L37", "4S0"], - bite: ["7E"], - blazekick: ["7E", "4S1"], - bonerush: ["7L29", "6L29", "5L19", "4L19", "4S1"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], + emboar: {learnset: { + armthrust: ["7L1", "6L17", "5L17"], + assurance: ["7L38", "6L38", "5L38"], + attract: ["7M", "6M", "5M"], + blastburn: ["7T", "6T", "5T"], + block: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E", "5S2", "5S3"], - calmmind: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M"], - captivate: ["4M"], - circlethrow: ["7E"], - closecombat: ["7L55", "6L1", "6S4", "5L55", "5S3", "4L42"], confide: ["7M", "6M"], - counter: ["7L6", "6L6", "5L6", "5S2", "4L6"], - crosschop: ["7E"], - crunch: ["7E"], - darkpulse: ["7M", "6M", "5T", "5L1", "4M", "4L1", "4S0"], - detect: ["7L1", "7E", "6L1", "5L1", "5S2", "4L1"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - dragonpulse: ["7L60", "7S5", "6T", "6L1", "5T", "5L60", "4M", "4L47", "4S0"], - drainpunch: ["6T", "5T", "4M"], - dualchop: ["6T", "5T"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - extremespeed: ["7L65", "7S5", "6L1", "5L65", "4L51"], - facade: ["7M", "6M", "5M", "4M"], - feint: ["7L11", "6L11", "5L15", "4L15"], - flashcannon: ["7M", "6M", "6S4", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - followme: ["7E"], - forcepalm: ["5L11", "4L11", "4S1"], - foresight: ["7L1", "6L1", "5L1", "4L1"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healpulse: ["7L51", "6L51", "5L42"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - highjumpkick: ["7E", "7S5"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - irondefense: ["7E", "6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - laserfocus: ["7L1"], - lowkick: ["7E", "6T", "5T", "4T"], + covet: ["7T", "6T", "5T"], + defensecurl: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7L1", "6L1", "5L1"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7T", "6T", "5T"], + flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + flamethrower: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + flareblitz: ["7L62", "6L62", "6S1", "5L62", "5S0"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7L1", "6L1", "5L1", "5S0"], + headsmash: ["7L50", "6L50", "6S1", "5L50", "5S0"], + heatcrash: ["7L31", "6L31", "5L31"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + holdback: ["6S1"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + ironhead: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + lowkick: ["7T", "6T", "5T"], lowsweep: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T", "4T"], - mefirst: ["7L37", "6L37", "5L29", "4L29"], - metalclaw: ["7L1", "6L1", "5L1", "5S2", "4L1"], - metalsound: ["7L24", "6L24", "5L24", "4L24"], - mindreader: ["7E"], - mudslap: ["4T"], - naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["7L15", "6M", "6L15"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - quickattack: ["7L1", "6L1", "6S4", "5L1", "4L1"], - quickguard: ["7L33", "6L33", "5L33"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], - round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shadowclaw: ["7M", "6M", "5M", "5S3", "4M"], - skyuppercut: ["7E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stoneedge: ["7M", "6M", "5M", "5S3", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M", "4S1"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "7L19", "6M", "6L19", "5M", "5L37", "4M", "4L33"], - thunderpunch: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - vacuumwave: ["7E", "4T"], - waterpulse: ["6T", "4M", "4S0"], - workup: ["7M", "7L42", "5M"], - zenheadbutt: ["6T", "5T", "4T"], - }}, - hippopotas: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - bite: ["7L7", "6L7", "5L7", "5D", "4L7"], - bodyslam: ["7E", "6E", "5E", "4E"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - confide: ["7M", "6M"], - crunch: ["7L31", "6L31", "5L31", "4L31"], - curse: ["7E", "6E", "5E", "4E"], - dig: ["7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], - doubleedge: ["7L44", "6L44", "5L44", "4L44"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - fissure: ["7L50", "6L50", "5L50", "4L50"], - frustration: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - irontail: ["6T", "5T", "4M"], - mudslap: ["4T"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - revenge: ["7E", "6E", "5E", "4E"], - roar: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + odorsleuth: ["7L9", "7L1", "6L1", "5L1"], + overheat: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L23", "6L23", "5L23"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "6L1", "5L1", "4L1"], - sandstorm: ["7M", "6M", "5M", "4M"], - sandtomb: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E"], - secretpower: ["6M", "4M"], - slackoff: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], - snore: ["6T", "5T", "4T"], - spitup: ["7E", "6E", "5E", "4E"], - stealthrock: ["6T", "5T", "4M"], - stockpile: ["7E", "6E", "5E", "5D", "4E"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "5D", "4T"], - swagger: ["7M", "6M", "5M", "4M"], - swallow: ["7E", "6E", "5E", "4E"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L19", "6L19", "5L19", "4L19"], - toxic: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - whirlwind: ["7E", "6E", "5E"], - yawn: ["7L13", "6L13", "5L13", "4L13"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + smog: ["7L20", "6L20", "5L20"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L3", "7L1", "6L1", "5L1"], + takedown: ["7L28", "6L28", "6S1", "5L28"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M", "5S0"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T"], }}, - hippowdon: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - bite: ["7L7", "7L1", "6L1", "5L1", "4L1"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + oshawott: {learnset: { + aerialace: ["7M", "6M", "5M"], + airslash: ["7E", "6E", "5E"], + aquajet: ["7L29", "6L29", "5L29"], + aquatail: ["7T", "7L35", "6T", "6L35", "5T", "5L35"], + assurance: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + brine: ["7E", "6E", "5E"], confide: ["7M", "6M"], - crunch: ["7L31", "6L31", "5L31", "4L31"], - dig: ["7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], - doubleedge: ["7L50", "6L50", "5L50", "4L50"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - fissure: ["7L60", "6L60", "5L60", "4L60"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icefang: ["7L1", "6L1", "5L1", "4L1"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - mudslap: ["4T"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + copycat: ["7E", "6E", "5E"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + encore: ["7L31", "6L31", "5L31"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L13", "6L13", "5L13"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L19", "6L19", "5L19"], + grassknot: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L43", "6L43", "5L43"], + icebeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + nightslash: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorshell: ["7L17", "6L17", "5L17"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L37", "6M", "6L37", "5M", "5L37"], + return: ["7M", "6M", "5M"], + revenge: ["7L25", "6L25", "5L25"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L1", "6L1", "5L1", "4L1"], - sandstorm: ["7M", "6M", "5M", "4M"], - sandtomb: ["7L25", "6L25", "5L25", "4L25"], - secretpower: ["6M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T"], - swagger: ["7M", "6M", "5M", "4M"], - tackle: ["7L1", "6L1", "5L1", "4L1"], - takedown: ["7L19", "6L19", "5L19", "4L19"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - toxic: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - yawn: ["7L13", "7L1", "6L1", "5L1", "4L1"], + sacredsword: ["7E"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L5", "6L5", "5L5"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trumpcard: ["7E", "6E", "5E"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L7", "6L7", "5L7"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "7L23", "6T", "6L23", "5L23"], + watersport: ["7L11", "6L11", "5L11"], + workup: ["7M"], + xscissor: ["7M", "6M", "5M"], }}, - skorupi: {learnset: { - acupressure: ["7L13", "6L13", "5L17", "4L17"], - aerialace: ["7M", "6M", "5M", "4M"], - agility: ["7E", "6E", "5E", "5D", "4E"], - aquatail: ["6T", "5T", "5D", "4T"], - attract: ["7M", "6M", "5M", "4M"], - bite: ["7L1", "6L1", "5L1", "5D", "4L1"], - brickbreak: ["7M", "6M", "5M", "4M"], - bugbite: ["7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], - captivate: ["4M"], + dewott: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L34", "6L33", "5L33"], + aquatail: ["7T", "7L42", "6T", "6L41", "5T", "5L41"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E", "4E"], - crosspoison: ["7L49", "6L49", "5L61", "4L50"], - crunch: ["7L45", "6L45", "5L56", "4L45"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - falseswipe: ["7M", "6M", "5M", "4M"], - feintattack: ["7E", "6E", "5E", "4E"], - fellstinger: ["7L47", "6L47"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["7L30", "6M", "6L30", "5M", "5L45"], - infestation: ["7M", "6M"], - irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], - knockoff: ["7L5", "6T", "6L5", "5T", "5L6", "4T", "4L6"], - leer: ["7L1", "6L1", "5L1", "4L1"], - mudslap: ["4T"], - naturalgift: ["4M"], - nightslash: ["7L38", "7E", "6L38", "6E", "5L38", "5E", "4E"], - payback: ["7M", "6M", "5M", "4M"], - pinmissile: ["7L9", "6L9", "5L12", "4L12"], - poisonfang: ["7L23", "6L23", "5L39", "4L39"], - poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L1", "6L1", "5L1", "4L1"], - poisontail: ["7E", "6E", "5E"], - protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L16", "7E", "6L16", "6E", "5L16", "5E", "4E"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + encore: ["7L37", "6L36", "5L36"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L13", "6L13", "5L13"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L21", "6L20", "5L20"], + grassknot: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L53", "6L52", "5L52"], + icebeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorshell: ["7L18", "6L17", "5L17"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L45", "6M", "6L44", "5M", "5L44"], + return: ["7M", "6M", "5M"], + revenge: ["7L29", "6L28", "5L28"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E", "4E"], - scaryface: ["7L41", "6L41", "5L23", "4L23"], - screech: ["7E", "6E", "5E", "4E"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - slash: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - toxicspikes: ["7L34", "6L34", "5L28", "4L28"], - twineedle: ["7E", "6E", "5E"], - venoshock: ["7M", "7L27", "6M", "6L27", "5M", "5L50"], - whirlwind: ["7E", "6E", "5E", "4E"], - xscissor: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L50", "6M", "6L49", "5M", "5L49"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L5", "7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L7", "7L1", "6L1", "5L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "7L26", "6T", "6L25", "5L25"], + watersport: ["7L11", "7L1", "6L1", "5L1"], + workup: ["7M"], + xscissor: ["7M", "6M", "5M"], }}, - drapion: {learnset: { - acupressure: ["7L13", "6L13", "5L17", "4L17"], - aerialace: ["7M", "6M", "5M", "4M"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "6M", "5M", "4M"], - bite: ["7L1", "6L1", "5L1", "4L1"], - brickbreak: ["7M", "6M", "5M", "4M"], - brutalswing: ["7M"], - bugbite: ["7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], - confide: ["7M", "6M"], - crosspoison: ["7L57", "6L57", "5L73", "4L58"], - crunch: ["7L49", "6L49", "5L65", "4L49"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - falseswipe: ["7M", "6M", "5M", "4M"], - fellstinger: ["7L53", "6L53"], - firefang: ["7L1", "6L1", "5L1", "4L1"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["7L30", "6M", "6L30", "5M", "5L48"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icefang: ["7L1", "6L1", "5L1", "4L1"], - infestation: ["7M", "6M"], - irontail: ["6T", "5T", "4M"], - knockoff: ["7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - leer: ["7L1", "6L1", "5L1", "4L1"], - mudslap: ["4T"], - naturalgift: ["4M"], - nightslash: ["7L38", "6L38", "5L38"], - payback: ["7M", "6M", "5M", "4M"], - pinmissile: ["7L9", "6L9", "5L12", "4L1"], - poisonfang: ["7L23", "6L23", "5L39", "4L39"], - poisonjab: ["7M", "6M", "5M", "4M"], - poisonsting: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L16", "6L16", "5L16"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + samurott: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L34", "6L33", "5L33"], + aquatail: ["7T", "7L46", "6T", "6L45", "5T", "5L45"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + confide: ["7M", "6M", "6S1"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dragontail: ["7M", "6M", "5M"], + encore: ["7L39", "6L38", "5L38"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L13", "6L13", "5L13"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L21", "6L20", "5L20"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + holdback: ["6S1"], + hydrocannon: ["7T", "6T", "5T"], + hydropump: ["7L63", "6L62", "6S1", "5L62", "5S0"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M", "5S0"], + icywind: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + liquidation: ["7T"], + megahorn: ["7L1", "6L1", "5L1", "5S0"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorshell: ["7L18", "6L17", "6S1", "5L17"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L51", "6M", "6L50", "5M", "5L50"], + return: ["7M", "6M", "5M"], + revenge: ["7L29", "6L28", "5L28"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L43", "6L43", "5L23", "4L23"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], - thunderfang: ["7L1", "6L1", "5L1", "4L1"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - toxicspikes: ["7L34", "6L34", "5L28", "4L28"], - venoshock: ["7M", "7L27", "6M", "6L27", "5M", "5L56"], - xscissor: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + slash: ["7L1", "6L36", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + smartstrike: ["7M"], + snore: ["7T", "6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T", "5S0"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L58", "6M", "6L57", "5M", "5L57"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L5", "7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L7", "7L1", "6L1", "5L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7T", "7L25", "6T", "6L25", "5L25"], + watersport: ["7L11", "7L1", "6L1", "5L1"], + workup: ["7M"], + xscissor: ["7M", "6M", "5M"], }}, - croagunk: {learnset: { - acupressure: ["7E", "6E", "5E"], - astonish: ["7L1", "6L1", "5L1", "5S0", "4L1"], - attract: ["7M", "6M", "5M", "4M"], - belch: ["7L47", "6L47"], - bounce: ["6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - bulletpunch: ["7E", "6E", "5E", "4E"], - captivate: ["4M"], + patrat: {learnset: { + afteryou: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + aquatail: ["7T", "6T", "5T"], + assurance: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + batonpass: ["7L38", "6L33", "5L33"], + bide: ["7L8", "6L8", "5L8"], + bite: ["7L6", "6L6", "5L6"], + bulletseed: ["7E"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "4E"], - crosschop: ["7E", "6E", "5E", "4E"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["7E", "6T", "6E", "5T", "5E", "5D"], - dualchop: ["6T", "5T"], - dynamicpunch: ["7E", "6E", "5E", "4E"], - earthquake: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - fakeout: ["7E", "6E", "5E", "4E"], - feint: ["7E", "6E", "5E", "4E"], - feintattack: ["7L17", "6L17", "5L17", "4L17"], - flatter: ["7L50", "6L50", "5L50", "4L45"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gunkshot: ["6T", "5T", "5D", "4T"], - headbutt: ["7E", "6E", "5E", "4T", "4E"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - meditate: ["7E", "6E", "5E", "4E"], - mefirst: ["7E", "6E", "5E", "4E"], - mudbomb: ["7L29", "6L29", "5L29", "4L29"], - mudslap: ["7L3", "6L3", "5L3", "5S0", "5S1", "4T", "4L3"], - nastyplot: ["7L38", "6L38", "5L38", "4L36"], - naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "5S1", "4M", "4L38"], - poisonsting: ["7L8", "6L8", "5L8", "5S0", "5S1", "5D", "4L8"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L15", "6L15", "5L15", "4L15"], - quickguard: ["7E", "6E"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + crunch: ["7L16", "6L16", "5L16"], + cut: ["6M", "5M"], + detect: ["7L11", "6L11", "5L11"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + flail: ["7E", "6E", "5E"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L26"], + foresight: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperfang: ["7L31", "6L28", "5L28"], + hypnosis: ["7L18", "6L18", "5L18"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T"], + leer: ["7L3", "6L3", "5L3"], + lowkick: ["7T", "6T", "5T"], + meanlook: ["7L36", "6L31", "5L31"], + nastyplot: ["7L33"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - revenge: ["7L22", "6L22", "5L22", "4L22"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + return: ["7M", "6M", "5M"], + revenge: ["7E", "6E", "5E"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L43"], - sludgewave: ["7M", "6M", "5M"], - smellingsalts: ["7E", "6E", "5E", "4E"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], - sunnyday: ["7M", "6M", "5M", "4M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], - taunt: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "5S0", "5S1", "4M", "4L10"], - thief: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - vacuumwave: ["7E", "6E", "5E", "4T", "4E"], - venoshock: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - wakeupslap: ["7E", "6E", "5E", "4E"], - workup: ["7M", "5M"], - xscissor: ["7M", "6M", "5M", "4M"], + sandattack: ["7L13", "6L13", "5L13"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + slam: ["7L41", "6L36", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["7T", "7L21", "6T", "6L21", "5T", "5L21"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tearfullook: ["7E"], + thunderbolt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "7L28", "6L26", "5M", "5L26"], + zenheadbutt: ["7T", "6T", "5T"], }}, - toxicroak: {learnset: { - astonish: ["7L1", "6L1", "5L1", "4L1"], - attract: ["7M", "6M", "5M", "4M"], - belch: ["7L58", "6L58"], - bounce: ["6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + watchog: {learnset: { + afteryou: ["7T", "7L25", "6T", "6L25", "5T", "5L25"], + aquatail: ["7T", "6T", "5T"], + attract: ["7M", "6M", "5M"], + batonpass: ["7L46", "6L39", "5L39"], + bide: ["7L8", "6L8", "5L8"], + bite: ["7L6", "7L1", "6L1", "5L1"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T"], - dualchop: ["6T", "5T"], - earthquake: ["7M", "6M", "5M", "4M"], - embargo: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - feintattack: ["7L17", "6L17", "5L17", "4L17"], - flatter: ["7L62", "6L62", "5L62", "4L54"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gunkshot: ["6T", "5T", "4T"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - lowkick: ["6T", "5T", "4T"], - lowsweep: ["7M", "6M", "5M"], - mudbomb: ["7L29", "6L29", "5L29", "4L29"], - mudslap: ["7L3", "7L1", "6L1", "5L1", "4T", "4L1"], - nastyplot: ["7L41", "6L41", "5L41", "4L36"], - naturalgift: ["4M"], - payback: ["7M", "6M", "5M", "4M"], - poisonjab: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L41"], - poisonsting: ["7L8", "7L1", "6L1", "5L1", "4L1"], + confuseray: ["7L1", "6L20", "5L20"], + covet: ["7T", "6T", "5T"], + crunch: ["7L16", "6L16", "5L16"], + cut: ["6M", "5M"], + detect: ["7L11", "6L11", "5L11"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L29"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hyperfang: ["7L36", "6L32", "5L32"], + hypnosis: ["7L18", "6L18", "5L18"], + icepunch: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T"], + leer: ["7L3", "7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + meanlook: ["7L43", "6L36", "5L36"], + nastyplot: ["7L39"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - pursuit: ["7L15", "6L15", "5L15", "4L15"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "7L32", "6M", "6L29", "5M", "5L29"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - revenge: ["7L22", "6L22", "5L22", "4L22"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L49"], - sludgewave: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], - sunnyday: ["7M", "6M", "5M", "4M"], - superfang: ["6T", "5T", "4T"], - swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "4M", "4L10"], - thief: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - vacuumwave: ["4T"], - venoshock: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + sandattack: ["7L13", "6L13", "5L13"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + slam: ["7L50", "6L43", "5L43"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["7T", "7L22", "6T", "6L22", "5T", "5L22"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], workup: ["7M", "5M"], - xscissor: ["7M", "6M", "5M", "4M"], - }}, - carnivine: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], - bite: ["7L7", "6L7", "5L7", "5D", "4L7"], - bugbite: ["6T", "5T", "4T"], - bulletseed: ["4M"], - captivate: ["4M"], - confide: ["7M", "6M"], - crunch: ["7L41", "6L41", "5L41", "4L37"], - cut: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - feintattack: ["7L27", "6L27", "5L27", "4L27"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gastroacid: ["6T", "5T", "5D", "4T"], - gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7E", "6E", "5E"], - growth: ["7L1", "6L1", "5L1", "4L1"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - infestation: ["7M", "6M"], - ingrain: ["7L21", "6L21", "5L21", "4L21"], - knockoff: ["6T", "5T", "4T"], - leaftornado: ["7L31", "6L31", "5L31"], - leechseed: ["7E", "6E", "5E", "4E"], - magicalleaf: ["7E", "6E", "5E", "4E"], - mudslap: ["4T"], - naturalgift: ["4M"], - naturepower: ["7M", "6M"], - payback: ["7M", "6M", "5M", "4M"], - powerwhip: ["7L50", "6L50", "5L51", "4L47"], - protect: ["7M", "6M", "5M", "4M"], - ragepowder: ["7E", "6E", "5E", "5D"], - razorleaf: ["7E", "6E", "5E", "4E"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], - slam: ["7E", "6E", "5E", "4E"], - sleeppowder: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - spitup: ["7L37", "6L37", "5L37", "4L31"], - stockpile: ["7L37", "6L37", "5L37", "4L31"], - stunspore: ["7E", "6E", "5E", "4E"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swallow: ["7L37", "6L37", "5L37", "4L31"], - sweetscent: ["7L17", "6L17", "5L17", "4L17"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - thief: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - vinewhip: ["7L11", "6L11", "5L11", "4L11"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - wringout: ["7L47", "6L47", "5L47", "4L41"], + zenheadbutt: ["7T", "6T", "5T"], }}, - finneon: {learnset: { - agility: ["7E", "6E", "5E", "4E"], - aircutter: ["4T"], - aquaring: ["7L33", "6L33", "5L33", "4L33"], - aquatail: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - attract: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "5D", "4M", "4L10"], - aurorabeam: ["7E", "6E", "5E"], - blizzard: ["7M", "6M", "5M", "4M"], - bounce: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], - brine: ["7E", "6E", "5E", "4M"], - captivate: ["7L26", "6L26", "5L26", "4M", "4L26"], - charm: ["7E", "6E", "5E", "4E"], + lillipup: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["7T", "7E", "6T", "6E"], + attract: ["7M", "6M", "5M"], + babydolleyes: ["7L10", "6L10"], + bite: ["7L8", "6L8", "5L8"], + charm: ["7E", "6E", "5E"], confide: ["7M", "6M"], - defog: ["4M"], - dive: ["6M", "5M", "4T"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - flail: ["7E", "6E", "5E", "4E"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gust: ["7L17", "6L17", "5L17", "4L17"], - hail: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - naturalgift: ["4M"], - naturepower: ["7M", "6M"], - ominouswind: ["4T"], - payback: ["7M", "6M", "5M", "4M"], - pound: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - psybeam: ["7E", "6E", "5E", "4E"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + crunch: ["7L22", "6L22", "5L22"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + firefang: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + helpinghand: ["7T", "7L12", "6T", "6L12", "5T", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + howl: ["7E", "6E", "5E"], + hypervoice: ["7T", "6T", "5T"], + icefang: ["7E", "6E", "5E"], + lastresort: ["7T", "7L36", "6T", "6L36", "5T", "5L36"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E"], + odorsleuth: ["7L5", "6L5", "5L5"], + playrough: ["7L45", "6L45"], + protect: ["7M", "6M", "5M"], + psychicfangs: ["7E"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L29", "6M", "6L29", "5M", "5L29"], + return: ["7M", "6M", "5M"], + reversal: ["7L33", "6L33", "5L33"], + roar: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - signalbeam: ["7E", "6T", "6E", "5T", "5E"], - silverwind: ["7L49", "6L49", "5L49", "4M", "4L49"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - soak: ["7L54", "6L54", "5L54"], - splash: ["7E", "6E", "5E", "4E"], - substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - sweetkiss: ["7E", "6E", "5E", "5D", "4E"], - swift: ["4T"], - tailwind: ["6T", "5T", "4T"], - tickle: ["7E", "6E", "5E", "4E"], - toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uturn: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L42"], - waterfall: ["7M", "6M", "5M", "4M"], - watergun: ["7L6", "6L6", "5L6", "4L6"], - waterpulse: ["7L22", "6T", "6L22", "5L22", "5D", "4M", "4L22"], - whirlpool: ["7L38", "6L38", "5L38", "4M", "4L38"], + sandattack: ["7E", "6E", "5E"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L15", "6L15", "5L15"], + thunderbolt: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L19", "6L19", "5M", "5L19"], + yawn: ["7E", "6E", "5E"], }}, - lumineon: {learnset: { - aircutter: ["4T"], - aquaring: ["7L35", "6L35", "5L35", "4L35"], - aquatail: ["6T", "5T", "4T"], - attract: ["7M", "7L10", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - blizzard: ["7M", "6M", "5M", "4M"], - bounce: ["7L53", "6T", "6L53", "5T", "5L53", "4T", "4L53"], - brine: ["4M"], - captivate: ["7L26", "6L26", "5L26", "4M", "4L26"], + herdier: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["7T", "6T"], + attract: ["7M", "6M", "5M"], + bite: ["7L8", "7L1", "6L1", "5L1"], confide: ["7M", "6M"], - defog: ["4M"], - dive: ["6M", "5M", "4T"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gust: ["7L17", "7L1", "6L1", "5L17", "4L17"], - hail: ["7M", "6M", "5M", "4M"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - naturalgift: ["4M"], - ominouswind: ["4T"], - payback: ["7M", "6M", "5M", "4M"], - pound: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + crunch: ["7L24", "6L24", "5L24"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + helpinghand: ["7T", "7L12", "6T", "6L12", "5T", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + lastresort: ["7T", "7L42", "6T", "6L42", "5T", "5L42"], + leer: ["7L1", "6L1", "5L1"], + odorsleuth: ["7L5", "7L1", "6L1", "5L1"], + payback: ["7M", "6M", "5M"], + playrough: ["7L52", "6L52"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L33", "6M", "6L33", "5M", "5L33"], + return: ["7M", "6M", "5M"], + reversal: ["7L38", "6L38", "5L38"], + roar: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - signalbeam: ["6T", "5T"], - silverwind: ["7L59", "6L59", "5L59", "4M", "4L59"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - soak: ["7L66", "7L1", "6L1", "5L66"], - substitute: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - tailwind: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - uturn: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L48"], - waterfall: ["7M", "6M", "5M", "4M"], - watergun: ["7L6", "7L1", "6L1", "5L1", "4L1"], - waterpulse: ["7L22", "6T", "6L22", "5L22", "4M", "4L22"], - whirlpool: ["7L42", "6L42", "5L42", "4M", "4L42"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L15", "6L15", "5L15"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L20", "6L20", "5M", "5L20"], }}, - snover: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - avalanche: ["7E", "6E", "5E", "5D", "4M"], - blizzard: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], - bulletseed: ["7E", "6E", "5E", "4M"], - captivate: ["4M"], + stoutland: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["7T", "6T"], + attract: ["7M", "6M", "5M"], + bite: ["7L8", "7L1", "6L1", "5L1"], confide: ["7M", "6M"], - doubleedge: ["7E", "6E", "5E", "4E"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "5D", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7L13", "6L13", "5L13", "4L13"], - growth: ["7E", "6E", "5E", "4E"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - iceshard: ["7L26", "6L26", "5L26", "4L26"], - icywind: ["7L9", "6T", "6L9", "5T", "5L9", "4T", "4L9"], - ingrain: ["7L31", "6L31", "5L31", "4L31"], - irontail: ["6T", "5T", "4M"], - leechseed: ["7E", "6E", "5E", "4E"], - leer: ["7L1", "6L1", "5L1", "4L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - magicalleaf: ["7E", "6E", "5E", "4E"], - mist: ["7L21", "7E", "6L21", "6E", "5L21", "5E", "4L21", "4E"], - mudslap: ["4T"], - naturalgift: ["7E", "6E", "5E", "4M"], - powdersnow: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - razorleaf: ["7L5", "6L5", "5L5", "5D", "4L5"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + covet: ["7T", "6T", "5T"], + crunch: ["7L24", "6L24", "5L24"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + firefang: ["7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + helpinghand: ["7T", "7L12", "6T", "6L12", "5T", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + icefang: ["7L1", "6L1", "5L1"], + ironhead: ["7T", "6T", "5T"], + lastresort: ["7T", "7L51", "6T", "6L51", "5T", "5L51"], + leer: ["7L1", "6L1", "5L1"], + odorsleuth: ["7L5", "7L1", "6L1", "5L1"], + payback: ["7M", "6M", "5M"], + playrough: ["7L63", "6L63"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L36", "6M", "6L36", "5M", "5L36"], + return: ["7M", "6M", "5M"], + reversal: ["7L42", "6L42", "5L42"], + roar: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], - shadowball: ["7M", "6M", "5M", "4M"], - sheercold: ["7L46", "6L46", "5L46", "4L46"], - skullbash: ["7E", "6E", "5E", "4E"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stomp: ["7E", "6E", "5E", "4E"], - substitute: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - woodhammer: ["7L36", "6L36", "5L36", "4L36"], - worryseed: ["6T", "5T", "4T"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L15", "6L15", "5L15"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderfang: ["7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L20", "6L20", "5M", "5L20"], }}, - abomasnow: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - avalanche: ["4M"], - blizzard: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47"], - block: ["6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], - bulletseed: ["4M"], - captivate: ["4M"], + purrloin: {learnset: { + aerialace: ["7M", "6M", "5M"], + assist: ["7L6", "6L6", "5L6"], + assurance: ["7L28", "6L28", "5L28"], + attract: ["7M", "6M", "5M"], + captivate: ["7L33", "6L33", "5L33"], + charm: ["7E", "6E", "5E"], confide: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - frostbreath: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["7L13", "6L13", "5L13", "4L13"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - iceshard: ["7L26", "6L26", "5L26", "4L26"], - icywind: ["7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - ingrain: ["7L31", "6L31", "5L31", "4L31"], - irontail: ["6T", "5T", "4M"], - leer: ["7L1", "6L1", "5L1", "4L1"], - lightscreen: ["7M", "6M", "5M", "4M"], - mist: ["7L21", "6L21", "5L21", "4L21"], - mudslap: ["4T"], - naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - powdersnow: ["7L1", "6L1", "5L1", "4L1"], - protect: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - razorleaf: ["7L5", "7L1", "6L1", "5L1", "4L1"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + copycat: ["7E", "6E"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + fakeout: ["7L21", "6L21", "5L21"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7E", "6E", "5E"], + foulplay: ["7T", "7E", "6T", "6E", "5T", "5E"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L3", "6L3", "5L3"], + gunkshot: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L24", "6M", "6L24", "5M", "5L24"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + nastyplot: ["7L42", "6L42", "5L42"], + nightslash: ["7L37", "6L37", "5L37"], + payback: ["7M", "6M", "5M"], + payday: ["7E", "6E", "5E"], + playrough: ["7L49", "6L49"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + pursuit: ["7L15", "6L15", "5L15"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], - shadowball: ["7M", "6M", "5M", "4M"], - sheercold: ["7L58", "6L58", "5L58", "4L58"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - woodhammer: ["7L36", "6L36", "5L36", "4L36"], - worryseed: ["6T", "5T", "4T"], + sandattack: ["7L10", "6L10", "5L10"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L30", "6L30", "5L30"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7L39", "6T", "6L39", "5T", "5L39"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L46", "6L46", "5L46"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + yawn: ["7E", "6E", "5E"], }}, - rotom: {learnset: { - astonish: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], - charge: ["7L57", "7L1", "6L1", "5L57", "4L43"], - chargebeam: ["7M", "6M", "5M", "4M"], + liepard: {learnset: { + aerialace: ["7M", "6M", "5M"], + assist: ["7L6", "7L1", "6L1", "5L1"], + assurance: ["7L31", "6L31", "5L31"], + attract: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L1", "5L1", "4L1"], - darkpulse: ["7M", "6M", "5T", "4M"], - discharge: ["7L64", "7L1", "6L1", "5L64", "4L50"], - doubleteam: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15"], - dreameater: ["7M", "6M", "5M", "4M"], - electroball: ["7L43", "6L43", "5L43"], - electroweb: ["6T", "5T"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - foulplay: ["6T"], - frustration: ["7M", "6M", "5M", "4M"], - hex: ["7L50", "6L50", "5L50"], - hiddenpower: ["7M", "6M", "5M", "4M"], - lightscreen: ["7M", "6M", "5M", "4M"], - mudslap: ["4T"], - naturalgift: ["4M"], - ominouswind: ["7L29", "6L29", "5L29", "4T", "4L29"], - painsplit: ["6T", "5T", "4T"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + encore: ["5S0"], + facade: ["7M", "6M", "5M"], + fakeout: ["7L22", "6L22", "5L22", "5S0"], + foulplay: ["7T", "6T", "5T", "5S0"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L3", "7L1", "6L1", "5L1"], + gunkshot: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L26", "6M", "6L26", "5M", "5L26"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + nastyplot: ["7L50", "6L50", "5L50"], + nightslash: ["7L43", "6L43", "5L43"], + payback: ["7M", "6M", "5M"], + playrough: ["7L58", "6L58"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + pursuit: ["7L15", "6L15", "5L15"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["7L22", "6T", "6L22", "6S1", "5L22", "5D", "4M", "4L22"], - signalbeam: ["6T", "5T", "5D", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - substitute: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thundershock: ["7L1", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], - thunderwave: ["7M", "7L1", "6M", "6L1", "6S1", "5M", "5L1", "5D", "4M", "4L1"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["7L1", "6T", "6L1", "6S1", "5T", "5L1", "5S0", "4T", "4L1"], - uproar: ["7L8", "6T", "6L8", "5T", "5L8", "5S0", "4T", "4L8"], - voltswitch: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M", "4M"], - }}, - rotomheat: {learnset: { - overheat: ["7L1", "6L1", "5T", "4T"], - }}, - rotomwash: {learnset: { - hydropump: ["7L1", "6L1", "5T", "4T"], - }}, - rotomfrost: {learnset: { - blizzard: ["7L1", "6L1", "5T", "4T"], - }}, - rotomfan: {learnset: { - airslash: ["7L1", "6L1", "5T", "4T"], + sandattack: ["7L10", "7L1", "6L1", "5L1"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L34", "6L34", "5L34"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7L47", "6T", "6L47", "5T", "5L47"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L55", "6L55", "5L55"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M", "5S0"], + taunt: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], }}, - rotommow: {learnset: { - leafstorm: ["7L1", "6L1", "5T", "4T"], + pansage: {learnset: { + acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bite: ["7L19", "6L19", "5L19", "5S0"], + bulletseed: ["7E", "6E", "5E", "5S0"], + confide: ["7M", "6M"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + crunch: ["7L43", "6L43", "5L43"], + cut: ["6M", "5M"], + dig: ["6M", "5M", "5S2", "5S0"], + disarmingvoice: ["7E", "6E"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gastroacid: ["7T", "6T"], + gigadrain: ["7T", "6T", "5T"], + grassknot: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + grasspledge: ["7T"], + grasswhistle: ["7E", "6E", "5E"], + gunkshot: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leafstorm: ["7E", "6E", "5E", "5S1"], + leechseed: ["7L16", "6L16", "5L16"], + leer: ["7L4", "6L4", "5L4", "5S1"], + lick: ["7L7", "6L7", "5L7", "5S1"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + magicalleaf: ["7E", "6E", "5E"], + nastyplot: ["7E", "6E", "5E"], + naturalgift: ["7L40", "6L40", "5L40"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M"], + recycle: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M", "5S2"], + roleplay: ["7T", "7E", "6T", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["7T", "7L22", "6T", "6L22", "5T", "5L22", "5S2"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M", "5S2", "5S0"], + spikyshield: ["7E"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + torment: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + vinewhip: ["7L10", "6L10", "5L10", "5S1"], + workup: ["7M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - uxie: {learnset: { + simisage: {learnset: { acrobatics: ["7M", "6M", "5M"], - amnesia: ["7L46", "6L46", "6S3", "5L46", "5S2", "4L46", "4S0", "4S1"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - endure: ["7L16", "6L16", "5L16", "4M", "4L16"], - energyball: ["7M", "6M", "5M", "4M"], - extrasensory: ["7L50", "6L50", "6S3", "5L51", "5S2", "4L51"], - facade: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], - flail: ["7L61", "7L1", "6L1", "5L61", "5S2", "4L61"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S0", "4S1"], - gigadrain: ["6T", "5T", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - imprison: ["7L6", "6L6", "5L6", "4L6"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - memento: ["7L76", "7L1", "6L1", "5L76", "4L76"], - mudslap: ["4T"], - naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - return: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L1", "6L1", "5L1"], + gastroacid: ["7T", "6T"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T"], + gunkshot: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["7L21", "6L21", "5L21", "4T", "4L21", "4S1"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - wonderroom: ["6T", "5T"], - yawn: ["7L31", "6L31", "6S3", "5L31", "4L31", "4S0", "4S1"], - zenheadbutt: ["6T", "5T", "4T"], + secretpower: ["6M"], + seedbomb: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + workup: ["7M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - mesprit: {learnset: { - acrobatics: ["7M", "6M", "5M"], - blizzard: ["7M", "6M", "5M", "4M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], - charm: ["7L46", "6L46", "6S3", "5L46", "5S2", "4L46", "4S0", "4S1"], + pansear: {learnset: { + acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + amnesia: ["7L25", "6L25", "5L25"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + belch: ["7E"], + bite: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], - copycat: ["7L61", "7L1", "6L1", "5L61", "5S2", "4L61"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - extrasensory: ["7L50", "6L50", "6S3", "5L51", "5S2", "4L51"], - facade: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S0", "4S1"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healingwish: ["7L76", "7L1", "6L1", "5L76", "4L76"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - imprison: ["7L6", "6L6", "5L6", "4L6"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M"], - luckychant: ["7L31", "6L31", "6S3", "5L31", "4L31", "4S0", "4S1"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - mudslap: ["4T"], - naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], - poweruppunch: ["6M"], - protect: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - return: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + crunch: ["7L43", "6L43", "5L43"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + disarmingvoice: ["7E", "6E"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + firepledge: ["7T"], + firepunch: ["7T", "7E", "6T", "6E", "5T", "5E"], + firespin: ["7E", "6E", "5E"], + flameburst: ["7L22", "6L22", "5L22"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flareblitz: ["7E"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gastroacid: ["7T", "6T"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["7T", "6T", "5T"], + heatwave: ["7T", "7E", "6T", "6E", "5T", "5E", "5S0"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["7L10", "6M", "6L10", "5M", "5L10", "5S0"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L4", "6L4", "5L4", "5S0"], + lick: ["7L7", "6L7", "5L7", "5S0"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + nastyplot: ["7E", "6E", "5E"], + naturalgift: ["7L40", "6L40", "5L40"], + overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M"], + recycle: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "7E", "6T", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["7L21", "6L21", "5L21", "4T", "4L21", "4S1"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + yawn: ["7L16", "6L16", "5L16"], }}, - azelf: {learnset: { + simisear: {learnset: { acrobatics: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], - dazzlinggleam: ["7M", "6M"], - detect: ["7L16", "6L16", "5L16", "4L16"], - doubleteam: ["7M", "6M", "5M", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - explosion: ["7M", "7L76", "6M", "6L76", "5M", "5L76", "4M", "4L76"], - extrasensory: ["7L50", "6L50", "6S3", "5L51", "5S2", "4L51"], - facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - firepunch: ["6T", "5T", "4T"], - flamethrower: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S0", "4S1"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["6T", "5T", "4T"], - imprison: ["7L6", "6L6", "5L6", "4L6"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T"], + firepunch: ["7T", "6T", "5T"], + flameburst: ["7L1", "6L1", "5L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L1", "6L1", "5L1"], + gastroacid: ["7T", "6T"], + gigaimpact: ["7M", "6M", "6S0", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["7T", "6T", "5T"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "6S0", "5M"], + hyperbeam: ["7M", "6M", "5M"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T", "4M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["7L61", "7L1", "6T", "6L1", "5T", "5L61", "4T", "4L61"], - lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - mudslap: ["4T"], - nastyplot: ["7L46", "6L46", "6S3", "5L46", "5S2", "4L46", "4S0", "4S1"], - naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], - payback: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - return: ["7M", "6M", "5M", "4M"], - roleplay: ["6T", "5T", "4T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M", "6S0"], + protect: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["7L21", "6L21", "5L21", "4T", "4L21", "4S1"], - taunt: ["7M", "6M", "5M", "4M"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["6T", "5T", "4T"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - uproar: ["7L31", "6T", "6L31", "6S3", "5T", "5L31", "5S2", "4T", "4L31", "4S0", "4S1"], - uturn: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T", "5T", "4T"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "6S0", "5M"], }}, - dialga: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S0"], - aurasphere: ["7L37", "6L37", "6S5", "5L37", "5S4", "4L37"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulkup: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], + panpour: {learnset: { + acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + aquaring: ["7E", "6E", "5E"], + aquatail: ["7T", "7E", "6T", "6E", "5T", "5E"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bite: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "6M", "5M"], + brine: ["7L34", "6L34", "5L34"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "5T", "5S4", "4T"], - dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], - dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "4S0"], - dragonpulse: ["6T", "5T", "5S4", "4M"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "4S1"], - earthquake: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - flashcannon: ["7M", "7L50", "6M", "6L50", "6S5", "6S6", "5M", "5L50", "4M", "4L42"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - healblock: ["4L50", "4S1"], - hiddenpower: ["7M", "6M", "5M", "4M"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + crunch: ["7L43", "6L43", "5L43"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + disarmingvoice: ["7E", "6E"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gastroacid: ["7T", "6T"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["7T", "6T", "5T"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icebeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["7L42", "6T", "6L42", "6S5", "5T", "5L42", "4M"], - magnetrise: ["6T", "5T", "4T"], - metalburst: ["7L24", "6L24", "6S6", "5L24", "4L24"], - metalclaw: ["7L6", "6L6", "5L6", "4L6", "4S0"], - mudslap: ["4T"], - naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - overheat: ["7M", "6M", "6S6", "5M", "4M"], - powergem: ["7L19", "6L19", "5L19", "4L19"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - roaroftime: ["7L46", "6L46", "6S5", "6S6", "5L46", "5S4", "4L40", "4S0", "4S1"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + hydropump: ["7E", "6E", "5E", "5S0"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L4", "6L4", "5L4", "5S0"], + lick: ["7L7", "6L7", "5L7", "5S0"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + mudsport: ["7E", "6E", "5E"], + nastyplot: ["7E", "6E", "5E"], + naturalgift: ["7L40", "6L40", "5L40"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "7E", "6T", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], - secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - slash: ["7L15", "6L15", "5L15", "4L15", "4S1"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trickroom: ["7M", "6M", "5M", "4M"], - twister: ["4T"], + scald: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + thief: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L10", "6L10", "5L10", "5S0"], + waterpledge: ["7T"], + waterpulse: ["7T", "6T"], + watersport: ["7L16", "6L16", "5L16"], + workup: ["7M", "5M"], }}, - palkia: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S0"], - aquatail: ["7L42", "7L24", "6T", "6L24", "5T", "5L24", "4T", "4L24"], - aurasphere: ["7L37", "6L37", "6S5", "6S6", "5L37", "5S4", "4L37"], - avalanche: ["4M"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["4M"], - bulkup: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], + simipour: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - dive: ["6M", "5M", "4T"], - doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "5T", "5S4", "4T"], - dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], - dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "4S0"], - dragonpulse: ["6T", "5T", "4M"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["7L33", "6T", "6L33", "6S5", "6S6", "5T", "5L33", "4T", "4L33", "4S1"], - earthquake: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - healblock: ["4L50", "4S1"], - hiddenpower: ["7M", "6M", "5M", "4M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L1", "6L1", "5L1"], + gastroacid: ["7T", "6T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["7T", "6T", "5T"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], - hydropump: ["7L50", "6L50", "6S5", "6S6", "5L50", "5S4", "4L42"], - hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icebeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - mudslap: ["4T"], - naturalgift: ["4M"], - outrage: ["6T", "5T", "4T"], - powergem: ["7L19", "6L19", "5L19", "4L19"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], - scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], - secretpower: ["6M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - slash: ["7L15", "6L15", "5L15", "4L15", "4S1"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spacialrend: ["7L46", "6L46", "6S5", "6S6", "5L46", "5S4", "4L40", "4S0", "4S1"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trickroom: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - waterpulse: ["7L6", "6T", "6L6", "5L6", "4M", "4L6", "4S0"], - whirlpool: ["4M"], + scald: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + waterfall: ["7M", "6M", "5M"], + waterpledge: ["7T"], + waterpulse: ["7T", "6T"], + workup: ["7M", "5M"], + }}, + munna: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], + attract: ["7M", "6M", "5M"], + barrier: ["7E", "6E", "5E"], + batonpass: ["7E", "6E", "5E"], + calmmind: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healbell: ["7T", "6T", "5T"], + healingwish: ["7E", "6E"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E"], + hiddenpower: ["7M", "6M", "5M"], + hypnosis: ["7L19", "6L19", "5L19"], + imprison: ["7L13", "6L13", "5L13"], + lightscreen: ["7M", "6M", "5M"], + luckychant: ["7L5", "6L5", "5L5"], + magiccoat: ["7T", "7E", "6T", "6E", "5T", "5E"], + moonlight: ["7L17", "6L17", "5L17"], + nightmare: ["7L29", "6L29", "5L29"], + painsplit: ["7T", "6T", "5T"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L11", "6L11", "5L11"], + psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["7E", "6M", "6E", "5E"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], + sonicboom: ["7E", "6E", "5E"], + storedpower: ["7L47", "6L47", "5L47"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7E", "6E", "5E"], + synchronoise: ["7L25", "6L25", "5L25"], + telekinesis: ["7T", "7L43", "6L43", "5M", "5L43"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7T", "6T", "5T"], + worryseed: ["7T", "6T", "5T"], + yawn: ["7L7", "6L7", "5L7"], + zenheadbutt: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], }}, - heatran: {learnset: { - ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1", "4S2"], - attract: ["7M", "6M", "5M", "4M"], - bugbite: ["6T", "5T", "4T"], - bulldoze: ["7M", "6M", "5M"], - captivate: ["4M"], + musharna: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - crunch: ["7L33", "6L33", "6S4", "5L33", "4L33", "4S1"], - darkpulse: ["7M", "6M", "5T", "4M"], - dig: ["6M", "5M", "4M"], - doubleteam: ["7M", "6M", "5M", "4M"], - dragonpulse: ["6T", "5T", "4M"], - earthpower: ["7L73", "7L1", "6T", "6L1", "5T", "5L73", "4T", "4L73", "4S2"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - eruption: ["4S2"], - explosion: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - firefang: ["7L17", "6L17", "5L17", "4L17"], - firespin: ["7L57", "7L1", "6L1", "5L57", "5S3", "4L57", "4S0"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heatwave: ["7L81", "7L1", "6T", "6L1", "5T", "5L81", "4T", "4L81"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["7L65", "7L1", "6T", "6L1", "5T", "5L65", "5S3", "4T", "4L65", "4S0"], - lavaplume: ["7L49", "6L49", "6S4", "5L49", "5S3", "4L49", "4S0", "4S1"], - leer: ["7L9", "6L9", "5L9", "4L9"], - magmastorm: ["7L96", "7L1", "6L1", "5L96", "4L96", "4S2"], - metalsound: ["7L25", "6L25", "6S4", "5L25", "4L25", "4S1"], - mudslap: ["4T"], - naturalgift: ["4M"], - naturepower: ["7M", "6M"], - overheat: ["7M", "6M", "5M", "4M"], - payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1", "5S0"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healbell: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypnosis: ["7L1", "6L1", "5L1", "5S0"], + lightscreen: ["7M", "6M", "5M"], + luckychant: ["7L1", "6L1", "5L1", "5S0"], + magiccoat: ["7T", "6T", "5T"], + painsplit: ["7T", "6T", "5T"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L1", "6L1", "5L1", "5S0"], + psychic: ["7M", "6M", "5M"], + psychicterrain: ["7L1"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L41", "6L41", "6S4", "5L41", "5S3", "4L41", "4S0", "4S1"], - secretpower: ["6M", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "7L88", "6M", "6L88", "5M", "5L88", "4M", "4L88"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - willowisp: ["7M", "6M", "5M", "4M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7T", "6T", "5T"], + worryseed: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T"], }}, - regigigas: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - ancientpower: ["4T"], - avalanche: ["4M"], - block: ["6T", "5T", "4T"], - brickbreak: ["7M", "6M", "5M", "4M"], - bulldoze: ["7M", "6M", "5M"], + pidove: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L15", "6L15", "5L15", "5S0"], + airslash: ["7L29", "6L29", "5L29"], + attract: ["7M", "6M", "5M"], + bestow: ["7E", "6E", "5E"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L1", "5L1", "4L1", "4S0", "4S1"], - crushgrip: ["7L75", "7L1", "6L1", "5L75", "4L75", "4S2"], - dizzypunch: ["7L1", "6L1", "5L1", "4L1", "4S1"], - doubleteam: ["7M", "6M", "5M", "4M"], - drainpunch: ["6T", "5T", "4M"], - earthpower: ["6T", "5T", "4T"], - earthquake: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foresight: ["7L1", "6L1", "6S4", "5L1", "4L1", "4S1"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "7L100", "6M", "6L100", "5M", "5L100", "4M", "4L100"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - heavyslam: ["7L90", "7L1", "6L1", "5L90"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - icywind: ["6T", "5T", "4T", "4S2"], - ironhead: ["6T", "5T", "4T", "4S2"], - knockoff: ["7L1", "6T", "6L1", "5T", "5L1", "4L1", "4S1"], - megapunch: ["4L1"], - mudslap: ["4T"], - naturalgift: ["4M"], - naturepower: ["7M", "6M"], - payback: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "5S3"], - poweruppunch: ["6M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - revenge: ["7L25", "6L25", "6S4", "5L25", "5S3", "4L25"], - rockclimb: ["4M"], - rockpolish: ["7M", "6M", "5M", "4M"], - rockslide: ["7M", "6M", "5M", "4M", "4S2"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + defog: ["7T"], + detect: ["7L22", "6L22", "5L22"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + featherdance: ["7L36", "6L36", "5L36"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + growl: ["7L4", "6L4", "5L4"], + gust: ["7L1", "6L1", "5D", "5L1", "5S0"], + heatwave: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hypnosis: ["7E", "6E", "5D", "5E"], + leer: ["7L8", "6L8", "5L8"], + luckychant: ["7E", "6E", "5E"], + morningsun: ["7E", "6E", "5D", "5E"], + nightslash: ["7E", "6E"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L11", "6L11", "5L11", "5S0"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7L32", "6L32", "5L32"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - shockwave: ["6T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - stomp: ["4L1", "4S0"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - superpower: ["6T", "5T", "4T", "4L25", "4S0"], - swagger: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - wideguard: ["7L40", "6L40", "6S4", "5L40", "5S3"], - zenheadbutt: ["7L50", "6T", "6L50", "6S4", "5T", "5L50", "5S3", "4T", "4L50", "4S0"], + secretpower: ["6M"], + skyattack: ["7T", "7L50", "6T", "6L50", "5T", "5L50"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + tailwind: ["7T", "7L46", "6T", "6L46", "5T", "5L46"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E"], + uturn: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E"], + workup: ["7M", "5M"], }}, - giratina: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - aircutter: ["4T"], - ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S1"], - aquatail: ["6T", "5T", "4T"], - aurasphere: ["7L37", "6L37", "6S5", "6S6", "5L37", "5S4", "4L37"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + tranquill: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L15", "6L15", "5L15"], + airslash: ["7L32", "6L32", "5L32"], + attract: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], - destinybond: ["7L24", "6L24", "5L24", "4L24"], - doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "6S6", "5T", "4T"], - dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], - dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S4", "4M", "4L28", "4S1"], - dragonpulse: ["6T", "5T", "5S4", "4M"], - dragontail: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M", "4M"], - earthpower: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "4S0"], - earthquake: ["7M", "6M", "5M", "4M"], + defog: ["7T"], + detect: ["7L23", "6L23", "5L23"], + doubleteam: ["7M", "6M", "5M"], echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - gigaimpact: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - headbutt: ["4T"], - healblock: ["4L50", "4S0"], - hex: ["7L50", "6L50", "6S5", "5L50"], - hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - hypervoice: ["6T", "5T"], - icywind: ["6T", "5T", "4T"], - ironhead: ["6T", "6S6", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - magiccoat: ["6T", "5T", "4T"], - mudslap: ["4T"], - naturalgift: ["4M"], - ominouswind: ["7L6", "6L6", "5L6", "4T", "4L6", "4S1"], - outrage: ["6T", "5T", "4T"], - painsplit: ["6T", "5T", "4T"], - payback: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - rockclimb: ["4M"], - rocksmash: ["6M", "5M", "4M"], + facade: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + featherdance: ["7L41", "6L41", "5L41"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + growl: ["7L4", "7L1", "6L1", "5L1"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + leer: ["7L8", "7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L11", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7L36", "6L36", "5L36"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - shadowclaw: ["7M", "7L42", "6M", "6L42", "6S5", "5M", "5L42", "4M", "4L42"], - shadowforce: ["7L46", "6L46", "6S5", "6S6", "5L46", "5S4", "4L40", "4S0", "4S1"], - shadowsneak: ["7L19", "6L19", "5L19", "4L19"], - shockwave: ["6T", "4M"], - silverwind: ["4M"], - slash: ["7L15", "6L15", "5L15", "4L15", "4S0"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spite: ["6T", "5T", "4T"], - steelwing: ["7M", "6M", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - willowisp: ["7M", "6M", "5M", "4M"], + secretpower: ["6M"], + skyattack: ["7T", "7L59", "6T", "6L59", "5T", "5L59"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + tailwind: ["7T", "7L54", "6T", "6L54", "5T", "5L54"], + taunt: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "5M"], }}, - cresselia: {learnset: { - attract: ["7M", "6M", "5M", "4M"], - aurorabeam: ["7L29", "6L29", "6S3", "5L29", "4L29", "4S0"], - calmmind: ["7M", "6M", "5M", "4M"], - captivate: ["4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + unfezant: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L15", "6L15", "5L15"], + airslash: ["7L33", "6L33", "5L33"], + attract: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1", "4L1"], - doubleteam: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], - dreameater: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "5S2", "4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - futuresight: ["7L38", "6L38", "6S3", "5L38", "5S1", "4L38", "4S0"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "5S2", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "5S2", "4M"], - icywind: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M"], - lunardance: ["7L84", "7L1", "6L1", "5L84", "4L84"], - magiccoat: ["6T", "5T", "4T"], - magicroom: ["6T", "5T"], - mist: ["7L20", "6L20", "6S3", "5L20", "4L20", "4S0"], - moonblast: ["7L99", "6L99"], - moonlight: ["7L57", "7L1", "6L1", "5L57", "5S1", "4L57"], - mudslap: ["4T"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93"], - psychocut: ["7L66", "7L1", "6L1", "5L66", "4L66"], - psychoshift: ["7L75", "7L1", "6L1", "5L75", "4L75"], - psychup: ["7M", "6M", "5M", "4M"], - psyshock: ["7M", "6M", "5M", "5S2"], - raindance: ["7M", "6M", "5M", "4M"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + defog: ["7T"], + detect: ["7L23", "6L23", "5L23"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + featherdance: ["7L44", "6L44", "5L44"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + growl: ["7L4", "7L1", "6L1", "5L1"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + leer: ["7L8", "7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L11", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7L38", "6L38", "5L38"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - slash: ["7L47", "6L47", "6S3", "5L47", "5S1", "4L47", "4S0"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - telekinesis: ["5M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "5S1", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + secretpower: ["6M"], + skyattack: ["7T", "7L66", "6T", "6L66", "5T", "5L66"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + tailwind: ["7T", "7L60", "6T", "6L60", "5T", "5L60"], + taunt: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "5M"], }}, - phione: {learnset: { - acidarmor: ["7L31", "6L31", "5L31", "4L31"], - ancientpower: ["4T"], - aquaring: ["7L54", "6L54", "5L54", "4L54"], - blizzard: ["7M", "6M", "5M", "4M"], - bounce: ["6T", "5T", "4T"], - brine: ["4M"], - bubble: ["7L1", "6L1", "5L1", "4L1"], - bubblebeam: ["7L24", "6L24", "5L24", "4L24"], - charm: ["7L9", "6L9", "5L9", "4L9"], + blitzle: {learnset: { + agility: ["7L36", "6L36", "5L36"], + attract: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + charge: ["7L8", "6L8", "5L8"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], - dive: ["7L61", "6M", "6L61", "5M", "5L61", "4T", "4L61"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M", "4S0"], - hail: ["7M", "6M", "5M", "4M"], - healbell: ["6T", "5T", "4T"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - mudslap: ["4T"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "7L69", "6M", "6L69", "5M", "5L69", "4M", "4L69", "4S0"], - rest: ["7M", "6M", "5M", "4M", "4S0"], - return: ["7M", "6M", "5M", "4M"], + discharge: ["7L32", "6L32", "5L32"], + doubleedge: ["7E", "6E", "5E"], + doublekick: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + feint: ["7E"], + flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7T"], + magnetrise: ["7T", "6T", "5T"], + mefirst: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + pursuit: ["7L22", "6L22", "5L22"], + quickattack: ["7L1", "6L1", "5L1"], + rage: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - signalbeam: ["6T", "5T", "4T"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - substitute: ["7M", "6M", "5M", "4M"], - supersonic: ["7L16", "6L16", "5L16", "4L16"], - surf: ["7M", "6M", "5M", "4M", "4S0"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpulse: ["7L46", "6T", "6L46", "5L46", "4M", "4L46"], - watersport: ["7L1", "6L1", "5L1", "4L1"], - whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39"], + sandattack: ["7E", "6E", "5E"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + shockwave: ["7T", "7L11", "7E", "6T", "6L11", "6E", "5L11", "5E"], + signalbeam: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7T", "7E", "6T", "6E"], + snore: ["7T", "6T", "5T"], + spark: ["7L25", "6L25", "5L25"], + stomp: ["7L29", "6L29", "5L29"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwhip: ["7L4", "6L4", "5L4"], + takedown: ["7E", "6E", "5E"], + thrash: ["7L43", "6L43", "5L43"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], }}, - manaphy: {learnset: { - acidarmor: ["7L31", "6L31", "5L31", "4L31", "4S2"], - ancientpower: ["4T"], - aquaring: ["7L54", "6L54", "5L54", "4L54", "4S3"], - blizzard: ["7M", "6M", "5M", "4M"], - bounce: ["6T", "5T", "4T"], - brine: ["4M"], - bubble: ["7L1", "6L1", "6S4", "6S5", "5L1", "4L1", "4S0", "4S1"], - bubblebeam: ["7L24", "6L24", "5L24", "4L24"], - calmmind: ["7M", "6M", "5M", "4M"], - charm: ["7L9", "6L9", "5L9", "4L9"], + zebstrika: {learnset: { + agility: ["7L42", "6L42", "5L42"], + allyswitch: ["7T"], + attract: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + charge: ["7L8", "7L1", "6L1", "5L1"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], - dive: ["7L61", "6M", "6L61", "5M", "5L61", "4T", "4L61"], - doubleteam: ["7M", "6M", "5M", "4M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - hail: ["7M", "6M", "5M", "4M"], - healbell: ["6T", "5T", "4T"], - heartswap: ["7L76", "6L76", "6S4", "5L76", "4L76", "4S2", "4S3"], - helpinghand: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M"], - mudslap: ["4T"], - naturalgift: ["4M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - raindance: ["7M", "7L69", "6M", "6L69", "5M", "5L69", "4M", "4L69"], - reflect: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + discharge: ["7L36", "6L36", "5L36"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + iondeluge: ["7L58", "7L1", "6L1"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7T"], + magnetrise: ["7T", "6T", "5T"], + overheat: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7L22", "6L22", "5L22"], + quickattack: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M"], - signalbeam: ["6T", "5T", "4T"], - skillswap: ["6T", "5T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - substitute: ["7M", "6M", "5M", "4M"], - supersonic: ["7L16", "6L16", "5L16", "4L16"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - tailglow: ["7L1", "6L1", "6S4", "6S5", "5L1", "4L1", "4S0", "4S1"], - toxic: ["7M", "6M", "5M", "4M"], - uproar: ["6T", "5T", "4T"], - uturn: ["7M", "6M", "5M", "4M"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpulse: ["7L46", "6T", "6L46", "5L46", "4M", "4L46", "4S2", "4S3"], - watersport: ["7L1", "6L1", "6S4", "6S5", "5L1", "4L1", "4S0", "4S1", "4S3"], - whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39", "4S2"], + secretpower: ["6M"], + shockwave: ["7T", "7L11", "6T", "6L11", "5L11"], + signalbeam: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7T", "6T"], + snore: ["7T", "6T", "5T"], + spark: ["7L25", "6L25", "5L25"], + stomp: ["7L31", "6L31", "5L31"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwhip: ["7L4", "7L1", "6L1", "5L1"], + thrash: ["7L53", "6L53", "5L53"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L15", "7L1", "6M", "6L1", "5M", "5L1"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], }}, - darkrai: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], + roggenrola: {learnset: { + attract: ["7M", "6M", "5M"], + autotomize: ["7E", "6E", "5E"], + block: ["7T", "6T", "5T"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "7L93", "6M", "6L93", "6S5", "5T", "5L93", "4M", "4L93", "4S2"], - darkvoid: ["7L66", "6L66", "6S5", "6S6", "5L66", "5S4", "4L66", "4S2"], - disable: ["7L1", "6L1", "5L1", "4L1"], - doubleteam: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47", "4S2", "4S3"], - drainpunch: ["6T", "5T", "4M"], - dreameater: ["7M", "7L84", "6M", "6L84", "6S5", "5M", "5L84", "4M", "4L84"], - embargo: ["7M", "6M", "5M", "4M", "4L75"], - endure: ["4M"], - facade: ["7M", "6M", "5M", "4M"], - feintattack: ["7L29", "6L29", "6S6", "5L29", "5S4", "4L29", "4S3"], - flash: ["6M", "5M", "4M"], - fling: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - focuspunch: ["6T", "4M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - haze: ["7L57", "6L57", "5L57", "4L57"], - headbutt: ["4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - hypnosis: ["7L20", "6L20", "5L20", "4L20", "4S0", "4S1", "4S3"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - incinerate: ["6M", "5M"], - knockoff: ["6T", "5T", "4T"], - lastresort: ["6T", "5T", "4T"], - mudslap: ["4T"], - nastyplot: ["7L75", "6L75", "5L75", "4L75"], - naturalgift: ["4M"], - nightmare: ["7L38", "6L38", "6S6", "5L38", "5S4", "4L38", "4S0", "4S1", "4S3"], - nightshade: ["4L1"], - ominouswind: ["7L1", "6L1", "6S6", "5L1", "5S4", "4T", "4L1"], - payback: ["7M", "6M", "5M", "4M"], - phantomforce: ["6S5"], - poisonjab: ["7M", "6M", "5M", "4M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - pursuit: ["4L29", "4S0"], - quickattack: ["7L11", "6L11", "5L11", "4L11", "4S0"], - raindance: ["7M", "6M", "5M", "4M"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - roaroftime: ["4S1"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + curse: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], + explosion: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gravity: ["7T", "7E", "6T", "6E", "5T", "5E"], + harden: ["7L4", "6L4", "5L4"], + headbutt: ["7L10", "6L10", "5L10"], + heavyslam: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + irondefense: ["7T", "7L20", "6T", "6L20", "5T", "5L20"], + lockon: ["7E", "6E", "5E"], + magnitude: ["7E", "6E", "5E"], + mudslap: ["7L17", "6L17", "5L17"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L14", "6L14", "5L14"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "7E", "6M", "6E", "5M", "5E"], round: ["7M", "6M", "5M"], - secretpower: ["6M", "4M"], - shadowball: ["7M", "6M", "5M", "4M", "4S2"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shockwave: ["6T", "4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T", "4M"], - snore: ["6T", "5T", "4T"], - spacialrend: ["4S1"], - spite: ["6T", "5T", "4T"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - suckerpunch: ["4T"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - taunt: ["7M", "6M", "5M", "4M"], - thief: ["7M", "6M", "5M", "4M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - torment: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - willowisp: ["7M", "6M", "5M", "4M"], - wonderroom: ["6T", "5T"], - xscissor: ["7M", "6M", "5M", "4M"], + sandattack: ["7L7", "6L7", "5L7"], + sandstorm: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "7L30", "6T", "6L30", "5T", "5L30"], + stoneedge: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + wideguard: ["7E", "6E"], }}, - shaymin: {learnset: { - aircutter: ["4T"], - airslash: ["6L64", "6S3", "5L64", "4L64"], - aromatherapy: ["7L64", "6L64", "6S4", "5L64", "4L64", "4S0"], - bulletseed: ["4M"], + boldore: {learnset: { + attract: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["4L1"], - doubleteam: ["7M", "6M", "5M", "4M"], - earthpower: ["6T", "5T", "4T"], - endeavor: ["6T", "5T", "4T"], - endure: ["4M"], - energyball: ["7M", "7L73", "6M", "6L73", "6S4", "5M", "5L73", "4M", "4L73", "4S0"], - facade: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - gigadrain: ["6T", "5T", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - grasswhistle: ["4L82"], - growth: ["7L1", "6L1", "6S3", "5L1", "4L1", "4S1"], - headbutt: ["4T"], - healingwish: ["7L91", "6L91", "5L91", "4L91"], - hiddenpower: ["7M", "6M", "5M", "4M"], - hyperbeam: ["7M", "6M", "5M", "4M"], - lastresort: ["6T", "5T", "4T"], - leafstorm: ["6L91", "5L91", "4L91"], - leechseed: ["7L19", "6L19", "5L19", "5S2", "4L19", "4S1"], - luckychant: ["4L91"], - magicalleaf: ["7L10", "6L10", "6S3", "5L10", "4L10", "4S1"], - mudslap: ["4T"], - naturalgift: ["7L46", "6L46", "5L46", "4M", "4L46"], + curse: ["5D"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], + explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + harden: ["7L4", "7L1", "6L1", "5L1"], + headbutt: ["7L10", "7L1", "6L1", "5L1"], + heavyslam: ["5D"], + hiddenpower: ["7M", "6M", "5M"], + irondefense: ["7T", "7L20", "6T", "6L20", "5T", "5L20"], + mudslap: ["7L17", "6L17", "5L17"], naturepower: ["7M", "6M"], - ominouswind: ["4T"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], - quickattack: ["6L28", "5L28", "4L28"], - rest: ["7M", "6M", "5M", "4M"], - return: ["7M", "6M", "5M", "4M"], + powergem: ["7L1", "6L25", "5L25"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L14", "6L14", "5L14"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - seedbomb: ["6T", "5T", "4T"], - seedflare: ["7L100", "6L100", "6S3", "6S4", "5L100", "5S2", "4L100", "4S0"], - sleeptalk: ["7M", "6M", "5T", "4M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - substitute: ["7M", "6M", "6S4", "5M", "4M", "4S0"], - sunnyday: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - sweetkiss: ["7L82", "6L82", "5L82", "4L82"], - sweetscent: ["7L37", "6L37", "5L37", "5S2", "4L37"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - synthesis: ["7L28", "6T", "6L28", "5T", "5L28", "5S2", "4T", "4L28", "4S1"], - tailwind: ["6T", "5T", "4T"], - toxic: ["7M", "6M", "5M", "4M"], - worryseed: ["7L55", "6T", "6L55", "5T", "5L55", "4T", "4L55"], - zenheadbutt: ["6T", "5T", "4T"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L23", "6M", "6L23", "5D", "5M", "5L23"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "7L36", "6T", "6L36", "5T", "5L36"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], }}, - arceus: {learnset: { - aerialace: ["7M", "6M", "5M", "4M"], - ancientpower: ["4T"], - aquatail: ["6T", "5T", "4T"], - avalanche: ["4M"], - blastburn: ["6S2"], - blizzard: ["7M", "6M", "5M", "4M"], - brickbreak: ["7M", "6M", "5M", "4M"], - brine: ["4M"], + gigalith: {learnset: { + attract: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], bulldoze: ["7M", "6M", "5M"], - bulletseed: ["4M"], - calmmind: ["7M", "6M", "5M", "4M"], - chargebeam: ["7M", "6M", "5M", "4M"], confide: ["7M", "6M"], - cosmicpower: ["7L1", "6L1", "5L1", "4L1"], - cut: ["6M", "5M", "4M"], - darkpulse: ["7M", "6M", "5T", "4M"], - defog: ["4M"], - dive: ["6M", "4T"], - doubleteam: ["7M", "6M", "5M", "4M"], - dracometeor: ["7T", "6T", "5T", "4T"], - dragonclaw: ["7M", "6M", "5M", "4M"], - dragonpulse: ["6T", "5T", "4M"], - dreameater: ["7M", "6M", "5M", "4M"], - earthpower: ["7L20", "6T", "6L20", "6S2", "5T", "5L20", "4T", "4L20"], - earthquake: ["7M", "6M", "5M", "4M"], - echoedvoice: ["7M", "6M", "5M"], - endure: ["4M"], - energyball: ["7M", "6M", "5M", "4M"], - extremespeed: ["7L40", "6L40", "5L40", "4L40"], - facade: ["7M", "6M", "5M", "4M"], - fireblast: ["7M", "6M", "5M", "4M"], - flamethrower: ["7M", "6M", "5M", "4M"], - flash: ["6M", "5M", "4M"], - flashcannon: ["7M", "6M", "5M", "4M"], - fly: ["7M", "6M", "5M", "4M"], - focusblast: ["7M", "6M", "5M", "4M"], - frustration: ["7M", "6M", "5M", "4M"], - furycutter: ["4T"], - futuresight: ["7L60", "6L60", "5L60", "4L60"], - gigadrain: ["6T", "5T", "4M"], - gigaimpact: ["7M", "6M", "5M", "4M"], - grassknot: ["7M", "6M", "5M", "4M"], - gravity: ["7L10", "6T", "6L10", "5T", "5L10", "4T", "4L10"], - hail: ["7M", "6M", "5M", "4M"], - headbutt: ["4T"], - heatwave: ["6T", "5T", "4T"], - hiddenpower: ["7M", "6M", "5M", "4M"], - honeclaws: ["6M", "5M"], - hydrocannon: ["6S2"], - hyperbeam: ["7M", "7L80", "6M", "6L80", "6S3", "5M", "5L80", "5S1", "4M", "4L80"], - hypervoice: ["7L30", "6T", "6L30", "5T", "5L30", "4L30"], - icebeam: ["7M", "6M", "5M", "4M"], - icywind: ["6T", "5T", "4T"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T", "4T"], - ironhead: ["6T", "5T", "4T"], - irontail: ["6T", "5T", "4M"], - judgment: ["7L100", "6L100", "6S2", "6S3", "5L100", "5S1", "4L100", "4S0"], - lastresort: ["6T", "5T", "4T"], - lightscreen: ["7M", "6M", "5M", "4M"], - magiccoat: ["6T", "5T", "4T"], - mudslap: ["4T"], - naturalgift: ["7L1", "6L1", "5L1", "4M", "4L1"], - ominouswind: ["4T"], - outrage: ["6T", "5T", "4T"], - overheat: ["7M", "6M", "5M", "4M"], - payback: ["7M", "6M", "5M", "4M"], - perishsong: ["7L90", "6L90", "6S3", "5L90", "5S1", "4L90"], - poisonjab: ["7M", "6M", "5M", "4M"], - protect: ["7M", "6M", "5M", "4M"], - psychic: ["7M", "6M", "5M", "4M"], - psychup: ["7M", "6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], + explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + harden: ["7L4", "7L1", "6L1", "5L1"], + headbutt: ["7L10", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7T", "7L20", "6T", "6L20", "5T", "5L20"], + ironhead: ["7T", "6T", "5T"], + laserfocus: ["7T"], + mudslap: ["7L17", "6L17", "5L17"], + naturepower: ["7M", "6M"], + powergem: ["7L1", "6L25", "5L25"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L14", "6L14", "5L14"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["7T", "7L36", "6T", "6L36", "5T", "5L36"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + throatchop: ["7T"], + toxic: ["7M", "6M", "5M"], + }}, + woobat: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + afteryou: ["7T", "6T", "5T"], + aircutter: ["7L21", "6L21", "5L21"], + airslash: ["7L32", "6L32", "5L32"], + allyswitch: ["7T"], + amnesia: ["7L29", "6L29", "5L29"], + assurance: ["7L12", "6L12", "5L12"], + attract: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + calmmind: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + captivate: ["7E", "6E"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1"], + defog: ["7T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7T", "7L47", "6T", "6L47", "5T", "5L47"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M"], + flatter: ["7E", "6E", "5E"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L36", "6L36", "5L36"], + gigadrain: ["7T", "6T", "5T"], + gust: ["7L8", "6L8", "5L8"], + gyroball: ["7M", "6M", "5M"], + heartstamp: ["7L15", "6L15", "5L15"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "7E", "6T", "6E", "5T", "5E"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["7L19", "6L19", "5L19"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + odorsleuth: ["7L4", "6L4", "5L4"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + psychoshift: ["7E", "6E"], + psychup: ["7M", "6M", "5M"], psyshock: ["7M", "6M", "5M"], - punishment: ["7L1", "6L1", "5L1", "4L1"], - quash: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M", "4M"], - recover: ["7L70", "6L70", "6S3", "5L70", "5S1", "4L70"], - recycle: ["6T", "5T", "4M"], - reflect: ["7M", "6M", "5M", "4M"], - refresh: ["7L50", "6L50", "5L50", "4L50"], - rest: ["7M", "6M", "5M", "4M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M", "4M"], - roar: ["7M", "6M", "5M", "4M"], - roaroftime: ["4S0"], - rockclimb: ["4M"], - rockslide: ["7M", "6M", "5M", "4M"], - rocksmash: ["6M", "5M", "4M"], - rocktomb: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M", "4M"], - sandstorm: ["7M", "6M", "5M", "4M"], - secretpower: ["6M", "4M"], - seismictoss: ["7L1", "6L1", "5L1", "4L1"], - shadowball: ["7M", "6M", "5M", "4M"], - shadowclaw: ["7M", "6M", "5M", "4M"], - shadowforce: ["4S0"], - shockwave: ["6T", "4M"], - signalbeam: ["6T", "5T", "4T"], - silverwind: ["4M"], - sleeptalk: ["7M", "6M", "5T", "4M"], - sludgebomb: ["7M", "6M", "5M", "4M"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T", "4T"], - solarbeam: ["7M", "6M", "5M", "4M"], - spacialrend: ["4S0"], - stealthrock: ["6T", "5T", "4M"], - stoneedge: ["7M", "6M", "5M", "4M"], - strength: ["6M", "5M", "4M"], - substitute: ["7M", "6M", "5M", "4M"], - sunnyday: ["7M", "6M", "5M", "4M"], - surf: ["7M", "6M", "5M", "4M"], - swagger: ["7M", "6M", "5M", "4M"], - swift: ["4T"], - swordsdance: ["7M", "6M", "5M", "4M"], - tailwind: ["6T", "5T", "4T"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M", "4M"], - thunderbolt: ["7M", "6M", "5M", "4M"], - thunderwave: ["7M", "6M", "5M", "4M"], - toxic: ["7M", "6M", "5M", "4M"], - trick: ["6T", "5T", "4T"], - trickroom: ["7M", "6M", "5M", "4M"], - twister: ["4T"], - waterfall: ["7M", "6M", "5M", "4M"], - waterpulse: ["6T", "4M"], - whirlpool: ["4M"], - willowisp: ["7M", "6M", "5M", "4M"], - workup: ["7M", "5M"], - xscissor: ["7M", "6M", "5M", "4M"], - zenheadbutt: ["6T", "5T", "4T"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + superfang: ["7T", "6T", "5T"], + supersonic: ["7E", "6E", "5E"], + swagger: ["7M", "6M", "5M"], + synchronoise: ["7E", "6E", "5E"], + tailwind: ["7T", "6T", "5T"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + venomdrench: ["7E", "6E"], + zenheadbutt: ["7T", "6T", "5T"], }}, - victini: {learnset: { - blueflare: ["5S2"], - boltstrike: ["5S2"], - bounce: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - celebrate: ["7S6"], + swoobat: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + afteryou: ["7T", "6T", "5T"], + aircutter: ["7L21", "6L21", "5L21"], + airslash: ["7L32", "6L32", "5L32"], + allyswitch: ["7T"], + amnesia: ["7L29", "6L29", "5L29"], + assurance: ["7L12", "7L1", "6L1", "5L1"], + attract: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + calmmind: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "6S3", "6S4", "5L1", "5S0"], - dazzlinggleam: ["7M", "6M"], - doubleedge: ["7L65", "6L65", "5L65"], + confusion: ["7L1", "6L1", "5L1"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], embargo: ["7M", "6M", "5M"], - endure: ["7L9", "6L9", "6S4", "5L9", "5S0"], + endeavor: ["7T", "7L47", "6T", "6L47", "5T", "5L47"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - finalgambit: ["7L81", "6L81", "5L81"], - fireblast: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - flameburst: ["7L41", "6L41", "5L41"], - flamecharge: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - flamethrower: ["7M", "6M", "5M"], - flareblitz: ["7L73", "6L73", "5L73"], flash: ["6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L1", "6L1", "5L1"], + fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - fusionbolt: ["5S1"], - fusionflare: ["5S1"], + futuresight: ["7L36", "6L36", "5L36"], + gigadrain: ["7T", "6T", "5T"], gigaimpact: ["7M", "6M", "5M"], - glaciate: ["5S2"], - grassknot: ["7M", "6M", "5M"], - headbutt: ["7L17", "6L17", "5L17"], - heatwave: ["6T", "5T"], - helpinghand: ["6T", "5T"], + gust: ["7L8", "7L1", "6L1", "5L1"], + gyroball: ["7M", "6M", "5M"], + heartstamp: ["7L15", "6L15", "5L15"], + heatwave: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["7L1", "6M", "6L1", "6S4", "5M", "5L1", "5S0"], - inferno: ["7L57", "6L57", "5L57"], - lastresort: ["6T", "5T"], + imprison: ["7L19", "6L19", "5L19"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - overheat: ["7M", "7L97", "6M", "6L97", "5M", "5L97"], - poweruppunch: ["6M"], + magiccoat: ["7T", "6T", "5T"], + odorsleuth: ["7L4", "7L1", "6L1", "5L1"], + pluck: ["5M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], + psychic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], psychup: ["7M", "6M", "5M"], psyshock: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "6S3", "6S4", "6S5", "5L1", "5S0"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7L33", "7S6", "6L33", "5L33"], - rocksmash: ["6M", "5M"], - roleplay: ["6T", "5T"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - searingshot: ["7L1", "6L1", "6S3", "5L1", "5S1"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], + skyattack: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - storedpower: ["7L89", "7S6", "6L89", "5L89"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "6S5", "5M"], + superfang: ["7T", "6T", "5T"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7T", "6T", "5T"], taunt: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], uturn: ["7M", "6M", "5M"], - vcreate: ["7S6", "6S3", "6S5", "5S1", "5S2"], - wildcharge: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["7L49", "6T", "6L49", "5T", "5L49"], + zenheadbutt: ["7T", "6T", "5T"], }}, - snivy: {learnset: { + drilbur: {learnset: { aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - aromatherapy: ["5S0"], attract: ["7M", "6M", "5M"], - bind: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], - captivate: ["7E", "6E", "5E"], - coil: ["7L31", "6L31", "5L31"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], + crushclaw: ["7E", "6E", "5E"], cut: ["6M", "5M"], + dig: ["7L19", "6M", "6L19", "5M", "5L19"], doubleteam: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M", "5S0"], - facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - frustration: ["7M", "6M", "5M"], - gastroacid: ["7L40", "6T", "6L40", "5T", "5L40"], - gigadrain: ["7L34", "6T", "6L34", "5T", "5L34"], - glare: ["7E", "6E", "5E"], - grassknot: ["7M", "6M", "5M"], - grasspledge: ["7T", "6T", "5T"], - grassyterrain: ["7E", "6E"], - growth: ["7L13", "6L13", "5L13", "5S0"], + drillrun: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], + earthpower: ["7T", "7E", "6T", "6E", "5T", "5E"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + facade: ["7M", "6M", "5M"], + fissure: ["7L47", "6L47", "5L47"], + fling: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], hiddenpower: ["7M", "6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - knockoff: ["6T", "5T"], - leafblade: ["7L28", "6L28", "5L28"], - leafstorm: ["7L43", "6L43", "5L43"], - leaftornado: ["7L16", "6L16", "5L16"], - leechseed: ["7L19", "6L19", "5L19"], - leer: ["7L4", "6L4", "5L4"], - lightscreen: ["7M", "6M", "5M"], - magicalleaf: ["7E", "6E", "5E"], - meanlook: ["7E", "6E", "5E"], - megadrain: ["7L22", "6L22", "5L22"], - mirrorcoat: ["7E", "6E", "5E"], - naturalgift: ["7E", "6E", "5E"], - naturepower: ["7M", "6M"], + honeclaws: ["7L22", "6M", "6L22", "5M", "5L22"], + irondefense: ["7T", "7E", "6T", "6E", "5T", "5E"], + metalclaw: ["7L15", "6L15", "5L15"], + metalsound: ["7E", "6E", "5D", "5E"], + mudslap: ["7L8", "6L8", "5L8"], + mudsport: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], - reflect: ["7M", "6M", "5M"], + rapidspin: ["7L5", "7E", "6L5", "6E", "5D", "5L5", "5E"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5D", "5E"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - slam: ["7L25", "6L25", "5L25"], + shadowclaw: ["7M", "6M", "5M"], + skullbash: ["7E", "6E", "5E"], + slash: ["7L26", "6L26", "5L26"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + strength: ["6M", "5M"], + submission: ["7E", "6E", "5E"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - sweetscent: ["7E", "6E", "5E"], - swordsdance: ["7M", "6M", "5M"], - synthesis: ["6T", "5T", "5S0"], - tackle: ["7L1", "6L1", "5L1"], - taunt: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], toxic: ["7M", "6M", "5M"], - twister: ["7E", "6E", "5E"], - vinewhip: ["7L7", "6L7", "5L7"], - workup: ["7M"], - worryseed: ["6T", "5T"], - wrap: ["7L10", "6L10", "5L10"], - wringout: ["7L37", "6L37", "5L37"], + xscissor: ["7M", "6M", "5M"], }}, - servine: {learnset: { + excadrill: {learnset: { aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], attract: ["7M", "6M", "5M"], - bind: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], - coil: ["7L36", "6L36", "5L36"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], cut: ["6M", "5M"], + dig: ["7L19", "6M", "6L19", "5M", "5L19"], doubleteam: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + drillrun: ["7T", "7L55", "6T", "6L55", "5T", "5L55"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + fissure: ["7L62", "6L62", "5L62"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gastroacid: ["7L48", "6T", "6L48", "5T", "5L48"], - gigadrain: ["7L40", "6T", "6L40", "5T", "5L40"], - grassknot: ["7M", "6M", "5M"], - grasspledge: ["7T", "6T", "5T"], - growth: ["7L13", "6L13", "5L13"], + furyswipes: ["7L12", "6L12", "5L12"], + gigaimpact: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leafblade: ["7L32", "6L32", "5L32"], - leafstorm: ["7L52", "6L52", "5L52"], - leaftornado: ["7L16", "6L16", "5L16"], - leechseed: ["7L20", "6L20", "5L20"], - leer: ["7L4", "7L1", "6L1", "5L1"], - lightscreen: ["7M", "6M", "5M"], - megadrain: ["7L24", "6L24", "5L24"], - naturepower: ["7M", "6M"], + honeclaws: ["7L22", "6M", "6L22", "5M", "5L22"], + horndrill: ["7L1", "6L31", "5L31"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T"], + metalclaw: ["7L15", "6L15", "5L15"], + mudslap: ["7L8", "7L1", "6L1", "5L1"], + mudsport: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], + rapidspin: ["7L5", "7L1", "6L1", "5L1"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - slam: ["7L28", "6L28", "5L28"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L26", "6L26", "5L26"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], + sludgebomb: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], - tackle: ["7L1", "6L1", "5L1"], - taunt: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], toxic: ["7M", "6M", "5M"], - vinewhip: ["7L7", "7L1", "6L1", "5L1"], - workup: ["7M"], - worryseed: ["6T", "5T"], - wrap: ["7L10", "7L1", "6L1", "5L1"], - wringout: ["7L44", "6L44", "5L44"], + xscissor: ["7M", "6M", "5M"], }}, - serperior: {learnset: { - aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - attract: ["7M", "6M", "5M"], - bind: ["6T", "5T"], - brutalswing: ["7M"], + audino: {learnset: { + afteryou: ["7T", "7L41", "6T", "6L40", "5T", "5L40"], + allyswitch: ["7T"], + amnesia: ["7E", "6E", "5E"], + attract: ["7M", "7L21", "6M", "6L15", "5M", "5L15"], + babydolleyes: ["7L5", "6L5"], + bestow: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M"], - coil: ["7L38", "6L38", "5L38"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M"], + disarmingvoice: ["7L13", "6L13"], + doubleedge: ["7L49", "6L49", "5L50"], + doubleslap: ["7L17", "6L10", "5L10", "5S0"], doubleteam: ["7M", "6M", "5M"], - dragonpulse: ["6T", "5T"], - dragontail: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + drainingkiss: ["7E", "6E"], + drainpunch: ["7T", "6T", "5T"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5D", "5E"], + entrainment: ["7L29", "6L25", "5L25"], facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], + flamethrower: ["7M", "6M", "5M"], flash: ["6M", "5M"], - frenzyplant: ["7T", "6T", "5T"], + fling: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], - gastroacid: ["7L56", "6T", "6L56", "5T", "5L56"], - gigadrain: ["7L44", "6T", "6L44", "6S1", "5T", "5L44", "5S0"], - gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - grasspledge: ["7T", "6T", "5T"], - growth: ["7L13", "6L13", "5L13"], + gravity: ["7T", "6T", "5T"], + growl: ["7L1", "6L1", "5L1"], + healbell: ["7T", "7E", "6T", "6E", "5T", "5E"], + healingwish: ["7E", "6E", "5E"], + healpulse: ["7L37", "6L35", "6S3", "5L35", "5S2", "5S1", "5S0"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5D", "5T", "5L1", "5S2", "5S1", "5S0"], hiddenpower: ["7M", "6M", "5M"], - holdback: ["6S1"], hyperbeam: ["7M", "6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leafblade: ["7L32", "6L32", "5L32"], - leafstorm: ["7L62", "6L62", "6S1", "5L62", "5S0"], - leaftornado: ["7L16", "6L16", "5L16"], - leechseed: ["7L20", "6L20", "5L20", "5S0"], - leer: ["7L4", "7L1", "6L1", "5L1"], + hypervoice: ["7T", "7L53", "7L1", "6T", "5T"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lastresort: ["7T", "7L57", "7L1", "6T", "6L1", "5T", "5L55"], lightscreen: ["7M", "6M", "5M"], - megadrain: ["7L24", "6L24", "5L24"], - naturepower: ["7M", "6M"], - outrage: ["6T", "5T"], + lowkick: ["7T", "6T", "5T"], + luckychant: ["7E", "6E", "5E"], + magiccoat: ["7T", "6T", "5T"], + mistyterrain: ["7L1", "6L1"], + painsplit: ["7T", "6T", "5T"], + playnice: ["7L1", "6L1"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + present: ["5S2", "5S1"], protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], reflect: ["7M", "6M", "5M"], + refresh: ["7L9", "6L5", "5L5", "5S2", "5S1", "5S0"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - secretpower: ["6M"], - seedbomb: ["6T", "5T"], - slam: ["7L28", "6L28", "5L28"], - sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], + secretpower: ["7L25", "6M", "6L20", "5L20"], + shadowball: ["7M", "6M", "5M"], + signalbeam: ["7T", "6T", "5T"], + simplebeam: ["7L45", "6L45", "6S3", "5L45"], + skillswap: ["7T", "6T", "5T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], solarbeam: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M", "5S0"], + stompingtantrum: ["7T"], + substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], - tackle: ["7L1", "6L1", "5L1"], - taunt: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], + sweetkiss: ["7E", "6E", "5E"], + takedown: ["7L33", "6L30", "5L30"], + telekinesis: ["7T", "5M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "6S3", "5M"], + thunderpunch: ["7T", "6T", "5T"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - vinewhip: ["7L7", "7L1", "6L1", "5L1"], - workup: ["7M"], - worryseed: ["6T", "5T"], - wrap: ["7L10", "7L1", "6L1", "5L1"], - wringout: ["7L50", "6L50", "6S1", "5L50"], + trickroom: ["7M", "6M", "6S3", "5M"], + uproar: ["7T", "6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E"], + workup: ["7M", "5M"], + yawn: ["7E", "6E", "5D", "5E"], + zenheadbutt: ["7T", "6T", "5T"], }}, - tepig: {learnset: { - assurance: ["7L31", "6L31", "5L31"], + timburr: {learnset: { attract: ["7M", "6M", "5M"], - bodyslam: ["7E", "6E", "5E"], + bide: ["7L8", "6L8", "5L8"], + block: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + chipaway: ["7L24", "6L24", "5L24"], + cometpunch: ["7E", "6E", "5E"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E"], - curse: ["7E", "6E", "5E"], - defensecurl: ["7L13", "6L13", "5L13"], + counter: ["7E", "6E", "5E"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - ember: ["7L7", "6L7", "5L7"], - endeavor: ["7E", "6T", "6E", "5T", "5E"], + drainpunch: ["7T", "7E", "6T", "6E", "5T", "5E"], + dynamicpunch: ["7L34", "6L34", "5L34"], + endure: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - firepledge: ["7T", "6T", "5T"], - flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - flamethrower: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], - flareblitz: ["7L43", "6L43", "5L43"], + firepunch: ["7T", "6T", "5T"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L4", "6L4", "5L4"], + focuspunch: ["7T", "7L46", "6T", "6L46", "5L46"], + forcepalm: ["7E", "6E", "5E"], + foresight: ["7E", "6E", "5E"], frustration: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], - headsmash: ["7L37", "6L37", "5L37"], - heatcrash: ["7L27", "6L27", "5L27"], - heatwave: ["6T", "5T"], - heavyslam: ["7E", "6E", "5E"], - helpinghand: ["6T", "5T"], + hammerarm: ["7L40", "6L40", "5L40"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - magnitude: ["7E", "6E", "5E"], - odorsleuth: ["7L9", "6L9", "5L9"], - overheat: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "7L12", "6T", "6L12", "5T", "5L12"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7E", "6E", "5E"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["7E", "6M"], protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + reversal: ["7E", "6E", "5E"], + rockslide: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], rocksmash: ["6M", "5M"], + rockthrow: ["7L16", "6L16", "5L16"], rocktomb: ["7M", "6M", "5M"], - rollout: ["7L21", "6L21", "5L21"], round: ["7M", "6M", "5M"], + scaryface: ["7L37", "6L37", "5L37"], secretpower: ["6M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - smog: ["7L19", "6L19", "5L19"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7E", "6E", "5E"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7E", "6E"], sunnyday: ["7M", "6M", "5M"], - superpower: ["7E", "6T", "6E", "5T", "5E"], + superpower: ["7T", "7L49", "6T", "6L49", "5T", "5L49"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L3", "6L3", "5L3"], - takedown: ["7L25", "6L25", "5L25"], taunt: ["7M", "6M", "5M"], - thrash: ["7E", "6E", "5E"], + thunderpunch: ["7T", "6T", "5T"], toxic: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - workup: ["7M"], - yawn: ["7E", "6E", "5E"], - zenheadbutt: ["6T"], + wakeupslap: ["7L20", "6L20", "5L20"], + wideguard: ["7E", "6E", "5E"], + workup: ["7M", "5M"], }}, - pignite: {learnset: { - armthrust: ["7L1", "6L17", "5L17"], - assurance: ["7L36", "6L36", "5L36"], + gurdurr: {learnset: { attract: ["7M", "6M", "5M"], + bide: ["7L8", "7L1", "6L1", "5L1"], + block: ["7T", "6T", "5T"], brickbreak: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + chipaway: ["7L24", "6L24", "5L24"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - defensecurl: ["7L13", "6L13", "5L13"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - ember: ["7L7", "7L1", "6L1", "5L1"], - endeavor: ["6T", "5T"], + drainpunch: ["7T", "6T", "5D", "5T"], + dynamicpunch: ["7L37", "6L37", "5L37"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T"], - flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - flamethrower: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - flareblitz: ["7L52", "6L52", "5L52"], + firepunch: ["7T", "6T", "5T"], fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + focuspunch: ["7T", "7L53", "6T", "6L53", "5L53"], frustration: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], - headsmash: ["7L44", "6L44", "5L44"], - heatcrash: ["7L31", "6L31", "5L31"], - heatwave: ["6T", "5T"], - helpinghand: ["6T", "5T"], + hammerarm: ["7L45", "6L45", "5L45"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - lowkick: ["6T", "5T"], + icepunch: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "7L12", "6T", "6L12", "5D", "5T", "5L12"], lowsweep: ["7M", "6M", "5M"], - odorsleuth: ["7L9", "7L1", "6L1", "5L1"], - overheat: ["7M", "6M", "5M"], + machpunch: ["5D"], + payback: ["7M", "6M", "5M"], poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], - rockslide: ["7M", "6M", "5M"], + rockslide: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], rocksmash: ["6M", "5M"], + rockthrow: ["7L16", "6L16", "5L16"], rocktomb: ["7M", "6M", "5M"], - rollout: ["7L23", "6L23", "5L23"], round: ["7M", "6M", "5M"], + scaryface: ["7L41", "6L41", "5L41"], secretpower: ["6M"], sleeptalk: ["7M", "6M", "5T"], - smog: ["7L20", "6L20", "5L20"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stoneedge: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], + superpower: ["7T", "7L57", "6T", "6L57", "5T", "5L57"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L3", "7L1", "6L1", "5L1"], - takedown: ["7L28", "6L28", "5L28"], taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + thunderpunch: ["7T", "6T", "5T"], toxic: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], + wakeupslap: ["7L20", "6L20", "5L20"], workup: ["7M", "5M"], - zenheadbutt: ["6T"], }}, - emboar: {learnset: { - armthrust: ["7L1", "6L17", "5L17"], - assurance: ["7L38", "6L38", "5L38"], + conkeldurr: {learnset: { attract: ["7M", "6M", "5M"], - blastburn: ["7T", "6T", "5T"], - block: ["6T", "5T"], + bide: ["7L8", "7L1", "6L1", "5L1"], + block: ["7T", "6T", "5T"], brickbreak: ["7M", "6M", "5M"], - bulkup: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], bulldoze: ["7M", "6M", "5M"], + chipaway: ["7L24", "6L24", "5L24"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - defensecurl: ["7L13", "6L13", "5L13"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], + dynamicpunch: ["7L37", "6L37", "5L37"], earthquake: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - ember: ["7L7", "7L1", "6L1", "5L1"], - endeavor: ["6T", "5T"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - firepledge: ["7T", "6T", "5T"], - firepunch: ["6T", "5T"], - flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - flamethrower: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], - flareblitz: ["7L62", "6L62", "6S1", "5L62", "5S0"], + firepunch: ["7T", "6T", "5T"], fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + focuspunch: ["7T", "7L53", "6T", "6L53", "5L53"], frustration: ["7M", "6M", "5M"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], - hammerarm: ["7L1", "6L1", "5L1", "5S0"], - headsmash: ["7L50", "6L50", "6S1", "5L50", "5S0"], - heatcrash: ["7L31", "6L31", "5L31"], - heatwave: ["6T", "5T"], - helpinghand: ["6T", "5T"], + hammerarm: ["7L45", "6L45", "5L45"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - holdback: ["6S1"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T"], - irontail: ["6T", "5T"], - lowkick: ["6T", "5T"], + icepunch: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "7L12", "6T", "6L12", "5T", "5L12"], lowsweep: ["7M", "6M", "5M"], - odorsleuth: ["7L9", "7L1", "6L1", "5L1"], - overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], - rockslide: ["7M", "6M", "5M"], + rockslide: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], rocksmash: ["6M", "5M"], + rockthrow: ["7L16", "6L16", "5L16"], rocktomb: ["7M", "6M", "5M"], - rollout: ["7L23", "6L23", "5L23"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + scaryface: ["7L41", "6L41", "5L41"], secretpower: ["6M"], sleeptalk: ["7M", "6M", "5T"], smackdown: ["7M", "6M", "5M"], - smog: ["7L20", "6L20", "5L20"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stoneedge: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], + superpower: ["7T", "7L57", "6T", "6L57", "5T", "5L57"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L3", "7L1", "6L1", "5L1"], - takedown: ["7L28", "6L28", "6S1", "5L28"], taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + thunderpunch: ["7T", "6T", "5T"], toxic: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M", "5S0"], - willowisp: ["7M", "6M", "5M"], + wakeupslap: ["7L20", "6L20", "5L20"], workup: ["7M", "5M"], - zenheadbutt: ["6T"], }}, - oshawott: {learnset: { - aerialace: ["7M", "6M", "5M"], - airslash: ["7E", "6E", "5E"], - aquajet: ["7L29", "6L29", "5L29"], - aquatail: ["7L35", "6T", "6L35", "5T", "5L35"], - assurance: ["7E", "6E", "5E"], + tympole: {learnset: { + afteryou: ["7T", "7E", "6T", "6E"], + aquaring: ["7L20", "6L20", "5L20"], attract: ["7M", "6M", "5M"], - blizzard: ["7M", "6M", "5M"], - brine: ["7E", "6E", "5E"], + bounce: ["7T", "6T", "5T"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L12", "6L12", "5L12"], confide: ["7M", "6M"], - copycat: ["7E", "6E", "5E"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], - detect: ["7E", "6E", "5E"], - dig: ["6M", "5M"], - dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - encore: ["7L31", "6L31", "5L31"], + earthpower: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + echoedvoice: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focusenergy: ["7L13", "6L13", "5L13"], + flail: ["7L34", "6L34", "5L34"], frustration: ["7M", "6M", "5M"], - furycutter: ["7L19", "6L19", "5L19"], - grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L1"], hail: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L43", "6L43", "5L43"], - icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - irontail: ["6T", "5T"], - nightslash: ["7E", "6E", "5E"], + hydropump: ["7L42", "6L42", "5L42"], + hypervoice: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], + icywind: ["7T", "6T", "5T"], + infestation: ["7M", "6M"], + mist: ["7E", "6E", "5E"], + mudbomb: ["7E", "6E", "5E"], + muddywater: ["7L27", "6L27", "5L27"], + mudshot: ["7L16", "6L16", "5L16"], + mudsport: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - razorshell: ["7L17", "6L17", "5L17"], + raindance: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + refresh: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "7L9", "6M", "6L9", "5D", "5M", "5L9"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "7E", "6T", "6E", "5T", "5E"], + substitute: ["7M", "6M", "5M"], + supersonic: ["7L5", "6L5", "5L5"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + venomdrench: ["7E"], + waterpulse: ["7T", "7E", "6T", "6E", "5D", "5E"], + }}, + palpitoad: {learnset: { + afteryou: ["7T", "6T"], + aquaring: ["7L20", "6L20", "5L20"], + attract: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L12", "6L12", "5L12"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + echoedvoice: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "5M"], + flail: ["7L37", "6L37", "5L37"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "6T", "5T"], + growl: ["7L1", "6L1", "5L1"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L47", "6L47", "5L47"], + hypervoice: ["7T", "7L51", "6T", "6L51", "5T", "5L51"], + icywind: ["7T", "6T", "5T"], + infestation: ["7M", "6M"], + muddywater: ["7L28", "6L28", "5L28"], + mudshot: ["7L16", "6L16", "5L16"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], rest: ["7M", "6M", "5M"], - retaliate: ["7L37", "6M", "6L37", "5M", "5L37"], return: ["7M", "6M", "5M"], - revenge: ["7L25", "6L25", "5L25"], rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], + round: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1"], scald: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E"], secretpower: ["6M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + supersonic: ["7L5", "7L1", "6L1", "5L1"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L5", "6L5", "5L5"], - taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trumpcard: ["7E", "6E", "5E"], - waterfall: ["7M", "6M", "5M"], - watergun: ["7L7", "6L7", "5L7"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["7L23", "6T", "6L23", "5L23"], - watersport: ["7L11", "6L11", "5L11"], - workup: ["7M"], - xscissor: ["7M", "6M", "5M"], + uproar: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + waterpulse: ["7T", "6T"], }}, - dewott: {learnset: { - aerialace: ["7M", "6M", "5M"], - aquajet: ["7L34", "6L33", "5L33"], - aquatail: ["7L42", "6T", "6L41", "5T", "5L41"], + seismitoad: {learnset: { + acid: ["7L1", "6L36", "5L36"], + afteryou: ["7T", "6T"], + aquaring: ["7L20", "6L20", "5L20"], attract: ["7M", "6M", "5M"], - blizzard: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L12", "6L12", "5L12"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], dig: ["6M", "5M"], - dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - encore: ["7L37", "6L36", "5L36"], + drainpunch: ["7T", "7L44", "6T", "6L44", "5T", "5L44"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], + echoedvoice: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], + flail: ["7L39", "6L39", "5L39"], fling: ["7M", "6M", "5M"], - focusenergy: ["7L13", "6L13", "5L13"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], - furycutter: ["7L21", "6L20", "5L20"], + gastroacid: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L1"], hail: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L53", "6L52", "5L52"], - icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - irontail: ["6T", "5T"], + hydropump: ["7L53", "6L53", "5L53"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L59", "6T", "6L59", "5T", "5L59"], + icepunch: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T"], + infestation: ["7M", "6M"], + knockoff: ["7T", "6T", "5T"], + lowkick: ["7T", "6T", "5T"], + muddywater: ["7L28", "6L28", "5L28"], + mudshot: ["7L16", "6L16", "5L16"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - razorshell: ["7L18", "6L17", "5L17"], + raindance: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], rest: ["7M", "6M", "5M"], - retaliate: ["7L45", "6M", "6L44", "5M", "5L44"], return: ["7M", "6M", "5M"], - revenge: ["7L29", "6L28", "5L28"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1"], scald: ["7M", "6M", "5M"], secretpower: ["6M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + supersonic: ["7L5", "7L1", "6L1", "5L1"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L50", "6M", "6L49", "5M", "5L49"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L5", "7L1", "6L1", "5L1"], - taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M"], - watergun: ["7L7", "7L1", "6L1", "5L1"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["7L26", "6T", "6L25", "5L25"], - watersport: ["7L11", "7L1", "6L1", "5L1"], - workup: ["7M"], - xscissor: ["7M", "6M", "5M"], + uproar: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["7T", "6T"], }}, - samurott: {learnset: { - aerialace: ["7M", "6M", "5M"], - aquajet: ["7L34", "6L33", "5L33"], - aquatail: ["7L46", "6T", "6L45", "5T", "5L45"], + throh: {learnset: { attract: ["7M", "6M", "5M"], - blizzard: ["7M", "6M", "5M"], - block: ["6T", "5T"], - confide: ["7M", "6M", "6S1"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], + bide: ["7L1", "6L5", "5L5"], + bind: ["7T", "7L1", "6T", "6L1", "5D", "5T", "5L1"], + block: ["7T", "6T", "5T"], + bodyslam: ["7L21", "6L29", "5L29"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], + bulldoze: ["7M", "6M", "5M"], + circlethrow: ["7L29", "6L37", "5L37"], + confide: ["7M", "6M"], dig: ["6M", "5M"], - dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - dragontail: ["7M", "6M", "5M"], - encore: ["7L39", "6L38", "5L38"], + earthquake: ["7M", "6M", "5M"], + endure: ["7L33", "6L41", "5L41"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], fling: ["7M", "6M", "5M"], - focusenergy: ["7L13", "6L13", "5L13"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L1", "6L9", "5L9"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], - furycutter: ["7L21", "6L20", "5L20"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - holdback: ["6S1"], - hydrocannon: ["7T", "6T", "5T"], - hydropump: ["7L63", "6L62", "6S1", "5L62", "5S0"], - hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "6M", "5M", "5S0"], - icywind: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - megahorn: ["7L1", "6L1", "5L1", "5S0"], + icepunch: ["7T", "6T", "5D", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + matblock: ["7L1"], + painsplit: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - razorshell: ["7L18", "6L17", "6S1", "5L17"], rest: ["7M", "6M", "5M"], - retaliate: ["7L51", "6M", "6L50", "5M", "5L50"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - revenge: ["7L29", "6L28", "5L28"], + revenge: ["7L13", "6L21", "5L21"], + reversal: ["7L45", "6L50", "5L53"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M"], - slash: ["7L1", "6L36", "5L36"], + seismictoss: ["7L5", "6L13", "5L13"], sleeptalk: ["7M", "6M", "5T"], - smartstrike: ["7M"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], + stormthrow: ["7L17", "6L25", "5L25"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T", "5S0"], - surf: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "7L41", "6T", "6L48", "5D", "5T", "5L49"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L58", "6M", "6L57", "5M", "5L57"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L5", "7L1", "6L1", "5L1"], taunt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], toxic: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M"], - watergun: ["7L7", "7L1", "6L1", "5L1"], - waterpledge: ["7T", "6T", "5T"], - waterpulse: ["7L25", "6T", "6L25", "5L25"], - watersport: ["7L11", "7L1", "6L1", "5L1"], - workup: ["7M"], - xscissor: ["7M", "6M", "5M"], + vitalthrow: ["7L9", "6L17", "5L17"], + wideguard: ["7L37", "6L45", "5L45"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T"], }}, - patrat: {learnset: { - afteryou: ["7L23", "6T", "6L23", "5T", "5L23"], - aquatail: ["6T", "5T"], - assurance: ["7E", "6E", "5E"], + sawk: {learnset: { attract: ["7M", "6M", "5M"], - batonpass: ["7L38", "6L33", "5L33"], - bide: ["7L8", "6L8", "5L8"], - bite: ["7L6", "6L6", "5L6"], + bide: ["7L1", "6L5", "5L5"], + block: ["7T", "6T", "5T"], + brickbreak: ["7M", "7L21", "6M", "6L29", "5M", "5L29"], + bulkup: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], + bulldoze: ["7M", "6M", "5M"], + closecombat: ["7L41", "6L48", "5L49"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - crunch: ["7L16", "6L16", "5L16"], - cut: ["6M", "5M"], - detect: ["7L11", "6L11", "5L11"], + counter: ["7L13", "6L21", "5L21"], dig: ["6M", "5M"], + doublekick: ["7L5", "6L13", "5L13"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dualchop: ["7T", "6T", "5D", "5T"], + earthquake: ["7M", "6M", "5M"], + endure: ["7L33", "6L41", "5L41"], facade: ["7M", "6M", "5M"], - flail: ["7E", "6E", "5E"], + firepunch: ["7T", "6T", "5T"], fling: ["7M", "6M", "5M"], - focusenergy: ["7L26"], - foresight: ["7E", "6E", "5E"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L1", "6L9", "5L9"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], - helpinghand: ["6T", "5T"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperfang: ["7L31", "6L28", "5L28"], - hypnosis: ["7L18", "6L18", "5L18"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - lastresort: ["6T", "5T"], - leer: ["7L3", "6L3", "5L3"], - lowkick: ["6T", "5T"], - meanlook: ["7L36", "6L31", "5L31"], - nastyplot: ["7L33"], + icepunch: ["7T", "6T", "5T"], + karatechop: ["7L17", "6L25", "5L25"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "7L9", "6M", "6L17", "5M", "5L17"], + painsplit: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], + quickguard: ["7L37", "6L45", "5L45"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], + retaliate: ["7L29", "6M", "6L37", "5M", "5L37"], return: ["7M", "6M", "5M"], - revenge: ["7E", "6E", "5E"], + reversal: ["7L45", "6L50", "5L53"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["7L1", "6M", "6L1", "5D", "5M", "5L1"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L13", "6L13", "5L13"], - screech: ["7E", "6E", "5E"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - slam: ["7L41", "6L36", "5L36"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superfang: ["7L21", "6T", "6L21", "5T", "5L21"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - thunderbolt: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5D", "5T"], toxic: ["7M", "6M", "5M"], - workup: ["7M", "7L28", "6L26", "5M", "5L26"], - zenheadbutt: ["6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T"], }}, - watchog: {learnset: { - afteryou: ["7L25", "6T", "6L25", "5T", "5L25"], - aquatail: ["6T", "5T"], + sewaddle: {learnset: { + agility: ["7E", "6E", "5E"], + airslash: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - batonpass: ["7L46", "6L39", "5L39"], - bide: ["7L8", "6L8", "5L8"], - bite: ["7L6", "7L1", "6L1", "5L1"], + batonpass: ["7E", "6E", "5E"], + bugbite: ["7T", "7L8", "6T", "6L8", "5T", "5L8"], + bugbuzz: ["7L36", "6L36", "5L36"], + calmmind: ["7M", "6M", "5M"], + camouflage: ["7E", "6E", "5E"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L20", "5L20"], - covet: ["6T", "5T"], - crunch: ["7L16", "6L16", "5L16"], cut: ["6M", "5M"], - detect: ["7L11", "6L11", "5L11"], - dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + electroweb: ["7T", "6T", "5T"], + endure: ["7L29", "6L29", "5L29"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - flamethrower: ["7M", "6M", "5M"], + flail: ["7L43", "6L43", "5L43"], flash: ["6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L29"], - focuspunch: ["6T"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], + gigadrain: ["7T", "6T", "5T"], grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], - helpinghand: ["6T", "5T"], + grassyterrain: ["7E"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hyperfang: ["7L36", "6L32", "5L32"], - hypnosis: ["7L18", "6L18", "5L18"], - icepunch: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - lastresort: ["6T", "5T"], - leer: ["7L3", "7L1", "6L1", "5L1"], + irondefense: ["7T", "6T", "5T"], lightscreen: ["7M", "6M", "5M"], - lowkick: ["7L1", "6T", "6L1", "5T", "5L1"], - meanlook: ["7L43", "6L36", "5L36"], - nastyplot: ["7L39"], - poweruppunch: ["6M"], + magiccoat: ["7T", "6T", "5T"], + mefirst: ["7E", "6E", "5E"], + mindreader: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - psychup: ["7M", "7L32", "6M", "6L29", "5M", "5L29"], - raindance: ["7M", "6M", "5M"], + razorleaf: ["7L15", "6L15", "5L15"], + razorwind: ["7E", "6E", "5E"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rototiller: ["7L1", "6L1"], round: ["7M", "6M", "5M"], - sandattack: ["7L13", "6L13", "5L13"], + safeguard: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - slam: ["7L50", "6L43", "5L43"], + seedbomb: ["7T", "6T", "5T"], + signalbeam: ["7T", "6T", "5T"], + silverwind: ["7E", "6E", "5E"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stickyweb: ["7L31", "6L31"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["7L22", "6M", "6L22", "5M", "5L22"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superfang: ["7L22", "6T", "6L22", "5T", "5L22"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], tackle: ["7L1", "6L1", "5L1"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], - thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T"], + worryseed: ["7T", "6T", "5T"], }}, - lillipup: {learnset: { - aerialace: ["7M", "6M", "5M"], - afteryou: ["7E", "6T", "6E"], + swadloon: {learnset: { attract: ["7M", "6M", "5M"], - babydolleyes: ["7L10", "6L10"], - bite: ["7L8", "6L8", "5L8"], - charm: ["7E", "6E", "5E"], + bugbite: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - crunch: ["7L22", "6L22", "5L22"], - dig: ["6M", "5M"], + cut: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], + dreameater: ["7M", "6M", "5M"], + electroweb: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - firefang: ["7E", "6E", "5E"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], - helpinghand: ["7L12", "6T", "6L12", "5T", "5L12"], + gigadrain: ["7T", "6T", "5T"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - howl: ["7E", "6E", "5E"], - hypervoice: ["6T", "5T"], - icefang: ["7E", "6E", "5E"], - lastresort: ["7L36", "6T", "6L36", "5T", "5L36"], - leer: ["7L1", "6L1", "5L1"], - lick: ["7E", "6E", "5E"], - mudslap: ["7E", "6E", "5E"], - odorsleuth: ["7L5", "6L5", "5L5"], - playrough: ["7L45", "6L45"], - protect: ["7M", "6M", "5M"], - psychicfangs: ["7E"], - pursuit: ["7E", "6E", "5E"], - raindance: ["7M", "6M", "5M"], + irondefense: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "7L1", "6M", "6L20", "5M", "5L20"], + razorleaf: ["7L1", "6L1", "5L1"], rest: ["7M", "6M", "5M"], - retaliate: ["7L29", "6M", "6L29", "5M", "5L29"], return: ["7M", "6M", "5M"], - reversal: ["7L33", "6L33", "5L33"], - roar: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], + seedbomb: ["7T", "6T", "5T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], tackle: ["7L1", "6L1", "5L1"], - takedown: ["7L15", "6L15", "5L15"], - thunderbolt: ["7M", "6M", "5M"], - thunderfang: ["7E", "6E", "5E"], - thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "7L19", "6L19", "5M", "5L19"], - yawn: ["7E", "6E", "5E"], + worryseed: ["7T", "6T", "5T"], }}, - herdier: {learnset: { + leavanny: {learnset: { aerialace: ["7M", "6M", "5M"], - afteryou: ["6T"], attract: ["7M", "6M", "5M"], - bite: ["7L8", "7L1", "6L1", "5L1"], + bugbite: ["7T", "7L8", "7L1", "6T", "6L1", "5T", "5L1"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - crunch: ["7L24", "6L24", "5L24"], - dig: ["6M", "5M"], + cut: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + electroweb: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], + entrainment: ["7L43", "6L43", "5L43"], facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + fellstinger: ["7L29", "6L34"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], - helpinghand: ["7L12", "6T", "6L12", "5T", "5L12"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + healbell: ["7T", "6T", "5T"], + helpinghand: ["7T", "7L32", "6T", "6L32", "5T", "5L32"], hiddenpower: ["7M", "6M", "5M"], - hypervoice: ["6T", "5T"], - lastresort: ["7L42", "6T", "6L42", "5T", "5L42"], - leer: ["7L1", "6L1", "5L1"], - odorsleuth: ["7L5", "7L1", "6L1", "5L1"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leafblade: ["7L36", "6L36", "5L36"], + leafstorm: ["7L50", "6L50", "5L50"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + naturepower: ["7M", "6M"], payback: ["7M", "6M", "5M"], - playrough: ["7L52", "6L52"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + razorleaf: ["7L15", "7L1", "6L1", "5L1"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["7L33", "6M", "6L33", "5M", "5L33"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7L38", "6L38", "5L38"], - roar: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], + seedbomb: ["7T", "6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["7T", "6T", "5T"], + slash: ["7L1", "6L29", "5L29"], sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steelwing: ["7M", "6M"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["7L22", "6M", "6L22", "5M", "5L22"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + synthesis: ["7T", "6T", "5T"], tackle: ["7L1", "6L1", "5L1"], - takedown: ["7L15", "6L15", "5L15"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], + throatchop: ["7T"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "7L20", "6L20", "5M", "5L20"], + worryseed: ["7T", "6T", "5T"], + xscissor: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], }}, - stoutland: {learnset: { - aerialace: ["7M", "6M", "5M"], - afteryou: ["6T"], + venipede: {learnset: { + agility: ["7L29", "6L29", "5L29"], attract: ["7M", "6M", "5M"], - bite: ["7L8", "7L1", "6L1", "5L1"], + bugbite: ["7T", "7L22", "6T", "6L22", "5T", "5L22"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - crunch: ["7L24", "6L24", "5L24"], - dig: ["6M", "5M"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleedge: ["7L43", "6L43", "5L43"], doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - firefang: ["7L1", "6L1", "5L1"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], - helpinghand: ["7L12", "6T", "6L12", "5T", "5L12"], + gyroball: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["6T", "5T"], - icefang: ["7L1", "6L1", "5L1"], - ironhead: ["6T", "5T"], - lastresort: ["7L51", "6T", "6L51", "5T", "5L51"], - leer: ["7L1", "6L1", "5L1"], - odorsleuth: ["7L5", "7L1", "6L1", "5L1"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T"], payback: ["7M", "6M", "5M"], - playrough: ["7L63", "6L63"], - protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + pinmissile: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7L5", "6L5", "5L5"], + poisontail: ["7L19", "6L19", "5L19"], + protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + pursuit: ["7L12", "6L12", "5L12"], rest: ["7M", "6M", "5M"], - retaliate: ["7L36", "6M", "6L36", "5M", "5L36"], return: ["7M", "6M", "5M"], - reversal: ["7L42", "6L42", "5L42"], - roar: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rockclimb: ["7L40", "7E", "6L40", "6E", "5L40", "5E"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], + rollout: ["7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], + screech: ["7L8", "6L8", "5L8"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], + signalbeam: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - strength: ["6M", "5M"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spikes: ["7E", "6E", "5E"], + steamroller: ["7L33", "6L33", "5L33"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - takedown: ["7L15", "6L15", "5L15"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderfang: ["7L1", "6L1", "5L1"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "7L20", "6L20", "5M", "5L20"], + takedown: ["7E", "6E", "5E"], + toxic: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxicspikes: ["7E", "6E", "5E"], + twineedle: ["7E", "6E", "5E"], + venomdrench: ["7L38"], + venoshock: ["7M", "7L38", "7L26", "6M", "6L26", "5M", "5L26"], }}, - purrloin: {learnset: { - aerialace: ["7M", "6M", "5M"], - assist: ["7L6", "6L6", "5L6"], - assurance: ["7L28", "6L28", "5L28"], + whirlipede: {learnset: { + agility: ["7L32", "6L32", "5L32"], attract: ["7M", "6M", "5M"], - captivate: ["7L33", "6L33", "5L33"], - charm: ["7E", "6E", "5E"], + bugbite: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], confide: ["7M", "6M"], - copycat: ["7E", "6E"], - covet: ["7E", "6T", "6E", "5T", "5E"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleedge: ["7L50", "6L50", "5L50"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - encore: ["7E", "6E", "5E"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - fakeout: ["7L21", "6L21", "5L21"], - faketears: ["7E", "6E", "5E"], - feintattack: ["7E", "6E", "5E"], - foulplay: ["7E", "6T", "6E", "5T", "5E"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L12", "6L12", "5L12"], - grassknot: ["7M", "6M", "5M"], - growl: ["7L3", "6L3", "5L3"], - gunkshot: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L24", "6M", "6L24", "5M", "5L24"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - nastyplot: ["7L42", "6L42", "5L42"], - nightslash: ["7L37", "6L37", "5L37"], + infestation: ["7M", "6M"], + irondefense: ["7T", "7L1", "6T", "6L22", "5T", "5L22"], payback: ["7M", "6M", "5M"], - payday: ["7E", "6E", "5E"], - playrough: ["7L49", "6L49"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - pursuit: ["7L15", "6L15", "5L15"], - raindance: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7L5", "7L1", "6L1", "5L1"], + poisontail: ["7L19", "6L19", "5L19"], + protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + pursuit: ["7L12", "6L12", "5L12"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + rockclimb: ["7L46", "6L46", "5L46"], + rocksmash: ["6M", "5M"], + rollout: ["7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], - sandattack: ["7L10", "6L10", "5L10"], - scratch: ["7L1", "6L1", "5L1"], + screech: ["7L8", "7L1", "6L1", "5L1"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L30", "6L30", "5L30"], + signalbeam: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["7L39", "6T", "6L39", "5T", "5L39"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steamroller: ["7L37", "6L37", "5L37"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7L46", "6L46", "5L46"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], - yawn: ["7E", "6E", "5E"], + toxic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + venomdrench: ["7L43", "6L43"], + venoshock: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], }}, - liepard: {learnset: { - aerialace: ["7M", "6M", "5M"], - assist: ["7L6", "7L1", "6L1", "5L1"], - assurance: ["7L31", "6L31", "5L31"], + scolipede: {learnset: { + agility: ["7L33", "6L33", "5L33"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], + batonpass: ["7L1", "6L30", "5L30"], + bugbite: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], + defensecurl: ["7L1", "6L1", "5L1"], + dig: ["6M", "5M"], + doubleedge: ["7L55", "6L55", "5L55"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - encore: ["5S0"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - fakeout: ["7L22", "6L22", "5L22", "5S0"], - foulplay: ["6T", "5T", "5S0"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L12", "6L12", "5L12"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growl: ["7L3", "7L1", "6L1", "5L1"], - gunkshot: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L26", "6M", "6L26", "5M", "5L26"], hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - nastyplot: ["7L50", "6L50", "5L50"], - nightslash: ["7L43", "6L43", "5L43"], + infestation: ["7M", "6M"], + irondefense: ["7T", "7L1", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + megahorn: ["7L65", "7L1", "6L1", "5L1"], payback: ["7M", "6M", "5M"], - playrough: ["7L58", "6L58"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - pursuit: ["7L15", "6L15", "5L15"], - raindance: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7L5", "7L1", "6L1", "5L1"], + poisontail: ["7L19", "6L19", "5D", "5L19"], + protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + pursuit: ["7L12", "6L12", "5L12"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockclimb: ["7L50", "6L50", "5L50"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - roleplay: ["6T", "5T"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], - sandattack: ["7L10", "7L1", "6L1", "5L1"], - scratch: ["7L1", "6L1", "5L1"], + screech: ["7L8", "7L1", "6L1", "5L1"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L34", "6L34", "5L34"], + signalbeam: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["7L47", "6T", "6L47", "5T", "5L47"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steamroller: ["7L39", "6L39", "5L39"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7L55", "6L55", "5L55"], sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M", "5S0"], - taunt: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5D", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + throatchop: ["7T"], + toxic: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + toxicspikes: ["5D"], + venomdrench: ["7L47", "6L47"], + venoshock: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + xscissor: ["7M", "6M", "5M"], }}, - pansage: {learnset: { - acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - astonish: ["7E", "6E", "5E"], + cottonee: {learnset: { + absorb: ["7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - bite: ["7L19", "6L19", "5L19", "5S0"], - bulletseed: ["7E", "6E", "5E", "5S0"], + beatup: ["7E", "6E", "5E"], + captivate: ["7E", "6E"], + charm: ["7L28", "6L28", "5L28"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E"], - crunch: ["7L43", "6L43", "5L43"], - cut: ["6M", "5M"], - dig: ["6M", "5M", "5S0", "5S2"], - disarmingvoice: ["7E", "6E"], + cottonguard: ["7L37", "6L37", "5L37"], + cottonspore: ["7L17", "6L17", "5L17"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - energyball: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5D", "5E"], + endeavor: ["7T", "7L44", "6T", "6L44", "5T", "5L44"], + energyball: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], facade: ["7M", "6M", "5M"], + fairywind: ["7L1", "6L1"], + faketears: ["7E", "6E", "5E"], flash: ["6M", "5M"], - fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - focuspunch: ["6T"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L13", "6L13", "5L13"], - gastroacid: ["6T"], - gigadrain: ["6T", "5T"], - grassknot: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], - grasspledge: ["7T"], + gigadrain: ["7T", "7L26", "6T", "6L26", "5T", "5L26"], + grassknot: ["7M", "6M", "5M"], grasswhistle: ["7E", "6E", "5E"], - gunkshot: ["6T", "5T"], - helpinghand: ["6T", "5T"], + growth: ["7L4", "6L4", "5L4"], + helpinghand: ["7T", "7L31", "6T", "6L31", "5T", "5L31"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leafstorm: ["7E", "6E", "5E", "5S1"], - leechseed: ["7L16", "6L16", "5L16"], - leer: ["7L4", "6L4", "5L4", "5S1"], - lick: ["7L7", "6L7", "5L7", "5S1"], - lowkick: ["7E", "6T", "6E", "5T", "5E"], - lowsweep: ["7M", "6M", "5M"], - magicalleaf: ["7E", "6E", "5E"], - nastyplot: ["7E", "6E", "5E"], - naturalgift: ["7L40", "6L40", "5L40"], + knockoff: ["7T", "6T", "5T"], + leechseed: ["7L8", "6L8", "5D", "5L8"], + megadrain: ["7L13", "6L13", "5L13"], + memento: ["7E", "6E", "5E"], + mistyterrain: ["7E"], + naturalgift: ["7E", "6E", "5E"], naturepower: ["7M", "6M"], - payback: ["7M", "6M", "5M"], - playnice: ["7L1", "6L1"], + poisonpowder: ["7L22", "6L22", "5L22"], protect: ["7M", "6M", "5M"], - recycle: ["7L37", "6T", "6L37", "5T", "5L37"], + razorleaf: ["7L19", "6L19", "5L19"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M", "5S2"], - roleplay: ["7E", "6T", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["7L22", "6T", "6L22", "5T", "5L22", "5S2"], - shadowclaw: ["7M", "6M", "5M"], + seedbomb: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M", "5S0", "5S2"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + stunspore: ["7L10", "6L10", "5L10"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], + sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], swagger: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], + switcheroo: ["7E", "6E", "5E"], + tailwind: ["7T", "6T", "5T"], taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], tickle: ["7E", "6E", "5E"], - torment: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - vinewhip: ["7L10", "6L10", "5L10", "5S1"], - workup: ["7M", "5M"], - worryseed: ["6T", "5T"], + worryseed: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], }}, - simisage: {learnset: { - acrobatics: ["7M", "6M", "5M"], + whimsicott: {learnset: { attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], + beatup: ["5S0"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], - dig: ["6M", "5M"], + cottonspore: ["7L1", "6L1", "5L1"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], flash: ["6M", "5M"], fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L1", "6L1", "5L1"], - gastroacid: ["6T"], - gigadrain: ["6T", "5T"], + gigadrain: ["7T", "6T", "5T", "5S0"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - grasspledge: ["7T"], - gunkshot: ["6T", "5T"], - helpinghand: ["6T", "5T"], + growth: ["7L1", "6L1", "5L1"], + gust: ["7L10", "6L10", "5L10"], + helpinghand: ["7T", "6T", "5T", "5S0"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], + hurricane: ["7L46", "6L46", "5L46"], hyperbeam: ["7M", "6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lick: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], + knockoff: ["7T", "6T", "5T"], + leechseed: ["7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L1", "6L1", "5L1"], + moonblast: ["7L50", "6L50"], naturepower: ["7M", "6M"], - payback: ["7M", "6M", "5M"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + psychic: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["7L1", "6T", "6L1", "5T", "5L1"], - shadowclaw: ["7M", "6M", "5M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], solarbeam: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], + swagger: ["7M", "6M", "5M", "5S0"], + tailwind: ["7T", "7L28", "6T", "6L28", "5T", "5L28"], taunt: ["7M", "6M", "5M"], thief: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - workup: ["7M", "5M"], - worryseed: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - pansear: {learnset: { - acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - amnesia: ["7L25", "6L25", "5L25"], - astonish: ["7E", "6E", "5E"], + petilil: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + afteryou: ["7T", "7L44", "6T", "6L44", "5T", "5L44"], + aromatherapy: ["7L28", "6L28", "5L28"], attract: ["7M", "6M", "5M"], - bite: ["7L19", "6L19", "5L19"], + bide: ["7E", "6E", "5E"], + charm: ["7E", "6E", "5D", "5E"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E"], - crunch: ["7L43", "6L43", "5L43"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M"], - dig: ["6M", "5M"], - disarmingvoice: ["7E", "6E"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + encore: ["7E"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + entrainment: ["7L37", "6L37", "5L37"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], - firepledge: ["7T"], - firepunch: ["7E", "6T", "6E", "5T", "5E"], - firespin: ["7E", "6E", "5E"], - flameburst: ["7L22", "6L22", "5L22"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M"], - fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - focuspunch: ["6T"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L13", "6L13", "5L13"], - gastroacid: ["6T"], + gigadrain: ["7T", "7L26", "6T", "6L26", "5T", "5L26"], grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], - heatwave: ["7E", "6T", "6E", "5T", "5E", "5S0"], - helpinghand: ["6T", "5T"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L4", "6L4", "5L4"], + healbell: ["7T", "6T", "5T"], + healingwish: ["7E", "6E", "5E"], + helpinghand: ["7T", "7L31", "6T", "6L31", "5T", "5L31"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - incinerate: ["7L10", "6M", "6L10", "5M", "5L10", "5S0"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L4", "6L4", "5L4", "5S0"], - lick: ["7L7", "6L7", "5L7", "5S0"], - lowkick: ["7E", "6T", "6E", "5T", "5E"], - lowsweep: ["7M", "6M", "5M"], - nastyplot: ["7E", "6E", "5E"], - naturalgift: ["7L40", "6L40", "5L40"], - overheat: ["7M", "6M", "5M"], - payback: ["7M", "6M", "5M"], - playnice: ["7L1", "6L1"], + ingrain: ["7E", "6E", "5E"], + laserfocus: ["7T"], + leafstorm: ["7L46", "6L46", "5L46"], + leechseed: ["7L8", "6L8", "5L8"], + magicalleaf: ["7L19", "6L19", "5L19"], + megadrain: ["7L13", "6L13", "5L13"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], protect: ["7M", "6M", "5M"], - recycle: ["7L37", "6T", "6L37", "5T", "5L37"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["7E", "6T", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - scratch: ["7L1", "6L1", "5L1"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snore: ["6T", "5T"], + seedbomb: ["7T", "6T", "5T"], + sleeppowder: ["7L10", "6L10", "5D", "5L10"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], solarbeam: ["7M", "6M", "5M"], + stunspore: ["7L22", "6L22", "5L22"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], + sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - tickle: ["7E", "6E", "5E"], - torment: ["7M", "6M", "5M"], + sweetscent: ["7E", "6E", "5D", "5E"], + synthesis: ["7T", "7L17", "6T", "6L17", "5T", "5L17"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - willowisp: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - yawn: ["7L16", "6L16", "5L16"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - simisear: {learnset: { - acrobatics: ["7M", "6M", "5M"], + lilligant: {learnset: { + afteryou: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M"], - dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - firepledge: ["7T"], - firepunch: ["6T", "5T"], - flameburst: ["7L1", "6L1", "5L1"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L1", "6L1", "5L1"], - gastroacid: ["6T"], - gigaimpact: ["7M", "6M", "6S0", "5M"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], - heatwave: ["6T", "5T"], - helpinghand: ["6T", "5T"], + growth: ["7L1", "6L1", "5L1"], + healbell: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "6S0", "5M"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lick: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - overheat: ["7M", "6M", "5M"], - payback: ["7M", "6M", "5M"], - poweruppunch: ["6M", "6S0"], + laserfocus: ["7T"], + leechseed: ["7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L1", "6L1", "5L1"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L50", "6L50"], + petaldance: ["7L46", "6L46", "5L46"], protect: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + quiverdance: ["7L28", "6L28", "5L28"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], + seedbomb: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], solarbeam: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + teeterdance: ["7L10", "6L10", "5L10"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - willowisp: ["7M", "6M", "5M"], - workup: ["7M", "6S0", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - panpour: {learnset: { - acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - aquaring: ["7E", "6E", "5E"], - aquatail: ["7E", "6T", "6E", "5T", "5E"], - astonish: ["7E", "6E", "5E"], + basculin: {learnset: { + agility: ["7E", "6E", "5D", "5E"], + aquajet: ["7L9", "6L13", "5L13"], + aquatail: ["7T", "7L20", "6T", "6L28", "5T", "5L28"], attract: ["7M", "6M", "5M"], - bite: ["7L19", "6L19", "5L19"], - blizzard: ["7M", "6M", "5M"], - brine: ["7L34", "6L34", "5L34"], + bite: ["7L7", "6L10", "5L10"], + bounce: ["7T", "6T", "5T"], + brine: ["7E", "6E", "5E"], + bubblebeam: ["7E", "6E", "5E"], + chipaway: ["7L11", "6L16", "5L16"], confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E"], - crunch: ["7L43", "6L43", "5L43"], + crunch: ["7L17", "6L24", "5L24"], cut: ["6M", "5M"], - dig: ["6M", "5M"], - disarmingvoice: ["7E", "6E"], dive: ["6M", "5M"], + doubleedge: ["7L26", "6L36", "5L36"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - focuspunch: ["6T"], + finalgambit: ["7L38", "6L50", "5L51"], + flail: ["7L34", "6L1", "5L46"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L13", "6L13", "5L13"], - gastroacid: ["6T"], - grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], hail: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], + headbutt: ["7L5", "6L7", "5D", "5L7"], + headsmash: ["7L46", "7E"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hydropump: ["7E", "6E", "5E", "5S0"], icebeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L4", "6L4", "5L4", "5S0"], - lick: ["7L7", "6L7", "5L7", "5S0"], - lowkick: ["7E", "6T", "6E", "5T", "5E"], - lowsweep: ["7M", "6M", "5M"], - mudsport: ["7E", "6E", "5E"], - nastyplot: ["7E", "6E", "5E"], - naturalgift: ["7L40", "6L40", "5L40"], - payback: ["7M", "6M", "5M"], - playnice: ["7L1", "6L1"], + icywind: ["7T", "6T", "5T"], + liquidation: ["7T"], + muddywater: ["7E", "6E", "5E"], + mudshot: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M"], + rage: ["7E", "6E", "5E"], raindance: ["7M", "6M", "5M"], - recycle: ["7L37", "6T", "6L37", "5T", "5L37"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["7E", "6T", "6E", "5T", "5E"], + revenge: ["7E", "6E", "5E"], round: ["7M", "6M", "5M"], - scald: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - scratch: ["7L1", "6L1", "5L1"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L30", "6L41", "5L41"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + soak: ["7L23", "6L32", "5L32"], substitute: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - thief: ["7M", "6M", "5M"], - tickle: ["7E", "6E", "5E"], - torment: ["7M", "6M", "5M"], + swift: ["7E", "6E", "5E"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L1", "6L1"], + takedown: ["7L14", "6L20", "5L20"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L42", "6L1", "5L56"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], + uproar: ["7T", "7L3", "6T", "6L4", "5T", "5L4"], waterfall: ["7M", "6M", "5M"], - watergun: ["7L10", "6L10", "5L10", "5S0"], - waterpledge: ["7T"], - waterpulse: ["6T"], - watersport: ["7L16", "6L16", "5L16"], - workup: ["7M", "5M"], + watergun: ["7L1", "6L1", "5L1"], + whirlpool: ["7E", "6E", "5E"], + zenheadbutt: ["7T", "6T", "5D", "5T"], }}, - simipour: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], + sandile: {learnset: { + aquatail: ["7T", "6T", "5T"], + assurance: ["7L16", "6L16", "5L16"], attract: ["7M", "6M", "5M"], - blizzard: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], + beatup: ["7E", "6E", "5E"], + bite: ["7L4", "6L4", "5L4"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + counter: ["7E", "6E", "5E"], + crunch: ["7L28", "6L28", "5L28"], cut: ["6M", "5M"], - dig: ["6M", "5M"], - dive: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["7L31", "6M", "6L31", "5M", "5L31"], + doubleedge: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], facade: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], + firefang: ["7E", "6E", "5E"], + focusenergy: ["7E", "6E", "5E"], + foulplay: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L1", "6L1", "5L1"], - gastroacid: ["6T"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], - hail: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], leer: ["7L1", "6L1", "5L1"], - lick: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], + meanlook: ["7E", "6E", "5E"], + mefirst: ["7E", "6E"], + mudslap: ["7L19", "6L19", "5L19"], payback: ["7M", "6M", "5M"], - poweruppunch: ["6M"], + powertrip: ["7E"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + pursuit: ["7E", "6E", "5E"], + rage: ["7L1", "6L1", "5L1"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], round: ["7M", "6M", "5M"], - scald: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + sandattack: ["7L7", "6L7", "5L7"], + sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + sandtomb: ["7L13", "6L13", "5L13"], + scaryface: ["7L34", "6L34", "5L34"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], taunt: ["7M", "6M", "5M"], thief: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - waterfall: ["7M", "6M", "5M"], - waterpledge: ["7T"], - waterpulse: ["6T"], - workup: ["7M", "5M"], - }}, - munna: {learnset: { - afteryou: ["6T", "5T"], - attract: ["7M", "6M", "5M"], - barrier: ["7E", "6E", "5E"], - batonpass: ["7E", "6E", "5E"], - calmmind: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], - chargebeam: ["7M", "6M", "5M"], - confide: ["7M", "6M"], - curse: ["7E", "6E", "5E"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["7L1", "6L1", "5L1"], - doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M"], - healbell: ["6T", "5T"], - healingwish: ["7E", "6E"], - helpinghand: ["7E", "6T", "6E", "5T", "5E"], - hiddenpower: ["7M", "6M", "5M"], - hypnosis: ["7L19", "6L19", "5L19"], - imprison: ["7L13", "6L13", "5L13"], - lightscreen: ["7M", "6M", "5M"], - luckychant: ["7L5", "6L5", "5L5"], - magiccoat: ["7E", "6T", "6E", "5T", "5E"], - moonlight: ["7L17", "6L17", "5L17"], - nightmare: ["7L29", "6L29", "5L29"], - painsplit: ["6T", "5T"], - protect: ["7M", "6M", "5M"], - psybeam: ["7L11", "6L11", "5L11"], - psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - secretpower: ["7E", "6M", "6E", "5E"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snore: ["6T", "5T"], - sonicboom: ["7E", "6E", "5E"], - storedpower: ["7L47", "6L47", "5L47"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - swift: ["7E", "6E", "5E"], - synchronoise: ["7L25", "6L25", "5L25"], - telekinesis: ["7L43", "6L43", "5M", "5L43"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], + thrash: ["7L46", "6L46", "5L46"], + thunderfang: ["7E", "6E", "5E"], + torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - wonderroom: ["6T", "5T"], - worryseed: ["6T", "5T"], - yawn: ["7L7", "6L7", "5L7"], - zenheadbutt: ["7L23", "6T", "6L23", "5T", "5L23"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - musharna: {learnset: { - afteryou: ["6T", "5T"], + krokorok: {learnset: { + aquatail: ["7T", "6T", "5T"], + assurance: ["7L16", "6L16", "5L16"], attract: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], + bite: ["7L4", "7L1", "6L1", "5L1"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - dazzlinggleam: ["7M", "6M"], - defensecurl: ["7L1", "6L1", "5L1", "5S0"], + crunch: ["7L28", "6L28", "5L28"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["7L32", "6M", "6L32", "5M", "5L32"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + foulplay: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M"], - healbell: ["6T", "5T"], - helpinghand: ["6T", "5T"], + grassknot: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypnosis: ["7L1", "6L1", "5L1", "5S0"], - lightscreen: ["7M", "6M", "5M"], - luckychant: ["7L1", "6L1", "5L1", "5S0"], - magiccoat: ["6T", "5T"], - painsplit: ["6T", "5T"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + mudslap: ["7L19", "6L19", "5L19"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - psybeam: ["7L1", "6L1", "5L1", "5S0"], - psychic: ["7M", "6M", "5M"], - psychicterrain: ["7L1"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], + rage: ["7L1", "6L1", "5L1"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - wonderroom: ["6T", "5T"], - worryseed: ["6T", "5T"], - zenheadbutt: ["6T", "5T"], - }}, - pidove: {learnset: { - aerialace: ["7M", "6M", "5M"], - aircutter: ["7L15", "6L15", "5L15", "5S0"], - airslash: ["7L29", "6L29", "5L29"], - attract: ["7M", "6M", "5M"], - bestow: ["7E", "6E", "5E"], - confide: ["7M", "6M"], - detect: ["7L22", "6L22", "5L22"], - doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - facade: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], - featherdance: ["7L36", "6L36", "5L36"], - fly: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - growl: ["7L4", "6L4", "5L4"], - gust: ["7L1", "6L1", "5L1", "5S0", "5D"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - hypnosis: ["7E", "6E", "5E", "5D"], - leer: ["7L8", "6L8", "5L8"], - luckychant: ["7E", "6E", "5E"], - morningsun: ["7E", "6E", "5E", "5D"], - nightslash: ["7E", "6E"], - pluck: ["5M"], - protect: ["7M", "6M", "5M"], - quickattack: ["7L11", "6L11", "5L11", "5S0"], - raindance: ["7M", "6M", "5M"], - razorwind: ["7L32", "6L32", "5L32"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], - round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + sandtomb: ["7L13", "6L13", "5L13"], + scaryface: ["7L36", "6L36", "5L36"], secretpower: ["6M"], - skyattack: ["7L50", "6T", "6L50", "5T", "5L50"], + shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "7E", "6M", "6E", "5E"], + sludgebomb: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - tailwind: ["7L46", "6T", "6L46", "5T", "5L46"], - taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L52", "6L52", "5L52"], + torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], toxic: ["7M", "6M", "5M"], - uproar: ["7E", "6T", "6E", "5T", "5E"], - uturn: ["7M", "6M", "5M"], - wish: ["7E", "6E", "5E"], - workup: ["7M", "5M"], + uproar: ["7T", "6T", "5T"], }}, - tranquill: {learnset: { + krookodile: {learnset: { aerialace: ["7M", "6M", "5M"], - aircutter: ["7L15", "6L15", "5L15"], - airslash: ["7L32", "6L32", "5L32"], + aquatail: ["7T", "6T", "5T"], + assurance: ["7L16", "6L16", "5L16"], attract: ["7M", "6M", "5M"], + bite: ["7L4", "7L1", "6L1", "5L1"], + block: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - detect: ["7L23", "6L23", "5L23"], + counter: ["5D"], + crunch: ["7L28", "6L28", "5D", "5L28"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["7L32", "6M", "6L32", "5M", "5L32"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - facade: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - featherdance: ["7L41", "6L41", "5L41"], - fly: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "6T", "5T"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "7L54", "6M", "6L54", "5M", "5L54"], + embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + foulplay: ["7T", "7L42", "6T", "6L42", "5T", "5L42"], frustration: ["7M", "6M", "5M"], - growl: ["7L4", "7L1", "6L1", "5L1"], - gust: ["7L1", "6L1", "5L1"], - heatwave: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - leer: ["7L8", "7L1", "6L1", "5L1"], - pluck: ["5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + meanlook: ["5D"], + mudslap: ["7L19", "6L19", "5L19"], + outrage: ["7T", "7L60", "6T", "6L1", "5T", "5L60"], + payback: ["7M", "6M", "5M"], + powertrip: ["7L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - quickattack: ["7L11", "7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], - razorwind: ["7L36", "6L36", "5L36"], + rage: ["7L1", "6L1", "5L1"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + sandtomb: ["7L13", "6L13", "5L13"], + scaryface: ["7L36", "6L36", "5L36"], secretpower: ["6M"], - skyattack: ["7L59", "6T", "6L59", "5T", "5L59"], + shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - tailwind: ["7L54", "6T", "6L54", "5T", "5L54"], - taunt: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], - workup: ["7M", "5M"], + uproar: ["7T", "6T", "5T"], }}, - unfezant: {learnset: { - aerialace: ["7M", "6M", "5M"], - aircutter: ["7L15", "6L15", "5L15"], - airslash: ["7L33", "6L33", "5L33"], + darumaka: {learnset: { attract: ["7M", "6M", "5M"], + bellydrum: ["7L30", "6L30", "5L30"], + brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - detect: ["7L23", "6L23", "5L23"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - facade: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], - featherdance: ["7L44", "6L44", "5L44"], - fly: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E"], + endeavor: ["7T", "6T", "5T"], + endure: ["7E", "6E", "5E"], + extrasensory: ["7E"], + facade: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + fireblast: ["7M", "6M", "5M"], + firefang: ["7L11", "6L11", "5L11"], + firepunch: ["7T", "7L22", "6T", "6L22", "5T", "5L22"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flamewheel: ["7E", "6E", "5E"], + flareblitz: ["7L33", "6L33", "5L33"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7E", "6E", "5E"], + focuspunch: ["7T", "7E", "6T", "6E", "5E"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - growl: ["7L4", "7L1", "6L1", "5L1"], - gust: ["7L1", "6L1", "5L1"], - heatwave: ["6T", "5T"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7E", "6E", "5E"], + headbutt: ["7L14", "6L14", "5L14"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - leer: ["7L8", "7L1", "6L1", "5L1"], - pluck: ["5M"], + incinerate: ["7L6", "6M", "6L6", "5M", "5L6"], + overheat: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - quickattack: ["7L11", "7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], - razorwind: ["7L38", "6L38", "5L38"], + rage: ["7L9", "6L9", "5L9"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L3", "6L3", "5L3"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - skyattack: ["7L66", "6T", "6L66", "5T", "5L66"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snatch: ["7T", "7E", "6T", "6E"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - tailwind: ["7L60", "6T", "6L60", "5T", "5L60"], - taunt: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + superpower: ["7T", "7L39", "6T", "6L39", "5T", "5L39"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7E", "6E", "5E"], + taunt: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + thief: ["7M", "6M", "5M"], + thrash: ["7L27", "6L27", "5L27"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], + uproar: ["7T", "7L17", "6T", "6L17", "5T", "5L17"], uturn: ["7M", "6M", "5M"], - workup: ["7M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "7L25", "6L25", "5M", "5L25"], + yawn: ["7E", "6E", "5E"], + zenheadbutt: ["7T", "6T", "5T"], }}, - blitzle: {learnset: { - agility: ["7L36", "6L36", "5L36"], + darmanitan: {learnset: { attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - charge: ["7L8", "6L8", "5L8"], - chargebeam: ["7M", "6M", "5M"], + bellydrum: ["7L30", "6L30", "6S1", "5L30", "5S0"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - discharge: ["7L32", "6L32", "5L32"], - doubleedge: ["7E", "6E", "5E"], - doublekick: ["7E", "6E", "5E"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], - facade: ["7M", "6M", "5M"], - flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], - flash: ["6M", "5M"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + fireblast: ["7M", "6M", "5M"], + firefang: ["7L11", "6L11", "5L11"], + firepunch: ["7T", "7L22", "6T", "6L22", "5T", "5L22"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flareblitz: ["7L33", "6L33", "6S1", "5L33", "5S0"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7L1", "6L35", "6S1", "5L35", "5S0"], + headbutt: ["7L14", "6L14", "5L14"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - mefirst: ["7E", "6E", "5E"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["7L6", "7L1", "6M", "6L1", "5M", "5L1"], + laserfocus: ["7T"], + overheat: ["7M", "7L54", "6M", "6L54", "5M", "5L54"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - pursuit: ["7L22", "6L22", "5L22"], - quickattack: ["7L1", "6L1", "5L1"], - rage: ["7E", "6E", "5E"], - raindance: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + rage: ["7L9", "7L1", "6L1", "5L1"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L3", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E"], - screech: ["7E", "6E", "5E"], secretpower: ["6M"], - shockwave: ["7L11", "7E", "6T", "6L11", "6E", "5L11", "5E"], - signalbeam: ["6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["7E", "6T", "6E"], - snore: ["6T", "5T"], - spark: ["7L25", "6L25", "5L25"], - stomp: ["7L29", "6L29", "5L29"], + smackdown: ["7M", "6M", "5M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwhip: ["7L4", "6L4", "5L4"], - takedown: ["7E", "6E", "5E"], - thrash: ["7L43", "6L43", "5L43"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "7L47", "6T", "6L47", "5T", "5L47"], + swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + thief: ["7M", "6M", "5M"], + thrash: ["7L27", "6L27", "6S1", "5L27", "5S0"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "7L25", "6L25", "5M", "5L25"], + zenheadbutt: ["7T", "6T", "5T"], }}, - zebstrika: {learnset: { - agility: ["7L42", "6L42", "5L42"], + maractus: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + acupressure: ["7L29", "6L29", "5L29"], + aerialace: ["7M", "6M", "5M"], + afteryou: ["7T", "7L57", "7L1", "6T", "6L1", "5T", "5L57"], attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - charge: ["7L8", "7L1", "6L1", "5L1"], - chargebeam: ["7M", "6M", "5M"], + bounce: ["7T", "7E", "6T", "6E", "5T", "5E"], + bulletseed: ["7E", "6E", "5E"], confide: ["7M", "6M"], - discharge: ["7L36", "6L36", "5L36"], + cottonguard: ["7L55", "7L1", "6L1", "5L55"], + cottonspore: ["7L18", "6L18", "5L18"], doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], + endeavor: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], - flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], + gigadrain: ["7T", "7L26", "6T", "6L26", "5T", "5L26"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7E", "6E", "5E"], + grassyterrain: ["7E", "6E"], + growth: ["7L6", "6L6", "5L6"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - iondeluge: ["7L58", "7L1", "6L1"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - overheat: ["7M", "6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + ingrain: ["7L33", "6L33", "5L33"], + knockoff: ["7T", "6T", "5T"], + leechseed: ["7E", "6E", "5D", "5E"], + megadrain: ["7L13", "6L13", "5L13"], + naturepower: ["7M", "6M"], + needlearm: ["7L22", "6L22", "5L22"], + peck: ["7L1", "6L1", "5L1"], + petalblizzard: ["7L48", "6L48"], + petaldance: ["7L38", "6L38", "5L38"], + pinmissile: ["7L10", "6L10", "5D", "5L10"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - pursuit: ["7L22", "6L22", "5L22"], - quickattack: ["7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shockwave: ["7L11", "6T", "6L11", "5L11"], - signalbeam: ["6T", "5T"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T"], - snore: ["6T", "5T"], - spark: ["7L25", "6L25", "5L25"], - stomp: ["7L31", "6L31", "5L31"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + spikes: ["7E", "6E", "5D", "5E"], + spikyshield: ["7L1", "6L1"], substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L42", "6L42", "5L42"], + sunnyday: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], swagger: ["7M", "6M", "5M"], - tailwhip: ["7L4", "7L1", "6L1", "5L1"], - thrash: ["7L53", "6L53", "5L53"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "7L15", "7L1", "6M", "6L1", "5M", "5L1"], + sweetscent: ["7L3", "6L3", "5L3"], + synthesis: ["7T", "7L15", "6T", "6L15", "5T", "5L15"], + throatchop: ["7T"], toxic: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + uproar: ["7T", "6T", "5T"], + woodhammer: ["7E", "6E", "5E"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - roggenrola: {learnset: { + dwebble: {learnset: { + aerialace: ["7M", "6M", "5M"], attract: ["7M", "6M", "5M"], - autotomize: ["7E", "6E", "5E"], - block: ["6T", "5T"], + block: ["7T", "7E", "6T", "6E", "5T", "5E"], + bugbite: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], curse: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], earthquake: ["7M", "6M", "5M"], - explosion: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + endure: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + feintattack: ["7L13", "6L13", "5L13"], + flail: ["7L41", "6L41", "5L41"], frustration: ["7M", "6M", "5M"], - gravity: ["7E", "6T", "6E", "5T", "5E"], - harden: ["7L4", "6L4", "5L4"], - headbutt: ["7L10", "6L10", "5L10"], - heavyslam: ["7E", "6E", "5E"], + furycutter: ["7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - irondefense: ["7L20", "6T", "6L20", "5T", "5L20"], - lockon: ["7E", "6E", "5E"], - magnitude: ["7E", "6E", "5E"], - mudslap: ["7L17", "6L17", "5L17"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "7E", "6T", "6E", "5T", "5E"], + knockoff: ["7T", "6T", "5T"], naturepower: ["7M", "6M"], + nightslash: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7L14", "6L14", "5L14"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + rockblast: ["7L5", "6L5", "5L5"], + rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "7E", "6M", "6E", "5M", "5E"], + rocktomb: ["7M", "6M", "5M"], + rockwrecker: ["7L43", "6L43", "5L43"], + rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "6L7", "5L7"], - sandstorm: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + sandattack: ["7L11", "6L11", "5L11"], + sandstorm: ["7M", "6M", "5M"], + sandtomb: ["7E", "6E", "5E"], secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shellsmash: ["7L37", "6L37", "5L37"], + slash: ["7L31", "6L31", "5L31"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], - snore: ["6T", "5T"], - stealthrock: ["7L30", "6T", "6L30", "5T", "5L30"], - stoneedge: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + smackdown: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spikes: ["7E", "6E", "5E"], + stealthrock: ["7T", "7L24", "6T", "6L24", "5T", "5L24"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - takedown: ["7E", "6E", "5E"], + swordsdance: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], wideguard: ["7E", "6E"], + withdraw: ["7L7", "6L7", "5L7"], + xscissor: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], }}, - boldore: {learnset: { + crustle: {learnset: { + aerialace: ["7M", "6M", "5M"], attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], + block: ["7T", "6T", "5T"], + bugbite: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - curse: ["5D"], + counter: ["5D"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], earthquake: ["7M", "6M", "5M"], - explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + feintattack: ["7L13", "6L13", "5L13"], + flail: ["7L50", "6L50", "5L50"], frustration: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - harden: ["7L4", "7L1", "6L1", "5L1"], - headbutt: ["7L10", "7L1", "6L1", "5L1"], - heavyslam: ["5D"], + gigaimpact: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - irondefense: ["7L20", "6T", "6L20", "5T", "5L20"], - mudslap: ["7L17", "6L17", "5L17"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], naturepower: ["7M", "6M"], - powergem: ["7L1", "6L25", "5L25"], + nightslash: ["5D"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7L14", "6L14", "5L14"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + rockblast: ["7L5", "7L1", "6L1", "5L1"], + rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + rockslide: ["7M", "7L29", "6M", "6L29", "5D", "5M", "5L29"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], + rockwrecker: ["7L55", "6L55", "5L55"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L1"], - sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + sandattack: ["7L11", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shellsmash: ["7L43", "7L1", "6L1", "5L1"], + slash: ["7L31", "6L31", "5L31"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "5D"], - snore: ["6T", "5T"], - stealthrock: ["7L36", "6T", "6L36", "5T", "5L36"], - stoneedge: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + smackdown: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["7T", "7L24", "6T", "6L24", "5T", "5L24"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], + swordsdance: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + withdraw: ["7L7", "7L1", "6L1", "5L1"], + xscissor: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], }}, - gigalith: {learnset: { + scraggy: {learnset: { + acidspray: ["7E"], + amnesia: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bulldoze: ["7M", "6M", "5M"], + brickbreak: ["7M", "7L23", "6M", "6L20", "5M", "5L20"], + bulkup: ["7M", "6M", "5M"], + chipaway: ["7L27", "6L27", "5L27"], confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], + crunch: ["7L38", "6L38", "5L38"], + darkpulse: ["7M", "6M", "5T"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], - explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], - facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragondance: ["7E", "6E", "5E"], + dragonpulse: ["7T", "6T", "5T"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + dualchop: ["7T", "6T", "5T"], + facade: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + fakeout: ["7E", "6E", "5D", "5E"], + feintattack: ["7L9", "7E", "6L9", "6E", "5L9", "5E"], + firepunch: ["7T", "7E", "6T", "6E", "5T", "5E"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "7L48", "6T", "6L48", "5L49"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - harden: ["7L4", "7L1", "6L1", "5L1"], - headbutt: ["7L10", "7L1", "6L1", "5L1"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L1", "6L12", "5L12", "5S0"], + headsmash: ["7L50", "6L50", "5L53"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - irondefense: ["7L20", "6T", "6L20", "5T", "5L20"], - ironhead: ["6T", "5T"], - mudslap: ["7L17", "6L17", "5L17"], - naturepower: ["7M", "6M"], - powergem: ["7L1", "6L25", "5L25"], + highjumpkick: ["7L31", "6L31", "5L31", "5S0"], + icepunch: ["7T", "7E", "6T", "6E", "5T", "5E"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1", "5S0"], + lowkick: ["7T", "7L16", "6T", "6L1", "5D", "5T", "5L1", "5S0"], + lowsweep: ["7M", "6M", "5M"], + payback: ["7M", "7L20", "6M", "6L23", "5M", "5L23"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["7E", "6M"], protect: ["7M", "6M", "5M"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7L14", "6L14", "5L14"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7L45", "6L45", "5L45"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L1"], - sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + sandattack: ["7L5", "6L5", "5L5"], + scaryface: ["7L34", "6L34", "5L34"], secretpower: ["6M"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stealthrock: ["7L36", "6T", "6L36", "5T", "5L36"], - stoneedge: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["7T", "6T", "5T"], + swagger: ["7M", "7L12", "6M", "6L16", "5M", "5L16"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "7E", "6T", "6E", "5T", "5E"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - woobat: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M"], - afteryou: ["6T", "5T"], - aircutter: ["7L21", "6L21", "5L21"], - airslash: ["7L32", "6L32", "5L32"], - amnesia: ["7L29", "6L29", "5L29"], - assurance: ["7L12", "6L12", "5L12"], - attract: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - calmmind: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - captivate: ["7E", "6E"], - chargebeam: ["7M", "6M", "5M"], - charm: ["7E", "6E", "5E"], + scrafty: {learnset: { + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "7L23", "6M", "6L20", "5M", "5L20"], + bulkup: ["7M", "6M", "5M"], + chipaway: ["7L27", "6L27", "5L27"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1"], + crunch: ["7L38", "6L38", "5L38"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - endeavor: ["7L47", "6T", "6L47", "5T", "5L47"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - faketears: ["7E", "6E", "5E"], - flash: ["6M", "5M"], - flatter: ["7E", "6E", "5E"], - fly: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "6T", "5T"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T", "5S0"], + dualchop: ["7T", "6T", "5T"], + facade: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + feintattack: ["7L9", "7L1", "6L1", "5L1"], + firepunch: ["7T", "6T", "5T", "5S0"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "7L58", "6T", "6L58", "5L58"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L36", "6L36", "5L36"], - gigadrain: ["6T", "5T"], - gust: ["7L8", "6L8", "5L8"], - gyroball: ["7M", "6M", "5M"], - heartstamp: ["7L15", "6L15", "5L15"], - heatwave: ["6T", "5T"], - helpinghand: ["7E", "6T", "6E", "5T", "5E"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L1", "6L12", "5L12"], + headsmash: ["7L65", "6L65", "5L65"], hiddenpower: ["7M", "6M", "5M"], - imprison: ["7L19", "6L19", "5L19"], - knockoff: ["7E", "6T", "6E", "5T", "5E"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - odorsleuth: ["7L4", "6L4", "5L4"], - pluck: ["5M"], + highjumpkick: ["7L31", "6L31", "5L31"], + hyperbeam: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "7L16", "6T", "6L1", "5T", "5L1"], + lowsweep: ["7M", "6M", "5M"], + outrage: ["7T", "6T", "5T"], + payback: ["7M", "7L20", "6M", "6L23", "5M", "5L23", "5S0"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - psychoshift: ["7E", "6E"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7L51", "6L51", "5L51"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + sandattack: ["7L5", "7L1", "6L1", "5L1"], + scaryface: ["7L34", "6L34", "5L34"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - storedpower: ["7E", "6E", "5E"], - substitute: ["7M", "6M", "5M"], - superfang: ["6T", "5T"], - supersonic: ["7E", "6E", "5E"], - swagger: ["7M", "6M", "5M"], - synchronoise: ["7E", "6E", "5E"], - tailwind: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "5S0"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["7T", "6T", "5T"], + swagger: ["7M", "7L12", "6M", "6L16", "5M", "5L16"], taunt: ["7M", "6M", "5M"], - telekinesis: ["5M"], thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5T"], torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], - venomdrench: ["7E", "6E"], - zenheadbutt: ["6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - swoobat: {learnset: { - acrobatics: ["7M", "6M", "5M"], + sigilyph: {learnset: { aerialace: ["7M", "6M", "5M"], - afteryou: ["6T", "5T"], aircutter: ["7L21", "6L21", "5L21"], - airslash: ["7L32", "6L32", "5L32"], - amnesia: ["7L29", "6L29", "5L29"], - assurance: ["7L12", "7L1", "6L1", "5L1"], - attract: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - calmmind: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + airslash: ["7L41", "6L41", "5L41"], + ancientpower: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1"], + cosmicpower: ["7L48", "6L48", "5L48"], + darkpulse: ["7M", "6M", "5T"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - endeavor: ["7L47", "6T", "6L47", "5T", "5L47"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L36", "6L36", "5L36"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], - gust: ["7L8", "7L1", "6L1", "5L1"], - gyroball: ["7M", "6M", "5M"], - heartstamp: ["7L15", "6L15", "5L15"], - heatwave: ["6T", "5T"], - helpinghand: ["6T", "5T"], + futuresight: ["7E", "6E"], + gravity: ["7T", "7L38", "6T", "6L38", "5T", "5L38"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["7T", "6T", "5D", "5T"], hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - imprison: ["7L19", "6L19", "5L19"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - odorsleuth: ["7L4", "7L1", "6L1", "5L1"], + hypnosis: ["7L4", "6L4", "5D", "5L4"], + icebeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], + lightscreen: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + magiccoat: ["7T", "6T", "5T"], + magicroom: ["7T", "6T", "5T"], + miracleeye: ["7L1", "6L1", "5L1"], + mirrormove: ["7L34", "6L34", "5L34"], pluck: ["5M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + psybeam: ["7L18", "6L18", "5L18"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + psychoshift: ["7E", "6E", "5E"], psychup: ["7M", "6M", "5M"], psyshock: ["7M", "6M", "5M"], + psywave: ["7L8", "6L8", "5L8"], raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], + reflect: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], - skyattack: ["6T", "5T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E"], + skyattack: ["7T", "7L50", "6T", "6L50", "5T", "5L51"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + storedpower: ["7E", "6E", "5D", "5E"], substitute: ["7M", "6M", "5M"], - superfang: ["6T", "5T"], swagger: ["7M", "6M", "5M"], - tailwind: ["6T", "5T"], - taunt: ["7M", "6M", "5M"], - telekinesis: ["5M"], + synchronoise: ["7L31", "6L31", "5L31"], + tailwind: ["7T", "7L11", "6T", "6L11", "5T", "5L11"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M"], thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + whirlwind: ["7L14", "6L14", "5L14"], + zenheadbutt: ["7T", "6T", "5T"], }}, - drilbur: {learnset: { - aerialace: ["7M", "6M", "5M"], + yamask: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T", "7E", "6E"], + astonish: ["7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - crushclaw: ["7E", "6E", "5E"], - cut: ["6M", "5M"], - dig: ["7L19", "6M", "6L19", "5M", "5L19"], + craftyshield: ["7E"], + curse: ["7L29", "6L29", "5L29"], + darkpulse: ["7M", "6M", "5T"], + destinybond: ["7L49", "6L49", "5L49"], + disable: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], doubleteam: ["7M", "6M", "5M"], - drillrun: ["7L43", "6T", "6L43", "5T", "5L43"], - earthpower: ["7E", "6T", "6E", "5T", "5E"], - earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fissure: ["7L47", "6L47", "5L47"], - fling: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L12", "6L12", "5L12"], + grudge: ["7L41", "6L41", "5L41"], + guardsplit: ["7L33", "6L33", "5L33"], + haze: ["7L9", "6L9", "5L9"], + healblock: ["7E", "6E", "5E"], + hex: ["7L17", "6L17", "5L17"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L22", "6M", "6L22", "5M", "5L22"], - irondefense: ["7E", "6T", "6E", "5T", "5E"], - metalclaw: ["7L15", "6L15", "5L15"], - metalsound: ["7E", "6E", "5E", "5D"], - mudslap: ["7L8", "6L8", "5L8"], - mudsport: ["7L1", "6L1", "5L1"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - rapidspin: ["7L5", "7E", "6L5", "6E", "5L5", "5E", "5D"], + imprison: ["7E", "6E", "5E"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + magiccoat: ["7T", "6T", "5T"], + meanlook: ["7L45", "6L45", "5L45"], + memento: ["7E", "6E", "5E"], + nastyplot: ["7E", "6E", "5E"], + nightmare: ["7E", "6E", "5E"], + nightshade: ["7L13", "6L13", "5L13"], + ominouswind: ["7L25", "6L25", "5L25"], + painsplit: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], + powersplit: ["7L33", "6L33", "5L33"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockclimb: ["7E", "6E", "5E", "5D"], - rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], - scratch: ["7L1", "6L1", "5L1"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - skullbash: ["7E", "6E", "5E"], - slash: ["7L26", "6L26", "5L26"], + shadowball: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + shockwave: ["7T", "6T"], + skillswap: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - strength: ["6M", "5M"], - submission: ["7E", "6E", "5E"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - xscissor: ["7M", "6M", "5M"], + toxicspikes: ["7E", "6E"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T"], }}, - excadrill: {learnset: { - aerialace: ["7M", "6M", "5M"], + cofagrigus: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], + astonish: ["7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - dig: ["7L19", "6M", "6L19", "5M", "5L19"], + curse: ["7L29", "6L29", "5L29"], + darkpulse: ["7M", "7S0", "6M", "5T"], + destinybond: ["7L57", "6L57", "5L57"], + disable: ["7L5", "7L1", "6L1", "5L1"], doubleteam: ["7M", "6M", "5M"], - drillrun: ["7L55", "6T", "6L55", "5T", "5L55"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fissure: ["7L62", "6L62", "5L62"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L12", "6L12", "5L12"], gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + grudge: ["7L45", "6L45", "5L45"], + guardsplit: ["7L33", "6L33", "5L33"], + haze: ["7L9", "7L1", "6L1", "5L1"], + hex: ["7L17", "6L17", "5L17"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L22", "6M", "6L22", "5M", "5L22"], - horndrill: ["7L1", "6L31", "5L31"], hyperbeam: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T"], - magnetrise: ["6T", "5T"], - metalclaw: ["7L15", "6L15", "5L15"], - mudslap: ["7L8", "7L1", "6L1", "5L1"], - mudsport: ["7L1", "6L1", "5L1"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - rapidspin: ["7L5", "7L1", "6L1", "5L1"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + magiccoat: ["7T", "6T", "5T"], + meanlook: ["7L51", "6L51", "5L51"], + nightshade: ["7L13", "6L13", "5L13"], + ominouswind: ["7L25", "6L25", "5L25"], + painsplit: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], + powersplit: ["7L33", "7S0", "6L33", "5L33"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rototiller: ["7L1", "6L1"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - scratch: ["7L1", "6L1", "5L1"], + safeguard: ["7M", "6M", "5M"], + scaryface: ["7L1", "6L34", "5L34"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L26", "6L26", "5L26"], + shadowball: ["7M", "7L39", "7S0", "6M", "6L39", "5M", "5L39"], + shockwave: ["7T", "6T"], + skillswap: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - smartstrike: ["7M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - strength: ["6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - xscissor: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "7L21", "7S0", "6M", "6L21", "5M", "5L21"], + wonderroom: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T"], }}, - audino: {learnset: { - afteryou: ["7L41", "6T", "6L40", "5T", "5L40"], - amnesia: ["7E", "6E", "5E"], - attract: ["7M", "7L21", "6M", "6L15", "5M", "5L15"], - babydolleyes: ["7L5", "6L5"], - bestow: ["7E", "6E", "5E"], + tirtouga: {learnset: { + ancientpower: ["7L18", "6L18", "5L18"], + aquajet: ["7L15", "6L15", "5L15", "5S0"], + aquatail: ["7T", "7L41", "6T", "6L41", "5T", "5L41"], + attract: ["7M", "6M", "5M"], + bide: ["7L1", "7E", "6L1", "6E", "5L1", "5E"], + bite: ["7L8", "6L8", "5L8", "5S0"], blizzard: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bodyslam: ["7E", "6E", "5E", "5S0"], + brine: ["7L28", "6L28", "5L28"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], + crunch: ["7L21", "6L21", "5L21"], + curse: ["7L35", "6L35", "5L35"], dig: ["6M", "5M"], - disarmingvoice: ["7L13", "6L13"], - doubleedge: ["7L49", "6L49", "5L50"], - doubleslap: ["7L17", "6L10", "5L10", "5S0"], + dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - drainingkiss: ["7E", "6E"], - drainpunch: ["6T", "5T"], - dreameater: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - encore: ["7E", "6E", "5E", "5D"], - entrainment: ["7L29", "6L25", "5L25"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - flamethrower: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - fling: ["7M", "6M", "5M"], - focuspunch: ["6T"], + flail: ["7E", "6E", "5D", "5E"], frustration: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - growl: ["7L1", "6L1", "5L1"], - healbell: ["7E", "6T", "6E", "5T", "5E"], - healingwish: ["7E", "6E", "5E"], - healpulse: ["7L37", "6L35", "6S2", "5L35", "5S0", "5S1"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "5S1", "5D"], + guardswap: ["7E", "6E"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L53", "7L1", "6T", "5T"], + hydropump: ["7L50", "6L50", "5L51"], icebeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - lastresort: ["7L57", "7L1", "6T", "6L1", "5T", "5L55"], - lightscreen: ["7M", "6M", "5M"], - lowkick: ["6T", "5T"], - luckychant: ["7E", "6E", "5E"], - magiccoat: ["6T", "5T"], - mistyterrain: ["7L1", "6L1"], - painsplit: ["6T", "5T"], - playnice: ["7L1", "6L1"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], - present: ["5S1"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - refresh: ["7L9", "6L5", "5L5", "5S0", "5S1"], + icywind: ["7T", "6T", "5T"], + irondefense: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "7E", "6T", "6E", "5E"], + liquidation: ["7T", "7E"], + protect: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "5S0"], + raindance: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + rocksmash: ["6M", "5M"], + rockthrow: ["7E", "6E", "5E"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L5", "6L5", "5D", "5L5"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - secretpower: ["7L25", "6M", "6L20", "5L20"], - shadowball: ["7M", "6M", "5M"], - signalbeam: ["6T", "5T"], - simplebeam: ["7L45", "6L45", "6S2", "5L45"], - skillswap: ["6T", "5T"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shellsmash: ["7L38", "6L38", "5L38"], + slam: ["7E", "6E", "5E"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - sweetkiss: ["7E", "6E", "5E"], - takedown: ["7L33", "6L30", "5L30"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "6S2", "5M"], - thunderpunch: ["6T", "5T"], - thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trickroom: ["7M", "6M", "6S2", "5M"], - uproar: ["6T", "5T"], - wildcharge: ["7M", "6M", "5M"], - wish: ["7E", "6E", "5E"], - workup: ["7M", "5M"], - yawn: ["7E", "6E", "5E", "5D"], - zenheadbutt: ["6T", "5T"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["7T", "7E", "6T", "6E", "5E"], + whirlpool: ["7E", "6E", "5E"], + wideguard: ["7L25", "6L25", "5L25"], + withdraw: ["7L1", "6L1", "5L1"], + zenheadbutt: ["7T", "6T"], }}, - timburr: {learnset: { + carracosta: {learnset: { + ancientpower: ["7L18", "6L18", "5L18"], + aquajet: ["7L15", "6L15", "5L15"], + aquatail: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], attract: ["7M", "6M", "5M"], - bide: ["7L8", "6L8", "5L8"], - block: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulkup: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - chipaway: ["7L24", "6L24", "5L24"], - cometpunch: ["7E", "6E", "5E"], + bide: ["7L1", "6L1", "5L1"], + bite: ["7L8", "6L8", "5L8"], + blizzard: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + brine: ["7L28", "6L28", "5L28"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E"], - detect: ["7E", "6E", "5E"], + crunch: ["7L21", "6L21", "5L21"], + curse: ["7L35", "6L35", "5L35"], dig: ["6M", "5M"], + dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["7E", "6T", "6E", "5T", "5E"], - dynamicpunch: ["7L34", "6L34", "5L34"], - endure: ["7E", "6E", "5E"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L4", "6L4", "5L4"], - focuspunch: ["7L46", "6T", "6L46", "5L46"], - forcepalm: ["7E", "6E", "5E"], - foresight: ["7E", "6E", "5E"], frustration: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - hammerarm: ["7L40", "6L40", "5L40"], - helpinghand: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lowkick: ["7L12", "6T", "6L12", "5T", "5L12"], - lowsweep: ["7M", "6M", "5M"], - machpunch: ["7E", "6E", "5E"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + hydropump: ["7L61", "6L61", "5L61"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T"], + liquidation: ["7T"], + lowkick: ["7T", "6T", "5T"], + protect: ["7M", "7L11", "6M", "6L11", "5M", "5L11"], + raindance: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7E", "6E", "5E"], - rockslide: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], rocksmash: ["6M", "5M"], - rockthrow: ["7L16", "6L16", "5L16"], rocktomb: ["7M", "6M", "5M"], + rollout: ["7L5", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], - scaryface: ["7L37", "6L37", "5L37"], + sandstorm: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M"], + shellsmash: ["7L40", "6L40", "5L40"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "6M", "5M"], - smellingsalts: ["7E", "6E", "5E"], - snore: ["6T", "5T"], - stoneedge: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + smackdown: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["7L49", "6T", "6L49", "5T", "5L49"], + superpower: ["7T", "6T", "5T"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], toxic: ["7M", "6M", "5M"], - wakeupslap: ["7L20", "6L20", "5L20"], - wideguard: ["7E", "6E", "5E"], - workup: ["7M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["7T", "6T"], + wideguard: ["7L25", "6L25", "5L25"], + withdraw: ["7L1", "6L1", "5L1"], + zenheadbutt: ["7T", "6T"], }}, - gurdurr: {learnset: { + archen: {learnset: { + acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + aerialace: ["7M", "6M", "5M"], + agility: ["7L21", "6L21", "5L21"], + allyswitch: ["7T", "7E", "6E"], + ancientpower: ["7L18", "6L18", "5L18"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - bide: ["7L8", "7L1", "6L1", "5L1"], - block: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulkup: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - chipaway: ["7L24", "6L24", "5L24"], + bite: ["7E", "6E", "5E"], + bounce: ["7T", "6T", "5T"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], + crunch: ["7L35", "6L35", "5L35"], + cut: ["6M", "5M"], + defog: ["7T", "7E", "6E", "5E"], dig: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T", "5D"], - dynamicpunch: ["7L37", "6L37", "5L37"], + doubleteam: ["7M", "7L8", "6M", "6L8", "5M", "5L8", "5S0"], + dragonbreath: ["7L31", "6L31", "5L31"], + dragonclaw: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + dragonpulse: ["7T", "7E", "6T", "6E", "5T", "5E"], + earthpower: ["7T", "7E", "6T", "6E", "5T", "5E"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["7T", "7L38", "6T", "6L38", "5T", "5L38"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L4", "7L1", "6L1", "5L1"], - focuspunch: ["7L53", "6T", "6L53", "5L53"], frustration: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - hammerarm: ["7L45", "6L45", "5L45"], - helpinghand: ["6T", "5T"], + headsmash: ["7E", "6E", "5E", "5S0"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - knockoff: ["6T", "5T"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "7E", "6T", "6E", "5E"], leer: ["7L1", "6L1", "5L1"], - lowkick: ["7L12", "6T", "6L12", "5T", "5L12", "5D"], - lowsweep: ["7M", "6M", "5M"], - machpunch: ["5D"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], + pluck: ["7L15", "6L15", "5M", "5L15"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L25", "6L25", "5L25"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], rocksmash: ["6M", "5M"], - rockthrow: ["7L16", "6L16", "5L16"], + rockthrow: ["7L5", "6L5", "5L5"], rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - scaryface: ["7L41", "6L41", "5L41"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L11", "6L11", "5L11", "5S0"], secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + stoneedge: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["7L57", "6T", "6L57", "5T", "5L57"], swagger: ["7M", "6M", "5M"], + switcheroo: ["7E", "6E"], + tailwind: ["7T", "6T", "5T"], taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + thrash: ["7L50", "6L50", "5L51"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - wakeupslap: ["7L20", "6L20", "5L20"], - workup: ["7M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + wingattack: ["7L1", "6L1", "5L1", "5S0"], + zenheadbutt: ["7T", "6T"], }}, - conkeldurr: {learnset: { + archeops: {learnset: { + acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + aerialace: ["7M", "6M", "5M"], + agility: ["7L21", "6L21", "5L21"], + allyswitch: ["7T"], + ancientpower: ["7L18", "6L18", "5L18"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - bide: ["7L8", "7L1", "6L1", "5L1"], - block: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulkup: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + bounce: ["7T", "6T", "5T"], bulldoze: ["7M", "6M", "5M"], - chipaway: ["7L24", "6L24", "5L24"], confide: ["7M", "6M"], + crunch: ["7L35", "6L35", "5L35"], + cut: ["6M", "5M"], + defog: ["7T"], dig: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - dynamicpunch: ["7L37", "6L37", "5L37"], + doubleteam: ["7M", "7L8", "6M", "6L8", "5M", "5L8"], + dragonbreath: ["7L31", "6L31", "5L31"], + dragonclaw: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + dragonpulse: ["7T", "6T", "5T"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], earthquake: ["7M", "6M", "5M"], + endeavor: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L4", "7L1", "6L1", "5L1"], - focuspunch: ["7L53", "6T", "6L53", "5L53"], frustration: ["7M", "6M", "5M"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - hammerarm: ["7L45", "6L45", "5L45"], - helpinghand: ["6T", "5T"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - knockoff: ["6T", "5T"], + irondefense: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T"], leer: ["7L1", "6L1", "5L1"], - lowkick: ["7L12", "6T", "6L12", "5T", "5L12"], - lowsweep: ["7M", "6M", "5M"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], + outrage: ["7T", "6T", "5T"], + pluck: ["7L15", "6L15", "5M", "5L15"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L25", "6L25", "5L25"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], rocksmash: ["6M", "5M"], - rockthrow: ["7L16", "6L16", "5L16"], + rockthrow: ["7L5", "7L1", "6L1", "5L1"], rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - scaryface: ["7L41", "6L41", "5L41"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L11", "6L11", "5L11"], secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + skyattack: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["7L57", "6T", "6L57", "5T", "5L57"], swagger: ["7M", "6M", "5M"], + tailwind: ["7T", "6T", "5T"], taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + thrash: ["7L61", "6L61", "5L61"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - wakeupslap: ["7L20", "6L20", "5L20"], - workup: ["7M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + wingattack: ["7L1", "6L1", "5L1"], + zenheadbutt: ["7T", "6T"], }}, - tympole: {learnset: { - afteryou: ["7E", "6T", "6E"], - aquaring: ["7L20", "6L20", "5L20"], + trubbish: {learnset: { + acidspray: ["7L12", "6L12", "5L12"], + amnesia: ["7L40", "6L40", "5L40"], attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - bubble: ["7L1", "6L1", "5L1"], - bubblebeam: ["7L12", "6L12", "5L12"], + autotomize: ["7E"], + belch: ["7L42", "6L42"], + clearsmog: ["7L34", "6L34", "5L34"], confide: ["7M", "6M"], + curse: ["7E", "6E", "5E"], + darkpulse: ["7M", "6M", "5T"], + doubleslap: ["7L14", "6L14", "5L14"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["7E", "6T", "6E", "5T", "5E", "5D"], - echoedvoice: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], - endeavor: ["6T", "5T"], + drainpunch: ["7T", "6T", "5T"], + explosion: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], facade: ["7M", "6M", "5M"], - flail: ["7L34", "6L34", "5L34"], frustration: ["7M", "6M", "5M"], - growl: ["7L1", "6L1", "5L1"], - hail: ["7M", "6M", "5M"], + gigadrain: ["7T", "6T", "5T"], + gunkshot: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], + haze: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L42", "6L42", "5L42"], - hypervoice: ["7L45", "6T", "6L45", "5T", "5L45"], - icywind: ["6T", "5T"], infestation: ["7M", "6M"], - mist: ["7E", "6E", "5E"], - mudbomb: ["7E", "6E", "5E"], - muddywater: ["7L27", "6L27", "5L27"], - mudshot: ["7L16", "6L16", "5L16"], mudsport: ["7E", "6E", "5E"], + painsplit: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], + poisongas: ["7L1", "6L1", "5L1"], + pound: ["7L1", "6L1", "5L1"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - refresh: ["7E", "6E", "5E"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - round: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "5D"], - scald: ["7M", "6M", "5M"], - secretpower: ["6M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - snore: ["7E", "6T", "6E", "5T", "5E"], - substitute: ["7M", "6M", "5M"], - supersonic: ["7L5", "6L5", "5L5"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["7L23", "6T", "6L23", "5T", "5L23"], - waterpulse: ["7E", "6T", "6E", "5E", "5D"], - }}, - palpitoad: {learnset: { - afteryou: ["6T"], - aquaring: ["7L20", "6L20", "5L20"], - attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - bubble: ["7L1", "6L1", "5L1"], - bubblebeam: ["7L12", "6L12", "5L12"], - bulldoze: ["7M", "6M", "5M"], - confide: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - echoedvoice: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], - endeavor: ["6T", "5T"], - facade: ["7M", "6M", "5M"], - flail: ["7L37", "6L37", "5L37"], - focuspunch: ["6T"], - frustration: ["7M", "6M", "5M"], - gastroacid: ["6T", "5T"], - growl: ["7L1", "6L1", "5L1"], - hail: ["7M", "6M", "5M"], - hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L47", "6L47", "5L47"], - hypervoice: ["7L51", "6T", "6L51", "5T", "5L51"], - icywind: ["6T", "5T"], - infestation: ["7M", "6M"], - muddywater: ["7L28", "6L28", "5L28"], - mudshot: ["7L16", "6L16", "5L16"], - protect: ["7M", "6M", "5M"], - raindance: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "7L3", "6T", "6L3", "5T", "5L3"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - round: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1"], - scald: ["7M", "6M", "5M"], + rockblast: ["7E", "6E", "5E"], + rollout: ["7E", "6E", "5E"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E"], secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + selfdestruct: ["7E", "6E", "5E"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], + sludge: ["7L18", "6L18", "5L18"], + sludgebomb: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + spikes: ["7E", "6E", "5E"], + spite: ["7T", "6T", "5T"], + stockpile: ["7L23", "6L23", "5L23"], substitute: ["7M", "6M", "5M"], - supersonic: ["7L5", "7L1", "6L1", "5L1"], - surf: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["7L23", "6T", "6L23", "5T", "5L23"], - waterpulse: ["6T"], + swallow: ["7L23", "6L23", "5L23"], + takedown: ["7L25", "6L25", "5L25"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxicspikes: ["7L7", "6L7", "5L7"], + venoshock: ["7M", "6M", "5M"], }}, - seismitoad: {learnset: { - acid: ["7L1", "6L36", "5L36"], - afteryou: ["6T"], - aquaring: ["7L20", "6L20", "5L20"], + garbodor: {learnset: { + acidspray: ["7L12", "6L12", "5L12"], + amnesia: ["7L46", "6L46", "5L46"], attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - bubble: ["7L1", "6L1", "5L1"], - bubblebeam: ["7L12", "6L12", "5L12"], - bulldoze: ["7M", "6M", "5M"], + belch: ["7L49", "6L49"], + bodyslam: ["7L25", "6L25", "5L25"], + clearsmog: ["7L34", "6L34", "5L34"], confide: ["7M", "6M"], - dig: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + doubleslap: ["7L14", "6L14", "5L14"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["7L44", "6T", "6L44", "5T", "5L44"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], - echoedvoice: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - endeavor: ["6T", "5T"], + drainpunch: ["7T", "6T", "5T"], + explosion: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], facade: ["7M", "6M", "5M"], - flail: ["7L39", "6L39", "5L39"], fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], frustration: ["7M", "6M", "5M"], - gastroacid: ["6T", "5T"], + gigadrain: ["7T", "6T", "5T"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growl: ["7L1", "6L1", "5L1"], - hail: ["7M", "6M", "5M"], + gunkshot: ["7T", "7L54", "6T", "6L54", "5T", "5L54"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L53", "6L53", "5L53"], hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L59", "6T", "6L59", "5T", "5L59"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T"], infestation: ["7M", "6M"], - knockoff: ["6T", "5T"], - lowkick: ["6T", "5T"], - muddywater: ["7L28", "6L28", "5L28"], - mudshot: ["7L16", "6L16", "5L16"], + painsplit: ["7T", "6T", "5T"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - poweruppunch: ["6M"], + poisongas: ["7L1", "6L1", "5L1"], + pound: ["7L1", "6L1", "5L1"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "7L3", "7L1", "6T", "6L1", "5T", "5L1"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - round: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1"], - scald: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], + sludge: ["7L18", "6L18", "5L18"], + sludgebomb: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - strength: ["6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["7T", "6T", "5T"], + stockpile: ["7L23", "6L23", "5L23"], + stompingtantrum: ["7T"], substitute: ["7M", "6M", "5M"], - supersonic: ["7L5", "7L1", "6L1", "5L1"], - surf: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["7L23", "6T", "6L23", "5T", "5L23"], + swallow: ["7L23", "6L23", "5L23"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + toxic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + toxicspikes: ["7L7", "7L1", "6L1", "5L1"], venoshock: ["7M", "6M", "5M"], - waterpulse: ["6T"], }}, - throh: {learnset: { + zorua: {learnset: { + aerialace: ["7M", "6M", "5M"], + agility: ["7L37", "6L37", "5L37"], attract: ["7M", "6M", "5M"], - bide: ["7L1", "6L5", "5L5"], - bind: ["7L1", "6T", "6L1", "5T", "5L1", "5D"], - block: ["6T", "5T"], - bodyslam: ["7L21", "6L29", "5L29"], - brickbreak: ["7M", "6M", "5M"], - bulkup: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], - bulldoze: ["7M", "6M", "5M"], - circlethrow: ["7L29", "6L37", "5L37"], + bounce: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], confide: ["7M", "6M"], + copycat: ["7E", "6E"], + counter: ["7E", "6E", "5E"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E"], + detect: ["7E", "6E", "5E"], dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M"], - endure: ["7L33", "6L41", "5L41"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + extrasensory: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], + faketears: ["7L9", "6L9", "5L9"], + feintattack: ["7L17", "6L17", "5L17"], fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L1", "6L9", "5L9"], - focuspunch: ["6T"], + foulplay: ["7T", "7L29", "6T", "6L29", "5T", "5L29"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], grassknot: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - icepunch: ["6T", "5T", "5D"], - knockoff: ["6T", "5T"], + honeclaws: ["6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + imprison: ["7L53", "6L53", "5L53"], + incinerate: ["6M", "5M"], + knockoff: ["7T", "6T", "5T"], leer: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - matblock: ["7L1"], - painsplit: ["6T", "5T"], + memento: ["7E", "6E", "5E"], + nastyplot: ["7L49", "6L49", "5L49"], + nightdaze: ["7L57", "6L57", "5L57"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L45", "6L45", "5L45"], + pursuit: ["7L5", "6L5", "5L5"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - revenge: ["7L13", "6L21", "5L21"], - reversal: ["7L45", "6L50", "5L53"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "5L21"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - seismictoss: ["7L5", "6L13", "5L13"], + shadowball: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - stormthrow: ["7L17", "6L25", "5L25"], - strength: ["6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5E"], sunnyday: ["7M", "6M", "5M"], - superpower: ["7L41", "6T", "6L48", "5T", "5L49", "5D"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], toxic: ["7M", "6M", "5M"], - vitalthrow: ["7L9", "6L17", "5L17"], - wideguard: ["7L37", "6L45", "5L45"], - workup: ["7M", "5M"], - zenheadbutt: ["6T"], + trick: ["7T", "6T", "5T"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], }}, - sawk: {learnset: { + zoroark: {learnset: { + aerialace: ["7M", "6M", "5M"], + agility: ["7L39", "6L39", "5L39", "5S0"], attract: ["7M", "6M", "5M"], - bide: ["7L1", "6L5", "5L5"], - block: ["6T", "5T"], - brickbreak: ["7M", "7L21", "6M", "6L29", "5M", "5L29"], - bulkup: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], - bulldoze: ["7M", "6M", "5M"], - closecombat: ["7L41", "6L48", "5L49"], + bounce: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - counter: ["7L13", "6L21", "5L21"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "6S1", "5T"], dig: ["6M", "5M"], - doublekick: ["7L5", "6L13", "5L13"], doubleteam: ["7M", "6M", "5M"], - dualchop: ["6T", "5T", "5D"], - earthquake: ["7M", "6M", "5M"], - endure: ["7L33", "6L41", "5L41"], + embargo: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "5S0"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], + feintattack: ["7L17", "6L17", "5L17"], + flamethrower: ["7M", "6M", "6S1", "5M"], fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focusenergy: ["7L1", "6L9", "5L9"], - focuspunch: ["6T"], + foulplay: ["7T", "7L29", "6T", "6L29", "5T", "5L29"], frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "6S2", "5L13"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - karatechop: ["7L17", "6L25", "5L25"], - knockoff: ["6T", "5T"], + honeclaws: ["7L9", "7L1", "6M", "6L1", "5M", "5L1"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + imprison: ["7L59", "7L1", "6L1", "5L59"], + incinerate: ["6M", "5M"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], leer: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "7L9", "6M", "6L17", "5M", "5L17"], - painsplit: ["6T", "5T"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + nastyplot: ["7L54", "6L54", "6S2", "5L54"], + nightdaze: ["7L64", "7L1", "6L1", "5L64"], + nightslash: ["7L1", "6L30", "5L30"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - quickguard: ["7L37", "6L45", "5L45"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L49", "6L49", "6S2", "5L49", "5S0"], + pursuit: ["7L5", "7L1", "6L1", "5L1"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["7L29", "6M", "6L37", "5M", "5L37"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7L45", "6L50", "5L53"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["7L1", "6M", "6L1", "5M", "5L1", "5D"], - rocktomb: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "6S2", "5L21"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + sludgebomb: ["6S1"], + snarl: ["7M", "6M", "5M", "5S0"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + suckerpunch: ["6S1"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T", "5D"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + torment: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], toxic: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T"], + trick: ["7T", "6T", "5T"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], }}, - sewaddle: {learnset: { - agility: ["7E", "6E", "5E"], - airslash: ["7E", "6E", "5E"], + minccino: {learnset: { + afteryou: ["7T", "7L49", "6T", "6L49", "5T", "5L49"], + aquatail: ["7T", "7E", "6T", "6E", "5T", "5E"], attract: ["7M", "6M", "5M"], - batonpass: ["7E", "6E", "5E"], - bugbite: ["7L8", "6T", "6L8", "5T", "5L8"], - bugbuzz: ["7L36", "6L36", "5L36"], + babydolleyes: ["7L3", "6L3"], calmmind: ["7M", "6M", "5M"], - camouflage: ["7E", "6E", "5E"], + captivate: ["7L39", "6L39", "5L39"], + charm: ["7L27", "6L27", "5L27"], confide: ["7M", "6M"], - cut: ["6M", "5M"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M"], + doubleslap: ["7L13", "6L13", "5L13"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - electroweb: ["6T", "5T"], - endure: ["7L29", "6L29", "5L29"], - energyball: ["7M", "6M", "5M"], + echoedvoice: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + encore: ["7L15", "6L15", "5L15"], + endure: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - flail: ["7L43", "6L43", "5L43"], - flash: ["6M", "5M"], + faketears: ["7E", "6E", "5E"], + flail: ["7E", "6E", "5E"], + fling: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], grassknot: ["7M", "6M", "5M"], + growl: ["5L3"], + gunkshot: ["7T", "6T", "5T"], + helpinghand: ["7T", "7L7", "6T", "6L7", "5T", "5L7"], hiddenpower: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - mefirst: ["7E", "6E", "5E"], - mindreader: ["7E", "6E", "5E"], - naturepower: ["7M", "6M"], - payback: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E"], + lastresort: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], + mudslap: ["7E", "6E", "5E"], + pound: ["7L1", "6L1", "5L1"], protect: ["7M", "6M", "5M"], - razorleaf: ["7L15", "6L15", "5L15"], - razorwind: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - signalbeam: ["6T", "5T"], - silverwind: ["7E", "6E", "5E"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stickyweb: ["7L31", "6L31"], - stringshot: ["7L1", "6L1", "5L1"], - strugglebug: ["7L22", "6M", "6L22", "5M", "5L22"], + seedbomb: ["7T", "6T", "5T"], + shockwave: ["7T", "6T"], + sing: ["7L21", "6L21", "5L21"], + slam: ["7L37", "6L37", "5L37"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], - tackle: ["7L1", "6L1", "5L1"], + swift: ["7L19", "6L19", "5L19"], + tailslap: ["7L25", "6L25", "5L25"], + tailwhip: ["7E", "6E", "5E"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L9", "6L9", "5L9"], toxic: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + wakeupslap: ["7L31", "6L31", "5L31"], + workup: ["7M", "5M"], }}, - swadloon: {learnset: { + cinccino: {learnset: { + afteryou: ["7T", "6T", "5T"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - bugbite: ["7L1", "6T", "6L1", "5T", "5L1"], + bulletseed: ["7L1", "6L1", "5L1"], calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - electroweb: ["6T", "5T"], - energyball: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - grasswhistle: ["7L1", "6L1", "5L1"], + gunkshot: ["7T", "6T", "5T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], hiddenpower: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "6T", "5T"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T"], lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - naturepower: ["7M", "6M"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "7L1", "6M", "6L20", "5M", "5L20"], - razorleaf: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + rockblast: ["7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - signalbeam: ["6T", "5T"], + seedbomb: ["7T", "6T", "5T"], + shockwave: ["7T", "6T"], + sing: ["7L1", "6L1", "5L1"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stringshot: ["7L1", "6L1", "5L1"], - strugglebug: ["6M", "5M"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], - tackle: ["7L1", "6L1", "5L1"], + tailslap: ["7L1", "6L1", "5L1"], + thief: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L1", "6L1", "5L1"], toxic: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "5M"], }}, - leavanny: {learnset: { - aerialace: ["7M", "6M", "5M"], + gothita: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], - bugbite: ["7L8", "7L1", "6T", "6L1", "5T", "5L1"], calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7L46", "6L46", "5L46"], confide: ["7M", "6M"], - cut: ["6M", "5M"], + confusion: ["7L3", "6L3", "5L3"], + covet: ["7T", "6T", "5T"], + darkpulse: ["7M", "7E", "6M", "6E", "5E"], + doubleslap: ["7L14", "6L14", "5L14"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - electroweb: ["6T", "5T"], + embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], energyball: ["7M", "6M", "5M"], - entrainment: ["7L43", "6L43", "5L43"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], - fellstinger: ["7L29", "6L34"], + faketears: ["7L10", "6L10", "5L10"], + feintattack: ["7L24", "6L24", "5L24"], flash: ["6M", "5M"], + flatter: ["7L28", "6L28", "5L28"], + fling: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], grassknot: ["7M", "6M", "5M"], - healbell: ["6T", "5T"], - helpinghand: ["7L32", "6T", "6L32", "5T", "5L32"], + gravity: ["7T", "6T", "5T"], + healbell: ["7T", "6T", "5T"], + healblock: ["7L33", "6L33", "5L33"], + healpulse: ["7E", "6E"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], - knockoff: ["6T", "5T"], - leafblade: ["7L36", "6L36", "5L36"], - leafstorm: ["7L50", "6L50", "5L50"], lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - naturepower: ["7M", "6M"], + magiccoat: ["7T", "6T", "5T"], + magicroom: ["7T", "7L48", "6T", "6L48", "5T", "5L48"], + meanlook: ["7E", "6E", "5E"], + miracleeye: ["7E", "6E", "5E"], + mirrorcoat: ["7E", "6E", "5E"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], + playnice: ["7L8", "6L8"], + pound: ["7L1", "6L1", "5L1"], protect: ["7M", "6M", "5M"], - razorleaf: ["7L15", "7L1", "6L1", "5L1"], + psybeam: ["7L16", "6L16", "5L16"], + psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowclaw: ["7M", "6M", "5M"], - signalbeam: ["6T", "5T"], - slash: ["7L1", "6L29", "5L29"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - steelwing: ["7M", "6M"], - stringshot: ["7L1", "6L1", "5L1"], - strugglebug: ["7L22", "6M", "6L22", "5M", "5L22"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], - synthesis: ["6T", "5T"], - tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "7L40", "6L40", "5M", "5L40"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L7", "6L7", "5L7"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], - xscissor: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - }}, - venipede: {learnset: { - agility: ["7L29", "6L29", "5L29"], - attract: ["7M", "6M", "5M"], - bugbite: ["7L22", "6T", "6L22", "5T", "5L22"], - confide: ["7M", "6M"], - defensecurl: ["7L1", "6L1", "5L1"], - doubleedge: ["7L43", "6L43", "5L43"], - doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - facade: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], - hiddenpower: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - pinmissile: ["7E", "6E", "5E"], - poisonjab: ["7M", "6M", "5M"], - poisonsting: ["7L5", "6L5", "5L5"], - poisontail: ["7L19", "6L19", "5L19"], - protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - pursuit: ["7L12", "6L12", "5L12"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockclimb: ["7L40", "7E", "6L40", "6E", "5L40", "5E"], - rocksmash: ["6M", "5M"], - rollout: ["7L1", "6L1", "5L1"], - round: ["7M", "6M", "5M"], - screech: ["7L8", "6L8", "5L8"], - secretpower: ["6M"], - signalbeam: ["6T"], - sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - spikes: ["7E", "6E", "5E"], - steamroller: ["7L33", "6L33", "5L33"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - takedown: ["7E", "6E", "5E"], - toxic: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - toxicspikes: ["7E", "6E", "5E"], - twineedle: ["7E", "6E", "5E"], - venoshock: ["7M", "7L38", "7L26", "6M", "6L26", "5M", "5L26"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "7E", "6T", "6E", "5T", "5E"], + zenheadbutt: ["7T", "6T", "5T"], }}, - whirlipede: {learnset: { - agility: ["7L32", "6L32", "5L32"], + gothorita: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], - bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7L50", "6L50", "5L50"], confide: ["7M", "6M"], - defensecurl: ["7L1", "6L1", "5L1"], - doubleedge: ["7L50", "6L50", "5L50"], + confusion: ["7L3", "7L1", "6L1", "5L1"], + covet: ["7T", "6T", "5T"], + darkpulse: ["7M", "6M"], + doubleslap: ["7L14", "6L14", "5L14"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + faketears: ["7L10", "6L10", "5L1"], + feintattack: ["7L24", "6L24", "5L24"], + flash: ["6M", "5M"], + flatter: ["7L28", "6L28", "5L28", "5S1", "5S0"], + fling: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31", "5S1", "5S0"], + grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + healbell: ["7T", "6T", "5T"], + healblock: ["7L34", "6L34", "5L34"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - irondefense: ["7L1", "6T", "6L22", "5T", "5L22"], + imprison: ["5S1"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magicroom: ["7T", "7L53", "6T", "6L53", "5T", "5L53"], + mirrorcoat: ["5S0"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - poisonsting: ["7L5", "7L1", "6L1", "5L1"], - poisontail: ["7L19", "6L19", "5L19"], - protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - pursuit: ["7L12", "6L12", "5L12"], + playnice: ["7L1", "6L1"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L16", "6L16", "5L16"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "5S1", "5S0"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockclimb: ["7L46", "6L46", "5L46"], - rocksmash: ["6M", "5M"], - rollout: ["7L1", "6L1", "5L1"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - screech: ["7L8", "7L1", "6L1", "5L1"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - signalbeam: ["6T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - steamroller: ["7L37", "6L37", "5L37"], - strugglebug: ["6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - toxic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - venomdrench: ["7L43", "6L43"], - venoshock: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "7L43", "6L43", "5M", "5L43"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L7", "7L1", "6L1", "5L1"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T"], }}, - scolipede: {learnset: { - agility: ["7L33", "6L33", "5L33"], - aquatail: ["6T", "5T"], + gothitelle: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], - batonpass: ["7L1", "6L30", "5L30"], - bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], - bulldoze: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7L54", "6L54", "5L54"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - defensecurl: ["7L1", "6L1", "5L1"], - dig: ["6M", "5M"], - doubleedge: ["7L55", "6L55", "5L55"], + confusion: ["7L3", "7L1", "6L1", "5L1"], + covet: ["7T", "6T", "5T"], + darkpulse: ["7M", "6M"], + doubleslap: ["7L14", "6L14", "5L14"], doubleteam: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + faketears: ["7L10", "6L10", "5L1"], + feintattack: ["7L24", "6L24", "5L24"], + flash: ["6M", "5M"], + flatter: ["7L28", "6L28", "5L28"], + fling: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], gigaimpact: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + healbell: ["7T", "6T", "5T"], + healblock: ["7L34", "6L34", "5L34"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - irondefense: ["7L1", "6T", "5T"], - irontail: ["6T", "5T"], - megahorn: ["7L65", "7L1", "6L1", "5L1"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magicroom: ["7T", "7L59", "6T", "6L59", "5T", "5L59"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - poisonsting: ["7L5", "7L1", "6L1", "5L1"], - poisontail: ["7L19", "6L19", "5L19", "5D"], - protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - pursuit: ["7L12", "6L12", "5L12"], + playnice: ["7L1", "6L1"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L16", "6L16", "5L16"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockclimb: ["7L50", "6L50", "5L50"], rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], - rollout: ["7L1", "6L1", "5L1"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - screech: ["7L8", "7L1", "6L1", "5L1"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - signalbeam: ["6T"], - sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - smartstrike: ["7M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - steamroller: ["7L39", "6L39", "5L39"], - strength: ["6M", "5M"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T", "5D"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - toxic: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], - toxicspikes: ["5D"], - venomdrench: ["7L47", "6L47"], - venoshock: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - xscissor: ["7M", "6M", "5M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "7L45", "6L45", "5M", "5L45"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L7", "7L1", "6L1", "5L1"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + zenheadbutt: ["7T", "6T", "5T"], }}, - cottonee: {learnset: { - absorb: ["7L1", "6L1", "5L1"], + solosis: {learnset: { + acidarmor: ["7E", "6E", "5E"], + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], + astonish: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - beatup: ["7E", "6E", "5E"], - captivate: ["7E", "6E"], - charm: ["7L28", "6L28", "5L28"], + calmmind: ["7M", "6M", "5M"], + charm: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - cottonguard: ["7L37", "6L37", "5L37"], - cottonspore: ["7L17", "6L17", "5L17"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], + confuseray: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - encore: ["7E", "6E", "5E", "5D"], - endeavor: ["7L44", "6T", "6L44", "5T", "5L44"], - energyball: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7T", "7L28", "6T", "6L28", "5T", "5L28"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fairywind: ["7L1", "6L1"], - faketears: ["7E", "6E", "5E"], flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["7L26", "6T", "6L26", "5T", "5L26"], - grassknot: ["7M", "6M", "5M"], - grasswhistle: ["7E", "6E", "5E"], - growth: ["7L4", "6L4", "5L4"], - helpinghand: ["7L31", "6T", "6L31", "5T", "5L31"], - hiddenpower: ["7M", "6M", "5M"], - knockoff: ["6T", "5T"], - leechseed: ["7L8", "6L8", "5L8", "5D"], - megadrain: ["7L13", "6L13", "5L13"], - memento: ["7E", "6E", "5E"], - naturalgift: ["7E", "6E", "5E"], - naturepower: ["7M", "6M"], - poisonpowder: ["7L22", "6L22", "5L22"], + futuresight: ["7L31", "6L31", "5L31"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healblock: ["7L46", "6L46", "5L46"], + helpinghand: ["7T", "7E", "6T", "6E"], + hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + imprison: ["7E", "6E", "5E"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T"], + lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + magiccoat: ["7T", "6T", "5T"], + nightshade: ["7E", "6E", "5E"], + painsplit: ["7T", "7L33", "6T", "6L33", "5T", "5L33"], protect: ["7M", "6M", "5M"], - razorleaf: ["7L19", "6L19", "5L19"], + psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L24", "6L24", "5L24"], + reflect: ["7M", "7L3", "6M", "6L3", "5M", "5L3"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], + rollout: ["7L7", "6L7", "5L7"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - secretpower: ["6M"], - seedbomb: ["6T", "5T"], + secretpower: ["7E", "6M", "6E", "5E"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], - stunspore: ["7L10", "6L10", "5L10"], + snatch: ["7T", "7L10", "6T", "6L10", "5T", "5L10"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], swagger: ["7M", "6M", "5M"], - switcheroo: ["7E", "6E", "5E"], - tailwind: ["6T", "5T"], - taunt: ["7M", "6M", "5M"], - tickle: ["7E", "6E", "5E"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - worryseed: ["7E", "6T", "6E", "5T", "5E", "5D"], + trick: ["7T", "7E", "6T", "6E", "5T", "5E"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7T", "7L48", "6T", "6L48", "5T", "5L48"], + zenheadbutt: ["7T", "6T", "5T"], }}, - whimsicott: {learnset: { + duosion: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], - beatup: ["5S0"], + calmmind: ["7M", "6M", "5M"], + charm: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - cottonspore: ["7L1", "6L1", "5L1"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7T", "7L28", "6T", "6L28", "5T", "5L28"], energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], flash: ["6M", "5M"], - fling: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T", "5S0"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growth: ["7L1", "6L1", "5L1"], - gust: ["7L10", "6L10", "5L10"], - helpinghand: ["6T", "5T", "5S0"], - hiddenpower: ["7M", "6M", "5M"], - hurricane: ["7L46", "6L46", "5L46"], - hyperbeam: ["7M", "6M", "5M"], - knockoff: ["6T", "5T"], - leechseed: ["7L1", "6L1", "5L1"], - lightscreen: ["7M", "6M", "5M"], - megadrain: ["7L1", "6L1", "5L1"], - moonblast: ["7L50", "6L50"], - naturepower: ["7M", "6M"], + futuresight: ["7L31", "6L31", "5L31"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healblock: ["7L50", "6L50", "5L50"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + imprison: ["5D"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T"], + lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + magiccoat: ["7T", "6T", "5T"], + painsplit: ["7T", "7L34", "6T", "6L34", "5T", "5L34"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L24", "6L24", "5D", "5L24"], + reflect: ["7M", "7L3", "7L1", "6M", "6L1", "5M", "5L1"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], + rollout: ["7L7", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], + snatch: ["7T", "7L10", "7L1", "6T", "6L1", "5T", "5L1"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M", "5S0"], - tailwind: ["7L28", "6T", "6L28", "5T", "5L28"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5D", "5T"], trickroom: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + wonderroom: ["7T", "7L53", "6T", "6L53", "5T", "5L53"], + zenheadbutt: ["7T", "6T", "5T"], }}, - petilil: {learnset: { - absorb: ["7L1", "6L1", "5L1"], - afteryou: ["7L44", "6T", "6L44", "5T", "5L44"], - aromatherapy: ["7L28", "6L28", "5L28"], + reuniclus: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], - bide: ["7E", "6E", "5E"], - charm: ["7E", "6E", "5E", "5D"], + calmmind: ["7M", "6M", "5M"], + charm: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], + dizzypunch: ["7L1", "6L41", "5L41"], doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], dreameater: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], - energyball: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], - entrainment: ["7L37", "6L37", "5L37"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7T", "7L28", "6T", "6L28", "5T", "5L28"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], - gigadrain: ["7L26", "6T", "6L26", "5T", "5L26"], + futuresight: ["7L31", "6L31", "5L31"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - grasswhistle: ["7E", "6E", "5E"], - growth: ["7L4", "6L4", "5L4"], - healbell: ["6T", "5T"], - healingwish: ["7E", "6E", "5E"], - helpinghand: ["7L31", "6T", "6L31", "5T", "5L31"], - hiddenpower: ["7M", "6M", "5M"], - ingrain: ["7E", "6E", "5E"], - leafstorm: ["7L46", "6L46", "5L46"], - leechseed: ["7L8", "6L8", "5L8"], - magicalleaf: ["7L19", "6L19", "5L19"], - megadrain: ["7L13", "6L13", "5L13"], - naturalgift: ["7E", "6E", "5E"], - naturepower: ["7M", "6M"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healblock: ["7L54", "6L54", "5L54"], + helpinghand: ["7T", "6T", "5T"], + hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + hyperbeam: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + magiccoat: ["7T", "6T", "5T"], + painsplit: ["7T", "7L34", "6T", "6L34", "5T", "5L34"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L24", "6L24", "5L24"], + reflect: ["7M", "7L3", "7L1", "6M", "6L1", "5M", "5L1"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], + rollout: ["7L7", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - sleeppowder: ["7L10", "6L10", "5L10", "5D"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + skillswap: ["7T", "7L45", "6T", "6L45", "5T", "5L45"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stunspore: ["7L22", "6L22", "5L22"], + snatch: ["7T", "7L10", "7L1", "6T", "6L1", "5T", "5L1"], + snore: ["7T", "6T", "5T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - sweetscent: ["7E", "6E", "5E", "5D"], - synthesis: ["7L17", "6T", "6L17", "5T", "5L17"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - worryseed: ["7E", "6T", "6E", "5T", "5E"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7T", "7L59", "6T", "6L59", "5T", "5L59"], + zenheadbutt: ["7T", "6T", "5T"], }}, - lilligant: {learnset: { - afteryou: ["6T", "5T"], + ducklett: {learnset: { + aerialace: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + aircutter: ["7E", "6E", "5E"], + airslash: ["7L27", "6L27", "5L27"], + aquajet: ["7E"], + aquaring: ["7L24", "6L24", "5L24"], attract: ["7M", "6M", "5M"], + bravebird: ["7L41", "6L41", "5L41"], + brine: ["7E", "6E", "5D", "5E"], + bubblebeam: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], + defog: ["7T", "7L6", "6L6", "5D", "5L6"], + dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + featherdance: ["7L21", "6L21", "5L21"], + fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growth: ["7L1", "6L1", "5L1"], - healbell: ["6T", "5T"], - helpinghand: ["6T", "5T"], + gust: ["7E", "6E", "5E"], + hail: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - leechseed: ["7L1", "6L1", "5L1"], - lightscreen: ["7M", "6M", "5M"], - megadrain: ["7L1", "6L1", "5L1"], - naturepower: ["7M", "6M"], - petalblizzard: ["7L50", "6L50"], - petaldance: ["7L46", "6L46", "5L46"], + hurricane: ["7L46", "6L46", "5L46"], + icebeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], + liquidation: ["7T"], + luckychant: ["7E", "6E", "5E"], + mefirst: ["7E", "6E", "5D", "5E"], + mirrormove: ["7E", "6E", "5E"], + mudsport: ["7E", "6E"], + pluck: ["5M"], protect: ["7M", "6M", "5M"], - quiverdance: ["7L28", "6L28", "5L28"], + raindance: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roost: ["7M", "7L30", "6M", "6L30", "5T", "5L30"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - synthesis: ["7L1", "6T", "6L1", "5T", "5L1"], - teeterdance: ["7L10", "6L10", "5L10"], + tailwind: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], toxic: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["7T", "7L13", "6T", "6L13", "5L13"], + watersport: ["7L3", "6L3", "5L3"], + wingattack: ["7L9", "6L9", "5L9"], }}, - basculin: {learnset: { - agility: ["7E", "6E", "5E", "5D"], - aquajet: ["7L9", "6L13", "5L13"], - aquatail: ["7L20", "6T", "6L28", "5T", "5L28"], + swanna: {learnset: { + aerialace: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + airslash: ["7L27", "6L27", "5L27"], + aquaring: ["7L24", "6L24", "5L24"], attract: ["7M", "6M", "5M"], - bite: ["7L7", "6L10", "5L10"], - bounce: ["6T", "5T"], - brine: ["7E", "6E", "5E"], - bubblebeam: ["7E", "6E", "5E"], - chipaway: ["7L11", "6L16", "5L16"], + bravebird: ["7L47", "6L47", "5L47"], + bubblebeam: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - crunch: ["7L17", "6L24", "5L24"], - cut: ["6M", "5M"], + defog: ["7T", "7L6", "7L1", "6L1", "5L1"], dive: ["6M", "5M"], - doubleedge: ["7L26", "6L36", "5L36"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - finalgambit: ["7L38", "6L50", "5L51"], - flail: ["7L34", "6L1", "5L46"], + featherdance: ["7L21", "6L21", "5L21"], + fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], hail: ["7M", "6M", "5M"], - headbutt: ["7L5", "6L7", "5L7", "5D"], - headsmash: ["7L46"], hiddenpower: ["7M", "6M", "5M"], + hurricane: ["7L55", "6L55", "5L55"], + hyperbeam: ["7M", "6M", "5M"], icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - muddywater: ["7E", "6E", "5E"], - mudshot: ["7E", "6E", "5E"], + icywind: ["7T", "6T", "5T"], + liquidation: ["7T"], + pluck: ["5M"], protect: ["7M", "6M", "5M"], - rage: ["7E", "6E", "5E"], - raindance: ["7M", "6M", "5M"], + raindance: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - revenge: ["7E", "6E", "5E"], + roost: ["7M", "7L30", "6M", "6L30", "5T", "5L30"], round: ["7M", "6M", "5M"], scald: ["7M", "6M", "5M"], - scaryface: ["7L30", "6L41", "5L41"], secretpower: ["6M"], + skyattack: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - soak: ["7L23", "6L32", "5L32"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swift: ["7E", "6E", "5E"], - tackle: ["7L1", "6L1", "5L1"], - tailwhip: ["7L1", "6L1"], - takedown: ["7L14", "6L20", "5L20"], - taunt: ["7M", "6M", "5M"], - thrash: ["7L42", "6L1", "5L56"], + tailwind: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], toxic: ["7M", "6M", "5M"], - uproar: ["7L3", "6T", "6L4", "5T", "5L4"], - waterfall: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], watergun: ["7L1", "6L1", "5L1"], - whirlpool: ["7E", "6E", "5E"], - zenheadbutt: ["6T", "5T", "5D"], + waterpulse: ["7T", "7L13", "6T", "6L13", "5L13"], + watersport: ["7L3", "7L1", "6L1", "5L1"], + wingattack: ["7L9", "7L1", "6L1", "5L1"], }}, - sandile: {learnset: { - aquatail: ["6T", "5T"], - assurance: ["7L16", "6L16", "5L16"], + vanillite: {learnset: { + acidarmor: ["7L31", "6L31", "5L31"], + allyswitch: ["7T"], + astonish: ["7L7", "6L7", "5L7"], attract: ["7M", "6M", "5M"], - beatup: ["7E", "6E", "5E"], - bite: ["7L4", "6L4", "5L4"], - bulldoze: ["7M", "6M", "5M"], + autotomize: ["7E", "6E", "5E"], + avalanche: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E"], - crunch: ["7L28", "6L28", "5L28"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], - dig: ["7L31", "6M", "6L31", "5M", "5L31"], - doubleedge: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], - embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - firefang: ["7E", "6E", "5E"], - focusenergy: ["7E", "6E", "5E"], - foulplay: ["7L37", "6T", "6L37", "5T", "5L37"], + flashcannon: ["7M", "6M", "5M"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], + hail: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + harden: ["7L4", "6L4", "5L4"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - meanlook: ["7E", "6E", "5E"], - mefirst: ["7E", "6E"], - mudslap: ["7L19", "6L19", "5L19"], - payback: ["7M", "6M", "5M"], - powertrip: ["7E"], + icebeam: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + iceshard: ["7E", "6E", "5E"], + iciclespear: ["7L1", "6L1", "5L1"], + icywind: ["7T", "7L13", "6T", "6L13", "5T", "5L13"], + imprison: ["7E", "6E", "5E"], + irondefense: ["7T", "7E", "6T", "6E", "5T", "5E"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magnetrise: ["7T", "7E", "6T", "6E", "5T", "5E"], + mirrorcoat: ["7L44", "6L44", "5L44"], + mirrorshot: ["7L26", "6L26", "5L26"], + mist: ["7L16", "6L16", "5L16"], + naturalgift: ["7E", "6E", "5E"], + powdersnow: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], - rage: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockclimb: ["7E", "6E", "5E"], - rockslide: ["7M", "6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "6L7", "5L7"], - sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], - sandtomb: ["7L13", "6L13", "5L13"], - scaryface: ["7L34", "6L34", "5L34"], secretpower: ["6M"], + sheercold: ["7L53", "6L53", "5L53"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thrash: ["7L46", "6L46", "5L46"], - thunderfang: ["7E", "6E", "5E"], - torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], toxic: ["7M", "6M", "5M"], - uproar: ["7E", "6T", "6E", "5T", "5E"], + uproar: ["7T", "7L10", "6T", "6L10", "5T", "5L10"], + waterpulse: ["7T", "7E", "6T", "6E", "5E"], }}, - krokorok: {learnset: { - aquatail: ["6T", "5T"], - assurance: ["7L16", "6L16", "5L16"], + vanillish: {learnset: { + acidarmor: ["7L31", "6L31", "5L31"], + allyswitch: ["7T"], + astonish: ["7L7", "7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - bite: ["7L4", "7L1", "6L1", "5L1"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], + avalanche: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], confide: ["7M", "6M"], - crunch: ["7L28", "6L28", "5L28"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], - dig: ["7L32", "6M", "6L32", "5M", "5L32"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], - embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focuspunch: ["6T"], - foulplay: ["7L40", "6T", "6L40", "5T", "5L40"], + flashcannon: ["7M", "6M", "5M"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], + hail: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + harden: ["7L4", "7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - mudslap: ["7L19", "6L19", "5L19"], - payback: ["7M", "6M", "5M"], - poweruppunch: ["6M"], + icebeam: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + iceshard: ["5D"], + iciclespear: ["7L1", "6L1", "5L1"], + icywind: ["7T", "7L13", "6T", "6L13", "5T", "5L13"], + imprison: ["5D"], + irondefense: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T"], + mirrorcoat: ["7L47", "6L47", "5L47"], + mirrorshot: ["7L26", "6L26", "5D", "5L26"], + mist: ["7L16", "6L16", "5L16"], protect: ["7M", "6M", "5M"], - rage: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L1"], - sandstorm: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], - sandtomb: ["7L13", "6L13", "5L13"], - scaryface: ["7L36", "6L36", "5L36"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], + sheercold: ["7L58", "6L58", "5L58"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thrash: ["7L52", "6L52", "5L52"], - torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], + uproar: ["7T", "7L10", "7L1", "6T", "6L1", "5T", "5L1"], + waterpulse: ["7T", "6T"], }}, - krookodile: {learnset: { - aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - assurance: ["7L16", "6L16", "5L16"], + vanilluxe: {learnset: { + acidarmor: ["7L31", "6L31", "5L31"], + allyswitch: ["7T"], + astonish: ["7L7", "7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - bite: ["7L4", "7L1", "6L1", "5L1"], - block: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulkup: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + avalanche: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], confide: ["7M", "6M"], - counter: ["5D"], - crunch: ["7L28", "6L28", "5L28", "5D"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], - dig: ["7L32", "6M", "6L32", "5M", "5L32"], doubleteam: ["7M", "6M", "5M"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["6T", "5T"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "7L54", "6M", "6L54", "5M", "5L54"], - embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], - foulplay: ["7L42", "6T", "6L42", "5T", "5L42"], + flashcannon: ["7M", "6M", "5M"], + freezedry: ["7L1", "6L1"], + frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], + hail: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + harden: ["7L4", "7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - meanlook: ["5D"], - mudslap: ["7L19", "6L19", "5L19"], - outrage: ["7L60", "6T", "6L1", "5T", "5L60"], - payback: ["7M", "6M", "5M"], - powertrip: ["7L1"], - poweruppunch: ["6M"], + icebeam: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + iciclespear: ["7L1", "6L1", "5L1"], + icywind: ["7T", "7L13", "6T", "6L13", "5T", "5L13"], + irondefense: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T"], + mirrorcoat: ["7L50", "6L50", "5L50"], + mirrorshot: ["7L26", "6L26", "5L26"], + mist: ["7L16", "6L16", "5L16"], protect: ["7M", "6M", "5M"], - rage: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L1"], - sandstorm: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], - sandtomb: ["7L13", "6L13", "5L13"], - scaryface: ["7L36", "6L36", "5L36"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], + sheercold: ["7L67", "7L1", "6L1", "5L67"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], + uproar: ["7T", "7L10", "7L1", "6T", "6L1", "5T", "5L1"], + waterpulse: ["7T", "6T"], + weatherball: ["7L1", "6L1", "5L1"], }}, - darumaka: {learnset: { + deerling: {learnset: { + agility: ["7E", "6E", "5E"], + aromatherapy: ["7L28", "6L28", "5L28", "5S0"], attract: ["7M", "6M", "5M"], - bellydrum: ["7L30", "6L30", "5L30"], - brickbreak: ["7M", "6M", "5M"], + batonpass: ["7E", "6E", "5E"], + bounce: ["7T", "6T", "5T"], + camouflage: ["7L1", "6L1", "5L1"], + charm: ["7L36", "6L36", "5L36"], confide: ["7M", "6M"], - dig: ["6M", "5M"], + doubleedge: ["7L46", "6L46", "5L46"], + doublekick: ["7L10", "6L10", "5L10"], doubleteam: ["7M", "6M", "5M"], - encore: ["7E", "6E", "5E"], - endeavor: ["6T", "5T"], - endure: ["7E", "6E", "5E"], - facade: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - fireblast: ["7M", "6M", "5M"], - firefang: ["7L11", "6L11", "5L11"], - firepunch: ["7L22", "6T", "6L22", "5T", "5L22"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M"], - flamewheel: ["7E", "6E", "5E"], - flareblitz: ["7L33", "6L33", "5L33"], - fling: ["7M", "6M", "5M"], - focusenergy: ["7E", "6E", "5E"], - focuspunch: ["7E", "6T", "6E", "5E"], + echoedvoice: ["7M", "6M", "5M"], + energyball: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7L16", "6L16", "5L16", "5S0"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], + gigadrain: ["7T", "6T", "5T"], grassknot: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], - hammerarm: ["7E", "6E", "5E"], - headbutt: ["7L14", "6L14", "5L14"], - heatwave: ["6T", "5T"], + grasswhistle: ["7E", "6E", "5E"], + growl: ["7L4", "6L4", "5L4"], + headbutt: ["7E"], hiddenpower: ["7M", "6M", "5M"], - incinerate: ["7L6", "6M", "6L6", "5M", "5L6"], - overheat: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], - poweruppunch: ["6M"], + jumpkick: ["7L24", "6L24", "5L24", "5S0"], + lastresort: ["7T", "6T", "5T"], + leechseed: ["7L13", "6L13", "5L13"], + lightscreen: ["7M", "6M", "5M"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "7L41", "6M", "6L41", "5L41"], + odorsleuth: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M"], - rage: ["7L9", "6L9", "5L9"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rollout: ["7L3", "6L3", "5L3"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandattack: ["7L7", "6L7", "5L7"], secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snatch: ["7E", "6T", "6E"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["7L39", "6T", "6L39", "5T", "5L39"], swagger: ["7M", "6M", "5M"], + synthesis: ["7T", "7E", "6T", "6E", "5T", "5E"], tackle: ["7L1", "6L1", "5L1"], - takedown: ["7E", "6E", "5E"], - taunt: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], - thief: ["7M", "6M", "5M"], - thrash: ["7L27", "6L27", "5L27"], + takedown: ["7L20", "6L20", "5L20", "5S0"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["7L17", "6T", "6L17", "5T", "5L17"], - uturn: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - workup: ["7M", "7L25", "6L25", "5M", "5L25"], - yawn: ["7E", "6E", "5E"], - zenheadbutt: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - darmanitan: {learnset: { + sawsbuck: {learnset: { + aromatherapy: ["7L28", "6L28", "5L28"], attract: ["7M", "6M", "5M"], - bellydrum: ["7L30", "6L30", "6S1", "5L30", "5S0"], - brickbreak: ["7M", "6M", "5M"], - bulkup: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + camouflage: ["7L1", "6L1", "5L1"], + charm: ["7L36", "6L36", "5L36"], confide: ["7M", "6M"], - dig: ["6M", "5M"], + cut: ["6M", "5M"], + doubleedge: ["7L52", "6L52", "5L52"], + doublekick: ["7L10", "6L10", "5L10"], doubleteam: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - facade: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - fireblast: ["7M", "6M", "5M"], - firefang: ["7L11", "6L11", "5L11"], - firepunch: ["7L22", "6T", "6L22", "5T", "5L22"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M"], - flareblitz: ["7L33", "6L33", "6S1", "5L33", "5S0"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], + echoedvoice: ["7M", "6M", "5M"], + energyball: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L16", "6L16", "5L16"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], + gigadrain: ["7T", "6T", "5T"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gyroball: ["7M", "6M", "5M"], - hammerarm: ["7L1", "6L35", "6S1", "5L35", "5S0"], - headbutt: ["7L14", "6L14", "5L14"], - heatwave: ["6T", "5T"], + growl: ["7L4", "7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], + hornleech: ["7L1", "6L37", "5L37"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["7L6", "7L1", "6M", "6L1", "5M", "5L1"], - overheat: ["7M", "7L54", "6M", "6L54", "5M", "5L54"], - payback: ["7M", "6M", "5M"], - poweruppunch: ["6M"], + jumpkick: ["7L24", "6L24", "5L24"], + lastresort: ["7T", "6T", "5T"], + leechseed: ["7L13", "6L13", "5L13"], + lightscreen: ["7M", "6M", "5M"], + megahorn: ["7L1", "6L1", "5L1"], + naturepower: ["7M", "7L44", "6M", "6L44", "5L44"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - rage: ["7L9", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rollout: ["7L3", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], + shadowball: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "6M", "5M"], - snatch: ["6T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L60", "6M", "6L60", "5M", "5L60"], + stompingtantrum: ["7T"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["7L47", "6T", "6L47", "5T", "5L47"], - swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["7T", "6T", "5T"], tackle: ["7L1", "6L1", "5L1"], - taunt: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - thief: ["7M", "6M", "5M"], - thrash: ["7L27", "6L27", "6S1", "5L27", "5S0"], - torment: ["7M", "6M", "5M"], + takedown: ["7L20", "6L20", "5L20"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - workup: ["7M", "7L25", "6L25", "5M", "5L25"], - zenheadbutt: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - maractus: {learnset: { - absorb: ["7L1", "6L1", "5L1"], - acupressure: ["7L29", "6L29", "5L29"], + emolga: {learnset: { + acrobatics: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], aerialace: ["7M", "6M", "5M"], - afteryou: ["7L57", "7L1", "6T", "6L1", "5T", "5L57"], + agility: ["7L46", "6L46", "5L46"], + airslash: ["7E", "6E", "5D", "5E"], + astonish: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - bounce: ["7E", "6T", "6E", "5T", "5E"], - bulletseed: ["7E", "6E", "5E"], + batonpass: ["7E", "6E", "5E"], + charge: ["7L10", "6L10", "5L10"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7E", "6E", "5D", "5E"], confide: ["7M", "6M"], - cottonguard: ["7L55", "7L1", "6L1", "5L55"], - cottonspore: ["7L18", "6L18", "5L18"], - doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - endeavor: ["6T", "5T"], - energyball: ["7M", "6M", "5M"], + covet: ["7T", "7E", "6T", "6E", "5T", "5E"], + cut: ["6M", "5M"], + defog: ["7T"], + discharge: ["7L50", "6L50", "5L50"], + doubleteam: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + electroball: ["7L26", "6L26", "5L26"], + electroweb: ["7T", "6T"], + encore: ["7L38", "6L38", "5L38"], facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["7L26", "6T", "6L26", "5T", "5L26"], - grassknot: ["7M", "6M", "5M"], - grasswhistle: ["7E", "6E", "5E"], - grassyterrain: ["7E", "6E"], - growth: ["7L6", "6L6", "5L6"], - helpinghand: ["6T", "5T"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hypervoice: ["6T", "5T"], - ingrain: ["7L33", "6L33", "5L33"], - knockoff: ["6T", "5T"], - leechseed: ["7E", "6E", "5E", "5D"], - megadrain: ["7L13", "6L13", "5L13"], - naturepower: ["7M", "6M"], - needlearm: ["7L22", "6L22", "5L22"], - peck: ["7L1", "6L1", "5L1"], - petalblizzard: ["7L48", "6L48"], - petaldance: ["7L38", "6L38", "5L38"], - pinmissile: ["7L10", "6L10", "5L10", "5D"], - poisonjab: ["7M", "6M", "5M"], + iondeluge: ["7E", "6E"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + knockoff: ["7T", "6T", "5T"], + lastresort: ["7T", "6T", "5T"], + lightscreen: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + nuzzle: ["7L15", "6L15"], protect: ["7M", "6M", "5M"], + pursuit: ["7L16", "6L16", "5L16"], + quickattack: ["7L4", "6L4", "5D", "5L4"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E"], + shockwave: ["7T", "7L22", "7E", "6T", "6L22", "6E", "5L22", "5E"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - spikes: ["7E", "6E", "5E", "5D"], - spikyshield: ["7L1", "6L1"], + snore: ["7T", "6T", "5T"], + spark: ["7L13", "6L13", "5L13"], + speedswap: ["7E"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7L42", "6L42", "5L42"], - sunnyday: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], swagger: ["7M", "6M", "5M"], - sweetscent: ["7L3", "6L3", "5L3"], - synthesis: ["7L15", "6T", "6L15", "5T", "5L15"], + tailwhip: ["7L7", "6L7", "5L7"], + tailwind: ["7T", "6T", "5T"], + taunt: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - woodhammer: ["7E", "6E", "5E"], - worryseed: ["7E", "6T", "6E", "5T", "5E"], + uturn: ["7M", "6M", "5M"], + voltswitch: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + wildcharge: ["7M", "6M", "5M"], }}, - dwebble: {learnset: { + karrablast: {learnset: { aerialace: ["7M", "6M", "5M"], attract: ["7M", "6M", "5M"], - block: ["7E", "6T", "6E", "5T", "5E"], - bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], - bulldoze: ["7M", "6M", "5M"], + bugbite: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + bugbuzz: ["7L28", "6L28", "5L28", "5S0"], confide: ["7M", "6M"], counter: ["7E", "6E", "5E"], - curse: ["7E", "6E", "5E"], cut: ["6M", "5M"], - dig: ["6M", "5M"], + doubleedge: ["7L56", "6L56", "5L56"], doubleteam: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], + drillrun: ["7T", "7E", "6T", "6E"], + endure: ["7L8", "6L8", "5D", "5L8"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - feintattack: ["7L13", "6L13", "5L13"], - flail: ["7L41", "6L41", "5L41"], + falseswipe: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "5S0"], + feintattack: ["7E", "6E", "5E"], + flail: ["7L49", "6L49", "5L49", "5S1"], frustration: ["7M", "6M", "5M"], - furycutter: ["7L1", "6L1", "5L1"], + furyattack: ["7L16", "6L16", "5L16", "5S0"], + furycutter: ["7L13", "6L13", "5L13"], + gigadrain: ["7T", "6T", "5T"], + headbutt: ["7L20", "6L20", "5L20", "5S0"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - irondefense: ["7E", "6T", "6E", "5T", "5E"], - knockoff: ["6T", "5T"], - naturepower: ["7M", "6M"], - nightslash: ["7E", "6E", "5E"], + hornattack: ["7E", "6E", "5E"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E"], + leer: ["7L4", "6L4", "5L4"], + megahorn: ["7E", "6E", "5D", "5E", "5S1"], + peck: ["7L1", "6L1", "5L1"], poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7L5", "6L5", "5L5"], - rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rockwrecker: ["7L43", "6L43", "5L43"], - rototiller: ["7E", "6E"], round: ["7M", "6M", "5M"], - sandattack: ["7L11", "6L11", "5L11"], - sandstorm: ["7M", "6M", "5M"], - sandtomb: ["7E", "6E", "5E"], + scaryface: ["7L40", "6L40", "5L40"], + screech: ["7E", "6E", "5E"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - shellsmash: ["7L37", "6L37", "5L37"], - slash: ["7L31", "6L31", "5L31"], + signalbeam: ["7T", "6T"], + slash: ["7L32", "6L32", "5L32"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - spikes: ["7E", "6E", "5E"], - stealthrock: ["7L24", "6T", "6L24", "5T", "5L24"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + takedown: ["7L37", "6L37", "5L37", "5S1"], toxic: ["7M", "6M", "5M"], - wideguard: ["7E", "6E"], - withdraw: ["7L7", "6L7", "5L7"], - xscissor: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "5S1"], }}, - crustle: {learnset: { + escavalier: {learnset: { aerialace: ["7M", "6M", "5M"], attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], - bulldoze: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bugbite: ["7T", "6T", "5T"], + bugbuzz: ["7L28", "6L28", "5L28"], confide: ["7M", "6M"], - counter: ["5D"], cut: ["6M", "5M"], - dig: ["6M", "5M"], + doubleedge: ["7L1", "6L1"], doubleteam: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "5M"], + drillrun: ["7T", "6T"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - feintattack: ["7L13", "6L13", "5L13"], - flail: ["7L50", "6L50", "5L50"], + falseswipe: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + fellstinger: ["7L60", "7L1", "6L1"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], + furyattack: ["7L16", "6L16", "5L16"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + headbutt: ["7L20", "6L20", "5L20"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], - knockoff: ["6T", "5T"], - naturepower: ["7M", "6M"], - nightslash: ["5D"], + infestation: ["7M", "6M"], + irondefense: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], + ironhead: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leer: ["7L4", "7L1", "6L1", "5L1"], + peck: ["7L1", "6L1", "5L1"], poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], + quickguard: ["7L8", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7L5", "7L1", "6L1", "5L1"], - rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "5D"], + reversal: ["7L49", "6L49", "5L49"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rockwrecker: ["7L55", "6L55", "5L55"], round: ["7M", "6M", "5M"], - sandattack: ["7L11", "7L1", "6L1", "5L1"], - sandstorm: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - shellsmash: ["7L43", "7L1", "6L1", "5L1"], - slash: ["7L31", "6L31", "5L31"], + signalbeam: ["7T", "6T"], + slash: ["7L32", "6L32", "5L32"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stealthrock: ["7L24", "6T", "6L24", "5T", "5L24"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + smartstrike: ["7M"], + snore: ["7T", "6T", "5T"], strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], toxic: ["7M", "6M", "5M"], - withdraw: ["7L7", "7L1", "6L1", "5L1"], - xscissor: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], + twineedle: ["7L13", "7L1", "6L1", "5L1"], + xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], }}, - scraggy: {learnset: { - amnesia: ["7E", "6E", "5E"], + foongus: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + afteryou: ["7T", "6T", "5T"], + astonish: ["7L8", "6L8", "5L8"], attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "7L23", "6M", "6L20", "5M", "5L20"], - bulkup: ["7M", "6M", "5M"], - chipaway: ["7L27", "6L27", "5L27"], + bide: ["7L12", "6L12", "5L12"], + bodyslam: ["7E", "6E", "5E"], + clearsmog: ["7L39", "6L39", "5L39"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E"], - crunch: ["7L38", "6L38", "5L38"], - darkpulse: ["7M", "6M", "5T"], - detect: ["7E", "6E", "5E"], - dig: ["6M", "5M"], + defensecurl: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], - dragonclaw: ["7M", "6M", "5M"], - dragondance: ["7E", "6E", "5E"], - dragonpulse: ["6T", "5T"], - dragontail: ["7M", "6M", "5M"], - drainpunch: ["7E", "6T", "6E", "5T", "5E", "5D"], - dualchop: ["6T", "5T"], - facade: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], - fakeout: ["7E", "6E", "5E", "5D"], - feintattack: ["7L9", "7E", "6L9", "6E", "5L9", "5E"], - firepunch: ["7E", "6T", "6E", "5T", "5E"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["7L48", "6T", "6L48", "5L49"], - foulplay: ["6T", "5T"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L20", "6L20", "5L20"], + flash: ["6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "7E", "6T", "6E", "5T", "5E"], + gigadrain: ["7T", "7L28", "6T", "6L28", "5T", "5L28"], grassknot: ["7M", "6M", "5M"], - headbutt: ["7L1", "6L12", "5L12", "5S0"], - headsmash: ["7L50", "6L50", "5L53"], + growth: ["7L6", "7E", "6L6", "6E", "5L6", "5E"], hiddenpower: ["7M", "6M", "5M"], - highjumpkick: ["7L31", "6L31", "5L31", "5S0"], - icepunch: ["7E", "6T", "6E", "5T", "5E"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1", "5S0"], - lowkick: ["7L16", "6T", "6L1", "5T", "5L1", "5S0", "5D"], - lowsweep: ["7M", "6M", "5M"], - payback: ["7M", "7L20", "6M", "6L23", "5M", "5L23"], - poisonjab: ["7M", "6M", "5M"], - poweruppunch: ["6M"], + ingrain: ["7L18", "6L18", "5L18"], + megadrain: ["7L15", "6L15", "5L15"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + poisonpowder: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M"], - quickguard: ["7E", "6E"], + ragepowder: ["7L45", "6L45", "5L45"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockclimb: ["7L45", "6L45", "5L45"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], + rollout: ["7E", "6E", "5E"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "6L5", "5L5"], - scaryface: ["7L34", "6L34", "5L34"], secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], sludgebomb: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + spore: ["7L50", "6L50", "5L50"], + stunspore: ["7E", "6E", "5E"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superfang: ["6T", "5T"], - swagger: ["7M", "7L12", "6M", "6L16", "5M", "5L16"], - taunt: ["7M", "6M", "5M"], - thunderpunch: ["7E", "6T", "6E", "5T", "5E"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7L24", "6L24", "5L24"], + synthesis: ["7T", "7L35", "6T", "6L35", "5T", "5L35"], + toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - scrafty: {learnset: { + amoonguss: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + afteryou: ["7T", "6T", "5T"], + astonish: ["7L8", "7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "7L23", "6M", "6L20", "5M", "5L20"], - bulkup: ["7M", "6M", "5M"], - chipaway: ["7L27", "6L27", "5L27"], + bide: ["7L12", "7L1", "6L1", "5L1"], + clearsmog: ["7L43", "6L43", "5L43"], confide: ["7M", "6M"], - crunch: ["7L38", "6L38", "5L38"], - darkpulse: ["7M", "6M", "5T"], - dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["6T", "5T"], - dragontail: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T", "5S0"], - dualchop: ["6T", "5T"], - facade: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - feintattack: ["7L9", "7L1", "6L1", "5L1"], - firepunch: ["6T", "5T", "5S0"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["7L58", "6T", "6L58", "5L58"], - foulplay: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L20", "6L20", "5L20"], + flash: ["6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "6T", "5T"], + gigadrain: ["7T", "7L28", "6T", "6L28", "5T", "5L28"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - headbutt: ["7L1", "6L12", "5L12"], - headsmash: ["7L65", "6L65", "5L65"], + growth: ["7L6", "7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - highjumpkick: ["7L31", "6L31", "5L31"], hyperbeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - incinerate: ["6M", "5M"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lowkick: ["7L16", "6T", "6L1", "5T", "5L1"], - lowsweep: ["7M", "6M", "5M"], - outrage: ["6T", "5T"], - payback: ["7M", "7L20", "6M", "6L23", "5M", "5L23", "5S0"], - poisonjab: ["7M", "6M", "5M"], - poweruppunch: ["6M"], + ingrain: ["7L18", "6L18", "5L18"], + megadrain: ["7L15", "6L15", "5L15"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], + ragepowder: ["7L54", "6L54", "5L54"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockclimb: ["7L51", "6L51", "5L51"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandattack: ["7L5", "7L1", "6L1", "5L1"], - scaryface: ["7L34", "6L34", "5L34"], secretpower: ["6M"], + seedbomb: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], sludgebomb: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M", "5S0"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + spore: ["7L62", "6L62", "5L62"], + stompingtantrum: ["7T"], + substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superfang: ["6T", "5T"], - swagger: ["7M", "7L12", "6M", "6L16", "5M", "5L16"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7L24", "6L24", "5L24"], + synthesis: ["7T", "7L35", "6T", "6L35", "5T", "5L35"], + toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - sigilyph: {learnset: { - aerialace: ["7M", "6M", "5M"], - aircutter: ["7L21", "6L21", "5L21"], - airslash: ["7L41", "6L41", "5L41"], - ancientpower: ["7E", "6E", "5E"], + frillish: {learnset: { + absorb: ["7L5", "6L5", "5L5"], + acidarmor: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "6M", "5M"], + brine: ["7L32", "6L32", "5L32"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L13", "6L13", "5L13"], confide: ["7M", "6M"], - cosmicpower: ["7L48", "6L48", "5L48"], + confuseray: ["7E", "6E", "5E"], + constrict: ["7E", "6E", "5E"], darkpulse: ["7M", "6M", "5T"], dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - futuresight: ["7E", "6E"], - gravity: ["7L38", "6T", "6L38", "5T", "5L38"], - gust: ["7L1", "6L1", "5L1"], - heatwave: ["6T", "5T", "5D"], + gigadrain: ["7T", "6T", "5T"], + hail: ["7M", "6M", "5M"], + hex: ["7L43", "6L43", "5L43"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypnosis: ["7L4", "6L4", "5L4", "5D"], + hydropump: ["7L49", "6L49", "5L49"], icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - lightscreen: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], - magiccoat: ["6T", "5T"], - magicroom: ["6T", "5T"], - miracleeye: ["7L1", "6L1", "5L1"], - mirrormove: ["7L34", "6L34", "5L34"], - pluck: ["5M"], + icywind: ["7T", "6T", "5T"], + magiccoat: ["7T", "6T", "5T"], + mist: ["7E", "6E", "5E"], + nightshade: ["7L9", "6L9", "5L9"], + ominouswind: ["7L27", "6L27", "5L27"], + painsplit: ["7T", "7E", "6T", "6E", "5T", "5E"], protect: ["7M", "6M", "5M"], - psybeam: ["7L18", "6L18", "5L18"], - psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], - psychoshift: ["7E", "6E", "5E"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "6M", "5M"], - psywave: ["7L8", "6L8", "5L8"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["7E", "6T", "6E", "5T", "5E"], - skyattack: ["7L50", "6T", "6L50", "5T", "5L51"], - sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - steelwing: ["7M", "7E", "6M", "6E", "5E"], - storedpower: ["7E", "6E", "5E", "5D"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - synchronoise: ["7L31", "6L31", "5L31"], - tailwind: ["7L11", "6T", "6L11", "5T", "5L11"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - whirlwind: ["7L14", "6L14", "5L14"], - zenheadbutt: ["6T", "5T"], - }}, - yamask: {learnset: { - afteryou: ["6T", "5T"], - allyswitch: ["7E", "6E"], - astonish: ["7L1", "6L1", "5L1"], - attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], - confide: ["7M", "6M"], - curse: ["7L29", "6L29", "5L29"], - darkpulse: ["7M", "6M", "5T"], - destinybond: ["7L49", "6L49", "5L49"], - disable: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], - doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - faketears: ["7E", "6E", "5E"], - flash: ["6M", "5M"], - frustration: ["7M", "6M", "5M"], - grudge: ["7L41", "6L41", "5L41"], - guardsplit: ["7L33", "6L33", "5L33"], - haze: ["7L9", "6L9", "5L9"], - healblock: ["7E", "6E", "5E"], - hex: ["7L17", "6L17", "5L17"], - hiddenpower: ["7M", "6M", "5M"], - imprison: ["7E", "6E", "5E"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T"], - knockoff: ["6T", "5T"], - magiccoat: ["6T", "5T"], - meanlook: ["7L45", "6L45", "5L45"], - memento: ["7E", "6E", "5E"], - nastyplot: ["7E", "6E", "5E"], - nightmare: ["7E", "6E", "5E"], - nightshade: ["7L13", "6L13", "5L13"], - ominouswind: ["7L25", "6L25", "5L25"], - painsplit: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - powersplit: ["7L33", "6L33", "5L33"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], psychic: ["7M", "6M", "5M"], psychup: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + recover: ["7L17", "7E", "6L17", "6E", "5L17", "5E"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], - shockwave: ["6T"], - skillswap: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - toxicspikes: ["7E", "6E"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - willowisp: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T"], + waterfall: ["7M", "6M", "5M"], + waterpulse: ["7T", "7L22", "6T", "6L22", "5L22"], + watersport: ["7L1", "6L1", "5L1"], + waterspout: ["7L61", "6L61", "5L61"], + willowisp: ["7M", "6M", "5M"], + wringout: ["7L55", "6L55", "5L55"], }}, - cofagrigus: {learnset: { - afteryou: ["6T", "5T"], - astonish: ["7L1", "6L1", "5L1"], + jellicent: {learnset: { + absorb: ["7L5", "7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + blizzard: ["7M", "6M", "5M"], + brine: ["7L32", "6L32", "5L32", "5S0"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L13", "6L13", "5L13"], confide: ["7M", "6M"], - curse: ["7L29", "6L29", "5L29"], darkpulse: ["7M", "6M", "5T"], - destinybond: ["7L57", "6L57", "5L57"], - disable: ["7L5", "7L1", "6L1", "5L1"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], + gigadrain: ["7T", "6T", "5T"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - grudge: ["7L45", "6L45", "5L45"], - guardsplit: ["7L33", "6L33", "5L33"], - haze: ["7L9", "7L1", "6L1", "5L1"], - hex: ["7L17", "6L17", "5L17"], + hail: ["7M", "6M", "5M"], + hex: ["7L45", "6L45", "5L45"], hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L53", "6L53", "5L53"], hyperbeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T"], - knockoff: ["6T", "5T"], - magiccoat: ["6T", "5T"], - meanlook: ["7L51", "6L51", "5L51"], - nightshade: ["7L13", "6L13", "5L13"], - ominouswind: ["7L25", "6L25", "5L25"], - painsplit: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - powersplit: ["7L33", "6L33", "5L33"], - protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + icebeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], + magiccoat: ["7T", "6T", "5T"], + nightshade: ["7L9", "7L1", "6L1", "5L1"], + ominouswind: ["7L27", "6L27", "5L27", "5S0"], + painsplit: ["7T", "6T", "5T"], + protect: ["7M", "6M", "5M"], psychic: ["7M", "6M", "5M"], psychup: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "5S0"], + recover: ["7L17", "6L17", "5L17"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - scaryface: ["7L1", "6L34", "5L34"], + scald: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - shockwave: ["6T"], - skillswap: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - willowisp: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], - wonderroom: ["6T", "5T"], - zenheadbutt: ["6T"], + waterfall: ["7M", "6M", "5M"], + waterpulse: ["7T", "7L22", "6T", "6L22", "5L22", "5S0"], + watersport: ["7L1", "6L1", "5L1"], + waterspout: ["7L69", "7L1", "6L1", "5L69"], + willowisp: ["7M", "6M", "5M"], + wringout: ["7L61", "7L1", "6L1", "5L61"], }}, - tirtouga: {learnset: { - ancientpower: ["7L18", "6L18", "5L18"], - aquajet: ["7L15", "6L15", "5L15", "5S0"], - aquatail: ["7L41", "6T", "6L41", "5T", "5L41"], + alomomola: {learnset: { + aquajet: ["7L9", "6L9", "5L9"], + aquaring: ["7L5", "6L5", "5D", "5L5"], attract: ["7M", "6M", "5M"], - bide: ["7L1", "7E", "6L1", "6E", "5L1", "5E"], - bite: ["7L8", "6L8", "5L8", "5S0"], blizzard: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bodyslam: ["7E", "6E", "5E", "5S0"], - brine: ["7L28", "6L28", "5L28"], - bulldoze: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + brine: ["7L41", "6L41", "5L41"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - crunch: ["7L21", "6L21", "5L21"], - curse: ["7L35", "6L35", "5L35"], - dig: ["6M", "5M"], dive: ["6M", "5M"], + doubleslap: ["7L13", "6L13", "5L13"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - flail: ["7E", "6E", "5E", "5D"], frustration: ["7M", "6M", "5M"], - guardswap: ["7E", "6E"], + hail: ["7M", "6M", "5M"], + healingwish: ["7L57", "7L1", "6L1", "5L57"], + healpulse: ["7L17", "6L17", "5L17"], + helpinghand: ["7T", "7L53", "7L1", "6T", "6L49", "5T", "5L49"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L50", "6L50", "5L51"], + hydropump: ["7L65", "7L1", "6L1", "5L61"], icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - irondefense: ["7E", "6T", "6E", "5T", "5E", "5D"], - irontail: ["6T", "5T"], - knockoff: ["7E", "6T", "6E", "5E"], - liquidation: ["7E"], - protect: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "5S0"], - raindance: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + icywind: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + liquidation: ["7T"], + magiccoat: ["7T", "6T", "5T"], + mirrorcoat: ["7E", "6E", "5D", "5E"], + mist: ["7E", "6E", "5E"], + painsplit: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], + playnice: ["7L1"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + refresh: ["7E", "6E", "5E"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - rocksmash: ["6M", "5M"], - rockthrow: ["7E", "6E", "5E"], - rocktomb: ["7M", "6M", "5M"], - rollout: ["7L5", "6L5", "5L5", "5D"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], + safeguard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], scald: ["7M", "6M", "5M"], secretpower: ["6M"], - shellsmash: ["7L38", "6L38", "5L38"], - slam: ["7E", "6E", "5E"], + shadowball: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + soak: ["7L33", "6L33", "5L33"], substitute: ["7M", "6M", "5M"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], toxic: ["7M", "6M", "5M"], + wakeupslap: ["7L29", "6L29", "5L29"], waterfall: ["7M", "6M", "5M"], - watergun: ["7L1", "6L1", "5L1"], - waterpulse: ["7E", "6T", "6E", "5E"], - whirlpool: ["7E", "6E", "5E"], - wideguard: ["7L25", "6L25", "5L25"], - withdraw: ["7L1", "6L1", "5L1"], - zenheadbutt: ["6T"], + waterpulse: ["7T", "7L25", "6T", "6L25", "5L25"], + watersport: ["7L1", "6L1", "5L1"], + whirlpool: ["7L49"], + wideguard: ["7L61", "7L1", "6L1", "5L53"], + wish: ["7L37", "6L37", "5L37"], }}, - carracosta: {learnset: { - ancientpower: ["7L18", "6L18", "5L18"], - aquajet: ["7L15", "6L15", "5L15"], - aquatail: ["7L45", "6T", "6L45", "5T", "5L45"], + joltik: {learnset: { + absorb: ["7L1"], + agility: ["7L37", "6L37", "5L37"], attract: ["7M", "6M", "5M"], - bide: ["7L1", "6L1", "5L1"], - bite: ["7L8", "6L8", "5L8"], - blizzard: ["7M", "6M", "5M"], - block: ["6T", "5T"], - brine: ["7L28", "6L28", "5L28"], - bulldoze: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + bugbite: ["7T", "7L18", "6T", "6L18", "5T", "5L18"], + bugbuzz: ["7L48", "6L48", "5L48"], + camouflage: ["7E", "6E"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - crunch: ["7L21", "6L21", "5L21"], - curse: ["7L35", "6L35", "5L35"], - dig: ["6M", "5M"], - dive: ["6M", "5M"], + crosspoison: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + disable: ["7E", "6E", "5E"], + discharge: ["7L45", "6L45", "5L45"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], + electroball: ["7L29", "6L29", "5L29"], + electroweb: ["7T", "7L15", "6T", "6L15", "5T", "5L15"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], + feintattack: ["7E", "6E", "5E"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], + furycutter: ["7L12", "6L12", "5L12"], + gastroacid: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + gigadrain: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L61", "6L61", "5L61"], - hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T"], - lowkick: ["6T", "5T"], - protect: ["7M", "7L11", "6M", "6L11", "5M", "5L11"], - raindance: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + infestation: ["7M", "6M"], + leechlife: ["7M", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + lunge: ["7E"], + magnetrise: ["7T", "6T", "5T"], + pinmissile: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rollout: ["7L5", "7L1", "6L1", "5L1"], + rockclimb: ["7E", "6E", "5E"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + screech: ["7L7", "6L7", "5L7"], secretpower: ["6M"], - shellsmash: ["7L40", "6L40", "5L40"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "7L34", "6T", "6L34", "5T", "5L34"], + slash: ["7L26", "6L26", "5L26"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + spiderweb: ["7L1", "6L1", "5L1"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], + suckerpunch: ["7L40", "6L40", "5L40"], swagger: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L4", "6M", "6L4", "5M", "5L4"], toxic: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M"], - watergun: ["7L1", "6L1", "5L1"], - waterpulse: ["6T"], - wideguard: ["7L25", "6L25", "5L25"], - withdraw: ["7L1", "6L1", "5L1"], - zenheadbutt: ["6T"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], }}, - archen: {learnset: { - acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - aerialace: ["7M", "6M", "5M"], - agility: ["7L21", "6L21", "5L21"], - allyswitch: ["7E", "6E"], - ancientpower: ["7L18", "6L18", "5L18"], - aquatail: ["6T", "5T"], + galvantula: {learnset: { + absorb: ["7L1"], + agility: ["7L40", "6L40", "5L40"], attract: ["7M", "6M", "5M"], - bite: ["7E", "6E", "5E"], - bounce: ["6T", "5T"], - bulldoze: ["7M", "6M", "5M"], + bounce: ["7T", "6T", "5T"], + bugbite: ["7T", "7L18", "6T", "6L18", "5T", "5L18"], + bugbuzz: ["7L60", "6L60", "5L60"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - crunch: ["7L35", "6L35", "5L35"], cut: ["6M", "5M"], - defog: ["7E", "6E", "5E"], - dig: ["6M", "5M"], - doubleteam: ["7M", "7L8", "6M", "6L8", "5M", "5L8", "5S0"], - dragonbreath: ["7L31", "6L31", "5L31"], - dragonclaw: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], - dragonpulse: ["7E", "6T", "6E", "5T", "5E"], - earthpower: ["7E", "6T", "6E", "5T", "5E"], - earthquake: ["7M", "6M", "5M"], - endeavor: ["7L38", "6T", "6L38", "5T", "5L38"], + disable: ["5D"], + discharge: ["7L54", "6L54", "5L54"], + doubleteam: ["7M", "6M", "5M"], + electroball: ["7L29", "6L29", "5D", "5L29"], + electroweb: ["7T", "7L15", "6T", "6L15", "5T", "5L15"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], frustration: ["7M", "6M", "5M"], - headsmash: ["7E", "6E", "5E", "5S0"], - heatwave: ["6T", "5T"], + furycutter: ["7L12", "6L12", "5L12"], + gastroacid: ["7T", "7L23", "6T", "6L23", "5T", "5L23"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - irondefense: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["7E", "6T", "6E", "5E"], - leer: ["7L1", "6L1", "5L1"], - pluck: ["7L15", "6L15", "5M", "5L15"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "5L1"], - quickguard: ["7L25", "6L25", "5L25"], + pursuit: ["5D"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - rocksmash: ["6M", "5M"], - rockthrow: ["7L5", "6L5", "5L5"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - scaryface: ["7L11", "6L11", "5L11", "5S0"], + screech: ["7L7", "6L7", "5L7"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "7L34", "6T", "6L34", "5T", "5L34"], + slash: ["7L26", "6L26", "5L26"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - steelwing: ["7M", "7E", "6M", "6E", "5E"], - stoneedge: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + spiderweb: ["7L1", "6L1", "5L1"], + stickyweb: ["7L1", "6L1"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L46", "6L46", "5L46"], swagger: ["7M", "6M", "5M"], - switcheroo: ["7E", "6E"], - tailwind: ["6T", "5T"], - taunt: ["7M", "6M", "5M"], - thrash: ["7L50", "6L50", "5L51"], - torment: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L1"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - wingattack: ["7L1", "6L1", "5L1", "5S0"], - zenheadbutt: ["6T"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], }}, - archeops: {learnset: { - acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - aerialace: ["7M", "6M", "5M"], - agility: ["7L21", "6L21", "5L21"], - ancientpower: ["7L18", "6L18", "5L18"], - aquatail: ["6T", "5T"], - attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - bulldoze: ["7M", "6M", "5M"], + ferroseed: {learnset: { + acidspray: ["7E", "6E"], + bulletseed: ["7E", "6E", "5E"], confide: ["7M", "6M"], - crunch: ["7L35", "6L35", "5L35"], - cut: ["6M", "5M"], - dig: ["6M", "5M"], - doubleteam: ["7M", "7L8", "6M", "6L8", "5M", "5L8"], - dragonbreath: ["7L31", "6L31", "5L31"], - dragonclaw: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], - dragonpulse: ["6T", "5T"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], - endeavor: ["7L40", "6T", "6L40", "5T", "5L40"], + curse: ["7L9", "6L9", "5L9"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], facade: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - heatwave: ["6T", "5T"], + gigadrain: ["7T", "6T", "5T"], + gravity: ["7T", "7E", "6T", "6E", "5T", "5E"], + gyroball: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + harden: ["7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T"], - leer: ["7L1", "6L1", "5L1"], - outrage: ["6T", "5T"], - pluck: ["7L15", "6L15", "5M", "5L15"], + ingrain: ["7L35", "6L35", "5L35"], + irondefense: ["7T", "7L26", "6T", "6L26", "5T", "5L26"], + ironhead: ["7T", "7L43", "6T", "6L43", "5T", "5L43"], + knockoff: ["7T", "6T"], + leechseed: ["7E", "6E", "5E"], + magnetrise: ["7T", "6T", "5T"], + metalclaw: ["7L14", "6L14", "5L14"], + mirrorshot: ["7L30", "6L30", "5L30"], + naturepower: ["7M", "6M"], + payback: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + pinmissile: ["7L18", "6L18", "5L18"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "5L1"], - quickguard: ["7L25", "6L25", "5L25"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], rocksmash: ["6M", "5M"], - rockthrow: ["7L5", "7L1", "6L1", "5L1"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], + rollout: ["7L6", "6L6", "5L6"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - scaryface: ["7L11", "6L11", "5L11"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - skyattack: ["6T", "5T"], + seedbomb: ["7T", "7E", "6T", "6E", "5T", "5E"], + selfdestruct: ["7L38", "6L38", "5L38"], sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spikes: ["7E", "6E", "5E"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - tailwind: ["6T", "5T"], - taunt: ["7M", "6M", "5M"], - thrash: ["7L61", "6L61", "5L61"], - torment: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - wingattack: ["7L1", "6L1", "5L1"], - zenheadbutt: ["6T"], + worryseed: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - trubbish: {learnset: { - acidspray: ["7L12", "6L12", "5L12"], - amnesia: ["7L40", "6L40", "5L40"], - attract: ["7M", "6M", "5M"], - belch: ["7L42", "6L42"], - clearsmog: ["7L34", "6L34", "5L34"], + ferrothorn: {learnset: { + aerialace: ["7M", "6M", "5M"], + block: ["7T", "6T"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E"], - darkpulse: ["7M", "6M", "5T"], - doubleslap: ["7L14", "6L14", "5L14"], + curse: ["7L9", "7L1", "6L1", "5L1"], + cut: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - explosion: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + endeavor: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "7L67", "6M", "6L67", "5M", "5L67"], facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - gunkshot: ["7L45", "6T", "6L45", "5T", "5L45"], - haze: ["7E", "6E", "5E"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + harden: ["7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - mudsport: ["7E", "6E", "5E"], - painsplit: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - poisongas: ["7L1", "6L1", "5L1"], - pound: ["7L1", "6L1", "5L1"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + ingrain: ["7L35", "6L35", "5L35"], + irondefense: ["7T", "7L26", "6T", "6L26", "5T", "5L26"], + ironhead: ["7T", "7L46", "6T", "6L46", "5T", "5L46"], + knockoff: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T"], + metalclaw: ["7L14", "6L14", "5L14"], + mirrorshot: ["7L30", "6L30", "5L30"], + naturepower: ["7M", "6M"], + payback: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + pinmissile: ["7L18", "6L18", "5L18"], + poisonjab: ["7M", "6M", "5M"], + powerwhip: ["7L1", "6L40", "5L40"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - recycle: ["7L3", "6T", "6L3", "5T", "5L3"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7E", "6E", "5E"], - rollout: ["7E", "6E", "5E"], + rockclimb: ["7L1", "6L1", "5L1"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rollout: ["7L6", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], - sandattack: ["7E", "6E", "5E"], + sandstorm: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - selfdestruct: ["7E", "6E", "5E"], + seedbomb: ["7T", "6T", "5T"], + selfdestruct: ["7L38", "6L38", "5L38"], + shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - sludge: ["7L18", "6L18", "5L18"], - sludgebomb: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - spikes: ["7E", "6E", "5E"], - spite: ["6T", "5T"], - stockpile: ["7L23", "6L23", "5L23"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["7T", "6T", "5T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swallow: ["7L23", "6L23", "5L23"], - takedown: ["7L25", "6L25", "5L25"], - thief: ["7M", "6M", "5M"], - toxic: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - toxicspikes: ["7L7", "6L7", "5L7"], - venoshock: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + worryseed: ["7T", "6T", "5T"], }}, - garbodor: {learnset: { - acidspray: ["7L12", "6L12", "5L12"], - amnesia: ["7L46", "6L46", "5L46"], - attract: ["7M", "6M", "5M"], - belch: ["7L49", "6L49"], - bodyslam: ["7L25", "6L25", "5L25"], - clearsmog: ["7L34", "6L34", "5L34"], + klink: {learnset: { + autotomize: ["7L31", "6L31", "5L31"], + bind: ["7T", "7L21", "6T", "6L21", "5T", "5L21"], + charge: ["7L6", "6L6", "5L6"], + chargebeam: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], confide: ["7M", "6M"], - darkpulse: ["7M", "6M", "5T"], - doubleslap: ["7L14", "6L14", "5L14"], + discharge: ["7L42", "6L42", "5L42"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - explosion: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], facade: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], - gunkshot: ["7L54", "6T", "6L54", "5T", "5L54"], + geargrind: ["7L16", "6L16", "5L16"], + gravity: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - painsplit: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - poisongas: ["7L1", "6L1", "5L1"], - pound: ["7L1", "6L1", "5L1"], + hyperbeam: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], + irondefense: ["7T", "6T", "5T"], + lockon: ["7L50", "6L50", "5L51"], + magiccoat: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5T"], + metalsound: ["7L45", "6L45", "5L45"], + mirrorshot: ["7L36", "6L36", "5L36"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - recycle: ["7L3", "7L1", "6T", "6L1", "5T", "5L1"], + recycle: ["7T", "6T", "5T"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7L39", "6L39", "5L39"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], + shiftgear: ["7L48", "6L48", "5L48"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludge: ["7L18", "6L18", "5L18"], - sludgebomb: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - sludgewave: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - spite: ["6T", "5T"], - stockpile: ["7L23", "6L23", "5L23"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swallow: ["7L23", "6L23", "5L23"], - thief: ["7M", "6M", "5M"], + telekinesis: ["7T"], thunderbolt: ["7M", "6M", "5M"], - toxic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - toxicspikes: ["7L7", "7L1", "6L1", "5L1"], - venoshock: ["7M", "6M", "5M"], + thundershock: ["7L11", "6L11", "5L11"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + vicegrip: ["7L1", "6L1", "5L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L54", "6L54", "5L54"], }}, - zorua: {learnset: { - aerialace: ["7M", "6M", "5M"], - agility: ["7L37", "6L37", "5L37"], - attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], - captivate: ["7E", "6E", "5E"], + klang: {learnset: { + allyswitch: ["7T"], + autotomize: ["7L31", "6L31", "5L31"], + bind: ["7T", "7L21", "6T", "6L21", "5T", "5L21"], + charge: ["7L6", "7L1", "6L1", "5L1"], + chargebeam: ["7M", "7L26", "6M", "6L26", "5D", "5M", "5L26"], confide: ["7M", "6M"], - copycat: ["7E", "6E"], - counter: ["7E", "6E", "5E"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], - darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E"], - detect: ["7E", "6E", "5E"], - dig: ["6M", "5M"], + discharge: ["7L44", "6L44", "5L44"], doubleteam: ["7M", "6M", "5M"], - embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - extrasensory: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - faketears: ["7L9", "6L9", "5L9"], - feintattack: ["7L17", "6L17", "5L17"], - fling: ["7M", "6M", "5M"], - foulplay: ["7L29", "6T", "6L29", "5T", "5L29"], + flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L13", "6L13", "5L13"], - grassknot: ["7M", "6M", "5M"], + geargrind: ["7L16", "7L1", "6L1", "5L1"], + gravity: ["7T", "6T", "5D", "5T"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hypervoice: ["6T", "5T"], - imprison: ["7L53", "6L53", "5L53"], - incinerate: ["6M", "5M"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - memento: ["7E", "6E", "5E"], - nastyplot: ["7L49", "6L49", "5L49"], - nightdaze: ["7L57", "6L57", "5L57"], - payback: ["7M", "6M", "5M"], + hyperbeam: ["7M", "7L64", "6M", "6L64", "5M", "5L64"], + irondefense: ["7T", "6T", "5T"], + lockon: ["7L56", "6L56", "5L56"], + magiccoat: ["7T", "6T", "5T"], + magnetrise: ["7T", "6T", "5D", "5T"], + metalsound: ["7L48", "6L48", "5L48"], + mirrorshot: ["7L36", "6L36", "5L36"], protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - punishment: ["7L45", "6L45", "5L45"], - pursuit: ["7L5", "6L5", "5L5"], - raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L21", "6L21", "5L21"], - scratch: ["7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7L40", "6L40", "5L40"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], + shiftgear: ["7L52", "6L52", "5L52"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["7E", "6T", "6E", "5T", "5E"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7E", "6E", "5E"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - thief: ["7M", "6M", "5M"], - torment: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + telekinesis: ["7T"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L11", "7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - uproar: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + vicegrip: ["7L1", "6L1", "5L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L60", "6L60", "5L60"], }}, - zoroark: {learnset: { - aerialace: ["7M", "6M", "5M"], - agility: ["7L39", "6L39", "5L39", "5S0"], - attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], + klinklang: {learnset: { + allyswitch: ["7T"], + autotomize: ["7L31", "6L31", "5L31"], + bind: ["7T", "7L21", "6T", "6L21", "5T", "5L21"], + charge: ["7L6", "7L1", "6L1", "5L1"], + chargebeam: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "6S1", "5T"], - dig: ["6M", "5M"], + discharge: ["7L44", "6L44", "5L44"], doubleteam: ["7M", "6M", "5M"], - embargo: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "5S0"], facade: ["7M", "6M", "5M"], - feintattack: ["7L17", "6L17", "5L17"], - flamethrower: ["7M", "6M", "6S1", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - foulplay: ["7L29", "6T", "6L29", "5T", "5L29"], + flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L13", "6L13", "5L13"], + geargrind: ["7L16", "7L1", "6L1", "5L1"], + gearup: ["7L1"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L9", "7L1", "6M", "6L1", "5M", "5L1"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["6T", "5T"], - imprison: ["7L59", "7L1", "6L1", "5L59"], - incinerate: ["6M", "5M"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - nastyplot: ["7L54", "6L54", "5L54"], - nightdaze: ["7L64", "7L1", "6L1", "5L64"], - nightslash: ["7L1", "6L30", "5L30"], - payback: ["7M", "6M", "5M"], + hyperbeam: ["7M", "7L72", "6M", "6L72", "5M", "5L72"], + irondefense: ["7T", "6T", "5T"], + lockon: ["7L60", "6L60", "5L60"], + magiccoat: ["7T", "6T", "5T"], + magneticflux: ["7L1", "6L1"], + magnetrise: ["7T", "6T", "5T"], + metalsound: ["7L48", "6L48", "5L48"], + mirrorshot: ["7L36", "6L36", "5L36"], protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - punishment: ["7L49", "6L49", "5L49", "5S0"], - pursuit: ["7L5", "7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L21", "6L21", "5L21"], - scratch: ["7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7L40", "6L40", "5L40"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], + shiftgear: ["7L54", "6L54", "5L54"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["6S1"], - snarl: ["7M", "6M", "5M", "5S0"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + snore: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["6S1"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - thief: ["7M", "6M", "5M"], - torment: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + telekinesis: ["7T"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L11", "7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - uproar: ["6T", "5T"], - uturn: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + vicegrip: ["7L1", "6L1", "5L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L66", "6L1", "5L66"], }}, - minccino: {learnset: { - afteryou: ["7L49", "6T", "6L49", "5T", "5L49"], - aquatail: ["7E", "6T", "6E", "5T", "5E"], + tynamo: {learnset: { + chargebeam: ["7M", "7L1", "6M", "6L1", "5L1"], + magnetrise: ["7T", "6T", "5T"], + spark: ["7L1", "6L1", "5L1"], + tackle: ["7L1", "6L1", "5L1"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5L1"], + }}, + eelektrik: {learnset: { + acid: ["7L19", "6L19", "5L19"], + acidspray: ["7L49", "6L49", "5L49"], + acrobatics: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - babydolleyes: ["7L3", "6L3"], - calmmind: ["7M", "6M", "5M"], - captivate: ["7L39", "6L39", "5L39"], - charm: ["7L27", "6L27", "5L27"], + bind: ["7T", "7L9", "6T", "6L9", "5T", "5L9"], + bounce: ["7T", "6T", "5T"], + chargebeam: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + coil: ["7L54", "6L54", "5L54"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], - dig: ["6M", "5M"], - doubleslap: ["7L13", "6L13", "5L13"], + crunch: ["7L1", "6L39", "5L39"], + discharge: ["7L29", "6L29", "5L29"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], - encore: ["7L15", "6L15", "5L15"], - endure: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - faketears: ["7E", "6E", "5E"], - flail: ["7E", "6E", "5E"], - fling: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growl: ["5L3"], - gunkshot: ["6T", "5T"], - helpinghand: ["7L7", "6T", "6L7", "5T", "5L7"], + gastroacid: ["7T", "7L64", "6T", "6L64", "5T", "5L64"], + gigadrain: ["7T", "6T", "5T"], + headbutt: ["7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - hypervoice: ["7L43", "6T", "6L43", "5T", "5L43"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - knockoff: ["7E", "6T", "6E", "5T", "5E"], - lastresort: ["7L45", "6T", "6L45", "5T", "5L45"], - mudslap: ["7E", "6E", "5E"], - pound: ["7L1", "6L1", "5L1"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], protect: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shockwave: ["6T"], - sing: ["7L21", "6L21", "5L21"], - slam: ["7L37", "6L37", "5L37"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snore: ["6T", "5T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + spark: ["7L1", "6L1", "5L1"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], + superfang: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - swift: ["7L19", "6L19", "5L19"], - tailslap: ["7L25", "6L25", "5L25"], - tailwhip: ["7E", "6E", "5E"], - thief: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - tickle: ["7L9", "6L9", "5L9"], + thrash: ["7L74", "6L74", "5L74"], + throatchop: ["7T"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], uturn: ["7M", "6M", "5M"], - wakeupslap: ["7L31", "6L31", "5L31"], - workup: ["7M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + zapcannon: ["7L69", "6L69", "5L69"], }}, - cinccino: {learnset: { - afteryou: ["6T", "5T"], - aquatail: ["6T", "5T"], + eelektross: {learnset: { + acid: ["7L1", "6L1", "5L1"], + acrobatics: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - bulletseed: ["7L1", "6L1", "5L1"], - calmmind: ["7M", "6M", "5M"], + bind: ["7T", "6T", "5T"], + bounce: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + coil: ["7L1", "6L1"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - dazzlinggleam: ["7M", "6M"], - dig: ["6M", "5M"], + crunch: ["7L1", "6L1", "5L1"], + crushclaw: ["7L1", "6L1", "5L1"], + cut: ["6M", "5M"], + discharge: ["7L1", "6L1", "5L1"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "6T"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], + gastroacid: ["7T", "7L1", "6T", "6L1", "5T"], + gigadrain: ["7T", "6T", "5T"], gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gunkshot: ["6T", "5T"], - helpinghand: ["7L1", "6T", "6L1", "5T", "5L1"], + headbutt: ["7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["6T", "5T"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - lastresort: ["6T", "5T"], + iondeluge: ["7L1", "6L1"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + outrage: ["7T", "6T"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockblast: ["7L1", "6L1", "5L1"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shockwave: ["6T"], - sing: ["7L1", "6L1", "5L1"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], + superfang: ["7T", "6T", "5T"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - tailslap: ["7L1", "6L1", "5L1"], - thief: ["7M", "6M", "5M"], + thrash: ["7L1", "6L1"], + throatchop: ["7T"], thunder: ["7M", "6M", "5M"], thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], thunderwave: ["7M", "6M", "5M"], - tickle: ["7L1", "6L1", "5L1"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], uturn: ["7M", "6M", "5M"], - workup: ["7M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L1", "6L1"], }}, - gothita: {learnset: { + elgyem: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T", "7E", "6E", "5M"], + astonish: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - captivate: ["7E", "6E", "5E"], + barrier: ["7E", "6E", "5D", "5E"], + calmmind: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], chargebeam: ["7M", "6M", "5M"], - charm: ["7L46", "6L46", "5L46"], confide: ["7M", "6M"], - confusion: ["7L3", "6L3", "5L3"], - covet: ["6T", "5T"], - darkpulse: ["7M", "7E", "6M", "6E", "5E"], - doubleslap: ["7L14", "6L14", "5L14"], + confusion: ["7L1", "6L1", "5L1"], + cosmicpower: ["7E", "6E"], + darkpulse: ["7M", "6M", "5T"], + disable: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - faketears: ["7L10", "6L10", "5L10"], - feintattack: ["7L24", "6L24", "5L24"], flash: ["6M", "5M"], - flatter: ["7L28", "6L28", "5L28"], - fling: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - healbell: ["6T", "5T"], - healblock: ["7L33", "6L33", "5L33"], - healpulse: ["7E", "6E"], - helpinghand: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + growl: ["7L4", "6L4", "5L4"], + guardsplit: ["7L50", "6L50", "5L50"], + guardswap: ["7E", "6E", "5E"], + headbutt: ["7L18", "6L18", "5L18"], + healblock: ["7L8", "6L8", "5D", "5L8"], + hiddenpower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + imprison: ["7L25", "6L25", "5L25"], lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magicroom: ["7L48", "6T", "6L48", "5T", "5L48"], - meanlook: ["7E", "6E", "5E"], - miracleeye: ["7E", "6E", "5E"], - mirrorcoat: ["7E", "6E", "5E"], - payback: ["7M", "6M", "5M"], - playnice: ["7L8", "6L8"], - pound: ["7L1", "6L1", "5L1"], + magiccoat: ["7T", "6T", "5T"], + miracleeye: ["7L11", "6L11", "5L11"], + nastyplot: ["7E", "6E", "5D", "5E"], + painsplit: ["7T", "6T", "5T"], + powersplit: ["7L50", "6L50", "5L50"], + powerswap: ["7E", "6E", "5E"], protect: ["7M", "6M", "5M"], - psybeam: ["7L16", "6L16", "5L16"], - psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psybeam: ["7L15", "6L15", "5L15"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + recover: ["7L46", "6L46", "5L46"], + recycle: ["7T", "6T", "5T"], reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], rockslide: ["7M", "6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + simplebeam: ["7L29", "6L29", "5L29"], + skillswap: ["7T", "7E", "6T", "6E", "5T", "5E"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - telekinesis: ["7L40", "6L40", "5M", "5L40"], + synchronoise: ["7L53", "6L53", "5L53"], + telekinesis: ["7T", "5M"], + teleport: ["7E", "6E", "5E"], thief: ["7M", "6M", "5M"], thunderbolt: ["7M", "6M", "5M"], thunderwave: ["7M", "6M", "5M"], - tickle: ["7L7", "6L7", "5L7"], - torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - uproar: ["7E", "6T", "6E", "5T", "5E"], - zenheadbutt: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], + wonderroom: ["7T", "7L56", "6T", "6L56", "5T", "5L56"], + zenheadbutt: ["7T", "7L32", "6T", "6L32", "5T", "5L32"], }}, - gothorita: {learnset: { + beheeyem: {learnset: { + afteryou: ["7T", "6T", "5T"], + allyswitch: ["7T", "5M"], attract: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], + calmmind: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], chargebeam: ["7M", "6M", "5M"], - charm: ["7L50", "6L50", "5L50"], confide: ["7M", "6M"], - confusion: ["7L3", "7L1", "6L1", "5L1"], - covet: ["6T", "5T"], - darkpulse: ["7M", "6M"], - doubleslap: ["7L14", "6L14", "5L14"], + confusion: ["7L1", "6L1", "5L1"], + darkpulse: ["7M", "6M", "5T"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - faketears: ["7L10", "6L10", "5L1"], - feintattack: ["7L24", "6L24", "5L24"], flash: ["6M", "5M"], - flatter: ["7L28", "6L28", "5L28", "5S0", "5S1"], - fling: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31", "5S0", "5S1"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - healbell: ["6T", "5T"], - healblock: ["7L34", "6L34", "5L34"], - helpinghand: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - imprison: ["5S1"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + growl: ["7L4", "7L1", "6L1", "5L1"], + guardsplit: ["7L56", "6L56", "5L56"], + headbutt: ["7L18", "6L18", "5L18"], + healblock: ["7L8", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + hyperbeam: ["7M", "6M", "5M"], + imprison: ["7L25", "6L25", "5L25"], lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magicroom: ["7L53", "6T", "6L53", "5T", "5L53"], - mirrorcoat: ["5S0"], - payback: ["7M", "6M", "5M"], - playnice: ["7L1", "6L1"], - pound: ["7L1", "6L1", "5L1"], + magiccoat: ["7T", "6T", "5T"], + miracleeye: ["7L11", "7L1", "6L1", "5L1"], + painsplit: ["7T", "6T", "5T"], + powersplit: ["7L58", "6L58", "5L58"], protect: ["7M", "6M", "5M"], - psybeam: ["7L16", "6L16", "5L16"], + psybeam: ["7L15", "6L15", "5L15"], psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "5S0", "5S1"], + psychicterrain: ["7L1"], + psychup: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + psyshock: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + recover: ["7L50", "6L50", "5L50"], + recycle: ["7T", "6T", "5T"], reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], rockslide: ["7M", "6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + simplebeam: ["7L29", "6L29", "5L29"], + skillswap: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - telekinesis: ["7L43", "6L43", "5M", "5L43"], + synchronoise: ["7L63", "7L1", "6L1", "5L63"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M"], thunderbolt: ["7M", "6M", "5M"], thunderwave: ["7M", "6M", "5M"], - tickle: ["7L7", "7L1", "6L1", "5L1"], - torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - zenheadbutt: ["6T", "5T"], + uproar: ["7T", "6T", "5T"], + wonderroom: ["7T", "7L68", "7L1", "6T", "6L1", "5T", "5L68"], + zenheadbutt: ["7T", "7L32", "6T", "6L32", "5T", "5L32"], }}, - gothitelle: {learnset: { + litwick: {learnset: { + acid: ["7E", "6E", "5E"], + acidarmor: ["7E", "6E", "5E"], + allyswitch: ["7T"], + astonish: ["7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], - charm: ["7L54", "6L54", "5L54"], + captivate: ["7E", "6E", "5E"], + clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - confusion: ["7L3", "7L1", "6L1", "5L1"], - covet: ["6T", "5T"], - darkpulse: ["7M", "6M"], - doubleslap: ["7L14", "6L14", "5L14"], + confuseray: ["7L10", "6L10", "5L10"], + curse: ["7L43", "6L43", "5L43"], + darkpulse: ["7M", "6M", "5T"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + embargo: ["7M", "6M", "5M"], + ember: ["7L1", "6L1", "5L1"], + endure: ["7E", "6E", "5E"], energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - faketears: ["7L10", "6L10", "5L1"], - feintattack: ["7L24", "6L24", "5L24"], + fireblast: ["7M", "6M", "5M"], + firespin: ["7L7", "6L7", "5L7"], + flameburst: ["7L20", "6L20", "5L20"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], flash: ["6M", "5M"], - flatter: ["7L28", "6L28", "5L28"], - fling: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - healbell: ["6T", "5T"], - healblock: ["7L34", "6L34", "5L34"], - helpinghand: ["6T", "5T"], + haze: ["7E", "6E", "5E"], + heatwave: ["7T", "7E", "6T", "6E", "5T", "5E"], + hex: ["7L28", "6L28", "5L28"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - lightscreen: ["7M", "6M", "5M"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magicroom: ["7L59", "6T", "6L59", "5T", "5L59"], + imprison: ["7L24", "6L24", "5L24"], + incinerate: ["6M", "5M"], + inferno: ["7L38", "6L38", "5L38"], + memento: ["7L33", "6L33", "5L33"], + minimize: ["7L3", "6L3", "5L3"], + nightshade: ["7L13", "6L13", "5L13"], + overheat: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], + painsplit: ["7T", "7L55", "6T", "6L55", "5T", "5L55"], payback: ["7M", "6M", "5M"], - playnice: ["7L1", "6L1"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], + powersplit: ["7E", "6E"], protect: ["7M", "6M", "5M"], - psybeam: ["7L16", "6L16", "5L16"], - psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychic: ["7M", "6M", "5M"], psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - raindance: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], - reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["6T", "5T"], + shadowball: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], + smog: ["7L5", "6L5", "5L5"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], taunt: ["7M", "6M", "5M"], - telekinesis: ["7L45", "6L45", "5M", "5L45"], + telekinesis: ["7T", "5M"], thief: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - tickle: ["7L7", "7L1", "6L1", "5L1"], - torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - zenheadbutt: ["6T", "5T"], + willowisp: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], }}, - solosis: {learnset: { - acidarmor: ["7E", "6E", "5E"], - afteryou: ["6T", "5T"], - astonish: ["7E", "6E", "5E"], + lampent: {learnset: { + allyswitch: ["7T"], + astonish: ["7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M"], - charm: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E"], + confuseray: ["7L10", "6L10", "5L10"], + curse: ["7L45", "6L45", "5L45"], + darkpulse: ["7M", "6M", "5T"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], embargo: ["7M", "6M", "5M"], - endeavor: ["7L28", "6T", "6L28", "5T", "5L28"], + ember: ["7L1", "6L1", "5L1"], energyball: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firespin: ["7L7", "6L7", "5L7"], + flameburst: ["7L20", "6L20", "5L20"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M"], - healblock: ["7L46", "6L46", "5L46"], - helpinghand: ["7E", "6T", "6E"], - hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], - imprison: ["7E", "6E", "5E"], - infestation: ["7M", "6M"], - irondefense: ["6T"], - lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], - magiccoat: ["6T", "5T"], - nightshade: ["7E", "6E", "5E"], - painsplit: ["7L33", "6T", "6L33", "5T", "5L33"], + heatwave: ["7T", "6T", "5T"], + hex: ["7L28", "6L28", "5L28"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["7L24", "6L24", "5L24"], + incinerate: ["6M", "5M"], + inferno: ["7L38", "6L38", "5L38"], + memento: ["7L33", "6L33", "5L33"], + minimize: ["7L3", "7L1", "6L1", "5L1"], + nightshade: ["7L13", "6L13", "5L13"], + overheat: ["7M", "7L69", "6M", "6L69", "5M", "5L69"], + painsplit: ["7T", "7L61", "6T", "6L61", "5T", "5L61"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychic: ["7M", "6M", "5M"], psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - psywave: ["7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], - recover: ["7L24", "6L24", "5L24"], - reflect: ["7M", "7L3", "6M", "6L3", "5M", "5L3"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], - rollout: ["7L7", "6L7", "5L7"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - secretpower: ["7E", "6M", "6E", "5E"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["7L40", "6T", "6L40", "5T", "5L40"], + secretpower: ["6M"], + shadowball: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["7L10", "6T", "6L10", "5T", "5L10"], - snore: ["6T", "5T"], + smog: ["7L5", "7L1", "6L1", "5L1"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["7E", "6T", "6E", "5T", "5E"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - wonderroom: ["7L48", "6T", "6L48", "5T", "5L48"], - zenheadbutt: ["6T", "5T"], + willowisp: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], }}, - duosion: {learnset: { - afteryou: ["6T", "5T"], + chandelure: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], calmmind: ["7M", "6M", "5M"], - charm: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L1"], + darkpulse: ["7M", "6M", "5T"], doubleteam: ["7M", "6M", "5M"], dreameater: ["7M", "6M", "5M"], embargo: ["7M", "6M", "5M"], - endeavor: ["7L28", "6T", "6L28", "5T", "5L28"], - energyball: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M", "5S0"], facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + flameburst: ["7L1", "6L1", "5L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M"], - healblock: ["7L50", "6L50", "5L50"], - helpinghand: ["6T"], - hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], - imprison: ["5D"], - infestation: ["7M", "6M"], - irondefense: ["6T"], - lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], - magiccoat: ["6T", "5T"], - painsplit: ["7L34", "6T", "6L34", "5T", "5L34"], + gigaimpact: ["7M", "6M", "5M"], + heatwave: ["7T", "6T", "5T", "5S0"], + hex: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + laserfocus: ["7T"], + overheat: ["7M", "6M", "5M"], + painsplit: ["7T", "7L1", "6T", "6L1", "5T"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychic: ["7M", "6M", "5M", "5S0"], psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - psywave: ["7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], - recover: ["7L24", "6L24", "5L24", "5D"], - reflect: ["7M", "7L3", "7L1", "6M", "6L1", "5M", "5L1"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], - rollout: ["7L7", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["7L43", "6T", "6L43", "5T", "5L43"], + shadowball: ["7M", "6M", "5M", "5S0"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], - snore: ["6T", "5T"], + smog: ["7L1", "6L1", "5L1"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["7T", "6T", "5T"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T", "5D"], + trick: ["7T", "6T", "5T"], trickroom: ["7M", "6M", "5M"], - wonderroom: ["7L53", "6T", "6L53", "5T", "5L53"], - zenheadbutt: ["6T", "5T"], + willowisp: ["7M", "6M", "5M"], }}, - reuniclus: {learnset: { - afteryou: ["6T", "5T"], + axew: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + assurance: ["7L7", "6L7", "5L7"], attract: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - charm: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - dizzypunch: ["7L1", "6L41", "5L41"], + counter: ["7E", "6E", "5D", "5E"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - endeavor: ["7L28", "6T", "6L28", "5T", "5L28"], - energyball: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S1"], + dragondance: ["7L32", "6L32", "5L32"], + dragonpulse: ["7T", "7L41", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E"], + dragonrage: ["7L10", "6L10", "5D", "5L10", "5S2", "5S1", "5S0"], + dualchop: ["7T", "7L13", "6T", "6L13", "5T", "5L13"], + endeavor: ["7T", "7E", "6T", "6E", "5T", "5E"], + endure: ["7E", "6E", "5E", "5S1"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], + focusenergy: ["7E", "6E", "5E"], frustration: ["7M", "6M", "5M"], - futuresight: ["7L31", "6L31", "5L31"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M"], - healblock: ["7L54", "6L54", "5L54"], - helpinghand: ["6T", "5T"], - hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], - hyperbeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - infestation: ["7M", "6M"], - irondefense: ["6T"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], - magiccoat: ["6T", "5T"], - painsplit: ["7L34", "6T", "6L34", "5T", "5L34"], - poweruppunch: ["6M"], + gigaimpact: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "5S2"], + guillotine: ["7L50", "6L50", "5L51"], + harden: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + leer: ["7L4", "6L4", "5L4"], + nightslash: ["7E", "6E", "5D", "5E"], + outrage: ["7T", "7L56", "6T", "6L56", "5T", "5L56", "5S2"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - psywave: ["7L1", "6L1", "5L1"], raindance: ["7M", "6M", "5M"], - recover: ["7L24", "6L24", "5L24"], - reflect: ["7M", "7L3", "7L1", "6M", "6L1", "5M", "5L1"], + razorwind: ["7E", "6E", "5E"], rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M", "5S1"], + reversal: ["7E", "6E", "5E"], + roar: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], - rollout: ["7L7", "7L1", "6L1", "5L1"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + scaryface: ["7L16", "6L16", "5L16"], + scratch: ["7L1", "6L1", "5L1", "5S2", "5S0"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - skillswap: ["7L45", "6T", "6L45", "5T", "5L45"], + shockwave: ["7T", "6T"], + slash: ["7L20", "6L20", "5L20"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], - thunderwave: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - wonderroom: ["7L59", "6T", "6L59", "5T", "5L59"], - zenheadbutt: ["6T", "5T"], + xscissor: ["7M", "6M", "5M"], }}, - ducklett: {learnset: { - aerialace: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - aircutter: ["7E", "6E", "5E"], - airslash: ["7L27", "6L27", "5L27"], - aquaring: ["7L24", "6L24", "5L24"], + fraxure: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + assurance: ["7L7", "7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - bravebird: ["7L41", "6L41", "5L41"], - brine: ["7E", "6E", "5E", "5D"], - bubblebeam: ["7L19", "6L19", "5L19"], confide: ["7M", "6M"], - defog: ["7L6", "6L6", "5L6", "5D"], - dive: ["6M", "5M"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + dragondance: ["7L32", "6L32", "5L32"], + dragonpulse: ["7T", "7L42", "6T", "6L42", "5T", "5L42"], + dragonrage: ["7L10", "7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + dualchop: ["7T", "7L13", "6T", "6L13", "5T", "5L13"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - featherdance: ["7L21", "6L21", "5L21"], - fly: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + fling: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gust: ["7E", "6E", "5E"], - hail: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L66", "6M", "6L66", "5M", "5L66"], + guillotine: ["7L54", "6L54", "5L54"], hiddenpower: ["7M", "6M", "5M"], - hurricane: ["7L46", "6L46", "5L46"], - icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - luckychant: ["7E", "6E", "5E"], - mefirst: ["7E", "6E", "5E", "5D"], - mirrormove: ["7E", "6E", "5E"], - mudsport: ["7E", "6E"], - pluck: ["5M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + outrage: ["7T", "7L60", "6T", "6L60", "5T", "5L60"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roost: ["7M", "7L30", "6M", "6L30", "5T", "5L30"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + scaryface: ["7L16", "6L16", "5L16"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + slash: ["7L20", "6L20", "5L20"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "7E", "6M", "6E", "5E"], + snore: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - surf: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], + swordsdance: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - watergun: ["7L1", "6L1", "5L1"], - waterpulse: ["7L13", "6T", "6L13", "5L13"], - watersport: ["7L3", "6L3", "5L3"], - wingattack: ["7L9", "6L9", "5L9"], + xscissor: ["7M", "6M", "5M"], }}, - swanna: {learnset: { - aerialace: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], - airslash: ["7L27", "6L27", "5L27"], - aquaring: ["7L24", "6L24", "5L24"], + haxorus: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], + assurance: ["7L7", "7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - bravebird: ["7L47", "6L47", "5L47"], - bubblebeam: ["7L19", "6L19", "5L19"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - defog: ["7L6", "7L1", "6L1", "5L1"], - dive: ["6M", "5M"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + dragondance: ["7L32", "6L32", "5L32", "5S0"], + dragonpulse: ["7T", "7L42", "6T", "6L42", "5T", "5L42"], + dragonrage: ["7L10", "7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + dualchop: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "5S0"], + earthquake: ["7M", "6M", "5M", "5S0"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - featherdance: ["7L21", "6L21", "5L21"], - fly: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L74", "6M", "6L74", "5M", "5L74"], + grassknot: ["7M", "6M", "5M"], + guillotine: ["7L58", "6L58", "5L58"], hiddenpower: ["7M", "6M", "5M"], - hurricane: ["7L55", "6L55", "5L55"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - pluck: ["5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + outrage: ["7T", "7L66", "7L1", "6T", "6L1", "5T", "5L66"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roost: ["7M", "7L30", "6M", "6L30", "5T", "5L30"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + scaryface: ["7L16", "6L16", "5L16"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - skyattack: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + slash: ["7L20", "6L20", "5L20"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], + snore: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - tailwind: ["7L40", "6T", "6L40", "5T", "5L40"], + swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - watergun: ["7L1", "6L1", "5L1"], - waterpulse: ["7L13", "6T", "6L13", "5L13"], - watersport: ["7L3", "7L1", "6L1", "5L1"], - wingattack: ["7L9", "7L1", "6L1", "5L1"], + xscissor: ["7M", "6M", "5M", "5S0"], }}, - vanillite: {learnset: { - acidarmor: ["7L31", "6L31", "5L31"], - astonish: ["7L7", "6L7", "5L7"], + cubchoo: {learnset: { + aerialace: ["7M", "6M", "5M"], + assurance: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - autotomize: ["7E", "6E", "5E"], - avalanche: ["7L19", "6L19", "5L19"], - blizzard: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + avalanche: ["7E", "6E", "5E"], + bide: ["7L9", "6L9", "5L9", "5S0"], + blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + brine: ["7L21", "6L21", "5L21"], + charm: ["7L29", "6L29", "5L29"], confide: ["7M", "6M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E"], + endure: ["7L25", "6L25", "5L25"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + flail: ["7L36", "6L36", "5L36"], + fling: ["7M", "6M", "5M"], + focuspunch: ["7T", "7E", "6T", "6E", "5E"], frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - hail: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], - harden: ["7L4", "6L4", "5L4"], + furyswipes: ["7L17", "6L17", "5L17"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L5", "5S0"], + hail: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], hiddenpower: ["7M", "6M", "5M"], - icebeam: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], - iceshard: ["7E", "6E", "5E"], - iciclespear: ["7L1", "6L1", "5L1"], - icywind: ["7L13", "6T", "6L13", "5T", "5L13"], - imprison: ["7E", "6E", "5E"], - irondefense: ["7E", "6T", "6E", "5T", "5E"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magnetrise: ["7E", "6T", "6E", "5T", "5E"], - mirrorcoat: ["7L44", "6L44", "5L44"], - mirrorshot: ["7L26", "6L26", "5L26"], - mist: ["7L16", "6L16", "5L16"], - naturalgift: ["7E", "6E", "5E"], - powdersnow: ["7E", "6E", "5E"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["7T", "7E", "6T", "6E", "5T", "5E"], + icywind: ["7T", "7L13", "6T", "6L13", "5T", "5L13", "5S0"], + lowkick: ["7T", "6T", "5T"], + nightslash: ["7E", "6E", "5E"], + playnice: ["7L15", "6L15"], + playrough: ["7E", "6E"], + powdersnow: ["7L5", "6L5", "5L1", "5S0"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], + rest: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - sheercold: ["7L53", "6L53", "5L53"], - signalbeam: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + sheercold: ["7L57", "6L57", "5L57"], + slash: ["7L33", "6L33", "5L33"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + thrash: ["7L53", "6L53", "5L53"], toxic: ["7M", "6M", "5M"], - uproar: ["7L10", "6T", "6L10", "5T", "5L10"], - waterpulse: ["7E", "6T", "6E", "5E"], + waterpulse: ["7T", "6T"], + yawn: ["7E", "6E", "5E"], }}, - vanillish: {learnset: { - acidarmor: ["7L31", "6L31", "5L31"], - astonish: ["7L7", "7L1", "6L1", "5L1"], + beartic: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L1", "6L1", "5L1"], attract: ["7M", "6M", "5M"], - avalanche: ["7L19", "6L19", "5L19"], - blizzard: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + bide: ["7L9", "7L1", "6L1", "5L1"], + blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + brickbreak: ["7M", "6M", "5M"], + brine: ["7L21", "6L21", "5L21"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], + covet: ["7T", "6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7L25", "6L25", "5L25"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + flail: ["7L36", "6L36", "5L36"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - hail: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], - harden: ["7L4", "7L1", "6L1", "5L1"], + furyswipes: ["7L17", "6L17", "5L17"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L1"], + hail: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], hiddenpower: ["7M", "6M", "5M"], - icebeam: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - iceshard: ["5D"], - iciclespear: ["7L1", "6L1", "5L1"], - icywind: ["7L13", "6T", "6L13", "5T", "5L13"], - imprison: ["5D"], - irondefense: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magnetrise: ["6T", "5T"], - mirrorcoat: ["7L47", "6L47", "5L47"], - mirrorshot: ["7L26", "6L26", "5L26", "5D"], - mist: ["7L16", "6L16", "5L16"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["7T", "6T", "5T"], + iciclecrash: ["7L1", "6L37", "5L37"], + icywind: ["7T", "7L13", "7L1", "6T", "6L1", "5T", "5L1"], + lowkick: ["7T", "6T", "5T"], + playnice: ["7L15", "6L9"], + powdersnow: ["7L5", "7L1", "6L1", "5L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], + rest: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - sheercold: ["7L58", "6L58", "5L58"], - signalbeam: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + sheercold: ["7L66", "7L1", "6L1", "5L66"], + slash: ["7L33", "6L33", "5L33"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + superpower: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L59", "7L1", "6L1", "5L59"], + throatchop: ["7T"], toxic: ["7M", "6M", "5M"], - uproar: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], - waterpulse: ["6T"], + waterpulse: ["7T", "6T"], }}, - vanilluxe: {learnset: { - acidarmor: ["7L31", "6L31", "5L31"], - astonish: ["7L7", "7L1", "6L1", "5L1"], + cryogonal: {learnset: { + acidarmor: ["7L17", "6L29", "5L29"], + acrobatics: ["7M", "6M", "5M"], + ancientpower: ["7L21"], attract: ["7M", "6M", "5M"], - avalanche: ["7L19", "6L19", "5L19"], - blizzard: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + aurorabeam: ["7L13", "6L25", "5L25"], + auroraveil: ["7M"], + bind: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + blizzard: ["7M", "6M", "5M"], confide: ["7M", "6M"], + confuseray: ["7L41", "6L45", "5L45"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], explosion: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], flashcannon: ["7M", "6M", "5M"], - freezedry: ["7L1", "6L1"], + freezedry: ["7L49", "6L50"], frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - hail: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], - harden: ["7L4", "7L1", "6L1", "5L1"], + hail: ["7M", "6M", "5M"], + haze: ["7L9", "6L1", "5L21"], hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - iciclespear: ["7L1", "6L1", "5L1"], - icywind: ["7L13", "6T", "6L13", "5T", "5L13"], - irondefense: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magnetrise: ["6T", "5T"], - mirrorcoat: ["7L50", "6L50", "5L50"], - mirrorshot: ["7L26", "6L26", "5L26"], - mist: ["7L16", "6L16", "5L16"], + icebeam: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], + iceshard: ["7L1", "6L1", "5L5"], + icywind: ["7T", "7L5", "6T", "6L17", "5T", "5L17"], + irondefense: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L29", "6M", "6L37", "5M", "5L37"], + magiccoat: ["7T", "6T", "5T"], + mist: ["7L9", "6L1", "5L21"], + nightslash: ["7L53", "7L1", "6L1", "5L57"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], + rapidspin: ["7L1", "6L13", "5L13"], + recover: ["7L45", "6L49", "5L49"], + reflect: ["7M", "7L33", "6M", "6L37", "5M", "5L37"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - sheercold: ["7L67", "7L1", "6L1", "5L67"], - signalbeam: ["6T", "5T"], + sharpen: ["7L1", "6L9", "5L9"], + sheercold: ["7L57", "7L1", "6L1", "5L61"], + signalbeam: ["7T", "6T", "5T"], + slash: ["7L37", "6L41", "5L41"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "7L50", "6M", "6L53", "5M", "5L53"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], toxic: ["7M", "6M", "5M"], - uproar: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], - waterpulse: ["6T"], - weatherball: ["7L1", "6L1", "5L1"], + waterpulse: ["7T", "6T"], }}, - deerling: {learnset: { - agility: ["7E", "6E", "5E"], - aromatherapy: ["7L28", "6L28", "5L28", "5S0"], + shelmet: {learnset: { + absorb: ["7L1"], + acid: ["7L4", "6L4", "5D", "5L4"], + acidarmor: ["7L32", "6L32", "5L32"], attract: ["7M", "6M", "5M"], - batonpass: ["7E", "6E", "5E"], - bounce: ["6T", "5T"], - camouflage: ["7L1", "6L1", "5L1"], - charm: ["7L36", "6L36", "5L36"], + batonpass: ["7E", "6E", "5D", "5E"], + bide: ["7L8", "6L8", "5L8"], + bodyslam: ["7L40", "6L40", "5L40", "5S1"], + bugbite: ["7T", "6T", "5T"], + bugbuzz: ["7L44", "6L44", "5L44", "5S1"], confide: ["7M", "6M"], - doubleedge: ["7L46", "6L46", "5L46"], - doublekick: ["7L10", "6L10", "5L10"], + curse: ["7L13", "6L13", "5L13"], + doubleedge: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - energyball: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + encore: ["7E", "6E", "5D", "5E", "5S1"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - faketears: ["7E", "6E", "5E"], - feintattack: ["7L16", "6L16", "5L16", "5S0"], - flash: ["6M", "5M"], + feint: ["7E", "6E", "5E"], + finalgambit: ["7L56", "6L56", "5L56"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - grassknot: ["7M", "6M", "5M"], - grasswhistle: ["7E", "6E", "5E"], - growl: ["7L4", "6L4", "5L4"], + gastroacid: ["7T", "6T", "5T"], + gigadrain: ["7T", "7L37", "6T", "6L37", "5T", "5L37", "5S1"], + guardsplit: ["7E", "6E", "5E"], + guardswap: ["7L50", "6L50", "5L52"], hiddenpower: ["7M", "6M", "5M"], - jumpkick: ["7L24", "6L24", "5L24", "5S0"], - lastresort: ["6T", "5T"], - leechseed: ["7L13", "6L13", "5L13"], - lightscreen: ["7M", "6M", "5M"], - naturalgift: ["7E", "6E", "5E"], - naturepower: ["7M", "7L41", "6M", "6L41", "5L41"], - odorsleuth: ["7E", "6E", "5E"], - protect: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "6L1", "5L1"], + megadrain: ["7L20", "6L20", "5L20", "5S0"], + mindreader: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E"], + protect: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S0"], + pursuit: ["7E", "6E", "5E"], raindance: ["7M", "6M", "5M"], + recover: ["7L49", "6L49", "5L49"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - sandattack: ["7L7", "6L7", "5L7"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowball: ["7M", "6M", "5M"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], + signalbeam: ["7T", "6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + spikes: ["7E", "6E", "5E"], + strugglebug: ["7L16", "6M", "6L16", "5M", "5L16", "5S0"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - synthesis: ["7E", "6T", "6E", "5T", "5E"], - tackle: ["7L1", "6L1", "5L1"], - takedown: ["7L20", "6L20", "5L20", "5S0"], - thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - worryseed: ["7E", "6T", "6E", "5T", "5E"], + toxicspikes: ["7E"], + venoshock: ["7M", "6M", "5M"], + yawn: ["7L25", "6L25", "5L25", "5S0"], }}, - sawsbuck: {learnset: { - aromatherapy: ["7L28", "6L28", "5L28"], + accelgor: {learnset: { + absorb: ["7L1"], + acidspray: ["7L4", "7L1", "6L1", "5L1"], + agility: ["7L32", "6L32", "5L32"], attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - camouflage: ["7L1", "6L1", "5L1"], - charm: ["7L36", "6L36", "5L36"], + bugbite: ["7T", "6T", "5T"], + bugbuzz: ["7L44", "6L44", "5L44"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doubleedge: ["7L52", "6L52", "5L52"], - doublekick: ["7L10", "6L10", "5L10"], - doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - energyball: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + doubleteam: ["7M", "7L8", "7L1", "6M", "6L1", "5M", "5L1"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - feintattack: ["7L16", "6L16", "5L16"], - flash: ["6M", "5M"], + finalgambit: ["7L56", "7L1", "6L1", "5L56"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], + gastroacid: ["7T", "6T", "5T"], + gigadrain: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growl: ["7L4", "7L1", "6L1", "5L1"], hiddenpower: ["7M", "6M", "5M"], - hornleech: ["7L1", "6L37", "5L37"], hyperbeam: ["7M", "6M", "5M"], - jumpkick: ["7L24", "6L24", "5L24"], - lastresort: ["6T", "5T"], - leechseed: ["7L13", "6L13", "5L13"], - lightscreen: ["7M", "6M", "5M"], - megahorn: ["7L1", "6L1", "5L1"], - naturepower: ["7M", "7L44", "6M", "6L44", "5L44"], + infestation: ["7M", "6M"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leechlife: ["7M", "6L1", "5L1"], + mefirst: ["7L28", "6L28", "5L28"], + megadrain: ["7L20", "6L20", "5L20"], + powerswap: ["7L52", "7L1", "6L1", "5L52"], protect: ["7M", "6M", "5M"], + quickattack: ["7L13", "7L1", "6L1", "5L1"], raindance: ["7M", "6M", "5M"], + recover: ["7L49", "6L49", "5L49"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - shadowball: ["7M", "6M", "5M"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L60", "6M", "6L60", "5M", "5L60"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + strugglebug: ["7L16", "6M", "6L16", "5M", "5L16"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - synthesis: ["6T", "5T"], - tackle: ["7L1", "6L1", "5L1"], - takedown: ["7L20", "6L20", "5L20"], - thunderwave: ["7M", "6M", "5M"], + swift: ["7L25", "6L25", "5L25"], toxic: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - worryseed: ["6T", "5T"], + uturn: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + venoshock: ["7M", "6M", "5M"], + watershuriken: ["7L1", "6L1"], }}, - emolga: {learnset: { - acrobatics: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], - aerialace: ["7M", "6M", "5M"], - agility: ["7L46", "6L46", "5L46"], - airslash: ["7E", "6E", "5E", "5D"], + stunfisk: {learnset: { + aquatail: ["7T", "6T", "5T"], astonish: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - batonpass: ["7E", "6E", "5E"], - charge: ["7L10", "6L10", "5L10"], - chargebeam: ["7M", "6M", "5M"], - charm: ["7E", "6E", "5E", "5D"], - confide: ["7M", "6M"], - covet: ["7E", "6T", "6E", "5T", "5E"], - cut: ["6M", "5M"], - discharge: ["7L50", "6L50", "5L50"], - doubleteam: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], - electroball: ["7L26", "6L26", "5L26"], - electroweb: ["6T"], - encore: ["7L38", "6L38", "5L38"], - facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - fling: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - iondeluge: ["7E", "6E"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - knockoff: ["6T", "5T"], - lastresort: ["6T", "5T"], - lightscreen: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], - nuzzle: ["7L15", "6L15"], - protect: ["7M", "6M", "5M"], - pursuit: ["7L16", "6L16", "5L16"], - quickattack: ["7L4", "6L4", "5L4", "5D"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E"], - round: ["7M", "6M", "5M"], - secretpower: ["6M"], - shockwave: ["7L22", "7E", "6T", "6L22", "6E", "5L22", "5E"], - signalbeam: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spark: ["7L13", "6L13", "5L13"], - speedswap: ["7E"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwhip: ["7L7", "6L7", "5L7"], - tailwind: ["6T", "5T"], - taunt: ["7M", "6M", "5M"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thundershock: ["7L1", "6L1", "5L1"], - thunderwave: ["7M", "6M", "5M"], - tickle: ["7E", "6E", "5E"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - voltswitch: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], - wildcharge: ["7M", "6M", "5M"], - }}, - karrablast: {learnset: { - aerialace: ["7M", "6M", "5M"], - attract: ["7M", "6M", "5M"], - bugbite: ["7E", "6T", "6E", "5T", "5E", "5D"], - bugbuzz: ["7L28", "6L28", "5L28", "5S0"], + bide: ["7L5", "6L5", "5L5"], + bounce: ["7T", "7L35", "6T", "6L35", "5T", "5L35"], + bulldoze: ["7M", "6M", "5M"], + camouflage: ["7L17", "6L17", "5L17"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E"], - cut: ["6M", "5M"], - doubleedge: ["7L56", "6L56", "5L56"], + curse: ["7E", "6E", "5D", "5E"], + dig: ["6M", "5M"], + discharge: ["7L25", "6L25", "5L25"], doubleteam: ["7M", "6M", "5M"], - drillrun: ["7E", "6T", "6E"], - endure: ["7L8", "6L8", "5L8", "5D"], - energyball: ["7M", "6M", "5M"], + earthpower: ["7T", "7E", "6T", "6E", "5T", "5E"], + earthquake: ["7M", "6M", "5M"], + eerieimpulse: ["7E", "6E"], + electroweb: ["7T", "6T", "5T"], + endeavor: ["7T", "6T", "5T"], + endure: ["7L30", "6L30", "5L30"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "5S0"], - feintattack: ["7E", "6E", "5E"], - flail: ["7L49", "6L49", "5L49", "5S1"], + fissure: ["7L61", "7L1", "6L1", "5L61"], + flail: ["7L55", "7L1", "6L1", "5L55"], + flash: ["6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - furyattack: ["7L16", "6L16", "5L16", "5S0"], - furycutter: ["7L13", "6L13", "5L13"], - gigadrain: ["6T", "5T"], - headbutt: ["7L20", "6L20", "5L20", "5S0"], hiddenpower: ["7M", "6M", "5M"], - hornattack: ["7E", "6E", "5E"], infestation: ["7M", "6M"], - irondefense: ["6T", "5T"], - knockoff: ["7E", "6T", "6E", "5T", "5E"], - leer: ["7L4", "6L4", "5L4"], - megahorn: ["7E", "6E", "5E", "5S1", "5D"], - peck: ["7L1", "6L1", "5L1"], - poisonjab: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + mefirst: ["7E", "6E"], + mudbomb: ["7L21", "6L21", "5L21"], + muddywater: ["7L40", "6L40", "5L40"], + mudshot: ["7L13", "6L13", "5L13"], + mudslap: ["7L1", "6L1", "5D", "5L1"], + mudsport: ["7L1", "6L1", "5L1"], + painsplit: ["7T", "7E", "6T", "6E", "5T", "5E"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], raindance: ["7M", "6M", "5M"], + reflecttype: ["7E", "6E"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + revenge: ["7L50", "6L50", "5L50"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L40", "6L40", "5L40"], - screech: ["7E", "6E", "5E"], + sandstorm: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M"], - signalbeam: ["6T"], - slash: ["7L32", "6L32", "5L32"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - strugglebug: ["6M", "5M"], + shockwave: ["7T", "7E", "6T", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + spark: ["7E", "6E", "5E"], + spite: ["7T", "7E", "6T", "6E", "5T", "5E"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], - takedown: ["7L37", "6L37", "5L37", "5S1"], + tackle: ["7L1", "6L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + thundershock: ["7L9", "6L9", "5L9"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "5S1"], + uproar: ["7T", "6T", "5T"], + watergun: ["7L1", "6L1"], + waterpulse: ["7T", "6T"], + yawn: ["7E", "6E", "5D", "5E"], }}, - escavalier: {learnset: { + mienfoo: {learnset: { + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M"], + allyswitch: ["7T", "7E", "6E"], attract: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bugbite: ["6T", "5T"], - bugbuzz: ["7L28", "6L28", "5L28"], + aurasphere: ["7L61", "6L61", "5L61"], + batonpass: ["7E", "6E", "5E"], + bounce: ["7T", "7L49", "6T", "6L49", "5T", "5L49"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + calmmind: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doubleedge: ["7L1", "6L1"], + detect: ["7L9", "6L9", "5L9"], + dig: ["6M", "5M"], + doubleslap: ["7L17", "6L17", "5L17"], doubleteam: ["7M", "6M", "5M"], - drillrun: ["6T"], - energyball: ["7M", "6M", "5M"], + drainpunch: ["7T", "7L33", "6T", "6L33", "5T", "5L33"], + dualchop: ["7T", "6T", "5T"], + endure: ["7E", "6E", "5E"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], - fellstinger: ["7L60", "7L1", "6L1"], + fakeout: ["7L13", "6L13", "5L13"], + feint: ["7E", "6E", "5E"], + fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + forcepalm: ["7L29", "6L29", "5L29"], frustration: ["7M", "6M", "5M"], - furyattack: ["7L16", "6L16", "5L16"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], - headbutt: ["7L20", "6L20", "5L20"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - irondefense: ["7L40", "6T", "6L40", "5T", "5L40"], - ironhead: ["7L37", "6T", "6L37", "5T", "5L37"], - knockoff: ["6T", "5T"], - leer: ["7L4", "7L1", "6L1", "5L1"], - peck: ["7L1", "6L1", "5L1"], + highjumpkick: ["7L50", "6L50", "5L53"], + jumpkick: ["7L37", "6L37", "5L37"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E"], + lowkick: ["7T", "7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7L5", "6L5", "5L5"], + mefirst: ["7E", "6E", "5E"], + payback: ["7M", "6M", "5M"], poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - quickguard: ["7L8", "7L1", "6L1", "5L1"], + psychup: ["7M", "6M", "5M"], + quickguard: ["7L45", "6L45", "5L45"], raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7L49", "6L49", "5L49"], + reversal: ["7L57", "6L57", "5L57"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - signalbeam: ["6T"], - slash: ["7L32", "6L32", "5L32"], sleeptalk: ["7M", "6M", "5T"], - smartstrike: ["7M"], - snore: ["6T", "5T"], - strugglebug: ["6M", "5M"], + smellingsalts: ["7E", "6E", "5E"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + swift: ["7L21", "6L21", "5L21"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - twineedle: ["7L13", "7L1", "6L1", "5L1"], - xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + vitalthrow: ["7E", "6E", "5E"], + workup: ["7M", "5M"], }}, - foongus: {learnset: { - absorb: ["7L1", "6L1", "5L1"], - afteryou: ["6T", "5T"], - astonish: ["7L8", "6L8", "5L8"], + mienshao: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + allyswitch: ["7T"], attract: ["7M", "6M", "5M"], - bide: ["7L12", "6L12", "5L12"], - bodyslam: ["7E", "6E", "5E"], - clearsmog: ["7L39", "6L39", "5L39"], + aurasphere: ["7L70", "7L1", "6L1", "5L70"], + bounce: ["7T", "7L49", "6T", "6L49", "5T", "5L49"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + calmmind: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], confide: ["7M", "6M"], - defensecurl: ["7E", "6E", "5E"], + detect: ["7L9", "7L1", "6L1", "5L1"], + dig: ["6M", "5M"], + doubleslap: ["7L17", "6L17", "5L17"], doubleteam: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], - energyball: ["7M", "6M", "5M"], + drainpunch: ["7T", "7L33", "6T", "6L33", "5T", "5L33"], + dualchop: ["7T", "7S0", "6T", "5T"], facade: ["7M", "6M", "5M"], - feintattack: ["7L20", "6L20", "5L20"], - flash: ["6M", "5M"], - foulplay: ["6T", "5T"], + fakeout: ["7L13", "7L1", "7S0", "6L1", "5L1"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], + forcepalm: ["7L29", "6L29", "5L29"], frustration: ["7M", "6M", "5M"], - gastroacid: ["7E", "6T", "6E", "5T", "5E"], - gigadrain: ["7L28", "6T", "6L28", "5T", "5L28"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - growth: ["7L6", "7E", "6L6", "6E", "5L6", "5E"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - ingrain: ["7L18", "6L18", "5L18"], - megadrain: ["7L15", "6L15", "5L15"], - naturepower: ["7M", "6M"], + highjumpkick: ["7L56", "7S0", "6L56", "5L56"], + hyperbeam: ["7M", "6M", "5M"], + jumpkick: ["7L37", "6L37", "5L37"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7L5", "7L1", "6L1", "5L1"], payback: ["7M", "6M", "5M"], - poisonpowder: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - ragepowder: ["7L45", "6L45", "5L45"], + psychup: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rollout: ["7E", "6E", "5E"], + reversal: ["7L63", "7L1", "6L1", "5L63"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], - spore: ["7L50", "6L50", "5L50"], - stunspore: ["7E", "6E", "5E"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - sweetscent: ["7L24", "6L24", "5L24"], - synthesis: ["7L35", "6T", "6L35", "5T", "5L35"], - toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], - venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + swift: ["7L21", "6L21", "5L21"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "7L41", "7S0", "6M", "6L41", "5M", "5L41"], + wideguard: ["7L45", "6L45", "5L45"], + workup: ["7M", "5M"], }}, - amoonguss: {learnset: { - absorb: ["7L1", "6L1", "5L1"], - afteryou: ["6T", "5T"], - astonish: ["7L8", "7L1", "6L1", "5L1"], + druddigon: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - bide: ["7L12", "7L1", "6L1", "5L1"], - clearsmog: ["7L43", "6L43", "5L43"], + bite: ["7L9", "6L9", "5D", "5L9"], + bulldoze: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + chipaway: ["7L31", "6L31", "5L31"], confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L25"], + crushclaw: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + dragonpulse: ["7T", "6T", "5T"], + dragonrage: ["7L18", "6L18", "5L18"], + dragontail: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + earthquake: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - feintattack: ["7L20", "6L20", "5L20"], - flash: ["6M", "5M"], - foulplay: ["6T", "5T"], + feintattack: ["7E", "6E", "5E"], + firefang: ["7E", "6E", "5D", "5E"], + firepunch: ["7T", "6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gastroacid: ["6T", "5T"], - gigadrain: ["7L28", "6T", "6L28", "5T", "5L28"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growth: ["7L6", "7L1", "6L1", "5L1"], + glare: ["7E", "6E", "5E"], + gunkshot: ["7T", "6T", "5T"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L5", "6M", "6L5", "5M", "5L5"], hyperbeam: ["7M", "6M", "5M"], - ingrain: ["7L18", "6L18", "5L18"], - megadrain: ["7L15", "6L15", "5L15"], - naturepower: ["7M", "6M"], + incinerate: ["6M", "5M"], + ironhead: ["7T", "6T", "5T"], + irontail: ["7T", "7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1", "5S0"], + metalclaw: ["7E", "6E", "5E"], + nightslash: ["7L40", "6L40", "5L40"], + outrage: ["7T", "7L62", "6T", "6L62", "5T", "5L62"], payback: ["7M", "6M", "5M"], + poisontail: ["7E", "6E", "5E"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - ragepowder: ["7L54", "6L54", "5L54"], + pursuit: ["7E", "6E", "5E"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + revenge: ["7L35", "6L35", "5L35"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7L49", "6L49", "5L49"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], + scaryface: ["7L13", "6L13", "5L13"], + scratch: ["7L1", "6L1", "5L1", "5S0"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + slash: ["7L21", "6L21", "5L21"], sleeptalk: ["7M", "6M", "5T"], sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - spore: ["7L62", "6L62", "5L62"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "7E", "6T", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5D", "5E"], sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "7L55", "6T", "6L55", "5T", "5L55"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - sweetscent: ["7L24", "6L24", "5L24"], - synthesis: ["7L35", "6T", "6L35", "5T", "5L35"], - toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], - venoshock: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E"], + thunderpunch: ["7T", "6T", "5T"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], }}, - frillish: {learnset: { - absorb: ["7L5", "6L5", "5L5"], - acidarmor: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M"], - bind: ["6T", "5T"], - blizzard: ["7M", "6M", "5M"], - brine: ["7L32", "6L32", "5L32"], - bubble: ["7L1", "6L1", "5L1"], - bubblebeam: ["7L13", "6L13", "5L13"], + golett: {learnset: { + allyswitch: ["7T"], + astonish: ["7L1", "6L1", "5L1"], + block: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confuseray: ["7E", "6E", "5E"], - constrict: ["7E", "6E", "5E"], - darkpulse: ["7M", "6M", "5T"], - dazzlinggleam: ["7M", "6M"], - dive: ["6M", "5M"], + curse: ["7L45", "6L40", "5L40"], + defensecurl: ["7L1", "6L1", "5L1"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], + dynamicpunch: ["7L35", "6L30", "5L30"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "7L50", "6M", "6L45", "5M", "5L45"], facade: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5D", "5T"], flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "7L61", "6T", "6L55", "5L55"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - hail: ["7M", "6M", "5M"], - hex: ["7L43", "6L43", "5L43"], + grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7L55", "6L50", "5L50"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L49", "6L49", "5L49"], icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - magiccoat: ["6T", "5T"], - mist: ["7E", "6E", "5E"], - nightshade: ["7L9", "6L9", "5L9"], - ominouswind: ["7L27", "6L27", "5L27"], - painsplit: ["7E", "6T", "6E", "5T", "5E"], + icepunch: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T"], + irondefense: ["7T", "7L17", "6T", "6L17", "5T", "5L17"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magnitude: ["7L30", "6L25", "5L25"], + megapunch: ["7L25", "6L21", "5L21"], + mudslap: ["7L5", "6L5", "5L5"], + nightshade: ["7L40", "6L35", "5L35"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], psychic: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], - recover: ["7L17", "7E", "6L17", "6E", "5L17", "5E"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L9", "6L9", "5D", "5L9"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], + shadowpunch: ["7L13", "6L13", "5L13"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7L21"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - surf: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5D", "5T"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M"], - waterpulse: ["7L22", "6T", "6L22", "5L22"], - watersport: ["7L1", "6L1", "5L1"], - waterspout: ["7L61", "6L61", "5L61"], - willowisp: ["7M", "6M", "5M"], - wringout: ["7L55", "6L55", "5L55"], }}, - jellicent: {learnset: { - absorb: ["7L5", "7L1", "6L1", "5L1"], - attract: ["7M", "6M", "5M"], - bind: ["6T", "5T"], - blizzard: ["7M", "6M", "5M"], - brine: ["7L32", "6L32", "5L32", "5S0"], - bubble: ["7L1", "6L1", "5L1"], - bubblebeam: ["7L13", "6L13", "5L13"], + golurk: {learnset: { + allyswitch: ["7T"], + astonish: ["7L1", "6L1", "5L1"], + block: ["7T", "6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - darkpulse: ["7M", "6M", "5T"], - dazzlinggleam: ["7M", "6M"], - dive: ["6M", "5M"], + curse: ["7L47", "6L40", "5L40"], + defensecurl: ["7L1", "6L1", "5L1"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], + dynamicpunch: ["7L35", "6L30", "5L30"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "7L54", "6M", "6L50", "5M", "5L50"], facade: ["7M", "6M", "5M"], + firepunch: ["7T", "6T", "5T"], flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "7L69", "6T", "6L1", "5L70"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], gigaimpact: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - hex: ["7L45", "6L45", "5L45"], + grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + gyroball: ["7M", "6M", "5M", "5S0"], + hammerarm: ["7L61", "6L60", "5L60", "5S0"], + heavyslam: ["7L1", "6L43", "5L43"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L53", "6L53", "5L53"], - hyperbeam: ["7M", "6M", "5M"], + highhorsepower: ["7L1"], + hyperbeam: ["7M", "6M", "5M", "5S0"], icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - magiccoat: ["6T", "5T"], - nightshade: ["7L9", "7L1", "6L1", "5L1"], - ominouswind: ["7L27", "6L27", "5L27", "5S0"], - painsplit: ["6T", "5T"], + icepunch: ["7T", "6T", "5T"], + icywind: ["7T", "6T", "5T"], + irondefense: ["7T", "7L17", "6T", "6L17", "5T", "5L17"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7T", "6T", "5T"], + magnitude: ["7L30", "6L25", "5L25"], + megapunch: ["7L25", "6L21", "5L21"], + mudslap: ["7L5", "7L1", "6L1", "5L1"], + nightshade: ["7L40", "6L35", "5L35"], + phantomforce: ["7L76", "6L1"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], psychic: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "5S0"], - recover: ["7L17", "6L17", "5L17"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L9", "6L9", "5L9"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], + shadowpunch: ["7L13", "6L13", "5L13", "5S0"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T", "7L21"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - surf: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], + telekinesis: ["7T", "5M"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - waterfall: ["7M", "6M", "5M"], - waterpulse: ["7L22", "6T", "6L22", "5L22", "5S0"], - watersport: ["7L1", "6L1", "5L1"], - waterspout: ["7L69", "7L1", "6L1", "5L69"], - willowisp: ["7M", "6M", "5M"], - wringout: ["7L61", "7L1", "6L1", "5L61"], + zenheadbutt: ["7T", "6T", "5T"], }}, - alomomola: {learnset: { - aquajet: ["7L9", "6L9", "5L9"], - aquaring: ["7L5", "6L5", "5L5", "5D"], + pawniard: {learnset: { + aerialace: ["7M", "6M", "5M"], + assurance: ["7L33", "6L33", "5L33"], attract: ["7M", "6M", "5M"], - blizzard: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - brine: ["7L41", "6L41", "5L41"], - calmmind: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - dive: ["6M", "5M"], - doubleslap: ["7L13", "6L13", "5L13"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - endure: ["7E", "6E", "5E"], + dualchop: ["7T", "6T", "5T"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L17", "6L17", "5L17"], + fling: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - healingwish: ["7L57", "7L1", "6L1", "5L57"], - healpulse: ["7L17", "6L17", "5L17"], - helpinghand: ["7L53", "7L1", "6T", "6L49", "5T", "5L49"], + furycutter: ["7L9", "6L9", "5D", "5L9"], + grassknot: ["7M", "6M", "5M"], + guillotine: ["7L62", "6L62", "5L62"], + headbutt: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L65", "7L1", "6L1", "5L61"], - icebeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - mirrorcoat: ["7E", "6E", "5E", "5D"], - mist: ["7E", "6E", "5E"], - painsplit: ["7E", "6T", "6E", "5T", "5E", "5D"], - playnice: ["7L1"], - pound: ["7L1", "6L1", "5L1"], - protect: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], - psychic: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "7L46", "6T", "6L46", "5T", "5L46"], + ironhead: ["7T", "7L54", "6T", "6L54", "5T", "5L54"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L6", "6L6", "5L6"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + meanlook: ["7E", "6E", "5E"], + metalclaw: ["7L25", "6L25", "5L25"], + metalsound: ["7L38", "6L38", "5L38"], + nightslash: ["7L49", "6L49", "5L49"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychocut: ["7E", "6E", "5D", "5E"], + pursuit: ["7E", "6E", "5E"], + quickguard: ["7E", "6E"], raindance: ["7M", "6M", "5M"], - refresh: ["7E", "6E", "5E"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + revenge: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - scald: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L22", "6L22", "5L22"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L30", "6L30", "5L30"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - soak: ["7L33", "6L33", "5L33"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stealthrock: ["7T", "7E", "6T", "6E", "5T", "5E"], substitute: ["7M", "6M", "5M"], - surf: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5D", "5E"], swagger: ["7M", "6M", "5M"], - tickle: ["7E", "6E", "5E"], + swordsdance: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], toxic: ["7M", "6M", "5M"], - wakeupslap: ["7L29", "6L29", "5L29"], - waterfall: ["7M", "6M", "5M"], - waterpulse: ["7L25", "6T", "6L25", "5L25"], - watersport: ["7L1", "6L1", "5L1"], - whirlpool: ["7L49"], - wideguard: ["7L61", "7L1", "6L1", "5L53"], - wish: ["7L37", "6L37", "5L37"], + xscissor: ["7M", "6M", "5M"], }}, - joltik: {learnset: { - absorb: ["7L1"], - agility: ["7L37", "6L37", "5L37"], + bisharp: {learnset: { + aerialace: ["7M", "6M", "5M"], + assurance: ["7L33", "6L33", "5L33"], attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - bugbite: ["7L18", "6T", "6L18", "5T", "5L18"], - bugbuzz: ["7L48", "6L48", "5L48"], - camouflage: ["7E", "6E"], - chargebeam: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], confide: ["7M", "6M"], - crosspoison: ["7E", "6E", "5E"], cut: ["6M", "5M"], - disable: ["7E", "6E", "5E"], - discharge: ["7L45", "6L45", "5L45"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - electroball: ["7L29", "6L29", "5L29"], - electroweb: ["7L15", "6T", "6L15", "5T", "5L15"], - energyball: ["7M", "6M", "5M"], + dualchop: ["7T", "6T", "5T"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], facade: ["7M", "6M", "5M"], - feintattack: ["7E", "6E", "5E"], - flash: ["6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L17", "6L17", "5L17"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - furycutter: ["7L12", "6L12", "5L12"], - gastroacid: ["7L23", "6T", "6L23", "5T", "5L23"], - gigadrain: ["6T", "5T"], + furycutter: ["7L9", "7L1", "6L1", "5L1"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + guillotine: ["7L71", "7L1", "6L1", "5L71"], hiddenpower: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - leechlife: ["7M", "6L1", "5L1"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - pinmissile: ["7E", "6E", "5E"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7T", "7L46", "6T", "6L46", "5T", "5L46"], + ironhead: ["7T", "7L57", "7L1", "6T", "6L1", "5T", "5L57"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leer: ["7L6", "7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + metalburst: ["7L1", "6L1", "5L1"], + metalclaw: ["7L25", "6L25", "5L25"], + metalsound: ["7L38", "6L38", "5L38"], + nightslash: ["7L49", "6L49", "5L49"], + payback: ["7M", "6M", "5M"], poisonjab: ["7M", "6M", "5M"], - poisonsting: ["7E", "6E", "5E"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockclimb: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - screech: ["7L7", "6L7", "5L7"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L22", "6L22", "5L22"], + scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["7L34", "6T", "6L34", "5T", "5L34"], - slash: ["7L26", "6L26", "5L26"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L30", "6L30", "5L30"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spiderweb: ["7L1", "6L1", "5L1"], - stringshot: ["7L1", "6L1", "5L1"], - strugglebug: ["6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7L40", "6L40", "5L40"], swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L63", "6M", "6L63", "5M", "5L63"], + taunt: ["7M", "6M", "5M"], thief: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "7L4", "6M", "6L4", "5M", "5L4"], + throatchop: ["7T"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L14", "7L1", "6M", "6L1", "5M", "5L1"], toxic: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], xscissor: ["7M", "6M", "5M"], }}, - galvantula: {learnset: { - absorb: ["7L1"], - agility: ["7L40", "6L40", "5L40"], + bouffalant: {learnset: { + aerialace: ["7M", "6M", "5M"], + amnesia: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - bounce: ["6T", "5T"], - bugbite: ["7L18", "6T", "6L18", "5T", "5L18"], - bugbuzz: ["7L60", "6L60", "5L60"], - chargebeam: ["7M", "6M", "5M"], + belch: ["7E", "6E"], + bulldoze: ["7M", "6M", "5M"], confide: ["7M", "6M"], + cottonguard: ["7E"], cut: ["6M", "5M"], - disable: ["5D"], - discharge: ["7L54", "6L54", "5L54"], doubleteam: ["7M", "6M", "5M"], - electroball: ["7L29", "6L29", "5L29", "5D"], - electroweb: ["7L15", "6T", "6L15", "5T", "5L15"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + earthquake: ["7M", "6M", "6S0", "5M"], + endeavor: ["7T", "6T", "5T"], + facade: ["7M", "6M", "6S0", "5M"], + focusenergy: ["7L36", "6L36", "5L36"], frustration: ["7M", "6M", "5M"], - furycutter: ["7L12", "6L12", "5L12"], - gastroacid: ["7L23", "6T", "6L23", "5T", "5L23"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], + furyattack: ["7L11", "6L11", "5L11"], + gigaimpact: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], + headbutt: ["7E", "6E", "5E"], + headcharge: ["7L31", "6L31", "6S0", "5L31"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - leechlife: ["7M", "6L1", "5L1"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], + hornattack: ["7L16", "6L16", "5L16"], + ironhead: ["7T", "7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1"], + megahorn: ["7L41", "6L41", "5L41"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E"], + outrage: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - pursuit: ["5D"], + pursuit: ["7L1", "6L1", "5L1"], + rage: ["7L6", "6L6", "5L6"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + revenge: ["7L26", "6L26", "5L26"], + reversal: ["7L46", "6L46", "5L46"], + rockclimb: ["7E", "6E", "5E"], + rockslide: ["7M", "6M", "6S0", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - screech: ["7L7", "6L7", "5L7"], + scaryface: ["7L21", "6L21", "5L21"], secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["7L34", "6T", "6L34", "5T", "5L34"], - slash: ["7L26", "6L26", "5L26"], + skullbash: ["7E", "6E", "5E"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spiderweb: ["7L1", "6L1", "5L1"], - stickyweb: ["7L1", "6L1"], - stringshot: ["7L1", "6L1", "5L1"], - strugglebug: ["6M", "5M"], + smartstrike: ["7M"], + snore: ["7T", "6T", "5T"], + stomp: ["7E", "6E", "5E"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7L46", "6L46", "5L46"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L1"], + swordsdance: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L50", "6L50", "5L51"], toxic: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], wildcharge: ["7M", "6M", "5M"], - xscissor: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - ferroseed: {learnset: { - acidspray: ["7E", "6E"], - bulletseed: ["7E", "6E", "5E"], + rufflet: {learnset: { + aerialace: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + bravebird: ["7L59", "6L59", "5L59"], + bulkup: ["7M", "6M", "5M"], confide: ["7M", "6M"], - curse: ["7L9", "6L9", "5L9"], + crushclaw: ["7L46", "6L46", "5L46"], + cut: ["6M", "5M"], + defog: ["7T", "7L32", "6L32", "5L32"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - energyball: ["7M", "6M", "5M"], - explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - flashcannon: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - gravity: ["7E", "6T", "6E", "5T", "5E"], - gyroball: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], - harden: ["7L1", "6L1", "5L1"], + furyattack: ["7L5", "6L5", "5L5"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - ingrain: ["7L35", "6L35", "5L35"], - irondefense: ["7L26", "6T", "6L26", "5T", "5L26"], - ironhead: ["7L43", "6T", "6L43", "5T", "5L43"], - knockoff: ["6T"], - leechseed: ["7E", "6E", "5E"], - magnetrise: ["6T", "5T"], - metalclaw: ["7L14", "6L14", "5L14"], - mirrorshot: ["7L30", "6L30", "5L30"], - naturepower: ["7M", "6M"], - payback: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], - pinmissile: ["7L18", "6L18", "5L18"], - poisonjab: ["7M", "6M", "5M"], + honeclaws: ["7L14", "6M", "6L14", "5M", "5L14"], + leer: ["7L1", "6L1", "5L1"], + peck: ["7L1", "6L1", "5L1"], + pluck: ["5M"], protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockclimb: ["7E", "6E", "5E"], - rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - rollout: ["7L6", "6L6", "5L6"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], + scaryface: ["7L19", "6L19", "5L19"], secretpower: ["6M"], - seedbomb: ["7E", "6T", "6E", "5T", "5E"], - selfdestruct: ["7L38", "6L38", "5L38"], + shadowclaw: ["7M", "6M", "5M"], + skydrop: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + slash: ["7L28", "6L28", "5L28"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - spikes: ["7E", "6E", "5E"], - stealthrock: ["7E", "6T", "6E", "5T", "5E"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], + tailwind: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + thrash: ["7L64", "6L64", "5L64"], toxic: ["7M", "6M", "5M"], - worryseed: ["7E", "6T", "6E", "5T", "5E"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L55", "6L55", "5L55"], + wingattack: ["7L10", "6L10", "5L10"], + workup: ["7M", "5M"], }}, - ferrothorn: {learnset: { - aerialace: ["7M", "6M", "5M"], - block: ["6T"], - bulldoze: ["7M", "6M", "5M"], + braviary: {learnset: { + aerialace: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "5S0"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + bravebird: ["7L63", "7L1", "6L1", "5L63"], + bulkup: ["7M", "6M", "5M"], confide: ["7M", "6M"], - curse: ["7L9", "7L1", "6L1", "5L1"], + crushclaw: ["7L46", "6L46", "5L46"], cut: ["6M", "5M"], + defog: ["7T", "7L32", "6L32", "5L32"], doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - energyball: ["7M", "6M", "5M"], - explosion: ["7M", "7L67", "6M", "6L67", "5M", "5L67"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - flashcannon: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], + fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], + furyattack: ["7L5", "7L1", "6L1", "5L1"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - gyroball: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], - harden: ["7L1", "6L1", "5L1"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], + honeclaws: ["7L14", "6M", "6L14", "5M", "5L14", "5S0"], hyperbeam: ["7M", "6M", "5M"], - ingrain: ["7L35", "6L35", "5L35"], - irondefense: ["7L26", "6T", "6L26", "5T", "5L26"], - ironhead: ["7L46", "6T", "6L46", "5T", "5L46"], - knockoff: ["6T", "5T"], - magnetrise: ["6T", "5T"], - metalclaw: ["7L14", "6L14", "5L14"], - mirrorshot: ["7L30", "6L30", "5L30"], - naturepower: ["7M", "6M"], - payback: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], - pinmissile: ["7L18", "6L18", "5L18"], - poisonjab: ["7M", "6M", "5M"], - powerwhip: ["7L1", "6L40", "5L40"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1"], + peck: ["7L1", "6L1", "5L1"], + pluck: ["5M"], protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockclimb: ["7L1", "6L1", "5L1"], - rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - rollout: ["7L6", "7L1", "6L1", "5L1"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L19", "6L19", "5L19", "5S0"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - selfdestruct: ["7L38", "6L38", "5L38"], shadowclaw: ["7M", "6M", "5M"], + skyattack: ["7T", "6T", "5T"], + skydrop: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + slash: ["7L28", "6L28", "5L28"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stealthrock: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "7L1", "6T", "6L1", "5T", "5L51"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], + tailwind: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + thrash: ["7L70", "7L1", "6L1", "5L70"], toxic: ["7M", "6M", "5M"], - worryseed: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L57", "7L1", "6L1", "5L57"], + wingattack: ["7L10", "7L1", "6L1", "5L1", "5S0"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T"], }}, - klink: {learnset: { - autotomize: ["7L31", "6L31", "5L31"], - bind: ["7L21", "6T", "6L21", "5T", "5L21"], - charge: ["7L6", "6L6", "5L6"], - chargebeam: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], + vullaby: {learnset: { + aerialace: ["7M", "6M", "5M"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bravebird: ["7L59", "6L59", "5L59"], confide: ["7M", "6M"], - discharge: ["7L42", "6L42", "5L42"], + cut: ["6M", "5M"], + darkpulse: ["7M", "7L46", "6M", "6L46", "5T", "5L46"], + defog: ["7T", "7L32", "6L32", "5L32"], doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7L23", "6L23", "5L23"], + flatter: ["7L19", "6L19", "5L19"], + fly: ["7M", "6M", "5M"], + foulplay: ["7T", "7E", "6T", "6E", "5T"], frustration: ["7M", "6M", "5M"], - geargrind: ["7L16", "6L16", "5L16"], - gravity: ["6T", "5T"], + furyattack: ["7L5", "6L5", "5L5"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], - irondefense: ["6T", "5T"], - lockon: ["7L50", "6L50", "5L51"], - magiccoat: ["6T", "5T"], - magnetrise: ["6T", "5T"], - metalsound: ["7L45", "6L45", "5L45"], - mirrorshot: ["7L36", "6L36", "5L36"], + incinerate: ["6M", "5M"], + irondefense: ["5T"], + knockoff: ["7T", "7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1"], + meanlook: ["7E", "6E", "5E"], + mirrormove: ["7L64", "6L64", "5L64"], + nastyplot: ["7L14", "6L14", "5L14"], + payback: ["7M", "6M", "5M"], + pluck: ["7L10", "6L10", "5M", "5L10"], protect: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L28", "6L28", "5L28"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - screech: ["7L39", "6L39", "5L39"], + scaryface: ["7E", "6E", "5E"], secretpower: ["6M"], - shiftgear: ["7L48", "6L48", "5L48"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thundershock: ["7L11", "6L11", "5L11"], - thunderwave: ["7M", "6M", "5M"], + tailwind: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - vicegrip: ["7L1", "6L1", "5L1"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L54", "6L54", "5L54"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L55", "6L55", "5L55"], }}, - klang: {learnset: { - autotomize: ["7L31", "6L31", "5L31"], - bind: ["7L21", "6T", "6L21", "5T", "5L21"], - charge: ["7L6", "7L1", "6L1", "5L1"], - chargebeam: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "5D"], + mandibuzz: {learnset: { + aerialace: ["7M", "6M", "5M"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bonerush: ["7L1", "6L1", "5L51"], + bravebird: ["7L63", "7L1", "6L1", "5L63"], confide: ["7M", "6M"], - discharge: ["7L44", "6L44", "5L44"], + cut: ["6M", "5M"], + darkpulse: ["7M", "7L46", "6M", "6L46", "5T", "5L46"], + defog: ["7T", "7L32", "6L32", "5L32"], doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + feintattack: ["7L23", "6L23", "5L23", "5S0"], + flatter: ["7L19", "6L19", "5L19", "5S0"], + fly: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - geargrind: ["7L16", "7L1", "6L1", "5L1"], - gravity: ["6T", "5T", "5D"], + furyattack: ["7L5", "7L1", "6L1", "5L1"], + gigaimpact: ["7M", "6M", "5M"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "7L64", "6M", "6L64", "5M", "5L64"], - irondefense: ["6T", "5T"], - lockon: ["7L56", "6L56", "5L56"], - magiccoat: ["6T", "5T"], - magnetrise: ["6T", "5T", "5D"], - metalsound: ["7L48", "6L48", "5L48"], - mirrorshot: ["7L36", "6L36", "5L36"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irondefense: ["7T", "5T"], + knockoff: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + mirrormove: ["7L70", "7L1", "6L1", "5L70"], + nastyplot: ["7L14", "6L14", "5L14", "5S0"], + payback: ["7M", "6M", "5M"], + pluck: ["7L10", "7L1", "6L1", "5M", "5L1", "5S0"], protect: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L28", "6L28", "5L28"], + raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - screech: ["7L40", "6L40", "5L40"], secretpower: ["6M"], - shiftgear: ["7L52", "6L52", "5L52"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + skyattack: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thundershock: ["7L11", "7L1", "6L1", "5L1"], - thunderwave: ["7M", "6M", "5M"], + tailwind: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - vicegrip: ["7L1", "6L1", "5L1"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L60", "6L60", "5L60"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L57", "7L1", "6L1", "5L57"], }}, - klinklang: {learnset: { - autotomize: ["7L31", "6L31", "5L31"], - bind: ["7L21", "6T", "6L21", "5T", "5L21"], - charge: ["7L6", "7L1", "6L1", "5L1"], - chargebeam: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + heatmor: {learnset: { + aerialace: ["7M", "6M", "5M"], + amnesia: ["7L47", "6L44", "5L46"], + attract: ["7M", "6M", "5M"], + belch: ["7E", "6E"], + bind: ["7T", "7L11", "6T", "6L11", "5T", "5L11"], + bodyslam: ["7E", "6E", "5E"], + bugbite: ["7T", "7L36", "6T", "6L36", "5T", "5L36"], confide: ["7M", "6M"], - discharge: ["7L44", "6L44", "5L44"], + curse: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], + feintattack: ["7E", "6E", "5E"], + fireblast: ["7M", "6M", "5M"], + firelash: ["7L44"], + firepunch: ["7T", "6T", "5T"], + firespin: ["7L16", "6L16", "5L16"], + flameburst: ["7L31", "6L31", "5L31"], + flamethrower: ["7M", "7L50", "6M", "6L47", "5M", "5L51"], + flareblitz: ["7L61"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], - geargrind: ["7L16", "7L1", "6L1", "5L1"], - gearup: ["7L1"], + furyswipes: ["7L21", "6L21", "5L21"], + gastroacid: ["7T", "6T", "5T"], + gigadrain: ["7T", "6T", "5D", "5T"], gigaimpact: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], + heatwave: ["7T", "7E", "6T", "6E", "5D", "5T", "5E"], hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "7L72", "6M", "6L72", "5M", "5L72"], - irondefense: ["6T", "5T"], - lockon: ["7L60", "6L60", "5L60"], - magiccoat: ["6T", "5T"], - magneticflux: ["7L1", "6L1"], - magnetrise: ["6T", "5T"], - metalsound: ["7L48", "6L48", "5L48"], - mirrorshot: ["7L36", "6L36", "5L36"], + honeclaws: ["7L1", "6M", "6L1", "5M"], + incinerate: ["7L1", "6M", "6L1", "5D", "5M", "5L1"], + inferno: ["7L66", "6L1", "5L61"], + knockoff: ["7T", "6T", "5T"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["7T", "6T", "5T"], + nightslash: ["7E", "6E", "5E"], + odorsleuth: ["7L6", "6L6", "5L6"], + overheat: ["7M"], + poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - screech: ["7L40", "6L40", "5L40"], secretpower: ["6M"], - shiftgear: ["7L54", "6L54", "5L54"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L41", "6L41", "5L41"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snatch: ["7T", "7L26", "6T", "6L26", "5T", "5L26"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spitup: ["7L56", "6L50", "5L56"], + stockpile: ["7L56", "6L50", "5L56"], + stompingtantrum: ["7T"], substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5E"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thundershock: ["7L11", "7L1", "6L1", "5L1"], - thunderwave: ["7M", "6M", "5M"], + swallow: ["7L56", "6L50", "5L56"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T", "5T"], + tickle: ["7E", "6E", "5E"], toxic: ["7M", "6M", "5M"], - trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - vicegrip: ["7L1", "6L1", "5L1"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L66", "6L1", "5L66"], - }}, - tynamo: {learnset: { - chargebeam: ["7M", "7L1", "6M", "6L1", "5L1"], - magnetrise: ["6T", "5T"], - spark: ["7L1", "6L1", "5L1"], - tackle: ["7L1", "6L1", "5L1"], - thunderwave: ["7M", "7L1", "6M", "6L1", "5L1"], + willowisp: ["7M", "6M", "5M"], + wrap: ["7E", "6E", "5E"], }}, - eelektrik: {learnset: { - acid: ["7L19", "6L19", "5L19"], - acidspray: ["7L49", "6L49", "5L49"], - acrobatics: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], + durant: {learnset: { + aerialace: ["7M", "6M", "5M"], + agility: ["7L6", "6L16", "5L16"], attract: ["7M", "6M", "5M"], - bind: ["7L9", "6T", "6L9", "5T", "5L9"], - bounce: ["6T", "5T"], - chargebeam: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], - coil: ["7L54", "6L54", "5L54"], + batonpass: ["7E", "6E", "5E"], + bite: ["7L1", "6L11", "5L11"], + bugbite: ["7T", "7L16", "6T", "6L26", "5T", "5L26"], confide: ["7M", "6M"], - crunch: ["7L1", "6L39", "5L39"], - discharge: ["7L29", "6L29", "5L29"], + crunch: ["7L21", "6L31", "5L31"], + cut: ["6M", "5M"], + dig: ["7L31", "6M", "6L41", "5M", "5L41"], doubleteam: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], + endure: ["7E", "6E", "5D", "5E"], + energyball: ["7M", "6M", "5M"], + entrainment: ["7L36", "6L46", "5L46"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + feintattack: ["7E", "6E", "5E"], flashcannon: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gastroacid: ["7L64", "6T", "6L64", "5T", "5L64"], - gigadrain: ["6T", "5T"], - headbutt: ["7L1", "6L1", "5L1"], + furycutter: ["7L1", "6L6", "5D", "5L6"], + gigaimpact: ["7M", "6M", "5M"], + guillotine: ["7L51", "7L1", "6L1", "5L61"], hiddenpower: ["7M", "6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], + honeclaws: ["6M", "5M"], + irondefense: ["7T", "7L46", "6T", "6L1", "5T", "5L56"], + ironhead: ["7T", "7L26", "6T", "6L36", "5T", "5L36"], + metalclaw: ["7L11", "6L21", "5L21"], + metalsound: ["7L56", "7L1", "6L1", "5L66"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E"], secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spark: ["7L1", "6L1", "5L1"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superfang: ["6T", "5T"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - thrash: ["7L74", "6L74", "5L74"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], - thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + thunderfang: ["7E", "6E", "5D", "5E"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], - zapcannon: ["7L69", "6L69", "5L69"], + vicegrip: ["7L1", "6L1", "5L1"], + xscissor: ["7M", "7L41", "6M", "6L51", "5M", "5L51"], }}, - eelektross: {learnset: { - acid: ["7L1", "6L1", "5L1"], - acrobatics: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], + deino: {learnset: { + aquatail: ["7T", "6T", "5T"], + assurance: ["7E", "6E", "5E"], + astonish: ["7E", "6E", "5E"], attract: ["7M", "6M", "5M"], - bind: ["6T", "5T"], - bounce: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], - coil: ["7L1", "6L1"], + belch: ["7E"], + bite: ["7L9", "6L9", "5L9"], + bodyslam: ["7L48", "6L48", "5L48"], confide: ["7M", "6M"], - crunch: ["7L1", "6L1", "5L1"], - crushclaw: ["7L1", "6L1", "5L1"], - cut: ["6M", "5M"], - discharge: ["7L1", "6L1", "5L1"], + crunch: ["7L25", "6L25", "5L25"], + darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E"], + doublehit: ["7E", "6E", "5E"], doubleteam: ["7M", "6M", "5M"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["6T"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L17", "6L17", "5L17"], + dragonpulse: ["7T", "7L32", "6T", "6L32", "5T", "5L32"], + dragonrage: ["7L1", "6L1", "5L1", "5S0"], + dragonrush: ["7L42", "6L42", "5L42"], dragontail: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], + earthpower: ["7T", "7E", "6T", "6E", "5T", "5E"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - flamethrower: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - focuspunch: ["6T"], + firefang: ["7E", "6E", "5E"], + focusenergy: ["7L4", "6L4", "5L4"], frustration: ["7M", "6M", "5M"], - gastroacid: ["7L1", "6T", "6L1", "5T"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - headbutt: ["7L1", "6L1", "5L1"], + headbutt: ["7L12", "6L12", "5L12"], + headsmash: ["7E", "6E", "5E"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - iondeluge: ["7L1", "6L1"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - outrage: ["6T"], - poweruppunch: ["6M"], + hypervoice: ["7T", "7L58", "6T", "6L58", "5T", "5L58"], + icefang: ["7E", "6E", "5E"], + incinerate: ["6M", "5M"], + outrage: ["7T", "7L62", "6T", "6L62", "5T", "5L62"], protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], + roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], + scaryface: ["7L50", "6L50", "5L52"], + screech: ["7E", "6E", "5E"], secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], + shockwave: ["7T", "6T"], + slam: ["7L28", "6L28", "5L28"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superfang: ["6T", "5T"], - superpower: ["6T", "5T"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - thrash: ["7L1", "6L1"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1", "5S0"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E"], thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - zapcannon: ["7L1", "6L1"], + uproar: ["7T", "6T", "5T"], + workup: ["7M", "7L38", "6L38", "5M", "5L38"], + zenheadbutt: ["7T", "6T", "5T"], }}, - elgyem: {learnset: { - afteryou: ["6T", "5T"], - allyswitch: ["7E", "6E", "5M"], - astonish: ["7E", "6E", "5E"], + zweilous: {learnset: { + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - barrier: ["7E", "6E", "5E", "5D"], - calmmind: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], - chargebeam: ["7M", "6M", "5M"], + bite: ["7L9", "7L1", "6L1", "5L1"], + bodyslam: ["7L48", "6L48", "5L48"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1"], - cosmicpower: ["7E", "6E"], + crunch: ["7L25", "6L25", "5L25"], darkpulse: ["7M", "6M", "5T"], - disable: ["7E", "6E", "5E"], + doublehit: ["7L1", "6L1", "5L1"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L17", "6L17", "5L17"], + dragonpulse: ["7T", "7L32", "6T", "6L32", "5T", "5L32"], + dragonrage: ["7L1", "6L1", "5L1"], + dragonrush: ["7L42", "6L42", "5L42"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], frustration: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - growl: ["7L4", "6L4", "5L4"], - guardsplit: ["7L50", "6L50", "5L50"], - guardswap: ["7E", "6E", "5E"], - headbutt: ["7L18", "6L18", "5L18"], - healblock: ["7L8", "6L8", "5L8", "5D"], - hiddenpower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - imprison: ["7L25", "6L25", "5L25"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - miracleeye: ["7L11", "6L11", "5L11"], - nastyplot: ["7E", "6E", "5E", "5D"], - painsplit: ["6T", "5T"], - powersplit: ["7L50", "6L50", "5L50"], - powerswap: ["7E", "6E", "5E"], + headbutt: ["7L12", "6L12", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L64", "6T", "6L64", "5T", "5L64"], + incinerate: ["6M", "5M"], + outrage: ["7T", "7L71", "6T", "6L71", "5T", "5L71"], protect: ["7M", "6M", "5M"], - psybeam: ["7L15", "6L15", "5L15"], - psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - psychup: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - psyshock: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - recover: ["7L46", "6L46", "5L46"], - recycle: ["6T", "5T"], - reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + scaryface: ["7L55", "6L55", "5L55"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - simplebeam: ["7L29", "6L29", "5L29"], - skillswap: ["7E", "6T", "6E", "5T", "5E"], + shockwave: ["7T", "6T"], + slam: ["7L28", "6L28", "5L28"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - synchronoise: ["7L53", "6L53", "5L53"], - telekinesis: ["5M"], - teleport: ["7E", "6E", "5E"], + taunt: ["7M", "6M", "5M"], thief: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - wonderroom: ["7L56", "6T", "6L56", "5T", "5L56"], - zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32"], + uproar: ["7T", "6T", "5T"], + workup: ["7M", "7L38", "6L38", "5M", "5L38"], + zenheadbutt: ["7T", "6T", "5T"], }}, - beheeyem: {learnset: { - afteryou: ["6T", "5T"], - allyswitch: ["5M"], + hydreigon: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aquatail: ["7T", "6T", "5T"], attract: ["7M", "6M", "5M"], - calmmind: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + bite: ["7L9", "7L1", "6L1", "5L1"], + bodyslam: ["7L48", "6L48", "5L48"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confusion: ["7L1", "6L1", "5L1"], + crunch: ["7L25", "6L25", "6S1", "5L25"], darkpulse: ["7M", "6M", "5T"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L17", "6L17", "5L17", "5S0"], + dragonpulse: ["7T", "7L32", "6T", "6L32", "5T", "5L32"], + dragonrage: ["7L1", "6L1", "5L1"], + dragonrush: ["7L42", "6L42", "6S1", "5L42"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], echoedvoice: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - frustration: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "5S0"], + flashcannon: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M", "5S0"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "6S1", "5M"], gigaimpact: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - growl: ["7L4", "7L1", "6L1", "5L1"], - guardsplit: ["7L56", "6L56", "5L56"], - headbutt: ["7L18", "6L18", "5L18"], - healblock: ["7L8", "7L1", "6L1", "5L1"], - hiddenpower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + headbutt: ["7L12", "6L12", "5L12"], + heatwave: ["7T", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - imprison: ["7L25", "6L25", "5L25"], - lightscreen: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - miracleeye: ["7L11", "7L1", "6L1", "5L1"], - painsplit: ["6T", "5T"], - powersplit: ["7L58", "6L58", "5L58"], + hypervoice: ["7T", "7L68", "7L1", "6T", "6L1", "5T", "5L68", "5S0"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + outrage: ["7T", "7L79", "7L1", "6T", "6L1", "5T", "5L79"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - psybeam: ["7L15", "6L15", "5L15"], - psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], - psychicterrain: ["7L1"], - psychup: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - psyshock: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - recover: ["7L50", "6L50", "5L50"], - recycle: ["6T", "5T"], reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], + roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], + rockslide: ["7M", "6M", "6S1", "5M"], + rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + scaryface: ["7L55", "6L55", "5L55"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - simplebeam: ["7L29", "6L29", "5L29"], - skillswap: ["6T", "5T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + slam: ["7L28", "6L28", "5L28"], sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + spite: ["7T", "6T", "5T"], steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], + surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - synchronoise: ["7L63", "7L1", "6L1", "5L63"], - telekinesis: ["5M"], + tailwind: ["7T", "6T", "5T"], + taunt: ["7M", "6M", "5M"], thief: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], + throatchop: ["7T"], thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - wonderroom: ["7L68", "7L1", "6T", "6L1", "5T", "5L68"], - zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32"], + triattack: ["7L1", "6L1", "5L1"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "7L38", "6L38", "5M", "5L38"], + zenheadbutt: ["7T", "6T", "5T"], }}, - litwick: {learnset: { - acid: ["7E", "6E", "5E"], - acidarmor: ["7E", "6E", "5E"], - astonish: ["7L1", "6L1", "5L1"], - attract: ["7M", "6M", "5M"], + larvesta: {learnset: { + absorb: ["7L10"], + acrobatics: ["7M", "6M", "5M"], + amnesia: ["7L80", "6L80", "5L80"], + bugbite: ["7T", "7L40", "6T", "6L40", "5T", "5L40"], + bugbuzz: ["7L70", "6L70", "5L70"], calmmind: ["7M", "6M", "5M"], - captivate: ["7E", "6E", "5E"], - clearsmog: ["7E", "6E", "5E"], confide: ["7M", "6M"], - confuseray: ["7L10", "6L10", "5L10"], - curse: ["7L43", "6L43", "5L43"], - darkpulse: ["7M", "6M", "5T"], + doubleedge: ["7L50", "6L50", "5L50"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], ember: ["7L1", "6L1", "5L1"], endure: ["7E", "6E", "5E"], - energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], fireblast: ["7M", "6M", "5M"], - firespin: ["7L7", "6L7", "5L7"], - flameburst: ["7L20", "6L20", "5L20"], - flamecharge: ["7M", "6M", "5M"], + flamecharge: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], flamethrower: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + flamewheel: ["7L60", "6L60", "5L60"], + flareblitz: ["7L100", "6L100", "5L100"], + foresight: ["7E", "6E", "5E"], frustration: ["7M", "6M", "5M"], - haze: ["7E", "6E", "5E"], - heatwave: ["7E", "6T", "6E", "5T", "5E"], - hex: ["7L28", "6L28", "5L28"], + gigadrain: ["7T", "6T", "5T"], + harden: ["7E", "6E", "5E"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - imprison: ["7L24", "6L24", "5L24"], incinerate: ["6M", "5M"], - inferno: ["7L38", "6L38", "5L38"], - memento: ["7L33", "6L33", "5L33"], - minimize: ["7L3", "6L3", "5L3"], - nightshade: ["7L13", "6L13", "5L13"], - overheat: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], - painsplit: ["7L55", "6T", "6L55", "5T", "5L55"], - payback: ["7M", "6M", "5M"], - powersplit: ["7E", "6E"], + leechlife: ["7M", "6L10", "5L10"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7T", "7E", "6T", "6E", "5T", "5E"], + morningsun: ["7E", "6E", "5E"], + overheat: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], psychic: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], - shockwave: ["6T"], + signalbeam: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - smog: ["7L5", "6L5", "5L5"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], solarbeam: ["7M", "6M", "5M"], - spite: ["6T", "5T"], + stringshot: ["7L1", "7E", "6L1", "6E", "5L1", "5E"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], + takedown: ["7L20", "6L20", "5L20"], + thrash: ["7L90", "6L90", "5L90"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - willowisp: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + uturn: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "7E", "6T", "6E", "5T", "5E"], }}, - lampent: {learnset: { - astonish: ["7L1", "6L1", "5L1"], - attract: ["7M", "6M", "5M"], + volcarona: {learnset: { + absorb: ["7L10", "7L1"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + amnesia: ["7L1", "6L1"], + bugbite: ["7T", "6T", "5T"], + bugbuzz: ["7L70", "7L1", "6L1", "5L70", "5S1"], calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confuseray: ["7L10", "6L10", "5L10"], - curse: ["7L45", "6L45", "5L45"], - darkpulse: ["7M", "6M", "5T"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], ember: ["7L1", "6L1", "5L1"], - energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + fierydance: ["7L100", "7L1", "6L1", "5L100"], fireblast: ["7M", "6M", "5M"], - firespin: ["7L7", "6L7", "5L7"], - flameburst: ["7L20", "6L20", "5L20"], + firespin: ["7L30", "6L30", "5L30", "5S0"], flamecharge: ["7M", "6M", "5M"], flamethrower: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + flamewheel: ["7L1", "6L1"], + flareblitz: ["7L1", "6L1"], + fly: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - heatwave: ["6T", "5T"], - hex: ["7L28", "6L28", "5L28"], + gigadrain: ["7T", "6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + gust: ["7L20", "7L1", "6L1", "5L1", "5S0"], + heatwave: ["7T", "7L60", "7L1", "6T", "6L1", "5T", "5L60"], hiddenpower: ["7M", "6M", "5M"], - imprison: ["7L24", "6L24", "5L24"], + hurricane: ["7L90", "7L1", "6L1", "5L90"], + hyperbeam: ["7M", "6M", "5M", "5S1"], incinerate: ["6M", "5M"], - inferno: ["7L38", "6L38", "5L38"], - memento: ["7L33", "6L33", "5L33"], - minimize: ["7L3", "7L1", "6L1", "5L1"], - nightshade: ["7L13", "6L13", "5L13"], - overheat: ["7M", "7L69", "6M", "6L69", "5M", "5L69"], - painsplit: ["7L61", "6T", "6L61", "5T", "5L61"], - payback: ["7M", "6M", "5M"], + leechlife: ["7M", "6L1", "5L1", "5S0"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + overheat: ["7M", "6M", "5M", "5S1"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], psychic: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], + quiverdance: ["7L1", "6L1", "5L59", "5S1"], + ragepowder: ["7L80", "7L1", "6L1", "5L80"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], - shockwave: ["6T"], + signalbeam: ["7T", "6T", "5T"], + silverwind: ["7L50", "6L50", "5L50"], sleeptalk: ["7M", "6M", "5T"], - smog: ["7L5", "7L1", "6L1", "5L1"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], solarbeam: ["7M", "6M", "5M"], - spite: ["6T", "5T"], + stringshot: ["7L1", "6L1", "5L1", "5S0"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], + tailwind: ["7T", "6T", "5T"], + thrash: ["7L1", "6L1"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - willowisp: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L40", "6L40", "5L40"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - chandelure: {learnset: { - attract: ["7M", "6M", "5M"], + cobalion: {learnset: { + aerialace: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bounce: ["7T", "6T", "5T"], calmmind: ["7M", "6M", "5M"], + closecombat: ["7L61", "7L1", "6L1", "5L73"], confide: ["7M", "6M"], - confuseray: ["7L1", "6L1", "5L1"], - darkpulse: ["7M", "6M", "5T"], + cut: ["6M", "5M"], + doublekick: ["7L1", "6L7", "5L7"], doubleteam: ["7M", "6M", "5M"], - dreameater: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M", "5S0"], facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - flameburst: ["7L1", "6L1", "5L1"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M"], - flash: ["6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], gigaimpact: ["7M", "6M", "5M"], - heatwave: ["6T", "5T", "5S0"], - hex: ["7L1", "6L1", "5L1"], + helpinghand: ["7T", "7L13", "6T", "6L25", "5T", "5L25", "5S1", "5S0"], hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - overheat: ["7M", "6M", "5M"], - painsplit: ["7L1", "6T", "6L1", "5T"], - payback: ["7M", "6M", "5M"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "7L25", "7S4", "6T", "6L37", "6S3", "5T", "5L37", "5S1", "5S0"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1"], + magnetrise: ["7T", "6T", "5T"], + metalburst: ["7L55", "7L1", "6L1", "5L67"], + metalclaw: ["7L1", "6L13", "5L13"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M", "5S0"], psychup: ["7M", "6M", "5M"], + quickattack: ["7L1", "7S4", "6L1", "5L1"], + quickguard: ["7L42", "6L1", "5L55", "5S2"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S1", "5S0"], return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], round: ["7M", "6M", "5M"], + sacredsword: ["7L31", "7S4", "6L42", "6S3", "5L42", "5S2", "5S1", "5S0"], safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M", "5S0"], - shockwave: ["6T"], sleeptalk: ["7M", "6M", "5T"], - smog: ["7L1", "6L1", "5L1"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - spite: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + takedown: ["7L7", "6L19", "5L19"], taunt: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], + xscissor: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - axew: {learnset: { + terrakion: {learnset: { aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - assurance: ["7L7", "6L7", "5L7"], - attract: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L61", "7L1", "6L1", "5L73"], confide: ["7M", "6M"], - counter: ["7E", "6E", "5E", "5D"], cut: ["6M", "5M"], - dig: ["6M", "5M"], + doublekick: ["7L1", "6L7", "5L7"], doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S1"], - dragondance: ["7L32", "6L32", "5L32"], - dragonpulse: ["7L41", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E"], - dragonrage: ["7L10", "6L10", "5L10", "5S0", "5S1", "5S2", "5D"], - dualchop: ["7L13", "6T", "6L13", "5T", "5L13"], - endeavor: ["7E", "6T", "6E", "5T", "5E"], - endure: ["7E", "6E", "5E", "5S1"], + earthpower: ["7T", "6T", "5T"], + earthquake: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], - fling: ["7M", "6M", "5M"], - focusenergy: ["7E", "6E", "5E"], + falseswipe: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "5S2"], - guillotine: ["7L50", "6L50", "5L51"], - harden: ["7E", "6E", "5E"], + gigaimpact: ["7M", "6M", "5M"], + helpinghand: ["7T", "7L13", "6T", "6L25", "5T", "5L25", "5S1", "5S0"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - leer: ["7L4", "6L4", "5L4"], - nightslash: ["7E", "6E", "5E", "5D"], - outrage: ["7L56", "6T", "6L56", "5T", "5L56", "5S2"], - payback: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + ironhead: ["7T", "6T", "5T"], + laserfocus: ["7T"], + leer: ["7L1", "6L1", "5L1"], poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - razorwind: ["7E", "6E", "5E"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L42", "6L1", "5L55", "5S2"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M", "5S1"], - reversal: ["7E", "6E", "5E"], + retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S1", "5S0"], + return: ["7M", "6M", "5M"], roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L25", "7S4", "6M", "6L37", "6S3", "5M", "5L37", "5S1", "5S0"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L16", "6L16", "5L16"], - scratch: ["7L1", "6L1", "5L1", "5S0", "5S2"], + sacredsword: ["7L31", "7S4", "6L42", "6S3", "5L42", "5S2", "5S1", "5S0"], + safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], secretpower: ["6M"], - shockwave: ["6T"], - slash: ["7L20", "6L20", "5L20"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + smackdown: ["7M", "7L1", "6M", "6L13", "5M", "5L13"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L55", "7S4", "6M", "6L67", "5M", "5L67"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], - taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + swordsdance: ["7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + takedown: ["7L7", "6L19", "5L19"], + taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], xscissor: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - fraxure: {learnset: { + virizion: {learnset: { aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - assurance: ["7L7", "7L1", "6L1", "5L1"], - attract: ["7M", "6M", "5M"], + block: ["7T", "6T", "5T"], + bounce: ["7T", "6T", "5T"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L61", "7L1", "6L1", "5L73"], confide: ["7M", "6M"], cut: ["6M", "5M"], - dig: ["6M", "5M"], + doublekick: ["7L1", "6L7", "5L7"], doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - dragondance: ["7L32", "6L32", "5L32"], - dragonpulse: ["7L42", "6T", "6L42", "5T", "5L42"], - dragonrage: ["7L10", "7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - dualchop: ["7L13", "6T", "6L13", "5T", "5L13"], - endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], - fling: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "7L66", "6M", "6L66", "5M", "5L66"], - guillotine: ["7L54", "6L54", "5L54"], + gigadrain: ["7T", "7L25", "7S4", "6T", "6L37", "6S3", "5T", "5L37", "5S1", "5S0"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["7T", "7L13", "6T", "6L25", "5T", "5L25", "5S1", "5S0"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - leer: ["7L4", "7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - outrage: ["7L60", "6T", "6L60", "5T", "5L60"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + laserfocus: ["7T"], + leafblade: ["7L55", "7L1", "7S4", "6L1", "5L67"], + leer: ["7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + magicalleaf: ["7L1", "6L13", "5L13"], + naturepower: ["7M", "6M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L42", "6L1", "5L55", "5S2"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], + retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S1", "5S0"], return: ["7M", "6M", "5M"], roar: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L16", "6L16", "5L16"], - scratch: ["7L1", "6L1", "5L1"], + sacredsword: ["7L31", "7S4", "6L42", "6S3", "5L42", "5S2", "5S1", "5S0"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - shockwave: ["6T"], - slash: ["7L20", "6L20", "5L20"], + seedbomb: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], - taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + swordsdance: ["7M", "7L37", "7S4", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + synthesis: ["7T", "6T", "5T"], + takedown: ["7L7", "6L19", "5L19"], + taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], + worryseed: ["7T", "6T", "5T"], xscissor: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - haxorus: {learnset: { + tornadus: {learnset: { + acrobatics: ["7M", "6M", "5M"], aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - assurance: ["7L7", "7L1", "6L1", "5L1"], + agility: ["7L31", "6L37", "6S3", "5L37", "5S0"], + aircutter: ["7L19", "6L25", "5L25", "5S0"], + airslash: ["7L37", "7S5", "7S4", "6L43", "6S3", "5L43", "5S2"], + astonish: ["7L1", "6L1", "5L1", "5S1"], attract: ["7M", "6M", "5M"], + bite: ["7L7", "6L13", "5L13"], brickbreak: ["7M", "6M", "5M"], brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - dig: ["6M", "5M"], + crunch: ["7L43", "7S5", "7S4", "6L49", "6S3", "5L49"], + darkpulse: ["7M", "7L67", "6M", "6L73", "5T", "5L73"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], - dragondance: ["7L32", "6L32", "5L32", "5S0"], - dragonpulse: ["7L42", "6T", "6L42", "5T", "5L42"], - dragonrage: ["7L10", "7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - dualchop: ["7L13", "6T", "6L13", "5T", "5L13", "5S0"], - earthquake: ["7M", "6M", "5M", "5S0"], - endeavor: ["6T", "5T"], + embargo: ["7M", "6M", "5M"], + extrasensory: ["7L25", "6L31", "6S3", "5L31", "5S0"], facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "7L74", "6M", "6L74", "5M", "5L74"], - grassknot: ["7M", "6M", "5M"], - guillotine: ["7L58", "6L58", "5L58"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "7S6", "6M", "5M"], + gust: ["7L1", "6L1", "5L1", "5S1"], + hammerarm: ["7L73", "7L1", "6L1", "5L79", "5S2"], + heatwave: ["7T", "7S6", "6T", "5T"], + hiddenpower: ["7M", "6M", "5M", "5S2"], + hurricane: ["7L61", "7L1", "7S6", "6L1", "5L67", "5S2"], hyperbeam: ["7M", "6M", "5M"], + icywind: ["7T", "6T", "5T"], incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - leer: ["7L4", "7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - outrage: ["7L66", "7L1", "6T", "6L1", "5T", "5L66"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "7L55", "7S5", "7S4", "6M", "6L61", "5M", "5L61"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], + revenge: ["7L13", "6L19", "5L19", "5S0"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - scaryface: ["7L16", "6L16", "5L16"], - scratch: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - shockwave: ["6T"], - slash: ["7L20", "6L20", "5L20"], + skydrop: ["7M", "6M", "5M"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "7L1", "6M", "6L7", "5M", "5L7"], + tailwind: ["7T", "7L49", "7S6", "7S5", "7S4", "6T", "6L1", "5T", "5L55"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L79", "7L1", "6L1", "5L85"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - xscissor: ["7M", "6M", "5M", "5S0"], + uproar: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S1"], + uturn: ["7M", "6M", "5M"], }}, - cubchoo: {learnset: { - aerialace: ["7M", "6M", "5M"], - assurance: ["7E", "6E", "5E"], + thundurus: {learnset: { + agility: ["7L31", "6L37", "6S3", "5L37", "5S0"], + astonish: ["7L1", "6L1", "5L1", "5S1"], attract: ["7M", "6M", "5M"], - avalanche: ["7E", "6E", "5E"], - bide: ["7L9", "6L9", "5L9", "5S0"], - blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - brine: ["7L21", "6L21", "5L21"], - charm: ["7L29", "6L29", "5L29"], + bite: ["7L7", "6L13", "5L13"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + charge: ["7L49", "7S5", "7S4", "6L1", "5L55"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], - dig: ["6M", "5M"], + crunch: ["7L43", "7S5", "7S4", "6L49", "6S3", "5L49"], + darkpulse: ["7M", "7L67", "6M", "6L73", "5T", "5L73"], + defog: ["7T"], + discharge: ["7L37", "7S5", "7S4", "6L43", "6S3", "5L43"], doubleteam: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - encore: ["7E", "6E", "5E"], - endure: ["7L25", "6L25", "5L25"], + electroweb: ["7T", "6T"], + embargo: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - flail: ["7L36", "6L36", "5L36"], + flashcannon: ["7M", "6M", "5M"], fling: ["7M", "6M", "5M"], - focuspunch: ["7E", "6T", "6E", "5E"], - frostbreath: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "7S6", "6M", "5M", "5S2"], + foulplay: ["7T", "6T", "5T"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L17", "6L17", "5L17"], - grassknot: ["7M", "6M", "5M"], - growl: ["7L1", "6L1", "5L5", "5S0"], - hail: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "7S6", "6M", "5M"], + hammerarm: ["7L73", "7L1", "6L1", "5L79", "5S2"], + healblock: ["7L25", "6L31", "6S3", "5L31", "5S0"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - icebeam: ["7M", "6M", "5M"], - icepunch: ["7E", "6T", "6E", "5T", "5E"], - icywind: ["7L13", "6T", "6L13", "5T", "5L13", "5S0"], - lowkick: ["6T", "5T"], - nightslash: ["7E", "6E", "5E"], - playnice: ["7L15", "6L15"], - playrough: ["7E", "6E"], - powdersnow: ["7L5", "6L5", "5L1", "5S0"], - poweruppunch: ["6M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + nastyplot: ["7L55", "7L1", "7S6", "7S5", "7S4", "6L1", "5L61"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - rest: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + revenge: ["7L13", "6L19", "5L19", "5S0"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - sheercold: ["7L57", "6L57", "5L57"], - slash: ["7L33", "6L33", "5L33"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snore: ["6T", "5T"], + shockwave: ["7T", "7L19", "6T", "6L25", "5L25", "5S0"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["7T", "6T", "5T"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - thrash: ["7L53", "6L53", "5L53"], + superpower: ["7T", "6T", "5T"], + swagger: ["7M", "7L1", "6M", "6L7", "5M", "5L7"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L79", "7L1", "6L1", "5L85"], + thunder: ["7M", "7L61", "6M", "6L67", "5M", "5L67", "5S2"], + thunderbolt: ["7M", "7S6", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + thundershock: ["7L1", "6L1", "5L1", "5S1"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - waterpulse: ["6T"], - yawn: ["7E", "6E", "5E"], + uproar: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S1"], + uturn: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M", "5S2"], }}, - beartic: {learnset: { - aerialace: ["7M", "6M", "5M"], - aquajet: ["7L1", "6L1", "5L1"], - attract: ["7M", "6M", "5M"], - bide: ["7L9", "7L1", "6L1", "5L1"], - blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - brickbreak: ["7M", "6M", "5M"], - brine: ["7L21", "6L21", "5L21"], - bulkup: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + reshiram: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blueflare: ["7L100", "7S6", "6L100", "5L100", "5S2"], + brutalswing: ["7M"], confide: ["7M", "6M"], - covet: ["6T", "5T"], + crunch: ["7L71", "6L71", "5L71"], cut: ["6M", "5M"], - dig: ["6M", "5M"], - dive: ["6M", "5M"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "7S6", "6T", "5T", "5S2"], + dragonbreath: ["7L29", "6L29", "6S3", "5L29", "5S0"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "7L54", "7S5", "7S4", "6T", "6L54", "5T", "5L54", "5S1"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "7S6", "6T", "5T"], echoedvoice: ["7M", "6M", "5M"], - endure: ["7L25", "6L25", "5L25"], + extrasensory: ["7L43", "7S5", "7S4", "6L43", "6S3", "5L43", "5S1", "5S0"], facade: ["7M", "6M", "5M"], - flail: ["7L36", "6L36", "5L36"], + fireblast: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + firefang: ["7L1", "6L1", "5L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], - frostbreath: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - furyswipes: ["7L17", "6L17", "5L17"], + fusionflare: ["7L50", "7S6", "7S5", "7S4", "6L50", "6S3", "5L50", "5S2", "5S1", "5S0"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - growl: ["7L1", "6L1", "5L1"], - hail: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + heatwave: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - iciclecrash: ["7L1", "6L37", "5L37"], - icywind: ["7L13", "7L1", "6T", "6L1", "5T", "5L1"], - lowkick: ["6T", "5T"], - playnice: ["7L15", "6L9"], - powdersnow: ["7L5", "7L1", "6L1", "5L1"], - poweruppunch: ["6M"], + hypervoice: ["7T", "7L92", "6T", "6L92", "5T", "5L92"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1"], + incinerate: ["6M", "5M"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + mist: ["5S2"], + nobleroar: ["7L64"], + outrage: ["7T", "7L85", "6T", "6L85", "5T", "5L85"], + overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + psychic: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], shadowclaw: ["7M", "6M", "5M"], - sheercold: ["7L66", "7L1", "6L1", "5L66"], - slash: ["7L33", "6L33", "5L33"], + slash: ["7L36", "7S5", "7S4", "6L36", "6S3", "5L36", "5S0"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steelwing: ["7M", "6M"], stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["7L1", "6T", "6L1", "5T", "5L1"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], - swordsdance: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thrash: ["7L59", "7L1", "6L1", "5L59"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7T", "6T", "5T"], toxic: ["7M", "6M", "5M"], - waterpulse: ["6T"], + willowisp: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - cryogonal: {learnset: { - acidarmor: ["7L17", "6L29", "5L29"], - acrobatics: ["7M", "6M", "5M"], - ancientpower: ["7L21"], - attract: ["7M", "6M", "5M"], - aurorabeam: ["7L13", "6L25", "5L25"], - auroraveil: ["7M"], - bind: ["7L1", "6T", "6L1", "5T", "5L1"], - blizzard: ["7M", "6M", "5M"], + zekrom: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + boltstrike: ["7L100", "7S6", "6L100", "5L100", "5S2"], + brutalswing: ["7M"], + chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - confuseray: ["7L41", "6L45", "5L45"], + crunch: ["7L71", "6L71", "5L71"], + cut: ["6M", "5M"], + defog: ["7T"], doubleteam: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L29", "6L29", "6S3", "5L29", "5S0"], + dragonclaw: ["7M", "7L54", "7S5", "7S4", "6M", "6L54", "5M", "5L54", "5S1"], + dragonpulse: ["7T", "6T", "5T"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], flashcannon: ["7M", "6M", "5M"], - freezedry: ["7L49", "6L50"], - frostbreath: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - haze: ["7L9", "6L1", "5L21"], + fusionbolt: ["7L50", "7S6", "7S5", "7S4", "6L50", "6S3", "5L50", "5S2", "5S1", "5S0"], + gigaimpact: ["7M", "6M", "5M"], + haze: ["5S2"], hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - icebeam: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], - iceshard: ["7L1", "6L1", "5L5"], - icywind: ["7L5", "6T", "6L17", "5T", "5L17"], - irondefense: ["6T", "5T"], - knockoff: ["6T", "5T"], - lightscreen: ["7M", "7L29", "6M", "6L37", "5M", "5L37"], - magiccoat: ["6T", "5T"], - mist: ["7L9", "6L1", "5L21"], - nightslash: ["7L53", "7L1", "6L1", "5L57"], - poisonjab: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L92", "6T", "6L92", "5T", "5L92"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7T", "6T", "5T"], + nobleroar: ["7L64"], + outrage: ["7T", "7L85", "7S6", "6T", "6L85", "5T", "5L85", "5S2"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - rapidspin: ["7L1", "6L13", "5L13"], - recover: ["7L45", "6L49", "5L49"], - reflect: ["7M", "7L33", "6M", "6L37", "5M", "5L37"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], - sharpen: ["7L1", "6L9", "5L9"], - sheercold: ["7L57", "7L1", "6L1", "5L61"], - signalbeam: ["6T", "5T"], - slash: ["7L37", "6L41", "5L41"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + slash: ["7L36", "7S5", "7S4", "6L36", "6S3", "5L36", "5S0"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "7L50", "6M", "6L53", "5M", "5L53"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "7S6", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], + tailwind: ["7T", "6T", "5T"], + thunder: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + thunderbolt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + thunderfang: ["7L1", "6L1", "5L1"], + thunderpunch: ["7T", "6T", "5T"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - waterpulse: ["6T"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zenheadbutt: ["7T", "7L43", "7S5", "7S4", "6T", "6L43", "6S3", "5T", "5L43", "5S1", "5S0"], }}, - shelmet: {learnset: { - absorb: ["7L1"], - acid: ["7L4", "6L4", "5L4", "5D"], - acidarmor: ["7L32", "6L32", "5L32"], + landorus: {learnset: { attract: ["7M", "6M", "5M"], - batonpass: ["7E", "6E", "5E", "5D"], - bide: ["7L8", "6L8", "5L8"], - bodyslam: ["7L40", "6L40", "5L40", "5S1"], - bugbite: ["6T", "5T"], - bugbuzz: ["7L44", "6L44", "5L44", "5S1"], + block: ["7T", "7L1", "6T", "6L1", "5T", "5L1", "5S1"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "7L13", "6M", "6L19", "5M", "5L19"], + calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - curse: ["7L13", "6L13", "5L13"], - doubleedge: ["7E", "6E", "5E"], + defog: ["7T"], + dig: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - encore: ["7E", "6E", "5E", "5S1", "5D"], - endure: ["7E", "6E", "5E"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - feint: ["7E", "6E", "5E"], - finalgambit: ["7L56", "6L56", "5L56"], - frustration: ["7M", "6M", "5M"], - gastroacid: ["6T", "5T"], - gigadrain: ["7L37", "6T", "6L37", "5T", "5L37", "5S1"], - guardsplit: ["7E", "6E", "5E"], - guardswap: ["7L50", "6L50", "5L52"], - hiddenpower: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - leechlife: ["7M", "6L1", "5L1"], - megadrain: ["7L20", "6L20", "5L20", "5S0"], - mindreader: ["7E", "6E", "5E"], - mudslap: ["7E", "6E", "5E"], - protect: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S0"], - pursuit: ["7E", "6E", "5E"], - raindance: ["7M", "6M", "5M"], - recover: ["7L49", "6L49", "5L49"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - secretpower: ["6M"], - signalbeam: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - spikes: ["7E", "6E", "5E"], - strugglebug: ["7L16", "6M", "6L16", "5M", "5L16", "5S0"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - venoshock: ["7M", "6M", "5M"], - yawn: ["7L25", "6L25", "5L25", "5S0"], - }}, - accelgor: {learnset: { - absorb: ["7L1"], - acidspray: ["7L4", "7L1", "6L1", "5L1"], - agility: ["7L32", "6L32", "5L32"], - attract: ["7M", "6M", "5M"], - bugbite: ["6T", "5T"], - bugbuzz: ["7L44", "6L44", "5L44"], - confide: ["7M", "6M"], - doubleteam: ["7M", "7L8", "7L1", "6M", "6L1", "5M", "5L1"], - energyball: ["7M", "6M", "5M"], + earthpower: ["7T", "7L37", "7S4", "6T", "6L43", "6S2", "5T", "5L43"], + earthquake: ["7M", "7L49", "7S4", "6M", "6L55", "6S3", "5M", "5L55", "5S0"], + explosion: ["7M", "6M", "6S2", "5M"], + extrasensory: ["7L25", "6L31", "5L31"], facade: ["7M", "6M", "5M"], - finalgambit: ["7L56", "7L1", "6L1", "5L56"], + fissure: ["7L61", "7L1", "6L1", "5L67", "5S0"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], - gastroacid: ["6T", "5T"], - gigadrain: ["7L37", "6T", "6L37", "5T", "5L37"], gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["7T", "6T", "5T"], + hammerarm: ["7L73", "7L1", "6L1", "5L79"], hiddenpower: ["7M", "6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - knockoff: ["6T", "5T"], - leechlife: ["7M", "6L1", "5L1"], - mefirst: ["7L28", "6L28", "5L28"], - megadrain: ["7L20", "6L20", "5L20"], - powerswap: ["7L52", "7L1", "6L1", "5L52"], + imprison: ["7L1", "6L7", "5L7"], + irontail: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "6S3", "5T"], + mudshot: ["7L1", "6L1", "5L1", "5S1"], + outrage: ["7T", "7L79", "7L1", "6T", "6L1", "5T", "5L85"], + payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - quickattack: ["7L13", "7L1", "6L1", "5L1"], - raindance: ["7M", "6M", "5M"], - recover: ["7L49", "6L49", "5L49"], + psychic: ["7M", "6M", "5M"], + punishment: ["7L7", "6L13", "5L13"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L43", "7S4", "6M", "6L49", "6S2", "5M", "5L49", "5S0"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L19", "6L25", "5L25"], + rocktomb: ["7M", "7L1", "6M", "6L1", "6S3", "5M", "5L1", "5S1"], + roleplay: ["7T", "6T", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L55", "7S4", "6M", "6L61", "5M", "5L61", "5S0"], secretpower: ["6M"], - signalbeam: ["6T", "5T"], sleeptalk: ["7M", "6M", "5T"], sludgebomb: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - strugglebug: ["7L16", "6M", "6L16", "5M", "5L16"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["7T", "6T", "5T"], + stealthrock: ["7T", "6T", "5T"], + stoneedge: ["7M", "7L67", "6M", "6L73", "5M", "5L73"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], + superpower: ["7T", "6T", "5T"], swagger: ["7M", "6M", "5M"], - swift: ["7L25", "6L25", "5L25"], + swordsdance: ["7M", "7L31", "6M", "6L37", "6S2", "5M", "5L37"], toxic: ["7M", "6M", "5M"], - uturn: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], - venoshock: ["7M", "6M", "5M"], - watershuriken: ["7L1", "6L1"], + uturn: ["7M", "6M", "6S3", "5M"], }}, - stunfisk: {learnset: { - aquatail: ["6T", "5T"], - astonish: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M"], - bide: ["7L5", "6L5", "5L5"], - bounce: ["7L35", "6T", "6L35", "5T", "5L35"], - bulldoze: ["7M", "6M", "5M"], - camouflage: ["7L17", "6L17", "5L17"], + kyurem: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + brutalswing: ["7M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E", "5D"], - dig: ["6M", "5M"], - discharge: ["7L25", "6L25", "5L25"], + cut: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - earthpower: ["7E", "6T", "6E", "5T", "5E"], - earthquake: ["7M", "6M", "5M"], - eerieimpulse: ["7E", "6E"], - electroweb: ["6T", "5T"], - endeavor: ["6T", "5T"], - endure: ["7L30", "6L30", "5L30"], + dracometeor: ["7T", "6T", "6S3", "5T"], + dragonbreath: ["7L29", "6L29", "6S2", "5L29"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "7L57", "7S4", "6T", "6L57", "5T", "5L57", "5S1", "5S0"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L71", "6T", "6L71", "5T", "5L71", "5S0"], facade: ["7M", "6M", "5M"], - fissure: ["7L61", "7L1", "6L1", "5L61"], - flail: ["7L55", "7L1", "6L1", "5L55"], - flash: ["6M", "5M"], - foulplay: ["6T", "5T"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + glaciate: ["7L50", "7S4", "6L50", "6S3", "6S2", "5L50", "5S1", "5S0"], + hail: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - magnetrise: ["6T", "5T"], - mefirst: ["7E", "6E"], - mudbomb: ["7L21", "6L21", "5L21"], - muddywater: ["7L40", "6L40", "5L40"], - mudshot: ["7L13", "6L13", "5L13"], - mudslap: ["7L1", "6L1", "5L1", "5D"], - mudsport: ["7L1", "6L1", "5L1"], - painsplit: ["7E", "6T", "6E", "5T", "5E"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L92", "6T", "6L92", "5T", "5L92"], + icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + icywind: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1", "5S0"], + ironhead: ["7T", "6T", "6S3", "5T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + nobleroar: ["7L64"], + outrage: ["7T", "7L85", "6T", "6L85", "5T", "5L85"], payback: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], - reflecttype: ["7E", "6E"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], - revenge: ["7L50", "6L50", "5L50"], rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + scaryface: ["7L43", "7S4", "6L43", "6S3", "6S2", "5L43", "5S1"], secretpower: ["6M"], - shockwave: ["7E", "6T", "6E", "5E"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - spark: ["7E", "6E", "5E"], - spite: ["7E", "6T", "6E", "5T", "5E"], - stealthrock: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["7T", "6T", "5T"], + slash: ["7L36", "7S4", "6L36", "6S2", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - surf: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - thundershock: ["7L9", "6L9", "5L9"], - thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - watergun: ["7L1", "6L1"], - waterpulse: ["6T"], - yawn: ["7E", "6E", "5E", "5D"], + zenheadbutt: ["7T", "6T", "5T"], }}, - mienfoo: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M"], - allyswitch: ["7E", "6E"], - attract: ["7M", "6M", "5M"], - aurasphere: ["7L61", "6L61", "5L61"], - batonpass: ["7E", "6E", "5E"], - bounce: ["7L49", "6T", "6L49", "5T", "5L49"], - brickbreak: ["7M", "6M", "5M"], - bulkup: ["7M", "6M", "5M"], - calmmind: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + kyuremblack: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + brutalswing: ["7M"], confide: ["7M", "6M"], - detect: ["7L9", "6L9", "5L9"], - dig: ["6M", "5M"], - doubleslap: ["7L17", "6L17", "5L17"], + cut: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["7L33", "6T", "6L33", "5T", "5L33"], - dualchop: ["6T", "5T"], - endure: ["7E", "6E", "5E"], + dracometeor: ["7T", "6T", "6S3", "5T"], + dragonbreath: ["7L29", "6L29", "6S2", "5L29"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "7L57", "7S4", "6T", "6L57", "5T", "5L57", "5S1", "5S0"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L71", "6T", "6L71", "5T", "5L71", "5S0"], facade: ["7M", "6M", "5M"], - fakeout: ["7L13", "6L13", "5L13"], - feint: ["7E", "6E", "5E"], + flashcannon: ["7M", "6M", "5M"], fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], - forcepalm: ["7L29", "6L29", "5L29"], + freezeshock: ["7L50", "7S4", "6L50", "6S3", "6S2", "5L43", "5S1", "5S0"], frustration: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], + fusionbolt: ["7L43", "7S4", "6L43", "6S3", "6S2", "5L50", "5S1"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - highjumpkick: ["7L50", "6L50", "5L53"], - jumpkick: ["7L37", "6L37", "5L37"], - knockoff: ["7E", "6T", "6E", "5T", "5E"], - lowkick: ["7E", "6T", "6E", "5T", "5E"], - lowsweep: ["7M", "6M", "5M"], - meditate: ["7L5", "6L5", "5L5"], - mefirst: ["7E", "6E", "5E"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L92", "6T", "6L92", "5T", "5L92"], + icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + icywind: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1", "5S0"], + ironhead: ["7T", "6T", "6S3", "5T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + nobleroar: ["7L64"], + outrage: ["7T", "7L85", "6T", "6L85", "5T", "5L85"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - quickguard: ["7L45", "6L45", "5L45"], + psychic: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7L57", "6L57", "5L57"], rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["7T", "6T", "5T"], + slash: ["7L36", "7S4", "6L36", "6S2", "5L36"], sleeptalk: ["7M", "6M", "5T"], - smellingsalts: ["7E", "6E", "5E"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swift: ["7L21", "6L21", "5L21"], - swordsdance: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - vitalthrow: ["7E", "6E", "5E"], - workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - mienshao: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M"], - attract: ["7M", "6M", "5M"], - aurasphere: ["7L70", "7L1", "6L1", "5L70"], - bounce: ["7L49", "6T", "6L49", "5T", "5L49"], - brickbreak: ["7M", "6M", "5M"], - bulkup: ["7M", "6M", "5M"], - calmmind: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + kyuremwhite: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + brutalswing: ["7M"], confide: ["7M", "6M"], - detect: ["7L9", "7L1", "6L1", "5L1"], - dig: ["6M", "5M"], - doubleslap: ["7L17", "6L17", "5L17"], + cut: ["6M", "5M"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["7L33", "6T", "6L33", "5T", "5L33"], - dualchop: ["6T", "5T"], + dracometeor: ["7T", "6T", "6S3", "5T"], + dragonbreath: ["7L29", "6L29", "6S2", "5L29"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7T", "7L57", "7S4", "6T", "6L57", "5T", "5L57", "5S1", "5S0"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7T", "6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7T", "7L71", "6T", "6L71", "5T", "5L71", "5S0"], facade: ["7M", "6M", "5M"], - fakeout: ["7L13", "7L1", "6L1", "5L1"], + flashcannon: ["7M", "6M", "5M"], fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], - forcepalm: ["7L29", "6L29", "5L29"], frustration: ["7M", "6M", "5M"], + fusionflare: ["7L43", "7S4", "6L43", "6S3", "6S2", "5L50", "5S1"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - helpinghand: ["6T", "5T"], + hail: ["7M", "6M", "5M"], hiddenpower: ["7M", "6M", "5M"], - highjumpkick: ["7L56", "6L56", "5L56"], + honeclaws: ["6M", "5M"], hyperbeam: ["7M", "6M", "5M"], - jumpkick: ["7L37", "6L37", "5L37"], - knockoff: ["6T", "5T"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - meditate: ["7L5", "7L1", "6L1", "5L1"], + hypervoice: ["7T", "7L92", "6T", "6L92", "5T", "5L92"], + icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + iceburn: ["7L50", "7S4", "6L50", "6S3", "6S2", "5L43", "5S1", "5S0"], + icywind: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1", "5S0"], + ironhead: ["7T", "6T", "6S3", "5T"], + laserfocus: ["7T"], + lightscreen: ["7M", "6M", "5M"], + nobleroar: ["7L64"], + outrage: ["7T", "7L85", "6T", "6L85", "5T", "5L85"], payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], raindance: ["7M", "6M", "5M"], reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - reversal: ["7L63", "7L1", "6L1", "5L63"], rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], + roost: ["7M", "6M", "5T"], round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["7T", "6T", "5T"], + slash: ["7L36", "7S4", "6L36", "6S2", "5L36"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + steelwing: ["7M", "6M"], stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - swift: ["7L21", "6L21", "5L21"], - swordsdance: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - wideguard: ["7L45", "6L45", "5L45"], - workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - druddigon: {learnset: { + keldeo: {learnset: { aerialace: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - attract: ["7M", "6M", "5M"], - bite: ["7L9", "6L9", "5L9", "5D"], - bulldoze: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], - chipaway: ["7L31", "6L31", "5L31"], + aquajet: ["7L1", "6L1", "6S3", "6S2", "5L1", "5S1", "5S0"], + aquatail: ["7T", "7L37", "6T", "6L37", "5T", "5L37"], + bounce: ["7T", "6T", "5T"], + bubblebeam: ["7L13", "7L1", "6L13", "6S3", "5L13", "5S0"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L73", "6L73", "5L73"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "5L25"], - crushclaw: ["7E", "6E", "5E"], + covet: ["7T", "6T", "5T"], cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], - dig: ["6M", "5M"], + doublekick: ["7L7", "7L1", "6L7", "6S3", "6S2", "5L7", "5S0"], doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonclaw: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], - dragonpulse: ["6T", "5T"], - dragonrage: ["7L18", "6L18", "5L18"], - dragontail: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], - earthquake: ["7M", "6M", "5M"], + endeavor: ["7T", "6T", "5T"], facade: ["7M", "6M", "5M"], - feintattack: ["7E", "6E", "5E"], - firefang: ["7E", "6E", "5E", "5D"], - firepunch: ["6T", "5T"], - flamethrower: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], frustration: ["7M", "6M", "5M"], gigaimpact: ["7M", "6M", "5M"], - glare: ["7E", "6E", "5E"], - gunkshot: ["6T", "5T"], - heatwave: ["6T", "5T"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7T", "7L25", "6T", "6L25", "5T", "5L25"], hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L5", "6M", "6L5", "5M", "5L5"], + hydropump: ["7L67", "6L67", "6S2", "5L67", "5S1"], hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - ironhead: ["6T", "5T"], - irontail: ["7E", "6T", "6E", "5T", "5E"], - leer: ["7L1", "6L1", "5L1", "5S0"], - metalclaw: ["7E", "6E", "5E"], - nightslash: ["7L40", "6L40", "5L40"], - outrage: ["7L62", "6T", "6L62", "5T", "5L62"], - payback: ["7M", "6M", "5M"], - poisontail: ["7E", "6E", "5E"], - poweruppunch: ["6M"], + icywind: ["7T", "6T", "5T"], + lastresort: ["7T", "6T", "5T"], + leer: ["7L1", "6L1", "6S3", "6S2", "5L1", "5S0"], + liquidation: ["7T"], + lowkick: ["7T"], + poisonjab: ["7M", "6M", "5M"], protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], + psychup: ["7M", "6M", "5M"], + quickguard: ["7L55", "6L55", "5L55"], raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], + retaliate: ["7L31", "6M", "6L31", "5M", "5L31"], return: ["7M", "6M", "5M"], - revenge: ["7L35", "6L35", "5L35"], roar: ["7M", "6M", "5M"], - rockclimb: ["7L49", "6L49", "5L49"], - rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], round: ["7M", "6M", "5M"], - scaryface: ["7L13", "6L13", "5L13"], - scratch: ["7L1", "6L1", "5L1", "5S0"], + sacredsword: ["7L43", "6L43", "5L43", "5S1"], + safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - shockwave: ["6T"], - slash: ["7L21", "6L21", "5L21"], + secretsword: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snarl: ["7M", "6M", "5M"], - snatch: ["7E", "6T", "6E", "5T", "5E"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - suckerpunch: ["7E", "6E", "5E", "5D"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["7L55", "6T", "6L55", "5T", "5L55"], + superpower: ["7T", "6T", "5T"], surf: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "5S1"], + takedown: ["7L19", "6L19", "5L19"], taunt: ["7M", "6M", "5M"], - thunderfang: ["7E", "6E", "5E"], - thunderpunch: ["6T", "5T"], - torment: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + waterpulse: ["7T", "6T"], + workup: ["7M", "7L61", "6L61", "5M", "5L61"], + xscissor: ["7M", "6M", "5M"], }}, - golett: {learnset: { - astonish: ["7L1", "6L1", "5L1"], - block: ["6T", "5T"], + meloetta: {learnset: { + acrobatics: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], + allyswitch: ["7T"], brickbreak: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + celebrate: ["7S3"], + chargebeam: ["7M", "6M", "5M"], + closecombat: ["7L78", "7S2", "6L78", "5L78", "5S1"], confide: ["7M", "6M"], - curse: ["7L45", "6L40", "5L40"], - defensecurl: ["7L1", "6L1", "5L1"], - doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - dynamicpunch: ["7L35", "6L30", "5L30"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "7L50", "6M", "6L45", "5M", "5L45"], + confusion: ["7L11", "7L1", "6L11", "5L11", "5S0"], + covet: ["7T", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7T", "6T", "5T"], + dreameater: ["7M", "6M", "5M"], + dualchop: ["7T", "6T", "5T"], + echoedvoice: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T", "5D"], + firepunch: ["7T", "6T", "5T"], flash: ["6M", "5M"], fling: ["7M", "6M", "5M"], focusblast: ["7M", "6M", "5M"], - focuspunch: ["7L61", "6T", "6L55", "5L55"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M"], - hammerarm: ["7L55", "6L50", "5L50"], + gravity: ["7T", "6T", "5T"], + healbell: ["7T", "6T", "5T"], + helpinghand: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - icebeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T"], - irondefense: ["7L17", "6T", "6L17", "5T", "5L17"], - lowkick: ["6T", "5T"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7T", "7L64", "6T", "6L64", "5T", "5L64"], + icepunch: ["7T", "6T", "5T"], + knockoff: ["7T", "6T", "5T"], + laserfocus: ["7T"], + lastresort: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7T", "6T", "5T"], lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magnitude: ["7L30", "6L25", "5L25"], - megapunch: ["7L25", "6L21", "5L21"], - mudslap: ["7L5", "6L5", "5L5"], - nightshade: ["7L40", "6L35", "5L35"], - pound: ["7L1", "6L1", "5L1"], + magiccoat: ["7T", "6T", "5T"], + magicroom: ["7T", "6T", "5T"], + payback: ["7M", "6M", "5M"], + perishsong: ["7L85", "6L85", "5L85"], poweruppunch: ["6M"], protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], + psybeam: ["7L31", "6L31", "5L31"], + psychic: ["7M", "7L57", "7S2", "6M", "6L57", "5M", "5L57", "5S1"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + quickattack: ["7L6", "7L1", "6L6", "5L6", "5S0"], raindance: ["7M", "6M", "5M"], + recycle: ["7T", "6T", "5T"], + relicsong: ["7T", "7S3", "6T", "5T"], rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rollout: ["7L9", "6L9", "5L9", "5D"], - round: ["7M", "6M", "5M"], + roleplay: ["7T", "7L71", "6T", "6L71", "5T", "5L71"], + round: ["7M", "7L1", "7S3", "6M", "6L1", "5M", "5L1", "5S1", "5S0"], safeguard: ["7M", "6M", "5M"], secretpower: ["6M"], shadowball: ["7M", "6M", "5M"], - shadowpunch: ["7L13", "6L13", "5L13"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T", "5T"], + sing: ["7L16", "7L1", "7S3", "7S2", "6L16", "5L16"], + skillswap: ["7T", "6T", "5T"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stompingtantrum: ["7L21"], + snatch: ["7T", "6T", "5T"], + snore: ["7T", "6T", "5T"], + stoneedge: ["7M", "6M", "5M"], strength: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], + sunnyday: ["7M", "6M", "5M"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T", "5D"], + teeterdance: ["7L21", "6L21", "5L21", "5S1"], + telekinesis: ["7T", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["7T", "6T", "5T"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], + trick: ["7T", "6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7T", "6T", "5T"], + uturn: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + wakeupslap: ["7L50", "6L50", "5L50"], + wonderroom: ["7T", "6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["7T", "6T", "5T"], }}, - golurk: {learnset: { - astonish: ["7L1", "6L1", "5L1"], - block: ["6T", "5T"], - brickbreak: ["7M", "6M", "5M"], - bulldoze: ["7M", "6M", "5M"], + genesect: {learnset: { + aerialace: ["7M", "6M", "5M"], + allyswitch: ["7T"], + blazekick: ["5S2"], + blizzard: ["7M", "6M", "5M"], + bugbite: ["7T", "6T", "5T"], + bugbuzz: ["7L55", "6L55", "5L55"], chargebeam: ["7M", "6M", "5M"], confide: ["7M", "6M"], - curse: ["7L47", "6L40", "5L40"], - defensecurl: ["7L1", "6L1", "5L1"], + darkpulse: ["7M", "6M", "5T"], doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - dynamicpunch: ["7L35", "6L30", "5L30"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "7L54", "6M", "6L50", "5M", "5L50"], + electroweb: ["7T", "6T", "5T"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + extremespeed: ["5S2"], facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], + fellstinger: ["7L1", "6L1"], + flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + flamethrower: ["7M", "6M", "5M"], flash: ["6M", "5M"], flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["7L69", "6T", "6L1", "5L70"], frustration: ["7M", "6M", "5M"], + furycutter: ["7L7", "6L7", "5L7"], + gigadrain: ["7T", "6T", "5T"], gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - gyroball: ["7M", "6M", "5M", "5S0"], - hammerarm: ["7L61", "6L60", "5L60", "5S0"], - heavyslam: ["7L1", "6L43", "5L43"], + gravity: ["7T", "6T", "5T"], + gunkshot: ["7T", "6T", "5T"], hiddenpower: ["7M", "6M", "5M"], - highhorsepower: ["7L1"], - hyperbeam: ["7M", "6M", "5M", "5S0"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L73", "6M", "6L73", "5M", "5L73"], icebeam: ["7M", "6M", "5M"], - icepunch: ["6T", "5T"], - icywind: ["6T", "5T"], - irondefense: ["7L17", "6T", "6L17", "5T", "5L17"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magnitude: ["7L30", "6L25", "5L25"], - megapunch: ["7L25", "6L21", "5L21"], - mudslap: ["7L5", "7L1", "6L1", "5L1"], - nightshade: ["7L40", "6L35", "5L35"], - phantomforce: ["7L76", "6L1"], - pound: ["7L1", "6L1", "5L1"], - poweruppunch: ["6M"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T", "5T"], + ironhead: ["7T", "6T", "5T"], + lastresort: ["7T", "6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + lockon: ["7L11", "6L11", "5L11"], + magiccoat: ["7T", "6T", "5T"], + magnetbomb: ["7L22", "6L22", "6S3", "5L22", "5S1", "5S0"], + magnetrise: ["7T", "7L1", "6T", "6L1", "5T", "5L1"], + metalclaw: ["7L1", "6L1", "5L1"], + metalsound: ["7L33", "6L33", "5L33"], protect: ["7M", "6M", "5M"], psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + recycle: ["7T", "6T", "5T"], + reflect: ["7M", "6M", "5M"], rest: ["7M", "6M", "5M"], return: ["7M", "6M", "5M"], rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - rollout: ["7L9", "6L9", "5L9"], round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + screech: ["7L1", "6L1", "5L1"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowpunch: ["7L13", "6L13", "5L13", "5S0"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], + selfdestruct: ["7L77", "6L77", "5L77"], + shadowclaw: ["7M", "6M", "5M"], + shiftgear: ["5S2"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "7L40", "6T", "6L40", "6S3", "5T", "5L40", "5S1", "5S0"], + simplebeam: ["7L62", "6L62", "5L62"], + slash: ["7L29", "6L29", "5L29"], sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stealthrock: ["6T", "5T"], - stompingtantrum: ["7L21"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], + snore: ["7T", "6T", "5T"], + solarbeam: ["7M", "6M", "6S3", "5M", "5S1", "5S0"], + strugglebug: ["6M", "5M"], substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], swagger: ["7M", "6M", "5M"], - telekinesis: ["5M"], - thief: ["7M", "6M", "5M"], + technoblast: ["7L1", "6L1", "6S3", "5L1", "5S2", "5S1", "5S0"], + telekinesis: ["7T"], + thunder: ["7M", "6M", "5M"], thunderbolt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], toxic: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + triattack: ["7L44", "6L44", "5L44"], + uturn: ["7M", "6M", "5M"], + xscissor: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], + zapcannon: ["7L66", "6L66", "5L66"], + zenheadbutt: ["7T", "6T", "5T"], + }}, + chespin: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bellydrum: ["7E", "6E"], + bite: ["7L11", "6L11"], + bodyslam: ["7L42", "6L42"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L39", "6M", "6L39"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + curse: ["7E", "6E"], + cut: ["6M"], + defensecurl: ["7E", "6E"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["7T", "6T"], + dualchop: ["7T", "6T"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + grassknot: ["7M", "6M"], + grasspledge: ["7T", "6T"], + growl: ["7L1", "6L1"], + gyroball: ["7M", "6M"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + leechseed: ["7L15", "6L15"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "6M"], + mudshot: ["7L35", "6L35"], + naturepower: ["7M", "6M"], + painsplit: ["7T", "7L45", "6T", "6L45"], + payback: ["7M", "6M"], + pinmissile: ["7L18", "6L18"], + poisonjab: ["7M", "6M"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "6M"], + quickguard: ["7E", "6E"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7L8", "7E", "6L8", "6E"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7T", "7L32", "6T", "6L32"], + shadowclaw: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + spikes: ["7E", "6E"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["7T", "6T"], + superpower: ["7T", "6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + synthesis: ["7T", "7E", "6T", "6E"], + tackle: ["6L1"], + takedown: ["7L27", "6L27"], + taunt: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + toxic: ["7M", "6M"], + vinewhip: ["7L5", "7L1", "6L5"], + woodhammer: ["7L48", "6L48"], + workup: ["7M"], + worryseed: ["7T", "6T"], + zenheadbutt: ["7T", "6T"], + }}, + quilladin: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bite: ["7L11", "6L11"], + bodyslam: ["7L48", "6L48"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L44", "6M", "6L44"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["7T", "6T"], + dualchop: ["7T", "6T"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + focuspunch: ["7T", "6T"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + grassknot: ["7M", "6M"], + grasspledge: ["7T", "6T"], + growl: ["7L1", "6L1"], + gyroball: ["7M", "6M"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + leechseed: ["7L15", "6L15"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "6M"], + mudshot: ["7L39", "6L39"], + naturepower: ["7M", "6M"], + needlearm: ["7L1", "6L26"], + painsplit: ["7T", "7L52", "6T", "6L52"], + payback: ["7M", "6M"], + pinmissile: ["7L19", "6L20"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7L8", "6L8"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7T", "7L35", "6T", "6L35"], + shadowclaw: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["7T", "6T"], + superpower: ["7T", "6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + synthesis: ["7T", "6T"], + tackle: ["6L1"], + takedown: ["7L29", "6L30"], + taunt: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + toxic: ["7M", "6M"], + vinewhip: ["7L5", "7L1", "6L5"], + woodhammer: ["7L56", "6L55"], + workup: ["7M"], + worryseed: ["7T", "6T"], + zenheadbutt: ["7T", "6T"], + }}, + chesnaught: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bellydrum: ["7L1", "6L1"], + bite: ["7L11", "6L11"], + block: ["7T", "6T"], + bodyslam: ["7L54", "6L48"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L48", "6M", "6L44"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragonclaw: ["7M", "6M"], + drainpunch: ["7T", "6T"], + dualchop: ["7T", "6T"], + earthquake: ["7M", "6M"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + feint: ["7L1", "6L1"], + flash: ["6M"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["7T", "6T"], + frenzyplant: ["7T", "6T"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + gigaimpact: ["7M", "7L78", "6M", "6L70"], + grassknot: ["7M", "6M"], + grasspledge: ["7T", "6T"], + growl: ["7L1", "6L1"], + gyroball: ["7M", "6M"], + hammerarm: ["7L72", "7L1", "6L1"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hyperbeam: ["7M", "6M"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + leechseed: ["7L15", "6L15"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "6M"], + mudshot: ["7L41", "6L41"], + naturepower: ["7M", "6M"], + needlearm: ["7L1", "6L26"], + painsplit: ["7T", "7L60", "6T", "6L52"], + payback: ["7M", "6M"], + pinmissile: ["7L19", "6L20"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7L8", "7L1", "6L8"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7T", "7L35", "6T", "6L35"], + shadowclaw: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + spikyshield: ["7L1", "6L36"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["7T", "6T"], + superpower: ["7T", "6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + synthesis: ["7T", "6T"], + tackle: ["7L1", "6L1"], + takedown: ["7L29", "6L30"], + taunt: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + toxic: ["7M", "6M"], + vinewhip: ["7L5", "7L1", "6L5"], + woodhammer: ["7L66", "6L55"], + workup: ["7M"], + worryseed: ["7T", "6T"], + zenheadbutt: ["7T", "6T"], + }}, + fennekin: {learnset: { + attract: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["7T", "6T"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + ember: ["7L5", "6L5"], + facade: ["7M", "6M"], + fireblast: ["7M", "7L48", "6M", "6L48"], + firepledge: ["7T", "6T"], + firespin: ["7L20", "6L20"], + flamecharge: ["7M", "7L14", "6M", "6L14"], + flamethrower: ["7M", "7L35", "6M", "6L35", "6S0"], + foulplay: ["7T", "6T"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + heatwave: ["7T", "7E", "6T", "6E"], + hiddenpower: ["7M", "6M", "6S0"], + howl: ["7L11", "6L11"], + hypnosis: ["7E", "6E"], + incinerate: ["6M"], + irontail: ["7T", "6T"], + lightscreen: ["7M", "7L27", "6M", "6L27"], + luckychant: ["7L25", "6L25"], + magiccoat: ["7T", "7E", "6T", "6E"], + magicroom: ["7T", "7L46", "6T", "6L46"], + overheat: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "7L41", "6M", "6L41"], + psychicterrain: ["7E"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L31", "6M", "6L31"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1", "6S0"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "7L43", "6M", "6L43"], + swagger: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + willowisp: ["7M", "7L38", "6M", "6L38"], + wish: ["7E", "6E"], + workup: ["7M"], + }}, + braixen: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["7T", "6T"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + ember: ["7L5", "7L1", "6L5"], + facade: ["7M", "6M"], + fireblast: ["7M", "7L59", "6M", "6L55"], + firepledge: ["7T", "6T"], + firepunch: ["7T", "6T"], + firespin: ["7L22", "6L22"], + flamecharge: ["7M", "7L14", "6M", "6L14"], + flamethrower: ["7M", "7L41", "6M", "6L41"], + foulplay: ["7T", "6T"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + heatwave: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + howl: ["7L11", "6L11"], + incinerate: ["6M"], + irontail: ["7T", "6T"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L31", "6M", "6L30"], + lowkick: ["7T", "6T"], + luckychant: ["7L28", "6L27"], + magiccoat: ["7T", "6T"], + magicroom: ["7T", "7L56", "6T", "6L53"], + overheat: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L18", "6L18"], + psychic: ["7M", "7L49", "6M", "6L48"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L36", "6M", "6L34"], + raindance: ["7M", "6M"], + recycle: ["7T", "6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shockwave: ["7T", "6T"], + skillswap: ["7T", "6T"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "7L52", "6M", "6L51"], + swagger: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + telekinesis: ["7T"], + thief: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + toxic: ["7M", "6M"], + trick: ["7T", "6T"], + willowisp: ["7M", "7L45", "6M", "6L45"], + wonderroom: ["7T", "6T"], + workup: ["7M"], + zenheadbutt: ["7T", "6T"], + }}, + delphox: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "6M"], + blastburn: ["7T", "6T"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["7T", "6T"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + ember: ["7L5", "7L1", "6L5"], + facade: ["7M", "6M"], + fireblast: ["7M", "7L74", "6M", "6L61"], + firepledge: ["7T", "6T"], + firepunch: ["7T", "6T"], + firespin: ["7L22", "6L22"], + flamecharge: ["7M", "7L14", "6M", "6L14"], + flamethrower: ["7M", "7L45", "6M", "6L42"], + foulplay: ["7T", "6T"], + frustration: ["7M", "6M"], + futuresight: ["7L80", "7L1", "6L1"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + heatwave: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + howl: ["7L11", "7L1", "6L11"], + hyperbeam: ["7M", "6M"], + incinerate: ["6M"], + irontail: ["7T", "6T"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L31", "6M", "6L30"], + lowkick: ["7T", "6T"], + luckychant: ["7L28", "6L27"], + magiccoat: ["7T", "6T"], + magicroom: ["7T", "7L68", "6T", "6L58"], + mysticalfire: ["7L1", "6L36"], + overheat: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L18", "6L18"], + psychic: ["7M", "7L57", "6M", "6L51"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L38", "6M", "6L34"], + raindance: ["7M", "6M"], + recycle: ["7T", "6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7T", "7L1", "6T", "6L1"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "7L1", "6M", "6L1"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], + skillswap: ["7T", "6T"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "7L62", "6M", "6L55"], + swagger: ["7M", "6M"], + switcheroo: ["7L1", "6L1"], + tailwhip: ["7L1", "6L1"], + telekinesis: ["7T"], + thief: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + toxic: ["7M", "6M"], + trick: ["7T", "6T"], + trickroom: ["7M", "6M"], + willowisp: ["7M", "7L51", "6M", "6L47"], + wonderroom: ["7T", "6T"], + workup: ["7M"], + zenheadbutt: ["7T", "6T"], + }}, + froakie: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bestow: ["7E", "6E"], + blizzard: ["7M", "6M"], + bounce: ["7T", "7L39", "6T", "6L39"], + bubble: ["7L5", "6L5", "6S0"], + camouflage: ["7E", "6E"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "7L43", "6M", "6L43"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + fling: ["7M", "7L25", "6M", "6L25"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1", "6S0"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L48", "6L48"], + icebeam: ["7M", "6M"], + icywind: ["7T", "6T"], + lick: ["7L10", "6L10"], + mindreader: ["7E", "6E"], + mudsport: ["7E", "6E"], + pound: ["7L1", "6L1", "6S0"], + poweruppunch: ["7E", "6M"], + protect: ["7M", "6M"], + quickattack: ["7L8", "6L8"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M", "6S0"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roleplay: ["7T", "6T"], + round: ["7M", "7L21", "6M", "6L21"], + scald: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "7L29", "6M", "6L29"], + smokescreen: ["7L18", "6L18"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + strength: ["6M"], + substitute: ["7M", "7L35", "6M", "6L35"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + toxicspikes: ["7E", "6E"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + waterpledge: ["7T", "6T"], + waterpulse: ["7T", "7L14", "6T", "6L14"], + watersport: ["7E", "6E"], + workup: ["7M"], }}, - pawniard: {learnset: { - aerialace: ["7M", "6M", "5M"], - assurance: ["7L33", "6L33", "5L33"], - attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], + frogadier: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + blizzard: ["7M", "6M"], + bounce: ["7T", "7L45", "6T", "6L44"], + bubble: ["7L5", "7L1", "6L5"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], - dig: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dualchop: ["6T", "5T"], - embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - feintattack: ["7L17", "6L17", "5L17"], - fling: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M"], - furycutter: ["7L9", "6L9", "5L9", "5D"], - grassknot: ["7M", "6M", "5M"], - guillotine: ["7L62", "6L62", "5L62"], - headbutt: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - irondefense: ["7L46", "6T", "6L46", "5T", "5L46"], - ironhead: ["7L54", "6T", "6L54", "5T", "5L54"], - knockoff: ["6T", "5T"], - leer: ["7L6", "6L6", "5L6"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - meanlook: ["7E", "6E", "5E"], - metalclaw: ["7L25", "6L25", "5L25"], - metalsound: ["7L38", "6L38", "5L38"], - nightslash: ["7L49", "6L49", "5L49"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "7L50", "6M", "6L48"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + fling: ["7M", "7L28", "6M", "6L28"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1"], + gunkshot: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L56", "6L55"], + icebeam: ["7M", "6M"], + icepunch: ["7T", "6T"], + icywind: ["7T", "6T"], + lick: ["7L10", "6L10"], + lowkick: ["7T", "6T"], + pound: ["7L1", "6L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M"], - psychocut: ["7E", "6E", "5E", "5D"], - pursuit: ["7E", "6E", "5E"], - quickguard: ["7E", "6E"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - revenge: ["7E", "6E", "5E"], - rockpolish: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], - round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - scaryface: ["7L22", "6L22", "5L22"], - scratch: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M"], + quickattack: ["7L8", "6L8"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roleplay: ["7T", "6T"], + round: ["7M", "7L23", "6M", "6L23"], + scald: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L30", "6L30", "5L30"], - sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stealthrock: ["7E", "6T", "6E", "5T", "5E"], - substitute: ["7M", "6M", "5M"], - suckerpunch: ["7E", "6E", "5E", "5D"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], - toxic: ["7M", "6M", "5M"], - xscissor: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "7L33", "6M", "6L33"], + smokescreen: ["7L19", "6L20"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + strength: ["6M"], + substitute: ["7M", "7L40", "6M", "6L38"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + waterpledge: ["7T", "6T"], + waterpulse: ["7T", "7L14", "6T", "6L14"], + workup: ["7M"], }}, - bisharp: {learnset: { - aerialace: ["7M", "6M", "5M"], - assurance: ["7L33", "6L33", "5L33"], - attract: ["7M", "6M", "5M"], - brickbreak: ["7M", "6M", "5M"], + greninja: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + blizzard: ["7M", "6M"], + bounce: ["7T", "6T"], + brutalswing: ["7M"], + bubble: ["7L5", "7L1", "6L5"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - darkpulse: ["7M", "6M", "5T"], - dig: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dualchop: ["6T", "5T"], - embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], - facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - feintattack: ["7L17", "6L17", "5L17"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M"], - furycutter: ["7L9", "7L1", "6L1", "5L1"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - guillotine: ["7L71", "7L1", "6L1", "5L71"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - irondefense: ["7L46", "6T", "6L46", "5T", "5L46"], - ironhead: ["7L57", "7L1", "6T", "6L1", "5T", "5L57"], - knockoff: ["6T", "5T"], - leer: ["7L6", "7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - metalburst: ["7L1", "6L1", "5L1"], - metalclaw: ["7L25", "6L25", "5L25"], - metalsound: ["7L38", "6L38", "5L38"], - nightslash: ["7L49", "6L49", "5L49"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "7L56", "6M", "6L52"], + echoedvoice: ["7M", "6M"], + extrasensory: ["7L49", "6L49"], + facade: ["7M", "6M"], + feintattack: ["7L33", "6L33"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1"], + gunkshot: ["7T", "6T", "6S1"], + happyhour: ["6S1"], + haze: ["7L70", "7L1", "6L56"], + hiddenpower: ["7M", "6M"], + hydrocannon: ["7T", "6T", "6S1"], + hydropump: ["7L68", "6L60", "6S0"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + icepunch: ["7T", "6T"], + icywind: ["7T", "6T"], + lick: ["7L10", "6L10"], + lowkick: ["7T", "6T"], + matblock: ["7L1", "6L1", "6S1"], + nightslash: ["7L77", "7L1", "6L1"], + pound: ["7L1", "6L1"], poweruppunch: ["6M"], - protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roleplay: ["6T", "5T"], - round: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], - scaryface: ["7L22", "6L22", "5L22"], - scratch: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M"], + quickattack: ["7L8", "7L1", "6L8"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roleplay: ["7T", "7L1", "6T", "6L1"], + round: ["7M", "6M"], + scald: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L30", "6L30", "5L30"], - sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L63", "6M", "6L63", "5M", "5L63"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "7L14", "7L1", "6M", "6L1", "5M", "5L1"], - toxic: ["7M", "6M", "5M"], - xscissor: ["7M", "6M", "5M"], + shadowsneak: ["7L23", "6L23", "6S0"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "6M"], + smokescreen: ["7L19", "6L20"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spikes: ["7L28", "6L28"], + spite: ["7T", "6T"], + strength: ["6M"], + substitute: ["7M", "7L42", "6M", "6L43", "6S0"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + waterpledge: ["7T", "6T"], + waterpulse: ["7T", "7L14", "6T", "6L14"], + watershuriken: ["7L1", "6L36", "6S0"], + workup: ["7M"], }}, - bouffalant: {learnset: { - aerialace: ["7M", "6M", "5M"], - amnesia: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M"], - belch: ["7E", "6E"], - bulldoze: ["7M", "6M", "5M"], - confide: ["7M", "6M"], - cut: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - earthquake: ["7M", "6M", "6S0", "5M"], - endeavor: ["6T", "5T"], - facade: ["7M", "6M", "6S0", "5M"], - focusenergy: ["7L36", "6L36", "5L36"], - frustration: ["7M", "6M", "5M"], - furyattack: ["7L11", "6L11", "5L11"], - gigaimpact: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], - headbutt: ["7E", "6E", "5E"], - headcharge: ["7L31", "6L31", "6S0", "5L31"], - hiddenpower: ["7M", "6M", "5M"], - hornattack: ["7L16", "6L16", "5L16"], - ironhead: ["7E", "6T", "6E", "5T", "5E"], - leer: ["7L1", "6L1", "5L1"], - megahorn: ["7L41", "6L41", "5L41"], - mudshot: ["7E", "6E", "5E"], - mudslap: ["7E", "6E", "5E"], - outrage: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - pursuit: ["7L1", "6L1", "5L1"], - rage: ["7L6", "6L6", "5L6"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - revenge: ["7L26", "6L26", "5L26"], - reversal: ["7L46", "6L46", "5L46"], - rockclimb: ["7E", "6E", "5E"], - rockslide: ["7M", "6M", "6S0", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - scaryface: ["7L21", "6L21", "5L21"], - secretpower: ["6M"], - skullbash: ["7E", "6E", "5E"], - sleeptalk: ["7M", "6M", "5T"], - smartstrike: ["7M"], - snore: ["6T", "5T"], - stomp: ["7E", "6E", "5E"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], - taunt: ["7M", "6M", "5M"], - thrash: ["7L50", "6L50", "5L51"], - toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - wildcharge: ["7M", "6M", "5M"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T"], + greninjaash: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M", "7S0"], + attract: ["7M"], + blizzard: ["7M"], + bounce: ["7T"], + brutalswing: ["7M"], + bubble: ["7L1"], + confide: ["7M"], + darkpulse: ["7M"], + doubleteam: ["7M", "7L56", "7S0"], + echoedvoice: ["7M"], + extrasensory: ["7L49"], + facade: ["7M"], + feintattack: ["7L33"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growl: ["7L1"], + gunkshot: ["7T"], + haze: ["7L1"], + hiddenpower: ["7M"], + hydrocannon: ["7T"], + hydropump: ["7L68"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7T"], + icywind: ["7T"], + lick: ["7L10"], + lowkick: ["7T"], + matblock: ["7L1"], + nightslash: ["7L1", "7S0"], + pound: ["7L1"], + protect: ["7M"], + quickattack: ["7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7T", "7L1"], + round: ["7M"], + scald: ["7M"], + shadowsneak: ["7L23"], + sleeptalk: ["7M"], + smackdown: ["7M"], + smokescreen: ["7L19"], + snatch: ["7T"], + snore: ["7T"], + spikes: ["7L28"], + spite: ["7T"], + substitute: ["7M", "7L42"], + surf: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + thief: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + waterfall: ["7M"], + waterpledge: ["7T"], + waterpulse: ["7T", "7L14"], + watershuriken: ["7L1", "7S0"], + workup: ["7M"], }}, - rufflet: {learnset: { - aerialace: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], - airslash: ["7L41", "6L41", "5L41"], - attract: ["7M", "6M", "5M"], - bravebird: ["7L59", "6L59", "5L59"], - bulkup: ["7M", "6M", "5M"], + bunnelby: {learnset: { + agility: ["7L1", "6L1"], + attract: ["7M", "6M"], + bounce: ["7T", "7L38", "6T", "6L38"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], confide: ["7M", "6M"], - crushclaw: ["7L46", "6L46", "5L46"], - cut: ["6M", "5M"], - defog: ["7L32", "6L32", "5L32"], - doubleteam: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - furyattack: ["7L5", "6L5", "5L5"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L14", "6M", "6L14", "5M", "5L14"], - leer: ["7L1", "6L1", "5L1"], - peck: ["7L1", "6L1", "5L1"], - pluck: ["5M"], - protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - scaryface: ["7L19", "6L19", "5L19"], + cut: ["6M"], + defensecurl: ["7E", "6E"], + dig: ["7L33", "6M", "6L33"], + doublekick: ["7L20", "6L20"], + doubleslap: ["7L10", "6L10"], + doubleteam: ["7M", "6M"], + earthquake: ["7M", "7L49", "6M", "6L49"], + endeavor: ["7T", "6T"], + facade: ["7M", "7L47", "6M", "6L47"], + flail: ["7L29", "6L29"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + lastresort: ["7T", "6T"], + leer: ["7L1", "6L1"], + mudshot: ["7L18", "6L18"], + mudslap: ["7L13", "6L13"], + naturepower: ["7M", "6M"], + odorsleuth: ["7L25", "6L25"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L7", "6L7"], + recycle: ["7T", "6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7E", "6E"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - skydrop: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - slash: ["7L28", "6L28", "5L28"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], - thrash: ["7L64", "6L64", "5L64"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - whirlwind: ["7L55", "6L55", "5L55"], - wingattack: ["7L10", "6L10", "5L10"], - workup: ["7M", "5M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["7T", "6T"], + spikes: ["7E", "6E"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + superfang: ["7T", "7L42", "6T", "6L42"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + wildcharge: ["7M", "6M"], + workup: ["7M"], }}, - braviary: {learnset: { - aerialace: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "5S0"], - airslash: ["7L41", "6L41", "5L41"], - attract: ["7M", "6M", "5M"], - bravebird: ["7L63", "7L1", "6L1", "5L63"], - bulkup: ["7M", "6M", "5M"], + diggersby: {learnset: { + agility: ["7L1", "6L1"], + attract: ["7M", "6M"], + bounce: ["7T", "7L43", "6T", "6L42"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "7L1", "6M", "6L1"], confide: ["7M", "6M"], - crushclaw: ["7L46", "6L46", "5L46"], - cut: ["6M", "5M"], - defog: ["7L32", "6L32", "5L32"], - doubleteam: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - furyattack: ["7L5", "7L1", "6L1", "5L1"], - gigaimpact: ["7M", "6M", "5M"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L14", "6M", "6L14", "5M", "5L14", "5S0"], - hyperbeam: ["7M", "6M", "5M"], - leer: ["7L1", "6L1", "5L1"], - peck: ["7L1", "6L1", "5L1"], - pluck: ["5M"], - protect: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - scaryface: ["7L19", "6L19", "5L19", "5S0"], + cut: ["6M"], + dig: ["7L37", "6M", "6L37"], + doublekick: ["7L21", "6L20"], + doubleslap: ["7L13"], + doubleteam: ["7M", "6M"], + earthpower: ["7T", "6T"], + earthquake: ["7M", "7L57", "6M", "6L57"], + endeavor: ["7T", "6T"], + facade: ["7M", "7L54", "6M", "6L53"], + firepunch: ["7T", "6T"], + flail: ["7L32", "6L31"], + fling: ["7M", "6M"], + focuspunch: ["7T", "6T"], + foulplay: ["7T", "6T"], + frustration: ["7M", "6M"], + gastroacid: ["7T", "6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gunkshot: ["7T", "6T"], + hammerarm: ["7L60", "7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + icepunch: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + knockoff: ["7T", "6T"], + lastresort: ["7T", "6T"], + leer: ["7L1", "6L1"], + lowkick: ["7T", "6T"], + mudshot: ["7L18", "6L18"], + mudslap: ["7L13", "6L13"], + naturepower: ["7M", "6M"], + odorsleuth: ["7L27", "6L26"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L7", "6L7"], + recycle: ["7T", "6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - skyattack: ["6T", "5T"], - skydrop: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - slash: ["7L28", "6L28", "5L28"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["7L1", "6T", "6L1", "5T", "5L51"], - swagger: ["7M", "6M", "5M"], - tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], - thrash: ["7L70", "7L1", "6L1", "5L70"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - whirlwind: ["7L57", "7L1", "6L1", "5L57"], - wingattack: ["7L10", "7L1", "6L1", "5L1", "5S0"], - workup: ["7M", "5M"], - zenheadbutt: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + superfang: ["7T", "7L48", "6T", "6L48"], + superpower: ["7T", "6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], + thief: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["7T", "6T"], + uturn: ["7M", "6M"], + wildcharge: ["7M", "6M"], + workup: ["7M"], }}, - vullaby: {learnset: { - aerialace: ["7M", "6M", "5M"], - airslash: ["7L41", "6L41", "5L41"], - attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bravebird: ["7L59", "6L59", "5L59"], + fletchling: {learnset: { + acrobatics: ["7M", "7L39", "6M", "6L39"], + aerialace: ["7M", "6M"], + agility: ["7L13", "6L13"], + attract: ["7M", "6M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - darkpulse: ["7M", "7L46", "6M", "6L46", "5T", "5L46"], - defog: ["7L32", "6L32", "5L32"], - doubleteam: ["7M", "6M", "5M"], - embargo: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - facade: ["7M", "6M", "5M"], - faketears: ["7E", "6E", "5E"], - feintattack: ["7L23", "6L23", "5L23"], - flatter: ["7L19", "6L19", "5L19"], - fly: ["7M", "6M", "5M"], - foulplay: ["7E", "6T", "6E", "5T"], - frustration: ["7M", "6M", "5M"], - furyattack: ["7L5", "6L5", "5L5"], - gust: ["7L1", "6L1", "5L1"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irondefense: ["5T"], - knockoff: ["7E", "6T", "6E", "5T", "5E"], - leer: ["7L1", "6L1", "5L1"], - meanlook: ["7E", "6E", "5E"], - mirrormove: ["7L64", "6L64", "5L64"], - nastyplot: ["7L14", "6L14", "5L14"], - payback: ["7M", "6M", "5M"], - pluck: ["7L10", "6L10", "5M", "5L10"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - punishment: ["7L28", "6L28", "5L28"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "7E", "6M", "6E", "5T", "5E"], - round: ["7M", "6M", "5M"], - scaryface: ["7E", "6E", "5E"], + defog: ["7T"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + flail: ["7L16", "6L16"], + flamecharge: ["7M", "7L34", "6M", "6L34"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + growl: ["7L1", "6L1"], + heatwave: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + mefirst: ["7L41", "6L41"], + naturalgift: ["7L29", "6L29"], + overheat: ["7M", "6M"], + peck: ["7L10", "6L10"], + protect: ["7M", "6M"], + quickattack: ["7L6", "6L6"], + quickguard: ["7E", "6E"], + razorwind: ["7L25", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L21", "6M", "6L21"], + round: ["7M", "6M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "7E", "6M", "6E", "5E"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - whirlwind: ["7L55", "6L55", "5L55"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "7E", "6T", "6E"], + snore: ["7T", "6T"], + steelwing: ["7M", "7L48", "6M", "6L48"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwind: ["7T", "7L45", "7E", "6T", "6L45", "6E"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + workup: ["7M"], }}, - mandibuzz: {learnset: { - aerialace: ["7M", "6M", "5M"], - airslash: ["7L41", "6L41", "5L41"], - attract: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bonerush: ["7L1", "6L1", "5L51"], - bravebird: ["7L63", "7L1", "6L1", "5L63"], + fletchinder: {learnset: { + acrobatics: ["7M", "7L42", "6M", "6L42"], + aerialace: ["7M", "6M"], + agility: ["7L13", "6L13"], + attract: ["7M", "6M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - darkpulse: ["7M", "7L46", "6M", "6L46", "5T", "5L46"], - defog: ["7L32", "6L32", "5L32"], - doubleteam: ["7M", "6M", "5M"], - embargo: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], - facade: ["7M", "6M", "5M"], - feintattack: ["7L23", "6L23", "5L23", "5S0"], - flatter: ["7L19", "6L19", "5L19", "5S0"], - fly: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M"], - furyattack: ["7L5", "7L1", "6L1", "5L1"], - gigaimpact: ["7M", "6M", "5M"], - gust: ["7L1", "6L1", "5L1"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irondefense: ["5T"], - knockoff: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - mirrormove: ["7L70", "7L1", "6L1", "5L70"], - nastyplot: ["7L14", "6L14", "5L14", "5S0"], - payback: ["7M", "6M", "5M"], - pluck: ["7L10", "7L1", "6L1", "5M", "5L1", "5S0"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - punishment: ["7L28", "6L28", "5L28"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], + defog: ["7T"], + doubleteam: ["7M", "6M"], + ember: ["7L1", "6L17"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flail: ["7L16", "6L16"], + flamecharge: ["7M", "7L38", "6M", "6L38"], + flamethrower: ["7M", "6M"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + growl: ["7L1", "6L1"], + heatwave: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + incinerate: ["6M"], + mefirst: ["7L46", "6L46"], + naturalgift: ["7L31", "6L31"], + overheat: ["7M", "6M"], + peck: ["7L10", "6L10"], + protect: ["7M", "6M"], + quickattack: ["7L6", "7L1", "6L6"], + razorwind: ["7L27", "6L27"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L25", "6M", "6L25"], + round: ["7M", "6M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - skyattack: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snarl: ["7M", "6M", "5M"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - whirlwind: ["7L57", "7L1", "6L1", "5L57"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + steelwing: ["7M", "7L55", "6M", "6L55"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwind: ["7T", "7L51", "6T", "6L51"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M"], }}, - heatmor: {learnset: { - aerialace: ["7M", "6M", "5M"], - amnesia: ["7L47", "6L44", "5L46"], - attract: ["7M", "6M", "5M"], - belch: ["7E", "6E"], - bind: ["7L11", "6T", "6L11", "5T", "5L11"], - bodyslam: ["7E", "6E", "5E"], - bugbite: ["7L36", "6T", "6L36", "5T", "5L36"], + talonflame: {learnset: { + acrobatics: ["7M", "7L44", "6M", "6L44"], + aerialace: ["7M", "6M"], + agility: ["7L13", "6L13"], + attract: ["7M", "6M"], + bravebird: ["7L64", "7L1", "6L1"], + bulkup: ["7M", "6M"], confide: ["7M", "6M"], - curse: ["7E", "6E", "5E"], - cut: ["6M", "5M"], - dig: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - feintattack: ["7E", "6E", "5E"], - fireblast: ["7M", "6M", "5M"], - firelash: ["7L44"], - firepunch: ["6T", "5T"], - firespin: ["7L16", "6L16", "5L16"], - flameburst: ["7L31", "6L31", "5L31"], - flamethrower: ["7M", "7L50", "6M", "6L47", "5M", "5L51"], - flareblitz: ["7L61"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], - frustration: ["7M", "6M", "5M"], - furyswipes: ["7L21", "6L21", "5L21"], - gastroacid: ["6T", "5T"], - gigadrain: ["6T", "5T", "5D"], - gigaimpact: ["7M", "6M", "5M"], - heatwave: ["7E", "6T", "6E", "5T", "5E", "5D"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["7L1", "6M", "6L1", "5M"], - incinerate: ["7L1", "6M", "6L1", "5M", "5L1", "5D"], - inferno: ["7L66", "6L1", "5L61"], - knockoff: ["6T", "5T"], - lick: ["7L1", "6L1", "5L1"], - lowkick: ["6T", "5T"], - nightslash: ["7E", "6E", "5E"], - odorsleuth: ["7L6", "6L6", "5L6"], - overheat: ["7M"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M"], - pursuit: ["7E", "6E", "5E"], - raindance: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], + defog: ["7T"], + doubleteam: ["7M", "6M"], + ember: ["7L1", "6L17"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flail: ["7L16", "6L16"], + flamecharge: ["7M", "7L39", "6M", "6L39"], + flamethrower: ["7M", "6M"], + flareblitz: ["7L1", "6L1"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + growl: ["7L1", "6L1"], + heatwave: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hyperbeam: ["7M", "6M"], + incinerate: ["6M"], + mefirst: ["7L49", "6L49"], + naturalgift: ["7L31", "6L31"], + overheat: ["7M", "6M"], + peck: ["7L10", "7L1", "6L10"], + protect: ["7M", "6M"], + quickattack: ["7L6", "7L1", "6L6"], + razorwind: ["7L27", "6L27"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L25", "6M", "6L25"], + round: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L41", "6L41", "5L41"], - sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], - snatch: ["7L26", "6T", "6L26", "5T", "5L26"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - spitup: ["7L56", "6L50", "5L56"], - stockpile: ["7L56", "6L50", "5L56"], - substitute: ["7M", "6M", "5M"], - suckerpunch: ["7E", "6E", "5E"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - swallow: ["7L56", "6L50", "5L56"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + steelwing: ["7M", "7L60", "6M", "6L60"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], tackle: ["7L1", "6L1"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], - tickle: ["7E", "6E", "5E"], - toxic: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - wrap: ["7E", "6E", "5E"], + tailwind: ["7T", "7L55", "6T", "6L55"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M"], }}, - durant: {learnset: { - aerialace: ["7M", "6M", "5M"], - agility: ["7L6", "6L16", "5L16"], - attract: ["7M", "6M", "5M"], - batonpass: ["7E", "6E", "5E"], - bite: ["7L1", "6L11", "5L11"], - bugbite: ["7L16", "6T", "6L26", "5T", "5L26"], + scatterbug: {learnset: { + bugbite: ["7T", "7L15", "6T", "6L15"], + poisonpowder: ["7E", "6E"], + ragepowder: ["7E", "6E"], + stringshot: ["7L1", "6L1"], + stunspore: ["7L6", "7E", "6L6", "6E"], + tackle: ["7L1", "6L1"], + }}, + spewpa: {learnset: { + bugbite: ["7T", "6T"], + electroweb: ["7T", "6T"], + harden: ["7L1", "6L1"], + irondefense: ["7T", "6T"], + protect: ["7M", "7L1", "6M", "6L9"], + }}, + vivillon: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + aromatherapy: ["7L31", "6L31"], + attract: ["7M", "6M"], + bugbite: ["7T", "6T"], + bugbuzz: ["7L35", "6L35"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - crunch: ["7L21", "6L31", "5L31"], - cut: ["6M", "5M"], - dig: ["7L31", "6M", "6L41", "5M", "5L41"], - doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - endure: ["7E", "6E", "5E", "5D"], - energyball: ["7M", "6M", "5M"], - entrainment: ["7L36", "6L46", "5L46"], - facade: ["7M", "6M", "5M"], - feintattack: ["7E", "6E", "5E"], - flashcannon: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - furycutter: ["7L1", "6L6", "5L6", "5D"], - gigaimpact: ["7M", "6M", "5M"], - guillotine: ["7L51", "7L1", "6L1", "5L61"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - irondefense: ["7L46", "6T", "6L1", "5T", "5L56"], - ironhead: ["7L26", "6T", "6L36", "5T", "5L36"], - metalclaw: ["7L11", "6L21", "5L21"], - metalsound: ["7L56", "7L1", "6L1", "5L66"], - protect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rockclimb: ["7E", "6E", "5E"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - sandattack: ["7L1", "6L1", "5L1"], - sandstorm: ["7M", "6M", "5M"], - screech: ["7E", "6E", "5E"], + defog: ["7T"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L25", "6L25"], + dreameater: ["7M", "6M"], + electroweb: ["7T", "6T"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + gigaimpact: ["7M", "6M"], + gust: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hurricane: ["7L50", "6L50"], + hyperbeam: ["7M", "6M"], + infestation: ["7M", "6M"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L12", "6M", "6L1"], + poisonpowder: ["7L1", "6L1"], + powder: ["7L55", "7L1", "6L1"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + quiverdance: ["7L45", "6L45"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L41", "6M", "6L41"], secretpower: ["6M"], - shadowclaw: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - thunderfang: ["7E", "6E", "5E", "5D"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - vicegrip: ["7L1", "6L1", "5L1"], - xscissor: ["7M", "7L41", "6M", "6L51", "5M", "5L51"], + signalbeam: ["7T", "6T"], + sleeppowder: ["7L1", "6L1"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + strugglebug: ["7L1", "6M", "6L12"], + stunspore: ["7L1", "6L1"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + supersonic: ["7L21", "6L21"], + swagger: ["7M", "6M"], + tailwind: ["7T", "6T"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + }}, + vivillonfancy: {learnset: { + acrobatics: ["6M"], + aerialace: ["6M"], + aromatherapy: ["6L31"], + attract: ["6M"], + bugbite: ["6T"], + bugbuzz: ["6L35"], + calmmind: ["6M"], + confide: ["6M"], + doubleteam: ["6M"], + drainingkiss: ["6L25"], + dreameater: ["6M"], + electroweb: ["6T"], + endeavor: ["6T"], + energyball: ["6M"], + facade: ["6M"], + flash: ["6M"], + frustration: ["6M"], + gigadrain: ["6T"], + gigaimpact: ["6M"], + gust: ["6L1", "6S0"], + hiddenpower: ["6M"], + holdhands: ["6S0"], + hurricane: ["6L50"], + hyperbeam: ["6M"], + infestation: ["6M"], + lightscreen: ["6M", "6L1", "6S0"], + poisonpowder: ["6L1"], + powder: ["6L1"], + protect: ["6M"], + psybeam: ["6L17"], + psychic: ["6M"], + psychup: ["6M"], + quiverdance: ["6L45"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + roost: ["6M"], + round: ["6M"], + safeguard: ["6M", "6L41"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeppowder: ["6L1"], + sleeptalk: ["6M"], + snore: ["6T"], + solarbeam: ["6M"], + strugglebug: ["6M", "6L12", "6S0"], + stunspore: ["6L1"], + substitute: ["6M"], + sunnyday: ["6M"], + supersonic: ["6L21"], + swagger: ["6M"], + tailwind: ["6T"], + thief: ["6M"], + toxic: ["6M"], + uturn: ["6M"], + }}, + vivillonpokeball: {learnset: { + acrobatics: ["6M"], + aerialace: ["6M"], + aromatherapy: ["6L31"], + attract: ["6M"], + bugbite: ["6T"], + bugbuzz: ["6L35"], + calmmind: ["6M"], + confide: ["6M"], + doubleteam: ["6M"], + drainingkiss: ["6L25"], + dreameater: ["6M"], + electroweb: ["6T"], + endeavor: ["6T"], + energyball: ["6M"], + facade: ["6M"], + flash: ["6M"], + frustration: ["6M"], + gigadrain: ["6T"], + gigaimpact: ["6M"], + gust: ["6L1", "6S0"], + hiddenpower: ["6M"], + hurricane: ["6L50"], + hyperbeam: ["6M"], + infestation: ["6M"], + lightscreen: ["6M", "6L1", "6S0"], + poisonpowder: ["6L1"], + powder: ["6L1"], + protect: ["6M"], + psybeam: ["6L17"], + psychic: ["6M"], + psychup: ["6M"], + quiverdance: ["6L45"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + roost: ["6M"], + round: ["6M"], + safeguard: ["6M", "6L41"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeppowder: ["6L1"], + sleeptalk: ["6M"], + snore: ["6T"], + solarbeam: ["6M"], + strugglebug: ["6M", "6L12", "6S0"], + stunspore: ["6L1", "6S0"], + substitute: ["6M"], + sunnyday: ["6M"], + supersonic: ["6L21"], + swagger: ["6M"], + tailwind: ["6T"], + thief: ["6M"], + toxic: ["6M"], + uturn: ["6M"], }}, - deino: {learnset: { - aquatail: ["6T", "5T"], - assurance: ["7E", "6E", "5E"], - astonish: ["7E", "6E", "5E"], - attract: ["7M", "6M", "5M"], - bite: ["7L9", "6L9", "5L9"], - bodyslam: ["7L48", "6L48", "5L48"], + litleo: {learnset: { + attract: ["7M", "6M"], + bulldoze: ["7M", "6M"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "5L25"], - darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E"], - doublehit: ["7E", "6E", "5E"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonbreath: ["7L17", "6L17", "5L17"], - dragonpulse: ["7L32", "6T", "6L32", "5T", "5L32"], - dragonrage: ["7L1", "6L1", "5L1", "5S0"], - dragonrush: ["7L42", "6L42", "5L42"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["7E", "6T", "6E", "5T", "5E"], - facade: ["7M", "6M", "5M"], - firefang: ["7E", "6E", "5E"], - focusenergy: ["7L4", "6L4", "5L4"], - frustration: ["7M", "6M", "5M"], - headbutt: ["7L12", "6L12", "5L12"], - headsmash: ["7E", "6E", "5E"], - hiddenpower: ["7M", "6M", "5M"], - hypervoice: ["7L58", "6T", "6L58", "5T", "5L58"], - icefang: ["7E", "6E", "5E"], - incinerate: ["6M", "5M"], - outrage: ["7L62", "6T", "6L62", "5T", "5L62"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], - rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], - scaryface: ["7L50", "6L50", "5L52"], - screech: ["7E", "6E", "5E"], + crunch: ["7L39", "6L39"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "7L33", "6M", "6L33"], + ember: ["7L5", "6L5"], + endeavor: ["7T", "7L28", "6T", "6L28"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + firefang: ["7L23", "6L23"], + firespin: ["7E", "6E"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "7L36", "6M", "6L36"], + flareblitz: ["7E"], + frustration: ["7M", "6M"], + headbutt: ["7L11", "6L11"], + heatwave: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hypervoice: ["7T", "7L43", "6T", "6L43"], + incinerate: ["7L46", "6M", "6L46"], + irontail: ["7T", "6T"], + leer: ["7L1", "6L1"], + nobleroar: ["7L15", "6L15"], + overheat: ["7M", "7L50", "6M", "6L50"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], secretpower: ["6M"], - shockwave: ["6T"], - slam: ["7L28", "6L28", "5L28"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - tackle: ["7L1", "6L1", "5L1", "5S0"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderfang: ["7E", "6E", "5E"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - workup: ["7M", "7L38", "6L38", "5M", "5L38"], - zenheadbutt: ["6T", "5T"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "6M"], + snatch: ["7T", "7E", "6T", "6E"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L20", "6L20"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + wildcharge: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M", "7L8", "6L8"], + yawn: ["7E", "6E"], }}, - zweilous: {learnset: { - aquatail: ["6T", "5T"], - attract: ["7M", "6M", "5M"], - bite: ["7L9", "7L1", "6L1", "5L1"], - bodyslam: ["7L48", "6L48", "5L48"], + pyroar: {learnset: { + attract: ["7M", "6M"], + bounce: ["7T", "6T"], + bulldoze: ["7M", "6M"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "5L25"], - darkpulse: ["7M", "6M", "5T"], - doublehit: ["7L1", "6L1", "5L1"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonbreath: ["7L17", "6L17", "5L17"], - dragonpulse: ["7L32", "6T", "6L32", "5T", "5L32"], - dragonrage: ["7L1", "6L1", "5L1"], - dragonrush: ["7L42", "6L42", "5L42"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - facade: ["7M", "6M", "5M"], - focusenergy: ["7L4", "7L1", "6L1", "5L1"], - frustration: ["7M", "6M", "5M"], - headbutt: ["7L12", "6L12", "5L12"], - hiddenpower: ["7M", "6M", "5M"], - hypervoice: ["7L64", "6T", "6L64", "5T", "5L64"], - incinerate: ["6M", "5M"], - outrage: ["7L71", "6T", "6L71", "5T", "5L71"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], - rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], - scaryface: ["7L55", "6L55", "5L55"], + crunch: ["7L42", "6L42"], + darkpulse: ["7M", "6M", "6S0"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "7L33", "6M", "6L33"], + ember: ["7L5", "7L1", "6L5"], + endeavor: ["7T", "7L28", "6T", "6L28"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M", "6S0"], + firefang: ["7L23", "6L23"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "7L38", "6M", "6L38"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + headbutt: ["7L11", "6L11"], + heatwave: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "7L1", "6M", "6L1"], + hypervoice: ["7T", "7L48", "6T", "6L48", "6S0"], + incinerate: ["7L51", "6M", "6L51"], + irontail: ["7T", "6T"], + leer: ["7L1", "6L1"], + nobleroar: ["7L15", "6L15"], + overheat: ["7M", "7L57", "6M", "6L57"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], secretpower: ["6M"], - shockwave: ["6T"], - slam: ["7L28", "6L28", "5L28"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - workup: ["7M", "7L38", "6L38", "5M", "5L38"], - zenheadbutt: ["6T", "5T"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L20", "6L20"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + wildcharge: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M", "7L8", "7L1", "6L8"], }}, - hydreigon: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aquatail: ["6T", "5T"], - attract: ["7M", "6M", "5M"], - bite: ["7L9", "7L1", "6L1", "5L1"], - bodyslam: ["7L48", "6L48", "5L48"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], + flabebe: {learnset: { + afteryou: ["7T", "6T"], + allyswitch: ["7T"], + aromatherapy: ["7L33", "6L33"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + camouflage: ["7E", "6E"], + captivate: ["7E", "6E"], confide: ["7M", "6M"], - crunch: ["7L25", "6L25", "6S1", "5L25"], - darkpulse: ["7M", "6M", "5T"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonbreath: ["7L17", "6L17", "5L17", "5S0"], - dragonpulse: ["7L32", "6T", "6L32", "5T", "5L32"], - dragonrage: ["7L1", "6L1", "5L1"], - dragonrush: ["7L42", "6L42", "6S1", "5L42"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], - echoedvoice: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M", "5S0"], - flashcannon: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M", "5S0"], - focusenergy: ["7L4", "7L1", "6L1", "5L1"], - frustration: ["7M", "6M", "6S1", "5M"], - gigaimpact: ["7M", "6M", "5M"], - headbutt: ["7L12", "6L12", "5L12"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L68", "7L1", "6T", "6L1", "5T", "5L68", "5S0"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - outrage: ["7L79", "7L1", "6T", "6L1", "5T", "5L79"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], - rockslide: ["7M", "6M", "6S1", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - scaryface: ["7L55", "6L55", "5L55"], + copycat: ["7E", "6E"], + covet: ["7T", "6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L6", "6L6"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + grassknot: ["7M", "6M"], + grassyterrain: ["7L24", "6L24"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + luckychant: ["7L10", "6L10"], + magicalleaf: ["7L22", "6L22"], + magiccoat: ["7T", "6T"], + mistyterrain: ["7L37", "6L37"], + moonblast: ["7L41", "6L41"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L28", "6L28"], + petaldance: ["7L45", "6L45"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L15", "6L15"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - slam: ["7L28", "6L28", "5L28"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - spite: ["6T", "5T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwind: ["6T", "5T"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - triattack: ["7L1", "6L1", "5L1"], - uproar: ["6T", "5T"], - uturn: ["7M", "6M", "5M"], - workup: ["7M", "7L38", "6L38", "5M", "5L38"], - zenheadbutt: ["6T", "5T"], + seedbomb: ["7T", "6T"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "7L48", "6M", "6L48"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7T", "6T"], + tackle: ["7L1", "6L1"], + tearfullook: ["7E"], + toxic: ["7M", "6M"], + vinewhip: ["7L1", "6L1"], + wish: ["7L20", "6L20"], + worryseed: ["7T", "6T"], }}, - larvesta: {learnset: { - absorb: ["7L10"], - acrobatics: ["7M", "6M", "5M"], - amnesia: ["7L80", "6L80", "5L80"], - bugbite: ["7L40", "6T", "6L40", "5T", "5L40"], - bugbuzz: ["7L70", "6L70", "5L70"], - calmmind: ["7M", "6M", "5M"], + floette: {learnset: { + afteryou: ["7T", "6T"], + allyswitch: ["7T"], + aromatherapy: ["7L38", "6L38"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - doubleedge: ["7L50", "6L50", "5L50"], - doubleteam: ["7M", "6M", "5M"], - ember: ["7L1", "6L1", "5L1"], - endure: ["7E", "6E", "5E"], - facade: ["7M", "6M", "5M"], - fireblast: ["7M", "6M", "5M"], - flamecharge: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], - flamethrower: ["7M", "6M", "5M"], - flamewheel: ["7L60", "6L60", "5L60"], - flareblitz: ["7L100", "6L100", "5L100"], - foresight: ["7E", "6E", "5E"], - frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - harden: ["7E", "6E", "5E"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - leechlife: ["7M", "6L10", "5L10"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["7E", "6T", "6E", "5T", "5E"], - morningsun: ["7E", "6E", "5E"], - overheat: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + covet: ["7T", "6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L6", "7L1", "6L6"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + grassknot: ["7M", "6M"], + grassyterrain: ["7L27", "6L27"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + luckychant: ["7L10", "6L10"], + magicalleaf: ["7L25", "6L25"], + magiccoat: ["7T", "6T"], + mistyterrain: ["7L43", "6L43"], + moonblast: ["7L46", "6L46"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L33", "6L33"], + petaldance: ["7L51", "6L51"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L15", "6L15"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], - signalbeam: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stringshot: ["7L1", "7E", "6L1", "6E", "5L1", "5E"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - takedown: ["7L20", "6L20", "5L20"], - thrash: ["7L90", "6L90", "5L90"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + seedbomb: ["7T", "6T"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "7L58", "6M", "6L58"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7T", "6T"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + vinewhip: ["7L1", "6L1"], + wish: ["7L20", "6L20"], + worryseed: ["7T", "6T"], }}, - volcarona: {learnset: { - absorb: ["7L10", "7L1"], - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M"], - amnesia: ["7L1", "6L1"], - bugbite: ["6T", "5T"], - bugbuzz: ["7L70", "7L1", "6L1", "5L70", "5S1"], - calmmind: ["7M", "6M", "5M"], + floetteeternal: {learnset: { + afteryou: ["7T"], + allyswitch: ["7T"], + aromatherapy: ["6L38"], + attract: ["6M"], + calmmind: ["6M"], + confide: ["6M"], + covet: ["7T"], + dazzlinggleam: ["6M"], + doubleteam: ["6M"], + echoedvoice: ["6M"], + endeavor: ["7T"], + energyball: ["6M"], + facade: ["6M"], + fairywind: ["6L6"], + flash: ["6M"], + frustration: ["6M"], + gigadrain: ["7T"], + grassknot: ["6M"], + grassyterrain: ["6L27"], + healbell: ["7T"], + helpinghand: ["7T"], + hiddenpower: ["6M"], + lightofruin: ["6L50"], + luckychant: ["6L10"], + magicalleaf: ["6L25"], + magiccoat: ["7T"], + mistyterrain: ["6L43"], + moonblast: ["6L46"], + naturepower: ["6M"], + petalblizzard: ["6L33"], + petaldance: ["6L51"], + protect: ["6M"], + psychic: ["6M"], + raindance: ["6M"], + razorleaf: ["6L15"], + rest: ["6M"], + return: ["6M"], + round: ["6M"], + safeguard: ["6M"], + secretpower: ["6M"], + seedbomb: ["7T"], + sleeptalk: ["6M"], + snore: ["7T"], + solarbeam: ["6M", "6L58"], + substitute: ["6M"], + sunnyday: ["6M"], + swagger: ["6M"], + synthesis: ["7T"], + tackle: ["6L1"], + toxic: ["6M"], + vinewhip: ["6L1"], + wish: ["6L20"], + worryseed: ["7T"], + }}, + florges: {learnset: { + afteryou: ["7T", "6T"], + allyswitch: ["7T"], + aromatherapy: ["7L1", "6L1"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M"], - ember: ["7L1", "6L1", "5L1"], - facade: ["7M", "6M", "5M"], - fierydance: ["7L100", "7L1", "6L1", "5L100"], - fireblast: ["7M", "6M", "5M"], - firespin: ["7L30", "6L30", "5L30", "5S0"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "6M", "5M"], - flamewheel: ["7L1", "6L1"], - flareblitz: ["7L1", "6L1"], - fly: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], - gust: ["7L20", "7L1", "6L1", "5L1", "5S0"], - heatwave: ["7L60", "7L1", "6T", "6L1", "5T", "5L60"], - hiddenpower: ["7M", "6M", "5M"], - hurricane: ["7L90", "7L1", "6L1", "5L90"], - hyperbeam: ["7M", "6M", "5M", "5S1"], - incinerate: ["6M", "5M"], - leechlife: ["7M", "6L1", "5L1", "5S0"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - overheat: ["7M", "6M", "5M", "5S1"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - quiverdance: ["7L1", "6L1", "5L59", "5S1"], - ragepowder: ["7L80", "7L1", "6L1", "5L80"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + covet: ["7T", "6T"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], + disarmingvoice: ["7L1", "6L1"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + flowershield: ["7L1", "6L1"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "7L1", "6M", "6L1"], + grassyterrain: ["7L1", "6L1"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + lightscreen: ["7M", "6M"], + luckychant: ["7L1", "6L1"], + magicalleaf: ["7L1", "6L1"], + magiccoat: ["7T", "6T"], + mistyterrain: ["7L1", "6L1"], + moonblast: ["7L1", "6L1"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L1", "6L1"], + petaldance: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], - signalbeam: ["6T", "5T"], - silverwind: ["7L50", "6L50", "5L50"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stringshot: ["7L1", "6L1", "5L1", "5S0"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwind: ["6T", "5T"], - thrash: ["7L1", "6L1"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "5M"], - whirlwind: ["7L40", "6L40", "5L40"], - wildcharge: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + seedbomb: ["7T", "6T"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7T", "6T"], + toxic: ["7M", "6M"], + wish: ["7L1", "6L1"], + worryseed: ["7T", "6T"], }}, - cobalion: {learnset: { - aerialace: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bounce: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], - closecombat: ["7L61", "7L1", "6L1", "5L73"], + skiddo: {learnset: { + attract: ["7M", "6M"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L34", "6M", "6L34"], + bulldoze: ["7M", "7L26", "6M", "6L26"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doublekick: ["7L1", "6L7", "5L7"], - doubleteam: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - helpinghand: ["7L13", "6T", "6L25", "5T", "5L25", "5S0", "5S1"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - irondefense: ["6T", "5T"], - ironhead: ["7L25", "6T", "6L37", "6S3", "5T", "5L37", "5S0", "5S1"], - leer: ["7L1", "6L1", "5L1"], - magnetrise: ["6T", "5T"], - metalburst: ["7L55", "7L1", "6L1", "5L67"], - metalclaw: ["7L1", "6L13", "5L13"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "5L1"], - quickguard: ["7L42", "6L1", "5L55", "5S2"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S0", "5S1"], - return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], - sacredsword: ["7L31", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], - safeguard: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], + defensecurl: ["7E", "6E"], + dig: ["6M"], + doubleedge: ["7L38", "6L38"], + doubleteam: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + grassknot: ["7M", "6M"], + grassyterrain: ["7E"], + growth: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hornleech: ["7L42", "6L42"], + irontail: ["7T", "6T"], + leafblade: ["7L45", "6L45"], + leechseed: ["7L12", "6L12"], + milkdrink: ["7L50", "7E", "6L50", "6E"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L13", "6L13"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rollout: ["7E", "6E"], + round: ["7M", "6M"], secretpower: ["6M"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L37", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], - takedown: ["7L7", "6L19", "5L19"], - taunt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], - xscissor: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + seedbomb: ["7T", "7L30", "6T", "6L30"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7T", "7L20", "6T", "6L20"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "6L9"], + takedown: ["7L22", "6L22"], + toxic: ["7M", "6M"], + vinewhip: ["7L7", "6L7"], + wildcharge: ["7M", "6M"], + workup: ["7M"], + worryseed: ["7T", "7L16", "6T", "6L16"], + zenheadbutt: ["7T", "6T"], }}, - terrakion: {learnset: { - aerialace: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bulldoze: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - closecombat: ["7L61", "7L1", "6L1", "5L73"], + gogoat: {learnset: { + aerialace: ["7M", "7L1", "6M", "6L1"], + attract: ["7M", "6M"], + bounce: ["7T", "6T"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L34", "6M", "6L34"], + bulldoze: ["7M", "7L26", "6M", "6L26"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doublekick: ["7L1", "6L7", "5L7"], - doubleteam: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - earthquake: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - helpinghand: ["7L13", "6T", "6L25", "5T", "5L25", "5S0", "5S1"], - hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - ironhead: ["6T", "5T"], - leer: ["7L1", "6L1", "5L1"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "5L1"], - quickguard: ["7L42", "6L1", "5L55", "5S2"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S0", "5S1"], - return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L25", "6M", "6L37", "6S3", "5M", "5L37", "5S0", "5S1"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - sacredsword: ["7L31", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], - safeguard: ["7M", "6M", "5M"], - sandstorm: ["7M", "6M", "5M"], + dig: ["6M"], + doubleedge: ["7L40", "6L40"], + doubleteam: ["7M", "6M"], + earthquake: ["7M", "7L1", "6M", "6L60"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growth: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hornleech: ["7L47", "6L47"], + hyperbeam: ["7M", "6M"], + irontail: ["7T", "6T"], + leafblade: ["7L55", "6L55"], + leechseed: ["7L12", "6L12"], + milkdrink: ["7L58", "6L58"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L13", "6L13"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], secretpower: ["6M"], - sleeptalk: ["7M", "6M", "5T"], - smackdown: ["7M", "7L1", "6M", "6L13", "5M", "5L13"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "7L55", "6M", "6L67", "5M", "5L67"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L37", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], - takedown: ["7L7", "6L19", "5L19"], - taunt: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], - xscissor: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + seedbomb: ["7T", "7L30", "6T", "6L30"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + stompingtantrum: ["7T"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["7T", "6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7T", "7L20", "6T", "6L20"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "7L1", "6L9"], + takedown: ["7L22", "6L22"], + toxic: ["7M", "6M"], + vinewhip: ["7L7", "7L1", "6L7"], + wildcharge: ["7M", "6M"], + workup: ["7M"], + worryseed: ["7T", "7L16", "6T", "6L16"], + zenheadbutt: ["7T", "6T"], }}, - virizion: {learnset: { - aerialace: ["7M", "6M", "5M"], - block: ["6T", "5T"], - bounce: ["6T", "5T"], - calmmind: ["7M", "6M", "5M"], - closecombat: ["7L61", "7L1", "6L1", "5L73"], + pancham: {learnset: { + aerialace: ["7M", "6M"], + armthrust: ["7L7", "6L7", "6S0"], + attract: ["7M", "6M"], + block: ["7T", "6T"], + bodyslam: ["7L33", "6L33"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], + circlethrow: ["7L25", "6L25"], + cometpunch: ["7L15", "6L15"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doublekick: ["7L1", "6L7", "5L7"], - doubleteam: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigadrain: ["7L25", "6T", "6L37", "6S3", "5T", "5L37", "5S0", "5S1"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - helpinghand: ["7L13", "6T", "6L25", "5T", "5L25", "5S0", "5S1"], - hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - leafblade: ["7L55", "7L1", "6L1", "5L67"], - leer: ["7L1", "6L1", "5L1"], - lightscreen: ["7M", "6M", "5M"], - magicalleaf: ["7L1", "6L13", "5L13"], - naturepower: ["7M", "6M"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "5L1"], - quickguard: ["7L42", "6L1", "5L55", "5S2"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S0", "5S1"], - return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], - sacredsword: ["7L31", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], - safeguard: ["7M", "6M", "5M"], + covet: ["7T", "6T"], + crunch: ["7L39", "6L39"], + cut: ["6M"], + darkpulse: ["7M", "6M", "6S0"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["7T", "6T"], + dualchop: ["7T", "6T"], + echoedvoice: ["7M", "6M"], + endeavor: ["7T", "6T"], + entrainment: ["7L42", "6L42"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + firepunch: ["7T", "6T"], + fling: ["7M", "6M"], + focuspunch: ["7T", "6T"], + foulplay: ["7T", "7E", "6T", "6E"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + gunkshot: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hypervoice: ["7T", "6T"], + icepunch: ["7T", "6T"], + ironhead: ["7T", "6T"], + karatechop: ["7L12", "6L12"], + knockoff: ["7T", "6T"], + leer: ["7L1", "6L1"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "6M"], + mefirst: ["7E", "6E"], + partingshot: ["7L45", "6L45"], + payback: ["7M", "6M"], + powertrip: ["7E"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quash: ["7E", "6E"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L37", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], - synthesis: ["6T", "5T"], - takedown: ["7L7", "6L19", "5L19"], - taunt: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], - worryseed: ["6T", "5T"], - xscissor: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + shadowclaw: ["7M", "6M"], + skyuppercut: ["7L48", "6L48"], + slash: ["7L20", "6L20"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + stoneedge: ["7M", "6M", "6S0"], + stormthrow: ["7E", "6E"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["7T", "6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thunderpunch: ["7T", "6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["7T", "6T"], + vitalthrow: ["7L27", "6L27"], + workup: ["7M", "7L10", "6L10"], + zenheadbutt: ["7T", "6T"], }}, - tornadus: {learnset: { - acrobatics: ["7M", "6M", "5M"], - aerialace: ["7M", "6M", "5M"], - agility: ["7L31", "6L37", "6S3", "5L37", "5S0"], - aircutter: ["7L19", "6L25", "5L25", "5S0"], - airslash: ["7L37", "6L43", "6S3", "5L43", "5S2"], - astonish: ["7L1", "6L1", "5L1", "5S1"], - attract: ["7M", "6M", "5M"], - bite: ["7L7", "6L13", "5L13"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulkup: ["7M", "6M", "5M"], + pangoro: {learnset: { + aerialace: ["7M", "6M"], + armthrust: ["7L7", "7L1", "6L7"], + attract: ["7M", "6M"], + block: ["7T", "6T"], + bodyslam: ["7L35", "6L35"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], + bulletpunch: ["7L1"], + circlethrow: ["7L25", "6L25"], + cometpunch: ["7L15", "6L15"], confide: ["7M", "6M"], - crunch: ["7L43", "6L49", "6S3", "5L49"], - darkpulse: ["7M", "7L67", "6M", "6L73", "5T", "5L73"], - doubleteam: ["7M", "6M", "5M"], - embargo: ["7M", "6M", "5M"], - extrasensory: ["7L25", "6L31", "6S3", "5L31", "5S0"], - facade: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gust: ["7L1", "6L1", "5L1", "5S1"], - hammerarm: ["7L73", "7L1", "6L1", "5L79", "5S2"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M", "5S2"], - hurricane: ["7L61", "7L1", "6L1", "5L67", "5S2"], - hyperbeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "7L55", "6M", "6L61", "5M", "5L61"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - revenge: ["7L13", "6L19", "5L19", "5S0"], - rocksmash: ["6M", "5M"], - roleplay: ["6T", "5T"], - round: ["7M", "6M", "5M"], + covet: ["7T", "6T"], + crunch: ["7L42", "6L42"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragonclaw: ["7M", "6M"], + drainpunch: ["7T", "6T"], + dualchop: ["7T", "6T"], + earthquake: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + endeavor: ["7T", "6T"], + entrainment: ["7L45", "7L1", "6L1"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + firepunch: ["7T", "6T"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["7T", "6T"], + foulplay: ["7T", "6T"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gunkshot: ["7T", "6T"], + hammerarm: ["7L70", "7L1", "6L1"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hyperbeam: ["7M", "6M"], + hypervoice: ["7T", "6T"], + icepunch: ["7T", "6T"], + infestation: ["7M", "6M"], + ironhead: ["7T", "6T"], + karatechop: ["7L12", "6L12"], + knockoff: ["7T", "6T"], + laserfocus: ["7T"], + leer: ["7L1", "6L1"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "7L57", "7L1", "6M", "6L70"], + outrage: ["7T", "6T"], + partingshot: ["7L48", "6L48"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quash: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], secretpower: ["6M"], - skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "7L1", "6M", "6L7", "5M", "5L7"], - tailwind: ["7L49", "6T", "6L1", "5T", "5L55"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thrash: ["7L79", "7L1", "6L1", "5L85"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["7L1", "6T", "6L1", "5T", "5L1", "5S1"], - uturn: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M"], + skyuppercut: ["7L52", "6L52"], + slash: ["7L20", "6L20"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + snarl: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["7T", "6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "7L65", "6M", "6L65"], + thief: ["7M", "6M"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["7T", "6T"], + vitalthrow: ["7L27", "6L27"], + workup: ["7M", "7L10", "7L1", "6L10"], + xscissor: ["7M", "6M"], + zenheadbutt: ["7T", "6T"], }}, - thundurus: {learnset: { - agility: ["7L31", "6L37", "6S3", "5L37", "5S0"], - astonish: ["7L1", "6L1", "5L1", "5S1"], - attract: ["7M", "6M", "5M"], - bite: ["7L7", "6L13", "5L13"], - brickbreak: ["7M", "6M", "5M"], - brutalswing: ["7M"], - bulkup: ["7M", "6M", "5M"], - charge: ["7L49", "6L1", "5L55"], - chargebeam: ["7M", "6M", "5M"], + furfrou: {learnset: { + attract: ["7M", "6M"], + babydolleyes: ["7L9", "6L9"], + bite: ["7L22", "6L22"], + captivate: ["7E", "6E"], + chargebeam: ["7M", "6M"], + charm: ["7L38", "6L38"], confide: ["7M", "6M"], - crunch: ["7L43", "6L49", "6S3", "5L49"], - darkpulse: ["7M", "7L67", "6M", "6L73", "5T", "5L73"], - discharge: ["7L37", "6L43", "6S3", "5L43"], - doubleteam: ["7M", "6M", "5M"], - electroweb: ["6T"], - embargo: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M", "5S2"], - foulplay: ["6T", "5T"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - hammerarm: ["7L73", "7L1", "6L1", "5L79", "5S2"], - healblock: ["7L25", "6L31", "6S3", "5L31", "5S0"], - hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - incinerate: ["6M", "5M"], - irontail: ["6T", "5T"], - knockoff: ["6T", "5T"], - nastyplot: ["7L55", "7L1", "6L1", "5L61"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - revenge: ["7L13", "6L19", "5L19", "5S0"], - rocksmash: ["6M", "5M"], - roleplay: ["6T", "5T"], - round: ["7M", "6M", "5M"], + cottonguard: ["7L48", "6L48"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["7T", "6T"], + facade: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1"], + headbutt: ["7L12", "6L12"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hypervoice: ["7T", "6T"], + irontail: ["7T", "6T"], + lastresort: ["7T", "6T"], + mimic: ["7E", "6E"], + odorsleuth: ["7L27", "6L27"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + refresh: ["7E", "6E"], + rest: ["7M", "6M"], + retaliate: ["7L33", "6M", "6L33"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["7T", "7E", "6T", "6E"], + round: ["7M", "6M"], + sandattack: ["7L5", "6L5"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "6M"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], + suckerpunch: ["7L42", "6L42"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L15", "6L15"], + takedown: ["7L35", "6L35"], + thunderwave: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["7T", "6T"], + uturn: ["7M", "6M"], + wildcharge: ["7M", "6M"], + workup: ["7M", "7E", "6E"], + zenheadbutt: ["7T", "6T"], + }}, + espurr: {learnset: { + allyswitch: ["7T"], + assist: ["7E", "6E"], + attract: ["7M", "6M"], + barrier: ["7E", "6E"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + confusion: ["7L9", "6L9"], + covet: ["7T", "7L5", "6T", "6L5"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + disarmingvoice: ["7L22", "6L22"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fakeout: ["7L19", "6L19"], + flash: ["6M"], + frustration: ["7M", "6M"], + gravity: ["7T", "6T"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + irontail: ["7T", "6T"], + leer: ["7L1", "6L1"], + lightscreen: ["7M", "7L13", "6M", "6L13"], + magiccoat: ["7T", "6T"], + magicroom: ["7T", "6T"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L25", "6M", "6L25"], + raindance: ["7M", "6M"], + recycle: ["7T", "6T"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7T", "6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], secretpower: ["6M"], - shockwave: ["7L19", "6T", "6L25", "5L25", "5S0"], - skydrop: ["7M", "6M", "5M"], - sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - smartstrike: ["7M"], - snore: ["6T", "5T"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "7L1", "6M", "6L7", "5M", "5L7"], - taunt: ["7M", "6M", "5M"], - thief: ["7M", "6M", "5M"], - thrash: ["7L79", "7L1", "6L1", "5L85"], - thunder: ["7M", "7L61", "6M", "6L67", "5M", "5L67", "5S2"], - thunderbolt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], - thundershock: ["7L1", "6L1", "5L1", "5S1"], - thunderwave: ["7M", "6M", "5M"], - torment: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - uproar: ["7L1", "6T", "6L1", "5T", "5L1", "5S1"], - uturn: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M", "5S2"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], + skillswap: ["7T"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + telekinesis: ["7T"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7T", "7E", "6T", "6E"], + trickroom: ["7M", "6M"], + wonderroom: ["7T", "6T"], + workup: ["7M"], + yawn: ["7E", "6E"], + zenheadbutt: ["7T", "6T"], }}, - reshiram: {learnset: { - ancientpower: ["7L15", "6L15", "5L15"], - blueflare: ["7L100", "6L100", "5L100", "5S2"], - brutalswing: ["7M"], + meowstic: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + charm: ["7L28", "6L28"], confide: ["7M", "6M"], - crunch: ["7L71", "6L71", "5L71"], - cut: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T", "5S2"], - dragonbreath: ["7L29", "6L29", "6S3", "5L29", "5S0"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["7L54", "6T", "6L54", "5T", "5L54", "5S1"], - dragonrage: ["7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - echoedvoice: ["7M", "6M", "5M"], - extrasensory: ["7L43", "6L43", "6S3", "5L43", "5S0", "5S1"], - facade: ["7M", "6M", "5M"], - fireblast: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], - firefang: ["7L1", "6L1", "5L1"], - flamecharge: ["7M", "6M", "5M"], - flamethrower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - fusionflare: ["7L50", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], - gigaimpact: ["7M", "6M", "5M"], - heatwave: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], - imprison: ["7L64", "7L8", "6L8", "5L8", "5S1"], - incinerate: ["6M", "5M"], - lightscreen: ["7M", "6M", "5M"], - mist: ["5S2"], - outrage: ["7L85", "6T", "6L85", "5T", "5L85"], - overheat: ["7M", "6M", "5M"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + confusion: ["7L9", "7L1", "6L9"], + covet: ["7T", "7L5", "7L1", "6T", "6L5"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + disarmingvoice: ["7L22", "6L22"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fakeout: ["7L19", "6L19"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gravity: ["7T", "6T"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "7L1", "6T", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + imprison: ["7L45", "6L45"], + irontail: ["7T", "6T"], + leer: ["7L1", "6L1"], + lightscreen: ["7M", "7L13", "6M", "6L13"], + magiccoat: ["7T", "6T"], + magicroom: ["7T", "6T"], + meanlook: ["7L1", "6L1"], + miracleeye: ["7L31", "6L31"], + mistyterrain: ["7L50", "6L50"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "7L40", "6M", "6L40"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L25", "6M", "6L25"], + quickguard: ["7L53", "7L1", "6L1"], + raindance: ["7M", "6M"], + recycle: ["7T", "6T"], + reflect: ["7M", "7L35", "6M", "6L35"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7T", "7L43", "6T", "6L43"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - slash: ["7L36", "6L36", "6S3", "5L36", "5S0"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "5M"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwind: ["6T", "5T"], - toxic: ["7M", "6M", "5M"], - willowisp: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + shadowball: ["7M", "6M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], + skillswap: ["7T"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], + suckerpunch: ["7L48", "6L48"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + telekinesis: ["7T"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7T", "6T"], + trickroom: ["7M", "6M"], + wonderroom: ["7T", "6T"], + workup: ["7M"], + zenheadbutt: ["7T", "6T"], }}, - zekrom: {learnset: { - ancientpower: ["7L15", "6L15", "5L15"], - boltstrike: ["7L100", "6L100", "5L100", "5S2"], - brutalswing: ["7M"], - chargebeam: ["7M", "6M", "5M"], + meowsticf: {learnset: { + allyswitch: ["7T"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "7L28", "6M", "6L28"], confide: ["7M", "6M"], - crunch: ["7L71", "6L71", "5L71"], - cut: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "5T"], - dragonbreath: ["7L29", "6L29", "6S3", "5L29", "5S0"], - dragonclaw: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "5S1"], - dragonpulse: ["6T", "5T"], - dragonrage: ["7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - echoedvoice: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - fusionbolt: ["7L50", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], - gigaimpact: ["7M", "6M", "5M"], - haze: ["5S2"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], - imprison: ["7L64", "7L8", "6L8", "5L8", "5S1"], - lightscreen: ["7M", "6M", "5M"], - magnetrise: ["6T", "5T"], - outrage: ["7L85", "6T", "6L85", "5T", "5L85", "5S2"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + confusion: ["7L9", "7L1", "6L9"], + covet: ["7T", "7L5", "7L1", "6L5"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + disarmingvoice: ["7L22", "6L22"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + energyball: ["7M", "6M"], + extrasensory: ["7L35", "6L35"], + facade: ["7M", "6M"], + fakeout: ["7L19", "6L19"], + flash: ["6M"], + frustration: ["7M", "6M"], + futuresight: ["7L50", "6L50"], + gigaimpact: ["7M", "6M"], + gravity: ["7T"], + healbell: ["7T"], + helpinghand: ["7T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + irontail: ["7T"], + leer: ["7L1", "6L1"], + lightscreen: ["7M", "7L13", "6M", "6L13"], + magicalleaf: ["7L1", "6L1"], + magiccoat: ["7T"], + magicroom: ["7T"], + mefirst: ["7L1", "6L1"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "7L40", "6M", "6L40"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L25", "6M", "6L25"], + raindance: ["7M", "6M"], + recycle: ["7T"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7T", "7L43", "6L43"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - slash: ["7L36", "6L36", "6S3", "5L36", "5S0"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - tailwind: ["6T", "5T"], - thunder: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], - thunderbolt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - thunderfang: ["7L1", "6L1", "5L1"], - thunderpunch: ["6T", "5T"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - voltswitch: ["7M", "6M", "5M"], - wildcharge: ["7M", "6M", "5M"], - zenheadbutt: ["7L43", "6T", "6L43", "6S3", "5T", "5L43", "5S0", "5S1"], + shadowball: ["7M", "7L31", "6M", "6L31"], + shockwave: ["7T"], + signalbeam: ["7T", "7L45", "6L45"], + skillswap: ["7T"], + sleeptalk: ["7M", "6M"], + snatch: ["7T"], + snore: ["7T"], + storedpower: ["7L53", "7L1", "6L1"], + substitute: ["7M", "6M"], + suckerpunch: ["7L48", "6L48"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + telekinesis: ["7T"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7T"], + trickroom: ["7M", "6M"], + wonderroom: ["7T"], + workup: ["7M"], + zenheadbutt: ["7T"], }}, - landorus: {learnset: { - attract: ["7M", "6M", "5M"], - block: ["7L1", "6T", "6L1", "5T", "5L1", "5S1"], - brickbreak: ["7M", "6M", "5M"], + honedge: {learnset: { + aerialace: ["7M", "7L22", "6M", "6L22"], + afteryou: ["7T", "6T"], + attract: ["7M", "6M"], + autotomize: ["7L18", "6L18"], + brickbreak: ["7M", "6M"], brutalswing: ["7M"], - bulkup: ["7M", "6M", "5M"], - bulldoze: ["7M", "7L13", "6M", "6L19", "5M", "5L19"], - calmmind: ["7M", "6M", "5M"], confide: ["7M", "6M"], - dig: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - earthpower: ["7L37", "6T", "6L43", "6S2", "5T", "5L43"], - earthquake: ["7M", "7L49", "6M", "6L55", "6S3", "5M", "5L55", "5S0"], - explosion: ["7M", "6M", "6S2", "5M"], - extrasensory: ["7L25", "6L31", "5L31"], - facade: ["7M", "6M", "5M"], - fissure: ["7L61", "7L1", "6L1", "5L67", "5S0"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - hammerarm: ["7L73", "7L1", "6L1", "5L79"], - hiddenpower: ["7M", "6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - imprison: ["7L1", "6L7", "5L7"], - irontail: ["6T", "5T"], - knockoff: ["6T", "6S3", "5T"], - mudshot: ["7L1", "6L1", "5L1", "5S1"], - outrage: ["7L79", "7L1", "6T", "6L1", "5T", "5L85"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - punishment: ["7L7", "6L13", "5L13"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - rockslide: ["7M", "7L43", "6M", "6L49", "6S2", "5M", "5L49", "5S0"], - rocksmash: ["6M", "5M"], - rockthrow: ["7L19", "6L25", "5L25"], - rocktomb: ["7M", "7L1", "6M", "6L1", "6S3", "5M", "5L1", "5S1"], - roleplay: ["6T", "5T"], - round: ["7M", "6M", "5M"], - sandstorm: ["7M", "7L55", "6M", "6L61", "5M", "5L61", "5S0"], + cut: ["6M"], + destinybond: ["7E", "6E"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + furycutter: ["7L5", "6L5"], + gyroball: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + irondefense: ["7T", "7L32", "6T", "6L32"], + ironhead: ["7T", "7L42", "6T", "6L42"], + laserfocus: ["7T"], + magnetrise: ["7T", "6T"], + metalsound: ["7L8", "7E", "6L8", "6E"], + nightslash: ["7L35", "6L35"], + powertrick: ["7L39", "6L39"], + protect: ["7M", "6M"], + pursuit: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["7L26", "6M", "6L26"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + sacredsword: ["7L47", "6L47"], secretpower: ["6M"], - sleeptalk: ["7M", "6M", "5T"], - sludgebomb: ["7M", "6M", "5M"], - sludgewave: ["7M", "6M", "5M"], - smackdown: ["7M", "6M", "5M"], - snore: ["6T", "5T"], - stealthrock: ["6T", "5T"], - stoneedge: ["7M", "7L67", "6M", "6L73", "5M", "5L73"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L31", "6M", "6L37", "6S2", "5M", "5L37"], - toxic: ["7M", "6M", "5M"], - uturn: ["7M", "6M", "6S3", "5M"], + shadowclaw: ["7M", "6M"], + shadowsneak: ["7L20", "7E", "6L20", "6E"], + shockwave: ["7T", "6T"], + slash: ["7L29", "6L29"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + wideguard: ["7E", "6E"], }}, - kyurem: {learnset: { - ancientpower: ["7L15", "6L15", "5L15"], - blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + doublade: {learnset: { + aerialace: ["7M", "7L22", "6M", "6L22"], + afteryou: ["7T", "6T"], + attract: ["7M", "6M"], + autotomize: ["7L18", "6L18"], + brickbreak: ["7M", "6M"], brutalswing: ["7M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "6S3", "5T"], - dragonbreath: ["7L29", "6L29", "6S2", "5L29"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["7L57", "6T", "6L57", "5T", "5L57", "5S0", "5S1"], - dragonrage: ["7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L71", "6T", "6L71", "5T", "5L71", "5S0"], - facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - glaciate: ["7L50", "6L50", "6S2", "6S3", "5L50", "5S0", "5S1"], - hail: ["7M", "6M", "5M"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], - icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - icywind: ["7L1", "6T", "6L1", "5T", "5L1"], - imprison: ["7L64", "7L8", "6L8", "5L8", "5S0", "5S1"], - ironhead: ["6T", "6S3", "5T"], - lightscreen: ["7M", "6M", "5M"], - outrage: ["7L85", "6T", "6L85", "5T", "5L85"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], - scaryface: ["7L43", "6L43", "6S2", "6S3", "5L43", "5S1"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + furycutter: ["7L5", "7L1", "6L5"], + gyroball: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + irondefense: ["7T", "7L32", "6T", "6L32"], + ironhead: ["7T", "7L45", "6T", "6L45"], + laserfocus: ["7T"], + magnetrise: ["7T", "6T"], + metalsound: ["7L8", "6L8"], + nightslash: ["7L36", "6L36"], + powertrick: ["7L41", "6L41"], + protect: ["7M", "6M"], + pursuit: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["7L26", "6M", "6L26"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + sacredsword: ["7L51", "6L51"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - signalbeam: ["6T", "5T"], - slash: ["7L36", "6L36", "6S2", "5L36"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + shadowclaw: ["7M", "6M"], + shadowsneak: ["7L20", "6L20"], + shockwave: ["7T", "6T"], + slash: ["7L29", "6L29"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], }}, - kyuremblack: {learnset: { - ancientpower: ["7L15", "6L15", "5L15"], - blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + aegislash: {learnset: { + aerialace: ["7M", "7L1", "6M", "6L1"], + afteryou: ["7T", "6T"], + attract: ["7M", "6M"], + autotomize: ["7L1", "6L1"], + block: ["7T", "6T"], + brickbreak: ["7M", "6M"], brutalswing: ["7M"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "6S3", "5T"], - dragonbreath: ["7L29", "6L29", "6S2", "5L29"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["7L57", "6T", "6L57", "5T", "5L57", "5S0", "5S1"], - dragonrage: ["7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L71", "6T", "6L71", "5T", "5L71", "5S0"], - facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - freezeshock: ["7L50", "6L50", "6S2", "6S3", "5L43", "5S0", "5S1"], - frustration: ["7M", "6M", "5M"], - fusionbolt: ["7L43", "6L43", "6S2", "6S3", "5L50", "5S1"], - gigaimpact: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], - icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - icywind: ["7L1", "6T", "6L1", "5T", "5L1"], - imprison: ["7L64", "7L8", "6L8", "5L8", "5S0", "5S1"], - ironhead: ["6T", "6S3", "5T"], - lightscreen: ["7M", "6M", "5M"], - outrage: ["7L85", "6T", "6L85", "5T", "5L85"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + flashcannon: ["7M", "6M", "6S0"], + frustration: ["7M", "6M"], + furycutter: ["7L1", "6L1"], + gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + headsmash: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + irondefense: ["7T", "7L1", "6T", "6L1"], + ironhead: ["7T", "7L1", "6T", "6L1"], + kingsshield: ["7L1", "6L1", "6S0"], + laserfocus: ["7T"], + magnetrise: ["7T", "6T"], + nightslash: ["7L1", "6L1"], + powertrick: ["7L1", "6L1"], + protect: ["7M", "6M"], + pursuit: ["7L1", "6L1"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + sacredsword: ["7L1", "6L1"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - signalbeam: ["6T", "5T"], - slash: ["7L36", "6L36", "6S2", "5L36"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + shadowball: ["7M", "6M", "6S0"], + shadowclaw: ["7M", "6M"], + shadowsneak: ["7L1", "6L1"], + shockwave: ["7T", "6T"], + slash: ["7L1", "6L1"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + toxic: ["7M", "6M"], + wideguard: ["6S0"], }}, - kyuremwhite: {learnset: { - ancientpower: ["7L15", "6L15", "5L15"], - blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], - brutalswing: ["7M"], + spritzee: {learnset: { + afteryou: ["7T", "6T"], + allyswitch: ["7T"], + aromatherapy: ["7L25", "6L25"], + attract: ["7M", "7L29", "6M", "6L29"], + calmmind: ["7M", "7L17", "6M", "6L17"], + captivate: ["7E", "6E"], + chargebeam: ["7M", "6M"], + charm: ["7L35", "6L35"], confide: ["7M", "6M"], - cut: ["6M", "5M"], - doubleteam: ["7M", "6M", "5M"], - dracometeor: ["7T", "6T", "6S3", "5T"], - dragonbreath: ["7L29", "6L29", "6S2", "5L29"], - dragonclaw: ["7M", "6M", "5M"], - dragonpulse: ["7L57", "6T", "6L57", "5T", "5L57", "5S0", "5S1"], - dragonrage: ["7L1", "6L1", "5L1"], - dragontail: ["7M", "6M", "5M"], - earthpower: ["6T", "5T"], - echoedvoice: ["7M", "6M", "5M"], - endeavor: ["7L71", "6T", "6L71", "5T", "5L71", "5S0"], - facade: ["7M", "6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fling: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - fusionflare: ["7L43", "6L43", "6S2", "6S3", "5L50", "5S1"], - gigaimpact: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], - icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], - iceburn: ["7L50", "6L50", "6S2", "6S3", "5L43", "5S0", "5S1"], - icywind: ["7L1", "6T", "6L1", "5T", "5L1"], - imprison: ["7L64", "7L8", "6L8", "5L8", "5S0", "5S1"], - ironhead: ["6T", "6S3", "5T"], - lightscreen: ["7M", "6M", "5M"], - outrage: ["7L85", "6T", "6L85", "5T", "5L85"], - payback: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockslide: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - rocktomb: ["7M", "6M", "5M"], - roost: ["7M", "6M", "5T"], - round: ["7M", "6M", "5M"], - safeguard: ["7M", "6M", "5M"], + covet: ["7T", "6T"], + dazzlinggleam: ["7M", "6M"], + disable: ["7E", "6E"], + disarmingvoice: ["7L50", "6L50"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L21", "6L21"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "7L13", "6M", "6L13"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L1", "6L1"], + flail: ["7L38", "6L38"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + gyroball: ["7M", "6M"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + lightscreen: ["7M", "6M"], + magiccoat: ["7T", "6T"], + mistyterrain: ["7L42", "6L42"], + moonblast: ["7L31", "6L31"], + nastyplot: ["7E"], + odorsleuth: ["7L8", "6L8"], + protect: ["7M", "6M"], + psychic: ["7M", "7L48", "6M", "6L48"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + refresh: ["7E", "6E"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - signalbeam: ["6T", "5T"], - slash: ["7L36", "6L36", "6S2", "5L36"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - zenheadbutt: ["6T", "5T"], + skillswap: ["7T", "7L44", "6T", "6L44"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetkiss: ["7L6", "6L6"], + sweetscent: ["7L1", "6L1"], + telekinesis: ["7T"], + thunderbolt: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + wish: ["7E", "6E"], }}, - keldeo: {learnset: { - aerialace: ["7M", "6M", "5M"], - aquajet: ["7L1", "6L1", "6S2", "6S3", "5L1", "5S0", "5S1"], - aquatail: ["7L37", "6T", "6L37", "5T", "5L37"], - bounce: ["6T", "5T"], - bubblebeam: ["7L13", "7L1", "6L13", "6S3", "5L13", "5S0"], - calmmind: ["7M", "6M", "5M"], - closecombat: ["7L73", "6L73", "5L73"], + aromatisse: {learnset: { + afteryou: ["7T", "6T"], + allyswitch: ["7T"], + aromatherapy: ["7L25", "6L25"], + aromaticmist: ["7L1", "6L1"], + attract: ["7M", "7L29", "6M", "6L29"], + calmmind: ["7M", "7L17", "6M", "6L17"], + chargebeam: ["7M", "6M"], + charm: ["7L35", "6L35"], confide: ["7M", "6M"], - covet: ["6T", "5T"], - cut: ["6M", "5M"], - doublekick: ["7L7", "7L1", "6L7", "6S2", "6S3", "5L7", "5S0"], - doubleteam: ["7M", "6M", "5M"], - endeavor: ["6T", "5T"], - facade: ["7M", "6M", "5M"], - falseswipe: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - hail: ["7M", "6M", "5M"], - helpinghand: ["7L25", "6T", "6L25", "5T", "5L25"], - hiddenpower: ["7M", "6M", "5M"], - hydropump: ["7L67", "6L67", "6S2", "5L67", "5S1"], - hyperbeam: ["7M", "6M", "5M"], - icywind: ["6T", "5T"], - lastresort: ["6T", "5T"], - leer: ["7L1", "6L1", "6S2", "6S3", "5L1", "5S0"], - poisonjab: ["7M", "6M", "5M"], - protect: ["7M", "6M", "5M"], - psychup: ["7M", "6M", "5M"], - quickguard: ["7L55", "6L55", "5L55"], - raindance: ["7M", "6M", "5M"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - retaliate: ["7L31", "6M", "6L31", "5M", "5L31"], - return: ["7M", "6M", "5M"], - roar: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - round: ["7M", "6M", "5M"], - sacredsword: ["7L43", "6L43", "5L43", "5S1"], - safeguard: ["7M", "6M", "5M"], - scald: ["7M", "6M", "5M"], + covet: ["7T", "6T"], + dazzlinggleam: ["7M", "6M"], + disable: ["6S0"], + disarmingvoice: ["7L53", "6L53"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L21", "6L21"], + drainpunch: ["7T", "6T"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "7L13", "6M", "6L13"], + endeavor: ["7T", "6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L1", "6L1"], + flail: ["7L38", "6L38"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + healbell: ["7T", "6T"], + healpulse: ["7L1", "6L1", "6S0"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + lightscreen: ["7M", "6M"], + magiccoat: ["7T", "6T"], + mistyterrain: ["7L42", "6L42"], + moonblast: ["7L31", "6L31", "6S0"], + odorsleuth: ["7L8", "7L1", "6L8"], + protect: ["7M", "6M"], + psychic: ["7M", "7L48", "6M", "6L48"], + psychup: ["7M", "7L64", "6M", "6L64"], + psyshock: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L57", "6M", "6L57"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], secretpower: ["6M"], - secretsword: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - superpower: ["6T", "5T"], - surf: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - swordsdance: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "5S1"], - takedown: ["7L19", "6L19", "5L19"], - taunt: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - waterpulse: ["6T"], - workup: ["7M", "7L61", "6L61", "5M", "5L61"], - xscissor: ["7M", "6M", "5M"], + skillswap: ["7T", "7L44", "6T", "6L44"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetkiss: ["7L6", "7L1", "6L6"], + sweetscent: ["7L1", "6L1"], + telekinesis: ["7T"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M", "6S0"], }}, - meloetta: {learnset: { - acrobatics: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], - brickbreak: ["7M", "6M", "5M"], - calmmind: ["7M", "6M", "5M"], - chargebeam: ["7M", "6M", "5M"], - closecombat: ["7L78", "6L78", "5L78", "5S1"], + swirlix: {learnset: { + afteryou: ["7T", "7E", "6T", "6E"], + aromatherapy: ["7L26", "6L26"], + attract: ["7M", "6M"], + bellydrum: ["7E", "6E"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - confusion: ["7L11", "7L1", "6L11", "5L11", "5S0"], - covet: ["6T", "5T"], + copycat: ["7E", "6E"], + cottonguard: ["7L41", "6L41"], + cottonspore: ["7L17", "6L17"], + covet: ["7T", "6T"], dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M", "5M"], - drainpunch: ["6T", "5T"], - dreameater: ["7M", "6M", "5M"], - dualchop: ["6T", "5T"], - echoedvoice: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], - embargo: ["7M", "6M", "5M"], - energyball: ["7M", "6M", "5M"], - facade: ["7M", "6M", "5M"], - firepunch: ["6T", "5T"], - flash: ["6M", "5M"], - fling: ["7M", "6M", "5M"], - focusblast: ["7M", "6M", "5M"], - focuspunch: ["6T"], - frustration: ["7M", "6M", "5M"], - gigaimpact: ["7M", "6M", "5M"], - grassknot: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - healbell: ["6T", "5T"], - helpinghand: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "6M", "5M"], - hypervoice: ["7L64", "6T", "6L64", "5T", "5L64"], - icepunch: ["6T", "5T"], - knockoff: ["6T", "5T"], - lastresort: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - lowkick: ["6T", "5T"], - lowsweep: ["7M", "6M", "5M"], - magiccoat: ["6T", "5T"], - magicroom: ["6T", "5T"], - payback: ["7M", "6M", "5M"], - perishsong: ["7L85", "6L85", "5L85"], - poweruppunch: ["6M"], - protect: ["7M", "6M", "5M"], - psybeam: ["7L31", "6L31", "5L31"], - psychic: ["7M", "7L57", "6M", "6L57", "5M", "5L57", "5S1"], - psychup: ["7M", "6M", "5M"], - psyshock: ["7M", "6M", "5M"], - quickattack: ["7L6", "7L1", "6L6", "5L6", "5S0"], - raindance: ["7M", "6M", "5M"], - recycle: ["6T", "5T"], - relicsong: ["6T", "5T"], - rest: ["7M", "6M", "5M"], - retaliate: ["6M", "5M"], - return: ["7M", "6M", "5M"], - rocksmash: ["6M", "5M"], - roleplay: ["7L71", "6T", "6L71", "5T", "5L71"], - round: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "5S0", "5S1"], - safeguard: ["7M", "6M", "5M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L31", "6L31"], + dreameater: ["7M", "6M"], + endeavor: ["7T", "7L21", "6T", "6L21"], + energyball: ["7M", "7L36", "6M", "6L36"], + facade: ["7M", "6M"], + fairywind: ["7L5", "6L5"], + faketears: ["7L10", "6L10"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gastroacid: ["7T", "6T"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + lightscreen: ["7M", "7L58", "6M", "6L58"], + magiccoat: ["7T", "6T"], + playnice: ["7L8", "6L8"], + playrough: ["7L49", "6L49"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "7L13", "6M", "6L13"], + safeguard: ["7M", "7L67", "6M", "6L67"], secretpower: ["6M"], - shadowball: ["7M", "6M", "5M"], - shadowclaw: ["7M", "6M", "5M"], - shockwave: ["6T"], - signalbeam: ["6T", "5T"], - sing: ["7L16", "7L1", "6L16", "5L16"], - skillswap: ["6T", "5T"], - sleeptalk: ["7M", "6M", "5T"], - snatch: ["6T", "5T"], - snore: ["6T", "5T"], - stoneedge: ["7M", "6M", "5M"], - strength: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - sunnyday: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - teeterdance: ["7L21", "6L21", "5L21", "5S1"], - telekinesis: ["5M"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderpunch: ["6T", "5T"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - trick: ["6T", "5T"], - trickroom: ["7M", "6M", "5M"], - uproar: ["6T", "5T"], - uturn: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], - wakeupslap: ["7L50", "6L50", "5L50"], - wonderroom: ["6T", "5T"], - workup: ["7M", "5M"], - zenheadbutt: ["6T", "5T"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + stickyweb: ["7E"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetscent: ["7L1", "6L1"], + tackle: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "6M"], + wish: ["7L45", "6L45"], + yawn: ["7E", "6E"], }}, - genesect: {learnset: { - aerialace: ["7M", "6M", "5M"], - blazekick: ["5S2"], - blizzard: ["7M", "6M", "5M"], - bugbite: ["6T", "5T"], - bugbuzz: ["7L55", "6L55", "5L55"], - chargebeam: ["7M", "6M", "5M"], + slurpuff: {learnset: { + afteryou: ["7T", "6T"], + aromatherapy: ["7L26", "6L26"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - darkpulse: ["7M", "6M", "5T"], - doubleteam: ["7M", "6M", "5M"], - electroweb: ["6T", "5T"], - energyball: ["7M", "6M", "5M"], - explosion: ["7M", "6M", "5M"], - extremespeed: ["5S2"], - facade: ["7M", "6M", "5M"], - fellstinger: ["7L1", "6L1"], - flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], - flamethrower: ["7M", "6M", "5M"], - flash: ["6M", "5M"], - flashcannon: ["7M", "6M", "5M"], - fly: ["7M", "6M", "5M"], - frustration: ["7M", "6M", "5M"], - furycutter: ["7L7", "6L7", "5L7"], - gigadrain: ["6T", "5T"], - gigaimpact: ["7M", "6M", "5M"], - gravity: ["6T", "5T"], - gunkshot: ["6T", "5T"], - hiddenpower: ["7M", "6M", "5M"], - honeclaws: ["6M", "5M"], - hyperbeam: ["7M", "7L73", "6M", "6L73", "5M", "5L73"], - icebeam: ["7M", "6M", "5M"], - infestation: ["7M", "6M"], - irondefense: ["6T", "5T"], - ironhead: ["6T", "5T"], - lastresort: ["6T", "5T"], - lightscreen: ["7M", "6M", "5M"], - lockon: ["7L11", "6L11", "5L11"], - magiccoat: ["6T", "5T"], - magnetbomb: ["7L22", "6L22", "6S3", "5L22", "5S0", "5S1"], - magnetrise: ["7L1", "6T", "6L1", "5T", "5L1"], - metalclaw: ["7L1", "6L1", "5L1"], - metalsound: ["7L33", "6L33", "5L33"], - protect: ["7M", "6M", "5M"], - psychic: ["7M", "6M", "5M"], - quickattack: ["7L1", "6L1", "5L1"], - recycle: ["6T", "5T"], - reflect: ["7M", "6M", "5M"], - rest: ["7M", "6M", "5M"], - return: ["7M", "6M", "5M"], - rockpolish: ["7M", "6M", "5M"], - round: ["7M", "6M", "5M"], - screech: ["7L1", "6L1", "5L1"], + cottonguard: ["7L41", "6L41"], + cottonspore: ["7L17", "6L17"], + covet: ["7T", "6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L31", "6L31"], + drainpunch: ["7T", "6T"], + dreameater: ["7M", "6M"], + endeavor: ["7T", "7L21", "6T", "6L21"], + energyball: ["7M", "7L36", "6M", "6L36"], + facade: ["7M", "6M"], + fairywind: ["7L5", "7L1", "6L5"], + faketears: ["7L10", "6L10"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gastroacid: ["7T", "6T"], + gigaimpact: ["7M", "6M"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + lightscreen: ["7M", "7L58", "6M", "6L58"], + magiccoat: ["7T", "6T"], + playnice: ["7L8", "7L1", "6L8"], + playrough: ["7L49", "6L49"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "7L13", "6M", "6L13"], + safeguard: ["7M", "7L67", "6M", "6L67"], secretpower: ["6M"], - selfdestruct: ["7L77", "6L77", "5L77"], - shadowclaw: ["7M", "6M", "5M"], - shiftgear: ["5S2"], - shockwave: ["6T"], - signalbeam: ["7L40", "6T", "6L40", "6S3", "5T", "5L40", "5S0", "5S1"], - simplebeam: ["7L62", "6L62", "5L62"], - slash: ["7L29", "6L29", "5L29"], - sleeptalk: ["7M", "6M", "5T"], - snore: ["6T", "5T"], - solarbeam: ["7M", "6M", "6S3", "5M", "5S0", "5S1"], - strugglebug: ["6M", "5M"], - substitute: ["7M", "6M", "5M"], - swagger: ["7M", "6M", "5M"], - technoblast: ["7L1", "6L1", "6S3", "5L1", "5S0", "5S1", "5S2"], - thunder: ["7M", "6M", "5M"], - thunderbolt: ["7M", "6M", "5M"], - thunderwave: ["7M", "6M", "5M"], - toxic: ["7M", "6M", "5M"], - triattack: ["7L44", "6L44", "5L44"], - uturn: ["7M", "6M", "5M"], - xscissor: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], - zapcannon: ["7L66", "6L66", "5L66"], - zenheadbutt: ["6T", "5T"], + sleeptalk: ["7M", "6M"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetscent: ["7L1", "6L1"], + tackle: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "6M"], + wish: ["7L45", "6L45"], }}, - chespin: {learnset: { + inkay: {learnset: { aerialace: ["7M", "6M"], + allyswitch: ["7T"], attract: ["7M", "6M"], - bellydrum: ["7E", "6E"], - bite: ["7L11", "6L11"], - bodyslam: ["7L42", "6L42"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "7L39", "6M", "6L39"], - bulldoze: ["7M", "6M"], + bind: ["7T", "6T"], + calmmind: ["7M", "6M"], + camouflage: ["7E", "6E"], confide: ["7M", "6M"], - curse: ["7E", "6E"], + constrict: ["7L1", "6L1"], cut: ["6M"], - defensecurl: ["7E", "6E"], - dig: ["6M"], + darkpulse: ["7M", "6M"], + destinybond: ["7E", "6E"], doubleteam: ["7M", "6M"], - drainpunch: ["6T"], - dualchop: ["6T"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + embargo: ["7M", "6M"], facade: ["7M", "6M"], + flamethrower: ["7M", "6M"], flash: ["6M"], + flatter: ["7E", "6E"], fling: ["7M", "6M"], - focuspunch: ["6T"], + foulplay: ["7T", "7L8", "6T", "6L8", "6S0"], frustration: ["7M", "6M"], - gigadrain: ["6T"], - grassknot: ["7M", "6M"], - grasspledge: ["7T", "6T"], - growl: ["7L1", "6L1"], - gyroball: ["7M", "6M"], - helpinghand: ["6T"], + guardswap: ["7E"], + happyhour: ["6S0"], hiddenpower: ["7M", "6M"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - leechseed: ["7L15", "6L15"], - lowkick: ["6T"], - lowsweep: ["7M", "6M"], - mudshot: ["7L35", "6L35"], - naturepower: ["7M", "6M"], - painsplit: ["7L45", "6T", "6L45"], - payback: ["7M", "6M"], - pinmissile: ["7L18", "6L18"], - poisonjab: ["7M", "6M"], - poweruppunch: ["6M"], + hypnosis: ["7L18", "6L18", "6S0"], + knockoff: ["7T", "6T"], + lightscreen: ["7M", "7L31", "6M", "6L31"], + nightslash: ["7L46", "6L46"], + payback: ["7M", "7L27", "6M", "6L27"], + peck: ["7L1", "6L1"], + pluck: ["7L35", "6L35"], + powersplit: ["7E", "6E"], + protect: ["7M", "6M"], + psybeam: ["7L21", "6L21"], + psychic: ["7M", "6M"], + psychocut: ["7L39", "6L39"], + psychup: ["7M", "6M"], + psywave: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L4", "6M", "6L4"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + roleplay: ["7T", "6T"], + round: ["7M", "6M"], + secretpower: ["6M"], + simplebeam: ["7E", "6E"], + slash: ["7L43", "6L43"], + sleeptalk: ["7M", "6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["7T", "7L48", "6T", "6L48"], + swagger: ["7M", "7L12", "6M", "6L12"], + switcheroo: ["7L23", "6L23"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "6M"], + telekinesis: ["7T"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + topsyturvy: ["7L15", "6L15", "6S0"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + }}, + malamar: {learnset: { + aerialace: ["7M", "6M"], + allyswitch: ["7T"], + attract: ["7M", "6M"], + bind: ["7T", "6T"], + block: ["7T", "6T"], + brutalswing: ["7M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + doubleteam: ["7M", "6M"], + embargo: ["7M", "6M"], + facade: ["7M", "6M", "6S0"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + foulplay: ["7T", "7L8", "6T", "6L8"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + hypnosis: ["7L18", "6L18"], + knockoff: ["7T", "6T", "6S0"], + lightscreen: ["7M", "7L31", "6M", "6L31"], + nightslash: ["7L46", "6L46"], + payback: ["7M", "7L27", "6M", "6L27"], + peck: ["7L1", "6L1"], + pluck: ["7L35", "6L35"], protect: ["7M", "6M"], - quickguard: ["7E", "6E"], - reflect: ["7M", "6M"], + psybeam: ["7L21", "6L21"], + psychic: ["7M", "6M"], + psychocut: ["7L39", "6L39"], + psychup: ["7M", "6M"], + psyshock: ["7M", "6M"], + psywave: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L4", "7L1", "6M", "6L4"], rest: ["7M", "6M"], retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - rollout: ["7L8", "7E", "6L8", "6E"], + reversal: ["7L1", "6L1"], + rockslide: ["7M", "6M", "6S0"], + roleplay: ["7T", "6T"], round: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["7L32", "6T", "6L32"], - shadowclaw: ["7M", "6M"], + signalbeam: ["7T", "6T"], + slash: ["7L43", "6L43"], sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - smackdown: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - spikes: ["7E", "6E"], - stoneedge: ["7M", "6M"], - strength: ["6M"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - superfang: ["6T"], - superpower: ["6T"], - swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], - synthesis: ["7E", "6T", "6E"], - tackle: ["6L1"], - takedown: ["7L27", "6L27"], + superpower: ["7T", "7L48", "6T", "6L1", "6S0"], + swagger: ["7M", "7L12", "6M", "6L12"], + switcheroo: ["7L23", "6L23"], + tackle: ["7L1", "6L1"], taunt: ["7M", "6M"], - thunderpunch: ["6T"], + telekinesis: ["7T"], + thief: ["7M", "6M"], + throatchop: ["7T"], + thunderbolt: ["7M", "6M"], + topsyturvy: ["7L15", "6L15"], + torment: ["7M", "6M"], toxic: ["7M", "6M"], - vinewhip: ["7L5", "7L1", "6L5"], - woodhammer: ["7L48", "6L48"], - workup: ["7M"], - worryseed: ["6T"], - zenheadbutt: ["6T"], + trickroom: ["7M", "6M"], }}, - quilladin: {learnset: { + binacle: {learnset: { aerialace: ["7M", "6M"], + ancientpower: ["7L28", "6L28"], attract: ["7M", "6M"], - bite: ["7L11", "6L11"], - bodyslam: ["7L48", "6L48"], + blizzard: ["7M", "6M"], brickbreak: ["7M", "6M"], - bulkup: ["7M", "7L44", "6M", "6L44"], bulldoze: ["7M", "6M"], + clamp: ["7L20", "6L20"], confide: ["7M", "6M"], + crosschop: ["7L49", "6L49"], cut: ["6M"], dig: ["6M"], doubleteam: ["7M", "6M"], - drainpunch: ["6T"], - dualchop: ["6T"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + dualchop: ["7T", "6T"], + earthquake: ["7M", "6M"], + embargo: ["7M", "6M"], + endeavor: ["7T", "6T"], facade: ["7M", "6M"], - flash: ["6M"], + falseswipe: ["7M", "6M"], fling: ["7M", "6M"], - focuspunch: ["6T"], frustration: ["7M", "6M"], - gigadrain: ["6T"], + furycutter: ["7L37", "6L37"], + furyswipes: ["7L10", "6L10"], grassknot: ["7M", "6M"], - grasspledge: ["7T", "6T"], - growl: ["7L1", "6L1"], - gyroball: ["7M", "6M"], - helpinghand: ["6T"], + helpinghand: ["7T", "7E", "6T", "6E"], hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - leechseed: ["7L15", "6L15"], - lowkick: ["6T"], - lowsweep: ["7M", "6M"], - mudshot: ["7L39", "6L39"], + honeclaws: ["7L32", "6M", "6L32"], + icebeam: ["7M", "6M"], + icywind: ["7T", "6T"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T"], + liquidation: ["7T"], + mudslap: ["7L18", "6L18"], naturepower: ["7M", "6M"], - needlearm: ["7L1", "6L26"], - painsplit: ["7L52", "6T", "6L52"], + nightslash: ["7L41", "6L41"], payback: ["7M", "6M"], - pinmissile: ["7L19", "6L20"], poisonjab: ["7M", "6M"], poweruppunch: ["6M"], protect: ["7M", "6M"], - reflect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorshell: ["7L45", "6L45"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], + rockpolish: ["7M", "7L24", "6M", "6L24"], rockslide: ["7M", "6M"], rocksmash: ["6M"], rocktomb: ["7M", "6M"], - rollout: ["7L8", "6L8"], round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandattack: ["7L1", "6L1"], + sandstorm: ["7M", "6M"], + scald: ["7M", "6M"], + scratch: ["7L1", "6L1"], secretpower: ["6M"], - seedbomb: ["7L35", "6T", "6L35"], shadowclaw: ["7M", "6M"], + shellsmash: ["7L1", "6L1"], + slash: ["7L13", "6L13"], sleeptalk: ["7M", "6M"], sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], smackdown: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], + snore: ["7T", "6T"], + stealthrock: ["7T", "6T"], stoneedge: ["7M", "6M"], strength: ["6M"], substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superfang: ["6T"], - superpower: ["6T"], + surf: ["7M", "6M"], swagger: ["7M", "6M"], + switcheroo: ["7E", "6E"], swordsdance: ["7M", "6M"], - synthesis: ["6T"], - tackle: ["6L1"], - takedown: ["7L29", "6L30"], taunt: ["7M", "6M"], - thunderpunch: ["6T"], + thief: ["7M", "6M"], + tickle: ["7E", "6E"], + torment: ["7M", "6M"], toxic: ["7M", "6M"], - vinewhip: ["7L5", "7L1", "6L5"], - woodhammer: ["7L56", "6L55"], - workup: ["7M"], - worryseed: ["6T"], - zenheadbutt: ["6T"], + watergun: ["7L4", "6L4"], + waterpulse: ["7T", "6T"], + watersport: ["7E", "6E"], + withdraw: ["7L7", "6L7"], + xscissor: ["7M", "6M"], }}, - chesnaught: {learnset: { + barbaracle: {learnset: { aerialace: ["7M", "6M"], + ancientpower: ["7L28", "6L28"], attract: ["7M", "6M"], - bellydrum: ["7L1", "6L1"], - bite: ["7L11", "6L11"], - block: ["6T"], - bodyslam: ["7L54", "6L48"], + blizzard: ["7M", "6M"], brickbreak: ["7M", "6M"], - bulkup: ["7M", "7L48", "6M", "6L44"], + brutalswing: ["7M"], + bulkup: ["7M", "6M"], bulldoze: ["7M", "6M"], + clamp: ["7L20", "6L20"], confide: ["7M", "6M"], + crosschop: ["7L55", "6L55"], cut: ["6M"], dig: ["6M"], doubleteam: ["7M", "6M"], dragonclaw: ["7M", "6M"], - drainpunch: ["6T"], - dualchop: ["6T"], + dualchop: ["7T", "6T"], + earthpower: ["7T", "6T"], earthquake: ["7M", "6M"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + embargo: ["7M", "6M"], + endeavor: ["7T", "6T"], facade: ["7M", "6M"], - feint: ["7L1", "6L1"], - flash: ["6M"], + falseswipe: ["7M", "6M"], fling: ["7M", "6M"], focusblast: ["7M", "6M"], - focuspunch: ["6T"], - frenzyplant: ["7T", "6T"], frustration: ["7M", "6M"], - gigadrain: ["6T"], - gigaimpact: ["7M", "7L78", "6M", "6L70"], + furycutter: ["7L37", "6L37"], + furyswipes: ["7L10", "6L10"], + gigaimpact: ["7M", "6M"], grassknot: ["7M", "6M"], - grasspledge: ["7T", "6T"], - growl: ["7L1", "6L1"], - gyroball: ["7M", "6M"], - hammerarm: ["7L72", "7L1", "6L1"], - helpinghand: ["6T"], + helpinghand: ["7T", "6T"], hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], + honeclaws: ["7L32", "6M", "6L32"], hyperbeam: ["7M", "6M"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - leechseed: ["7L15", "6L15"], - lowkick: ["6T"], - lowsweep: ["7M", "6M"], - mudshot: ["7L41", "6L41"], + icebeam: ["7M", "6M"], + icywind: ["7T", "6T"], + infestation: ["7M", "6M"], + irondefense: ["7T", "6T"], + laserfocus: ["7T"], + liquidation: ["7T"], + lowkick: ["7T", "6T"], + mudslap: ["7L18", "6L18"], naturepower: ["7M", "6M"], - needlearm: ["7L1", "6L26"], - painsplit: ["7L60", "6T", "6L52"], + nightslash: ["7L44", "6L44"], payback: ["7M", "6M"], - pinmissile: ["7L19", "6L20"], poisonjab: ["7M", "6M"], poweruppunch: ["6M"], protect: ["7M", "6M"], - reflect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorshell: ["7L48", "6L48"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], + rockpolish: ["7M", "7L24", "6M", "6L24"], rockslide: ["7M", "6M"], rocksmash: ["6M"], rocktomb: ["7M", "6M"], - rollout: ["7L8", "7L1", "6L8"], round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandattack: ["7L1", "6L1"], + sandstorm: ["7M", "6M"], + scald: ["7M", "6M"], + scratch: ["7L1", "6L1"], secretpower: ["6M"], - seedbomb: ["7L35", "6T", "6L35"], shadowclaw: ["7M", "6M"], + shellsmash: ["7L1", "6L1"], + skullbash: ["7L65", "7L1", "6L1"], + slash: ["7L13", "6L13"], sleeptalk: ["7M", "6M"], sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], smackdown: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - spikyshield: ["7L1", "6L36"], - stoneedge: ["7M", "6M"], + snore: ["7T", "6T"], + stealthrock: ["7T", "6T"], + stoneedge: ["7M", "7L60", "7L1", "6M", "6L1"], strength: ["6M"], substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superfang: ["6T"], - superpower: ["6T"], + superpower: ["7T", "6T"], + surf: ["7M", "6M"], swagger: ["7M", "6M"], swordsdance: ["7M", "6M"], - synthesis: ["6T"], - tackle: ["7L1", "6L1"], - takedown: ["7L29", "6L30"], taunt: ["7M", "6M"], - thunderpunch: ["6T"], - toxic: ["7M", "6M"], - vinewhip: ["7L5", "7L1", "6L5"], - woodhammer: ["7L66", "6L55"], - workup: ["7M"], - worryseed: ["6T"], - zenheadbutt: ["6T"], - }}, - fennekin: {learnset: { - attract: ["7M", "6M"], - confide: ["7M", "6M"], - covet: ["6T"], - cut: ["6M"], - doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - embargo: ["7M", "6M"], - ember: ["7L5", "6L5"], - facade: ["7M", "6M"], - fireblast: ["7M", "7L48", "6M", "6L48"], - firepledge: ["7T", "6T"], - firespin: ["7L20", "6L20"], - flamecharge: ["7M", "7L14", "6M", "6L14"], - flamethrower: ["7M", "7L35", "6M", "6L35", "6S0"], - foulplay: ["6T"], - frustration: ["7M", "6M"], - grassknot: ["7M", "6M"], - heatwave: ["7E", "6T", "6E"], - hiddenpower: ["7M", "6M", "6S0"], - howl: ["7L11", "6L11"], - hypnosis: ["7E", "6E"], - incinerate: ["6M"], - irontail: ["6T"], - lightscreen: ["7M", "7L27", "6M", "6L27"], - luckychant: ["7L25", "6L25"], - magiccoat: ["7E", "6T", "6E"], - magicroom: ["7L46", "6T", "6L46"], - overheat: ["7M", "6M"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - psybeam: ["7L17", "6L17"], - psychic: ["7M", "7L41", "6M", "6L41"], - psychup: ["7M", "6M"], - psyshock: ["7M", "7L31", "6M", "6L31"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - scratch: ["7L1", "6L1", "6S0"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "7L43", "6M", "6L43"], - swagger: ["7M", "6M"], - tailwhip: ["7L1", "6L1"], thief: ["7M", "6M"], + torment: ["7M", "6M"], toxic: ["7M", "6M"], - willowisp: ["7M", "7L38", "6M", "6L38"], - wish: ["7E", "6E"], - workup: ["7M"], + watergun: ["7L4", "7L1", "6L4"], + waterpulse: ["7T", "6T"], + withdraw: ["7L7", "6L7"], + xscissor: ["7M", "6M"], }}, - braixen: {learnset: { + skrelp: {learnset: { + acid: ["7L15", "6L15"], + acidarmor: ["7E", "6E"], + aquatail: ["7T", "7L35", "6T", "6L35"], attract: ["7M", "6M"], + bounce: ["7T", "6T"], + bubble: ["7L12", "6L12"], + camouflage: ["7L19", "6L19"], confide: ["7M", "6M"], - covet: ["6T"], - cut: ["6M"], - doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - embargo: ["7M", "6M"], - ember: ["7L5", "7L1", "6L5"], + dive: ["6M"], + doubleteam: ["7M", "7L28", "6M", "6L28"], + dragonpulse: ["7T", "7L49", "6T", "6L49"], facade: ["7M", "6M"], - fireblast: ["7M", "7L59", "6M", "6L55"], - firepledge: ["7T", "6T"], - firepunch: ["6T"], - firespin: ["7L22", "6L22"], - flamecharge: ["7M", "7L14", "6M", "6L14"], - flamethrower: ["7M", "7L41", "6M", "6L41"], - foulplay: ["6T"], + feintattack: ["7L5", "6L5"], frustration: ["7M", "6M"], - grassknot: ["7M", "6M"], - heatwave: ["6T"], + gunkshot: ["7T", "6T"], + hail: ["7M", "6M"], + haze: ["7E", "6E"], hiddenpower: ["7M", "6M"], - howl: ["7L11", "6L11"], - incinerate: ["6M"], - irontail: ["6T"], - lightscreen: ["7M", "7L31", "6M", "6L30"], - lowkick: ["6T"], - luckychant: ["7L28", "6L27"], - magiccoat: ["6T"], - magicroom: ["7L56", "6T", "6L53"], - overheat: ["7M", "6M"], - poweruppunch: ["6M"], + hydropump: ["7L42", "6L42"], + icywind: ["7T", "6T"], + irontail: ["7T", "6T"], + outrage: ["7T", "6T"], + playrough: ["7E", "6E"], + poisontail: ["7L23", "6L23"], protect: ["7M", "6M"], - psybeam: ["7L18", "6L18"], - psychic: ["7M", "7L49", "6M", "6L48"], - psychup: ["7M", "6M"], - psyshock: ["7M", "7L36", "6M", "6L34"], raindance: ["7M", "6M"], - recycle: ["6T"], rest: ["7M", "6M"], return: ["7M", "6M"], round: ["7M", "6M"], - safeguard: ["7M", "6M"], - scratch: ["7L1", "6L1"], + scald: ["7M", "6M"], secretpower: ["6M"], - shockwave: ["6T"], - skillswap: ["6T"], + shadowball: ["7M", "6M"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - solarbeam: ["7M", "6M"], + sludgebomb: ["7M", "7L38", "6M", "6L38"], + sludgewave: ["7M", "6M"], + smokescreen: ["7L1", "6L1"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], - sunnyday: ["7M", "7L52", "6M", "6L51"], + surf: ["7M", "6M"], swagger: ["7M", "6M"], - tailwhip: ["7L1", "6L1"], - thief: ["7M", "6M"], - thunderpunch: ["6T"], - toxic: ["7M", "6M"], - trick: ["6T"], - willowisp: ["7M", "7L45", "6M", "6L45"], - wonderroom: ["6T"], - workup: ["7M"], - zenheadbutt: ["6T"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "6L9"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "7L32", "6M", "6L32"], + toxicspikes: ["7E", "6E"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7T", "7L25", "6T", "6L25"], }}, - delphox: {learnset: { + dragalge: {learnset: { + acid: ["7L15", "6L15"], + aquatail: ["7T", "7L35", "6T", "6L35"], attract: ["7M", "6M"], - blastburn: ["7T", "6T"], - calmmind: ["7M", "6M"], + bounce: ["7T", "6T"], + bubble: ["7L12", "6L12"], + camouflage: ["7L19", "6L19"], confide: ["7M", "6M"], - covet: ["6T"], - cut: ["6M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - embargo: ["7M", "6M"], - ember: ["7L5", "7L1", "6L5"], + dive: ["6M"], + doubleteam: ["7M", "7L28", "6M", "6L28"], + dracometeor: ["7T", "6T"], + dragonpulse: ["7T", "7L53", "6T", "6L53"], + dragontail: ["7M", "7L59", "7L1", "6M", "6L1"], facade: ["7M", "6M"], - fireblast: ["7M", "7L74", "6M", "6L61"], - firepledge: ["7T", "6T"], - firepunch: ["6T"], - firespin: ["7L22", "6L22"], - flamecharge: ["7M", "7L14", "6M", "6L14"], - flamethrower: ["7M", "7L45", "6M", "6L42"], - foulplay: ["6T"], + feintattack: ["7L5", "7L1", "6L5"], + focusblast: ["7M", "6M"], frustration: ["7M", "6M"], - futuresight: ["7L80", "7L1", "6L1"], gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - heatwave: ["6T"], + gunkshot: ["7T", "6T"], + hail: ["7M", "6M"], hiddenpower: ["7M", "6M"], - howl: ["7L11", "7L1", "6L11"], + hydropump: ["7L42", "6L42"], hyperbeam: ["7M", "6M"], - incinerate: ["6M"], - irontail: ["6T"], - lightscreen: ["7M", "7L31", "6M", "6L30"], - lowkick: ["6T"], - luckychant: ["7L28", "6L27"], - magiccoat: ["6T"], - magicroom: ["7L68", "6T", "6L58"], - mysticalfire: ["7L1", "6L36"], - overheat: ["7M", "6M"], - poweruppunch: ["6M"], + icywind: ["7T", "6T"], + irontail: ["7T", "6T"], + outrage: ["7T", "6T"], + poisontail: ["7L23", "6L23"], protect: ["7M", "6M"], - psybeam: ["7L18", "6L18"], - psychic: ["7M", "7L57", "6M", "6L51"], - psychup: ["7M", "6M"], - psyshock: ["7M", "7L38", "6M", "6L34"], raindance: ["7M", "6M"], - recycle: ["6T"], rest: ["7M", "6M"], return: ["7M", "6M"], - roleplay: ["7L1", "6T", "6L1"], round: ["7M", "6M"], - safeguard: ["7M", "6M"], - scratch: ["7L1", "6L1"], - secretpower: ["6M"], - shadowball: ["7M", "7L1", "6M", "6L1"], - shockwave: ["6T"], - signalbeam: ["6T"], - skillswap: ["6T"], - sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "7L62", "6M", "6L55"], - swagger: ["7M", "6M"], - switcheroo: ["7L1", "6L1"], - tailwhip: ["7L1", "6L1"], - thief: ["7M", "6M"], - thunderpunch: ["6T"], - toxic: ["7M", "6M"], - trick: ["6T"], - trickroom: ["7M", "6M"], - willowisp: ["7M", "7L51", "6M", "6L47"], - wonderroom: ["6T"], - workup: ["7M"], - zenheadbutt: ["6T"], - }}, - froakie: {learnset: { - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], - attract: ["7M", "6M"], - bestow: ["7E", "6E"], - blizzard: ["7M", "6M"], - bounce: ["7L39", "6T", "6L39"], - bubble: ["7L5", "6L5", "6S0"], - camouflage: ["7E", "6E"], - confide: ["7M", "6M"], - cut: ["6M"], - dig: ["6M"], - dive: ["6M"], - doubleteam: ["7M", "7L43", "6M", "6L43"], - echoedvoice: ["7M", "6M"], - facade: ["7M", "6M"], - fling: ["7M", "7L25", "6M", "6L25"], - frustration: ["7M", "6M"], - grassknot: ["7M", "6M"], - growl: ["7L1", "6L1", "6S0"], - hiddenpower: ["7M", "6M"], - hydropump: ["7L48", "6L48"], - icebeam: ["7M", "6M"], - icywind: ["6T"], - lick: ["7L10", "6L10"], - mindreader: ["7E", "6E"], - mudsport: ["7E", "6E"], - pound: ["7L1", "6L1", "6S0"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - quickattack: ["7L8", "6L8"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M", "6S0"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - roleplay: ["6T"], - round: ["7M", "7L21", "6M", "6L21"], scald: ["7M", "6M"], secretpower: ["6M"], + shadowball: ["7M", "6M"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M"], - smackdown: ["7M", "7L29", "6M", "6L29"], - smokescreen: ["7L18", "6L18"], - snatch: ["6T"], - snore: ["6T"], - spite: ["6T"], - strength: ["6M"], - substitute: ["7M", "7L35", "6M", "6L35"], + sludgebomb: ["7M", "7L38", "6M", "6L38"], + sludgewave: ["7M", "6M"], + smokescreen: ["7L1", "6L1"], + snore: ["7T", "6T"], + substitute: ["7M", "6M"], surf: ["7M", "6M"], swagger: ["7M", "6M"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - toxic: ["7M", "6M"], - toxicspikes: ["7E", "6E"], - uturn: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "6L9"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "7L32", "6M", "6L32"], + twister: ["7L1", "6L1"], + venoshock: ["7M", "6M"], waterfall: ["7M", "6M"], - waterpledge: ["7T", "6T"], - waterpulse: ["7L14", "6T", "6L14"], - watersport: ["7E", "6E"], - workup: ["7M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7T", "7L25", "6T", "6L25"], }}, - frogadier: {learnset: { - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], + clauncher: {learnset: { + aquajet: ["7L43", "7E", "6L43", "6E"], + aquatail: ["7T", "6T"], attract: ["7M", "6M"], - blizzard: ["7M", "6M"], - bounce: ["7L45", "6T", "6L44"], - bubble: ["7L5", "7L1", "6L5"], + bounce: ["7T", "6T"], + bubble: ["7L12", "6L12"], + bubblebeam: ["7L20", "6L20"], confide: ["7M", "6M"], + crabhammer: ["7L30", "7E", "6L30", "6E"], cut: ["6M"], - darkpulse: ["7M", "6M"], - dig: ["6M"], dive: ["6M"], - doubleteam: ["7M", "7L50", "6M", "6L48"], - echoedvoice: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dragonpulse: ["7T", "6T"], + endure: ["7E", "6E"], + entrainment: ["7E", "6E"], facade: ["7M", "6M"], - fling: ["7M", "7L28", "6M", "6L28"], + flail: ["7L16", "6L16"], + flashcannon: ["7M", "6M"], frustration: ["7M", "6M"], - grassknot: ["7M", "6M"], - growl: ["7L1", "6L1"], - gunkshot: ["6T"], + helpinghand: ["7T", "7E", "6T", "6E"], hiddenpower: ["7M", "6M"], - hydropump: ["7L56", "6L55"], icebeam: ["7M", "6M"], - icepunch: ["6T"], - icywind: ["6T"], - lick: ["7L10", "6L10"], - lowkick: ["6T"], - pound: ["7L1", "6L1"], - poweruppunch: ["6M"], + icywind: ["7T", "6T"], + irontail: ["7T", "6T"], + muddywater: ["7L48", "6L48"], protect: ["7M", "6M"], - quickattack: ["7L8", "6L8"], raindance: ["7M", "6M"], rest: ["7M", "6M"], return: ["7M", "6M"], rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - roleplay: ["6T"], - round: ["7M", "7L23", "6M", "6L23"], + round: ["7M", "6M"], scald: ["7M", "6M"], secretpower: ["6M"], sleeptalk: ["7M", "6M"], - smackdown: ["7M", "7L33", "6M", "6L33"], - smokescreen: ["7L19", "6L20"], - snatch: ["6T"], - snore: ["6T"], - spite: ["6T"], - strength: ["6M"], - substitute: ["7M", "7L40", "6M", "6L38"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "7L39", "6M", "6L39"], + snore: ["7T", "6T"], + splash: ["7L1", "6L1"], + substitute: ["7M", "6M"], surf: ["7M", "6M"], swagger: ["7M", "6M"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], + swordsdance: ["7M", "7L25", "6M", "6L25"], toxic: ["7M", "6M"], uturn: ["7M", "6M"], + venoshock: ["7M", "6M"], + vicegrip: ["7L9", "6L9"], waterfall: ["7M", "6M"], - waterpledge: ["7T", "6T"], - waterpulse: ["7L14", "6T", "6L14"], - workup: ["7M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7T", "7L34", "6T", "6L34"], + watersport: ["7L7", "6L7"], }}, - greninja: {learnset: { - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], + clawitzer: {learnset: { + aquajet: ["7L49", "6L47"], + aquatail: ["7T", "6T"], attract: ["7M", "6M"], - blizzard: ["7M", "6M"], - bounce: ["6T"], - brutalswing: ["7M"], - bubble: ["7L5", "7L1", "6L5"], + aurasphere: ["7L1", "6L1"], + bounce: ["7T", "6T"], + bubble: ["7L12", "6L12"], + bubblebeam: ["7L20", "6L20"], confide: ["7M", "6M"], + crabhammer: ["7L30", "6L30"], cut: ["6M"], - darkpulse: ["7M", "6M"], - dig: ["6M"], + darkpulse: ["7M", "7L1", "6M", "6L1"], dive: ["6M"], - doubleteam: ["7M", "7L56", "6M", "6L52"], - echoedvoice: ["7M", "6M"], - extrasensory: ["7L49", "6L49"], + doubleteam: ["7M", "6M"], + dragonpulse: ["7T", "7L1", "6T", "6L1"], facade: ["7M", "6M"], - feintattack: ["7L33", "6L33"], - fling: ["7M", "6M"], + flail: ["7L16", "6L16"], + flashcannon: ["7M", "6M"], + focusblast: ["7M", "6M"], frustration: ["7M", "6M"], gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - growl: ["7L1", "6L1"], - gunkshot: ["6T", "6S1"], - happyhour: ["6S1"], - haze: ["7L70", "7L1", "6L56"], + healpulse: ["7L1", "6L1"], + helpinghand: ["7T", "6T"], hiddenpower: ["7M", "6M"], - hydrocannon: ["7T", "6T", "6S1"], - hydropump: ["7L68", "6L60", "6S0"], hyperbeam: ["7M", "6M"], icebeam: ["7M", "6M"], - icepunch: ["6T"], - icywind: ["6T"], - lick: ["7L10", "6L10"], - lowkick: ["6T"], - matblock: ["7L1", "6L1", "6S1"], - nightslash: ["7L77", "7L1", "6L1"], - pound: ["7L1", "6L1"], - poweruppunch: ["6M"], + icywind: ["7T", "6T"], + irontail: ["7T", "6T"], + laserfocus: ["7T"], + liquidation: ["7T"], + muddywater: ["7L57", "6L53"], protect: ["7M", "6M"], - quickattack: ["7L8", "7L1", "6L8"], raindance: ["7M", "6M"], rest: ["7M", "6M"], return: ["7M", "6M"], rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - roleplay: ["7L1", "6T", "6L1"], round: ["7M", "6M"], scald: ["7M", "6M"], secretpower: ["6M"], - shadowsneak: ["7L23", "6L23", "6S0"], + shadowball: ["7M", "6M"], sleeptalk: ["7M", "6M"], - smackdown: ["7M", "6M"], - smokescreen: ["7L19", "6L20"], - snatch: ["6T"], - snore: ["6T"], - spikes: ["7L28", "6L28"], - spite: ["6T"], - strength: ["6M"], - substitute: ["7M", "7L42", "6M", "6L43", "6S0"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "7L42", "6M", "6L42"], + snore: ["7T", "6T"], + splash: ["7L1", "6L1"], + substitute: ["7M", "6M"], surf: ["7M", "6M"], swagger: ["7M", "6M"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], + swordsdance: ["7M", "7L25", "6M", "6L25"], toxic: ["7M", "6M"], uturn: ["7M", "6M"], + venoshock: ["7M", "6M"], + vicegrip: ["7L9", "7L1", "6L9"], waterfall: ["7M", "6M"], - waterpledge: ["7T", "6T"], - waterpulse: ["7L14", "6T", "6L14"], - watershuriken: ["7L1", "6L36", "6S0"], - workup: ["7M"], - }}, - greninjaash: {learnset: { - acrobatics: ["7M"], - aerialace: ["7M", "7S0"], - attract: ["7M"], - blizzard: ["7M"], - brutalswing: ["7M"], - bubble: ["7L1"], - confide: ["7M"], - darkpulse: ["7M"], - doubleteam: ["7M", "7L56", "7S0"], - echoedvoice: ["7M"], - extrasensory: ["7L49"], - facade: ["7M"], - feintattack: ["7L33"], - fling: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - growl: ["7L1"], - haze: ["7L1"], - hiddenpower: ["7M"], - hydrocannon: ["7T"], - hydropump: ["7L68"], - hyperbeam: ["7M"], - icebeam: ["7M"], - lick: ["7L10"], - matblock: ["7L1"], - nightslash: ["7L1", "7S0"], - pound: ["7L1"], - protect: ["7M"], - quickattack: ["7L1"], - raindance: ["7M"], - rest: ["7M"], - return: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - roleplay: ["7L1"], - round: ["7M"], - scald: ["7M"], - shadowsneak: ["7L23"], - sleeptalk: ["7M"], - smackdown: ["7M"], - smokescreen: ["7L19"], - spikes: ["7L28"], - substitute: ["7M", "7L42"], - surf: ["7M"], - swagger: ["7M"], - taunt: ["7M"], - thief: ["7M"], - toxic: ["7M"], - uturn: ["7M"], - waterfall: ["7M"], - waterpledge: ["7T"], - waterpulse: ["7L14"], - watershuriken: ["7L1", "7S0"], - workup: ["7M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7T", "7L34", "6T", "6L34"], + watersport: ["7L7", "7L1", "6L7"], }}, - bunnelby: {learnset: { - agility: ["7L1", "6L1"], + helioptile: {learnset: { + agility: ["7E", "6E"], + allyswitch: ["7T"], attract: ["7M", "6M"], - bounce: ["7L38", "6T", "6L38"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "6M"], - bulldoze: ["7M", "6M"], + bulldoze: ["7M", "7L35", "6M", "6L35"], + camouflage: ["7E", "6E"], + charge: ["7L11", "6L11"], + chargebeam: ["7M", "6M"], confide: ["7M", "6M"], cut: ["6M"], - defensecurl: ["7E", "6E"], - dig: ["7L33", "6M", "6L33"], - doublekick: ["7L20", "6L20"], - doubleslap: ["7L10", "6L10"], + darkpulse: ["7M", "6M"], + dig: ["6M"], doubleteam: ["7M", "6M"], - earthquake: ["7M", "7L49", "6M", "6L49"], - endeavor: ["6T"], - facade: ["7M", "7L47", "6M", "6L47"], - flail: ["7L29", "6L29"], - fling: ["7M", "6M"], + dragontail: ["7M", "6M"], + electricterrain: ["7E", "6E"], + electrify: ["7L45", "6L45"], + electroweb: ["7T", "6T"], + facade: ["7M", "6M"], + flash: ["6M"], frustration: ["7M", "6M"], + glare: ["7E", "6E"], grassknot: ["7M", "6M"], hiddenpower: ["7M", "6M"], - ironhead: ["6T"], - irontail: ["6T"], - lastresort: ["6T"], - leer: ["7L1", "6L1"], - mudshot: ["7L18", "6L18"], + irontail: ["7T", "6T"], + lightscreen: ["7M", "6M"], + lowsweep: ["7M", "6M"], + magnetrise: ["7T", "6T"], mudslap: ["7L13", "6L13"], - naturepower: ["7M", "6M"], - odorsleuth: ["7L25", "6L25"], - payback: ["7M", "6M"], - poweruppunch: ["6M"], + paraboliccharge: ["7L25", "6L25"], + pound: ["7L1", "6L1"], protect: ["7M", "6M"], - quickattack: ["7L7", "6L7"], - recycle: ["6T"], + psychup: ["7M", "6M"], + quickattack: ["7L17", "6L17"], + raindance: ["7M", "6M"], + razorwind: ["7L22", "6L22"], rest: ["7M", "6M"], return: ["7M", "6M"], rockslide: ["7M", "6M"], - rocksmash: ["6M"], rocktomb: ["7M", "6M"], - rollout: ["7E", "6E"], round: ["7M", "6M"], sandstorm: ["7M", "6M"], secretpower: ["6M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - smackdown: ["7M", "6M"], - snore: ["6T"], - spikes: ["7E", "6E"], - stoneedge: ["7M", "6M"], - strength: ["6M"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], - superfang: ["7L42", "6T", "6L42"], surf: ["7M", "6M"], swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - takedown: ["7L15", "6L15"], - thief: ["7M", "6M"], - torment: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "7L49", "6M", "6L49"], + thundershock: ["7L6", "6L6"], + thunderwave: ["7M", "7L31", "6M", "6L31"], toxic: ["7M", "6M"], uturn: ["7M", "6M"], + voltswitch: ["7M", "7L40", "6M", "6L40"], wildcharge: ["7M", "6M"], - workup: ["7M"], }}, - diggersby: {learnset: { - agility: ["7L1", "6L1"], + heliolisk: {learnset: { + allyswitch: ["7T"], attract: ["7M", "6M"], - bounce: ["7L43", "6T", "6L42"], - brickbreak: ["7M", "6M"], brutalswing: ["7M"], - bulkup: ["7M", "6M"], - bulldoze: ["7M", "7L1", "6M", "6L1"], + bulldoze: ["7M", "6M"], + charge: ["7L1", "6L1"], + chargebeam: ["7M", "6M"], confide: ["7M", "6M"], cut: ["6M"], - dig: ["7L37", "6M", "6L37"], - doublekick: ["7L21", "6L20"], - doubleslap: ["7L13"], + darkpulse: ["7M", "6M"], + dig: ["6M"], doubleteam: ["7M", "6M"], - earthpower: ["6T"], - earthquake: ["7M", "7L57", "6M", "6L57"], - endeavor: ["6T"], - facade: ["7M", "7L54", "6M", "6L53"], - firepunch: ["6T"], - flail: ["7L32", "6L31"], - fling: ["7M", "6M"], - focuspunch: ["6T"], - foulplay: ["6T"], + dragonpulse: ["7T", "6T"], + dragontail: ["7M", "6M"], + eerieimpulse: ["7L1", "6L1"], + electrify: ["7L1", "6L1"], + electroweb: ["7T", "6T"], + facade: ["7M", "6M"], + firepunch: ["7T", "6T"], + flash: ["6M"], + focusblast: ["7M", "6M"], frustration: ["7M", "6M"], - gastroacid: ["6T"], gigaimpact: ["7M", "6M"], grassknot: ["7M", "6M"], - gunkshot: ["6T"], - hammerarm: ["7L60", "7L1", "6L1"], hiddenpower: ["7M", "6M"], hyperbeam: ["7M", "6M"], - icepunch: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - knockoff: ["6T"], - lastresort: ["6T"], - leer: ["7L1", "6L1"], - lowkick: ["6T"], - mudshot: ["7L18", "6L18"], - mudslap: ["7L13", "6L13"], - naturepower: ["7M", "6M"], - odorsleuth: ["7L27", "6L26"], - payback: ["7M", "6M"], - poweruppunch: ["6M"], + hypervoice: ["7T", "6T"], + irontail: ["7T", "6T"], + lightscreen: ["7M", "6M"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "6M"], + magnetrise: ["7T", "6T"], + paraboliccharge: ["7L1", "6L1"], protect: ["7M", "6M"], - quickattack: ["7L7", "6L7"], - recycle: ["6T"], + psychup: ["7M", "6M"], + quickattack: ["7L1", "6L1"], + raindance: ["7M", "6M"], + razorwind: ["7L1", "6L1"], rest: ["7M", "6M"], return: ["7M", "6M"], rockslide: ["7M", "6M"], - rocksmash: ["6M"], rocktomb: ["7M", "6M"], - rototiller: ["7L1", "6L1"], round: ["7M", "6M"], sandstorm: ["7M", "6M"], secretpower: ["6M"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - smackdown: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - stoneedge: ["7M", "6M"], - strength: ["6M"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], - superfang: ["7L48", "6T", "6L48"], - superpower: ["6T"], surf: ["7M", "6M"], swagger: ["7M", "6M"], - swordsdance: ["7M", "7L1", "6M", "6L1"], - tackle: ["7L1", "6L1"], - takedown: ["7L15", "6L15"], - thief: ["7M", "6M"], - thunderpunch: ["6T"], - torment: ["7M", "6M"], + thunder: ["7M", "7L1", "6M", "6L1"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + thunderwave: ["7M", "6M"], toxic: ["7M", "6M"], - uproar: ["6T"], uturn: ["7M", "6M"], + voltswitch: ["7M", "6M"], wildcharge: ["7M", "6M"], - workup: ["7M"], }}, - fletchling: {learnset: { - acrobatics: ["7M", "7L39", "6M", "6L39"], + tyrunt: {learnset: { aerialace: ["7M", "6M"], - agility: ["7L13", "6L13"], + ancientpower: ["7L26", "6L26"], attract: ["7M", "6M"], + bide: ["7L12", "6L12"], + bite: ["7L17", "6L17"], + block: ["7T", "6T"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "6M"], + charm: ["7L20", "6L20"], confide: ["7M", "6M"], + crunch: ["7L34", "6L34"], + curse: ["7E", "6E"], + darkpulse: ["7M", "6M"], + dig: ["6M"], doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonclaw: ["7M", "7L37", "6M", "6L37"], + dragondance: ["7E", "6E"], + dragonpulse: ["7T", "6T"], + dragontail: ["7M", "7L30", "6M", "6L30"], + earthpower: ["7T", "6T"], + earthquake: ["7M", "7L44", "6M", "6L44"], facade: ["7M", "6M"], - flail: ["7L16", "6L16"], - flamecharge: ["7M", "7L34", "6M", "6L34"], - fly: ["7M", "6M"], + firefang: ["7E", "6E"], frustration: ["7M", "6M"], - growl: ["7L1", "6L1"], - heatwave: ["6T"], hiddenpower: ["7M", "6M"], - mefirst: ["7L41", "6L41"], - naturalgift: ["7L29", "6L29"], - overheat: ["7M", "6M"], - peck: ["7L10", "6L10"], + honeclaws: ["6M"], + horndrill: ["7L49", "6L49"], + hypervoice: ["7T", "6T"], + icefang: ["7E", "6E"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + outrage: ["7T", "6T"], + poisonfang: ["7E", "6E"], protect: ["7M", "6M"], - quickattack: ["7L6", "6L6"], - quickguard: ["7E", "6E"], - razorwind: ["7L25", "6L25"], rest: ["7M", "6M"], return: ["7M", "6M"], - roost: ["7M", "7L21", "6M", "6L21"], + roar: ["7M", "7L6", "6M", "6L6", "6S0"], + rockpolish: ["7M", "7E", "6M", "6E"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], round: ["7M", "6M"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], sleeptalk: ["7M", "6M"], - snatch: ["7E", "6T", "6E"], - snore: ["6T"], - steelwing: ["7M", "7L48", "6M", "6L48"], + snore: ["7T", "6T"], + stealthrock: ["7T", "7L15", "6T", "6L15"], + stomp: ["7L10", "6L10", "6S0"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], + superpower: ["7T", "6T"], swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwind: ["7L45", "7E", "6T", "6L45", "6E"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], + tackle: ["7L1", "6L1", "6S0"], + tailwhip: ["7L1", "6L1", "6S0"], + thrash: ["7L40", "6L40"], + thunderfang: ["7E", "6E"], toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - workup: ["7M"], + zenheadbutt: ["7T", "6T"], }}, - fletchinder: {learnset: { - acrobatics: ["7M", "7L42", "6M", "6L42"], + tyrantrum: {learnset: { aerialace: ["7M", "6M"], - agility: ["7L13", "6L13"], + ancientpower: ["7L26", "6L26"], attract: ["7M", "6M"], + bide: ["7L12", "6L12"], + bite: ["7L17", "6L17"], + block: ["7T", "6T"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M"], + charm: ["7L20", "6L20"], confide: ["7M", "6M"], + crunch: ["7L34", "6L34"], + darkpulse: ["7M", "6M"], + dig: ["6M"], doubleteam: ["7M", "6M"], - ember: ["7L1", "6L17"], + dracometeor: ["7T", "6T"], + dragonclaw: ["7M", "7L37", "6M", "6L37"], + dragonpulse: ["7T", "6T"], + dragontail: ["7M", "7L30", "6M", "6L30"], + earthpower: ["7T", "6T"], + earthquake: ["7M", "7L47", "6M", "6L47"], facade: ["7M", "6M"], - fireblast: ["7M", "6M"], - flail: ["7L16", "6L16"], - flamecharge: ["7M", "7L38", "6M", "6L38"], - flamethrower: ["7M", "6M"], - fly: ["7M", "6M"], frustration: ["7M", "6M"], - growl: ["7L1", "6L1"], - heatwave: ["6T"], + gigaimpact: ["7M", "7L68", "6M", "6L75"], + headsmash: ["7L58", "7L1", "6L1"], hiddenpower: ["7M", "6M"], - incinerate: ["6M"], - mefirst: ["7L46", "6L46"], - naturalgift: ["7L31", "6L31"], - overheat: ["7M", "6M"], - peck: ["7L10", "6L10"], + honeclaws: ["6M"], + horndrill: ["7L53", "6L53"], + hyperbeam: ["7M", "6M"], + hypervoice: ["7T", "6T"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + outrage: ["7T", "6T"], protect: ["7M", "6M"], - quickattack: ["7L6", "7L1", "6L6"], - razorwind: ["7L27", "6L27"], rest: ["7M", "6M"], return: ["7M", "6M"], - roost: ["7M", "7L25", "6M", "6L25"], + roar: ["7M", "7L6", "7L1", "6M", "6L6"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "7L1", "6M", "6L68"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], round: ["7M", "6M"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - steelwing: ["7M", "7L55", "6M", "6L55"], + snore: ["7T", "6T"], + stealthrock: ["7T", "7L15", "6T", "6L15"], + stomp: ["7L10", "7L1", "6L10"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], + superpower: ["7T", "6T"], swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], tackle: ["7L1", "6L1"], - tailwind: ["7L51", "6T", "6L51"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + thrash: ["7L42", "6L42"], toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - willowisp: ["7M", "6M"], - workup: ["7M"], + zenheadbutt: ["7T", "6T"], }}, - talonflame: {learnset: { - acrobatics: ["7M", "7L44", "6M", "6L44"], - aerialace: ["7M", "6M"], - agility: ["7L13", "6L13"], + amaura: {learnset: { + ancientpower: ["7L26", "6L26"], + aquatail: ["7T", "6T"], attract: ["7M", "6M"], - bravebird: ["7L64", "7L1", "6L1"], - bulkup: ["7M", "6M"], + aurorabeam: ["7L20", "6L20"], + avalanche: ["7L34", "6L34"], + barrier: ["7E", "6E"], + blizzard: ["7M", "7L65", "6M", "6L65"], + bulldoze: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], confide: ["7M", "6M"], + darkpulse: ["7M", "6M"], + discharge: ["7E", "6E"], doubleteam: ["7M", "6M"], - ember: ["7L1", "6L17"], + dragontail: ["7M", "6M"], + dreameater: ["7M", "6M"], + earthpower: ["7T", "6T"], + echoedvoice: ["7M", "6M"], + encore: ["7L44", "6L44"], facade: ["7M", "6M"], - fireblast: ["7M", "6M"], - flail: ["7L16", "6L16"], - flamecharge: ["7M", "7L39", "6M", "6L39"], - flamethrower: ["7M", "6M"], - flareblitz: ["7L1", "6L1"], - fly: ["7M", "6M"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frostbreath: ["7M", "6M"], frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - growl: ["7L1", "6L1"], - heatwave: ["6T"], + growl: ["7L1", "6L1", "6S0"], + hail: ["7M", "7L38", "6M", "6L38"], + haze: ["7E", "6E"], hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - hyperbeam: ["7M", "6M"], - incinerate: ["6M"], - mefirst: ["7L49", "6L49"], - naturalgift: ["7L31", "6L31"], - overheat: ["7M", "6M"], - peck: ["7L10", "7L1", "6L10"], + hyperbeam: ["7M", "7L57", "6M", "6L57"], + hypervoice: ["7T", "6T"], + icebeam: ["7M", "7L50", "6M", "6L50"], + icywind: ["7T", "7L13", "6T", "6L13"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + lightscreen: ["7M", "7L47", "6M", "6L47"], + magnetrise: ["7T", "7E", "6T", "6E"], + mirrorcoat: ["7E", "6E"], + mist: ["7L18", "6L18"], + naturepower: ["7M", "7L41", "6M", "6L41"], + outrage: ["7T", "6T"], + powdersnow: ["7L1", "6L1", "6S0"], protect: ["7M", "6M"], - quickattack: ["7L6", "7L1", "6L6"], - razorwind: ["7L27", "6L27"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], return: ["7M", "6M"], - roost: ["7M", "7L25", "6M", "6L25"], - round: ["7M", "6M"], + roar: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rockthrow: ["7L10", "6L10", "6S0"], + rocktomb: ["7M", "6M"], + round: ["7M", "7L30", "6M", "6L30"], + safeguard: ["7M", "6M"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - steelwing: ["7M", "7L60", "6M", "6L60"], + snore: ["7T", "6T"], + stealthrock: ["7T", "6T"], + stoneedge: ["7M", "6M"], substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwind: ["7L55", "6T", "6L55"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], + takedown: ["7L15", "6L15"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "7L5", "6M", "6L5", "6S0"], toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - willowisp: ["7M", "6M"], - workup: ["7M"], - }}, - scatterbug: {learnset: { - bugbite: ["7L15", "6T", "6L15"], - poisonpowder: ["7E", "6E"], - ragepowder: ["7E", "6E"], - stringshot: ["7L1", "6L1"], - stunspore: ["7L6", "7E", "6L6", "6E"], - tackle: ["7L1", "6L1"], - }}, - spewpa: {learnset: { - bugbite: ["6T"], - electroweb: ["6T"], - harden: ["7L1", "6L1"], - irondefense: ["6T"], - protect: ["7M", "7L1", "6M", "6L9"], + waterpulse: ["7T", "6T"], + zenheadbutt: ["7T", "6T"], }}, - vivillon: {learnset: { - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], - aromatherapy: ["7L31", "6L31"], + aurorus: {learnset: { + ancientpower: ["7L26", "6L26"], + aquatail: ["7T", "6T"], attract: ["7M", "6M"], - bugbite: ["6T"], - bugbuzz: ["7L35", "6L35"], + aurorabeam: ["7L20", "6L20"], + avalanche: ["7L34", "6L34"], + blizzard: ["7M", "7L74", "6M", "6L74"], + bulldoze: ["7M", "6M"], calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], confide: ["7M", "6M"], + darkpulse: ["7M", "6M"], doubleteam: ["7M", "6M"], - drainingkiss: ["7L25", "6L25"], + dragontail: ["7M", "6M"], dreameater: ["7M", "6M"], - electroweb: ["6T"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + earthpower: ["7T", "6T"], + earthquake: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + encore: ["7L46", "6L46"], facade: ["7M", "6M"], flash: ["6M"], + flashcannon: ["7M", "6M"], + freezedry: ["7L1", "6L1"], + frostbreath: ["7M", "6M"], frustration: ["7M", "6M"], - gigadrain: ["6T"], gigaimpact: ["7M", "6M"], - gust: ["7L1", "6L1"], + growl: ["7L1", "6L1"], + hail: ["7M", "7L38", "6M", "6L38"], hiddenpower: ["7M", "6M"], - hurricane: ["7L50", "6L50"], - hyperbeam: ["7M", "6M"], - infestation: ["7M", "6M"], - lightscreen: ["7M", "7L12", "6M", "6L1"], - poisonpowder: ["7L1", "6L1"], - powder: ["7L55", "7L1", "6L1"], + hyperbeam: ["7M", "7L63", "6M", "6L63"], + hypervoice: ["7T", "6T"], + icebeam: ["7M", "7L56", "6M", "6L56"], + icywind: ["7T", "7L13", "6T", "6L13"], + irondefense: ["7T", "6T"], + ironhead: ["7T", "6T"], + irontail: ["7T", "6T"], + lightscreen: ["7M", "7L50", "6M", "6L50"], + magnetrise: ["7T", "6T"], + mist: ["7L18", "6L18"], + naturepower: ["7M", "7L43", "6M", "6L43"], + outrage: ["7T", "6T"], + powdersnow: ["7L1", "6L1"], protect: ["7M", "6M"], - psybeam: ["7L17", "6L17"], psychic: ["7M", "6M"], psychup: ["7M", "6M"], - quiverdance: ["7L45", "6L45"], raindance: ["7M", "6M"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], return: ["7M", "6M"], - roost: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "7L41", "6M", "6L41"], + roar: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rockthrow: ["7L10", "7L1", "6L10"], + rocktomb: ["7M", "6M"], + round: ["7M", "7L30", "6M", "6L30"], + safeguard: ["7M", "6M"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], - signalbeam: ["6T"], - sleeppowder: ["7L1", "6L1"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - strugglebug: ["7L1", "6M", "6L12"], - stunspore: ["7L1", "6L1"], + snore: ["7T", "6T"], + stealthrock: ["7T", "6T"], + stoneedge: ["7M", "6M"], substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - supersonic: ["7L21", "6L21"], swagger: ["7M", "6M"], - tailwind: ["6T"], - thief: ["7M", "6M"], + takedown: ["7L15", "6L15"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "7L5", "7L1", "6M", "6L5"], toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - }}, - vivillonfancy: {learnset: { - acrobatics: ["6M"], - aerialace: ["6M"], - aromatherapy: ["6L31"], - attract: ["6M"], - bugbite: ["6T"], - bugbuzz: ["6L35"], - calmmind: ["6M"], - confide: ["6M"], - doubleteam: ["6M"], - drainingkiss: ["6L25"], - dreameater: ["6M"], - electroweb: ["6T"], - endeavor: ["6T"], - energyball: ["6M"], - facade: ["6M"], - flash: ["6M"], - frustration: ["6M"], - gigadrain: ["6T"], - gigaimpact: ["6M"], - gust: ["6L1", "6S0"], - hiddenpower: ["6M"], - holdhands: ["6S0"], - hurricane: ["6L50"], - hyperbeam: ["6M"], - infestation: ["6M"], - lightscreen: ["6M", "6L1", "6S0"], - poisonpowder: ["6L1"], - powder: ["6L1"], - protect: ["6M"], - psybeam: ["6L17"], - psychic: ["6M"], - psychup: ["6M"], - quiverdance: ["6L45"], - raindance: ["6M"], - rest: ["6M"], - return: ["6M"], - roost: ["6M"], - round: ["6M"], - safeguard: ["6M", "6L41"], - secretpower: ["6M"], - signalbeam: ["6T"], - sleeppowder: ["6L1"], - sleeptalk: ["6M"], - snore: ["6T"], - solarbeam: ["6M"], - strugglebug: ["6M", "6L12", "6S0"], - stunspore: ["6L1"], - substitute: ["6M"], - sunnyday: ["6M"], - supersonic: ["6L21"], - swagger: ["6M"], - tailwind: ["6T"], - thief: ["6M"], - toxic: ["6M"], - uturn: ["6M"], - }}, - vivillonpokeball: {learnset: { - acrobatics: ["6M"], - aerialace: ["6M"], - aromatherapy: ["6L31"], - attract: ["6M"], - bugbite: ["6T"], - bugbuzz: ["6L35"], - calmmind: ["6M"], - confide: ["6M"], - doubleteam: ["6M"], - drainingkiss: ["6L25"], - dreameater: ["6M"], - electroweb: ["6T"], - endeavor: ["6T"], - energyball: ["6M"], - facade: ["6M"], - flash: ["6M"], - frustration: ["6M"], - gigadrain: ["6T"], - gigaimpact: ["6M"], - gust: ["6L1", "6S0"], - hiddenpower: ["6M"], - hurricane: ["6L50"], - hyperbeam: ["6M"], - infestation: ["6M"], - lightscreen: ["6M", "6L1", "6S0"], - poisonpowder: ["6L1"], - powder: ["6L1"], - protect: ["6M"], - psybeam: ["6L17"], - psychic: ["6M"], - psychup: ["6M"], - quiverdance: ["6L45"], - raindance: ["6M"], - rest: ["6M"], - return: ["6M"], - roost: ["6M"], - round: ["6M"], - safeguard: ["6M", "6L41"], - secretpower: ["6M"], - signalbeam: ["6T"], - sleeppowder: ["6L1"], - sleeptalk: ["6M"], - snore: ["6T"], - solarbeam: ["6M"], - strugglebug: ["6M", "6L12", "6S0"], - stunspore: ["6L1", "6S0"], - substitute: ["6M"], - sunnyday: ["6M"], - supersonic: ["6L21"], - swagger: ["6M"], - tailwind: ["6T"], - thief: ["6M"], - toxic: ["6M"], - uturn: ["6M"], + waterpulse: ["7T", "6T"], + zenheadbutt: ["7T", "6T"], }}, - litleo: {learnset: { + sylveon: {learnset: { attract: ["7M", "6M"], - bulldoze: ["7M", "6M"], + babydolleyes: ["7L9", "6S1"], + calmmind: ["7M", "7S2", "6M"], + celebrate: ["6S0"], confide: ["7M", "6M"], - crunch: ["7L39", "6L39"], - darkpulse: ["7M", "6M"], + covet: ["7T", "6T"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], dig: ["6M"], + disarmingvoice: ["7L1", "6L1", "6S1"], doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "7L33", "6M", "6L33"], - ember: ["7L5", "6L5"], - endeavor: ["7L28", "6T", "6L28"], - entrainment: ["7E", "6E"], + drainingkiss: ["7L20", "7S2", "6L20", "6S1"], + echoedvoice: ["7M", "6M"], facade: ["7M", "6M"], - fireblast: ["7M", "6M"], - firefang: ["7L23", "6L23"], - firespin: ["7E", "6E"], - flamecharge: ["7M", "6M"], - flamethrower: ["7M", "7L36", "6M", "6L36"], - flareblitz: ["7E"], + fairywind: ["7L1", "6L9", "6S0"], + flash: ["6M"], frustration: ["7M", "6M"], - headbutt: ["7L11", "6L11"], - heatwave: ["6T"], - helpinghand: ["6T"], + gigaimpact: ["7M", "6M"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "7L1", "6T", "6L1", "6S0"], hiddenpower: ["7M", "6M"], - hypervoice: ["7L43", "6T", "6L43"], - incinerate: ["7L46", "6M", "6L46"], - irontail: ["6T"], - leer: ["7L1", "6L1"], - nobleroar: ["7L15", "6L15"], - overheat: ["7M", "7L50", "6M", "6L50"], - payback: ["7M", "6M"], + hyperbeam: ["7M", "7S2", "6M"], + hypervoice: ["7T", "6T"], + irontail: ["7T", "6T"], + laserfocus: ["7T"], + lastresort: ["7T", "7L41", "6T", "6L41"], + lightscreen: ["7M", "7L33", "6M", "6L33"], + magiccoat: ["7T", "6T"], + mistyterrain: ["7L29", "6L29"], + moonblast: ["7L37", "6L37"], protect: ["7M", "6M"], + psychup: ["7M", "7L45", "6M", "6L45"], + psyshock: ["7M", "7S2", "6M"], + quickattack: ["7L13", "6L13", "6S1"], raindance: ["7M", "6M"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], - rocksmash: ["6M"], round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandattack: ["7L5", "6L5", "6S0"], secretpower: ["6M"], + shadowball: ["7M", "6M"], + skillswap: ["7T", "7L25", "6T", "6L25"], sleeptalk: ["7M", "6M"], - snarl: ["7M", "6M"], - snatch: ["7E", "6T", "6E"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - strength: ["6M"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], + swift: ["7L17", "6L17"], tackle: ["7L1", "6L1"], - takedown: ["7L20", "6L20"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + telekinesis: ["7T"], toxic: ["7M", "6M"], - wildcharge: ["7M", "6M"], - willowisp: ["7M", "6M"], - workup: ["7M", "7L8", "6L8"], - yawn: ["7E", "6E"], + workup: ["7M"], }}, - pyroar: {learnset: { + hawlucha: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "7L16", "6M", "6L16"], + agility: ["7E", "6E"], + allyswitch: ["7T", "7E", "6E"], attract: ["7M", "6M"], - bounce: ["6T"], - bulldoze: ["7M", "6M"], + batonpass: ["7E", "6E"], + bounce: ["7T", "7L32", "6T", "6L32"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], confide: ["7M", "6M"], - crunch: ["7L42", "6L42"], - darkpulse: ["7M", "6M", "6S0"], + cut: ["6M"], + defog: ["7T"], + detect: ["7L1", "6L1"], dig: ["6M"], doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "7L33", "6M", "6L33"], - ember: ["7L5", "7L1", "6L5"], - endeavor: ["7L28", "6T", "6L28"], + drainpunch: ["7T", "6T"], + dualchop: ["7T", "6T"], + encore: ["7L20", "6L20"], + endeavor: ["7T", "7L36", "6T", "6L36"], + entrainment: ["7E", "6E"], facade: ["7M", "6M"], - fireblast: ["7M", "6M", "6S0"], - firefang: ["7L23", "6L23"], - flamecharge: ["7M", "6M"], - flamethrower: ["7M", "7L38", "6M", "6L38"], + falseswipe: ["7M", "6M"], + featherdance: ["7L40", "6L40"], + feint: ["7E"], + firepunch: ["7T", "6T"], + fling: ["7M", "7L24", "6M", "6L24"], + fly: ["7M", "6M"], + flyingpress: ["7L28", "6L28"], + focusblast: ["7M", "6M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M"], gigaimpact: ["7M", "6M"], - headbutt: ["7L11", "6L11"], - heatwave: ["6T"], - helpinghand: ["6T"], + grassknot: ["7M", "6M"], + helpinghand: ["7T", "6T"], hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "7L1", "6M", "6L1"], - hypervoice: ["7L48", "6T", "6L48", "6S0"], - incinerate: ["7L51", "6M", "6L51"], - irontail: ["6T"], - leer: ["7L1", "6L1"], - nobleroar: ["7L15", "6L15"], - overheat: ["7M", "7L57", "6M", "6L57"], + highjumpkick: ["7L44", "6L44"], + honeclaws: ["7L1", "6M", "6L1"], + ironhead: ["7T", "6T"], + karatechop: ["7L4", "6L4"], + laserfocus: ["7T"], + lastresort: ["7T", "6T"], + lowkick: ["7T", "6T"], + lowsweep: ["7M", "6M"], + mefirst: ["7E", "6E"], + mudsport: ["7E", "6E"], payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], protect: ["7M", "6M"], + quickguard: ["7E", "6E"], raindance: ["7M", "6M"], rest: ["7M", "6M"], retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], + rockslide: ["7M", "6M"], rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roost: ["7M", "7L12", "6M", "6L12"], round: ["7M", "6M"], secretpower: ["6M"], + skyattack: ["7T", "7L48", "6T", "6L48"], + skydrop: ["7M", "7L55", "6M", "6L55"], sleeptalk: ["7M", "6M"], - snarl: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - solarbeam: ["7M", "6M"], + snore: ["7T", "6T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M"], strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], + superpower: ["7T", "6T"], swagger: ["7M", "6M"], + swordsdance: ["7M", "7L60", "6M", "6L60"], tackle: ["7L1", "6L1"], - takedown: ["7L20", "6L20"], + tailwind: ["7T", "6T"], taunt: ["7M", "6M"], - thief: ["7M", "6M"], + throatchop: ["7T"], + thunderpunch: ["7T", "6T"], + torment: ["7M", "6M"], toxic: ["7M", "6M"], - wildcharge: ["7M", "6M"], - willowisp: ["7M", "6M"], - workup: ["7M", "7L8", "7L1", "6L8"], + uturn: ["7M", "6M"], + wingattack: ["7L8", "6L8"], + workup: ["7M"], + xscissor: ["7M", "6M"], + zenheadbutt: ["7T", "6T"], }}, - flabebe: {learnset: { - afteryou: ["6T"], - aromatherapy: ["7L33", "6L33"], + dedenne: {learnset: { + aerialace: ["7M", "6M"], + allyswitch: ["7T"], attract: ["7M", "6M"], - calmmind: ["7M", "6M"], - camouflage: ["7E", "6E"], - captivate: ["7E", "6E"], + charge: ["7L11", "6L11"], + chargebeam: ["7M", "7L34", "6M", "6L34"], + charm: ["7L14", "6L14"], confide: ["7M", "6M"], - copycat: ["7E", "6E"], - covet: ["6T"], - dazzlinggleam: ["7M", "6M"], + covet: ["7T", "7E", "6T", "6E"], + cut: ["6M"], + dig: ["6M"], + discharge: ["7L50", "6L50"], doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + eerieimpulse: ["7E", "6E"], + electroweb: ["7T", "6T"], + entrainment: ["7L39", "6L39"], facade: ["7M", "6M"], - fairywind: ["7L6", "6L6"], flash: ["6M"], + fling: ["7M", "6M"], frustration: ["7M", "6M"], - gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], grassknot: ["7M", "6M"], - grassyterrain: ["7L24", "6L24"], - healbell: ["6T"], - helpinghand: ["6T"], + helpinghand: ["7T", "7E", "6T", "6E"], hiddenpower: ["7M", "6M"], - luckychant: ["7L10", "6L10"], - magicalleaf: ["7L22", "6L22"], - magiccoat: ["6T"], - mistyterrain: ["7L37", "6L37"], - moonblast: ["7L41", "6L41"], - naturepower: ["7M", "6M"], - petalblizzard: ["7L28", "6L28"], - petaldance: ["7L45", "6L45"], + irontail: ["7T", "6T"], + lastresort: ["7T", "6T"], + magnetrise: ["7T", "6T"], + naturalgift: ["7E", "6E"], + nuzzle: ["7L20", "6L20"], + paraboliccharge: ["7L17", "6L17"], + playrough: ["7L42", "6L42"], protect: ["7M", "6M"], - psychic: ["7M", "6M"], raindance: ["7M", "6M"], - razorleaf: ["7L15", "6L15"], - rest: ["7M", "6M"], + recycle: ["7T", "6T"], + rest: ["7M", "7L30", "6M", "6L30"], + retaliate: ["6M"], return: ["7M", "6M"], round: ["7M", "6M"], - safeguard: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["6T"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "7L48", "6M", "6L48"], + snore: ["7T", "7L31", "6T", "6L31"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], + superfang: ["7T", "6T"], swagger: ["7M", "6M"], - synthesis: ["6T"], tackle: ["7L1", "6L1"], + tailwhip: ["7L1", "6L1"], + tearfullook: ["7E"], + thief: ["7M", "6M"], + thunder: ["7M", "7L45", "6M", "6L45"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["7T", "6T"], + thundershock: ["7L7", "6L7"], + thunderwave: ["7M", "7L23", "6M", "6L23"], toxic: ["7M", "6M"], - vinewhip: ["7L1", "6L1"], - wish: ["7L20", "6L20"], - worryseed: ["6T"], + uturn: ["7M", "6M"], + voltswitch: ["7M", "7L26", "6M", "6L26"], + wildcharge: ["7M", "6M"], }}, - floette: {learnset: { - afteryou: ["6T"], - aromatherapy: ["7L38", "6L38"], - attract: ["7M", "6M"], + carbink: {learnset: { + afteryou: ["7T", "6T"], + allyswitch: ["7T"], + ancientpower: ["7L31", "6L31"], calmmind: ["7M", "6M"], confide: ["7M", "6M"], - covet: ["6T"], + covet: ["7T", "6T"], dazzlinggleam: ["7M", "6M"], doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + earthpower: ["7T", "6T"], + explosion: ["7M", "6M"], facade: ["7M", "6M"], - fairywind: ["7L6", "7L1", "6L6"], + flail: ["7L35", "6L35"], flash: ["6M"], frustration: ["7M", "6M"], - gigadrain: ["6T"], - grassknot: ["7M", "6M"], - grassyterrain: ["7L27", "6L27"], - healbell: ["6T"], - helpinghand: ["6T"], + gravity: ["7T", "6T"], + guardsplit: ["7L27", "6L27"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], hiddenpower: ["7M", "6M"], - luckychant: ["7L10", "6L10"], - magicalleaf: ["7L25", "6L25"], - magiccoat: ["6T"], - mistyterrain: ["7L43", "6L43"], - moonblast: ["7L46", "6L46"], + irondefense: ["7T", "6T"], + lightscreen: ["7M", "7L60", "6M", "6L60"], + magiccoat: ["7T", "6T"], + magnetrise: ["7T", "6T"], + moonblast: ["7L50", "6L50"], naturepower: ["7M", "6M"], - petalblizzard: ["7L33", "6L33"], - petaldance: ["7L51", "6L51"], + powergem: ["7L46", "6L46"], protect: ["7M", "6M"], psychic: ["7M", "6M"], - raindance: ["7M", "6M"], - razorleaf: ["7L15", "6L15"], + psychup: ["7M", "6M"], + reflect: ["7M", "7L18", "6M", "6L18"], rest: ["7M", "6M"], return: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rockthrow: ["7L5", "6L5"], + rocktomb: ["7M", "6M"], round: ["7M", "6M"], - safeguard: ["7M", "6M"], + safeguard: ["7M", "7L70", "6M", "6L70"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["6T"], + sharpen: ["7L8", "6L8"], + skillswap: ["7T", "7L40", "6T", "6L40"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "7L58", "6M", "6L58"], + smackdown: ["7M", "7L12", "6M", "6L12"], + snore: ["7T", "6T"], + stealthrock: ["7T", "7L21", "6T", "6L21"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L49", "6M", "6L49"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - synthesis: ["6T"], tackle: ["7L1", "6L1"], + telekinesis: ["7T"], toxic: ["7M", "6M"], - vinewhip: ["7L1", "6L1"], - wish: ["7L20", "6L20"], - worryseed: ["6T"], - }}, - floetteeternal: {learnset: { - aromatherapy: ["6L38"], - attract: ["6M"], - calmmind: ["6M"], - confide: ["6M"], - dazzlinggleam: ["6M"], - doubleteam: ["6M"], - echoedvoice: ["6M"], - energyball: ["6M"], - facade: ["6M"], - fairywind: ["6L6"], - flash: ["6M"], - frustration: ["6M"], - grassknot: ["6M"], - grassyterrain: ["6L27"], - hiddenpower: ["6M"], - lightofruin: ["6L50"], - luckychant: ["6L10"], - magicalleaf: ["6L25"], - mistyterrain: ["6L43"], - moonblast: ["6L46"], - naturepower: ["6M"], - petalblizzard: ["6L33"], - petaldance: ["6L51"], - protect: ["6M"], - psychic: ["6M"], - raindance: ["6M"], - razorleaf: ["6L15"], - rest: ["6M"], - return: ["6M"], - round: ["6M"], - safeguard: ["6M"], - secretpower: ["6M"], - sleeptalk: ["6M"], - solarbeam: ["6M", "6L58"], - substitute: ["6M"], - sunnyday: ["6M"], - swagger: ["6M"], - tackle: ["6L1"], - toxic: ["6M"], - vinewhip: ["6L1"], - wish: ["6L20"], + trickroom: ["7M", "6M"], + wonderroom: ["7T", "6T"], }}, - florges: {learnset: { - afteryou: ["6T"], - aromatherapy: ["7L1", "6L1"], + goomy: {learnset: { + absorb: ["7L5", "6L5"], + acidarmor: ["7E", "6E"], attract: ["7M", "6M"], - calmmind: ["7M", "6M"], + bide: ["7L13", "6L13"], + bodyslam: ["7L32", "7S0", "6L32"], + bubble: ["7L1", "6L1"], confide: ["7M", "6M"], - covet: ["6T"], - dazzlinggleam: ["7M", "6M"], - disarmingvoice: ["7L1", "6L1"], + counter: ["7E", "7S0", "6E"], + curse: ["7E", "6E"], doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L18", "6L18"], + dragonpulse: ["7T", "7L42", "7S0", "6T", "6L42"], + endure: ["7E", "6E"], facade: ["7M", "6M"], - flash: ["6M"], - flowershield: ["7L1", "6L1"], + flail: ["7L28", "6L28"], frustration: ["7M", "6M"], - gigadrain: ["6T"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "7L1", "6M", "6L1"], - grassyterrain: ["7L1", "6L1"], - healbell: ["6T"], - helpinghand: ["6T"], hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - lightscreen: ["7M", "6M"], - luckychant: ["7L1", "6L1"], - magicalleaf: ["7L1", "6L1"], - magiccoat: ["6T"], - mistyterrain: ["7L1", "6L1"], - moonblast: ["7L1", "6L1"], - naturepower: ["7M", "6M"], - petalblizzard: ["7L1", "6L1"], - petaldance: ["7L1", "6L1"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - raindance: ["7M", "6M"], + infestation: ["7M", "6M"], + irontail: ["7T", "7E", "6T", "6E"], + muddywater: ["7L38", "6L38"], + outrage: ["7T", "6T"], + poisontail: ["7E", "6E"], + protect: ["7M", "7L9", "6M", "6L9"], + raindance: ["7M", "7L25", "6M", "6L25"], rest: ["7M", "6M"], return: ["7M", "6M"], + rockslide: ["7M", "6M"], round: ["7M", "6M"], - safeguard: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["6T"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - synthesis: ["6T"], + tackle: ["7L1", "6L1"], + thunderbolt: ["7M", "6M"], toxic: ["7M", "6M"], - wish: ["7L1", "6L1"], - worryseed: ["6T"], + waterpulse: ["7T", "6T"], }}, - skiddo: {learnset: { + sliggoo: {learnset: { + absorb: ["7L5", "7L1", "6L5"], attract: ["7M", "6M"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "7L34", "6M", "6L34"], - bulldoze: ["7M", "7L26", "6M", "6L26"], - confide: ["7M", "6M"], - defensecurl: ["7E", "6E"], - dig: ["6M"], - doubleedge: ["7L38", "6L38"], - doubleteam: ["7M", "6M"], - energyball: ["7M", "6M"], - facade: ["7M", "6M"], - frustration: ["7M", "6M"], - gigadrain: ["6T"], - grassknot: ["7M", "6M"], - growth: ["7L1", "6L1"], - hiddenpower: ["7M", "6M"], - hornleech: ["7L42", "6L42"], - irontail: ["6T"], - leafblade: ["7L45", "6L45"], - leechseed: ["7L12", "6L12"], - milkdrink: ["7L50", "7E", "6L50", "6E"], - naturepower: ["7M", "6M"], - payback: ["7M", "6M"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - razorleaf: ["7L13", "6L13"], + bide: ["7L13", "6L13"], + blizzard: ["7M", "6M"], + bodyslam: ["7L32", "6L32"], + bubble: ["7L1", "6L1"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L18", "6L18"], + dragonpulse: ["7T", "7L47", "6T", "6L47"], + facade: ["7M", "6M"], + flail: ["7L28", "6L28"], + frustration: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + icebeam: ["7M", "6M"], + infestation: ["7M", "6M"], + irontail: ["7T", "6T"], + muddywater: ["7L38", "6L38"], + outrage: ["7T", "6T"], + protect: ["7M", "7L9", "6M", "6L9"], + raindance: ["7M", "7L25", "6M", "6L25"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rollout: ["7E", "6E"], round: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["7L30", "6T", "6L30"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - strength: ["6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - surf: ["7M", "6M"], swagger: ["7M", "6M"], - synthesis: ["7L20", "6T", "6L20"], tackle: ["7L1", "6L1"], - tailwhip: ["7L9", "6L9"], - takedown: ["7L22", "6L22"], + thunderbolt: ["7M", "6M"], toxic: ["7M", "6M"], - vinewhip: ["7L7", "6L7"], - wildcharge: ["7M", "6M"], - workup: ["7M"], - worryseed: ["7L16", "6T", "6L16"], - zenheadbutt: ["6T"], + waterpulse: ["7T", "6T"], }}, - gogoat: {learnset: { - aerialace: ["7M", "7L1", "6M", "6L1"], + goodra: {learnset: { + absorb: ["7L5", "7L1", "6L5"], + aquatail: ["7T", "7L1", "6T", "6L50"], attract: ["7M", "6M"], - bounce: ["6T"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "7L34", "6M", "6L34"], - bulldoze: ["7M", "7L26", "6M", "6L26"], + bide: ["7L13", "6L13"], + blizzard: ["7M", "6M"], + bodyslam: ["7L32", "6L32"], + brutalswing: ["7M"], + bubble: ["7L1", "6L1"], + bulldoze: ["7M", "6M"], confide: ["7M", "6M"], - dig: ["6M"], - doubleedge: ["7L40", "6L40"], doubleteam: ["7M", "6M"], - earthquake: ["7M", "7L1", "6M", "6L60"], - energyball: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L18", "6L18"], + dragonpulse: ["7T", "7L47", "6T", "6L47"], + dragontail: ["7M", "6M"], + earthquake: ["7M", "6M"], facade: ["7M", "6M"], + feint: ["7L1", "6L1"], + fireblast: ["7M", "6M"], + firepunch: ["7T", "6T"], + flail: ["7L28", "6L28"], + flamethrower: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["7T", "6T"], frustration: ["7M", "6M"], - gigadrain: ["6T"], gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - growth: ["7L1", "6L1"], + hail: ["7M", "6M"], hiddenpower: ["7M", "6M"], - hornleech: ["7L47", "6L47"], hyperbeam: ["7M", "6M"], - irontail: ["6T"], - leafblade: ["7L55", "6L55"], - leechseed: ["7L12", "6L12"], - milkdrink: ["7L58", "6L58"], - naturepower: ["7M", "6M"], - payback: ["7M", "6M"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - razorleaf: ["7L13", "6L13"], + icebeam: ["7M", "6M"], + incinerate: ["6M"], + infestation: ["7M", "6M"], + irontail: ["7T", "6T"], + laserfocus: ["7T"], + muddywater: ["7L38", "6L38"], + outrage: ["7T", "7L55", "7L1", "6T", "6L1"], + powerwhip: ["7L50", "6L55"], + protect: ["7M", "7L9", "7L1", "6M", "6L9"], + raindance: ["7M", "7L25", "6M", "6L25"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], rockslide: ["7M", "6M"], rocksmash: ["6M"], round: ["7M", "6M"], secretpower: ["6M"], - seedbomb: ["7L30", "6T", "6L30"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["7T", "6T"], + stompingtantrum: ["7T"], strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - superpower: ["6T"], - surf: ["7M", "6M"], + superpower: ["7T", "6T"], swagger: ["7M", "6M"], - synthesis: ["7L20", "6T", "6L20"], tackle: ["7L1", "6L1"], - tailwhip: ["7L9", "7L1", "6L9"], - takedown: ["7L22", "6L22"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["7T", "6T"], toxic: ["7M", "6M"], - vinewhip: ["7L7", "7L1", "6L7"], - wildcharge: ["7M", "6M"], - workup: ["7M"], - worryseed: ["7L16", "6T", "6L16"], - zenheadbutt: ["6T"], + waterpulse: ["7T", "6T"], }}, - pancham: {learnset: { - aerialace: ["7M", "6M"], - armthrust: ["7L7", "6L7", "6S0"], + klefki: {learnset: { + astonish: ["7L8", "6L8"], attract: ["7M", "6M"], - block: ["6T"], - bodyslam: ["7L33", "6L33"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "6M"], - bulldoze: ["7M", "6M"], - circlethrow: ["7L25", "6L25"], - cometpunch: ["7L15", "6L15"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - covet: ["6T"], - crunch: ["7L39", "6L39"], + covet: ["7T", "6T"], + craftyshield: ["7L23", "6L23"], cut: ["6M"], - darkpulse: ["7M", "6M", "6S0"], - dig: ["6M"], + dazzlinggleam: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M"], - drainpunch: ["6T"], - dualchop: ["6T"], - echoedvoice: ["7M", "6M"], - endeavor: ["6T"], - entrainment: ["7L42", "6L42"], + drainingkiss: ["7L18", "6L18"], facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - firepunch: ["6T"], - fling: ["7M", "6M"], - focuspunch: ["6T"], - foulplay: ["7E", "6T", "6E"], + fairylock: ["7L1", "6L1"], + fairywind: ["7L5", "6L5"], + flashcannon: ["7M", "6M"], + foulplay: ["7T", "7L27", "6T", "6L27"], frustration: ["7M", "6M"], - grassknot: ["7M", "6M"], - gunkshot: ["6T"], - helpinghand: ["6T"], + gigaimpact: ["7M", "6M"], + healblock: ["7L50", "6L50"], hiddenpower: ["7M", "6M"], - hypervoice: ["6T"], - icepunch: ["6T"], - ironhead: ["6T"], - karatechop: ["7L12", "6L12"], - knockoff: ["6T"], - leer: ["7L1", "6L1"], - lowkick: ["6T"], - lowsweep: ["7M", "6M"], - mefirst: ["7E", "6E"], - partingshot: ["7L45", "6L45"], - payback: ["7M", "6M"], - powertrip: ["7E"], - poweruppunch: ["6M"], + hyperbeam: ["7M", "6M"], + imprison: ["7L36", "6L36"], + irondefense: ["7T", "7E", "6T", "6E"], + lastresort: ["7T", "6T"], + lightscreen: ["7M", "6M"], + lockon: ["7E", "6E"], + magiccoat: ["7T", "6T"], + magicroom: ["7T", "7L44", "6T", "6L44"], + magnetrise: ["7T", "6T"], + metalsound: ["7L12", "6L12"], + mirrorshot: ["7L34", "6L34"], + playrough: ["7L43", "6L43"], protect: ["7M", "6M"], - quash: ["7E", "6E"], - quickguard: ["7E", "6E"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + psyshock: ["7M", "6M"], raindance: ["7M", "6M"], + recycle: ["7T", "7L40", "6T", "6L40"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M"], - skyuppercut: ["7L48", "6L48"], - slash: ["7L20", "6L20"], sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - spite: ["6T"], - stoneedge: ["7M", "6M", "6S0"], - stormthrow: ["7E", "6E"], - strength: ["6M"], + snore: ["7T", "6T"], + spikes: ["7L15", "6L15"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - superpower: ["6T"], - surf: ["7M", "6M"], swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], + switcheroo: ["7E", "6E"], tackle: ["7L1", "6L1"], - thunderpunch: ["6T"], - torment: ["7M", "6M"], + thief: ["7M", "7E", "6M", "6E"], + thunderwave: ["7M", "6M"], + torment: ["7M", "7L32", "6M", "6L32"], toxic: ["7M", "6M"], - uproar: ["6T"], - vitalthrow: ["7L27", "6L27"], - workup: ["7M", "7L10", "6L10"], - zenheadbutt: ["6T"], }}, - pangoro: {learnset: { - aerialace: ["7M", "6M"], - armthrust: ["7L7", "7L1", "6L7"], + phantump: {learnset: { + allyswitch: ["7T"], + astonish: ["7L5", "6L5"], attract: ["7M", "6M"], - block: ["6T"], - bodyslam: ["7L35", "6L35"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "6M"], + bestow: ["7E", "6E"], bulldoze: ["7M", "6M"], - bulletpunch: ["7L1"], - circlethrow: ["7L25", "6L25"], - cometpunch: ["7L15", "6L15"], confide: ["7M", "6M"], - covet: ["6T"], - crunch: ["7L42", "6L42"], + confuseray: ["7L1", "6L1"], + curse: ["7L28", "6L28"], cut: ["6M"], darkpulse: ["7M", "6M"], + destinybond: ["7L39", "6L39"], dig: ["6M"], doubleteam: ["7M", "6M"], - dragonclaw: ["7M", "6M"], - drainpunch: ["6T"], - dualchop: ["6T"], - earthquake: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - embargo: ["7M", "6M"], - endeavor: ["6T"], - entrainment: ["7L45", "7L1", "6L1"], + dreameater: ["7M", "6M"], + energyball: ["7M", "6M"], facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - firepunch: ["6T"], - fling: ["7M", "6M"], - focusblast: ["7M", "6M"], - focuspunch: ["6T"], - foulplay: ["6T"], + feintattack: ["7L19", "6L19"], + forestscurse: ["7L35", "6L35"], + foulplay: ["7T", "6T"], frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], + gigadrain: ["7T", "6T"], grassknot: ["7M", "6M"], - gunkshot: ["6T"], - hammerarm: ["7L70", "7L1", "6L1"], - helpinghand: ["6T"], + growth: ["7L8", "6L8"], + grudge: ["7E", "6E"], hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - hyperbeam: ["7M", "6M"], - hypervoice: ["6T"], - icepunch: ["6T"], - infestation: ["7M", "6M"], - ironhead: ["6T"], - karatechop: ["7L12", "6L12"], - knockoff: ["6T"], - leer: ["7L1", "6L1"], - lowkick: ["6T"], - lowsweep: ["7M", "7L57", "7L1", "6M", "6L70"], - outrage: ["6T"], - partingshot: ["7L48", "6L48"], - payback: ["7M", "6M"], + hornleech: ["7L54", "6L54"], + imprison: ["7E", "6E"], + ingrain: ["7L13", "6L13"], + leechseed: ["7L23", "6L23"], + magiccoat: ["7T", "6T"], + naturepower: ["7M", "6M"], + painsplit: ["7T", "6T"], + phantomforce: ["7L45", "6L45"], poisonjab: ["7M", "6M"], - poweruppunch: ["6M"], + poweruppunch: ["7E"], protect: ["7M", "6M"], - quash: ["7M", "6M"], - raindance: ["7M", "6M"], + psychic: ["7M", "6M"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - roar: ["7M", "6M"], rockslide: ["7M", "6M"], rocksmash: ["6M"], - rocktomb: ["7M", "6M"], + roleplay: ["7T", "6T"], round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], + seedbomb: ["7T", "6T"], + shadowball: ["7M", "6M"], shadowclaw: ["7M", "6M"], - skyuppercut: ["7L52", "6L52"], - slash: ["7L20", "6L20"], + skillswap: ["7T", "6T"], sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - snarl: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - spite: ["6T"], - stoneedge: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + spite: ["7T", "6T"], strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - superpower: ["6T"], - surf: ["7M", "6M"], swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], tackle: ["7L1", "6L1"], - taunt: ["7M", "7L65", "6M", "6L65"], + telekinesis: ["7T"], thief: ["7M", "6M"], - thunderpunch: ["6T"], - torment: ["7M", "6M"], toxic: ["7M", "6M"], - uproar: ["6T"], - vitalthrow: ["7L27", "6L27"], - workup: ["7M", "7L10", "7L1", "6L10"], - xscissor: ["7M", "6M"], - zenheadbutt: ["6T"], + trick: ["7T", "6T"], + trickroom: ["7M", "6M"], + venomdrench: ["7E", "6E"], + willowisp: ["7M", "7L31", "6M", "6L31"], + woodhammer: ["7L49", "6L49"], + worryseed: ["7T", "6T"], }}, - furfrou: {learnset: { + trevenant: {learnset: { + allyswitch: ["7T"], + astonish: ["7L5", "7L1", "6L5"], attract: ["7M", "6M"], - babydolleyes: ["7L9", "6L9"], - bite: ["7L22", "6L22"], - captivate: ["7E", "6E"], - chargebeam: ["7M", "6M"], - charm: ["7L38", "6L38"], + block: ["7T", "6T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M"], + calmmind: ["7M", "6M"], confide: ["7M", "6M"], - cottonguard: ["7L48", "6L48"], + confuseray: ["7L1", "6L1"], + curse: ["7L28", "6L28"], + cut: ["6M"], darkpulse: ["7M", "6M"], + destinybond: ["7L39", "6L39"], dig: ["6M"], doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - endeavor: ["6T"], + drainpunch: ["7T", "6T"], + dreameater: ["7M", "6M"], + earthquake: ["7M", "6M"], + energyball: ["7M", "6M"], facade: ["7M", "6M"], - flash: ["6M"], + feintattack: ["7L19", "6L19"], + focusblast: ["7M", "6M"], + forestscurse: ["7L35", "6L35"], + foulplay: ["7T", "6T"], frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], gigaimpact: ["7M", "6M"], grassknot: ["7M", "6M"], - growl: ["7L1", "6L1"], - headbutt: ["7L12", "6L12"], - helpinghand: ["6T"], + growth: ["7L8", "7L1", "6L8"], hiddenpower: ["7M", "6M"], - hypervoice: ["6T"], - irontail: ["6T"], - lastresort: ["6T"], - mimic: ["7E", "6E"], - odorsleuth: ["7L27", "6L27"], + honeclaws: ["6M"], + hornleech: ["7L54", "7L1", "6L1"], + hyperbeam: ["7M", "6M"], + ingrain: ["7L13", "6L13"], + leechseed: ["7L23", "6L23"], + magiccoat: ["7T", "6T"], + naturepower: ["7M", "6M"], + painsplit: ["7T", "6T"], + phantomforce: ["7L45", "6L45"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], protect: ["7M", "6M"], - raindance: ["7M", "6M"], - refresh: ["7E", "6E"], + psychic: ["7M", "6M"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], - retaliate: ["7L33", "6M", "6L33"], return: ["7M", "6M"], - roar: ["7M", "6M"], + rockslide: ["7M", "6M"], rocksmash: ["6M"], - roleplay: ["7E", "6T", "6E"], + roleplay: ["7T", "6T"], round: ["7M", "6M"], - sandattack: ["7L5", "6L5"], + safeguard: ["7M", "6M"], secretpower: ["6M"], + seedbomb: ["7T", "6T"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "7L1", "6M", "6L55"], + skillswap: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snarl: ["7M", "6M"], - snore: ["6T"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + spite: ["7T", "6T"], + strength: ["6M"], substitute: ["7M", "6M"], - suckerpunch: ["7L42", "6L42"], sunnyday: ["7M", "6M"], - surf: ["7M", "6M"], swagger: ["7M", "6M"], tackle: ["7L1", "6L1"], - tailwhip: ["7L15", "6L15"], - takedown: ["7L35", "6L35"], - thunderwave: ["7M", "6M"], + telekinesis: ["7T"], + thief: ["7M", "6M"], toxic: ["7M", "6M"], - uproar: ["6T"], - uturn: ["7M", "6M"], - wildcharge: ["7M", "6M"], - workup: ["7M", "7E", "6E"], - zenheadbutt: ["6T"], + trick: ["7T", "6T"], + trickroom: ["7M", "6M"], + willowisp: ["7M", "7L31", "6M", "6L31"], + woodhammer: ["7L49", "6L49"], + worryseed: ["7T", "6T"], + xscissor: ["7M", "6M"], }}, - espurr: {learnset: { - assist: ["7E", "6E"], + pumpkaboo: {learnset: { + allyswitch: ["7T"], + astonish: ["7L1", "6L1"], attract: ["7M", "6M"], - barrier: ["7E", "6E"], - calmmind: ["7M", "6M"], + bestow: ["7E", "6E"], + bulletseed: ["7L26", "6L26"], chargebeam: ["7M", "6M"], confide: ["7M", "6M"], - confusion: ["7L9", "6L9"], - covet: ["7L5", "6T", "6L5"], - cut: ["6M"], + confuseray: ["7L1", "6L1"], + curse: ["7E"], darkpulse: ["7M", "6M"], - disarmingvoice: ["7L22", "6L22"], + destinybond: ["7E", "6E"], + disable: ["7E", "6E"], doubleteam: ["7M", "6M"], dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], energyball: ["7M", "6M"], + explosion: ["7M", "6M"], facade: ["7M", "6M"], - fakeout: ["7L19", "6L19"], + fireblast: ["7M", "6M"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "6M"], flash: ["6M"], + foulplay: ["7T", "6T"], frustration: ["7M", "6M"], - gravity: ["6T"], - healbell: ["6T"], - helpinghand: ["6T"], + gigadrain: ["7T", "6T"], + grassknot: ["7M", "6M"], + gyroball: ["7M", "6M"], hiddenpower: ["7M", "6M"], - irontail: ["6T"], - leer: ["7L1", "6L1"], - lightscreen: ["7M", "7L13", "6M", "6L13"], - magiccoat: ["6T"], - magicroom: ["6T"], - payback: ["7M", "6M"], + incinerate: ["6M"], + leechseed: ["7L20", "6L20"], + lightscreen: ["7M", "6M"], + magiccoat: ["7T", "6T"], + naturepower: ["7M", "6M"], + painsplit: ["7T", "7L42", "6T", "6L42"], protect: ["7M", "6M"], - psybeam: ["7L17", "6L17"], psychic: ["7M", "6M"], - psychup: ["7M", "6M"], - psyshock: ["7M", "7L25", "6M", "6L25"], - raindance: ["7M", "6M"], - recycle: ["6T"], - reflect: ["7M", "6M"], + razorleaf: ["7L16", "6L16"], rest: ["7M", "6M"], return: ["7M", "6M"], - roleplay: ["6T"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["7T", "6T"], round: ["7M", "6M"], safeguard: ["7M", "6M"], - scratch: ["7L1", "6L1"], + scaryface: ["7L4", "6L4"], secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T"], + seedbomb: ["7T", "7L48", "6T", "6L48"], + shadowball: ["7M", "7L36", "6M", "6L36"], + shadowsneak: ["7L30", "6L30"], + skillswap: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], + sludgebomb: ["7M", "6M"], + solarbeam: ["7M", "6M"], + spite: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderwave: ["7M", "6M"], - torment: ["7M", "6M"], + synthesis: ["7T", "6T"], + telekinesis: ["7T"], + thief: ["7M", "6M"], toxic: ["7M", "6M"], - trick: ["7E", "6T", "6E"], + trick: ["7T", "7L1", "6T", "6L1"], + trickortreat: ["7L40", "7L23", "7L6", "6L6"], trickroom: ["7M", "6M"], - wonderroom: ["6T"], - workup: ["7M"], - yawn: ["7E", "6E"], - zenheadbutt: ["6T"], + willowisp: ["7M", "6M"], + worryseed: ["7T", "7L11", "6T", "6L11"], }}, - meowstic: {learnset: { + gourgeist: {learnset: { + allyswitch: ["7T"], + astonish: ["7L1", "6L1"], attract: ["7M", "6M"], - calmmind: ["7M", "6M"], + bulletseed: ["7L26", "6L26"], chargebeam: ["7M", "6M"], - charm: ["7L28", "6L28"], confide: ["7M", "6M"], - confusion: ["7L9", "7L1", "6L9"], - covet: ["7L5", "7L1", "6T", "6L5"], - cut: ["6M"], + confuseray: ["7L1", "6L1"], darkpulse: ["7M", "6M"], - dig: ["6M"], - disarmingvoice: ["7L22", "6L22"], doubleteam: ["7M", "6M"], dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], energyball: ["7M", "6M"], + explosion: ["7M", "7L70", "7L1", "6M", "6L1"], facade: ["7M", "6M"], - fakeout: ["7L19", "6L19"], + fireblast: ["7M", "6M"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "6M"], flash: ["6M"], + focusblast: ["7M", "6M"], + foulplay: ["7T", "6T"], frustration: ["7M", "6M"], + gigadrain: ["7T", "6T"], gigaimpact: ["7M", "6M"], - gravity: ["6T"], - healbell: ["6T"], - helpinghand: ["7L1", "6T", "6L1"], + grassknot: ["7M", "6M"], + gyroball: ["7M", "6M"], hiddenpower: ["7M", "6M"], hyperbeam: ["7M", "6M"], - imprison: ["7L45", "6L45"], - irontail: ["6T"], - leer: ["7L1", "6L1"], - lightscreen: ["7M", "7L13", "6M", "6L13"], - magiccoat: ["6T"], - magicroom: ["6T"], - meanlook: ["7L1", "6L1"], - miracleeye: ["7L31", "6L31"], - mistyterrain: ["7L50", "6L50"], - payback: ["7M", "6M"], - poweruppunch: ["6M"], + incinerate: ["6M"], + leechseed: ["7L20", "6L20"], + lightscreen: ["7M", "6M"], + magiccoat: ["7T", "6T"], + naturepower: ["7M", "6M"], + painsplit: ["7T", "7L42", "6T", "6L42"], + phantomforce: ["7L57", "7L1", "6L1"], protect: ["7M", "6M"], - psybeam: ["7L17", "6L17"], - psychic: ["7M", "7L40", "6M", "6L40"], - psychup: ["7M", "6M"], - psyshock: ["7M", "7L25", "6M", "6L25"], - quickguard: ["7L53", "7L1", "6L1"], - raindance: ["7M", "6M"], - recycle: ["6T"], - reflect: ["7M", "7L35", "6M", "6L35"], + psychic: ["7M", "6M"], + razorleaf: ["7L16", "6L16"], rest: ["7M", "6M"], return: ["7M", "6M"], - roleplay: ["7L43", "6T", "6L43"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["7T", "6T"], round: ["7M", "6M"], safeguard: ["7M", "6M"], - scratch: ["7L1", "6L1"], + scaryface: ["7L4", "7L1", "6L4"], secretpower: ["6M"], - shadowball: ["7M", "6M"], - shockwave: ["6T"], - signalbeam: ["6T"], + seedbomb: ["7T", "7L48", "6T", "6L48"], + shadowball: ["7M", "7L36", "6M", "6L36"], + shadowsneak: ["7L30", "6L30"], + skillswap: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], + sludgebomb: ["7M", "6M"], + solarbeam: ["7M", "6M"], + spite: ["7T", "6T"], substitute: ["7M", "6M"], - suckerpunch: ["7L48", "6L48"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderwave: ["7M", "6M"], - torment: ["7M", "6M"], + synthesis: ["7T", "6T"], + telekinesis: ["7T"], + thief: ["7M", "6M"], toxic: ["7M", "6M"], - trick: ["6T"], + trick: ["7T", "7L1", "6T", "6L1"], + trickortreat: ["7L63", "7L40", "7L23", "7L6", "6L6"], trickroom: ["7M", "6M"], - wonderroom: ["6T"], - workup: ["7M"], - zenheadbutt: ["6T"], + willowisp: ["7M", "6M"], + worryseed: ["7T", "7L11", "6T", "6L11"], }}, - meowsticf: {learnset: { + bergmite: {learnset: { + afteryou: ["7T", "6T"], attract: ["7M", "6M"], - calmmind: ["7M", "6M"], - chargebeam: ["7M", "7L28", "6M", "6L28"], + avalanche: ["7L39", "6L39"], + barrier: ["7E", "6E"], + bite: ["7L1", "6L1"], + blizzard: ["7M", "7L43", "6M", "6L43"], confide: ["7M", "6M"], - confusion: ["7L9", "7L1", "6L9"], - covet: ["7L5", "7L1", "6L5"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - dig: ["6M"], - disarmingvoice: ["7L22", "6L22"], + curse: ["7L22", "6L22"], + doubleedge: ["7L49", "6L49"], doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - energyball: ["7M", "6M"], - extrasensory: ["7L35", "6L35"], facade: ["7M", "6M"], - fakeout: ["7L19", "6L19"], flash: ["6M"], + flashcannon: ["7M", "6M"], + frostbreath: ["7M", "6M"], frustration: ["7M", "6M"], - futuresight: ["7L50", "6L50"], - gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - leer: ["7L1", "6L1"], - lightscreen: ["7M", "7L13", "6M", "6L13"], - magicalleaf: ["7L1", "6L1"], - mefirst: ["7L1", "6L1"], - payback: ["7M", "6M"], - poweruppunch: ["6M"], + iceball: ["7L30", "6L30"], + icebeam: ["7M", "6M"], + icefang: ["7L26", "6L26"], + icywind: ["7T", "7L10", "6T", "6L10"], + irondefense: ["7T", "6T"], + mirrorcoat: ["7E", "6E"], + mist: ["7E", "6E"], + powdersnow: ["7L5", "6L5"], protect: ["7M", "6M"], - psybeam: ["7L17", "6L17"], - psychic: ["7M", "7L40", "6M", "6L40"], - psychup: ["7M", "6M"], - psyshock: ["7M", "7L25", "6M", "6L25"], raindance: ["7M", "6M"], - reflect: ["7M", "6M"], + rapidspin: ["7L35", "6L35"], + recover: ["7L47", "7E", "6L47", "6E"], rest: ["7M", "6M"], return: ["7M", "6M"], - roleplay: ["7L43", "6L43"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], round: ["7M", "6M"], safeguard: ["7M", "6M"], - scratch: ["7L1", "6L1"], secretpower: ["6M"], - shadowball: ["7M", "7L31", "6M", "6L31"], - signalbeam: ["7L45", "6L45"], + sharpen: ["7L20", "6L20"], sleeptalk: ["7M", "6M"], - storedpower: ["7L53", "7L1", "6L1"], + snore: ["7T", "6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], substitute: ["7M", "6M"], - suckerpunch: ["7L48", "6L48"], - sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], swagger: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderwave: ["7M", "6M"], - torment: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], toxic: ["7M", "6M"], - trickroom: ["7M", "6M"], - workup: ["7M"], + waterpulse: ["7T", "6T"], }}, - honedge: {learnset: { - aerialace: ["7M", "7L22", "6M", "6L22"], - afteryou: ["6T"], + avalugg: {learnset: { + afteryou: ["7T", "6T"], attract: ["7M", "6M"], - autotomize: ["7L18", "6L18"], - brickbreak: ["7M", "6M"], - brutalswing: ["7M"], + avalanche: ["7L42", "6L42"], + bite: ["7L1", "6L1"], + blizzard: ["7M", "7L46", "6M", "6L46"], + block: ["7T", "6T"], + bodyslam: ["7L1"], + bulldoze: ["7M", "6M"], confide: ["7M", "6M"], - cut: ["6M"], - destinybond: ["7E", "6E"], + crunch: ["7L65", "7L1", "6L1"], + curse: ["7L22", "6L22"], + doubleedge: ["7L56", "6L56"], doubleteam: ["7M", "6M"], + earthquake: ["7M", "6M"], facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], + flash: ["6M"], flashcannon: ["7M", "6M"], + frostbreath: ["7M", "6M"], frustration: ["7M", "6M"], - furycutter: ["7L5", "6L5"], + gigaimpact: ["7M", "6M"], gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], hiddenpower: ["7M", "6M"], - irondefense: ["7L32", "6T", "6L32"], - ironhead: ["7L42", "6T", "6L42"], - magnetrise: ["6T"], - metalsound: ["7L8", "7E", "6L8", "6E"], - nightslash: ["7L35", "6L35"], - powertrick: ["7L39", "6L39"], + hyperbeam: ["7M", "6M"], + iceball: ["7L30", "6L30"], + icebeam: ["7M", "6M"], + icefang: ["7L26", "6L26"], + icywind: ["7T", "7L10", "6T", "6L10"], + irondefense: ["7T", "7L1", "6T", "6L1"], + ironhead: ["7T", "6T"], + powdersnow: ["7L5", "7L1", "6L5"], protect: ["7M", "6M"], - pursuit: ["7L13", "6L13"], raindance: ["7M", "6M"], - reflect: ["7M", "6M"], + rapidspin: ["7L35", "6L35"], + recover: ["7L51", "6L51"], rest: ["7M", "6M"], - retaliate: ["7L26", "6M", "6L26"], return: ["7M", "6M"], + roar: ["7M", "6M"], + rockpolish: ["7M", "6M"], rockslide: ["7M", "6M"], rocksmash: ["6M"], - sacredsword: ["7L47", "6L47"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], - shadowclaw: ["7M", "6M"], - shadowsneak: ["7L20", "7E", "6L20", "6E"], - shockwave: ["6T"], - slash: ["7L29", "6L29"], + sharpen: ["7L20", "6L20"], + skullbash: ["7L60", "7L1", "6L1"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - spite: ["6T"], + snore: ["7T", "6T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], substitute: ["7M", "6M"], + superpower: ["7T", "6T"], + surf: ["7M", "6M"], swagger: ["7M", "6M"], - swordsdance: ["7M", "7L1", "6M", "6L1"], tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], toxic: ["7M", "6M"], - wideguard: ["7E", "6E"], + waterpulse: ["7T", "6T"], + wideguard: ["7L1"], }}, - doublade: {learnset: { - aerialace: ["7M", "7L22", "6M", "6L22"], - afteryou: ["6T"], + noibat: {learnset: { + absorb: ["7L5"], + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + agility: ["7L18", "6L18"], + aircutter: ["7L23", "6L23"], + airslash: ["7L48", "6L48"], attract: ["7M", "6M"], - autotomize: ["7L18", "6L18"], + bite: ["7L13", "6L13"], brickbreak: ["7M", "6M"], - brutalswing: ["7M"], confide: ["7M", "6M"], cut: ["6M"], + darkpulse: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonpulse: ["7T", "6T"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - flashcannon: ["7M", "6M"], + fly: ["7M", "6M"], frustration: ["7M", "6M"], - furycutter: ["7L5", "7L1", "6L5"], - gyroball: ["7M", "6M"], + gust: ["7L11", "6L11"], + heatwave: ["7T", "6T"], hiddenpower: ["7M", "6M"], - irondefense: ["7L32", "6T", "6L32"], - ironhead: ["7L45", "6T", "6L45"], - magnetrise: ["6T"], - metalsound: ["7L8", "6L8"], - nightslash: ["7L36", "6L36"], - powertrick: ["7L41", "6L41"], + hurricane: ["7L58", "6L58"], + hypervoice: ["7T", "6T"], + irontail: ["7T", "6T"], + leechlife: ["7M", "6L5"], + outrage: ["7T", "7E", "6T", "6E"], protect: ["7M", "6M"], - pursuit: ["7L13", "6L13"], - raindance: ["7M", "6M"], - reflect: ["7M", "6M"], + psychic: ["7M", "6M"], + razorwind: ["7L31", "6L31"], rest: ["7M", "6M"], - retaliate: ["7L26", "6M", "6L26"], return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - sacredsword: ["7L51", "6L51"], + roost: ["7M", "7L27", "6M", "6L27"], + round: ["7M", "6M"], + screech: ["7L1", "6L1"], secretpower: ["6M"], + shadowball: ["7M", "6M"], shadowclaw: ["7M", "6M"], - shadowsneak: ["7L20", "6L20"], - shockwave: ["6T"], - slash: ["7L29", "6L29"], + skyattack: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - spite: ["6T"], + snatch: ["7T", "7E", "6T", "6E"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["7T", "7L43", "6T", "6L43"], + supersonic: ["7L1", "6L1"], swagger: ["7M", "6M"], - swordsdance: ["7M", "7L1", "6M", "6L1"], + switcheroo: ["7E", "6E"], tackle: ["7L1", "6L1"], + tailwind: ["7T", "7L35", "7E", "6T", "6L35", "6E"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], toxic: ["7M", "6M"], + uproar: ["7T", "6T"], + uturn: ["7M", "6M"], + waterpulse: ["7T", "6T"], + whirlwind: ["7L40", "6L40"], + wildcharge: ["7M", "6M"], + wingattack: ["7L16", "6L16"], + xscissor: ["7M", "6M"], }}, - aegislash: {learnset: { - aerialace: ["7M", "7L1", "6M", "6L1"], - afteryou: ["6T"], + noivern: {learnset: { + absorb: ["7L5", "7L1"], + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + agility: ["7L18", "6L18"], + aircutter: ["7L23", "6L23"], + airslash: ["7L53", "6L53"], attract: ["7M", "6M"], - autotomize: ["7L1", "6L1"], - block: ["6T"], + bite: ["7L13", "6L13"], + boomburst: ["7L75", "7L1", "6L1"], brickbreak: ["7M", "6M"], - brutalswing: ["7M"], confide: ["7M", "6M"], cut: ["6M"], + darkpulse: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonclaw: ["7M", "6M"], + dragonpulse: ["7T", "7L70", "7L1", "6T", "6L1"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - flashcannon: ["7M", "6M", "6S0"], + flamethrower: ["7M", "6M"], + fly: ["7M", "6M"], + focusblast: ["7M", "6M"], frustration: ["7M", "6M"], - furycutter: ["7L1", "6L1"], gigaimpact: ["7M", "6M"], - gyroball: ["7M", "6M"], - headsmash: ["7L1", "6L1"], + gust: ["7L11", "6L11"], + heatwave: ["7T", "6T"], hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hurricane: ["7L62", "7L1", "6L1"], hyperbeam: ["7M", "6M"], - irondefense: ["7L1", "6T", "6L1"], - ironhead: ["7L1", "6T", "6L1"], - kingsshield: ["7L1", "6L1", "6S0"], - magnetrise: ["6T"], - nightslash: ["7L1", "6L1"], - powertrick: ["7L1", "6L1"], + hypervoice: ["7T", "6T"], + irontail: ["7T", "6T"], + laserfocus: ["7T"], + leechlife: ["7M", "6L5"], + moonlight: ["7L1", "6L1"], + outrage: ["7T", "6T"], protect: ["7M", "6M"], - pursuit: ["7L1", "6L1"], - raindance: ["7M", "6M"], - reflect: ["7M", "6M"], + psychic: ["7M", "6M"], + razorwind: ["7L31", "6L31"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], + roost: ["7M", "7L27", "6M", "6L27"], round: ["7M", "6M"], - sacredsword: ["7L1", "6L1"], + screech: ["7L1", "6L1"], secretpower: ["6M"], - shadowball: ["7M", "6M", "6S0"], + shadowball: ["7M", "6M"], shadowclaw: ["7M", "6M"], - shadowsneak: ["7L1", "6L1"], - shockwave: ["6T"], - slash: ["7L1", "6L1"], + skyattack: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], - spite: ["6T"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], + superfang: ["7T", "7L43", "6T", "6L43"], + supersonic: ["7L1", "6L1"], swagger: ["7M", "6M"], - swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + tailwind: ["7T", "7L35", "6T", "6L35"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], toxic: ["7M", "6M"], - wideguard: ["6S0"], + uproar: ["7T", "6T"], + uturn: ["7M", "6M"], + waterpulse: ["7T", "6T"], + whirlwind: ["7L40", "6L40"], + wildcharge: ["7M", "6M"], + wingattack: ["7L16", "6L16"], + xscissor: ["7M", "6M"], }}, - spritzee: {learnset: { - afteryou: ["6T"], - aromatherapy: ["7L25", "6L25"], - attract: ["7M", "7L29", "6M", "6L29"], - calmmind: ["7M", "7L17", "6M", "6L17"], - captivate: ["7E", "6E"], - chargebeam: ["7M", "6M"], - charm: ["7L35", "6L35"], + xerneas: {learnset: { + aromatherapy: ["7L1", "6L1", "6S1"], + aurorabeam: ["7L10", "6L10"], + block: ["7T", "6T"], + calmmind: ["7M", "6M"], + closecombat: ["7L80", "6L80"], confide: ["7M", "6M"], - covet: ["6T"], + cut: ["6M"], dazzlinggleam: ["7M", "6M"], - disable: ["7E", "6E"], - disarmingvoice: ["7L50", "6L50"], + defog: ["7T"], doubleteam: ["7M", "6M"], - drainingkiss: ["7L21", "6L21"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "7L13", "6M", "6L13"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["7T", "6T"], facade: ["7M", "6M"], - fairywind: ["7L1", "6L1"], - flail: ["7L38", "6L38"], flash: ["6M"], flashcannon: ["7M", "6M"], + focusblast: ["7M", "7S4", "6M", "6S1"], frustration: ["7M", "6M"], - gyroball: ["7M", "6M"], - healbell: ["6T"], - helpinghand: ["6T"], + geomancy: ["7L26", "7S4", "7S3", "7S2", "6L26", "6S1", "6S0"], + gigaimpact: ["7M", "7L88", "6M", "6L88"], + grassknot: ["7M", "7S4", "6M"], + gravity: ["7T", "7L18", "6T", "6L18", "6S0"], + hail: ["7M", "6M"], + healpulse: ["7L1", "6L1"], hiddenpower: ["7M", "6M"], - lightscreen: ["7M", "6M"], - magiccoat: ["6T"], - mistyterrain: ["7L42", "6L42"], - moonblast: ["7L31", "6L31"], - odorsleuth: ["7L8", "6L8"], + hornleech: ["7L55", "7S3", "7S2", "6L55"], + hyperbeam: ["7M", "6M"], + hypervoice: ["7T", "6T"], + ingrain: ["7L1", "6L1"], + laserfocus: ["7T"], + lightscreen: ["7M", "7L5", "6M", "6L5"], + megahorn: ["7L44", "6L44", "6S0"], + mistyterrain: ["7L63", "6L63"], + moonblast: ["7L35", "7S4", "7S3", "7S2", "6L35", "6S1", "6S0"], + naturepower: ["7M", "7L72", "6M", "6L72"], + nightslash: ["7L51", "7S3", "7S2", "6L51"], + outrage: ["7T", "7L93", "6T", "6L93"], protect: ["7M", "6M"], - psychic: ["7M", "7L48", "6M", "6L48"], - psychup: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "7L59", "6M", "6L59"], + psyshock: ["7M", "6M"], raindance: ["7M", "6M"], reflect: ["7M", "6M"], - refresh: ["7E", "6E"], rest: ["7M", "6M"], return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], round: ["7M", "6M"], secretpower: ["6M"], - skillswap: ["7L44", "6T", "6L44"], sleeptalk: ["7M", "6M"], - snore: ["6T"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - sweetkiss: ["7L6", "6L6"], - sweetscent: ["7L1", "6L1"], + takedown: ["7L1", "6L1"], + thunder: ["7M", "6M"], thunderbolt: ["7M", "6M"], - torment: ["7M", "6M"], + thunderwave: ["7M", "6M"], toxic: ["7M", "6M"], - trickroom: ["7M", "6M"], - wish: ["7E", "6E"], + wonderroom: ["7T", "6T"], + zenheadbutt: ["7T", "6T"], }}, - aromatisse: {learnset: { - afteryou: ["6T"], - aromatherapy: ["7L25", "6L25"], - aromaticmist: ["7L1", "6L1"], - attract: ["7M", "7L29", "6M", "6L29"], - calmmind: ["7M", "7L17", "6M", "6L17"], - chargebeam: ["7M", "6M"], - charm: ["7L35", "6L35"], + yveltal: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + airslash: ["7L10", "6L10"], + block: ["7T", "6T"], confide: ["7M", "6M"], - covet: ["6T"], - dazzlinggleam: ["7M", "6M"], - disable: ["6S0"], - disarmingvoice: ["7L53", "6L53"], - doubleteam: ["7M", "6M"], - drainingkiss: ["7L21", "6L21"], - drainpunch: ["6T"], + cut: ["6M"], + darkpulse: ["7M", "7L44", "7S4", "7S3", "7S2", "6M", "6L44", "6S1", "6S0"], + defog: ["7T"], + disable: ["7L35", "6L35", "6S0"], + doubleteam: ["7M", "7L5", "6M", "6L5"], + dragonclaw: ["7M", "6M"], + dragonrush: ["7L63", "6L63"], dreameater: ["7M", "6M"], - echoedvoice: ["7M", "7L13", "6M", "6L13"], - endeavor: ["6T"], - energyball: ["7M", "6M"], + embargo: ["7M", "6M"], facade: ["7M", "6M"], - fairywind: ["7L1", "6L1"], - flail: ["7L38", "6L38"], - flash: ["6M"], - flashcannon: ["7M", "6M"], + fly: ["7M", "6M"], + focusblast: ["7M", "7L72", "6M", "6L72"], + foulplay: ["7T", "7L51", "6T", "6L51", "6S1"], frustration: ["7M", "6M"], gigaimpact: ["7M", "6M"], - gyroball: ["7M", "6M"], - healbell: ["6T"], - healpulse: ["7L1", "6L1", "6S0"], - helpinghand: ["6T"], + heatwave: ["7T", "7S4", "6T"], hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - lightscreen: ["7M", "6M"], - magiccoat: ["6T"], - mistyterrain: ["7L42", "6L42"], - moonblast: ["7L31", "6L31", "6S0"], - odorsleuth: ["7L8", "7L1", "6L8"], + honeclaws: ["6M"], + hurricane: ["7L1", "6L1"], + hyperbeam: ["7M", "7L88", "6M", "6L88"], + hypervoice: ["7T", "6T"], + knockoff: ["7T", "6T"], + laserfocus: ["7T"], + oblivionwing: ["7L26", "7S4", "7S3", "7S2", "6L26", "6S1", "6S0"], + phantomforce: ["7L55", "7S3", "7S2", "6L55"], protect: ["7M", "6M"], - psychic: ["7M", "7L48", "6M", "6L48"], - psychup: ["7M", "7L64", "6M", "6L64"], - psyshock: ["7M", "6M"], + psychic: ["7M", "7L59", "7S3", "7S2", "6M", "6L59"], raindance: ["7M", "6M"], - reflect: ["7M", "7L57", "6M", "6L57"], + razorwind: ["7L1", "6L1"], rest: ["7M", "6M"], return: ["7M", "6M"], + rockslide: ["7M", "6M"], + roost: ["7M", "7L1", "6M", "6L1"], round: ["7M", "6M"], secretpower: ["6M"], - skillswap: ["7L44", "6T", "6L44"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "6M"], + skyattack: ["7T", "7L93", "6T", "6L93"], + skydrop: ["7M", "6M"], sleeptalk: ["7M", "6M"], - snore: ["6T"], + snarl: ["7M", "7L18", "6M", "6L18", "6S0"], + snore: ["7T", "6T"], + steelwing: ["7M", "6M"], substitute: ["7M", "6M"], + suckerpunch: ["7L80", "6L80", "6S1"], sunnyday: ["7M", "6M"], swagger: ["7M", "6M"], - sweetkiss: ["7L6", "7L1", "6L6"], - sweetscent: ["7L1", "6L1"], - thunder: ["7M", "6M"], - thunderbolt: ["7M", "6M"], + tailwind: ["7T", "7S4", "6T"], + taunt: ["7M", "7L1", "6M", "6L1"], + thief: ["7M", "6M"], torment: ["7M", "6M"], toxic: ["7M", "6M"], - trickroom: ["7M", "6M", "6S0"], + uturn: ["7M", "6M"], + zenheadbutt: ["7T", "6T"], }}, - swirlix: {learnset: { - afteryou: ["7E", "6T", "6E"], - aromatherapy: ["7L26", "6L26"], - attract: ["7M", "6M"], - bellydrum: ["7E", "6E"], - calmmind: ["7M", "6M"], + zygarde: {learnset: { + bind: ["7T", "7L18", "7S3", "7S2", "6T", "6L18"], + bite: ["7L1", "6L1"], + block: ["7T", "6T"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "7L1", "6M", "6L1"], + camouflage: ["7L59", "6L59", "6S0"], + coil: ["7L72", "6L80"], confide: ["7M", "6M"], - copycat: ["7E", "6E"], - cottonguard: ["7L41", "6L41"], - cottonspore: ["7L17", "6L17"], - covet: ["6T"], - dazzlinggleam: ["7M", "6M"], + coreenforcer: ["7T"], + crunch: ["7L51", "6L51", "6S0"], + dig: ["7L10", "6M", "6L10"], doubleteam: ["7M", "6M"], - drainingkiss: ["7L31", "6L31"], - dreameater: ["7M", "6M"], - endeavor: ["7L21", "6T", "6L21"], - energyball: ["7M", "7L36", "6M", "6L36"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L1", "7S5", "7S4", "6L1"], + dragondance: ["7T", "7S7", "7S6", "6L72"], + dragonpulse: ["7T", "7L63", "6T", "6L63", "6S0"], + dragontail: ["7M", "6M"], + earthpower: ["7T", "6T"], + earthquake: ["7M", "7L55", "6M", "6L55", "6S0"], + extremespeed: ["7T", "7S7", "7S6", "6L88", "6S1"], facade: ["7M", "6M"], - fairywind: ["7L5", "6L5"], - faketears: ["7L10", "6L10"], - flamethrower: ["7M", "6M"], - flash: ["6M"], + focusblast: ["7M", "6M"], frustration: ["7M", "6M"], - gastroacid: ["6T"], - healbell: ["6T"], - helpinghand: ["6T"], + gigaimpact: ["7M", "6M"], + glare: ["7L1", "7S5", "7S4", "6L1", "6S1"], + grassknot: ["7M", "6M"], + haze: ["7L44", "7S3", "7S2", "6L44"], hiddenpower: ["7M", "6M"], - lightscreen: ["7M", "7L58", "6M", "6L58"], - magiccoat: ["6T"], - playnice: ["7L8", "6L8"], - playrough: ["7L49", "6L49"], + hyperbeam: ["7M", "6M"], + hypervoice: ["7T", "6T"], + irontail: ["7T", "6T"], + landswrath: ["7L26", "7S5", "7S4", "7S3", "7S2", "6L26", "6S1"], + outrage: ["7T", "7L80", "7S7", "7S6", "6T", "6L93", "6S1"], + painsplit: ["7T", "6T"], protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psychup: ["7M", "6M"], - raindance: ["7M", "6M"], rest: ["7M", "6M"], return: ["7M", "6M"], - round: ["7M", "7L13", "6M", "6L13"], - safeguard: ["7M", "7L67", "6M", "6L67"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L5", "7S5", "7S4", "6M", "6L5"], + sandstorm: ["7M", "7L35", "7S3", "7S2", "6M", "6L35"], secretpower: ["6M"], + shockwave: ["7T", "6T"], sleeptalk: ["7M", "6M"], - snore: ["6T"], + sludgewave: ["7M", "6M"], + snore: ["7T", "6T"], + spite: ["7T", "6T"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - surf: ["7M", "6M"], + superpower: ["7T", "6T"], swagger: ["7M", "6M"], - sweetscent: ["7L1", "6L1"], - tackle: ["7L1", "6L1"], - thief: ["7M", "6M"], - thunderbolt: ["7M", "6M"], + thousandarrows: ["7T", "7S7", "7S6"], + thousandwaves: ["7T"], toxic: ["7M", "6M"], - wish: ["7L45", "6L45"], - yawn: ["7E", "6E"], + zenheadbutt: ["7T", "6T"], }}, - slurpuff: {learnset: { - afteryou: ["6T"], - aromatherapy: ["7L26", "6L26"], - attract: ["7M", "6M"], + diancie: {learnset: { + afteryou: ["7T", "6T"], + ancientpower: ["7L27", "6L31"], calmmind: ["7M", "6M"], confide: ["7M", "6M"], - cottonguard: ["7L41", "6L41"], - cottonspore: ["7L17", "6L17"], - covet: ["6T"], + covet: ["7T", "6T"], dazzlinggleam: ["7M", "6M"], + diamondstorm: ["7L50", "6L50", "6S1", "6S0"], doubleteam: ["7M", "6M"], - drainingkiss: ["7L31", "6L31"], - drainpunch: ["6T"], - dreameater: ["7M", "6M"], - endeavor: ["7L21", "6T", "6L21"], - energyball: ["7M", "7L36", "6M", "6L36"], + earthpower: ["7T", "6T"], + endeavor: ["7T", "6T"], + explosion: ["7M", "6M"], facade: ["7M", "6M"], - fairywind: ["7L5", "7L1", "6L5"], - faketears: ["7L10", "6L10"], - flamethrower: ["7M", "6M"], + flail: ["7L31", "6L35"], flash: ["6M"], frustration: ["7M", "6M"], - gastroacid: ["6T"], gigaimpact: ["7M", "6M"], - healbell: ["6T"], - helpinghand: ["6T"], + gravity: ["7T", "6T"], + guardsplit: ["7L21", "6L27"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], + healbell: ["7T", "6T"], + helpinghand: ["7T", "6T"], hiddenpower: ["7M", "6M"], hyperbeam: ["7M", "6M"], - lightscreen: ["7M", "7L58", "6M", "6L58"], - magiccoat: ["6T"], - playnice: ["7L8", "7L1", "6L8"], - playrough: ["7L49", "6L49"], + irondefense: ["7T", "6T"], + lastresort: ["7T", "6T"], + lightscreen: ["7M", "7L60", "6M", "6L60"], + magnetrise: ["7T", "6T"], + moonblast: ["7L50", "6L50", "6S1", "6S0"], + naturepower: ["7M", "6M"], + powergem: ["7L40"], protect: ["7M", "6M"], psychic: ["7M", "6M"], psychup: ["7M", "6M"], - raindance: ["7M", "6M"], + psyshock: ["7M", "6M"], + reflect: ["7M", "7L12", "6M", "6L18", "6S1", "6S0"], rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "7L13", "6M", "6L13"], - safeguard: ["7M", "7L67", "6M", "6L67"], + return: ["7M", "6M", "6S1", "6S0"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rockthrow: ["7L1", "6L5"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L70", "6M", "6L70"], + sandstorm: ["7M", "6M"], secretpower: ["6M"], + sharpen: ["7L5", "6L8"], + skillswap: ["7T", "7L35", "6T", "6L40"], sleeptalk: ["7M", "6M"], - snore: ["6T"], + smackdown: ["7M", "7L8", "6M", "6L12"], + snore: ["7T", "6T"], + stealthrock: ["7T", "7L18", "6T", "6L21"], + stoneedge: ["7M", "7L49", "6M", "6L49"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - surf: ["7M", "6M"], swagger: ["7M", "6M"], - sweetscent: ["7L1", "6L1"], tackle: ["7L1", "6L1"], - thief: ["7M", "6M"], - thunderbolt: ["7M", "6M"], + telekinesis: ["7T"], toxic: ["7M", "6M"], - wish: ["7L45", "6L45"], + trickroom: ["7M", "7L46", "6M", "6L46"], + wonderroom: ["7T", "6T"], }}, - inkay: {learnset: { - aerialace: ["7M", "6M"], - attract: ["7M", "6M"], - bind: ["6T"], + hoopa: {learnset: { + allyswitch: ["7T", "7L1", "6L1"], + astonish: ["7L6", "6L6", "6S0"], + block: ["7T", "6T"], + brickbreak: ["7M", "6M"], calmmind: ["7M", "6M"], - camouflage: ["7E", "6E"], + chargebeam: ["7M", "6M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - destinybond: ["7E", "6E"], + confusion: ["7L1", "6L1"], + covet: ["7T", "6T"], + darkpulse: ["7M", "7L55", "6L55"], + destinybond: ["7L1", "6L1"], doubleteam: ["7M", "6M"], + drainpunch: ["7T", "6T"], + dreameater: ["7M", "6M"], + dualchop: ["7T", "6T"], embargo: ["7M", "6M"], + energyball: ["7M", "6M"], facade: ["7M", "6M"], - flamethrower: ["7M", "6M"], + firepunch: ["7T", "6T"], flash: ["6M"], - flatter: ["7E", "6E"], fling: ["7M", "6M"], - foulplay: ["7L8", "6T", "6L8", "6S0"], + focusblast: ["7M", "6M"], + focuspunch: ["7T", "6T"], + foulplay: ["7T", "6T"], frustration: ["7M", "6M"], - happyhour: ["6S0"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gravity: ["7T", "6T"], + guardsplit: ["7L29", "6L29"], + gunkshot: ["7T", "6T"], hiddenpower: ["7M", "6M"], - hypnosis: ["7L18", "6L18", "6S0"], - knockoff: ["6T"], - lightscreen: ["7M", "7L31", "6M", "6L31"], - nightslash: ["7L46", "6L46"], - payback: ["7M", "7L27", "6M", "6L27"], - peck: ["7L1", "6L1"], - pluck: ["7L35", "6L35"], - powersplit: ["7E", "6E"], + hyperbeam: ["7M", "6M"], + hyperspacefury: ["7L1", "6L1"], + hyperspacehole: ["7L85", "7L1", "7S1", "6L1", "6S0"], + icepunch: ["7T", "6T"], + knockoff: ["7T", "7L46", "6T", "6L46"], + laserfocus: ["7T"], + lastresort: ["7T", "6T"], + lightscreen: ["7M", "7L15", "6M", "6L15"], + magiccoat: ["7T", "7L10", "6T", "6L10"], + magicroom: ["7T", "6T"], + nastyplot: ["7L68", "7S1", "6L68", "6S0"], + phantomforce: ["7L35", "6L35"], + powersplit: ["7L29", "6L29"], + poweruppunch: ["6M"], protect: ["7M", "6M"], - psybeam: ["7L21", "6L21"], - psychic: ["7M", "6M"], - psychocut: ["7L39", "6L39"], + psybeam: ["7L19", "6L15"], + psychic: ["7M", "7L75", "7S1", "6M", "6L75", "6S0"], psychup: ["7M", "6M"], - psywave: ["7L13", "6L13"], + psyshock: ["7M", "6M"], + quash: ["7M", "6M"], raindance: ["7M", "6M"], - reflect: ["7M", "7L4", "6M", "6L4"], + recycle: ["7T", "6T"], + reflect: ["7M", "6M"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - rockslide: ["7M", "6M"], - roleplay: ["6T"], + roleplay: ["7T", "6T"], round: ["7M", "6M"], + safeguard: ["7M", "6M"], secretpower: ["6M"], - simplebeam: ["7E", "6E"], - slash: ["7L43", "6L43"], + shadowball: ["7M", "7L55", "7S1", "6M", "6L55"], + shockwave: ["7T", "6T"], + signalbeam: ["7T", "6T"], + skillswap: ["7T", "7L25", "6T", "6L25"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - spite: ["6T"], + snatch: ["7T", "6T"], + snore: ["7T", "6T"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - superpower: ["7L48", "6T", "6L48"], - swagger: ["7M", "7L12", "6M", "6L12"], - switcheroo: ["7L23", "6L23"], - tackle: ["7L1", "6L1"], + swagger: ["7M", "6M"], taunt: ["7M", "6M"], + telekinesis: ["7T"], thief: ["7M", "6M"], + throatchop: ["7T"], thunderbolt: ["7M", "6M"], - topsyturvy: ["7L15", "6L15", "6S0"], + thunderpunch: ["7T", "6T"], + thunderwave: ["7M", "6M"], torment: ["7M", "6M"], toxic: ["7M", "6M"], - trickroom: ["7M", "6M"], + trick: ["7T", "7L1", "6T", "6L1"], + trickroom: ["7M", "7L50", "6M", "6L50"], + uproar: ["7T", "6T"], + wonderroom: ["7T", "7L50", "6T", "6L50"], + zenheadbutt: ["7T", "7L46", "6T", "6L46"], }}, - malamar: {learnset: { - aerialace: ["7M", "6M"], - attract: ["7M", "6M"], - bind: ["6T"], - block: ["6T"], - brutalswing: ["7M"], - calmmind: ["7M", "6M"], + volcanion: {learnset: { + bodyslam: ["7L46", "6L46"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "6M"], confide: ["7M", "6M"], - constrict: ["7L1", "6L1"], cut: ["6M"], - darkpulse: ["7M", "6M"], + defog: ["7T"], doubleteam: ["7M", "6M"], - embargo: ["7M", "6M"], - facade: ["7M", "6M", "6S0"], - flamethrower: ["7M", "6M"], - flash: ["6M"], + earthpower: ["7T", "6T"], + earthquake: ["7M", "6M"], + explosion: ["7M", "7L76", "6M", "6L76", "6S1"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flamecharge: ["7M", "7L15", "6M", "6L15"], + flamethrower: ["7M", "6M", "6S1"], + flareblitz: ["7L58", "7L1", "6L1"], + flashcannon: ["7M", "6M"], fling: ["7M", "6M"], - foulplay: ["7L8", "6T", "6L8"], + focusblast: ["7M", "6M"], frustration: ["7M", "6M"], gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + haze: ["7L11", "6L11"], + heatwave: ["7T", "6T"], hiddenpower: ["7M", "6M"], + hydropump: ["7L50", "6L50", "6S1", "6S0"], hyperbeam: ["7M", "6M"], - hypnosis: ["7L18", "6L18"], - knockoff: ["6T", "6S0"], - lightscreen: ["7M", "7L31", "6M", "6L31"], - nightslash: ["7L46", "6L46"], - payback: ["7M", "7L27", "6M", "6L27"], - peck: ["7L1", "6L1"], - pluck: ["7L35", "6L35"], + incinerate: ["6M"], + liquidation: ["7T"], + mist: ["7L8", "6L8", "6S0"], + overheat: ["7M", "7L65", "6M", "6L65", "6S0"], protect: ["7M", "6M"], - psybeam: ["7L21", "6L21"], - psychic: ["7M", "6M"], - psychocut: ["7L39", "6L39"], - psychup: ["7M", "6M"], - psyshock: ["7M", "6M"], - psywave: ["7L13", "6L13"], - raindance: ["7M", "6M"], - reflect: ["7M", "7L4", "7L1", "6M", "6L4"], rest: ["7M", "6M"], - retaliate: ["6M"], return: ["7M", "6M"], - reversal: ["7L1", "6L1"], - rockslide: ["7M", "6M", "6S0"], - roleplay: ["6T"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + scald: ["7M", "7L32", "6M", "6L32"], secretpower: ["6M"], - signalbeam: ["6T"], - slash: ["7L43", "6L43"], sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - spite: ["6T"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["7T", "6T"], + solarbeam: ["7M", "6M"], + steameruption: ["7L85", "7L1", "6L1", "6S1", "6S0"], + stomp: ["7L28", "6L28"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], substitute: ["7M", "6M"], sunnyday: ["7M", "6M"], - superpower: ["7L48", "6T", "6L1", "6S0"], - swagger: ["7M", "7L12", "6M", "6L12"], - switcheroo: ["7L23", "6L23"], - tackle: ["7L1", "6L1"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - topsyturvy: ["7L15", "6L15"], - torment: ["7M", "6M"], + superpower: ["7T", "6T"], + swagger: ["7M", "6M"], + takedown: ["7L1", "6L1"], toxic: ["7M", "6M"], - trickroom: ["7M", "6M"], + waterpulse: ["7T", "7L21", "6T", "6L21"], + weatherball: ["7L40", "6L40"], + willowisp: ["7M", "6M"], + }}, + rowlet: {learnset: { + astonish: ["7L11"], + attract: ["7M"], + batonpass: ["7E"], + bravebird: ["7L43"], + confide: ["7M"], + confuseray: ["7E"], + covet: ["7T"], + curse: ["7E"], + defog: ["7T", "7E"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + featherdance: ["7L39"], + foresight: ["7L18"], + frustration: ["7M"], + furyattack: ["7L29"], + gigadrain: ["7T"], + grassknot: ["7M"], + grasspledge: ["7T"], + growl: ["7L4"], + haze: ["7E"], + hiddenpower: ["7M"], + leafage: ["7L1"], + leafblade: ["7L36"], + lightscreen: ["7M"], + nastyplot: ["7L46"], + naturepower: ["7M"], + ominouswind: ["7L16", "7E"], + peck: ["7L8"], + pluck: ["7L22"], + protect: ["7M"], + razorleaf: ["7L15", "7L14"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + shadowclaw: ["7M"], + skyattack: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L32"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7T", "7L25"], + tackle: ["7L1"], + toxic: ["7M"], + workup: ["7M"], + worryseed: ["7T"], + }}, + dartrix: {learnset: { + astonish: ["7L11"], + attract: ["7M"], + bravebird: ["7L51"], + confide: ["7M"], + covet: ["7T"], + defog: ["7T"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + featherdance: ["7L46"], + foresight: ["7L19"], + frustration: ["7M"], + furyattack: ["7L33"], + gigadrain: ["7T"], + grassknot: ["7M"], + grasspledge: ["7T"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + leafage: ["7L1"], + leafblade: ["7L42"], + lightscreen: ["7M"], + nastyplot: ["7L55"], + naturepower: ["7M"], + ominouswind: ["7L16"], + peck: ["7L8", "7L1"], + pluck: ["7L24"], + protect: ["7M"], + razorleaf: ["7L15", "7L14"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + shadowclaw: ["7M"], + skyattack: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L37"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7T", "7L28"], + tackle: ["7L1"], + toxic: ["7M"], + workup: ["7M"], + worryseed: ["7T"], + }}, + decidueye: {learnset: { + acrobatics: ["7M"], + astonish: ["7L11"], + attract: ["7M"], + bravebird: ["7L55", "7S0"], + confide: ["7M"], + covet: ["7T"], + defog: ["7T"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + featherdance: ["7L49"], + foresight: ["7L19"], + frenzyplant: ["7T"], + frustration: ["7M"], + furyattack: ["7L33"], + gigadrain: ["7T"], + gigaimpact: ["7M"], + grassknot: ["7M"], + grasspledge: ["7T"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + laserfocus: ["7T"], + leafage: ["7L1"], + leafblade: ["7L44", "7S0"], + leafstorm: ["7L1"], + lightscreen: ["7M"], + lowsweep: ["7M"], + nastyplot: ["7L60"], + naturepower: ["7M"], + ominouswind: ["7L16"], + peck: ["7L8", "7L1"], + phantomforce: ["7L1", "7S0"], + pluck: ["7L24"], + protect: ["7M"], + razorleaf: ["7L15", "7L14"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + shadowball: ["7M"], + shadowclaw: ["7M"], + shadowsneak: ["7L1", "7S0"], + skyattack: ["7T"], + sleeptalk: ["7M"], + smackdown: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + spiritshackle: ["7L1"], + spite: ["7T"], + steelwing: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L38"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7T", "7L28"], + tackle: ["7L1"], + tailwind: ["7T"], + toxic: ["7M"], + uturn: ["7M", "7L1"], + workup: ["7M"], + worryseed: ["7T"], + }}, + litten: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + bite: ["7L22"], + bodyslam: ["7E"], + bulkup: ["7M"], + confide: ["7M"], + covet: ["7T"], + crunch: ["7E"], + doublekick: ["7L16"], + doubleteam: ["7M"], + ember: ["7L1"], + endeavor: ["7T"], + facade: ["7M"], + fakeout: ["7E"], + fireblast: ["7M"], + firefang: ["7L15", "7L14"], + firepledge: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L36"], + flareblitz: ["7L43"], + frustration: ["7M"], + furyswipes: ["7L29"], + growl: ["7L4"], + heatwave: ["7T", "7E"], + hiddenpower: ["7M"], + leechlife: ["7M"], + leer: ["7L11"], + lick: ["7L8"], + nastyplot: ["7E"], + outrage: ["7T", "7L46"], + overheat: ["7M"], + powertrip: ["7E"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + revenge: ["7E"], + roar: ["7M", "7L18"], + round: ["7M"], + scaryface: ["7L39"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M", "7L25"], + swordsdance: ["7M"], + taunt: ["7M"], + thrash: ["7L32"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + }}, + torracat: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + bite: ["7L24"], + bulkup: ["7M"], + confide: ["7M"], + covet: ["7T"], + doublekick: ["7L16"], + doubleteam: ["7M"], + dualchop: ["7T"], + ember: ["7L1"], + endeavor: ["7T"], + facade: ["7M"], + fireblast: ["7M"], + firefang: ["7L15", "7L14"], + firepledge: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L42"], + flareblitz: ["7L51"], + frustration: ["7M"], + furyswipes: ["7L33"], + growl: ["7L4", "7L1"], + heatwave: ["7T"], + hiddenpower: ["7M"], + leechlife: ["7M"], + leer: ["7L11"], + lick: ["7L8", "7L1"], + outrage: ["7T", "7L55"], + overheat: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L19"], + round: ["7M"], + scaryface: ["7L46"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M", "7L28"], + swordsdance: ["7M"], + taunt: ["7M"], + thrash: ["7L37"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + }}, + incineroar: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + bind: ["7T"], + bite: ["7L24"], + blastburn: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L1"], + bulldoze: ["7M"], + confide: ["7M"], + covet: ["7T"], + crosschop: ["7L66"], + darkestlariat: ["7L1", "7S0"], + darkpulse: ["7M"], + doublekick: ["7L16"], + doubleteam: ["7M"], + drainpunch: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], + embargo: ["7M"], + ember: ["7L1"], + endeavor: ["7T"], + facade: ["7M"], + fakeout: ["7S0"], + fireblast: ["7M"], + firefang: ["7L15", "7L14"], + firepledge: ["7T"], + firepunch: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L44"], + flareblitz: ["7L55", "7S0"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], + frustration: ["7M"], + furyswipes: ["7L33"], + gigaimpact: ["7M"], + growl: ["7L4", "7L1"], + heatwave: ["7T"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ironhead: ["7T"], + knockoff: ["7T"], + leechlife: ["7M"], + leer: ["7L11"], + lick: ["7L8", "7L1"], + lowkick: ["7T"], + lowsweep: ["7M"], + outrage: ["7T", "7L60"], + overheat: ["7M"], + protect: ["7M"], + quash: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L19"], + round: ["7M"], + scaryface: ["7L49"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snarl: ["7M"], + snatch: ["7T"], + snore: ["7T"], + stompingtantrum: ["7T"], + substitute: ["7M"], + sunnyday: ["7M"], + superpower: ["7T"], + swagger: ["7M", "7L28"], + swordsdance: ["7M"], + taunt: ["7M"], + thrash: ["7L38"], + throatchop: ["7T", "7L1"], + thunderpunch: ["7T"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M", "7S0"], + willowisp: ["7M"], + workup: ["7M"], + }}, + popplio: {learnset: { + acrobatics: ["7M"], + amnesia: ["7E"], + aquajet: ["7L15", "7L14"], + aquaring: ["7E"], + aquatail: ["7T"], + aromaticmist: ["7E"], + attract: ["7M"], + babydolleyes: ["7L11"], + blizzard: ["7M"], + bubblebeam: ["7L22"], + captivate: ["7L39"], + charm: ["7E"], + confide: ["7M"], + covet: ["7T"], + disarmingvoice: ["7L8"], + doubleslap: ["7L29"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + encore: ["7L18"], + facade: ["7M"], + frustration: ["7M"], + growl: ["7L4"], + hail: ["7M"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + hydropump: ["7L43"], + hypervoice: ["7T", "7L32"], + icebeam: ["7M"], + icywind: ["7T", "7L16"], + irontail: ["7T"], + mistyterrain: ["7L46"], + moonblast: ["7L36"], + perishsong: ["7E"], + pound: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sing: ["7L25"], + sleeptalk: ["7M"], + snore: ["7T"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpledge: ["7T"], + waterpulse: ["7T"], + wonderroom: ["7T", "7E"], + workup: ["7M"], + }}, + brionne: {learnset: { + acrobatics: ["7M"], + aquajet: ["7L15", "7L14"], + aquatail: ["7T"], + attract: ["7M"], + babydolleyes: ["7L11"], + blizzard: ["7M"], + bubblebeam: ["7L24"], + captivate: ["7L46"], + confide: ["7M"], + covet: ["7T"], + disarmingvoice: ["7L8", "7L1"], + doubleslap: ["7L33"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + encore: ["7L19"], + facade: ["7M"], + frustration: ["7M"], + growl: ["7L4", "7L1"], + hail: ["7M"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + hydropump: ["7L51"], + hypervoice: ["7T", "7L37"], + icebeam: ["7M"], + icywind: ["7T", "7L16"], + irontail: ["7T"], + mistyterrain: ["7L55"], + moonblast: ["7L42"], + pound: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sing: ["7L28"], + sleeptalk: ["7M"], + snore: ["7T"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpledge: ["7T"], + waterpulse: ["7T"], + wonderroom: ["7T"], + workup: ["7M"], + }}, + primarina: {learnset: { + acrobatics: ["7M"], + aquajet: ["7L15", "7L14"], + aquatail: ["7T"], + attract: ["7M"], + babydolleyes: ["7L11"], + blizzard: ["7M"], + bubblebeam: ["7L24"], + captivate: ["7L49"], + confide: ["7M"], + covet: ["7T"], + dazzlinggleam: ["7M"], + disarmingvoice: ["7L9", "7L1"], + doubleslap: ["7L33"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + encore: ["7L19"], + energyball: ["7M"], + facade: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + growl: ["7L4", "7L1"], + hail: ["7M"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + hydrocannon: ["7T"], + hydropump: ["7L55"], + hypervoice: ["7T", "7L38", "7S0"], + icebeam: ["7M"], + icywind: ["7T", "7L16", "7S0"], + irontail: ["7T"], + lightscreen: ["7M"], + liquidation: ["7T"], + magiccoat: ["7T"], + mistyterrain: ["7L60"], + moonblast: ["7L44", "7S0"], + perishsong: ["7S0"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + shadowball: ["7M"], + sing: ["7L28"], + sleeptalk: ["7M"], + snore: ["7T"], + sparklingaria: ["7L1"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpledge: ["7T"], + waterpulse: ["7T"], + wonderroom: ["7T"], + workup: ["7M"], }}, - binacle: {learnset: { - aerialace: ["7M", "6M"], - ancientpower: ["7L28", "6L28"], - attract: ["7M", "6M"], - blizzard: ["7M", "6M"], - brickbreak: ["7M", "6M"], - bulldoze: ["7M", "6M"], - clamp: ["7L20", "6L20"], - confide: ["7M", "6M"], - crosschop: ["7L49", "6L49"], - cut: ["6M"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dualchop: ["6T"], - earthquake: ["7M", "6M"], - embargo: ["7M", "6M"], - endeavor: ["6T"], - facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - fling: ["7M", "6M"], - frustration: ["7M", "6M"], - furycutter: ["7L37", "6L37"], - furyswipes: ["7L10", "6L10"], - grassknot: ["7M", "6M"], - helpinghand: ["7E", "6T", "6E"], - hiddenpower: ["7M", "6M"], - honeclaws: ["7L32", "6M", "6L32"], - icebeam: ["7M", "6M"], - icywind: ["6T"], - infestation: ["7M", "6M"], - irondefense: ["6T"], - mudslap: ["7L18", "6L18"], - naturepower: ["7M", "6M"], - nightslash: ["7L41", "6L41"], - payback: ["7M", "6M"], - poisonjab: ["7M", "6M"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - razorshell: ["7L45", "6L45"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockpolish: ["7M", "7L24", "6M", "6L24"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - sandattack: ["7L1", "6L1"], - sandstorm: ["7M", "6M"], - scald: ["7M", "6M"], - scratch: ["7L1", "6L1"], - secretpower: ["6M"], - shadowclaw: ["7M", "6M"], - shellsmash: ["7L1", "6L1"], - slash: ["7L13", "6L13"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - smackdown: ["7M", "6M"], - snore: ["6T"], - stealthrock: ["6T"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - switcheroo: ["7E", "6E"], - swordsdance: ["7M", "6M"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - tickle: ["7E", "6E"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - watergun: ["7L4", "6L4"], - waterpulse: ["6T"], - watersport: ["7E", "6E"], - withdraw: ["7L7", "6L7"], - xscissor: ["7M", "6M"], + pikipek: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + boomburst: ["7E"], + bravebird: ["7E"], + brickbreak: ["7M"], + bulletseed: ["7L31"], + confide: ["7M"], + defog: ["7T"], + doubleteam: ["7M"], + drillpeck: ["7L27"], + echoedvoice: ["7M", "7L7"], + featherdance: ["7L33"], + flamecharge: ["7M"], + fly: ["7M"], + frustration: ["7M"], + furyattack: ["7L21"], + growl: ["7L3"], + gunkshot: ["7T"], + heatwave: ["7T"], + hiddenpower: ["7M"], + hypervoice: ["7T", "7L37"], + knockoff: ["7T"], + mirrormove: ["7E"], + peck: ["7L1"], + pluck: ["7L15"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rocksmash: ["7L9"], + roost: ["7M", "7L19"], + round: ["7M"], + screech: ["7L25"], + skyattack: ["7T"], + sleeptalk: ["7M"], + smackdown: ["7M"], + snore: ["7T"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + supersonic: ["7L13"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwind: ["7T", "7E"], + thief: ["7M"], + toxic: ["7M"], + uproar: ["7T", "7E"], + uturn: ["7M"], + workup: ["7M"], }}, - barbaracle: {learnset: { - aerialace: ["7M", "6M"], - ancientpower: ["7L28", "6L28"], - attract: ["7M", "6M"], - blizzard: ["7M", "6M"], - brickbreak: ["7M", "6M"], - brutalswing: ["7M"], - bulkup: ["7M", "6M"], - bulldoze: ["7M", "6M"], - clamp: ["7L20", "6L20"], - confide: ["7M", "6M"], - crosschop: ["7L55", "6L55"], - cut: ["6M"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dragonclaw: ["7M", "6M"], - dualchop: ["6T"], - earthpower: ["6T"], - earthquake: ["7M", "6M"], - embargo: ["7M", "6M"], - endeavor: ["6T"], - facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - fling: ["7M", "6M"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - furycutter: ["7L37", "6L37"], - furyswipes: ["7L10", "6L10"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - helpinghand: ["6T"], - hiddenpower: ["7M", "6M"], - honeclaws: ["7L32", "6M", "6L32"], - hyperbeam: ["7M", "6M"], - icebeam: ["7M", "6M"], - icywind: ["6T"], - infestation: ["7M", "6M"], - irondefense: ["6T"], - lowkick: ["6T"], - mudslap: ["7L18", "6L18"], - naturepower: ["7M", "6M"], - nightslash: ["7L44", "6L44"], - payback: ["7M", "6M"], - poisonjab: ["7M", "6M"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - razorshell: ["7L48", "6L48"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockpolish: ["7M", "7L24", "6M", "6L24"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - sandattack: ["7L1", "6L1"], - sandstorm: ["7M", "6M"], - scald: ["7M", "6M"], - scratch: ["7L1", "6L1"], - secretpower: ["6M"], - shadowclaw: ["7M", "6M"], - shellsmash: ["7L1", "6L1"], - skullbash: ["7L65", "7L1", "6L1"], - slash: ["7L13", "6L13"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - smackdown: ["7M", "6M"], - snore: ["6T"], - stealthrock: ["6T"], - stoneedge: ["7M", "7L60", "7L1", "6M", "6L1"], - strength: ["6M"], - substitute: ["7M", "6M"], - superpower: ["6T"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - swordsdance: ["7M", "6M"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - watergun: ["7L4", "7L1", "6L4"], - waterpulse: ["6T"], - withdraw: ["7L7", "6L7"], - xscissor: ["7M", "6M"], + trumbeak: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + brickbreak: ["7M"], + bulletseed: ["7L37"], + confide: ["7M"], + defog: ["7T"], + doubleteam: ["7M"], + drillpeck: ["7L32"], + echoedvoice: ["7M", "7L7", "7L1"], + featherdance: ["7L40"], + flamecharge: ["7M"], + fly: ["7M"], + frustration: ["7M"], + furyattack: ["7L24"], + growl: ["7L3", "7L1"], + gunkshot: ["7T"], + heatwave: ["7T"], + hiddenpower: ["7M"], + hypervoice: ["7T", "7L45"], + knockoff: ["7T"], + peck: ["7L1"], + pluck: ["7L16"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L1"], + rocksmash: ["7L9", "7L1"], + roost: ["7M", "7L21"], + round: ["7M"], + screech: ["7L29"], + skyattack: ["7T"], + sleeptalk: ["7M"], + smackdown: ["7M"], + snore: ["7T"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + supersonic: ["7L13"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwind: ["7T"], + thief: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + uturn: ["7M"], + workup: ["7M"], }}, - skrelp: {learnset: { - acid: ["7L15", "6L15"], - acidarmor: ["7E", "6E"], - aquatail: ["7L35", "6T", "6L35"], - attract: ["7M", "6M"], - bounce: ["6T"], - bubble: ["7L12", "6L12"], - camouflage: ["7L19", "6L19"], - confide: ["7M", "6M"], - dive: ["6M"], - doubleteam: ["7M", "7L28", "6M", "6L28"], - dragonpulse: ["7L49", "6T", "6L49"], - facade: ["7M", "6M"], - feintattack: ["7L5", "6L5"], - frustration: ["7M", "6M"], - gunkshot: ["6T"], - hail: ["7M", "6M"], - haze: ["7E", "6E"], - hiddenpower: ["7M", "6M"], - hydropump: ["7L42", "6L42"], - icywind: ["6T"], - irontail: ["6T"], - outrage: ["6T"], - playrough: ["7E", "6E"], - poisontail: ["7L23", "6L23"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - scald: ["7M", "6M"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - shockwave: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "7L38", "6M", "6L38"], - sludgewave: ["7M", "6M"], - smokescreen: ["7L1", "6L1"], - snore: ["6T"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwhip: ["7L9", "6L9"], - thunderbolt: ["7M", "6M"], - toxic: ["7M", "7L32", "6M", "6L32"], - toxicspikes: ["7E", "6E"], - venomdrench: ["7E", "6E"], - venoshock: ["7M", "6M"], - waterfall: ["7M", "6M"], - watergun: ["7L1", "6L1"], - waterpulse: ["7L25", "6T", "6L25"], + toucannon: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + beakblast: ["7L1"], + brickbreak: ["7M"], + bulletseed: ["7L40"], + confide: ["7M"], + defog: ["7T"], + doubleteam: ["7M"], + drillpeck: ["7L34"], + echoedvoice: ["7M", "7L7", "7L1"], + featherdance: ["7L44"], + flamecharge: ["7M"], + flashcannon: ["7M"], + fly: ["7M"], + frustration: ["7M"], + furyattack: ["7L24"], + growl: ["7L3", "7L1"], + gunkshot: ["7T"], + heatwave: ["7T"], + hiddenpower: ["7M"], + hypervoice: ["7T", "7L50"], + knockoff: ["7T"], + overheat: ["7M"], + peck: ["7L1"], + pluck: ["7L16"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L1"], + rocksmash: ["7L9", "7L1"], + roost: ["7M", "7L21"], + round: ["7M"], + screech: ["7L30"], + seedbomb: ["7T"], + skyattack: ["7T"], + sleeptalk: ["7M"], + smackdown: ["7M"], + snore: ["7T"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + supersonic: ["7L13"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwind: ["7T"], + thief: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + uturn: ["7M"], + workup: ["7M"], }}, - dragalge: {learnset: { - acid: ["7L15", "6L15"], - aquatail: ["7L35", "6T", "6L35"], - attract: ["7M", "6M"], - bounce: ["6T"], - bubble: ["7L12", "6L12"], - camouflage: ["7L19", "6L19"], - confide: ["7M", "6M"], - dive: ["6M"], - doubleteam: ["7M", "7L28", "6M", "6L28"], - dracometeor: ["7T", "6T"], - dragonpulse: ["7L53", "6T", "6L53"], - dragontail: ["7M", "7L59", "7L1", "6M", "6L1"], - facade: ["7M", "6M"], - feintattack: ["7L5", "7L1", "6L5"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - gunkshot: ["6T"], - hail: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - hydropump: ["7L42", "6L42"], - hyperbeam: ["7M", "6M"], - icywind: ["6T"], - irontail: ["6T"], - outrage: ["6T"], - poisontail: ["7L23", "6L23"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - scald: ["7M", "6M"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - shockwave: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "7L38", "6M", "6L38"], - sludgewave: ["7M", "6M"], - smokescreen: ["7L1", "6L1"], - snore: ["6T"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwhip: ["7L9", "6L9"], - thunder: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - toxic: ["7M", "7L32", "6M", "6L32"], - twister: ["7L1", "6L1"], - venoshock: ["7M", "6M"], - waterfall: ["7M", "6M"], - watergun: ["7L1", "6L1"], - waterpulse: ["7L25", "6T", "6L25"], + yungoos: {learnset: { + attract: ["7M"], + bide: ["7L16"], + bite: ["7L19"], + confide: ["7M"], + crunch: ["7L34"], + doubleteam: ["7M"], + earthquake: ["7M"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + firefang: ["7E"], + frustration: ["7M"], + hiddenpower: ["7M"], + hyperfang: ["7L37"], + icefang: ["7E"], + irontail: ["7T"], + lastresort: ["7T", "7E"], + leer: ["7L3"], + mudslap: ["7L22"], + odorsleuth: ["7L13"], + payback: ["7M"], + protect: ["7M"], + pursuit: ["7L7"], + rest: ["7M", "7L46"], + return: ["7M"], + revenge: ["7E"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L10"], + sandstorm: ["7M"], + scaryface: ["7L31"], + shockwave: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + stompingtantrum: ["7T"], + substitute: ["7M"], + superfang: ["7T", "7L25"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L28"], + taunt: ["7M"], + thief: ["7M"], + thrash: ["7L43"], + thunderfang: ["7E"], + torment: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + uturn: ["7M"], + workup: ["7M"], + yawn: ["7L40"], }}, - clauncher: {learnset: { - aquajet: ["7L43", "7E", "6L43", "6E"], - aquatail: ["6T"], - attract: ["7M", "6M"], - bounce: ["6T"], - bubble: ["7L12", "6L12"], - bubblebeam: ["7L20", "6L20"], - confide: ["7M", "6M"], - crabhammer: ["7L30", "7E", "6L30", "6E"], - cut: ["6M"], - dive: ["6M"], - doubleteam: ["7M", "6M"], - dragonpulse: ["6T"], - endure: ["7E", "6E"], - entrainment: ["7E", "6E"], - facade: ["7M", "6M"], - flail: ["7L16", "6L16"], - flashcannon: ["7M", "6M"], - frustration: ["7M", "6M"], - helpinghand: ["7E", "6T", "6E"], - hiddenpower: ["7M", "6M"], - icebeam: ["7M", "6M"], - icywind: ["6T"], - irontail: ["6T"], - muddywater: ["7L48", "6L48"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - round: ["7M", "6M"], - scald: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - smackdown: ["7M", "7L39", "6M", "6L39"], - snore: ["6T"], - splash: ["7L1", "6L1"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - swordsdance: ["7M", "7L25", "6M", "6L25"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - venoshock: ["7M", "6M"], - vicegrip: ["7L9", "6L9"], - waterfall: ["7M", "6M"], - watergun: ["7L1", "6L1"], - waterpulse: ["7L34", "6T", "6L34"], - watersport: ["7L7", "6L7"], + gumshoos: {learnset: { + attract: ["7M"], + bide: ["7L16"], + bite: ["7L19"], + block: ["7T"], + bulldoze: ["7M"], + confide: ["7M"], + crunch: ["7L39"], + doubleteam: ["7M"], + dualchop: ["7T"], + earthquake: ["7M"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + firepunch: ["7T"], + fling: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + hyperfang: ["7L43"], + icepunch: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + leer: ["7L3", "7L1"], + mudslap: ["7L23"], + odorsleuth: ["7L13"], + payback: ["7M"], + protect: ["7M"], + pursuit: ["7L7", "7L1"], + rest: ["7M", "7L55"], + return: ["7M"], + roar: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L10", "7L1"], + sandstorm: ["7M"], + scaryface: ["7L35"], + shockwave: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + stompingtantrum: ["7T"], + substitute: ["7M"], + superfang: ["7T", "7L27"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L31"], + taunt: ["7M"], + thief: ["7M"], + thrash: ["7L51"], + thunderpunch: ["7T"], + torment: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + uturn: ["7M"], + workup: ["7M"], + yawn: ["7L47"], + zenheadbutt: ["7T"], }}, - clawitzer: {learnset: { - aquajet: ["7L49", "6L47"], - aquatail: ["6T"], - attract: ["7M", "6M"], - aurasphere: ["7L1", "6L1"], - bounce: ["6T"], - bubble: ["7L12", "6L12"], - bubblebeam: ["7L20", "6L20"], - confide: ["7M", "6M"], - crabhammer: ["7L30", "6L30"], - cut: ["6M"], - darkpulse: ["7M", "7L1", "6M", "6L1"], - dive: ["6M"], - doubleteam: ["7M", "6M"], - dragonpulse: ["7L1", "6T", "6L1"], - facade: ["7M", "6M"], - flail: ["7L16", "6L16"], - flashcannon: ["7M", "6M"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - healpulse: ["7L1", "6L1"], - helpinghand: ["6T"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - icebeam: ["7M", "6M"], - icywind: ["6T"], - irontail: ["6T"], - muddywater: ["7L57", "6L53"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - round: ["7M", "6M"], - scald: ["7M", "6M"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - smackdown: ["7M", "7L42", "6M", "6L42"], - snore: ["6T"], - splash: ["7L1", "6L1"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - swordsdance: ["7M", "7L25", "6M", "6L25"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - venoshock: ["7M", "6M"], - vicegrip: ["7L9", "7L1", "6L9"], - waterfall: ["7M", "6M"], - watergun: ["7L1", "6L1"], - waterpulse: ["7L34", "6T", "6L34"], - watersport: ["7L7", "7L1", "6L7"], + gumshoostotem: {learnset: { + attract: ["7M"], + bide: ["7L16", "7S0"], + bite: ["7L19", "7S0"], + block: ["7T"], + bulldoze: ["7M"], + confide: ["7M"], + crunch: ["7L39"], + doubleteam: ["7M"], + dualchop: ["7T"], + earthquake: ["7M"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + firepunch: ["7T"], + fling: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + hyperfang: ["7L43"], + icepunch: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + leer: ["7L3", "7L1"], + mudslap: ["7L23"], + odorsleuth: ["7L13", "7S0"], + payback: ["7M"], + protect: ["7M"], + pursuit: ["7L7", "7L1"], + rest: ["7M", "7L55"], + return: ["7M"], + roar: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L10", "7L1", "7S0"], + sandstorm: ["7M"], + scaryface: ["7L35"], + shockwave: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + stompingtantrum: ["7T"], + substitute: ["7M"], + superfang: ["7T", "7L27"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L31"], + taunt: ["7M"], + thief: ["7M"], + thrash: ["7L51"], + thunderpunch: ["7T"], + torment: ["7M"], + toxic: ["7M"], + uproar: ["7T"], + uturn: ["7M"], + workup: ["7M"], + yawn: ["7L47"], + zenheadbutt: ["7T"], }}, - helioptile: {learnset: { - agility: ["7E", "6E"], - attract: ["7M", "6M"], - bulldoze: ["7M", "7L35", "6M", "6L35"], - camouflage: ["7E", "6E"], - charge: ["7L11", "6L11"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dragontail: ["7M", "6M"], - electricterrain: ["7E", "6E"], - electrify: ["7L45", "6L45"], - electroweb: ["6T"], - facade: ["7M", "6M"], - flash: ["6M"], - frustration: ["7M", "6M"], - glare: ["7E", "6E"], - grassknot: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - irontail: ["6T"], - lightscreen: ["7M", "6M"], - lowsweep: ["7M", "6M"], - magnetrise: ["6T"], - mudslap: ["7L13", "6L13"], - paraboliccharge: ["7L25", "6L25"], - pound: ["7L1", "6L1"], - protect: ["7M", "6M"], - psychup: ["7M", "6M"], - quickattack: ["7L17", "6L17"], - raindance: ["7M", "6M"], - razorwind: ["7L22", "6L22"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - tailwhip: ["7L1", "6L1"], - thunder: ["7M", "6M"], - thunderbolt: ["7M", "7L49", "6M", "6L49"], - thundershock: ["7L6", "6L6"], - thunderwave: ["7M", "7L31", "6M", "6L31"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - voltswitch: ["7M", "7L40", "6M", "6L40"], - wildcharge: ["7M", "6M"], + grubbin: {learnset: { + acrobatics: ["7M", "7L19"], + attract: ["7M"], + bite: ["7L10"], + bugbite: ["7T", "7L13"], + chargebeam: ["7M"], + confide: ["7M"], + crunch: ["7L22"], + dig: ["7L28"], + doubleteam: ["7M"], + electroweb: ["7T", "7E"], + endure: ["7E"], + facade: ["7M"], + frustration: ["7M"], + harden: ["7E"], + hiddenpower: ["7M"], + lightscreen: ["7M"], + magnetrise: ["7T"], + mudshot: ["7E"], + mudslap: ["7L7"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shockwave: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + spark: ["7L16"], + stringshot: ["7L4"], + substitute: ["7M"], + swagger: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M", "7L25"], }}, - heliolisk: {learnset: { - attract: ["7M", "6M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M"], - charge: ["7L1", "6L1"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dragonpulse: ["6T"], - dragontail: ["7M", "6M"], - eerieimpulse: ["7L1", "6L1"], - electrify: ["7L1", "6L1"], - electroweb: ["6T"], - facade: ["7M", "6M"], - firepunch: ["6T"], - flash: ["6M"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - hypervoice: ["6T"], - irontail: ["6T"], - lightscreen: ["7M", "6M"], - lowkick: ["6T"], - lowsweep: ["7M", "6M"], - magnetrise: ["6T"], - paraboliccharge: ["7L1", "6L1"], - protect: ["7M", "6M"], - psychup: ["7M", "6M"], - quickattack: ["7L1", "6L1"], - raindance: ["7M", "6M"], - razorwind: ["7L1", "6L1"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - thunder: ["7M", "7L1", "6M", "6L1"], - thunderbolt: ["7M", "6M"], - thunderpunch: ["6T"], - thunderwave: ["7M", "6M"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - voltswitch: ["7M", "6M"], - wildcharge: ["7M", "6M"], + charjabug: {learnset: { + acrobatics: ["7M", "7L19"], + attract: ["7M"], + bite: ["7L10", "7L1"], + bugbite: ["7T", "7L13"], + charge: ["7L1"], + chargebeam: ["7M"], + confide: ["7M"], + crunch: ["7L25"], + dig: ["7L37"], + discharge: ["7L43"], + doubleteam: ["7M"], + electroweb: ["7T"], + facade: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + irondefense: ["7T", "7L49"], + lightscreen: ["7M"], + magnetrise: ["7T"], + mudslap: ["7L7", "7L1"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shockwave: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + spark: ["7L16"], + stringshot: ["7L4", "7L1"], + substitute: ["7M"], + swagger: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M", "7L31"], }}, - tyrunt: {learnset: { - aerialace: ["7M", "6M"], - ancientpower: ["7L26", "6L26"], - attract: ["7M", "6M"], - bide: ["7L12", "6L12"], - bite: ["7L17", "6L17"], - block: ["6T"], - brickbreak: ["7M", "6M"], - bulldoze: ["7M", "6M"], - charm: ["7L20", "6L20"], - confide: ["7M", "6M"], - crunch: ["7L34", "6L34"], - curse: ["7E", "6E"], - darkpulse: ["7M", "6M"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonclaw: ["7M", "7L37", "6M", "6L37"], - dragondance: ["7E", "6E"], - dragonpulse: ["6T"], - dragontail: ["7M", "7L30", "6M", "6L30"], - earthpower: ["6T"], - earthquake: ["7M", "7L44", "6M", "6L44"], - facade: ["7M", "6M"], - firefang: ["7E", "6E"], - frustration: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - horndrill: ["7L49", "6L49"], - hypervoice: ["6T"], - icefang: ["7E", "6E"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - outrage: ["6T"], - poisonfang: ["7E", "6E"], - protect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "7L6", "6M", "6L6", "6S0"], - rockpolish: ["7M", "7E", "6M", "6E"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - stealthrock: ["7L15", "6T", "6L15"], - stomp: ["7L10", "6L10", "6S0"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superpower: ["6T"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1", "6S0"], - tailwhip: ["7L1", "6L1", "6S0"], - thrash: ["7L40", "6L40"], - thunderfang: ["7E", "6E"], - toxic: ["7M", "6M"], - zenheadbutt: ["6T"], + vikavolt: {learnset: { + acrobatics: ["7M", "7L19"], + agility: ["7L49"], + airslash: ["7L1"], + attract: ["7M"], + bite: ["7L10", "7L1"], + bugbite: ["7T", "7L13"], + bugbuzz: ["7L31"], + charge: ["7L1"], + chargebeam: ["7M"], + confide: ["7M"], + dig: ["7L37"], + doubleteam: ["7M"], + electroweb: ["7T"], + energyball: ["7M"], + facade: ["7M"], + flashcannon: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + guillotine: ["7L25"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + irondefense: ["7T"], + laserfocus: ["7T"], + lightscreen: ["7M"], + magnetrise: ["7T"], + mudslap: ["7L7", "7L1"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + skydrop: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + spark: ["7L16"], + stringshot: ["7L4", "7L1"], + substitute: ["7M"], + swagger: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M", "7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M"], + zapcannon: ["7L41"], }}, - tyrantrum: {learnset: { - aerialace: ["7M", "6M"], - ancientpower: ["7L26", "6L26"], - attract: ["7M", "6M"], - bide: ["7L12", "6L12"], - bite: ["7L17", "6L17"], - block: ["6T"], - brickbreak: ["7M", "6M"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M"], - charm: ["7L20", "6L20"], - confide: ["7M", "6M"], - crunch: ["7L34", "6L34"], - darkpulse: ["7M", "6M"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonclaw: ["7M", "7L37", "6M", "6L37"], - dragonpulse: ["6T"], - dragontail: ["7M", "7L30", "6M", "6L30"], - earthpower: ["6T"], - earthquake: ["7M", "7L47", "6M", "6L47"], - facade: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "7L68", "6M", "6L75"], - headsmash: ["7L58", "7L1", "6L1"], - hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - horndrill: ["7L53", "6L53"], - hyperbeam: ["7M", "6M"], - hypervoice: ["6T"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - outrage: ["6T"], - protect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "7L6", "7L1", "6M", "6L6"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "7L1", "6M", "6L68"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - stealthrock: ["7L15", "6T", "6L15"], - stomp: ["7L10", "7L1", "6L10"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superpower: ["6T"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwhip: ["7L1", "6L1"], - thrash: ["7L42", "6L42"], - toxic: ["7M", "6M"], - zenheadbutt: ["6T"], + vikavolttotem: {learnset: { + acrobatics: ["7M", "7L19", "7S0"], + agility: ["7L49"], + airslash: ["7L1"], + attract: ["7M"], + bite: ["7L10", "7L1"], + bugbite: ["7T", "7L13"], + bugbuzz: ["7L31", "7S0"], + charge: ["7L1"], + chargebeam: ["7M"], + confide: ["7M"], + dig: ["7L37"], + doubleteam: ["7M"], + electroweb: ["7T"], + energyball: ["7M"], + facade: ["7M"], + flashcannon: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + guillotine: ["7L25", "7S0"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + irondefense: ["7T"], + laserfocus: ["7T"], + lightscreen: ["7M"], + magnetrise: ["7T"], + mudslap: ["7L7", "7L1"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + skydrop: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + spark: ["7L16", "7S0"], + stringshot: ["7L4", "7L1"], + substitute: ["7M"], + swagger: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M", "7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M"], + zapcannon: ["7L41"], }}, - amaura: {learnset: { - ancientpower: ["7L26", "6L26"], - aquatail: ["6T"], - attract: ["7M", "6M"], - aurorabeam: ["7L20", "6L20"], - avalanche: ["7L34", "6L34"], - barrier: ["7E", "6E"], - blizzard: ["7M", "7L65", "6M", "6L65"], - bulldoze: ["7M", "6M"], - calmmind: ["7M", "6M"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - darkpulse: ["7M", "6M"], - discharge: ["7E", "6E"], - doubleteam: ["7M", "6M"], - dragontail: ["7M", "6M"], - dreameater: ["7M", "6M"], - earthpower: ["6T"], - echoedvoice: ["7M", "6M"], - encore: ["7L44", "6L44"], - facade: ["7M", "6M"], - flash: ["6M"], - flashcannon: ["7M", "6M"], - frostbreath: ["7M", "6M"], - frustration: ["7M", "6M"], - growl: ["7L1", "6L1", "6S0"], - hail: ["7M", "7L38", "6M", "6L38"], - haze: ["7E", "6E"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "7L57", "6M", "6L57"], - hypervoice: ["6T"], - icebeam: ["7M", "7L50", "6M", "6L50"], - icywind: ["7L13", "6T", "6L13"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - lightscreen: ["7M", "7L47", "6M", "6L47"], - magnetrise: ["7E", "6T", "6E"], - mirrorcoat: ["7E", "6E"], - mist: ["7L18", "6L18"], - naturepower: ["7M", "7L41", "6M", "6L41"], - outrage: ["6T"], - powdersnow: ["7L1", "6L1", "6S0"], - protect: ["7M", "6M"], - psychup: ["7M", "6M"], - raindance: ["7M", "6M"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "6M"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rockthrow: ["7L10", "6L10", "6S0"], - rocktomb: ["7M", "6M"], - round: ["7M", "7L30", "6M", "6L30"], - safeguard: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - stealthrock: ["6T"], - stoneedge: ["7M", "6M"], - substitute: ["7M", "6M"], - swagger: ["7M", "6M"], - takedown: ["7L15", "6L15"], - thunderbolt: ["7M", "6M"], - thunderwave: ["7M", "7L5", "6M", "6L5", "6S0"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], - zenheadbutt: ["6T"], + crabrawler: {learnset: { + amnesia: ["7E"], + attract: ["7M"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L17"], + bulkup: ["7M"], + bulldoze: ["7M"], + closecombat: ["7L49"], + confide: ["7M"], + crabhammer: ["7L37"], + dizzypunch: ["7L25"], + doubleteam: ["7M"], + drainpunch: ["7T"], + dualchop: ["7T"], + dynamicpunch: ["7L45"], + earthquake: ["7M"], + endeavor: ["7T", "7E"], + facade: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], + frostbreath: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + icepunch: ["7T"], + irondefense: ["7T", "7L42"], + ironhead: ["7T"], + leer: ["7L9"], + payback: ["7M", "7L29"], + poweruppunch: ["7L22"], + protect: ["7M"], + pursuit: ["7L13"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L33"], + rockslide: ["7M"], + rocksmash: ["7L5"], + rocktomb: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + superpower: ["7T", "7E"], + swagger: ["7M"], + thief: ["7M"], + thunderpunch: ["7T"], + toxic: ["7M"], + wideguard: ["7E"], + workup: ["7M"], + zenheadbutt: ["7T"], }}, - aurorus: {learnset: { - ancientpower: ["7L26", "6L26"], - aquatail: ["6T"], - attract: ["7M", "6M"], - aurorabeam: ["7L20", "6L20"], - avalanche: ["7L34", "6L34"], - blizzard: ["7M", "7L74", "6M", "6L74"], - bulldoze: ["7M", "6M"], - calmmind: ["7M", "6M"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - darkpulse: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dragontail: ["7M", "6M"], - dreameater: ["7M", "6M"], - earthpower: ["6T"], - earthquake: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - encore: ["7L46", "6L46"], - facade: ["7M", "6M"], - flash: ["6M"], - flashcannon: ["7M", "6M"], - freezedry: ["7L1", "6L1"], - frostbreath: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - growl: ["7L1", "6L1"], - hail: ["7M", "7L38", "6M", "6L38"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "7L63", "6M", "6L63"], - hypervoice: ["6T"], - icebeam: ["7M", "7L56", "6M", "6L56"], - icywind: ["7L13", "6T", "6L13"], - irondefense: ["6T"], - ironhead: ["6T"], - irontail: ["6T"], - lightscreen: ["7M", "7L50", "6M", "6L50"], - magnetrise: ["6T"], - mist: ["7L18", "6L18"], - naturepower: ["7M", "7L43", "6M", "6L43"], - outrage: ["6T"], - powdersnow: ["7L1", "6L1"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psychup: ["7M", "6M"], - raindance: ["7M", "6M"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "6M"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rockthrow: ["7L10", "7L1", "6L10"], - rocktomb: ["7M", "6M"], - round: ["7M", "7L30", "6M", "6L30"], - safeguard: ["7M", "6M"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - stealthrock: ["6T"], - stoneedge: ["7M", "6M"], - substitute: ["7M", "6M"], - swagger: ["7M", "6M"], - takedown: ["7L15", "6L15"], - thunder: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderwave: ["7M", "7L5", "7L1", "6M", "6L5"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], - zenheadbutt: ["6T"], + crabominable: {learnset: { + attract: ["7M"], + avalanche: ["7L29"], + blizzard: ["7M"], + block: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L17"], + bulkup: ["7M"], + bulldoze: ["7M"], + closecombat: ["7L49"], + confide: ["7M"], + dizzypunch: ["7L25"], + doubleteam: ["7M"], + drainpunch: ["7T"], + dualchop: ["7T"], + dynamicpunch: ["7L45"], + earthquake: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], + frostbreath: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hail: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icehammer: ["7L37"], + icepunch: ["7T", "7L1"], + icywind: ["7T"], + irondefense: ["7T", "7L42"], + ironhead: ["7T"], + leer: ["7L9", "7L1"], + payback: ["7M"], + poweruppunch: ["7L22"], + protect: ["7M"], + pursuit: ["7L13", "7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L33"], + rockslide: ["7M"], + rocksmash: ["7L5", "7L1"], + rocktomb: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + superpower: ["7T"], + swagger: ["7M"], + thief: ["7M"], + thunderpunch: ["7T"], + toxic: ["7M"], + workup: ["7M"], + zenheadbutt: ["7T"], }}, - sylveon: {learnset: { - attract: ["7M", "6M"], - babydolleyes: ["7L9", "6S1"], - calmmind: ["7M", "7S2", "6M"], - celebrate: ["6S0"], - confide: ["7M", "6M"], - covet: ["6T"], - cut: ["6M"], - dazzlinggleam: ["7M", "6M"], - dig: ["6M"], - disarmingvoice: ["7L1", "6L1", "6S1"], - doubleteam: ["7M", "6M"], - drainingkiss: ["7L20", "7S2", "6L20", "6S1"], - echoedvoice: ["7M", "6M"], - facade: ["7M", "6M"], - fairywind: ["7L1", "6L9", "6S0"], - flash: ["6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - healbell: ["6T"], - helpinghand: ["7L1", "6T", "6L1", "6S0"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "7S2", "6M"], - hypervoice: ["6T"], - irontail: ["6T"], - lastresort: ["7L41", "6T", "6L41"], - lightscreen: ["7M", "7L33", "6M", "6L33"], - magiccoat: ["6T"], - mistyterrain: ["7L29", "6L29"], - moonblast: ["7L37", "6L37"], - protect: ["7M", "6M"], - psychup: ["7M", "7L45", "6M", "6L45"], - psyshock: ["7M", "7S2", "6M"], - quickattack: ["7L13", "6L13", "6S1"], - raindance: ["7M", "6M"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - retaliate: ["6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - sandattack: ["7L5", "6L5", "6S0"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - skillswap: ["7L25", "6T", "6L25"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - swift: ["7L17", "6L17"], - tackle: ["7L1", "6L1"], - tailwhip: ["7L1", "6L1"], - toxic: ["7M", "6M"], + oricorio: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + agility: ["7L46"], + aircutter: ["7L13"], + airslash: ["7L36"], + attract: ["7M"], + batonpass: ["7L16"], + calmmind: ["7M"], + captivate: ["7L33", "7E"], + confide: ["7M"], + covet: ["7T"], + defog: ["7T"], + doubleslap: ["7L23"], + doubleteam: ["7M"], + embargo: ["7M"], + facade: ["7M"], + featherdance: ["7L20"], + fly: ["7M"], + frustration: ["7M"], + growl: ["7L4"], + helpinghand: ["7T", "7L10"], + hiddenpower: ["7M"], + hurricane: ["7L50"], + icywind: ["7T"], + mirrormove: ["7L43"], + peck: ["7L6"], + pluck: ["7E"], + pound: ["7L1"], + protect: ["7M"], + quash: ["7M"], + rest: ["7M"], + return: ["7M"], + revelationdance: ["7L40"], + roleplay: ["7T"], + roost: ["7M", "7L30"], + round: ["7M"], + safeguard: ["7M", "7E"], + sandstorm: ["7M"], + skyattack: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + steelwing: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwind: ["7T", "7E"], + taunt: ["7M"], + teeterdance: ["7L26"], + toxic: ["7M"], + uturn: ["7M"], workup: ["7M"], }}, - hawlucha: {learnset: { - acrobatics: ["7M", "6M"], - aerialace: ["7M", "7L16", "6M", "6L16"], - agility: ["7E", "6E"], - allyswitch: ["7E", "6E"], - attract: ["7M", "6M"], - batonpass: ["7E", "6E"], - bounce: ["7L32", "6T", "6L32"], - brickbreak: ["7M", "6M"], - bulkup: ["7M", "6M"], - confide: ["7M", "6M"], - cut: ["6M"], - detect: ["7L1", "6L1"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - drainpunch: ["6T"], - dualchop: ["6T"], - encore: ["7L20", "6L20"], - endeavor: ["7L36", "6T", "6L36"], - entrainment: ["7E", "6E"], - facade: ["7M", "6M"], - falseswipe: ["7M", "6M"], - featherdance: ["7L40", "6L40"], - firepunch: ["6T"], - fling: ["7M", "7L24", "6M", "6L24"], - fly: ["7M", "6M"], - flyingpress: ["7L28", "6L28"], - focusblast: ["7M", "6M"], - focuspunch: ["6T"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - helpinghand: ["6T"], - hiddenpower: ["7M", "6M"], - highjumpkick: ["7L44", "6L44"], - honeclaws: ["7L1", "6M", "6L1"], - ironhead: ["6T"], - karatechop: ["7L4", "6L4"], - lastresort: ["6T"], - lowkick: ["6T"], - lowsweep: ["7M", "6M"], - mefirst: ["7E", "6E"], - mudsport: ["7E", "6E"], - payback: ["7M", "6M"], - poisonjab: ["7M", "6M"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - quickguard: ["7E", "6E"], - raindance: ["7M", "6M"], - rest: ["7M", "6M"], - retaliate: ["6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - roost: ["7M", "7L12", "6M", "6L12"], - round: ["7M", "6M"], - secretpower: ["6M"], - skyattack: ["7L48", "6T", "6L48"], - skydrop: ["7M", "7L55", "6M", "6L55"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - steelwing: ["7M", "6M"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superpower: ["6T"], - swagger: ["7M", "6M"], - swordsdance: ["7M", "7L60", "6M", "6L60"], - tackle: ["7L1", "6L1"], - tailwind: ["6T"], - taunt: ["7M", "6M"], - thunderpunch: ["6T"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - wingattack: ["7L8", "6L8"], - workup: ["7M"], - xscissor: ["7M", "6M"], - zenheadbutt: ["6T"], + cutiefly: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M"], + aerialace: ["7M"], + afteryou: ["7T"], + allyswitch: ["7T"], + aromatherapy: ["7L36"], + attract: ["7M"], + batonpass: ["7E"], + bestow: ["7E"], + bugbite: ["7T"], + bugbuzz: ["7L26"], + calmmind: ["7M"], + confide: ["7M"], + covet: ["7T"], + dazzlinggleam: ["7M", "7L31"], + defog: ["7T"], + doubleteam: ["7M"], + drainingkiss: ["7L16"], + dreameater: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fairywind: ["7L4"], + frustration: ["7M"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + infestation: ["7M"], + lastresort: ["7T"], + leechlife: ["7M"], + lightscreen: ["7M"], + magicroom: ["7T"], + moonblast: ["7E"], + powder: ["7E"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + quiverdance: ["7L41"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + signalbeam: ["7T"], + silverwind: ["7L13"], + skillswap: ["7T", "7E"], + sleeptalk: ["7M"], + snore: ["7T"], + speedswap: ["7E"], + stickyweb: ["7E"], + strugglebug: ["7L10"], + stunspore: ["7L7"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L21"], + tailwind: ["7T"], + telekinesis: ["7T"], + thief: ["7M"], + toxic: ["7M"], + trick: ["7T"], + uturn: ["7M"], + wonderroom: ["7T"], + }}, + ribombee: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M"], + aerialace: ["7M"], + afteryou: ["7T"], + allyswitch: ["7T"], + aromatherapy: ["7L42"], + attract: ["7M"], + bugbite: ["7T"], + bugbuzz: ["7L28"], + calmmind: ["7M"], + confide: ["7M"], + covet: ["7T"], + dazzlinggleam: ["7M", "7L35"], + defog: ["7T"], + doubleteam: ["7M"], + drainingkiss: ["7L16"], + dreameater: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fairywind: ["7L4", "7L1"], + frustration: ["7M"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + infestation: ["7M"], + lastresort: ["7T"], + leechlife: ["7M"], + lightscreen: ["7M"], + magicroom: ["7T"], + naturepower: ["7M"], + pollenpuff: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + quiverdance: ["7L49"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + signalbeam: ["7T"], + silverwind: ["7L13"], + skillswap: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + strugglebug: ["7L10", "7L1"], + stunspore: ["7L7", "7L1"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L21"], + tailwind: ["7T"], + telekinesis: ["7T"], + thief: ["7M"], + toxic: ["7M"], + trick: ["7T"], + uturn: ["7M"], + wonderroom: ["7T"], + }}, + ribombeetotem: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M"], + aerialace: ["7M"], + afteryou: ["7T"], + allyswitch: ["7T"], + aromatherapy: ["7L42", "7S0"], + attract: ["7M"], + bugbite: ["7T"], + bugbuzz: ["7L28", "7S0"], + calmmind: ["7M"], + confide: ["7M"], + covet: ["7T"], + dazzlinggleam: ["7M", "7L35", "7S0"], + defog: ["7T"], + doubleteam: ["7M"], + drainingkiss: ["7L16"], + dreameater: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fairywind: ["7L4", "7L1"], + frustration: ["7M"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + infestation: ["7M"], + lastresort: ["7T"], + leechlife: ["7M"], + lightscreen: ["7M"], + magicroom: ["7T"], + naturepower: ["7M"], + pollenpuff: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + quiverdance: ["7L49", "7S0"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + signalbeam: ["7T"], + silverwind: ["7L13"], + skillswap: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + strugglebug: ["7L10", "7L1"], + stunspore: ["7L7", "7L1"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L21"], + tailwind: ["7T"], + telekinesis: ["7T"], + thief: ["7M"], + toxic: ["7M"], + trick: ["7T"], + uturn: ["7M"], + wonderroom: ["7T"], + }}, + rockruff: {learnset: { + attract: ["7M"], + bite: ["7L7"], + confide: ["7M"], + covet: ["7T"], + crunch: ["7L40"], + crushclaw: ["7E"], + doubleteam: ["7M"], + earthpower: ["7T"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + firefang: ["7E"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + leer: ["7L1"], + odorsleuth: ["7L18"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7L29"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48"], + substitute: ["7M"], + suckerpunch: ["7E"], + swagger: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + thrash: ["7E"], + thunderfang: ["7E"], + toxic: ["7M"], + zenheadbutt: ["7T"], + }}, + rockruffdusk: {learnset: { + attract: ["7M"], + bite: ["7L7", "7S0", "7S1"], + confide: ["7M"], + covet: ["7T"], + crunch: ["7L40"], + crushclaw: ["7E"], + doubleteam: ["7M"], + earthpower: ["7T"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + firefang: ["7E", "7S0"], + frustration: ["7M"], + happyhour: ["7S0", "7S1"], + hiddenpower: ["7M"], + howl: ["7L12"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + leer: ["7L1"], + odorsleuth: ["7L18"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7L29"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48"], + substitute: ["7M"], + suckerpunch: ["7E"], + swagger: ["7M"], + tackle: ["7L1", "7S0", "7S1"], + taunt: ["7M"], + thrash: ["7E"], + thunderfang: ["7E", "7S1"], + toxic: ["7M"], + zenheadbutt: ["7T"], }}, - dedenne: {learnset: { - aerialace: ["7M", "6M"], - attract: ["7M", "6M"], - charge: ["7L11", "6L11"], - chargebeam: ["7M", "7L34", "6M", "6L34"], - charm: ["7L14", "6L14"], - confide: ["7M", "6M"], - covet: ["7E", "6T", "6E"], - cut: ["6M"], - dig: ["6M"], - discharge: ["7L50", "6L50"], - doubleteam: ["7M", "6M"], - eerieimpulse: ["7E", "6E"], - electroweb: ["6T"], - entrainment: ["7L39", "6L39"], - facade: ["7M", "6M"], - flash: ["6M"], - fling: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - helpinghand: ["7E", "6T", "6E"], - hiddenpower: ["7M", "6M"], - irontail: ["6T"], - lastresort: ["6T"], - magnetrise: ["6T"], - naturalgift: ["7E", "6E"], - nuzzle: ["7L20", "6L20"], - paraboliccharge: ["7L17", "6L17"], - playrough: ["7L42", "6L42"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - recycle: ["6T"], - rest: ["7M", "7L30", "6M", "6L30"], - retaliate: ["6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - secretpower: ["6M"], - shockwave: ["6T"], - signalbeam: ["6T"], - sleeptalk: ["7M", "6M"], - snore: ["7L31", "6T", "6L31"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superfang: ["6T"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwhip: ["7L1", "6L1"], - thief: ["7M", "6M"], - thunder: ["7M", "7L45", "6M", "6L45"], - thunderbolt: ["7M", "6M"], - thunderpunch: ["6T"], - thundershock: ["7L7", "6L7"], - thunderwave: ["7M", "7L23", "6M", "6L23"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - voltswitch: ["7M", "7L26", "6M", "6L26"], - wildcharge: ["7M", "6M"], + lycanroc: {learnset: { + accelerock: ["7L1"], + attract: ["7M"], + bite: ["7L7", "7L1"], + brickbreak: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + covet: ["7T"], + crunch: ["7L40"], + doubleteam: ["7M"], + drillrun: ["7T"], + earthpower: ["7T"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + leer: ["7L1"], + odorsleuth: ["7L18"], + protect: ["7M"], + quickattack: ["7L1"], + quickguard: ["7L1"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4", "7L1"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7L29"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + zenheadbutt: ["7T"], }}, - carbink: {learnset: { - afteryou: ["6T"], - ancientpower: ["7L31", "6L31"], - calmmind: ["7M", "6M"], - confide: ["7M", "6M"], - covet: ["6T"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M"], - earthpower: ["6T"], - explosion: ["7M", "6M"], - facade: ["7M", "6M"], - flail: ["7L35", "6L35"], - flash: ["6M"], - frustration: ["7M", "6M"], - gravity: ["6T"], - guardsplit: ["7L27", "6L27"], - gyroball: ["7M", "6M"], - hail: ["7M", "6M"], - harden: ["7L1", "6L1"], - hiddenpower: ["7M", "6M"], - irondefense: ["6T"], - lightscreen: ["7M", "7L60", "6M", "6L60"], - magiccoat: ["6T"], - magnetrise: ["6T"], - moonblast: ["7L50", "6L50"], - naturepower: ["7M", "6M"], - powergem: ["7L46", "6L46"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psychup: ["7M", "6M"], - reflect: ["7M", "7L18", "6M", "6L18"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "6M"], - rockthrow: ["7L5", "6L5"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "7L70", "6M", "6L70"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - sharpen: ["7L8", "6L8"], - skillswap: ["7L40", "6T", "6L40"], - sleeptalk: ["7M", "6M"], - smackdown: ["7M", "7L12", "6M", "6L12"], - snore: ["6T"], - stealthrock: ["7L21", "6T", "6L21"], - stoneedge: ["7M", "7L49", "6M", "6L49"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - toxic: ["7M", "6M"], - trickroom: ["7M", "6M"], - wonderroom: ["6T"], + lycanrocmidnight: {learnset: { + attract: ["7M"], + bite: ["7L7", "7L1"], + brickbreak: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + counter: ["7L1"], + covet: ["7T"], + crunch: ["7L40"], + doubleteam: ["7M"], + dualchop: ["7T"], + earthpower: ["7T"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + firefang: ["7S0"], + firepunch: ["7T"], + focuspunch: ["7T"], + foulplay: ["7T"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + laserfocus: ["7T"], + lastresort: ["7T"], + leer: ["7L1"], + odorsleuth: ["7L18"], + outrage: ["7T"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L1"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4", "7L1"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7L29"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48", "7S0"], + substitute: ["7M"], + suckerpunch: ["7S0"], + swagger: ["7M"], + swordsdance: ["7M", "7S0"], + tackle: ["7L1"], + taunt: ["7M", "7L1"], + throatchop: ["7T"], + thunderpunch: ["7T"], + toxic: ["7M"], + uproar: ["7T"], + zenheadbutt: ["7T"], }}, - goomy: {learnset: { - absorb: ["7L5", "6L5"], - acidarmor: ["7E", "6E"], - attract: ["7M", "6M"], - bide: ["7L13", "6L13"], - bodyslam: ["7L32", "7S0", "6L32"], - bubble: ["7L1", "6L1"], - confide: ["7M", "6M"], - counter: ["7E", "7S0", "6E"], - curse: ["7E", "6E"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonbreath: ["7L18", "6L18"], - dragonpulse: ["7L42", "7S0", "6T", "6L42"], - endure: ["7E", "6E"], - facade: ["7M", "6M"], - flail: ["7L28", "6L28"], - frustration: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - infestation: ["7M", "6M"], - irontail: ["7E", "6T", "6E"], - muddywater: ["7L38", "6L38"], - outrage: ["6T"], - poisontail: ["7E", "6E"], - protect: ["7M", "7L9", "6M", "6L9"], - raindance: ["7M", "7L25", "6M", "6L25"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - round: ["7M", "6M"], - secretpower: ["6M"], - shockwave: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - snore: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - thunderbolt: ["7M", "6M"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], + lycanrocdusk: {learnset: { + accelerock: ["7L1"], + attract: ["7M"], + bite: ["7L7", "7L1"], + brickbreak: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + counter: ["7L1"], + covet: ["7T"], + crunch: ["7L40"], + doubleteam: ["7M"], + drillrun: ["7T"], + earthpower: ["7T"], + echoedvoice: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + leer: ["7L1"], + odorsleuth: ["7L18"], + outrage: ["7T"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4", "7L1"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7L29"], + stompingtantrum: ["7T"], + stoneedge: ["7M", "7L48"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + thrash: ["7L1", "7L1"], + toxic: ["7M"], + zenheadbutt: ["7T"], }}, - sliggoo: {learnset: { - absorb: ["7L5", "7L1", "6L5"], - attract: ["7M", "6M"], - bide: ["7L13", "6L13"], - blizzard: ["7M", "6M"], - bodyslam: ["7L32", "6L32"], - bubble: ["7L1", "6L1"], - confide: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonbreath: ["7L18", "6L18"], - dragonpulse: ["7L47", "6T", "6L47"], - facade: ["7M", "6M"], - flail: ["7L28", "6L28"], - frustration: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - icebeam: ["7M", "6M"], - infestation: ["7M", "6M"], - irontail: ["6T"], - muddywater: ["7L38", "6L38"], - outrage: ["6T"], - protect: ["7M", "7L9", "6M", "6L9"], - raindance: ["7M", "7L25", "6M", "6L25"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - round: ["7M", "6M"], - secretpower: ["6M"], - shockwave: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - snore: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - thunderbolt: ["7M", "6M"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], + wishiwashi: {learnset: { + aquaring: ["7L17"], + aquatail: ["7T", "7L38"], + attract: ["7M"], + beatup: ["7L33"], + brine: ["7L14"], + bulldoze: ["7M"], + confide: ["7M"], + covet: ["7T"], + dive: ["7L30"], + doubleedge: ["7L41"], + doubleteam: ["7M"], + earthquake: ["7M"], + endeavor: ["7T", "7L49"], + facade: ["7M"], + feintattack: ["7L9"], + frustration: ["7M"], + growl: ["7L1"], + hail: ["7M"], + helpinghand: ["7T", "7L6"], + hiddenpower: ["7M"], + hydropump: ["7L54"], + icebeam: ["7M"], + irontail: ["7T"], + mist: ["7E"], + muddywater: ["7E"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + soak: ["7L46"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + takedown: ["7L25"], + tearfullook: ["7L22"], + toxic: ["7M"], + uturn: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpulse: ["7T", "7E"], + watersport: ["7E"], + whirlpool: ["7E"], + }}, + mareanie: {learnset: { + afteryou: ["7T"], + attract: ["7M"], + bite: ["7L9"], + blizzard: ["7M"], + confide: ["7M"], + covet: ["7T"], + doubleteam: ["7M"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gastroacid: ["7T"], + gunkshot: ["7T"], + hail: ["7M"], + haze: ["7E"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + infestation: ["7M"], + irondefense: ["7T"], + knockoff: ["7T"], + liquidation: ["7T", "7L49"], + magiccoat: ["7T"], + painsplit: ["7T"], + payback: ["7M"], + peck: ["7L5"], + pinmissile: ["7L45"], + poisonjab: ["7M", "7L37"], + poisonsting: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + recover: ["7L33"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snatch: ["7T"], + snore: ["7T"], + spikecannon: ["7L29"], + spite: ["7T"], + spitup: ["7E"], + stockpile: ["7E", "7S0"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + swallow: ["7E", "7S0"], + toxic: ["7M", "7L21", "7S0"], + toxicspikes: ["7L13"], + venomdrench: ["7L41"], + venoshock: ["7M", "7L25"], + waterpulse: ["7T"], + wideguard: ["7L17"], }}, - goodra: {learnset: { - absorb: ["7L5", "7L1", "6L5"], - aquatail: ["7L1", "6T", "6L50"], - attract: ["7M", "6M"], - bide: ["7L13", "6L13"], - blizzard: ["7M", "6M"], - bodyslam: ["7L32", "6L32"], - brutalswing: ["7M"], - bubble: ["7L1", "6L1"], - bulldoze: ["7M", "6M"], - confide: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonbreath: ["7L18", "6L18"], - dragonpulse: ["7L47", "6T", "6L47"], - dragontail: ["7M", "6M"], - earthquake: ["7M", "6M"], - facade: ["7M", "6M"], - feint: ["7L1", "6L1"], - fireblast: ["7M", "6M"], - firepunch: ["6T"], - flail: ["7L28", "6L28"], - flamethrower: ["7M", "6M"], - focusblast: ["7M", "6M"], - focuspunch: ["6T"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - hail: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - icebeam: ["7M", "6M"], - incinerate: ["6M"], - infestation: ["7M", "6M"], - irontail: ["6T"], - muddywater: ["7L38", "6L38"], - outrage: ["7L55", "7L1", "6T", "6L1"], - powerwhip: ["7L50", "6L55"], - protect: ["7M", "7L9", "7L1", "6M", "6L9"], - raindance: ["7M", "7L25", "6M", "6L25"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - round: ["7M", "6M"], - secretpower: ["6M"], - shockwave: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - snore: ["6T"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superpower: ["6T"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - thunder: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderpunch: ["6T"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], + toxapex: {learnset: { + afteryou: ["7T"], + attract: ["7M"], + banefulbunker: ["7L1"], + bite: ["7L9", "7L1"], + blizzard: ["7M"], + block: ["7T"], + confide: ["7M"], + covet: ["7T"], + doubleteam: ["7M"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gastroacid: ["7T"], + gunkshot: ["7T"], + hail: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + infestation: ["7M"], + irondefense: ["7T"], + knockoff: ["7T"], + lightscreen: ["7M"], + liquidation: ["7T", "7L58"], + magiccoat: ["7T"], + painsplit: ["7T"], + payback: ["7M"], + peck: ["7L5", "7L1"], + pinmissile: ["7L51"], + poisonjab: ["7M", "7L37"], + poisonsting: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + recover: ["7L33"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smackdown: ["7M"], + snatch: ["7T"], + snore: ["7T"], + spikecannon: ["7L29"], + spite: ["7T"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M", "7L21"], + toxicspikes: ["7L13", "7L1"], + venomdrench: ["7L44"], + venoshock: ["7M", "7L25"], + waterpulse: ["7T"], + wideguard: ["7L17"], }}, - klefki: {learnset: { - astonish: ["7L8", "6L8"], - attract: ["7M", "6M"], - calmmind: ["7M", "6M"], - confide: ["7M", "6M"], - covet: ["6T"], - craftyshield: ["7L23", "6L23"], - cut: ["6M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M"], - drainingkiss: ["7L18", "6L18"], - facade: ["7M", "6M"], - fairylock: ["7L1", "6L1"], - fairywind: ["7L5", "6L5"], - flashcannon: ["7M", "6M"], - foulplay: ["7L27", "6T", "6L27"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - healblock: ["7L50", "6L50"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - imprison: ["7L36", "6L36"], - irondefense: ["7E", "6T", "6E"], - lastresort: ["6T"], - lightscreen: ["7M", "6M"], - lockon: ["7E", "6E"], - magiccoat: ["6T"], - magicroom: ["7L44", "6T", "6L44"], - magnetrise: ["6T"], - metalsound: ["7L12", "6L12"], - mirrorshot: ["7L34", "6L34"], - playrough: ["7L43", "6L43"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psychup: ["7M", "6M"], - psyshock: ["7M", "6M"], - raindance: ["7M", "6M"], - recycle: ["7L40", "6T", "6L40"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - spikes: ["7L15", "6L15"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - switcheroo: ["7E", "6E"], - tackle: ["7L1", "6L1"], - thief: ["7M", "7E", "6M", "6E"], - thunderwave: ["7M", "6M"], - torment: ["7M", "7L32", "6M", "6L32"], - toxic: ["7M", "6M"], + mudbray: {learnset: { + attract: ["7M"], + bide: ["7L22"], + bodyslam: ["7E"], + bulldoze: ["7M", "7L10"], + closecombat: ["7E"], + confide: ["7M"], + counter: ["7L36"], + doubleedge: ["7E"], + doublekick: ["7L15"], + doubleteam: ["7M"], + earthpower: ["7T"], + earthquake: ["7M", "7L38"], + endeavor: ["7T"], + facade: ["7M"], + frustration: ["7M"], + heavyslam: ["7L31"], + hiddenpower: ["7M"], + highhorsepower: ["7L24"], + irondefense: ["7T", "7L29"], + ironhead: ["7T"], + lowkick: ["7T"], + lowsweep: ["7M"], + magnitude: ["7E"], + megakick: ["7L43"], + mudbomb: ["7E"], + mudslap: ["7L1"], + mudsport: ["7L3"], + payback: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L8"], + round: ["7M"], + sandstorm: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + stealthrock: ["7T"], + stomp: ["7L17"], + stompingtantrum: ["7T"], + substitute: ["7M"], + superpower: ["7T", "7L45"], + swagger: ["7M"], + toxic: ["7M"], }}, - phantump: {learnset: { - astonish: ["7L5", "6L5"], - attract: ["7M", "6M"], - bestow: ["7E", "6E"], - bulldoze: ["7M", "6M"], - confide: ["7M", "6M"], - confuseray: ["7L1", "6L1"], - curse: ["7L28", "6L28"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - destinybond: ["7L39", "6L39"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - energyball: ["7M", "6M"], - facade: ["7M", "6M"], - feintattack: ["7L19", "6L19"], - forestscurse: ["7L35", "6L35"], - foulplay: ["6T"], - frustration: ["7M", "6M"], - gigadrain: ["6T"], - grassknot: ["7M", "6M"], - growth: ["7L8", "6L8"], - grudge: ["7E", "6E"], - hiddenpower: ["7M", "6M"], - hornleech: ["7L54", "6L54"], - imprison: ["7E", "6E"], - ingrain: ["7L13", "6L13"], - leechseed: ["7L23", "6L23"], - magiccoat: ["6T"], - naturepower: ["7M", "6M"], - painsplit: ["6T"], - phantomforce: ["7L45", "6L45"], - poisonjab: ["7M", "6M"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - roleplay: ["6T"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - secretpower: ["6M"], - seedbomb: ["6T"], - shadowball: ["7M", "6M"], - shadowclaw: ["7M", "6M"], - skillswap: ["6T"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - spite: ["6T"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - thief: ["7M", "6M"], - toxic: ["7M", "6M"], - trick: ["6T"], - trickroom: ["7M", "6M"], - venomdrench: ["7E", "6E"], - willowisp: ["7M", "7L31", "6M", "6L31"], - woodhammer: ["7L49", "6L49"], - worryseed: ["6T"], + mudsdale: {learnset: { + attract: ["7M"], + bide: ["7L22"], + bulldoze: ["7M", "7L10", "7L1"], + confide: ["7M"], + counter: ["7L42"], + doublekick: ["7L15"], + doubleteam: ["7M"], + earthpower: ["7T"], + earthquake: ["7M", "7L47"], + endeavor: ["7T"], + facade: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + heavyslam: ["7L34"], + hiddenpower: ["7M"], + highhorsepower: ["7L24"], + irondefense: ["7T", "7L29"], + ironhead: ["7T"], + lowkick: ["7T"], + lowsweep: ["7M"], + megakick: ["7L55"], + mudslap: ["7L1"], + mudsport: ["7L3", "7L1"], + payback: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L8", "7L1"], + round: ["7M"], + sandstorm: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + stealthrock: ["7T"], + stomp: ["7L17"], + stompingtantrum: ["7T"], + substitute: ["7M"], + superpower: ["7T", "7L60"], + swagger: ["7M"], + toxic: ["7M"], }}, - trevenant: {learnset: { - astonish: ["7L5", "7L1", "6L5"], - attract: ["7M", "6M"], - block: ["6T"], - brutalswing: ["7M"], - bulldoze: ["7M", "6M"], - calmmind: ["7M", "6M"], - confide: ["7M", "6M"], - confuseray: ["7L1", "6L1"], - curse: ["7L28", "6L28"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - destinybond: ["7L39", "6L39"], - dig: ["6M"], - doubleteam: ["7M", "6M"], - drainpunch: ["6T"], - dreameater: ["7M", "6M"], - earthquake: ["7M", "6M"], - energyball: ["7M", "6M"], - facade: ["7M", "6M"], - feintattack: ["7L19", "6L19"], - focusblast: ["7M", "6M"], - forestscurse: ["7L35", "6L35"], - foulplay: ["6T"], - frustration: ["7M", "6M"], - gigadrain: ["6T"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - growth: ["7L8", "7L1", "6L8"], - hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - hornleech: ["7L54", "7L1", "6L1"], - hyperbeam: ["7M", "6M"], - ingrain: ["7L13", "6L13"], - leechseed: ["7L23", "6L23"], - magiccoat: ["6T"], - naturepower: ["7M", "6M"], - painsplit: ["6T"], - phantomforce: ["7L45", "6L45"], - poisonjab: ["7M", "6M"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - roleplay: ["6T"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - secretpower: ["6M"], - seedbomb: ["6T"], - shadowball: ["7M", "6M"], - shadowclaw: ["7M", "7L1", "6M", "6L55"], - skillswap: ["6T"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - spite: ["6T"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - thief: ["7M", "6M"], - toxic: ["7M", "6M"], - trick: ["6T"], - trickroom: ["7M", "6M"], - willowisp: ["7M", "7L31", "6M", "6L31"], - woodhammer: ["7L49", "6L49"], - worryseed: ["6T"], - xscissor: ["7M", "6M"], + dewpider: {learnset: { + aquaring: ["7L24"], + attract: ["7M"], + aurorabeam: ["7E"], + bite: ["7L21"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L16"], + bugbite: ["7T", "7L13"], + confide: ["7M"], + crunch: ["7L32"], + doubleteam: ["7M"], + entrainment: ["7L48"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigadrain: ["7T"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + infestation: ["7M", "7L5"], + irondefense: ["7T"], + leechlife: ["7M", "7L29"], + liquidation: ["7T", "7L45"], + lunge: ["7L37"], + magiccoat: ["7T"], + magicroom: ["7T"], + mirrorcoat: ["7L40"], + poisonjab: ["7M"], + powersplit: ["7E"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + signalbeam: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + spiderweb: ["7L8"], + spitup: ["7E"], + stickyweb: ["7E"], + stockpile: ["7E"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + waterpulse: ["7T"], + watersport: ["7L1"], + wonderroom: ["7T"], + xscissor: ["7M"], }}, - pumpkaboo: {learnset: { - astonish: ["7L1", "6L1"], - attract: ["7M", "6M"], - bestow: ["7E", "6E"], - bulletseed: ["7L26", "6L26"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - confuseray: ["7L1", "6L1"], - darkpulse: ["7M", "6M"], - destinybond: ["7E", "6E"], - disable: ["7E", "6E"], - doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - energyball: ["7M", "6M"], - explosion: ["7M", "6M"], - facade: ["7M", "6M"], - fireblast: ["7M", "6M"], - flamecharge: ["7M", "6M"], - flamethrower: ["7M", "6M"], - flash: ["6M"], - foulplay: ["6T"], - frustration: ["7M", "6M"], - gigadrain: ["6T"], - grassknot: ["7M", "6M"], - gyroball: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - incinerate: ["6M"], - leechseed: ["7L20", "6L20"], - lightscreen: ["7M", "6M"], - magiccoat: ["6T"], - naturepower: ["7M", "6M"], - painsplit: ["7L42", "6T", "6L42"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - razorleaf: ["7L16", "6L16"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - roleplay: ["6T"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - scaryface: ["7L4", "6L4"], - secretpower: ["6M"], - seedbomb: ["7L48", "6T", "6L48"], - shadowball: ["7M", "7L36", "6M", "6L36"], - shadowsneak: ["7L30", "6L30"], - skillswap: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - solarbeam: ["7M", "6M"], - spite: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - synthesis: ["6T"], - thief: ["7M", "6M"], - toxic: ["7M", "6M"], - trick: ["7L1", "6T", "6L1"], - trickortreat: ["7L40", "7L23", "7L6", "6L6"], - trickroom: ["7M", "6M"], - willowisp: ["7M", "6M"], - worryseed: ["7L11", "6T", "6L11"], + araquanid: {learnset: { + aquaring: ["7L26"], + attract: ["7M"], + bite: ["7L21"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L16"], + bugbite: ["7T", "7L13", "7L1"], + confide: ["7M"], + crunch: ["7L38"], + doubleteam: ["7M"], + entrainment: ["7L62"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigadrain: ["7T"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + infestation: ["7M", "7L5", "7L1"], + irondefense: ["7T"], + laserfocus: ["7T"], + leechlife: ["7M", "7L33"], + liquidation: ["7T", "7L57"], + lunge: ["7L45"], + magiccoat: ["7T"], + magicroom: ["7T"], + mirrorcoat: ["7L50"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + signalbeam: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + soak: ["7L1"], + spiderweb: ["7L8", "7L1"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + waterpulse: ["7T"], + wideguard: ["7L1"], + wonderroom: ["7T"], + xscissor: ["7M"], }}, - gourgeist: {learnset: { - astonish: ["7L1", "6L1"], - attract: ["7M", "6M"], - bulletseed: ["7L26", "6L26"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - confuseray: ["7L1", "6L1"], - darkpulse: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dreameater: ["7M", "6M"], - energyball: ["7M", "6M"], - explosion: ["7M", "7L70", "7L1", "6M", "6L1"], - facade: ["7M", "6M"], - fireblast: ["7M", "6M"], - flamecharge: ["7M", "6M"], - flamethrower: ["7M", "6M"], - flash: ["6M"], - focusblast: ["7M", "6M"], - foulplay: ["6T"], - frustration: ["7M", "6M"], - gigadrain: ["6T"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - gyroball: ["7M", "6M"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - incinerate: ["6M"], - leechseed: ["7L20", "6L20"], - lightscreen: ["7M", "6M"], - magiccoat: ["6T"], - naturepower: ["7M", "6M"], - painsplit: ["7L42", "6T", "6L42"], - phantomforce: ["7L57", "7L1", "6L1"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - razorleaf: ["7L16", "6L16"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - roleplay: ["6T"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - scaryface: ["7L4", "7L1", "6L4"], - secretpower: ["6M"], - seedbomb: ["7L48", "6T", "6L48"], - shadowball: ["7M", "7L36", "6M", "6L36"], - shadowsneak: ["7L30", "6L30"], - skillswap: ["6T"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - solarbeam: ["7M", "6M"], - spite: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - synthesis: ["6T"], - thief: ["7M", "6M"], - toxic: ["7M", "6M"], - trick: ["7L1", "6T", "6L1"], - trickortreat: ["7L63", "7L40", "7L23", "7L6", "6L6"], - trickroom: ["7M", "6M"], - willowisp: ["7M", "6M"], - worryseed: ["7L11", "6T", "6L11"], + araquanidtotem: {learnset: { + aquaring: ["7L26"], + attract: ["7M"], + bite: ["7L21", "7S0"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L16", "7S0"], + bugbite: ["7T", "7L13", "7L1", "7S0"], + confide: ["7M"], + crunch: ["7L38"], + doubleteam: ["7M"], + entrainment: ["7L62"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigadrain: ["7T"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + infestation: ["7M", "7L5", "7L1"], + irondefense: ["7T"], + laserfocus: ["7T"], + leechlife: ["7M", "7L33"], + liquidation: ["7T", "7L57"], + lunge: ["7L45"], + magiccoat: ["7T"], + magicroom: ["7T"], + mirrorcoat: ["7L50"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + signalbeam: ["7T"], + sleeptalk: ["7M"], + snore: ["7T"], + soak: ["7L1"], + spiderweb: ["7L8", "7L1", "7S0"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + waterpulse: ["7T"], + wideguard: ["7L1"], + wonderroom: ["7T"], + xscissor: ["7M"], }}, - bergmite: {learnset: { - afteryou: ["6T"], - attract: ["7M", "6M"], - avalanche: ["7L39", "6L39"], - barrier: ["7E", "6E"], - bite: ["7L1", "6L1"], - blizzard: ["7M", "7L43", "6M", "6L43"], - confide: ["7M", "6M"], - curse: ["7L22", "6L22"], - doubleedge: ["7L49", "6L49"], - doubleteam: ["7M", "6M"], - facade: ["7M", "6M"], - flash: ["6M"], - flashcannon: ["7M", "6M"], - frostbreath: ["7M", "6M"], - frustration: ["7M", "6M"], - gyroball: ["7M", "6M"], - hail: ["7M", "6M"], - harden: ["7L1", "6L1"], - hiddenpower: ["7M", "6M"], - iceball: ["7L30", "6L30"], - icebeam: ["7M", "6M"], - icefang: ["7L26", "6L26"], - icywind: ["7L10", "6T", "6L10"], - irondefense: ["6T"], - mirrorcoat: ["7E", "6E"], - mist: ["7E", "6E"], - powdersnow: ["7L5", "6L5"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - rapidspin: ["7L35", "6L35"], - recover: ["7L47", "7E", "6L47", "6E"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - secretpower: ["6M"], - sharpen: ["7L20", "6L20"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - takedown: ["7L15", "6L15"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], + fomantis: {learnset: { + aromatherapy: ["7E"], + attract: ["7M"], + bugbite: ["7T"], + confide: ["7M"], + defog: ["7T", "7E"], + doubleteam: ["7M"], + dualchop: ["7T"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + frustration: ["7M"], + furycutter: ["7L1"], + gigadrain: ["7T", "7E"], + grassknot: ["7M"], + growth: ["7L14"], + hiddenpower: ["7M"], + ingrain: ["7L19"], + leafage: ["7L5"], + leafblade: ["7L23"], + leafstorm: ["7E"], + leechlife: ["7M"], + naturepower: ["7M"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + razorleaf: ["7L10"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + signalbeam: ["7T"], + slash: ["7L32"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M", "7L41"], + substitute: ["7M"], + sunnyday: ["7M", "7L46"], + swagger: ["7M"], + sweetscent: ["7L37"], + swordsdance: ["7M"], + synthesis: ["7T", "7L28"], + toxic: ["7M"], + weatherball: ["7E"], + worryseed: ["7T"], + xscissor: ["7M"], }}, - avalugg: {learnset: { - afteryou: ["6T"], - attract: ["7M", "6M"], - avalanche: ["7L42", "6L42"], - bite: ["7L1", "6L1"], - blizzard: ["7M", "7L46", "6M", "6L46"], - block: ["6T"], - bodyslam: ["7L1"], - bulldoze: ["7M", "6M"], - confide: ["7M", "6M"], - crunch: ["7L65", "7L1", "6L1"], - curse: ["7L22", "6L22"], - doubleedge: ["7L56", "6L56"], - doubleteam: ["7M", "6M"], - earthquake: ["7M", "6M"], - facade: ["7M", "6M"], - flash: ["6M"], - flashcannon: ["7M", "6M"], - frostbreath: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - gyroball: ["7M", "6M"], - hail: ["7M", "6M"], - harden: ["7L1", "6L1"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - iceball: ["7L30", "6L30"], - icebeam: ["7M", "6M"], - icefang: ["7L26", "6L26"], - icywind: ["7L10", "6T", "6L10"], - irondefense: ["7L1", "6T", "6L1"], - ironhead: ["6T"], - powdersnow: ["7L5", "7L1", "6L5"], - protect: ["7M", "6M"], - raindance: ["7M", "6M"], - rapidspin: ["7L35", "6L35"], - recover: ["7L51", "6L51"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "6M"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - secretpower: ["6M"], - sharpen: ["7L20", "6L20"], - skullbash: ["7L60", "7L1", "6L1"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - superpower: ["6T"], - surf: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - takedown: ["7L15", "6L15"], - toxic: ["7M", "6M"], - waterpulse: ["6T"], + lurantis: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + brickbreak: ["7M"], + bugbite: ["7T"], + confide: ["7M"], + defog: ["7T"], + doubleteam: ["7M"], + dualchop: ["7T"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + frustration: ["7M"], + furycutter: ["7L1"], + gigadrain: ["7T"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growth: ["7L14", "7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ingrain: ["7L19"], + knockoff: ["7T"], + laserfocus: ["7T"], + leafage: ["7L5", "7L1"], + leafblade: ["7L23"], + leechlife: ["7M"], + lowsweep: ["7M"], + naturepower: ["7M"], + nightslash: ["7L1"], + payback: ["7M"], + petalblizzard: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + razorleaf: ["7L10", "7L1"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + signalbeam: ["7T"], + slash: ["7L32"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + solarblade: ["7L47"], + substitute: ["7M"], + sunnyday: ["7M", "7L55"], + superpower: ["7T"], + swagger: ["7M"], + sweetscent: ["7L40"], + swordsdance: ["7M"], + synthesis: ["7T", "7L28"], + toxic: ["7M"], + worryseed: ["7T"], + xscissor: ["7M", "7L1"], }}, - noibat: {learnset: { - absorb: ["7L5"], - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], - agility: ["7L18", "6L18"], - aircutter: ["7L23", "6L23"], - airslash: ["7L48", "6L48"], - attract: ["7M", "6M"], - bite: ["7L13", "6L13"], - brickbreak: ["7M", "6M"], - confide: ["7M", "6M"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonpulse: ["6T"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - facade: ["7M", "6M"], - fly: ["7M", "6M"], - frustration: ["7M", "6M"], - gust: ["7L11", "6L11"], - heatwave: ["6T"], - hiddenpower: ["7M", "6M"], - hurricane: ["7L58", "6L58"], - hypervoice: ["6T"], - irontail: ["6T"], - leechlife: ["7M", "6L5"], - outrage: ["7E", "6T", "6E"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - razorwind: ["7L31", "6L31"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roost: ["7M", "7L27", "6M", "6L27"], - round: ["7M", "6M"], - screech: ["7L1", "6L1"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - shadowclaw: ["7M", "6M"], - skyattack: ["6T"], - sleeptalk: ["7M", "6M"], - snatch: ["7E", "6T", "6E"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - steelwing: ["7M", "6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superfang: ["7L43", "6T", "6L43"], - supersonic: ["7L1", "6L1"], - swagger: ["7M", "6M"], - switcheroo: ["7E", "6E"], - tackle: ["7L1", "6L1"], - tailwind: ["7L35", "7E", "6T", "6L35", "6E"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - uproar: ["6T"], - uturn: ["7M", "6M"], - waterpulse: ["6T"], - whirlwind: ["7L40", "6L40"], - wildcharge: ["7M", "6M"], - wingattack: ["7L16", "6L16"], - xscissor: ["7M", "6M"], + lurantistotem: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + brickbreak: ["7M"], + bugbite: ["7T"], + confide: ["7M"], + defog: ["7T"], + doubleteam: ["7M"], + dualchop: ["7T"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + frustration: ["7M"], + furycutter: ["7L1"], + gigadrain: ["7T"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growth: ["7L14", "7L1", "7S0"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ingrain: ["7L19", "7S0"], + knockoff: ["7T"], + laserfocus: ["7T"], + leafage: ["7L5", "7L1"], + leafblade: ["7L23", "7S0"], + leechlife: ["7M"], + lowsweep: ["7M"], + naturepower: ["7M"], + nightslash: ["7L1"], + payback: ["7M"], + petalblizzard: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + razorleaf: ["7L10", "7L1"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + signalbeam: ["7T"], + slash: ["7L32"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + solarblade: ["7L47"], + substitute: ["7M"], + sunnyday: ["7M", "7L55"], + superpower: ["7T"], + swagger: ["7M"], + sweetscent: ["7L40"], + swordsdance: ["7M"], + synthesis: ["7T", "7L28", "7S0"], + toxic: ["7M"], + worryseed: ["7T"], + xscissor: ["7M", "7L1"], }}, - noivern: {learnset: { - absorb: ["7L5", "7L1"], - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], - agility: ["7L18", "6L18"], - aircutter: ["7L23", "6L23"], - airslash: ["7L53", "6L53"], - attract: ["7M", "6M"], - bite: ["7L13", "6L13"], - boomburst: ["7L75", "7L1", "6L1"], - brickbreak: ["7M", "6M"], - confide: ["7M", "6M"], - cut: ["6M"], - darkpulse: ["7M", "6M"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonclaw: ["7M", "6M"], - dragonpulse: ["7L70", "7L1", "6T", "6L1"], - dreameater: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - facade: ["7M", "6M"], - flamethrower: ["7M", "6M"], - fly: ["7M", "6M"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - gust: ["7L11", "6L11"], - heatwave: ["6T"], - hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - hurricane: ["7L62", "7L1", "6L1"], - hyperbeam: ["7M", "6M"], - hypervoice: ["6T"], - irontail: ["6T"], - leechlife: ["7M", "6L5"], - moonlight: ["7L1", "6L1"], - outrage: ["6T"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - razorwind: ["7L31", "6L31"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roost: ["7M", "7L27", "6M", "6L27"], - round: ["7M", "6M"], - screech: ["7L1", "6L1"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - shadowclaw: ["7M", "6M"], - skyattack: ["6T"], - sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - steelwing: ["7M", "6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superfang: ["7L43", "6T", "6L43"], - supersonic: ["7L1", "6L1"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - tailwind: ["7L35", "6T", "6L35"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - uproar: ["6T"], - uturn: ["7M", "6M"], - waterpulse: ["6T"], - whirlwind: ["7L40", "6L40"], - wildcharge: ["7M", "6M"], - wingattack: ["7L16", "6L16"], - xscissor: ["7M", "6M"], + morelull: {learnset: { + absorb: ["7L1"], + afteryou: ["7T"], + amnesia: ["7E"], + astonish: ["7L4"], + attract: ["7M"], + confide: ["7M"], + confuseray: ["7L25"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M", "7L43"], + energyball: ["7M"], + flash: ["7L8"], + frustration: ["7M"], + gigadrain: ["7T", "7L29"], + grassknot: ["7M"], + growth: ["7E"], + hiddenpower: ["7M"], + ingrain: ["7L22"], + leechseed: ["7E"], + lightscreen: ["7M"], + magiccoat: ["7T"], + magicroom: ["7T"], + megadrain: ["7L15"], + moonblast: ["7L39"], + moonlight: ["7L11"], + naturepower: ["7M"], + poisonpowder: ["7E"], + protect: ["7M"], + recycle: ["7T"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + signalbeam: ["7T"], + sleeppowder: ["7L18"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + spore: ["7L36"], + spotlight: ["7L46"], + strengthsap: ["7L32"], + stunspore: ["7E"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + synthesis: ["7T"], + thunderwave: ["7M"], + toxic: ["7M"], + wonderroom: ["7T"], + worryseed: ["7T"], }}, - xerneas: {learnset: { - aromatherapy: ["7L1", "6L1", "6S1"], - aurorabeam: ["7L10", "6L10"], - block: ["6T"], - calmmind: ["7M", "6M"], - closecombat: ["7L80", "6L80"], - confide: ["7M", "6M"], - cut: ["6M"], - dazzlinggleam: ["7M", "6M"], - doubleteam: ["7M", "6M"], - echoedvoice: ["7M", "6M"], - endeavor: ["6T"], - facade: ["7M", "6M"], - flash: ["6M"], - flashcannon: ["7M", "6M"], - focusblast: ["7M", "6M", "6S1"], - frustration: ["7M", "6M"], - geomancy: ["7L26", "6L26", "6S0", "6S1"], - gigaimpact: ["7M", "7L88", "6M", "6L88"], - grassknot: ["7M", "6M"], - gravity: ["7L18", "6T", "6L18", "6S0"], - hail: ["7M", "6M"], - healpulse: ["7L1", "6L1"], - hiddenpower: ["7M", "6M"], - hornleech: ["7L55", "6L55"], - hyperbeam: ["7M", "6M"], - hypervoice: ["6T"], - ingrain: ["7L1", "6L1"], - lightscreen: ["7M", "7L5", "6M", "6L5"], - megahorn: ["7L44", "6L44", "6S0"], - mistyterrain: ["7L63", "6L63"], - moonblast: ["7L35", "6L35", "6S0", "6S1"], - naturepower: ["7M", "7L72", "6M", "6L72"], - nightslash: ["7L51", "6L51"], - outrage: ["7L93", "6T", "6L93"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psychup: ["7M", "7L59", "6M", "6L59"], - psyshock: ["7M", "6M"], - raindance: ["7M", "6M"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "6M"], - rockslide: ["7M", "6M"], - round: ["7M", "6M"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - snore: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - takedown: ["7L1", "6L1"], - thunder: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderwave: ["7M", "6M"], - toxic: ["7M", "6M"], - wonderroom: ["6T"], - zenheadbutt: ["6T"], + shiinotic: {learnset: { + absorb: ["7L1"], + afteryou: ["7T"], + astonish: ["7L4", "7L1"], + attract: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + confuseray: ["7L26"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M", "7L49"], + energyball: ["7M"], + flash: ["7L8", "7L1"], + frustration: ["7M"], + gigadrain: ["7T", "7L31"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + ingrain: ["7L22", "7L1"], + lightscreen: ["7M"], + magiccoat: ["7T"], + magicroom: ["7T"], + megadrain: ["7L15"], + moonblast: ["7L44"], + moonlight: ["7L11"], + naturepower: ["7M"], + protect: ["7M"], + recycle: ["7T"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], + signalbeam: ["7T"], + sleeppowder: ["7L18"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + spore: ["7L40"], + spotlight: ["7L53"], + strengthsap: ["7L35"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + synthesis: ["7T"], + thunderwave: ["7M"], + toxic: ["7M"], + wonderroom: ["7T"], + worryseed: ["7T"], }}, - yveltal: {learnset: { - acrobatics: ["7M", "6M"], - aerialace: ["7M", "6M"], - airslash: ["7L10", "6L10"], - block: ["6T"], - confide: ["7M", "6M"], - cut: ["6M"], - darkpulse: ["7M", "7L44", "6M", "6L44", "6S0", "6S1"], - disable: ["7L35", "6L35", "6S0"], - doubleteam: ["7M", "7L5", "6M", "6L5"], - dragonclaw: ["7M", "6M"], - dragonrush: ["7L63", "6L63"], - dreameater: ["7M", "6M"], - embargo: ["7M", "6M"], - facade: ["7M", "6M"], - fly: ["7M", "6M"], - focusblast: ["7M", "7L72", "6M", "6L72"], - foulplay: ["7L51", "6T", "6L51", "6S1"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - heatwave: ["6T"], - hiddenpower: ["7M", "6M"], - honeclaws: ["6M"], - hurricane: ["7L1", "6L1"], - hyperbeam: ["7M", "7L88", "6M", "6L88"], - hypervoice: ["6T"], - knockoff: ["6T"], - oblivionwing: ["7L26", "6L26", "6S0", "6S1"], - phantomforce: ["7L55", "6L55"], - protect: ["7M", "6M"], - psychic: ["7M", "7L59", "6M", "6L59"], - raindance: ["7M", "6M"], - razorwind: ["7L1", "6L1"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - roost: ["7M", "7L1", "6M", "6L1"], - round: ["7M", "6M"], - secretpower: ["6M"], - shadowball: ["7M", "6M"], - shadowclaw: ["7M", "6M"], - skyattack: ["7L93", "6T", "6L93"], - skydrop: ["7M", "6M"], - sleeptalk: ["7M", "6M"], - snarl: ["7M", "7L18", "6M", "6L18", "6S0"], - snore: ["6T"], - steelwing: ["7M", "6M"], - substitute: ["7M", "6M"], - suckerpunch: ["7L80", "6L80", "6S1"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tailwind: ["6T"], - taunt: ["7M", "7L1", "6M", "6L1"], - thief: ["7M", "6M"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - uturn: ["7M", "6M"], - zenheadbutt: ["6T"], + salandit: {learnset: { + attract: ["7M"], + belch: ["7E"], + confide: ["7M"], + covet: ["7T"], + doubleslap: ["7L21"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + dragonpulse: ["7T", "7L48"], + dragonrage: ["7L13"], + ember: ["7L5"], + facade: ["7M"], + fakeout: ["7E"], + fireblast: ["7M"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L40"], + fling: ["7M"], + foulplay: ["7T"], + frustration: ["7M"], + gunkshot: ["7T"], + heatwave: ["7T"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + irontail: ["7T"], + knockoff: ["7T", "7E"], + leechlife: ["7M"], + nastyplot: ["7L32"], + overheat: ["7M"], + payback: ["7M"], + poisongas: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sandattack: ["7E"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smog: ["7L16"], + snatch: ["7T", "7E"], + snore: ["7T"], + substitute: ["7M"], + swagger: ["7M"], + sweetscent: ["7L8"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], + toxic: ["7M", "7L29"], + venomdrench: ["7L45"], + venoshock: ["7M", "7L37"], + willowisp: ["7M"], }}, - zygarde: {learnset: { - bind: ["7L18", "7S2", "7S3", "6T", "6L18"], - bite: ["7L1", "6L1"], - block: ["6T"], - brickbreak: ["7M", "6M"], - bulldoze: ["7M", "7L1", "6M", "6L1"], - camouflage: ["7L59", "6L59", "6S0"], - coil: ["7L72", "6L80"], - confide: ["7M", "6M"], - coreenforcer: ["7T"], - crunch: ["7L51", "6L51", "6S0"], - dig: ["7L10", "6M", "6L10"], - doubleteam: ["7M", "6M"], - dracometeor: ["7T", "6T"], - dragonbreath: ["7L1", "6L1"], - dragondance: ["7T", "6L72"], - dragonpulse: ["7L63", "6T", "6L63", "6S0"], - dragontail: ["7M", "6M"], - earthpower: ["6T"], - earthquake: ["7M", "7L55", "6M", "6L55", "6S0"], - extremespeed: ["7T", "6L88", "6S1"], - facade: ["7M", "6M"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - glare: ["7L1", "6L1", "6S1"], - grassknot: ["7M", "6M"], - haze: ["7L44", "7S2", "7S3", "6L44"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - hypervoice: ["6T"], - irontail: ["6T"], - landswrath: ["7L26", "7S2", "7S3", "6L26", "6S1"], - outrage: ["7L80", "6T", "6L93", "6S1"], - painsplit: ["6T"], - protect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - round: ["7M", "6M"], - safeguard: ["7M", "7L5", "6M", "6L5"], - sandstorm: ["7M", "7L35", "7S2", "7S3", "6M", "6L35"], - secretpower: ["6M"], - shockwave: ["6T"], - sleeptalk: ["7M", "6M"], - sludgewave: ["7M", "6M"], - snore: ["6T"], - spite: ["6T"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superpower: ["6T"], - swagger: ["7M", "6M"], - thousandarrows: ["7T"], - thousandwaves: ["7T"], - toxic: ["7M", "6M"], - zenheadbutt: ["6T"], + salazzle: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + captivate: ["7L1"], + confide: ["7M"], + covet: ["7T"], + disable: ["7L1"], + doubleslap: ["7L21"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + dragonpulse: ["7T", "7L56"], + dragonrage: ["7L13"], + dragontail: ["7M"], + ember: ["7L5", "7L1"], + encore: ["7L1"], + facade: ["7M"], + fakeout: ["7S0"], + fireblast: ["7M"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L44", "7S0"], + fling: ["7M"], + foulplay: ["7T"], + frustration: ["7M"], + gunkshot: ["7T"], + heatwave: ["7T"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], + leechlife: ["7M"], + nastyplot: ["7L32"], + overheat: ["7M"], + payback: ["7M"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M", "7S0"], + sludgewave: ["7M"], + smog: ["7L16"], + snatch: ["7T"], + snore: ["7T"], + substitute: ["7M"], + swagger: ["7M", "7L1"], + sweetscent: ["7L8", "7L1"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M", "7L1"], + toxic: ["7M", "7L29", "7S0"], + venomdrench: ["7L51"], + venoshock: ["7M", "7L39"], + willowisp: ["7M"], }}, - diancie: {learnset: { - afteryou: ["6T"], - ancientpower: ["7L27", "6L31"], - calmmind: ["7M", "6M"], - confide: ["7M", "6M"], - covet: ["6T"], - dazzlinggleam: ["7M", "6M"], - diamondstorm: ["7L50", "6L50", "6S0", "6S1"], - doubleteam: ["7M", "6M"], - earthpower: ["6T"], - endeavor: ["6T"], - explosion: ["7M", "6M"], - facade: ["7M", "6M"], - flail: ["7L31", "6L35"], - flash: ["6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - gravity: ["6T"], - guardsplit: ["7L21", "6L27"], - gyroball: ["7M", "6M"], - hail: ["7M", "6M"], - harden: ["7L1", "6L1"], - healbell: ["6T"], - helpinghand: ["6T"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - irondefense: ["6T"], - lastresort: ["6T"], - lightscreen: ["7M", "7L60", "6M", "6L60"], - magnetrise: ["6T"], - moonblast: ["7L50", "6L50", "6S0", "6S1"], - naturepower: ["7M", "6M"], - powergem: ["7L40"], - protect: ["7M", "6M"], - psychic: ["7M", "6M"], - psychup: ["7M", "6M"], - psyshock: ["7M", "6M"], - reflect: ["7M", "7L12", "6M", "6L18", "6S0", "6S1"], - rest: ["7M", "6M"], - return: ["7M", "6M", "6S0", "6S1"], - rockpolish: ["7M", "6M"], - rockslide: ["7M", "6M"], - rockthrow: ["7L1", "6L5"], - rocktomb: ["7M", "6M"], - round: ["7M", "6M"], - safeguard: ["7M", "7L70", "6M", "6L70"], - sandstorm: ["7M", "6M"], - secretpower: ["6M"], - sharpen: ["7L5", "6L8"], - skillswap: ["7L35", "6T", "6L40"], - sleeptalk: ["7M", "6M"], - smackdown: ["7M", "7L8", "6M", "6L12"], - snore: ["6T"], - stealthrock: ["7L18", "6T", "6L21"], - stoneedge: ["7M", "7L49", "6M", "6L49"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - tackle: ["7L1", "6L1"], - toxic: ["7M", "6M"], - trickroom: ["7M", "7L46", "6M", "6L46"], - wonderroom: ["6T"], + salazzletotem: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + captivate: ["7L1"], + confide: ["7M"], + covet: ["7T"], + disable: ["7L1"], + doubleslap: ["7L21", "7S0"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + dragonpulse: ["7T", "7L56"], + dragonrage: ["7L13"], + dragontail: ["7M"], + ember: ["7L5", "7L1"], + encore: ["7L1"], + facade: ["7M"], + fireblast: ["7M"], + flameburst: ["7L24", "7S0"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L44"], + fling: ["7M"], + foulplay: ["7T"], + frustration: ["7M"], + gunkshot: ["7T"], + heatwave: ["7T"], + helpinghand: ["7T"], + hiddenpower: ["7M"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], + leechlife: ["7M"], + nastyplot: ["7L32"], + overheat: ["7M"], + payback: ["7M"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smog: ["7L16", "7S0"], + snatch: ["7T"], + snore: ["7T"], + substitute: ["7M"], + swagger: ["7M", "7L1"], + sweetscent: ["7L8", "7L1"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M", "7L1"], + toxic: ["7M", "7L29", "7S0"], + venomdrench: ["7L51"], + venoshock: ["7M", "7L39"], + willowisp: ["7M"], }}, - hoopa: {learnset: { - allyswitch: ["7L1", "6L1"], - astonish: ["7L6", "6L6", "6S0"], - block: ["6T"], - brickbreak: ["7M", "6M"], - calmmind: ["7M", "6M"], - chargebeam: ["7M", "6M"], - confide: ["7M", "6M"], - confusion: ["7L1", "6L1"], - covet: ["6T"], - darkpulse: ["7M", "6L55"], - destinybond: ["7L1", "6L1"], - doubleteam: ["7M", "6M"], - drainpunch: ["6T"], - dreameater: ["7M", "6M"], - dualchop: ["6T"], - embargo: ["7M", "6M"], - energyball: ["7M", "6M"], - facade: ["7M", "6M"], - firepunch: ["6T"], - flash: ["6M"], - fling: ["7M", "6M"], - focusblast: ["7M", "6M"], - focuspunch: ["6T"], - foulplay: ["6T"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - grassknot: ["7M", "6M"], - gravity: ["6T"], - guardsplit: ["7L29", "6L29"], - gunkshot: ["6T"], - hiddenpower: ["7M", "6M"], - hyperbeam: ["7M", "6M"], - hyperspacefury: ["6L1"], - hyperspacehole: ["7L85", "7L1", "6L1", "6S0"], - icepunch: ["6T"], - knockoff: ["6T", "6L46"], - lastresort: ["6T"], - lightscreen: ["7M", "7L15", "6M", "6L15"], - magiccoat: ["7L10", "6T", "6L10"], - magicroom: ["6T"], - nastyplot: ["7L68", "6L68", "6S0"], - phantomforce: ["7L35", "6L35"], - powersplit: ["7L29", "6L29"], - poweruppunch: ["6M"], - protect: ["7M", "6M"], - psybeam: ["7L19", "6L15"], - psychic: ["7M", "7L75", "6M", "6L75", "6S0"], - psychup: ["7M", "6M"], - psyshock: ["7M", "6M"], - quash: ["7M", "6M"], - raindance: ["7M", "6M"], - recycle: ["6T"], - reflect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roleplay: ["6T"], - round: ["7M", "6M"], - safeguard: ["7M", "6M"], - secretpower: ["6M"], - shadowball: ["7M", "7L55", "6M", "6L55"], - shockwave: ["6T"], - signalbeam: ["6T"], - skillswap: ["7L25", "6T", "6L25"], - sleeptalk: ["7M", "6M"], - snatch: ["6T"], - snore: ["6T"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - swagger: ["7M", "6M"], - taunt: ["7M", "6M"], - thief: ["7M", "6M"], - thunderbolt: ["7M", "6M"], - thunderpunch: ["6T"], - thunderwave: ["7M", "6M"], - torment: ["7M", "6M"], - toxic: ["7M", "6M"], - trick: ["7L1", "6T", "6L1"], - trickroom: ["7M", "7L50", "6M", "6L50"], - uproar: ["6T"], - wonderroom: ["7L50", "6T", "6L50"], - zenheadbutt: ["7L46", "6T", "6L46"], + stufful: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + babydolleyes: ["7L10"], + bide: ["7L5"], + bind: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M", "7L14"], + bulkup: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleedge: ["7L46"], + doubleteam: ["7M"], + dualchop: ["7T"], + earthquake: ["7M"], + endure: ["7E"], + facade: ["7M"], + flail: ["7L19"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], + forcepalm: ["7E"], + frustration: ["7M"], + hammerarm: ["7L32"], + hiddenpower: ["7M"], + icepunch: ["7T", "7E"], + ironhead: ["7T"], + leer: ["7L1"], + lowsweep: ["7M"], + megakick: ["7E"], + painsplit: ["7T", "7L41"], + payback: ["7M", "7L23"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7T"], + round: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + stompingtantrum: ["7T", "7E"], + substitute: ["7M"], + superpower: ["7T", "7L50"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L28"], + taunt: ["7M"], + thrash: ["7L37"], + thunderpunch: ["7T", "7E"], + toxic: ["7M"], + wideguard: ["7E"], + workup: ["7M"], + zenheadbutt: ["7T"], }}, - volcanion: {learnset: { - bodyslam: ["7L46", "6L46"], - brickbreak: ["7M", "6M"], - bulldoze: ["7M", "6M"], - confide: ["7M", "6M"], - cut: ["6M"], - doubleteam: ["7M", "6M"], - earthpower: ["6T"], - earthquake: ["7M", "6M"], - explosion: ["7M", "7L76", "6M", "6L76", "6S1"], - facade: ["7M", "6M"], - fireblast: ["7M", "6M"], - flamecharge: ["7M", "7L15", "6M", "6L15"], - flamethrower: ["7M", "6M", "6S1"], - flareblitz: ["7L58", "7L1", "6L1"], - flashcannon: ["7M", "6M"], - fling: ["7M", "6M"], - focusblast: ["7M", "6M"], - frustration: ["7M", "6M"], - gigaimpact: ["7M", "6M"], - gyroball: ["7M", "6M"], - haze: ["7L11", "6L11"], - heatwave: ["6T"], - hiddenpower: ["7M", "6M"], - hydropump: ["7L50", "6L50", "6S0", "6S1"], - hyperbeam: ["7M", "6M"], - incinerate: ["6M"], - mist: ["7L8", "6L8", "6S0"], - overheat: ["7M", "7L65", "6M", "6L65", "6S0"], - protect: ["7M", "6M"], - rest: ["7M", "6M"], - return: ["7M", "6M"], - roar: ["7M", "6M"], - rockslide: ["7M", "6M"], - rocksmash: ["6M"], - round: ["7M", "6M"], - sandstorm: ["7M", "6M"], - scald: ["7M", "7L32", "6M", "6L32"], - secretpower: ["6M"], - sleeptalk: ["7M", "6M"], - sludgebomb: ["7M", "6M"], - sludgewave: ["7M", "6M"], - smackdown: ["7M", "6M"], - snore: ["6T"], - solarbeam: ["7M", "6M"], - steameruption: ["7L85", "7L1", "6L1", "6S0", "6S1"], - stomp: ["7L28", "6L28"], - stoneedge: ["7M", "6M"], - strength: ["6M"], - substitute: ["7M", "6M"], - sunnyday: ["7M", "6M"], - superpower: ["6T"], - swagger: ["7M", "6M"], - takedown: ["7L1", "6L1"], - toxic: ["7M", "6M"], - waterpulse: ["7L21", "6T", "6L21"], - weatherball: ["7L40", "6L40"], - willowisp: ["7M", "6M"], + bewear: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + babydolleyes: ["7L10", "7S0"], + bide: ["7L5"], + bind: ["7T", "7L1", "7L1", "7S0"], + brickbreak: ["7M"], + brutalswing: ["7M", "7L14", "7S0"], + bulkup: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleedge: ["7L56"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + drainpunch: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], + facade: ["7M"], + flail: ["7L19"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], + frustration: ["7M"], + gigaimpact: ["7M"], + hammerarm: ["7L36"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7T"], + ironhead: ["7T"], + leer: ["7L1"], + lowkick: ["7T"], + lowsweep: ["7M"], + painsplit: ["7T", "7L49"], + payback: ["7M", "7L23"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7T"], + round: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + stompingtantrum: ["7T"], + substitute: ["7M"], + superpower: ["7T", "7L62", "7S0"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L30"], + taunt: ["7M"], + thrash: ["7L43"], + thunderpunch: ["7T"], + toxic: ["7M"], + workup: ["7M"], + zenheadbutt: ["7T"], }}, - rowlet: {learnset: { - astonish: ["7L11"], + bounsweet: {learnset: { + acupressure: ["7E"], + aromaticmist: ["7L33"], attract: ["7M"], - batonpass: ["7E"], - bravebird: ["7L43"], + bounce: ["7T"], + charm: ["7E"], confide: ["7M"], - confuseray: ["7E"], - curse: ["7E"], - defog: ["7E"], + covet: ["7T"], + dazzlinggleam: ["7M"], doubleteam: ["7M"], - echoedvoice: ["7M"], + endeavor: ["7T"], energyball: ["7M"], facade: ["7M"], - falseswipe: ["7M"], - featherdance: ["7L39"], - foresight: ["7L18"], + feint: ["7E"], + flail: ["7L29"], frustration: ["7M"], - furyattack: ["7L29"], + gigadrain: ["7T"], grassknot: ["7M"], - grasspledge: ["7T"], - growl: ["7L4"], - haze: ["7E"], + grasswhistle: ["7E"], + helpinghand: ["7T"], hiddenpower: ["7M"], - leafage: ["7L1"], - leafblade: ["7L36"], lightscreen: ["7M"], - nastyplot: ["7L46"], + magicalleaf: ["7L21"], naturepower: ["7M"], - ominouswind: ["7E"], - peck: ["7L8"], - pluck: ["7L22"], + playnice: ["7L5"], + playrough: ["7E"], protect: ["7M"], - razorleaf: ["7L15"], + rapidspin: ["7L9"], + razorleaf: ["7L13"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - roost: ["7M"], round: ["7M"], safeguard: ["7M"], - shadowclaw: ["7M"], + seedbomb: ["7T"], sleeptalk: ["7M"], + snore: ["7T"], solarbeam: ["7M"], - steelwing: ["7M"], + splash: ["7L1"], substitute: ["7M"], - suckerpunch: ["7L32"], sunnyday: ["7M"], swagger: ["7M"], - swordsdance: ["7M"], - synthesis: ["7L25"], - tackle: ["7L1"], + sweetscent: ["7L17"], + synthesis: ["7T", "7E"], + teeterdance: ["7L25"], toxic: ["7M"], - workup: ["7M"], + worryseed: ["7T"], + zenheadbutt: ["7T"], }}, - dartrix: {learnset: { - astonish: ["7L11"], + steenee: {learnset: { + aromatherapy: ["7L41"], + aromaticmist: ["7L33"], attract: ["7M"], - bravebird: ["7L51"], + bounce: ["7T"], + captivate: ["7L37"], confide: ["7M"], + covet: ["7T"], + dazzlinggleam: ["7M"], + doubleslap: ["7L1", "7S0"], doubleteam: ["7M"], - echoedvoice: ["7M"], + endeavor: ["7T"], energyball: ["7M"], facade: ["7M"], - falseswipe: ["7M"], - featherdance: ["7L46"], - foresight: ["7L19"], + fling: ["7M"], frustration: ["7M"], - furyattack: ["7L33"], + gigadrain: ["7T"], grassknot: ["7M"], - grasspledge: ["7T"], - growl: ["7L4", "7L1"], + helpinghand: ["7T"], hiddenpower: ["7M"], - leafage: ["7L1"], - leafblade: ["7L42"], + knockoff: ["7T"], + leafstorm: ["7L45"], lightscreen: ["7M"], - nastyplot: ["7L55"], + lowsweep: ["7M"], + magicalleaf: ["7L21", "7S0"], naturepower: ["7M"], - peck: ["7L8", "7L1"], - pluck: ["7L24"], + payback: ["7M"], + playnice: ["7L5", "7L1"], protect: ["7M"], - razorleaf: ["7L15"], + rapidspin: ["7L9", "7L1"], + razorleaf: ["7L13", "7L1"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - roost: ["7M"], round: ["7M"], safeguard: ["7M"], - shadowclaw: ["7M"], + seedbomb: ["7T"], sleeptalk: ["7M"], + snore: ["7T"], solarbeam: ["7M"], - steelwing: ["7M"], + splash: ["7L1"], + stomp: ["7L29"], substitute: ["7M"], - suckerpunch: ["7L37"], sunnyday: ["7M"], swagger: ["7M"], - swordsdance: ["7M"], - synthesis: ["7L28"], - tackle: ["7L1"], + sweetscent: ["7L17", "7S0"], + synthesis: ["7T"], + teeterdance: ["7L25"], toxic: ["7M"], - workup: ["7M"], + worryseed: ["7T"], + zenheadbutt: ["7T"], }}, - decidueye: {learnset: { + tsareena: {learnset: { acrobatics: ["7M"], - astonish: ["7L11"], + aromatherapy: ["7L41"], + aromaticmist: ["7L33"], attract: ["7M"], - bravebird: ["7L55"], + bounce: ["7T"], + captivate: ["7L37"], confide: ["7M"], + covet: ["7T"], + dazzlinggleam: ["7M"], + doubleslap: ["7L1"], doubleteam: ["7M"], - echoedvoice: ["7M"], + endeavor: ["7T"], energyball: ["7M"], facade: ["7M"], - falseswipe: ["7M"], - featherdance: ["7L49"], - foresight: ["7L19"], - frenzyplant: ["7T"], + fling: ["7M"], frustration: ["7M"], - furyattack: ["7L33"], + gigadrain: ["7T"], gigaimpact: ["7M"], grassknot: ["7M"], - grasspledge: ["7T"], - growl: ["7L4", "7L1"], + helpinghand: ["7T"], hiddenpower: ["7M"], - leafage: ["7L1"], - leafblade: ["7L44"], + highjumpkick: ["7L49"], + knockoff: ["7T"], + laserfocus: ["7T"], + leafstorm: ["7L45"], lightscreen: ["7M"], + lowkick: ["7T"], lowsweep: ["7M"], - nastyplot: ["7L60"], + magicalleaf: ["7L21"], naturepower: ["7M"], - peck: ["7L8", "7L1"], - pluck: ["7L24"], + payback: ["7M"], + powerwhip: ["7L53"], protect: ["7M"], - razorleaf: ["7L15"], + punishment: ["7L1"], + rapidspin: ["7L9", "7L1"], + razorleaf: ["7L13", "7L1"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - roost: ["7M"], round: ["7M"], safeguard: ["7M"], - shadowball: ["7M"], - shadowclaw: ["7M"], + seedbomb: ["7T"], sleeptalk: ["7M"], - smackdown: ["7M"], + snore: ["7T"], solarbeam: ["7M"], - spiritshackle: ["7L1"], - steelwing: ["7M"], + splash: ["7L1"], + stomp: ["7L29"], substitute: ["7M"], - suckerpunch: ["7L38"], sunnyday: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - synthesis: ["7L28"], - tackle: ["7L1"], + swagger: ["7M", "7L5", "7L1"], + sweetscent: ["7L17"], + synthesis: ["7T"], + teeterdance: ["7L25"], toxic: ["7M"], - uturn: ["7M", "7L1"], - workup: ["7M"], + tropkick: ["7L1"], + uturn: ["7M"], + worryseed: ["7T"], + zenheadbutt: ["7T"], }}, - litten: {learnset: { + comfey: {learnset: { acrobatics: ["7M"], + afteryou: ["7T", "7E"], + allyswitch: ["7T"], + amnesia: ["7E"], + aromatherapy: ["7L43"], attract: ["7M"], - bite: ["7L22"], - bodyslam: ["7E"], - bulkup: ["7M"], + bind: ["7T"], + calmmind: ["7M"], + celebrate: ["7S0"], confide: ["7M"], - crunch: ["7E"], + covet: ["7T"], + dazzlinggleam: ["7M"], + defog: ["7T"], doubleteam: ["7M"], - ember: ["7L1"], + drainingkiss: ["7L7", "7S0"], + echoedvoice: ["7M"], + endure: ["7E"], + energyball: ["7M"], facade: ["7M"], - fakeout: ["7E"], - fireblast: ["7M"], - firefang: ["7L15"], - firepledge: ["7T"], - flamecharge: ["7M"], - flamethrower: ["7M", "7L36"], - flareblitz: ["7L43"], + fling: ["7M"], + floralhealing: ["7L37"], + flowershield: ["7L1"], frustration: ["7M"], - furyswipes: ["7L29"], - growl: ["7L4"], - heatwave: ["7E"], + gigadrain: ["7T"], + grassknot: ["7M", "7L34"], + grassyterrain: ["7L46"], + growth: ["7L13"], + healbell: ["7T"], + helpinghand: ["7T", "7L1"], hiddenpower: ["7M"], - leechlife: ["7M"], - leer: ["7L11"], - lick: ["7L8"], - nastyplot: ["7E"], - outrage: ["7L46"], - overheat: ["7M"], + hyperbeam: ["7M"], + leechseed: ["7L4", "7S0"], + lightscreen: ["7M"], + luckychant: ["7E"], + magicalleaf: ["7L10", "7S0"], + magiccoat: ["7T"], + naturalgift: ["7L22"], + naturepower: ["7M"], + painsplit: ["7T"], + petalblizzard: ["7L25"], + petaldance: ["7L40"], + playrough: ["7L49"], protect: ["7M"], + psychup: ["7M"], rest: ["7M"], return: ["7M"], - revenge: ["7E"], - roar: ["7M", "7L18"], + roleplay: ["7T"], round: ["7M"], - scaryface: ["7L39"], - scratch: ["7L1"], - shadowclaw: ["7M"], + safeguard: ["7M"], + seedbomb: ["7T"], sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], substitute: ["7M"], sunnyday: ["7M"], - swagger: ["7M", "7L25"], - swordsdance: ["7M"], + swagger: ["7M"], + sweetkiss: ["7L19"], + sweetscent: ["7L31"], + synthesis: ["7T", "7L28"], + tailwind: ["7T"], taunt: ["7M"], - thrash: ["7L32"], - torment: ["7M"], + telekinesis: ["7T"], + thief: ["7M"], toxic: ["7M"], + trick: ["7T"], + trickroom: ["7M"], uturn: ["7M"], - willowisp: ["7M"], + vinewhip: ["7L1"], + worryseed: ["7T"], + wrap: ["7L16"], + }}, + oranguru: {learnset: { + afteryou: ["7T", "7L4"], + allyswitch: ["7T"], + block: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M", "7L39"], + chargebeam: ["7M"], + confide: ["7M"], + confusion: ["7L1"], + covet: ["7T"], + doubleteam: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + embargo: ["7M"], + energyball: ["7M"], + extrasensory: ["7E"], + facade: ["7M"], + feintattack: ["7L22"], + fling: ["7M"], + focusblast: ["7M"], + foulplay: ["7T", "7L36"], + frustration: ["7M"], + futuresight: ["7L46"], + gigaimpact: ["7M"], + gravity: ["7T"], + hiddenpower: ["7M"], + instruct: ["7L32", "7S0"], + knockoff: ["7T"], + lightscreen: ["7M"], + magiccoat: ["7T"], + magicroom: ["7T"], + nastyplot: ["7L25"], + naturepower: ["7M"], + painsplit: ["7T"], + payback: ["7M"], + protect: ["7M"], + psychic: ["7M", "7L43", "7S0"], + psychicterrain: ["7E", "7S0"], + psychup: ["7M", "7L18"], + psyshock: ["7M"], + quash: ["7M", "7L11"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowball: ["7M"], + sleeptalk: ["7M"], + snatch: ["7T"], + snore: ["7T"], + spite: ["7T"], + storedpower: ["7L15"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + taunt: ["7M", "7L8"], + telekinesis: ["7T"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + trick: ["7T"], + trickroom: ["7M", "7L50"], + wonderroom: ["7T", "7E"], workup: ["7M"], + zenheadbutt: ["7T", "7L29"], }}, - torracat: {learnset: { + passimian: {learnset: { acrobatics: ["7M"], + aerialace: ["7M"], attract: ["7M"], - bite: ["7L24"], - bulkup: ["7M"], + beatup: ["7L15"], + bestow: ["7L25", "7S0"], + block: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L32"], + bulldoze: ["7M"], + closecombat: ["7L43"], confide: ["7M"], + doubleedge: ["7L36"], doubleteam: ["7M"], - ember: ["7L1"], + drainpunch: ["7T"], + earthquake: ["7M"], + electroweb: ["7T"], + endeavor: ["7T"], + energyball: ["7M"], facade: ["7M"], - fireblast: ["7M"], - firefang: ["7L15"], - firepledge: ["7T"], - flamecharge: ["7M"], - flamethrower: ["7M", "7L42"], - flareblitz: ["7L51"], + feint: ["7E", "7S0"], + fling: ["7M", "7L39", "7S0"], + focusblast: ["7M"], + focusenergy: ["7L11"], + focuspunch: ["7T"], frustration: ["7M"], - furyswipes: ["7L33"], - growl: ["7L4", "7L1"], + gigaimpact: ["7M", "7L50"], + grassknot: ["7M"], + gunkshot: ["7T"], + gyroball: ["7M"], hiddenpower: ["7M"], - leechlife: ["7M"], - leer: ["7L11"], - lick: ["7L8", "7L1"], - outrage: ["7L55"], - overheat: ["7M"], + hyperbeam: ["7M"], + ironhead: ["7T", "7E"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], + leer: ["7L4"], + lowsweep: ["7M"], + payback: ["7M"], protect: ["7M"], + quickattack: ["7E"], + quickguard: ["7E"], + raindance: ["7M"], rest: ["7M"], return: ["7M"], - roar: ["7M", "7L19"], + reversal: ["7L46"], + rockslide: ["7M"], + rocksmash: ["7L8"], + rocktomb: ["7M"], round: ["7M"], - scaryface: ["7L46"], - scratch: ["7L1"], - shadowclaw: ["7M"], + scaryface: ["7L18"], + seedbomb: ["7T"], + seismictoss: ["7E"], + shadowball: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], + smackdown: ["7M"], + snatch: ["7T"], + snore: ["7T"], substitute: ["7M"], sunnyday: ["7M"], - swagger: ["7M", "7L28"], - swordsdance: ["7M"], + superpower: ["7T"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L22"], taunt: ["7M"], - thrash: ["7L37"], - torment: ["7M"], + thief: ["7M"], + thrash: ["7L29"], toxic: ["7M"], + uproar: ["7T"], uturn: ["7M"], - willowisp: ["7M"], + vitalthrow: ["7E"], workup: ["7M"], }}, - incineroar: {learnset: { - acrobatics: ["7M"], + wimpod: {learnset: { + aquajet: ["7E"], attract: ["7M"], - bite: ["7L24"], - blastburn: ["7T"], + confide: ["7M"], + doubleteam: ["7M"], + facade: ["7M"], + frustration: ["7M"], + hail: ["7M"], + harden: ["7E"], + hiddenpower: ["7M"], + leechlife: ["7M"], + metalclaw: ["7E"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sandattack: ["7L1"], + scald: ["7M"], + sleeptalk: ["7M"], + snore: ["7T"], + spikes: ["7E"], + strugglebug: ["7L1"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + wideguard: ["7E"], + }}, + golisopod: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + blizzard: ["7M"], brickbreak: ["7M"], - brutalswing: ["7M"], - bulkup: ["7M", "7L1"], - bulldoze: ["7M"], + bugbite: ["7T", "7L10"], + bulkup: ["7M"], confide: ["7M"], - crosschop: ["7L66"], - darkestlariat: ["7L1"], darkpulse: ["7M"], doubleteam: ["7M"], - earthquake: ["7M"], - embargo: ["7M"], - ember: ["7L1"], + drillrun: ["7T"], + dualchop: ["7T"], + endeavor: ["7T"], facade: ["7M"], - fireblast: ["7M"], - firefang: ["7L15"], - firepledge: ["7T"], - flamecharge: ["7M"], - flamethrower: ["7M", "7L44"], - flareblitz: ["7L55"], + falseswipe: ["7M"], + firstimpression: ["7L1"], fling: ["7M"], focusblast: ["7M"], + frostbreath: ["7M"], frustration: ["7M"], - furyswipes: ["7L33"], + furycutter: ["7L4", "7L1"], gigaimpact: ["7M"], - growl: ["7L4", "7L1"], + hail: ["7M"], hiddenpower: ["7M"], - hyperbeam: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + irondefense: ["7T", "7L36"], + ironhead: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], leechlife: ["7M"], - leer: ["7L11"], - lick: ["7L8", "7L1"], - lowsweep: ["7M"], - outrage: ["7L60"], - overheat: ["7M"], + liquidation: ["7T", "7L48"], + painsplit: ["7T"], + payback: ["7M"], + pinmissile: ["7L41"], + poisonjab: ["7M"], protect: ["7M"], - quash: ["7M"], + psychup: ["7M"], + raindance: ["7M"], + razorshell: ["7L26"], rest: ["7M"], return: ["7M"], - roar: ["7M", "7L19"], + rockslide: ["7M"], + rocksmash: ["7L7", "7L1"], + rocktomb: ["7M"], round: ["7M"], - scaryface: ["7L49"], - scratch: ["7L1"], + sandattack: ["7L1"], + scald: ["7M"], shadowclaw: ["7M"], + slash: ["7L21"], sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], snarl: ["7M"], + snore: ["7T"], + spite: ["7T", "7L13"], + strugglebug: ["7L1"], substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M", "7L28"], - swordsdance: ["7M"], + suckerpunch: ["7L31"], + surf: ["7M"], + swagger: ["7M"], + swordsdance: ["7M", "7L16"], taunt: ["7M"], - thrash: ["7L38"], - throatchop: ["7L1"], - torment: ["7M"], + throatchop: ["7T"], toxic: ["7M"], - uturn: ["7M"], - willowisp: ["7M"], - workup: ["7M"], + venoshock: ["7M"], + waterfall: ["7M"], + waterpulse: ["7T"], + xscissor: ["7M"], }}, - popplio: {learnset: { - acrobatics: ["7M"], + sandygast: {learnset: { + absorb: ["7L1"], + afteryou: ["7T"], amnesia: ["7E"], - aquajet: ["7L15"], - aquaring: ["7E"], - aromaticmist: ["7E"], + ancientpower: ["7E"], + astonish: ["7L5"], attract: ["7M"], - babydolleyes: ["7L11"], - blizzard: ["7M"], - bubblebeam: ["7L22"], - captivate: ["7L39"], - charm: ["7E"], + block: ["7T"], + bulldoze: ["7M", "7L23"], confide: ["7M"], - disarmingvoice: ["7L8"], - doubleslap: ["7L29"], + curse: ["7E"], + destinybond: ["7E"], doubleteam: ["7M"], - echoedvoice: ["7M"], - encore: ["7L18"], + earthpower: ["7T", "7L45"], + earthquake: ["7M"], + energyball: ["7M"], facade: ["7M"], frustration: ["7M"], - growl: ["7L4"], - hail: ["7M"], + gigadrain: ["7T", "7L36"], + gravity: ["7T"], + harden: ["7L1"], hiddenpower: ["7M"], - hydropump: ["7L43"], - hypervoice: ["7L32"], - icebeam: ["7M"], - mistyterrain: ["7L46"], - moonblast: ["7L36"], - perishsong: ["7E"], - pound: ["7L1"], + hypnosis: ["7L27"], + infestation: ["7M"], + irondefense: ["7T", "7L32"], + megadrain: ["7L18"], + painsplit: ["7T"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M"], + recycle: ["7T"], rest: ["7M"], return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7T"], round: ["7M"], - scald: ["7M"], - sing: ["7L25"], + sandattack: ["7L9"], + sandstorm: ["7M", "7L54"], + sandtomb: ["7L14"], + shadowball: ["7M", "7L41"], + shoreup: ["7L50"], + skillswap: ["7T"], sleeptalk: ["7M"], + snore: ["7T"], + spite: ["7T"], + spitup: ["7E"], + stealthrock: ["7T"], + stockpile: ["7E"], + stoneedge: ["7M"], substitute: ["7M"], - surf: ["7M"], swagger: ["7M"], + swallow: ["7E"], toxic: ["7M"], - waterfall: ["7M"], - watergun: ["7L1"], - waterpledge: ["7T"], - wonderroom: ["7E"], - workup: ["7M"], + trick: ["7T"], }}, - brionne: {learnset: { - acrobatics: ["7M"], - aquajet: ["7L15"], + palossand: {learnset: { + absorb: ["7L1"], + afteryou: ["7T"], + astonish: ["7L5", "7L1"], attract: ["7M"], - babydolleyes: ["7L11"], - blizzard: ["7M"], - bubblebeam: ["7L24"], - captivate: ["7L46"], + block: ["7T"], + bulldoze: ["7M", "7L23"], confide: ["7M"], - disarmingvoice: ["7L8", "7L1"], - doubleslap: ["7L33"], doubleteam: ["7M"], - echoedvoice: ["7M"], - encore: ["7L19"], + earthpower: ["7T", "7L47"], + earthquake: ["7M"], + embargo: ["7M"], + energyball: ["7M"], facade: ["7M"], + fling: ["7M"], frustration: ["7M"], - growl: ["7L4", "7L1"], - hail: ["7M"], + gigadrain: ["7T", "7L36"], + gigaimpact: ["7M"], + gravity: ["7T"], + harden: ["7L1"], hiddenpower: ["7M"], - hydropump: ["7L51"], - hypervoice: ["7L37"], - icebeam: ["7M"], - mistyterrain: ["7L55"], - moonblast: ["7L42"], - pound: ["7L1"], + hypnosis: ["7L27"], + infestation: ["7M"], + irondefense: ["7T", "7L32"], + megadrain: ["7L18"], + painsplit: ["7T"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M"], + quash: ["7M"], + recycle: ["7T"], rest: ["7M"], return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7T"], round: ["7M"], - scald: ["7M"], - sing: ["7L28"], + sandattack: ["7L9", "7L1"], + sandstorm: ["7M", "7L60"], + sandtomb: ["7L14"], + shadowball: ["7M", "7L41"], + shoreup: ["7L54"], + skillswap: ["7T"], sleeptalk: ["7M"], + sludgebomb: ["7M"], + snore: ["7T"], + spite: ["7T"], + stealthrock: ["7T"], + stoneedge: ["7M"], substitute: ["7M"], - surf: ["7M"], swagger: ["7M"], toxic: ["7M"], - waterfall: ["7M"], - watergun: ["7L1"], - waterpledge: ["7T"], - workup: ["7M"], + trick: ["7T"], }}, - primarina: {learnset: { - acrobatics: ["7M"], - aquajet: ["7L15"], + pyukumuku: {learnset: { attract: ["7M"], - babydolleyes: ["7L11"], - blizzard: ["7M"], - bubblebeam: ["7L24"], - captivate: ["7L49"], + batonpass: ["7L1"], + bestow: ["7E"], + bide: ["7L1"], + block: ["7T"], confide: ["7M"], - dazzlinggleam: ["7M"], - disarmingvoice: ["7L9", "7L1"], - doubleslap: ["7L33"], + counter: ["7L17"], + curse: ["7L25"], doubleteam: ["7M"], - echoedvoice: ["7M"], - encore: ["7L19"], - energyball: ["7M"], + endure: ["7E"], + gastroacid: ["7T", "7L29"], + hail: ["7M"], + harden: ["7L1"], + helpinghand: ["7T", "7L5"], + lightscreen: ["7M"], + memento: ["7L49"], + mudsport: ["7L1"], + painsplit: ["7T", "7L33"], + protect: ["7M"], + psychup: ["7M"], + purify: ["7L21"], + quash: ["7M"], + raindance: ["7M"], + recover: ["7L37"], + recycle: ["7T"], + reflect: ["7M"], + rest: ["7M"], + safeguard: ["7M", "7L13"], + sleeptalk: ["7M"], + soak: ["7L41"], + spite: ["7T", "7E"], + substitute: ["7M"], + swagger: ["7M"], + taunt: ["7M", "7L9"], + tickle: ["7E"], + toxic: ["7M", "7L45"], + venomdrench: ["7E"], + watersport: ["7L1"], + }}, + typenull: {learnset: { + aerialace: ["7M", "7L20"], + airslash: ["7L60", "7S1"], + confide: ["7M"], + crushclaw: ["7L25", "7S0"], + doubleedge: ["7L80"], + doublehit: ["7L55", "7S1"], + doubleteam: ["7M"], + dragonclaw: ["7M"], facade: ["7M"], + flamecharge: ["7M"], frustration: ["7M"], gigaimpact: ["7M"], - growl: ["7L4", "7L1"], hail: ["7M"], + healblock: ["7L85"], hiddenpower: ["7M"], - hydrocannon: ["7T"], - hydropump: ["7L55"], - hypervoice: ["7L38"], - icebeam: ["7M"], - lightscreen: ["7M"], - mistyterrain: ["7L60"], - moonblast: ["7L44"], - pound: ["7L1"], + icywind: ["7T"], + imprison: ["7L15"], + irondefense: ["7T"], + ironhead: ["7T", "7L50", "7S1"], + lastresort: ["7T"], + magiccoat: ["7T"], + metalsound: ["7L45", "7S1"], + payback: ["7M"], protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], + punishment: ["7L65"], + pursuit: ["7L10"], + rage: ["7L5"], raindance: ["7M"], - reflect: ["7M"], + razorwind: ["7L70"], rest: ["7M"], return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], round: ["7M"], - scald: ["7M"], - shadowball: ["7M"], - sing: ["7L28"], + sandstorm: ["7M"], + scaryface: ["7L30", "7S0"], + shadowclaw: ["7M"], + signalbeam: ["7T"], sleeptalk: ["7M"], - sparklingaria: ["7L1"], + snore: ["7T"], substitute: ["7M"], - surf: ["7M"], + sunnyday: ["7M"], swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L40", "7S0"], + thunderwave: ["7M"], toxic: ["7M"], - waterfall: ["7M"], - watergun: ["7L1"], - waterpledge: ["7T"], + triattack: ["7L75"], + uturn: ["7M"], workup: ["7M"], + xscissor: ["7M", "7L35", "7S0"], }}, - pikipek: {learnset: { - aerialace: ["7M"], - attract: ["7M"], - boomburst: ["7E"], - bravebird: ["7E"], - brickbreak: ["7M"], - bulletseed: ["7L31"], + silvally: {learnset: { + aerialace: ["7M", "7L20"], + airslash: ["7L60"], + bite: ["7L15"], confide: ["7M"], + crunch: ["7L50"], + crushclaw: ["7L25"], + defog: ["7T"], + doubleedge: ["7L80"], + doublehit: ["7L55"], doubleteam: ["7M"], - drillpeck: ["7L27"], - echoedvoice: ["7M", "7L7"], - featherdance: ["7L33"], + dracometeor: ["7T"], + dragonclaw: ["7M"], + explosion: ["7M"], + facade: ["7M"], + firefang: ["7L1"], flamecharge: ["7M"], - fly: ["7M"], + flamethrower: ["7M"], + flashcannon: ["7M"], frustration: ["7M"], - furyattack: ["7L21"], - growl: ["7L3"], + gigaimpact: ["7M"], + grasspledge: ["7T"], + hail: ["7M"], + healblock: ["7L1"], + heatwave: ["7T"], hiddenpower: ["7M"], - hypervoice: ["7L37"], - mirrormove: ["7E"], - peck: ["7L1"], - pluck: ["7L15"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + icebeam: ["7M"], + icefang: ["7L1"], + icywind: ["7T"], + imprison: ["7L1"], + irondefense: ["7T"], + ironhead: ["7T", "7L1"], + laserfocus: ["7T"], + lastresort: ["7T"], + magiccoat: ["7T"], + metalsound: ["7L45"], + multiattack: ["7L1", "7S0"], + outrage: ["7T"], + partingshot: ["7L85", "7S0"], + payback: ["7M"], + poisonfang: ["7L1"], protect: ["7M"], + punishment: ["7L65", "7S0"], + pursuit: ["7L10"], + rage: ["7L5"], + raindance: ["7M"], + razorwind: ["7L70"], rest: ["7M"], return: ["7M"], - rocksmash: ["7L9"], - roost: ["7M", "7L19"], + roar: ["7M"], + rockslide: ["7M"], round: ["7M"], - screech: ["7L25"], + sandstorm: ["7M"], + scaryface: ["7L30", "7S0"], + shadowball: ["7M"], + shadowclaw: ["7M"], + signalbeam: ["7T"], sleeptalk: ["7M"], - smackdown: ["7M"], + snarl: ["7M"], + snore: ["7T"], steelwing: ["7M"], substitute: ["7M"], sunnyday: ["7M"], - supersonic: ["7L13"], + surf: ["7M"], swagger: ["7M"], swordsdance: ["7M"], - tailwind: ["7E"], - thief: ["7M"], + tackle: ["7L1"], + tailwind: ["7T"], + takedown: ["7L40"], + thunderbolt: ["7M"], + thunderfang: ["7L1"], + thunderwave: ["7M"], toxic: ["7M"], - uproar: ["7E"], + triattack: ["7L75"], uturn: ["7M"], workup: ["7M"], + xscissor: ["7M", "7L35"], + zenheadbutt: ["7T"], }}, - trumbeak: {learnset: { - aerialace: ["7M"], + minior: {learnset: { + acrobatics: ["7M"], + ancientpower: ["7L17"], attract: ["7M"], - brickbreak: ["7M"], - bulletseed: ["7L37"], + autotomize: ["7L31"], + bulldoze: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], confide: ["7M"], + confuseray: ["7L10"], + cosmicpower: ["7L36"], + dazzlinggleam: ["7M"], + defensecurl: ["7L3"], + doubleedge: ["7L43"], doubleteam: ["7M"], - drillpeck: ["7L32"], - echoedvoice: ["7M", "7L7", "7L1"], - featherdance: ["7L40"], - flamecharge: ["7M"], - fly: ["7M"], + earthquake: ["7M"], + endeavor: ["7T"], + explosion: ["7M", "7L50"], + facade: ["7M"], frustration: ["7M"], - furyattack: ["7L24"], - growl: ["7L3", "7L1"], + gigaimpact: ["7M"], + gravity: ["7T"], + gyroball: ["7M"], hiddenpower: ["7M"], - hypervoice: ["7L45"], - peck: ["7L1"], - pluck: ["7L16"], + hyperbeam: ["7M"], + ironhead: ["7T"], + lastresort: ["7T"], + lightscreen: ["7M"], + magnetrise: ["7T"], + powergem: ["7L38"], protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - rockblast: ["7L1"], - rocksmash: ["7L9", "7L1"], - roost: ["7M", "7L21"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rollout: ["7L8"], round: ["7M"], - screech: ["7L29"], + safeguard: ["7M"], + sandstorm: ["7M"], + selfdestruct: ["7L22"], + shellsmash: ["7L45"], sleeptalk: ["7M"], - smackdown: ["7M"], - steelwing: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + stealthrock: ["7T", "7L24"], + stoneedge: ["7M"], substitute: ["7M"], - sunnyday: ["7M"], - supersonic: ["7L13"], swagger: ["7M"], - swordsdance: ["7M"], - thief: ["7M"], + swift: ["7L15"], + tackle: ["7L1"], + takedown: ["7L29"], + telekinesis: ["7T"], toxic: ["7M"], uturn: ["7M"], - workup: ["7M"], + zenheadbutt: ["7T"], }}, - toucannon: {learnset: { - aerialace: ["7M"], + komala: {learnset: { + acrobatics: ["7M"], attract: ["7M"], - beakblast: ["7L1"], brickbreak: ["7M"], - bulletseed: ["7L40"], + bulkup: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M"], + charm: ["7E"], confide: ["7M"], + defensecurl: ["7L1"], doubleteam: ["7M"], - drillpeck: ["7L34"], - echoedvoice: ["7M", "7L7", "7L1"], - featherdance: ["7L44"], - flamecharge: ["7M"], - flashcannon: ["7M"], - fly: ["7M"], + earthquake: ["7M"], + endeavor: ["7T"], + facade: ["7M"], + flail: ["7L26"], frustration: ["7M"], - furyattack: ["7L24"], - growl: ["7L3", "7L1"], hiddenpower: ["7M"], - hypervoice: ["7L50"], - overheat: ["7M"], - peck: ["7L1"], - pluck: ["7L16"], + ironhead: ["7T"], + knockoff: ["7T"], + lastresort: ["7T"], + lowsweep: ["7M"], + payback: ["7M"], + playrough: ["7E"], protect: ["7M"], - rest: ["7M"], + psychup: ["7M", "7L36"], + quash: ["7M"], + rapidspin: ["7L11"], return: ["7M"], - rockblast: ["7L1"], - rocksmash: ["7L9", "7L1"], - roost: ["7M", "7L21"], + rockslide: ["7M"], + rollout: ["7L1"], round: ["7M"], - screech: ["7L30"], + shadowclaw: ["7M"], + sing: ["7E"], + slam: ["7L21"], sleeptalk: ["7M"], - smackdown: ["7M"], - steelwing: ["7M"], + snore: ["7T"], + spitup: ["7L6"], + stockpile: ["7L6"], + stompingtantrum: ["7T"], substitute: ["7M"], + suckerpunch: ["7L31"], sunnyday: ["7M"], - supersonic: ["7L13"], + superpower: ["7T"], swagger: ["7M"], + swallow: ["7L6"], swordsdance: ["7M"], - thief: ["7M"], + thrash: ["7L46"], toxic: ["7M"], uturn: ["7M"], + wish: ["7E"], + woodhammer: ["7L41"], workup: ["7M"], + yawn: ["7L16"], + zenheadbutt: ["7T"], }}, - yungoos: {learnset: { + turtonator: {learnset: { attract: ["7M"], - bide: ["7L16"], - bite: ["7L19"], + block: ["7T"], + bodyslam: ["7L33", "7S0"], + brutalswing: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + chargebeam: ["7M"], confide: ["7M"], - crunch: ["7L34"], doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M"], + dragonpulse: ["7T", "7L41"], + dragontail: ["7M", "7S1"], earthquake: ["7M"], - echoedvoice: ["7M"], + ember: ["7L1"], + endeavor: ["7T"], + endure: ["7L21"], + explosion: ["7M", "7L53"], facade: ["7M"], + fireblast: ["7M"], + firespin: ["7E"], + flail: ["7L17"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L29", "7S1", "7S0"], + flashcannon: ["7M"], + fling: ["7M"], + focusblast: ["7M"], frustration: ["7M"], + gigaimpact: ["7M"], + headsmash: ["7E"], + heatwave: ["7T"], hiddenpower: ["7M"], - hyperfang: ["7L37"], - lastresort: ["7E"], - leer: ["7L3"], - mudslap: ["7L22"], - odorsleuth: ["7L13"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + incinerate: ["7L13"], + irondefense: ["7T", "7L25"], + ironhead: ["7T"], + irontail: ["7T"], + outrage: ["7T"], + overheat: ["7M", "7L49"], payback: ["7M"], - protect: ["7M"], - pursuit: ["7L7"], - rest: ["7M", "7L46"], + protect: ["7M", "7L9"], + rest: ["7M"], return: ["7M"], revenge: ["7E"], + roar: ["7M"], rocktomb: ["7M"], round: ["7M"], - sandattack: ["7L10"], - sandstorm: ["7M"], - scaryface: ["7L31"], + shellsmash: ["7L37"], + shelltrap: ["7L45", "7S1"], + shockwave: ["7T"], sleeptalk: ["7M"], + smackdown: ["7M"], + smog: ["7L5"], + snore: ["7T"], + solarbeam: ["7M"], + stompingtantrum: ["7T"], + stoneedge: ["7M"], substitute: ["7M"], - superfang: ["7L25"], + sunnyday: ["7M"], swagger: ["7M"], tackle: ["7L1"], - takedown: ["7L28"], taunt: ["7M"], - thief: ["7M"], - thrash: ["7L43"], - torment: ["7M"], toxic: ["7M"], - uturn: ["7M"], + uproar: ["7T"], + venoshock: ["7M"], + wideguard: ["7E", "7S0"], + willowisp: ["7M"], workup: ["7M"], - yawn: ["7L40"], }}, - gumshoos: {learnset: { + togedemaru: {learnset: { + afteryou: ["7T"], attract: ["7M"], - bide: ["7L16"], - bite: ["7L19"], - bulldoze: ["7M"], + bounce: ["7T"], + charge: ["7L13"], + chargebeam: ["7M"], confide: ["7M"], - crunch: ["7L39"], + covet: ["7T"], + defensecurl: ["7L5"], + disarmingvoice: ["7E"], + discharge: ["7L29"], doubleteam: ["7M"], - earthquake: ["7M"], - echoedvoice: ["7M"], + electricterrain: ["7L37"], + electroweb: ["7T"], + encore: ["7E"], + endeavor: ["7T"], facade: ["7M"], + fakeout: ["7E"], + fellstinger: ["7L53"], + flail: ["7E"], fling: ["7M"], frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gravity: ["7T"], + gyroball: ["7M"], + helpinghand: ["7T"], hiddenpower: ["7M"], - hyperfang: ["7L43"], - leer: ["7L3", "7L1"], - mudslap: ["7L23"], - odorsleuth: ["7L13"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + magnetrise: ["7T", "7L25"], + nuzzle: ["7L21"], payback: ["7M"], + pinmissile: ["7L45"], + poisonjab: ["7M"], + present: ["7E"], protect: ["7M"], - pursuit: ["7L7", "7L1"], - rest: ["7M", "7L55"], + reflect: ["7M"], + rest: ["7M"], return: ["7M"], - roar: ["7M"], - rocktomb: ["7M"], + reversal: ["7E"], + roleplay: ["7T"], + rollout: ["7L9"], round: ["7M"], - sandattack: ["7L10", "7L1"], - sandstorm: ["7M"], - scaryface: ["7L35"], + shockwave: ["7T"], sleeptalk: ["7M"], + snore: ["7T"], + spark: ["7L17"], + spikyshield: ["7L49"], substitute: ["7M"], - superfang: ["7L27"], + superfang: ["7T"], swagger: ["7M"], tackle: ["7L1"], - takedown: ["7L31"], - taunt: ["7M"], thief: ["7M"], - thrash: ["7L51"], - torment: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thundershock: ["7L1"], + thunderwave: ["7M"], + tickle: ["7E"], toxic: ["7M"], + twineedle: ["7E"], uturn: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M", "7L41"], + wish: ["7E"], workup: ["7M"], - yawn: ["7L47"], + zenheadbutt: ["7T"], + zingzap: ["7L33"], }}, - grubbin: {learnset: { - acrobatics: ["7M", "7L19"], + togedemarutotem: {learnset: { + afteryou: ["7T"], attract: ["7M"], - bite: ["7L10"], - bugbite: ["7L13"], + bounce: ["7T"], + charge: ["7L13"], chargebeam: ["7M"], confide: ["7M"], - crunch: ["7L22"], - dig: ["7L28"], + covet: ["7T"], + defensecurl: ["7L5"], + discharge: ["7L29", "7S0"], doubleteam: ["7M"], - electroweb: ["7E"], - endure: ["7E"], + electricterrain: ["7L37"], + electroweb: ["7T"], + endeavor: ["7T"], facade: ["7M"], + fellstinger: ["7L53"], + fling: ["7M"], frustration: ["7M"], - harden: ["7E"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gravity: ["7T"], + gyroball: ["7M"], + helpinghand: ["7T"], hiddenpower: ["7M"], - lightscreen: ["7M"], - mudshot: ["7E"], - mudslap: ["7L7"], + ironhead: ["7T"], + irontail: ["7T"], + lastresort: ["7T"], + magnetrise: ["7T", "7L25", "7S0"], + nuzzle: ["7L21", "7S0"], + payback: ["7M"], + pinmissile: ["7L45"], poisonjab: ["7M"], protect: ["7M"], - raindance: ["7M"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], + roleplay: ["7T"], + rollout: ["7L9"], round: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], - spark: ["7L16"], - stringshot: ["7L4"], + snore: ["7T"], + spark: ["7L17"], + spikyshield: ["7L49"], substitute: ["7M"], + superfang: ["7T"], swagger: ["7M"], + tackle: ["7L1"], + thief: ["7M"], + thunder: ["7M"], thunderbolt: ["7M"], + thundershock: ["7L1"], thunderwave: ["7M"], toxic: ["7M"], - vicegrip: ["7L1"], + uturn: ["7M"], voltswitch: ["7M"], - wildcharge: ["7M"], - xscissor: ["7M", "7L25"], + wildcharge: ["7M", "7L41"], + workup: ["7M"], + zenheadbutt: ["7T"], + zingzap: ["7L33", "7S0"], }}, - charjabug: {learnset: { - acrobatics: ["7M", "7L19"], + mimikyu: {learnset: { + afteryou: ["7T"], + astonish: ["7L1", "7S1", "7S0"], attract: ["7M"], - bite: ["7L10", "7L1"], - bugbite: ["7L13"], - charge: ["7L1"], + babydolleyes: ["7L10", "7S0"], + bulkup: ["7M"], chargebeam: ["7M"], + charm: ["7L28"], confide: ["7M"], - crunch: ["7L25"], - dig: ["7L37"], - discharge: ["7L43"], - doubleteam: ["7M"], + copycat: ["7L1", "7S1", "7S0"], + covet: ["7T"], + curse: ["7E"], + darkpulse: ["7M"], + dazzlinggleam: ["7M"], + destinybond: ["7E"], + doubleteam: ["7M", "7L5"], + drainpunch: ["7T"], + dreameater: ["7M"], + embargo: ["7M"], facade: ["7M"], + feintattack: ["7L23"], + fling: ["7M"], frustration: ["7M"], + gigadrain: ["7T"], + grudge: ["7E"], hiddenpower: ["7M"], - irondefense: ["7L49"], + honeclaws: ["7L41"], + hyperbeam: ["7M"], + infestation: ["7M"], + lastresort: ["7T"], + leechlife: ["7M"], lightscreen: ["7M"], - mudslap: ["7L7", "7L1"], - poisonjab: ["7M"], + magicroom: ["7T"], + mimic: ["7L19"], + nightmare: ["7E"], + painsplit: ["7T", "7L50"], + payback: ["7M"], + playrough: ["7L46", "7S1"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M"], + psychup: ["7M"], rest: ["7M"], return: ["7M"], round: ["7M"], + safeguard: ["7M"], + scratch: ["7L1"], + shadowball: ["7M"], + shadowclaw: ["7M", "7L37"], + shadowsneak: ["7L14"], + slash: ["7L32"], sleeptalk: ["7M"], - spark: ["7L16"], - stringshot: ["7L4", "7L1"], - substitute: ["7M"], + snatch: ["7T"], + snore: ["7T"], + spite: ["7T"], + splash: ["7L1", "7S0"], + substitute: ["7M", "7S1"], swagger: ["7M"], + swordsdance: ["7M"], + taunt: ["7M"], + telekinesis: ["7T"], + thief: ["7M"], + thunder: ["7M"], thunderbolt: ["7M"], thunderwave: ["7M"], toxic: ["7M"], - vicegrip: ["7L1"], - voltswitch: ["7M"], - wildcharge: ["7M"], - xscissor: ["7M", "7L31"], + trick: ["7T"], + trickroom: ["7M"], + willowisp: ["7M"], + woodhammer: ["7L1"], + workup: ["7M"], + xscissor: ["7M"], }}, - vikavolt: {learnset: { - acrobatics: ["7M", "7L19"], - agility: ["7L49"], - airslash: ["7L1"], + mimikyutotem: {learnset: { + afteryou: ["7T"], + astonish: ["7L1"], attract: ["7M"], - bite: ["7L10", "7L1"], - bugbite: ["7L13"], - bugbuzz: ["7L31"], - charge: ["7L1"], + babydolleyes: ["7L10"], + bulkup: ["7M"], chargebeam: ["7M"], + charm: ["7L28", "7S0"], confide: ["7M"], - dig: ["7L37"], - doubleteam: ["7M"], - energyball: ["7M"], + copycat: ["7L1"], + covet: ["7T"], + darkpulse: ["7M"], + dazzlinggleam: ["7M"], + doubleteam: ["7M", "7L5"], + drainpunch: ["7T"], + dreameater: ["7M"], + embargo: ["7M"], facade: ["7M"], - flashcannon: ["7M"], + feintattack: ["7L23", "7S0"], + fling: ["7M"], frustration: ["7M"], - gigaimpact: ["7M"], - guillotine: ["7L25"], + gigadrain: ["7T"], hiddenpower: ["7M"], + honeclaws: ["7L41"], hyperbeam: ["7M"], + infestation: ["7M"], + lastresort: ["7T"], + leechlife: ["7M"], lightscreen: ["7M"], - mudslap: ["7L7", "7L1"], - poisonjab: ["7M"], + magicroom: ["7T"], + mimic: ["7L19"], + painsplit: ["7T", "7L50"], + payback: ["7M"], + playrough: ["7L46"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M"], + psychup: ["7M"], rest: ["7M"], return: ["7M"], - roost: ["7M"], round: ["7M"], - skydrop: ["7M"], + safeguard: ["7M"], + scratch: ["7L1"], + shadowball: ["7M"], + shadowclaw: ["7M", "7L37", "7S0"], + shadowsneak: ["7L14"], + slash: ["7L32", "7S0"], sleeptalk: ["7M"], - solarbeam: ["7M"], - spark: ["7L16"], - stringshot: ["7L4", "7L1"], + snatch: ["7T"], + snore: ["7T"], + spite: ["7T"], + splash: ["7L1"], substitute: ["7M"], swagger: ["7M"], + swordsdance: ["7M"], + taunt: ["7M"], + telekinesis: ["7T"], + thief: ["7M"], thunder: ["7M"], - thunderbolt: ["7M", "7L1"], + thunderbolt: ["7M"], thunderwave: ["7M"], toxic: ["7M"], - vicegrip: ["7L1"], - voltswitch: ["7M"], - wildcharge: ["7M"], + trick: ["7T"], + trickroom: ["7M"], + willowisp: ["7M"], + woodhammer: ["7L1"], + workup: ["7M"], xscissor: ["7M"], - zapcannon: ["7L41"], }}, - crabrawler: {learnset: { - amnesia: ["7E"], + bruxish: {learnset: { + aerialace: ["7M"], + afteryou: ["7T"], + allyswitch: ["7T"], + aquajet: ["7L17"], + aquatail: ["7T", "7L33"], + astonish: ["7L4"], attract: ["7M"], - brickbreak: ["7M"], - brutalswing: ["7M"], - bubble: ["7L1"], - bubblebeam: ["7L17"], + bite: ["7L12"], + blizzard: ["7M"], bulkup: ["7M"], - bulldoze: ["7M"], - closecombat: ["7L49"], + calmmind: ["7M"], confide: ["7M"], - crabhammer: ["7L37"], - dizzypunch: ["7L25"], + confusion: ["7L9"], + crunch: ["7L28"], + disable: ["7L20"], doubleteam: ["7M"], - dynamicpunch: ["7L45"], - earthquake: ["7M"], - endeavor: ["7E"], + dreameater: ["7M"], + embargo: ["7M"], facade: ["7M"], fling: ["7M"], - focusblast: ["7M"], frostbreath: ["7M"], frustration: ["7M"], + gigaimpact: ["7M"], hiddenpower: ["7M"], - irondefense: ["7L42"], - leer: ["7L9"], - payback: ["7M", "7L29"], - poweruppunch: ["7L22"], + icebeam: ["7M"], + icefang: ["7E"], + irontail: ["7T"], + lightscreen: ["7M"], + liquidation: ["7T"], + magiccoat: ["7T"], + magicroom: ["7T"], + painsplit: ["7T"], + payback: ["7M"], + poisonfang: ["7E"], protect: ["7M"], - pursuit: ["7L13"], + psychic: ["7M"], + psychicfangs: ["7L41"], + psywave: ["7L25"], + rage: ["7E"], raindance: ["7M"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - reversal: ["7L33"], - rockslide: ["7M"], - rocksmash: ["7L5"], - rocktomb: ["7M"], round: ["7M"], + safeguard: ["7M"], scald: ["7M"], + screech: ["7L36"], + signalbeam: ["7T"], sleeptalk: ["7M"], - stoneedge: ["7M"], + snatch: ["7T"], + snore: ["7T"], substitute: ["7M"], - sunnyday: ["7M"], - superpower: ["7E"], + surf: ["7M"], swagger: ["7M"], - thief: ["7M"], + swordsdance: ["7M"], + synchronoise: ["7L44"], + taunt: ["7M"], + telekinesis: ["7T"], + torment: ["7M"], toxic: ["7M"], - wideguard: ["7E"], - workup: ["7M"], + trickroom: ["7M"], + uproar: ["7T"], + venoshock: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpulse: ["7T", "7E"], + wonderroom: ["7T"], }}, - crabominable: {learnset: { + drampa: {learnset: { attract: ["7M"], - avalanche: ["7L29"], blizzard: ["7M"], - brickbreak: ["7M"], - brutalswing: ["7M"], - bubble: ["7L1"], - bubblebeam: ["7L17"], - bulkup: ["7M"], + block: ["7T"], bulldoze: ["7M"], - closecombat: ["7L49"], + calmmind: ["7M"], confide: ["7M"], - dizzypunch: ["7L25"], + defog: ["7T"], doubleteam: ["7M"], - dynamicpunch: ["7L45"], + dracometeor: ["7T"], + dragonbreath: ["7L29"], + dragonclaw: ["7M"], + dragonpulse: ["7T", "7L41"], + dragonrage: ["7L21"], + dragonrush: ["7E"], + dragontail: ["7M"], earthquake: ["7M"], + echoedvoice: ["7M", "7L1", "7S0"], + endeavor: ["7T"], + energyball: ["7M"], + extrasensory: ["7L37"], facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], fling: ["7M"], + fly: ["7M", "7L45"], focusblast: ["7M"], - frostbreath: ["7M"], frustration: ["7M"], gigaimpact: ["7M"], - hail: ["7M"], + glare: ["7L13"], + grassknot: ["7M"], + heatwave: ["7T"], + helpinghand: ["7T"], hiddenpower: ["7M"], + hurricane: ["7E", "7S0"], + hyperbeam: ["7M"], + hypervoice: ["7T", "7L49"], icebeam: ["7M"], - icehammer: ["7L37"], - icepunch: ["7L1"], - irondefense: ["7L42"], - leer: ["7L9", "7L1"], - payback: ["7M"], - poweruppunch: ["7L22"], - protect: ["7M"], - pursuit: ["7L13", "7L1"], + icywind: ["7T"], + lightscreen: ["7M", "7L17"], + mist: ["7E"], + naturalgift: ["7L25"], + naturepower: ["7M"], + outrage: ["7T", "7L53"], + playnice: ["7L1", "7S0"], + playrough: ["7E"], + protect: ["7M", "7L9"], + psychup: ["7M"], raindance: ["7M"], + razorwind: ["7E"], rest: ["7M"], return: ["7M"], - reversal: ["7L33"], + roar: ["7M"], rockslide: ["7M"], - rocksmash: ["7L5", "7L1"], - rocktomb: ["7M"], + roost: ["7M"], round: ["7M"], - scald: ["7M"], + safeguard: ["7M", "7L33"], + shadowball: ["7M"], + shadowclaw: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], sleeptalk: ["7M"], - stoneedge: ["7M"], + snarl: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + steelwing: ["7M"], + stompingtantrum: ["7T"], substitute: ["7M"], sunnyday: ["7M"], - swagger: ["7M"], - thief: ["7M"], + superpower: ["7T"], + surf: ["7M"], + tailwind: ["7T"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], toxic: ["7M"], + twister: ["7L5"], + uproar: ["7T"], + waterpulse: ["7T"], workup: ["7M"], }}, - oricorio: {learnset: { - acrobatics: ["7M"], + dhelmise: {learnset: { + absorb: ["7L1"], aerialace: ["7M"], - agility: ["7L46"], - aircutter: ["7L13"], - airslash: ["7L36"], + allyswitch: ["7T"], + anchorshot: ["7L32"], + astonish: ["7L1"], attract: ["7M"], - batonpass: ["7L16"], - calmmind: ["7M"], - captivate: ["7L33", "7E"], + block: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], confide: ["7M"], - doubleslap: ["7L23"], doubleteam: ["7M"], + earthquake: ["7M"], embargo: ["7M"], + energyball: ["7M", "7L41"], facade: ["7M"], - featherdance: ["7L20"], - fly: ["7M"], + flashcannon: ["7M"], frustration: ["7M"], - growl: ["7L4"], - helpinghand: ["7L10"], + gigadrain: ["7T", "7L23"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growth: ["7L1"], + gyroball: ["7M", "7L14"], + heavyslam: ["7L50"], + helpinghand: ["7T"], hiddenpower: ["7M"], - hurricane: ["7L50"], - mirrormove: ["7L43"], - peck: ["7L6"], - pluck: ["7E"], - pound: ["7L1"], + hyperbeam: ["7M"], + irondefense: ["7T"], + ironhead: ["7T"], + knockoff: ["7T"], + megadrain: ["7L5"], + metalsound: ["7L18"], + painsplit: ["7T"], + payback: ["7M"], + phantomforce: ["7L54"], + powerwhip: ["7L59"], protect: ["7M"], - quash: ["7M"], + raindance: ["7M"], + rapidspin: ["7L1"], rest: ["7M"], return: ["7M"], - revelationdance: ["7L40"], - roost: ["7M", "7L30"], + rockslide: ["7M"], + roleplay: ["7T"], round: ["7M"], - safeguard: ["7M", "7E"], - sandstorm: ["7M"], + shadowball: ["7M", "7L36"], + shadowclaw: ["7M"], + slam: ["7L45"], sleeptalk: ["7M"], - steelwing: ["7M"], + sludgewave: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + spite: ["7T"], substitute: ["7M"], + sunnyday: ["7M"], + surf: ["7M"], swagger: ["7M"], + switcheroo: ["7L1"], swordsdance: ["7M"], - tailwind: ["7E"], - taunt: ["7M"], - teeterdance: ["7L26"], + synthesis: ["7T"], + telekinesis: ["7T"], + thief: ["7M"], toxic: ["7M"], - uturn: ["7M"], - workup: ["7M"], + whirlpool: ["7L27"], + wrap: ["7L9"], }}, - cutiefly: {learnset: { - absorb: ["7L1"], - acrobatics: ["7M"], + jangmoo: {learnset: { aerialace: ["7M"], - aromatherapy: ["7L36"], + aquatail: ["7T"], attract: ["7M"], - batonpass: ["7E"], - bestow: ["7E"], - bugbuzz: ["7L26"], - calmmind: ["7M"], + bide: ["7L9"], + brickbreak: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], confide: ["7M"], - dazzlinggleam: ["7M", "7L31"], + counter: ["7E"], doubleteam: ["7M"], - drainingkiss: ["7L16"], - dreameater: ["7M"], - energyball: ["7M"], + dracometeor: ["7T"], + dragonbreath: ["7E"], + dragonclaw: ["7M", "7L41"], + dragondance: ["7L49"], + dragonpulse: ["7T"], + dragontail: ["7M", "7L17"], + dualchop: ["7T"], + earthquake: ["7M"], + echoedvoice: ["7M"], facade: ["7M"], - fairywind: ["7L4"], + falseswipe: ["7M"], + focusblast: ["7M"], frustration: ["7M"], + headbutt: ["7L25"], hiddenpower: ["7M"], - infestation: ["7M"], - leechlife: ["7M"], - lightscreen: ["7M"], - moonblast: ["7E"], - protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], - quiverdance: ["7L41"], - reflect: ["7M"], + irondefense: ["7T", "7L37"], + ironhead: ["7T"], + irontail: ["7T"], + leer: ["7L5"], + lowkick: ["7T"], + nobleroar: ["7L45"], + outrage: ["7T", "7L53"], + payback: ["7M"], + protect: ["7M", "7L13"], rest: ["7M"], return: ["7M"], - roost: ["7M"], + reversal: ["7E"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], safeguard: ["7M"], - silverwind: ["7L13"], - skillswap: ["7E"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33"], + shadowclaw: ["7M"], sleeptalk: ["7M"], - speedswap: ["7E"], - strugglebug: ["7L10"], - stunspore: ["7L7"], + snore: ["7T"], substitute: ["7M"], - sunnyday: ["7M"], swagger: ["7M"], - sweetscent: ["7L21"], - thief: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], toxic: ["7M"], - uturn: ["7M"], + uproar: ["7T"], + workup: ["7M", "7L29"], + xscissor: ["7M"], }}, - ribombee: {learnset: { - absorb: ["7L1"], - acrobatics: ["7M"], + hakamoo: {learnset: { aerialace: ["7M"], - aromatherapy: ["7L42"], + aquatail: ["7T"], attract: ["7M"], - bugbuzz: ["7L28"], - calmmind: ["7M"], + autotomize: ["7L1"], + bide: ["7L9", "7L1"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + closecombat: ["7L63"], confide: ["7M"], - dazzlinggleam: ["7M", "7L35"], doubleteam: ["7M"], - drainingkiss: ["7L16"], - dreameater: ["7M"], - energyball: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M", "7L43"], + dragondance: ["7L53"], + dragonpulse: ["7T"], + dragontail: ["7M", "7L17"], + drainpunch: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], + echoedvoice: ["7M"], facade: ["7M"], - fairywind: ["7L4", "7L1"], + falseswipe: ["7M"], + fling: ["7M"], + focusblast: ["7M"], frustration: ["7M"], + headbutt: ["7L25"], hiddenpower: ["7M"], - infestation: ["7M"], - leechlife: ["7M"], - lightscreen: ["7M"], - naturepower: ["7M"], - pollenpuff: ["7L1"], - protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], - quiverdance: ["7L49"], - reflect: ["7M"], + irondefense: ["7T", "7L38"], + ironhead: ["7T"], + irontail: ["7T"], + leer: ["7L5", "7L1"], + lowkick: ["7T"], + nobleroar: ["7L48"], + outrage: ["7T", "7L58"], + payback: ["7M"], + protect: ["7M", "7L13", "7L1"], rest: ["7M"], return: ["7M"], - roost: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], safeguard: ["7M"], - silverwind: ["7L13"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33"], + shadowclaw: ["7M"], + skyuppercut: ["7L1"], sleeptalk: ["7M"], - solarbeam: ["7M"], - strugglebug: ["7L10", "7L1"], - stunspore: ["7L7", "7L1"], + snore: ["7T"], substitute: ["7M"], - sunnyday: ["7M"], swagger: ["7M"], - sweetscent: ["7L21"], - thief: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], toxic: ["7M"], - uturn: ["7M"], + uproar: ["7T"], + workup: ["7M", "7L29"], + xscissor: ["7M"], }}, - rockruff: {learnset: { + kommoo: {learnset: { + aerialace: ["7M"], + aquatail: ["7T"], attract: ["7M"], - bite: ["7L7"], + autotomize: ["7L1"], + bellydrum: ["7L1"], + bide: ["7L9", "7L1"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + clangingscales: ["7L1"], + closecombat: ["7L75"], confide: ["7M"], - crunch: ["7L40"], - crushclaw: ["7E"], doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M", "7L43"], + dragondance: ["7L59"], + dragonpulse: ["7T"], + dragontail: ["7M", "7L17"], + drainpunch: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], echoedvoice: ["7M"], + endeavor: ["7T"], facade: ["7M"], - firefang: ["7E"], + falseswipe: ["7M"], + firepunch: ["7T"], + flamethrower: ["7M"], + flashcannon: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], + gigaimpact: ["7M"], + headbutt: ["7L25"], hiddenpower: ["7M"], - howl: ["7L12"], - leer: ["7L1"], - odorsleuth: ["7L18"], - protect: ["7M"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + icepunch: ["7T"], + irondefense: ["7T", "7L38"], + ironhead: ["7T"], + irontail: ["7T"], + laserfocus: ["7T"], + leer: ["7L5", "7L1"], + lowkick: ["7T"], + nobleroar: ["7L51"], + outrage: ["7T", "7L67"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M", "7L13", "7L1"], rest: ["7M"], return: ["7M"], - roar: ["7M", "7L26"], - rockclimb: ["7L45"], + roar: ["7M"], rockpolish: ["7M"], - rockslide: ["7M", "7L34"], - rockthrow: ["7L15"], - rocktomb: ["7M", "7L23"], + rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], - sandattack: ["7L4"], - scaryface: ["7L37"], + safeguard: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33"], + shadowclaw: ["7M"], + shockwave: ["7T"], + skyuppercut: ["7L1"], sleeptalk: ["7M"], - snarl: ["7M"], - stealthrock: ["7L29"], - stoneedge: ["7M", "7L48"], + snore: ["7T"], + stealthrock: ["7T"], + stompingtantrum: ["7T"], substitute: ["7M"], - suckerpunch: ["7E"], + superpower: ["7T"], swagger: ["7M"], + swordsdance: ["7M"], tackle: ["7L1"], taunt: ["7M"], - thrash: ["7E"], - thunderfang: ["7E"], + thunderpunch: ["7T"], toxic: ["7M"], + uproar: ["7T"], + waterpulse: ["7T"], + workup: ["7M", "7L29"], + xscissor: ["7M"], }}, - lycanroc: {learnset: { - accelerock: ["7L1"], + kommoototem: {learnset: { + aerialace: ["7M"], + aquatail: ["7T"], attract: ["7M"], - bite: ["7L7", "7L1"], + autotomize: ["7L1"], + bellydrum: ["7L1"], + bide: ["7L9", "7L1"], brickbreak: ["7M"], + brutalswing: ["7M"], bulkup: ["7M"], + bulldoze: ["7M"], + clangingscales: ["7L1"], + closecombat: ["7L75"], confide: ["7M"], - crunch: ["7L40"], doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M", "7L43", "7S0"], + dragondance: ["7L59"], + dragonpulse: ["7T"], + dragontail: ["7M", "7L17"], + drainpunch: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], echoedvoice: ["7M"], + endeavor: ["7T"], facade: ["7M"], + falseswipe: ["7M"], + firepunch: ["7T"], + flamethrower: ["7M"], + flashcannon: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], + gigaimpact: ["7M"], + headbutt: ["7L25"], hiddenpower: ["7M"], - howl: ["7L12"], - leer: ["7L1"], - odorsleuth: ["7L18"], - protect: ["7M"], - quickattack: ["7L1"], - quickguard: ["7L1"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + icepunch: ["7T"], + irondefense: ["7T", "7L38", "7S0"], + ironhead: ["7T"], + irontail: ["7T"], + laserfocus: ["7T"], + leer: ["7L5", "7L1"], + lowkick: ["7T"], + nobleroar: ["7L51"], + outrage: ["7T", "7L67"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M", "7L13", "7L1"], rest: ["7M"], return: ["7M"], - roar: ["7M", "7L26"], - rockclimb: ["7L45"], + roar: ["7M"], rockpolish: ["7M"], - rockslide: ["7M", "7L34"], - rockthrow: ["7L15"], - rocktomb: ["7M", "7L23"], + rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], - sandattack: ["7L4", "7L1"], - scaryface: ["7L37"], + safeguard: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33", "7S0"], + shadowclaw: ["7M"], + shockwave: ["7T"], + skyuppercut: ["7L1"], sleeptalk: ["7M"], - snarl: ["7M"], - stealthrock: ["7L29"], - stoneedge: ["7M", "7L48"], + snore: ["7T"], + stealthrock: ["7T"], + stompingtantrum: ["7T"], substitute: ["7M"], + superpower: ["7T"], swagger: ["7M"], swordsdance: ["7M"], tackle: ["7L1"], taunt: ["7M"], + thunderpunch: ["7T"], toxic: ["7M"], + uproar: ["7T"], + waterpulse: ["7T"], + workup: ["7M", "7L29", "7S0"], + xscissor: ["7M"], }}, - lycanrocmidnight: {learnset: { - attract: ["7M"], - bite: ["7L7", "7L1"], - brickbreak: ["7M"], - bulkup: ["7M"], + tapukoko: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + agility: ["7L53", "7S1", "7S0"], + bravebird: ["7L1"], + calmmind: ["7M"], + charge: ["7L26"], confide: ["7M"], - counter: ["7L1"], - crunch: ["7L40"], + dazzlinggleam: ["7M"], + defog: ["7T"], + discharge: ["7L48", "7S1", "7S0"], doubleteam: ["7M"], echoedvoice: ["7M"], + electricterrain: ["7L1"], + electroball: ["7L58", "7S1", "7S0"], + electroweb: ["7T"], facade: ["7M"], - firefang: ["7S0"], + falseswipe: ["7M", "7L1"], + fly: ["7M"], frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], hiddenpower: ["7M"], - howl: ["7L12"], - leer: ["7L1"], - odorsleuth: ["7L18"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T"], + lightscreen: ["7M"], + meanlook: ["7L1"], + mirrormove: ["7L38"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S1", "7S0"], + powerswap: ["7L1"], protect: ["7M"], - rest: ["7M"], + psychup: ["7M"], + quickattack: ["7L1"], + raindance: ["7M"], + reflect: ["7M"], return: ["7M"], - reversal: ["7L1"], - roar: ["7M", "7L26"], - rockclimb: ["7L45"], - rockpolish: ["7M"], - rockslide: ["7M", "7L34"], - rockthrow: ["7L15"], - rocktomb: ["7M", "7L23"], + roar: ["7M"], + roost: ["7M"], round: ["7M"], - sandattack: ["7L4", "7L1"], - scaryface: ["7L37"], + safeguard: ["7M"], + screech: ["7L20"], + shockwave: ["7T", "7L14"], + skyattack: ["7T"], + skydrop: ["7M"], sleeptalk: ["7M"], - snarl: ["7M"], - stealthrock: ["7L29"], - stoneedge: ["7M", "7L48", "7S0"], + snore: ["7T"], + spark: ["7L8"], + steelwing: ["7M"], substitute: ["7M"], - suckerpunch: ["7S0"], swagger: ["7M"], - swordsdance: ["7M", "7S0"], - tackle: ["7L1"], - taunt: ["7M", "7L1"], + taunt: ["7M"], + telekinesis: ["7T"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7T"], + thundershock: ["7L1"], + thunderwave: ["7M"], + torment: ["7M"], toxic: ["7M"], + uturn: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M", "7L32"], + withdraw: ["7L1"], + workup: ["7M"], }}, - wishiwashi: {learnset: { - aquaring: ["7L17"], - aquatail: ["7L38"], - attract: ["7M"], - beatup: ["7L33"], - brine: ["7L14"], - bulldoze: ["7M"], + tapulele: {learnset: { + allyswitch: ["7T"], + aromatherapy: ["7L1"], + aromaticmist: ["7L1"], + astonish: ["7L1"], + calmmind: ["7M"], + chargebeam: ["7M"], confide: ["7M"], - dive: ["7L30"], - doubleedge: ["7L41"], + confusion: ["7L1"], + dazzlinggleam: ["7M"], doubleteam: ["7M"], - earthquake: ["7M"], - endeavor: ["7L49"], + drainingkiss: ["7L1"], + echoedvoice: ["7M"], + energyball: ["7M"], + extrasensory: ["7L48", "7S1", "7S0"], facade: ["7M"], - feintattack: ["7L9"], + flatter: ["7L53", "7S1", "7S0"], + fling: ["7M"], + focusblast: ["7M"], frustration: ["7M"], - growl: ["7L1"], - hail: ["7M"], - helpinghand: ["7L6"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gravity: ["7T"], hiddenpower: ["7M"], - hydropump: ["7L54"], - icebeam: ["7M"], - mist: ["7E"], - muddywater: ["7E"], + hyperbeam: ["7M"], + irondefense: ["7T"], + lightscreen: ["7M"], + magiccoat: ["7T"], + magicroom: ["7T"], + meanlook: ["7L1"], + moonblast: ["7L58", "7S1", "7S0"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S1", "7S0"], protect: ["7M"], - raindance: ["7M"], - rest: ["7M"], + psybeam: ["7L14"], + psychic: ["7M"], + psychicterrain: ["7L1"], + psychup: ["7M"], + psyshock: ["7M", "7L32"], + psywave: ["7L8"], + reflect: ["7M"], return: ["7M"], round: ["7M"], - scald: ["7M"], + safeguard: ["7M"], + shadowball: ["7M"], + skillswap: ["7T", "7L26"], sleeptalk: ["7M"], - soak: ["7L46"], + snore: ["7T"], substitute: ["7M"], - surf: ["7M"], + sunnyday: ["7M"], swagger: ["7M"], - takedown: ["7L25"], - tearfullook: ["7L22"], + sweetscent: ["7L20"], + taunt: ["7M"], + telekinesis: ["7T"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + tickle: ["7L38"], + torment: ["7M"], toxic: ["7M"], - uturn: ["7M"], - waterfall: ["7M"], - watergun: ["7L1"], - waterpulse: ["7E"], - watersport: ["7E"], + withdraw: ["7L1"], + wonderroom: ["7T"], }}, - mareanie: {learnset: { - attract: ["7M"], - bite: ["7L9"], - blizzard: ["7M"], + tapubulu: {learnset: { + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M"], + calmmind: ["7M"], confide: ["7M"], - doubleteam: ["7M"], + dazzlinggleam: ["7M"], + disable: ["7L1"], + dualchop: ["7T"], + echoedvoice: ["7M"], + energyball: ["7M"], facade: ["7M"], - frostbreath: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], - hail: ["7M"], - haze: ["7E"], + gigadrain: ["7T", "7L14"], + gigaimpact: ["7M"], + grassknot: ["7M"], + grassyterrain: ["7L1"], hiddenpower: ["7M"], - icebeam: ["7M"], - infestation: ["7M"], - liquidation: ["7L49"], + hornattack: ["7L8"], + hornleech: ["7L32"], + hyperbeam: ["7M"], + irondefense: ["7T"], + leafage: ["7L1"], + leechseed: ["7L26"], + lightscreen: ["7M"], + meanlook: ["7L1"], + megahorn: ["7L53", "7S0"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S0"], payback: ["7M"], - peck: ["7L5"], - pinmissile: ["7L45"], - poisonjab: ["7M", "7L37"], - poisonsting: ["7L1"], protect: ["7M"], - raindance: ["7M"], - recover: ["7L33"], - rest: ["7M"], + psychup: ["7M"], + reflect: ["7M"], return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L38"], round: ["7M"], safeguard: ["7M"], - scald: ["7M"], + scaryface: ["7L20"], + seedbomb: ["7T"], + skullbash: ["7L58", "7S0"], sleeptalk: ["7M"], - sludgebomb: ["7M"], - sludgewave: ["7M"], - spikecannon: ["7L29"], - spitup: ["7E"], - stockpile: ["7E", "7S0"], + smartstrike: ["7M"], + snarl: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + stoneedge: ["7M"], substitute: ["7M"], - surf: ["7M"], + sunnyday: ["7M"], + superpower: ["7T", "7L1"], swagger: ["7M"], - swallow: ["7E", "7S0"], - toxic: ["7M", "7L21", "7S0"], - toxicspikes: ["7L13"], - venomdrench: ["7L41"], - venoshock: ["7M", "7L25"], - wideguard: ["7L17"], + swordsdance: ["7M"], + synthesis: ["7T"], + taunt: ["7M"], + telekinesis: ["7T"], + torment: ["7M"], + toxic: ["7M"], + whirlwind: ["7L1"], + withdraw: ["7L1"], + woodhammer: ["7L1"], + workup: ["7M"], + worryseed: ["7T"], + zenheadbutt: ["7T", "7L48", "7S0"], }}, - toxapex: {learnset: { - attract: ["7M"], - banefulbunker: ["7L1"], - bite: ["7L9", "7L1"], + tapufini: {learnset: { + aquaring: ["7L53", "7S0"], blizzard: ["7M"], + brine: ["7L32"], + calmmind: ["7M"], confide: ["7M"], + dazzlinggleam: ["7M"], + defog: ["7T", "7L38"], doubleteam: ["7M"], + echoedvoice: ["7M"], facade: ["7M"], - frostbreath: ["7M"], + fling: ["7M"], frustration: ["7M"], - hail: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gravity: ["7T"], + haze: ["7L1"], + healpulse: ["7L1"], hiddenpower: ["7M"], + hydropump: ["7L58", "7S0"], + hyperbeam: ["7M"], icebeam: ["7M"], - infestation: ["7M"], + icepunch: ["7T"], + icywind: ["7T"], + irondefense: ["7T"], + knockoff: ["7T"], lightscreen: ["7M"], - liquidation: ["7L58"], - payback: ["7M"], - peck: ["7L5", "7L1"], - pinmissile: ["7L51"], - poisonjab: ["7M", "7L37"], - poisonsting: ["7L1"], + magiccoat: ["7T"], + magicroom: ["7T"], + meanlook: ["7L1"], + mist: ["7L1"], + mistyterrain: ["7L1"], + moonblast: ["7L1"], + muddywater: ["7L48", "7S0"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S0"], protect: ["7M"], + psychup: ["7M"], raindance: ["7M"], - recover: ["7L33"], - rest: ["7M"], + reflect: ["7M"], + refresh: ["7L26"], return: ["7M"], round: ["7M"], safeguard: ["7M"], scald: ["7M"], + shadowball: ["7M"], sleeptalk: ["7M"], - sludgebomb: ["7M"], - sludgewave: ["7M"], - smackdown: ["7M"], - spikecannon: ["7L29"], + smartstrike: ["7M"], + snore: ["7T"], + soak: ["7L20"], substitute: ["7M"], surf: ["7M"], swagger: ["7M"], - toxic: ["7M", "7L21"], - toxicspikes: ["7L13", "7L1"], - venomdrench: ["7L44"], - venoshock: ["7M", "7L25"], - wideguard: ["7L17"], + taunt: ["7M"], + telekinesis: ["7T"], + torment: ["7M"], + toxic: ["7M"], + trick: ["7T"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpulse: ["7T", "7L8"], + whirlpool: ["7L14"], + withdraw: ["7L1"], + wonderroom: ["7T"], }}, - mudbray: {learnset: { - attract: ["7M"], - bide: ["7L22"], - bodyslam: ["7E"], - bulldoze: ["7M", "7L10"], - closecombat: ["7E"], + cosmog: {learnset: { + splash: ["7L1", "7S0"], + teleport: ["7L23"], + }}, + cosmoem: {learnset: { + cosmicpower: ["7L1"], + teleport: ["7L1"], + }}, + solgaleo: {learnset: { + bulldoze: ["7M"], + calmmind: ["7M"], confide: ["7M"], - counter: ["7L36"], - doubleedge: ["7E"], - doublekick: ["7L15"], + cosmicpower: ["7L1", "7S0", "7S1"], + crunch: ["7L37", "7S0", "7S1"], doubleteam: ["7M"], - earthquake: ["7M", "7L38"], + earthquake: ["7M"], + endeavor: ["7T"], facade: ["7M"], + fireblast: ["7M"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flareblitz: ["7L61"], + flashcannon: ["7M", "7L23"], + focusblast: ["7M"], frustration: ["7M"], - heavyslam: ["7L31"], + gigaimpact: ["7M", "7L73"], + gyroball: ["7M"], hiddenpower: ["7M"], - highhorsepower: ["7L24"], - irondefense: ["7L29"], - lowsweep: ["7M"], - magnitude: ["7E"], - megakick: ["7L43"], - mudbomb: ["7E"], - mudslap: ["7L1"], - mudsport: ["7L3"], - payback: ["7M"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + irondefense: ["7T"], + ironhead: ["7T", "7L7"], + irontail: ["7T"], + knockoff: ["7T"], + lastresort: ["7T"], + lightscreen: ["7M"], + metalburst: ["7L43"], + metalclaw: ["7L1"], + metalsound: ["7L13"], + morningsun: ["7L31"], + nobleroar: ["7L59"], + outrage: ["7T"], protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + psyshock: ["7M"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], roar: ["7M"], rockslide: ["7M"], rocktomb: ["7M"], - rototiller: ["7L8"], round: ["7M"], - sandstorm: ["7M"], + safeguard: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], - stomp: ["7L17"], + snarl: ["7M"], + snore: ["7T"], + solarbeam: ["7M", "7L47"], + stoneedge: ["7M"], substitute: ["7M"], - superpower: ["7L45"], + sunnyday: ["7M"], + sunsteelstrike: ["7L1", "7S0", "7S1"], + superpower: ["7T"], swagger: ["7M"], + teleport: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], toxic: ["7M"], + trickroom: ["7M"], + wakeupslap: ["7L1"], + wideguard: ["7L67"], + wildcharge: ["7M"], + workup: ["7M"], + zenheadbutt: ["7T", "7L19", "7S0", "7S1"], }}, - mudsdale: {learnset: { - attract: ["7M"], - bide: ["7L22"], - bulldoze: ["7M", "7L10", "7L1"], + lunala: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + airslash: ["7L19"], + blizzard: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], confide: ["7M"], - counter: ["7L42"], - doublekick: ["7L15"], + confuseray: ["7L13"], + confusion: ["7L1"], + cosmicpower: ["7L1", "7S0", "7S1"], + dazzlinggleam: ["7M"], + defog: ["7T"], doubleteam: ["7M"], - earthquake: ["7M", "7L47"], + dreameater: ["7M", "7L59"], facade: ["7M"], + fly: ["7M"], focusblast: ["7M"], frustration: ["7M"], gigaimpact: ["7M"], - heavyslam: ["7L34"], + heatwave: ["7T"], hiddenpower: ["7M"], - highhorsepower: ["7L24"], - irondefense: ["7L29"], - lowsweep: ["7M"], - megakick: ["7L55"], - mudslap: ["7L1"], - mudsport: ["7L3", "7L1"], - payback: ["7M"], + hyperbeam: ["7M", "7L73"], + hypnosis: ["7L1"], + icebeam: ["7M"], + icywind: ["7T"], + lightscreen: ["7M"], + magiccoat: ["7T", "7L43"], + magicroom: ["7T"], + moonblast: ["7L47"], + moongeistbeam: ["7L1", "7S0", "7S1"], + moonlight: ["7L31"], + nightdaze: ["7L37", "7S0", "7S1"], + nightshade: ["7L7"], + phantomforce: ["7L61"], protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + psyshock: ["7M"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], roar: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - rototiller: ["7L8", "7L1"], + roost: ["7M"], round: ["7M"], - sandstorm: ["7M"], + safeguard: ["7M"], + shadowball: ["7M", "7L23", "7S0", "7S1"], + shadowclaw: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + skyattack: ["7T"], + skydrop: ["7M"], sleeptalk: ["7M"], - stomp: ["7L17"], + snore: ["7T"], + solarbeam: ["7M"], + spite: ["7T"], substitute: ["7M"], - superpower: ["7L60"], + sunnyday: ["7M"], swagger: ["7M"], + tailwind: ["7T"], + telekinesis: ["7T"], + teleport: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], toxic: ["7M"], + trick: ["7T"], + trickroom: ["7M"], + wideguard: ["7L67"], + willowisp: ["7M"], + wonderroom: ["7T"], + workup: ["7M"], }}, - dewpider: {learnset: { - aquaring: ["7L24"], - attract: ["7M"], - aurorabeam: ["7E"], - bite: ["7L21"], - blizzard: ["7M"], - bubble: ["7L1"], - bubblebeam: ["7L16"], - bugbite: ["7L13"], + nihilego: {learnset: { + acid: ["7L1"], + acidspray: ["7L47", "7S0", "7S1"], + allyswitch: ["7T"], + bind: ["7T"], + brutalswing: ["7M"], + chargebeam: ["7M"], + clearsmog: ["7L7"], confide: ["7M"], - crunch: ["7L32"], + constrict: ["7L1"], + dazzlinggleam: ["7M"], doubleteam: ["7M"], - entrainment: ["7L48"], + echoedvoice: ["7M"], facade: ["7M"], - frostbreath: ["7M"], + foulplay: ["7T"], frustration: ["7M"], + grassknot: ["7M"], + guardsplit: ["7L1"], + gunkshot: ["7T"], + headbutt: ["7L19"], + headsmash: ["7L73"], hiddenpower: ["7M"], - icebeam: ["7M"], - infestation: ["7M", "7L5"], - leechlife: ["7M", "7L29"], - liquidation: ["7L45"], - lunge: ["7L37"], - mirrorcoat: ["7L40"], + ironhead: ["7T"], + knockoff: ["7T"], + lightscreen: ["7M"], + magiccoat: ["7T"], + mirrorcoat: ["7L43", "7S0", "7S1"], + painsplit: ["7T"], poisonjab: ["7M"], - powersplit: ["7E"], + pound: ["7L1"], + powergem: ["7L37", "7S0", "7S1"], + powersplit: ["7L1"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M"], + psyshock: ["7M"], + psywave: ["7L13"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], + roleplay: ["7T"], round: ["7M"], - scald: ["7M"], + safeguard: ["7M", "7L31"], + sandstorm: ["7M"], sleeptalk: ["7M"], - spiderweb: ["7L8"], - spitup: ["7E"], - stockpile: ["7E"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snore: ["7T"], + spite: ["7T"], + stealthrock: ["7T", "7L59", "7S1"], substitute: ["7M"], - surf: ["7M"], swagger: ["7M"], + telekinesis: ["7T"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + tickle: ["7L1"], toxic: ["7M"], - waterfall: ["7M"], - watersport: ["7L1"], - xscissor: ["7M"], + toxicspikes: ["7L29"], + trickroom: ["7M"], + venomdrench: ["7L53", "7S0"], + venoshock: ["7M", "7L23"], + wonderroom: ["7T", "7L67"], + worryseed: ["7T"], + zenheadbutt: ["7T"], }}, - araquanid: {learnset: { - aquaring: ["7L26"], - attract: ["7M"], - bite: ["7L21"], - blizzard: ["7M"], - bubble: ["7L1"], - bubblebeam: ["7L16"], - bugbite: ["7L13", "7L1"], + buzzwole: {learnset: { + bounce: ["7T"], + brickbreak: ["7M"], + bugbite: ["7T"], + bulkup: ["7M", "7L13"], + bulldoze: ["7M"], + cometpunch: ["7L7"], confide: ["7M"], - crunch: ["7L38"], + counter: ["7L43", "7S0", "7S1"], doubleteam: ["7M"], - entrainment: ["7L62"], + drainpunch: ["7T"], + dualchop: ["7T"], + dynamicpunch: ["7L59", "7S0", "7S1"], + earthquake: ["7M"], + endeavor: ["7T"], + endure: ["7L23"], facade: ["7M"], - frostbreath: ["7M"], + falseswipe: ["7M"], + fellstinger: ["7L1"], + fling: ["7M"], + focusenergy: ["7L1"], + focuspunch: ["7T", "7L73"], frustration: ["7M"], + gigaimpact: ["7M"], + gyroball: ["7M"], + hammerarm: ["7L47", "7S0", "7S1"], + harden: ["7L1"], hiddenpower: ["7M"], - icebeam: ["7M"], - infestation: ["7M", "7L5", "7L1"], - leechlife: ["7M", "7L33"], - liquidation: ["7L57"], - lunge: ["7L45"], - mirrorcoat: ["7L50"], + icepunch: ["7T", "7L1"], + ironhead: ["7T"], + leechlife: ["7M", "7L29"], + lowsweep: ["7M"], + lunge: ["7L53", "7S0", "7S1"], + megapunch: ["7L37"], + outrage: ["7T"], + payback: ["7M"], poisonjab: ["7M"], + poweruppunch: ["7L1"], protect: ["7M"], - raindance: ["7M"], - reflect: ["7M"], rest: ["7M"], return: ["7M"], + reversal: ["7L1"], + rockslide: ["7M"], + rocktomb: ["7M"], + roost: ["7M"], round: ["7M"], - safeguard: ["7M"], - scald: ["7M"], sleeptalk: ["7M"], - soak: ["7L1"], - spiderweb: ["7L8", "7L1"], + smackdown: ["7M"], + snore: ["7T"], + stompingtantrum: ["7T"], + stoneedge: ["7M"], substitute: ["7M"], - surf: ["7M"], + superpower: ["7T", "7L67"], swagger: ["7M"], + taunt: ["7M", "7L31"], + thunderpunch: ["7T", "7L1"], toxic: ["7M"], - waterfall: ["7M"], - wideguard: ["7L1"], - xscissor: ["7M"], + vitalthrow: ["7L19"], + workup: ["7M"], }}, - fomantis: {learnset: { - aromatherapy: ["7E"], - attract: ["7M"], + pheromosa: {learnset: { + agility: ["7L37"], + blizzard: ["7M"], + block: ["7T"], + bounce: ["7T", "7L29"], + brickbreak: ["7M"], + bugbite: ["7T"], + bugbuzz: ["7L53", "7S0", "7S1"], confide: ["7M"], - defog: ["7E"], + doublekick: ["7L1"], doubleteam: ["7M"], - energyball: ["7M"], + drillrun: ["7T"], + echoedvoice: ["7M"], + electroweb: ["7T"], facade: ["7M"], falseswipe: ["7M"], + feint: ["7L19"], fling: ["7M"], + focusblast: ["7M"], + foulplay: ["7T"], frustration: ["7M"], - furycutter: ["7L1"], - gigadrain: ["7E"], - grassknot: ["7M"], - growth: ["7L14"], + gigaimpact: ["7M"], hiddenpower: ["7M"], - ingrain: ["7L19"], - leafage: ["7L5"], - leafblade: ["7L23"], - leafstorm: ["7E"], - leechlife: ["7M"], - naturepower: ["7M"], - payback: ["7M"], + highjumpkick: ["7L67"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icywind: ["7T"], + jumpkick: ["7L31"], + laserfocus: ["7T"], + leer: ["7L1"], + lowkick: ["7T", "7L1"], + lowsweep: ["7M"], + lunge: ["7L47", "7S0", "7S1"], + mefirst: ["7L59", "7S0", "7S1"], + outrage: ["7T"], poisonjab: ["7M"], protect: ["7M"], - razorleaf: ["7L10"], + quickguard: ["7L1"], + quiverdance: ["7L1"], + rapidspin: ["7L1"], rest: ["7M"], return: ["7M"], + roost: ["7M"], round: ["7M"], - safeguard: ["7M"], - slash: ["7L32"], + shockwave: ["7T"], + signalbeam: ["7T"], + silverwind: ["7L23"], sleeptalk: ["7M"], - solarbeam: ["7M", "7L41"], + snatch: ["7T"], + snore: ["7T"], + speedswap: ["7L73"], + stomp: ["7L13"], substitute: ["7M"], - sunnyday: ["7M", "7L46"], swagger: ["7M"], - sweetscent: ["7L37"], - swordsdance: ["7M"], - synthesis: ["7L28"], + swift: ["7L7"], + taunt: ["7M"], + throatchop: ["7T"], + torment: ["7M"], toxic: ["7M"], - weatherball: ["7E"], - xscissor: ["7M"], + triplekick: ["7L43", "7S0", "7S1"], + uturn: ["7M"], }}, - lurantis: {learnset: { - aerialace: ["7M"], - attract: ["7M"], - brickbreak: ["7M"], + xurkitree: {learnset: { + bind: ["7T"], + brutalswing: ["7M"], + calmmind: ["7M"], + charge: ["7L1"], + chargebeam: ["7M"], confide: ["7M"], + dazzlinggleam: ["7M"], + discharge: ["7L47", "7S0", "7S1"], doubleteam: ["7M"], + eerieimpulse: ["7L29"], + electricterrain: ["7L53", "7S0", "7S1"], + electroweb: ["7T"], energyball: ["7M"], facade: ["7M"], - falseswipe: ["7M"], fling: ["7M"], frustration: ["7M"], - furycutter: ["7L1"], gigaimpact: ["7M"], grassknot: ["7M"], - growth: ["7L14", "7L1"], + gravity: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], + hypnosis: ["7L43", "7S0", "7S1"], ingrain: ["7L19"], - leafage: ["7L5", "7L1"], - leafblade: ["7L23"], - leechlife: ["7M"], - lowsweep: ["7M"], + iondeluge: ["7L67"], + lightscreen: ["7M"], + magiccoat: ["7T"], + magnetrise: ["7T"], naturepower: ["7M"], - payback: ["7M"], - petalblizzard: ["7L1"], - poisonjab: ["7M"], + powerwhip: ["7L59", "7S0", "7S1"], protect: ["7M"], - razorleaf: ["7L10", "7L1"], + raindance: ["7M"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], round: ["7M"], - safeguard: ["7M"], - slash: ["7L32"], + shockwave: ["7T", "7L13"], + signalbeam: ["7T", "7L31"], sleeptalk: ["7M"], + snore: ["7T"], solarbeam: ["7M"], - solarblade: ["7L47"], + spark: ["7L1"], substitute: ["7M"], - sunnyday: ["7M", "7L55"], + sunnyday: ["7M"], swagger: ["7M"], - sweetscent: ["7L40"], - swordsdance: ["7M"], - synthesis: ["7L28"], + tailglow: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M", "7L37"], + thunderpunch: ["7T", "7L23"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L7"], toxic: ["7M"], - xscissor: ["7M", "7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + wrap: ["7L1"], + zapcannon: ["7L73"], }}, - morelull: {learnset: { + celesteela: {learnset: { absorb: ["7L1"], - amnesia: ["7E"], - astonish: ["7L4"], - attract: ["7M"], + acrobatics: ["7M"], + airslash: ["7L1"], + autotomize: ["7L43", "7S0", "7S1"], + block: ["7T"], + brutalswing: ["7M"], + bulldoze: ["7M"], confide: ["7M"], - confuseray: ["7L25"], - dazzlinggleam: ["7M"], + doubleedge: ["7L73"], doubleteam: ["7M"], - dreameater: ["7M", "7L43"], + earthquake: ["7M"], energyball: ["7M"], - flash: ["7L8"], + explosion: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flashcannon: ["7M", "7L37"], + fly: ["7M"], frustration: ["7M"], - gigadrain: ["7L29"], + gigadrain: ["7T", "7L31"], + gigaimpact: ["7M"], grassknot: ["7M"], - growth: ["7E"], + gravity: ["7T"], + gyroball: ["7M"], + harden: ["7L1"], + heavyslam: ["7L67"], hiddenpower: ["7M"], - ingrain: ["7L22"], - leechseed: ["7E"], - lightscreen: ["7M"], - megadrain: ["7L15"], - moonblast: ["7L39"], - moonlight: ["7L11"], - naturepower: ["7M"], - poisonpowder: ["7E"], + hyperbeam: ["7M"], + ingrain: ["7L1"], + irondefense: ["7T", "7L59", "7S0", "7S1"], + ironhead: ["7T", "7L29"], + leechseed: ["7L19"], + magnetrise: ["7T"], + megadrain: ["7L13"], + metalsound: ["7L23"], protect: ["7M"], rest: ["7M"], return: ["7M"], + rockslide: ["7M"], round: ["7M"], - safeguard: ["7M"], - sleeppowder: ["7L18"], + seedbomb: ["7T", "7L47", "7S0", "7S1"], + shockwave: ["7T"], + skullbash: ["7L53", "7S0", "7S1"], sleeptalk: ["7M"], - sludgebomb: ["7M"], + smackdown: ["7M", "7L7"], + smartstrike: ["7M"], + snore: ["7T"], solarbeam: ["7M"], - spore: ["7L36"], - spotlight: ["7L46"], - strengthsap: ["7L32"], - stunspore: ["7E"], + stompingtantrum: ["7T"], + stoneedge: ["7M"], substitute: ["7M"], - sunnyday: ["7M"], + superpower: ["7T"], swagger: ["7M"], - thunderwave: ["7M"], + tackle: ["7L1"], toxic: ["7M"], + wideguard: ["7L1"], + zenheadbutt: ["7T"], }}, - shiinotic: {learnset: { - absorb: ["7L1"], - astonish: ["7L4", "7L1"], - attract: ["7M"], - chargebeam: ["7M"], + kartana: {learnset: { + aerialace: ["7M", "7L23"], + aircutter: ["7L1"], + airslash: ["7L59", "7S0", "7S1"], + brickbreak: ["7M"], + calmmind: ["7M"], confide: ["7M"], - confuseray: ["7L26"], - dazzlinggleam: ["7M"], + cut: ["7L1"], + defog: ["7T", "7L1"], + detect: ["7L53", "7S0", "7S1"], doubleteam: ["7M"], - dreameater: ["7M", "7L49"], - energyball: ["7M"], - flash: ["7L8", "7L1"], + falseswipe: ["7M", "7L7"], frustration: ["7M"], - gigadrain: ["7L31"], + furycutter: ["7L1"], + gigadrain: ["7T"], gigaimpact: ["7M"], - grassknot: ["7M"], + guillotine: ["7L73"], hiddenpower: ["7M"], - ingrain: ["7L22", "7L1"], - lightscreen: ["7M"], - megadrain: ["7L15"], - moonblast: ["7L44"], - moonlight: ["7L11"], - naturepower: ["7M"], + irondefense: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T", "7L29"], + lastresort: ["7T"], + leafblade: ["7L43", "7S0", "7S1"], + nightslash: ["7L31"], protect: ["7M"], + psychocut: ["7L67"], + razorleaf: ["7L13"], rest: ["7M"], return: ["7M"], round: ["7M"], - safeguard: ["7M"], - sleeppowder: ["7L18"], + sacredsword: ["7L1"], sleeptalk: ["7M"], - sludgebomb: ["7M"], - solarbeam: ["7M"], - spore: ["7L40"], - spotlight: ["7L53"], - strengthsap: ["7L35"], + smartstrike: ["7M"], + snore: ["7T"], substitute: ["7M"], swagger: ["7M"], - thunderwave: ["7M"], + swordsdance: ["7M", "7L37"], + synthesis: ["7T", "7L19"], + tailwind: ["7T"], toxic: ["7M"], + vacuumwave: ["7L1"], + xscissor: ["7M", "7L47", "7S0", "7S1"], }}, - salandit: {learnset: { - attract: ["7M"], - belch: ["7E"], - confide: ["7M"], - doubleslap: ["7L21"], + guzzlord: {learnset: { + belch: ["7L1"], + bite: ["7L1"], + brickbreak: ["7M"], + brutalswing: ["7M", "7L13"], + bulldoze: ["7M"], + crunch: ["7L37"], + darkpulse: ["7M"], doubleteam: ["7M"], + dracometeor: ["7T"], dragonclaw: ["7M"], - dragonpulse: ["7L48"], - dragonrage: ["7L13"], - ember: ["7L5"], + dragonpulse: ["7T"], + dragonrage: ["7L1"], + dragonrush: ["7L73"], + dragontail: ["7M", "7L23"], + drainpunch: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], facade: ["7M"], - fakeout: ["7E"], fireblast: ["7M"], - flameburst: ["7L24"], - flamecharge: ["7M"], - flamethrower: ["7M", "7L40"], + flamethrower: ["7M"], fling: ["7M"], frustration: ["7M"], + gastroacid: ["7T", "7L53", "7S0", "7S1"], + gigaimpact: ["7M"], + gyroball: ["7M"], + hammerarm: ["7L43", "7S1"], + heatwave: ["7T"], + heavyslam: ["7L59", "7S0", "7S1"], hiddenpower: ["7M"], - knockoff: ["7E"], - leechlife: ["7M"], - nastyplot: ["7L32"], - overheat: ["7M"], + hyperbeam: ["7M"], + irondefense: ["7T"], + ironhead: ["7T"], + irontail: ["7T", "7L29"], + knockoff: ["7T"], + lastresort: ["7T"], + magnetrise: ["7T"], + outrage: ["7T"], payback: ["7M"], - poisongas: ["7L1"], poisonjab: ["7M"], protect: ["7M"], rest: ["7M"], return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], - sandattack: ["7E"], - scratch: ["7L1"], shadowclaw: ["7M"], + shockwave: ["7T"], sleeptalk: ["7M"], sludgebomb: ["7M"], sludgewave: ["7M"], - smog: ["7L16"], - snatch: ["7E"], + smackdown: ["7M"], + snarl: ["7M"], + snore: ["7T"], + steamroller: ["7L19"], + stockpile: ["7L1"], + stomp: ["7L7"], + stompingtantrum: ["7T", "7L31"], + stoneedge: ["7M"], substitute: ["7M"], - swagger: ["7M"], - sweetscent: ["7L8"], - taunt: ["7M"], + swallow: ["7L1"], thief: ["7M"], - torment: ["7M"], - toxic: ["7M", "7L29"], - venomdrench: ["7L45"], - venoshock: ["7M", "7L37"], - willowisp: ["7M"], + thrash: ["7L47", "7S0", "7S1"], + toxic: ["7M"], + wideguard: ["7L1"], + wringout: ["7L67", "7S0"], }}, - salazzle: {learnset: { - acrobatics: ["7M"], - attract: ["7M"], - captivate: ["7L1"], + necrozma: {learnset: { + aerialace: ["7M"], + allyswitch: ["7T"], + autotomize: ["7L47"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M", "7L1"], confide: ["7M"], - disable: ["7L1"], - doubleslap: ["7L21"], + confusion: ["7L1"], + darkpulse: ["7M"], doubleteam: ["7M"], - dragonclaw: ["7M"], - dragonpulse: ["7L56"], - dragonrage: ["7L13"], - dragontail: ["7M"], - ember: ["7L5", "7L1"], - encore: ["7L1"], + dragonpulse: ["7T"], + earthpower: ["7T"], + earthquake: ["7M"], + embargo: ["7M"], facade: ["7M"], - fakeout: ["7S0"], - fireblast: ["7M"], - flameburst: ["7L24"], - flamecharge: ["7M"], - flamethrower: ["7M", "7L44", "7S0"], + flashcannon: ["7M"], fling: ["7M"], frustration: ["7M"], + gigaimpact: ["7M"], + gravity: ["7T", "7L31"], + gyroball: ["7M"], + heatwave: ["7T"], hiddenpower: ["7M"], - leechlife: ["7M"], - nastyplot: ["7L32"], - overheat: ["7M"], - payback: ["7M"], - poisongas: ["7L1"], - poisonjab: ["7M"], - pound: ["7L1"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + irondefense: ["7T", "7L59", "7S0", "7S1"], + ironhead: ["7T"], + knockoff: ["7T"], + lightscreen: ["7M"], + magnetrise: ["7T"], + metalclaw: ["7L1"], + mirrorshot: ["7L1"], + moonlight: ["7L1"], + morningsun: ["7L1"], + nightslash: ["7L23", "7S1"], + outrage: ["7T"], + photongeyser: ["7L50", "7S1"], + powergem: ["7L43", "7S1"], + prismaticlaser: ["7L73", "7S0"], protect: ["7M"], + psychic: ["7M"], + psychocut: ["7L37"], + psyshock: ["7M"], + recycle: ["7T"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], + rockblast: ["7L19"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], shadowclaw: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + slash: ["7L7"], sleeptalk: ["7M"], - sludgebomb: ["7M", "7S0"], - sludgewave: ["7M"], - smog: ["7L16"], + smartstrike: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + stealthrock: ["7T", "7L53", "7S0"], + stoneedge: ["7M"], + storedpower: ["7L13"], substitute: ["7M"], - swagger: ["7M", "7L1"], - sweetscent: ["7L8", "7L1"], - taunt: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + telekinesis: ["7T"], thief: ["7M"], - torment: ["7M", "7L1"], - toxic: ["7M", "7L29", "7S0"], - venomdrench: ["7L51"], - venoshock: ["7M", "7L39"], - willowisp: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + wringout: ["7L67", "7S0"], + xscissor: ["7M"], }}, - stufful: {learnset: { + necrozmaduskmane: {learnset: { aerialace: ["7M"], - attract: ["7M"], - babydolleyes: ["7L10"], - bide: ["7L5"], + allyswitch: ["7T"], + autotomize: ["7L47"], brickbreak: ["7M"], - brutalswing: ["7M", "7L14"], - bulkup: ["7M"], + brutalswing: ["7M"], bulldoze: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M", "7L1"], confide: ["7M"], - doubleedge: ["7L46"], + confusion: ["7L1"], + darkpulse: ["7M"], doubleteam: ["7M"], + dragonpulse: ["7T"], + earthpower: ["7T"], earthquake: ["7M"], - endure: ["7E"], + embargo: ["7M"], facade: ["7M"], - flail: ["7L19"], + flashcannon: ["7M"], fling: ["7M"], - focusblast: ["7M"], - forcepalm: ["7E"], frustration: ["7M"], - hammerarm: ["7L32"], + gigaimpact: ["7M"], + gravity: ["7T", "7L31"], + gyroball: ["7M"], + heatwave: ["7T"], hiddenpower: ["7M"], - icepunch: ["7E"], - leer: ["7L1"], - lowsweep: ["7M"], - megakick: ["7E"], - painsplit: ["7L41"], - payback: ["7M", "7L23"], + hyperbeam: ["7M"], + hypervoice: ["7T"], + irondefense: ["7T", "7L59"], + ironhead: ["7T"], + knockoff: ["7T"], + lightscreen: ["7M"], + magnetrise: ["7T"], + metalclaw: ["7L1"], + mirrorshot: ["7L1"], + moonlight: ["7L1"], + morningsun: ["7L1"], + nightslash: ["7L23"], + outrage: ["7T"], + photongeyser: ["7L50"], + powergem: ["7L43"], + prismaticlaser: ["7L73"], protect: ["7M"], + psychic: ["7M"], + psychocut: ["7L37"], + psyshock: ["7M"], + recycle: ["7T"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - roar: ["7M"], + rockblast: ["7L19"], + rockpolish: ["7M"], rockslide: ["7M"], rocktomb: ["7M"], round: ["7M"], + shadowclaw: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + slash: ["7L7"], sleeptalk: ["7M"], - stompingtantrum: ["7E"], + smartstrike: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + stealthrock: ["7T", "7L53"], + stoneedge: ["7M"], + storedpower: ["7L13"], substitute: ["7M"], - superpower: ["7L50"], + sunsteelstrike: ["7S0"], swagger: ["7M"], swordsdance: ["7M"], - tackle: ["7L1"], - takedown: ["7L28"], - taunt: ["7M"], - thrash: ["7L37"], - thunderpunch: ["7E"], + telekinesis: ["7T"], + thief: ["7M"], + thunderwave: ["7M"], toxic: ["7M"], - wideguard: ["7E"], - workup: ["7M"], + trickroom: ["7M"], + wringout: ["7L67"], + xscissor: ["7M"], }}, - bewear: {learnset: { + necrozmadawnwings: {learnset: { aerialace: ["7M"], - attract: ["7M"], - babydolleyes: ["7L10", "7S0"], - bide: ["7L5"], - bind: ["7L1", "7S0"], + allyswitch: ["7T"], + autotomize: ["7L47"], brickbreak: ["7M"], - brutalswing: ["7M", "7L14", "7S0"], - bulkup: ["7M"], + brutalswing: ["7M"], bulldoze: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M", "7L1"], confide: ["7M"], - doubleedge: ["7L56"], + confusion: ["7L1"], + darkpulse: ["7M"], doubleteam: ["7M"], - dragonclaw: ["7M"], + dragonpulse: ["7T"], + earthpower: ["7T"], earthquake: ["7M"], + embargo: ["7M"], facade: ["7M"], - flail: ["7L19"], + flashcannon: ["7M"], fling: ["7M"], - focusblast: ["7M"], frustration: ["7M"], gigaimpact: ["7M"], - hammerarm: ["7L36"], + gravity: ["7T", "7L31"], + gyroball: ["7M"], + heatwave: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], - leer: ["7L1"], - lowsweep: ["7M"], - painsplit: ["7L49"], - payback: ["7M", "7L23"], + hypervoice: ["7T"], + irondefense: ["7T", "7L59"], + ironhead: ["7T"], + knockoff: ["7T"], + lightscreen: ["7M"], + magnetrise: ["7T"], + metalclaw: ["7L1"], + mirrorshot: ["7L1"], + moongeistbeam: ["7S0"], + moonlight: ["7L1"], + morningsun: ["7L1"], + nightslash: ["7L23"], + outrage: ["7T"], + photongeyser: ["7L50"], + powergem: ["7L43"], + prismaticlaser: ["7L73"], protect: ["7M"], + psychic: ["7M"], + psychocut: ["7L37"], + psyshock: ["7M"], + recycle: ["7T"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - roar: ["7M"], + rockblast: ["7L19"], + rockpolish: ["7M"], rockslide: ["7M"], rocktomb: ["7M"], round: ["7M"], shadowclaw: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + slash: ["7L7"], sleeptalk: ["7M"], + smartstrike: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], + stealthrock: ["7T", "7L53"], + stoneedge: ["7M"], + storedpower: ["7L13"], substitute: ["7M"], - superpower: ["7L62", "7S0"], swagger: ["7M"], swordsdance: ["7M"], - tackle: ["7L1"], - takedown: ["7L30"], - taunt: ["7M"], - thrash: ["7L43"], + telekinesis: ["7T"], + thief: ["7M"], + thunderwave: ["7M"], toxic: ["7M"], - workup: ["7M"], + trickroom: ["7M"], + wringout: ["7L67"], + xscissor: ["7M"], }}, - bounsweet: {learnset: { - acupressure: ["7E"], - aromaticmist: ["7L33"], - attract: ["7M"], - charm: ["7E"], + magearna: {learnset: { + afteryou: ["7T"], + aurasphere: ["7L81"], + aurorabeam: ["7L17"], + brickbreak: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], confide: ["7M"], + craftyshield: ["7L1"], dazzlinggleam: ["7M"], + defensecurl: ["7L1"], doubleteam: ["7M"], + echoedvoice: ["7M"], + embargo: ["7M"], energyball: ["7M"], - facade: ["7M"], - feint: ["7E"], - flail: ["7L29"], + explosion: ["7M"], + falseswipe: ["7M"], + flashcannon: ["7M", "7L41", "7S0"], + fleurcannon: ["7L49", "7S0"], + focusblast: ["7M"], frustration: ["7M"], + gearup: ["7L1"], + gigaimpact: ["7M"], grassknot: ["7M"], - grasswhistle: ["7E"], + gyroball: ["7M"], + healbell: ["7T"], + heartswap: ["7L89"], + helpinghand: ["7T", "7L1", "7S0"], hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irondefense: ["7T", "7L57"], + ironhead: ["7T", "7L1"], + lastresort: ["7T"], lightscreen: ["7M"], - magicalleaf: ["7L21"], - naturepower: ["7M"], - playnice: ["7L5"], - playrough: ["7E"], + luckychant: ["7L9", "7S0"], + magnetrise: ["7T"], + mindreader: ["7L33"], + mirrorshot: ["7L25"], + painsplit: ["7T", "7L65"], protect: ["7M"], - rapidspin: ["7L9"], - razorleaf: ["7L13"], + psybeam: ["7L1"], reflect: ["7M"], - rest: ["7M"], return: ["7M"], round: ["7M"], - safeguard: ["7M"], - sleeptalk: ["7M"], + shadowball: ["7M"], + shiftgear: ["7L1"], + shockwave: ["7T"], + signalbeam: ["7T"], + snore: ["7T"], solarbeam: ["7M"], - splash: ["7L1"], + sonicboom: ["7L1"], substitute: ["7M"], - sunnyday: ["7M"], swagger: ["7M"], - sweetscent: ["7L17"], - synthesis: ["7E"], - teeterdance: ["7L25"], - toxic: ["7M"], + synchronoise: ["7L73"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + trickroom: ["7M"], + trumpcard: ["7L97"], + voltswitch: ["7M"], + zenheadbutt: ["7T"], }}, - steenee: {learnset: { - aromatherapy: ["7L41"], - aromaticmist: ["7L33"], - attract: ["7M"], - captivate: ["7L37"], + magearnaoriginal: {learnset: { + afteryou: ["7T"], + aurasphere: ["7L81"], + aurorabeam: ["7L17"], + brickbreak: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], confide: ["7M"], + craftyshield: ["7L1"], dazzlinggleam: ["7M"], - doubleslap: ["7L1", "7S0"], + defensecurl: ["7L1"], doubleteam: ["7M"], + echoedvoice: ["7M"], + embargo: ["7M"], energyball: ["7M"], - facade: ["7M"], - fling: ["7M"], + explosion: ["7M"], + falseswipe: ["7M"], + flashcannon: ["7M", "7L41"], + fleurcannon: ["7L49"], + focusblast: ["7M"], frustration: ["7M"], + gearup: ["7L1"], + gigaimpact: ["7M"], grassknot: ["7M"], + gyroball: ["7M"], + healbell: ["7T"], + heartswap: ["7L89"], + helpinghand: ["7T", "7L1"], hiddenpower: ["7M"], - leafstorm: ["7L45"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irondefense: ["7T", "7L57"], + ironhead: ["7T", "7L1"], + lastresort: ["7T"], lightscreen: ["7M"], - lowsweep: ["7M"], - magicalleaf: ["7L21", "7S0"], - naturepower: ["7M"], - payback: ["7M"], - playnice: ["7L5", "7L1"], + luckychant: ["7L9"], + magnetrise: ["7T"], + mindreader: ["7L33"], + mirrorshot: ["7L25"], + painsplit: ["7T", "7L65"], protect: ["7M"], - rapidspin: ["7L9", "7L1"], - razorleaf: ["7L13", "7L1"], + psybeam: ["7L1"], reflect: ["7M"], - rest: ["7M"], return: ["7M"], round: ["7M"], - safeguard: ["7M"], - sleeptalk: ["7M"], + shadowball: ["7M"], + shiftgear: ["7L1"], + shockwave: ["7T"], + signalbeam: ["7T"], + snore: ["7T"], solarbeam: ["7M"], - splash: ["7L1"], - stomp: ["7L29"], + sonicboom: ["7L1"], substitute: ["7M"], - sunnyday: ["7M"], swagger: ["7M"], - sweetscent: ["7L17", "7S0"], - teeterdance: ["7L25"], - toxic: ["7M"], + synchronoise: ["7L73"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + trickroom: ["7M"], + trumpcard: ["7L97"], + voltswitch: ["7M"], + zenheadbutt: ["7T"], }}, - tsareena: {learnset: { + marshadow: {learnset: { acrobatics: ["7M"], - aromatherapy: ["7L41"], - aromaticmist: ["7L33"], - attract: ["7M"], - captivate: ["7L37"], + assurance: ["7L1"], + bounce: ["7T"], + brickbreak: ["7M"], + bulkup: ["7M"], + calmmind: ["7M"], + closecombat: ["7L50", "7S0"], confide: ["7M"], - dazzlinggleam: ["7M"], - doubleslap: ["7L1"], + copycat: ["7L20"], + counter: ["7L1"], doubleteam: ["7M"], - energyball: ["7M"], + drainpunch: ["7T", "7L1"], + echoedvoice: ["7M"], + endeavor: ["7T", "7L60"], facade: ["7M"], + falseswipe: ["7M"], + feint: ["7L11"], + firepunch: ["7T", "7L1"], fling: ["7M"], + focusblast: ["7M"], + focuspunch: ["7T"], + forcepalm: ["7L5", "7S0"], + foulplay: ["7T"], frustration: ["7M"], gigaimpact: ["7M"], grassknot: ["7M"], hiddenpower: ["7M"], - highjumpkick: ["7L49"], - leafstorm: ["7L45"], - lightscreen: ["7M"], + icepunch: ["7T", "7L1"], + ironhead: ["7T"], + jumpkick: ["7L35"], + knockoff: ["7T"], + laserfocus: ["7T", "7L1"], + lastresort: ["7T"], + lowkick: ["7T"], lowsweep: ["7M"], - magicalleaf: ["7L21"], - naturepower: ["7M"], + outrage: ["7T"], payback: ["7M"], + poisonjab: ["7M"], protect: ["7M"], - rapidspin: ["7L9", "7L1"], - razorleaf: ["7L13", "7L1"], - reflect: ["7M"], + psychup: ["7M", "7L41"], + pursuit: ["7L1"], rest: ["7M"], return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7T", "7L30"], + rollingkick: ["7L15"], round: ["7M"], - safeguard: ["7M"], + shadowball: ["7M", "7S0"], + shadowclaw: ["7M"], + shadowpunch: ["7L26"], + shadowsneak: ["7L1"], sleeptalk: ["7M"], - solarbeam: ["7M"], - splash: ["7L1"], - stomp: ["7L29"], + smackdown: ["7M"], + snatch: ["7T"], + snore: ["7T"], + spectralthief: ["7L45", "7S0"], + stoneedge: ["7M"], substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M", "7L5", "7L1"], - sweetscent: ["7L17"], - teeterdance: ["7L25"], + suckerpunch: ["7L56"], + superpower: ["7T"], + swagger: ["7M"], + thief: ["7M"], + throatchop: ["7T"], + thunderpunch: ["7T", "7L1"], toxic: ["7M"], - tropkick: ["7L1"], - uturn: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + zenheadbutt: ["7T"], }}, - comfey: {learnset: { - acrobatics: ["7M"], - afteryou: ["7E"], - amnesia: ["7E"], - aromatherapy: ["7L43"], - attract: ["7M"], - calmmind: ["7M"], - celebrate: ["7S0"], + poipole: {learnset: { + acid: ["7L1"], + charm: ["7L19", "7S0"], confide: ["7M"], - dazzlinggleam: ["7M"], - doubleteam: ["7M"], - drainingkiss: ["7L7", "7S0"], + covet: ["7T"], + dragonpulse: ["7T", "7L1", "7S1"], echoedvoice: ["7M"], - endure: ["7E"], - energyball: ["7M"], facade: ["7M"], - fling: ["7M"], - floralhealing: ["7L37"], - flowershield: ["7L1"], + fellstinger: ["7L47"], frustration: ["7M"], - grassknot: ["7M", "7L34"], - grassyterrain: ["7L46"], - growth: ["7L13"], - helpinghand: ["7L1"], + furyattack: ["7L7"], + gastroacid: ["7T"], + growl: ["7L1"], + gunkshot: ["7T"], + helpinghand: ["7T", "7L1"], hiddenpower: ["7M"], - hyperbeam: ["7M"], - leechseed: ["7L4", "7S0"], - lightscreen: ["7M"], - luckychant: ["7E"], - magicalleaf: ["7L10", "7S0"], - naturalgift: ["7L22"], - naturepower: ["7M"], - petalblizzard: ["7L25"], - petaldance: ["7L40"], - playrough: ["7L49"], + irontail: ["7T"], + nastyplot: ["7L31", "7S0", "7S1"], + peck: ["7L1"], + poisonjab: ["7M", "7L37", "7S0", "7S1"], protect: ["7M"], - psychup: ["7M"], rest: ["7M"], return: ["7M"], round: ["7M"], - safeguard: ["7M"], + signalbeam: ["7T"], sleeptalk: ["7M"], - solarbeam: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snatch: ["7T"], + snore: ["7T"], substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M"], - sweetkiss: ["7L19"], - sweetscent: ["7L31"], - synthesis: ["7L28"], - taunt: ["7M"], - thief: ["7M"], - toxic: ["7M"], - trickroom: ["7M"], - uturn: ["7M"], - vinewhip: ["7L1"], - wrap: ["7L16"], + toxic: ["7M", "7L41"], + uproar: ["7T"], + venomdrench: ["7L23", "7S0", "7S1"], + venoshock: ["7M", "7L13"], }}, - oranguru: {learnset: { - afteryou: ["7L4"], - brickbreak: ["7M"], - brutalswing: ["7M"], - bulldoze: ["7M"], - calmmind: ["7M", "7L39"], - chargebeam: ["7M"], + naganadel: {learnset: { + acid: ["7L1"], + acrobatics: ["7M"], + aerialace: ["7M"], + aircutter: ["7L1", "7L1"], + airslash: ["7L53"], + allyswitch: ["7T"], + charm: ["7L19"], confide: ["7M"], - confusion: ["7L1"], + darkpulse: ["7M"], doubleteam: ["7M"], - dreameater: ["7M"], - earthquake: ["7M"], - embargo: ["7M"], - energyball: ["7M"], - extrasensory: ["7E"], + dracometeor: ["7T"], + dragonclaw: ["7M"], + dragonpulse: ["7T", "7L61", "7L1"], + dragontail: ["7M"], + echoedvoice: ["7M"], facade: ["7M"], - feintattack: ["7L22"], - fling: ["7M"], - focusblast: ["7M"], - foulplay: ["7L36"], + fellstinger: ["7L47"], + fireblast: ["7M"], + flamethrower: ["7M"], + fly: ["7M"], frustration: ["7M"], - futuresight: ["7L46"], - gigaimpact: ["7M"], + furyattack: ["7L7"], + gastroacid: ["7T"], + growl: ["7L1"], + gunkshot: ["7T"], + heatwave: ["7T"], + helpinghand: ["7T", "7L1"], hiddenpower: ["7M"], - instruct: ["7L32", "7S0"], - lightscreen: ["7M"], - nastyplot: ["7L25"], - naturepower: ["7M"], - payback: ["7M"], + hyperbeam: ["7M"], + irontail: ["7T"], + laserfocus: ["7T"], + leechlife: ["7M"], + nastyplot: ["7L31"], + outrage: ["7T"], + peck: ["7L1"], + poisonjab: ["7M", "7L37"], protect: ["7M"], - psychic: ["7M", "7L43", "7S0"], - psychicterrain: ["7E", "7S0"], - psychup: ["7M", "7L18"], - psyshock: ["7M"], - quash: ["7M", "7L11"], - raindance: ["7M"], - reflect: ["7M"], rest: ["7M"], return: ["7M"], - rockslide: ["7M"], round: ["7M"], - safeguard: ["7M"], - shadowball: ["7M"], + shadowclaw: ["7M"], + shockwave: ["7T"], + signalbeam: ["7T"], + skyattack: ["7T"], + skydrop: ["7M"], sleeptalk: ["7M"], - storedpower: ["7L15"], - substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M"], - taunt: ["7M", "7L8"], - thunder: ["7M"], - thunderbolt: ["7M"], - toxic: ["7M"], - trickroom: ["7M", "7L50"], - wonderroom: ["7E"], - workup: ["7M"], - zenheadbutt: ["7L29"], - }}, - passimian: {learnset: { - acrobatics: ["7M"], - aerialace: ["7M"], - attract: ["7M"], - beatup: ["7L15"], - bestow: ["7L25", "7S0"], - brickbreak: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smartstrike: ["7M"], + snarl: ["7M"], + snatch: ["7T"], + snore: ["7T"], + substitute: ["7M"], + tailwind: ["7T"], + thief: ["7M"], + throatchop: ["7T"], + thunderbolt: ["7M"], + toxic: ["7M", "7L41"], + uproar: ["7T"], + uturn: ["7M"], + venomdrench: ["7L23"], + venoshock: ["7M", "7L13"], + xscissor: ["7M"], + }}, + stakataka: {learnset: { + allyswitch: ["7T"], + autotomize: ["7L31"], + bide: ["7L17"], + bind: ["7T"], + block: ["7T"], brutalswing: ["7M"], - bulkup: ["7M", "7L32"], bulldoze: ["7M"], - closecombat: ["7L43"], - confide: ["7M"], - doubleedge: ["7L36"], - doubleteam: ["7M"], + doubleedge: ["7L61"], earthquake: ["7M"], - energyball: ["7M"], facade: ["7M"], - feint: ["7E", "7S0"], - fling: ["7M", "7L39", "7S0"], - focusblast: ["7M"], - focusenergy: ["7L11"], + flashcannon: ["7M"], frustration: ["7M"], - gigaimpact: ["7M", "7L50"], - grassknot: ["7M"], + gigaimpact: ["7M"], + gravity: ["7T"], gyroball: ["7M"], hiddenpower: ["7M"], - hyperbeam: ["7M"], - ironhead: ["7E"], - leer: ["7L4"], - lowsweep: ["7M"], - payback: ["7M"], - protect: ["7M"], - quickattack: ["7E"], - quickguard: ["7E"], - raindance: ["7M"], + infestation: ["7M"], + irondefense: ["7T", "7L37", "7S0"], + ironhead: ["7T", "7L43", "7S0"], + lightscreen: ["7M"], + magiccoat: ["7T"], + magicroom: ["7T"], + magnetrise: ["7T"], + protect: ["7M", "7L1"], + recycle: ["7T"], + reflect: ["7M"], rest: ["7M"], return: ["7M"], - reversal: ["7L46"], - rockslide: ["7M"], - rocksmash: ["7L8"], + rockblast: ["7L47", "7S0"], + rockpolish: ["7M"], + rockslide: ["7M", "7L5"], + rockthrow: ["7L23"], rocktomb: ["7M"], + roleplay: ["7T"], round: ["7M"], - scaryface: ["7L18"], - seismictoss: ["7E"], - shadowball: ["7M"], + safeguard: ["7M"], + sandstorm: ["7M"], + skillswap: ["7T"], sleeptalk: ["7M"], smackdown: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7L11"], + stompingtantrum: ["7T"], + stoneedge: ["7M"], substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M"], + superpower: ["7T"], tackle: ["7L1"], - takedown: ["7L22"], - taunt: ["7M"], - thief: ["7M"], - thrash: ["7L29"], + takedown: ["7L19"], + telekinesis: ["7T"], toxic: ["7M"], - uturn: ["7M"], - vitalthrow: ["7E"], - workup: ["7M"], + trickroom: ["7M"], + wideguard: ["7L53", "7S0"], + wonderroom: ["7T"], + zenheadbutt: ["7T"], }}, - wimpod: {learnset: { - aquajet: ["7E"], - attract: ["7M"], + blacephalon: {learnset: { + afteryou: ["7T"], + astonish: ["7L1"], + calmmind: ["7M", "7L31"], confide: ["7M"], + darkpulse: ["7M"], doubleteam: ["7M"], + ember: ["7L1"], + explosion: ["7M"], facade: ["7M"], + fireblast: ["7M", "7L37", "7S0"], + flameburst: ["7L17"], + flamecharge: ["7M"], + flamethrower: ["7M"], + fling: ["7M"], + foulplay: ["7T"], frustration: ["7M"], - hail: ["7M"], - harden: ["7E"], + heatwave: ["7T"], hiddenpower: ["7M"], - leechlife: ["7M"], - metalclaw: ["7E"], + hyperbeam: ["7M"], + knockoff: ["7T"], + lastresort: ["7T"], + lightscreen: ["7M", "7L29"], + magiccoat: ["7L7"], + mindblown: ["7L59", "7S0"], + nightshade: ["7L23"], + overheat: ["7M"], + painsplit: ["7T"], + payback: ["7M"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M"], + psyshock: ["7M"], + quash: ["7M"], + recycle: ["7T"], rest: ["7M"], return: ["7M"], round: ["7M"], - sandattack: ["7L1"], - scald: ["7M"], + shadowball: ["7M", "7L41", "7S0"], + shadowclaw: ["7M"], sleeptalk: ["7M"], - spikes: ["7E"], - strugglebug: ["7L1"], + smackdown: ["7M"], + snore: ["7T"], + spite: ["7T"], + storedpower: ["7L13"], substitute: ["7M"], - surf: ["7M"], + sunnyday: ["7M"], swagger: ["7M"], taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], toxic: ["7M"], - waterfall: ["7M"], - wideguard: ["7E"], + trick: ["7T", "7L47", "7S0"], + uproar: ["7T"], + willowisp: ["7M"], }}, - golisopod: {learnset: { + zeraora: {learnset: { + acrobatics: ["7M"], aerialace: ["7M"], - attract: ["7M"], - blizzard: ["7M"], + bounce: ["7T"], brickbreak: ["7M"], - bugbite: ["7L10"], + brutalswing: ["7M"], bulkup: ["7M"], + calmmind: ["7M"], + charge: ["7L26"], + closecombat: ["7L47", "7S0"], confide: ["7M"], - darkpulse: ["7M"], + discharge: ["7L50"], doubleteam: ["7M"], + drainpunch: ["7T"], + dualchop: ["7T"], + echoedvoice: ["7M"], + electroweb: ["7T"], + endeavor: ["7T"], facade: ["7M"], + fakeout: ["7L22"], falseswipe: ["7M"], - firstimpression: ["7L1"], + firepunch: ["7T"], fling: ["7M"], focusblast: ["7M"], - frostbreath: ["7M"], + focuspunch: ["7T"], frustration: ["7M"], - furycutter: ["7L4", "7L1"], + furyswipes: ["7L12"], gigaimpact: ["7M"], - hail: ["7M"], + grassknot: ["7M"], hiddenpower: ["7M"], - icebeam: ["7M"], - irondefense: ["7L36"], - leechlife: ["7M"], - liquidation: ["7L48"], - payback: ["7M"], - pinmissile: ["7L41"], - poisonjab: ["7M"], + honeclaws: ["7L5"], + irontail: ["7T"], + knockoff: ["7T"], + laserfocus: ["7T"], + lowkick: ["7T"], + lowsweep: ["7M"], + outrage: ["7T"], + plasmafists: ["7L43", "7S0"], protect: ["7M"], - psychup: ["7M"], - raindance: ["7M"], - razorshell: ["7L26"], + quickattack: ["7L8"], + quickguard: ["7L40"], rest: ["7M"], return: ["7M"], - rockslide: ["7M"], - rocksmash: ["7L7", "7L1"], - rocktomb: ["7M"], round: ["7M"], - sandattack: ["7L1"], - scald: ["7M"], - shadowclaw: ["7M"], - slash: ["7L21"], + scratch: ["7L1"], + shockwave: ["7T"], + slash: ["7L33"], sleeptalk: ["7M"], - sludgebomb: ["7M"], - sludgewave: ["7M"], - snarl: ["7M"], - spite: ["7L13"], - strugglebug: ["7L1"], + snarl: ["7M", "7L19"], + snatch: ["7T"], + snore: ["7T"], + spark: ["7L1"], substitute: ["7M"], - suckerpunch: ["7L31"], - surf: ["7M"], - swagger: ["7M"], - swordsdance: ["7M", "7L16"], + superpower: ["7T"], taunt: ["7M"], + throatchop: ["7T"], + thunder: ["7M", "7S0"], + thunderbolt: ["7M"], + thunderpunch: ["7T", "7L29", "7S0"], + thunderwave: ["7M"], toxic: ["7M"], - venoshock: ["7M"], - waterfall: ["7M"], - xscissor: ["7M"], + voltswitch: ["7M", "7L15"], + wildcharge: ["7M", "7L36"], + workup: ["7M"], + }}, + meltan: {learnset: { + acidarmor: ["7L36"], + flashcannon: ["7M", "7L45"], + harden: ["7L1"], + headbutt: ["7M", "7L1"], + protect: ["7M"], + rest: ["7M"], + substitute: ["7M"], + tailwhip: ["7L9"], + thunderbolt: ["7M"], + thundershock: ["7L27"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + }}, + melmetal: {learnset: { + acidarmor: ["7L36"], + brickbreak: ["7M"], + doubleironbash: ["7L72"], + earthquake: ["7M"], + facade: ["7M"], + flashcannon: ["7M", "7L45"], + harden: ["7L1"], + headbutt: ["7M", "7L1"], + hyperbeam: ["7M", "7L90"], + icebeam: ["7M"], + icepunch: ["7M"], + megapunch: ["7L54"], + protect: ["7M", "7L63"], + rest: ["7M"], + rockslide: ["7M"], + selfdestruct: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + superpower: ["7M", "7L81"], + tailwhip: ["7L9", "7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L1", "7L0"], + thundershock: ["7L27"], + thunderwave: ["7M", "7L18", "7L1"], + toxic: ["7M"], + }}, + tomohawk: {learnset: { + acrobatics: ["7M", "5M"], + aerialace: ["7M", "7L17", "5M", "5L17"], + airslash: ["7L33", "5L37"], + aquatail: ["7T"], + attract: ["7M", "5M"], + aurasphere: ["7L1", "5L1"], + batonpass: ["7E", "5E"], + brickbreak: ["7E", "5M"], + bulkup: ["7M", "5M"], + bulldoze: ["7M", "5M"], + confide: ["7M"], + confuseray: ["7M", "5E"], + doubleteam: ["7M", "5M"], + earthpower: ["5L33"], + earthquake: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + facade: ["7M", "5M"], + falseswipe: ["7M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + fly: ["7M", "5M"], + focusblast: ["7M", "5M"], + focusenergy: ["7E", "5E"], + frustration: ["7E", "5M"], + furyswipes: ["7L1", "5L1"], + gigaimpact: ["7M", "5M"], + grassknot: ["7M", "5M"], + harden: ["7L1", "5L1"], + haze: ["7E", "5E"], + healingwish: ["7L60", "5L60"], + heatwave: ["7L42", "5L45"], + helpinghand: ["7T"], + hiddenpower: ["7M", "5M"], + hurricane: ["7L51", "5L55"], + hyperbeam: ["7M", "5M"], + hypervoice: ["7L45", "5L49"], + incinerate: ["6M", "5M"], + irontail: ["7T"], + memento: ["7E", "5E"], + morningsun: ["7L20", "5L20"], + naturepower: ["7E", "5E"], + poweruppunch: ["6L99"], + protect: ["7M", "5M"], + quash: ["7M", "5M"], + raindance: ["7M", "7L29", "5M", "5L29"], + rapidspin: ["7E", "5E"], + reflect: ["5M"], + rest: ["7M", "7L53", "5M", "5L53"], + retaliate: ["6M", "5M"], + return: ["7M", "5M"], + roar: ["7M", "5M"], + rockslide: ["7M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "5M"], + roost: ["7M", "7E", "5E"], + round: ["7M", "5M"], + safeguard: ["7M", "5M"], + scratch: ["7L4"], + secretpower: ["7M"], + skyattack: ["7L55"], + skydrop: ["7M", "7L49", "5M", "5L50"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + stealthrock: ["7E", "5E"], + steelwing: ["7M"], + strength: ["6M", "5M"], + submission: ["7L37", "5L42"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "7L1", "5M", "5L1"], + superpower: ["7L50", "5L51"], + swagger: ["7M", "5M"], + taunt: ["7M", "5M"], + thief: ["7M", "5M"], + toxic: ["7M", "5M"], + whirlwind: ["7L23", "5L23"], + workup: ["7M", "5M"], + yawn: ["7E", "5E"], + }}, + necturna: {learnset: { + attract: ["7M", "5M"], + calmmind: ["7M", "5M"], + confide: ["7M"], + curse: ["7E", "5E"], + cut: ["7M", "5M"], + darkpulse: ["7M"], + doubleteam: ["7M", "5M"], + dreameater: ["7M", "5M"], + energyball: ["7M", "5M"], + facade: ["7M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "5M"], + futuresight: ["7E", "5E"], + gigadrain: ["7E", "6T", "5E"], + gigaimpact: ["7M", "5M"], + grassknot: ["7M", "5M"], + grassyterrain: ["7L34"], + gravity: ["7E", "6T", "5E"], + hex: ["7L28", "5L25"], + hiddenpower: ["7M", "5M"], + hornleech: ["7L1", "5L31"], + hyperbeam: ["7M", "5M"], + ingrain: ["7E", "5E"], + leafblade: ["7E", "5E"], + leafstorm: ["7E", "5E"], + leechlife: ["7M"], + leechseed: ["7L12"], + leer: ["7L1", "5L1"], + magicalleaf: ["7L17"], + naturalgift: ["7E", "5E"], + naturepower: ["7M"], + nightmare: ["7E", "5E"], + nightshade: ["7L39"], + ominouswind: ["7E", "5L7"], + painsplit: ["7L45", "6T", "5L40"], + payback: ["7M", "5M"], + phantomforce: ["7L61"], + poisonfang: ["7L1", "5L1"], + powerwhip: ["7L56", "5L60"], + protect: ["7M", "5M"], + psychic: ["7M", "5M"], + psychup: ["7M", "5M"], + rest: ["7M", "5M"], + return: ["7M", "5M"], + round: ["7M", "5M"], + secretpower: ["7M"], + seedbomb: ["7T"], + shadowball: ["7M", "7L50", "5M", "5L50"], + shadowclaw: ["7M", "5M"], + shadowsneak: ["7L6", "5L13"], + sketch: ["7E", "5E"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spite: ["7T"], + stoneedge: ["7M", "5M"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "5M"], + superfang: ["7L1", "6T", "5L1"], + swagger: ["7M", "5M"], + telekinesis: ["6M", "5M"], + thief: ["7M", "5M"], + thunderfang: ["7L1", "5L1"], + torment: ["7M", "5M"], + toxic: ["7M", "5M"], + toxicspikes: ["7L23", "5L19"], + vinewhip: ["7L1", "5L1"], + willowisp: ["7M", "7L23", "5M", "5L19"], + worryseed: ["7T"], + }}, + mollux: {learnset: { + acid: ["7L4", "5L4"], + acidarmor: ["7L33", "5L28"], + acidspray: ["7L12", "5L12"], + aquaring: ["7E", "5E"], + attract: ["7M", "5M"], + bide: ["7L1", "5L1"], + bind: ["7T"], + calmmind: ["7M", "5M"], + charm: ["7E", "5E"], + clearsmog: ["7L25", "5L20"], + confide: ["7M"], + confuseray: ["7L17", "5L17"], + doubleteam: ["7M", "5M"], + drainingkiss: ["7L20", "7E"], + ember: ["7L1", "5L1"], + eruption: ["7L57", "5L52"], + explosion: ["7M", "5M"], + facade: ["7M", "5M"], + finalgambit: ["7L60", "5L57"], + fireblast: ["7M", "5M"], + firespin: ["7E", "5E"], + flamecharge: ["7M", "5M"], + flamethrower: ["7M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "5M"], + gastroacid: ["7M", "6T", "5E"], + gigaimpact: ["7M", "5M"], + gunkshot: ["7L52", "6T", "5L49"], + healbell: ["7E", "6T", "5E"], + healpulse: ["7E", "5E"], + heatwave: ["7L36", "6T", "5L33"], + helpinghand: ["7E", "6T", "5E"], + hiddenpower: ["7M", "5M"], + hyperbeam: ["7M", "5M"], + inferno: ["7L49", "5L44"], + lavaplume: ["7L28", "5L25"], + leechlife: ["7M"], + lightscreen: ["7M", "5M"], + moonlight: ["7L33", "5L28"], + overheat: ["7M", "5M"], + protect: ["7M", "5M"], + raindance: ["7M", "5M"], + rapidspin: ["7E", "5E"], + recover: ["7L41", "5L36"], + rest: ["7M", "5M"], + return: ["7M", "5M"], + round: ["7M", "5M"], + secretpower: ["7M"], + shockwave: ["7T"], + sleeptalk: ["7M", "7E", "5E"], + sludgebomb: ["7M", "5M"], + sludgewave: ["7M", "5M"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spotlight: ["7L65"], + stealthrock: ["7E", "6T", "5E"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "5M"], + swagger: ["7M", "5M"], + thief: ["7M", "5M"], + thunder: ["7M", "5M"], + thunderbolt: ["7M", "5M"], + thunderwave: ["7M", "5M"], + toxic: ["7M", "5M"], + toxicspikes: ["7L44", "5L41"], + trick: ["7E", "6T", "5E"], + venomdrench: ["7E"], + venoshock: ["7M", "5M"], + willowisp: ["7M", "5M"], + withdraw: ["7L9", "5L9"], + }}, + aurumoth: {learnset: { + allyswitch: ["5M"], + ancientpower: ["7L47", "5L47"], + attract: ["7M", "5M"], + blizzard: ["7M", "5M"], + bugbite: ["7T", "5T"], + bugbuzz: ["7E", "5E"], + closecombat: ["7E", "5E"], + confide: ["7M"], + counter: ["7E", "5E"], + cut: ["6M", "5M"], + disable: ["7E", "5E"], + doubleteam: ["7M", "5M"], + dragondance: ["7L1", "5L1"], + dreameater: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + electroweb: ["7T", "5T"], + facade: ["7M", "5M"], + feint: ["7E", "5E"], + finalgambit: ["5L41", "5L41"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + focusblast: ["7M", "5M"], + frustration: ["7M", "5M"], + gigaimpact: ["7M", "5M"], + hail: ["7M", "5M"], + healingwish: ["7L61", "5L61"], + healpulse: ["7L21", "5L21"], + helpinghand: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + hydropump: ["7E", "5E"], + hyperbeam: ["7M", "5M"], + icebeam: ["7M", "5M"], + icywind: ["7T", "5T"], + infestation: ["7M"], + lightscreen: ["7M", "5M"], + magiccoat: ["7T", "5T"], + magicroom: ["7T", "5T"], + megahorn: ["7E", "5E"], + ominouswind: ["7L27", "5L27"], + overheat: ["7M", "5M"], + protect: ["7M", "5M"], + psychic: ["7M", "5M"], + psychicterrain: ["7L1"], + psychup: ["7M", "5M"], + psyshock: ["7M", "5M"], + quiverdance: ["7L1", "5L1"], + raindance: ["7M", "5M"], + recycle: ["7T", "5T"], + reflect: ["7M", "5M"], + rest: ["7M", "5M"], + retaliate: ["5M"], + return: ["7M", "5M"], + roleplay: ["7T", "5T"], + round: ["7M", "5M"], + safeguard: ["7M", "7E", "5M", "5E"], + secretpower: ["7M"], + shadowball: ["7M", "5M"], + shockwave: ["7M"], + signalbeam: ["7T"], + silverwind: ["7L1", "5L1"], + skillswap: ["7T", "5T"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spotlight: ["7L1"], + steelwing: ["7M"], + stringshot: ["7L1", "5L1"], + strugglebug: ["5M"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "7L1", "5M", "5L1"], + surf: ["7M", "5M"], + swagger: ["7M", "5M"], + tackle: ["7L1", "5L1"], + tailglow: ["7L67", "5L67"], + telekinesis: ["5M"], + thunder: ["7M", "5M"], + thunderbolt: ["7M", "5M"], + toxic: ["7M", "5M"], + trick: ["7T", "5T"], + waterpulse: ["7T"], + willowisp: ["7M", "7L34", "5M", "5L34"], + wingattack: ["7E", "5E"], + wish: ["7L54", "5L54"], + wonderroom: ["7T", "5T"], + xscissor: ["7M", "5M"], + zenheadbutt: ["7T", "5T"], + }}, + malaconda: {learnset: { + aromatherapy: ["7E", "5E"], + attract: ["7M", "5M"], + beatup: ["7E", "5E"], + bind: ["7T", "5T"], + brutalswing: ["7M"], + confide: ["7M"], + crunch: ["7L43", "5L42"], + cut: ["6M", "5M"], + darkpulse: ["7M", "5T"], + doubleteam: ["7M", "5M"], + dragontail: ["7M", "5M"], + energyball: ["7M", "5M"], + facade: ["7M", "5M"], + feint: ["7E"], + followme: ["7L1"], + foulplay: ["7T", "5T"], + frustration: ["7M", "5M"], + gigadrain: ["7T", "5T"], + gigaimpact: ["7M", "5M"], + glare: ["7L38", "7E", "5E"], + grassknot: ["7M", "7L20", "5M", "5L18"], + haze: ["7E", "5E"], + healbell: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + hyperbeam: ["7M", "5M"], + icefang: ["7E"], + irontail: ["7T", "5T"], + knockoff: ["7T", "5T"], + leafblade: ["7L34", "5L36"], + leer: ["7L1"], + naturepower: ["7M"], + nightslash: ["7E", "5E"], + payback: ["7M", "5M"], + poisonpowder: ["7E", "5E"], + powerwhip: ["7L48", "5L57"], + protect: ["7M", "5M"], + punishment: ["7L62", "5L66"], + pursuit: ["7L10", "5L1"], + rapidspin: ["7L1", "5L1"], + recycle: ["7T"], + rest: ["7M", "5M"], + retaliate: ["7M", "5M"], + return: ["7M", "5M"], + roar: ["7M", "5M"], + round: ["7M", "5M"], + scaryface: ["7L15", "7E", "5E"], + screech: ["7E", "5E"], + secretpower: ["7M"], + seedbomb: ["7T", "5T"], + slam: ["7L29", "5L30"], + sleeptalk: ["7M", "5T"], + snarl: ["7M", "5M"], + snore: ["7T", "5T"], + solarbeam: ["7M", "5M"], + solarblade: ["7L66"], + spikyshield: ["7L52"], + spite: ["7T", "5T"], + strength: ["6M", "5M"], + stunspore: ["7E", "5E"], + substitute: ["7M", "5M"], + suckerpunch: ["7L24", "5L25"], + sunnyday: ["7M", "5M"], + swagger: ["7M", "5M"], + sweetscent: ["7E", "5E"], + synthesis: ["7T", "5T"], + taunt: ["7M", "5M"], + thief: ["7M", "5M"], + thunderfang: ["7E"], + toxic: ["7M", "5M"], + uturn: ["7M", "5M"], + vinewhip: ["7L6", "5L1"], + wildcharge: ["7M", "5M"], + worryseed: ["7T", "5T"], + wrap: ["7L1", "5L1"], + wringout: ["7L57", "5L48"], }}, - sandygast: {learnset: { - absorb: ["7L1"], - amnesia: ["7E"], - ancientpower: ["7E"], - astonish: ["7L5"], - attract: ["7M"], - bulldoze: ["7M", "7L23"], + cawmodore: {learnset: { + acrobatics: ["7M", "5M"], + aerialace: ["7M", "5M"], + airslash: ["7E", "5E"], + attract: ["7M", "5M"], + belch: ["7L52"], + bellydrum: ["7L1", "7E", "5L35"], + block: ["7T", "5T"], + brickbreak: ["7M", "5M"], + brine: ["7L44", "5L44"], + bulletpunch: ["7L39", "5L39"], confide: ["7M"], - destinybond: ["7E"], - doubleteam: ["7M"], - earthpower: ["7L45"], - earthquake: ["7M"], - energyball: ["7M"], - facade: ["7M"], - frustration: ["7M"], - gigadrain: ["7L36"], - harden: ["7L1"], - hiddenpower: ["7M"], - hypnosis: ["7L27"], - infestation: ["7M"], - irondefense: ["7L32"], - megadrain: ["7L18"], - protect: ["7M"], - psychic: ["7M"], - rest: ["7M"], - return: ["7M"], - rockpolish: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - round: ["7M"], - sandattack: ["7L9"], - sandstorm: ["7M", "7L54"], - sandtomb: ["7L14"], - shadowball: ["7M", "7L41"], - shoreup: ["7L50"], - sleeptalk: ["7M"], - spitup: ["7E"], - stockpile: ["7E"], - stoneedge: ["7M"], - substitute: ["7M"], - swagger: ["7M"], - swallow: ["7E"], - toxic: ["7M"], + detect: ["7L26", "5L26"], + doubleteam: ["7M", "5M"], + drainpunch: ["7T", "5T"], + drillpeck: ["7E", "5E"], + endeavor: ["7T", "5T"], + facade: ["7M", "5M"], + flashcannon: ["7M", "7L58", "5M", "5L52"], + fly: ["7M", "5M"], + frustration: ["7M", "5M"], + gigaimpact: ["7M", "5M"], + growl: ["7L5", "5L5"], + hiddenpower: ["7M", "5M"], + hurricane: ["7L64", "5L58"], + hyperbeam: ["7M", "5M"], + ironhead: ["7T", "5T"], + knockoff: ["7T", "5T"], + leer: ["7L1", "5L0"], + metalclaw: ["7L13", "5L13"], + metalsound: ["7E", "5E"], + mirrormove: ["7E", "5E"], + peck: ["7L1", "5L0"], + pluck: ["7M", "5M"], + protect: ["7M", "5M"], + psychup: ["7M", "5M"], + pursuit: ["7E", "5E"], + quickattack: ["7E", "5E"], + quickguard: ["7E", "5E"], + raindance: ["7M", "5M"], + razorwind: ["7E", "5E"], + rest: ["7M", "5M"], + retaliate: ["7M", "5M"], + return: ["7M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "5M"], + screech: ["7L18", "5L18"], + secretpower: ["7M"], + shockwave: ["7T"], + skyattack: ["7T", "5T"], + skydrop: ["7M", "5M"], + sleeptalk: ["7M", "5T"], + smackdown: ["7M", "5M"], + snatch: ["7T", "5T"], + snore: ["7T", "5T"], + steelwing: ["7M", "7L31", "5L31"], + strength: ["6M", "5M"], + substitute: ["7M", "5M"], + surf: ["7M", "5M"], + swagger: ["7M", "5M"], + swift: ["7L9", "5L9"], + tailwind: ["5T", "5L48", "5L48"], + toxic: ["7M", "5M"], + waterpulse: ["7T"], + watersport: ["7E", "5E"], + wingattack: ["7L22", "5L22"], }}, - palossand: {learnset: { + volkraken: {learnset: { absorb: ["7L1"], - astonish: ["7L5", "7L1"], - attract: ["7M"], - bulldoze: ["7M", "7L23"], - confide: ["7M"], - doubleteam: ["7M"], - earthpower: ["7L47"], - earthquake: ["7M"], - embargo: ["7M"], - energyball: ["7M"], - facade: ["7M"], - fling: ["7M"], - frustration: ["7M"], - gigadrain: ["7L36"], - gigaimpact: ["7M"], - harden: ["7L1"], - hiddenpower: ["7M"], - hypnosis: ["7L27"], + aquajet: ["7E"], + aquaring: ["7L46", "6L46"], + assurance: ["7E", "6E"], + attract: ["7M", "6M"], + bind: ["7T"], + bite: ["7L1", "6L1"], + bounce: ["7T"], + captivate: ["7E", "6E"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1"], + covet: ["7T"], + destinybond: ["7L32", "6L32"], + dive: ["6L39", "6L37"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + fireblast: ["7M", "6M"], + firelash: ["7L35"], + firespin: ["7L18", "6L18"], + flameburst: ["7L23", "6L23"], + flamethrower: ["7M", "6M"], + flash: ["7L1", "6M", "6L1"], + flashcannon: ["7M", "6M"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + heatwave: ["7L51", "6T", "6L51"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L56", "6L56"], + hyperbeam: ["7M", "6M"], + incinerate: ["7M"], infestation: ["7M"], - irondefense: ["7L32"], - megadrain: ["7L18"], - protect: ["7M"], - psychic: ["7M"], - quash: ["7M"], - rest: ["7M"], - return: ["7M"], - rockpolish: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - round: ["7M"], - sandattack: ["7L9", "7L1"], - sandstorm: ["7M", "7L60"], - sandtomb: ["7L14"], - shadowball: ["7M", "7L41"], - shoreup: ["7L54"], - sleeptalk: ["7M"], - sludgebomb: ["7M"], - stoneedge: ["7M"], - substitute: ["7M"], - swagger: ["7M"], - toxic: ["7M"], + leechlife: ["7M", "6L1"], + memento: ["7L66", "6L66"], + overheat: ["7M", "6M"], + payback: ["7M", "6M"], + powergem: ["7L42", "6L42"], + protect: ["7M", "6M"], + quash: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L1", "6M", "6L1"], + reflecttype: ["7E"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "7L28", "6M", "6L28"], + scaryface: ["7E", "6E"], + secretpower: ["7M"], + sleeptalk: ["7M", "6M"], + snore: ["7T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + thief: ["7M", "6M"], + tickle: ["7E", "6E"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7E", "6T", "6E"], + whirlpool: ["7L14", "6L14"], + willowisp: ["7M", "6M"], + wringout: ["7L60"], }}, - pyukumuku: {learnset: { - attract: ["7M"], - batonpass: ["7L1"], - bestow: ["7E"], - bide: ["7L1"], - confide: ["7M"], - counter: ["7L17"], - curse: ["7L25"], - doubleteam: ["7M"], - endure: ["7E"], - gastroacid: ["7L29"], - hail: ["7M"], - harden: ["7L1"], - helpinghand: ["7L5"], - lightscreen: ["7M"], - memento: ["7L49"], - mudsport: ["7L1"], - painsplit: ["7L33"], - protect: ["7M"], - psychup: ["7M"], - purify: ["7L21"], - quash: ["7M"], - raindance: ["7M"], - recover: ["7L37"], - reflect: ["7M"], - rest: ["7M"], - safeguard: ["7M", "7L13"], - sleeptalk: ["7M"], - soak: ["7L41"], - substitute: ["7M"], - swagger: ["7M"], - taunt: ["7M", "7L9"], - tickle: ["7E"], - toxic: ["7M", "7L45"], + plasmanta: {learnset: { + acid: ["7L12", "6L12"], + aquatail: ["7L33", "6T", "6L33"], + attract: ["7M", "6M"], + aurasphere: ["7E"], + block: ["7T"], + clearsmog: ["7L22", "6L22"], + confide: ["7M", "6M"], + crosspoison: ["7L51", "6L51"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + discharge: ["7L47", "6L47"], + doubleteam: ["7M", "6M"], + eerieimpulse: ["7L65", "6L65"], + electricterrain: ["7L1"], + electroweb: ["7T"], + encore: ["7L16", "6L16"], + facade: ["7M", "6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + haze: ["7E", "6E"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + iondeluge: ["7L26", "6L26"], + irontail: ["7T"], + magnetrise: ["7T"], + paraboliccharge: ["7L38", "6L38"], + poisonjab: ["7M"], + poisonsting: ["7L1", "6L1"], + poisontail: ["7L29", "6L29"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psyshock: ["7M", "6M"], + psywave: ["7L42", "6L42"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + shockwave: ["7E", "6T", "6E"], + signalbeam: ["7E", "6T", "6E"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["7T"], + splash: ["7E", "6E"], + substitute: ["7M", "6M"], + supersonic: ["7L1", "6L1"], + swagger: ["7M", "7L56", "6M", "6L56"], + taunt: ["7M", "6M"], + thunder: ["7M", "7L60", "6M", "6L60"], + thunderbolt: ["7M", "6M"], + thundershock: ["7L1", "6L1"], + thunderwave: ["7M", "7L19", "6M", "6L19"], + toxic: ["7M", "6M"], venomdrench: ["7E"], - watersport: ["7L1"], + venoshock: ["7M", "6M"], + waterpulse: ["7E", "6T", "6E"], + wideguard: ["7E", "6E"], + wildcharge: ["7M", "6M"], + zenheadbutt: ["7T"], }}, - typenull: {learnset: { - aerialace: ["7M", "7L20"], - airslash: ["7L60"], - confide: ["7M"], - crushclaw: ["7L25", "7S0"], - doubleedge: ["7L80"], - doublehit: ["7L55"], - doubleteam: ["7M"], - dragonclaw: ["7M"], - facade: ["7M"], - flamecharge: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - hail: ["7M"], - healblock: ["7L85"], - hiddenpower: ["7M"], - imprison: ["7L15"], - ironhead: ["7L50"], - metalsound: ["7L45"], - payback: ["7M"], - protect: ["7M"], - punishment: ["7L65"], - pursuit: ["7L10"], - rage: ["7L5"], - raindance: ["7M"], - razorwind: ["7L70"], - rest: ["7M"], - return: ["7M"], - roar: ["7M"], - rockslide: ["7M"], - round: ["7M"], - sandstorm: ["7M"], - scaryface: ["7L30", "7S0"], - shadowclaw: ["7M"], - sleeptalk: ["7M"], - substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - tackle: ["7L1"], - takedown: ["7L40", "7S0"], - thunderwave: ["7M"], - toxic: ["7M"], - triattack: ["7L75"], - uturn: ["7M"], + naviathan: {learnset: { + attract: ["7M", "6M"], + bite: ["7E", "6E"], + blizzard: ["7M", "6M"], + brine: ["7L45", "6L45"], + brutalswing: ["7M"], + bubblebeam: ["7L25", "6L25"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + dive: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dragonbreath: ["7L1", "6L1"], + dragonclaw: ["7M", "6M"], + dragondance: ["7E", "6E"], + dragonpulse: ["6T"], + drillpeck: ["7L31", "6L31"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + featherdance: ["7E", "6E"], + feint: ["7E", "6E"], + flashcannon: ["7M", "7L35", "6M", "6L35"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gust: ["7L1", "6L1"], + hail: ["7M", "6M"], + haze: ["7E", "6E"], + heavyslam: ["7L68", "7L1"], + hiddenpower: ["7M", "6M"], + hurricane: ["7L64", "6L64"], + hydropump: ["7L60", "6L60"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + icefang: ["7E", "6E"], + icepunch: ["6T"], + iciclecrash: ["7L51", "6L51"], + iciclespear: ["7E", "6E"], + icywind: ["6T"], + irondefense: ["6T"], + ironhead: ["7L65", "6T", "6L65"], + irontail: ["7E", "6T", "6E"], + metalclaw: ["7L11", "6L11"], + metalsound: ["7L21", "6L21"], + metronome: ["7E", "6E"], + peck: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychicfangs: ["7E"], + raindance: ["7M", "6M"], + refresh: ["7E", "6E"], + rest: ["7M", "6M"], + retaliate: ["7M", "6M"], + return: ["7M", "6M"], + rocksmash: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + scaryface: ["7L1", "6L1"], + secretpower: ["7M"], + selfdestruct: ["7L74", "6L74"], + slackoff: ["7L39", "6L39"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + splash: ["7L1", "6L1"], + strength: ["6M"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thunderfang: ["7E", "6E"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L7", "6L7"], + waterpulse: ["7E", "6T", "6E"], + whirlpool: ["7E", "6E"], + wideguard: ["7L54", "7E", "6L54", "6E"], + wildcharge: ["7M", "6M"], + }}, + crucibelle: {learnset: { + acidarmor: ["7L32", "6L32"], + astonish: ["7L1", "6L1"], + attract: ["7M", "6M"], + block: ["6T"], + coil: ["7E", "6E"], + confuseray: ["7L16", "6L16"], + confusion: ["7L14", "6L14"], + defensecurl: ["7E", "6E"], + doubleteam: ["7M", "6M"], + embargo: ["7M", "6M"], + endure: ["7L1", "6L1"], + explosion: ["7M", "7L60", "6M", "6L60"], + facade: ["7M", "6M"], + faketears: ["7L10", "6L10"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gravity: ["6T"], + gunkshot: ["7L56", "6T", "6L56"], + headsmash: ["6L1"], + helpinghand: ["6T"], + hex: ["7L44", "6L44"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + infestation: ["7M", "6M"], + ironhead: ["6T"], + lowkick: ["6T"], + magicroom: ["6T"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + protect: ["7M", "7L1", "6M", "6L1"], + psybeam: ["7L40", "6L40"], + psychic: ["7M", "6M"], + reflect: ["7M", "7L25", "6M", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockblast: ["7L52", "6L52"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "7L36", "6M", "6L36"], + rocksmash: ["7M", "6M"], + rockthrow: ["7L5", "6L5"], + rocktomb: ["7M", "6M"], + rollout: ["7E", "6E"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["7M"], + shadowball: ["7M", "6M"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + sludge: ["7L28", "6L28"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "7L23", "6M", "6L23"], + snatch: ["6T"], + snore: ["6T"], + stealthrock: ["6T"], + stoneedge: ["7M", "6M"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + torment: ["7M", "7L48", "6M", "6L48"], + toxic: ["7M", "7L7", "6M", "6L7"], + toxicspikes: ["7L19", "6L19"], + trick: ["6T"], + uturn: ["7M", "6M"], + venoshock: ["7M", "6M"], + withdraw: ["7L1", "6L1"], + wonderroom: ["6T"], + woodhammer: ["7E", "6E"], + zenheadbutt: ["6T"], + }}, + kerfluffle: {learnset: { + attract: ["7M", "6M"], + aurasphere: ["7L45", "6L45"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + celebrate: ["6S0"], + charm: ["7E", "6E"], + closecombat: ["7L53", "6L53"], + confide: ["7L25", "6L25"], + crushclaw: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L17", "6L17"], + drainpunch: ["6T"], + dreameater: ["7M", "7L57", "6M", "6L57"], + encore: ["7E", "6E"], + endure: ["7L21", "6L21"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L5", "7L1", "6L5", "6L1"], + featherdance: ["7L1", "6L1"], + flashcannon: ["7M", "6M"], + fly: ["6S0"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + holdhands: ["6S0"], + hyperbeam: ["7M", "6M"], + lowkick: ["6T"], + metronome: ["6S0"], + moonblast: ["7L49", "6L49"], + nightmare: ["7L57", "6L57"], + partingshot: ["7L33", "6L33"], + playrough: ["7L37", "6L37"], + poweruppunch: ["7M", "6M"], + protect: ["7M", "6M"], + psychup: ["7M", "6M"], + quickguard: ["7E", "6E"], + rest: ["7M", "7L41", "6M", "6L41"], + retaliate: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + scaryface: ["7L29", "6L29"], + scratch: ["7L1", "6L1"], + secretpower: ["7M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snarl: ["7M", "6M"], + snore: ["6T"], + strength: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + wakeupslap: ["7L13", "6L13"], + wideguard: ["7E", "6E"], + wish: ["7E", "6E"], workup: ["7M"], - xscissor: ["7M", "7L35", "7S0"], + yawn: ["7L9", "6L9"], }}, - silvally: {learnset: { - aerialace: ["7M", "7L20"], - airslash: ["7L60"], - bite: ["7L15"], + pajantom: {learnset: { + aerialace: ["7M"], + astonish: ["7L1"], + attract: ["7M"], + bind: ["7T"], + block: ["7T"], + bravebird: ["7L1"], + brutalswing: ["7M"], + bulldoze: ["7M"], confide: ["7M"], - crunch: ["7L50"], - crushclaw: ["7L25"], - doubleedge: ["7L80"], - doublehit: ["7L55"], doubleteam: ["7M"], dracometeor: ["7T"], - dragonclaw: ["7M"], - explosion: ["7M"], + dragonbreath: ["7L19"], + dragonclaw: ["7M", "7L23"], + dragonpulse: ["7T"], + dragonrage: ["7L12"], + dragonrush: ["7L34"], + dreameater: ["7M"], + drillrun: ["7T"], + dualchop: ["7T"], + earthquake: ["7M"], facade: ["7M"], - firefang: ["7L1"], - flamecharge: ["7M"], - flamethrower: ["7M"], - flashcannon: ["7M"], + fairylock: ["7L1"], + fly: ["7M"], frustration: ["7M"], + gastroacid: ["7T"], gigaimpact: ["7M"], - hail: ["7M"], - healblock: ["7L1"], + gravity: ["7T"], + growl: ["7L1"], + haze: ["7L37"], + helpinghand: ["7T"], + healblock: ["7L30"], hiddenpower: ["7M"], hyperbeam: ["7M"], - icebeam: ["7M"], - icefang: ["7L1"], - imprison: ["7L1"], - ironhead: ["7L1"], - metalsound: ["7L45"], - multiattack: ["7L1"], - partingshot: ["7L85"], - payback: ["7M"], - poisonfang: ["7L1"], + icefang: ["7E"], + icepunch: ["7T"], + infestation: ["7M"], + irontail: ["7T", "7E"], + laserfocus: ["7T", "7L10"], + leechlife: ["7M"], + outrage: ["7T", "7L53"], + phantomforce: ["7L45"], + poisonfang: ["7E"], + poisongas: ["7L17"], protect: ["7M"], - punishment: ["7L65"], - pursuit: ["7L10"], - rage: ["7L5"], + psychup: ["7M"], + psychic: ["7M"], + psychicfangs: ["7L32"], raindance: ["7M"], - razorwind: ["7L70"], rest: ["7M"], return: ["7M"], - roar: ["7M"], rockslide: ["7M"], + rocktomb: ["7M"], round: ["7M"], - sandstorm: ["7M"], - scaryface: ["7L30"], + sandtomb: ["7E"], shadowball: ["7M"], shadowclaw: ["7M"], sleeptalk: ["7M"], - snarl: ["7M"], - steelwing: ["7M"], + smartstrike: ["7M"], + snore: ["7T", "7L6", "7L1"], + spiritshackle: ["7L39", "7L1"], + spite: ["7T", "7E"], + stoneedge: ["7M"], substitute: ["7M"], - sunnyday: ["7M"], surf: ["7M"], swagger: ["7M"], - swordsdance: ["7M"], - tackle: ["7L1"], - takedown: ["7L40"], - thunderbolt: ["7M"], - thunderfang: ["7L1"], - thunderwave: ["7M"], + telekinesis: ["7T"], + throatchop: ["7T"], toxic: ["7M"], - triattack: ["7L75"], - uturn: ["7M"], - workup: ["7M"], - xscissor: ["7M", "7L35"], + toxicspikes: ["7L28"], + trickroom: ["7M"], + venoshock: ["7M"], + whirlpool: ["7E"], + wrap: ["7L8", "7L1"], + zenheadbutt: ["7T"], }}, - minior: {learnset: { - acrobatics: ["7M"], - ancientpower: ["7L17"], + jumbao: {learnset: { attract: ["7M"], - autotomize: ["7L31"], + block: ["7T"], + bodyslam: ["7L28"], + brickbreak: ["7M"], + bulkup: ["7M"], bulldoze: ["7M"], - calmmind: ["7M"], - chargebeam: ["7M"], + bulletseed: ["7L38"], confide: ["7M"], - confuseray: ["7L10"], - cosmicpower: ["7L36"], dazzlinggleam: ["7M"], - defensecurl: ["7L3"], - doubleedge: ["7L43"], + detect: ["7L1"], doubleteam: ["7M"], - earthquake: ["7M"], - explosion: ["7M", "7L50"], + energyball: ["7M", "7L45"], + explosion: ["7M"], facade: ["7M"], + fakeout: ["7L1"], + flameburst: ["7L35"], + flowershield: ["7L1"], + focusblast: ["7M"], frustration: ["7M"], + gigadrain: ["7T"], gigaimpact: ["7M"], + grassknot: ["7M"], + grassyterrain: ["7E"], + gravity: ["7T"], gyroball: ["7M"], + healingwish: ["7E"], + heavyslam: ["7L42"], + helpinghand: ["7T"], hiddenpower: ["7M"], hyperbeam: ["7M"], + ingrain: ["7L14"], + leafstorm: ["7L52"], + leafage: ["7L7", "7L1"], lightscreen: ["7M"], - powergem: ["7L38"], + luckychant: ["7L1"], + magiccoat: ["7T"], + magicroom: ["7T"], + magicalleaf: ["7L17"], + mistyterrain: ["7E"], + moonblast: ["7L49"], + naturalgift: ["7L31"], protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], - reflect: ["7M"], + psychup: ["7M", "7L24"], rest: ["7M"], return: ["7M"], - rockpolish: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - rollout: ["7L8"], + rototiller: ["7L10"], round: ["7M"], safeguard: ["7M"], sandstorm: ["7M"], - selfdestruct: ["7L22"], - shellsmash: ["7L45"], + seedbomb: ["7T"], + shadowball: ["7M"], + shoreup: ["7L1"], sleeptalk: ["7M"], + smellingsalts: ["7E"], + snore: ["7T"], solarbeam: ["7M"], - stealthrock: ["7L24"], - stoneedge: ["7M"], substitute: ["7M"], + sunnyday: ["7M", "7L35"], + superpower: ["7T"], swagger: ["7M"], - swift: ["7L15"], - tackle: ["7L1"], - takedown: ["7L29"], + synthesis: ["7T"], + tackle: ["7L3", "7L1"], toxic: ["7M"], - uturn: ["7M"], + wish: ["7L21"], + wonderroom: ["7T"], + woodhammer: ["7E"], + worryseed: ["7T"], }}, - komala: {learnset: { - acrobatics: ["7M"], + caribolt: {learnset: { attract: ["7M"], + bodyslam: ["7L32"], + boomburst: ["7L1"], brickbreak: ["7M"], bulkup: ["7M"], - bulldoze: ["7M"], - calmmind: ["7M"], - charm: ["7E"], - confide: ["7M"], - defensecurl: ["7L1"], - doubleteam: ["7M"], - earthquake: ["7M"], - facade: ["7M"], - flail: ["7L26"], - frustration: ["7M"], - hiddenpower: ["7M"], - lowsweep: ["7M"], - payback: ["7M"], - playrough: ["7E"], - protect: ["7M"], - psychup: ["7M", "7L36"], - quash: ["7M"], - rapidspin: ["7L11"], - return: ["7M"], - rockslide: ["7M"], - rollout: ["7L1"], - round: ["7M"], - shadowclaw: ["7M"], - sing: ["7E"], - slam: ["7L21"], - sleeptalk: ["7M"], - spitup: ["7L6"], - stockpile: ["7L6"], - substitute: ["7M"], - suckerpunch: ["7L31"], - sunnyday: ["7M"], - swagger: ["7M"], - swallow: ["7L6"], - swordsdance: ["7M"], - thrash: ["7L46"], - toxic: ["7M"], - uturn: ["7M"], - wish: ["7E"], - woodhammer: ["7L41"], - workup: ["7M"], - yawn: ["7L16"], - }}, - turtonator: {learnset: { - attract: ["7M"], - bodyslam: ["7L33", "7S0"], - brutalswing: ["7M"], - bulkup: ["7M"], - bulldoze: ["7M"], + bulletseed: ["7L1"], + celebrate: ["7S0"], chargebeam: ["7M"], confide: ["7M"], + confuseray: ["7L19"], + doubleedge: ["7E"], + doublekick: ["7E"], doubleteam: ["7M"], - dracometeor: ["7T"], - dragonclaw: ["7M"], - dragonpulse: ["7L41"], - dragontail: ["7M", "7S1"], - earthquake: ["7M"], - ember: ["7L1"], - endure: ["7L21"], - explosion: ["7M", "7L53"], + echoedvoice: ["7M"], + electricterrain: ["7L1"], + electroweb: ["7T"], + endeavor: ["7T"], + energyball: ["7M"], facade: ["7M"], - fireblast: ["7M"], - firespin: ["7E"], - flail: ["7L17"], - flamecharge: ["7M"], - flamethrower: ["7M", "7L29", "7S0", "7S1"], + flash: ["7L47"], flashcannon: ["7M"], - fling: ["7M"], - focusblast: ["7M"], + frenzyplant: ["7T"], frustration: ["7M"], + gigadrain: ["7T"], gigaimpact: ["7M"], - headsmash: ["7E"], + grassknot: ["7M"], + grasspledge: ["7T"], + grassyterrain: ["7L1"], + helpinghand: ["7T"], hiddenpower: ["7M"], + hornleech: ["7L1", "7S0"], hyperbeam: ["7M"], - incinerate: ["7L13"], - irondefense: ["7L25"], - overheat: ["7M", "7L49"], - payback: ["7M"], - protect: ["7M", "7L9"], + hypervoice: ["7T"], + knockoff: ["7T"], + leafage: ["7L1"], + leechseed: ["7L28"], + leer: ["7L4", "7L1"], + magnetrise: ["7T", "7L62"], + metronome: ["7S0"], + naturalgift: ["7E"], + naturepower: ["7M"], + protect: ["7M"], + powerwhip: ["7E"], + present: ["7E"], + quickattack: ["7L12"], + rapidspin: ["7E"], + razorleaf: ["7L15"], rest: ["7M"], return: ["7M"], - revenge: ["7E"], - roar: ["7M"], - rocktomb: ["7M"], round: ["7M"], - shellsmash: ["7L37"], - shelltrap: ["7L45", "7S1"], + seedbomb: ["7T", "7L37"], + shockwave: ["7T"], + signalbeam: ["7T", "7L52"], sleeptalk: ["7M"], - smackdown: ["7M"], - smog: ["7L5"], + snore: ["7T"], solarbeam: ["7M"], - stoneedge: ["7M"], + spark: ["7L24"], + spotlight: ["7E"], substitute: ["7M"], sunnyday: ["7M"], swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7T"], tackle: ["7L1"], - taunt: ["7M"], - toxic: ["7M"], - venoshock: ["7M"], - wideguard: ["7E", "7S0"], - willowisp: ["7M"], - workup: ["7M"], - }}, - togedemaru: {learnset: { - attract: ["7M"], - charge: ["7L13"], - chargebeam: ["7M"], - confide: ["7M"], - defensecurl: ["7L5"], - disarmingvoice: ["7E"], - discharge: ["7L29"], - doubleteam: ["7M"], - electricterrain: ["7L37"], - encore: ["7E"], - facade: ["7M"], - fakeout: ["7E"], - fellstinger: ["7L53"], - flail: ["7E"], - fling: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - gyroball: ["7M"], - hiddenpower: ["7M"], - magnetrise: ["7L25"], - nuzzle: ["7L21"], - payback: ["7M"], - pinmissile: ["7L45"], - poisonjab: ["7M"], - present: ["7E"], - protect: ["7M"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - reversal: ["7E"], - rollout: ["7L9"], - round: ["7M"], - sleeptalk: ["7M"], - spark: ["7L17"], - spikyshield: ["7L49"], - substitute: ["7M"], - swagger: ["7M"], - tackle: ["7L1"], - thief: ["7M"], thunder: ["7M"], thunderbolt: ["7M"], - thundershock: ["7L1"], + thundershock: ["7L7", "7L1"], thunderwave: ["7M"], - tickle: ["7E"], toxic: ["7M"], - twineedle: ["7E"], - uturn: ["7M"], + uproar: ["7T"], voltswitch: ["7M"], - wildcharge: ["7M", "7L41"], - wish: ["7E"], - workup: ["7M"], - zingzap: ["7L33"], - }}, - mimikyu: {learnset: { - astonish: ["7L1", "7S0"], - attract: ["7M"], - babydolleyes: ["7L10", "7S0"], - bulkup: ["7M"], - chargebeam: ["7M"], - charm: ["7L28"], - confide: ["7M"], - copycat: ["7L1", "7S0"], - curse: ["7E"], - darkpulse: ["7M"], - dazzlinggleam: ["7M"], - destinybond: ["7E"], - doubleteam: ["7M", "7L5"], - dreameater: ["7M"], - embargo: ["7M"], - facade: ["7M"], - feintattack: ["7L23"], - fling: ["7M"], - frustration: ["7M"], - grudge: ["7E"], - hiddenpower: ["7M"], - honeclaws: ["7L41"], - hyperbeam: ["7M"], - infestation: ["7M"], - leechlife: ["7M"], - lightscreen: ["7M"], - mimic: ["7L19"], - nightmare: ["7E"], - painsplit: ["7L50"], - payback: ["7M"], - playrough: ["7L46"], - protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], - rest: ["7M"], - return: ["7M"], - round: ["7M"], - safeguard: ["7M"], - scratch: ["7L1"], - shadowball: ["7M"], - shadowclaw: ["7M", "7L37"], - shadowsneak: ["7L14"], - slash: ["7L32"], - sleeptalk: ["7M"], - splash: ["7L1", "7S0"], - substitute: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - taunt: ["7M"], - thief: ["7M"], - thunder: ["7M"], - thunderbolt: ["7M"], - thunderwave: ["7M"], - toxic: ["7M"], - trickroom: ["7M"], - willowisp: ["7M"], - woodhammer: ["7L1"], + wildcharge: ["7T", "7L42"], workup: ["7M"], - xscissor: ["7M"], + worryseed: ["7T"], + zapcannon: ["7L57"], }}, - bruxish: {learnset: { - aerialace: ["7M"], - aquajet: ["7L17"], - aquatail: ["7L33"], - astonish: ["7L4"], + smokomodo: {learnset: { + acidspray: ["7E"], attract: ["7M"], - bite: ["7L12"], - blizzard: ["7M"], + blastburn: ["7T"], + bonerush: ["7E"], + brickbreak: ["7M"], bulkup: ["7M"], - calmmind: ["7M"], - confide: ["7M"], - confusion: ["7L9"], - crunch: ["7L28"], - disable: ["7L20"], - doubleteam: ["7M"], - dreameater: ["7M"], - embargo: ["7M"], - facade: ["7M"], - fling: ["7M"], - frostbreath: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - hiddenpower: ["7M"], - icebeam: ["7M"], - icefang: ["7E"], - lightscreen: ["7M"], - payback: ["7M"], - poisonfang: ["7E"], - protect: ["7M"], - psychic: ["7M"], - psychicfangs: ["7L41"], - psywave: ["7L25"], - rage: ["7E"], - raindance: ["7M"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - round: ["7M"], - safeguard: ["7M"], - scald: ["7M"], - screech: ["7L36"], - sleeptalk: ["7M"], - substitute: ["7M"], - surf: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - synchronoise: ["7L44"], - taunt: ["7M"], - torment: ["7M"], - toxic: ["7M"], - trickroom: ["7M"], - venoshock: ["7M"], - waterfall: ["7M"], - watergun: ["7L1"], - waterpulse: ["7E"], - }}, - drampa: {learnset: { - attract: ["7M"], - blizzard: ["7M"], - bulldoze: ["7M"], - calmmind: ["7M"], + bulldoze: ["7M", "7L20"], + bulletpunch: ["7E"], + camouflage: ["7L38", "7S0"], + celebrate: ["7S0"], + circlethrow: ["7L1"], + clearsmog: ["7L29"], confide: ["7M"], + defog: ["7T"], + dig: ["7L1"], doubleteam: ["7M"], - dracometeor: ["7T"], - dragonbreath: ["7L29"], - dragonclaw: ["7M"], - dragonpulse: ["7L41"], - dragonrage: ["7L21"], - dragonrush: ["7E"], - dragontail: ["7M"], - earthquake: ["7M"], - echoedvoice: ["7M", "7L1", "7S0"], - energyball: ["7M"], - extrasensory: ["7L37"], + earthpower: ["7T"], + earthquake: ["7M", "7L54"], + ember: ["7L1"], + endeavor: ["7T"], + eruption: ["7L1", "7S0"], facade: ["7M"], fireblast: ["7M"], - flamethrower: ["7M"], - fling: ["7M"], - fly: ["7M", "7L45"], + firepledge: ["7T"], + firepunch: ["7T"], + firespin: ["7E"], + fissure: ["7L65"], + flameburst: ["7L24"], + flamewheel: ["7L17"], + flamethrower: ["7M", "7L43"], + flareblitz: ["7L60"], focusblast: ["7M"], + forcepalm: ["7E"], frustration: ["7M"], gigaimpact: ["7M"], - glare: ["7L13"], - grassknot: ["7M"], + gunkshot: ["7T"], + heatwave: ["7T"], hiddenpower: ["7M"], - hurricane: ["7E", "7S0"], hyperbeam: ["7M"], - hypervoice: ["7L49"], - icebeam: ["7M"], - lightscreen: ["7M", "7L17"], - mist: ["7E"], - naturalgift: ["7L25"], - naturepower: ["7M"], - outrage: ["7L53"], - playnice: ["7L1", "7S0"], - playrough: ["7E"], - protect: ["7M", "7L9"], - psychup: ["7M"], - raindance: ["7M"], - razorwind: ["7E"], + incinerate: ["7L1"], + irontail: ["7T"], + lavaplume: ["7L33"], + lick: ["7L7"], + lowkick: ["7T"], + machpunch: ["7E"], + magnitude: ["7L1", "7S0"], + metalclaw: ["7L1"], + morningsun: ["7L1"], + mudshot: ["7L14"], + overheat: ["7M"], + poisonfang: ["7E"], + poisonjab: ["7M"], + protect: ["7M"], rest: ["7M"], return: ["7M"], - roar: ["7M"], - rockslide: ["7M"], - roost: ["7M"], + roar: ["7M"], round: ["7M"], - safeguard: ["7M", "7L33"], - shadowball: ["7M"], - shadowclaw: ["7M"], + sandtomb: ["7E"], + scratch: ["7L1"], + screech: ["7L49"], sleeptalk: ["7M"], - snarl: ["7M"], + sludgebomb: ["7M"], + smog: ["7L10"], + smokescreen: ["7L4"], + snore: ["7T"], solarbeam: ["7M"], - steelwing: ["7M"], + stealthrock: ["7T"], + stompingtantrum: ["7T"], + stormthrow: ["7L1"], substitute: ["7M"], sunnyday: ["7M"], - surf: ["7M"], - thunder: ["7M"], - thunderbolt: ["7M"], - thunderwave: ["7M"], + superpower: ["7T"], + swagger: ["7M"], + tailwhip: ["7L1"], + taunt: ["7M"], toxic: ["7M"], - twister: ["7L5"], + willowisp: ["7M"], workup: ["7M"], }}, - dhelmise: {learnset: { - absorb: ["7L1"], - aerialace: ["7M"], - anchorshot: ["7L32"], - astonish: ["7L1"], - attract: ["7M"], - brickbreak: ["7M"], - brutalswing: ["7M"], - bulldoze: ["7M"], + snaelstrom: {learnset: { + acidarmor: ["7E"], + aquajet: ["7L17"], + aquaring: ["7L1"], + attract: ["7M", "7L1"], + blizzard: ["7M"], + block: ["7T"], + brine: ["7L27"], + bugbite: ["7T"], + bugbuzz: ["7L48"], + captivate: ["7L56"], + celebrate: ["7S0"], + charm: ["7L11"], confide: ["7M"], + confusion: ["7L14"], + dazzlinggleam: ["7M"], doubleteam: ["7M"], - earthquake: ["7M"], - embargo: ["7M"], - energyball: ["7M", "7L41"], + echoedvoice: ["7M"], facade: ["7M"], - flashcannon: ["7M"], frustration: ["7M"], - gigadrain: ["7L23"], gigaimpact: ["7M"], - grassknot: ["7M"], - growth: ["7L1"], - gyroball: ["7M", "7L14"], - heavyslam: ["7L50"], + growl: ["7L5", "7L1"], + hail: ["7M"], + healpulse: ["7L22"], hiddenpower: ["7M"], + hydrocannon: ["7T"], + hydropump: ["7L60"], hyperbeam: ["7M"], - megadrain: ["7L5"], - metalsound: ["7L18"], - payback: ["7M"], - phantomforce: ["7L54"], - powerwhip: ["7L59"], + icebeam: ["7M"], + icywind: ["7T"], + infestation: ["7M"], + leechlife: ["7M", "7S0"], + liquidation: ["7T", "7L1", "7S0"], + magiccoat: ["7T"], + magicroom: ["7T"], + metronome: ["7S0"], + pound: ["7L1"], + powder: ["7E"], protect: ["7M"], - raindance: ["7M"], + psychic: ["7M", "7L44"], + psychoshift: ["7E"], + raindance: ["7M", "7L32"], rapidspin: ["7L1"], rest: ["7M"], return: ["7M"], - rockslide: ["7M"], round: ["7M"], - shadowball: ["7M", "7L36"], - shadowclaw: ["7M"], - slam: ["7L45"], + safeguard: ["7M"], + scald: ["7M"], + signalbeam: ["7T"], sleeptalk: ["7M"], - sludgewave: ["7M"], - solarbeam: ["7M"], + snore: ["7T"], + spikyshield: ["7E"], + spotlight: ["7E"], + stealthrock: ["7T"], + stickyweb: ["7E"], + strugglebug: ["7L8", "7L1"], substitute: ["7M"], - sunnyday: ["7M"], surf: ["7M"], swagger: ["7M"], - switcheroo: ["7L1"], - swordsdance: ["7M"], - thief: ["7M"], + swordsdance: ["7M", "7L64"], toxic: ["7M"], - whirlpool: ["7L27"], - wrap: ["7L9"], + trick: ["7T"], + trickroom: ["7M"], + uturn: ["7M", "7L40"], + uproar: ["7T"], + venoshock: ["7M"], + waterpledge: ["7T"], + waterfall: ["7M"], + waterpulse: ["7T"], + whirlpool: ["7L1"], + wonderroom: ["7T"], + workup: ["7M"], }}, - jangmoo: {learnset: { - aerialace: ["7M"], - attract: ["7M"], - bide: ["7L9"], - brickbreak: ["7M"], - bulkup: ["7M"], + syclant: {learnset: { + absorb: ["7L1"], + attract: ["7M", "4M"], + avalanche: ["7L50", "4M", "4L49"], + blizzard: ["7M", "4M"], + brickbreak: ["7M", "4M"], + brutalswing: ["7M"], + bugbite: ["4T"], + bugbuzz: ["7L46", "4L42"], bulldoze: ["7M"], + captivate: ["4M"], confide: ["7M"], - counter: ["7E"], - doubleteam: ["7M"], - dracometeor: ["7T"], - dragonbreath: ["7E"], - dragonclaw: ["7M", "7L41"], - dragondance: ["7L49"], - dragontail: ["7M", "7L17"], - earthquake: ["7M"], - echoedvoice: ["7M"], - facade: ["7M"], - falseswipe: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - headbutt: ["7L25"], - hiddenpower: ["7M"], - irondefense: ["7L37"], - leer: ["7L5"], - nobleroar: ["7L45"], - outrage: ["7L53"], - payback: ["7M"], - protect: ["7M", "7L13"], - rest: ["7M"], - return: ["7M"], - reversal: ["7E"], - roar: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], + counter: ["4T"], + cut: ["4M"], + doubleedge: ["4T"], + doubleteam: ["7M", "4M"], + earthpower: ["7E", "4T", "4E"], + earthquake: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fellstinger: ["7E"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focusenergy: ["7L10", "4L8"], + focuspunch: ["6T", "4M"], + frostbreath: ["7M"], + frustration: ["7M", "4M"], + furyattack: ["7L14", "4L1"], + furycutter: ["7L23", "4T"], + gigaimpact: ["7M", "4M"], + hail: ["7M", "7L37", "4M", "4L35"], + hiddenpower: ["7M", "4M"], + honeclaws: ["7M"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7L1", "4T", "4L30"], + iceshard: ["7L5", "4L5"], + iciclecrash: ["7L41"], + iciclespear: ["7L1"], + icywind: ["7L19", "4T", "4L18"], + leechlife: ["7M", "4L1"], + leer: ["7L1", "4L1"], + mimic: ["7E", "4T"], + naturalgift: ["4M"], + pinmissile: ["7E", "4E"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M"], + secretpower: ["7M", "4M"], + sheercold: ["5L59", "4L60"], + signalbeam: ["7T", "7E"], + silverwind: ["4M"], + slash: ["7L28", "4L14"], + sleeptalk: ["7M", "4M"], + snore: ["4T"], + spikes: ["7E", "4E"], + stoneedge: ["7M", "4M"], + strength: ["6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["7M"], + substitute: ["7M", "4M"], + superpower: ["7E", "4T", "4E"], + swagger: ["7M", "4M"], + swordsdance: ["7M", "4M"], + tailglow: ["7E", "4E"], + taunt: ["7M", "4M"], + toxic: ["7M", "4M"], + uturn: ["7M", "4M"], + waterpulse: ["6T", "4M"], + xscissor: ["7M", "7L32", "4M", "4L27"], + }}, + revenankh: {learnset: { + ancientpower: ["4T"], + armthrust: ["7L13", "4L18"], + attract: ["7M", "4M"], + bide: ["7L1", "4L1"], + bind: ["7T"], + brickbreak: ["7M", "4M"], + brutalswing: ["7M"], + bulkup: ["7M", "4M"], + bulldoze: ["7M"], + captivate: ["4M"], + confide: ["7M"], + counter: ["7E", "4T"], + curse: ["7E", "4E"], + destinybond: ["7E", "4E"], + doubleteam: ["7M", "4M"], + drainpunch: ["7M", "4M"], + dreameater: ["7M", "4M"], + dualchop: ["7T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focuspunch: ["7T", "4M"], + forcepalm: ["7E", "4E"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + glare: ["7L26", "4L26"], + hammerarm: ["7L57", "4L44"], + headbutt: ["7T"], + helpinghand: ["7T", "4T"], + hex: ["7E"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + knockoff: ["7T", "4T"], + machpunch: ["7E", "4E"], + meanlook: ["7L18", "4L23"], + memento: ["7E", "4E"], + metronome: ["7E", "4T"], + mimic: ["7E", "4T"], + moonlight: ["7L62", "4L62"], + mudslap: ["4T"], + nastyplot: ["7E", "4E"], + naturalgift: ["4M"], + ominouswind: ["7E", "4T", "4E"], + painsplit: ["7T", "4T"], + payback: ["7L38", "4M"], + poweruppunch: ["7M"], + powerwhip: ["7L52", "4L38"], + protect: ["7M", "4M"], + psychup: ["7M", "4M"], + punishment: ["7L71", "4L52"], + quickguard: ["7L48"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L33", "4L33"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "7L23", "4M", "4L13"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandstorm: ["7M", "4M"], + sandtomb: ["7L5", "4L5"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + shadowclaw: ["7M"], + shadowpunch: ["7L29", "4L29"], + shadowsneak: ["7E", "4E"], + sleeptalk: ["7M", "4M"], + smackdown: ["7M"], + snore: ["7T"], + spite: ["7T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "4M"], + superpower: ["7T", "4T"], + swagger: ["7M", "4M"], + taunt: ["7M", "4M"], + telekinesis: ["7M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + vacuumwave: ["4T"], + willowisp: ["7M"], + workup: ["7M"], + wrap: ["7L1", "4L1"], + wringout: ["7L66", "4L9"], + }}, + pyroak: {learnset: { + amnesia: ["7L37"], + ancientpower: ["4T"], + aromatherapy: ["7E", "4E"], + aromaticmist: ["7L59"], + attract: ["7M", "4M"], + block: ["7T", "4T"], + bulldoze: ["7M"], + bulletseed: ["7L1", "4M", "4L1"], + burnup: ["7L68"], + confide: ["7M"], + counter: ["7E", "4T", "4E"], + doubleedge: ["7E", "4T"], + doubleteam: ["7M", "4M"], + dragonbreath: ["7E", "4E"], + dragonpulse: ["7T"], + dragontail: ["7M"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + ember: ["7L5", "4L9"], + endure: ["4M"], + energyball: ["7M", "7L1", "4M"], + facade: ["7M", "4M"], + fireblast: ["7M", "4M"], + firespin: ["7E", "4L28"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "4M"], + flamewheel: ["7L19", "4L17"], + flareblitz: ["7L1", "4L1"], + flash: ["4M"], + flashcannon: ["7M", "7L46"], + frustration: ["7M", "4M"], + gigadrain: ["7L32", "4M", "4L21"], + gigaimpact: ["7M", "4M"], + grassknot: ["7M", "4M"], + grasswhistle: ["7E", "4E"], + grassyterrain: ["7E"], + growth: ["7L28", "4L5"], + headbutt: ["4T"], + heatcrash: ["7L41"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + incinerate: ["7M"], + irondefense: ["7L37", "4T", "4L42"], + ironhead: ["7T"], + irontail: ["7T", "4M"], + lavaplume: ["7L50", "4L54"], + leechseed: ["7L10", "4L13"], + lightscreen: ["7M", "4M"], + lowkick: ["7T", "4T"], + mimic: ["4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M"], + overheat: ["7M", "4M"], + petalblizzard: ["7E"], + petaldance: ["7L55", "4L36"], + protect: ["7M", "4M"], + psybeam: ["7E", "4E"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + revenge: ["7E", "4E"], + roar: ["7M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandtomb: ["7E", "4E"], + secretpower: ["7M", "4M"], + seedbomb: ["7L23", "4T"], + sleeptalk: ["7M", "4M"], + snore: ["4T"], + solarbeam: ["7M", "4M"], + stealthrock: ["7T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + sweetscent: ["7L1", "4L1"], + swordsdance: ["7M", "4M"], + synthesis: ["7L14", "4T", "4L48"], + toxic: ["7M", "4M"], + watersport: ["7E", "4E"], + wildcharge: ["7M"], + willowisp: ["7M", "4M"], + woodhammer: ["7L1", "4L1"], + worryseed: ["7T", "4T"], + zapcannon: ["7L64", "4L60"], + zenheadbutt: ["7T"], + }}, + fidgit: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M", "4M"], + afteryou: ["7T"], + attract: ["7M", "4M"], + block: ["7T", "4T"], + bodyslam: ["7L30", "4T", "4L30"], + brutalswing: ["7M"], + bulldoze: ["7M"], + captivate: ["4M"], + cometpunch: ["7L1", "4L1"], + confide: ["7M"], + copycat: ["7L19", "4L19"], + dig: ["7M"], + disable: ["7E", "4E"], + doubleedge: ["7E", "4T"], + doubleteam: ["7M", "4M"], + drillrun: ["7L1"], + earthpower: ["7L60", "4T", "4L59"], + earthquake: ["7M", "4M"], + encore: ["7L5", "4L5"], + endure: ["4M"], + entrainment: ["7E"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + followme: ["7E", "4E"], + frustration: ["7M", "4M"], + gastroacid: ["7T", "4T"], + gigaimpact: ["7M", "4M"], + gravity: ["7L47", "4T", "4L49"], + gust: ["7L1", "4L1"], + healblock: ["7L54", "4L53"], + helpinghand: ["7L1", "4T", "4L1"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icywind: ["7T", "4T"], + knockoff: ["7L14", "4T", "4L14"], + lightscreen: ["7M", "4M"], + luckychant: ["7L65", "4L67"], + magicroom: ["7T"], + mefirst: ["7E", "4E"], + metronome: ["7E", "4T", "4E"], + mimic: ["7E", "4T", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonjab: ["7M", "4M"], + protect: ["7M", "4M"], + psychup: ["7M", "4M"], + raindance: ["7M", "4M"], + rapidspin: ["7L9", "4L9"], + reflect: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + roleplay: ["7T"], + rototiller: ["7L1"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandstorm: ["7M", "4M"], + sandtomb: ["7E", "4E"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + skillswap: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + sludgebomb: ["7M", "7L35", "4M", "4L35"], + sludgewave: ["7M"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E", "4E"], + stealthrock: ["7T", "4M"], + stoneedge: ["7M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + swift: ["4T"], + tailwind: ["7L1", "4T", "4L1"], + taunt: ["7M", "4M"], + thief: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + toxicspikes: ["7L41", "4L41"], + trickroom: ["7M", "4M"], + twister: ["4T"], + uturn: ["7M", "4M"], + venoshock: ["7M"], + whirlwind: ["7L25", "4L25"], + wideguard: ["7L1"], + wish: ["7E", "4E"], + wonderroom: ["7T"], + }}, + stratagem: {learnset: { + accelerock: ["7L21"], + acupressure: ["7L26", "4L20"], + aerialace: ["7M", "4M"], + ancientpower: ["7L30", "4T"], + bulldoze: ["7M"], + calmmind: ["7M", "4M"], + confide: ["7M"], + cut: ["4M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1", "4L1"], + disable: ["7L17", "4L17"], + doubleedge: ["7L43", "4L32"], + doubleteam: ["7M", "4M"], + earthpower: ["7L47", "4T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + energyball: ["7M", "4M"], + explosion: ["7M", "4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fireblast: ["7M", "4M"], + flamethrower: ["7M", "4M"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigadrain: ["7T", "4M"], + gigaimpact: ["7M", "4M"], + headbutt: ["4T"], + headsmash: ["7L69", "4L50"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + incinerate: ["7M"], + laserfocus: ["7L1"], + lockon: ["7L65"], + metalsound: ["7L52", "4L37"], + mudshot: ["7L34", "4L25"], + mudslap: ["7L8", "4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + paleowave: ["7L1", "4L42"], + powergem: ["7L39", "4L29"], + protect: ["7M", "4M"], + quickguard: ["7L1"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rockblast: ["7L13", "4L15"], + rockclimb: ["4M"], + rockpolish: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + rollout: ["7L4", "4T", "4L1"], round: ["7M"], - safeguard: ["7M"], - sandstorm: ["7M"], - scaryface: ["7L21"], - screech: ["7L33"], - shadowclaw: ["7M"], - sleeptalk: ["7M"], - substitute: ["7M"], + sandstorm: ["7M", "4M"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + smackdown: ["7M"], + smartstrike: ["7M"], + snore: ["7T", "4T"], + speedswap: ["7L56"], + stealthrock: ["7T", "4M"], + stoneedge: ["7M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], swagger: ["7M"], - swordsdance: ["7M"], - tackle: ["7L1"], - taunt: ["7M"], - toxic: ["7M"], - workup: ["7M", "7L29"], - xscissor: ["7M"], + swift: ["4T"], + tackle: ["7L1", "4L1"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + vacuumwave: ["7L60", "4T"], + weatherball: ["7L1", "4L1"], + zenheadbutt: ["7T"], }}, - hakamoo: {learnset: { - aerialace: ["7M"], - attract: ["7M"], - autotomize: ["7L1"], - bide: ["7L9", "7L1"], - brickbreak: ["7M"], - brutalswing: ["7M"], - bulkup: ["7M"], + arghonaut: {learnset: { + aquajet: ["7L19", "4L27"], + armthrust: ["7L14", "4L21"], + attract: ["7M", "4M"], + blizzard: ["7M", "4M"], + brickbreak: ["7M", "4M"], + brine: ["4M"], + bubble: ["7L1", "4L1"], + bulkup: ["7M", "7E", "4E"], bulldoze: ["7M"], + captivate: ["4M"], + chipaway: ["7L30"], + circlethrow: ["7L1"], + closecombat: ["7E"], confide: ["7M"], - doubleteam: ["7M"], - dracometeor: ["7T"], - dragonclaw: ["7M", "7L43"], - dragondance: ["7L53"], - dragontail: ["7M", "7L17"], - earthquake: ["7M"], - echoedvoice: ["7M"], - facade: ["7M"], - falseswipe: ["7M"], - fling: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - headbutt: ["7L25"], - hiddenpower: ["7M"], - irondefense: ["7L38"], - leer: ["7L5", "7L1"], - nobleroar: ["7L48"], - outrage: ["7L58"], - payback: ["7M"], - protect: ["7M", "7L13", "7L1"], - rest: ["7M"], - return: ["7M"], - roar: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], + crosschop: ["7M", "4E"], + cut: ["4M"], + dive: ["4T"], + doubleteam: ["7M", "4M"], + drainpunch: ["4M"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focuspunch: ["7L73", "4M", "4L67"], + foulplay: ["7T"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + gunkshot: ["7T", "4T"], + hail: ["7M", "4M"], + headbutt: ["7E", "4T", "4E"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + icywind: ["7T", "4T"], + knockoff: ["7T", "4T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + machpunch: ["7L35", "4L32"], + mudslap: ["4T"], + naturalgift: ["4M"], + octazooka: ["7E", "4E"], + poisonjab: ["7M"], + poweruppunch: ["7M"], + protect: ["7M", "4M"], + punishment: ["7L67", "4L60"], + raindance: ["7M", "4M"], + recover: ["7E", "4E"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L46", "4L41"], + roar: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["4M"], + rocktomb: ["7M", "4M"], round: ["7M"], - safeguard: ["7M"], - sandstorm: ["7M"], - scaryface: ["7L21"], - screech: ["7L33"], - shadowclaw: ["7M"], - skyuppercut: ["7L1"], - sleeptalk: ["7M"], - substitute: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - tackle: ["7L1"], - taunt: ["7M"], - toxic: ["7M"], - workup: ["7M", "7L29"], - xscissor: ["7M"], + scald: ["7M", "7L40"], + scaryface: ["7E", "4E"], + secretpower: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + sludgebomb: ["7M", "4M"], + smokescreen: ["7L7", "4L7"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E"], + stoneedge: ["7M", "4M"], + strength: ["4M"], + submission: ["7L56", "4L55"], + substitute: ["7M", "4M"], + superpower: ["7T", "4T"], + surf: ["7M", "4M"], + swagger: ["7M", "4M"], + taunt: ["7M", "7L24", "4M", "4L36"], + thief: ["7M", "7L51", "4M", "4L47"], + thunderpunch: ["7T", "4T"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + vacuumwave: ["4T"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + whirlpool: ["4M"], + wideguard: ["7L62"], + workup: ["7M"], + wrap: ["7L1", "4L1"], + yawn: ["7L10", "4L1"], }}, - kommoo: {learnset: { - aerialace: ["7M"], - attract: ["7M"], - autotomize: ["7L1"], - bellydrum: ["7L1"], - bide: ["7L9", "7L1"], - brickbreak: ["7M"], - brutalswing: ["7M"], - bulkup: ["7M"], + kitsunoh: {learnset: { + attract: ["7M", "4M"], bulldoze: ["7M"], - clangingscales: ["7L1"], + bulletpunch: ["7L1"], + captivate: ["4M"], confide: ["7M"], - doubleteam: ["7M"], - dracometeor: ["7T"], - dragonclaw: ["7M", "7L43"], - dragondance: ["7L59"], - dragontail: ["7M", "7L17"], - earthquake: ["7M"], - echoedvoice: ["7M"], - facade: ["7M"], - falseswipe: ["7M"], - flamethrower: ["7M"], - flashcannon: ["7M"], - fling: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - headbutt: ["7L25"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - irondefense: ["7L38"], - leer: ["7L5", "7L1"], - nobleroar: ["7L51"], - outrage: ["7L67"], - payback: ["7M"], - poisonjab: ["7M"], - protect: ["7M", "7L13", "7L1"], - rest: ["7M"], - return: ["7M"], - roar: ["7M"], - rockpolish: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], + copycat: ["7L22", "4L22"], + curse: ["7E", "4E"], + cut: ["7M", "4M"], + darkpulse: ["7M", "4M"], + defog: ["7E", "4M"], + dig: ["7M", "4M"], + doubleteam: ["7M", "4M"], + dreameater: ["7M", "4M"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endeavor: ["7T", "4T"], + facade: ["7M", "4M"], + fakeout: ["7L27", "4L35"], + falseswipe: ["7M", "4M"], + featherdance: ["7E", "4E"], + feintattack: ["7L14", "4L14"], + flail: ["7E", "4E"], + flash: ["7M", "4M"], + flashcannon: ["7M", "4M"], + fling: ["7M", "4M"], + foulplay: ["7M"], + frustration: ["7M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "4M"], + headbutt: ["4T"], + hex: ["7E"], + hiddenpower: ["7M", "4M"], + honeclaws: ["7L31"], + hyperbeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + icywind: ["7T", "4T"], + irondefense: ["7T", "4T"], + ironhead: ["7L43", "4T"], + irontail: ["7E", "4M"], + knockoff: ["7T", "4T"], + lastresort: ["7T", "4T"], + lick: ["7L6", "4L6"], + lowkick: ["7T", "4T"], + magiccoat: ["7T", "4T"], + memento: ["7L52", "4L31"], + metalclaw: ["7L1", "4L27"], + metalsound: ["7E", "4E"], + meteormash: ["7E", "4E"], + naturalgift: ["4M"], + odorsleuth: ["7L10", "4L10"], + ominouswind: ["4T"], + painsplit: ["7T", "4T"], + payback: ["7M", "4M"], + perishsong: ["7L56", "4L55"], + playrough: ["7E"], + protect: ["7M", "4M"], + psychoshift: ["7E", "4E"], + psychup: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L39", "4L44"], + roar: ["7M", "4M"], round: ["7M"], - safeguard: ["7M"], - sandstorm: ["7M"], - scaryface: ["7L21"], - screech: ["7L33"], - shadowclaw: ["7M"], - skyuppercut: ["7L1"], - sleeptalk: ["7M"], - substitute: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - tackle: ["7L1"], - taunt: ["7M"], - toxic: ["7M"], - workup: ["7M", "7L29"], - xscissor: ["7M"], + safeguard: ["7M", "4M"], + scratch: ["7L1", "4L1"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + shadowclaw: ["7M", "7L35", "4M", "4L40"], + shadowsneak: ["7L18", "4L18"], + shadowstrike: ["7L48", "4L49"], + sleeptalk: ["7M", "4M"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spite: ["7T", "4T"], + substitute: ["7M", "4M"], + suckerpunch: ["7E", "4T"], + sunnyday: ["7M", "4M"], + superfang: ["7T", "4T"], + superpower: ["7T", "4T"], + swagger: ["7M", "4M"], + tailwhip: ["7L1", "4L1"], + taunt: ["7M", "4M"], + telekinesis: ["7M"], + thief: ["7M", "4M"], + thunderpunch: ["7T", "4T"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + trickroom: ["7M", "4M"], + uturn: ["7M", "4M"], + willowisp: ["7M", "4M"], + wish: ["7E"], + yawn: ["7E", "4E"], }}, - tapukoko: {learnset: { - acrobatics: ["7M"], - aerialace: ["7M"], - agility: ["7L53", "7S0", "7S1"], - bravebird: ["7L1"], - calmmind: ["7M"], - charge: ["7L26"], + cyclohm: {learnset: { + aerialace: ["7M", "4M"], + aquatail: ["7T"], + attract: ["7M", "4M"], + bide: ["7L1", "4L1"], + blizzard: ["7M", "4M"], + bulldoze: ["7M"], + captivate: ["4M"], + charge: ["7L11", "4L11"], + chargebeam: ["7M", "4M"], confide: ["7M"], - dazzlinggleam: ["7M"], - discharge: ["7L48", "7S0", "7S1"], - doubleteam: ["7M"], - echoedvoice: ["7M"], + discharge: ["7L33", "4L37"], + doublehit: ["7L20", "4L22"], + doubleteam: ["7M", "4M"], + dracometeor: ["7T", "4T"], + dragonbreath: ["7L29", "7E", "4E"], + dragonclaw: ["7M", "4M"], + dragonpulse: ["7T", "4M"], + dragonrage: ["7L24", "4L7"], + dragontail: ["7M"], + earthquake: ["7M", "4M"], electricterrain: ["7L1"], - electroball: ["7L58", "7S0", "7S1"], - facade: ["7M"], - falseswipe: ["7M", "7L1"], - fly: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - lightscreen: ["7M"], - meanlook: ["7L1"], - mirrormove: ["7L38"], + electroweb: ["7T"], + endure: ["4M"], + facade: ["7M", "4M"], + fireblast: ["7M", "4M"], + flamethrower: ["7M", "4M"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + growl: ["7L1", "4L1"], + hail: ["7M", "4M"], + headbutt: ["4T"], + healbell: ["7E", "4E"], + hiddenpower: ["7M", "4M"], + honeclaws: ["7M"], + hydropump: ["7E", "4E"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icywind: ["7T"], + incinerate: ["7M"], + irontail: ["7T"], + lightscreen: ["7M", "4M"], + mudslap: ["7E", "4T", "4E"], + naturalgift: ["4M"], naturepower: ["7M"], - naturesmadness: ["7L43", "7S0", "7S1"], - powerswap: ["7L1"], - protect: ["7M"], - psychup: ["7M"], - quickattack: ["7L1"], - raindance: ["7M"], - reflect: ["7M"], - return: ["7M"], - roar: ["7M"], - roost: ["7M"], + outrage: ["4T"], + powdersnow: ["7E"], + powergem: ["7E", "4E"], + protect: ["7M", "4M"], + raindance: ["7M", "7L37", "4M", "4L19"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + roar: ["7M", "4M"], round: ["7M"], - safeguard: ["7M"], - screech: ["7L20"], - shockwave: ["7L14"], - skydrop: ["7M"], - sleeptalk: ["7M"], - spark: ["7L8"], - steelwing: ["7M"], - substitute: ["7M"], + sandstorm: ["7M", "4M"], + secretpower: ["7M", "4M"], + shockwave: ["7T", "4M"], + signalbeam: ["4T"], + slackoff: ["7L48", "4L42"], + sleeptalk: ["7M", "4M"], + snore: ["4T"], + sonicboom: ["7L16", "4L29"], + strength: ["4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + surf: ["7M", "4M"], swagger: ["7M"], - taunt: ["7M"], - thief: ["7M"], - thunder: ["7M"], - thunderbolt: ["7M"], - thundershock: ["7L1"], - thunderwave: ["7M"], + swift: ["4T"], + tackle: ["7L1", "4L1"], + thrash: ["7L53", "4L50"], + thunder: ["7M", "7L65", "4M"], + thunderbolt: ["7M", "4M"], + thundershock: ["7L11", "4L15"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + triattack: ["7L1", "4L33"], + trickroom: ["7M", "4M"], + twister: ["7L7", "4T"], + voltswitch: ["7M"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + weatherball: ["7L42"], + whirlwind: ["7L1", "4L1"], + wildcharge: ["7M"], + zapcannon: ["7L59", "4L59"], + }}, + colossoil: {learnset: { + ancientpower: ["4T"], + aquatail: ["7T", "4T"], + attract: ["7M", "4M"], + bite: ["5L10", "4L11"], + block: ["7T"], + bodyslam: ["7L42", "4T", "4L22"], + bounce: ["7L48", "4T", "4L35"], + brickbreak: ["7M", "4M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + captivate: ["4M"], + chipaway: ["7E"], + confide: ["7M"], + crunch: ["7L58", "4L55"], + darkpulse: ["7M", "4M"], + dig: ["4M"], + dive: ["4T"], + doubleedge: ["7E", "4T", "4E"], + doubleteam: ["7M", "4M"], + drillrun: ["7L1"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + encore: ["7E", "4E"], + endure: ["4M"], + facade: ["7M", "4M"], + fakeout: ["7E", "4E"], + firefang: ["7E", "4E"], + fissure: ["7E", "4E"], + flail: ["7E", "4E"], + foulplay: ["7T"], + frustration: ["7M", "4M"], + furyattack: ["7L26"], + gigaimpact: ["7M", "4M"], + hiddenpower: ["7M", "4M"], + highhorsepower: ["7L1"], + hornattack: ["7L5", "4L6"], + horndrill: ["7L74", "7E", "4L70", "4E"], + hyperbeam: ["7M", "4M"], + irontail: ["7T", "4M"], + knockoff: ["7T", "4T"], + leer: ["7L1", "4L1"], + magnitude: ["7L32", "4L42"], + megahorn: ["7L64", "4L63"], + mimic: ["7E", "4T"], + mudslap: ["7L16", "4T"], + naturalgift: ["4M"], + payback: ["7M", "4M"], + peck: ["7L1", "4L1"], + protect: ["7M", "4M"], + pursuit: ["7L37", "4L29"], + raindance: ["7M", "4M"], + rapidspin: ["7L21", "4L17"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + roar: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["7M", "4M"], + rocktomb: ["7M"], + rollout: ["4T"], + round: ["7M"], + sandstorm: ["7M", "4M"], + sandtomb: ["7E", "4E"], + screech: ["7E", "4E"], + secretpower: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + smartstrike: ["7M"], + snarl: ["7M"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spitup: ["7L53", "4L48"], + stockpile: ["7L53", "4L48"], + stoneedge: ["7M", "4M"], + strength: ["4M"], + substitute: ["7M", "4M"], + suckerpunch: ["7E", "4T", "4E"], + sunnyday: ["7M", "4M"], + superpower: ["7T", "4T"], + swagger: ["7M", "4M"], + swallow: ["7L53", "4L48"], + taunt: ["7M", "4M"], + thunderfang: ["7E", "4E"], torment: ["7M"], - toxic: ["7M"], - uturn: ["7M"], - voltswitch: ["7M"], - wildcharge: ["7M", "7L32"], - withdraw: ["7L1"], - workup: ["7M"], + toxic: ["7M", "4M"], + uturn: ["7M", "4M"], + wideguard: ["7E"], }}, - tapulele: {learnset: { - aromatherapy: ["7L1"], - aromaticmist: ["7L1"], - astonish: ["7L1"], - calmmind: ["7M"], - chargebeam: ["7M"], + krilowatt: {learnset: { + aquatail: ["7L1"], + attract: ["7M", "4M"], + blizzard: ["7M", "4M"], + bubble: ["7L1", "4L1"], + bubblebeam: ["7L28", "4L28"], + bulldoze: ["7M"], + captivate: ["4M"], + charge: ["7L1", "4L1"], confide: ["7M"], - confusion: ["7L1"], - dazzlinggleam: ["7M"], - doubleteam: ["7M"], - drainingkiss: ["7L1"], - echoedvoice: ["7M"], - energyball: ["7M"], - extrasensory: ["7L48", "7S0"], - facade: ["7M"], - flatter: ["7L53", "7S0"], - fling: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - lightscreen: ["7M"], - meanlook: ["7L1"], - moonblast: ["7L58", "7S0"], - naturepower: ["7M"], - naturesmadness: ["7L43", "7S0"], - protect: ["7M"], - psybeam: ["7L14"], - psychic: ["7M"], - psychicterrain: ["7L1"], - psychup: ["7M"], - psyshock: ["7M", "7L32"], - psywave: ["7L8"], - reflect: ["7M"], - return: ["7M"], + confuseray: ["7L11", "4L11"], + copycat: ["7L39", "4L39"], + counter: ["7L33", "7E", "4L33", "4E"], + cut: ["6M", "5M", "4M"], + discharge: ["7M", "7L51", "4L51"], + dive: ["6M", "4T"], + doubleteam: ["7M", "4M"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + electroweb: ["7T"], + endure: ["4M"], + entrainment: ["7E"], + facade: ["7M", "4M"], + flash: ["4M"], + fling: ["7M", "4M"], + followme: ["7E", "4E"], + frustration: ["7M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "4M"], + guillotine: ["7L57", "4L57"], + hail: ["7M", "4M"], + heartswap: ["7L53", "4L46"], + helpinghand: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + iceshard: ["7L1", "4L1"], + icywind: ["7T", "4T"], + imprison: ["7L17", "4L17"], + irontail: ["7T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + magneticflux: ["7L1"], + mefirst: ["7E", "4E"], + metronome: ["7E", "4E"], + mindreader: ["7E", "4E"], + mirrorcoat: ["7L24", "7E", "4L24", "4E"], + muddywater: ["7L68", "4L68"], + naturalgift: ["4M"], + payback: ["7M", "4M"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + recycle: ["7T", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], round: ["7M"], - safeguard: ["7M"], - shadowball: ["7M"], - skillswap: ["7L26"], - sleeptalk: ["7M"], - substitute: ["7M"], - sunnyday: ["7M"], + scald: ["7M"], + secretpower: ["7T", "4M"], + sheercold: ["7E", "4E"], + shockwave: ["7T", "4M"], + signalbeam: ["7T", "4T"], + sleeptalk: ["7M", "4M"], + snore: ["7T"], + speedswap: ["7E"], + substitute: ["7M", "4M"], + surf: ["7M", "4M"], swagger: ["7M"], - sweetscent: ["7L20"], - taunt: ["7M"], - thief: ["7M"], - thunder: ["7M"], - thunderbolt: ["7M"], - tickle: ["7L38"], - torment: ["7M"], - toxic: ["7M"], - withdraw: ["7L1"], + swift: ["4T"], + thunder: ["7M", "7L63", "4M", "4L63"], + thunderbolt: ["7M", "4M"], + thunderpunch: ["7T", "4T"], + thundershock: ["7L5", "4L5"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + voltswitch: ["7M"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + whirlpool: ["7M", "4M"], + wildcharge: ["7M", "7L53"], }}, - tapubulu: {learnset: { - brickbreak: ["7M"], - brutalswing: ["7M"], - bulkup: ["7M"], - calmmind: ["7M"], + voodoom: {learnset: { + acupressure: ["7L40", "4L40"], + afteryou: ["7T"], + astonish: ["7L1", "4L1"], + attract: ["7M", "4M"], + aurasphere: ["7L45", "4L45"], + batonpass: ["7E", "4E"], + beatup: ["7L55", "4L55"], + brickbreak: ["7M", "4M"], + bulkup: ["7M", "4M"], + bulldoze: ["7M"], + captivate: ["4M"], + charge: ["7L19", "4L19"], + closecombat: ["7L35", "4L35"], confide: ["7M"], - dazzlinggleam: ["7M"], - disable: ["7L1"], - echoedvoice: ["7M"], - energyball: ["7M"], - facade: ["7M"], - falseswipe: ["7M"], - fling: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - gigadrain: ["7L14"], - gigaimpact: ["7M"], - grassknot: ["7M"], - grassyterrain: ["7L1"], - hiddenpower: ["7M"], - hornattack: ["7L8"], - hornleech: ["7L32"], - hyperbeam: ["7M"], - leafage: ["7L1"], - leechseed: ["7L26"], - lightscreen: ["7M"], - meanlook: ["7L1"], - megahorn: ["7L53", "7S0"], - naturepower: ["7M"], - naturesmadness: ["7L43", "7S0"], - payback: ["7M"], - protect: ["7M"], - psychup: ["7M"], - reflect: ["7M"], - return: ["7M"], - roar: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - rototiller: ["7L38"], + copycat: ["7L1", "4L1"], + counter: ["7E", "4T"], + darkpulse: ["7M", "4M"], + doubleteam: ["7M"], + drainpunch: ["7T", "4M"], + dreameater: ["7M", "4M"], + earthquake: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + feintattack: ["7L30", "4L30"], + flashcannon: ["7M"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focuspunch: ["7T", "4M"], + followme: ["7L20", "4L20"], + foulplay: ["7L61"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + grudge: ["7L15", "4L15"], + hex: ["7L48"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + hypervoice: ["7T"], + icepunch: ["7T", "4T"], + imprison: ["7E", "4E"], + knockoff: ["7T", "4T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + machpunch: ["7E", "4E"], + magiccoat: ["7T", "4T"], + magicroom: ["7T"], + memento: ["7E", "4E"], + metronome: ["7E", "4T"], + mimic: ["4T"], + mudslap: ["4T"], + nastyplot: ["7E"], + naturalgift: ["4M"], + nightmare: ["7E", "4T"], + nightslash: ["7M", "7L1", "4L1"], + painsplit: ["7L1", "4T", "4L1"], + payback: ["7M", "4M"], + perishsong: ["7E", "4E"], + pinmissile: ["7L25", "4L25"], + powertrip: ["7E"], + poweruppunch: ["7M"], + protect: ["7M", "4M"], + psychic: ["7M", "4M"], + pursuit: ["7E", "4E"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L1", "4L1"], + rockslide: ["7M", "4M"], + rocksmash: ["7M", "4M"], round: ["7M"], - safeguard: ["7M"], - scaryface: ["7L20"], - skullbash: ["7L58", "7S0"], - sleeptalk: ["7M"], + screech: ["7E", "4E"], + secretpower: ["7M", "4M"], + shockwave: ["7T", "4M"], + sleeptalk: ["7M", "4M"], smartstrike: ["7M"], + smellingsalts: ["7E", "4E"], snarl: ["7M"], - solarbeam: ["7M"], - stoneedge: ["7M"], - substitute: ["7M"], - sunnyday: ["7M"], - superpower: ["7L1"], - swagger: ["7M"], - swordsdance: ["7M"], - taunt: ["7M"], - torment: ["7M"], - toxic: ["7M"], - whirlwind: ["7L1"], - withdraw: ["7L1"], - woodhammer: ["7L1"], + snatch: ["4M"], + snore: ["7T", "4T"], + spite: ["7L1", "4T", "4L1"], + stoneedge: ["7M", "4M"], + strength: ["7M", "4M"], + substitute: ["7M", "7L50", "4M", "4L50"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + taunt: ["7M", "4M"], + tearfullook: ["7L22"], + thief: ["7M", "4M"], + thunderbolt: ["7M"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + uproar: ["7T", "4T"], + vacuumwave: ["4T"], workup: ["7M"], - zenheadbutt: ["7L48", "7S0"], + wrap: ["7L1", "4L1"], }}, - tapufini: {learnset: { - aquaring: ["7L53", "7S0"], - blizzard: ["7M"], - brine: ["7L32"], - calmmind: ["7M"], + syclar: {learnset: { + absorb: ["7L1"], + attract: ["7M", "4M"], + avalanche: ["7L48", "4M"], + blizzard: ["7M", "4M"], + bugbite: ["4T"], + bugbuzz: ["7L43", "4L42"], + captivate: ["4M"], confide: ["7M"], - dazzlinggleam: ["7M"], - defog: ["7L38"], - doubleteam: ["7M"], - echoedvoice: ["7M"], - facade: ["7M"], - fling: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - haze: ["7L1"], - healpulse: ["7L1"], - hiddenpower: ["7M"], - hydropump: ["7L58", "7S0"], - hyperbeam: ["7M"], - icebeam: ["7M"], - lightscreen: ["7M"], - meanlook: ["7L1"], - mist: ["7L1"], - mistyterrain: ["7L1"], - moonblast: ["7L1"], - muddywater: ["7L48", "7S0"], - naturepower: ["7M"], - naturesmadness: ["7L43", "7S0"], - protect: ["7M"], - psychup: ["7M"], - raindance: ["7M"], - reflect: ["7M"], - refresh: ["7L26"], - return: ["7M"], + counter: ["7E", "4T"], + cut: ["4M"], + doubleedge: ["4T"], + doubleteam: ["7M", "4M"], + earthpower: ["7E", "4T", "4E"], + endure: ["4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fellstinger: ["7E"], + fling: ["7M", "4M"], + focusenergy: ["7L10", "4L13"], + frostbreath: ["7M"], + frustration: ["7M", "4M"], + furyattack: ["7L14", "4L1"], + furycutter: ["7L23", "4T"], + hail: ["7M", "7L34", "4M", "4L28"], + hiddenpower: ["7M", "4M"], + honeclaws: ["7M"], + icebeam: ["7M", "4M"], + icepunch: ["7L1"], + iceshard: ["7L5", "4L8"], + iciclecrash: ["7L39"], + icywind: ["7T", "7L19", "4T", "4L18"], + leechlife: ["7M", "4L5"], + leer: ["7L1", "4L1"], + mimic: ["7E", "4T"], + naturalgift: ["4M"], + pinmissile: ["7E", "4E"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], round: ["7M"], - safeguard: ["7M"], - scald: ["7M"], - shadowball: ["7M"], - sleeptalk: ["7M"], - smartstrike: ["7M"], - soak: ["7L20"], - substitute: ["7M"], - surf: ["7M"], - swagger: ["7M"], - taunt: ["7M"], - torment: ["7M"], - toxic: ["7M"], - waterfall: ["7M"], - watergun: ["7L1"], - waterpulse: ["7L8"], - whirlpool: ["7L14"], - withdraw: ["7L1"], - }}, - cosmog: {learnset: { - splash: ["7L1", "7S0"], - teleport: ["7L23"], + secretpower: ["7M", "4M"], + sheercold: ["5L55", "4L49"], + signalbeam: ["7T", "7E"], + silverwind: ["4M"], + slash: ["7L28"], + sleeptalk: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E", "4E"], + strength: ["6M", "5M"], + stringshot: ["4T"], + strugglebug: ["7M"], + substitute: ["7M", "4M"], + superpower: ["7T", "7E", "4T", "4E"], + swagger: ["7M", "4M"], + swordsdance: ["7M", "4M"], + tailglow: ["7E", "4E"], + taunt: ["7M", "4M"], + toxic: ["7M", "4M"], + uturn: ["7M", "4M"], + waterpulse: ["6T", "4M"], + xscissor: ["7M", "7L31", "4M", "4L23"], }}, - cosmoem: {learnset: { - cosmicpower: ["7L1"], - teleport: ["7L1"], + embirch: {learnset: { + amnesia: ["7L37"], + aromatherapy: ["7E", "4E"], + attract: ["7M", "4M"], + block: ["7T", "4T"], + bulletseed: ["7L1", "4M", "4L1"], + counter: ["7E", "4T", "4E"], + doubleedge: ["7L1", "7E", "4T", "4L33"], + doubleteam: ["7M", "4M"], + dragonbreath: ["7E", "4E"], + earthpower: ["7T"], + ember: ["7L5", "4L9"], + endure: ["4M"], + energyball: ["4M"], + facade: ["7M", "4M"], + firespin: ["7E", "4L25"], + flamethrower: ["7M", "4M"], + flamewheel: ["7L19", "4L17"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigadrain: ["7T", "7L32", "4M", "4L21"], + grassknot: ["7M", "4M"], + grasswhistle: ["7E", "4E"], + grassyterrain: ["7E"], + growth: ["7L28", "4L5"], + headbutt: ["4T"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + irondefense: ["7T", "7L37", "4T"], + ironhead: ["7T"], + irontail: ["7T", "4M"], + lavaplume: ["7L41", "4L40"], + leechseed: ["7L10", "4L13"], + lightscreen: ["7M", "4M"], + lowkick: ["4T"], + mimic: ["4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M"], + overheat: ["7M", "4M"], + petalblizzard: ["7E"], + petaldance: ["7L 46", "4L29"], + protect: ["7M", "4M"], + psybeam: ["7E", "4E"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + revenge: ["7E", "4E"], + roar: ["7M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "4M"], + rocksmash: ["4M"], + rocktomb: ["7M", "4M"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandtomb: ["7L23", "7E", "4E"], + secretpower: ["4M"], + seedbomb: ["7T", "4T"], + sleeptalk: ["7M", "4M"], + snore: ["7T", "4T"], + solarbeam: ["7M", "4M"], + stealthrock: ["7T", "4M"], + strength: ["4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + sweetscent: ["7L1", "4L1"], + swordsdance: ["7M", "4M"], + synthesis: ["7T", "7L14", "4T", "4L37"], + toxic: ["7M", "4M"], + watersport: ["7E", "4E"], + willowisp: ["7M", "4M"], + worryseed: ["7T", "4T"], + zapcannon: ["4L44"], }}, - solgaleo: {learnset: { + flarelm: {learnset: { + amnesia: ["7L37"], + ancientpower: ["4T"], + aromatherapy: ["7E", "4E"], + attract: ["7M", "4M"], + block: ["7T", "4T"], bulldoze: ["7M"], - calmmind: ["7M"], + bulletseed: ["7L1", "4M", "4L1"], confide: ["7M"], - cosmicpower: ["7L1", "7S0"], - crunch: ["7L37", "7S0"], - doubleteam: ["7M"], - earthquake: ["7M"], - facade: ["7M"], - fireblast: ["7M"], - flamecharge: ["7M"], - flamethrower: ["7M"], - flareblitz: ["7L61"], - flashcannon: ["7M", "7L23"], - focusblast: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M", "7L73"], - gyroball: ["7M"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - ironhead: ["7L7"], - lightscreen: ["7M"], - metalburst: ["7L43"], - metalclaw: ["7L1"], - metalsound: ["7L13"], - morningsun: ["7L31"], - nobleroar: ["7L59"], - protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], - psyshock: ["7M"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - roar: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], + counter: ["7E", "4T", "4E"], + doubleedge: ["7L1", "7E", "4T"], + doubleteam: ["7M", "4M"], + dragonbreath: ["7E", "4E"], + dragonpulse: ["7T"], + dragontail: ["7M"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + ember: ["7L5", "4L9"], + endure: ["4M"], + energyball: ["4M"], + facade: ["7M", "4M"], + fireblast: ["7M", "4M"], + firespin: ["7E", "4L28"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "4M"], + flamewheel: ["7L19", "4L17"], + flash: ["4M"], + flashcannon: ["7M"], + frustration: ["7M", "4M"], + gigadrain: ["7L32", "4M", "4L21"], + grassknot: ["7M", "4M"], + grasswhistle: ["7E", "4E"], + grassyterrain: ["7E"], + growth: ["7L28", "4L5"], + headbutt: ["4T"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + incinerate: ["7M"], + irondefense: ["7L37", "4T", "4L40"], + ironhead: ["7T"], + irontail: ["7T", "4M"], + lavaplume: ["7L46", "4L48"], + leechseed: ["7L10", "4L13"], + lightscreen: ["7M", "4M"], + lowkick: ["7T", "4T"], + mimic: ["4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M"], + overheat: ["7M", "4M"], + petalblizzard: ["7E"], + petaldance: ["7L50", "4L36"], + protect: ["7M", "4M"], + psybeam: ["7E", "4E"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + revenge: ["7E", "4E"], + roar: ["7M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], round: ["7M"], - safeguard: ["7M"], - sleeptalk: ["7M"], - snarl: ["7M"], - solarbeam: ["7M", "7L47"], - stoneedge: ["7M"], - substitute: ["7M"], - sunnyday: ["7M"], - sunsteelstrike: ["7L1", "7S0"], - swagger: ["7M"], - teleport: ["7L1"], - thunder: ["7M"], - thunderbolt: ["7M"], - thunderwave: ["7M"], - toxic: ["7M"], - trickroom: ["7M"], - wakeupslap: ["7L1"], - wideguard: ["7L67"], + safeguard: ["7M", "4M"], + sandtomb: ["7E", "4E"], + secretpower: ["7M", "4M"], + seedbomb: ["7L23", "4T"], + sleeptalk: ["7M", "4M"], + snore: ["7T", "4T"], + solarbeam: ["7M", "4M"], + stealthrock: ["7T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + sweetscent: ["7L1", "4L1"], + swordsdance: ["7M", "4M"], + synthesis: ["7L14", "4T", "4L44"], + toxic: ["7M", "4M"], + watersport: ["7E", "4E"], wildcharge: ["7M"], - workup: ["7M"], - zenheadbutt: ["7L19", "7S0"], + willowisp: ["7M", "4M"], + worryseed: ["7T", "4T"], + zenheadbutt: ["7T"], + zapcannon: ["4L52"], }}, - lunala: {learnset: { - acrobatics: ["7M"], - aerialace: ["7M"], - airslash: ["7L19"], - blizzard: ["7M"], - calmmind: ["7M"], - chargebeam: ["7M"], + breezi: {learnset: { + acrobatics: ["7M", "7L59"], + aerialace: ["7M", "7L30", "4M", "4L55"], + afteryou: ["7T"], + attract: ["7M", "4M"], + bodyslam: ["4T", "4L30"], + block: ["7T", "4T"], + captivate: ["4M"], confide: ["7M"], - confuseray: ["7L13"], - confusion: ["7L1"], - cosmicpower: ["7L1", "7S0"], - dazzlinggleam: ["7M"], - doubleteam: ["7M"], - dreameater: ["7M", "7L59"], - facade: ["7M"], - fly: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - hiddenpower: ["7M"], - hyperbeam: ["7M", "7L73"], - hypnosis: ["7L1"], - icebeam: ["7M"], - lightscreen: ["7M"], - magiccoat: ["7L43"], - moonblast: ["7L47"], - moongeistbeam: ["7L1", "7S0"], - moonlight: ["7L31"], - nightdaze: ["7L37", "7S0"], - nightshade: ["7L7"], - phantomforce: ["7L61"], - protect: ["7M"], - psychic: ["7M"], - psychup: ["7M"], - psyshock: ["7M"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - roar: ["7M"], - roost: ["7M"], + copycat: ["7L19", "4L19"], + disable: ["7E", "4E"], + doubleedge: ["7E", "4T"], + doubleteam: ["7M", "4M"], + encore: ["7L5", "4L5"], + endure: ["4M"], + entrainment: ["7E"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + followme: ["7E", "4E"], + frustration: ["7M", "4M"], + gastroacid: ["7T", "4T"], + gust: ["7L1", "4L1"], + healblock: ["7L54", "4L50"], + helpinghand: ["7T", "7L1", "4T", "4L1"], + hiddenpower: ["7M", "4M"], + icywind: ["7T", "4T"], + knockoff: ["7L14", "4T", "4L14"], + lightscreen: ["7M", "4M"], + luckychant: ["7L55", "4L59"], + mefirst: ["7E", "4E"], + metronome: ["7E", "4T", "4E"], + mimic: ["7E", "4T", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonjab: ["7M", "4M"], + protect: ["7M", "4M"], + psychup: ["7M", "4M"], + raindance: ["7M", "4M"], + reflect: ["7M", "4M"], + rest: ["7M", "7L44", "4M", "4L44"], + return: ["7M", "4M"], + roleplay: ["7T"], round: ["7M"], - safeguard: ["7M"], - shadowball: ["7M", "7L23", "7S0"], - shadowclaw: ["7M"], - skydrop: ["7M"], - sleeptalk: ["7M"], - solarbeam: ["7M"], - substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M"], - teleport: ["7L1"], - thunder: ["7M"], - thunderbolt: ["7M"], - thunderwave: ["7M"], - toxic: ["7M"], - trickroom: ["7M"], - wideguard: ["7L67"], - willowisp: ["7M"], - workup: ["7M"], + safeguard: ["7M", "7L9", "4M", "4L9"], + sandstorm: ["7M", "4M"], + sandtomb: ["7E", "4E"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + skillswap: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + sludgebomb: ["7M", "7L34", "4M", "4L34"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E", "4E"], + stealthrock: ["7T"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + swift: ["4T"], + tailwind: ["7L1", "4T", "4L1"], + taunt: ["7M"], + thief: ["7M"], + toxic: ["7M", "4M"], + toxicspikes: ["7L39", "4L39"], + trickroom: ["7M", "4M"], + twister: ["4T"], + uturn: ["7M", "4M"], + venoshock: ["7M"], + whirlwind: ["7L25", "4L25"], + wish: ["7E", "4E"], }}, - nihilego: {learnset: { - acid: ["7L1"], - acidspray: ["7L47", "7S0"], - brutalswing: ["7M"], - chargebeam: ["7M"], - clearsmog: ["7L7"], + scratchet: {learnset: { + aerialace: ["7M", "5M"], + attract: ["7M", "5M"], + batonpass: ["7E", "5E"], + brickbreak: ["7M", "7E", "5M"], + bulkup: ["7M", "7L40", "5M", "5L40"], + bulldoze: ["7M", "5M"], confide: ["7M"], - constrict: ["7L1"], - dazzlinggleam: ["7M"], - doubleteam: ["7M"], - echoedvoice: ["7M"], - facade: ["7M"], - frustration: ["7M"], - grassknot: ["7M"], - guardsplit: ["7L1"], - headbutt: ["7L19"], - headsmash: ["7L73"], - hiddenpower: ["7M"], - lightscreen: ["7M"], - mirrorcoat: ["7L43", "7S0"], - poisonjab: ["7M"], - pound: ["7L1"], - powergem: ["7L37", "7S0"], - powersplit: ["7L1"], - protect: ["7M"], - psychic: ["7M"], - psyshock: ["7M"], - psywave: ["7L13"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - round: ["7M"], - safeguard: ["7M", "7L31"], - sandstorm: ["7M"], + confuseray: ["7M", "7E", "5E"], + doubleteam: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + facade: ["7M", "5M"], + falseswipe: ["7M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + focusblast: ["7M", "5M"], + focusenergy: ["7L13", "7E", "5L13", "5E"], + frustration: ["7M", "5M"], + furyswipes: ["7L18", "5L1"], + grassknot: ["7M", "5M"], + harden: ["7L4", "5L9"], + haze: ["7E", "5E"], + helpinghand: ["7T"], + hiddenpower: ["7M", "5M"], + hypervoice: ["7L36", "5L36"], + irontail: ["7T"], + memento: ["7E", "5E"], + naturepower: ["7M", "7E", "5E"], + poweruppunch: ["6L99"], + protect: ["7M", "5M"], + quash: ["7M", "5M"], + raindance: ["7M", "5M"], + rapidspin: ["7E", "5E"], + rest: ["7M", "7L53", "5M", "5L53"], + retaliate: ["7L57", "6M", "5M", "5L57"], + return: ["7M", "5M"], + roar: ["7M", "7L23", "5M", "5L23"], + rockslide: ["7M", "5M"], + rocksmash: ["7T", "7L9", "6M", "5M", "5L18"], + rocktomb: ["7M", "5M"], + roost: ["7M", "7E", "5E"], + round: ["7M", "5M"], + safeguard: ["7M", "5M"], + scratch: ["7L1"], + secretpower: ["7M"], + snore: ["7T"], + stealthrock: ["7T", "7E", "5E"], + strength: ["6M", "5M"], + submission: ["7L32", "5L32"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "5M"], + superpower: ["7L45", "5L45"], + swagger: ["7M", "5M"], + taunt: ["7M", "7L49", "5M", "5L49"], + thief: ["7M", "5M"], + toxic: ["7M", "5M"], + workup: ["7M", "7L27", "5M", "5L27"], + yawn: ["7E", "5E"], + }}, + necturine: {learnset: { + attract: ["7M", "5M"], + calmmind: ["7M", "5M"], + confide: ["7M"], + curse: ["7E", "5E"], + cut: ["7M", "5M"], + darkpulse: ["7M"], + doubleteam: ["7M", "5M"], + dreameater: ["7M", "5M"], + energyball: ["7M", "5M"], + facade: ["7M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "5M"], + futuresight: ["7E", "5E"], + gigadrain: ["7E", "6T", "5E"], + grassknot: ["7M", "5M"], + grassyterrain: ["7L22"], + gravity: ["7E", "6T", "5E"], + hex: ["7L18", "5L25"], + hiddenpower: ["7M", "5M"], + ingrain: ["7E", "5E"], + leafblade: ["7E", "5E"], + leafstorm: ["7E", "5E"], + leechlife: ["7M"], + leechseed: ["7L8"], + leer: ["7L1", "5L1"], + magicalleaf: ["7L11"], + naturalgift: ["7E", "5L31", "5E"], + naturepower: ["7M"], + nightmare: ["7E", "5E"], + nightshade: ["7L26"], + ominouswind: ["7E", "5L7"], + painsplit: ["7L34", "6T", "5L37"], + payback: ["7M", "5M"], + phantomforce: ["7L56"], + powerwhip: ["7L50", "5L50"], + protect: ["7M", "5M"], + psychic: ["7M", "5M"], + psychup: ["7M", "5M"], + rest: ["7M", "5M"], + return: ["7M", "5M"], + round: ["7M", "5M"], + secretpower: ["7M"], + seedbomb: ["7T", "7L39"], + shadowball: ["7M", "7L43", "5M", "5L44"], + shadowsneak: ["7L4", "5L13"], + sketch: ["7E", "5E"], sleeptalk: ["7M"], - sludgebomb: ["7M"], - sludgewave: ["7M"], - stealthrock: ["7L59"], - substitute: ["7M"], - swagger: ["7M"], - thunder: ["7M"], - thunderbolt: ["7M"], - thunderwave: ["7M"], - tickle: ["7L1"], - toxic: ["7M"], - toxicspikes: ["7L29"], - trickroom: ["7M"], - venomdrench: ["7L53", "7S0"], - venoshock: ["7M", "7L23"], - wonderroom: ["7L67"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spite: ["7T"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "5M"], + swagger: ["7M", "5M"], + telekinesis: ["6M", "5M"], + thief: ["7M", "5M"], + torment: ["7M", "5M"], + toxic: ["7M", "5M"], + toxicspikes: ["7L23", "5L19"], + vinewhip: ["7L1", "5L1"], + willowisp: ["7M", "7L15", "5M", "5L19"], + worryseed: ["7T"], }}, - buzzwole: {learnset: { - brickbreak: ["7M"], - bulkup: ["7M", "7L13"], - bulldoze: ["7M"], - cometpunch: ["7L7"], + cupra: {learnset: { + allyswitch: ["5M"], + ancientpower: ["7L44", "5L44"], + attract: ["7M", "5M"], + bugbite: ["7T", "7L7", "5T", "5L7"], + bugbuzz: ["7E", "5E"], + closecombat: ["7E", "5E"], confide: ["7M"], - counter: ["7L43", "7S0"], - doubleteam: ["7M"], - dynamicpunch: ["7L59", "7S0"], - earthquake: ["7M"], - endure: ["7L23"], - facade: ["7M"], - falseswipe: ["7M"], - fellstinger: ["7L1"], - fling: ["7M"], - focusenergy: ["7L1"], - focuspunch: ["7L73"], - frustration: ["7M"], - gigaimpact: ["7M"], - gyroball: ["7M"], - hammerarm: ["7L47", "7S0"], - harden: ["7L1"], - hiddenpower: ["7M"], - icepunch: ["7L1"], - leechlife: ["7M", "7L29"], - lowsweep: ["7M"], - lunge: ["7L53", "7S0"], - megapunch: ["7L37"], - payback: ["7M"], - poisonjab: ["7M"], - poweruppunch: ["7L1"], - protect: ["7M"], - rest: ["7M"], - return: ["7M"], - reversal: ["7L1"], - rockslide: ["7M"], - rocktomb: ["7M"], - roost: ["7M"], - round: ["7M"], + counter: ["7E", "5E"], + cut: ["6M", "5M"], + disable: ["7E", "5E"], + doubleteam: ["7M", "5M"], + dreameater: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + electroweb: ["7T", "5T"], + facade: ["7M", "5M"], + feint: ["7E", "5E"], + finalgambit: ["7L38", "5L38"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + frustration: ["7M", "5M"], + hail: ["7M", "5M"], + healpulse: ["7L21", "5L21"], + helpinghand: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + hydropump: ["7E", "5E"], + icywind: ["7T", "5T"], + infestation: ["7M"], + lightscreen: ["7M", "5M"], + magiccoat: ["7T", "5T"], + magicroom: ["7T", "5T"], + megahorn: ["7E", "5E"], + protect: ["7M", "5M"], + psychic: ["7M", "5M"], + psychup: ["7M", "5M"], + psyshock: ["7M", "5M"], + raindance: ["7M", "5M"], + recycle: ["7T", "5T"], + reflect: ["7M", "5M"], + rest: ["7M", "5M"], + retaliate: ["5M"], + return: ["7M", "5M"], + roleplay: ["7T", "5T"], + round: ["7M", "5M"], + safeguard: ["7M", "7E", "5M", "5E"], + secretpower: ["7M"], + shadowball: ["7M", "5M"], + shockwave: ["7M"], + signalbeam: ["7T"], + skillswap: ["7T", "5T"], sleeptalk: ["7M"], - smackdown: ["7M"], - stoneedge: ["7M"], - substitute: ["7M"], - superpower: ["7L67"], - swagger: ["7M"], - taunt: ["7M", "7L31"], - thunderpunch: ["7L1"], - toxic: ["7M"], - vitalthrow: ["7L19"], - workup: ["7M"], + snore: ["7T"], + steelwing: ["7M"], + stringshot: ["7L1", "5L1"], + strugglebug: ["7L27", "5M"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "7L14", "5M", "5L14"], + swagger: ["7M", "5M"], + tackle: ["7L1", "5L1"], + tailglow: ["7L60"], + telekinesis: ["5M"], + toxic: ["7M", "5M"], + trick: ["7T", "5T"], + waterpulse: ["7T"], + willowisp: ["7M", "7L32", "5M", "5L32"], + wingattack: ["7E", "5E"], + wish: ["7L48", "5L48"], + wonderroom: ["7T", "5T"], + xscissor: ["7M", "5M"], + zenheadbutt: ["7T", "5L54", "5T", "5L54"], }}, - pheromosa: {learnset: { - agility: ["7L37"], - blizzard: ["7M"], - bounce: ["7L29"], - brickbreak: ["7M"], - bugbuzz: ["7L53", "7S0"], + argalis: {learnset: { + allyswitch: ["5M"], + ancientpower: ["7L47", "5L47"], + attract: ["7M", "5M"], + bugbite: ["7T", "7L7", "5T", "5L7"], + bugbuzz: ["7E", "5E"], + closecombat: ["7E", "5E"], confide: ["7M"], - doublekick: ["7L1"], - doubleteam: ["7M"], - echoedvoice: ["7M"], - facade: ["7M"], - falseswipe: ["7M"], - feint: ["7L19"], - fling: ["7M"], - focusblast: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - hiddenpower: ["7M"], - highjumpkick: ["7L67"], - hyperbeam: ["7M"], - icebeam: ["7M"], - jumpkick: ["7L31"], - leer: ["7L1"], - lowkick: ["7L1"], - lowsweep: ["7M"], - lunge: ["7L47", "7S0"], - mefirst: ["7L59", "7S0"], - poisonjab: ["7M"], - protect: ["7M"], - quickguard: ["7L1"], - quiverdance: ["7L1"], - rapidspin: ["7L1"], - rest: ["7M"], - return: ["7M"], - roost: ["7M"], - round: ["7M"], - silverwind: ["7L23"], + counter: ["7E", "5E"], + cut: ["6M", "5M"], + disable: ["7E", "5E"], + doubleteam: ["7M", "5M"], + dreameater: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + electroweb: ["7T", "5T"], + facade: ["7M", "5M"], + feint: ["7E", "5E"], + finalgambit: ["7L41", "5L41"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + focusblast: ["7M", "5M"], + frustration: ["7M", "5M"], + hail: ["7M", "5M"], + healpulse: ["7L21", "5L21"], + helpinghand: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + hydropump: ["7E", "5E"], + icebeam: ["7M", "5M"], + icywind: ["7T", "5T"], + infestation: ["7M"], + lightscreen: ["7M", "7L57", "5M"], + magiccoat: ["7T", "5T"], + magicroom: ["7T", "5T"], + megahorn: ["7E", "5E"], + ominouswind: ["7L27", "5L27"], + protect: ["7M", "5M"], + psychic: ["7M", "7L62", "5M"], + psychup: ["7M", "5M"], + psyshock: ["7M", "5M"], + raindance: ["7M", "5M"], + recycle: ["7T", "5T"], + reflect: ["7M", "7L57", "5M"], + rest: ["7M", "5M"], + retaliate: ["5M"], + return: ["7M", "5M"], + roleplay: ["7T", "5T"], + round: ["7M", "5M"], + safeguard: ["7M", "7E", "5M", "5E"], + secretpower: ["7M"], + shadowball: ["7M", "5M"], + shockwave: ["7M"], + signalbeam: ["7T"], + skillswap: ["7T", "5T"], sleeptalk: ["7M"], - speedswap: ["7L73"], - stomp: ["7L13"], - substitute: ["7M"], - swagger: ["7M"], - swift: ["7L7"], - taunt: ["7M"], - torment: ["7M"], - toxic: ["7M"], - triplekick: ["7L43", "7S0"], - uturn: ["7M"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spotlight: ["7L1"], + steelwing: ["7M"], + stringshot: ["7L1", "5L1"], + strugglebug: ["5M"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "7L14", "5M", "5L14"], + surf: ["7M", "5M"], + swagger: ["7M", "5M"], + tackle: ["7L1", "5L1"], + tailglow: ["7L65"], + telekinesis: ["5M"], + thunderbolt: ["7M", "5M"], + toxic: ["7M", "5M"], + trick: ["7T", "5T"], + waterpulse: ["7T"], + willowisp: ["7M", "7L34", "5M", "5L34"], + wingattack: ["7E", "5E"], + wish: ["7L54", "5L54"], + wonderroom: ["7T", "5T"], + xscissor: ["7M", "5M"], + zenheadbutt: ["7T", "5T"], }}, - xurkitree: {learnset: { + brattler: {learnset: { + aromatherapy: ["7E", "5E"], + attract: ["7M", "5M"], + beatup: ["7E", "5E"], + bind: ["7T", "5T"], brutalswing: ["7M"], - calmmind: ["7M"], - charge: ["7L1"], - chargebeam: ["7M"], confide: ["7M"], - dazzlinggleam: ["7M"], - discharge: ["7L47", "7S0"], - doubleteam: ["7M"], - eerieimpulse: ["7L29"], - electricterrain: ["7L53", "7S0"], - energyball: ["7M"], - facade: ["7M"], - fling: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - hypnosis: ["7L43", "7S0"], - ingrain: ["7L19"], - iondeluge: ["7L67"], - lightscreen: ["7M"], + crunch: ["7L43", "5L39"], + cut: ["6M", "5M"], + darkpulse: ["7M", "5T"], + doubleteam: ["7M", "5M"], + dragontail: ["7M", "5M"], + energyball: ["7M", "5M"], + facade: ["7M", "5M"], + feint: ["7E"], + foulplay: ["7T", "5T"], + frustration: ["7M", "5M"], + gigadrain: ["7T", "5T"], + glare: ["7L1", "7L31", "7E", "5E"], + grassknot: ["7M", "7L15", "5M", "5L18"], + haze: ["7E", "5E"], + healbell: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + icefang: ["7E"], + irontail: ["7T", "5T"], + knockoff: ["7T", "5T"], + leafblade: ["7L26", "5L34"], + leer: ["7L1"], naturepower: ["7M"], - powerwhip: ["7L59", "7S0"], - protect: ["7M"], - raindance: ["7M"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - round: ["7M"], - shockwave: ["7L13"], - signalbeam: ["7L31"], - sleeptalk: ["7M"], - solarbeam: ["7M"], - spark: ["7L1"], - substitute: ["7M"], - sunnyday: ["7M"], - swagger: ["7M"], - tailglow: ["7L1"], - thunder: ["7M"], - thunderbolt: ["7M", "7L37"], - thunderpunch: ["7L23"], - thundershock: ["7L1"], - thunderwave: ["7M", "7L7"], - toxic: ["7M"], - voltswitch: ["7M"], - wildcharge: ["7M"], - wrap: ["7L1"], - zapcannon: ["7L73"], + nightslash: ["7E", "5E"], + payback: ["7M", "5M"], + poisonpowder: ["7E", "5E"], + powerwhip: ["7L44", "5L50"], + protect: ["7M", "5M"], + punishment: ["7L55", "5L55"], + pursuit: ["7L8", "5L6", "5L1"], + recycle: ["7T"], + rest: ["7M", "5M"], + retaliate: ["7M", "5M"], + return: ["7M", "5M"], + roar: ["7M", "5M"], + round: ["7M", "5M"], + scaryface: ["7L11", "7E", "5E"], + screech: ["7E", "5E"], + secretpower: ["7M"], + seedbomb: ["7T", "5T"], + slam: ["7L22", "5L30"], + sleeptalk: ["7M", "5T"], + snarl: ["7M", "5M"], + snore: ["7T", "5T"], + solarbeam: ["7M", "5M"], + spikyshield: ["7L40"], + spite: ["7T", "5T"], + strength: ["6M", "5M"], + stunspore: ["7E", "5E"], + substitute: ["7M", "5M"], + suckerpunch: ["7L18", "5L25"], + sunnyday: ["7M", "5M"], + swagger: ["7M", "5M"], + sweetscent: ["7E", "5E"], + synthesis: ["7T", "5T"], + taunt: ["7M", "5M"], + thief: ["7M", "5M"], + thunderfang: ["7E"], + toxic: ["7M", "5M"], + uturn: ["7M", "5M"], + vinewhip: ["7L5", "5L1"], + wildcharge: ["7M", "5M"], + worryseed: ["7T", "5T"], + wrap: ["7L1", "5L1"], + wringout: ["7L49", "5L44"], }}, - celesteela: {learnset: { - absorb: ["7L1"], - acrobatics: ["7M"], - airslash: ["7L1"], - autotomize: ["7L43", "7S0"], - brutalswing: ["7M"], - bulldoze: ["7M"], - confide: ["7M"], - doubleedge: ["7L73"], - doubleteam: ["7M"], - earthquake: ["7M"], - energyball: ["7M"], - explosion: ["7M"], - facade: ["7M"], - fireblast: ["7M"], - flamecharge: ["7M"], - flamethrower: ["7M"], - flashcannon: ["7M", "7L37"], - fly: ["7M"], - frustration: ["7M"], - gigadrain: ["7L31"], - gigaimpact: ["7M"], - grassknot: ["7M"], - gyroball: ["7M"], - harden: ["7L1"], - heavyslam: ["7L67"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - ingrain: ["7L1"], - irondefense: ["7L59", "7S0"], - ironhead: ["7L29"], - leechseed: ["7L19"], - megadrain: ["7L13"], - metalsound: ["7L23"], - protect: ["7M"], - rest: ["7M"], - return: ["7M"], - rockslide: ["7M"], - round: ["7M"], - seedbomb: ["7L47", "7S0"], - skullbash: ["7L53", "7S0"], - sleeptalk: ["7M"], - smackdown: ["7M", "7L7"], - smartstrike: ["7M"], - solarbeam: ["7M"], - stoneedge: ["7M"], - substitute: ["7M"], - swagger: ["7M"], - tackle: ["7L1"], - toxic: ["7M"], - wideguard: ["7L1"], + cawdet: {learnset: { + acrobatics: ["5M"], + aerialace: ["5M"], + airslash: ["5E"], + attract: ["5M"], + bellydrum: ["5L34"], + block: ["5T"], + brickbreak: ["5M"], + brine: ["5L42"], + bulletpunch: ["5L38"], + detect: ["5L26"], + doubleteam: ["5M"], + drainpunch: ["5T"], + drillpeck: ["5E"], + endeavor: ["5T"], + facade: ["5M"], + flashcannon: ["5M", "5L49"], + fly: ["5M"], + frustration: ["5M"], + growl: ["5L5"], + hiddenpower: ["5M"], + hurricane: ["5L53"], + ironhead: ["5T"], + knockoff: ["5T"], + leer: ["5L0"], + metalclaw: ["5L13"], + metalsound: ["5E"], + mirrormove: ["5E"], + peck: ["5L0"], + pluck: ["5M"], + protect: ["5M"], + psychup: ["5M"], + pursuit: ["5E"], + quickattack: ["5E"], + quickguard: ["5E"], + raindance: ["5M"], + razorwind: ["5E"], + rest: ["5M"], + retaliate: ["5M"], + return: ["5M"], + rocksmash: ["5M"], + round: ["5M"], + screech: ["5L18"], + skyattack: ["5T"], + skydrop: ["5M"], + sleeptalk: ["5T"], + smackdown: ["5M"], + snatch: ["5T"], + snore: ["5T"], + steelwing: ["5L31"], + strength: ["5M"], + substitute: ["5M"], + surf: ["5M"], + swagger: ["5M"], + swift: ["5L9"], + tailwind: ["5T", "5L45"], + toxic: ["5M"], + watersport: ["5E"], + wingattack: ["5L22"], }}, - kartana: {learnset: { - aerialace: ["7M", "7L23"], - aircutter: ["7L1"], - airslash: ["7L59", "7S0"], - brickbreak: ["7M"], - calmmind: ["7M"], - confide: ["7M"], - cut: ["7L1"], - defog: ["7L1"], - detect: ["7L53", "7S0"], - doubleteam: ["7M"], - falseswipe: ["7M", "7L7"], - frustration: ["7M"], - furycutter: ["7L1"], - gigaimpact: ["7M"], - guillotine: ["7L73"], - hiddenpower: ["7M"], - laserfocus: ["7L29"], - leafblade: ["7L43", "7S0"], - nightslash: ["7L31"], - protect: ["7M"], - psychocut: ["7L67"], - razorleaf: ["7L13"], - rest: ["7M"], - return: ["7M"], + volkritter: {learnset: { + aquaring: ["6L44"], + assurance: ["6E"], + attract: ["6M"], + bite: ["6L1"], + captivate: ["6E"], + confide: ["6M"], + constrict: ["6L1"], + destinybond: ["6L32"], + dive: ["6L36"], + doubleteam: ["6M"], + facade: ["6M"], + falseswipe: ["6M"], + fireblast: ["6M"], + firespin: ["6L18"], + flameburst: ["6L23"], + flamethrower: ["6M"], + flash: ["6M", "6L1"], + flashcannon: ["6M"], + fling: ["6M"], + frustration: ["6M"], + heatwave: ["6L48"], + hiddenpower: ["6M"], + hydropump: ["6L51"], + incinerate: ["6M"], + leechlife: ["6L1"], + memento: ["6L59"], + overheat: ["6M"], + payback: ["6M"], + powergem: ["6L39"], + protect: ["6M"], + quash: ["6M"], + raindance: ["6M"], + reflect: ["6M", "6L4"], + rest: ["6M"], + return: ["6M"], + round: ["6M"], + scald: ["6M", "6L28"], + scaryface: ["6E"], + sleeptalk: ["6M"], + substitute: ["6M"], + sunnyday: ["6M"], + surf: ["6M"], + swagger: ["6M"], + thief: ["6M"], + tickle: ["6E"], + torment: ["6M"], + toxic: ["6M"], + uturn: ["6M"], + waterfall: ["6M"], + watergun: ["6L1"], + waterpulse: ["6E"], + whirlpool: ["6L14"], + willowisp: ["6M"], + }}, + snugglow: {learnset: { + acid: ["6L12"], + aquatail: ["6L32"], + attract: ["6M"], + clearsmog: ["6L22"], + confide: ["6M"], + cut: ["6M"], + dazzlinggleam: ["6M"], + discharge: ["6L42"], + doubleteam: ["6M"], + eerieimpulse: ["6L49"], + encore: ["6L16"], + facade: ["6M"], + flashcannon: ["6M"], + frustration: ["6M"], + haze: ["6E"], + hiddenpower: ["6M"], + iondeluge: ["6L26"], + paraboliccharge: ["6L36"], + poisonsting: ["6L6"], + poisontail: ["6L29"], + protect: ["6M"], + psychic: ["6M"], + psyshock: ["6M"], + psywave: ["6L39"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + round: ["6M"], + shockwave: ["6E"], + signalbeam: ["6E"], + sleeptalk: ["6M"], + sludgebomb: ["6M"], + sludgewave: ["6M"], + splash: ["6E"], + substitute: ["6M"], + supersonic: ["6L1"], + swagger: ["6M"], + taunt: ["6M"], + thunder: ["6M", "6L46"], + thunderbolt: ["6M"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L19"], + toxic: ["6M"], + venoshock: ["6M"], + waterpulse: ["6E"], + wideguard: ["6E"], + wildcharge: ["6M"], + }}, + floatoy: {learnset: { + attract: ["6M"], + bite: ["6E"], + blizzard: ["6M"], + brine: ["6L38"], + bubblebeam: ["6L23"], + calmmind: ["6M"], + confide: ["6M"], + dive: ["6M"], + doubleteam: ["6M"], + dragonbreath: ["6L1"], + dragonclaw: ["6M"], + dragondance: ["6E"], + dragonpulse: ["6T"], + drillpeck: ["6L27"], + echoedvoice: ["6M"], + facade: ["6M"], + featherdance: ["6E"], + feint: ["6E"], + frustration: ["6M"], + gust: ["6L1"], + hail: ["6M"], + haze: ["6E"], + hiddenpower: ["6M"], + hydropump: ["6L50"], + icebeam: ["6M"], + icefang: ["6E"], + icepunch: ["6T"], + iciclecrash: ["6L42"], + iciclespear: ["6E"], + icywind: ["6T"], + ironhead: ["6T", "6L53"], + irontail: ["6T", "6E"], + metalclaw: ["6L11"], + metronome: ["6E"], + peck: ["6L1"], + protect: ["6M"], + raindance: ["6M"], + refresh: ["6E"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + scald: ["6M"], + scaryface: ["6L1"], + secretpower: ["6M"], + slackoff: ["6L39"], + sleeptalk: ["6M"], + snore: ["6T"], + splash: ["6L1"], + substitute: ["6M"], + surf: ["6M"], + swagger: ["6M"], + taunt: ["6M"], + thunderfang: ["6E"], + toxic: ["6M"], + waterfall: ["6M"], + watergun: ["6L7"], + waterpulse: ["6T", "6E"], + whirlpool: ["6E"], + wideguard: ["6E"], + }}, + caimanoe: {learnset: { + attract: ["6M"], + bite: ["6E"], + blizzard: ["6M"], + brine: ["6L43"], + bubblebeam: ["6L25"], + calmmind: ["6M"], + confide: ["6M"], + dive: ["6M"], + doubleteam: ["6M"], + dragonbreath: ["6L1"], + dragonclaw: ["6M"], + dragondance: ["6E"], + dragonpulse: ["6T"], + drillpeck: ["6L31"], + echoedvoice: ["6M"], + facade: ["6M"], + featherdance: ["6E"], + feint: ["6E"], + flashcannon: ["6M", "6L35"], + frustration: ["6M"], + gust: ["6L1"], + hail: ["6M"], + haze: ["6E"], + hiddenpower: ["6M"], + hydropump: ["6L60"], + icebeam: ["6M"], + icefang: ["6E"], + icepunch: ["6T"], + iciclecrash: ["6L47"], + iciclespear: ["6E"], + icywind: ["6T"], + irondefense: ["6T"], + ironhead: ["6T", "6L58"], + irontail: ["6T", "6E"], + metalclaw: ["6L11"], + metalsound: ["6L21"], + metronome: ["6E"], + peck: ["6L1"], + protect: ["6M"], + raindance: ["6M"], + refresh: ["6E"], + rest: ["6M"], + retaliate: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + scald: ["6M"], + scaryface: ["6L1"], + secretpower: ["6M"], + selfdestruct: ["6L62"], + slackoff: ["6L39"], + sleeptalk: ["6M"], + snore: ["6T"], + splash: ["6L1"], + strength: ["6M"], + substitute: ["6M"], + surf: ["6M"], + swagger: ["6M"], + taunt: ["6M"], + thunderfang: ["6E"], + thunderpunch: ["6T"], + toxic: ["6M"], + waterfall: ["6M"], + watergun: ["6L7"], + waterpulse: ["6T", "6E"], + whirlpool: ["6E"], + wideguard: ["6E"], + }}, + pluffle: {learnset: { + attract: ["6M"], + charm: ["6E"], + confide: ["6L25"], + dazzlinggleam: ["6M"], + doubleteam: ["6M"], + drainingkiss: ["6L13"], + dreameater: ["6M", "6L42"], + encore: ["6L16", "6E"], + energyball: ["6M"], + facade: ["6M"], + fairywind: ["6L5", "6L1"], + featherdance: ["6L1"], + flashcannon: ["6M"], + frustration: ["6M"], + gigadrain: ["6T"], + grassknot: ["6M"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + moonblast: ["6L36"], + nightmare: ["6L42"], + partingshot: ["6L24"], + playrough: ["6L27"], + protect: ["6M"], + psychup: ["6M"], + quickguard: ["6E"], + rest: ["6M", "6L31"], + retaliate: ["6M"], + return: ["6M"], + round: ["6M"], + scaryface: ["6L20"], + scratch: ["6L1"], + sleeptalk: ["6M"], + sludgebomb: ["6M"], + sludgewave: ["6M"], + snarl: ["6M"], + snore: ["6T"], + substitute: ["6M"], + sunnyday: ["6M"], + swagger: ["6M"], + taunt: ["6M"], + torment: ["6M"], + toxic: ["6M"], + wakeupslap: ["6L10"], + wideguard: ["6E"], + wish: ["6E"], + yawn: ["6L7"], + }}, + rebble: {learnset: { + accelerock: ["7L21"], + acupressure: ["7L26", "4L20"], + aerialace: ["7M", "4M"], + ancientpower: ["7L30", "4T"], + bulldoze: ["7M"], + calmmind: ["7M", "4M"], + confide: ["7M"], + cut: ["4M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1", "4L1"], + disable: ["7L17", "4L17"], + doubleedge: ["7L41", "4L41"], + doubleteam: ["7M", "4M"], + earthpower: ["7L45", "7T", "4T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + energyball: ["7M", "4M"], + explosion: ["7M", "4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fireblast: ["7M", "4M"], + flamethrower: ["7M", "4M"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigadrain: ["7T", "4M"], + headbutt: ["4T"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + incinerate: ["7M"], + lockon: ["7L65"], + metalsound: ["7L50", "4L37"], + mudshot: ["7L34", "4L25"], + mudslap: ["7L8", "4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + powergem: ["7L38", "4L29"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + rockblast: ["7L13", "4L15"], + rockpolish: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + rollout: ["7L4", "4T", "4L1"], round: ["7M"], - sacredsword: ["7L1"], - sleeptalk: ["7M"], - smartstrike: ["7M"], - substitute: ["7M"], + sandstorm: ["7M", "4M"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + smackdown: ["7M"], + snore: ["7T", "4T"], + stealthrock: ["7T", "4M"], + stoneedge: ["7M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], swagger: ["7M"], - swordsdance: ["7M", "7L37"], - synthesis: ["7L19"], - toxic: ["7M"], - vacuumwave: ["7L1"], - xscissor: ["7M", "7L47", "7S0"], + swift: ["4T"], + tackle: ["7L1", "4L1"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + vacuumwave: ["7L60", "4T"], + zenheadbutt: ["7T"], }}, - guzzlord: {learnset: { - belch: ["7L1"], - bite: ["7L1"], - brickbreak: ["7M"], - brutalswing: ["7M", "7L13"], + tactite: {learnset: { + accelerock: ["7L21"], + acupressure: ["7L26", "4L20"], + aerialace: ["7M", "4M"], + ancientpower: ["7L30", "4T"], bulldoze: ["7M"], - crunch: ["7L37"], - darkpulse: ["7M"], - doubleteam: ["7M"], - dracometeor: ["7T"], - dragonclaw: ["7M"], - dragonrage: ["7L1"], - dragonrush: ["7L73"], - dragontail: ["7M", "7L23"], - earthquake: ["7M"], - facade: ["7M"], - fireblast: ["7M"], - flamethrower: ["7M"], - fling: ["7M"], - frustration: ["7M"], - gastroacid: ["7L53", "7S0"], - gigaimpact: ["7M"], - gyroball: ["7M"], - hammerarm: ["7L43"], - heavyslam: ["7L59", "7S0"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - irontail: ["7L29"], - payback: ["7M"], - poisonjab: ["7M"], - protect: ["7M"], - rest: ["7M"], - return: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], + calmmind: ["7M", "4M"], + confide: ["7M"], + cut: ["4M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1", "4L1"], + disable: ["7L17", "4L17"], + doubleedge: ["7L43", "4L43"], + doubleteam: ["7M", "4M"], + earthpower: ["7L47", "7T", "4T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + energyball: ["7M", "4M"], + explosion: ["7M", "4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fireblast: ["7M", "4M"], + flamethrower: ["7M", "4M"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigadrain: ["7T", "4M"], + gigaimpact: ["4M"], + headsmash: ["4L67"], + headbutt: ["4T"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + incinerate: ["7M"], + lockon: ["7L63"], + metalsound: ["7L51", "4L51"], + mudshot: ["7L34", "4L25"], + mudslap: ["7L8", "4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + powergem: ["7L39", "4L29"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + rockblast: ["7L13", "4L15"], + rockpolish: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + rollout: ["7L4", "4T", "4L1"], round: ["7M"], - shadowclaw: ["7M"], - sleeptalk: ["7M"], - sludgebomb: ["7M"], - sludgewave: ["7M"], + sandstorm: ["7M", "4M"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + sleeptalk: ["7M", "4M"], smackdown: ["7M"], - snarl: ["7M"], - steamroller: ["7L19"], - stockpile: ["7L1"], - stomp: ["7L7"], - stompingtantrum: ["7L31"], - stoneedge: ["7M"], - substitute: ["7M"], - swallow: ["7L1"], - thief: ["7M"], - thrash: ["7L47", "7S0"], - toxic: ["7M"], - wideguard: ["7L1"], - wringout: ["7L67", "7S0"], + snore: ["7T", "4T"], + speedswap: ["7L55"], + stealthrock: ["7T", "4M"], + stoneedge: ["7M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M"], + swift: ["4T"], + tackle: ["7L1", "4L1"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + vacuumwave: ["7L60", "4T"], + zenheadbutt: ["7T"], }}, - necrozma: {learnset: { - aerialace: ["7M"], - autotomize: ["7L47"], - brickbreak: ["7M"], - brutalswing: ["7M"], + privatyke: {learnset: { + aquajet: ["7L19", "4L27"], + armthrust: ["7L14", "4L21"], + attract: ["7M", "4M"], + blizzard: ["7M", "4M"], + brickbreak: ["7M", "4M"], + brine: ["4M"], + bubble: ["7L1", "4L1"], + bulkup: ["7M", "7E", "4E"], bulldoze: ["7M"], - calmmind: ["7M"], - chargebeam: ["7M", "7L1"], + captivate: ["4M"], + chipaway: ["7L30"], + closecombat: ["7E"], confide: ["7M"], - confusion: ["7L1"], - darkpulse: ["7M"], - doubleteam: ["7M"], - earthquake: ["7M"], - embargo: ["7M"], - facade: ["7M"], - flashcannon: ["7M"], - fling: ["7M"], - frustration: ["7M"], - gigaimpact: ["7M"], - gravity: ["7L31"], - gyroball: ["7M"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - irondefense: ["7L59", "7S0"], - lightscreen: ["7M"], - metalclaw: ["7L1"], - mirrorshot: ["7L1"], - moonlight: ["7L1"], - morningsun: ["7L1"], - nightslash: ["7L23"], - powergem: ["7L43"], - prismaticlaser: ["7L73", "7S0"], - protect: ["7M"], - psychic: ["7M"], - psychocut: ["7L37"], - psyshock: ["7M"], - reflect: ["7M"], - rest: ["7M"], - return: ["7M"], - rockblast: ["7L19"], - rockpolish: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], + crosschop: ["7M", "4E"], + cut: ["4M"], + dive: ["4T"], + doubleteam: ["7M", "4M"], + drainpunch: ["4M"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + focuspunch: ["7L59", "4M", "4L67"], + foulplay: ["7T"], + frustration: ["7M", "4M"], + gunkshot: ["7T", "4T"], + hail: ["7M", "4M"], + headbutt: ["7E", "4T", "4E"], + hiddenpower: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + icywind: ["7T", "4T"], + knockoff: ["7T", "4T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + machpunch: ["7L35", "4L32"], + mudslap: ["4T"], + naturalgift: ["4M"], + octazooka: ["7E", "4E"], + poisonjab: ["7M"], + poweruppunch: ["7M"], + protect: ["7M", "4M"], + punishment: ["7L55", "4L60"], + raindance: ["7M", "4M"], + recover: ["7E", "4E"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L42", "4L41"], + roar: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["4M"], + rocktomb: ["7M", "4M"], round: ["7M"], - shadowclaw: ["7M"], - slash: ["7L7"], - sleeptalk: ["7M"], - smartstrike: ["7M"], - solarbeam: ["7M"], - stealthrock: ["7L53", "7S0"], - stoneedge: ["7M"], - storedpower: ["7L13"], - substitute: ["7M"], - swagger: ["7M"], - swordsdance: ["7M"], - thief: ["7M"], - thunderwave: ["7M"], - toxic: ["7M"], - trickroom: ["7M"], - wringout: ["7L67", "7S0"], - xscissor: ["7M"], + scald: ["7M", "7L38"], + scaryface: ["7E", "4E"], + secretpower: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + sludgebomb: ["7M", "4M"], + smokescreen: ["7L7", "4L7"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E"], + strength: ["4M"], + submission: ["7L48", "4L55"], + substitute: ["7M", "4M"], + superpower: ["7T", "4T"], + surf: ["7M", "4M"], + swagger: ["7M", "4M"], + taunt: ["7M", "7L24", "4M", "4L36"], + thief: ["7M", "7L45", "4M", "4L47"], + thunderpunch: ["7T", "4T"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + vacuumwave: ["4T"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + whirlpool: ["4M"], + wideguard: ["7L52"], + workup: ["7M"], + wrap: ["7L1", "4L1"], + yawn: ["7L10", "4L1"], }}, - magearna: {learnset: { - aurasphere: ["7L81"], - aurorabeam: ["7L17"], - brickbreak: ["7M"], - calmmind: ["7M"], - chargebeam: ["7M"], + voodoll: {learnset: { + acupressure: ["7L36", "4L40"], + afteryou: ["7T"], + astonish: ["7L1", "4L1"], + attract: ["7M", "4M"], + aurasphere: ["7L45", "4L45"], + batonpass: ["7E", "4E"], + captivate: ["4M"], + charge: ["7L19", "4L19"], confide: ["7M"], - craftyshield: ["7L1"], - dazzlinggleam: ["7M"], - defensecurl: ["7L1"], + copycat: ["7L1", "4L1"], + counter: ["7E", "4T"], + darkpulse: ["7M", "4M"], doubleteam: ["7M"], - echoedvoice: ["7M"], - embargo: ["7M"], - energyball: ["7M"], - explosion: ["7M"], - falseswipe: ["7M"], - flashcannon: ["7M", "7L41", "7S0"], - fleurcannon: ["7L49", "7S0"], - focusblast: ["7M"], - frustration: ["7M"], - gearup: ["7L1"], - gigaimpact: ["7M"], - grassknot: ["7M"], - gyroball: ["7M"], - heartswap: ["7L89"], - helpinghand: ["7L1", "7S0"], - hiddenpower: ["7M"], - hyperbeam: ["7M"], - icebeam: ["7M"], - irondefense: ["7L57"], - ironhead: ["7L1"], - lightscreen: ["7M"], - luckychant: ["7L9", "7S0"], - mindreader: ["7L33"], - mirrorshot: ["7L25"], - painsplit: ["7L65"], - protect: ["7M"], - psybeam: ["7L1"], - reflect: ["7M"], - return: ["7M"], + dreameater: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + feintattack: ["7L30", "4L30"], + fling: ["7M", "4M"], + followme: ["7L20", "4L20"], + foulplay: ["7L54"], + frustration: ["7M", "4M"], + grudge: ["7L15", "4L15"], + hex: ["7L43"], + hiddenpower: ["7M", "4M"], + hypervoice: ["7T"], + imprison: ["7E", "4E"], + knockoff: ["7T", "4T"], + machpunch: ["7E", "4E"], + magiccoat: ["7T", "4T"], + magicroom: ["7T"], + memento: ["7E", "4E"], + metronome: ["7E", "4T"], + mimic: ["4T"], + mudslap: ["4T"], + nastyplot: ["7E"], + naturalgift: ["4M"], + nightmare: ["7E", "4T"], + painsplit: ["7L7", "4T", "4L7"], + payback: ["7M", "4M"], + perishsong: ["7E", "4E"], + pinmissile: ["7L25", "4L25"], + powertrip: ["7E"], + poweruppunch: ["7M"], + protect: ["7M", "4M"], + psychic: ["7M", "4M"], + pursuit: ["7E", "4E"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + rocksmash: ["7M", "4M"], round: ["7M"], - shadowball: ["7M"], - shiftgear: ["7L1"], - solarbeam: ["7M"], - sonicboom: ["7L1"], - substitute: ["7M"], - swagger: ["7M"], - synchronoise: ["7L73"], + screech: ["7E", "4E"], + secretpower: ["7M", "4M"], + shockwave: ["7T", "4M"], + sleeptalk: ["7M", "4M"], + smellingsalts: ["7E", "4E"], + snarl: ["7M"], + snatch: ["4M"], + snore: ["7T", "4T"], + spite: ["7L11", "4T", "4L11"], + strength: ["7M", "4M"], + substitute: ["7M", "7L50", "4M", "4L50"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + taunt: ["7M", "4M"], + tearfullook: ["7L22"], + thief: ["7M", "4M"], thunderbolt: ["7M"], - thunderwave: ["7M"], - trickroom: ["7M"], - trumpcard: ["7L97"], - voltswitch: ["7M"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + uproar: ["7T", "4T"], + vacuumwave: ["4T"], + workup: ["7M"], + wrap: ["7L1", "4L1"], }}, - magearnaoriginal: {learnset: { - aurasphere: ["7L81"], - aurorabeam: ["7L17"], - brickbreak: ["7M"], - calmmind: ["7M"], - chargebeam: ["7M"], + mumbao: {learnset: { + attract: ["7M"], + bodyslam: ["7L28"], confide: ["7M"], - craftyshield: ["7L1"], dazzlinggleam: ["7M"], - defensecurl: ["7L1"], doubleteam: ["7M"], - echoedvoice: ["7M"], - embargo: ["7M"], - energyball: ["7M"], - explosion: ["7M"], - falseswipe: ["7M"], - flashcannon: ["7M", "7L41"], - fleurcannon: ["7L49"], + energyball: ["7M", "7L37"], + facade: ["7M"], + flowershield: ["7L1"], focusblast: ["7M"], frustration: ["7M"], - gearup: ["7L1"], - gigaimpact: ["7M"], + gigadrain: ["7T"], grassknot: ["7M"], + grassyterrain: ["7E"], + gravity: ["7T"], gyroball: ["7M"], - heartswap: ["7L89"], - helpinghand: ["7L1"], + healingwish: ["7E"], + helpinghand: ["7T", "7L35"], hiddenpower: ["7M"], hyperbeam: ["7M"], - icebeam: ["7M"], - irondefense: ["7L57"], - ironhead: ["7L1"], + ingrain: ["7L10"], + leafstorm: ["7L46"], + leafage: ["7L13"], lightscreen: ["7M"], - luckychant: ["7L9"], - mindreader: ["7L33"], - mirrorshot: ["7L25"], - painsplit: ["7L65"], - protect: ["7M"], - psybeam: ["7L1"], - reflect: ["7M"], - return: ["7M"], - round: ["7M"], - shadowball: ["7M"], - shiftgear: ["7L1"], - solarbeam: ["7M"], - sonicboom: ["7L1"], - substitute: ["7M"], - swagger: ["7M"], - synchronoise: ["7L73"], - thunderbolt: ["7M"], - thunderwave: ["7M"], - trickroom: ["7M"], - trumpcard: ["7L97"], - voltswitch: ["7M"], - }}, - marshadow: {learnset: { - acrobatics: ["7M"], - assurance: ["7L1"], - brickbreak: ["7M"], - bulkup: ["7M"], - calmmind: ["7M"], - closecombat: ["7L50", "7S0"], - confide: ["7M"], - copycat: ["7L20"], - counter: ["7L1"], - doubleteam: ["7M"], - drainpunch: ["7L1"], - echoedvoice: ["7M"], - endeavor: ["7L60"], - facade: ["7M"], - falseswipe: ["7M"], - feint: ["7L11"], - firepunch: ["7L1"], - fling: ["7M"], - focusblast: ["7M"], - forcepalm: ["7L5", "7S0"], - frustration: ["7M"], - gigaimpact: ["7M"], - grassknot: ["7M"], - hiddenpower: ["7M"], - icepunch: ["7L1"], - jumpkick: ["7L35"], - laserfocus: ["7L1"], - lowsweep: ["7M"], - payback: ["7M"], - poisonjab: ["7M"], + luckychant: ["7L17"], + magiccoat: ["7T"], + magicalleaf: ["7L19"], + mistyterrain: ["7E"], + moonblast: ["7L44"], + naturalgift: ["7L31"], protect: ["7M"], - psychup: ["7M", "7L41"], - pursuit: ["7L1"], + psychup: ["7M", "7L26"], rest: ["7M"], return: ["7M"], - rockslide: ["7M"], - rocktomb: ["7M"], - roleplay: ["7L30"], - rollingkick: ["7L15"], + rototiller: ["7L8"], round: ["7M"], - shadowball: ["7M", "7S0"], - shadowclaw: ["7M"], - shadowpunch: ["7L26"], - shadowsneak: ["7L1"], + safeguard: ["7M"], + sandstorm: ["7M"], + seedbomb: ["7T"], + shadowball: ["7M"], sleeptalk: ["7M"], - smackdown: ["7M"], - spectralthief: ["7L45", "7S0"], - stoneedge: ["7M"], + snore: ["7T"], + solarbeam: ["7M"], substitute: ["7M"], - suckerpunch: ["7L56"], + sunnyday: ["7M", "7L40"], swagger: ["7M"], - thief: ["7M"], - thunderpunch: ["7L1"], + synthesis: ["7T"], + tackle: ["7L4"], toxic: ["7M"], - willowisp: ["7M"], - workup: ["7M"], + wish: ["7L22"], + worryseed: ["7T"], }}, }; + +exports.BattleLearnsets = BattleLearnsets; diff --git a/mods/gen1/README.md b/data/mods/gen1/README.md similarity index 94% rename from mods/gen1/README.md rename to data/mods/gen1/README.md index 39ec3bcce5389..eef4eb323f5f7 100644 --- a/mods/gen1/README.md +++ b/data/mods/gen1/README.md @@ -12,8 +12,8 @@ a similar fashion, Pokes used to have 30 IVs on each stat. The following sources have been used and extremly useful when developing this mod: https://raw.github.com/po-devs/pokemon-online/master/bin/database/rby-stuff.txt -http://www.smogon.com/rb/articles/differences -http://www.smogon.com/forums/threads/past-gens-research-thread.3506992/#post-5878612 +https://www.smogon.com/rb/articles/differences +https://www.smogon.com/forums/threads/past-gens-research-thread.3506992/#post-5878612 Special Stat ------------ diff --git a/mods/gen1/formats-data.js b/data/mods/gen1/formats-data.js similarity index 96% rename from mods/gen1/formats-data.js rename to data/mods/gen1/formats-data.js index dca3e940549c3..d796d3848c7e9 100644 --- a/mods/gen1/formats-data.js +++ b/data/mods/gen1/formats-data.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: TemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { randomBattleMoves: ["sleeppowder", "bodyslam"], essentialMove: "razorleaf", @@ -53,11 +54,11 @@ exports.BattleFormatsData = { tier: "UU", }, caterpie: { - randomBattleMoves:["stringshot", "tackle"], + randomBattleMoves: ["stringshot", "tackle"], tier: "LC", }, metapod: { - randomBattleMoves:["stringshot", "tackle", "harden"], + randomBattleMoves: ["stringshot", "tackle", "harden"], tier: "NFE", }, butterfree: { @@ -112,7 +113,7 @@ exports.BattleFormatsData = { fearow: { randomBattleMoves: ["drillpeck", "doubleedge", "hyperbeam", "agility"], eventPokemon: [ - {"generation": 1, "level": 20, "moves":["growl", "leer", "furyattack", "payday"]}, + {"generation": 1, "level": 20, "moves": ["growl", "leer", "furyattack", "payday"]}, ], tier: "UU", }, @@ -130,9 +131,9 @@ exports.BattleFormatsData = { essentialMove: "thunderbolt", exclusiveMoves: ["bodyslam", "thunder", "agility", "seismictoss"], eventPokemon: [ - {"generation": 1, "level": 5, "moves":["surf"]}, - {"generation": 1, "level": 5, "moves":["fly"]}, - {"generation": 1, "level": 5, "moves":["thundershock", "growl", "surf"]}, + {"generation": 1, "level": 5, "moves": ["surf"]}, + {"generation": 1, "level": 5, "moves": ["fly"]}, + {"generation": 1, "level": 5, "moves": ["thundershock", "growl", "surf"]}, ], tier: "LC", }, @@ -289,7 +290,7 @@ exports.BattleFormatsData = { essentialMove: "surf", exclusiveMoves: ["bodyslam", "seismictoss", "rest", "hydropump"], eventPokemon: [ - {"generation": 1, "level": 15, "moves":["scratch", "amnesia"]}, + {"generation": 1, "level": 15, "moves": ["scratch", "amnesia"]}, ], tier: "LC", }, @@ -414,7 +415,7 @@ exports.BattleFormatsData = { rapidash: { randomBattleMoves: ["fireblast", "agility", "bodyslam", "hyperbeam"], eventPokemon: [ - {"generation": 1, "level": 40, "moves":["ember", "firespin", "stomp", "payday"]}, + {"generation": 1, "level": 40, "moves": ["ember", "firespin", "stomp", "payday"]}, ], tier: "UU", }, @@ -671,7 +672,7 @@ exports.BattleFormatsData = { magikarp: { randomBattleMoves: ["tackle", "dragonrage"], eventPokemon: [ - {"generation": 1, "level": 5, "moves":["dragonrage"]}, + {"generation": 1, "level": 5, "moves": ["dragonrage"]}, ], tier: "LC", }, @@ -792,9 +793,11 @@ exports.BattleFormatsData = { exclusiveMoves: ["softboiled", "softboiled", "explosion"], comboMoves: ["swordsdance", "earthquake", "hyperbeam"], eventPokemon: [ - {"generation": 1, "level": 5, "moves":["pound"]}, + {"generation": 1, "level": 5, "moves": ["pound"]}, ], eventOnly: true, tier: "Uber", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/mods/gen1/moves.js b/data/mods/gen1/moves.js new file mode 100644 index 0000000000000..14faf97ca66b6 --- /dev/null +++ b/data/mods/gen1/moves.js @@ -0,0 +1,1088 @@ +/** + * A lot of Gen 1 moves have to be updated due to different mechanics. + * Some moves have had major changes, such as Bite's typing. + */ + +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + absorb: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If this move breaks the target's substitute, the user does not recover any HP.", + }, + acid: { + inherit: true, + desc: "Has a 33% chance to lower the target's Defense by 1 stage.", + shortDesc: "33% chance to lower the target's Defense by 1.", + secondary: { + chance: 33, + boosts: { + def: -1, + }, + }, + target: "normal", + }, + amnesia: { + inherit: true, + desc: "Raises the user's Special by 2 stages.", + shortDesc: "Raises the user's Special by 2.", + boosts: { + spd: 2, + spa: 2, + }, + }, + aurorabeam: { + inherit: true, + desc: "Has a 33% chance to lower the target's Attack by 1 stage.", + shortDesc: "33% chance to lower the target's Attack by 1.", + secondary: { + chance: 33, + boosts: { + atk: -1, + }, + }, + }, + barrage: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + bide: { + inherit: true, + desc: "The user spends two or three turns locked into this move and then, on the second or third turn after using this move, the user attacks the opponent, inflicting double the damage in HP it lost during those turns. This move ignores type immunity and cannot be avoided even if the target is using Dig or Fly. The user can choose to switch out during the effect. If the user switches out or is prevented from moving during this move's use, the effect ends. During the effect, if the opposing Pokemon switches out or uses Confuse Ray, Conversion, Focus Energy, Glare, Haze, Leech Seed, Light Screen, Mimic, Mist, Poison Gas, Poison Powder, Recover, Reflect, Rest, Soft-Boiled, Splash, Stun Spore, Substitute, Supersonic, Teleport, Thunder Wave, Toxic, or Transform, the previous damage dealt to the user will be added to the total.", + priority: 0, + accuracy: true, + ignoreEvasion: true, + effect: { + duration: 2, + durationCallback(target, source, effect) { + return this.random(3, 4); + }, + onStart(pokemon) { + this.effectData.totalDamage = 0; + this.effectData.lastDamage = 0; + this.add('-start', pokemon, 'Bide'); + }, + onHit(target, source, move) { + if (source && source !== target && move.category !== 'Physical' && move.category !== 'Special') { + let damage = this.effectData.totalDamage; + this.effectData.totalDamage += damage; + this.effectData.lastDamage = damage; + this.effectData.sourcePosition = source.position; + this.effectData.sourceSide = source.side; + } + }, + onDamage(damage, target, source, move) { + if (!source || source.side === target.side) return; + if (!move || move.effectType !== 'Move') return; + if (!damage && this.effectData.lastDamage > 0) { + damage = this.effectData.totalDamage; + } + this.effectData.totalDamage += damage; + this.effectData.lastDamage = damage; + this.effectData.sourcePosition = source.position; + this.effectData.sourceSide = source.side; + }, + onAfterSetStatus(status, pokemon) { + // Sleep, freeze, and partial trap will just pause duration. + if (pokemon.volatiles['flinch']) { + this.effectData.duration++; + } else if (pokemon.volatiles['partiallytrapped']) { + this.effectData.duration++; + } else { + switch (status.id) { + case 'slp': + case 'frz': + this.effectData.duration++; + break; + } + } + }, + onBeforeMove(pokemon, target, move) { + if (this.effectData.duration === 1) { + if (!this.effectData.totalDamage) { + this.add('-fail', pokemon); + return false; + } + this.add('-end', pokemon, 'Bide'); + let target = this.effectData.sourceSide.active[this.effectData.sourcePosition]; + this.moveHit(target, pokemon, move, /** @type {ActiveMove} */ ({damage: this.effectData.totalDamage * 2})); + return false; + } + this.add('-activate', pokemon, 'Bide'); + return false; + }, + onDisableMove(pokemon) { + if (!pokemon.hasMove('bide')) { + return; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== 'bide') { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + type: "???", // Will look as Normal but it's STAB-less + }, + bind: { + inherit: true, + desc: "The user spends two to five turns using this move. Has a 3/8 chance to last two or three turns, and a 1/8 chance to last four or five turns. The damage calculated for the first turn is used for every other turn. The user cannot select a move and the target cannot execute a move during the effect, but both may switch out. If the user switches out, the target remains unable to execute a move during that turn. If the target switches out, the user uses this move again automatically, and if it had 0 PP at the time, it becomes 63. If the user or the target switch out, or the user is prevented from moving, the effect ends. This move can prevent the target from moving even if it has type immunity, but will not deal damage.", + shortDesc: "Prevents the target from moving for 2-5 turns.", + ignoreImmunity: true, + volatileStatus: 'partiallytrapped', + self: { + volatileStatus: 'partialtrappinglock', + }, + onBeforeMove(pokemon, target, move) { + // Removes must recharge volatile even if it misses + target.removeVolatile('mustrecharge'); + }, + onHit(target, source) { + /** + * The duration of the partially trapped must be always renewed to 2 + * so target doesn't move on trapper switch out as happens in gen 1. + * However, this won't happen if there's no switch and the trapper is + * about to end its partial trapping. + **/ + if (target.volatiles['partiallytrapped']) { + if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { + target.volatiles['partiallytrapped'].duration = 2; + } + } + }, + }, + bite: { + inherit: true, + desc: "Has a 10% chance to flinch the target.", + shortDesc: "10% chance to flinch the target.", + secondary: { + chance: 10, + volatileStatus: 'flinch', + }, + type: "Normal", + }, + blizzard: { + inherit: true, + accuracy: 90, + target: "normal", + }, + bonemerang: { + inherit: true, + desc: "Hits twice. If the first hit breaks the target's substitute, the move ends.", + }, + bubble: { + inherit: true, + desc: "Has a 33% chance to lower the target's Speed by 1 stage.", + shortDesc: "33% chance to lower the target's Speed by 1.", + secondary: { + chance: 33, + boosts: { + spe: -1, + }, + }, + target: "normal", + }, + bubblebeam: { + inherit: true, + desc: "Has a 33% chance to lower the target's Speed by 1 stage.", + shortDesc: "33% chance to lower the target's Speed by 1.", + secondary: { + chance: 33, + boosts: { + spe: -1, + }, + }, + }, + clamp: { + inherit: true, + desc: "The user spends two to five turns using this move. Has a 3/8 chance to last two or three turns, and a 1/8 chance to last four or five turns. The damage calculated for the first turn is used for every other turn. The user cannot select a move and the target cannot execute a move during the effect, but both may switch out. If the user switches out, the target remains unable to execute a move during that turn. If the target switches out, the user uses this move again automatically, and if it had 0 PP at the time, it becomes 63. If the user or the target switch out, or the user is prevented from moving, the effect ends. This move can prevent the target from moving even if it has type immunity, but will not deal damage.", + shortDesc: "Prevents the target from moving for 2-5 turns.", + accuracy: 75, + pp: 10, + volatileStatus: 'partiallytrapped', + self: { + volatileStatus: 'partialtrappinglock', + }, + onBeforeMove(pokemon, target, move) { + // Removes must recharge volatile even if it misses + target.removeVolatile('mustrecharge'); + }, + onHit(target, source) { + /** + * The duration of the partially trapped must be always renewed to 2 + * so target doesn't move on trapper switch out as happens in gen 1. + * However, this won't happen if there's no switch and the trapper is + * about to end its partial trapping. + **/ + if (target.volatiles['partiallytrapped']) { + if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { + target.volatiles['partiallytrapped'].duration = 2; + } + } + }, + }, + cometpunch: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + constrict: { + inherit: true, + desc: "Has a 33% chance to lower the target's Speed by 1 stage.", + shortDesc: "33% chance to lower the target's Speed by 1.", + secondary: { + chance: 33, + boosts: { + spe: -1, + }, + }, + }, + conversion: { + inherit: true, + desc: "Causes the user's types to become the same as the current types of the target.", + shortDesc: "User becomes the same type as the target.", + volatileStatus: 'conversion', + accuracy: true, + target: "normal", + onHit(target, source) { + source.types = target.types; + this.add('-start', source, 'typechange', source.types.join(', '), '[from] move: Conversion', '[of] ' + source); + }, + }, + counter: { + inherit: true, + desc: "Deals damage to the opposing Pokemon equal to twice the damage dealt by the last move used in the battle. This move ignores type immunity. Fails if the user moves first, or if the opposing side's last move was Counter, had 0 power, or was not Normal or Fighting type. Fails if the last move used by either side did 0 damage and was not Confuse Ray, Conversion, Focus Energy, Glare, Haze, Leech Seed, Light Screen, Mimic, Mist, Poison Gas, Poison Powder, Recover, Reflect, Rest, Soft-Boiled, Splash, Stun Spore, Substitute, Supersonic, Teleport, Thunder Wave, Toxic, or Transform.", + ignoreImmunity: true, + willCrit: false, + damageCallback(pokemon, target) { + // Counter mechanics on gen 1 might be hard to understand. + // It will fail if the last move selected by the opponent has base power 0 or is not Normal or Fighting Type. + // If both are true, counter will deal twice the last damage dealt in battle, no matter what was the move. + // That means that, if opponent switches, counter will use last counter damage * 2. + let lastUsedMove = target.side.lastMove && this.getMove(target.side.lastMove.id); + if (lastUsedMove && lastUsedMove.basePower > 0 && ['Normal', 'Fighting'].includes(lastUsedMove.type) && this.lastDamage > 0 && !this.willMove(target)) { + return 2 * this.lastDamage; + } + this.add('-fail', pokemon); + return false; + }, + }, + crabhammer: { + inherit: true, + critRatio: 2, + }, + defensecurl: { + inherit: true, + desc: "Raises the user's Defense by 1 stage.", + }, + dig: { + inherit: 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 Bide, Swift, and Transform. If the user is fully paralyzed on the second turn, it continues avoiding attacks until it switches out or successfully executes the second turn of this move or Fly.", + basePower: 100, + effect: { + duration: 2, + onLockMove: 'dig', + onTryImmunity(target, source, move) { + if (move.id === 'swift') return true; + this.add('-message', 'The foe ' + target.name + ' can\'t be hit underground!'); + return null; + }, + onDamage(damage, target, source, move) { + if (!move || move.effectType !== 'Move') return; + if (!source) return; + if (move.id === 'earthquake') { + this.add('-message', 'The foe ' + target.name + ' can\'t be hit underground!'); + return null; + } + }, + }, + }, + disable: { + inherit: true, + desc: "For 0 to 7 turns, one of the target's known moves that has at least 1 PP remaining becomes disabled, at random. Fails if one of the target's moves is already disabled, or if none of the target's moves have PP remaining. If any Pokemon uses Haze, this effect ends. Whether or not this move was successful, it counts as a hit for the purposes of the opponent's use of Rage.", + shortDesc: "For 0-7 turns, disables one of the target's moves.", + effect: { + duration: 4, + durationCallback(target, source, effect) { + let duration = this.random(1, 7); + return duration; + }, + onStart(pokemon) { + if (!this.willMove(pokemon)) { + this.effectData.duration++; + } + let moves = pokemon.moves; + let move = this.getMove(this.sample(moves)); + this.add('-start', pokemon, 'Disable', move.name); + this.effectData.move = move.id; + return; + }, + onResidualOrder: 14, + onEnd(pokemon) { + this.add('-end', pokemon, 'Disable'); + }, + onBeforeMove(attacker, defender, move) { + if (move.id === this.effectData.move) { + this.add('cant', attacker, 'Disable', move); + return false; + } + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + dizzypunch: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + secondary: null, + }, + doubleedge: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not take any recoil damage.", + basePower: 100, + }, + doublekick: { + inherit: true, + desc: "Hits twice. Damage is calculated once for the first hit and used for both hits. If the first hit breaks the target's substitute, the move ends.", + }, + doubleslap: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + dragonrage: { + inherit: true, + basePower: 1, + }, + dreameater: { + inherit: true, + desc: "The target is unaffected by this move unless it is asleep. The user recovers 1/2 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not recover any HP.", + }, + earthquake: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + }, + explosion: { + inherit: true, + desc: "The user faints after using this move, unless this move broke the target's substitute. The target's Defense is halved during damage calculation.", + basePower: 170, + target: "normal", + }, + fireblast: { + inherit: true, + desc: "Has a 30% chance to burn the target.", + shortDesc: "30% chance to burn the target.", + secondary: { + chance: 30, + status: 'brn', + }, + }, + firespin: { + inherit: true, + desc: "The user spends two to five turns using this move. Has a 3/8 chance to last two or three turns, and a 1/8 chance to last four or five turns. The damage calculated for the first turn is used for every other turn. The user cannot select a move and the target cannot execute a move during the effect, but both may switch out. If the user switches out, the target remains unable to execute a move during that turn. If the target switches out, the user uses this move again automatically, and if it had 0 PP at the time, it becomes 63. If the user or the target switch out, or the user is prevented from moving, the effect ends. This move can prevent the target from moving even if it has type immunity, but will not deal damage.", + shortDesc: "Prevents the target from moving for 2-5 turns.", + accuracy: 70, + basePower: 15, + volatileStatus: 'partiallytrapped', + self: { + volatileStatus: 'partialtrappinglock', + }, + onBeforeMove(pokemon, target, move) { + // Removes must recharge volatile even if it misses + target.removeVolatile('mustrecharge'); + }, + onHit(target, source) { + /** + * The duration of the partially trapped must be always renewed to 2 + * so target doesn't move on trapper switch out as happens in gen 1. + * However, this won't happen if there's no switch and the trapper is + * about to end its partial trapping. + **/ + if (target.volatiles['partiallytrapped']) { + if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { + target.volatiles['partiallytrapped'].duration = 2; + } + } + }, + }, + fissure: { + inherit: true, + desc: "Deals 65535 damage to the target. Fails if the target's Speed is greater than the user's.", + shortDesc: "Deals 65535 damage. Fails if target is faster.", + }, + fly: { + inherit: 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 Bide, Swift, and Transform. If the user is fully paralyzed on the second turn, it continues avoiding attacks until it switches out or successfully executes the second turn of this move or Dig.", + effect: { + duration: 2, + onLockMove: 'fly', + onTryImmunity(target, source, move) { + if (move.id === 'swift') return true; + this.add('-message', 'The foe ' + target.name + ' can\'t be hit while flying!'); + return null; + }, + onDamage(damage, target, source, move) { + if (!move || move.effectType !== 'Move') return; + if (!source || source.side === target.side) return; + if (move.id === 'gust' || move.id === 'thunder') { + this.add('-message', 'The foe ' + target.name + ' can\'t be hit while flying!'); + return null; + } + }, + }, + }, + focusenergy: { + inherit: true, + desc: "While the user remains active, its chance for a critical hit is quartered. Fails if the user already has the effect. If any Pokemon uses Haze, this effect ends.", + shortDesc: "Quarters the user's chance for a critical hit.", + effect: { + onStart(pokemon) { + this.add('-start', pokemon, 'move: Focus Energy'); + }, + // This does nothing as it's dealt with on critical hit calculation. + onModifyMove() {}, + }, + }, + furyattack: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + furyswipes: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + glare: { + inherit: true, + desc: "Paralyzes the target.", + ignoreImmunity: true, + }, + growth: { + inherit: true, + desc: "Raises the user's Special by 1 stage.", + shortDesc: "Raises the user's Special by 1.", + boosts: { + spa: 1, + spd: 1, + }, + }, + guillotine: { + inherit: true, + desc: "Deals 65535 damage to the target. Fails if the target's Speed is greater than the user's.", + shortDesc: "Deals 65535 damage. Fails if target is faster.", + }, + gust: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + type: "Normal", + }, + haze: { + inherit: true, + desc: "Resets the stat stages of both Pokemon to 0 and removes stat reductions due to burn and paralysis. Resets Toxic counters to 0 and removes the effect of confusion, Disable, Focus Energy, Leech Seed, Light Screen, Mist, and Reflect from both Pokemon. Removes the opponent's major status condition.", + shortDesc: "Resets all stat changes. Removes foe's status.", + onHit(target, source) { + this.add('-clearallboost'); + for (const side of this.sides) { + for (const pokemon of side.active) { + pokemon.clearBoosts(); + + if (pokemon !== source) { + // Clears the status from the opponent + pokemon.setStatus(''); + } + if (pokemon.status === 'tox') { + pokemon.setStatus('psn'); + } + for (const id of Object.keys(pokemon.volatiles)) { + if (id === 'residualdmg') { + pokemon.volatiles[id].counter = 0; + } else { + pokemon.removeVolatile(id); + this.add('-end', pokemon, id); + } + } + } + } + }, + target: "self", + }, + highjumpkick: { + inherit: true, + desc: "If this attack misses the target, the user takes 1 HP of crash damage. If the user has a substitute, the crash damage is dealt to the target's substitute if it has one, otherwise no crash damage is dealt.", + shortDesc: "User takes 1 HP of damage if it misses.", + onMoveFail(target, source, move) { + if (!target.types.includes('Ghost')) { + this.directDamage(1, source); + } + }, + }, + horndrill: { + inherit: true, + desc: "Deals 65535 damage to the target. Fails if the target's Speed is greater than the user's.", + shortDesc: "Deals 65535 damage. Fails if target is faster.", + }, + hyperbeam: { + inherit: true, + desc: "If this move is successful, the user must recharge on the following turn and cannot select a move, unless the target or its substitute was knocked out by this move.", + shortDesc: "Can't move next turn if target or sub is not KOed.", + }, + jumpkick: { + inherit: true, + desc: "If this attack misses the target, the user takes 1 HP of crash damage. If the user has a substitute, the crash damage is dealt to the target's substitute if it has one, otherwise no crash damage is dealt.", + shortDesc: "User takes 1 HP of damage if it misses.", + onMoveFail(target, source, move) { + this.damage(1, source); + }, + }, + karatechop: { + inherit: true, + critRatio: 2, + type: "Normal", + }, + leechseed: { + inherit: true, + desc: "At the end of each of the target's turns, The Pokemon at the user's position steals 1/16 of the target's maximum HP, rounded down and multiplied by the target's current Toxic counter if it has one, even if the target currently has less than that amount of HP remaining. If the target switches out or any Pokemon uses Haze, this effect ends. Grass-type Pokemon are immune to this move.", + onHit() {}, + effect: { + onStart(target) { + this.add('-start', target, 'move: Leech Seed'); + }, + onAfterMoveSelfPriority: 1, + onAfterMoveSelf(pokemon) { + let leecher = pokemon.side.foe.active[pokemon.volatiles['leechseed'].sourcePosition]; + if (!leecher || leecher.fainted || leecher.hp <= 0) { + this.debug('Nothing to leech into'); + return; + } + // We check if leeched Pokémon has Toxic to increase leeched damage. + let toxicCounter = 1; + if (pokemon.volatiles['residualdmg']) { + pokemon.volatiles['residualdmg'].counter++; + toxicCounter = pokemon.volatiles['residualdmg'].counter; + } + let toLeech = this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1) * toxicCounter; + let damage = this.damage(toLeech, pokemon, leecher); + if (damage) this.heal(damage, leecher, pokemon); + }, + }, + }, + lightscreen: { + num: 113, + accuracy: true, + basePower: 0, + category: "Status", + desc: "While the user remains active, its Special is doubled when taking damage. Critical hits ignore this effect. If any Pokemon uses Haze, this effect ends.", + shortDesc: "While active, user's Special is 2x when damaged.", + id: "lightscreen", + isViable: true, + name: "Light Screen", + pp: 30, + priority: 0, + flags: {}, + volatileStatus: 'lightscreen', + onTryHit(pokemon) { + if (pokemon.volatiles['lightscreen']) { + return false; + } + }, + effect: { + onStart(pokemon) { + this.add('-start', pokemon, 'Light Screen'); + }, + }, + target: "self", + type: "Psychic", + }, + metronome: { + inherit: true, + desc: "A random move is selected for use, other than Metronome or Struggle.", + noMetronome: ['metronome', 'struggle'], + secondary: null, + target: "self", + type: "Normal", + }, + mimic: { + inherit: true, + desc: "While the user remains active, this move is replaced by a random move known by the target, even if the user already knows that move. The copied move keeps the remaining PP for this move, regardless of the copied move's maximum PP. Whenever one PP is used for a copied move, one PP is used for this move.", + shortDesc: "Random move known by the target replaces this.", + onHit(target, source) { + let moveslot = source.moves.indexOf('mimic'); + if (moveslot < 0) return false; + let moves = target.moves; + let moveid = this.sample(moves); + if (!moveid) return false; + let move = this.getMove(moveid); + source.moveSlots[moveslot] = { + move: move.name, + id: move.id, + pp: source.moveSlots[moveslot].pp, + maxpp: move.pp * 8 / 5, + target: move.target, + disabled: false, + used: false, + virtual: true, + }; + this.add('-start', source, 'Mimic', move.name); + }, + }, + minimize: { + inherit: true, + desc: "Raises the user's evasiveness by 1 stage.", + }, + mirrormove: { + inherit: true, + desc: "The user uses the last move used by the target. Fails if the target has not made a move, or if the last move used was Mirror Move.", + onHit(pokemon) { + let foe = pokemon.side.foe.active[0]; + if (!foe || !foe.lastMove || foe.lastMove.id === 'mirrormove') { + return false; + } + this.useMove(foe.lastMove.id, pokemon); + }, + }, + mist: { + inherit: true, + desc: "While the user remains active, it is protected from having its stat stages lowered by other Pokemon, unless caused by the secondary effect of a move. Fails if the user already has the effect. If any Pokemon uses Haze, this effect ends.", + }, + nightshade: { + inherit: true, + desc: "Deals damage to the target equal to the user's level. This move ignores type immunity.", + shortDesc: "Damage = user's level. Can hit Normal types.", + ignoreImmunity: true, + basePower: 1, + }, + petaldance: { + inherit: true, + desc: "Whether or not this move is successful, the user spends three or four turns locked into this move and becomes confused immediately after its move on the last turn of the effect, even if it is already confused. If the user is prevented from moving, the effect ends without causing confusion. During the effect, this move's accuracy is overwritten every turn with the current calculated accuracy including stat stage changes, but not to less than 1/256 or more than 255/256.", + shortDesc: "Lasts 3-4 turns. Confuses the user afterwards.", + }, + pinmissile: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + poisonsting: { + inherit: true, + desc: "Has a 20% chance to poison the target.", + shortDesc: "20% chance to poison the target.", + secondary: { + chance: 20, + status: 'psn', + }, + }, + psychic: { + inherit: true, + desc: "Has a 33% chance to lower the target's Special by 1 stage.", + shortDesc: "33% chance to lower the target's Special by 1.", + secondary: { + chance: 33, + boosts: { + spd: -1, + spa: -1, + }, + }, + }, + psywave: { + inherit: true, + basePower: 1, + }, + rage: { + inherit: true, + desc: "Once this move is successfully used, the user automatically uses this move every turn and can no longer switch out. During the effect, the user's Attack is raised by 1 stage every time it is hit by the opposing Pokemon, and this move's accuracy is overwritten every turn with the current calculated accuracy including stat stage changes, but not to less than 1/256 or more than 255/256.", + shortDesc: "Lasts forever. Raises user's Attack by 1 when hit.", + self: { + volatileStatus: 'rage', + }, + effect: { + // Rage lock + duration: 255, + onStart(target, source, effect) { + this.effectData.move = 'rage'; + }, + onLockMove: 'rage', + onTryHit(target, source, move) { + if (target.boosts.atk < 6 && move.id === 'disable') { + this.boost({atk: 1}); + } + }, + onHit(target, source, move) { + if (target.boosts.atk < 6 && move.category !== 'Status') { + this.boost({atk: 1}); + } + }, + }, + }, + razorleaf: { + inherit: true, + critRatio: 2, + target: "normal", + }, + razorwind: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second.", + shortDesc: "Charges turn 1. Hits turn 2.", + critRatio: 1, + target: "normal", + }, + recover: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down. Fails if (user's maximum HP - user's current HP + 1) is divisible by 256.", + heal: null, + onHit(target) { + // Fail when health is 255 or 511 less than max + if (target.hp === (target.maxhp - 255) || target.hp === (target.maxhp - 511) || target.hp === target.maxhp) { + return false; + } + this.heal(Math.floor(target.maxhp / 2), target, target); + }, + }, + reflect: { + num: 115, + accuracy: true, + basePower: 0, + category: "Status", + desc: "While the user remains active, its Defense is doubled when taking damage. Critical hits ignore this protection. This effect can be removed by Haze.", + shortDesc: "While active, the user's Defense is doubled.", + id: "reflect", + isViable: true, + name: "Reflect", + pp: 20, + priority: 0, + flags: {}, + volatileStatus: 'reflect', + onTryHit(pokemon) { + if (pokemon.volatiles['reflect']) { + return false; + } + }, + effect: { + onStart(pokemon) { + this.add('-start', pokemon, 'Reflect'); + }, + }, + secondary: null, + target: "self", + type: "Psychic", + }, + rest: { + inherit: true, + desc: "The user falls asleep for the next two turns and restores all of its HP, curing itself of any major status condition in the process. This does not remove the user's stat penalty for burn or paralysis. Fails if the user has full HP.", + onTryMove() {}, + onHit(target) { + // Fails if the difference between + // max HP and current HP is 0, 255, or 511 + if (target.hp >= target.maxhp || + target.hp === (target.maxhp - 255) || + target.hp === (target.maxhp - 511)) return false; + if (!target.setStatus('slp')) return false; + target.statusData.time = 2; + target.statusData.startTime = 2; + this.heal(target.maxhp); // Aeshetic only as the healing happens after you fall asleep in-game + this.add('-status', target, 'slp', '[from] move: Rest'); + }, + }, + roar: { + inherit: true, + desc: "No competitive use.", + shortDesc: "No competitive use.", + isViable: false, + forceSwitch: false, + onTryHit() {}, + priority: 0, + }, + rockslide: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + secondary: null, + target: "normal", + }, + rockthrow: { + inherit: true, + accuracy: 65, + }, + sandattack: { + inherit: true, + ignoreImmunity: true, + type: "Normal", + }, + seismictoss: { + inherit: true, + desc: "Deals damage to the target equal to the user's level. This move ignores type immunity.", + shortDesc: "Damage = user's level. Can hit Ghost types.", + ignoreImmunity: true, + basePower: 1, + }, + selfdestruct: { + inherit: true, + desc: "The user faints after using this move, unless the target's substitute was broken by the damage. The target's Defense is halved during damage calculation.", + basePower: 130, + target: "normal", + }, + skullbash: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second.", + shortDesc: "Charges turn 1. Hits turn 2.", + onTryMove(attacker, defender, move) { + if (attacker.removeVolatile(move.id)) { + return; + } + this.add('-prepare', attacker, move.name, defender); + if (!this.runEvent('ChargeMove', attacker, defender, move)) { + return; + } + attacker.addVolatile('twoturnmove', defender); + return null; + }, + }, + slash: { + inherit: true, + critRatio: 2, + }, + sludge: { + inherit: true, + desc: "Has a 40% chance to poison the target.", + shortDesc: "40% chance to poison the target.", + }, + softboiled: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down. Fails if (user's maximum HP - user's current HP + 1) is divisible by 256.", + heal: null, + onHit(target) { + // Fail when health is 255 or 511 less than max + if (target.hp === (target.maxhp - 255) || target.hp === (target.maxhp - 511) || target.hp === target.maxhp) { + return false; + } + this.heal(Math.floor(target.maxhp / 2), target, target); + }, + }, + solarbeam: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second.", + shortDesc: "Charges turn 1. Hits turn 2.", + }, + sonicboom: { + inherit: true, + desc: "Deals 20 HP of damage to the target. This move ignores type immunity.", + }, + spikecannon: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 chance to hit four or five times. Damage is calculated once for the first hit and used for every hit. If one of the hits breaks the target's substitute, the move ends.", + }, + stomp: { + inherit: true, + desc: "Has a 30% chance to flinch the target.", + }, + struggle: { + inherit: true, + desc: "Deals Normal-type damage. If this move was successful, the user takes damage equal to 1/2 the HP lost by the target, rounded down, but not less than 1 HP. This move is automatically used if none of the user's known moves can be selected.", + shortDesc: "User loses 1/2 the HP lost by the target.", + recoil: [1, 2], + onModifyMove() {}, + }, + stunspore: { + inherit: true, + desc: "Paralyzes the target.", + }, + submission: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not take any recoil damage.", + }, + substitute: { + num: 164, + accuracy: true, + basePower: 0, + category: "Status", + 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 substitute has 1 HP plus the HP used to create it, and is removed once enough damage is inflicted on it or 255 damage is inflicted at once, or if the user switches out or faints. Until the substitute is broken, it receives damage from all attacks made by the opposing Pokemon and shields the user from status effects and stat stage changes caused by the opponent, unless the effect is Disable, Leech Seed, sleep, primary paralysis, or secondary confusion and the user's substitute did not break. The user still takes normal damage from status effects while behind its substitute, unless the effect is confusion damage, which is applied to the opposing Pokemon's substitute instead. If the substitute breaks during a multi-hit attack, the attack ends. Fails if the user does not have enough HP remaining to create a substitute, or if it already has a substitute. The user will create a substitute and then faint if its current HP is exactly 1/4 of its maximum HP.", + shortDesc: "User takes 1/4 its max HP to put in a Substitute.", + id: "substitute", + isViable: true, + name: "Substitute", + pp: 10, + priority: 0, + volatileStatus: 'Substitute', + onTryHit(target) { + if (target.volatiles['substitute']) { + this.add('-fail', target, 'move: Substitute'); + return null; + } + // We only prevent when hp is less than one quarter. + // If you use substitute at exactly one quarter, you faint. + if (target.hp === target.maxhp / 4) target.faint(); + if (target.hp < target.maxhp / 4) { + this.add('-fail', target, 'move: Substitute', '[weak]'); + return null; + } + }, + onHit(target) { + // If max HP is 3 or less substitute makes no damage + if (target.maxhp > 3) { + this.directDamage(target.maxhp / 4, target, target); + } + }, + effect: { + onStart(target) { + this.add('-start', target, 'Substitute'); + this.effectData.hp = Math.floor(target.maxhp / 4) + 1; + delete target.volatiles['partiallytrapped']; + }, + onTryHitPriority: -1, + onTryHit(target, source, move) { + if (move.category === 'Status') { + // In gen 1 it only blocks: + // poison, confusion, secondary effect confusion, stat reducing moves and Leech Seed. + let SubBlocked = ['lockon', 'meanlook', 'mindreader', 'nightmare']; + if (move.status === 'psn' || move.status === 'tox' || (move.boosts && target !== source) || move.volatileStatus === 'confusion' || SubBlocked.includes(move.id)) { + return false; + } + return; + } + if (move.volatileStatus && target === source) return; + // NOTE: In future generations the damage is capped to the remaining HP of the + // Substitute, here we deliberately use the uncapped damage when tracking lastDamage etc. + let uncappedDamage = this.getDamage(source, target, move); + if (!uncappedDamage) return null; + uncappedDamage = this.runEvent('SubDamage', target, source, move, uncappedDamage); + if (!uncappedDamage) return uncappedDamage; + source.lastDamage = uncappedDamage; + target.volatiles['substitute'].hp -= uncappedDamage > target.volatiles['substitute'].hp ? + /** @type {number} */(target.volatiles['substitute'].hp) : uncappedDamage; + if (target.volatiles['substitute'].hp <= 0) { + target.removeVolatile('substitute'); + target.subFainted = true; + } else { + this.add('-activate', target, 'Substitute', '[damage]'); + } + // Drain/recoil does not happen if the substitute breaks + if (target.volatiles['substitute']) { + if (move.recoil) { + this.damage(Math.round(uncappedDamage * move.recoil[0] / move.recoil[1]), source, target, 'recoil'); + } + if (move.drain) { + this.heal(Math.ceil(uncappedDamage * move.drain[0] / move.drain[1]), source, target, 'drain'); + } + } + this.runEvent('AfterSubDamage', target, source, move, uncappedDamage); + // Add here counter damage + let lastAttackedBy = target.getLastAttackedBy(); + if (!lastAttackedBy) { + target.attackedBy.push({source: source, move: move.id, damage: uncappedDamage, thisTurn: true}); + } else { + lastAttackedBy.move = move.id; + lastAttackedBy.damage = uncappedDamage; + } + return 0; + }, + onEnd(target) { + this.add('-end', target, 'Substitute'); + }, + }, + secondary: null, + target: "self", + type: "Normal", + }, + superfang: { + inherit: true, + desc: "Deals damage to the target equal to half of its current HP, rounded down, but not less than 1 HP. This move ignores type immunity.", + shortDesc: "Damage = 1/2 target's current HP. Hits Ghosts.", + ignoreImmunity: true, + basePower: 1, + }, + swift: { + inherit: true, + desc: "This move does not check accuracy and hits even if the target is using Dig or Fly.", + shortDesc: "Never misses, even against Dig and Fly.", + }, + takedown: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move breaks the target's substitute, the user does not take any recoil damage.", + }, + thrash: { + inherit: true, + desc: "Whether or not this move is successful, the user spends three or four turns locked into this move and becomes confused immediately after its move on the last turn of the effect, even if it is already confused. If the user is prevented from moving, the effect ends without causing confusion. During the effect, this move's accuracy is overwritten every turn with the current calculated accuracy including stat stage changes, but not to less than 1/256 or more than 255/256.", + shortDesc: "Lasts 3-4 turns. Confuses the user afterwards.", + }, + thunder: { + inherit: true, + desc: "Has a 10% chance to paralyze the target.", + shortDesc: "10% chance to paralyze the target.", + secondary: { + chance: 10, + status: 'par', + }, + }, + thunderwave: { + inherit: true, + accuracy: 100, + onTryHit(target) { + if (target.hasType('Ground')) { + this.add('-immune', target); + return null; + } + }, + }, + transform: { + inherit: true, + desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, DVs, species, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP. This move can hit a target using Dig or Fly.", + }, + triattack: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + onHit() {}, + secondary: null, + }, + twineedle: { + inherit: true, + desc: "Hits twice, with the second hit having a 20% chance to poison the target. If the first hit breaks the target's substitute, the move ends.", + }, + whirlwind: { + inherit: true, + accuracy: 85, + desc: "No competitive use.", + shortDesc: "No competitive use.", + isViable: false, + forceSwitch: false, + onTryHit() {}, + priority: 0, + }, + wingattack: { + inherit: true, + basePower: 35, + }, + wrap: { + inherit: true, + desc: "The user spends two to five turns using this move. Has a 3/8 chance to last two or three turns, and a 1/8 chance to last four or five turns. The damage calculated for the first turn is used for every other turn. The user cannot select a move and the target cannot execute a move during the effect, but both may switch out. If the user switches out, the target remains unable to execute a move during that turn. If the target switches out, the user uses this move again automatically, and if it had 0 PP at the time, it becomes 63. If the user or the target switch out, or the user is prevented from moving, the effect ends. This move can prevent the target from moving even if it has type immunity, but will not deal damage.", + shortDesc: "Prevents the target from moving for 2-5 turns.", + accuracy: 85, + ignoreImmunity: true, + volatileStatus: 'partiallytrapped', + self: { + volatileStatus: 'partialtrappinglock', + }, + onBeforeMove(pokemon, target, move) { + // Removes must recharge volatile even if it misses + target.removeVolatile('mustrecharge'); + }, + onHit(target, source) { + /** + * The duration of the partially trapped must be always renewed to 2 + * so target doesn't move on trapper switch out as happens in gen 1. + * However, this won't happen if there's no switch and the trapper is + * about to end its partial trapping. + **/ + if (target.volatiles['partiallytrapped']) { + if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { + target.volatiles['partiallytrapped'].duration = 2; + } + } + }, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/gen1/pokedex.js b/data/mods/gen1/pokedex.js similarity index 100% rename from mods/gen1/pokedex.js rename to data/mods/gen1/pokedex.js diff --git a/mods/gen1/random-teams.js b/data/mods/gen1/random-teams.js similarity index 78% rename from mods/gen1/random-teams.js rename to data/mods/gen1/random-teams.js index 9f705ae6bbc04..283cb53fcec61 100644 --- a/mods/gen1/random-teams.js +++ b/data/mods/gen1/random-teams.js @@ -4,10 +4,12 @@ const RandomGen2Teams = require('../../mods/gen2/random-teams'); class RandomGen1Teams extends RandomGen2Teams { // Challenge Cup or CC teams are basically fully random teams. - randomCCTeam(side) { + randomCCTeam() { let team = []; + /**@type {{[k: string]: number}} */ let hasDexNumber = {}; + /**@type {string[][]} */ let formes = [[], [], [], [], [], []]; // Pick six random Pokémon, no repeats. @@ -33,7 +35,7 @@ class RandomGen1Teams extends RandomGen2Teams { for (let i = 0; i < 6; i++) { // Choose forme. - let poke = formes[i][this.random(formes[i].length)]; + let poke = this.sample(formes[i]); let template = this.getTemplate(poke); // Level balance: calculate directly from stats rather than using some silly lookup table. @@ -65,11 +67,11 @@ class RandomGen1Teams extends RandomGen2Teams { // Random DVs. let ivs = { hp: 0, - atk: this.random(15), - def: this.random(15), - spa: this.random(15), + atk: this.random(16), + def: this.random(16), + spa: this.random(16), spd: 0, - spe: this.random(15), + spe: this.random(16), }; ivs["hp"] = (ivs["atk"] % 2) * 16 + (ivs["def"] % 2) * 8 + (ivs["spe"] % 2) * 4 + (ivs["spa"] % 2) * 2; ivs["atk"] = ivs["atk"] * 2; @@ -84,11 +86,14 @@ class RandomGen1Teams extends RandomGen2Teams { // Four random unique moves from movepool. don't worry about "attacking" or "viable". // Since Gens 1 and 2 learnsets are shared, we need to weed out Gen 2 moves. let moves; + /**@type {string[]} */ let pool = []; - for (let move in template.learnset) { - if (this.getMove(move).gen !== 1) continue; - if (template.learnset[move].some(learned => learned[0] === '1')) { - pool.push(move); + if (template.learnset) { + for (let move in template.learnset) { + if (this.getMove(move).gen !== 1) continue; + if (template.learnset[move].some(learned => learned[0] === '1')) { + pool.push(move); + } } } if (pool.length <= 4) { @@ -99,7 +104,9 @@ class RandomGen1Teams extends RandomGen2Teams { team.push({ name: poke, + species: template.species, moves: moves, + gender: false, ability: 'None', evs: evs, ivs: ivs, @@ -113,27 +120,30 @@ class RandomGen1Teams extends RandomGen2Teams { return team; } + // Random team generation for Gen 1 Random Battles. - randomTeam(side) { + randomTeam() { // Get what we need ready. let pokemonLeft = 0; let pokemon = []; - let handicapMons = {'magikarp':1, 'weedle':1, 'kakuna':1, 'caterpie':1, 'metapod':1}; - let nuTiers = {'UU':1, 'BL':1, 'NFE':1, 'LC':1, 'NU':1}; - let uuTiers = {'NFE':1, 'UU':1, 'BL':1, 'NU':1}; + let handicapMons = ['magikarp', 'weedle', 'kakuna', 'caterpie', 'metapod']; + let nuTiers = ['UU', 'UUBL', 'NFE', 'LC', 'NU']; + let uuTiers = ['NFE', 'UU', 'UUBL', 'NU']; - let n = 1; let pokemonPool = []; for (let id in this.data.FormatsData) { - // FIXME: Not ES-compliant - if (n++ > 151 || !this.data.FormatsData[id].randomBattleMoves) continue; - pokemonPool.push(id); + let template = this.getTemplate(id); + if (!template.isNonstandard && template.gen <= this.gen && template.randomBattleMoves) { + pokemonPool.push(id); + } } // Now let's store what we are getting. + /**@type {{[k: string]: number}} */ let typeCount = {}; - let weaknessCount = {'Electric':0, 'Psychic':0, 'Water':0, 'Ice':0, 'Ground':0}; + /**@type {{[k: string]: number}} */ + let weaknessCount = {'Electric': 0, 'Psychic': 0, 'Water': 0, 'Ice': 0, 'Ground': 0}; let uberCount = 0; let nuCount = 0; let hasShitmon = false; @@ -144,7 +154,7 @@ class RandomGen1Teams extends RandomGen2Teams { // Bias the tiers so you get less shitmons and only one of the two Ubers. // If you have a shitmon, don't get another - if ((template.speciesid in handicapMons) && hasShitmon) continue; + if (handicapMons.includes(template.speciesid) && hasShitmon) continue; let tier = template.tier; switch (tier) { @@ -152,7 +162,7 @@ class RandomGen1Teams extends RandomGen2Teams { case 'NFE': // Don't add pre-evo mon if already 4 or more non-OUs, or if already 3 or more non-OUs with one being a shitmon // Regardless, pre-evo mons are slightly less common. - if (nuCount > 3 || (hasShitmon && nuCount > 2) || this.random(3) === 0) continue; + if (nuCount > 3 || (hasShitmon && nuCount > 2) || this.randomChance(1, 3)) continue; break; case 'Uber': // If you have one of the worst mons we allow luck to give you all Ubers. @@ -160,16 +170,15 @@ class RandomGen1Teams extends RandomGen2Teams { break; default: // OUs are fine. Otherwise 50% chance to skip mon if already 4 or more non-OUs. - if (uuTiers[tier] && pokemonPool.length > 1 && (nuCount > 3 && this.random(2) >= 1)) continue; + if (uuTiers.includes(tier) && pokemonPool.length > 1 && (nuCount > 3 && this.randomChance(1, 2))) continue; } let skip = false; // Limit 2 of any type as well. Diversity and minor weakness count. // The second of a same type has halved chance of being added. - let types = template.types; - for (let t = 0; t < types.length; t++) { - if (typeCount[types[t]] > 1 || (typeCount[types[t]] === 1 && this.random(2) && pokemonPool.length > 1)) { + for (const type of template.types) { + if (typeCount[type] > 1 || (typeCount[type] === 1 && this.randomChance(1, 2) && pokemonPool.length > 1)) { skip = true; break; } @@ -199,59 +208,64 @@ class RandomGen1Teams extends RandomGen2Teams { pokemonLeft++; // Type counter. - for (let t = 0; t < types.length; t++) { - if (typeCount[types[t]]) { - typeCount[types[t]]++; + for (const type of template.types) { + if (typeCount[type]) { + typeCount[type]++; } else { - typeCount[types[t]] = 1; + typeCount[type] = 1; } } // Weakness counter. - for (let t = 0; t < pokemonWeaknesses.length; t++) { - weaknessCount[pokemonWeaknesses[t]]++; + for (const weakness of pokemonWeaknesses) { + weaknessCount[weakness]++; } // Increment tier bias counters. if (tier === 'Uber') { uberCount++; - } else if (nuTiers[tier]) { + } else if (nuTiers.includes(tier)) { nuCount++; } // Is it Magikarp or one of the useless bugs? - if (template.speciesid in handicapMons) hasShitmon = true; + if (handicapMons.includes(template.speciesid)) hasShitmon = true; } return pokemon; } - // Random set generation for Gen 1 Random Battles. + + /** + * Random set generation for Gen 1 Random Battles. + * @param {string | Template} template + * @param {number} [slot] + * @return {RandomTeamsTypes["RandomSet"]} + */ randomSet(template, slot) { - if (slot === undefined) slot = 1; template = this.getTemplate(template); if (!template.exists) template = this.getTemplate('pikachu'); // Because Gen 1. - let movePool = template.randomBattleMoves.slice(); + let movePool = template.randomBattleMoves ? template.randomBattleMoves.slice() : []; + /**@type {string[]} */ let moves = []; + /**@type {{[k: string]: true}} */ let hasType = {}; hasType[template.types[0]] = true; if (template.types[1]) hasType[template.types[1]] = true; + /**@type {{[k: string]: true}} */ let hasMove = {}; + /**@type {{[k: string]: number}} */ let counter = {}; // let setupType = ''; // Moves that boost Attack: - let PhysicalSetup = { - swordsdance:1, sharpen:1, - }; + let PhysicalSetup = ['swordsdance', 'sharpen']; // Moves which boost Special Attack: - let SpecialSetup = { - amnesia:1, growth:1, - }; + let SpecialSetup = ['amnesia', 'growth']; // Either add all moves or add none if (template.comboMoves) { - if (this.random(2) === 0) { + if (this.randomChance(1, 2)) { moves = moves.concat(template.comboMoves); } } @@ -259,7 +273,7 @@ class RandomGen1Teams extends RandomGen2Teams { // Add one of the semi-mandatory moves // Often, these are used so that the Pokemon only gets one of the less useful moves if (moves.length < 4 && template.exclusiveMoves) { - moves.push(template.exclusiveMoves[this.random(template.exclusiveMoves.length)]); + moves.push(this.sample(template.exclusiveMoves)); } // Add the mandatory move. SD Mew and Amnesia Snorlax are exceptions. @@ -278,17 +292,17 @@ class RandomGen1Teams extends RandomGen2Teams { if (movePool.length) { hasMove = {}; counter = {Physical: 0, Special: 0, Status: 0, physicalsetup: 0, specialsetup: 0}; - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); + for (const setMoveid of moves) { + let move = this.getMove(setMoveid); let moveid = move.id; hasMove[moveid] = true; if (!move.damage && !move.damageCallback) { counter[move.category]++; } - if (PhysicalSetup[moveid]) { + if (PhysicalSetup.includes(moveid)) { counter['physicalsetup']++; } - if (SpecialSetup[moveid]) { + if (SpecialSetup.includes(moveid)) { counter['specialsetup']++; } } @@ -299,8 +313,7 @@ class RandomGen1Teams extends RandomGen2Teams { // setupType = 'Physical'; // } - for (let k = 0; k < moves.length; k++) { - let moveid = moves[k]; + for (const [i, moveid] of moves.entries()) { if (moveid === template.essentialMove) continue; let move = this.getMove(moveid); let rejected = false; @@ -336,7 +349,7 @@ class RandomGen1Teams extends RandomGen2Teams { } // End of switch for moveid } if (rejected) { - moves.splice(k, 1); + moves.splice(i, 1); break; } counter[move.category]++; @@ -357,11 +370,14 @@ class RandomGen1Teams extends RandomGen2Teams { Caterpie: 99, Metapod: 99, Weedle: 99, Kakuna: 99, Magikarp: 99, Ditto: 88, }; + // @ts-ignore let level = levelScale[template.tier] || 80; + // @ts-ignore if (customScale[template.name]) level = customScale[template.name]; return { name: template.name, + species: template.species, moves: moves, ability: 'None', evs: {hp: 255, atk: 255, def: 255, spa: 255, spd: 255, spe: 255}, diff --git a/mods/gen1/rulesets.js b/data/mods/gen1/rulesets.js similarity index 80% rename from mods/gen1/rulesets.js rename to data/mods/gen1/rulesets.js index 2593dd8f57271..2b197e6e671e4 100644 --- a/mods/gen1/rulesets.js +++ b/data/mods/gen1/rulesets.js @@ -1,10 +1,11 @@ 'use strict'; -exports.BattleFormats = { +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { pokemon: { effectType: 'ValidatorRule', name: 'Pokemon', - onValidateSet: function (set, format) { + onValidateSet(set, format) { let template = this.getTemplate(set.species); let problems = []; if (set.species === set.name) delete set.name; @@ -15,8 +16,8 @@ exports.BattleFormats = { problems.push(set.species + ' is not a real Pokemon.'); } if (set.moves) { - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const setMoveid of set.moves) { + let move = this.getMove(setMoveid); if (move.gen > this.gen) { problems.push(move.name + ' does not exist in gen ' + this.gen + '.'); } else if (move.isNonstandard) { @@ -28,6 +29,9 @@ exports.BattleFormats = { problems.push((set.name || set.species) + ' has more than four moves.'); } + if (set.evs) set.evs['spd'] = set.evs['spa']; + if (set.ivs) set.ivs['spd'] = set.ivs['spa']; + // Let's manually delete items. set.item = ''; @@ -57,20 +61,23 @@ exports.BattleFormats = { 'Jolteon + Tackle + Growl', 'Jolteon + Focus Energy + Thunder Shock', 'Flareon + Tackle + Growl', 'Flareon + Focus Energy + Ember', ], - onValidateSet: function (set) { + onValidateSet(set) { // limit one of each move in Standard let moves = []; if (set.moves) { + /**@type {{[k: string]: true}} */ let hasMove = {}; - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const setMoveid of set.moves) { + let move = this.getMove(setMoveid); let moveid = move.id; if (hasMove[moveid]) continue; hasMove[moveid] = true; - moves.push(set.moves[i]); + moves.push(setMoveid); } } set.moves = moves; }, }, }; + +exports.BattleFormats = BattleFormats; diff --git a/mods/gen1/scripts.js b/data/mods/gen1/scripts.js similarity index 77% rename from mods/gen1/scripts.js rename to data/mods/gen1/scripts.js index 6b3c95c6bd714..9aa42d28aa638 100644 --- a/mods/gen1/scripts.js +++ b/data/mods/gen1/scripts.js @@ -5,10 +5,12 @@ * Therefor we need to make a lot of changes to the battle engine for this game simulation. * This generation inherits all the changes from older generations, that must be taken into account when editing code. */ -exports.BattleScripts = { + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { inherit: 'gen2', gen: 1, - debug: function (activity) { + debug(activity) { if (this.getFormat().debug) { this.add('debug', activity); } @@ -21,44 +23,61 @@ exports.BattleScripts = { // This is because there was actually no side, just Battle and active Pokémon effects. // Side's lastMove is used for Counter and Mirror Move. side: { - lastMove: '', + lastMove: null, }, // BattlePokemon scripts. pokemon: { - getStat: function (statName, unmodified) { + getStat(statName, unmodified) { statName = toId(statName); if (statName === 'hp') return this.maxhp; if (unmodified) return this.stats[statName]; + // @ts-ignore return this.modifiedStats[statName]; }, // Gen 1 function to apply a stat modification that is only active until the stat is recalculated or mon switched. // Modified stats are declared in the Pokemon object in sim/pokemon.js in about line 681. - modifyStat: function (stat, modifier) { + modifyStat(stat, modifier) { if (!(stat in this.stats)) return; + // @ts-ignore this.modifiedStats[stat] = this.battle.clampIntRange(Math.floor(this.modifiedStats[stat] * modifier), 1, 999); }, // In generation 1, boosting function increases the stored modified stat and checks for opponent's status. - boostBy: function (boost) { + boostBy(boost) { let changed = false; for (let i in boost) { + // @ts-ignore let delta = boost[i]; + if (delta === undefined) continue; + // @ts-ignore if (delta > 0 && this.boosts[i] >= 6) continue; + // @ts-ignore if (delta < 0 && this.boosts[i] <= -6) continue; + // @ts-ignore this.boosts[i] += delta; + // @ts-ignore if (this.boosts[i] > 6) { + // @ts-ignore this.boosts[i] = 6; } + // @ts-ignore if (this.boosts[i] < -6) { + // @ts-ignore this.boosts[i] = -6; } changed = true; // Recalculate the modified stat + // @ts-ignore let stat = this.template.baseStats[i]; + // @ts-ignore stat = Math.floor(Math.floor(2 * stat + this.set.ivs[i] + Math.floor(this.set.evs[i] / 4)) * this.level / 100 + 5); + // @ts-ignore this.modifiedStats[i] = this.stats[i] = Math.floor(stat); + // @ts-ignore if (this.boosts[i] >= 0) { + // @ts-ignore this.modifyStat(i, [1, 1.5, 2, 2.5, 3, 3.5, 4][this.boosts[i]]); } else { + // @ts-ignore this.modifyStat(i, [100, 66, 50, 40, 33, 28, 25][-this.boosts[i]] / 100); } } @@ -70,15 +89,14 @@ exports.BattleScripts = { // It deals with the beforeMove and AfterMoveSelf events. // This leads with partial trapping moves shennanigans after the move has been used. // It also deals with how PP reduction works on gen 1. - runMove: function (move, pokemon, targetLoc, sourceEffect) { - let target = this.getTarget(pokemon, move, targetLoc); - move = this.getMove(move); - if (!target) target = this.resolveTarget(pokemon, move); - if (target.subFainted) delete target.subFainted; + runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect) { + let target = this.getTarget(pokemon, moveOrMoveName, targetLoc); + let move = this.getActiveMove(moveOrMoveName); + if (target && target.subFainted) delete target.subFainted; this.setActiveMove(move, pokemon, target); - if (pokemon.movedThisTurn || !this.runEvent('BeforeMove', pokemon, target, move)) { + if (pokemon.moveThisTurn || !this.runEvent('BeforeMove', pokemon, target, move)) { // Prevent invulnerability from persisting until the turn ends. pokemon.removeVolatile('twoturnmove'); // Rampage moves end without causing confusion @@ -100,16 +118,24 @@ exports.BattleScripts = { if (!lockedMove && (!pokemon.volatiles['partialtrappinglock'] || pokemon.volatiles['partialtrappinglock'].locked !== target)) { pokemon.deductPP(move, null, target); // On gen 1 moves are stored when they are chosen and a PP is deducted. - pokemon.side.lastMove = move.id; - pokemon.lastMove = move.id; + pokemon.side.lastMove = move; + pokemon.lastMove = move; } else { sourceEffect = move; } + if (pokemon.volatiles['partialtrappinglock'] && target !== pokemon.volatiles['partialtrappinglock'].locked) { + const moveSlot = pokemon.moveSlots.find(moveSlot => moveSlot.id === move.id); + if (moveSlot && moveSlot.pp < 0) { + moveSlot.pp = 63; + pokemon.isStale = 2; + pokemon.isStaleSource = 'ppoverflow'; + } + } this.useMove(move, pokemon, target, sourceEffect); this.singleEvent('AfterMove', move, null, pokemon, target, move); - // If rival fainted - if (target.hp <= 0) { + // If target fainted + if (target && target.hp <= 0) { // We remove recharge if (pokemon.volatiles['mustrecharge']) pokemon.removeVolatile('mustrecharge'); delete pokemon.volatiles['partialtrappinglock']; @@ -133,18 +159,11 @@ exports.BattleScripts = { sourceVolatile.locked = target; } else if (target !== pokemon && target !== sourceVolatile.locked) { // Our target switched out! Re-roll the duration, damage, and accuracy. - const duration = [2, 2, 2, 3, 3, 3, 4, 5][this.random(8)]; + const duration = this.sample([2, 2, 2, 3, 3, 3, 4, 5]); sourceVolatile.duration = duration; sourceVolatile.locked = target; // Duration reset thus partially trapped at 2 always. targetVolatile.duration = 2; - // We get the move position for the PP change. - const moveData = pokemon.moveset.find(moveData => moveData.id === move.id); - if (moveData && moveData.pp === 0) { - moveData.pp = 63; - pokemon.isStale = 2; - pokemon.isStaleSource = 'ppoverflow'; - } } } // If we move to here, the move failed and there's no partial trapping lock. } @@ -152,12 +171,12 @@ exports.BattleScripts = { // useMove can be found on scripts.js // It is the function that actually uses the move, running ModifyMove events. // It uses the move and then deals with the effects after the move. - useMove: function (move, pokemon, target, sourceEffect) { + // @ts-ignore + useMove(moveOrMoveName, pokemon, target, sourceEffect) { if (!sourceEffect && this.effect.id) sourceEffect = this.effect; - move = this.getMove(move); - let baseMove = move; - move = this.getMoveCopy(move); - if (!target) target = this.resolveTarget(pokemon, move); + let baseMove = this.getMove(moveOrMoveName); + let move = this.getActiveMove(baseMove); + if (target === undefined) target = this.resolveTarget(pokemon, move); if (move.target === 'self') { target = pokemon; } @@ -174,6 +193,7 @@ exports.BattleScripts = { if (baseMove.target !== move.target) { // Check again, this shouldn't ever happen on Gen 1. target = this.resolveTarget(pokemon, move); + this.debug('not a gen 1 mechanic'); } if (!move) return false; @@ -195,7 +215,8 @@ exports.BattleScripts = { if (!this.singleEvent('Try', move, null, pokemon, target, move)) { return true; } - if (!this.runEvent('TryMove', pokemon, target, move)) { + if (!this.singleEvent('TryMove', move, null, pokemon, target, move) || + !this.runEvent('TryMove', pokemon, target, move)) { return true; } @@ -203,8 +224,9 @@ exports.BattleScripts = { move.ignoreImmunity = (move.category === 'Status'); } + /** @type {number | undefined | false | ''} */ let damage = false; - if (target.fainted) { + if (!target || target.fainted) { this.attrLastMove('[notarget]'); this.add('-notarget'); return true; @@ -213,13 +235,13 @@ exports.BattleScripts = { // Store 0 damage for last damage if move failed or dealt 0 damage. // This only happens on moves that don't deal damage but call GetDamageVarsForPlayerAttack (disassembly). - if (!damage && (move.category !== 'Status' || (move.category === 'Status' && !(move.status in {'psn':1, 'tox':1, 'par':1}))) && - !(move.id in {'conversion':1, 'haze':1, 'mist':1, 'focusenergy':1, 'confuseray':1, 'supersonic':1, 'transform':1, 'lightscreen':1, 'reflect':1, 'substitute':1, 'mimic':1, 'leechseed':1, 'splash':1, 'softboiled':1, 'recover':1, 'rest':1})) { - pokemon.battle.lastDamage = 0; + if (!damage && (move.category !== 'Status' || (move.status && move.category === 'Status' && !['psn', 'tox', 'par'].includes(move.status))) && + !['conversion', 'haze', 'mist', 'focusenergy', 'confuseray', 'supersonic', 'transform', 'lightscreen', 'reflect', 'substitute', 'mimic', 'leechseed', 'splash', 'softboiled', 'recover', 'rest'].includes(move.id)) { + this.lastDamage = 0; } // Go ahead with results of the used move. - if (!damage && damage !== 0) { + if (damage === false) { this.singleEvent('MoveFail', move, null, target, pokemon, move); return true; } @@ -233,13 +255,22 @@ exports.BattleScripts = { // tryMoveHit can be found on scripts.js // This function attempts a move hit and returns the attempt result before the actual hit happens. // It deals with partial trapping weirdness and accuracy bugs as well. - tryMoveHit: function (target, pokemon, move, spreadHit) { + tryMoveHit(target, pokemon, move) { let boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; let doSelfDestruct = true; + /** @type {number | false | undefined} */ let damage = 0; - // First, check if the Pokémon is immune to this move. - if (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type] && !target.runImmunity(move.type, true)) { + // First, check if the target is semi-invulnerable + let hitResult = this.runEvent('TryImmunity', target, pokemon, move); + if (!hitResult) { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon); + return false; + } + + // Then, check if the Pokémon is immune to this move. + if ((!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type, true)) { if (move.selfdestruct) { this.faint(pokemon, pokemon, move); } @@ -247,6 +278,7 @@ exports.BattleScripts = { } // Now, let's calculate the accuracy. + /** @type {number | true} */ let accuracy = move.accuracy; // Partial trapping moves: true accuracy while it lasts @@ -285,13 +317,14 @@ exports.BattleScripts = { accuracy *= boostTable[-target.boosts.evasion]; } } + accuracy = Math.min(accuracy, 255); } accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); // Moves that target the user do not suffer from the 1/256 miss chance. if (move.target === 'self' && accuracy !== true) accuracy++; // 1/256 chance of missing always, no matter what. Besides the aforementioned exceptions. - if (accuracy !== true && this.random(256) >= accuracy) { + if (accuracy !== true && !this.randomChance(accuracy, 256)) { this.attrLastMove('[miss]'); this.add('-miss', pokemon); damage = false; @@ -302,38 +335,33 @@ exports.BattleScripts = { pokemon.lastDamage = 0; if (move.multihit) { let hits = move.multihit; - if (hits.length) { + if (Array.isArray(hits)) { // Yes, it's hardcoded... meh if (hits[0] === 2 && hits[1] === 5) { - hits = [2, 2, 3, 3, 4, 5][this.random(6)]; + hits = this.sample([2, 2, 3, 3, 4, 5]); } else { hits = this.random(hits[0], hits[1] + 1); } } hits = Math.floor(hits); // In gen 1, all the hits have the same damage for multihits move + /** @type {number | undefined | false} */ let moveDamage = 0; - let firstDamage; let i; for (i = 0; i < hits && target.hp && pokemon.hp; i++) { - if (i === 0) { - // First hit, we calculate - moveDamage = this.moveHit(target, pokemon, move); - firstDamage = moveDamage; - } else { - // We get the previous damage to make it fix damage - move.damage = firstDamage; - moveDamage = this.moveHit(target, pokemon, move); - } + move.hit = i + 1; + moveDamage = this.moveHit(target, pokemon, move); if (moveDamage === false) break; damage = (moveDamage || 0); + // Move damage is fixed to be the first move's damage + if (i === 0) move.damage = damage; if (target.subFainted) { i++; break; } } move.damage = null; - if (i === 0) return true; + if (i === 0) return 1; this.add('-hitcount', target, i); } else { damage = this.moveHit(target, pokemon, move); @@ -341,8 +369,6 @@ exports.BattleScripts = { } if (move.category !== 'Status') { - // FIXME: The stored damage should be calculated ignoring Substitute. - // https://github.com/Zarel/Pokemon-Showdown/issues/2598 target.gotAttacked(move, damage, pokemon); } @@ -371,11 +397,12 @@ exports.BattleScripts = { // move Hit can be found on scripts.js // It deals with the actual move hit, as the name indicates, dealing damage and/or effects. // This function also deals with the Gen 1 Substitute behaviour on the hitting process. - moveHit: function (target, pokemon, move, moveData, isSecondary, isSelf) { + moveHit(target, pokemon, move, moveData, isSecondary, isSelf) { + /** @type {number | false | null | undefined} */ let damage = 0; - move = this.getMoveCopy(move); if (!isSecondary && !isSelf) this.setActiveMove(move, pokemon, target); + /**@type {number | boolean} */ let hitResult = true; if (!moveData) moveData = move; @@ -459,19 +486,24 @@ exports.BattleScripts = { if (damage === false || damage === null) { return false; } - if (moveData.boosts && !target.fainted) { - this.boost(moveData.boosts, target, pokemon, move); - + if (moveData.boosts && target.hp) { + if (!this.boost(moveData.boosts, target, pokemon, move)) { + this.add('-fail', target); + return false; + } + didSomething = true; // Check the status of the Pokémon whose turn is not. // When a move that affects stat levels is used, if the Pokémon whose turn it is not right now is paralyzed or // burned, the correspoding stat penalties will be applied again to that Pokémon. if (pokemon.side.foe.active[0] && pokemon.side.foe.active[0].status) { // If it's paralysed, quarter its speed. if (pokemon.side.foe.active[0].status === 'par') { + // @ts-ignore pokemon.side.foe.active[0].modifyStat('spe', 0.25); } // If it's burned, halve its attack. if (pokemon.side.foe.active[0].status === 'brn') { + // @ts-ignore pokemon.side.foe.active[0].modifyStat('atk', 0.5); } } @@ -498,7 +530,9 @@ exports.BattleScripts = { } else if (!target.status) { if (target.setStatus(moveData.status, pokemon, move)) { // Gen 1 mechanics: The burn attack drop and the paralyse speed drop are applied here directly on stat modifiers. + // @ts-ignore if (moveData.status === 'brn') target.modifyStat('atk', 0.5); + // @ts-ignore if (moveData.status === 'par') target.modifyStat('spe', 0.25); } } else if (!isSecondary) { @@ -512,7 +546,9 @@ exports.BattleScripts = { } if (moveData.forceStatus) { if (target.setStatus(moveData.forceStatus, pokemon, move)) { + // @ts-ignore if (moveData.forceStatus === 'brn') target.modifyStat('atk', 0.5); + // @ts-ignore if (moveData.forceStatus === 'par') target.modifyStat('spe', 0.25); didSomething = true; } @@ -546,13 +582,14 @@ exports.BattleScripts = { if (target) { let targetSub = target.getVolatile('substitute'); if (targetSub !== null) { + // @ts-ignore targetHasSub = (targetSub.hp > 0); } } // Here's where self effects are applied. let doSelf = (targetHadSub && targetHasSub) || !targetHadSub; - if (moveData.self && (doSelf || moveData.self.volatileStatus === 'partialtrappinglock')) { + if (moveData.self && (doSelf || (moveData.self !== true && moveData.self.volatileStatus === 'partialtrappinglock'))) { this.moveHit(pokemon, pokemon, move, moveData.self, isSecondary, true); } @@ -563,15 +600,14 @@ exports.BattleScripts = { // Apply move secondaries. if (moveData.secondaries) { - for (let i = 0; i < moveData.secondaries.length; i++) { + for (const secondary of moveData.secondaries) { // We check here whether to negate the probable secondary status if it's para, burn, or freeze. // In the game, this is checked and if true, the random number generator is not called. // That means that a move that does not share the type of the target can status it. // If a move that was not fire-type would exist on Gen 1, it could burn a Pokémon. - if (!(moveData.secondaries[i].status && moveData.secondaries[i].status in {'par':1, 'brn':1, 'frz':1} && target && target.hasType(move.type))) { - let effectChance = Math.floor(moveData.secondaries[i].chance * 255 / 100); - if (typeof moveData.secondaries[i].chance === 'undefined' || this.random(256) < effectChance) { - this.moveHit(target, pokemon, move, moveData.secondaries[i], true, isSelf); + if (!(secondary.status && ['par', 'brn', 'frz'].includes(secondary.status) && target && target.hasType(move.type))) { + if (secondary.chance === undefined || this.randomChance(Math.ceil(secondary.chance * 256 / 100), 256)) { + this.moveHit(target, pokemon, move, secondary, true, isSelf); } } } @@ -584,22 +620,29 @@ exports.BattleScripts = { }, // boost can be found on sim/battle.js on Battle object. // It deals with Pokémon stat boosting, including Gen 1 buggy behaviour with burn and paralyse. - boost: function (boost, target, source, effect) { + boost(boost, target, source = null, effect = null) { if (this.event) { if (!target) target = this.event.target; if (!source) source = this.event.source; if (!effect) effect = this.effect; } + if (typeof effect === 'string') effect = this.getEffect(effect); if (!target || !target.hp) return 0; - effect = this.getEffect(effect); + let success = null; boost = this.runEvent('Boost', target, source, effect, Object.assign({}, boost)); for (let i in boost) { + /** @type {SparseBoostsTable} */ let currentBoost = {}; + // @ts-ignore currentBoost[i] = boost[i]; + // @ts-ignore if (boost[i] !== 0 && target.boostBy(currentBoost)) { + success = true; let msg = '-boost'; + // @ts-ignore if (boost[i] < 0) { msg = '-unboost'; + // @ts-ignore boost[i] = -boost[i]; // Re-add attack and speed drops if not present if (i === 'atk' && target.status === 'brn' && !target.volatiles['brnattackdrop']) { @@ -617,132 +660,34 @@ exports.BattleScripts = { target.removeVolatile('parspeeddrop'); } } - if (effect.effectType === 'Move') { + if (!effect || effect.effectType === 'Move') { + // @ts-ignore this.add(msg, target, i, boost[i]); } else { + // @ts-ignore this.add(msg, target, i, boost[i], '[from] ' + effect.fullname); } this.runEvent('AfterEachBoost', target, source, effect, currentBoost); } } this.runEvent('AfterBoost', target, source, effect, boost); - }, - // damage can be found in sim/battle.js on the Battle object. Not to confuse with BattlePokemon.prototype.damage - // It calculates and executes the damage damage from source to target with effect. - // It also deals with recoil and drains. - damage: function (damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - effect = this.getEffect(effect); - if (!(damage || damage === 0)) return damage; - if (damage !== 0) damage = this.clampIntRange(damage, 1); - - if (effect.id !== 'struggle-recoil') { // Struggle recoil is not affected by effects - damage = this.runEvent('Damage', target, source, effect, damage); - if (!(damage || damage === 0)) { - this.debug('damage event failed'); - return damage; - } - } - if (damage !== 0) damage = this.clampIntRange(damage, 1); - if (!(effect.id in {'recoil':1, 'drain':1}) && effect.effectType !== 'Status') { - // FIXME: The stored damage should be calculated ignoring Substitute. - // https://github.com/Zarel/Pokemon-Showdown/issues/2598 - target.battle.lastDamage = damage; - } - damage = target.damage(damage, source, effect); - if (source) source.lastDamage = damage; - let name = effect.fullname; - if (name === 'tox') name = 'psn'; - switch (effect.id) { - case 'partiallytrapped': - this.add('-damage', target, target.getHealth, '[from] ' + this.effectData.sourceEffect.fullname, '[partiallytrapped]'); - break; - default: - if (effect.effectType === 'Move') { - this.add('-damage', target, target.getHealth); - } else if (source && source !== target) { - this.add('-damage', target, target.getHealth, '[from] ' + effect.fullname, '[of] ' + source); - } else { - this.add('-damage', target, target.getHealth, '[from] ' + name); - } - break; - } - - if (effect.recoil && source) { - this.damage(this.clampIntRange(Math.floor(damage * effect.recoil[0] / effect.recoil[1]), 1), source, target, 'recoil'); - } - if (effect.drain && source) { - this.heal(this.clampIntRange(Math.floor(damage * effect.drain[0] / effect.drain[1]), 1), source, target, 'drain'); - } - - if (target.fainted || target.hp <= 0) { - this.faint(target); - this.queue = []; - } else { - // damage = this.runEvent('AfterDamage', target, source, effect, damage); - } - - return damage; - }, - // directDamage can be found on sim/battle.js in Battle object - // It deals direct damage damage from source to target with effect. - // It also deals with Gen 1 weird Substitute behaviour. - directDamage: function (damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - if (!damage) return 0; - damage = this.clampIntRange(damage, 1); - // Check here for Substitute on confusion since it's not exactly a move that causes the damage and thus it can't TryMoveHit. - // The hi jump kick recoil also hits the sub. - if (effect.id in {'confusion': 1, 'highjumpkick': 1} && target.volatiles['substitute']) { - target.volatiles['substitute'].hp -= damage; - if (target.volatiles['substitute'].hp <= 0) { - target.removeVolatile('substitute'); - target.subFainted = true; - } else { - this.add('-activate', target, 'Substitute', '[damage]'); - } - } else { - damage = target.damage(damage, source, effect); - // Now we sent the proper -damage. - switch (effect.id) { - case 'strugglerecoil': - this.add('-damage', target, target.getHealth, '[from] recoil'); - break; - case 'confusion': - this.add('-damage', target, target.getHealth, '[from] confusion'); - break; - default: - this.add('-damage', target, target.getHealth); - break; - } - if (target.fainted) this.faint(target); - } - - return damage; + return success; }, // getDamage can be found on sim/battle.js on the Battle object. // It calculates the damage pokemon does to target with move. - getDamage: function (pokemon, target, move, suppressMessages) { + getDamage(pokemon, target, move, suppressMessages) { // First of all, we get the move. - if (typeof move === 'string') move = this.getMove(move); - if (typeof move === 'number') { - move = { + if (typeof move === 'string') { + move = this.getActiveMove(move); + } else if (typeof move === 'number') { + // @ts-ignore + move = /** @type {ActiveMove} */ ({ basePower: move, type: '???', category: 'Physical', willCrit: false, flags: {}, - }; + }); } // Let's see if the target is immune to the move. @@ -790,15 +735,13 @@ exports.BattleScripts = { let type = move.type; // We get the base power and apply basePowerCallback if necessary. + /** @type {number | false | null} */ let basePower = move.basePower; if (move.basePowerCallback) { basePower = move.basePowerCallback.call(this, pokemon, target, move); } - - // We check if the base power is proper. if (!basePower) { - if (basePower === 0) return; // Returning undefined means not dealing damage - return basePower; + return basePower === 0 ? undefined : basePower; } basePower = this.clampIntRange(basePower, 1); @@ -831,14 +774,14 @@ exports.BattleScripts = { // We compare our critical hit chance against a random number between 0 and 255. // If the random number is lower, we get a critical hit. This means there is always a 1/255 chance of not hitting critically. if (critChance > 0) { - move.crit = (this.random(256) < critChance); + move.crit = this.randomChance(critChance, 256); } } // Happens after crit calculation. if (basePower) { basePower = this.runEvent('BasePower', pokemon, target, move, basePower); - if (move.basePowerModifier) { + if (basePower && move.basePowerModifier) { basePower *= move.basePowerModifier; } } @@ -862,7 +805,7 @@ exports.BattleScripts = { defense = this.clampIntRange(defense, 1, 1998); } - // In the event of a critical hit, the ofense and defense changes are ignored. + // In the event of a critical hit, the offense and defense changes are ignored. // This includes both boosts and screens. // Also, level is doubled in damage calculation. if (move.crit) { @@ -912,7 +855,7 @@ exports.BattleScripts = { // Type effectiveness. // The order here is not correct, must change to check the move versus each type. - let totalTypeMod = this.getEffectiveness(type, target); + let totalTypeMod = target.runEffectiveness(move); // Super effective attack if (totalTypeMod > 0) { if (!suppressMessages) this.add('-supereffective', target); @@ -942,10 +885,11 @@ exports.BattleScripts = { damage *= this.random(217, 256); damage = Math.floor(damage / 255); if (damage > target.hp && !target.volatiles['substitute']) damage = target.hp; - if (target.volatiles['substitute'] && damage > target.volatiles['substitute'].hp) damage = target.volatiles['substitute'].hp; } // And we are done. return Math.floor(damage); }, }; + +exports.BattleScripts = BattleScripts; diff --git a/mods/gen1/statuses.js b/data/mods/gen1/statuses.js similarity index 74% rename from mods/gen1/statuses.js rename to data/mods/gen1/statuses.js index 75f14c82cdc7c..f3ea0222975e3 100644 --- a/mods/gen1/statuses.js +++ b/data/mods/gen1/statuses.js @@ -10,15 +10,19 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { brn: { + name: 'brn', + id: 'brn', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'brn'); target.addVolatile('brnattackdrop'); }, onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { let toxicCounter = 1; if (pokemon.volatiles['residualdmg']) { pokemon.volatiles['residualdmg'].counter++; @@ -26,22 +30,25 @@ exports.BattleStatuses = { } this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1) * toxicCounter, pokemon); }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { pokemon.addVolatile('brnattackdrop'); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, }, par: { + name: 'par', + id: 'par', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'par'); target.addVolatile('parspeeddrop'); }, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon) { - if (this.random(256) < 63) { + onBeforeMove(pokemon) { + if (this.randomChance(63, 256)) { this.add('cant', pokemon, 'par'); pokemon.removeVolatile('bide'); pokemon.removeVolatile('twoturnmove'); @@ -53,55 +60,64 @@ exports.BattleStatuses = { return false; } }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { pokemon.addVolatile('parspeeddrop'); }, }, slp: { + name: 'slp', + id: 'slp', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'slp'); // 1-7 turns this.effectData.startTime = this.random(1, 8); this.effectData.time = this.effectData.startTime; }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { pokemon.statusData.time--; if (pokemon.statusData.time > 0) { this.add('cant', pokemon, 'slp'); } - pokemon.lastMove = ''; + pokemon.lastMove = null; return false; }, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { if (pokemon.statusData.time <= 0) pokemon.cureStatus(); }, }, frz: { + name: 'frz', + id: 'frz', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'frz'); }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { this.add('cant', pokemon, 'frz'); - pokemon.lastMove = ''; + pokemon.lastMove = null; return false; }, - onHit: function (target, source, move) { - if (move.type === 'Fire' && move.category !== 'Status') { + onAfterMoveSecondary(target, source, move) { + if (move.secondary && move.secondary.status === 'brn') { target.cureStatus(); } }, }, psn: { + name: 'psn', + id: 'psn', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'psn'); }, onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { let toxicCounter = 1; if (pokemon.volatiles['residualdmg']) { pokemon.volatiles['residualdmg'].counter++; @@ -109,33 +125,39 @@ exports.BattleStatuses = { } this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1) * toxicCounter, pokemon); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, }, tox: { + name: 'tox', + id: 'tox', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'tox'); if (!target.volatiles['residualdmg']) target.addVolatile('residualdmg'); target.volatiles['residualdmg'].counter = 0; }, onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { pokemon.volatiles['residualdmg'].counter++; this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1) * pokemon.volatiles['residualdmg'].counter, pokemon, pokemon); }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { // Regular poison status and damage after a switchout -> switchin. pokemon.setStatus('psn'); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, }, confusion: { + name: 'confusion', + id: 'confusion', + num: 0, // this is a volatile status - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.id === 'lockedmove') { this.add('-start', target, 'confusion', '[silent]'); } else { @@ -143,20 +165,20 @@ exports.BattleStatuses = { } this.effectData.time = this.random(2, 6); }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'confusion'); }, onBeforeMovePriority: 3, - onBeforeMove: function (pokemon, target) { + onBeforeMove(pokemon, target) { pokemon.volatiles.confusion.time--; if (!pokemon.volatiles.confusion.time) { pokemon.removeVolatile('confusion'); return; } this.add('-activate', pokemon, 'confusion'); - if (this.random(256) >= 128) { + if (!this.randomChance(128, 256)) { // We check here to implement the substitute bug since otherwise we need to change directDamage to take target. - let damage = Math.floor(Math.floor(((Math.floor(2 * pokemon.level / 5) + 2) * pokemon.getStat('atk') * 40) / pokemon.getStat('def', false, false, true)) / 50) + 2; + let damage = Math.floor(Math.floor(((Math.floor(2 * pokemon.level / 5) + 2) * pokemon.getStat('atk') * 40) / pokemon.getStat('def', false)) / 50) + 2; if (pokemon.volatiles['substitute']) { // If there is Substitute, we check for opposing substitute. if (target.volatiles['substitute']) { @@ -180,9 +202,12 @@ exports.BattleStatuses = { }, }, flinch: { + name: 'flinch', + id: 'flinch', + num: 0, duration: 1, onBeforeMovePriority: 4, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { if (!this.runEvent('Flinch', pokemon)) { return; } @@ -191,8 +216,11 @@ exports.BattleStatuses = { }, }, trapped: { + name: 'trapped', + id: 'trapped', + num: 0, noCopy: true, - onTrapPokemon: function (pokemon) { + onTrapPokemon(pokemon) { if (!this.effectData.source || !this.effectData.source.isActive) { delete pokemon.volatiles['trapped']; return; @@ -201,34 +229,39 @@ exports.BattleStatuses = { }, }, partiallytrapped: { + name: 'partiallytrapped', + id: 'partiallytrapped', + num: 0, duration: 2, onBeforeMovePriority: 4, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { this.add('cant', pokemon, 'partiallytrapped'); return false; }, }, partialtrappinglock: { - durationCallback: function () { - let duration = [2, 2, 2, 3, 3, 3, 4, 5][this.random(8)]; + name: 'partialtrappinglock', + id: 'partialtrappinglock', + num: 0, + durationCallback() { + let duration = this.sample([2, 2, 2, 3, 3, 3, 4, 5]); return duration; }, - onResidual: function (target) { - if (target.lastMove === 'struggle' || target.status === 'slp') { + onResidual(target) { + if (target.lastMove && target.lastMove.id === 'struggle' || target.status === 'slp') { delete target.volatiles['partialtrappinglock']; } }, - onStart: function (target, source, effect) { + onStart(target, source, effect) { this.effectData.move = effect.id; }, - onDisableMove: function (pokemon) { + onDisableMove(pokemon) { if (!pokemon.hasMove(this.effectData.move)) { return; } - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id !== this.effectData.move) { - pokemon.disableMove(moves[i].id); + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id); } } }, @@ -236,18 +269,21 @@ exports.BattleStatuses = { lockedmove: { // Outrage, Thrash, Petal Dance... inherit: true, - durationCallback: function () { + durationCallback() { return this.random(3, 5); }, }, stall: { + name: 'stall', + id: 'stall', + num: 0, // Protect, Detect, Endure counter duration: 2, counterMax: 256, - onStart: function () { + onStart() { this.effectData.counter = 2; }, - onStallMove: function () { + onStallMove() { // this.effectData.counter should never be undefined here. // However, just in case, use 1 if it is undefined. let counter = this.effectData.counter || 1; @@ -256,9 +292,10 @@ exports.BattleStatuses = { return (this.random() * 4294967296 < 1); } this.debug("Success chance: " + Math.round(100 / counter) + "%"); - return (this.random(counter) === 0); + return this.randomChance(1, counter); }, - onRestart: function () { + onRestart() { + // @ts-ignore if (this.effectData.counter < this.effect.counterMax) { this.effectData.counter *= 2; } @@ -266,3 +303,5 @@ exports.BattleStatuses = { }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/mods/gen1/typechart.js b/data/mods/gen1/typechart.js similarity index 94% rename from mods/gen1/typechart.js rename to data/mods/gen1/typechart.js index 289307d5e3f85..47662214fc3c2 100644 --- a/mods/gen1/typechart.js +++ b/data/mods/gen1/typechart.js @@ -8,7 +8,8 @@ 'use strict'; -exports.BattleTypeChart = { +/**@type {{[k: string]: ModdedTypeData | null}} */ +let BattleTypeChart = { "Bug": { damageTaken: { "Bug": 0, @@ -131,3 +132,5 @@ exports.BattleTypeChart = { "Dark": null, "Steel": null, }; + +exports.BattleTypeChart = BattleTypeChart; diff --git a/mods/gen2/README.md b/data/mods/gen2/README.md similarity index 100% rename from mods/gen2/README.md rename to data/mods/gen2/README.md diff --git a/mods/gen2/formats-data.js b/data/mods/gen2/formats-data.js similarity index 87% rename from mods/gen2/formats-data.js rename to data/mods/gen2/formats-data.js index 2837358c3e283..75e8a748a976c 100644 --- a/mods/gen2/formats-data.js +++ b/data/mods/gen2/formats-data.js @@ -1,9 +1,10 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "growl", "ancientpower"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "growl", "ancientpower"]}, ], tier: "LC", }, @@ -41,13 +42,13 @@ exports.BattleFormatsData = { fillerMoves2: ["sleeppowder", "sleeppowder", "synthesis"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["poisonpowder", "sleeppowder", "razorleaf", "sweetscent"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["poisonpowder", "sleeppowder", "razorleaf", "sweetscent"]}, ], - tier: "BL", + tier: "UUBL", }, charmander: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "growl", "crunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "growl", "crunch"]}, ], tier: "LC", }, @@ -73,13 +74,13 @@ exports.BattleFormatsData = { baseMove1: "fireblast", baseMove2: "earthquake", baseMove3: "rest", baseMove4: "sleeptalk", }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["rage", "scaryface", "flamethrower", "wingattack"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["rage", "scaryface", "flamethrower", "wingattack"]}, ], - tier: "BL", + tier: "UUBL", }, squirtle: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "tailwhip", "zapcannon"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "tailwhip", "zapcannon"]}, ], tier: "LC", }, @@ -113,7 +114,7 @@ exports.BattleFormatsData = { fillerMoves2: ["earthquake", "zapcannon"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["watergun", "bite", "rapidspin", "protect"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["watergun", "bite", "rapidspin", "protect"]}, ], tier: "UU", }, @@ -223,7 +224,7 @@ exports.BattleFormatsData = { }, spearow: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["peck", "growl", "sonicboom"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["peck", "growl", "sonicboom"]}, ], tier: "LC", }, @@ -254,7 +255,7 @@ exports.BattleFormatsData = { fillerMoves1: ["return", "return", "doubleedge"], }, eventPokemon: [ - {"generation": 1, "level": 20, "moves":["growl", "leer", "furyattack", "payday"]}, + {"generation": 1, "level": 20, "moves": ["growl", "leer", "furyattack", "payday"]}, ], tier: "NU", }, @@ -277,20 +278,20 @@ exports.BattleFormatsData = { }, pichu: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "dizzypunch"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "petaldance"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "scaryface"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["thundershock", "charm", "sing"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "petaldance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "scaryface"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["thundershock", "charm", "sing"]}, ], tier: "LC", }, pikachu: { eventPokemon: [ - {"generation": 1, "level": 5, "moves":["surf"]}, - {"generation": 1, "level": 5, "moves":["fly"]}, - {"generation": 1, "level": 5, "moves":["thundershock", "growl", "surf"]}, + {"generation": 1, "level": 5, "moves": ["surf"]}, + {"generation": 1, "level": 5, "moves": ["fly"]}, + {"generation": 1, "level": 5, "moves": ["thundershock", "growl", "surf"]}, ], - tier: "NFE", + tier: "UU", }, raichu: { randomSet1: { // Attacker @@ -305,7 +306,7 @@ exports.BattleFormatsData = { baseMove1: "thunderbolt", baseMove2: "surf", baseMove3: "thunderwave", fillerMoves1: ["reflect", "lightscreen"], }, - tier: "UU", + tier: "NU", }, sandshrew: { tier: "LC", @@ -321,9 +322,9 @@ exports.BattleFormatsData = { }, nidoranf: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["growl", "tackle", "lovelykiss"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["growl", "tackle", "moonlight"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["growl", "tackle", "sweetkiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["growl", "tackle", "lovelykiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["growl", "tackle", "moonlight"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["growl", "tackle", "sweetkiss"]}, ], tier: "LC", }, @@ -356,9 +357,9 @@ exports.BattleFormatsData = { }, nidoranm: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["leer", "tackle", "lovelykiss"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["leer", "tackle", "morningsun"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["leer", "tackle", "sweetkiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["leer", "tackle", "lovelykiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["leer", "tackle", "morningsun"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["leer", "tackle", "sweetkiss"]}, ], tier: "LC", }, @@ -378,10 +379,10 @@ exports.BattleFormatsData = { }, cleffa: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "charm", "encore", "petaldance"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "charm", "encore", "scaryface"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "charm", "encore", "swift"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "charm", "encore", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "charm", "encore", "petaldance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "charm", "encore", "scaryface"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "charm", "encore", "swift"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "charm", "encore", "dizzypunch"]}, ], tier: "LC", }, @@ -417,7 +418,7 @@ exports.BattleFormatsData = { fillerMoves1: ["icebeam", "fireblast"], fillerMoves2: ["reflect", "lightscreen"], }, - tier: "BL", + tier: "UUBL", }, vulpix: { tier: "LC", @@ -436,14 +437,14 @@ exports.BattleFormatsData = { baseMove1: "confuseray", baseMove2: "toxic", baseMove3: "substitute", fillerMoves1: ["flamethrower", "fireblast"], }, - tier: "UU", + tier: "NU", }, igglybuff: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["sing", "charm", "defensecurl", "mimic"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["sing", "charm", "defensecurl", "petaldance"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["sing", "charm", "defensecurl", "scaryface"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["sing", "charm", "defensecurl", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["sing", "charm", "defensecurl", "mimic"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["sing", "charm", "defensecurl", "petaldance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["sing", "charm", "defensecurl", "scaryface"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["sing", "charm", "defensecurl", "dizzypunch"]}, ], tier: "LC", }, @@ -472,11 +473,11 @@ exports.BattleFormatsData = { fillerMoves1: ["doubleedge", "doubleedge", "bodyslam"], fillerMoves2: ["curse", "curse", "curse", "icebeam", "fireblast"], }, - tier: "UU", + tier: "NU", }, zubat: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["leechlife", "flail"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["leechlife", "flail"]}, ], tier: "LC", }, @@ -513,7 +514,7 @@ exports.BattleFormatsData = { }, oddish: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["absorb", "leechseed"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["absorb", "leechseed"]}, ], tier: "LC", }, @@ -562,7 +563,7 @@ exports.BattleFormatsData = { }, paras: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "synthesis"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "synthesis"]}, ], tier: "LC", }, @@ -661,9 +662,9 @@ exports.BattleFormatsData = { }, psyduck: { eventPokemon: [ - {"generation": 1, "level": 15, "moves":["scratch", "amnesia"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "tailwhip", "petaldance"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "tailwhip", "triattack"]}, + {"generation": 1, "level": 15, "moves": ["scratch", "amnesia"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "tailwhip", "petaldance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "tailwhip", "triattack"]}, ], tier: "LC", }, @@ -675,7 +676,7 @@ exports.BattleFormatsData = { fillerMoves1: ["surf", "surf", "hydropump"], fillerMoves2: ["hypnosis", "hypnosis", "hypnosis", "hiddenpowerelectric", "psychic"], }, - tier: "UU", + tier: "NU", }, mankey: { tier: "LC", @@ -700,7 +701,7 @@ exports.BattleFormatsData = { fillerMoves1: ["crosschop", "meditate"], fillerMoves2: ["rockslide", "hiddenpowerghost"], }, - tier: "UU", + tier: "NU", }, growlithe: { tier: "LC", @@ -730,9 +731,9 @@ exports.BattleFormatsData = { }, poliwag: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["bubble", "growth"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["bubble", "lovelykiss"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["bubble", "sweetkiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bubble", "growth"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bubble", "lovelykiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bubble", "sweetkiss"]}, ], tier: "LC", }, @@ -759,7 +760,7 @@ exports.BattleFormatsData = { fillerMoves2: ["icebeam", "icebeam", "bodyslam"], fillerMoves3: ["lovelykiss", "lovelykiss", "lovelykiss", "lovelykiss", "dynamicpunch", "bodyslam", "counter"], }, - tier: "UU", + tier: "NU", }, politoed: { randomSet1: { // Belly Drum @@ -794,7 +795,7 @@ exports.BattleFormatsData = { }, abra: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["teleport", "foresight"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["teleport", "foresight"]}, ], tier: "LC", }, @@ -816,12 +817,12 @@ exports.BattleFormatsData = { fillerMoves1: ["reflect", "reflect", "lightscreen", "thunderwave"], fillerMoves2: ["thunderwave", "thunderwave", "thunderpunch", "icepunch", "firepunch", "encore"], }, - tier: "BL", + tier: "UUBL", }, machop: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["lowkick", "leer", "falseswipe"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["lowkick", "leer", "thrash"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["lowkick", "leer", "falseswipe"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["lowkick", "leer", "thrash"]}, ], tier: "LC", }, @@ -850,8 +851,8 @@ exports.BattleFormatsData = { }, bellsprout: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["vinewhip", "lovelykiss"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["vinewhip", "sweetkiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["vinewhip", "lovelykiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["vinewhip", "sweetkiss"]}, ], tier: "LC", }, @@ -870,7 +871,7 @@ exports.BattleFormatsData = { }, tentacool: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["poisonsting", "confuseray"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["poisonsting", "confuseray"]}, ], tier: "LC", }, @@ -895,11 +896,11 @@ exports.BattleFormatsData = { fillerMoves1: ["hydropump", "surf"], fillerMoves2: ["mirrorcoat", "rapidspin", "haze"], }, - tier: "BL", + tier: "UUBL", }, geodude: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "rapidspin"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "rapidspin"]}, ], tier: "LC", }, @@ -913,11 +914,11 @@ exports.BattleFormatsData = { baseMove1: "earthquake", baseMove2: "rockslide", baseMove3: "explosion", fillerMoves1: ["curse", "hiddenpowerbug", "fireblast", "rapidspin", "roar"], }, - tier: "BL", + tier: "UUBL", }, ponyta: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "growl", "lowkick"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "growl", "lowkick"]}, ], tier: "LC", }, @@ -941,7 +942,7 @@ exports.BattleFormatsData = { baseMove1: "rest", baseMove2: "sleeptalk", baseMove3: "fireblast", baseMove4: "bodyslam", }, eventPokemon: [ - {"generation": 1, "level": 40, "moves":["ember", "firespin", "stomp", "payday"]}, + {"generation": 1, "level": 40, "moves": ["ember", "firespin", "stomp", "payday"]}, ], tier: "NU", }, @@ -992,7 +993,7 @@ exports.BattleFormatsData = { }, magnemite: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "agility"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "agility"]}, ], tier: "LC", }, @@ -1039,14 +1040,14 @@ exports.BattleFormatsData = { baseMove1: "swordsdance", baseMove2: "agility", baseMove3: "endure", baseMove4: "flail", }, eventPokemon: [ - {"generation": 2, "level": 5, "moves":["batonpass", "swordsdance", "agility", "slash"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["peck", "furycutter"]}, + {"generation": 2, "level": 5, "moves": ["batonpass", "swordsdance", "agility", "slash"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["peck", "furycutter"]}, ], tier: "NU", }, doduo: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["peck", "growl", "lowkick"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["peck", "growl", "lowkick"]}, ], tier: "LC", }, @@ -1081,7 +1082,7 @@ exports.BattleFormatsData = { }, seel: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["headbutt", "growl", "flail"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["headbutt", "growl", "flail"]}, ], tier: "LC", }, @@ -1127,7 +1128,7 @@ exports.BattleFormatsData = { item: ["leftovers"], baseMove1: "curse", baseMove2: "sludgebomb", baseMove3: "rest", baseMove4: "sleeptalk", }, - tier: "BL", + tier: "UUBL", }, shellder: { tier: "LC", @@ -1146,7 +1147,7 @@ exports.BattleFormatsData = { tier: "LC", }, haunter: { - tier: "NFE", + tier: "UU", }, gengar: { randomSet1: { // Attacker @@ -1172,7 +1173,7 @@ exports.BattleFormatsData = { }, onix: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "screech", "sharpen"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "screech", "sharpen"]}, ], tier: "LC", }, @@ -1199,7 +1200,7 @@ exports.BattleFormatsData = { }, drowzee: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "hypnosis", "amnesia"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "hypnosis", "amnesia"]}, ], tier: "LC", }, @@ -1234,7 +1235,7 @@ exports.BattleFormatsData = { }, krabby: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["bubble", "leer", "metalclaw"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bubble", "leer", "metalclaw"]}, ], tier: "LC", }, @@ -1249,7 +1250,7 @@ exports.BattleFormatsData = { }, voltorb: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "agility"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "agility"]}, ], tier: "LC", }, @@ -1277,7 +1278,7 @@ exports.BattleFormatsData = { }, exeggcute: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["barrage", "hypnosis", "sweetscent"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["barrage", "hypnosis", "sweetscent"]}, ], tier: "LC", }, @@ -1313,7 +1314,7 @@ exports.BattleFormatsData = { }, cubone: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["growl", "tailwhip", "furyattack"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["growl", "tailwhip", "furyattack"]}, ], tier: "LC", }, @@ -1330,8 +1331,8 @@ exports.BattleFormatsData = { }, tyrogue: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "rage"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "rage"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "dizzypunch"]}, ], tier: "LC", }, @@ -1355,7 +1356,7 @@ exports.BattleFormatsData = { item: ["miracleberry"], baseMove1: "endure", baseMove2: "meditate", baseMove3: "reversal", baseMove4: "hiddenpowerghost", }, - tier: "UU", + tier: "NU", }, hitmonchan: { randomSet1: { // Attacker @@ -1427,7 +1428,7 @@ exports.BattleFormatsData = { fillerMoves4: ["fireblast", "earthquake", "counter", "rest"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["lick", "doubleslap"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["lick", "doubleslap"]}, ], tier: "NU", }, @@ -1447,7 +1448,7 @@ exports.BattleFormatsData = { baseMove1: "sludgebomb", baseMove2: "curse", baseMove3: "explosion", fillerMoves1: ["thunderbolt", "fireblast"], }, - tier: "UU", + tier: "NU", }, rhyhorn: { tier: "LC", @@ -1465,11 +1466,11 @@ exports.BattleFormatsData = { item: ["leftovers"], baseMove1: "earthquake", baseMove2: "rockslide", baseMove3: "rest", baseMove4: "sleeptalk", }, - tier: "BL", + tier: "OU", }, chansey: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "sweetscent"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "sweetscent"]}, ], tier: "UU", }, @@ -1521,7 +1522,7 @@ exports.BattleFormatsData = { baseMove1: "sleeppowder", baseMove2: "swordsdance", baseMove3: "gigadrain", baseMove4: "bodyslam", }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["constrict", "sleeppowder", "synthesis"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["constrict", "sleeppowder", "synthesis"]}, ], tier: "NU", }, @@ -1547,13 +1548,13 @@ exports.BattleFormatsData = { fillerMoves2: ["shadowball", "counter", "dynamicpunch", "doubleedge", "substitute"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["cometpunch", "feintattack"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["cometpunch", "feintattack"]}, ], - tier: "BL", + tier: "UUBL", }, horsea: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["bubble", "haze"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bubble", "haze"]}, ], tier: "LC", }, @@ -1585,11 +1586,11 @@ exports.BattleFormatsData = { baseMove1: "curse", baseMove2: "return", baseMove3: "surf", fillerMoves1: ["hiddenpowerrock", "hiddenpowerbug"], }, - tier: "BL", + tier: "UUBL", }, goldeen: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["peck", "tailwhip", "swordsdance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["peck", "tailwhip", "swordsdance"]}, ], tier: "LC", }, @@ -1617,7 +1618,7 @@ exports.BattleFormatsData = { }, staryu: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "harden", "twister"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "harden", "twister"]}, ], tier: "LC", }, @@ -1674,9 +1675,9 @@ exports.BattleFormatsData = { fillerMoves1: ["icepunch", "firepunch", "hypnosis", "thunderwave", "encore"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["barrier", "mindreader"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["barrier", "mindreader"]}, ], - tier: "NU", + tier: "UU", }, scyther: { randomSet1: { // SD + 3 attacks @@ -1713,7 +1714,7 @@ exports.BattleFormatsData = { fillerMoves1: ["wingattack", "hiddenpowerrock", "hiddenpowerrock"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["quickattack", "leer", "sonicboom"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["quickattack", "leer", "sonicboom"]}, ], tier: "UU", }, @@ -1751,13 +1752,13 @@ exports.BattleFormatsData = { baseMove1: "swordsdance", baseMove2: "substitute", baseMove3: "batonpass", fillerMoves1: ["hiddenpowersteel", "hiddenpowersteel", "hiddenpowerbug", "hiddenpowerground", "return"], }, - tier: "BL", + tier: "UUBL", }, smoochum: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "lick", "metronome"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "lick", "petaldance"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["pound", "lick", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "lick", "metronome"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "lick", "petaldance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["pound", "lick", "dizzypunch"]}, ], tier: "LC", }, @@ -1784,12 +1785,12 @@ exports.BattleFormatsData = { baseMove1: "meanlook", baseMove2: "perishsong", baseMove3: "protect", fillerMoves1: ["icebeam", "icebeam", "substitute"], }, - tier: "BL", + tier: "UUBL", }, elekid: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["quickattack", "leer", "dizzypunch"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["quickattack", "leer", "pursuit"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["quickattack", "leer", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["quickattack", "leer", "pursuit"]}, ], tier: "LC", }, @@ -1818,8 +1819,8 @@ exports.BattleFormatsData = { }, magby: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["ember", "feintattack"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["ember", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["ember", "feintattack"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["ember", "dizzypunch"]}, ], tier: "LC", }, @@ -1838,7 +1839,7 @@ exports.BattleFormatsData = { fillerMoves1: ["thunderpunch", "thunderpunch", "hiddenpowergrass"], fillerMoves2: ["crosschop", "hiddenpowerice"], }, - tier: "UU", + tier: "NU", }, pinsir: { randomSet1: { // Swords Dance + 3 attacks @@ -1863,7 +1864,7 @@ exports.BattleFormatsData = { fillerMoves2: ["hiddenpowerbug", "hiddenpowerrock", "hiddenpowerground"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["vicegrip", "rockthrow"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["vicegrip", "rockthrow"]}, ], tier: "UU", }, @@ -1893,15 +1894,15 @@ exports.BattleFormatsData = { fillerMoves1: ["hiddenpowerbug", "irontail", "quickattack"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "tailwhip", "quickattack"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "tailwhip", "quickattack"]}, ], - tier: "BL", + tier: "UUBL", }, magikarp: { eventPokemon: [ - {"generation": 1, "level": 5, "moves":["dragonrage"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["splash", "bubble"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["splash", "reversal"]}, + {"generation": 1, "level": 5, "moves": ["dragonrage"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["splash", "bubble"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["splash", "reversal"]}, ], tier: "LC", }, @@ -1961,10 +1962,10 @@ exports.BattleFormatsData = { fillerMoves3: ["rest", "sing", "confuseray", "reflect"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["watergun", "growl", "sing", "bite"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["watergun", "growl", "sing", "futuresight"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["watergun", "growl", "sing", "bite"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["watergun", "growl", "sing", "futuresight"]}, ], - tier: "BL", + tier: "UUBL", }, ditto: { randomSet1: { // Transform @@ -1976,7 +1977,7 @@ exports.BattleFormatsData = { }, eevee: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "tailwhip", "growth"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "tailwhip", "growth"]}, ], tier: "LC", }, @@ -2069,7 +2070,7 @@ exports.BattleFormatsData = { baseMove1: "fireblast", baseMove2: "growth", baseMove3: "return", fillerMoves1: ["hiddenpowergrass", "zapcannon"], }, - tier: "UU", + tier: "NU", }, espeon: { randomSet1: { // Growth attacker w/o Sub @@ -2095,7 +2096,7 @@ exports.BattleFormatsData = { item: ["leftovers"], baseMove1: "growth", baseMove2: "psychic", baseMove3: "substitute", baseMove4: "batonpass", }, - tier: "BL", + tier: "UUBL", }, umbreon: { randomSet1: { // Annoyer @@ -2133,7 +2134,7 @@ exports.BattleFormatsData = { }, porygon: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "conversion", "barrier"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "conversion", "barrier"]}, ], tier: "LC", }, @@ -2151,11 +2152,11 @@ exports.BattleFormatsData = { fillerMoves1: ["return", "return", "doubleedge"], fillerMoves2: ["thunderbolt", "thunderbolt", "thunder", "thunderwave", "thunderwave"], }, - tier: "BL", + tier: "OU", }, omanyte: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["constrict", "withdraw", "rockthrow"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["constrict", "withdraw", "rockthrow"]}, ], tier: "LC", }, @@ -2185,7 +2186,7 @@ exports.BattleFormatsData = { }, kabuto: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "harden", "rockthrow"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "harden", "rockthrow"]}, ], tier: "LC", }, @@ -2223,9 +2224,9 @@ exports.BattleFormatsData = { fillerMoves1: ["hiddenpowerflying", "whirlwind"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["wingattack", "rockthrow"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["wingattack", "rockthrow"]}, ], - tier: "BL", + tier: "UUBL", }, snorlax: { randomSet1: { // Curse + EQ @@ -2255,9 +2256,9 @@ exports.BattleFormatsData = { baseMove1: "bellydrum", baseMove2: "return", baseMove3: "earthquake", baseMove4: "lovelykiss", }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "lovelykiss"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "splash"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "sweetkiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "lovelykiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "splash"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "sweetkiss"]}, ], tier: "OU", }, @@ -2276,9 +2277,9 @@ exports.BattleFormatsData = { fillerMoves1: ["toxic", "toxic", "toxic", "hiddenpowerelectric", "hiddenpowerflying", "return"], }, eventPokemon: [ - {"generation": 2, "level": 50, "shiny": true, "moves":["mist", "agility", "mindreader", "icebeam"]}, + {"generation": 2, "level": 50, "shiny": true, "moves": ["mist", "agility", "mindreader", "icebeam"]}, ], - tier: "BL", + tier: "UUBL", }, zapdos: { randomSet1: { // RestTalk @@ -2317,7 +2318,7 @@ exports.BattleFormatsData = { fillerMoves2: ["thunderwave", "thunderwave", "thunderwave", "toxic", "lightscreen", "reflect"], }, eventPokemon: [ - {"generation": 2, "level": 50, "shiny": true, "moves":["thunderwave", "agility", "detect", "drillpeck"]}, + {"generation": 2, "level": 50, "shiny": true, "moves": ["thunderwave", "agility", "detect", "drillpeck"]}, ], tier: "OU", }, @@ -2340,14 +2341,14 @@ exports.BattleFormatsData = { fillerMoves1: ["hiddenpowergrass", "hiddenpowergrass", "return"], }, eventPokemon: [ - {"generation": 2, "level": 50, "shiny": true, "moves":["firespin", "agility", "endure", "flamethrower"]}, + {"generation": 2, "level": 50, "shiny": true, "moves": ["firespin", "agility", "endure", "flamethrower"]}, ], - tier: "BL", + tier: "UUBL", }, dratini: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["wrap", "leer", "hydropump"]}, - {"generation": 2, "level": 15, "shiny": 1, "moves":["wrap", "thunderwave", "twister", "extremespeed"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["wrap", "leer", "hydropump"]}, + {"generation": 2, "level": 15, "shiny": 1, "moves": ["wrap", "thunderwave", "twister", "extremespeed"]}, ], tier: "LC", }, @@ -2378,7 +2379,7 @@ exports.BattleFormatsData = { fillerMoves1: ["reflect", "lightscreen"], fillerMoves2: ["rest", "rest", "icebeam"], }, - tier: "OU", + tier: "UUBL", }, mewtwo: { randomSet1: { // Attacker @@ -2403,7 +2404,7 @@ exports.BattleFormatsData = { fillerMoves2: ["reflect", "reflect", "icebeam", "thunderbolt", "fireblast"], }, eventPokemon: [ - {"generation": 2, "level": 70, "shiny": true, "moves":["psychup", "futuresight", "mist", "psychic"]}, + {"generation": 2, "level": 70, "shiny": true, "moves": ["psychup", "futuresight", "mist", "psychic"]}, ], tier: "Uber", }, @@ -2426,20 +2427,20 @@ exports.BattleFormatsData = { randomSet3: { // Defensive chance: 16, item: ["leftovers"], - baseMove1: "psychic", baseMove2: "recover", + baseMove1: "psychic", baseMove2: "softboiled", fillerMoves1: ["thunderwave", "thunderwave", "thunderwave", "reflect"], fillerMoves2: ["reflect", "reflect", "reflect", "reflect", "earthquake", "icebeam", "thunderbolt", "fireblast"], }, eventPokemon: [ - {"generation": 1, "level": 5, "moves":["pound"]}, - {"generation": 2, "level": 5, "moves":["pound"]}, + {"generation": 1, "level": 5, "moves": ["pound"]}, + {"generation": 2, "level": 5, "moves": ["pound"]}, ], eventOnly: true, tier: "Uber", }, chikorita: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "growl", "petaldance"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "growl", "petaldance"]}, ], tier: "LC", }, @@ -2470,13 +2471,13 @@ exports.BattleFormatsData = { fillerMoves4: ["synthesis", "synthesis", "synthesis", "leechseed", "leechseed"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["reflect", "poisonpowder", "synthesis", "bodyslam"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["reflect", "poisonpowder", "synthesis", "bodyslam"]}, ], - tier: "BL", + tier: "UUBL", }, cyndaquil: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "leer", "doubleedge"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "leer", "doubleedge"]}, ], tier: "LC", }, @@ -2502,13 +2503,13 @@ exports.BattleFormatsData = { fillerMoves1: ["earthquake", "thunderpunch"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["smokescreen", "ember", "quickattack", "flamewheel"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["smokescreen", "ember", "quickattack", "flamewheel"]}, ], - tier: "BL", + tier: "UUBL", }, totodile: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "leer", "submission"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "leer", "submission"]}, ], tier: "LC", }, @@ -2544,13 +2545,13 @@ exports.BattleFormatsData = { fillerMoves2: ["earthquake", "icebeam"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["watergun", "bite", "scaryface", "slash"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["watergun", "bite", "scaryface", "slash"]}, ], tier: "UU", }, sentret: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "defensecurl", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "defensecurl", "dizzypunch"]}, ], tier: "LC", }, @@ -2593,7 +2594,7 @@ exports.BattleFormatsData = { }, hoothoot: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "growl", "nightshade"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "growl", "nightshade"]}, ], tier: "LC", }, @@ -2623,7 +2624,7 @@ exports.BattleFormatsData = { }, ledyba: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "barrier"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "barrier"]}, ], tier: "LC", }, @@ -2660,7 +2661,7 @@ exports.BattleFormatsData = { }, spinarak: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["poisonsting", "stringshot", "growth"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["poisonsting", "stringshot", "growth"]}, ], tier: "LC", }, @@ -2679,7 +2680,7 @@ exports.BattleFormatsData = { fillerMoves1: ["curse", "agility"], fillerMoves2: ["return", "hiddenpowerground", "hiddenpowerbug", "nightshade", "nightshade"], }, - randomeSet3: { // Spider Web + BP + randomSet3: { // Spider Web + BP chance: 16, item: ["leftovers"], baseMove1: "curse", baseMove2: "spiderweb", baseMove3: "sludgebomb", baseMove4: "batonpass", @@ -2688,7 +2689,7 @@ exports.BattleFormatsData = { }, chinchou: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["bubble", "thunderwave", "supersonic", "lightscreen"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bubble", "thunderwave", "supersonic", "lightscreen"]}, ], tier: "LC", }, @@ -2742,7 +2743,7 @@ exports.BattleFormatsData = { }, natu: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["peck", "leer", "safeguard"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["peck", "leer", "safeguard"]}, ], tier: "LC", }, @@ -2791,9 +2792,9 @@ exports.BattleFormatsData = { }, marill: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "defensecurl", "dizzypunch"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "defensecurl", "hydropump"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "defensecurl", "scaryface"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "defensecurl", "dizzypunch"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "defensecurl", "hydropump"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "defensecurl", "scaryface"]}, ], tier: "LC", }, @@ -2836,13 +2837,13 @@ exports.BattleFormatsData = { baseMove1: "rockslide", baseMove2: "earthquake", baseMove3: "rest", baseMove4: "sleeptalk", }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["rockthrow", "mimic", "substitute"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["rockthrow", "mimic", "substitute"]}, ], tier: "NU", }, hoppip: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["splash", "synthesis", "tailwhip", "agility"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["splash", "synthesis", "tailwhip", "agility"]}, ], tier: "LC", }, @@ -2895,13 +2896,13 @@ exports.BattleFormatsData = { fillerMoves3: ["hiddenpowerground", "shadowball", "irontail", "thunderbolt", "thunder"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "tailwhip", "mimic"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "tailwhip", "mimic"]}, ], tier: "NU", }, sunkern: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["absorb", "growth", "splash"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["absorb", "growth", "splash"]}, ], tier: "LC", }, @@ -2938,15 +2939,15 @@ exports.BattleFormatsData = { fillerMoves3: ["whirlwind", "whirlwind", "sweetkiss"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "foresight", "steelwing"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "foresight", "sweetkiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "foresight", "steelwing"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "foresight", "sweetkiss"]}, ], tier: "NU", }, wooper: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["watergun", "tailwhip", "bellydrum"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["watergun", "tailwhip", "scaryface"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["watergun", "tailwhip", "bellydrum"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["watergun", "tailwhip", "scaryface"]}, ], tier: "LC", }, @@ -2988,7 +2989,7 @@ exports.BattleFormatsData = { fillerMoves2: ["pursuit", "nightshade"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["peck", "beatup"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["peck", "beatup"]}, ], tier: "NU", }, @@ -3008,7 +3009,7 @@ exports.BattleFormatsData = { fillerMoves4: ["destinybond", "rest", "painsplit", "painsplit"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["growl", "hypnosis"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["growl", "hypnosis"]}, ], tier: "OU", }, @@ -3044,7 +3045,7 @@ exports.BattleFormatsData = { fillerMoves2: ["mimic", "mimic", "safeguard", "safeguard", "destinybond"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["mirrorcoat", "safeguard", "destinybond", "mimic"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["mirrorcoat", "safeguard", "destinybond", "mimic"]}, ], tier: "NU", }, @@ -3075,7 +3076,7 @@ exports.BattleFormatsData = { }, pineco: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "protect", "substitute"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "protect", "substitute"]}, ], tier: "LC", }, @@ -3119,8 +3120,8 @@ exports.BattleFormatsData = { fillerMoves1: ["thunderbolt", "thunder", "curse", "curse", "flamethrower", "irontail"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["rage", "defensecurl", "furyattack"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["rage", "defensecurl", "horndrill"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["rage", "defensecurl", "furyattack"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["rage", "defensecurl", "horndrill"]}, ], tier: "NU", }, @@ -3137,13 +3138,13 @@ exports.BattleFormatsData = { baseMove1: "earthquake", baseMove2: "wingattack", baseMove3: "hiddenpowerrock", baseMove4: "thief", }, eventPokemon: [ - {"generation": 2, "level": 5, "moves":["earthquake", "poisonsting", "counter", "wingattack"]}, + {"generation": 2, "level": 5, "moves": ["earthquake", "poisonsting", "counter", "wingattack"]}, ], tier: "UU", }, snubbull: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "scaryface", "tailwhip", "lovelykiss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "scaryface", "tailwhip", "lovelykiss"]}, ], tier: "LC", }, @@ -3184,7 +3185,7 @@ exports.BattleFormatsData = { fillerMoves2: ["curse", "curse", "curse", "haze"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "poisonsting", "doubleedge"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "poisonsting", "doubleedge"]}, ], tier: "UU", }, @@ -3216,7 +3217,7 @@ exports.BattleFormatsData = { fillerMoves1: ["earthquake", "earthquake", "curse"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "leer", "seismictoss"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "leer", "seismictoss"]}, ], tier: "OU", }, @@ -3228,13 +3229,13 @@ exports.BattleFormatsData = { fillerMoves1: ["irontail", "irontail", "dynamicpunch", "dynamicpunch", "counter", "curse"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "leer", "moonlight"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "leer", "moonlight"]}, ], tier: "NU", }, teddiursa: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["scratch", "leer", "sweetscent"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["scratch", "leer", "sweetscent"]}, ], tier: "LC", }, @@ -3262,7 +3263,7 @@ exports.BattleFormatsData = { baseMove1: "rest", baseMove2: "sleeptalk", baseMove3: "return", fillerMoves2: ["curse", "earthquake"], }, - tier: "BL", + tier: "UUBL", }, slugma: { tier: "LC", @@ -3289,7 +3290,7 @@ exports.BattleFormatsData = { }, swinub: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "whirlwind"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "whirlwind"]}, ], tier: "LC", }, @@ -3328,8 +3329,8 @@ exports.BattleFormatsData = { }, remoraid: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["watergun", "amnesia"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["watergun", "mist"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["watergun", "amnesia"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["watergun", "mist"]}, ], tier: "LC", }, @@ -3360,8 +3361,8 @@ exports.BattleFormatsData = { fillerMoves1: ["hiddenpowerelectric", "hiddenpowergrass", "hiddenpowerflying", "present", "sleeptalk"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["present", "payday"]}, - {"generation": 2, "level": 5, "shiny": 1, "moves":["present", "spikes"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["present", "payday"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["present", "spikes"]}, ], tier: "NU", }, @@ -3381,7 +3382,7 @@ exports.BattleFormatsData = { fillerMoves3: ["confuseray", "haze", "rest", "toxic"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "bubble", "gust"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "bubble", "gust"]}, ], tier: "NU", }, @@ -3398,7 +3399,7 @@ exports.BattleFormatsData = { baseMove1: "drillpeck", baseMove2: "whirlwind", baseMove3: "rest", baseMove4: "thief", }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["leer", "peck", "furycutter"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["leer", "peck", "furycutter"]}, ], tier: "OU", }, @@ -3430,12 +3431,12 @@ exports.BattleFormatsData = { baseMove1: "fireblast", baseMove2: "crunch", baseMove3: "thief", fillerMoves1: ["counter", "pursuit", "pursuit", "hiddenpowergrass"], }, - tier: "BL", + tier: "UUBL", }, phanpy: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "growl", "absorb"]}, - {"generation": 2, "level": 5, "moves":["tackle", "growl", "encore"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "growl", "absorb"]}, + {"generation": 2, "level": 5, "moves": ["tackle", "growl", "encore"]}, ], tier: "LC", }, @@ -3459,7 +3460,7 @@ exports.BattleFormatsData = { fillerMoves1: ["bodyslam", "bodyslam", "hiddenpowerbug"], fillerMoves2: ["rapidspin", "roar", "roar", "hiddenpowerbug"], }, - tier: "BL", + tier: "UUBL", }, stantler: { randomSet1: { // Attacker @@ -3486,7 +3487,7 @@ exports.BattleFormatsData = { baseMove1: "return", baseMove2: "earthquake", baseMove3: "rest", baseMove4: "sleeptalk", }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "safeguard"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "safeguard"]}, ], tier: "NU", }, @@ -3511,7 +3512,7 @@ exports.BattleFormatsData = { fillerMoves1: ["counter", "mirrorcoat", "destinybond", "recover", "encore", "disable"], fillerMoves2: ["destinybond", "spikes", "substitute", "recover", "encore", "disable", "healbell"], }, - tier: "BL", + tier: "UUBL", }, miltank: { randomSet3: { // Standard @@ -3521,7 +3522,7 @@ exports.BattleFormatsData = { fillerMoves1: ["earthquake", "earthquake", "curse", "toxic"], }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["tackle", "growl", "megakick"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["tackle", "growl", "megakick"]}, ], tier: "OU", }, @@ -3545,7 +3546,7 @@ exports.BattleFormatsData = { fillerMoves1: ["rest", "roar", "reflect", "toxic"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["leer", "thundershock", "roar", "quickattack"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["leer", "thundershock", "roar", "quickattack"]}, ], tier: "OU", }, @@ -3566,9 +3567,9 @@ exports.BattleFormatsData = { baseMove1: "fireblast", baseMove2: "return", baseMove3: "sunnyday", baseMove4: "solarbeam", }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["leer", "ember", "roar", "firespin"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["leer", "ember", "roar", "firespin"]}, ], - tier: "BL", + tier: "UUBL", }, suicune: { randomSet1: { // RestTalk @@ -3585,13 +3586,13 @@ exports.BattleFormatsData = { fillerMoves2: ["roar", "roar", "mirrorcoat"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["leer", "watergun", "roar", "gust"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["leer", "watergun", "roar", "gust"]}, ], tier: "OU", }, larvitar: { eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["bite", "leer", "rage"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["bite", "leer", "rage"]}, ], tier: "LC", }, @@ -3637,7 +3638,7 @@ exports.BattleFormatsData = { fillerMoves3: ["recover", "recover", "rest"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["aeroblast", "safeguard", "gust", "recover"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["aeroblast", "safeguard", "gust", "recover"]}, ], tier: "Uber", }, @@ -3650,7 +3651,7 @@ exports.BattleFormatsData = { fillerMoves2: ["thunderbolt", "thunder"], }, eventPokemon: [ - {"generation": 2, "level": 40, "shiny": true, "moves":["sacredfire", "safeguard", "gust", "recover"]}, + {"generation": 2, "level": 40, "shiny": true, "moves": ["sacredfire", "safeguard", "gust", "recover"]}, ], tier: "Uber", }, @@ -3667,9 +3668,11 @@ exports.BattleFormatsData = { baseMove1: "healbell", baseMove2: "recover", baseMove3: "curse", baseMove4: "batonpass", }, eventPokemon: [ - {"generation": 2, "level": 5, "shiny": 1, "moves":["leechseed", "confusion", "healbell", "recover"]}, + {"generation": 2, "level": 5, "shiny": 1, "moves": ["leechseed", "confusion", "healbell", "recover"]}, ], eventOnly: true, tier: "Uber", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/mods/gen2/items.js b/data/mods/gen2/items.js new file mode 100644 index 0000000000000..f42302ce65ed9 --- /dev/null +++ b/data/mods/gen2/items.js @@ -0,0 +1,158 @@ +'use strict'; + +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { + berryjuice: { + inherit: true, + isUnreleased: false, + }, + brightpowder: { + inherit: true, + desc: "An attack against the holder has its accuracy out of 255 lowered by 20.", + onModifyAccuracy(accuracy) { + if (typeof accuracy !== 'number') return; + this.debug('brightpowder - decreasing accuracy'); + return accuracy - 20; + }, + }, + dragonfang: { + inherit: true, + desc: "No competitive use.", + onBasePower() {}, + }, + dragonscale: { + inherit: true, + onBasePower(basePower, user, target, move) { + if (move.type === 'Dragon') { + return basePower * 1.1; + } + }, + desc: "Holder's Dragon-type attacks have 1.1x power. Evolves Seadra (trade).", + }, + focusband: { + inherit: true, + desc: "Holder has a ~11.7% chance to survive an attack that would KO it with 1 HP.", + onDamage(damage, target, source, effect) { + if (this.randomChance(30, 256) && damage >= target.hp && effect && effect.effectType === 'Move') { + this.add('-activate', target, 'item: Focus Band'); + return target.hp - 1; + } + }, + }, + kingsrock: { + inherit: true, + onModifyMove(move) { + let affectedByKingsRock = ['absorb', 'aeroblast', 'barrage', 'beatup', 'bide', 'bonerush', 'bonemerang', 'cometpunch', 'counter', 'crabhammer', 'crosschop', 'cut', 'dig', 'doublekick', 'doubleslap', 'doubleedge', 'dragonrage', 'drillpeck', 'eggbomb', 'explosion', 'extremespeed', 'falseswipe', 'feintattack', 'flail', 'fly', 'frustration', 'furyattack', 'furycutter', 'furyswipes', 'gigadrain', 'hiddenpower', 'highjumpkick', 'hornattack', 'hydropump', 'jumpkick', 'karatechop', 'leechlife', 'machpunch', 'magnitude', 'megadrain', 'megakick', 'megapunch', 'megahorn', 'mirrorcoat', 'nightshade', 'outrage', 'payday', 'peck', 'petaldance', 'pinmissile', 'pound', 'present', 'pursuit', 'psywave', 'quickattack', 'rage', 'rapidspin', 'razorleaf', 'razorwind', 'return', 'reversal', 'rockthrow', 'rollout', 'scratch', 'seismictoss', 'selfdestruct', 'skullbash', 'skyattack', 'slam', 'slash', 'snore', 'solarbeam', 'sonicboom', 'spikecannon', 'strength', 'struggle', 'submission', 'superfang', 'surf', 'swift', 'tackle', 'takedown', 'thief', 'thrash', 'triplekick', 'twineedle', 'vicegrip', 'vinewhip', 'vitalthrow', 'watergun', 'waterfall', 'wingattack']; + if (affectedByKingsRock.includes(move.id)) { + if (!move.secondaries) move.secondaries = []; + // The kingsrock flag allows for differentiation from Snore, + // which can flinch and is also affected by King's Rock + move.secondaries.push({ + chance: 12, + volatileStatus: 'flinch', + kingsrock: true, + }); + } + }, + }, + lightball: { + inherit: true, + // In Gen 2 this happens in stat calculation directly. + onModifySpA() {}, + }, + luckypunch: { + inherit: true, + desc: "If held by a Chansey, its critical hit ratio is always at stage 2. (25% crit rate)", + onModifyCritRatioPriority: -1, + onModifyCritRatio(critRatio, user) { + if (user.template.species === 'Chansey') { + return 3; + } + }, + }, + metalpowder: { + inherit: true, + desc: "If held by a Ditto, its Defense and Sp. Def are 1.5x, even while Transformed.", + // In Gen 2 this happens in stat calculation directly. + onModifyDef() {}, + onModifySpD() {}, + }, + quickclaw: { + inherit: true, + desc: "Each turn, holder has a ~23.4% chance to move first in its priority bracket.", + onModifyPriority(priority, pokemon) { + if (this.randomChance(60, 256)) { + return Math.round(priority) + 0.1; + } + }, + }, + stick: { + inherit: true, + desc: "If held by a Farfetch'd, its critical hit ratio is always at stage 2. (25% crit rate)", + onModifyCritRatioPriority: -1, + onModifyCritRatio(critRatio, user) { + if (user.template.species === 'Farfetch\'d') { + return 3; + } + }, + }, + thickclub: { + inherit: true, + // In Gen 2 this happens in stat calculation directly. + onModifyAtk() {}, + }, + berserkgene: { + inherit: true, + isNonstandard: false, + }, + berry: { + inherit: true, + isNonstandard: false, + }, + bitterberry: { + inherit: true, + isNonstandard: false, + }, + burntberry: { + inherit: true, + isNonstandard: false, + }, + goldberry: { + inherit: true, + isNonstandard: false, + }, + iceberry: { + inherit: true, + isNonstandard: false, + }, + mintberry: { + inherit: true, + isNonstandard: false, + }, + miracleberry: { + inherit: true, + isNonstandard: false, + }, + mysteryberry: { + inherit: true, + isNonstandard: false, + }, + pinkbow: { + inherit: true, + isNonstandard: false, + }, + polkadotbow: { + inherit: true, + isNonstandard: false, + }, + przcureberry: { + inherit: true, + isNonstandard: false, + }, + psncureberry: { + inherit: true, + isNonstandard: false, + }, +}; + +exports.BattleItems = BattleItems; diff --git a/mods/gen2/learnsets.js b/data/mods/gen2/learnsets.js similarity index 99% rename from mods/gen2/learnsets.js rename to data/mods/gen2/learnsets.js index 65b5a525b2981..3a137e088d389 100644 --- a/mods/gen2/learnsets.js +++ b/data/mods/gen2/learnsets.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleLearnsets = { +/**@type {{[k: string]: {learnset: {[k: string]: MoveSource[]}}}} */ +let BattleLearnsets = { bulbasaur: {learnset: { ancientpower: ["2S0"], attract: ["2M"], @@ -9948,6 +9949,7 @@ exports.BattleLearnsets = { icepunch: ["2M"], leer: ["2E"], lick: ["2L19", "2E"], + lovelykiss: ["2S0"], metronome: ["2E"], mudslap: ["2M"], present: ["2E"], @@ -9967,7 +9969,6 @@ exports.BattleLearnsets = { strength: ["2M"], sunnyday: ["2M"], swagger: ["2M"], - sweetkiss: ["2S0"], tackle: ["2L1", "2S0"], tailwhip: ["2L4", "2S0"], takedown: ["2L43"], @@ -11249,3 +11250,5 @@ exports.BattleLearnsets = { toxic: ["2M"], }}, }; + +exports.BattleLearnsets = BattleLearnsets; diff --git a/data/mods/gen2/moves.js b/data/mods/gen2/moves.js new file mode 100644 index 0000000000000..e93408593a4be --- /dev/null +++ b/data/mods/gen2/moves.js @@ -0,0 +1,1037 @@ +/** + * Gen 2 moves + */ + +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + absorb: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If the target has a substitute, this move misses.", + }, + acid: { + inherit: true, + shortDesc: "10% chance to lower the target's Defense by 1.", + }, + aeroblast: { + inherit: true, + critRatio: 3, + }, + attract: { + inherit: true, + desc: "Causes the target to become infatuated, making it unable to attack 50% of the time. Fails if both the user and the target are the same gender, if either is genderless, or if the target is already infatuated. The effect ends when either the user or the target is no longer active.", + }, + beatup: { + inherit: true, + desc: "Deals typeless damage. Hits one time for each unfainted Pokemon without a major status condition in the user's party. For each hit, the damage formula uses the participating Pokemon's level, its base Attack as the Attack stat, the target's base Defense as the Defense stat, and ignores stat stages and other effects that modify Attack or Defense. Fails if no party members can participate.", + onModifyMove(move, pokemon) { + move.type = '???'; + move.category = 'Physical'; + move.allies = pokemon.side.pokemon.filter(ally => !ally.fainted && !ally.status); + move.multihit = move.allies.length; + }, + }, + bellydrum: { + inherit: true, + onHit(target) { + if (target.boosts.atk >= 6) { + return false; + } + if (target.hp <= target.maxhp / 2) { + this.boost({atk: 2}, null, null, this.getEffect('bellydrum2')); + return false; + } + this.directDamage(target.maxhp / 2); + let originalStage = target.boosts.atk; + let currentStage = originalStage; + let boosts = 0; + let loopStage = 0; + while (currentStage < 6) { + loopStage = currentStage; + currentStage++; + if (currentStage < 6) currentStage++; + target.boosts.atk = loopStage; + if (target.getStat('atk', false, true) < 999) { + target.boosts.atk = currentStage; + continue; + } + target.boosts.atk = currentStage - 1; + break; + } + boosts = target.boosts.atk - originalStage; + target.boosts.atk = originalStage; + this.boost({atk: boosts}); + }, + }, + bide: { + inherit: true, + desc: "The user spends two or three turns locked into this move and then, on the second or third turn after using this move, the user attacks the opponent, inflicting double the damage in HP it lost during those turns. If the user is prevented from moving during this move's use, the effect ends. This move does not ignore type immunity.", + shortDesc: "Waits 2-3 turns; deals double the damage taken.", + effect: { + duration: 3, + durationCallback(target, source, effect) { + return this.random(3, 5); + }, + onLockMove: 'bide', + onStart(pokemon) { + this.effectData.totalDamage = 0; + this.add('-start', pokemon, 'move: Bide'); + }, + onDamagePriority: -101, + onDamage(damage, target, source, move) { + if (!move || move.effectType !== 'Move' || !source) return; + this.effectData.totalDamage += damage; + this.effectData.lastDamageSource = source; + }, + onBeforeMove(pokemon, target, move) { + if (this.effectData.duration === 1) { + this.add('-end', pokemon, 'move: Bide'); + if (!this.effectData.totalDamage) { + this.add('-fail', pokemon); + return false; + } + target = this.effectData.lastDamageSource; + if (!target) { + this.add('-fail', pokemon); + return false; + } + if (!target.isActive) { + const possibleTarget = this.resolveTarget(pokemon, this.getMove('pound')); + if (!possibleTarget) { + this.add('-miss', pokemon); + return false; + } + target = possibleTarget; + } + /**@type {Move} */ + // @ts-ignore + let moveData = { + id: 'bide', + name: "Bide", + accuracy: 100, + damage: this.effectData.totalDamage * 2, + category: "Physical", + priority: 0, + flags: {contact: 1, protect: 1}, + effectType: 'Move', + type: 'Normal', + }; + this.tryMoveHit(target, pokemon, moveData); + return false; + } + this.add('-activate', pokemon, 'move: Bide'); + }, + onMoveAborted(pokemon) { + pokemon.removeVolatile('bide'); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'move: Bide', '[silent]'); + }, + }, + }, + blizzard: { + inherit: true, + shortDesc: "10% chance to freeze the target.", + }, + bubble: { + inherit: true, + shortDesc: "10% chance to lower the target's Speed by 1.", + }, + conversion2: { + inherit: true, + desc: "The user's type changes to match a type that resists or is immune to the type of the last move used by the opposing Pokemon, even it is one of the user's current types. The original type of the move is used rather than the determined type. Fails if the opposing Pokemon has not used a move.", + shortDesc: "Changes user's type to resist the foe's last move.", + }, + counter: { + inherit: true, + desc: "Deals damage to the opposing Pokemon equal to twice the HP lost by the user from a physical attack this turn. This move considers Hidden Power as Normal type, and only the last hit of a multi-hit attack is counted. Fails if the user moves first, if the user was not hit by a physical attack this turn, or if the user did not lose HP from the attack. If the opposing Pokemon used Fissure or Horn Drill and missed, this move deals 65535 damage.", + damageCallback(pokemon, target) { + let lastAttackedBy = pokemon.getLastAttackedBy(); + if (lastAttackedBy && lastAttackedBy.move && lastAttackedBy.thisTurn && (this.getCategory(lastAttackedBy.move) === 'Physical' || this.getMove(lastAttackedBy.move).id === 'hiddenpower') && (!target.lastMove || target.lastMove.id !== 'sleeptalk')) { + return 2 * lastAttackedBy.damage; + } + return false; + }, + beforeTurnCallback() {}, + onTryHit() {}, + effect: {}, + priority: -1, + }, + crabhammer: { + inherit: true, + critRatio: 3, + }, + crosschop: { + inherit: true, + critRatio: 3, + }, + curse: { + inherit: true, + desc: "If the user is not a Ghost type, lowers the user's Speed by 1 stage and raises the user's Attack and Defense by 1 stage, unless the user's Attack and Defense stats are both at stage 6. If the user is a Ghost type, 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. If the target uses Baton Pass, the replacement will continue to be affected. Fails if the target is already affected or has a substitute.", + effect: { + onStart(pokemon, source) { + this.add('-start', pokemon, 'Curse', '[of] ' + source); + }, + onAfterMoveSelf(pokemon) { + this.damage(pokemon.maxhp / 4); + }, + }, + }, + defensecurl: { + inherit: true, + desc: "Raises the user's Defense by 1 stage. While the user remains active, the power of the user's Rollout will be doubled (this effect is not stackable). Baton Pass can be used to transfer this effect to an ally.", + }, + destinybond: { + inherit: true, + desc: "Until the user's next turn, if an opposing Pokemon's attack knocks the user out, that Pokemon faints as well.", + }, + detect: { + inherit: true, + desc: "The user is protected from attacks made by the opponent during this turn. This move has an X/255 chance of being successful, where X starts at 255 and halves, rounded down, each time this move is successfully used. X resets to 255 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user has a substitute or moves last this turn.", + priority: 2, + }, + dig: { + inherit: 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 Earthquake, Fissure, and Magnitude, the user is unaffected by weather, and Earthquake and Magnitude have doubled power when used against the user.", + onPrepareHit(target, source) { + return source.status !== 'slp'; + }, + effect: { + duration: 2, + onImmunity(type, pokemon) { + if (type === 'sandstorm') return false; + }, + onTryImmunity(target, source, move) { + if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'fissure') { + return; + } + if (['attract', 'curse', 'foresight', 'meanlook', 'mimic', 'nightmare', 'spiderweb', 'transform'].includes(move.id)) { + // Oversight in the interaction between these moves and the Lock-On effect + return false; + } + if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; + return false; + }, + onSourceBasePower(basePower, target, source, move) { + if (move.id === 'earthquake' || move.id === 'magnitude') { + return this.chainModify(2); + } + }, + }, + }, + disable: { + inherit: true, + desc: "For 1 to 7 turns, the target's last move used becomes disabled. Fails if one of the target's moves is already disabled, if the target has not made a move, if the target no longer knows the move, or if the move has 0 PP.", + shortDesc: "For 1-7 turns, disables the target's last move.", + }, + doubleedge: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. If this move hits a substitute, the recoil damage is always 1 HP.", + shortDesc: "Has 1/4 recoil.", + recoil: [25, 100], + }, + earthquake: { + inherit: true, + shortDesc: "Power doubles on Dig.", + }, + encore: { + inherit: true, + desc: "For 3 to 6 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Metronome, Mimic, Mirror Move, Sketch, Sleep Talk, Struggle, or Transform.", + effect: { + durationCallback() { + return this.random(3, 7); + }, + onStart(target) { + let noEncore = ['encore', 'metronome', 'mimic', 'mirrormove', 'sketch', 'sleeptalk', 'struggle', 'transform']; + let moveIndex = target.lastMove ? target.moves.indexOf(target.lastMove.id) : -1; + if (!target.lastMove || noEncore.includes(target.lastMove.id) || !target.moveSlots[moveIndex] || target.moveSlots[moveIndex].pp <= 0) { + // it failed + this.add('-fail', target); + delete target.volatiles['encore']; + return; + } + this.effectData.move = target.lastMove.id; + this.add('-start', target, 'Encore'); + if (!this.willMove(target)) { + this.effectData.duration++; + } + }, + onOverrideAction(pokemon) { + return this.effectData.move; + }, + onResidualOrder: 13, + onResidual(target) { + if (target.moves.includes(this.effectData.move) && target.moveSlots[target.moves.indexOf(this.effectData.move)].pp <= 0) { + // early termination if you run out of PP + delete target.volatiles.encore; + this.add('-end', target, 'Encore'); + } + }, + onEnd(target) { + this.add('-end', target, 'Encore'); + }, + onDisableMove(pokemon) { + if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { + return; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + endure: { + inherit: true, + desc: "The user will survive attacks made by the opponent during this turn with at least 1 HP. This move has an X/255 chance of being successful, where X starts at 255 and halves, rounded down, each time this move is successfully used. X resets to 255 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user has a substitute or moves last this turn.", + priority: 2, + }, + explosion: { + inherit: true, + desc: "The user faints after using this move. The target's Defense is halved during damage calculation.", + shortDesc: "The user faints.", + basePower: 250, + noSketch: true, + }, + fissure: { + inherit: true, + desc: "Deals 65535 damage to the target. This attack's accuracy out of 256 is equal to the lesser of (2 * (user's level - target's level) + 76) and 255, before applying accuracy and evasiveness modifiers. Fails if the target is at a higher level. Can hit a target using Dig.", + }, + flail: { + inherit: true, + desc: "The power of this move is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1, where X is equal to (user's current HP * 48 / user's maximum HP), rounded down. This move does not apply damage variance and cannot be a critical hit.", + noDamageVariance: true, + willCrit: false, + }, + fly: { + inherit: 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, Thunder, Twister, and Whirlwind, and Gust and Twister have doubled power when used against it.", + onPrepareHit(target, source) { + return source.status !== 'slp'; + }, + effect: { + duration: 2, + onTryImmunity(target, source, move) { + if (move.id === 'gust' || move.id === 'twister' || move.id === 'thunder' || move.id === 'whirlwind') { + return; + } + if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'fissure') { + // These moves miss even during the Lock-On effect + return false; + } + if (['attract', 'curse', 'foresight', 'meanlook', 'mimic', 'nightmare', 'spiderweb', 'transform'].includes(move.id)) { + // Oversight in the interaction between these moves and the Lock-On effect + return false; + } + if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; + return false; + }, + onSourceBasePower(basePower, target, source, move) { + if (move.id === 'gust' || move.id === 'twister') { + return this.chainModify(2); + } + }, + }, + }, + focusenergy: { + inherit: true, + desc: "Raises the user's chance for a critical hit by 1 stage. Fails if the user already has the effect. Baton Pass can be used to transfer this effect to an ally.", + shortDesc: "Raises the user's critical hit ratio by 1.", + effect: { + onStart(pokemon) { + this.add('-start', pokemon, 'move: Focus Energy'); + }, + onModifyCritRatio(critRatio) { + return critRatio + 1; + }, + }, + }, + foresight: { + inherit: true, + desc: "As long as the target remains active, if its evasiveness stat stage is greater than the attacker's accuracy stat stage, both are ignored during accuracy checks, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type. If the target leaves the field using Baton Pass, the replacement will remain under this effect. Fails if the target is already affected.", + }, + futuresight: { + inherit: true, + desc: "Deals typeless damage that cannot be a critical hit two turns after this move is used. Damage is calculated against the target on use, and at the end of the final turn that damage is dealt to the Pokemon at the position the original target had at the time. Fails if this move is already in effect for the target's position.", + }, + growl: { + inherit: true, + shortDesc: "Lowers the target's Attack by 1.", + }, + guillotine: { + inherit: true, + desc: "Deals 65535 damage to the target. This attack's accuracy out of 256 is equal to the lesser of (2 * (user's level - target's level) + 76) and 255, before applying accuracy and evasiveness modifiers. Fails if the target is at a higher level.", + }, + gust: { + inherit: true, + desc: "Power doubles if the target is using Fly.", + shortDesc: "Power doubles during Fly.", + }, + healbell: { + inherit: true, + desc: "Every Pokemon in the user's party is cured of its major status condition.", + onHit(target, source) { + this.add('-cureteam', source, '[from] move: Heal Bell'); + source.side.pokemon.forEach(pokemon => pokemon.clearStatus()); + }, + }, + highjumpkick: { + inherit: true, + desc: "If this attack is not successful and the target was not immune, the user loses HP equal to 1/8 the damage the target would have taken, rounded down, but not less than 1 HP, as crash damage.", + shortDesc: "If miss, user takes 1/8 damage it would've dealt.", + onMoveFail(target, source, move) { + if (target.runImmunity('Fighting')) { + let damage = this.getDamage(source, target, move, true); + if (typeof damage !== 'number') throw new Error("Couldn't get High Jump Kick recoil"); + this.damage(this.clampIntRange(damage / 8, 1), source, source, move); + } + }, + }, + horndrill: { + inherit: true, + desc: "Deals 65535 damage to the target. This attack's accuracy out of 256 is equal to the lesser of (2 * (user's level - target's level) + 76) and 255, before applying accuracy and evasiveness modifiers. Fails if the target is at a higher level.", + }, + icywind: { + inherit: true, + shortDesc: "100% chance to lower the target's Speed by 1.", + }, + jumpkick: { + inherit: true, + desc: "If this attack is not successful and the target was not immune, the user loses HP equal to 1/8 the damage the target would have taken, rounded down, but not less than 1 HP, as crash damage.", + shortDesc: "If miss, user takes 1/8 damage it would've dealt.", + onMoveFail(target, source, move) { + if (target.runImmunity('Fighting')) { + let damage = this.getDamage(source, target, move, true); + if (typeof damage !== 'number') throw new Error("Couldn't get Jump Kick recoil"); + this.damage(this.clampIntRange(damage / 8, 1), source, source, move); + } + }, + }, + karatechop: { + inherit: true, + critRatio: 3, + }, + leechseed: { + inherit: true, + onHit() {}, + effect: { + onStart(target) { + this.add('-start', target, 'move: Leech Seed'); + }, + onAfterMoveSelfPriority: 2, + onAfterMoveSelf(pokemon) { + if (!pokemon.hp) return; + let leecher = pokemon.side.foe.active[pokemon.volatiles['leechseed'].sourcePosition]; + if (!leecher || leecher.fainted || leecher.hp <= 0) { + return; + } + let toLeech = this.clampIntRange(pokemon.maxhp / 8, 1); + let damage = this.damage(toLeech, pokemon, leecher); + if (damage) { + this.heal(damage, leecher, pokemon); + } + }, + }, + }, + leer: { + inherit: true, + shortDesc: "Lowers the target's Defense by 1.", + }, + lightscreen: { + inherit: true, + desc: "For 5 turns, the user and its party members have their Special Defense doubled. Critical hits ignore this effect. Fails if the effect is already active on the user's side.", + shortDesc: "For 5 turns, the user's party has doubled Sp. Def.", + effect: { + duration: 5, + // Sp. Def boost applied directly in stat calculation + onStart(side) { + this.add('-sidestart', side, 'move: Light Screen'); + }, + onResidualOrder: 21, + onEnd(side) { + this.add('-sideend', side, 'move: Light Screen'); + }, + }, + }, + lockon: { + inherit: true, + desc: "The next accuracy check against the target succeeds. The target will still avoid Earthquake, Fissure, and Magnitude if it is using Fly. If the target leaves the field using Baton Pass, the replacement remains under this effect. This effect ends when the target leaves the field or an accuracy check is done against it.", + shortDesc: "The next move will not miss the target.", + }, + lowkick: { + inherit: true, + desc: "Has a 30% chance to flinch the target.", + shortDesc: "30% chance to flinch the target.", + accuracy: 90, + basePower: 50, + basePowerCallback() { + return 50; + }, + secondary: { + chance: 30, + volatileStatus: 'flinch', + }, + }, + metronome: { + inherit: true, + desc: "A random move is selected for use, other than Counter, Destiny Bond, Detect, Endure, Metronome, Mimic, Mirror Coat, Protect, Sketch, Sleep Talk, Struggle, or Thief.", + noMetronome: ['counter', 'destinybond', 'detect', 'endure', 'metronome', 'mimic', 'mirrorcoat', 'protect', 'sketch', 'sleeptalk', 'struggle', 'thief'], + noSketch: true, + }, + mimic: { + inherit: true, + desc: "While the user remains active, this move is replaced by the last move used by the target. The copied move has 5 PP. Fails if the target has not made a move, if the user already knows the move, or if the move is Struggle.", + noSketch: true, + }, + mindreader: { + inherit: true, + desc: "The next accuracy check against the target succeeds. The target will still avoid Earthquake, Fissure, and Magnitude if it is using Fly. If the target leaves the field using Baton Pass, the replacement remains under this effect. This effect ends when the target leaves the field or an accuracy check is done against it.", + shortDesc: "The next move will not miss the target.", + }, + minimize: { + inherit: true, + desc: "Raises the user's evasiveness by 1 stage. Whether or not the user's evasiveness was changed, Stomp will have its power doubled if used against the user while it is active. Baton Pass can be used to transfer this effect to an ally.", + }, + mirrorcoat: { + inherit: true, + desc: "Deals damage to the opposing Pokemon equal to twice the HP lost by the user from a special attack this turn. This move considers Hidden Power as Normal type, and only the last hit of a multi-hit attack is counted. Fails if the user moves first, if the user was not hit by a special attack this turn, or if the user did not lose HP from the attack.", + damageCallback(pokemon, target) { + let lastAttackedBy = pokemon.getLastAttackedBy(); + if (lastAttackedBy && lastAttackedBy.move && lastAttackedBy.thisTurn && this.getCategory(lastAttackedBy.move) === 'Special' && this.getMove(lastAttackedBy.move).id !== 'hiddenpower' && (!target.lastMove || target.lastMove.id !== 'sleeptalk')) { + return 2 * lastAttackedBy.damage; + } + return false; + }, + beforeTurnCallback() {}, + onTryHit() {}, + effect: {}, + priority: -1, + }, + mirrormove: { + inherit: true, + desc: "The user uses the last move used by the target. Fails if the target has not made a move, or if the last move used was Metronome, Mimic, Mirror Move, Sketch, Sleep Talk, Transform, or any move the user knows.", + onHit(pokemon) { + let noMirror = ['metronome', 'mimic', 'mirrormove', 'sketch', 'sleeptalk', 'transform']; + const target = pokemon.side.foe.active[0]; + const lastMove = target && target.lastMove && target.lastMove.id; + if (!lastMove || (!pokemon.activeTurns && !target.moveThisTurn) || noMirror.includes(lastMove) || pokemon.moves.includes(lastMove)) { + return false; + } + this.useMove(lastMove, pokemon); + }, + noSketch: true, + }, + mist: { + inherit: true, + desc: "While the user remains active, it is protected from having its stat stages lowered by other Pokemon. Fails if the user already has the effect. Baton Pass can be used to transfer this effect to an ally.", + shortDesc: "While active, user is protected from stat drops.", + }, + moonlight: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, all of its HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Rain Dance or Sandstorm, all rounded down.", + onHit(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + this.heal(pokemon.maxhp); + } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { + this.heal(pokemon.maxhp / 4); + } else { + this.heal(pokemon.maxhp / 2); + } + }, + }, + morningsun: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, all of its HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Rain Dance or Sandstorm, all rounded down.", + onHit(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + this.heal(pokemon.maxhp); + } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { + this.heal(pokemon.maxhp / 4); + } else { + this.heal(pokemon.maxhp / 2); + } + }, + }, + nightmare: { + inherit: true, + effect: { + noCopy: true, + onStart(pokemon) { + if (pokemon.status !== 'slp') { + return false; + } + this.add('-start', pokemon, 'Nightmare'); + }, + onAfterMoveSelfPriority: 1, + onAfterMoveSelf(pokemon) { + if (pokemon.status === 'slp') this.damage(pokemon.maxhp / 4); + }, + }, + }, + outrage: { + inherit: true, + desc: "Whether or not this move is successful, the user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect, even if it is already confused. If the user is prevented from moving, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + onMoveFail(target, source, move) { + source.addVolatile('lockedmove'); + }, + onAfterMove(pokemon) { + if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { + pokemon.removeVolatile('lockedmove'); + } + }, + }, + petaldance: { + inherit: true, + desc: "Whether or not this move is successful, the user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect, even if it is already confused. If the user is prevented from moving, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + onMoveFail(target, source, move) { + source.addVolatile('lockedmove'); + }, + onAfterMove(pokemon) { + if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { + pokemon.removeVolatile('lockedmove'); + } + }, + }, + poisongas: { + inherit: true, + shortDesc: "Poisons the target.", + ignoreImmunity: false, + }, + poisonpowder: { + inherit: true, + ignoreImmunity: false, + }, + powdersnow: { + inherit: true, + shortDesc: "10% chance to freeze the target.", + }, + present: { + inherit: true, + desc: "If this move is successful, it deals damage or heals the target. 102/256 chance for 40 power, 76/256 chance for 80 power, 26/256 chance for 120 power, or 52/256 chance to heal the target by 1/4 of its maximum HP, rounded down. If this move deals damage, it uses an abnormal version of the damage formula by substituting certain values. The user's Attack stat is replaced with 10 times the effectiveness of this move against the target, the target's Defense stat is replaced with the index number of the user's secondary type, and the user's level is replaced with the index number of the target's secondary type. If a Pokemon does not have a secondary type, its primary type is used. The index numbers for each type are Normal: 0, Fighting: 1, Flying: 2, Poison: 3, Ground: 4, Rock: 5, Bug: 7, Ghost: 8, Steel: 9, Fire: 20, Water: 21, Grass: 22, Electric: 23, Psychic: 24, Ice: 25, Dragon: 26, Dark: 27. If at any point a division by 0 would happen in the damage formula, it divides by 1 instead.", + }, + protect: { + inherit: true, + desc: "The user is protected from attacks made by the opponent during this turn. This move has an X/255 chance of being successful, where X starts at 255 and halves, rounded down, each time this move is successfully used. X resets to 255 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user has a substitute or moves last this turn.", + priority: 2, + }, + psychup: { + inherit: true, + desc: "The user copies all of the target's current stat stage changes. Fails if the target's stat stages are 0.", + }, + psywave: { + inherit: true, + desc: "Deals damage to the target equal to a random number from 1 to (user's level * 1.5 - 1), rounded down, but not less than 1 HP.", + shortDesc: "Random damage from 1 to (user's level*1.5 - 1).", + damageCallback(pokemon) { + return this.random(1, pokemon.level + Math.floor(pokemon.level / 2)); + }, + }, + pursuit: { + inherit: true, + desc: "If the target switches out this turn, this move hits it before it leaves the field with doubled power and the user's turn is over.", + shortDesc: "Power doubles if the foe is switching out.", + }, + rage: { + inherit: true, + desc: "Once this move is successfully used, X starts at 1. This move's damage is multiplied by X, and whenever the user is hit by the opposing Pokemon, X increases by 1, with a maximum of 255. X resets to 1 when the user is no longer active or did not choose this move for use.", + shortDesc: "Next Rage increases in damage if hit during use.", + }, + raindance: { + inherit: true, + desc: "For 5 turns, the weather becomes Rain Dance, even if the current weather is Rain Dance. The damage of Water-type attacks is multiplied by 1.5 and the damage of Fire-type attacks is multiplied by 0.5 during the effect.", + }, + razorleaf: { + inherit: true, + shortDesc: "High critical hit ratio.", + critRatio: 3, + }, + razorwind: { + inherit: true, + desc: "Has a higher chance for a critical hit. This attack charges on the first turn and executes on the second.", + shortDesc: "Charges, then hits target turn 2. High crit ratio.", + accuracy: 75, + critRatio: 3, + onPrepareHit(target, source) { + return source.status !== 'slp'; + }, + }, + reflect: { + inherit: true, + desc: "For 5 turns, the user and its party members have their Defense doubled. Critical hits ignore this effect. Fails if the effect is already active on the user's side.", + shortDesc: "For 5 turns, the user's party has doubled Def.", + effect: { + duration: 5, + // Defense boost applied directly in stat calculation + onStart(side) { + this.add('-sidestart', side, 'Reflect'); + }, + onResidualOrder: 21, + onEnd(side) { + this.add('-sideend', side, 'Reflect'); + }, + }, + }, + rest: { + inherit: true, + desc: "The user falls asleep for the next two turns and restores all of its HP, curing itself of any major status condition in the process, even if it was already asleep. Fails if the user has full HP.", + onTryMove(pokemon) { + if (pokemon.hp < pokemon.maxhp) return; + this.add('-fail', pokemon); + return null; + }, + onHit(target) { + if (!target.setStatus('slp') && target.status !== 'slp') return false; + target.statusData.time = 3; + target.statusData.startTime = 3; + target.statusData.source = target; + this.heal(target.maxhp); + this.add('-status', target, 'slp', '[from] move: Rest'); + }, + secondary: null, + }, + reversal: { + inherit: true, + desc: "The power of this move is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1, where X is equal to (user's current HP * 48 / user's maximum HP), rounded down. This move does not apply damage variance and cannot be a critical hit.", + noDamageVariance: true, + willCrit: false, + }, + roar: { + inherit: true, + desc: "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 user moves before the target.", + onTryHit() { + for (const action of this.queue) { + // Roar only works if it is the last action in a turn, including when it's called by Sleep Talk + if (action.choice === 'move' || action.choice === 'switch') return false; + } + }, + priority: -1, + }, + rockslide: { + inherit: true, + shortDesc: "30% chance to flinch the target.", + }, + safeguard: { + inherit: true, + desc: "For 5 turns, the user and its party members cannot have major status conditions or confusion inflicted on them by other Pokemon. During the effect, Outrage, Thrash, and Petal Dance do not confuse the user. Fails if the effect is already active on the user's side.", + }, + sandstorm: { + inherit: true, + desc: "For 5 turns, the weather becomes Sandstorm. At the end of each turn except the last, all active Pokemon lose 1/8 of their maximum HP, rounded down, unless they are a Ground, Rock, or Steel type. Fails if the current weather is Sandstorm.", + }, + selfdestruct: { + inherit: true, + desc: "The user faints after using this move. The target's Defense is halved during damage calculation.", + shortDesc: "The user faints.", + basePower: 200, + noSketch: true, + }, + sketch: { + inherit: true, + desc: "Fails when used in Link Battles.", + shortDesc: "Fails when used in Link Battles.", + onHit() { + // Sketch always fails in Link Battles + this.add('-nothing'); + }, + }, + skullbash: { + inherit: true, + onPrepareHit(target, source) { + return source.status !== 'slp'; + }, + }, + skyattack: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second.", + shortDesc: "Charges turn 1. Hits turn 2.", + critRatio: 1, + onPrepareHit(target, source) { + return source.status !== 'slp'; + }, + secondary: null, + }, + slash: { + inherit: true, + critRatio: 3, + }, + sleeptalk: { + inherit: true, + desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0 PP. This move cannot select Bide, Sleep Talk, or any two-turn move.", + onHit(pokemon) { + let NoSleepTalk = ['bide', 'sleeptalk']; + let moves = []; + for (const moveSlot of pokemon.moveSlots) { + let move = moveSlot.id; + if (move && !NoSleepTalk.includes(move) && !this.getMove(move).flags['charge']) { + moves.push(move); + } + } + let randomMove = ''; + if (moves.length) randomMove = this.sample(moves); + if (!randomMove) return false; + this.useMove(randomMove, pokemon); + }, + noSketch: true, + }, + solarbeam: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second. Damage is halved if the weather is Rain Dance. If the weather is Sunny Day, the move completes in one turn.", + onPrepareHit(target, source) { + return source.status !== 'slp'; + }, + // Rain weakening done directly in the damage formula + onBasePower() {}, + }, + spikes: { + inherit: true, + desc: "Sets up a hazard on the opposing side of the field, causing each opposing Pokemon that switches in to lose 1/8 of their maximum HP, rounded down, unless it is a Flying-type Pokemon. Fails if the effect is already active on the opposing side. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin successfully.", + shortDesc: "Hurts grounded foes on switch-in. Max 1 layer.", + effect: { + // this is a side condition + onStart(side) { + if (!this.effectData.layers || this.effectData.layers === 0) { + this.add('-sidestart', side, 'Spikes'); + this.effectData.layers = 1; + } else { + return false; + } + }, + onSwitchIn(pokemon) { + if (!pokemon.runImmunity('Ground')) return; + let damageAmounts = [0, 3]; + this.damage(damageAmounts[this.effectData.layers] * pokemon.maxhp / 24); + }, + }, + }, + spite: { + inherit: true, + desc: "Causes the target's last move used to lose 2 to 5 PP, at random. Fails if the target has not made a move, or if the move has 0 PP.", + }, + stomp: { + inherit: true, + desc: "Has a 30% chance to flinch the target. Power doubles if the target is under the effect of Minimize.", + }, + stringshot: { + inherit: true, + shortDesc: "Lowers the target's Speed by 1.", + }, + struggle: { + inherit: true, + desc: "Deals typeless damage. If this move was successful, the user takes damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP. This move is automatically used if none of the user's known moves can be selected.", + }, + submission: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded half up, but not less than 1 HP. If this move hits a substitute, the recoil damage is always 1 HP.", + }, + sunnyday: { + inherit: true, + desc: "For 5 turns, the weather becomes Sunny Day, even if the current weather is Sunny Day. The damage of Fire-type attacks is multiplied by 1.5 and the damage of Water-type attacks is multiplied by 0.5 during the effect.", + }, + substitute: { + inherit: true, + effect: { + onStart(target) { + this.add('-start', target, 'Substitute'); + this.effectData.hp = Math.floor(target.maxhp / 4); + delete target.volatiles['partiallytrapped']; + }, + onTryPrimaryHitPriority: -1, + onTryPrimaryHit(target, source, move) { + if (move.stallingMove) { + this.add('-fail', source); + return null; + } + if (target === source) { + this.debug('sub bypass: self hit'); + return; + } + if (move.id === 'twineedle') { + // @ts-ignore: Twineedle has move.secondaries defined + move.secondaries = move.secondaries.filter(p => !p.kingsrock); + } + if (move.drain) { + this.add('-hint', "In Gold/Silver/Crystal, draining moves always miss against Substitute."); + this.add('-miss', source); + return null; + } + if (move.category === 'Status') { + let SubBlocked = ['leechseed', 'lockon', 'mindreader', 'nightmare', 'painsplit', 'sketch']; + if (move.id === 'swagger') { + // this is safe, move is a copy + delete move.volatileStatus; + } + if (move.status || (move.boosts && move.id !== 'swagger') || move.volatileStatus === 'confusion' || SubBlocked.includes(move.id)) { + this.add('-activate', target, 'Substitute', '[block] ' + move.name); + return null; + } + return; + } + let damage = this.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 = /** @type {number} */ (target.volatiles['substitute'].hp); + } + 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(1, source, target, 'recoil'); + } + this.runEvent('AfterSubDamage', target, source, move, damage); + return 0; // hit + }, + onEnd(target) { + this.add('-end', target, 'Substitute'); + }, + }, + }, + surf: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + }, + swagger: { + inherit: true, + desc: "Raises the target's Attack by 2 stages and confuses it. This move will miss if the target's Attack cannot be raised.", + onTryHit(target, pokemon) { + if (target.boosts.atk >= 6 || target.getStat('atk', false, true) === 999) { + this.add('-miss', pokemon); + return null; + } + }, + }, + sweetscent: { + inherit: true, + shortDesc: "Lowers the target's evasiveness by 1.", + }, + swift: { + inherit: true, + shortDesc: "This move does not check accuracy.", + }, + synthesis: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, all of its HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Rain Dance or Sandstorm, all rounded down.", + onHit(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + this.heal(pokemon.maxhp); + } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { + this.heal(pokemon.maxhp / 4); + } else { + this.heal(pokemon.maxhp / 2); + } + }, + }, + tailwhip: { + inherit: true, + shortDesc: "Lowers the target's Defense by 1.", + }, + takedown: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded half up, but not less than 1 HP. If this move hits a substitute, the recoil damage is always 1 HP.", + }, + thief: { + inherit: true, + desc: "Has a 100% chance to steal the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail.", + onAfterHit() {}, + secondary: { + chance: 100, + onAfterHit(target, source) { + if (source.item || source.volatiles['gem']) { + return; + } + let yourItem = target.takeItem(source); + if (!yourItem) { + return; + } + if (!source.setItem(yourItem)) { + target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything + return; + } + this.add('-item', source, yourItem, '[from] move: Thief', '[of] ' + target); + }, + }, + }, + thrash: { + inherit: true, + desc: "Whether or not this move is successful, the user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect, even if it is already confused. If the user is prevented from moving, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + onMoveFail(target, source, move) { + source.addVolatile('lockedmove'); + }, + onAfterMove(pokemon) { + if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { + pokemon.removeVolatile('lockedmove'); + } + }, + }, + thunder: { + inherit: true, + desc: "Has a 30% chance to paralyze the target. This move can hit a target using Fly. If the weather is Rain Dance, this move does not check accuracy. If the weather is Sunny Day, this move's accuracy is 50%.", + }, + toxic: { + inherit: true, + ignoreImmunity: false, + }, + transform: { + inherit: true, + desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, DVs, species, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP. This move fails if the target has transformed.", + shortDesc: "Copies target's stats, moves, types, and species.", + noSketch: true, + }, + triattack: { + inherit: true, + desc: "This move selects burn, freeze, or paralysis at random, and has a 20% chance to inflict the target with that status. If the target is frozen and burn was selected, it thaws out.", + onHit(target, source, move) { + move.statusRoll = ['par', 'frz', 'brn'][this.random(3)]; + }, + secondary: { + chance: 20, + onHit(target, source, move) { + if (!target.hasType('Normal') && move.statusRoll) { + target.trySetStatus(move.statusRoll, source); + } + }, + }, + }, + triplekick: { + inherit: true, + desc: "Hits one to three times, at random. Power increases to 20 for the second hit and 30 for the third.", + shortDesc: "Hits 1-3 times. Power rises with each hit.", + multiaccuracy: false, + multihit: [1, 3], + }, + twineedle: { + inherit: true, + desc: "Hits twice, with the second hit having a 20% chance to poison the target. If the first hit breaks the target's substitute, it will take damage for the second hit but the target cannot be poisoned by it.", + shortDesc: "Hits 2 times. Last hit has 20% chance to poison.", + }, + twister: { + inherit: true, + desc: "Has a 20% chance to flinch the target. Power doubles if the target is using Fly.", + shortDesc: "20% chance to flinch the target.", + }, + whirlwind: { + inherit: true, + desc: "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 user moves before the target.", + onTryHit() { + for (const action of this.queue) { + // Whirlwind only works if it is the last action in a turn, including when it's called by Sleep Talk + if (action.choice === 'move' || action.choice === 'switch') return false; + } + }, + priority: -1, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/gen2/random-teams.js b/data/mods/gen2/random-teams.js similarity index 67% rename from mods/gen2/random-teams.js rename to data/mods/gen2/random-teams.js index 9f4959798e923..7c86f5f56de88 100644 --- a/mods/gen2/random-teams.js +++ b/data/mods/gen2/random-teams.js @@ -3,32 +3,38 @@ const RandomGen3Teams = require('../../mods/gen3/random-teams'); class RandomGen2Teams extends RandomGen3Teams { - randomTeam(side) { + // @ts-ignore + randomTeam() { let pokemonLeft = 6; let pokemon = []; - let n = 1; let pokemonPool = []; for (let id in this.data.FormatsData) { - // FIXME: Not ES-compliant - if (n++ > 251 || !this.data.FormatsData[id].randomSet1) continue; - pokemonPool.push(id); + let template = this.getTemplate(id); + if (!template.isNonstandard && template.gen <= this.gen && this.data.FormatsData[id].randomSet1) { + pokemonPool.push(id); + } } // Setup storage. + /**@type {{[k: string]: number}} */ let tierCount = {}; + /**@type {{[k: string]: number}} */ let typeCount = {}; + /**@type {{[k: string]: number}} */ let weaknessCount = { - 'Normal':0, 'Fighting':0, 'Flying':0, 'Poison':0, 'Ground':0, 'Rock':0, 'Bug':0, 'Ghost':0, 'Steel':0, - 'Fire':0, 'Water':0, 'Grass':0, 'Electric':0, 'Psychic':0, 'Ice':0, 'Dragon':0, 'Dark':0, + 'Normal': 0, 'Fighting': 0, 'Flying': 0, 'Poison': 0, 'Ground': 0, 'Rock': 0, 'Bug': 0, 'Ghost': 0, 'Steel': 0, + 'Fire': 0, 'Water': 0, 'Grass': 0, 'Electric': 0, 'Psychic': 0, 'Ice': 0, 'Dragon': 0, 'Dark': 0, }; + /**@type {{[k: string]: number}} */ let resistanceCount = { - 'Normal':0, 'Fighting':0, 'Flying':0, 'Poison':0, 'Ground':0, 'Rock':0, 'Bug':0, 'Ghost':0, 'Steel':0, - 'Fire':0, 'Water':0, 'Grass':0, 'Electric':0, 'Psychic':0, 'Ice':0, 'Dragon':0, 'Dark':0, + 'Normal': 0, 'Fighting': 0, 'Flying': 0, 'Poison': 0, 'Ground': 0, 'Rock': 0, 'Bug': 0, 'Ghost': 0, 'Steel': 0, + 'Fire': 0, 'Water': 0, 'Grass': 0, 'Electric': 0, 'Psychic': 0, 'Ice': 0, 'Dragon': 0, 'Dark': 0, }; + /**@type {{[k: string]: number}} */ let restrictMoves = { - 'reflect':1, 'lightscreen':1, 'rapidspin':1, 'spikes':1, 'bellydrum':1, 'haze':1, - 'healbell':1, 'thief':1, 'phazing':1, 'sleeptalk':2, 'sleeping':2, + 'reflect': 1, 'lightscreen': 1, 'rapidspin': 1, 'spikes': 1, 'bellydrum': 1, 'haze': 1, + 'healbell': 1, 'thief': 1, 'phazing': 1, 'sleeptalk': 2, 'sleeping': 2, }; while (pokemonPool.length && pokemonLeft > 0) { @@ -37,7 +43,7 @@ class RandomGen2Teams extends RandomGen3Teams { let skip = false; // Ensure 1 Uber at most - // Ensure 2 mons of same tier at most (this includes OU,BL,UU,NU; other tiers not supported yet) + // Ensure 2 mons of same tier at most (this includes OU,UUBL,UU,NU; other tiers not supported yet) let tier = template.tier; switch (tier) { case 'Uber': @@ -53,10 +59,10 @@ class RandomGen2Teams extends RandomGen3Teams { let types = template.types; if (types.length === 1) { if (typeCount[types[0]] > 1) skip = true; - if (typeCount[types[0]] && this.random(3) === 0) skip = true; + if (typeCount[types[0]] && this.randomChance(1, 3)) skip = true; } else if (types.length === 2) { if (typeCount[types[0]] > 1 || typeCount[types[1]] > 1) skip = true; - if (typeCount[types[0]] && typeCount[types[1]] && this.random(3) > 0) skip = true; + if (typeCount[types[0]] && typeCount[types[1]] && this.randomChance(2, 3)) skip = true; } // Ensure the weakness-resistance balance is 2 points or lower for all types, @@ -81,6 +87,7 @@ class RandomGen2Teams extends RandomGen3Teams { // The set passes the randomTeam limitations. let set = this.randomSet(template, pokemon.length, restrictMoves); + // @ts-ignore if (set.other.discard && pokemonPool.length + 1 > pokemonLeft) continue; // The set also passes the randomSet limitations. @@ -90,14 +97,15 @@ class RandomGen2Teams extends RandomGen3Teams { pokemonLeft--; // Moves counter. + // @ts-ignore restrictMoves = set.other.restrictMoves; - let moves = set.moveset.moves; - for (let i = 0; i < moves.length; i++) { - if (restrictMoves[moves[i]]) restrictMoves[moves[i]]--; - if (restrictMoves['phazing'] && (moves[i] === "roar" || moves[i] === "whirlwind")) { + // @ts-ignore + for (const moveid of set.moveset.moves) { + if (restrictMoves[moveid]) restrictMoves[moveid]--; + if (restrictMoves['phazing'] && ['roar', 'whirlwind'].includes(moveid)) { restrictMoves['phazing']--; } - if (restrictMoves['sleeping'] && (moves[i] === "sleeppowder" || moves[i] === "lovelykiss" || moves[i] === "sing" || moves[i] === "hypnosis" || moves[i] === "spore")) { + if (restrictMoves['sleeping'] && ['hypnosis', 'lovelykiss', 'sing', 'sleeppowder', 'spore'].includes(moveid)) { restrictMoves['sleeping']--; } } @@ -110,42 +118,55 @@ class RandomGen2Teams extends RandomGen3Teams { } // Type counter. - for (let i = 0; i < types.length; i++) { - if (typeCount[types[i]]) { - typeCount[types[i]]++; + for (const type of types) { + if (typeCount[type]) { + typeCount[type]++; } else { - typeCount[types[i]] = 1; + typeCount[type] = 1; } } // Weakness and resistance counter. - for (let i = 0; i < weaknesses.length; i++) { - weaknessCount[weaknesses[i]]++; + for (const weakness of weaknesses) { + weaknessCount[weakness]++; } - for (let i = 0; i < resistances.length; i++) { - resistanceCount[resistances[i]]++; + for (const resistance of resistances) { + resistanceCount[resistance]++; } } return pokemon; } + + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {{[k: string]: number}} restrictMoves + * @return {RandomTeamsTypes["RandomSet"]} + */ randomSet(template, slot, restrictMoves) { if (slot === undefined) slot = 1; template = this.getTemplate(template); if (!template.exists) template = this.getTemplate('unown'); let randomSetNumber = 0; + /**@type {RandomTeamsTypes["RandomSet"]} */ + // @ts-ignore let set = template.randomSet1; + /**@type {string[]} */ let moves = []; + /**@type {{[k: string]: number}} */ let hasMove = {}; let item = ''; let ivs = {hp: 30, atk: 30, def: 30, spa: 30, spd: 30, spe: 30}; let discard = false; let rerollsLeft = 3; + /**@param {string} move */ let isPhazingMove = function (move) { return (move === "roar" || move === "whirlwind"); }; + /**@param {string} move */ let isSleepMove = function (move) { return (move === "sleeppowder" || move === "lovelykiss" || move === "sing" || move === "hypnosis" || move === "spore"); }; @@ -157,41 +178,60 @@ class RandomGen2Teams extends RandomGen3Teams { moves = []; hasMove = {}; + // @ts-ignore if (template.randomSet2) { randomSetNumber = this.random(15); + // @ts-ignore if (randomSetNumber < template.randomSet1.chance) { + // @ts-ignore set = template.randomSet1; + // @ts-ignore } else if (randomSetNumber < template.randomSet2.chance) { + // @ts-ignore set = template.randomSet2; + // @ts-ignore } else if (template.randomSet3 && randomSetNumber < template.randomSet3.chance) { + // @ts-ignore set = template.randomSet3; + // @ts-ignore } else if (template.randomSet4 && randomSetNumber < template.randomSet4.chance) { + // @ts-ignore set = template.randomSet4; + // @ts-ignore } else if (template.randomSet5) { + // @ts-ignore set = template.randomSet5; } } // Even if we want to discard this set, return a proper moveset in case there's no room to discard more Pokemon // Add the base moves (between 0 and 4) of the chosen set + // @ts-ignore if (set.baseMove1 && moves.length < 4) moves.push(set.baseMove1); + // @ts-ignore if (set.baseMove2 && moves.length < 4) moves.push(set.baseMove2); + // @ts-ignore if (set.baseMove3 && moves.length < 4) moves.push(set.baseMove3); + // @ts-ignore if (set.baseMove4 && moves.length < 4) moves.push(set.baseMove4); // Add the filler moves (between 0 and 4) of the chosen set + // @ts-ignore if (set.fillerMoves1 && moves.length < 4) this.randomMove(moves, hasMove, set.fillerMoves1); + // @ts-ignore if (set.fillerMoves2 && moves.length < 4) this.randomMove(moves, hasMove, set.fillerMoves2); + // @ts-ignore if (set.fillerMoves3 && moves.length < 4) this.randomMove(moves, hasMove, set.fillerMoves3); + // @ts-ignore if (set.fillerMoves4 && moves.length < 4) this.randomMove(moves, hasMove, set.fillerMoves4); // Make sure it's not an undesired moveset according to restrictMoves and the rest of the team rerollsLeft--; discard = false; - for (let i = 0; i < moves.length; i++) { - if (restrictMoves[moves[i]] === 0) { discard = true; break; } - if (isPhazingMove(moves[i]) && restrictMoves['phazing'] === 0) { discard = true; break; } - if (isSleepMove(moves[i]) && restrictMoves['sleeping'] === 0) { discard = true; break; } + for (const moveid of moves) { + if (restrictMoves[moveid] === 0) { discard = true; break; } + if (isPhazingMove(moveid) && restrictMoves['phazing'] === 0) { discard = true; break; } + if (isSleepMove(moveid) && restrictMoves['sleeping'] === 0) { discard = true; break; } } } while (rerollsLeft > 0 && discard); @@ -200,23 +240,24 @@ class RandomGen2Teams extends RandomGen3Teams { let discourage = false; if (!discard && slot > 3) { discourage = true; - for (let i = 0; i < moves.length; i++) { - if (moves[i] === "sleeptalk" && restrictMoves['sleeptalk'] > 1) { discourage = false; break; } - if (moves[i] !== "bellydrum" && moves[i] !== "haze" && moves[i] !== "thief" && restrictMoves[moves[i]] > 0) { discourage = false; break; } - if (isPhazingMove(moves[i]) && restrictMoves['phazing'] > 0) { discourage = false; break; } - if (isSleepMove(moves[i]) && restrictMoves['sleeping'] > 1) { discourage = false; break; } + for (const moveid of moves) { + if (moveid === "sleeptalk" && restrictMoves['sleeptalk'] > 1) { discourage = false; break; } + if (moveid !== "bellydrum" && moveid !== "haze" && moveid !== "thief" && restrictMoves[moveid] > 0) { discourage = false; break; } + if (isPhazingMove(moveid) && restrictMoves['phazing'] > 0) { discourage = false; break; } + if (isSleepMove(moveid) && restrictMoves['sleeping'] > 1) { discourage = false; break; } } } - if (discourage && this.random(2) === 0) discard = true; + if (discourage && this.randomChance(1, 2)) discard = true; // Add the held item // TODO: for some reason, items like Thick Club are not working in randbats - if (set.item) item = set.item[this.random(set.item.length)]; + // @ts-ignore + if (set.item) item = this.sample(set.item); // Adjust ivs for hiddenpower - for (let i = 0; i < moves.length; i++) { - if (moves[i].substr(0, 11) !== 'hiddenpower') continue; - let hpType = moves[i].substr(11, moves[i].length); + for (const setMoveid of moves) { + if (!setMoveid.startsWith('hiddenpower')) continue; + let hpType = setMoveid.substr(11, setMoveid.length); switch (hpType) { case 'dragon': ivs.def = 28; break; case 'ice': ivs.def = 26; break; @@ -243,7 +284,7 @@ class RandomGen2Teams extends RandomGen3Teams { NFE: 84, // unused NU: 78, UU: 74, - BL: 70, + UUBL: 70, OU: 68, Uber: 64, }; @@ -252,11 +293,15 @@ class RandomGen2Teams extends RandomGen3Teams { Unown: 98, Wobbuffet: 82, Ditto: 82, Snorlax: 66, Nidoqueen: 70, }; + // @ts-ignore let level = levelScale[template.tier] || 90; + // @ts-ignore if (customScale[template.name]) level = customScale[template.name]; + // @ts-ignore return { moveset: { + name: template.name, species: template.name, moves: moves, ability: 'None', @@ -273,6 +318,12 @@ class RandomGen2Teams extends RandomGen3Teams { }, }; } + + /** + * @param {string[]} moves + * @param {{[k: string]: number}} hasMove + * @param {string[]} fillerMoves + */ randomMove(moves, hasMove, fillerMoves) { let index = 0; let done = false; @@ -286,9 +337,9 @@ class RandomGen2Teams extends RandomGen3Teams { if (fillerMoves[index].substr(0, 11) === 'hiddenpower') { // only one hiddenpower is allowed - hasMove['hiddenpower'] = true; + hasMove['hiddenpower'] = 1; } else { - hasMove[fillerMoves[index]] = true; + hasMove[fillerMoves[index]] = 1; } } } while (!done); diff --git a/mods/gen2/rulesets.js b/data/mods/gen2/rulesets.js similarity index 55% rename from mods/gen2/rulesets.js rename to data/mods/gen2/rulesets.js index 85896d9183c09..320e0728711e0 100644 --- a/mods/gen2/rulesets.js +++ b/data/mods/gen2/rulesets.js @@ -1,10 +1,11 @@ 'use strict'; -exports.BattleFormats = { +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { pokemon: { effectType: 'ValidatorRule', name: 'Pokemon', - onValidateSet: function (set, format) { + onValidateSet(set, format) { let template = this.getTemplate(set.species); let problems = []; if (set.species === set.name) delete set.name; @@ -24,8 +25,8 @@ exports.BattleFormats = { } } if (set.moves) { - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const setMoveid of set.moves) { + let move = this.getMove(setMoveid); if (move.gen > this.gen) { problems.push(move.name + ' does not exist in gen ' + this.gen + '.'); } else if (move.isNonstandard) { @@ -41,8 +42,14 @@ exports.BattleFormats = { // Automatically set ability to None set.ability = 'None'; - if (toId(set.item) === 'thickclub' && set.species === 'Marowak' && hasSD) { - set.ivs.atk = 26; + if (set.ivs && toId(set.item) === 'thickclub' && set.species === 'Marowak' && hasSD && (!set.level || set.level === 100)) { + if (!set.evs) set.evs = {hp: 252, atk: 252, def: 252, spa: 252, spd: 252, spe: 252}; + if (set.evs.atk === undefined) set.evs.atk = 252; + if (set.ivs.atk === undefined) set.ivs.atk = 30; + set.ivs.atk = Math.floor(set.ivs.atk / 2) * 2; + while (set.evs.atk > 0 && 2 * 80 + set.ivs.atk + Math.floor(set.evs.atk / 4) + 5 > 255) { + set.evs.atk -= 4; + } } // They all also get a useless nature, since that didn't exist @@ -54,33 +61,36 @@ exports.BattleFormats = { standard: { effectType: 'ValidatorRule', name: 'Standard', - ruleset: ['Sleep Clause Mod', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod'], + ruleset: ['Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Unreleased', 'Illegal', - 'Hypnosis + Perish Song + Mean Look', - 'Hypnosis + Perish Song + Spider Web', - 'Lovely Kiss + Perish Song + Mean Look', - 'Lovely Kiss + Perish Song + Spider Web', - 'Sing + Perish Song + Mean Look', - 'Sing + Perish Song + Spider Web', - 'Sleep Powder + Perish Song + Mean Look', - 'Sleep Powder + Perish Song + Spider Web', - 'Spore + Perish Song + Mean Look', - 'Spore + Perish Song + Spider Web', + 'Hypnosis + Mean Look', + 'Hypnosis + Spider Web', + 'Lovely Kiss + Mean Look', + 'Lovely Kiss + Spider Web', + 'Sing + Mean Look', + 'Sing + Spider Web', + 'Sleep Powder + Mean Look', + 'Sleep Powder + Spider Web', + 'Spore + Mean Look', + 'Spore + Spider Web', ], - onValidateSet: function (set) { + onValidateSet(set) { // limit one of each move in Standard let moves = []; if (set.moves) { + /**@type {{[k: string]: true}} */ let hasMove = {}; - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const setMoveid of set.moves) { + let move = this.getMove(setMoveid); let moveid = move.id; if (hasMove[moveid]) continue; hasMove[moveid] = true; - moves.push(set.moves[i]); + moves.push(setMoveid); } } set.moves = moves; }, }, }; + +exports.BattleFormats = BattleFormats; diff --git a/mods/gen2/scripts.js b/data/mods/gen2/scripts.js similarity index 62% rename from mods/gen2/scripts.js rename to data/mods/gen2/scripts.js index 8f7850f111f5c..b4dcefd4f60d8 100644 --- a/mods/gen2/scripts.js +++ b/data/mods/gen2/scripts.js @@ -3,12 +3,14 @@ /** * Gen 2 scripts. */ -exports.BattleScripts = { + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { inherit: 'gen3', gen: 2, // BattlePokemon scripts. pokemon: { - getStat: function (statName, unboosted, unmodified) { + getStat(statName, unboosted, unmodified) { statName = toId(statName); if (statName === 'hp') return this.maxhp; @@ -17,6 +19,7 @@ exports.BattleScripts = { // Stat boosts. if (!unboosted) { + // @ts-ignore let boost = this.boosts[statName]; if (boost > 6) boost = 6; if (boost < -6) boost = -6; @@ -27,16 +30,16 @@ exports.BattleScripts = { let numerators = [100, 66, 50, 40, 33, 28, 25]; stat = Math.floor(stat * numerators[-boost] / 100); } + } - // On Gen 2 we check modifications here from moves and items - let statTable = {atk:'Atk', def:'Def', spa:'SpA', spd:'SpD', spe:'Spe'}; - stat = this.battle.runEvent('Modify' + statTable[statName], this, null, null, stat); + if (this.status === 'par' && statName === 'spe') { + stat = Math.floor(stat / 4); } if (!unmodified) { // Burn attack drop is checked when you get the attack stat upon switch in and used until switch out. if (this.status === 'brn' && statName === 'atk') { - stat = this.battle.clampIntRange(Math.floor(stat / 2), 1); + stat = Math.floor(stat / 2); } } @@ -51,10 +54,9 @@ exports.BattleScripts = { } // Treat here the items. - if ((this.species in {'Cubone':1, 'Marowak':1} && this.item === 'thickclub' && statName === 'atk') || (this.species === 'Pikachu' && this.item === 'lightball' && statName === 'spa')) { + if ((['Cubone', 'Marowak'].includes(this.template.species) && this.item === 'thickclub' && statName === 'atk') || (this.template.species === 'Pikachu' && this.item === 'lightball' && statName === 'spa')) { stat *= 2; - } else if (this.species === 'Ditto' && this.item === 'metalpowder' && statName in {'def':1, 'spd':1}) { - // what. the. fuck. stop playing pokémon + } else if (this.species === 'Ditto' && this.item === 'metalpowder' && ['def', 'spd'].includes(statName)) { stat *= 1.5; } @@ -62,16 +64,16 @@ exports.BattleScripts = { }, }, // Battle scripts. - runMove: function (move, pokemon, targetLoc, sourceEffect) { + runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect) { + let move = this.getActiveMove(moveOrMoveName); let target = this.getTarget(pokemon, move, targetLoc); - if (!sourceEffect && toId(move) !== 'struggle') { - let changedMove = this.runEvent('OverrideDecision', pokemon, target, move); + if (!sourceEffect && move.id !== 'struggle') { + let changedMove = this.runEvent('OverrideAction', pokemon, target, move); if (changedMove && changedMove !== true) { - move = changedMove; - target = null; + move = this.getActiveMove(changedMove); + target = this.resolveTarget(pokemon, move); } } - move = this.getMove(move); if (!target && target !== false) target = this.resolveTarget(pokemon, move); this.setActiveMove(move, pokemon, target); @@ -85,12 +87,7 @@ exports.BattleScripts = { return; } if (!this.runEvent('BeforeMove', pokemon, target, move)) { - // Prevent invulnerability from persisting until the turn ends - pokemon.removeVolatile('twoturnmove'); - // End Bide - pokemon.removeVolatile('bide'); - // Rampage moves end without causing confusion - delete pokemon.volatiles['lockedmove']; + this.runEvent('MoveAborted', pokemon, target, move); this.clearActiveMove(true); // This is only run for sleep and fully paralysed. this.runEvent('AfterMoveSelf', pokemon, target, move); @@ -115,19 +112,167 @@ exports.BattleScripts = { pokemon.moveUsed(move); this.useMove(move, pokemon, target, sourceEffect); this.singleEvent('AfterMove', move, null, pokemon, target, move); - if (!move.selfSwitch && target.hp > 0) this.runEvent('AfterMoveSelf', pokemon, target, move); + if (!move.selfSwitch && target && target.hp > 0) this.runEvent('AfterMoveSelf', pokemon, target, move); + }, + tryMoveHit(target, pokemon, move) { + let positiveBoostTable = [1, 1.33, 1.66, 2, 2.33, 2.66, 3]; + let negativeBoostTable = [1, 0.75, 0.6, 0.5, 0.43, 0.36, 0.33]; + let doSelfDestruct = true; + /** @type {number | false | undefined} */ + let damage = 0; + + if (move.selfdestruct && doSelfDestruct) { + this.faint(pokemon, pokemon, move); + } + + let hitResult = this.singleEvent('PrepareHit', move, {}, target, pokemon, move); + if (!hitResult) { + if (hitResult === false) this.add('-fail', target); + return false; + } + this.runEvent('PrepareHit', pokemon, target, move); + + if (!this.singleEvent('Try', move, null, pokemon, target, move)) { + return false; + } + + hitResult = this.runEvent('TryImmunity', target, pokemon, move); + if (!hitResult) { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon); + return false; + } + + if (move.ignoreImmunity === undefined) { + move.ignoreImmunity = (move.category === 'Status'); + } + + if ((!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type, true)) { + return false; + } + + hitResult = this.runEvent('TryHit', target, pokemon, move); + if (!hitResult) { + if (hitResult === false) this.add('-fail', target); + return false; + } + + /** @type {number | true} */ + let accuracy = move.accuracy; + if (move.alwaysHit) { + accuracy = true; + } else { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + } + // Now, let's calculate the accuracy. + if (accuracy !== true) { + accuracy = Math.floor(accuracy * 255 / 100); + if (move.ohko) { + if (pokemon.level >= target.level) { + accuracy += (pokemon.level - target.level) * 2; + accuracy = Math.min(accuracy, 255); + } else { + this.add('-immune', target, '[ohko]'); + return false; + } + } + if (!move.ignoreAccuracy) { + if (pokemon.boosts.accuracy > 0) { + accuracy *= positiveBoostTable[pokemon.boosts.accuracy]; + } else { + accuracy *= negativeBoostTable[-pokemon.boosts.accuracy]; + } + } + if (!move.ignoreEvasion) { + if (target.boosts.evasion > 0 && !move.ignorePositiveEvasion) { + accuracy *= negativeBoostTable[target.boosts.evasion]; + } else if (target.boosts.evasion < 0) { + accuracy *= positiveBoostTable[-target.boosts.evasion]; + } + } + accuracy = Math.min(Math.floor(accuracy), 255); + accuracy = Math.max(accuracy, 1); + } else { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + } + accuracy = this.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + if (accuracy !== true) accuracy = Math.max(accuracy, 0); + if (move.alwaysHit) { + accuracy = true; + } else { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + } + if (accuracy !== true && accuracy !== 255 && !this.randomChance(accuracy, 256)) { + this.attrLastMove('[miss]'); + this.add('-miss', pokemon); + damage = false; + return damage; + } + move.totalDamage = 0; + pokemon.lastDamage = 0; + if (move.multihit) { + let hits = move.multihit; + if (Array.isArray(hits)) { + if (hits[0] === 2 && hits[1] === 5) { + hits = this.sample([2, 2, 2, 3, 3, 3, 4, 5]); + } else { + hits = this.random(hits[0], hits[1] + 1); + } + } + hits = Math.floor(hits); + let nullDamage = true; + /**@type {number | undefined | false} */ + let moveDamage; + + let isSleepUsable = move.sleepUsable || this.getMove(move.sourceEffect).sleepUsable; + let i; + for (i = 0; i < hits && target.hp && pokemon.hp; i++) { + if (pokemon.status === 'slp' && !isSleepUsable) break; + move.hit = i + 1; + if (move.hit === hits) move.lastHit = true; + moveDamage = this.moveHit(target, pokemon, move); + if (moveDamage === false) break; + if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false; + damage = (moveDamage || 0); + move.totalDamage += damage; + this.eachEvent('Update'); + } + if (i === 0) return 1; + if (nullDamage) damage = false; + this.add('-hitcount', target, i); + } else { + damage = this.moveHit(target, pokemon, move); + move.totalDamage = damage; + } + if (move.category !== 'Status') { + target.gotAttacked(move, damage, pokemon); + } + if (move.ohko) this.add('-ohko'); + + if (!move.negateSecondary) { + this.singleEvent('AfterMoveSecondary', move, null, target, pokemon, move); + this.runEvent('AfterMoveSecondary', target, pokemon, move); + } + + if (move.recoil && move.totalDamage) { + this.damage(this.calcRecoilDamage(move.totalDamage, move), pokemon, target, 'recoil'); + } + return damage; }, - moveHit: function (target, pokemon, move, moveData, isSecondary, isSelf) { - let damage; - move = this.getMoveCopy(move); + /** @return {number | undefined | false} */ + moveHit(target, pokemon, move, moveData, isSecondary, isSelf) { + /** @type {number | false | null | undefined} */ + let damage = undefined; + move = this.getActiveMove(move); if (!moveData) moveData = move; + /**@type {?boolean | number} */ let hitResult = true; if (move.target === 'all' && !isSelf) { hitResult = this.singleEvent('TryHitField', moveData, {}, target, pokemon, move); } else if ((move.target === 'foeSide' || move.target === 'allySide') && !isSelf) { - hitResult = this.singleEvent('TryHitSide', moveData, {}, target.side, pokemon, move); + hitResult = this.singleEvent('TryHitSide', moveData, {}, (target ? target.side : null), pokemon, move); } else if (target) { hitResult = this.singleEvent('TryHit', moveData, {}, target, pokemon, move); } @@ -152,6 +297,7 @@ exports.BattleScripts = { } if (target) { + /**@type {?boolean | number} */ let didSomething = false; damage = this.getDamage(pokemon, target, moveData); @@ -248,24 +394,34 @@ exports.BattleScripts = { } } if (moveData.self) { - let selfRoll; + let selfRoll = 0; if (!isSecondary && moveData.self.boosts) selfRoll = this.random(100); // This is done solely to mimic in-game RNG behaviour. All self drops have a 100% chance of happening but still grab a random number. - if (typeof moveData.self.chance === 'undefined' || selfRoll < moveData.self.chance) { + if (moveData.self.chance === undefined || selfRoll < moveData.self.chance) { this.moveHit(pokemon, pokemon, move, moveData.self, isSecondary, true); } } if (moveData.secondaries && this.runEvent('TrySecondaryHit', target, pokemon, moveData)) { - for (let i = 0; i < moveData.secondaries.length; i++) { + for (const secondary of moveData.secondaries) { // We check here whether to negate the probable secondary status if it's burn or freeze. // In the game, this is checked and if true, the random number generator is not called. // That means that a move that does not share the type of the target can status it. // This means tri-attack can burn fire-types and freeze ice-types. // Unlike gen 1, though, paralysis works for all unless the target is immune to direct move (ie. ground-types and t-wave). - if (!(moveData.secondaries[i].status && moveData.secondaries[i].status in {'brn':1, 'frz':1} && target && target.hasType(move.type))) { - let effectChance = Math.floor(moveData.secondaries[i].chance * 255 / 100); - if (typeof moveData.secondaries[i].chance === 'undefined' || this.random(256) <= effectChance) { - this.moveHit(target, pokemon, move, moveData.secondaries[i], true, isSelf); + if (secondary.status && ['brn', 'frz'].includes(secondary.status) && target && target.hasType(move.type)) { + this.debug('Target immune to [' + secondary.status + ']'); + continue; + } + // A sleeping or frozen target cannot be flinched in Gen 2; King's Rock is exempt + if (secondary.volatileStatus === 'flinch' && target && ['slp', 'frz'].includes(target.status) && !secondary.kingsrock) { + this.debug('Cannot flinch a sleeping or frozen target'); + continue; + } + // Multi-hit moves only roll for status once + if (!move.multihit || move.lastHit) { + let effectChance = Math.floor((secondary.chance || 100) * 255 / 100); + if (typeof secondary.chance === 'undefined' || this.randomChance(effectChance, 256)) { + this.moveHit(target, pokemon, move, secondary, true, isSelf); } } } @@ -279,21 +435,22 @@ exports.BattleScripts = { } } if (move.selfSwitch && pokemon.hp) { - pokemon.switchFlag = move.selfSwitch; + pokemon.switchFlag = move.fullname; } return damage; }, - getDamage: function (pokemon, target, move, suppressMessages) { + getDamage(pokemon, target, move, suppressMessages) { // First of all, we get the move. - if (typeof move === 'string') move = this.getMove(move); - if (typeof move === 'number') { - move = { + if (typeof move === 'string') { + move = this.getActiveMove(move); + } else if (typeof move === 'number') { + move = /** @type {ActiveMove} */ ({ basePower: move, type: '???', category: 'Physical', willCrit: false, flags: {}, - }; + }); } // Let's test for immunities. @@ -331,6 +488,7 @@ exports.BattleScripts = { let type = move.type; // We get the base power and apply basePowerCallback if necessary + /** @type {number | false | null | undefined} */ let basePower = move.basePower; if (move.basePowerCallback) { basePower = move.basePowerCallback.call(this, pokemon, target, move); @@ -344,12 +502,13 @@ exports.BattleScripts = { basePower = this.clampIntRange(basePower, 1); // Checking for the move's Critical Hit ratio - move.critRatio = this.clampIntRange(move.critRatio, 0, 5); + let critRatio = this.runEvent('ModifyCritRatio', pokemon, target, move, move.critRatio || 0); + critRatio = this.clampIntRange(critRatio, 0, 5); let critMult = [0, 16, 8, 4, 3, 2]; move.crit = move.willCrit || false; if (typeof move.willCrit === 'undefined') { - if (move.critRatio) { - move.crit = (this.random(critMult[move.critRatio]) === 0); + if (critRatio) { + move.crit = this.randomChance(1, critMult[critRatio]); } } @@ -359,14 +518,16 @@ exports.BattleScripts = { // Happens after crit calculation if (basePower) { + // confusion damage if (move.isSelfHit) { + // @ts-ignore move.type = move.baseMoveType; basePower = this.runEvent('BasePower', pokemon, target, move, basePower, true); move.type = '???'; } else { basePower = this.runEvent('BasePower', pokemon, target, move, basePower, true); } - if (move.basePowerModifier) { + if (basePower && move.basePowerModifier) { basePower *= move.basePowerModifier; } } @@ -375,6 +536,13 @@ exports.BattleScripts = { // We now check for attacker and defender let level = pokemon.level; + + // Using Beat Up + if (move.allies) { + this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies[0].name); + level = move.allies[0].level; + } + let attacker = pokemon; let defender = target; if (move.useTargetOffensive) attacker = target; @@ -391,6 +559,7 @@ exports.BattleScripts = { if (!suppressMessages) this.add('-crit', target); // Stat level modifications are ignored if they are neutral to or favour the defender. // Reflect and Light Screen defensive boosts are only ignored if stat level modifications were also ignored as a result of that. + // @ts-ignore if (attacker.boosts[atkType] <= defender.boosts[defType]) { unboosted = true; noburndrop = true; @@ -400,6 +569,13 @@ exports.BattleScripts = { let attack = attacker.getStat(atkType, unboosted, noburndrop); let defense = defender.getStat(defType, unboosted); + // Using Beat Up + if (move.allies) { + attack = move.allies[0].template.baseStats.atk; + move.allies.shift(); + defense = defender.template.baseStats.def; + } + // Moves that ignore offense and defense respectively. if (move.ignoreOffensive) { this.debug('Negating (sp)atk boost/penalty.'); @@ -411,6 +587,22 @@ exports.BattleScripts = { defense = target.getStat(defType, true, true); } + // Gen 2 Present has a glitched damage calculation using the secondary types of the Pokemon for the Attacker's Level and Defender's Defense. + if (move.id === 'present') { + /**@type {{[k: string]: number}} */ + const typeIndexes = {"Normal": 0, "Fighting": 1, "Flying": 2, "Poison": 3, "Ground": 4, "Rock": 5, "Bug": 7, "Ghost": 8, "Steel": 9, "Fire": 20, "Water": 21, "Grass": 22, "Electric": 23, "Psychic": 24, "Ice": 25, "Dragon": 26, "Dark": 27}; + attack = 10; + + const attackerLastType = attacker.getTypes().slice(-1)[0]; + const defenderLastType = defender.getTypes().slice(-1)[0]; + + defense = typeIndexes[attackerLastType] || 1; + level = typeIndexes[defenderLastType] || 1; + if (move.crit) { + level *= 2; + } + } + // When either attack or defense are higher than 256, they are both divided by 4 and moded by 256. // This is what cuases the roll over bugs. if (attack >= 256 || defense >= 256) { @@ -447,7 +639,7 @@ exports.BattleScripts = { } // Type effectiveness - let totalTypeMod = this.getEffectiveness(type, target); + let totalTypeMod = target.runEffectiveness(move); // Super effective attack if (totalTypeMod > 0) { if (!suppressMessages) this.add('-supereffective', target); @@ -479,65 +671,6 @@ exports.BattleScripts = { // We are done, this is the final damage return damage; }, - damage: function (damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - effect = this.getEffect(effect); - if (!(damage || damage === 0)) return damage; - if (damage !== 0) damage = this.clampIntRange(damage, 1); - - if (effect.id !== 'struggle-recoil') { // Struggle recoil is not affected by effects - if (effect.effectType === 'Weather' && !target.runStatusImmunity(effect.id)) { - this.debug('weather immunity'); - return 0; - } - damage = this.runEvent('Damage', target, source, effect, damage); - if (!(damage || damage === 0)) { - this.debug('damage event failed'); - return damage; - } - if (target.illusion && effect && effect.effectType === 'Move') { - this.debug('illusion cleared'); - target.illusion = null; - this.add('replace', target, target.getDetails); - } - } - if (damage !== 0) damage = this.clampIntRange(damage, 1); - damage = target.damage(damage, source, effect); - if (source) source.lastDamage = damage; - let name = effect.fullname; - if (name === 'tox') name = 'psn'; - switch (effect.id) { - case 'partiallytrapped': - this.add('-damage', target, target.getHealth, '[from] ' + this.effectData.sourceEffect.fullname, '[partiallytrapped]'); - break; - default: - if (effect.effectType === 'Move') { - this.add('-damage', target, target.getHealth); - } else if (source && source !== target) { - this.add('-damage', target, target.getHealth, '[from] ' + effect.fullname, '[of] ' + source); - } else { - this.add('-damage', target, target.getHealth, '[from] ' + name); - } - break; - } - - if (effect.drain && source) { - this.heal(Math.ceil(damage * effect.drain[0] / effect.drain[1]), source, target, 'drain'); - } - - if (target.fainted || target.hp <= 0) { - this.debug('instafaint: ' + this.faintQueue.map(entry => entry.target).map(pokemon => pokemon.name)); - this.faintMessages(true); - target.faint(); - } else { - damage = this.runEvent('AfterDamage', target, source, effect, damage); - } - - return damage; - }, }; + +exports.BattleScripts = BattleScripts; diff --git a/mods/gen2/statuses.js b/data/mods/gen2/statuses.js similarity index 62% rename from mods/gen2/statuses.js rename to data/mods/gen2/statuses.js index b795dcfe41e7e..932d4226950b7 100644 --- a/mods/gen2/statuses.js +++ b/data/mods/gen2/statuses.js @@ -1,38 +1,48 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { brn: { + name: 'brn', + id: 'brn', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'brn'); }, onAfterMoveSelfPriority: 3, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { this.damage(pokemon.maxhp / 8); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(pokemon.maxhp / 8); }, }, par: { + name: 'par', + id: 'par', + num: 0, inherit: true, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon) { - if (this.random(4) === 0) { + onBeforeMove(pokemon) { + if (this.randomChance(1, 4)) { this.add('cant', pokemon, 'par'); return false; } }, }, slp: { + name: 'slp', + id: 'slp', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'slp'); // 1-6 turns this.effectData.time = this.random(2, 8); }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { pokemon.statusData.time--; if (pokemon.statusData.time <= 0) { pokemon.cureStatus(); @@ -46,58 +56,73 @@ exports.BattleStatuses = { }, }, frz: { + name: 'frz', + id: 'frz', + num: 0, inherit: true, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (move.flags['defrost']) return; this.add('cant', pokemon, 'frz'); return false; }, - onModifyMove: function () {}, - onAfterMoveSecondarySelf: function (pokemon, target, move) { + onModifyMove() {}, + onHit() {}, + onAfterMoveSecondary(target, source, move) { + if ((move.secondary && move.secondary.status === 'brn') || move.statusRoll === 'brn') { + target.cureStatus(); + } + }, + onAfterMoveSecondarySelf(pokemon, target, move) { if (move.flags['defrost']) pokemon.cureStatus(); }, - onResidual: function (pokemon) { - if (this.random(256) < 25) pokemon.cureStatus(); + onResidual(pokemon) { + if (this.randomChance(25, 256)) pokemon.cureStatus(); }, }, psn: { + name: 'psn', + id: 'psn', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'psn'); }, onAfterMoveSelfPriority: 3, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { this.damage(pokemon.maxhp / 8); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(pokemon.maxhp / 8); }, }, tox: { + name: 'tox', + id: 'tox', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'tox'); this.effectData.stage = 0; }, onAfterMoveSelfPriority: 3, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { if (this.effectData.stage < 15) { this.effectData.stage++; } this.damage(this.clampIntRange(pokemon.maxhp / 16, 1) * this.effectData.stage); }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { // Regular poison status and damage after a switchout -> switchin. this.effectData.stage = 0; pokemon.setStatus('psn'); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, }, confusion: { inherit: true, - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.id === 'lockedmove') { this.add('-start', target, 'confusion', '[silent]'); } else { @@ -109,17 +134,17 @@ exports.BattleStatuses = { this.effectData.time = this.random(2, 6); } }, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { pokemon.volatiles.confusion.time--; if (!pokemon.volatiles.confusion.time) { pokemon.removeVolatile('confusion'); return; } this.add('-activate', pokemon, 'confusion'); - if (this.random(2) === 0) { + if (this.randomChance(1, 2)) { return; } - move = { + move = /** @type {ActiveMove} */ ({ basePower: 40, type: '???', baseMoveType: move.type, @@ -128,66 +153,79 @@ exports.BattleStatuses = { isSelfHit: true, noDamageVariance: true, flags: {}, - }; - this.directDamage(this.getDamage(pokemon, pokemon, move)); + }); + let damage = this.getDamage(pokemon, pokemon, move); + if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); + this.directDamage(damage); return false; }, }, partiallytrapped: { inherit: true, - durationCallback: function (target, source) { + durationCallback(target, source) { return this.random(3, 6); }, }, lockedmove: { + name: 'lockedmove', + id: 'lockedmove', + num: 0, // Outrage, Thrash, Petal Dance... - durationCallback: function () { + durationCallback() { return this.random(2, 4); }, - onResidual: function (target) { - if (target.lastMove === 'struggle' || target.status === 'slp') { + onResidual(target) { + if ((target.lastMove && target.lastMove.id === 'struggle') || target.status === 'slp') { // don't lock, and bypass confusion for calming delete target.volatiles['lockedmove']; } }, - onStart: function (target, source, effect) { + onStart(target, source, effect) { this.effectData.move = effect.id; }, - onEnd: function (target) { + onEnd(target) { // Confusion begins even if already confused delete target.volatiles['confusion']; target.addVolatile('confusion'); }, - onLockMove: function (pokemon) { + onLockMove(pokemon) { return this.effectData.move; }, - onBeforeTurn: function (pokemon) { + onMoveAborted(pokemon) { + delete pokemon.volatiles['lockedmove']; + }, + onBeforeTurn(pokemon) { let move = this.getMove(this.effectData.move); if (move.id) { this.debug('Forcing into ' + move.id); - this.changeDecision(pokemon, {move: move.id}); + this.changeAction(pokemon, {move: move.id}); } }, }, sandstorm: { inherit: true, - onWeather: function (target) { + onWeather(target) { this.damage(target.maxhp / 8); }, }, stall: { + name: 'stall', + id: 'stall', + num: 0, duration: 2, - onStart: function () { + onStart() { this.effectData.counter = 127; }, - onStallMove: function () { + onStallMove() { let counter = Math.floor(this.effectData.counter) || 127; this.debug("Success chance: " + Math.round(counter * 1000 / 255) / 10 + "% (" + counter + "/255)"); - return (this.random(255) < counter); + return this.randomChance(counter, 255); }, - onRestart: function () { + onRestart() { this.effectData.counter /= 2; this.effectData.duration = 2; }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/mods/gen2/typechart.js b/data/mods/gen2/typechart.js similarity index 89% rename from mods/gen2/typechart.js rename to data/mods/gen2/typechart.js index 7da10bb382458..3b6043080fc5b 100644 --- a/mods/gen2/typechart.js +++ b/data/mods/gen2/typechart.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleTypeChart = { +/**@type {{[k: string]: ModdedTypeData}} */ +let BattleTypeChart = { "Fire": { inherit: true, damageTaken: { @@ -70,3 +71,5 @@ exports.BattleTypeChart = { }, }, }; + +exports.BattleTypeChart = BattleTypeChart; diff --git a/data/mods/gen3/abilities.js b/data/mods/gen3/abilities.js new file mode 100644 index 0000000000000..7703c0c5ccfbc --- /dev/null +++ b/data/mods/gen3/abilities.js @@ -0,0 +1,191 @@ +'use strict'; + +/**@type {{[k: string]: ModdedAbilityData}} */ +let BattleAbilities = { + "cutecharm": { + inherit: true, + desc: "There is a 1/3 chance a Pokemon making contact with this Pokemon will become infatuated if it is of the opposite gender.", + shortDesc: "1/3 chance of infatuating Pokemon of the opposite gender if they make contact.", + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact']) { + if (this.randomChance(1, 3)) { + source.addVolatile('attract', target); + } + } + }, + }, + "effectspore": { + inherit: true, + desc: "10% chance a Pokemon making contact with this Pokemon will be poisoned, paralyzed, or fall asleep.", + shortDesc: "10% chance of poison/paralysis/sleep on others making contact with this Pokemon.", + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact'] && !source.status) { + let r = this.random(300); + if (r < 10) { + source.setStatus('slp', target); + } else if (r < 20) { + source.setStatus('par', target); + } else if (r < 30) { + source.setStatus('psn', target); + } + } + }, + }, + "flamebody": { + inherit: true, + shortDesc: "1/3 chance a Pokemon making contact with this Pokemon will be burned.", + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact']) { + if (this.randomChance(1, 3)) { + source.trySetStatus('brn', target); + } + } + }, + }, + "flashfire": { + inherit: true, + desc: "This Pokemon is immune to Fire-type moves, as long as it is not frozen. The first time it is hit by a Fire-type move, damage from its Fire-type attacks will be multiplied by 1.5 as long as it remains active and has this Ability. If this Pokemon has a major status condition, is a Fire type, or has a substitute, Will-O-Wisp will not activate this Ability.", + onTryHit(target, source, move) { + if (target !== source && move.type === 'Fire') { + if (move.id === 'willowisp' && (target.hasType('Fire') || target.status || target.volatiles['substitute'])) { + return; + } + if (target.status === 'frz') { + return; + } + if (!target.addVolatile('flashfire')) { + this.add('-immune', target, '[from] ability: Flash Fire'); + } + return null; + } + }, + }, + "lightningrod": { + desc: "If this Pokemon is not the target of a single-target Electric-type move used by an opposing Pokemon, this Pokemon redirects that move to itself. This effect considers Hidden Power a Normal-type move.", + shortDesc: "This Pokemon draws single-target Electric moves used by opponents to itself.", + onFoeRedirectTarget(target, source, source2, move) { + if (move.type !== 'Electric') return; + if (this.validTarget(this.effectData.target, source, move.target)) { + return this.effectData.target; + } + }, + id: "lightningrod", + name: "Lightning Rod", + rating: 3.5, + num: 32, + }, + "minus": { + inherit: true, + desc: "If an active Pokemon has the Plus Ability, this Pokemon's Special Attack is multiplied by 1.5.", + shortDesc: "If an active Pokemon has the Plus Ability, this Pokemon's Sp. Atk is 1.5x.", + onModifySpA(spa, pokemon) { + let allActives = pokemon.side.active.concat(pokemon.side.foe.active); + for (const active of allActives) { + if (!active.fainted && active.hasAbility('plus')) { + return this.chainModify(1.5); + } + } + }, + }, + "plus": { + inherit: true, + desc: "If an active Pokemon has the Minus Ability, this Pokemon's Special Attack is multiplied by 1.5.", + shortDesc: "If an active Pokemon has the Minus Ability, this Pokemon's Sp. Atk is 1.5x.", + onModifySpA(spa, pokemon) { + let allActives = pokemon.side.active.concat(pokemon.side.foe.active); + for (const active of allActives) { + if (!active.fainted && active.hasAbility('minus')) { + return this.chainModify(1.5); + } + } + }, + }, + "poisonpoint": { + inherit: true, + shortDesc: "1/3 chance a Pokemon making contact with this Pokemon will be poisoned.", + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact']) { + if (this.randomChance(1, 3)) { + source.trySetStatus('psn', target); + } + } + }, + }, + "pressure": { + inherit: true, + onStart(pokemon) { + this.add('split'); + for (const line of [false, this.sides[0], this.sides[1], true]) { + if (line === true || line === pokemon.side) { + this.add('-ability', pokemon, 'Pressure', '[silent]'); + } else { + this.log.push(''); + } + } + }, + }, + "roughskin": { + inherit: true, + desc: "Pokemon making contact with this Pokemon lose 1/16 of their maximum HP, rounded down.", + shortDesc: "Pokemon making contact with this Pokemon lose 1/16 of their max HP.", + onAfterDamage(damage, target, source, move) { + if (source && source !== target && move && move.flags['contact']) { + this.damage(source.maxhp / 16, source, target); + } + }, + }, + "shadowtag": { + inherit: true, + desc: "Prevents opposing Pokemon from choosing to switch out.", + shortDesc: "Prevents opposing Pokemon from choosing to switch out.", + onFoeTrapPokemon(pokemon) { + pokemon.trapped = true; + }, + }, + "static": { + inherit: true, + shortDesc: "1/3 chance a Pokemon making contact with this Pokemon will be paralyzed.", + onAfterDamage(damage, target, source, effect) { + if (effect && effect.flags['contact']) { + if (this.randomChance(1, 3)) { + source.trySetStatus('par', target); + } + } + }, + }, + "trace": { + inherit: true, + onUpdate(pokemon) { + if (!pokemon.isStarted) return; + let target = pokemon.side.foe.randomActive(); + if (!target || target.fainted) return; + let ability = this.getAbility(target.ability); + let bannedAbilities = ['forecast', 'multitype', 'trace']; + if (bannedAbilities.includes(target.ability)) { + return; + } + if (pokemon.setAbility(ability)) { + this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); + } + }, + }, + "voltabsorb": { + inherit: true, + desc: "This Pokemon is immune to damaging Electric-type moves and restores 1/4 of its maximum HP, rounded down, when hit by one.", + shortDesc: "This Pokemon heals 1/4 its max HP when hit by a damaging Electric move; immunity.", + onTryHit(target, source, move) { + if (target !== source && move.type === 'Electric' && move.id !== 'thunderwave') { + if (!this.heal(target.maxhp / 4)) { + this.add('-immune', target, '[from] ability: Volt Absorb'); + } + return null; + } + }, + }, + "wonderguard": { + inherit: true, + shortDesc: "This Pokemon is only damaged by supereffective moves and indirect damage.", + }, +}; + +exports.BattleAbilities = BattleAbilities; diff --git a/mods/gen3/formats-data.js b/data/mods/gen3/formats-data.js similarity index 69% rename from mods/gen3/formats-data.js rename to data/mods/gen3/formats-data.js index 44f8d7a43f121..4fd6b27663631 100644 --- a/mods/gen3/formats-data.js +++ b/data/mods/gen3/formats-data.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { inherit: true, tier: "LC", @@ -9,27 +10,27 @@ exports.BattleFormatsData = { tier: "NFE", }, venusaur: { - randomBattleMoves: ["sleeppowder", "sludgebomb", "leechseed", "toxic", "curse", "swordsdance", "synthesis", "hiddenpowerfire"], - tier: "BL", + randomBattleMoves: ["sleeppowder", "sludgebomb", "leechseed", "earthquake", "curse", "swordsdance", "synthesis", "hiddenpowerfire", "hiddenpowerice", "gigadrain"], + tier: "UUBL", }, charmander: { inherit: true, tier: "LC", }, charmeleon: { - tier: "NU", + tier: "NFE", }, charizard: { inherit: true, - randomBattleMoves: ["substitute", "hiddenpowergrass", "fireblast", "sunnyday", "flamethrower", "earthquake", "overheat", "bellydrum", "focuspunch", "dragondance", "hiddenpowerflying", "irontail", "bodyslam"], - tier: "BL", + randomBattleMoves: ["substitute", "hiddenpowergrass", "fireblast", "flamethrower", "earthquake", "bellydrum", "focuspunch", "dragondance", "aerialace"], + tier: "UUBL", }, squirtle: { inherit: true, tier: "LC", }, wartortle: { - tier: "NU", + tier: "NFE", }, blastoise: { inherit: true, @@ -66,7 +67,7 @@ exports.BattleFormatsData = { tier: "NFE", }, pidgeot: { - randomBattleMoves: ["hiddenpowerflying", "return", "pursuit", "whirlwind", "rest", "sleeptalk", "toxic"], + randomBattleMoves: ["aerialace", "return", "hiddenpowerground", "quickattack", "substitute", "toxic"], tier: "NU", }, rattata: { @@ -74,7 +75,7 @@ exports.BattleFormatsData = { }, raticate: { inherit: true, - randomBattleMoves: ["facade", "shadowball", "superfang", "taunt", "substitute", "quickattack", "hiddenpowerfighting"], + randomBattleMoves: ["return", "shadowball", "superfang", "endeavor", "substitute", "quickattack", "hiddenpowerfighting"], tier: "NU", }, spearow: { @@ -103,7 +104,7 @@ exports.BattleFormatsData = { tier: "NU", }, raichu: { - randomBattleMoves: ["hiddenpowerice", "thunderbolt", "bodyslam", "substitute", "toxic", "thunderwave", "surf"], + randomBattleMoves: ["hiddenpowerice", "thunderbolt", "focuspunch", "substitute", "encore", "surf"], tier: "UU", }, sandshrew: { @@ -111,7 +112,7 @@ exports.BattleFormatsData = { tier: "LC", }, sandslash: { - randomBattleMoves: ["earthquake", "rapidspin", "swordsdance", "rockslide", "counter", "brickbreak", "toxic", "bodyslam"], + randomBattleMoves: ["earthquake", "rapidspin", "swordsdance", "rockslide", "counter", "hiddenpowerbug", "toxic", "bodyslam"], tier: "UU", }, nidoranf: { @@ -131,7 +132,7 @@ exports.BattleFormatsData = { tier: "NFE", }, nidoking: { - randomBattleMoves: ["earthquake", "sludgebomb", "icebeam", "thunderbolt", "substitute", "megahorn", "focuspunch", "fireblast", "shadowball", "superpower"], + randomBattleMoves: ["earthquake", "sludgebomb", "icebeam", "thunderbolt", "substitute", "megahorn", "focuspunch", "fireblast", "shadowball"], tier: "UU", }, cleffa: { @@ -141,7 +142,7 @@ exports.BattleFormatsData = { tier: "NFE", }, clefable: { - randomBattleMoves: ["thunderbolt", "icebeam", "flamethrower", "doubleedge", "return", "meteormash", "shadowball", "calmmind", "bellydrum", "cosmicpower", "softboiled", "wish", "protect", "rest", "encore", "counter"], + randomBattleMoves: ["thunderbolt", "icebeam", "flamethrower", "doubleedge", "return", "meteormash", "shadowball", "calmmind", "bellydrum", "softboiled", "wish", "protect", "encore"], tier: "UU", }, vulpix: { @@ -149,7 +150,7 @@ exports.BattleFormatsData = { tier: "LC", }, ninetales: { - randomBattleMoves: ["overheat", "fireblast", "sunnyday", "solarbeam", "flamethrower", "swagger", "willowisp", "hypnosis"], + randomBattleMoves: ["fireblast", "flamethrower", "hiddenpowergrass", "willowisp", "hypnosis", "substitute"], tier: "UU", }, igglybuff: { @@ -160,7 +161,7 @@ exports.BattleFormatsData = { tier: "NFE", }, wigglytuff: { - randomBattleMoves: ["wish", "protect", "seismictoss", "toxic", "doubleedge", "brickbreak", "shadowball", "facade"], + randomBattleMoves: ["wish", "protect", "toxic", "doubleedge", "icebeam", "thunderbolt", "fireblast"], tier: "NU", }, zubat: { @@ -170,8 +171,8 @@ exports.BattleFormatsData = { tier: "NU", }, crobat: { - randomBattleMoves: ["sludgebomb", "hiddenpowerflying", "aerialace", "hiddenpowerground", "hiddenpowerfighting", "shadowball", "gigadrain", "taunt"], - tier: "BL", + randomBattleMoves: ["sludgebomb", "aerialace", "hiddenpowerground", "hiddenpowerfighting", "shadowball", "gigadrain", "taunt"], + tier: "UUBL", }, oddish: { inherit: true, @@ -182,11 +183,11 @@ exports.BattleFormatsData = { tier: "NFE", }, vileplume: { - randomBattleMoves: ["sunnyday", "solarbeam", "synthesis", "sludgebomb", "gigadrain", "hiddenpowerfire", "leechseed", "toxic"], + randomBattleMoves: ["sunnyday", "solarbeam", "synthesis", "sludgebomb", "gigadrain", "hiddenpowerfire", "leechseed", "toxic", "sleeppowder", "aromatherapy"], tier: "UU", }, bellossom: { - randomBattleMoves: ["sleeppowder", "stunspore", "leechseed", "moonlight", "gigadrain", "sludgebomb", "hiddenpowerground"], + randomBattleMoves: ["sleeppowder", "stunspore", "leechseed", "moonlight", "gigadrain", "sludgebomb", "magicalleaf", "sunnyday", "solarbeam", "hiddenpowerfire"], tier: "NU", }, paras: { @@ -194,7 +195,7 @@ exports.BattleFormatsData = { tier: "LC", }, parasect: { - randomBattleMoves: ["swordsdance", "spore", "return", "hiddenpowerground", "sludgebomb", "aromatherapy", "gigadrain"], + randomBattleMoves: ["swordsdance", "spore", "return", "hiddenpowerground", "sludgebomb", "aromatherapy", "gigadrain", "hiddenpowerbug"], tier: "NU", }, venonat: { @@ -206,11 +207,11 @@ exports.BattleFormatsData = { tier: "NU", }, diglett: { - tier: "LC", + tier: "NU", }, dugtrio: { inherit: true, - randomBattleMoves: ["earthquake", "rockslide", "hiddenpowerice", "aerialace", "substitute"], + randomBattleMoves: ["earthquake", "rockslide", "hiddenpowerbug", "aerialace", "substitute"], tier: "OU", }, meowth: { @@ -218,7 +219,7 @@ exports.BattleFormatsData = { tier: "LC", }, persian: { - randomBattleMoves: ["fakeout", "return", "shadowball", "hiddenpowerfighting", "thunderbolt", "hiddenpowerice", "taunt", "toxic", "screech", "substitute", "hypnosis", "bodyslam", "roar", "rest", "sleeptalk"], + randomBattleMoves: ["fakeout", "return", "shadowball", "hiddenpowerfighting", "thunderbolt", "hypnosis"], tier: "UU", }, psyduck: { @@ -235,7 +236,7 @@ exports.BattleFormatsData = { }, primeape: { inherit: true, - randomBattleMoves: ["crosschop", "earthquake", "overheat", "taunt", "toxic", "rockslide", "return"], + randomBattleMoves: ["crosschop", "earthquake", "rockslide", "hiddenpowerghost", "bulkup", "substitute", "endure", "reversal"], tier: "UU", }, growlithe: { @@ -243,19 +244,19 @@ exports.BattleFormatsData = { tier: "LC", }, arcanine: { - randomBattleMoves: ["fireblast", "extremespeed", "hiddenpowerground", "rest", "sleeptalk", "toxic", "roar"], - tier: "BL", + randomBattleMoves: ["fireblast", "flamethrower", "extremespeed", "hiddenpowerground", "hiddenpowergrass", "rest", "sleeptalk", "toxic", "roar"], + tier: "UUBL", }, poliwag: { inherit: true, tier: "LC", }, poliwhirl: { - tier: "NU", + tier: "NFE", }, poliwrath: { inherit: true, - randomBattleMoves: ["earthquake", "hydropump", "icebeam", "bulkup", "brickbreak", "toxic"], + randomBattleMoves: ["hydropump", "icebeam", "bulkup", "brickbreak", "toxic", "substitute", "hiddenpowerghost", "hypnosis"], tier: "UU", }, politoed: { @@ -263,26 +264,26 @@ exports.BattleFormatsData = { tier: "UU", }, abra: { - tier: "LC", + tier: "NU", }, kadabra: { - tier: "BL", + tier: "UUBL", }, alakazam: { inherit: true, randomBattleMoves: ["firepunch", "icepunch", "thunderpunch", "psychic", "calmmind", "encore", "thunderwave", "substitute", "recover"], - tier: "BL", + tier: "UUBL", }, machop: { tier: "LC", }, machoke: { - tier: "NU", + tier: "NFE", }, machamp: { inherit: true, - randomBattleMoves: ["crosschop", "earthquake", "bulkup", "bodyslam", "rockslide", "rest", "sleeptalk"], - tier: "BL", + randomBattleMoves: ["crosschop", "earthquake", "bulkup", "hiddenpowerghost", "rockslide", "rest", "sleeptalk"], + tier: "UUBL", }, bellsprout: { inherit: true, @@ -290,10 +291,10 @@ exports.BattleFormatsData = { }, weepinbell: { inherit: true, - tier: "NU", + tier: "NFE", }, victreebel: { - randomBattleMoves: ["sleeppowder", "sludgebomb", "synthesis", "sunnyday", "hiddenpowerfighting", "bodyslam", "swordsdance"], + randomBattleMoves: ["sleeppowder", "sludgebomb", "synthesis", "sunnyday", "solarbeam", "gigadrain", "hiddenpowerfire", "hiddenpowerground", "swordsdance"], tier: "UU", }, tentacool: { @@ -318,7 +319,7 @@ exports.BattleFormatsData = { }, rapidash: { inherit: true, - randomBattleMoves: ["fireblast", "agility", "substitute", "batonpass", "toxic", "hiddenpowergrass", "rest", "sleeptalk"], + randomBattleMoves: ["fireblast", "agility", "substitute", "batonpass", "toxic", "hiddenpowergrass", "hypnosis", "sunnyday", "solarbeam"], tier: "UU", }, slowpoke: { @@ -326,8 +327,8 @@ exports.BattleFormatsData = { tier: "LC", }, slowbro: { - randomBattleMoves: ["calmmind", "disable", "fireblast", "icebeam", "surf", "rest", "sleeptalk", "psychic"], - tier: "BL", + randomBattleMoves: ["calmmind", "thunderwave", "fireblast", "icebeam", "surf", "rest", "sleeptalk", "psychic"], + tier: "UUBL", }, slowking: { randomBattleMoves: ["surf", "psychic", "fireblast", "flamethrower", "icebeam", "calmmind", "thunderwave", "counter", "rest", "sleeptalk"], @@ -338,12 +339,12 @@ exports.BattleFormatsData = { }, magneton: { inherit: true, - randomBattleMoves: ["thunderbolt", "hiddenpowerice", "rest", "sleeptalk", "thunderwave", "toxic"], + randomBattleMoves: ["thunderbolt", "hiddenpowerice", "rest", "sleeptalk", "thunderwave", "toxic", "substitute"], tier: "OU", }, farfetchd: { inherit: true, - randomBattleMoves: ["swordsdance", "agility", "slash", "hiddenpowerground", "shadowball", "substitute", "flail"], + randomBattleMoves: ["swordsdance", "agility", "slash", "hiddenpowerground", "aerialace", "substitute", "flail", "batonpass", "knockoff"], tier: "NU", }, doduo: { @@ -351,15 +352,15 @@ exports.BattleFormatsData = { }, dodrio: { inherit: true, - randomBattleMoves: ["doubleedge", "return", "drillpeck", "quickattack", "flail", "hiddenpowerground", "agility", "substitute", "endure", "batonpass", "taunt", "rest"], - tier: "BL", + randomBattleMoves: ["doubleedge", "return", "drillpeck", "quickattack", "flail", "hiddenpowerground", "substitute", "endure", "batonpass"], + tier: "UUBL", }, seel: { inherit: true, tier: "LC", }, dewgong: { - randomBattleMoves: ["rest", "sleeptalk", "icebeam", "surf", "perishsong", "toxic", "hiddenpowerfire", "fakeout"], + randomBattleMoves: ["rest", "sleeptalk", "icebeam", "surf", "toxic", "hiddenpowerelectric", "encore"], tier: "NU", }, grimer: { @@ -367,7 +368,7 @@ exports.BattleFormatsData = { tier: "LC", }, muk: { - randomBattleMoves: ["sludgebomb", "hiddenpowerground", "curse", "fireblast", "icepunch", "bodyslam", "rest", "sleeptalk", "toxic", "shadowpunch", "memento", "taunt"], + randomBattleMoves: ["sludgebomb", "hiddenpowerground", "curse", "fireblast", "rest", "sleeptalk", "substitute", "shadowpunch", "focuspunch", "explosion"], tier: "UU", }, shellder: { @@ -386,15 +387,15 @@ exports.BattleFormatsData = { }, gengar: { inherit: true, - randomBattleMoves: ["thunderbolt", "icepunch", "firepunch", "explosion", "willowisp", "destinybond", "taunt", "substitute", "meanlook", "perishsong", "shadowball"], + randomBattleMoves: ["thunderbolt", "icepunch", "firepunch", "explosion", "willowisp", "destinybond", "taunt", "substitute", "hypnosis", "psychic", "shadowball"], tier: "OU", }, onix: { tier: "LC", }, steelix: { - randomBattleMoves: ["earthquake", "rockslide", "hiddenpowerrock", "hiddenpowersteel", "irontail", "roar", "toxic", "rest", "explosion", "doubleedge"], - tier: "BL", + randomBattleMoves: ["earthquake", "hiddenpowerrock", "irontail", "roar", "toxic", "rest", "explosion", "doubleedge"], + tier: "UUBL", }, drowzee: { inherit: true, @@ -402,14 +403,14 @@ exports.BattleFormatsData = { }, hypno: { inherit: true, - randomBattleMoves: ["psychic", "hypnosis", "firepunch", "icepunch", "thunderpunch", "calmmind"], + randomBattleMoves: ["psychic", "hypnosis", "firepunch", "icepunch", "thunderpunch", "calmmind", "batonpass", "wish", "protect", "toxic"], tier: "UU", }, krabby: { tier: "LC", }, kingler: { - randomBattleMoves: ["doubleedge", "return", "bodyslam", "hiddenpowerground", "mudshot", "swordsdance", "crabhammer", "knockoff", "toxic", "rest", "sleeptalk", "haze", "surf"], + randomBattleMoves: ["doubleedge", "return", "bodyslam", "hiddenpowerghost", "mudshot", "swordsdance", "endure", "flail", "surf"], tier: "NU", }, voltorb: { @@ -417,7 +418,7 @@ exports.BattleFormatsData = { tier: "LC", }, electrode: { - randomBattleMoves: ["thunderbolt", "thunder", "hiddenpowergrass", "hiddenpowerice", "explosion", "raindance", "lightscreen", "taunt", "thunderwave", "substitute"], + randomBattleMoves: ["thunderbolt", "hiddenpowergrass", "hiddenpowerice", "explosion", "toxic", "taunt", "thunderwave", "substitute"], tier: "UU", }, exeggcute: { @@ -427,7 +428,7 @@ exports.BattleFormatsData = { exeggutor: { inherit: true, randomBattleMoves: ["solarbeam", "gigadrain", "psychic", "hiddenpowerice", "hiddenpowerfire", "explosion", "sunnyday", "sleeppowder", "stunspore", "synthesis", "leechseed"], - tier: "BL", + tier: "UUBL", }, cubone: { tier: "LC", @@ -435,28 +436,28 @@ exports.BattleFormatsData = { marowak: { inherit: true, randomBattleMoves: ["earthquake", "bonemerang", "rockslide", "doubleedge", "swordsdance"], - tier: "BL", + tier: "UUBL", }, tyrogue: { tier: "LC", }, hitmonlee: { inherit: true, - randomBattleMoves: ["brickbreak", "highjumpkick", "rockslide", "earthquake", "machpunch", "focuspunch", "reversal", "substitute", "endure", "bulkup"], + randomBattleMoves: ["brickbreak", "highjumpkick", "rockslide", "earthquake", "machpunch", "focuspunch", "reversal", "substitute", "endure", "bulkup", "hiddenpowerghost"], tier: "UU", }, hitmonchan: { inherit: true, - randomBattleMoves: ["bulkup", "highjumpkick", "rapidspin", "machpunch", "return", "earthquake", "rockslide"], + randomBattleMoves: ["bulkup", "skyuppercut", "rapidspin", "machpunch", "hiddenpowerghost", "earthquake", "rockslide", "substitute", "focuspunch"], tier: "NU", }, hitmontop: { - randomBattleMoves: ["brickbreak", "highjumpkick", "rockslide", "earthquake", "machpunch", "endeavor", "substitute", "endure", "bulkup", "rapidspin", "counter"], + randomBattleMoves: ["brickbreak", "highjumpkick", "rockslide", "earthquake", "machpunch", "endeavor", "substitute", "endure", "bulkup", "rapidspin", "counter", "hiddenpowerghost"], tier: "UU", }, lickitung: { inherit: true, - randomBattleMoves: ["wish", "protect", "healbell", "seismictoss", "bodyslam", "earthquake"], + randomBattleMoves: ["wish", "protect", "healbell", "seismictoss", "bodyslam", "toxic"], tier: "NU", }, koffing: { @@ -464,19 +465,19 @@ exports.BattleFormatsData = { }, weezing: { randomBattleMoves: ["sludgebomb", "haze", "flamethrower", "explosion", "painsplit", "willowisp", "thunderbolt", "shadowball", "toxic"], - tier: "BL", + tier: "UUBL", }, rhyhorn: { tier: "LC", }, rhydon: { inherit: true, - randomBattleMoves: ["earthquake", "rockslide", "hiddenpowerrock", "megahorn", "doubleedge", "focuspunch", "substitute", "toxic"], - tier: "BL", + randomBattleMoves: ["earthquake", "hiddenpowerrock", "megahorn", "doubleedge", "focuspunch", "substitute", "toxic"], + tier: "UUBL", }, chansey: { inherit: true, - tier: "BL", + tier: "UUBL", }, blissey: { randomBattleMoves: ["icebeam", "thunderbolt", "flamethrower", "seismictoss", "toxic", "thunderwave", "wish", "protect", "softboiled", "calmmind", "counter"], @@ -484,7 +485,7 @@ exports.BattleFormatsData = { }, tangela: { inherit: true, - randomBattleMoves: ["sunnyday", "solarbeam", "hiddenpowerfire", "sleeppowder", "gigadrain", "stunspore", "leechseed"], + randomBattleMoves: ["sunnyday", "solarbeam", "hiddenpowerfire", "sleeppowder", "gigadrain", "stunspore", "leechseed", "morningsun"], tier: "NU", }, kangaskhan: { @@ -501,8 +502,8 @@ exports.BattleFormatsData = { }, kingdra: { inherit: true, - randomBattleMoves: ["hydropump", "surf", "icebeam", "hiddenpowergrass", "dragonbreath", "doubleedge", "return", "raindance", "rest", "sleeptalk"], - tier: "BL", + randomBattleMoves: ["hydropump", "surf", "icebeam", "hiddenpowergrass", "dragonbreath", "raindance", "rest", "sleeptalk"], + tier: "UUBL", }, goldeen: { tier: "LC", @@ -517,29 +518,30 @@ exports.BattleFormatsData = { }, starmie: { inherit: true, - randomBattleMoves: ["surf", "thunderbolt", "icebeam", "psychic", "rapidspin", "recover", "thunderwave", "toxic"], + randomBattleMoves: ["surf", "thunderbolt", "icebeam", "psychic", "rapidspin", "recover", "hydropump"], tier: "OU", }, mrmime: { inherit: true, - randomBattleMoves: ["taunt", "thunderbolt", "psychic", "firepunch", "icepunch", "lightscreen", "reflect", "calmmind", "encore", "batonpass"], + randomBattleMoves: ["substitute", "thunderbolt", "psychic", "firepunch", "icepunch", "hypnosis", "reflect", "calmmind", "encore", "batonpass"], tier: "UU", }, scyther: { inherit: true, + randomBattleMoves: ["swordsdance", "aerialace", "silverwind", "hiddenpowerground", "quickattack", "batonpass", "morningsun"], tier: "UU", }, scizor: { inherit: true, - randomBattleMoves: ["steelwing", "silverwind", "hiddenpowerrock", "morningsun", "swordsdance", "agility", "batonpass", "hiddenpowerbug"], - tier: "BL", + randomBattleMoves: ["steelwing", "silverwind", "hiddenpowerrock", "morningsun", "swordsdance", "agility", "batonpass", "hiddenpowerground"], + tier: "UUBL", }, smoochum: { tier: "LC", }, jynx: { - randomBattleMoves: ["icebeam", "psychic", "hiddenpowerfire", "lovelykiss", "calmmind", "substitute", "meanlook", "perishsong"], - tier: "BL", + randomBattleMoves: ["icebeam", "psychic", "hiddenpowerfire", "lovelykiss", "calmmind", "substitute"], + tier: "UUBL", }, elekid: { inherit: true, @@ -547,7 +549,7 @@ exports.BattleFormatsData = { }, electabuzz: { inherit: true, - randomBattleMoves: ["thunderbolt", "icepunch", "firepunch", "crosschop", "focuspunch", "substitute", "toxic", "thunderwave"], + randomBattleMoves: ["thunderbolt", "icepunch", "firepunch", "crosschop", "focuspunch", "substitute", "hiddenpowergrass"], tier: "UU", }, magby: { @@ -555,7 +557,7 @@ exports.BattleFormatsData = { }, magmar: { inherit: true, - randomBattleMoves: ["crosschop", "fireblast", "psychic", "thunderpunch", "toxic"], + randomBattleMoves: ["crosschop", "fireblast", "psychic", "thunderpunch", "focuspunch", "substitute", "hiddenpowergrass"], tier: "UU", }, pinsir: { @@ -565,20 +567,20 @@ exports.BattleFormatsData = { }, tauros: { inherit: true, - randomBattleMoves: ["bodyslam", "doubleedge", "return", "earthquake", "hiddenpowerrock"], - tier: "BL", + randomBattleMoves: ["bodyslam", "doubleedge", "return", "earthquake", "hiddenpowerrock", "hiddenpowerghost", "irontail"], + tier: "UUBL", }, magikarp: { tier: "LC", }, gyarados: { - randomBattleMoves: ["hiddenpowerflying", "earthquake", "doubleedge", "hydropump", "blizzard", "dragondance", "taunt", "thunderwave"], + randomBattleMoves: ["hiddenpowerflying", "earthquake", "doubleedge", "hydropump", "substitute", "dragondance", "taunt"], tier: "OU", }, lapras: { inherit: true, - randomBattleMoves: ["dragondance", "return", "icebeam", "hydropump", "thunderbolt", "healbell", "psychic"], - tier: "BL", + randomBattleMoves: ["rest", "sleeptalk", "icebeam", "hydropump", "thunderbolt", "healbell"], + tier: "UUBL", }, ditto: { randomBattleMoves: ["transform"], @@ -589,25 +591,25 @@ exports.BattleFormatsData = { }, vaporeon: { randomBattleMoves: ["hydropump", "surf", "icebeam", "wish", "toxic", "protect", "roar"], - tier: "BL", + tier: "UUBL", }, jolteon: { - randomBattleMoves: ["thunderbolt", "hiddenpowerice", "substitute", "agility", "batonpass", "toxic", "thunderwave", "wish"], + randomBattleMoves: ["thunderbolt", "hiddenpowerice", "substitute", "batonpass", "toxic", "wish"], tier: "OU", }, flareon: { - randomBattleMoves: ["return", "bodyslam", "quickattack", "shadowball", "fireblast", "overheat", "hiddenpowergrass"], + randomBattleMoves: ["return", "bodyslam", "quickattack", "shadowball", "fireblast", "hiddenpowergrass", "wish", "protect", "toxic"], tier: "NU", }, espeon: { inherit: true, - randomBattleMoves: ["psychic", "morningsun", "calmmind", "substitute", "wish", "protect", "batonpass", "reflect", "lightscreen"], - tier: "BL", + randomBattleMoves: ["psychic", "morningsun", "calmmind", "substitute", "wish", "protect", "batonpass", "reflect", "hiddenpowerfire"], + tier: "UUBL", }, umbreon: { inherit: true, randomBattleMoves: ["psychic", "meanlook", "charm", "curse", "substitute", "wish", "protect", "batonpass", "taunt", "toxic", "moonlight"], - tier: "BL", + tier: "UUBL", }, porygon: { tier: "LC", @@ -620,14 +622,14 @@ exports.BattleFormatsData = { tier: "LC", }, omastar: { - randomBattleMoves: ["raindance", "hydropump", "icebeam", "spikes", "toxic", "haze"], + randomBattleMoves: ["raindance", "hydropump", "icebeam", "spikes", "surf", "hiddenpowergrass"], tier: "UU", }, kabuto: { tier: "LC", }, kabutops: { - randomBattleMoves: ["return", "brickbreak", "rockslide", "swordsdance", "rapidspin", "toxic"], + randomBattleMoves: ["return", "brickbreak", "rockslide", "swordsdance", "rapidspin", "hiddenpowerground", "surf"], tier: "UU", }, aerodactyl: { @@ -636,13 +638,13 @@ exports.BattleFormatsData = { }, snorlax: { inherit: true, - randomBattleMoves: ["earthquake", "brickbreak", "shadowball", "return", "selfdestruct", "rockslide", "rest", "sleeptalk"], + randomBattleMoves: ["earthquake", "bodyslam", "shadowball", "return", "selfdestruct", "curse", "rest", "sleeptalk"], tier: "OU", }, articuno: { inherit: true, - randomBattleMoves: ["icebeam", "toxic", "roar", "reflect", "healbell", "rest", "sleeptalk", "haze", "extrasensory", "substitute", "agility"], - tier: "BL", + randomBattleMoves: ["icebeam", "toxic", "roar", "reflect", "healbell", "rest", "sleeptalk", "haze", "hiddenpowerelectric", "substitute", "agility"], + tier: "UUBL", }, zapdos: { inherit: true, @@ -652,27 +654,27 @@ exports.BattleFormatsData = { moltres: { inherit: true, randomBattleMoves: ["fireblast", "flamethrower", "hiddenpowergrass", "doubleedge", "morningsun", "toxic", "agility", "willowisp", "substitute"], - tier: "BL", + tier: "UUBL", }, dratini: { tier: "LC", }, dragonair: { - tier: "NU", + tier: "NFE", }, dragonite: { inherit: true, randomBattleMoves: ["hiddenpowerflying", "earthquake", "dragondance", "fireblast", "flamethrower", "icebeam", "thunderbolt", "thunderwave", "healbell", "substitute", "focuspunch"], - tier: "BL", + tier: "UUBL", }, mewtwo: { inherit: true, - randomBattleMoves: ["calmmind", "psychic", "icebeam", "thunderbolt", "flamethrower", "bulkup", "shadowball", "earthquake", "brickbreak", "recover", "taunt", "selfdestruct"], + randomBattleMoves: ["calmmind", "psychic", "icebeam", "thunderbolt", "flamethrower", "recover", "taunt", "selfdestruct"], tier: "Uber", }, mew: { inherit: true, - randomBattleMoves: ["softboiled", "calmmind", "psychic", "icebeam", "thunderbolt", "flamethrower", "swordsdance", "shadowball", "earthquake", "focuspunch", "substitute", "taunt", "hypnosis", "toxic", "transform", "roar", "reflect", "counter", "explosion"], + randomBattleMoves: ["softboiled", "calmmind", "psychic", "icebeam", "thunderbolt", "flamethrower", "hypnosis", "transform", "explosion"], tier: "Uber", }, chikorita: { @@ -683,7 +685,7 @@ exports.BattleFormatsData = { tier: "NFE", }, meganium: { - randomBattleMoves: ["hiddenpowergrass", "razorleaf", "bodyslam", "return", "earthquake", "swordsdance", "counter", "synthesis", "leechseed", "toxic", "reflect", "lightscreen"], + randomBattleMoves: ["razorleaf", "hiddenpowerfire", "hiddenpowerice", "counter", "synthesis", "leechseed", "toxic", "lightscreen"], tier: "UU", }, cyndaquil: { @@ -691,12 +693,12 @@ exports.BattleFormatsData = { tier: "LC", }, quilava: { - tier: "NU", + tier: "NFE", }, typhlosion: { inherit: true, randomBattleMoves: ["fireblast", "flamethrower", "earthquake", "thunderpunch", "hiddenpowerice", "hiddenpowergrass", "substitute"], - tier: "BL", + tier: "UUBL", }, totodile: { inherit: true, @@ -706,7 +708,7 @@ exports.BattleFormatsData = { tier: "NFE", }, feraligatr: { - randomBattleMoves: ["earthquake", "rockslide", "icebeam", "focuspunch", "substitute", "swordsdance"], + randomBattleMoves: ["earthquake", "rockslide", "focuspunch", "substitute", "swordsdance", "hydropump"], tier: "UU", }, sentret: { @@ -729,7 +731,7 @@ exports.BattleFormatsData = { tier: "LC", }, ledian: { - randomBattleMoves: ["swordsdance", "substitute", "batonpass", "lightscreen", "reflect", "return", "hiddenpowerbug", "hiddenpowerflying"], + randomBattleMoves: ["swordsdance", "substitute", "batonpass", "agility", "reflect", "silverwind"], tier: "NU", }, spinarak: { @@ -752,7 +754,7 @@ exports.BattleFormatsData = { tier: "LC", }, togetic: { - randomBattleMoves: ["seismictoss", "toxic", "softboiled", "batonpass", "encore", "wish", "flamethrower", "aerialace", "doubleedge", "shadowball"], + randomBattleMoves: ["seismictoss", "toxic", "softboiled", "batonpass", "encore", "wish", "flamethrower", "bodyslam"], tier: "NU", }, natu: { @@ -760,7 +762,7 @@ exports.BattleFormatsData = { tier: "LC", }, xatu: { - randomBattleMoves: ["psychic", "nightshade", "calmmind", "wish", "protect", "batonpass", "reflect", "lightscreen", "thunderwave", "toxic"], + randomBattleMoves: ["psychic", "hiddenpowerfire", "calmmind", "wish", "substitute", "batonpass", "reflect", "rest", "sleeptalk"], tier: "UU", }, mareep: { @@ -771,7 +773,7 @@ exports.BattleFormatsData = { tier: "NFE", }, ampharos: { - randomBattleMoves: ["thunderbolt", "hiddenpowerice", "firepunch", "focuspunch", "substitute", "thunderwave", "healbell", "reflect", "lightscreen"], + randomBattleMoves: ["thunderbolt", "hiddenpowerice", "firepunch", "focuspunch", "substitute", "thunderwave", "healbell", "lightscreen"], tier: "UU", }, azurill: { @@ -781,7 +783,7 @@ exports.BattleFormatsData = { tier: "NFE", }, azumarill: { - randomBattleMoves: ["focuspunch", "bodyslam", "hydropump", "surf", "substitute", "encore", "sing"], + randomBattleMoves: ["focuspunch", "bodyslam", "hydropump", "surf", "substitute", "encore", "return", "doubleedge", "hiddenpowerghost"], tier: "UU", }, sudowoodo: { @@ -796,11 +798,11 @@ exports.BattleFormatsData = { }, jumpluff: { randomBattleMoves: ["hiddenpowerflying", "leechseed", "encore", "sleeppowder", "synthesis", "toxic", "substitute"], - tier: "BL", + tier: "UUBL", }, aipom: { inherit: true, - randomBattleMoves: ["taunt", "doubleedge", "shadowball", "batonpass", "focuspunch", "thunderwave"], + randomBattleMoves: ["taunt", "doubleedge", "shadowball", "batonpass", "focuspunch", "thunderwave", "substitute"], tier: "NU", }, sunkern: { @@ -819,12 +821,12 @@ exports.BattleFormatsData = { tier: "LC", }, quagsire: { - randomBattleMoves: ["earthquake", "surf", "icebeam", "toxic", "rest", "sleeptalk", "curse", "counter"], + randomBattleMoves: ["earthquake", "surf", "icebeam", "toxic", "rest", "hiddenpowerrock", "curse", "counter"], tier: "UU", }, murkrow: { inherit: true, - randomBattleMoves: ["drillpeck", "shadowball", "hiddenpowerfighting", "feintattack", "meanlook", "perishsong", "substitute", "protect", "taunt"], + randomBattleMoves: ["drillpeck", "shadowball", "hiddenpowerfighting", "feintattack", "meanlook", "perishsong", "substitute", "protect", "doubleedge"], tier: "NU", }, misdreavus: { @@ -842,11 +844,11 @@ exports.BattleFormatsData = { }, wobbuffet: { inherit: true, - randomBattleMoves: ["counter", "mirrorcoat", "encore", "safeguard", "tickle"], + randomBattleMoves: ["counter", "mirrorcoat", "encore", "safeguard"], tier: "Uber", }, girafarig: { - randomBattleMoves: ["psychic", "thunderbolt", "calmmind", "agility", "substitute", "batonpass", "thunderwave", "wish", "reflect", "lightscreen"], + randomBattleMoves: ["psychic", "thunderbolt", "calmmind", "agility", "substitute", "batonpass", "crunch", "wish", "reflect"], tier: "UU", }, pineco: { @@ -854,7 +856,7 @@ exports.BattleFormatsData = { tier: "LC", }, forretress: { - randomBattleMoves: ["hiddenpowerbug", "earthquake", "counter", "explosion", "rapidspin", "spikes", "toxic", "lightscreen", "hiddenpowersteel"], + randomBattleMoves: ["hiddenpowerbug", "earthquake", "counter", "explosion", "rapidspin", "spikes", "toxic"], tier: "OU", }, dunsparce: { @@ -863,7 +865,7 @@ exports.BattleFormatsData = { }, gligar: { inherit: true, - randomBattleMoves: ["earthquake", "hiddenpowerflying", "rockslide", "irontail", "steelwing", "swordsdance", "counter", "endure"], + randomBattleMoves: ["earthquake", "hiddenpowerflying", "rockslide", "irontail", "quickattack", "swordsdance", "substitute"], tier: "UU", }, snubbull: { @@ -871,12 +873,12 @@ exports.BattleFormatsData = { tier: "LC", }, granbull: { - randomBattleMoves: ["return", "doubleedge", "bodyslam", "earthquake", "shadowball", "focuspunch", "overheat", "fireblast", "substitute", "healbell", "thunderwave", "counter"], + randomBattleMoves: ["return", "doubleedge", "bodyslam", "earthquake", "shadowball", "focuspunch", "overheat", "bulkup", "substitute", "healbell", "thunderwave", "counter"], tier: "UU", }, qwilfish: { inherit: true, - randomBattleMoves: ["spikes", "surf", "hydropump", "sludgebomb", "selfdestruct", "destinybond", "swordsdance", "thunderwave", "shadowball", "return"], + randomBattleMoves: ["spikes", "surf", "hydropump", "sludgebomb", "selfdestruct", "destinybond", "swordsdance", "shadowball", "hiddenpowerground"], tier: "UU", }, shuckle: { @@ -890,7 +892,7 @@ exports.BattleFormatsData = { }, sneasel: { inherit: true, - randomBattleMoves: ["brickbreak", "shadowball", "doubleedge", "return", "quickattack", "focuspunch", "substitute", "swordsdance", "taunt"], + randomBattleMoves: ["brickbreak", "shadowball", "doubleedge", "return", "quickattack", "focuspunch", "substitute", "swordsdance", "fakeout", "icebeam"], tier: "UU", }, teddiursa: { @@ -898,8 +900,8 @@ exports.BattleFormatsData = { tier: "LC", }, ursaring: { - randomBattleMoves: ["return", "bodyslam", "earthquake", "focuspunch", "swordsdance", "sleeptalk"], - tier: "BL", + randomBattleMoves: ["return", "bodyslam", "earthquake", "focuspunch", "swordsdance", "hiddenpowerghost"], + tier: "UUBL", }, slugma: { tier: "LC", @@ -914,24 +916,24 @@ exports.BattleFormatsData = { tier: "LC", }, piloswine: { - randomBattleMoves: ["earthquake", "rockslide", "toxic", "icebeam", "icywind", "rest", "sleeptalk"], + randomBattleMoves: ["earthquake", "rockslide", "toxic", "icebeam", "doubleedge", "rest", "sleeptalk"], tier: "NU", }, corsola: { inherit: true, - randomBattleMoves: ["calmmind", "recover", "surf", "toxic", "refresh"], + randomBattleMoves: ["calmmind", "recover", "surf", "toxic", "reflect", "icebeam"], tier: "NU", }, remoraid: { tier: "LC", }, octillery: { - randomBattleMoves: ["sludgebomb", "icebeam", "rockblast", "surf", "hiddenpowerground", "thunderwave", "flamethrower", "fireblast", "psychic"], + randomBattleMoves: ["icebeam", "rockblast", "surf", "hiddenpowergrass", "thunderwave", "flamethrower", "fireblast"], tier: "NU", }, delibird: { inherit: true, - randomBattleMoves: ["aerialace", "focuspunch", "icebeam", "quickattack"], + randomBattleMoves: ["aerialace", "focuspunch", "icebeam", "quickattack", "hiddenpowerground", "rapidspin"], tier: "NU", }, mantine: { @@ -940,7 +942,7 @@ exports.BattleFormatsData = { tier: "UU", }, skarmory: { - randomBattleMoves: ["drillpeck", "whirlwind", "spikes", "toxic", "protect", "rest", "taunt", "substitute"], + randomBattleMoves: ["drillpeck", "whirlwind", "spikes", "toxic", "protect", "rest", "sleeptalk"], tier: "OU", }, houndour: { @@ -949,28 +951,28 @@ exports.BattleFormatsData = { }, houndoom: { randomBattleMoves: ["pursuit", "fireblast", "flamethrower", "willowisp", "crunch", "hiddenpowergrass"], - tier: "BL", + tier: "UUBL", }, phanpy: { tier: "LC", }, donphan: { randomBattleMoves: ["earthquake", "rockslide", "bodyslam", "rapidspin", "counter", "toxic", "roar", "rest", "sleeptalk"], - tier: "BL", + tier: "UUBL", }, stantler: { inherit: true, - randomBattleMoves: ["return", "earthquake", "doubleedge", "hypnosis", "shadowball", "thunderbolt", "calmmind"], + randomBattleMoves: ["return", "earthquake", "doubleedge", "hypnosis", "shadowball", "thunderbolt"], tier: "UU", }, smeargle: { inherit: true, - randomBattleMoves: ["extremespeed", "explosion", "spore", "spikes", "transform", "perishsong", "bellydrum", "tailglow", "agility", "ingrain", "spiderweb", "substitute", "batonpass"], - tier: "BL", + randomBattleMoves: ["encore", "explosion", "spore", "spikes", "substitute", "perishsong", "spiderweb", "batonpass"], + tier: "UUBL", }, miltank: { randomBattleMoves: ["return", "bodyslam", "earthquake", "shadowball", "counter", "curse", "milkdrink", "healbell", "toxic", "thunderwave"], - tier: "BL", + tier: "UUBL", }, raikou: { inherit: true, @@ -980,7 +982,7 @@ exports.BattleFormatsData = { entei: { inherit: true, randomBattleMoves: ["calmmind", "fireblast", "flamethrower", "hiddenpowergrass", "hiddenpowerice", "doubleedge", "return", "sunnyday", "solarbeam", "substitute"], - tier: "BL", + tier: "UUBL", }, suicune: { inherit: true, @@ -996,22 +998,22 @@ exports.BattleFormatsData = { }, tyranitar: { inherit: true, - randomBattleMoves: ["rockslide", "earthquake", "pursuit", "fireblast", "icebeam", "hiddenpowergrass", "dragondance", "taunt", "toxic"], + randomBattleMoves: ["rockslide", "earthquake", "pursuit", "fireblast", "icebeam", "hiddenpowergrass", "dragondance", "substitute", "focuspunch", "crunch"], tier: "OU", }, lugia: { inherit: true, - randomBattleMoves: ["recover", "icebeam", "calmmind", "aeroblast", "earthquake", "toxic", "whirlwind", "reflect", "lightscreen"], + randomBattleMoves: ["recover", "icebeam", "calmmind", "aeroblast", "earthquake", "toxic", "whirlwind", "reflect", "psychic", "thunderbolt"], tier: "Uber", }, hooh: { inherit: true, - randomBattleMoves: ["sacredfire", "hiddenpowerflying", "thunderbolt", "earthquake", "recover", "whirlwind", "reflect", "substitute"], + randomBattleMoves: ["sacredfire", "hiddenpowerflying", "thunderbolt", "earthquake", "recover", "whirlwind", "reflect", "substitute", "calmmind", "toxic"], tier: "Uber", }, celebi: { inherit: true, - randomBattleMoves: ["psychic", "hiddenpowergrass", "shadowball", "hiddenpowerfighting", "recover", "calmmind", "swordsdance", "batonpass", "reflect", "healbell", "toxic", "leechseed"], + randomBattleMoves: ["psychic", "hiddenpowergrass", "recover", "calmmind", "batonpass", "reflect", "healbell", "toxic", "leechseed"], tier: "OU", }, treecko: { @@ -1019,11 +1021,11 @@ exports.BattleFormatsData = { tier: "LC", }, grovyle: { - tier: "NU", + tier: "NFE", }, sceptile: { randomBattleMoves: ["leafblade", "dragonclaw", "hiddenpowerfire", "hiddenpowerice", "crunch", "thunderpunch", "leechseed", "substitute"], - tier: "BL", + tier: "UUBL", }, torchic: { inherit: true, @@ -1034,8 +1036,8 @@ exports.BattleFormatsData = { }, blaziken: { inherit: true, - randomBattleMoves: ["flamethrower", "fireblast", "brickbreak", "earthquake", "rockslide", "skyuppercut", "swordsdance", "hiddenpowergrass", "substitute", "focuspunch"], - tier: "BL", + randomBattleMoves: ["flamethrower", "fireblast", "brickbreak", "thunderpunch", "rockslide", "skyuppercut", "swordsdance", "hiddenpowergrass", "substitute", "focuspunch"], + tier: "UUBL", }, mudkip: { inherit: true, @@ -1053,7 +1055,7 @@ exports.BattleFormatsData = { tier: "LC", }, mightyena: { - randomBattleMoves: ["shadowball", "hiddenpowerfighting", "bodyslam", "irontail", "taunt", "healbell"], + randomBattleMoves: ["shadowball", "hiddenpowerfighting", "bodyslam", "irontail", "toxic", "healbell"], tier: "NU", }, zigzagoon: { @@ -1061,7 +1063,7 @@ exports.BattleFormatsData = { tier: "LC", }, linoone: { - randomBattleMoves: ["bellydrum", "extremespeed", "return", "shadowball", "flail", "substitute", "hiddenpowerfighting"], + randomBattleMoves: ["bellydrum", "extremespeed", "shadowball", "flail", "substitute", "hiddenpowerfighting"], tier: "UU", }, wurmple: { @@ -1071,7 +1073,7 @@ exports.BattleFormatsData = { tier: "NFE", }, beautifly: { - randomBattleMoves: ["toxic", "stunspore", "morningsun", "whirlwind", "gigadrain", "hiddenpowerbug"], + randomBattleMoves: ["toxic", "stunspore", "morningsun", "aerialace", "gigadrain", "silverwind", "hiddenpowerfire"], tier: "NU", }, cascoon: { @@ -1089,8 +1091,8 @@ exports.BattleFormatsData = { tier: "NFE", }, ludicolo: { - randomBattleMoves: ["hydropump", "surf", "leechseed", "icebeam", "raindance", "thunderpunch", "gigadrain", "fakeout"], - tier: "BL", + randomBattleMoves: ["hydropump", "surf", "leechseed", "icebeam", "raindance", "thunderpunch", "gigadrain"], + tier: "UUBL", }, seedot: { inherit: true, @@ -1100,7 +1102,7 @@ exports.BattleFormatsData = { tier: "NFE", }, shiftry: { - randomBattleMoves: ["shadowball", "brickbreak", "fakeout", "sunnyday", "solarbeam", "hiddenpowerfire", "hiddenpowerice"], + randomBattleMoves: ["feintattack", "brickbreak", "fakeout", "sunnyday", "solarbeam", "hiddenpowerfire", "hiddenpowerice", "synthesis", "explosion"], tier: "UU", }, taillow: { @@ -1109,8 +1111,8 @@ exports.BattleFormatsData = { }, swellow: { inherit: true, - randomBattleMoves: ["doubleedge", "return", "facade", "hiddenpowerflying", "hiddenpowerground", "hiddenpowerfighting", "quickattack", "steelwing"], - tier: "BL", + randomBattleMoves: ["doubleedge", "return", "aerialace", "hiddenpowerground", "hiddenpowerfighting", "quickattack", "steelwing"], + tier: "UUBL", }, wingull: { tier: "LC", @@ -1127,15 +1129,15 @@ exports.BattleFormatsData = { tier: "NFE", }, gardevoir: { - randomBattleMoves: ["psychic", "thunderbolt", "firepunch", "icepunch", "calmmind", "memento", "taunt", "hypnosis", "thunderwave", "willowisp", "destinybond", "substitute", "reflect", "wish", "protect"], - tier: "BL", + randomBattleMoves: ["psychic", "thunderbolt", "firepunch", "icepunch", "calmmind", "memento", "taunt", "hypnosis", "willowisp", "destinybond", "substitute", "reflect", "wish", "protect"], + tier: "UUBL", }, surskit: { inherit: true, tier: "LC", }, masquerain: { - randomBattleMoves: ["doubleedge", "hydropump", "icebeam", "raindance", "stunspore", "toxic", "substitute"], + randomBattleMoves: ["doubleedge", "hydropump", "icebeam", "gigadrain", "stunspore", "toxic", "substitute"], tier: "NU", }, shroomish: { @@ -1143,29 +1145,30 @@ exports.BattleFormatsData = { tier: "LC", }, breloom: { - randomBattleMoves: ["swordsdance", "hiddenpowerrock", "skyuppercut", "machpunch", "focuspunch", "substitute", "leechseed", "spore", "stunspore"], - tier: "BL", + randomBattleMoves: ["swordsdance", "hiddenpowerrock", "skyuppercut", "machpunch", "focuspunch", "substitute", "leechseed", "spore", "hiddenpowerghost"], + tier: "UUBL", }, slakoth: { tier: "LC", }, vigoroth: { + randomBattleMoves: ["return", "shadowball", "earthquake", "bulkup", "encore", "slackoff"], tier: "NU", }, slaking: { randomBattleMoves: ["return", "doubleedge", "earthquake", "shadowball", "focuspunch", "fireblast"], - tier: "BL", + tier: "UUBL", }, nincada: { tier: "LC", }, ninjask: { - randomBattleMoves: ["silverwind", "hiddenpowerflying", "aerialace", "hiddenpowerrock", "swordsdance", "substitute", "protect", "batonpass"], - tier: "BL", + randomBattleMoves: ["silverwind", "aerialace", "hiddenpowerrock", "swordsdance", "substitute", "protect", "batonpass"], + tier: "UUBL", }, shedinja: { inherit: true, - randomBattleMoves: ["shadowball", "hiddenpowerbug", "silverwind", "hiddenpowerground", "hiddenpowerfighting", "hiddenpowerrock", "protect", "toxic", "agility", "batonpass"], + randomBattleMoves: ["shadowball", "silverwind", "hiddenpowerground", "hiddenpowerfighting", "hiddenpowerrock", "protect", "toxic", "agility", "batonpass"], tier: "NU", }, whismur: { @@ -1177,7 +1180,7 @@ exports.BattleFormatsData = { }, exploud: { inherit: true, - randomBattleMoves: ["doubleedge", "return", "bodyslam", "earthquake", "shadowball", "fireblast", "flamethrower", "overheat", "icebeam", "toxic"], + randomBattleMoves: ["doubleedge", "return", "bodyslam", "earthquake", "shadowball", "fireblast", "flamethrower", "substitute", "icebeam", "toxic"], tier: "UU", }, makuhita: { @@ -1185,8 +1188,8 @@ exports.BattleFormatsData = { tier: "LC", }, hariyama: { - randomBattleMoves: ["crosschop", "revenge", "rockslide", "hiddenpowerghost", "substitute", "focuspunch", "fakeout", "bulkup", "knockoff", "whirlwind", "rest", "sleeptalk"], - tier: "BL", + randomBattleMoves: ["crosschop", "rockslide", "hiddenpowerghost", "substitute", "focuspunch", "fakeout", "bulkup", "whirlwind", "rest", "sleeptalk"], + tier: "UUBL", }, nosepass: { inherit: true, @@ -1204,23 +1207,23 @@ exports.BattleFormatsData = { }, sableye: { inherit: true, - randomBattleMoves: ["seismictoss", "shadowball", "knockoff", "toxic", "recover", "fakeout"], + randomBattleMoves: ["seismictoss", "shadowball", "knockoff", "toxic", "recover"], tier: "NU", }, mawile: { inherit: true, - randomBattleMoves: ["swordsdance", "batonpass", "taunt", "brickbreak", "hiddenpowersteel", "sludgebomb"], + randomBattleMoves: ["swordsdance", "batonpass", "substitute", "brickbreak", "hiddenpowersteel", "focuspunch", "toxic"], tier: "NU", }, aron: { tier: "LC", }, lairon: { - tier: "NU", + tier: "NFE", }, aggron: { inherit: true, - randomBattleMoves: ["earthquake", "rockslide", "irontail", "focuspunch", "icebeam", "substitute", "thunderwave", "toxic", "counter"], + randomBattleMoves: ["earthquake", "rockslide", "irontail", "focuspunch", "doubleedge", "substitute", "thunderwave", "counter"], tier: "UU", }, meditite: { @@ -1229,7 +1232,7 @@ exports.BattleFormatsData = { }, medicham: { randomBattleMoves: ["brickbreak", "highjumpkick", "fakeout", "rockslide", "focuspunch", "substitute", "shadowball", "recover"], - tier: "BL", + tier: "UUBL", }, electrike: { tier: "LC", @@ -1250,11 +1253,11 @@ exports.BattleFormatsData = { tier: "NU", }, volbeat: { - randomBattleMoves: ["signalbeam", "brickbreak", "shadowball", "batonpass", "moonlight", "seismictoss", "trick"], + randomBattleMoves: ["tailglow", "thunderbolt", "icepunch", "batonpass"], tier: "NU", }, illumise: { - randomBattleMoves: ["thunderbolt", "icebeam", "gigadrain", "substitute", "batonpass", "wish"], + randomBattleMoves: ["thunderbolt", "icepunch", "encore", "substitute", "batonpass", "wish"], tier: "NU", }, roselia: { @@ -1275,7 +1278,7 @@ exports.BattleFormatsData = { tier: "LC", }, sharpedo: { - randomBattleMoves: ["earthquake", "doubleedge", "hydropump", "crunch", "icebeam", "hiddenpowerelectric", "agility"], + randomBattleMoves: ["earthquake", "hydropump", "crunch", "icebeam", "hiddenpowerelectric", "substitute"], tier: "UU", }, wailmer: { @@ -1283,7 +1286,7 @@ exports.BattleFormatsData = { }, wailord: { inherit: true, - randomBattleMoves: ["rest", "sleeptalk", "bodyslam", "waterspout", "hydropump", "surf", "icebeam", "toxic", "hiddenpowergrass"], + randomBattleMoves: ["rest", "sleeptalk", "bodyslam", "selfdestruct", "hydropump", "surf", "icebeam", "toxic", "hiddenpowergrass"], tier: "NU", }, numel: { @@ -1308,11 +1311,11 @@ exports.BattleFormatsData = { }, spinda: { inherit: true, - randomBattleMoves: ["doubleedge", "return", "bodyslam", "endure", "flail", "shadowball", "focuspunch", "brickbreak", "firepunch", "icepunch", "icywind", "psychic", "seismictoss", "encore", "hypnosis", "teeterdance", "trick", "calmmind", "batonpass"], + randomBattleMoves: ["doubleedge", "return", "bodyslam", "shadowball", "focuspunch", "brickbreak", "seismictoss", "encore", "hypnosis", "teeterdance", "trick", "substitute", "batonpass"], tier: "NU", }, trapinch: { - tier: "NU", + tier: "LC", }, vibrava: { tier: "NFE", @@ -1328,7 +1331,7 @@ exports.BattleFormatsData = { }, cacturne: { inherit: true, - randomBattleMoves: ["spikes", "gigadrain", "hiddenpowerdark", "thunderpunch", "substitute", "focuspunch", "hiddenpowerice"], + randomBattleMoves: ["spikes", "gigadrain", "feintattack", "thunderpunch", "substitute", "focuspunch", "hiddenpowerice"], tier: "NU", }, swablu: { @@ -1337,17 +1340,17 @@ exports.BattleFormatsData = { }, altaria: { inherit: true, - randomBattleMoves: ["dragondance", "earthquake", "hiddenpowerflying", "fireblast", "icebeam", "rest", "toxic", "healbell", "haze", "sing"], + randomBattleMoves: ["dragondance", "earthquake", "hiddenpowerflying", "fireblast", "dragonclaw", "rest", "toxic", "healbell", "haze"], tier: "UU", }, zangoose: { inherit: true, - randomBattleMoves: ["doubleedge", "return", "shadowball", "brickbreak", "quickattack", "focuspunch", "swordsdance", "taunt", "fireblast"], - tier: "BL", + randomBattleMoves: ["doubleedge", "return", "shadowball", "brickbreak", "quickattack", "focuspunch", "swordsdance"], + tier: "UUBL", }, seviper: { inherit: true, - randomBattleMoves: ["sludgebomb", "flamethrower", "gigadrain", "earthquake", "taunt"], + randomBattleMoves: ["sludgebomb", "flamethrower", "gigadrain", "earthquake", "crunch", "substitute"], tier: "NU", }, lunatone: { @@ -1373,7 +1376,7 @@ exports.BattleFormatsData = { }, crawdaunt: { inherit: true, - randomBattleMoves: ["surf", "icebeam", "crunch", "knockoff", "swordsdance", "return"], + randomBattleMoves: ["surf", "icebeam", "crunch", "hiddenpowergrass", "brickbreak", "return"], tier: "NU", }, baltoy: { @@ -1381,7 +1384,7 @@ exports.BattleFormatsData = { tier: "LC", }, claydol: { - randomBattleMoves: ["earthquake", "icebeam", "hiddenpowerfire", "psychic", "explosion", "rapidspin", "toxic", "reflect", "lightscreen"], + randomBattleMoves: ["earthquake", "icebeam", "psychic", "explosion", "rapidspin", "toxic", "lightscreen"], tier: "OU", }, lileep: { @@ -1395,8 +1398,8 @@ exports.BattleFormatsData = { tier: "LC", }, armaldo: { - randomBattleMoves: ["rockslide", "rockblast", "earthquake", "hiddenpowerbug", "knockoff", "rapidspin", "swordsdance"], - tier: "BL", + randomBattleMoves: ["rockslide", "earthquake", "hiddenpowerbug", "knockoff", "rapidspin", "swordsdance"], + tier: "UUBL", }, feebas: { tier: "LC", @@ -1408,19 +1411,20 @@ exports.BattleFormatsData = { }, castform: { inherit: true, + randomBattleMoves: ["icebeam", "thunderbolt", "flamethrower", "substitute", "thunderwave"], tier: "NU", }, castformsunny: { battleOnly: true, - randomBattleMoves: ["sunnyday", "thunderbolt", "icebeam", "flamethrower", "weatherball", "solarbeam"], + randomBattleMoves: ["sunnyday", "thunderbolt", "icebeam", "flamethrower", "solarbeam"], }, castformrainy: { battleOnly: true, - randomBattleMoves: ["raindance", "thunderbolt", "thunder", "weatherball", "icebeam"], + randomBattleMoves: ["raindance", "thunder", "weatherball", "icebeam"], }, castformsnowy: { battleOnly: true, - randomBattleMoves: ["hail", "weatherball", "thunderbolt", "thunderwave", "flamethrower", "blizzard"], + randomBattleMoves: ["hail", "thunderbolt", "flamethrower", "blizzard"], }, kecleon: { randomBattleMoves: ["return", "shadowball", "brickbreak", "trick", "irontail", "thunderwave"], @@ -1432,7 +1436,7 @@ exports.BattleFormatsData = { }, banette: { inherit: true, - randomBattleMoves: ["shadowball", "hiddenpowerfighting", "knockoff", "willowisp", "thunderwave", "toxic", "endure", "destinybond"], + randomBattleMoves: ["shadowball", "hiddenpowerfighting", "knockoff", "willowisp", "thunderwave", "destinybond"], tier: "UU", }, duskull: { @@ -1440,21 +1444,21 @@ exports.BattleFormatsData = { tier: "LC", }, dusclops: { - randomBattleMoves: ["nightshade", "shadowball", "icebeam", "calmmind", "rest", "painsplit", "willowisp", "sleeptalk"], - tier: "BL", + randomBattleMoves: ["nightshade", "shadowball", "icebeam", "earthquake", "rest", "painsplit", "willowisp", "sleeptalk"], + tier: "UUBL", }, tropius: { - randomBattleMoves: ["sunnyday", "solarbeam", "synthesis", "hiddenpowerfire", "swordsdance", "hiddenpowerflying", "earthquake"], + randomBattleMoves: ["sunnyday", "solarbeam", "synthesis", "hiddenpowerfire", "swordsdance", "aerialace", "earthquake"], tier: "NU", }, chimecho: { inherit: true, - randomBattleMoves: ["psychic", "hiddenpowerfire", "healbell", "taunt", "toxic", "reflect", "lightscreen", "hypnosis"], + randomBattleMoves: ["psychic", "hiddenpowerfire", "healbell", "taunt", "toxic", "reflect", "calmmind", "hypnosis"], tier: "NU", }, absol: { inherit: true, - randomBattleMoves: ["swordsdance", "shadowball", "hiddenpowerfighting", "aerialace", "calmmind", "icebeam", "thunderbolt", "flamethrower", "substitute", "taunt", "batonpass", "thunderwave"], + randomBattleMoves: ["swordsdance", "shadowball", "hiddenpowerfighting", "aerialace", "substitute", "batonpass"], tier: "UU", }, snorunt: { @@ -1462,7 +1466,7 @@ exports.BattleFormatsData = { tier: "LC", }, glalie: { - randomBattleMoves: ["icebeam", "hiddenpowergrass", "earthquake", "explosion", "taunt", "toxic", "spikes"], + randomBattleMoves: ["icebeam", "earthquake", "explosion", "toxic", "spikes"], tier: "NU", }, spheal: { @@ -1470,29 +1474,29 @@ exports.BattleFormatsData = { tier: "LC", }, sealeo: { - tier: "NU", + tier: "NFE", }, walrein: { - randomBattleMoves: ["icebeam", "surf", "earthquake", "hiddenpowergrass", "toxic", "rest", "sleeptalk", "encore", "roar", "yawn", "icywind"], + randomBattleMoves: ["icebeam", "surf", "earthquake", "hiddenpowergrass", "toxic", "rest", "sleeptalk", "encore", "roar", "yawn"], tier: "UU", }, clamperl: { - tier: "NU", + tier: "LC", }, huntail: { - randomBattleMoves: ["doubleedge", "bodyslam", "surf", "hydropump", "icebeam", "crunch", "hiddenpowergrass", "hiddenpowerground", "raindance"], + randomBattleMoves: ["doubleedge", "surf", "hydropump", "icebeam", "crunch", "hiddenpowergrass", "raindance"], tier: "NU", }, gorebyss: { - randomBattleMoves: ["surf", "hydropump", "icebeam", "hiddenpowergrass", "raindance", "agility", "substitute", "batonpass"], + randomBattleMoves: ["surf", "hydropump", "icebeam", "hiddenpowergrass", "raindance", "hiddenpowerelectric"], tier: "UU", }, relicanth: { - randomBattleMoves: ["rockslide", "earthquake", "doubleedge", "bodyslam", "yawn", "rest", "sleeptalk"], + randomBattleMoves: ["rockslide", "earthquake", "doubleedge", "yawn", "rest", "sleeptalk"], tier: "NU", }, luvdisc: { - randomBattleMoves: ["raindance", "surf", "icebeam", "sweetkiss"], + randomBattleMoves: ["surf", "icebeam", "sweetkiss", "toxic", "protect", "substitute"], tier: "NU", }, bagon: { @@ -1504,7 +1508,7 @@ exports.BattleFormatsData = { }, salamence: { inherit: true, - randomBattleMoves: ["dragondance", "hiddenpowerflying", "earthquake", "brickbreak", "rockslide", "fireblast", "hydropump", "dragonclaw", "wish", "protect", "roar"], + randomBattleMoves: ["dragondance", "hiddenpowerflying", "earthquake", "brickbreak", "rockslide", "fireblast", "hydropump", "dragonclaw"], tier: "OU", }, beldum: { @@ -1515,32 +1519,32 @@ exports.BattleFormatsData = { tier: "NU", }, metagross: { - randomBattleMoves: ["meteormash", "earthquake", "rockslide", "bodyslam", "explosion", "psychic", "icepunch", "agility", "rest", "sleeptalk"], + randomBattleMoves: ["meteormash", "earthquake", "rockslide", "shadowball", "explosion", "psychic", "icepunch", "agility", "rest", "sleeptalk"], tier: "OU", }, regirock: { inherit: true, - randomBattleMoves: ["rockslide", "earthquake", "explosion", "substitute", "focuspunch", "thunderwave", "counter", "curse", "rest", "sleeptalk"], - tier: "BL", + randomBattleMoves: ["rockslide", "earthquake", "explosion", "superpower", "thunderwave", "counter", "curse", "rest", "sleeptalk"], + tier: "UUBL", }, regice: { inherit: true, - randomBattleMoves: ["icebeam", "thunderbolt", "hiddenpowerfire", "explosion", "rest", "sleeptalk", "psychup", "curse", "thunderwave"], + randomBattleMoves: ["icebeam", "thunderbolt", "hiddenpowerfire", "explosion", "rest", "sleeptalk", "thunderwave"], tier: "OU", }, registeel: { inherit: true, - randomBattleMoves: ["earthquake", "rockslide", "hiddenpowersteel", "seismictoss", "explosion", "counter", "curse", "rest", "sleeptalk", "toxic", "thunderwave"], - tier: "BL", + randomBattleMoves: ["seismictoss", "protect", "counter", "rest", "sleeptalk", "toxic", "thunderwave"], + tier: "UUBL", }, latias: { inherit: true, - randomBattleMoves: ["dragonclaw", "icebeam", "thunderbolt", "recover", "calmmind", "toxic", "refresh", "safeguard", "roar"], + randomBattleMoves: ["dragonclaw", "icebeam", "thunderbolt", "recover", "calmmind", "toxic", "reflect", "roar"], tier: "Uber", }, latios: { inherit: true, - randomBattleMoves: ["dragonclaw", "icebeam", "thunderbolt", "hiddenpowerfire", "recover", "calmmind", "roar"], + randomBattleMoves: ["dragonclaw", "icebeam", "thunderbolt", "hiddenpowerfire", "recover", "calmmind", "psychic"], tier: "Uber", }, kyogre: { @@ -1550,7 +1554,7 @@ exports.BattleFormatsData = { }, groudon: { inherit: true, - randomBattleMoves: ["earthquake", "rockslide", "swordsdance", "overheat", "roar"], + randomBattleMoves: ["earthquake", "rockslide", "swordsdance", "overheat", "roar", "substitute"], tier: "Uber", }, rayquaza: { @@ -1560,7 +1564,7 @@ exports.BattleFormatsData = { }, jirachi: { inherit: true, - randomBattleMoves: ["psychic", "thunderbolt", "firepunch", "icepunch", "calmmind", "thunderwave", "toxic", "reflect", "lightscreen", "wish", "protect"], + randomBattleMoves: ["psychic", "thunderbolt", "firepunch", "icepunch", "calmmind", "bodyslam", "toxic", "reflect", "substitute", "wish", "protect"], tier: "OU", }, deoxys: { @@ -1575,12 +1579,14 @@ exports.BattleFormatsData = { }, deoxysdefense: { inherit: true, - randomBattleMoves: ["recover", "rest", "spikes", "taunt", "substitute", "toxic", "thunderwave", "nightshade", "counter", "mirrorcoat", "reflect", "lightscreen", "knockoff"], + randomBattleMoves: ["recover", "spikes", "taunt", "toxic", "nightshade", "counter", "mirrorcoat", "lightscreen", "knockoff"], tier: "Uber", }, deoxysspeed: { inherit: true, - randomBattleMoves: ["shadowball", "superpower", "icebeam", "thunderbolt", "firepunch", "psychic", "knockoff", "spikes", "taunt", "toxic", "recover", "calmmind", "reflect", "lightscreen", "substitute"], + randomBattleMoves: ["shadowball", "superpower", "icebeam", "thunderbolt", "firepunch", "psychic", "knockoff", "spikes", "taunt", "toxic", "recover", "calmmind", "reflect"], tier: "Uber", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/mods/gen3/items.js b/data/mods/gen3/items.js new file mode 100644 index 0000000000000..b87483a2516c1 --- /dev/null +++ b/data/mods/gen3/items.js @@ -0,0 +1,371 @@ +'use strict'; + +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { + "aguavberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + }, + "apicotberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "berryjuice": { + inherit: true, + isUnreleased: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + if (this.runEvent('TryHeal', pokemon) && pokemon.useItem()) { + this.heal(20); + } + } + }, + }, + "blackbelt": { + inherit: true, + desc: "Holder's Fighting-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Fighting') { + return basePower * 1.1; + } + }, + }, + "blackglasses": { + inherit: true, + desc: "Holder's Dark-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Dark') { + return basePower * 1.1; + } + }, + }, + "charcoal": { + inherit: true, + desc: "Holder's Fire-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Fire') { + return basePower * 1.1; + } + }, + }, + "dragonfang": { + inherit: true, + desc: "Holder's Dragon-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Dragon') { + return basePower * 1.1; + } + }, + }, + "enigmaberry": { + id: "enigmaberry", + name: "Enigma Berry", + desc: "No competitive use.", + isUnreleased: true, + spritenum: 124, + isBerry: true, + num: 208, + gen: 3, + }, + "figyberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + }, + "ganlonberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "hardstone": { + inherit: true, + desc: "Holder's Rock-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Rock') { + return basePower * 1.1; + } + }, + }, + "iapapaberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + }, + "kingsrock": { + inherit: true, + onModifyMove(move) { + let affectedByKingsRock = ['aerialace', 'aeroblast', 'aircutter', 'armthrust', 'barrage', 'beatup', 'bide', 'bind', 'blastburn', 'bonerush', 'bonemerang', 'bounce', 'brickbreak', 'bulletseed', 'clamp', 'cometpunch', 'crabhammer', 'crosschop', 'cut', 'dig', 'dive', 'doublekick', 'doubleslap', 'doubleedge', 'dragonbreath', 'dragonclaw', 'dragonrage', 'drillpeck', 'earthquake', 'eggbomb', 'endeavor', 'eruption', 'explosion', 'extremespeed', 'falseswipe', 'feintattack', 'firespin', 'flail', 'fly', 'frenzyplant', 'frustration', 'furyattack', 'furycutter', 'furyswipes', 'gust', 'hiddenpower', 'highjumpkick', 'hornattack', 'hydrocannon', 'hydropump', 'hyperbeam', 'iceball', 'iciclespear', 'jumpkick', 'karatechop', 'leafblade', 'lowkick', 'machpunch', 'magicalleaf', 'magnitude', 'megakick', 'megapunch', 'megahorn', 'meteormash', 'mudshot', 'muddywater', 'nightshade', 'outrage', 'overheat', 'payday', 'peck', 'petaldance', 'pinmissile', 'poisontail', 'pound', 'psychoboost', 'psywave', 'quickattack', 'rage', 'rapidspin', 'razorleaf', 'razorwind', 'return', 'revenge', 'reversal', 'rockblast', 'rockthrow', 'rollingkick', 'rollout', 'sandtomb', 'scratch', 'seismictoss', 'selfdestruct', 'shadowpunch', 'shockwave', 'signalbeam', 'silverwind', 'skullbash', 'skyattack', 'skyuppercut', 'slam', 'slash', 'snore', 'solarbeam', 'sonicboom', 'spikecannon', 'spitup', 'steelwing', 'strength', 'struggle', 'submission', 'surf', 'swift', 'tackle', 'takedown', 'thrash', 'tickle', 'triplekick', 'twister', 'uproar', 'vicegrip', 'vinewhip', 'vitalthrow', 'volttackle', 'watergun', 'waterpulse', 'waterfall', 'weatherball', 'whirlpool', 'wingattack', 'wrap']; + if (affectedByKingsRock.includes(move.id)) { + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 10, + volatileStatus: 'flinch', + }); + } + }, + }, + "lansatberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "laxincense": { + inherit: true, + desc: "The accuracy of attacks against the holder is 0.95x.", + onModifyAccuracy(accuracy) { + if (typeof accuracy !== 'number') return; + this.debug('lax incense - decreasing accuracy'); + return accuracy * 0.95; + }, + }, + "liechiberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "lightball": { + inherit: true, + desc: "If held by a Pikachu, its Special Attack is doubled.", + onModifyAtk() {}, + }, + "magnet": { + inherit: true, + desc: "Holder's Electric-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Electric') { + return basePower * 1.1; + } + }, + }, + "magoberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + }, + "metalcoat": { + inherit: true, + desc: "Holder's Steel-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Steel') { + return basePower * 1.1; + } + }, + }, + "miracleseed": { + inherit: true, + desc: "Holder's Grass-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Grass') { + return basePower * 1.1; + } + }, + }, + "mysticwater": { + inherit: true, + desc: "Holder's Water-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Water') { + return basePower * 1.1; + } + }, + }, + "nevermeltice": { + inherit: true, + desc: "Holder's Ice-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Ice') { + return basePower * 1.1; + } + }, + }, + "oranberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + }, + "petayaberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "poisonbarb": { + inherit: true, + desc: "Holder's Poison-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Poison') { + return basePower * 1.1; + } + }, + }, + "quickclaw": { + inherit: true, + onModifyPriority(priority, pokemon) { + if (this.randomChance(1, 5)) { + return Math.round(priority) + 0.1; + } + }, + }, + "salacberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "seaincense": { + inherit: true, + desc: "Holder's Water-type attacks have 1.05x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Water') { + return basePower * 1.05; + } + }, + }, + "sharpbeak": { + inherit: true, + desc: "Holder's Flying-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move && move.type === 'Flying') { + return basePower * 1.1; + } + }, + }, + "silkscarf": { + inherit: true, + desc: "Holder's Normal-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Normal') { + return basePower * 1.1; + } + }, + }, + "silverpowder": { + inherit: true, + desc: "Holder's Bug-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Bug') { + return basePower * 1.1; + } + }, + }, + "sitrusberry": { + inherit: true, + desc: "Restores 30 HP when at 1/2 max HP or less. Single use.", + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + onEat(pokemon) { + this.heal(30); + }, + }, + "softsand": { + inherit: true, + desc: "Holder's Ground-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Ground') { + return basePower * 1.1; + } + }, + }, + "spelltag": { + inherit: true, + desc: "Holder's Ghost-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Ghost') { + return basePower * 1.1; + } + }, + }, + "starfberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4) { + pokemon.eatItem(); + } + }, + }, + "twistedspoon": { + inherit: true, + desc: "Holder's Psychic-type attacks have 1.1x power.", + onBasePower(basePower, user, target, move) { + if (move.type === 'Psychic') { + return basePower * 1.1; + } + }, + }, + "wikiberry": { + inherit: true, + onUpdate() {}, + onResidualOrder: 5, + onResidual(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 2) { + pokemon.eatItem(); + } + }, + }, +}; + +exports.BattleItems = BattleItems; diff --git a/data/mods/gen3/moves.js b/data/mods/gen3/moves.js new file mode 100644 index 0000000000000..9531e1c62f9d7 --- /dev/null +++ b/data/mods/gen3/moves.js @@ -0,0 +1,974 @@ +/** + * Gen 3 moves + */ + +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + absorb: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down.", + pp: 20, + }, + acid: { + inherit: true, + desc: "Has a 10% chance to lower the target's Defense by 1 stage.", + shortDesc: "10% chance to lower the foe(s) Defense by 1.", + secondary: { + chance: 10, + boosts: { + def: -1, + }, + }, + }, + ancientpower: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1}, + }, + armthrust: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + assist: { + inherit: true, + desc: "A random move among those known by the user's party members is selected for use. Does not select Assist, Counter, Covet, Destiny Bond, Detect, Endure, Focus Punch, Follow Me, Helping Hand, Metronome, Mimic, Mirror Coat, Mirror Move, Protect, Sketch, Sleep Talk, Snatch, Struggle, Thief, or Trick.", + }, + astonish: { + inherit: true, + basePowerCallback(pokemon, target) { + if (target.volatiles['minimize']) return 60; + return 30; + }, + desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", + }, + barrage: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + beatup: { + inherit: true, + desc: "Deals typeless damage. Hits one time for each unfainted Pokemon without a major status condition in the user's party, or fails if no Pokemon meet the criteria. For each hit, the damage formula uses the participating Pokemon's base Attack as the Attack stat, the target's base Defense as the Defense stat, and ignores stat stages and other effects that modify Attack or Defense; each hit is considered to come from the user.", + }, + bide: { + inherit: true, + desc: "The user spends two turns locked into this move and then, on the second turn after using this move, the user attacks the last Pokemon that hit it, inflicting double the damage in HP it lost during the two turns. If the last Pokemon that hit it is no longer active, the user attacks a random opposing Pokemon instead. If the user is prevented from moving during this move's use, the effect ends. This move does not ignore type immunity.", + accuracy: 100, + priority: 0, + effect: { + duration: 3, + onLockMove: 'bide', + onStart(pokemon) { + this.effectData.totalDamage = 0; + this.add('-start', pokemon, 'move: Bide'); + }, + onDamagePriority: -101, + onDamage(damage, target, source, move) { + if (!move || move.effectType !== 'Move' || !source) return; + this.effectData.totalDamage += damage; + this.effectData.lastDamageSource = source; + }, + onBeforeMove(pokemon, target, move) { + if (this.effectData.duration === 1) { + this.add('-end', pokemon, 'move: Bide'); + if (!this.effectData.totalDamage) { + this.add('-fail', pokemon); + return false; + } + target = this.effectData.lastDamageSource; + if (!target) { + this.add('-fail', pokemon); + return false; + } + if (!target.isActive) { + const possibleTarget = this.resolveTarget(pokemon, this.getMove('pound')); + if (!possibleTarget) { + this.add('-miss', pokemon); + return false; + } + target = possibleTarget; + } + /**@type {Move} */ + // @ts-ignore + let moveData = { + id: 'bide', + name: "Bide", + accuracy: 100, + damage: this.effectData.totalDamage * 2, + category: "Physical", + priority: 0, + flags: {contact: 1, protect: 1}, + effectType: 'Move', + type: 'Normal', + }; + this.tryMoveHit(target, pokemon, moveData); + return false; + } + this.add('-activate', pokemon, 'move: Bide'); + }, + onMoveAborted(pokemon) { + pokemon.removeVolatile('bide'); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'move: Bide', '[silent]'); + }, + }, + }, + bind: { + inherit: true, + desc: "Prevents the target from switching for two to five turns. Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it uses Baton Pass. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + blizzard: { + inherit: true, + desc: "Has a 10% chance to freeze the target.", + shortDesc: "10% chance to freeze foe(s).", + onModifyMove() { }, + }, + block: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it uses Baton Pass. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field, unless it uses Baton Pass, in which case the target will remain trapped.", + }, + bonerush: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + bonemerang: { + inherit: true, + desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit.", + }, + bounce: { + inherit: 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, Sky Uppercut, Thunder, and Twister, and Gust and Twister have doubled power when used against it.", + }, + bulletseed: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + camouflage: { + inherit: true, + desc: "The user's type changes based on the battle terrain. Normal type on the regular Wi-Fi terrain. Fails if the type is one of the user's current types.", + }, + charge: { + inherit: true, + desc: "If the user uses an Electric-type attack on the next turn, its power will be doubled.", + shortDesc: "The user's Electric attack next turn has 2x power.", + boosts: false, + }, + clamp: { + inherit: true, + desc: "Prevents the target from switching for two to five turns. Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it uses Baton Pass. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + cometpunch: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + conversion: { + inherit: true, + desc: "The user's type changes to match the original type of one of its known moves besides Curse, at random, but not either of its current types. Fails if the user cannot change its type, or if this move would only be able to select one of the user's current types.", + onHit(target) { + let possibleTypes = target.moveSlots.map(moveSlot => { + let move = this.getMove(moveSlot.id); + if (move.id !== 'curse' && !target.hasType(move.type)) { + return move.type; + } + return ''; + }).filter(type => type); + if (!possibleTypes.length) { + return false; + } + let type = this.sample(possibleTypes); + + if (!target.setType(type)) return false; + this.add('-start', target, 'typechange', type); + }, + }, + conversion2: { + inherit: true, + desc: "The user's type changes to match a type that resists or is immune to the type of the last move used against the user, if it was successful against the user, but not either of its current types. The determined type of the move is used rather than the original type, but considers Struggle as Normal. Fails if the last move used against the user was not successful, or if this move would only be able to select one of the user's current types.", + }, + counter: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with a physical attack this turn equal to twice the HP lost by the user from that attack. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. This move considers Hidden Power as Normal type, and only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's physical attack this turn, or if the user did not lose HP from the attack.", + damageCallback(pokemon) { + let lastAttackedBy = pokemon.getLastAttackedBy(); + if (lastAttackedBy && lastAttackedBy.move && lastAttackedBy.thisTurn && (this.getCategory(lastAttackedBy.move) === 'Physical' || this.getMove(lastAttackedBy.move).id === 'hiddenpower')) { + // @ts-ignore + return 2 * lastAttackedBy.damage; + } + return false; + }, + effect: { + duration: 1, + noCopy: true, + onStart(target, source, source2, move) { + this.effectData.position = null; + this.effectData.damage = 0; + }, + onRedirectTargetPriority: -1, + onRedirectTarget(target, source, source2) { + if (source !== this.effectData.target) return; + return source.side.foe.active[this.effectData.position]; + }, + onDamagePriority: -101, + onDamage(damage, target, source, effect) { + if (effect && effect.effectType === 'Move' && source.side !== target.side && this.getCategory(effect.id) === 'Physical') { + this.effectData.position = source.position; + this.effectData.damage = 2 * damage; + } + }, + }, + }, + covet: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Enigma Berry. Items lost to this move cannot be regained with Recycle.", + flags: {protect: 1, mirror: 1}, + }, + crunch: { + inherit: true, + desc: "Has a 20% chance to lower the target's Special Defense by 1 stage.", + shortDesc: "20% chance to lower the target's Sp. Def by 1.", + secondary: { + chance: 20, + boosts: { + spd: -1, + }, + }, + }, + detect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has an X/65536 chance of being successful, where X starts at 65535 and halves, rounded down, each time this move is successfully used. After the fourth successful use in a row, X drops to 118 and continues with seemingly random values from 0-65535 on subsequent successful uses. X resets to 65535 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", + }, + dig: { + inherit: 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 Earthquake and Magnitude, which have doubled power when used against it, and is also unaffected by weather.", + basePower: 60, + }, + disable: { + inherit: true, + accuracy: 55, + desc: "For 2 to 5 turns, the target's last move used becomes disabled. Fails if one of the target's moves is already disabled, if the target has not made a move, if the target no longer knows the move, or if the move has 0 PP.", + shortDesc: "For 2-5 turns, disables the target's last move.", + flags: {protect: 1, mirror: 1, authentic: 1}, + volatileStatus: 'disable', + effect: { + durationCallback() { + return this.random(2, 6); + }, + noCopy: true, + onStart(pokemon) { + if (!this.willMove(pokemon)) { + this.effectData.duration++; + } + if (!pokemon.lastMove) { + return false; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === pokemon.lastMove.id) { + if (!moveSlot.pp) { + return false; + } else { + this.add('-start', pokemon, 'Disable', moveSlot.move); + this.effectData.move = pokemon.lastMove.id; + return; + } + } + } + return false; + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'move: Disable'); + }, + onBeforeMove(attacker, defender, move) { + if (move.id === this.effectData.move) { + this.add('cant', attacker, 'Disable', move); + return false; + } + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + dive: { + inherit: 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 Surf and Whirlpool, which have doubled power when used against it, and is also unaffected by weather.", + basePower: 60, + }, + doomdesire: { + inherit: true, + onTry(source, target) { + target.side.addSideCondition('futuremove'); + if (target.side.sideConditions['futuremove'].positions[target.position]) { + return false; + } + let moveData = /** @type {ActiveMove} */ ({ + name: "Doom Desire", + basePower: 120, + category: "Physical", + flags: {}, + willCrit: false, + type: '???', + }); + let damage = this.getDamage(source, target, moveData, true); + target.side.sideConditions['futuremove'].positions[target.position] = { + duration: 3, + move: 'doomdesire', + source: source, + moveData: { + id: 'doomdesire', + name: "Doom Desire", + accuracy: 85, + basePower: 0, + damage: damage, + category: "Physical", + flags: {}, + effectType: 'Move', + isFutureMove: true, + type: '???', + }, + }; + this.add('-start', source, 'Doom Desire'); + return null; + }, + }, + doublekick: { + inherit: true, + desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit.", + }, + doubleslap: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + dreameater: { + inherit: true, + desc: "The target is unaffected by this move unless it is asleep and does not have a substitute. The user recovers 1/2 the HP lost by the target, rounded down, but not less than 1 HP.", + }, + encore: { + inherit: true, + desc: "For 3 to 6 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Mimic, Mirror Move, Sketch, Struggle, or Transform.", + shortDesc: "The target repeats its last move for 3-6 turns.", + flags: {protect: 1, mirror: 1, authentic: 1}, + volatileStatus: 'encore', + effect: { + durationCallback() { + return this.random(3, 7); + }, + onStart(target, source) { + let noEncore = ['encore', 'mimic', 'mirrormove', 'sketch', 'struggle', 'transform']; + let moveIndex = target.lastMove ? target.moves.indexOf(target.lastMove.id) : -1; + if (!target.lastMove || noEncore.includes(target.lastMove.id) || !target.moveSlots[moveIndex] || target.moveSlots[moveIndex].pp <= 0) { + // it failed + this.add('-fail', source); + this.attrLastMove('[still]'); + delete target.volatiles['encore']; + return; + } + this.effectData.move = target.lastMove.id; + this.add('-start', target, 'Encore'); + if (!this.willMove(target)) { + this.effectData.duration++; + } + }, + onOverrideAction(pokemon) { + return this.effectData.move; + }, + onResidualOrder: 13, + onResidual(target) { + if (target.moves.includes(this.effectData.move) && target.moveSlots[target.moves.indexOf(this.effectData.move)].pp <= 0) { + // early termination if you run out of PP + delete target.volatiles.encore; + this.add('-end', target, 'Encore'); + } + }, + onEnd(target) { + this.add('-end', target, 'Encore'); + }, + onDisableMove(pokemon) { + if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { + return; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + endure: { + inherit: true, + desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has an X/65536 chance of being successful, where X starts at 65535 and halves, rounded down, each time this move is successfully used. After the fourth successful use in a row, X drops to 118 and continues with seemingly random values from 0-65535 on subsequent successful uses. X resets to 65535 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", + }, + explosion: { + inherit: true, + desc: "The user faints after using this move. The target's Defense is halved during damage calculation. This move is prevented from executing if any active Pokemon has the Damp Ability.", + }, + extrasensory: { + inherit: true, + desc: "Has a 10% chance to flinch the target. Damage doubles if the target has used Minimize while active.", + basePowerCallback(pokemon, target) { + if (target.volatiles['minimize']) return 160; + return 80; + }, + }, + fakeout: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + feintattack: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + firespin: { + inherit: true, + desc: "Prevents the target from switching for two to five turns. Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it uses Baton Pass. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + flail: { + inherit: true, + desc: "The power of this move is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1, where X is equal to (user's current HP * 48 / user's maximum HP), rounded down.", + }, + flash: { + inherit: true, + accuracy: 70, + }, + fly: { + inherit: 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, Sky Uppercut, Thunder, and Twister, and Gust and Twister have doubled power when used against it.", + basePower: 70, + }, + followme: { + inherit: true, + desc: "Until the end of the turn, all single-target attacks from the opposing side are redirected to the user. Such attacks are redirected to the user before they can be reflected by Magic Coat, or drawn in by the Lightning Rod Ability. This effect remains active even if the user leaves the field. Fails if it is not a Double Battle.", + }, + foresight: { + inherit: true, + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type.", + }, + furyattack: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + furyswipes: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + gigadrain: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down.", + pp: 5, + }, + glare: { + inherit: true, + desc: "Paralyzes the target. This move does not ignore type immunity.", + ignoreImmunity: false, + }, + hail: { + inherit: true, + desc: "For 5 turns, the weather becomes Hail. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are an Ice type. Fails if the current weather is Hail.", + }, + hiddenpower: { + inherit: true, + basePower: 0, + basePowerCallback(pokemon) { + return pokemon.hpPower || 70; + }, + category: "Physical", + onModifyMove(move, pokemon) { + move.type = pokemon.hpType || 'Dark'; + let specialTypes = ['Fire', 'Water', 'Grass', 'Ice', 'Electric', 'Dark', 'Psychic', 'Dragon']; + move.category = specialTypes.includes(move.type) ? 'Special' : 'Physical'; + }, + }, + highjumpkick: { + inherit: true, + basePower: 85, + desc: "If this attack is not successful and the target was not immune, the user loses HP equal to half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage.", + shortDesc: "If miss, user takes 1/2 damage it would've dealt.", + onMoveFail(target, source, move) { + if (target.runImmunity('Fighting')) { + let damage = this.getDamage(source, target, move, true); + if (typeof damage !== 'number') throw new Error("HJK recoil failed"); + this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, move); + } + }, + }, + hypnosis: { + inherit: true, + accuracy: 60, + }, + iciclespear: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + ingrain: { + inherit: true, + desc: "The user has 1/16 of its maximum HP restored at the end of each turn, but it is prevented from switching out and other Pokemon cannot force the user to switch out. The user can still switch out if it uses Baton Pass, and the replacement will remain trapped and still receive the healing effect.", + shortDesc: "User recovers 1/16 max HP per turn. Traps user.", + }, + jumpkick: { + inherit: true, + basePower: 70, + desc: "If this attack is not successful and the target was not immune, the user loses HP equal to half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage.", + shortDesc: "If miss, user takes 1/2 damage it would've dealt.", + onMoveFail(target, source, move) { + if (target.runImmunity('Fighting')) { + let damage = this.getDamage(source, target, move, true); + if (typeof damage !== 'number') throw new Error("Jump Kick didn't recoil"); + this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, move); + } + }, + }, + knockoff: { + inherit: true, + desc: "The target's held item is lost for the rest of the battle, unless it has the Sticky Hold Ability. During the effect, the target cannot gain a new item by any means.", + }, + leafblade: { + inherit: true, + basePower: 70, + }, + leechlife: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down.", + }, + leechseed: { + inherit: true, + desc: "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 the target uses Baton Pass, the replacement will continue being leeched. If the target switches out or uses Rapid Spin, the effect ends. Grass-type Pokemon are immune to this move on use, but not its effect.", + }, + lightscreen: { + inherit: true, + desc: "For 5 turns, the user and its party members take 1/2 damage from special attacks, or 2/3 damage if there are multiple active Pokemon on the user's side. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break. Fails if the effect is already active on the user's side.", + }, + magiccoat: { + inherit: true, + desc: "The user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. If the move targets both opposing Pokemon and the Pokemon under this effect is on the left side, it will reflect the move targeting both opposing Pokemon and its ally will not be affected by the original move; otherwise, if the Pokemon under this effect is on the right side, its ally will be affected by the original move and this Pokemon will reflect the move only targeting the original user. The effect ends once a move is reflected or at the end of the turn. Moves reflected in this way can be reflected again by another Pokemon under this effect. If the user has the Soundproof Ability, it nullifies sound-based moves before this effect happens. The Lightning Rod Ability redirects Electric moves before this move takes effect.", + }, + meanlook: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it uses Baton Pass. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field, unless it uses Baton Pass, in which case the target will remain trapped.", + }, + megadrain: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down.", + pp: 10, + }, + memento: { + inherit: true, + desc: "Lowers the target's Attack and Special Attack by 2 stages. The user faints. This move does not check accuracy, and can hit targets in the middle of a two-turn move. Fails entirely if the target's Attack and Special Attack stat stages are both -6.", + }, + metronome: { + inherit: true, + desc: "A random move is selected for use, other than Counter, Covet, Destiny Bond, Detect, Endure, Focus Punch, Follow Me, Helping Hand, Metronome, Mimic, Mirror Coat, Protect, Sketch, Sleep Talk, Snatch, Struggle, Thief, or Trick.", + }, + mimic: { + inherit: true, + desc: "While the user remains active, this move is replaced by the last move used by the target. The copied move has 5 PP. Fails if the target has not made a move, if the user has Transformed, if the user already knows the move, or if the move is Metronome, Mimic, Sketch, or Struggle.", + }, + minimize: { + inherit: true, + desc: "Raises the user's evasiveness by 1 stage. Whether or not the user's evasiveness was changed, Astonish, Extrasensory, Needle Arm, and Stomp will have their damage doubled if used against the user while it is active.", + }, + mirrorcoat: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with a special attack this turn equal to twice the HP lost by the user from that attack. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. This move considers Hidden Power as Normal type, and only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's special attack this turn, or if the user did not lose HP from the attack.", + effect: { + duration: 1, + noCopy: true, + onStart(target, source, source2, move) { + this.effectData.position = null; + this.effectData.damage = 0; + }, + onRedirectTargetPriority: -1, + onRedirectTarget(target, source, source2) { + if (source !== this.effectData.target) return; + return source.side.foe.active[this.effectData.position]; + }, + onDamagePriority: -101, + onDamage(damage, target, source, effect) { + if (effect && effect.effectType === 'Move' && source.side !== target.side && this.getCategory(effect.id) === 'Special') { + this.effectData.position = source.position; + this.effectData.damage = 2 * damage; + } + }, + }, + }, + mirrormove: { + inherit: true, + desc: "The user uses the last move that successfully targeted the user. The copied move is used with no specific target. Fails if no move has targeted the user, if the move missed, failed, or had no effect on the user, or if the move cannot be copied by this move.", + onTryHit() { }, + onHit(pokemon) { + let noMirror = ['assist', 'curse', 'doomdesire', 'focuspunch', 'futuresight', 'magiccoat', 'metronome', 'mimic', 'mirrormove', 'naturepower', 'psychup', 'roleplay', 'sketch', 'sleeptalk', 'spikes', 'spitup', 'taunt', 'teeterdance', 'transform']; + let lastAttackedBy = pokemon.getLastAttackedBy(); + if (!lastAttackedBy || !lastAttackedBy.source.lastMove || !lastAttackedBy.move || noMirror.includes(lastAttackedBy.move) || !lastAttackedBy.source.hasMove(lastAttackedBy.move)) { + return false; + } + this.useMove(lastAttackedBy.move, pokemon); + }, + target: "self", + }, + naturepower: { + inherit: true, + accuracy: true, + desc: "This move calls another move for use depending on the battle terrain. Swift in Wi-Fi battles.", + shortDesc: "Attack changes based on terrain. (Swift)", + onHit(target) { + this.useMove('swift', target); + }, + }, + needlearm: { + inherit: true, + desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", + basePowerCallback(pokemon, target) { + if (target.volatiles['minimize']) return 120; + return 60; + }, + }, + odorsleuth: { + inherit: true, + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type.", + }, + outrage: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused at the end of the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, falls asleep, becomes frozen, or the attack is not successful against the target, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + basePower: 90, + }, + overheat: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1}, + }, + petaldance: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused at the end of the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, falls asleep, becomes frozen, or the attack is not successful against the target, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + basePower: 70, + }, + pinmissile: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + protect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has an X/65536 chance of being successful, where X starts at 65535 and halves, rounded down, each time this move is successfully used. After the fourth successful use in a row, X drops to 118 and continues with seemingly random values from 0-65535 on subsequent successful uses. X resets to 65535 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", + }, + pursuit: { + inherit: true, + desc: "If the target is an opposing Pokemon and it switches out this turn, this move hits that Pokemon 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 becomes active immediately.", + shortDesc: "Power doubles if the targeted foe is switching out.", + }, + rage: { + inherit: true, + desc: "Once this move is used and unless the target protected itself, the user's Attack is raised by 1 stage every time it is hit by another Pokemon's attack as long as this move is chosen for use.", + }, + raindance: { + inherit: true, + desc: "For 5 turns, the weather becomes Rain Dance. The damage of Water-type attacks is multiplied by 1.5 and the damage of Fire-type attacks is multiplied by 0.5 during the effect. Fails if the current weather is Rain Dance.", + }, + rapidspin: { + inherit: true, + desc: "If this move is successful, the effects of Leech Seed and binding moves end for the user, and Spikes are removed from the user's side of the field.", + }, + razorwind: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second.", + shortDesc: "Charges, then hits foe(s) turn 2.", + }, + recover: { + inherit: true, + pp: 20, + }, + reflect: { + inherit: true, + desc: "For 5 turns, the user and its party members take 1/2 damage from physical attacks, or 2/3 damage if there are multiple active Pokemon on the user's side. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break. Fails if the effect is already active on the user's side.", + }, + revenge: { + inherit: true, + desc: "Damage doubles if the user was hit by a Pokemon in the target's current position this turn, and that Pokemon was the last to hit the user.", + shortDesc: "Damage doubles if user is hit by the target.", + }, + reversal: { + inherit: true, + desc: "The power of this move is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1, where X is equal to (user's current HP * 48 / user's maximum HP), rounded down.", + }, + rockblast: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + rocksmash: { + inherit: true, + basePower: 20, + }, + roleplay: { + inherit: true, + desc: "The user's Ability changes to match the target's Ability. Fails if the target's Ability is Wonder Guard.", + }, + safeguard: { + inherit: true, + desc: "For 5 turns, the user and its party members cannot have major status conditions or confusion inflicted on them by other Pokemon. Fails if the effect is already active on the user's side.", + }, + sandtomb: { + inherit: true, + desc: "Prevents the target from switching for two to five turns. Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it uses Baton Pass. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + sandstorm: { + inherit: true, + 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 Sand Veil Ability. Fails if the current weather is Sandstorm.", + }, + selfdestruct: { + inherit: true, + desc: "The user faints after using this move. The target's Defense is halved during damage calculation. This move is prevented from executing if any active Pokemon has the Damp Ability.", + }, + sketch: { + inherit: true, + 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.", + }, + skillswap: { + inherit: true, + desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Wonder Guard.", + }, + skullbash: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second. Raises the user's Defense by 1 stage on the first turn.", + }, + skyattack: { + inherit: 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.", + }, + sleeptalk: { + inherit: true, + desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, but if it currently has 0 PP it will fail to be used. This move cannot select Assist, Bide, Focus Punch, Metronome, Mirror Move, Sleep Talk, Uproar, or any two-turn move.", + beforeMoveCallback(pokemon) { + if (pokemon.volatiles['choicelock'] || pokemon.volatiles['encore']) { + this.addMove('move', pokemon, 'Sleep Talk'); + this.add('-fail', pokemon); + return true; + } + }, + onHit(pokemon) { + let moves = []; + for (const moveSlot of pokemon.moveSlots) { + let move = moveSlot.id; + let pp = moveSlot.pp; + let NoSleepTalk = ['assist', 'bide', 'focuspunch', 'metronome', 'mirrormove', 'sleeptalk', 'uproar']; + if (move && !(NoSleepTalk.includes(move) || this.getMove(move).flags['charge'])) { + moves.push({move: move, pp: pp}); + } + } + if (!moves.length) { + return false; + } + let randomMove = this.sample(moves); + if (!randomMove.pp) { + this.add('cant', pokemon, 'nopp', randomMove.move); + return; + } + this.useMove(randomMove.move, pokemon); + }, + }, + smellingsalts: { + inherit: true, + desc: "Damage doubles if the target is paralyzed. If this move is successful, the target is cured of paralysis.", + shortDesc: "Damage doubles if target is paralyzed; cures it.", + }, + solarbeam: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second. Damage is halved if the weather is Hail, Rain Dance, or Sandstorm. If the weather is Sunny Day, the move completes in one turn.", + }, + spiderweb: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it uses Baton Pass. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field, unless it uses Baton Pass, in which case the target will remain trapped.", + }, + spikecannon: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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.", + }, + spikes: { + inherit: true, + desc: "Sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Can be used up to three times before failing. Opponents lose 1/8 of their maximum HP with one layer, 1/6 of their maximum HP with two layers, and 1/4 of their maximum HP with three layers, all rounded down. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin successfully.", + }, + spite: { + inherit: true, + desc: "Causes the target's last move used to lose 2 to 5 PP, at random. Fails if the target has not made a move, if the move has 0 or 1 PP, or if it no longer knows the move.", + shortDesc: "Lowers the PP of the target's last move by 2-5.", + onHit(target) { + let roll = this.random(2, 6); + if (target.lastMove && target.deductPP(target.lastMove.id, roll)) { + this.add("-activate", target, 'move: Spite', target.lastMove.id, roll); + return; + } + return false; + }, + }, + spitup: { + inherit: true, + desc: "Damage is multiplied by the user's Stockpile count. This move does not apply damage variance and cannot be a critical hit. Fails if the user's Stockpile count is 0. Unless this move misses, the user's Stockpile count resets to 0.", + }, + stockpile: { + inherit: true, + desc: "The user's Stockpile count increases by 1. Fails if the user's Stockpile count is 3. The user's Stockpile count is reset to 0 when it is no longer active.", + shortDesc: "Raises user's Stockpile count by 1. Max 3 uses.", + pp: 10, + effect: { + noCopy: true, + onStart(target) { + this.effectData.layers = 1; + this.add('-start', target, 'stockpile' + this.effectData.layers); + }, + onRestart(target) { + if (this.effectData.layers >= 3) return false; + this.effectData.layers++; + this.add('-start', target, 'stockpile' + this.effectData.layers); + }, + onEnd(target) { + this.effectData.layers = 0; + this.add('-end', target, 'Stockpile'); + }, + }, + }, + stomp: { + inherit: true, + desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", + }, + struggle: { + inherit: true, + accuracy: 100, + desc: "Deals typeless damage to a random opposing Pokemon. If this move was successful, the user takes damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP, and the Rock Head Ability does not prevent this. This move is automatically used if none of the user's known moves can be selected.", + shortDesc: "User loses 1/4 the HP lost by the target.", + recoil: [1, 4], + struggleRecoil: false, + }, + stunspore: { + inherit: true, + desc: "Paralyzes the target. This move does not ignore type immunity.", + }, + sunnyday: { + inherit: true, + desc: "For 5 turns, the weather becomes Sunny Day. The damage of Fire-type attacks is multiplied by 1.5 and the damage of Water-type attacks is multiplied by 0.5 during the effect. Fails if the current weather is Sunny Day.", + }, + surf: { + inherit: true, + shortDesc: "Hits foes. Power doubles against Dive.", + target: "allAdjacentFoes", + }, + swallow: { + inherit: true, + desc: "The user restores its HP based on its Stockpile count. Restores 1/4 of its maximum HP if it's 1, 1/2 of its maximum HP if it's 2, both rounded half down, and all of its HP if it's 3. Fails if the user's Stockpile count is 0. The user's Stockpile count resets to 0.", + }, + taunt: { + inherit: true, + desc: "For 2 turns, prevents the target from using non-damaging moves.", + shortDesc: "For 2 turns, the target can't use status moves.", + flags: {protect: 1, authentic: 1}, + effect: { + duration: 2, + onStart(target) { + this.add('-start', target, 'move: Taunt'); + }, + onResidualOrder: 12, + onEnd(target) { + this.add('-end', target, 'move: Taunt', '[silent]'); + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.move).category === 'Status') { + pokemon.disableMove(moveSlot.id); + } + } + }, + onBeforeMove(attacker, defender, move) { + if (move.category === 'Status') { + this.add('cant', attacker, 'move: Taunt', move); + return false; + } + }, + }, + }, + teeterdance: { + inherit: true, + flags: {protect: 1}, + }, + thief: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Enigma Berry. Items lost to this move cannot be regained with Recycle.", + }, + thrash: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused at the end of the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, falls asleep, becomes frozen, or the attack is not successful against the target, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + }, + tickle: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, + }, + trick: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, if either is under the effect of Knock Off, or if the target has the Sticky Hold Ability.", + }, + triplekick: { + inherit: 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 a hit. If one of the hits breaks the target's substitute, it will take damage for the remaining hits.", + }, + twineedle: { + inherit: true, + desc: "Hits twice, with each hit having a 20% chance to poison the target. If the first hit breaks the target's substitute, it will take damage for the second hit.", + }, + uproar: { + inherit: true, + desc: "The user spends three to five turns locked into this move. This move targets an opposing Pokemon at random on each turn. During effect, no active Pokemon can fall asleep by any means, and Pokemon that are already asleep wake up as their turn starts or at the end of each turn, including the last one. If the user is prevented from moving or the attack is not successful against the target during one of the turns, the effect ends.", + shortDesc: "Lasts 3-5 turns. Active Pokemon cannot sleep.", + }, + vinewhip: { + inherit: true, + pp: 10, + }, + volttackle: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", + shortDesc: "Has 1/3 recoil.", + secondary: null, + }, + waterfall: { + inherit: true, + desc: "No additional effect.", + shortDesc: "No additional effect.", + secondary: null, + }, + weatherball: { + inherit: true, + desc: "Damage doubles if a weather condition is active, and this move's type changes to match. Ice type during Hail, Water type during Rain Dance, Rock type during Sandstorm, and Fire type during Sunny Day.", + shortDesc: "Damage doubles and type varies during weather.", + onModifyMove(move) { + switch (this.effectiveWeather()) { + case 'sunnyday': + move.type = 'Fire'; + move.category = 'Special'; + break; + case 'raindance': + move.type = 'Water'; + move.category = 'Special'; + break; + case 'sandstorm': + move.type = 'Rock'; + break; + case 'hail': + move.type = 'Ice'; + move.category = 'Special'; + break; + } + }, + }, + whirlpool: { + inherit: true, + desc: "Prevents the target from switching for two to five turns. Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it uses Baton Pass. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + wrap: { + inherit: true, + desc: "Prevents the target from switching for two to five turns. Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it uses Baton Pass. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + zapcannon: { + inherit: true, + basePower: 100, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/data/mods/gen3/random-teams.js b/data/mods/gen3/random-teams.js new file mode 100644 index 0000000000000..9ce92f17faa0d --- /dev/null +++ b/data/mods/gen3/random-teams.js @@ -0,0 +1,718 @@ +'use strict'; + +const RandomGen4Teams = require('../../mods/gen4/random-teams'); + +class RandomGen3Teams extends RandomGen4Teams { + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {RandomTeamsTypes["TeamDetails"]} [teamDetails] + * @return {RandomTeamsTypes["RandomSet"]} + */ + randomSet(template, slot, teamDetails = {}) { + let baseTemplate = (template = this.getTemplate(template)); + let species = template.species; + + if (!template.exists || (!template.randomBattleMoves && !template.learnset)) { + template = this.getTemplate('unown'); + + let err = new Error('Template incompatible with random battles: ' + species); + Monitor.crashlog(err, 'The gen 3 randbat set generator'); + } + + if (template.battleOnly) species = template.baseSpecies; + + let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : template.learnset ? Object.keys(template.learnset) : []); + /**@type {string[]} */ + let moves = []; + let ability = ''; + let item = ''; + let evs = { + hp: 85, + atk: 85, + def: 85, + spa: 85, + spd: 85, + spe: 85, + }; + let ivs = { + hp: 31, + atk: 31, + def: 31, + spa: 31, + spd: 31, + spe: 31, + }; + /**@type {{[k: string]: true}} */ + let hasType = {}; + hasType[template.types[0]] = true; + if (template.types[1]) { + hasType[template.types[1]] = true; + } + /**@type {{[k: string]: true}} */ + let hasAbility = {}; + hasAbility[template.abilities[0]] = true; + if (template.abilities[1]) { + // @ts-ignore TypeScript bug + hasAbility[template.abilities[1]] = true; + } + let availableHP = 0; + for (const setMoveid of movePool) { + if (setMoveid.startsWith('hiddenpower')) availableHP++; + } + + let recoveryMoves = [ + 'milkdrink', 'moonlight', 'morningsun', 'painsplit', 'recover', 'rest', 'slackoff', 'softboiled', + 'synthesis', 'wish', + ]; + + // these Pokemon always want recovery + let requiresRecovery = [ + 'Clefable', 'Lickitung', 'Blissey', 'Umbreon', 'Porygon2', 'Meganium', 'Miltank', 'Lugia', + 'Ho-Oh', 'Sableye', 'Cradily', 'Milotic', 'Dusclops', 'Latias', 'Deoxys-Defense', + ]; + + // these Pokemon don't always want a STAB move + let noStab = [ + 'Clefable', 'Gengar', 'Kingler', 'Blissey', 'Porygon2', 'Umbreon', 'Dragonite', 'Feraligatr', + 'Noctowl', 'Azumarill', 'Misdreavus', 'Sneasel', 'Mightyena', 'Masquerain', 'Nosepass', 'Delcatty', + 'Volbeat', 'Illumise', 'Castform', 'Absol', + ]; + + // these Pokemon don't need any damaging attacks + let noAttacks = [ + 'Smeargle', 'Shuckle', + ]; + + /**@type {{[k: string]: boolean}} */ + let hasMove = {}; + let counter; + + do { + // Keep track of all moves we have: + hasMove = {}; + for (const setMoveid of moves) { + if (setMoveid.startsWith('hiddenpower')) { + hasMove['hiddenpower'] = true; + } else { + hasMove[setMoveid] = true; + } + } + + // Choose next 4 moves from learnset/viable moves and add them to moves list: + while (moves.length < 4 && movePool.length) { + let setMoveid = this.sampleNoReplace(movePool); + if (setMoveid.substr(0, 11) === 'hiddenpower') { + availableHP--; + if (hasMove['hiddenpower']) continue; + hasMove['hiddenpower'] = true; + } else { + hasMove[setMoveid] = true; + } + moves.push(setMoveid); + } + + counter = this.queryMoves(moves, hasType, hasAbility, movePool); + + // Iterate through the moves again, this time to cull them: + for (const [i, setMoveid] of moves.entries()) { + let move = this.getMove(setMoveid); + let moveid = move.id; + let rejected = false; + let isSetup = false; + + switch (moveid) { + // Not very useful without their supporting moves + case 'batonpass': + if (!counter.setupType && !counter['speedsetup'] && !hasMove['substitute'] && !hasMove['meanlook'] && !hasMove['spiderweb']) rejected = true; + break; + case 'eruption': case 'waterspout': + if (counter.Physical + counter.Special < 4) rejected = true; + break; + case 'focuspunch': + if (!hasMove['substitute'] && (counter.Physical < 4 || hasMove['fakeout'] || hasMove['rapidspin'])) rejected = true; + if (counter.setupType || counter.damagingMoves.length < 2 || hasMove['sleeptalk']) rejected = true; + break; + case 'meanlook': case 'spiderweb': + if (!hasMove['batonpass'] && !hasMove['perishsong']) rejected = true; + break; + case 'perishsong': + if (!hasMove['meanlook'] && !hasMove['spiderweb']) rejected = true; + if (!hasMove['protect'] && !hasMove['substitute']) rejected = true; + if (counter.setupType || hasMove['batonpass']) rejected = true; + break; + case 'raindance': + if (hasMove['rest'] || counter.damagingMoves.length < 2) rejected = true; + break; + case 'rest': + if (hasMove['painsplit'] || hasMove['recover'] || hasMove['wish']) rejected = true; + if (movePool.includes('sleeptalk')) rejected = true; + break; + case 'sleeptalk': + if (hasMove['painsplit'] || hasMove['recover'] || hasMove['wish']) rejected = true; + if (!hasMove['rest']) rejected = true; + if (movePool.length > 1) { + let rest = movePool.indexOf('rest'); + if (rest >= 0) this.fastPop(movePool, rest); + } + break; + case 'sunnyday': + if (!hasMove['solarbeam']) rejected = true; + break; + + // Set up once and only if we have the moves for it + case 'bellydrum': case 'bulkup': case 'curse': case 'dragondance': case 'swordsdance': + if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) rejected = true; + if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + if (moveid === 'bellydrum' && !hasMove['substitute'] && !hasMove['extremespeed'] && !hasMove['softboiled']) rejected = true; + isSetup = true; + break; + case 'calmmind': case 'growth': case 'tailglow': + if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; + if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + isSetup = true; + break; + case 'agility': + if (counter.damagingMoves.length < 2 && !hasMove['batonpass']) rejected = true; + if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (!counter.setupType) isSetup = true; + break; + case 'endeavor': case 'flail': case 'reversal': + if (!hasMove['substitute'] && !hasMove['endure']) rejected = true; + if (moveid === 'flail' && hasMove['extremespeed']) rejected = true; + break; + + // Bad after setup + case 'destinybond': case 'explosion': case 'memento': case 'selfdestruct': + if (counter.setupType || recoveryMoves.some(recoveryMove => hasMove[recoveryMove]) || hasMove['substitute']) rejected = true; + if (moveid === 'destinybond' && (hasMove['explosion'] || hasMove['selfdestruct'])) rejected = true; + if (moveid === 'memento' && hasMove['destinybond']) rejected = true; + break; + case 'fakeout': + if (counter.setupType || hasMove['substitute'] || hasMove['sunnyday'] || counter.damagingMoves.length < 3) rejected = true; + break; + case 'haze': case 'knockoff': + if (counter.setupType || !!counter['speedsetup']) rejected = true; + break; + case 'protect': + if (!hasAbility['Speed Boost'] && !hasAbility['Wonder Guard'] && !hasMove['perishsong'] && !hasMove['toxic'] && !hasMove['wish']) rejected = true; + if (hasMove['sleeptalk']) rejected = true; + break; + case 'roar': case 'whirlwind': + if (counter.setupType || hasMove['encore'] || hasMove['substitute'] || hasMove['yawn']) rejected = true; + break; + case 'rapidspin': + if (counter.setupType || teamDetails.rapidSpin) rejected = true; + break; + case 'spikes': + if (counter.setupType || teamDetails.spikes) rejected = true; + break; + case 'trick': + if (counter.Physical + counter.Special < 3 || counter.setupType) rejected = true; + if (hasMove['lightscreen'] || hasMove['reflect']) rejected = true; + break; + case 'toxic': + if (counter.setupType) rejected = true; + break; + case 'endure': + if (counter.Status >= 3 || counter.recoil || hasMove['substitute']) rejected = true; + break; + case 'counter': case 'mirrorcoat': + if (counter.setupType || hasMove['rest'] || hasMove['substitute']) rejected = true; + break; + + // Bit redundant to have both + // Attacks: + case 'bodyslam': case 'doubleedge': + if (hasMove['return'] || hasMove['flail'] || hasMove['endure'] && movePool.includes('flail')) rejected = true; + if (moveid === 'doubleedge' && hasMove['bodyslam']) rejected = true; + break; + case 'headbutt': + if (!hasMove['bodyslam'] && !hasMove['thunderwave']) rejected = true; + break; + case 'return': case 'slash': + if (hasMove['flail'] || hasMove['endure'] && movePool.includes('flail')) rejected = true; + break; + case 'quickattack': + if (hasMove['thunderwave'] || counter.damagingMoves.length < 3 || hasType['Normal'] && counter['Normal'] < 2) rejected = true; + break; + case 'superfang': + if (hasMove['endeavor']) rejected = true; + break; + case 'flamethrower': + if (hasMove['fireblast']) rejected = true; + break; + case 'hydropump': + if (hasMove['surf']) rejected = true; + break; + case 'gigadrain': + if (hasMove['magicalleaf'] || hasMove['razorleaf'] || hasMove['solarbeam'] && hasMove['sunnyday']) rejected = true; + break; + case 'hiddenpowergrass': case 'magicalleaf': case 'razorleaf': + if (hasMove['solarbeam'] && hasMove['sunnyday']) rejected = true; + break; + case 'solarbeam': + if (counter.setupType === 'Physical' || !hasMove['sunnyday']) rejected = true; + break; + case 'brickbreak': case 'crosschop': case 'hiddenpowerfighting': case 'highjumpkick': case 'skyuppercut': + if (hasMove['reversal'] || hasMove['endure'] && movePool.includes('reversal') || hasMove['substitute'] && hasMove['focuspunch']) rejected = true; + if (moveid === 'brickbreak' && hasMove['skyuppercut']) rejected = true; + if (moveid === 'highjumpkick' && hasMove['brickbreak']) rejected = true; + break; + case 'machpunch': + if (hasType['Fighting'] && counter.stab < 2 || counter.damagingMoves.length < 3) rejected = true; + break; + case 'seismictoss': case 'nightshade': + if (counter.Physical + counter.Special >= 1) rejected = true; + break; + case 'superpower': + if (counter.setupType === 'Physical') rejected = true; + break; + case 'shadowball': + if (hasMove['feintattack'] && counter.Physical < 3) rejected = true; + break; + case 'feintattack': + if (hasMove['shadowball'] && counter.Physical >= 3) rejected = true; + break; + case 'pursuit': + if (counter.setupType) rejected = true; + break; + case 'bonemerang': + if (hasMove['earthquake']) rejected = true; + break; + + // Status: + case 'leechseed': + if (counter.setupType || !!counter['speedsetup'] || hasMove['raindance'] || hasMove['rest']) rejected = true; + break; + case 'painsplit': case 'wish': + if (hasMove['moonlight'] || hasMove['morningsun'] || hasMove['rest'] || hasMove['softboiled']) rejected = true; + break; + case 'substitute': + if (hasMove['healbell'] || hasMove['pursuit'] || hasMove['rest']) rejected = true; + if (counter.damagingMoves.length < 2 && !hasMove['batonpass'] && !hasMove['perishsong']) rejected = true; + break; + case 'taunt': + if (hasMove['hypnosis'] || hasMove['substitute']) rejected = true; + break; + case 'thunderwave': case 'stunspore': + if (!!counter['speedsetup'] || hasMove['dragondance'] || hasMove['toxic'] || hasMove['willowisp'] || movePool.includes('sleeppowder') || hasMove['bodyslam'] && hasAbility['Serene Grace']) rejected = true; + break; + } + + // Increased/decreased priority moves are unneeded with moves that boost only speed + if (move.priority !== 0 && !!counter['speedsetup']) { + rejected = true; + } + + // @ts-ignore + if (counter.setupType && !isSetup && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { + // Mono-attacking with setup and RestTalk is allowed + // Reject Status moves only if there is nothing else to reject + // @ts-ignore + if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; + } + + // Pokemon should have moves that benefit their type + if ((hasType['Bug'] && !counter['Bug'] && movePool.includes('megahorn')) || + (hasType['Fighting'] && !counter['Fighting']) || + (hasType['Fire'] && !counter['Fire'] && counter.setupType !== 'Physical') || + (hasType['Ground'] && !counter['Ground']) || + (hasType['Rock'] && !counter['Rock'] && template.baseStats.atk >= 90) || + (hasType['Steel'] && !counter['Steel'] && movePool.includes('meteormash')) || + (hasType['Water'] && !counter['Water'] && (movePool.includes('surf') || movePool.includes('hydropump')) && counter.setupType !== 'Physical' && !hasAbility['Huge Power'] && (!hasType['Ice'] || !counter['Ice'])) || + (movePool.includes('spore')) || + (movePool.includes('earthquake') && !counter['Ground'] && !counter['Fighting'] && counter.Physical > 1 && (hasType['Bug'] || hasType['Flying'] || hasType['Normal'] || hasType['Poison'] || hasType['Rock'] || hasType['Steel'])) || + (movePool.includes('rockslide') && !counter['Rock'] && counter.Physical > 1 && hasType['Ground']) || + (movePool.includes('thunderbolt') && !counter['Electric'] && counter.Special > 1 && (hasType['Ice'] || hasType['Water'])) || + (requiresRecovery.includes(template.species) && !recoveryMoves.some(recoveryMove => hasMove[recoveryMove]) && recoveryMoves.some(recoveryMove => movePool.includes(recoveryMove)))) { + // Reject Status or non-STAB + if (!isSetup && !move.weather && !recoveryMoves.includes(moveid) && !['sleeptalk', 'substitute'].includes(moveid)) { + if (move.category === 'Status' || !hasType[move.type] || (move.basePower && move.basePower < 40 && !move.multihit)) rejected = true; + } + } + + // Sleep Talk shouldn't be selected without Rest + if (moveid === 'rest' && rejected) { + let sleeptalk = movePool.indexOf('sleeptalk'); + if (sleeptalk >= 0) { + if (movePool.length < 2) { + rejected = false; + } else { + this.fastPop(movePool, sleeptalk); + } + } + } + + // Remove rejected moves from the move list + if (rejected && (movePool.length - availableHP || availableHP && (moveid === 'hiddenpower' || !hasMove['hiddenpower']))) { + moves.splice(i, 1); + break; + } + } + if (species === 'Castform' && moves.length === 4) { + // Make sure castforms alternate formes have their required moves + let reqMove = ''; + if (template.species === 'Castform-Sunny' && !hasMove['sunnyday']) { + reqMove = 'sunnyday'; + } else if (template.species === 'Castform-Rainy' && !hasMove['raindance']) { + reqMove = 'raindance'; + } else if (template.species === 'Castform-Snowy' && !hasMove['hail']) { + reqMove = 'hail'; + } + if (reqMove) { + // reject a move + for (let [i, move] of moves.entries()) { + if (move === 'weatherball' || this.getMove(move).type in hasType) continue; + moves[i] = reqMove; + let reqMoveIndex = movePool.indexOf(reqMove); + if (reqMoveIndex !== -1) this.fastPop(movePool, reqMoveIndex); + break; + } + } + } + if (moves.length === 4 && !noAttacks.includes(template.species) && (counter['physicalpool'] || counter['specialpool'])) { + // Move post-processing: + if (counter.damagingMoves.length === 0) { + // A set shouldn't have zero attacking moves + moves.splice(this.random(moves.length), 1); + } else if (!counter.stab && !noStab.includes(template.species) && + !(hasType['Bug'] && moves.indexOf('hiddenpowerbug') > -1) && + !(hasType['Flying'] && moves.indexOf('hiddenpowerflying') > -1) && + !(hasType['Grass'] && moves.indexOf('hiddenpowergrass') > -1) && + !(hasType['Steel'] && moves.indexOf('hiddenpowersteel') > -1)) { + // In most cases, a set shouldn't have zero STABs + if (counter.damagingMoves.length === 1) { + let damagingid = counter.damagingMoves[0].id; + if (movePool.length - availableHP || availableHP && (damagingid === 'hiddenpower' || !hasMove['hiddenpower'])) { + if (!counter.damagingMoves[0].damage) { + moves.splice(counter.damagingMoveIndex[damagingid], 1); + } + } + } else if (!counter.damagingMoves[0].damage && !counter.damagingMoves[1].damage) { + // If you have three or more attacks, and none of them are STAB, reject one of them at random. + let rejectableMoves = []; + let baseDiff = movePool.length - availableHP; + for (const move of counter.damagingMoves) { + if (baseDiff || availableHP && (!hasMove['hiddenpower'] || move.id === 'hiddenpower')) { + rejectableMoves.push(counter.damagingMoveIndex[move.id]); + } + } + if (rejectableMoves.length) { + moves.splice(this.sample(rejectableMoves), 1); + } + } + } + } + if (moves.length === 4 && !hasMove['hiddenpower']) { + // if Hidden Power is available, use it to replace a worse attack of the same type + if (hasMove['razorleaf']) { + moves.splice(moves.indexOf('razorleaf'), 1, 'hiddenpowergrass'); + } else if (hasMove['mudshot']) { + moves.splice(moves.indexOf('mudshot'), 1, 'hiddenpowerground'); + } else if (hasMove['silverwind'] && !hasMove['batonpass']) { + moves.splice(moves.indexOf('silverwind'), 1, 'hiddenpowerbug'); + } else if (hasMove['aerialace'] && !hasAbility['Hustle']) { + moves.splice(moves.indexOf('aerialace'), 1, 'hiddenpowerflying'); + } else if (hasMove['feintattack']) { + moves.splice(moves.indexOf('feintattack'), 1, 'hiddenpowerdark'); + } else if (hasMove['magicalleaf']) { + moves.splice(moves.indexOf('magicalleaf'), 1, 'hiddenpowergrass'); + } else if (hasMove['shadowpunch']) { + moves.splice(moves.indexOf('shadowpunch'), 1, 'hiddenpowerghost'); + } else if (hasMove['gigadrain'] && hasType['Grass'] && counter.stab < 2 && recoveryMoves.some(recoveryMove => hasMove[recoveryMove])) { + moves.splice(moves.indexOf('gigadrain'), 1, 'hiddenpowergrass'); + } else if (hasMove['steelwing']) { + moves.splice(moves.indexOf('steelwing'), 1, 'hiddenpowersteel'); + } else if (hasMove['rockslide'] && !hasMove['thunderwave'] && !(hasAbility['Serene Grace'] && hasMove['bodyslam']) && (template.baseStats.spe < 50 || hasMove['curse'])) { + moves.splice(moves.indexOf('rockslide'), 1, 'hiddenpowerrock'); + } + } + } while (moves.length < 4 && movePool.length); + + // If Hidden Power has been removed, reset the IVs + if (!hasMove['hiddenpower']) { + ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; + } + + let abilities = Object.values(baseTemplate.abilities); + abilities.sort((a, b) => this.getAbility(b).rating - this.getAbility(a).rating); + let ability0 = this.getAbility(abilities[0]); + let ability1 = this.getAbility(abilities[1]); + ability = ability0.name; + if (ability0.gen !== 3) ability = ability1.name; + if (ability0.gen === 3 && ability1.gen === 3) { + if (ability0.rating <= ability1.rating) { + if (this.randomChance(1, 2)) ability = ability1.name; + } else if (ability0.rating - 0.6 <= ability1.rating) { + if (this.randomChance(1, 3)) ability = ability1.name; + } + + let rejectAbility = false; + if (ability === 'Hustle') { + // Counter ability (hustle) + rejectAbility = !counter['hustle']; + } else if (ability === 'Blaze') { + rejectAbility = !counter['Fire']; + } else if (ability === 'Chlorophyll') { + rejectAbility = !hasMove['sunnyday']; + } else if (ability === 'Compound Eyes') { + rejectAbility = !counter['inaccurate']; + } else if (ability === 'Lightning Rod') { + rejectAbility = template.types.includes('Ground'); + } else if (ability === 'Limber') { + rejectAbility = template.types.includes('Electric'); + } else if (ability === 'Overgrow') { + rejectAbility = !counter['Grass']; + } else if (ability === 'Rock Head') { + rejectAbility = !counter['recoil']; + } else if (ability === 'Sand Veil') { + rejectAbility = !teamDetails['sand']; + } else if (ability === 'Serene Grace') { + rejectAbility = !counter['serenegrace'] || template.id === 'blissey'; + } else if (ability === 'Sturdy') { + rejectAbility = true; // Strudy only blocks OHKO moves in gen3, which arent in our movepools. + } else if (ability === 'Swift Swim') { + rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; + } else if (ability === 'Swarm') { + rejectAbility = !counter['Bug']; + } else if (ability === 'Synchronize') { + rejectAbility = counter.Status < 2; + } else if (ability === 'Torrent') { + rejectAbility = !counter['Water']; + } else if (ability === 'Insomnia') { + rejectAbility = hasMove['rest']; + } + + if (rejectAbility) { + if (ability === ability1.name) { // or not + ability = ability0.name; + } else if (ability1.rating > 1) { // only switch if the alternative doesn't suck + ability = ability1.name; + } + } + if (abilities.includes('Swift Swim') && hasMove['raindance']) { + ability = 'Swift Swim'; + } + if (abilities.includes('Chlorophyll') && hasMove['sunnyday']) { + ability = 'Chlorophyll'; + } + } + + if (template.requiredItems) { + item = this.sample(template.requiredItems); + + // First, the extra high-priority items + } else if (template.species === 'Farfetch\'d') { + item = 'Stick'; + } else if (template.species === 'Marowak') { + item = 'Thick Club'; + } else if (template.species === 'Shedinja') { + item = 'Lum Berry'; + } else if (template.species === 'Slaking') { + item = 'Choice Band'; + } else if (template.species === 'Unown') { + item = 'Twisted Spoon'; + } else if (hasMove['trick']) { + item = 'Choice Band'; + } else if (hasMove['bellydrum']) { + item = 'Salac Berry'; + } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { + item = 'Chesto Berry'; + + // Medium priority + } else if (hasMove['leechseed']) { + item = 'Leftovers'; + } else if (hasMove['endeavor'] || hasMove['flail'] || hasMove['reversal'] || hasMove['endure'] || + hasMove['substitute'] && counter.Status < 3 && template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 250 && this.randomChance(1, 2)) { + if (template.baseStats.spe <= 90 && !counter['speedsetup'] && !hasMove['focuspunch']) { + item = 'Salac Berry'; + } else if (counter.Physical > counter.Special || counter.Physical === counter.Special && this.randomChance(1, 2)) { + item = 'Liechi Berry'; + } else { + item = 'Petaya Berry'; + } + } else if ((counter.Physical >= 4 || counter.Physical >= 3 && counter.Special === 1 && this.randomChance(1, 2)) && !(hasMove['bodyslam'] && hasAbility['Serene Grace']) && !hasMove['fakeout'] && !hasMove['rapidspin']) { + item = 'Choice Band'; + } else if (hasMove['curse'] || hasMove['protect'] || hasMove['sleeptalk'] || hasMove['substitute']) { + item = 'Leftovers'; + // This is the "REALLY can't think of a good item" cutoff + } else { + item = 'Leftovers'; + } + + let levelScale = { + LC: 87, + NFE: 85, + NU: 83, + NUBL: 81, + UU: 79, + UUBL: 77, + OU: 75, + Uber: 71, + }; + let customScale = { + Ditto: 99, Unown: 99, + }; + let tier = template.tier; + // @ts-ignore + let level = levelScale[tier] || 75; + // @ts-ignore + if (customScale[template.name]) level = customScale[template.name]; + + // Prepare optimal HP + let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if (hasMove['substitute'] && (hasMove['endeavor'] || hasMove['flail'] || hasMove['reversal'])) { + // Endeavor/Flail/Reversal users should be able to use four Substitutes + if (hp % 4 === 0) evs.hp -= 4; + } else if (hasMove['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 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + } + } + + // Minimize confusion damage + if (!counter['Physical'] && !hasMove['transform']) { + evs.atk = 0; + ivs.atk = hasMove['hiddenpower'] ? ivs.atk - 28 : 0; + } + + return { + name: template.baseSpecies, + species: species, + gender: template.gender, + moves: moves, + ability: ability, + evs: evs, + ivs: ivs, + item: item, + level: level, + shiny: this.randomChance(1, 1024), + }; + } + + randomTeam() { + let pokemon = []; + + let allowedNFE = ['Scyther', 'Vigoroth']; + + let pokemonPool = []; + for (let id in this.data.FormatsData) { + let template = this.getTemplate(id); + if (template.gen > 3 || template.isNonstandard || !template.randomBattleMoves) continue; + if (template.evos && !allowedNFE.includes(template.species)) { + let invalid = false; + for (const evo of template.evos) { + if (this.getTemplate(evo).gen <= 3) { + invalid = true; + break; + } + } + if (invalid) continue; + } + pokemonPool.push(id); + } + + /**@type {{[k: string]: number}} */ + let typeCount = {}; + /**@type {{[k: string]: number}} */ + let typeComboCount = {}; + /**@type {{[k: string]: number}} */ + let baseFormes = {}; + let uberCount = 0; + let nuCount = 0; + /**@type {RandomTeamsTypes["TeamDetails"]} */ + let teamDetails = {}; + + while (pokemonPool.length && pokemon.length < 6) { + let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); + if (!template.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[template.baseSpecies]) continue; + + // Limit to one Wobbuffet per battle (not just per team) + if (template.species === 'Wobbuffet' && this.hasWobbuffet) continue; + + let tier = template.tier; + switch (tier) { + case 'Uber': + // Ubers are limited to 2 but have a 20% chance of being added anyway. + if (uberCount > 1 && this.randomChance(4, 5)) continue; + break; + case 'NU': + // NUs are limited to 2 but have a 20% chance of being added anyway. + if (nuCount > 1 && this.randomChance(4, 5)) continue; + } + + // Adjust rate for castform + if (template.baseSpecies === 'Castform' && this.randomChance(3, 4)) continue; + + // Limit 2 of any type + let skip = false; + for (const type of template.types) { + if (typeCount[type] > 1 && this.randomChance(4, 5)) { + skip = true; + break; + } + } + if (skip) continue; + + let set = this.randomSet(template, pokemon.length, teamDetails); + + // Limit 1 of any type combination + let typeCombo = template.types.slice().sort().join(); + if (set.ability === 'Drought' || set.ability === 'Drizzle' || set.ability === 'Sand Stream') { + // Drought, Drizzle and Sand Stream don't count towards the type combo limit + typeCombo = set.ability; + if (typeCombo in typeComboCount) continue; + } else { + if (typeComboCount[typeCombo] >= 1) continue; + } + + // Okay, the set passes, add it to our team + pokemon.push(set); + + // 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 (template.species === 'Wobbuffet') this.hasWobbuffet = true; + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[template.baseSpecies] = 1; + + // Increment type counters + for (const type of template.types) { + if (type in typeCount) { + typeCount[type]++; + } else { + typeCount[type] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Increment Uber/NU counters + if (tier === 'Uber') { + uberCount++; + } else if (tier === 'NU') { + nuCount++; + } + + // Team has + if (set.ability === 'Snow Warning') teamDetails['hail'] = 1; + 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('toxicspikes')) teamDetails['toxicSpikes'] = 1; + if (set.moves.includes('rapidspin')) teamDetails['rapidSpin'] = 1; + } + return pokemon; + } +} + +module.exports = RandomGen3Teams; diff --git a/data/mods/gen3/rulesets.js b/data/mods/gen3/rulesets.js new file mode 100644 index 0000000000000..d6434e013c42d --- /dev/null +++ b/data/mods/gen3/rulesets.js @@ -0,0 +1,15 @@ +'use strict'; + +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { + standard: { + effectType: 'ValidatorRule', + name: 'Standard', + desc: "The standard ruleset for all offical Smogon singles tiers (Ubers, OU, etc.)", + ruleset: ['Sleep Clause Mod', 'Switch Priority Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], + banlist: ['Unreleased', 'Illegal'], + }, +}; + +exports.BattleFormats = BattleFormats; + diff --git a/data/mods/gen3/scripts.js b/data/mods/gen3/scripts.js new file mode 100644 index 0000000000000..b4478a2b83e6d --- /dev/null +++ b/data/mods/gen3/scripts.js @@ -0,0 +1,239 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + inherit: 'gen4', + gen: 3, + init() { + for (let i in this.data.Pokedex) { + delete this.data.Pokedex[i].abilities['H']; + } + let specialTypes = ['Fire', 'Water', 'Grass', 'Ice', 'Electric', 'Dark', 'Psychic', 'Dragon']; + let newCategory = ''; + for (let i in this.data.Movedex) { + if (!this.data.Movedex[i]) console.log(i); + if (this.data.Movedex[i].category === 'Status') continue; + newCategory = specialTypes.includes(this.data.Movedex[i].type) ? 'Special' : 'Physical'; + if (newCategory !== this.data.Movedex[i].category) { + this.modData('Movedex', i).category = newCategory; + } + } + }, + tryMoveHit(target, pokemon, move) { + this.setActiveMove(move, pokemon, target); + let naturalImmunity = false; + let accPass = true; + + let hitResult = this.singleEvent('PrepareHit', move, {}, target, pokemon, move); + if (!hitResult) { + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; + } + this.runEvent('PrepareHit', pokemon, target, move); + + if (!this.singleEvent('Try', move, null, pokemon, target, move)) { + return false; + } + + if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') { + if (move.target === 'all') { + hitResult = this.runEvent('TryHitField', target, pokemon, move); + } else { + hitResult = this.runEvent('TryHitSide', target, pokemon, move); + } + if (!hitResult) { + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; + } + return this.moveHit(target, pokemon, move); + } + + hitResult = this.runEvent('TryImmunity', target, pokemon, move); + if (!hitResult) { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon, target); + return false; + } + + if (move.ignoreImmunity === undefined) { + move.ignoreImmunity = (move.category === 'Status'); + } + + if ((!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type)) { + naturalImmunity = true; + } + + let boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; + + // calculate true accuracy + /**@type {number | true} */ + let accuracy = move.accuracy; + let boosts, boost; + if (accuracy !== true) { + if (!move.ignoreAccuracy) { + boosts = this.runEvent('ModifyBoost', pokemon, null, null, Object.assign({}, pokemon.boosts)); + boost = this.clampIntRange(boosts['accuracy'], -6, 6); + if (boost > 0) { + accuracy *= boostTable[boost]; + } else { + accuracy /= boostTable[-boost]; + } + } + if (!move.ignoreEvasion) { + boosts = this.runEvent('ModifyBoost', target, null, null, Object.assign({}, target.boosts)); + boost = this.clampIntRange(boosts['evasion'], -6, 6); + if (boost > 0) { + accuracy /= boostTable[boost]; + } else if (boost < 0) { + accuracy *= boostTable[-boost]; + } + } + } + if (move.ohko) { // bypasses accuracy modifiers + if (!target.isSemiInvulnerable()) { + accuracy = 30; + if (pokemon.level >= target.level && (move.ohko === true || !target.hasType(move.ohko))) { + accuracy += (pokemon.level - target.level); + } else { + this.add('-immune', target, '[ohko]'); + return false; + } + } + } else { + accuracy = this.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + } + if (move.alwaysHit) { + accuracy = true; // bypasses ohko accuracy modifiers + } else { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + } + if (accuracy !== true && !this.randomChance(accuracy, 100)) { + accPass = false; + } + + if (accPass) { + hitResult = this.runEvent('TryHit', target, pokemon, move); + if (!hitResult) { + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; + } else if (naturalImmunity) { + this.add('-immune', target); + return false; + } + } else { + if (naturalImmunity) { + this.add('-immune', target); + } else { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon, target); + } + return false; + } + + move.totalDamage = 0; + /** @type {number | undefined | false} */ + let damage = 0; + pokemon.lastDamage = 0; + if (move.multihit) { + let hits = move.multihit; + if (Array.isArray(hits)) { + // yes, it's hardcoded... meh + if (hits[0] === 2 && hits[1] === 5) { + hits = this.sample([2, 2, 2, 3, 3, 3, 4, 5]); + } else { + hits = this.random(hits[0], hits[1] + 1); + } + } + hits = Math.floor(hits); + let nullDamage = true; + /** @type {number | undefined | false} */ + let moveDamage; + // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep. + let isSleepUsable = move.sleepUsable || this.getMove(move.sourceEffect).sleepUsable; + let i; + for (i = 0; i < hits && target.hp && pokemon.hp; i++) { + if (pokemon.status === 'slp' && !isSleepUsable) break; + move.hit = i + 1; + + if (move.multiaccuracy && i > 0) { + accuracy = move.accuracy; + if (accuracy !== true) { + if (!move.ignoreAccuracy) { + boosts = this.runEvent('ModifyBoost', pokemon, null, null, Object.assign({}, pokemon.boosts)); + boost = this.clampIntRange(boosts['accuracy'], -6, 6); + if (boost > 0) { + accuracy *= boostTable[boost]; + } else { + accuracy /= boostTable[-boost]; + } + } + if (!move.ignoreEvasion) { + boosts = this.runEvent('ModifyBoost', target, null, null, Object.assign({}, target.boosts)); + boost = this.clampIntRange(boosts['evasion'], -6, 6); + if (boost > 0) { + accuracy /= boostTable[boost]; + } else if (boost < 0) { + accuracy *= boostTable[-boost]; + } + } + } + accuracy = this.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + if (!move.alwaysHit) { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + if (accuracy !== true && !this.randomChance(accuracy, 100)) break; + } + } + + moveDamage = this.moveHit(target, pokemon, move); + if (moveDamage === false) break; + if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false; + // Damage from each hit is individually counted for the + // purposes of Counter, Metal Burst, and Mirror Coat. + damage = (moveDamage || 0); + move.totalDamage += damage; + this.eachEvent('Update'); + } + if (i === 0) return false; + if (nullDamage) damage = false; + this.add('-hitcount', target, i); + } else { + damage = this.moveHit(target, pokemon, move); + move.totalDamage = damage; + } + + if (move.recoil && move.totalDamage) { + this.damage(this.calcRecoilDamage(move.totalDamage, move), pokemon, target, 'recoil'); + } + + if (target && pokemon !== target) target.gotAttacked(move, damage, pokemon); + + if (move.ohko) this.add('-ohko'); + + if (!damage && damage !== 0) return damage; + + this.eachEvent('Update'); + + if (target && !move.negateSecondary) { + this.singleEvent('AfterMoveSecondary', move, null, target, pokemon, move); + this.runEvent('AfterMoveSecondary', target, pokemon, move); + } + + return damage; + }, + + calcRecoilDamage(damageDealt, move) { + // @ts-ignore + return this.clampIntRange(Math.floor(damageDealt * move.recoil[0] / move.recoil[1]), 1); + }, +}; + +exports.BattleScripts = BattleScripts; diff --git a/mods/gen3/statuses.js b/data/mods/gen3/statuses.js similarity index 77% rename from mods/gen3/statuses.js rename to data/mods/gen3/statuses.js index 6a022da2c9c51..07ec9975e7de4 100644 --- a/mods/gen3/statuses.js +++ b/data/mods/gen3/statuses.js @@ -1,21 +1,25 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { slp: { + name: 'slp', + id: 'slp', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'slp'); // 1-4 turns this.effectData.time = this.random(2, 6); // Turns spent using Sleep Talk/Snore immediately before switching out while asleep this.effectData.skippedTime = 0; }, - onSwitchIn: function (target) { + onSwitchIn(target) { this.effectData.time += this.effectData.skippedTime; this.effectData.skippedTime = 0; }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (pokemon.hasAbility('earlybird')) { pokemon.statusData.time--; } @@ -35,7 +39,7 @@ exports.BattleStatuses = { }, frz: { inherit: true, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.thawsTarget || move.type === 'Fire' && move.category !== 'Status' && move.id !== 'hiddenpower' && move.id !== 'weatherball') { target.cureStatus(); } @@ -43,6 +47,8 @@ exports.BattleStatuses = { }, sandstorm: { inherit: true, - onModifySpD: function () { }, + onModifySpD() { }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/data/mods/gen4/abilities.js b/data/mods/gen4/abilities.js new file mode 100644 index 0000000000000..b45839fd999d3 --- /dev/null +++ b/data/mods/gen4/abilities.js @@ -0,0 +1,415 @@ +'use strict'; + +/**@type {{[k: string]: ModdedAbilityData}} */ +let BattleAbilities = { + "angerpoint": { + inherit: true, + desc: "If this Pokemon, or its substitute, is struck by a critical hit, its Attack is raised by 12 stages.", + shortDesc: "If this Pokemon or its substitute takes a critical hit, its Attack is raised 12 stages.", + onAfterSubDamage(damage, target, source, move) { + if (!target.hp) return; + if (move && move.effectType === 'Move' && move.crit) { + target.setBoost({atk: 6}); + this.add('-setboost', target, 'atk', 12, '[from] ability: Anger Point'); + } + }, + rating: 1.5, + }, + "blaze": { + desc: "When this Pokemon has 1/3 or less of its maximum HP, rounded down, its Fire-type attacks have their power multiplied by 1.5.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's Fire-type attacks have 1.5x power.", + onBasePowerPriority: 2, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) { + this.debug('Blaze boost'); + return this.chainModify(1.5); + } + }, + id: "blaze", + name: "Blaze", + rating: 2, + num: 66, + }, + "colorchange": { + inherit: true, + desc: "This Pokemon's type changes to match the type of the last move that hit it, unless that type is already one of its types. This effect applies after each hit from a multi-hit move.", + onAfterDamage(damage, target, source, move) { + if (!target.hp) return; + let type = move.type; + if (target.isActive && move.effectType === 'Move' && move.category !== 'Status' && type !== '???' && !target.hasType(type)) { + if (!target.setType(type)) return false; + this.add('-start', target, 'typechange', type, '[from] ability: Color Change'); + } + }, + onAfterMoveSecondary() {}, + }, + "effectspore": { + inherit: true, + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact'] && !source.status) { + let r = this.random(100); + if (r < 10) { + source.setStatus('slp', target); + } else if (r < 20) { + source.setStatus('par', target); + } else if (r < 30) { + source.setStatus('psn', target); + } + } + }, + }, + "flashfire": { + inherit: true, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Fire') { + if (target.status === 'frz') { + return; + } + if (!target.addVolatile('flashfire')) { + this.add('-immune', target, '[from] ability: Flash Fire'); + } + return null; + } + }, + effect: { + noCopy: true, // doesn't get copied by Baton Pass + onStart(target) { + this.add('-start', target, 'ability: Flash Fire'); + }, + onModifyDamagePhase1(atk, attacker, defender, move) { + if (move.type === 'Fire') { + this.debug('Flash Fire boost'); + return this.chainModify(1.5); + } + }, + onEnd(target) { + this.add('-end', target, 'ability: Flash Fire', '[silent]'); + }, + }, + }, + "flowergift": { + inherit: true, + desc: "If Sunny Day is active, the Attack and Special Defense of this Pokemon and its allies are multiplied by 1.5.", + shortDesc: "If Sunny Day is active, Attack and Sp. Def of this Pokemon and its allies are 1.5x.", + onAllyModifyAtk(atk) { + if (this.isWeather('sunnyday')) { + return this.chainModify(1.5); + } + }, + onAllyModifySpD(spd) { + if (this.isWeather('sunnyday')) { + return this.chainModify(1.5); + } + }, + }, + "forewarn": { + inherit: true, + onStart(pokemon) { + /**@type {Move[]} */ + let warnMoves = []; + let warnBp = 1; + for (const target of pokemon.side.foe.active) { + if (target.fainted) continue; + for (const moveSlot of target.moveSlots) { + let move = this.getMove(moveSlot.move); + let bp = move.basePower; + if (move.ohko) bp = 160; + if (move.id === 'counter' || move.id === 'metalburst' || move.id === 'mirrorcoat') bp = 120; + if (!bp && move.category !== 'Status') bp = 80; + if (bp > warnBp) { + warnMoves = [move]; + warnBp = bp; + } else if (bp === warnBp) { + warnMoves.push(move); + } + } + } + if (!warnMoves.length) return; + let warnMove = this.sample(warnMoves); + this.add('-activate', pokemon, 'ability: Forewarn', warnMove); + }, + }, + "insomnia": { + inherit: true, + rating: 2.5, + }, + "leafguard": { + inherit: true, + desc: "If Sunny Day is active, this Pokemon cannot gain a major status condition, but can use Rest normally.", + shortDesc: "If Sunny Day is active, this Pokemon cannot be statused, but Rest works normally.", + onSetStatus(status, target, source, effect) { + if (effect && effect.id === 'rest') { + return; + } else if (this.isWeather('sunnyday')) { + return false; + } + }, + }, + "lightningrod": { + inherit: true, + desc: "If this Pokemon is not the target of a single-target Electric-type move used by another Pokemon, this Pokemon redirects that move to itself.", + shortDesc: "This Pokemon draws single-target Electric moves to itself.", + onTryHit() {}, + rating: 0, + }, + "magicguard": { + desc: "This Pokemon can only be damaged by direct attacks. Curse and Substitute on use, Belly Drum, Pain Split, Struggle recoil, and confusion damage are considered direct damage. This Pokemon cannot lose its turn because of paralysis, and is unaffected by Toxic Spikes on switch-in.", + shortDesc: "This Pokemon can only be damaged by direct attacks, and can't be fully paralyzed.", + onDamage(damage, target, source, effect) { + if (effect.effectType !== 'Move') { + return false; + } + }, + onSetStatus(status, target, source, effect) { + if (effect && effect.id === 'toxicspikes') { + return false; + } + }, + id: "magicguard", + name: "Magic Guard", + rating: 4.5, + num: 98, + }, + "minus": { + desc: "If an active ally has the Plus Ability, this Pokemon's Special Attack is multiplied by 1.5.", + shortDesc: "If an active ally has the Plus Ability, this Pokemon's Sp. Atk is 1.5x.", + onModifySpA(spa, pokemon) { + let allyActive = pokemon.side.active; + if (allyActive.length === 1) { + return; + } + for (const ally of allyActive) { + if (ally && ally.position !== pokemon.position && !ally.fainted && ally.ability === 'plus') { + return spa * 1.5; + } + } + }, + id: "minus", + name: "Minus", + rating: 0, + num: 58, + }, + "naturalcure": { + inherit: true, + onCheckShow(pokemon) {}, + onSwitchOut(pokemon) { + if (!pokemon.status || pokemon.status === 'fnt') return; + + // Because statused/unstatused pokemon are shown after every switch + // in gen 3-4, Natural Cure's curing is always known to both players + + this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Natural Cure'); + pokemon.setStatus(''); + }, + }, + "normalize": { + inherit: true, + onModifyMove(move) { + if (move.id !== 'struggle') { + move.type = 'Normal'; + } + }, + }, + "overgrow": { + desc: "When this Pokemon has 1/3 or less of its maximum HP, rounded down, its Grass-type attacks have their power multiplied by 1.5.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's Grass-type attacks have 1.5x power.", + onBasePowerPriority: 2, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) { + this.debug('Overgrow boost'); + return this.chainModify(1.5); + } + }, + id: "overgrow", + name: "Overgrow", + rating: 2, + num: 65, + }, + "pickup": { + desc: "No competitive use.", + shortDesc: "No competitive use.", + id: "pickup", + name: "Pickup", + rating: 0, + num: 53, + }, + "plus": { + desc: "If an active ally has the Minus Ability, this Pokemon's Special Attack is multiplied by 1.5.", + shortDesc: "If an active ally has the Minus Ability, this Pokemon's Sp. Atk is 1.5x.", + onModifySpA(spa, pokemon) { + let allyActive = pokemon.side.active; + if (allyActive.length === 1) { + return; + } + for (const ally of allyActive) { + if (ally && ally.position !== pokemon.position && !ally.fainted && ally.ability === 'minus') { + return spa * 1.5; + } + } + }, + id: "plus", + name: "Plus", + rating: 0, + num: 57, + }, + "pressure": { + desc: "If this Pokemon is the target of another Pokemon's move, that move loses one additional PP.", + shortDesc: "If this Pokemon is the target of a move, that move loses one additional PP.", + onStart(pokemon) { + this.add('-ability', pokemon, 'Pressure'); + }, + onDeductPP(target, source) { + if (target === source) return; + return 1; + }, + id: "pressure", + name: "Pressure", + rating: 1.5, + num: 46, + }, + "serenegrace": { + inherit: true, + onModifyMove(move) { + if (move.secondaries) { + this.debug('doubling secondary chance'); + for (const secondary of move.secondaries) { + if (secondary.chance) secondary.chance *= 2; + } + } + }, + }, + "simple": { + shortDesc: "This Pokemon's stat stages are considered doubled during stat calculations.", + onModifyBoost(boosts) { + for (let key in boosts) { + // @ts-ignore + boosts[key] *= 2; + } + }, + id: "simple", + name: "Simple", + rating: 4, + num: 86, + }, + "stench": { + desc: "No competitive use.", + shortDesc: "No competitive use.", + id: "stench", + name: "Stench", + rating: 0, + num: 1, + }, + "stickyhold": { + inherit: true, + onTakeItem(item, pokemon, source) { + if (this.suppressingAttackEvents() && pokemon !== this.activePokemon) return; + if ((source && source !== pokemon) || (this.activeMove && this.activeMove.id === 'knockoff')) { + this.add('-activate', pokemon, 'ability: Sticky Hold'); + return false; + } + }, + }, + "stormdrain": { + inherit: true, + desc: "If this Pokemon is not the target of a single-target Water-type move used by another Pokemon, this Pokemon redirects that move to itself.", + shortDesc: "This Pokemon draws single-target Water moves to itself.", + onTryHit() {}, + rating: 0, + }, + "sturdy": { + inherit: true, + desc: "OHKO moves fail when used against this Pokemon.", + shortDesc: "OHKO moves fail when used against this Pokemon.", + onDamage() {}, + rating: 0, + }, + "swarm": { + desc: "When this Pokemon has 1/3 or less of its maximum HP, rounded down, its Bug-type attacks have their power multiplied by 1.5.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's Bug-type attacks have 1.5x power.", + onBasePowerPriority: 2, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) { + this.debug('Swarm boost'); + return this.chainModify(1.5); + } + }, + id: "swarm", + name: "Swarm", + rating: 2, + num: 68, + }, + "synchronize": { + inherit: true, + desc: "If another Pokemon burns, paralyzes, or poisons this Pokemon, that Pokemon receives the same major status condition. If another Pokemon badly poisons this Pokemon, that Pokemon becomes poisoned.", + onAfterSetStatus(status, target, source, effect) { + if (!source || source === target) return; + if (effect && effect.id === 'toxicspikes') return; + let id = status.id; + if (id === 'slp' || id === 'frz') return; + if (id === 'tox') id = 'psn'; + source.trySetStatus(id, target); + }, + }, + "thickfat": { + shortDesc: "The power of Fire- and Ice-type attacks against this Pokemon is halved.", + onBasePowerPriority: 1, + onSourceBasePower(basePower, attacker, defender, move) { + if (move.type === 'Ice' || move.type === 'Fire') { + return this.chainModify(0.5); + } + }, + id: "thickfat", + name: "Thick Fat", + rating: 3.5, + num: 47, + }, + "torrent": { + desc: "When this Pokemon has 1/3 or less of its maximum HP, rounded down, its Water-type attacks have their power multiplied by 1.5.", + shortDesc: "At 1/3 or less of its max HP, this Pokemon's Water-type attacks have 1.5x power.", + onBasePowerPriority: 2, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) { + this.debug('Torrent boost'); + return this.chainModify(1.5); + } + }, + id: "torrent", + name: "Torrent", + rating: 2, + num: 67, + }, + "trace": { + inherit: true, + onUpdate(pokemon) { + if (!pokemon.isStarted) return; + let target = pokemon.side.foe.randomActive(); + if (!target || target.fainted) return; + let ability = this.getAbility(target.ability); + let bannedAbilities = ['forecast', 'multitype', 'trace']; + if (bannedAbilities.includes(target.ability)) { + return; + } + if (pokemon.setAbility(ability)) { + this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); + } + }, + }, + "vitalspirit": { + inherit: true, + rating: 2.5, + }, + "wonderguard": { + inherit: true, + shortDesc: "This Pokemon is only damaged by Fire Fang, supereffective moves, indirect damage.", + onTryHit(target, source, move) { + if (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle' || move.id === 'firefang') return; + this.debug('Wonder Guard immunity: ' + move.id); + if (target.runEffectiveness(move) <= 0) { + this.add('-immune', target, '[from] ability: Wonder Guard'); + return null; + } + }, + }, +}; + +exports.BattleAbilities = BattleAbilities; diff --git a/mods/gen4/formats-data.js b/data/mods/gen4/formats-data.js similarity index 84% rename from mods/gen4/formats-data.js rename to data/mods/gen4/formats-data.js index 62516a6cf552e..08d8ce2d82856 100644 --- a/mods/gen4/formats-data.js +++ b/data/mods/gen4/formats-data.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { inherit: true, tier: "LC", @@ -33,7 +34,7 @@ exports.BattleFormatsData = { }, blastoise: { inherit: true, - randomBattleMoves: ["hydropump", "surf", "icebeam", "rapidspin", "roar", "rest", "sleeptalk"], + randomBattleMoves: ["surf", "icebeam", "rapidspin", "toxic", "roar", "rest", "sleeptalk"], tier: "UU", }, caterpie: { @@ -82,7 +83,7 @@ exports.BattleFormatsData = { tier: "LC", }, fearow: { - randomBattleMoves: ["drillpeck", "return", "uturn", "quickattack", "pursuit"], + randomBattleMoves: ["drillpeck", "doubleedge", "return", "uturn", "quickattack", "pursuit"], tier: "NU", }, ekans: { @@ -104,7 +105,6 @@ exports.BattleFormatsData = { }, pikachu: { inherit: true, - randomBattleMoves: ["nastyplot", "thunderbolt", "hiddenpowerice", "grassknot", "encore", "substitute", "focuspunch"], tier: "NU", }, raichu: { @@ -154,7 +154,7 @@ exports.BattleFormatsData = { tier: "LC", }, ninetales: { - randomBattleMoves: ["nastyplot", "fireblast", "energyball", "hiddenpowerrock", "hypnosis"], + randomBattleMoves: ["nastyplot", "fireblast", "flamethrower", "energyball", "hiddenpowerrock", "hypnosis"], tier: "NU", }, igglybuff: { @@ -172,13 +172,12 @@ exports.BattleFormatsData = { tier: "LC", }, golbat: { - randomBattleMoves: ["bravebird", "roost", "taunt", "uturn", "nastyplot", "gigadrain", "sludgebomb", "airslash", "heatwave"], tier: "NU", }, crobat: { inherit: true, - randomBattleMoves: ["bravebird", "roost", "superfang", "taunt", "nastyplot", "sludgebomb", "airslash", "uturn", "heatwave", "hiddenpowerfighting", "crosspoison", "pursuit"], - tier: "BL", + randomBattleMoves: ["bravebird", "roost", "superfang", "taunt", "nastyplot", "sludgebomb", "uturn", "heatwave"], + tier: "UUBL", }, oddish: { inherit: true, @@ -213,7 +212,6 @@ exports.BattleFormatsData = { tier: "NU", }, diglett: { - randomBattleMoves: ["earthquake", "rockslide", "substitute", "nightslash", "suckerpunch"], tier: "NU", }, dugtrio: { @@ -226,7 +224,7 @@ exports.BattleFormatsData = { tier: "LC", }, persian: { - randomBattleMoves: ["nastyplot", "hypnosis", "swift", "waterpulse", "fakeout", "uturn", "return", "taunt"], + randomBattleMoves: ["nastyplot", "hypnosis", "swift", "waterpulse", "fakeout", "uturn", "return", "taunt", "bite"], tier: "NU", }, psyduck: { @@ -264,7 +262,7 @@ exports.BattleFormatsData = { }, poliwrath: { inherit: true, - randomBattleMoves: ["substitute", "focuspunch", "bulkup", "brickbreak", "waterfall", "toxic", "rest", "sleeptalk", "icepunch"], + randomBattleMoves: ["substitute", "focuspunch", "bulkup", "brickbreak", "waterfall", "toxic", "rest", "sleeptalk", "icepunch", "encore"], tier: "NU", }, politoed: { @@ -275,7 +273,6 @@ exports.BattleFormatsData = { tier: "LC", }, kadabra: { - randomBattleMoves: ["calmmind", "psychic", "hiddenpowerfighting", "shadowball", "encore", "substitute"], tier: "NU", }, alakazam: { @@ -287,7 +284,6 @@ exports.BattleFormatsData = { tier: "LC", }, machoke: { - randomBattleMoves: ["closecombat", "payback", "icepunch", "thunderpunch", "bulletpunch"], tier: "NU", }, machamp: { @@ -304,7 +300,7 @@ exports.BattleFormatsData = { tier: "NFE", }, victreebel: { - randomBattleMoves: ["swordsdance", "sleeppowder", "suckerpunch", "leafblade", "sunnyday", "solarbeam", "hiddenpowerrock", "weatherball"], + randomBattleMoves: ["leafstorm", "sludgebomb", "sleeppowder", "suckerpunch", "leafblade", "sunnyday", "solarbeam", "weatherball"], tier: "NU", }, tentacool: { @@ -341,7 +337,7 @@ exports.BattleFormatsData = { tier: "UU", }, slowking: { - randomBattleMoves: ["surf", "icebeam", "psychic", "thunderwave", "toxic", "slackoff", "trickroom", "nastyplot", "trick"], + randomBattleMoves: ["surf", "icebeam", "psychic", "thunderwave", "toxic", "slackoff", "trickroom", "nastyplot"], tier: "NU", }, magnemite: { @@ -349,7 +345,6 @@ exports.BattleFormatsData = { }, magneton: { inherit: true, - randomBattleMoves: ["thunderbolt", "hiddenpowerfire", "chargebeam", "substitute", "flashcannon", "hiddenpowerice", "explosion"], tier: "NU", }, magnezone: { @@ -374,7 +369,7 @@ exports.BattleFormatsData = { tier: "LC", }, dewgong: { - randomBattleMoves: ["surf", "icebeam", "raindance", "rest", "toxic", "protect"], + randomBattleMoves: ["surf", "icebeam", "raindance", "rest", "toxic", "encore"], tier: "NU", }, grimer: { @@ -397,7 +392,6 @@ exports.BattleFormatsData = { tier: "LC", }, haunter: { - randomBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerground", "thunderbolt", "substitute", "painsplit", "hypnosis", "explosion"], tier: "NU", }, gengar: { @@ -425,7 +419,7 @@ exports.BattleFormatsData = { tier: "LC", }, kingler: { - randomBattleMoves: ["crabhammer", "return", "swordsdance", "agility", "rockslide", "xscissor", "superpower"], + randomBattleMoves: ["crabhammer", "return", "swordsdance", "agility", "xscissor", "superpower"], tier: "NU", }, voltorb: { @@ -467,7 +461,7 @@ exports.BattleFormatsData = { tier: "NU", }, hitmontop: { - randomBattleMoves: ["fakeout", "suckerpunch", "machpunch", "bulkup", "rapidspin", "closecombat", "stoneedge", "toxic"], + randomBattleMoves: ["suckerpunch", "machpunch", "bulkup", "rapidspin", "closecombat", "stoneedge", "toxic"], tier: "UU", }, lickitung: { @@ -475,7 +469,7 @@ exports.BattleFormatsData = { tier: "LC", }, lickilicky: { - randomBattleMoves: ["wish", "protect", "bodyslam", "return", "powerwhip", "earthquake", "aquatail", "fireblast", "swordsdance", "toxic", "healbell", "explosion"], + randomBattleMoves: ["wish", "protect", "bodyslam", "return", "earthquake", "aquatail", "healbell", "explosion"], tier: "NU", }, koffing: { @@ -493,7 +487,7 @@ exports.BattleFormatsData = { tier: "NFE", }, rhyperior: { - randomBattleMoves: ["stoneedge", "earthquake", "rockpolish", "megahorn", "stealthrock", "rockblast"], + randomBattleMoves: ["stoneedge", "earthquake", "rockpolish", "megahorn", "stealthrock", "icepunch"], tier: "UU", }, happiny: { @@ -501,7 +495,6 @@ exports.BattleFormatsData = { }, chansey: { inherit: true, - randomBattleMoves: ["wish", "softboiled", "protect", "toxic", "aromatherapy", "seismictoss", "thunderwave", "stealthrock"], tier: "UU", }, blissey: { @@ -510,7 +503,6 @@ exports.BattleFormatsData = { }, tangela: { inherit: true, - randomBattleMoves: ["sunnyday", "sleeppowder", "endeavor", "leafstorm", "solarbeam", "hiddenpowerfire"], tier: "NU", }, tangrowth: { @@ -573,7 +565,7 @@ exports.BattleFormatsData = { tier: "LC", }, jynx: { - randomBattleMoves: ["icebeam", "psychic", "focusblast", "trick", "shadowball", "nastyplot", "lovelykiss", "substitute"], + randomBattleMoves: ["icebeam", "psychic", "focusblast", "nastyplot", "lovelykiss", "substitute"], tier: "NU", }, elekid: { @@ -582,7 +574,6 @@ exports.BattleFormatsData = { }, electabuzz: { inherit: true, - randomBattleMoves: ["thunderbolt", "substitute", "hiddenpowerice", "hiddenpowergrass", "crosschop", "focusblast", "psychic"], tier: "NU", }, electivire: { @@ -609,7 +600,7 @@ exports.BattleFormatsData = { }, tauros: { inherit: true, - randomBattleMoves: ["doubleedge", "earthquake", "payback", "stoneedge", "pursuit", "substitute", "return"], + randomBattleMoves: ["doubleedge", "earthquake", "payback", "stoneedge", "pursuit", "return"], tier: "NU", }, magikarp: { @@ -617,7 +608,7 @@ exports.BattleFormatsData = { tier: "LC", }, gyarados: { - randomBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "rest", "sleeptalk", "stoneedge", "taunt", "icefang"], + randomBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "rest", "sleeptalk", "stoneedge", "icefang"], tier: "OU", }, lapras: { @@ -648,7 +639,7 @@ exports.BattleFormatsData = { espeon: { inherit: true, randomBattleMoves: ["psychic", "shadowball", "hiddenpowerground", "calmmind", "morningsun", "batonpass", "substitute"], - tier: "BL2", + tier: "NUBL", }, umbreon: { inherit: true, @@ -672,7 +663,7 @@ exports.BattleFormatsData = { }, porygonz: { randomBattleMoves: ["triattack", "thunderbolt", "icebeam", "darkpulse", "hiddenpowerfighting", "agility", "trick", "nastyplot"], - tier: "BL", + tier: "UUBL", }, omanyte: { tier: "LC", @@ -713,19 +704,18 @@ exports.BattleFormatsData = { }, moltres: { inherit: true, - randomBattleMoves: ["fireblast", "hiddenpowergrass", "airslash", "roost", "substitute", "toxic", "uturn"], + randomBattleMoves: ["fireblast", "flamethrower", "hiddenpowergrass", "airslash", "roost", "substitute", "toxic", "uturn"], tier: "UU", }, dratini: { tier: "LC", }, dragonair: { - randomBattleMoves: ["dragondance", "outrage", "fireblast", "extremespeed", "dracometeor", "aquatail"], tier: "NU", }, dragonite: { inherit: true, - randomBattleMoves: ["dragondance", "outrage", "firepunch", "extremespeed", "dragonclaw", "earthquake", "roost", "healbell", "superpower", "dracometeor"], + randomBattleMoves: ["dragondance", "outrage", "firepunch", "extremespeed", "dragonclaw", "earthquake", "roost", "fireblast", "superpower", "dracometeor"], tier: "OU", }, mewtwo: { @@ -746,7 +736,7 @@ exports.BattleFormatsData = { tier: "NFE", }, meganium: { - randomBattleMoves: ["reflect", "lightscreen", "synthesis", "aromatherapy", "leechseed", "toxic", "energyball", "seedbomb"], + randomBattleMoves: ["reflect", "lightscreen", "synthesis", "aromatherapy", "leechseed", "toxic", "energyball"], tier: "NU", }, cyndaquil: { @@ -758,7 +748,7 @@ exports.BattleFormatsData = { }, typhlosion: { inherit: true, - randomBattleMoves: ["sunnyday", "fireblast", "solarbeam", "hiddenpowerrock", "eruption", "focusblast"], + randomBattleMoves: ["fireblast", "hiddenpowergrass", "hiddenpowerrock", "eruption", "focusblast"], tier: "NU", }, totodile: { @@ -776,7 +766,7 @@ exports.BattleFormatsData = { tier: "LC", }, furret: { - randomBattleMoves: ["return", "uturn", "suckerpunch", "trick", "brickbreak", "shadowclaw"], + randomBattleMoves: ["return", "doubleedge", "aquatail", "firepunch", "uturn", "suckerpunch", "trick", "brickbreak", "shadowclaw"], tier: "NU", }, hoothoot: { @@ -792,7 +782,7 @@ exports.BattleFormatsData = { tier: "LC", }, ledian: { - randomBattleMoves: ["roost", "agility", "swordsdance", "batonpass", "encore"], + randomBattleMoves: ["roost", "reflect", "lightscreen", "toxic", "uturn", "encore"], tier: "NU", }, spinarak: { @@ -807,7 +797,7 @@ exports.BattleFormatsData = { tier: "LC", }, lanturn: { - randomBattleMoves: ["healbell", "confuseray", "icebeam", "surf", "discharge"], + randomBattleMoves: ["healbell", "confuseray", "icebeam", "surf", "discharge", "thunderwave", "toxic"], tier: "UU", }, togepi: { @@ -815,7 +805,6 @@ exports.BattleFormatsData = { tier: "LC", }, togetic: { - randomBattleMoves: ["nastyplot", "batonpass", "hiddenpowerflying", "roost"], tier: "NU", }, togekiss: { @@ -827,7 +816,7 @@ exports.BattleFormatsData = { tier: "LC", }, xatu: { - randomBattleMoves: ["reflect", "lightscreen", "wish", "uturn", "calmmind", "psychic", "heatwave", "roost"], + randomBattleMoves: ["wish", "uturn", "calmmind", "psychic", "heatwave", "grassknot", "hiddenpowerfighting", "batonpass", "trick", "roost"], tier: "NU", }, mareep: { @@ -865,7 +854,7 @@ exports.BattleFormatsData = { tier: "NFE", }, jumpluff: { - randomBattleMoves: ["leechseed", "substitute", "encore", "sleeppowder", "uturn", "stunspore"], + randomBattleMoves: ["leechseed", "substitute", "encore", "sleeppowder", "uturn", "stunspore", "toxic", "grassknot", "bounce"], tier: "NU", }, aipom: { @@ -885,12 +874,11 @@ exports.BattleFormatsData = { tier: "NU", }, yanma: { - randomBattleMoves: ["bugbuzz", "airslash", "hiddenpowerground", "hypnosis", "protect"], tier: "NU", }, yanmega: { randomBattleMoves: ["bugbuzz", "airslash", "hiddenpowerground", "uturn", "protect", "hiddenpowerfire"], - tier: "BL", + tier: "UUBL", }, wooper: { tier: "LC", @@ -901,16 +889,14 @@ exports.BattleFormatsData = { }, murkrow: { inherit: true, - randomBattleMoves: ["suckerpunch", "bravebird", "heatwave", "hiddenpowergrass"], tier: "NU", }, honchkrow: { randomBattleMoves: ["superpower", "suckerpunch", "bravebird", "heatwave", "pursuit"], - tier: "BL", + tier: "UUBL", }, misdreavus: { inherit: true, - randomBattleMoves: ["rest", "sleeptalk", "calmmind", "willowisp", "shadowball"], tier: "NU", }, mismagius: { @@ -923,7 +909,6 @@ exports.BattleFormatsData = { }, wynaut: { inherit: true, - randomBattleMoves: ["destinybond", "counter", "mirrorcoat", "encore"], tier: "Uber", }, wobbuffet: { @@ -940,7 +925,7 @@ exports.BattleFormatsData = { tier: "LC", }, forretress: { - randomBattleMoves: ["rapidspin", "toxicspikes", "spikes", "gyroball", "earthquake", "explosion"], + randomBattleMoves: ["rapidspin", "stealthrock", "toxicspikes", "spikes", "gyroball", "earthquake", "explosion"], tier: "OU", }, dunsparce: { @@ -949,8 +934,8 @@ exports.BattleFormatsData = { }, gligar: { inherit: true, - randomBattleMoves: ["substitute", "toxic", "roost", "taunt", "earthquake", "aerialace"], tier: "NU", + doublesTier: "LC", }, gliscor: { randomBattleMoves: ["swordsdance", "earthquake", "roost", "stoneedge", "taunt", "uturn", "toxic", "stealthrock"], @@ -961,12 +946,12 @@ exports.BattleFormatsData = { tier: "LC", }, granbull: { - randomBattleMoves: ["thunderwave", "bodyslam", "return", "crunch", "earthquake", "healbell", "toxic"], + randomBattleMoves: ["thunderwave", "bodyslam", "return", "crunch", "earthquake", "closecombat", "firepunch", "healbell", "toxic"], tier: "NU", }, qwilfish: { inherit: true, - randomBattleMoves: ["waterfall", "spikes", "swordsdance", "poisonjab", "explosion", "taunt", "destinybond"], + randomBattleMoves: ["waterfall", "spikes", "toxicspikes", "thunderwave", "poisonjab", "explosion", "destinybond"], tier: "UU", }, shuckle: { @@ -975,12 +960,11 @@ exports.BattleFormatsData = { tier: "NU", }, heracross: { - randomBattleMoves: ["closecombat", "megahorn", "stoneedge", "nightslash", "substitute"], - tier: "BL", + randomBattleMoves: ["closecombat", "megahorn", "stoneedge", "nightslash", "substitute", "swordsdance"], + tier: "UUBL", }, sneasel: { inherit: true, - randomBattleMoves: ["iceshard", "brickbreak", "lowkick", "pursuit", "punishment"], tier: "NU", }, weavile: { @@ -1009,7 +993,6 @@ exports.BattleFormatsData = { tier: "LC", }, piloswine: { - randomBattleMoves: ["earthquake", "iceshard", "stoneedge", "substitute", "icefang"], tier: "NU", }, mamoswine: { @@ -1068,7 +1051,7 @@ exports.BattleFormatsData = { }, smeargle: { inherit: true, - randomBattleMoves: ["spore", "spikes", "stealthrock", "uturn", "counter", "trick"], + randomBattleMoves: ["spore", "spikes", "stealthrock", "uturn", "counter"], tier: "OU", }, miltank: { @@ -1078,12 +1061,12 @@ exports.BattleFormatsData = { raikou: { inherit: true, randomBattleMoves: ["thunderbolt", "hiddenpowerice", "aurasphere", "calmmind", "shadowball"], - tier: "BL", + tier: "UUBL", }, entei: { inherit: true, randomBattleMoves: ["extremespeed", "flareblitz", "hiddenpowergrass", "stoneedge", "ironhead"], - tier: "BL2", + tier: "NUBL", }, suicune: { inherit: true, @@ -1099,7 +1082,7 @@ exports.BattleFormatsData = { }, tyranitar: { inherit: true, - randomBattleMoves: ["crunch", "stoneedge", "pursuit", "superpower", "earthquake", "dragondance", "icepunch", "fireblast", "icebeam"], + randomBattleMoves: ["crunch", "stoneedge", "pursuit", "superpower", "earthquake", "dragondance", "icepunch", "fireblast", "icebeam", "firepunch", "stealthrock"], tier: "OU", }, lugia: { @@ -1114,7 +1097,7 @@ exports.BattleFormatsData = { }, celebi: { inherit: true, - randomBattleMoves: ["thunderwave", "leafstorm", "hiddenpowerfire", "psychic", "uturn", "recover", "nastyplot", "grassknot", "earthpower", "substitute", "leechseed", "batonpass"], + randomBattleMoves: ["stealthrock", "thunderwave", "leafstorm", "hiddenpowerfire", "psychic", "uturn", "recover", "nastyplot", "energyball", "earthpower", "substitute", "leechseed", "batonpass"], tier: "OU", }, treecko: { @@ -1125,7 +1108,7 @@ exports.BattleFormatsData = { tier: "NFE", }, sceptile: { - randomBattleMoves: ["substitute", "leechseed", "grassknot", "hiddenpowerice", "hiddenpowerfire", "leafstorm", "earthquake", "focusblast"], + randomBattleMoves: ["substitute", "leechseed", "energyball", "hiddenpowerice", "hiddenpowerfire", "leafstorm", "earthquake", "focusblast"], tier: "UU", }, torchic: { @@ -1174,7 +1157,7 @@ exports.BattleFormatsData = { tier: "NFE", }, beautifly: { - randomBattleMoves: ["bugbuzz", "shadowball", "uturn", "hiddenpowerground", "stunspore"], + randomBattleMoves: ["bugbuzz", "psychic", "uturn", "hiddenpowerground", "stunspore"], tier: "NU", }, cascoon: { @@ -1192,7 +1175,7 @@ exports.BattleFormatsData = { tier: "NFE", }, ludicolo: { - randomBattleMoves: ["raindance", "surf", "energyball", "icebeam", "grassknot", "substitute", "leechseed"], + randomBattleMoves: ["raindance", "surf", "energyball", "icebeam", "substitute", "leechseed"], tier: "UU", }, seedot: { @@ -1230,12 +1213,12 @@ exports.BattleFormatsData = { tier: "NFE", }, gardevoir: { - randomBattleMoves: ["psychic", "thunderbolt", "focusblast", "trick", "shadowball", "calmmind", "taunt"], + randomBattleMoves: ["psychic", "thunderbolt", "focusblast", "willowisp", "shadowball", "calmmind", "taunt"], tier: "NU", }, gallade: { randomBattleMoves: ["swordsdance", "closecombat", "psychocut", "stoneedge", "icepunch", "shadowsneak", "nightslash", "trick"], - tier: "BL", + tier: "UUBL", }, surskit: { inherit: true, @@ -1286,7 +1269,7 @@ exports.BattleFormatsData = { }, exploud: { inherit: true, - randomBattleMoves: ["return", "crunch", "earthquake", "icebeam", "surf"], + randomBattleMoves: ["return", "crunch", "earthquake", "icebeam", "surf", "fireblast"], tier: "NU", }, makuhita: { @@ -1374,7 +1357,6 @@ exports.BattleFormatsData = { }, roselia: { inherit: true, - randomBattleMoves: ["spikes", "toxicspikes", "sleeppowder", "gigadrain", "stunspore", "rest"], tier: "NU", }, roserade: { @@ -1386,7 +1368,7 @@ exports.BattleFormatsData = { tier: "LC", }, swalot: { - randomBattleMoves: ["sludgebomb", "icebeam", "painsplit", "yawn", "encore", "toxic"], + randomBattleMoves: ["sludgebomb", "icebeam", "earthquake", "explosion", "yawn", "encore", "toxic"], tier: "NU", }, carvanha: { @@ -1422,12 +1404,12 @@ exports.BattleFormatsData = { tier: "LC", }, grumpig: { - randomBattleMoves: ["calmmind", "psychic", "focusblast", "shadowball", "thunderwave", "toxic", "healbell", "reflect", "lightscreen"], + randomBattleMoves: ["calmmind", "psychic", "focusblast", "shadowball", "thunderwave", "toxic", "healbell"], tier: "NU", }, spinda: { inherit: true, - randomBattleMoves: ["substitute", "bodyslam", "teeterdance", "rockslide"], + randomBattleMoves: ["substitute", "bodyslam", "teeterdance", "encore", "hypnosis", "seismictoss", "toxic"], tier: "NU", }, trapinch: { @@ -1447,7 +1429,7 @@ exports.BattleFormatsData = { }, cacturne: { inherit: true, - randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "seedbomb", "focuspunch"], + randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "seedbomb", "focuspunch", "lowkick", "encore", "spikes"], tier: "NU", }, swablu: { @@ -1541,7 +1523,7 @@ exports.BattleFormatsData = { battleOnly: true, }, kecleon: { - randomBattleMoves: ["stealthrock", "recover", "return", "aquatail", "thunderwave"], + randomBattleMoves: ["stealthrock", "recover", "return", "aquatail", "thunderwave", "toxic"], tier: "NU", }, shuppet: { @@ -1550,7 +1532,7 @@ exports.BattleFormatsData = { }, banette: { inherit: true, - randomBattleMoves: ["shadowsneak", "destinybond", "taunt", "shadowclaw", "willowisp"], + randomBattleMoves: ["shadowsneak", "destinybond", "taunt", "shadowclaw", "willowisp", "thunderwave", "hiddenpowerfighting"], tier: "NU", }, duskull: { @@ -1558,7 +1540,6 @@ exports.BattleFormatsData = { tier: "LC", }, dusclops: { - randomBattleMoves: ["willowisp", "sleeptalk", "rest", "painsplit", "seismictoss", "shadowpunch"], tier: "NU", }, dusknoir: { @@ -1592,8 +1573,8 @@ exports.BattleFormatsData = { tier: "NU", }, froslass: { - randomBattleMoves: ["icebeam", "spikes", "destinybond", "shadowball", "taunt", "trick"], - tier: "BL", + randomBattleMoves: ["icebeam", "spikes", "destinybond", "shadowball", "taunt"], + tier: "UUBL", }, spheal: { inherit: true, @@ -1607,7 +1588,6 @@ exports.BattleFormatsData = { tier: "NU", }, clamperl: { - randomBattleMoves: ["icebeam", "surf", "hiddenpowergrass", "brine"], tier: "NU", }, huntail: { @@ -1631,7 +1611,6 @@ exports.BattleFormatsData = { tier: "LC", }, shelgon: { - randomBattleMoves: ["outrage", "brickbreak", "dragonclaw", "dragondance"], tier: "NU", }, salamence: { @@ -1644,7 +1623,6 @@ exports.BattleFormatsData = { }, metang: { inherit: true, - randomBattleMoves: ["stealthrock", "meteormash", "explosion", "toxic", "lightscreen", "reflect"], tier: "NU", }, metagross: { @@ -1669,8 +1647,8 @@ exports.BattleFormatsData = { }, latias: { inherit: true, - randomBattleMoves: ["dragonpulse", "psychic", "surf", "roost", "calmmind", "refresh", "reflect", "lightscreen", "healingwish"], - tier: "Uber", + randomBattleMoves: ["dragonpulse", "psychic", "surf", "roost", "calmmind", "refresh"], + tier: "OU", }, latios: { inherit: true, @@ -1689,12 +1667,12 @@ exports.BattleFormatsData = { }, rayquaza: { inherit: true, - randomBattleMoves: ["outrage", "extremespeed", "dragondance", "swordsdance", "overheat", "dragonclaw"], + randomBattleMoves: ["outrage", "extremespeed", "earthquake", "dragondance", "swordsdance", "overheat", "dragonclaw"], tier: "Uber", }, jirachi: { inherit: true, - randomBattleMoves: ["ironhead", "firepunch", "substitute", "bodyslam", "wish", "uturn", "trick", "calmmind", "psychic", "thunderbolt", "icepunch", "flashcannon"], + randomBattleMoves: ["stealthrock", "ironhead", "firepunch", "substitute", "bodyslam", "wish", "uturn", "trick", "calmmind", "psychic", "thunderbolt", "icepunch", "flashcannon"], tier: "OU", }, deoxys: { @@ -1732,11 +1710,10 @@ exports.BattleFormatsData = { tier: "LC", }, monferno: { - randomBattleMoves: ["stealthrock", "endeavor", "fireblast", "taunt", "vacuumwave"], tier: "NU", }, infernape: { - randomBattleMoves: ["stealthrock", "fireblast", "closecombat", "uturn", "grassknot", "stoneedge", "machpunch", "fakeout", "nastyplot", "hiddenpowerice", "flareblitz", "vacuumwave"], + randomBattleMoves: ["stealthrock", "fireblast", "closecombat", "uturn", "grassknot", "stoneedge", "machpunch", "focusblast", "swordsdance", "nastyplot", "hiddenpowerice", "flareblitz", "vacuumwave"], tier: "OU", }, piplup: { @@ -1758,14 +1735,14 @@ exports.BattleFormatsData = { }, staraptor: { randomBattleMoves: ["bravebird", "closecombat", "return", "uturn", "pursuit", "quickattack", "substitute", "roost", "doubleedge"], - tier: "BL", + tier: "UUBL", }, bidoof: { inherit: true, tier: "LC", }, bibarel: { - randomBattleMoves: ["return", "waterfall", "quickattack", "curse", "rest"], + randomBattleMoves: ["waterfall", "quickattack", "curse", "rest"], tier: "NU", }, kricketot: { @@ -1865,7 +1842,7 @@ exports.BattleFormatsData = { tier: "LC", }, lopunny: { - randomBattleMoves: ["encore", "return", "switcheroo", "healbell", "thunderwave", "batonpass", "substitute"], + randomBattleMoves: ["encore", "return", "healingwish", "toxic", "thunderwave", "batonpass", "substitute"], tier: "NU", }, glameow: { @@ -1891,22 +1868,21 @@ exports.BattleFormatsData = { }, chatot: { inherit: true, - randomBattleMoves: ["nastyplot", "hypervoice", "heatwave", "hiddenpowergrass", "substitute", "chatter"], + randomBattleMoves: ["nastyplot", "hypervoice", "heatwave", "hiddenpowergrass", "encore", "uturn"], tier: "NU", }, spiritomb: { - randomBattleMoves: ["calmmind", "darkpulse", "rest", "sleeptalk", "shadowball", "willowisp"], + randomBattleMoves: ["calmmind", "darkpulse", "rest", "sleeptalk", "hiddenpowerfighting", "willowisp"], tier: "UU", }, gible: { tier: "LC", }, gabite: { - randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "stoneedge"], tier: "NU", }, garchomp: { - randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "stoneedge", "firefang", "swordsdance", "substitute"], + randomBattleMoves: ["stealthrock", "outrage", "dragonclaw", "earthquake", "stoneedge", "firefang", "swordsdance", "substitute"], tier: "Uber", }, riolu: { @@ -1915,12 +1891,11 @@ exports.BattleFormatsData = { }, lucario: { inherit: true, - randomBattleMoves: ["swordsdance", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "nastyplot", "aurasphere", "shadowball", "vacuumwave"], + randomBattleMoves: ["swordsdance", "closecombat", "crunch", "extremespeed", "icepunch", "stoneedge", "agility"], tier: "OU", }, hippopotas: { - randomBattleMoves: ["earthquake", "slackoff", "roar", "stealthrock", "protect", "toxic", "yawn"], - tier: "BL2", + tier: "NUBL", }, hippowdon: { randomBattleMoves: ["earthquake", "slackoff", "roar", "stealthrock", "toxic", "icefang", "stoneedge"], @@ -1952,15 +1927,14 @@ exports.BattleFormatsData = { tier: "NU", }, snover: { - randomBattleMoves: ["blizzard", "iceshard", "protect", "leechseed", "substitute", "swordsdance", "seedbomb"], - tier: "BL2", + tier: "NUBL", }, abomasnow: { - randomBattleMoves: ["blizzard", "iceshard", "woodhammer", "leechseed", "substitute", "earthquake", "hiddenpowerfire", "grassknot"], - tier: "BL", + randomBattleMoves: ["blizzard", "iceshard", "woodhammer", "leechseed", "substitute", "earthquake", "hiddenpowerfire", "energyball"], + tier: "UUBL", }, rotom: { - randomBattleMoves: ["thunderbolt", "shadowball", "substitute", "painsplit", "hiddenpowerfighting", "willowisp", "trick"], + randomBattleMoves: ["thunderbolt", "shadowball", "substitute", "painsplit", "hiddenpowerfighting", "hiddenpowerice", "willowisp", "trick"], tier: "UU", }, rotomheat: { @@ -1968,19 +1942,19 @@ exports.BattleFormatsData = { tier: "OU", }, rotomwash: { - randomBattleMoves: ["thunderbolt", "substitute", "painsplit", "shadowball", "hiddenpowerice", "willowisp", "trick", "hydropump"], + randomBattleMoves: ["thunderbolt", "substitute", "painsplit", "shadowball", "hiddenpowerice", "willowisp", "trick", "hydropump", "rest", "sleeptalk"], tier: "OU", }, rotomfrost: { - randomBattleMoves: ["thunderbolt", "hiddenpowerfighting", "shadowball", "trick", "blizzard", "substitute", "painsplit"], + randomBattleMoves: ["thunderbolt", "shadowball", "trick", "blizzard", "substitute", "painsplit", "willowisp", "rest", "sleeptalk"], tier: "OU", }, rotomfan: { - randomBattleMoves: ["discharge", "substitute", "painsplit", "rest", "sleeptalk", "airslash", "willowisp", "hiddenpowerice"], + randomBattleMoves: ["discharge", "shadowball", "substitute", "painsplit", "rest", "sleeptalk", "airslash", "willowisp", "hiddenpowerice"], tier: "OU", }, rotommow: { - randomBattleMoves: ["thunderbolt", "discharge", "substitute", "painsplit", "hiddenpowerice", "willowisp", "shadowball", "trick", "leafstorm"], + randomBattleMoves: ["thunderbolt", "hiddenpowerice", "willowisp", "shadowball", "trick", "leafstorm"], tier: "OU", }, uxie: { @@ -1990,17 +1964,17 @@ exports.BattleFormatsData = { }, mesprit: { inherit: true, - randomBattleMoves: ["hiddenpowerfire", "thunderbolt", "icebeam", "psychic", "thunderwave", "uturn", "stealthrock", "trick"], + randomBattleMoves: ["hiddenpowerfire", "thunderbolt", "icebeam", "psychic", "calmmind", "substitute", "thunderwave", "uturn", "stealthrock"], tier: "UU", }, azelf: { inherit: true, - randomBattleMoves: ["stealthrock", "fireblast", "psychic", "explosion", "taunt", "uturn", "nastyplot", "flamethrower", "hiddenpowerfighting"], + randomBattleMoves: ["stealthrock", "fireblast", "psychic", "explosion", "uturn", "nastyplot", "flamethrower", "hiddenpowerfighting", "thunderbolt"], tier: "OU", }, dialga: { inherit: true, - randomBattleMoves: ["stealthrock", "dracometeor", "toxic", "thunderbolt", "outrage", "fireblast", "aurasphere", "dragonclaw", "bulkup", "earthquake"], + randomBattleMoves: ["stealthrock", "dracometeor", "toxic", "thunderbolt", "outrage", "fireblast", "aurasphere", "dragonclaw", "bulkup", "earthquake", "rest", "sleeptalk"], tier: "Uber", }, palkia: { @@ -2031,8 +2005,8 @@ exports.BattleFormatsData = { }, cresselia: { inherit: true, - randomBattleMoves: ["moonlight", "psychic", "hiddenpowerfire", "icebeam", "thunderwave", "lunardance", "calmmind", "reflect", "lightscreen"], - tier: "BL", + randomBattleMoves: ["moonlight", "psychic", "hiddenpowerfire", "icebeam", "thunderwave", "toxic", "substitute", "calmmind", "reflect", "lightscreen"], + tier: "UUBL", }, phione: { inherit: true, @@ -2041,12 +2015,12 @@ exports.BattleFormatsData = { }, manaphy: { inherit: true, - randomBattleMoves: ["tailglow", "surf", "icebeam", "grassknot"], + randomBattleMoves: ["tailglow", "surf", "icebeam", "energyball"], tier: "Uber", }, darkrai: { inherit: true, - randomBattleMoves: ["darkvoid", "darkpulse", "focusblast", "nastyplot", "substitute", "trick"], + randomBattleMoves: ["darkvoid", "darkpulse", "focusblast", "nastyplot", "substitute"], tier: "Uber", }, shaymin: { @@ -2061,7 +2035,7 @@ exports.BattleFormatsData = { }, arceus: { inherit: true, - randomBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover", "overheat"], + randomBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover"], tier: "Uber", }, arceusbug: { @@ -2085,7 +2059,7 @@ exports.BattleFormatsData = { requiredItem: "Zap Plate", }, arceusfighting: { - randomBattleMoves: ["calmmind", "judgment", "icebeam", "darkpulse", "recover", "toxic"], + randomBattleMoves: ["calmmind", "judgment", "icebeam", "darkpulse", "recover"], eventOnly: true, requiredItem: "Fist Plate", }, @@ -2095,22 +2069,22 @@ exports.BattleFormatsData = { requiredItem: "Flame Plate", }, arceusflying: { - randomBattleMoves: ["calmmind", "judgment", "substitute", "hiddenpowerfighting", "recover"], + randomBattleMoves: ["calmmind", "judgment", "refresh", "earthpower", "recover"], eventOnly: true, requiredItem: "Sky Plate", }, arceusghost: { - randomBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "shadowforce", "recover", "brickbreak", "judgment", "flamethrower", "willowisp", "roar"], + randomBattleMoves: ["calmmind", "recover", "focusblast", "judgment", "flamethrower", "willowisp", "roar"], eventOnly: true, requiredItem: "Spooky Plate", }, arceusgrass: { - randomBattleMoves: ["calmmind", "icebeam", "judgment", "earthpower", "flamethrower", "recover", "thunderwave"], + randomBattleMoves: ["calmmind", "icebeam", "judgment", "earthpower", "recover", "thunderwave"], eventOnly: true, requiredItem: "Meadow Plate", }, arceusground: { - randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "calmmind", "judgment", "icebeam"], + randomBattleMoves: ["calmmind", "judgment", "icebeam", "thunderbolt", "recover"], eventOnly: true, requiredItem: "Earth Plate", }, @@ -2120,7 +2094,7 @@ exports.BattleFormatsData = { requiredItem: "Icicle Plate", }, arceuspoison: { - randomBattleMoves: ["calmmind", "judgment", "focusblast", "recover", "willowisp", "icebeam", "roar"], + randomBattleMoves: ["calmmind", "judgment", "earthpower", "recover", "willowisp", "roar"], eventOnly: true, requiredItem: "Toxic Plate", }, @@ -2130,7 +2104,7 @@ exports.BattleFormatsData = { requiredItem: "Mind Plate", }, arceusrock: { - randomBattleMoves: ["swordsdance", "stoneedge", "earthquake", "extremespeed", "recover"], + randomBattleMoves: ["calmmind", "judgment", "earthpower", "willowisp", "recover"], eventOnly: true, requiredItem: "Stone Plate", }, @@ -2140,8 +2114,10 @@ exports.BattleFormatsData = { requiredItem: "Iron Plate", }, arceuswater: { - randomBattleMoves: ["recover", "calmmind", "judgment", "icebeam", "substitute"], + randomBattleMoves: ["recover", "calmmind", "judgment", "icebeam", "thunderbolt", "willowisp", "refresh"], eventOnly: true, requiredItem: "Splash Plate", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/mods/gen4/items.js b/data/mods/gen4/items.js new file mode 100644 index 0000000000000..3776ef6fe83e3 --- /dev/null +++ b/data/mods/gen4/items.js @@ -0,0 +1,290 @@ +'use strict'; + +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { + "adamantorb": { + inherit: true, + onBasePower(basePower, user, target, move) { + if (move && user.template.species === 'Dialga' && (move.type === 'Steel' || move.type === 'Dragon')) { + return this.chainModify(1.2); + } + }, + }, + "bigroot": { + inherit: true, + onTryHeal(damage, target, source, effect) { + /**@type {{[k: string]: number}} */ + let heals = {drain: 1, leechseed: 1, ingrain: 1, aquaring: 1}; + if (heals[effect.id]) { + return Math.floor(damage * 1.3); + } + }, + }, + "choiceband": { + inherit: true, + onStart() { }, + }, + "choicescarf": { + inherit: true, + onStart() { }, + }, + "choicespecs": { + inherit: true, + onStart() { }, + }, + "chopleberry": { + inherit: true, + onSourceModifyDamage(damage, source, target, move) { + if (move.causedCrashDamage) return damage; + if (move.type === 'Fighting' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'])) { + if (target.eatItem()) { + this.debug('-50% reduction'); + this.add('-enditem', target, this.effect, '[weaken]'); + return this.chainModify(0.5); + } + } + }, + }, + "custapberry": { + inherit: true, + onModifyPriority() {}, + onBeforeTurn(pokemon) { + if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.ability === 'gluttony')) { + let action = this.willMove(pokemon); + if (!action) return; + this.insertQueue({ + choice: 'event', + event: 'Custap', + priority: action.priority + 0.1, + pokemon: action.pokemon, + move: action.move, + targetLoc: action.targetLoc, + }); + } + }, + onCustap(pokemon) { + let action = this.willMove(pokemon); + this.debug('custap action: ' + action); + if (action && pokemon.eatItem()) { + this.cancelAction(pokemon); + this.add('-message', "Custap Berry activated."); + this.runAction(action); + } + }, + }, + "deepseascale": { + inherit: true, + onModifySpD(spd, pokemon) { + if (pokemon.template.species === 'Clamperl') { + return this.chainModify(2); + } + }, + }, + "deepseatooth": { + inherit: true, + onModifySpA(spa, pokemon) { + if (pokemon.template.species === 'Clamperl') { + return this.chainModify(2); + } + }, + }, + "focussash": { + inherit: true, + desc: "If holder's HP is full, survives all hits of one attack with at least 1 HP. Single use.", + onDamage() { }, + onTryHit(target, source, move) { + if (target !== source && target.hp === target.maxhp) { + target.addVolatile('focussash'); + } + }, + effect: { + duration: 1, + onDamage(damage, target, source, effect) { + if (effect && effect.effectType === 'Move' && damage >= target.hp) { + this.effectData.activated = true; + return target.hp - 1; + } + }, + onAfterMoveSecondary(target) { + if (this.effectData.activated) target.useItem(); + target.removeVolatile('focussash'); + }, + }, + }, + "griseousorb": { + inherit: true, + desc: "Can only be held by Giratina. Its Ghost- & Dragon-type attacks have 1.2x power.", + onBasePower(basePower, user, target, move) { + if (user.template.num === 487 && (move.type === 'Ghost' || move.type === 'Dragon')) { + return this.chainModify(1.2); + } + }, + }, + "ironball": { + inherit: true, + onEffectiveness() {}, + desc: "Holder's Speed is halved and it becomes grounded.", + }, + "jabocaberry": { + inherit: true, + onAfterDamage() {}, + onAfterMoveSecondary(target, source, move) { + if (source && source !== target && move && move.category === 'Physical') { + if (target.eatItem()) { + this.damage(source.maxhp / 8, source, target, null, true); + } + } + }, + }, + "kingsrock": { + inherit: true, + onModifyMove(move) { + let affectedByKingsRock = ['aerialace', 'aeroblast', 'aircutter', 'airslash', 'aquajet', 'aquatail', 'armthrust', 'assurance', 'attackorder', 'aurasphere', 'avalanche', 'barrage', 'beatup', 'bide', 'bind', 'blastburn', 'bonerush', 'bonemerang', 'bounce', 'bravebird', 'brickbreak', 'brine', 'bugbite', 'bulletpunch', 'bulletseed', 'chargebeam', 'clamp', 'closecombat', 'cometpunch', 'crabhammer', 'crosschop', 'crosspoison', 'crushgrip', 'cut', 'darkpulse', 'dig', 'discharge', 'dive', 'doublehit', 'doublekick', 'doubleslap', 'doubleedge', 'dracometeor', 'dragonbreath', 'dragonclaw', 'dragonpulse', 'dragonrage', 'dragonrush', 'drainpunch', 'drillpeck', 'earthpower', 'earthquake', 'eggbomb', 'endeavor', 'eruption', 'explosion', 'extremespeed', 'falseswipe', 'feintattack', 'firefang', 'firespin', 'flail', 'flashcannon', 'fly', 'forcepalm', 'frenzyplant', 'frustration', 'furyattack', 'furycutter', 'furyswipes', 'gigaimpact', 'grassknot', 'gunkshot', 'gust', 'gyroball', 'hammerarm', 'headsmash', 'hiddenpower', 'highjumpkick', 'hornattack', 'hydrocannon', 'hydropump', 'hyperbeam', 'iceball', 'icefang', 'iceshard', 'iciclespear', 'ironhead', 'judgment', 'jumpkick', 'karatechop', 'lastresort', 'lavaplume', 'leafblade', 'leafstorm', 'lowkick', 'machpunch', 'magicalleaf', 'magmastorm', 'magnetbomb', 'magnitude', 'megakick', 'megapunch', 'megahorn', 'meteormash', 'mirrorshot', 'mudbomb', 'mudshot', 'muddywater', 'nightshade', 'nightslash', 'ominouswind', 'outrage', 'overheat', 'payday', 'payback', 'peck', 'petaldance', 'pinmissile', 'pluck', 'poisonjab', 'poisontail', 'pound', 'powergem', 'powerwhip', 'psychoboost', 'psychocut', 'psywave', 'punishment', 'quickattack', 'rage', 'rapidspin', 'razorleaf', 'razorwind', 'return', 'revenge', 'reversal', 'roaroftime', 'rockblast', 'rockclimb', 'rockthrow', 'rockwrecker', 'rollingkick', 'rollout', 'sandtomb', 'scratch', 'seedbomb', 'seedflare', 'seismictoss', 'selfdestruct', 'shadowclaw', 'shadowforce', 'shadowpunch', 'shadowsneak', 'shockwave', 'signalbeam', 'silverwind', 'skullbash', 'skyattack', 'skyuppercut', 'slam', 'slash', 'snore', 'solarbeam', 'sonicboom', 'spacialrend', 'spikecannon', 'spitup', 'steelwing', 'stoneedge', 'strength', 'struggle', 'submission', 'suckerpunch', 'surf', 'swift', 'tackle', 'takedown', 'thrash', 'thunderfang', 'triplekick', 'trumpcard', 'twister', 'uturn', 'uproar', 'vacuumwave', 'vicegrip', 'vinewhip', 'vitalthrow', 'volttackle', 'wakeupslap', 'watergun', 'waterpulse', 'waterfall', 'weatherball', 'whirlpool', 'wingattack', 'woodhammer', 'wrap', 'wringout', 'xscissor', 'zenheadbutt']; + if (affectedByKingsRock.includes(move.id)) { + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 10, + volatileStatus: 'flinch', + }); + } + }, + }, + "lifeorb": { + inherit: true, + onModifyDamage() {}, + onAfterMoveSecondarySelf() {}, + onBasePower(basePower, user, target) { + if (!target.volatiles['substitute']) { + user.addVolatile('lifeorb'); + } + return basePower; + }, + onModifyDamagePhase2(damage, source, target, move) { + return damage * 1.3; + }, + effect: { + duration: 1, + onAfterMoveSecondarySelf(source, target, move) { + if (move && move.effectType === 'Move' && source && source.volatiles['lifeorb']) { + this.damage(source.maxhp / 10, source, source, this.getItem('lifeorb')); + source.removeVolatile('lifeorb'); + } + }, + }, + }, + "lightball": { + inherit: true, + onModifyAtk(atk, pokemon) { + if (pokemon.template.species === 'Pikachu') { + return this.chainModify(2); + } + }, + onModifySpA(spa, pokemon) { + if (pokemon.template.species === 'Pikachu') { + return this.chainModify(2); + } + }, + }, + "luckypunch": { + inherit: true, + onModifyCritRatio(critRatio, user) { + if (user.template.species === 'Chansey') { + return critRatio + 2; + } + }, + }, + "lustrousorb": { + inherit: true, + onBasePower(basePower, user, target, move) { + if (move && user.template.species === 'Palkia' && (move.type === 'Water' || move.type === 'Dragon')) { + return this.chainModify(1.2); + } + }, + }, + "mentalherb": { + inherit: true, + desc: "Holder is cured if it is infatuated. Single use.", + fling: { + basePower: 10, + effect(pokemon) { + if (pokemon.removeVolatile('attract')) { + this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); + } + }, + }, + onUpdate(pokemon) { + if (pokemon.volatiles.attract && pokemon.useItem()) { + pokemon.removeVolatile('attract'); + this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); + } + }, + }, + "metronome": { + inherit: true, + desc: "Damage of moves used on consecutive turns is increased. Max 2x after 10 turns.", + effect: { + onStart(pokemon) { + this.effectData.numConsecutive = 0; + this.effectData.lastMove = ''; + }, + onTryMovePriority: -2, + onTryMove(pokemon, target, move) { + if (!pokemon.hasItem('metronome')) { + pokemon.removeVolatile('metronome'); + return; + } + if (this.effectData.lastMove === move.id) { + this.effectData.numConsecutive++; + } else { + this.effectData.numConsecutive = 0; + } + this.effectData.lastMove = move.id; + }, + onModifyDamagePhase2(damage, source, target, move) { + return damage * (1 + (this.effectData.numConsecutive / 10)); + }, + }, + }, + "razorfang": { + inherit: true, + onModifyMove(move) { + let affectedByRazorFang = ['aerialace', 'aeroblast', 'aircutter', 'airslash', 'aquajet', 'aquatail', 'armthrust', 'assurance', 'attackorder', 'aurasphere', 'avalanche', 'barrage', 'beatup', 'bide', 'bind', 'blastburn', 'bonerush', 'bonemerang', 'bounce', 'bravebird', 'brickbreak', 'brine', 'bugbite', 'bulletpunch', 'bulletseed', 'chargebeam', 'clamp', 'closecombat', 'cometpunch', 'crabhammer', 'crosschop', 'crosspoison', 'crushgrip', 'cut', 'darkpulse', 'dig', 'discharge', 'dive', 'doublehit', 'doublekick', 'doubleslap', 'doubleedge', 'dracometeor', 'dragonbreath', 'dragonclaw', 'dragonpulse', 'dragonrage', 'dragonrush', 'drainpunch', 'drillpeck', 'earthpower', 'earthquake', 'eggbomb', 'endeavor', 'eruption', 'explosion', 'extremespeed', 'falseswipe', 'feintattack', 'firefang', 'firespin', 'flail', 'flashcannon', 'fly', 'forcepalm', 'frenzyplant', 'frustration', 'furyattack', 'furycutter', 'furyswipes', 'gigaimpact', 'grassknot', 'gunkshot', 'gust', 'gyroball', 'hammerarm', 'headsmash', 'hiddenpower', 'highjumpkick', 'hornattack', 'hydrocannon', 'hydropump', 'hyperbeam', 'iceball', 'icefang', 'iceshard', 'iciclespear', 'ironhead', 'judgment', 'jumpkick', 'karatechop', 'lastresort', 'lavaplume', 'leafblade', 'leafstorm', 'lowkick', 'machpunch', 'magicalleaf', 'magmastorm', 'magnetbomb', 'magnitude', 'megakick', 'megapunch', 'megahorn', 'meteormash', 'mirrorshot', 'mudbomb', 'mudshot', 'muddywater', 'nightshade', 'nightslash', 'ominouswind', 'outrage', 'overheat', 'payday', 'payback', 'peck', 'petaldance', 'pinmissile', 'pluck', 'poisonjab', 'poisontail', 'pound', 'powergem', 'powerwhip', 'psychoboost', 'psychocut', 'psywave', 'punishment', 'quickattack', 'rage', 'rapidspin', 'razorleaf', 'razorwind', 'return', 'revenge', 'reversal', 'roaroftime', 'rockblast', 'rockclimb', 'rockthrow', 'rockwrecker', 'rollingkick', 'rollout', 'sandtomb', 'scratch', 'seedbomb', 'seedflare', 'seismictoss', 'selfdestruct', 'shadowclaw', 'shadowforce', 'shadowpunch', 'shadowsneak', 'shockwave', 'signalbeam', 'silverwind', 'skullbash', 'skyattack', 'skyuppercut', 'slam', 'slash', 'snore', 'solarbeam', 'sonicboom', 'spacialrend', 'spikecannon', 'spitup', 'steelwing', 'stoneedge', 'strength', 'struggle', 'submission', 'suckerpunch', 'surf', 'swift', 'tackle', 'takedown', 'thrash', 'thunderfang', 'triplekick', 'trumpcard', 'twister', 'uturn', 'uproar', 'vacuumwave', 'vicegrip', 'vinewhip', 'vitalthrow', 'volttackle', 'wakeupslap', 'watergun', 'waterpulse', 'waterfall', 'weatherball', 'whirlpool', 'wingattack', 'woodhammer', 'wrap', 'wringout', 'xscissor', 'zenheadbutt']; + if (affectedByRazorFang.includes(move.id)) { + if (!move.secondaries) move.secondaries = []; + move.secondaries.push({ + chance: 10, + volatileStatus: 'flinch', + }); + } + }, + }, + "rowapberry": { + inherit: true, + onAfterDamage() {}, + onAfterMoveSecondary(target, source, move) { + if (source && source !== target && move && move.category === 'Special') { + if (target.eatItem()) { + this.damage(source.maxhp / 8, source, target, null, true); + } + } + }, + }, + "stick": { + inherit: true, + onModifyCritRatio(critRatio, user) { + if (user.template.species === 'Farfetch\'d') { + return critRatio + 2; + } + }, + }, + "thickclub": { + inherit: true, + onModifyAtk(atk, pokemon) { + if (pokemon.template.species === 'Cubone' || pokemon.template.species === 'Marowak') { + return this.chainModify(2); + } + }, + }, +}; + +exports.BattleItems = BattleItems; diff --git a/data/mods/gen4/moves.js b/data/mods/gen4/moves.js new file mode 100644 index 0000000000000..3a302ea0e4815 --- /dev/null +++ b/data/mods/gen4/moves.js @@ -0,0 +1,1765 @@ +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + absorb: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", + }, + acupressure: { + inherit: true, + desc: "Raises a random stat by 2 stages as long as the stat is not already at stage 6. The user can choose to use this move on itself or an ally. Fails if no stat stage can be raised or if the user or ally has a substitute.", + flags: {snatch: 1}, + onHit(target) { + if (target.volatiles['substitute']) { + return false; + } + let stats = []; + for (let stat in target.boosts) { + // @ts-ignore + if (target.boosts[stat] < 6) { + stats.push(stat); + } + } + if (stats.length) { + let randomStat = this.sample(stats); + /**@type {{[k: string]: number}} */ + let boost = {}; + boost[randomStat] = 2; + this.boost(boost); + } else { + return false; + } + }, + }, + armthrust: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + aromatherapy: { + inherit: true, + onHit(target, source) { + this.add('-cureteam', source, '[from] move: Aromatherapy'); + source.side.pokemon.forEach(pokemon => pokemon.clearStatus()); + }, + }, + aquaring: { + inherit: true, + flags: {}, + }, + assist: { + inherit: true, + desc: "A random move among those known by the user's party members is selected for use. Does not select 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, or Trick.", + onHit(target) { + let moves = []; + for (const pokemon of target.side.pokemon) { + if (pokemon === target) continue; + for (const move of pokemon.moves) { + let noAssist = [ + 'assist', 'chatter', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'endure', 'feint', 'focuspunch', 'followme', 'helpinghand', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'protect', 'sketch', 'sleeptalk', 'snatch', 'struggle', 'switcheroo', 'thief', 'trick', + ]; + if (move && !noAssist.includes(move)) { + moves.push(move); + } + } + } + let randomMove = ''; + if (moves.length) randomMove = this.sample(moves); + if (!randomMove) { + return false; + } + this.useMove(randomMove, target); + }, + }, + assurance: { + inherit: true, + desc: "Power doubles if the target has already taken damage this turn.", + }, + avalanche: { + inherit: true, + desc: "Power doubles if the user was hit by a Pokemon in the target's position this turn.", + }, + barrage: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + beatup: { + inherit: true, + basePower: 10, + basePowerCallback(pokemon, target, move) { + // @ts-ignore + if (!move.allies.length) return null; + return 10; + }, + desc: "Deals typeless damage. Hits one time for the user and one time for each unfainted Pokemon without a major status condition in the user's party. For each hit, the damage formula uses the participating Pokemon's base Attack as the Attack stat, the target's base Defense as the Defense stat, and ignores stat stages and other effects that modify Attack or Defense; each hit is considered to come from the user.", + onModifyMove(move, pokemon) { + pokemon.addVolatile('beatup'); + move.type = '???'; + move.category = 'Physical'; + move.allies = pokemon.side.pokemon.filter(ally => !ally.fainted && !ally.status); + move.multihit = move.allies.length; + }, + effect: { + duration: 1, + onModifyAtkPriority: -101, + onModifyAtk(atk, pokemon, defender, move) { + // @ts-ignore + this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + move.allies[0].name); + this.event.modifier = 1; + // @ts-ignore + return move.allies.shift().template.baseStats.atk; + }, + onFoeModifyDefPriority: -101, + onFoeModifyDef(def, pokemon) { + this.event.modifier = 1; + return pokemon.template.baseStats.def; + }, + }, + }, + bide: { + inherit: true, + desc: "The user spends two turns locked into this move and then, on the second turn after using this move, the user attacks the last Pokemon that hit it, inflicting double the damage in HP it lost to attacks during the two turns. If the last Pokemon that hit it is no longer active, the user attacks a random opposing Pokemon instead. If the user is prevented from moving during this move's use, the effect ends. This move does not check accuracy and ignores type immunity.", + effect: { + duration: 3, + onLockMove: 'bide', + onStart(pokemon) { + this.effectData.totalDamage = 0; + this.add('-start', pokemon, 'move: Bide'); + }, + onDamagePriority: -101, + onDamage(damage, target, source, move) { + if (!move || move.effectType !== 'Move' || !source) return; + this.effectData.totalDamage += damage; + this.effectData.lastDamageSource = source; + }, + onAfterSetStatus(status, pokemon) { + if (status.id === 'slp' || status.id === 'frz') { + pokemon.removeVolatile('bide'); + } + }, + onBeforeMove(pokemon, target, move) { + if (this.effectData.duration === 1) { + this.add('-end', pokemon, 'move: Bide'); + if (!this.effectData.totalDamage) { + this.add('-fail', pokemon); + return false; + } + target = this.effectData.lastDamageSource; + if (!target) { + this.add('-fail', pokemon); + return false; + } + if (!target.isActive) { + const possibleTarget = this.resolveTarget(pokemon, this.getMove('pound')); + if (!possibleTarget) { + this.add('-miss', pokemon); + return false; + } + target = possibleTarget; + } + /**@type {Move} */ + // @ts-ignore + let moveData = /** @type {ActiveMove} */ ({ + id: 'bide', + name: "Bide", + accuracy: true, + damage: this.effectData.totalDamage * 2, + category: "Physical", + priority: 1, + flags: {contact: 1, protect: 1}, + ignoreImmunity: true, + effectType: 'Move', + type: 'Normal', + }); + this.tryMoveHit(target, pokemon, moveData); + return false; + } + this.add('-activate', pokemon, 'move: Bide'); + }, + onMoveAborted(pokemon) { + pokemon.removeVolatile('bide'); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'move: Bide', '[silent]'); + }, + }, + }, + bind: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 75, + }, + block: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field, unless it uses Baton Pass, in which case the target will remain trapped.", + }, + bonerush: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + accuracy: 80, + }, + bonemerang: { + inherit: true, + desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + bounce: { + inherit: 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, Sky Uppercut, Thunder, and Twister, and Gust and Twister have doubled power when used against it. If the user is holding a Power Herb, the move completes in one turn.", + }, + bravebird: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", + shortDesc: "Has 1/3 recoil.", + recoil: [1, 3], + }, + brickbreak: { + inherit: true, + desc: "If this attack does not miss and whether or not the target is immune, the effects of Reflect and Light Screen end for the target's side of the field before damage is calculated.", + shortDesc: "Destroys screens, even if the target is immune.", + onTryHit(pokemon) { + pokemon.side.removeSideCondition('reflect'); + pokemon.side.removeSideCondition('lightscreen'); + }, + }, + bugbite: { + inherit: true, + desc: "The user steals the target's held Berry if it is holding one and eats it immediately, gaining its effects unless the user's item is being ignored. Items lost to this move can be regained with Recycle.", + }, + bulletseed: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + basePower: 10, + }, + camouflage: { + inherit: true, + desc: "The user's type changes based on the battle terrain. Normal type on the regular Wi-Fi terrain. Fails if the user has the Multitype Ability or if the type is one of the user's current types.", + shortDesc: "Changes user's type based on terrain. (Normal)", + }, + chatter: { + inherit: true, + desc: "Has an X% chance to confuse the target, where X is 0 unless the user is a Chatot that hasn't Transformed. If the user is a Chatot, X is 1, 11, or 31 depending on the volume of Chatot's recorded cry, if any; 1 for no recording or low volume, 11 for medium volume, and 31 for high volume.", + shortDesc: "For Chatot, 31% chance to confuse the target.", + secondary: { + chance: 31, + volatileStatus: 'confusion', + }, + }, + clamp: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 75, + pp: 10, + }, + cometpunch: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + conversion: { + inherit: true, + desc: "The user's type changes to match the original type of one of its known moves besides this move and Curse, at random, but not either of its current types. Fails if the user cannot change its type, or if this move would only be able to select one of the user's current types.", + flags: {}, + onHit(target) { + let possibleTypes = target.moveSlots.map(moveSlot => { + let move = this.getMove(moveSlot.id); + if (move.id !== 'conversion' && move.id !== 'curse' && !target.hasType(move.type)) { + return move.type; + } + return ''; + }).filter(type => type); + if (!possibleTypes.length) { + return false; + } + let type = this.sample(possibleTypes); + + if (!target.setType(type)) return false; + this.add('-start', target, 'typechange', type); + }, + }, + conversion2: { + inherit: true, + desc: "The user's type changes to match a type that resists or is immune to the type of the last move used against the user, if it was successful against the user, but not either of its current types. The determined type of the move is used rather than the original type. Fails if the last move used against the user was not successful, if the user has the Multitype Ability, or if this move would only be able to select one of the user's current types.", + shortDesc: "User's type changes to resist last move against it.", + }, + copycat: { + inherit: true, + desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was 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, or Trick.", + onHit(pokemon) { + let noCopycat = ['assist', 'chatter', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'endure', 'feint', 'focuspunch', 'followme', 'helpinghand', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'protect', 'sketch', 'sleeptalk', 'snatch', 'struggle', 'switcheroo', 'thief', 'trick']; + if (!this.lastMove || noCopycat.includes(this.lastMove.id)) { + return false; + } + this.useMove(this.lastMove.id, pokemon); + }, + }, + cottonspore: { + inherit: true, + accuracy: 85, + }, + counter: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with a physical attack this turn equal to twice the HP lost by the user from that attack. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's physical attack this turn, or if the user did not lose HP from the attack.", + }, + covet: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Griseous Orb, or if the target has the Multitype Ability. Items lost to this move cannot be regained with Recycle.", + basePower: 40, + }, + crabhammer: { + inherit: true, + accuracy: 85, + }, + crushgrip: { + inherit: true, + desc: "Power is equal to 120 * (target's current HP / target's maximum HP) + 1, rounded down.", + basePowerCallback(pokemon, target) { + return Math.floor(target.hp * 120 / target.maxhp) + 1; + }, + }, + curse: { + inherit: true, + desc: "If the user is not a Ghost type, lowers the user's Speed by 1 stage and raises the user's Attack and Defense by 1 stage. If the user is a Ghost type, 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. 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 or has a substitute.", + flags: {}, + onModifyMove(move, source, target) { + if (!source.hasType('Ghost')) { + delete move.volatileStatus; + delete move.onHit; + move.self = {boosts: {atk: 1, def: 1, spe: -1}}; + // @ts-ignore + move.target = move.nonGhostTarget; + } else if (target.volatiles['substitute']) { + delete move.volatileStatus; + delete move.onHit; + } + }, + type: "???", + }, + defog: { + inherit: true, + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + detect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used, up to a maximum of 8. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", + priority: 3, + effect: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'Protect'); + }, + onTryHitPriority: 3, + onTryHit(target, source, move) { + if (!move.flags['protect']) return; + this.add('-activate', target, 'Protect'); + let lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is NOT reset + if (source.volatiles['lockedmove'].trueDuration >= 2) { + source.volatiles['lockedmove'].duration = 2; + } + } + return null; + }, + }, + }, + dig: { + inherit: 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 Earthquake and Magnitude, which have doubled power when used against it, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn.", + }, + disable: { + inherit: true, + accuracy: 80, + desc: "For 4 to 7 turns, the target's last move used becomes disabled. Fails if one of the target's moves is already disabled, if the target has not made a move, if the target no longer knows the move, or if the move has 0 PP.", + shortDesc: "For 4-7 turns, disables the target's last move.", + flags: {protect: 1, mirror: 1, authentic: 1}, + volatileStatus: 'disable', + effect: { + durationCallback() { + return this.random(4, 8); + }, + noCopy: true, + onStart(pokemon) { + if (!this.willMove(pokemon)) { + this.effectData.duration++; + } + if (!pokemon.lastMove) { + return false; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === pokemon.lastMove.id) { + if (!moveSlot.pp) { + return false; + } else { + this.add('-start', pokemon, 'Disable', moveSlot.move); + this.effectData.move = pokemon.lastMove.id; + return; + } + } + } + return false; + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'move: Disable'); + }, + onBeforeMovePriority: 7, + onBeforeMove(attacker, defender, move) { + if (move.id === this.effectData.move) { + this.add('cant', attacker, 'Disable', move); + return false; + } + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + dive: { + inherit: 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 Surf and Whirlpool, which have doubled power when used against it, and is also unaffected by weather. If the user is holding a Power Herb, the move completes in one turn.", + }, + doomdesire: { + inherit: true, + accuracy: 85, + basePower: 120, + desc: "Deals typeless damage that cannot be a critical hit two turns after this move is used. Damage is calculated against the target on use, and at the end of the final turn that damage is dealt to the Pokemon at the position the original target had at the time. Fails if this move or Future Sight is already in effect for the target's position.", + onTry(source, target) { + target.side.addSideCondition('futuremove'); + if (target.side.sideConditions['futuremove'].positions[target.position]) { + return false; + } + let moveData = /** @type {ActiveMove} */ ({ + name: "Doom Desire", + basePower: 120, + category: "Special", + flags: {}, + willCrit: false, + type: '???', + }); + let damage = this.getDamage(source, target, moveData, true); + target.side.sideConditions['futuremove'].positions[target.position] = { + duration: 3, + move: 'doomdesire', + source: source, + moveData: { + id: 'doomdesire', + name: "Doom Desire", + accuracy: 85, + basePower: 0, + damage: damage, + category: "Special", + flags: {}, + effectType: 'Move', + isFutureMove: true, + type: '???', + }, + }; + this.add('-start', source, 'Doom Desire'); + return null; + }, + }, + doubleedge: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", + shortDesc: "Has 1/3 recoil.", + recoil: [1, 3], + }, + doublehit: { + inherit: true, + desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + doublekick: { + inherit: true, + desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + doubleslap: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + drainpunch: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", + basePower: 60, + pp: 5, + }, + dreameater: { + inherit: true, + desc: "The target is unaffected by this move unless it is asleep and does not have a substitute. The user recovers 1/2 the HP lost by the target, rounded down, but not less than 1 HP. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", + onTryHit(target) { + if (target.status !== 'slp' || target.volatiles['substitute']) { + this.add('-immune', target); + return null; + } + }, + }, + earthquake: { + inherit: true, + desc: "Power doubles if the target is using Dig.", + shortDesc: "Hits adjacent Pokemon. Power doubles on Dig.", + }, + embargo: { + inherit: true, + flags: {protect: 1, mirror: 1}, + onTryHit(pokemon) { + if (pokemon.ability === 'multitype' || pokemon.item === 'griseousorb') { + return false; + } + }, + }, + encore: { + inherit: true, + desc: "For 4 to 8 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Mimic, Mirror Move, Sketch, Struggle, or Transform.", + shortDesc: "The target repeats its last move for 4-8 turns.", + flags: {protect: 1, mirror: 1, authentic: 1}, + volatileStatus: 'encore', + effect: { + durationCallback() { + return this.random(4, 9); + }, + onStart(target, source) { + let noEncore = ['encore', 'mimic', 'mirrormove', 'sketch', 'struggle', 'transform']; + let moveIndex = target.lastMove ? target.moves.indexOf(target.lastMove.id) : -1; + if (!target.lastMove || noEncore.includes(target.lastMove.id) || !target.moveSlots[moveIndex] || target.moveSlots[moveIndex].pp <= 0) { + // it failed + this.add('-fail', source); + this.attrLastMove('[still]'); + delete target.volatiles['encore']; + return; + } + this.effectData.move = target.lastMove.id; + this.add('-start', target, 'Encore'); + if (!this.willMove(target)) { + this.effectData.duration++; + } + }, + onOverrideAction(pokemon) { + return this.effectData.move; + }, + onResidualOrder: 13, + onResidual(target) { + if (target.moves.includes(this.effectData.move) && target.moveSlots[target.moves.indexOf(this.effectData.move)].pp <= 0) { + // early termination if you run out of PP + delete target.volatiles.encore; + this.add('-end', target, 'Encore'); + } + }, + onEnd(target) { + this.add('-end', target, 'Encore'); + }, + onDisableMove(pokemon) { + if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { + return; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + endeavor: { + inherit: true, + onTry(pokemon, target) { + if (pokemon.hp >= target.hp) { + this.add('-fail', pokemon); + return null; + } + }, + }, + endure: { + inherit: true, + desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used, up to a maximum of 8. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", + }, + explosion: { + inherit: true, + desc: "The user faints after using this move, unless this move has no target. The target's Defense is halved during damage calculation. This move is prevented from executing if any active Pokemon has the Damp Ability.", + basePower: 500, + }, + extremespeed: { + inherit: true, + shortDesc: "Usually goes first.", + priority: 1, + }, + fakeout: { + inherit: true, + priority: 1, + }, + feint: { + inherit: true, + basePower: 50, + desc: "Fails unless the target is using Detect or Protect. If this move is successful, it breaks through the target's Detect or Protect for this turn, allowing other Pokemon to attack the target normally.", + shortDesc: "Breaks protection. Fails if target is not protecting.", + onTry(source, target) { + if (!target.volatiles['protect']) { + this.add('-fail', source); + return null; + } + }, + }, + firefang: { + inherit: true, + desc: "Has a 10% chance to burn the target and a 10% chance to flinch it. This move can hit Pokemon with the Wonder Guard Ability regardless of their typing.", + }, + firespin: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 70, + basePower: 15, + }, + flail: { + inherit: true, + desc: "The power of this move is 20 if X is 43 to 48, 40 if X is 22 to 42, 80 if X is 13 to 21, 100 if X is 6 to 12, 150 if X is 2 to 5, and 200 if X is 0 or 1, where X is equal to (user's current HP * 64 / user's maximum HP), rounded down.", + basePowerCallback(pokemon, target) { + let ratio = pokemon.hp * 64 / pokemon.maxhp; + if (ratio < 2) { + return 200; + } + if (ratio < 6) { + return 150; + } + if (ratio < 13) { + return 100; + } + if (ratio < 22) { + return 80; + } + if (ratio < 43) { + return 40; + } + return 20; + }, + }, + flareblitz: { + inherit: true, + desc: "Has a 10% chance to burn the target. If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", + shortDesc: "Has 1/3 recoil. 10% chance to burn. Thaws user.", + recoil: [1, 3], + }, + fling: { + inherit: true, + desc: "The power of this move is based on the user's held item. The held item is lost and it activates for the target if applicable. If the target avoids this move by protecting itself, the user's held item is still lost. The user can regain a thrown item with Recycle. Fails if the user has no held item, if the held item cannot be thrown, or if the user is under the effect of Embargo.", + }, + fly: { + inherit: 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, Sky Uppercut, Thunder, and Twister, and Gust and Twister have doubled power when used against it. If the user is holding a Power Herb, the move completes in one turn.", + }, + focuspunch: { + inherit: true, + desc: "The user loses its focus and does nothing if it is hit by a damaging attack this turn before it can execute the move, but it still loses PP.", + beforeMoveCallback() { }, + onTry(pokemon) { + if (pokemon.volatiles['focuspunch'] && pokemon.volatiles['focuspunch'].lostFocus) { + this.attrLastMove('[still]'); + this.add('cant', pokemon, 'Focus Punch', 'Focus Punch'); + return false; + } + }, + }, + followme: { + inherit: true, + desc: "Until the end of the turn, all single-target attacks from the opposing side are redirected to the user. Such attacks are redirected to the user before they can be reflected by Magic Coat, or drawn in by the Lightning Rod or Storm Drain Abilities. This effect remains active even if the user leaves the field. Fails if it is not a Double Battle.", + }, + foresight: { + inherit: true, + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it if it is greater than 0, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type.", + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + furyattack: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + furycutter: { + inherit: true, + basePower: 10, + }, + furyswipes: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + futuresight: { + inherit: true, + accuracy: 90, + basePower: 80, + desc: "Deals typeless damage that cannot be a critical hit two turns after this move is used. Damage is calculated against the target on use, and at the end of the final turn that damage is dealt to the Pokemon at the position the original target had at the time. Fails if this move or Doom Desire is already in effect for the target's position.", + pp: 15, + onTry(source, target) { + target.side.addSideCondition('futuremove'); + if (target.side.sideConditions['futuremove'].positions[target.position]) { + return false; + } + let moveData = /** @type {ActiveMove} */ ({ + name: "Future Sight", + basePower: 80, + category: "Special", + flags: {}, + willCrit: false, + type: '???', + }); + let damage = this.getDamage(source, target, moveData, true); + target.side.sideConditions['futuremove'].positions[target.position] = { + duration: 3, + move: 'futuresight', + source: source, + moveData: { + id: 'futuresight', + name: "Future Sight", + accuracy: 90, + basePower: 0, + damage: damage, + category: "Special", + flags: {}, + effectType: 'Move', + isFutureMove: true, + type: '???', + }, + }; + this.add('-start', source, 'Future Sight'); + return null; + }, + }, + gigadrain: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", + basePower: 60, + }, + glare: { + inherit: true, + accuracy: 75, + }, + gravity: { + inherit: true, + desc: "For 5 turns, the evasiveness of all active Pokemon is multiplied by 0.6. At the time of use, Bounce, Fly, and Magnet Rise end immediately for all active Pokemon. During the effect, Bounce, Fly, High Jump Kick, Jump Kick, Magnet Rise, and Splash are prevented from being used by all active Pokemon. Ground-type attacks, Spikes, Toxic Spikes, and the Arena Trap Ability can affect Flying types or Pokemon with the Levitate Ability. Fails if this move is already in effect.", + }, + growth: { + inherit: true, + desc: "Raises the user's Special Attack by 1 stage.", + shortDesc: "Raises the user's Sp. Atk by 1.", + onModifyMove() { }, + boosts: { + spa: 1, + }, + }, + gust: { + inherit: true, + desc: "Power doubles if the target is using Bounce or Fly.", + shortDesc: "Power doubles during Bounce and Fly.", + }, + hail: { + inherit: true, + desc: "For 5 turns, the weather becomes Hail. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are an Ice type or have the Ice Body, Magic Guard, or Snow Cloak Abilities. Lasts for 8 turns if the user is holding Icy Rock. Fails if the current weather is Hail.", + }, + headsmash: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/2 the HP lost by the target, rounded down, but not less than 1 HP.", + }, + healbell: { + inherit: true, + desc: "Every Pokemon in the user's party is cured of its major status condition. Pokemon with the Soundproof Ability are not cured.", + onHit(target, source) { + this.add('-activate', source, 'move: Heal Bell'); + source.side.pokemon.forEach(pokemon => { + if (!pokemon.hasAbility('soundproof')) pokemon.cureStatus(true); + }); + }, + }, + healblock: { + inherit: true, + desc: "For 5 turns, the target is prevented from restoring any HP as long as it remains active. During the effect, healing moves are unusable, move effects that grant healing will not heal, but Abilities and items will continue to heal the user. If an affected Pokemon uses Baton Pass, the replacement will remain under the effect. Pain Split is unaffected.", + flags: {protect: 1, mirror: 1}, + effect: { + duration: 5, + durationCallback(target, source, effect) { + if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); + return 7; + } + return 5; + }, + onStart(pokemon) { + this.add('-start', pokemon, 'move: Heal Block'); + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).flags['heal']) { + pokemon.disableMove(moveSlot.id); + } + } + }, + onBeforeMovePriority: 6, + onBeforeMove(pokemon, target, move) { + if (move.flags['heal']) { + this.add('cant', pokemon, 'move: Heal Block', move); + return false; + } + }, + onResidualOrder: 17, + onEnd(pokemon) { + this.add('-end', pokemon, 'move: Heal Block'); + }, + onTryHeal(damage, pokemon, source, effect) { + if (effect && (effect.id === 'drain' || effect.id === 'leechseed' || effect.id === 'wish')) { + return false; + } + }, + }, + }, + healingwish: { + inherit: true, + desc: "The user faints and the Pokemon brought out to replace it has its HP fully restored along with having any major status condition cured. The new Pokemon is sent out immediately and the healing happens after hazards take effect. Fails if the user is the last unfainted Pokemon in its party.", + flags: {heal: 1}, + onAfterMove(pokemon) { + pokemon.switchFlag = true; + }, + effect: { + duration: 1, + onStart(side) { + this.debug('Healing Wish started on ' + side.name); + }, + onSwitchInPriority: -1, + onSwitchIn(target) { + if (target.position !== this.effectData.sourcePosition) { + return; + } + if (target.hp > 0) { + target.heal(target.maxhp); + target.setStatus(''); + this.add('-heal', target, target.getHealth, '[from] move: Healing Wish'); + target.side.removeSideCondition('healingwish'); + target.lastMove = this.lastMove; + } else { + target.switchFlag = true; + } + }, + }, + }, + healorder: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down.", + }, + highjumpkick: { + inherit: true, + basePower: 100, + desc: "If this attack is not successful, the user loses HP equal to half the target's maximum HP if the target was immune, rounded down, otherwise half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage. Pokemon with the Magic Guard Ability are unaffected by crash damage.", + shortDesc: "If miss, user takes 1/2 damage it would've dealt.", + pp: 20, + onMoveFail(target, source, move) { + move.causedCrashDamage = true; + let damage = this.getDamage(source, target, move, true); + if (!damage) damage = target.maxhp; + this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, move); + }, + }, + iciclespear: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + basePower: 10, + }, + imprison: { + inherit: true, + desc: "The user prevents all opposing Pokemon from using any moves that the user also knows as long as the user remains active. Fails if no opposing Pokemon know any of the user's moves.", + flags: {authentic: 1}, + onTryHit(pokemon) { + for (const target of pokemon.side.foe.active) { + if (!target || target.fainted) continue; + for (const move of pokemon.moves) { + if (target.moves.includes(move)) return; + } + } + return false; + }, + }, + ingrain: { + inherit: true, + desc: "The user has 1/16 of its maximum HP restored at the end of each turn, but it is prevented from switching out and other Pokemon cannot force the user to switch out. The user can still switch out if it uses Baton Pass or U-turn. If the user leaves the field using Baton Pass, the replacement will remain trapped and still receive the healing effect. During the effect, the user can be hit normally by Ground-type attacks and be affected by Spikes and Toxic Spikes, even if the user is a Flying type or has the Levitate Ability.", + }, + jumpkick: { + inherit: true, + basePower: 85, + desc: "If this attack is not successful, the user loses HP equal to half the target's maximum HP if the target was immune, rounded down, otherwise half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage. Pokemon with the Magic Guard Ability are unaffected by crash damage.", + shortDesc: "If miss, user takes 1/2 damage it would've dealt.", + pp: 25, + onMoveFail(target, source, move) { + move.causedCrashDamage = true; + let damage = this.getDamage(source, target, move, true); + if (!damage) damage = target.maxhp; + this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, move); + }, + }, + knockoff: { + inherit: true, + desc: "The target's held item is lost for the rest of the battle, unless the item is a Griseous Orb or the target has the Multitype or Sticky Hold Abilities. During the effect, the target cannot obtain a new item by any means.", + shortDesc: "Target's item is lost and it cannot obtain another.", + }, + lastresort: { + inherit: true, + basePower: 130, + }, + leechlife: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", + }, + lightscreen: { + inherit: true, + desc: "For 5 turns, the user and its party members take 1/2 damage from special attacks, or 2/3 damage if there are multiple active Pokemon on the user's side. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break or Defog. Lasts for 8 turns if the user is holding Light Clay. Fails if the effect is already active on the user's side.", + effect: { + duration: 5, + durationCallback(target, source, effect) { + if (source && source.hasItem('lightclay')) { + return 8; + } + return 5; + }, + onAnyModifyDamagePhase1(damage, source, target, move) { + if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Special') { + if (!move.crit && !move.infiltrates) { + this.debug('Light Screen weaken'); + if (target.side.active.length > 1) return this.chainModify([0xAAC, 0x1000]); + return this.chainModify(0.5); + } + } + }, + onStart(side) { + this.add('-sidestart', side, 'Light Screen'); + }, + onResidualOrder: 21, + onEnd(side) { + this.add('-sideend', side, 'Light Screen'); + }, + }, + }, + lockon: { + inherit: true, + desc: "Until the end of the next turn, the target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. When this effect is started against the target, this and Mind Reader's effects end for every other Pokemon against that target. If the target leaves the field using Baton Pass, the replacement remains under this effect. If the user leaves the field using Baton Pass, this effect is restarted against the same target for the replacement. The effect ends if either the user or the target leaves the field.", + }, + luckychant: { + inherit: true, + flags: {}, + }, + lunardance: { + inherit: true, + desc: "The user faints and the Pokemon brought out to replace it has its HP and PP fully restored along with having any major status condition cured. The new Pokemon is sent out immediately and the healing happens after hazards take effect. Fails if the user is the last unfainted Pokemon in its party.", + flags: {heal: 1}, + onAfterMove(pokemon) { + pokemon.switchFlag = true; + }, + effect: { + duration: 1, + onStart(side) { + this.debug('Lunar Dance started on ' + side.name); + }, + onSwitchInPriority: -1, + onSwitchIn(target) { + if (target.position !== this.effectData.sourcePosition) { + return; + } + if (target.hp > 0) { + target.heal(target.maxhp); + target.setStatus(''); + for (const moveSlot of target.moveSlots) { + moveSlot.pp = moveSlot.maxpp; + } + this.add('-heal', target, target.getHealth, '[from] move: Lunar Dance'); + target.side.removeSideCondition('lunardance'); + target.lastMove = this.lastMove; + } else { + target.switchFlag = true; + } + }, + }, + }, + magiccoat: { + inherit: true, + desc: "The user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. If the move targets both opposing Pokemon, the Pokemon under this effect will reflect the move only targeting the original user. The effect ends once a move is reflected or at the end of the turn. The Lightning Rod and Storm Drain Abilities redirect their respective moves before this move takes effect.", + effect: { + duration: 1, + onTryHitPriority: 2, + onTryHit(target, source, move) { + if (target === source || move.hasBounced || !move.flags['reflectable']) { + return; + } + target.removeVolatile('magiccoat'); + let newMove = this.getActiveMove(move.id); + newMove.hasBounced = true; + this.useMove(newMove, target, source); + return null; + }, + }, + }, + magmastorm: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 70, + }, + magnetrise: { + inherit: true, + desc: "For 5 turns, the user is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, and the Arena Trap Ability as long as it remains active. If the user uses Baton Pass, the replacement will gain the effect. Ingrain and Iron Ball override this move if the user is under any of their effects. Fails if the user is already under this effect or the effect of Ingrain.", + flags: {gravity: 1}, + volatileStatus: 'magnetrise', + effect: { + duration: 5, + onStart(target) { + if (target.volatiles['ingrain'] || target.ability === 'levitate') return false; + this.add('-start', target, 'Magnet Rise'); + }, + onImmunity(type) { + if (type === 'Ground') return false; + }, + onResidualOrder: 6, + onResidualSubOrder: 9, + onEnd(target) { + this.add('-end', target, 'Magnet Rise'); + }, + }, + }, + magnitude: { + inherit: true, + desc: "The power of this move varies. 5% chances for 10 and 150 power, 10% chances for 30 and 110 power, 20% chances for 50 and 90 power, and 30% chance for 70 power. Power doubles if the target is using Dig.", + }, + meanlook: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field, unless it uses Baton Pass, in which case the target will remain trapped.", + }, + mefirst: { + inherit: true, + desc: "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 other than Chatter, Counter, Covet, Focus Punch, Mirror Coat, or Thief. Fails if the target moves before the user. Ignores the target's substitute for the purpose of copying the move.", + effect: { + duration: 1, + onModifyDamagePhase2(damage) { + return damage * 1.5; + }, + }, + }, + megadrain: { + inherit: true, + desc: "The user recovers 1/2 the HP lost by the target, rounded down. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", + }, + memento: { + inherit: true, + desc: "Lowers the target's Attack and Special Attack by 2 stages. The user faints, even if this move misses. This move can hit targets in the middle of a two-turn move. Fails entirely if there is no target, but does not fail if the target's stats cannot be changed.", + }, + metalburst: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with an attack this turn equal to 1.5 times the HP lost by the user from that attack, rounded down. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's attack this turn, or if the user did not lose HP from the attack.", + }, + metronome: { + inherit: true, + desc: "A random move is selected for use, other than 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, or Trick.", + noMetronome: ['assist', 'chatter', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'endure', 'feint', 'focuspunch', 'followme', 'helpinghand', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'protect', 'sketch', 'sleeptalk', 'snatch', 'struggle', 'switcheroo', 'thief', 'trick'], + }, + milkdrink: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down.", + }, + mimic: { + inherit: true, + desc: "While the user remains active, this move is replaced by the last move used by the target. The copied move has 5 PP. Fails if the target has not made a move, if the user has Transformed, if the user already knows the move, or if the move is Chatter, Metronome, Mimic, Sketch, or Struggle.", + onHit(target, source) { + let disallowedMoves = ['chatter', 'metronome', 'mimic', 'sketch', 'struggle', 'transform']; + if (source.transformed || !target.lastMove || disallowedMoves.includes(target.lastMove.id) || source.moves.indexOf(target.lastMove.id) !== -1 || target.volatiles['substitute']) return false; + let mimicIndex = source.moves.indexOf('mimic'); + if (mimicIndex < 0) return false; + let move = this.getMove(target.lastMove.id); + source.moveSlots[mimicIndex] = { + move: move.name, + id: move.id, + pp: 5, + maxpp: move.pp * 8 / 5, + disabled: false, + used: false, + virtual: true, + }; + this.add('-activate', source, 'move: Mimic', move.name); + }, + }, + mindreader: { + inherit: true, + desc: "Until the end of the next turn, the target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. When this effect is started against the target, this and Lock-On's effects end for every other Pokemon against that target. If the target leaves the field using Baton Pass, the replacement remains under this effect. If the user leaves the field using Baton Pass, this effect is restarted against the same target for the replacement. The effect ends if either the user or the target leaves the field.", + }, + minimize: { + inherit: true, + desc: "Raises the user's evasiveness by 1 stage. Whether or not the user's evasiveness was changed, Stomp will have its power doubled if used against the user while it is active.", + shortDesc: "Raises the user's evasiveness by 1.", + boosts: { + evasion: 1, + }, + }, + miracleeye: { + inherit: true, + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it if it is greater than 0, and Psychic-type attacks can hit the target if it is a Dark type.", + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + mirrorcoat: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with a special attack this turn equal to twice the HP lost by the user from that attack. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's special attack this turn, or if the user did not lose HP from the attack.", + }, + mirrormove: { + inherit: true, + desc: "The user uses the last move that successfully targeted the user. The copied move is used with no specific target. Fails if no move has targeted the user, if the move was called by another move, if the move is Encore, or if the move cannot be copied by this move.", + onTryHit() { }, + onHit(pokemon) { + let noMirror = ['acupressure', 'aromatherapy', 'assist', 'chatter', 'copycat', 'counter', 'curse', 'doomdesire', 'feint', 'focuspunch', 'futuresight', 'gravity', 'hail', 'haze', 'healbell', 'helpinghand', 'lightscreen', 'luckychant', 'magiccoat', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'mist', 'mudsport', 'naturepower', 'perishsong', 'psychup', 'raindance', 'reflect', 'roleplay', 'safeguard', 'sandstorm', 'sketch', 'sleeptalk', 'snatch', 'spikes', 'spitup', 'stealthrock', 'struggle', 'sunnyday', 'tailwind', 'toxicspikes', 'transform', 'watersport']; + let lastAttackedBy = pokemon.getLastAttackedBy(); + if (!lastAttackedBy || !lastAttackedBy.source.lastMove || !lastAttackedBy.move || noMirror.includes(lastAttackedBy.move) || !lastAttackedBy.source.hasMove(lastAttackedBy.move)) { + return false; + } + this.useMove(lastAttackedBy.move, pokemon); + }, + target: "self", + }, + moonlight: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded down.", + onHit(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + this.heal(pokemon.maxhp * 2 / 3); + } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { + this.heal(pokemon.maxhp / 4); + } else { + this.heal(pokemon.maxhp / 2); + } + }, + }, + morningsun: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded down.", + onHit(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + this.heal(pokemon.maxhp * 2 / 3); + } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { + this.heal(pokemon.maxhp / 4); + } else { + this.heal(pokemon.maxhp / 2); + } + }, + }, + mudsport: { + inherit: true, + desc: "While the user is active, all Electric-type attacks used by any active Pokemon have their power halved. Fails if this effect is already active for the user. Baton Pass can be used to transfer this effect to an ally.", + shortDesc: "Weakens Electric-type attacks to 1/2 their power.", + effect: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'move: Mud Sport'); + }, + onBasePowerPriority: 3, + onAnyBasePower(basePower, user, target, move) { + if (move.type === 'Electric') return this.chainModify(0.5); + }, + }, + }, + naturalgift: { + inherit: true, + desc: "The type and power of this move depend on the user's held Berry, and the Berry is lost. Fails if the user is not holding a Berry, if the user has the Klutz Ability, or if Embargo is in effect for the user.", + }, + naturepower: { + inherit: true, + desc: "This move calls another move for use based on the battle terrain. Tri Attack in Wi-Fi battles.", + shortDesc: "Attack changes based on terrain. (Tri Attack)", + onHit(pokemon) { + this.useMove('triattack', pokemon); + }, + }, + odorsleuth: { + inherit: true, + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it if it is greater than 0, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type.", + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + outrage: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused at the end of the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + pp: 15, + onAfterMove() {}, + }, + payback: { + inherit: true, + desc: "Power doubles if the user moves after the target this turn. Switching in counts as an action.", + basePowerCallback(pokemon, target) { + if (this.willMove(target)) { + return 50; + } + return 100; + }, + }, + petaldance: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused at the end of the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + basePower: 90, + pp: 20, + onAfterMove() {}, + }, + pinmissile: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + pluck: { + inherit: true, + desc: "The user steals the target's held Berry if it is holding one and eats it immediately, gaining its effects unless the user's item is being ignored. Items lost to this move can be regained with Recycle.", + }, + poisongas: { + inherit: true, + accuracy: 55, + target: "normal", + }, + powertrick: { + inherit: true, + flags: {}, + }, + protect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used, up to a maximum of 8. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", + priority: 3, + effect: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'Protect'); + }, + onTryHitPriority: 3, + onTryHit(target, source, move) { + if (!move.flags['protect']) return; + this.add('-activate', target, 'Protect'); + let lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is NOT reset + if (source.volatiles['lockedmove'].trueDuration >= 2) { + source.volatiles['lockedmove'].duration = 2; + } + } + return null; + }, + }, + }, + psychup: { + inherit: true, + flags: {snatch: 1, authentic: 1}, + }, + psywave: { + inherit: true, + desc: "Deals damage to the target equal to (user's level) * (X * 10 + 50) / 100, where X is a random number from 0 to 10, rounded down, but not less than 1 HP.", + }, + pursuit: { + inherit: true, + 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 U-turn, 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 becomes active immediately.", + }, + rapidspin: { + inherit: true, + desc: "If this move is successful, the effects of Leech Seed and binding moves end against the user, and all hazards are removed from the user's side of the field.", + }, + razorwind: { + inherit: true, + desc: "Has a higher chance for a critical hit. This attack charges on the first turn and executes on the second.", + }, + recover: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down.", + }, + recycle: { + inherit: true, + desc: "The user regains the item last used by a Pokemon in its current position on the field, even if that Pokemon was not the user. Fails if the user is holding an item, if no items have been used at the user's position, or if the item was lost to Covet, Knock Off, or Thief. Items thrown with Fling can be regained.", + flags: {}, + }, + reflect: { + inherit: true, + desc: "For 5 turns, the user and its party members take 1/2 damage from physical attacks, or 2/3 damage if there are multiple active Pokemon on the user's side. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break or Defog. Lasts for 8 turns if the user is holding Light Clay. Fails if the effect is already active on the user's side.", + effect: { + duration: 5, + durationCallback(target, source, effect) { + if (source && source.hasItem('lightclay')) { + return 8; + } + return 5; + }, + onAnyModifyDamagePhase1(damage, source, target, move) { + if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Physical') { + if (!move.crit && !move.infiltrates) { + this.debug('Reflect weaken'); + if (target.side.active.length > 1) return this.chainModify([0xAAC, 0x1000]); + return this.chainModify(0.5); + } + } + }, + onStart(side) { + this.add('-sidestart', side, 'Reflect'); + }, + onResidualOrder: 21, + onEnd(side) { + this.add('-sideend', side, 'Reflect'); + }, + }, + }, + revenge: { + inherit: true, + desc: "Power doubles if the user was hit by a Pokemon in the target's current position this turn.", + }, + reversal: { + inherit: true, + desc: "The power of this move is 20 if X is 43 to 48, 40 if X is 22 to 42, 80 if X is 13 to 21, 100 if X is 6 to 12, 150 if X is 2 to 5, and 200 if X is 0 or 1, where X is equal to (user's current HP * 64 / user's maximum HP), rounded down.", + basePowerCallback(pokemon, target) { + let ratio = pokemon.hp * 64 / pokemon.maxhp; + if (ratio < 2) { + return 200; + } + if (ratio < 6) { + return 150; + } + if (ratio < 13) { + return 100; + } + if (ratio < 22) { + return 80; + } + if (ratio < 43) { + return 40; + } + return 20; + }, + }, + roar: { + inherit: true, + desc: "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, if the target used Ingrain previously or has the Suction Cups Ability, or if the user's level is lower than the target's and X * (user's level + target's level) / 256 + 1 is less than or equal to (target's level / 4), rounded down, where X is a random number from 0 to 255.", + flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, + }, + rockblast: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + accuracy: 80, + }, + roleplay: { + inherit: true, + desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is Multitype or already matches the target, or if the target's Ability is Multitype or Wonder Guard.", + }, + roost: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down. Until the end of the turn, Flying-type users lose their Flying type and pure Flying-type users become typeless. Does nothing if the user's HP is full.", + }, + sandtomb: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 70, + basePower: 15, + }, + sandstorm: { + inherit: true, + 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 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.", + }, + scaryface: { + inherit: true, + accuracy: 90, + }, + secretpower: { + inherit: true, + desc: "Has a 30% chance to cause a secondary effect on the target based on the battle terrain. Causes paralysis on the regular Wi-Fi terrain.", + shortDesc: "Effect varies with terrain. (30% paralysis chance)", + }, + selfdestruct: { + inherit: true, + desc: "The user faints after using this move, unless this move has no target. The target's Defense is halved during damage calculation. This move is prevented from executing if any active Pokemon has the Damp Ability.", + basePower: 400, + }, + sketch: { + inherit: true, + onHit(target, source) { + let disallowedMoves = ['chatter', 'sketch', 'struggle']; + if (source.transformed || !target.lastMove || disallowedMoves.includes(target.lastMove.id) || source.moves.includes(target.lastMove.id) || target.volatiles['substitute']) return false; + let sketchIndex = source.moves.indexOf('sketch'); + if (sketchIndex < 0) return false; + let move = this.getMove(target.lastMove.id); + let sketchedMove = { + move: move.name, + id: move.id, + pp: move.pp, + maxpp: move.pp, + disabled: false, + used: false, + }; + source.moveSlots[sketchIndex] = sketchedMove; + source.baseMoveSlots[sketchIndex] = sketchedMove; + this.add('-activate', source, 'move: Mimic', move.name); + }, + }, + skillswap: { + inherit: true, + desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Multitype or Wonder Guard, or if both have the same Ability.", + onHit(target, source) { + let targetAbility = target.ability; + let sourceAbility = source.ability; + if (targetAbility === sourceAbility) { + return false; + } + this.add('-activate', source, 'move: Skill Swap'); + source.setAbility(targetAbility); + target.setAbility(sourceAbility); + }, + }, + skyuppercut: { + inherit: true, + desc: "This move can hit a target using Bounce or Fly.", + shortDesc: "Can hit Pokemon using Bounce or Fly.", + }, + slackoff: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down.", + }, + sleeptalk: { + inherit: true, + desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0 PP. This move cannot select Assist, Bide, Chatter, Copycat, Focus Punch, Me First, Metronome, Mirror Move, Sleep Talk, Uproar, or any two-turn move.", + beforeMoveCallback(pokemon) { + if (pokemon.volatiles['choicelock'] || pokemon.volatiles['encore']) { + this.addMove('move', pokemon, 'Sleep Talk'); + this.add('-fail', pokemon); + return true; + } + }, + }, + smellingsalts: { + inherit: true, + desc: "Power doubles if the target is paralyzed. If this move is successful, the target is cured of paralysis.", + }, + snatch: { + inherit: true, + desc: "If another Pokemon uses certain non-damaging moves this turn, the user steals that move to use itself. If multiple Pokemon use this move this turn, the applicable moves are stolen by each of those Pokemon in turn order, and only the last user in turn order will gain the effects.", + }, + softboiled: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP, rounded down.", + }, + solarbeam: { + inherit: true, + desc: "This attack charges on the first turn and executes on the second. Damage 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.", + }, + spiderweb: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field, unless it uses Baton Pass, in which case the target will remain trapped.", + }, + spikecannon: { + inherit: true, + desc: "Hits two to five times. Has a 3/8 chance to hit two or three times, and a 1/8 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. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + spikes: { + inherit: true, + flags: {}, + }, + spite: { + inherit: true, + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + spitup: { + inherit: true, + desc: "Power is equal to 100 times the user's Stockpile count. This move does not apply damage variance. Fails if the user's Stockpile count is 0. Unless there is no target, whether or not this move is successful the user's Defense and Special Defense decrease by as many stages as Stockpile had increased them, and the user's Stockpile count resets to 0.", + }, + stealthrock: { + inherit: true, + flags: {}, + }, + stomp: { + inherit: true, + desc: "Has a 30% chance to flinch the target. Power doubles if the target has used Minimize while active.", + }, + struggle: { + inherit: true, + desc: "Deals typeless damage to a random opposing Pokemon. If this move was successful, the user loses 1/4 of its maximum HP, rounded half up, and the Rock Head Ability does not prevent this. This move is automatically used if none of the user's known moves can be selected.", + onModifyMove(move) { + move.type = '???'; + }, + }, + submission: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP.", + }, + suckerpunch: { + inherit: true, + desc: "Fails if the target did not select a physical or special attack for use this turn, or if the target moves before the user.", + onTry(source, target) { + let action = this.willMove(target); + if (!action || action.choice !== 'move' || action.move.category === 'Status' || target.volatiles.mustrecharge) { + this.add('-fail', source); + return null; + } + }, + }, + surf: { + inherit: true, + desc: "Power doubles if the target is using Dive.", + shortDesc: "Hits adjacent Pokemon. Power doubles on Dive.", + }, + swallow: { + inherit: true, + desc: "The user restores its HP based on its Stockpile count. Restores 1/4 of its maximum HP if it's 1, 1/2 of its maximum HP if it's 2, both rounded down, and all of its HP if it's 3. Fails if the user's Stockpile count is 0. The user's Defense and Special Defense decrease by as many stages as Stockpile had increased them, and the user's Stockpile count resets to 0.", + }, + switcheroo: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail or Griseous Orb, if neither is holding an item, if either has the Multitype Ability, if either is under the effect of Knock Off, or if the target has the Sticky Hold Ability.", + }, + synthesis: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded down.", + onHit(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + this.heal(pokemon.maxhp * 2 / 3); + } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { + this.heal(pokemon.maxhp / 4); + } else { + this.heal(pokemon.maxhp / 2); + } + }, + }, + tackle: { + inherit: true, + accuracy: 95, + basePower: 35, + }, + tailglow: { + inherit: true, + desc: "Raises the user's Special Attack by 2 stages.", + shortDesc: "Raises the user's Sp. Atk by 2.", + boosts: { + spa: 2, + }, + }, + tailwind: { + inherit: true, + desc: "For 3 turns, the user and its party members have their Speed doubled. Fails if this move is already in effect for the user's side.", + shortDesc: "For 3 turns, allies' Speed is doubled.", + effect: { + duration: 3, + durationCallback(target, source, effect) { + if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); + return 5; + } + return 3; + }, + onStart(side) { + this.add('-sidestart', side, 'move: Tailwind'); + }, + onModifySpe(spe) { + return spe * 2; + }, + onResidualOrder: 21, + onResidualSubOrder: 4, + onEnd(side) { + this.add('-sideend', side, 'move: Tailwind'); + }, + }, + }, + takedown: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/4 the HP lost by the target, rounded down, but not less than 1 HP.", + }, + taunt: { + inherit: true, + desc: "For 3 to 5 turns, prevents the target from using non-damaging moves.", + shortDesc: "For 3-5 turns, the target can't use status moves.", + flags: {protect: 1, mirror: 1, authentic: 1}, + effect: { + durationCallback() { + return this.random(3, 6); + }, + onStart(target) { + this.add('-start', target, 'move: Taunt'); + }, + onResidualOrder: 12, + onEnd(target) { + this.add('-end', target, 'move: Taunt'); + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).category === 'Status') { + pokemon.disableMove(moveSlot.id); + } + } + }, + onBeforeMovePriority: 5, + onBeforeMove(attacker, defender, move) { + if (move.category === 'Status') { + this.add('cant', attacker, 'move: Taunt', move); + return false; + } + }, + }, + }, + thief: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Griseous Orb, or if the target has the Multitype Ability. Items lost to this move cannot be regained with Recycle.", + }, + thrash: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused at the end of the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + basePower: 90, + pp: 20, + onAfterMove() {}, + }, + thunder: { + inherit: true, + desc: "Has a 30% chance to paralyze the target. This move can hit a target using Bounce or Fly. If the weather is Rain Dance, this move does not check accuracy. If the weather is Sunny Day, this move's accuracy is 50%.", + }, + torment: { + inherit: true, + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + toxic: { + inherit: true, + accuracy: 85, + }, + toxicspikes: { + inherit: true, + desc: "Sets up a hazard on the opposing side of the field, poisoning each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Can be used up to two times before failing. Opposing Pokemon become poisoned with one layer and badly poisoned with two layers. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin successfully, is hit by Defog, or a grounded Poison-type Pokemon switches in. Safeguard prevents the opposing party from being poisoned on switch-in, as well as switching in with a substitute.", + flags: {}, + effect: { + // this is a side condition + onStart(side) { + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectData.layers = 1; + }, + onRestart(side) { + if (this.effectData.layers >= 2) return false; + this.add('-sidestart', side, 'move: Toxic Spikes'); + this.effectData.layers++; + }, + onSwitchIn(pokemon) { + if (!pokemon.runImmunity('Ground')) return; + if (!pokemon.runImmunity('Poison')) return; + if (pokemon.hasType('Poison')) { + this.add('-sideend', pokemon.side, 'move: Toxic Spikes', '[of] ' + pokemon); + pokemon.side.removeSideCondition('toxicspikes'); + } + if (pokemon.volatiles['substitute']) { + return; + } else if (this.effectData.layers >= 2) { + pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); + } else { + pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); + } + }, + }, + }, + transform: { + inherit: true, + desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, Ability, weight, IVs, species, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP. This move fails if the target has transformed.", + flags: {authentic: 1}, + }, + trick: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail or Griseous Orb, if neither is holding an item, if either has the Multitype Ability, if either is under the effect of Knock Off, or if the target has the Sticky Hold Ability.", + }, + trickroom: { + inherit: true, + desc: "For 5 turns, all active Pokemon with lower Speed will move before those with higher Speed, within their priority brackets. If this move is used during the effect, the effect ends.", + }, + triplekick: { + inherit: 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 a hit. If one of the hits breaks the target's substitute, it will take damage for the remaining hits. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + twineedle: { + inherit: true, + desc: "Hits twice, with each hit having a 20% chance to poison the target. If the first hit breaks the target's substitute, it will take damage for the second hit. If the target has a Focus Sash and had full HP when this move started, it will not be knocked out regardless of the number of hits.", + }, + twister: { + inherit: true, + desc: "Has a 20% chance to flinch the target. Power doubles if the target is using Bounce or Fly.", + }, + uproar: { + inherit: true, + desc: "The user spends three to six turns locked into this move. This move targets an opponent at random on each turn. During effect, no active Pokemon can fall asleep by any means, and Pokemon that are already asleep wake up as their turn starts or at the end of each turn, including the last one. If the user is prevented from moving or the attack is not successful against the target during one of the turns, the effect ends.", + shortDesc: "Lasts 3-6 turns. Active Pokemon cannot sleep.", + basePower: 50, + }, + uturn: { + inherit: true, + 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.", + }, + volttackle: { + inherit: true, + desc: "Has a 10% chance to paralyze the target. If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", + shortDesc: "Has 1/3 recoil. 10% chance to paralyze target.", + recoil: [1, 3], + }, + wakeupslap: { + inherit: true, + desc: "Power doubles if the target is asleep. If this move is successful, the target wakes up.", + }, + watersport: { + inherit: true, + desc: "While the user is active, all Fire-type attacks used by any active Pokemon have their power halved. Fails if this effect is already active for the user. Baton Pass can be used to transfer this effect to an ally.", + shortDesc: "Weakens Fire-type attacks to 1/2 their power.", + effect: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'move: Water Sport'); + }, + onBasePowerPriority: 3, + onAnyBasePower(basePower, user, target, move) { + if (move.type === 'Fire') return this.chainModify(0.5); + }, + }, + }, + whirlpool: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 70, + basePower: 15, + }, + whirlwind: { + inherit: true, + desc: "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, if the target used Ingrain previously or has the Suction Cups Ability, or if the user's level is lower than the target's and X * (user's level + target's level) / 256 + 1 is less than or equal to (target's level / 4), rounded down, where X is a random number from 0 to 255.", + flags: {protect: 1, mirror: 1, authentic: 1}, + }, + wish: { + inherit: true, + desc: "At the end of the next turn, the Pokemon at the user's position has 1/2 of its maximum HP restored to it, rounded down. Fails if this move is already in effect for the user's position.", + shortDesc: "Next turn, heals 50% of the recipient's max HP.", + flags: {heal: 1}, + sideCondition: 'Wish', + effect: { + duration: 2, + onResidualOrder: 0.5, + onEnd(side) { + let target = side.active[this.effectData.sourcePosition]; + if (!target.fainted) { + let source = this.effectData.source; + let damage = this.heal(target.maxhp / 2, target, target); + if (damage) this.add('-heal', target, target.getHealth, '[from] move: Wish', '[wisher] ' + source.name); + } + }, + }, + }, + woodhammer: { + inherit: true, + desc: "If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", + shortDesc: "Has 1/3 recoil.", + recoil: [1, 3], + }, + worryseed: { + inherit: true, + desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is Multitype or Truant.", + onTryHit(pokemon) { + let bannedAbilities = ['multitype', 'truant']; + if (bannedAbilities.includes(pokemon.ability)) { + return false; + } + }, + }, + wrap: { + inherit: true, + desc: "Prevents the target from switching for two to five turns (always five turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP, rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass or U-turn. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps and damages the target for 2-5 turns.", + accuracy: 85, + }, + wringout: { + inherit: true, + desc: "Power is equal to 120 * (target's current HP / target's maximum HP) + 1, rounded down.", + basePowerCallback(pokemon, target) { + return Math.floor(target.hp * 120 / target.maxhp) + 1; + }, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/gen4/pokedex.js b/data/mods/gen4/pokedex.js similarity index 63% rename from mods/gen4/pokedex.js rename to data/mods/gen4/pokedex.js index 2ddb1a2677b4d..af55f8e7ac7b0 100644 --- a/mods/gen4/pokedex.js +++ b/data/mods/gen4/pokedex.js @@ -1,6 +1,12 @@ 'use strict'; -exports.BattlePokedex = { +/**@type {{[k: string]: ModdedTemplateData}} */ +let BattlePokedex = { + milotic: { + inherit: true, + evoType: 'levelExtra', + evoCondition: 'with high Beauty', + }, rotomheat: { inherit: true, types: ["Electric", "Ghost"], @@ -22,3 +28,5 @@ exports.BattlePokedex = { types: ["Electric", "Ghost"], }, }; + +exports.BattlePokedex = BattlePokedex; diff --git a/mods/gen4/random-teams.js b/data/mods/gen4/random-teams.js similarity index 70% rename from mods/gen4/random-teams.js rename to data/mods/gen4/random-teams.js index 24a0a51ef20eb..ab2dddea2d233 100644 --- a/mods/gen4/random-teams.js +++ b/data/mods/gen4/random-teams.js @@ -3,7 +3,13 @@ const RandomGen5Teams = require('../../mods/gen5/random-teams'); class RandomGen4Teams extends RandomGen5Teams { - randomSet(template, slot, teamDetails) { + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {RandomTeamsTypes["TeamDetails"]} [teamDetails] + * @return {RandomTeamsTypes["RandomSet"]} + */ + randomSet(template, slot, teamDetails = {}) { if (slot === undefined) slot = 1; let baseTemplate = (template = this.getTemplate(template)); let species = template.species; @@ -12,12 +18,13 @@ class RandomGen4Teams extends RandomGen5Teams { template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../crashlogger')(err, 'The gen 4 randbat set generator'); + Monitor.crashlog(err, 'The gen 4 randbat set generator'); } if (template.battleOnly) species = template.baseSpecies; - let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : Object.keys(template.learnset)); + let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : template.learnset ? Object.keys(template.learnset) : []); + /**@type {string[]} */ let moves = []; let ability = ''; let item = ''; @@ -37,48 +44,44 @@ class RandomGen4Teams extends RandomGen5Teams { spd: 31, spe: 31, }; + /**@type {{[k: string]: true}} */ let hasType = {}; hasType[template.types[0]] = true; if (template.types[1]) { hasType[template.types[1]] = true; } + /**@type {{[k: string]: true}} */ let hasAbility = {}; hasAbility[template.abilities[0]] = true; if (template.abilities[1]) { + // @ts-ignore hasAbility[template.abilities[1]] = true; } let availableHP = 0; - for (let i = 0, len = movePool.length; i < len; i++) { - if (movePool[i].substr(0, 11) === 'hiddenpower') availableHP++; + for (const setMoveid of movePool) { + if (setMoveid.startsWith('hiddenpower')) availableHP++; } // These moves can be used even if we aren't setting up to use them: - let SetupException = { - closecombat:1, extremespeed:1, suckerpunch:1, superpower:1, - dracometeor:1, leafstorm:1, overheat:1, - }; - let counterAbilities = { - 'Adaptability':1, 'Hustle':1, 'Iron Fist':1, 'Skill Link':1, - }; + let SetupException = ['suckerpunch', 'dracometeor', 'overheat']; + let counterAbilities = ['Adaptability', 'Hustle', 'Iron Fist', 'Skill Link']; // Give recovery moves priority over certain other defensive status moves - let recoveryMoves = { - 'healorder':1, 'milkdrink':1, 'moonlight':1, 'morningsun':1, 'recover':1, 'rest':1, 'roost':1, 'slackoff':1, 'softboiled':1, 'synthesis':1, 'wish':1, - }; - let defensiveStatusMoves = { - 'aromatherapy':1, 'haze':1, 'healbell':1, 'roar':1, 'whirlwind':1, 'yawn':1, - }; + let recoveryMoves = ['healorder', 'milkdrink', 'moonlight', 'morningsun', 'painsplit', 'recover', 'rest', 'roost', 'slackoff', 'softboiled', 'synthesis', 'wish']; + let defensiveStatusMoves = ['aromatherapy', 'haze', 'healbell', 'roar', 'whirlwind', 'willowisp', 'yawn']; - let hasMove, counter; + /**@type {{[k: string]: boolean}} */ + let hasMove = {}; + let counter; do { // Keep track of all moves we have: hasMove = {}; - for (let k = 0; k < moves.length; k++) { - if (moves[k].substr(0, 11) === 'hiddenpower') { + for (const setMoveid of moves) { + if (setMoveid.startsWith('hiddenpower')) { hasMove['hiddenpower'] = true; } else { - hasMove[moves[k]] = true; + hasMove[setMoveid] = true; } } @@ -96,10 +99,13 @@ class RandomGen4Teams extends RandomGen5Teams { } counter = this.queryMoves(moves, hasType, hasAbility, movePool); + if (hasType['Dark'] && hasMove['suckerpunch'] && template.types.length === 1) { + counter['stab']++; + } // Iterate through the moves again, this time to cull them: - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); + for (const [i, setMoveid] of moves.entries()) { + let move = this.getMove(setMoveid); let moveid = move.id; let rejected = false; let isSetup = false; @@ -123,7 +129,7 @@ class RandomGen4Teams extends RandomGen5Teams { if (!(hasMove['calmmind'] && (hasMove['recover'] || hasMove['roost']))) rejected = true; break; case 'rest': - if (movePool.includes('sleeptalk')) rejected = true; + if (movePool.includes('sleeptalk') || hasAbility['Hydration'] && !hasMove['raindance']) rejected = true; break; case 'sleeptalk': if (!hasMove['rest']) rejected = true; @@ -141,13 +147,11 @@ class RandomGen4Teams extends RandomGen5Teams { // Set up once and only if we have the moves for it case 'bellydrum': case 'bulkup': case 'curse': case 'dragondance': case 'swordsdance': - if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) { - if (!hasMove['growth'] || hasMove['sunnyday']) rejected = true; - } + if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1 || hasMove['sunnyday']) rejected = true; if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; isSetup = true; break; - case 'calmmind': case 'growth': case 'nastyplot': case 'tailglow': + case 'calmmind': case 'nastyplot': case 'tailglow': if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; isSetup = true; @@ -159,8 +163,12 @@ class RandomGen4Teams extends RandomGen5Teams { break; // Bad after setup + case 'destinybond': + if (counter.setupType || hasMove['explosion']) rejected = true; + break; case 'explosion': case 'selfdestruct': - if (counter.stab < 2 || counter.setupType || !!counter['recovery'] || hasMove['rest'] || hasMove['substitute']) rejected = true; + if (counter.setupType === 'Special') rejected = true; + if (moves.some(id => recoveryMoves.includes(id) || defensiveStatusMoves.includes(id)) || hasMove['batonpass'] || hasMove['protect'] || hasMove['substitute']) rejected = true; break; case 'foresight': case 'roar': case 'whirlwind': if (counter.setupType && !hasAbility['Speed Boost']) rejected = true; @@ -178,15 +186,18 @@ class RandomGen4Teams extends RandomGen5Teams { case 'rapidspin': if (teamDetails.rapidSpin || counter.setupType && counter.Physical + counter.Special < 2) rejected = true; break; - case 'stealthrock': - if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] || teamDetails.stealthRock) rejected = true; - break; case 'reflect': case 'lightscreen': case 'fakeout': if (counter.setupType || !!counter['speedsetup'] || hasMove['substitute']) rejected = true; break; + case 'spikes': + if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] || hasMove['substitute']) rejected = true; + break; + case 'stealthrock': + if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] || hasMove['substitute'] || teamDetails.stealthRock) rejected = true; + break; case 'switcheroo': case 'trick': if (counter.Physical + counter.Special < 3 || counter.setupType) rejected = true; - if (hasMove['lightscreen'] || hasMove['reflect'] || hasMove['suckerpunch'] || hasMove['trickroom']) rejected = true; + if (hasMove['fakeout'] || hasMove['lightscreen'] || hasMove['reflect'] || hasMove['suckerpunch'] || hasMove['trickroom']) rejected = true; break; case 'toxic': case 'toxicspikes': if (counter.setupType || !!counter['speedsetup'] || teamDetails.toxicSpikes) rejected = true; @@ -208,7 +219,13 @@ class RandomGen4Teams extends RandomGen5Teams { case 'doubleedge': if (hasMove['bodyslam'] || hasMove['facade'] || hasMove['return']) rejected = true; break; - case 'judgment': + case 'endeavor': + if (slot > 0) rejected = true; + break; + case 'headbutt': + if (!hasMove['bodyslam'] && !hasMove['thunderwave']) rejected = true; + break; + case 'judgment': case 'swift': if (counter.setupType !== 'Special' && counter.stab > 1) rejected = true; break; case 'quickattack': @@ -245,10 +262,10 @@ class RandomGen4Teams extends RandomGen5Teams { if (hasMove['thunderbolt']) rejected = true; break; case 'energyball': - if (hasMove['grassknot'] || hasMove['leafblade'] || hasMove['woodhammer'] || (hasMove['sunnyday'] && hasMove['solarbeam'])) rejected = true; + if (hasMove['leafblade'] || hasMove['woodhammer'] || (hasMove['sunnyday'] && hasMove['solarbeam'])) rejected = true; break; - case 'grassknot': case 'seedbomb': - if (hasMove['energyball'] || hasMove['woodhammer'] || (hasMove['sunnyday'] && hasMove['solarbeam'])) rejected = true; + case 'grassknot': case 'leafblade': case 'seedbomb': + if (hasMove['woodhammer'] || (hasMove['sunnyday'] && hasMove['solarbeam'])) rejected = true; break; case 'leafstorm': if (counter.setupType || hasMove['batonpass'] || hasMove['powerwhip'] || (hasMove['sunnyday'] && hasMove['solarbeam'])) rejected = true; @@ -259,21 +276,23 @@ class RandomGen4Teams extends RandomGen5Teams { case 'icepunch': if (!counter.setupType && hasMove['icebeam']) rejected = true; break; - case 'aurasphere': case 'drainpunch': + case 'aurasphere': case 'drainpunch': case 'focusblast': if (hasMove['closecombat'] && counter.setupType !== 'Special') rejected = true; break; - case 'brickbreak': case 'closecombat': case 'crosschop': + case 'brickbreak': case 'closecombat': case 'crosschop': case 'lowkick': if (hasMove['substitute'] && hasMove['focuspunch']) rejected = true; break; - case 'focusblast': - if (hasMove['crosschop']) rejected = true; - break; case 'machpunch': if (hasType['Fighting'] && counter.stab < 2 && !hasAbility['Technician']) rejected = true; + if (hasMove['vacuumwave'] && counter.setupType !== 'Physical') rejected = true; + if (counter.damagingMoves.length <= counter['Fighting']) rejected = true; break; case 'seismictoss': if (hasMove['nightshade'] || counter.Physical + counter.Special >= 1) rejected = true; break; + case 'superpower': + if (hasMove['dragondance'] || !!counter['speedsetup']) rejected = true; + break; case 'gunkshot': if (hasMove['poisonjab']) rejected = true; break; @@ -286,17 +305,18 @@ class RandomGen4Teams extends RandomGen5Teams { case 'zenheadbutt': if (hasMove['psychocut']) rejected = true; break; - case 'rockslide': + case 'rockblast': case 'rockslide': if (hasMove['stoneedge']) rejected = true; break; case 'shadowclaw': - if (hasMove['shadowforce']) rejected = true; + if (hasMove['shadowforce'] || hasMove['suckerpunch'] && !hasType['Ghost']) rejected = true; break; case 'dragonclaw': if (hasMove['outrage']) rejected = true; break; case 'dracometeor': if (hasMove['calmmind'] || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (counter.setupType && counter.stab < 2) rejected = true; break; case 'crunch': case 'nightslash': if (hasMove['suckerpunch']) rejected = true; @@ -316,16 +336,22 @@ class RandomGen4Teams extends RandomGen5Teams { if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; break; case 'leechseed': case 'painsplit': - if (counter.setupType || !!counter['speedsetup'] || hasMove['moonlight'] || hasMove['rest'] || hasMove['synthesis']) rejected = true; + if (counter.setupType || !!counter['speedsetup'] || hasMove['rest']) rejected = true; + break; + case 'recover': case 'slackoff': + if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; break; case 'stunspore': - if (movePool.includes('sleeppowder') || movePool.includes('spore')) rejected = true; + if (counter.setupType || hasMove['toxic'] || movePool.includes('sleeppowder') || movePool.includes('spore')) rejected = true; break; case 'substitute': - if (hasMove['pursuit'] || hasMove['rest'] || hasMove['taunt']) rejected = true; + if (hasMove['pursuit'] || hasMove['rapidspin'] || hasMove['rest'] || hasMove['taunt']) rejected = true; break; case 'thunderwave': - if (hasMove['toxic'] || hasMove['trickroom']) rejected = true; + if (counter.setupType || hasMove['toxic'] || hasMove['trickroom'] || hasMove['bodyslam'] && hasAbility['Serene Grace']) rejected = true; + break; + case 'yawn': + if (hasMove['thunderwave'] || hasMove['toxic']) rejected = true; break; } @@ -337,41 +363,55 @@ class RandomGen4Teams extends RandomGen5Teams { // 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 - if (!SetupException[moveid] && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; + if (!SetupException.includes(moveid) && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; } - if (counter.setupType && !isSetup && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { - // Mono-attacking with setup and RestTalk is allowed - // Reject Status moves only if there is nothing else to reject - if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; + // @ts-ignore + if (counter.setupType && !isSetup && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass']) { + // Mono-attacking with setup and RestTalk or recovery + status healing is allowed + if (moveid !== 'rest' && moveid !== 'sleeptalk' && + !(recoveryMoves.includes(moveid) && (hasMove['healbell'] || hasMove['refresh'])) && + !((moveid === 'healbell' || moveid === 'refresh') && moves.some(id => !!recoveryMoves.includes(id)))) { + // Reject Status moves only if there is nothing else to reject + // @ts-ignore + if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; + } } if (counter.setupType === 'Special' && moveid === 'hiddenpower' && template.types.length > 1 && counter['Special'] <= 2 && !hasType[move.type] && !counter['Physical'] && counter['specialpool']) { // Hidden Power isn't good enough - rejected = true; + if (!(hasType['Ghost'] && move.type === 'Fighting' || hasType['Electric'] && move.type === 'Ice')) rejected = true; } // Reject defensive status moves if a reliable recovery move is available but not selected. - // Toxic is only defensive if used with another status move (Toxic + 3 attacks is ok). - if ((!!defensiveStatusMoves[moveid] || moveid === 'toxic' && counter.Status > 1) && !moves.some(id => !!recoveryMoves[id]) && movePool.some(id => !!recoveryMoves[id])) { + // Toxic is only defensive if used with another status move other than Protect (Toxic + 3 attacks and Toxic + Protect are ok). + if ((defensiveStatusMoves.includes(moveid) || moveid === 'toxic' && ((counter.Status > 1 && !hasMove['protect']) || counter.Status > 2)) && + !moves.some(id => recoveryMoves.includes(id)) && movePool.some(id => recoveryMoves.includes(id))) { rejected = true; } // Pokemon should have moves that benefit their Ability/Type/Weather, as well as moves required by its forme - if ((hasType['Dragon'] && !counter['Dragon']) || + if ((hasType['Bug'] && !counter['Bug'] && (movePool.includes('bugbuzz') || movePool.includes('megahorn'))) || + (hasType['Dragon'] && !counter['Dragon']) || (hasType['Electric'] && !counter['Electric']) || - (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'])) || + (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'] || movePool.includes('closecombat') || movePool.includes('highjumpkick'))) || (hasType['Fire'] && !counter['Fire']) || + (hasType['Flying'] && !counter['Flying'] && (counter.setupType !== 'Special' && movePool.includes('bravebird'))) || + (hasType['Grass'] && !counter['Grass'] && (movePool.includes('leafblade') || movePool.includes('leafstorm') || movePool.includes('seedflare') || movePool.includes('woodhammer'))) || (hasType['Ground'] && !counter['Ground']) || (hasType['Ice'] && !counter['Ice'] && (!hasType['Water'] || !counter['Water'])) || - (hasType['Psychic'] && !!counter['Psychic'] && !hasType['Flying'] && template.types.length > 1 && counter.stab < 2) || + (hasType['Rock'] && !counter['Rock'] && (movePool.includes('headsmash') || movePool.includes('stoneedge'))) || + (hasType['Steel'] && !counter['Steel'] && movePool.includes('meteormash')) || (hasType['Water'] && !counter['Water'] && (!hasType['Ice'] || !counter['Ice'])) || + // @ts-ignore ((hasAbility['Adaptability'] && !counter.setupType && template.types.length > 1 && (!counter[template.types[0]] || !counter[template.types[1]])) || (hasAbility['Guts'] && hasType['Normal'] && movePool.includes('facade')) || (hasAbility['Slow Start'] && movePool.includes('substitute')) || + // @ts-ignore (counter['defensesetup'] && !counter.recovery && !hasMove['rest']) || (template.requiredMove && movePool.includes(toId(template.requiredMove)))) && + // @ts-ignore (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3))) { // Reject Status or non-STAB - if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk') { + if (!isSetup && !move.weather && moveid !== 'judgment' && !recoveryMoves.includes(moveid) && moveid !== 'sleeptalk') { if (move.category === 'Status' || !hasType[move.type] || (move.basePower && move.basePower < 40 && !move.multihit)) rejected = true; } } @@ -390,7 +430,7 @@ class RandomGen4Teams extends RandomGen5Teams { // Remove rejected moves from the move list if (rejected && (movePool.length - availableHP || availableHP && (moveid === 'hiddenpower' || !hasMove['hiddenpower']))) { - moves.splice(k, 1); + moves.splice(i, 1); break; } } @@ -413,13 +453,13 @@ class RandomGen4Teams extends RandomGen5Teams { // If you have three or more attacks, and none of them are STAB, reject one of them at random. let rejectableMoves = []; let baseDiff = movePool.length - availableHP; - for (let l = 0; l < counter.damagingMoves.length; l++) { - if (baseDiff || availableHP && (!hasMove['hiddenpower'] || counter.damagingMoves[l].id === 'hiddenpower')) { - rejectableMoves.push(counter.damagingMoveIndex[counter.damagingMoves[l].id]); + for (const move of counter.damagingMoves) { + if (baseDiff || availableHP && (!hasMove['hiddenpower'] || move.id === 'hiddenpower')) { + rejectableMoves.push(counter.damagingMoveIndex[move.id]); } } if (rejectableMoves.length) { - moves.splice(rejectableMoves[this.random(rejectableMoves.length)], 1); + moves.splice(this.sample(rejectableMoves), 1); } } } @@ -437,35 +477,30 @@ class RandomGen4Teams extends RandomGen5Teams { ability = ability0.name; if (abilities[1]) { if (ability0.rating <= ability1.rating) { - if (this.random(2)) ability = ability1.name; + if (this.randomChance(1, 2)) ability = ability1.name; } else if (ability0.rating - 0.6 <= ability1.rating) { - if (!this.random(3)) ability = ability1.name; + if (this.randomChance(1, 3)) ability = ability1.name; } let rejectAbility = false; - if (ability in counterAbilities) { + if (counterAbilities.includes(ability)) { // Adaptability, Hustle, Iron Fist, Skill Link + // @ts-ignore rejectAbility = !counter[toId(ability)]; } else if (ability === 'Blaze') { rejectAbility = !counter['Fire']; } else if (ability === 'Chlorophyll') { - rejectAbility = !hasMove['sunnyday']; + rejectAbility = !hasMove['sunnyday'] && !teamDetails['sun']; } else if (ability === 'Compound Eyes' || ability === 'No Guard') { rejectAbility = !counter['inaccurate']; } else if (ability === 'Early Bird') { rejectAbility = !hasMove['rest']; } else if (ability === 'Gluttony') { rejectAbility = !hasMove['bellydrum']; - } else if (ability === 'Lightning Rod') { - rejectAbility = template.types.includes('Ground'); - } else if (ability === 'Limber') { - rejectAbility = template.types.includes('Electric'); } else if (ability === 'Mold Breaker') { rejectAbility = !hasMove['earthquake']; } else if (ability === 'Overgrow') { rejectAbility = !counter['Grass']; - } else if (ability === 'Poison Heal') { - rejectAbility = abilities.includes('Technician') && !!counter['technician']; } else if (ability === 'Reckless' || ability === 'Rock Head') { rejectAbility = !counter['recoil']; } else if (ability === 'Sand Veil') { @@ -473,21 +508,21 @@ class RandomGen4Teams extends RandomGen5Teams { } else if (ability === 'Serene Grace') { rejectAbility = !counter['serenegrace'] || template.id === 'chansey' || template.id === 'blissey'; } else if (ability === 'Simple') { - rejectAbility = !counter.setupType && !hasMove['cosmicpower'] && !hasMove['flamecharge']; + rejectAbility = !counter.setupType && !hasMove['cosmicpower']; } else if (ability === 'Snow Cloak') { rejectAbility = !teamDetails['hail']; } else if (ability === 'Solar Power') { - rejectAbility = !counter['Special']; + rejectAbility = !counter['Special'] || !hasMove['sunnyday'] && !teamDetails['sun']; } else if (ability === 'Speed Boost') { rejectAbility = hasMove['uturn']; - } else if (ability === 'Sturdy') { - rejectAbility = !!counter['recoil'] && !counter['recovery']; } else if (ability === 'Swift Swim') { rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; } else if (ability === 'Swarm') { rejectAbility = !counter['Bug']; } else if (ability === 'Synchronize') { rejectAbility = counter.Status < 2; + } else if (ability === 'Technician') { + rejectAbility = !counter['technician'] || hasMove['toxic']; } else if (ability === 'Tinted Lens') { rejectAbility = counter['damage'] >= counter.damagingMoves.length; } else if (ability === 'Torrent') { @@ -505,36 +540,30 @@ class RandomGen4Teams extends RandomGen5Teams { ability = 'Hydration'; } else if (abilities.includes('Swift Swim') && hasMove['raindance']) { ability = 'Swift Swim'; + } else if (abilities.includes('Technician') && hasMove['machpunch'] && hasType['Fighting'] && counter.stab < 2) { + ability = 'Technician'; } } - item = 'Leftovers'; if (template.requiredItems) { - item = template.requiredItems[this.random(template.requiredItems.length)]; + item = this.sample(template.requiredItems); // First, the extra high-priority items - } else if (template.species === 'Deoxys-Attack') { - item = (slot === 0 && hasMove['stealthrock']) ? 'Focus Sash' : 'Life Orb'; } else if (template.species === 'Farfetch\'d') { item = 'Stick'; } else if (template.species === 'Marowak') { item = 'Thick Club'; - } else if (template.species === 'Pikachu') { - item = 'Light Ball'; } else if (template.species === 'Shedinja' || template.species === 'Smeargle') { item = 'Focus Sash'; } else if (template.species === 'Unown') { item = 'Choice Specs'; } else if (template.species === 'Wobbuffet') { - item = hasMove['destinybond'] ? 'Custap Berry' : ['Leftovers', 'Sitrus Berry'][this.random(2)]; + item = hasMove['destinybond'] ? 'Custap Berry' : this.sample(['Leftovers', 'Sitrus Berry']); } else if (hasMove['switcheroo'] || hasMove['trick']) { - let randomNum = this.random(3); - if (counter.Physical >= 3 && (template.baseStats.spe < 60 || template.baseStats.spe > 108 || randomNum)) { - item = 'Choice Band'; - } else if (counter.Special >= 3 && (template.baseStats.spe < 60 || template.baseStats.spe > 108 || randomNum)) { - item = 'Choice Specs'; - } else { + if (template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.randomChance(2, 3)) { item = 'Choice Scarf'; + } else { + item = (counter.Physical > counter.Special) ? 'Choice Band' : 'Choice Specs'; } } else if (hasMove['bellydrum']) { item = 'Sitrus Berry'; @@ -554,40 +583,45 @@ class RandomGen4Teams extends RandomGen5Teams { item = 'Toxic Orb'; } else if (ability === 'Unburden') { item = 'Sitrus Berry'; + } else if (template.baseStats.hp + template.baseStats.def + template.baseStats.spd <= 150) { + item = slot === 0 ? 'Focus Sash' : 'Life Orb'; // Medium priority - } else if (counter.Physical >= 4 && !hasMove['fakeout'] && !hasMove['rapidspin'] && !hasMove['suckerpunch']) { - item = template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && !hasMove['bodyslam'] && this.random(3) ? 'Choice Scarf' : 'Choice Band'; - } else if ((counter.Special >= 4 || (counter.Special >= 3 && (hasMove['batonpass'] || hasMove['uturn']))) && !hasMove['chargebeam']) { - item = template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && ability !== 'Speed Boost' && !counter['priority'] && this.random(3) ? 'Choice Scarf' : 'Choice Specs'; - } else if (hasMove['endeavor'] || hasMove['flail'] || hasMove['reversal']) { + } else if (counter.Physical >= 4 && !(hasMove['bodyslam'] && ability === 'Serene Grace') && !hasMove['fakeout'] && !hasMove['rapidspin'] && !hasMove['suckerpunch']) { + item = template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && !hasMove['bodyslam'] && this.randomChance(2, 3) ? 'Choice Scarf' : 'Choice Band'; + } else if ((counter.Special >= 4 || (counter.Special >= 3 && (hasMove['batonpass'] || hasMove['uturn'] || hasMove['waterspout'] && hasMove['selfdestruct']))) && !hasMove['chargebeam']) { + item = template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && ability !== 'Speed Boost' && !counter['priority'] && this.randomChance(2, 3) ? 'Choice Scarf' : 'Choice Specs'; + } else if (hasMove['endeavor']) { item = 'Focus Sash'; - } else if (ability === 'Slow Start' || hasMove['curse'] || hasMove['detect'] || hasMove['leechseed'] || hasMove['protect'] || hasMove['roar'] || hasMove['sleeptalk'] || hasMove['whirlwind']) { + } else if (ability === 'Slow Start' || hasMove['curse'] || hasMove['detect'] || hasMove['leechseed'] || hasMove['protect'] || hasMove['roar'] || hasMove['sleeptalk'] || hasMove['whirlwind'] || + (ability === 'Serene Grace' && (hasMove['bodyslam'] || hasMove['headbutt'] || hasMove['ironhead']))) { item = 'Leftovers'; } else if (hasMove['outrage'] && counter.setupType) { item = 'Lum Berry'; } else if (hasMove['substitute']) { item = counter.damagingMoves.length < 2 || - !counter['drain'] && (counter.damagingMoves.length < 3 || template.baseStats.hp < 60 && template.baseStats.def + template.baseStats.spd < 180) ? 'Leftovers' : 'Life Orb'; + !counter['drain'] && (counter.damagingMoves.length < 3 || template.baseStats.hp >= 60 || template.baseStats.def + template.baseStats.spd >= 180) ? 'Leftovers' : 'Life Orb'; } else if (hasMove['lightscreen'] || hasMove['reflect']) { item = 'Light Clay'; } else if (template.species === 'Palkia' && !!counter['Dragon'] && !!counter['Water']) { item = 'Lustrous Orb'; + } else if (ability === 'Guts') { + item = 'Toxic Orb'; + } else if (slot === 0 && !counter['recoil'] && !moves.some(id => !!recoveryMoves.includes(id)) && template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 235) { + item = 'Focus Sash'; } else if (counter.damagingMoves.length >= 4) { - item = (!!counter['Normal'] || hasMove['chargebeam'] || hasMove['suckerpunch']) ? 'Life Orb' : 'Expert Belt'; + item = (!!counter['Normal'] || counter['Dragon'] > 1 || hasMove['chargebeam'] || hasMove['suckerpunch']) ? 'Life Orb' : 'Expert Belt'; } else if (counter.damagingMoves.length >= 3 && !hasMove['superfang'] && !hasMove['metalburst']) { let totalBulk = template.baseStats.hp + template.baseStats.def + template.baseStats.spd; item = (!!counter['speedsetup'] || !!counter['priority'] || hasMove['dragondance'] || hasMove['trickroom'] || totalBulk < 235 || (template.baseStats.spe >= 70 && (totalBulk < 260 || (!!counter['recovery'] && totalBulk < 285)))) ? 'Life Orb' : 'Leftovers'; - } else if (slot === 0 && !counter['recoil'] && !counter['recovery'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285) { - item = 'Focus Sash'; // This is the "REALLY can't think of a good item" cutoff } else if (hasType['Poison']) { item = 'Black Sludge'; } else if (this.getEffectiveness('Rock', template) >= 1 || hasMove['roar']) { item = 'Leftovers'; - } else if (counter.Status <= 1 && !hasMove['rapidspin']) { + } else if (counter.Status <= 1 && !hasMove['rapidspin'] && !hasMove['superfang']) { item = 'Life Orb'; } else { item = 'Leftovers'; @@ -602,14 +636,20 @@ class RandomGen4Teams extends RandomGen5Teams { LC: 87, NFE: 85, NU: 83, - BL2: 81, + NUBL: 81, UU: 79, - BL: 77, + UUBL: 77, OU: 75, Uber: 71, }; + let customScale = { + Ditto: 99, Unown: 99, + }; let tier = template.tier; + // @ts-ignore let level = levelScale[tier] || 75; + // @ts-ignore + if (customScale[template.name]) level = customScale[template.name]; // Prepare optimal HP let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); @@ -645,129 +685,16 @@ class RandomGen4Teams extends RandomGen5Teams { return { name: template.baseSpecies, species: species, + gender: template.gender, moves: moves, ability: ability, evs: evs, ivs: ivs, item: item, level: level, - shiny: !this.random(1024), + shiny: this.randomChance(1, 1024), }; } - randomTeam(side) { - let pokemon = []; - - let allowedNFE = {'Porygon2':1, 'Scyther':1}; - - let pokemonPool = []; - for (let id in this.data.FormatsData) { - let template = this.getTemplate(id); - if (template.gen > 4 || template.isNonstandard || !template.randomBattleMoves || template.nfe && !allowedNFE[template.species]) continue; - pokemonPool.push(id); - } - - let typeCount = {}; - let typeComboCount = {}; - let baseFormes = {}; - let uberCount = 0; - let nuCount = 0; - let teamDetails = {}; - - while (pokemonPool.length && pokemon.length < 6) { - let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); - if (!template.exists) continue; - - // Limit to one of each species (Species Clause) - if (baseFormes[template.baseSpecies]) continue; - - let tier = template.tier; - switch (tier) { - case 'Uber': - // Ubers are limited to 2 but have a 20% chance of being added anyway. - if (uberCount > 1 && this.random(5) >= 1) continue; - break; - case 'NU': - // NUs are limited to 2 but have a 20% chance of being added anyway. - if (nuCount > 1 && this.random(5) >= 1) continue; - } - - // Adjust rate for species with multiple formes - switch (template.baseSpecies) { - case 'Arceus': - if (this.random(17) >= 1) continue; - break; - case 'Castform': - if (this.random(4) >= 1) continue; - break; - case 'Cherrim': - if (this.random(2) >= 1) continue; - break; - case 'Rotom': - if (this.random(6) >= 1) continue; - break; - } - - let types = template.types; - - // Limit 2 of any type - let skip = false; - for (let t = 0; t < types.length; t++) { - if (typeCount[types[t]] > 1 && this.random(5) >= 1) { - skip = true; - break; - } - } - if (skip) continue; - - let set = this.randomSet(template, pokemon.length, teamDetails); - - // Limit 1 of any type combination - let typeCombo = types.slice().sort().join(); - if (set.ability === 'Drought' || set.ability === 'Drizzle' || set.ability === 'Sand Stream') { - // Drought, Drizzle and Sand Stream don't count towards the type combo limit - typeCombo = set.ability; - if (typeCombo in typeComboCount) continue; - } else { - if (typeComboCount[typeCombo] >= 1) continue; - } - - // Okay, the set passes, add it to our team - pokemon.push(set); - - // Now that our Pokemon has passed all checks, we can increment our counters - baseFormes[template.baseSpecies] = 1; - - // Increment type counters - for (let t = 0; t < types.length; t++) { - if (types[t] in typeCount) { - typeCount[types[t]]++; - } else { - typeCount[types[t]] = 1; - } - } - if (typeCombo in typeComboCount) { - typeComboCount[typeCombo]++; - } else { - typeComboCount[typeCombo] = 1; - } - - // Increment Uber/NU counters - if (tier === 'Uber') { - uberCount++; - } else if (tier === 'NU') { - nuCount++; - } - - // Team has - if (set.ability === 'Snow Warning') teamDetails['hail'] = 1; - if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails['rain'] = 1; - if (set.ability === 'Sand Stream') teamDetails['sand'] = 1; - if (set.moves.includes('stealthrock')) teamDetails['stealthRock'] = 1; - if (set.moves.includes('toxicspikes')) teamDetails['toxicSpikes'] = 1; - if (set.moves.includes('rapidspin')) teamDetails['rapidSpin'] = 1; - } - return pokemon; - } } module.exports = RandomGen4Teams; diff --git a/mods/gen4/rulesets.js b/data/mods/gen4/rulesets.js similarity index 53% rename from mods/gen4/rulesets.js rename to data/mods/gen4/rulesets.js index 9d48924d23099..1e5125755ba49 100644 --- a/mods/gen4/rulesets.js +++ b/data/mods/gen4/rulesets.js @@ -1,17 +1,20 @@ 'use strict'; -exports.BattleFormats = { +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { pokemon: { inherit: true, - onValidateSet: function (set) { + onValidateSet(set, format) { + if (!format || !this.getRuleTable(format).has('-illegal')) return; let template = this.getTemplate(set.species); let item = this.getItem(set.item); if (item && item.id === 'griseousorb' && template.num !== 487) { return ['Griseous Orb can only be held by Giratina in Generation 4.']; } - if (template.num === 493 && set.evs) { + if (template.num === 493 && set.evs && (set.moves.includes('roaroftime') || set.moves.includes('shadowforce') || set.moves.includes('spacialrend'))) { for (let stat in set.evs) { - if (set.evs[stat] > 100) return ["Arceus may not have more than 100 of any EVs in Generation 4."]; + // @ts-ignore + if (set.evs[stat] > 100) return ["Event Arceus may not have more than 100 of any EVs in Generation 4."]; } } }, @@ -23,3 +26,6 @@ exports.BattleFormats = { ], }, }; + +exports.BattleFormats = BattleFormats; + diff --git a/data/mods/gen4/scripts.js b/data/mods/gen4/scripts.js new file mode 100644 index 0000000000000..4de7998783501 --- /dev/null +++ b/data/mods/gen4/scripts.js @@ -0,0 +1,307 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + inherit: 'gen5', + gen: 4, + init() { + for (let i in this.data.Pokedex) { + delete this.data.Pokedex[i].abilities['H']; + } + }, + + modifyDamage(baseDamage, pokemon, target, move, suppressMessages = false) { + // DPP divides modifiers into several mathematically important stages + // The modifiers run earlier than other generations are called with ModifyDamagePhase1 and ModifyDamagePhase2 + + if (!move.type) move.type = '???'; + let type = move.type; + + // Burn + if (pokemon.status === 'brn' && baseDamage && move.category === 'Physical' && !pokemon.hasAbility('guts')) { + baseDamage = this.modify(baseDamage, 0.5); + } + + // Other modifiers (Reflect/Light Screen/etc) + baseDamage = this.runEvent('ModifyDamagePhase1', pokemon, target, move, baseDamage); + + // Double battle multi-hit + if (move.spreadHit) { + let spreadModifier = move.spreadModifier || 0.75; + this.debug('Spread modifier: ' + spreadModifier); + baseDamage = this.modify(baseDamage, spreadModifier); + } + + // Weather + baseDamage = this.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); + + if (this.gen === 3 && move.category === 'Physical' && !Math.floor(baseDamage)) { + baseDamage = 1; + } + + baseDamage += 2; + + if (move.crit) { + baseDamage = this.modify(baseDamage, move.critModifier || 2); + } + + // Mod 2 (Damage is floored after all multipliers are in) + baseDamage = Math.floor(this.runEvent('ModifyDamagePhase2', pokemon, target, move, baseDamage)); + + // this is not a modifier + baseDamage = this.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.modify(baseDamage, move.stab || 1.5); + } + // types + move.typeMod = target.runEffectiveness(move); + + move.typeMod = this.clampIntRange(move.typeMod, -6, 6); + if (move.typeMod > 0) { + if (!suppressMessages) this.add('-supereffective', target); + + for (let i = 0; i < move.typeMod; i++) { + baseDamage *= 2; + } + } + if (move.typeMod < 0) { + if (!suppressMessages) this.add('-resisted', target); + + for (let i = 0; i > move.typeMod; i--) { + baseDamage = Math.floor(baseDamage / 2); + } + } + + if (move.crit && !suppressMessages) this.add('-crit', target); + + // Final modifier. + baseDamage = this.runEvent('ModifyDamage', pokemon, target, move, baseDamage); + + if (!Math.floor(baseDamage)) { + return 1; + } + + return Math.floor(baseDamage); + }, + tryMoveHit(target, pokemon, move) { + this.setActiveMove(move, pokemon, target); + + let hitResult = this.singleEvent('PrepareHit', move, {}, target, pokemon, move); + if (!hitResult) { + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; + } + this.runEvent('PrepareHit', pokemon, target, move); + + if (!this.singleEvent('Try', move, null, pokemon, target, move)) { + return false; + } + + if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') { + if (move.target === 'all') { + hitResult = this.runEvent('TryHitField', target, pokemon, move); + } else { + hitResult = this.runEvent('TryHitSide', target, pokemon, move); + } + if (!hitResult) { + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; + } + return this.moveHit(target, pokemon, move); + } + + hitResult = this.runEvent('TryImmunity', target, pokemon, move); + if (!hitResult) { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon, target); + return false; + } + + if (move.ignoreImmunity === undefined) { + move.ignoreImmunity = (move.category === 'Status'); + } + + if ((!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type, true)) { + return false; + } + + let boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; + + // calculate true accuracy + /**@type {number | true} */ + let accuracy = move.accuracy; + let boosts, boost; + if (accuracy !== true) { + if (!move.ignoreAccuracy) { + boosts = this.runEvent('ModifyBoost', pokemon, null, null, Object.assign({}, pokemon.boosts)); + boost = this.clampIntRange(boosts['accuracy'], -6, 6); + if (boost > 0) { + accuracy *= boostTable[boost]; + } else { + accuracy /= boostTable[-boost]; + } + } + if (!move.ignoreEvasion) { + boosts = this.runEvent('ModifyBoost', target, null, null, Object.assign({}, target.boosts)); + boost = this.clampIntRange(boosts['evasion'], -6, 6); + if (boost > 0) { + accuracy /= boostTable[boost]; + } else if (boost < 0) { + accuracy *= boostTable[-boost]; + } + } + } + if (move.ohko) { // bypasses accuracy modifiers + if (!target.isSemiInvulnerable()) { + accuracy = 30; + if (pokemon.level >= target.level && (move.ohko === true || !target.hasType(move.ohko))) { + accuracy += (pokemon.level - target.level); + } else { + this.add('-immune', target, '[ohko]'); + return false; + } + } + } else { + accuracy = this.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + } + if (move.alwaysHit) { + accuracy = true; // bypasses ohko accuracy modifiers + } else { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + } + if (accuracy !== true && !this.randomChance(accuracy, 100)) { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon, target); + return false; + } + hitResult = this.runEvent('TryHit', target, pokemon, move); + if (!hitResult) { + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; + } + + if (move.breaksProtect && target.removeVolatile('protect')) { + if (move.id === 'feint') { + this.add('-activate', target, 'move: Feint'); + } else { + this.add('-activate', target, 'move: ' + move.name, '[broken]'); + } + } + + move.totalDamage = 0; + /** @type {number | undefined | false} */ + let damage = 0; + pokemon.lastDamage = 0; + if (move.multihit) { + let hits = move.multihit; + if (Array.isArray(hits)) { + // yes, it's hardcoded... meh + if (hits[0] === 2 && hits[1] === 5) { + hits = this.sample([2, 2, 2, 3, 3, 3, 4, 5]); + } else { + hits = this.random(hits[0], hits[1] + 1); + } + } + hits = Math.floor(hits); + let nullDamage = true; + /** @type {number | undefined | false} */ + let moveDamage; + // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep. + let isSleepUsable = move.sleepUsable || this.getMove(move.sourceEffect).sleepUsable; + let i; + for (i = 0; i < hits && target.hp && pokemon.hp; i++) { + if (pokemon.status === 'slp' && !isSleepUsable) break; + move.hit = i + 1; + + if (move.multiaccuracy && i > 0) { + accuracy = move.accuracy; + if (accuracy !== true) { + if (!move.ignoreAccuracy) { + boosts = this.runEvent('ModifyBoost', pokemon, null, null, Object.assign({}, pokemon.boosts)); + boost = this.clampIntRange(boosts['accuracy'], -6, 6); + if (boost > 0) { + accuracy *= boostTable[boost]; + } else { + accuracy /= boostTable[-boost]; + } + } + if (!move.ignoreEvasion) { + boosts = this.runEvent('ModifyBoost', target, null, null, Object.assign({}, target.boosts)); + boost = this.clampIntRange(boosts['evasion'], -6, 6); + if (boost > 0) { + accuracy /= boostTable[boost]; + } else if (boost < 0) { + accuracy *= boostTable[-boost]; + } + } + } + accuracy = this.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); + if (!move.alwaysHit) { + accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); + if (accuracy !== true && !this.randomChance(accuracy, 100)) break; + } + } + + moveDamage = this.moveHit(target, pokemon, move); + if (moveDamage === false) break; + if (nullDamage && (moveDamage || moveDamage === 0 || moveDamage === undefined)) nullDamage = false; + // Damage from each hit is individually counted for the + // purposes of Counter, Metal Burst, and Mirror Coat. + damage = (moveDamage || 0); + move.totalDamage += damage; + this.eachEvent('Update'); + } + if (i === 0) return false; + if (nullDamage) damage = false; + this.add('-hitcount', target, i); + } else { + damage = this.moveHit(target, pokemon, move); + move.totalDamage = damage; + } + + if (move.recoil && move.totalDamage) { + this.damage(this.calcRecoilDamage(move.totalDamage, move), pokemon, target, 'recoil'); + } + + if (move.struggleRecoil) { + this.directDamage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1), pokemon, pokemon, /** @type {Effect} */ ({id: 'strugglerecoil'})); + } + + if (target && pokemon !== target) target.gotAttacked(move, damage, pokemon); + + if (move.ohko) this.add('-ohko'); + + if (!damage && damage !== 0) return damage; + + this.eachEvent('Update'); + + if (target && !move.negateSecondary) { + this.singleEvent('AfterMoveSecondary', move, null, target, pokemon, move); + this.runEvent('AfterMoveSecondary', target, pokemon, move); + } + + return damage; + }, + + calcRecoilDamage(damageDealt, move) { + // @ts-ignore + return this.clampIntRange(Math.floor(damageDealt * move.recoil[0] / move.recoil[1]), 1); + }, +}; + +exports.BattleScripts = BattleScripts; diff --git a/mods/gen4/statuses.js b/data/mods/gen4/statuses.js similarity index 73% rename from mods/gen4/statuses.js rename to data/mods/gen4/statuses.js index fbbed9ffbbb24..f82d064f56d6c 100644 --- a/mods/gen4/statuses.js +++ b/data/mods/gen4/statuses.js @@ -1,24 +1,28 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { par: { inherit: true, - onBeforeMove: function (pokemon) { - if (!pokemon.hasAbility('magicguard') && this.random(4) === 0) { + onBeforeMove(pokemon) { + if (!pokemon.hasAbility('magicguard') && this.randomChance(1, 4)) { this.add('cant', pokemon, 'par'); return false; } }, }, slp: { + name: 'slp', + id: 'slp', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'slp'); // 1-4 turns this.effectData.time = this.random(2, 6); }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (pokemon.hasAbility('earlybird')) { pokemon.statusData.time--; } @@ -36,8 +40,8 @@ exports.BattleStatuses = { }, frz: { inherit: true, - onBeforeMove: function (pokemon, target, move) { - if (this.random(5) === 0) { + onBeforeMove(pokemon, target, move) { + if (this.randomChance(1, 5)) { pokemon.cureStatus(); return; } @@ -56,7 +60,7 @@ exports.BattleStatuses = { }, partiallytrapped: { inherit: true, - durationCallback: function (target, source) { + durationCallback(target, source) { if (source.hasItem('gripclaw')) return 6; return this.random(3, 7); }, @@ -68,3 +72,5 @@ exports.BattleStatuses = { counterMax: 8, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/mods/gen5/abilities.js b/data/mods/gen5/abilities.js similarity index 56% rename from mods/gen5/abilities.js rename to data/mods/gen5/abilities.js index 9a58ed9557277..b5b4d3f182f1d 100644 --- a/mods/gen5/abilities.js +++ b/data/mods/gen5/abilities.js @@ -1,56 +1,62 @@ 'use strict'; -exports.BattleAbilities = { +/**@type {{[k: string]: ModdedAbilityData}} */ +let BattleAbilities = { "frisk": { inherit: true, - desc: "When this Pokemon enters the field, it identifies the opponent's held item; in double battles, the held item of an unrevealed, randomly selected opponent is identified.", shortDesc: "On switch-in, this Pokemon identifies a random foe's held item.", - onStart: function (pokemon) { + onStart(pokemon) { let target = pokemon.side.foe.randomActive(); if (target && target.item) { this.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon); } }, }, + "infiltrator": { + inherit: true, + desc: "This Pokemon's moves ignore the opposing side's Reflect, Light Screen, Safeguard, and Mist.", + shortDesc: "This Pokemon's moves ignore the foe's Reflect, Light Screen, Safeguard, and Mist.", + }, "keeneye": { inherit: true, desc: "Prevents other Pokemon from lowering this Pokemon's accuracy stat stage.", shortDesc: "Prevents other Pokemon from lowering this Pokemon's accuracy stat stage.", - onModifyMove: function () {}, + onModifyMove() {}, }, "oblivious": { inherit: true, - desc: "This Pokemon cannot be infatuated (by Attract or Cute Charm). Gaining this Ability while infatuated cures it.", + desc: "This Pokemon cannot be infatuated. Gaining this Ability while infatuated cures it.", shortDesc: "This Pokemon cannot be infatuated. Gaining this Ability while infatuated cures it.", - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.volatiles['attract']) { pokemon.removeVolatile('attract'); this.add('-end', pokemon, 'move: Attract', '[from] ability: Oblivious'); } }, - onTryHit: function (pokemon, target, move) { + onTryHit(pokemon, target, move) { if (move.id === 'captivate') { - this.add('-immune', pokemon, '[msg]', '[from] Oblivious'); + this.add('-immune', pokemon, '[from] Oblivious'); return null; } }, + rating: 0.5, }, "overcoat": { inherit: true, - onTryHit: function () {}, + shortDesc: "This Pokemon is immune to damage from Sandstorm or Hail.", + onTryHit() {}, }, "sapsipper": { inherit: true, - desc: "This Pokemon is immune to Grass moves. If hit by a Grass move, its Attack is increased by one stage (once for each hit of Bullet Seed). Does not affect Aromatherapy.", - onAllyTryHitSide: function () {}, + onAllyTryHitSide() {}, }, "serenegrace": { inherit: true, - onModifyMove: function (move) { + onModifyMove(move) { if (move.secondaries && move.id !== 'secretpower') { this.debug('doubling secondary chance'); - for (let i = 0; i < move.secondaries.length; i++) { - move.secondaries[i].chance *= 2; + for (const secondary of move.secondaries) { + if (secondary.chance) secondary.chance *= 2; } } }, @@ -58,6 +64,8 @@ exports.BattleAbilities = { "soundproof": { inherit: true, shortDesc: "This Pokemon is immune to sound-based moves, except Heal Bell.", - onAllyTryHitSide: function () {}, + onAllyTryHitSide() {}, }, }; + +exports.BattleAbilities = BattleAbilities; diff --git a/mods/gen5/formats-data.js b/data/mods/gen5/formats-data.js similarity index 90% rename from mods/gen5/formats-data.js rename to data/mods/gen5/formats-data.js index 74c07c3131180..511a6b85b2eea 100644 --- a/mods/gen5/formats-data.js +++ b/data/mods/gen5/formats-data.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { inherit: true, randomBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "leechseed", "synthesis"], @@ -16,6 +17,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "swordsdance", "powerwhip", "leechseed", "synthesis", "earthquake"], maleOnlyHidden: true, tier: "OU", + doublesTier: "DOU", }, charmander: { inherit: true, @@ -33,6 +35,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["flamethrower", "fireblast", "substitute", "airslash", "dragonpulse", "hiddenpowergrass", "roost"], maleOnlyHidden: true, tier: "NU", + doublesTier: "DOU", }, squirtle: { inherit: true, @@ -44,12 +47,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["icebeam", "hydropump", "rapidspin", "scald", "aquajet", "toxic"], maleOnlyHidden: true, tier: "NU", + doublesTier: "NFE", }, blastoise: { inherit: true, randomBattleMoves: ["icebeam", "hydropump", "rapidspin", "scald", "aquajet", "toxic", "dragontail"], maleOnlyHidden: true, tier: "UU", + doublesTier: "DUU", }, caterpie: { randomBattleMoves: ["bugbite", "snore", "tackle", "electroweb"], @@ -63,6 +68,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["quiverdance", "roost", "bugbuzz", "substitute", "sleeppowder", "gigadrain"], tier: "NU", + doublesTier: "DUU", }, weedle: { randomBattleMoves: ["bugbite", "stringshot", "poisonsting", "electroweb"], @@ -76,6 +82,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["toxicspikes", "xscissor", "swordsdance", "uturn", "endeavor", "poisonjab", "drillrun", "brickbreak"], tier: "NU", + doublesTier: "DUU", }, pidgey: { randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "workup", "uturn"], @@ -90,6 +97,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["roost", "bravebird", "pursuit", "heatwave", "return", "workup", "uturn"], tier: "NU", + doublesTier: "DUU", }, rattata: { randomBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn"], @@ -97,8 +105,9 @@ exports.BattleFormatsData = { }, raticate: { inherit: true, - randomBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn"], + randomBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn", "swordsdance"], tier: "NU", + doublesTier: "DUU", }, spearow: { inherit: true, @@ -108,6 +117,7 @@ exports.BattleFormatsData = { fearow: { randomBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "quickattack", "pursuit", "drillrun", "roost"], tier: "NU", + doublesTier: "DUU", }, ekans: { inherit: true, @@ -118,6 +128,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["coil", "gunkshot", "seedbomb", "glare", "suckerpunch", "aquatail", "crunch", "earthquake", "rest"], tier: "NU", + doublesTier: "DUU", }, pichu: { inherit: true, @@ -128,10 +139,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["thunderbolt", "volttackle", "voltswitch", "grassknot", "hiddenpowerice", "brickbreak", "extremespeed", "encore", "substitute"], tier: "NU", + doublesTier: "NFE", }, raichu: { randomBattleMoves: ["nastyplot", "encore", "thunderbolt", "grassknot", "hiddenpowerice", "focusblast", "substitute", "extremespeed"], tier: "NU", + doublesTier: "DUU", }, sandshrew: { inherit: true, @@ -141,6 +154,7 @@ exports.BattleFormatsData = { sandslash: { randomBattleMoves: ["earthquake", "stoneedge", "swordsdance", "rapidspin", "xscissor", "stealthrock", "toxic"], tier: "RU", + doublesTier: "DUU", }, nidoranf: { randomBattleMoves: ["toxicspikes", "crunch", "poisonjab", "honeclaws"], @@ -153,6 +167,7 @@ exports.BattleFormatsData = { nidoqueen: { randomBattleMoves: ["toxicspikes", "stealthrock", "fireblast", "thunderbolt", "icebeam", "earthpower", "sludgewave", "focusblast"], tier: "UU", + doublesTier: "DUU", }, nidoranm: { randomBattleMoves: ["suckerpunch", "poisonjab", "headsmash", "honeclaws"], @@ -165,6 +180,7 @@ exports.BattleFormatsData = { nidoking: { randomBattleMoves: ["fireblast", "thunderbolt", "icebeam", "earthpower", "sludgewave", "focusblast"], tier: "UU", + doublesTier: "DUU", }, cleffa: { randomBattleMoves: ["reflect", "thunderwave", "lightscreen", "toxic", "fireblast", "encore", "wish", "protect", "aromatherapy"], @@ -177,6 +193,7 @@ exports.BattleFormatsData = { clefable: { randomBattleMoves: ["calmmind", "hypervoice", "softboiled", "fireblast", "thunderbolt", "icebeam"], tier: "RU", + doublesTier: "DUU", }, vulpix: { inherit: true, @@ -187,6 +204,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["flamethrower", "fireblast", "willowisp", "solarbeam", "nastyplot", "substitute", "toxic", "hypnosis", "painsplit"], tier: "OU", + doublesTier: "DOU", }, igglybuff: { inherit: true, @@ -200,6 +218,7 @@ exports.BattleFormatsData = { wigglytuff: { randomBattleMoves: ["wish", "thunderwave", "return", "thunderbolt", "healbell", "fireblast", "counter", "stealthrock", "icebeam"], tier: "NU", + doublesTier: "DUU", }, zubat: { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "whirlwind", "acrobatics", "heatwave", "superfang"], @@ -208,11 +227,13 @@ exports.BattleFormatsData = { golbat: { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "whirlwind", "acrobatics", "heatwave", "superfang"], tier: "NU", + doublesTier: "NFE", }, crobat: { inherit: true, randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "whirlwind", "acrobatics", "heatwave", "superfang"], tier: "UU", + doublesTier: "DUU", }, oddish: { inherit: true, @@ -227,10 +248,12 @@ exports.BattleFormatsData = { vileplume: { randomBattleMoves: ["gigadrain", "sludgebomb", "synthesis", "sleeppowder", "stunspore", "toxic", "hiddenpowerfire", "leechseed", "aromatherapy"], tier: "NU", + doublesTier: "DUU", }, bellossom: { randomBattleMoves: ["gigadrain", "sludgebomb", "synthesis", "sleeppowder", "stunspore", "toxic", "hiddenpowerfire", "leechseed", "leafstorm"], tier: "NU", + doublesTier: "DUU", }, paras: { inherit: true, @@ -240,6 +263,7 @@ exports.BattleFormatsData = { parasect: { randomBattleMoves: ["spore", "stunspore", "xscissor", "seedbomb", "synthesis", "leechseed", "aromatherapy"], tier: "NU", + doublesTier: "DUU", }, venonat: { randomBattleMoves: ["sleeppowder", "morningsun", "toxicspikes", "sludgebomb", "signalbeam", "stunspore"], @@ -248,7 +272,8 @@ exports.BattleFormatsData = { venomoth: { inherit: true, randomBattleMoves: ["sleeppowder", "roost", "toxicspikes", "quiverdance", "batonpass", "bugbuzz", "sludgebomb", "gigadrain", "substitute"], - tier: "BL2", + tier: "RUBL", + doublesTier: "DUU", }, diglett: { randomBattleMoves: ["earthquake", "rockslide", "stealthrock", "suckerpunch", "reversal", "substitute"], @@ -258,6 +283,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["earthquake", "stoneedge", "stealthrock", "suckerpunch", "reversal", "substitute"], tier: "OU", + doublesTier: "DUU", }, meowth: { inherit: true, @@ -267,6 +293,7 @@ exports.BattleFormatsData = { persian: { randomBattleMoves: ["fakeout", "uturn", "bite", "taunt", "return", "hypnosis", "waterpulse", "switcheroo"], tier: "NU", + doublesTier: "DUU", }, psyduck: { inherit: true, @@ -277,6 +304,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["hydropump", "surf", "icebeam", "hiddenpowergrass", "encore", "focusblast"], tier: "NU", + doublesTier: "DUU", }, mankey: { randomBattleMoves: ["closecombat", "uturn", "icepunch", "rockslide", "punishment"], @@ -286,6 +314,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["closecombat", "uturn", "icepunch", "stoneedge", "punishment", "encore"], tier: "NU", + doublesTier: "DUU", }, growlithe: { inherit: true, @@ -296,6 +325,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["flareblitz", "wildcharge", "hiddenpowergrass", "extremespeed", "closecombat", "morningsun", "willowisp"], tier: "UU", + doublesTier: "DOU", }, poliwag: { inherit: true, @@ -310,11 +340,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["substitute", "circlethrow", "focuspunch", "bulkup", "encore", "waterfall", "toxic", "rest", "sleeptalk", "icepunch"], tier: "RU", + doublesTier: "DUU", }, politoed: { inherit: true, randomBattleMoves: ["scald", "hypnosis", "toxic", "encore", "perishsong", "protect", "icebeam", "focusblast", "surf", "hydropump", "hiddenpowergrass"], tier: "OU", + doublesTier: "DOU", }, abra: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], @@ -323,11 +355,13 @@ exports.BattleFormatsData = { kadabra: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], tier: "NU", + doublesTier: "NFE", }, alakazam: { inherit: true, randomBattleMoves: ["calmmind", "psychic", "psyshock", "focusblast", "shadowball", "encore", "substitute"], tier: "OU", + doublesTier: "DUU", }, machop: { randomBattleMoves: ["dynamicpunch", "payback", "bulkup", "icepunch", "rockslide", "bulletpunch"], @@ -337,11 +371,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["dynamicpunch", "payback", "bulkup", "icepunch", "rockslide", "bulletpunch"], tier: "NU", + doublesTier: "NFE", }, machamp: { inherit: true, randomBattleMoves: ["dynamicpunch", "payback", "bulkup", "icepunch", "stoneedge", "bulletpunch"], tier: "UU", + doublesTier: "DUU", }, bellsprout: { inherit: true, @@ -356,6 +392,7 @@ exports.BattleFormatsData = { victreebel: { randomBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "powerwhip"], tier: "NU", + doublesTier: "DUU", }, tentacool: { randomBattleMoves: ["toxicspikes", "rapidspin", "scald", "sludgebomb", "icebeam", "knockoff", "gigadrain", "toxic"], @@ -364,6 +401,7 @@ exports.BattleFormatsData = { tentacruel: { randomBattleMoves: ["toxicspikes", "rapidspin", "scald", "sludgebomb", "icebeam", "knockoff", "gigadrain", "toxic"], tier: "OU", + doublesTier: "DUU", }, geodude: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch"], @@ -376,6 +414,7 @@ exports.BattleFormatsData = { golem: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch"], tier: "NU", + doublesTier: "DUU", }, ponyta: { randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "hypnosis", "flamecharge"], @@ -385,6 +424,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "hypnosis", "flamecharge", "megahorn", "drillrun"], tier: "NU", + doublesTier: "DUU", }, slowpoke: { inherit: true, @@ -394,10 +434,12 @@ exports.BattleFormatsData = { slowbro: { randomBattleMoves: ["scald", "surf", "fireblast", "icebeam", "psychic", "grassknot", "calmmind", "thunderwave", "toxic", "slackoff", "trickroom", "trick"], tier: "UU", + doublesTier: "DUU", }, slowking: { randomBattleMoves: ["scald", "surf", "fireblast", "icebeam", "psychic", "grassknot", "calmmind", "thunderwave", "toxic", "slackoff", "trickroom", "trick", "nastyplot"], tier: "RU", + doublesTier: "DUU", }, magnemite: { randomBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch"], @@ -407,15 +449,18 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch"], tier: "RU", + doublesTier: "NFE", }, magnezone: { randomBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch"], tier: "OU", + doublesTier: "DUU", }, farfetchd: { inherit: true, randomBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "roost"], tier: "NU", + doublesTier: "DUU", }, doduo: { randomBattleMoves: ["bravebird", "return", "doubleedge", "roost", "quickattack", "pursuit"], @@ -425,6 +470,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["bravebird", "return", "doubleedge", "roost", "quickattack", "pursuit"], tier: "NU", + doublesTier: "DUU", }, seel: { inherit: true, @@ -434,6 +480,7 @@ exports.BattleFormatsData = { dewgong: { randomBattleMoves: ["surf", "icebeam", "aquajet", "iceshard", "protect", "rest", "toxic", "drillrun"], tier: "NU", + doublesTier: "DUU", }, grimer: { inherit: true, @@ -443,6 +490,7 @@ exports.BattleFormatsData = { muk: { randomBattleMoves: ["curse", "gunkshot", "poisonjab", "shadowsneak", "payback", "brickbreak", "rest", "icepunch", "firepunch", "sleeptalk"], tier: "NU", + doublesTier: "DUU", }, shellder: { inherit: true, @@ -453,6 +501,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["shellsmash", "hydropump", "razorshell", "rockblast", "iciclespear", "iceshard", "rapidspin", "spikes", "toxicspikes"], tier: "OU", + doublesTier: "DOU", }, gastly: { randomBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "painsplit", "hypnosis", "gigadrain"], @@ -462,11 +511,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "painsplit", "hypnosis", "gigadrain", "trick"], tier: "NU", + doublesTier: "NFE", }, gengar: { inherit: true, randomBattleMoves: ["shadowball", "sludgebomb", "focusblast", "thunderbolt", "substitute", "disable", "painsplit", "hypnosis", "gigadrain", "trick"], tier: "OU", + doublesTier: "DOU", }, onix: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "dragontail", "curse"], @@ -475,6 +526,7 @@ exports.BattleFormatsData = { steelix: { randomBattleMoves: ["stealthrock", "earthquake", "ironhead", "curse", "roar", "toxic", "rockslide", "icefang", "firefang"], tier: "RU", + doublesTier: "DUU", }, drowzee: { inherit: true, @@ -485,6 +537,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["psychic", "seismictoss", "thunderwave", "wish", "protect", "toxic", "nastyplot", "shadowball", "trickroom", "batonpass", "calmmind", "barrier", "bellydrum", "zenheadbutt", "firepunch"], tier: "NU", + doublesTier: "DUU", }, krabby: { randomBattleMoves: ["crabhammer", "return", "swordsdance", "agility", "rockslide", "substitute", "xscissor", "superpower"], @@ -493,6 +546,7 @@ exports.BattleFormatsData = { kingler: { randomBattleMoves: ["crabhammer", "return", "swordsdance", "agility", "rockslide", "substitute", "xscissor", "superpower"], tier: "NU", + doublesTier: "DUU", }, voltorb: { inherit: true, @@ -502,6 +556,7 @@ exports.BattleFormatsData = { electrode: { randomBattleMoves: ["voltswitch", "thunderbolt", "taunt", "foulplay", "hiddenpowerice"], tier: "NU", + doublesTier: "DUU", }, exeggcute: { inherit: true, @@ -512,6 +567,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["substitute", "leechseed", "gigadrain", "leafstorm", "psychic", "sleeppowder", "stunspore", "hiddenpowerfire", "synthesis"], tier: "NU", + doublesTier: "DUU", }, cubone: { randomBattleMoves: ["substitute", "bonemerang", "doubleedge", "rockslide", "firepunch", "earthquake"], @@ -521,6 +577,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["substitute", "bonemerang", "doubleedge", "stoneedge", "swordsdance", "firepunch", "earthquake"], tier: "NU", + doublesTier: "DUU", }, tyrogue: { randomBattleMoves: ["highjumpkick", "rapidspin", "fakeout", "bulletpunch", "machpunch", "toxic", "counter"], @@ -532,18 +589,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["highjumpkick", "suckerpunch", "stoneedge", "machpunch", "substitute", "fakeout", "closecombat", "earthquake", "blazekick"], maleOnlyHidden: true, tier: "RU", + doublesTier: "DUU", }, hitmonchan: { inherit: true, randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "machpunch", "substitute", "closecombat", "stoneedge", "rapidspin"], maleOnlyHidden: true, tier: "RU", + doublesTier: "DUU", }, hitmontop: { inherit: true, randomBattleMoves: ["suckerpunch", "machpunch", "rapidspin", "closecombat", "stoneedge", "toxic"], maleOnlyHidden: true, tier: "UU", + doublesTier: "DOU", }, lickitung: { inherit: true, @@ -553,6 +613,7 @@ exports.BattleFormatsData = { lickilicky: { randomBattleMoves: ["wish", "protect", "dragontail", "curse", "bodyslam", "return", "powerwhip", "swordsdance", "earthquake", "toxic", "healbell", "explosion"], tier: "NU", + doublesTier: "DUU", }, koffing: { randomBattleMoves: ["painsplit", "sludgebomb", "willowisp", "fireblast", "toxic", "clearsmog", "rest", "sleeptalk", "thunderbolt"], @@ -561,6 +622,7 @@ exports.BattleFormatsData = { weezing: { randomBattleMoves: ["painsplit", "sludgebomb", "willowisp", "fireblast", "toxic", "clearsmog", "rest", "sleeptalk", "thunderbolt"], tier: "NU", + doublesTier: "DUU", }, rhyhorn: { randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast"], @@ -570,10 +632,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast"], tier: "RU", + doublesTier: "NFE", }, rhyperior: { randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast"], tier: "UU", + doublesTier: "DUU", }, happiny: { randomBattleMoves: ["aromatherapy", "toxic", "thunderwave", "counter", "endeavor"], @@ -582,27 +646,32 @@ exports.BattleFormatsData = { chansey: { inherit: true, randomBattleMoves: ["wish", "softboiled", "protect", "toxic", "aromatherapy", "seismictoss", "counter", "thunderwave", "stealthrock"], - tier: "BL", + tier: "UUBL", + doublesTier: "NFE", }, blissey: { inherit: true, - randomBattleMoves: ["wish", "softboiled", "protect", "toxic", "aromatherapy", "seismictoss", "counter", "thunderwave", "stealthrock", "flamethrower", "icebeam"], + randomBattleMoves: ["wish", "softboiled", "protect", "toxic", "aromatherapy", "seismictoss", "counter", "thunderwave", "stealthrock", "flamethrower"], tier: "OU", + doublesTier: "DUU", }, tangela: { inherit: true, randomBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerrock", "hiddenpowerice", "leechseed", "knockoff", "leafstorm", "stunspore", "synthesis"], tier: "NU", + doublesTier: "LC Uber", }, tangrowth: { inherit: true, randomBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerrock", "hiddenpowerice", "leechseed", "knockoff", "leafstorm", "stunspore", "focusblast", "synthesis", "powerwhip"], tier: "RU", + doublesTier: "DUU", }, kangaskhan: { inherit: true, randomBattleMoves: ["fakeout", "return", "hammerarm", "doubleedge", "suckerpunch", "earthquake", "substitute", "focuspunch", "wish"], tier: "NU", + doublesTier: "DUU", }, horsea: { inherit: true, @@ -613,11 +682,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["hydropump", "icebeam", "agility", "substitute", "hiddenpowergrass"], tier: "NU", + doublesTier: "NFE", }, kingdra: { inherit: true, randomBattleMoves: ["hydropump", "icebeam", "dragondance", "substitute", "outrage", "dracometeor", "waterfall", "rest", "sleeptalk"], tier: "UU", + doublesTier: "DOU", }, goldeen: { randomBattleMoves: ["raindance", "waterfall", "megahorn", "return", "drillrun"], @@ -626,6 +697,7 @@ exports.BattleFormatsData = { seaking: { randomBattleMoves: ["raindance", "waterfall", "megahorn", "return", "drillrun"], tier: "NU", + doublesTier: "DUU", }, staryu: { inherit: true, @@ -636,6 +708,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["surf", "thunderbolt", "icebeam", "rapidspin", "recover", "psychic", "trick"], tier: "OU", + doublesTier: "DUU", }, mimejr: { randomBattleMoves: ["substitute", "batonpass", "psychic", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore"], @@ -645,16 +718,19 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["substitute", "batonpass", "psychic", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore"], tier: "NU", + doublesTier: "DUU", }, scyther: { inherit: true, randomBattleMoves: ["swordsdance", "roost", "bugbite", "quickattack", "brickbreak", "aerialace", "batonpass", "uturn"], tier: "RU", + doublesTier: "LC Uber", }, scizor: { inherit: true, randomBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "batonpass", "pursuit"], tier: "OU", + doublesTier: "DOU", }, smoochum: { randomBattleMoves: ["icebeam", "psychic", "hiddenpowerfighting", "trick", "shadowball", "grassknot"], @@ -662,7 +738,8 @@ exports.BattleFormatsData = { }, jynx: { randomBattleMoves: ["icebeam", "psychic", "focusblast", "trick", "shadowball", "nastyplot", "lovelykiss", "substitute", "energyball"], - tier: "BL3", + tier: "NUBL", + doublesTier: "DUU", }, elekid: { inherit: true, @@ -673,11 +750,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["thunderbolt", "voltswitch", "substitute", "hiddenpowerice", "focusblast", "psychic"], tier: "NU", + doublesTier: "NFE", }, electivire: { inherit: true, randomBattleMoves: ["wildcharge", "crosschop", "icepunch", "substitute", "flamethrower", "earthquake"], tier: "RU", + doublesTier: "DOU", }, magby: { randomBattleMoves: ["flareblitz", "substitute", "fireblast", "hiddenpowergrass", "crosschop", "thunderpunch", "overheat"], @@ -692,16 +771,19 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["fireblast", "substitute", "focusblast", "hiddenpowergrass", "thunderbolt", "overheat"], tier: "RU", + doublesTier: "DUU", }, pinsir: { inherit: true, randomBattleMoves: ["swordsdance", "xscissor", "earthquake", "closecombat", "stealthrock", "substitute", "stoneedge", "quickattack"], tier: "NU", + doublesTier: "DUU", }, tauros: { inherit: true, randomBattleMoves: ["return", "earthquake", "zenheadbutt", "rockslide", "pursuit"], tier: "NU", + doublesTier: "DUU", }, magikarp: { inherit: true, @@ -711,15 +793,18 @@ exports.BattleFormatsData = { gyarados: { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "rest", "sleeptalk", "dragontail", "stoneedge", "substitute", "icefang"], tier: "OU", + doublesTier: "DOU", }, lapras: { inherit: true, - randomBattleMoves: ["icebeam", "thunderbolt", "healbell", "toxic", "surf", "dragondance", "substitute", "waterfall", "return", "avalanche", "rest", "sleeptalk", "curse", "iceshard", "drillrun"], + randomBattleMoves: ["icebeam", "thunderbolt", "healbell", "toxic", "surf", "dragondance", "waterfall", "return", "avalanche", "rest", "sleeptalk", "curse", "iceshard", "drillrun"], tier: "NU", + doublesTier: "DUU", }, ditto: { randomBattleMoves: ["transform"], tier: "NU", + doublesTier: "DUU", }, eevee: { inherit: true, @@ -730,36 +815,43 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["wish", "protect", "scald", "roar", "icebeam", "toxic", "hydropump"], tier: "OU", + doublesTier: "DOU", }, jolteon: { inherit: true, randomBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowergrass", "hiddenpowerice", "chargebeam", "batonpass", "substitute"], tier: "OU", + doublesTier: "DOU", }, flareon: { inherit: true, randomBattleMoves: ["rest", "sleeptalk", "flamecharge", "facade"], tier: "NU", + doublesTier: "DUU", }, espeon: { inherit: true, randomBattleMoves: ["psychic", "psyshock", "substitute", "wish", "shadowball", "hiddenpowerfighting", "calmmind", "morningsun", "storedpower", "batonpass"], tier: "OU", + doublesTier: "DOU", }, umbreon: { inherit: true, randomBattleMoves: ["curse", "payback", "moonlight", "wish", "protect", "healbell", "toxic", "batonpass", "foulplay"], tier: "UU", + doublesTier: "DUU", }, leafeon: { inherit: true, randomBattleMoves: ["swordsdance", "leafblade", "substitute", "return", "xscissor", "yawn", "roar", "healbell", "batonpass"], tier: "NU", + doublesTier: "DUU", }, glaceon: { inherit: true, randomBattleMoves: ["icebeam", "hiddenpowerground", "shadowball", "wish", "protect"], tier: "NU", + doublesTier: "DUU", }, porygon: { inherit: true, @@ -769,10 +861,12 @@ exports.BattleFormatsData = { porygon2: { randomBattleMoves: ["triattack", "icebeam", "recover", "toxic", "thunderwave", "discharge"], tier: "UU", + doublesTier: "NFE", }, porygonz: { randomBattleMoves: ["triattack", "thunderbolt", "icebeam", "darkpulse", "hiddenpowerfighting", "agility", "trick", "nastyplot"], tier: "UU", + doublesTier: "DUU", }, omanyte: { inherit: true, @@ -782,6 +876,7 @@ exports.BattleFormatsData = { omastar: { randomBattleMoves: ["shellsmash", "surf", "icebeam", "earthpower", "hiddenpowerelectric", "spikes", "toxicspikes", "stealthrock", "hydropump"], tier: "RU", + doublesTier: "DUU", }, kabuto: { inherit: true, @@ -791,36 +886,43 @@ exports.BattleFormatsData = { kabutops: { randomBattleMoves: ["aquajet", "stoneedge", "rapidspin", "stealthrock", "swordsdance", "waterfall", "toxic", "superpower"], tier: "RU", + doublesTier: "DUU", }, aerodactyl: { inherit: true, randomBattleMoves: ["stealthrock", "taunt", "stoneedge", "rockslide", "earthquake", "aquatail", "roost", "firefang"], tier: "RU", + doublesTier: "DUU", }, munchlax: { inherit: true, randomBattleMoves: ["rest", "curse", "sleeptalk", "bodyslam", "earthquake", "return", "firepunch", "icepunch", "whirlwind"], tier: "NU", + doublesTier: "LC", }, snorlax: { inherit: true, randomBattleMoves: ["rest", "curse", "sleeptalk", "bodyslam", "earthquake", "return", "firepunch", "icepunch", "crunch", "selfdestruct", "pursuit", "whirlwind"], tier: "UU", + doublesTier: "DUU", }, articuno: { inherit: true, randomBattleMoves: ["icebeam", "roost", "roar", "healbell", "toxic", "substitute", "hurricane"], tier: "NU", + doublesTier: "DUU", }, zapdos: { inherit: true, randomBattleMoves: ["thunderbolt", "heatwave", "hiddenpowergrass", "hiddenpowerice", "roost", "toxic", "substitute"], tier: "UU", + doublesTier: "DOU", }, moltres: { inherit: true, randomBattleMoves: ["fireblast", "hiddenpowergrass", "airslash", "roost", "substitute", "toxic", "uturn", "willowisp", "hurricane"], tier: "RU", + doublesTier: "DUU", }, dratini: { randomBattleMoves: ["dragondance", "outrage", "waterfall", "fireblast", "extremespeed", "dracometeor", "substitute", "aquatail"], @@ -829,21 +931,25 @@ exports.BattleFormatsData = { dragonair: { randomBattleMoves: ["dragondance", "outrage", "waterfall", "fireblast", "extremespeed", "dracometeor", "substitute", "aquatail"], tier: "NU", + doublesTier: "NFE", }, dragonite: { inherit: true, - randomBattleMoves: ["dragondance", "outrage", "firepunch", "extremespeed", "dragonclaw", "earthquake", "roost", "waterfall", "substitute", "thunderwave", "dragontail", "hurricane", "superpower", "dracometeor"], + randomBattleMoves: ["dragondance", "outrage", "firepunch", "extremespeed", "dragonclaw", "earthquake", "roost", "substitute", "thunderwave", "dragontail", "hurricane", "superpower", "dracometeor"], tier: "OU", + doublesTier: "DOU", }, mewtwo: { inherit: true, randomBattleMoves: ["psystrike", "aurasphere", "fireblast", "icebeam", "calmmind", "substitute", "recover", "thunderbolt"], tier: "Uber", + doublesTier: "DUber", }, mew: { inherit: true, randomBattleMoves: ["taunt", "willowisp", "roost", "psychic", "nastyplot", "aurasphere", "fireblast", "swordsdance", "superpower", "zenheadbutt", "batonpass", "rockpolish", "substitute", "toxic", "icebeam", "thunderbolt", "earthquake", "uturn", "stealthrock"], tier: "UU", + doublesTier: "DUU", }, chikorita: { inherit: true, @@ -857,6 +963,7 @@ exports.BattleFormatsData = { meganium: { randomBattleMoves: ["reflect", "lightscreen", "safeguard", "aromatherapy", "grasswhistle", "leechseed", "toxic", "gigadrain", "synthesis", "dragontail"], tier: "NU", + doublesTier: "DUU", }, cyndaquil: { inherit: true, @@ -871,6 +978,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["eruption", "fireblast", "flamethrower", "hiddenpowergrass", "naturepower", "focusblast"], tier: "RU", + doublesTier: "DUU", }, totodile: { inherit: true, @@ -884,6 +992,7 @@ exports.BattleFormatsData = { feraligatr: { randomBattleMoves: ["aquajet", "waterfall", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake", "superpower"], tier: "RU", + doublesTier: "DUU", }, sentret: { randomBattleMoves: ["superfang", "trick", "toxic", "uturn", "knockoff"], @@ -892,6 +1001,7 @@ exports.BattleFormatsData = { furret: { randomBattleMoves: ["return", "uturn", "suckerpunch", "trick", "icepunch", "firepunch", "thunderpunch"], tier: "NU", + doublesTier: "DUU", }, hoothoot: { inherit: true, @@ -901,6 +1011,7 @@ exports.BattleFormatsData = { noctowl: { randomBattleMoves: ["roost", "whirlwind", "airslash", "nightshade", "toxic", "reflect", "magiccoat"], tier: "NU", + doublesTier: "DUU", }, ledyba: { inherit: true, @@ -910,6 +1021,7 @@ exports.BattleFormatsData = { ledian: { randomBattleMoves: ["roost", "bugbuzz", "lightscreen", "encore", "reflect", "knockoff", "toxic"], tier: "NU", + doublesTier: "DUU", }, spinarak: { inherit: true, @@ -919,6 +1031,7 @@ exports.BattleFormatsData = { ariados: { randomBattleMoves: ["agility", "toxic", "xscissor", "toxicspikes", "poisonjab", "batonpass"], tier: "NU", + doublesTier: "DUU", }, chinchou: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowergrass", "hydropump", "icebeam", "surf", "thunderwave", "scald", "discharge"], @@ -927,6 +1040,7 @@ exports.BattleFormatsData = { lanturn: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowergrass", "hydropump", "icebeam", "surf", "thunderwave", "scald", "discharge"], tier: "RU", + doublesTier: "DUU", }, togepi: { inherit: true, @@ -936,20 +1050,24 @@ exports.BattleFormatsData = { togetic: { randomBattleMoves: ["nastyplot", "hypervoice", "fireblast", "batonpass", "roost"], tier: "NU", + doublesTier: "NFE", }, togekiss: { inherit: true, randomBattleMoves: ["wish", "roost", "thunderwave", "nastyplot", "airslash", "aurasphere", "batonpass"], tier: "UU", + doublesTier: "DOU", }, natu: { inherit: true, randomBattleMoves: ["thunderwave", "roost", "toxic", "reflect", "lightscreen", "uturn", "wish", "psychic", "nightshade"], tier: "NU", + doublesTier: "LC", }, xatu: { randomBattleMoves: ["thunderwave", "toxic", "roost", "psychic", "nightshade", "uturn", "reflect", "lightscreen", "wish", "calmmind"], tier: "UU", + doublesTier: "DUU", }, mareep: { inherit: true, @@ -963,6 +1081,7 @@ exports.BattleFormatsData = { ampharos: { randomBattleMoves: ["voltswitch", "focusblast", "hiddenpowerice", "hiddenpowergrass", "thunderbolt", "healbell"], tier: "NU", + doublesTier: "DUU", }, azurill: { randomBattleMoves: ["scald", "return", "doubleedge", "encore", "toxic", "protect"], @@ -975,6 +1094,7 @@ exports.BattleFormatsData = { azumarill: { randomBattleMoves: ["waterfall", "aquajet", "return", "doubleedge", "icepunch", "superpower"], tier: "UU", + doublesTier: "DUU", }, bonsly: { randomBattleMoves: ["rockslide", "brickbreak", "doubleedge", "toxic", "stealthrock", "suckerpunch"], @@ -983,6 +1103,7 @@ exports.BattleFormatsData = { sudowoodo: { randomBattleMoves: ["hammerarm", "stoneedge", "earthquake", "suckerpunch", "woodhammer", "explosion", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, hoppip: { randomBattleMoves: ["encore", "sleeppowder", "uturn", "toxic", "leechseed", "substitute", "protect"], @@ -996,6 +1117,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["encore", "sleeppowder", "uturn", "toxic", "leechseed", "substitute", "gigadrain", "acrobatics", "synthesis"], tier: "NU", + doublesTier: "DUU", }, aipom: { inherit: true, @@ -1005,6 +1127,7 @@ exports.BattleFormatsData = { ambipom: { randomBattleMoves: ["fakeout", "return", "payback", "uturn", "lowsweep", "switcheroo", "seedbomb"], tier: "UU", + doublesTier: "DUU", }, sunkern: { inherit: true, @@ -1014,6 +1137,7 @@ exports.BattleFormatsData = { sunflora: { randomBattleMoves: ["sunnyday", "leafstorm", "gigadrain", "solarbeam", "hiddenpowerfire", "earthpower"], tier: "NU", + doublesTier: "DUU", }, yanma: { randomBattleMoves: ["bugbuzz", "airslash", "hiddenpowerground", "uturn", "protect", "gigadrain"], @@ -1022,6 +1146,7 @@ exports.BattleFormatsData = { yanmega: { randomBattleMoves: ["bugbuzz", "airslash", "hiddenpowerground", "uturn", "protect", "gigadrain"], tier: "UU", + doublesTier: "DUU", }, wooper: { randomBattleMoves: ["recover", "earthquake", "scald", "toxic", "stockpile", "yawn", "protect"], @@ -1030,28 +1155,34 @@ exports.BattleFormatsData = { quagsire: { randomBattleMoves: ["recover", "earthquake", "waterfall", "scald", "toxic", "curse", "stoneedge", "stockpile", "yawn"], tier: "RU", + doublesTier: "DUU", }, murkrow: { inherit: true, randomBattleMoves: ["substitute", "suckerpunch", "bravebird", "heatwave", "hiddenpowergrass", "roost", "darkpulse", "thunderwave"], tier: "NU", + doublesTier: "LC Uber", }, honchkrow: { randomBattleMoves: ["substitute", "superpower", "suckerpunch", "bravebird", "roost", "hiddenpowergrass", "heatwave", "pursuit"], tier: "UU", + doublesTier: "DUU", }, misdreavus: { inherit: true, randomBattleMoves: ["nastyplot", "substitute", "calmmind", "willowisp", "shadowball", "thunderbolt", "hiddenpowerfighting"], tier: "NU", + doublesTier: "LC", }, mismagius: { randomBattleMoves: ["nastyplot", "substitute", "calmmind", "willowisp", "shadowball", "thunderbolt", "hiddenpowerfighting"], tier: "UU", + doublesTier: "DUU", }, unown: { randomBattleMoves: ["hiddenpowerpsychic"], tier: "NU", + doublesTier: "DUU", }, wynaut: { inherit: true, @@ -1061,11 +1192,13 @@ exports.BattleFormatsData = { wobbuffet: { inherit: true, randomBattleMoves: ["destinybond", "counter", "mirrorcoat", "encore"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, girafarig: { randomBattleMoves: ["psychic", "thunderbolt", "calmmind", "batonpass", "agility", "hypervoice", "thunderwave"], tier: "NU", + doublesTier: "DUU", }, pineco: { inherit: true, @@ -1075,19 +1208,23 @@ exports.BattleFormatsData = { forretress: { randomBattleMoves: ["rapidspin", "toxicspikes", "spikes", "bugbite", "earthquake", "voltswitch", "stealthrock"], tier: "OU", + doublesTier: "DUU", }, dunsparce: { randomBattleMoves: ["coil", "rockslide", "bite", "headbutt", "glare", "thunderwave", "bodyslam", "roost"], tier: "NU", + doublesTier: "DUU", }, gligar: { inherit: true, randomBattleMoves: ["stealthrock", "toxic", "roost", "taunt", "swordsdance", "earthquake", "uturn", "stoneedge", "acrobatics"], tier: "UU", + doublesTier: "LC Uber", }, gliscor: { - randomBattleMoves: ["swordsdance", "acrobatics", "earthquake", "roost", "substitute", "taunt", "icefang", "protect", "toxic", "stealthrock"], + randomBattleMoves: ["swordsdance", "earthquake", "roost", "substitute", "taunt", "icefang", "protect", "toxic", "stealthrock"], tier: "OU", + doublesTier: "DOU", }, snubbull: { inherit: true, @@ -1097,30 +1234,36 @@ exports.BattleFormatsData = { granbull: { randomBattleMoves: ["thunderwave", "return", "crunch", "closecombat", "healbell", "icepunch"], tier: "NU", + doublesTier: "DUU", }, qwilfish: { inherit: true, randomBattleMoves: ["toxicspikes", "waterfall", "spikes", "swordsdance", "poisonjab", "painsplit", "thunderwave", "taunt", "destinybond"], tier: "RU", + doublesTier: "DUU", }, shuckle: { inherit: true, randomBattleMoves: ["rollout", "acupressure", "powersplit", "rest"], tier: "NU", + doublesTier: "DUU", }, heracross: { randomBattleMoves: ["closecombat", "megahorn", "stoneedge", "swordsdance", "facade"], tier: "UU", + doublesTier: "DUU", }, sneasel: { inherit: true, randomBattleMoves: ["iceshard", "icepunch", "lowkick", "pursuit", "swordsdance"], tier: "NU", + doublesTier: "LC Uber", }, weavile: { inherit: true, randomBattleMoves: ["iceshard", "icepunch", "nightslash", "lowkick", "pursuit", "swordsdance"], tier: "UU", + doublesTier: "DOU", }, teddiursa: { inherit: true, @@ -1130,6 +1273,7 @@ exports.BattleFormatsData = { ursaring: { randomBattleMoves: ["swordsdance", "protect", "facade", "closecombat", "firepunch", "crunch"], tier: "NU", + doublesTier: "DUU", }, slugma: { randomBattleMoves: ["stockpile", "recover", "lavaplume", "willowisp", "toxic", "hiddenpowergrass"], @@ -1139,6 +1283,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["stockpile", "recover", "lavaplume", "willowisp", "toxic", "hiddenpowergrass", "hiddenpowerrock", "stealthrock", "shellsmash", "fireblast", "earthpower"], tier: "NU", + doublesTier: "DUU", }, swinub: { inherit: true, @@ -1148,16 +1293,19 @@ exports.BattleFormatsData = { piloswine: { randomBattleMoves: ["earthquake", "iciclecrash", "iceshard", "superpower", "endeavor", "stealthrock"], tier: "NU", + doublesTier: "NFE", }, mamoswine: { inherit: true, randomBattleMoves: ["iceshard", "earthquake", "endeavor", "iciclecrash", "stoneedge", "superpower", "stealthrock"], tier: "OU", + doublesTier: "DOU", }, corsola: { inherit: true, randomBattleMoves: ["recover", "toxic", "powergem", "scald", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, remoraid: { randomBattleMoves: ["waterspout", "hydropump", "fireblast", "hiddenpowerground", "icebeam", "seedbomb", "rockblast"], @@ -1167,11 +1315,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["hydropump", "fireblast", "icebeam", "energyball", "rockblast", "thunderwave"], tier: "NU", + doublesTier: "DUU", }, delibird: { inherit: true, randomBattleMoves: ["rapidspin", "iceshard", "icepunch", "aerialace"], tier: "NU", + doublesTier: "DUU", }, mantyke: { randomBattleMoves: ["raindance", "hydropump", "surf", "airslash", "icebeam", "rest", "sleeptalk", "toxic"], @@ -1181,10 +1331,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["raindance", "hydropump", "surf", "airslash", "icebeam", "rest", "sleeptalk", "toxic"], tier: "NU", + doublesTier: "DUU", }, skarmory: { randomBattleMoves: ["whirlwind", "bravebird", "roost", "spikes", "stealthrock"], tier: "OU", + doublesTier: "DUU", }, houndour: { inherit: true, @@ -1194,6 +1346,7 @@ exports.BattleFormatsData = { houndoom: { randomBattleMoves: ["nastyplot", "pursuit", "darkpulse", "suckerpunch", "fireblast", "hiddenpowerfighting"], tier: "UU", + doublesTier: "DUU", }, phanpy: { randomBattleMoves: ["stealthrock", "earthquake", "iceshard", "headsmash", "knockoff", "seedbomb", "superpower"], @@ -1202,35 +1355,42 @@ exports.BattleFormatsData = { donphan: { randomBattleMoves: ["stealthrock", "rapidspin", "iceshard", "earthquake", "headsmash", "seedbomb", "superpower"], tier: "OU", + doublesTier: "DUU", }, stantler: { inherit: true, randomBattleMoves: ["return", "megahorn", "jumpkick", "earthquake", "thunderwave", "suckerpunch"], tier: "NU", + doublesTier: "DUU", }, smeargle: { inherit: true, randomBattleMoves: ["spore", "spikes", "stealthrock", "uturn", "destinybond", "whirlwind"], tier: "RU", + doublesTier: "DUU", }, miltank: { randomBattleMoves: ["milkdrink", "stealthrock", "bodyslam", "healbell", "curse", "earthquake"], tier: "NU", + doublesTier: "DUU", }, raikou: { inherit: true, randomBattleMoves: ["thunderbolt", "hiddenpowerice", "aurasphere", "calmmind", "substitute"], tier: "UU", + doublesTier: "DUU", }, entei: { inherit: true, randomBattleMoves: ["extremespeed", "flareblitz", "ironhead", "flamecharge", "stoneedge"], tier: "RU", + doublesTier: "DUU", }, suicune: { inherit: true, randomBattleMoves: ["hydropump", "icebeam", "scald", "hiddenpowergrass", "hiddenpowerelectric", "rest", "sleeptalk", "roar", "calmmind"], tier: "UU", + doublesTier: "DUU", }, larvitar: { inherit: true, @@ -1245,21 +1405,25 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["crunch", "stoneedge", "pursuit", "superpower", "fireblast", "icebeam", "stealthrock", "aquatail"], tier: "OU", + doublesTier: "DOU", }, lugia: { inherit: true, randomBattleMoves: ["toxic", "dragontail", "roost", "substitute", "whirlwind", "icebeam"], tier: "Uber", + doublesTier: "DUber", }, hooh: { inherit: true, randomBattleMoves: ["substitute", "sacredfire", "bravebird", "earthquake", "roost"], tier: "Uber", + doublesTier: "DUber", }, celebi: { inherit: true, randomBattleMoves: ["nastyplot", "psychic", "gigadrain", "recover", "healbell", "batonpass", "stealthrock", "earthpower", "hiddenpowerfire", "hiddenpowerice", "calmmind", "leafstorm"], tier: "OU", + doublesTier: "DUU", }, treecko: { inherit: true, @@ -1277,6 +1441,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "leechseed", "gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "synthesis", "hiddenpowerrock"], maleOnlyHidden: true, tier: "RU", + doublesTier: "DUU", }, torchic: { inherit: true, @@ -1288,12 +1453,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["flareblitz", "skyuppercut", "protect", "swordsdance", "substitute", "batonpass"], maleOnlyHidden: true, tier: "NU", + doublesTier: "DUU", }, blaziken: { inherit: true, randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "substitute", "batonpass", "bravebird"], maleOnlyHidden: true, tier: "Uber", + doublesTier: "DOU", }, mudkip: { inherit: true, @@ -1311,6 +1478,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["surf", "earthquake", "icebeam", "stealthrock", "roar", "superpower", "stoneedge", "rest", "sleeptalk", "hydropump"], maleOnlyHidden: true, tier: "UU", + doublesTier: "DUU", }, poochyena: { inherit: true, @@ -1320,6 +1488,7 @@ exports.BattleFormatsData = { mightyena: { randomBattleMoves: ["suckerpunch", "crunch", "icefang", "firefang", "howl"], tier: "NU", + doublesTier: "DUU", }, zigzagoon: { inherit: true, @@ -1329,6 +1498,7 @@ exports.BattleFormatsData = { linoone: { randomBattleMoves: ["bellydrum", "extremespeed", "seedbomb", "substitute", "shadowclaw"], tier: "NU", + doublesTier: "DUU", }, wurmple: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], @@ -1341,6 +1511,7 @@ exports.BattleFormatsData = { beautifly: { randomBattleMoves: ["quiverdance", "bugbuzz", "gigadrain", "hiddenpowerfighting", "hiddenpowerrock", "substitute", "roost"], tier: "NU", + doublesTier: "DUU", }, cascoon: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], @@ -1349,6 +1520,7 @@ exports.BattleFormatsData = { dustox: { randomBattleMoves: ["toxic", "roost", "whirlwind", "bugbuzz", "protect", "sludgebomb", "quiverdance"], tier: "NU", + doublesTier: "DUU", }, lotad: { inherit: true, @@ -1363,6 +1535,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["raindance", "hydropump", "surf", "gigadrain", "icebeam", "scald", "leechseed", "substitute", "toxic"], tier: "NU", + doublesTier: "DOU", }, seedot: { inherit: true, @@ -1376,6 +1549,7 @@ exports.BattleFormatsData = { shiftry: { randomBattleMoves: ["hiddenpowerfire", "swordsdance", "seedbomb", "suckerpunch", "naturepower", "nastyplot", "gigadrain", "darkpulse"], tier: "NU", + doublesTier: "DUU", }, taillow: { inherit: true, @@ -1386,6 +1560,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["bravebird", "facade", "quickattack", "uturn", "protect"], tier: "NU", + doublesTier: "DUU", }, wingull: { randomBattleMoves: ["scald", "icebeam", "hiddenpowergrass", "uturn", "airslash", "hurricane"], @@ -1394,6 +1569,7 @@ exports.BattleFormatsData = { pelipper: { randomBattleMoves: ["scald", "icebeam", "hiddenpowergrass", "uturn", "airslash", "hurricane", "toxic", "roost"], tier: "NU", + doublesTier: "DUU", }, ralts: { inherit: true, @@ -1408,10 +1584,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["psychic", "focusblast", "shadowball", "trick", "calmmind", "willowisp", "wish", "thunderbolt", "protect", "healingwish"], tier: "NU", + doublesTier: "DUU", }, gallade: { randomBattleMoves: ["closecombat", "trick", "stoneedge", "shadowsneak", "swordsdance", "bulkup", "drainpunch", "icepunch", "psychocut"], tier: "RU", + doublesTier: "DUU", }, surskit: { inherit: true, @@ -1421,6 +1599,7 @@ exports.BattleFormatsData = { masquerain: { randomBattleMoves: ["hydropump", "bugbuzz", "airslash", "quiverdance", "substitute", "batonpass", "roost"], tier: "NU", + doublesTier: "DUU", }, shroomish: { inherit: true, @@ -1430,6 +1609,7 @@ exports.BattleFormatsData = { breloom: { randomBattleMoves: ["spore", "substitute", "leechseed", "focuspunch", "machpunch", "lowsweep", "bulletseed", "stoneedge", "swordsdance"], tier: "OU", + doublesTier: "DOU", }, slakoth: { randomBattleMoves: ["doubleedge", "hammerarm", "firepunch", "suckerpunch", "retaliate", "toxic"], @@ -1438,11 +1618,13 @@ exports.BattleFormatsData = { vigoroth: { randomBattleMoves: ["bulkup", "return", "earthquake", "firepunch", "suckerpunch", "slackoff"], tier: "NU", + doublesTier: "NFE", }, slaking: { inherit: true, randomBattleMoves: ["return", "earthquake", "pursuit", "firepunch", "suckerpunch", "doubleedge", "retaliate", "gigaimpact", "hammerarm"], tier: "NU", + doublesTier: "DUU", }, nincada: { randomBattleMoves: ["xscissor", "toxic", "aerialace", "nightslash"], @@ -1451,11 +1633,13 @@ exports.BattleFormatsData = { ninjask: { randomBattleMoves: ["batonpass", "swordsdance", "substitute", "protect", "xscissor"], tier: "NU", + doublesTier: "DUU", }, shedinja: { inherit: true, randomBattleMoves: ["swordsdance", "willowisp", "xscissor", "shadowsneak", "suckerpunch"], tier: "NU", + doublesTier: "DUU", }, whismur: { inherit: true, @@ -1470,6 +1654,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["hypervoice", "overheat", "shadowball", "icebeam", "surf", "focusblast"], tier: "NU", + doublesTier: "DUU", }, makuhita: { inherit: true, @@ -1479,6 +1664,7 @@ exports.BattleFormatsData = { hariyama: { randomBattleMoves: ["crosschop", "bulletpunch", "closecombat", "icepunch", "stoneedge", "bulkup"], tier: "RU", + doublesTier: "DUU", }, nosepass: { inherit: true, @@ -1488,6 +1674,7 @@ exports.BattleFormatsData = { probopass: { randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "earthpower", "powergem", "voltswitch"], tier: "NU", + doublesTier: "DUU", }, skitty: { inherit: true, @@ -1498,16 +1685,19 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["return", "suckerpunch", "zenheadbutt", "thunderwave", "fakeout", "wish"], tier: "NU", + doublesTier: "DUU", }, sableye: { inherit: true, - randomBattleMoves: ["recover", "willowisp", "taunt", "trick", "toxic", "nightshade", "seismictoss"], + randomBattleMoves: ["recover", "willowisp", "taunt", "trick", "toxic", "nightshade", "foulplay"], tier: "UU", + doublesTier: "DOU", }, mawile: { inherit: true, randomBattleMoves: ["swordsdance", "ironhead", "firefang", "crunch", "batonpass", "substitute"], tier: "NU", + doublesTier: "DUU", }, aron: { randomBattleMoves: ["headsmash", "ironhead", "earthquake", "superpower", "stealthrock"], @@ -1516,11 +1706,13 @@ exports.BattleFormatsData = { lairon: { randomBattleMoves: ["headsmash", "ironhead", "earthquake", "superpower", "stealthrock"], tier: "NU", + doublesTier: "NFE", }, aggron: { inherit: true, randomBattleMoves: ["rockpolish", "headsmash", "earthquake", "superpower", "heavyslam", "aquatail", "icepunch", "stealthrock", "thunderwave"], tier: "RU", + doublesTier: "DUU", }, meditite: { inherit: true, @@ -1530,6 +1722,7 @@ exports.BattleFormatsData = { medicham: { randomBattleMoves: ["highjumpkick", "drainpunch", "psychocut", "icepunch", "thunderpunch", "trick", "fakeout", "bulletpunch"], tier: "RU", + doublesTier: "DUU", }, electrike: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "switcheroo", "flamethrower"], @@ -1539,24 +1732,29 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "overheat", "switcheroo", "flamethrower"], tier: "RU", + doublesTier: "DUU", }, plusle: { inherit: true, randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "batonpass", "hiddenpowerice"], tier: "NU", + doublesTier: "DUU", }, minun: { inherit: true, randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "batonpass", "hiddenpowerice"], tier: "NU", + doublesTier: "DUU", }, volbeat: { randomBattleMoves: ["tailglow", "batonpass", "substitute", "bugbuzz", "thunderwave", "encore"], tier: "NU", + doublesTier: "DUU", }, illumise: { randomBattleMoves: ["substitute", "batonpass", "wish", "bugbuzz", "encore", "thunderbolt"], tier: "NU", + doublesTier: "DUU", }, budew: { randomBattleMoves: ["spikes", "sludgebomb", "sleeppowder", "gigadrain", "stunspore", "rest"], @@ -1566,10 +1764,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["spikes", "toxicspikes", "sleeppowder", "gigadrain", "stunspore", "rest", "sludgebomb"], tier: "NU", + doublesTier: "NFE", }, roserade: { randomBattleMoves: ["sludgebomb", "gigadrain", "sleeppowder", "leafstorm", "spikes", "toxicspikes", "rest", "synthesis", "hiddenpowerfire"], tier: "UU", + doublesTier: "DUU", }, gulpin: { inherit: true, @@ -1579,15 +1779,17 @@ exports.BattleFormatsData = { swalot: { randomBattleMoves: ["stockpile", "sludgebomb", "icebeam", "toxic", "yawn", "encore", "earthquake"], tier: "NU", + doublesTier: "DUU", }, carvanha: { inherit: true, randomBattleMoves: ["protect", "hydropump", "icebeam", "waterfall", "crunch", "hiddenpowergrass", "aquajet"], - tier: "LC Uber", + tier: "LC", }, sharpedo: { - randomBattleMoves: ["protect", "hydropump", "icebeam", "crunch", "earthquake", "waterfall", "hiddenpowergrass", "aquajet"], + randomBattleMoves: ["protect", "hydropump", "icebeam", "crunch", "earthquake", "waterfall", "hiddenpowergrass"], tier: "UU", + doublesTier: "DUU", }, wailmer: { randomBattleMoves: ["waterspout", "surf", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerelectric"], @@ -1597,6 +1799,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["waterspout", "surf", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerelectric"], tier: "NU", + doublesTier: "DUU", }, numel: { inherit: true, @@ -1606,10 +1809,12 @@ exports.BattleFormatsData = { camerupt: { randomBattleMoves: ["rockpolish", "fireblast", "earthpower", "stoneedge", "lavaplume", "stealthrock", "earthquake"], tier: "NU", + doublesTier: "DUU", }, torkoal: { randomBattleMoves: ["rapidspin", "stealthrock", "yawn", "lavaplume", "earthquake", "toxic", "willowisp"], tier: "NU", + doublesTier: "DUU", }, spoink: { inherit: true, @@ -1619,11 +1824,13 @@ exports.BattleFormatsData = { grumpig: { randomBattleMoves: ["calmmind", "psychic", "focusblast", "shadowball", "thunderwave", "trick", "healbell"], tier: "NU", + doublesTier: "DUU", }, spinda: { inherit: true, randomBattleMoves: ["wish", "protect", "return", "superpower", "suckerpunch"], tier: "NU", + doublesTier: "DUU", }, trapinch: { inherit: true, @@ -1638,6 +1845,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["earthquake", "outrage", "dragonclaw", "uturn", "roost", "substitute", "stoneedge", "firepunch", "superpower"], tier: "UU", + doublesTier: "DUU", }, cacnea: { inherit: true, @@ -1648,6 +1856,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["swordsdance", "spikes", "suckerpunch", "seedbomb", "drainpunch"], tier: "NU", + doublesTier: "DUU", }, swablu: { inherit: true, @@ -1658,26 +1867,31 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["dragondance", "outrage", "dragonclaw", "earthquake", "roost", "fireblast"], tier: "NU", + doublesTier: "DUU", }, zangoose: { inherit: true, randomBattleMoves: ["swordsdance", "closecombat", "nightslash", "quickattack", "facade"], tier: "NU", + doublesTier: "DUU", }, seviper: { inherit: true, randomBattleMoves: ["sludgebomb", "flamethrower", "gigadrain", "switcheroo", "earthquake", "suckerpunch", "aquatail"], tier: "NU", + doublesTier: "DUU", }, lunatone: { inherit: true, randomBattleMoves: ["psychic", "earthpower", "stealthrock", "rockpolish", "batonpass", "calmmind", "icebeam", "hiddenpowerrock", "moonlight"], tier: "NU", + doublesTier: "DUU", }, solrock: { inherit: true, randomBattleMoves: ["stealthrock", "explosion", "stoneedge", "zenheadbutt", "earthquake", "batonpass", "willowisp", "rockpolish", "morningsun"], tier: "NU", + doublesTier: "DUU", }, barboach: { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "return"], @@ -1687,6 +1901,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["dragondance", "waterfall", "earthquake", "stoneedge"], tier: "NU", + doublesTier: "DUU", }, corphish: { inherit: true, @@ -1697,6 +1912,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["dragondance", "waterfall", "crunch", "superpower", "swordsdance"], tier: "RU", + doublesTier: "DUU", }, baltoy: { inherit: true, @@ -1706,6 +1922,7 @@ exports.BattleFormatsData = { claydol: { randomBattleMoves: ["stealthrock", "toxic", "psychic", "icebeam", "earthquake", "rapidspin", "reflect", "lightscreen"], tier: "UU", + doublesTier: "DUU", }, lileep: { inherit: true, @@ -1713,8 +1930,9 @@ exports.BattleFormatsData = { tier: "LC", }, cradily: { - randomBattleMoves: ["stealthrock", "recover", "stockpile", "seedbomb", "rockslide", "earthquake", "curse", "swordsdance"], + randomBattleMoves: ["stealthrock", "recover", "toxic", "seedbomb", "rockslide", "earthquake", "curse", "swordsdance"], tier: "NU", + doublesTier: "DUU", }, anorith: { inherit: true, @@ -1724,6 +1942,7 @@ exports.BattleFormatsData = { armaldo: { randomBattleMoves: ["stealthrock", "stoneedge", "toxic", "xscissor", "swordsdance", "earthquake", "superpower"], tier: "NU", + doublesTier: "DUU", }, feebas: { inherit: true, @@ -1732,11 +1951,13 @@ exports.BattleFormatsData = { }, milotic: { inherit: true, - randomBattleMoves: ["recover", "scald", "hypnosis", "toxic", "icebeam", "dragontail", "rest", "sleeptalk", "hiddenpowergrass"], + randomBattleMoves: ["recover", "scald", "toxic", "icebeam", "dragontail", "rest", "sleeptalk", "hiddenpowergrass"], tier: "UU", + doublesTier: "DUU", }, castform: { tier: "NU", + doublesTier: "DUU", }, castformsunny: { randomBattleMoves: ["sunnyday", "weatherball", "solarbeam", "icebeam"], @@ -1752,6 +1973,7 @@ exports.BattleFormatsData = { kecleon: { randomBattleMoves: ["stealthrock", "recover", "return", "thunderwave", "suckerpunch"], tier: "NU", + doublesTier: "DUU", }, shuppet: { inherit: true, @@ -1762,6 +1984,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["trickroom", "destinybond", "taunt", "shadowclaw", "willowisp"], tier: "NU", + doublesTier: "DUU", }, duskull: { inherit: true, @@ -1771,15 +1994,18 @@ exports.BattleFormatsData = { dusclops: { randomBattleMoves: ["willowisp", "shadowsneak", "icebeam", "painsplit", "substitute", "seismictoss"], tier: "UU", + doublesTier: "NFE", }, dusknoir: { randomBattleMoves: ["willowisp", "shadowsneak", "icebeam", "painsplit", "substitute", "earthquake", "focuspunch"], tier: "RU", + doublesTier: "DUU", }, tropius: { inherit: true, randomBattleMoves: ["leechseed", "substitute", "airslash", "gigadrain", "earthquake", "hiddenpowerfire", "roost", "leafstorm"], tier: "NU", + doublesTier: "DUU", }, chingling: { randomBattleMoves: ["hypnosis", "reflect", "lightscreen", "toxic", "wish", "psychic"], @@ -1789,11 +2015,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["hypnosis", "toxic", "wish", "psychic", "thunderwave", "recover", "calmmind", "shadowball", "hiddenpowerfighting", "healingwish"], tier: "NU", + doublesTier: "DUU", }, absol: { inherit: true, randomBattleMoves: ["swordsdance", "suckerpunch", "nightslash", "psychocut", "superpower", "pursuit", "megahorn"], tier: "RU", + doublesTier: "DUU", }, snorunt: { inherit: true, @@ -1803,10 +2031,12 @@ exports.BattleFormatsData = { glalie: { randomBattleMoves: ["spikes", "icebeam", "iceshard", "crunch", "earthquake"], tier: "NU", + doublesTier: "DUU", }, froslass: { randomBattleMoves: ["icebeam", "spikes", "destinybond", "shadowball", "substitute", "taunt", "thunderbolt", "thunderwave"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, spheal: { inherit: true, @@ -1821,6 +2051,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["substitute", "protect", "toxic", "surf", "icebeam", "roar"], tier: "NU", + doublesTier: "DUU", }, clamperl: { randomBattleMoves: ["shellsmash", "icebeam", "surf", "hiddenpowergrass", "hiddenpowerelectric", "substitute"], @@ -1829,18 +2060,22 @@ exports.BattleFormatsData = { huntail: { randomBattleMoves: ["shellsmash", "return", "hydropump", "batonpass", "suckerpunch"], tier: "NU", + doublesTier: "DUU", }, gorebyss: { randomBattleMoves: ["shellsmash", "batonpass", "hydropump", "icebeam", "hiddenpowergrass", "substitute"], tier: "NU", + doublesTier: "DUU", }, relicanth: { randomBattleMoves: ["headsmash", "waterfall", "earthquake", "doubleedge", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, luvdisc: { randomBattleMoves: ["surf", "icebeam", "toxic", "sweetkiss", "protect"], tier: "NU", + doublesTier: "DUU", }, bagon: { inherit: true, @@ -1850,11 +2085,13 @@ exports.BattleFormatsData = { shelgon: { randomBattleMoves: ["outrage", "brickbreak", "dragonclaw", "dragondance"], tier: "NU", + doublesTier: "NFE", }, salamence: { inherit: true, randomBattleMoves: ["outrage", "fireblast", "earthquake", "dracometeor", "roost", "dragondance", "dragonclaw"], tier: "OU", + doublesTier: "DOU", }, beldum: { randomBattleMoves: ["ironhead", "zenheadbutt", "headbutt", "irondefense"], @@ -1864,76 +2101,91 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["stealthrock", "meteormash", "toxic", "earthquake", "bulletpunch"], tier: "NU", + doublesTier: "NFE", }, metagross: { inherit: true, randomBattleMoves: ["meteormash", "earthquake", "agility", "stealthrock", "zenheadbutt", "bulletpunch", "trick"], tier: "OU", + doublesTier: "DOU", }, regirock: { inherit: true, randomBattleMoves: ["stealthrock", "thunderwave", "stoneedge", "earthquake", "curse", "rest", "sleeptalk", "rockslide", "toxic"], tier: "NU", + doublesTier: "DUU", }, regice: { inherit: true, randomBattleMoves: ["thunderwave", "icebeam", "thunderbolt", "rest", "sleeptalk", "focusblast"], tier: "NU", + doublesTier: "DUU", }, registeel: { inherit: true, randomBattleMoves: ["stealthrock", "ironhead", "curse", "rest", "thunderwave", "toxic"], tier: "UU", + doublesTier: "DUU", }, latias: { inherit: true, randomBattleMoves: ["dragonpulse", "surf", "thunderbolt", "roost", "calmmind", "healingwish"], tier: "OU", + doublesTier: "DUU", }, latios: { inherit: true, randomBattleMoves: ["dracometeor", "dragonpulse", "surf", "thunderbolt", "psyshock", "roost"], tier: "OU", + doublesTier: "DOU", }, kyogre: { inherit: true, randomBattleMoves: ["waterspout", "surf", "thunder", "icebeam", "calmmind", "rest", "sleeptalk"], tier: "Uber", + doublesTier: "DUber", }, groudon: { inherit: true, randomBattleMoves: ["earthquake", "dragontail", "stealthrock", "stoneedge", "swordsdance", "rockpolish", "thunderwave", "firepunch"], tier: "Uber", + doublesTier: "DUber", }, rayquaza: { inherit: true, randomBattleMoves: ["outrage", "vcreate", "extremespeed", "dragondance", "swordsdance", "dracometeor", "dragonclaw"], tier: "Uber", + doublesTier: "DUber", }, jirachi: { inherit: true, - randomBattleMoves: ["bodyslam", "ironhead", "firepunch", "thunderwave", "stealthrock", "wish", "uturn", "calmmind", "psychic", "thunder", "icepunch", "flashcannon", "meteormash"], + randomBattleMoves: ["bodyslam", "ironhead", "firepunch", "thunderwave", "stealthrock", "wish", "uturn", "calmmind", "psychic", "thunder", "icepunch", "flashcannon"], tier: "OU", + doublesTier: "DUber", }, deoxys: { inherit: true, randomBattleMoves: ["psychoboost", "superpower", "extremespeed", "icebeam", "thunderbolt", "firepunch", "spikes", "stealthrock"], tier: "Uber", + doublesTier: "DUU", }, deoxysattack: { randomBattleMoves: ["psychoboost", "superpower", "extremespeed", "icebeam", "thunderbolt", "firepunch", "spikes", "stealthrock"], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, deoxysdefense: { randomBattleMoves: ["spikes", "stealthrock", "recover", "taunt", "toxic", "agility", "seismictoss", "magiccoat"], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, deoxysspeed: { randomBattleMoves: ["spikes", "stealthrock", "superpower", "icebeam", "psychoboost", "taunt", "lightscreen", "reflect", "magiccoat", "trick"], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, turtwig: { inherit: true, @@ -1951,6 +2203,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "woodhammer", "stoneedge", "synthesis", "leechseed"], maleOnlyHidden: true, tier: "NU", + doublesTier: "DUU", }, chimchar: { inherit: true, @@ -1962,12 +2215,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "overheat", "hiddenpowergrass", "fakeout", "vacuumwave"], maleOnlyHidden: true, tier: "NU", + doublesTier: "NFE", }, infernape: { inherit: true, randomBattleMoves: ["stealthrock", "fireblast", "closecombat", "uturn", "grassknot", "stoneedge", "machpunch", "swordsdance", "nastyplot", "flareblitz", "hiddenpowerice", "thunderpunch"], maleOnlyHidden: true, tier: "OU", + doublesTier: "DOU", }, piplup: { inherit: true, @@ -1985,6 +2240,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "hydropump", "scald", "icebeam", "hiddenpowerelectric", "hiddenpowerfire", "roar", "grassknot"], maleOnlyHidden: true, tier: "UU", + doublesTier: "DUU", }, starly: { inherit: true, @@ -1997,7 +2253,8 @@ exports.BattleFormatsData = { }, staraptor: { randomBattleMoves: ["bravebird", "closecombat", "return", "uturn", "quickattack", "substitute", "roost", "doubleedge"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, bidoof: { inherit: true, @@ -2007,6 +2264,7 @@ exports.BattleFormatsData = { bibarel: { randomBattleMoves: ["return", "waterfall", "curse", "quickattack", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, kricketot: { randomBattleMoves: ["endeavor", "mudslap", "bugbite", "strugglebug"], @@ -2015,6 +2273,7 @@ exports.BattleFormatsData = { kricketune: { randomBattleMoves: ["swordsdance", "bugbite", "aerialace", "brickbreak", "toxic"], tier: "NU", + doublesTier: "DUU", }, shinx: { randomBattleMoves: ["wildcharge", "icefang", "firefang", "crunch"], @@ -2025,8 +2284,9 @@ exports.BattleFormatsData = { tier: "NFE", }, luxray: { - randomBattleMoves: ["wildcharge", "icefang", "firefang", "crunch", "superpower"], + randomBattleMoves: ["wildcharge", "icefang", "facade", "crunch", "superpower"], tier: "NU", + doublesTier: "DUU", }, cranidos: { inherit: true, @@ -2036,6 +2296,7 @@ exports.BattleFormatsData = { rampardos: { randomBattleMoves: ["headsmash", "rockslide", "earthquake", "zenheadbutt", "firepunch", "rockpolish", "crunch"], tier: "NU", + doublesTier: "DUU", }, shieldon: { inherit: true, @@ -2045,6 +2306,7 @@ exports.BattleFormatsData = { bastiodon: { randomBattleMoves: ["stealthrock", "metalburst", "fireblast", "icebeam", "protect", "toxic", "roar"], tier: "NU", + doublesTier: "DUU", }, burmy: { randomBattleMoves: ["bugbite", "hiddenpowerice", "electroweb", "protect"], @@ -2053,18 +2315,22 @@ exports.BattleFormatsData = { wormadam: { randomBattleMoves: ["leafstorm", "gigadrain", "signalbeam", "hiddenpowerice", "hiddenpowerrock", "toxic", "psychic", "protect"], tier: "NU", + doublesTier: "DUU", }, wormadamsandy: { randomBattleMoves: ["earthquake", "toxic", "rockblast", "protect", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, wormadamtrash: { randomBattleMoves: ["stealthrock", "toxic", "ironhead", "protect"], tier: "NU", + doublesTier: "DUU", }, mothim: { randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "gigadrain", "roost"], tier: "NU", + doublesTier: "DUU", }, combee: { randomBattleMoves: ["bugbuzz", "aircutter", "endeavor", "ominouswind"], @@ -2073,10 +2339,12 @@ exports.BattleFormatsData = { vespiquen: { randomBattleMoves: ["substitute", "roost", "toxic", "attackorder", "protect", "defendorder"], tier: "NU", + doublesTier: "DUU", }, pachirisu: { randomBattleMoves: ["lightscreen", "thunderwave", "superfang", "toxic", "voltswitch"], tier: "NU", + doublesTier: "DUU", }, buizel: { randomBattleMoves: ["waterfall", "aquajet", "switcheroo", "brickbreak", "bulkup", "batonpass", "icepunch"], @@ -2085,6 +2353,7 @@ exports.BattleFormatsData = { floatzel: { randomBattleMoves: ["waterfall", "aquajet", "switcheroo", "brickbreak", "bulkup", "batonpass", "icepunch", "crunch"], tier: "NU", + doublesTier: "DUU", }, cherubi: { randomBattleMoves: ["sunnyday", "solarbeam", "weatherball", "hiddenpowerice"], @@ -2093,6 +2362,7 @@ exports.BattleFormatsData = { cherrim: { randomBattleMoves: ["sunnyday", "solarbeam", "weatherball", "hiddenpowerice"], tier: "NU", + doublesTier: "DUU", }, cherrimsunshine: { randomBattleMoves: ["sunnyday", "solarbeam", "gigadrain", "weatherball", "hiddenpowerice"], @@ -2106,6 +2376,7 @@ exports.BattleFormatsData = { gastrodon: { randomBattleMoves: ["earthpower", "icebeam", "scald", "toxic", "recover", "clearsmog"], tier: "OU", + doublesTier: "DOU", }, drifloon: { randomBattleMoves: ["acrobatics", "shadowball", "substitute", "calmmind", "hypnosis", "hiddenpowerfighting", "thunderbolt", "destinybond", "willowisp", "stockpile", "batonpass"], @@ -2114,6 +2385,7 @@ exports.BattleFormatsData = { drifblim: { randomBattleMoves: ["acrobatics", "shadowball", "substitute", "calmmind", "hypnosis", "hiddenpowerfighting", "thunderbolt", "destinybond", "willowisp", "stockpile", "batonpass"], tier: "NU", + doublesTier: "DUU", }, buneary: { randomBattleMoves: ["fakeout", "return", "switcheroo", "thunderpunch", "jumpkick", "firepunch", "icepunch", "healingwish"], @@ -2122,6 +2394,7 @@ exports.BattleFormatsData = { lopunny: { randomBattleMoves: ["fakeout", "return", "switcheroo", "thunderpunch", "jumpkick", "firepunch", "icepunch", "healingwish"], tier: "NU", + doublesTier: "DUU", }, glameow: { randomBattleMoves: ["fakeout", "uturn", "suckerpunch", "hypnosis", "quickattack", "return", "foulplay"], @@ -2130,6 +2403,7 @@ exports.BattleFormatsData = { purugly: { randomBattleMoves: ["fakeout", "uturn", "suckerpunch", "hypnosis", "quickattack", "return"], tier: "NU", + doublesTier: "DUU", }, stunky: { randomBattleMoves: ["pursuit", "suckerpunch", "crunch", "fireblast", "explosion", "taunt"], @@ -2138,6 +2412,7 @@ exports.BattleFormatsData = { skuntank: { randomBattleMoves: ["pursuit", "suckerpunch", "crunch", "fireblast", "explosion", "taunt", "poisonjab"], tier: "NU", + doublesTier: "DUU", }, bronzor: { randomBattleMoves: ["stealthrock", "psychic", "toxic", "hypnosis", "reflect", "lightscreen", "trickroom", "trick"], @@ -2146,16 +2421,19 @@ exports.BattleFormatsData = { bronzong: { randomBattleMoves: ["stealthrock", "psychic", "earthquake", "toxic", "hypnosis", "reflect", "lightscreen", "trickroom", "explosion"], tier: "UU", + doublesTier: "DOU", }, chatot: { inherit: true, randomBattleMoves: ["nastyplot", "hypervoice", "heatwave", "hiddenpowergrass", "substitute", "chatter"], tier: "NU", + doublesTier: "DUU", }, spiritomb: { inherit: true, randomBattleMoves: ["shadowsneak", "suckerpunch", "pursuit", "trick", "willowisp", "calmmind", "darkpulse", "rest", "sleeptalk"], tier: "RU", + doublesTier: "DUU", }, gible: { randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "fireblast", "stoneedge", "stealthrock"], @@ -2164,11 +2442,13 @@ exports.BattleFormatsData = { gabite: { randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "fireblast", "stoneedge", "stealthrock"], tier: "NU", + doublesTier: "NFE", }, garchomp: { inherit: true, randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "stoneedge", "firefang", "swordsdance"], tier: "OU", + doublesTier: "DOU", }, riolu: { inherit: true, @@ -2179,6 +2459,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["swordsdance", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "nastyplot", "aurasphere", "darkpulse", "vacuumwave"], tier: "OU", + doublesTier: "DOU", }, hippopotas: { randomBattleMoves: ["earthquake", "slackoff", "whirlwind", "stealthrock", "protect", "toxic"], @@ -2187,14 +2468,16 @@ exports.BattleFormatsData = { hippowdon: { randomBattleMoves: ["earthquake", "slackoff", "whirlwind", "stealthrock", "protect", "toxic", "icefang", "stoneedge", "stockpile"], tier: "OU", + doublesTier: "DUU", }, skorupi: { randomBattleMoves: ["toxicspikes", "xscissor", "poisonjab", "protect"], tier: "LC", }, drapion: { - randomBattleMoves: ["crunch", "whirlwind", "toxicspikes", "pursuit", "earthquake", "aquatail", "swordsdance", "poisonjab", "rest", "sleeptalk"], + randomBattleMoves: ["crunch", "whirlwind", "toxicspikes", "pursuit", "earthquake", "aquatail", "swordsdance", "poisonjab", "taunt"], tier: "RU", + doublesTier: "DUU", }, croagunk: { inherit: true, @@ -2204,10 +2487,12 @@ exports.BattleFormatsData = { toxicroak: { randomBattleMoves: ["fakeout", "suckerpunch", "drainpunch", "bulkup", "substitute", "swordsdance", "crosschop", "icepunch"], tier: "OU", + doublesTier: "DOU", }, carnivine: { randomBattleMoves: ["swordsdance", "powerwhip", "return", "sleeppowder", "substitute", "leechseed"], tier: "NU", + doublesTier: "DUU", }, finneon: { randomBattleMoves: ["surf", "uturn", "icebeam", "hiddenpowerelectric", "hiddenpowergrass", "raindance"], @@ -2216,6 +2501,7 @@ exports.BattleFormatsData = { lumineon: { randomBattleMoves: ["surf", "uturn", "icebeam", "hiddenpowerelectric", "hiddenpowergrass", "raindance"], tier: "NU", + doublesTier: "DUU", }, snover: { randomBattleMoves: ["blizzard", "iceshard", "gigadrain", "leechseed", "substitute"], @@ -2224,112 +2510,135 @@ exports.BattleFormatsData = { abomasnow: { randomBattleMoves: ["blizzard", "iceshard", "gigadrain", "leechseed", "substitute", "focusblast"], tier: "UU", + doublesTier: "DOU", }, rotom: { inherit: true, randomBattleMoves: ["thunderbolt", "discharge", "voltswitch", "shadowball", "substitute", "painsplit", "hiddenpowerice", "hiddenpowerfighting", "willowisp", "rest", "sleeptalk", "trick"], tier: "RU", + doublesTier: "DUU", }, rotomheat: { randomBattleMoves: ["thunderbolt", "discharge", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "rest", "sleeptalk", "overheat", "trick"], tier: "UU", + doublesTier: "DUU", }, rotomwash: { randomBattleMoves: ["thunderbolt", "discharge", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "rest", "sleeptalk", "trick", "hydropump"], tier: "OU", + doublesTier: "DOU", }, rotomfrost: { randomBattleMoves: ["thunderbolt", "discharge", "voltswitch", "substitute", "painsplit", "hiddenpowerfighting", "willowisp", "rest", "sleeptalk", "trick", "blizzard"], tier: "NU", + doublesTier: "DUU", }, rotomfan: { randomBattleMoves: ["thunderbolt", "discharge", "voltswitch", "thunderwave", "substitute", "painsplit", "hiddenpowerfighting", "willowisp", "rest", "sleeptalk", "trick", "airslash", "confuseray"], tier: "NU", + doublesTier: "DUU", }, rotommow: { randomBattleMoves: ["thunderbolt", "discharge", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "rest", "sleeptalk", "trick", "leafstorm"], tier: "RU", + doublesTier: "DUU", }, uxie: { inherit: true, randomBattleMoves: ["reflect", "lightscreen", "uturn", "psychic", "thunderwave", "yawn", "healbell", "stealthrock", "trick", "toxic"], tier: "RU", + doublesTier: "DUU", }, mesprit: { inherit: true, randomBattleMoves: ["calmmind", "psychic", "thunderbolt", "icebeam", "substitute", "uturn", "trick", "stealthrock"], tier: "RU", + doublesTier: "DUU", }, azelf: { inherit: true, randomBattleMoves: ["nastyplot", "psychic", "fireblast", "grassknot", "thunderbolt", "icepunch", "uturn", "trick", "taunt", "stealthrock", "explosion"], tier: "UU", + doublesTier: "DUU", }, dialga: { inherit: true, randomBattleMoves: ["stealthrock", "dracometeor", "dragonpulse", "roar", "dragontail", "thunderbolt", "outrage", "bulkup", "fireblast", "aurasphere", "rest", "sleeptalk", "dragonclaw"], tier: "Uber", + doublesTier: "DUber", }, palkia: { inherit: true, randomBattleMoves: ["spacialrend", "dracometeor", "surf", "hydropump", "thunderbolt", "outrage", "fireblast"], tier: "Uber", + doublesTier: "DUber", }, heatran: { inherit: true, randomBattleMoves: ["substitute", "fireblast", "lavaplume", "willowisp", "stealthrock", "earthpower", "hiddenpowergrass", "hiddenpowerice", "protect", "toxic", "roar"], tier: "OU", + doublesTier: "DOU", }, regigigas: { inherit: true, randomBattleMoves: ["thunderwave", "substitute", "return", "drainpunch", "earthquake", "firepunch", "toxic", "confuseray"], tier: "NU", + doublesTier: "DUU", }, giratina: { inherit: true, randomBattleMoves: ["rest", "sleeptalk", "dragontail", "roar", "willowisp", "calmmind", "dragonpulse", "shadowball"], tier: "Uber", + doublesTier: "DUber", }, giratinaorigin: { randomBattleMoves: ["dracometeor", "shadowsneak", "dragontail", "hiddenpowerfire", "willowisp", "calmmind", "substitute", "dragonpulse", "shadowball", "aurasphere", "outrage"], eventOnly: true, requiredItem: "Griseous Orb", tier: "Uber", + doublesTier: "DUber", }, cresselia: { inherit: true, randomBattleMoves: ["moonlight", "psychic", "icebeam", "thunderwave", "toxic", "lunardance", "rest", "sleeptalk", "calmmind", "reflect", "lightscreen"], - tier: "BL2", + tier: "RUBL", + doublesTier: "DOU", }, phione: { inherit: true, randomBattleMoves: ["raindance", "scald", "uturn", "rest", "icebeam", "surf"], tier: "NU", + doublesTier: "DUU", }, manaphy: { inherit: true, randomBattleMoves: ["tailglow", "surf", "icebeam", "grassknot"], tier: "Uber", + doublesTier: "DUU", }, darkrai: { inherit: true, randomBattleMoves: ["darkvoid", "darkpulse", "focusblast", "nastyplot", "substitute", "trick"], tier: "Uber", + doublesTier: "DUU", }, shaymin: { inherit: true, randomBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "rest", "substitute", "leechseed"], tier: "UU", + doublesTier: "DUU", }, shayminsky: { randomBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerice", "hiddenpowerfire", "substitute", "leechseed"], eventOnly: true, tier: "Uber", + doublesTier: "DOU", }, arceus: { inherit: true, randomBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover"], tier: "Uber", + doublesTier: "DUber", }, arceusbug: { randomBattleMoves: ["swordsdance", "xscissor", "stoneedge", "recover", "calmmind", "judgment", "icebeam", "fireblast"], @@ -2362,7 +2671,7 @@ exports.BattleFormatsData = { requiredItem: "Flame Plate", }, arceusflying: { - randomBattleMoves: ["calmmind", "judgment", "refresh", "recover"], + randomBattleMoves: ["calmmind", "judgment", "refresh", "recover", "focusblast"], eventOnly: true, requiredItem: "Sky Plate", }, @@ -2415,6 +2724,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["vcreate", "boltstrike", "uturn", "psychic", "focusblast", "blueflare"], tier: "UU", + doublesTier: "DOU", }, snivy: { inherit: true, @@ -2427,8 +2737,9 @@ exports.BattleFormatsData = { }, serperior: { inherit: true, - randomBattleMoves: ["leafstorm", "hiddenpowerfire", "substitute", "leechseed", "dragonpulse", "gigadrain"], + randomBattleMoves: ["calmmind", "hiddenpowerfire", "substitute", "leechseed", "dragonpulse", "gigadrain"], tier: "NU", + doublesTier: "DUU", }, tepig: { randomBattleMoves: ["flamecharge", "flareblitz", "wildcharge", "superpower", "headsmash"], @@ -2442,6 +2753,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["flareblitz", "superpower", "flamecharge", "wildcharge", "headsmash", "earthquake", "fireblast"], tier: "RU", + doublesTier: "DUU", }, oshawott: { randomBattleMoves: ["swordsdance", "waterfall", "aquajet", "xscissor"], @@ -2455,6 +2767,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["swordsdance", "aquajet", "waterfall", "megahorn", "superpower"], tier: "NU", + doublesTier: "DUU", }, patrat: { randomBattleMoves: ["swordsdance", "batonpass", "substitute", "hypnosis", "return", "superfang"], @@ -2463,6 +2776,7 @@ exports.BattleFormatsData = { watchog: { randomBattleMoves: ["swordsdance", "batonpass", "substitute", "hypnosis", "return", "superfang"], tier: "NU", + doublesTier: "DUU", }, lillipup: { randomBattleMoves: ["return", "wildcharge", "firefang", "crunch", "icefang"], @@ -2475,6 +2789,7 @@ exports.BattleFormatsData = { stoutland: { randomBattleMoves: ["return", "wildcharge", "superpower", "crunch", "icefang"], tier: "NU", + doublesTier: "DUU", }, purrloin: { inherit: true, @@ -2485,6 +2800,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["swagger", "thunderwave", "substitute", "foulplay"], tier: "NU", + doublesTier: "DUU", }, pansage: { inherit: true, @@ -2494,6 +2810,7 @@ exports.BattleFormatsData = { simisage: { randomBattleMoves: ["nastyplot", "leafstorm", "hiddenpowerfire", "hiddenpowerice", "gigadrain", "focusblast", "substitute", "leechseed", "synthesis"], tier: "NU", + doublesTier: "DUU", }, pansear: { inherit: true, @@ -2503,6 +2820,7 @@ exports.BattleFormatsData = { simisear: { randomBattleMoves: ["nastyplot", "fireblast", "focusblast", "grassknot", "hiddenpowerground", "substitute", "flamethrower", "overheat"], tier: "NU", + doublesTier: "DUU", }, panpour: { inherit: true, @@ -2512,6 +2830,7 @@ exports.BattleFormatsData = { simipour: { randomBattleMoves: ["nastyplot", "hydropump", "icebeam", "substitute", "grassknot", "surf"], tier: "NU", + doublesTier: "DUU", }, munna: { randomBattleMoves: ["psychic", "hiddenpowerfighting", "hypnosis", "calmmind", "moonlight", "thunderwave", "batonpass", "psyshock", "healbell", "signalbeam"], @@ -2521,6 +2840,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["calmmind", "thunderwave", "moonlight", "psychic", "hiddenpowerfighting", "batonpass", "psyshock", "healbell", "signalbeam"], tier: "NU", + doublesTier: "DUU", }, pidove: { inherit: true, @@ -2534,6 +2854,7 @@ exports.BattleFormatsData = { unfezant: { randomBattleMoves: ["pluck", "uturn", "return", "detect", "roost", "wish"], tier: "NU", + doublesTier: "DUU", }, blitzle: { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "wildcharge", "mefirst"], @@ -2542,6 +2863,7 @@ exports.BattleFormatsData = { zebstrika: { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "overheat", "wildcharge"], tier: "NU", + doublesTier: "DUU", }, roggenrola: { randomBattleMoves: ["autotomize", "stoneedge", "stealthrock", "rockblast", "earthquake", "explosion"], @@ -2554,6 +2876,7 @@ exports.BattleFormatsData = { gigalith: { randomBattleMoves: ["stealthrock", "rockblast", "earthquake", "explosion", "stoneedge", "autotomize", "superpower"], tier: "NU", + doublesTier: "DUU", }, woobat: { randomBattleMoves: ["calmmind", "psychic", "airslash", "gigadrain", "roost", "heatwave", "storedpower"], @@ -2562,6 +2885,7 @@ exports.BattleFormatsData = { swoobat: { randomBattleMoves: ["calmmind", "psychic", "airslash", "gigadrain", "roost", "heatwave", "storedpower"], tier: "NU", + doublesTier: "DUU", }, drilbur: { randomBattleMoves: ["swordsdance", "rapidspin", "earthquake", "rockslide", "shadowclaw", "return", "xscissor"], @@ -2570,11 +2894,13 @@ exports.BattleFormatsData = { excadrill: { randomBattleMoves: ["swordsdance", "rapidspin", "earthquake", "rockslide", "ironhead"], tier: "OU", + doublesTier: "DOU", }, audino: { inherit: true, randomBattleMoves: ["wish", "protect", "healbell", "toxic", "thunderwave", "reflect", "lightscreen", "return"], tier: "NU", + doublesTier: "DUU", }, timburr: { randomBattleMoves: ["machpunch", "bulkup", "drainpunch", "icepunch"], @@ -2583,10 +2909,12 @@ exports.BattleFormatsData = { gurdurr: { randomBattleMoves: ["bulkup", "machpunch", "drainpunch", "icepunch"], tier: "NU", + doublesTier: "NFE", }, conkeldurr: { randomBattleMoves: ["bulkup", "machpunch", "drainpunch", "icepunch"], tier: "OU", + doublesTier: "DOU", }, tympole: { randomBattleMoves: ["hydropump", "surf", "sludgewave", "earthpower", "hiddenpowerelectric"], @@ -2599,14 +2927,17 @@ exports.BattleFormatsData = { seismitoad: { randomBattleMoves: ["hydropump", "surf", "sludgewave", "earthpower", "hiddenpowerelectric", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, throh: { randomBattleMoves: ["bulkup", "circlethrow", "icepunch", "stormthrow", "rest", "sleeptalk"], tier: "NU", + doublesTier: "DUU", }, sawk: { randomBattleMoves: ["closecombat", "earthquake", "icepunch", "stoneedge", "bulkup"], tier: "NU", + doublesTier: "DUU", }, sewaddle: { randomBattleMoves: ["calmmind", "gigadrain", "bugbuzz", "hiddenpowerfire", "hiddenpowerice", "airslash"], @@ -2619,6 +2950,7 @@ exports.BattleFormatsData = { leavanny: { randomBattleMoves: ["swordsdance", "leafblade", "xscissor", "batonpass"], tier: "NU", + doublesTier: "DUU", }, venipede: { randomBattleMoves: ["toxicspikes", "steamroller", "spikes", "poisonjab"], @@ -2627,10 +2959,12 @@ exports.BattleFormatsData = { whirlipede: { randomBattleMoves: ["toxicspikes", "steamroller", "spikes", "poisonjab"], tier: "NU", + doublesTier: "NFE", }, scolipede: { randomBattleMoves: ["spikes", "toxicspikes", "megahorn", "rockslide", "earthquake", "swordsdance", "batonpass", "aquatail", "superpower"], - tier: "BL3", + tier: "NUBL", + doublesTier: "DUU", }, cottonee: { randomBattleMoves: ["encore", "taunt", "substitute", "leechseed", "toxic", "stunspore"], @@ -2640,6 +2974,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["encore", "taunt", "substitute", "leechseed", "uturn", "toxic", "stunspore"], tier: "RU", + doublesTier: "DOU", }, petilil: { randomBattleMoves: ["sunnyday", "sleeppowder", "solarbeam", "hiddenpowerfire", "hiddenpowerice", "healingwish"], @@ -2648,14 +2983,17 @@ exports.BattleFormatsData = { lilligant: { randomBattleMoves: ["quiverdance", "gigadrain", "sleeppowder", "hiddenpowerice", "hiddenpowerfire", "hiddenpowerrock", "petaldance"], tier: "RU", + doublesTier: "DUU", }, basculin: { randomBattleMoves: ["waterfall", "aquajet", "superpower", "crunch"], tier: "NU", + doublesTier: "DUU", }, basculinbluestriped: { randomBattleMoves: ["waterfall", "aquajet", "superpower", "crunch"], tier: "NU", + doublesTier: "DUU", }, sandile: { randomBattleMoves: ["earthquake", "stoneedge", "pursuit", "crunch"], @@ -2668,6 +3006,7 @@ exports.BattleFormatsData = { krookodile: { randomBattleMoves: ["earthquake", "stoneedge", "pursuit", "crunch", "bulkup", "superpower"], tier: "UU", + doublesTier: "DUU", }, darumaka: { randomBattleMoves: ["uturn", "flareblitz", "firepunch", "rockslide", "superpower"], @@ -2677,10 +3016,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["uturn", "flareblitz", "firepunch", "rockslide", "earthquake", "superpower"], tier: "UU", + doublesTier: "DUU", }, maractus: { randomBattleMoves: ["spikes", "gigadrain", "leechseed", "hiddenpowerfire", "toxic"], tier: "NU", + doublesTier: "DUU", }, dwebble: { randomBattleMoves: ["stealthrock", "spikes", "shellsmash", "earthquake", "rockblast", "xscissor", "stoneedge"], @@ -2689,6 +3030,7 @@ exports.BattleFormatsData = { crustle: { randomBattleMoves: ["stealthrock", "spikes", "shellsmash", "earthquake", "rockblast", "xscissor", "stoneedge"], tier: "RU", + doublesTier: "DUU", }, scraggy: { inherit: true, @@ -2699,10 +3041,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["dragondance", "icepunch", "highjumpkick", "drainpunch", "rest", "bulkup", "crunch"], tier: "UU", + doublesTier: "DUU", }, sigilyph: { randomBattleMoves: ["cosmicpower", "roost", "storedpower", "psychoshift"], tier: "RU", + doublesTier: "DUU", }, yamask: { randomBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "haze", "rest", "sleeptalk", "painsplit"], @@ -2711,6 +3055,7 @@ exports.BattleFormatsData = { cofagrigus: { randomBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "haze", "rest", "sleeptalk", "painsplit"], tier: "UU", + doublesTier: "DUU", }, tirtouga: { inherit: true, @@ -2720,6 +3065,7 @@ exports.BattleFormatsData = { carracosta: { randomBattleMoves: ["shellsmash", "aquajet", "waterfall", "stoneedge", "earthquake", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, archen: { inherit: true, @@ -2729,6 +3075,7 @@ exports.BattleFormatsData = { archeops: { randomBattleMoves: ["acrobatics", "stoneedge", "rockslide", "earthquake", "uturn", "pluck", "headsmash"], tier: "RU", + doublesTier: "DUU", }, trubbish: { randomBattleMoves: ["clearsmog", "toxicspikes", "spikes", "gunkshot"], @@ -2737,6 +3084,7 @@ exports.BattleFormatsData = { garbodor: { randomBattleMoves: ["spikes", "toxicspikes", "gunkshot", "clearsmog"], tier: "NU", + doublesTier: "DUU", }, zorua: { randomBattleMoves: ["suckerpunch", "extrasensory", "darkpulse", "hiddenpowerfighting", "uturn"], @@ -2746,6 +3094,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["suckerpunch", "darkpulse", "focusblast", "flamethrower", "uturn", "nastyplot"], tier: "UU", + doublesTier: "DUU", }, minccino: { randomBattleMoves: ["return", "tailslap", "wakeupslap", "uturn", "aquatail"], @@ -2754,6 +3103,7 @@ exports.BattleFormatsData = { cinccino: { randomBattleMoves: ["return", "tailslap", "wakeupslap", "uturn", "aquatail", "bulletseed", "rockblast"], tier: "RU", + doublesTier: "DUU", }, gothita: { randomBattleMoves: ["psychic", "thunderbolt", "hiddenpowerfighting", "shadowball", "substitute", "calmmind", "reflect", "lightscreen", "trick"], @@ -2768,7 +3118,8 @@ exports.BattleFormatsData = { gothitelle: { randomBattleMoves: ["psychic", "thunderbolt", "hiddenpowerfighting", "shadowball", "substitute", "calmmind", "reflect", "lightscreen", "trick"], maleOnlyHidden: true, - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, solosis: { randomBattleMoves: ["calmmind", "recover", "psychic", "hiddenpowerfighting", "shadowball", "trickroom", "psyshock"], @@ -2781,6 +3132,7 @@ exports.BattleFormatsData = { reuniclus: { randomBattleMoves: ["calmmind", "recover", "psychic", "focusblast", "shadowball", "trickroom", "psyshock"], tier: "OU", + doublesTier: "DOU", }, ducklett: { randomBattleMoves: ["scald", "airslash", "roost", "hurricane", "icebeam", "hiddenpowergrass", "bravebird"], @@ -2789,6 +3141,7 @@ exports.BattleFormatsData = { swanna: { randomBattleMoves: ["airslash", "roost", "hurricane", "surf", "icebeam", "raindance"], tier: "NU", + doublesTier: "DUU", }, vanillite: { randomBattleMoves: ["icebeam", "explosion", "hiddenpowerelectric", "hiddenpowerfighting", "autotomize"], @@ -2801,6 +3154,7 @@ exports.BattleFormatsData = { vanilluxe: { randomBattleMoves: ["icebeam", "explosion", "hiddenpowerelectric", "hiddenpowerfighting", "autotomize"], tier: "NU", + doublesTier: "DUU", }, deerling: { inherit: true, @@ -2810,10 +3164,12 @@ exports.BattleFormatsData = { sawsbuck: { randomBattleMoves: ["swordsdance", "hornleech", "jumpkick", "naturepower", "return", "substitute", "synthesis", "batonpass"], tier: "NU", + doublesTier: "DUU", }, emolga: { randomBattleMoves: ["agility", "chargebeam", "batonpass", "substitute", "thunderbolt", "airslash", "roost"], tier: "NU", + doublesTier: "DUU", }, karrablast: { inherit: true, @@ -2823,6 +3179,7 @@ exports.BattleFormatsData = { escavalier: { randomBattleMoves: ["megahorn", "pursuit", "ironhead", "knockoff", "return", "swordsdance"], tier: "RU", + doublesTier: "DUU", }, foongus: { randomBattleMoves: ["spore", "stunspore", "gigadrain", "clearsmog", "hiddenpowerfire", "synthesis"], @@ -2831,6 +3188,7 @@ exports.BattleFormatsData = { amoonguss: { randomBattleMoves: ["spore", "stunspore", "gigadrain", "clearsmog", "hiddenpowerfire", "synthesis"], tier: "RU", + doublesTier: "DOU", }, frillish: { randomBattleMoves: ["scald", "willowisp", "recover", "toxic", "shadowball"], @@ -2840,10 +3198,12 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["scald", "willowisp", "recover", "toxic", "shadowball", "icebeam", "gigadrain"], tier: "OU", + doublesTier: "DOU", }, alomomola: { randomBattleMoves: ["wish", "protect", "waterfall", "toxic", "scald"], tier: "NU", + doublesTier: "DUU", }, joltik: { randomBattleMoves: ["thunderbolt", "bugbuzz", "hiddenpowerice", "gigadrain", "voltswitch"], @@ -2852,14 +3212,17 @@ exports.BattleFormatsData = { galvantula: { randomBattleMoves: ["thunder", "hiddenpowerice", "gigadrain", "bugbuzz", "voltswitch"], tier: "RU", + doublesTier: "DUU", }, ferroseed: { randomBattleMoves: ["spikes", "stealthrock", "leechseed", "seedbomb", "protect", "thunderwave", "gyroball"], tier: "RU", + doublesTier: "LC", }, ferrothorn: { randomBattleMoves: ["spikes", "stealthrock", "leechseed", "powerwhip", "thunderwave", "protect"], tier: "OU", + doublesTier: "DOU", }, klink: { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge"], @@ -2872,6 +3235,7 @@ exports.BattleFormatsData = { klinklang: { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge"], tier: "RU", + doublesTier: "DUU", }, tynamo: { randomBattleMoves: ["spark", "chargebeam", "thunderwave", "tackle"], @@ -2884,6 +3248,7 @@ exports.BattleFormatsData = { eelektross: { randomBattleMoves: ["thunderbolt", "flamethrower", "uturn", "voltswitch", "acidspray", "wildcharge", "drainpunch", "discharge", "superpower", "thunderpunch", "gigadrain", "aquatail", "coil"], tier: "NU", + doublesTier: "DUU", }, elgyem: { randomBattleMoves: ["nastyplot", "psychic", "thunderbolt", "hiddenpowerfighting", "substitute", "calmmind", "recover", "trick"], @@ -2892,6 +3257,7 @@ exports.BattleFormatsData = { beheeyem: { randomBattleMoves: ["nastyplot", "psychic", "thunderbolt", "hiddenpowerfighting", "substitute", "calmmind", "recover", "trick"], tier: "NU", + doublesTier: "DUU", }, litwick: { randomBattleMoves: ["calmmind", "shadowball", "energyball", "fireblast", "overheat", "hiddenpowerfighting", "hiddenpowerground", "hiddenpowerrock", "trick"], @@ -2900,11 +3266,13 @@ exports.BattleFormatsData = { lampent: { randomBattleMoves: ["calmmind", "shadowball", "energyball", "fireblast", "overheat", "hiddenpowerfighting", "hiddenpowerground", "hiddenpowerrock", "trick"], tier: "NU", + doublesTier: "NFE", }, chandelure: { inherit: true, randomBattleMoves: ["shadowball", "energyball", "fireblast", "overheat", "hiddenpowerfighting", "hiddenpowerground", "hiddenpowerrock", "trick", "substitute", "painsplit"], - tier: "BL", + tier: "UUBL", + doublesTier: "DOU", }, axew: { inherit: true, @@ -2914,11 +3282,13 @@ exports.BattleFormatsData = { fraxure: { randomBattleMoves: ["dragondance", "swordsdance", "outrage", "dragonclaw", "aquatail", "superpower"], tier: "NU", + doublesTier: "NFE", }, haxorus: { inherit: true, randomBattleMoves: ["dragondance", "swordsdance", "outrage", "dragonclaw", "earthquake", "aquatail", "superpower"], tier: "OU", + doublesTier: "DUU", }, cubchoo: { inherit: true, @@ -2928,10 +3298,12 @@ exports.BattleFormatsData = { beartic: { randomBattleMoves: ["iciclecrash", "superpower", "nightslash", "stoneedge", "swordsdance", "aquajet"], tier: "NU", + doublesTier: "DUU", }, cryogonal: { randomBattleMoves: ["icebeam", "recover", "toxic", "rapidspin", "reflect"], tier: "RU", + doublesTier: "DUU", }, shelmet: { inherit: true, @@ -2941,10 +3313,12 @@ exports.BattleFormatsData = { accelgor: { randomBattleMoves: ["spikes", "yawn", "bugbuzz", "focusblast", "gigadrain", "hiddenpowerrock", "encore"], tier: "RU", + doublesTier: "DUU", }, stunfisk: { randomBattleMoves: ["discharge", "thunderbolt", "earthpower", "scald", "toxic", "rest", "sleeptalk", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, mienfoo: { randomBattleMoves: ["uturn", "drainpunch", "stoneedge", "swordsdance", "batonpass", "highjumpkick", "fakeout"], @@ -2953,11 +3327,13 @@ exports.BattleFormatsData = { mienshao: { randomBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "drainpunch", "swordsdance", "batonpass"], tier: "UU", + doublesTier: "DUU", }, druddigon: { inherit: true, randomBattleMoves: ["outrage", "superpower", "earthquake", "suckerpunch", "dragonclaw", "dragontail", "substitute", "glare", "stealthrock", "firepunch", "thunderpunch"], tier: "RU", + doublesTier: "DUU", }, golett: { randomBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stealthrock"], @@ -2967,6 +3343,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stoneedge", "stealthrock"], tier: "NU", + doublesTier: "DUU", }, pawniard: { randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "nightslash"], @@ -2975,10 +3352,12 @@ exports.BattleFormatsData = { bisharp: { randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "nightslash"], tier: "UU", + doublesTier: "DUU", }, bouffalant: { randomBattleMoves: ["headcharge", "earthquake", "stoneedge", "megahorn", "swordsdance", "superpower"], tier: "RU", + doublesTier: "DUU", }, rufflet: { randomBattleMoves: ["bravebird", "rockslide", "return", "uturn", "substitute", "bulkup", "roost"], @@ -2988,6 +3367,7 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["bravebird", "superpower", "return", "uturn", "substitute", "rockslide", "bulkup", "roost"], tier: "NU", + doublesTier: "DUU", }, vullaby: { randomBattleMoves: ["knockoff", "roost", "taunt", "whirlwind", "toxic", "darkpulse", "uturn", "bravebird"], @@ -2997,14 +3377,17 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["knockoff", "roost", "taunt", "whirlwind", "toxic", "uturn", "bravebird", "darkpulse"], tier: "NU", + doublesTier: "DUU", }, heatmor: { randomBattleMoves: ["fireblast", "suckerpunch", "focusblast", "gigadrain"], tier: "NU", + doublesTier: "DUU", }, durant: { randomBattleMoves: ["honeclaws", "ironhead", "xscissor", "stoneedge", "batonpass", "superpower"], tier: "RU", + doublesTier: "DUU", }, deino: { inherit: true, @@ -3014,11 +3397,13 @@ exports.BattleFormatsData = { zweilous: { randomBattleMoves: ["outrage", "crunch", "firefang", "dragontail", "thunderwave", "superpower"], tier: "NU", + doublesTier: "NFE", }, hydreigon: { inherit: true, randomBattleMoves: ["uturn", "dracometeor", "substitute", "dragonpulse", "focusblast", "fireblast", "surf", "darkpulse", "roost"], tier: "OU", + doublesTier: "DOU", }, larvesta: { randomBattleMoves: ["flareblitz", "uturn", "wildcharge", "zenheadbutt", "morningsun", "willowisp"], @@ -3028,91 +3413,109 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["quiverdance", "fierydance", "fireblast", "bugbuzz", "roost", "gigadrain"], tier: "OU", + doublesTier: "DOU", }, cobalion: { inherit: true, randomBattleMoves: ["closecombat", "ironhead", "swordsdance", "substitute", "stoneedge", "voltswitch", "hiddenpowerice", "thunderwave", "stealthrock"], tier: "UU", + doublesTier: "DUU", }, terrakion: { inherit: true, randomBattleMoves: ["stoneedge", "closecombat", "swordsdance", "rockpolish", "substitute", "stealthrock"], tier: "OU", + doublesTier: "DOU", }, virizion: { inherit: true, randomBattleMoves: ["swordsdance", "calmmind", "closecombat", "focusblast", "hiddenpowerice", "stoneedge", "leafblade", "gigadrain", "substitute", "synthesis"], tier: "UU", + doublesTier: "DUU", }, tornadus: { inherit: true, randomBattleMoves: ["hurricane", "airslash", "uturn", "bulkup", "acrobatics", "superpower", "focusblast", "taunt", "substitute", "heatwave"], tier: "UU", + doublesTier: "DUU", }, tornadustherian: { randomBattleMoves: ["hurricane", "airslash", "focusblast", "uturn", "heatwave"], eventOnly: true, tier: "Uber", + doublesTier: "DUU", }, thundurus: { inherit: true, randomBattleMoves: ["thunderwave", "nastyplot", "thunderbolt", "hiddenpowerice", "focusblast", "grassknot", "substitute"], tier: "Uber", + doublesTier: "DOU", }, thundurustherian: { randomBattleMoves: ["nastyplot", "agility", "thunderbolt", "hiddenpowerice", "focusblast", "grassknot"], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, reshiram: { inherit: true, randomBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "flamethrower", "flamecharge", "roost"], tier: "Uber", + doublesTier: "DUber", }, zekrom: { inherit: true, randomBattleMoves: ["voltswitch", "outrage", "dragonclaw", "boltstrike", "honeclaws", "substitute", "dracometeor", "fusionbolt", "roost"], tier: "Uber", + doublesTier: "DUber", }, landorus: { inherit: true, randomBattleMoves: ["earthpower", "focusblast", "rockpolish", "hiddenpowerice", "psychic"], tier: "Uber", + doublesTier: "DUU", }, landorustherian: { randomBattleMoves: ["rockpolish", "earthquake", "stoneedge", "uturn", "superpower", "stealthrock"], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, kyurem: { inherit: true, randomBattleMoves: ["substitute", "icebeam", "dracometeor", "dragonpulse", "focusblast", "outrage", "earthpower", "roost"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, kyuremblack: { inherit: true, randomBattleMoves: ["outrage", "fusionbolt", "icebeam", "roost"], tier: "OU", + doublesTier: "DOU", }, kyuremwhite: { inherit: true, randomBattleMoves: ["dracometeor", "dragonpulse", "icebeam", "fusionflare", "earthpower", "focusblast", "roost"], tier: "Uber", + doublesTier: "DUber", }, keldeo: { inherit: true, randomBattleMoves: ["hydropump", "secretsword", "calmmind", "hiddenpowerghost", "hiddenpowerelectric", "substitute", "surf"], tier: "OU", + doublesTier: "DUU", }, meloetta: { inherit: true, randomBattleMoves: ["relicsong", "closecombat", "calmmind", "psychic", "thunderbolt", "hypervoice", "uturn"], tier: "UU", + doublesTier: "DUU", }, genesect: { inherit: true, randomBattleMoves: ["uturn", "bugbuzz", "icebeam", "flamethrower", "thunderbolt"], tier: "Uber", + doublesTier: "DOU", }, genesectburn: { eventOnly: true, @@ -3131,3 +3534,5 @@ exports.BattleFormatsData = { requiredItem: "Shock Drive", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/mods/gen5/items.js b/data/mods/gen5/items.js similarity index 98% rename from mods/gen5/items.js rename to data/mods/gen5/items.js index ef3361cfd8eae..16de2fee0f573 100644 --- a/mods/gen5/items.js +++ b/data/mods/gen5/items.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleItems = { +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { aguavberry: { inherit: true, naturalGift: { @@ -543,3 +544,5 @@ exports.BattleItems = { }, }, }; + +exports.BattleItems = BattleItems; diff --git a/data/mods/gen5/moves.js b/data/mods/gen5/moves.js new file mode 100644 index 0000000000000..35d6dace415f5 --- /dev/null +++ b/data/mods/gen5/moves.js @@ -0,0 +1,1213 @@ +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + absorb: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + acidarmor: { + inherit: true, + pp: 40, + }, + aircutter: { + inherit: true, + basePower: 55, + }, + airslash: { + inherit: true, + pp: 20, + }, + aromatherapy: { + inherit: true, + desc: "Every Pokemon in the user's party is cured of its major status condition.", + onHit(target, source) { + this.add('-activate', source, 'move: Aromatherapy'); + source.side.pokemon.forEach(pokemon => pokemon.cureStatus()); + }, + }, + assist: { + inherit: true, + desc: "A random move among those known by the user's party members is selected for use. Does not select Assist, Bestow, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Sketch, Sleep Talk, Snatch, Struggle, Switcheroo, Thief, Transform, or Trick.", + onHit(target) { + let moves = []; + for (const pokemon of target.side.pokemon) { + if (pokemon === target) continue; + for (const moveSlot of pokemon.moveSlots) { + let moveid = moveSlot.id; + let noAssist = [ + 'assist', 'bestow', 'chatter', 'circlethrow', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'dragontail', 'endure', 'feint', 'focuspunch', 'followme', 'helpinghand', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'naturepower', 'protect', 'ragepowder', 'sketch', 'sleeptalk', 'snatch', 'struggle', 'switcheroo', 'thief', 'transform', 'trick', + ]; + if (moveid && !noAssist.includes(moveid)) { + moves.push(moveid); + } + } + } + let randomMove = ''; + if (moves.length) randomMove = this.sample(moves); + if (!randomMove) { + return false; + } + this.useMove(randomMove, target); + }, + }, + assurance: { + inherit: true, + basePower: 50, + }, + attract: { + inherit: true, + desc: "Causes the target to become infatuated, making it unable to attack 50% of the time. Fails if both the user and the target are the same gender, if either is genderless, or if the target is already infatuated. The effect ends when either the user or the target is no longer active. Pokemon with the Oblivious Ability are immune.", + }, + aurasphere: { + inherit: true, + basePower: 90, + }, + barrier: { + inherit: true, + pp: 30, + }, + bestow: { + inherit: true, + desc: "The target receives the user's held item. Fails if the user has no item or is holding a Mail, if the target is already holding an item, if the user is a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, or if the target is one of those Pokemon and the user is holding the respective item.", + flags: {protect: 1, mirror: 1}, + }, + bind: { + inherit: true, + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + blizzard: { + inherit: true, + basePower: 120, + }, + block: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, 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.", + flags: {protect: 1, reflectable: 1, mirror: 1}, + }, + bodyslam: { + inherit: true, + desc: "Has a 30% chance to paralyze the target.", + }, + bounce: { + inherit: 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, Thunder, and Twister, and Gust and Twister have doubled power when used against it. If the user is holding a Power Herb, the move completes in one turn.", + }, + bubble: { + inherit: true, + basePower: 20, + }, + bugbuzz: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + camouflage: { + inherit: true, + desc: "The user's type changes based on the battle terrain. Ground type on the regular Wi-Fi terrain. Fails if the user's type cannot be changed or if the user is already purely that type.", + shortDesc: "Changes user's type based on terrain. (Ground)", + onHit(target) { + if (!target.setType('Ground')) return false; + this.add('-start', target, 'typechange', 'Ground'); + }, + }, + charm: { + inherit: true, + type: "Normal", + }, + chatter: { + inherit: true, + basePower: 60, + desc: "Has an X% chance to confuse the target, where X is 0 unless the user is a Chatot that hasn't Transformed. If the user is a Chatot, X is 0 or 10 depending on the volume of Chatot's recorded cry, if any; 0 for a low volume or no recording, 10 for a medium to high volume recording.", + shortDesc: "For Chatot, 10% chance to confuse the target.", + onModifyMove(move, pokemon) { + if (pokemon.template.species !== 'Chatot') delete move.secondaries; + }, + secondary: { + chance: 10, + volatileStatus: 'confusion', + }, + flags: {protect: 1, sound: 1, distance: 1}, + }, + clamp: { + inherit: true, + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + conversion: { + inherit: true, + desc: "The user's type changes to match the original type of one of its known moves besides this move, at random, but not either of its current types. Fails if the user cannot change its type, or if this move would only be able to select one of the user's current types.", + shortDesc: "Changes user's type to match a known move.", + onHit(target) { + let possibleTypes = target.moveSlots.map(moveSlot => { + let move = this.getMove(moveSlot.id); + if (move.id !== 'conversion' && !target.hasType(move.type)) { + return move.type; + } + return ''; + }).filter(type => type); + if (!possibleTypes.length) { + return false; + } + let type = this.sample(possibleTypes); + + if (!target.setType(type)) return false; + this.add('-start', target, 'typechange', type); + }, + }, + copycat: { + inherit: true, + desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was Assist, Bestow, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Sketch, Sleep Talk, Snatch, Struggle, Switcheroo, Thief, Transform, or Trick.", + onHit(pokemon) { + let noCopycat = ['assist', 'bestow', 'chatter', 'circlethrow', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'dragontail', 'endure', 'feint', 'focuspunch', 'followme', 'helpinghand', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'naturepower', 'protect', 'ragepowder', 'sketch', 'sleeptalk', 'snatch', 'struggle', 'switcheroo', 'thief', 'transform', 'trick']; + if (!this.lastMove || noCopycat.includes(this.lastMove.id)) { + return false; + } + this.useMove(this.lastMove.id, pokemon); + }, + }, + cottonspore: { + inherit: true, + onTryHit() {}, + target: "normal", + }, + covet: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail, or if the target is a Giratina holding a Griseous Orb, an Arceus holding a Plate, or a Genesect holding a Drive. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + pp: 40, + }, + crabhammer: { + inherit: true, + basePower: 90, + }, + defog: { + inherit: true, + desc: "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, Safeguard, Mist, Spikes, Toxic Spikes, and Stealth Rock end for the target's side. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness.", + shortDesc: "-1 evasion; clears target side's hazards/screens.", + onHit(pokemon) { + if (!pokemon.volatiles['substitute']) this.boost({evasion: -1}); + let sideConditions = ['reflect', 'lightscreen', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock']; + for (const condition of sideConditions) { + if (pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.getEffect(condition).name, '[from] move: Defog', '[of] ' + pokemon); + } + } + }, + }, + detect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, Protect, Quick Guard, or Wide Guard. Fails if the user moves last this turn.", + }, + dracometeor: { + inherit: true, + basePower: 140, + }, + dragonpulse: { + inherit: true, + basePower: 90, + }, + dragonrush: { + inherit: true, + desc: "Has a 20% chance to flinch the target.", + }, + drainpunch: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + }, + dreameater: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + echoedvoice: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + electroball: { + inherit: true, + desc: "The power of this move depends on (user's current Speed / target's current Speed), rounded down. Power is equal to 150 if the result is 4 or more, 120 if 3, 80 if 2, 60 if 1, 40 if less than 1. If the target's current Speed is 0, it is treated as 1 instead.", + }, + endure: { + inherit: true, + desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, Protect, Quick Guard, or Wide Guard. Fails if the user moves last this turn.", + }, + energyball: { + inherit: true, + basePower: 80, + }, + entrainment: { + inherit: true, + desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is Multitype, Truant, or the same Ability as the user, or if the user's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Trace, or Zen Mode.", + }, + extrasensory: { + inherit: true, + pp: 30, + }, + facade: { + inherit: true, + desc: "Power doubles if the user is burned, paralyzed, or poisoned.", + }, + feint: { + inherit: true, + desc: "If this move is successful, it breaks through the target's Detect or Protect for this turn, allowing other Pokemon to attack the target normally. If the target is an opponent and its side is protected by Quick Guard or Wide Guard, that protection is also broken for this turn and other Pokemon may attack the opponent's side normally.", + flags: {}, + }, + finalgambit: { + inherit: true, + flags: {contact: 1, protect: 1}, + }, + fireblast: { + inherit: true, + basePower: 120, + }, + firepledge: { + inherit: true, + basePower: 50, + basePowerCallback(target, source, move) { + if (['grasspledge', 'waterpledge'].includes(move.sourceEffect)) { + this.add('-combine'); + return 150; + } + return 50; + }, + }, + firespin: { + inherit: true, + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + flamethrower: { + inherit: true, + basePower: 95, + }, + fly: { + inherit: 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, Thunder, and Twister, and Gust and Twister have doubled power when used against it. If the user is holding a Power Herb, the move completes in one turn.", + }, + followme: { + inherit: true, + priority: 3, + }, + frostbreath: { + inherit: true, + basePower: 40, + }, + furycutter: { + inherit: true, + basePower: 20, + effect: { + duration: 2, + onStart() { + this.effectData.multiplier = 1; + }, + onRestart() { + if (this.effectData.multiplier < 8) { + this.effectData.multiplier <<= 1; + } + this.effectData.duration = 2; + }, + }, + }, + futuresight: { + inherit: true, + basePower: 100, + onTry(source, target) { + target.side.addSideCondition('futuremove'); + if (target.side.sideConditions['futuremove'].positions[target.position]) { + return false; + } + target.side.sideConditions['futuremove'].positions[target.position] = { + duration: 3, + move: 'futuresight', + source: source, + moveData: { + id: 'futuresight', + name: "Future Sight", + accuracy: 100, + basePower: 100, + category: "Special", + priority: 0, + flags: {}, + ignoreImmunity: false, + effectType: 'Move', + isFutureMove: true, + type: 'Psychic', + }, + }; + this.add('-start', source, 'move: Future Sight'); + return null; + }, + }, + gigadrain: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + glare: { + inherit: true, + accuracy: 90, + }, + grasswhistle: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + }, + grasspledge: { + inherit: true, + basePower: 50, + basePowerCallback(target, source, move) { + if (['waterpledge', 'firepledge'].includes(move.sourceEffect)) { + this.add('-combine'); + return 150; + } + return 50; + }, + }, + gravity: { + inherit: true, + desc: "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, 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, and the Arena Trap Ability can affect Flying types or Pokemon with the Levitate Ability. Fails if this move is already in effect.", + }, + growl: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + }, + growth: { + inherit: true, + pp: 40, + }, + gunkshot: { + inherit: true, + accuracy: 70, + }, + gyroball: { + inherit: true, + desc: "Power is equal to (25 * target's current Speed / user's current Speed) + 1, rounded down, but not more than 150. If the user's current Speed is 0, it is treated as 1 instead.", + }, + healbell: { + inherit: true, + desc: "Every Pokemon in the user's party is cured of its major status condition. Active Pokemon with the Soundproof Ability are also cured.", + flags: {snatch: 1, sound: 1}, + onHit(target, source) { + this.add('-activate', source, 'move: Heal Bell'); + source.side.pokemon.forEach(pokemon => pokemon.cureStatus()); + }, + }, + healpulse: { + inherit: true, + desc: "The target restores 1/2 of its maximum HP, rounded half up.", + heal: [1, 2], + onHit() {}, + }, + heatcrash: { + inherit: true, + desc: "The power of this move depends on (user's weight / target's weight), rounded down. Power is equal to 120 if the result is 5 or more, 100 if 4, 80 if 3, 60 if 2, and 40 if 1 or less.", + }, + heatwave: { + inherit: true, + basePower: 100, + }, + hex: { + inherit: true, + basePower: 50, + }, + hiddenpower: { + inherit: true, + basePower: 0, + basePowerCallback(pokemon) { + return pokemon.hpPower || 70; + }, + desc: "This move's type and power depend on the user's individual values (IVs). Power varies between 30 and 70, and type can be any but Normal.", + shortDesc: "Varies in power and type based on the user's IVs.", + }, + hiddenpowerbug: { + inherit: true, + basePower: 70, + }, + hiddenpowerdark: { + inherit: true, + basePower: 70, + }, + hiddenpowerdragon: { + inherit: true, + basePower: 70, + }, + hiddenpowerelectric: { + inherit: true, + basePower: 70, + }, + hiddenpowerfighting: { + inherit: true, + basePower: 70, + }, + hiddenpowerfire: { + inherit: true, + basePower: 70, + }, + hiddenpowerflying: { + inherit: true, + basePower: 70, + }, + hiddenpowerghost: { + inherit: true, + basePower: 70, + }, + hiddenpowergrass: { + inherit: true, + basePower: 70, + }, + hiddenpowerground: { + inherit: true, + basePower: 70, + }, + hiddenpowerice: { + inherit: true, + basePower: 70, + }, + hiddenpowerpoison: { + inherit: true, + basePower: 70, + }, + hiddenpowerpsychic: { + inherit: true, + basePower: 70, + }, + hiddenpowerrock: { + inherit: true, + basePower: 70, + }, + hiddenpowersteel: { + inherit: true, + basePower: 70, + }, + hiddenpowerwater: { + inherit: true, + basePower: 70, + }, + hornleech: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1}, + }, + hurricane: { + inherit: true, + desc: "Has a 30% chance to confuse the target. This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If the weather is Rain Dance, this move does not check accuracy. If the weather is Sunny Day, this move's accuracy is 50%.", + basePower: 120, + }, + hydropump: { + inherit: true, + basePower: 120, + }, + hypervoice: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + icebeam: { + inherit: true, + basePower: 95, + }, + incinerate: { + inherit: true, + basePower: 30, + desc: "The target loses its held item if it is a Berry. This move cannot cause Pokemon with the Sticky Hold Ability to lose their held item. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + shortDesc: "Destroys the foe(s) Berry.", + onHit(pokemon, source) { + let item = pokemon.getItem(); + if (item.isBerry && pokemon.takeItem(source)) { + this.add('-enditem', pokemon, item.name, '[from] move: Incinerate'); + } + }, + }, + ingrain: { + inherit: true, + desc: "The user has 1/16 of its maximum HP restored at the end of each turn, but it is prevented from switching out and other Pokemon cannot force the user to switch out. The user can still switch out if it uses Baton Pass, U-turn, or Volt Switch. If the user leaves the field using Baton Pass, the replacement will remain trapped and still receive the healing effect. During the effect, the user can be hit normally by Ground-type attacks and be affected by Spikes and Toxic Spikes, even if the user is a Flying type or has the Levitate Ability.", + }, + knockoff: { + inherit: true, + basePower: 20, + desc: "If the user has not fainted, the target loses its held item. This move cannot cause Pokemon with the Sticky Hold Ability to lose their held item, or force a Giratina, an Arceus, or a Genesect to lose their Griseous Orb, Plate, or Drive, respectively. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + shortDesc: "Removes the target's held item.", + onBasePower() {}, + }, + leafstorm: { + inherit: true, + basePower: 140, + }, + leechlife: { + inherit: true, + flags: {contact: 1, protect: 1, mirror: 1}, + }, + lick: { + inherit: true, + basePower: 20, + }, + lightscreen: { + inherit: true, + effect: { + duration: 5, + durationCallback(target, source, effect) { + if (source && source.hasItem('lightclay')) { + return 8; + } + return 5; + }, + onAnyModifyDamage(damage, source, target, move) { + if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Special') { + if (!move.crit && !move.infiltrates) { + this.debug('Light Screen weaken'); + if (target.side.active.length > 1) return this.chainModify([0xA8F, 0x1000]); + return this.chainModify(0.5); + } + } + }, + onStart(side) { + this.add('-sidestart', side, 'move: Light Screen'); + }, + onResidualOrder: 21, + onResidualSubOrder: 1, + onEnd(side) { + this.add('-sideend', side, 'move: Light Screen'); + }, + }, + }, + lowsweep: { + inherit: true, + basePower: 60, + }, + magiccoat: { + inherit: true, + desc: "Until the end of the turn, the user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. Moves reflected in this way are unable to be reflected again by this or the Magic Bounce Ability's effect. Spikes, Stealth Rock, and Toxic Spikes can only be reflected once per side, by the leftmost Pokemon under this or the Magic Bounce Ability's effect. The Lightning Rod and Storm Drain Abilities redirect their respective moves before this move takes effect.", + }, + magicroom: { + inherit: true, + priority: 0, + }, + magmastorm: { + inherit: true, + desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", + basePower: 120, + }, + magnetrise: { + inherit: true, + desc: "For 5 turns, the user is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, and the Arena Trap Ability as long as it remains active. If the user uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, and Iron Ball override this move if the user is under any of their effects. Fails if the user is already under this effect or the effects of Ingrain or Smack Down.", + }, + meanlook: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, 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.", + flags: {protect: 1, reflectable: 1, mirror: 1}, + }, + megadrain: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + metalsound: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + }, + meteormash: { + inherit: true, + accuracy: 85, + basePower: 100, + }, + metronome: { + inherit: true, + desc: "A random move is selected for use, other than After You, Assist, Bestow, Chatter, Copycat, Counter, Covet, Destiny Bond, Detect, Endure, Feint, Focus Punch, Follow Me, Freeze Shock, Helping Hand, Ice Burn, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Quash, Quick Guard, Rage Powder, Relic Song, Secret Sword, Sketch, Sleep Talk, Snarl, Snatch, Snore, Struggle, Switcheroo, Techno Blast, Thief, Transform, Trick, V-create, or Wide Guard.", + }, + minimize: { + inherit: true, + desc: "Raises the user's evasiveness by 2 stages. Whether or not the user's evasiveness was changed, Stomp and Steamroller will have their damage doubled if used against the user while it is active.", + pp: 20, + effect: { + noCopy: true, + onSourceModifyDamage(damage, source, target, move) { + if (['stomp', 'steamroller'].includes(move.id)) { + return this.chainModify(2); + } + }, + }, + }, + moonlight: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", + type: "Normal", + }, + morningsun: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", + }, + mudsport: { + num: 300, + accuracy: true, + basePower: 0, + category: "Status", + desc: "While the user is active, all Electric-type attacks used by any active Pokemon have their power multiplied by 0.33. Fails if this effect is already active for any Pokemon.", + shortDesc: "Weakens Electric-type attacks to 1/3 their power.", + id: "mudsport", + name: "Mud Sport", + pp: 15, + priority: 0, + flags: {}, + volatileStatus: 'mudsport', + onTryHitField(target, source) { + if (source.volatiles['mudsport']) return false; + }, + effect: { + noCopy: true, + onStart(pokemon) { + this.add("-start", pokemon, 'Mud Sport'); + }, + onBasePowerPriority: 1, + onAnyBasePower(basePower, user, target, move) { + if (move.type === 'Electric') return this.chainModify([0x548, 0x1000]); // The Mud Sport modifier is slightly higher than the usual 0.33 modifier (0x547) + }, + }, + secondary: null, + target: "all", + type: "Ground", + }, + muddywater: { + inherit: true, + basePower: 95, + }, + naturepower: { + inherit: true, + desc: "This move calls another move for use based on the battle terrain. Earthquake on the regular Wi-Fi terrain.", + shortDesc: "Attack changes based on terrain. (Earthquake)", + onTryHit() {}, + onHit(pokemon) { + this.useMove('earthquake', pokemon); + }, + target: "self", + }, + overheat: { + inherit: true, + basePower: 140, + }, + perishsong: { + inherit: true, + flags: {sound: 1, distance: 1}, + }, + pinmissile: { + inherit: true, + accuracy: 85, + basePower: 14, + }, + poisonfang: { + inherit: true, + desc: "Has a 30% chance to badly poison the target.", + shortDesc: "30% chance to badly poison the target.", + secondary: { + chance: 30, + status: 'tox', + }, + }, + poisongas: { + inherit: true, + accuracy: 80, + }, + poisonpowder: { + inherit: true, + onTryHit() {}, + }, + powergem: { + inherit: true, + basePower: 70, + }, + protect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, Protect, Quick Guard, or Wide Guard. Fails if the user moves last this turn.", + }, + psychup: { + inherit: true, + onHit(target, source) { + for (let i in target.boosts) { + // @ts-ignore + source.boosts[i] = target.boosts[i]; + } + this.add('-copyboost', source, target, '[from] move: Psych Up'); + }, + }, + psychoshift: { + inherit: true, + accuracy: 90, + }, + psywave: { + inherit: true, + accuracy: 80, + }, + pursuit: { + inherit: true, + desc: "If an adjacent 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 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.", + }, + quickguard: { + inherit: true, + desc: "The user and its party members are protected from attacks with original priority greater than 0 made by other Pokemon, including allies, during this turn. This attack has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this attack fails or if the user's last used move is not Detect, Endure, Protect, Quick Guard, or Wide Guard. If X is 256 or more, this move has a 1/(2^32) chance of being successful. Fails if the user moves last this turn or if this move is already in effect for the user's side.", + stallingMove: true, + onTryHitSide(side, source) { + return this.willAct() && this.runEvent('StallMove', source); + }, + onHitSide(side, source) { + source.addVolatile('stall'); + }, + effect: { + duration: 1, + onStart(target, source) { + this.add('-singleturn', source, 'Quick Guard'); + }, + onTryHitPriority: 4, + onTryHit(target, source, effect) { + // Quick Guard only blocks moves with a natural positive priority + // (e.g. it doesn't block 0 priority moves boosted by Prankster) + if (effect && (effect.id === 'feint' || this.getMove(effect.id).priority <= 0)) { + return; + } + this.add('-activate', target, 'Quick Guard'); + let lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + return null; + }, + }, + }, + ragepowder: { + inherit: true, + priority: 3, + flags: {}, + }, + reflect: { + inherit: true, + effect: { + duration: 5, + durationCallback(target, source, effect) { + if (source && source.hasItem('lightclay')) { + return 8; + } + return 5; + }, + onAnyModifyDamage(damage, source, target, move) { + if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Physical') { + if (!move.crit && !move.infiltrates) { + this.debug('Reflect weaken'); + if (target.side.active.length > 1) return this.chainModify([0xA8F, 0x1000]); + return this.chainModify(0.5); + } + } + }, + onStart(side) { + this.add('-sidestart', side, 'Reflect'); + }, + onResidualOrder: 21, + onEnd(side) { + this.add('-sideend', side, 'Reflect'); + }, + }, + }, + relicsong: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + roar: { + inherit: true, + accuracy: 100, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, authentic: 1}, + }, + rocktomb: { + inherit: true, + accuracy: 80, + basePower: 50, + pp: 10, + }, + roleplay: { + inherit: true, + desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is Multitype or already matches the target, or if the target's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Trace, Wonder Guard, or Zen Mode.", + }, + round: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + sandtomb: { + inherit: true, + desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", + }, + sacredsword: { + inherit: true, + pp: 20, + }, + scald: { + inherit: true, + desc: "Has a 30% chance to burn the target.", + shortDesc: "30% chance to burn the target.", + thawsTarget: false, + }, + screech: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + }, + secretpower: { + inherit: true, + desc: "Has a 30% chance to cause a secondary effect on the target based on the battle terrain. Lowers accuracy by 1 stage on the regular Wi-Fi terrain. The secondary effect chance is not affected by the Serene Grace Ability.", + shortDesc: "Effect varies with terrain. (30% chance acc -1)", + effect: { + duration: 1, + onAfterMoveSecondarySelf(source, target, move) { + if (this.randomChance(3, 10)) { + this.boost({accuracy: -1}, target, source); + } + source.removeVolatile('secretpower'); + }, + }, + }, + shadowforce: { + inherit: true, + desc: "If this move is successful, it breaks through the target's Detect or Protect for this turn, allowing other Pokemon to attack the target normally. If the target is an opponent and its side is protected by Quick Guard or Wide Guard, that protection is also broken for this turn and other Pokemon may attack the opponent'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.", + }, + simplebeam: { + inherit: true, + desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is Multitype, Simple, or Truant.", + }, + sing: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + }, + skillswap: { + inherit: true, + desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Illusion, Multitype, or Wonder Guard, or if both have the same Ability.", + onHit(target, source) { + let targetAbility = target.ability; + let sourceAbility = source.ability; + if (targetAbility === sourceAbility) { + return false; + } + this.add('-activate', source, 'move: Skill Swap', this.getAbility(targetAbility), this.getAbility(sourceAbility), '[of] ' + target); + source.setAbility(targetAbility); + target.setAbility(sourceAbility); + }, + }, + skullbash: { + inherit: true, + basePower: 100, + pp: 15, + }, + skydrop: { + inherit: true, + desc: "This attack takes the target into the air with the user on the first turn and executes on the second. On the first turn, the user and the target avoid all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, 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, if the target has a substitute, or if the target is using Bounce, Dig, Dive, Fly, Shadow Force, or Sky Drop. If the effect of Gravity ends this effect before the second turn, both the user and the target return to the ground, but the target will otherwise remain under this effect until the user leaves the field or successfully executes the second turn of any two-turn move.", + onTryHit(target, source, move) { + if (target.fainted) return false; + if (source.removeVolatile(move.id)) { + if (target !== source.volatiles['twoturnmove'].source) return false; + + if (target.hasType('Flying')) { + this.add('-immune', target); + this.add('-end', target, 'Sky Drop'); + return null; + } + } else { + if (target.volatiles['substitute'] || target.side === source.side) { + return false; + } + + this.add('-prepare', source, move.name, target); + source.addVolatile('twoturnmove', target); + return null; + } + }, + }, + sleeppowder: { + inherit: true, + onTryHit() {}, + }, + sleeptalk: { + inherit: true, + desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0 PP. This move cannot select Assist, Bide, Chatter, Copycat, Focus Punch, Me First, Metronome, Mimic, Mirror Move, Nature Power, Sketch, Sleep Talk, Struggle, Uproar, or any two-turn move.", + }, + smellingsalts: { + inherit: true, + basePower: 60, + }, + smog: { + inherit: true, + basePower: 20, + }, + snarl: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + snore: { + inherit: true, + basePower: 40, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + solarbeam: { + inherit: true, + 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.", + }, + spiderweb: { + inherit: true, + desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, 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.", + }, + spikes: { + inherit: true, + desc: "Sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Can be used up to three times before failing. Opponents lose 1/8 of their maximum HP with one layer, 1/6 of their maximum HP with two layers, and 1/4 of their maximum HP with three layers, all rounded down. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin successfully, or is hit by Defog.", + }, + spore: { + inherit: true, + onTryHit() {}, + }, + stealthrock: { + inherit: true, + desc: "Sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in. Fails if the effect is already active on the opposing side. 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 successfully, or is hit by Defog.", + }, + steamroller: { + inherit: true, + desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", + }, + stomp: { + inherit: true, + desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", + }, + stormthrow: { + inherit: true, + basePower: 40, + }, + stringshot: { + inherit: true, + desc: "Lowers the target's Speed by 1 stage.", + shortDesc: "Lowers the foe(s) Speed by 1.", + boosts: { + spe: -1, + }, + }, + strugglebug: { + inherit: true, + basePower: 30, + }, + stunspore: { + inherit: true, + onTryHit() {}, + }, + substitute: { + inherit: true, + 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 substitute is removed once enough damage is inflicted on it, or if the user switches out or faints. Baton Pass can be used to transfer the substitute to an ally, and the substitute will keep its remaining HP. Until the substitute is broken, it receives damage from all attacks made by other Pokemon and shields the user from status effects and stat stage changes caused by other Pokemon. The user still takes normal damage from weather and status effects while behind its substitute. If the substitute breaks during a multi-hit attack, the user will take damage from any remaining hits. If a substitute is created while the user is trapped by a binding move, the binding effect ends immediately. Fails if the user does not have enough HP remaining to create a substitute without fainting, or if it already has a substitute.", + effect: { + onStart(target) { + this.add('-start', target, 'Substitute'); + this.effectData.hp = Math.floor(target.maxhp / 4); + delete target.volatiles['partiallytrapped']; + }, + onTryPrimaryHitPriority: -1, + onTryPrimaryHit(target, source, move) { + if (target === source || move.flags['authentic']) { + return; + } + let damage = this.getDamage(source, target, move); + if (!damage && damage !== 0) { + this.add('-fail', source); + this.attrLastMove('[still]'); + return null; + } + damage = this.runEvent('SubDamage', target, source, move, damage); + if (!damage) { + return damage; + } + if (damage > target.volatiles['substitute'].hp) { + damage = /** @type {number} */ (target.volatiles['substitute'].hp); + } + 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 && damage) { + this.damage(this.calcRecoilDamage(damage, move), 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 0; // hit + }, + onEnd(target) { + this.add('-end', target, 'Substitute'); + }, + }, + }, + submission: { + inherit: true, + pp: 25, + }, + supersonic: { + inherit: true, + flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, + }, + surf: { + inherit: true, + basePower: 95, + }, + sweetkiss: { + inherit: true, + type: "Normal", + }, + sweetscent: { + inherit: true, + desc: "Lowers the target's evasiveness by 1 stage.", + shortDesc: "Lowers the foe(s) evasiveness by 1.", + boosts: { + evasion: -1, + }, + }, + switcheroo: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, or if the user is trying to give or take a Griseous Orb, a Plate, or a Drive to or from a Giratina, an Arceus, or a Genesect, respectively. The target is immune to this move if it has the Sticky Hold Ability.", + }, + swordsdance: { + inherit: true, + pp: 30, + }, + synchronoise: { + inherit: true, + basePower: 70, + pp: 15, + }, + synthesis: { + inherit: true, + desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", + }, + tailwind: { + inherit: true, + pp: 30, + }, + taunt: { + inherit: true, + desc: "Prevents the target from using non-damaging moves for its next three turns.", + }, + technoblast: { + inherit: true, + basePower: 85, + }, + telekinesis: { + inherit: true, + desc: "For 3 turns, the target cannot avoid any attacks made against it, other than OHKO moves, as long as it remains active. During the effect, the target is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, and the Arena Trap Ability as long as it remains active. If the target uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, and Iron Ball override this move if the target is under any of their effects. Fails if the target is already under this effect or the effects of Ingrain or Smack Down. The target is immune to this move on use if its species is Diglett or Dugtrio.", + }, + thief: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail, or if the target is a Giratina holding a Griseous Orb, an Arceus holding a Plate, or a Genesect holding a Drive. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + basePower: 40, + pp: 10, + }, + thunder: { + inherit: true, + desc: "Has a 30% chance to paralyze the target. This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If the weather is Rain Dance, this move does not check accuracy. If the weather is Sunny Day, this move's accuracy is 50%.", + basePower: 120, + }, + thunderbolt: { + inherit: true, + basePower: 95, + }, + toxic: { + inherit: true, + desc: "Badly poisons the target.", + shortDesc: "Badly poisons the target.", + }, + toxicspikes: { + inherit: true, + desc: "Sets up a hazard on the opposing side of the field, poisoning each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Can be used up to two times before failing. Opposing Pokemon become poisoned with one layer and badly poisoned with two layers. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin successfully, is hit by Defog, or a grounded Poison-type Pokemon switches in. Safeguard prevents the opposing party from being poisoned on switch-in, but a substitute does not.", + }, + trick: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, or if the user is trying to give or take a Griseous Orb, a Plate, or a Drive to or from a Giratina, an Arceus, or a Genesect, respectively. The target is immune to this move if it has the Sticky Hold Ability.", + }, + uproar: { + inherit: true, + flags: {protect: 1, mirror: 1, sound: 1}, + }, + vinewhip: { + inherit: true, + basePower: 35, + pp: 15, + }, + wakeupslap: { + inherit: true, + basePower: 60, + }, + waterpledge: { + inherit: true, + basePower: 50, + basePowerCallback(target, source, move) { + if (['firepledge', 'grasspledge'].includes(move.sourceEffect)) { + this.add('-combine'); + return 150; + } + return 50; + }, + }, + watersport: { + num: 346, + accuracy: true, + basePower: 0, + category: "Status", + desc: "While the user is active, all Fire-type attacks used by any active Pokemon have their power multiplied by 0.33. Fails if this effect is already active for any Pokemon.", + shortDesc: "Weakens Fire-type attacks to 1/3 their power.", + id: "watersport", + name: "Water Sport", + pp: 15, + priority: 0, + flags: {}, + volatileStatus: 'watersport', + onTryHitField(target, source) { + if (source.volatiles['watersport']) return false; + }, + effect: { + noCopy: true, + onStart(pokemon) { + this.add("-start", pokemon, 'move: Water Sport'); + }, + onBasePowerPriority: 1, + onAnyBasePower(basePower, user, target, move) { + if (move.type === 'Fire') return this.chainModify([0x548, 0x1000]); // The Water Sport modifier is slightly higher than the usual 0.33 modifier (0x547) + }, + }, + secondary: null, + target: "all", + type: "Water", + }, + weatherball: { + inherit: true, + desc: "Power doubles if a weather condition is active, and this move's type changes to match. Ice type during Hail, Water type during Rain Dance, Rock type during Sandstorm, and Fire type during Sunny Day.", + }, + whirlpool: { + inherit: true, + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, + whirlwind: { + inherit: true, + accuracy: 100, + flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, + }, + wideguard: { + inherit: true, + desc: "The user and its party members are protected from damaging attacks made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This attack has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this attack fails or if the user's last used move is not Detect, Endure, Protect, Quick Guard, or Wide Guard. If X is 256 or more, this move has a 1/(2^32) chance of being successful. Fails if the user moves last this turn or if this move is already in effect for the user's side.", + stallingMove: true, + onTryHitSide(side, source) { + return this.willAct() && this.runEvent('StallMove', source); + }, + onHitSide(side, source) { + source.addVolatile('stall'); + }, + }, + willowisp: { + inherit: true, + accuracy: 75, + }, + wonderroom: { + inherit: true, + priority: -7, + }, + worryseed: { + inherit: true, + desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is Insomnia, Multitype, or Truant.", + }, + wrap: { + inherit: true, + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/gen5/pokedex.js b/data/mods/gen5/pokedex.js similarity index 98% rename from mods/gen5/pokedex.js rename to data/mods/gen5/pokedex.js index 7cbf2174703ad..3b04ff9d2040f 100644 --- a/mods/gen5/pokedex.js +++ b/data/mods/gen5/pokedex.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattlePokedex = { +/**@type {{[k: string]: ModdedTemplateData}} */ +let BattlePokedex = { butterfree: { inherit: true, baseStats: {hp: 60, atk: 45, def: 50, spa: 80, spd: 80, spe: 70}, @@ -397,3 +398,5 @@ exports.BattlePokedex = { abilities: {0: "Flame Body"}, }, }; + +exports.BattlePokedex = BattlePokedex; diff --git a/data/mods/gen5/random-teams.js b/data/mods/gen5/random-teams.js new file mode 100644 index 0000000000000..ea5408138c3a9 --- /dev/null +++ b/data/mods/gen5/random-teams.js @@ -0,0 +1,797 @@ +'use strict'; + +const RandomGen6Teams = require('../../mods/gen6/random-teams'); + +class RandomGen5Teams extends RandomGen6Teams { + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {RandomTeamsTypes["TeamDetails"]} [teamDetails] + * @return {RandomTeamsTypes["RandomSet"]} + */ + randomSet(template, slot, teamDetails = {}) { + if (slot === undefined) slot = 1; + let baseTemplate = (template = this.getTemplate(template)); + let species = template.species; + + if (!template.exists || (!template.randomBattleMoves && !template.learnset)) { + // GET IT? UNOWN? BECAUSE WE CAN'T TELL WHAT THE POKEMON IS + template = this.getTemplate('unown'); + + let err = new Error('Template incompatible with random battles: ' + species); + Monitor.crashlog(err, 'The gen 5 randbat set generator'); + } + + if (template.battleOnly) { + // Only change the species. The template has custom moves, and may have different typing and requirements. + species = template.baseSpecies; + } + + let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : template.learnset ? Object.keys(template.learnset) : []); + /**@type {string[]} */ + let moves = []; + let ability = ''; + let item = ''; + let evs = { + hp: 85, + atk: 85, + def: 85, + spa: 85, + spd: 85, + spe: 85, + }; + let ivs = { + hp: 31, + atk: 31, + def: 31, + spa: 31, + spd: 31, + spe: 31, + }; + /**@type {{[k: string]: true}} */ + let hasType = {}; + hasType[template.types[0]] = true; + if (template.types[1]) { + hasType[template.types[1]] = true; + } + /**@type {{[k: string]: true}} */ + let hasAbility = {}; + hasAbility[template.abilities[0]] = true; + if (template.abilities[1]) { + // @ts-ignore + hasAbility[template.abilities[1]] = true; + } + if (template.abilities['H']) { + // @ts-ignore + hasAbility[template.abilities['H']] = true; + } + let availableHP = 0; + for (const setMoveid of movePool) { + if (setMoveid.startsWith('hiddenpower')) availableHP++; + } + + // These moves can be used even if we aren't setting up to use them: + let SetupException = ['closecombat', 'extremespeed', 'suckerpunch', 'superpower', 'dracometeor', 'leafstorm', 'overheat']; + + let counterAbilities = ['Adaptability', 'Contrary', 'Hustle', 'Iron Fist', 'Skill Link']; + + /**@type {{[k: string]: boolean}} */ + let hasMove = {}; + let counter; + + do { + // Keep track of all moves we have: + hasMove = {}; + for (const setMoveid of moves) { + if (setMoveid.startsWith('hiddenpower')) { + hasMove['hiddenpower'] = true; + } else { + hasMove[setMoveid] = true; + } + } + + // Choose next 4 moves from learnset/viable moves and add them to moves list: + while (moves.length < 4 && movePool.length) { + let moveid = this.sampleNoReplace(movePool); + if (moveid.substr(0, 11) === 'hiddenpower') { + availableHP--; + if (hasMove['hiddenpower']) continue; + hasMove['hiddenpower'] = true; + } else { + hasMove[moveid] = true; + } + moves.push(moveid); + } + + counter = this.queryMoves(moves, hasType, hasAbility, movePool); + + // Iterate through the moves again, this time to cull them: + for (const [i, setMoveid] of moves.entries()) { + let move = this.getMove(setMoveid); + let moveid = move.id; + let rejected = false; + let isSetup = false; + + switch (moveid) { + // Not very useful without their supporting moves + case 'batonpass': + if (!counter.setupType && !counter['speedsetup'] && !hasMove['substitute'] && !hasMove['wish'] && !hasAbility['Speed Boost']) rejected = true; + break; + case 'focuspunch': + if (!hasMove['substitute'] || counter.damagingMoves.length < 2) rejected = true; + break; + case 'perishsong': + if (!hasMove['protect']) rejected = true; + break; + case 'rest': + if (movePool.includes('sleeptalk')) rejected = true; + break; + case 'sleeptalk': + if (!hasMove['rest']) rejected = true; + if (movePool.length > 1) { + let rest = movePool.indexOf('rest'); + if (rest >= 0) this.fastPop(movePool, rest); + } + break; + case 'storedpower': + if (!counter.setupType && !hasMove['cosmicpower']) rejected = true; + break; + + // 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': + if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) rejected = true; + if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + isSetup = true; + break; + case 'calmmind': case 'nastyplot': case 'quiverdance': case 'tailglow': + if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; + if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + isSetup = true; + break; + case 'growth': case 'shellsmash': case 'workup': + if (counter.setupType !== 'Mixed' || counter['mixedsetup'] > 1) rejected = true; + if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2 && !hasMove['batonpass']) rejected = true; + if (moveid === 'growth' && !hasMove['sunnyday']) rejected = true; + isSetup = true; + break; + case 'agility': case 'autotomize': case 'rockpolish': + if (counter.damagingMoves.length < 2 && !counter.setupType && !hasMove['batonpass']) rejected = true; + if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (!counter.setupType) isSetup = true; + break; + + // Bad after setup + case 'circlethrow': case 'dragontail': + if (counter.setupType && ((!hasMove['rest'] && !hasMove['sleeptalk']) || hasMove['stormthrow'])) rejected = true; + if (!!counter['speedsetup'] || hasMove['encore'] || hasMove['roar'] || hasMove['whirlwind']) rejected = true; + break; + case 'fakeout': + if (counter.setupType || hasMove['substitute'] || hasMove['switcheroo'] || hasMove['trick']) rejected = true; + break; + case 'haze': case 'knockoff': case 'magiccoat': case 'pursuit': case 'spikes': case 'waterspout': + if (counter.setupType || !!counter['speedsetup'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + break; + case 'healingwish': + if (counter.setupType || !!counter['recovery'] || hasMove['substitute']) rejected = true; + break; + case 'leechseed': case 'roar': case 'whirlwind': + if (counter.setupType || !!counter['speedsetup'] || hasMove['dragontail']) rejected = true; + break; + case 'nightshade': case 'seismictoss': case 'superfang': + if (counter.damagingMoves.length > 1 || counter.setupType) rejected = true; + break; + case 'protect': + if (counter.setupType && (hasAbility['Guts'] || hasAbility['Speed Boost']) && !hasMove['batonpass']) rejected = true; + if (hasMove['rest'] || hasMove['lightscreen'] && hasMove['reflect']) rejected = true; + break; + case 'stealthrock': + if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] || teamDetails.stealthRock) rejected = true; + break; + case 'switcheroo': case 'trick': + if (counter.Physical + counter.Special < 3 || counter.setupType) rejected = true; + if (hasMove['lightscreen'] || hasMove['reflect'] || hasMove['suckerpunch'] || hasMove['trickroom']) rejected = true; + break; + case 'toxicspikes': + if (counter.setupType || teamDetails.toxicSpikes) rejected = true; + break; + case 'trickroom': + if (counter.setupType || !!counter['speedsetup'] || counter.damagingMoves.length < 2) rejected = true; + if (hasMove['lightscreen'] || hasMove['reflect']) rejected = true; + break; + case 'uturn': + if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass']) rejected = true; + break; + case 'voltswitch': + if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass'] || hasMove['magnetrise'] || hasMove['uturn']) rejected = true; + break; + + // Bit redundant to have both + // Attacks: + case 'bugbite': + if (hasMove['uturn']) rejected = true; + break; + case 'dragonclaw': + if (hasMove['dragontail'] || hasMove['outrage']) rejected = true; + break; + case 'dragonpulse': case 'spacialrend': + if (hasMove['dracometeor'] || hasMove['outrage']) rejected = true; + break; + case 'boltstrike': + if (!counter.setupType && hasMove['fusionbolt']) rejected = true; + break; + case 'discharge': case 'thunder': + if (hasMove['voltswitch']) rejected = true; + break; + case 'fusionbolt': + if (counter.setupType && hasMove['boltstrike']) rejected = true; + break; + case 'thunderbolt': + if (hasMove['discharge'] || hasMove['thunder'] || hasMove['voltswitch']) rejected = true; + break; + case 'crosschop': case 'highjumpkick': + if (hasMove['closecombat']) rejected = true; + break; + case 'drainpunch': + if (hasMove['closecombat'] || hasMove['crosschop'] || hasMove['highjumpkick']) rejected = true; + break; + case 'flareblitz': case 'fierydance': case 'flamethrower': case 'lavaplume': + if (hasMove['blueflare'] || hasMove['fireblast'] || hasMove['overheat']) rejected = true; + break; + case 'firepunch': + if (hasMove['flareblitz']) rejected = true; + break; + case 'overheat': + if (counter.setupType === 'Special' || hasMove['fireblast']) rejected = true; + break; + case 'airslash': case 'bravebird': case 'drillpeck': case 'pluck': + if (hasMove['acrobatics'] || hasMove['hurricane']) rejected = true; + break; + case 'gigadrain': + if ((!counter.setupType && hasMove['leafstorm']) || hasMove['petaldance'] || hasMove['powerwhip']) rejected = true; + break; + case 'solarbeam': + if ((!hasAbility['Drought'] && !hasMove['sunnyday']) || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; + break; + case 'leafstorm': + if (counter.setupType && hasMove['gigadrain']) rejected = true; + break; + case 'bonemerang': case 'earthpower': + if (hasMove['earthquake']) rejected = true; + break; + case 'icebeam': + if (hasMove['blizzard']) rejected = true; + break; + case 'endeavor': + if (slot > 0) rejected = true; + break; + case 'return': + if (hasMove['bodyslam'] || hasMove['facade'] || hasMove['doubleedge'] || hasMove['tailslap']) rejected = true; + break; + case 'weatherball': + if (!hasMove['sunnyday']) rejected = true; + break; + case 'poisonjab': + if (hasMove['gunkshot']) rejected = true; + break; + case 'psychic': + if (hasMove['psyshock']) rejected = true; + break; + case 'rockblast': case 'rockslide': + if (hasMove['headsmash'] || hasMove['stoneedge']) rejected = true; + break; + case 'stoneedge': + if (hasMove['headsmash']) rejected = true; + break; + case 'hydropump': + if (hasMove['razorshell'] || hasMove['scald']) rejected = true; + break; + case 'surf': + if (hasMove['hydropump'] || hasMove['scald']) rejected = true; + break; + case 'waterfall': + if (hasMove['aquatail']) rejected = true; + break; + + // Status: + case 'encore': case 'iceshard': case 'suckerpunch': + if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + break; + case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'softboiled': case 'synthesis': + if (hasMove['leechseed'] || hasMove['rest'] || hasMove['wish']) rejected = true; + break; + case 'substitute': + if (hasMove['pursuit'] || hasMove['rest'] || hasMove['uturn'] || hasMove['voltswitch']) rejected = true; + break; + case 'thunderwave': + if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (hasMove['discharge'] || hasMove['trickroom']) rejected = true; + break; + case 'willowisp': + if (hasMove['lavaplume'] || hasMove['scald']) rejected = true; + break; + } + + // Increased/decreased priority moves are unneeded with moves that boost only speed + if (move.priority !== 0 && !!counter['speedsetup']) { + rejected = true; + } + + // Certain Pokemon should always have a recovery move + if (!counter.recovery && template.baseStats.hp >= 165 && movePool.includes('wish')) { + if (move.category === 'Status' || !hasType[move.type] && !move.damage) rejected = true; + } + + // 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 + if (!SetupException.includes(moveid) && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; + } + // @ts-ignore + if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { + // Mono-attacking with setup and RestTalk is allowed + // Reject Status moves only if there is nothing else to reject + // @ts-ignore + if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; + } + if (counter.setupType === 'Special' && moveid === 'hiddenpower' && template.types.length > 1 && counter['Special'] <= 2 && !hasType[move.type] && !counter['Physical'] && counter['specialpool']) { + // Hidden Power isn't good enough + rejected = true; + } + + // Pokemon should have moves that benefit their Type/Ability/Weather, as well as moves required by its forme + // @ts-ignore + if (!rejected && (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3)) && + ((counter.damagingMoves.length === 0 && !hasMove['metalburst']) || + (!counter.stab && (template.types.length > 1 || (template.types[0] !== 'Normal' && template.types[0] !== 'Psychic') || !hasMove['icebeam'] || template.baseStats.spa >= template.baseStats.spd) && (!!counter['physicalpool'] || !!counter['specialpool'])) || + (hasType['Dark'] && !counter['Dark']) || + (hasType['Dragon'] && !counter['Dragon']) || + (hasType['Electric'] && !counter['Electric']) || + (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'])) || + (hasType['Fire'] && !counter['Fire']) || + (hasType['Ghost'] && !hasType['Dark'] && !counter['Ghost']) || + (hasType['Ground'] && !counter['Ground'] && !hasMove['rest'] && !hasMove['sleeptalk']) || + (hasType['Ice'] && !counter['Ice']) || + (hasType['Steel'] && hasAbility['Technician'] && !counter['Steel']) || + (hasType['Water'] && (!counter['Water'] || !counter.stab)) || + // @ts-ignore + ((hasAbility['Adaptability'] && !counter.setupType && template.types.length > 1 && (!counter[template.types[0]] || !counter[template.types[1]])) || + (hasAbility['Bad Dreams'] && movePool.includes('darkvoid')) || + (hasAbility['Contrary'] && !counter['contrary'] && template.species !== 'Shuckle') || + (hasAbility['Guts'] && hasType['Normal'] && movePool.includes('facade')) || + (hasAbility['Slow Start'] && movePool.includes('substitute')) || + (movePool.includes('technoblast') || template.requiredMove && movePool.includes(toId(template.requiredMove)))))) { + // Reject Status or non-STAB + if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk' && moveid !== 'technoblast') { + if (move.category === 'Status' || !hasType[move.type] || move.selfSwitch || move.basePower && move.basePower < 40 && !move.multihit) rejected = true; + } + } + + // Sleep Talk shouldn't be selected without Rest + if (moveid === 'rest' && rejected) { + let sleeptalk = movePool.indexOf('sleeptalk'); + if (sleeptalk >= 0) { + if (movePool.length < 2) { + rejected = false; + } else { + this.fastPop(movePool, sleeptalk); + } + } + } + + // Remove rejected moves from the move list + if (rejected && (movePool.length - availableHP || availableHP && (moveid === 'hiddenpower' || !hasMove['hiddenpower']))) { + moves.splice(i, 1); + break; + } + + // Handle Hidden Power IVs + if (moveid === 'hiddenpower') { + let HPivs = this.getType(move.type).HPivs; + for (let iv in HPivs) { + // @ts-ignore + ivs[iv] = HPivs[iv]; + } + } + } + } while (moves.length < 4 && movePool.length); + + // If Hidden Power has been removed, reset the IVs + if (!hasMove['hiddenpower']) { + ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; + } + + let abilities = Object.values(baseTemplate.abilities); + abilities.sort((a, b) => this.getAbility(b).rating - this.getAbility(a).rating); + let ability0 = this.getAbility(abilities[0]); + let ability1 = this.getAbility(abilities[1]); + let ability2 = this.getAbility(abilities[2]); + if (abilities[1]) { + if (abilities[2] && ability1.rating <= ability2.rating && this.randomChance(1, 2)) { + [ability1, ability2] = [ability2, ability1]; + } + if (ability0.rating <= ability1.rating && this.randomChance(1, 2)) { + [ability0, ability1] = [ability1, ability0]; + } else if (ability0.rating - 0.6 <= ability1.rating && this.randomChance(2, 3)) { + [ability0, ability1] = [ability1, ability0]; + } + ability = ability0.name; + + let rejectAbility; + do { + rejectAbility = false; + if (counterAbilities.includes(ability)) { + // Adaptability, Contrary, Hustle, Iron Fist, Skill Link + // @ts-ignore + rejectAbility = !counter[toId(ability)]; + } else if (ability === 'Blaze') { + rejectAbility = !counter['Fire']; + } else if (ability === 'Chlorophyll') { + rejectAbility = !hasMove['sunnyday'] && !teamDetails['sun']; + } else if (ability === 'Compound Eyes' || ability === 'No Guard') { + rejectAbility = !counter['inaccurate']; + } else if (ability === 'Defiant' || ability === 'Moxie') { + rejectAbility = !counter['Physical'] && !hasMove['batonpass']; + } else if (ability === 'Gluttony' || ability === 'Inner Focus' || ability === 'Moody') { + rejectAbility = true; + } else if (ability === 'Hydration' || ability === 'Rain Dish' || ability === 'Swift Swim') { + rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; + } else if (ability === 'Ice Body' || ability === 'Snow Cloak') { + rejectAbility = !teamDetails['hail']; + } else if (ability === 'Lightning Rod') { + rejectAbility = template.types.indexOf('Ground') >= 0; + } else if (ability === 'Limber') { + rejectAbility = template.types.indexOf('Electric') >= 0; + } else if (ability === 'Overgrow') { + rejectAbility = !counter['Grass']; + } else if (ability === 'Poison Heal') { + rejectAbility = abilities.includes('Technician') && !!counter['technician']; + } else if (ability === 'Prankster') { + rejectAbility = !counter['Status']; + } else if (ability === 'Reckless' || ability === 'Rock Head') { + rejectAbility = !counter['recoil']; + } else if (ability === 'Regenerator') { + rejectAbility = abilities.includes('Magic Guard'); + } else if (ability === 'Sand Force' || ability === 'Sand Rush' || ability === 'Sand Veil') { + rejectAbility = !teamDetails['sand']; + } else if (ability === 'Serene Grace') { + rejectAbility = !counter['serenegrace'] || template.species === 'Blissey' || template.species === 'Togetic'; + } else if (ability === 'Sheer Force') { + rejectAbility = !counter['sheerforce'] || (abilities.includes('Iron Fist') && counter['ironfist'] > counter['sheerforce']); + } else if (ability === 'Simple') { + rejectAbility = !counter.setupType && !hasMove['flamecharge'] && !hasMove['stockpile']; + } else if (ability === 'Sturdy') { + rejectAbility = !!counter['recoil'] && !counter['recovery']; + } else if (ability === 'Swarm') { + rejectAbility = !counter['Bug']; + } else if (ability === 'Swift Swim') { + rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; + } else if (ability === 'Technician') { + rejectAbility = !counter['technician'] || (abilities.includes('Skill Link') && counter['skilllink'] >= counter['technician']); + } else if (ability === 'Tinted Lens') { + rejectAbility = counter['damage'] >= counter.damagingMoves.length || (counter.Status > 2 && !counter.setupType); + } else if (ability === 'Torrent') { + rejectAbility = !counter['Water']; + } else if (ability === 'Unburden') { + rejectAbility = template.baseStats.spe > 100; + } else if (ability === 'Water Absorb') { + rejectAbility = abilities.includes('Volt Absorb'); + } + + if (rejectAbility) { + if (ability === ability0.name && ability1.rating > 1) { + ability = ability1.name; + } else if (ability === ability1.name && abilities[2] && ability2.rating > 1) { + ability = ability2.name; + } else { + // Default to the highest rated ability if all are rejected + // @ts-ignore + ability = abilities[0]; + rejectAbility = false; + } + } + } while (rejectAbility); + + if (abilities.indexOf('Guts') >= 0 && ability !== 'Quick Feet' && hasMove['facade']) { + ability = 'Guts'; + } else if (abilities.includes('Prankster') && counter.Status > 1) { + ability = 'Prankster'; + } else if (abilities.indexOf('Swift Swim') >= 0 && hasMove['raindance']) { + ability = 'Swift Swim'; + } + } else { + ability = ability0.name; + } + + item = 'Leftovers'; + if (template.requiredItems) { + item = this.sample(template.requiredItems); + + // First, the extra high-priority items + } else if (template.species === 'Marowak') { + item = 'Thick Club'; + } else if (template.species === 'Deoxys-Attack') { + item = (slot === 0 && hasMove['stealthrock']) ? 'Focus Sash' : 'Life Orb'; + } else if (template.species === 'Farfetch\'d') { + item = 'Stick'; + } else if (template.species === 'Pikachu') { + item = 'Light Ball'; + } else if (template.species === 'Shedinja' || template.species === 'Smeargle') { + item = 'Focus Sash'; + } else if (template.species === 'Unown') { + item = 'Choice Specs'; + } else if (template.species === 'Wobbuffet' && hasMove['destinybond'] && this.randomChance(1, 2)) { + item = 'Custap Berry'; + } else if (ability === 'Imposter') { + item = 'Choice Scarf'; + } else if (hasMove['trick'] && hasMove['gyroball']) { + item = (ability === 'Levitate' || hasType['Flying']) ? 'Macho Brace' : 'Iron Ball'; + } else if (hasMove['switcheroo'] || hasMove['trick']) { + if (template.baseStats.spe >= 60 && template.baseStats.spe <= 108) { + item = 'Choice Scarf'; + } else { + item = (counter.Physical > counter.Special) ? 'Choice Band' : 'Choice Specs'; + } + } else if (template.evos.length) { + item = 'Eviolite'; + } else if (hasMove['shellsmash']) { + item = 'White Herb'; + } else if (ability === 'Harvest') { + item = 'Sitrus Berry'; + } else if ((ability === 'Magic Guard' || ability === 'Sheer Force') && counter.damagingMoves.length > 1) { + item = 'Life Orb'; + } else if (hasMove['facade'] || ability === 'Poison Heal' || ability === 'Toxic Boost') { + item = 'Toxic Orb'; + } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { + item = 'Chesto Berry'; + } else if (hasMove['raindance']) { + item = 'Damp Rock'; + } else if (hasMove['sunnyday']) { + item = 'Heat Rock'; + } else if (hasMove['lightscreen'] && hasMove['reflect']) { + item = 'Light Clay'; + } else if (hasMove['acrobatics']) { + item = 'Flying Gem'; + } else if (hasMove['psychoshift'] || (ability === 'Guts' && !hasMove['sleeptalk'])) { + item = hasMove['drainpunch'] ? 'Flame Orb' : 'Toxic Orb'; + } else if (ability === 'Unburden' && (counter['Physical'] || counter['Special'])) { + // Give Unburden mons a random Gem of the type of one of their damaging moves + let eligibleTypes = []; + for (const setMoveid of moves) { + let move = this.getMove(setMoveid); + if (!move.basePower && !move.basePowerCallback) continue; + eligibleTypes.push(move.type); + } + item = this.sample(eligibleTypes) + ' Gem'; + + // Medium priority + } else if (counter.Physical >= 4 && !hasMove['fakeout'] && !hasMove['suckerpunch'] && !hasMove['flamecharge'] && !hasMove['rapidspin']) { + item = !counter['Normal'] && this.randomChance(1, 3) ? 'Expert Belt' : 'Choice Band'; + } else if (counter.Special >= 4) { + item = this.randomChance(1, 3) ? 'Expert Belt' : 'Choice Specs'; + } else if (ability === 'Speed Boost' && !hasMove['substitute'] && counter.Physical + counter.Special > 2) { + item = 'Life Orb'; + } else if ((hasMove['eruption'] || hasMove['waterspout']) && !counter['Status']) { + item = 'Choice Scarf'; + } else if (this.getEffectiveness('Ground', template) >= 2 && ability !== 'Levitate' && !hasMove['magnetrise']) { + item = 'Air Balloon'; + } else if (hasMove['substitute'] && hasMove['reversal']) { + let eligibleTypes = []; + for (const setMoveid of moves) { + let move = this.getMove(setMoveid); + if (!move.basePower && !move.basePowerCallback) continue; + eligibleTypes.push(move.type); + } + item = this.sample(eligibleTypes) + ' Gem'; + } else if ((hasMove['flail'] || hasMove['reversal']) && ability !== 'Sturdy') { + item = 'Focus Sash'; + } else if (ability === 'Slow Start' || hasMove['detect'] || hasMove['protect'] || hasMove['sleeptalk'] || hasMove['substitute']) { + item = 'Leftovers'; + } else if (ability === 'Iron Barbs') { + item = 'Rocky Helmet'; + } else if (template.species === 'Palkia' && (hasMove['dracometeor'] || hasMove['spacialrend']) && hasMove['hydropump']) { + item = 'Lustrous Orb'; + } else if (template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 285) { + item = 'Leftovers'; + } else if (counter.Physical + counter.Special >= 3 && counter.setupType) { + item = hasMove['outrage'] ? 'Lum Berry' : 'Life Orb'; + } else if (counter.Physical + counter.Special >= 4) { + item = counter['Normal'] ? 'Life Orb' : 'Expert Belt'; + } else if (slot === 0 && ability !== 'Regenerator' && ability !== 'Sturdy' && !counter['recoil'] && !counter['recovery'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285) { + item = 'Focus Sash'; + + // This is the "REALLY can't think of a good item" cutoff + } else if (hasType['Poison']) { + item = 'Black Sludge'; + } else if (this.getEffectiveness('Rock', template) >= 1 || hasMove['dragontail']) { + item = 'Leftovers'; + } else if (this.getImmunity('Ground', template) && this.getEffectiveness('Ground', template) >= 1 && ability !== 'Levitate' && !hasMove['magnetrise']) { + item = 'Air Balloon'; + } else if (counter.Status <= 1 && ability !== 'Sturdy' && !hasMove['rapidspin']) { + item = 'Life Orb'; + } + + // For Trick / Switcheroo + if (item === 'Leftovers' && hasType['Poison']) { + item = 'Black Sludge'; + } + + let levelScale = { + Uber: 73, + OU: 75, + UUBL: 76, + UU: 77, + RUBL: 78, + RU: 79, + NUBL: 80, + NU: 81, + }; + let customScale = { + Blaziken: 74, 'Deoxys-Defense': 74, Landorus: 74, Manaphy: 74, Thundurus: 74, 'Tornadus-Therian': 74, Unown: 85, + }; + // @ts-ignore + let level = levelScale[template.tier] || 75; + // @ts-ignore + if (customScale[template.name]) level = customScale[template.name]; + + // Minimize confusion damage + if (!counter['Physical'] && !hasMove['transform']) { + evs.atk = 0; + ivs.atk = hasMove['hiddenpower'] ? ivs.atk - 28 : 0; + } + + if (hasMove['gyroball'] || hasMove['trickroom']) { + evs.spe = 0; + ivs.spe = hasMove['hiddenpower'] ? ivs.spe - 28 : 0; + } + + return { + name: template.baseSpecies, + species: species, + gender: template.gender, + moves: moves, + ability: ability, + evs: evs, + ivs: ivs, + item: item, + level: level, + shiny: this.randomChance(1, 1024), + }; + } + + randomTeam() { + let pokemon = []; + + const allowedNFE = ['Porygon2', 'Scyther']; + + let pokemonPool = []; + for (let id in this.data.FormatsData) { + let template = this.getTemplate(id); + if (template.gen > this.gen || template.isNonstandard || !template.randomBattleMoves || template.nfe && !allowedNFE.includes(template.species)) continue; + pokemonPool.push(id); + } + + /**@type {{[k: string]: number}} */ + let typeCount = {}; + /**@type {{[k: string]: number}} */ + let typeComboCount = {}; + /**@type {{[k: string]: number}} */ + let baseFormes = {}; + let uberCount = 0; + let nuCount = 0; + /**@type {RandomTeamsTypes["TeamDetails"]} */ + let teamDetails = {}; + + while (pokemonPool.length && pokemon.length < 6) { + let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); + if (!template.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[template.baseSpecies]) continue; + + let tier = template.tier; + switch (tier) { + case 'Uber': + // Ubers are limited to 2 but have a 20% chance of being added anyway. + if (uberCount > 1 && this.randomChance(4, 5)) continue; + break; + case 'NU': + // NUs are limited to 2 but have a 20% chance of being added anyway. + if (nuCount > 1 && this.randomChance(4, 5)) continue; + } + + // Adjust rate for species with multiple formes + switch (template.baseSpecies) { + case 'Arceus': + if (this.randomChance(16, 17)) continue; + break; + case 'Rotom': + if (this.randomChance(5, 6)) continue; + break; + case 'Genesect': + if (this.randomChance(4, 5)) continue; + break; + case 'Castform': + if (this.randomChance(3, 4)) continue; + break; + case 'Basculin': case 'Cherrim': case 'Meloetta': + if (this.randomChance(1, 2)) continue; + break; + } + + let types = template.types; + + // Limit 2 of any type + let skip = false; + for (const type of template.types) { + if (typeCount[type] > 1 && this.randomChance(4, 5)) { + skip = true; + break; + } + } + if (skip) continue; + + let set = this.randomSet(template, pokemon.length, teamDetails); + + // Illusion shouldn't be the last Pokemon of the team + if (set.ability === 'Illusion' && pokemon.length > 4) continue; + + // Limit 1 of any type combination + let typeCombo = template.types.slice().sort().join(); + if (set.ability === 'Drought' || set.ability === 'Drizzle' || set.ability === 'Sand Stream') { + // Drought, Drizzle and Sand Stream don't count towards the type combo limit + typeCombo = set.ability; + if (typeCombo in typeComboCount) continue; + } else { + if (typeComboCount[typeCombo] >= 1) continue; + } + + // Okay, the set passes, add it to our team + pokemon.push(set); + + if (pokemon.length === 6) { + // Set Zoroark's level to be the same as the last Pokemon + let illusion = teamDetails['illusion']; + if (illusion) pokemon[illusion - 1].level = pokemon[5].level; + break; + } + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[template.baseSpecies] = 1; + + // Increment type counters + for (const type of types) { + if (type in typeCount) { + typeCount[type]++; + } else { + typeCount[type] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Increment Uber/NU counters + if (tier === 'Uber') { + uberCount++; + } else if (tier === 'NU') { + nuCount++; + } + + // Team details + if (set.ability === 'Snow Warning') teamDetails['hail'] = 1; + if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails['rain'] = 1; + if (set.ability === 'Sand Stream') teamDetails['sand'] = 1; + if (set.moves.includes('stealthrock')) teamDetails['stealthRock'] = 1; + if (set.moves.includes('toxicspikes')) teamDetails['toxicSpikes'] = 1; + if (set.moves.includes('rapidspin')) teamDetails['rapidSpin'] = 1; + + // For setting Zoroark's level + if (set.ability === 'Illusion') teamDetails['illusion'] = pokemon.length; + } + return pokemon; + } +} + +module.exports = RandomGen5Teams; diff --git a/data/mods/gen5/scripts.js b/data/mods/gen5/scripts.js new file mode 100644 index 0000000000000..ab5b01b20f8ba --- /dev/null +++ b/data/mods/gen5/scripts.js @@ -0,0 +1,9 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + inherit: 'gen6', + gen: 5, +}; + +exports.BattleScripts = BattleScripts; diff --git a/mods/gen5/statuses.js b/data/mods/gen5/statuses.js similarity index 80% rename from mods/gen5/statuses.js rename to data/mods/gen5/statuses.js index 01c42971755ec..c1c6b75dcf29f 100644 --- a/mods/gen5/statuses.js +++ b/data/mods/gen5/statuses.js @@ -1,15 +1,16 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { slp: { inherit: true, - onSwitchIn: function (target) { + onSwitchIn(target) { this.effectData.time = this.effectData.startTime; }, }, partiallytrapped: { inherit: true, - onResidual: function (pokemon) { + onResidual(pokemon) { if (this.effectData.source && (!this.effectData.source.isActive || this.effectData.source.hp <= 0 || !this.effectData.source.activeTurns)) { delete pokemon.volatiles['partiallytrapped']; return; @@ -25,10 +26,10 @@ exports.BattleStatuses = { // Protect, Detect, Endure counter duration: 2, counterMax: 256, - onStart: function () { + onStart() { this.effectData.counter = 2; }, - onStallMove: function () { + onStallMove() { // this.effectData.counter should never be undefined here. // However, just in case, use 1 if it is undefined. let counter = this.effectData.counter || 1; @@ -37,9 +38,10 @@ exports.BattleStatuses = { return (this.random() * 4294967296 < 1); } this.debug("Success chance: " + Math.round(100 / counter) + "%"); - return (this.random(counter) === 0); + return this.randomChance(1, counter); }, - onRestart: function () { + onRestart() { + // @ts-ignore if (this.effectData.counter < this.effect.counterMax) { this.effectData.counter *= 2; } @@ -49,9 +51,11 @@ exports.BattleStatuses = { gem: { duration: 1, affectsFainted: true, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { this.debug('Gem Boost'); return this.chainModify(1.5); }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/mods/gen5/typechart.js b/data/mods/gen5/typechart.js similarity index 91% rename from mods/gen5/typechart.js rename to data/mods/gen5/typechart.js index 7d51d91c19b7e..2dd2cff5c4efb 100644 --- a/mods/gen5/typechart.js +++ b/data/mods/gen5/typechart.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleTypeChart = { +/**@type {{[k: string]: ModdedTypeData | null}} */ +let BattleTypeChart = { "Electric": { inherit: true, damageTaken: { @@ -94,3 +95,5 @@ exports.BattleTypeChart = { }, "Fairy": null, }; + +exports.BattleTypeChart = BattleTypeChart; diff --git a/mods/gen6/abilities.js b/data/mods/gen6/abilities.js similarity index 62% rename from mods/gen6/abilities.js rename to data/mods/gen6/abilities.js index 93e9613d659d8..67e582331632a 100644 --- a/mods/gen6/abilities.js +++ b/data/mods/gen6/abilities.js @@ -1,37 +1,44 @@ 'use strict'; -exports.BattleAbilities = { +/**@type {{[k: string]: ModdedAbilityData}} */ +let BattleAbilities = { "aerilate": { inherit: true, desc: "This Pokemon's Normal-type moves become Flying-type moves and have their power multiplied by 1.3. 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 Flying type and have 1.3x power.", - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x14CD, 0x1000]); - }, + onBasePower(basePower, pokemon, target, move) { + if (move.aerilateBoosted) return this.chainModify([0x14CD, 0x1000]); }, }, "aftermath": { inherit: true, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact'] && !target.hp) { this.damage(source.maxhp / 4, source, target, null, true); } }, }, + "damp": { + inherit: true, + desc: "While this Pokemon is active, Explosion, Self-Destruct, and the Aftermath Ability are prevented from having an effect.", + shortDesc: "Prevents Explosion/Self-Destruct/Aftermath while this Pokemon is active.", + }, "galewings": { inherit: true, shortDesc: "This Pokemon's Flying-type moves have their priority increased by 1.", - onModifyPriority: function (priority, pokemon, target, move) { + onModifyPriority(priority, pokemon, target, move) { if (move && move.type === 'Flying') return priority + 1; }, rating: 4.5, }, + "infiltrator": { + inherit: true, + desc: "This Pokemon's moves ignore substitutes and the opposing side's Reflect, Light Screen, Safeguard, and Mist.", + shortDesc: "Moves ignore substitutes and the foe's Reflect, Light Screen, Safeguard, and Mist.", + }, "ironbarbs": { inherit: true, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact']) { this.damage(source.maxhp / 8, source, target, null, true); } @@ -39,8 +46,9 @@ exports.BattleAbilities = { }, "liquidooze": { inherit: true, - onSourceTryHeal: function (damage, target, source, effect) { + onSourceTryHeal(damage, target, source, effect) { this.debug("Heal is occurring: " + target + " <- " + source + " :: " + effect.id); + /**@type {{[k: string]: number}} */ let canOoze = {drain: 1, leechseed: 1}; if (canOoze[effect.id]) { this.damage(damage, null, null, null, true); @@ -52,12 +60,16 @@ exports.BattleAbilities = { inherit: true, shortDesc: "If this Pokemon is an Arceus, its type changes to match its held Plate.", }, + "mummy": { + inherit: true, + desc: "Pokemon making contact with this Pokemon have their Ability changed to Mummy. Does not affect the Multitype or Stance Change Abilities.", + }, "normalize": { inherit: true, desc: "This Pokemon's moves are changed to be Normal type. This effect comes before other effects that change a move's type.", shortDesc: "This Pokemon's moves are changed to be Normal type.", onModifyMovePriority: 1, - onModifyMove: function (move) { + onModifyMove(move) { if (move.id !== 'struggle' && this.getMove(move.id).type !== 'Normal') { move.type = 'Normal'; } @@ -68,35 +80,16 @@ exports.BattleAbilities = { inherit: true, desc: "This Pokemon's damaging moves become multi-hit moves that hit twice. The second hit has its damage halved. Does not affect multi-hit moves or moves that have multiple targets.", shortDesc: "This Pokemon's damaging moves hit twice. The second hit has its damage halved.", - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower) { - if (this.effectData.hit) { - this.effectData.hit++; - return this.chainModify(0.5); - } else { - this.effectData.hit = 1; - } - }, - onSourceModifySecondaries: function (secondaries, target, source, move) { - if (move.id === 'secretpower' && this.effectData.hit < 2) { - // hack to prevent accidentally suppressing King's Rock/Razor Fang - return secondaries.filter(effect => effect.volatileStatus === 'flinch'); - } - }, + onBasePower(basePower, pokemon, target, move) { + if (move.multihitType === 'parentalbond' && move.hit > 1) return this.chainModify(0.5); }, }, "pixilate": { inherit: true, desc: "This Pokemon's Normal-type moves become Fairy-type moves and have their power multiplied by 1.3. 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 Fairy type and have 1.3x power.", - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x14CD, 0x1000]); - }, + onBasePower(basePower, pokemon, target, move) { + if (move.pixilateBoosted) return this.chainModify([0x14CD, 0x1000]); }, }, "prankster": { @@ -108,17 +101,13 @@ exports.BattleAbilities = { inherit: true, desc: "This Pokemon's Normal-type moves become Ice-type moves and have their power multiplied by 1.3. 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 Ice type and have 1.3x power.", - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, pokemon, target, move) { - return this.chainModify([0x14CD, 0x1000]); - }, + onBasePower(basePower, pokemon, target, move) { + if (move.refrigerateBoosted) return this.chainModify([0x14CD, 0x1000]); }, }, "roughskin": { inherit: true, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact']) { this.damage(source.maxhp / 8, source, target, null, true); } @@ -132,11 +121,17 @@ exports.BattleAbilities = { inherit: true, desc: "If a physical attack hits this Pokemon, its Defense is lowered by 1 stage and its Speed is raised by 1 stage.", shortDesc: "If a physical attack hits this Pokemon, Defense is lowered by 1, Speed is raised by 1.", - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (move.category === 'Physical') { - this.boost({def:-1, spe:1}); + this.boost({def: -1, spe: 1}, target, target); } }, rating: 0.5, }, + "zenmode": { + inherit: true, + desc: "If this Pokemon is a Darmanitan, it changes to Zen Mode if it has 1/2 or less of its maximum HP at the end of a turn. If Darmanitan's HP is above 1/2 of its maximum HP at the end of a turn, it changes back to Standard Mode. If Darmanitan loses this Ability while in Zen Mode, it reverts to Standard Mode immediately.", + }, }; + +exports.BattleAbilities = BattleAbilities; diff --git a/data/mods/gen6/factory-sets.json b/data/mods/gen6/factory-sets.json new file mode 100644 index 0000000000000..41520bdcaa2e4 --- /dev/null +++ b/data/mods/gen6/factory-sets.json @@ -0,0 +1 @@ +{"Uber":{"klefki":{"flags":{},"sets":[{"species":"Klefki","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Spikes"],["Thunder Wave"],["Toxic"],["Play Rough"]]}]},"zekrom":{"flags":{},"sets":[{"species":"Zekrom","gender":"","item":"Choice Band","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bolt Strike"],["Outrage"],["Dragon Claw"],["Volt Switch"]]},{"species":"Zekrom","gender":"","item":"Choice Scarf","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Bolt Strike"],["Volt Switch"],["Draco Meteor"],["Outrage"]]},{"species":"Zekrom","gender":"","item":"Choice Scarf","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bolt Strike"],["Volt Switch"],["Sleep Talk"],["Outrage"]]},{"species":"Zekrom","gender":"","item":"Life Orb","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Bolt Strike"],["Draco Meteor"],["Dragon Claw"],["Tailwind"]]},{"species":"Zekrom","gender":"","item":"Shuca Berry","ability":"Teravolt","evs":{"hp":132,"atk":252,"def":0,"spa":0,"spd":0,"spe":124},"nature":"Adamant","moves":[["Substitute","Outrage"],["Hone Claws"],["Bolt Strike"],["Dragon Claw"]]}]},"yveltal":{"flags":{},"sets":[{"species":"Yveltal","gender":"","item":"Choice Scarf","ability":"Dark Aura","evs":{"hp":0,"atk":32,"def":4,"spa":248,"spd":0,"spe":224},"nature":"Modest","moves":[["Dark Pulse"],["Oblivion Wing"],["Foul Play"],["U-turn"]]},{"species":"Yveltal","gender":"","item":"Life Orb","ability":"Dark Aura","evs":{"hp":132,"atk":28,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Rash","moves":[["Dark Pulse"],["Oblivion Wing"],["Sucker Punch"],["Heat Wave"]]},{"species":"Yveltal","gender":"","item":"Leftovers","ability":"Dark Aura","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Foul Play"],["Taunt"],["Sucker Punch"],["Roost"]]},{"species":"Yveltal","gender":"","item":"Leftovers","ability":"Dark Aura","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Taunt"],["Toxic"],["Roost"]]}]},"xerneas":{"flags":{},"sets":[{"species":"Xerneas","gender":"","item":"Life Orb","ability":"Fairy Aura","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Moonblast"],["Close Combat"],["Rock Slide"],["Aromatherapy"]]},{"species":"Xerneas","gender":"","item":"Choice Scarf","ability":"Fairy Aura","evs":{"hp":0,"atk":76,"def":0,"spa":248,"spd":0,"spe":184},"nature":"Rash","moves":[["Moonblast"],["Sleep Talk"],["Close Combat"],["Rock Slide"]]},{"species":"Xerneas","gender":"","item":"Leftovers","ability":"Fairy Aura","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Aromatherapy"],["Rest"],["Sleep Talk"],["Moonblast"]]},{"species":"Xerneas","gender":"","item":"Power Herb","ability":"Fairy Aura","evs":{"hp":184,"atk":0,"def":28,"spa":252,"spd":0,"spe":44},"nature":"Modest","moves":[["Geomancy"],["Moonblast"],["Focus Blast"],["Thunder"]]},{"species":"Xerneas","gender":"","item":"Power Herb","ability":"Fairy Aura","evs":{"hp":184,"atk":0,"def":28,"spa":252,"spd":0,"spe":44},"nature":"Modest","moves":[["Geomancy"],["Moonblast"],["Hidden Power Ground"],["Thunder"]],"ivs":{"spa":30,"spd":30}}]},"tyranitar":{"flags":{},"sets":[{"species":"Tyranitar","gender":"","item":"Leftovers","ability":"Sand Stream","evs":{"hp":248,"atk":0,"def":96,"spa":0,"spd":166,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Pursuit"],["Rock Slide"],["Thunder Wave","Roar"]]},{"species":"Tyranitar","gender":"","item":"Shuca Berry","ability":"Sand Stream","evs":{"hp":248,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Pursuit"],["Rock Slide"],["Thunder Wave","Roar"]]},{"species":"Tyranitar","gender":"","item":"Shuca Berry","ability":"Sand Stream","evs":{"hp":248,"atk":72,"def":0,"spa":0,"spd":188,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Low Kick"],["Rock Slide"],["Thunder Wave","Roar"]]}]},"shayminsky":{"flags":{},"sets":[{"species":"Shaymin-Sky","gender":"","item":"Life Orb","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Seed Flare"],["Air Slash"],["Earth Power"],["Healing Wish"]]},{"species":"Shaymin-Sky","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Leech Seed"],["Seed Flare"],["Air Slash"]]}]},"salamence":{"flags":{"megaOnly":1},"sets":[{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":200,"atk":252,"def":0,"spa":0,"spd":0,"spe":56},"nature":"Adamant","moves":[["Double-Edge"],["Refresh","Earthquake"],["Roost"],["Dragon Dance"]]},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":200,"atk":252,"def":0,"spa":0,"spd":0,"spe":56},"nature":"Adamant","moves":[["Return"],["Refresh","Earthquake"],["Roost"],["Dragon Dance"]],"happiness":255},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Return"],["Earthquake"],["Roost"],["Dragon Dance"]],"happiness":255},{"species":"Salamence","gender":"","item":"Salamencite","ability":"Intimidate","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":0,"spe":124},"nature":"Impish","moves":[["Return"],["Refresh"],["Roost"],["Dragon Dance"]],"happiness":255}]},"sableye":{"flags":{"megaOnly":1},"sets":[{"species":"Sableye","gender":"","item":"Sablenite","ability":"Prankster","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Foul Play"],["Protect","Fake Out"],["Will-O-Wisp"],["Recover"]]}]},"reshiram":{"flags":{},"sets":[{"species":"Reshiram","gender":"","item":"Choice Scarf","ability":"Turboblaze","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Blue Flare"],["Draco Meteor"],["Sleep Talk"],["Stone Edge"]]},{"species":"Reshiram","gender":"","item":"Life Orb","ability":"Turboblaze","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Flame Charge"],["Blue Flare"],["Draco Meteor"],["Stone Edge"]]},{"species":"Reshiram","gender":"","item":"Leftovers","ability":"Turboblaze","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Blue Flare"],["Draco Meteor"],["Toxic"],["Roost"]]}]},"rayquaza":{"flags":{},"sets":[{"species":"Rayquaza","gender":"","item":"Life Orb","ability":"Air Lock","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Dragon Ascent"],["Earthquake"],["Extreme Speed"]]},{"species":"Rayquaza","gender":"","item":"Life Orb","ability":"Air Lock","evs":{"hp":0,"atk":40,"def":0,"spa":252,"spd":0,"spe":216},"nature":"Rash","moves":[["Draco Meteor"],["Dragon Ascent"],["Extreme Speed"],["Earthquake"]]},{"species":"Rayquaza","gender":"","item":"Life Orb","ability":"Air Lock","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Dragon Ascent"],["Earthquake"],["Extreme Speed"]]}]},"palkia":{"flags":{},"sets":[{"species":"Palkia","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Draco Meteor"],["Spacial Rend"],["Fire Blast"]]},{"species":"Palkia","gender":"","item":"Lustrous Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Spacial Rend"],["Fire Blast"],["Thunder Wave"]]},{"species":"Palkia","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Surf"],["Toxic"],["Rest"],["Sleep Talk"]]},{"species":"Palkia","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":60,"atk":0,"def":0,"spa":196,"spd":0,"spe":252},"nature":"Timid","moves":[["Rest"],["Toxic"],["Hydro Pump"],["Spacial Rend"]]}]},"mewtwo":{"flags":{},"sets":[{"species":"Mewtwo","gender":"","item":"Mewtwonite X","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Ice Beam"],["Low Kick"],["Earthquake"],["Rock Slide"]]},{"species":"Mewtwo","gender":"","item":"Mewtwonite X","ability":"Pressure","evs":{"hp":176,"atk":80,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Low Kick"],["Taunt"],["Earthquake"],["Ice Beam"]]},{"species":"Mewtwo","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psystrike"],["Calm Mind"],["Ice Beam"],["Focus Blast"]]},{"species":"Mewtwo","gender":"","item":"Mewtwonite Y","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psystrike"],["Calm Mind"],["Ice Beam"],["Focus Blast"]]}]},"mawile":{"flags":{"megaOnly":1},"sets":[{"species":"Mawile","gender":"","item":"Mawilite","ability":"Intimidate","evs":{"hp":248,"atk":16,"def":0,"spa":0,"spd":244,"spe":0},"nature":"Adamant","moves":[["Iron Head"],["Play Rough"],["Sucker Punch"],["Baton Pass"]]}]},"lugia":{"flags":{},"sets":[{"species":"Lugia","gender":"","item":"Leftovers","ability":"Multiscale","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Roost"],["Ice Beam"],["Whirlwind"],["Toxic"]]}]},"lucario":{"flags":{"megaOnly":1},"sets":[{"species":"Lucario","gender":"","item":"Lucarionite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Bullet Punch"],["Stone Edge"],["Iron Tail"]]}]},"latios":{"flags":{},"sets":[{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Defog"],["Memento","Recover"]]},{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Defog"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Calm Mind"],["Memento","Recover"]]},{"species":"Latios","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Calm Mind"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"latias":{"flags":{},"sets":[{"species":"Latias","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":212,"atk":0,"def":0,"spa":120,"spd":0,"spe":176},"nature":"Timid","moves":[["Defog"],["Draco Meteor"],["Psyshock"],["Recover","Healing Wish"]]},{"species":"Latias","gender":"","item":"Soul Dew","ability":"Levitate","evs":{"hp":80,"atk":0,"def":0,"spa":252,"spd":0,"spe":176},"nature":"Timid","moves":[["Calm Mind"],["Draco Meteor"],["Psyshock"],["Recover"]]}]},"kyuremwhite":{"flags":{},"sets":[{"species":"Kyurem-White","gender":"","item":"Choice Specs","ability":"Turboblaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Ice Beam"],["Fusion Flare"],["Earth Power"]]},{"species":"Kyurem-White","gender":"","item":"Life Orb","ability":"Turboblaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Ice Beam"],["Fusion Flare"],["Stone Edge"]]}]},"kyogre":{"flags":{},"sets":[{"species":"Kyogre","gender":"","item":"Blue Orb","ability":"Drizzle","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Origin Pulse"],["Thunder"],["Ice Beam"],["Calm Mind"]]},{"species":"Kyogre","gender":"","item":"Blue Orb","ability":"Drizzle","evs":{"hp":248,"atk":0,"def":248,"spa":0,"spd":0,"spe":12},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Scald"],["Ice Beam","Roar"]]},{"species":"Kyogre","gender":"","item":"Blue Orb","ability":"Drizzle","evs":{"hp":248,"atk":0,"def":0,"spa":248,"spd":0,"spe":12},"nature":"Modest","moves":[["Origin Pulse"],["Thunder","Rest","Substitute"],["Ice Beam"],["Calm Mind"]]},{"species":"Kyogre","gender":"","item":"Choice Specs","ability":"Drizzle","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Water Spout"],["Origin Pulse","Scald"],["Ice Beam"],["Thunder"]]},{"species":"Kyogre","gender":"","item":"Choice Scarf","ability":"Drizzle","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Water Spout"],["Ice Beam"],["Origin Pulse"],["Thunder","Sleep Talk"]]}]},"kangaskhan":{"flags":{"megaOnly":1},"sets":[{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Return"],["Fake Out"],["Power-Up Punch"],["Crunch"]],"happiness":255},{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Double-Edge"],["Fake Out"],["Sucker Punch"],["Low Kick"]]},{"species":"Kangaskhan","gender":"","item":"Kangaskhanite","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return"],["Fake Out"],["Sucker Punch"],["Low Kick"]],"happiness":255}]},"hooh":{"flags":{},"sets":[{"species":"Ho-Oh","gender":"","item":"Choice Band","ability":"Regenerator","evs":{"hp":248,"atk":208,"def":0,"spa":0,"spd":52,"spe":0},"nature":"Adamant","moves":[["Brave Bird"],["Sacred Fire"],["Earthquake"],["Sleep Talk"]]},{"species":"Ho-Oh","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":248,"atk":208,"def":0,"spa":0,"spd":52,"spe":0},"nature":"Adamant","moves":[["Brave Bird"],["Sacred Fire"],["Recover"],["Thunder Wave","Earthquake","Substitute"]]}]},"groudon":{"flags":{},"sets":[{"species":"Groudon","gender":"","item":"Red Orb","ability":"Drought","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":200,"spe":56},"nature":"Adamant","moves":[["Rock Polish"],["Precipice Blades","Earthquake"],["Stone Edge"],["Swords Dance","Dragon Claw"]]},{"species":"Groudon","gender":"","item":"Red Orb","ability":"Drought","evs":{"hp":248,"atk":0,"def":56,"spa":0,"spd":192,"spe":12},"nature":"Impish","moves":[["Stealth Rock"],["Precipice Blades","Earthquake"],["Lava Plume","Stone Edge"],["Thunder Wave","Roar"]]},{"species":"Groudon","gender":"","item":"Red Orb","ability":"Drought","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":252,"spe":0},"nature":"Calm","moves":[["Lava Plume"],["Roar"],["Rest"],["Sleep Talk"]]},{"species":"Groudon","gender":"","item":"Leftovers","ability":"Drought","evs":{"hp":248,"atk":0,"def":248,"spa":0,"spd":0,"spe":12},"nature":"Impish","moves":[["Precipice Blades"],["Stealth Rock"],["Stone Edge"],["Dragon Tail","Roar"]]}]},"greninja":{"flags":{},"sets":[{"species":"Greninja","gender":"","item":"Focus Sash","ability":"Protean","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Toxic Spikes"],["Spikes"],["Taunt"],["Shadow Sneak"]]},{"species":"Greninja","gender":"","item":"Focus Sash","ability":"Protean","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Toxic Spikes"],["Scald"],["Taunt"],["Shadow Sneak"]]}]},"giratina":{"flags":{},"sets":[{"species":"Giratina","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Will-O-Wisp"],["Roar"]]},{"species":"Giratina","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Rest"],["Sleep Talk"],["Will-O-Wisp"],["Roar"]]}]},"giratinaorigin":{"flags":{},"sets":[{"species":"Giratina-Origin","gender":"","item":"Griseous Orb","ability":"Levitate","evs":{"hp":0,"atk":180,"def":0,"spa":252,"spd":0,"spe":76},"nature":"Rash","moves":[["Draco Meteor"],["Shadow Sneak"],["Dragon Tail"],["Defog"]]},{"species":"Giratina-Origin","gender":"","item":"Griseous Orb","ability":"Levitate","evs":{"hp":0,"atk":244,"def":252,"spa":0,"spd":0,"spe":12},"nature":"Adamant","moves":[["Defog"],["Shadow Sneak"],["Dragon Tail"],["Shadow Force"]]}]},"gengar":{"flags":{"megaOnly":1},"sets":[{"species":"Gengar","gender":"","item":"Gengarite","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Taunt"],["Destiny Bond"],["Sludge Wave"],["Focus Blast"]]},{"species":"Gengar","gender":"","item":"Gengarite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":84,"spe":176},"nature":"Timid","moves":[["Perish Song"],["Taunt"],["Protect"],["Disable"]]}]},"genesect":{"flags":{},"sets":[{"species":"Genesect","gender":"","item":"Choice Scarf","ability":"Download","evs":{"hp":0,"atk":248,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Hasty","moves":[["U-turn"],["Iron Head"],["Explosion"],["Ice Beam"]]}]},"ferrothorn":{"flags":{},"sets":[{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Leech Seed"],["Spikes"],["Power Whip","Gyro Ball"],["Protect"]]},{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Leech Seed"],["Spikes"],["Power Whip"],["Protect","Gyro Ball"]]}]},"excadrill":{"flags":{},"sets":[{"species":"Excadrill","gender":"","item":"Life Orb","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Iron Head"],["Earthquake"],["Rock Slide"],["Rapid Spin"]]},{"species":"Excadrill","gender":"","item":"Air Balloon","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"moves":[["Iron Head"],["Earthquake"],["Swords Dance"],["Rapid Spin"]]}]},"dialga":{"flags":{},"sets":[{"species":"Dialga","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":252,"spe":0},"nature":"Calm","moves":[["Stealth Rock"],["Toxic"],["Draco Meteor"],["Fire Blast"]]},{"species":"Dialga","gender":"","item":"Shuca Berry","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Draco Meteor"],["Flash Cannon"],["Fire Blast"],["Stealth Rock"]]}]},"deoxys":{"flags":{},"sets":[{"species":"Deoxys","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psycho Boost"],["Stealth Rock"],["Spikes"],["Taunt"]]}]},"deoxysattack":{"flags":{},"sets":[{"species":"Deoxys-Attack","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Psycho Boost"],["Low Kick"],["Ice Beam"],["Extreme Speed"]]},{"species":"Deoxys-Attack","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Spikes"],["Psycho Boost"],["Knock Off"],["Extreme Speed"]]}]},"deoxysdefense":{"flags":{},"sets":[{"species":"Deoxys-Defense","gender":"","item":"Mental Herb","ability":"Pressure","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Recover"],["Spikes"],["Skill Swap"],["Toxic"]]}]},"deoxysspeed":{"flags":{},"sets":[{"species":"Deoxys-Speed","gender":"","item":"Focus Sash","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Taunt"],["Spikes"],["Knock Off"]]},{"species":"Deoxys-Speed","gender":"","item":"Light Clay","ability":"Pressure","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Taunt"],["Reflect"],["Light Screen"]]}]},"darkrai":{"flags":{},"sets":[{"species":"Darkrai","gender":"","item":"Life Orb","ability":"Bad Dreams","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Dark Void"],["Dark Pulse"],["Nasty Plot","Taunt"],["Sludge Bomb","Thunder","Focus Blast"]]}]},"blissey":{"flags":{},"sets":[{"species":"Blissey","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":20,"atk":0,"def":232,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Ice Beam"],["Toxic"],["Soft-Boiled","Wish"],["Heal Bell","Protect"]]},{"species":"Blissey","gender":"","item":"Shed Shell","ability":"Natural Cure","nature":"Calm","moves":[["Toxic"],["Seismic Toss","Snatch"],["Soft-Boiled","Wish"],["Heal Bell","Protect"]]}]},"blaziken":{"flags":{},"sets":[{"species":"Blaziken","gender":"","item":"Leftovers","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Baton Pass"],["Protect"],["Swords Dance"],["Flare Blitz"]]},{"species":"Blaziken","gender":"","item":"Blazikenite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Stone Edge","Knock Off"]]},{"species":"Blaziken","gender":"","item":"Blazikenite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Blaziken","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Blaziken","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Low Kick"],["Flare Blitz"],["Protect"],["Stone Edge","Knock Off"]]}]},"arceuswater":{"flags":{},"sets":[{"species":"Arceus-Water","gender":"","item":"Splash Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Ice Beam","Judgment"],["Defog"],["Recover"],["Toxic"]]}]},"arceussteel":{"flags":{},"sets":[{"species":"Arceus-Steel","gender":"","item":"Iron Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":84,"spd":0,"spe":176},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Recover"],["Earth Power","Thunder"]]},{"species":"Arceus-Steel","gender":"","item":"Iron Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Iron Head"],["Earthquake"],["Stone Edge","Recover","Extreme Speed"]]}]},"arceusfire":{"flags":{},"sets":[{"species":"Arceus-Fire","gender":"","item":"Flame Plate","ability":"Multitype","evs":{"hp":200,"atk":0,"def":0,"spa":252,"spd":0,"spe":56},"nature":"Modest","moves":[["Overheat","Fire Blast"],["Calm Mind"],["Thunder"],["Earth Power"]]}]},"arceusflying":{"flags":{},"sets":[{"species":"Arceus-Flying","gender":"","item":"Sky Plate","ability":"Multitype","evs":{"hp":96,"atk":0,"def":0,"spa":236,"spd":0,"spe":0},"nature":"Timid","moves":[["Judgment"],["Calm Mind"],["Recover"],["Refresh","Earth Power","Substitute"]]}]},"arceuspsychic":{"flags":{},"sets":[{"species":"Arceus-Psychic","gender":"","item":"Mind Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Fire Blast","Payback"],["Ice Beam"],["Recover"],["Toxic"]]}]},"arceuspoison":{"flags":{},"sets":[{"species":"Arceus-Poison","gender":"","item":"Toxic Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Impish","moves":[["Defog"],["Poison Jab"],["Thunder Wave"],["Recover"]]}]},"arceusbug":{"flags":{},"sets":[{"species":"Arceus-Bug","gender":"","item":"Insect Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["X-Scissor"],["Stone Edge"],["Earthquake"]]}]},"arceusfighting":{"flags":{},"sets":[{"species":"Arceus-Fighting","gender":"","item":"Fist Plate","ability":"Multitype","evs":{"hp":0,"atk":0,"def":40,"spa":252,"spd":0,"spe":216},"nature":"Modest","moves":[["Judgment"],["Thunder Wave"],["Recover"],["Ice Beam","Stone Edge"]]}]},"arceusfairy":{"flags":{},"sets":[{"species":"Arceus-Fairy","gender":"","item":"Pixie Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Judgment"],["Recover"],["Defog"],["Toxic"]]},{"species":"Arceus-Fairy","gender":"","item":"Pixie Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Judgment"],["Calm Mind"],["Recover"],["Earth Power","Thunder"]]}]},"arceusice":{"flags":{},"sets":[{"species":"Arceus-Ice","gender":"","item":"Icicle Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Judgment"],["Recover"],["Calm Mind"],["Thunder","Fire Blast"]]}]},"arceusrock":{"flags":{},"sets":[{"species":"Arceus-Rock","gender":"","item":"Stone Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Judgment"],["Defog"],["Recover"],["Will-O-Wisp"]]}]},"arceusghost":{"flags":{},"sets":[{"species":"Arceus-Ghost","gender":"","item":"Spooky Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Recover"],["Will-O-Wisp"]]},{"species":"Arceus-Ghost","gender":"","item":"Spooky Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Shadow Force"],["Shadow Claw","Brick Break"],["Extreme Speed"]]},{"species":"Arceus-Ghost","gender":"","item":"Spooky Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Shadow Force"],["Shadow Claw"],["Brick Break"]]}]},"arceusdragon":{"flags":{},"sets":[{"species":"Arceus-Dragon","gender":"","item":"Draco Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":204,"spa":0,"spd":0,"spe":56},"nature":"Bold","moves":[["Judgment"],["Defog"],["Recover"],["Toxic"]]},{"species":"Arceus-Dragon","gender":"","item":"Draco Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":84,"spd":0,"spe":176},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Fire Blast"],["Recover"]]}]},"arceus":{"flags":{},"sets":[{"species":"Arceus","gender":"","item":"Life Orb","ability":"Multitype","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Extreme Speed"],["Earthquake"],["Stone Edge","Shadow Claw"]]},{"species":"Arceus","gender":"","item":"Silk Scarf","ability":"Multitype","evs":{"hp":200,"atk":252,"def":0,"spa":0,"spd":0,"spe":56},"nature":"Adamant","moves":[["Swords Dance"],["Extreme Speed"],["Earthquake","Shadow Force"],["Refresh"]]}]},"arceusdark":{"flags":{},"sets":[{"species":"Arceus-Dark","gender":"","item":"Dread Plate","ability":"Multitype","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":144,"spe":112},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Recover"],["Refresh"]]}]},"arceusgrass":{"flags":{},"sets":[{"species":"Arceus-Grass","gender":"","item":"Meadow Plate","ability":"Multitype","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":144,"spe":112},"nature":"Timid","moves":[["Grass Knot"],["Recover"],["Ice Beam"],["Defog"]]}]},"arceuselectric":{"flags":{},"sets":[{"species":"Arceus-Electric","gender":"","item":"Zap Plate","ability":"Multitype","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Judgment"],["Ice Beam"],["Recover"]]}]},"arceusground":{"flags":{},"sets":[{"species":"Arceus-Ground","gender":"","item":"Earth Plate","ability":"Multitype","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Earthquake"],["Stone Edge"],["Recover","Extreme Speed"]]}]},"aegislash":{"flags":{},"sets":[{"species":"Aegislash","gender":"","item":"Leftovers","ability":"Stance Change","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["King's Shield"],["Toxic"],["Gyro Ball"],["Pursuit"]]}]},"scizor":{"flags":{"megaOnly":1},"sets":[{"species":"Scizor","gender":"","item":"Scizorite","ability":"Technician","evs":{"hp":212,"atk":60,"def":152,"spa":0,"spd":84,"spe":0},"nature":"Impish","moves":[["Toxic"],["Roost"],["Defog"],["Bullet Punch"]]}]},"diancie":{"flags":{"megaOnly":1},"sets":[{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":68,"def":0,"spa":188,"spd":0,"spe":252},"nature":"Hasty","moves":[["Diamond Storm"],["Moonblast"],["Earth Power","Protect"],["Stealth Rock"]]},{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":68,"def":0,"spa":188,"spd":0,"spe":252},"nature":"Hasty","moves":[["Diamond Storm"],["Moonblast"],["Earth Power"],["Protect"]]}]},"landorus":{"flags":{},"sets":[{"species":"Landorus","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Knock Off"],["Earth Power"],["Rock Slide"],["Sludge Wave"]]},{"species":"Landorus","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Knock Off"],["Earth Power"],["Rock Slide"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]}},"OU":{"diancie":{"flags":{"megaOnly":1},"sets":[{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":44,"atk":32,"def":0,"spa":252,"spd":0,"spe":180},"nature":"Rash","moves":[["Moonblast"],["Diamond Storm"],["Earth Power"],["Rock Polish"]]},{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Moonblast"],["Earth Power"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Diancie","gender":"","item":"Diancite","ability":"Clear Body","evs":{"hp":0,"atk":32,"def":0,"spa":224,"spd":0,"spe":252},"nature":"Naive","moves":[["Diamond Storm"],["Moonblast"],["Earth Power"],["Protect"]]}]},"hippowdon":{"flags":{},"sets":[{"species":"Hippowdon","gender":"M","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Slack Off"],["Stealth Rock"],["Stone Edge"],["Earthquake"]]},{"species":"Hippowdon","gender":"M","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Slack Off"],["Stealth Rock"],["Stone Edge"],["Earthquake"]]},{"species":"Hippowdon","gender":"M","item":"Leftovers","ability":"Sand Stream","evs":{"hp":252,"atk":0,"def":144,"spa":0,"spd":112,"spe":0},"nature":"Careful","moves":[["Slack Off"],["Stealth Rock"],["Whirlwind"],["Earthquake"]]}]},"jirachi":{"flags":{},"sets":[{"species":"Jirachi","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":160,"def":0,"spa":0,"spd":0,"spe":96},"nature":"Jolly","moves":[["Iron Head"],["Fire Punch"],["Substitute"],["Toxic"]]},{"species":"Jirachi","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":224,"spe":32},"nature":"Careful","moves":[["Wish"],["Protect"],["Iron Head"],["Body Slam"]]},{"species":"Jirachi","gender":"","item":"Choice Scarf","ability":"Serene Grace","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Iron Head"],["Ice Punch"],["Fire Punch"]]}]},"celebi":{"flags":{},"sets":[{"species":"Celebi","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":148,"spe":108},"nature":"Bold","moves":[["Earth Power"],["Nasty Plot"],["Giga Drain"],["Recover"]]},{"species":"Celebi","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":84,"spe":16},"nature":"Calm","moves":[["Thunder Wave"],["Recover"],["Giga Drain"],["Stealth Rock"]]}]},"zygarde":{"flags":{},"sets":[{"species":"Zygarde","gender":"","item":"Life Orb","ability":"Aura Break","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Earthquake"],["Outrage"],["Extreme Speed"]]},{"species":"Zygarde","gender":"","item":"Leftovers","ability":"Aura Break","evs":{"hp":200,"atk":0,"def":0,"spa":0,"spd":252,"spe":56},"nature":"Careful","moves":[["Substitute"],["Coil"],["Earthquake"],["Dragon Tail"]]}]},"weavile":{"flags":{},"sets":[{"species":"Weavile","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Ice Punch"],["Knock Off"],["Ice Shard"],["Low Kick"]]},{"species":"Weavile","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pursuit"],["Knock Off"],["Ice Shard"],["Icicle Crash"]]}]},"volcarona":{"flags":{},"sets":[{"species":"Volcarona","gender":"","item":"Leftovers","ability":"Flame Body","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":0,"spe":124},"nature":"Bold","moves":[["Quiver Dance"],["Fiery Dance"],["Giga Drain"],["Roost"]]},{"species":"Volcarona","gender":"","item":"Lum Berry","ability":"Flame Body","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Modest","moves":[["Quiver Dance"],["Fire Blast"],["Giga Drain"],["Bug Buzz"]]}]},"victini":{"flags":{},"sets":[{"species":"Victini","gender":"","item":"Choice Band","ability":"Victory Star","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["V-create"],["Bolt Strike"],["Brick Break"],["U-turn"]]},{"species":"Victini","gender":"","item":"Choice Scarf","ability":"Victory Star","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["V-create"],["Bolt Strike"],["U-turn"],["Final Gambit"]]},{"species":"Victini","gender":"","item":"Expert Belt","ability":"Victory Star","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Blue Flare"],["Thunder"],["Glaciate"],["Focus Blast"]]},{"species":"Victini","gender":"","item":"Leftovers","ability":"Victory Star","evs":{"hp":248,"atk":32,"def":68,"spa":0,"spd":0,"spe":160},"nature":"Adamant","moves":[["Taunt"],["V-create"],["Will-O-Wisp"],["Bolt Strike"]]},{"species":"Victini","gender":"","item":"Leftovers","ability":"Victory Star","evs":{"hp":96,"atk":252,"def":0,"spa":0,"spd":0,"spe":160},"nature":"Adamant","moves":[["Substitute"],["V-create"],["Bolt Strike"],["Power-Up Punch"]]}]},"tornadustherian":{"flags":{},"sets":[{"species":"Tornadus-Therian","gender":"","item":"Assault Vest","ability":"Regenerator","evs":{"hp":132,"atk":0,"def":0,"spa":160,"spd":0,"spe":216},"nature":"Timid","moves":[["Hurricane"],["Focus Blast"],["Knock Off"],["U-turn"]]},{"species":"Tornadus-Therian","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":0,"atk":76,"def":0,"spa":216,"spd":0,"spe":216},"nature":"Naive","moves":[["Hurricane"],["Superpower"],["U-turn"],["Taunt"]]}]},"togekiss":{"flags":{},"sets":[{"species":"Togekiss","gender":"","item":"Lum Berry","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Modest","moves":[["Nasty Plot"],["Air Slash"],["Aura Sphere"],["Roost"]]},{"species":"Togekiss","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Thunder Wave"],["Air Slash"],["Defog"],["Roost"]]}]},"staraptor":{"flags":{},"sets":[{"species":"Staraptor","gender":"","item":"Choice Band","ability":"Reckless","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Close Combat"],["U-turn"],["Double-Edge"]]},{"species":"Staraptor","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Double-Edge"],["Close Combat"],["U-turn"]]}]},"thundurustherian":{"flags":{},"sets":[{"species":"Thundurus-Therian","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus-Therian","gender":"","item":"Choice Scarf","ability":"Volt Absorb","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"],["U-turn"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus-Therian","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":128,"atk":0,"def":0,"spa":252,"spd":0,"spe":128},"nature":"Modest","moves":[["Agility"],["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"scolipede":{"flags":{},"sets":[{"species":"Scolipede","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":16,"atk":252,"def":4,"spa":0,"spd":0,"spe":236},"nature":"Adamant","moves":[["Megahorn"],["Earthquake"],["Poison Jab"],["Protect"]]}]},"medicham":{"flags":{"megaOnly":1},"sets":[{"species":"Medicham","gender":"","item":"Medichamite","ability":"Pure Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["High Jump Kick"],["Zen Headbutt"],["Fake Out"],["Ice Punch"]]}]},"manaphy":{"flags":{},"sets":[{"species":"Manaphy","gender":"","item":"Leftovers","ability":"Hydration","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Calm Mind"],["Rest"],["Rain Dance"],["Scald"]]},{"species":"Manaphy","gender":"","item":"Leftovers","ability":"Hydration","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Timid","moves":[["Tail Glow"],["Surf"],["Ice Beam"],["Energy Ball"]]},{"species":"Manaphy","gender":"","item":"Leftovers","ability":"Hydration","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Timid","moves":[["Tail Glow"],["Rain Dance"],["Scald"],["Psychic"]]}]},"klefki":{"flags":{},"sets":[{"species":"Klefki","gender":"","item":"Light Clay","ability":"Prankster","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Reflect"],["Light Screen"],["Spikes"],["Foul Play"]]},{"species":"Klefki","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Thunder Wave"],["Magnet Rise"],["Spikes"],["Play Rough"]]}]},"hawlucha":{"flags":{},"sets":[{"species":"Hawlucha","gender":"","item":"Sitrus Berry","ability":"Unburden","evs":{"hp":12,"atk":252,"def":0,"spa":0,"spd":0,"spe":244},"nature":"Jolly","moves":[["Substitute"],["Swords Dance"],["High Jump Kick"],["Acrobatics"]]},{"species":"Hawlucha","gender":"","item":"Power Herb","ability":"Unburden","evs":{"hp":12,"atk":252,"def":0,"spa":0,"spd":0,"spe":244},"nature":"Jolly","moves":[["Sky Attack"],["Swords Dance"],["High Jump Kick"],["Acrobatics"]]}]},"diggersby":{"flags":{},"sets":[{"species":"Diggersby","gender":"","item":"Choice Scarf","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return"],["Earthquake"],["Fire Punch"],["U-turn"]],"happiness":255},{"species":"Diggersby","gender":"","item":"Focus Sash","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Return"],["Quick Attack"]],"happiness":255},{"species":"Diggersby","gender":"","item":"Life Orb","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Return"],["Quick Attack"]],"happiness":255},{"species":"Diggersby","gender":"","item":"Focus Sash","ability":"Huge Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Return"],["Fire Punch"]],"happiness":255}]},"crawdaunt":{"flags":{},"sets":[{"species":"Crawdaunt","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Crabhammer"],["Knock Off"],["Aqua Jet"],["Swords Dance"]]},{"species":"Crawdaunt","gender":"","item":"Choice Band","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Crabhammer"],["Knock Off"],["Aqua Jet"],["Crunch"]]}]},"alakazam":{"flags":{},"sets":[{"species":"Alakazam","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Hidden Power Ice"],["Thunder Wave"]],"ivs":{"atk":30,"def":30}},{"species":"Alakazam","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Focus Blast"],["Encore"]]},{"species":"Alakazam","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Focus Blast"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Alakazam","gender":"","item":"Alakazite","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Focus Blast"],["Encore"]]}]},"zapdos":{"flags":{},"sets":[{"species":"Zapdos","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":252,"atk":0,"def":168,"spa":68,"spd":0,"spe":20},"nature":"Bold","moves":[["Thunderbolt"],["Roost"],["Defog"],["Heat Wave"]]}]},"venusaur":{"flags":{"megaOnly":1},"sets":[{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Leech Seed"]]},{"species":"Venusaur","gender":"","item":"Venusaurite","ability":"Chlorophyll","evs":{"hp":232,"atk":0,"def":0,"spa":252,"spd":4,"spe":20},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fire"],["Synthesis"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"tyranitar":{"flags":{},"sets":[{"species":"Tyranitar","gender":"","item":"Choice Scarf","ability":"Sand Stream","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pursuit"],["Crunch"],["Stone Edge"],["Superpower"]]},{"species":"Tyranitar","gender":"","item":"Tyranitarite","ability":"Sand Stream","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Stone Edge"],["Superpower"],["Ice Punch"]]},{"species":"Tyranitar","gender":"","item":"Leftovers","ability":"Sand Stream","evs":{"hp":248,"atk":0,"def":80,"spa":0,"spd":180,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Stone Edge"],["Ice Beam"],["Pursuit"]]},{"species":"Tyranitar","gender":"","item":"Choice Band","ability":"Sand Stream","evs":{"hp":100,"atk":252,"def":0,"spa":0,"spd":0,"spe":156},"nature":"Adamant","moves":[["Pursuit"],["Crunch"],["Stone Edge"],["Superpower"]]}]},"thundurus":{"flags":{},"sets":[{"species":"Thundurus","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":76,"def":0,"spa":180,"spd":0,"spe":252},"nature":"Naive","moves":[["Thunderbolt"],["Knock Off"],["Superpower"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":30,"def":30}},{"species":"Thundurus","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunder Wave"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]],"ivs":{"atk":30,"def":30}}]},"terrakion":{"flags":{},"sets":[{"species":"Terrakion","gender":"","item":"Choice Scarf","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Stone Edge"],["X-Scissor"],["Rock Slide"]]},{"species":"Terrakion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Close Combat"],["Stone Edge"],["Swords Dance"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Terrakion","gender":"","item":"Focus Sash","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Close Combat"],["Stone Edge"],["Taunt"]]},{"species":"Terrakion","gender":"","item":"Lum Berry","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Rock Polish"],["Stone Edge"],["Close Combat"]]}]},"talonflame":{"flags":{},"sets":[{"species":"Talonflame","gender":"","ability":"Gale Wings","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Bulk Up"],["Acrobatics"],["Roost"],["Taunt"]]},{"species":"Talonflame","gender":"","item":"Choice Band","ability":"Gale Wings","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Brave Bird"],["Flare Blitz"],["U-turn"],["Steel Wing"]]},{"species":"Talonflame","gender":"","ability":"Gale Wings","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Acrobatics"],["Taunt"],["Roost"],["Will-O-Wisp"]]},{"species":"Talonflame","gender":"","item":"Sharp Beak","ability":"Gale Wings","evs":{"hp":88,"atk":252,"def":0,"spa":0,"spd":0,"spe":168},"nature":"Jolly","moves":[["Swords Dance"],["Brave Bird"],["Flare Blitz"],["Roost"]]},{"species":"Talonflame","gender":"","item":"Liechi Berry","ability":"Gale Wings","evs":{"hp":88,"atk":252,"def":0,"spa":0,"spd":0,"spe":168},"nature":"Jolly","moves":[["Swords Dance"],["Natural Gift"],["Brave Bird"],["Flare Blitz"]]},{"species":"Talonflame","gender":"","item":"Leftovers","ability":"Gale Wings","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":0,"spe":4},"nature":"Jolly","moves":[["Swords Dance"],["Brave Bird"],["Will-O-Wisp"],["Roost"]]}]},"sylveon":{"flags":{},"sets":[{"species":"Sylveon","gender":"","item":"Choice Specs","ability":"Pixilate","evs":{"hp":244,"atk":0,"def":0,"spa":252,"spd":0,"spe":12},"nature":"Modest","moves":[["Hyper Voice"],["Psyshock"],["Shadow Ball"],["Hidden Power Ground"]],"ivs":{"atk":0,"def":30,"spd":30,"spe":30}}]},"slowbro":{"flags":{},"sets":[{"species":"Slowbro","gender":"","item":"Slowbronite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":80,"spa":0,"spd":176,"spe":0},"nature":"Bold","moves":[["Scald"],["Calm Mind"],["Slack Off"],["Psyshock"]]},{"species":"Slowbro","gender":"","item":"Slowbronite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Fire Blast"],["Scald"],["Psyshock"],["Slack Off"]]},{"species":"Slowbro","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":232,"spa":0,"spd":24,"spe":0},"nature":"Bold","moves":[["Scald"],["Psyshock"],["Thunder Wave"],["Slack Off"]]}]},"skarmory":{"flags":{},"sets":[{"species":"Skarmory","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Iron Head"],["Spikes"],["Roost"],["Whirlwind"]]},{"species":"Skarmory","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Roost"],["Defog"],["Brave Bird"],["Whirlwind"]]},{"species":"Skarmory","gender":"F","item":"Custap Berry","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Spikes"],["Taunt"],["Stealth Rock"]]}]},"scizor":{"flags":{},"sets":[{"species":"Scizor","gender":"","item":"Scizorite","ability":"Light Metal","evs":{"hp":248,"atk":84,"def":0,"spa":0,"spd":176,"spe":0},"nature":"Impish","moves":[["Swords Dance"],["Roost"],["Bullet Punch"],["Knock Off"]]},{"species":"Scizor","gender":"","item":"Choice Band","ability":"Technician","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":8,"spe":0},"nature":"Adamant","moves":[["U-turn"],["Bullet Punch"],["Knock Off"],["Superpower"]]},{"species":"Scizor","gender":"","item":"Scizorite","ability":"Light Metal","evs":{"hp":252,"atk":4,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Defog"],["Roost"],["Bullet Punch"],["Knock Off"]]},{"species":"Scizor","gender":"","item":"Scizorite","ability":"Light Metal","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Bullet Punch"],["Bug Bite"],["Superpower"]]}]},"rotomwash":{"flags":{},"sets":[{"species":"Rotom-Wash","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":216,"spa":0,"spd":0,"spe":44},"nature":"Bold","moves":[["Volt Switch"],["Hydro Pump"],["Will-O-Wisp"],["Pain Split"]]}]},"pinsir":{"flags":{"megaOnly":1},"sets":[{"species":"Pinsir","gender":"","item":"Pinsirite","ability":"Hyper Cutter","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Return"],["Close Combat"],["Quick Attack"]],"happiness":255},{"species":"Pinsir","gender":"","item":"Pinsirite","ability":"Hyper Cutter","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Return"],["Earthquake"],["Quick Attack"]],"happiness":255}]},"mew":{"flags":{},"sets":[{"species":"Mew","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":252,"atk":0,"def":104,"spa":0,"spd":0,"spe":152},"nature":"Impish","moves":[["Defog"],["Soft-Boiled"],["Will-O-Wisp"],["Knock Off"]]},{"species":"Mew","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":252,"atk":0,"def":104,"spa":0,"spd":0,"spe":152},"nature":"Impish","moves":[["Taunt"],["Soft-Boiled"],["Will-O-Wisp"],["Knock Off"]]}]},"metagross":{"flags":{"megaOnly":1},"sets":[{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Meteor Mash"],["Zen Headbutt"],["Hammer Arm"],["Grass Knot"]]},{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Meteor Mash"],["Zen Headbutt"],["Hammer Arm"],["Pursuit"]]},{"species":"Metagross","gender":"","item":"Metagrossite","ability":"Clear Body","evs":{"hp":80,"atk":252,"def":0,"spa":0,"spd":0,"spe":176},"nature":"Adamant","moves":[["Meteor Mash"],["Zen Headbutt"],["Earthquake"],["Agility"]]}]},"manectric":{"flags":{"megaOnly":1},"sets":[{"species":"Manectric","gender":"","item":"Manectite","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Manectric","gender":"","item":"Manectite","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Flamethrower"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"mandibuzz":{"flags":{},"sets":[{"species":"Mandibuzz","gender":"","item":"Leftovers","ability":"Overcoat","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":108,"spe":16},"nature":"Bold","moves":[["Foul Play"],["Roost"],["Taunt"],["Defog"]]}]},"mamoswine":{"flags":{},"sets":[{"species":"Mamoswine","gender":"","item":"Focus Sash","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Endeavor"],["Ice Shard"],["Earthquake"]]},{"species":"Mamoswine","gender":"","item":"Life Orb","ability":"Thick Fat","evs":{"hp":0,"atk":240,"def":0,"spa":16,"spd":0,"spe":252},"nature":"Naive","moves":[["Earthquake"],["Ice Shard"],["Icicle Crash"],["Freeze-Dry"]]}]},"magnezone":{"flags":{},"sets":[{"species":"Magnezone","gender":"","item":"Choice Scarf","ability":"Magnet Pull","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Hidden Power Fire"],["Flash Cannon"],["Thunderbolt"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Magnezone","gender":"","item":"Choice Specs","ability":"Magnet Pull","evs":{"hp":172,"atk":0,"def":0,"spa":252,"spd":0,"spe":84},"nature":"Modest","moves":[["Volt Switch"],["Hidden Power Fire"],["Flash Cannon"],["Thunderbolt"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"lopunny":{"flags":{"megaOnly":1},"sets":[{"species":"Lopunny","gender":"","item":"Lopunnite","ability":"Limber","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Return"],["Fake Out"],["Ice Punch"]],"happiness":255},{"species":"Lopunny","gender":"","item":"Lopunnite","ability":"Limber","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Return"],["Fake Out"],["Power-Up Punch"]],"happiness":255},{"species":"Lopunny","gender":"","item":"Lopunnite","ability":"Limber","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Return"],["Substitute"],["Encore"]],"happiness":255}]},"latios":{"flags":{},"sets":[{"species":"Latios","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Defog"],["Trick"]]},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Earthquake"],["Defog"]]},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Roost"],["Defog"]]},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Hidden Power Fire"],["Defog"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Latios","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Psyshock"],["Calm Mind"],["Roost"]]},{"species":"Latios","gender":"M","item":"Latiosite","ability":"Levitate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Psyshock"],["Draco Meteor"],["Earthquake"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"latias":{"flags":{},"sets":[{"species":"Latias","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Defog"],["Draco Meteor"],["Psyshock"],["Healing Wish"]]},{"species":"Latias","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":72,"atk":0,"def":0,"spa":184,"spd":0,"spe":252},"nature":"Timid","moves":[["Defog"],["Draco Meteor"],["Psyshock"],["Roost"]]},{"species":"Latias","gender":"F","item":"Latiasite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":100,"spa":0,"spd":0,"spe":160},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Roost"],["Substitute"],["Calm Mind"],["Stored Power"]]},{"species":"Latias","gender":"F","item":"Latiasite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":68,"spa":0,"spd":0,"spe":192},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Thunder Wave"],["Roar"],["Recover"],["Dragon Pulse"]]}]},"landorustherian":{"flags":{},"sets":[{"species":"Landorus-Therian","gender":"","item":"Choice Scarf","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":24,"spa":0,"spd":0,"spe":232},"nature":"Jolly","moves":[["Earthquake"],["U-turn"],["Explosion"],["Stone Edge"]]},{"species":"Landorus-Therian","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":8,"spe":8},"nature":"Impish","moves":[["Stealth Rock"],["Earthquake"],["U-turn"],["Stone Edge"]]},{"species":"Landorus-Therian","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":56,"atk":220,"def":0,"spa":0,"spd":0,"spe":232},"nature":"Adamant","moves":[["Swords Dance"],["Rock Polish"],["Earthquake"],["Stone Edge"]]},{"species":"Landorus-Therian","gender":"","item":"Earth Plate","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Earthquake"],["Stone Edge"],["U-turn"]]}]},"kyuremblack":{"flags":{},"sets":[{"species":"Kyurem-Black","gender":"","item":"Choice Scarf","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":32,"spd":0,"spe":224},"nature":"Naive","moves":[["Outrage"],["Dragon Claw"],["Fusion Bolt"],["Ice Beam"]]},{"species":"Kyurem-Black","gender":"","item":"Life Orb","ability":"Teravolt","evs":{"hp":0,"atk":252,"def":0,"spa":56,"spd":0,"spe":200},"nature":"Lonely","moves":[["Dragon Claw"],["Fusion Bolt"],["Ice Beam"],["Iron Head"]]},{"species":"Kyurem-Black","gender":"","item":"Life Orb","ability":"Teravolt","evs":{"hp":0,"atk":56,"def":0,"spa":252,"spd":0,"spe":200},"nature":"Mild","moves":[["Ice Beam"],["Fusion Bolt"],["Earth Power"],["Outrage"]]},{"species":"Kyurem-Black","gender":"","item":"Leftovers","ability":"Teravolt","evs":{"hp":56,"atk":0,"def":0,"spa":252,"spd":0,"spe":200},"nature":"Mild","moves":[["Substitute"],["Ice Beam"],["Fusion Bolt"],["Earth Power"]]}]},"keldeo":{"flags":{},"sets":[{"species":"Keldeo","gender":"","item":"Choice Specs","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Secret Sword"],["Scald"],["Icy Wind"]]},{"species":"Keldeo","gender":"","item":"Choice Scarf","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Secret Sword"],["Scald"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Keldeo","gender":"","item":"Leftovers","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Scald"],["Secret Sword"],["Substitute"],["Calm Mind"]]},{"species":"Keldeo","gender":"","item":"Salac Berry","ability":"Justified","evs":{"hp":8,"atk":0,"def":0,"spa":248,"spd":0,"spe":252},"nature":"Timid","moves":[["Endeavor"],["Substitute"],["Hydro Pump"],["Secret Sword"]]}]},"heracross":{"flags":{},"sets":[{"species":"Heracross","gender":"","item":"Heracronite","ability":"Guts","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Pin Missile"],["Rock Blast"],["Swords Dance"]]},{"species":"Heracross","gender":"","item":"Toxic Orb","ability":"Guts","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["Megahorn"],["Facade"],["Swords Dance"]]}]},"heatran":{"flags":{},"sets":[{"species":"Heatran","gender":"","item":"Choice Scarf","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Overheat"],["Flash Cannon"],["Earth Power"],["Stone Edge"]]},{"species":"Heatran","gender":"","item":"Air Balloon","ability":"Flash Fire","evs":{"hp":12,"atk":0,"def":0,"spa":252,"spd":0,"spe":244},"nature":"Timid","moves":[["Stealth Rock"],["Fire Blast"],["Taunt"],["Earth Power"]]},{"species":"Heatran","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":192,"spe":68},"nature":"Calm","moves":[["Lava Plume"],["Toxic"],["Taunt"],["Stealth Rock"]]}]},"gyarados":{"flags":{},"sets":[{"species":"Gyarados","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":88,"atk":192,"def":4,"spa":0,"spd":0,"spe":224},"nature":"Adamant","moves":[["Substitute"],["Dragon Dance"],["Waterfall"],["Bounce"]]},{"species":"Gyarados","gender":"","item":"Gyaradosite","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Waterfall"],["Crunch"],["Earthquake"]]}]},"gallade":{"flags":{"megaOnly":1},"sets":[{"species":"Gallade","gender":"","item":"Galladite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Close Combat"],["Knock Off"],["Zen Headbutt"]]},{"species":"Gallade","gender":"","item":"Galladite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Close Combat"],["Ice Punch"],["Zen Headbutt"]]}]},"gliscor":{"flags":{},"sets":[{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":192,"spe":72},"nature":"Careful","moves":[["Swords Dance"],["Roost"],["Knock Off"],["Earthquake"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":192,"spe":72},"nature":"Careful","moves":[["Taunt"],["Roost"],["Knock Off"],["Earthquake"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":0,"spa":0,"spd":192,"spe":72},"nature":"Careful","moves":[["Taunt"],["Roost"],["Toxic"],["Earthquake"]]},{"species":"Gliscor","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":244,"atk":0,"def":28,"spa":0,"spd":0,"spe":236},"nature":"Impish","moves":[["Substitute"],["Toxic"],["Protect"],["Earthquake"]]}]},"gengar":{"flags":{},"sets":[{"species":"Gengar","gender":"","item":"Black Sludge","ability":"Levitate","evs":{"hp":8,"atk":0,"def":0,"spa":248,"spd":0,"spe":252},"nature":"Timid","moves":[["Hex"],["Taunt"],["Will-O-Wisp"],["Sludge Wave"]]},{"species":"Gengar","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Wave"],["Focus Blast"],["Taunt"]]},{"species":"Gengar","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Pain Split"],["Shadow Ball"],["Focus Blast"]]}]},"gardevoir":{"flags":{"megaOnly":1},"sets":[{"species":"Gardevoir","gender":"","item":"Gardevoirite","ability":"Trace","evs":{"hp":0,"atk":0,"def":24,"spa":232,"spd":0,"spe":252},"nature":"Modest","moves":[["Calm Mind"],["Hyper Voice"],["Psyshock"],["Focus Blast"]]},{"species":"Gardevoir","gender":"","item":"Gardevoirite","ability":"Trace","evs":{"hp":0,"atk":0,"def":24,"spa":232,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psyshock"],["Focus Blast"],["Taunt"]]},{"species":"Gardevoir","gender":"","item":"Gardevoirite","ability":"Trace","evs":{"hp":0,"atk":0,"def":24,"spa":232,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psyshock"],["Focus Blast"],["Will-O-Wisp"]]}]},"garchomp":{"flags":{},"sets":[{"species":"Garchomp","gender":"","item":"Rocky Helmet","ability":"Rough Skin","evs":{"hp":252,"atk":0,"def":164,"spa":0,"spd":76,"spe":16},"nature":"Impish","moves":[["Stealth Rock"],["Earthquake"],["Dragon Tail"],["Fire Blast"]]},{"species":"Garchomp","gender":"","item":"Focus Sash","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Stealth Rock"],["Earthquake"],["Dragon Claw"],["Fire Blast"]]},{"species":"Garchomp","gender":"","item":"Lum Berry","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Earthquake"],["Outrage"],["Swords Dance"]]},{"species":"Garchomp","gender":"","item":"Garchompite","ability":"Rough Skin","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Draco Meteor"],["Earthquake"],["Fire Blast"],["Stone Edge"]]},{"species":"Garchomp","gender":"","item":"Choice Scarf","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Outrage"],["Stone Edge"],["Dragon Claw"]]}]},"ferrothorn":{"flags":{},"sets":[{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":88,"spa":0,"spd":168,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Leech Seed"],["Gyro Ball"],["Power Whip"]]},{"species":"Ferrothorn","gender":"","item":"Shed Shell","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":88,"spa":0,"spd":168,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Leech Seed"],["Gyro Ball"],["Protect"]]},{"species":"Ferrothorn","gender":"","item":"Leftovers","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":88,"spa":0,"spd":168,"spe":0},"nature":"Relaxed","moves":[["Protect"],["Leech Seed"],["Gyro Ball"],["Stealth Rock"]]}]},"excadrill":{"flags":{},"sets":[{"species":"Excadrill","gender":"","item":"Choice Scarf","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Rapid Spin"]]},{"species":"Excadrill","gender":"","item":"Air Balloon","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Swords Dance"]]},{"species":"Excadrill","gender":"","item":"Life Orb","ability":"Sand Rush","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Iron Head"],["Rock Slide"],["Rapid Spin"]]},{"species":"Excadrill","gender":"","item":"Leftovers","ability":"Mold Breaker","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Earthquake"],["Iron Head"],["Rapid Spin"],["Toxic"]]}]},"dragonite":{"flags":{},"sets":[{"species":"Dragonite","gender":"","item":"Choice Band","ability":"Multiscale","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Outrage"],["Extreme Speed"],["Thunder Punch"],["Superpower"]]},{"species":"Dragonite","gender":"","item":"Lum Berry","ability":"Multiscale","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Extreme Speed"],["Earthquake"]]},{"species":"Dragonite","gender":"","item":"Lum Berry","ability":"Multiscale","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Extreme Speed"],["Fire Punch"]]}]},"conkeldurr":{"flags":{},"sets":[{"species":"Conkeldurr","gender":"","item":"Assault Vest","ability":"Guts","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":236,"spe":20},"nature":"Adamant","moves":[["Drain Punch"],["Mach Punch"],["Ice Punch"],["Poison Jab"]]},{"species":"Conkeldurr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":48,"atk":252,"def":0,"spa":0,"spd":208,"spe":0},"nature":"Adamant","moves":[["Drain Punch"],["Mach Punch"],["Ice Punch"],["Thunder Punch"]]}]},"clefable":{"flags":{},"sets":[{"species":"Clefable","gender":"","item":"Leftovers","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":172,"spa":0,"spd":84,"spe":0},"nature":"Calm","moves":[["Calm Mind"],["Moonblast"],["Soft-Boiled"],["Flamethrower"]]},{"species":"Clefable","gender":"","item":"Leftovers","ability":"Unaware","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Moonblast"],["Wish"],["Protect"],["Heal Bell"]]},{"species":"Clefable","gender":"","item":"Leftovers","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":172,"spa":0,"spd":84,"spe":0},"nature":"Calm","moves":[["Stealth Rock"],["Moonblast"],["Thunder Wave"],["Soft-Boiled"]]}]},"charizard":{"flags":{"megaOnly":1},"sets":[{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","nature":"Jolly","moves":[["Dragon Dance"],["Dragon Claw"],["Flare Blitz"],["Roost"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":248,"atk":24,"def":0,"spa":0,"spd":180,"spe":56},"nature":"Adamant","moves":[["Earthquake"],["Dragon Claw"],["Will-O-Wisp"],["Roost"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Dragon Claw"],["Flare Blitz"],["Earthquake"]]},{"species":"Charizard","gender":"","item":"Charizardite X","ability":"Blaze","evs":{"hp":144,"atk":252,"def":0,"spa":0,"spd":0,"spe":112},"nature":"Adamant","moves":[["Tailwind"],["Outrage"],["Flare Blitz"],["Swords Dance"]]},{"species":"Charizard","gender":"","item":"Charizardite Y","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Solar Beam"],["Focus Blast"],["Roost"]]}]},"chansey":{"flags":{},"sets":[{"species":"Chansey","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":4,"atk":0,"def":252,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Soft-Boiled"],["Heal Bell"],["Stealth Rock"],["Seismic Toss"]]},{"species":"Chansey","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":4,"atk":0,"def":252,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Wish"],["Soft-Boiled"],["Seismic Toss"],["Toxic"]]}]},"breloom":{"flags":{},"sets":[{"species":"Breloom","gender":"","item":"Toxic Orb","ability":"Poison Heal","evs":{"hp":12,"atk":244,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Superpower"],["Seed Bomb"],["Facade"]]},{"species":"Breloom","gender":"","item":"Focus Sash","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spore"],["Bullet Seed"],["Mach Punch"],["Rock Tomb"]]},{"species":"Breloom","gender":"","item":"Life Orb","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spore"],["Bullet Seed"],["Mach Punch"],["Swords Dance"]]}]},"bisharp":{"flags":{},"sets":[{"species":"Bisharp","gender":"","item":"BlackGlasses","ability":"Defiant","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":52,"spe":204},"nature":"Adamant","moves":[["Knock Off"],["Iron Head"],["Sucker Punch"],["Pursuit"]]},{"species":"Bisharp","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Swords Dance"],["Iron Head"],["Sucker Punch"]]},{"species":"Bisharp","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Low Kick"],["Iron Head"],["Sucker Punch"]]},{"species":"Bisharp","gender":"","item":"BlackGlasses","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Low Kick"],["Iron Head"],["Sucker Punch"]]}]},"azumarill":{"flags":{},"sets":[{"species":"Azumarill","gender":"","item":"Assault Vest","ability":"Huge Power","evs":{"hp":240,"atk":252,"def":0,"spa":0,"spd":16,"spe":0},"nature":"Adamant","moves":[["Play Rough"],["Waterfall"],["Aqua Jet"],["Knock Off"]]},{"species":"Azumarill","gender":"","item":"Sitrus Berry","ability":"Huge Power","evs":{"hp":92,"atk":252,"def":0,"spa":0,"spd":0,"spe":164},"nature":"Adamant","moves":[["Belly Drum"],["Aqua Jet"],["Play Rough"],["Knock Off"]]},{"species":"Azumarill","gender":"","item":"Choice Band","ability":"Huge Power","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Play Rough"],["Waterfall"],["Aqua Jet"],["Superpower"]]}]},"altaria":{"flags":{"megaOnly":1},"sets":[{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Roost"],["Return"],["Earthquake"]],"happiness":255},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":96,"spe":28},"nature":"Impish","moves":[["Dragon Dance"],["Roost"],["Return"],["Substitute"]],"happiness":255},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":96,"spe":28},"nature":"Impish","moves":[["Dragon Dance"],["Roost"],["Return"],["Heal Bell"]],"happiness":255},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":248,"atk":0,"def":0,"spa":168,"spd":0,"spe":92},"nature":"Modest","moves":[["Hyper Voice"],["Fire Blast"],["Roost"],["Earthquake"]]},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":104,"spa":0,"spd":156,"spe":0},"nature":"Bold","moves":[["Hyper Voice"],["Roost"],["Heal Bell"],["Flamethrower"]]},{"species":"Altaria","gender":"","item":"Altarianite","ability":"Cloud Nine","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Return"],["Earthquake"],["Fire Blast"]],"happiness":255}]},"serperior":{"flags":{},"sets":[{"species":"Serperior","gender":"","item":"Life Orb","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Fire"],["Glare"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Serperior","gender":"","item":"Meadow Plate","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Fire"],["Taunt"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Serperior","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Ground"],["Substitute"]],"ivs":{"spa":30,"spd":30}},{"species":"Serperior","gender":"","item":"Life Orb","ability":"Contrary","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Dragon Pulse"],["Hidden Power Fire"],["Giga Drain"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"feraligatr":{"flags":{},"sets":[{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Superpower"],["Dragon Dance"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Crunch"],["Dragon Dance"]]}]},"raikou":{"flags":{},"sets":[{"species":"Raikou","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Calm Mind"],["Thunderbolt"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Raikou","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Raikou","gender":"","item":"Assault Vest","ability":"Pressure","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]}},"UU":{"gardevoir":{"flags":{},"sets":[{"species":"Gardevoir","gender":"","item":"Choice Specs","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Psyshock"],["Focus Blast"],["Trick"]]},{"species":"Gardevoir","gender":"","item":"Choice Specs","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Psyshock"],["Focus Blast"],["Shadow Ball"]]},{"species":"Gardevoir","gender":"","item":"Choice Specs","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Psyshock"],["Shadow Ball"],["Trick"]]},{"species":"Gardevoir","gender":"","item":"Leftovers","ability":"Trace","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Moonblast"],["Psyshock"],["Focus Blast","Substitute"]]}]},"sableye":{"flags":{},"sets":[{"species":"Sableye","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Recover"],["Will-O-Wisp"],["Taunt"],["Knock Off"]]}]},"diancie":{"flags":{},"sets":[{"species":"Diancie","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["Stealth Rock"],["Moonblast"],["Diamond Storm"],["Earth Power","Protect"]]}]},"metagross":{"flags":{},"sets":[{"species":"Metagross","gender":"","item":"Shuca Berry","ability":"Clear Body","evs":{"hp":40,"atk":252,"def":0,"spa":0,"spd":0,"spe":216},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake","Ice Punch","Thunder Punch"],["Zen Headbutt"],["Bullet Punch"]]}]},"gyarados":{"flags":{},"sets":[{"species":"Gyarados","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Waterfall"],["Bounce"],["Substitute","Earthquake","Stone Edge"]]},{"species":"Gyarados","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":216,"atk":60,"def":184,"spa":0,"spd":0,"spe":48},"nature":"Impish","moves":[["Rest"],["Sleep Talk"],["Waterfall"],["Toxic","Roar"]]}]},"hoopa":{"flags":{},"sets":[{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Trick Room"],["Shadow Ball"],["Psyshock","Psychic"],["Focus Blast"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Focus Blast"],["Psyshock"],["Substitute"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Focus Blast"],["Psyshock"],["Nasty Plot"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Focus Blast"],["Nasty Plot"],["Substitute"]]}]},"crobat":{"flags":{},"sets":[{"species":"Crobat","gender":"","item":"Choice Band","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Sleep Talk"],["Brave Bird"],["Cross Poison"],["U-turn"]]},{"species":"Crobat","gender":"","item":"Black Sludge","ability":"Infiltrator","evs":{"hp":248,"atk":0,"def":80,"spa":0,"spd":4,"spe":176},"nature":"Jolly","moves":[["Roost"],["Defog"],["Taunt"],["Brave Bird"]]}]},"entei":{"flags":{},"sets":[{"species":"Entei","gender":"","item":"Choice Band","ability":"Pressure","shiny":true,"evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Sacred Fire"],["Stone Edge"],["Bulldoze"]]},{"species":"Entei","gender":"","item":"Life Orb","ability":"Pressure","shiny":true,"evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Sacred Fire"],["Stone Edge"],["Bulldoze"]]},{"species":"Entei","gender":"","item":"Assault Vest","ability":"Pressure","shiny":true,"evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":240,"spe":16},"nature":"Adamant","moves":[["Extreme Speed"],["Sacred Fire"],["Stone Edge"],["Bulldoze"]]}]},"suicune":{"flags":{},"sets":[{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Calm Mind"],["Scald"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Roar"],["Scald"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":248,"atk":0,"def":0,"spa":196,"spd":0,"spe":64},"nature":"Modest","moves":[["Substitute"],["Calm Mind"],["Hydro Pump"],["Ice Beam"]]},{"species":"Suicune","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Hydro Pump"],["Ice Beam"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"aerodactyl":{"flags":{"megaOnly":1},"sets":[{"species":"Aerodactyl","gender":"","item":"Aerodactylite","ability":"Pressure","evs":{"hp":40,"atk":252,"def":0,"spa":0,"spd":0,"spe":216},"nature":"Jolly","moves":[["Hone Claws"],["Stone Edge"],["Aerial Ace"],["Aqua Tail"]]},{"species":"Aerodactyl","gender":"","item":"Aerodactylite","ability":"Pressure","evs":{"hp":40,"atk":252,"def":0,"spa":0,"spd":0,"spe":216},"nature":"Jolly","moves":[["Roost"],["Taunt"],["Stone Edge"],["Aerial Ace"]]}]},"hydreigon":{"flags":{},"sets":[{"species":"Hydreigon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Draco Meteor"],["Dark Pulse"],["Fire Blast"]]},{"species":"Hydreigon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Roost"],["Draco Meteor"],["Fire Blast"],["Superpower"]]},{"species":"Hydreigon","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Draco Meteor"],["Dark Pulse"],["Focus Blast"],["Flash Cannon"]]},{"species":"Hydreigon","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["U-turn"],["Draco Meteor"],["Dark Pulse"],["Focus Blast"]]}]},"machamp":{"flags":{},"sets":[{"species":"Machamp","gender":"","item":"Assault Vest","ability":"No Guard","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Bullet Punch"],["Dynamic Punch"],["Knock Off"],["Ice Punch"]]},{"species":"Machamp","gender":"","item":"Choice Band","ability":"No Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bullet Punch"],["Dynamic Punch"],["Knock Off"],["Ice Punch"]]},{"species":"Machamp","gender":"","item":"Leftovers","ability":"No Guard","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":0,"spe":8},"nature":"Adamant","moves":[["Rest"],["Sleep Talk"],["Dynamic Punch"],["Knock Off"]]},{"species":"Machamp","gender":"","item":"Leftovers","ability":"No Guard","evs":{"hp":212,"atk":252,"def":0,"spa":0,"spd":0,"spe":44},"nature":"Adamant","moves":[["Bulk Up"],["Dynamic Punch"],["Stone Edge"],["Ice Punch"]]}]},"mienshao":{"flags":{},"sets":[{"species":"Mienshao","gender":"","item":"Life Orb","ability":"Regenerator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Fake Out"],["High Jump Kick"],["Knock Off"],["U-turn"]]},{"species":"Mienshao","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Knock Off"],["Poison Jab"],["U-turn"]]}]},"absol":{"flags":{"megaOnly":1},"sets":[{"species":"Absol","gender":"","item":"Absolite","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Sucker Punch"],["Knock Off"],["Superpower"]]},{"species":"Absol","gender":"","item":"Absolite","ability":"Justified","evs":{"hp":0,"atk":240,"def":0,"spa":44,"spd":0,"spe":224},"nature":"Naive","moves":[["Sucker Punch"],["Knock Off"],["Ice Beam"],["Fire Blast"]]}]},"aggron":{"flags":{"megaOnly":1},"sets":[{"species":"Aggron","gender":"","item":"Aggronite","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":16,"spa":0,"spd":244,"spe":0},"nature":"Impish","moves":[["Rest"],["Sleep Talk"],["Heavy Slam"],["Earthquake"]]},{"species":"Aggron","gender":"","item":"Aggronite","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":136,"spa":0,"spd":124,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Roar"],["Heavy Slam"],["Earthquake"]]}]},"beedrill":{"flags":{"megaOnly":1},"sets":[{"species":"Beedrill","gender":"","item":"Beedrillite","ability":"Swarm","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Protect"],["U-turn"],["Poison Jab"],["Drill Run"]]}]},"blastoise":{"flags":{"megaOnly":1},"sets":[{"species":"Blastoise","gender":"","item":"Blastoisinite","ability":"Rain Dish","evs":{"hp":56,"atk":0,"def":0,"spa":252,"spd":0,"spe":200},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Aura Sphere"],["Dark Pulse"]]},{"species":"Blastoise","gender":"","item":"Blastoisinite","ability":"Torrent","evs":{"hp":252,"atk":0,"def":148,"spa":44,"spd":64,"spe":0},"nature":"Bold","moves":[["Rapid Spin"],["Scald"],["Ice Beam"],["Dark Pulse"]]}]},"empoleon":{"flags":{},"sets":[{"species":"Empoleon","gender":"","item":"Leftovers","ability":"Torrent","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Stealth Rock"],["Defog"],["Roar"],["Scald"]]},{"species":"Empoleon","gender":"","item":"Choice Specs","ability":"Torrent","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Hydro Pump"],["Flash Cannon"],["Ice Beam"],["Grass Knot"]]},{"species":"Empoleon","gender":"","item":"Petaya Berry","ability":"Torrent","evs":{"hp":12,"atk":0,"def":4,"spa":252,"spd":0,"spe":240},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Agility"],["Substitute"],["Surf"],["Ice Beam"]]}]},"krookodile":{"flags":{},"sets":[{"species":"Krookodile","gender":"","item":"Choice Band","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Pursuit"],["Earthquake"],["Knock Off"],["Superpower"]]},{"species":"Krookodile","gender":"","item":"Choice Scarf","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Knock Off"],["Stone Edge"],["Superpower"]]},{"species":"Krookodile","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Impish","moves":[["Stealth Rock"],["Taunt"],["Earthquake"],["Knock Off"]]}]},"nidoqueen":{"flags":{},"sets":[{"species":"Nidoqueen","gender":"F","item":"Life Orb","ability":"Sheer Force","evs":{"hp":128,"atk":0,"def":0,"spa":252,"spd":0,"spe":128},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Stealth Rock"],["Sludge Wave"],["Earth Power"],["Ice Beam"]]},{"species":"Nidoqueen","gender":"F","item":"Black Sludge","ability":"Sheer Force","evs":{"hp":248,"atk":0,"def":240,"spa":0,"spd":0,"spe":20},"nature":"Bold","moves":[["Stealth Rock"],["Roar"],["Earth Power"],["Ice Beam"]]}]},"shaymin":{"flags":{},"sets":[{"species":"Shaymin","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Substitute"],["Leech Seed"],["Seed Flare"],["Air Slash"]]},{"species":"Shaymin","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Rest"],["Seed Flare"],["Earth Power"],["Air Slash"]]}]},"swampert":{"flags":{},"sets":[{"species":"Swampert","gender":"","item":"Leftovers","ability":"Torrent","evs":{"hp":240,"atk":16,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Roar"],["Earthquake"],["Scald"]]},{"species":"Swampert","gender":"","item":"Choice Band","ability":"Torrent","evs":{"hp":204,"atk":252,"def":0,"spa":0,"spd":0,"spe":52},"nature":"Adamant","moves":[["Waterfall"],["Earthquake"],["Ice Beam"],["Superpower"]]},{"species":"Swampert","gender":"","item":"Chesto Berry","ability":"Torrent","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Curse"],["Earthquake"],["Ice Beam"]]},{"species":"Swampert","gender":"","item":"Swampertite","ability":"Torrent","evs":{"hp":104,"atk":252,"def":0,"spa":0,"spd":0,"spe":152},"nature":"Adamant","moves":[["Rain Dance"],["Waterfall"],["Earthquake"],["Ice Punch"]]}]},"ampharos":{"flags":{"megaOnly":1},"sets":[{"species":"Ampharos","gender":"","item":"Ampharosite","ability":"Static","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Agility"],["Dragon Pulse"],["Thunderbolt"],["Focus Blast"]]},{"species":"Ampharos","gender":"M","item":"Ampharosite","ability":"Static","evs":{"hp":132,"atk":0,"def":0,"spa":252,"spd":0,"spe":124},"nature":"Modest","moves":[["Volt Switch"],["Thunderbolt"],["Dragon Pulse"],["Focus Blast"]]},{"species":"Ampharos","gender":"","item":"Ampharosite","ability":"Static","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Rest"],["Sleep Talk"],["Volt Switch"],["Dragon Pulse"]]},{"species":"Ampharos","gender":"","item":"Ampharosite","ability":"Static","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Rest"],["Sleep Talk"],["Volt Switch"],["Dragon Pulse"]]}]},"arcanine":{"flags":{},"sets":[{"species":"Arcanine","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Morning Sun"],["Will-O-Wisp"],["Extreme Speed"],["Flare Blitz"]]},{"species":"Arcanine","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Flare Blitz"],["Close Combat"],["Wild Charge"]]},{"species":"Arcanine","gender":"","item":"Choice Band","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Extreme Speed"],["Flare Blitz"],["Close Combat"],["Wild Charge"]]}]},"azelf":{"flags":{},"sets":[{"species":"Azelf","gender":"","item":"Focus Sash","ability":"Levitate","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Hasty","moves":[["Stealth Rock"],["Taunt"],["Knock Off"],["Explosion"]]},{"species":"Azelf","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Taunt"],["Reflect"],["Light Screen"],["Explosion"]]},{"species":"Azelf","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Psyshock"],["Fire Blast"],["Dazzling Gleam"]]}]},"blissey":{"flags":{},"sets":[{"species":"Blissey","gender":"F","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Soft-Boiled"],["Wish"],["Toxic"],["Seismic Toss"]]},{"species":"Blissey","gender":"F","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Soft-Boiled"],["Heal Bell"],["Toxic"],["Seismic Toss"]]},{"species":"Blissey","gender":"F","item":"Leftovers","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Protect"],["Wish"],["Heal Bell"],["Seismic Toss"]]}]},"chandelure":{"flags":{},"sets":[{"species":"Chandelure","gender":"","item":"Choice Scarf","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Trick"],["Fire Blast"],["Shadow Ball"],["Energy Ball"]]},{"species":"Chandelure","gender":"","item":"Choice Specs","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Trick"],["Overheat"],["Shadow Ball"],["Energy Ball"]]},{"species":"Chandelure","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":112,"atk":0,"def":0,"spa":140,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Calm Mind"],["Substitute"],["Flamethrower"],["Shadow Ball"]]}]},"chesnaught":{"flags":{},"sets":[{"species":"Chesnaught","gender":"","item":"Leftovers","ability":"Bulletproof","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Spiky Shield"],["Spikes"],["Leech Seed"],["Drain Punch"]]},{"species":"Chesnaught","gender":"","item":"Leftovers","ability":"Bulletproof","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Spiky Shield"],["Spikes"],["Leech Seed"],["Drain Punch"]]}]},"cloyster":{"flags":{},"sets":[{"species":"Cloyster","gender":"","item":"Focus Sash","ability":"Skill Link","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Shell Smash"],["Icicle Spear"],["Rock Blast"],["Ice Shard"]]},{"species":"Cloyster","gender":"","item":"Focus Sash","ability":"Skill Link","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rapid Spin"],["Spikes"],["Icicle Spear"],["Explosion"]]}]},"darmanitan":{"flags":{},"sets":[{"species":"Darmanitan","gender":"","item":"Choice Band","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Rock Slide"],["Superpower"],["U-turn"]]},{"species":"Darmanitan","gender":"","item":"Choice Scarf","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Rock Slide"],["Superpower"],["U-turn"]]},{"species":"Darmanitan","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Rock Slide"],["Superpower"],["U-turn"]]}]},"donphan":{"flags":{},"sets":[{"species":"Donphan","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Rapid Spin"],["Ice Shard"],["Earthquake"]]},{"species":"Donphan","gender":"","item":"Assault Vest","ability":"Sturdy","evs":{"hp":174,"atk":252,"def":0,"spa":0,"spd":0,"spe":82},"nature":"Adamant","moves":[["Rapid Spin"],["Ice Shard"],["Earthquake"],["Knock Off"]]}]},"espeon":{"flags":{},"sets":[{"species":"Espeon","gender":"","item":"Light Clay","ability":"Magic Bounce","evs":{"hp":248,"atk":0,"def":0,"spa":8,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Morning Sun"],["Reflect"],["Light Screen"],["Psyshock"]]},{"species":"Espeon","gender":"","item":"Choice Specs","ability":"Magic Bounce","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Trick"],["Psyshock"],["Shadow Ball"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"florges":{"flags":{},"sets":[{"species":"Florges","gender":"F","item":"Leftovers","ability":"Flower Veil","evs":{"hp":248,"atk":0,"def":236,"spa":0,"spd":24,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Protect"],["Wish"],["Aromatherapy"],["Moonblast"]]},{"species":"Florges","gender":"F","item":"Leftovers","ability":"Flower Veil","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Synthesis"],["Aromatherapy"],["Calm Mind"],["Moonblast"]]}]},"flygon":{"flags":{},"sets":[{"species":"Flygon","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Defog"],["Outrage"],["Earthquake"],["U-turn"]]},{"species":"Flygon","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Roost"],["Defog"],["Earthquake"],["U-turn"]]}]},"forretress":{"flags":{},"sets":[{"species":"Forretress","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Rapid Spin"],["Gyro Ball"],["Volt Switch"]]}]},"galvantula":{"flags":{},"sets":[{"species":"Galvantula","gender":"","item":"Focus Sash","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Sticky Web"],["Thunder"],["Bug Buzz"],["Energy Ball"]]},{"species":"Galvantula","gender":"M","item":"Life Orb","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Volt Switch"],["Thunder"],["Bug Buzz"],["Energy Ball"]]},{"species":"Galvantula","gender":"M","item":"Choice Specs","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Volt Switch"],["Thunder"],["Bug Buzz"],["Energy Ball"]]}]},"goodra":{"flags":{},"sets":[{"species":"Goodra","gender":"","item":"Assault Vest","ability":"Sap Sipper","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"nature":"Modest","moves":[["Draco Meteor"],["Fire Blast"],["Sludge Bomb"],["Dragon Tail"]]},{"species":"Goodra","gender":"","item":"Life Orb","ability":"Sap Sipper","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Draco Meteor"],["Fire Blast"],["Sludge Bomb"],["Ice Beam"]]}]},"haxorus":{"flags":{},"sets":[{"species":"Haxorus","gender":"","item":"Choice Band","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Sleep Talk"],["Outrage"],["Earthquake"],["Poison Jab"]]},{"species":"Haxorus","gender":"","item":"Life Orb","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Taunt"],["Outrage"],["Earthquake"]]},{"species":"Haxorus","gender":"M","item":"Lum Berry","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Outrage"],["Earthquake"],["Poison Jab"]]},{"species":"Haxorus","gender":"","item":"Life Orb","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Taunt"],["Outrage"],["Earthquake"]]}]},"heliolisk":{"flags":{},"sets":[{"species":"Heliolisk","gender":"","item":"Choice Specs","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Grass Knot"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Heliolisk","gender":"","item":"Life Orb","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Grass Knot"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"honchkrow":{"flags":{},"sets":[{"species":"Honchkrow","gender":"","item":"Life Orb","ability":"Moxie","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Roost"],["Sucker Punch"],["Brave Bird"],["Superpower"]]},{"species":"Honchkrow","gender":"","item":"Choice Scarf","ability":"Moxie","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Brave Bird"],["Night Slash"],["Superpower"],["Heat Wave"]]}]},"infernape":{"flags":{},"sets":[{"species":"Infernape","gender":"","item":"Focus Sash","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Fake Out"],["Stealth Rock"],["Close Combat"],["Overheat"]]},{"species":"Infernape","gender":"","item":"Choice Scarf","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Close Combat"],["Stone Edge"],["U-turn"]]},{"species":"Infernape","gender":"","item":"Choice Band","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Close Combat"],["Stone Edge"],["U-turn"]]},{"species":"Infernape","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Vacuum Wave"],["Fire Blast"],["Grass Knot"]]}]},"kingdra":{"flags":{},"sets":[{"species":"Kingdra","gender":"","item":"Lum Berry","ability":"Sniper","evs":{"hp":24,"atk":252,"def":0,"spa":0,"spd":0,"spe":232},"nature":"Adamant","moves":[["Dragon Dance"],["Outrage"],["Waterfall"],["Iron Head"]]},{"species":"Kingdra","gender":"","item":"Leftovers","ability":"Sniper","evs":{"hp":24,"atk":252,"def":0,"spa":0,"spd":0,"spe":232},"nature":"Adamant","moves":[["Iron Head"],["Dragon Dance"],["Outrage"],["Waterfall"]]},{"species":"Kingdra","gender":"","item":"Scope Lens","ability":"Sniper","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Agility"],["Focus Energy"],["Draco Meteor"],["Waterfall"]]},{"species":"Kingdra","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":60,"def":0,"spa":252,"spd":0,"spe":196},"nature":"Mild","moves":[["Rain Dance"],["Hydro Pump"],["Draco Meteor"],["Waterfall"]]}]},"lucario":{"flags":{},"sets":[{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Bullet Punch"],["Close Combat"],["Crunch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Extreme Speed"],["Close Combat"],["Ice Punch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Bullet Punch"],["Close Combat"],["Ice Punch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Extreme Speed"],["Close Combat"],["Crunch"]]},{"species":"Lucario","gender":"","item":"Life Orb","ability":"Steadfast","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Vacuum Wave"],["Aura Sphere"],["Flash Cannon"]]}]},"milotic":{"flags":{},"sets":[{"species":"Milotic","gender":"","item":"Life Orb","ability":"Competitive","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Recover"],["Hydro Pump"],["Ice Beam"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Milotic","gender":"","item":"Leftovers","ability":"Marvel Scale","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Haze"],["Scald"],["Ice Beam"]]},{"species":"Milotic","gender":"","item":"Leftovers","ability":"Marvel Scale","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Recover"],["Haze"],["Scald"],["Ice Beam"]]}]},"noivern":{"flags":{},"sets":[{"species":"Noivern","gender":"","item":"Choice Specs","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Switcheroo"],["Draco Meteor"],["Hurricane"],["Flamethrower"]]},{"species":"Noivern","gender":"","item":"Life Orb","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Draco Meteor"],["Hurricane"],["Flamethrower"]]},{"species":"Noivern","gender":"","item":"Leftovers","ability":"Infiltrator","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Taunt"],["Draco Meteor"],["Air Slash"]]}]},"porygonz":{"flags":{},"sets":[{"species":"Porygon-Z","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Tri Attack"],["Dark Pulse"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Porygon-Z","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Trick"],["Tri Attack"],["Thunderbolt"],["Ice Beam"]]},{"species":"Porygon-Z","gender":"","item":"Choice Scarf","ability":"Adaptability","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Trick"],["Tri Attack"],["Thunderbolt"],["Ice Beam"]]}]},"porygon2":{"flags":{},"sets":[{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Trace","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Thunder Wave"],["Thunderbolt"],["Ice Beam"]]},{"species":"Porygon2","gender":"","item":"Eviolite","ability":"Trace","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Recover"],["Thunder Wave"],["Thunderbolt"],["Ice Beam"]]}]},"rotomheat":{"flags":{},"sets":[{"species":"Rotom-Heat","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Trick"],["Overheat"],["Volt Switch"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Rotom-Heat","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Trick"],["Overheat"],["Volt Switch"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Rotom-Heat","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":216,"spa":0,"spd":0,"spe":44},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Pain Split"],["Will-O-Wisp"],["Overheat"],["Volt Switch"]]}]},"scrafty":{"flags":{},"sets":[{"species":"Scrafty","gender":"","item":"Leftovers","ability":"Shed Skin","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Bulk Up"],["Drain Punch"],["Knock Off"]]},{"species":"Scrafty","gender":"","item":"Life Orb","ability":"Moxie","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Drain Punch"],["Knock Off"],["Zen Headbutt"]]}]},"snorlax":{"flags":{},"sets":[{"species":"Snorlax","gender":"","item":"Choice Band","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":56,"spa":0,"spd":200,"spe":0},"nature":"Adamant","moves":[["Pursuit"],["Body Slam"],["Earthquake"],["Fire Punch"]]},{"species":"Snorlax","gender":"","item":"Assault Vest","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Pursuit"],["Body Slam"],["Earthquake"],["Fire Blast"]]},{"species":"Snorlax","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":144,"atk":0,"def":188,"spa":0,"spd":176,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Curse"],["Body Slam"]]}]},"tentacruel":{"flags":{},"sets":[{"species":"Tentacruel","gender":"","item":"Black Sludge","ability":"Liquid Ooze","evs":{"hp":240,"atk":0,"def":244,"spa":0,"spd":0,"spe":24},"nature":"Bold","moves":[["Toxic Spikes"],["Rapid Spin"],["Scald"],["Knock Off"]]}]},"toxicroak":{"flags":{},"sets":[{"species":"Toxicroak","gender":"","item":"Life Orb","ability":"Dry Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Sucker Punch"],["Gunk Shot"],["Drain Punch"]]},{"species":"Toxicroak","gender":"","item":"Black Sludge","ability":"Dry Skin","evs":{"hp":248,"atk":132,"def":116,"spa":0,"spd":0,"spe":12},"nature":"Adamant","moves":[["Substitute"],["Bulk Up"],["Sucker Punch"],["Drain Punch"]]}]},"umbreon":{"flags":{},"sets":[{"species":"Umbreon","gender":"M","item":"Leftovers","ability":"Synchronize","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Protect"],["Wish"],["Heal Bell"],["Foul Play"]]},{"species":"Umbreon","gender":"M","item":"Leftovers","ability":"Synchronize","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Protect"],["Wish"],["Heal Bell"],["Foul Play"]]}]},"vaporeon":{"flags":{},"sets":[{"species":"Vaporeon","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":200,"atk":0,"def":252,"spa":0,"spd":56,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Protect"],["Wish"],["Heal Bell"],["Scald"]]}]},"froslass":{"flags":{},"sets":[{"species":"Froslass","gender":"F","item":"Focus Sash","ability":"Cursed Body","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Destiny Bond"],["Spikes"],["Taunt"],["Icy Wind"]]}]},"houndoom":{"flags":{"megaOnly":1},"sets":[{"species":"Houndoom","gender":"","item":"Houndoominite","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Taunt"],["Fire Blast"],["Dark Pulse"]]},{"species":"Houndoom","gender":"","item":"Houndoominite","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Sunny Day"],["Fire Blast"],["Dark Pulse"],["Solar Beam"]]}]},"kyurem":{"flags":{},"sets":[{"species":"Kyurem","gender":"","item":"Choice Scarf","ability":"Pressure","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Draco Meteor"],["Ice Beam"],["Earth Power"],["Outrage"]]},{"species":"Kyurem","gender":"","item":"Choice Specs","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Draco Meteor"],["Ice Beam"],["Earth Power"],["Flash Cannon"]]},{"species":"Kyurem","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Draco Meteor"],["Ice Beam"],["Earth Power"]]},{"species":"Kyurem","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":56,"atk":0,"def":0,"spa":235,"spd":0,"spe":216},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Roost"],["Substitute"],["Ice Beam"],["Earth Power"]]}]},"shuckle":{"flags":{},"sets":[{"species":"Shuckle","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Sticky Web"],["Encore"],["Knock Off"]]}]},"tornadus":{"flags":{},"sets":[{"species":"Tornadus","gender":"M","ability":"Defiant","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Acrobatics"],["Knock Off"],["Superpower"],["U-turn"]]},{"species":"Tornadus","gender":"M","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Tailwind"],["Hurricane"],["Heat Wave"],["Grass Knot"]]}]},"yanmega":{"flags":{},"sets":[{"species":"Yanmega","gender":"","item":"Choice Specs","ability":"Tinted Lens","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Sleep Talk"],["Bug Buzz"],["Air Slash"],["Giga Drain"]]},{"species":"Yanmega","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Protect"],["Bug Buzz"],["Air Slash"],["Giga Drain"]]}]},"zoroark":{"flags":{},"sets":[{"species":"Zoroark","gender":"","item":"Choice Specs","ability":"Illusion","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Trick"],["Night Daze"],["Focus Blast"],["Flamethrower"]]},{"species":"Zoroark","gender":"","item":"Life Orb","ability":"Illusion","evs":{"hp":0,"atk":196,"def":0,"spa":96,"spd":0,"spe":216},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Sucker Punch"],["Knock Off"],["Flamethrower"],["Grass Knot"]]},{"species":"Zoroark","gender":"","item":"Life Orb","ability":"Illusion","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Night Daze"],["Focus Blast"],["Flamethrower"]]}]},"cresselia":{"flags":{},"sets":[{"species":"Cresselia","gender":"F","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Moonlight"],["Thunder Wave"],["Psyshock"],["Moonblast"]]},{"species":"Cresselia","gender":"F","item":"Light Clay","ability":"Levitate","evs":{"hp":248,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Lunar Dance"],["Reflect"],["Light Screen"],["Moonblast"]]},{"species":"Cresselia","gender":"F","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":116,"spa":0,"spd":0,"spe":144},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Moonlight"],["Substitute"],["Calm Mind"],["Psyshock"]]},{"species":"Cresselia","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Reflect"],["Light Screen"],["Lunar Dance"],["Psyshock"]]},{"species":"Cresselia","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":136,"spa":0,"spd":0,"spe":120},"nature":"Bold","moves":[["Substitute"],["Calm Mind"],["Moonblast"],["Moonlight"]]},{"species":"Cresselia","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":116,"spa":0,"spd":0,"spe":144},"nature":"Bold","moves":[["Substitute"],["Calm Mind"],["Psyshock"],["Moonblast"]]}]},"gligar":{"flags":{},"sets":[{"species":"Gligar","gender":"","item":"Eviolite","ability":"Hyper Cutter","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Roost"],["Defog"],["Toxic"],["Earthquake"]]},{"species":"Gligar","gender":"","item":"Eviolite","ability":"Hyper Cutter","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Roost"],["Defog"],["Stealth Rock"],["Earthquake"]]},{"species":"Gligar","gender":"","item":"Eviolite","ability":"Hyper Cutter","evs":{"hp":248,"atk":0,"def":20,"spa":0,"spd":240,"spe":0},"nature":"Careful","moves":[["Roost"],["Defog"],["Toxic"],["Earthquake"]]}]},"aromatisse":{"flags":{},"sets":[{"species":"Aromatisse","gender":"","item":"Leftovers","ability":"Aroma Veil","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Protect"],["Wish"],["Aromatherapy"],["Moonblast"]]},{"species":"Aromatisse","gender":"","item":"Leftovers","ability":"Aroma Veil","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Protect"],["Wish"],["Aromatherapy"],["Moonblast"]]}]},"roserade":{"flags":{},"sets":[{"species":"Roserade","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Spikes"],["Giga Drain"],["Sludge Bomb"],["Synthesis"]]},{"species":"Roserade","gender":"","item":"Black Sludge","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":244,"spe":16},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Rest"],["Spikes"],["Giga Drain"],["Sludge Bomb"]]}]},"cobalion":{"flags":{},"sets":[{"species":"Cobalion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Calm Mind"],["Focus Blast"],["Flash Cannon"],["Hidden Power Ghost"]],"ivs":{"def":30,"spd":30}},{"species":"Cobalion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Close Combat"],["Iron Head"],["Stone Edge"]]},{"species":"Cobalion","gender":"","item":"Leftovers","ability":"Justified","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Taunt"],["Close Combat"],["Iron Head"]]}]},"dragalge":{"flags":{},"sets":[{"species":"Dragalge","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":200,"atk":0,"def":0,"spa":252,"spd":0,"spe":56},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Wave"],["Hidden Power Fire"],["Focus Blast"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Dragalge","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":200,"atk":0,"def":0,"spa":252,"spd":0,"spe":56},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Wave"],["Scald"],["Focus Blast"]]},{"species":"Dragalge","gender":"","item":"Black Sludge","ability":"Adaptability","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Toxic Spikes"],["Dragon Tail"],["Sludge Bomb"],["Scald"]]},{"species":"Dragalge","gender":"","item":"Dragon Fang","ability":"Adaptability","evs":{"hp":188,"atk":0,"def":0,"spa":252,"spd":0,"spe":68},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Bomb"],["Focus Blast"],["Dragon Pulse"]]},{"species":"Dragalge","gender":"","item":"Choice Specs","ability":"Adaptability","evs":{"hp":188,"atk":0,"def":0,"spa":252,"spd":0,"spe":68},"nature":"Modest","moves":[["Draco Meteor"],["Dragon Pulse"],["Sludge Wave"],["Focus Blast"]]}]},"reuniclus":{"flags":{},"sets":[{"species":"Reuniclus","gender":"","item":"Leftovers","ability":"Magic Guard","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Calm Mind"],["Psyshock"],["Focus Blast"]]},{"species":"Reuniclus","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Recover"],["Calm Mind"],["Psyshock"],["Focus Blast"]]}]},"whimsicott":{"flags":{},"sets":[{"species":"Whimsicott","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Encore"],["Giga Drain"],["Moonblast"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Whimsicott","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Encore"],["Taunt"],["Leech Seed"],["Moonblast"]]},{"species":"Whimsicott","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Moonblast"],["Giga Drain"],["Hidden Power Fire"],["Encore"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Whimsicott","gender":"","item":"Leftovers","ability":"Prankster","evs":{"hp":248,"atk":0,"def":236,"spa":0,"spd":0,"spe":24},"nature":"Bold","moves":[["Encore"],["U-turn"],["Stun Spore"],["Moonblast"]]}]},"sharpedo":{"flags":{},"sets":[{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Protect"],["Waterfall"],["Crunch"],["Ice Fang"]]},{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Naughty","moves":[["Protect"],["Crunch"],["Ice Fang"],["Hydro Pump"]]},{"species":"Sharpedo","gender":"","item":"Sharpedonite","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Protect"],["Destiny Bond"],["Waterfall"],["Crunch"]]},{"species":"Sharpedo","gender":"","item":"Life Orb","ability":"Speed Boost","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Protect"],["Destiny Bond"],["Waterfall"],["Crunch"]]}]},"sceptile":{"flags":{"megaOnly":1},"sets":[{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Giga Drain"],["Dragon Pulse"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Giga Drain"],["Dragon Pulse"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Dragon Pulse"],["Giga Drain"],["Focus Blast"],["Substitute"]]},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Giga Drain"],["Dragon Pulse"],["Focus Blast"],["Leaf Storm"]]},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Outrage"],["Earthquake"]]},{"species":"Sceptile","gender":"","item":"Sceptilite","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Dragon Pulse"],["Giga Drain"],["Focus Blast"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"rhyperior":{"flags":{},"sets":[{"species":"Rhyperior","gender":"","item":"Choice Band","ability":"Solid Rock","evs":{"hp":168,"atk":248,"def":0,"spa":0,"spd":0,"spe":92},"nature":"Adamant","moves":[["Stone Edge"],["Earthquake"],["Megahorn"],["Aqua Tail"]]},{"species":"Rhyperior","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":248,"atk":16,"def":244,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Megahorn"]]},{"species":"Rhyperior","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Megahorn"]]}]},"bronzong":{"flags":{},"sets":[{"species":"Bronzong","gender":"","item":"Light Clay","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Reflect"],["Light Screen"],["Explosion"]]},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Toxic"],["Gyro Ball"],["Earthquake"]]},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Toxic"],["Gyro Ball"],["Earthquake"]]}]},"feraligatr":{"flags":{},"sets":[{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":32,"atk":248,"def":0,"spa":0,"spd":0,"spe":228},"nature":"Jolly","moves":[["Dragon Dance"],["Waterfall"],["Ice Punch"],["Crunch"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":52,"atk":252,"def":0,"spa":0,"spd":0,"spe":204},"nature":"Adamant","moves":[["Swords Dance"],["Aqua Jet"],["Waterfall"],["Crunch"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Superpower"],["Aqua Jet"],["Swords Dance"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Superpower"],["Dragon Dance"]]},{"species":"Feraligatr","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Ice Punch"],["Crunch"],["Dragon Dance"]]}]},"slurpuff":{"flags":{},"sets":[{"species":"Slurpuff","gender":"","item":"Sitrus Berry","ability":"Unburden","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Belly Drum"],["Play Rough"],["Drain Punch"],["Return"]],"happiness":255},{"species":"Slurpuff","gender":"","item":"Chesto Berry","ability":"Unburden","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Rest"],["Calm Mind"],["Draining Kiss"],["Flamethrower"]]},{"species":"Slurpuff","gender":"","item":"Sitrus Berry","ability":"Unburden","evs":{"hp":52,"atk":252,"def":0,"spa":0,"spd":0,"spe":204},"nature":"Adamant","moves":[["Belly Drum"],["Play Rough"],["Return"],["Aromatherapy"]],"happiness":255}]},"pangoro":{"flags":{},"sets":[{"species":"Pangoro","gender":"","item":"Choice Band","ability":"Scrappy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Superpower"],["Gunk Shot"],["Ice Punch"]]},{"species":"Pangoro","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Drain Punch"],["Knock Off"],["Gunk Shot"]]},{"species":"Pangoro","gender":"","item":"Lum Berry","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Drain Punch"],["Knock Off"],["Gunk Shot"]]}]},"abomasnow":{"flags":{"megaOnly":1},"sets":[{"species":"Abomasnow","gender":"","item":"Abomasite","ability":"Soundproof","evs":{"hp":0,"atk":128,"def":0,"spa":252,"spd":0,"spe":128},"nature":"Mild","moves":[["Blizzard"],["Giga Drain"],["Ice Shard"],["Focus Blast"]]},{"species":"Abomasnow","gender":"","item":"Abomasite","ability":"Soundproof","evs":{"hp":128,"atk":252,"def":0,"spa":0,"spd":0,"spe":128},"nature":"Adamant","moves":[["Ice Shard"],["Wood Hammer"],["Earthquake"],["Swords Dance"]]}]}},"RU":{"venusaur":{"flags":{},"sets":[{"species":"Venusaur","gender":"","item":"Life Orb","ability":"Overgrow","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Leaf Storm"],["Sludge Bomb"],["Synthesis"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Venusaur","gender":"","item":"Black Sludge","ability":"Overgrow","evs":{"hp":252,"atk":0,"def":0,"spa":92,"spd":0,"spe":164},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"diancie":{"flags":{},"sets":[{"species":"Diancie","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Heal Bell"],["Moonblast"],["Diamond Storm"]]},{"species":"Diancie","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Rest"],["Sleep Talk"],["Moonblast"]]},{"species":"Diancie","gender":"","item":"Life Orb","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":252,"spd":0,"spe":0},"ivs":{"hp":31,"atk":31,"def":31,"spa":31,"spd":31,"spe":0},"nature":"Quiet","moves":[["Trick Room"],["Moonblast"],["Earth Power"],["Psychic","Diamond Storm","Explosion"]]}]},"manectric":{"flags":{},"sets":[{"species":"Manectric","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Flamethrower","Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Manectric","gender":"","item":"Choice Scarf","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Hidden Power Ice"],["Overheat","Switcheroo"]],"ivs":{"atk":30,"def":30}}]},"hoopa":{"flags":{},"sets":[{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute","Nasty Plot"],["Shadow Ball"],["Psyshock"],["Focus Blast"]]},{"species":"Hoopa","gender":"","item":"Life Orb","ability":"Magician","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Knock Off"],["Shadow Ball"],["Psyshock"],["Focus Blast"]]},{"species":"Hoopa","gender":"","item":"Leftovers","ability":"Magician","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Nasty Plot"],["Shadow Ball"],["Focus Blast"]]}]},"banette":{"flags":{"megaOnly":1},"sets":[{"species":"Banette","gender":"","item":"Banettite","ability":"Insomnia","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Destiny Bond","Gunk Shot"],["Knock Off"],["Sucker Punch"],["Will-O-Wisp","Taunt","Thunder Wave"]]}]},"jellicent":{"flags":{},"sets":[{"species":"Jellicent","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":212,"spa":0,"spd":0,"spe":44},"nature":"Bold","moves":[["Scald","Hex"],["Will-O-Wisp"],["Recover"],["Taunt"]]}]},"sigilyph":{"flags":{},"sets":[{"species":"Sigilyph","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Air Slash"],["Heat Wave"],["Roost"],["Psychic"]]},{"species":"Sigilyph","gender":"","item":"Flame Orb","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Roost"],["Psycho Shift"],["Air Slash"]]}]},"gastrodon":{"flags":{},"sets":[{"species":"Gastrodon","gender":"","item":"Leftovers","ability":"Storm Drain","evs":{"hp":252,"atk":0,"def":244,"spa":0,"spd":0,"spe":12},"nature":"Bold","moves":[["Scald"],["Recover"],["Toxic"],["Earth Power"]]}]},"delphox":{"flags":{},"sets":[{"species":"Delphox","gender":"","item":"Choice Scarf","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Psyshock"],["Dazzling Gleam"],["Trick","Overheat"]]},{"species":"Delphox","gender":"","item":"Choice Specs","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Psychic"],["Grass Knot"],["Flamethrower"]]},{"species":"Delphox","gender":"","item":"Choice Specs","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Psychic"],["Grass Knot"],["Hidden Power Water"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Delphox","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Fire Blast"],["Psychic"],["Grass Knot"]]},{"species":"Delphox","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Fire Blast"],["Psychic"],["Hidden Power Water"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Delphox","gender":"","item":"Leftovers","ability":"Blaze","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Calm Mind"],["Flamethrower"],["Psyshock"]]}]},"clawitzer":{"flags":{},"sets":[{"species":"Clawitzer","gender":"","item":"Life Orb","ability":"Mega Launcher","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Scald"],["Dark Pulse"],["Ice Beam"],["Aura Sphere"]]}]},"rotommow":{"flags":{},"sets":[{"species":"Rotom-Mow","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":48,"atk":0,"def":0,"spa":252,"spd":0,"spe":208},"nature":"Timid","moves":[["Leaf Storm"],["Volt Switch"],["Thunderbolt"],["Trick"]]}]},"rotom":{"flags":{},"sets":[{"species":"Rotom","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":124,"atk":0,"def":0,"spa":132,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Will-O-Wisp"],["Discharge"],["Hex"]]}]},"hitmontop":{"flags":{},"sets":[{"species":"Hitmontop","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Rapid Spin"],["Close Combat"],["Foresight"],["Toxic"]]}]},"braviary":{"flags":{},"sets":[{"species":"Braviary","gender":"","item":"Choice Scarf","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Superpower"],["U-turn"]],"happiness":255},{"species":"Braviary","gender":"","item":"Life orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Brave Bird"],["Return"],["Superpower"],["Roost"]],"happiness":255},{"species":"Braviary","gender":"","item":"Leftovers","ability":"Defiant","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":212,"spe":44},"nature":"Careful","moves":[["Substitute"],["Bulk Up"],["Roost"],["Brave Bird"]]}]},"registeel":{"flags":{},"sets":[{"species":"Registeel","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Curse"],["Iron Head"],["Rest"],["Sleep Talk"]]},{"species":"Registeel","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Seismic Toss"],["Protect"],["Thunder Wave","Toxic"],["Stealth Rock"]]}]},"omastar":{"flags":{},"sets":[{"species":"Omastar","gender":"","item":"Focus Sash","ability":"Weak Armor","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Spikes"],["Scald"],["Ice Beam"]]},{"species":"Omastar","gender":"","item":"Choice Specs","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Scald"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"magneton":{"flags":{},"sets":[{"species":"Magneton","gender":"","item":"Eviolite","ability":"Magnet Pull","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Magnet Rise"],["Thunderbolt"],["Flash Cannon"],["Hidden Power Water"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Magneton","gender":"","item":"Choice Specs","ability":"Analytic","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Volt Switch"],["Thunderbolt"],["Flash Cannon"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Magneton","gender":"","item":"Eviolite","ability":"Analytic","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Flash Cannon"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"jolteon":{"flags":{},"sets":[{"species":"Jolteon","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Water"],["Volt Switch"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Grass"],["Volt Switch"]],"ivs":{"atk":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Life Orb","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Life Orb","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Water"],["Volt Switch"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Life Orb","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Grass"],["Volt Switch"]],"ivs":{"atk":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Expert Belt","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Ice"],["Volt Switch"]],"ivs":{"atk":30,"def":30}},{"species":"Jolteon","gender":"","item":"Expert Belt","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Water"],["Volt Switch"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Jolteon","gender":"","item":"Expert Belt","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Shadow Ball"],["Hidden Power Grass"],["Volt Switch"]],"ivs":{"atk":30,"spa":30}}]},"golbat":{"flags":{},"sets":[{"species":"Golbat","gender":"","item":"Eviolite","ability":"Infiltrator","evs":{"hp":248,"atk":0,"def":180,"spa":0,"spd":0,"spe":80},"nature":"Impish","moves":[["Taunt"],["Roost"],["Brave Bird"],["Super Fang","Toxic"]]}]},"exploud":{"flags":{},"sets":[{"species":"Exploud","gender":"","item":"Choice Specs","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Boomburst"],["Fire Blast"],["Sleep Talk"],["Focus Blast"]]},{"species":"Exploud","gender":"","item":"Life Orb","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Boomburst"],["Fire Blast"],["Surf"],["Focus Blast"]]}]},"eelektross":{"flags":{},"sets":[{"species":"Eelektross","gender":"","item":"Assault Vest","ability":"Levitate","evs":{"hp":252,"atk":4,"def":0,"spa":252,"spd":0,"spe":0},"nature":"Modest","moves":[["Volt Switch"],["Giga Drain"],["Flamethrower"],["Knock Off"]]}]},"druddigon":{"flags":{},"sets":[{"species":"Druddigon","gender":"","item":"Rocky Helmet","ability":"Rough Skin","evs":{"hp":236,"atk":0,"def":252,"spa":0,"spd":0,"spe":20},"nature":"Impish","moves":[["Dragon Tail"],["Stealth Rock"],["Fire Punch"],["Glare","Gunk Shot"]]},{"species":"Druddigon","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":236,"atk":252,"def":0,"spa":0,"spd":0,"spe":20},"nature":"Adamant","moves":[["Outrage","Dragon Claw"],["Sucker Punch"],["Fire Punch"],["Gunk Shot"]]}]},"accelgor":{"flags":{},"sets":[{"species":"Accelgor","gender":"","item":"Focus Sash","ability":"Sticky Hold","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Timid","moves":[["Spikes"],["Final Gambit"],["Encore"],["Bug Buzz"]]},{"species":"Accelgor","gender":"","item":"Life Orb","ability":"Sticky Hold","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Bug Buzz"],["Focus Blast"],["Spikes"],["Sludge Bomb"]]},{"species":"Accelgor","gender":"","item":"Life Orb","ability":"Sticky Hold","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Bug Buzz"],["Focus Blast"],["Spikes"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"spiritomb":{"flags":{},"sets":[{"species":"Spiritomb","gender":"","item":"Leftovers","ability":"Infiltrator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Dark Pulse"],["Rest"],["Sleep Talk"]]},{"species":"Spiritomb","gender":"","item":"Leftovers","ability":"Infiltrator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Will-O-Wisp"],["Foul Play"],["Rest"],["Sleep Talk"]]},{"species":"Spiritomb","gender":"","item":"BlackGlasses","ability":"Infiltrator","evs":{"hp":212,"atk":252,"def":0,"spa":0,"spd":0,"spe":44},"nature":"Adamant","moves":[["Sucker Punch"],["Pursuit"],["Will-O-Wisp"],["Foul Play","Taunt"]]}]},"drapion":{"flags":{},"sets":[{"species":"Drapion","gender":"","item":"Black Sludge","ability":"Battle Armor","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":216,"spe":44},"nature":"Careful","moves":[["Knock Off"],["Taunt"],["Toxic Spikes"],["Poison Jab"]]},{"species":"Drapion","gender":"","item":"Shuca Berry","ability":"Battle Armor","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Knock Off"],["Pursuit"],["Poison Jab"]]},{"species":"Drapion","gender":"","item":"Shuca Berry","ability":"Battle Armor","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Knock Off"],["Aqua Tail"],["Poison Jab"]]}]},"camerupt":{"flags":{"megaOnly":1},"sets":[{"species":"Camerupt","gender":"","item":"Cameruptite","ability":"Solid Rock","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Fire Blast","Flamethrower"],["Earth Power"],["Hidden Power Ice"],["Toxic"]],"ivs":{"atk":30,"def":30}}]},"bronzong":{"flags":{},"sets":[{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Brave","moves":[["Trick Room"],["Stealth Rock"],["Earthquake"],["Explosion"]]},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Hidden Power Fire"],["Gyro Ball"],["Earthquake"],["Toxic"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Bronzong","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Gyro Ball"],["Psywave"],["Toxic"]]}]},"rhyperior":{"flags":{},"sets":[{"species":"Rhyperior","gender":"","item":"Choice Band","ability":"Solid Rock","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Stone Edge"],["Ice Punch"],["Megahorn"]]},{"species":"Rhyperior","gender":"","item":"Life Orb","ability":"Solid Rock","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Rock Polish"],["Earthquake"],["Stone Edge"],["Ice Punch","Swords Dance"]]},{"species":"Rhyperior","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":248,"atk":16,"def":0,"spa":0,"spd":244,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Ice Punch","Megahorn"]]}]},"hitmonlee":{"flags":{},"sets":[{"species":"Hitmonlee","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Knock Off"],["Rapid Spin"],["Close Combat"]]},{"species":"Hitmonlee","gender":"","item":"Life Orb","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["High Jump Kick"],["Knock Off"],["Mach Punch"],["Rapid Spin"]]},{"species":"Hitmonlee","gender":"","item":"Liechi Berry","ability":"Unburden","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Endure"],["Reversal"],["Knock Off"],["Mach Punch"]]}]},"glalie":{"flags":{"megaOnly":1},"sets":[{"species":"Glalie","gender":"","item":"Glalitite","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spikes"],["Double-Edge"],["Explosion"],["Ice Shard"]]},{"species":"Glalie","gender":"","item":"Glalitite","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Double-Edge"],["Freeze-Dry"],["Earthquake"],["Explosion"]]}]},"fletchinder":{"flags":{},"sets":[{"species":"Fletchinder","gender":"","ability":"Gale Wings","evs":{"hp":160,"atk":252,"def":74,"spa":0,"spd":24,"spe":0},"nature":"Adamant","moves":[["Acrobatics"],["Swords Dance"],["Will-O-Wisp"],["Roost"]]}]},"escavalier":{"flags":{},"sets":[{"species":"Escavalier","gender":"","item":"Assault Vest","ability":"Overcoat","evs":{"hp":174,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Megahorn"],["Iron Head"],["Knock Off"],["Drill Run","Pursuit"]]},{"species":"Escavalier","gender":"","item":"Choice Band","ability":"Overcoat","evs":{"hp":174,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Megahorn"],["Iron Head"],["Knock Off"],["Drill Run"]]}]},"aromatisse":{"flags":{},"sets":[{"species":"Aromatisse","gender":"","item":"Leftovers","ability":"Aroma Veil","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Wish"],["Protect"],["Moonblast"],["Aromatherapy"]]}]},"meloetta":{"flags":{},"sets":[{"species":"Meloetta","gender":"","item":"Assault Vest","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psyshock"],["Hyper Voice"],["Focus Blast"],["Shadow Ball","Grass Knot","Dazzling Gleam"]]},{"species":"Meloetta","gender":"","item":"Choice Scarf","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psyshock"],["Focus Blast"],["Dazzling Gleam","Shadow Ball","Trick","U-turn"]]},{"species":"Meloetta","gender":"","item":"Choice Specs","ability":"Serene Grace","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hyper Voice"],["Psychic"],["Focus Blast"],["U-turn","Dazzling Gleam","Shadow Ball"]]},{"species":"Meloetta","gender":"","item":"Life Orb","ability":"Serene Grace","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Jolly","moves":[["Relic Song"],["Return"],["Close Combat"],["Knock Off"]],"happiness":255},{"species":"Meloetta","gender":"","item":"Colbur Berry","ability":"Serene Grace","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Calm Mind"],["Hyper Voice","Psychic"],["Shadow Ball"],["Focus Blast"]]},{"species":"Meloetta","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Perish Song"],["Knock Off"],["Heal Bell"],["Thunder Wave"]]},{"species":"Meloetta","gender":"","item":"Leftovers","ability":"Serene Grace","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Modest","moves":[["Substitute"],["Calm Mind"],["Hyper Voice"],["Shadow Ball"]]}]},"alomomola":{"flags":{},"sets":[{"species":"Alomomola","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":120,"atk":0,"def":136,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Scald"],["Wish"],["Protect"],["Toxic"]]}]},"emboar":{"flags":{},"sets":[{"species":"Emboar","gender":"","item":"Choice Band","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Flare Blitz"],["Superpower"],["Wild Charge"],["Sucker Punch"]]},{"species":"Emboar","gender":"","item":"Expert Belt","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Flare Blitz"],["Superpower"],["Wild Charge"],["Sucker Punch"]]},{"species":"Emboar","gender":"","item":"Choice Scarf","ability":"Reckless","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Superpower"],["Wild Charge"],["Toxic"]]}]},"seismitoad":{"flags":{},"sets":[{"species":"Seismitoad","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":200,"atk":0,"def":252,"spa":0,"spd":56,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Scald"],["Earthquake"],["Knock Off"]]},{"species":"Seismitoad","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Rain Dance"],["Hydro Pump"],["Earth Power"],["Sludge Bomb"]]},{"species":"Seismitoad","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":164,"atk":0,"def":0,"spa":252,"spd":0,"spe":92},"nature":"Modest","moves":[["Stealth Rock"],["Hydro Pump"],["Earth Power"],["Grass Knot"]]}]},"qwilfish":{"flags":{},"sets":[{"species":"Qwilfish","gender":"","item":"Black Sludge","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":232,"spa":0,"spd":0,"spe":24},"nature":"Bold","moves":[["Spikes"],["Pain Split"],["Scald"],["Taunt"]]},{"species":"Qwilfish","gender":"","item":"Focus Sash","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Spikes"],["Taunt"],["Toxic Spikes"],["Explosion"]]}]},"granbull":{"flags":{},"sets":[{"species":"Granbull","gender":"","item":"Leftovers","ability":"Intimidate","evs":{"hp":252,"atk":0,"def":232,"spa":0,"spd":0,"spe":24},"nature":"Impish","moves":[["Play Rough"],["Earthquake"],["Heal Bell"],["Roar"]]},{"species":"Granbull","gender":"","item":"Choice Band","ability":"Intimidate","evs":{"hp":212,"atk":252,"def":0,"spa":0,"spd":0,"spe":44},"nature":"Adamant","moves":[["Play Rough"],["Fire Punch"],["Thunder Punch"],["Close Combat"]]}]},"medicham":{"flags":{},"sets":[{"species":"Medicham","gender":"","item":"Life Orb","ability":"Pure Power","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["High Jump Kick"],["Zen Headbutt"],["Thunder Punch"],["Drain Punch"]]},{"species":"Medicham","gender":"","item":"Choice Scarf","ability":"Pure Power","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["High Jump Kick"],["Zen Headbutt"],["Rock Slide","Poison Jab"],["Drain Punch","Trick"]]}]},"smeargle":{"flags":{},"sets":[{"species":"Smeargle","gender":"","item":"Focus Sash","ability":"Own Tempo","evs":{"hp":252,"atk":0,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Spore","Dark Void"],["Sticky Web"],["Stealth Rock"],["Explosion"]]}]},"absol":{"flags":{},"sets":[{"species":"Absol","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Superpower"],["Sucker Punch"],["Iron Tail","Pursuit"]]},{"species":"Absol","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Superpower"],["Sucker Punch"],["Swords Dance"]]}]},"aerodactyl":{"flags":{},"sets":[{"species":"Aerodactyl","gender":"","item":"Life Orb","ability":"Unnerve","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Stone Edge"],["Fire Fang","Earthquake"],["Aerial Ace"],["Roost"]]}]},"aggron":{"flags":{},"sets":[{"species":"Aggron","gender":"","item":"Choice Band","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Head Smash"],["Heavy Slam"],["Sleep Talk","Fire Punch"],["Low Kick"]]}]},"blastoise":{"flags":{},"sets":[{"species":"Blastoise","gender":"","item":"Leftovers","ability":"Torrent","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Scald"],["Rapid Spin"],["Toxic"],["Foresight","Refresh"]]}]},"slowking":{"flags":{},"sets":[{"species":"Slowking","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Scald"],["Psyshock"],["Calm Mind","Thunder Wave"],["Slack Off"]]},{"species":"Slowking","gender":"","item":"Choice Specs","ability":"Regenerator","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Scald"],["Psyshock"],["Fire Blast"],["Trick"]]},{"species":"Slowking","gender":"","item":"Colbur Berry","ability":"Regenerator","evs":{"hp":160,"atk":0,"def":0,"spa":0,"spd":0,"spe":96},"nature":"Bold","moves":[["Scald"],["Psyshock"],["Fire Blast"],["Thunder Wave"]]}]},"abomasnow":{"flags":{},"sets":[{"species":"Abomasnow","gender":"","item":"Life Orb","ability":"Snow Warning","evs":{"hp":0,"atk":132,"def":0,"spa":252,"spd":0,"spe":124},"nature":"Mild","moves":[["Blizzard"],["Giga Drain"],["Ice Shard"],["Focus Blast"]]}]},"flygon":{"flags":{},"sets":[{"species":"Flygon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Earth Power"],["Roost"],["Fire Blast"]]},{"species":"Flygon","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Draco Meteor"],["Earth Power"],["Roost"],["Defog"]]},{"species":"Flygon","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":116,"spa":0,"spd":116,"spe":24},"nature":"Careful","moves":[["Defog"],["Roost"],["Earthquake"],["U-turn"]]},{"species":"Flygon","gender":"","item":"Choice Band","ability":"Levitate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Outrage"],["Earthquake"],["U-turn"],["Iron Tail"]]}]},"scrafty":{"flags":{},"sets":[{"species":"Scrafty","gender":"","item":"Choice Band","ability":"Intimidate","evs":{"hp":152,"atk":252,"def":0,"spa":0,"spd":0,"spe":104},"nature":"Adamant","moves":[["Knock Off"],["High Jump Kick"],["Drain Punch"],["Poison Jab"]]},{"species":"Scrafty","gender":"","item":"Chople Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["High Jump Kick"],["Poison Jab","Iron Head"],["Dragon Dance"]]},{"species":"Scrafty","gender":"","item":"Coba Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["High Jump Kick"],["Head Smash"],["Dragon Dance"]]}]},"houndoom":{"flags":{},"sets":[{"species":"Houndoom","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Fire Blast"],["Dark Pulse"],["Sucker Punch"],["Nasty Plot"]]},{"species":"Houndoom","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":220,"def":0,"spa":36,"spd":0,"spe":252},"nature":"Hasty","moves":[["Fire Blast"],["Crunch"],["Sucker Punch"],["Pursuit"]]}]},"togetic":{"flags":{},"sets":[{"species":"Togetic","gender":"","item":"Eviolite","ability":"Serene Grace","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":0,"spe":8},"nature":"Bold","moves":[["Dazzling Gleam"],["Roost"],["Flamethrower"],["Thunder Wave"]]}]},"gallade":{"flags":{},"sets":[{"species":"Gallade","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Zen Headbutt"],["Knock Off"],["Swords Dance"]]},{"species":"Gallade","gender":"","item":"Choice Band","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Zen Headbutt"],["Knock Off"],["Drain Punch"]]}]},"virizion":{"flags":{},"sets":[{"species":"Virizion","gender":"","item":"Lum Berry","ability":"Justified","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Leaf Blade"],["Close Combat"],["Stone Edge","Zen Headbutt"],["Swords Dance"]]},{"species":"Virizion","gender":"","item":"Life Orb","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Giga Drain"],["Focus Blast"],["Hidden Power Ice"],["Calm Mind"]],"ivs":{"atk":30,"def":30}},{"species":"Virizion","gender":"","item":"Leftovers","ability":"Justified","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Giga Drain"],["Focus Blast"],["Substitute"],["Calm Mind"]]}]},"uxie":{"flags":{},"sets":[{"species":"Uxie","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":64,"spa":0,"spd":0,"spe":192},"nature":"Bold","moves":[["Stealth Rock"],["Psyshock"],["Thunder Wave"],["U-turn"]]}]},"sneasel":{"flags":{},"sets":[{"species":"Sneasel","gender":"","item":"Life Orb","ability":"Pickpocket","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Icicle Crash"],["Ice Shard"],["Low Kick","Pursuit"]]}]},"samurott":{"flags":{},"sets":[{"species":"Samurott","gender":"","item":"Lum Berry","ability":"Shell Armor","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Waterfall"],["Megahorn"],["Aqua Jet"]]}]},"gurdurr":{"flags":{},"sets":[{"species":"Gurdurr","gender":"","item":"Eviolite","ability":"Guts","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":8,"spe":0},"nature":"Adamant","moves":[["Bulk Up"],["Drain Punch"],["Knock Off"],["Mach Punch"]]}]},"poliwrath":{"flags":{},"sets":[{"species":"Poliwrath","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Scald"],["Circle Throw"],["Rest"],["Sleep Talk"]]},{"species":"Poliwrath","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]},{"species":"Poliwrath","gender":"","item":"Life Orb","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]},{"species":"Poliwrath","gender":"","item":"Choice Specs","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]}]},"vivillon":{"flags":{},"sets":[{"species":"Vivillon","gender":"","item":"Leftovers","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Sleep Powder"],["Quiver Dance"],["Hurricane"],["Substitute"]]}]},"audino":{"flags":{"megaOnly":1},"sets":[{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":0,"spe":8},"nature":"Modest","moves":[["Dazzling Gleam"],["Fire Blast"],["Surf"],["Healing Wish"]]}]},"mesprit":{"flags":{},"sets":[{"species":"Mesprit","gender":"","item":"Colbur Berry","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam","Ice Beam"],["Stealth Rock"],["Healing Wish"]]}]},"archeops":{"flags":{},"sets":[{"species":"Archeops","gender":"","item":"Focus Sash","ability":"Defeatist","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Naive","moves":[["Stealth Rock"],["Taunt"],["Endeavor"],["Head Smash"]]}]},"malamar":{"flags":{},"sets":[{"species":"Malamar","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":108,"spe":152},"nature":"Jolly","moves":[["Superpower"],["Knock Off"],["Rest"],["Sleep Talk"]]}]},"roselia":{"flags":{},"sets":[{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":248,"atk":0,"def":172,"spa":0,"spd":88,"spe":0},"nature":"Calm","moves":[["Spikes"],["Synthesis"],["Giga Drain"],["Sludge Bomb"]]}]},"piloswine":{"flags":{},"sets":[{"species":"Piloswine","gender":"","item":"Eviolite","ability":"Thick Fat","evs":{"hp":240,"atk":252,"def":0,"spa":0,"spd":0,"spe":16},"nature":"Adamant","moves":[["Stealth Rock"],["Ice Shard"],["Earthquake"],["Icicle Crash"]]}]},"sawk":{"flags":{},"sets":[{"species":"Sawk","gender":"","item":"Choice Band","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Zen Headbutt"],["Stone Edge"]]},{"species":"Sawk","gender":"","item":"Expert Belt","ability":"Mold Breaker","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Stone Edge"],["Zen Headbutt"]]},{"species":"Sawk","gender":"","item":"Lum Berry","ability":"Mold Breaker","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Earthquake"],["Stone Edge"]]},{"species":"Sawk","gender":"","item":"Choice Scarf","ability":"Sturdy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Stone Edge"],["Zen Headbutt"]]}]}},"NU":{"dodrio":{"flags":{},"sets":[{"species":"Dodrio","gender":"","item":"Choice Band","ability":"Early Bird","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Knock Off"],["Quick Attack"]],"happiness":255}]},"chatot":{"flags":{},"sets":[{"species":"Chatot","gender":"","item":"Choice Scarf","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["Chatter"],["U-turn"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Chatot","gender":"","item":"Choice Specs","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["Chatter"],["U-turn"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Chatot","gender":"","item":"Leftovers","ability":"Tangled Feet","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["Chatter"],["Nasty Plot"],["Encore"]]}]},"carracosta":{"flags":{},"sets":[{"species":"Carracosta","gender":"","item":"Life Orb","ability":"Solid Rock","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Waterfall"],["Stone Edge"],["Aqua Jet"]]},{"species":"Carracosta","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Stealth Rock"],["Scald"],["Rock Slide"],["Knock Off","Toxic"]]},{"species":"Carracosta","gender":"","item":"Life Orb","ability":"Solid Rock","evs":{"hp":0,"atk":28,"def":0,"spa":228,"spd":0,"spe":252},"nature":"Naive","moves":[["Shell Smash"],["Hydro Pump"],["Stone Edge"],["Ice Beam"]]}]},"beheeyem":{"flags":{},"sets":[{"species":"Beheeyem","gender":"","item":"Life Orb","ability":"Analytic","evs":{"hp":248,"atk":0,"def":8,"spa":252,"spd":0,"spe":0},"nature":"Quiet","moves":[["Trick Room"],["Psychic"],["Thunderbolt"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Beheeyem","gender":"","item":"Choice Specs","ability":"Analytic","evs":{"hp":132,"atk":0,"def":0,"spa":252,"spd":0,"spe":124},"nature":"Modest","moves":[["Psychic","Psyshock"],["Signal Beam"],["Hidden Power Ground"],["Trick","Thunderbolt"]],"ivs":{"spa":30,"spd":30}}]},"basculin":{"flags":{},"sets":[{"species":"Basculin","gender":"","item":"Choice Band","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Waterfall"],["Aqua Jet"],["Zen Headbutt"],["Superpower"]]},{"species":"Basculin","gender":"","item":"Splash Plate","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Waterfall"],["Aqua Jet"],["Double-Edge"],["Superpower"]]}]},"barbaracle":{"flags":{},"sets":[{"species":"Barbaracle","gender":"","item":"Shuca Berry","ability":"Tough Claws","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Razor Shell"],["Return"],["Earthquake","Substitute"]],"happiness":255}]},"aurorus":{"flags":{},"sets":[{"species":"Aurorus","gender":"","item":"Choice Specs","ability":"Refrigerate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Hyper Voice"],["Freeze-Dry"],["Psychic","Frost Breath"],["Earth Power"]]},{"species":"Aurorus","gender":"","item":"Focus Sash","ability":"Snow Warning","evs":{"hp":0,"atk":32,"def":0,"spa":224,"spd":0,"spe":252},"nature":"Hasty","moves":[["Stealth Rock"],["Blizzard"],["Freeze-Dry"],["Rock Tomb"]]}]},"articuno":{"flags":{},"sets":[{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Ice Beam"],["Roost"],["Hurricane"],["Freeze-Dry"]]},{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hidden Power Fire"],["Roost"],["Hurricane"],["Freeze-Dry"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Articuno","gender":"","item":"Leftovers","ability":"Pressure","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Roost"],["Hurricane"],["Freeze-Dry"]]}]},"zangoose":{"flags":{},"sets":[{"species":"Zangoose","gender":"","item":"Toxic Orb","ability":"Toxic Boost","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Facade"],["Knock Off"],["Quick Attack"],["Close Combat"]]}]},"xatu":{"flags":{},"sets":[{"species":"Xatu","gender":"","item":"Colbur Berry","ability":"Magic Bounce","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Timid","moves":[["Psychic","Psyshock"],["Roost"],["Heat Wave"],["U-turn","Thunder Wave"]]},{"species":"Xatu","gender":"","item":"Leftovers","ability":"Magic Bounce","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Timid","moves":[["Calm Mind"],["Roost"],["Psyshock"],["Heat Wave","Signal Beam"]]},{"species":"Xatu","gender":"","item":"Life Orb","ability":"Magic Bounce","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Psychic","Psyshock"],["Grass Knot"],["Heat Wave"],["Roost"]]}]},"weezing":{"flags":{},"sets":[{"species":"Weezing","gender":"","item":"Black Sludge","ability":"Levitate","evs":{"hp":252,"atk":0,"def":148,"spa":0,"spd":0,"spe":108},"nature":"Bold","moves":[["Will-O-Wisp"],["Sludge Bomb"],["Taunt"],["Pain Split"]]},{"species":"Weezing","gender":"","item":"Black Sludge","ability":"Levitate","evs":{"hp":252,"atk":0,"def":148,"spa":0,"spd":0,"spe":108},"nature":"Bold","moves":[["Will-O-Wisp"],["Sludge Bomb"],["Taunt"],["Toxic Spikes"]]}]},"vivillon":{"flags":{},"sets":[{"species":"Vivillon","gender":"","item":"Leftovers","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Sleep Powder"],["Hurricane"],["Substitute"]]},{"species":"Vivillon","gender":"","item":"Focus Sash","ability":"Compound Eyes","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Sleep Powder"],["Quiver Dance"],["Hurricane"],["Energy Ball"]]}]},"vileplume":{"flags":{},"sets":[{"species":"Vileplume","gender":"","item":"Black Sludge","ability":"Effect Spore","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Aromatherapy","Sleep Powder"]]},{"species":"Vileplume","gender":"","item":"Black Sludge","ability":"Effect Spore","evs":{"hp":112,"atk":0,"def":0,"spa":252,"spd":0,"spe":144},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fire"],["Synthesis"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Vileplume","gender":"","item":"Black Sludge","ability":"Effect Spore","evs":{"hp":112,"atk":0,"def":0,"spa":252,"spd":0,"spe":144},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Ground"],["Synthesis"]],"ivs":{"spa":30,"spd":30}}]},"swellow":{"flags":{},"sets":[{"species":"Swellow","gender":"","item":"Choice Specs","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["U-turn"],["Heat Wave"],["Sleep Talk"]]},{"species":"Swellow","gender":"","item":"Choice Specs","ability":"Scrappy","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Boomburst"],["U-turn"],["Heat Wave"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Swellow","gender":"","item":"Toxic Orb","ability":"Guts","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Facade"],["Brave Bird"],["U-turn"],["Quick Attack"]]}]},"sandslash":{"flags":{},"sets":[{"species":"Sandslash","gender":"","item":"Lum Berry","ability":"Sand Rush","evs":{"hp":172,"atk":252,"def":0,"spa":0,"spd":0,"spe":84},"nature":"Adamant","moves":[["Rapid Spin"],["Knock Off"],["Earthquake"],["Stealth Rock"]]}]},"samurott":{"flags":{},"sets":[{"species":"Samurott","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Hydro Pump"],["Ice Beam"],["Aqua Jet"],["Megahorn","Taunt"]]},{"species":"Samurott","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":120,"atk":252,"def":0,"spa":0,"spd":0,"spe":136},"nature":"Adamant","moves":[["Swords Dance"],["Waterfall"],["Aqua Jet"],["Megahorn"]]},{"species":"Samurott","gender":"","item":"Lum Berry","ability":"Torrent","evs":{"hp":120,"atk":252,"def":0,"spa":0,"spd":0,"spe":136},"nature":"Adamant","moves":[["Swords Dance"],["Waterfall"],["Aqua Jet"],["Megahorn"]]}]},"rotomfan":{"flags":{},"sets":[{"species":"Rotom-Fan","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Air Slash"],["Volt Switch"],["Trick"],["Thunderbolt"]]},{"species":"Rotom-Fan","gender":"","item":"Expert Belt","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Air Slash"],["Hidden Power Water"],["Will-O-Wisp"]],"ivs":{"atk":30,"def":30,"spa":30}},{"species":"Rotom-Fan","gender":"","item":"Expert Belt","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Air Slash"],["Hidden Power Grass"],["Will-O-Wisp"]],"ivs":{"atk":30,"spa":30}}]},"rotom":{"flags":{},"sets":[{"species":"Rotom","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Shadow Ball"],["Thunderbolt"],["Trick"]]},{"species":"Rotom","gender":"","item":"Choice Specs","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Shadow Ball"],["Thunderbolt"],["Trick"]]},{"species":"Rotom","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":108,"spa":0,"spd":0,"spe":148},"nature":"Timid","moves":[["Will-O-Wisp"],["Shadow Ball"],["Volt Switch"],["Pain Split"]]},{"species":"Rotom","gender":"","item":"Spell Tag","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Will-O-Wisp"],["Hex"],["Volt Switch"],["Discharge","Shadow Ball"]]}]},"rhydon":{"flags":{},"sets":[{"species":"Rhydon","gender":"","item":"Eviolite","ability":"Lightning Rod","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Earthquake"],["Stone Edge"],["Rock Polish"]]},{"species":"Rhydon","gender":"","item":"Eviolite","ability":"Lightning Rod","evs":{"hp":252,"atk":16,"def":0,"spa":0,"spd":240,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Rock Blast"],["Megahorn"]]}]},"regirock":{"flags":{},"sets":[{"species":"Regirock","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":252,"atk":44,"def":16,"spa":0,"spd":196,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Stone Edge","Rock Slide"],["Thunder Wave","Toxic"],["Drain Punch","Earthquake"]]}]},"pyroar":{"flags":{},"sets":[{"species":"Pyroar","gender":"","item":"Life Orb","ability":"Unnerve","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Hyper Voice"],["Hidden Power Grass"],["Will-O-Wisp"]],"ivs":{"atk":30,"spa":30}},{"species":"Pyroar","gender":"","item":"Choice Specs","ability":"Unnerve","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Hyper Voice"],["Hidden Power Grass"],["Flamethrower","Overheat"]],"ivs":{"atk":30,"spa":30}}]},"primeape":{"flags":{},"sets":[{"species":"Primeape","gender":"","item":"Choice Band","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["U-turn"],["Stone Edge"],["Earthquake","Gunk Shot"]]},{"species":"Primeape","gender":"","item":"Expert Belt","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Close Combat"],["U-turn"],["Stone Edge"],["Encore"]]}]},"pawniard":{"flags":{},"sets":[{"species":"Pawniard","gender":"","item":"Eviolite","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Knock Off"],["Iron Head"],["Sucker Punch"]]}]},"musharna":{"flags":{},"sets":[{"species":"Musharna","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":240,"atk":0,"def":252,"spa":0,"spd":16,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Psyshock"],["Heal Bell","Signal Beam"],["Moonlight"]]},{"species":"Musharna","gender":"","item":"Leftovers","ability":"Synchronize","evs":{"hp":240,"atk":0,"def":252,"spa":0,"spd":16,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Barrier"],["Moonlight"],["Stored Power"]]}]},"muk":{"flags":{},"sets":[{"species":"Muk","gender":"","item":"Assault Vest","ability":"Poison Touch","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Adamant","moves":[["Gunk Shot"],["Poison Jab"],["Fire Punch"],["Ice Punch"]]},{"species":"Muk","gender":"","item":"Choice Band","ability":"Poison Touch","evs":{"hp":220,"atk":252,"def":0,"spa":0,"spd":0,"spe":36},"nature":"Adamant","moves":[["Gunk Shot"],["Shadow Sneak"],["Focus Punch"],["Ice Punch"]]}]},"mismagius":{"flags":{},"sets":[{"species":"Mismagius","gender":"","item":"Colbur Berry","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Taunt"],["Shadow Ball"],["Dazzling Gleam"],["Destiny Bond"]]},{"species":"Mismagius","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Taunt"],["Shadow Ball"],["Dazzling Gleam"],["Nasty Plot"]]},{"species":"Mismagius","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Taunt"],["Will-O-Wisp"],["Hex"],["Pain Split"]]}]},"miltank":{"flags":{},"sets":[{"species":"Miltank","gender":"","item":"Leftovers","ability":"Scrappy","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Curse"],["Body Slam"],["Milk Drink"],["Heal Bell"]]},{"species":"Miltank","gender":"","item":"Leftovers","ability":"Sap Sipper","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Impish","moves":[["Body Slam"],["Milk Drink"],["Toxic","Thunder Wave"],["Heal Bell"]]},{"species":"Miltank","gender":"","item":"Leftovers","ability":"Sap Sipper","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Impish","moves":[["Body Slam"],["Milk Drink"],["Toxic","Thunder Wave"],["Stealth Rock"]]}]},"mesprit":{"flags":{},"sets":[{"species":"Mesprit","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Psychic","Psyshock"],["Signal Beam","Ice Beam"],["Energy Ball"],["Healing Wish","Calm Mind"]]},{"species":"Mesprit","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Psychic","Psyshock"],["Signal Beam","Ice Beam"],["Hidden Power Ground"],["Healing Wish","Calm Mind"]],"ivs":{"spa":30,"spd":30}},{"species":"Mesprit","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Psychic"],["Ice Beam","Signal Beam"],["U-turn"],["Healing Wish"]]},{"species":"Mesprit","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Stealth Rock"],["Psychic"],["U-turn"],["Thunder Wave","Healing Wish"]]}]},"mantine":{"flags":{},"sets":[{"species":"Mantine","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":16,"spe":0},"nature":"Calm","moves":[["Defog"],["Scald"],["Air Slash"],["Toxic"]]},{"species":"Mantine","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":32,"atk":0,"def":0,"spa":252,"spd":0,"spe":224},"nature":"Modest","moves":[["Air Slash"],["Hydro Pump"],["Ice Beam"],["Rain Dance"]]}]},"malamar":{"flags":{},"sets":[{"species":"Malamar","gender":"","item":"Leftovers","ability":"Contrary","evs":{"hp":252,"atk":4,"def":0,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Superpower"],["Knock Off"]]},{"species":"Malamar","gender":"","item":"Choice Scarf","ability":"Contrary","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Superpower"],["Knock Off"],["Psycho Cut"],["Switcheroo"]]}]},"magmortar":{"flags":{},"sets":[{"species":"Magmortar","gender":"","item":"Assault Vest","ability":"Vital Spirit","evs":{"hp":64,"atk":0,"def":0,"spa":252,"spd":0,"spe":192},"nature":"Modest","moves":[["Fire Blast"],["Thunderbolt"],["Focus Blast"],["Flame Charge","Earthquake"]]},{"species":"Magmortar","gender":"","item":"Assault Vest","ability":"Vital Spirit","evs":{"hp":64,"atk":0,"def":0,"spa":252,"spd":0,"spe":192},"nature":"Modest","moves":[["Fire Blast"],["Thunderbolt"],["Hidden Power Grass"],["Flame Charge","Earthquake"]],"ivs":{"atk":30,"spa":30}},{"species":"Magmortar","gender":"","item":"Life Orb","ability":"Vital Spirit","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Fire Blast"],["Thunderbolt"],["Earthquake"],["Focus Blast"]]},{"species":"Magmortar","gender":"","item":"Life Orb","ability":"Vital Spirit","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Mild","moves":[["Fire Blast"],["Thunderbolt"],["Earthquake"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"ludicolo":{"flags":{},"sets":[{"species":"Ludicolo","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Giga Drain"],["Ice Beam"],["Rain Dance"]]}]},"lilligant":{"flags":{},"sets":[{"species":"Lilligant","gender":"","item":"Life Orb","ability":"Own Tempo","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Sleep Powder"],["Giga Drain"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Lilligant","gender":"","item":"Life Orb","ability":"Own Tempo","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Quiver Dance"],["Sleep Powder"],["Giga Drain"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Lilligant","gender":"","item":"Choice Scarf","ability":"Own Tempo","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Sleep Powder"],["Leaf Storm"],["Hidden Power Rock"],["Healing Wish"]],"ivs":{"def":30,"spd":30,"spe":30}}]},"liepard":{"flags":{},"sets":[{"species":"Liepard","gender":"","item":"Black Glasses","ability":"Prankster","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Dark Pulse"],["Copycat"],["Encore"]]},{"species":"Liepard","gender":"","item":"BlackGlasses","ability":"Prankster","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Knock Off"],["Encore"],["Sucker Punch"],["U-turn"]]}]},"lanturn":{"flags":{},"sets":[{"species":"Lanturn","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":72,"spe":184},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Volt Switch"],["Ice Beam","Signal Beam"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Lanturn","gender":"","item":"Choice Specs","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":72,"spe":184},"nature":"Modest","moves":[["Hydro Pump","Scald"],["Volt Switch"],["Ice Beam","Signal Beam"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}},{"species":"Lanturn","gender":"","item":"Leftovers","ability":"Volt Absorb","evs":{"hp":40,"atk":0,"def":152,"spa":0,"spd":208,"spe":108},"nature":"Calm","moves":[["Scald"],["Volt Switch"],["Heal Bell"],["Toxic","Thunder Wave","Protect"]]},{"species":"Lanturn","gender":"","item":"Assault Vest","ability":"Volt Absorb","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":144,"spe":112},"nature":"Modest","moves":[["Scald"],["Volt Switch"],["Ice Beam"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"klinklang":{"flags":{},"sets":[{"species":"Klinklang","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":92,"atk":252,"def":0,"spa":0,"spd":0,"spe":164},"nature":"Adamant","moves":[["Shift Gear"],["Gear Grind"],["Return"],["Substitute"]],"happiness":255}]},"kangaskhan":{"flags":{},"sets":[{"species":"Kangaskhan","gender":"F","item":"Silk Scarf","ability":"Scrappy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Fake Out"],["Double-Edge"],["Sucker Punch"],["Earthquake"]]}]},"kabutops":{"flags":{},"sets":[{"species":"Kabutops","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rapid Spin"],["Stone Edge"],["Aqua Jet"],["Waterfall"]]},{"species":"Kabutops","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Stone Edge"],["Aqua Jet"],["Superpower","Waterfall"]]}]},"jynx":{"flags":{},"sets":[{"species":"Jynx","gender":"","item":"Choice Scarf","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Ice Beam"],["Psychic"],["Focus Blast"],["Trick"]]},{"species":"Jynx","gender":"","item":"Focus Sash","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Lovely Kiss"],["Ice Beam"],["Psychic"],["Focus Blast","Nasty Plot"]]},{"species":"Jynx","gender":"","item":"Life Orb","ability":"Dry Skin","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Lovely Kiss"],["Nasty Plot"],["Psychic"],["Ice Beam"]]}]},"hariyama":{"flags":{},"sets":[{"species":"Hariyama","gender":"","item":"Assault Vest","ability":"Thick Fat","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Bullet Punch"],["Fake Out","Earthquake"]]},{"species":"Hariyama","gender":"","item":"Choice Band","ability":"Guts","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":8,"spe":0},"nature":"Adamant","moves":[["Close Combat"],["Knock Off"],["Earthquake"],["Bullet Punch"]]}]},"golurk":{"flags":{},"sets":[{"species":"Golurk","gender":"","item":"Choice Band","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shadow Punch"],["Earthquake"],["Ice Punch"],["Zen Headbutt","Thunder Punch"]]},{"species":"Golurk","gender":"","item":"Colbur Berry","ability":"No Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Stealth Rock"],["Earthquake"],["Shadow Punch"],["Dynamic Punch"]]},{"species":"Golurk","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Rock Polish"],["Earthquake"],["Shadow Punch"],["Ice Punch"]]}]},"garbodor":{"flags":{},"sets":[{"species":"Garbodor","gender":"","item":"Rocky Helmet","ability":"Aftermath","evs":{"hp":252,"atk":0,"def":160,"spa":0,"spd":0,"spe":96},"nature":"Impish","moves":[["Spikes"],["Gunk Shot"],["Drain Punch"],["Toxic Spikes"]]},{"species":"Garbodor","gender":"","item":"Rocky Helmet","ability":"Aftermath","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Spikes"],["Gunk Shot"],["Drain Punch"],["Seed Bomb"]]}]},"ferroseed":{"flags":{},"sets":[{"species":"Ferroseed","gender":"","item":"Eviolite","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Relaxed","moves":[["Spikes"],["Gyro Ball","Knock Off"],["Leech Seed"],["Protect"]]},{"species":"Ferroseed","gender":"","item":"Eviolite","ability":"Iron Barbs","evs":{"hp":252,"atk":0,"def":112,"spa":0,"spd":144,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Seed Bomb"],["Leech Seed"],["Thunder Wave"]]}]},"exeggutor":{"flags":{},"sets":[{"species":"Exeggutor","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Giga Drain"],["Psychic"],["Hidden Power Fire"],["Sleep Powder"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Exeggutor","gender":"","item":"Choice Specs","ability":"Chlorophyll","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Psychic"],["Leaf Storm"],["Giga Drain"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Exeggutor","gender":"","item":"Lum Berry","ability":"Harvest","evs":{"hp":248,"atk":0,"def":0,"spa":176,"spd":0,"spe":84},"nature":"Modest","moves":[["Sleep Powder"],["Giga Drain"],["Psychic"],["Rest"]]}]},"electivire":{"flags":{},"sets":[{"species":"Electivire","gender":"","item":"Life Orb","ability":"Motor Drive","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Wild Charge"],["Earthquake"],["Ice Punch"],["Hidden Power Grass"]],"ivs":{"atk":30,"spa":30}}]},"cryogonal":{"flags":{},"sets":[{"species":"Cryogonal","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Rapid Spin"],["Freeze-Dry"],["Frost Breath"],["Recover"]]},{"species":"Cryogonal","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Rapid Spin"],["Freeze-Dry"],["Hidden Power Ground"],["Recover"]],"ivs":{"spa":30,"spd":30}}]},"crustle":{"flags":{},"sets":[{"species":"Crustle","gender":"","item":"Custap Berry","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Spikes"],["Rock Blast"],["Knock Off"]]}]},"cacturne":{"flags":{},"sets":[{"species":"Cacturne","gender":"","item":"Life Orb","ability":"Water Absorb","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Rash","moves":[["Dark Pulse"],["Giga Drain"],["Sucker Punch"],["Destiny Bond"]]}]},"audino":{"flags":{"megaOnly":1},"sets":[{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":208,"spa":48,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Dazzling Gleam"],["Wish"],["Protect"]]},{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":208,"spa":48,"spd":0,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Dazzling Gleam"],["Rest"],["Sleep Talk"]]},{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Calm Mind","Healing Wish"],["Dazzling Gleam"],["Fire Blast"],["Surf","Thunder Wave","Psychic"]]},{"species":"Audino","gender":"","item":"Audinite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":128,"spa":0,"spd":128,"spe":0},"nature":"Calm","moves":[["Wish"],["Protect"],["Heal Bell"],["Dazzling Gleam"]]}]},"archeops":{"flags":{},"sets":[{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Taunt"],["Roost"],["Acrobatics"],["Earth Power"]]},{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Taunt"],["Roost"],["Acrobatics"],["Defog"]]},{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Defog"],["Roost"],["Acrobatics"],["Earth Power"]]},{"species":"Archeops","gender":"","item":"Focus Sash","ability":"Defeatist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Stealth Rock"],["Taunt"],["Endeavor"],["Head Smash"]]},{"species":"Archeops","gender":"","ability":"Defeatist","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Acrobatics"],["Stone Edge"],["Earth Power"],["Roost"]]}]},"claydol":{"flags":{},"sets":[{"species":"Claydol","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Rapid Spin"],["Earth Power"],["Shadow Ball"],["Psychic","Psyshock"]]}]},"tauros":{"flags":{},"sets":[{"species":"Tauros","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Rock Climb"],["Earthquake"],["Fire Blast"],["Iron Tail","Zen Headbutt"]]}]},"mawile":{"flags":{},"sets":[{"species":"Mawile","gender":"","item":"Life Orb","ability":"Sheer Force","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naughty","moves":[["Play Rough"],["Iron Head"],["Fire Blast"],["Sucker Punch"]]}]},"scyther":{"flags":{},"sets":[{"species":"Scyther","gender":"","item":"Eviolite","ability":"Technician","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Aerial Ace"],["U-turn"],["Roost"]]},{"species":"Scyther","gender":"","item":"Choice Band","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Aerial Ace"],["Knock Off","Pursuit"],["Quick Attack"]]},{"species":"Scyther","gender":"","item":"Choice Scarf","ability":"Technician","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["U-turn"],["Aerial Ace"],["Knock Off"],["Bug Bite"]]}]},"torterra":{"flags":{},"sets":[{"species":"Torterra","gender":"","item":"Leftovers","ability":"Overgrow","evs":{"hp":252,"atk":128,"def":128,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Wood Hammer"],["Earthquake"],["Stealth Rock"],["Synthesis"]]},{"species":"Torterra","gender":"","item":"Soft Sand","ability":"Overgrow","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Rock Polish"],["Wood Hammer"],["Earthquake"],["Stone Edge"]]}]},"haunter":{"flags":{},"sets":[{"species":"Haunter","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Bomb"],["Destiny Bond"],["Trick"]]},{"species":"Haunter","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Bomb"],["Taunt"],["Destiny Bond","Will-O-Wisp"]]},{"species":"Haunter","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Shadow Ball"],["Sludge Bomb"],["Substitute"],["Pain Split"]]}]},"prinplup":{"flags":{},"sets":[{"species":"Prinplup","gender":"","item":"Eviolite","ability":"Torrent","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Defog"],["Scald"],["Stealth Rock"],["Toxic"]]}]},"tangela":{"flags":{},"sets":[{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":236,"atk":0,"def":48,"spa":224,"spd":0,"spe":0},"nature":"Modest","moves":[["Leaf Storm"],["Giga Drain","Ancient Power"],["Sleep Powder"],["Hidden Power Fire"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Giga Drain"],["Hidden Power Fire"],["Sleep Powder"],["Leech Seed"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"pelipper":{"flags":{},"sets":[{"species":"Pelipper","gender":"","item":"Leftovers","ability":"Keen Eye","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"nature":"Bold","moves":[["Defog"],["Scald"],["Roost"],["U-turn","Hurricane"]]}]},"piloswine":{"flags":{},"sets":[{"species":"Piloswine","gender":"","item":"Eviolite","ability":"Thick Fat","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Earthquake"],["Stealth Rock"],["Icicle Crash"],["Ice Shard"]]}]},"poliwrath":{"flags":{},"sets":[{"species":"Poliwrath","gender":"","item":"Choice Specs","ability":"Water Absorb","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Modest","moves":[["Hydro Pump"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]},{"species":"Poliwrath","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":96,"atk":0,"def":0,"spa":252,"spd":0,"spe":160},"nature":"Modest","moves":[["Scald"],["Focus Blast"],["Ice Beam"],["Vacuum Wave"]]}]},"shiftry":{"flags":{},"sets":[{"species":"Shiftry","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Knock Off"],["Leaf Storm"],["Sucker Punch"],["Explosion"]]},{"species":"Shiftry","gender":"","item":"Life Orb","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Lonely","moves":[["Knock Off"],["Leaf Storm"],["Sucker Punch"],["Defog"]]},{"species":"Shiftry","gender":"","item":"Black Glasses","ability":"Chlorophyll","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Knock Off"],["Seed Bomb"],["Sucker Punch"]]}]},"charizard":{"flags":{},"sets":[{"species":"Charizard","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Air Slash"],["Focus Blast"],["Roost"]]},{"species":"Charizard","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Fire Blast"],["Air Slash"],["Hidden Power Grass"],["Roost"]],"ivs":{"atk":30,"spa":30}},{"species":"Charizard","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Fire Blast"],["Air Slash"],["Earthquake"],["Roost"]]},{"species":"Charizard","gender":"","ability":"Blaze","evs":{"hp":248,"atk":8,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Acrobatics"],["Roost"],["Will-O-Wisp"]]}]},"floatzel":{"flags":{},"sets":[{"species":"Floatzel","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Focus Blast"],["Taunt"]]}]},"abomasnow":{"flags":{},"sets":[{"species":"Abomasnow","gender":"","item":"Life Orb","ability":"Snow Warning","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Blizzard"],["Giga Drain"],["Earthquake"],["Ice Shard"]]},{"species":"Abomasnow","gender":"","item":"Life Orb","ability":"Snow Warning","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Ice Shard"],["Seed Bomb"],["Earthquake"]]}]},"hitmonchan":{"flags":{},"sets":[{"species":"Hitmonchan","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Drain Punch","Close Combat"],["Mach Punch"],["Ice Punch","Stone Edge"],["Rapid Spin"]]}]},"skuntank":{"flags":{},"sets":[{"species":"Skuntank","gender":"","item":"Lum Berry","ability":"Aftermath","evs":{"hp":0,"atk":232,"def":0,"spa":0,"spd":132,"spe":144},"nature":"Adamant","moves":[["Sucker Punch"],["Pursuit"],["Poison Jab"],["Taunt"]]},{"species":"Skuntank","gender":"","item":"Expert Belt","ability":"Aftermath","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Dark Pulse"],["Fire Blast"],["Hidden Power Grass"],["Defog"]],"ivs":{"atk":30,"spa":30}}]},"omastar":{"flags":{},"sets":[{"species":"Omastar","gender":"","item":"White Herb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Shell Smash"],["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Omastar","gender":"","item":"Leftovers","ability":"Shell Armor","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Spikes"],["Stealth Rock"],["Scald"],["Icy Wind"]]},{"species":"Omastar","gender":"","item":"Leftovers","ability":"Shell Armor","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Spikes"],["Stealth Rock"],["Scald"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Omastar","gender":"","item":"Focus Sash","ability":"Weak Armor","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Stealth Rock"],["Spikes"],["Scald"],["Ice Beam"]]}]},"pinsir":{"flags":{},"sets":[{"species":"Pinsir","gender":"","item":"Life Orb","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["X-Scissor"],["Earthquake"],["Stone Edge"]]},{"species":"Pinsir","gender":"","item":"Choice Band","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["X-Scissor"],["Earthquake"],["Stone Edge"],["Close Combat"]]},{"species":"Pinsir","gender":"","item":"Focus Sash","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Stealth Rock"],["X-Scissor"],["Rock Tomb"],["Earthquake"]]}]},"grumpig":{"flags":{},"sets":[{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Calm Mind"],["Psyshock"],["Focus Blast"],["Signal Beam"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":0,"spa":160,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic","Psyshock"],["Focus Blast"],["Taunt"],["Thunder Wave","Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Psychic"],["Heal Bell"],["Thunder Wave"],["Whirlwind"]]}]},"sliggoo":{"flags":{},"sets":[{"species":"Sliggoo","gender":"","item":"Eviolite","ability":"Sap Sipper","evs":{"hp":252,"atk":0,"def":168,"spa":0,"spd":88,"spe":0},"nature":"Careful","moves":[["Curse"],["Outrage"],["Rest"],["Sleep Talk"]]},{"species":"Sliggoo","gender":"","item":"Eviolite","ability":"Sap Sipper","evs":{"hp":92,"atk":0,"def":0,"spa":252,"spd":0,"spe":164},"nature":"Modest","moves":[["Draco Meteor"],["Sludge Bomb"],["Muddy Water"],["Thunderbolt"]]}]},"camerupt":{"flags":{},"sets":[{"species":"Camerupt","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":252,"spe":0},"nature":"Sassy","moves":[["Stealth Rock"],["Lava Plume"],["Earthquake"],["Toxic"]]},{"species":"Camerupt","gender":"","item":"Choice Specs","ability":"Solid Rock","evs":{"hp":140,"atk":0,"def":0,"spa":252,"spd":0,"spe":116},"nature":"Modest","moves":[["Fire Blast"],["Earth Power"],["Lava Plume"],["Hidden Power Electric"]],"ivs":{"spa":30}}]},"ninetales":{"flags":{},"sets":[{"species":"Ninetales","gender":"","item":"Life Orb","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Fire Blast"],["Psyshock"],["Energy Ball"]]}]},"manectric":{"flags":{},"sets":[{"species":"Manectric","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Hidden Power Grass"],["Overheat"]],"ivs":{"atk":30,"spa":30}}]},"roselia":{"flags":{},"sets":[{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Spikes"],["Giga Drain"],["Synthesis"],["Sludge Bomb"]]},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":80,"atk":0,"def":0,"spa":252,"spd":0,"spe":176},"nature":"Modest","moves":[["Spikes"],["Leaf Storm"],["Sludge Bomb"],["Sleep Powder"]]}]},"misdreavus":{"flags":{},"sets":[{"species":"Misdreavus","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":252,"atk":0,"def":240,"spa":0,"spd":0,"spe":16},"nature":"Bold","moves":[["Hex"],["Will-O-Wisp"],["Taunt"],["Pain Split"]]}]},"clefairy":{"flags":{},"sets":[{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Moonblast"],["Soft-Boiled"],["Thunder Wave"],["Healing Wish"]]},{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Calm","moves":[["Moonblast"],["Soft-Boiled"],["Thunder Wave"],["Stealth Rock"]]}]}},"PU":{"prinplup":{"flags":{},"sets":[{"species":"Prinplup","gender":"","item":"Eviolite","ability":"Torrent","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Scald"],["Toxic"],["Defog"]]}]},"ampharos":{"flags":{},"sets":[{"species":"Ampharos","gender":"","item":"Life Orb","ability":"Static","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Agility"],["Thunderbolt"],["Focus Blast"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"cryogonal":{"flags":{},"sets":[{"species":"Cryogonal","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Freeze-Dry"],["Hidden Power Fighting"],["Recover"],["Rapid Spin"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Cryogonal","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":156,"spa":0,"spd":104,"spe":0},"nature":"Calm","moves":[["Freeze-Dry"],["Rapid Spin"],["Recover"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"glalie":{"flags":{},"sets":[{"species":"Glalie","gender":"","item":"Focus Sash","ability":"Inner Focus","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Spikes"],["Taunt"],["Ice Beam","Freeze-Dry"],["Explosion"]]}]},"camerupt":{"flags":{},"sets":[{"species":"Camerupt","gender":"","item":"Leftovers","ability":"Solid Rock","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":252,"spe":0},"nature":"Timid","moves":[["Stealth Rock"],["Lava Plume","Fire Blast"],["Earth Power"],["Roar","Toxic"]]}]},"altaria":{"flags":{},"sets":[{"species":"Altaria","gender":"","item":"Leftovers","ability":"Natural Cure","evs":{"hp":116,"atk":252,"def":0,"spa":0,"spd":0,"spe":140},"nature":"Jolly","moves":[["Dragon Dance"],["Dragon Claw"],["Substitute","Earthquake"],["Roost"]]},{"species":"Altaria","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":116,"atk":0,"def":0,"spa":252,"spd":0,"spe":140},"nature":"Modest","moves":[["Draco Meteor"],["Roost"],["Fire Blast"],["Toxic"]]},{"species":"Altaria","gender":"","item":"Life Orb","ability":"Natural Cure","evs":{"hp":116,"atk":0,"def":0,"spa":252,"spd":0,"spe":140},"nature":"Modest","moves":[["Draco Meteor"],["Roost"],["Fire Blast"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"audino":{"flags":{},"sets":[{"species":"Audino","gender":"","item":"Leftovers","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Knock Off"],["Wish"],["Protect"],["Encore","Toxic","Double-Edge","Thunder Wave"]]}]},"bouffalant":{"flags":{},"sets":[{"species":"Bouffalant","gender":"","item":"Leftovers","ability":"Sap Sipper","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Substitute"],["Swords Dance"],["Return"],["Earthquake"]],"happiness":255},{"species":"Bouffalant","gender":"","item":"Assault Vest","ability":"Sap Sipper","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Return"],["Earthquake"],["Megahorn"],["Pursuit","Head Charge"]],"happiness":255},{"species":"Bouffalant","gender":"","item":"Choice Band","ability":"Sap Sipper","evs":{"hp":252,"atk":252,"def":0,"spa":0,"spd":4,"spe":0},"nature":"Adamant","moves":[["Head Charge"],["Earthquake"],["Megahorn"],["Pursuit"]]}]},"gorebyss":{"flags":{},"sets":[{"species":"Gorebyss","gender":"","item":"White Herb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Shell Smash"],["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"]],"ivs":{"spa":30}}]},"pawniard":{"flags":{},"sets":[{"species":"Pawniard","gender":"","item":"Eviolite","ability":"Defiant","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Knock Off"],["Iron Head"],["Sucker Punch"],["Swords Dance"]]}]},"gothitelle":{"flags":{},"sets":[{"species":"Gothitelle","gender":"","item":"Leftovers","ability":"Competitive","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Calm Mind"],["Mean Look"],["Rest"],["Psychic"]]}]},"roselia":{"flags":{},"sets":[{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":128,"spa":0,"spd":128,"spe":0},"nature":"Calm","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Spikes"]]},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":252,"atk":0,"def":128,"spa":0,"spd":128,"spe":0},"nature":"Calm","moves":[["Giga Drain"],["Sludge Bomb"],["Synthesis"],["Toxic Spikes"]]},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fighting"],["Sleep Powder"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fighting"],["Spikes"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Roselia","gender":"","item":"Eviolite","ability":"Natural Cure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Giga Drain"],["Sludge Bomb"],["Hidden Power Fighting"],["Toxic Spikes"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"floatzel":{"flags":{},"sets":[{"species":"Floatzel","gender":"","item":"Choice Specs","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Surf","Switcheroo"]],"ivs":{"spa":30}},{"species":"Floatzel","gender":"","item":"Choice Band","ability":"Water Veil","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Waterfall"],["Ice Punch"],["Return"],["Aqua Jet"]],"happiness":255},{"species":"Floatzel","gender":"","item":"Life Orb","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Hydro Pump"],["Ice Beam"],["Ice Punch"],["Hidden Power Electric"]],"ivs":{"spa":30}},{"species":"Floatzel","gender":"","item":"Choice Scarf","ability":"Water Veil","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Modest","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Surf","Switcheroo"]],"ivs":{"spa":30}}]},"stoutland":{"flags":{},"sets":[{"species":"Stoutland","gender":"","item":"Choice Band","ability":"Scrappy","evs":{"hp":4,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Return"],["Superpower"],["Facade"],["Pursuit","Crunch"]],"happiness":255}]},"dodrio":{"flags":{},"sets":[{"species":"Dodrio","gender":"","item":"Choice Band","ability":"Early Bird","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Knock Off"],["Quick Attack","Pursuit"]],"happiness":255},{"species":"Dodrio","gender":"","item":"Choice Scarf","ability":"Early Bird","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Return"],["Knock Off"],["Pursuit"]],"happiness":255}]},"zebstrika":{"flags":{},"sets":[{"species":"Zebstrika","gender":"","item":"Life Orb","ability":"Sap Sipper","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Zebstrika","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Volt Switch"],["Thunderbolt"],["Overheat"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"jumpluff":{"flags":{},"sets":[{"species":"Jumpluff","gender":"","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Acrobatics"],["Sleep Powder"],["U-turn","Seed Bomb"],["Memento"]]},{"species":"Jumpluff","gender":"","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Acrobatics"],["Sleep Powder"],["Seed Bomb"],["Swords Dance"]]}]},"grumpig":{"flags":{},"sets":[{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Colbur Berry","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Taunt"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Thunder Wave"],["Shadow Ball"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Toxic"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Shadow Ball"],["Thunder Wave"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":160,"atk":0,"def":0,"spa":252,"spd":0,"spe":96},"nature":"Modest","moves":[["Psychic"],["Focus Blast"],["Calm Mind"],["Shadow Ball","Taunt"]]},{"species":"Grumpig","gender":"","item":"Leftovers","ability":"Thick Fat","evs":{"hp":252,"atk":0,"def":0,"spa":4,"spd":252,"spe":0},"nature":"Calm","moves":[["Psychic"],["Thunder Wave","Toxic"],["Focus Blast","Whirlwind"],["Protect"]]}]},"stunfisk":{"flags":{},"sets":[{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Protect"]]},{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Hidden Power Bug"]],"ivs":{"atk":30,"def":30,"spd":30}},{"species":"Stunfisk","gender":"","item":"Passho Berry","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Toxic"]]},{"species":"Stunfisk","gender":"","item":"Passho Berry","ability":"Static","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Hidden Power Bug"]],"ivs":{"atk":30,"def":30,"spd":30}},{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Protect"]]},{"species":"Stunfisk","gender":"","item":"Leftovers","ability":"Static","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Bold","moves":[["Stealth Rock"],["Discharge"],["Earth Power"],["Hidden Power Bug"]],"ivs":{"atk":30,"def":30,"spd":30}}]},"rapidash":{"flags":{},"sets":[{"species":"Rapidash","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Wild Charge"],["Will-O-Wisp"],["Morning Sun"]]},{"species":"Rapidash","gender":"","item":"Charcoal","ability":"Flash Fire","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Flare Blitz"],["Wild Charge"],["Will-O-Wisp"],["Morning Sun"]]}]},"tangela":{"flags":{},"sets":[{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Bold","moves":[["Giga Drain"],["Synthesis"],["Hidden Power Fire"],["Sleep Powder","Knock Off"]],"ivs":{"atk":30,"spa":30,"spe":30}},{"species":"Tangela","gender":"","item":"Eviolite","ability":"Regenerator","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Leaf Storm"],["Giga Drain"],["Hidden Power Fire"],["Sleep Powder"]],"ivs":{"atk":30,"spa":30,"spe":30}}]},"simipour":{"flags":{},"sets":[{"species":"Simipour","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Hydro Pump"],["Ice Beam"],["Grass Knot"],["Knock Off","Low Kick","Nasty Plot"]]},{"species":"Simipour","gender":"","item":"Life Orb","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Hydro Pump"],["Ice Beam"],["Hidden Power Electric"],["Knock Off","Low Kick","Nasty Plot"]],"ivs":{"spa":30}},{"species":"Simipour","gender":"","item":"Choice Scarf","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Hasty","moves":[["Hydro Pump"],["Ice Beam"],["Grass Knot"],["Superpower","Knock Off"]]},{"species":"Simipour","gender":"","item":"Salac Berry","ability":"Torrent","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Hydro Pump"],["Ice Beam"],["Substitute"],["Nasty Plot"]]}]},"kadabra":{"flags":{},"sets":[{"species":"Kadabra","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball","Signal Beam"],["Thunder Wave"],["Encore"]]},{"species":"Kadabra","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Hidden Power Fighting"],["Thunder Wave"],["Encore"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Kadabra","gender":"","item":"Focus Sash","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Shadow Ball"],["Thunder Wave"],["Encore"]]},{"species":"Kadabra","gender":"","item":"Life Orb","ability":"Magic Guard","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Psychic"],["Hidden Power Fighting"],["Shadow Ball"],["Substitute","Encore"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"raichu":{"flags":{},"sets":[{"species":"Raichu","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"atk":30,"def":30},"nature":"Timid","moves":[["Nasty Plot"],["Thunderbolt"],["Hidden Power Ice"],["Focus Blast"]]},{"species":"Raichu","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":30,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Focus Blast"],["Signal Beam"]]},{"species":"Raichu","gender":"","item":"Life Orb","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"atk":30,"def":30},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Focus Blast"],["Hidden Power Ice"]]},{"species":"Raichu","gender":"","item":"Life Orb","ability":"Static","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Signal Beam","Focus Blast"],["Surf"]]},{"species":"Raichu","gender":"","item":"Choice Scarf","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":30,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Signal Beam"],["Focus Blast"]]},{"species":"Raichu","gender":"","item":"Choice Scarf","ability":"Lightning Rod","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"atk":30,"def":30},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Hidden Power Ice"],["Focus Blast"]]}]},"regice":{"flags":{},"sets":[{"species":"Regice","gender":"","item":"Life Orb","ability":"Clear Body","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Ice Beam"],["Focus Blast"],["Thunderbolt"],["Rock Polish"]]},{"species":"Regice","gender":"","item":"Leftovers","ability":"Clear Body","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Thunder Wave"],["Ice Beam"],["Thunderbolt"],["Focus Blast"]]}]},"relicanth":{"flags":{},"sets":[{"species":"Relicanth","gender":"","item":"Stone Plate","ability":"Rock Head","evs":{"hp":104,"atk":252,"def":4,"spa":0,"spd":0,"spe":148},"nature":"Adamant","moves":[["Rock Polish"],["Head Smash"],["Waterfall"],["Earthquake"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Head Smash"],["Stealth Rock"],["Earthquake","Waterfall"],["Toxic","Yawn"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Head Smash"],["Stealth Rock"],["Earthquake","Waterfall"],["Protect"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Head Smash"],["Stealth Rock"],["Protect"],["Toxic","Yawn"]]},{"species":"Relicanth","gender":"","item":"Stone Plate","ability":"Rock Head","evs":{"hp":168,"atk":252,"def":0,"spa":0,"spd":0,"spe":88},"nature":"Adamant","moves":[["Head Smash"],["Stealth Rock"],["Waterfall"],["Toxic","Earthquake"]]},{"species":"Relicanth","gender":"","item":"Leftovers","ability":"Rock Head","evs":{"hp":168,"atk":252,"def":0,"spa":0,"spd":0,"spe":88},"nature":"Adamant","moves":[["Head Smash"],["Stealth Rock"],["Waterfall"],["Toxic","Earthquake"]]}]},"rotomfrost":{"flags":{},"sets":[{"species":"Rotom-Frost","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Blizzard"],["Trick","Will-O-Wisp"]]},{"species":"Rotom-Frost","gender":"","item":"Choice Scarf","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Thunderbolt"],["Volt Switch"],["Blizzard"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}},{"species":"Rotom-Frost","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Thunderbolt"],["Blizzard"],["Will-O-Wisp","Volt Switch"]]},{"species":"Rotom-Frost","gender":"","item":"Life Orb","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Timid","moves":[["Substitute"],["Thunderbolt"],["Blizzard"],["Pain Split","Will-O-Wisp"]]}]},"simisage":{"flags":{},"sets":[{"species":"Simisage","gender":"","item":"Life Orb","ability":"Overgrow","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Leaf Storm"],["Superpower"],["Gunk Shot"],["Knock Off"]]}]},"chatot":{"flags":{},"sets":[{"species":"Chatot","gender":"","item":"Choice Scarf","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"def":30,"spa":30,"spd":30,"spe":30},"nature":"Modest","moves":[["Boomburst"],["Heat Wave"],["Hidden Power Fighting"],["U-turn"]]},{"species":"Chatot","gender":"","item":"Choice Scarf","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"def":30,"spa":30,"spd":30,"spe":30},"nature":"Timid","moves":[["Boomburst"],["Heat Wave"],["Hidden Power Fighting"],["U-turn"]]},{"species":"Chatot","gender":"","item":"Choice Specs","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"def":30,"spa":30,"spd":30,"spe":30},"nature":"Modest","moves":[["Boomburst"],["Heat Wave"],["Hidden Power Fighting"],["U-turn"]]}]},"mrmime":{"flags":{},"sets":[{"species":"Mr. Mime","gender":"","item":"Choice Scarf","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam"],["Focus Blast"],["Healing Wish"]]},{"species":"Mr. Mime","gender":"","item":"Choice Specs","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam"],["Focus Blast"],["Shadow Ball"]]},{"species":"Mr. Mime","gender":"","item":"Life Orb","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Psychic"],["Dazzling Gleam"],["Focus Blast"],["Shadow Ball","Healing Wish"]]}]},"mightyena":{"flags":{},"sets":[{"species":"Mightyena","gender":"","item":"Life Orb","ability":"Moxie","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Adamant","moves":[["Crunch"],["Sucker Punch"],["Play Rough"],["Iron Tail"]]}]},"fraxure":{"flags":{},"sets":[{"species":"Fraxure","gender":"","item":"Eviolite","ability":"Mold Breaker","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Dragon Dance"],["Outrage"],["Low Kick"],["Dual Chop","Taunt","Poison Jab"]]}]},"misdreavus":{"flags":{},"sets":[{"species":"Misdreavus","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Nasty Plot"],["Taunt","Will-O-Wisp"],["Shadow Ball"],["Thunderbolt"]]},{"species":"Misdreavus","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":124,"spa":0,"spd":0,"spe":136},"nature":"Timid","moves":[["Will-O-Wisp"],["Taunt"],["Foul Play"],["Pain Split","Thunder Wave"]]}]},"probopass":{"flags":{},"sets":[{"species":"Probopass","gender":"","item":"Leftovers","ability":"Magnet Pull","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Stealth Rock"],["Flash Cannon"],["Volt Switch"],["Earth Power","Thunder Wave"]]},{"species":"Probopass","gender":"","item":"Passho Berry","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":0,"spa":252,"spd":4,"spe":0},"nature":"Modest","moves":[["Stealth Rock"],["Flash Cannon"],["Volt Switch"],["Earth Power","Thunder Wave"]]},{"species":"Probopass","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"nature":"Modest","moves":[["Stealth Rock"],["Flash Cannon"],["Volt Switch"],["Earth Power","Toxic","Thunder Wave"]]}]},"sawsbuck":{"flags":{},"sets":[{"species":"Sawsbuck","gender":"","item":"Choice Scarf","ability":"Sap Sipper","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Double-Edge"],["Horn Leech"],["Jump Kick"],["Megahorn"]]},{"species":"Sawsbuck","gender":"","item":"Choice Scarf","ability":"Sap Sipper","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Double-Edge"],["Horn Leech"],["Jump Kick"],["Toxic"]]},{"species":"Sawsbuck","gender":"","item":"Salac Berry","ability":"Sap Sipper","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Return"],["Horn Leech"],["Substitute"],["Swords Dance"]],"happiness":255}]},"arbok":{"flags":{},"sets":[{"species":"Arbok","gender":"","item":"Black Sludge","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Coil"],["Gunk Shot"],["Sucker Punch"],["Earthquake"]]},{"species":"Arbok","gender":"","item":"Shuca Berry","ability":"Intimidate","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Coil"],["Gunk Shot"],["Sucker Punch"],["Earthquake"]]},{"species":"Arbok","gender":"","item":"Black Sludge","ability":"Shed Skin","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":236,"spe":20},"nature":"Careful","moves":[["Coil"],["Gunk Shot"],["Rest"],["Earthquake"]]}]},"duosion":{"flags":{},"sets":[{"species":"Duosion","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":252,"spa":0,"spd":4,"spe":0},"nature":"Impish","moves":[["Calm Mind"],["Recover"],["Psyshock","Psychic"],["Acid Armor","Signal Beam"]]}]},"ninetales":{"flags":{},"sets":[{"species":"Ninetales","gender":"","item":"Leftovers","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Nasty Plot"],["Fire Blast"],["Energy Ball"]]},{"species":"Ninetales","gender":"","item":"Passho Berry","ability":"Flash Fire","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Nasty Plot"],["Fire Blast"],["Energy Ball"],["Hidden Power Ground"]],"ivs":{"spa":30,"spd":30}}]},"articuno":{"flags":{},"sets":[{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Agility"],["Ice Beam","Freeze-Dry"],["Hurricane"],["Roost"]]},{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":36,"atk":0,"def":0,"spa":252,"spd":0,"spe":220},"nature":"Modest","moves":[["Agility"],["Ice Beam","Freeze-Dry"],["Hurricane"],["Hidden Power Fighting"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}},{"species":"Articuno","gender":"","item":"Life Orb","ability":"Pressure","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"nature":"Timid","moves":[["Substitute"],["Ice Beam","Freeze-Dry"],["Hurricane"],["Roost"]]}]},"clefairy":{"flags":{},"sets":[{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Soft-Boiled"],["Moonblast"],["Thunder Wave","Knock Off","Healing Wish"],["Stealth Rock"]]},{"species":"Clefairy","gender":"","item":"Eviolite","ability":"Magic Guard","evs":{"hp":252,"atk":0,"def":252,"spa":4,"spd":0,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Bold","moves":[["Calm Mind"],["Soft-Boiled"],["Moonblast"],["Thunder Wave","Knock Off","Encore"]]}]},"golduck":{"flags":{},"sets":[{"species":"Golduck","gender":"","item":"Life Orb","ability":"Swift Swim","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Modest","moves":[["Hydro Pump"],["Rain Dance"],["Ice Beam"],["Psyshock","Focus Blast"]]}]},"golem":{"flags":{},"sets":[{"species":"Golem","gender":"","item":"Custap Berry","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Explosion"],["Stealth Rock"],["Stone Edge"]]},{"species":"Golem","gender":"","item":"Weakness Policy","ability":"Sturdy","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Adamant","moves":[["Earthquake"],["Sucker Punch"],["Stealth Rock"],["Stone Edge"]]},{"species":"Golem","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":56,"def":0,"spa":0,"spd":204,"spe":0},"nature":"Adamant","moves":[["Stealth Rock"],["Stone Edge"],["Earthquake"],["Protect"]]}]},"gourgeistsuper":{"flags":{},"sets":[{"species":"Gourgeist-Super","gender":"","item":"Leftovers","ability":"Frisk","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Foul Play"],["Will-O-Wisp"],["Synthesis"],["Seed Bomb"]]}]},"lickilicky":{"flags":{},"sets":[{"species":"Lickilicky","gender":"","item":"Leftovers","ability":"Oblivious","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Wish"],["Protect"],["Body Slam","Knock Off"],["Dragon Tail","Heal Bell"]]}]},"monferno":{"flags":{},"sets":[{"species":"Monferno","gender":"","item":"Eviolite","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Mach Punch"],["Flare Blitz"],["Close Combat"]]},{"species":"Monferno","gender":"","item":"Life Orb","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Swords Dance"],["Mach Punch"],["Flare Blitz"],["Close Combat"]]},{"species":"Monferno","gender":"","item":"Eviolite","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["U-turn","Thunder Punch"],["Mach Punch"],["Flare Blitz"],["Close Combat"]]},{"species":"Monferno","gender":"","item":"Eviolite","ability":"Iron Fist","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["U-turn","Thunder Punch"],["Mach Punch"],["Flare Blitz"],["Stealth Rock"]]}]},"politoed":{"flags":{},"sets":[{"species":"Politoed","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":248,"atk":0,"def":0,"spa":252,"spd":8,"spe":0},"ivs":{"spa":30},"nature":"Modest","moves":[["Scald"],["Ice Beam"],["Hidden Power Electric"],["Encore","Toxic"]]},{"species":"Politoed","gender":"","item":"Leftovers","ability":"Water Absorb","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":252,"spe":0},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Calm","moves":[["Perish Song"],["Scald"],["Toxic"],["Protect"]]}]},"seaking":{"flags":{},"sets":[{"species":"Seaking","gender":"","item":"Leftovers","ability":"Lightning Rod","evs":{"hp":104,"atk":252,"def":0,"spa":0,"spd":0,"spe":152},"nature":"Adamant","moves":[["Waterfall"],["Knock Off"],["Megahorn"],["Haze","Protect"]]}]},"simisear":{"flags":{},"sets":[{"species":"Simisear","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Knock Off"],["Rock Slide"],["Superpower","Low Kick"],["Overheat","Fire Blast"]]},{"species":"Simisear","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Naive","moves":[["Fire Blast"],["Grass Knot"],["Low Kick"],["Knock Off"]]},{"species":"Simisear","gender":"","item":"Life Orb","ability":"Blaze","evs":{"hp":0,"atk":0,"def":4,"spa":252,"spd":0,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Nasty Plot"],["Focus Blast"],["Grass Knot"],["Fire Blast"]]},{"species":"Simisear","gender":"","item":"Salac Berry","ability":"Blaze","evs":{"hp":4,"atk":0,"def":0,"spa":252,"spd":0,"spe":252},"ivs":{"hp":31,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Substitute"],["Nasty Plot"],["Focus Blast"],["Fire Blast"]]}]},"swanna":{"flags":{},"sets":[{"species":"Swanna","gender":"","item":"Life Orb","ability":"Keen Eye","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"ivs":{"hp":29,"atk":0,"def":31,"spa":31,"spd":31,"spe":31},"nature":"Timid","moves":[["Defog"],["Roost"],["Scald"],["Hurricane"]]}]},"vullaby":{"flags":{},"sets":[{"species":"Vullaby","gender":"","item":"Eviolite","ability":"Overcoat","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Defog"],["Roost"],["U-turn","Whirlwind"],["Foul Play"]]},{"species":"Vullaby","gender":"","item":"Eviolite","ability":"Overcoat","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Defog"],["Roost"],["U-turn","Whirlwind"],["Foul Play"]]}]},"basculin":{"flags":{},"sets":[{"species":"Basculin","gender":"","item":"Choice Band","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Waterfall","Aqua Tail"],["Aqua Jet"],["Crunch","Zen Headbutt"],["Double-Edge"]]},{"species":"Basculin","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"hp":29,"atk":31,"def":31,"spa":30,"spd":31,"spe":31},"nature":"Naive","moves":[["Waterfall"],["Aqua Jet"],["Ice Beam"],["Superpower"]]},{"species":"Basculin","gender":"","item":"Life Orb","ability":"Adaptability","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"ivs":{"spa":30},"nature":"Naive","moves":[["Waterfall"],["Aqua Jet"],["Ice Beam"],["Hidden Power Electric"]]}]},"gabite":{"flags":{},"sets":[{"species":"Gabite","gender":"","item":"Eviolite","ability":"Rough Skin","evs":{"hp":248,"atk":8,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Toxic","Roar"],["Dragon Claw"],["Earthquake"]]},{"species":"Gabite","gender":"","item":"Eviolite","ability":"Rough Skin","evs":{"hp":248,"atk":220,"def":0,"spa":0,"spd":0,"spe":40},"nature":"Adamant","moves":[["Stealth Rock"],["Toxic","Roar"],["Dragon Claw"],["Earthquake"]]},{"species":"Gabite","gender":"","item":"Eviolite","ability":"Rough Skin","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Earthquake"],["Outrage"],["Stealth Rock"],["Stone Edge","Toxic","Roar"]]}]},"gourgeistsmall":{"flags":{},"sets":[{"species":"Gourgeist-Small","gender":"","item":"Leftovers","ability":"Frisk","evs":{"hp":152,"atk":0,"def":104,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Leech Seed"],["Substitute"],["Foul Play","Seed Bomb"],["Will-O-Wisp","Disable"]]},{"species":"Gourgeist-Small","gender":"","item":"Choice Scarf","ability":"Frisk","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Seed Bomb"],["Trick"],["Rock Slide"],["Explosion","Destiny Bond"]]}]},"klang":{"flags":{},"sets":[{"species":"Klang","gender":"","item":"Eviolite","ability":"Clear Body","evs":{"hp":252,"atk":0,"def":156,"spa":0,"spd":100,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Shift Gear"],["Gear Grind"]]}]},"leafeon":{"flags":{},"sets":[{"species":"Leafeon","gender":"","item":"Choice Band","ability":"Leaf Guard","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Leaf Blade"],["Bullet Seed"],["Knock Off"],["Double-Edge","Quick Attack"]]},{"species":"Leafeon","gender":"","item":"Yache Berry","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Synthesis","Return"]]},{"species":"Leafeon","gender":"","item":"Occa Berry","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Swords Dance"],["Leaf Blade"],["Knock Off"],["Synthesis","Return"]]},{"species":"Leafeon","gender":"","item":"Choice Scarf","ability":"Chlorophyll","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":4,"spe":252},"nature":"Jolly","moves":[["Double-Edge","Return"],["Leaf Blade"],["Knock Off"],["Bullet Seed","X-Scissor"]]}]},"leavanny":{"flags":{},"sets":[{"species":"Leavanny","gender":"","item":"Focus Sash","ability":"Chlorophyll","evs":{"hp":0,"atk":4,"def":0,"spa":252,"spd":0,"spe":252},"nature":"Naive","moves":[["Leaf Storm"],["Electroweb","Magic Coat"],["Sticky Web"],["Knock Off"]]}]},"metang":{"flags":{},"sets":[{"species":"Metang","gender":"","item":"Eviolite","ability":"Clear Body","evs":{"hp":248,"atk":252,"def":0,"spa":0,"spd":0,"spe":8},"nature":"Adamant","moves":[["Meteor Mash"],["Stealth Rock"],["Pursuit","Bullet Punch"],["Earthquake","Zen Headbutt"]]},{"species":"Metang","gender":"","item":"Eviolite","ability":"Clear Body","evs":{"hp":248,"atk":0,"def":0,"spa":0,"spd":252,"spe":8},"nature":"Careful","moves":[["Meteor Mash"],["Stealth Rock"],["Toxic"],["Pursuit","Bullet Punch","Earthquake","Zen Headbutt"]]},{"species":"Metang","gender":"","item":"Eviolite","ability":"Clear Body","nature":"Impish","moves":[["Meteor Mash"],["Stealth Rock"],["Toxic"],["Earthquake","Zen Headbutt","Pursuit","Bullet Punch"]]}]},"ninjask":{"flags":{},"sets":[{"species":"Ninjask","gender":"","item":"Choice Band","ability":"Infiltrator","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"moves":[["U-turn"],["X-Scissor"],["Aerial Ace"],["Toxic"]]}]},"purugly":{"flags":{},"sets":[{"species":"Purugly","gender":"","item":"Life Orb","ability":"Defiant","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Return"],["Fake Out"],["Knock Off"],["U-turn","Sucker Punch","Wake-Up Slap"]],"happiness":255}]},"solrock":{"flags":{},"sets":[{"species":"Solrock","gender":"","item":"Leftovers","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Will-O-Wisp"],["Zen Headbutt","Stone Edge"],["Morning Sun"]]},{"species":"Solrock","gender":"","item":"Colbur Berry","ability":"Levitate","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Stealth Rock"],["Will-O-Wisp"],["Stone Edge"],["Morning Sun"]]}]},"venipede":{"flags":{},"sets":[{"species":"Venipede","gender":"","item":"Focus Sash","ability":"Speed Boost","evs":{"hp":252,"atk":0,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Timid","moves":[["Protect"],["Spikes"],["Toxic Spikes"],["Endeavor"]]}]},"armaldo":{"flags":{},"sets":[{"species":"Armaldo","gender":"","item":"Leftovers","ability":"Battle Armor","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Rapid Spin"],["Knock Off"],["Stone Edge"],["Toxic"]]},{"species":"Armaldo","gender":"","item":"Leftovers","ability":"Battle Armor","evs":{"hp":248,"atk":0,"def":252,"spa":0,"spd":8,"spe":0},"nature":"Impish","moves":[["Rapid Spin"],["Knock Off"],["Stone Edge"],["Stealth Rock"]]},{"species":"Armaldo","gender":"","item":"Leftovers","ability":"Battle Armor","evs":{"hp":248,"atk":252,"def":8,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Stone Edge"],["Knock Off"],["Rapid Spin"],["Earthquake"]]}]},"dusknoir":{"flags":{},"sets":[{"species":"Dusknoir","gender":"","item":"Choice Band","ability":"Frisk","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Shadow Sneak"],["Thunder Punch"],["Earthquake"],["Trick"]]},{"species":"Dusknoir","gender":"","item":"Spell Tag","ability":"Frisk","evs":{"hp":252,"atk":252,"def":4,"spa":0,"spd":0,"spe":0},"nature":"Adamant","moves":[["Shadow Sneak"],["Thunder Punch"],["Earthquake"],["Will-O-Wisp"]]}]},"huntail":{"flags":{},"sets":[{"species":"Huntail","gender":"","item":"White Herb","ability":"Water Veil","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naughty","moves":[["Shell Smash"],["Sucker Punch"],["Waterfall"],["Ice Beam"]]},{"species":"Huntail","gender":"","item":"White Herb","ability":"Swift Swim","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Shell Smash"],["Sucker Punch"],["Waterfall"],["Double-Edge"]]}]},"murkrow":{"flags":{},"sets":[{"species":"Murkrow","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Jolly","moves":[["Brave Bird"],["Sucker Punch"],["Pursuit"],["Thunder Wave"]]},{"species":"Murkrow","gender":"","item":"Life Orb","ability":"Prankster","evs":{"hp":0,"atk":252,"def":0,"spa":4,"spd":0,"spe":252},"nature":"Naive","moves":[["Brave Bird"],["Sucker Punch"],["Hidden Power Fighting"],["Thunder Wave","Pursuit"]],"ivs":{"def":30,"spa":30,"spd":30,"spe":30}}]},"vibrava":{"flags":{},"sets":[{"species":"Vibrava","gender":"","item":"Eviolite","ability":"Levitate","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Earthquake"],["U-turn","Toxic"],["Defog"],["Roost"]]}]},"zweilous":{"flags":{},"sets":[{"species":"Zweilous","gender":"","item":"Eviolite","ability":"Hustle","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Rest"],["Sleep Talk"],["Crunch"],["Dragon Tail","Roar"]]},{"species":"Zweilous","gender":"","item":"Choice Band","ability":"Hustle","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Crunch"],["Outrage"],["Superpower"],["Sleep Talk"]]}]},"avalugg":{"flags":{},"sets":[{"species":"Avalugg","gender":"","item":"Leftovers","ability":"Sturdy","evs":{"hp":248,"atk":0,"def":8,"spa":0,"spd":252,"spe":0},"nature":"Careful","moves":[["Recover"],["Rapid Spin"],["Avalanche"],["Roar","Toxic"]]}]},"electrode":{"flags":{},"sets":[{"species":"Electrode","gender":"","item":"Life Orb","ability":"Soundproof","evs":{"hp":0,"atk":0,"def":0,"spa":252,"spd":4,"spe":252},"nature":"Modest","moves":[["Thunderbolt"],["Volt Switch"],["Signal Beam"],["Hidden Power Ice"]],"ivs":{"atk":30,"def":30}}]},"marowak":{"flags":{},"sets":[{"species":"Marowak","gender":"","item":"Thick Club","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bonemerang"],["Knock Off"],["Double-Edge"],["Stealth Rock"]]},{"species":"Marowak","gender":"","item":"Thick Club","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bonemerang"],["Knock Off"],["Double-Edge"],["Stone Edge"]]},{"species":"Marowak","gender":"","item":"Thick Club","ability":"Rock Head","evs":{"hp":0,"atk":252,"def":4,"spa":0,"spd":0,"spe":252},"nature":"Adamant","moves":[["Bonemerang"],["Knock Off"],["Stone Edge"],["Stealth Rock"]]}]},"quilladin":{"flags":{},"sets":[{"species":"Quilladin","gender":"","item":"Eviolite","ability":"Bulletproof","evs":{"hp":252,"atk":4,"def":252,"spa":0,"spd":0,"spe":0},"nature":"Impish","moves":[["Wood Hammer"],["Spikes"],["Synthesis"],["Roar"]]},{"species":"Quilladin","gender":"","item":"Eviolite","ability":"Bulletproof","evs":{"hp":0,"atk":252,"def":0,"spa":0,"spd":0,"spe":252},"nature":"Jolly","moves":[["Wood Hammer"],["Taunt"],["Spikes"],["Zen Headbutt","Drain Punch"]]}]},"rampardos":{"flags":{},"sets":[{"species":"Rampardos","gender":"","item":"Focus Sash","ability":"Mold Breaker","evs":{"hp":0,"atk":144,"def":0,"spa":112,"spd":0,"spe":252},"nature":"Naive","moves":[["Stealth Rock"],["Superpower"],["Head Smash"],["Surf"]]}]},"drifblim":{"flags":{},"sets":[{"species":"Drifblim","gender":"","item":"Liechi Berry","ability":"Unburden","evs":{"hp":12,"atk":244,"def":0,"spa":0,"spd":40,"spe":212},"nature":"Adamant","moves":[["Substitute"],["Acrobatics"],["Knock Off"],["Will-O-Wisp"]]}]}}} diff --git a/mods/gen6/formats-data.js b/data/mods/gen6/formats-data.js similarity index 89% rename from mods/gen6/formats-data.js rename to data/mods/gen6/formats-data.js index d4205432a825f..4b93e59ea1361 100644 --- a/mods/gen6/formats-data.js +++ b/data/mods/gen6/formats-data.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { bulbasaur: { inherit: true, randomBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "leechseed", "synthesis"], @@ -17,12 +18,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["sunnyday", "sleeppowder", "gigadrain", "hiddenpowerfire", "sludgebomb", "leechseed", "substitute"], randomDoubleBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "protect"], tier: "RU", + doublesTier: "DOU", }, venusaurmega: { randomBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "sludgebomb", "leechseed", "synthesis", "earthquake", "knockoff"], randomDoubleBattleMoves: ["sleeppowder", "gigadrain", "hiddenpowerfire", "hiddenpowerice", "sludgebomb", "powerwhip", "protect"], requiredItem: "Venusaurite", tier: "OU", + doublesTier: "DOU", }, charmander: { inherit: true, @@ -37,21 +40,24 @@ exports.BattleFormatsData = { }, charizard: { inherit: true, - randomBattleMoves: ["fireblast", "airslash", "focusblast", "roost", "swordsdance", "flareblitz", "acrobatics", "earthquake"], + randomBattleMoves: ["fireblast", "airslash", "focusblast", "roost", "swordsdance", "flareblitz", "acrobatics", "earthquake", "willowisp"], randomDoubleBattleMoves: ["heatwave", "fireblast", "airslash", "overheat", "dragonpulse", "roost", "tailwind", "protect"], tier: "NU", + doublesTier: "(DUU)", }, charizardmegax: { randomBattleMoves: ["dragondance", "flareblitz", "dragonclaw", "earthquake", "roost", "willowisp"], randomDoubleBattleMoves: ["dragondance", "flareblitz", "dragonclaw", "earthquake", "rockslide", "roost", "substitute"], requiredItem: "Charizardite X", tier: "OU", + doublesTier: "(DUU)", }, charizardmegay: { randomBattleMoves: ["fireblast", "airslash", "roost", "solarbeam", "focusblast", "dragonpulse"], randomDoubleBattleMoves: ["heatwave", "fireblast", "airslash", "roost", "solarbeam", "focusblast", "protect"], requiredItem: "Charizardite Y", tier: "OU", + doublesTier: "DOU", }, squirtle: { inherit: true, @@ -69,12 +75,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["icebeam", "rapidspin", "scald", "toxic", "dragontail", "roar"], randomDoubleBattleMoves: ["muddywater", "icebeam", "hydropump", "fakeout", "scald", "followme", "icywind", "protect", "waterspout"], tier: "RU", + doublesTier: "(DUU)", }, blastoisemega: { randomBattleMoves: ["icebeam", "hydropump", "rapidspin", "scald", "dragontail", "darkpulse", "aurasphere"], randomDoubleBattleMoves: ["muddywater", "icebeam", "hydropump", "fakeout", "scald", "darkpulse", "aurasphere", "followme", "icywind", "protect"], requiredItem: "Blastoisinite", tier: "UU", + doublesTier: "DUU", }, caterpie: { randomBattleMoves: ["bugbite", "snore", "tackle", "electroweb"], @@ -86,9 +94,10 @@ exports.BattleFormatsData = { }, butterfree: { inherit: true, - randomBattleMoves: ["sleeppowder", "quiverdance", "bugbuzz", "psychic", "gigadrain", "substitute"], + randomBattleMoves: ["sleeppowder", "quiverdance", "bugbuzz", "airslash", "gigadrain", "substitute"], randomDoubleBattleMoves: ["quiverdance", "bugbuzz", "substitute", "sleeppowder", "psychic", "shadowball", "protect"], tier: "PU", + doublesTier: "(DUU)", }, weedle: { randomBattleMoves: ["bugbite", "stringshot", "poisonsting", "electroweb"], @@ -103,12 +112,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["toxicspikes", "tailwind", "uturn", "endeavor", "poisonjab", "knockoff"], randomDoubleBattleMoves: ["xscissor", "uturn", "poisonjab", "drillrun", "brickbreak", "knockoff", "protect", "stringshot"], tier: "PU", + doublesTier: "(DUU)", }, beedrillmega: { randomBattleMoves: ["xscissor", "swordsdance", "uturn", "poisonjab", "drillrun", "knockoff"], randomDoubleBattleMoves: ["xscissor", "uturn", "substitute", "poisonjab", "drillrun", "knockoff", "protect"], requiredItem: "Beedrillite", tier: "UU", + doublesTier: "(DUU)", }, pidgey: { randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "workup", "uturn", "thief"], @@ -123,15 +134,17 @@ exports.BattleFormatsData = { }, pidgeot: { inherit: true, - randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "doubleedge", "uturn", "hurricane"], + randomBattleMoves: ["roost", "bravebird", "heatwave", "return", "uturn", "defog"], randomDoubleBattleMoves: ["bravebird", "heatwave", "return", "doubleedge", "uturn", "tailwind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, pidgeotmega: { randomBattleMoves: ["roost", "heatwave", "uturn", "hurricane", "defog"], randomDoubleBattleMoves: ["tailwind", "heatwave", "uturn", "hurricane", "protect"], requiredItem: "Pidgeotite", - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, rattata: { randomBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn", "wildcharge", "thunderwave", "crunch", "revenge"], @@ -143,6 +156,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["protect", "facade", "flamewheel", "suckerpunch", "uturn", "swordsdance"], randomDoubleBattleMoves: ["facade", "flamewheel", "suckerpunch", "uturn", "crunch", "protect"], tier: "PU", + doublesTier: "(DUU)", }, spearow: { inherit: true, @@ -154,6 +168,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "pursuit", "drillrun"], randomDoubleBattleMoves: ["return", "drillpeck", "doubleedge", "uturn", "quickattack", "drillrun", "protect"], tier: "PU", + doublesTier: "(DUU)", }, ekans: { inherit: true, @@ -166,6 +181,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["coil", "gunkshot", "suckerpunch", "aquatail", "earthquake", "rest"], randomDoubleBattleMoves: ["gunkshot", "suckerpunch", "aquatail", "crunch", "earthquake", "rest", "rockslide", "protect"], tier: "PU", + doublesTier: "(DUU)", }, pichu: { inherit: true, @@ -182,34 +198,38 @@ exports.BattleFormatsData = { pikachucosplay: { inherit: true, tier: "PU", + doublesTier: "(DUU)", }, pikachurockstar: { inherit: true, - randomBattleMoves: ["meteormash", "wildcharge", "knockoff", "brickbreak"], tier: "PU", + doublesTier: "(DUU)", }, pikachubelle: { inherit: true, - randomBattleMoves: ["iciclecrash", "thunderbolt", "knockoff", "brickbreak", "substitute", "grassknot", "voltswitch"], tier: "PU", + doublesTier: "(DUU)", }, pikachupopstar: { inherit: true, tier: "PU", + doublesTier: "(DUU)", }, pikachuphd: { inherit: true, tier: "PU", + doublesTier: "(DUU)", }, pikachulibre: { inherit: true, - randomBattleMoves: ["flyingpress", "thunderbolt", "knockoff", "hiddenpowerice", "substitute", "grassknot", "voltswitch"], tier: "PU", + doublesTier: "(DUU)", }, raichu: { randomBattleMoves: ["nastyplot", "encore", "thunderbolt", "grassknot", "hiddenpowerice", "focusblast", "voltswitch"], randomDoubleBattleMoves: ["fakeout", "encore", "thunderbolt", "grassknot", "hiddenpowerice", "focusblast", "substitute", "extremespeed", "knockoff", "protect"], tier: "PU", + doublesTier: "DOU", }, sandshrew: { inherit: true, @@ -221,6 +241,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "swordsdance", "rapidspin", "toxic", "stealthrock", "knockoff"], randomDoubleBattleMoves: ["earthquake", "rockslide", "stoneedge", "swordsdance", "xscissor", "knockoff", "protect"], tier: "NU", + doublesTier: "(DUU)", }, nidoranf: { randomBattleMoves: ["toxicspikes", "crunch", "poisonjab", "honeclaws"], @@ -237,6 +258,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["toxicspikes", "stealthrock", "fireblast", "icebeam", "earthpower", "sludgewave"], randomDoubleBattleMoves: ["protect", "fireblast", "icebeam", "earthpower", "sludgebomb"], tier: "UU", + doublesTier: "(DUU)", }, nidoranm: { randomBattleMoves: ["suckerpunch", "poisonjab", "headsmash", "honeclaws", "shadowclaw"], @@ -252,6 +274,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "fireblast", "icebeam", "earthpower", "sludgewave", "superpower"], randomDoubleBattleMoves: ["protect", "fireblast", "thunderbolt", "icebeam", "earthpower", "sludgebomb", "focusblast"], tier: "UU", + doublesTier: "DUU", }, cleffa: { randomBattleMoves: ["reflect", "thunderwave", "lightscreen", "toxic", "fireblast", "encore", "wish", "protect", "aromatherapy"], @@ -262,11 +285,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["healingwish", "reflect", "thunderwave", "lightscreen", "toxic", "fireblast", "encore", "wish", "protect", "aromatherapy", "stealthrock", "moonblast", "knockoff", "moonlight"], randomDoubleBattleMoves: ["reflect", "thunderwave", "lightscreen", "safeguard", "fireblast", "followme", "protect", "moonblast"], tier: "PU", + doublesTier: "NFE", }, clefable: { randomBattleMoves: ["calmmind", "softboiled", "fireblast", "moonblast", "stealthrock", "thunderwave"], randomDoubleBattleMoves: ["reflect", "thunderwave", "lightscreen", "safeguard", "fireblast", "followme", "protect", "moonblast", "dazzlinggleam", "softboiled"], tier: "OU", + doublesTier: "DUU", }, vulpix: { inherit: true, @@ -279,6 +304,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["fireblast", "willowisp", "solarbeam", "nastyplot", "substitute", "hiddenpowerice"], randomDoubleBattleMoves: ["heatwave", "fireblast", "willowisp", "solarbeam", "substitute", "protect"], tier: "PU", + doublesTier: "DUU", }, igglybuff: { inherit: true, @@ -295,6 +321,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["wish", "protect", "fireblast", "stealthrock", "dazzlinggleam", "hypervoice"], randomDoubleBattleMoves: ["thunderwave", "reflect", "lightscreen", "protect", "knockoff", "dazzlinggleam", "fireblast", "icebeam", "hypervoice"], tier: "PU", + doublesTier: "(DUU)", }, zubat: { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "nastyplot", "gigadrain", "sludgebomb", "airslash", "uturn", "whirlwind", "heatwave", "superfang"], @@ -311,6 +338,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["bravebird", "roost", "toxic", "taunt", "defog", "uturn", "superfang"], randomDoubleBattleMoves: ["bravebird", "taunt", "tailwind", "crosspoison", "uturn", "protect", "superfang"], tier: "UU", + doublesTier: "DUU", }, oddish: { inherit: true, @@ -325,14 +353,16 @@ exports.BattleFormatsData = { tier: "NFE", }, vileplume: { - randomBattleMoves: ["gigadrain", "sludgebomb", "synthesis", "sleeppowder", "hiddenpowerfire", "aromatherapy"], + randomBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "hiddenpowerfire", "aromatherapy", "synthesis"], randomDoubleBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "stunspore", "protect", "hiddenpowerfire", "moonblast", "dazzlinggleam"], tier: "NU", + doublesTier: "(DUU)", }, bellossom: { randomBattleMoves: ["gigadrain", "synthesis", "sleeppowder", "hiddenpowerfire", "sunnyday"], randomDoubleBattleMoves: ["gigadrain", "sludgebomb", "sleeppowder", "stunspore", "protect", "hiddenpowerfire", "moonblast", "dazzlinggleam", "sunnyday", "solarbeam"], tier: "PU", + doublesTier: "(DUU)", }, paras: { inherit: true, @@ -344,6 +374,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["spore", "substitute", "xscissor", "seedbomb", "leechseed", "knockoff"], randomDoubleBattleMoves: ["spore", "stunspore", "xscissor", "seedbomb", "ragepowder", "leechseed", "protect", "knockoff", "wideguard"], tier: "PU", + doublesTier: "(DUU)", }, venonat: { randomBattleMoves: ["sleeppowder", "morningsun", "toxicspikes", "sludgebomb", "signalbeam", "stunspore", "psychic"], @@ -352,9 +383,10 @@ exports.BattleFormatsData = { }, venomoth: { inherit: true, - randomBattleMoves: ["sleeppowder", "quiverdance", "batonpass", "bugbuzz", "sludgebomb", "substitute"], + randomBattleMoves: ["sleeppowder", "quiverdance", "bugbuzz", "sludgebomb", "substitute"], randomDoubleBattleMoves: ["sleeppowder", "roost", "ragepowder", "quiverdance", "protect", "bugbuzz", "sludgebomb", "gigadrain", "substitute", "psychic"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, diglett: { randomBattleMoves: ["earthquake", "rockslide", "stealthrock", "suckerpunch", "reversal", "substitute", "shadowclaw"], @@ -366,6 +398,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "stoneedge", "stealthrock", "suckerpunch", "reversal", "substitute"], randomDoubleBattleMoves: ["earthquake", "rockslide", "protect", "suckerpunch", "stoneedge"], tier: "OU", + doublesTier: "(DUU)", }, meowth: { inherit: true, @@ -377,6 +410,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["fakeout", "uturn", "taunt", "return", "knockoff"], randomDoubleBattleMoves: ["fakeout", "uturn", "knockoff", "taunt", "return", "hypnosis", "feint", "protect"], tier: "PU", + doublesTier: "(DUU)", }, psyduck: { inherit: true, @@ -386,9 +420,10 @@ exports.BattleFormatsData = { }, golduck: { inherit: true, - randomBattleMoves: ["hydropump", "scald", "icebeam", "signalbeam", "encore", "calmmind", "substitute"], + randomBattleMoves: ["hydropump", "scald", "icebeam", "psyshock", "encore", "calmmind", "substitute"], randomDoubleBattleMoves: ["hydropump", "scald", "icebeam", "hiddenpowergrass", "focusblast", "encore", "psychic", "surf", "icywind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, mankey: { randomBattleMoves: ["closecombat", "uturn", "icepunch", "rockslide", "punishment", "earthquake", "poisonjab"], @@ -400,6 +435,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["closecombat", "uturn", "icepunch", "stoneedge", "encore", "earthquake", "gunkshot"], randomDoubleBattleMoves: ["closecombat", "uturn", "icepunch", "rockslide", "punishment", "earthquake", "poisonjab", "protect", "taunt", "stoneedge"], tier: "NU", + doublesTier: "(DUU)", }, growlithe: { inherit: true, @@ -412,6 +448,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["flareblitz", "wildcharge", "extremespeed", "closecombat", "morningsun", "willowisp", "toxic", "crunch", "roar"], randomDoubleBattleMoves: ["flareblitz", "wildcharge", "closecombat", "willowisp", "snarl", "protect", "extremespeed"], tier: "UU", + doublesTier: "DOU", }, poliwag: { inherit: true, @@ -429,12 +466,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "focusblast", "icebeam", "rest", "sleeptalk", "scald", "circlethrow", "raindance"], randomDoubleBattleMoves: ["bellydrum", "encore", "waterfall", "protect", "icepunch", "earthquake", "brickbreak", "rockslide"], tier: "NU", + doublesTier: "(DUU)", }, politoed: { inherit: true, randomBattleMoves: ["scald", "toxic", "encore", "perishsong", "protect", "hypnosis", "rest"], randomDoubleBattleMoves: ["scald", "hypnosis", "icywind", "encore", "helpinghand", "protect", "icebeam", "focusblast", "hydropump", "hiddenpowergrass"], tier: "PU", + doublesTier: "DOU", }, abra: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], @@ -445,18 +484,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["calmmind", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "hiddenpowerfighting", "shadowball", "encore", "substitute"], tier: "PU", + doublesTier: "NFE", }, alakazam: { inherit: true, randomBattleMoves: ["psyshock", "psychic", "focusblast", "shadowball", "hiddenpowerice", "hiddenpowerfire"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "focusblast", "shadowball", "encore", "substitute", "dazzlinggleam"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, alakazammega: { randomBattleMoves: ["calmmind", "psyshock", "focusblast", "shadowball", "encore", "substitute"], randomDoubleBattleMoves: ["protect", "psychic", "psyshock", "focusblast", "shadowball", "encore", "substitute", "dazzlinggleam"], requiredItem: "Alakazite", - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, machop: { randomBattleMoves: ["dynamicpunch", "bulkup", "icepunch", "rockslide", "bulletpunch", "knockoff"], @@ -467,30 +509,33 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["dynamicpunch", "bulkup", "icepunch", "rockslide", "bulletpunch", "poweruppunch", "knockoff"], randomDoubleBattleMoves: ["dynamicpunch", "protect", "icepunch", "rockslide", "bulletpunch", "knockoff"], - tier: "BL4", + tier: "PUBL", + doublesTier: "NFE", }, machamp: { inherit: true, randomBattleMoves: ["dynamicpunch", "icepunch", "stoneedge", "bulletpunch", "knockoff", "substitute"], randomDoubleBattleMoves: ["dynamicpunch", "protect", "icepunch", "stoneedge", "rockslide", "bulletpunch", "knockoff", "wideguard"], tier: "UU", + doublesTier: "DUU", }, bellsprout: { inherit: true, - randomBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb"], - randomDoubleBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "protect"], + randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb"], + randomDoubleBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "protect"], tier: "LC", }, weepinbell: { inherit: true, - randomBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "knockoff"], - randomDoubleBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "protect", "knockoff"], + randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "knockoff"], + randomDoubleBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "seedbomb", "knockoff", "protect"], tier: "NFE", }, victreebel: { - randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "knockoff", "swordsdance"], - randomDoubleBattleMoves: ["swordsdance", "sleeppowder", "sunnyday", "growth", "solarbeam", "gigadrain", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "protect", "knockoff"], - tier: "BL4", + randomBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "knockoff"], + randomDoubleBattleMoves: ["sleeppowder", "sunnyday", "growth", "solarbeam", "sludgebomb", "weatherball", "suckerpunch", "powerwhip", "knockoff", "protect"], + tier: "PUBL", + doublesTier: "(DUU)", }, tentacool: { randomBattleMoves: ["toxicspikes", "rapidspin", "scald", "sludgebomb", "icebeam", "knockoff", "gigadrain", "toxic", "dazzlinggleam"], @@ -501,6 +546,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["toxicspikes", "rapidspin", "scald", "sludgebomb", "acidspray", "knockoff"], randomDoubleBattleMoves: ["muddywater", "scald", "sludgebomb", "acidspray", "icebeam", "knockoff", "gigadrain", "protect", "dazzlinggleam"], tier: "UU", + doublesTier: "(DUU)", }, geodude: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "rockblast"], @@ -516,6 +562,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "explosion", "suckerpunch", "toxic", "rockblast"], randomDoubleBattleMoves: ["rockslide", "earthquake", "stoneedge", "suckerpunch", "hammerarm", "firepunch", "protect"], tier: "PU", + doublesTier: "(DUU)", }, ponyta: { randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "hypnosis", "flamecharge"], @@ -527,6 +574,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["flareblitz", "wildcharge", "morningsun", "drillrun", "willowisp", "sunnyday", "solarbeam"], randomDoubleBattleMoves: ["flareblitz", "wildcharge", "protect", "hypnosis", "flamecharge", "megahorn", "drillrun", "willowisp"], tier: "PU", + doublesTier: "(DUU)", }, slowpoke: { inherit: true, @@ -536,20 +584,23 @@ exports.BattleFormatsData = { }, slowbro: { inherit: true, - randomBattleMoves: ["scald", "toxic", "thunderwave", "psyshock", "foulplay", "fireblast", "icebeam", "slackoff"], + randomBattleMoves: ["scald", "toxic", "thunderwave", "psyshock", "fireblast", "icebeam", "slackoff"], randomDoubleBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "slackoff", "trickroom", "protect", "psyshock"], tier: "OU", + doublesTier: "(DUU)", }, slowbromega: { - randomBattleMoves: ["calmmind", "scald", "psyshock", "slackoff", "fireblast", "psychic", "icebeam", "grassknot"], + randomBattleMoves: ["calmmind", "scald", "psyshock", "slackoff", "fireblast", "psychic", "icebeam"], randomDoubleBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "slackoff", "trickroom", "protect", "psyshock"], requiredItem: "Slowbronite", tier: "(OU)", + doublesTier: "(DUU)", }, slowking: { randomBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "toxic", "slackoff", "trickroom", "nastyplot", "dragontail", "psyshock"], randomDoubleBattleMoves: ["scald", "fireblast", "icebeam", "psychic", "grassknot", "thunderwave", "slackoff", "trickroom", "protect", "psyshock"], tier: "RU", + doublesTier: "DUU", }, magnemite: { randomBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch"], @@ -561,17 +612,20 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "chargebeam", "hiddenpowerfire"], randomDoubleBattleMoves: ["thunderbolt", "thunderwave", "magnetrise", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "protect", "electroweb", "discharge", "hiddenpowerfire"], tier: "RU", + doublesTier: "NFE", }, magnezone: { - randomBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "chargebeam", "hiddenpowerfire"], + randomBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "hiddenpowerfire"], randomDoubleBattleMoves: ["thunderbolt", "substitute", "flashcannon", "hiddenpowerice", "voltswitch", "protect", "electroweb", "discharge", "hiddenpowerfire"], tier: "OU", + doublesTier: "(DUU)", }, farfetchd: { inherit: true, - randomBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "roost", "nightslash"], + randomBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "roost", "knockoff"], randomDoubleBattleMoves: ["bravebird", "swordsdance", "return", "leafblade", "protect", "nightslash"], tier: "PU", + doublesTier: "(DUU)", }, doduo: { randomBattleMoves: ["bravebird", "return", "doubleedge", "roost", "quickattack", "pursuit"], @@ -583,6 +637,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["bravebird", "return", "doubleedge", "roost", "quickattack", "knockoff"], randomDoubleBattleMoves: ["bravebird", "return", "doubleedge", "quickattack", "protect"], tier: "PU", + doublesTier: "(DUU)", }, seel: { inherit: true, @@ -594,6 +649,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["surf", "icebeam", "perishsong", "encore", "toxic", "protect"], randomDoubleBattleMoves: ["surf", "icebeam", "protect", "perishsong", "fakeout", "encore", "toxic"], tier: "PU", + doublesTier: "(DUU)", }, grimer: { inherit: true, @@ -605,6 +661,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["curse", "gunkshot", "poisonjab", "shadowsneak", "icepunch", "firepunch", "memento"], randomDoubleBattleMoves: ["gunkshot", "poisonjab", "shadowsneak", "protect", "icepunch", "firepunch", "brickbreak"], tier: "PU", + doublesTier: "(DUU)", }, shellder: { inherit: true, @@ -617,6 +674,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["shellsmash", "hydropump", "rockblast", "iciclespear", "iceshard", "rapidspin", "spikes", "toxicspikes"], randomDoubleBattleMoves: ["shellsmash", "hydropump", "razorshell", "rockblast", "iciclespear", "protect"], tier: "UU", + doublesTier: "(DUU)", }, gastly: { randomBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "painsplit", "hypnosis", "gigadrain", "trick", "dazzlinggleam"], @@ -628,18 +686,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["shadowball", "sludgebomb", "dazzlinggleam", "substitute", "destinybond"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "hiddenpowerfighting", "thunderbolt", "substitute", "disable", "taunt", "hypnosis", "gigadrain", "trick", "dazzlinggleam", "protect"], tier: "NU", + doublesTier: "NFE", }, gengar: { inherit: true, randomBattleMoves: ["shadowball", "sludgewave", "focusblast", "substitute", "disable", "painsplit", "willowisp"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "focusblast", "substitute", "disable", "taunt", "hypnosis", "willowisp", "dazzlinggleam", "protect"], tier: "OU", + doublesTier: "DOU", }, gengarmega: { randomBattleMoves: ["shadowball", "sludgewave", "focusblast", "taunt", "destinybond", "disable", "perishsong", "protect"], randomDoubleBattleMoves: ["shadowball", "sludgebomb", "focusblast", "substitute", "disable", "taunt", "hypnosis", "willowisp", "dazzlinggleam", "protect"], requiredItem: "Gengarite", tier: "Uber", + doublesTier: "DOU", }, onix: { randomBattleMoves: ["stealthrock", "earthquake", "stoneedge", "dragontail", "curse"], @@ -650,12 +711,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "ironhead", "roar", "toxic", "rockslide"], randomDoubleBattleMoves: ["stealthrock", "earthquake", "ironhead", "rockslide", "protect", "explosion"], tier: "NU", + doublesTier: "(DUU)", }, steelixmega: { randomBattleMoves: ["stealthrock", "earthquake", "heavyslam", "roar", "toxic", "dragontail"], randomDoubleBattleMoves: ["stealthrock", "earthquake", "heavyslam", "rockslide", "protect", "explosion"], requiredItem: "Steelixite", - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, drowzee: { inherit: true, @@ -668,6 +731,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "seismictoss", "foulplay", "wish", "protect", "thunderwave", "toxic"], randomDoubleBattleMoves: ["psychic", "seismictoss", "thunderwave", "wish", "protect", "hypnosis", "trickroom", "dazzlinggleam", "foulplay"], tier: "PU", + doublesTier: "(DUU)", }, krabby: { randomBattleMoves: ["crabhammer", "swordsdance", "agility", "rockslide", "substitute", "xscissor", "superpower", "knockoff"], @@ -678,6 +742,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["crabhammer", "xscissor", "rockslide", "swordsdance", "agility", "superpower", "knockoff"], randomDoubleBattleMoves: ["crabhammer", "xscissor", "rockslide", "substitute", "superpower", "knockoff", "protect", "wideguard"], tier: "PU", + doublesTier: "(DUU)", }, voltorb: { inherit: true, @@ -689,6 +754,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["voltswitch", "thunderbolt", "taunt", "foulplay", "hiddenpowergrass", "signalbeam"], randomDoubleBattleMoves: ["voltswitch", "discharge", "taunt", "foulplay", "hiddenpowerice", "protect", "thunderwave"], tier: "PU", + doublesTier: "(DUU)", }, exeggcute: { inherit: true, @@ -700,7 +766,8 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["substitute", "leechseed", "gigadrain", "psychic", "sleeppowder", "hiddenpowerfire"], randomDoubleBattleMoves: ["substitute", "leechseed", "gigadrain", "psychic", "sleeppowder", "hiddenpowerfire", "protect", "trickroom", "psyshock"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, cubone: { randomBattleMoves: ["substitute", "bonemerang", "doubleedge", "rockslide", "firepunch", "earthquake"], @@ -712,6 +779,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["bonemerang", "earthquake", "knockoff", "doubleedge", "stoneedge", "stealthrock", "substitute"], randomDoubleBattleMoves: ["substitute", "bonemerang", "doubleedge", "rockslide", "firepunch", "earthquake", "protect", "swordsdance"], tier: "PU", + doublesTier: "(DUU)", }, tyrogue: { randomBattleMoves: ["highjumpkick", "rapidspin", "fakeout", "bulletpunch", "machpunch", "toxic", "counter"], @@ -723,18 +791,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["highjumpkick", "knockoff", "stoneedge", "rapidspin", "machpunch", "poisonjab", "fakeout"], randomDoubleBattleMoves: ["knockoff", "rockslide", "machpunch", "fakeout", "highjumpkick", "earthquake", "blazekick", "wideguard", "protect"], tier: "RU", + doublesTier: "(DUU)", }, hitmonchan: { inherit: true, randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "firepunch", "machpunch", "rapidspin"], randomDoubleBattleMoves: ["fakeout", "drainpunch", "icepunch", "firepunch", "machpunch", "earthquake", "rockslide", "protect", "thunderpunch"], tier: "NU", + doublesTier: "(DUU)", }, hitmontop: { inherit: true, - randomBattleMoves: ["suckerpunch", "machpunch", "rapidspin", "closecombat", "toxic"], + randomBattleMoves: ["suckerpunch", "stoneedge", "rapidspin", "closecombat", "toxic"], randomDoubleBattleMoves: ["fakeout", "feint", "suckerpunch", "closecombat", "helpinghand", "machpunch", "wideguard"], tier: "RU", + doublesTier: "DOU", }, lickitung: { inherit: true, @@ -746,6 +817,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["wish", "protect", "bodyslam", "knockoff", "dragontail", "healbell", "swordsdance", "explosion", "earthquake", "powerwhip"], randomDoubleBattleMoves: ["wish", "protect", "dragontail", "knockoff", "bodyslam", "rockslide", "powerwhip", "earthquake", "toxic", "healbell", "explosion"], tier: "PU", + doublesTier: "(DUU)", }, koffing: { randomBattleMoves: ["painsplit", "sludgebomb", "willowisp", "fireblast", "toxic", "clearsmog", "rest", "sleeptalk", "thunderbolt"], @@ -756,6 +828,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["painsplit", "sludgebomb", "willowisp", "fireblast", "protect", "toxicspikes"], randomDoubleBattleMoves: ["protect", "sludgebomb", "willowisp", "fireblast", "toxic", "painsplit", "thunderbolt", "explosion"], tier: "NU", + doublesTier: "(DUU)", }, rhyhorn: { randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast", "rockpolish"], @@ -767,11 +840,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "rockblast", "roar", "swordsdance", "stoneedge", "megahorn", "rockpolish"], randomDoubleBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockslide", "protect"], tier: "NU", + doublesTier: "NFE", }, rhyperior: { - randomBattleMoves: ["stoneedge", "earthquake", "aquatail", "megahorn", "stealthrock", "rockblast", "rockpolish", "dragontail"], + randomBattleMoves: ["stoneedge", "earthquake", "icepunch", "megahorn", "stealthrock", "rockblast", "rockpolish", "dragontail"], randomDoubleBattleMoves: ["stoneedge", "earthquake", "hammerarm", "megahorn", "stealthrock", "rockslide", "protect"], tier: "RU", + doublesTier: "DUU", }, happiny: { randomBattleMoves: ["aromatherapy", "toxic", "thunderwave", "counter", "endeavor", "lightscreen", "fireblast"], @@ -783,36 +858,42 @@ exports.BattleFormatsData = { randomBattleMoves: ["softboiled", "healbell", "stealthrock", "thunderwave", "toxic", "seismictoss", "wish", "protect", "counter"], randomDoubleBattleMoves: ["aromatherapy", "toxic", "thunderwave", "helpinghand", "softboiled", "lightscreen", "seismictoss", "protect", "wish"], tier: "OU", + doublesTier: "NFE", }, blissey: { inherit: true, randomBattleMoves: ["toxic", "flamethrower", "seismictoss", "softboiled", "wish", "healbell", "protect", "thunderwave", "stealthrock"], randomDoubleBattleMoves: ["wish", "softboiled", "protect", "toxic", "aromatherapy", "seismictoss", "helpinghand", "thunderwave", "flamethrower", "icebeam"], tier: "UU", + doublesTier: "(DUU)", }, tangela: { inherit: true, randomBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerfire", "hiddenpowerice", "leechseed", "knockoff", "leafstorm", "sludgebomb", "synthesis"], randomDoubleBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerrock", "hiddenpowerice", "leechseed", "knockoff", "leafstorm", "stunspore", "protect", "hiddenpowerfire"], tier: "PU", + doublesTier: "LC Uber", }, tangrowth: { inherit: true, randomBattleMoves: ["gigadrain", "leafstorm", "knockoff", "earthquake", "hiddenpowerfire", "rockslide", "sleeppowder", "leechseed", "synthesis"], randomDoubleBattleMoves: ["gigadrain", "sleeppowder", "hiddenpowerice", "leechseed", "knockoff", "ragepowder", "focusblast", "protect", "powerwhip", "earthquake"], tier: "OU", + doublesTier: "(DUU)", }, kangaskhan: { inherit: true, randomBattleMoves: ["return", "suckerpunch", "earthquake", "drainpunch", "crunch", "fakeout"], randomDoubleBattleMoves: ["fakeout", "return", "suckerpunch", "earthquake", "doubleedge", "drainpunch", "crunch", "protect"], tier: "NU", + doublesTier: "(DUU)", }, kangaskhanmega: { randomBattleMoves: ["fakeout", "return", "suckerpunch", "earthquake", "poweruppunch", "crunch"], randomDoubleBattleMoves: ["fakeout", "return", "suckerpunch", "earthquake", "doubleedge", "poweruppunch", "drainpunch", "crunch", "protect"], requiredItem: "Kangaskhanite", tier: "Uber", + doublesTier: "DOU", }, horsea: { inherit: true, @@ -828,9 +909,10 @@ exports.BattleFormatsData = { }, kingdra: { inherit: true, - randomBattleMoves: ["dragondance", "waterfall", "outrage", "ironhead", "substitute", "raindance", "hydropump", "dracometeor"], + randomBattleMoves: ["raindance", "hydropump", "dracometeor", "icebeam", "dragondance", "waterfall", "outrage"], randomDoubleBattleMoves: ["hydropump", "icebeam", "focusenergy", "dracometeor", "dragonpulse", "muddywater", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, goldeen: { randomBattleMoves: ["waterfall", "megahorn", "knockoff", "drillrun", "icebeam"], @@ -841,6 +923,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["waterfall", "megahorn", "knockoff", "drillrun", "scald", "icebeam"], randomDoubleBattleMoves: ["waterfall", "surf", "megahorn", "knockoff", "drillrun", "icebeam", "icywind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, staryu: { inherit: true, @@ -853,35 +936,40 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "icebeam", "rapidspin", "recover", "psyshock", "scald", "hydropump"], randomDoubleBattleMoves: ["surf", "thunderbolt", "icebeam", "protect", "recover", "psychic", "psyshock", "scald", "hydropump"], tier: "OU", + doublesTier: "(DUU)", }, mimejr: { - randomBattleMoves: ["batonpass", "psychic", "thunderwave", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore"], + randomBattleMoves: ["psychic", "thunderwave", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore"], randomDoubleBattleMoves: ["fakeout", "psychic", "thunderwave", "hiddenpowerfighting", "healingwish", "nastyplot", "thunderbolt", "encore", "icywind", "protect"], tier: "LC", }, mrmime: { inherit: true, - randomBattleMoves: ["nastyplot", "psychic", "psyshock", "dazzlinggleam", "shadowball", "batonpass", "focusblast", "healingwish", "encore"], + randomBattleMoves: ["nastyplot", "psychic", "psyshock", "dazzlinggleam", "shadowball", "focusblast", "healingwish", "encore"], randomDoubleBattleMoves: ["fakeout", "thunderwave", "hiddenpowerfighting", "teeterdance", "thunderbolt", "encore", "icywind", "protect", "wideguard", "dazzlinggleam"], tier: "PU", + doublesTier: "(DUU)", }, scyther: { inherit: true, - randomBattleMoves: ["swordsdance", "roost", "bugbite", "quickattack", "brickbreak", "aerialace", "batonpass", "uturn", "knockoff"], + randomBattleMoves: ["swordsdance", "roost", "bugbite", "quickattack", "brickbreak", "aerialace", "uturn", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "protect", "bugbite", "quickattack", "brickbreak", "aerialace", "feint", "uturn", "knockoff"], tier: "NU", + doublesTier: "LC Uber", }, scizor: { inherit: true, randomBattleMoves: ["swordsdance", "bulletpunch", "bugbite", "superpower", "uturn", "pursuit", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "protect", "feint", "knockoff"], tier: "OU", + doublesTier: "DOU", }, scizormega: { - randomBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "batonpass", "pursuit", "defog", "knockoff"], + randomBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "defog", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "roost", "bulletpunch", "bugbite", "superpower", "uturn", "protect", "feint", "knockoff"], requiredItem: "Scizorite", tier: "OU", + doublesTier: "(DOU)", }, smoochum: { randomBattleMoves: ["icebeam", "psychic", "hiddenpowerfighting", "trick", "shadowball", "grassknot"], @@ -892,6 +980,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["icebeam", "psychic", "focusblast", "trick", "nastyplot", "lovelykiss", "substitute", "psyshock"], randomDoubleBattleMoves: ["icebeam", "psychic", "hiddenpowerfighting", "shadowball", "protect", "lovelykiss", "substitute", "psyshock"], tier: "NU", + doublesTier: "(DUU)", }, elekid: { inherit: true, @@ -910,6 +999,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["wildcharge", "crosschop", "icepunch", "flamethrower", "earthquake", "voltswitch"], randomDoubleBattleMoves: ["wildcharge", "crosschop", "icepunch", "substitute", "flamethrower", "earthquake", "protect", "followme"], tier: "NU", + doublesTier: "(DUU)", }, magby: { randomBattleMoves: ["flareblitz", "substitute", "fireblast", "hiddenpowergrass", "hiddenpowerice", "crosschop", "thunderpunch", "overheat"], @@ -925,24 +1015,28 @@ exports.BattleFormatsData = { randomBattleMoves: ["fireblast", "focusblast", "hiddenpowergrass", "hiddenpowerice", "thunderbolt", "earthquake", "substitute"], randomDoubleBattleMoves: ["fireblast", "taunt", "focusblast", "hiddenpowergrass", "hiddenpowerice", "thunderbolt", "heatwave", "willowisp", "protect", "followme"], tier: "NU", + doublesTier: "(DUU)", }, pinsir: { inherit: true, randomBattleMoves: ["earthquake", "xscissor", "closecombat", "stoneedge", "stealthrock", "knockoff"], randomDoubleBattleMoves: ["protect", "swordsdance", "xscissor", "earthquake", "closecombat", "substitute", "rockslide"], tier: "NU", + doublesTier: "(DUU)", }, pinsirmega: { randomBattleMoves: ["swordsdance", "earthquake", "closecombat", "quickattack", "return"], randomDoubleBattleMoves: ["feint", "protect", "swordsdance", "xscissor", "earthquake", "closecombat", "substitute", "quickattack", "return", "rockslide"], requiredItem: "Pinsirite", tier: "OU", + doublesTier: "(DUU)", }, tauros: { inherit: true, randomBattleMoves: ["rockclimb", "earthquake", "zenheadbutt", "rockslide", "doubleedge"], randomDoubleBattleMoves: ["return", "earthquake", "zenheadbutt", "rockslide", "stoneedge", "protect", "doubleedge"], tier: "NU", + doublesTier: "(DUU)", }, magikarp: { inherit: true, @@ -954,70 +1048,81 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "rest", "sleeptalk", "dragontail", "stoneedge", "substitute"], randomDoubleBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "taunt", "protect", "thunderwave", "stoneedge", "substitute", "icefang"], tier: "UU", + doublesTier: "(DUU)", }, gyaradosmega: { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "substitute", "icefang", "crunch"], randomDoubleBattleMoves: ["dragondance", "waterfall", "earthquake", "bounce", "taunt", "protect", "thunderwave", "stoneedge", "substitute", "icefang"], requiredItem: "Gyaradosite", - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, lapras: { inherit: true, randomBattleMoves: ["icebeam", "thunderbolt", "healbell", "toxic", "hydropump", "substitute"], randomDoubleBattleMoves: ["icebeam", "thunderbolt", "healbell", "hydropump", "surf", "substitute", "protect", "iceshard", "icywind"], tier: "PU", + doublesTier: "(DUU)", }, ditto: { randomBattleMoves: ["transform"], tier: "PU", + doublesTier: "(DUU)", }, eevee: { inherit: true, - randomBattleMoves: ["quickattack", "return", "bite", "batonpass", "irontail", "yawn", "protect", "wish"], + randomBattleMoves: ["quickattack", "return", "bite", "irontail", "yawn", "protect", "wish"], randomDoubleBattleMoves: ["quickattack", "return", "bite", "helpinghand", "irontail", "yawn", "protect", "wish"], tier: "LC", }, vaporeon: { inherit: true, - randomBattleMoves: ["wish", "protect", "scald", "roar", "icebeam", "healbell", "batonpass"], + randomBattleMoves: ["wish", "protect", "scald", "roar", "icebeam", "healbell"], randomDoubleBattleMoves: ["helpinghand", "wish", "protect", "scald", "muddywater", "icebeam", "toxic", "hydropump"], tier: "UU", + doublesTier: "DUU", }, jolteon: { inherit: true, - randomBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowerice", "batonpass", "substitute", "signalbeam"], + randomBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowerice", "shadowball", "signalbeam"], randomDoubleBattleMoves: ["thunderbolt", "voltswitch", "hiddenpowergrass", "hiddenpowerice", "helpinghand", "protect", "substitute", "signalbeam"], tier: "RU", + doublesTier: "(DUU)", }, flareon: { inherit: true, - randomBattleMoves: ["flamecharge", "facade", "flareblitz", "superpower", "rest", "sleeptalk"], + randomBattleMoves: ["flamecharge", "facade", "flareblitz", "superpower", "quickattack"], randomDoubleBattleMoves: ["flamecharge", "facade", "flareblitz", "superpower", "wish", "protect", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, espeon: { inherit: true, - randomBattleMoves: ["psychic", "psyshock", "substitute", "shadowball", "calmmind", "morningsun", "batonpass", "dazzlinggleam"], + randomBattleMoves: ["psychic", "psyshock", "substitute", "shadowball", "calmmind", "morningsun", "dazzlinggleam"], randomDoubleBattleMoves: ["psychic", "psyshock", "substitute", "wish", "shadowball", "hiddenpowerfighting", "helpinghand", "protect", "dazzlinggleam"], tier: "UU", + doublesTier: "(DUU)", }, umbreon: { inherit: true, - randomBattleMoves: ["wish", "protect", "healbell", "toxic", "batonpass", "foulplay"], + randomBattleMoves: ["wish", "protect", "healbell", "toxic", "foulplay"], randomDoubleBattleMoves: ["moonlight", "wish", "protect", "healbell", "snarl", "foulplay", "helpinghand"], tier: "UU", + doublesTier: "(DUU)", }, leafeon: { inherit: true, - randomBattleMoves: ["swordsdance", "leafblade", "substitute", "xscissor", "synthesis", "batonpass", "knockoff"], + randomBattleMoves: ["swordsdance", "leafblade", "healbell", "xscissor", "synthesis", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "leafblade", "substitute", "xscissor", "protect", "helpinghand", "knockoff"], tier: "PU", + doublesTier: "(DUU)", }, glaceon: { inherit: true, randomBattleMoves: ["icebeam", "hiddenpowerground", "shadowball", "healbell", "wish", "protect", "toxic"], randomDoubleBattleMoves: ["icebeam", "hiddenpowerground", "shadowball", "wish", "protect", "healbell", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, porygon: { inherit: true, @@ -1028,11 +1133,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["triattack", "icebeam", "recover", "toxic", "thunderwave", "thunderbolt"], randomDoubleBattleMoves: ["triattack", "icebeam", "discharge", "shadowball", "protect", "recover"], tier: "UU", + doublesTier: "DUU", }, porygonz: { randomBattleMoves: ["triattack", "darkpulse", "icebeam", "thunderbolt", "agility", "trick", "nastyplot"], randomDoubleBattleMoves: ["protect", "triattack", "darkpulse", "hiddenpowerfighting", "agility", "trick", "nastyplot"], tier: "UU", + doublesTier: "(DUU)", }, omanyte: { inherit: true, @@ -1043,6 +1150,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["shellsmash", "scald", "icebeam", "earthpower", "spikes", "stealthrock", "hydropump"], randomDoubleBattleMoves: ["shellsmash", "muddywater", "icebeam", "earthpower", "hiddenpowerelectric", "protect", "hydropump"], tier: "NU", + doublesTier: "(DUU)", }, kabuto: { inherit: true, @@ -1053,18 +1161,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["aquajet", "stoneedge", "rapidspin", "swordsdance", "waterfall", "knockoff"], randomDoubleBattleMoves: ["aquajet", "stoneedge", "protect", "rockslide", "swordsdance", "waterfall", "superpower", "knockoff"], tier: "NU", + doublesTier: "(DUU)", }, aerodactyl: { inherit: true, randomBattleMoves: ["stealthrock", "taunt", "stoneedge", "earthquake", "defog", "roost", "doubleedge"], randomDoubleBattleMoves: ["wideguard", "taunt", "stoneedge", "rockslide", "earthquake", "aquatail", "protect", "icefang", "skydrop", "tailwind"], tier: "RU", + doublesTier: "(DUU)", }, aerodactylmega: { randomBattleMoves: ["aquatail", "pursuit", "honeclaws", "stoneedge", "firefang", "aerialace", "roost"], randomDoubleBattleMoves: ["wideguard", "taunt", "stoneedge", "rockslide", "earthquake", "ironhead", "aerialace", "protect", "icefang", "skydrop", "tailwind"], requiredItem: "Aerodactylite", tier: "UU", + doublesTier: "DUU", }, munchlax: { inherit: true, @@ -1076,24 +1187,28 @@ exports.BattleFormatsData = { randomBattleMoves: ["rest", "curse", "sleeptalk", "bodyslam", "earthquake", "return", "firepunch", "crunch", "pursuit", "whirlwind"], randomDoubleBattleMoves: ["curse", "protect", "bodyslam", "earthquake", "return", "firepunch", "icepunch", "crunch", "selfdestruct"], tier: "UU", + doublesTier: "DUU", }, articuno: { inherit: true, randomBattleMoves: ["icebeam", "roost", "freezedry", "toxic", "substitute", "hurricane"], randomDoubleBattleMoves: ["freezedry", "roost", "protect", "substitute", "hurricane", "tailwind"], tier: "PU", + doublesTier: "(DUU)", }, zapdos: { inherit: true, randomBattleMoves: ["thunderbolt", "heatwave", "hiddenpowerice", "roost", "toxic", "uturn", "defog"], randomDoubleBattleMoves: ["thunderbolt", "heatwave", "hiddenpowergrass", "hiddenpowerice", "tailwind", "protect", "discharge"], tier: "OU", + doublesTier: "DOU", }, moltres: { inherit: true, randomBattleMoves: ["fireblast", "hiddenpowergrass", "roost", "substitute", "toxic", "willowisp", "hurricane"], randomDoubleBattleMoves: ["fireblast", "hiddenpowergrass", "airslash", "roost", "substitute", "protect", "uturn", "willowisp", "hurricane", "heatwave", "tailwind"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, dratini: { randomBattleMoves: ["dragondance", "outrage", "waterfall", "fireblast", "extremespeed", "dracometeor", "substitute"], @@ -1108,28 +1223,33 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "outrage", "firepunch", "extremespeed", "earthquake", "roost"], randomDoubleBattleMoves: ["dragondance", "firepunch", "extremespeed", "dragonclaw", "earthquake", "roost", "substitute", "superpower", "dracometeor", "protect", "skydrop"], tier: "OU", + doublesTier: "(DUU)", }, mewtwo: { inherit: true, randomBattleMoves: ["psystrike", "aurasphere", "fireblast", "icebeam", "calmmind", "recover"], randomDoubleBattleMoves: ["psystrike", "aurasphere", "fireblast", "icebeam", "calmmind", "substitute", "recover", "thunderbolt", "willowisp", "taunt", "protect"], tier: "Uber", + doublesTier: "DUber", }, mewtwomegax: { randomBattleMoves: ["bulkup", "drainpunch", "earthquake", "taunt", "stoneedge", "zenheadbutt", "icebeam"], requiredItem: "Mewtwonite X", tier: "Uber", + doublesTier: "DUber", }, mewtwomegay: { randomBattleMoves: ["psystrike", "aurasphere", "shadowball", "fireblast", "icebeam", "calmmind", "recover", "willowisp", "taunt"], requiredItem: "Mewtwonite Y", tier: "Uber", + doublesTier: "DUber", }, mew: { inherit: true, - randomBattleMoves: ["defog", "roost", "willowisp", "knockoff", "taunt", "icebeam", "earthpower", "aurasphere", "stealthrock", "nastyplot", "psyshock", "batonpass"], + randomBattleMoves: ["defog", "roost", "willowisp", "knockoff", "taunt", "icebeam", "earthpower", "aurasphere", "stealthrock", "nastyplot", "psyshock"], randomDoubleBattleMoves: ["taunt", "willowisp", "transform", "roost", "psyshock", "nastyplot", "aurasphere", "fireblast", "icebeam", "thunderbolt", "protect", "fakeout", "helpinghand", "tailwind"], tier: "OU", + doublesTier: "DUU", }, chikorita: { inherit: true, @@ -1145,6 +1265,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["reflect", "lightscreen", "aromatherapy", "leechseed", "toxic", "gigadrain", "synthesis", "dragontail"], randomDoubleBattleMoves: ["reflect", "lightscreen", "aromatherapy", "leechseed", "petalblizzard", "gigadrain", "synthesis", "dragontail", "healpulse", "toxic", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cyndaquil: { inherit: true, @@ -1160,6 +1281,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["eruption", "fireblast", "hiddenpowergrass", "extrasensory", "focusblast"], randomDoubleBattleMoves: ["eruption", "fireblast", "hiddenpowergrass", "extrasensory", "focusblast", "heatwave", "protect"], tier: "RU", + doublesTier: "(DUU)", }, totodile: { inherit: true, @@ -1175,6 +1297,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["aquajet", "waterfall", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake"], randomDoubleBattleMoves: ["aquajet", "waterfall", "crunch", "icepunch", "dragondance", "swordsdance", "earthquake", "protect"], tier: "UU", + doublesTier: "(DUU)", }, sentret: { randomBattleMoves: ["superfang", "trick", "toxic", "uturn", "knockoff"], @@ -1184,6 +1307,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "trick", "aquatail", "firepunch", "knockoff", "doubleedge"], randomDoubleBattleMoves: ["uturn", "suckerpunch", "icepunch", "firepunch", "knockoff", "doubleedge", "superfang", "followme", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, hoothoot: { inherit: true, @@ -1194,26 +1318,29 @@ exports.BattleFormatsData = { randomBattleMoves: ["roost", "whirlwind", "airslash", "nightshade", "toxic", "defog"], randomDoubleBattleMoves: ["roost", "tailwind", "airslash", "hypervoice", "heatwave", "protect", "hypnosis"], tier: "PU", + doublesTier: "(DUU)", }, ledyba: { inherit: true, - randomBattleMoves: ["roost", "agility", "lightscreen", "encore", "reflect", "knockoff", "swordsdance", "batonpass", "toxic"], + randomBattleMoves: ["roost", "lightscreen", "encore", "reflect", "knockoff", "toxic"], tier: "LC", }, ledian: { randomBattleMoves: ["roost", "lightscreen", "encore", "reflect", "knockoff", "toxic", "uturn"], randomDoubleBattleMoves: ["protect", "lightscreen", "encore", "reflect", "knockoff", "bugbuzz", "uturn", "tailwind"], tier: "PU", + doublesTier: "(DUU)", }, spinarak: { inherit: true, - randomBattleMoves: ["agility", "toxic", "xscissor", "toxicspikes", "poisonjab", "batonpass", "stickyweb"], + randomBattleMoves: ["toxic", "xscissor", "toxicspikes", "poisonjab", "stickyweb"], tier: "LC", }, ariados: { randomBattleMoves: ["megahorn", "toxicspikes", "poisonjab", "suckerpunch", "stickyweb"], randomDoubleBattleMoves: ["protect", "megahorn", "stringshot", "poisonjab", "stickyweb", "ragepowder"], tier: "PU", + doublesTier: "(DUU)", }, chinchou: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowergrass", "hydropump", "icebeam", "surf", "thunderwave", "scald", "discharge", "healbell"], @@ -1223,6 +1350,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "hydropump", "icebeam", "thunderwave", "scald", "thunderbolt", "healbell", "toxic"], randomDoubleBattleMoves: ["thunderbolt", "hiddenpowergrass", "hydropump", "icebeam", "thunderwave", "scald", "discharge", "protect", "surf"], tier: "NU", + doublesTier: "DUU", }, togepi: { inherit: true, @@ -1230,14 +1358,16 @@ exports.BattleFormatsData = { tier: "LC", }, togetic: { - randomBattleMoves: ["nastyplot", "dazzlinggleam", "fireblast", "batonpass", "roost", "defog", "toxic", "thunderwave", "healbell"], + randomBattleMoves: ["nastyplot", "dazzlinggleam", "fireblast", "roost", "defog", "toxic", "thunderwave", "healbell"], tier: "RU", + doublesTier: "DUU", }, togekiss: { inherit: true, - randomBattleMoves: ["roost", "thunderwave", "nastyplot", "airslash", "aurasphere", "batonpass", "healbell", "defog"], + randomBattleMoves: ["roost", "thunderwave", "nastyplot", "airslash", "aurasphere", "healbell", "defog"], randomDoubleBattleMoves: ["roost", "thunderwave", "nastyplot", "airslash", "followme", "dazzlinggleam", "tailwind", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "DOU", }, natu: { inherit: true, @@ -1245,9 +1375,10 @@ exports.BattleFormatsData = { tier: "LC", }, xatu: { - randomBattleMoves: ["thunderwave", "toxic", "roost", "psychic", "uturn", "reflect", "lightscreen", "nightshade", "heatwave"], + randomBattleMoves: ["thunderwave", "toxic", "roost", "psychic", "uturn", "reflect", "calmmind", "nightshade", "heatwave"], randomDoubleBattleMoves: ["thunderwave", "tailwind", "roost", "psychic", "uturn", "reflect", "lightscreen", "grassknot", "heatwave", "protect"], tier: "NU", + doublesTier: "(DUU)", }, mareep: { inherit: true, @@ -1262,12 +1393,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["voltswitch", "reflect", "lightscreen", "focusblast", "thunderbolt", "toxic", "healbell", "hiddenpowerice"], randomDoubleBattleMoves: ["focusblast", "hiddenpowerice", "hiddenpowergrass", "thunderbolt", "discharge", "dragonpulse", "protect"], tier: "PU", + doublesTier: "(DUU)", }, ampharosmega: { randomBattleMoves: ["voltswitch", "focusblast", "agility", "thunderbolt", "healbell", "dragonpulse"], randomDoubleBattleMoves: ["focusblast", "hiddenpowerice", "hiddenpowergrass", "thunderbolt", "discharge", "dragonpulse", "protect"], requiredItem: "Ampharosite", tier: "UU", + doublesTier: "(DUU)", }, azurill: { randomBattleMoves: ["scald", "return", "bodyslam", "encore", "toxic", "protect", "knockoff"], @@ -1281,6 +1414,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["waterfall", "aquajet", "playrough", "superpower", "bellydrum", "knockoff"], randomDoubleBattleMoves: ["waterfall", "aquajet", "playrough", "superpower", "bellydrum", "knockoff", "protect"], tier: "OU", + doublesTier: "DOU", }, bonsly: { randomBattleMoves: ["rockslide", "brickbreak", "doubleedge", "toxic", "stealthrock", "suckerpunch", "explosion"], @@ -1290,6 +1424,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stoneedge", "earthquake", "suckerpunch", "woodhammer", "toxic", "stealthrock"], randomDoubleBattleMoves: ["stoneedge", "earthquake", "suckerpunch", "woodhammer", "explosion", "stealthrock", "rockslide", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, hoppip: { randomBattleMoves: ["encore", "sleeppowder", "uturn", "toxic", "leechseed", "substitute", "protect"], @@ -1304,6 +1439,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "sleeppowder", "uturn", "encore", "toxic", "acrobatics", "leechseed", "seedbomb", "substitute"], randomDoubleBattleMoves: ["encore", "sleeppowder", "uturn", "helpinghand", "leechseed", "gigadrain", "ragepowder", "protect"], tier: "PU", + doublesTier: "(DUU)", }, aipom: { inherit: true, @@ -1311,9 +1447,10 @@ exports.BattleFormatsData = { tier: "LC", }, ambipom: { - randomBattleMoves: ["fakeout", "return", "knockoff", "uturn", "switcheroo", "seedbomb", "acrobatics", "lowkick"], + randomBattleMoves: ["fakeout", "return", "knockoff", "uturn", "switcheroo", "seedbomb", "lowkick", "acrobatics"], randomDoubleBattleMoves: ["fakeout", "return", "knockoff", "uturn", "doublehit", "icepunch", "lowkick", "protect"], tier: "RU", + doublesTier: "DUU", }, sunkern: { inherit: true, @@ -1324,6 +1461,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["sunnyday", "gigadrain", "solarbeam", "hiddenpowerfire", "earthpower"], randomDoubleBattleMoves: ["sunnyday", "gigadrain", "solarbeam", "hiddenpowerfire", "hiddenpowerice", "earthpower", "protect", "encore"], tier: "PU", + doublesTier: "(DUU)", }, yanma: { randomBattleMoves: ["bugbuzz", "airslash", "hiddenpowerground", "uturn", "protect", "gigadrain", "ancientpower"], @@ -1331,7 +1469,8 @@ exports.BattleFormatsData = { }, yanmega: { randomBattleMoves: ["bugbuzz", "airslash", "ancientpower", "uturn", "protect", "gigadrain"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, wooper: { randomBattleMoves: ["recover", "earthquake", "scald", "toxic", "stockpile", "yawn", "protect"], @@ -1340,7 +1479,8 @@ exports.BattleFormatsData = { quagsire: { randomBattleMoves: ["recover", "earthquake", "scald", "toxic", "encore", "icebeam"], randomDoubleBattleMoves: ["icywind", "earthquake", "waterfall", "scald", "rockslide", "curse", "yawn", "icepunch", "protect"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, murkrow: { inherit: true, @@ -1350,21 +1490,25 @@ exports.BattleFormatsData = { honchkrow: { randomBattleMoves: ["substitute", "superpower", "suckerpunch", "bravebird", "roost", "heatwave", "pursuit"], randomDoubleBattleMoves: ["substitute", "superpower", "suckerpunch", "bravebird", "roost", "heatwave", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, misdreavus: { inherit: true, randomBattleMoves: ["nastyplot", "thunderbolt", "dazzlinggleam", "willowisp", "shadowball", "taunt", "painsplit"], tier: "PU", + doublesTier: "LC Uber", }, mismagius: { randomBattleMoves: ["nastyplot", "substitute", "willowisp", "shadowball", "thunderbolt", "dazzlinggleam", "taunt", "painsplit", "destinybond"], randomDoubleBattleMoves: ["nastyplot", "substitute", "willowisp", "shadowball", "thunderbolt", "dazzlinggleam", "taunt", "protect"], tier: "NU", + doublesTier: "(DUU)", }, unown: { randomBattleMoves: ["hiddenpowerpsychic"], tier: "PU", + doublesTier: "(DUU)", }, wynaut: { inherit: true, @@ -1375,11 +1519,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["counter", "mirrorcoat", "encore", "destinybond", "safeguard"], tier: "PU", + doublesTier: "(DUU)", }, girafarig: { - randomBattleMoves: ["psychic", "psyshock", "thunderbolt", "nastyplot", "batonpass", "substitute", "hypervoice"], + randomBattleMoves: ["psychic", "psyshock", "thunderbolt", "nastyplot", "substitute", "hypervoice"], randomDoubleBattleMoves: ["psychic", "psyshock", "thunderbolt", "nastyplot", "protect", "agility", "hypervoice"], tier: "PU", + doublesTier: "(DUU)", }, pineco: { inherit: true, @@ -1390,21 +1536,25 @@ exports.BattleFormatsData = { randomBattleMoves: ["rapidspin", "toxic", "spikes", "voltswitch", "stealthrock", "gyroball"], randomDoubleBattleMoves: ["rockslide", "drillrun", "toxic", "voltswitch", "stealthrock", "gyroball", "protect"], tier: "UU", + doublesTier: "(DUU)", }, dunsparce: { randomBattleMoves: ["coil", "rockslide", "bite", "headbutt", "glare", "bodyslam", "roost"], randomDoubleBattleMoves: ["coil", "rockslide", "bite", "headbutt", "glare", "bodyslam", "protect"], tier: "PU", + doublesTier: "(DUU)", }, gligar: { inherit: true, randomBattleMoves: ["stealthrock", "toxic", "roost", "defog", "earthquake", "uturn", "knockoff"], tier: "UU", + doublesTier: "LC Uber", }, gliscor: { randomBattleMoves: ["roost", "substitute", "taunt", "earthquake", "protect", "toxic", "stealthrock", "knockoff"], randomDoubleBattleMoves: ["tailwind", "substitute", "taunt", "earthquake", "protect", "stoneedge", "knockoff"], tier: "OU", + doublesTier: "(DUU)", }, snubbull: { inherit: true, @@ -1415,41 +1565,48 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderwave", "playrough", "crunch", "earthquake", "healbell"], randomDoubleBattleMoves: ["thunderwave", "playrough", "crunch", "earthquake", "snarl", "rockslide", "protect"], tier: "RU", + doublesTier: "(DUU)", }, qwilfish: { inherit: true, randomBattleMoves: ["toxicspikes", "waterfall", "spikes", "painsplit", "thunderwave", "taunt", "destinybond"], randomDoubleBattleMoves: ["poisonjab", "waterfall", "swordsdance", "protect", "thunderwave", "taunt", "destinybond"], tier: "RU", + doublesTier: "(DUU)", }, shuckle: { inherit: true, randomBattleMoves: ["toxic", "encore", "stealthrock", "knockoff", "stickyweb", "infestation"], randomDoubleBattleMoves: ["encore", "stealthrock", "knockoff", "stickyweb", "guardsplit", "powersplit", "toxic", "helpinghand"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, heracross: { inherit: true, randomBattleMoves: ["closecombat", "megahorn", "stoneedge", "swordsdance", "knockoff", "earthquake"], randomDoubleBattleMoves: ["closecombat", "megahorn", "stoneedge", "swordsdance", "knockoff", "earthquake", "protect"], tier: "UU", + doublesTier: "(DUU)", }, heracrossmega: { randomBattleMoves: ["closecombat", "pinmissile", "rockblast", "swordsdance", "bulletseed", "substitute"], randomDoubleBattleMoves: ["closecombat", "pinmissile", "rockblast", "swordsdance", "bulletseed", "knockoff", "earthquake", "protect"], requiredItem: "Heracronite", tier: "OU", + doublesTier: "(DUU)", }, sneasel: { inherit: true, randomBattleMoves: ["iceshard", "iciclecrash", "lowkick", "pursuit", "swordsdance", "knockoff"], tier: "RU", + doublesTier: "LC Uber", }, weavile: { inherit: true, randomBattleMoves: ["iceshard", "iciclecrash", "knockoff", "pursuit", "swordsdance", "lowkick"], randomDoubleBattleMoves: ["iceshard", "iciclecrash", "knockoff", "fakeout", "swordsdance", "lowkick", "taunt", "protect", "feint"], tier: "OU", + doublesTier: "DOU", }, teddiursa: { inherit: true, @@ -1460,6 +1617,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "facade", "closecombat", "crunch", "protect"], randomDoubleBattleMoves: ["swordsdance", "facade", "closecombat", "earthquake", "crunch", "protect"], tier: "PU", + doublesTier: "(DUU)", }, slugma: { randomBattleMoves: ["stockpile", "recover", "lavaplume", "willowisp", "toxic", "hiddenpowergrass", "earthpower", "memento"], @@ -1470,6 +1628,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["recover", "lavaplume", "toxic", "hiddenpowergrass", "stealthrock", "fireblast", "earthpower", "shellsmash", "ancientpower"], randomDoubleBattleMoves: ["protect", "heatwave", "willowisp", "shellsmash", "hiddenpowergrass", "ancientpower", "stealthrock", "fireblast", "earthpower"], tier: "PU", + doublesTier: "(DUU)", }, swinub: { inherit: true, @@ -1477,20 +1636,23 @@ exports.BattleFormatsData = { tier: "LC", }, piloswine: { - randomBattleMoves: ["earthquake", "iciclecrash", "iceshard", "superpower", "endeavor", "stealthrock"], + randomBattleMoves: ["earthquake", "iciclecrash", "iceshard", "endeavor", "stealthrock"], tier: "NU", + doublesTier: "NFE", }, mamoswine: { inherit: true, randomBattleMoves: ["iceshard", "earthquake", "endeavor", "iciclecrash", "stealthrock", "superpower", "knockoff"], randomDoubleBattleMoves: ["iceshard", "earthquake", "rockslide", "iciclecrash", "protect", "superpower", "knockoff"], tier: "UU", + doublesTier: "(DUU)", }, corsola: { inherit: true, randomBattleMoves: ["recover", "toxic", "powergem", "scald", "stealthrock"], randomDoubleBattleMoves: ["protect", "icywind", "powergem", "scald", "stealthrock", "earthpower", "icebeam"], tier: "PU", + doublesTier: "(DUU)", }, remoraid: { randomBattleMoves: ["waterspout", "hydropump", "fireblast", "hiddenpowerground", "icebeam", "seedbomb", "rockblast"], @@ -1501,12 +1663,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "fireblast", "icebeam", "energyball", "rockblast", "gunkshot", "scald"], randomDoubleBattleMoves: ["hydropump", "surf", "fireblast", "icebeam", "energyball", "chargebeam", "protect"], tier: "PU", + doublesTier: "(DUU)", }, delibird: { inherit: true, randomBattleMoves: ["rapidspin", "iceshard", "icepunch", "aerialace", "spikes", "destinybond"], randomDoubleBattleMoves: ["fakeout", "iceshard", "icepunch", "aerialace", "brickbreak", "protect"], tier: "PU", + doublesTier: "(DUU)", }, mantyke: { randomBattleMoves: ["raindance", "hydropump", "scald", "airslash", "icebeam", "rest", "sleeptalk", "toxic"], @@ -1517,11 +1681,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "airslash", "rest", "sleeptalk", "toxic", "defog"], randomDoubleBattleMoves: ["raindance", "hydropump", "scald", "airslash", "icebeam", "tailwind", "wideguard", "helpinghand", "protect", "surf"], tier: "NU", + doublesTier: "(DUU)", }, skarmory: { randomBattleMoves: ["whirlwind", "bravebird", "roost", "spikes", "stealthrock", "defog"], randomDoubleBattleMoves: ["skydrop", "bravebird", "tailwind", "taunt", "feint", "protect", "ironhead"], tier: "OU", + doublesTier: "(DUU)", }, houndour: { inherit: true, @@ -1533,12 +1699,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["nastyplot", "darkpulse", "suckerpunch", "fireblast", "hiddenpowergrass"], randomDoubleBattleMoves: ["nastyplot", "darkpulse", "suckerpunch", "heatwave", "hiddenpowerfighting", "protect"], tier: "RU", + doublesTier: "(DUU)", }, houndoommega: { randomBattleMoves: ["nastyplot", "darkpulse", "taunt", "fireblast", "hiddenpowergrass"], randomDoubleBattleMoves: ["nastyplot", "darkpulse", "taunt", "heatwave", "hiddenpowergrass", "protect"], requiredItem: "Houndoominite", - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, phanpy: { randomBattleMoves: ["stealthrock", "earthquake", "iceshard", "headsmash", "knockoff", "seedbomb", "superpower", "playrough"], @@ -1548,42 +1716,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "rapidspin", "iceshard", "earthquake", "knockoff", "stoneedge"], randomDoubleBattleMoves: ["stealthrock", "knockoff", "iceshard", "earthquake", "rockslide", "protect"], tier: "UU", + doublesTier: "(DUU)", }, stantler: { inherit: true, randomBattleMoves: ["doubleedge", "megahorn", "jumpkick", "earthquake", "suckerpunch"], randomDoubleBattleMoves: ["return", "megahorn", "jumpkick", "earthquake", "suckerpunch", "protect"], tier: "PU", + doublesTier: "(DUU)", }, smeargle: { inherit: true, - randomBattleMoves: ["spore", "spikes", "stealthrock", "destinybond", "whirlwind", "stickyweb"], + randomBattleMoves: ["spore", "stealthrock", "destinybond", "whirlwind", "stickyweb"], randomDoubleBattleMoves: ["spore", "fakeout", "wideguard", "helpinghand", "followme", "tailwind", "kingsshield", "transform"], tier: "PU", + doublesTier: "(DUU)", }, miltank: { inherit: true, randomBattleMoves: ["milkdrink", "stealthrock", "bodyslam", "healbell", "curse", "earthquake", "toxic"], randomDoubleBattleMoves: ["protect", "helpinghand", "bodyslam", "healbell", "curse", "earthquake", "thunderwave"], tier: "NU", + doublesTier: "(DUU)", }, raikou: { inherit: true, randomBattleMoves: ["thunderbolt", "hiddenpowerice", "aurasphere", "calmmind", "substitute", "voltswitch", "extrasensory"], randomDoubleBattleMoves: ["thunderbolt", "hiddenpowerice", "extrasensory", "calmmind", "substitute", "snarl", "protect"], tier: "OU", + doublesTier: "(DUU)", }, entei: { inherit: true, randomBattleMoves: ["extremespeed", "flareblitz", "bulldoze", "stoneedge", "sacredfire"], randomDoubleBattleMoves: ["extremespeed", "flareblitz", "ironhead", "bulldoze", "stoneedge", "sacredfire", "protect"], tier: "UU", + doublesTier: "DUU", }, suicune: { inherit: true, randomBattleMoves: ["hydropump", "icebeam", "scald", "hiddenpowergrass", "rest", "sleeptalk", "calmmind"], randomDoubleBattleMoves: ["hydropump", "icebeam", "scald", "hiddenpowergrass", "snarl", "tailwind", "protect", "calmmind"], tier: "UU", + doublesTier: "DOU", }, larvitar: { inherit: true, @@ -1599,30 +1774,35 @@ exports.BattleFormatsData = { randomBattleMoves: ["crunch", "stoneedge", "pursuit", "earthquake", "fireblast", "icebeam", "stealthrock"], randomDoubleBattleMoves: ["crunch", "stoneedge", "rockslide", "earthquake", "firepunch", "icepunch", "stealthrock", "protect"], tier: "OU", + doublesTier: "DOU", }, tyranitarmega: { randomBattleMoves: ["crunch", "stoneedge", "earthquake", "icepunch", "dragondance"], randomDoubleBattleMoves: ["crunch", "stoneedge", "earthquake", "icepunch", "dragondance", "rockslide", "protect"], requiredItem: "Tyranitarite", tier: "(OU)", + doublesTier: "(DOU)", }, lugia: { inherit: true, randomBattleMoves: ["toxic", "roost", "substitute", "whirlwind", "thunderwave", "dragontail", "aeroblast"], randomDoubleBattleMoves: ["aeroblast", "roost", "substitute", "tailwind", "icebeam", "psychic", "calmmind", "skydrop", "protect"], tier: "Uber", + doublesTier: "DUber", }, hooh: { inherit: true, randomBattleMoves: ["substitute", "sacredfire", "bravebird", "earthquake", "roost", "toxic", "flamecharge"], randomDoubleBattleMoves: ["substitute", "sacredfire", "bravebird", "earthquake", "roost", "toxic", "tailwind", "skydrop", "protect"], tier: "Uber", + doublesTier: "DUber", }, celebi: { inherit: true, - randomBattleMoves: ["nastyplot", "psychic", "gigadrain", "recover", "healbell", "batonpass", "earthpower", "hiddenpowerfire", "leafstorm", "uturn", "thunderwave"], + randomBattleMoves: ["nastyplot", "psychic", "gigadrain", "recover", "healbell", "earthpower", "hiddenpowerfire", "leafstorm", "uturn", "thunderwave"], randomDoubleBattleMoves: ["protect", "psychic", "gigadrain", "leechseed", "recover", "earthpower", "hiddenpowerfire", "nastyplot", "leafstorm", "uturn", "thunderwave"], tier: "UU", + doublesTier: "(DUU)", }, treecko: { inherit: true, @@ -1635,34 +1815,39 @@ exports.BattleFormatsData = { }, sceptile: { inherit: true, - randomBattleMoves: ["substitute", "gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "hiddenpowerfire"], + randomBattleMoves: ["gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "hiddenpowerflying"], randomDoubleBattleMoves: ["substitute", "gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "hiddenpowerfire", "protect"], - tier: "BL3", + tier: "NUBL", + doublesTier: "(DUU)", }, sceptilemega: { randomBattleMoves: ["substitute", "gigadrain", "dragonpulse", "focusblast", "swordsdance", "outrage", "leafblade", "earthquake", "hiddenpowerfire"], randomDoubleBattleMoves: ["substitute", "gigadrain", "leafstorm", "hiddenpowerice", "focusblast", "dragonpulse", "hiddenpowerfire", "protect"], requiredItem: "Sceptilite", tier: "UU", + doublesTier: "DUU", }, torchic: { inherit: true, - randomBattleMoves: ["protect", "batonpass", "substitute", "hiddenpowergrass", "swordsdance", "firepledge"], + randomBattleMoves: ["protect", "substitute", "hiddenpowergrass", "swordsdance", "firepledge"], tier: "LC", }, combusken: { - randomBattleMoves: ["flareblitz", "skyuppercut", "protect", "swordsdance", "substitute", "batonpass", "shadowclaw"], + randomBattleMoves: ["flareblitz", "skyuppercut", "protect", "swordsdance", "shadowclaw"], tier: "PU", + doublesTier: "NFE", }, blaziken: { inherit: true, - randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "substitute", "batonpass", "stoneedge", "knockoff"], + randomBattleMoves: ["blazekick", "highjumpkick", "protect", "swordsdance", "stoneedge", "knockoff"], tier: "Uber", + doublesTier: "(DUU)", }, blazikenmega: { - randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "substitute", "batonpass", "stoneedge", "knockoff"], + randomBattleMoves: ["flareblitz", "highjumpkick", "protect", "swordsdance", "stoneedge", "knockoff"], requiredItem: "Blazikenite", tier: "Uber", + doublesTier: "(DUU)", }, mudkip: { inherit: true, @@ -1678,12 +1863,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "scald", "icebeam", "roar", "toxic", "protect"], randomDoubleBattleMoves: ["waterfall", "earthquake", "icebeam", "stealthrock", "wideguard", "scald", "rockslide", "muddywater", "protect", "icywind"], tier: "UU", + doublesTier: "(DUU)", }, swampertmega: { randomBattleMoves: ["raindance", "waterfall", "earthquake", "icepunch", "superpower"], randomDoubleBattleMoves: ["waterfall", "earthquake", "raindance", "icepunch", "superpower", "protect"], requiredItem: "Swampertite", tier: "UU", + doublesTier: "(DUU)", }, poochyena: { inherit: true, @@ -1694,6 +1881,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["crunch", "suckerpunch", "playrough", "firefang", "irontail"], randomDoubleBattleMoves: ["suckerpunch", "crunch", "playrough", "firefang", "taunt", "protect"], tier: "PU", + doublesTier: "(DUU)", }, zigzagoon: { inherit: true, @@ -1704,7 +1892,8 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["bellydrum", "extremespeed", "seedbomb", "shadowclaw"], randomDoubleBattleMoves: ["bellydrum", "extremespeed", "seedbomb", "protect", "shadowclaw"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, wurmple: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], @@ -1718,6 +1907,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["quiverdance", "bugbuzz", "aircutter", "psychic", "gigadrain", "hiddenpowerrock"], randomDoubleBattleMoves: ["quiverdance", "bugbuzz", "gigadrain", "hiddenpowerrock", "aircutter", "tailwind", "stringshot", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cascoon: { randomBattleMoves: ["bugbite", "poisonsting", "tackle", "electroweb"], @@ -1727,6 +1917,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["roost", "defog", "bugbuzz", "sludgebomb", "quiverdance", "uturn", "shadowball"], randomDoubleBattleMoves: ["tailwind", "stringshot", "strugglebug", "bugbuzz", "protect", "sludgebomb", "quiverdance", "shadowball"], tier: "PU", + doublesTier: "(DUU)", }, lotad: { inherit: true, @@ -1742,6 +1933,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["raindance", "hydropump", "scald", "gigadrain", "icebeam", "focusblast"], randomDoubleBattleMoves: ["raindance", "hydropump", "surf", "gigadrain", "icebeam", "fakeout", "protect"], tier: "NU", + doublesTier: "DOU", }, seedot: { inherit: true, @@ -1756,6 +1948,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["leafstorm", "swordsdance", "leafblade", "suckerpunch", "defog", "lowkick", "knockoff"], randomDoubleBattleMoves: ["leafstorm", "swordsdance", "leafblade", "suckerpunch", "knockoff", "lowkick", "fakeout", "protect"], tier: "NU", + doublesTier: "(DUU)", }, taillow: { inherit: true, @@ -1767,6 +1960,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["protect", "facade", "bravebird", "uturn", "quickattack"], randomDoubleBattleMoves: ["bravebird", "facade", "quickattack", "uturn", "protect"], tier: "NU", + doublesTier: "(DUU)", }, wingull: { randomBattleMoves: ["scald", "icebeam", "tailwind", "uturn", "airslash", "knockoff", "defog"], @@ -1776,6 +1970,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "uturn", "hurricane", "toxic", "roost", "defog", "knockoff"], randomDoubleBattleMoves: ["scald", "surf", "hurricane", "wideguard", "protect", "tailwind", "knockoff"], tier: "PU", + doublesTier: "(DUU)", }, ralts: { inherit: true, @@ -1791,23 +1986,27 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "thunderbolt", "focusblast", "shadowball", "moonblast", "calmmind", "substitute", "willowisp"], randomDoubleBattleMoves: ["psyshock", "focusblast", "shadowball", "moonblast", "taunt", "willowisp", "thunderbolt", "trickroom", "helpinghand", "protect", "dazzlinggleam"], tier: "UU", + doublesTier: "DUU", }, gardevoirmega: { randomBattleMoves: ["calmmind", "hypervoice", "psyshock", "focusblast", "substitute", "taunt", "willowisp"], randomDoubleBattleMoves: ["psyshock", "focusblast", "shadowball", "calmmind", "thunderbolt", "hypervoice", "protect"], requiredItem: "Gardevoirite", tier: "OU", + doublesTier: "DOU", }, gallade: { randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "shadowsneak", "closecombat", "zenheadbutt", "knockoff", "trick"], randomDoubleBattleMoves: ["closecombat", "trick", "stoneedge", "shadowsneak", "drainpunch", "icepunch", "zenheadbutt", "knockoff", "trickroom", "protect", "helpinghand"], tier: "RU", + doublesTier: "(DUU)", }, gallademega: { randomBattleMoves: ["swordsdance", "closecombat", "drainpunch", "knockoff", "zenheadbutt", "substitute"], randomDoubleBattleMoves: ["closecombat", "stoneedge", "drainpunch", "icepunch", "zenheadbutt", "swordsdance", "knockoff", "protect"], requiredItem: "Galladite", - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, surskit: { inherit: true, @@ -1815,9 +2014,10 @@ exports.BattleFormatsData = { tier: "LC", }, masquerain: { - randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "hydropump", "roost", "batonpass", "stickyweb"], + randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "hydropump", "roost", "stickyweb"], randomDoubleBattleMoves: ["hydropump", "bugbuzz", "airslash", "quiverdance", "tailwind", "roost", "strugglebug", "protect"], tier: "PU", + doublesTier: "(DUU)", }, shroomish: { inherit: true, @@ -1828,6 +2028,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["spore", "machpunch", "bulletseed", "rocktomb", "swordsdance"], randomDoubleBattleMoves: ["spore", "helpinghand", "machpunch", "bulletseed", "rocktomb", "protect", "drainpunch"], tier: "OU", + doublesTier: "DOU", }, slakoth: { randomBattleMoves: ["doubleedge", "hammerarm", "firepunch", "counter", "retaliate", "toxic"], @@ -1835,27 +2036,31 @@ exports.BattleFormatsData = { }, vigoroth: { randomBattleMoves: ["bulkup", "return", "earthquake", "firepunch", "suckerpunch", "slackoff", "icepunch", "lowkick"], - tier: "BL4", + tier: "PUBL", + doublesTier: "NFE", }, slaking: { inherit: true, - randomBattleMoves: ["earthquake", "pursuit", "nightslash", "doubleedge", "retaliate"], + randomBattleMoves: ["earthquake", "pursuit", "nightslash", "retaliate", "gigaimpact", "firepunch"], randomDoubleBattleMoves: ["earthquake", "nightslash", "doubleedge", "retaliate", "hammerarm", "rockslide"], tier: "PU", + doublesTier: "(DUU)", }, nincada: { randomBattleMoves: ["xscissor", "dig", "aerialace", "nightslash"], tier: "LC", }, ninjask: { - randomBattleMoves: ["batonpass", "swordsdance", "substitute", "protect", "xscissor"], - randomDoubleBattleMoves: ["batonpass", "swordsdance", "substitute", "protect", "xscissor", "aerialace"], + randomBattleMoves: ["swordsdance", "aerialace", "nightslash", "xscissor", "uturn"], + randomDoubleBattleMoves: ["swordsdance", "aerialace", "nightslash", "xscissor", "protect"], tier: "PU", + doublesTier: "(DUU)", }, shedinja: { inherit: true, - randomBattleMoves: ["swordsdance", "willowisp", "xscissor", "shadowsneak", "shadowclaw", "batonpass"], + randomBattleMoves: ["swordsdance", "willowisp", "xscissor", "shadowsneak", "shadowclaw"], tier: "PU", + doublesTier: "(DUU)", }, whismur: { inherit: true, @@ -1871,6 +2076,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["boomburst", "fireblast", "icebeam", "surf", "focusblast"], randomDoubleBattleMoves: ["boomburst", "fireblast", "icebeam", "surf", "focusblast", "protect", "hypervoice"], tier: "RU", + doublesTier: "(DUU)", }, makuhita: { inherit: true, @@ -1881,6 +2087,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["bulletpunch", "closecombat", "icepunch", "stoneedge", "bulkup", "knockoff"], randomDoubleBattleMoves: ["bulletpunch", "closecombat", "icepunch", "stoneedge", "fakeout", "knockoff", "helpinghand", "wideguard", "protect"], tier: "NU", + doublesTier: "DUU", }, nosepass: { inherit: true, @@ -1888,9 +2095,10 @@ exports.BattleFormatsData = { tier: "LC", }, probopass: { - randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "flashcannon", "powergem", "voltswitch", "painsplit"], + randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "flashcannon", "earthpower", "voltswitch"], randomDoubleBattleMoves: ["stealthrock", "thunderwave", "helpinghand", "earthpower", "powergem", "wideguard", "protect", "voltswitch"], tier: "PU", + doublesTier: "(DUU)", }, skitty: { inherit: true, @@ -1902,30 +2110,35 @@ exports.BattleFormatsData = { randomBattleMoves: ["doubleedge", "suckerpunch", "wildcharge", "fakeout", "thunderwave", "healbell"], randomDoubleBattleMoves: ["doubleedge", "suckerpunch", "playrough", "wildcharge", "fakeout", "thunderwave", "protect", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, sableye: { inherit: true, randomBattleMoves: ["recover", "willowisp", "taunt", "toxic", "knockoff", "foulplay"], randomDoubleBattleMoves: ["recover", "willowisp", "taunt", "fakeout", "knockoff", "foulplay", "helpinghand", "snarl", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "DUU", }, sableyemega: { randomBattleMoves: ["recover", "willowisp", "darkpulse", "calmmind", "shadowball"], randomDoubleBattleMoves: ["fakeout", "knockoff", "darkpulse", "shadowball", "willowisp", "protect"], requiredItem: "Sablenite", tier: "Uber", + doublesTier: "DUU", }, mawile: { inherit: true, - randomBattleMoves: ["swordsdance", "ironhead", "substitute", "playrough", "suckerpunch", "batonpass"], + randomBattleMoves: ["swordsdance", "ironhead", "stealthrock", "playrough", "suckerpunch", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "ironhead", "firefang", "substitute", "playrough", "suckerpunch", "knockoff", "protect"], tier: "PU", + doublesTier: "(DUU)", }, mawilemega: { randomBattleMoves: ["swordsdance", "ironhead", "firefang", "substitute", "playrough", "suckerpunch", "knockoff", "focuspunch"], randomDoubleBattleMoves: ["swordsdance", "ironhead", "firefang", "substitute", "playrough", "suckerpunch", "knockoff", "protect"], requiredItem: "Mawilite", tier: "Uber", + doublesTier: "(DUU)", }, aron: { randomBattleMoves: ["headsmash", "ironhead", "earthquake", "superpower", "stealthrock", "endeavor"], @@ -1940,12 +2153,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["autotomize", "headsmash", "earthquake", "lowkick", "heavyslam", "aquatail", "stealthrock"], randomDoubleBattleMoves: ["rockslide", "headsmash", "earthquake", "lowkick", "heavyslam", "aquatail", "stealthrock", "protect"], tier: "NU", + doublesTier: "(DUU)", }, aggronmega: { - randomBattleMoves: ["earthquake", "heavyslam", "icepunch", "stealthrock", "thunderwave", "roar", "toxic"], + randomBattleMoves: ["earthquake", "heavyslam", "rockslide", "stealthrock", "thunderwave", "roar", "toxic"], randomDoubleBattleMoves: ["rockslide", "earthquake", "lowkick", "heavyslam", "aquatail", "protect"], requiredItem: "Aggronite", tier: "UU", + doublesTier: "(DUU)", }, meditite: { inherit: true, @@ -1956,12 +2171,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["highjumpkick", "drainpunch", "zenheadbutt", "icepunch", "bulletpunch"], randomDoubleBattleMoves: ["highjumpkick", "drainpunch", "zenheadbutt", "icepunch", "bulletpunch", "protect", "fakeout"], tier: "RU", + doublesTier: "(DUU)", }, medichammega: { randomBattleMoves: ["highjumpkick", "drainpunch", "icepunch", "fakeout", "zenheadbutt"], randomDoubleBattleMoves: ["highjumpkick", "drainpunch", "zenheadbutt", "icepunch", "bulletpunch", "protect", "fakeout"], requiredItem: "Medichamite", tier: "OU", + doublesTier: "(DUU)", }, electrike: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "switcheroo", "flamethrower", "hiddenpowergrass"], @@ -1972,34 +2189,40 @@ exports.BattleFormatsData = { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat", "flamethrower"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat", "flamethrower", "snarl", "protect"], tier: "NU", + doublesTier: "(DUU)", }, manectricmega: { randomBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "hiddenpowerice", "hiddenpowergrass", "overheat", "flamethrower", "snarl", "protect"], requiredItem: "Manectite", tier: "OU", + doublesTier: "(DUU)", }, plusle: { inherit: true, - randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "batonpass", "hiddenpowerice", "encore"], + randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "hiddenpowerice", "encore"], randomDoubleBattleMoves: ["nastyplot", "thunderbolt", "substitute", "protect", "hiddenpowerice", "encore", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, minun: { inherit: true, - randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "batonpass", "hiddenpowerice", "encore"], + randomBattleMoves: ["nastyplot", "thunderbolt", "substitute", "hiddenpowerice", "encore"], randomDoubleBattleMoves: ["nastyplot", "thunderbolt", "substitute", "protect", "hiddenpowerice", "encore", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, volbeat: { - randomBattleMoves: ["tailglow", "batonpass", "substitute", "bugbuzz", "thunderwave", "encore", "tailwind"], - randomDoubleBattleMoves: ["stringshot", "strugglebug", "helpinghand", "bugbuzz", "thunderwave", "encore", "tailwind", "protect"], + randomBattleMoves: ["uturn", "roost", "thunderwave", "encore", "tailwind"], + randomDoubleBattleMoves: ["stringshot", "strugglebug", "helpinghand", "thunderwave", "encore", "tailwind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, illumise: { - randomBattleMoves: ["substitute", "batonpass", "bugbuzz", "encore", "thunderbolt", "tailwind", "uturn", "thunderwave"], + randomBattleMoves: ["uturn", "roost", "bugbuzz", "thunderwave", "encore", "wish"], randomDoubleBattleMoves: ["protect", "helpinghand", "bugbuzz", "encore", "thunderbolt", "tailwind", "uturn"], tier: "PU", + doublesTier: "(DUU)", }, budew: { randomBattleMoves: ["spikes", "sludgebomb", "sleeppowder", "gigadrain", "stunspore", "rest"], @@ -2009,11 +2232,13 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["spikes", "toxicspikes", "sleeppowder", "gigadrain", "stunspore", "rest", "sludgebomb", "synthesis"], tier: "PU", + doublesTier: "NFE", }, roserade: { randomBattleMoves: ["sludgebomb", "gigadrain", "sleeppowder", "leafstorm", "spikes", "toxicspikes", "rest", "synthesis", "hiddenpowerfire"], randomDoubleBattleMoves: ["sludgebomb", "gigadrain", "sleeppowder", "leafstorm", "protect", "hiddenpowerfire"], tier: "UU", + doublesTier: "(DUU)", }, gulpin: { inherit: true, @@ -2024,6 +2249,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["sludgebomb", "icebeam", "toxic", "yawn", "encore", "painsplit", "earthquake"], randomDoubleBattleMoves: ["sludgebomb", "icebeam", "protect", "yawn", "encore", "gunkshot", "earthquake"], tier: "PU", + doublesTier: "(DUU)", }, carvanha: { inherit: true, @@ -2032,14 +2258,16 @@ exports.BattleFormatsData = { }, sharpedo: { inherit: true, - randomBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "waterfall", "destinybond"], + randomBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "waterfall"], randomDoubleBattleMoves: ["protect", "icebeam", "crunch", "earthquake", "waterfall", "destinybond"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, sharpedomega: { - randomBattleMoves: ["protect", "icefang", "crunch", "earthquake", "waterfall", "zenheadbutt"], + randomBattleMoves: ["protect", "crunch", "waterfall", "icefang", "zenheadbutt", "destinybond"], requiredItem: "Sharpedonite", tier: "UU", + doublesTier: "(DUU)", }, wailmer: { randomBattleMoves: ["waterspout", "surf", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerelectric"], @@ -2050,6 +2278,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["waterspout", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerfire"], randomDoubleBattleMoves: ["waterspout", "hydropump", "icebeam", "hiddenpowergrass", "hiddenpowerfire", "protect"], tier: "PU", + doublesTier: "(DUU)", }, numel: { inherit: true, @@ -2061,17 +2290,20 @@ exports.BattleFormatsData = { randomBattleMoves: ["rockpolish", "fireblast", "earthpower", "lavaplume", "stealthrock", "hiddenpowergrass", "roar", "stoneedge"], randomDoubleBattleMoves: ["rockpolish", "fireblast", "earthpower", "heatwave", "eruption", "hiddenpowergrass", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cameruptmega: { randomBattleMoves: ["stealthrock", "fireblast", "earthpower", "ancientpower", "willowisp", "toxic"], randomDoubleBattleMoves: ["fireblast", "earthpower", "heatwave", "eruption", "rockslide", "protect"], requiredItem: "Cameruptite", tier: "RU", + doublesTier: "DUU", }, torkoal: { randomBattleMoves: ["shellsmash", "fireblast", "earthpower", "hiddenpowergrass", "stealthrock", "rapidspin", "yawn", "lavaplume"], randomDoubleBattleMoves: ["protect", "heatwave", "earthpower", "willowisp", "shellsmash", "fireblast", "hiddenpowergrass"], tier: "PU", + doublesTier: "(DUU)", }, spoink: { inherit: true, @@ -2082,12 +2314,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "thunderwave", "healbell", "whirlwind", "toxic", "focusblast", "reflect", "lightscreen"], randomDoubleBattleMoves: ["psychic", "psyshock", "thunderwave", "trickroom", "taunt", "protect", "focusblast", "reflect", "lightscreen"], tier: "PU", + doublesTier: "(DUU)", }, spinda: { inherit: true, randomBattleMoves: ["return", "superpower", "suckerpunch", "trickroom"], randomDoubleBattleMoves: ["doubleedge", "return", "superpower", "suckerpunch", "trickroom", "fakeout", "protect"], tier: "PU", + doublesTier: "(DUU)", }, trapinch: { inherit: true, @@ -2103,6 +2337,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "outrage", "uturn", "roost", "stoneedge", "firepunch", "fireblast", "defog"], randomDoubleBattleMoves: ["earthquake", "protect", "dragonclaw", "uturn", "rockslide", "firepunch", "fireblast", "tailwind", "feint"], tier: "RU", + doublesTier: "(DUU)", }, cacnea: { inherit: true, @@ -2111,9 +2346,10 @@ exports.BattleFormatsData = { }, cacturne: { inherit: true, - randomBattleMoves: ["swordsdance", "spikes", "suckerpunch", "seedbomb", "drainpunch", "substitute"], + randomBattleMoves: ["swordsdance", "spikes", "suckerpunch", "seedbomb", "drainpunch", "substitute", "darkpulse", "focusblast", "gigadrain"], randomDoubleBattleMoves: ["swordsdance", "spikyshield", "suckerpunch", "seedbomb", "drainpunch", "substitute"], tier: "PU", + doublesTier: "(DUU)", }, swablu: { inherit: true, @@ -2125,36 +2361,42 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "dracometeor", "outrage", "dragonclaw", "earthquake", "roost", "fireblast", "healbell"], randomDoubleBattleMoves: ["dragondance", "dracometeor", "protect", "dragonclaw", "earthquake", "fireblast", "tailwind"], tier: "PU", + doublesTier: "(DUU)", }, altariamega: { randomBattleMoves: ["dragondance", "return", "hypervoice", "healbell", "earthquake", "roost", "dracometeor", "fireblast"], randomDoubleBattleMoves: ["dragondance", "return", "doubleedge", "dragonclaw", "earthquake", "protect", "fireblast"], requiredItem: "Altarianite", - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, zangoose: { inherit: true, randomBattleMoves: ["swordsdance", "closecombat", "knockoff", "quickattack", "facade"], randomDoubleBattleMoves: ["protect", "closecombat", "knockoff", "quickattack", "facade"], tier: "NU", + doublesTier: "(DUU)", }, seviper: { inherit: true, randomBattleMoves: ["flamethrower", "sludgewave", "gigadrain", "darkpulse", "switcheroo", "coil", "earthquake", "poisonjab", "suckerpunch"], randomDoubleBattleMoves: ["flamethrower", "gigadrain", "earthquake", "suckerpunch", "aquatail", "protect", "glare", "poisonjab", "sludgebomb"], tier: "PU", + doublesTier: "(DUU)", }, lunatone: { inherit: true, - randomBattleMoves: ["psychic", "earthpower", "stealthrock", "rockpolish", "batonpass", "calmmind", "icebeam", "ancientpower", "moonlight", "toxic"], + randomBattleMoves: ["psychic", "earthpower", "stealthrock", "rockpolish", "calmmind", "icebeam", "ancientpower", "moonlight", "toxic"], randomDoubleBattleMoves: ["psychic", "earthpower", "rockpolish", "calmmind", "helpinghand", "icebeam", "ancientpower", "moonlight", "trickroom", "protect"], tier: "PU", + doublesTier: "(DUU)", }, solrock: { inherit: true, randomBattleMoves: ["stealthrock", "explosion", "rockslide", "reflect", "lightscreen", "willowisp", "morningsun"], randomDoubleBattleMoves: ["protect", "helpinghand", "stoneedge", "zenheadbutt", "willowisp", "trickroom", "rockslide"], tier: "PU", + doublesTier: "(DUU)", }, barboach: { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "return", "bounce"], @@ -2165,6 +2407,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "waterfall", "earthquake", "stoneedge", "zenheadbutt"], randomDoubleBattleMoves: ["dragondance", "waterfall", "earthquake", "stoneedge", "zenheadbutt", "protect"], tier: "PU", + doublesTier: "(DUU)", }, corphish: { inherit: true, @@ -2176,6 +2419,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "crabhammer", "superpower", "swordsdance", "knockoff", "aquajet"], randomDoubleBattleMoves: ["dragondance", "crabhammer", "crunch", "superpower", "swordsdance", "knockoff", "aquajet", "protect"], tier: "UU", + doublesTier: "(DUU)", }, baltoy: { inherit: true, @@ -2186,6 +2430,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "toxic", "psychic", "icebeam", "earthquake", "rapidspin"], randomDoubleBattleMoves: ["earthpower", "trickroom", "psychic", "icebeam", "earthquake", "protect"], tier: "NU", + doublesTier: "(DUU)", }, lileep: { inherit: true, @@ -2196,6 +2441,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "recover", "gigadrain", "toxic", "seedbomb", "rockslide", "curse"], randomDoubleBattleMoves: ["protect", "recover", "seedbomb", "rockslide", "earthquake", "curse", "swordsdance"], tier: "NU", + doublesTier: "DUU", }, anorith: { inherit: true, @@ -2206,6 +2452,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "stoneedge", "toxic", "xscissor", "knockoff", "rapidspin", "earthquake"], randomDoubleBattleMoves: ["rockslide", "stoneedge", "stringshot", "xscissor", "swordsdance", "knockoff", "protect"], tier: "PU", + doublesTier: "(DUU)", }, feebas: { inherit: true, @@ -2217,9 +2464,11 @@ exports.BattleFormatsData = { randomBattleMoves: ["recover", "scald", "toxic", "icebeam", "dragontail", "rest", "sleeptalk"], randomDoubleBattleMoves: ["recover", "scald", "hydropump", "icebeam", "dragontail", "hypnosis", "protect", "hiddenpowergrass"], tier: "UU", + doublesTier: "(DUU)", }, castform: { tier: "PU", + doublesTier: "(DUU)", }, castformsunny: { randomBattleMoves: ["sunnyday", "weatherball", "solarbeam", "icebeam"], @@ -2236,6 +2485,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["fakeout", "knockoff", "drainpunch", "suckerpunch", "shadowsneak", "stealthrock", "recover"], randomDoubleBattleMoves: ["knockoff", "fakeout", "trickroom", "recover", "drainpunch", "suckerpunch", "shadowsneak", "protect"], tier: "NU", + doublesTier: "DUU", }, shuppet: { inherit: true, @@ -2247,12 +2497,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["destinybond", "taunt", "shadowclaw", "suckerpunch", "willowisp", "shadowsneak", "knockoff"], randomDoubleBattleMoves: ["shadowclaw", "suckerpunch", "willowisp", "shadowsneak", "knockoff", "protect"], tier: "PU", + doublesTier: "(DUU)", }, banettemega: { randomBattleMoves: ["destinybond", "taunt", "shadowclaw", "suckerpunch", "willowisp", "knockoff"], randomDoubleBattleMoves: ["destinybond", "taunt", "shadowclaw", "suckerpunch", "willowisp", "knockoff", "protect"], requiredItem: "Banettite", tier: "RU", + doublesTier: "(DUU)", }, duskull: { inherit: true, @@ -2267,12 +2519,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["willowisp", "shadowsneak", "icepunch", "painsplit", "substitute", "earthquake", "focuspunch"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "icepunch", "painsplit", "protect", "earthquake", "helpinghand", "trickroom"], tier: "PU", + doublesTier: "(DUU)", }, tropius: { inherit: true, randomBattleMoves: ["leechseed", "substitute", "airslash", "gigadrain", "toxic", "protect"], randomDoubleBattleMoves: ["leechseed", "protect", "airslash", "gigadrain", "earthquake", "hiddenpowerfire", "tailwind", "sunnyday", "roost"], tier: "PU", + doublesTier: "(DUU)", }, chingling: { randomBattleMoves: ["hypnosis", "reflect", "lightscreen", "toxic", "recover", "psychic", "signalbeam", "healbell"], @@ -2283,18 +2537,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "yawn", "recover", "calmmind", "shadowball", "healingwish", "healbell", "taunt"], randomDoubleBattleMoves: ["protect", "psychic", "thunderwave", "recover", "shadowball", "dazzlinggleam", "trickroom", "helpinghand", "taunt"], tier: "PU", + doublesTier: "(DUU)", }, absol: { inherit: true, randomBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "superpower", "pursuit", "playrough"], randomDoubleBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "fireblast", "superpower", "protect", "playrough"], tier: "RU", + doublesTier: "(DUU)", }, absolmega: { randomBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "fireblast", "superpower", "pursuit", "playrough", "icebeam"], randomDoubleBattleMoves: ["swordsdance", "suckerpunch", "knockoff", "fireblast", "superpower", "protect", "playrough"], requiredItem: "Absolite", tier: "UU", + doublesTier: "(DUU)", }, snorunt: { inherit: true, @@ -2305,17 +2562,20 @@ exports.BattleFormatsData = { randomBattleMoves: ["spikes", "icebeam", "iceshard", "taunt", "earthquake", "explosion", "superfang"], randomDoubleBattleMoves: ["icebeam", "iceshard", "taunt", "earthquake", "protect"], tier: "PU", + doublesTier: "(DUU)", }, glaliemega: { randomBattleMoves: ["freezedry", "iceshard", "earthquake", "explosion", "return", "spikes"], randomDoubleBattleMoves: ["crunch", "iceshard", "freezedry", "earthquake", "explosion", "protect", "return"], requiredItem: "Glalitite", tier: "RU", + doublesTier: "(DUU)", }, froslass: { randomBattleMoves: ["icebeam", "spikes", "destinybond", "shadowball", "taunt", "thunderwave"], randomDoubleBattleMoves: ["icebeam", "protect", "destinybond", "shadowball", "taunt", "thunderwave"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, spheal: { inherit: true, @@ -2328,32 +2588,37 @@ exports.BattleFormatsData = { }, walrein: { inherit: true, - randomBattleMoves: ["substitute", "protect", "toxic", "surf", "icebeam", "roar"], - randomDoubleBattleMoves: ["protect", "icywind", "surf", "icebeam"], + randomBattleMoves: ["superfang", "protect", "toxic", "surf", "icebeam", "roar"], + randomDoubleBattleMoves: ["protect", "icywind", "surf", "icebeam", "superfang", "roar"], tier: "PU", + doublesTier: "(DUU)", }, clamperl: { randomBattleMoves: ["shellsmash", "icebeam", "surf", "hiddenpowergrass", "hiddenpowerelectric", "substitute"], tier: "LC", }, huntail: { - randomBattleMoves: ["shellsmash", "waterfall", "icebeam", "batonpass", "suckerpunch"], - randomDoubleBattleMoves: ["shellsmash", "waterfall", "icefang", "batonpass", "suckerpunch", "protect"], + randomBattleMoves: ["shellsmash", "waterfall", "icebeam", "substitute", "suckerpunch"], + randomDoubleBattleMoves: ["shellsmash", "waterfall", "icefang", "suckerpunch", "protect"], tier: "PU", + doublesTier: "(DUU)", }, gorebyss: { - randomBattleMoves: ["shellsmash", "batonpass", "hydropump", "icebeam", "hiddenpowergrass", "substitute"], - randomDoubleBattleMoves: ["shellsmash", "batonpass", "surf", "icebeam", "hiddenpowergrass", "substitute", "protect"], + randomBattleMoves: ["shellsmash", "hydropump", "icebeam", "hiddenpowergrass", "substitute"], + randomDoubleBattleMoves: ["shellsmash", "surf", "icebeam", "hiddenpowergrass", "substitute", "protect"], tier: "PU", + doublesTier: "(DUU)", }, relicanth: { randomBattleMoves: ["headsmash", "waterfall", "earthquake", "doubleedge", "stealthrock", "toxic"], randomDoubleBattleMoves: ["headsmash", "waterfall", "earthquake", "doubleedge", "rockslide", "protect"], tier: "PU", + doublesTier: "(DUU)", }, luvdisc: { randomBattleMoves: ["icebeam", "toxic", "sweetkiss", "protect", "scald"], tier: "PU", + doublesTier: "(DUU)", }, bagon: { inherit: true, @@ -2368,13 +2633,15 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["outrage", "fireblast", "earthquake", "dracometeor", "dragondance", "dragonclaw"], randomDoubleBattleMoves: ["protect", "fireblast", "earthquake", "dracometeor", "tailwind", "dragondance", "dragonclaw", "hydropump", "rockslide"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, salamencemega: { randomBattleMoves: ["doubleedge", "return", "fireblast", "earthquake", "dracometeor", "roost", "dragondance"], randomDoubleBattleMoves: ["doubleedge", "return", "fireblast", "earthquake", "dracometeor", "protect", "dragondance", "dragonclaw"], requiredItem: "Salamencite", tier: "Uber", + doublesTier: "DUber", }, beldum: { inherit: true, @@ -2385,66 +2652,77 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["stealthrock", "meteormash", "toxic", "earthquake", "bulletpunch", "zenheadbutt"], tier: "PU", + doublesTier: "NFE", }, metagross: { inherit: true, randomBattleMoves: ["meteormash", "earthquake", "agility", "stealthrock", "zenheadbutt", "bulletpunch", "thunderpunch", "explosion", "icepunch"], randomDoubleBattleMoves: ["meteormash", "earthquake", "protect", "zenheadbutt", "bulletpunch", "thunderpunch", "explosion", "icepunch", "hammerarm"], tier: "UU", + doublesTier: "DUU", }, metagrossmega: { randomBattleMoves: ["meteormash", "earthquake", "agility", "zenheadbutt", "hammerarm", "icepunch"], randomDoubleBattleMoves: ["meteormash", "earthquake", "protect", "zenheadbutt", "thunderpunch", "icepunch"], requiredItem: "Metagrossite", tier: "OU", + doublesTier: "DUU", }, regirock: { inherit: true, randomBattleMoves: ["stealthrock", "thunderwave", "stoneedge", "drainpunch", "curse", "rest", "rockslide", "toxic"], randomDoubleBattleMoves: ["stealthrock", "thunderwave", "stoneedge", "drainpunch", "curse", "rockslide", "protect"], tier: "NU", + doublesTier: "(DUU)", }, regice: { inherit: true, randomBattleMoves: ["thunderwave", "icebeam", "thunderbolt", "rest", "sleeptalk", "focusblast", "rockpolish"], randomDoubleBattleMoves: ["thunderwave", "icebeam", "thunderbolt", "icywind", "protect", "focusblast", "rockpolish"], tier: "PU", + doublesTier: "(DUU)", }, registeel: { inherit: true, randomBattleMoves: ["stealthrock", "thunderwave", "toxic", "protect", "seismictoss", "curse", "ironhead", "rest", "sleeptalk"], randomDoubleBattleMoves: ["stealthrock", "ironhead", "curse", "rest", "thunderwave", "protect", "seismictoss"], tier: "RU", + doublesTier: "(DUU)", }, latias: { inherit: true, randomBattleMoves: ["dracometeor", "psyshock", "hiddenpowerfire", "roost", "thunderbolt", "healingwish", "defog"], randomDoubleBattleMoves: ["dragonpulse", "psychic", "tailwind", "helpinghand", "healpulse", "lightscreen", "reflect", "protect"], tier: "OU", + doublesTier: "(DUU)", }, latiasmega: { randomBattleMoves: ["calmmind", "dragonpulse", "surf", "dracometeor", "roost", "hiddenpowerfire", "substitute", "psyshock"], randomDoubleBattleMoves: ["dragonpulse", "psychic", "tailwind", "helpinghand", "healpulse", "lightscreen", "reflect", "protect"], requiredItem: "Latiasite", tier: "(OU)", + doublesTier: "(DUU)", }, latios: { inherit: true, randomBattleMoves: ["dracometeor", "hiddenpowerfire", "surf", "thunderbolt", "psyshock", "roost", "trick", "defog"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "surf", "thunderbolt", "psyshock", "substitute", "trick", "tailwind", "protect", "hiddenpowerfire"], tier: "OU", + doublesTier: "DOU", }, latiosmega: { - randomBattleMoves: ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "memento", "defog"], + randomBattleMoves: ["calmmind", "dracometeor", "hiddenpowerfire", "psyshock", "roost", "defog"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "surf", "thunderbolt", "psyshock", "substitute", "tailwind", "protect", "hiddenpowerfire"], requiredItem: "Latiosite", tier: "(OU)", + doublesTier: "(DOU)", }, kyogre: { inherit: true, randomBattleMoves: ["waterspout", "originpulse", "scald", "thunder", "icebeam"], randomDoubleBattleMoves: ["waterspout", "muddywater", "originpulse", "thunder", "icebeam", "calmmind", "rest", "sleeptalk", "protect"], tier: "Uber", + doublesTier: "DUber", }, kyogreprimal: { randomBattleMoves: ["calmmind", "waterspout", "originpulse", "scald", "thunder", "icebeam", "rest", "sleeptalk"], @@ -2453,12 +2731,13 @@ exports.BattleFormatsData = { }, groudon: { inherit: true, - randomBattleMoves: ["precipiceblades", "earthquake", "stealthrock", "lavaplume", "stoneedge", "dragontail", "roar", "toxic", "swordsdance", "rockpolish", "firepunch"], + randomBattleMoves: ["earthquake", "stealthrock", "lavaplume", "stoneedge", "roar", "toxic", "thunderwave", "dragonclaw", "firepunch"], randomDoubleBattleMoves: ["precipiceblades", "rockslide", "protect", "stoneedge", "swordsdance", "rockpolish", "dragonclaw", "firepunch"], tier: "Uber", + doublesTier: "DUber", }, groudonprimal: { - randomBattleMoves: ["stealthrock", "precipiceblades", "earthquake", "lavaplume", "stoneedge", "overheat", "rockpolish", "thunderwave"], + randomBattleMoves: ["stealthrock", "precipiceblades", "lavaplume", "stoneedge", "dragontail", "rockpolish", "swordsdance", "firepunch"], randomDoubleBattleMoves: ["precipiceblades", "lavaplume", "rockslide", "stoneedge", "swordsdance", "overheat", "rockpolish", "firepunch", "protect"], requiredItem: "Red Orb", }, @@ -2467,42 +2746,49 @@ exports.BattleFormatsData = { randomBattleMoves: ["outrage", "vcreate", "extremespeed", "dragondance", "earthquake", "dracometeor", "dragonclaw"], randomDoubleBattleMoves: ["tailwind", "vcreate", "extremespeed", "dragondance", "earthquake", "dracometeor", "dragonclaw", "protect"], tier: "Uber", + doublesTier: "DUber", }, rayquazamega: { - randomBattleMoves: ["vcreate", "extremespeed", "swordsdance", "earthquake", "dragonascent", "dragonclaw", "dragondance"], + // randomBattleMoves: ["vcreate", "extremespeed", "swordsdance", "earthquake", "dragonascent", "dragonclaw", "dragondance"], randomDoubleBattleMoves: ["vcreate", "extremespeed", "swordsdance", "earthquake", "dragonascent", "dragonclaw", "dragondance", "protect"], requiredMove: "Dragon Ascent", tier: "AG", + doublesTier: "DUber", }, jirachi: { inherit: true, randomBattleMoves: ["ironhead", "uturn", "firepunch", "icepunch", "trick", "stealthrock", "bodyslam", "toxic", "wish", "substitute"], randomDoubleBattleMoves: ["bodyslam", "ironhead", "icywind", "thunderwave", "helpinghand", "trickroom", "uturn", "followme", "zenheadbutt", "protect"], tier: "OU", + doublesTier: "DUber", }, deoxys: { inherit: true, randomBattleMoves: ["psychoboost", "stealthrock", "spikes", "firepunch", "superpower", "extremespeed", "knockoff", "taunt"], randomDoubleBattleMoves: ["psychoboost", "superpower", "extremespeed", "icebeam", "thunderbolt", "firepunch", "protect", "knockoff", "psyshock"], tier: "Uber", + doublesTier: "(DUU)", }, deoxysattack: { randomBattleMoves: ["psychoboost", "superpower", "icebeam", "knockoff", "extremespeed", "firepunch", "stealthrock"], randomDoubleBattleMoves: ["psychoboost", "superpower", "extremespeed", "icebeam", "thunderbolt", "firepunch", "protect", "knockoff"], eventOnly: true, tier: "Uber", + doublesTier: "(DUU)", }, deoxysdefense: { randomBattleMoves: ["spikes", "stealthrock", "recover", "taunt", "toxic", "seismictoss", "knockoff"], randomDoubleBattleMoves: ["protect", "stealthrock", "recover", "taunt", "reflect", "seismictoss", "lightscreen", "trickroom"], eventOnly: true, tier: "Uber", + doublesTier: "(DUU)", }, deoxysspeed: { randomBattleMoves: ["spikes", "stealthrock", "superpower", "psychoboost", "taunt", "magiccoat", "knockoff"], randomDoubleBattleMoves: ["superpower", "icebeam", "psychoboost", "taunt", "lightscreen", "reflect", "protect", "knockoff"], eventOnly: true, tier: "Uber", + doublesTier: "(DUU)", }, turtwig: { inherit: true, @@ -2518,6 +2804,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "woodhammer", "stoneedge", "synthesis", "rockpolish"], randomDoubleBattleMoves: ["protect", "earthquake", "woodhammer", "stoneedge", "rockslide", "wideguard", "rockpolish"], tier: "NU", + doublesTier: "(DUU)", }, chimchar: { inherit: true, @@ -2527,12 +2814,14 @@ exports.BattleFormatsData = { monferno: { randomBattleMoves: ["stealthrock", "overheat", "hiddenpowergrass", "fakeout", "vacuumwave", "uturn", "gunkshot"], tier: "PU", + doublesTier: "NFE", }, infernape: { inherit: true, - randomBattleMoves: ["stealthrock", "uturn", "swordsdance", "closecombat", "flareblitz", "thunderpunch", "machpunch", "nastyplot", "fireblast", "vacuumwave", "grassknot", "hiddenpowerice"], + randomBattleMoves: ["stealthrock", "uturn", "earthquake", "closecombat", "flareblitz", "stoneedge", "machpunch", "nastyplot", "fireblast", "vacuumwave", "grassknot", "hiddenpowerice"], randomDoubleBattleMoves: ["fakeout", "heatwave", "closecombat", "uturn", "grassknot", "stoneedge", "machpunch", "feint", "taunt", "flareblitz", "hiddenpowerice", "thunderpunch", "protect"], tier: "UU", + doublesTier: "DUU", }, piplup: { inherit: true, @@ -2542,12 +2831,14 @@ exports.BattleFormatsData = { prinplup: { randomBattleMoves: ["stealthrock", "hydropump", "scald", "icebeam", "hiddenpowerelectric", "hiddenpowerfire", "yawn", "defog"], tier: "PU", + doublesTier: "NFE", }, empoleon: { inherit: true, - randomBattleMoves: ["hydropump", "flashcannon", "grassknot", "hiddenpowerfire", "icebeam", "scald", "toxic", "roar", "stealthrock"], + randomBattleMoves: ["hydropump", "flashcannon", "grassknot", "defog", "icebeam", "scald", "toxic", "roar", "stealthrock"], randomDoubleBattleMoves: ["icywind", "scald", "surf", "icebeam", "hiddenpowerelectric", "protect", "grassknot", "flashcannon"], tier: "UU", + doublesTier: "(DUU)", }, starly: { inherit: true, @@ -2561,7 +2852,8 @@ exports.BattleFormatsData = { staraptor: { randomBattleMoves: ["bravebird", "closecombat", "uturn", "quickattack", "roost", "doubleedge"], randomDoubleBattleMoves: ["bravebird", "closecombat", "uturn", "quickattack", "doubleedge", "tailwind", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, bidoof: { inherit: true, @@ -2572,6 +2864,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["return", "waterfall", "curse", "quickattack", "stealthrock", "rest"], randomDoubleBattleMoves: ["return", "waterfall", "curse", "quickattack", "protect", "rest"], tier: "PU", + doublesTier: "(DUU)", }, kricketot: { randomBattleMoves: ["endeavor", "mudslap", "bugbite", "strugglebug"], @@ -2581,6 +2874,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["xscissor", "endeavor", "taunt", "toxic", "stickyweb", "knockoff"], randomDoubleBattleMoves: ["bugbite", "protect", "taunt", "stickyweb", "knockoff"], tier: "PU", + doublesTier: "(DUU)", }, shinx: { randomBattleMoves: ["wildcharge", "icefang", "firefang", "crunch"], @@ -2594,6 +2888,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["wildcharge", "icefang", "voltswitch", "crunch", "superpower", "facade"], randomDoubleBattleMoves: ["wildcharge", "icefang", "voltswitch", "crunch", "superpower", "facade", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cranidos: { inherit: true, @@ -2604,6 +2899,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["headsmash", "earthquake", "rockpolish", "crunch", "rockslide", "firepunch"], randomDoubleBattleMoves: ["headsmash", "earthquake", "zenheadbutt", "rockslide", "crunch", "stoneedge", "protect"], tier: "PU", + doublesTier: "(DUU)", }, shieldon: { inherit: true, @@ -2614,6 +2910,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "rockblast", "metalburst", "protect", "toxic", "roar"], randomDoubleBattleMoves: ["stealthrock", "stoneedge", "metalburst", "protect", "wideguard", "guardsplit"], tier: "PU", + doublesTier: "(DUU)", }, burmy: { randomBattleMoves: ["bugbite", "hiddenpowerice", "electroweb", "protect"], @@ -2623,21 +2920,25 @@ exports.BattleFormatsData = { randomBattleMoves: ["gigadrain", "signalbeam", "protect", "toxic", "synthesis"], randomDoubleBattleMoves: ["leafstorm", "gigadrain", "signalbeam", "hiddenpowerice", "hiddenpowerrock", "stringshot", "protect"], tier: "PU", + doublesTier: "(DUU)", }, wormadamsandy: { - randomBattleMoves: ["earthquake", "toxic", "rockblast", "protect", "stealthrock"], + randomBattleMoves: ["earthquake", "toxic", "protect", "stealthrock"], randomDoubleBattleMoves: ["earthquake", "suckerpunch", "rockblast", "protect", "stringshot"], tier: "PU", + doublesTier: "(DUU)", }, wormadamtrash: { randomBattleMoves: ["stealthrock", "toxic", "gyroball", "protect"], randomDoubleBattleMoves: ["strugglebug", "stringshot", "gyroball", "protect"], tier: "PU", + doublesTier: "(DUU)", }, mothim: { randomBattleMoves: ["quiverdance", "bugbuzz", "airslash", "gigadrain", "hiddenpowerground", "uturn"], randomDoubleBattleMoves: ["quiverdance", "bugbuzz", "airslash", "gigadrain", "roost", "protect"], tier: "PU", + doublesTier: "(DUU)", }, combee: { randomBattleMoves: ["bugbuzz", "aircutter", "endeavor", "ominouswind", "tailwind"], @@ -2647,21 +2948,24 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "healorder", "toxic", "attackorder", "defendorder", "infestation"], randomDoubleBattleMoves: ["tailwind", "healorder", "stringshot", "attackorder", "strugglebug", "protect"], tier: "PU", + doublesTier: "(DUU)", }, pachirisu: { inherit: true, randomBattleMoves: ["nuzzle", "thunderbolt", "superfang", "toxic", "uturn"], randomDoubleBattleMoves: ["nuzzle", "thunderbolt", "superfang", "followme", "uturn", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, buizel: { - randomBattleMoves: ["waterfall", "aquajet", "switcheroo", "brickbreak", "bulkup", "batonpass", "icepunch"], + randomBattleMoves: ["waterfall", "aquajet", "switcheroo", "brickbreak", "bulkup", "icepunch"], tier: "LC", }, floatzel: { - randomBattleMoves: ["bulkup", "batonpass", "waterfall", "icepunch", "substitute", "taunt", "aquajet", "brickbreak"], + randomBattleMoves: ["bulkup", "waterfall", "icepunch", "substitute", "taunt", "aquajet", "brickbreak"], randomDoubleBattleMoves: ["waterfall", "aquajet", "switcheroo", "raindance", "protect", "icepunch", "crunch", "taunt"], tier: "PU", + doublesTier: "(DUU)", }, cherubi: { randomBattleMoves: ["sunnyday", "solarbeam", "weatherball", "hiddenpowerice", "aromatherapy", "dazzlinggleam"], @@ -2671,6 +2975,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["energyball", "dazzlinggleam", "hiddenpowerfire", "synthesis", "healingwish"], randomDoubleBattleMoves: ["sunnyday", "solarbeam", "weatherball", "gigadrain", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cherrimsunshine: { randomBattleMoves: ["sunnyday", "solarbeam", "gigadrain", "weatherball", "hiddenpowerice"], @@ -2685,15 +2990,17 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "icebeam", "scald", "toxic", "recover", "clearsmog"], randomDoubleBattleMoves: ["earthpower", "icebeam", "scald", "muddywater", "recover", "icywind", "protect"], tier: "NU", + doublesTier: "DOU", }, drifloon: { randomBattleMoves: ["shadowball", "substitute", "calmmind", "hypnosis", "hiddenpowerfighting", "thunderbolt", "destinybond", "willowisp"], tier: "LC Uber", }, drifblim: { - randomBattleMoves: ["acrobatics", "willowisp", "substitute", "destinybond", "shadowball"], + randomBattleMoves: ["acrobatics", "willowisp", "substitute", "destinybond", "shadowball", "hex"], randomDoubleBattleMoves: ["shadowball", "substitute", "hypnosis", "hiddenpowerfighting", "thunderbolt", "destinybond", "willowisp", "protect"], tier: "PU", + doublesTier: "(DUU)", }, buneary: { randomBattleMoves: ["fakeout", "return", "switcheroo", "thunderpunch", "jumpkick", "firepunch", "icepunch", "healingwish"], @@ -2703,12 +3010,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["return", "switcheroo", "highjumpkick", "icepunch", "healingwish"], randomDoubleBattleMoves: ["return", "switcheroo", "highjumpkick", "firepunch", "icepunch", "fakeout", "protect", "encore"], tier: "PU", + doublesTier: "(DUU)", }, lopunnymega: { randomBattleMoves: ["return", "highjumpkick", "substitute", "fakeout", "icepunch"], randomDoubleBattleMoves: ["return", "highjumpkick", "protect", "fakeout", "icepunch", "encore"], requiredItem: "Lopunnite", tier: "OU", + doublesTier: "(DUU)", }, glameow: { randomBattleMoves: ["fakeout", "uturn", "suckerpunch", "hypnosis", "quickattack", "return", "foulplay"], @@ -2718,6 +3027,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["fakeout", "uturn", "suckerpunch", "quickattack", "return", "knockoff"], randomDoubleBattleMoves: ["fakeout", "uturn", "suckerpunch", "quickattack", "return", "knockoff", "protect"], tier: "PU", + doublesTier: "(DUU)", }, stunky: { randomBattleMoves: ["pursuit", "suckerpunch", "crunch", "fireblast", "explosion", "taunt", "playrough", "defog"], @@ -2727,6 +3037,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["pursuit", "suckerpunch", "crunch", "fireblast", "taunt", "poisonjab", "defog"], randomDoubleBattleMoves: ["protect", "suckerpunch", "crunch", "fireblast", "taunt", "poisonjab", "playrough", "snarl"], tier: "NU", + doublesTier: "(DUU)", }, bronzor: { randomBattleMoves: ["stealthrock", "psychic", "toxic", "hypnosis", "reflect", "lightscreen", "trickroom", "trick"], @@ -2736,18 +3047,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "earthquake", "toxic", "reflect", "lightscreen", "trickroom", "explosion", "gyroball"], randomDoubleBattleMoves: ["earthquake", "protect", "reflect", "lightscreen", "trickroom", "explosion", "gyroball"], tier: "RU", + doublesTier: "DUU", }, chatot: { inherit: true, randomBattleMoves: ["nastyplot", "boomburst", "heatwave", "hiddenpowerground", "substitute", "chatter", "uturn"], randomDoubleBattleMoves: ["nastyplot", "heatwave", "encore", "substitute", "chatter", "uturn", "protect", "hypervoice", "boomburst"], tier: "PU", + doublesTier: "(DUU)", }, spiritomb: { inherit: true, randomBattleMoves: ["shadowsneak", "suckerpunch", "pursuit", "willowisp", "darkpulse", "rest", "sleeptalk", "foulplay", "painsplit", "calmmind"], randomDoubleBattleMoves: ["shadowsneak", "suckerpunch", "icywind", "willowisp", "snarl", "darkpulse", "protect", "foulplay", "painsplit"], tier: "RU", + doublesTier: "(DUU)", }, gible: { randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "fireblast", "stoneedge", "stealthrock"], @@ -2756,18 +3070,21 @@ exports.BattleFormatsData = { gabite: { randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "fireblast", "stoneedge", "stealthrock"], tier: "PU", + doublesTier: "NFE", }, garchomp: { inherit: true, randomBattleMoves: ["outrage", "dragonclaw", "earthquake", "stoneedge", "fireblast", "swordsdance", "stealthrock", "firefang"], randomDoubleBattleMoves: ["substitute", "dragonclaw", "earthquake", "stoneedge", "rockslide", "swordsdance", "protect"], tier: "OU", + doublesTier: "DOU", }, garchompmega: { randomBattleMoves: ["outrage", "dracometeor", "earthquake", "stoneedge", "fireblast", "swordsdance"], randomDoubleBattleMoves: ["substitute", "dragonclaw", "earthquake", "stoneedge", "rockslide", "swordsdance", "protect", "fireblast"], requiredItem: "Garchompite", tier: "(OU)", + doublesTier: "(DOU)", }, riolu: { inherit: true, @@ -2779,12 +3096,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "closecombat", "crunch", "extremespeed", "icepunch", "nastyplot", "aurasphere", "darkpulse", "vacuumwave", "flashcannon"], randomDoubleBattleMoves: ["followme", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "aurasphere", "darkpulse", "vacuumwave", "flashcannon", "protect"], tier: "UU", + doublesTier: "(DUU)", }, lucariomega: { randomBattleMoves: ["swordsdance", "closecombat", "crunch", "icepunch", "bulletpunch", "nastyplot", "aurasphere", "darkpulse", "flashcannon"], randomDoubleBattleMoves: ["followme", "closecombat", "crunch", "extremespeed", "icepunch", "bulletpunch", "aurasphere", "darkpulse", "vacuumwave", "flashcannon", "protect"], requiredItem: "Lucarionite", tier: "Uber", + doublesTier: "(DUU)", }, hippopotas: { randomBattleMoves: ["earthquake", "slackoff", "whirlwind", "stealthrock", "protect", "toxic", "stockpile"], @@ -2794,6 +3113,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "slackoff", "whirlwind", "stealthrock", "toxic", "stoneedge"], randomDoubleBattleMoves: ["earthquake", "slackoff", "rockslide", "stealthrock", "protect", "stoneedge"], tier: "OU", + doublesTier: "DUU", }, skorupi: { randomBattleMoves: ["toxicspikes", "xscissor", "poisonjab", "knockoff", "pinmissile", "whirlwind"], @@ -2803,6 +3123,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["knockoff", "taunt", "toxicspikes", "poisonjab", "whirlwind", "swordsdance", "aquatail", "earthquake"], randomDoubleBattleMoves: ["snarl", "taunt", "protect", "earthquake", "aquatail", "swordsdance", "poisonjab", "knockoff"], tier: "RU", + doublesTier: "(DUU)", }, croagunk: { inherit: true, @@ -2813,20 +3134,23 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "gunkshot", "drainpunch", "suckerpunch", "icepunch", "substitute"], randomDoubleBattleMoves: ["suckerpunch", "drainpunch", "substitute", "swordsdance", "knockoff", "icepunch", "gunkshot", "fakeout", "protect"], tier: "UU", + doublesTier: "(DUU)", }, carnivine: { randomBattleMoves: ["swordsdance", "powerwhip", "return", "sleeppowder", "substitute", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "powerwhip", "return", "sleeppowder", "substitute", "leechseed", "knockoff", "ragepowder", "protect"], tier: "PU", + doublesTier: "(DUU)", }, finneon: { randomBattleMoves: ["surf", "uturn", "icebeam", "hiddenpowerelectric", "hiddenpowergrass"], tier: "LC", }, lumineon: { - randomBattleMoves: ["scald", "waterfall", "icebeam", "uturn", "toxic", "defog"], + randomBattleMoves: ["scald", "icebeam", "uturn", "toxic", "defog"], randomDoubleBattleMoves: ["surf", "uturn", "icebeam", "toxic", "raindance", "tailwind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, snover: { randomBattleMoves: ["blizzard", "iceshard", "gigadrain", "leechseed", "substitute", "woodhammer"], @@ -2836,91 +3160,107 @@ exports.BattleFormatsData = { randomBattleMoves: ["woodhammer", "iceshard", "blizzard", "gigadrain", "leechseed", "substitute", "focuspunch", "earthquake"], randomDoubleBattleMoves: ["blizzard", "iceshard", "gigadrain", "protect", "focusblast", "woodhammer", "earthquake"], tier: "NU", + doublesTier: "(DUU)", }, abomasnowmega: { randomBattleMoves: ["blizzard", "gigadrain", "woodhammer", "earthquake", "iceshard", "hiddenpowerfire"], randomDoubleBattleMoves: ["blizzard", "iceshard", "gigadrain", "protect", "focusblast", "woodhammer", "earthquake"], requiredItem: "Abomasite", - tier: "BL2", + tier: "RUBL", + doublesTier: "DUU", }, rotom: { inherit: true, randomBattleMoves: ["thunderbolt", "voltswitch", "shadowball", "substitute", "painsplit", "hiddenpowerice", "trick", "willowisp"], randomDoubleBattleMoves: ["thunderbolt", "voltswitch", "shadowball", "substitute", "painsplit", "hiddenpowerice", "trick", "willowisp", "electroweb", "protect"], tier: "NU", + doublesTier: "(DUU)", }, rotomheat: { randomBattleMoves: ["overheat", "thunderbolt", "voltswitch", "hiddenpowerice", "painsplit", "willowisp", "trick"], randomDoubleBattleMoves: ["overheat", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "trick", "electroweb", "protect"], tier: "UU", + doublesTier: "(DUU)", }, rotomwash: { randomBattleMoves: ["hydropump", "thunderbolt", "voltswitch", "painsplit", "hiddenpowerice", "willowisp", "trick"], randomDoubleBattleMoves: ["hydropump", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "trick", "electroweb", "protect", "hiddenpowergrass"], tier: "OU", + doublesTier: "DOU", }, rotomfrost: { randomBattleMoves: ["blizzard", "thunderbolt", "voltswitch", "substitute", "painsplit", "willowisp", "trick"], randomDoubleBattleMoves: ["blizzard", "thunderbolt", "voltswitch", "substitute", "painsplit", "willowisp", "trick", "electroweb", "protect"], tier: "PU", + doublesTier: "(DUU)", }, rotomfan: { - randomBattleMoves: ["airslash", "thunderbolt", "voltswitch", "painsplit", "willowisp", "trick"], + randomBattleMoves: ["airslash", "thunderbolt", "voltswitch", "painsplit", "willowisp"], randomDoubleBattleMoves: ["airslash", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerice", "willowisp", "electroweb", "discharge", "protect"], tier: "PU", + doublesTier: "(DUU)", }, rotommow: { randomBattleMoves: ["leafstorm", "thunderbolt", "voltswitch", "painsplit", "hiddenpowerfire", "willowisp", "trick"], randomDoubleBattleMoves: ["leafstorm", "thunderbolt", "voltswitch", "substitute", "painsplit", "hiddenpowerfire", "willowisp", "trick", "electroweb", "protect"], tier: "RU", + doublesTier: "(DUU)", }, uxie: { inherit: true, randomBattleMoves: ["stealthrock", "thunderwave", "psychic", "uturn", "healbell", "knockoff", "yawn"], randomDoubleBattleMoves: ["uturn", "psyshock", "yawn", "healbell", "stealthrock", "thunderbolt", "protect", "helpinghand", "thunderwave", "skillswap"], tier: "RU", + doublesTier: "(DUU)", }, mesprit: { inherit: true, randomBattleMoves: ["calmmind", "psychic", "psyshock", "energyball", "signalbeam", "hiddenpowerfire", "icebeam", "healingwish", "stealthrock", "uturn"], randomDoubleBattleMoves: ["calmmind", "psychic", "thunderbolt", "icebeam", "substitute", "uturn", "trick", "protect", "knockoff", "helpinghand"], tier: "NU", + doublesTier: "(DUU)", }, azelf: { inherit: true, - randomBattleMoves: ["nastyplot", "psyshock", "fireblast", "dazzlinggleam", "stealthrock", "knockoff", "taunt", "explosion"], + randomBattleMoves: ["nastyplot", "psyshock", "fireblast", "dazzlinggleam", "stealthrock", "knockoff", "taunt", "explosion", "uturn"], randomDoubleBattleMoves: ["nastyplot", "psychic", "fireblast", "thunderbolt", "icepunch", "knockoff", "zenheadbutt", "uturn", "trick", "taunt", "protect", "dazzlinggleam"], tier: "OU", + doublesTier: "(DUU)", }, dialga: { inherit: true, randomBattleMoves: ["stealthrock", "toxic", "dracometeor", "fireblast", "flashcannon", "roar", "thunderbolt"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "protect", "thunderbolt", "flashcannon", "earthpower", "fireblast", "aurasphere"], tier: "Uber", + doublesTier: "DUber", }, palkia: { inherit: true, randomBattleMoves: ["spacialrend", "dracometeor", "hydropump", "thunderwave", "dragontail", "fireblast"], randomDoubleBattleMoves: ["spacialrend", "dracometeor", "surf", "hydropump", "thunderbolt", "fireblast", "protect"], tier: "Uber", + doublesTier: "DUber", }, heatran: { inherit: true, randomBattleMoves: ["fireblast", "lavaplume", "stealthrock", "earthpower", "flashcannon", "protect", "toxic", "roar"], randomDoubleBattleMoves: ["heatwave", "substitute", "earthpower", "protect", "eruption", "willowisp"], tier: "OU", + doublesTier: "DOU", }, regigigas: { inherit: true, randomBattleMoves: ["thunderwave", "confuseray", "substitute", "return", "knockoff", "drainpunch"], randomDoubleBattleMoves: ["thunderwave", "substitute", "return", "icywind", "rockslide", "earthquake", "knockoff", "wideguard"], tier: "PU", + doublesTier: "(DUU)", }, giratina: { inherit: true, randomBattleMoves: ["rest", "sleeptalk", "dragontail", "roar", "willowisp", "shadowball", "dragonpulse"], randomDoubleBattleMoves: ["tailwind", "icywind", "protect", "dragontail", "willowisp", "calmmind", "dragonpulse", "shadowball"], tier: "Uber", + doublesTier: "DUber", }, giratinaorigin: { randomBattleMoves: ["dracometeor", "shadowsneak", "dragontail", "willowisp", "defog", "toxic", "shadowball", "earthquake"], @@ -2928,48 +3268,56 @@ exports.BattleFormatsData = { eventOnly: true, requiredItem: "Griseous Orb", tier: "Uber", + doublesTier: "DUber", }, cresselia: { inherit: true, randomBattleMoves: ["moonlight", "psychic", "icebeam", "thunderwave", "toxic", "substitute", "psyshock", "moonblast", "calmmind"], randomDoubleBattleMoves: ["psyshock", "icywind", "thunderwave", "trickroom", "moonblast", "moonlight", "skillswap", "reflect", "lightscreen", "icebeam", "protect", "helpinghand"], tier: "UU", + doublesTier: "DOU", }, phione: { inherit: true, randomBattleMoves: ["raindance", "scald", "uturn", "rest", "icebeam"], randomDoubleBattleMoves: ["raindance", "scald", "uturn", "rest", "icebeam", "helpinghand", "icywind", "protect"], tier: "PU", + doublesTier: "(DUU)", }, manaphy: { inherit: true, randomBattleMoves: ["tailglow", "surf", "icebeam", "energyball", "psychic"], randomDoubleBattleMoves: ["tailglow", "surf", "icebeam", "energyball", "protect", "scald", "icywind", "helpinghand"], tier: "OU", + doublesTier: "(DUU)", }, darkrai: { inherit: true, randomBattleMoves: ["darkvoid", "darkpulse", "focusblast", "nastyplot", "substitute", "sludgebomb"], randomDoubleBattleMoves: ["darkpulse", "focusblast", "nastyplot", "substitute", "snarl", "protect"], tier: "Uber", + doublesTier: "(DUU)", }, shaymin: { inherit: true, randomBattleMoves: ["seedflare", "earthpower", "airslash", "psychic", "rest", "substitute", "leechseed"], randomDoubleBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "rest", "substitute", "leechseed", "tailwind", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, shayminsky: { randomBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "substitute", "leechseed", "healingwish"], randomDoubleBattleMoves: ["seedflare", "earthpower", "airslash", "hiddenpowerfire", "rest", "substitute", "leechseed", "tailwind", "protect", "hiddenpowerice"], eventOnly: true, tier: "Uber", + doublesTier: "DUber", }, arceus: { inherit: true, randomBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover"], randomDoubleBattleMoves: ["swordsdance", "extremespeed", "shadowclaw", "earthquake", "recover", "protect"], tier: "Uber", + doublesTier: "DUber", }, arceusbug: { randomBattleMoves: ["swordsdance", "xscissor", "stoneedge", "recover", "earthquake", "ironhead"], @@ -2978,50 +3326,50 @@ exports.BattleFormatsData = { requiredItem: "Insect Plate", }, arceusdark: { - randomBattleMoves: ["calmmind", "judgment", "recover", "fireblast", "thunderbolt"], + randomBattleMoves: ["calmmind", "judgment", "recover", "fireblast", "toxic"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "focusblast", "safeguard", "snarl", "willowisp", "protect"], eventOnly: true, requiredItem: "Dread Plate", }, arceusdragon: { - randomBattleMoves: ["swordsdance", "outrage", "extremespeed", "earthquake", "recover", "calmmind", "judgment", "fireblast", "earthpower"], + randomBattleMoves: ["swordsdance", "outrage", "extremespeed", "earthquake", "recover", "judgment", "fireblast", "willowisp", "defog"], randomDoubleBattleMoves: ["swordsdance", "dragonclaw", "extremespeed", "earthquake", "recover", "protect"], eventOnly: true, requiredItem: "Draco Plate", }, arceuselectric: { - randomBattleMoves: ["calmmind", "judgment", "recover", "icebeam", "grassknot", "fireblast", "willowisp"], + randomBattleMoves: ["calmmind", "judgment", "recover", "icebeam", "earthpower"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "icebeam", "protect"], eventOnly: true, requiredItem: "Zap Plate", }, arceusfairy: { - randomBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "defog", "thunderbolt", "toxic", "fireblast"], + randomBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "defog", "toxic", "earthpower"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "protect", "earthpower", "thunderbolt"], eventOnly: true, requiredItem: "Pixie Plate", gen: 6, }, arceusfighting: { - randomBattleMoves: ["calmmind", "judgment", "stoneedge", "shadowball", "recover", "toxic", "defog"], + randomBattleMoves: ["calmmind", "judgment", "stoneedge", "shadowball", "recover", "roar", "icebeam"], randomDoubleBattleMoves: ["calmmind", "judgment", "icebeam", "shadowball", "recover", "willowisp", "protect"], eventOnly: true, requiredItem: "Fist Plate", }, arceusfire: { - randomBattleMoves: ["calmmind", "judgment", "grassknot", "thunderbolt", "icebeam", "recover"], + randomBattleMoves: ["calmmind", "fireblast", "roar", "thunderbolt", "icebeam", "recover"], randomDoubleBattleMoves: ["calmmind", "judgment", "thunderbolt", "recover", "heatwave", "protect", "willowisp"], eventOnly: true, requiredItem: "Flame Plate", }, arceusflying: { - randomBattleMoves: ["calmmind", "judgment", "earthpower", "fireblast", "substitute", "recover"], + randomBattleMoves: ["calmmind", "judgment", "earthpower", "fireblast", "toxic", "recover"], randomDoubleBattleMoves: ["calmmind", "judgment", "safeguard", "recover", "substitute", "tailwind", "protect"], eventOnly: true, requiredItem: "Sky Plate", }, arceusghost: { - randomBattleMoves: ["calmmind", "judgment", "focusblast", "recover", "swordsdance", "shadowforce", "brickbreak", "willowisp", "roar", "defog"], + randomBattleMoves: ["swordsdance", "shadowforce", "shadowclaw", "brickbreak", "extremespeed", "recover", "judgment", "toxic", "defog"], randomDoubleBattleMoves: ["calmmind", "judgment", "focusblast", "recover", "swordsdance", "shadowforce", "brickbreak", "willowisp", "protect"], eventOnly: true, requiredItem: "Spooky Plate", @@ -3033,7 +3381,7 @@ exports.BattleFormatsData = { requiredItem: "Meadow Plate", }, arceusground: { - randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "extremespeed", "icebeam"], + randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "judgment", "icebeam", "toxic", "stealthrock"], randomDoubleBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "calmmind", "judgment", "icebeam", "rockslide", "protect"], eventOnly: true, requiredItem: "Earth Plate", @@ -3045,31 +3393,31 @@ exports.BattleFormatsData = { requiredItem: "Icicle Plate", }, arceuspoison: { - randomBattleMoves: ["calmmind", "sludgebomb", "fireblast", "recover", "willowisp", "defog", "thunderwave"], + randomBattleMoves: ["calmmind", "sludgebomb", "fireblast", "recover", "icebeam", "defog"], randomDoubleBattleMoves: ["calmmind", "judgment", "sludgebomb", "heatwave", "recover", "willowisp", "protect", "earthpower"], eventOnly: true, requiredItem: "Toxic Plate", }, arceuspsychic: { - randomBattleMoves: ["judgment", "calmmind", "focusblast", "recover", "defog", "thunderbolt", "willowisp"], + randomBattleMoves: ["judgment", "calmmind", "fireblast", "recover", "icebeam", "toxic"], randomDoubleBattleMoves: ["calmmind", "psyshock", "focusblast", "recover", "willowisp", "judgment", "protect"], eventOnly: true, requiredItem: "Mind Plate", }, arceusrock: { - randomBattleMoves: ["recover", "swordsdance", "earthquake", "stoneedge", "extremespeed"], + randomBattleMoves: ["swordsdance", "earthquake", "stoneedge", "recover", "judgment", "willowisp", "stealthrock"], randomDoubleBattleMoves: ["swordsdance", "stoneedge", "recover", "rockslide", "earthquake", "protect"], eventOnly: true, requiredItem: "Stone Plate", }, arceussteel: { - randomBattleMoves: ["calmmind", "judgment", "recover", "willowisp", "thunderbolt", "swordsdance", "ironhead", "earthquake", "stoneedge"], + randomBattleMoves: ["judgment", "recover", "willowisp", "defog", "roar", "swordsdance", "ironhead", "earthquake", "stoneedge"], randomDoubleBattleMoves: ["calmmind", "judgment", "recover", "protect", "willowisp"], eventOnly: true, requiredItem: "Iron Plate", }, arceuswater: { - randomBattleMoves: ["recover", "calmmind", "judgment", "substitute", "willowisp", "thunderbolt"], + randomBattleMoves: ["recover", "calmmind", "judgment", "icebeam", "toxic", "defog"], randomDoubleBattleMoves: ["recover", "calmmind", "judgment", "icebeam", "fireblast", "icywind", "surf", "protect"], eventOnly: true, requiredItem: "Splash Plate", @@ -3078,7 +3426,8 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["vcreate", "boltstrike", "uturn", "zenheadbutt", "grassknot", "focusblast", "blueflare"], randomDoubleBattleMoves: ["vcreate", "boltstrike", "uturn", "psychic", "focusblast", "blueflare", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, snivy: { inherit: true, @@ -3094,6 +3443,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["leafstorm", "dragonpulse", "hiddenpowerfire", "substitute", "leechseed", "glare"], randomDoubleBattleMoves: ["leafstorm", "hiddenpowerfire", "substitute", "taunt", "dragonpulse", "protect"], tier: "OU", + doublesTier: "(DUU)", }, tepig: { randomBattleMoves: ["flamecharge", "flareblitz", "wildcharge", "superpower", "headsmash"], @@ -3105,9 +3455,10 @@ exports.BattleFormatsData = { }, emboar: { inherit: true, - randomBattleMoves: ["flareblitz", "superpower", "wildcharge", "stoneedge", "fireblast", "grassknot", "suckerpunch"], + randomBattleMoves: ["flareblitz", "superpower", "wildcharge", "headsmash", "fireblast", "grassknot", "suckerpunch"], randomDoubleBattleMoves: ["flareblitz", "superpower", "flamecharge", "wildcharge", "headsmash", "protect", "heatwave", "rockslide"], tier: "RU", + doublesTier: "(DUU)", }, oshawott: { randomBattleMoves: ["swordsdance", "waterfall", "aquajet", "xscissor"], @@ -3122,15 +3473,17 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "waterfall", "aquajet", "megahorn", "superpower", "hydropump", "icebeam", "grassknot"], randomDoubleBattleMoves: ["hydropump", "aquajet", "icebeam", "scald", "hiddenpowergrass", "taunt", "helpinghand", "protect"], tier: "NU", + doublesTier: "(DUU)", }, patrat: { - randomBattleMoves: ["swordsdance", "batonpass", "substitute", "hypnosis", "return", "superfang"], + randomBattleMoves: ["swordsdance", "substitute", "hypnosis", "return", "superfang"], tier: "LC", }, watchog: { - randomBattleMoves: ["hypnosis", "substitute", "batonpass", "superfang", "swordsdance", "return", "knockoff"], + randomBattleMoves: ["hypnosis", "substitute", "superfang", "swordsdance", "return", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "knockoff", "substitute", "hypnosis", "return", "superfang", "protect"], tier: "PU", + doublesTier: "(DUU)", }, lillipup: { randomBattleMoves: ["return", "wildcharge", "firefang", "crunch", "icefang"], @@ -3144,6 +3497,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["return", "crunch", "wildcharge", "superpower", "icefang"], randomDoubleBattleMoves: ["return", "wildcharge", "superpower", "crunch", "icefang", "protect"], tier: "PU", + doublesTier: "(DUU)", }, purrloin: { randomBattleMoves: ["encore", "taunt", "uturn", "knockoff", "thunderwave"], @@ -3154,6 +3508,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["knockoff", "encore", "suckerpunch", "thunderwave", "uturn", "substitute", "nastyplot", "darkpulse", "copycat"], randomDoubleBattleMoves: ["encore", "thunderwave", "substitute", "knockoff", "playrough", "uturn", "suckerpunch", "fakeout", "protect"], tier: "NU", + doublesTier: "(DUU)", }, pansage: { inherit: true, @@ -3164,6 +3519,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["nastyplot", "gigadrain", "focusblast", "hiddenpowerice", "substitute", "leafstorm", "knockoff", "superpower"], randomDoubleBattleMoves: ["nastyplot", "leafstorm", "hiddenpowerfire", "hiddenpowerice", "gigadrain", "focusblast", "substitute", "taunt", "synthesis", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, pansear: { inherit: true, @@ -3175,6 +3531,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "nastyplot", "fireblast", "focusblast", "grassknot", "hiddenpowerrock"], randomDoubleBattleMoves: ["nastyplot", "fireblast", "focusblast", "grassknot", "hiddenpowerground", "substitute", "heatwave", "taunt", "protect"], tier: "PU", + doublesTier: "(DUU)", }, panpour: { inherit: true, @@ -3185,16 +3542,18 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "nastyplot", "hydropump", "icebeam", "focusblast"], randomDoubleBattleMoves: ["nastyplot", "hydropump", "icebeam", "substitute", "surf", "taunt", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, munna: { - randomBattleMoves: ["psychic", "hiddenpowerfighting", "hypnosis", "calmmind", "moonlight", "thunderwave", "batonpass", "psyshock", "healbell", "signalbeam"], + randomBattleMoves: ["psychic", "hiddenpowerfighting", "hypnosis", "calmmind", "moonlight", "thunderwave", "psyshock", "healbell", "signalbeam"], tier: "LC", }, musharna: { inherit: true, - randomBattleMoves: ["calmmind", "psychic", "psyshock", "signalbeam", "batonpass", "moonlight", "healbell", "thunderwave"], + randomBattleMoves: ["calmmind", "psychic", "psyshock", "signalbeam", "moonlight", "healbell", "thunderwave"], randomDoubleBattleMoves: ["trickroom", "thunderwave", "moonlight", "psychic", "hiddenpowerfighting", "helpinghand", "psyshock", "healbell", "signalbeam", "protect"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, pidove: { inherit: true, @@ -3209,6 +3568,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["return", "pluck", "hypnosis", "tailwind", "uturn", "roost", "nightslash"], randomDoubleBattleMoves: ["pluck", "uturn", "return", "protect", "tailwind", "taunt", "roost", "nightslash"], tier: "PU", + doublesTier: "(DUU)", }, blitzle: { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "wildcharge", "mefirst"], @@ -3218,6 +3578,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["voltswitch", "hiddenpowergrass", "overheat", "wildcharge", "thunderbolt"], randomDoubleBattleMoves: ["voltswitch", "hiddenpowergrass", "overheat", "wildcharge", "protect"], tier: "PU", + doublesTier: "(DUU)", }, roggenrola: { randomBattleMoves: ["autotomize", "stoneedge", "stealthrock", "rockblast", "earthquake", "explosion"], @@ -3231,6 +3592,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "rockblast", "earthquake", "explosion", "stoneedge", "superpower"], randomDoubleBattleMoves: ["stealthrock", "rockslide", "earthquake", "explosion", "stoneedge", "autotomize", "superpower", "wideguard", "protect"], tier: "PU", + doublesTier: "(DUU)", }, woobat: { randomBattleMoves: ["calmmind", "psychic", "airslash", "gigadrain", "roost", "heatwave", "storedpower"], @@ -3240,6 +3602,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["substitute", "calmmind", "storedpower", "heatwave", "psychic", "airslash", "roost"], randomDoubleBattleMoves: ["calmmind", "psychic", "airslash", "gigadrain", "protect", "heatwave", "tailwind"], tier: "PU", + doublesTier: "(DUU)", }, drilbur: { randomBattleMoves: ["swordsdance", "rapidspin", "earthquake", "rockslide", "shadowclaw", "return", "xscissor"], @@ -3249,18 +3612,21 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "earthquake", "ironhead", "rockslide", "rapidspin"], randomDoubleBattleMoves: ["swordsdance", "drillrun", "earthquake", "rockslide", "ironhead", "substitute", "protect"], tier: "OU", + doublesTier: "DUU", }, audino: { inherit: true, randomBattleMoves: ["wish", "protect", "healbell", "toxic", "thunderwave", "reflect", "lightscreen", "doubleedge"], randomDoubleBattleMoves: ["healpulse", "protect", "healbell", "trickroom", "thunderwave", "reflect", "lightscreen", "doubleedge", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, audinomega: { randomBattleMoves: ["wish", "calmmind", "healbell", "dazzlinggleam", "hypervoice", "protect"], randomDoubleBattleMoves: ["healpulse", "protect", "healbell", "trickroom", "thunderwave", "hypervoice", "helpinghand", "dazzlinggleam"], requiredItem: "Audinite", tier: "NU", + doublesTier: "(DUU)", }, timburr: { randomBattleMoves: ["machpunch", "bulkup", "drainpunch", "icepunch", "knockoff"], @@ -3269,11 +3635,13 @@ exports.BattleFormatsData = { gurdurr: { randomBattleMoves: ["bulkup", "machpunch", "drainpunch", "icepunch", "knockoff"], tier: "NU", + doublesTier: "NFE", }, conkeldurr: { randomBattleMoves: ["bulkup", "drainpunch", "icepunch", "knockoff", "machpunch"], randomDoubleBattleMoves: ["wideguard", "machpunch", "drainpunch", "icepunch", "knockoff", "protect"], tier: "UU", + doublesTier: "DOU", }, tympole: { randomBattleMoves: ["hydropump", "surf", "sludgewave", "earthpower", "hiddenpowerelectric"], @@ -3287,16 +3655,19 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "scald", "sludgewave", "earthquake", "knockoff", "stealthrock", "toxic", "raindance"], randomDoubleBattleMoves: ["hydropump", "muddywater", "sludgebomb", "earthquake", "hiddenpowerelectric", "icywind", "protect"], tier: "RU", + doublesTier: "(DUU)", }, throh: { randomBattleMoves: ["bulkup", "circlethrow", "icepunch", "stormthrow", "rest", "sleeptalk", "knockoff"], randomDoubleBattleMoves: ["helpinghand", "circlethrow", "icepunch", "stormthrow", "wideguard", "knockoff", "protect"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, sawk: { randomBattleMoves: ["closecombat", "earthquake", "icepunch", "poisonjab", "bulkup", "knockoff"], randomDoubleBattleMoves: ["closecombat", "knockoff", "icepunch", "rockslide", "protect"], tier: "RU", + doublesTier: "(DUU)", }, sewaddle: { randomBattleMoves: ["calmmind", "gigadrain", "bugbuzz", "hiddenpowerfire", "hiddenpowerice", "airslash"], @@ -3307,9 +3678,10 @@ exports.BattleFormatsData = { tier: "NFE", }, leavanny: { - randomBattleMoves: ["stickyweb", "swordsdance", "leafblade", "xscissor", "knockoff", "batonpass"], + randomBattleMoves: ["stickyweb", "swordsdance", "leafblade", "xscissor", "knockoff"], randomDoubleBattleMoves: ["swordsdance", "leafblade", "xscissor", "protect", "stickyweb", "poisonjab"], tier: "PU", + doublesTier: "(DUU)", }, venipede: { randomBattleMoves: ["toxicspikes", "infestation", "spikes", "endeavor", "protect"], @@ -3320,9 +3692,10 @@ exports.BattleFormatsData = { tier: "NFE", }, scolipede: { - randomBattleMoves: ["substitute", "spikes", "toxicspikes", "megahorn", "rockslide", "earthquake", "swordsdance", "batonpass", "poisonjab"], - randomDoubleBattleMoves: ["substitute", "protect", "megahorn", "rockslide", "poisonjab", "swordsdance", "batonpass", "aquatail", "superpower"], - tier: "BL", + randomBattleMoves: ["protect", "spikes", "toxicspikes", "megahorn", "rockslide", "earthquake", "swordsdance", "poisonjab"], + randomDoubleBattleMoves: ["substitute", "protect", "megahorn", "rockslide", "poisonjab", "swordsdance", "aquatail", "superpower"], + tier: "UUBL", + doublesTier: "(DUU)", }, cottonee: { randomBattleMoves: ["encore", "taunt", "substitute", "leechseed", "toxic", "stunspore"], @@ -3330,9 +3703,10 @@ exports.BattleFormatsData = { }, whimsicott: { inherit: true, - randomBattleMoves: ["encore", "taunt", "substitute", "leechseed", "uturn", "toxic", "stunspore", "memento", "tailwind", "moonblast"], + randomBattleMoves: ["encore", "taunt", "leechseed", "uturn", "toxic", "stunspore", "memento", "tailwind", "moonblast"], randomDoubleBattleMoves: ["encore", "taunt", "substitute", "leechseed", "uturn", "helpinghand", "stunspore", "moonblast", "tailwind", "dazzlinggleam", "gigadrain", "protect"], tier: "UU", + doublesTier: "DOU", }, petilil: { randomBattleMoves: ["sunnyday", "sleeppowder", "solarbeam", "hiddenpowerfire", "hiddenpowerice", "healingwish"], @@ -3342,16 +3716,19 @@ exports.BattleFormatsData = { randomBattleMoves: ["sleeppowder", "quiverdance", "petaldance", "gigadrain", "hiddenpowerfire", "hiddenpowerrock"], randomDoubleBattleMoves: ["quiverdance", "gigadrain", "sleeppowder", "hiddenpowerice", "hiddenpowerfire", "hiddenpowerrock", "petaldance", "helpinghand", "protect"], tier: "NU", + doublesTier: "(DUU)", }, basculin: { randomBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "zenheadbutt"], randomDoubleBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "doubleedge", "protect"], tier: "PU", + doublesTier: "(DUU)", }, basculinbluestriped: { randomBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "zenheadbutt"], randomDoubleBattleMoves: ["waterfall", "aquajet", "superpower", "crunch", "doubleedge", "protect"], tier: "PU", + doublesTier: "(DUU)", }, sandile: { randomBattleMoves: ["earthquake", "stoneedge", "pursuit", "crunch"], @@ -3365,6 +3742,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "stoneedge", "pursuit", "knockoff", "stealthrock", "superpower"], randomDoubleBattleMoves: ["earthquake", "stoneedge", "protect", "knockoff", "superpower"], tier: "UU", + doublesTier: "DUU", }, darumaka: { randomBattleMoves: ["uturn", "flareblitz", "firepunch", "rockslide", "superpower"], @@ -3375,11 +3753,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "flareblitz", "rockslide", "earthquake", "superpower"], randomDoubleBattleMoves: ["uturn", "flareblitz", "firepunch", "rockslide", "earthquake", "superpower", "protect"], tier: "UU", + doublesTier: "(DUU)", }, maractus: { randomBattleMoves: ["spikes", "gigadrain", "leechseed", "hiddenpowerfire", "toxic", "suckerpunch", "spikyshield"], randomDoubleBattleMoves: ["grassyterrain", "gigadrain", "leechseed", "hiddenpowerfire", "helpinghand", "suckerpunch", "spikyshield"], tier: "PU", + doublesTier: "(DUU)", }, dwebble: { randomBattleMoves: ["stealthrock", "spikes", "shellsmash", "earthquake", "rockblast", "xscissor", "stoneedge"], @@ -3389,6 +3769,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["stealthrock", "spikes", "shellsmash", "earthquake", "rockblast", "xscissor", "stoneedge"], randomDoubleBattleMoves: ["protect", "shellsmash", "earthquake", "rockslide", "xscissor", "stoneedge"], tier: "PU", + doublesTier: "(DUU)", }, scraggy: { inherit: true, @@ -3400,11 +3781,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "icepunch", "highjumpkick", "drainpunch", "rest", "bulkup", "knockoff"], randomDoubleBattleMoves: ["fakeout", "drainpunch", "knockoff", "icepunch", "stoneedge", "protect"], tier: "RU", + doublesTier: "DOU", }, sigilyph: { randomBattleMoves: ["cosmicpower", "roost", "storedpower", "psychoshift"], randomDoubleBattleMoves: ["psyshock", "heatwave", "icebeam", "airslash", "energyball", "shadowball", "tailwind", "protect"], tier: "RU", + doublesTier: "(DUU)", }, yamask: { randomBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "haze", "rest", "sleeptalk", "painsplit"], @@ -3414,6 +3797,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "haze", "painsplit"], randomDoubleBattleMoves: ["nastyplot", "trickroom", "shadowball", "hiddenpowerfighting", "willowisp", "protect", "painsplit"], tier: "RU", + doublesTier: "DUU", }, tirtouga: { inherit: true, @@ -3423,7 +3807,8 @@ exports.BattleFormatsData = { carracosta: { randomBattleMoves: ["shellsmash", "aquajet", "waterfall", "stoneedge", "earthquake", "stealthrock"], randomDoubleBattleMoves: ["shellsmash", "aquajet", "waterfall", "stoneedge", "earthquake", "protect", "wideguard", "rockslide"], - tier: "BL4", + tier: "PUBL", + doublesTier: "(DUU)", }, archen: { inherit: true, @@ -3434,15 +3819,17 @@ exports.BattleFormatsData = { randomBattleMoves: ["headsmash", "acrobatics", "stoneedge", "earthquake", "aquatail", "uturn", "tailwind"], randomDoubleBattleMoves: ["stoneedge", "rockslide", "earthquake", "uturn", "acrobatics", "tailwind", "taunt", "protect"], tier: "NU", + doublesTier: "(DUU)", }, trubbish: { randomBattleMoves: ["clearsmog", "toxicspikes", "spikes", "gunkshot", "painsplit", "toxic"], tier: "LC", }, garbodor: { - randomBattleMoves: ["spikes", "toxicspikes", "gunkshot", "haze", "painsplit", "toxic", "rockblast"], + randomBattleMoves: ["spikes", "toxicspikes", "gunkshot", "haze", "painsplit", "toxic", "drainpunch"], randomDoubleBattleMoves: ["protect", "painsplit", "gunkshot", "seedbomb", "drainpunch", "explosion", "rockblast"], tier: "NU", + doublesTier: "(DUU)", }, zorua: { randomBattleMoves: ["suckerpunch", "extrasensory", "darkpulse", "hiddenpowerfighting", "uturn", "knockoff"], @@ -3450,9 +3837,10 @@ exports.BattleFormatsData = { }, zoroark: { inherit: true, - randomBattleMoves: ["suckerpunch", "darkpulse", "focusblast", "flamethrower", "uturn", "nastyplot", "knockoff", "trick"], + randomBattleMoves: ["suckerpunch", "darkpulse", "focusblast", "flamethrower", "uturn", "nastyplot", "knockoff", "trick", "sludgebomb"], randomDoubleBattleMoves: ["suckerpunch", "darkpulse", "focusblast", "flamethrower", "uturn", "nastyplot", "knockoff", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, minccino: { randomBattleMoves: ["return", "tailslap", "wakeupslap", "uturn", "aquatail"], @@ -3462,6 +3850,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["tailslap", "aquatail", "uturn", "knockoff", "bulletseed", "rockblast"], randomDoubleBattleMoves: ["tailslap", "aquatail", "uturn", "knockoff", "bulletseed", "rockblast", "protect"], tier: "RU", + doublesTier: "(DUU)", }, gothita: { randomBattleMoves: ["psychic", "thunderbolt", "hiddenpowerfighting", "shadowball", "substitute", "calmmind", "trick", "grassknot"], @@ -3476,6 +3865,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["psychic", "thunderbolt", "shadowball", "hiddenpowerfire", "hiddenpowerfighting", "substitute", "calmmind", "trick", "psyshock"], randomDoubleBattleMoves: ["psychic", "thunderbolt", "shadowball", "hiddenpowerfighting", "reflect", "lightscreen", "psyshock", "energyball", "trickroom", "taunt", "healpulse", "protect"], tier: "PU", + doublesTier: "(DUU)", }, solosis: { randomBattleMoves: ["calmmind", "recover", "psychic", "hiddenpowerfighting", "shadowball", "trickroom", "psyshock"], @@ -3489,15 +3879,17 @@ exports.BattleFormatsData = { randomBattleMoves: ["calmmind", "recover", "psychic", "focusblast", "shadowball", "trickroom", "psyshock"], randomDoubleBattleMoves: ["energyball", "helpinghand", "psychic", "focusblast", "shadowball", "trickroom", "psyshock", "hiddenpowerfire", "protect"], tier: "UU", + doublesTier: "DUU", }, ducklett: { randomBattleMoves: ["scald", "airslash", "roost", "hurricane", "icebeam", "hiddenpowergrass", "bravebird", "defog"], tier: "LC", }, swanna: { - randomBattleMoves: ["airslash", "roost", "hurricane", "surf", "icebeam", "raindance", "defog", "scald"], + randomBattleMoves: ["airslash", "roost", "hurricane", "icebeam", "raindance", "defog", "scald"], randomDoubleBattleMoves: ["airslash", "roost", "hurricane", "surf", "icebeam", "raindance", "tailwind", "scald", "protect"], tier: "PU", + doublesTier: "(DUU)", }, vanillite: { randomBattleMoves: ["icebeam", "explosion", "hiddenpowerelectric", "hiddenpowerfighting", "autotomize"], @@ -3511,21 +3903,24 @@ exports.BattleFormatsData = { randomBattleMoves: ["icebeam", "explosion", "hiddenpowerground", "flashcannon", "autotomize", "freezedry"], randomDoubleBattleMoves: ["icebeam", "taunt", "hiddenpowerground", "flashcannon", "autotomize", "protect", "freezedry"], tier: "PU", + doublesTier: "(DUU)", }, deerling: { inherit: true, - randomBattleMoves: ["agility", "batonpass", "seedbomb", "jumpkick", "synthesis", "return", "thunderwave"], + randomBattleMoves: ["agility", "seedbomb", "jumpkick", "synthesis", "return", "thunderwave"], tier: "LC", }, sawsbuck: { - randomBattleMoves: ["swordsdance", "hornleech", "jumpkick", "return", "substitute", "batonpass"], + randomBattleMoves: ["swordsdance", "hornleech", "jumpkick", "return", "substitute"], randomDoubleBattleMoves: ["swordsdance", "hornleech", "jumpkick", "return", "substitute", "synthesis", "protect"], tier: "PU", + doublesTier: "(DUU)", }, emolga: { - randomBattleMoves: ["encore", "chargebeam", "batonpass", "substitute", "thunderbolt", "airslash", "roost"], + randomBattleMoves: ["encore", "chargebeam", "uturn", "thunderbolt", "airslash", "roost"], randomDoubleBattleMoves: ["helpinghand", "tailwind", "encore", "substitute", "thunderbolt", "airslash", "roost", "protect"], tier: "PU", + doublesTier: "(DUU)", }, karrablast: { inherit: true, @@ -3536,6 +3931,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["megahorn", "pursuit", "ironhead", "knockoff", "swordsdance", "drillrun"], randomDoubleBattleMoves: ["megahorn", "protect", "ironhead", "knockoff", "swordsdance", "drillrun"], tier: "RU", + doublesTier: "DUU", }, foongus: { randomBattleMoves: ["spore", "stunspore", "gigadrain", "clearsmog", "hiddenpowerfire", "synthesis", "sludgebomb"], @@ -3545,6 +3941,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["spore", "stunspore", "gigadrain", "clearsmog", "hiddenpowerfire", "synthesis", "sludgebomb", "foulplay"], randomDoubleBattleMoves: ["spore", "stunspore", "gigadrain", "ragepowder", "hiddenpowerfire", "synthesis", "sludgebomb", "protect"], tier: "OU", + doublesTier: "DOU", }, frillish: { randomBattleMoves: ["scald", "willowisp", "recover", "toxic", "shadowball", "taunt"], @@ -3555,11 +3952,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "willowisp", "recover", "toxic", "shadowball", "icebeam", "taunt"], randomDoubleBattleMoves: ["scald", "willowisp", "recover", "trickroom", "shadowball", "icebeam", "waterspout", "icywind", "protect"], tier: "RU", + doublesTier: "DUU", }, alomomola: { randomBattleMoves: ["wish", "protect", "knockoff", "toxic", "scald"], randomDoubleBattleMoves: ["wish", "protect", "knockoff", "icywind", "scald", "helpinghand", "wideguard"], tier: "RU", + doublesTier: "(DUU)", }, joltik: { randomBattleMoves: ["thunderbolt", "bugbuzz", "hiddenpowerice", "gigadrain", "voltswitch"], @@ -3569,15 +3968,18 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunder", "hiddenpowerice", "gigadrain", "bugbuzz", "voltswitch", "stickyweb"], randomDoubleBattleMoves: ["thunder", "hiddenpowerice", "gigadrain", "bugbuzz", "voltswitch", "stickyweb", "protect"], tier: "UU", + doublesTier: "(DUU)", }, ferroseed: { randomBattleMoves: ["spikes", "stealthrock", "leechseed", "seedbomb", "protect", "thunderwave", "gyroball"], tier: "NU", + doublesTier: "LC", }, ferrothorn: { - randomBattleMoves: ["spikes", "stealthrock", "leechseed", "powerwhip", "thunderwave", "protect", "knockoff", "gyroball"], - randomDoubleBattleMoves: ["gyroball", "stealthrock", "leechseed", "powerwhip", "thunderwave", "protect"], + randomBattleMoves: ["spikes", "stealthrock", "leechseed", "powerwhip", "protect", "knockoff", "gyroball"], + randomDoubleBattleMoves: ["gyroball", "stealthrock", "leechseed", "powerwhip", "knockoff", "protect"], tier: "OU", + doublesTier: "DOU", }, klink: { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "substitute"], @@ -3591,6 +3993,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "substitute"], randomDoubleBattleMoves: ["shiftgear", "return", "geargrind", "wildcharge", "protect"], tier: "NU", + doublesTier: "(DUU)", }, tynamo: { randomBattleMoves: ["spark", "chargebeam", "thunderwave", "tackle"], @@ -3604,6 +4007,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["thunderbolt", "flamethrower", "uturn", "voltswitch", "acidspray", "gigadrain", "knockoff", "superpower", "aquatail"], randomDoubleBattleMoves: ["thunderbolt", "flamethrower", "uturn", "voltswitch", "knockoff", "gigadrain", "protect"], tier: "RU", + doublesTier: "(DUU)", }, elgyem: { randomBattleMoves: ["nastyplot", "psychic", "thunderbolt", "hiddenpowerfighting", "recover", "trickroom", "signalbeam"], @@ -3613,6 +4017,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["nastyplot", "psychic", "psyshock", "thunderbolt", "hiddenpowerfighting", "trick", "trickroom", "signalbeam"], randomDoubleBattleMoves: ["nastyplot", "psychic", "thunderbolt", "hiddenpowerfighting", "recover", "trick", "trickroom", "signalbeam", "protect"], tier: "PU", + doublesTier: "(DUU)", }, litwick: { randomBattleMoves: ["shadowball", "energyball", "fireblast", "hiddenpowerground", "trickroom", "substitute", "painsplit"], @@ -3627,6 +4032,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["calmmind", "shadowball", "energyball", "fireblast", "hiddenpowerground", "trick", "substitute", "painsplit"], randomDoubleBattleMoves: ["shadowball", "energyball", "overheat", "heatwave", "hiddenpowerice", "trick", "protect"], tier: "UU", + doublesTier: "DUU", }, axew: { inherit: true, @@ -3642,6 +4048,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["dragondance", "swordsdance", "outrage", "dragonclaw", "earthquake", "poisonjab", "taunt", "substitute"], randomDoubleBattleMoves: ["dragondance", "swordsdance", "protect", "dragonclaw", "earthquake", "poisonjab", "taunt", "substitute"], tier: "UU", + doublesTier: "(DUU)", }, cubchoo: { inherit: true, @@ -3652,41 +4059,47 @@ exports.BattleFormatsData = { randomBattleMoves: ["iciclecrash", "superpower", "nightslash", "stoneedge", "swordsdance", "aquajet"], randomDoubleBattleMoves: ["iciclecrash", "superpower", "nightslash", "stoneedge", "swordsdance", "aquajet", "protect"], tier: "PU", + doublesTier: "(DUU)", }, cryogonal: { randomBattleMoves: ["icebeam", "recover", "toxic", "rapidspin", "haze", "freezedry", "hiddenpowerground"], randomDoubleBattleMoves: ["icebeam", "recover", "icywind", "protect", "reflect", "freezedry", "hiddenpowerground"], tier: "PU", + doublesTier: "(DUU)", }, shelmet: { inherit: true, - randomBattleMoves: ["spikes", "yawn", "substitute", "acidarmor", "batonpass", "recover", "toxic", "bugbuzz", "infestation"], + randomBattleMoves: ["spikes", "yawn", "substitute", "acidarmor", "recover", "toxic", "bugbuzz", "infestation"], tier: "LC", }, accelgor: { randomBattleMoves: ["spikes", "yawn", "bugbuzz", "focusblast", "gigadrain", "hiddenpowerrock", "encore"], randomDoubleBattleMoves: ["protect", "yawn", "bugbuzz", "focusblast", "gigadrain", "hiddenpowerrock", "encore", "sludgebomb"], tier: "RU", + doublesTier: "(DUU)", }, stunfisk: { randomBattleMoves: ["discharge", "earthpower", "scald", "toxic", "rest", "sleeptalk", "stealthrock"], randomDoubleBattleMoves: ["discharge", "earthpower", "scald", "electroweb", "protect", "stealthrock"], tier: "PU", + doublesTier: "(DUU)", }, mienfoo: { - randomBattleMoves: ["uturn", "drainpunch", "stoneedge", "swordsdance", "batonpass", "highjumpkick", "fakeout", "knockoff"], + randomBattleMoves: ["uturn", "drainpunch", "stoneedge", "swordsdance", "highjumpkick", "fakeout", "knockoff"], tier: "LC", }, mienshao: { - randomBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "substitute", "swordsdance", "batonpass", "knockoff"], + randomBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "poisonjab", "swordsdance", "knockoff"], randomDoubleBattleMoves: ["uturn", "fakeout", "highjumpkick", "stoneedge", "drainpunch", "swordsdance", "wideguard", "knockoff", "feint", "protect"], tier: "UU", + doublesTier: "(DUU)", }, druddigon: { inherit: true, randomBattleMoves: ["outrage", "earthquake", "suckerpunch", "dragonclaw", "dragontail", "substitute", "glare", "stealthrock", "firepunch", "gunkshot"], randomDoubleBattleMoves: ["superpower", "earthquake", "suckerpunch", "dragonclaw", "glare", "protect", "firepunch", "thunderpunch"], tier: "RU", + doublesTier: "(DUU)", }, golett: { randomBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stealthrock", "rockpolish"], @@ -3697,21 +4110,25 @@ exports.BattleFormatsData = { randomBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stealthrock", "rockpolish"], randomDoubleBattleMoves: ["earthquake", "shadowpunch", "dynamicpunch", "icepunch", "stoneedge", "protect", "rockpolish"], tier: "NU", + doublesTier: "(DUU)", }, pawniard: { randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "knockoff"], tier: "PU", + doublesTier: "LC", }, bisharp: { - randomBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "knockoff"], + randomBattleMoves: ["swordsdance", "knockoff", "ironhead", "suckerpunch", "lowkick"], randomDoubleBattleMoves: ["swordsdance", "substitute", "suckerpunch", "ironhead", "brickbreak", "knockoff", "protect"], tier: "OU", + doublesTier: "DOU", }, bouffalant: { inherit: true, randomBattleMoves: ["headcharge", "earthquake", "stoneedge", "megahorn", "swordsdance", "superpower"], randomDoubleBattleMoves: ["headcharge", "earthquake", "stoneedge", "megahorn", "swordsdance", "superpower", "protect"], tier: "PU", + doublesTier: "(DUU)", }, rufflet: { randomBattleMoves: ["bravebird", "rockslide", "return", "uturn", "substitute", "bulkup", "roost"], @@ -3722,26 +4139,31 @@ exports.BattleFormatsData = { randomBattleMoves: ["bravebird", "superpower", "return", "uturn", "substitute", "rockslide", "bulkup", "roost"], randomDoubleBattleMoves: ["bravebird", "superpower", "return", "uturn", "tailwind", "rockslide", "bulkup", "roost", "skydrop", "protect"], tier: "RU", + doublesTier: "(DUU)", }, vullaby: { randomBattleMoves: ["knockoff", "roost", "taunt", "whirlwind", "toxic", "defog", "uturn", "bravebird"], tier: "PU", + doublesTier: "LC", }, mandibuzz: { inherit: true, randomBattleMoves: ["foulplay", "knockoff", "roost", "taunt", "whirlwind", "toxic", "uturn", "bravebird", "defog"], randomDoubleBattleMoves: ["knockoff", "roost", "taunt", "tailwind", "snarl", "uturn", "bravebird", "protect"], tier: "UU", + doublesTier: "(DUU)", }, heatmor: { randomBattleMoves: ["fireblast", "suckerpunch", "focusblast", "gigadrain", "knockoff"], randomDoubleBattleMoves: ["fireblast", "suckerpunch", "focusblast", "gigadrain", "heatwave", "protect"], tier: "PU", + doublesTier: "(DUU)", }, durant: { - randomBattleMoves: ["honeclaws", "ironhead", "xscissor", "stoneedge", "batonpass", "superpower"], + randomBattleMoves: ["honeclaws", "ironhead", "xscissor", "stoneedge", "superpower"], randomDoubleBattleMoves: ["honeclaws", "ironhead", "xscissor", "rockslide", "protect", "superpower"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, deino: { inherit: true, @@ -3757,6 +4179,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "dracometeor", "dragonpulse", "earthpower", "fireblast", "darkpulse", "roost", "flashcannon", "superpower"], randomDoubleBattleMoves: ["uturn", "dracometeor", "dragonpulse", "earthpower", "fireblast", "darkpulse", "roost", "flashcannon", "superpower", "tailwind", "protect"], tier: "UU", + doublesTier: "DOU", }, larvesta: { randomBattleMoves: ["flareblitz", "uturn", "wildcharge", "zenheadbutt", "morningsun", "willowisp"], @@ -3766,103 +4189,120 @@ exports.BattleFormatsData = { inherit: true, randomBattleMoves: ["quiverdance", "fierydance", "fireblast", "bugbuzz", "roost", "gigadrain", "hiddenpowerice", "hiddenpowerground"], randomDoubleBattleMoves: ["quiverdance", "fierydance", "fireblast", "bugbuzz", "roost", "gigadrain", "hiddenpowerice", "heatwave", "willowisp", "ragepowder", "tailwind", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "DUU", }, cobalion: { inherit: true, randomBattleMoves: ["closecombat", "ironhead", "swordsdance", "substitute", "stoneedge", "voltswitch", "hiddenpowerice", "taunt", "stealthrock"], randomDoubleBattleMoves: ["closecombat", "ironhead", "swordsdance", "substitute", "stoneedge", "thunderwave", "protect"], tier: "UU", + doublesTier: "(DUU)", }, terrakion: { inherit: true, randomBattleMoves: ["stoneedge", "closecombat", "swordsdance", "substitute", "stealthrock", "earthquake"], randomDoubleBattleMoves: ["stoneedge", "closecombat", "substitute", "rockslide", "earthquake", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "DOU", }, virizion: { inherit: true, randomBattleMoves: ["swordsdance", "closecombat", "leafblade", "stoneedge", "calmmind", "focusblast", "gigadrain", "hiddenpowerice", "substitute"], randomDoubleBattleMoves: ["taunt", "closecombat", "stoneedge", "leafblade", "swordsdance", "synthesis", "protect"], tier: "RU", + doublesTier: "(DUU)", }, tornadus: { inherit: true, - randomBattleMoves: ["bulkup", "acrobatics", "knockoff", "substitute", "hurricane", "heatwave", "superpower", "uturn", "taunt", "tailwind"], + randomBattleMoves: ["bulkup", "acrobatics", "knockoff", "substitute", "hurricane", "heatwave", "superpower", "uturn", "tailwind"], randomDoubleBattleMoves: ["hurricane", "airslash", "uturn", "superpower", "focusblast", "taunt", "substitute", "heatwave", "tailwind", "protect", "skydrop"], tier: "UU", + doublesTier: "DUU", }, tornadustherian: { - randomBattleMoves: ["hurricane", "airslash", "heatwave", "knockoff", "superpower", "uturn", "taunt"], + randomBattleMoves: ["hurricane", "heatwave", "knockoff", "superpower", "uturn", "taunt"], randomDoubleBattleMoves: ["hurricane", "airslash", "focusblast", "uturn", "heatwave", "skydrop", "tailwind", "taunt", "protect"], eventOnly: true, tier: "OU", + doublesTier: "(DUU)", }, thundurus: { inherit: true, randomBattleMoves: ["thunderwave", "nastyplot", "thunderbolt", "hiddenpowerice", "hiddenpowerflying", "focusblast", "substitute", "knockoff", "taunt"], randomDoubleBattleMoves: ["thunderwave", "nastyplot", "thunderbolt", "hiddenpowerice", "hiddenpowerflying", "focusblast", "substitute", "knockoff", "taunt", "protect"], tier: "OU", + doublesTier: "DOU", }, thundurustherian: { randomBattleMoves: ["nastyplot", "thunderbolt", "hiddenpowerflying", "hiddenpowerice", "focusblast", "voltswitch"], randomDoubleBattleMoves: ["nastyplot", "thunderbolt", "hiddenpowerflying", "hiddenpowerice", "focusblast", "voltswitch", "protect"], eventOnly: true, - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, reshiram: { inherit: true, randomBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "toxic", "flamecharge", "stoneedge", "roost"], randomDoubleBattleMoves: ["blueflare", "dracometeor", "dragonpulse", "heatwave", "flamecharge", "roost", "protect", "tailwind"], tier: "Uber", + doublesTier: "DUber", }, zekrom: { inherit: true, randomBattleMoves: ["boltstrike", "outrage", "dragonclaw", "dracometeor", "voltswitch", "honeclaws", "substitute", "roost"], randomDoubleBattleMoves: ["voltswitch", "protect", "dragonclaw", "boltstrike", "honeclaws", "substitute", "dracometeor", "fusionbolt", "roost", "tailwind"], tier: "Uber", + doublesTier: "DUber", }, landorus: { inherit: true, randomBattleMoves: ["calmmind", "rockpolish", "earthpower", "focusblast", "psychic", "sludgewave", "stealthrock", "knockoff", "rockslide"], randomDoubleBattleMoves: ["earthpower", "focusblast", "hiddenpowerice", "psychic", "sludgebomb", "rockslide", "protect"], tier: "Uber", + doublesTier: "(DUU)", }, landorustherian: { randomBattleMoves: ["swordsdance", "rockpolish", "earthquake", "stoneedge", "uturn", "superpower", "stealthrock"], randomDoubleBattleMoves: ["rockslide", "earthquake", "stoneedge", "uturn", "superpower", "knockoff", "protect"], eventOnly: true, tier: "OU", + doublesTier: "DOU", }, kyurem: { inherit: true, - randomBattleMoves: ["dracometeor", "icebeam", "earthpower", "outrage", "substitute", "dragonpulse", "focusblast", "roost"], + randomBattleMoves: ["dracometeor", "icebeam", "earthpower", "outrage", "substitute", "focusblast", "roost"], randomDoubleBattleMoves: ["substitute", "icebeam", "dracometeor", "dragonpulse", "focusblast", "glaciate", "earthpower", "roost", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, kyuremblack: { inherit: true, randomBattleMoves: ["outrage", "fusionbolt", "icebeam", "roost", "substitute", "earthpower", "dragonclaw"], randomDoubleBattleMoves: ["protect", "fusionbolt", "icebeam", "roost", "substitute", "honeclaws", "earthpower", "dragonclaw"], tier: "OU", + doublesTier: "DOU", }, kyuremwhite: { inherit: true, randomBattleMoves: ["dracometeor", "icebeam", "fusionflare", "earthpower", "focusblast", "dragonpulse", "substitute", "roost", "toxic"], randomDoubleBattleMoves: ["dracometeor", "dragonpulse", "icebeam", "fusionflare", "earthpower", "focusblast", "roost", "protect"], tier: "Uber", + doublesTier: "DUber", }, keldeo: { inherit: true, randomBattleMoves: ["hydropump", "secretsword", "calmmind", "hiddenpowerflying", "hiddenpowerelectric", "substitute", "scald", "icywind"], randomDoubleBattleMoves: ["hydropump", "secretsword", "protect", "hiddenpowerflying", "hiddenpowerelectric", "substitute", "surf", "icywind", "taunt"], tier: "OU", + doublesTier: "DOU", }, meloetta: { inherit: true, randomBattleMoves: ["uturn", "calmmind", "psyshock", "hypervoice", "shadowball", "focusblast"], randomDoubleBattleMoves: ["calmmind", "psyshock", "thunderbolt", "hypervoice", "shadowball", "focusblast", "protect"], tier: "RU", + doublesTier: "(DUU)", }, meloettapirouette: { randomBattleMoves: ["relicsong", "closecombat", "knockoff", "return"], @@ -3875,6 +4315,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["uturn", "bugbuzz", "icebeam", "flamethrower", "thunderbolt", "ironhead", "shiftgear", "extremespeed", "blazekick"], randomDoubleBattleMoves: ["uturn", "bugbuzz", "icebeam", "flamethrower", "thunderbolt", "ironhead", "shiftgear", "extremespeed", "blazekick", "protect"], tier: "Uber", + doublesTier: "DUU", }, genesectburn: { randomBattleMoves: ["uturn", "bugbuzz", "icebeam", "technoblast", "thunderbolt", "ironhead", "extremespeed"], @@ -3912,6 +4353,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["leechseed", "synthesis", "spikes", "drainpunch", "spikyshield", "woodhammer"], randomDoubleBattleMoves: ["leechseed", "synthesis", "hammerarm", "spikyshield", "stoneedge", "woodhammer", "rockslide"], tier: "UU", + doublesTier: "(DUU)", }, fennekin: { inherit: true, @@ -3926,6 +4368,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["calmmind", "fireblast", "psyshock", "grassknot", "switcheroo", "shadowball"], randomDoubleBattleMoves: ["calmmind", "fireblast", "psyshock", "grassknot", "switcheroo", "shadowball", "heatwave", "dazzlinggleam", "protect"], tier: "RU", + doublesTier: "(DUU)", }, froakie: { inherit: true, @@ -3941,6 +4384,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["hydropump", "icebeam", "darkpulse", "gunkshot", "uturn", "spikes", "toxicspikes", "taunt"], randomDoubleBattleMoves: ["hydropump", "uturn", "surf", "icebeam", "matblock", "taunt", "darkpulse", "protect"], tier: "Uber", + doublesTier: "(DUU)", }, bunnelby: { randomBattleMoves: ["agility", "earthquake", "return", "quickattack", "uturn", "stoneedge", "spikes", "bounce"], @@ -3949,7 +4393,8 @@ exports.BattleFormatsData = { diggersby: { randomBattleMoves: ["earthquake", "return", "wildcharge", "uturn", "swordsdance", "quickattack", "knockoff", "agility"], randomDoubleBattleMoves: ["earthquake", "uturn", "return", "wildcharge", "protect", "quickattack"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, fletchling: { randomBattleMoves: ["roost", "swordsdance", "uturn", "return", "overheat", "flamecharge", "tailwind"], @@ -3958,11 +4403,13 @@ exports.BattleFormatsData = { fletchinder: { randomBattleMoves: ["roost", "swordsdance", "uturn", "return", "overheat", "flamecharge", "tailwind", "acrobatics"], tier: "RU", + doublesTier: "NFE", }, talonflame: { randomBattleMoves: ["bravebird", "flareblitz", "roost", "swordsdance", "uturn", "willowisp", "tailwind"], randomDoubleBattleMoves: ["bravebird", "flareblitz", "roost", "swordsdance", "uturn", "willowisp", "tailwind", "taunt", "protect"], tier: "OU", + doublesTier: "DOU", }, scatterbug: { randomBattleMoves: ["tackle", "stringshot", "stunspore", "bugbite", "poisonpowder"], @@ -3976,6 +4423,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["sleeppowder", "quiverdance", "hurricane", "bugbuzz", "substitute"], randomDoubleBattleMoves: ["sleeppowder", "quiverdance", "hurricane", "bugbuzz", "roost", "protect"], tier: "NU", + doublesTier: "(DUU)", }, litleo: { randomBattleMoves: ["hypervoice", "fireblast", "willowisp", "bulldoze", "yawn"], @@ -3986,6 +4434,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["sunnyday", "fireblast", "hypervoice", "solarbeam", "willowisp", "darkpulse"], randomDoubleBattleMoves: ["hypervoice", "fireblast", "willowisp", "protect", "sunnyday", "solarbeam"], tier: "NU", + doublesTier: "(DUU)", }, flabebe: { randomBattleMoves: ["moonblast", "toxic", "wish", "psychic", "aromatherapy", "protect", "calmmind"], @@ -4005,6 +4454,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["calmmind", "moonblast", "synthesis", "aromatherapy", "wish", "toxic", "protect"], randomDoubleBattleMoves: ["moonblast", "dazzlinggleam", "wish", "psychic", "aromatherapy", "protect", "calmmind"], tier: "UU", + doublesTier: "(DUU)", }, skiddo: { randomBattleMoves: ["hornleech", "brickbreak", "bulkup", "leechseed", "milkdrink", "rockslide"], @@ -4014,6 +4464,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["bulkup", "hornleech", "earthquake", "rockslide", "substitute", "leechseed", "milkdrink"], randomDoubleBattleMoves: ["hornleech", "earthquake", "brickbreak", "bulkup", "leechseed", "milkdrink", "rockslide", "protect"], tier: "PU", + doublesTier: "(DUU)", }, pancham: { inherit: true, @@ -4023,12 +4474,14 @@ exports.BattleFormatsData = { pangoro: { randomBattleMoves: ["knockoff", "superpower", "gunkshot", "icepunch", "partingshot", "drainpunch"], randomDoubleBattleMoves: ["partingshot", "hammerarm", "crunch", "circlethrow", "icepunch", "earthquake", "poisonjab", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, furfrou: { randomBattleMoves: ["return", "cottonguard", "thunderwave", "substitute", "toxic", "suckerpunch", "uturn", "rest"], randomDoubleBattleMoves: ["return", "cottonguard", "uturn", "thunderwave", "suckerpunch", "snarl", "wildcharge", "protect"], tier: "PU", + doublesTier: "(DUU)", }, espurr: { randomBattleMoves: ["fakeout", "yawn", "thunderwave", "psychic", "trick", "darkpulse"], @@ -4038,11 +4491,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["toxic", "yawn", "thunderwave", "psychic", "reflect", "lightscreen", "healbell"], randomDoubleBattleMoves: ["fakeout", "thunderwave", "psychic", "reflect", "lightscreen", "safeguard", "protect"], tier: "PU", + doublesTier: "(DUU)", }, meowsticf: { randomBattleMoves: ["calmmind", "psychic", "psyshock", "shadowball", "energyball", "thunderbolt"], randomDoubleBattleMoves: ["psyshock", "darkpulse", "fakeout", "energyball", "signalbeam", "thunderbolt", "protect", "helpinghand"], tier: "PU", + doublesTier: "(DUU)", }, honedge: { randomBattleMoves: ["swordsdance", "shadowclaw", "shadowsneak", "ironhead", "rockslide", "aerialace", "destinybond"], @@ -4052,12 +4507,14 @@ exports.BattleFormatsData = { randomBattleMoves: ["swordsdance", "shadowclaw", "shadowsneak", "ironhead", "sacredsword"], randomDoubleBattleMoves: ["swordsdance", "shadowclaw", "shadowsneak", "ironhead", "sacredsword", "rockslide", "protect"], tier: "UU", + doublesTier: "NFE", }, aegislash: { inherit: true, randomBattleMoves: ["kingsshield", "swordsdance", "shadowclaw", "sacredsword", "ironhead", "shadowsneak", "hiddenpowerice", "shadowball", "flashcannon"], randomDoubleBattleMoves: ["kingsshield", "swordsdance", "shadowclaw", "sacredsword", "ironhead", "shadowsneak", "wideguard", "hiddenpowerice", "shadowball", "flashcannon"], tier: "Uber", + doublesTier: "DOU", }, spritzee: { randomBattleMoves: ["calmmind", "drainingkiss", "moonblast", "psychic", "aromatherapy", "wish", "trickroom", "thunderbolt"], @@ -4068,6 +4525,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["wish", "protect", "moonblast", "aromatherapy", "reflect", "lightscreen"], randomDoubleBattleMoves: ["moonblast", "aromatherapy", "wish", "trickroom", "thunderbolt", "protect", "healpulse"], tier: "RU", + doublesTier: "DUU", }, swirlix: { randomBattleMoves: ["calmmind", "drainingkiss", "dazzlinggleam", "surf", "psychic", "flamethrower", "bellydrum", "thunderbolt", "return", "thief", "cottonguard"], @@ -4076,7 +4534,8 @@ exports.BattleFormatsData = { slurpuff: { randomBattleMoves: ["substitute", "bellydrum", "playrough", "return", "drainpunch", "calmmind", "drainingkiss", "dazzlinggleam", "flamethrower", "surf"], randomDoubleBattleMoves: ["substitute", "bellydrum", "playrough", "return", "drainpunch", "dazzlinggleam", "surf", "psychic", "flamethrower", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, inkay: { inherit: true, @@ -4085,9 +4544,10 @@ exports.BattleFormatsData = { }, malamar: { inherit: true, - randomBattleMoves: ["superpower", "knockoff", "psychocut", "rockslide", "substitute", "trickroom"], + randomBattleMoves: ["superpower", "knockoff", "psychocut", "substitute", "trickroom"], randomDoubleBattleMoves: ["superpower", "psychocut", "rockslide", "trickroom", "knockoff", "protect"], tier: "NU", + doublesTier: "(DUU)", }, binacle: { randomBattleMoves: ["shellsmash", "razorshell", "stoneedge", "earthquake", "crosschop", "poisonjab", "xscissor", "rockslide"], @@ -4097,6 +4557,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["shellsmash", "stoneedge", "razorshell", "earthquake", "crosschop", "stealthrock"], randomDoubleBattleMoves: ["shellsmash", "razorshell", "earthquake", "crosschop", "rockslide", "protect"], tier: "NU", + doublesTier: "(DUU)", }, skrelp: { randomBattleMoves: ["scald", "sludgebomb", "thunderbolt", "shadowball", "toxicspikes", "hydropump"], @@ -4105,7 +4566,8 @@ exports.BattleFormatsData = { dragalge: { randomBattleMoves: ["dracometeor", "sludgewave", "focusblast", "scald", "hiddenpowerfire", "toxicspikes", "dragonpulse"], randomDoubleBattleMoves: ["dracometeor", "sludgebomb", "focusblast", "scald", "hiddenpowerfire", "protect", "dragonpulse"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, clauncher: { randomBattleMoves: ["waterpulse", "flashcannon", "uturn", "crabhammer", "aquajet", "sludgebomb"], @@ -4115,6 +4577,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["scald", "waterpulse", "darkpulse", "aurasphere", "icebeam", "uturn"], randomDoubleBattleMoves: ["waterpulse", "icebeam", "uturn", "darkpulse", "aurasphere", "muddywater", "helpinghand", "protect"], tier: "RU", + doublesTier: "(DUU)", }, helioptile: { randomBattleMoves: ["surf", "voltswitch", "hiddenpowerice", "raindance", "thunder", "darkpulse", "thunderbolt"], @@ -4124,6 +4587,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["raindance", "thunder", "hypervoice", "surf", "darkpulse", "hiddenpowerice", "voltswitch", "thunderbolt"], randomDoubleBattleMoves: ["surf", "voltswitch", "hiddenpowerice", "raindance", "thunder", "darkpulse", "thunderbolt", "electricterrain", "protect"], tier: "UU", + doublesTier: "(DUU)", }, tyrunt: { inherit: true, @@ -4133,7 +4597,8 @@ exports.BattleFormatsData = { tyrantrum: { randomBattleMoves: ["stealthrock", "dragondance", "dragonclaw", "earthquake", "superpower", "outrage", "headsmash"], randomDoubleBattleMoves: ["rockslide", "dragondance", "headsmash", "dragonclaw", "earthquake", "icefang", "firefang", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, amaura: { inherit: true, @@ -4141,30 +4606,35 @@ exports.BattleFormatsData = { tier: "LC", }, aurorus: { - randomBattleMoves: ["ancientpower", "thunderbolt", "encore", "thunderwave", "earthpower", "freezedry", "hypervoice", "stealthrock"], - randomDoubleBattleMoves: ["hypervoice", "ancientpower", "thunderbolt", "encore", "thunderwave", "flashcannon", "freezedry", "icywind", "protect"], + randomBattleMoves: ["ancientpower", "blizzard", "thunderwave", "earthpower", "freezedry", "hypervoice", "stealthrock"], + randomDoubleBattleMoves: ["hypervoice", "ancientpower", "thunderwave", "flashcannon", "freezedry", "icywind", "protect"], tier: "NU", + doublesTier: "(DUU)", }, sylveon: { inherit: true, - randomBattleMoves: ["hypervoice", "calmmind", "wish", "protect", "psyshock", "batonpass", "shadowball"], + randomBattleMoves: ["hypervoice", "calmmind", "wish", "protect", "psyshock", "shadowball"], randomDoubleBattleMoves: ["hypervoice", "calmmind", "wish", "protect", "psyshock", "helpinghand", "shadowball", "hiddenpowerground"], tier: "UU", + doublesTier: "DOU", }, hawlucha: { randomBattleMoves: ["substitute", "swordsdance", "highjumpkick", "acrobatics", "roost", "stoneedge"], randomDoubleBattleMoves: ["swordsdance", "highjumpkick", "uturn", "stoneedge", "skydrop", "encore", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, dedenne: { randomBattleMoves: ["substitute", "recycle", "thunderbolt", "nuzzle", "grassknot", "hiddenpowerice", "toxic"], randomDoubleBattleMoves: ["voltswitch", "thunderbolt", "nuzzle", "grassknot", "hiddenpowerice", "uturn", "helpinghand", "protect"], tier: "PU", + doublesTier: "(DUU)", }, carbink: { randomBattleMoves: ["stealthrock", "lightscreen", "reflect", "explosion", "powergem", "moonblast"], randomDoubleBattleMoves: ["trickroom", "lightscreen", "reflect", "explosion", "powergem", "moonblast", "protect"], tier: "PU", + doublesTier: "(DUU)", }, goomy: { randomBattleMoves: ["sludgebomb", "thunderbolt", "toxic", "protect", "infestation"], @@ -4178,11 +4648,13 @@ exports.BattleFormatsData = { randomBattleMoves: ["dracometeor", "dragonpulse", "fireblast", "sludgebomb", "thunderbolt", "earthquake", "dragontail"], randomDoubleBattleMoves: ["thunderbolt", "icebeam", "dragonpulse", "fireblast", "muddywater", "dracometeor", "focusblast", "protect"], tier: "UU", + doublesTier: "DUU", }, klefki: { randomBattleMoves: ["reflect", "lightscreen", "spikes", "magnetrise", "playrough", "thunderwave", "foulplay", "toxic"], randomDoubleBattleMoves: ["reflect", "lightscreen", "safeguard", "playrough", "substitute", "thunderwave", "protect", "flashcannon", "dazzlinggleam"], tier: "UU", + doublesTier: "(DUU)", }, phantump: { randomBattleMoves: ["hornleech", "leechseed", "phantomforce", "substitute", "willowisp", "rest"], @@ -4192,6 +4664,7 @@ exports.BattleFormatsData = { randomBattleMoves: ["hornleech", "shadowclaw", "leechseed", "willowisp", "rest", "substitute", "phantomforce"], randomDoubleBattleMoves: ["hornleech", "woodhammer", "leechseed", "shadowclaw", "willowisp", "trickroom", "earthquake", "rockslide", "protect"], tier: "PU", + doublesTier: "(DUU)", }, pumpkaboo: { randomBattleMoves: ["willowisp", "shadowsneak", "destinybond", "synthesis", "seedbomb", "leechseed"], @@ -4214,21 +4687,25 @@ exports.BattleFormatsData = { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect"], tier: "PU", + doublesTier: "(DUU)", }, gourgeistsmall: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect"], tier: "PU", + doublesTier: "(DUU)", }, gourgeistlarge: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect", "trickroom"], tier: "PU", + doublesTier: "(DUU)", }, gourgeistsuper: { randomBattleMoves: ["willowisp", "seedbomb", "leechseed", "shadowsneak", "substitute", "synthesis"], randomDoubleBattleMoves: ["willowisp", "shadowsneak", "painsplit", "seedbomb", "leechseed", "phantomforce", "explosion", "protect", "trickroom"], tier: "PU", + doublesTier: "(DUU)", }, bergmite: { randomBattleMoves: ["avalanche", "recover", "stoneedge", "curse", "gyroball", "rapidspin"], @@ -4238,62 +4715,74 @@ exports.BattleFormatsData = { randomBattleMoves: ["avalanche", "recover", "toxic", "rapidspin", "roar", "earthquake"], randomDoubleBattleMoves: ["avalanche", "recover", "earthquake", "protect"], tier: "PU", + doublesTier: "(DUU)", }, noibat: { randomBattleMoves: ["airslash", "hurricane", "dracometeor", "uturn", "roost", "switcheroo"], tier: "LC", }, noivern: { - randomBattleMoves: ["dracometeor", "hurricane", "airslash", "flamethrower", "boomburst", "switcheroo", "uturn", "roost", "taunt"], + randomBattleMoves: ["dracometeor", "hurricane", "flamethrower", "boomburst", "switcheroo", "uturn", "roost", "taunt"], randomDoubleBattleMoves: ["airslash", "hurricane", "dragonpulse", "dracometeor", "focusblast", "flamethrower", "uturn", "roost", "boomburst", "switcheroo", "tailwind", "taunt", "protect"], - tier: "BL2", + tier: "RUBL", + doublesTier: "(DUU)", }, xerneas: { inherit: true, - randomBattleMoves: ["geomancy", "moonblast", "thunder", "focusblast", "thunderbolt", "hiddenpowerfire", "psyshock", "rockslide", "closecombat"], + randomBattleMoves: ["geomancy", "moonblast", "focusblast", "thunderbolt", "hiddenpowerfire", "psyshock", "rockslide", "closecombat"], randomDoubleBattleMoves: ["geomancy", "dazzlinggleam", "thunder", "focusblast", "thunderbolt", "hiddenpowerfire", "psyshock", "rockslide", "closecombat", "protect"], tier: "Uber", + doublesTier: "DUber", }, yveltal: { inherit: true, - randomBattleMoves: ["darkpulse", "hurricane", "foulplay", "oblivionwing", "uturn", "suckerpunch", "taunt", "toxic", "roost"], + randomBattleMoves: ["darkpulse", "oblivionwing", "focusblast", "uturn", "foulplay", "suckerpunch", "toxic", "taunt", "roost"], randomDoubleBattleMoves: ["darkpulse", "oblivionwing", "taunt", "focusblast", "hurricane", "roost", "suckerpunch", "snarl", "skydrop", "protect"], tier: "Uber", + doublesTier: "DUber", }, zygarde: { inherit: true, randomBattleMoves: ["dragondance", "earthquake", "outrage", "extremespeed", "stoneedge"], randomDoubleBattleMoves: ["dragondance", "landswrath", "extremespeed", "rockslide", "coil", "stoneedge", "glare", "protect"], - tier: "BL", + tier: "UUBL", + doublesTier: "(DUU)", }, diancie: { inherit: true, randomBattleMoves: ["reflect", "lightscreen", "stealthrock", "diamondstorm", "moonblast", "hiddenpowerfire"], randomDoubleBattleMoves: ["diamondstorm", "moonblast", "reflect", "lightscreen", "safeguard", "substitute", "calmmind", "psychic", "dazzlinggleam", "protect"], tier: "RU", + doublesTier: "DUU", }, dianciemega: { randomBattleMoves: ["calmmind", "moonblast", "earthpower", "hiddenpowerfire", "psyshock", "diamondstorm"], randomDoubleBattleMoves: ["diamondstorm", "moonblast", "calmmind", "psyshock", "earthpower", "hiddenpowerfire", "dazzlinggleam", "protect"], requiredItem: "Diancite", tier: "OU", + doublesTier: "DOU", }, hoopa: { inherit: true, randomBattleMoves: ["nastyplot", "psyshock", "shadowball", "focusblast", "trick"], randomDoubleBattleMoves: ["hyperspacehole", "shadowball", "focusblast", "protect", "psychic", "trickroom"], tier: "RU", + doublesTier: "(DUU)", }, hoopaunbound: { randomBattleMoves: ["nastyplot", "substitute", "psyshock", "psychic", "darkpulse", "focusblast", "hyperspacefury", "zenheadbutt", "icepunch", "drainpunch", "gunkshot", "knockoff", "trick"], randomDoubleBattleMoves: ["psychic", "darkpulse", "focusblast", "protect", "hyperspacefury", "zenheadbutt", "icepunch", "drainpunch", "gunkshot"], eventOnly: true, tier: "Uber", + doublesTier: "DOU", }, volcanion: { inherit: true, randomBattleMoves: ["substitute", "steameruption", "fireblast", "sludgewave", "hiddenpowerice", "earthpower", "superpower"], randomDoubleBattleMoves: ["substitute", "steameruption", "heatwave", "sludgebomb", "rockslide", "earthquake", "protect"], tier: "OU", + doublesTier: "DOU", }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/mods/gen6/items.js b/data/mods/gen6/items.js similarity index 78% rename from mods/gen6/items.js rename to data/mods/gen6/items.js index 6aec4ce025ba8..391e7175ca3b5 100644 --- a/mods/gen6/items.js +++ b/data/mods/gen6/items.js @@ -1,20 +1,21 @@ 'use strict'; -exports.BattleItems = { +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { aguavberry: { inherit: true, - onUpdate: function (pokemon) { + desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpD Nature. Single use.", + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 8); if (pokemon.getNature().minus === 'spd') { pokemon.addVolatile('confusion'); } }, - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpD Nature. Single use.", }, belueberry: { inherit: true, @@ -28,52 +29,43 @@ exports.BattleItems = { inherit: true, isUnreleased: false, }, - custapberry: { - inherit: true, - isUnreleased: false, - }, durinberry: { inherit: true, isUnreleased: false, }, - enigmaberry: { - inherit: true, - isUnreleased: false, - }, figyberry: { inherit: true, - onUpdate: function (pokemon) { + desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Atk Nature. Single use.", + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 8); if (pokemon.getNature().minus === 'atk') { pokemon.addVolatile('confusion'); } }, - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Atk Nature. Single use.", }, iapapaberry: { inherit: true, - onUpdate: function (pokemon) { + desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Def Nature. Single use.", + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 8); if (pokemon.getNature().minus === 'def') { pokemon.addVolatile('confusion'); } }, - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Def Nature. Single use.", }, jabocaberry: { inherit: true, - isUnreleased: false, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.category === 'Physical') { if (target.eatItem()) { this.damage(source.maxhp / 8, source, target, null, true); @@ -81,6 +73,14 @@ exports.BattleItems = { } }, }, + lifeorb: { + inherit: true, + onAfterMoveSecondarySelf(source, target, move) { + if (source && source !== target && move && move.category !== 'Status' && !move.ohko) { + this.damage(source.maxhp / 10, source, source, this.getItem('lifeorb')); + } + }, + }, lightclay: { inherit: true, desc: "Holder's use of Light Screen or Reflect lasts 8 turns instead of 5.", @@ -91,27 +91,23 @@ exports.BattleItems = { }, magoberry: { inherit: true, - onUpdate: function (pokemon) { + desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Spe Nature. Single use.", + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 8); if (pokemon.getNature().minus === 'spe') { pokemon.addVolatile('confusion'); } }, - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -Spe Nature. Single use.", }, magostberry: { inherit: true, isUnreleased: false, }, - micleberry: { - inherit: true, - isUnreleased: false, - }, nanabberry: { inherit: true, isUnreleased: false, @@ -134,7 +130,7 @@ exports.BattleItems = { }, rockyhelmet: { inherit: true, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.flags['contact']) { this.damage(source.maxhp / 6, source, target, null, true); } @@ -142,8 +138,7 @@ exports.BattleItems = { }, rowapberry: { inherit: true, - isUnreleased: false, - onAfterDamage: function (damage, target, source, move) { + onAfterDamage(damage, target, source, move) { if (source && source !== target && move && move.category === 'Special') { if (target.eatItem()) { this.damage(source.maxhp / 8, source, target, null, true); @@ -156,27 +151,21 @@ exports.BattleItems = { isUnreleased: false, }, souldew: { - id: "souldew", - name: "Soul Dew", - spritenum: 459, - fling: { - basePower: 30, - }, + inherit: true, + desc: "If held by a Latias or a Latios, its Sp. Atk and Sp. Def are 1.5x.", + onBasePower() {}, onModifySpAPriority: 1, - onModifySpA: function (spa, pokemon) { + onModifySpA(spa, pokemon) { if (pokemon.baseTemplate.num === 380 || pokemon.baseTemplate.num === 381) { return this.chainModify(1.5); } }, onModifySpDPriority: 2, - onModifySpD: function (spd, pokemon) { + onModifySpD(spd, pokemon) { if (pokemon.baseTemplate.num === 380 || pokemon.baseTemplate.num === 381) { return this.chainModify(1.5); } }, - num: 225, - gen: 3, - desc: "If holder is a Latias or a Latios, its Sp. Atk and Sp. Def are 1.5x.", }, watmelberry: { inherit: true, @@ -188,17 +177,19 @@ exports.BattleItems = { }, wikiberry: { inherit: true, - onUpdate: function (pokemon) { + desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpA Nature. Single use.", + onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, - onEat: function (pokemon) { + onEat(pokemon) { this.heal(pokemon.maxhp / 8); if (pokemon.getNature().minus === 'spa') { pokemon.addVolatile('confusion'); } }, - desc: "Restores 1/8 max HP at 1/2 max HP or less; confuses if -SpA Nature. Single use.", }, }; + +exports.BattleItems = BattleItems; diff --git a/data/mods/gen6/moves.js b/data/mods/gen6/moves.js new file mode 100644 index 0000000000000..3543bd13470c0 --- /dev/null +++ b/data/mods/gen6/moves.js @@ -0,0 +1,507 @@ +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + allyswitch: { + inherit: true, + desc: "The user swaps positions with its ally on the opposite side of the field. Fails if there is no Pokemon at that position, if the user is the only Pokemon on its side, or if the user is in the middle.", + shortDesc: "Switches position with the ally on the far side.", + priority: 1, + }, + assist: { + inherit: true, + desc: "A random move among those known by the user's party members is selected for use. Does not select Assist, Belch, Bestow, Bounce, Celebrate, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dig, Dive, Dragon Tail, Endure, Feint, Fly, Focus Punch, Follow Me, Helping Hand, Hold Hands, King's Shield, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Phantom Force, Protect, Rage Powder, Roar, Shadow Force, Sketch, Sky Drop, Sleep Talk, Snatch, Spiky Shield, Struggle, Switcheroo, Thief, Transform, Trick, or Whirlwind.", + }, + bestow: { + inherit: true, + desc: "The target receives the user's held item. Fails if the user has no item or is holding a Mail, if the target is already holding an item, if the user is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, a Pokemon that can Mega Evolve holding the Mega Stone for its species, or if the target is one of those Pokemon and the user is holding the respective item.", + }, + brickbreak: { + inherit: true, + desc: "If this attack does not miss, the effects of Reflect and Light Screen end for the target's side of the field before damage is calculated.", + }, + camouflage: { + inherit: true, + desc: "The user's type changes based on the battle terrain. Normal type on the regular Wi-Fi terrain, Electric type during Electric Terrain, Fairy type during Misty Terrain, and Grass type during Grassy Terrain. Fails if the user's type cannot be changed or if the user is already purely that type.", + }, + copycat: { + inherit: true, + desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was Assist, Baneful Bunker, Belch, Bestow, Celebrate, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Hold Hands, King's Shield, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Roar, Sketch, Sleep Talk, Snatch, Spiky Shield, Struggle, Switcheroo, Thief, Transform, Trick, or Whirlwind.", + }, + counter: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with a physical attack this turn equal to twice the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals damage with a power of 1 instead. If that opposing Pokemon's position is no longer in use, the damage is done to a random opposing Pokemon in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's physical attack this turn.", + }, + covet: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + }, + darkvoid: { + inherit: true, + desc: "Causes the target to fall asleep.", + shortDesc: "Causes the foe(s) to fall asleep.", + accuracy: 80, + onTryMove() {}, + }, + defog: { + inherit: true, + desc: "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, Safeguard, Mist, Spikes, Toxic Spikes, Stealth Rock, and Sticky Web end for the target's side, and the effects of Spikes, Toxic Spikes, Stealth Rock, and Sticky Web end for the user's side. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness.", + }, + destinybond: { + inherit: true, + desc: "Until the user's next turn, if an opposing Pokemon's attack knocks the user out, that Pokemon faints as well, unless the attack was Doom Desire or Future Sight.", + onPrepareHit(pokemon) { + pokemon.removeVolatile('destinybond'); + }, + }, + detect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + }, + diamondstorm: { + inherit: true, + desc: "Has a 50% chance to raise the user's Defense by 1 stage.", + shortDesc: "50% chance to raise user's Def by 1 for each hit.", + secondary: { + chance: 50, + self: { + boosts: { + def: 1, + }, + }, + }, + }, + encore: { + inherit: true, + desc: "For 3 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Mimic, Mirror Move, Sketch, Struggle, or Transform.", + effect: { + duration: 3, + onStart(target) { + let noEncore = ['encore', 'mimic', 'mirrormove', 'sketch', 'struggle', 'transform']; + let moveIndex = target.lastMove ? target.moves.indexOf(target.lastMove.id) : -1; + if (!target.lastMove || noEncore.includes(target.lastMove.id) || !target.moveSlots[moveIndex] || target.moveSlots[moveIndex].pp <= 0) { + // it failed + delete target.volatiles['encore']; + return false; + } + this.effectData.move = target.lastMove.id; + this.add('-start', target, 'Encore'); + if (!this.willMove(target)) { + this.effectData.duration++; + } + }, + onOverrideAction(pokemon, target, move) { + if (move.id !== this.effectData.move) return this.effectData.move; + }, + onResidualOrder: 13, + onResidual(target) { + if (target.moves.includes(this.effectData.move) && target.moveSlots[target.moves.indexOf(this.effectData.move)].pp <= 0) { // early termination if you run out of PP + delete target.volatiles.encore; + this.add('-end', target, 'Encore'); + } + }, + onEnd(target) { + this.add('-end', target, 'Encore'); + }, + onDisableMove(pokemon) { + if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { + return; + } + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id); + } + } + }, + }, + }, + endure: { + inherit: true, + desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + }, + entrainment: { + inherit: true, + desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is Multitype, Stance Change, Truant, or the same Ability as the user, or if the user's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, or Zen Mode.", + }, + feint: { + inherit: true, + 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.", + }, + fellstinger: { + inherit: true, + desc: "Raises the user's Attack by 2 stages if this move knocks out the target.", + shortDesc: "Raises user's Attack by 2 if this KOes the target.", + basePower: 30, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) this.boost({atk: 2}, pokemon, pokemon, move); + }, + }, + flameburst: { + inherit: true, + desc: "If this move is successful, each ally adjacent to the target loses 1/16 of its maximum HP, rounded down, unless it has the Magic Guard Ability.", + }, + flyingpress: { + inherit: true, + basePower: 80, + }, + followme: { + inherit: true, + desc: "Until the end of the turn, all single-target attacks from the opposing side are redirected to the user if they are in range. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Magic Bounce Ability, or drawn in by the Lightning Rod or Storm Drain Abilities. Fails if it is not a Double or Triple Battle. This effect is ignored while the user is under the effect of Sky Drop.", + }, + gastroacid: { + inherit: true, + 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 Multitype or Stance Change, this move fails, and receiving the effect through Baton Pass ends the effect immediately.", + onTryHit(pokemon) { + let bannedAbilities = ['multitype', 'stancechange']; + if (bannedAbilities.includes(pokemon.ability)) { + return false; + } + }, + }, + heavyslam: { + inherit: true, + desc: "The power of this move depends on (user's weight / target's weight), rounded down. Power is equal to 120 if the result is 5 or more, 100 if 4, 80 if 3, 60 if 2, and 40 if 1 or less.", + }, + hyperspacefury: { + inherit: true, + desc: "Lowers the user's Defense by 1 stage. This move cannot be used successfully unless the user's current form, while considering Transform, is Hoopa Unbound. 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.", + }, + hyperspacehole: { + inherit: true, + 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.", + }, + iceball: { + inherit: true, + desc: "If this move is successful, the user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn.", + }, + kingsshield: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon trying to make contact with the user have their Attack lowered by 2 stages. Non-damaging moves go through this protection. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + }, + knockoff: { + inherit: true, + desc: "If the target is holding an item that can be removed from it, ignoring the Sticky Hold Ability, this move's power is multiplied by 1.5. If the user has not fainted, the target loses its held item. This move cannot cause Pokemon with the Sticky Hold Ability to lose their held item, cause Pokemon that can Mega Evolve to lose the Mega Stone for their species, or cause a Kyogre, a Groudon, a Giratina, an Arceus, or a Genesect to lose their Blue Orb, Red Orb, Griseous Orb, Plate, or Drive, respectively. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + }, + leechlife: { + inherit: true, + basePower: 20, + isViable: false, + pp: 15, + }, + lightscreen: { + inherit: true, + desc: "For 5 turns, the user and its party members take 0.5x damage from special attacks, or 0.66x damage if in a Double or Triple Battle. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break or Defog. Lasts for 8 turns if the user is holding Light Clay. Fails if the effect is already active on the user's side.", + }, + mefirst: { + inherit: true, + desc: "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 other than Chatter, Counter, Covet, Focus Punch, Me First, Metal Burst, Mirror Coat, Struggle, or Thief. Fails if the target moves before the user. Ignores the target's substitute for the purpose of copying the move.", + }, + metalburst: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with an attack this turn equal to 1.5 times the HP lost by the user from that attack, rounded down. If the user did not lose HP from the attack, this move deals damage with a power of 1 instead. If that opposing Pokemon's position is no longer in use, the damage is done to a random opposing Pokemon in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's attack this turn.", + }, + metronome: { + inherit: true, + desc: "A random move is selected for use, other than After You, Assist, Belch, Bestow, Celebrate, Chatter, Copycat, Counter, Covet, Crafty Shield, Destiny Bond, Detect, Diamond Storm, Dragon Ascent, Endure, Feint, Focus Punch, Follow Me, Freeze Shock, Helping Hand, Hold Hands, Hyperspace Fury, Hyperspace Hole, Ice Burn, King's Shield, Light of Ruin, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Origin Pulse, Precipice Blades, Protect, Quash, Quick Guard, Rage Powder, Relic Song, Secret Sword, Sketch, Sleep Talk, Snarl, Snatch, Snore, Spiky Shield, Steam Eruption, Struggle, Switcheroo, Techno Blast, Thief, Thousand Arrows, Thousand Waves, Transform, Trick, V-create, or Wide Guard.", + }, + mimic: { + inherit: true, + desc: "While the user remains active, this move is 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, if the user already knows the move, or if the move is Chatter, Mimic, Sketch, Struggle, or Transform.", + }, + minimize: { + inherit: true, + desc: "Raises the user's evasiveness by 2 stages. Whether or not the user's evasiveness was changed, Body Slam, Dragon Rush, Flying Press, Heat Crash, 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.", + effect: { + noCopy: true, + onSourceModifyDamage(damage, source, target, move) { + if (['stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'phantomforce', 'heatcrash', 'shadowforce'].includes(move.id)) { + return this.chainModify(2); + } + }, + onAccuracy(accuracy, target, source, move) { + if (['stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'phantomforce', 'heatcrash', 'shadowforce'].includes(move.id)) { + return true; + } + return accuracy; + }, + }, + }, + mirrorcoat: { + inherit: true, + desc: "Deals damage to the last opposing Pokemon to hit the user with a special attack this turn equal to twice the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals damage with a power of 1 instead. If that opposing Pokemon's position is no longer in use, the damage is done to a random opposing Pokemon in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's special attack this turn.", + }, + mistyterrain: { + inherit: true, + desc: "For 5 turns, the terrain becomes Misty Terrain. During the effect, the power of Dragon-type attacks used against grounded Pokemon is multiplied by 0.5 and grounded Pokemon cannot be inflicted with a major status condition. Camouflage transforms the user into a Fairy type, Nature Power becomes Moonblast, and Secret Power has a 30% chance to lower Special Attack by 1 stage. Fails if the current terrain is Misty Terrain.", + effect: { + duration: 5, + durationCallback(source, effect) { + if (source && source.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onSetStatus(status, target, source, effect) { + if (!target.isGrounded() || target.isSemiInvulnerable()) return; + if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { + this.add('-activate', target, 'move: Misty Terrain'); + } + return false; + }, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Dragon' && defender.isGrounded() && !defender.isSemiInvulnerable()) { + this.debug('misty terrain weaken'); + return this.chainModify(0.5); + } + }, + onStart(battle, source, effect) { + if (effect && effect.effectType === 'Ability') { + this.add('-fieldstart', 'move: Misty Terrain', '[from] ability: ' + effect, '[of] ' + source); + } else { + this.add('-fieldstart', 'move: Misty Terrain'); + } + }, + onResidualOrder: 21, + onResidualSubOrder: 2, + onEnd(side) { + this.add('-fieldend', 'Misty Terrain'); + }, + }, + }, + mysticalfire: { + inherit: true, + basePower: 65, + }, + naturepower: { + inherit: true, + desc: "This move calls another move for use based on the battle terrain. Tri Attack on the regular Wi-Fi terrain, Thunderbolt during Electric Terrain, Moonblast during Misty Terrain, and Energy Ball during Grassy Terrain.", + }, + outrage: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect if it is not already. This move targets an adjacent opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + }, + paraboliccharge: { + inherit: true, + basePower: 50, + }, + partingshot: { + inherit: true, + desc: "Lowers the target's Attack and Special Attack by 1 stage. 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.", + }, + payback: { + inherit: true, + desc: "Power doubles if the user moves after the target this turn. Switching in does not count as an action.", + }, + petaldance: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect if it is not already. This move targets an adjacent opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + }, + phantomforce: { + inherit: true, + 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.", + }, + powder: { + inherit: true, + desc: "If the target uses a Fire-type move this turn, it is prevented from executing and the target loses 1/4 of its maximum HP, rounded half up. This effect happens before the Fire-type move would be prevented by Primordial Sea.", + effect: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'Powder'); + }, + onTryMovePriority: 1, + onTryMove(pokemon, target, move) { + if (move.type === 'Fire') { + this.add('-activate', pokemon, 'move: Powder'); + this.damage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1)); + return false; + } + }, + }, + }, + protect: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + }, + pursuit: { + inherit: true, + desc: "If an adjacent 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.", + }, + quickguard: { + inherit: true, + desc: "The user and its party members are protected from attacks with original or altered priority greater than 0 made by other Pokemon, including allies, during this turn. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn or if this move is already in effect for the user's side.", + }, + ragepowder: { + inherit: true, + desc: "Until the end of the turn, all single-target attacks from the opposing side are redirected to the user if they are in range. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Magic Bounce Ability, or drawn in by the Lightning Rod or Storm Drain Abilities. Fails if it is not a Double or Triple Battle. This effect is ignored while the user is under the effect of Sky Drop.", + }, + reflect: { + inherit: true, + desc: "For 5 turns, the user and its party members take 0.5x damage from physical attacks, or 0.66x damage if in a Double or Triple Battle. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break or Defog. Lasts for 8 turns if the user is holding Light Clay. Fails if the effect is already active on the user's side.", + }, + reflecttype: { + inherit: true, + desc: "Causes the user's types to become the same as the current types of the target. Fails if the user is an Arceus.", + }, + rockblast: { + inherit: true, + flags: {protect: 1, mirror: 1}, + }, + roleplay: { + inherit: true, + desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is Multitype, Stance Change, or already matches the target, or if the target's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, Wonder Guard, or Zen Mode.", + }, + rollout: { + inherit: true, + desc: "If this move is successful, the user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn.", + }, + secretpower: { + inherit: true, + desc: "Has a 30% chance to cause a secondary effect on the target based on the battle terrain. Causes paralysis on the regular Wi-Fi terrain, causes paralysis during Electric Terrain, lowers Special Attack by 1 stage during Misty Terrain, and causes sleep during Grassy Terrain.", + }, + shadowforce: { + inherit: true, + 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.", + }, + sheercold: { + inherit: true, + desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Sturdy Ability are immune.", + shortDesc: "OHKOs the target. Fails if user is a lower level.", + ohko: true, + }, + simplebeam: { + inherit: true, + desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is Multitype, Simple, Stance Change, or Truant.", + onTryHit(pokemon) { + let bannedAbilities = ['multitype', 'simple', 'stancechange', 'truant']; + if (bannedAbilities.includes(pokemon.ability)) { + return false; + } + }, + }, + skillswap: { + inherit: true, + desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Illusion, Multitype, Stance Change, or Wonder Guard.", + onTryHit(target, source) { + let bannedAbilities = ['illusion', 'multitype', 'stancechange', 'wonderguard']; + if (bannedAbilities.includes(target.ability) || bannedAbilities.includes(source.ability)) { + return false; + } + }, + }, + sleeptalk: { + inherit: true, + desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0 PP. This move cannot select Assist, Belch, Bide, Celebrate, Chatter, Copycat, Focus Punch, Hold Hands, Me First, Metronome, Mimic, Mirror Move, Nature Power, Sketch, Sleep Talk, Struggle, Uproar, or any two-turn move.", + }, + soak: { + inherit: true, + desc: "Causes the target to become a Water type. Fails if the target is an Arceus.", + }, + spikyshield: { + inherit: true, + desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user lose 1/8 of their maximum HP, rounded down. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + }, + struggle: { + inherit: true, + desc: "Deals typeless damage to a random adjacent opposing Pokemon. If this move was successful, the user loses 1/4 of its maximum HP, rounded half up, and the Rock Head Ability does not prevent this. This move is automatically used if none of the user's known moves can be selected.", + }, + suckerpunch: { + inherit: true, + basePower: 80, + }, + swagger: { + inherit: true, + accuracy: 90, + }, + switcheroo: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, or a Drive to or from a Kyogre, a Groudon, a Giratina, an Arceus, or a Genesect, respectively. The target is immune to this move if it has the Sticky Hold Ability.", + }, + tackle: { + inherit: true, + basePower: 50, + }, + telekinesis: { + inherit: true, + desc: "For 3 turns, the target cannot avoid any attacks made against it, other than OHKO moves, as long as it remains active. During the effect, the target is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, Sticky Web, and the Arena Trap Ability as long as it remains active. If the target uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, Thousand Arrows, and Iron Ball override this move if the target is under any of their effects. Fails if the target is already under this effect or the effects of Ingrain, Smack Down, or Thousand Arrows. The target is immune to this move on use if its species is Diglett, Dugtrio, or Gengar while Mega-Evolved. Mega Gengar cannot be under this effect by any means.", + }, + thief: { + inherit: true, + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", + }, + thousandarrows: { + inherit: true, + isUnreleased: true, + }, + thousandwaves: { + inherit: true, + isUnreleased: true, + }, + thrash: { + inherit: true, + desc: "The user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect if it is not already. This move targets an adjacent opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + }, + thunderwave: { + inherit: true, + accuracy: 100, + }, + trick: { + inherit: true, + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, or a Drive to or from a Kyogre, a Groudon, a Giratina, an Arceus, or a Genesect, respectively. The target is immune to this move if it has the Sticky Hold Ability.", + }, + uproar: { + inherit: true, + desc: "The user spends three turns locked into this move. This move targets an adjacent opponent at random on each turn. On the first of the three turns, all sleeping active Pokemon wake up. During the three turns, no active Pokemon can fall asleep by any means, and Pokemon switched in during the effect do not wake up. If the user is prevented from moving or the attack is not successful against the target during one of the turns, the effect ends.", + }, + uturn: { + inherit: true, + 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.", + }, + voltswitch: { + inherit: true, + 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.", + }, + watershuriken: { + inherit: true, + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", + category: "Physical", + }, + wideguard: { + inherit: true, + desc: "The user and its party members are protected from damaging attacks made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails, if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn or if this move is already in effect for the user's side.", + shortDesc: "Protects allies from multi-target hits this turn.", + effect: { + duration: 1, + onStart(target, source) { + this.add('-singleturn', source, 'Wide Guard'); + }, + onTryHitPriority: 4, + onTryHit(target, source, effect) { + // Wide Guard blocks damaging spread moves + if (effect && (effect.category === 'Status' || (effect.target !== 'allAdjacent' && effect.target !== 'allAdjacentFoes'))) { + return; + } + this.add('-activate', target, 'move: Wide Guard'); + let lockedmove = source.getVolatile('lockedmove'); + if (lockedmove) { + // Outrage counter is reset + if (source.volatiles['lockedmove'].duration === 2) { + delete source.volatiles['lockedmove']; + } + } + return null; + }, + }, + }, + worryseed: { + inherit: true, + desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is Insomnia, Multitype, Stance Change, or Truant.", + onTryHit(pokemon) { + let bannedAbilities = ['insomnia', 'multitype', 'stancechange', 'truant']; + if (bannedAbilities.includes(pokemon.ability)) { + return false; + } + }, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/gen6/pokedex.js b/data/mods/gen6/pokedex.js similarity index 96% rename from mods/gen6/pokedex.js rename to data/mods/gen6/pokedex.js index 628fd52c58cca..478247b1eb11a 100644 --- a/mods/gen6/pokedex.js +++ b/data/mods/gen6/pokedex.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattlePokedex = { +/**@type {{[k: string]: ModdedTemplateData}} */ +let BattlePokedex = { charizardmegax: { inherit: true, color: "Red", @@ -268,6 +269,10 @@ exports.BattlePokedex = { inherit: true, abilities: {0: "Water Veil", 1: "Heatproof", H: "Light Metal"}, }, + crucibellemega: { + inherit: true, + baseStats: {hp: 106, atk: 135, def: 75, spa: 85, spd: 125, spe: 114}, + }, syclant: { inherit: true, abilities: {0: "Compound Eyes", 1: "Mountaineer"}, @@ -313,3 +318,5 @@ exports.BattlePokedex = { abilities: {0: "Volt Absorb", 1: "Lightning Rod"}, }, }; + +exports.BattlePokedex = BattlePokedex; diff --git a/mods/gen6/random-teams.js b/data/mods/gen6/random-teams.js similarity index 52% rename from mods/gen6/random-teams.js rename to data/mods/gen6/random-teams.js index c2820c7725573..183b5951158bb 100644 --- a/mods/gen6/random-teams.js +++ b/data/mods/gen6/random-teams.js @@ -1,9 +1,26 @@ 'use strict'; -const RandomTeams = require('../../data/random-teams'); +const RandomTeams = require('../../random-teams'); class RandomGen6Teams extends RandomTeams { - randomSet(template, slot, teamDetails) { + /** + * @param {Format | string} format + * @param {?PRNG | [number, number, number, number]} [prng] + */ + constructor(format, prng) { + super(format, prng); + /**@type {AnyObject} */ + // @ts-ignore + this.randomFactorySets = require('./factory-sets.json'); + } + + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {RandomTeamsTypes["TeamDetails"]} [teamDetails] + * @return {RandomTeamsTypes["RandomSet"]} + */ + randomSet(template, slot, teamDetails = {}) { if (slot === undefined) slot = 1; let baseTemplate = (template = this.getTemplate(template)); let species = template.species; @@ -13,21 +30,20 @@ class RandomGen6Teams extends RandomTeams { template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../../crashlogger')(err, 'The randbat set generator'); + Monitor.crashlog(err, 'The gen 6 randbat set generator'); } - if (typeof teamDetails !== 'object') teamDetails = {megaStone: teamDetails}; - if (template.battleOnly) { // Only change the species. The template has custom moves, and may have different typing and requirements. species = template.baseSpecies; } let battleForme = this.checkBattleForme(template); - if (battleForme && battleForme.tier !== 'AG' && (battleForme.isMega ? !teamDetails.megaStone : this.random(2))) { - template = this.getTemplate(template.otherFormes.length >= 2 ? template.otherFormes[this.random(template.otherFormes.length)] : template.otherFormes[0]); + if (battleForme && template.otherFormes && battleForme.tier !== 'AG' && (battleForme.isMega ? !teamDetails.megaStone : this.randomChance(1, 2))) { + template = this.getTemplate(template.otherFormes.length >= 2 ? this.sample(template.otherFormes) : template.otherFormes[0]); } - let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : Object.keys(template.learnset)); + let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : template.learnset ? Object.keys(template.learnset) : []); + /**@type {string[]} */ let moves = []; let ability = ''; let item = ''; @@ -47,46 +63,46 @@ class RandomGen6Teams extends RandomTeams { spd: 31, spe: 31, }; + /**@type {{[k: string]: true}} */ let hasType = {}; hasType[template.types[0]] = true; if (template.types[1]) { hasType[template.types[1]] = true; } + /**@type {{[k: string]: true}} */ let hasAbility = {}; hasAbility[template.abilities[0]] = true; if (template.abilities[1]) { + // @ts-ignore hasAbility[template.abilities[1]] = true; } if (template.abilities['H']) { + // @ts-ignore hasAbility[template.abilities['H']] = true; } let availableHP = 0; - for (let i = 0, len = movePool.length; i < len; i++) { - if (movePool[i].substr(0, 11) === 'hiddenpower') availableHP++; + for (const setMoveid of movePool) { + if (setMoveid.startsWith('hiddenpower')) availableHP++; } // These moves can be used even if we aren't setting up to use them: - let SetupException = { - closecombat:1, extremespeed:1, suckerpunch:1, superpower:1, - dracometeor:1, leafstorm:1, overheat:1, - }; - let counterAbilities = { - 'Adaptability':1, 'Contrary':1, 'Hustle':1, 'Iron Fist':1, 'Sheer Force':1, 'Skill Link':1, - }; - let ateAbilities = { - 'Aerilate':1, 'Pixilate':1, 'Refrigerate':1, - }; + let SetupException = ['closecombat', 'extremespeed', 'suckerpunch', 'superpower', 'dracometeor', 'leafstorm', 'overheat']; + + let counterAbilities = ['Adaptability', 'Contrary', 'Hustle', 'Iron Fist', 'Skill Link']; + let ateAbilities = ['Aerilate', 'Pixilate', 'Refrigerate']; - let hasMove, counter; + /**@type {{[k: string]: boolean}} */ + let hasMove = {}; + let counter; do { // Keep track of all moves we have: hasMove = {}; - for (let k = 0; k < moves.length; k++) { - if (moves[k].substr(0, 11) === 'hiddenpower') { + for (const setMoveid of moves) { + if (setMoveid.startsWith('hiddenpower')) { hasMove['hiddenpower'] = true; } else { - hasMove[moves[k]] = true; + hasMove[setMoveid] = true; } } @@ -106,16 +122,16 @@ class RandomGen6Teams extends RandomTeams { counter = this.queryMoves(moves, hasType, hasAbility, movePool); // Iterate through the moves again, this time to cull them: - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); + for (const [i, setMoveid] of moves.entries()) { + let move = this.getMove(setMoveid); let moveid = move.id; let rejected = false; let isSetup = false; switch (moveid) { // Not very useful without their supporting moves - case 'batonpass': - if (!counter.setupType && !counter['speedsetup'] && !hasMove['substitute'] && !hasMove['wish'] && !hasAbility['Speed Boost']) rejected = true; + case 'cottonguard': case 'defendorder': + if (!counter['recovery'] && !hasMove['rest']) rejected = true; break; case 'focuspunch': if (!hasMove['substitute'] || counter.damagingMoves.length < 2) rejected = true; @@ -123,10 +139,16 @@ class RandomGen6Teams extends RandomTeams { case 'perishsong': if (!hasMove['protect']) rejected = true; break; - case 'rest': { + case 'reflect': + if (!hasMove['calmmind'] && !hasMove['lightscreen']) rejected = true; + if (movePool.length > 1) { + let screen = movePool.indexOf('lightscreen'); + if (screen >= 0) this.fastPop(movePool, screen); + } + break; + case 'rest': if (movePool.includes('sleeptalk')) rejected = true; break; - } case 'sleeptalk': if (!hasMove['rest']) rejected = true; if (movePool.length > 1) { @@ -143,27 +165,26 @@ class RandomGen6Teams extends RandomTeams { if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) { if (!hasMove['growth'] || hasMove['sunnyday']) rejected = true; } - if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + if (counter.Physical + counter['physicalpool'] < 2 && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; isSetup = true; break; case 'calmmind': case 'geomancy': case 'nastyplot': case 'quiverdance': case 'tailglow': if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; - if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + if (counter.Special + counter['specialpool'] < 2 && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; isSetup = true; break; case 'growth': case 'shellsmash': case 'workup': if (counter.setupType !== 'Mixed' || counter['mixedsetup'] > 1) rejected = true; - if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2 && !hasMove['batonpass']) rejected = true; + if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2) rejected = true; if (moveid === 'growth' && !hasMove['sunnyday']) rejected = true; isSetup = true; break; case 'agility': case 'autotomize': case 'rockpolish': - if (counter.damagingMoves.length < 2 && !hasMove['batonpass']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (counter.damagingMoves.length < 2 || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; if (!counter.setupType) isSetup = true; break; case 'flamecharge': - if (counter.damagingMoves.length < 3 && !counter.setupType && !hasMove['batonpass']) rejected = true; + if (counter.damagingMoves.length < 3 && !counter.setupType) rejected = true; if (hasMove['dracometeor'] || hasMove['overheat']) rejected = true; break; @@ -173,9 +194,9 @@ class RandomGen6Teams extends RandomTeams { if (!!counter['speedsetup'] || hasMove['encore'] || hasMove['raindance'] || hasMove['roar'] || hasMove['whirlwind']) rejected = true; break; case 'defog': - if (counter.setupType || hasMove['spikes'] || (hasMove['rest'] && hasMove['sleeptalk']) || teamDetails.hazardClear) rejected = true; + if (counter.setupType || hasMove['spikes'] || hasMove['stealthrock'] || (hasMove['rest'] && hasMove['sleeptalk']) || teamDetails.hazardClear) rejected = true; break; - case 'fakeout': case 'superfang': + case 'fakeout': if (counter.setupType || hasMove['substitute'] || hasMove['switcheroo'] || hasMove['trick']) rejected = true; break; case 'foulplay': @@ -191,22 +212,22 @@ class RandomGen6Teams extends RandomTeams { case 'healingwish': case 'memento': if (counter.setupType || !!counter['recovery'] || hasMove['substitute']) rejected = true; break; - case 'nightshade': case 'seismictoss': - if (counter.stab || counter.setupType || counter.damagingMoves.length > 2) rejected = true; + case 'leechseed': case 'roar': case 'whirlwind': + if (counter.setupType || !!counter['speedsetup'] || hasMove['dragontail']) rejected = true; + break; + case 'nightshade': case 'seismictoss': case 'superfang': + if (counter.damagingMoves.length > 1 || counter.setupType) rejected = true; break; case 'protect': - if (counter.setupType && (hasAbility['Guts'] || hasAbility['Speed Boost']) && !hasMove['batonpass']) rejected = true; - if ((hasMove['lightscreen'] && hasMove['reflect']) || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (counter.setupType && !hasMove['wish']) rejected = true; + if (hasMove['rest'] || hasMove['lightscreen'] && hasMove['reflect']) rejected = true; break; case 'pursuit': - if (counter.setupType || (hasMove['rest'] && hasMove['sleeptalk']) || (hasMove['knockoff'] && !hasType['Dark'])) rejected = true; + if (counter.setupType || hasMove['nightslash'] || (hasMove['knockoff'] && !hasType['Dark']) || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; break; case 'rapidspin': if (counter.setupType || teamDetails.hazardClear) rejected = true; break; - case 'roar': case 'whirlwind': - if (counter.setupType || hasMove['dragontail']) rejected = true; - break; case 'stealthrock': if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] || teamDetails.stealthRock) rejected = true; break; @@ -222,12 +243,11 @@ class RandomGen6Teams extends RandomTeams { if (hasMove['lightscreen'] || hasMove['reflect']) rejected = true; break; case 'uturn': - if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass']) rejected = true; + if (counter.setupType || !!counter['speedsetup'] || hasAbility['Protean'] && counter.Status > 2) rejected = true; if (hasType['Bug'] && counter.stab < 2 && counter.damagingMoves.length > 2 && !hasAbility['Adaptability'] && !hasMove['technoblast']) rejected = true; break; case 'voltswitch': - if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass'] || hasMove['magnetrise'] || hasMove['uturn']) rejected = true; - if (hasMove['nuzzle'] && hasMove['thunderbolt']) rejected = true; + if (counter.setupType || !!counter['speedsetup'] || hasMove['magnetrise'] || hasMove['uturn']) rejected = true; break; // Bit redundant to have both @@ -240,15 +260,14 @@ class RandomGen6Teams extends RandomTeams { if ((hasMove['crunch'] || hasMove['hyperspacefury']) && counter.setupType !== 'Special') rejected = true; break; case 'suckerpunch': - if (counter['Dark'] > 2 || (counter.setupType === 'Special' && hasType['Dark'] && counter.stab < 2)) rejected = true; if (counter['Dark'] > 1 && !hasType['Dark']) rejected = true; if (counter.damagingMoves.length < 2 || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; break; case 'dragonclaw': - if (hasMove['outrage'] || hasMove['dragontail']) rejected = true; + if (hasMove['dragontail'] || hasMove['outrage']) rejected = true; break; case 'dracometeor': - if (counter.setupType === 'Physical' && hasMove['outrage']) rejected = true; + if (hasMove['swordsdance'] || counter.setupType === 'Physical' && hasMove['outrage']) rejected = true; break; case 'dragonpulse': case 'spacialrend': if (hasMove['dracometeor'] || hasMove['outrage']) rejected = true; @@ -264,7 +283,6 @@ class RandomGen6Teams extends RandomTeams { break; case 'thunderbolt': if (hasMove['discharge'] || (hasMove['raindance'] && hasMove['thunder']) || (hasMove['voltswitch'] && hasMove['wildcharge'])) rejected = true; - if (!counter.setupType && !counter['speedsetup'] && hasMove['voltswitch'] && template.types.length > 1 && !counter[template.types.find(type => type !== 'Electric')]) rejected = true; break; case 'dazzlinggleam': if (hasMove['playrough'] && counter.setupType !== 'Special') rejected = true; @@ -278,7 +296,7 @@ class RandomGen6Teams extends RandomTeams { break; case 'drainpunch': if (!hasMove['bulkup'] && (hasMove['closecombat'] || hasMove['highjumpkick'])) rejected = true; - if (hasMove['focusblast'] || hasMove['superpower']) rejected = true; + if ((hasMove['focusblast'] || hasMove['superpower']) && counter.setupType !== 'Physical') rejected = true; break; case 'closecombat': case 'highjumpkick': if ((hasMove['aurasphere'] || hasMove['focusblast'] || movePool.includes('aurasphere')) && counter.setupType === 'Special') rejected = true; @@ -293,54 +311,49 @@ class RandomGen6Teams extends RandomTeams { case 'superpower': if (counter['Fighting'] > 1 && counter.setupType) rejected = true; if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (hasAbility['Contrary']) isSetup = true; break; case 'vacuumwave': if ((hasMove['closecombat'] || hasMove['machpunch']) && counter.setupType !== 'Special') rejected = true; break; - case 'blazekick': - if (hasMove['flamethrower'] && counter.setupType !== 'Physical') rejected = true; - break; - case 'fierydance': case 'firefang': case 'flamethrower': - if ((hasMove['fireblast'] && counter.setupType !== 'Physical') || hasMove['overheat']) rejected = true; + case 'fierydance': case 'firefang': case 'flamethrower': case 'flareblitz': + if (hasMove['blazekick'] || hasMove['overheat'] || hasMove['sacredfire']) rejected = true; + if (hasMove['fireblast'] && counter.setupType !== 'Physical' && !hasAbility['Reckless']) rejected = true; break; case 'fireblast': if (hasMove['lavaplume'] && !counter.setupType && !counter['speedsetup']) rejected = true; - if (hasMove['flareblitz'] && counter.setupType !== 'Special') rejected = true; - break; - case 'firepunch': case 'sacredfire': - if (hasMove['fireblast'] || hasMove['flareblitz']) rejected = true; + if (hasMove['flareblitz'] && hasAbility['Reckless']) rejected = true; break; case 'lavaplume': - if (hasMove['fireblast'] && (counter.setupType || !!counter['speedsetup'])) rejected = true; + if (hasMove['firepunch'] || hasMove['fireblast'] && (counter.setupType || !!counter['speedsetup'])) rejected = true; break; case 'overheat': if (hasMove['lavaplume'] || counter.setupType === 'Special') rejected = true; break; - case 'acrobatics': - if (hasMove['hurricane'] && counter.setupType !== 'Physical') rejected = true; - break; - case 'airslash': case 'oblivionwing': - if (hasMove['acrobatics'] || hasMove['bravebird'] || hasMove['hurricane']) rejected = true; + case 'airslash': case 'hurricane': + if (hasMove['acrobatics'] || hasMove['bravebird']) rejected = true; break; case 'shadowclaw': - if (hasMove['phantomforce'] || (hasMove['shadowball'] && counter.setupType !== 'Physical') || hasMove['shadowsneak']) rejected = true; + if (hasMove['phantomforce'] || hasMove['shadowforce'] || hasMove['shadowsneak']) rejected = true; + if (hasMove['shadowball'] && counter.setupType !== 'Physical') rejected = true; break; case 'shadowsneak': if (hasType['Ghost'] && template.types.length > 1 && counter.stab < 2) rejected = true; if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; break; - case 'solarbeam': - if ((!hasAbility['Drought'] && !hasMove['sunnyday']) || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; - break; - case 'gigadrain': - if (hasMove['petaldance'] || !counter.setupType && hasMove['leafstorm']) rejected = true; + case 'gigadrain': case 'powerwhip': + if (hasMove['seedbomb'] || hasMove['petaldance'] || hasMove['sunnyday'] && hasMove['solarbeam']) rejected = true; + if (counter.Special < 4 && !counter.setupType && hasMove['leafstorm']) rejected = true; break; - case 'leafblade': case 'seedbomb': case 'woodhammer': + case 'leafblade': case 'woodhammer': if (hasMove['gigadrain'] && counter.setupType !== 'Physical') rejected = true; break; case 'leafstorm': if (counter['Grass'] > 1 && counter.setupType) rejected = true; break; + case 'solarbeam': + if ((!hasAbility['Drought'] && !hasMove['sunnyday']) || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; + break; case 'bonemerang': case 'precipiceblades': if (hasMove['earthquake']) rejected = true; break; @@ -354,7 +367,7 @@ class RandomGen6Teams extends RandomTeams { if (hasMove['freezedry']) rejected = true; break; case 'bodyslam': - if (hasMove['glare'] || hasMove['headbutt']) rejected = true; + if (hasMove['glare'] && hasMove['headbutt']) rejected = true; break; case 'endeavor': if (slot > 0) rejected = true; @@ -372,13 +385,13 @@ class RandomGen6Teams extends RandomTeams { if (hasMove['rest'] || !counter.stab && counter.damagingMoves.length < 2) rejected = true; break; case 'hypervoice': - if (hasMove['naturepower'] || hasMove['return']) rejected = true; + if (hasMove['blizzard'] || hasMove['naturepower'] || hasMove['return']) rejected = true; break; case 'judgment': if (counter.setupType !== 'Special' && counter.stab > 1) rejected = true; break; case 'quickattack': - if (hasType['Normal'] && counter['Normal'] > 1 && template.types.length > 1 && counter.stab < 2) rejected = true; + if (hasType['Normal'] && (!counter.stab || counter['Normal'] > 2)) rejected = true; break; case 'return': case 'rockclimb': if (hasMove['bodyslam'] || hasMove['doubleedge']) rejected = true; @@ -420,7 +433,8 @@ class RandomGen6Teams extends RandomTeams { if (hasMove['ironhead']) rejected = true; break; case 'hydropump': - if (hasMove['razorshell'] || hasMove['scald'] || hasMove['waterfall'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (hasMove['razorshell'] || hasMove['waterfall'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (hasMove['scald'] && (counter.Special < 4 || template.types.length > 1 && counter.stab < 3)) rejected = true; break; case 'originpulse': case 'surf': if (hasMove['hydropump'] || hasMove['scald']) rejected = true; @@ -430,6 +444,16 @@ class RandomGen6Teams extends RandomTeams { break; // Status: + case 'stunspore': case 'thunderwave': + if (counter.setupType || !!counter['speedsetup'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (hasMove['discharge'] || hasMove['gyroball'] || hasMove['spore'] || hasMove['toxic'] || hasMove['trickroom'] || hasMove['yawn']) rejected = true; + break; + case 'toxic': + if (counter.setupType || hasMove['flamecharge'] || hasMove['hypnosis'] || hasMove['sleeppowder'] || hasMove['willowisp'] || hasMove['yawn']) rejected = true; + break; + case 'willowisp': + if (hasMove['scald']) rejected = true; + break; case 'raindance': if (counter.Physical + counter.Special < 2 || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; if (!hasType['Water'] && !hasMove['thunder']) rejected = true; @@ -446,18 +470,7 @@ class RandomGen6Teams extends RandomTeams { } } break; - case 'stunspore': case 'thunderwave': - if (counter.setupType || !!counter['speedsetup'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; - if (hasMove['discharge'] || hasMove['gyroball'] || hasMove['spore'] || hasMove['toxic'] || hasMove['trickroom'] || hasMove['yawn']) rejected = true; - break; - case 'toxic': - if (counter.setupType || hasMove['flamecharge'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; - if (hasMove['hypnosis'] || hasMove['sleeppowder'] || hasMove['willowisp'] || hasMove['yawn']) rejected = true; - break; - case 'willowisp': - if (hasMove['scald']) rejected = true; - break; - case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'softboiled': case 'synthesis': + case 'milkdrink': case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'softboiled': case 'synthesis': if (hasMove['leechseed'] || hasMove['rest'] || hasMove['wish']) rejected = true; break; case 'safeguard': @@ -484,11 +497,13 @@ class RandomGen6Teams extends RandomTeams { // 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 - if (!SetupException[moveid] && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; + if (!SetupException.includes(moveid) && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; } - if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { + // @ts-ignore + if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2 && moveid !== 'rest' && moveid !== 'sleeptalk') { // Mono-attacking with setup and RestTalk is allowed // Reject Status moves only if there is nothing else to reject + // @ts-ignore if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; } if (counter.setupType === 'Special' && moveid === 'hiddenpower' && template.types.length > 1 && counter['Special'] <= 2 && !hasType[move.type] && !counter['Physical'] && counter['specialpool']) { @@ -496,19 +511,27 @@ class RandomGen6Teams extends RandomTeams { rejected = true; } - // Pokemon should have moves that benefit their Ability/Type/Weather, as well as moves required by its forme - if ((hasType['Bug'] && !hasMove['batonpass'] && (movePool.includes('megahorn') || movePool.includes('pinmissile') || (hasType['Flying'] && !hasMove['hurricane'] && movePool.includes('bugbuzz')))) || - (hasType['Dark'] && hasMove['suckerpunch'] && counter.stab < template.types.length) || + // Pokemon should have moves that benefit their Type/Ability/Weather, as well as moves required by its forme + // @ts-ignore + if (!rejected && (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3)) && + ((counter.damagingMoves.length === 0 && !hasMove['metalburst']) || + (!counter.stab && (template.types.length > 1 || (template.types[0] !== 'Normal' && template.types[0] !== 'Psychic') || !hasMove['icebeam'] || template.baseStats.spa >= template.baseStats.spd) && (!!counter['physicalpool'] || !!counter['specialpool'])) || + (hasType['Bug'] && (movePool.includes('megahorn') || movePool.includes('pinmissile') || (hasType['Flying'] && !hasMove['hurricane'] && movePool.includes('bugbuzz')))) || + ((hasType['Dark'] && !counter['Dark']) || hasMove['suckerpunch'] && counter.stab < template.types.length) || (hasType['Dragon'] && !counter['Dragon'] && !hasAbility['Aerilate'] && !hasAbility['Pixilate'] && !hasMove['rest'] && !hasMove['sleeptalk']) || (hasType['Electric'] && !counter['Electric']) || (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'])) || (hasType['Fire'] && !counter['Fire']) || - (hasType['Ground'] && !counter['Ground'] && (counter.setupType || counter['speedsetup'] || hasMove['raindance'] || !counter['Status'])) || + (hasType['Ghost'] && !hasType['Dark'] && !counter['Ghost']) || + (hasType['Grass'] && !hasType['Fairy'] && !hasType['Poison'] && !hasType['Steel'] && !counter['Grass']) || + (hasType['Ground'] && !counter['Ground'] && !hasMove['rest'] && !hasMove['sleeptalk']) || (hasType['Ice'] && !counter['Ice'] && !hasAbility['Refrigerate']) || (hasType['Psychic'] && !!counter['Psychic'] && !hasType['Flying'] && !hasAbility['Pixilate'] && template.types.length > 1 && counter.stab < 2) || - (hasType['Water'] && !counter['Water'] && (!hasType['Ice'] || !counter['Ice']) && !hasAbility['Protean']) || + (hasType['Steel'] && hasAbility['Technician'] && !counter['Steel']) || + (hasType['Water'] && (!counter['Water'] || !counter.stab) && !hasAbility['Protean']) || + // @ts-ignore ((hasAbility['Adaptability'] && !counter.setupType && template.types.length > 1 && (!counter[template.types[0]] || !counter[template.types[1]])) || - ((hasAbility['Aerilate'] || hasAbility['Pixilate'] || hasAbility['Refrigerate']) && !counter['Normal']) || + ((hasAbility['Aerilate'] || hasAbility['Pixilate'] || hasAbility['Refrigerate'] && !hasMove['blizzard']) && !counter['Normal']) || (hasAbility['Bad Dreams'] && movePool.includes('darkvoid')) || (hasAbility['Contrary'] && !counter['contrary'] && template.species !== 'Shuckle') || (hasAbility['Dark Aura'] && !counter['Dark']) || @@ -516,12 +539,10 @@ class RandomGen6Teams extends RandomTeams { (hasAbility['Guts'] && hasType['Normal'] && movePool.includes('facade')) || (hasAbility['Slow Start'] && movePool.includes('substitute')) || (hasAbility['Stance Change'] && !counter.setupType && movePool.includes('kingsshield')) || - (counter['defensesetup'] && !counter.recovery && !hasMove['rest']) || - (movePool.includes('technoblast') || template.requiredMove && movePool.includes(toId(template.requiredMove)))) && - (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3))) { + (movePool.includes('technoblast') || template.requiredMove && movePool.includes(toId(template.requiredMove)))))) { // Reject Status or non-STAB - if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk') { - if (move.category === 'Status' || !hasType[move.type] || (move.basePower && move.basePower < 40 && !move.multihit)) rejected = true; + if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk' && moveid !== 'technoblast') { + if (move.category === 'Status' || !hasType[move.type] || move.selfSwitch || move.basePower && move.basePower < 40 && !move.multihit) rejected = true; } } @@ -539,7 +560,7 @@ class RandomGen6Teams extends RandomTeams { // Remove rejected moves from the move list if (rejected && (movePool.length - availableHP || availableHP && (moveid === 'hiddenpower' || !hasMove['hiddenpower']))) { - moves.splice(k, 1); + moves.splice(i, 1); break; } @@ -547,46 +568,11 @@ class RandomGen6Teams extends RandomTeams { if (moveid === 'hiddenpower') { let HPivs = this.getType(move.type).HPivs; for (let iv in HPivs) { + // @ts-ignore ivs[iv] = HPivs[iv]; } } } - if (moves.length === 4 && !counter.stab && !hasMove['metalburst'] && (counter['physicalpool'] || counter['specialpool'])) { - // Move post-processing: - if (counter.damagingMoves.length === 0) { - // A set shouldn't have no attacking moves - moves.splice(this.random(moves.length), 1); - } else if (counter.damagingMoves.length === 1) { - // In most cases, a set shouldn't have no STAB - let damagingid = counter.damagingMoves[0].id; - if (movePool.length - availableHP || availableHP && (damagingid === 'hiddenpower' || !hasMove['hiddenpower'])) { - let replace = false; - if (!counter.damagingMoves[0].damage && template.species !== 'Porygon2') { - let damagingType = counter.damagingMoves[0].type; - if (damagingType === 'Fairy') { - // Mono-Fairy is acceptable for Psychic types - if (counter.setupType !== 'Special' || template.types.length > 1 || !hasType['Psychic']) replace = true; - } else { - replace = true; - } - } - if (replace) moves.splice(counter.damagingMoveIndex[damagingid], 1); - } - } else if (!counter.damagingMoves[0].damage && !counter.damagingMoves[1].damage && template.species !== 'Porygon2') { - // If you have three or more attacks, and none of them are STAB, reject one of them at random. - let rejectableMoves = []; - let baseDiff = movePool.length - availableHP; - for (let l = 0; l < counter.damagingMoves.length; l++) { - if (counter.damagingMoves[l].id === 'technoblast') continue; - if (baseDiff || availableHP && (!hasMove['hiddenpower'] || counter.damagingMoves[l].id === 'hiddenpower')) { - rejectableMoves.push(counter.damagingMoveIndex[counter.damagingMoves[l].id]); - } - } - if (rejectableMoves.length) { - moves.splice(rejectableMoves[this.random(rejectableMoves.length)], 1); - } - } - } } while (moves.length < 4 && movePool.length); // Moveset modifications @@ -604,139 +590,137 @@ class RandomGen6Teams extends RandomTeams { let ability0 = this.getAbility(abilities[0]); let ability1 = this.getAbility(abilities[1]); let ability2 = this.getAbility(abilities[2]); - ability = ability0.name; if (abilities[1]) { - if (abilities[2] && ability2.rating === ability1.rating) { - if (this.random(2)) ability1 = ability2; + if (abilities[2] && ability1.rating <= ability2.rating && this.randomChance(1, 2)) { + [ability1, ability2] = [ability2, ability1]; } - if (ability0.rating <= ability1.rating) { - if (this.random(2)) ability = ability1.name; - } else if (ability0.rating - 0.6 <= ability1.rating) { - if (!this.random(3)) ability = ability1.name; + if (ability0.rating <= ability1.rating && this.randomChance(1, 2)) { + [ability0, ability1] = [ability1, ability0]; + } else if (ability0.rating - 0.6 <= ability1.rating && this.randomChance(2, 3)) { + [ability0, ability1] = [ability1, ability0]; } + ability = ability0.name; - let rejectAbility = false; - if (ability in counterAbilities) { - // Adaptability, Contrary, Hustle, Iron Fist, Sheer Force, Skill Link - rejectAbility = !counter[toId(ability)]; - } else if (ability in ateAbilities) { - rejectAbility = !counter['Normal']; - } else if (ability === 'Blaze') { - rejectAbility = !counter['Fire']; - } else if (ability === 'Chlorophyll') { - rejectAbility = !hasMove['sunnyday']; - } else if (ability === 'Compound Eyes' || ability === 'No Guard') { - rejectAbility = !counter['inaccurate']; - } else if (ability === 'Defiant' || ability === 'Moxie') { - rejectAbility = !counter['Physical'] && !hasMove['batonpass']; - } else if (ability === 'Flare Boost' || ability === 'Gluttony' || ability === 'Moody') { - rejectAbility = true; - } else if (ability === 'Lightning Rod') { - rejectAbility = template.types.includes('Ground'); - } else if (ability === 'Limber') { - rejectAbility = template.types.includes('Electric'); - } else if (ability === 'Overgrow') { - rejectAbility = !counter['Grass']; - } else if (ability === 'Poison Heal') { - rejectAbility = abilities.includes('Technician') && !!counter['technician']; - } else if (ability === 'Prankster') { - rejectAbility = !counter['Status']; - } else if (ability === 'Reckless' || ability === 'Rock Head') { - rejectAbility = !counter['recoil']; - } else if (ability === 'Sand Veil') { - rejectAbility = !teamDetails['sand']; - } else if (ability === 'Serene Grace') { - rejectAbility = !counter['serenegrace'] || template.id === 'chansey' || template.id === 'blissey'; - } else if (ability === 'Simple') { - rejectAbility = !counter.setupType && !hasMove['cosmicpower'] && !hasMove['flamecharge']; - } else if (ability === 'Snow Cloak') { - rejectAbility = !teamDetails['hail']; - } else if (ability === 'Solar Power') { - rejectAbility = !counter['Special'] || template.isMega; - } else if (ability === 'Strong Jaw') { - rejectAbility = !counter['bite']; - } else if (ability === 'Sturdy') { - rejectAbility = !!counter['recoil'] && !counter['recovery']; - } else if (ability === 'Swift Swim') { - rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; - } else if (ability === 'Swarm') { - rejectAbility = !counter['Bug']; - } else if (ability === 'Synchronize') { - rejectAbility = counter.Status < 2; - } else if (ability === 'Technician') { - rejectAbility = !counter['technician'] || (abilities.includes('Skill Link') && counter['skilllink'] >= counter['technician']); - } else if (ability === 'Tinted Lens') { - rejectAbility = counter['damage'] >= counter.damagingMoves.length; - } else if (ability === 'Torrent') { - rejectAbility = !counter['Water']; - } else if (ability === 'Unburden') { - rejectAbility = template.baseStats.spe > 120 || (template.id === 'slurpuff' && !counter.setupType); - } + let rejectAbility; + do { + rejectAbility = false; + if (counterAbilities.includes(ability)) { + // Adaptability, Contrary, Hustle, Iron Fist, Skill Link + // @ts-ignore + rejectAbility = !counter[toId(ability)]; + } else if (ateAbilities.includes(ability)) { + rejectAbility = !counter['Normal']; + } else if (ability === 'Blaze') { + rejectAbility = !counter['Fire']; + } else if (ability === 'Chlorophyll') { + rejectAbility = !hasMove['sunnyday'] && !teamDetails['sun']; + } else if (ability === 'Competitive') { + rejectAbility = !counter['Special'] || (hasMove['rest'] && hasMove['sleeptalk']); + } else if (ability === 'Compound Eyes' || ability === 'No Guard') { + rejectAbility = !counter['inaccurate']; + } else if (ability === 'Defiant' || ability === 'Moxie') { + rejectAbility = !counter['Physical']; + } else if (ability === 'Flare Boost' || ability === 'Gluttony' || ability === 'Moody') { + rejectAbility = true; + } else if (ability === 'Hydration' || ability === 'Rain Dish' || ability === 'Swift Swim') { + rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; + } else if (ability === 'Ice Body' || ability === 'Snow Cloak') { + rejectAbility = !teamDetails['hail']; + } else if (ability === 'Lightning Rod') { + rejectAbility = template.types.includes('Ground'); + } else if (ability === 'Limber') { + rejectAbility = template.types.includes('Electric'); + } else if (ability === 'Overgrow') { + rejectAbility = !counter['Grass']; + } else if (ability === 'Poison Heal') { + rejectAbility = abilities.includes('Technician') && !!counter['technician']; + } else if (ability === 'Prankster') { + rejectAbility = !counter['Status']; + } else if (ability === 'Pressure' || ability === 'Synchronize') { + rejectAbility = counter.Status < 2; + } else if (ability === 'Reckless' || ability === 'Rock Head') { + rejectAbility = !counter['recoil']; + } else if (ability === 'Regenerator') { + rejectAbility = abilities.includes('Magic Guard'); + } else if (ability === 'Sand Force' || ability === 'Sand Rush' || ability === 'Sand Veil') { + rejectAbility = !teamDetails['sand']; + } else if (ability === 'Scrappy') { + rejectAbility = !template.types.includes('Normal'); + } else if (ability === 'Serene Grace') { + rejectAbility = !counter['serenegrace'] || template.species === 'Blissey' || template.species === 'Togetic'; + } else if (ability === 'Sheer Force') { + rejectAbility = !counter['sheerforce'] || template.isMega || (abilities.includes('Iron Fist') && counter['ironfist'] > counter['sheerforce']); + } else if (ability === 'Simple') { + rejectAbility = !counter.setupType && !hasMove['cosmicpower'] && !hasMove['flamecharge']; + } else if (ability === 'Snow Warning') { + rejectAbility = hasMove['hypervoice']; + } else if (ability === 'Solar Power') { + rejectAbility = !counter['Special'] || template.isMega; + } else if (ability === 'Strong Jaw') { + rejectAbility = !counter['bite']; + } else if (ability === 'Sturdy') { + rejectAbility = !!counter['recoil'] && !counter['recovery']; + } else if (ability === 'Swarm') { + rejectAbility = !counter['Bug']; + } else if (ability === 'Technician') { + rejectAbility = !counter['technician'] || (abilities.includes('Skill Link') && counter['skilllink'] >= counter['technician']); + } else if (ability === 'Tinted Lens') { + rejectAbility = counter['damage'] >= counter.damagingMoves.length || (counter.Status > 2 && !counter.setupType); + } else if (ability === 'Torrent') { + rejectAbility = !counter['Water']; + } else if (ability === 'Unburden') { + rejectAbility = template.isMega || (!counter.setupType && !hasMove['acrobatics']); + } else if (ability === 'Water Absorb') { + rejectAbility = abilities.includes('Volt Absorb'); + } - if (rejectAbility) { - if (ability === ability1.name) { // or not - ability = ability0.name; - } else if (ability1.rating > 1) { // only switch if the alternative doesn't suck - ability = ability1.name; + if (rejectAbility) { + if (ability === ability0.name && ability1.rating > 1) { + ability = ability1.name; + } else if (ability === ability1.name && abilities[2] && ability2.rating > 1) { + ability = ability2.name; + } else { + // Default to the highest rated ability if all are rejected + // @ts-ignore + ability = abilities[0]; + rejectAbility = false; + } } - } - if (abilities.includes('Chlorophyll') && ability !== 'Solar Power' && hasMove['sunnyday']) { - ability = 'Chlorophyll'; - } + } while (rejectAbility); + if (abilities.includes('Guts') && ability !== 'Quick Feet' && (hasMove['facade'] || hasMove['protect'] || (hasMove['rest'] && hasMove['sleeptalk']))) { ability = 'Guts'; - } - if (abilities.includes('Marvel Scale') && hasMove['rest'] && hasMove['sleeptalk']) { - ability = 'Marvel Scale'; - } - if (abilities.includes('Prankster') && counter.Status > 1) { + } else if (abilities.includes('Prankster') && counter.Status > 1) { ability = 'Prankster'; - } - if (abilities.includes('Swift Swim') && hasMove['raindance']) { + } else if (abilities.includes('Swift Swim') && hasMove['raindance']) { ability = 'Swift Swim'; - } - if (abilities.includes('Unburden') && hasMove['acrobatics']) { + } else if (abilities.includes('Unburden') && hasMove['acrobatics']) { ability = 'Unburden'; } - if (template.id === 'ambipom' && !counter['technician']) { + + if (template.species === 'Ambipom' && !counter['technician']) { // If it doesn't qualify for Technician, Skill Link is useless on it ability = 'Pickup'; - } else if (template.id === 'aurorus' && ability === 'Snow Warning' && hasMove['hypervoice']) { - for (let i = 0; i < moves.length; i++) { - if (moves[i] === 'hypervoice') { - moves[i] = 'blizzard'; - counter['Normal'] = 0; - break; - } - } } else if (template.baseSpecies === 'Basculin') { ability = 'Adaptability'; - } else if (template.id === 'lilligant' && hasMove['petaldance']) { - ability = 'Own Tempo'; - } else if (template.id === 'lopunny' && hasMove['switcheroo'] && this.random(3)) { + } else if (template.baseSpecies === 'Glalie') { + ability = 'Inner Focus'; + } else if (template.species === 'Lopunny' && hasMove['switcheroo'] && this.randomChance(2, 3)) { ability = 'Klutz'; - } else if (template.id === 'mawilemega') { - ability = 'Intimidate'; - } else if (template.id === 'rampardos' && !hasMove['headsmash']) { + } else if ((template.species === 'Rampardos' && !hasMove['headsmash']) || hasMove['rockclimb']) { ability = 'Sheer Force'; - } else if (template.id === 'rhyperior') { - ability = 'Solid Rock'; - } else if (template.id === 'reuniclus') { - ability = 'Magic Guard'; - } else if (template.id === 'togetic' || template.id === 'unfezant') { - ability = 'Super Luck'; + } else if (template.species === 'Torterra' && !counter['Grass']) { + ability = 'Shell Armor'; } else if (template.id === 'venusaurmega') { ability = 'Chlorophyll'; } - } - - if (hasMove['rockclimb'] && ability !== 'Sheer Force') { - moves[moves.indexOf('rockclimb')] = 'doubleedge'; + } else { + ability = ability0.name; } item = 'Leftovers'; if (template.requiredItems) { - item = template.requiredItems[this.random(template.requiredItems.length)]; + item = this.sample(template.requiredItems); // First, the extra high-priority items } else if (template.species === 'Marowak') { @@ -756,23 +740,20 @@ class RandomGen6Teams extends RandomTeams { } else if (template.species === 'Unown') { item = 'Choice Specs'; } else if (template.species === 'Wobbuffet') { - item = hasMove['destinybond'] ? 'Custap Berry' : ['Leftovers', 'Sitrus Berry'][this.random(2)]; + item = hasMove['destinybond'] ? 'Custap Berry' : this.sample(['Leftovers', 'Sitrus Berry']); } else if (ability === 'Imposter') { item = 'Choice Scarf'; } else if (ability === 'Klutz' && hasMove['switcheroo']) { // To perma-taunt a Pokemon by giving it Assault Vest item = 'Assault Vest'; - } else if (hasMove['geomancy']) { - item = 'Power Herb'; } else if (hasMove['switcheroo'] || hasMove['trick']) { - let randomNum = this.random(3); - if (counter.Physical >= 3 && (template.baseStats.spe < 60 || template.baseStats.spe > 108 || randomNum)) { - item = 'Choice Band'; - } else if (counter.Special >= 3 && (template.baseStats.spe < 60 || template.baseStats.spe > 108 || randomNum)) { - item = 'Choice Specs'; - } else { + if (template.baseStats.spe >= 60 && template.baseStats.spe <= 108) { item = 'Choice Scarf'; + } else { + item = (counter.Physical > counter.Special) ? 'Choice Band' : 'Choice Specs'; } + } else if (hasMove['geomancy'] || hasMove['solarbeam'] && !hasAbility['Drought'] && !hasMove['sunnyday'] && !teamDetails['sun']) { + item = 'Power Herb'; } else if (template.evos.length) { item = (ability === 'Technician' && counter.Physical >= 4) ? 'Choice Band' : 'Eviolite'; } else if (hasMove['bellydrum']) { @@ -781,8 +762,8 @@ class RandomGen6Teams extends RandomTeams { item = (ability === 'Solid Rock' && counter['priority']) ? 'Weakness Policy' : 'White Herb'; } else if (ability === 'Harvest') { item = hasMove['rest'] ? 'Lum Berry' : 'Sitrus Berry'; - } else if (ability === 'Magic Guard' || ability === 'Sheer Force') { - item = hasMove['psychoshift'] ? 'Flame Orb' : 'Life Orb'; + } else if ((ability === 'Magic Guard' || ability === 'Sheer Force') && counter.damagingMoves.length > 1) { + item = 'Life Orb'; } else if (ability === 'Poison Heal' || ability === 'Toxic Boost') { item = 'Toxic Orb'; } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { @@ -795,7 +776,7 @@ class RandomGen6Teams extends RandomTeams { item = 'Light Clay'; } else if (hasMove['acrobatics']) { item = 'Flying Gem'; - } else if ((ability === 'Guts' || hasMove['facade']) && !hasMove['sleeptalk']) { + } else if (hasMove['psychoshift'] || (ability === 'Guts' || hasMove['facade']) && !hasMove['sleeptalk']) { item = hasMove['drainpunch'] ? 'Flame Orb' : 'Toxic Orb'; } else if (ability === 'Unburden') { if (hasMove['fakeout']) { @@ -819,10 +800,10 @@ class RandomGen6Teams extends RandomTeams { } else if (((ability === 'Speed Boost' && !hasMove['substitute']) || (ability === 'Stance Change')) && counter.Physical + counter.Special > 2) { item = 'Life Orb'; } else if (counter.Physical >= 4 && !hasMove['bodyslam'] && !hasMove['dragontail'] && !hasMove['fakeout'] && !hasMove['flamecharge'] && !hasMove['rapidspin'] && !hasMove['suckerpunch']) { - item = template.baseStats.atk >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.random(3) ? 'Choice Scarf' : 'Choice Band'; + item = template.baseStats.atk >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.randomChance(2, 3) ? 'Choice Scarf' : 'Choice Band'; } else if (counter.Special >= 4 && !hasMove['acidspray'] && !hasMove['chargebeam'] && !hasMove['clearsmog'] && !hasMove['fierydance']) { - item = template.baseStats.spa >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.random(3) ? 'Choice Scarf' : 'Choice Specs'; - } else if (counter.Special >= 3 && hasMove['uturn'] && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.random(3)) { + item = template.baseStats.spa >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.randomChance(2, 3) ? 'Choice Scarf' : 'Choice Specs'; + } else if (((counter.Physical >= 3 && hasMove['defog']) || (counter.Special >= 3 && hasMove['uturn'])) && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && !hasMove['foulplay'] && this.randomChance(2, 3)) { item = 'Choice Scarf'; } else if (ability === 'Defeatist' || hasMove['eruption'] || hasMove['waterspout']) { item = counter.Status <= 1 ? 'Expert Belt' : 'Leftovers'; @@ -835,41 +816,35 @@ class RandomGen6Teams extends RandomTeams { } else if (ability === 'Slow Start' || hasMove['clearsmog'] || hasMove['curse'] || hasMove['detect'] || hasMove['protect'] || hasMove['sleeptalk']) { item = 'Leftovers'; } else if (hasMove['substitute']) { - item = !counter['drain'] || counter.damagingMoves.length < 2 ? 'Leftovers' : 'Life Orb'; - } else if (hasMove['lightscreen'] || hasMove['reflect']) { - item = 'Light Clay'; - } else if (ability === 'Iron Barbs' || ability === 'Rough Skin') { + item = counter.damagingMoves.length > 2 && !!counter['drain'] ? 'Life Orb' : 'Leftovers'; + } else if ((ability === 'Iron Barbs' || ability === 'Rough Skin') && this.randomChance(1, 2)) { item = 'Rocky Helmet'; - } else if (counter.Physical + counter.Special >= 4 && template.baseStats.spd >= 65 && (template.baseStats.def + template.baseStats.spd >= 190 || hasMove['rapidspin'])) { + } else if (counter.Physical + counter.Special >= 4 && template.baseStats.spd >= 65 && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 235) { item = 'Assault Vest'; } else if (counter.damagingMoves.length >= 4) { - item = (!!counter['Normal'] || (hasMove['suckerpunch'] && !hasType['Dark'])) ? 'Life Orb' : 'Expert Belt'; - } else if (counter.damagingMoves.length >= 3 && !!counter['speedsetup'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 300) { - item = 'Weakness Policy'; - } else if (counter.damagingMoves.length >= 3 && ability !== 'Sturdy' && !hasMove['clearsmog'] && !hasMove['dragontail'] && !hasMove['foulplay'] && !hasMove['superfang']) { - item = (template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285 || !!counter['speedsetup'] || hasMove['trickroom']) ? 'Life Orb' : 'Leftovers'; + item = (!!counter['Dragon'] || !!counter['Normal'] || (hasMove['suckerpunch'] && !hasType['Dark'])) ? 'Life Orb' : 'Expert Belt'; } else if (template.species === 'Palkia' && (hasMove['dracometeor'] || hasMove['spacialrend']) && hasMove['hydropump']) { item = 'Lustrous Orb'; + } else if (counter.damagingMoves.length >= 3 && !!counter['speedsetup'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 300) { + item = 'Weakness Policy'; } else if (slot === 0 && ability !== 'Regenerator' && ability !== 'Sturdy' && !counter['recoil'] && !counter['recovery'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285) { item = 'Focus Sash'; + } else if (counter.damagingMoves.length >= 3 && ability !== 'Sturdy' && !hasMove['acidspray'] && !hasMove['dragontail'] && !hasMove['foulplay'] && !hasMove['rapidspin'] && !hasMove['superfang']) { + item = (template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285 || !!counter['speedsetup'] || hasMove['trickroom']) ? 'Life Orb' : 'Leftovers'; // This is the "REALLY can't think of a good item" cutoff - } else if (ability === 'Super Luck') { - item = 'Scope Lens'; + } else if (ability === 'Gale Wings' && hasMove['bravebird']) { + item = 'Sharp Beak'; } else if (ability === 'Sturdy' && hasMove['explosion'] && !counter['speedsetup']) { item = 'Custap Berry'; + } else if (ability === 'Super Luck') { + item = 'Scope Lens'; } else if (hasType['Poison']) { item = 'Black Sludge'; - } else if (ability === 'Gale Wings' && hasMove['bravebird']) { - item = 'Sharp Beak'; } else if (this.getEffectiveness('Rock', template) >= 1 || hasMove['dragontail']) { item = 'Leftovers'; } else if (this.getImmunity('Ground', template) && this.getEffectiveness('Ground', template) >= 1 && ability !== 'Levitate' && ability !== 'Solid Rock' && !hasMove['magnetrise'] && !hasMove['sleeptalk']) { item = 'Air Balloon'; - } else if (counter.Status <= 1 && ability !== 'Sturdy' && !hasMove['rapidspin']) { - item = 'Life Orb'; - } else { - item = 'Leftovers'; } // For Trick / Switcheroo @@ -877,62 +852,57 @@ class RandomGen6Teams extends RandomTeams { item = 'Black Sludge'; } + /** @type {{[tier: string]: number}} */ let levelScale = { - LC: 87, - 'LC Uber': 86, - NFE: 84, PU: 83, - BL4: 82, + PUBL: 82, NU: 81, - BL3: 80, + NUBL: 80, RU: 79, - BL2: 78, + RUBL: 78, UU: 77, - BL: 76, + UUBL: 76, + '(OU)': 75, OU: 75, Unreleased: 75, - CAP: 75, Uber: 73, - AG: 71, }; + /** @type {{[species: string]: number}} */ let customScale = { // Between OU and Uber Aegislash: 74, Blaziken: 74, 'Blaziken-Mega': 74, Genesect: 74, 'Genesect-Burn': 74, 'Genesect-Chill': 74, 'Genesect-Douse': 74, 'Genesect-Shock': 74, Greninja: 74, 'Lucario-Mega': 74, 'Mawile-Mega': 74, // Banned Ability - Gothitelle: 74, Ninetales: 77, Politoed: 77, Wobbuffet: 74, + Dugtrio: 74, Gothitelle: 74, Ninetales: 77, Politoed: 77, Wobbuffet: 74, // Holistic judgement Unown: 100, }; - let tier = template.tier; - if (tier.charAt(0) === '(') { - tier = tier.slice(1, -1); - } - let level = levelScale[tier] || 75; + let level = levelScale[template.tier] || 84; if (customScale[template.name]) level = customScale[template.name]; if (template.name === 'Slurpuff' && !counter.setupType) level = 81; if (template.name === 'Xerneas' && hasMove['geomancy']) level = 71; // Prepare optimal HP - let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - if (hasMove['substitute'] && item === 'Sitrus Berry') { - // Two Substitutes should activate Sitrus Berry - while (hp % 4 > 0) { - evs.hp -= 4; - hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + let srWeakness = this.getEffectiveness('Rock', template); + while (evs.hp > 1) { + let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if (hasMove['substitute'] && hasMove['reversal']) { + // Reversal users should be able to use four Substitutes + if (hp % 4 > 0) break; + } else if (hasMove['substitute'] && (item === 'Petaya Berry' || item === 'Sitrus Berry')) { + // Three Substitutes should activate Petaya Berry for Dedenne + // Two Substitutes should activate Sitrus Berry + if (hp % 4 === 0) break; + } else if (hasMove['bellydrum'] && item === 'Sitrus Berry') { + // 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; } - } else if (hasMove['bellydrum'] && item === 'Sitrus Berry') { - // Belly Drum should activate Sitrus Berry - if (hp % 2 > 0) evs.hp -= 4; - } else if (hasMove['substitute'] && hasMove['reversal']) { - // Reversal users should be able to use four Substitutes - if (hp % 4 === 0) evs.hp -= 4; - } else { - // Maximize number of Stealth Rock switch-ins - let srWeakness = this.getEffectiveness('Rock', template); - if (srWeakness > 0 && hp % (4 / srWeakness) === 0) evs.hp -= 4; + evs.hp -= 4; } // Minimize confusion damage @@ -949,15 +919,247 @@ class RandomGen6Teams extends RandomTeams { return { name: template.baseSpecies, species: species, + gender: template.gender, moves: moves, ability: ability, evs: evs, ivs: ivs, item: item, level: level, - shiny: !this.random(1024), + shiny: this.randomChance(1, 1024), + }; + } + + /** + * @param {Template} template + * @param {number} slot + * @param {RandomTeamsTypes["FactoryTeamDetails"]} teamData + * @param {string} tier + * @return {RandomTeamsTypes["RandomFactorySet"] | false} + */ + randomFactorySet(template, slot, teamData, tier) { + let speciesId = toId(template.species); + // let flags = this.randomFactorySets[tier][speciesId].flags; + let setList = this.randomFactorySets[tier][speciesId].sets; + + /**@type {{[k: string]: number}} */ + let itemsMax = {'choicespecs': 1, 'choiceband': 1, 'choicescarf': 1}; + /**@type {{[k: string]: number}} */ + let movesMax = {'rapidspin': 1, 'batonpass': 1, 'stealthrock': 1, 'defog': 1, 'spikes': 1, 'toxicspikes': 1}; + /**@type {{[k: string]: string}} */ + let requiredMoves = {'stealthrock': 'hazardSet', 'rapidspin': 'hazardClear', 'defog': 'hazardClear'}; + /**@type {{[k: string]: string}} */ + let weatherAbilitiesRequire = { + 'hydration': 'raindance', 'swiftswim': 'raindance', + 'leafguard': 'sunnyday', 'solarpower': 'sunnyday', 'chlorophyll': 'sunnyday', + 'sandforce': 'sandstorm', 'sandrush': 'sandstorm', 'sandveil': 'sandstorm', + 'snowcloak': 'hail', + }; + let weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream']; + + // Build a pool of eligible sets, given the team partners + // Also keep track of sets with moves the team requires + /**@type {{set: AnyObject, moveVariants?: number[], itemVariants?: number, abilityVariants?: number}[]} */ + let effectivePool = []; + let priorityPool = []; + for (const curSet of setList) { + let itemData = this.getItem(curSet.item); + if (teamData.megaCount > 0 && itemData.megaStone) continue; // reject 2+ mega stones + if (itemsMax[itemData.id] && teamData.has[itemData.id] >= itemsMax[itemData.id]) continue; + + let abilityData = this.getAbility(curSet.ability); + if (weatherAbilitiesRequire[abilityData.id] && teamData.weather !== weatherAbilitiesRequire[abilityData.id]) continue; + if (teamData.weather && weatherAbilities.includes(abilityData.id)) continue; // reject 2+ weather setters + + let reject = false; + let hasRequiredMove = false; + let curSetVariants = []; + for (const move of curSet.moves) { + let variantIndex = this.random(move.length); + let moveId = toId(move[variantIndex]); + if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) { + reject = true; + break; + } + if (requiredMoves[moveId] && !teamData.has[requiredMoves[moveId]]) { + hasRequiredMove = true; + } + curSetVariants.push(variantIndex); + } + if (reject) continue; + effectivePool.push({set: curSet, moveVariants: curSetVariants}); + if (hasRequiredMove) priorityPool.push({set: curSet, moveVariants: curSetVariants}); + } + if (priorityPool.length) effectivePool = priorityPool; + + if (!effectivePool.length) { + if (!teamData.forceResult) return false; + for (const curSet of setList) { + effectivePool.push({set: curSet}); + } + } + + let setData = this.sample(effectivePool); + let 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.name || template.baseSpecies, + species: setData.set.species, + gender: setData.set.gender || template.gender || (this.randomChance(1, 2) ? 'M' : 'F'), + item: setData.set.item || '', + ability: setData.set.ability || template.abilities['0'], + shiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny, + level: 100, + happiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness, + evs: setData.set.evs || {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, + ivs: setData.set.ivs || {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, + nature: setData.set.nature || 'Serious', + moves: moves, }; } + + /** + * @param {number} [depth] + * @return {RandomTeamsTypes["RandomFactorySet"][]} + */ + randomFactoryTeam(depth = 0) { + let forceResult = (depth >= 4); + + // The teams generated depend on the tier choice in such a way that + // no exploitable information is leaked from rolling the tier in getTeam(p1). + if (!this.FactoryTier) this.FactoryTier = this.sample(['Uber', 'OU', 'UU', 'RU', 'NU', 'PU']); + const chosenTier = this.FactoryTier; + + let pokemon = []; + + let pokemonPool = Object.keys(this.randomFactorySets[chosenTier]); + + /**@type {import('../../random-teams').TeamData} */ + let teamData = {typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, has: {}, forceResult: forceResult, weaknesses: {}, resistances: {}}; + let requiredMoveFamilies = ['hazardSet', 'hazardClear']; + /**@type {{[k: string]: string}} */ + let requiredMoves = {'stealthrock': 'hazardSet', 'rapidspin': 'hazardClear', 'defog': 'hazardClear'}; + /**@type {{[k: string]: string}} */ + let weatherAbilitiesSet = {'drizzle': 'raindance', 'drought': 'sunnyday', 'snowwarning': 'hail', 'sandstream': 'sandstorm'}; + /**@type {{[k: string]: string[]}} */ + let resistanceAbilities = { + 'dryskin': ['Water'], 'waterabsorb': ['Water'], 'stormdrain': ['Water'], + 'flashfire': ['Fire'], 'heatproof': ['Fire'], + 'lightningrod': ['Electric'], 'motordrive': ['Electric'], 'voltabsorb': ['Electric'], + 'sapsipper': ['Grass'], + 'thickfat': ['Ice', 'Fire'], + 'levitate': ['Ground'], + }; + + while (pokemonPool.length && pokemon.length < 6) { + let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); + if (!template.exists) continue; + + let speciesFlags = this.randomFactorySets[chosenTier][template.speciesid].flags; + + // Limit to one of each species (Species Clause) + if (teamData.baseFormes[template.baseSpecies]) continue; + + // Limit the number of Megas to one + if (teamData.megaCount >= 1 && speciesFlags.megaOnly) continue; + + // Limit 2 of any type + let types = template.types; + let skip = false; + for (const type of types) { + if (teamData.typeCount[type] > 1 && this.randomChance(4, 5)) { + skip = true; + break; + } + } + if (skip) continue; + + let set = this.randomFactorySet(template, pokemon.length, teamData, chosenTier); + 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 (typeCombo in teamData.typeComboCount) continue; + + // 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; + } + } + teamData.typeComboCount[typeCombo] = 1; + + teamData.baseFormes[template.baseSpecies] = 1; + + let itemData = this.getItem(set.item); + if (itemData.megaStone) teamData.megaCount++; + if (itemData.id in teamData.has) { + teamData.has[itemData.id]++; + } else { + teamData.has[itemData.id] = 1; + } + + let abilityData = this.getAbility(set.ability); + if (abilityData.id in weatherAbilitiesSet) { + teamData.weather = weatherAbilitiesSet[abilityData.id]; + } + + for (const move of set.moves) { + let moveId = toId(move); + if (moveId in teamData.has) { + teamData.has[moveId]++; + } else { + teamData.has[moveId] = 1; + } + if (moveId in requiredMoves) { + teamData.has[requiredMoves[moveId]] = 1; + } + } + + for (let typeName in this.data.TypeChart) { + // Cover any major weakness (3+) with at least one resistance + if (teamData.resistances[typeName] >= 1) continue; + if (resistanceAbilities[abilityData.id] && resistanceAbilities[abilityData.id].includes(typeName) || !this.getImmunity(typeName, types)) { + // Heuristic: assume that Pokemon 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; + } + let typeMod = this.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 (pokemon.length < 6) return this.randomFactoryTeam(++depth); + + // Quality control + if (!teamData.forceResult) { + for (const requiredFamily of requiredMoveFamilies) { + if (!teamData.has[requiredFamily]) return this.randomFactoryTeam(++depth); + } + for (let type in teamData.weaknesses) { + if (teamData.weaknesses[type] >= 3) return this.randomFactoryTeam(++depth); + } + } + + return pokemon; + } } module.exports = RandomGen6Teams; diff --git a/data/mods/gen6/scripts.js b/data/mods/gen6/scripts.js new file mode 100644 index 0000000000000..3212f8e72a00d --- /dev/null +++ b/data/mods/gen6/scripts.js @@ -0,0 +1,9 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + gen: 6, +}; + +exports.BattleScripts = BattleScripts; + diff --git a/mods/gen6/statuses.js b/data/mods/gen6/statuses.js similarity index 55% rename from mods/gen6/statuses.js rename to data/mods/gen6/statuses.js index 756a15b56e10f..2b80a393b3944 100644 --- a/mods/gen6/statuses.js +++ b/data/mods/gen6/statuses.js @@ -1,15 +1,16 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { brn: { inherit: true, - onResidual: function (pokemon) { + onResidual(pokemon) { this.damage(pokemon.maxhp / 8); }, }, par: { inherit: true, - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (!pokemon.hasAbility('quickfeet')) { return this.chainModify(0.25); } @@ -17,26 +18,30 @@ exports.BattleStatuses = { }, confusion: { inherit: true, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { pokemon.volatiles.confusion.time--; if (!pokemon.volatiles.confusion.time) { pokemon.removeVolatile('confusion'); return; } this.add('-activate', pokemon, 'confusion'); - if (this.random(2) === 0) { + if (this.randomChance(1, 2)) { return; } - this.damage(this.getDamage(pokemon, pokemon, 40), pokemon, pokemon, { + let damage = this.getDamage(pokemon, pokemon, 40); + if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); + this.damage(damage, pokemon, pokemon, /** @type {ActiveMove} */ ({ id: 'confused', effectType: 'Move', type: '???', - }); + })); return false; }, }, choicelock: { inherit: true, - onBeforeMove: function () {}, + onBeforeMove() {}, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/mods/gen6/typechart.js b/data/mods/gen6/typechart.js similarity index 75% rename from mods/gen6/typechart.js rename to data/mods/gen6/typechart.js index 48b866920d983..8be0df93fdbc0 100644 --- a/mods/gen6/typechart.js +++ b/data/mods/gen6/typechart.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleTypeChart = { +/**@type {{[k: string]: ModdedTypeData}} */ +let BattleTypeChart = { "Dark": { inherit: true, damageTaken: { @@ -25,3 +26,5 @@ exports.BattleTypeChart = { }, }, }; + +exports.BattleTypeChart = BattleTypeChart; diff --git a/mods/gennext/README.md b/data/mods/gennext/README.md similarity index 97% rename from mods/gennext/README.md rename to data/mods/gennext/README.md index aefc9d2a33f4d..114b2a70182e1 100644 --- a/mods/gennext/README.md +++ b/data/mods/gennext/README.md @@ -39,7 +39,7 @@ Recent changes A changelog for NEXT is available here: -https://github.com/Zarel/Pokemon-Showdown/commits/master/mods/gennext +https://github.com/Zarel/Pokemon-Showdown/commits/master/data/mods/gennext Changes ------------------------------------------------------------------------ @@ -145,7 +145,7 @@ Major changes: - Twister is now a 80 base power Flying move with a 30% confusion chance -- Floette-Eternal-Flower and Volcanion are released. +- Floette-Eternal-Flower is released. New mechanic: Signature Pokémon: @@ -229,8 +229,6 @@ New mechanic: Intrinsics: - Flygon: Compoundeyes, Sand Rush - - Gengar: Cursed Body - - Hydreigon: Sheer Force - Mesprit: Serene Grace @@ -391,6 +389,8 @@ Minor learnset changes: - Scolipede and Steelix get Coil +- Lumineon, Ampharos, and Lanturn get Tail Glow + - Rotom formes learn more things: - Rotom-Wash: BubbleBeam - Rotom-Fan: Hurricane, Twister @@ -437,7 +437,9 @@ Minor ability changes: - 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 Shell Armor + 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 @@ -450,7 +452,7 @@ Minor ability changes: - Telepathy grants Imprison on switch-in -- Compoundeyes and Keen Eye now grant 1.6x accuracy (this replaces Keen +- 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) diff --git a/data/mods/gennext/abilities.js b/data/mods/gennext/abilities.js new file mode 100644 index 0000000000000..3e6f7100adec3 --- /dev/null +++ b/data/mods/gennext/abilities.js @@ -0,0 +1,691 @@ +'use strict'; + +/**@type {{[k: string]: ModdedAbilityData}} */ +let BattleAbilities = { + "swiftswim": { + inherit: true, + onModifySpe(spe, pokemon) { + if (this.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.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.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.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) { + let weather = move.weather; + move.weather = ''; + move.onHit = function (target, source) { + this.setWeather(weather, source, this.getAbility('forecast')); + this.weatherData.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.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.isWeather('sandstorm')) { + return basePower * 4 / 5; + } + }, + onModifyAccuracy() {}, + }, + "waterveil": { + inherit: true, + onSourceBasePower(basePower) { + if (this.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.maxhp / 16); + }, + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact'] && this.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, + onAfterDamage(damage, target, source, move) { + if (move && move.flags['contact']) { + source.trySetStatus('par', target); + } + }, + shortDesc: "100% chance a Pokemon making contact with this Pokemon will be paralyzed.", + }, + "cutecharm": { + inherit: true, + onAfterDamage(damage, target, source, move) { + if (move && 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, + onAfterDamage(damage, target, source, move) { + if (move && 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') { + /**@type {string} */ + // @ts-ignore + let weather = move.weather; + move.weather = ''; + move.onHit = function (target, source) { + this.setWeather(weather, source, this.getAbility('flowergift')); + this.weatherData.duration = 0; + }; + move.target = 'self'; + move.sideCondition = 'flowergift'; + } + }, + onUpdate(pokemon) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + if (pokemon.isActive && pokemon.speciesid === 'cherrim' && this.effectData.forme !== 'Sunshine') { + this.effectData.forme = 'Sunshine'; + this.add('-formechange', pokemon, 'Cherrim-Sunshine', '[msg]'); + this.boost({spd: 1}); + } + } else if (pokemon.isActive && pokemon.speciesid === 'cherrim' && this.effectData.forme) { + delete this.effectData.forme; + this.add('-formechange', pokemon, 'Cherrim', '[msg]'); + } + }, + effect: { + onSwitchInPriority: 1, + onSwitchIn(target) { + if (!target.fainted) { + this.boost({spd: 1}, target, target, this.getAbility('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, + effect: { + 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 (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 (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.hasCustomRecoil || 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, + onBoost(boost, target, source) { + for (let i in boost) { + // @ts-ignore + if (boost[i] < 0) { + // @ts-ignore + 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, + onBoost(boost, target, source) { + for (let i in boost) { + // @ts-ignore + if (boost[i] < 0) { + // @ts-ignore + 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.template.baseSpecies === 'Genesect') { + if (!pokemon.getItem().onDrive) return; + } + let totaldef = 0; + let totalspd = 0; + for (const foe of pokemon.side.foe.active) { + if (!foe || foe.fainted) continue; + totaldef += foe.stats.def; + totalspd += foe.stats.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; + } + }, + onAfterDamage() {}, + 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, + onAfterDamage(damage, target, source, move) { + if (source && source !== target && move && !target.hp) { + this.damage(source.maxhp / 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'); + } + }, + id: "cursedbody", + name: "Cursed Body", + rating: 3, + num: 130, + }, + "gluttony": { + inherit: true, + onResidualOrder: 26, + onResidualSubOrder: 1, + onResidual(pokemon) { + if (!pokemon.gluttonyFlag && !pokemon.item && this.getItem(pokemon.lastItem).isBerry) { + pokemon.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'; + }, + effect: { + 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.maxhp / 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.effectData.target.moveSlots) { + pokemon.disableMove(moveSlot.id, 'hidden'); + } + pokemon.maybeDisabled = true; + }, + onFoeBeforeMove(attacker, defender, move) { + if (move.id !== 'struggle' && this.effectData.target.hasMove(move.id)) { + 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 && ((target.side && target.side.active.length < 2) || ['any', 'normal', 'randomNormal'].includes(move.target))) { + move.multihit = 2; + move.accuracy = true; + pokemon.addVolatile('parentalbond'); + } + }, + effect: { + 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'); + }, + effect: { + 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.effectData.target; + if (pokemon.ability !== 'shadowtag' && !source.volatiles.shadowtag) { + pokemon.maybeTrapped = true; + } + }, + onFoeTrapPokemon(pokemon) {}, + }, +}; + +exports.BattleAbilities = BattleAbilities; diff --git a/mods/gennext/formats-data.js b/data/mods/gennext/formats-data.js similarity index 85% rename from mods/gennext/formats-data.js rename to data/mods/gennext/formats-data.js index 6da0e67da5323..2c36cf10e509e 100644 --- a/mods/gennext/formats-data.js +++ b/data/mods/gennext/formats-data.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleFormatsData = { +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { aegislash: { inherit: true, tier: 'OU', @@ -62,3 +63,5 @@ exports.BattleFormatsData = { tier: 'Uber', }, }; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/mods/gennext/items.js b/data/mods/gennext/items.js similarity index 54% rename from mods/gennext/items.js rename to data/mods/gennext/items.js index a03b10b721ee7..127c96fec6f64 100644 --- a/mods/gennext/items.js +++ b/data/mods/gennext/items.js @@ -1,106 +1,79 @@ 'use strict'; -exports.BattleItems = { +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { "burndrive": { - id: "burndrive", - name: "Burn Drive", - spritenum: 103, - fling: { - basePower: 70, - }, - onBasePower: function (basePower, user, target, move) { - }, - onDrive: 'Fire', + inherit: true, + onBasePower(basePower, user, target, move) {}, desc: "Changes Genesect to Genesect-Burn.", }, "chilldrive": { - id: "chilldrive", - name: "Chill Drive", - spritenum: 103, - fling: { - basePower: 70, - }, - onBasePower: function (basePower, user, target, move) { - }, - onDrive: 'Ice', + inherit: true, + onBasePower(basePower, user, target, move) {}, desc: "Changes Genesect to Genesect-Chill.", }, "dousedrive": { - id: "dousedrive", - name: "Douse Drive", - spritenum: 103, - fling: { - basePower: 70, - }, - onBasePower: function (basePower, user, target, move) { - }, - onDrive: 'Water', + inherit: true, + onBasePower(basePower, user, target, move) {}, desc: "Changes Genesect to Genesect-Douse.", }, "shockdrive": { - id: "shockdrive", - name: "Shock Drive", - spritenum: 103, - fling: { - basePower: 70, - }, - onBasePower: function (basePower, user, target, move) { - }, - onDrive: 'Electric', + inherit: true, + onBasePower(basePower, user, target, move) {}, desc: "Changes Genesect to Genesect-Shock.", }, "widelens": { inherit: true, - onSourceModifyAccuracy: function (accuracy) { + 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: function (accuracy, target) { + onSourceModifyAccuracy(accuracy, target) { if (typeof accuracy === 'number' && !this.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: function (source, target) { + onAfterMoveSecondarySelf(source, target) { if (source.hasType('Grass')) { this.heal(source.lastDamage / 8, source); } }, onResidualOrder: 5, onResidualSubOrder: 2, - onResidual: function (pokemon) { + onResidual(pokemon) { if (pokemon.hasType('Grass')) { this.heal(pokemon.maxhp / 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: function (pokemon) { + onResidual(pokemon) { if (pokemon.hasType('Poison')) { this.heal(pokemon.maxhp / (pokemon.getTypes().length === 1 ? 8 : 16)); } else { this.damage(pokemon.maxhp / 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": { - id: "focusband", - name: "Focus Band", - spritenum: 150, - fling: { - basePower: 10, - }, - onDamage: function (damage, target, source, effect) { + inherit: true, + onDamage(damage, target, source, effect) { let types = target.getTypes(); if (types.length === 1 && types[0] === 'Fighting' && effect && effect.effectType === 'Move' && @@ -113,13 +86,11 @@ exports.BattleItems = { } } }, - num: 230, - gen: 2, - desc: "Holder has a 10% chance to survive an attack that would KO it with 1HP.", + desc: "Breaks on first hit, but allows pure Fighting types to survive that hit with 1 HP.", }, "wiseglasses": { inherit: true, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.category === 'Special') { let types = user.getTypes(); if (types.length === 1 && types[0] === 'Psychic') { @@ -128,10 +99,12 @@ exports.BattleItems = { 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: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { if (move.category === 'Physical') { let types = user.getTypes(); if (types.length === 1 && types[0] === 'Fighting') { @@ -140,32 +113,29 @@ exports.BattleItems = { 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": { - id: "stick", - name: "Stick", - fling: { - basePower: 60, - }, - spritenum: 475, + inherit: true, // The Stick is a stand-in for a number of pokemon-exclusive items // introduced with Gen Next - onModifyCritRatio: function (critRatio, user) { + onModifyCritRatio(critRatio, user) { if (user.template.species === 'Farfetch\'d') { return critRatio + 2; } }, - onModifyDef: function (def, pokemon) { + onModifyDef(def, pokemon) { if (pokemon.template.species === 'Shuckle') { return def * 1.5; } }, - onModifySpA: function (spa, pokemon) { + onModifySpA(spa, pokemon) { if (pokemon.template.species === 'Unown') { return spa * 2; } }, - onModifySpD: function (spd, pokemon) { + onModifySpD(spd, pokemon) { if (pokemon.template.species === 'Unown') { return spd * 2; } @@ -173,35 +143,35 @@ exports.BattleItems = { return spd * 1.5; } }, - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (pokemon.template.species === 'Unown') { return spe * 2; } }, - onFoeBasePower: function (basePower, attacker, defender, move) { - let GossamerWingUsers = {"Butterfree":1, "Masquerain":1, "Beautifly":1, "Mothim":1, "Vivillon":1}; - if (GossamerWingUsers[defender.template.species]) { + onFoeBasePower(basePower, attacker, defender, move) { + let GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"]; + if (GossamerWingUsers.includes(defender.template.species)) { if (move.type === 'Rock' || move.type === 'Electric' || move.type === 'Ice') { this.add('-message', "The attack was weakened by GoassamerWing!"); return basePower / 2; } } }, - onDamage: function (damage, defender, attacker, effect) { - let GossamerWingUsers = {"Butterfree":1, "Masquerain":1, "Beautifly":1, "Mothim":1, "Vivillon":1}; - if (GossamerWingUsers[defender.template.species]) { + onDamage(damage, defender, attacker, effect) { + let GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"]; + if (GossamerWingUsers.includes(defender.template.species)) { if (effect && effect.id === 'stealthrock') { return damage / 2; } } }, - onAfterMoveSecondarySelf: function (source, target, move) { - let GossamerWingUsers = {"Butterfree":1, "Masquerain":1, "Beautifly":1, "Mothim":1, "Vivillon":1, "Venomoth":1, "Volcarona":1, "Dustox": 1, "Lilligant":1}; - if (move && move.effectType === 'Move' && move.category === 'Status' && GossamerWingUsers[source.template.species]) { + onAfterMoveSecondarySelf(source, target, move) { + let GossamerWingUsers = ["Butterfree", "Masquerain", "Beautifly", "Mothim", "Vivillon"]; + if (move && move.effectType === 'Move' && move.category === 'Status' && GossamerWingUsers.includes(source.template.species)) { this.heal(source.maxhp / 16); } }, - // onResidual: function (pokemon) { + // onResidual(pokemon) { // if (pokemon.template.species === 'Shuckle') { // this.heal(this.clampIntRange(pokemon.maxhp / 16, 1)); // } @@ -209,3 +179,5 @@ exports.BattleItems = { desc: "Raises Farfetch'd's critical hit rate two stages.", }, }; + +exports.BattleItems = BattleItems; diff --git a/mods/gennext/moves.js b/data/mods/gennext/moves.js similarity index 58% rename from mods/gennext/moves.js rename to data/mods/gennext/moves.js index 5f46db8aeb9b3..0b5abb03545b8 100644 --- a/mods/gennext/moves.js +++ b/data/mods/gennext/moves.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleMovedex = { +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { /****************************************************************** Perfect accuracy moves: - base power increased to 90 @@ -74,6 +75,8 @@ exports.BattleMovedex = { }, }, }, + 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, @@ -84,6 +87,8 @@ exports.BattleMovedex = { 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, @@ -94,6 +99,8 @@ exports.BattleMovedex = { 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: @@ -135,17 +142,17 @@ exports.BattleMovedex = { substitute: { inherit: true, effect: { - onStart: function (target) { + onStart(target) { this.add('-start', target, 'Substitute'); this.effectData.hp = Math.floor(target.maxhp / 4); delete target.volatiles['partiallytrapped']; }, onAccuracyPriority: -100, - onAccuracy: function (accuracy, target, source, move) { + onAccuracy(accuracy, target, source, move) { return 100; }, onTryPrimaryHitPriority: 2, - onTryPrimaryHit: function (target, source, move) { + onTryPrimaryHit(target, source, move) { if (target === source || move.flags['authentic'] || move.infiltrates) { return; } @@ -158,7 +165,7 @@ exports.BattleMovedex = { return damage; } if (damage > target.volatiles['substitute'].hp) { - damage = target.volatiles['substitute'].hp; + damage = /** @type {number} */ (target.volatiles['substitute'].hp); } target.volatiles['substitute'].hp -= damage; source.lastDamage = damage; @@ -176,7 +183,7 @@ exports.BattleMovedex = { this.runEvent('AfterSubDamage', target, source, move, damage); return 0; // hit }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Substitute'); }, }, @@ -185,11 +192,11 @@ exports.BattleMovedex = { inherit: true, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'Protect'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target.volatiles.substitute || !move.flags['protect']) return; this.add('-activate', target, 'Protect'); let lockedmove = source.getVolatile('lockedmove'); @@ -207,11 +214,11 @@ exports.BattleMovedex = { inherit: true, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'Protect'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target.volatiles.substitute || !move.flags['protect'] || move.category === 'Status') return; this.add('-activate', target, 'Protect'); let lockedmove = source.getVolatile('lockedmove'); @@ -222,7 +229,7 @@ exports.BattleMovedex = { } } if (move.flags['contact']) { - this.boost({atk:-2}, source, target, this.getMove("King's Shield")); + this.boost({atk: -2}, source, target, move); } return null; }, @@ -232,11 +239,11 @@ exports.BattleMovedex = { inherit: true, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'move: Protect'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + 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'); @@ -252,10 +259,12 @@ exports.BattleMovedex = { 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: function (target) { + onTryHit(target) { if (target.boosts.evasion >= 6) { return false; } @@ -263,12 +272,14 @@ exports.BattleMovedex = { return false; } }, - onHit: function (target) { + 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: @@ -280,22 +291,24 @@ exports.BattleMovedex = { solarbeam: { inherit: true, basePower: 80, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { return 80; }, willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, effect: { duration: 2, onLockMove: 'solarbeam', - onStart: function (pokemon) { + onStart(pokemon) { this.heal(pokemon.maxhp / 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, }, @@ -305,13 +318,15 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + 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, }, @@ -321,18 +336,16 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); - this.boost({def:1, spd:1, accuracy:1}, attacker, attacker, this.getMove('skullbash')); + this.boost({def: 1, spd: 1, accuracy: 1}, attacker, attacker, move); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); - attacker.removeVolatile(move.id); return; } attacker.addVolatile('twoturnmove', defender); @@ -340,6 +353,8 @@ exports.BattleMovedex = { }, 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, @@ -347,7 +362,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -358,6 +373,8 @@ exports.BattleMovedex = { }, 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, @@ -365,7 +382,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -374,6 +391,8 @@ exports.BattleMovedex = { }, 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, @@ -381,7 +400,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -390,6 +409,8 @@ exports.BattleMovedex = { }, 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, @@ -397,15 +418,13 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, - secondary: { - chance: 30, - status: 'par', - }, 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, @@ -413,7 +432,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -424,6 +443,8 @@ exports.BattleMovedex = { }, 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, @@ -431,7 +452,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -440,6 +461,8 @@ exports.BattleMovedex = { 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, }, @@ -449,7 +472,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -458,6 +481,8 @@ exports.BattleMovedex = { 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, }, @@ -467,7 +492,7 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { @@ -476,7 +501,8 @@ exports.BattleMovedex = { def: -1, }, }, - breaksProtect: true, + 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, @@ -484,14 +510,15 @@ exports.BattleMovedex = { willCrit: true, accuracy: true, onTryHitPriority: 10, - onTryHit: function (target) { + onTryHit(target) { target.removeVolatile('substitute'); }, secondary: { chance: 100, volatileStatus: 'curse', }, - breaksProtect: true, + 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, @@ -504,6 +531,8 @@ exports.BattleMovedex = { 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, }, @@ -513,11 +542,13 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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, @@ -525,11 +556,13 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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, @@ -537,11 +570,13 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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, @@ -549,11 +584,13 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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, @@ -561,11 +598,13 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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, @@ -573,11 +612,13 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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, @@ -585,31 +626,33 @@ exports.BattleMovedex = { basePower: 100, willCrit: true, self: null, - onHit: function (target, source) { + 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: function (pokemon) { + onTryHit(pokemon) { return this.willAct() && this.runEvent('StallMove', pokemon); }, effect: { duration: 2, onLockMove: 'bide', - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.removeVolatile('bidestall') || pokemon.hp <= 1) return false; pokemon.addVolatile('bidestall'); this.effectData.totalDamage = 0; this.add('-start', pokemon, 'Bide'); }, onDamagePriority: -11, - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (!effect || effect.effectType !== 'Move') return; if (!source || source.side === target.side) return; - if (effect && effect.effectType === 'Move' && damage >= target.hp) { + if (effect.effectType === 'Move' && damage >= target.hp) { damage = target.hp - 1; } this.effectData.totalDamage += damage; @@ -617,13 +660,13 @@ exports.BattleMovedex = { this.effectData.sourceSide = source.side; return damage; }, - onAfterSetStatus: function (status, pokemon) { + onAfterSetStatus(status, pokemon) { if (status.id === 'slp') { pokemon.removeVolatile('bide'); pokemon.removeVolatile('bidestall'); } }, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon, target, move) { if (this.effectData.duration === 1) { if (!this.effectData.totalDamage) { this.add('-end', pokemon, 'Bide'); @@ -632,13 +675,16 @@ exports.BattleMovedex = { } this.add('-end', pokemon, 'Bide'); let target = this.effectData.sourceSide.active[this.effectData.sourcePosition]; - this.moveHit(target, pokemon, 'bide', {damage: this.effectData.totalDamage * 2}); + let moveData = /** @type {ActiveMove} */ ({ + damage: this.effectData.totalDamage * 2, + }); + this.moveHit(target, pokemon, 'bide', moveData); return false; } this.add('-activate', pokemon, 'Bide'); return false; }, - onMoveAborted: function (pokemon) { + onMoveAborted(pokemon) { pokemon.removeVolatile('bide'); }, }, @@ -653,10 +699,11 @@ exports.BattleMovedex = { snore: { inherit: true, basePower: 100, - onBasePower: function (power, user) { + onBasePower(power, user) { if (user.template.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: @@ -717,10 +764,11 @@ exports.BattleMovedex = { inherit: true, basePower: 60, ignoreImmunity: true, - onHit: function (target, pokemon) { + onHit(target, pokemon) { if (pokemon.baseTemplate.species !== 'Meloetta' || pokemon.transformed) { return; } + /**@type {{[k: string]: string}} */ let natureChange = { 'Modest': 'Adamant', 'Adamant': 'Modest', @@ -729,8 +777,7 @@ exports.BattleMovedex = { }; let tmpAtkEVs; let Atk2SpA; - if (pokemon.template.speciesid === 'meloettapirouette' && pokemon.formeChange('Meloetta')) { - this.add('-formechange', pokemon, 'Meloetta'); + if (pokemon.template.speciesid === '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; @@ -740,8 +787,7 @@ exports.BattleMovedex = { atk: Atk2SpA, spa: -Atk2SpA, }, pokemon); - } else if (pokemon.formeChange('Meloetta-Pirouette')) { - this.add('-formechange', pokemon, 'Meloetta-Pirouette'); + } 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; @@ -757,6 +803,7 @@ exports.BattleMovedex = { }, 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: @@ -792,15 +839,17 @@ exports.BattleMovedex = { inherit: true, effect: { // this is a side condition - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Stealth Rock'); }, - onSwitchIn: function (pokemon) { + onSwitchIn(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: @@ -820,7 +869,7 @@ exports.BattleMovedex = { ******************************************************************/ silverwind: { inherit: true, - basePowerCallback: function () { + basePowerCallback() { if (this.isWeather('hail')) { return 90; } @@ -829,15 +878,17 @@ exports.BattleMovedex = { secondary: { chance: 100, self: { - onHit: function (target, source) { + onHit(target, source) { let stats = []; for (let stat in target.boosts) { + // @ts-ignore if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) { stats.push(stat); } } if (stats.length) { - let randomStat = stats[this.random(stats.length)]; + let randomStat = this.sample(stats); + /**@type {{[k: string]: number}} */ let boost = {}; boost[randomStat] = 1; this.boost(boost); @@ -847,10 +898,12 @@ exports.BattleMovedex = { }, }, }, + 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: function () { + basePowerCallback() { if (this.isWeather('hail')) { return 90; } @@ -859,15 +912,17 @@ exports.BattleMovedex = { secondary: { chance: 100, self: { - onHit: function (target, source) { + onHit(target, source) { let stats = []; for (let stat in target.boosts) { + // @ts-ignore if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) { stats.push(stat); } } if (stats.length) { - let randomStat = stats[this.random(stats.length)]; + let randomStat = this.sample(stats); + /**@type {{[k: string]: number}} */ let boost = {}; boost[randomStat] = 1; this.boost(boost); @@ -877,21 +932,25 @@ exports.BattleMovedex = { }, }, }, + 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: function (target, source) { + onHit(target, source) { let stats = []; for (let stat in target.boosts) { + // @ts-ignore if (stat !== 'accuracy' && stat !== 'evasion' && stat !== 'atk' && target.boosts[stat] < 6) { stats.push(stat); } } if (stats.length) { - let randomStat = stats[this.random(stats.length)]; + let randomStat = this.sample(stats); + /**@type {{[k: string]: number}} */ let boost = {}; boost[randomStat] = 1; this.boost(boost); @@ -901,6 +960,8 @@ exports.BattleMovedex = { }, }, }, + 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: @@ -911,13 +972,18 @@ exports.BattleMovedex = { ******************************************************************/ avalanche: { inherit: true, - basePowerCallback: function (pokemon, source) { - if ((source.lastDamage > 0 && pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn)) { - this.debug('Boosted for getting hit by ' + pokemon.lastAttackedBy.move); - return this.isWeather('hail') ? 180 : 120; + basePowerCallback(pokemon, source) { + let lastAttackedBy = pokemon.getLastAttackedBy(); + if (lastAttackedBy) { + if (lastAttackedBy.damage > 0 && lastAttackedBy.thisTurn) { + this.debug('Boosted for getting hit by ' + lastAttackedBy.move); + return this.isWeather('hail') ? 180 : 120; + } } return this.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: @@ -1050,9 +1116,9 @@ exports.BattleMovedex = { twister: { inherit: true, basePower: 80, - onBasePower: function (power, user) { - let GossamerWingUsers = {"Butterfree":1, "Venomoth":1, "Masquerain":1, "Dustox":1, "Beautifly":1, "Mothim":1, "Lilligant":1, "Volcarona":1, "Vivillon":1}; - if (user.hasItem('stick') && GossamerWingUsers[user.template.species]) { + onBasePower(power, user) { + let GossamerWingUsers = ["Butterfree", "Venomoth", "Masquerain", "Dustox", "Beautifly", "Mothim", "Lilligant", "Volcarona", "Vivillon"]; + if (user.hasItem('stick') && GossamerWingUsers.includes(user.template.species)) { return power * 1.5; } }, @@ -1060,6 +1126,8 @@ exports.BattleMovedex = { 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", }, @@ -1068,6 +1136,8 @@ exports.BattleMovedex = { basePower: 40, accuracy: true, multihit: [2, 2], + desc: "This move hits twice.", + shortDesc: "Hits twice.", }, /****************************************************************** Moves with not enough drawbacks: @@ -1084,6 +1154,8 @@ exports.BattleMovedex = { 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: @@ -1099,6 +1171,8 @@ exports.BattleMovedex = { 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: @@ -1122,6 +1196,8 @@ exports.BattleMovedex = { 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: @@ -1136,15 +1212,17 @@ exports.BattleMovedex = { 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: + Scald and Steam Eruption: - base power not affected by weather - 60% burn in sun @@ -1153,24 +1231,28 @@ exports.BattleMovedex = { ******************************************************************/ scald: { inherit: true, - onModifyMove: function (move) { + onModifyMove(move) { switch (this.effectiveWeather()) { case 'sunnyday': + // @ts-ignore 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: function (move) { + onModifyMove(move) { switch (this.effectiveWeather()) { case 'sunnyday': + // @ts-ignore 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: @@ -1192,16 +1274,13 @@ exports.BattleMovedex = { ******************************************************************/ echoedvoice: { inherit: true, - accuracy: 100, basePower: 80, - basePowerCallback: function () { + basePowerCallback() { return 80; }, - category: "Special", isViable: true, - priority: 0, ignoreImmunity: true, - onHit: function (target, source) { + onHit(target, source) { target.side.addSideCondition('futuremove'); if (target.side.sideConditions['futuremove'].positions[target.position]) { return false; @@ -1227,8 +1306,8 @@ exports.BattleMovedex = { this.add('-start', source, 'move: Echoed Voice'); return null; }, - target: "normal", - type: "Normal", + 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: @@ -1244,16 +1323,16 @@ exports.BattleMovedex = { rapidspin: { inherit: true, basePower: 30, - onBasePower: function (power, user) { + onBasePower(power, user) { let doubled = false; if (user.removeVolatile('leechseed')) { this.add('-end', user, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + user); doubled = true; } - let sideConditions = {spikes:1, toxicspikes:1, stealthrock:1}; - for (let i in sideConditions) { - if (user.side.removeSideCondition(i)) { - this.add('-sideend', user.side, this.getEffect(i).name, '[from] move: Rapid Spin', '[of] ' + user); + let sideConditions = ['spikes', 'toxicspikes', 'stealthrock']; + for (let condition in sideConditions) { + if (user.side.removeSideCondition(condition)) { + this.add('-sideend', user.side, this.getEffect(condition).name, '[from] move: Rapid Spin', '[of] ' + user); doubled = true; } } @@ -1265,16 +1344,19 @@ exports.BattleMovedex = { 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: function (power, user) { + 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 @@ -1287,52 +1369,60 @@ exports.BattleMovedex = { ******************************************************************/ firefang: { inherit: true, - onBasePower: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'flareon') return this.chainModify(1.5); }, accuracy: 100, secondaries: [ - {chance:20, status:'brn'}, - {chance:30, volatileStatus:'flinch'}, + {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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'walrein') return this.chainModify(1.5); }, accuracy: 100, secondaries: [ - {chance:20, status:'frz'}, - {chance:30, volatileStatus:'flinch'}, + {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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'luxray') return this.chainModify(1.5); }, accuracy: 100, secondaries: [ - {chance:20, status:'par'}, - {chance:30, volatileStatus:'flinch'}, + {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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'drapion') return this.chainModify(1.5); }, accuracy: 100, secondaries: [ - {chance:100, status:'tox'}, - {chance:30, volatileStatus:'flinch'}, + {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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'seviper') return this.chainModify(1.5); }, accuracy: 100, @@ -1340,11 +1430,13 @@ exports.BattleMovedex = { 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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'persian') return this.chainModify(1.5); }, secondary: { @@ -1353,59 +1445,69 @@ exports.BattleMovedex = { 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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'kingdra') return this.chainModify(1.5); }, secondary: { @@ -1414,51 +1516,58 @@ exports.BattleMovedex = { 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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'octillery') return this.chainModify(1.5); }, accuracy: 90, @@ -1468,11 +1577,13 @@ exports.BattleMovedex = { 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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'serperior') return this.chainModify(1.5); }, accuracy: 90, @@ -1482,35 +1593,41 @@ exports.BattleMovedex = { 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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'skarmory') return this.chainModify(1.5); }, accuracy: 100, @@ -1522,10 +1639,12 @@ exports.BattleMovedex = { }, }, }, + 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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'masquerain') return this.chainModify(1.5); }, secondary: { @@ -1534,10 +1653,12 @@ exports.BattleMovedex = { 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: function (power, user) { + onBasePower(power, user) { if (user.template.id === 'unown') return this.chainModify(1.5); }, }, @@ -1659,6 +1780,8 @@ exports.BattleMovedex = { chance: 30, status: 'par', }, + desc: "Has a 30% chance to paralyze the target.", + shortDesc: "30% chance to paralyze the target.", }, blueflare: { inherit: true, @@ -1667,6 +1790,8 @@ exports.BattleMovedex = { chance: 30, status: 'brn', }, + desc: "Has a 30% chance to burn the target.", + shortDesc: "30% chance to burn the target.", }, dragonrush: { inherit: true, @@ -1683,6 +1808,8 @@ exports.BattleMovedex = { chance: 20, status: 'brn', }, + desc: "Has a 20% chance to burn the target.", + shortDesc: "20% chance to burn the target.", }, irontail: { inherit: true, @@ -1830,6 +1957,8 @@ exports.BattleMovedex = { 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, @@ -1847,6 +1976,7 @@ exports.BattleMovedex = { }, }, }, + 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, @@ -1864,6 +1994,7 @@ exports.BattleMovedex = { }, }, }, + 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, @@ -1887,6 +2018,8 @@ exports.BattleMovedex = { 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, @@ -1895,34 +2028,33 @@ exports.BattleMovedex = { 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: function (move, user) { + onModifyMove(move, user) { if (user.illusion) { let illusionMoves = user.illusion.moves.filter(move => this.getMove(move).category !== 'Status'); if (!illusionMoves.length) return; - move.name = this.getMove(illusionMoves[this.random(illusionMoves.length)]).name; + move.name = this.getMove(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, - secondary: { - chance: 30, - boosts: { - accuracy: -1, - }, - }, }, 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, @@ -1937,28 +2069,23 @@ exports.BattleMovedex = { 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: { - num: 161, + inherit: true, accuracy: true, basePower: 30, - category: "Special", 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.", - id: "triattack", - name: "Tri Attack", - pp: 10, - isViable: true, - priority: 0, - flags: {protect: 1, mirror: 1}, multihit: [3, 3], secondary: { chance: 10, - onHit: function (target, source) { + onHit(target, source) { let result = this.random(3); if (result === 0) { target.trySetStatus('brn', source); @@ -1969,7 +2096,7 @@ exports.BattleMovedex = { } }, }, - target: "normal", - type: "Normal", }, }; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/gennext/pokedex.js b/data/mods/gennext/pokedex.js similarity index 71% rename from mods/gennext/pokedex.js rename to data/mods/gennext/pokedex.js index ce15bf3cbf159..f00b323da2ee6 100644 --- a/mods/gennext/pokedex.js +++ b/data/mods/gennext/pokedex.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattlePokedex = { +/**@type {{[k: string]: ModdedTemplateData}} */ +let BattlePokedex = { genesectdouse: { inherit: true, types: ["Bug", "Water"], @@ -18,3 +19,5 @@ exports.BattlePokedex = { types: ["Bug", "Ice"], }, }; + +exports.BattlePokedex = BattlePokedex; diff --git a/mods/gennext/scripts.js b/data/mods/gennext/scripts.js similarity index 92% rename from mods/gennext/scripts.js rename to data/mods/gennext/scripts.js index 87b34ad42c881..3e2aae0dca32a 100644 --- a/mods/gennext/scripts.js +++ b/data/mods/gennext/scripts.js @@ -1,7 +1,8 @@ 'use strict'; -exports.BattleScripts = { - init: function () { +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + init() { this.modData('Pokedex', 'cherrimsunshine').types = ['Grass', 'Fire']; // Give Hurricane to all the Bug/Flying Quiver-dancers @@ -63,6 +64,14 @@ exports.BattleScripts = { 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']; @@ -115,7 +124,6 @@ exports.BattleScripts = { 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', 'gengar').abilities['1'] = 'Cursed Body'; this.modData('Pokedex', 'mismagius').abilities['1'] = 'Cursed Body'; this.modData('Pokedex', 'cryogonal').abilities['1'] = 'Ice Body'; this.modData('Pokedex', 'mesprit').abilities['1'] = 'Serene Grace'; @@ -142,3 +150,5 @@ exports.BattleScripts = { } }, }; + +exports.BattleScripts = BattleScripts; diff --git a/mods/gennext/statuses.js b/data/mods/gennext/statuses.js similarity index 77% rename from mods/gennext/statuses.js rename to data/mods/gennext/statuses.js index 7094d611bb480..2d77c2761c093 100644 --- a/mods/gennext/statuses.js +++ b/data/mods/gennext/statuses.js @@ -1,14 +1,18 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { frz: { + name: 'frz', + id: 'frz', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'frz'); }, duration: 2, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (move.flags['defrost']) { pokemon.cureStatus(); return; @@ -16,23 +20,28 @@ exports.BattleStatuses = { this.add('cant', pokemon, 'frz'); return false; }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.type === 'Fire' && move.category !== 'Status' || move.flags['defrost']) { target.cureStatus(); } }, - onEnd: function (target) { - this.battle.add('-curestatus', target, 'frz'); + onEnd(target) { + this.add('-curestatus', target, 'frz'); }, }, lockedmove: { // Outrage, Thrash, Petal Dance... - durationCallback: function () { + name: 'lockedmove', + id: 'lockedmove', + num: 0, + durationCallback() { return this.random(2, 4); }, - onResidual: function (target) { - let move = this.getMove(target.lastMove); - if (!move.self || move.self.volatileStatus !== 'lockedmove') { + onResidual(target) { + /**@type {Move} */ + // @ts-ignore + let move = target.lastMove; + if (!move.self || (move.self !== true && move.self.volatileStatus !== 'lockedmove')) { // don't lock, and bypass confusion for calming delete target.volatiles['lockedmove']; } else if (target.ability === 'owntempo') { @@ -40,16 +49,20 @@ exports.BattleStatuses = { delete target.volatiles['lockedmove']; } }, - onEnd: function (target) { + onEnd(target) { target.addVolatile('confusion'); }, - onLockMove: function (pokemon) { - return pokemon.lastMove; + onLockMove(pokemon) { + // @ts-ignore + return pokemon.lastMove.id; }, }, confusion: { // this is a volatile status - onStart: function (target, source, sourceEffect) { + name: 'confusion', + id: 'confusion', + num: 0, + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.id === 'lockedmove') { this.add('-start', target, 'confusion', '[fatigue]'); } else { @@ -57,16 +70,18 @@ exports.BattleStatuses = { } this.effectData.time = this.random(3, 4); }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'confusion'); }, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { pokemon.volatiles.confusion.time--; if (!pokemon.volatiles.confusion.time) { pokemon.removeVolatile('confusion'); return; } - this.directDamage(this.getDamage(pokemon, pokemon, 30)); + let damage = this.getDamage(pokemon, pokemon, 40); + if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); + this.directDamage(damage); }, }, @@ -74,7 +89,7 @@ exports.BattleStatuses = { raindance: { inherit: true, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.id === 'scald' || move.id === 'steameruption') { return; } @@ -90,7 +105,7 @@ exports.BattleStatuses = { }, sunnyday: { inherit: true, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.id === 'scald' || move.id === 'steameruption') { return; } @@ -108,15 +123,18 @@ exports.BattleStatuses = { // intrinsics! bidestall: { + name: 'bidestall', + id: 'bidestall', + num: 0, duration: 3, }, unown: { // Unown: Shadow Tag - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'shadowtag'; pokemon.baseAbility = 'shadowtag'; @@ -127,10 +145,10 @@ exports.BattleStatuses = { }, bronzong: { // Bronzong: Heatproof - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'heatproof'; pokemon.baseAbility = 'heatproof'; @@ -139,10 +157,10 @@ exports.BattleStatuses = { }, weezing: { // Weezing: Aftermath - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'aftermath'; pokemon.baseAbility = 'aftermath'; @@ -151,10 +169,10 @@ exports.BattleStatuses = { }, flygon: { // Flygon: Compoundeyes - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'compoundeyes'; pokemon.baseAbility = 'compoundeyes'; @@ -163,10 +181,10 @@ exports.BattleStatuses = { }, eelektross: { // Eelektross: Poison Heal - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'poisonheal'; pokemon.baseAbility = 'poisonheal'; @@ -175,10 +193,10 @@ exports.BattleStatuses = { }, claydol: { // Claydol: Filter - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'filter'; pokemon.baseAbility = 'filter'; @@ -187,10 +205,10 @@ exports.BattleStatuses = { }, gengar: { // Gengar: Cursed Body - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (pokemon.template.id !== 'gengarmega' && type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'cursedbody'; pokemon.baseAbility = 'cursedbody'; @@ -199,10 +217,10 @@ exports.BattleStatuses = { }, mismagius: { // Mismagius: Cursed Body - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'cursedbody'; pokemon.baseAbility = 'cursedbody'; @@ -211,10 +229,10 @@ exports.BattleStatuses = { }, mesprit: { // Mesprit: Serene Grace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'serenegrace'; pokemon.baseAbility = 'serenegrace'; @@ -223,10 +241,10 @@ exports.BattleStatuses = { }, uxie: { // Uxie: Synchronize - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'synchronize'; pokemon.baseAbility = 'synchronize'; @@ -235,10 +253,10 @@ exports.BattleStatuses = { }, azelf: { // Azelf: Steadfast - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'steadfast'; pokemon.baseAbility = 'steadfast'; @@ -247,10 +265,10 @@ exports.BattleStatuses = { }, hydreigon: { // Hydreigon: Sheer Force - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'sheerforce'; pokemon.baseAbility = 'sheerforce'; @@ -259,10 +277,10 @@ exports.BattleStatuses = { }, rotom: { // All Rotoms: Trace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'trace'; pokemon.baseAbility = 'trace'; @@ -271,10 +289,10 @@ exports.BattleStatuses = { }, rotomheat: { // All Rotoms: Trace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'trace'; pokemon.baseAbility = 'trace'; @@ -283,10 +301,10 @@ exports.BattleStatuses = { }, rotomwash: { // All Rotoms: Trace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'trace'; pokemon.baseAbility = 'trace'; @@ -295,10 +313,10 @@ exports.BattleStatuses = { }, rotomfan: { // All Rotoms: Trace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'trace'; pokemon.baseAbility = 'trace'; @@ -307,10 +325,10 @@ exports.BattleStatuses = { }, rotomfrost: { // All Rotoms: Trace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'trace'; pokemon.baseAbility = 'trace'; @@ -319,10 +337,10 @@ exports.BattleStatuses = { }, rotommow: { // All Rotoms: Trace - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'trace'; pokemon.baseAbility = 'trace'; @@ -331,10 +349,12 @@ exports.BattleStatuses = { }, cryogonal: { // Cryogonal: infinite hail, Ice Body - onModifyMove: function (move) { + onModifyMove(move) { if (move.id === 'hail') { + /**@type {string} */ + // @ts-ignore let weather = move.weather; - move.weather = null; + move.weather = ''; move.onHit = function (target, source) { this.setWeather(weather, source, this.getAbility('snowwarning')); this.weatherData.duration = 0; @@ -342,10 +362,10 @@ exports.BattleStatuses = { move.target = 'self'; } }, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'Ground' && (!this.suppressingAttackEvents() || this.activePokemon === pokemon)) return false; }, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.ability === 'levitate') { pokemon.ability = 'icebody'; pokemon.baseAbility = 'icebody'; @@ -354,10 +374,12 @@ exports.BattleStatuses = { }, probopass: { // Probopass: infinite sand - onModifyMove: function (move) { + onModifyMove(move) { if (move.id === 'sandstorm') { + /**@type {string} */ + // @ts-ignore let weather = move.weather; - move.weather = null; + move.weather = ''; move.onHit = function (target, source) { this.setWeather(weather, source, this.getAbility('sandstream')); this.weatherData.duration = 0; @@ -368,10 +390,12 @@ exports.BattleStatuses = { }, phione: { // Phione: infinite rain - onModifyMove: function (move) { + onModifyMove(move) { if (move.id === 'raindance') { + /**@type {string} */ + // @ts-ignore let weather = move.weather; - move.weather = null; + move.weather = ''; move.onHit = function (target, source) { this.setWeather(weather, source, this.getAbility('drizzle')); this.weatherData.duration = 0; @@ -381,3 +405,5 @@ exports.BattleStatuses = { }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/data/mods/letsgo/formats-data.js b/data/mods/letsgo/formats-data.js new file mode 100644 index 0000000000000..c2de91aa9681c --- /dev/null +++ b/data/mods/letsgo/formats-data.js @@ -0,0 +1,1053 @@ +'use strict'; + +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { + bulbasaur: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 12, "shiny": 1, "ivs": {hp: 31, atk: 25, def: 30, spa: 25, spd: 30, spe: 25}, "moves": ["leechseed", "vinewhip", "growl", "tackle"], "pokeball": "pokeball"}, + ], + tier: "LC", + }, + ivysaur: { + inherit: true, + tier: "NFE", + }, + venusaur: { + inherit: true, + randomBattleMoves: [], + tier: "OU", + doublesTier: "DOU", + }, + venusaurmega: { + inherit: true, + randomBattleMoves: ["leechseed", "sludgebomb", "megadrain", "sleeppowder", "earthquake"], + tier: "OU", + doublesTier: "DOU", + }, + charmander: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 14, "shiny": 1, "ivs": {hp: 25, atk: 30, def: 25, spa: 30, spd: 25, spe: 31}, "moves": ["ember", "smokescreen", "growl", "scratch"], "pokeball": "pokeball"}, + ], + tier: "LC", + }, + charmeleon: { + inherit: true, + tier: "NFE", + }, + charizard: { + inherit: true, + randomBattleMoves: [], + tier: "OU", + doublesTier: "DOU", + }, + charizardmegax: { + inherit: true, + randomBattleMoves: ["roost", "flareblitz", "outrage", "earthquake", "willowisp"], + tier: "OU", + doublesTier: "DOU", + }, + charizardmegay: { + inherit: true, + randomBattleMoves: ["airslash", "roost", "dragonpulse", "flamethrower", "fireblast"], + tier: "OU", + doublesTier: "DOU", + }, + squirtle: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 16, "shiny": 1, "ivs": {hp: 25, atk: 25, def: 30, spa: 31, spd: 30, spe: 25}, "moves": ["withdraw", "bubble", "tailwhip", "tackle"], "pokeball": "pokeball"}, + ], + tier: "LC", + }, + wartortle: { + inherit: true, + tier: "NFE", + }, + blastoise: { + inherit: true, + randomBattleMoves: [], + tier: "UU", + doublesTier: "DOU", + }, + blastoisemega: { + inherit: true, + randomBattleMoves: ["icebeam", "scald", "darkpulse", "toxic", "hydropump"], + tier: "UU", + doublesTier: "DOU", + }, + caterpie: { + inherit: true, + tier: "LC", + }, + metapod: { + inherit: true, + tier: "NFE", + }, + butterfree: { + inherit: true, + randomBattleMoves: ["bugbuzz", "quiverdance", "airslash", "sleeppowder"], + tier: "UU", + doublesTier: "DOU", + }, + weedle: { + inherit: true, + tier: "LC", + }, + kakuna: { + inherit: true, + tier: "NFE", + }, + beedrill: { + inherit: true, + randomBattleMoves: [], + tier: "UU", + doublesTier: "DOU", + }, + beedrillmega: { + inherit: true, + randomBattleMoves: ["drillrun", "poisonjab", "uturn", "xscissor", "brickbreak"], + tier: "UU", + doublesTier: "DOU", + }, + pidgey: { + inherit: true, + tier: "LC", + }, + pidgeotto: { + inherit: true, + tier: "NFE", + }, + pidgeot: { + inherit: true, + randomBattleMoves: [], + tier: "UU", + doublesTier: "DOU", + }, + pidgeotmega: { + inherit: true, + randomBattleMoves: ["airslash", "heatwave", "roost", "uturn", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + rattata: { + inherit: true, + tier: "LC", + }, + rattataalola: { + inherit: true, + tier: "LC", + }, + raticate: { + inherit: true, + randomBattleMoves: ["swordsdance", "doubleedge", "suckerpunch", "crunch", "irontail"], + tier: "UU", + doublesTier: "DOU", + }, + raticatealola: { + inherit: true, + randomBattleMoves: ["suckerpunch", "crunch", "swordsdance", "uturn", "doubleedge"], + tier: "UU", + doublesTier: "DOU", + }, + spearow: { + inherit: true, + tier: "LC", + }, + fearow: { + inherit: true, + randomBattleMoves: ["drillpeck", "drillrun", "quickattack", "uturn", "roost"], + tier: "UU", + doublesTier: "DOU", + }, + ekans: { + inherit: true, + tier: "LC", + }, + arbok: { + inherit: true, + randomBattleMoves: ["poisonjab", "earthquake", "glare", "suckerpunch", "crunch"], + tier: "UU", + doublesTier: "DOU", + }, + pikachu: { + inherit: true, + tier: "LC", + }, + pikachustarter: { + inherit: true, + randomBattleMoves: ["zippyzap", "splishysplash", "thunderbolt", "calmmind", "substitute"], + isNonstandard: false, + tier: "UU", + doublesTier: "DOU", + }, + raichu: { + inherit: true, + randomBattleMoves: ["thunderbolt", "fakeout", "brickbreak", "irontail", "substitute"], + tier: "UU", + doublesTier: "DOU", + }, + raichualola: { + inherit: true, + randomBattleMoves: ["psychic", "thunderbolt", "calmmind", "encore", "substitute"], + tier: "UU", + doublesTier: "DOU", + }, + sandshrew: { + inherit: true, + tier: "LC", + }, + sandshrewalola: { + inherit: true, + tier: "LC", + }, + sandslash: { + inherit: true, + randomBattleMoves: ["earthquake", "rockslide", "stealthrock", "swordsdance", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + sandslashalola: { + inherit: true, + randomBattleMoves: ["earthquake", "iceshard", "icepunch", "swordsdance", "stealthrock", "irontail"], + tier: "UU", + doublesTier: "DOU", + }, + nidoranf: { + inherit: true, + tier: "LC", + }, + nidorina: { + inherit: true, + tier: "NFE", + }, + nidoqueen: { + inherit: true, + randomBattleMoves: ["earthquake", "stealthrock", "icebeam", "poisonjab", "dragontail"], + tier: "OU", + doublesTier: "DOU", + }, + nidoranm: { + inherit: true, + tier: "LC", + }, + nidorino: { + inherit: true, + tier: "NFE", + }, + nidoking: { + inherit: true, + randomBattleMoves: ["earthquake", "poisonjab", "stealthrock", "icepunch", "megahorn"], + tier: "OU", + doublesTier: "DOU", + }, + clefairy: { + inherit: true, + tier: "LC", + }, + clefable: { + inherit: true, + randomBattleMoves: ["moonblast", "calmmind", "flamethrower", "stealthrock", "thunderwave", "icebeam"], + tier: "UU", + doublesTier: "DOU", + }, + vulpix: { + inherit: true, + tier: "LC", + }, + vulpixalola: { + inherit: true, + tier: "LC", + }, + ninetales: { + inherit: true, + randomBattleMoves: ["flamethrower", "darkpulse", "nastyplot", "willowisp", "fireblast"], + tier: "UU", + doublesTier: "DOU", + }, + ninetalesalola: { + inherit: true, + randomBattleMoves: ["dazzlinggleam", "icebeam", "nastyplot", "darkpulse", "substitute"], + tier: "UU", + doublesTier: "DOU", + }, + jigglypuff: { + inherit: true, + tier: "LC", + }, + wigglytuff: { + inherit: true, + randomBattleMoves: ["dazzlinggleam", "fireblast", "stealthrock", "icebeam", "bodyslam"], + tier: "UU", + doublesTier: "DOU", + }, + zubat: { + inherit: true, + tier: "LC", + }, + golbat: { + inherit: true, + randomBattleMoves: ["toxic", "roost", "taunt", "sludgebomb", "whirlwind", "airslash", "uturn"], + tier: "UU", + doublesTier: "DOU", + }, + oddish: { + inherit: true, + tier: "LC", + }, + gloom: { + inherit: true, + tier: "NFE", + }, + vileplume: { + inherit: true, + randomBattleMoves: ["sludgebomb", "moonblast", "sleeppowder", "megadrain", "stunspore"], + tier: "UU", + doublesTier: "DOU", + }, + paras: { + inherit: true, + tier: "LC", + }, + parasect: { + inherit: true, + randomBattleMoves: ["leechlife", "spore", "leechseed", "substitute", "brickbreak"], + tier: "UU", + doublesTier: "DOU", + }, + venonat: { + inherit: true, + tier: "LC", + }, + venomoth: { + inherit: true, + randomBattleMoves: ["quiverdance", "bugbuzz", "sleeppowder", "sludgebomb", "psychic"], + tier: "UU", + doublesTier: "DOU", + }, + diglett: { + inherit: true, + tier: "LC", + }, + diglettalola: { + inherit: true, + tier: "LC", + }, + dugtrio: { + inherit: true, + randomBattleMoves: ["earthquake", "rockslide", "suckerpunch", "stealthrock", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + dugtrioalola: { + inherit: true, + randomBattleMoves: ["earthquake", "suckerpunch", "stealthrock", "rockslide", "toxic"], + tier: "OU", + doublesTier: "DOU", + }, + meowth: { + inherit: true, + tier: "LC", + }, + meowthalola: { + inherit: true, + tier: "LC", + }, + persian: { + inherit: true, + randomBattleMoves: ["fakeout", "uturn", "taunt", "headbutt", "playrough"], + eventPokemon: [ + {"generation": 7, "level": 16, "shiny": 1, "ivs": {hp: 30, atk: 30, def: 25, spa: 25, spd: 25, spe: 31}, "moves": ["feint", "payday", "taunt", "fakeout"], "pokeball": "pokeball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + persianalola: { + inherit: true, + randomBattleMoves: ["darkpulse", "thunderbolt", "uturn", "taunt", "nastyplot"], + tier: "UU", + doublesTier: "DOU", + }, + psyduck: { + inherit: true, + tier: "LC", + }, + golduck: { + inherit: true, + randomBattleMoves: ["icebeam", "psychic", "hydropump", "scald", "calmmind"], + tier: "UU", + doublesTier: "DOU", + }, + mankey: { + inherit: true, + tier: "LC", + }, + primeape: { + inherit: true, + randomBattleMoves: ["uturn", "brickbreak", "earthquake", "bulkup", "rockslide"], + tier: "UU", + doublesTier: "DOU", + }, + growlithe: { + inherit: true, + tier: "LC", + }, + arcanine: { + inherit: true, + randomBattleMoves: ["flareblitz", "willowisp", "crunch", "playrough", "superpower"], + eventPokemon: [ + {"generation": 7, "level": 16, "shiny": 1, "ivs": {hp: 25, atk: 30, def: 25, spa: 30, spd: 25, spe: 31}, "moves": ["roar", "leer", "ember", "doubleedge"], "pokeball": "pokeball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + poliwag: { + inherit: true, + tier: "LC", + }, + poliwhirl: { + inherit: true, + tier: "NFE", + }, + poliwrath: { + inherit: true, + randomBattleMoves: ["waterfall", "bulkup", "superpower", "icepunch", "brickbreak", "earthquake"], + tier: "OU", + doublesTier: "DOU", + }, + abra: { + inherit: true, + tier: "LC", + }, + kadabra: { + inherit: true, + tier: "NFE", + }, + alakazam: { + inherit: true, + randomBattleMoves: [], + tier: "OU", + doublesTier: "DOU", + }, + alakazammega: { + inherit: true, + randomBattleMoves: ["psychic", "shadowball", "calmmind", "dazzlinggleam", "recover"], + tier: "OU", + doublesTier: "DOU", + }, + machop: { + inherit: true, + tier: "LC", + }, + machoke: { + inherit: true, + tier: "NFE", + }, + machamp: { + inherit: true, + randomBattleMoves: ["superpower", "earthquake", "icepunch", "bulkup", "rockslide", "brickbreak"], + tier: "UU", + doublesTier: "DOU", + }, + bellsprout: { + inherit: true, + tier: "LC", + }, + weepinbell: { + inherit: true, + tier: "NFE", + }, + victreebel: { + inherit: true, + randomBattleMoves: ["powerwhip", "suckerpunch", "poisonjab", "swordsdance", "sleeppowder"], + tier: "UU", + doublesTier: "DOU", + }, + tentacool: { + inherit: true, + tier: "LC", + }, + tentacruel: { + inherit: true, + randomBattleMoves: ["sludgebomb", "scald", "icebeam", "haze"], + tier: "UU", + doublesTier: "DOU", + }, + geodude: { + inherit: true, + tier: "LC", + }, + geodudealola: { + inherit: true, + tier: "LC", + }, + graveler: { + inherit: true, + tier: "NFE", + }, + graveleralola: { + inherit: true, + tier: "NFE", + }, + golem: { + inherit: true, + randomBattleMoves: ["earthquake", "rockslide", "stealthrock", "explosion", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + golemalola: { + inherit: true, + randomBattleMoves: ["thunderpunch", "rockslide", "earthquake", "stealthrock", "explosion"], + tier: "UU", + doublesTier: "DOU", + }, + ponyta: { + inherit: true, + tier: "LC", + }, + rapidash: { + inherit: true, + randomBattleMoves: ["flareblitz", "drillrun", "megahorn", "willowisp", "irontail"], + tier: "UU", + doublesTier: "DOU", + }, + slowpoke: { + inherit: true, + tier: "LC", + }, + slowbro: { + inherit: true, + randomBattleMoves: [], + tier: "UU", + doublesTier: "DOU", + }, + slowbromega: { + inherit: true, + randomBattleMoves: ["scald", "psychic", "calmmind", "icebeam", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + magnemite: { + inherit: true, + tier: "LC", + }, + magneton: { + inherit: true, + randomBattleMoves: ["thunderbolt", "flashcannon", "thunderwave", "lightscreen", "reflect"], + tier: "UU", + doublesTier: "DOU", + }, + farfetchd: { + inherit: true, + randomBattleMoves: ["swordsdance", "quickattack", "fly", "razorleaf", "poisonjab"], + tier: "UU", + doublesTier: "DOU", + }, + doduo: { + inherit: true, + tier: "LC", + }, + dodrio: { + inherit: true, + randomBattleMoves: ["drillpeck", "jumpkick", "swordsdance", "quickattack", "roost"], + tier: "UU", + doublesTier: "DOU", + }, + seel: { + inherit: true, + tier: "LC", + }, + dewgong: { + inherit: true, + randomBattleMoves: ["icebeam", "aquajet", "iceshard", "surf", "megahorn"], + tier: "UU", + doublesTier: "DOU", + }, + grimer: { + inherit: true, + tier: "LC", + }, + grimeralola: { + inherit: true, + tier: "LC", + }, + muk: { + inherit: true, + randomBattleMoves: ["poisonjab", "firepunch", "brickbreak", "toxic", "protect"], + tier: "UU", + doublesTier: "DOU", + }, + mukalola: { + inherit: true, + randomBattleMoves: ["crunch", "poisonjab", "toxic", "firepunch", "megadrain"], + tier: "OU", + doublesTier: "DOU", + }, + shellder: { + inherit: true, + tier: "LC", + }, + cloyster: { + inherit: true, + randomBattleMoves: ["shellsmash", "icebeam", "hydropump", "surf", "iceshard"], + tier: "OU", + doublesTier: "DOU", + }, + gastly: { + inherit: true, + tier: "LC", + }, + haunter: { + inherit: true, + tier: "NFE", + }, + gengar: { + inherit: true, + randomBattleMoves: [], + tier: "OU", + doublesTier: "DOU", + }, + gengarmega: { + inherit: true, + randomBattleMoves: ["shadowball", "sludgebomb", "thunderbolt", "willowisp", "substitute", "dazzlinggleam"], + tier: "OU", + doublesTier: "DOU", + }, + onix: { + inherit: true, + randomBattleMoves: ["stealthrock", "rockslide", "earthquake", "toxic", "dragontail"], + tier: "UU", + doublesTier: "DOU", + }, + drowzee: { + inherit: true, + tier: "LC", + }, + hypno: { + inherit: true, + randomBattleMoves: ["psychic", "calmmind", "dazzlinggleam", "shadowball", "thunderwave"], + tier: "UU", + doublesTier: "DOU", + }, + krabby: { + inherit: true, + tier: "LC", + }, + kingler: { + inherit: true, + randomBattleMoves: ["crabhammer", "agility", "rockslide", "xscissor", "superpower"], + tier: "UU", + doublesTier: "DOU", + }, + voltorb: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 42, "shiny": 1, "perfectIVs": 3, "moves": ["mirrorcoat", "thunderbolt", "swift", "selfdestruct"]}, + ], + tier: "LC", + }, + electrode: { + inherit: true, + randomBattleMoves: ["thunderbolt", "taunt", "thunderwave", "explosion", "reflect", "lightscreen"], + eventPokemon: [ + {"generation": 7, "level": 42, "shiny": 1, "perfectIVs": 3, "moves": ["thunderbolt", "screech", "selfdestruct", "swift"]}, + ], + tier: "UU", + doublesTier: "DOU", + }, + exeggcute: { + inherit: true, + tier: "LC", + }, + exeggutor: { + inherit: true, + randomBattleMoves: ["psychic", "megadrain", "sleeppowder", "leechseed", "sludgebomb"], + tier: "UU", + doublesTier: "DOU", + }, + exeggutoralola: { + inherit: true, + randomBattleMoves: ["megadrain", "dragonpulse", "flamethrower", "stunspore", "earthquake"], + tier: "OU", + doublesTier: "DOU", + }, + cubone: { + inherit: true, + tier: "LC", + }, + marowak: { + inherit: true, + randomBattleMoves: ["earthquake", "stealthrock", "swordsdance", "bonemerang", "rockslide", "doubleedge"], + tier: "UU", + doublesTier: "DOU", + }, + marowakalola: { + inherit: true, + randomBattleMoves: ["earthquake", "flareblitz", "willowisp", "bonemerang", "swordsdance", "stealthrock", "rockslide"], + tier: "UU", + doublesTier: "DOU", + }, + hitmonlee: { + inherit: true, + randomBattleMoves: ["highjumpkick", "earthquake", "bulkup", "rockslide", "poisonjab"], + eventPokemon: [ + {"generation": 7, "level": 30, "shiny": 1, "ivs": {hp: 25, atk: 30, def: 25, spa: 25, spd: 30, spe: 31}, "moves": ["jumpkick", "facade", "brickbreak", "feint"], "pokeball": "pokeball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + hitmonchan: { + inherit: true, + randomBattleMoves: ["icepunch", "thunderpunch", "brickbreak", "firepunch", "earthquake", "bulkup"], + eventPokemon: [ + {"generation": 7, "level": 30, "shiny": 1, "ivs": {hp: 25, atk: 31, def: 30, spa: 25, spd: 30, spe: 25}, "moves": ["firepunch", "icepunch", "thunderpunch", "dizzypunch"], "pokeball": "pokeball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + lickitung: { + inherit: true, + randomBattleMoves: ["facade", "fireblast", "icebeam", "shadowball", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + koffing: { + inherit: true, + tier: "LC", + }, + weezing: { + inherit: true, + randomBattleMoves: ["willowisp", "sludgebomb", "toxic", "flamethrower", "fireblast", "explosion"], + tier: "UU", + doublesTier: "DOU", + }, + rhyhorn: { + inherit: true, + tier: "LC", + }, + rhydon: { + inherit: true, + randomBattleMoves: ["earthquake", "rockslide", "stealthrock", "toxic", "megahorn"], + tier: "OU", + doublesTier: "DOU", + }, + chansey: { + inherit: true, + randomBattleMoves: ["softboiled", "seismictoss", "toxic", "stealthrock", "teleport"], + eventPokemon: [ + {"generation": 7, "level": 1, "gender": "F", "nature": "Mild", "moves": ["celebrate", "pound"], "pokeball": "cherishball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + tangela: { + inherit: true, + randomBattleMoves: ["leechseed", "megadrain", "sleeppowder", "protect", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + kangaskhan: { + inherit: true, + randomBattleMoves: [], + tier: "UU", + doublesTier: "DOU", + }, + kangaskhanmega: { + inherit: true, + randomBattleMoves: ["fakeout", "earthquake", "suckerpunch", "facade", "brickbreak"], + tier: "UU", + doublesTier: "DOU", + }, + horsea: { + inherit: true, + tier: "LC", + }, + seadra: { + inherit: true, + randomBattleMoves: ["icebeam", "scald", "dragonpulse", "agility", "toxic", "hydropump"], + tier: "UU", + doublesTier: "DOU", + }, + goldeen: { + inherit: true, + tier: "LC", + }, + seaking: { + inherit: true, + randomBattleMoves: ["scald", "poisonjab", "megahorn", "drillrun", "icebeam"], + tier: "UU", + doublesTier: "DOU", + }, + staryu: { + inherit: true, + tier: "LC", + }, + starmie: { + inherit: true, + randomBattleMoves: ["psychic", "thunderbolt", "icebeam", "recover", "scald", "hydropump"], + tier: "OU", + doublesTier: "DOU", + }, + mrmime: { + inherit: true, + randomBattleMoves: ["psychic", "dazzlinggleam", "calmmind", "shadowball", "encore"], + tier: "UU", + doublesTier: "DOU", + }, + scyther: { + inherit: true, + randomBattleMoves: ["swordsdance", "xscissor", "wingattack", "brickbreak", "uturn"], + tier: "UU", + doublesTier: "DOU", + }, + jynx: { + inherit: true, + randomBattleMoves: ["icebeam", "psychic", "lovelykiss", "calmmind", "shadowball"], + tier: "UU", + doublesTier: "DOU", + }, + electabuzz: { + inherit: true, + randomBattleMoves: ["thunderbolt", "icepunch", "psychic", "thunderwave", "brickbreak"], + tier: "UU", + doublesTier: "DOU", + }, + magmar: { + inherit: true, + randomBattleMoves: ["psychic", "flamethrower", "fireblast", "willowisp", "clearsmog", "thunderpunch"], + tier: "UU", + doublesTier: "DOU", + }, + pinsir: { + inherit: true, + randomBattleMoves: [], + tier: "UU", + doublesTier: "DOU", + }, + pinsirmega: { + inherit: true, + randomBattleMoves: ["xscissor", "earthquake", "swordsdance", "rockslide", "superpower"], + tier: "UU", + doublesTier: "DOU", + }, + tauros: { + inherit: true, + randomBattleMoves: ["earthquake", "doubleedge", "rockslide", "fireblast", "toxic"], + tier: "UU", + doublesTier: "DOU", + }, + magikarp: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 5, "shiny": 1, "ivs": {hp: 30, atk: 31, def: 25, spa: 25, spd: 25, spe: 31}, "moves": ["splash"], "pokeball": "pokeball"}, + ], + tier: "LC", + }, + gyarados: { + inherit: true, + randomBattleMoves: [], + tier: "OU", + doublesTier: "DOU", + }, + gyaradosmega: { + inherit: true, + randomBattleMoves: ["waterfall", "crunch", "earthquake", "thunderwave", "substitute"], + tier: "OU", + doublesTier: "DOU", + }, + lapras: { + inherit: true, + randomBattleMoves: ["icebeam", "thunderbolt", "surf", "hydropump", "toxic"], + eventPokemon: [ + {"generation": 7, "level": 34, "shiny": 1, "ivs": {hp: 31, atk: 25, def: 25, spa: 30, spd: 30, spe: 25}, "moves": ["bodyslam", "confuseray", "iceshard", "mist"], "pokeball": "pokeball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + ditto: { + inherit: true, + randomBattleMoves: ["transform"], + tier: "UU", + doublesTier: "DOU", + }, + eevee: { + inherit: true, + tier: "LC", + }, + eeveestarter: { + inherit: true, + randomBattleMoves: ["sparklyswirl", "sizzlyslide", "sappyseed", "protect", "buzzybuzz", "bouncybubble"], + isNonstandard: false, + tier: "OU", + doublesTier: "DOU", + }, + vaporeon: { + inherit: true, + randomBattleMoves: ["scald", "toxic", "icebeam", "protect", "rest"], + tier: "UU", + doublesTier: "DOU", + }, + jolteon: { + inherit: true, + randomBattleMoves: ["thunderbolt", "shadowball", "thunderwave", "toxic", "substitute"], + tier: "UU", + doublesTier: "DOU", + }, + flareon: { + inherit: true, + randomBattleMoves: ["flareblitz", "superpower", "quickattack", "toxic", "irontail"], + tier: "UU", + doublesTier: "DOU", + }, + porygon: { + inherit: true, + randomBattleMoves: ["triattack", "recover", "icebeam", "toxic", "psychic"], + eventPokemon: [ + {"generation": 7, "level": 34, "shiny": 1, "ivs": {hp: 25, atk: 25, def: 30, spa: 31, spd: 30, spe: 25}, "moves": ["conversion", "thunderwave", "triattack", "barrier"], "pokeball": "pokeball"}, + ], + tier: "UU", + doublesTier: "DOU", + }, + omanyte: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 44, "shiny": 1, "perfectIVs": 3, "moves": ["hydropump", "rockslide", "protect", "rockthrow"], "pokeball": "pokeball"}, + ], + tier: "LC", + }, + omastar: { + inherit: true, + randomBattleMoves: ["shellsmash", "icebeam", "hydropump", "scald", "rockslide"], + tier: "UU", + doublesTier: "DOU", + }, + kabuto: { + inherit: true, + eventPokemon: [ + {"generation": 7, "level": 44, "shiny": 1, "perfectIVs": 3, "moves": ["rockslide", "sandattack", "rockthrow", "aquajet"], "pokeball": "pokeball"}, + ], + tier: "LC", + }, + kabutops: { + inherit: true, + randomBattleMoves: ["aquajet", "swordsdance", "rockslide", "waterfall", "superpower", "stealthrock"], + tier: "UU", + doublesTier: "DOU", + }, + aerodactyl: { + inherit: true, + randomBattleMoves: [], + eventPokemon: [ + {"generation": 7, "level": 44, "shiny": 1, "perfectIVs": 3, "moves": ["rockslide", "crunch", "rockthrow", "agility"], "pokeball": "pokeball"}, + ], + tier: "OU", + doublesTier: "DOU", + }, + aerodactylmega: { + inherit: true, + randomBattleMoves: ["rockslide", "earthquake", "stealthrock", "taunt", "crunch", "roost"], + tier: "OU", + doublesTier: "DOU", + }, + snorlax: { + inherit: true, + randomBattleMoves: ["earthquake", "bodyslam", "rest", "crunch", "toxic"], + eventPokemon: [ + {"generation": 7, "level": 34, "shiny": 1, "perfectIVs": 3, "moves": ["rest", "headbutt", "lick", "yawn"]}, + {"generation": 7, "level": 34, "shiny": 1, "perfectIVs": 3, "moves": ["rest", "headbutt", "lick", "yawn"]}, + ], + tier: "OU", + doublesTier: "DOU", + }, + articuno: { + inherit: true, + randomBattleMoves: ["icebeam", "roost", "toxic", "uturn", "substitute"], + eventPokemon: [ + {"generation": 7, "level": 50, "shiny": 1, "perfectIVs": 3, "moves": ["reflect", "agility", "icebeam", "mirrorcoat"]}, + ], + eventOnly: false, + tier: "UU", + doublesTier: "DOU", + }, + zapdos: { + inherit: true, + randomBattleMoves: ["thunderbolt", "roost", "uturn", "toxic", "drillpeck"], + eventPokemon: [ + {"generation": 7, "level": 50, "shiny": 1, "perfectIVs": 3, "moves": ["lightscreen", "agility", "thunderbolt", "drillpeck"]}, + ], + eventOnly: false, + tier: "OU", + doublesTier: "DOU", + }, + moltres: { + inherit: true, + randomBattleMoves: ["roost", "airslash", "flamethrower", "fireblast", "willowisp", "uturn"], + eventPokemon: [ + {"generation": 7, "level": 50, "shiny": 1, "perfectIVs": 3, "moves": ["heatwave", "agility", "flamethrower", "airslash"]}, + ], + eventOnly: false, + tier: "UU", + doublesTier: "DOU", + }, + dratini: { + inherit: true, + tier: "LC", + }, + dragonair: { + inherit: true, + tier: "NFE", + }, + dragonite: { + inherit: true, + randomBattleMoves: ["outrage", "earthquake", "agility", "roost", "fireblast"], + tier: "OU", + doublesTier: "DOU", + }, + mewtwo: { + inherit: true, + randomBattleMoves: [], + eventPokemon: [ + {"generation": 7, "level": 70, "shiny": 1, "perfectIVs": 3, "moves": ["psychic", "recover", "amnesia", "swift"]}, + ], + tier: "Uber", + doublesTier: "DUber", + }, + mewtwomegax: { + inherit: true, + randomBattleMoves: ["bulkup", "substitute", "brickbreak", "earthquake", "icepunch"], + tier: "Uber", + doublesTier: "DUber", + }, + mewtwomegay: { + inherit: true, + randomBattleMoves: ["calmmind", "psychic", "fireblast", "icebeam", "shadowball", "recover"], + tier: "Uber", + doublesTier: "DUber", + }, + mew: { + inherit: true, + randomBattleMoves: ["roost", "psychic", "willowisp", "flamethrower", "stealthrock", "nastyplot"], + eventPokemon: [ + {"generation": 7, "level": 1, "perfectIVs": 3, "moves": ["pound"], "pokeball": "pokeball"}, + ], + tier: "OU", + doublesTier: "DOU", + }, + meltan: { + inherit: true, + randomBattleMoves: ["flashcannon", "thunderbolt", "toxic", "protect"], + isNonstandard: false, + tier: "UU", + doublesTier: "DOU", + }, + melmetal: { + inherit: true, + randomBattleMoves: ["doubleironbash", "earthquake", "rockslide", "icepunch", "thunderwave"], + isNonstandard: false, + tier: "OU", + doublesTier: "DOU", + }, +}; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/mods/letsgo/learnsets.js b/data/mods/letsgo/learnsets.js new file mode 100644 index 0000000000000..aa79de8068d3b --- /dev/null +++ b/data/mods/letsgo/learnsets.js @@ -0,0 +1,4985 @@ +'use strict'; + +/**@type {{[k: string]: {learnset: {[k: string]: MoveSource[]}}}} */ +let BattleLearnsets = { + bulbasaur: {learnset: { + doubleedge: ["7L32"], + facade: ["7M"], + growl: ["7L1", "7S0"], + growth: ["7L27"], + headbutt: ["7M"], + leechseed: ["7L9", "7S0"], + lightscreen: ["7M"], + megadrain: ["7M"], + outrage: ["7M"], + poisonpowder: ["7L14"], + protect: ["7M"], + razorleaf: ["7L23"], + reflect: ["7M"], + rest: ["7M"], + sleeppowder: ["7L14"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + tackle: ["7L1", "7S0"], + takedown: ["7L18"], + toxic: ["7M"], + vinewhip: ["7L5", "7S0"], + }}, + ivysaur: {learnset: { + doubleedge: ["7L48"], + facade: ["7M"], + growl: ["7L1"], + growth: ["7L39"], + headbutt: ["7M"], + leechseed: ["7L9", "7L1"], + lightscreen: ["7M"], + megadrain: ["7M"], + outrage: ["7M"], + poisonpowder: ["7L14"], + protect: ["7M"], + razorleaf: ["7L31"], + reflect: ["7M"], + rest: ["7M"], + sleeppowder: ["7L14"], + sludgebomb: ["7M"], + solarbeam: ["7M", "7L56"], + substitute: ["7M"], + tackle: ["7L1"], + takedown: ["7L22"], + toxic: ["7M"], + vinewhip: ["7L5", "7L1"], + }}, + venusaur: {learnset: { + amnesia: ["7L1"], + doubleedge: ["7L58"], + earthquake: ["7M"], + facade: ["7M"], + growl: ["7L1"], + growth: ["7L44"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leechseed: ["7L9", "7L1"], + lightscreen: ["7M"], + megadrain: ["7M"], + outrage: ["7M"], + petaldance: ["7L1", "7L0"], + poisonpowder: ["7L14"], + powerwhip: ["7L1"], + protect: ["7M"], + razorleaf: ["7L31"], + reflect: ["7M"], + rest: ["7M"], + sleeppowder: ["7L14"], + sludgebomb: ["7M"], + solarbeam: ["7M", "7L71"], + substitute: ["7M"], + tackle: ["7L1"], + takedown: ["7L22"], + toxic: ["7M"], + vinewhip: ["7L5", "7L1"], + }}, + charmander: {learnset: { + brickbreak: ["7M"], + dig: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L22"], + ember: ["7L13", "7S0"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + firespin: ["7L27"], + flamethrower: ["7M", "7L36"], + furyswipes: ["7L18"], + growl: ["7L4", "7S0"], + headbutt: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1", "7S0"], + seismictoss: ["7M"], + slash: ["7L31"], + smokescreen: ["7L9", "7S0"], + substitute: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + charmeleon: {learnset: { + brickbreak: ["7M"], + dig: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L26"], + ember: ["7L13", "7L1"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + firespin: ["7L33"], + flamethrower: ["7M", "7L46"], + furyswipes: ["7L20"], + growl: ["7L4", "7L1"], + headbutt: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1"], + seismictoss: ["7M"], + slash: ["7L39"], + smokescreen: ["7L9", "7L1"], + substitute: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + charizard: {learnset: { + airslash: ["7L62"], + brickbreak: ["7M"], + counter: ["7L1"], + crunch: ["7L1"], + dig: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L26"], + dragontail: ["7M"], + earthquake: ["7M"], + ember: ["7L13", "7L1"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + firespin: ["7L33"], + flamethrower: ["7M", "7L54"], + flareblitz: ["7L75"], + fly: ["7M"], + furyswipes: ["7L20"], + growl: ["7L4", "7L1"], + headbutt: ["7M"], + heatwave: ["7L1"], + hyperbeam: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + roost: ["7M"], + scratch: ["7L1"], + seismictoss: ["7M"], + slash: ["7L43"], + smokescreen: ["7L9", "7L1"], + solarbeam: ["7M"], + substitute: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + willowisp: ["7M"], + wingattack: ["7L1", "7L0"], + }}, + squirtle: {learnset: { + bite: ["7L23"], + blizzard: ["7M"], + brickbreak: ["7M"], + bubble: ["7L9", "7S0"], + bubblebeam: ["7L27"], + dig: ["7M"], + dragonpulse: ["7M"], + facade: ["7M"], + headbutt: ["7M", "7L36"], + hydropump: ["7L41"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + protect: ["7M", "7L32"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scald: ["7M"], + seismictoss: ["7M"], + skullbash: ["7L45"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1", "7S0"], + tailwhip: ["7L5", "7S0"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L18"], + withdraw: ["7L14", "7S0"], + }}, + wartortle: {learnset: { + bite: ["7L27"], + blizzard: ["7M"], + brickbreak: ["7M"], + bubble: ["7L9", "7L1"], + bubblebeam: ["7L33"], + dig: ["7M"], + dragonpulse: ["7M"], + facade: ["7M"], + headbutt: ["7M", "7L46"], + hydropump: ["7L53"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + protect: ["7M", "7L40"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scald: ["7M"], + seismictoss: ["7M"], + skullbash: ["7L59"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L5", "7L1"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L20"], + withdraw: ["7L14", "7L1"], + }}, + blastoise: {learnset: { + aquajet: ["7L1"], + bite: ["7L27"], + blizzard: ["7M"], + brickbreak: ["7M"], + bubble: ["7L9", "7L1"], + bubblebeam: ["7L33"], + darkpulse: ["7M"], + dig: ["7M"], + dragonpulse: ["7M"], + dragontail: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fakeout: ["7L1"], + flashcannon: ["7M", "7L1"], + headbutt: ["7M", "7L54"], + hydropump: ["7L65"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + protect: ["7M", "7L44"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scald: ["7M"], + seismictoss: ["7M"], + skullbash: ["7L75"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L5", "7L1"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L20"], + withdraw: ["7L14", "7L1"], + }}, + caterpie: {learnset: { + stringshot: ["7L1"], + tackle: ["7L1"], + }}, + metapod: {learnset: { + harden: ["7L1", "7L0"], + }}, + butterfree: {learnset: { + airslash: ["7L28"], + bugbuzz: ["7L31"], + confusion: ["7L1"], + dreameater: ["7M"], + facade: ["7M"], + gust: ["7L1", "7L0"], + headbutt: ["7M"], + hyperbeam: ["7M"], + megadrain: ["7M"], + poisonpowder: ["7L13"], + protect: ["7M"], + psybeam: ["7L16"], + psychic: ["7M"], + quiverdance: ["7L22"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M"], + shadowball: ["7M"], + sleeppowder: ["7L13"], + solarbeam: ["7M"], + stunspore: ["7L13"], + substitute: ["7M"], + supersonic: ["7L19"], + teleport: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + whirlwind: ["7L25"], + }}, + weedle: {learnset: { + poisonsting: ["7L1"], + stringshot: ["7L1"], + }}, + kakuna: {learnset: { + harden: ["7L1", "7L0"], + }}, + beedrill: {learnset: { + agility: ["7L25"], + brickbreak: ["7M"], + drillrun: ["7M"], + facade: ["7M"], + focusenergy: ["7L19"], + furyattack: ["7L16"], + headbutt: ["7M"], + hyperbeam: ["7M"], + megadrain: ["7M"], + outrage: ["7M", "7L31"], + peck: ["7L1"], + pinmissile: ["7L28"], + poisonjab: ["7M", "7L22"], + protect: ["7M"], + rage: ["7L13"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + toxic: ["7M"], + twineedle: ["7L1", "7L0"], + uturn: ["7M"], + xscissor: ["7M"], + }}, + pidgey: {learnset: { + agility: ["7L23"], + airslash: ["7L27"], + facade: ["7M"], + fly: ["7M"], + gust: ["7L5"], + headbutt: ["7M"], + mirrormove: ["7L9"], + protect: ["7M"], + quickattack: ["7L11"], + razorwind: ["7L29"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M", "7L17"], + sandattack: ["7L3"], + substitute: ["7M"], + tackle: ["7L1"], + toxic: ["7M"], + uturn: ["7M"], + whirlwind: ["7L21"], + wingattack: ["7L15"], + }}, + pidgeotto: {learnset: { + agility: ["7L31"], + airslash: ["7L39"], + facade: ["7M"], + fly: ["7M"], + gust: ["7L5", "7L1"], + headbutt: ["7M"], + mirrormove: ["7L11"], + protect: ["7M"], + quickattack: ["7L9", "7L1"], + razorwind: ["7L45"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M", "7L17"], + sandattack: ["7L3", "7L1"], + substitute: ["7M"], + tackle: ["7L1"], + toxic: ["7M"], + uturn: ["7M"], + whirlwind: ["7L25"], + wingattack: ["7L15"], + }}, + pidgeot: {learnset: { + agility: ["7L31"], + airslash: ["7L43"], + facade: ["7M"], + fly: ["7M"], + gust: ["7L5", "7L1"], + headbutt: ["7M"], + heatwave: ["7L1"], + hyperbeam: ["7M"], + mirrormove: ["7L11"], + protect: ["7M"], + quickattack: ["7L9", "7L1"], + razorwind: ["7L53"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M", "7L17"], + sandattack: ["7L3", "7L1"], + skyattack: ["7L1"], + substitute: ["7M"], + tackle: ["7L1"], + toxic: ["7M"], + uturn: ["7M"], + whirlwind: ["7L25"], + wingattack: ["7L15"], + }}, + rattata: {learnset: { + bite: ["7L12"], + blizzard: ["7M"], + crunch: ["7L18"], + dig: ["7M"], + doubleedge: ["7L27"], + facade: ["7M"], + focusenergy: ["7L9"], + headbutt: ["7M"], + hyperfang: ["7L21"], + icebeam: ["7M"], + irontail: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + rest: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L24"], + superfang: ["7L15"], + tackle: ["7L1"], + tailwhip: ["7L3"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + rattataalola: {learnset: { + bite: ["7L12"], + blizzard: ["7M"], + crunch: ["7L18"], + darkpulse: ["7M"], + dig: ["7M"], + doubleedge: ["7L27"], + facade: ["7M"], + focusenergy: ["7L9"], + headbutt: ["7M"], + hyperfang: ["7L21"], + icebeam: ["7M"], + irontail: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + rest: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L24"], + superfang: ["7L15"], + tackle: ["7L1"], + tailwhip: ["7L3"], + taunt: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + raticate: {learnset: { + bite: ["7L12"], + blizzard: ["7M"], + counter: ["7L1"], + crunch: ["7L18"], + dig: ["7M"], + doubleedge: ["7L42"], + facade: ["7M"], + focusenergy: ["7L9", "7L1"], + furyswipes: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hyperfang: ["7L26"], + icebeam: ["7M"], + irontail: ["7M"], + protect: ["7M"], + quickattack: ["7L6", "7L1"], + rest: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L34"], + superfang: ["7L15"], + swordsdance: ["7L1"], + tackle: ["7L1"], + tailwhip: ["7L3", "7L1"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + raticatealola: {learnset: { + bite: ["7L12"], + blizzard: ["7M"], + bulkup: ["7M"], + counter: ["7L1"], + crunch: ["7L18"], + darkpulse: ["7M"], + dig: ["7M"], + doubleedge: ["7L42"], + facade: ["7M"], + focusenergy: ["7L9", "7L1"], + furyswipes: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hyperfang: ["7L26"], + icebeam: ["7M"], + irontail: ["7M"], + protect: ["7M"], + quickattack: ["7L6", "7L1"], + rest: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L34"], + superfang: ["7L15"], + swordsdance: ["7L1"], + tackle: ["7L1"], + tailwhip: ["7L3", "7L1"], + taunt: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + spearow: {learnset: { + agility: ["7L27"], + drillpeck: ["7L32"], + drillrun: ["7M"], + facade: ["7M"], + fly: ["7M"], + focusenergy: ["7L11"], + furyattack: ["7L16"], + growl: ["7L3"], + headbutt: ["7M"], + leer: ["7L8"], + mirrormove: ["7L19"], + peck: ["7L1"], + protect: ["7M"], + rest: ["7M"], + roost: ["7M", "7L24"], + substitute: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + uturn: ["7M"], + }}, + fearow: {learnset: { + agility: ["7L37"], + drillpeck: ["7L47"], + drillrun: ["7M", "7L1"], + facade: ["7M"], + fly: ["7M"], + focusenergy: ["7L11", "7L1"], + furyattack: ["7L16"], + growl: ["7L3", "7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leer: ["7L8", "7L1"], + mirrormove: ["7L19"], + peck: ["7L1"], + protect: ["7M"], + quickattack: ["7L1"], + rest: ["7M"], + roost: ["7M", "7L29"], + skyattack: ["7L1"], + substitute: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + uturn: ["7M"], + }}, + ekans: {learnset: { + acid: ["7L8"], + bite: ["7L12"], + darkpulse: ["7M"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + glare: ["7L20"], + haze: ["7L16"], + headbutt: ["7M"], + irontail: ["7M"], + leer: ["7L4"], + megadrain: ["7M"], + poisonjab: ["7M", "7L24"], + poisonsting: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L32"], + slam: ["7L28"], + sludgebomb: ["7M"], + substitute: ["7M"], + toxic: ["7M", "7L36"], + wrap: ["7L1"], + }}, + arbok: {learnset: { + acid: ["7L9", "7L1"], + bite: ["7L12"], + crunch: ["7L1", "7L0"], + darkpulse: ["7M"], + dig: ["7M"], + dragontail: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + glare: ["7L20"], + haze: ["7L16"], + headbutt: ["7M"], + hyperbeam: ["7M"], + irontail: ["7M"], + leer: ["7L4", "7L1"], + megadrain: ["7M"], + poisonjab: ["7M", "7L28"], + poisonsting: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L44"], + slam: ["7L36"], + sludgebomb: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L1"], + toxic: ["7M", "7L52"], + wrap: ["7L1"], + }}, + pikachu: {learnset: { + agility: ["7L27"], + brickbreak: ["7M"], + calmmind: ["7M"], + dig: ["7M"], + doublekick: ["7L9"], + doubleteam: ["7L12"], + facade: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + irontail: ["7M"], + lightscreen: ["7M", "7L18"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + slam: ["7L24"], + substitute: ["7M"], + tailwhip: ["7L3"], + thunder: ["7M", "7L30"], + thunderbolt: ["7M", "7L21"], + thunderpunch: ["7M"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L15"], + toxic: ["7M"], + }}, + pikachustarter: {learnset: { + agility: ["7L27"], + brickbreak: ["7M"], + calmmind: ["7M"], + dig: ["7M"], + doublekick: ["7L9"], + doubleteam: ["7L12"], + facade: ["7M"], + floatyfall: ["7T"], + growl: ["7L1", "7S0"], + headbutt: ["7M"], + helpinghand: ["7M"], + irontail: ["7M"], + lightscreen: ["7M", "7L18"], + payday: ["7M"], + pikapapow: ["7T"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + slam: ["7L24"], + splishysplash: ["7T"], + substitute: ["7M"], + tailwhip: ["7L3", "7S0"], + thunder: ["7M", "7L30"], + thunderbolt: ["7M", "7L21"], + thunderpunch: ["7M"], + thundershock: ["7L1", "7S0"], + thunderwave: ["7M", "7L15"], + toxic: ["7M"], + zippyzap: ["7T"], + }}, + raichu: {learnset: { + brickbreak: ["7M"], + calmmind: ["7M"], + dig: ["7M"], + encore: ["7L1"], + facade: ["7M"], + fakeout: ["7L1"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L1"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + substitute: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L1", "7L0"], + thundershock: ["7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + raichualola: {learnset: { + brickbreak: ["7M"], + calmmind: ["7M"], + dig: ["7M"], + doubleteam: ["7L1"], + encore: ["7L1"], + facade: ["7M"], + fakeout: ["7L1"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + protect: ["7M"], + psychic: ["7M", "7L1", "7L0"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + substitute: ["7M"], + tailwhip: ["7L1"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thundershock: ["7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + sandshrew: {learnset: { + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M", "7L20"], + earthquake: ["7M", "7L36"], + facade: ["7M"], + furyswipes: ["7L16"], + headbutt: ["7M"], + irontail: ["7M"], + poisonjab: ["7M"], + poisonsting: ["7L4"], + protect: ["7M", "7L24"], + rest: ["7M"], + rockslide: ["7M"], + sandattack: ["7L8"], + scratch: ["7L1"], + seismictoss: ["7M"], + slash: ["7L32"], + stealthrock: ["7M"], + substitute: ["7M"], + swift: ["7L12"], + swordsdance: ["7L28"], + toxic: ["7M"], + xscissor: ["7M"], + }}, + sandshrewalola: {learnset: { + bide: ["7L4"], + blizzard: ["7M", "7L36"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + furyswipes: ["7L20"], + headbutt: ["7M"], + icebeam: ["7M"], + icepunch: ["7M", "7L24"], + iceshard: ["7L8"], + irontail: ["7M"], + mirrorcoat: ["7L16"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1"], + seismictoss: ["7M"], + slash: ["7L32"], + stealthrock: ["7M"], + substitute: ["7M"], + swift: ["7L12"], + swordsdance: ["7L28"], + toxic: ["7M"], + xscissor: ["7M"], + }}, + sandslash: {learnset: { + brickbreak: ["7M"], + counter: ["7L1"], + defensecurl: ["7L1"], + dig: ["7M", "7L20"], + drillrun: ["7M"], + earthquake: ["7M", "7L52"], + facade: ["7M"], + furyswipes: ["7L16"], + headbutt: ["7M"], + hyperbeam: ["7M"], + irontail: ["7M"], + poisonjab: ["7M"], + poisonsting: ["7L4", "7L1"], + protect: ["7M", "7L28"], + rest: ["7M"], + rockslide: ["7M"], + sandattack: ["7L8", "7L1"], + scratch: ["7L1"], + seismictoss: ["7M"], + slash: ["7L44"], + stealthrock: ["7M"], + substitute: ["7M"], + swift: ["7L12"], + swordsdance: ["7L36"], + toxic: ["7M"], + xscissor: ["7M"], + }}, + sandslashalola: {learnset: { + bide: ["7L1"], + blizzard: ["7M"], + brickbreak: ["7M"], + counter: ["7L1"], + defensecurl: ["7L1"], + dig: ["7M"], + drillrun: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + iceshard: ["7L1"], + irontail: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1"], + seismictoss: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + toxic: ["7M"], + xscissor: ["7M"], + }}, + nidoranf: {learnset: { + bite: ["7L12"], + blizzard: ["7M"], + crunch: ["7L24"], + dig: ["7M"], + doublekick: ["7L9"], + facade: ["7M"], + furyswipes: ["7L21"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M", "7L15"], + icebeam: ["7M"], + irontail: ["7M"], + poisonjab: ["7M"], + poisonsting: ["7L6"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + sludgebomb: ["7M"], + substitute: ["7M"], + superfang: ["7L27"], + tailwhip: ["7L3"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M", "7L18"], + }}, + nidorina: {learnset: { + bite: ["7L12"], + blizzard: ["7M"], + crunch: ["7L39"], + dig: ["7M"], + doublekick: ["7L9"], + facade: ["7M"], + furyswipes: ["7L31"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M", "7L15"], + icebeam: ["7M"], + irontail: ["7M"], + poisonjab: ["7M"], + poisonsting: ["7L6", "7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + sludgebomb: ["7M"], + substitute: ["7M"], + superfang: ["7L47"], + tailwhip: ["7L3", "7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M", "7L23"], + }}, + nidoqueen: {learnset: { + blizzard: ["7M"], + bodyslam: ["7L1", "7L0"], + brickbreak: ["7M"], + counter: ["7L1"], + dig: ["7M"], + dragonpulse: ["7M"], + dragontail: ["7M"], + drillrun: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + outrage: ["7M"], + payday: ["7M"], + poisonjab: ["7M"], + poisonsting: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1"], + seismictoss: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + superpower: ["7M", "7L55"], + supersonic: ["7L1"], + surf: ["7M"], + tailwhip: ["7L1"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + nidoranm: {learnset: { + blizzard: ["7M"], + dig: ["7M"], + doublekick: ["7L9"], + drillrun: ["7M"], + facade: ["7M"], + focusenergy: ["7L3"], + furyattack: ["7L21"], + headbutt: ["7M"], + helpinghand: ["7M", "7L15"], + hornattack: ["7L12"], + horndrill: ["7L27"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + peck: ["7L1"], + poisonjab: ["7M", "7L24"], + poisonsting: ["7L6"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M", "7L18"], + }}, + nidorino: {learnset: { + blizzard: ["7M"], + dig: ["7M"], + doublekick: ["7L9"], + drillrun: ["7M"], + facade: ["7M"], + focusenergy: ["7L3", "7L1"], + furyattack: ["7L31"], + headbutt: ["7M"], + helpinghand: ["7M", "7L15"], + hornattack: ["7L12"], + horndrill: ["7L47"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + peck: ["7L1"], + poisonjab: ["7M", "7L39"], + poisonsting: ["7L6", "7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M", "7L23"], + }}, + nidoking: {learnset: { + blizzard: ["7M"], + brickbreak: ["7M"], + counter: ["7L1"], + dig: ["7M"], + dragonpulse: ["7M"], + dragontail: ["7M"], + drillrun: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + megahorn: ["7M", "7L55"], + outrage: ["7M"], + payday: ["7M"], + peck: ["7L1"], + poisonjab: ["7M"], + poisonsting: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + superpower: ["7M"], + supersonic: ["7L1"], + surf: ["7M"], + taunt: ["7M"], + thrash: ["7L1", "7L0"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + clefairy: {learnset: { + amnesia: ["7L16"], + blizzard: ["7M"], + bodyslam: ["7L24"], + brickbreak: ["7M"], + calmmind: ["7M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L4"], + dig: ["7M"], + doubleslap: ["7L12"], + dreameater: ["7M"], + encore: ["7L22"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + metronome: ["7L18"], + minimize: ["7L10"], + moonblast: ["7L28"], + playrough: ["7M"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + sing: ["7L6"], + solarbeam: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + clefable: {learnset: { + blizzard: ["7M"], + brickbreak: ["7M"], + calmmind: ["7M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + metronome: ["7L1", "7L0"], + playrough: ["7M"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + sing: ["7L1"], + solarbeam: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + vulpix: {learnset: { + confuseray: ["7L14"], + darkpulse: ["7M"], + dig: ["7M"], + ember: ["7L7"], + facade: ["7M"], + fireblast: ["7M", "7L31"], + firespin: ["7L21"], + flamethrower: ["7M", "7L24"], + foulplay: ["7M"], + headbutt: ["7M"], + irontail: ["7M"], + protect: ["7M"], + quickattack: ["7L10"], + reflect: ["7M"], + rest: ["7M"], + roar: ["7L28"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L3"], + toxic: ["7M"], + willowisp: ["7M", "7L17"], + }}, + vulpixalola: {learnset: { + aurorabeam: ["7L17"], + blizzard: ["7M", "7L31"], + confuseray: ["7L14"], + darkpulse: ["7M"], + dazzlinggleam: ["7M", "7L21"], + dig: ["7M"], + facade: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + icebeam: ["7M", "7L24"], + iceshard: ["7L10"], + irontail: ["7M"], + mist: ["7L7"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + roar: ["7L28"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L3"], + toxic: ["7M"], + }}, + ninetales: {learnset: { + calmmind: ["7M"], + darkpulse: ["7M"], + dig: ["7M"], + dreameater: ["7M"], + ember: ["7L1"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + irontail: ["7M"], + nastyplot: ["7L1"], + protect: ["7M"], + quickattack: ["7L1"], + reflect: ["7M"], + rest: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L1"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + ninetalesalola: {learnset: { + blizzard: ["7M"], + calmmind: ["7M"], + darkpulse: ["7M"], + dazzlinggleam: ["7M"], + dig: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + icebeam: ["7M"], + iceshard: ["7L1"], + irontail: ["7M"], + mist: ["7L1"], + nastyplot: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L1"], + toxic: ["7M"], + }}, + jigglypuff: {learnset: { + bide: ["7L10"], + blizzard: ["7M"], + bodyslam: ["7L22"], + brickbreak: ["7M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L6"], + dig: ["7M"], + disable: ["7L16"], + doubleedge: ["7L28"], + doubleslap: ["7L12"], + dreameater: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + lightscreen: ["7M"], + mimic: ["7L24"], + playrough: ["7M"], + pound: ["7L4"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M", "7L18"], + seismictoss: ["7M"], + shadowball: ["7M"], + sing: ["7L1"], + solarbeam: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + wigglytuff: {learnset: { + bide: ["7L1"], + blizzard: ["7M"], + brickbreak: ["7M"], + dazzlinggleam: ["7M"], + dig: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + lightscreen: ["7M"], + minimize: ["7L1"], + playrough: ["7M"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + sing: ["7L1"], + solarbeam: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + zubat: {learnset: { + absorb: ["7L1"], + airslash: ["7L33"], + bite: ["7L9"], + confuseray: ["7L17"], + facade: ["7M"], + fly: ["7M"], + haze: ["7L20"], + headbutt: ["7M"], + leechlife: ["7L25"], + megadrain: ["7M"], + protect: ["7M"], + rest: ["7M"], + roost: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + supersonic: ["7L1"], + swift: ["7L12"], + taunt: ["7M"], + toxic: ["7M", "7L28"], + uturn: ["7M"], + wingattack: ["7L4"], + }}, + golbat: {learnset: { + absorb: ["7L1"], + airslash: ["7L51"], + bite: ["7L8", "7L1"], + confuseray: ["7L17"], + crunch: ["7L1", "7L0"], + facade: ["7M"], + fly: ["7M"], + haze: ["7L20"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leechlife: ["7L31"], + megadrain: ["7M"], + protect: ["7M"], + quickattack: ["7L1"], + rest: ["7M"], + roost: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + supersonic: ["7L1"], + swift: ["7L12"], + taunt: ["7M"], + toxic: ["7M", "7L40"], + uturn: ["7M"], + whirlwind: ["7L1"], + wingattack: ["7L4", "7L1"], + }}, + oddish: {learnset: { + absorb: ["7L1"], + acid: ["7L8"], + dazzlinggleam: ["7M"], + facade: ["7M"], + growth: ["7L4"], + headbutt: ["7M"], + megadrain: ["7M", "7L22"], + moonblast: ["7L30"], + poisonpowder: ["7L12"], + protect: ["7M"], + razorleaf: ["7L18"], + reflect: ["7M"], + rest: ["7M"], + sleeppowder: ["7L14"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L13"], + substitute: ["7M"], + toxic: ["7M", "7L26"], + }}, + gloom: {learnset: { + absorb: ["7L1"], + acid: ["7L8", "7L1"], + dazzlinggleam: ["7M"], + facade: ["7M"], + growth: ["7L4", "7L1"], + headbutt: ["7M"], + megadrain: ["7M", "7L27"], + moonblast: ["7L45"], + poisonpowder: ["7L12", "7L1"], + protect: ["7M"], + razorleaf: ["7L18"], + reflect: ["7M"], + rest: ["7M"], + sleeppowder: ["7L14"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L13"], + substitute: ["7M"], + toxic: ["7M", "7L36"], + }}, + vileplume: {learnset: { + absorb: ["7L1"], + acid: ["7L1"], + dazzlinggleam: ["7M"], + facade: ["7M"], + growth: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + megadrain: ["7M"], + petaldance: ["7L54"], + poisonpowder: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M", "7L1"], + substitute: ["7M"], + toxic: ["7M"], + }}, + paras: {learnset: { + absorb: ["7L9"], + brickbreak: ["7M"], + dig: ["7M"], + facade: ["7M"], + furyswipes: ["7L15"], + growth: ["7L12"], + headbutt: ["7M"], + leechlife: ["7L23"], + lightscreen: ["7M"], + megadrain: ["7M"], + poisonpowder: ["7L6"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + slash: ["7L19"], + sleeppowder: ["7L2"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + spore: ["7L27"], + stunspore: ["7L4"], + substitute: ["7M"], + toxic: ["7M"], + xscissor: ["7M", "7L31"], + }}, + parasect: {learnset: { + absorb: ["7L9"], + brickbreak: ["7M"], + dig: ["7M"], + facade: ["7M"], + furyswipes: ["7L15"], + growth: ["7L12"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leechlife: ["7L23"], + leechseed: ["7L1"], + lightscreen: ["7M"], + megadrain: ["7M"], + poisonpowder: ["7L6", "7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + screech: ["7L1"], + slash: ["7L19"], + sleeppowder: ["7L2", "7L1"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + spore: ["7L33"], + stunspore: ["7L4", "7L1"], + substitute: ["7M"], + toxic: ["7M"], + xscissor: ["7M", "7L43"], + }}, + venonat: {learnset: { + confusion: ["7L12"], + disable: ["7L4"], + facade: ["7M"], + headbutt: ["7M"], + leechlife: ["7L28"], + megadrain: ["7M"], + poisonpowder: ["7L14"], + protect: ["7M"], + psybeam: ["7L20"], + psychic: ["7M", "7L32"], + reflect: ["7M"], + rest: ["7M"], + sleeppowder: ["7L24"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L16"], + substitute: ["7M"], + supersonic: ["7L8"], + tackle: ["7L1"], + toxic: ["7M"], + }}, + venomoth: {learnset: { + agility: ["7L1"], + bugbuzz: ["7L46"], + confusion: ["7L12", "7L1"], + disable: ["7L4", "7L1"], + dreameater: ["7M"], + facade: ["7M"], + gust: ["7L1", "7L0"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leechlife: ["7L28"], + megadrain: ["7M"], + poisonpowder: ["7L14"], + protect: ["7M"], + psybeam: ["7L20"], + psychic: ["7M", "7L37"], + quiverdance: ["7L55"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M"], + screech: ["7L1"], + sleeppowder: ["7L24"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L16"], + substitute: ["7M"], + supersonic: ["7L8", "7L1"], + tackle: ["7L1"], + teleport: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + diglett: {learnset: { + agility: ["7L12"], + dig: ["7M", "7L18"], + earthquake: ["7M", "7L29"], + facade: ["7M"], + fissure: ["7L33"], + furyswipes: ["7L15"], + growl: ["7L8"], + headbutt: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + sandattack: ["7L4"], + scratch: ["7L1"], + slash: ["7L21"], + sludgebomb: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L25"], + toxic: ["7M"], + }}, + diglettalola: {learnset: { + agility: ["7L12"], + dig: ["7M", "7L18"], + earthquake: ["7M", "7L29"], + facade: ["7M"], + fissure: ["7L33"], + flashcannon: ["7M"], + furyswipes: ["7L15"], + growl: ["7L8"], + headbutt: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + sandattack: ["7L4"], + scratch: ["7L1"], + slash: ["7L21"], + sludgebomb: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L25"], + toxic: ["7M"], + }}, + dugtrio: {learnset: { + agility: ["7L12", "7L1"], + dig: ["7M", "7L18"], + earthquake: ["7M", "7L35"], + facade: ["7M"], + fissure: ["7L45"], + furyswipes: ["7L15"], + growl: ["7L8", "7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + sandattack: ["7L4", "7L1"], + scratch: ["7L1"], + screech: ["7L1"], + slash: ["7L21"], + sludgebomb: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L25"], + toxic: ["7M"], + triattack: ["7M", "7L1", "7L0"], + }}, + dugtrioalola: {learnset: { + agility: ["7L12", "7L1"], + dig: ["7M", "7L18"], + earthquake: ["7M", "7L35"], + facade: ["7M"], + fissure: ["7L45"], + flashcannon: ["7M"], + furyswipes: ["7L15"], + growl: ["7L8", "7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + sandattack: ["7L4", "7L1"], + scratch: ["7L1"], + screech: ["7L1"], + slash: ["7L21"], + sludgebomb: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L25"], + toxic: ["7M"], + triattack: ["7M", "7L1", "7L0"], + }}, + meowth: {learnset: { + bite: ["7L3", "7L1"], + darkpulse: ["7M"], + dig: ["7M"], + facade: ["7M"], + fakeout: ["7L6", "7L1"], + feint: ["7L15"], + foulplay: ["7M"], + furyswipes: ["7L19"], + growl: ["7L1"], + headbutt: ["7M"], + irontail: ["7M"], + nastyplot: ["7L31"], + payday: ["7M", "7L12"], + playrough: ["7M", "7L35"], + protect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + screech: ["7L23"], + shadowball: ["7M"], + slash: ["7L27"], + substitute: ["7M"], + taunt: ["7M", "7L9"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + meowthalola: {learnset: { + bite: ["7L3", "7L1"], + darkpulse: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + fakeout: ["7L6", "7L1"], + feint: ["7L15"], + foulplay: ["7M"], + furyswipes: ["7L19"], + growl: ["7L1"], + headbutt: ["7M"], + irontail: ["7M"], + nastyplot: ["7L31"], + payday: ["7M", "7L12"], + playrough: ["7M", "7L35"], + protect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + screech: ["7L23"], + shadowball: ["7M"], + slash: ["7L27"], + substitute: ["7M"], + taunt: ["7M", "7L9"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + persian: {learnset: { + amnesia: ["7L1"], + bite: ["7L3", "7L1"], + darkpulse: ["7M"], + dig: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + fakeout: ["7L6", "7L1", "7S0"], + feint: ["7L15", "7S0"], + foulplay: ["7M"], + furyswipes: ["7L19"], + growl: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + irontail: ["7M"], + nastyplot: ["7L37"], + payday: ["7M", "7L12", "7S0"], + playrough: ["7M", "7L47"], + protect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + screech: ["7L23"], + shadowball: ["7M"], + slash: ["7L27"], + substitute: ["7M"], + swift: ["7L1", "7L0"], + taunt: ["7M", "7L9", "7S0"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + persianalola: {learnset: { + amnesia: ["7L1"], + bite: ["7L3", "7L1"], + darkpulse: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + fakeout: ["7L6", "7L1"], + feint: ["7L16"], + foulplay: ["7M"], + furyswipes: ["7L19"], + growl: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + irontail: ["7M"], + nastyplot: ["7L37"], + payday: ["7M", "7L12"], + playrough: ["7M", "7L47"], + protect: ["7M"], + rest: ["7M"], + scratch: ["7L1"], + screech: ["7L23"], + shadowball: ["7M"], + slash: ["7L27"], + substitute: ["7M"], + swift: ["7L1", "7L0"], + taunt: ["7M", "7L9"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + psyduck: {learnset: { + amnesia: ["7L41"], + blizzard: ["7M"], + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L14"], + dig: ["7M"], + disable: ["7L23"], + facade: ["7M"], + furyswipes: ["7L18"], + headbutt: ["7M"], + hydropump: ["7L45"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + protect: ["7M"], + psybeam: ["7L27"], + psychic: ["7M"], + rest: ["7M"], + scald: ["7M"], + scratch: ["7L1"], + screech: ["7L32"], + seismictoss: ["7M"], + substitute: ["7M"], + surf: ["7M", "7L36"], + tailwhip: ["7L5"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L9"], + }}, + golduck: {learnset: { + amnesia: ["7L53"], + blizzard: ["7M"], + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L14", "7L1"], + dig: ["7M"], + disable: ["7L23"], + encore: ["7L1"], + facade: ["7M"], + furyswipes: ["7L18"], + headbutt: ["7M"], + hydropump: ["7L63"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + protect: ["7M"], + psybeam: ["7L27"], + psychic: ["7M"], + rest: ["7M"], + scald: ["7M"], + scratch: ["7L1"], + screech: ["7L32"], + seismictoss: ["7M"], + substitute: ["7M"], + surf: ["7M", "7L42"], + tailwhip: ["7L5", "7L1"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L9", "7L1"], + yawn: ["7L1"], + }}, + mankey: {learnset: { + brickbreak: ["7M"], + bulkup: ["7M"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + firepunch: ["7M"], + focusenergy: ["7L5"], + furyswipes: ["7L16"], + headbutt: ["7M"], + helpinghand: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + karatechop: ["7L13"], + leer: ["7L1"], + lowkick: ["7L21"], + outrage: ["7M", "7L40"], + payday: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1"], + screech: ["7L32"], + seismictoss: ["7M", "7L24"], + substitute: ["7M"], + taunt: ["7M", "7L8"], + thrash: ["7L37"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + uturn: ["7M", "7L29"], + }}, + primeape: {learnset: { + brickbreak: ["7M"], + bulkup: ["7M"], + counter: ["7L1"], + dig: ["7M"], + earthquake: ["7M"], + encore: ["7L1"], + facade: ["7M"], + firepunch: ["7M"], + focusenergy: ["7L5", "7L1"], + furyswipes: ["7L16"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + karatechop: ["7L13"], + leer: ["7L1"], + lowkick: ["7L21"], + outrage: ["7M", "7L56"], + payday: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + rage: ["7L1", "7L0"], + rest: ["7M"], + rockslide: ["7M"], + scratch: ["7L1"], + screech: ["7L40"], + seismictoss: ["7M", "7L24"], + substitute: ["7M"], + taunt: ["7M", "7L8", "7L1"], + thrash: ["7L49"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + uturn: ["7M", "7L33"], + }}, + growlithe: {learnset: { + agility: ["7L21"], + bite: ["7L1"], + crunch: ["7L28"], + dig: ["7M"], + ember: ["7L3"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M", "7L17"], + flareblitz: ["7L38"], + headbutt: ["7M"], + heatwave: ["7L24"], + helpinghand: ["7M", "7L10"], + irontail: ["7M"], + leer: ["7L7"], + outrage: ["7M", "7L31"], + playrough: ["7M", "7L35"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + roar: ["7L1"], + substitute: ["7M"], + takedown: ["7L14"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + arcanine: {learnset: { + bite: ["7L1"], + dig: ["7M"], + doubleedge: ["7L1", "7S0"], + dragonpulse: ["7M"], + ember: ["7L1", "7S0"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + irontail: ["7M"], + leer: ["7L1", "7S0"], + outrage: ["7M"], + playrough: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + roar: ["7L1", "7S0"], + solarbeam: ["7M"], + substitute: ["7M"], + superpower: ["7M"], + teleport: ["7M"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + poliwag: {learnset: { + blizzard: ["7M"], + bodyslam: ["7L31"], + bubble: ["7L1"], + bubblebeam: ["7L21"], + dig: ["7M"], + doubleslap: ["7L16"], + facade: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hydropump: ["7L36"], + hypnosis: ["7L8"], + icebeam: ["7M"], + lowkick: ["7L26"], + pound: ["7L4"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + scald: ["7M"], + substitute: ["7M"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L12"], + }}, + poliwhirl: {learnset: { + blizzard: ["7M"], + bodyslam: ["7L39"], + brickbreak: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L21"], + dig: ["7M"], + doubleslap: ["7L16"], + earthquake: ["7M"], + facade: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hydropump: ["7L48"], + hypnosis: ["7L8", "7L1"], + icebeam: ["7M"], + icepunch: ["7M"], + lowkick: ["7L30"], + pound: ["7L4", "7L1"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + scald: ["7M"], + seismictoss: ["7M"], + substitute: ["7M"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L12", "7L1"], + }}, + poliwrath: {learnset: { + blizzard: ["7M"], + brickbreak: ["7M"], + bubble: ["7L1"], + bulkup: ["7M", "7L1"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + haze: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + icebeam: ["7M"], + icepunch: ["7M"], + mist: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + scald: ["7M"], + seismictoss: ["7M"], + submission: ["7L1", "7L0"], + substitute: ["7M"], + superpower: ["7M", "7L57"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + }}, + abra: {learnset: { + calmmind: ["7M"], + dazzlinggleam: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + taunt: ["7M"], + teleport: ["7M", "7L1"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + kadabra: {learnset: { + calmmind: ["7M"], + confusion: ["7L1"], + dazzlinggleam: ["7M"], + dig: ["7M"], + disable: ["7L6", "7L1"], + dreameater: ["7M"], + facade: ["7M"], + firepunch: ["7M"], + flash: ["7L13", "7L1"], + foulplay: ["7M"], + headbutt: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + kinesis: ["7L1", "7L0"], + lightscreen: ["7M"], + nightshade: ["7L19"], + protect: ["7M"], + psybeam: ["7L1", "7L0"], + psychic: ["7M", "7L45"], + recover: ["7L39"], + reflect: ["7M", "7L32"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + substitute: ["7M", "7L26"], + taunt: ["7M"], + teleport: ["7M", "7L1"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + alakazam: {learnset: { + barrier: ["7L1"], + calmmind: ["7M", "7L1", "7L0"], + confusion: ["7L1"], + dazzlinggleam: ["7M"], + dig: ["7M"], + disable: ["7L6", "7L1"], + dreameater: ["7M"], + encore: ["7L1"], + facade: ["7M"], + firepunch: ["7M"], + flash: ["7L13", "7L1"], + foulplay: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + kinesis: ["7L1"], + lightscreen: ["7M"], + nightshade: ["7L19"], + protect: ["7M"], + psybeam: ["7L1"], + psychic: ["7M", "7L45"], + recover: ["7L39"], + reflect: ["7M", "7L32"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + substitute: ["7M", "7L26"], + taunt: ["7M"], + teleport: ["7M", "7L1"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + machop: {learnset: { + bide: ["7L8"], + brickbreak: ["7M", "7L21"], + bulkup: ["7M", "7L31"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L4"], + headbutt: ["7M"], + helpinghand: ["7M"], + icepunch: ["7M"], + karatechop: ["7L16"], + leer: ["7L1"], + lightscreen: ["7M"], + lowkick: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M", "7L12"], + submission: ["7L26"], + substitute: ["7M"], + superpower: ["7M", "7L36"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + machoke: {learnset: { + bide: ["7L8", "7L1"], + brickbreak: ["7M", "7L21"], + bulkup: ["7M", "7L37"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L4", "7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + icepunch: ["7M"], + karatechop: ["7L16"], + leer: ["7L1"], + lightscreen: ["7M"], + lowkick: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M", "7L12"], + submission: ["7L26"], + substitute: ["7M"], + superpower: ["7M", "7L48"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + machamp: {learnset: { + bide: ["7L8", "7L1"], + brickbreak: ["7M", "7L21"], + bulkup: ["7M", "7L37"], + counter: ["7L1"], + dig: ["7M"], + earthquake: ["7M"], + encore: ["7L1"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L4", "7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + karatechop: ["7L16"], + leer: ["7L1"], + lightscreen: ["7M"], + lowkick: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M", "7L12"], + strength: ["7L1", "7L0"], + submission: ["7L26"], + substitute: ["7M"], + superpower: ["7M", "7L48"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + bellsprout: {learnset: { + acid: ["7L12"], + facade: ["7M"], + growth: ["7L4"], + headbutt: ["7M"], + megadrain: ["7M"], + poisonjab: ["7M", "7L26"], + poisonpowder: ["7L17"], + protect: ["7M"], + razorleaf: ["7L22"], + reflect: ["7M"], + rest: ["7M"], + slam: ["7L30"], + sleeppowder: ["7L16"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L18"], + substitute: ["7M"], + toxic: ["7M"], + vinewhip: ["7L1"], + wrap: ["7L8"], + }}, + weepinbell: {learnset: { + acid: ["7L12", "7L1"], + facade: ["7M"], + growth: ["7L4", "7L1"], + headbutt: ["7M"], + megadrain: ["7M"], + poisonjab: ["7M", "7L36"], + poisonpowder: ["7L17"], + protect: ["7M"], + razorleaf: ["7L27"], + reflect: ["7M"], + rest: ["7M"], + slam: ["7L45"], + sleeppowder: ["7L16"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L18"], + substitute: ["7M"], + toxic: ["7M"], + vinewhip: ["7L1"], + wrap: ["7L8", "7L1"], + }}, + victreebel: {learnset: { + acid: ["7L1"], + clearsmog: ["7L1"], + facade: ["7M"], + growth: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leechlife: ["7L1"], + megadrain: ["7M"], + poisonjab: ["7M"], + powerwhip: ["7L54", "7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L1"], + swordsdance: ["7L1"], + toxic: ["7M"], + vinewhip: ["7L1"], + wrap: ["7L1"], + }}, + tentacool: {learnset: { + acid: ["7L13"], + barrier: ["7L31"], + blizzard: ["7M"], + bubblebeam: ["7L18"], + constrict: ["7L4"], + dazzlinggleam: ["7M"], + facade: ["7M"], + headbutt: ["7M"], + hydropump: ["7L45"], + icebeam: ["7M"], + megadrain: ["7M"], + poisonjab: ["7M", "7L36"], + poisonsting: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + scald: ["7M"], + screech: ["7L40"], + sludgebomb: ["7M"], + substitute: ["7M"], + supersonic: ["7L9"], + surf: ["7M", "7L27"], + toxic: ["7M"], + waterfall: ["7M"], + wrap: ["7L22"], + }}, + tentacruel: {learnset: { + acid: ["7L13", "7L1"], + barrier: ["7L36"], + blizzard: ["7M"], + bubblebeam: ["7L18"], + constrict: ["7L4", "7L1"], + dazzlinggleam: ["7M"], + facade: ["7M"], + haze: ["7L1"], + headbutt: ["7M"], + hydropump: ["7L65"], + hyperbeam: ["7M"], + icebeam: ["7M"], + megadrain: ["7M"], + mirrorcoat: ["7L1"], + poisonjab: ["7M", "7L46"], + poisonsting: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + scald: ["7M"], + screech: ["7L55"], + sludgebomb: ["7M"], + substitute: ["7M"], + supersonic: ["7L9", "7L1"], + surf: ["7M", "7L27"], + toxic: ["7M"], + waterfall: ["7M"], + wrap: ["7L22"], + }}, + geodude: {learnset: { + bide: ["7L6"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + doubleedge: ["7L31"], + earthquake: ["7M", "7L27"], + explosion: ["7L35"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L23"], + rockthrow: ["7L9"], + sandattack: ["7L3"], + seismictoss: ["7M"], + selfdestruct: ["7M", "7L19"], + stealthrock: ["7M", "7L12"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + takedown: ["7L15"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + geodudealola: {learnset: { + bide: ["7L6"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + doubleedge: ["7L31"], + earthquake: ["7M"], + explosion: ["7L35"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L23"], + rockthrow: ["7L9"], + seismictoss: ["7M"], + selfdestruct: ["7M", "7L19"], + stealthrock: ["7M", "7L12"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + takedown: ["7L15"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L27"], + thundershock: ["7L3"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + graveler: {learnset: { + bide: ["7L6", "7L1"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + doubleedge: ["7L39"], + earthquake: ["7M", "7L31"], + explosion: ["7L47"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L23"], + rockthrow: ["7L9"], + sandattack: ["7L3", "7L1"], + seismictoss: ["7M"], + selfdestruct: ["7M", "7L19"], + stealthrock: ["7M", "7L12"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + takedown: ["7L15"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + graveleralola: {learnset: { + bide: ["7L6", "7L1"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + doubleedge: ["7L39"], + earthquake: ["7M"], + explosion: ["7L47"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L23"], + rockthrow: ["7L9"], + seismictoss: ["7M"], + selfdestruct: ["7M", "7L19"], + stealthrock: ["7M", "7L12"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + takedown: ["7L15"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L31"], + thundershock: ["7L3", "7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + golem: {learnset: { + bide: ["7L6", "7L1"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + doubleedge: ["7L39"], + earthquake: ["7M", "7L31"], + explosion: ["7L47"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + megapunch: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L23"], + rockthrow: ["7L9"], + sandattack: ["7L3", "7L1"], + seismictoss: ["7M"], + selfdestruct: ["7M", "7L19"], + stealthrock: ["7M", "7L12"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + takedown: ["7L15"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + golemalola: {learnset: { + bide: ["7L6", "7L1"], + brickbreak: ["7M"], + defensecurl: ["7L1"], + dig: ["7M"], + doubleedge: ["7L39"], + earthquake: ["7M"], + explosion: ["7L47"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + megapunch: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L23"], + rockthrow: ["7L9"], + seismictoss: ["7M"], + selfdestruct: ["7M", "7L19"], + stealthrock: ["7M", "7L12"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + takedown: ["7L15"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L31"], + thundershock: ["7L3", "7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + ponyta: {learnset: { + agility: ["7L32"], + doublekick: ["7L15"], + ember: ["7L5"], + facade: ["7M"], + fireblast: ["7M", "7L38"], + firespin: ["7L26"], + flamethrower: ["7M"], + flareblitz: ["7L51"], + growl: ["7L1"], + headbutt: ["7M"], + irontail: ["7M"], + protect: ["7M"], + quickattack: ["7L10"], + reflect: ["7M"], + rest: ["7M"], + solarbeam: ["7M"], + stomp: ["7L20"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L1"], + takedown: ["7L44"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + rapidash: {learnset: { + agility: ["7L32"], + doublekick: ["7L15"], + drillrun: ["7M"], + ember: ["7L5", "7L1"], + facade: ["7M"], + fireblast: ["7M", "7L38"], + firespin: ["7L26"], + flamethrower: ["7M"], + flareblitz: ["7L65"], + furyattack: ["7L1", "7L0"], + growl: ["7L1"], + headbutt: ["7M"], + horndrill: ["7L1"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + irontail: ["7M"], + megahorn: ["7M", "7L1"], + poisonjab: ["7M", "7L1"], + protect: ["7M"], + quickattack: ["7L10"], + reflect: ["7M"], + rest: ["7M"], + solarbeam: ["7M"], + stomp: ["7L20"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L1"], + takedown: ["7L51"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + slowpoke: {learnset: { + amnesia: ["7L48"], + blizzard: ["7M"], + calmmind: ["7M"], + confusion: ["7L18"], + dig: ["7M"], + disable: ["7L24"], + dreameater: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + growl: ["7L6"], + headbutt: ["7M"], + icebeam: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + protect: ["7M"], + psychic: ["7M", "7L42"], + reflect: ["7M"], + rest: ["7M", "7L30"], + scald: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + surf: ["7M", "7L36"], + tackle: ["7L1"], + teleport: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + watergun: ["7L12"], + yawn: ["7L1"], + }}, + slowbro: {learnset: { + amnesia: ["7L62"], + blizzard: ["7M"], + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L18"], + dig: ["7M"], + disable: ["7L24"], + dreameater: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + foulplay: ["7M"], + growl: ["7L6", "7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + protect: ["7M"], + psychic: ["7M", "7L49"], + reflect: ["7M"], + rest: ["7M", "7L30"], + scald: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + stomp: ["7L1"], + substitute: ["7M"], + surf: ["7M", "7L36"], + tackle: ["7L1"], + teleport: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + watergun: ["7L12", "7L1"], + withdraw: ["7L1", "7L0"], + yawn: ["7L1"], + }}, + magnemite: {learnset: { + facade: ["7M"], + flashcannon: ["7M", "7L38"], + headbutt: ["7M"], + lightscreen: ["7M", "7L20"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + screech: ["7L32"], + sonicboom: ["7L15"], + substitute: ["7M"], + supersonic: ["7L1"], + tackle: ["7L1"], + teleport: ["7M"], + thunder: ["7M", "7L44"], + thunderbolt: ["7M", "7L26"], + thundershock: ["7L5"], + thunderwave: ["7M", "7L10"], + toxic: ["7M"], + }}, + magneton: {learnset: { + facade: ["7M"], + flashcannon: ["7M", "7L46"], + headbutt: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M", "7L20"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + screech: ["7L36"], + sonicboom: ["7L15"], + substitute: ["7M"], + supersonic: ["7L1"], + tackle: ["7L1"], + teleport: ["7M"], + thunder: ["7M", "7L56"], + thunderbolt: ["7M", "7L26"], + thundershock: ["7L5", "7L1"], + thunderwave: ["7M", "7L10", "7L1"], + toxic: ["7M"], + triattack: ["7M", "7L1", "7L0"], + }}, + farfetchd: {learnset: { + agility: ["7L22"], + airslash: ["7L31"], + cut: ["7L9"], + facade: ["7M"], + feint: ["7L1"], + fly: ["7M"], + focusenergy: ["7L4"], + furyattack: ["7L18"], + headbutt: ["7M"], + helpinghand: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + mirrormove: ["7L1"], + peck: ["7L1"], + poisonjab: ["7M", "7L1"], + protect: ["7M"], + quickattack: ["7L1"], + razorleaf: ["7L13"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M"], + sandattack: ["7L1"], + skyattack: ["7L40"], + slash: ["7L27"], + substitute: ["7M"], + swordsdance: ["7L36"], + toxic: ["7M"], + uturn: ["7M"], + }}, + doduo: {learnset: { + agility: ["7L22"], + drillpeck: ["7L27"], + facade: ["7M"], + fly: ["7M"], + furyattack: ["7L16"], + growl: ["7L1"], + headbutt: ["7M"], + jumpkick: ["7L38"], + peck: ["7L1"], + protect: ["7M"], + quickattack: ["7L5"], + rage: ["7L10"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M"], + substitute: ["7M"], + swordsdance: ["7L32"], + thrash: ["7L44"], + toxic: ["7M"], + }}, + dodrio: {learnset: { + agility: ["7L22"], + drillpeck: ["7L27"], + facade: ["7M"], + fly: ["7M"], + furyattack: ["7L16"], + growl: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + jumpkick: ["7L48"], + mirrormove: ["7L1"], + peck: ["7L1"], + protect: ["7M"], + quickattack: ["7L5", "7L1"], + rage: ["7L10", "7L1"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M"], + substitute: ["7M"], + supersonic: ["7L1"], + swordsdance: ["7L37"], + taunt: ["7M"], + thrash: ["7L59"], + toxic: ["7M"], + triattack: ["7M", "7L1", "7L0"], + }}, + seel: {learnset: { + aquajet: ["7L12"], + aurorabeam: ["7L26"], + blizzard: ["7M"], + doubleedge: ["7L50"], + drillrun: ["7M"], + encore: ["7L8"], + facade: ["7M"], + growl: ["7L4"], + headbutt: ["7M", "7L1"], + helpinghand: ["7M"], + icebeam: ["7M", "7L44"], + iceshard: ["7L16"], + irontail: ["7M"], + megahorn: ["7M"], + payday: ["7M"], + protect: ["7M"], + rest: ["7M", "7L20"], + substitute: ["7M"], + surf: ["7M"], + takedown: ["7L38"], + toxic: ["7M"], + waterfall: ["7M", "7L32"], + }}, + dewgong: {learnset: { + aquajet: ["7L12", "7L1"], + aurorabeam: ["7L26"], + blizzard: ["7M"], + doubleedge: ["7L62"], + drillrun: ["7M"], + encore: ["7L8", "7L1"], + facade: ["7M"], + fakeout: ["7L1"], + growl: ["7L4", "7L1"], + headbutt: ["7M", "7L1"], + helpinghand: ["7M"], + horndrill: ["7L1"], + hyperbeam: ["7M"], + icebeam: ["7M", "7L52"], + iceshard: ["7L15"], + irontail: ["7M"], + megahorn: ["7M"], + payday: ["7M"], + protect: ["7M"], + rest: ["7M", "7L20"], + substitute: ["7M"], + surf: ["7M"], + takedown: ["7L42"], + toxic: ["7M"], + waterfall: ["7M", "7L32"], + }}, + grimer: {learnset: { + acidarmor: ["7L42"], + dig: ["7M"], + disable: ["7L18"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + harden: ["7L6"], + headbutt: ["7M"], + helpinghand: ["7M"], + icepunch: ["7M"], + megadrain: ["7M"], + minimize: ["7L12"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L30"], + selfdestruct: ["7M"], + shadowball: ["7M"], + sludge: ["7L24"], + sludgebomb: ["7M", "7L48"], + substitute: ["7M"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M", "7L36"], + }}, + grimeralola: {learnset: { + acidarmor: ["7L42"], + bite: ["7L24"], + crunch: ["7L36"], + dig: ["7M"], + disable: ["7L18"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + harden: ["7L6"], + headbutt: ["7M"], + helpinghand: ["7M"], + icepunch: ["7M"], + megadrain: ["7M"], + minimize: ["7L12"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L30"], + selfdestruct: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M", "7L48"], + substitute: ["7M"], + taunt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + muk: {learnset: { + acidarmor: ["7L48"], + brickbreak: ["7M"], + darkpulse: ["7M"], + dig: ["7M"], + disable: ["7L18"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + harden: ["7L6", "7L1"], + haze: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + megadrain: ["7M"], + minimize: ["7L12", "7L1"], + moonblast: ["7L1"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L30"], + selfdestruct: ["7M"], + shadowball: ["7M"], + sludge: ["7L24"], + sludgebomb: ["7M", "7L60"], + substitute: ["7M"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M", "7L36"], + }}, + mukalola: {learnset: { + acidarmor: ["7L48"], + bite: ["7L24"], + brickbreak: ["7M"], + crunch: ["7L36"], + darkpulse: ["7M"], + dig: ["7M"], + disable: ["7L18"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + foulplay: ["7M"], + harden: ["7L6", "7L1"], + haze: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + megadrain: ["7M"], + minimize: ["7L12", "7L1"], + moonblast: ["7L1"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L30"], + selfdestruct: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M", "7L60"], + substitute: ["7M"], + taunt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + shellder: {learnset: { + aurorabeam: ["7L27"], + blizzard: ["7M"], + clamp: ["7L22"], + facade: ["7M"], + headbutt: ["7M"], + hydropump: ["7L45"], + icebeam: ["7M", "7L36"], + iceshard: ["7L13"], + leer: ["7L9"], + protect: ["7M", "7L31"], + reflect: ["7M"], + rest: ["7M"], + selfdestruct: ["7M"], + shellsmash: ["7L40"], + substitute: ["7M"], + supersonic: ["7L18"], + surf: ["7M"], + tackle: ["7L1"], + teleport: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + watergun: ["7L1"], + withdraw: ["7L4"], + }}, + cloyster: {learnset: { + barrier: ["7L1"], + blizzard: ["7M"], + facade: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + leer: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + selfdestruct: ["7M"], + spikecannon: ["7L1", "7L0"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1"], + teleport: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + twineedle: ["7L1"], + watergun: ["7L1"], + withdraw: ["7L1"], + }}, + gastly: {learnset: { + confuseray: ["7L5"], + darkpulse: ["7M", "7L28"], + dazzlinggleam: ["7M"], + dreameater: ["7M", "7L33"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hypnosis: ["7L1"], + icepunch: ["7M"], + lick: ["7L1"], + megadrain: ["7M"], + nightshade: ["7L12"], + poisongas: ["7L7"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + selfdestruct: ["7M"], + shadowball: ["7M", "7L26"], + sludgebomb: ["7M"], + smog: ["7L1"], + substitute: ["7M"], + suckerpunch: ["7L19"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M", "7L21"], + willowisp: ["7M", "7L14"], + }}, + haunter: {learnset: { + confuseray: ["7L5", "7L1"], + darkpulse: ["7M", "7L36"], + dazzlinggleam: ["7M"], + dreameater: ["7M", "7L45"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hypnosis: ["7L1"], + icepunch: ["7M"], + lick: ["7L1"], + megadrain: ["7M"], + nightshade: ["7L12"], + poisongas: ["7L7"], + poisonjab: ["7M"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + selfdestruct: ["7M"], + shadowball: ["7M", "7L30"], + sludgebomb: ["7M"], + smog: ["7L1"], + substitute: ["7M"], + suckerpunch: ["7L19"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M", "7L21"], + willowisp: ["7M", "7L14"], + }}, + gengar: {learnset: { + brickbreak: ["7M"], + confuseray: ["7L5", "7L1"], + darkpulse: ["7M", "7L36"], + dazzlinggleam: ["7M"], + disable: ["7L1"], + dreameater: ["7M", "7L45"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + haze: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + icepunch: ["7M"], + lick: ["7L1"], + megadrain: ["7M"], + nightshade: ["7L12"], + poisongas: ["7L7"], + poisonjab: ["7M"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + selfdestruct: ["7M"], + shadowball: ["7M", "7L30"], + sludgebomb: ["7M"], + smog: ["7L1"], + substitute: ["7M"], + suckerpunch: ["7L19"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M", "7L21"], + willowisp: ["7M", "7L14"], + }}, + onix: {learnset: { + bind: ["7L1"], + dig: ["7M", "7L20"], + doubleedge: ["7L45"], + dragonpulse: ["7M"], + dragontail: ["7M"], + earthquake: ["7M", "7L35"], + facade: ["7M"], + flashcannon: ["7M"], + harden: ["7L1"], + headbutt: ["7M"], + irontail: ["7M", "7L40"], + protect: ["7M"], + rage: ["7L10"], + rest: ["7M"], + rockslide: ["7M", "7L30"], + rockthrow: ["7L1"], + screech: ["7L15"], + selfdestruct: ["7M"], + slam: ["7L25"], + stealthrock: ["7M", "7L5"], + substitute: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + }}, + drowzee: {learnset: { + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L9"], + dazzlinggleam: ["7M"], + disable: ["7L4"], + dreameater: ["7M", "7L40"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + headbutt: ["7M", "7L27"], + hypnosis: ["7L1"], + icepunch: ["7M"], + lightscreen: ["7M"], + meditate: ["7L18"], + nastyplot: ["7L36"], + poisongas: ["7L13"], + pound: ["7L1"], + protect: ["7M"], + psybeam: ["7L22"], + psychic: ["7M", "7L31"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + taunt: ["7M"], + teleport: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + hypno: {learnset: { + barrier: ["7L1"], + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L9", "7L1"], + dazzlinggleam: ["7M"], + disable: ["7L4", "7L1"], + dreameater: ["7M", "7L55"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + headbutt: ["7M", "7L27"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + icepunch: ["7M"], + lightscreen: ["7M"], + meditate: ["7L18"], + nastyplot: ["7L46"], + poisongas: ["7L13"], + pound: ["7L1"], + protect: ["7M"], + psybeam: ["7L22"], + psychic: ["7M", "7L36"], + reflect: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + taunt: ["7M"], + teleport: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + krabby: {learnset: { + blizzard: ["7M"], + brickbreak: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L18"], + crabhammer: ["7L36"], + dig: ["7M"], + facade: ["7M"], + guillotine: ["7L41"], + harden: ["7L14"], + headbutt: ["7M"], + icebeam: ["7M"], + leer: ["7L9"], + protect: ["7M", "7L27"], + rest: ["7M"], + rockslide: ["7M"], + scald: ["7M"], + slam: ["7L32"], + stomp: ["7L23"], + substitute: ["7M"], + superpower: ["7M"], + surf: ["7M"], + toxic: ["7M"], + vicegrip: ["7L5"], + xscissor: ["7M"], + }}, + kingler: {learnset: { + agility: ["7L1"], + amnesia: ["7L1"], + blizzard: ["7M"], + brickbreak: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L18"], + crabhammer: ["7L41"], + dig: ["7M"], + facade: ["7M"], + guillotine: ["7L56"], + harden: ["7L14", "7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + leer: ["7L9", "7L1"], + protect: ["7M", "7L27"], + rest: ["7M"], + rockslide: ["7M"], + scald: ["7M"], + slam: ["7L37"], + stomp: ["7L23"], + substitute: ["7M"], + superpower: ["7M"], + surf: ["7M"], + toxic: ["7M"], + vicegrip: ["7L5", "7L1"], + xscissor: ["7M"], + }}, + voltorb: {learnset: { + explosion: ["7L45"], + facade: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + lightscreen: ["7M", "7L3"], + mirrorcoat: ["7L38", "7S0"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + screech: ["7L24", "7S0"], + selfdestruct: ["7M", "7L19", "7S0"], + sonicboom: ["7L6"], + substitute: ["7M"], + swift: ["7L14"], + tackle: ["7L1"], + taunt: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M", "7L31", "7S0"], + thundershock: ["7L9"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + electrode: {learnset: { + explosion: ["7L60"], + facade: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M", "7L3", "7L1"], + mirrorcoat: ["7L48"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + screech: ["7L24", "7S0"], + selfdestruct: ["7M", "7L19", "7S0"], + sonicboom: ["7L6", "7L1"], + substitute: ["7M"], + swift: ["7L14", "7S0"], + tackle: ["7L1"], + taunt: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M", "7L36", "7S0"], + thundershock: ["7L9", "7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + exeggcute: {learnset: { + barrage: ["7L1"], + confusion: ["7L14"], + dreameater: ["7M"], + facade: ["7M"], + headbutt: ["7M"], + hypnosis: ["7L7"], + leechseed: ["7L34"], + lightscreen: ["7M"], + megadrain: ["7M"], + poisonpowder: ["7L18"], + protect: ["7M"], + psybeam: ["7L27"], + psychic: ["7M"], + reflect: ["7M", "7L41"], + rest: ["7M"], + selfdestruct: ["7M"], + sleeppowder: ["7L20"], + sludgebomb: ["7M"], + solarbeam: ["7M", "7L48"], + stunspore: ["7L16"], + substitute: ["7M"], + teleport: ["7M"], + toxic: ["7M"], + }}, + exeggutor: {learnset: { + barrage: ["7L1"], + confusion: ["7L1"], + dreameater: ["7M"], + eggbomb: ["7L1"], + facade: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + lightscreen: ["7M"], + megadrain: ["7M"], + powerwhip: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + selfdestruct: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stomp: ["7L1", "7L0"], + stunspore: ["7L1"], + substitute: ["7M"], + teleport: ["7M"], + toxic: ["7M"], + }}, + exeggutoralola: {learnset: { + barrage: ["7L1"], + brickbreak: ["7M"], + confusion: ["7L1"], + dragonpulse: ["7M", "7L1", "7L0"], + dragontail: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + eggbomb: ["7L1"], + facade: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + irontail: ["7M"], + lightscreen: ["7M"], + megadrain: ["7M"], + outrage: ["7M"], + powerwhip: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + selfdestruct: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L1"], + substitute: ["7M"], + superpower: ["7M"], + teleport: ["7M"], + toxic: ["7M"], + }}, + cubone: {learnset: { + blizzard: ["7M"], + boneclub: ["7L12"], + bonemerang: ["7L26"], + brickbreak: ["7M"], + dig: ["7M"], + doubleedge: ["7L36"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L24"], + growl: ["7L1"], + headbutt: ["7M", "7L14"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L6"], + protect: ["7M"], + rage: ["7L18"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + tailwhip: ["7L2"], + thrash: ["7L30"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + marowak: {learnset: { + blizzard: ["7M"], + boneclub: ["7L12", "7L1"], + bonemerang: ["7L26"], + brickbreak: ["7M"], + dig: ["7M"], + doubleedge: ["7L48"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L24"], + growl: ["7L1"], + headbutt: ["7M", "7L14"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L6", "7L1"], + outrage: ["7M"], + protect: ["7M"], + rage: ["7L18"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L1"], + seismictoss: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + swordsdance: ["7L1", "7L0"], + tailwhip: ["7L2", "7L1"], + thrash: ["7L36"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + marowakalola: {learnset: { + blizzard: ["7M"], + boneclub: ["7L12", "7L1"], + bonemerang: ["7L26"], + brickbreak: ["7M"], + darkpulse: ["7M"], + dig: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + firespin: ["7L14"], + flamethrower: ["7M"], + flareblitz: ["7L48"], + growl: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L6", "7L1"], + outrage: ["7M"], + protect: ["7M"], + rage: ["7L18"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L1"], + seismictoss: ["7M"], + shadowball: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + swordsdance: ["7L1", "7L0"], + tailwhip: ["7L2", "7L1"], + thrash: ["7L36"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + willowisp: ["7M", "7L24"], + }}, + hitmonlee: {learnset: { + brickbreak: ["7M", "7L20", "7S0"], + bulkup: ["7M"], + doublekick: ["7L10"], + earthquake: ["7M"], + facade: ["7M", "7L25", "7S0"], + feint: ["7L15", "7S0"], + focusenergy: ["7L35"], + headbutt: ["7M"], + helpinghand: ["7M"], + highjumpkick: ["7L45"], + jumpkick: ["7L30", "7S0"], + meditate: ["7L5"], + megakick: ["7L40"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + rollingkick: ["7L1"], + seismictoss: ["7M"], + substitute: ["7M"], + superpower: ["7M"], + toxic: ["7M"], + }}, + hitmonchan: {learnset: { + agility: ["7L10"], + brickbreak: ["7M"], + bulkup: ["7M"], + cometpunch: ["7L1"], + counter: ["7L45"], + dizzypunch: ["7L25", "7S0"], + earthquake: ["7M"], + facade: ["7M"], + feint: ["7L15"], + firepunch: ["7M", "7L30", "7S0"], + focusenergy: ["7L35"], + headbutt: ["7M"], + helpinghand: ["7M"], + icepunch: ["7M", "7L30", "7S0"], + leer: ["7L5"], + megapunch: ["7L40"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M"], + substitute: ["7M"], + swift: ["7L20"], + thunderpunch: ["7M", "7L30", "7S0"], + toxic: ["7M"], + }}, + lickitung: {learnset: { + acid: ["7L10"], + bind: ["7L25"], + blizzard: ["7M"], + brickbreak: ["7M"], + dig: ["7M"], + disable: ["7L20"], + dragontail: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lick: ["7L1"], + powerwhip: ["7L45"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + screech: ["7L35"], + seismictoss: ["7M"], + shadowball: ["7M"], + slam: ["7L30"], + solarbeam: ["7M"], + stomp: ["7L15"], + substitute: ["7M"], + surf: ["7M"], + thrash: ["7L40"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + wrap: ["7L5"], + }}, + koffing: {learnset: { + clearsmog: ["7L12"], + darkpulse: ["7M"], + explosion: ["7L48"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + haze: ["7L36"], + headbutt: ["7M"], + poisongas: ["7L1"], + protect: ["7M"], + rest: ["7M"], + selfdestruct: ["7M", "7L24"], + shadowball: ["7M"], + sludge: ["7L18"], + sludgebomb: ["7M", "7L42"], + smog: ["7L6"], + substitute: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M", "7L30"], + willowisp: ["7M"], + }}, + weezing: {learnset: { + clearsmog: ["7L12", "7L1"], + darkpulse: ["7M"], + explosion: ["7L60"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + haze: ["7L40"], + headbutt: ["7M"], + hyperbeam: ["7M"], + poisongas: ["7L1"], + protect: ["7M"], + psybeam: ["7L1"], + rest: ["7M"], + screech: ["7L1"], + selfdestruct: ["7M", "7L24"], + shadowball: ["7M"], + sludge: ["7L18"], + sludgebomb: ["7M", "7L50"], + smog: ["7L6", "7L1"], + substitute: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M", "7L30"], + willowisp: ["7M"], + }}, + rhyhorn: {learnset: { + blizzard: ["7M"], + dig: ["7M"], + dragonpulse: ["7M"], + drillrun: ["7M", "7L24"], + earthquake: ["7M", "7L48"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + furyattack: ["7L7"], + headbutt: ["7M"], + hornattack: ["7L1"], + horndrill: ["7L55"], + icebeam: ["7M"], + irontail: ["7M"], + megahorn: ["7M", "7L36"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L43"], + rockthrow: ["7L19"], + sandattack: ["7L1"], + stealthrock: ["7M"], + stomp: ["7L12"], + substitute: ["7M"], + superpower: ["7M"], + tailwhip: ["7L1"], + takedown: ["7L31"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + }}, + rhydon: {learnset: { + blizzard: ["7M"], + brickbreak: ["7M"], + counter: ["7L1"], + crunch: ["7L1"], + dig: ["7M"], + dragonpulse: ["7M"], + dragontail: ["7M"], + drillrun: ["7M", "7L24"], + earthquake: ["7M", "7L54"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + furyattack: ["7L7", "7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hornattack: ["7L1"], + horndrill: ["7L67"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + megahorn: ["7M", "7L36"], + outrage: ["7M"], + payday: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L48"], + rockthrow: ["7L19"], + sandattack: ["7L1"], + seismictoss: ["7M"], + stealthrock: ["7M"], + stomp: ["7L12"], + substitute: ["7M"], + superpower: ["7M"], + surf: ["7M"], + tailwhip: ["7L1"], + takedown: ["7L31"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + chansey: {learnset: { + blizzard: ["7M"], + brickbreak: ["7M"], + calmmind: ["7M"], + celebrate: ["7S0"], + dazzlinggleam: ["7M"], + defensecurl: ["7L4"], + doubleedge: ["7L45"], + doubleslap: ["7L12"], + dreameater: ["7M"], + earthquake: ["7M"], + eggbomb: ["7L35"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M", "7L40"], + minimize: ["7L20"], + pound: ["7L1", "7S0"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + sing: ["7L30"], + softboiled: ["7L16"], + solarbeam: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + tailwhip: ["7L8"], + takedown: ["7L25"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + }}, + tangela: {learnset: { + absorb: ["7L1"], + amnesia: ["7L49"], + bind: ["7L22"], + confusion: ["7L10"], + constrict: ["7L1"], + facade: ["7M"], + growth: ["7L27"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leechseed: ["7L39"], + megadrain: ["7M", "7L34"], + poisonpowder: ["7L17"], + powerwhip: ["7L54"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + slam: ["7L44"], + sleeppowder: ["7L5"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stunspore: ["7L29"], + substitute: ["7M"], + toxic: ["7M"], + vinewhip: ["7L15"], + }}, + kangaskhan: {learnset: { + bite: ["7L17"], + blizzard: ["7M"], + brickbreak: ["7M"], + cometpunch: ["7L1"], + crunch: ["7L39"], + dig: ["7M"], + dizzypunch: ["7L33"], + earthquake: ["7M"], + facade: ["7M"], + fakeout: ["7L6"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + megapunch: ["7L28"], + outrage: ["7M", "7L44"], + protect: ["7M"], + rage: ["7L22"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L50"], + surf: ["7M"], + tailwhip: ["7L11"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + }}, + horsea: {learnset: { + agility: ["7L33"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L18"], + dragonpulse: ["7M", "7L36"], + facade: ["7M"], + flashcannon: ["7M"], + focusenergy: ["7L24"], + headbutt: ["7M"], + hydropump: ["7L42"], + icebeam: ["7M"], + leer: ["7L15"], + outrage: ["7M"], + protect: ["7M"], + rest: ["7M"], + scald: ["7M"], + smokescreen: ["7L6"], + substitute: ["7M"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M", "7L27"], + watergun: ["7L9"], + }}, + seadra: {learnset: { + agility: ["7L36"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L18"], + clearsmog: ["7L1"], + disable: ["7L1"], + dragonpulse: ["7M", "7L42"], + facade: ["7M"], + flashcannon: ["7M"], + focusenergy: ["7L24"], + headbutt: ["7M"], + hydropump: ["7L51"], + hyperbeam: ["7M"], + icebeam: ["7M"], + leer: ["7L15", "7L1"], + outrage: ["7M"], + protect: ["7M"], + rest: ["7M"], + scald: ["7M"], + smokescreen: ["7L6", "7L1"], + substitute: ["7M"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M", "7L27"], + watergun: ["7L9", "7L1"], + }}, + goldeen: {learnset: { + agility: ["7L30"], + blizzard: ["7M"], + drillrun: ["7M"], + facade: ["7M"], + furyattack: ["7L20"], + headbutt: ["7M"], + hornattack: ["7L14"], + horndrill: ["7L34"], + icebeam: ["7M"], + megahorn: ["7M", "7L40"], + peck: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + quickattack: ["7L10"], + rest: ["7M"], + scald: ["7M"], + substitute: ["7M"], + supersonic: ["7L4"], + surf: ["7M"], + tailwhip: ["7L1"], + toxic: ["7M"], + waterfall: ["7M", "7L24"], + }}, + seaking: {learnset: { + agility: ["7L30"], + blizzard: ["7M"], + drillrun: ["7M"], + facade: ["7M"], + furyattack: ["7L20"], + headbutt: ["7M"], + hornattack: ["7L14"], + horndrill: ["7L39"], + hyperbeam: ["7M"], + icebeam: ["7M"], + megahorn: ["7M", "7L50"], + peck: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + psybeam: ["7L1"], + quickattack: ["7L10", "7L1"], + rest: ["7M"], + scald: ["7M"], + skullbash: ["7L1"], + substitute: ["7M"], + supersonic: ["7L4", "7L1"], + surf: ["7M"], + tailwhip: ["7L1"], + toxic: ["7M"], + waterfall: ["7M", "7L24"], + }}, + staryu: {learnset: { + blizzard: ["7M"], + bubblebeam: ["7L27"], + confuseray: ["7L22"], + dazzlinggleam: ["7M"], + facade: ["7M"], + flashcannon: ["7M"], + harden: ["7L1"], + headbutt: ["7M"], + hydropump: ["7L45"], + icebeam: ["7M"], + lightscreen: ["7M", "7L31"], + minimize: ["7L18"], + protect: ["7M"], + psychic: ["7M", "7L36"], + psywave: ["7L4"], + recover: ["7L40"], + reflect: ["7M"], + rest: ["7M"], + scald: ["7M"], + substitute: ["7M"], + surf: ["7M"], + swift: ["7L13"], + tackle: ["7L1"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + waterfall: ["7M"], + watergun: ["7L9"], + }}, + starmie: {learnset: { + blizzard: ["7M"], + dazzlinggleam: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + flashcannon: ["7M"], + harden: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + lightscreen: ["7M"], + protect: ["7M"], + psychic: ["7M"], + psywave: ["7L1"], + reflect: ["7M"], + rest: ["7M"], + scald: ["7M"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + }}, + mrmime: {learnset: { + barrier: ["7L1"], + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L1"], + dazzlinggleam: ["7M"], + doubleslap: ["7L10"], + dreameater: ["7M"], + encore: ["7L26"], + facade: ["7M"], + firepunch: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + lightscreen: ["7M", "7L36"], + meditate: ["7L6"], + mimic: ["7L16"], + pound: ["7L1"], + protect: ["7M"], + psybeam: ["7L30"], + psychic: ["7M", "7L46"], + psywave: ["7L20"], + reflect: ["7M", "7L36"], + rest: ["7M"], + seismictoss: ["7M"], + shadowball: ["7M"], + solarbeam: ["7M"], + substitute: ["7M", "7L40"], + taunt: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + scyther: {learnset: { + agility: ["7L20"], + airslash: ["7L38"], + brickbreak: ["7M"], + doubleteam: ["7L8"], + facade: ["7M"], + feint: ["7L12"], + focusenergy: ["7L4"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leer: ["7L1"], + lightscreen: ["7M"], + protect: ["7M"], + quickattack: ["7L1"], + razorwind: ["7L32"], + rest: ["7M"], + roost: ["7M"], + slash: ["7L26"], + substitute: ["7M"], + swordsdance: ["7L44"], + toxic: ["7M"], + uturn: ["7M"], + wingattack: ["7L16"], + xscissor: ["7M", "7L50"], + }}, + jynx: {learnset: { + blizzard: ["7M", "7L45"], + bodyslam: ["7L30"], + brickbreak: ["7M"], + calmmind: ["7M"], + confusion: ["7L12"], + doubleslap: ["7L22"], + dreameater: ["7M"], + facade: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M", "7L26"], + lick: ["7L6"], + lightscreen: ["7M"], + lovelykiss: ["7L35"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M", "7L40"], + reflect: ["7M"], + rest: ["7M"], + screech: ["7L18"], + seismictoss: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + taunt: ["7M"], + teleport: ["7M"], + toxic: ["7M"], + }}, + electabuzz: {learnset: { + brickbreak: ["7M"], + facade: ["7M"], + firepunch: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + lightscreen: ["7M", "7L28"], + lowkick: ["7L22"], + protect: ["7M"], + psychic: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + screech: ["7L39"], + seismictoss: ["7M"], + substitute: ["7M"], + swift: ["7L17"], + taunt: ["7M"], + teleport: ["7M"], + thunder: ["7M", "7L50"], + thunderbolt: ["7M", "7L44"], + thunderpunch: ["7M", "7L33"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L11"], + toxic: ["7M"], + }}, + magmar: {learnset: { + brickbreak: ["7M"], + clearsmog: ["7L17"], + confuseray: ["7L39"], + ember: ["7L1"], + facade: ["7M"], + fireblast: ["7M", "7L50"], + firepunch: ["7M", "7L33"], + firespin: ["7L28"], + flamethrower: ["7M", "7L44"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + lowkick: ["7L22"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + seismictoss: ["7M"], + smog: ["7L6"], + smokescreen: ["7L11"], + substitute: ["7M"], + taunt: ["7M"], + teleport: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + willowisp: ["7M"], + }}, + pinsir: {learnset: { + bind: ["7L4"], + brickbreak: ["7M", "7L16"], + bulkup: ["7M"], + dig: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + focusenergy: ["7L1"], + guillotine: ["7L50"], + harden: ["7L12"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + outrage: ["7M"], + protect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M", "7L8"], + stealthrock: ["7M"], + submission: ["7L26"], + substitute: ["7M"], + superpower: ["7M", "7L44"], + swordsdance: ["7L32"], + thrash: ["7L38"], + toxic: ["7M"], + vicegrip: ["7L1"], + xscissor: ["7M", "7L20"], + }}, + tauros: {learnset: { + blizzard: ["7M"], + doubleedge: ["7L46"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + focusenergy: ["7L38"], + headbutt: ["7M"], + helpinghand: ["7M"], + hornattack: ["7L18"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L24"], + outrage: ["7M", "7L50"], + protect: ["7M"], + rage: ["7L12"], + rest: ["7M", "7L30"], + rockslide: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L6"], + takedown: ["7L34"], + thrash: ["7L42"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + }}, + magikarp: {learnset: { + splash: ["7L1", "7S0"], + tackle: ["7L15"], + }}, + gyarados: {learnset: { + bind: ["7L16", "7L1"], + bite: ["7L1", "7L0"], + blizzard: ["7M"], + crunch: ["7L36"], + darkpulse: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L11", "7L1"], + dragontail: ["7M", "7L26"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + hydropump: ["7L46"], + hyperbeam: ["7M", "7L51"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L6", "7L1"], + outrage: ["7M", "7L41"], + protect: ["7M"], + rage: ["7L21"], + reflect: ["7M"], + rest: ["7M"], + scald: ["7M"], + substitute: ["7M"], + surf: ["7M"], + taunt: ["7M"], + thrash: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + waterfall: ["7M", "7L31"], + }}, + lapras: {learnset: { + blizzard: ["7M", "7L58"], + bodyslam: ["7L32", "7S0"], + confuseray: ["7L26", "7S0"], + dragonpulse: ["7M", "7L52"], + dreameater: ["7M"], + drillrun: ["7M"], + facade: ["7M"], + growl: ["7L6"], + headbutt: ["7M"], + hydropump: ["7L65"], + hyperbeam: ["7M"], + icebeam: ["7M", "7L39"], + iceshard: ["7L19", "7S0"], + irontail: ["7M"], + megahorn: ["7M"], + mist: ["7L13", "7S0"], + outrage: ["7M"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M"], + sing: ["7L1"], + solarbeam: ["7M"], + substitute: ["7M"], + surf: ["7M", "7L45"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + }}, + ditto: {learnset: { + transform: ["7L1"], + }}, + eevee: {learnset: { + bite: ["7L17"], + dig: ["7M"], + doubleedge: ["7L28"], + doublekick: ["7L10"], + facade: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M", "7L31"], + irontail: ["7M"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + sandattack: ["7L14"], + shadowball: ["7M"], + substitute: ["7M"], + swift: ["7L21"], + tackle: ["7L1"], + tailwhip: ["7L3"], + takedown: ["7L24"], + toxic: ["7M"], + }}, + eeveestarter: {learnset: { + baddybad: ["7T"], + bite: ["7L17"], + bouncybubble: ["7T"], + buzzybuzz: ["7T"], + dig: ["7M"], + doubleedge: ["7L28"], + doublekick: ["7L10"], + facade: ["7M"], + freezyfrost: ["7T"], + glitzyglow: ["7T"], + growl: ["7L1", "7S0"], + headbutt: ["7M"], + helpinghand: ["7M", "7L31"], + irontail: ["7M"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + sandattack: ["7L14"], + sappyseed: ["7T"], + shadowball: ["7M"], + sizzlyslide: ["7T"], + sparklyswirl: ["7T"], + substitute: ["7M"], + swift: ["7L21"], + tackle: ["7L1", "7S0"], + tailwhip: ["7L3", "7S0"], + takedown: ["7L24"], + toxic: ["7M"], + veeveevolley: ["7T"], + }}, + vaporeon: {learnset: { + acidarmor: ["7L24"], + aurorabeam: ["7L17"], + blizzard: ["7M"], + dig: ["7M"], + doublekick: ["7L10"], + facade: ["7M"], + growl: ["7L1"], + haze: ["7L21"], + headbutt: ["7M"], + helpinghand: ["7M", "7L28"], + hydropump: ["7L31"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irontail: ["7M"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + sandattack: ["7L14", "7L1"], + scald: ["7M"], + shadowball: ["7M"], + substitute: ["7M"], + surf: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L3", "7L1"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1", "7L0"], + yawn: ["7L1"], + }}, + jolteon: {learnset: { + agility: ["7L24"], + dig: ["7M"], + doublekick: ["7L10"], + facade: ["7M"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M", "7L28"], + hyperbeam: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + payday: ["7M"], + pinmissile: ["7L17"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + sandattack: ["7L14", "7L1"], + shadowball: ["7M"], + substitute: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L3", "7L1"], + thunder: ["7M", "7L31"], + thunderbolt: ["7M"], + thundershock: ["7L1", "7L0"], + thunderwave: ["7M", "7L21"], + toxic: ["7M"], + yawn: ["7L1"], + }}, + flareon: {learnset: { + dig: ["7M"], + doublekick: ["7L10"], + ember: ["7L1", "7L0"], + facade: ["7M"], + fireblast: ["7M"], + firespin: ["7L17"], + flamethrower: ["7M"], + flareblitz: ["7L31"], + focusenergy: ["7L24"], + growl: ["7L1"], + headbutt: ["7M"], + helpinghand: ["7M", "7L28"], + hyperbeam: ["7M"], + irontail: ["7M"], + payday: ["7M"], + protect: ["7M"], + quickattack: ["7L6"], + reflect: ["7M"], + rest: ["7M"], + sandattack: ["7L14", "7L1"], + shadowball: ["7M"], + smog: ["7L21"], + substitute: ["7M"], + superpower: ["7M"], + tackle: ["7L1"], + tailwhip: ["7L3", "7L1"], + toxic: ["7M"], + willowisp: ["7M"], + yawn: ["7L1"], + }}, + porygon: {learnset: { + agility: ["7L13"], + barrier: ["7L18", "7S0"], + blizzard: ["7M"], + conversion: ["7L31", "7S0"], + dreameater: ["7M"], + facade: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M", "7L40"], + icebeam: ["7M"], + irontail: ["7M"], + protect: ["7M"], + psybeam: ["7L9"], + psychic: ["7M"], + recover: ["7L36"], + reflect: ["7M"], + rest: ["7M"], + shadowball: ["7M"], + sharpen: ["7L4"], + solarbeam: ["7M"], + substitute: ["7M"], + tackle: ["7L1"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M", "7L27", "7S0"], + toxic: ["7M"], + triattack: ["7M", "7L22", "7S0"], + }}, + omanyte: {learnset: { + bite: ["7L22"], + blizzard: ["7M"], + constrict: ["7L1"], + facade: ["7M"], + headbutt: ["7M"], + hydropump: ["7L44", "7S0"], + icebeam: ["7M"], + leer: ["7L11"], + protect: ["7M", "7L33", "7S0"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L37", "7S0"], + rockthrow: ["7L26", "7S0"], + scald: ["7M"], + shellsmash: ["7L48"], + stealthrock: ["7M"], + substitute: ["7M"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L15"], + withdraw: ["7L4"], + }}, + omastar: {learnset: { + bide: ["7L1"], + bite: ["7L22"], + blizzard: ["7M"], + constrict: ["7L1"], + facade: ["7M"], + headbutt: ["7M"], + hydropump: ["7L50"], + hyperbeam: ["7M"], + icebeam: ["7M"], + leer: ["7L11", "7L1"], + protect: ["7M", "7L33"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L37"], + rockthrow: ["7L26"], + scald: ["7M"], + seismictoss: ["7M"], + shellsmash: ["7L60"], + spikecannon: ["7L1", "7L0"], + stealthrock: ["7M"], + substitute: ["7M"], + supersonic: ["7L1"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L15", "7L1"], + withdraw: ["7L4", "7L1"], + }}, + kabuto: {learnset: { + absorb: ["7L18"], + aquajet: ["7L24", "7S0"], + blizzard: ["7M"], + dig: ["7M"], + facade: ["7M"], + harden: ["7L6"], + headbutt: ["7M"], + icebeam: ["7M"], + leechlife: ["7L48"], + leer: ["7L12"], + megadrain: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L42", "7S0"], + rockthrow: ["7L30", "7S0"], + sandattack: ["7L36", "7S0"], + scald: ["7M"], + scratch: ["7L1"], + stealthrock: ["7M"], + substitute: ["7M"], + surf: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + }}, + kabutops: {learnset: { + absorb: ["7L18", "7L1"], + aquajet: ["7L24"], + blizzard: ["7M"], + brickbreak: ["7M"], + confuseray: ["7L1"], + dig: ["7M"], + facade: ["7M"], + feint: ["7L1"], + harden: ["7L6", "7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + leechlife: ["7L54"], + leer: ["7L12", "7L1"], + megadrain: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M", "7L45"], + rockthrow: ["7L30"], + sandattack: ["7L36"], + scald: ["7M"], + scratch: ["7L1"], + screech: ["7L1"], + seismictoss: ["7M"], + slash: ["7L1", "7L0"], + stealthrock: ["7M"], + substitute: ["7M"], + superpower: ["7M"], + surf: ["7M"], + swordsdance: ["7L63"], + toxic: ["7M"], + waterfall: ["7M"], + xscissor: ["7M"], + }}, + aerodactyl: {learnset: { + agility: ["7L28", "7S0"], + bite: ["7L1"], + crunch: ["7L35", "7S0"], + dragonpulse: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fly: ["7M", "7L49"], + headbutt: ["7M"], + hyperbeam: ["7M", "7L63"], + irontail: ["7M"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + roar: ["7L7"], + rockslide: ["7M", "7L42", "7S0"], + rockthrow: ["7L21", "7S0"], + roost: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + supersonic: ["7L14"], + takedown: ["7L56"], + taunt: ["7M"], + toxic: ["7M"], + wingattack: ["7L1"], + }}, + snorlax: {learnset: { + amnesia: ["7L45"], + blizzard: ["7M"], + bodyslam: ["7L52"], + brickbreak: ["7M"], + crunch: ["7L58"], + defensecurl: ["7L6"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M", "7L26", "7S1", "7S0"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + lick: ["7L19", "7S1", "7S0"], + outrage: ["7M"], + payday: ["7M"], + protect: ["7M"], + psychic: ["7M"], + reflect: ["7M"], + rest: ["7M", "7L32", "7S1", "7S0"], + rockslide: ["7M"], + screech: ["7L39"], + seismictoss: ["7M"], + selfdestruct: ["7M"], + shadowball: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + superpower: ["7M", "7L65"], + surf: ["7M"], + tackle: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + toxic: ["7M"], + yawn: ["7L13", "7S1", "7S0"], + }}, + articuno: {learnset: { + agility: ["7L40", "7S0"], + blizzard: ["7M", "7L64"], + facade: ["7M"], + fly: ["7M"], + gust: ["7L1"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M", "7L32", "7S0"], + iceshard: ["7L1"], + leer: ["7L16"], + mirrorcoat: ["7L24", "7S0"], + mist: ["7L8"], + protect: ["7M"], + reflect: ["7M", "7L48", "7S0"], + rest: ["7M"], + roost: ["7M", "7L56"], + skyattack: ["7L72"], + substitute: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + zapdos: {learnset: { + agility: ["7L40", "7S0"], + drillpeck: ["7L24", "7S0"], + facade: ["7M"], + fly: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + leer: ["7L16"], + lightscreen: ["7M", "7L48", "7S0"], + peck: ["7L1"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M", "7L56"], + skyattack: ["7L72"], + substitute: ["7M"], + thunder: ["7M", "7L64"], + thunderbolt: ["7M", "7L32", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L8"], + toxic: ["7M"], + uturn: ["7M"], + }}, + moltres: {learnset: { + agility: ["7L40", "7S0"], + airslash: ["7L24", "7S0"], + ember: ["7L1"], + facade: ["7M"], + fireblast: ["7M"], + firespin: ["7L8"], + flamethrower: ["7M", "7L32", "7S0"], + fly: ["7M"], + headbutt: ["7M"], + heatwave: ["7L48", "7S0"], + hyperbeam: ["7M"], + leer: ["7L16"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + roost: ["7M", "7L56"], + skyattack: ["7L72"], + solarbeam: ["7M", "7L64"], + substitute: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + willowisp: ["7M"], + wingattack: ["7L1"], + }}, + dratini: {learnset: { + agility: ["7L21"], + blizzard: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L14"], + dragontail: ["7M", "7L28"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M", "7L49"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + lightscreen: ["7M"], + outrage: ["7M", "7L42"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + slam: ["7L35"], + substitute: ["7M"], + surf: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M", "7L7"], + toxic: ["7M"], + waterfall: ["7M"], + wrap: ["7L1"], + }}, + dragonair: {learnset: { + agility: ["7L21"], + blizzard: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L14", "7L1"], + dragontail: ["7M", "7L28"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M", "7L64"], + icebeam: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + lightscreen: ["7M"], + outrage: ["7M", "7L52"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + slam: ["7L40"], + substitute: ["7M"], + surf: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M", "7L7", "7L1"], + toxic: ["7M"], + waterfall: ["7M"], + wrap: ["7L1"], + }}, + dragonite: {learnset: { + agility: ["7L21"], + aquajet: ["7L1"], + blizzard: ["7M"], + brickbreak: ["7M"], + dragonpulse: ["7M"], + dragonrage: ["7L14", "7L1"], + dragontail: ["7M", "7L28"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M", "7L1"], + flamethrower: ["7M"], + fly: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M", "7L70"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + leer: ["7L1"], + lightscreen: ["7M"], + mist: ["7L1"], + outrage: ["7M", "7L52"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + roost: ["7M", "7L88"], + slam: ["7L40"], + substitute: ["7M"], + superpower: ["7M"], + surf: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L1"], + thunderwave: ["7M", "7L7", "7L1"], + toxic: ["7M"], + waterfall: ["7M"], + wingattack: ["7L1", "7L0"], + wrap: ["7L1"], + }}, + mewtwo: {learnset: { + agility: ["7L88"], + amnesia: ["7L44", "7S0"], + barrier: ["7L77"], + blizzard: ["7M"], + brickbreak: ["7M"], + bulkup: ["7M"], + calmmind: ["7M", "7L99"], + confuseray: ["7L1"], + confusion: ["7L1"], + disable: ["7L1"], + dreameater: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + mist: ["7L11"], + payday: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + psybeam: ["7L22"], + psychic: ["7M", "7L66", "7S0"], + psywave: ["7L1"], + recover: ["7L55", "7S0"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + seismictoss: ["7M"], + selfdestruct: ["7M"], + shadowball: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + swift: ["7L33", "7S0"], + taunt: ["7M"], + teleport: ["7M", "7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7M"], + willowisp: ["7M"], + }}, + mew: {learnset: { + amnesia: ["7L22"], + barrier: ["7L44"], + blizzard: ["7M"], + brickbreak: ["7M"], + bulkup: ["7M"], + calmmind: ["7M"], + confusion: ["7L1"], + darkpulse: ["7M"], + dazzlinggleam: ["7M"], + dig: ["7M"], + dragonpulse: ["7M"], + dragontail: ["7M"], + dreameater: ["7M"], + drillrun: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + firepunch: ["7M"], + flamethrower: ["7M"], + flashcannon: ["7M"], + fly: ["7M"], + foulplay: ["7M"], + headbutt: ["7M"], + helpinghand: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icepunch: ["7M"], + irontail: ["7M"], + lightscreen: ["7M"], + megadrain: ["7M"], + megahorn: ["7M"], + megapunch: ["7L55"], + metronome: ["7L66"], + mimic: ["7L1"], + nastyplot: ["7L88"], + outrage: ["7M"], + payday: ["7M"], + playrough: ["7M"], + poisonjab: ["7M"], + pound: ["7L1", "7S0"], + protect: ["7M"], + psychic: ["7M", "7L77"], + psywave: ["7L33"], + reflect: ["7M"], + rest: ["7M"], + rockslide: ["7M"], + roost: ["7M"], + scald: ["7M"], + seismictoss: ["7M"], + selfdestruct: ["7M"], + shadowball: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + stealthrock: ["7M"], + substitute: ["7M"], + superpower: ["7M"], + surf: ["7M"], + swift: ["7L11"], + taunt: ["7M"], + teleport: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + transform: ["7L99"], + triattack: ["7M"], + uturn: ["7M"], + waterfall: ["7M"], + willowisp: ["7M"], + xscissor: ["7M"], + }}, + meltan: {learnset: { + acidarmor: ["7L36"], + flashcannon: ["7M", "7L45"], + harden: ["7L1"], + headbutt: ["7M", "7L1"], + protect: ["7M"], + rest: ["7M"], + substitute: ["7M"], + tailwhip: ["7L9"], + thunderbolt: ["7M"], + thundershock: ["7L27"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + }}, + melmetal: {learnset: { + acidarmor: ["7L36"], + brickbreak: ["7M"], + doubleironbash: ["7L72"], + earthquake: ["7M"], + facade: ["7M"], + flashcannon: ["7M", "7L45"], + harden: ["7L1"], + headbutt: ["7M", "7L1"], + hyperbeam: ["7M", "7L90"], + icebeam: ["7M"], + icepunch: ["7M"], + megapunch: ["7L54"], + protect: ["7M", "7L63"], + rest: ["7M"], + rockslide: ["7M"], + selfdestruct: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + superpower: ["7M", "7L81"], + tailwhip: ["7L9", "7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7M", "7L1", "7L0"], + thundershock: ["7L27"], + thunderwave: ["7M", "7L18", "7L1"], + toxic: ["7M"], + }}, +}; + +exports.BattleLearnsets = BattleLearnsets; diff --git a/data/mods/letsgo/moves.js b/data/mods/letsgo/moves.js new file mode 100644 index 0000000000000..2f83f04fe6d62 --- /dev/null +++ b/data/mods/letsgo/moves.js @@ -0,0 +1,124 @@ +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + "absorb": { + inherit: true, + basePower: 40, + pp: 15, + }, + "baddybad": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "bouncybubble": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "buzzybuzz": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "doubleironbash": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "floatyfall": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "freezyfrost": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "glitzyglow": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "megadrain": { + inherit: true, + basePower: 75, + pp: 10, + }, + "metronome": { + inherit: true, + onHit(target, source, effect) { + let moves = []; + for (let i in exports.BattleMovedex) { + let move = this.getMove(i); + if (i !== move.id) continue; + if (move.gen !== 1) continue; + // @ts-ignore + if (effect.noMetronome.includes(move.id)) continue; + moves.push(move); + } + let randomMove = ''; + if (moves.length) { + moves.sort((a, b) => a.num - b.num); + randomMove = this.sample(moves).id; + } + if (!randomMove) return false; + this.useMove(randomMove, target); + }, + }, + "pikapapow": { + inherit: true, + // These moves have valid numbers in the code but are only usable when shaking the Switch remote + isUnreleased: false, + }, + "sappyseed": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "sizzlyslide": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "solarbeam": { + inherit: true, + basePower: 200, + }, + "sparklyswirl": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "splishysplash": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, + "skyattack": { + inherit: true, + basePower: 200, + }, + "teleport": { + inherit: true, + 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.", + shortDesc: "User switches out.", + priority: -6, + selfSwitch: true, + onTryHit: true, + }, + "veeveevolley": { + inherit: true, + // These moves have valid numbers in the code but are only usable when shaking the Switch remote + isUnreleased: false, + }, + "zippyzap": { + inherit: true, + isNonstandard: false, + isUnreleased: false, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/data/mods/letsgo/pokedex.js b/data/mods/letsgo/pokedex.js new file mode 100644 index 0000000000000..cc32e18b194c9 --- /dev/null +++ b/data/mods/letsgo/pokedex.js @@ -0,0 +1,180 @@ +'use strict'; + +/**@type {{[k: string]: ModdedTemplateData}} */ +let BattlePokedex = { + pichu: { + inherit: true, + evos: [], + }, + pikachu: { + inherit: true, + prevo: '', + evos: ["raichu"], + evoLevel: undefined, + }, + raichualola: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, + cleffa: { + inherit: true, + evos: [], + }, + clefairy: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, + igglybuff: { + inherit: true, + evos: [], + }, + jigglypuff: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, + golbat: { + inherit: true, + evos: [], + }, + gloom: { + inherit: true, + evos: ["vileplume"], + }, + poliwhirl: { + inherit: true, + evos: ["poliwrath"], + }, + slowpoke: { + inherit: true, + evos: ["slowbro"], + }, + magneton: { + inherit: true, + evos: [], + }, + onix: { + inherit: true, + evos: [], + }, + exeggcute: { + inherit: true, + evos: ["exeggutor"], + }, + exeggutoralola: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, + cubone: { + inherit: true, + evos: ["marowak"], + }, + marowakalola: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, + tyrogue: { + inherit: true, + evos: ["hitmontop"], + }, + hitmonlee: { + inherit: true, + prevo: '', + }, + hitmonchan: { + inherit: true, + prevo: '', + }, + lickitung: { + inherit: true, + evos: [], + }, + rhydon: { + inherit: true, + evos: [], + }, + happiny: { + inherit: true, + evos: [], + }, + chansey: { + inherit: true, + prevo: '', + evos: [], + evoLevel: undefined, + }, + tangela: { + inherit: true, + evos: [], + }, + seadra: { + inherit: true, + evos: [], + }, + mimejr: { + inherit: true, + evos: [], + }, + mrmime: { + inherit: true, + prevo: '', + evoLevel: undefined, + evoMove: '', + }, + scyther: { + inherit: true, + evos: [], + }, + smoochum: { + inherit: true, + evos: [], + }, + jynx: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, + elekid: { + inherit: true, + evos: [], + }, + electabuzz: { + inherit: true, + prevo: '', + evos: [], + evoLevel: undefined, + }, + magby: { + inherit: true, + evos: [], + }, + magmar: { + inherit: true, + prevo: '', + evos: [], + evoLevel: undefined, + }, + eevee: { + inherit: true, + evos: ["jolteon", "flareon", "vaporeon"], + }, + porygon: { + inherit: true, + evos: [], + }, + munchlax: { + inherit: true, + evos: [], + }, + snorlax: { + inherit: true, + prevo: '', + evoLevel: undefined, + }, +}; + +exports.BattlePokedex = BattlePokedex; diff --git a/data/mods/letsgo/random-teams.js b/data/mods/letsgo/random-teams.js new file mode 100644 index 0000000000000..61e135ba1ff7a --- /dev/null +++ b/data/mods/letsgo/random-teams.js @@ -0,0 +1,293 @@ +'use strict'; + +const RandomTeams = require('../../random-teams'); + +class RandomLetsGoTeams extends RandomTeams { + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {RandomTeamsTypes["TeamDetails"]} [teamDetails] + * @return {RandomTeamsTypes["RandomSet"]} + */ + randomSet(template, slot = 1, teamDetails = {}) { + template = this.getTemplate(template); + let species = template.species; + + if (!template.exists || (!template.randomBattleMoves && !template.learnset)) { + template = this.getTemplate('bulbasaur'); + + let err = new Error('Template incompatible with random battles: ' + species); + Monitor.crashlog(err, 'The Let\'s Go randbat set generator'); + } + + if (template.battleOnly) { + // Only change the species. The template has custom moves, and may have different typing and requirements. + species = template.baseSpecies; + } + + let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : template.learnset ? Object.keys(template.learnset) : []); + /**@type {string[]} */ + let moves = []; + /**@type {{[k: string]: true}} */ + let hasType = {}; + hasType[template.types[0]] = true; + if (template.types[1]) { + hasType[template.types[1]] = true; + } + + /**@type {{[k: string]: boolean}} */ + let hasMove = {}; + let counter; + + do { + // Keep track of all moves we have: + hasMove = {}; + for (const setMoveid of moves) { + hasMove[setMoveid] = true; + } + + // Choose next 4 moves from learnset/viable moves and add them to moves list: + while (moves.length < 4 && movePool.length) { + let moveid = this.sampleNoReplace(movePool); + hasMove[moveid] = true; + moves.push(moveid); + } + + counter = this.queryMoves(moves, hasType, {}, movePool); + + // Iterate through the moves again, this time to cull them: + for (const [i, setMoveid] of moves.entries()) { + let move = this.getMove(setMoveid); + let moveid = move.id; + let rejected = false; + let isSetup = false; + + switch (moveid) { + // Set up once and only if we have the moves for it + case 'bulkup': case 'swordsdance': + if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) rejected = true; + if (counter.Physical + counter['physicalpool'] < 2) rejected = true; + isSetup = true; + break; + case 'calmmind': case 'nastyplot': case 'quiverdance': + if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; + if (counter.Special + counter['specialpool'] < 2) rejected = true; + isSetup = true; + break; + case 'growth': case 'shellsmash': + if (counter.setupType !== 'Mixed') rejected = true; + if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2) rejected = true; + isSetup = true; + break; + case 'agility': + if (counter.damagingMoves.length < 2 && !counter.setupType) rejected = true; + if (!counter.setupType) isSetup = true; + break; + + // Bad after setup + case 'dragontail': + if (counter.setupType || !!counter['speedsetup'] || hasMove['encore'] || hasMove['roar'] || hasMove['whirlwind']) rejected = true; + break; + case 'fakeout': case 'uturn': + if (counter.setupType || !!counter['speedsetup'] || hasMove['substitute']) rejected = true; + break; + case 'haze': case 'leechseed': case 'roar': case 'whirlwind': + if (counter.setupType || !!counter['speedsetup'] || hasMove['dragontail']) rejected = true; + break; + case 'nightshade': case 'seismictoss': case 'superfang': + if (counter.damagingMoves.length > 1 || counter.setupType) rejected = true; + break; + case 'protect': + if (counter.setupType || hasMove['rest'] || hasMove['lightscreen'] || hasMove['reflect']) rejected = true; + break; + case 'stealthrock': + if (counter.setupType || !!counter['speedsetup'] || teamDetails.stealthRock) rejected = true; + break; + + // Bit redundant to have both + case 'leechlife': case 'substitute': + if (hasMove['uturn']) rejected = true; + break; + case 'dragonclaw': case 'dragonpulse': + if (hasMove['dragontail'] || hasMove['outrage']) rejected = true; + break; + case 'thunderbolt': + if (hasMove['thunder']) rejected = true; + break; + case 'flareblitz': case 'flamethrower': case 'lavaplume': + if (hasMove['fireblast'] || hasMove['firepunch']) rejected = true; + break; + case 'megadrain': + if (hasMove['petaldance'] || hasMove['powerwhip']) rejected = true; + break; + case 'bonemerang': + if (hasMove['earthquake']) rejected = true; + break; + case 'icebeam': + if (hasMove['blizzard']) rejected = true; + break; + case 'return': + if (hasMove['bodyslam'] || hasMove['facade'] || hasMove['doubleedge']) rejected = true; + break; + case 'psychic': + if (hasMove['psyshock']) rejected = true; + break; + case 'rockslide': + if (hasMove['stoneedge']) rejected = true; + break; + case 'hydropump': case 'willowisp': + if (hasMove['scald']) rejected = true; + break; + case 'surf': + if (hasMove['hydropump'] || hasMove['scald']) rejected = true; + break; + } + + // Increased/decreased priority moves are unneeded with moves that boost only speed + if (move.priority !== 0 && !!counter['speedsetup']) { + rejected = true; + } + + // 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 + if (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2) rejected = true; + } + // @ts-ignore + if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2) { + // Mono-attacking with setup and RestTalk is allowed + // Reject Status moves only if there is nothing else to reject + // @ts-ignore + if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; + } + + // Pokemon should have moves that benefit their Type, as well as moves required by its forme + // @ts-ignore + if (!rejected && (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3)) && + (((counter.damagingMoves.length === 0 || !counter.stab) && (counter['physicalpool'] || counter['specialpool'])) || + (hasType['Dark'] && !counter['Dark']) || + (hasType['Dragon'] && !counter['Dragon']) || + (hasType['Electric'] && !counter['Electric']) || + (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'])) || + (hasType['Fire'] && !counter['Fire']) || + (hasType['Ghost'] && !hasType['Dark'] && !counter['Ghost']) || + (hasType['Ground'] && !counter['Ground']) || + (hasType['Ice'] && !counter['Ice']) || + (hasType['Water'] && (!counter['Water'] || !counter.stab)) || + (template.requiredMove && movePool.includes(toId(template.requiredMove))))) { + // Reject Status or non-STAB + if (!isSetup && !move.weather) { + if (move.category === 'Status' || !hasType[move.type] || move.selfSwitch || move.basePower && move.basePower < 40 && !move.multihit) rejected = true; + } + } + + // Remove rejected moves from the move list + if (rejected && movePool.length) { + moves.splice(i, 1); + break; + } + } + } while (moves.length < 4 && movePool.length); + + let ivs = { + hp: 31, + atk: 31, + def: 31, + spa: 31, + spd: 31, + spe: 31, + }; + + // Minimize confusion damage + if (!counter['Physical'] && !hasMove['transform']) { + ivs.atk = 0; + } + + return { + name: template.baseSpecies, + species: species, + level: 100, + gender: template.gender, + happiness: 70, + shiny: this.randomChance(1, 1024), + item: (template.requiredItem || ''), + ability: 'No Ability', + moves: moves, + evs: {hp: 20, atk: 20, def: 20, spa: 20, spd: 20, spe: 20}, + ivs: ivs, + }; + } + + randomTeam() { + let pokemon = []; + + let pokemonPool = []; + for (let id in this.data.FormatsData) { + let template = this.getTemplate(id); + if (template.num < 1 || (template.num > 151 && ![808, 809].includes(template.num)) || template.nfe || !template.randomBattleMoves || !template.randomBattleMoves.length) continue; + pokemonPool.push(id); + } + + /**@type {{[k: string]: number}} */ + let typeCount = {}; + /**@type {{[k: string]: number}} */ + let typeComboCount = {}; + /**@type {{[k: string]: number}} */ + let baseFormes = {}; + /**@type {RandomTeamsTypes["TeamDetails"]} */ + let teamDetails = {}; + + while (pokemonPool.length && pokemon.length < 6) { + let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); + if (!template.exists) continue; + + // Limit to one of each species (Species Clause) + if (baseFormes[template.baseSpecies]) continue; + + let types = template.types; + + // Limit 2 of any type + let skip = false; + for (const type of template.types) { + if (typeCount[type] > 1 && this.randomChance(4, 5)) { + skip = true; + break; + } + } + if (skip) continue; + + let set = this.randomSet(template, pokemon.length, teamDetails); + + // Limit 1 of any type combination + let typeCombo = types.slice().sort().join(); + if (typeComboCount[typeCombo] >= 1) continue; + + // Okay, the set passes, add it to our team + pokemon.push(set); + + // Now that our Pokemon has passed all checks, we can increment our counters + baseFormes[template.baseSpecies] = 1; + + // Increment type counters + for (const type of types) { + if (type in typeCount) { + typeCount[type]++; + } else { + typeCount[type] = 1; + } + } + if (typeCombo in typeComboCount) { + typeComboCount[typeCombo]++; + } else { + typeComboCount[typeCombo] = 1; + } + + // Team details + if (set.moves.includes('stealthrock')) teamDetails['stealthRock'] = 1; + if (set.moves.includes('rapidspin')) teamDetails['rapidSpin'] = 1; + } + return pokemon; + } +} + +module.exports = RandomLetsGoTeams; diff --git a/data/mods/letsgo/rulesets.js b/data/mods/letsgo/rulesets.js new file mode 100644 index 0000000000000..a279fffc938d6 --- /dev/null +++ b/data/mods/letsgo/rulesets.js @@ -0,0 +1,178 @@ +'use strict'; + +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { + pokemon: { + effectType: 'ValidatorRule', + name: 'Pokemon', + onValidateTeam(team, format) { + let problems = []; + if (team.length > 6) problems.push('Your team has more than six Pok\u00E9mon.'); + // Unlike Pokemon like Kyurem-B and Kyurem-W, the two Starter Pokemon cannot be hacked onto other games. + let hasStarter = 0; + for (const set of team) { + if (set.species === 'Pikachu-Starter' || set.species === 'Eevee-Starter') { + hasStarter++; + if (hasStarter > 1) { + problems.push(`You can only have one of Pikachu-Starter or Eevee-Starter on a team.`); + break; + } + } + } + return problems; + }, + onChangeSet(set, format) { + let template = this.getTemplate(set.species); + let baseTemplate = this.getTemplate(template.baseSpecies); + let problems = []; + let allowAVs = !!(format && this.getRuleTable(format).has('allowavs')); + let allowCAP = !!(format && this.getRuleTable(format).has('allowcap')); + + if (set.species === set.name) delete set.name; + const validNum = (baseTemplate.num <= 151 && baseTemplate.num >= 1) || [808, 809].includes(baseTemplate.num); + if (!validNum) { + problems.push( + `Only Pok\u00E9mon whose base formes are from Gen 1, Meltan, and Melmetal can be used.`, + `(${set.species} is from Gen ${baseTemplate.gen === 1 ? 7 : baseTemplate.gen}.)` + ); + } + if (template.forme && (!['Alola', 'Mega', 'Mega-X', 'Mega-Y', 'Starter'].includes(template.forme) || template.species === 'Pikachu-Alola')) { + problems.push(`${set.species}'s forme ${template.forme} is not available in Let's Go.`); + } + if (set.moves) { + for (const moveid of set.moves) { + let move = this.getMove(moveid); + if (move.gen > this.gen) { + problems.push(move.name + ' does not exist in gen ' + this.gen + '.'); + } else if (!allowCAP && move.isNonstandard) { + problems.push(move.name + ' does not exist.'); + } + } + } + if (set.moves && set.moves.length > 4) { + problems.push((set.name || set.species) + ' has more than four moves.'); + } + if (set.level && set.level > 100) { + problems.push((set.name || set.species) + ' is higher than level 100.'); + } + + if (!allowCAP || !template.tier.startsWith('CAP')) { + if (template.isNonstandard && template.num > -5000) { + problems.push(set.species + ' does not exist.'); + } + } + + if (!allowAVs && set.evs) { + const statNames = {hp: 'HP', atk: 'Attack', def: 'Defense', spa: 'Special Attack', spd: 'Special Defense', spe: 'Speed'}; + for (let k in set.evs) { + // @ts-ignore + if (set.evs[k]) { + // @ts-ignore + problems.push(`${set.name || set.species} has ${set.evs[k]} AVs/EVs in ${statNames[k]}, but AVs and EVs are not allowed in this format.`); + break; + } + // @ts-ignore + set.evs[k] = 0; + } + } + + set.ability = 'No Ability'; + // Temporary hack to allow mega evolution + if (set.item) { + let item = this.getItem(set.item); + if (item.megaEvolves !== template.baseSpecies) { + problems.push(`Items aren't allowed in Let's Go.`); + } + } + + if (!set.happiness || set.happiness !== 70) { + set.happiness = 70; + } + + // ----------- legality line ------------------------------------------ + if (!this.getRuleTable(format).has('-illegal')) return problems; + // everything after this line only happens if we're doing legality enforcement + + // Pokestar studios + if (template.num <= -5000 && template.isNonstandard) { + problems.push(`${set.species} cannot be obtained by legal means.`); + } + + // Legendary Pokemon must have at least 3 perfect IVs in gen 6 + if (set.ivs && this.gen >= 6 && (baseTemplate.gen >= 6 || format.requirePentagon) && (template.eggGroups[0] === 'Undiscovered' || template.species === 'Manaphy') && !template.prevo && !template.nfe && + // exceptions + template.species !== 'Unown' && template.baseSpecies !== 'Pikachu' && (template.baseSpecies !== 'Diancie' || !set.shiny)) { + let perfectIVs = 0; + for (let i in set.ivs) { + // @ts-ignore + if (set.ivs[i] >= 31) perfectIVs++; + } + let reason = (format.requirePentagon ? " and this format requires gen " + this.gen + " Pokémon" : " in gen 6"); + if (perfectIVs < 3) problems.push((set.name || set.species) + " must have at least three perfect IVs because it's a legendary" + reason + "."); + } + + // limit one of each move + let moves = []; + if (set.moves) { + /**@type {{[k: string]: true}} */ + let hasMove = {}; + for (const moveId of set.moves) { + let move = this.getMove(moveId); + let moveid = move.id; + if (hasMove[moveid]) continue; + hasMove[moveid] = true; + moves.push(moveId); + } + } + set.moves = moves; + + let battleForme = template.battleOnly && template.species; + if (battleForme) { + if (template.isMega) set.species = template.baseSpecies; + if (template.requiredMove && !set.moves.includes(toId(template.requiredMove))) { + problems.push(`${template.species} transforms in-battle with ${template.requiredMove}.`); // Meloetta-Pirouette, Rayquaza-Mega + } + } else { + if (template.requiredMove && !set.moves.includes(toId(template.requiredMove))) { + problems.push(`${(set.name || set.species)} needs to have the move ${template.requiredMove}.`); // Keldeo-Resolute + } + } + + return problems; + }, + }, + allowavs: { + effectType: 'ValidatorRule', + name: 'Allow AVs', + desc: "Tells formats with the 'letsgo' mod to take Awakening Values into consideration when calculating stats", + onChangeSet(set, format) { + /**@type {string[]} */ + let problems = ([]); + let avs = this.getAwakeningValues(set); + if (set.evs) { + for (let k in set.evs) { + // @ts-ignore + avs[k] = set.evs[k]; + // @ts-ignore + if (typeof avs[k] !== 'number' || avs[k] < 0) { + // @ts-ignore + avs[k] = 0; + } + } + } + + // Pokemon cannot have more than 200 Awakening Values in a stat. It is impossible to hack more than 200 AVs onto a stat, so legality doesn't matter. + for (let av in avs) { + let statNames = {hp: 'HP', atk: 'Attack', def: 'Defense', spa: 'Special Attack', spd: 'Special Defense', spe: 'Speed'}; + if (avs[av] > 200) { + // @ts-ignore + problems.push(`${set.name || set.species} has more than 200 Awakening Values in its ${statNames[av]}.`); + } + } + return problems; + }, + // Partially implemented in the modified pokemon rule above + }, +}; + +exports.BattleFormats = BattleFormats; diff --git a/data/mods/letsgo/scripts.js b/data/mods/letsgo/scripts.js new file mode 100644 index 0000000000000..77e85f535aa6e --- /dev/null +++ b/data/mods/letsgo/scripts.js @@ -0,0 +1,68 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + init() { + this.modData('Abilities', 'noability').isNonstandard = false; + for (let i in this.data.Pokedex) { + this.modData('Pokedex', i).abilities = {0: 'No Ability'}; + } + }, + /** + * Given a table of base stats and a pokemon set, return the actual stats. + * @param {StatsTable} baseStats + * @param {PokemonSet} set + * @return {StatsTable} + */ + spreadModify(baseStats, set) { + /** @type {any} */ + const modStats = {atk: 10, def: 10, spa: 10, spd: 10, spe: 10}; + for (let statName in modStats) { + // @ts-ignore + let stat = baseStats[statName]; + // @ts-ignore + modStats[statName] = Math.floor((Math.floor(2 * stat + set.ivs[statName]) * set.level / 100 + 5)); + } + if ('hp' in baseStats) { + let stat = baseStats['hp']; + modStats['hp'] = Math.floor(Math.floor(2 * stat + set.ivs['hp'] + 100) * set.level / 100 + 10); + } + return this.natureModify(modStats, set); + }, + + /** + * @param {StatsTable} stats + * @param {PokemonSet} set + * @return {StatsTable} + */ + natureModify(stats, set) { + let nature = this.getNature(set.nature); + // @ts-ignore + if (nature.plus) stats[nature.plus] = Math.floor(stats[nature.plus] * 1.1); + // @ts-ignore + if (nature.minus) stats[nature.minus] = Math.floor(stats[nature.minus] * 0.9); + set.happiness = 70; + let friendshipValue = Math.floor((set.happiness / 255 / 10 + 1) * 100); + for (const stat in stats) { + if (stat !== 'hp') { + // @ts-ignore + stats[stat] = Math.floor(stats[stat] * friendshipValue / 100); + } + // @ts-ignore + stats[stat] += this.getAwakeningValues(set, stat); + } + return stats; + }, + + pokemon: { + getWeight() { + let weight = this.template.weightkg; + weight = this.battle.runEvent('ModifyWeight', this, null, null, weight); + if (weight < 0.1) weight = 0.1; + let weightModifierFinal = 20 * Math.random() * 0.01; + return weight + (weight * (this.battle.random(2) === 1 ? 1 : -1) * weightModifierFinal); + }, + }, +}; + +exports.BattleScripts = BattleScripts; diff --git a/data/mods/megamons/scripts.js b/data/mods/megamons/scripts.js new file mode 100644 index 0000000000000..e7f1eda857f6b --- /dev/null +++ b/data/mods/megamons/scripts.js @@ -0,0 +1,30 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + init() { + for (let i in this.data.Pokedex) { + let pokemon = this.data.Pokedex[i]; + switch (pokemon.species) { + case 'Blaziken-Mega': + case 'Crucibelle Mega': + case 'Gengar-Mega': + case 'Mewtwo-Mega-X': + case 'Mewtwo-Mega-Y': + case 'Rayquaza-Mega': + break; + default: + switch (pokemon.forme) { + case 'Mega': + case 'Mega-X': + case 'Mega-Y': + this.modData('FormatsData', i).isMega = true; + this.modData('FormatsData', i).battleOnly = false; + this.modData('FormatsData', i).requiredItem = undefined; + } + } + } + }, +}; + +exports.BattleScripts = BattleScripts; diff --git a/data/mods/mixandmega/items.js b/data/mods/mixandmega/items.js new file mode 100644 index 0000000000000..64d6d4b586953 --- /dev/null +++ b/data/mods/mixandmega/items.js @@ -0,0 +1,63 @@ +'use strict'; + +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { + blueorb: { + inherit: true, + onSwitchIn(pokemon) { + if (pokemon.isActive && !pokemon.template.isPrimal) { + this.insertQueue({pokemon: pokemon, choice: 'runPrimal'}); + } + }, + onPrimal(pokemon) { + /**@type {Template} */ + // @ts-ignore + let template = this.getMixedTemplate(pokemon.originalSpecies, 'Kyogre-Primal'); + if (pokemon.originalSpecies === 'Kyogre') { + pokemon.formeChange(template, this.effect, true); + } else { + pokemon.formeChange(template, this.effect, true); + pokemon.baseTemplate = template; + this.add('-start', pokemon, 'Blue Orb', '[silent]'); + } + }, + onTakeItem(item) { + return false; + }, + }, + redorb: { + inherit: true, + onSwitchIn(pokemon) { + if (pokemon.isActive && !pokemon.template.isPrimal) { + this.insertQueue({pokemon: pokemon, choice: 'runPrimal'}); + } + }, + onPrimal(pokemon) { + /**@type {Template} */ + // @ts-ignore + let template = this.getMixedTemplate(pokemon.originalSpecies, 'Groudon-Primal'); + if (pokemon.originalSpecies === 'Groudon') { + pokemon.formeChange(template, this.effect, true); + } else { + pokemon.formeChange(template, this.effect, true); + pokemon.baseTemplate = template; + this.add('-start', pokemon, 'Red Orb', '[silent]'); + let apparentSpecies = pokemon.illusion ? pokemon.illusion.template.species : pokemon.originalSpecies; + let oTemplate = this.getTemplate(apparentSpecies); + if (pokemon.illusion) { + let types = oTemplate.types; + if (types.length > 1 || types[types.length - 1] !== 'Fire') { + this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]'); + } + } else if (oTemplate.types.length !== pokemon.template.types.length || oTemplate.types[1] !== pokemon.template.types[1]) { + this.add('-start', pokemon, 'typechange', pokemon.template.types.join('/'), '[silent]'); + } + } + }, + onTakeItem(item) { + return false; + }, + }, +}; + +exports.BattleItems = BattleItems; diff --git a/mods/mixandmega/scripts.js b/data/mods/mixandmega/scripts.js similarity index 58% rename from mods/mixandmega/scripts.js rename to data/mods/mixandmega/scripts.js index 56f30fa2f873c..59081cc886e7f 100644 --- a/mods/mixandmega/scripts.js +++ b/data/mods/mixandmega/scripts.js @@ -1,77 +1,73 @@ 'use strict'; -exports.BattleScripts = { - init: function () { +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { + init() { for (let id in this.data.Items) { if (!this.data.Items[id].megaStone) continue; this.modData('Items', id).onTakeItem = false; } }, - canMegaEvo: function (pokemon) { - if (pokemon.template.isMega || pokemon.template.isPrimal) return false; + canMegaEvo(pokemon) { + if (pokemon.template.isMega || pokemon.template.isPrimal) return null; - let item = pokemon.getItem(); + const item = pokemon.getItem(); if (item.megaStone) { - if (item.megaStone === pokemon.species) return false; + if (item.megaStone === pokemon.species) return null; return item.megaStone; - } else if (pokemon.set.moves.indexOf('dragonascent') >= 0) { + } else if (pokemon.baseMoves.includes('dragonascent')) { return 'Rayquaza-Mega'; } else { - return false; + return null; } }, - runMegaEvo: function (pokemon) { + runMegaEvo(pokemon) { if (pokemon.template.isMega || pokemon.template.isPrimal) return false; - let template = this.getMixedTemplate(pokemon.originalSpecies, pokemon.canMegaEvo); - let side = pokemon.side; + + const isUltraBurst = !pokemon.canMegaEvo; + /**@type {Template} */ + // @ts-ignore + const template = this.getMixedTemplate(pokemon.originalSpecies, pokemon.canMegaEvo || pokemon.canUltraBurst); + const side = pokemon.side; // Pokémon affected by Sky Drop cannot Mega Evolve. Enforce it here for now. - let foeActive = side.foe.active; - for (let i = 0; i < foeActive.length; i++) { - if (foeActive[i].volatiles['skydrop'] && foeActive[i].volatiles['skydrop'].source === pokemon) { + for (const foeActive of side.foe.active) { + if (foeActive.volatiles['skydrop'] && foeActive.volatiles['skydrop'].source === pokemon) { return false; } } - pokemon.formeChange(template); - pokemon.baseTemplate = template; // Mega Evolution is permanent - // Do we have a proper sprite for it? - if (this.getTemplate(pokemon.canMegaEvo).baseSpecies === pokemon.originalSpecies) { - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('detailschange', pokemon, pokemon.details); - this.add('-mega', pokemon, template.baseSpecies, template.requiredItem); + // @ts-ignore + if (this.getTemplate(pokemon.canMegaEvo).baseSpecies === pokemon.originalSpecies || isUltraBurst) { + pokemon.formeChange(template, pokemon.getItem(), true); } else { let oTemplate = this.getTemplate(pokemon.originalSpecies); let oMegaTemplate = this.getTemplate(template.originalMega); - if (template.originalMega === 'Rayquaza-Mega') { - this.add('message', "" + pokemon.side.name + "'s fervent wish has reached " + pokemon.species + "!"); - } else { - this.add('message', "" + pokemon.species + "'s " + pokemon.getItem().name + " is reacting to " + pokemon.side.name + "'s Mega Bracelet!"); - } - this.add('-formechange', pokemon, oTemplate.species, template.requiredItem); - this.add('message', template.baseSpecies + " has Mega Evolved into Mega " + template.baseSpecies + "!"); + pokemon.formeChange(template, pokemon.getItem(), true); this.add('-start', pokemon, oMegaTemplate.requiredItem || oMegaTemplate.requiredMove, '[silent]'); if (oTemplate.types.length !== pokemon.template.types.length || oTemplate.types[1] !== pokemon.template.types[1]) { this.add('-start', pokemon, 'typechange', pokemon.template.types.join('/'), '[silent]'); } } - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; - pokemon.canMegaEvo = false; + pokemon.canMegaEvo = null; + if (isUltraBurst) pokemon.canUltraBurst = null; return true; }, - getMixedTemplate: function (originalSpecies, megaSpecies) { + getMixedTemplate(originalSpecies, megaSpecies) { let originalTemplate = this.getTemplate(originalSpecies); let megaTemplate = this.getTemplate(megaSpecies); if (originalTemplate.baseSpecies === megaTemplate.baseSpecies) return megaTemplate; + // @ts-ignore let deltas = this.getMegaDeltas(megaTemplate); + // @ts-ignore let template = this.doGetMixedTemplate(originalTemplate, deltas); return template; }, - getMegaDeltas: function (megaTemplate) { + getMegaDeltas(megaTemplate) { let baseTemplate = this.getTemplate(megaTemplate.baseSpecies); + /**@type {{ability: string, baseStats: {[k: string]: number}, weightkg: number, originalMega: string, requiredItem: string | undefined, type?: string, isMega?: boolean, isPrimal?: boolean}} */ let deltas = { ability: megaTemplate.abilities['0'], baseStats: {}, @@ -80,6 +76,7 @@ exports.BattleScripts = { requiredItem: megaTemplate.requiredItem, }; for (let statId in megaTemplate.baseStats) { + // @ts-ignore deltas.baseStats[statId] = megaTemplate.baseStats[statId] - baseTemplate.baseStats[statId]; } if (megaTemplate.types.length > baseTemplate.types.length) { @@ -93,10 +90,9 @@ exports.BattleScripts = { if (megaTemplate.isPrimal) deltas.isPrimal = true; return deltas; }, - doGetMixedTemplate: function (template, deltas) { + doGetMixedTemplate(templateOrTemplateName, deltas) { if (!deltas) throw new TypeError("Must specify deltas!"); - if (!template || typeof template === 'string') template = this.getTemplate(template); - template = Object.assign({}, template); + let template = this.deepClone(this.getTemplate(templateOrTemplateName)); template.abilities = {'0': deltas.ability}; if (template.types[0] === deltas.type) { template.types = [deltas.type]; @@ -104,9 +100,8 @@ exports.BattleScripts = { template.types = [template.types[0], deltas.type]; } let baseStats = template.baseStats; - template.baseStats = {}; for (let statName in baseStats) { - template.baseStats[statName] = this.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255); + baseStats[statName] = this.clampIntRange(baseStats[statName] + deltas.baseStats[statName], 1, 255); } template.weightkg = Math.max(0.1, template.weightkg + deltas.weightkg); template.originalMega = deltas.originalMega; @@ -116,3 +111,5 @@ exports.BattleScripts = { return template; }, }; + +exports.BattleScripts = BattleScripts; diff --git a/data/mods/pic/moves.js b/data/mods/pic/moves.js new file mode 100644 index 0000000000000..592357d9a0c3f --- /dev/null +++ b/data/mods/pic/moves.js @@ -0,0 +1,67 @@ +'use strict'; + +/**@type {{[k: string]: ModdedMoveData}} */ +exports.BattleMovedex = { + "skillswap": { + inherit: true, + onHit(target, source, move) { + let targetAbility = this.getAbility(target.ability); + let sourceAbility = this.getAbility(source.ability); + if (target.side === source.side) { + this.add('-activate', source, 'move: Skill Swap', '', '', '[of] ' + target); + } else { + this.add('-activate', source, 'move: Skill Swap', targetAbility, sourceAbility, '[of] ' + target); + } + this.singleEvent('End', sourceAbility, source.abilityData, source); + let sourceAlly = source.side.active.find(ally => ally && ally !== source && !ally.fainted); + if (sourceAlly && sourceAlly.innate) { + sourceAlly.removeVolatile(sourceAlly.innate); + delete sourceAlly.innate; + } + this.singleEvent('End', targetAbility, target.abilityData, target); + let targetAlly = target.side.active.find(ally => ally && ally !== target && !ally.fainted); + if (targetAlly && targetAlly.innate) { + targetAlly.removeVolatile(targetAlly.innate); + delete targetAlly.innate; + } + if (targetAbility.id !== sourceAbility.id) { + source.ability = targetAbility.id; + target.ability = sourceAbility.id; + source.abilityData = {id: source.ability, target: source}; + target.abilityData = {id: target.ability, target: target}; + } + if (sourceAlly && sourceAlly.ability !== source.ability) { + let volatile = sourceAlly.innate = 'ability' + source.ability; + sourceAlly.volatiles[volatile] = {id: volatile}; + sourceAlly.volatiles[volatile].target = sourceAlly; + sourceAlly.volatiles[volatile].source = source; + sourceAlly.volatiles[volatile].sourcePosition = source.position; + if (!source.innate) { + volatile = source.innate = 'ability' + sourceAlly.ability; + source.volatiles[volatile] = {id: volatile}; + source.volatiles[volatile].target = source; + source.volatiles[volatile].source = sourceAlly; + source.volatiles[volatile].sourcePosition = sourceAlly.position; + } + } + if (targetAlly && targetAlly.ability !== target.ability) { + let volatile = targetAlly.innate = 'ability' + target.ability; + targetAlly.volatiles[volatile] = {id: volatile}; + targetAlly.volatiles[volatile].target = targetAlly; + targetAlly.volatiles[volatile].source = target; + targetAlly.volatiles[volatile].sourcePosition = target.position; + if (!target.innate) { + volatile = target.innate = 'ability' + targetAlly.ability; + target.volatiles[volatile] = {id: volatile}; + target.volatiles[volatile].target = target; + target.volatiles[volatile].source = targetAlly; + target.volatiles[volatile].sourcePosition = targetAlly.position; + } + } + this.singleEvent('Start', targetAbility, source.abilityData, source); + if (sourceAlly && sourceAlly.innate) this.singleEvent('Start', targetAbility, sourceAlly.volatiles[sourceAlly.innate], sourceAlly); + this.singleEvent('Start', sourceAbility, target.abilityData, target); + if (targetAlly && targetAlly.innate) this.singleEvent('Start', sourceAbility, targetAlly.volatiles[targetAlly.innate], targetAlly); + }, + }, +}; diff --git a/data/mods/pic/scripts.js b/data/mods/pic/scripts.js new file mode 100644 index 0000000000000..fac3a58f38b7f --- /dev/null +++ b/data/mods/pic/scripts.js @@ -0,0 +1,63 @@ +'use strict'; + +/**@type {ModdedBattleScriptsData} */ +exports.BattleScripts = { + getEffect(name) { + if (name && typeof name !== 'string') { + return name; + } + let id = toId(name); + if (id.startsWith('ability')) return Object.assign(Object.create(this.getAbility(id.slice(7))), {id}); + return Object.getPrototypeOf(this).getEffect.call(this, name); + }, + pokemon: { + setAbility(ability, source, isFromFormechange) { + if (!this.hp) return false; + ability = this.battle.getAbility(ability); + let oldAbility = this.ability; + if (!isFromFormechange) { + if (['illusion', 'battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange'].includes(ability.id)) return false; + if (['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange'].includes(oldAbility)) return false; + } + this.battle.singleEvent('End', this.battle.getAbility(oldAbility), this.abilityData, this, source); + let ally = this.side.active.find(ally => ally && ally !== this && !ally.fainted); + if (ally && ally.innate) { + ally.removeVolatile(ally.innate); + delete ally.innate; + } + this.ability = ability.id; + this.abilityData = {id: ability.id, target: this}; + if (ability.id) { + this.battle.singleEvent('Start', ability, this.abilityData, this, source); + if (ally && ally.ability !== this.ability) { + ally.innate = 'ability' + ability.id; + ally.addVolatile(ally.innate); + } + } + this.abilityOrder = this.battle.abilityOrder++; + return oldAbility; + }, + hasAbility(ability) { + if (!this.ignoringAbility()) { + if (Array.isArray(ability) ? ability.map(toId).includes(this.ability) : toId(ability) === this.ability) { + return true; + } + } + let ally = this.side.active.find(ally => ally && ally !== this && !ally.fainted); + if (!ally || ally.ignoringAbility()) return false; + if (Array.isArray(ability)) return ability.map(toId).includes(ally.ability); + return toId(ability) === ally.ability; + }, + getRequestData() { + let ally = this.side.active.find(ally => ally && ally !== this && !ally.fainted); + this.moveSlots = this.baseMoveSlots.concat(ally ? ally.baseMoveSlots : []); + for (const moveSlot of this.moveSlots) { + moveSlot.disabled = false; + moveSlot.disabledSource = ''; + } + this.battle.runEvent('DisableMove', this); + if (!this.ateBerry) this.disableMove('belch'); + return Object.getPrototypeOf(this).getRequestData.call(this); + }, + }, +}; diff --git a/data/mods/ssb/abilities.js b/data/mods/ssb/abilities.js new file mode 100644 index 0000000000000..3f513dde6a215 --- /dev/null +++ b/data/mods/ssb/abilities.js @@ -0,0 +1,604 @@ +'use strict'; + +/**@type {{[k: string]: ModdedAbilityData}} */ +let BattleAbilities = { + /* + // Example + "abilityid": { + desc: "", // long description + shortDesc: "", // short description, shows up in /dt + id: "abilityid", + 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/Zarel/Pokemon-Showdown/blob/master/data/abilities.js + }, + */ + // Please keep abilites organized alphabetically based on staff member name! + // 5gen + seasonsgift: { + desc: "If Sunny Day is active, this Pokemon's Attack is 1.5x, and its Speed is doubled.", + shortDesc: "If Sunny Day is active, this Pokemon's Attack is 1.5x and its Speed is doubled.", + id: "seasonsgift", + name: "Season's Gift", + isNonstandard: true, + onModifyAtk(atk) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + return this.chainModify(1.5); + } + }, + onModifySpe(spe) { + if (this.isWeather(['sunnyday', 'desolateland'])) { + return this.chainModify(2); + } + }, + }, + // Akir + regrowth: { + desc: "This Pokemon's healing moves have their priority increased by one stage. When switching out, this Pokemon restores 1/4 of its maximum HP, rounded down.", + shortDesc: "Healing moves have priority increased by 1. Heals 1/4 max HP when switching out.", + id: "regrowth", + name: "Regrowth", + isNonstandard: true, + onModifyPriority(priority, pokemon, target, move) { + if (move && move.flags['heal']) return priority + 1; + }, + onSwitchOut(pokemon) { + pokemon.heal(pokemon.maxhp / 4); + }, + }, + // Arsenal + logia: { + desc: "If this Pokemon is an Arceus, its type changes to match its held Plate or Z-Crystal, and it is immune to Normal and same-type moves.", + shortDesc: "Arceus: type matches held Plate or Z-Crystal; immunity to Normal and its own type.", + // Logia's type-changing itself is implemented in statuses.js + id: "logia", + name: "Logia", + isNonstandard: true, + onTryHit(target, source, move) { + let plateType = this.getItem(target.item).onPlate; + if (target !== source && (move.type === 'Normal' || plateType === move.type)) { + this.add('-immune', target, '[from] ability: Logia'); + return null; + } + }, + }, + // Bhris Brown + stimulatedpride: { + id: "stimulatedpride", + name: "Stimulated Pride", + desc: "On switch-in, this Pokemon lowers the Attack of adjacent foes not behind a Substitute by one stage. If the weather is rain, this Pokemon's Speed is doubled.", + shortDesc: "On switch-in, adjacent foes' Atk is lowered by by 1. Speed is doubled in rain.", + isNonstandard: true, + onStart(pokemon) { + let activated = false; + for (const target of pokemon.side.foe.active) { + if (!target || !this.isAdjacent(target, pokemon)) continue; + if (!activated) { + this.add('-ability', pokemon, 'Stimulated Pride', 'boost'); + activated = true; + } + if (target.volatiles['substitute']) { + this.add('-immune', target); + } else { + this.boost({atk: -1}, target, pokemon, this.getAbility('intimidate')); + } + } + }, + onModifySpe(spe, pokemon) { + if (this.isWeather(['raindance', 'primordialsea'])) { + return this.chainModify(2); + } + }, + }, + // Bimp + learnsomethingnew: { + desc: "This Pokemon's Attack is raised by one stage when another Pokemon faints.", + shortDesc: "This Pokemon's Attack is raised by 1 stage when another Pokemon faints.", + id: "learnsomethingnew", + name: "Learn Something New!", + isNonstandard: true, + onAnyFaint() { + this.boost({atk: 1}, this.effectData.target); + }, + }, + // Brandon + gracideamastery: { + desc: "If this Pokemon is a Shaymin, it will transform into Shaymin-S before using a physical or special attack. After using the attack, if this Pokemon was originally in its base forme, it will transform back into Shaymin.", + shortDesc: "Transforms into Shaymin-Sky before attacking, then reverts to Shaymin-Land.", + id: "gracideamastery", + name: "Gracidea Mastery", + isNonstandard: true, + onPrepareHit(source, target, move) { + if (!target || !move) return; + if (source.template.baseSpecies !== 'Shaymin' || source.transformed) return; + if (target !== source && move.category !== 'Status') { + source.formeChange('Shaymin-Sky', this.effect); + } + }, + onAfterMove(pokemon, move) { + if (pokemon.template.baseSpecies !== 'Shaymin' || pokemon.transformed) return; + pokemon.formeChange('Shaymin', this.effect); + }, + }, + // cc + lurking: { + desc: "This Pokemon's moves have their accuracy multiplied by 1.3.", + shortDesc: "This Pokemon's moves have their accuracy multiplied by 1.3.", + id: "lurking", + name: "Lurking", + isNonstandard: true, + onModifyMove(move) { + if (typeof move.accuracy === 'number') { + move.accuracy *= 1.3; + } + }, + }, + // Cleo + adrenalinerush: { + desc: "As this Pokemon switches in, its Special Attack and Speed are doubled for 5 turns. After five turns have passed, these effects are removed.", + shortDesc: "On switch-in, this Pokemon's Special Attack and Speed are doubled for 5 turns.", + id: "adrenalinerush", + name: "Adrenaline Rush", + isNonstandard: true, + onStart(pokemon) { + pokemon.addVolatile('adrenalinerush'); + }, + onEnd(pokemon) { + delete pokemon.volatiles['adrenalinerush']; + this.add('-end', pokemon, 'Adrenaline Rush', '[silent]'); + }, + effect: { + duration: 5, + onStart(pokemon) { + this.add('-start', pokemon, 'Adrenaline Rush', '[silent]'); + this.add('-message', `${pokemon.name}'s Adrenaline Rush has begun.`); + }, + onModifySpAPriority: 5, + onModifySpA(spa, pokemon) { + return this.chainModify(2); + }, + onModifySpe(spe, pokemon) { + return this.chainModify(2); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Adrenaline Rush', '[silent]'); + this.add('-message', `${pokemon.name}'s Adrenaline Rush has ended.`); + }, + }, + }, + // E4 Flint + starkmountain: { + desc: "The user summons Sunny Day when it switches in. In addition, Water-type attacks do halved damage against this Pokemon.", + shortDesc: "On switch-in, summons Sunny Day. Water power against this Pokemon is halved.", + id: "starkmountain", + name: "Stark Mountain", + isNonstandard: true, + onStart(target, source) { + this.setWeather('sunnyday', source); + }, + onSourceBasePower(basePower, attacker, defender, move) { + if (move.type === 'Water') { + return this.chainModify(0.5); + } + }, + }, + // HoeenHero + scripter: { + desc: "If Scripted Terrain is active, this Pokemon's Speed is doubled, and its moves have 1.5x power.", + shortDesc: "If Scripted Terrain is active, this Pokemon's Speed doubles and attack power is 1.5x.", + id: "scripter", + name: "Scripter", + isNonstandard: true, + onModifyDamage(damage, source, target, move) { + if (this.isTerrain('scriptedterrain')) { + this.debug('Scripter boost'); + return this.chainModify(1.5); + } + }, + onModifySpe(spe, pokemon) { + if (this.isTerrain('scriptedterrain')) { + return this.chainModify(2); + } + }, + }, + // KingSwordYT + kungfupanda: { + desc: "This Pokemon's punch-based attacks have their power multiplied by 1.2, and this Pokemon's Speed is raised by 1 stage after it is damaged by a contact move.", + shortDesc: "This Pokemon's punch-based moves have 1.2x power. +1 Spe when a foe makes contact.", + id: "kungfupanda", + name: "Kung Fu Panda", + isNonstandard: true, + onBasePowerPriority: 8, + onBasePower(basePower, attacker, defender, move) { + if (move.flags['punch']) { + this.debug('Kung Fu Panda boost'); + return this.chainModify([0x1333, 0x1000]); + } + }, + onAfterDamage(damage, target, source, effect) { + if (effect && effect.effectType === 'Move' && effect.flags.contact && effect.id !== 'confused') { + this.boost({spe: 1}); + } + }, + }, + // Lionyx + frozenskin: { + desc: "If hail is active, this Pokemon's Speed is doubled. This Pokemon takes no damage from hail.", + shortDesc: "If hail is active, this Pokemon's Speed is doubled; immunity to hail.", + id: "frozenskin", + name: "Frozen Skin", + isNonstandard: true, + onModifySpe(spe, pokemon) { + if (this.isWeather('hail')) { + return this.chainModify(2); + } + }, + onImmunity(type, pokemon) { + if (type === 'hail') return false; + }, + }, + // Megazard + standuptall: { + desc: "This Pokemon's Defense or Special Defense is raised by 1 stage at the end of each full turn it is on the field.", + shortDesc: "Raises Defense or Special Defense by 1, at random, after each full turn on the field.", + id: "standuptall", + name: "Stand Up Tall", + isNonstandard: true, + onResidualOrder: 26, + onResidualSubOrder: 1, + onResidual(pokemon) { + if (pokemon.activeTurns) { + if (this.randomChance(1, 2)) { + this.boost({def: 1}); + } else { + this.boost({spd: 1}); + } + } + }, + }, + // MicktheSpud + fakecrash: { + desc: "If this Pokemon is a Lycanroc-Midnight, the first hit it takes in battle deals 0 neutral damage. Its disguise is then broken, and it transforms into Lycanroc-Dusk. Confusion damage also breaks the disguise.", + shortDesc: "If this Pokemon is a Lycanroc-Midnight, the first hit it takes in battle deals 0 damage.", + id: "fakecrash", + name: "Fake Crash", + isNonstandard: true, + onDamagePriority: 1, + onDamage(damage, target, source, effect) { + if (effect && effect.effectType === 'Move' && target.template.speciesid === 'lycanrocmidnight' && !target.transformed) { + this.add('-activate', target, 'ability: Fake Crash'); + this.effectData.busted = true; + return 0; + } + }, + onEffectiveness(typeMod, target, type, move) { + if (!target) return; + if (target.template.speciesid !== 'lycanrocmidnight' || target.transformed || (target.volatiles['substitute'] && !(move.flags['authentic'] || move.infiltrates))) return; + if (!target.runImmunity(move.type)) return; + return 0; + }, + onUpdate(pokemon) { + if (pokemon.template.speciesid === 'lycanrocmidnight' && this.effectData.busted) { + let templateid = 'Lycanroc-Dusk'; + pokemon.formeChange(templateid, this.effect, true); + this.add('-message', `${pokemon.name || pokemon.species}'s true identity was revealed!`); + } + }, + }, + // nui + prismaticsurge: { + desc: "On switch-in, this Pokemon summons Prismatic Terrain.", + shortDesc: "On switch-in, this Pokemon summons Prismatic Terrain.", + id: "prismaticsurge", + name: "Prismatic Surge", + isNonstandard: true, + onStart() { + this.setTerrain('prismaticterrain'); + }, + }, + // Osiris + sacredshadow: { + desc: "This Pokemon's attacking stats are doubled while using a Ghost-type attack. If a Pokemon uses a Fire-type or Flying-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon. This Pokemon cannot be burned. Gaining this Ability while burned cures it.", + shortDesc: "This Pokemon's Ghost power is 2x; can't be burned; Fire/Flying power against it is halved.", + id: "sacredshadow", + name: "Sacred Shadow", + isNonstandard: true, + onModifyAtkPriority: 5, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Fire' || move.type === 'Flying') { + return this.chainModify(0.5); + } + }, + onModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Fire' || move.type === 'Flying') { + return this.chainModify(0.5); + } + }, + onModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Ghost') { + return this.chainModify(2); + } + }, + onModifySpA(atk, attacker, defender, move) { + if (move.type === 'Ghost') { + return this.chainModify(2); + } + }, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Sacred Shadow'); + pokemon.cureStatus(); + } + }, + onSetStatus(status, target, source, effect) { + if (status.id !== 'brn') return; + if (!effect || !effect.status) return false; + this.add('-immune', target, '[from] ability: Sacred Shadow'); + return false; + }, + }, + // Pablo + shellshocker: { + desc: "This Pokemon's Normal-type moves become Electric-type and have 1.2x power. In addition, this Pokemon is immune to Electric-type moves and heals 1/4 of its maximum HP, rounded down, when hit by an Electric-type move.", + shortDesc: "Normal-type moves become Electric with 1.2x power; Electric hits heal 1/4 max HP.", + id: "shellshocker", + name: "Shell Shocker", + isNonstandard: true, + onModifyMovePriority: -1, + onModifyMove(move, pokemon) { + if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) { + move.type = 'Electric'; + move.galvanizeBoosted = true; + } + }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.galvanizeBoosted) return this.chainModify([0x1333, 0x1000]); + }, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Electric') { + if (!this.heal(target.maxhp / 4)) { + this.add('-immune', target, '[from] ability: Shell Shocker'); + } + return null; + } + }, + }, + // ptoad + fatrain: { + desc: "This Pokemon summons Rain Dance when it switches in, and its Defense is 1.5x when Rain is active.", + shortDesc: "On switch-in, summons Rain Dance. This Pokemon's Defense is 1.5x during Rain.", + id: "fatrain", + name: "Fat Rain", + isNonstandard: true, + onStart(source) { + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.template.speciesid === 'kyogre') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; + } + this.setWeather('raindance'); + }, + onModifyDef(def, pokemon) { + if (this.isWeather(['raindance', 'primordialsea'])) { + return this.chainModify(1.5); + } + }, + }, + // Psynergy + wrath: { + desc: "This Pokemon has its critical hit ratio raised by 1 stage, and its moves have their accuracy multiplied by 1.1.", + shortDesc: "This Pokemon's critical hit ratio is raised by 1, and its moves have 1.1x accuracy.", + id: "wrath", + name: "Wrath", + isNonstandard: true, + onModifyCritRatio(critRatio) { + return critRatio + 1; + }, + onModifyMove(move) { + if (typeof move.accuracy === 'number') { + move.accuracy *= 1.1; + } + }, + }, + // Rory Mercury + recharge: { + desc: "Upon switching out, this Pokemon has its major status condition cured and restores 1/3 of its maximum HP, rounded down. When this Pokemon switches in, if it uses an Electric-type attack on the next turn, that attack's power will be doubled.", + shortDesc: "Switch-out: cures status + 33% HP. Switch-in: 2x power on Electric move next turn.", + id: "recharge", + name: "Recharge", + isNonstandard: true, + onSwitchIn(pokemon) { + this.add('-activate', pokemon, 'ability: Recharge'); + pokemon.addVolatile('charge'); + }, + onSwitchOut(pokemon) { + pokemon.heal(pokemon.maxhp / 3); + + if (!pokemon.status) return; + this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Recharge'); + pokemon.setStatus(''); + }, + }, + // SamJo + thiccerfat: { + desc: "If a Pokemon uses a Fire- or Ice-type attack against this Pokemon, that Pokemon's attacking stat is halved when calculating the damage to this Pokemon. This Pokemon cannot be burned. Gaining this Ability while burned cures it.", + shortDesc: "Fire/Ice damage against this Pokemon has a halved attacking stat. Burn immunity.", + id: "thiccerfat", + name: "Thiccer Fat", + isNonstandard: true, + onModifyAtkPriority: 6, + onSourceModifyAtk(atk, attacker, defender, move) { + if (move.type === 'Ice' || move.type === 'Fire') { + this.debug('Thiccer Fat weaken'); + return this.chainModify(0.5); + } + }, + onModifySpAPriority: 5, + onSourceModifySpA(atk, attacker, defender, move) { + if (move.type === 'Ice' || move.type === 'Fire') { + this.debug('Thiccer Fat weaken'); + return this.chainModify(0.5); + } + }, + onUpdate(pokemon) { + if (pokemon.status === 'brn') { + this.add('-activate', pokemon, 'ability: Thiccer Fat'); + pokemon.cureStatus(); + } + }, + onSetStatus(status, target, source, effect) { + if (status.id !== 'brn') return; + if (!effect || !effect.status) return false; + this.add('-immune', target, '[from] ability: Thiccer Fat'); + return false; + }, + }, + // Shiba and imas + galewingsv1: { + desc: "This Pokemon's Flying-type moves have their priority increased by 1.", + shortDesc: "This Pokemon's Flying-type moves have their priority increased by 1.", + id: "galewingsv1", + name: "Gale Wings v1", + isNonstandard: true, + onModifyPriority(priority, pokemon, target, move) { + if (move && move.type === 'Flying') return priority + 1; + }, + }, + // SunGodVolcarona + solarflare: { + desc: "This Pokemon is immune to Rock-type moves and restores 1/4 of its maximum HP, rounded down, when hit by an Rock-type move.", + shortDesc: "This Pokemon heals 1/4 of its max HP when hit by Rock moves; Rock immunity.", + id: "solarflare", + name: "Solar Flare", + isNonstandard: true, + onTryHit(target, source, move) { + if (target !== source && move.type === 'Rock') { + if (!this.heal(target.maxhp / 4)) { + this.add('-immune', target, '[from] ability: Solar Flare'); + } + return null; + } + }, + }, + // Teremiare + notprankster: { + desc: "This Pokemon's status moves have their priority raised by 1.", + shortDesc: "This Pokemon's Status moves have priority raised by 1.", + id: "notprankster", + name: "Not Prankster", + isNonstandard: true, + onModifyPriority(priority, pokemon, target, move) { + if (move && move.category === 'Status') { + return priority + 1; + } + }, + }, + // The Immortal + beastboost2: { + desc: "This Pokemon's two highest stats are raised by 1 if it attacks and KOes another Pokemon.", + shortDesc: "This Pokemon's 2 highest stats are raised by 1 if it attacks and KOes another Pokemon.", + id: "beastboost2", + name: "Beast Boost 2", + isNonstandard: true, + onSourceFaint(target, source, effect) { + if (effect && effect.effectType === 'Move') { + let statOrder = Object.keys(source.stats) + .sort((stat1, stat2) => source.stats[stat2] - source.stats[stat1]); + this.boost({[statOrder[0]]: 1, [statOrder[1]]: 1}, source); + } + }, + }, + // torkool + deflectiveshell: { + desc: "Summons Sunny Day as the user switches in. Non-contact moves deal 2/3 damage to this Pokemon.", + shortDesc: "On switch-in, summons Sunny Day. Receives 2/3 damage from non-contact moves.", + id: "deflectiveshell", + name: "Deflective Shell", + isNonstandard: true, + onStart(source) { + for (const action of this.queue) { + if (action.choice === 'runPrimal' && action.pokemon === source && source.template.speciesid === 'groudon') return; + if (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break; + } + this.setWeather('sunnyday'); + }, + onSourceModifyDamage(damage, source, target, move) { + let mod = 1; + if (!move.flags['contact']) mod = (mod / 3) * 2; // 2/3 + return this.chainModify(mod); + }, + }, + // Trickster + interdimensional: { + desc: "As it switches in, this Pokemon summons Gravity.", + shortDesc: "On switch-in, this Pokemon Summons Gravity.", + id: "interdimensional", + name: "Interdimensional", + isNonstandard: true, + onStart(target, source) { + this.addPseudoWeather('gravity', source); + }, + }, + // urkerab + focusenergy: { + desc: "This Pokemon gains the Focus Energy effect when it switches in.", + shortDesc: "This Pokemon gains the Focus Energy effect when it switches in.", + id: "focusenergy", + name: "Focus Energy", + isNonstandard: true, + onStart(pokemon) { + pokemon.addVolatile('focusenergy'); + }, + }, + // Yuki + snowstorm: { + desc: "As it switches in, this Pokemon summons hail that remains in effect until replaced by another weather or suppressed by the effects of Cloud Nine, Air Lock, or Delta Stream.", + shortDesc: "On switch-in, this Pokemon summons hail which remains active until replaced.", + id: "snowstorm", + name: "Snow Storm", + isNonstandard: true, + onStart() { + let snowStorm = this.deepClone(this.getEffect('hail')); + snowStorm.duration = -1; + this.setWeather(snowStorm); + }, + }, + // Modified Illusion to support SSB volatiles + illusion: { + inherit: true, + onEnd(pokemon) { + if (pokemon.illusion) { + this.debug('illusion cleared'); + let disguisedAs = toId(pokemon.illusion.name); + pokemon.illusion = null; + let details = pokemon.template.species + (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 hippopotas + if (this.getTemplate(disguisedAs).exists) disguisedAs += 'user'; + if (pokemon.volatiles[disguisedAs]) { + pokemon.removeVolatile(disguisedAs); + } + if (!pokemon.volatiles[toId(pokemon.name)]) { + let status = this.getEffect(toId(pokemon.name)); + if (status && status.exists) { + pokemon.addVolatile(toId(pokemon.name), pokemon); + } + } + } + }, + }, + // Modified Prankster to not boost Army of Mushrooms + prankster: { + inherit: true, + onModifyPriority(priority, pokemon, target, move) { + if (move && move.category === 'Status' && move.id !== 'armyofmushrooms') { + move.pranksterBoosted = true; + return priority + 1; + } + }, + }, +}; + +exports.BattleAbilities = BattleAbilities; diff --git a/data/mods/ssb/items.js b/data/mods/ssb/items.js new file mode 100644 index 0000000000000..7465e6b2aca68 --- /dev/null +++ b/data/mods/ssb/items.js @@ -0,0 +1,116 @@ +'use strict'; + +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { + // E4 Flint + magmarizer: { + inherit: true, + megaStone: "Steelix-Mega", + megaEvolves: "Steelix", + onTakeItem(item, source) { + if (item.megaEvolves === source.baseTemplate.baseSpecies) return false; + return true; + }, + fling: undefined, // Cannot be flung now since its a mega stone + desc: "If held by a Steelix, this item allows it to Mega Evolve in battle.", + }, + // FOMG + astleyiumz: { + id: "astleyiumz", + name: "Astleyium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Rickrollout", + zMoveFrom: "Rock Slide", + zMoveUser: ["Golem"], + gen: 7, + desc: "If held by a Golem with Rock Slide, it can use Rickrollout.", + }, + // MajorBowman + victiniumz: { + id: "victiniumz", + name: "Victinium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Blaze of Glory", + zMoveFrom: "V-create", + zMoveUser: ["Victini"], + gen: 7, + desc: "If held by a Victini with V-create, it can use Blaze of Glory.", + }, + // SamJo + thicciniumz: { + id: "thicciniumz", + name: "Thiccinium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Extra T h i c c", + zMoveFrom: "Thicc", + zMoveUser: ["Mamoswine"], + gen: 7, + desc: "If held by a Mamoswine with Thicc, it can use Extra T h i c c.", + }, + // Snaquaza + fakeclaimiumz: { + id: "fakeclaimiumz", + name: "Fakeclaimium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Fake Claim", + // @ts-ignore hack for Snaquaza's Z move. + zMoveFrom: ["Brave Bird", "Superpower", "Sucker Punch", "Flamethrower", "Ice Beam", "Thunderbolt"], + zMoveUser: ["Honchkrow"], + gen: 7, + desc: "If held by a Honchkrow, it can use Fake Claim.", + }, + // SunGodVolcarona + volcaroniumz: { + id: "volcaroniumz", + name: "Volcaronium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Scorching Global Vortex", + zMoveFrom: "Fiery Dance", + zMoveUser: ["Volcarona"], + gen: 7, + desc: "If held by a Volcarona with Fiery Dance, it can use Scorching Global Vortex.", + }, + // The Immortal + buzzniumz: { + id: "buzzniumz", + name: "Buzznium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Ultra Succ", + zMoveFrom: "Drain Punch", + zMoveUser: ["Buzzwole"], + gen: 7, + desc: "If held by a Buzzwole with Drain Punch, it can use Ultra Succ.", + }, + // Tiksi + tiksiumz: { + id: "tiksiumz", + name: "Tiksium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Devolution Wave", + zMoveFrom: "Rock Slide", + zMoveUser: ["Cradily"], + gen: 7, + desc: "If held by a Cradily with Rock Slide, it can use Devolution Wave.", + }, + // Uselesscrab + nichiumz: { + id: "nichiumz", + name: "Nichium Z", + isNonstandard: true, + onTakeItem: false, + zMove: "Revamped Suspect Philosophy", + zMoveFrom: "Icicle Crash", + zMoveUser: ["Kyurem-Black"], + gen: 7, + desc: "If held by a Kyurem-Black with Icicle Crash, it can use Revamped Suspect Philosophy.", + }, +}; + +exports.BattleItems = BattleItems; diff --git a/data/mods/ssb/moves.js b/data/mods/ssb/moves.js new file mode 100644 index 0000000000000..97f0d650b11db --- /dev/null +++ b/data/mods/ssb/moves.js @@ -0,0 +1,4152 @@ +'use strict'; + +// Used for bumbadadabum and Snaquaza's move +const RandomStaffBrosTeams = require('./random-teams'); +/** @type {typeof import('../../../sim/pokemon').Pokemon} */ +const Pokemon = require(/** @type {any} */ ('../../../.sim-dist/pokemon')).Pokemon; + +/** @type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { + /* + // 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 + id: "moveid", + name: "Move Name", + pp: 10, // unboosted PP count + priority: 0, // move priority, -6 -> 6 + flags: {}, // Move flags https://github.com/Zarel/Pokemon-Showdown/blob/master/data/moves.js#L1-L27 + 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 + zMoveEffect: '', // for status moves, what happens when this is used as a Z move? check data/moves.js for examples + zMoveBoost: {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! + // 2xTheTap + noblehowl: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Attack by two stages and cures the user of burns, paralysis, and poison. Removes Reflect, Light Screen, Aurora Veil, Safeguard, and Mist from the opponent's side and removes Spikes, Toxic Spikes, Stealth Rock, and Sticky Web from both sides.", + shortDesc: "Raises Attack by 2, clears hazards/user status.", + id: "noblehowl", + name: "Noble Howl", + isNonstandard: true, + pp: 3, + noPPBoosts: true, + priority: 0, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Howl', source); + this.add('-anim', source, 'Boomburst', source); + }, + onHit(target, source, move) { + this.boost({atk: 2}, source, source, this.getActiveMove('Noble Howl')); + if (!(['', 'slp', 'frz'].includes(source.status))) { + source.cureStatus(); + } + let removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + let removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + for (const targetCondition of removeTarget) { + if (target.side.removeSideCondition(targetCondition)) { + if (!removeAll.includes(targetCondition)) continue; + this.add('-sideend', target.side, this.getEffect(targetCondition).name, '[from] move: Noble Howl', '[of] ' + target); + } + } + for (const sideCondition of removeAll) { + if (source.side.removeSideCondition(sideCondition)) { + this.add('-sideend', source.side, this.getEffect(sideCondition).name, '[from] move: Noble Howl', '[of] ' + source); + } + } + }, + flags: {mirror: 1, snatch: 1, authentic: 1}, + secondary: null, + target: "normal", + type: "Normal", + }, + // 5gen + toomuchsaws: { + accuracy: 100, + basePower: 85, + basePowerCallback(pokemon, target, move) { + if (target.newlySwitched) { + return move.basePower * 2; + } + return move.basePower; + }, + category: "Physical", + desc: "Base Power doubles if the foe switches out the turn this move is used.", + shortDesc: "Power doubles if foe switches out.", + id: "toomuchsaws", + name: "Too Much Saws", + isNonstandard: true, + pp: 10, + priority: 0, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Headbutt', target); + }, + flags: {protect: 1, mirror: 1, contact: 1}, + secondary: null, + target: "normal", + type: "Grass", + }, + // ACakeWearingAHat + sparcedance: { + accuracy: true, + category: "Status", + desc: "Boosts the user's Attack, Defense, and Speed by one stage.", + shortDesc: "+1 atk, def, and spe.", + id: "sparcedance", + name: "Sparce Dance", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {snatch: 1, mirror: 1, dance: 1}, + onTryMovePriority: 100, + 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: "Normal", + }, + // Aelita + energyfield: { + accuracy: 100, + basePower: 140, + category: "Special", + desc: "Has a 40% chance to paralyze the target. Lowers the user's Special Attack, Special Defense, and Speed by one stage.", + shortDesc: "40% to paralyze. Lowers user's SpA, SpD, Spe.", + id: "energyfield", + name: "Energy Field", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Electro Ball", target); + this.add('-anim', source, "Ion Deluge", target); + }, + self: {boosts: {spa: -1, spd: -1, spe: -1}}, + secondary: { + chance: 40, + status: 'par', + }, + target: "normal", + type: "Electric", + zMovePower: 200, + }, + // Akir + compost: { + accuracy: true, + category: "Status", + desc: "The user recovers half their HP. If any of the user's allies fainted the previous turn, this move heals the active Pokemon by 50% of the user's HP on the following turn. Cures the user's party of all status conditions.", + shortDesc: "Heal 50%; cures party; If ally fained last turn: wish.", + id: "compost", + name: "Compost", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {snatch: 1, heal: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Ingrain", target); + }, + onHit(target, source) { + let didSomething = false; + let side = source.side; + if (side.faintedLastTurn) { + this.add('-anim', source, "Wish", target); + side.addSideCondition('wish', source); + this.add('-message', `${source.name} made a wish!`); + didSomething = true; + } + for (const ally of side.pokemon) { + if (ally.cureStatus()) didSomething = true; + } + if (this.heal(source.maxhp / 2, source)) didSomething = true; + return didSomething; + }, + secondary: null, + target: "self", + type: "Ghost", + }, + // Amaluna + turismosplash: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Summons Trick Room and raises the user's Special Attack by one stage.", + shortDesc: "User's Sp. Atk +1; sets Trick Room.", + id: "turismosplash", + name: "Turismo Splash", + isNonstandard: true, + pp: 5, + priority: -6, + onModifyMove(move) { + if (!this.pseudoWeather.trickroom) { + move.pseudoWeather = 'trickroom'; + } + }, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Coil", source); + this.add('-anim', source, "Extreme Evoboost", source); + }, + boosts: { + spa: 1, + }, + secondary: null, + target: "self", + type: "Water", + }, + // Andy + pilfer: { + accuracy: 100, + basePower: 70, + category: "Physical", + desc: "If the target uses certain non-damaging moves this turn, the user steals the move to use itself. This move fails if no move is stolen or if the user is under the effect of Sky Drop.", + shortDesc: "Steals foe's move. Fails if target attacks. Priority.", + id: "pilfer", + name: "Pilfer", + isNonstandard: true, + pp: 5, + priority: 1, + flags: {protect: 1, mirror: 1, contact: 1, authentic: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTryHit(target, source) { + let decision = this.willMove(target); + if (decision) { + let move = this.getActiveMove(decision.move.id); + if (move.category === 'Status' && move.id !== 'mefirst' && move.target) { + if (['all', 'adjacentAllyOrSelf', 'allySide', 'allyTeam', 'self'].includes(move.target)) { + this.useMove(move, source, source); + } else { + this.useMove(move, source, target); + } + this.add('-anim', source, "Sucker Punch", target); + this.add('-anim', source, "Night Slash", target); + return; + } + } + return false; + }, + volatileStatus: 'pilfer', + effect: { + // Simulate the snatch effect while being able to use the pilfered move 1st + duration: 1, + onStart() { + }, + onBeforeMovePriority: 3, + onBeforeMove(pokemon, target, move) { + if (move.category === 'Status') { + this.add('-message', move.name + ' was pilfered and unable to be used.'); + return false; + } + }, + }, + target: "normal", + type: "Dark", + }, + // ant + truant: { + accuracy: 100, + basePower: 100, + category: "Physical", + desc: "The target's ability is changed to Truant if this move hits.", + shortDesc: "Changes the target's ability to Truant.", + id: "truant", + name: "TRU ANT", + isNonstandard: true, + pp: 5, + flags: {protect: 1, mirror: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Sunsteel Strike', target); + }, + onHit(pokemon) { + if (pokemon.ability === 'truant') return; + let oldAbility = pokemon.setAbility('truant'); + if (oldAbility) { + this.add('-ability', pokemon, 'Truant', '[from] move: TRU ANT'); + return; + } + return false; + }, + target: "normal", + type: "Steel", + }, + // A Quag to The Past + murkyambush: { + accuracy: true, + basePower: 150, + category: "Physical", + desc: "This move fails unless a foe uses a contact move on the user before the user can execute the move on the same turn. If this move is successful, the foe's move has its secondary effects suppressed and damage halved. If the user survives a hit, it attacks, and the effect ends.", + shortDesc: "User must be hit by a contact move before moving.", + id: "murkyambush", + name: "Murky Ambush", + isNonstandard: true, + pp: 20, + priority: -3, + flags: {contact: 1, protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + if (source.volatiles['murkyambush'] && source.volatiles['murkyambush'].gotHit) { + this.add('-anim', source, "Crunch", target); + } + }, + beforeTurnCallback(pokemon) { + pokemon.addVolatile('murkyambush'); + this.add('-message', `${pokemon.name} anticipates the opposing Pokémon's next move!`); + this.attrLastMove('[still]'); + this.add('-anim', pokemon, "Work Up", pokemon); + }, + beforeMoveCallback(pokemon) { + if (pokemon.volatiles['murkyambush'] && !pokemon.volatiles['murkyambush'].gotHit) { + this.add('cant', pokemon, 'Murky Ambush', 'Murky Ambush'); + this.add('-message', `${pokemon.name} eases up.`); + return true; + } + this.add('-message', `${pokemon.side.foe.active[0].name} was caught in the ambush!`); + }, + effect: { + duration: 1, + onStart(pokemon) { + this.add('-singleturn', pokemon, 'move: Murky Ambush'); + }, + onBasePowerPriority: 7, + onSourceBasePower() { + this.debug('Murky Ambush weaken'); + return this.chainModify(0.5); + }, + onFoeTryMove(target, source, move) { + if (move.secondaries && move.flags.contact) { + this.debug('Murky Ambush secondary effects suppression'); + delete move.secondaries; + } + }, + onHit(pokemon, source, move) { + if (pokemon.side !== source.side && move.flags.contact) { + pokemon.volatiles['murkyambush'].gotHit = true; + } + }, + }, + target: "normal", + type: "Dark", + }, + // Arcticblast + trashalanche: { + basePower: 80, + basePowerCallback(pokemon, target, move) { + let noitem = 0; + for (const foes of target.side.pokemon) { + if (!foes.item) noitem += 20; + } + return move.basePower + noitem; + }, + accuracy: 100, + category: "Physical", + desc: "This move's Base Power increases by 20 for every foe that is not holding an item.", + shortDesc: "+20 power for each item-less opponent.", + id: "trashalanche", + name: "Trashalanche", + isNonstandard: true, + pp: 10, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Gunk Shot", target); + }, + secondary: null, + target: "normal", + type: "Poison", + }, + // Arsenal + comeonyougunners: { + accuracy: 100, + basePower: 100, + category: "Special", + desc: "This move's type depends on the user's held Plate. If the target has the same type as this move, its Base Power is boosted by 1.5x.", + shortDesc: "Type = Plate. 1.5x power if foe has the move's type.", + id: "comeonyougunners", + name: "Come on you Gunners", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Judgment', target); + this.add('-anim', target, 'Extreme Evoboost', target); + // Modifying BP here so it happens AFTER ModifyMove + if (target.types.includes(move.type)) { + this.debug('Come on you Gunners BP boost'); + move.basePower = move.basePower * 1.5; + } + }, + onModifyMovePriority: 2, + onModifyMove(move, pokemon) { + const item = pokemon.getItem(); + if (item.id && item.onPlate && !item.zMove) { + this.debug(`Come on you Gunners type changed to: ${item.onPlate}`); + move.type = item.onPlate; + } + }, + secondary: null, + target: "normal", + type: "Normal", + }, + // Beowulf + buzzingoftheswarm: { + accuracy: 100, + basePower: 95, + category: "Physical", + desc: "Has a 20% chance to cause the target to flinch.", + shortDesc: "20% chance to flinch.", + id: "buzzingoftheswarm", + name: "Buzzing of the Swarm", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, sound: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Bug Buzz', source); + }, + secondary: { + chance: 20, + volatileStatus: 'flinch', + }, + target: "normal", + type: "Bug", + }, + // Bhris Brown + finalimpact: { + basePower: 85, + accuracy: 100, + category: "Physical", + desc: "This move summons Rain Dance and boosts the user's Defense by one stage.", + shortDesc: "User's Def +1. Summons Rain Dance.", + id: "finalimpact", + name: "Final Impact", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {mirror: 1, protect: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Meteor Mash', target); + }, + onAfterMoveSecondarySelf() { + this.setWeather('raindance'); + }, + secondary: { + chance: 100, + self: { + boosts: { + def: 1, + }, + }, + }, + target: "normal", + type: "Fighting", + }, + // biggie + foodrush: { + accuracy: 100, + basePower: 100, + category: "Physical", + desc: "If both the user and the target have not fainted, the target is forced to switch out to a random non-fained ally. This effect fails if the target used Ingrain previously, has the Suction Cups ability, or is behind a Substitute.", + shortDesc: "Forces the target to switch to a random ally.", + id: "foodrush", + name: "Food Rush", + isNonstandard: true, + pp: 10, + priority: -6, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Stockpile', source); + this.add('-anim', source, 'Spit Up', target); + }, + forceSwitch: true, + secondary: null, + target: "normal", + type: "Normal", + }, + // Bimp + triviaroom: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "For 5 turns, the user is immune to Ground-type moves and the effects of Arena Trap, and the Speed of every Pokemon is recalculated for the purposes of determining turn order: every Pokemon's Speed is considered to be 10000 - its normal Speed, and if this value is greater than 8191, 8192 is subtracted from it. The effects of Ingrain, Smack Down, and Thousand Arrows do not cause this move to fail, but they still ground the user, as does Iron Ball. This move does not fail if the user is under the effect of Magnet Rise or this move, but it does not extend the duration. This move fails if the user is not Bimp.", + shortDesc: "Bimp: 5 turns: slower Pokemon move first, user levitates.", + id: "triviaroom", + name: "Trivia Room", + isNonstandard: true, + pp: 5, + priority: -7, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTryHit(target, source) { + if (source.name !== 'Bimp') { + this.add('-fail', source); + this.add('-hint', 'Only Bimp can use Trivia Room.'); + return null; + } + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Trick Room", source); + }, + pseudoWeather: 'triviaroom', + effect: { + duration: 5, + durationCallback(source, effect) { + if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); + return 7; + } + return 5; + }, + onStart(target, source) { + this.add('-fieldstart', 'move: Trivia Room', '[of] ' + source); + this.add('-message', `${source.name} is levitating due to its big trivia brain!`); + }, + onRestart(target, source) { + this.removePseudoWeather('triviaroom'); + }, + // Speed modification is changed in Pokemon.getActionSpeed() in mods/seasonal/scripts.js + // Levitation is handled in Pokemon.isGrounded in mods/seasonal/scripts.js + onResidualOrder: 23, + onEnd() { + this.add('-fieldend', 'move: Trivia Room'); + this.add('-message', `Certain Pokemon are no longer levitating.`); + }, + }, + secondary: null, + target: "self", + type: "Psychic", + }, + // bobochan + thousandcircuitoverload: { + accuracy: 100, + basePower: 90, + category: "Physical", + desc: "If the target is a Ground-type and is immune to Electric due to its typing, this move deals neutral damage regardless of other types, and the target loses its type-based immunity to Electric.", + shortDesc: "First hit neutral on Ground; removes its immunity.", + id: "thousandcircuitoverload", + name: "Thousand Circuit Overload", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Plasma Fists', target); + }, + onEffectiveness(typeMod, target, type, move) { + if (move.type !== 'Electric') return; + if (!target) return; // avoid crashing when called from a chat plugin + if (!target.runImmunity('Electric')) { + if (target.hasType('Ground')) return 0; + } + }, + volatileStatus: 'thousandcircuitoverload', + effect: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'Thousand Circuit Overload'); + }, + onNegateImmunity(pokemon, type) { + if (pokemon.hasType('Ground') && type === 'Electric') return false; + }, + }, + ignoreImmunity: {'Electric': true}, + secondary: null, + target: "normal", + type: "Electric", + }, + // Brandon + blusterywinds: { + accuracy: 100, + basePower: 60, + category: "Special", + desc: "Removes Reflect, Light Screen, Aurora Veil, Safeguard, Mist, Spikes, Toxic Spikes, Stealth Rock, and Sticky Web from both sides, and it removes any active weather condition or Terrain.", + shortDesc: "Removes all field conditions and hazards.", + id: "blusterywinds", + name: "Blustery Winds", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, authentic: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Defog", target); + }, + onHit(target, source, move) { + let removeAll = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + let 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.getEffect(sideCondition).name, '[from] move: Blustery Winds', '[of] ' + source); + } + if (source.side.removeSideCondition(sideCondition)) { + if (!(silentRemove.includes(sideCondition))) this.add('-sideend', source.side, this.getEffect(sideCondition).name, '[from] move: Blustery Winds', '[of] ' + source); + } + } + this.clearWeather(); + this.clearTerrain(); + }, + secondary: null, + target: "normal", + type: "Flying", + }, + // bumbadadabum + wondertrade: { + accuracy: true, + category: "Status", + desc: "Replaces every non-fainted member of the user's team with a Super Staff Bros. Brawl set that is randomly selected from all sets, except those with the move Wonder Trade. Remaining HP and PP percentages, as well as status conditions, are transferred onto the replacement sets This move fails if it's used by a Pokemon that does not originally know this move. This move fails if the user is not bumbadadabum.", + shortDesc: "Replaces user's team with random StaffBros. sets.", + id: "wondertrade", + name: "Wonder Trade", + isNonstandard: true, + pp: 2, + noPPBoosts: true, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Amnesia', source); + this.add('-anim', source, 'Double Team', source); + }, + onTryHit(target, source) { + if (source.name !== 'bumbadadabum') { + this.add('-fail', source); + this.add('-hint', 'Only bumbadadabum can use Wonder Trade.'); + return null; + } + }, + onHit(target, source) { + // Store percent of HP left, percent of PP left, and status for each pokemon on the user's team + let carryOver = []; + let currentTeam = source.side.pokemon; + for (let pokemon of currentTeam) { + carryOver.push({ + hp: pokemon.hp / pokemon.maxhp, + status: pokemon.status, + statusData: pokemon.statusData, + pp: pokemon.moveSlots.slice().map(m => { + return m.pp / m.maxpp; + }), + }); + // Handle pokemon with less than 4 moves + while (carryOver[carryOver.length - 1].pp.length < 4) { + carryOver[carryOver.length - 1].pp.push(1); + } + } + // Generate a new team + let generator = new RandomStaffBrosTeams(this.format, this.prng); + let team = generator.generateTeam(); + // Overwrite un-fainted pokemon other than the user + for (let i = 0; i < currentTeam.length; i++) { + if (currentTeam[i].fainted || !currentTeam[i].hp || currentTeam[i].position === source.position) continue; + let set = team.shift(); + let oldSet = carryOver[i]; + if (set.name === 'bumbadadabum') { + // No way am I allowing 2 of this mon on one team + set = team.shift(); + } + + // Bit of a hack so client doesn't crash when formeChange is called for the new pokemon + let effect = this.effect; + this.effect = /** @type {Effect} */ ({id: ''}); + let pokemon = new Pokemon(set, source.side); + this.effect = effect; + + pokemon.hp = Math.floor(pokemon.maxhp * oldSet.hp) || 1; + pokemon.status = oldSet.status; + if (oldSet.statusData) pokemon.statusData = oldSet.statusData; + for (const [j, moveSlot] of pokemon.moveSlots.entries()) { + moveSlot.pp = Math.floor(moveSlot.maxpp * oldSet.pp[j]); + } + pokemon.position = currentTeam[i].position; + currentTeam[i] = pokemon; + } + this.add('message', `${source.name} wonder traded ${source.side.name}'s team away!`); + }, + target: "self", + type: "Psychic", + }, + // cant say + aesthetislash: { + accuracy: 100, + basePower: 100, + category: "Physical", + desc: "Summons Grassy Terrain. If the user is an Aegislash, it changes forme to Aegislash-Blade, attacks, then goes back to its base forme.", + shortDesc: "Summons Grassy Terrain. Aegislash transforms.", + id: "aesthetislash", + name: "a e s t h e t i s l a s h", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Geomancy', source); + this.add('-anim', source, 'Swords Dance', source); + this.add('-anim', source, 'Bloom Doom', target); + }, + onHit() { + this.setTerrain('grassyterrain'); + }, + onAfterMove(pokemon) { + if (pokemon.template.baseSpecies !== 'Aegislash' || pokemon.transformed) return; + if (pokemon.template.species !== 'Aegislash') pokemon.formeChange('Aegislash'); + }, + target: "normal", + type: "Steel", + }, + // cc + restartingrouter: { + accuracy: true, + category: "Status", + desc: "Raises the user's Special Attack by 2 stages and its Speed by 1 stage.", + shortDesc: "Raises the user's Sp. Atk by 2 and Speed by 1.", + id: "restartingrouter", + name: "Restarting Router", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {mirror: 1, snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Charge', source); + }, + boosts: {spa: 2, spe: 1}, + secondary: null, + target: "self", + type: "Electric", + }, + // Ceteris + bringerofdarkness: { + accuracy: true, + category: "Status", + desc: "Has a 50% chance to cause the target to fall asleep. Sets one layer of Spikes on the opponent's side of the field and boosts a random stat of the user by one stage, excluding accuracy and evasion, that is not already at maximum.", + shortDesc: "50% chance to sleep. Sets 1 Spike. Boosts a stat.", + id: "bringerofdarkness", + name: "Bringer of Darkness", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {reflectable: 1, mirror: 1, snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Dark Void", target); + }, + onHit(target, source, move) { + this.add('-anim', source, "Spikes", target); + target.side.addSideCondition('spikes'); + let stats = []; + for (let stat in source.boosts) { + // @ts-ignore + if (stat !== 'accuracy' && stat !== 'evasion' && source.boosts[stat] < 6) { + stats.push(stat); + } + } + if (stats.length) { + let randomStat = this.sample(stats); + /** @type {{[stat: string]: number}} */ + let boost = {}; + boost[randomStat] = 1; + this.boost(boost, source); + } + }, + secondary: { + chance: 50, + status: 'slp', + }, + target: "normal", + type: "Dark", + }, + // Cerberax + blimpcrash: { + accuracy: true, + onModifyAccuracy(accuracy, target, source) { + if (target.isGrounded()) return 80; + return accuracy; + }, + basePower: 165, + category: "Physical", + desc: "80% Accuracy if target is grounded. The user and the target will be grounded, and the user will take 1/2 of the damage inflicted as recoil.", + shortDesc: "80 Acc vs grounded, grounds both sides, 1/2 recoil.", + id: "blimpcrash", + name: "Blimp Crash", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {mirror: 1, protect: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Head Smash', target); + this.add('-anim', source, 'Earthquake', target); + }, + onHit(target, source) { + target.addVolatile('smackdown'); + source.addVolatile('smackdown'); + }, + secondary: null, + recoil: [1, 2], + target: "normal", + type: "Flying", + }, + // chaos + forcewin: { + accuracy: 100, + basePower: 0, + category: "Status", + desc: "Confuses the target and subjects it to the effects of Taunt, Torment, Heal Block, and Embargo.", + shortDesc: "Ensures domination of the opponent.", + id: "forcewin", + name: "Forcewin", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {protect: 1, reflectable: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Entrainment", target); + this.add('-anim', source, "Lock On", target); + }, + onHit(target, source) { + target.addVolatile('taunt', source); + target.addVolatile('embargo', source); + target.addVolatile('torment', source); + target.addVolatile('confusion', source); + target.addVolatile('healblock', source); + this.add(`c|~chaos|/forcewin chaos`); + if (this.random(1000) === 420) { + // Should almost never happen, but will be hilarious when it does. + // Basically, roll a 1000 sided die, if it lands on 420 forcibly give the user's trainer the win + this.add(`c|~chaos|Actually`); + this.add(`c|~chaos|/forcewin ${source.side.name}`); + this.win(source.side); + } + }, + secondary: null, + target: "normal", + type: "???", + }, + // Chloe + beskyttelsesnet: { + accuracy: true, + category: "Status", + desc: "The user faints and sets Reflect, Light Screen, and Safeguard.", + shortDesc: "User faints; sets screens/Safeguard for 5 turns.", + id: "beskyttelsesnet", + name: "beskyttelsesnet", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {mirror: 1, snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Geomancy', source); + this.add('-anim', source, 'Memento', target); + }, + onHit(target, source) { + source.side.addSideCondition('lightscreen', source); + source.side.addSideCondition('reflect', source); + source.side.addSideCondition('safeguard', source); + }, + selfdestruct: "ifHit", + secondary: null, + target: "self", + type: "Dark", + }, + // Cleo + lovingembrace: { + accuracy: 100, + basePower: 80, + category: "Special", + desc: "This move has a 50% chance to infatuate the target.", + shortDesc: "This move has a 50% chance to infatuate the target.", + id: "lovingembrace", + name: "Loving Embrace", + isNonstandard: true, + pp: 25, + priority: 0, + flags: {protect: 1, mirror: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Wrap", target); + this.add('-anim', source, "Liquidation", target); + this.add('-anim', source, "Surf", target); + }, + secondary: { + chance: 50, + volatileStatus: 'attract', + }, + target: "normal", + type: "Water", + }, + // deg + luciddreams: { + accuracy: 75, + category: "Status", + desc: "The foe falls asleep and is inflicted with the effects of Nightmare and Leech Seed. The user loses 1/2 of their maximum HP unless this move had no effect.", + shortDesc: "Loses 1/2 HP. Foe: sleep, Nightmare, Leech Seed.", + id: "luciddreams", + name: "Lucid Dreams", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {mirror: 1, snatch: 1, reflectable: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dark Void', target); + this.add('-anim', source, 'Night Shade', target); + }, + onHit(target, source, move) { + let hadEffect = false; + if (target.trySetStatus('slp')) hadEffect = true; + if (target.addVolatile('nightmare')) hadEffect = true; + if (!target.hasType('Grass')) { + if (target.addVolatile('leechseed')) hadEffect = true; + } + if (!hadEffect) { + this.add('-fail', target); + } else { + this.damage(source.maxhp / 2, source, source, 'recoil'); + } + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + // DragonWhale + earthsblessing: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Sets Gravity, raises the user's Attack by 2 stages, and cure's the user's burn, paralysis, or poison. Fails if Gravity is already in effect.", + shortDesc: "Sets Gravity, raises Attack by 2, cures status.", + id: "earthsblessing", + name: "Earth's Blessing", + isNonstandard: true, + pp: 5, + priority: 0, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Swords Dance', source); + this.add('-anim', source, 'Wood Hammer', source); + }, + onHit(pokemon, move) { + if (this.pseudoWeather.gravity) return false; + this.boost({atk: 2}, pokemon, pokemon, this.getActiveMove('EarthsBlessing')); + this.addPseudoWeather('gravity'); + if (['', 'slp', 'frz'].includes(pokemon.status)) return; + pokemon.cureStatus(); + }, + flags: {mirror: 1, snatch: 1}, + secondary: null, + target: "self", + type: "Ground", + zMoveEffect: 'healhalf', + }, + // duck + holyduck: { + accuracy: 95, + basePower: 90, + category: "Physical", + desc: "If this attack hits, the effects of Reflect, Light Screen, and Aurora Veil end on the target's side of the field before damage is calculated.", + shortDesc: "Destroys screens, unless the target is immune.", + id: "holyduck", + name: "Holy Duck!", + isNonstandard: true, + pp: 5, + priority: 1, + flags: {mirror: 1, protect: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Extreme Speed', target); + this.add('-anim', source, 'Feather Dance', target); + }, + onTryHit(pokemon) { + if (pokemon.runImmunity('Normal')) { + pokemon.side.removeSideCondition('reflect'); + pokemon.side.removeSideCondition('lightscreen'); + pokemon.side.removeSideCondition('auroraveil'); + } + }, + secondary: null, + target: "normal", + type: "Normal", + }, + // E4 Flint + fangofthefireking: { + accuracy: 90, + basePower: 0, + damage: 111, + category: "Physical", + desc: "Deals 111 HP of damage and burns the target. If the target already has a status ailment, it is replaced with a burn. Fails if the target is a Fire-type or if the user is not a Fire-type.", + shortDesc: "Dmg=111HP; replace status w/burn; fail if foe=Fire.", + id: "fangofthefireking", + name: "Fang of the Fire King", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {mirror: 1, protect: 1, bite: 1}, + onTryMovePriority: 100, + onTryMove(pokemon, target, move) { + this.attrLastMove('[still]'); + if (!pokemon.hasType('Fire') || target.hasType('Fire')) { + this.add('-fail', pokemon, 'move: Fang of the Fire King'); + return null; + } + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Crunch', target); + this.add('-anim', target, 'Searing Shot', target); + }, + onHit(target, source) { + target.setStatus('brn', source, null, true); + // Cringy message + if (this.random(5) === 1) this.add(`c|@E4 Flint|here's a __taste__ of my __firepower__ XD`); + }, + secondary: null, + target: "normal", + type: "Fire", + }, + // explodingdaisies + doom: { + basePower: 100, + accuracy: 100, + category: "Special", + desc: "Summons Sunny Day after doing damage.", + shortDesc: "Summons Sunny Day after doing damage.", + id: "doom", + name: "DOOM!", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {mirror: 1, protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Eruption', target); + this.add('-anim', source, 'Sunny Day', source); + }, + onAfterMoveSecondarySelf() { + this.setWeather('sunnyday'); + }, + secondary: null, + target: "normal", + type: "Fire", + }, + // Eien + ancestralpower: { + accuracy: true, + category: "Status", + desc: "The user's Attack and Special Attack are raised by one, it transforms into a different Pokemon, and it uses a move dependent on the Pokemon; Celebi (Future Sight), Jirachi (Doom Desire), Manaphy (Tail Glow), Shaymin (Seed Flare), or Victini (V-Create). Reverts to Mew and loses the initial raises of 1 stage to Attack and Special Attack at the end of the turn.", + shortDesc: " For turn: transforms, boosts, uses linked move.", + id: "ancestralpower", + name: "Ancestral Power", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onHit(target, source, move) { + let baseForme = source.template.id; + /** @type {{[forme: string]: string}} */ + let formes = { + celebi: 'Future Sight', + jirachi: 'Doom Desire', + manaphy: 'Tail Glow', + shaymin: 'Seed Flare', + victini: 'V-create', + }; + let forme = Object.keys(formes)[this.random(5)]; + source.formeChange(forme, this.getAbility('psychicsurge'), true); + this.boost({atk: 1, spa: 1}, source, source, move); + this.useMove(formes[forme], source, target); + this.boost({atk: -1, spa: -1}, source, source, move); + source.formeChange(baseForme, this.getAbility('psychicsurge'), true); + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + // eternally + quack: { + accuracy: true, + category: "Status", + desc: "Boosts the user's Defense, Special Defense, and Speed by 1 stage.", + shortDesc: "Raises the user's Def, Sp. Def, and Spe by 1.", + id: "quack", + name: "Quack", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {mirror: 1, snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Feather Dance', source); + this.add('-anim', source, 'Aqua Ring', source); + }, + boosts: {def: 1, spd: 1, spe: 1}, + secondary: null, + target: "self", + type: "Flying", + }, + // EV + evoblast: { + accuracy: 100, + basePower: 80, + category: "Special", + desc: "This move's type changes to match the user's primary type. This move is a physical attack if the user's Attack stat is greater than its Special Attack stat; otherwise, it is a special attack.", + shortDesc: "Shares user's type. Physical if user's Atk > Sp. Atk.", + id: "evoblast", + name: "Evoblast", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {mirror: 1, protect: 1}, + onModifyMove(move, pokemon, target) { + move.type = pokemon.types[0]; + if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical'; + }, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + this.add('-anim', source, 'Extreme Evoboost', source); + switch (move.type) { + case 'Fire': + this.add('-anim', source, 'Flamethrower', target); + break; + case 'Electric': + this.add('-anim', source, 'Thunderbolt', target); + break; + case 'Water': + this.add('-anim', source, 'Bubblebeam', target); + break; + case 'Psychic': + this.add('-anim', source, 'Psybeam', target); + break; + case 'Dark': + this.add('-anim', source, 'Dark Pulse', target); + break; + case 'Grass': + this.add('-anim', source, 'Solar Beam', target); + break; + case 'Ice': + this.add('-anim', source, 'Ice Beam', target); + break; + case 'Fairy': + this.add('-anim', source, 'Dazzling Gleam', target); + break; + } + }, + onAfterMoveSecondarySelf(pokemon) { + let stat = ['atk', 'def', 'spa', 'spd', 'spe', 'accuracy'][this.random(6)]; + /** @type {{[stat: string]: number}} */ + let boost = {}; + boost[stat] = 1; + this.boost(boost, pokemon); + }, + secondary: null, + target: "normal", + type: "Normal", + }, + // False + frck: { + accuracy: true, + basePower: 0, + category: "Physical", + desc: "Does not check accuracy. KOes the foe. User faints afterwards if move hits.", + shortDesc: "KOes foe. Always hits. User faints after on success.", + id: "frck", + name: "fr*ck", + isNonstandard: true, + pp: 6, + noPPBoosts: true, + priority: 0, + flags: {protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-activate', source, 'move: Celebrate'); + this.add('-anim', source, 'Searing Sunraze Smash', target); + this.add('-anim', source, 'Explosion', target); + }, + onHit(target, source) { + target.faint(); + source.faint(); + }, + secondary: null, + target: "normal", + type: "???", + }, + // FOMG + rickrollout: { + accuracy: true, + basePower: 140, + category: "Physical", + desc: "Raises the user's Speed by 2 stages and has a 30% chance to confuse the target.", + shortDesc: "Raises Speed by 2; 30% chance to confuse target.", + id: "rickrollout", + name: "Rickrollout", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Rock Polish', source); + this.add('-anim', source, 'Let\'s Snuggle Forever', target); + }, + onHit() { + let messages = ["SPL players don't want you to know about this secret", + "North American player reveals the concerning secret how to make money with pokemon that will crack you up", + "10 amazing facts about Zarel you have never heard of", + "Veteran player shared his best team with a beginner - here's what happened after", + "Use these 3 simple methods to gain 200+ rating in 10 minutes"][this.random(5)]; + + this.add(`raw|${messages}`); + }, + self: { + boosts: { + spe: 2, + }, + }, + secondary: { + chance: 30, + volatileStatus: 'confusion', + }, + isZ: "astleyiumz", + target: "normal", + type: "Rock", + }, + // grimAuxiliatrix + paintrain: { + accuracy: 100, + basePower: 0, + basePowerCallback(pokemon, target) { + let targetWeight = target.getWeight(); + let pokemonWeight = pokemon.getWeight(); + if (pokemonWeight > targetWeight * 5) { + return 120; + } + if (pokemonWeight > targetWeight * 4) { + return 100; + } + if (pokemonWeight > targetWeight * 3) { + return 80; + } + if (pokemonWeight > targetWeight * 2) { + return 60; + } + return 40; + }, + category: "Physical", + desc: "The power of this move depends on (user's weight / target's weight), rounded down. Power is equal to 120 if the result is 5 or more, 100 if 4, 80 if 3, 60 if 2, and 40 if 1 or less. Damage doubles and no accuracy check is done if the target has used Minimize while active. 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: "Stronger if user is heavier; Heals 50% of damage.", + id: "paintrain", + name: "Pain Train", + isNonstandard: true, + pp: 10, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Meteor Mash', target); + }, + drain: [1, 2], + secondary: null, + target: "normal", + type: "Steel", + }, + // Hippopotas + hazardpass: { + accuracy: 100, + category: "Status", + pp: 20, + desc: "The user sets 2 of Stealth Rock, Spikes (1 layer), Toxic Spikes (1 layer), and Sticky Web on the foe's side of the field and then switches out.", + shortDesc: "Sets 2 random hazards, then switches out.", + id: "hazardpass", + name: "Hazard Pass", + isNonstandard: true, + flags: {reflectable: 1, mirror: 1, authentic: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onHitSide(target, source) { + // All possible hazards, and their maximum possible layer count + /** @type {{[key: string]: number}} */ + let hazards = {stealthrock: 1, spikes: 3, toxicspikes: 2, stickyweb: 1}; + // Check how many layers of each hazard can still be added to the foe's side + if (target.getSideCondition('stealthrock')) delete hazards.stealthrock; + if (target.getSideCondition('spikes')) { + hazards.spikes -= target.sideConditions['spikes'].layers; + if (!hazards.spikes) delete hazards.spikes; + } + if (target.getSideCondition('toxicspikes')) { + hazards.toxicspikes -= target.sideConditions['toxicspikes'].layers; + if (!hazards.toxicspikes) delete hazards.toxicspikes; + } + if (target.getSideCondition('stickyweb')) delete hazards.stickyweb; + // Create a list of hazards not yet at their maximum layer count + let hazardTypes = Object.keys(hazards); + // If there are no possible hazards, don't do anything + if (!hazardTypes.length) return false; + // Pick a random hazard, and set it + let hazard1 = this.sample(hazardTypes); + // Theoretically, this should always work + this.add('-anim', source, this.getMove(hazard1).name, target); + target.addSideCondition(hazard1, source, this.effect); + // If that was the last possible layer of that hazard, remove it from our list of possible hazards + if (hazards[hazard1] === 1) { + hazardTypes.splice(hazardTypes.indexOf(hazard1), 1); + // If there are no more hazards we can set, end early on a success + if (!hazardTypes.length) return true; + } + // Set the last hazard and animate the switch + let hazard2 = this.sample(hazardTypes); + this.add('-anim', source, this.getMove(hazard2).name, target); + target.addSideCondition(hazard2, source, this.effect); + this.add('-anim', source, "Baton Pass", target); + }, + selfSwitch: true, + secondary: null, + target: "foeSide", + type: "Normal", + zMoveBoost: {def: 1}, + }, + // Hipster Sigilyph + mainstreamshock: { + accuracy: 100, + basePower: 100, + category: "Special", + desc: "This move's type effectiveness against Dark is changed to be super effective no matter what this move's type is.", + shortDesc: "Super effective on Dark.", + id: "mainstreamshock", + name: "Mainstream Shock", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Psystrike", target); + }, + ignoreImmunity: {'Psychic': true}, + onEffectiveness(typeMod, target, type) { + if (type === 'Dark') return 1; + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + // HoeenHero + scriptedterrain: { + accuracy: 100, + category: "Status", + desc: "Sets Scripted Terrain for 5 turns. The power of Bug type moves is boosted by 1.5, and there is a 5% chance for every move used to become Glitch Out instead. At the end of a turn, every Pokemon has a 5% chance to transform into a Missingno. with 3 random moves and Glitch Out. Switching out will restore the Pokemon to its normal state. This terrain affects floating Pokemon.", + shortDesc: "5 turns: +Bug power, glitchy effects.", + id: "scriptedterrain", + name: "Scripted Terrain", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {nonsky: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Calm Mind', source); + this.add('-anim', source, 'Geomancy', source); + }, + terrain: 'scriptedterrain', + effect: { + duration: 5, + durationCallback(source, effect) { + if (source && source.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Bug') { + this.debug('scripted terrain boost'); + return this.chainModify(1.5); + } + }, + onTryHitPriority: 4, + onTryHit(target, source, effect) { + if (!effect || effect.id === 'glitchout' || source.volatiles['glitchout']) return; + if (this.random(20) === 1) { + this.add('message', `${source.name}'s move was glitched by the Scripted Terrain!`); + this.useMove('Glitch Out', source, source.side.foe.active[0]); + return null; + } + }, + onStart(battle, source, effect) { + if (effect && effect.effectType === 'Ability') { + this.add('-fieldstart', 'move: Scripted Terrain', '[from] ability: ' + effect, '[of] ' + source); + } else { + this.add('-fieldstart', 'move: Scripted Terrain'); + } + }, + onResidualOrder: 21, + onResidualSubOrder: 2, + onResidual() { + this.eachEvent('Terrain'); + }, + onTerrain(pokemon) { + if (pokemon.template.id === 'missingno') return; + if (pokemon.fainted || !pokemon.hp) return; + if (this.random(20) === 1) { + this.debug('Scripted terrain corrupt'); + this.add('message', `${pokemon.name} was corrupted by a bug in the scripted terrain!`); + // generate a movepool + let moves = []; + let pool = this.shuffle(Object.keys(this.data.Movedex)); + let metronome = this.getMove('metronome'); + for (let i of pool) { + let move = this.getMove(i); + if (i !== move.id) continue; + if (move.isZ || move.isNonstandard) continue; + if (metronome.noMetronome && metronome.noMetronome.includes(move.id)) continue; + if (this.getMove(i).gen > this.gen) continue; + moves.push(move); + if (moves.length >= 3) break; + } + moves.push('glitchout'); + pokemon.formeChange('missingno'); + pokemon.moveSlots = []; + for (let moveid of moves) { + let move = this.getMove(moveid); + if (!move.id) continue; + pokemon.moveSlots.push({ + move: move.name, + id: move.id, + pp: 5, + maxpp: 5, + target: move.target, + disabled: false, + used: false, + virtual: true, + }); + pokemon.moves.push(move.id); + } + } + }, + onEnd() { + this.add('-fieldend', 'move: Scripted Terrain'); + }, + }, + secondary: null, + target: "self", + type: "Psychic", + }, + // Used by HoeenHero's terrain + glitchout: { + accuracy: true, + category: "Status", + desc: "A random move is selected for use, other than After You, Assist, Baneful Bunker, Beak Blast, Belch, Bestow, Celebrate, Chatter, Copycat, Counter, Covet, Crafty Shield, Destiny Bond, Detect, Diamond Storm, Endure, Feint, Fleur Cannon, Focus Punch, Follow Me, Freeze Shock, Helping Hand, Hold Hands, 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, Photon Geyser, Plasma Fists, 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, Trump Card, V-create, or Wide Guard. The selected move's Base Power is increased by 20.", + shortDesc: "Uses a random move with Base Power +20.", + id: "glitchout", + name: "Glitch Out", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {}, + noMetronome: ['afteryou', 'assist', 'banefulbunker', 'beakblast', 'belch', 'bestow', 'celebrate', 'chatter', 'copycat', 'counter', 'covet', 'craftyshield', 'destinybond', 'detect', 'diamondstorm', 'dragonascent', 'endure', 'feint', 'fleurcannon', 'focuspunch', 'followme', 'freezeshock', 'helpinghand', 'holdhands', 'hyperspacefury', 'hyperspacehole', 'iceburn', 'instruct', 'kingsshield', 'lightofruin', 'matblock', 'mefirst', 'metronome', 'mimic', 'mindblown', 'mirrorcoat', 'mirrormove', 'naturepower', 'originpulse', 'photongeyser', 'plasmafists', 'precipiceblades', 'protect', 'quash', 'quickguard', 'ragepowder', 'relicsong', 'secretsword', 'shelltrap', 'sketch', 'sleeptalk', 'snarl', 'snatch', 'snore', 'spectralthief', 'spikyshield', 'spotlight', 'steameruption', 'struggle', 'switcheroo', 'technoblast', 'thief', 'thousandarrows', 'thousandwaves', 'transform', 'trick', 'trumpcard', 'vcreate', 'wideguard'], + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Bug Buzz', source); + this.add('-anim', source, 'Metronome', source); + source.addVolatile('glitchout'); + }, + onHit(target, source, effect) { + let moves = []; + for (let i in this.data.Movedex) { + let move = this.data.Movedex[i]; + if (i !== move.id) continue; + if (move.isZ || move.isNonstandard) continue; + if (effect.noMetronome && effect.noMetronome.includes(move.id)) continue; + if (this.getMove(i).gen > this.gen) continue; + moves.push(move); + } + let randomMove = ''; + if (moves.length) { + moves.sort((a, b) => a.num - b.num); + randomMove = this.sample(moves).id; + } + if (!randomMove) { + return false; + } + this.useMove(randomMove, target); + }, + secondary: null, + target: "self", + type: "Bug", + }, + // Hubriz + flowertornado: { + accuracy: 90, + basePower: 95, + category: "Special", + desc: "Has a 20% chance to either poison the target or cause it to fall asleep.", + shortDesc: "20% chance to either poison or sleep target.", + id: "flowertornado", + name: "Flower Tornado", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Petal Blizzard", target); + this.add('-anim', source, "Leaf Tornado", target); + }, + secondary: { + chance: 20, + onHit(target, source) { + let result = this.random(2); + if (result === 0) { + target.trySetStatus('psn', source); + } else { + target.trySetStatus('slp', source); + } + }, + }, + target: "normal", + type: "Grass", + }, + // Hurl + hurl: { + accuracy: 100, + basePower: 90, + category: "Physical", + desc: "Sets a layer of Toxic Spikes.", + shortDesc: "Sets a layer of Toxic Spikes.", + id: "hurl", + name: "Hurl", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Gunk Shot', target); + }, + onHit(target) { + target.side.addSideCondition('toxicspikes'); + }, + secondary: null, + target: "normal", + type: "Poison", + }, + // imagi + delayedpromise: { + accuracy: 100, + basePower: 0, + category: "Status", + desc: "This move bypasses Baneful Bunker, Crafty Shield, Detect, King's Shield, Mat Block, Protect, Quick Guard, Substitute, Spiky Shield, and Wide Guard. The target's stat stages are set to 0, and the target's Speed is lowered by 1 after stats are reset. 75% chance to put the target to sleep.", + shortDesc: "Foe: Resets stats; -1 Speed; 75% chance to sleep.", + id: "delayedpromise", + name: "Delayed Promise", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {authentic: 1, snatch: 1, reflectable: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Wish', source); + this.add('-anim', source, 'Spite', target); + }, + onHit(target, source) { + target.clearBoosts(); + this.add('-clearboost', target); + this.boost({spe: -1}, target, source); + }, + secondary: { + status: 'slp', + chance: 75, + }, + target: "normal", + type: "Psychic", + }, + // imas + boi: { + accuracy: 100, + basePower: 120, + category: "Physical", + desc: "The user takes recoil damage equal to 33% the HP lost by the target, rounded half up, but not less than 1 HP.", + shortDesc: "Has 33% recoil.", + id: "boi", + name: "B O I", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Supersonic Skystrike', target); + }, + recoil: [33, 100], + secondary: null, + target: "normal", + type: "Flying", + }, + // Iyarito + vbora: { + accuracy: true, + category: "Status", + desc: "Cures the user's party of all status conditions, then poisons the user.", + shortDesc: "Cures party's statuses, then poisons self.", + id: "vbora", + name: "Víbora", + isNonstandard: true, + pp: 5, + flags: {mirror: 1, snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Acid Armor', source); + }, + onHit(pokemon, source, move) { + //this.add('-activate', source, 'move: Víbora'); + let success = false; + for (const ally of pokemon.side.pokemon) { + if (ally.cureStatus()) success = true; + } + if (pokemon.setStatus('psn', pokemon)) success = true; + return success; + }, + secondary: null, + target: "allyTeam", + type: "Poison", + }, + // jdarden + wyvernswail: { + accuracy: 100, + basePower: 60, + category: "Special", + desc: "If both the user and the target have not fainted, the target is forced to switch out and be replaced with a random unfainted ally. This effect fails if the target used Ingrain previously, has the Suction Cups Ability, or this move hit a substitute.", + shortDesc: "Forces the target to switch to a random ally.", + id: "wyvernswail", + name: "Wyvern's Wail", + isNonstandard: true, + pp: 15, + priority: -6, + flags: {protect: 1, mirror: 1, sound: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Whirlwind', target); + }, + forceSwitch: true, + target: "normal", + type: "Flying", + }, + // Kaiju Bunny + bestialstrike: { + accuracy: 100, + basePower: 150, + basePowerCallback(pokemon, target, move) { + return move.basePower * pokemon.hp / pokemon.maxhp; + }, + category: "Physical", + desc: "Power is equal to (user's current HP * 150 / user's maximum HP), rounded down, but not less than 1.", + shortDesc: "Less power as user's HP decreases.", + id: "bestialstrike", + name: "Bestial Strike", + isNonstandard: true, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Outrage', target); + }, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1, contact: 1}, + secondary: null, + target: "normal", + type: "Flying", + }, + // kalalokki + maelstrm: { + accuracy: 85, + basePower: 100, + category: "Special", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. Both of these effects persist for their normal duration even if the user switches out or faints. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if the target leaves the field or uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", + shortDesc: "Traps/damages for 4-5 turns, even if user returns.", + id: "maelstrm", + name: "Maelström", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + volatileStatus: 'maelstrm', + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Dark Void', target); + this.add('-anim', source, 'Surf', target); + }, + effect: { + duration: 5, + durationCallback(target, source) { + if (source.hasItem('gripclaw')) { + this.debug('maelstrm grip claw duration boost'); + return 8; + } + return this.random(5, 7); + }, + onStart() { + this.add('-message', 'It became trapped in an enormous maelström!'); + }, + onResidualOrder: 11, + onResidual(pokemon) { + if (this.effectData.source.hasItem('bindingband')) { + this.debug('maelstrm binding band damage boost'); + this.damage(pokemon.maxhp / 6); + } else { + this.damage(pokemon.maxhp / 8); + } + }, + onEnd() { + this.add('-message', 'The maelström dissipated.'); + }, + onTrapPokemon(pokemon) { + pokemon.tryTrap(); + }, + }, + secondary: null, + target: "normal", + type: "Water", + }, + // Kay + inkzooka: { + accuracy: 100, + basePower: 80, + category: "Physical", + desc: "Lowers the user's Defense, Special Defense, and Speed by 1 stage.", + shortDesc: "Lowers the user's Def, Sp. Def, and Spe by 1.", + id: "inkzooka", + name: "Inkzooka", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Never Ending Nightmare', target); + }, + self: { + boosts: { + def: -1, + spd: -1, + spe: -1, + }, + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + // KingSwordYT + dragonwarriortouch: { + accuracy: 100, + basePower: 70, + category: "Physical", + desc: "The user recovers 1/2 the HP lost by the target, rounded half up. Raises the user's Attack by 1 stage.", + shortDesc: "User recovers 50% of the damage dealt; Atk +1.", + id: "dragonwarriortouch", + name: "Dragon Warrior Touch", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1, punch: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Outrage', target); + this.add('-anim', source, 'Drain Punch', target); + }, + self: { + boosts: { + atk: 1, + }, + }, + drain: [1, 2], + target: "normal", + type: "Fighting", + }, + // Level 51 + nextlevelstrats: { + accuracy: true, + category: "Status", + desc: "The user gains 5 levels when using this move, which persist upon switching out.", + shortDesc: "User gains 5 levels.", + id: "nextlevelstrats", + name: "Next Level Strats", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Nasty Plot", target); + }, + onHit(pokemon) { + const template = pokemon.template; + pokemon.level += 5; + pokemon.set.level = pokemon.level; + pokemon.formeChange(template); + + pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); + this.add('detailschange', pokemon, pokemon.details); + + const newHP = Math.floor(Math.floor(2 * template.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100) * pokemon.level / 100 + 10); + pokemon.hp = newHP - (pokemon.maxhp - pokemon.hp); + pokemon.maxhp = newHP; + this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + + this.add('-message', `${pokemon.name} advanced 5 levels! It is now level ${pokemon.level}!`); + }, + secondary: null, + target: "self", + type: "Normal", + + }, + // LifeisDANK + barfight: { + accuracy: 100, + basePower: 10, + category: "Physical", + desc: "Raises both the user's and the target's Attack by 3 stages, lowers the Defense of both by 3 stages, confuses both Pokemon, and has a 100% chance to cause the target to flinch.", + shortDesc: "+3 Atk, -3 Def, confusion to user & target. Priority.", + id: "barfight", + name: "Bar Fight", + isNonstandard: true, + pp: 10, + priority: 3, + flags: {protect: 1, mirror: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Fake Out", target); + this.add('-anim', source, "Feather Dance", target); + return this.runEvent('StallMove', source); + }, + onHit(target, source) { + source.addVolatile('stall'); + this.boost({atk: 3, def: -3}, target); + this.boost({atk: 3, def: -3}, source); + target.addVolatile('confusion'); + source.addVolatile('confusion'); + target.addVolatile('flinch'); + }, + secondary: null, + target: "normal", + type: "Flying", + }, + // Lionyx + letitgo: { + accuracy: 95, + basePower: 110, + category: "Special", + desc: "Summons hail. Has a 15% chance to lower the target's Special Defense, and a 5% chance to freeze it.", + shortDesc: "Summons hail; 15% to lower SpD, 5% to freeze.", + id: "letitgo", + name: "Let it Go", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1, sound: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Ice Beam", target); + this.add('-anim', source, "Subzero Slammer", target); + this.add('-anim', source, "Hyper Voice", target); + }, + secondaries: [ + { + chance: 5, + status: 'frz', + }, { + chance: 15, + boosts: { + spd: -1, + }, + }, + ], + onAfterMoveSecondarySelf() { + this.setWeather('hail'); + }, + target: "normal", + type: "Ice", + }, + // Lost Seso + shuffleramendance: { + accuracy: 100, + basePower: 80, + category: "Special", + desc: "This move's type effectiveness is inverted, meaning that it's super effective on Water-types but not very effective on Grass-types, and so forth. 20% chance to paralyze the target.", + shortDesc: "Type effectiveness is inverted; 20% par.", + id: "shuffleramendance", + name: "Shuffle Ramen Dance", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, dance: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, 'Outrage', target); + }, + onEffectiveness(typeMod, target) { + return -typeMod; + }, + secondary: { + status: 'par', + chance: 20, + }, + target: "normal", + type: "Fire", + zMovePower: 160, + }, + // Lycanium Z + purplepills: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "The user gains a random typing and 3 moves based on that typing (2 special moves and 1 status move). The user's attacks deal damage based off the user's Special Defense. If used again, returns the user to its original moveset and typing. This move fails if the user is not Lycanium Z.", + shortDesc: "Lycanium Z: Gains 3 random moves and typing.", + id: "purplepills", + name: "Purple Pills", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Swallow", source); + }, + onTryHit(target, source) { + if (source.name !== 'Lycanium Z') { + this.add('-fail', source); + this.add('-hint', 'Only Lycanium Z can use Purple Pills.'); + return null; + } + }, + volatileStatus: 'purplepills', + effect: { + noCopy: true, + onStart(pokemon) { + this.add('-start', pokemon, 'Purple Pills', '[silent]'); + this.add('-message', `${pokemon.name} swallowed some pills!`); + const allTypes = ['Normal', 'Fire', 'Fighting', 'Water', 'Flying', 'Grass', 'Poison', 'Electric', 'Ground', 'Psychic', 'Rock', 'Ice', 'Bug', 'Dragon', 'Ghost', 'Dark', 'Steel', 'Fairy']; + const type1 = allTypes[this.random(18)]; + const type2 = allTypes[this.random(18)]; + if (type1 === type2) { + pokemon.types = [type1]; + this.add('-start', pokemon, 'typechange', `${type1}`); + } else { + pokemon.types = [type1, type2]; + this.add('-start', pokemon, 'typechange', `${type1}/${type2}`); + } + // @ts-ignore track percentages to keep purple pills from resetting pp + pokemon.ppPercentages = pokemon.moveSlots.map(m => + m.pp / m.maxpp + ); + // Get all possible moves sorted for convience in coding + let newMovep = []; + let statMove = [], offMove1 = [], offMove2 = []; + for (const id in this.data.Movedex) { + const move = this.data.Movedex[id]; + if (id !== move.id) continue; + if (move.isZ || move.isNonstandard || !move.isViable || move.id === 'batonpass') continue; + if (move.type && !pokemon.types.includes(move.type)) continue; + // Time to sort! + if (move.category === 'Status') statMove.push(move.id); + if (move.category === 'Special') { + if (type1 === type2) { + offMove1.push(move.id); + offMove2.push(move.id); + } else { + if (move.type === type1) { + offMove1.push(move.id); + } else if (move.type === type2) { + offMove2.push(move.id); + } + } + } + } + const move1 = offMove1[this.random(offMove1.length)]; + offMove2 = offMove2.filter(move => move !== move1); + if (!offMove2.length) offMove2 = ['revelationdance']; + const move2 = offMove2[this.random(offMove2.length)]; + newMovep.push(move1); + newMovep.push(move2); + newMovep.push(!statMove.length ? 'moonlight' : statMove[this.random(statMove.length)]); + newMovep.push('purplepills'); + // Replace Moveset + pokemon.moveSlots = []; + for (const [i, moveid] of newMovep.entries()) { + const move = this.getMove(moveid); + if (!move.id) continue; + pokemon.moveSlots.push({ + move: move.name, + id: move.id, + // @ts-ignore hacky way to reduce purple pill's PP + pp: Math.floor(((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5) * (pokemon.ppPercentages ? pokemon.ppPercentages[i] : 1)), + maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5), + target: move.target, + disabled: false, + used: false, + virtual: true, + }); + pokemon.moves.push(move.id); + } + }, + onModifySpAPriority: 1, + onModifySpA(spa, pokemon) { + return pokemon.getStat('spd'); + }, + onRestart(pokemon) { + this.add('-message', `${pokemon.name} feels better!`); + delete pokemon.volatiles['purplepills']; + this.add('-end', pokemon, 'Purple Pills', '[silent]'); + pokemon.types = ['Psychic']; + this.add('-start', pokemon, 'typechange', 'Psychic'); + // @ts-ignore track percentages to keep purple pills from resetting pp + pokemon.ppPercentages = pokemon.moveSlots.slice().map(m => { + return m.pp / m.maxpp; + }); + // Update movepool + let newMovep = ['moonlight', 'heartswap', 'batonpass', 'purplepills']; + pokemon.moveSlots = []; + for (const [i, moveid] of newMovep.entries()) { + let move = this.getMove(moveid); + if (!move.id) continue; + pokemon.moveSlots.push({ + move: move.name, + id: move.id, + // @ts-ignore hacky way to reduce purple pill's PP + pp: Math.floor(((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5) * (pokemon.ppPercentages ? pokemon.ppPercentages[i] : 1)), + maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5), + target: move.target, + disabled: false, + used: false, + virtual: true, + }); + pokemon.moves.push(move.id); + } + }, + }, + secondary: null, + target: "self", + type: "Poison", + }, + // MacChaeger + naptime: { + accuracy: true, + category: "Status", + desc: "The user falls asleep for the next turn, restoring 50% of its HP and curing itself of any major status condition. If the user falls asleep in this way, all other active Pokemon that are not asleep or frozen also try to use Nap Time. Fails if the user has full HP, if the user is already asleep, or if another effect is preventing sleep.", + shortDesc: "Active Pokemon sleep 1 turn, restoring HP/status.", + id: "naptime", + name: "Nap Time", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {snatch: 1, heal: 1}, + onTryMovePriority: 100, + onTryMove(pokemon) { + this.attrLastMove('[still]'); + if (pokemon.hp < pokemon.maxhp && pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) return; + this.add('-fail', pokemon); + this.add('-hint', 'Nap Time fails if the user has full health, is already asleep, or has Comatose.'); + return null; + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Rest", target); + this.add('-anim', source, "Aromatic Mist", target); + }, + onHit(target, source, move) { + let napWeather = this.pseudoWeather['naptime']; + // Trigger sleep clause if not the original user + // @ts-ignore + if (!target.setStatus('slp', napWeather.source, move)) return false; + target.statusData.time = 2; + target.statusData.startTime = 2; + this.heal(target.maxhp / 2); // Aesthetic only as the healing happens after you fall asleep in-game + this.add('-status', target, 'slp', '[from] move: Rest'); + // @ts-ignore + if (napWeather.source === target) { + for (const side of this.sides) { + for (const curMon of side.active) { + if (curMon === source) continue; + if (curMon && curMon.hp && curMon.status !== 'slp' && curMon.status !== 'frz' && !curMon.hasAbility('comatose')) { + this.add('-anim', source, "Yawn", curMon); + this.useMove(move, curMon, curMon, move); + } + } + } + } + this.removePseudoWeather('naptime'); + }, + pseudoWeather: 'naptime', + effect: { + duration: 1, + }, + target: "self", + type: "Fairy", + zMoveEffect: 'clearnegativeboosts', + }, + // MajorBowman + blazeofglory: { + accuracy: true, + basePower: 0, + damageCallback(pokemon, target) { + let damage = pokemon.hp; + pokemon.faint(); + if (target.volatiles['banefulbunker'] || target.volatiles['kingsshield'] || target.side.sideConditions['matblock'] || target.volatiles['protect'] || target.volatiles['spikyshield'] || target.volatiles['lilypadshield']) { + this.add('-zbroken', target); + return Math.floor(damage / 4); + } + return damage; + }, + category: "Physical", + desc: "The user's HP is restored to maximum, and the user then faints. The target then takes damage equal to the amount of HP the user lost. This move does not check accuracy.", + shortDesc: "Does damage equal to user's max. HP. User faints.", + id: "blazeofglory", + name: "Blaze of Glory", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Recover", source); + this.heal(source.maxhp, source, source, this.getActiveMove('Blaze of Glory')); + this.add('-anim', source, "Final Gambit", target); + }, + selfdestruct: "ifHit", + isZ: "victiniumz", + secondary: null, + target: "normal", + type: "Fire", + }, + // martha + crystalboost: { + accuracy: 90, + basePower: 75, + category: "Special", + desc: "Has a 50% chance to raise the user's Special Attack by 1 stage.", + shortDesc: "50% chance to raise the user's Sp. Atk. by 1.", + id: "crystalboost", + name: "Crystal Boost", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Power Gem", target); + }, + secondary: { + chance: 50, + self: { + boosts: { + spa: 1, + }, + }, + }, + target: "normal", + type: "Rock", + }, + // Marty + typeanalysis: { + accuracy: true, + category: "Status", + desc: "If the user is a Silvally, its item becomes a random Memory whose type matches one of the target's weaknesses, it changes forme, and it uses Multi-Attack. This move and its effects ignore the Abilities of other Pokemon. Fails if the target has no weaknesses or if the user's species is not Silvally.", + shortDesc: "Changes user/move type to a weakness of target.", + id: "typeanalysis", + name: "Type Analysis", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {authentic: 1, protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Conversion", source); + }, + onHit(target, source) { + if (source.baseTemplate.baseSpecies !== 'Silvally') return false; + let targetTypes = target.getTypes(true).filter(type => type !== '???'); + if (!targetTypes.length) { + if (target.addedType) { + targetTypes = ['Normal']; + } else { + return false; + } + } + let weaknesses = []; + for (let type in this.data.TypeChart) { + let typeMod = this.getEffectiveness(type, targetTypes); + if (typeMod > 0 && this.getImmunity(type, target)) weaknesses.push(type); + } + if (!weaknesses.length) { + return false; + } + let randomType = this.sample(weaknesses); + source.setItem(randomType + 'memory'); + this.add('-item', source, source.getItem(), '[from] move: Type Analysis'); + let template = this.getTemplate('Silvally-' + randomType); + source.formeChange(template, this.getAbility('rkssystem'), true); + let move = this.getActiveMove('multiattack'); + move.basePower = 80; + this.useMove(move, source, target); + }, + secondary: null, + target: "normal", + type: "Normal", + zMoveEffect: 'heal', + }, + // Meicoo + scavengesu: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Lowers the user's Attack and Special Attack by two stages, and then swaps all of its stat changes with the target.", + shortDesc: "Harshly lowers own Atk/SpA; swaps stats with opp.", + id: "scavengesu", + name: "/scavenges u", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {mirror: 1, protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Imprison", source); + this.add('-anim', source, "Miracle Eye", target); + }, + onHit(target, source) { + this.boost({atk: -2, spa: -2}, source, source, this.getActiveMove('/scavenges u')); + let targetBoosts = {}; + let sourceBoosts = {}; + + for (let i in target.boosts) { + // @ts-ignore + targetBoosts[i] = target.boosts[i]; + // @ts-ignore + sourceBoosts[i] = source.boosts[i]; + } + + target.setBoost(sourceBoosts); + source.setBoost(targetBoosts); + + this.add(`c|%Meicoo|cool quiz`); + + this.add('-swapboost', source, target, '[from] move: /scavenges u'); + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + // Megazard + tippingover: { + accuracy: 100, + basePower: 20, + basePowerCallback(pokemon, target, move) { + return move.basePower + 20 * pokemon.positiveBoosts(); + }, + category: "Physical", + desc: "Power rises by 20 for each of the user's positive stat stage changes. The user loses any defensive boosts not from Stockpile.", + shortDesc: "+20 power per boost. Removes non-Stockpile boosts.", + id: "tippingover", + name: "Tipping Over", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Dragon Hammer", target); + this.add('-anim', target, "Earthquake", target); + }, + onHit(target, source, move) { + let stockpileLayers = 0; + if (source.volatiles['stockpile']) stockpileLayers = source.volatiles['stockpile'].layers; + let boosts = {}; + if (source.boosts.def > stockpileLayers) boosts.def = stockpileLayers - source.boosts.def; + if (source.boosts.spd > stockpileLayers) boosts.spd = stockpileLayers - source.boosts.spd; + if (boosts.def || boosts.spd) this.boost(boosts, source, source, move); + }, + secondary: null, + target: "normal", + type: "???", + }, + // MicktheSpud + cyclonespin: { + accuracy: 100, + basePower: 90, + category: "Physical", + 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.", + shortDesc: "Frees user from hazards/partial trap/Leech Seed.", + id: "cyclonespin", + name: "Cyclone Spin", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {mirror: 1, protect: 1, contact: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Rapid Spin", target); + }, + self: { + onHit(pokemon) { + if (pokemon.hp && pokemon.removeVolatile('leechseed')) { + this.add('-end', pokemon, 'Leech Seed', '[from] move: Cyclone Spin', '[of] ' + pokemon); + } + let sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + for (const condition of sideConditions) { + if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.getEffect(condition).name, '[from] move: Cyclone Spin', '[of] ' + pokemon); + } + } + if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { + pokemon.removeVolatile('partiallytrapped'); + } + }, + }, + secondary: null, + target: "normal", + type: "Fighting", + }, + // Mitsuki + pythonivy: { + accuracy: 95, + basePower: 110, + category: "Special", + desc: "Lowers the user's Special Attack, Special Defense, and Speed by 1 stage.", + shortDesc: "Lowers the user's Sp. Atk, Sp. Def. and Spe by 1.", + id: "pythonivy", + name: "Python Ivy", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Leaf Tornado", target); + this.add('-anim', source, "Leaf Storm", target); + }, + self: { + boosts: { + spa: -1, + spd: -1, + spe: -1, + }, + }, + secondary: null, + target: "normal", + type: "Grass", + }, + // moo + proteinshake: { + accuracy: true, + category: "Status", + desc: "The user's Attack, Defense, and Speed are boosted by 1 stage. The user also gains 100kg of weight.", + shortDesc: "+1 Atk, Def, and Spe. User gains 100kg.", + id: "proteinshake", + name: "Protein Shake", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Milk Drink", source); + }, + volatileStatus: 'proteinshake', + effect: { + onStart(pokemon) { + this.effectData.multiplier = 1; + this.add('-start', pokemon, 'Protein Shake', '[silent]'); + }, + onRestart(pokemon) { + this.effectData.multiplier++; + this.add('-start', pokemon, 'Protein Shake', '[silent]'); + }, + onModifyWeightPriority: 1, + onModifyWeight(weight, pokemon) { + if (this.effectData.multiplier) { + weight += this.effectData.multiplier * 100; + return weight; + } + }, + }, + boosts: {atk: 1, def: 1, spe: 1}, + secondary: null, + target: "self", + type: "Normal", + }, + // Morfent + e: { + accuracy: true, + category: "Status", + desc: "Sets Trick Room for 5 turns and raises the user's Attack by 1 stage.", + shortDesc: "User Attack +1; sets Trick Room.", + id: "e", + name: "E", + isNonstandard: true, + pp: 5, + priority: -6, + onModifyMove(move) { + if (!this.pseudoWeather.trickroom) { + move.pseudoWeather = 'trickroom'; + } + }, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Recover", source); + this.add('-anim', source, "Nasty Plot", source); + }, + boosts: { + atk: 1, + }, + secondary: null, + target: "self", + type: "Ghost", + }, + // Used for nui's ability + prismaticterrain: { + accuracy: true, + category: "Status", + desc: "For 5 turns, the terrain becomes Prismatic Terrain. During the effect, the power of Ice-type attacks is multiplied by 0.5, even if the user is not grounded. Hazards are removed and cannot be set while Prismatic Terrain is active. Fails if the current terrain is Prismatic Terrain.", + shortDesc: "5 turns. No hazards,-Ice power even if floating.", + id: "prismaticterrain", + name: "Prismatic Terrain", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {}, + terrain: 'prismaticterrain', + effect: { + duration: 5, + durationCallback(source, effect) { + if (source && source.hasItem('terrainextender')) { + return 8; + } + return 5; + }, + onTryMove(target, source, move) { + let hazardMoves = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb', 'hazardpass', 'beskyttelsesnet', 'bringerofdarkness', 'soulbend', 'smokebomb', 'hurl']; + if (hazardMoves.includes(move.id)) { + this.add('-message', `Prismatic Terrain prevented ${move.name} from completing!`); + return false; + } + }, + onBasePower(basePower, attacker, defender, move) { + if (move.type === 'Ice') { + this.debug('prismatic terrain weaken'); + return this.chainModify(0.5); + } + }, + onStart(battle, source, effect) { + if (effect && effect.effectType === 'Ability') { + this.add('-fieldstart', 'move: Prismatic Terrain', '[from] ability: ' + effect, '[of] ' + source); + } else { + this.add('-fieldstart', 'move: Prismatic Terrain'); + } + let removeAll = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + let 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.getEffect(sideCondition).name, '[from] move: Prismatic Terrain', '[of] ' + source); + } + if (source.side.removeSideCondition(sideCondition)) { + if (!(silentRemove.includes(sideCondition))) this.add('-sideend', source.side, this.getEffect(sideCondition).name, '[from] move: Prismatic Terrain', '[of] ' + source); + } + } + }, + onResidualOrder: 21, + onResidualSubOrder: 2, + onEnd() { + this.add('-fieldend', 'move: Prismatic Terrain'); + }, + }, + secondary: null, + target: "self", + type: "Fairy", + }, + // nui + pyramidingsong: { + accuracy: 100, + category: "Status", + desc: "If the target has not fainted, both the user and the target are forced to switch out and be replaced with a chosen unfainted ally. The target's replacement has its Speed lowered by 1 stage. Fails if either Pokemon is under the effect of Ingrain or Suction Cups.", + shortDesc: "Both Pokemon switch. Opp. replacement: Spe -1.", + id: "pyramidingsong", + name: "Pyramiding Song", + isNonstandard: true, + pp: 20, + priority: -6, + flags: {mirror: 1, protect: 1, authentic: 1, sound: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Freeze Dry", target); + this.add('-anim', source, "Mist", target); + }, + onTryHit(target, source, move) { + target.side.addSideCondition('pyramidingsong'); + }, + onHit(target, source, move) { + if (this.runEvent('DragOut', source, target, move)) { + source.forceSwitchFlag = true; + } + }, + effect: { + duration: 1, + onSwitchIn(pokemon) { + this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.getActiveMove('pyramidingsong')); + }, + }, + forceSwitch: true, + secondary: null, + target: "normal", + type: "Water", + zMoveEffect: "boostreplacement", + }, + // OM + omboom: { + accuracy: 95, + basePower: 110, + category: "Physical", + desc: "Has a 50% chance to raise the user's Speed by 2 stages.", + shortDesc: "Has 50% chance to raise the user's Speed by 2.", + id: "omboom", + name: "OM Boom", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {mirror: 1, protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Fire Lash", target); + this.add('-anim', source, "Heat Crash", target); + }, + onHit() { + this.add(`c|@OM|Bang Bang`); + }, + secondary: { + chance: 50, + self: { + boosts: { + spe: 2, + }, + }, + }, + target: "normal", + type: "Fire", + }, + // Osiris + nightmarch: { + basePower: 60, + basePowerCallback(pokemon, target, move) { + let faintedmons = 0; + for (const ally of pokemon.side.pokemon) { + if (ally.fainted || !ally.hp) faintedmons += 20; + } + for (const foes of target.side.pokemon) { + if (foes.fainted || !foes.hp) faintedmons += 20; + } + return move.basePower + faintedmons; + }, + accuracy: 100, + category: "Physical", + desc: "Power is equal to 60+(20*X), where X is the total number of fainted Pokemon on both the user's team and on the opponent's team.", + shortDesc: "+20 power for each fainted ally or foe.", + id: "nightmarch", + name: "Night March", + isNonstandard: true, + pp: 5, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Nightmare", target); + this.add('-anim', source, "Moongeist Beam", target); + this.add('-anim', source, "Stomping Tantrum", target); + }, + secondary: null, + target: "normal", + type: "Ghost", + }, + // Overneat + totalleech: { + accuracy: 100, + basePower: 70, + category: "Special", + 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.", + id: "totalleech", + name: "Total Leech", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Leech Life", target); + }, + drain: [1, 2], + secondary: null, + target: "normal", + type: "Fairy", + }, + // Pablo + jailshell: { + accuracy: 90, + basePower: 90, + category: "Special", + desc: "This move has a 50% change to paralyze the target and prevents the target from switching out or using any moves that the user also knows while the user is active.", + shortDesc: "50% chance to paralyze. Traps and imprisons.", + id: "jailshell", + name: "Jail Shell", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Anchor Shot", target); + }, + onHit(target, source, move) { + if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); + source.addVolatile('imprison', source, move); + }, + secondary: { + chance: 50, + status: 'par', + }, + target: "normal", + type: "Normal", + }, + // Paradise + corrosivetoxic: { + accuracy: true, + category: "Status", + desc: "Badly poisons the target, even if they are Poison-type or Steel-type. This move does not check accuracy.", + shortDesc: "Badly poisons the target, regardless of type.", + id: "corrosivetoxic", + name: "Corrosive Toxic", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, reflectable: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Toxic", target); + }, + onTryHit(target, source, move) { + // hacky way of forcing toxic to effect poison / steel types without corrosion usage + if (target.volatiles['substitute'] && !move.infiltrates) return; + if (target.hasType('Steel') || target.hasType('Poison')) { + if (target.status) return; + let status = this.getEffect(move.status); + target.status = status.id; + target.statusData = {id: status.id, target: target, source: source, stage: 0}; + this.add('-status', target, target.status); + move.status = undefined; + } + }, + status: 'tox', + secondary: null, + target: "normal", + type: "Poison", + }, + // pluviometer + grammarhammer: { + accuracy: 100, + basePower: 90, + category: "Special", + desc: "100% chance to burn the target.", + shortDesc: "100% chance to burn the target.", + id: "grammarhammer", + name: "Grammar Hammer", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + onPrepareHit(target, source) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Hammer Arm", target); + }, + onHit(target, source) { + if (target.name === 'HoeenHero') { + this.add(`c|@pluviometer|HoennHero*`); + this.add(`c|&HoeenHero|I can speel`); + } + }, + secondary: { + chance: 100, + status: 'brn', + }, + target: "normal", + type: "Ghost", + }, + // ptoad + lilypadshield: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "The user is protected from most moves made by other Pokemon during this turn, and if a Pokemon makes contact with the user, the user restores 1/4 of its maximum HP, rounded half up. This move has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, Wide Guard, or this move, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + shortDesc: "Protects from moves. Contact: restores 25% HP.", + id: "lilypadshield", + name: "Lilypad Shield", + isNonstandard: true, + pp: 10, + priority: 4, + flags: {heal: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Spiky Shield", source); + }, + stallingMove: true, + volatileStatus: 'lilypadshield', + onTryHit(target, source, move) { + return !!this.willAct() && this.runEvent('StallMove', target); + }, + onHit(pokemon) { + pokemon.addVolatile('stall'); + }, + effect: { + duration: 1, + onStart(target) { + this.add('-singleturn', target, 'move: Protect'); + }, + onTryHitPriority: 3, + onTryHit(target, source, move) { + if (!move.flags['protect']) { + if (move.isZ) move.zBrokeProtect = true; + return; + } + this.add('-activate', target, 'move: Protect'); + source.moveThisTurnResult = true; + let 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.heal(target.maxhp / 4, target, target); + } + return null; + }, + onHit(target, source, move) { + if (move.isZPowered && move.flags['contact']) { + this.heal(target.maxhp / 4, target, target); + } + }, + }, + secondary: null, + target: "self", + type: "Grass", + }, + // Psynergy + resolve: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Speed by 1 stage. Gives Focus Energy", + shortDesc: "Raises user's Speed by 1; Focus Energy.", + id: "resolve", + name: "Resolve", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Acupressure", source); + this.add('-anim', source, "Flare Blitz", source); + }, + onHit(target, source) { + source.addVolatile('focusenergy', source); + }, + boosts: { + spe: 1, + }, + target: "self", + type: "Fighting", + }, + // Quite Quiet + literallycheating: { + accuracy: true, + category: "Status", + desc: "For seven turns, any Pokemon that has one of their stats boosted through any manner loses all PP on the last move they used.", + shortDesc: "7 turns: boosting stat: lose all PP from last move.", + id: "literallycheating", + name: "Literally Cheating", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {}, + onPrepareHit(target, source) { + this.attrLastMove('[still]'); + this.add('-anim', source, "Genesis Supernova", source); + }, + pseudoWeather: 'literallycheating', + effect: { + duration: 7, + onBoost(boost, target, source, effect) { + let positiveBoost = false; + let values = Object.values(boost); + for (let i of values) { + if (i !== undefined && i > 0) { + positiveBoost = true; + break; + } + } + if (!positiveBoost || !target.lastMove) return; + for (const moveSlot of target.moveSlots) { + if (moveSlot.id === target.lastMove.id) { + target.deductPP(moveSlot.id, moveSlot.pp); + } + } + this.add('-activate', target, 'move: Literally Cheating', target.lastMove.name, target.lastMove.pp); + this.add('-message', `${target.name} lost all PP for the move ${target.lastMove.name}!`); + }, + onStart(battle, source, effect) { + this.add('-fieldstart', 'move: Literally Cheating'); + }, + onResidualOrder: 21, + onResidualSubOrder: 2, + onEnd() { + this.add('-fieldend', 'move: Literally Cheating'); + }, + }, + secondary: null, + target: "all", + type: "Ghost", + }, + // Rory Mercury + switchoff: { + accuracy: 100, + basePower: 60, + category: "Physical", + desc: "Before doing damage, the target's stat boosts are inverted. Ignores Ground-type immunity. The user switches out after damaging the target.", + shortDesc: "Hits Ground. Inverts target's boosts, then switches.", + id: "switchoff", + name: "Switch Off", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {mirror: 1, protect: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Topsy-Turvy", target); + this.add('-anim', source, "Zing Zap", target); + }, + onTryHit(target, source, move) { + let success = false; + for (let i in target.boosts) { + // @ts-ignore + if (target.boosts[i] === 0) continue; + // @ts-ignore + target.boosts[i] = -target.boosts[i]; + success = true; + } + if (!success) return; + this.add('-invertboost', target, '[from] move: Switch Off'); + }, + ignoreImmunity: {'Electric': true}, + selfSwitch: true, + secondary: null, + target: "normal", + type: "Electric", + }, + // Saburo + soulbend: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Attack and Speed by 1 stage. Has a 10% chance to summon either Reflect or Light Screen.", + shortDesc: "Atk, Spe +1; 10% chance to set one screen.", + id: "soulbend", + name: "Soulbend", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Refresh", source); + this.add('-anim', source, "Geomancy", source); + }, + boosts: { + atk: 1, + spe: 1, + }, + secondary: { + chance: 10, + onHit(target, source) { + let result = this.random(2); + if (result === 0) { + source.side.addSideCondition('reflect', source); + } else { + source.side.addSideCondition('lightscreen', source); + } + }, + }, + target: "self", + type: "Psychic", + }, + // SamJo + thicc: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Attack and accuracy by 1 stage.", + shortDesc: "Raises the user's Attack and accuracy by 1.", + id: "thicc", + name: "Thicc", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Hone Claws", source); + }, + boosts: { + atk: 1, + accuracy: 1, + }, + secondary: null, + target: "self", + type: "Ice", + }, + // SamJo Z-Move + extrathicc: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Attack and accuracy by 1 stage. Summons Hail and Aurora Veil.", + shortDesc: "User's atk and acc +1. Sets Hail and Aurora Veil.", + id: "extrathicc", + name: "Extra T h i c c", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Hone Claws", source); + this.add('-anim', source, "Extreme Evoboost", source); + this.add('-anim', source, "Blizzard", source); + }, + onHit(target, source) { + this.setWeather('hail'); + if (this.isWeather('hail')) source.side.addSideCondition('auroraveil', source); + this.add('-message', source.name + ' became extra thicc!'); + }, + boosts: { + atk: 1, + accuracy: 1, + }, + isZ: "thicciniumz", + secondary: null, + target: "self", + type: "Ice", + }, + // Scotteh + geomagneticstorm: { + accuracy: 100, + basePower: 140, + category: "Special", + desc: "No additional effect.", + shortDesc: "No additional effect.", + id: "geomagneticstorm", + name: "Geomagnetic Storm", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Discharge", target); + }, + secondary: null, + target: "allAdjacent", + type: "Electric", + }, + // Shiba + goinda: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Attack by 2 stages and Speed by 1 stage.", + shortDesc: "Raises the user's Attack by 2 and Speed by 1.", + id: "goinda", + name: "GO INDA", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Swords Dance", source); + this.add('-anim', source, "Sacred Fire", source); + }, + boosts: { + atk: 2, + spe: 1, + }, + target: "self", + type: "Flying", + }, + // Slowbroth + alienwave: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "For 5 turns, slower Pokemon move first. Psychic-type attacks can hit if the target is a Dark-type.", + shortDesc: "Creates Trick Room; 5 turns: Psychic hits Dark.", + id: "alienwave", + name: "Alien Wave", + isNonstandard: true, + pp: 10, + priority: -7, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Telekinesis", source); + this.add('-anim', source, "Trick Room", source); + }, + pseudoWeather: 'alienwave', + effect: { + duration: 5, + onStart(target, source) { + this.add('-fieldstart', 'move: Alien Wave'); + this.add('-message', `Psychic-type attacks can hit Dark-type Pokemon!`); + }, + onNegateImmunity(pokemon, type) { + if (pokemon.hasType('Dark') && type === 'Psychic') return false; + }, + // Speed modification is changed in Pokemon.getActionSpeed() in mods/seasonal/scripts.js + onResidualOrder: 23, + onEnd() { + this.add('-fieldend', 'move: Alien Wave'); + this.add('-message', `Psychic-type attacks can no longer hit Dark-type Pokemon.`); + }, + }, + secondary: null, + target: "all", + type: "Normal", + }, + // Snaquaza + fakeclaim: { + accuracy: true, + category: "Physical", + basePower: 1, + desc: "The user creates a substitute to take its place in battle. This substitute is a Pokemon selected from a broad set of Random Battle-eligible Pokemon able to learn the move chosen as this move's base move. Upon the substitutes creation, this Pokemon's ability is suppressed until it switches out. The substitute Pokemon is generated with a Random Battle moveset with maximum PP that is added (except for duplicates) to the user's moveset; these additions are removed when this substitute is no longer active. The substitute uses its species's base stats, types, ability, and weight but retains the user's max HP, stat stages, gender, level, status conditions, trapping, binding, and pseudo-statuses such as confusion. Its HP is 100% of the user's maximum HP. When this substitute falls to zero HP, it breaks, and the user reverts to the state in which it used this move. This substitute absorbs indirect damage and authentic moves but does not reset the counter of bad poison when broken and cannot be transfered through Baton Pass. Transforming into this substitute will not fail. If the user switches out while the substitute is up, the substitute will be removed and the user will revert to the state in which it used this move. This move's properties are based on the move Fake Claim is inheriting from.", + shortDesc: "Uses a Random Battle Pokemon as a Substitute.", + id: "fakeclaim", + name: "Fake Claim", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onModifyMove(move) { + // @ts-ignore Hack for Snaquaza's Z move + move.type = move.baseMove ? move.baseMove.type : move.type; + // @ts-ignore Hack for Snaquaza's Z move + move.basePower = move.baseMove ? move.baseMove.basePower : move.basePower; + // @ts-ignore Hack for Snaquaza's Z move + move.category = move.baseMove ? move.baseMove.category : move.category; + }, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source, move) { + let zmove = this.getMove(this.zMoveTable[move.type]); + this.add('-anim', source, zmove.name, target); + this.add('-anim', source, "Transform", source); + }, + onAfterMoveSecondarySelf(pokemon, move) { + /** @type {{[move: string]: string[]}} */ + let claims = { + bravebird: ['Braviary', 'Crobat', 'Decidueye', 'Dodrio', 'Farfetch\'d', 'Golbat', 'Mandibuzz', 'Pidgeot', 'Skarmory', 'Staraptor', 'Swanna', 'Swellow', 'Talonflame', 'Tapu Koko', 'Toucannon'], + superpower: ['Absol', 'Aggron', 'Armaldo', 'Avalugg', 'Azumarill', 'Barbaracle', 'Basculin', 'Beartic', 'Bewear', 'Bibarel', 'Bouffalant', 'Braviary', 'Breloom', 'Buzzwole', 'Cacturne', 'Carracosta', 'Celesteela', 'Chesnaught', 'Cobalion', 'Conkeldurr', 'Crabominable', 'Crawdaunt', 'Darmanitan', 'Diggersby', 'Donphan', 'Dragonite', 'Drampa', 'Druddigon', 'Durant', 'Eelektross', 'Emboar', 'Exeggutor-Alola', 'Feraligatr', 'Flareon', 'Flygon', 'Gigalith', 'Gogoat', 'Golem', 'Golurk', 'Goodra', 'Granbull', 'Gurdurr', 'Hariyama', 'Hawlucha', 'Haxorus', 'Heatmor', 'Hippowdon', 'Hitmonlee', 'Hydreigon', 'Incineroar', 'Kabutops', 'Keldeo', 'Kingler', 'Komala', 'Kommo-o', 'Krookodile', 'Landorus-Therian', 'Lurantis', 'Luxray', 'Machamp', 'Malamar', 'Mamoswine', 'Mew', 'Mudsdale', 'Nidoking', 'Nidoqueen', 'Pangoro', 'Passimian', 'Piloswine', 'Pinsir', 'Rampardos', 'Regice', 'Regigigas', 'Regirock', 'Registeel', 'Reuniclus', 'Rhydon', 'Rhyperior', 'Samurott', 'Sawk', 'Scizor', 'Scolipede', 'Simipour', 'Simisage', 'Simisear', 'Smeargle', 'Snorlax', 'Spinda', 'Stakataka', 'Stoutland', 'Swampert', 'Tapu Bulu', 'Terrakion', 'Throh', 'Thundurus', 'Torkoal', 'Tornadus', 'Torterra', 'Tyranitar', 'Tyrantrum', 'Ursaring', 'Virizion', 'Zeraora'], + suckerpunch: ['Absol', 'Arbok', 'Ariados', 'Banette', 'Bisharp', 'Cacturne', 'Celebi', 'Corsola', 'Decidueye', 'Delcatty', 'Drifblim', 'Druddigon', 'Dugtrio', 'Dusknoir', 'Electrode', 'Emboar', 'Froslass', 'Furfrou', 'Furret', 'Galvantula', 'Gengar', 'Girafarig', 'Golem', 'Golisopod', 'Heatmor', 'Hitmonlee', 'Hitmontop', 'Houndoom', 'Huntail', 'Kangaskhan', 'Kecleon', 'Komala', 'Lanturn', 'Latias', 'Liepard', 'Lycanroc', 'Maractus', 'Mawile', 'Meowstic', 'Mew', 'Mightyena', 'Mismagius', 'Nidoking', 'Nidoqueen', 'Purugly', 'Raticate', 'Rotom', 'Sableye', 'Seviper', 'Shiftry', 'Skuntank', 'Slaking', 'Smeargle', 'Spinda', 'Spiritomb', 'Stantler', 'Sudowoodo', 'Toxicroak', 'Umbreon', 'Victreebel', 'Wormadam', 'Xatu'], + flamethrower: ['Absol', 'Aerodactyl', 'Aggron', 'Altaria', 'Arcanine', 'Audino', 'Azelf', 'Bastiodon', 'Blacephalon', 'Blissey', 'Camerupt', 'Castform', 'Celesteela', 'Chandelure', 'Chansey', 'Charizard', 'Clefable', 'Clefairy', 'Darmanitan', 'Delphox', 'Dragonite', 'Drampa', 'Druddigon', 'Dunsparce', 'Eelektross', 'Electivire', 'Emboar', 'Entei', 'Exeggutor-Alola', 'Exploud', 'Flareon', 'Flygon', 'Furret', 'Garchomp', 'Golem', 'Goodra', 'Gourgeist', 'Granbull', 'Guzzlord', 'Gyarados', 'Heatmor', 'Heatran', 'Houndoom', 'Hydreigon', 'Incineroar', 'Infernape', 'Kangaskhan', 'Kecleon', 'Kommo-o', 'Lickilicky', 'Machamp', 'Magcargo', 'Magmortar', 'Malamar', 'Manectric', 'Marowak', 'Mawile', 'Mew', 'Moltres', 'Muk', 'Nidoking', 'Nidoqueen', 'Ninetales', 'Noivern', 'Octillery', 'Pyroar', 'Rampardos', 'Rapidash', 'Rhydon', 'Rhyperior', 'Salamence', 'Salazzle', 'Seviper', 'Silvally', 'Simisear', 'Skuntank', 'Slaking', 'Slowbro', 'Slowking', 'Slurpuff', 'Smeargle', 'Snorlax', 'Solrock', 'Talonflame', 'Tauros', 'Togekiss', 'Torkoal', 'Turtonator', 'Typhlosion', 'Tyranitar', 'Watchog', 'Weezing', 'Wigglytuff', 'Zangoose'], + thunderbolt: ['Absol', 'Aggron', 'Ambipom', 'Ampharos', 'Aromatisse', 'Audino', 'Aurorus', 'Azelf', 'Banette', 'Bastiodon', 'Beheeyem', 'Bibarel', 'Blissey', 'Castform', 'Chansey', 'Cinccino', 'Clefable', 'Clefairy', 'Dedenne', 'Delcatty', 'Dragalge', 'Dragonite', 'Drampa', 'Drifblim', 'Dunsparce', 'Eelektross', 'Electivire', 'Electrode', 'Emolga', 'Ferroseed', 'Ferrothorn', 'Froslass', 'Furret', 'Gallade', 'Galvantula', 'Garbodor', 'Gardevoir', 'Gengar', 'Girafarig', 'Golem-Alola', 'Golurk', 'Goodra', 'Gothitelle', 'Granbull', 'Gyarados', 'Heliolisk', 'Illumise', 'Jirachi', 'Jolteon', 'Kangaskhan', 'Kecleon', 'Klinklang', 'Lanturn', 'Lapras', 'Latias', 'Latios', 'Lickilicky', 'Linoone', 'Lopunny', 'Luxray', 'Magearna', 'Magmortar', 'Magneton', 'Magnezone', 'Malamar', 'Manectric', 'Marowak-Alola', 'Marowak-Alola-Totem', 'Meloetta', 'Meowstic', 'Mesprit', 'Mew', 'Miltank', 'Mimikyu', 'Minun', 'Mismagius', 'Mr. Mime', 'Muk', 'Nidoking', 'Nidoqueen', 'Nihilego', 'Oranguru', 'Pachirisu', 'Persian', 'Plusle', 'Porygon-Z', 'Porygon2', 'Primeape', 'Probopass', 'Purugly', 'Raichu', 'Raikou', 'Rampardos', 'Raticate', 'Regice', 'Regigigas', 'Regirock', 'Registeel', 'Rhydon', 'Rhyperior', 'Rotom', 'Silvally', 'Slaking', 'Slurpuff', 'Smeargle', 'Snorlax', 'Stantler', 'Starmie', 'Stoutland', 'Stunfisk', 'Tapu Koko', 'Tapu Lele', 'Tauros', 'Thundurus', 'Togedemaru', 'Tyranitar', 'Uxie', 'Vikavolt', 'Volbeat', 'Watchog', 'Weezing', 'Wigglytuff', 'Xurkitree', 'Zangoose', 'Zapdos', 'Zebstrika', 'Zeraora'], + icebeam: ['Abomasnow', 'Absol', 'Aggron', 'Alomomola', 'Altaria', 'Araquanid', 'Articuno', 'Audino', 'Aurorus', 'Avalugg', 'Azumarill', 'Barbaracle', 'Basculin', 'Bastiodon', 'Beartic', 'Bibarel', 'Blastoise', 'Blissey', 'Bruxish', 'Carracosta', 'Castform', 'Chansey', 'Clawitzer', 'Claydol', 'Clefable', 'Clefairy', 'Cloyster', 'Corsola', 'Crabominable', 'Crawdaunt', 'Cresselia', 'Cryogonal', 'Delcatty', 'Delibird', 'Dewgong', 'Dragonite', 'Drampa', 'Dunsparce', 'Dusknoir', 'Empoleon', 'Exploud', 'Feraligatr', 'Floatzel', 'Froslass', 'Furret', 'Gastrodon', 'Glaceon', 'Glalie', 'Golduck', 'Golisopod', 'Golurk', 'Goodra', 'Gorebyss', 'Greninja', 'Gyarados', 'Huntail', 'Jellicent', 'Jynx', 'Kabutops', 'Kangaskhan', 'Kecleon', 'Kingdra', 'Kingler', 'Kyurem', 'Lanturn', 'Lapras', 'Latias', 'Latios', 'Lickilicky', 'Linoone', 'Lopunny', 'Ludicolo', 'Lumineon', 'Lunatone', 'Luvdisc', 'Magearna', 'Mamoswine', 'Manaphy', 'Mantine', 'Marowak', 'Masquerain', 'Mawile', 'Mesprit', 'Mew', 'Milotic', 'Miltank', 'Nidoking', 'Nidoqueen', 'Ninetales-Alola', 'Octillery', 'Omastar', 'Pelipper', 'Phione', 'Piloswine', 'Politoed', 'Poliwrath', 'Porygon-Z', 'Porygon2', 'Primarina', 'Quagsire', 'Qwilfish', 'Rampardos', 'Raticate', 'Regice', 'Relicanth', 'Rhydon', 'Rhyperior', 'Samurott', 'Seaking', 'Sharpedo', 'Sigilyph', 'Silvally', 'Simipour', 'Slaking', 'Slowbro', 'Slowking', 'Smeargle', 'Sneasel', 'Snorlax', 'Starmie', 'Suicune', 'Swalot', 'Swampert', 'Swanna', 'Tapu Fini', 'Tauros', 'Tentacruel', 'Toxapex', 'Tyranitar', 'Vanilluxe', 'Vaporeon', 'Wailord', 'Walrein', 'Weavile', 'Whiscash', 'Wigglytuff', 'Wishiwashi', 'Zangoose'], + }; + // @ts-ignore Hack for Snaquaza's Z move + const baseMove = move.baseMove ? move.baseMove.id : 'bravebird'; + const pool = claims[baseMove]; + if (!pool) throw new Error(`SSB: Unable to find fake claim movepool for the move: "${baseMove}".`); // Should never happen + const claim = claims[baseMove][this.random(pool.length)]; + // Generate new set + const generator = new RandomStaffBrosTeams('gen7randombattle', this.prng); + let set = generator.randomSet(claim); + // Suppress Ability now to prevent starting new abilities when transforming + pokemon.addVolatile('gastroacid', pokemon); + // Tranform into it + pokemon.formeChange(set.species); + for (let newMove of set.moves) { + let moveTemplate = this.getMove(newMove); + if (pokemon.moves.includes(moveTemplate.id)) continue; + pokemon.moveSlots.push({ + move: moveTemplate.name, + id: moveTemplate.id, + pp: ((moveTemplate.noPPBoosts || moveTemplate.isZ) ? moveTemplate.pp : moveTemplate.pp * 8 / 5), + maxpp: ((moveTemplate.noPPBoosts || moveTemplate.isZ) ? moveTemplate.pp : moveTemplate.pp * 8 / 5), + target: moveTemplate.target, + disabled: false, + disabledSource: '', + used: false, + }); + } + // Update HP + // @ts-ignore Hack for Snaquaza's Z Move + pokemon.claimHP = pokemon.hp; + pokemon.heal(pokemon.maxhp - pokemon.hp, pokemon); + this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + this.add('message', `${pokemon.name} claims to be a ${set.species}!`); + }, + isZ: "fakeclaimiumz", + secondary: null, + target: "normal", + type: "Dark", + }, + // SpaceBass + armyofmushrooms: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Before the turn starts, this Pokemon boosts its Defense and Special Defense by one stage and uses Powder on the target. When this move hits, this Pokemon uses Sleep Powder and Leech Seed. This move's priority is -1 and cannot be boosted by Prankster.", + shortDesc: "+1 Def/SpD, Powder, Leech Seed, Sleep Powder.", + id: "armyofmushrooms", + name: "Army of Mushrooms", + isNonstandard: true, + pp: 10, + priority: -1, + flags: {snatch: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + beforeTurnCallback(pokemon) { + if (pokemon.status === 'slp' || pokemon.status === 'frz') return; + this.boost({def: 1, spd: 1}, pokemon, pokemon, this.getEffect('mushroom army')); + this.useMove("powder", pokemon); + }, + onHit(pokemon) { + this.useMove("sleeppowder", pokemon); + this.useMove("leechseed", pokemon); + }, + secondary: null, + target: "self", + type: "Grass", + }, + // SunGodVolcarona + scorchingglobalvortex: { + accuracy: true, + basePower: 200, + category: "Special", + desc: "Burns the target. Ignores abilities.", + shortDesc: "Burns the target. Ignores abilities.", + id: "scorchingglobalvortex", + name: "Scorching Global Vortex", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Searing Sunraze Smash", target); + }, + onHit(target, source) { + target.trySetStatus('brn', source); + }, + ignoreAbility: true, + isZ: "volcaroniumz", + target: "normal", + type: "Fire", + }, + // Teclis + zekken: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Raises the user's Attack by 2 stages and its Speed by 1 stage.", + shortDesc: "Raises the user's Attack by 2 and Speed by 1.", + id: "zekken", + name: "Zekken", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Swords Dance", source); + }, + boosts: { + atk: 2, + spe: 1, + }, + secondary: null, + target: "self", + type: "Fairy", + }, + // tennisace + groundsurge: { + accuracy: 100, + basePower: 95, + category: "Special", + desc: "This move's type effectiveness against Ground is changed to be super effective no matter what this move's type is.", + shortDesc: "Super effective on Ground.", + id: "groundsurge", + name: "Ground Surge", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Thunder", target); + this.add('-anim', source, "Fissure", target); + }, + ignoreImmunity: {'Electric': true}, + onEffectiveness(typeMod, target, type) { + if (type === 'Ground') return 1; + }, + secondary: null, + target: "normal", + type: "Electric", + }, + // Teremiare + rotate: { + accuracy: 100, + category: "Status", + desc: "The user's replacement will switch out after using their move on the next turn if the replacement's move is successful.", + shortDesc: "User's replacement will switch after using its move.", + id: "rotate", + name: "Rotate", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Celebrate", target); + }, + sideCondition: "rotate", + effect: { + duration: 2, + onStart(source) { + this.add('-message', `${source.active[0].name}'s replacement is going to switch out next turn!`); + }, + onModifyMove(move) { + move.selfSwitch = true; + }, + onBeforeMove(source, move) { + this.add('-message', `${source.name} is preparing to switch out!`); + }, + }, + selfSwitch: true, + secondary: null, + target: "self", + type: "Normal", + }, + // The Immortal + ultrasucc: { + accuracy: true, + basePower: 140, + category: "Physical", + desc: "Has a 100% chance to raise the user's Speed by 1 stage.", + shortDesc: "100% chance to raise the user's Speed by 1.", + id: "ultrasucc", + name: "Ultra Succ", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Dragon Ascent", target); + }, + secondary: { + chance: 100, + self: { + boosts: { + spe: 1, + }, + }, + }, + isZ: "buzzniumz", + target: "normal", + type: "Fighting", + }, + // The Leprechaun + gyroballin: { + accuracy: 100, + basePower: 0, + basePowerCallback(pokemon, target) { + let power = (Math.floor(25 * target.getStat('spe') / pokemon.getStat('spe')) || 1); + if (power > 150) power = 150; + this.debug('' + power + ' bp'); + return power; + }, + category: "Physical", + desc: "Base Power is equal to (25 * target's current Speed / user's current Speed) + 1, rounded down, but not more than 150. If the user's current Speed is 0, this move's power is 1. Summons Trick Room unless Trick Room is already active.", + shortDesc: "More power if slower; sets Trick Room.", + id: "gyroballin", + name: "Gyro Ballin'", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {bullet: 1, contact: 1, protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Gyro Ball", target); + }, + onAfterMoveSecondarySelf(pokemon) { + if (!this.pseudoWeather.trickroom) { + this.addPseudoWeather('trickroom', pokemon); + } + this.add('-fieldactivate', 'move: Pay Day'); // Coins are scattered on the ground + }, + secondary: null, + target: "normal", + type: "Steel", + zMovePower: 160, + contestType: "Cool", + }, + // Tiksi + devolutionwave: { + accuracy: true, + basePower: 25, + category: "Physical", + desc: "This move hits 5 times. After the first hit, the target is either badly poisoned or paralyzed. After the second hit, the user swaps abilities with the target, or the target gains the Water type. After the third hit, Stealth Rock or one layer of Spikes is added to the opponent's side of the field. After the fourth hit, Grassy Terrain or Misty Terrain is summoned. After the fifth hit, the user's Attack or Defense is raised by 1.", + shortDesc: "Hits 5 times with various effects on each hit.", + id: "devolutionwave", + name: "Devolution Wave", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Psywave", target); + }, + multihit: 5, + onAfterHit(target, source, move) { + // @ts-ignore hack for tiksi's move + if (!move.curHits) move.curHits = 1; + let option = this.random(2); + this.add('-anim', source, 'Rock Throw', target); + // @ts-ignore hack for tiksi's move + switch (move.curHits) { + case 1: + if (option) { + target.trySetStatus('tox', source); + } else { + target.trySetStatus('par', source); + } + break; + case 2: + if (option) { + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'illusion', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'wonderguard']; + if (bannedAbilities.includes(target.ability) || bannedAbilities.includes(source.ability)) { + this.add('-fail', target, 'move: Skill Swap'); + break; + } + let targetAbility = this.getAbility(target.ability); + let sourceAbility = this.getAbility(source.ability); + if (target.side === source.side) { + this.add('-activate', source, 'move: Skill Swap', '', '', '[of] ' + target); + } else { + this.add('-activate', source, 'move: Skill Swap', targetAbility, sourceAbility, '[of] ' + target); + } + this.singleEvent('End', sourceAbility, source.abilityData, source); + this.singleEvent('End', targetAbility, target.abilityData, target); + if (targetAbility.id !== sourceAbility.id) { + source.ability = targetAbility.id; + target.ability = sourceAbility.id; + source.abilityData = {id: toId(source.ability), target: source}; + target.abilityData = {id: toId(target.ability), target: target}; + } + this.singleEvent('Start', targetAbility, source.abilityData, source); + this.singleEvent('Start', sourceAbility, target.abilityData, target); + } else { + if (!target.setType('Water')) { + this.add('-fail', target, 'move: Soak'); + } else { + this.add('-start', target, 'typechange', 'Water'); + } + } + break; + case 3: + if (option) { + target.side.addSideCondition('stealthrock'); + } else { + target.side.addSideCondition('spikes'); + } + break; + case 4: + if (option) { + this.setTerrain('grassyterrain', source); + } else { + this.setTerrain('mistyterrain', source); + } + break; + case 5: + if (option) { + this.boost({atk: 1}, source); + } else { + this.boost({def: 1}, source); + } + break; + } + // @ts-ignore hack for tiksi's move + move.curHits++; + }, + isZ: "tiksiumz", + secondary: null, + target: "normal", + type: "Rock", + }, + // torkool + smokebomb: { + accuracy: true, + category: "Status", + desc: "Moves all hazards that are on the user's side of the field to the foe's side of the field. Sets Stealth Rock on the foe's side, after which the user switches out.", + shortDesc: "Hazards -> foe side. Set SR. User switches out.", + id: "smokebomb", + name: "Smoke Bomb", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1, reflectable: 1, authentic: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Smokescreen", target); + this.add('-anim', source, "Parting Shot", target); + }, + onHit(target, source) { + const sideConditions = {'spikes': 1, 'toxicspikes': 1, 'stealthrock': 1, 'stickyweb': 1}; + for (let i in sideConditions) { + let layers = source.side.sideConditions[i] ? (source.side.sideConditions[i].layers || 1) : 1; + if (source.side.removeSideCondition(i)) { + this.add('-sideend', source.side, this.getEffect(i).name, '[from] move: Smoke Bomb', '[of] ' + source); + for (layers; layers > 0; layers--) target.side.addSideCondition(i, source); + } + } + target.side.addSideCondition('stealthrock'); + }, + selfSwitch: true, + secondary: null, + target: "normal", + type: "Fire", + }, + // Trickster + minisingularity: { + accuracy: 55, + basePower: 0, + basePowerCallback(pokemon, target) { + let targetWeight = target.getWeight(); + if (targetWeight >= 200) { + this.debug('120 bp'); + return 120; + } + if (targetWeight >= 100) { + this.debug('100 bp'); + return 100; + } + if (targetWeight >= 50) { + this.debug('80 bp'); + return 80; + } + if (targetWeight >= 25) { + this.debug('60 bp'); + return 60; + } + if (targetWeight >= 10) { + this.debug('40 bp'); + return 40; + } + this.debug('20 bp'); + return 20; + }, + category: "Special", + desc: "This move's Base Power is 20 if the target weighs less than 10 kg, 40 if its weight is less than 25 kg, 60 if its weight is less than 50 kg, 80 if its weight is less than 100 kg, 100 if its weight is less than 200 kg, and 120 if its weight is greater than or equal to 200 kg. After doing damage, the target's item is replaced with an Iron Ball, and the target's weight is doubled.", + shortDesc: "BP:weight; increases foe weight; foe item=Iron Ball.", + id: "minisingularity", + name: "Mini Singularity", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + volatileStatus: "minisingularity", + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Spacial Rend", target); + this.add('-anim', source, "Flash", target); + }, + onAfterHit(target, source) { + if (source.hp) { + let item = target.takeItem(); + if (item) { + this.add('-enditem', target, item.name, '[from] move: Mini Singularity', '[of] ' + source); + target.setItem('ironball'); + this.add('-message', target.name + ' obtained an Iron Ball.'); + } + } + }, + effect: { + noCopy: true, + onStart(pokemon) { + this.add('-message', pokemon.name + ' weight has doubled.'); + }, + onModifyWeight(weight) { + return weight * 2; + }, + }, + secondary: null, + target: "normal", + type: "Psychic", + }, + // UnleashOurPassion + continuous1v1: { + accuracy: 90, + basePower: 120, + category: "Special", + desc: "Fully restores the user's HP if this move knocks out the target.", + shortDesc: "Fully restores user's HP if this move KOes the target.", + id: "continuous1v1", + name: "Continuous 1v1", + isNonstandard: true, + pp: 15, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Discharge", target); + this.add('-anim', source, "First Impression", target); + }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) this.heal(pokemon.maxhp, pokemon, pokemon, move); + }, + secondary: null, + target: "normal", + type: "Electric", + }, + // urkerab + holyorders: { + accuracy: true, + basePower: 0, + category: "Status", + desc: "Summons two of Attack Order, Defense Order, and Heal Order at random to combine for some assortment of the following effects: has a Base Power of 90 and a higher chance for a critical hit, raises the user's Defense and Special Defense by 1 stage, and heals the user by half of its maximum HP, rounded half up.", + shortDesc: "Summons two of Attack, Defense, and Heal Order.", + id: "holyorders", + name: "Holy Orders", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {snatch: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onHit(target, source) { + let orders = ["healorder", "defendorder", "attackorder"]; + this.shuffle(orders); + for (const [i, order] of orders.entries()) { + if (i > 1) return; + let target = order === "attackorder" ? source.side.foe.active[0] : source; + this.useMove(order, source, target); + } + }, + secondary: null, + target: "self", + type: "Bug", + }, + // Uselesscrab + revampedsuspectphilosophy: { + basePower: 160, + accuracy: true, + category: "Physical", + desc: "No additional effect.", + shortDesc: "No additional effect.", + id: "revampedsuspectphilosophy", + name: "Revamped Suspect Philosophy", + isNonstandard: true, + pp: 1, + priority: 0, + flags: {}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Subzero Slammer", target); + this.add('-anim', source, "Tectonic Rage", target); + }, + secondary: null, + isZ: "nichiumz", + target: "normal", + type: "Ground", + }, + // Volco + explosivedrain: { + basePower: 90, + accuracy: 100, + category: "Special", + desc: "The user recovers half the HP lost by the target, rounded half up. If Big Root is held, the user recovers 1.3x the normal amount of HP, rounded half down.", + shortDesc: "User recovers 50% of the damage dealt.", + id: "explosivedrain", + name: "Explosive Drain", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, heal: 1}, + drain: [1, 2], + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Fire Blast", target); + this.add('-anim', source, "Giga Drain", target); + }, + secondary: null, + target: "normal", + type: "Fire", + }, + // Xayah + stunningdance: { + accuracy: 100, + basePower: 95, + category: "Special", + desc: "Has a 20% chance to make the target flinch and a 100% chance to paralyze the target. Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, 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: "20% to flinch; 100% to paralyze; traps target.", + id: "stunningdance", + name: "Stunning Dance", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, dance: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Revelation Dance", source); + this.add('-anim', source, "Air Slash", target); + this.add('-anim', source, "Air Slash", target); + }, + onHit(target, source, move) { + if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); + }, + secondaries: [ + { + chance: 20, + volatileStatus: 'flinch', + }, + { + chance: 100, + status: 'par', + }, + ], + zMovePower: 175, + target: "normal", + type: "Flying", + }, + // XpRienzo ☑◡☑ + blehflame: { + accuracy: 100, + basePower: 80, + category: "Special", + desc: "Has a 10% chance to raise all of the user's stats by 1 stage.", + shortDesc: "10% chance to raise all stats by 1 (not acc/eva).", + id: "blehflame", + name: "Bleh Flame", + isNonstandard: true, + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Flame Charge", target); + this.add('-anim', source, "Overheat", target); + }, + secondary: { + chance: 10, + self: { + boosts: { + atk: 1, + def: 1, + spa: 1, + spd: 1, + spe: 1, + }, + }, + }, + target: "normal", + type: "Fire", + }, + // Yuki + cutieescape: { + accuracy: true, + category: "Status", + desc: "The user is replaced with another Pokemon in its party. The opponent is confused, trapped, and infatuated regardless of the replacement's gender. This move fails unless the user already took damage this turn.", + shortDesc: "If hit; switches out + confuses, traps, infatuates.", + id: "cutieescape", + name: "Cutie Escape", + isNonstandard: true, + pp: 10, + priority: -6, + flags: {mirror: 1}, + beforeTurnCallback(pokemon) { + pokemon.addVolatile('cutieescape'); + this.add('-message', `${pokemon.name} is preparing to flee!`); + }, + beforeMoveCallback(pokemon) { + if (!pokemon.volatiles['cutieescape'] || !pokemon.volatiles['cutieescape'].tookDamage) { + this.add('-fail', pokemon, 'move: Cutie Escape'); + this.add('-hint', 'Cutie Escape only works when Yuki is hit in the same turn the move is used.'); + return true; + } + }, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Baton Pass", source); + }, + onHit(target, source) { + target.addVolatile('confusion'); + target.addVolatile('cutietrap'); + }, + effect: { + duration: 1, + onStart(pokemon) { + this.add('-singleturn', pokemon, 'move: Cutie Escape'); + }, + onHit(pokemon, source, move) { + if (move.category !== 'Status') { + pokemon.volatiles['cutieescape'].tookDamage = true; + } + }, + }, + selfSwitch: true, + target: "normal", + type: "Fairy", + }, + // Zarel + relicsongdance: { + accuracy: 100, + basePower: 60, + multihit: 2, + category: "Special", + desc: "Hits twice and ignores type immunities. Before the second hit, the user switches to its Pirouette forme, and this move's second hit deals physical Fighting-type damage. After the second hit, the user reverts to its Aria forme. Fails unless the user is Meloetta.", + shortDesc: "One hit each from user's Aria and Pirouette formes.", + id: "relicsongdance", + name: "Relic Song Dance", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, + ignoreImmunity: true, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onTryHit(target, pokemon) { + if (pokemon.name !== 'Zarel') { + this.add('-fail', pokemon); + this.add('-hint', 'Only Zarel can use Relic Song Dance.'); + return null; + } + this.attrLastMove('[still]'); + let move = pokemon.template.speciesid === 'meloettapirouette' ? 'Brick Break' : 'Relic Song'; + this.add('-anim', pokemon, move, target); + }, + onHit(target, pokemon, move) { + if (pokemon.template.speciesid === 'meloettapirouette') { + pokemon.formeChange('Meloetta'); + } else if (pokemon.formeChange('Meloetta-Pirouette')) { + move.category = 'Physical'; + move.type = 'Fighting'; + } + }, + onAfterMove(pokemon) { + // Ensure Meloetta goes back to standard form after using the move + if (pokemon.template.speciesid === 'meloettapirouette') { + pokemon.formeChange('Meloetta'); + } + this.add('-hint', 'Zarel still has the Serene Grace ability.'); + }, + effect: { + duration: 1, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (pokemon.template.speciesid === 'meloettapirouette') { + pokemon.formeChange('Meloetta'); + } else { + pokemon.formeChange('Meloetta-Pirouette'); + } + pokemon.removeVolatile('relicsong'); + }, + }, + target: "allAdjacentFoes", + type: "Psychic", + }, + // Zyg + mylife: { + accuracy: true, + category: "Status", + desc: "Badly poisons all Pokemon on the field.", + shortDesc: "Badly poisons all Pokemon on the field.", + id: "mylife", + name: "My Life", + isNonstandard: true, + pp: 10, + priority: 0, + flags: {protect: 1, mirror: 1}, + onTryMovePriority: 100, + onTryMove() { + this.attrLastMove('[still]'); + }, + onPrepareHit(target, source) { + this.add('-anim', source, "Toxic", target); + }, + onHit(target, source) { + let success = false; + if (target.trySetStatus('tox', source)) success = true; + if (source.trySetStatus('tox', source)) success = true; + return success; + }, + secondary: null, + target: "normal", + type: "Poison", + }, + // Modified Moves \\ + // Purple Pills is immune to taunt + "taunt": { + inherit: true, + volatileStatus: 'taunt', + effect: { + duration: 3, + onStart(target) { + if (target.activeTurns && !this.willMove(target)) { + this.effectData.duration++; + } + this.add('-start', target, 'move: Taunt'); + }, + onResidualOrder: 12, + onEnd(target) { + this.add('-end', target, 'move: Taunt'); + }, + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).category === 'Status' && this.getMove(moveSlot.id).id !== 'purplepills') { + pokemon.disableMove(moveSlot.id); + } + } + }, + onBeforeMovePriority: 5, + onBeforeMove(attacker, defender, move) { + if (!move.isZ && move.category === 'Status' && move.id !== 'purplepills') { + this.add('cant', attacker, 'move: Taunt', move); + return false; + } + }, + }, + }, +}; + +exports.BattleMovedex = BattleMovedex; diff --git a/data/mods/ssb/pokedex.js b/data/mods/ssb/pokedex.js new file mode 100644 index 0000000000000..ae7938fc858db --- /dev/null +++ b/data/mods/ssb/pokedex.js @@ -0,0 +1,96 @@ +'use strict'; + +/**@type {{[k: string]: ModdedTemplateData}} */ +let BattlePokedex = { + /* + // Example + speciesid: { + 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 + }, + */ + // Andy + absolmega: { + inherit: true, + abilities: {0: "Adaptability"}, + }, + // Arrested + blastoisemega: { + inherit: true, + abilities: {0: "Shell Shocker"}, + }, + // Bhris Brown + swampertmega: { + inherit: true, + abilities: {0: "Stimulated Pride"}, + }, + // deg + gengarmega: { + inherit: true, + abilities: {0: "Bad Dreams"}, + }, + // E4 Flint + steelixmega: { + inherit: true, + abilities: {0: 'Stark Mountain'}, + types: ['Steel', 'Ground', 'Fire'], + }, + // eternally + ducklett: { + inherit: true, + // Doubled spa and spe + baseStats: {hp: 62, atk: 44, def: 50, spa: 88, spd: 50, spe: 110}, + }, + // grimAuxiliatrix + aggronmega: { + inherit: true, + abilities: {0: 'Intimidate'}, + }, + // Kaiju Bunny + gliscor: { + inherit: true, + abilities: {0: 'Poison Heal'}, // Ability change is permanent + }, + // Level 51 + porygon2: { + inherit: true, + abilities: {0: 'Stamina'}, + }, + // Lionyx + gardevoirmega: { + inherit: true, + abilities: {0: 'Frozen Skin'}, + }, + // MacChaeger + mantyke: { + inherit: true, + baseStats: {hp: 90, atk: 40, def: 100, spa: 120, spd: 240, spe: 100}, + }, + // martha + dianciemega: { + inherit: true, + abilities: {0: 'Pixilate'}, + }, + // Morfent + banettemega: { + inherit: true, + abilities: {0: 'Comatose'}, + }, + // Psynergy + blazikenmega: { + inherit: true, + abilities: {0: 'Wrath'}, + }, + // Saburo + metagrossmega: { + inherit: true, + abilities: {0: 'Levitate'}, + }, + // Teclis + gallademega: { + inherit: true, + abilities: {0: 'Natural Cure'}, + }, +}; + +exports.BattlePokedex = BattlePokedex; diff --git a/data/mods/ssb/random-teams.js b/data/mods/ssb/random-teams.js new file mode 100644 index 0000000000000..74f91688d2c4c --- /dev/null +++ b/data/mods/ssb/random-teams.js @@ -0,0 +1,713 @@ +'use strict'; + +/** @typedef {{[name: string]: SSBSet}} SSBSets */ +/** + * @typedef {Object} SSBSet + * @property {string} species + * @property {string | string[]} ability + * @property {string | string[]} item + * @property {GenderName} gender + * @property {(string | string[])[]} moves + * @property {string} signatureMove + * @property {{hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number}=} evs + * @property {{hp?: number, atk?: number, def?: number, spa?: number, spd?: number, spe?: number}=} ivs + * @property {string | string[]} nature + * @property {number=} level + * @property {boolean=} shiny + */ + +const RandomTeams = require('../../random-teams'); + +class RandomStaffBrosTeams extends RandomTeams { + randomStaffBrosTeam() { + /** @type {PokemonSet[]} */ + let team = []; + /** @type {SSBSets} */ + let sets = { + /* + // 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! + '2xTheTap': { + species: 'Arcanine', ability: 'Mold Breaker', item: 'Life Orb', gender: 'M', + moves: ['Sacred Fire', 'Extreme Speed', 'Morning Sun'], + signatureMove: 'Noble Howl', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', shiny: true, + }, + '5gen': { + species: 'Sawsbuck', ability: 'Season\'s Gift', item: 'Heat Rock', gender: 'M', + moves: ['Sunny Day', 'Return', 'High Jump Kick'], + signatureMove: 'Too Much Saws', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + 'ACakeWearingAHat': { + species: 'Dunsparce', ability: 'Serene Grace', item: 'Leftovers', gender: 'M', + moves: ['Headbutt', 'Shadow Strike', 'Roost'], + signatureMove: 'Sparce Dance', + evs: {hp: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + 'Aelita': { + species: 'Porygon-Z', ability: 'Protean', item: 'Life Orb', gender: 'F', + moves: [['Boomburst', 'Moonblast'], 'Blue Flare', 'Chatter'], + signatureMove: 'Energy Field', + evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Modest', + }, + 'Akir': { + species: 'Parasect', ability: 'Regrowth', item: 'Leftovers', gender: 'M', + moves: ['Spore', 'Leech Life', ['Toxic', 'Healing Wish', 'Parting Shot']], + signatureMove: 'Compost', + evs: {hp: 248, atk: 8, spd: 252}, nature: 'Careful', + }, + 'Amaluna': { + species: 'Octillery', ability: 'Neuroforce', item: 'Expert Belt', gender: 'F', + moves: ['Surf', 'Fire Blast', 'Freeze-Dry'], + signatureMove: 'Turismo Splash', + evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0, spe: 0}, nature: 'Quiet', + }, + 'Andy >_>': { + species: 'Absol', ability: 'Adaptability', item: 'Absolite', gender: 'M', + moves: ['Pursuit', 'Destiny Bond', 'Sucker Punch'], + signatureMove: 'Pilfer', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', + }, + 'ant': { + species: 'Durant', ability: 'Flash Fire', item: 'Leftovers', gender: 'F', + moves: ['King\'s Shield', 'U-turn', 'Pursuit'], + signatureMove: 'TRU ANT', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + 'A Quag to The Past': { + species: 'Quagsire', ability: 'Unaware', item: 'Leftovers', gender: 'M', + moves: ['Recover', 'Toxic', 'Scald'], + signatureMove: 'Murky Ambush', + evs: {hp: 252, def: 252, spd: 4}, ivs: {spe: 0}, nature: 'Relaxed', + }, + 'Arcticblast': { + species: 'Garbodor', ability: 'Analytic', item: 'Assault Vest', gender: 'M', + moves: ['Knock Off', 'Earthquake', ['Horn Leech', 'U-turn', 'Avalanche']], + signatureMove: 'Trashalanche', + evs: {hp: 252, atk: 252, def: 4}, ivs: {spe: 0}, nature: 'Brave', + }, + 'Arsenal': { + species: 'Arceus', ability: 'Logia', gender: 'M', + 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: ['Mimic', 'Stealth Rock', 'Memento'], + signatureMove: 'Come on you Gunners', + evs: {hp: 4, spa: 252, spe: 252}, ivs: {hp: 20, def: 20, spd: 20}, nature: 'Naive', + }, + 'Beowulf': { + species: 'Beedrill', ability: ['Download', 'Speed Boost'], item: 'Beedrillite', gender: 'M', + moves: ['Spiky Shield', 'Gunk Shot', ['Bolt Strike', 'Diamond Storm', 'Sacred Fire']], + signatureMove: 'Buzzing of the Swarm', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + 'Bhris Brown': { + species: 'Swampert', ability: 'Damp', item: 'Swampertite', gender: 'M', + moves: ['Waterfall', 'Ice Punch', 'Earthquake'], + signatureMove: 'Final Impact', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Adamant', shiny: true, + }, + 'biggie': { + species: 'Snorlax', ability: 'Fur Coat', item: 'Leftovers', gender: 'M', + moves: ['Diamond Storm', 'Knock Off', ['Drain Punch', 'Precipice Blades']], + signatureMove: 'Food Rush', + evs: {hp: 4, atk: 252, spd: 252}, nature: 'Adamant', + }, + 'Bimp': { + species: 'Stakataka', ability: 'Learn Something New!', item: 'Rockium Z', gender: 'M', + moves: ['Gyro Ball', 'Stone Edge', 'Earthquake'], + signatureMove: 'Trivia Room', + evs: {hp: 252, atk: 252, spd: 4}, ivs: {spe: 0}, nature: 'Brave', + }, + 'bobochan': { + species: 'Emolga', ability: 'Huge Power', item: 'Choice Band', gender: 'M', + moves: ['Brave Bird', ['Knock Off', 'Encore'], 'U-turn'], + signatureMove: 'Thousand Circuit Overload', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', + }, + 'Brandon': { + species: 'Shaymin', ability: 'Gracidea Mastery', item: 'Red Card', gender: 'N', + moves: ['Seed Flare', ['Earth Power', 'Moonblast', 'Psychic'], ['Oblivion Wing', 'Strength Sap']], + signatureMove: 'Blustery Winds', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: ['Modest', 'Timid'], + }, + 'bumbadadabum': { + species: 'Slowbro', ability: 'Regenerator', item: 'Leftovers', gender: 'M', + moves: ['Scald', 'Slack Off', 'Psyshock'], + signatureMove: 'Wonder Trade', + evs: {hp: 252, def: 252, spa: 4}, nature: 'Bold', + }, + 'cant say': { + species: 'Aegislash', ability: 'Stance Change', item: ['Leftovers', 'Terrain Extender', 'Muscle Band'], gender: 'M', + moves: ['Shift Gear', 'Spectral Thief', 'Sacred Sword'], + signatureMove: 'a e s t h e t i s l a s h', + evs: {hp: 32, atk: 252, spd: 4, spe: 220}, nature: 'Jolly', + }, + 'cc': { + species: 'Cobalion', ability: 'Lurking', item: ['Shuca Berry', 'Chople Berry', 'Fightinium Z'], gender: 'M', + moves: ['Focus Blast', 'Flash Cannon', ['Thunder', 'Blizzard']], + signatureMove: 'Restarting Router', + evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Ceteris': { + species: 'Greninja', ability: 'Protean', item: 'Expert Belt', gender: 'M', + moves: ['Dark Pulse', 'Origin Pulse', 'Gunk Shot', 'Shadow Sneak'], + signatureMove: 'Bringer of Darkness', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, + }, + 'Cerberax': { + species: 'Wailord', ability: 'Levitate', item: 'Figy Berry', gender: 'F', + moves: ['Shift Gear', 'Waterfall', 'Recover'], + signatureMove: 'Blimp Crash', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', + }, + 'chaos': { + species: 'Bewear', ability: 'Fur Coat', item: 'Red Card', gender: 'M', + moves: ['Extreme Speed', 'Close Combat', 'Knock Off', ['Swords Dance', 'Recover']], + signatureMove: 'Forcewin', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', + }, + 'Chloe': { + species: 'Tapu Fini', ability: 'Prankster', item: 'Light Clay', gender: 'F', + moves: ['Fleur Cannon', 'Parting Shot', ['Taunt', 'Topsy-Turvy']], + signatureMove: 'beskyttelsesnet', + evs: {hp: 248, def: 252, spa: 8}, ivs: {atk: 0}, nature: 'Bold', + }, + 'Cleo': { + species: 'Sealeo', ability: 'Adrenaline Rush', item: 'Leftovers', gender: 'M', + moves: ['Icy Wind', 'Ice Beam', 'Wrap'], + signatureMove: 'Loving Embrace', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Modest', shiny: true, + }, + 'deg': { + species: 'Gengar', ability: 'Bad Dreams', item: 'Gengarite', gender: 'M', + moves: [['Hex', 'Shadow Ball'], 'Sludge Wave', 'Focus Blast'], + signatureMove: 'Lucid Dreams', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: ['Modest', 'Timid'], + }, + 'DragonWhale': { + species: 'Garchomp', ability: 'Hustle', item: 'Groundium Z', gender: 'M', + moves: ['Earthquake', 'Dragon Rush', 'Diamond Storm'], + signatureMove: 'Earth\'s Blessing', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', + }, + 'duck': { + species: 'Farfetch\'d', ability: 'Super Luck', item: 'Stick', gender: 'M', + moves: ['Shift Gear', 'Superpower', 'Dragon Ascent'], + signatureMove: 'Holy Duck!', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', + }, + 'E4 Flint': { + species: 'Steelix', ability: 'Sturdy', item: 'Magmarizer', gender: 'M', + moves: ['Sunsteel Strike', 'Thousand Arrows', ['Dragon Tail', 'Knock Off', 'Fire Lash', 'Fire Lash']], // Fire Lash listed twice for 50% chance to get it + signatureMove: 'Fang of the Fire King', + evs: {hp: 252, atk: 36, def: 100, spd: 120}, ivs: {spe: 0}, nature: 'Brave', + }, + 'explodingdaisies': { + species: 'Houndoom', ability: 'Flash Fire', item: 'Houndoominite', gender: 'M', + moves: ['Sludge Bomb', 'Nasty Plot', 'Dark Pulse'], + signatureMove: 'DOOM!', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Eien': { + species: 'Mew', ability: 'Psychic Surge', item: 'Terrain Extender', gender: 'N', + moves: ['Calm Mind', 'Psychic', 'Psyshock'], + signatureMove: 'Ancestral Power', + evs: {hp: 252, spd: 4, spe: 252}, nature: 'Timid', + }, + 'eternally': { + species: 'Ducklett', ability: 'Primordial Sea', item: 'Eviolite', gender: 'M', + moves: ['Origin Pulse', 'Hurricane', 'Roost'], + signatureMove: 'Quack', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'EV': { + species: 'Eevee', ability: 'Adaptability', item: 'Leftovers', gender: 'M', + moves: ['Baton Pass', 'Wish', 'Protect'], + signatureMove: 'Evoblast', + evs: {hp: 252, spe: 252}, nature: 'Serious', + }, + 'false': { + species: 'Rayquaza-Mega', ability: 'Infiltrator', item: 'Focus Band', gender: 'F', + moves: ['Celebrate'], + signatureMove: 'fr*ck', + evs: {atk: 252, spe: 252, def: 4}, nature: 'Jolly', shiny: true, + }, + 'FOMG': { + species: 'Golem', ability: 'Serene Grace', item: 'Astleyium Z', gender: 'M', + moves: ['Earthquake', 'Explosion', 'Iron Head'], + signatureMove: 'Rock Slide', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', + }, + 'grimAuxiliatrix': { + species: 'Aggron', ability: 'Sturdy', item: 'Aggronite', gender: '', + moves: [['Toxic', 'Stealth Rock'], ['Stone Edge', 'Heat Crash'], 'Earthquake'], + signatureMove: 'Pain Train', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', + }, + 'Hippopotas': { + species: 'Hippopotas', ability: 'Regenerator', item: 'Eviolite', gender: 'N', + moves: ['Stealth Rock', 'Spikes', 'Toxic Spikes', 'Sticky Web'], + signatureMove: 'Hazard Pass', + evs: {hp: 252, def: 252, spd: 4}, ivs: {atk: 0, spa: 0}, nature: 'Bold', + }, + 'Hipster Sigilyph': { + species: 'Sigilyph', ability: 'Simple', item: 'Focus Sash', gender: 'M', + moves: ['Oblivion Wing', 'Silver Wind', 'Calm Mind'], + signatureMove: 'Mainstream Shock', + evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'HoeenHero': { + species: 'Ludicolo', ability: 'Scripter', item: 'Terrain Extender', gender: 'M', + moves: [['Hydro Pump', 'Scald'], 'Giga Drain', 'Ice Beam'], + signatureMove: 'Scripted Terrain', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', + }, + 'Hubriz': { + species: 'Roserade', ability: 'Merciless', item: 'Focus Sash', gender: 'F', + moves: ['Toxic Spikes', 'Fleur Cannon', 'Sludge Bomb'], + signatureMove: 'Flower Tornado', + evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Hurl': { + species: 'Grimer-Alola', ability: 'Poison Touch', item: 'Eviolite', gender: 'M', + moves: ['Knock Off', 'Earthquake', 'Recover'], + signatureMove: 'Hurl', + evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', + }, + 'imagi': { + species: 'Tapu Lele', ability: 'Psychic Surge', item: 'Luminous Moss', gender: 'N', + moves: [['Recover', 'Quiver Dance'], 'Nature\'s Madness', ['Psyshock', 'Moonblast']], + signatureMove: 'Delayed Promise', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Modest', + }, + 'imas': { + species: 'Skarmory', ability: 'Gale Wings v1', item: 'Sharp Beak', gender: 'M', + moves: ['Swords Dance', 'Roost', ['Taunt', 'Stealth Rock']], + signatureMove: 'B O I', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Adamant', + }, + 'Iyarito': { + species: 'Vaporeon', ability: 'Poison Heal', item: 'Leftovers', gender: 'F', + moves: ['Scald', 'Wish', 'Toxic'], + signatureMove: 'Víbora', + evs: {hp: 252, def: 220, spd: 36}, nature: 'Bold', shiny: true, + }, + 'jdarden': { + species: 'Dragonair', ability: 'Fur Coat', item: 'Leftovers', gender: 'M', + moves: ['Rest', 'Sleep Talk', 'Quiver Dance'], + signatureMove: 'Wyvern\'s Wail', + evs: {hp: 252, def: 252, spd: 4}, ivs: {atk: 0}, nature: 'Bold', + }, + 'Kaiju Bunny': { + species: 'Gligar', ability: 'Immunity', item: 'Eviolite', gender: 'F', + moves: ['Earthquake', 'Roost', ['Toxic', 'Stealth Rock']], + signatureMove: 'Bestial Strike', + evs: {hp: 252, def: 156, spd: 100}, nature: 'Impish', + }, + 'Kalalokki': { + species: 'Wingull', ability: 'Swift Swim', item: ['Waterium Z', 'Flyinium Z', 'Electrium Z'], gender: 'M', + moves: ['Water Spout', 'Hurricane', 'Thunder'], + signatureMove: 'Maelström', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Modest', + }, + 'kay': { + species: 'Inkay', ability: 'Contrary', item: 'Eviolite', gender: 'M', + moves: ['Power Trip', 'Rest', 'Sleep Talk'], + signatureMove: 'Inkzooka', + evs: {hp: 252, atk: 144, spe: 112}, nature: 'Adamant', + }, + 'KingSwordYT': { + species: 'Pangoro', ability: 'Kung Fu Panda', item: 'Life Orb', gender: 'M', + moves: ['Ice Punch', 'Bullet Punch', 'Knock Off'], + signatureMove: 'Dragon Warrior Touch', + evs: {atk: 252, hp: 4, spe: 252}, nature: 'Jolly', + }, + 'Level 51': { + species: 'Porygon2', ability: 'Stamina', item: 'Eviolite', gender: 'N', + moves: ['Recover', ['Seismic Toss', 'Night Shade'], ['Cosmic Power', 'Aqua Ring']], + signatureMove: 'Next Level Strats', + evs: {hp: 236, def: 220, spd: 48, spe: 4}, ivs: {atk: 0}, nature: 'Calm', + }, + 'LifeisDANK': { + species: 'Delibird', ability: 'Mountaineer', item: 'Focus Sash', gender: 'F', + moves: ['Ice Shard', 'Return', 'Explosion'], + signatureMove: 'Bar Fight', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', + }, + 'Lionyx': { + species: 'Gardevoir', ability: 'Frozen Skin', item: 'Gardevoirite', gender: 'F', + moves: [['Thunder Wave', 'Will-O-Wisp', 'Toxic', 'Sing'], ['Moonblast', 'Psychic'], 'Calm Mind'], + signatureMove: 'Let it Go', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, + }, + 'Lost Seso': { + species: 'Typhlosion', ability: 'Dazzling', item: 'Firium Z', gender: 'M', + moves: ['Calm Mind', 'Petal Dance', 'Fiery Dance'], + signatureMove: 'Shuffle Ramen Dance', + evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', shiny: true, + }, + 'Lycanium Z': { + species: 'Cresselia', ability: 'Wonder Skin', item: 'Leftovers', gender: 'N', + moves: ['Moonlight', 'Heart Swap', 'Baton Pass'], + signatureMove: 'Purple Pills', + evs: {hp: 176, def: 80, spd: 252}, ivs: {atk: 0}, nature: 'Calm', + }, + 'MacChaeger': { + species: 'Mantyke', ability: 'Water Veil', item: ['Life Orb', 'Normalium Z'], gender: 'M', + moves: ['Scald', 'Aeroblast', 'Sleep Talk'], + signatureMove: 'Nap Time', + evs: {hp: 252, spa: 80, spe: 176}, ivs: {atk: 0}, nature: 'Modest', + }, + 'MajorBowman': { + species: 'Victini', ability: 'Victory Star', item: 'Victinium Z', gender: 'M', + moves: ['Bolt Strike', 'Zen Headbutt', 'U-turn'], + signatureMove: 'V-create', + evs: {hp: 252, atk: 4, spe: 252}, nature: 'Jolly', + }, + 'martha': { + species: 'Diancie', ability: 'Pixilate', item: 'Diancite', gender: 'F', + moves: ['Hyper Voice', ['Fire Blast', 'Earth Power'], 'Photon Geyser'], + signatureMove: 'Crystal Boost', + evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Marty': { + species: 'Silvally', ability: 'RKS System', item: 'Normal Gem', gender: 'N', + moves: ['Parting Shot', 'Explosion', 'Extreme Speed'], + signatureMove: 'Type Analysis', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', + }, + 'Meicoo': { + species: 'Pidgeot', ability: 'Prankster', item: 'Pidgeotite', gender: 'M', + moves: ['Hurricane', 'Inferno', 'Roost'], + signatureMove: '/scavenges u', + evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Megazard': { + species: 'Exeggutor-Alola', ability: 'Stand Up Tall', item: 'Leftovers', gender: 'M', + moves: ['Strength Sap', 'Growth', 'Stockpile'], + signatureMove: 'Tipping Over', + evs: {hp: 252, atk: 252, def: 4}, ivs: {spe: 0}, nature: 'Adamant', + }, + 'MicktheSpud': { + species: 'Lycanroc-Midnight', ability: 'Fake Crash', item: 'Life Orb', gender: 'M', // Changes to Lycanrock-Dusk when ability is triggered + moves: ['Stone Edge', ['Earthquake', 'High Horsepower'], ['Dragon Dance', 'Swords Dance']], + signatureMove: 'Cyclone Spin', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + 'Mitsuki': { + species: 'Serperior', ability: 'Contrary', item: 'Leftovers', gender: 'M', + moves: ['Leech Seed', 'Substitute', ['Earth Power', 'Flamethrower', 'Glare']], + signatureMove: 'Python Ivy', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'moo': { + species: 'Miltank', ability: 'Scrappy', item: 'Life Orb', gender: 'M', + moves: ['Extreme Speed', 'Rapid Spin', 'Close Combat'], + signatureMove: 'Protein Shake', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', + }, + 'Morfent ( _̀> ̀)': { + species: 'Banette', ability: 'Intimidate', item: 'Banettite', gender: 'M', + moves: ['Shadow Sneak', 'Spectral Thief', 'Drain Punch'], + signatureMove: 'E', + evs: {hp: 184, atk: 252, def: 68, spd: 4}, ivs: {spe: 0}, nature: 'Brave', + }, + 'nui': { + species: 'Milotic', ability: 'Prismatic Surge', item: 'Waterium Z', gender: 'N', + moves: ['Steam Eruption', 'Toxic', 'Recover'], + signatureMove: 'Pyramiding Song', + evs: {hp: 252, def: 252, spd: 4}, ivs: {atk: 0}, nature: 'Bold', shiny: true, + }, + 'OM': { + species: 'Flareon', ability: 'Pixilate', item: 'Metronome', gender: 'M', + moves: ['Leaf Blade', 'Thousand Arrows', 'Extreme Speed'], + signatureMove: 'OM Boom', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Adamant', + }, + 'Osiris': { + species: 'Pumpkaboo-Super', ability: 'Sacred Shadow', item: 'Eviolite', gender: 'M', + moves: [['Leech Seed', 'Will-O-Wisp'], 'Recover', 'Seed Bomb'], + signatureMove: 'Night March', + evs: {hp: 252, atk: 144, spd: 112}, ivs: {spe: 0}, nature: 'Brave', shiny: true, + }, + 'Overneat': { + species: 'Sylveon', ability: 'Fairy Aura', item: 'Life Orb', gender: 'F', + moves: ['Nasty Plot', 'Psyshock', 'Earth Power'], + signatureMove: 'Total Leech', + evs: {def: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Pablo': { + species: 'Blastoise', ability: 'Torrent', item: 'Blastoisinite', gender: 'M', + moves: ['Muddy Water', 'Ice Beam', 'Slack Off'], + signatureMove: 'Jail Shell', + evs: {hp: 252, def: 4, spa: 252}, nature: 'Modest', + }, + 'Paradise': { + species: 'Muk', ability: 'Unaware', item: 'Black Sludge', gender: '', + moves: ['Wish', 'Knock Off', 'Protect'], + signatureMove: 'Corrosive Toxic', + evs: {hp: 252, def: 4, spd: 252}, nature: 'Careful', + }, + 'pluviometer': { + species: 'Mismagius', ability: 'Sheer Force', item: 'Life Orb', gender: '', + moves: ['Taunt', 'Moonblast', ['Mystical Fire', 'Earth Power']], + signatureMove: 'Grammar Hammer', + evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'ptoad': { + species: 'Politoed', ability: 'Fat Rain', item: 'Damp Rock', gender: 'M', + moves: ['Scald', 'Toxic', 'Ice Beam'], + signatureMove: 'Lilypad Shield', + evs: {hp: 252, def: 60, spd: 196}, ivs: {atk: 0}, nature: 'Calm', + }, + 'Psynergy': { + species: 'Blaziken', ability: 'Wrath', item: 'Blazikenite', gender: 'M', + moves: ['Flare Blitz', ['High Jump Kick', 'Superpower'], ['Wild Charge', 'Thunder Punch']], + signatureMove: 'Resolve', + evs: {atk: 252, spd: 4, spe: 252}, nature: 'Jolly', + }, + 'Quite Quiet': { + species: 'Misdreavus', ability: 'Levitate', item: 'Leftovers', gender: 'F', + moves: [['Moongeist Beam', 'Shadow Ball', 'Night Shade'], 'Recover', ['Flatter', 'Swagger']], + signatureMove: 'Literally Cheating', + evs: {hp: 252, def: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Rory Mercury': { + species: 'Charjabug', ability: 'Recharge', item: 'Eviolite', gender: 'M', + moves: ['Spikes', 'Leech Life', ['Poison Fang', 'Nuzzle']], + signatureMove: 'Switch Off', + evs: {hp: 252, atk: 252, def: 4}, ivs: {spe: 0}, nature: 'Brave', + }, + 'Saburo': { + species: 'Metagross', ability: 'Levitate', item: 'Metagrossite', gender: 'M', + moves: ['Psychic Fangs', 'Iron Head', ['Earthquake', 'Ice Punch']], + signatureMove: 'Soulbend', + evs: {hp: 184, atk: 148, spe: 176}, nature: 'Jolly', shiny: true, + }, + 'SamJo': { + species: 'Mamoswine', ability: 'Thiccer Fat', item: 'Thiccinium Z', gender: '', + moves: ['Icicle Crash', 'Precipice Blades', ['Ice Shard', 'Superpower', 'Stone Edge', 'Knock Off']], + signatureMove: 'Thicc', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', + }, + 'Scotteh': { + species: 'Suicune', ability: 'Fur Coat', item: 'Leftovers', gender: 'M', + moves: ['Nasty Plot', 'Ice Beam', 'Scald', 'Recover'], + signatureMove: 'Geomagnetic Storm', + evs: {def: 252, spa: 4, spe: 252}, nature: 'Bold', + }, + 'Shiba': { + species: 'Fletchinder', ability: 'Gale Wings v1', item: 'Eviolite', gender: 'F', + moves: ['Dragon Ascent', 'Sacred Fire', 'Roost'], + signatureMove: 'GO INDA', + evs: {hp: 248, atk: 252, spe: 8}, nature: 'Adamant', + }, + 'Slowbroth': { + species: 'Beheeyem', ability: 'Psychic Surge', item: 'Psychium Z', gender: 'M', + moves: ['Nasty Plot', 'Psystrike', ['Aura Sphere', 'Earth Power', 'Shadow Ball']], + signatureMove: 'Alien Wave', + evs: {hp: 252, spa: 252, spd: 4}, ivs: {atk: 0, spe: 0}, nature: 'Quiet', + }, + 'Snaquaza': { + species: 'Honchkrow', ability: 'Illusion', item: 'Fakeclaimium Z', gender: 'M', + moves: ['Superpower', 'Sucker Punch', ['Flamethrower', 'Ice Beam', 'Thunderbolt']], + signatureMove: 'Brave Bird', + nature: 'Serious', + }, + 'SpaceBass': { + species: 'Foongus', ability: 'Prankster', item: 'Eviolite', gender: 'M', + moves: ['Ingrain', 'Substitute', 'Baton Pass'], + signatureMove: 'Army of Mushrooms', + evs: {hp: 252, def: 128, spd: 128}, ivs: {atk: 0, spe: 0}, nature: 'Sassy', + }, + 'SunGodVolcarona': { + species: 'Volcarona', ability: 'Solar Flare', item: 'Volcaronium Z', gender: 'M', + moves: ['Quiver Dance', 'Giga Drain', ['Earth Power', 'Psychic']], + signatureMove: 'Fiery Dance', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Teclis': { + species: 'Gallade', ability: 'Intimidate', item: 'Galladite', gender: 'M', + moves: ['Sacred Sword', 'Psycho Cut', 'Knock Off'], + signatureMove: 'Zekken', + evs: {atk: 252, def: 4, spe: 252}, nature: 'Jolly', shiny: true, + }, + 'tennisace': { + species: 'Raikou', ability: 'Levitate', item: 'Life Orb', gender: 'M', + moves: ['Volt Switch', 'Shadow Ball', 'Aura Sphere'], + signatureMove: 'Ground Surge', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'Teremiare': { + species: 'Zorua', ability: 'Not Prankster', item: 'Eject Button', gender: 'N', + moves: ['Encore', 'Taunt', 'Lunar Dance'], + signatureMove: 'Rotate', + evs: {hp: 252, def: 136, spd: 120}, ivs: {atk: 0}, nature: 'Bold', shiny: true, + }, + 'The Immortal': { + species: 'Buzzwole', ability: 'Beast Boost 2', item: ['Buzznium Z', 'Choice Scarf'], gender: 'M', + moves: ['Leech Life', 'Plasma Fists', 'Ice Punch'], + signatureMove: 'Drain Punch', + evs: {hp: 4, atk: 252, spe: 252}, nature: 'Jolly', + }, + 'The Leprechaun': { + species: 'Bronzong', ability: 'Steelworker', item: 'Life Orb', gender: 'N', + moves: ['Photon Geyser', 'Precipice Blades', 'Diamond Storm'], + signatureMove: 'Gyro Ballin\'', + evs: {hp: 252, atk: 252, def: 4}, ivs: {spe: 0}, nature: 'Brave', shiny: true, + }, + 'Tiksi': { + species: 'Cradily', ability: 'Sand Stream', item: 'Tiksium Z', gender: 'M', + moves: ['Shore Up', 'Horn Leech', 'Curse'], + signatureMove: 'Rock Slide', // Base move for custom Z-move + evs: {hp: 252, atk: 252, spd: 4}, nature: 'Adamant', + }, + 'torkool': { + species: 'Torkoal', ability: 'Deflective Shell', item: 'Leftovers', gender: 'M', + moves: ['Morning Sun', ['Lava Plume', 'Magma Storm'], 'Toxic'], + signatureMove: 'Smoke Bomb', + evs: {hp: 248, spa: 8, spd: 252}, nature: 'Calm', + }, + 'Trickster': { + species: 'Hoopa', ability: 'Interdimensional', item: 'Life Orb', gender: 'M', + moves: ['Inferno', 'Zap Cannon', ['Roost', 'Grass Whistle']], + signatureMove: 'Mini Singularity', + evs: {hp: 4, spa: 252, spe: 252}, ivs: {atk: 0}, nature: 'Timid', + }, + 'UnleashOurPassion': { + species: 'Stunfisk', ability: 'Teravolt', item: 'Lum Berry', gender: 'M', + moves: ['Earth Power', 'Shore Up', ['Surf', 'Giga Drain', 'Stealth Rock']], + signatureMove: 'Continuous 1v1', + evs: {hp: 252, spa: 200, spd: 56}, ivs: {atk: 0}, nature: 'Modest', + }, + 'urkerab': { + species: 'Muk-Alola', ability: 'Focus Energy', item: 'Air Balloon', gender: 'M', + moves: ['Night Slash', 'Drill Run', 'Cross Poison'], + signatureMove: 'Holy Orders', + evs: {hp: 252, atk: 96, def: 136, spd: 24}, nature: 'Impish', + }, + 'Uselesscrab': { + species: 'Kyurem-Black', ability: 'Teravolt', item: 'Nichium Z', gender: 'M', + moves: ['Dragon Hammer', 'Plasma Fists', 'Taunt'], + signatureMove: 'Icicle Crash', + evs: {hp: 252, atk: 252, spe: 4}, nature: 'Adamant', shiny: true, + }, + 'Volco': { + species: 'Volcanion', ability: 'Unaware', item: 'Assault Vest', gender: 'M', + moves: ["Steam Eruption", "Giga Drain", ["Ice Beam", "Ice Beam", "Earth Power"]], + signatureMove: 'Explosive Drain', + evs: {hp: 248, spa: 252, spd: 8}, ivs: {atk: 0}, nature: 'Modest', + }, + 'Yuki': { + species: 'Ninetales-Alola', ability: 'Snow Storm', item: 'Focus Sash', gender: 'F', + moves: ['Blizzard', 'Moonblast', 'Aurora Veil'], + signatureMove: 'Cutie Escape', + evs: {hp: 4, spa: 252, spe: 252}, nature: 'Timid', + }, + 'Xayah': { + species: 'Noivern', ability: 'Dancer', item: 'Flyinium Z', gender: 'F', + moves: ['Clanging Scales', 'Roost', 'Fiery Dance'], + signatureMove: 'Stunning Dance', + evs: {spa: 252, spd: 4, spe: 252}, nature: 'Timid', + }, + 'XpRienzo ☑◡☑': { + species: 'Reshiram', ability: 'Turboblaze', item: 'Charcoal', gender: 'M', + moves: ['Core Enforcer', 'Volt Switch', 'Psystrike'], + signatureMove: 'Bleh Flame', + evs: {spa: 252, spd: 4, spe: 252}, ivs: {hp: 24, def: 25, spd: 20}, nature: 'Timid', + }, + 'Zarel': { + species: 'Meloetta', ability: 'Serene Grace', item: '', gender: 'M', + moves: ['Lunar Dance', 'Fiery Dance', 'Perish Song', 'Petal Dance', 'Quiver Dance'], + signatureMove: 'Relic Song Dance', + evs: {hp: 4, atk: 252, spa: 252}, nature: 'Quiet', + }, + 'Zyg': { + species: 'Zygarde', ability: 'Poison Heal', item: 'Leftovers', gender: 'N', + moves: ['Thousand Arrows', 'Stone Edge', 'Coil'], + signatureMove: 'My Life', + evs: {hp: 188, atk: 68, def: 252}, nature: 'Adamant', + }, + }; + let pool = Object.keys(sets); + /** @type {{[type: string]: number}} */ + let typePool = {}; + while (pool.length && team.length < 6) { + let name = this.sampleNoReplace(pool); + let ssbSet = sets[name]; + // Enforce typing limits + let types = this.getTemplate(ssbSet.species).types; + if (name === 'E4 Flint') types = ["Steel", "Ground", "Fire"]; + if (name === 'OM') types = ["Fire", "Fairy"]; + let rejected = false; + for (let type of types) { + if (typePool[type] === undefined) typePool[type] = 0; + if (typePool[type] >= 2) { + // Reject + rejected = true; + break; + } + } + if (rejected) continue; + // Update type counts + for (let type of types) { + typePool[type]++; + } + /** @type {PokemonSet} */ + let set = { + 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: Array.isArray(ssbSet.nature) ? this.sampleNoReplace(ssbSet.nature) : ssbSet.nature, + gender: ssbSet.gender, + evs: {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, + ivs: {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, + level: ssbSet.level || 100, + shiny: ssbSet.shiny, + }; + if (ssbSet.ivs) { + for (let iv in ssbSet.ivs) { + // IVs from the set override the default of 31, assume the hardcoded IVs are legal + // @ts-ignore StatsTable has no index signature + set.ivs[iv] = ssbSet.ivs[iv]; + } + } + if (ssbSet.evs) { + for (let ev in ssbSet.evs) { + // EVs from the set override the default of 0, assume the hardcoded EVs are legal + // @ts-ignore StatsTable has no index signature + set.evs[ev] = ssbSet.evs[ev]; + } + } else { + set.evs = {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}; + } + 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); + if (name === 'The Immortal' && set.item === 'Choice Scarf') set.moves[3] = 'Superpower'; + team.push(set); + } + return team; + } +} + +module.exports = RandomStaffBrosTeams; diff --git a/data/mods/ssb/scripts.js b/data/mods/ssb/scripts.js new file mode 100644 index 0000000000000..975092e50f363 --- /dev/null +++ b/data/mods/ssb/scripts.js @@ -0,0 +1,319 @@ +'use strict'; + +/** @type {ModdedBattleScriptsData} */ +let BattleScripts = { + runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect, zMove, externalMove) { + let target = this.getTarget(pokemon, zMove || moveOrMoveName, targetLoc); + let baseMove = this.getActiveMove(moveOrMoveName); + const pranksterBoosted = baseMove.pranksterBoosted; + if (!sourceEffect && baseMove.id !== 'struggle' && !zMove) { + let changedMove = this.runEvent('OverrideAction', pokemon, target, baseMove); + if (changedMove && changedMove !== true) { + baseMove = this.getActiveMove(changedMove); + if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted; + target = this.resolveTarget(pokemon, baseMove); + } + } + let move = zMove ? this.getActiveZMove(baseMove, pokemon) : baseMove; + + if (!target && target !== false) target = this.resolveTarget(pokemon, move); + + move.isExternal = externalMove; + + this.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.cancelMove INSTEAD + this.debug('' + pokemon.id + ' INCONSISTENT STATE, ALREADY MOVED: ' + pokemon.moveThisTurn); + this.clearActiveMove(true); + return; + } */ + let willTryMove = this.runEvent('BeforeMove', pokemon, target, move); + if (!willTryMove) { + this.runEvent('MoveAborted', pokemon, target, move); + this.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, pokemon, target, move)) { + this.clearActiveMove(true); + pokemon.moveThisTurnResult = false; + return; + } + } + pokemon.lastDamage = 0; + let lockedMove; + if (!externalMove) { + lockedMove = this.runEvent('LockMove', pokemon); + if (lockedMove === true) lockedMove = false; + if (!lockedMove) { + if (!pokemon.deductPP(baseMove, null, target) && (move.id !== 'struggle')) { + this.add('cant', pokemon, 'nopp', move); + let gameConsole = [null, 'Game Boy', 'Game Boy', 'Game Boy Advance', 'DS', 'DS'][this.gen] || '3DS'; + this.add('-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.clearActiveMove(true); + pokemon.moveThisTurnResult = false; + return; + } + } else { + sourceEffect = this.getEffect('lockedmove'); + } + pokemon.moveUsed(move, targetLoc); + } + + // Dancer Petal Dance hack + // TODO: implement properly + let noLock = externalMove && !pokemon.volatiles.lockedmove; + + if (zMove) { + if (pokemon.illusion) { + this.singleEvent('End', this.getAbility('Illusion'), pokemon.abilityData, pokemon); + } + this.add('-zpower', pokemon); + // @ts-ignore pokemon.zMoveUsed only exists in this mod + pokemon.zMoveUsed = true; + } + let moveDidSomething = this.useMove(baseMove, pokemon, target, sourceEffect, zMove); + if (this.activeMove) move = this.activeMove; + this.singleEvent('AfterMove', move, null, pokemon, target, move); + this.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) { + let dancers = []; + for (const side of this.sides) { + for (const currentPoke of side.active) { + if (!currentPoke || !currentPoke.hp || pokemon === currentPoke) continue; + if (currentPoke.hasAbility('dancer') && !currentPoke.isSemiInvulnerable()) { + dancers.push(currentPoke); + } + } + } + // Dancer activates in order of lowest speed stat to highest + // Ties go to whichever Pokemon has had the ability for the least amount of time + dancers.sort(function (a, b) { return -(b.stats['spe'] - a.stats['spe']) || b.abilityOrder - a.abilityOrder; }); + for (const dancer of dancers) { + if (this.faintMessages()) break; + this.add('-activate', dancer, 'ability: Dancer'); + this.runMove(move.id, dancer, 0, this.getAbility('dancer'), undefined, true); + } + } + if (noLock && pokemon.volatiles.lockedmove) delete pokemon.volatiles.lockedmove; + }, + // Modded to allow unlimited mega evos + runMegaEvo(pokemon) { + const templateid = pokemon.canMegaEvo || pokemon.canUltraBurst; + if (!templateid) return false; + const side = pokemon.side; + + // Pokémon affected by Sky Drop cannot mega evolve. Enforce it here for now. + for (const foeActive of side.foe.active) { + if (foeActive.volatiles['skydrop'] && foeActive.volatiles['skydrop'].source === pokemon) { + return false; + } + } + + pokemon.formeChange(templateid, pokemon.getItem(), true); + + // Limit mega evolution to once-per-Pokemon + pokemon.canMegaEvo = null; + + this.runEvent('AfterMega', pokemon); + + // E4 flint gains fire type when mega evolving + if (pokemon.name === 'E4 Flint' && !pokemon.illusion) this.add('-start', pokemon, 'typeadd', 'Fire'); + + return true; + }, + getZMove(move, pokemon, skipChecks) { + let item = pokemon.getItem(); + if (!skipChecks) { + if (!item.zMove) return; + if (item.zMoveUser && !item.zMoveUser.includes(pokemon.template.species)) return; + let moveData = pokemon.getMoveData(move); + if (!moveData || !moveData.pp) return; // Draining the PP of the base move prevents the corresponding Z-move from being used. + } + + if (item.zMoveFrom) { + if (Array.isArray(item.zMoveFrom)) { + if (item.zMoveFrom.includes(move.name)) return /** @type {string} */ (item.zMove); + } else { + if (move.name === item.zMoveFrom) return /** @type {string} */ (item.zMove); + } + } else if (item.zMove === true) { + if (move.type === item.zMoveType) { + if (move.category === "Status") { + return move.name; + } else if (move.zMovePower) { + return this.zMoveTable[move.type]; + } + } + } + }, + getActiveZMove(move, pokemon) { + let zMove; + if (pokemon) { + let item = pokemon.getItem(); + if (item.zMoveFrom && Array.isArray(item.zMoveFrom) ? item.zMoveFrom.includes(move.name) : item.zMoveFrom === move.name) { + // @ts-ignore + zMove = this.getActiveMove(item.zMove); + // @ts-ignore Hack for Snaquaza's Z move + zMove.baseMove = move; + zMove.isZPowered = true; + return zMove; + } + } + + if (move.category === 'Status') { + zMove = this.getActiveMove(move); + zMove.isZ = true; + zMove.isZPowered = true; + return zMove; + } + zMove = this.getActiveMove(this.zMoveTable[move.type]); + // @ts-ignore + zMove.basePower = move.zMovePower; + zMove.category = move.category; + zMove.isZPowered = true; + return zMove; + }, + // Modded to allow each Pokemon on a team to use a Z move once per battle + canZMove(pokemon) { + // @ts-ignore pokemon.zMoveUsed only exists in this mod + if (pokemon.zMoveUsed || (pokemon.transformed && (pokemon.template.isMega || pokemon.template.isPrimal || pokemon.template.forme === "Ultra"))) return; + let item = pokemon.getItem(); + if (!item.zMove) return; + if (item.zMoveUser && !item.zMoveUser.includes(pokemon.template.species)) return; + let atLeastOne = false; + /**@type {AnyObject?[]} */ + let zMoves = []; + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.pp <= 0) { + zMoves.push(null); + continue; + } + let move = this.getMove(moveSlot.move); + let zMoveName = this.getZMove(move, pokemon, true) || ''; + if (zMoveName) { + let zMove = this.getMove(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) return zMoves; + }, + runZPower(move, pokemon) { + const zPower = this.getEffect('zpower'); + if (move.category !== 'Status') { + this.attrLastMove('[zeffect]'); + } else if (move.zMoveBoost) { + this.boost(move.zMoveBoost, pokemon, pokemon, zPower); + } else { + switch (move.zMoveEffect) { + case 'heal': + this.heal(pokemon.maxhp, pokemon, pokemon, zPower); + break; + case 'healhalf': + // For DragonWhale + this.heal(pokemon.maxhp / 2, pokemon, pokemon, zPower); + break; + case 'healreplacement': + move.self = {sideCondition: 'healreplacement'}; + break; + case 'boostreplacement': + // For nui + move.self = {sideCondition: 'boostreplacement'}; + break; + case 'clearnegativeboost': + /** @type {{[k: string]: number}} */ + let boosts = {}; + for (let i in pokemon.boosts) { + // @ts-ignore + if (pokemon.boosts[i] < 0) { + boosts[i] = 0; + } + } + pokemon.setBoost(boosts); + this.add('-clearnegativeboost', pokemon, '[zeffect]'); + break; + case 'redirect': + pokemon.addVolatile('followme', pokemon, zPower); + break; + case 'crit2': + pokemon.addVolatile('focusenergy', pokemon, zPower); + break; + case 'curse': + if (pokemon.hasType('Ghost')) { + this.heal(pokemon.maxhp, pokemon, pokemon, zPower); + } else { + this.boost({atk: 1}, pokemon, pokemon, zPower); + } + } + } + }, + setTerrain(status, source = null, sourceEffect = null) { + status = this.getEffect(status); + if (!sourceEffect && this.effect) sourceEffect = this.effect; + if (!source && this.event && this.event.target) source = this.event.target; + if (source === 'debug') source = this.p1.active[0]; + if (!source) throw new Error(`setting terrain without a source`); + + if (this.terrain === status.id) return false; + let prevTerrain = this.terrain; + let prevTerrainData = this.terrainData; + this.terrain = status.id; + this.terrainData = { + id: status.id, + source, + sourcePosition: source.position, + duration: status.duration, + }; + if (status.durationCallback) { + this.terrainData.duration = status.durationCallback.call(this, source, source, sourceEffect); + } + if (!this.singleEvent('Start', status, this.terrainData, this, source, sourceEffect)) { + this.terrain = prevTerrain; + this.terrainData = prevTerrainData; + return false; + } + // Always run a terrain end event to prevent a visual glitch with custom terrains + if (prevTerrain) this.singleEvent('End', this.getEffect(prevTerrain), prevTerrainData, this); + this.runEvent('TerrainStart', source, source, status); + return true; + }, + pokemon: { + getActionSpeed() { + let speed = this.getStat('spe', false, false); + if (speed > 10000) speed = 10000; + if (this.battle.getPseudoWeather('trickroom') || this.battle.getPseudoWeather('triviaroom') || this.battle.getPseudoWeather('alienwave')) { + speed = 0x2710 - speed; + } + return speed & 0x1FFF; + }, + isGrounded(negateImmunity = false) { + if ('gravity' in this.battle.pseudoWeather) return true; + if ('ingrain' in this.volatiles && this.battle.gen >= 4) return true; + if ('smackdown' in this.volatiles) return true; + let 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.suppressingAttackEvents()) return null; + if ('magnetrise' in this.volatiles) return false; + if ('telekinesis' in this.volatiles) return false; + if ('triviaroom' in this.battle.pseudoWeather && this.name === 'Bimp' && !this.illusion) return false; + return item !== 'airballoon'; + }, + }, +}; + +exports.BattleScripts = BattleScripts; diff --git a/data/mods/ssb/statuses.js b/data/mods/ssb/statuses.js new file mode 100644 index 0000000000000..b3ec22d942e71 --- /dev/null +++ b/data/mods/ssb/statuses.js @@ -0,0 +1,1501 @@ +'use strict'; + +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { + /* + // Example: + userid: { + noCopy: true, + onStart() { + this.add(`c|+Username|Switch In Message`); + }, + onSwitchOut() { + this.add(`c|+Username|Switch Out Message`); + }, + onFaint() { + this.add(`c|+Username|Faint Message`); + }, + // Innate effects go here + }, + */ + // Please keep statuses organized alphabetically based on staff member name! + '2xthetap': { // No single quotes causes issues + noCopy: true, + onStart() { + this.add(`c|%2xTheTap|Time for a heckin' battle.`); + }, + onSwitchOut() { + this.add(`c|%2xTheTap|Doin' me a heckin' concern.`); + }, + onFaint() { + this.add(`c|%2xTheTap|Doin' me the final bamboozle.`); + }, + }, + '5gen': { + noCopy: true, + onStart() { + this.add(`c|+5gen|Someone asked for extra sauce?`); + }, + onSwitchOut() { + this.add(`c|+5gen|Need to get some from the back.`); + }, + onFaint() { + this.add(`c|+5gen|I'm not dead yet, just changing formes.`); + }, + }, + acakewearingahat: { + noCopy: true, + onStart() { + this.add(`c|+ACakeWearingAHat|h`); + }, + onSwitchOut(source) { + this.add(`c|+ACakeWearingAHat|${source.side.name} is a nerd`); + }, + onFaint() { + this.add(`c|+ACakeWearingAHat|According to all known laws of aviation, there is no way that Dunsparce should be able to fly. Its wings are too small to get its fat little body off the ground. Dunsparce, of course, does not learn Fly for this reason. It does learn Roost, though. Cute li'l winged snake thing.`); + }, + // Fat Snake Innate + onModifyDefPriority: 6, + onModifyDef(def, pokemon) { + if (!pokemon.transformed && !pokemon.illusion) { + return this.chainModify(1.5); + } + }, + onModifySpDPriority: 6, + onModifySpD(spd, pokemon) { + if (!pokemon.transformed && !pokemon.illusion) { + return this.chainModify(1.5); + } + }, + }, + aelita: { + noCopy: true, + onStart() { + this.add(`c|@Aelita|Transfer, Aelita! Scanner, Aelita! Virtualization!`); + }, + onSwitchOut() { + this.add(`c|@Aelita|I have a tower to deactivate. See ya!`); + }, + onFaint() { + this.add(`c|@Aelita|CODE: LYOKO . Tower deactivated... Return to the past, now!`); + }, + }, + akir: { + noCopy: true, + onStart() { + this.add(`c|%Akir|hey whats up`); + }, + onSwitchOut() { + this.add(`c|%Akir|sorry need to build more`); + }, + onFaint() { + this.add(`c|%Akir|too sleepy, c ya`); + }, + onSourceModifyDamage(damage, source, target, move) { + if (move.typeMod > 0 && !target.illusion) { + this.debug('Solid Rock neutralize'); + return this.chainModify(0.75); + } + }, + }, + amaluna: { + noCopy: true, + onStart() { + this.add(`c|+Amaluna|Please no casual chatting here`); + }, + onSwitchOut() { + this.add(`c|+Amaluna|It's not too late, it's never too late`); + }, + onFaint() { + this.add(`c|+Amaluna|Don't talk to me unless you're famous`); + }, + }, + andy: { + noCopy: true, + onStart() { + this.add(`c|+Andy >_>|**>_>**`); + }, + onSwitchOut() { + this.add(`c|+Andy >_>|**<_<**`); + }, + onFaint() { + this.add(`c|+Andy >_>|u sux >_>`); + }, + }, + ant: { + noCopy: true, + onStart() { + this.add(`c|@ant|the superior ant is here`); + }, + onSwitchOut() { + this.add(`c|@ant|hasta la vista baby`); + }, + onFaint() { + this.add(`c|@ant|I'M NOT ANTEMORTEM`); + }, + }, + aquagtothepast: { + noCopy: true, + onStart() { + this.add(`c|+A Quag to The Past|You mess with one Goon, you mess with them all... And they're all here!`); + }, + onSwitchOut() { + this.add(`c|+A Quag to The Past|Um, no.`); + }, + onFaint() { + this.add(`c|+A Quag to The Past|...Wait, this isn't the groupchat, is it...`); + }, + }, + arcticblast: { + noCopy: true, + onStart() { + this.add(`c|%Arcticblast|My trash friend can do no wrong`); + }, + onModifyMove(move) { + if (move.id === 'knockoff') { + move.onAfterHit = function (target, source) { + if (source.hp) { + let item = target.takeItem(); + if (item) { + this.add('-enditem', target, item.name, '[from] move: Knock Off', '[of] ' + source); + this.add(`c|%Arcticblast|+20 ;)`); + } + } + }; + } + }, + onFaint(pokemon) { + let activeMon = pokemon.side.foe.active[0].template.speciesid; + if (activeMon === 'greninja') { + this.add(`c|%Arcticblast|FRIENDS DON’T LET FRIENDS PLAY FROGS`); + } else if (activeMon === 'pumpkaboosuper') { + this.add(`c|%Arcticblast|WHY IS MY KAREN PRIZED`); + } else { + this.add(`c|%Arcticblast|FREE SKYMIN`); + } + }, + onSourceFaint(target) { + if (target.template.speciesid === 'greninja') { + this.add(`c|%Arcticblast|FRIENDS DON’T LET FRIENDS PLAY FROGS`); + } + }, + }, + arsenal: { + noCopy: true, + onStart() { + this.add(`c|+Arsenal|Wenger In`); + }, + onSwitchOut() { + this.add(`c|+Arsenal|Time to watch anime`); + }, + onFaint() { + this.add(`c|+Arsenal|Wenger Out`); + }, + }, + beowulf: { + noCopy: true, + onStart() { + this.add(`c|@Beowulf|/me BUZZES LOUDLY`); + }, + onSwitchOut() { + this.add(`c|@Beowulf|/me BUZZES LOUDLY`); + }, + onFaint() { + this.add(`c|@Beowulf|BUZZ BUZZ BUZZ BUZZ`); + }, + }, + bhrisbrown: { + noCopy: true, + onStart() { + this.add(`c|+Bhris Brown|Never send a boy to do a mans job`); + }, + onSwitchOut() { + this.add(`c|+Bhris Brown|Goddamit Nappa...`); + }, + onFaint() { + this.add(`c|+Bhris Brown|There is one thing I'd like to know...tell me. Will I meet that clown Kakarot in the other world?`); + }, + }, + biggie: { + noCopy: true, + onStart() { + this.add(`c|@biggie|Gamin' on ya`); + }, + onSwitchOut() { + this.add(`c|@biggie|Mission complete!`); + }, + onFaint() { + this.add(`c|@biggie|It was all a dream`); + }, + }, + bimp: { + noCopy: true, + onStart() { + this.add(`c|+Bimp|Ew it's Bimp -_-`); + }, + onSwitchOut() { + this.add(`c|+Bimp|Brb getting Chick-Fil-A.`); + }, + onFaint() { + this.add(`c|+Bimp|Well that was uneventful -_-`); + }, + }, + bobochan: { + noCopy: true, + onStart() { + this.add(`c|@bobochan|Pika Pika! Just kidding, it's just a knock off clone.`); + }, + onSwitchOut() { + this.add(`c|@bobochan|Time to skedaddle!`); + }, + onFaint() { + this.add(`c|@bobochan|You cruel trainer for killing an innocent pokemon!`); + }, + }, + brandon: { + noCopy: true, + onStart() { + this.add(`c|%Brandon|Let's set some mood music: ${['https://www.youtube.com/watch?time_continue=2&v=xFrGuyw1V8s', 'https://www.youtube.com/watch?v=m3-hY-hlhBg', 'https://www.youtube.com/watch?v=IyYnnUcgeMc', 'https://www.youtube.com/watch?v=na7lIb09898', 'https://www.youtube.com/watch?v=FrLequ6dUdM'][this.random(5)]}`); + }, + onSwitchOut() { + this.add(`c|%Brandon|I gotta charge my phone brb`); + }, + onFaint() { + this.add(`c|%Brandon|I need a nap`); + }, + }, + bumbadadabum: { + noCopy: true, + onStart() { + this.add(`c|~bumbadadabum|The Light shall bring victory!`); + }, + onSwitchOut() { + this.add(`c|~bumbadadabum|Regenerator is very fair and balanced`); + }, + onFaint() { + this.add(`c|~bumbadadabum|Who will lead my kingdom now?`); + }, + }, + cantsay: { + noCopy: true, + onStart() { + this.add(`c|@cant say|(´・ω・\`)`); + }, + onSwitchOut() { + this.add(`c|@cant say|wow CTed lol`); + }, + onFaint() { + this.add(`c|@cant say|bg haxor :(`); + }, + }, + cc: { + noCopy: true, + onStart() { + this.add(`c|%cc|Yo guys! :]`); + }, + onSwitchOut() { + this.add(`c|%cc|Gotta go brb`); + }, + onFaint() { + this.add(`c|%cc|Unfort`); + }, + }, + cerberax: { + noCopy: true, + onStart() { + this.add(`c|+Cerberax|(╯°□°)╯︵ ┻━┻`); + }, + onSwitchOut() { + this.add(`c|+Cerberax|┬─┬ ノ( ゜-゜ノ)`); + }, + onFaint() { + this.add(`c|+Cerberax|┬─┬ ︵ /(.□. \\)`); + }, + }, + ceteris: { + noCopy: true, + onStart() { + this.add(`c|@Ceteris|Your loss is inevitable, you best forfeit the battle if you know what's good for you. ╰(⇀︿⇀)つ-]═───`); + }, + onSwitchOut(source) { + this.add(`c|@Ceteris|Saving the best for last, ${source.side.name}, a wise choice my friend.`); + }, + onFaint() { + this.add(`c|@Ceteris|IMPOSSIBLE!! THIS IS AN OUTRAGE!! I WILL EXACT MY REVENGE ON YOU ONE DAY (◣_◢)`); + }, + }, + chaos: { + noCopy: true, + // No phrases provided + }, + chloe: { + noCopy: true, + onStart() { + this.add(`c|@Chloe|hlelo`); + }, + onSwitchOut() { + this.add(`c|@Chloe|bubye`); + }, + onFaint() { + this.add(`c|@Chloe|aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`); + }, + }, + cleo: { + noCopy: true, + onStart() { + this.add(`c|%Cleo|Cleo! Cleo! Your friendly neighborhood Sea Leo!`); + }, + onSwitchOut() { + this.add(`c|%Cleo|bbl~`); + }, + onFaint() { + this.add(`c|%Cleo|n.n`); + }, + }, + deg: { + noCopy: true, + onStart() { + this.add(`c|+deg|rof`); + }, + onSwitchOut() { + this.add(`c|+deg|rof`); + }, + onFaint() { + this.add(`c|+deg|Dream Eater Gengar is an unset.`); + }, + }, + dragonwhale: { + noCopy: true, + onStart() { + this.add(`c|@DragonWhale|i would switch to chomper here`); + }, + }, + duck: { + noCopy: true, + onStart() { + this.add(`c|+duck|Yes, I'm actually a duck. I know.`); + }, + onSwitchOut() { + this.add(`c|+duck|/me waddles away`); + }, + onFaint() { + this.add(`c|+duck|Duck you! That move was too op anyway.`); + }, + }, + e4flint: { + // Fire type when mega evolving implemented in scripts.js + noCopy: true, + onStart(target, source) { + this.add(`c|@E4 Flint|How many Fire-Types do I have now`); + if (source.template.speciesid !== 'steelixmega' || source.illusion) return; + this.add('-start', source, 'typeadd', 'Fire'); + }, + onFaint() { + this.add(`c|@E4 Flint|lul ok`); + }, + }, + explodingdaisies: { + noCopy: true, + onStart() { + this.add(`c|%explodingdaisies|For today's weather: DOOOOOM!`); + }, + onSwitchOut() { + this.add(`c|%explodingdaisies|I WILL DESTROY YOU.......BUT LATER!`); + }, + onFaint() { + this.add(`c|%explodingdaisies|MY PEOPLE NEED ME!`); + }, + }, + eien: { + noCopy: true, + onStart() { + this.add(`c|@Eien|umu!`); + }, + onFaint() { + this.add(`c|@Eien|This game is Bad Civilization...`); + }, + }, + eternally: { + noCopy: true, + onStart() { + this.add(`c|@eternally|quack`); + }, + onFaint() { + this.add(`c|@eternally|quack`); + }, + }, + ev: { + noCopy: true, + onStart(target) { + this.add(`c|~EV|Behold! The power of EVOLUTION!`); + if (target.illusion) return; + + /** @type {{[forme: string]: string[]}} */ + let formes = { + 'flareon': ['Icicle Crash', 'Earthquake', 'Baton Pass', 'Evoblast'], + 'jolteon': ['Ice Beam', 'Flamethrower', 'Baton Pass', 'Evoblast'], + 'vaporeon': ['Recover', 'Heal Bell', 'Baton Pass', 'Evoblast'], + 'espeon': ['Aura Sphere', 'Lovely Kiss', 'Baton Pass', 'Evoblast'], + 'umbreon': ['Knock Off', 'Toxic', 'Baton Pass', 'Evoblast'], + 'leafeon': ['Synthesis', 'High Jump Kick', 'Baton Pass', 'Evoblast'], + 'glaceon': ['Blue Flare', 'Agility', 'Baton Pass', 'Evoblast'], + 'sylveon': ['Earth Power', 'Calm Mind', 'Baton Pass', 'Evoblast'], + }; + let forme = Object.keys(formes)[this.random(8)]; + this.add(`-anim`, target, 'Geomancy', target); + target.formeChange(forme); + target.setAbility('Adaptability'); + // Update movepool + target.moveSlots = []; + if (!formes[forme]) throw new Error(`SSB: Can't find moveset for EV's forme: "${forme}".`); // should never happen + for (const [i, moveid] of formes[forme].entries()) { + let move = this.getMove(moveid); + if (!move.id) continue; + target.moveSlots.push({ + move: move.name, + id: move.id, + // @ts-ignore hacky change for EV's set + pp: Math.floor(((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5) * (target.ppPercentages ? target.ppPercentages[i] : 1)), + maxpp: ((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5), + target: move.target, + disabled: false, + used: false, + virtual: true, + }); + target.moves.push(move.id); + } + }, + onBeforeSwitchOut(pokemon) { + if (pokemon.illusion) return; + // @ts-ignore hacky change for EV's set + pokemon.ppPercentages = pokemon.moveSlots.slice().map(m => { + return m.pp / m.maxpp; + }); + }, + onSwitchOut() { + this.add(`c|~EV|We'll be back.`); + }, + onFaint() { + this.add(`c|~EV|If you __say__ EV it sounds like Eevee. It's actually quite simple.`); + }, + }, + 'false': { + noCopy: true, + onStart() { + this.add(`c|&false|٩(•̤̀ᵕ•̤́๑)ᵒᵏᵎᵎᵎᵎ`); + }, + onSwitchOut() { + this.add(`c|&false|٩(๑•◡-๑)۶ⒽⓤⒼ❤`); + }, + onFaint() { + this.add(`c|&false|ɢ∞פ⋆ᖙᵒᵝ ٩꒰”̮*ू꒱`); + }, + }, + fomg: { + noCopy: true, + onStart() { + this.add(`c|%FOMG|You got this, my friend!`); + }, + onSwitchOut() { + this.add(`c|%FOMG|/me rolls out`); + }, + onFaint() { + this.add(`c|%FOMG|Rock in peace...`); + }, + }, + kalalokki: { + noCopy: true, + onStart(target) { + this.add(`c|@Kalalokki|(•_•)`); + this.add(`c|@Kalalokki|( •_•)>⌐■-■`); + this.add(`c|@Kalalokki|(⌐■_■)`); + if (target.illusion) return; + this.setWeather('raindance'); + }, + onFaint() { + this.add(`c|@Kalalokki|(⌐■_■)`); + this.add(`c|@Kalalokki|( •_•)>⌐■-■`); + this.add(`c|@Kalalokki|(x_x)`); + }, + }, + grimauxiliatrix: { + noCopy: true, + onStart() { + this.add(`c|@grimAuxiliatrix|${['A BRAWL IS SURELY BREWING!', 'GOOD DAY FOR A SWELL BATTLE!', 'THIS MATCH WILL GET RED HOT!'][this.random(3)]}`); + }, + onFaint() { + this.add(`c|@grimAuxiliatrix|**KNOCKOUT!**`); + }, + }, + // Cant use the exact name because its a pokemon's name + hippopotasuser: { + noCopy: true, + onStart() { + this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`); + this.add(`c|&HoeenHero|No, its not a bug Hippopotas, stop telling people to PM staff, its annoying.`); + }, + onSwitchOut() { + this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`); + this.add(`c|&HoeenHero|There's still no bug!`); + }, + onFaint() { + this.add(`c|@Hippopotas|Something broke. If you're seeing this message, please PM a staff member about it.`); + this.add(`c|&HoeenHero|My PMs are flooded with bug reports :(`); + }, + }, + hipstersigilyph: { + noCopy: true, + onStart() { + this.add(`c|+Hipster Sigilyph|You got some issues.`); + }, + onSwitchOut() { + this.add(`c|+Hipster Sigilyph|Gurl, bye.`); + }, + onFaint() { + this.add(`c|+Hipster Sigilyph|Back to my cave.`); + }, + }, + hoeenhero: { + noCopy: true, + onStart() { + this.add(`c|&HoeenHero|My scripts will lead me to victory!`); + }, + onSwitchOut() { + this.add(`c|&HoeenHero|I need to look something up, hold on...`); + }, + onFaint() { + this.add(`c|&HoeenHero|There must have been a bug in my script ;-;`); + }, + }, + hubriz: { + noCopy: true, + onStart() { + this.add(`c|+Hubriz|Just a harmless flower...`); + }, + onSwitchOut() { + this.add(`c|+Hubriz|I'll bloom once more soon enough!`); + }, + onFaint() { + this.add(`c|+Hubriz|I burn, I pine, I perish.`); + }, + }, + hurl: { + noCopy: true, + onStart() { + this.add(`c|%Hurl|underoos`); + }, + onSwitchOut() { + this.add(`c|%Hurl|/me hurls out`); + }, + onFaint() { + this.add(`c|%Hurl|i disappoint people a lot`); + }, + }, + imagi: { + noCopy: true, + onStart() { + this.add(`c|+imagi|/me is eating tiramisu!`); + }, + onSwitchOut() { + this.add(`c|+imagi|/me is eating more tiramisu!`); + }, + onFaint() { + this.add(`c|+imagi|/me descends into food coma. x_x`); + }, + }, + imas: { + noCopy: true, + onStart(pokemon) { + let foe = pokemon.side.foe.active[0]; + this.add(`c|%imas|${foe.name} more like suck`); + }, + onSwitchOut() { + this.add(`c|%imas|oops`); + }, + onFaint() { + this.add(`c|%imas|oh no`); + }, + }, + iyarito: { + noCopy: true, + onStart() { + this.add(`c|&Iyarito|Iyarito is always right`); + }, + onSwitchOut() { + this.add(`c|&Iyarito|It's all Iyarito's fault`); + }, + onFaint() { + this.add(`c|&Iyarito|RIP Patrona`); + }, + }, + jdarden: { + noCopy: true, + onStart() { + this.add(`c|%jdarden|I've cultivated some mass during my hibernation`); + }, + onFaint() { + this.add(`c|%jdarden|Back to my natural state`); + }, + }, + kaijubunny: { + noCopy: true, + onStart() { + this.add(`c|%Kaiju Bunny|Hey there! Good luck!`); + }, + onSwitchOut() { + this.add(`c|%Kaiju Bunny|Don't keep her from battling for too long!`); + }, + onFaint() { + this.add(`c|%Kaiju Bunny|She tried her best... ;;`); + }, + // Kaiju Rage Innate + // onUpdate so toxic orb can activate after. Code mainly copied from Power Construct. + onUpdate(pokemon) { + if (pokemon.template.speciesid !== 'gligar' || pokemon.transformed || pokemon.illusion || !pokemon.hp) return; + if (pokemon.hp > pokemon.maxhp / 2) return; + this.add('-activate', pokemon, 'ability: Kaiju Rage'); + pokemon.formeChange('Gliscor', this.effect, true); + let newHP = Math.floor(Math.floor(2 * pokemon.template.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100) * pokemon.level / 100 + 10); + pokemon.hp = newHP - (pokemon.maxhp - pokemon.hp); + pokemon.maxhp = newHP; + pokemon.heal(pokemon.maxhp / 4); + this.add('-heal', pokemon, pokemon.getHealth); + pokemon.takeItem(); + pokemon.setItem('toxicorb'); + this.add('-message', pokemon.name + '\'s item is now a Toxic Orb!'); + this.add('-message', pokemon.name + '\'s ability is now Poison Heal!'); + this.boost({atk: 2, spe: 1}, pokemon); + }, + }, + kay: { + noCopy: true, + onStart() { + this.add(`c|@kay|Every kiss begins with Kay`); + }, + onSwitchOut() { + this.add(`c|@kay|くコ:彡`); + }, + onFaint() { + this.add(`c|@kay|'kay bye!くコ:彡`); + }, + // Simple Innate + onBoost(boost, target, source, effect) { + if (source.illusion) return; + if (effect && effect.id === 'zpower') return; + for (let i in boost) { + // @ts-ignore + boost[i] *= 2; + } + }, + }, + kingswordyt: { + noCopy: true, + onStart() { + this.add(`c|@KingSwordYT|You're the master of your destiny, take destiny by the horns and have fun!`); + }, + onSwitchOut() { + this.add(`c|@KingSwordYT|I eat when im upset, and i gotta eat`); + }, + onFaint() { + this.add(`c|@KingSwordYT|BUAAAAAA IYA AYÚDAME :(`); + }, + }, + level51: { + noCopy: true, + onStart() { + this.add(`c|@Level 51|Calculating chance of victory!`); + }, + onSwitchOut() { + this.add(`c|@Level 51|chance_victory < 1. Recalibrating...`); + }, + onFaint() { + this.add(`c|@Level 51|**IndexError**: list index out of range`); + }, + }, + lifeisdank: { + noCopy: true, + onStart(target) { + this.add(`c|~LifeisDANK|!!!ლ(⁰⊖⁰ლ) Peent Peent.`); + if (target.illusion) return; + this.boost({spe: 2}, target); + }, + onSwitchOut() { + this.add(`c|~LifeisDANK|!(•⌔• ) Peent Peent.`); + }, + onFaint() { + this.add(`c|~LifeisDANK|(•⌔•. ) Peent.`); + }, + // Aerilate innate + onModifyMovePriority: -1, + onModifyMove(move, pokemon) { + if (pokemon.illusion) return; + if (move.type === 'Normal' && !['judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'weatherball'].includes(move.id) && !(move.isZ && move.category !== 'Status')) { + move.type = 'Flying'; + move.aerilateBoosted = true; + } + }, + onBasePowerPriority: 8, + onBasePower(basePower, pokemon, target, move) { + if (move.aerilateBoosted) return this.chainModify([0x1333, 0x1000]); + }, + }, + lionyx: { + noCopy: true, + onStart() { + this.add(`c|+Lionyx|Let the storm rage on... for Arendelle!`); + }, + onSwitchOut() { + this.add(`c|+Lionyx|/me turns away and slams the door`); + }, + onFaint() { + this.add(`c|+Lionyx|Can't hold it back anymore...`); + }, + }, + lostseso: { + noCopy: true, + onStart() { + this.add(`c|+Lost Seso|<3 ( ͡° ͜ʖ ͡°) DANCE WITH ME ( ͡° ͜ʖ ͡°) <3`); + this.effectData.danceMultiplier = 0; + }, + onAfterMove(pokemon, target, move) { + if (move.flags.dance) this.effectData.danceMultiplier++; + }, + onSwitchOut() { + this.add(`c|+Lost Seso|Ran out of ramen, brb`); + }, + onFaint() { + this.add(`c|+Lost Seso|└[ ─ ಎ ─ ]┘ 0% Battery, feed me ramen please`); + }, + }, + lycaniumz: { + noCopy: true, + onStart(pokemon) { + this.add(`c|+Lycanium Z|It's either I win or you lose, 'cause I won't accept defeat.`); + if (pokemon.illusion) return; + let i = 0; + for (const moveSlot of pokemon.moveSlots) { + let move = this.getMove(moveSlot.id); + // @ts-ignore hacky way to reduce purple pill's PP + moveSlot.pp = Math.floor(((move.noPPBoosts || move.isZ) ? move.pp : move.pp * 8 / 5) * (pokemon.ppPercentages ? pokemon.ppPercentages[i] : 1)); + i++; + } + }, + onBeforeSwitchOut(pokemon) { + if (pokemon.illusion) return; + // @ts-ignore track percentages to keep purple pills from resetting pp + pokemon.ppPercentages = pokemon.moveSlots.slice().map(m => { + return m.pp / m.maxpp; + }); + }, + onSwitchOut() { + this.add(`c|+Lycanium Z|What I gotta do to get it through to you? I'm superhuman.`); + }, + onFaint() { + this.add(`c|+Lycanium Z|How can I find you?`); + this.add(`c|+Lycanium Z|Who do you turn to?`); + this.add(`c|+Lycanium Z|How do I bind you?`); + }, + }, + macchaeger: { + noCopy: true, + onStart() { + this.add(`c|@MacChaeger|What are you gonna do with that big bat? Gonna hit me? Better make it count. Better make it hurt. Better kill me in one shot.`); + }, + onFaint() { + this.add(`c|@MacChaeger|im gonna pyuk`); + }, + }, + majorbowman: { + noCopy: true, + onStart() { + this.add(`c|@MajorBowman|I'm MajorBowman and I'm here to make it clear.`); + }, + onSwitchOut() { + this.add(`c|@MajorBowman|Witty catch phrase, you know what I mean?`); + }, + onFaint() { + this.add(`c|@MajorBowman|THEY GOT ME, GAL`); + }, + }, + martha: { + noCopy: true, + onStart() { + this.add(`c|%martha|in to lose r1`); + }, + onSwitchOut() { + this.add(`c|%martha|bad`); + }, + }, + marty: { + noCopy: true, + // No phrases provided + }, + meicoo: { + noCopy: true, + onStart() { + this.add(`c|%Meicoo|/joinhunt`); + }, + onSwitchOut() { + this.add(`c|%Meicoo|/leavehunt`); + }, + onFaint() { + this.add(`c|%Meicoo|"That is not the answer - try again!"`); + }, + }, + megazard: { + noCopy: true, + onStart() { + this.add(`c|@Megazard|Almond top of the world!`); + }, + onSwitchOut() { + this.add(`c|@Megazard|Change of plants`); + }, + onFaint() { + this.add(`c|@Megazard|Better luck next thyme`); + }, + }, + mickthespud: { + noCopy: true, + onStart() { + this.add(`c|%MicktheSpud|Woah!`); + }, + onSwitchOut() { + this.add(`c|%MicktheSpud|Woah!`); + }, + onFaint() { + this.add(`c|%MicktheSpud|Woah!`); + }, + }, + mitsuki: { + noCopy: true, + onStart() { + this.add(`c|%Mitsuki|SSSSSSSSSSSSS`); + }, + onSwitchOut() { + this.add(`c|%Mitsuki|sssssssssssss`); + }, + onFaint() { + this.add(`c|%Mitsuki|sss`); + }, + }, + moo: { + noCopy: true, + onStart() { + this.add(`c|+moo|/me moo`); + }, + onSwitchOut() { + this.add(`c|+moo|/me moo`); + }, + onFaint() { + this.add(`c|+moo|/me moo`); + }, + }, + morfent: { + noCopy: true, + onStart() { + this.add(`c|@Morfent ( _̀> ̀)|──────▀█████▄──────▲`); + this.add(`c|@Morfent ( _̀> ̀)|───▄███████████▄──◀█▶`); + this.add(`c|@Morfent ( _̀> ̀)|─────▄████▀█▄──────█`); + this.add(`c|@Morfent ( _̀> ̀)|───▄█████████████████▄ -I`); + this.add(`c|@Morfent ( _̀> ̀)|─▄█████.▼.▼.▼.▼.▼.▼.▼ -cast`); + this.add(`c|@Morfent ( _̀> ̀)|▄███████▄.▲.▲.▲.▲.▲.▲ -magic`); + this.add(`c|@Morfent ( _̀> ̀)|█████████████████████▀▀-shitpost`); + }, + onFaint() { + // Morfent returns something so im doing it this way + let endquote = this.random(3); + if (endquote === 1) { + this.add(`c|@Morfent ( _̀> ̀)|Hacking claims the lives of over 2,000 registered laddering alts every day.`); + } else if (endquote === 2) { + this.add(`c|@Morfent ( _̀> ̀)|Every 60 seconds in Africa, a minute passes. Together we can stop this. Please spread the word.`); + } else { + this.add(`c|@Morfent ( _̀> ̀)|!dt morfent's husbando`); + this.add(`raw|
    • UU Gengar GhostPoison Cursed BodyHP
      60
      Atk
      65
      Def
      60
      SpA
      130
      SpD
      75
      Spe
      110
      BST
      500
    `); + this.add(`raw|Dex#: 94 | Gen: 1 | Height: 1.5 m | Weight: 40.5 kg (60 BP) | Dex Colour: Purple | Egg Group(s): Amorphous | Does Not Evolve`); + } + }, + }, + nui: { + noCopy: true, + onStart() { + this.add(`c|&nui|(*^3^)`); + }, + onSwitchOut() { + this.add(`c|&nui|(´◔‸◔\`) **??+ !`); + }, + onFaint() { + this.add(`c|&nui|(◕︿◕✿)`); + }, + }, + om: { + noCopy: true, + onStart(target, source) { + source.types = ["Fire", "Fairy"]; + this.add(`c|@OM|use shift gear`); + this.add('-start', source, 'typeadd', 'Fairy'); + }, + onSwitchOut() { + this.add(`c|@OM|Ok brb I'm gonna ${["ladder Mix and Mega", "roll battle some surv regs real quick", "sweep y'all in mafia let's get it"][this.random(3)]}`); + }, + onFaint() { + this.add(`c|@OM|${["Oh god I rolled a 1", "Killed Night 1, seriously?"][this.random(2)]}`); + }, + }, + osiris: { + noCopy: true, + onStart() { + this.add(`c|+Osiris|THE SECRET INGREDIENT IS`); + }, + onSwitchOut() { + this.add(`c|+Osiris|god's plan`); + }, + onFaint() { + this.add(`c|+Osiris|I'm getting too old for this x_x`); + }, + onSourceModifyDamage(damage, source, target, move) { + if (move.typeMod > 0 && !target.illusion) { + this.debug('Solid Rock neutralize'); + return this.chainModify(0.75); + } + }, + }, + overneat: { + noCopy: true, + onStart() { + this.add(`c|+Overneat|[muffled eurobeat playing in the distance]`); + }, + onSwitchOut() { + this.add(`c|+Overneat|Time to take a rest`); + }, + onFaint() { + this.add(`c|+Overneat|It’s over for me?`); + }, + }, + pablo: { + noCopy: true, + onStart() { + this.add(`c|%Pablo|Let's get this party started.`); + }, + onSwitchOut() { + this.add(`c|%Pablo|I need a break, this is getting boring.`); + }, + onFaint() { + this.add(`c|%Pablo|It's cool, I didn't wanna battle anyway.`); + }, + }, + paradise: { + noCopy: true, + onStart() { + this.add(`c|@Paradise|⠠⠺⠓⠁⠞⠀⠞⠓⠑⠀⠋⠥⠉⠅⠀⠙⠊⠙⠀⠽⠕⠥⠀⠚⠥⠎⠞⠀⠋⠥⠉⠅⠊⠝⠛⠀⠎⠁⠽⠀⠁⠃⠕⠥⠞⠀⠍⠑,⠀⠽⠕⠥⠀⠇⠊⠞⠞⠇⠑⠀⠃⠊⠞⠉⠓?`); + }, + onSwitchOut() { + this.add(`c|@Paradise|Braille is the only language you need.`); + }, + onFaint() { + this.add(`c|@Paradise|⠠⠽⠕⠥’⠗⠑⠀⠋⠥⠉⠅⠊⠝⠛⠀⠙⠑⠁⠙,⠀⠅⠊⠙⠙⠕.`); + }, + }, + pluviometer: { + noCopy: true, + onStart() { + this.add(`c|@pluviometer|${["Need a GP check?", "I'm a switch-in and I'm switching in #hyphenation"][this.random(2)]}`); + }, + onSwitchOut() { + this.add(`c|@pluviometer|${["I wish this were a better matchup #subjunctive", "GP 1/2", "GP 2/2"][this.random(3)]}`); + }, + onFaint() { + this.add(`c|@pluviometer|${["Follow SmogonU on Facebook! https://www.facebook.com/SmogonU", "Follow SmogonU on Twitter! https://twitter.com/SmogonU"][this.random(2)]}`); + }, + }, + ptoad: { + noCopy: true, + onStart() { + this.add(`c|+ptoad⚬|Make it rain!`); + }, + onSwitchOut() { + this.add(`c|+ptoad⚬|Oh. You're switching me out. No, it's fine, I "toad"ally get it.`); + }, + onFaint() { + this.add(`c|+ptoad⚬|Wow. Way to rain on my parade.`); + }, + }, + psynergy: { + noCopy: true, + onStart() { + this.add(`c|+Psynergy|oh`); + }, + onSwitchOut() { + this.add(`c|+Psynergy|Joe doesn't pay me enough for this`); + }, + onFaint() { + this.add(`c|+Psynergy|I'm going to be late...`); + }, + }, + quitequiet: { + noCopy: true, + onStart() { + this.add(`c|@Quite Quiet|spooky :d`); + }, + onFaint() { + this.add(`c|@Quite Quiet|:'(`); + }, + onModifyDefPriority: 6, + onModifyDef(def, pokemon) { + if (pokemon.illusion) return; + if (!pokemon.transformed) { + return this.chainModify(1.5); + } + }, + onModifySpDPriority: 6, + onModifySpD(spd, pokemon) { + if (pokemon.illusion) return; + if (!pokemon.transformed) { + return this.chainModify(1.5); + } + }, + }, + rorymercury: { + noCopy: true, + onStart(pokemon) { + this.add(`c|+Rory Mercury|guess I'm in charge now`); + if (pokemon.illusion) return; + this.boost({atk: 1}, pokemon); + }, + onSwitchOut() { + this.add(`c|+Rory Mercury|brb`); + }, + onFaint() { + this.add(`c|+Rory Mercury|/me shook af`); + }, + }, + saburo: { + noCopy: true, + onStart() { + this.add(`c|+Saburo|Look beyond what you see`); + }, + onSwitchOut() { + this.add(`c|+Saburo|Gotta go teleport somewhere brb`); + }, + onFaint() { + this.add(`c|+Saburo|...you see too much`); + }, + }, + samjo: { + noCopy: true, + onStart() { + this.add(`c|+SamJo|Heyo/ Hope your day's been fantasthicc! Woo!`); + }, + onSwitchOut() { + this.add(`c|+SamJo|Catch ya later, stay thicc my friends o/`); + }, + onFaint() { + this.add(`c|+SamJo|Oof, gotta get thiccer……. ;(`); + }, + }, + scotteh: { + noCopy: true, + onStart() { + this.add(`c|@Scotteh|─────▄▄████▀█▄`); + this.add(`c|@Scotteh|───▄██████████████████▄`); + this.add(`c|@Scotteh|─▄█████.▼.▼.▼.▼.▼.▼.▼`); + }, + onSwitchOut() { + this.add(`c|@Scotteh|▄███████▄.▲.▲.▲.▲.▲.▲`); + this.add(`c|@Scotteh|█████████████████████▀▀`); + }, + onFaint() { + this.add(`c|@Scotteh|▄███████▄.▲.▲.▲.▲.▲.▲`); + this.add(`c|@Scotteh|█████████████████████▀▀`); + }, + }, + shiba: { + noCopy: true, + onStart() { + this.add(`c|%Shiba|LINDA IS INDA`); + }, + onSwitchOut() { + this.add(`c|%Shiba|gotta buy an alt rq brb`); + }, + }, + slowbroth: { + noCopy: true, + onStart() { + this.add(`c|+Slowbroth|DETECTING FOREIGN SPECIES...`); + }, + onSwitchOut() { + this.add(`c|+Slowbroth|TELEPORTING TO ALTERNATE DIMENSION...`); + }, + onFaint() { + this.add(`c|+Slowbroth|HARDWARE DAMAGE PERMANENT...`); + }, + }, + snaquaza: { + noCopy: true, + onStart() { + this.add(`c|%Snaquaza|Snaq is baq... with a vengeance!`); + }, + onSwitchOut(pokemon) { + this.add(`c|%Snaquaza|Lynch Hoeen while I'm away...`); + // @ts-ignore Hack for Snaquaza's Z move + if (pokemon.claimHP) delete pokemon.claimHP; + }, + onFaint() { + this.add(`c|%Snaquaza|How did you know I was scum?`); + }, + onDamage(damage, pokemon) { + // @ts-ignore Hack for Snaquaza's Z move + if (!pokemon.claimHP) return; + // Prevent Snaquaza from fainting while using a fake claim to prevent visual bug + if (pokemon.hp - damage <= 0) return (pokemon.hp - 1); + }, + onAfterDamage(damage, pokemon) { + // @ts-ignore Hack for Snaquaza's Z move + if (!pokemon.claimHP || pokemon.hp > 1) return; + // Now we handle the fake claim "fainting" + // @ts-ignore Hack for Snaquaza's Z move + pokemon.hp = pokemon.claimHP; + pokemon.formeChange(pokemon.baseTemplate.id); + pokemon.moveSlots = pokemon.moveSlots.slice(0, 4); + this.add('message', `${pokemon.name}'s fake claim was uncovered!`); + // @ts-ignore Hack for Snaquaza's Z move + delete pokemon.claimHP; + this.add('-heal', pokemon, pokemon.getHealth, '[silent]'); + }, + }, + spacebass: { + noCopy: true, + onStart() { + this.add(`c|@SpaceBass|ಠ_ಠノ(_̅_̅_̅_̅_̲̅м̲̅a̲̅я̲̅i̲̅j̲̅u̲̅a̲̅n̲̅a̲̅_̅_̅_̅()ڪے~ `); + }, + onSwitchOut(pokemon) { + this.add(`c|@SpaceBass|**ಠ_ಠ** `); + if (pokemon.illusion) return; + // Innate - heals 40% on switch out + pokemon.heal(pokemon.maxhp * 0.4); + }, + onFaint() { + this.add(`c|@SpaceBass|bg`); + }, + }, + sungodvolcarona: { + noCopy: true, + onStart() { + this.add(`c|+SunGodVolcarona|Praise the Sun and live a happy life.`); + }, + onSwitchOut() { + this.add(`c|+SunGodVolcarona|You dare switch out a god?`); + }, + onFaint() { + this.add(`c|+SunGodVolcarona|All Suns have to set at one point.`); + }, + }, + teclis: { + noCopy: true, + onStart() { + this.add(`c|%Teclis|Sometimes you have to fight to get your point across.`); + }, + onSwitchOut() { + this.add(`c|%Teclis|You deserve a break.`); + }, + onFaint() { + this.add(`c|%Teclis|I'm convinced !`); + }, + }, + tennisace: { + noCopy: true, + onStart() { + this.add(`c|@tennisace|VIVA LOS TIGRES`); + }, + onSwitchOut() { + this.add(`c|@tennisace|wtf is this shit even`); + }, + onFaint() { + this.add(`c|@tennisace|maybe next season n_n`); + }, + }, + teremiare: { + noCopy: true, + onStart(source) { + this.add(`c|%Teremiare|<('o'<)`); + if (source.illusion) return; + let target = source.side.foe.active[0]; + + let removeAll = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + let 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.getEffect(sideCondition).name, '[from] move: No Fun Zone', '[of] ' + source); + } + if (source.side.removeSideCondition(sideCondition)) { + if (!(silentRemove.includes(sideCondition))) this.add('-sideend', source.side, this.getEffect(sideCondition).name, '[from] move: No Fun Zone', '[of] ' + source); + } + } + this.add('-clearallboost'); + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon && pokemon.isActive) pokemon.clearBoosts(); + } + } + for (const clear in this.pseudoWeather) { + if (clear.endsWith('mod') || clear.endsWith('clause')) continue; + this.removePseudoWeather(clear); + } + this.clearWeather(); + this.clearTerrain(); + }, + onFaint() { + this.add(`c|%Teremiare|(>'o')>`); + }, + }, + theimmortal: { + noCopy: true, + onStart() { + this.add(`c|~The Immortal|h-hi`); + }, + onSwitchOut() { + this.add(`c|~The Immortal|ok`); + }, + onFaint() { + this.add(`c|~The Immortal|zzz`); + }, + }, + theleprechaun: { + noCopy: true, + onStart() { + this.add(`c|+The Leprechaun|Let's get this bread`); + }, + onSwitchOut() { + this.add(`c|+The Leprechaun|I'm out this mutherfucker`); + }, + onFaint() { + this.add(`c|+The Leprechaun|This ain't it chief`); + }, + }, + tiksi: { + noCopy: true, + onStart() { + this.add(`c|@Tiksi|Hakkaa päälle! For the King of the Woodland!`); + }, + onSwitchOut() { + this.add(`c|@Tiksi|TI rigged this ok`); + }, + onFaint(pokemon) { + this.add(`c|@Tiksi|You rotten ${pokemon.side.foe.name}! I'll send you to the Tiksi branch!`); + }, + }, + torkool: { + noCopy: true, + onStart() { + this.add(`c|%torkool|:peepodetective:`); + }, + onSwitchOut() { + this.add(`c|%torkool|i cba`); + }, + onFaint() { + this.add(`c|%torkool|I don't deserve this...`); + }, + }, + trickster: { + noCopy: true, + onStart() { + this.add(`c|@Trickster|(◕‿◕✿)`); + }, + onSwitchOut() { + this.add(`c|@Trickster|(◠﹏◠✿)`); + }, + onFaint() { + this.add(`c|@Trickster|(✖﹏✖✿)`); + }, + }, + unleashourpassion: { + noCopy: true, + onStart() { + this.add(`c|%UnleashOurPassion|1v1 me if real`); + }, + onSwitchOut() { + this.add(`c|%UnleashOurPassion|Tfw you remember switching exists`); + }, + onFaint() { + this.add(`c|%UnleashOurPassion|That's hax! You were supposed to miss`); + }, + }, + urkerab: { + noCopy: true, + onStart() { + this.add(`j|+urkerab`); + }, + onSwitchOut() { + this.add(`l|+urkerab`); + }, + onFaint() { + this.add(`l|+urkerab`); + }, + }, + uselesscrab: { + noCopy: true, + onStart() { + this.add(`c|+Uselesscrab|/me !`); + }, + onSwitchOut() { + this.add(`c|+Uselesscrab|hilarious`); + }, + onFaint() { + this.add(`c|+Uselesscrab|i love pokemon`); + }, + }, + volco: { + noCopy: true, + onStart() { + this.add(`c|+Volco|Get Ready, I'm going to take you down!`); + }, + onSwitchOut() { + this.add(`c|+Volco|I've decided to spare you, lucky you.`); + }, + onFaint() { + this.add(`c|+Volco|Well, seems I was got taken down instead.`); + }, + }, + xayah: { + noCopy: true, + onStart() { + this.add(`c|+Xayah|Let's dance!`); + }, + onSwitchOut() { + this.add(`c|+Xayah|Fine, I'll go.`); + }, + onFaint() { + this.add(`c|+Xayah|All out of second dances...`); + }, + }, + xprienzo: { + noCopy: true, + onStart() { + this.add(`c|+XpRienzo ☑◡☑|Bleh`); + }, + onSwitchOut() { + this.add(`c|+XpRienzo ☑◡☑|>.>`); + }, + onFaint() { + this.add(`c|+XpRienzo ☑◡☑|Wait what?`); + }, + }, + yuki: { + noCopy: true, + onStart() { + this.add(`c|+Yuki|My ice may be a little __cold__, but your plan has been put completely on __hold__!`); + }, + onSwitchOut() { + this.add(`c|+Yuki|I-It's too hot in here!`); + }, + onFaint() { + this.add(`c|+Yuki|I'm melting...`); + }, + }, + zarel: { + noCopy: true, + onStart() { + this.add(`c|~Zarel|Your mom`); + }, + onFaint() { + this.add(`c|~Zarel|Your mom`); + // message is shown after the "Zarel Fainted!" message + this.add('message', 'Zarel used your mom!'); + }, + }, + zyguser: { + noCopy: true, + onStart() { + this.add(`c|+Zyg|/me sighs`); + }, + onSwitchOut() { + this.add(`c|+Zyg|/me sighs`); + }, + onFaint() { + this.add(`c|+Zyg|Brexit means Brexit`); + }, + }, + // Custom effect for Yuki + cutietrap: { + duration: 5, + noCopy: true, + onStart(pokemon, source) { + if (!this.runEvent('Attract', pokemon, source)) { + this.debug('Attract event failed'); + return false; + } + this.add('-start', pokemon, 'Attract', '[from] move: Cutie Trap', '[of] ' + source); + this.add('-message', `${pokemon.name} was trapped by love!`); + }, + onBeforeMovePriority: 2, + onBeforeMove(pokemon) { + this.add('-activate', pokemon, 'move: Attract', '[of] ' + this.effectData.source); + if (this.randomChance(1, 2)) { + this.add('cant', pokemon, 'Attract'); + return false; + } + }, + onTrapPokemon(pokemon) { + pokemon.tryTrap(); + }, + onEnd(pokemon) { + this.add('-end', pokemon, 'Attract', '[silent]'); + this.add('-message', `${pokemon.name} is no longer trapped by love.`); + }, + }, + // Modified hail for Yuki + hail: { + inherit: true, + onStart(battle, source, effect) { + if (effect && effect.effectType === 'Ability') { + if (this.gen <= 5 || effect.id === 'snowstorm') this.effectData.duration = 0; + this.add('-weather', 'Hail', '[from] ability: ' + effect, '[of] ' + source); + } else { + this.add('-weather', 'Hail'); + } + }, + }, + // boostreplacement condition for nui's zmove + boostreplacement: { + // this is a side condition + name: 'boostreplacement', + id: 'boostreplacement', + onStart(side, source) { + this.effectData.position = source.position; + }, + onSwitchInPriority: 1, + onSwitchIn(target) { + if (!target.fainted && target.position === this.effectData.position) { + this.boost({def: 1, spd: 1}); + target.side.removeSideCondition('boostreplacement'); + } + }, + }, + // Prevents glitch out from running more than once per turn per pokemon & boosts base power + glitchout: { + duration: 1, + onTryHit(target, source, move) { + if (move.basePower) { + move.basePower += 20; + this.debug('glitch out base power boost'); + } + }, + }, + // Modified type setup for arceus + arceus: { + inherit: true, + onType(types, pokemon) { + if (pokemon.transformed) return types; + /** @type {string | undefined} */ + let type = 'Normal'; + if (pokemon.ability === 'multitype' || pokemon.ability === 'logia') { + type = pokemon.getItem().onPlate; + if (!type) { + type = 'Normal'; + } + } + return [type]; + }, + }, +}; + +exports.BattleStatuses = BattleStatuses; diff --git a/data/mods/stadium/README.md b/data/mods/stadium/README.md new file mode 100644 index 0000000000000..d45e73d0979d3 --- /dev/null +++ b/data/mods/stadium/README.md @@ -0,0 +1,15 @@ +Stadium +==================== + +This mod inherits from gen 1, which inherits from gen 2, and then applies the Stadium changes upon the gen 1 engine. + +List of major changes: + + * Sleep lasts between 1 and 3 turns. + * Hyper Beam does recharge after a faint. + * Critical hits happen way less. + * Substitute now blocks all status ailments and draining. + * It allows tradebacks. + * Partial trapping moves miss and stop their duration upon target switch. + * Focus Energy actually works. + * Stat calculations are done properly, burn and para drop are lost if you lose status. diff --git a/mods/stadium/moves.js b/data/mods/stadium/moves.js similarity index 70% rename from mods/stadium/moves.js rename to data/mods/stadium/moves.js index a87574db00718..aefb4bd27643c 100644 --- a/mods/stadium/moves.js +++ b/data/mods/stadium/moves.js @@ -1,60 +1,25 @@ 'use strict'; -exports.BattleMovedex = { - "acid": { - inherit: true, - secondary: { - chance: 33, - boosts: { - def: -1, - }, - }, - }, - aurorabeam: { - inherit: true, - secondary: { - chance: 33, - boosts: { - atk: -1, - }, - }, - }, +/**@type {{[k: string]: ModdedMoveData}} */ +let BattleMovedex = { bind: { inherit: true, - onBeforeMove: function () {}, - }, - bubble: { - inherit: true, - secondary: { - chance: 33, - boosts: { - spe: -1, - }, - }, - }, - bubblebeam: { - inherit: true, - secondary: { - chance: 33, - boosts: { - spe: -1, - }, - }, + onBeforeMove() {}, }, clamp: { inherit: true, - onBeforeMove: function () {}, + onBeforeMove() {}, }, firespin: { inherit: true, - onBeforeMove: function () {}, + onBeforeMove() {}, }, highjumpkick: { inherit: true, desc: "If this attack misses the target, the user takes 1 HP of damage.", shortDesc: "User takes 1 HP damage it would have dealt if miss.", - onMoveFail: function (target, source, move) { - if (target.type !== 'ghost') { + onMoveFail(target, source, move) { + if (!target.types.includes('Ghost')) { this.directDamage(1, source); } }, @@ -63,19 +28,19 @@ exports.BattleMovedex = { inherit: true, desc: "If this attack misses the target, the user 1HP of damage.", shortDesc: "User takes 1 HP damage if miss.", - onMoveFail: function (target, source, move) { + onMoveFail(target, source, move) { this.damage(1, source); }, }, leechseed: { inherit: true, - onHit: function () {}, + onHit() {}, effect: { - onStart: function (target) { + onStart(target) { this.add('-start', target, 'move: Leech Seed'); }, onAfterMoveSelfPriority: 1, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { let leecher = pokemon.side.foe.active[pokemon.volatiles['leechseed'].sourcePosition]; if (!leecher || leecher.fainted || leecher.hp <= 0) { this.debug('Nothing to leech into'); @@ -95,27 +60,27 @@ exports.BattleMovedex = { effect: { // Rage lock duration: 255, - onStart: function (target, source, effect) { + onStart(target, source, effect) { this.effectData.move = 'rage'; }, onLockMove: 'rage', - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target.boosts.atk < 6 && move.id === 'disable') { - this.boost({atk:1}); + this.boost({atk: 1}); } }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (target.boosts.atk < 6 && move.category !== 'Status') { - this.boost({atk:1}); + this.boost({atk: 1}); } }, - onMoveFail: function () {}, + onMoveFail() {}, }, }, recover: { inherit: true, heal: null, - onHit: function (target) { + onHit(target) { if (target.hp === target.maxhp) { return false; } @@ -124,7 +89,7 @@ exports.BattleMovedex = { }, rest: { inherit: true, - onHit: function (target) { + onHit(target) { // Fails if the difference between // max HP and current HP is 0, 255, or 511 if (target.hp >= target.maxhp) return false; @@ -138,7 +103,7 @@ exports.BattleMovedex = { softboiled: { inherit: true, heal: null, - onHit: function (target) { + onHit(target) { // Fail when health is 255 or 511 less than max if (target.hp === target.maxhp) { return false; @@ -149,13 +114,13 @@ exports.BattleMovedex = { substitute: { inherit: true, effect: { - onStart: function (target) { + onStart(target) { this.add('-start', target, 'Substitute'); this.effectData.hp = Math.floor(target.maxhp / 4); delete target.volatiles['partiallytrapped']; }, onTryHitPriority: -1, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target === source) { this.debug('sub bypass: self hit'); return; @@ -165,10 +130,8 @@ exports.BattleMovedex = { return null; } if (move.category === 'Status') { - let SubBlocked = { - leechseed:1, lockon:1, mindreader:1, nightmare:1, - }; - if (move.status || move.boosts || move.volatileStatus === 'confusion' || SubBlocked[move.id]) { + let SubBlocked = ['leechseed', 'lockon', 'mindreader', 'nightmare']; + if (move.status || move.boosts || move.volatileStatus === 'confusion' || SubBlocked.includes(move.id)) { this.add('-activate', target, 'Substitute', '[block] ' + move.name); return null; } @@ -193,27 +156,30 @@ exports.BattleMovedex = { if (move.recoil) { this.damage(Math.round(damage * move.recoil[0] / move.recoil[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); // Add here counter damage - if (!target.lastAttackedBy) target.lastAttackedBy = {pokemon: source, thisTurn: true}; - target.lastAttackedBy.move = move.id; - target.lastAttackedBy.damage = damage; + let lastAttackedBy = target.getLastAttackedBy(); + if (!lastAttackedBy) { + target.attackedBy.push({source: source, move: move.id, damage: damage, thisTurn: true}); + } else { + lastAttackedBy.move = move.id; + lastAttackedBy.damage = damage; + } return 0; }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Substitute'); }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", }, wrap: { inherit: true, - onBeforeMove: function () {}, + onBeforeMove() {}, }, }; + +exports.BattleMovedex = BattleMovedex; diff --git a/mods/stadium/rulesets.js b/data/mods/stadium/rulesets.js similarity index 63% rename from mods/stadium/rulesets.js rename to data/mods/stadium/rulesets.js index 6b58f64f19c71..cc21291a77c64 100644 --- a/mods/stadium/rulesets.js +++ b/data/mods/stadium/rulesets.js @@ -1,25 +1,29 @@ 'use strict'; -exports.BattleFormats = { +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { standard: { effectType: 'ValidatorRule', name: 'Standard', ruleset: ['Sleep Clause Mod', 'Freeze Clause Mod', 'Species Clause', 'OHKO Clause', 'Evasion Moves Clause', 'Exact HP Mod', 'Cancel Mod'], banlist: ['Unreleased', 'Illegal'], - onValidateSet: function (set) { + onValidateSet(set) { // limit one of each move in Standard let moves = []; if (set.moves) { + /**@type {{[k: string]: true}} */ let hasMove = {}; - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const setMoveid of set.moves) { + let move = this.getMove(setMoveid); let moveid = move.id; if (hasMove[moveid]) continue; hasMove[moveid] = true; - moves.push(set.moves[i]); + moves.push(setMoveid); } } set.moves = moves; }, }, }; + +exports.BattleFormats = BattleFormats; diff --git a/mods/stadium/scripts.js b/data/mods/stadium/scripts.js similarity index 78% rename from mods/stadium/scripts.js rename to data/mods/stadium/scripts.js index 3191af49302d3..d0395a3d0a83d 100644 --- a/mods/stadium/scripts.js +++ b/data/mods/stadium/scripts.js @@ -3,74 +3,97 @@ /** * Stadium mechanics inherit from gen 1 mechanics, but fixes some stuff. */ -exports.BattleScripts = { +/**@type {ModdedBattleScriptsData} */ +let BattleScripts = { inherit: 'gen1', gen: 1, // BattlePokemon scripts. pokemon: { // Stadium shares gen 1 code but it fixes some problems with it. - getStat: function (statName, unmodified) { + getStat(statName, unmodified) { statName = toId(statName); if (statName === 'hp') return this.maxhp; if (unmodified) return this.stats[statName]; + // @ts-ignore return this.modifiedStats[statName]; }, // Gen 1 function to apply a stat modification that is only active until the stat is recalculated or mon switched. // Modified stats are declared in the Pokemon object in sim/pokemon.js in about line 681. - modifyStat: function (stat, modifier) { + modifyStat(stat, modifier) { if (!(stat in this.stats)) return; + // @ts-ignore this.modifiedStats[stat] = this.battle.clampIntRange(Math.floor(this.modifiedStats[stat] * modifier), 1); }, // This is run on Stadium after boosts and status changes. - recalculateStats: function () { + recalculateStats() { for (let statName in this.stats) { + /**@type {number} */ + // @ts-ignore let stat = this.template.baseStats[statName]; + // @ts-ignore stat = Math.floor(Math.floor(2 * stat + this.set.ivs[statName] + Math.floor(this.set.evs[statName] / 4)) * this.level / 100 + 5); + // @ts-ignore this.baseStats[statName] = this.stats[statName] = Math.floor(stat); + // @ts-ignore this.modifiedStats[statName] = Math.floor(stat); // Re-apply drops, if necessary. + // @ts-ignore if (this.status === 'par') this.modifyStat('spe', 0.25); + // @ts-ignore if (this.status === 'brn') this.modifyStat('atk', 0.5); + // @ts-ignore if (this.boosts[statName] !== 0) { + // @ts-ignore if (this.boosts[statName] >= 0) { + // @ts-ignore this.modifyStat(statName, [1, 1.5, 2, 2.5, 3, 3.5, 4][this.boosts[statName]]); } else { + // @ts-ignore this.modifyStat(statName, [100, 66, 50, 40, 33, 28, 25][-this.boosts[statName]] / 100); } } } }, // Stadium's fixed boosting function. - boostBy: function (boost) { + boostBy(boost) { let changed = false; for (let i in boost) { + // @ts-ignore let delta = boost[i]; + if (delta === undefined) continue; + // @ts-ignore this.boosts[i] += delta; + // @ts-ignore if (this.boosts[i] > 6) { + // @ts-ignore delta -= this.boosts[i] - 6; + // @ts-ignore this.boosts[i] = 6; } + // @ts-ignore if (this.boosts[i] < -6) { + // @ts-ignore delta -= this.boosts[i] - (-6); + // @ts-ignore this.boosts[i] = -6; } if (delta) changed = true; } + // @ts-ignore this.recalculateStats(); return changed; }, }, // Battle scripts. - runMove: function (move, pokemon, targetLoc, sourceEffect) { + runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect) { + let move = this.getActiveMove(moveOrMoveName); let target = this.getTarget(pokemon, move, targetLoc); - move = this.getMove(move); - if (!target) target = this.resolveTarget(pokemon, move); - if (target.subFainted) delete target.subFainted; + if (target && target.subFainted) delete target.subFainted; this.setActiveMove(move, pokemon, target); - if (pokemon.movedThisTurn || !this.runEvent('BeforeMove', pokemon, target, move)) { - this.debug('' + pokemon.id + ' move interrupted; movedThisTurn: ' + pokemon.movedThisTurn); + if (pokemon.moveThisTurn || !this.runEvent('BeforeMove', pokemon, target, move)) { + this.debug('' + pokemon.id + ' move interrupted; movedThisTurn: ' + pokemon.moveThisTurn); this.clearActiveMove(true); // This is only run for sleep this.runEvent('AfterMoveSelf', pokemon, target, move); @@ -85,14 +108,18 @@ exports.BattleScripts = { pokemon.lastDamage = 0; let lockedMove = this.runEvent('LockMove', pokemon); if (lockedMove === true) lockedMove = false; - if (!lockedMove && !pokemon.volatiles['partialtrappinglock']) { + if (!lockedMove && (!pokemon.volatiles['partialtrappinglock'] || pokemon.volatiles['partialtrappinglock'].locked !== target)) { pokemon.deductPP(move, null, target); + pokemon.side.lastMove = move; + pokemon.lastMove = move; + } else { + sourceEffect = move; } this.useMove(move, pokemon, target, sourceEffect); this.singleEvent('AfterMove', move, null, pokemon, target, move); // If rival fainted - if (target.hp <= 0) { + if (target && target.hp <= 0) { // We remove screens target.side.removeSideCondition('reflect'); target.side.removeSideCondition('lightscreen'); @@ -114,13 +141,14 @@ exports.BattleScripts = { } // If we move to here, the move failed and there's no partial trapping lock } }, - tryMoveHit: function (target, pokemon, move, spreadHit) { + tryMoveHit(target, pokemon, move) { let boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; let doSelfDestruct = true; + /** @type {number | undefined | false} */ let damage = 0; // First, check if the Pokémon is immune to this move. - if (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type] && !target.runImmunity(move.type, true)) { + if ((!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type, true)) { if (move.selfdestruct) { this.faint(pokemon, pokemon, move); } @@ -128,6 +156,7 @@ exports.BattleScripts = { } // Now, let's calculate the accuracy. + /** @type {number | true} */ let accuracy = move.accuracy; // Partial trapping moves: true accuracy while it lasts @@ -171,7 +200,7 @@ exports.BattleScripts = { accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); // Stadium fixes the 1/256 accuracy bug. - if (accuracy !== true && this.random(256) > accuracy) { + if (accuracy !== true && !this.randomChance(accuracy + 1, 256)) { this.attrLastMove('[miss]'); this.add('-miss', pokemon); damage = false; @@ -182,38 +211,33 @@ exports.BattleScripts = { pokemon.lastDamage = 0; if (move.multihit) { let hits = move.multihit; - if (hits.length) { + if (Array.isArray(hits)) { // Yes, it's hardcoded... meh if (hits[0] === 2 && hits[1] === 5) { - hits = [2, 2, 3, 3, 4, 5][this.random(6)]; + hits = this.sample([2, 2, 3, 3, 4, 5]); } else { hits = this.random(hits[0], hits[1] + 1); } } hits = Math.floor(hits); // In gen 1, all the hits have the same damage for multihits move + /** @type {number | undefined | false} */ let moveDamage = 0; - let firstDamage; let i; for (i = 0; i < hits && target.hp && pokemon.hp; i++) { - if (i === 0) { - // First hit, we calculate - moveDamage = this.moveHit(target, pokemon, move); - firstDamage = moveDamage; - } else { - // We get the previous damage to make it fix damage - move.damage = firstDamage; - moveDamage = this.moveHit(target, pokemon, move); - } + move.hit = i + 1; + moveDamage = this.moveHit(target, pokemon, move); if (moveDamage === false) break; damage = (moveDamage || 0); + // Move damage is fixed to be the first move's damage + if (i === 0) move.damage = damage; if (target.subFainted) { i++; break; } } move.damage = null; - if (i === 0) return true; + if (i === 0) return 1; this.add('-hitcount', target, i); } else { damage = this.moveHit(target, pokemon, move); @@ -229,7 +253,7 @@ exports.BattleScripts = { } // The move missed. - if (!damage && damage !== 0) { + if (damage === false) { // Delete the partial trap lock if necessary. delete pokemon.volatiles['partialtrappinglock']; return false; @@ -244,11 +268,13 @@ exports.BattleScripts = { return damage; }, - moveHit: function (target, pokemon, move, moveData, isSecondary, isSelf) { + moveHit(target, pokemon, moveOrMoveName, moveData, isSecondary, isSelf) { + /** @type {number | null | false | undefined} */ let damage = 0; - move = this.getMoveCopy(move); + let move = this.getActiveMove(moveOrMoveName); if (!isSecondary && !isSelf) this.setActiveMove(move, pokemon, target); + /** @type {number | boolean} */ let hitResult = true; if (!moveData) moveData = move; @@ -260,7 +286,7 @@ exports.BattleScripts = { hitResult = this.singleEvent('TryHit', moveData, {}, target, pokemon, move); // Partial trapping moves still apply their volatile to Pokémon behind a Sub - let targetHadSub = (target && target.volatiles['substitute']); + const targetHadSub = !!target.volatiles['substitute']; if (targetHadSub && moveData.volatileStatus && moveData.volatileStatus === 'partiallytrapped') { target.addVolatile(moveData.volatileStatus, pokemon, move); } @@ -327,6 +353,7 @@ exports.BattleScripts = { if (moveData.status) { if (!target.status) { target.setStatus(moveData.status, pokemon, move); + // @ts-ignore target.recalculateStats(); } else if (!isSecondary) { if (target.status === moveData.status) { @@ -339,6 +366,7 @@ exports.BattleScripts = { } if (moveData.forceStatus) { if (target.setStatus(moveData.forceStatus, pokemon, move)) { + // @ts-ignore target.recalculateStats(); didSomething = true; } @@ -381,15 +409,15 @@ exports.BattleScripts = { // Apply move secondaries. if (moveData.secondaries) { - for (let i = 0; i < moveData.secondaries.length; i++) { + for (const secondary of moveData.secondaries) { // We check here whether to negate the probable secondary status if it's para, burn, or freeze. // In the game, this is checked and if true, the random number generator is not called. // That means that a move that does not share the type of the target can status it. // If a move that was not fire-type would exist on Gen 1, it could burn a Pokémon. - if (!(moveData.secondaries[i].status && moveData.secondaries[i].status in {'par':1, 'brn':1, 'frz':1} && target && target.hasType(move.type))) { - let effectChance = Math.floor(moveData.secondaries[i].chance * 255 / 100); - if (typeof moveData.secondaries[i].chance === 'undefined' || this.random(256) < effectChance) { - this.moveHit(target, pokemon, move, moveData.secondaries[i], true, isSelf); + if (!(secondary.status && ['par', 'brn', 'frz'].includes(secondary.status) && target && target.hasType(move.type))) { + let effectChance = Math.floor((secondary.chance || 100) * 255 / 100); + if (typeof secondary.chance === 'undefined' || this.randomChance(effectChance + 1, 256)) { + this.moveHit(target, pokemon, move, secondary, true, isSelf); } } } @@ -400,17 +428,18 @@ exports.BattleScripts = { return damage; }, - getDamage: function (pokemon, target, move, suppressMessages) { + getDamage(pokemon, target, move, suppressMessages) { // First of all, we get the move. - if (typeof move === 'string') move = this.getMove(move); - if (typeof move === 'number') { - move = { + if (typeof move === 'string') { + move = this.getActiveMove(move); + } else if (typeof move === 'number') { + move = /** @type {ActiveMove} */ ({ basePower: move, type: '???', category: 'Physical', willCrit: false, flags: {}, - }; + }); } // Let's see if the target is immune to the move. @@ -458,15 +487,13 @@ exports.BattleScripts = { let type = move.type; // We get the base power and apply basePowerCallback if necessary. + /** @type {number | false | null} */ let basePower = move.basePower; if (move.basePowerCallback) { basePower = move.basePowerCallback.call(this, pokemon, target, move); } - - // We check if the base power is proper. if (!basePower) { - if (basePower === 0) return; // Returning undefined means not dealing damage - return basePower; + return basePower === 0 ? undefined : basePower; } basePower = this.clampIntRange(basePower, 1); @@ -507,7 +534,7 @@ exports.BattleScripts = { // We compare our critical hit chance against a random number between 0 and 255. // If the random number is lower, we get a critical hit. This means there is always a 1/255 chance of not hitting critically. if (critChance > 0) { - move.crit = (this.random(256) < critChance); + move.crit = this.randomChance(critChance, 256); } } // There is a critical hit. @@ -518,7 +545,7 @@ exports.BattleScripts = { // Happens after crit calculation. if (basePower) { basePower = this.runEvent('BasePower', pokemon, target, move, basePower); - if (move.basePowerModifier) { + if (basePower && move.basePowerModifier) { basePower *= move.basePowerModifier; } } @@ -542,7 +569,7 @@ exports.BattleScripts = { defense = this.clampIntRange(defense, 1, 1998); } - // In the event of a critical hit, the ofense and defense changes are ignored. + // In the event of a critical hit, the offense and defense changes are ignored. // This includes both boosts and screens. // Also, level is doubled in damage calculation. if (move.crit) { @@ -627,85 +654,6 @@ exports.BattleScripts = { // We are done, this is the final damage. return Math.floor(damage); }, - damage: function (damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - effect = this.getEffect(effect); - if (!(damage || damage === 0)) return damage; - if (damage !== 0) damage = this.clampIntRange(damage, 1); - - if (effect.id !== 'struggle-recoil') { // Struggle recoil is not affected by effects - damage = this.runEvent('Damage', target, source, effect, damage); - if (!(damage || damage === 0)) { - this.debug('damage event failed'); - return damage; - } - } - if (damage !== 0) damage = this.clampIntRange(damage, 1); - target.battle.lastDamage = damage; - damage = target.damage(damage, source, effect); - if (source) source.lastDamage = damage; - let name = effect.fullname; - if (name === 'tox') name = 'psn'; - switch (effect.id) { - case 'partiallytrapped': - this.add('-damage', target, target.getHealth, '[from] ' + this.effectData.sourceEffect.fullname, '[partiallytrapped]'); - break; - default: - if (effect.effectType === 'Move') { - this.add('-damage', target, target.getHealth); - } else if (source && source !== target) { - this.add('-damage', target, target.getHealth, '[from] ' + effect.fullname, '[of] ' + source); - } else { - this.add('-damage', target, target.getHealth, '[from] ' + name); - } - break; - } - - // In Stadium, recoil doesn't happen if you faint an opponent. - if (effect.recoil && source && target && target.hp > 0) { - this.damage(this.clampIntRange(Math.floor(damage * effect.recoil[0] / effect.recoil[1]), 1), source, target, 'recoil'); - } - if (effect.drain && source) { - this.heal(this.clampIntRange(Math.floor(damage * effect.drain[0] / effect.drain[1]), 1), source, target, 'drain'); - } - - if (target.fainted) { - this.faint(target); - } else { - damage = this.runEvent('AfterDamage', target, source, effect, damage); - } - - return damage; - }, - directDamage: function (damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - if (!damage) return 0; - damage = this.clampIntRange(damage, 1); - damage = target.damage(damage, source, effect); - // Now we sent the proper -damage. - switch (effect.id) { - case 'strugglerecoil': - this.add('-damage', target, target.getHealth, '[from] recoil'); - break; - case 'confusion': - this.add('-damage', target, target.getHealth, '[from] confusion'); - break; - default: - this.add('-damage', target, target.getHealth); - break; - } - if (target.fainted) this.faint(target); - - return damage; - }, }; + +exports.BattleScripts = BattleScripts; diff --git a/mods/stadium/statuses.js b/data/mods/stadium/statuses.js similarity index 71% rename from mods/stadium/statuses.js rename to data/mods/stadium/statuses.js index f0ff36fdb18b4..40d76fdc9723b 100644 --- a/mods/stadium/statuses.js +++ b/data/mods/stadium/statuses.js @@ -1,27 +1,34 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: ModdedEffectData}} */ +let BattleStatuses = { brn: { + name: 'brn', + id: 'brn', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'brn'); }, onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, }, par: { + name: 'par', + id: 'par', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'par'); }, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon) { - if (this.random(256) < 63) { + onBeforeMove(pokemon) { + if (this.randomChance(63, 256)) { this.add('cant', pokemon, 'par'); pokemon.removeVolatile('bide'); pokemon.removeVolatile('lockedmovee'); @@ -36,64 +43,76 @@ exports.BattleStatuses = { }, }, slp: { + name: 'slp', + id: 'slp', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'slp'); // 1-3 turns this.effectData.startTime = this.random(1, 4); this.effectData.time = this.effectData.startTime; }, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { pokemon.statusData.time--; this.add('cant', pokemon, 'slp'); - pokemon.lastMove = ''; + pokemon.lastMove = null; return false; }, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { if (pokemon.statusData.time <= 0) pokemon.cureStatus(); }, }, frz: { + name: 'frz', + id: 'frz', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'frz'); }, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { this.add('cant', pokemon, 'frz'); - pokemon.lastMove = ''; + pokemon.lastMove = null; return false; }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.type === 'Fire' && move.category !== 'Status') { target.cureStatus(); } }, }, psn: { + name: 'psn', + id: 'psn', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'psn'); }, onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, }, tox: { + name: 'tox', + id: 'tox', + num: 0, effectType: 'Status', - onStart: function (target) { + onStart(target) { this.add('-status', target, 'tox'); }, onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { + onAfterMoveSelf(pokemon) { this.damage(this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1)); }, - onAfterSwitchInSelf: function (pokemon) { + onAfterSwitchInSelf(pokemon) { // Regular poison status and damage after a switchout -> switchin. pokemon.setStatus('psn'); pokemon.addVolatile('residualdmg'); @@ -102,12 +121,15 @@ exports.BattleStatuses = { }, }, partiallytrapped: { + name: 'partiallytrapped', + id: 'partiallytrapped', + num: 0, duration: 2, onBeforeMovePriority: 1, - onStart: function (target, source, effect) { + onStart(target, source, effect) { this.add('-activate', target, 'move: ' + effect, '[of] ' + source); }, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { if (this.effectData.source && (!this.effectData.source.isActive || this.effectData.source.hp <= 0)) { pokemon.removeVolatile('partiallytrapped'); return; @@ -115,8 +137,10 @@ exports.BattleStatuses = { this.add('cant', pokemon, 'partiallytrapped'); return false; }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, this.effectData.sourceEffect, '[partiallytrapped]'); }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/data/mods/vgc17/formats-data.js b/data/mods/vgc17/formats-data.js new file mode 100644 index 0000000000000..2dda203987aab --- /dev/null +++ b/data/mods/vgc17/formats-data.js @@ -0,0 +1,72 @@ +'use strict'; + +/**@type {{[k: string]: ModdedTemplateFormatsData}} */ +let BattleFormatsData = { + pikachupartner: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + marowakalolatotem: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + ribombeetotem: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + rockruffdusk: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + lycanrocdusk: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + araquanidtotem: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + necrozmaduskmane: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + necrozmadawnwings: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + necrozmaultra: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + poipole: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + naganadel: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + stakataka: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, + blacephalon: { + inherit: true, + isUnreleased: true, + tier: "Unreleased", + }, +}; + +exports.BattleFormatsData = BattleFormatsData; diff --git a/data/mods/vgc17/items.js b/data/mods/vgc17/items.js new file mode 100644 index 0000000000000..a3946721e545f --- /dev/null +++ b/data/mods/vgc17/items.js @@ -0,0 +1,32 @@ +'use strict'; + +/**@type {{[k: string]: ModdedItemData}} */ +let BattleItems = { + "kommoniumz": { + inherit: true, + isUnreleased: true, + }, + "lunaliumz": { + inherit: true, + isUnreleased: true, + }, + "lycaniumz": { + inherit: true, + isUnreleased: true, + }, + "mimikiumz": { + inherit: true, + isUnreleased: true, + }, + "solganiumz": { + inherit: true, + isUnreleased: true, + }, + "ultranecroziumz": { + inherit: true, + isUnreleased: true, + }, +}; + +exports.BattleItems = BattleItems; + diff --git a/data/mods/vgc17/learnsets.js b/data/mods/vgc17/learnsets.js new file mode 100644 index 0000000000000..fa6c559db3e15 --- /dev/null +++ b/data/mods/vgc17/learnsets.js @@ -0,0 +1,60479 @@ +'use strict'; + +/**@type {{[k: string]: {learnset: {[k: string]: MoveSource[]}}}} */ +let BattleLearnsets = { + missingno: {learnset: { + blizzard: ["5L1"], + bubblebeam: ["5L1"], + cut: ["5L1"], + doubleedge: ["5L1"], + earthquake: ["5L1"], + fissure: ["5L1"], + fly: ["5L1"], + icebeam: ["5L1"], + megakick: ["5L1"], + megapunch: ["5L1"], + psychic: ["5L1"], + rage: ["5L1"], + razorwind: ["5L1"], + rest: ["5L1"], + seismictoss: ["5L1"], + skyattack: ["5L1"], + submission: ["5L1"], + swordsdance: ["5L1"], + takedown: ["5L1"], + teleport: ["5L1"], + thunder: ["5L1"], + thunderwave: ["5L1"], + toxic: ["5L1"], + triattack: ["5L1"], + watergun: ["5L1"], + }}, + tomohawk: {learnset: { + acrobatics: ["7M", "5M"], + aerialace: ["7M", "7L17", "5M", "5L17"], + airslash: ["7L33", "5L37"], + attract: ["7M", "5M"], + aurasphere: ["7L1", "5L1"], + aquatail: ["7T"], + batonpass: ["7E", "5E"], + brickbreak: ["7E", "5M"], + bulkup: ["7M", "5M"], + bulldoze: ["7M", "5M"], + confide: ["7M"], + confuseray: ["7M", "5E"], + doubleteam: ["7M", "5M"], + earthpower: ["5L33"], + earthquake: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + facade: ["7M", "5M"], + falseswipe: ["7M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + fly: ["7M", "5M"], + focusblast: ["7M", "5M"], + focusenergy: ["7E", "5E"], + frustration: ["7E", "5M"], + furyswipes: ["7L1", "5L1"], + gigaimpact: ["7M", "5M"], + grassknot: ["7M", "5M"], + harden: ["7L1", "5L1"], + haze: ["7E", "5E"], + healingwish: ["7L60", "5L60"], + heatwave: ["7L42", "5L45"], + helpinghand: ["7T"], + hiddenpower: ["7M", "5M"], + hurricane: ["7L51", "5L55"], + hyperbeam: ["7M", "5M"], + hypervoice: ["7L45", "5L49"], + incinerate: ["6M", "5M"], + irontail: ["7T"], + memento: ["7E", "5E"], + morningsun: ["7L20", "5L20"], + naturepower: ["7E", "5E"], + poweruppunch: ["6L99"], + protect: ["7M", "5M"], + quash: ["7M", "5M"], + raindance: ["7M", "7L29", "5M", "5L29"], + rapidspin: ["7E", "5E"], + reflect: ["5M"], + rest: ["7M", "7L53", "5M", "5L53"], + retaliate: ["6M", "5M"], + return: ["7M", "5M"], + roar: ["7M", "5M"], + rockslide: ["7M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "5M"], + roost: ["7E", "7M", "5E"], + round: ["7M", "5M"], + safeguard: ["7M", "5M"], + scratch: ["7L4"], + secretpower: ["7M"], + skyattack: ["7L55"], + skydrop: ["7M", "7L49", "5M", "5L50"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + stealthrock: ["7E", "5E"], + steelwing: ["7M"], + strength: ["6M", "5M"], + submission: ["7L37", "5L42"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "7L1", "5M", "5L1"], + superpower: ["7L50", "5L51"], + swagger: ["7M", "5M"], + taunt: ["7M", "5M"], + thief: ["7M", "5M"], + toxic: ["7M", "5M"], + whirlwind: ["7L23", "5L23"], + workup: ["7M", "5M"], + yawn: ["7E", "5E"], + }}, + necturna: {learnset: { + attract: ["7M", "5M"], + calmmind: ["7M", "5M"], + confide: ["7M"], + curse: ["7E", "5E"], + cut: ["7M", "5M"], + darkpulse: ["7M"], + doubleteam: ["7M", "5M"], + dreameater: ["7M", "5M"], + energyball: ["7M", "5M"], + facade: ["7M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "5M"], + futuresight: ["7E", "5E"], + gigadrain: ["7E", "6T", "5E"], + gigaimpact: ["7M", "5M"], + grassknot: ["7M", "5M"], + grassyterrain: ["7L34"], + gravity: ["7E", "6T", "5E"], + hex: ["7L28", "5L25"], + hiddenpower: ["7M", "5M"], + hornleech: ["7L1", "5L31"], + hyperbeam: ["7M", "5M"], + ingrain: ["7E", "5E"], + leafblade: ["7E", "5E"], + leafstorm: ["7E", "5E"], + leechlife: ["7M"], + leechseed: ["7L12"], + leer: ["7L1", "5L1"], + magicalleaf: ["7L17"], + naturalgift: ["7E", "5E"], + naturepower: ["7M"], + nightmare: ["7E", "5E"], + nightshade: ["7L39"], + ominouswind: ["7E", "5L7"], + painsplit: ["7L45", "6T", "5L40"], + payback: ["7M", "5M"], + phantomforce: ["7L61"], + poisonfang: ["7L1", "5L1"], + powerwhip: ["7L56", "5L60"], + protect: ["7M", "5M"], + psychic: ["7M", "5M"], + psychup: ["7M", "5M"], + rest: ["7M", "5M"], + return: ["7M", "5M"], + round: ["7M", "5M"], + seedbomb: ["7T"], + secretpower: ["7M"], + sleeptalk: ["7M"], + shadowball: ["7M", "7L50", "5M", "5L50"], + shadowclaw: ["7M", "5M"], + shadowsneak: ["7L6", "5L13"], + sketch: ["7E", "5E"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spite: ["7T"], + stoneedge: ["7M", "5M"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "5M"], + superfang: ["7L1", "6T", "5L1"], + swagger: ["7M", "5M"], + telekinesis: ["6M", "5M"], + thief: ["7M", "5M"], + thunderfang: ["7L1", "5L1"], + torment: ["7M", "5M"], + toxic: ["7M", "5M"], + toxicspikes: ["7L23", "5L19"], + vinewhip: ["7L1", "5L1"], + willowisp: ["7M", "7L23", "5M", "5L19"], + worryseed: ["7T"], + }}, + mollux: {learnset: { + acid: ["7L4", "5L4"], + acidarmor: ["7L33", "5L28"], + acidspray: ["7L12", "5L12"], + aquaring: ["7E", "5E"], + attract: ["7M", "5M"], + bide: ["7L1", "5L1"], + bind: ["7T"], + calmmind: ["7M", "5M"], + charm: ["7E", "5E"], + clearsmog: ["7L25", "5L20"], + confide: ["7M"], + confuseray: ["7L17", "5L17"], + drainingkiss: ["7L20", "7E"], + doubleteam: ["7M", "5M"], + ember: ["7L1", "5L1"], + eruption: ["7L57", "5L52"], + explosion: ["7M", "5M"], + facade: ["7M", "5M"], + finalgambit: ["7L60", "5L57"], + fireblast: ["7M", "5M"], + firespin: ["7E", "5E"], + flamecharge: ["7M", "5M"], + flamethrower: ["7M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "5M"], + gastroacid: ["7M", "6T", "5E"], + gigaimpact: ["7M", "5M"], + gunkshot: ["7L52", "6T", "5L49"], + healbell: ["7E", "6T", "5E"], + healpulse: ["7E", "5E"], + heatwave: ["7L36", "6T", "5L33"], + helpinghand: ["7E", "6T", "5E"], + hiddenpower: ["7M", "5M"], + hyperbeam: ["7M", "5M"], + inferno: ["7L49", "5L44"], + lavaplume: ["7L28", "5L25"], + leechlife: ["7M"], + lightscreen: ["7M", "5M"], + moonlight: ["7L33", "5L28"], + overheat: ["7M", "5M"], + protect: ["7M", "5M"], + raindance: ["7M", "5M"], + rapidspin: ["7E", "5E"], + recover: ["7L41", "5L36"], + rest: ["7M", "5M"], + return: ["7M", "5M"], + round: ["7M", "5M"], + secretpower: ["7M"], + shockwave: ["7T"], + sleeptalk: ["7E", "7M", "5E"], + sludgebomb: ["7M", "5M"], + sludgewave: ["7M", "5M"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spotlight: ["7L65"], + stealthrock: ["7E", "6T", "5E"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "5M"], + swagger: ["7M", "5M"], + thief: ["7M", "5M"], + thunder: ["7M", "5M"], + thunderbolt: ["7M", "5M"], + thunderwave: ["7M", "5M"], + toxic: ["7M", "5M"], + toxicspikes: ["7L44", "5L41"], + trick: ["7E", "6T", "5E"], + venomdrench: ["7E"], + venoshock: ["7M", "5M"], + willowisp: ["7M", "5M"], + withdraw: ["7L9", "5L9"], + }}, + aurumoth: {learnset: { + allyswitch: ["5M"], + ancientpower: ["7L47", "5L47"], + attract: ["7M", "5M"], + blizzard: ["7M", "5M"], + bugbite: ["7T", "5T"], + bugbuzz: ["7E", "5E"], + closecombat: ["7E", "5E"], + confide: ["7M"], + counter: ["7E", "5E"], + cut: ["6M", "5M"], + disable: ["7E", "5E"], + doubleteam: ["7M", "5M"], + dragondance: ["7L1", "5L1"], + dreameater: ["7M", "5M"], + echoedvoice: ["7M", "5M"], + electroweb: ["7T", "5T"], + facade: ["7M", "5M"], + feint: ["7E", "5E"], + finalgambit: ["5L41", "5L41"], + flash: ["6M", "5M"], + fling: ["7M", "5M"], + focusblast: ["7M", "5M"], + frustration: ["7M", "5M"], + gigaimpact: ["7M", "5M"], + hail: ["7M", "5M"], + healingwish: ["7L61", "5L61"], + healpulse: ["7L21", "5L21"], + helpinghand: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + hydropump: ["7E", "5E"], + hyperbeam: ["7M", "5M"], + icebeam: ["7M", "5M"], + icywind: ["7T", "5T"], + infestation: ["7M"], + lightscreen: ["7M", "5M"], + magiccoat: ["7T", "5T"], + magicroom: ["7T", "5T"], + megahorn: ["7E", "5E"], + ominouswind: ["7L27", "5L27"], + overheat: ["7M", "5M"], + protect: ["7M", "5M"], + psychic: ["7M", "5M"], + psychicterrain: ["7L1"], + psychup: ["7M", "5M"], + psyshock: ["7M", "5M"], + quiverdance: ["7L1", "5L1"], + raindance: ["7M", "5M"], + recycle: ["7T", "5T"], + reflect: ["7M", "5M"], + rest: ["7M", "5M"], + retaliate: ["5M"], + return: ["7M", "5M"], + roleplay: ["7T", "5T"], + round: ["7M", "5M"], + safeguard: ["7M", "7E", "5M", "5E"], + secretpower: ["7M"], + shadowball: ["7M", "5M"], + shockwave: ["7M"], + signalbeam: ["7T"], + silverwind: ["7L1", "5L1"], + skillswap: ["7T", "5T"], + sleeptalk: ["7M"], + snore: ["7T"], + solarbeam: ["7M", "5M"], + spotlight: ["7L1"], + steelwing: ["7M"], + stringshot: ["7L1", "5L1"], + strugglebug: ["5M"], + substitute: ["7M", "5M"], + sunnyday: ["7M", "7L1", "5M", "5L1"], + surf: ["7M", "5M"], + swagger: ["7M", "5M"], + tackle: ["7L1", "5L1"], + tailglow: ["7L67", "5L67"], + telekinesis: ["5M"], + thunder: ["7M", "5M"], + thunderbolt: ["7M", "5M"], + toxic: ["7M", "5M"], + trick: ["7T", "5T"], + waterpulse: ["7T"], + willowisp: ["7M", "7L34", "5M", "5L34"], + wingattack: ["7E", "5E"], + wish: ["7L54", "5L54"], + wonderroom: ["7T", "5T"], + xscissor: ["7M", "5M"], + zenheadbutt: ["7T", "5T"], + }}, + malaconda: {learnset: { + aromatherapy: ["7E", "5E"], + attract: ["7M", "5M"], + beatup: ["7E", "5E"], + bind: ["7T", "5T"], + brutalswing: ["7M"], + confide: ["7M"], + crunch: ["7L43", "5L42"], + cut: ["6M", "5M"], + darkpulse: ["7M", "5T"], + doubleteam: ["7M", "5M"], + dragontail: ["7M", "5M"], + energyball: ["7M", "5M"], + facade: ["7M", "5M"], + feint: ["7E"], + followme: ["7L1"], + foulplay: ["7T", "5T"], + frustration: ["7M", "5M"], + gigadrain: ["7T", "5T"], + gigaimpact: ["7M", "5M"], + glare: ["7E", "7L38", "5E"], + grassknot: ["7M", "7L20", "5M", "5L18"], + haze: ["7E", "5E"], + healbell: ["7T", "5T"], + hiddenpower: ["7M", "5M"], + hyperbeam: ["7M", "5M"], + icefang: ["7E"], + irontail: ["7T", "5T"], + knockoff: ["7T", "5T"], + leafblade: ["7L34", "5L36"], + leer: ["7L1"], + naturepower: ["7M"], + nightslash: ["7E", "5E"], + payback: ["7M", "5M"], + poisonpowder: ["7E", "5E"], + powerwhip: ["7L48", "5L57"], + protect: ["7M", "5M"], + punishment: ["7L62", "5L66"], + pursuit: ["7L10", "5L1"], + rapidspin: ["7L1", "5L1"], + recycle: ["7T"], + rest: ["7M", "5M"], + retaliate: ["7M", "5M"], + return: ["7M", "5M"], + roar: ["7M", "5M"], + round: ["7M", "5M"], + scaryface: ["7E", "7L15", "5E"], + screech: ["7E", "5E"], + secretpower: ["7M"], + seedbomb: ["7T", "5T"], + slam: ["7L29", "5L30"], + sleeptalk: ["7M", "5T"], + snarl: ["7M", "5M"], + snore: ["7T", "5T"], + solarbeam: ["7M", "5M"], + solarblade: ["7L66"], + spikyshield: ["7L52"], + spite: ["7T", "5T"], + strength: ["6M", "5M"], + stunspore: ["7E", "5E"], + substitute: ["7M", "5M"], + suckerpunch: ["7L24", "5L25"], + sunnyday: ["7M", "5M"], + swagger: ["7M", "5M"], + sweetscent: ["7E", "5E"], + synthesis: ["7T", "5T"], + taunt: ["7M", "5M"], + thief: ["7M", "5M"], + thunderfang: ["7E"], + toxic: ["7M", "5M"], + uturn: ["7M", "5M"], + vinewhip: ["7L6", "5L1"], + wildcharge: ["7M", "5M"], + worryseed: ["7T", "5T"], + wrap: ["7L1", "5L1"], + wringout: ["7L57", "5L48"], + }}, + cawmodore: {learnset: { + acrobatics: ["7M", "5M"], + aerialace: ["7M", "5M"], + airslash: ["7E", "5E"], + attract: ["7M", "5M"], + belch: ["7L52"], + bellydrum: ["7L1", "7E", "5L35"], + block: ["7T", "5T"], + brickbreak: ["7M", "5M"], + brine: ["7L44", "5L44"], + bulletpunch: ["7L39", "5L39"], + confide: ["7M"], + detect: ["7L26", "5L26"], + doubleteam: ["7M", "5M"], + drainpunch: ["7T", "5T"], + drillpeck: ["7E", "5E"], + endeavor: ["7T", "5T"], + facade: ["7M", "5M"], + flashcannon: ["7M", "7L58", "5M", "5L52"], + fly: ["7M", "5M"], + frustration: ["7M", "5M"], + gigaimpact: ["7M", "5M"], + growl: ["7L5", "5L5"], + hiddenpower: ["7M", "5M"], + hurricane: ["7L64", "5L58"], + hyperbeam: ["7M", "5M"], + ironhead: ["7T", "5T"], + knockoff: ["7T", "5T"], + leer: ["7L1", "5L0"], + metalclaw: ["7L13", "5L13"], + metalsound: ["7E", "5E"], + mirrormove: ["7E", "5E"], + peck: ["7L1", "5L0"], + pluck: ["7M", "5M"], + protect: ["7M", "5M"], + psychup: ["7M", "5M"], + pursuit: ["7E", "5E"], + quickattack: ["7E", "5E"], + quickguard: ["7E", "5E"], + raindance: ["7M", "5M"], + razorwind: ["7E", "5E"], + rest: ["7M", "5M"], + retaliate: ["7M", "5M"], + return: ["7M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "5M"], + screech: ["7L18", "5L18"], + secretpower: ["7M"], + shockwave: ["7T"], + skyattack: ["7T", "5T"], + skydrop: ["7M", "5M"], + sleeptalk: ["7M", "5T"], + smackdown: ["7M", "5M"], + snatch: ["7T", "5T"], + snore: ["7T", "5T"], + steelwing: ["7M", "7L31", "5L31"], + strength: ["6M", "5M"], + substitute: ["7M", "5M"], + surf: ["7M", "5M"], + swagger: ["7M", "5M"], + swift: ["7L9", "5L9"], + tailwind: ["5L48", "5T", "5L48"], + toxic: ["7M", "5M"], + waterpulse: ["7T"], + watersport: ["7E", "5E"], + wingattack: ["7L22", "5L22"], + }}, + volkraken: {learnset: { + absorb: ["7L1"], + aquajet: ["7E"], + aquaring: ["7L46", "6L46"], + assurance: ["7E", "6E"], + attract: ["7M", "6M"], + bind: ["7T"], + bite: ["7L1", "6L1"], + bounce: ["7T"], + captivate: ["7E", "6E"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1"], + covet: ["7T"], + destinybond: ["7L32", "6L32"], + dive: ["6L39", "6L37"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + fireblast: ["7M", "6M"], + firelash: ["7L35"], + firespin: ["7L18", "6L18"], + flameburst: ["7L23", "6L23"], + flamethrower: ["7M", "6M"], + flash: ["7L1", "6M", "6L1"], + flashcannon: ["7M", "6M"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + heatwave: ["7L51", "6T", "6L51"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L56", "6L56"], + hyperbeam: ["7M", "6M"], + incinerate: ["7M"], + infestation: ["7M"], + leechlife: ["7M", "6L1"], + memento: ["7L66", "6L66"], + overheat: ["7M", "6M"], + payback: ["7M", "6M"], + powergem: ["7L42", "6L42"], + protect: ["7M", "6M"], + quash: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L1", "6M", "6L1"], + reflecttype: ["7E"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "7L28", "6M", "6L28"], + scaryface: ["7E", "6E"], + secretpower: ["7M"], + sleeptalk: ["7M", "6M"], + snore: ["7T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + thief: ["7M", "6M"], + tickle: ["7E", "6E"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7E", "6T", "6E"], + whirlpool: ["7L14", "6L14"], + willowisp: ["7M", "6M"], + wringout: ["7L60"], + }}, + plasmanta: {learnset: { + acid: ["7L12", "6L12"], + aquatail: ["7L33", "6T", "6L33"], + aurasphere: ["7E"], + attract: ["7M", "6M"], + block: ["7T"], + clearsmog: ["7L22", "6L22"], + confide: ["7M", "6M"], + crosspoison: ["7L51", "6L51"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + discharge: ["7L47", "6L47"], + doubleteam: ["7M", "6M"], + eerieimpulse: ["7L65", "6L65"], + electricterrain: ["7L1"], + electroweb: ["7T"], + encore: ["7L16", "6L16"], + facade: ["7M", "6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + haze: ["7E", "6E"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + iondeluge: ["7L26", "6L26"], + irontail: ["7T"], + magnetrise: ["7T"], + paraboliccharge: ["7L38", "6L38"], + poisonjab: ["7M"], + poisonsting: ["7L1", "6L1"], + poisontail: ["7L29", "6L29"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psyshock: ["7M", "6M"], + psywave: ["7L42", "6L42"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + shockwave: ["7E", "6T", "6E"], + signalbeam: ["7E", "6T", "6E"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["7T"], + splash: ["7E", "6E"], + substitute: ["7M", "6M"], + supersonic: ["7L1", "6L1"], + swagger: ["7M", "7L56", "6M", "6L56"], + taunt: ["7M", "6M"], + thunder: ["7M", "7L60", "6M", "6L60"], + thunderbolt: ["7M", "6M"], + thundershock: ["7L1", "6L1"], + thunderwave: ["7M", "7L19", "6M", "6L19"], + toxic: ["7M", "6M"], + venomdrench: ["7E"], + venoshock: ["7M", "6M"], + waterpulse: ["7E", "6T", "6E"], + wideguard: ["7E", "6E"], + wildcharge: ["7M", "6M"], + zenheadbutt: ["7T"], + }}, + naviathan: {learnset: { + attract: ["7M", "6M"], + bite: ["7E", "6E"], + blizzard: ["7M", "6M"], + brine: ["7L45", "6L45"], + brutalswing: ["7M"], + bubblebeam: ["7L25", "6L25"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + dive: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dragonbreath: ["7L1", "6L1"], + dragonclaw: ["7M", "6M"], + dragondance: ["7E", "6E"], + dragonpulse: ["6T"], + drillpeck: ["7L31", "6L31"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + featherdance: ["7E", "6E"], + feint: ["7E", "6E"], + flashcannon: ["7M", "7L35", "6M", "6L35"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gust: ["7L1", "6L1"], + hail: ["7M", "6M"], + haze: ["7E", "6E"], + heavyslam: ["7L1", "7L68"], + hiddenpower: ["7M", "6M"], + hurricane: ["7L64", "6L64"], + hydropump: ["7L60", "6L60"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + icefang: ["7E", "6E"], + icepunch: ["6T"], + iciclecrash: ["7L51", "6L51"], + iciclespear: ["7E", "6E"], + icywind: ["6T"], + irondefense: ["6T"], + ironhead: ["7L65", "6T", "6L65"], + irontail: ["7E", "6T", "6E"], + metalclaw: ["7L11", "6L11"], + metalsound: ["7L21", "6L21"], + metronome: ["7E", "6E"], + peck: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychicfangs: ["7E"], + raindance: ["7M", "6M"], + refresh: ["7E", "6E"], + rest: ["7M", "6M"], + retaliate: ["7M", "6M"], + return: ["7M", "6M"], + rocksmash: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + scaryface: ["7L1", "6L1"], + secretpower: ["7M"], + selfdestruct: ["7L74", "6L74"], + slackoff: ["7L39", "6L39"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + splash: ["7L1", "6L1"], + strength: ["6M"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thunderfang: ["7E", "6E"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L7", "6L7"], + waterpulse: ["7E", "6T", "6E"], + whirlpool: ["7E", "6E"], + wideguard: ["7L54", "7E", "6L54", "6E"], + wildcharge: ["7M", "6M"], + }}, + crucibelle: {learnset: { + acidarmor: ["7L32", "6L32"], + astonish: ["7L1", "6L1"], + attract: ["7M", "6M"], + block: ["6T"], + coil: ["7E", "6E"], + confuseray: ["7L16", "6L16"], + confusion: ["7L14", "6L14"], + defensecurl: ["7E", "6E"], + doubleteam: ["7M", "6M"], + embargo: ["7M", "6M"], + endure: ["7L1", "6L1"], + explosion: ["7M", "7L60", "6M", "6L60"], + facade: ["7M", "6M"], + faketears: ["7L10", "6L10"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gravity: ["6T"], + gunkshot: ["7L56", "6T", "6L56"], + headsmash: ["7L1", "6L1"], + helpinghand: ["6T"], + hex: ["7L44", "6L44"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + infestation: ["7M", "6M"], + ironhead: ["6T"], + lowkick: ["6T"], + magicroom: ["6T"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + protect: ["7M", "7L1", "6M", "6L1"], + psybeam: ["7L40", "6L40"], + psychic: ["7M", "6M"], + reflect: ["7M", "7L25", "6M", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockblast: ["7L52", "6L52"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "7L36", "6M", "6L36"], + rocksmash: ["7M", "6M"], + rockthrow: ["7L5", "6L5"], + rocktomb: ["7M", "6M"], + rollout: ["7E", "6E"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["7M"], + shadowball: ["7M", "6M"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + sludge: ["7L28", "6L28"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "7L23", "6M", "6L23"], + snatch: ["6T"], + snore: ["6T"], + stealthrock: ["6T"], + stoneedge: ["7M", "6M"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + torment: ["7M", "7L48", "6M", "6L48"], + toxic: ["7M", "7L7", "6M", "6L7"], + toxicspikes: ["7L19", "6L19"], + trick: ["6T"], + uturn: ["7M", "6M"], + venoshock: ["7M", "6M"], + withdraw: ["7L1", "6L1"], + wonderroom: ["6T"], + woodhammer: ["7E", "6E"], + zenheadbutt: ["6T"], + }}, + kerfluffle: {learnset: { + attract: ["7M", "6M"], + aurasphere: ["7L45", "6L45"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + celebrate: ["6S0"], + charm: ["7E", "6E"], + closecombat: ["7L53", "6L53"], + confide: ["7L25", "6L25"], + crushclaw: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L17", "6L17"], + drainpunch: ["6T"], + dreameater: ["7M", "7L57", "6L57", "6M"], + encore: ["7E", "6E"], + endure: ["7L21", "6L21"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L1", "7L5", "6L1", "6L5"], + featherdance: ["7L1", "6L1"], + flashcannon: ["7M", "6M"], + fly: ["6S0"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + holdhands: ["6S0"], + hyperbeam: ["7M", "6M"], + lowkick: ["6T"], + metronome: ["6S0"], + moonblast: ["7L49", "6L49"], + nightmare: ["7L57", "6L57"], + partingshot: ["7L33", "6L33"], + playrough: ["7L37", "6L37"], + poweruppunch: ["7M", "6M"], + protect: ["7M", "6M"], + psychup: ["7M", "6M"], + quickguard: ["7E", "6E"], + rest: ["7M", "7L41", "6L41", "6M"], + retaliate: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + scaryface: ["7L29", "6L29"], + scratch: ["7L1", "6L1"], + secretpower: ["7M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snarl: ["7M", "6M"], + snore: ["6T"], + strength: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + wakeupslap: ["7L13", "6L13"], + wideguard: ["7E", "6E"], + wish: ["7E", "6E"], + workup: ["7M"], + yawn: ["7L9", "6L9"], + }}, + syclant: {learnset: { + absorb: ["7L1"], + attract: ["7M", "4M"], + avalanche: ["7L50", "4M", "4L49"], + blizzard: ["7M", "4M"], + brickbreak: ["7M", "4M"], + brutalswing: ["7M"], + bugbite: ["4T"], + bugbuzz: ["7L46", "4L42"], + bulldoze: ["7M"], + captivate: ["4M"], + confide: ["7M"], + counter: ["4T"], + cut: ["4M"], + doubleedge: ["4T"], + doubleteam: ["7M", "4M"], + earthpower: ["7E", "4T", "4E"], + earthquake: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fellstinger: ["7E"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focusenergy: ["7L10", "4L8"], + focuspunch: ["6T", "4M"], + frostbreath: ["7M"], + frustration: ["7M", "4M"], + furyattack: ["7L14", "4L1"], + furycutter: ["7L23", "4T"], + gigaimpact: ["7M", "4M"], + hail: ["7M", "7L37", "4M", "4L35"], + hiddenpower: ["7M", "4M"], + honeclaws: ["7M"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7L1", "4T", "4L30"], + iceshard: ["7L5", "4L5"], + iciclecrash: ["7L41"], + iciclespear: ["7L1"], + icywind: ["7L19", "4T", "4L18"], + leechlife: ["7M", "4L1"], + leer: ["7L1", "4L1"], + mimic: ["7E", "4T"], + naturalgift: ["4M"], + pinmissile: ["7E", "4E"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M"], + secretpower: ["7M", "4M"], + sheercold: ["5L59", "4L60"], + silverwind: ["4M"], + signalbeam: ["7E", "7T"], + slash: ["7L28", "4L14"], + sleeptalk: ["7M", "4M"], + snore: ["4T"], + spikes: ["7E", "4E"], + stoneedge: ["7M", "4M"], + strength: ["6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["7M"], + substitute: ["7M", "4M"], + superpower: ["7E", "4T", "4E"], + swagger: ["7M", "4M"], + swordsdance: ["7M", "4M"], + tailglow: ["7E", "4E"], + taunt: ["7M", "4M"], + toxic: ["7M", "4M"], + uturn: ["7M", "4M"], + waterpulse: ["6T", "4M"], + xscissor: ["7M", "7L32", "4M", "4L27"], + }}, + revenankh: {learnset: { + ancientpower: ["4T"], + armthrust: ["7L13", "4L18"], + attract: ["7M", "4M"], + bide: ["7L1", "4L1"], + bind: ["7T"], + brickbreak: ["7M", "4M"], + brutalswing: ["7M"], + bulkup: ["7M", "4M"], + bulldoze: ["7M"], + captivate: ["4M"], + confide: ["7M"], + counter: ["7E", "4T"], + curse: ["7E", "4E"], + destinybond: ["7E", "4E"], + doubleteam: ["7M", "4M"], + drainpunch: ["7M", "4M"], + dreameater: ["7M", "4M"], + dualchop: ["7T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focuspunch: ["7T", "4M"], + forcepalm: ["7E", "4E"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + glare: ["7L26", "4L26"], + hammerarm: ["7L57", "4L44"], + headbutt: ["7T"], + helpinghand: ["7T", "4T"], + hex: ["7E"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + knockoff: ["7T", "4T"], + machpunch: ["7E", "4E"], + meanlook: ["7L18", "4L23"], + memento: ["7E", "4E"], + metronome: ["7E", "4T"], + mimic: ["7E", "4T"], + moonlight: ["7L62", "4L62"], + mudslap: ["4T"], + nastyplot: ["7E", "4E"], + naturalgift: ["4M"], + ominouswind: ["7E", "4T", "4E"], + painsplit: ["7T", "4T"], + payback: ["7L38", "4M"], + poweruppunch: ["7M"], + powerwhip: ["7L52", "4L38"], + protect: ["7M", "4M"], + psychup: ["7M", "4M"], + punishment: ["7L71", "4L52"], + quickguard: ["7L48"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L33", "4L33"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "7L23", "4M", "4L13"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandstorm: ["7M", "4M"], + sandtomb: ["7L5", "4L5"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + shadowclaw: ["7M"], + shadowpunch: ["7L29", "4L29"], + shadowsneak: ["7E", "4E"], + sleeptalk: ["7M", "4M"], + smackdown: ["7M"], + snore: ["7T"], + spite: ["7T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "4M"], + superpower: ["7T", "4T"], + swagger: ["7M", "4M"], + taunt: ["7M", "4M"], + telekinesis: ["7M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + vacuumwave: ["4T"], + willowisp: ["7M"], + workup: ["7M"], + wrap: ["7L1", "4L1"], + wringout: ["7L66", "4L9"], + }}, + pyroak: {learnset: { + amnesia: ["7L37"], + ancientpower: ["4T"], + aromatherapy: ["7E", "4E"], + aromaticmist: ["7L59"], + attract: ["7M", "4M"], + block: ["7T", "4T"], + bulldoze: ["7M"], + bulletseed: ["7L1", "4M", "4L1"], + burnup: ["7L68"], + confide: ["7M"], + counter: ["7E", "4T", "4E"], + doubleedge: ["7E", "4T"], + doubleteam: ["7M", "4M"], + dragonbreath: ["7E", "4E"], + dragonpulse: ["7T"], + dragontail: ["7M"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + ember: ["7L5", "4L9"], + endure: ["4M"], + energyball: ["7M", "7L1", "4M"], + facade: ["7M", "4M"], + fireblast: ["7M", "4M"], + firespin: ["7E", "4L28"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "4M"], + flamewheel: ["7L19", "4L17"], + flareblitz: ["7L1", "4L1"], + flash: ["4M"], + flashcannon: ["7M", "7L46"], + frustration: ["7M", "4M"], + gigadrain: ["7L32", "4M", "4L21"], + gigaimpact: ["7M", "4M"], + grassknot: ["7M", "4M"], + grasswhistle: ["7E", "4E"], + grassyterrain: ["7E"], + growth: ["7L28", "4L5"], + headbutt: ["4T"], + heatcrash: ["7L41"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + incinerate: ["7M"], + ironhead: ["7T"], + irondefense: ["7L37", "4T", "4L42"], + irontail: ["7T", "4M"], + lavaplume: ["7L50", "4L54"], + leechseed: ["7L10", "4L13"], + lightscreen: ["7M", "4M"], + lowkick: ["7T", "4T"], + mimic: ["4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M"], + overheat: ["7M", "4M"], + petalblizzard: ["7E"], + petaldance: ["7L55", "4L36"], + protect: ["7M", "4M"], + psybeam: ["7E", "4E"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + revenge: ["7E", "4E"], + roar: ["7M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandtomb: ["7E", "4E"], + secretpower: ["7M", "4M"], + seedbomb: ["7L23", "4T"], + sleeptalk: ["7M", "4M"], + snore: ["4T"], + solarbeam: ["7M", "4M"], + stealthrock: ["7T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + sweetscent: ["7L1", "4L1"], + swordsdance: ["7M", "4M"], + synthesis: ["7L14", "4T", "4L48"], + toxic: ["7M", "4M"], + watersport: ["7E", "4E"], + wildcharge: ["7M"], + willowisp: ["7M", "4M"], + woodhammer: ["7L1", "4L1"], + worryseed: ["7T", "4T"], + zapcannon: ["7L64", "4L60"], + zenheadbutt: ["7T"], + }}, + fidgit: {learnset: { + acrobatics: ["7M"], + afteryou: ["7T"], + aerialace: ["7M", "4M"], + attract: ["7M", "4M"], + block: ["7T", "4T"], + bodyslam: ["7L30", "4T", "4L30"], + brutalswing: ["7M"], + bulldoze: ["7M"], + captivate: ["4M"], + cometpunch: ["7L1", "4L1"], + confide: ["7M"], + copycat: ["7L19", "4L19"], + dig: ["7M"], + disable: ["7E", "4E"], + doubleedge: ["7E", "4T"], + doubleteam: ["7M", "4M"], + drillrun: ["7L1"], + earthpower: ["7L60", "4T", "4L59"], + earthquake: ["7M", "4M"], + encore: ["7L5", "4L5"], + endure: ["4M"], + entrainment: ["7E"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + followme: ["7E", "4E"], + frustration: ["7M", "4M"], + gastroacid: ["7T", "4T"], + gigaimpact: ["7M", "4M"], + gravity: ["7L47", "4T", "4L49"], + gust: ["7L1", "4L1"], + healblock: ["7L54", "4L53"], + helpinghand: ["7L1", "4T", "4L1"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icywind: ["7T", "4T"], + knockoff: ["7L14", "4T", "4L14"], + lightscreen: ["7M", "4M"], + luckychant: ["7L65", "4L67"], + magicroom: ["7T"], + mefirst: ["7E", "4E"], + metronome: ["7E", "4T", "4E"], + mimic: ["7E", "4T", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonjab: ["7M", "4M"], + protect: ["7M", "4M"], + psychup: ["7M", "4M"], + raindance: ["7M", "4M"], + rapidspin: ["7L9", "4L9"], + reflect: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + roleplay: ["7T"], + rototiller: ["7L1"], + round: ["7M"], + safeguard: ["7M", "4M"], + sandstorm: ["7M", "4M"], + sandtomb: ["7E", "4E"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + skillswap: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + sludgebomb: ["7M", "7L35", "4M", "4L35"], + sludgewave: ["7M"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E", "4E"], + stealthrock: ["7T", "4M"], + stoneedge: ["7M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + swift: ["4T"], + tailwind: ["7L1", "4T", "4L1"], + taunt: ["7M", "4M"], + thief: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + toxicspikes: ["7L41", "4L41"], + trickroom: ["7M", "4M"], + twister: ["4T"], + uturn: ["7M", "4M"], + venoshock: ["7M"], + whirlwind: ["7L25", "4L25"], + wideguard: ["7L1"], + wish: ["7E", "4E"], + wonderroom: ["7T"], + }}, + stratagem: {learnset: { + accelerock: ["7L21"], + acupressure: ["7L26", "4L20"], + aerialace: ["7M", "4M"], + ancientpower: ["7L30", "4T"], + bulldoze: ["7M"], + calmmind: ["7M", "4M"], + confide: ["7M"], + cut: ["4M"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1", "4L1"], + disable: ["7L17", "4L17"], + doubleedge: ["7L43", "4L32"], + doubleteam: ["7M", "4M"], + earthpower: ["7L47", "4T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + energyball: ["7M", "4M"], + explosion: ["7M", "4M"], + facade: ["7M", "4M"], + falseswipe: ["7M", "4M"], + fireblast: ["7M", "4M"], + flamethrower: ["7M", "4M"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigadrain: ["7T", "4M"], + gigaimpact: ["7M", "4M"], + headbutt: ["4T"], + headsmash: ["7L69", "4L50"], + heatwave: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + incinerate: ["7M"], + laserfocus: ["7L1"], + lockon: ["7L65"], + metalsound: ["7L52", "4L37"], + mudshot: ["7L34", "4L25"], + mudslap: ["7L8", "4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + paleowave: ["7L1", "4L42"], + powergem: ["7L39", "4L29"], + protect: ["7M", "4M"], + quickguard: ["7L1"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + rockblast: ["7L13", "4L15"], + rockclimb: ["4M"], + rockpolish: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "4M"], + rollout: ["7L4", "4T", "4L1"], + round: ["7M"], + sandstorm: ["7M", "4M"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + smackdown: ["7M"], + smartstrike: ["7M"], + snore: ["7T", "4T"], + speedswap: ["7L56"], + stealthrock: ["7T", "4M"], + stoneedge: ["7M", "4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + swagger: ["7M"], + swift: ["4T"], + tackle: ["7L1", "4L1"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + vacuumwave: ["7L60", "4T"], + weatherball: ["7L1", "4L1"], + zenheadbutt: ["7T"], + }}, + arghonaut: {learnset: { + aquajet: ["7L19", "4L27"], + armthrust: ["7L14", "4L21"], + attract: ["7M", "4M"], + blizzard: ["7M", "4M"], + brickbreak: ["7M", "4M"], + brine: ["4M"], + bubble: ["7L1", "4L1"], + bulkup: ["7M", "7E", "4E"], + bulldoze: ["7M"], + captivate: ["4M"], + chipaway: ["7L30"], + circlethrow: ["7L1"], + closecombat: ["7E"], + confide: ["7M"], + crosschop: ["7M", "4E"], + cut: ["4M"], + dive: ["4T"], + doubleteam: ["7M", "4M"], + drainpunch: ["4M"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focuspunch: ["7L73", "4M", "4L67"], + foulplay: ["7T"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + gunkshot: ["7T", "4T"], + hail: ["7M", "4M"], + headbutt: ["7E", "4T", "4E"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + icywind: ["7T", "4T"], + knockoff: ["7T", "4T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + machpunch: ["7L35", "4L32"], + mudslap: ["4T"], + naturalgift: ["4M"], + octazooka: ["7E", "4E"], + poisonjab: ["7M"], + poweruppunch: ["7M"], + protect: ["7M", "4M"], + punishment: ["7L67", "4L60"], + raindance: ["7M", "4M"], + recover: ["7E", "4E"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L46", "4L41"], + roar: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["4M"], + rocktomb: ["7M", "4M"], + round: ["7M"], + scald: ["7M", "7L40"], + scaryface: ["7E", "4E"], + secretpower: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + sludgebomb: ["7M", "4M"], + smokescreen: ["7L7", "4L7"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spikes: ["7E"], + stoneedge: ["7M", "4M"], + strength: ["4M"], + submission: ["7L56", "4L55"], + substitute: ["7M", "4M"], + superpower: ["7T", "4T"], + surf: ["7M", "4M"], + swagger: ["7M", "4M"], + taunt: ["7M", "7L24", "4M", "4L36"], + thief: ["7M", "7L51", "4M", "4L47"], + thunderpunch: ["7T", "4T"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + vacuumwave: ["4T"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + whirlpool: ["4M"], + wideguard: ["7L62"], + workup: ["7M"], + wrap: ["7L1", "4L1"], + yawn: ["7L10", "4L1"], + }}, + kitsunoh: {learnset: { + attract: ["7M", "4M"], + bulldoze: ["7M"], + bulletpunch: ["7L1"], + captivate: ["4M"], + confide: ["7M"], + copycat: ["7L22", "4L22"], + curse: ["7E", "4E"], + cut: ["7M", "4M"], + darkpulse: ["7M", "4M"], + defog: ["7E", "4M"], + dig: ["7M", "4M"], + doubleteam: ["7M", "4M"], + dreameater: ["7M", "4M"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + endeavor: ["7T", "4T"], + facade: ["7M", "4M"], + fakeout: ["7L27", "4L35"], + falseswipe: ["7M", "4M"], + featherdance: ["7E", "4E"], + feintattack: ["7L14", "4L14"], + flail: ["7E", "4E"], + flash: ["7M", "4M"], + flashcannon: ["7M", "4M"], + fling: ["7M", "4M"], + foulplay: ["7M"], + frustration: ["7M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "4M"], + hex: ["7E"], + honeclaws: ["7L31"], + hyperbeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + icywind: ["7T", "4T"], + irondefense: ["7T", "4T"], + ironhead: ["7L43", "4T"], + irontail: ["7E", "4M"], + knockoff: ["7T", "4T"], + lastresort: ["7T", "4T"], + lick: ["7L6", "4L6"], + lowkick: ["7T", "4T"], + magiccoat: ["7T", "4T"], + memento: ["7L52", "4L31"], + metalclaw: ["7L1", "4L27"], + metalsound: ["7E", "4E"], + meteormash: ["7E", "4E"], + naturalgift: ["4M"], + odorsleuth: ["7L10", "4L10"], + ominouswind: ["4T"], + painsplit: ["7T", "4T"], + payback: ["7M", "4M"], + perishsong: ["7L56", "4L55"], + playrough: ["7E"], + protect: ["7M", "4M"], + psychoshift: ["7E", "4E"], + psychup: ["7M", "4M"], + raindance: ["7M", "4M"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L39", "4L44"], + roar: ["7M", "4M"], + round: ["7M"], + safeguard: ["7M", "4M"], + scratch: ["7L1", "4L1"], + secretpower: ["7M", "4M"], + shadowball: ["7M", "4M"], + shadowclaw: ["7M", "7L35", "4M", "4L40"], + shadowsneak: ["7L18", "4L18"], + shadowstrike: ["7L48", "4L49"], + sleeptalk: ["7M", "4M"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spite: ["7T", "4T"], + substitute: ["7M", "4M"], + suckerpunch: ["7E", "4T"], + sunnyday: ["7M", "4M"], + superfang: ["7T", "4T"], + superpower: ["7T", "4T"], + swagger: ["7M", "4M"], + tailwhip: ["7L1", "4L1"], + taunt: ["7M", "4M"], + telekinesis: ["7M"], + thief: ["7M", "4M"], + thunderpunch: ["7T", "4T"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + trick: ["7T", "4T"], + trickroom: ["7M", "4M"], + uturn: ["7M", "4M"], + willowisp: ["7M", "4M"], + wish: ["7E"], + yawn: ["7E", "4E"], + }}, + cyclohm: {learnset: { + aerialace: ["7M", "4M"], + aquatail: ["7T"], + attract: ["7M", "4M"], + bide: ["7L1", "4L1"], + blizzard: ["7M", "4M"], + bulldoze: ["7M"], + captivate: ["4M"], + charge: ["7L11", "4L11"], + chargebeam: ["7M", "4M"], + confide: ["7M"], + discharge: ["7L33", "4L37"], + doublehit: ["7L20", "4L22"], + doubleteam: ["7M", "4M"], + dracometeor: ["7T", "4T"], + dragonbreath: ["7E", "7L29", "4E"], + dragonclaw: ["7M", "4M"], + dragonpulse: ["7T", "4M"], + dragonrage: ["7L24", "4L7"], + dragontail: ["7M"], + earthquake: ["7M", "4M"], + electricterrain: ["7L1"], + endure: ["4M"], + electroweb: ["7T"], + facade: ["7M", "4M"], + fireblast: ["7M", "4M"], + flamethrower: ["7M", "4M"], + flash: ["4M"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + growl: ["7L1", "4L1"], + hail: ["7M", "4M"], + headbutt: ["4T"], + healbell: ["7E", "4E"], + hiddenpower: ["7M", "4M"], + honeclaws: ["7M"], + hydropump: ["7E", "4E"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icywind: ["7T"], + incinerate: ["7M"], + irontail: ["7T"], + lightscreen: ["7M", "4M"], + mudslap: ["7E", "4T", "4E"], + naturalgift: ["4M"], + naturepower: ["7M"], + outrage: ["4T"], + powdersnow: ["7E"], + powergem: ["7E", "4E"], + protect: ["7M", "4M"], + raindance: ["7M", "7L37", "4M", "4L19"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + roar: ["7M", "4M"], + round: ["7M"], + sandstorm: ["7M", "4M"], + secretpower: ["7M", "4M"], + shockwave: ["7T", "4M"], + signalbeam: ["4T"], + slackoff: ["7L48", "4L42"], + sleeptalk: ["7M", "4M"], + snore: ["4T"], + sonicboom: ["7L16", "4L29"], + strength: ["4M"], + substitute: ["7M", "4M"], + sunnyday: ["7M", "4M"], + surf: ["7M", "4M"], + swagger: ["7M"], + swift: ["4T"], + tackle: ["7L1", "4L1"], + thrash: ["7L53", "4L50"], + thunder: ["7M", "7L65", "4M"], + thunderbolt: ["7M", "4M"], + thundershock: ["7L11", "4L15"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + triattack: ["7L1", "4L33"], + trickroom: ["7M", "4M"], + twister: ["7L7", "4T"], + voltswitch: ["7M"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + weatherball: ["7L42"], + whirlwind: ["7L1", "4L1"], + wildcharge: ["7M"], + zapcannon: ["7L59", "4L59"], + }}, + colossoil: {learnset: { + ancientpower: ["4T"], + aquatail: ["7T", "4T"], + attract: ["7M", "4M"], + bite: ["5L10", "4L11"], + block: ["7T"], + bodyslam: ["7L42", "4T", "4L22"], + bounce: ["7L48", "4T", "4L35"], + brickbreak: ["7M", "4M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + captivate: ["4M"], + chipaway: ["7E"], + confide: ["7M"], + crunch: ["7L58", "4L55"], + darkpulse: ["7M", "4M"], + dig: ["4M"], + dive: ["4T"], + doubleedge: ["7E", "4T", "4E"], + doubleteam: ["7M", "4M"], + drillrun: ["7L1"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + embargo: ["7M", "4M"], + encore: ["7E", "4E"], + endure: ["4M"], + facade: ["7M", "4M"], + fakeout: ["7E", "4E"], + firefang: ["7E", "4E"], + fissure: ["7E", "4E"], + flail: ["7E", "4E"], + foulplay: ["7T"], + frustration: ["7M", "4M"], + furyattack: ["7L26"], + gigaimpact: ["7M", "4M"], + hiddenpower: ["7M", "4M"], + highhorsepower: ["7L1"], + hornattack: ["7L5", "4L6"], + horndrill: ["7L74", "7E", "4L70", "4E"], + hyperbeam: ["7M", "4M"], + irontail: ["7T", "4M"], + knockoff: ["7T", "4T"], + leer: ["7L1", "4L1"], + magnitude: ["7L32", "4L42"], + megahorn: ["7L64", "4L63"], + mimic: ["7E", "4T"], + mudslap: ["7L16", "4T"], + naturalgift: ["4M"], + payback: ["7M", "4M"], + peck: ["7L1", "4L1"], + protect: ["7M", "4M"], + pursuit: ["7L37", "4L29"], + raindance: ["7M", "4M"], + rapidspin: ["7L21", "4L17"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + roar: ["7M", "4M"], + rockslide: ["7M", "4M"], + rocksmash: ["7M", "4M"], + rocktomb: ["7M"], + rollout: ["4T"], + round: ["7M"], + sandstorm: ["7M", "4M"], + sandtomb: ["7E", "4E"], + screech: ["7E", "4E"], + secretpower: ["7M", "4M"], + sleeptalk: ["7M", "4M"], + smartstrike: ["7M"], + snarl: ["7M"], + snatch: ["7M", "4M"], + snore: ["7T", "4T"], + spitup: ["7L53", "4L48"], + stockpile: ["7L53", "4L48"], + stoneedge: ["7M", "4M"], + strength: ["4M"], + substitute: ["7M", "4M"], + suckerpunch: ["7E", "4T", "4E"], + sunnyday: ["7M", "4M"], + superpower: ["7T", "4T"], + swagger: ["7M", "4M"], + swallow: ["7L53", "4L48"], + taunt: ["7M", "4M"], + thunderfang: ["7E", "4E"], + torment: ["7M"], + toxic: ["7M", "4M"], + uturn: ["7M", "4M"], + wideguard: ["7E"], + }}, + krilowatt: {learnset: { + aquatail: ["7L1"], + attract: ["7M", "4M"], + blizzard: ["7M", "4M"], + bubble: ["7L1", "4L1"], + bubblebeam: ["7L28", "4L28"], + bulldoze: ["7M"], + captivate: ["4M"], + charge: ["7L1", "4L1"], + confide: ["7M"], + confuseray: ["7L11", "4L11"], + copycat: ["7L39", "4L39"], + counter: ["7L33", "7E", "4L33", "4E"], + cut: ["6M", "5M", "4M"], + discharge: ["7M", "7L51", "4L51"], + dive: ["6M", "4T"], + doubleteam: ["7M", "4M"], + earthpower: ["7T", "4T"], + earthquake: ["7M", "4M"], + electroweb: ["7T"], + endure: ["4M"], + entrainment: ["7E"], + facade: ["7M", "4M"], + flash: ["4M"], + fling: ["7M", "4M"], + followme: ["7E", "4E"], + frustration: ["7M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "4M"], + guillotine: ["7L57", "4L57"], + hail: ["7M", "4M"], + heartswap: ["7L53", "4L46"], + helpinghand: ["7T", "4T"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + icebeam: ["7M", "4M"], + icepunch: ["7T", "4T"], + iceshard: ["7L1", "4L1"], + icywind: ["7T", "4T"], + imprison: ["7L17", "4L17"], + irontail: ["7T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + magneticflux: ["7L1"], + mefirst: ["7E", "4E"], + metronome: ["7E", "4E"], + mindreader: ["7E", "4E"], + mirrorcoat: ["7L24", "7E", "4L24", "4E"], + muddywater: ["7L68", "4L68"], + naturalgift: ["4M"], + payback: ["7M", "4M"], + protect: ["7M", "4M"], + raindance: ["7M", "4M"], + recycle: ["7T", "4M"], + rest: ["7M", "4M"], + return: ["7M", "4M"], + round: ["7M"], + scald: ["7M"], + secretpower: ["7T", "4M"], + sheercold: ["7E", "4E"], + shockwave: ["7T", "4M"], + signalbeam: ["7T", "4T"], + sleeptalk: ["7M", "4M"], + snore: ["7T"], + speedswap: ["7E"], + substitute: ["7M", "4M"], + surf: ["7M", "4M"], + swagger: ["7M"], + swift: ["4T"], + thunder: ["7M", "7L63", "4M", "4L63"], + thunderbolt: ["7M", "4M"], + thunderpunch: ["7T", "4T"], + thundershock: ["7L5", "4L5"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + voltswitch: ["7M"], + waterfall: ["7M", "4M"], + waterpulse: ["7T", "4M"], + whirlpool: ["7M", "4M"], + wildcharge: ["7M", "7L53"], + }}, + voodoom: {learnset: { + acupressure: ["7L40", "4L40"], + afteryou: ["7T"], + astonish: ["7L1", "4L1"], + attract: ["7M", "4M"], + aurasphere: ["7L45", "4L45"], + batonpass: ["7E", "4E"], + beatup: ["7L55", "4L55"], + brickbreak: ["7M", "4M"], + bulkup: ["7M", "4M"], + bulldoze: ["7M"], + captivate: ["4M"], + charge: ["7L19", "4L19"], + closecombat: ["7L35", "4L35"], + confide: ["7M"], + copycat: ["7L1", "4L1"], + counter: ["7E", "4T"], + darkpulse: ["7M", "4M"], + doubleteam: ["7M"], + drainpunch: ["7T", "4M"], + dreameater: ["7M", "4M"], + earthquake: ["7M", "4M"], + endure: ["4M"], + facade: ["7M", "4M"], + feintattack: ["7L30", "4L30"], + flashcannon: ["7M"], + fling: ["7M", "4M"], + focusblast: ["7M", "4M"], + focuspunch: ["7T", "4M"], + followme: ["7L20", "4L20"], + foulplay: ["7L61"], + frustration: ["7M", "4M"], + gigaimpact: ["7M", "4M"], + grudge: ["7L15", "4L15"], + hex: ["7L48"], + hiddenpower: ["7M", "4M"], + hyperbeam: ["7M", "4M"], + hypervoice: ["7T"], + icepunch: ["7T", "4T"], + imprison: ["7E", "4E"], + knockoff: ["7T", "4T"], + lowkick: ["7T", "4T"], + lowsweep: ["7M"], + machpunch: ["7E", "4E"], + magiccoat: ["7T", "4T"], + magicroom: ["7T"], + memento: ["7E", "4E"], + metronome: ["7E", "4T"], + mimic: ["4T"], + mudslap: ["4T"], + nastyplot: ["7E"], + naturalgift: ["4M"], + nightmare: ["7E", "4T"], + nightslash: ["7M", "7L1", "4L1"], + painsplit: ["7L1", "4T", "4L1"], + payback: ["7M", "4M"], + perishsong: ["7E", "4E"], + pinmissile: ["7L25", "4L25"], + powertrip: ["7E"], + poweruppunch: ["7M"], + protect: ["7M", "4M"], + psychic: ["7M", "4M"], + pursuit: ["7E", "4E"], + rest: ["7M", "4M"], + retaliate: ["7M"], + return: ["7M", "4M"], + revenge: ["7L1", "4L1"], + rockslide: ["7M", "4M"], + rocksmash: ["7M", "4M"], + round: ["7M"], + screech: ["7E", "4E"], + secretpower: ["7M", "4M"], + shockwave: ["7T", "4M"], + sleeptalk: ["7M", "4M"], + smartstrike: ["7M"], + smellingsalts: ["7E", "4E"], + snarl: ["7M"], + snatch: ["4M"], + snore: ["7T", "4T"], + spite: ["7L1", "4T", "4L1"], + stoneedge: ["7M", "4M"], + strength: ["7M", "4M"], + substitute: ["7M", "7L50", "4M", "4L50"], + sunnyday: ["7M", "4M"], + swagger: ["7M", "4M"], + taunt: ["7M", "4M"], + tearfullook: ["7L22"], + thief: ["7M", "4M"], + thunderbolt: ["7M"], + thunderwave: ["7M", "4M"], + torment: ["7M", "4M"], + toxic: ["7M", "4M"], + uproar: ["7T", "4T"], + vacuumwave: ["4T"], + workup: ["7M"], + wrap: ["7L1", "4L1"], + }}, + syclar: {learnset: { + attract: ["4M"], + avalanche: ["4M"], + blizzard: ["4M"], + bugbite: ["4T"], + bugbuzz: ["4L42"], + captivate: ["4M"], + counter: ["4T"], + cut: ["4M"], + doubleteam: ["4M"], + earthpower: ["4T", "4E"], + endure: ["4M"], + facade: ["4M"], + falseswipe: ["4M"], + fling: ["4M"], + focusenergy: ["4L13"], + frustration: ["4M"], + furyattack: ["4L1"], + furycutter: ["4T"], + hail: ["4M", "4L28"], + hiddenpower: ["4M"], + icebeam: ["4M"], + iceshard: ["4L8"], + icywind: ["4T", "4L18"], + leechlife: ["4L5"], + leer: ["4L1"], + mimic: ["4T"], + naturalgift: ["4M"], + pinmissile: ["4E"], + protect: ["4M"], + rest: ["4M"], + return: ["4M"], + secretpower: ["4M"], + sheercold: ["4L49"], + silverwind: ["4M"], + sleeptalk: ["4M"], + snore: ["4T"], + spikes: ["4E"], + stringshot: ["4T"], + substitute: ["4M"], + superpower: ["4T", "4E"], + swagger: ["4M"], + swordsdance: ["4M"], + tailglow: ["4E"], + taunt: ["4M"], + toxic: ["4M"], + uturn: ["4M"], + waterpulse: ["4M"], + xscissor: ["4M", "4L23"], + }}, + embirch: {learnset: { + aromatherapy: ["4E"], + attract: ["4M"], + block: ["4T"], + bulletseed: ["4M", "4L1"], + counter: ["4T", "4E"], + doubleedge: ["4T", "4L33"], + doubleteam: ["4M"], + dragonbreath: ["4E"], + ember: ["4L9"], + endure: ["4M"], + energyball: ["4M"], + facade: ["4M"], + firespin: ["4L25"], + flamethrower: ["4M"], + flamewheel: ["4L17"], + flash: ["4M"], + frustration: ["4M"], + gigadrain: ["4M", "4L21"], + grassknot: ["4M"], + grasswhistle: ["4E"], + growth: ["4L5"], + headbutt: ["4T"], + heatwave: ["4T"], + hiddenpower: ["4M"], + irondefense: ["4T"], + irontail: ["4M"], + lavaplume: ["4L40"], + leechseed: ["4L13"], + lightscreen: ["4M"], + lowkick: ["4T"], + mimic: ["4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + overheat: ["4M"], + petaldance: ["4L29"], + protect: ["4M"], + psybeam: ["4E"], + rest: ["4M"], + return: ["4M"], + revenge: ["4E"], + roar: ["4M"], + rockclimb: ["4M"], + rockslide: ["4M"], + rocksmash: ["4M"], + rocktomb: ["4M"], + safeguard: ["4M"], + sandtomb: ["4E"], + secretpower: ["4M"], + seedbomb: ["4T"], + sleeptalk: ["4M"], + snore: ["4T"], + solarbeam: ["4M"], + stealthrock: ["4M"], + strength: ["4M"], + substitute: ["4M"], + sunnyday: ["4M"], + swagger: ["4M"], + sweetscent: ["4L1"], + swordsdance: ["4M"], + synthesis: ["4T", "4L37"], + toxic: ["4M"], + watersport: ["4E"], + willowisp: ["4M"], + worryseed: ["4T"], + zapcannon: ["4L44"], + }}, + flarelm: {learnset: { + aromatherapy: ["4E"], + attract: ["4M"], + block: ["4T"], + bulletseed: ["4M", "4L1"], + counter: ["4T", "4E"], + doubleedge: ["4T"], + doubleteam: ["4M"], + dragonbreath: ["4E"], + ember: ["4L9"], + endure: ["4M"], + energyball: ["4M"], + facade: ["4M"], + firespin: ["4L28"], + flamethrower: ["4M"], + flamewheel: ["4L17"], + flash: ["4M"], + frustration: ["4M"], + gigadrain: ["4M", "4L21"], + grassknot: ["4M"], + grasswhistle: ["4E"], + growth: ["4L5"], + headbutt: ["4T"], + heatwave: ["4T"], + hiddenpower: ["4M"], + irondefense: ["4T", "4L40"], + irontail: ["4M"], + lavaplume: ["4L48"], + leechseed: ["4L13"], + lightscreen: ["4M"], + lowkick: ["4T"], + mimic: ["4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + overheat: ["4M"], + petaldance: ["4L36"], + protect: ["4M"], + psybeam: ["4E"], + rest: ["4M"], + return: ["4M"], + revenge: ["4E"], + roar: ["4M"], + rockclimb: ["4M"], + rockslide: ["4M"], + rocksmash: ["4M"], + rocktomb: ["4M"], + safeguard: ["4M"], + sandtomb: ["4E"], + secretpower: ["4M"], + seedbomb: ["4T"], + sleeptalk: ["4M"], + snore: ["4T"], + solarbeam: ["4M"], + stealthrock: ["4M"], + strength: ["4M"], + substitute: ["4M"], + sunnyday: ["4M"], + swagger: ["4M"], + sweetscent: ["4L1"], + swordsdance: ["4M"], + synthesis: ["4T", "4L44"], + toxic: ["4M"], + watersport: ["4E"], + willowisp: ["4M"], + worryseed: ["4T"], + zapcannon: ["4L52"], + }}, + breezi: {learnset: { + aerialace: ["4M", "4L55"], + attract: ["4M"], + block: ["4T"], + bodyslam: ["4T", "4L30"], + captivate: ["4M"], + copycat: ["4L19"], + disable: ["4E"], + doubleedge: ["4T"], + doubleteam: ["4M"], + encore: ["4L5"], + endure: ["4M"], + facade: ["4M"], + fling: ["4M"], + followme: ["4E"], + frustration: ["4M"], + gastroacid: ["4T"], + gust: ["4L1"], + healblock: ["4L50"], + helpinghand: ["4T", "4L1"], + hiddenpower: ["4M"], + icywind: ["4T"], + knockoff: ["4T", "4L14"], + lightscreen: ["4M"], + luckychant: ["4L59"], + mefirst: ["4E"], + metronome: ["4E"], + mimic: ["4T", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonjab: ["4M"], + protect: ["4M"], + psychup: ["4M"], + raindance: ["4M"], + reflect: ["4M"], + rest: ["4M", "4L44"], + return: ["4M"], + safeguard: ["4M", "4L9"], + sandstorm: ["4M"], + sandtomb: ["4E"], + secretpower: ["4M"], + shadowball: ["4M"], + skillswap: ["4M"], + sleeptalk: ["4M"], + sludgebomb: ["4M", "4L34"], + snatch: ["4M"], + snore: ["4T"], + spikes: ["4E"], + substitute: ["4M"], + sunnyday: ["4M"], + swagger: ["4M"], + swift: ["4T"], + tailwind: ["4T", "4L1"], + toxic: ["4M"], + toxicspikes: ["4L39"], + trickroom: ["4M"], + twister: ["4T"], + uturn: ["4M"], + whirlwind: ["4L25"], + wish: ["4E"], + }}, + scratchet: {learnset: { + aerialace: ["5M"], + attract: ["5M"], + batonpass: ["5E"], + brickbreak: ["5M"], + bulkup: ["5M", "5L40"], + bulldoze: ["5M"], + confuseray: ["5E"], + doubleteam: ["5M"], + echoedvoice: ["5M"], + facade: ["5M"], + falseswipe: ["5M"], + flash: ["5M"], + fling: ["5M"], + focusblast: ["5M"], + focusenergy: ["5L13", "5E"], + frustration: ["5M"], + furyswipes: ["5L1"], + grassknot: ["5M"], + harden: ["5L9"], + haze: ["5E"], + hiddenpower: ["5M"], + hypervoice: ["5L36"], + memento: ["5E"], + naturepower: ["5E"], + protect: ["5M"], + quash: ["5M"], + raindance: ["5M"], + rapidspin: ["5E"], + rest: ["5M", "5L53"], + retaliate: ["5M", "5L57"], + return: ["5M"], + roar: ["5M", "5L23"], + rockslide: ["5M"], + rocksmash: ["5M", "5L18"], + rocktomb: ["5M"], + roost: ["5E"], + round: ["5M"], + safeguard: ["5M"], + stealthrock: ["5E"], + strength: ["5M"], + submission: ["5L32"], + substitute: ["5M"], + sunnyday: ["5M"], + superpower: ["5L45"], + swagger: ["5M"], + taunt: ["5M", "5L49"], + thief: ["5M"], + toxic: ["5M"], + workup: ["5M", "5L27"], + yawn: ["5E"], + }}, + necturine: {learnset: { + attract: ["5M"], + calmmind: ["5M"], + curse: ["5E"], + cut: ["5M"], + doubleteam: ["5M"], + dreameater: ["5M"], + energyball: ["5M"], + facade: ["5M"], + flash: ["5M"], + frustration: ["5M"], + futuresight: ["5E"], + gigadrain: ["5E"], + grassknot: ["5M"], + gravity: ["5E"], + hex: ["5L25"], + hiddenpower: ["5M"], + ingrain: ["5E"], + leafblade: ["5E"], + leafstorm: ["5E"], + leer: ["5L1"], + naturalgift: ["5L31", "5E"], + nightmare: ["5E"], + ominouswind: ["5L7"], + painsplit: ["5L37"], + payback: ["5M"], + powerwhip: ["5L50"], + protect: ["5M"], + psychic: ["5M"], + psychup: ["5M"], + rest: ["5M"], + return: ["5M"], + round: ["5M"], + shadowball: ["5M", "5L44"], + shadowsneak: ["5L13"], + sketch: ["5E"], + solarbeam: ["5M"], + substitute: ["5M"], + sunnyday: ["5M"], + swagger: ["5M"], + telekinesis: ["5M"], + thief: ["5M"], + torment: ["5M"], + toxic: ["5M"], + toxicspikes: ["5L19"], + vinewhip: ["5L1"], + willowisp: ["5M", "5L19"], + }}, + cupra: {learnset: { + allyswitch: ["5M"], + ancientpower: ["5L44"], + attract: ["5M"], + bugbite: ["5T", "5L7"], + bugbuzz: ["5E"], + closecombat: ["5E"], + counter: ["5E"], + cut: ["5M"], + disable: ["5E"], + doubleteam: ["5M"], + dreameater: ["5M"], + echoedvoice: ["5M"], + electroweb: ["5T"], + facade: ["5M"], + feint: ["5E"], + finalgambit: ["5L38"], + flash: ["5M"], + fling: ["5M"], + frustration: ["5M"], + hail: ["5M"], + healpulse: ["5L21"], + helpinghand: ["5T"], + hiddenpower: ["5M"], + hydropump: ["5E"], + lightscreen: ["5M"], + magiccoat: ["5T"], + magicroom: ["5T"], + megahorn: ["5E"], + protect: ["5M"], + psychic: ["5M"], + psychup: ["5M"], + psyshock: ["5M"], + raindance: ["5M"], + recycle: ["5T"], + reflect: ["5M"], + rest: ["5M"], + retaliate: ["5M"], + return: ["5M"], + roleplay: ["5T"], + round: ["5M"], + safeguard: ["5M", "5E"], + shadowball: ["5M"], + skillswap: ["5T"], + stringshot: ["5L1"], + strugglebug: ["5M", "5L27"], + substitute: ["5M"], + sunnyday: ["5M", "5L14"], + swagger: ["5M"], + tackle: ["5L1"], + telekinesis: ["5M"], + toxic: ["5M"], + trick: ["5T"], + willowisp: ["5M", "5L32"], + wingattack: ["5E"], + wish: ["5L48"], + wonderroom: ["5T"], + xscissor: ["5M"], + zenheadbutt: ["5T", "5L54"], + }}, + argalis: {learnset: { + allyswitch: ["5M"], + ancientpower: ["5L47"], + attract: ["5M"], + bugbite: ["5L7"], + bugbuzz: ["5E"], + closecombat: ["5E"], + counter: ["5E"], + cut: ["5M"], + disable: ["5E"], + doubleteam: ["5M"], + dreameater: ["5M"], + echoedvoice: ["5M"], + electroweb: ["5T"], + facade: ["5M"], + feint: ["5E"], + finalgambit: ["5L41"], + flash: ["5M"], + fling: ["5M"], + focusblast: ["5M"], + frustration: ["5M"], + hail: ["5M"], + healpulse: ["5L21"], + helpinghand: ["5T"], + hiddenpower: ["5M"], + hydropump: ["5E"], + icebeam: ["5M"], + icywind: ["5T"], + lightscreen: ["5L57"], + magiccoat: ["5T"], + magicroom: ["5T"], + megahorn: ["5E"], + ominouswind: ["5L27"], + protect: ["5M"], + psychic: ["5M", "5L62"], + psychup: ["5M"], + psyshock: ["5M"], + raindance: ["5M"], + recycle: ["5T"], + reflect: ["5L57"], + rest: ["5M"], + retaliate: ["5M"], + return: ["5M"], + roleplay: ["5T"], + round: ["5M"], + safeguard: ["5M", "5E"], + shadowball: ["5M"], + skillswap: ["5T"], + stringshot: ["5L1"], + strugglebug: ["5M"], + substitute: ["5M"], + sunnyday: ["5L14"], + swagger: ["5M"], + tackle: ["5L1"], + telekinesis: ["5M"], + thunderbolt: ["5M"], + toxic: ["5M"], + trick: ["5T"], + willowisp: ["5L34"], + wingattack: ["5E"], + wish: ["5L52"], + wonderroom: ["5T"], + xscissor: ["5M"], + zenheadbutt: ["5T"], + }}, + brattler: {learnset: { + aromatherapy: ["5E"], + attract: ["5M"], + beatup: ["5E"], + bind: ["5T"], + crunch: ["5L39"], + cut: ["5M"], + darkpulse: ["5T"], + doubleteam: ["5M"], + dragontail: ["5M"], + energyball: ["5M"], + facade: ["5M"], + foulplay: ["5T"], + frustration: ["5M"], + gigadrain: ["5T"], + glare: ["5E"], + grassknot: ["5L18"], + haze: ["5E"], + healbell: ["5T"], + hiddenpower: ["5M"], + irontail: ["5T"], + knockoff: ["5T"], + leafblade: ["5L34"], + nightslash: ["5E"], + payback: ["5M"], + poisonpowder: ["5E"], + powerwhip: ["5L50"], + protect: ["5M"], + punishment: ["5L55"], + pursuit: ["5L6", "5L1"], + rest: ["5M"], + retaliate: ["5M"], + return: ["5M"], + roar: ["5M"], + round: ["5M"], + scaryface: ["5E"], + screech: ["5E"], + seedbomb: ["5T"], + slam: ["5L30"], + sleeptalk: ["5T"], + snarl: ["5M"], + snore: ["5T"], + solarbeam: ["5M"], + spite: ["5T"], + strength: ["5M"], + stunspore: ["5E"], + substitute: ["5M"], + suckerpunch: ["5L25"], + sunnyday: ["5M"], + swagger: ["5M"], + sweetscent: ["5E"], + synthesis: ["5T"], + taunt: ["5M"], + thief: ["5M"], + toxic: ["5M"], + uturn: ["5M"], + vinewhip: ["5L1"], + wildcharge: ["5M"], + worryseed: ["5T"], + wrap: ["5L12", "5L1"], + wringout: ["5L44"], + }}, + cawdet: {learnset: { + acrobatics: ["5M"], + aerialace: ["5M"], + airslash: ["5E"], + attract: ["5M"], + bellydrum: ["5L34"], + block: ["5T"], + brickbreak: ["5M"], + brine: ["5L42"], + bulletpunch: ["5L38"], + detect: ["5L26"], + doubleteam: ["5M"], + drainpunch: ["5T"], + drillpeck: ["5E"], + endeavor: ["5T"], + facade: ["5M"], + flashcannon: ["5M", "5L49"], + fly: ["5M"], + frustration: ["5M"], + growl: ["5L5"], + hiddenpower: ["5M"], + hurricane: ["5L53"], + ironhead: ["5T"], + knockoff: ["5T"], + leer: ["5L0"], + metalclaw: ["5L13"], + metalsound: ["5E"], + mirrormove: ["5E"], + peck: ["5L0"], + pluck: ["5M"], + protect: ["5M"], + pursuit: ["5E"], + psychup: ["5M"], + quickattack: ["5E"], + quickguard: ["5E"], + raindance: ["5M"], + razorwind: ["5E"], + rest: ["5M"], + retaliate: ["5M"], + return: ["5M"], + rocksmash: ["5M"], + round: ["5M"], + screech: ["5L18"], + skyattack: ["5T"], + skydrop: ["5M"], + sleeptalk: ["5T"], + smackdown: ["5M"], + snatch: ["5T"], + snore: ["5T"], + steelwing: ["5L31"], + strength: ["5M"], + substitute: ["5M"], + surf: ["5M"], + swagger: ["5M"], + swift: ["5L9"], + tailwind: ["5T", "5L45"], + toxic: ["5M"], + watersport: ["5E"], + wingattack: ["5L22"], + }}, + volkritter: {learnset: { + aquaring: ["6L44"], + assurance: ["6E"], + attract: ["6M"], + bite: ["6L1"], + captivate: ["6E"], + confide: ["6M"], + constrict: ["6L1"], + destinybond: ["6L32"], + dive: ["6L36"], + doubleteam: ["6M"], + facade: ["6M"], + falseswipe: ["6M"], + fireblast: ["6M"], + firespin: ["6L18"], + flameburst: ["6L23"], + flamethrower: ["6M"], + flash: ["6M", "6L1"], + flashcannon: ["6M"], + fling: ["6M"], + frustration: ["6M"], + heatwave: ["6L48"], + hiddenpower: ["6M"], + hydropump: ["6L51"], + incinerate: ["6M"], + leechlife: ["6L1"], + memento: ["6L59"], + overheat: ["6M"], + payback: ["6M"], + powergem: ["6L39"], + protect: ["6M"], + quash: ["6M"], + raindance: ["6M"], + reflect: ["6M", "6L4"], + rest: ["6M"], + return: ["6M"], + round: ["6M"], + scald: ["6M", "6L28"], + scaryface: ["6E"], + sleeptalk: ["6M"], + substitute: ["6M"], + sunnyday: ["6M"], + surf: ["6M"], + swagger: ["6M"], + thief: ["6M"], + tickle: ["6E"], + torment: ["6M"], + toxic: ["6M"], + uturn: ["6M"], + waterfall: ["6M"], + watergun: ["6L1"], + waterpulse: ["6E"], + whirlpool: ["6L14"], + willowisp: ["6M"], + }}, + snugglow: {learnset: { + acid: ["6L12"], + aquatail: ["6L32"], + attract: ["6M"], + clearsmog: ["6L22"], + confide: ["6M"], + cut: ["6M"], + dazzlinggleam: ["6M"], + discharge: ["6L42"], + doubleteam: ["6M"], + eerieimpulse: ["6L49"], + encore: ["6L16"], + facade: ["6M"], + flashcannon: ["6M"], + frustration: ["6M"], + haze: ["6E"], + hiddenpower: ["6M"], + iondeluge: ["6L26"], + paraboliccharge: ["6L36"], + poisonsting: ["6L6"], + poisontail: ["6L29"], + protect: ["6M"], + psychic: ["6M"], + psyshock: ["6M"], + psywave: ["6L39"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + round: ["6M"], + shockwave: ["6E"], + signalbeam: ["6E"], + sleeptalk: ["6M"], + sludgebomb: ["6M"], + sludgewave: ["6M"], + splash: ["6E"], + substitute: ["6M"], + supersonic: ["6L1"], + swagger: ["6M"], + taunt: ["6M"], + thunder: ["6M", "6L46"], + thunderbolt: ["6M"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L19"], + toxic: ["6M"], + venoshock: ["6M"], + waterpulse: ["6E"], + wideguard: ["6E"], + wildcharge: ["6M"], + }}, + floatoy: {learnset: { + attract: ["6M"], + bite: ["6E"], + blizzard: ["6M"], + brine: ["6L38"], + bubblebeam: ["6L23"], + calmmind: ["6M"], + confide: ["6M"], + dive: ["6M"], + doubleteam: ["6M"], + dragonbreath: ["6L1"], + dragonclaw: ["6M"], + dragondance: ["6E"], + dragonpulse: ["6T"], + drillpeck: ["6L27"], + echoedvoice: ["6M"], + facade: ["6M"], + featherdance: ["6E"], + feint: ["6E"], + frustration: ["6M"], + gust: ["6L1"], + hail: ["6M"], + haze: ["6E"], + hiddenpower: ["6M"], + hydropump: ["6L50"], + icebeam: ["6M"], + icefang: ["6E"], + icepunch: ["6T"], + iciclecrash: ["6L42"], + iciclespear: ["6E"], + icywind: ["6T"], + ironhead: ["6T", "6L53"], + irontail: ["6T", "6E"], + metalclaw: ["6L11"], + metronome: ["6E"], + peck: ["6L1"], + protect: ["6M"], + raindance: ["6M"], + refresh: ["6E"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + scald: ["6M"], + scaryface: ["6L1"], + secretpower: ["6M"], + slackoff: ["6L39"], + sleeptalk: ["6M"], + snore: ["6T"], + splash: ["6L1"], + substitute: ["6M"], + surf: ["6M"], + swagger: ["6M"], + taunt: ["6M"], + thunderfang: ["6E"], + toxic: ["6M"], + waterfall: ["6M"], + watergun: ["6L7"], + waterpulse: ["6T", "6E"], + whirlpool: ["6E"], + wideguard: ["6E"], + }}, + caimanoe: {learnset: { + attract: ["6M"], + bite: ["6E"], + blizzard: ["6M"], + brine: ["6L43"], + bubblebeam: ["6L25"], + calmmind: ["6M"], + confide: ["6M"], + dive: ["6M"], + doubleteam: ["6M"], + dragonbreath: ["6L1"], + dragonclaw: ["6M"], + dragondance: ["6E"], + dragonpulse: ["6T"], + drillpeck: ["6L31"], + echoedvoice: ["6M"], + facade: ["6M"], + featherdance: ["6E"], + feint: ["6E"], + flashcannon: ["6M", "6L35"], + frustration: ["6M"], + gust: ["6L1"], + hail: ["6M"], + haze: ["6E"], + hiddenpower: ["6M"], + hydropump: ["6L60"], + icebeam: ["6M"], + icefang: ["6E"], + icepunch: ["6T"], + iciclecrash: ["6L47"], + iciclespear: ["6E"], + icywind: ["6T"], + irondefense: ["6T"], + ironhead: ["6T", "6L58"], + irontail: ["6T", "6E"], + metalclaw: ["6L11"], + metalsound: ["6L21"], + metronome: ["6E"], + peck: ["6L1"], + protect: ["6M"], + raindance: ["6M"], + refresh: ["6E"], + rest: ["6M"], + retaliate: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + scald: ["6M"], + scaryface: ["6L1"], + secretpower: ["6M"], + selfdestruct: ["6L62"], + slackoff: ["6L39"], + sleeptalk: ["6M"], + snore: ["6T"], + splash: ["6L1"], + strength: ["6M"], + substitute: ["6M"], + surf: ["6M"], + swagger: ["6M"], + taunt: ["6M"], + thunderfang: ["6E"], + thunderpunch: ["6T"], + toxic: ["6M"], + waterfall: ["6M"], + watergun: ["6L7"], + waterpulse: ["6T", "6E"], + whirlpool: ["6E"], + wideguard: ["6E"], + }}, + pluffle: {learnset: { + attract: ["6M"], + charm: ["6E"], + confide: ["6L25"], + dazzlinggleam: ["6M"], + doubleteam: ["6M"], + drainingkiss: ["6L13"], + dreameater: ["6M", "6L42"], + encore: ["6L16", "6E"], + energyball: ["6M"], + facade: ["6M"], + fairywind: ["6L5", "6L1"], + featherdance: ["6L1"], + flashcannon: ["6M"], + frustration: ["6M"], + gigadrain: ["6T"], + grassknot: ["6M"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + moonblast: ["6L36"], + nightmare: ["6L42"], + partingshot: ["6L24"], + playrough: ["6L27"], + protect: ["6M"], + psychup: ["6M"], + quickguard: ["6E"], + rest: ["6M", "6L31"], + retaliate: ["6M"], + return: ["6M"], + round: ["6M"], + scaryface: ["6L20"], + scratch: ["6L1"], + sleeptalk: ["6M"], + sludgebomb: ["6M"], + sludgewave: ["6M"], + snarl: ["6M"], + snore: ["6T"], + substitute: ["6M"], + sunnyday: ["6M"], + swagger: ["6M"], + taunt: ["6M"], + torment: ["6M"], + toxic: ["6M"], + wakeupslap: ["6L10"], + wideguard: ["6E"], + wish: ["6E"], + yawn: ["6L7"], + }}, + bulbasaur: {learnset: { + amnesia: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + block: ["5S3"], + bodyslam: ["7V", "3T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + celebrate: ["6S5"], + charm: ["7E", "6E", "5E", "4E", "3E"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + doubleedge: ["7L27", "7V", "6L27", "5L27", "4L27", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["5S3"], + flash: ["6M", "5M", "4M", "3M"], + frenzyplant: ["5S3"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + grasswhistle: ["7E", "6E", "5E", "4E", "3E"], + grassyterrain: ["7E", "6E"], + growl: ["7L3", "7V", "6L3", "6S4", "6S5", "5L3", "5S2", "4L3", "3L4", "3S1"], + growth: ["7L25", "7V", "6L25", "5L25", "4L25", "3L32", "3S0"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7E", "6E", "5E", "4E"], + knockoff: ["6T", "5T", "4T"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7V", "6L7", "6S4", "5L7", "5S2", "4L7", "3L7", "3S1"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + magicalleaf: ["7E", "6E", "5E", "4E", "3E"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], + petaldance: ["7E", "6E", "5E", "4E", "3E"], + poisonpowder: ["7L13", "7V", "6L13", "6S4", "5L13", "4L13", "3L15"], + powerwhip: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7L19", "7V", "6L19", "5L19", "4L19", "3L20"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + skullbash: ["7E", "6E", "5E", "4E", "3E"], + sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7E", "6E", "5E", "4E"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3L46", "3S0"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L21", "6L21", "5L21", "4L21", "3L25", "3S0"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L39", "3S0"], + tackle: ["7L1", "7V", "6L1", "6S5", "5L1", "5S2", "4L1", "3L1", "3S1"], + takedown: ["7L15", "7V", "6L15", "5L15", "4L15"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + vinewhip: ["7L9", "7L7", "7V", "6L9", "6S4", "5L9", "5S2", "4L9", "3L10", "3S1"], + weatherball: ["5S3"], + workup: ["7M"], + worryseed: ["7L31", "6T", "6L31", "5T", "5L31", "4T", "4L31"], + }}, + ivysaur: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + bodyslam: ["7V", "3T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + doubleedge: ["7L31", "7V", "6L31", "5L31", "4L31", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + growl: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + growth: ["7L28", "7V", "6L28", "5L28", "4L28", "3L38"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leechseed: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7L20", "7V", "6L20", "5L20", "4L20", "3L22"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L44", "4M", "4L44", "3M", "3L56"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L23", "6L23", "5L23", "4L23", "3L29"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39", "3L47"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L15", "7V", "6L15", "5L15", "4L15"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + vinewhip: ["7L9", "7V", "6L9", "5L9", "4L9", "3L10"], + workup: ["7M"], + worryseed: ["7L36", "6T", "6L36", "5T", "5L36", "4T", "4L36"], + }}, + venusaur: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + doubleedge: ["7L31", "7V", "6L31", "5L31", "4L31", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frenzyplant: ["7T", "6T", "6S0", "5T", "4T", "3T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "6S0", "5T"], + growl: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + growth: ["7L28", "7V", "6L28", "5L28", "4L28", "3L41"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leechseed: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + outrage: ["6T", "5T", "4T"], + petalblizzard: ["7L50", "6L50"], + petaldance: ["7L1", "6L32", "5L32", "4L32"], + poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7L20", "7V", "6L20", "5L20", "4L20", "3L22"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L53", "7V", "6M", "6L53", "6S0", "5M", "5L53", "4M", "4L53", "3M", "3L65"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L23", "6L23", "5L23", "4L23", "3L29"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["7L45", "6T", "6L45", "6S0", "5T", "5L45", "4T", "4L45", "3L53"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L15", "7V", "6L15", "5L15", "4L15"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + vinewhip: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + workup: ["7M"], + worryseed: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39"], + }}, + charmander: {learnset: { + acrobatics: ["5S6"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7E", "6E"], + ancientpower: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E", "4E", "3E"], + bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + bite: ["7E", "6E", "5E", "4E", "3E"], + blastburn: ["5S6"], + block: ["5S6"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + celebrate: ["6S8"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T"], + crunch: ["7E", "6E", "5E", "4E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E", "3E"], + dragonpulse: ["7E", "6T", "6E", "5E"], + dragonrage: ["7L16", "7V", "6L16", "6S7", "5L16", "4L16", "3L43"], + dragonrush: ["7E", "6E", "5E", "4E"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7V", "6L7", "6S7", "5L7", "5S4", "4L7", "3L7", "3S0"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["5S6"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L25", "6L25", "5L25", "4L25"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T", "4T", "3T"], + firespin: ["7L43", "7V", "6L43", "5L43", "4L37", "3L49"], + flameburst: ["7L28", "6L28", "5L28"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L34", "3M", "3L31"], + flareblitz: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + growl: ["7L1", "7V", "6L1", "6S7", "6S8", "5L1", "5S4", "4L1", "3L1", "3S0"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "4S1", "4S2", "4S3", "4S5", "3M"], + honeclaws: ["6M", "5M"], + howl: ["4S1", "4S2", "4S3", "4S5"], + incinerate: ["6M", "5M"], + inferno: ["7L46", "6L46", "5L46"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7V"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metalclaw: ["7E", "6E", "5E", "4E", "3L13"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["7E", "6E", "5T", "5E", "4E", "3E"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["4S1", "4S2", "4S3", "4S5"], + rage: ["7V", "3L19"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "4S1", "4S2", "4S3", "4S5", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L19", "6L19", "5L19", "4L19", "3L25"], + scratch: ["7L1", "7V", "6L1", "6S8", "5L1", "5S4", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skullbash: ["7V"], + slash: ["7L34", "7V", "6L34", "5L34", "4L28", "3L37"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L10", "6L10", "6S7", "5L10", "5S4", "4L10", "3L13"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + takedown: ["7V"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + charmeleon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T"], + dragonrage: ["7L17", "7V", "6L17", "5L17", "4L17", "3L48"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L28", "6L28", "5L28", "4L28"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T", "4T", "3T"], + firespin: ["7L50", "7V", "6L50", "5L50", "4L43", "3L55"], + flameburst: ["7L32", "6L32", "5L32"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L39", "3M", "3L34"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + inferno: ["7L54", "6L54", "5L54"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7V"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metalclaw: ["3L13"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["5T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V", "3L20"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "5L21", "4L21", "3L27"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skullbash: ["7V"], + slash: ["7L39", "7V", "6L39", "5L39", "4L32", "3L41"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L10", "6L10", "5L10", "4L10", "3L13"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + charizard: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + airslash: ["7L1", "6L1", "6S1", "6S2", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blastburn: ["7T", "6T", "6S4", "5T", "4T", "3T"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + defog: ["4M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "7L1", "7S5", "6M", "6L1", "6S2", "5M", "5L1", "4M", "4L1", "3M"], + dragondance: ["7S7"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L17", "7V", "7S5", "7S6", "6L17", "6S2", "5L17", "4L17", "3L54", "3S0"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "7V", "7S7", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L28", "6L28", "6S1", "6S2", "5L28", "4L28"], + firepledge: ["7T", "6T", "6S4", "5T"], + firepunch: ["6T", "5T", "4T", "3T"], + firespin: ["7L56", "7V", "6L56", "5L56", "4L49", "3L64", "3S0"], + fissure: ["7V"], + flameburst: ["7L32", "6L32", "6S1", "5L32"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L47", "7V", "7S6", "6M", "6L47", "5M", "5L47", "4M", "4L42", "3M", "3L34"], + flareblitz: ["7L77", "7L1", "7S5", "7S7", "6L1", "6S4", "5L77", "4L66"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "7V", "7S5", "7S7", "6M", "5M", "4M", "3M"], + focusblast: ["7M", "6M", "6S3", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + heatwave: ["7L71", "7L1", "6T", "6L1", "5T", "5L71", "4T", "4L59", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + holdhands: ["6S3"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + inferno: ["7L62", "6L62", "6S1", "5L62"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7V"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metalclaw: ["3L1"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + overheat: ["7M", "6M", "6S3", "5M", "4M", "3M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V", "3L20"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "6S4", "5L21", "4L21", "3L27"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "7S6", "3T"], + shadowclaw: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + skullbash: ["7V"], + skydrop: ["7M", "6M", "5M"], + slash: ["7L41", "7V", "7S6", "6L41", "5L41", "4L32", "3L44", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L10", "6L1", "5L1", "4L1", "3L1"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "6S3", "5M", "4M"], + steelwing: ["7M", "6M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + wingattack: ["7L1", "6L36", "5L36", "4L36", "3L36", "3S0"], + workup: ["7M"], + }}, + squirtle: {learnset: { + aquajet: ["7E", "6E", "5E", "4E"], + aquaring: ["7E", "6E", "5E", "4E"], + aquatail: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurasphere: ["7E", "6E"], + bide: ["7V"], + bite: ["7L16", "7V", "6L16", "5L16", "4L16", "3L18"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["5S2"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7E", "6E", "5E", "4M"], + bubble: ["7L13", "7V", "6L13", "6S3", "5L7", "5S1", "4L7", "3L7", "3S0"], + bubblebeam: ["7V"], + captivate: ["4M"], + celebrate: ["6S4"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["7E", "6T", "6E"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E"], + falseswipe: ["5S2"], + flail: ["7E", "6E", "5E", "4E", "3E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + followme: ["5S2"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydrocannon: ["5S2"], + hydropump: ["7L40", "7V", "6L40", "5L40", "4L37", "3L47"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L34", "6T", "6L34", "5T", "5L34", "4T", "4L34"], + irontail: ["6T", "5T", "4M", "3M"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], + mist: ["7E", "6E", "5E", "4E", "3E"], + muddywater: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L28"], + rage: ["7V"], + raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L34", "3M", "3L33"], + rapidspin: ["7L19", "6L19", "5L19", "4L19", "3L23"], + reflect: ["7V"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7L31", "7V", "6L31", "5L31", "4L31", "3L40"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "6S4", "5L1", "5S1", "4L1", "3L1", "3S0"], + tailwhip: ["7L4", "7V", "6L4", "6S3", "6S4", "5L4", "5S1", "4L4", "3L4", "3S0"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7V", "6L7", "6S3", "5L13", "4L13", "3L13"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7L25", "6T", "6L25", "5L25", "4M", "4L25", "3M"], + waterspout: ["7E", "6E", "5E", "4E"], + whirlpool: ["4M"], + withdraw: ["7L10", "7V", "6L10", "6S3", "5L10", "5S1", "4L10", "3L10", "3S0"], + workup: ["7M"], + yawn: ["7E", "6E", "5E", "4E", "3E"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + wartortle: {learnset: { + aquatail: ["7L33", "6T", "6L32", "5T", "5L32", "4T", "4L32"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L17", "7V", "6L16", "5L16", "4L16", "3L19"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bubble: ["7L13", "7V", "6L13", "5L1", "4L1", "3L1"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L49", "7V", "6L48", "5L48", "4L44", "3L53"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40"], + irontail: ["6T", "5T", "4M", "3M"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L25", "6M", "6L24", "5M", "5L24", "4M", "4L24", "3M", "3L31"], + rage: ["7V"], + raindance: ["7M", "7L45", "6M", "6L44", "5M", "5L44", "4M", "4L40", "3M", "3L37"], + rapidspin: ["7L21", "6L20", "5L20", "4L20", "3L25"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7L37", "7V", "6L36", "5L36", "4L36", "3L45"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7L1", "7V", "6L1", "5L13", "4L13", "3L13"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7L29", "6T", "6L28", "5L28", "4M", "4L28", "3M"], + whirlpool: ["4M"], + withdraw: ["7L10", "7V", "6L10", "5L10", "4L10", "3L10"], + workup: ["7M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + blastoise: {learnset: { + aquatail: ["7L33", "6T", "6L32", "5T", "5L32", "4T", "4L32"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + bite: ["7L17", "7V", "6L16", "5L16", "4L16", "3L19"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bubble: ["7L13", "7V", "6L13", "5L1", "4L1", "3L1"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + darkpulse: ["7M", "6M"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + flashcannon: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydrocannon: ["7T", "6T", "6S1", "5T", "4T", "3T"], + hydropump: ["7L60", "7V", "6L60", "6S1", "5L60", "4L53", "3L68", "3S0"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L47", "6T", "6L46", "6S1", "5T", "5L46", "4T", "4L46"], + irontail: ["6T", "5T", "4M", "3M"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "7L25", "6M", "6L24", "5M", "5L24", "4M", "4L24", "3M", "3L31", "3S0"], + rage: ["7V"], + raindance: ["7M", "7L54", "6M", "6L53", "5M", "5L53", "4M", "4L46", "3M", "3L42", "3S0"], + rapidspin: ["7L21", "6L20", "5L20", "4L20", "3L25"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7L40", "7V", "6L39", "5L39", "4L39", "3L55", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7L1", "7V", "6L1", "5L13", "4L13", "3L13"], + waterpledge: ["7T", "6T", "6S1", "5T"], + waterpulse: ["7L29", "6T", "6L28", "5L28", "4M", "4L28", "3M"], + whirlpool: ["4M"], + withdraw: ["7L10", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + workup: ["7M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + caterpie: {learnset: { + bugbite: ["7L9", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + electroweb: ["6T", "5T"], + snore: ["6T", "5T", "4T"], + stringshot: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + metapod: {learnset: { + bugbite: ["6T", "5T", "4T"], + electroweb: ["6T", "5T"], + harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + irondefense: ["6T", "5T", "4T"], + stringshot: ["4T"], + }}, + butterfree: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M", "3S0"], + aircutter: ["5D", "4T"], + airslash: ["7L43"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L31", "6L42", "5L42", "4L40"], + captivate: ["7L37", "6L40", "5L40", "4M", "4L36"], + confide: ["7M", "6M"], + confusion: ["7L11", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "7V", "6L16", "5L16", "4L16", "3L28"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + morningsun: ["3S0"], + naturalgift: ["4M"], + nightmare: ["3T"], + ominouswind: ["4T"], + poisonpowder: ["7L13", "7V", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L17", "7V", "6L24", "5L24", "4L24", "3L34"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + psychup: ["7M", "6M", "5M", "4M"], + psywave: ["7V"], + quiverdance: ["7L47", "6L46", "5L46"], + rage: ["7V"], + ragepowder: ["7L35", "6L34", "5L34"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "5D", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L25", "6M", "6L36", "5M", "5L36", "4M", "4L34", "3M", "3L40"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["7L19", "6L28", "5L28", "4M", "4L28", "3L47"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeppowder: ["7L13", "7V", "6L12", "5L12", "4L12", "3L15", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L13", "7V", "6L12", "5L12", "4L12", "3L14"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L23", "7V", "6L18", "5L18", "4L18", "3L18"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["7L41", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + takedown: ["7V"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + whirlwind: ["7L29", "7V", "6L22", "5L22", "4L22", "3L23"], + }}, + weedle: {learnset: { + bugbite: ["7L9", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + electroweb: ["6T", "5T"], + poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + stringshot: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + }}, + kakuna: {learnset: { + bugbite: ["6T", "5T", "4T"], + electroweb: ["6T", "5T"], + harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + irondefense: ["6T", "5T", "4T"], + stringshot: ["4T"], + }}, + beedrill: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L38", "7V", "6L31", "5L31", "4L31", "3L40"], + aircutter: ["5D", "4T"], + assurance: ["7L26", "6L34", "5L34", "4L34"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bide: ["7V"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bugbite: ["6T", "5T", "4T"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + electroweb: ["6T", "5T"], + endeavor: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "3L45"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L44", "6L45"], + flash: ["6M", "5M", "4M"], + focusenergy: ["7L20", "7V", "6L13", "5L13", "4L13", "3L15"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L11", "7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + furycutter: ["5D", "4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L32", "7V", "6L28", "5L28", "4L28", "3L35"], + poisonjab: ["7M", "7L35", "6M", "6L37", "5M", "5L37", "4M", "4L37"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L17", "6L22", "5L22", "4L22", "3L30"], + rage: ["7L14", "7V", "6L19", "5L19", "4L19", "3L25"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + silverwind: ["4M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T", "3S0"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L29", "6L25", "5L25", "4L25"], + twineedle: ["7L1", "7V", "6L16", "5L16", "4L16", "3L20", "3S0"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "7L23", "6M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + pidgey: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L29", "7V", "6L29", "5L29", "4L29", "3L39"], + aircutter: ["7E", "6E", "5E", "4T", "4E", "3E"], + airslash: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bravebird: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["7E", "6E", "5E", "4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7L25", "6L25", "5L25", "4L25", "3L31"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gust: ["7L9", "7V", "6L9", "5L9", "5D", "4L9", "3L9"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L53", "6L53", "5L53"], + mimic: ["7V", "3T"], + mirrormove: ["7L45", "7V", "6L45", "5L45", "4L45", "3L47"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L13", "7V", "6L13", "5L13", "4L13", "3L13"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L37", "6M", "6L37", "5T", "5L37", "4M", "4L37"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7V", "6L5", "5L5", "4L5", "3L5"], + secretpower: ["6M", "5D", "4M", "3M"], + skyattack: ["7V", "6T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "5D", "4M", "4E", "3M", "3E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L21", "6L21", "5L21", "4T", "4L21"], + uproar: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L17", "7V", "6L17", "5L17", "4L17", "3L19"], + wingattack: ["7L33", "7V", "6L33", "5L33", "4L33", "3L25"], + workup: ["7M", "5M"], + }}, + pidgeotto: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L32", "7V", "6L32", "5L32", "4L32", "3L43"], + aircutter: ["4T"], + airslash: ["7L57", "6L57", "5L57", "4L57"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7L27", "6L27", "5L27", "4L27", "3L34", "3S0"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gust: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L62", "6L62", "5L62"], + mimic: ["7V", "3T"], + mirrormove: ["7L52", "7V", "6L52", "5L52", "4L52", "3L52"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L13", "4L13", "3L13"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L42", "6M", "6L42", "5T", "5L42", "4M", "4L42"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7V", "6T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M", "3S0"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7L47", "6T", "6L47", "5T", "5L47", "4T", "4L47"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L22", "6L22", "5L22", "4T", "4L22"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L17", "7V", "6L17", "5L17", "4L17", "3L20"], + wingattack: ["7L37", "7V", "6L37", "5L37", "4L37", "3L27", "3S0"], + workup: ["7M", "5M"], + }}, + pidgeot: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L32", "7V", "6L32", "5L32", "4L32", "3L48"], + aircutter: ["4T"], + airslash: ["7L62", "6L62", "5L62", "4L62"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7L27", "6L27", "5L27", "4L27", "3L34"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L68", "7L1", "6L1", "5L68"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + mimic: ["7V", "3T"], + mirrormove: ["7L56", "7V", "6L56", "5L56", "5S0", "4L56", "3L62"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L44", "6M", "6L44", "5T", "5L44", "4M", "4L44"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7V", "6T", "5T", "5S0", "4T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7L50", "6T", "6L50", "5T", "5L50", "4T", "4L50"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L22", "6L22", "5L22", "4T", "4L22"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L17", "7V", "6L17", "5L17", "5S0", "4L17", "3L20"], + wingattack: ["7L38", "7V", "6L38", "5L38", "5S0", "4L38", "3L27"], + workup: ["7M", "5M"], + }}, + rattata: {learnset: { + assurance: ["7L19", "6L25", "5L25", "4L25"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L10", "7E", "6L10", "6E", "5L10", "5E", "4L10", "4E", "3E"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bubblebeam: ["7V"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + covet: ["6T", "5T"], + crunch: ["7L22", "6L22", "5L22", "4L22"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L31", "7V", "6L31", "5L31", "4L31", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endeavor: ["7L34", "6T", "6L34", "5T", "5L34", "4T", "4L34", "3L41"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + finalgambit: ["7E", "6E", "5E"], + flamewheel: ["7E", "6E", "5E", "4E", "3E"], + focusenergy: ["7L7", "7V", "6L7", "5L7", "4L7", "3L20"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperfang: ["7L16", "7V", "6L16", "5L16", "4L16", "3L13"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "5D", "4M", "3M"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + mefirst: ["7E", "6E", "5E", "5D", "4E"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L13", "6L13", "5L13", "4L13", "3L27"], + quickattack: ["7L4", "7V", "6L4", "5L4", "5D", "4L4", "3L7"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L25", "6L19", "5L19", "4T", "4L19"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["7L28", "7V", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L34"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7V"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + rattataalola: {learnset: { + assurance: ["7L19"], + attract: ["7M"], + bite: ["7L10"], + blizzard: ["7M"], + confide: ["7M"], + counter: ["7E"], + crunch: ["7L22"], + darkpulse: ["7M"], + doubleedge: ["7L31"], + doubleteam: ["7M"], + embargo: ["7M"], + endeavor: ["7L34"], + facade: ["7M"], + finalgambit: ["7E"], + focusenergy: ["7L7"], + frustration: ["7M"], + furyswipes: ["7E"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperfang: ["7L16"], + icebeam: ["7M"], + mefirst: ["7E"], + protect: ["7M"], + pursuit: ["7L13"], + quash: ["7M"], + quickattack: ["7L4"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + revenge: ["7E"], + reversal: ["7E"], + round: ["7M"], + shadowball: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + snarl: ["7M"], + snatch: ["7E"], + stockpile: ["7E"], + substitute: ["7M"], + suckerpunch: ["7L25"], + sunnyday: ["7M"], + superfang: ["7L28"], + swagger: ["7M"], + swallow: ["7E"], + switcheroo: ["7E"], + tackle: ["7L1"], + tailwhip: ["7L1"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], + toxic: ["7M"], + uproar: ["7E"], + uturn: ["7M"], + }}, + raticate: {learnset: { + assurance: ["7L19", "6L29", "5L29", "4L29"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L10", "6L10", "5L10", "4L10"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bubblebeam: ["7V"], + bulkup: ["7M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + crunch: ["7L24", "6L24", "5L24", "4L24"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L39", "7V", "6L39", "5L39", "4L39", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + embargo: ["7M"], + endeavor: ["7L44", "6T", "6L44", "5T", "5L44", "4T", "4L44", "3L50"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hyperfang: ["7L16", "7V", "6L16", "5L16", "4L16", "3L13", "3S0"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L13", "6L13", "5L13", "4L13", "3L30"], + quash: ["7M"], + quickattack: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L1", "6L20", "5L20", "4L20", "3L20", "3S0"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snarl: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L29", "6L19", "5L19", "4T", "4L19"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["7L34", "7V", "6T", "6L34", "5T", "5L34", "4T", "4L34", "3L40", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M"], + watergun: ["7V"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + raticatealola: {learnset: { + assurance: ["7L19"], + attract: ["7M"], + bite: ["7L10"], + blizzard: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + crunch: ["7L24"], + darkpulse: ["7M"], + doubleedge: ["7L39"], + doubleteam: ["7M"], + embargo: ["7M"], + endeavor: ["7L44"], + facade: ["7M"], + focusenergy: ["7L7", "7L1"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + hyperfang: ["7L16"], + icebeam: ["7M"], + protect: ["7M"], + pursuit: ["7L13"], + quash: ["7M"], + quickattack: ["7L4", "7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + round: ["7M"], + scaryface: ["7L1"], + shadowball: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snarl: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L29"], + sunnyday: ["7M"], + superfang: ["7L34"], + swagger: ["7M"], + swordsdance: ["7M", "7L1"], + tackle: ["7L1"], + tailwhip: ["7L1"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + venoshock: ["7M"], + }}, + spearow: {learnset: { + aerialace: ["7M", "7L15", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L25", "3S0"], + agility: ["7L25", "7V", "6L25", "5L25", "4L25", "3L43"], + aircutter: ["4T"], + assurance: ["7L22", "6L29", "5L29", "4L29"], + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bide: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L36", "7V", "6L37", "5L37", "4L37", "3L37"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S0"], + featherdance: ["7E", "6E", "5E", "4E"], + feintattack: ["7E", "6E", "5E", "5D", "4E", "3E"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + focusenergy: ["7L29"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L11", "7V", "6L9", "5L9", "4L9", "3L13"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + leer: ["7L4", "7V", "6L5", "5L5", "4L5", "3L7", "3S0"], + mimic: ["7V", "3T"], + mirrormove: ["7L18", "7V", "6L21", "5L21", "4L21", "3L31"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L8", "6L13", "5L13", "4L13", "3L19"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "7V", "6E", "5E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L32", "6M", "6L33", "5T", "5L33", "4M", "4L33"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7E", "7V", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "5D", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7E", "6E", "5E", "4E", "3E"], + twister: ["4T"], + uproar: ["7E", "6T", "6E", "5T", "5E", "4E"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7E", "7V", "6E", "5E", "4E"], + workup: ["7M", "5M"], + }}, + fearow: {learnset: { + aerialace: ["7M", "7L15", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M"], + agility: ["7L27", "7V", "6L29", "5L29", "4L29", "3L47"], + aircutter: ["4T"], + assurance: ["7L23", "6L35", "5L35", "4L35"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L41", "7V", "6L47", "5L47", "4L47", "3L40"], + drillrun: ["7L45", "7L1", "6T", "6L1", "5T", "5L53"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + focusenergy: ["7L32"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L11", "7V", "6L1", "5L1", "4L1", "3L1"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + leer: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mimic: ["7V", "3T"], + mirrormove: ["7L18", "7V", "6L23", "5L23", "4L23", "3L32"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L8", "7L1", "6L13", "5L13", "4L13", "3L26"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L36", "6M", "6L41", "5T", "5L41", "4M", "4L41"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7V", "6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7V"], + workup: ["7M", "5M"], + }}, + ekans: {learnset: { + acid: ["7L20", "7V", "6L20", "5L20", "4L20", "3L32"], + acidspray: ["7L28", "6L28", "5L28"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E", "5D", "4E", "3E"], + belch: ["7L38", "6L38"], + bide: ["7V"], + bind: ["6T", "5T"], + bite: ["7L9", "7V", "6L9", "5L9", "4L9", "3L13", "3S0"], + bodyslam: ["7V", "3T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + coil: ["7L44", "6L44", "5L44"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T", "5D", "4M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L36", "6T", "6L36", "5T", "5L36", "4T", "4L33"], + gigadrain: ["6T", "5T", "4M", "3M"], + glare: ["7L12", "7V", "6L12", "5L12", "4L12", "3L20"], + gunkshot: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L41"], + haze: ["7L41", "6L41", "5L41", "4L36", "3L44"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + mudbomb: ["7L33", "6L33", "5L33", "4L28"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7E", "6E", "5E", "4E", "3E"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L4", "7V", "6L4", "5L4", "5D", "4L4", "3L8", "3S0", "3S1"], + poisontail: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E", "4E"], + screech: ["7L17", "7V", "6L17", "5L17", "4L17", "3L25"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + skullbash: ["7V"], + slam: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + spitup: ["7L25", "6L25", "5L25", "4L25", "3L37"], + stockpile: ["7L25", "6L25", "5L25", "4L25", "3L37"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L25", "6L25", "5L25", "4L25", "3L37"], + switcheroo: ["7E", "6E", "5E", "4E"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + }}, + arbok: {learnset: { + acid: ["7L20", "7V", "6L20", "5L20", "4L20", "3L38"], + acidspray: ["7L32", "6L32", "5L32"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L48", "6L48"], + bide: ["7V"], + bind: ["6T", "5T"], + bite: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + bodyslam: ["7V", "3T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + coil: ["7L56", "6L56", "5L56"], + confide: ["7M", "6M"], + crunch: ["7L1", "6L22", "5L22", "4L22"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragontail: ["7M", "6M", "5M"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + fissure: ["7V"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L44", "6T", "6L44", "5T", "5L44", "4T", "4L42"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + glare: ["7L12", "7V", "6L12", "5L12", "4L12", "3L20", "3S0"], + gunkshot: ["7L63", "6T", "6L63", "5T", "5L63", "4T", "4L56"], + haze: ["7L51", "6L51", "5L51", "4L48", "3L56"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + infestation: ["7M", "6M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + mudbomb: ["7L39", "6L39", "5L39", "4L34"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L17", "7V", "6L17", "5L17", "4L17", "3L28"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + spitup: ["7L27", "6L27", "5L27", "4L28", "3L46"], + stockpile: ["7L27", "6L27", "5L27", "4L28", "3L46"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L27", "6L27", "5L27", "4L28", "3L46"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + pichu: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bestow: ["7E", "6E", "5E"], + bide: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + captivate: ["4M"], + charge: ["7E", "6E", "5E", "4E", "4S5", "3E"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2", "3S3"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + defensecurl: ["3T"], + disarmingvoice: ["7E", "6E"], + doubleedge: ["3T"], + doubleslap: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + electricterrain: ["7E"], + electroweb: ["6T"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endeavor: ["4S5"], + endure: ["7E", "6E", "5E", "4M", "4S5", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + followme: ["3S3"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M", "4S4"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L13", "6L13", "5L18", "4L18"], + naturalgift: ["4M"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "4S4", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L10", "6L10", "5L13", "4L13", "3L11"], + swift: ["4T", "3T"], + tailwhip: ["7L5", "6L5", "5L5", "4L5", "3L6"], + teeterdance: ["3S2"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "4S4", "3M"], + thunderpunch: ["7E", "6T", "6E", "5E", "4E"], + thundershock: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2", "3S3"], + thunderwave: ["7M", "7L18", "6M", "6L13", "5M", "5L10", "4M", "4L10", "3T", "3L8"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + voltswitch: ["7M", "6M", "5M"], + volttackle: ["6E", "5E", "4E", "4S4", "4S5", "3E"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E", "3S1"], + }}, + pichuspikyeared: {learnset: { + attract: ["4M"], + captivate: ["4M"], + chargebeam: ["4M"], + charm: ["4L1"], + doubleteam: ["4M"], + endure: ["4M"], + facade: ["4M"], + flash: ["4M"], + fling: ["4M"], + frustration: ["4M"], + grassknot: ["4M"], + headbutt: ["4T"], + helpinghand: ["4T", "4S0"], + hiddenpower: ["4M"], + irontail: ["4M"], + lightscreen: ["4M"], + magnetrise: ["4T"], + mudslap: ["4T"], + nastyplot: ["4L18"], + naturalgift: ["4M"], + painsplit: ["4S0"], + protect: ["4M"], + raindance: ["4M"], + rest: ["4M"], + return: ["4M"], + rollout: ["4T"], + secretpower: ["4M"], + shockwave: ["4M"], + signalbeam: ["4T"], + sleeptalk: ["4M"], + snore: ["4T"], + substitute: ["4M"], + swagger: ["4M", "4S0"], + sweetkiss: ["4L13"], + swift: ["4T"], + tailwhip: ["4L5"], + thunder: ["4M"], + thunderbolt: ["4M"], + thundershock: ["4L1"], + thunderwave: ["4M", "4L10"], + toxic: ["4M"], + uproar: ["4T"], + volttackle: ["4S0"], + }}, + pikachu: {learnset: { + agility: ["7L45", "7V", "6L37", "6S41", "5L37", "4L34", "3L33", "3S0", "3S8"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bestow: ["7E", "7S44", "6S42"], + bide: ["7E", "7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "5S26", "4M", "3M"], + captivate: ["4M"], + celebrate: ["7S43", "6S31", "6S41"], + charge: ["7E"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["6S36"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disarmingvoice: ["7E"], + discharge: ["7L34", "6L34", "5L42", "4L37"], + doubleedge: ["7V", "3T"], + doubleslap: ["7E"], + doubleteam: ["7M", "7L23", "7V", "6M", "6L21", "6S32", "5M", "5L21", "4M", "4L18", "4S13", "3M", "3L15"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electricterrain: ["7E"], + electroball: ["7L13", "6L13", "6S32", "6S37", "5L18", "5S23", "5S24", "5S30"], + electroweb: ["6T"], + encore: ["7E", "6S39", "5S23"], + endeavor: ["6S39"], + endure: ["7E", "4M", "3T"], + extremespeed: ["5S26"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6S39"], + feint: ["7L21", "6L21", "5L34", "5S29", "4L29"], + flail: ["7E"], + flash: ["7V", "6M", "6S40", "5M", "4M", "4S13", "3M"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["6S41", "5S24", "5S27", "3S2", "3S4", "3S6"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "5S25", "5S26", "5S27", "4M", "4S13"], + growl: ["7L5", "7V", "7S43", "7S46", "6L5", "6S31", "5L1", "4L1", "3L1", "3S1", "3S2", "3S3", "3S4", "3S5", "3S10"], + happyhour: ["7S45", "7S46", "6S40"], + headbutt: ["5S28", "4T"], + heartstamp: ["6S34"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + holdhands: ["7S44", "7S45", "6S33", "6S34", "6S35", "6S40", "6S42"], + irontail: ["6T", "6S37", "5T", "5S24", "5S30", "4M", "4S21", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["4S18"], + lightscreen: ["7M", "7L53", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L42", "4S11", "3M", "3L50", "3S0", "3S6", "3S7", "3S8"], + luckychant: ["7E"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["7V", "6S32", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nuzzle: ["7L29", "6L23", "6S36", "6S38"], + payday: ["7V"], + playnice: ["7L7", "7S43", "7S44", "7S45", "6L7", "6S31", "6S35", "6S36", "6S38", "6S40", "6S42"], + present: ["7E", "4S12", "4S15", "4S17", "4S18", "4S20", "4S22"], + protect: ["7M", "6M", "5M", "5S27", "4M", "4S14", "4S16", "3M"], + quickattack: ["7L10", "7V", "7S43", "7S46", "6L10", "6S31", "6S32", "6S33", "6S34", "6S37", "5L13", "5S24", "5S25", "5S29", "5S30", "4L13", "4S11", "4S12", "4S15", "4S17", "4S18", "4S20", "4S21", "4S22", "3L11"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "4S19", "3M"], + return: ["7M", "7S44", "6M", "6S42", "5M", "4M", "3M"], + reversal: ["7E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["5S23"], + skullbash: ["7V"], + slam: ["7L37", "7V", "6L26", "5L26", "4L21", "3L20"], + sleeptalk: ["7M", "6M", "5T", "4M", "4S19", "3T"], + snore: ["6T", "5T", "4T", "4S19", "3T"], + spark: ["7L26", "6L26"], + strength: ["6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "6S35", "5M", "4M", "3T"], + surf: ["6S33", "6S41", "4S9", "4S11", "4S14", "4S16", "3S3", "3S5", "3S7"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["6S36"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7L1", "7V", "6L1", "6S38", "5L5", "5S28", "4L5", "4S9", "4S12", "4S15", "4S17", "4S20", "4S22", "3L6", "3S1", "3S2", "3S3", "3S4", "3S10"], + takedown: ["7V"], + teeterdance: ["7S45", "6S38", "5S23"], + thunder: ["7M", "7L58", "7V", "6M", "6L50", "6S35", "5M", "5L50", "5S25", "4M", "4L45", "4S14", "4S16", "3M", "3L41", "3S0", "3S6", "3S7", "3S8"], + thunderbolt: ["7M", "7L42", "7V", "6M", "6L29", "6S33", "6S34", "6S37", "5M", "5L29", "5S26", "5S27", "5S30", "4M", "4L26", "4S11", "4S13", "4S18", "4S21", "3M", "3L26", "3S0", "3S6", "3S7", "3S8"], + thunderpunch: ["7E", "6T", "5T", "4T", "3T"], + thundershock: ["7L1", "7V", "7S46", "6L1", "5L1", "5S28", "4L1", "4S12", "4S15", "4S20", "4S22", "3L1", "3S1", "3S5", "3S10"], + thunderwave: ["7M", "7L18", "7V", "6M", "6L13", "5M", "5L10", "5S28", "4M", "4L10", "4S9", "4S17", "3T", "3L8", "3S1", "3S2", "3S3", "3S4", "3S5", "3S10"], + tickle: ["7E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M", "5S29"], + volttackle: ["7T", "6S39", "5S25", "5S29", "4S9", "4S21"], + wildcharge: ["7M", "7L50", "6M", "6L50", "5M"], + wish: ["7E"], + yawn: ["4S19"], + }}, + pikachucosplay: {learnset: { + agility: ["6L45"], + attract: ["6M"], + brickbreak: ["6M"], + chargebeam: ["6M"], + confide: ["6M"], + covet: ["6T"], + dig: ["6M"], + discharge: ["6L34"], + doubleteam: ["6M", "6L23"], + echoedvoice: ["6M"], + electroball: ["6L13", "6S0"], + electroweb: ["6T"], + facade: ["6M"], + feint: ["6L21"], + flash: ["6M"], + fling: ["6M"], + focuspunch: ["6T"], + frustration: ["6M"], + grassknot: ["6M"], + growl: ["6L5"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + irontail: ["6T"], + knockoff: ["6T"], + lightscreen: ["6M", "6L53"], + magnetrise: ["6T"], + nuzzle: ["6L29"], + playnice: ["6L7"], + protect: ["6M"], + quickattack: ["6L10", "6S0"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + slam: ["6L37"], + sleeptalk: ["6M"], + snore: ["6T"], + spark: ["6L26"], + strength: ["6M"], + substitute: ["6M"], + swagger: ["6M"], + tailwhip: ["6L1"], + thunder: ["6M", "6L58"], + thunderbolt: ["6M", "6L42"], + thunderpunch: ["6T"], + thundershock: ["6L1", "6S0"], + thunderwave: ["6M", "6L18", "6S0"], + toxic: ["6M"], + voltswitch: ["6M"], + wildcharge: ["6M", "6L50"], + }}, + pikachurockstar: {learnset: { + agility: ["6L45"], + attract: ["6M"], + brickbreak: ["6M"], + chargebeam: ["6M"], + confide: ["6M"], + covet: ["6T"], + dig: ["6M"], + discharge: ["6L34"], + doubleteam: ["6M", "6L23"], + echoedvoice: ["6M"], + electroball: ["6L13", "6S0"], + electroweb: ["6T"], + facade: ["6M"], + feint: ["6L21"], + flash: ["6M"], + fling: ["6M"], + focuspunch: ["6T"], + frustration: ["6M"], + grassknot: ["6M"], + growl: ["6L5"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + irontail: ["6T"], + knockoff: ["6T"], + lightscreen: ["6M", "6L53"], + magnetrise: ["6T"], + meteormash: ["6S0"], + nuzzle: ["6L29"], + playnice: ["6L7"], + protect: ["6M"], + quickattack: ["6L10", "6S0"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + slam: ["6L37"], + sleeptalk: ["6M"], + snore: ["6T"], + spark: ["6L26"], + strength: ["6M"], + substitute: ["6M"], + swagger: ["6M"], + tailwhip: ["6L1"], + thunder: ["6M", "6L58"], + thunderbolt: ["6M", "6L42"], + thunderpunch: ["6T"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L18", "6S0"], + toxic: ["6M"], + voltswitch: ["6M"], + wildcharge: ["6M", "6L50"], + }}, + pikachubelle: {learnset: { + agility: ["6L45"], + attract: ["6M"], + brickbreak: ["6M"], + chargebeam: ["6M"], + confide: ["6M"], + covet: ["6T"], + dig: ["6M"], + discharge: ["6L34"], + doubleteam: ["6M", "6L23"], + echoedvoice: ["6M"], + electroball: ["6L13", "6S0"], + electroweb: ["6T"], + facade: ["6M"], + feint: ["6L21"], + flash: ["6M"], + fling: ["6M"], + focuspunch: ["6T"], + frustration: ["6M"], + grassknot: ["6M"], + growl: ["6L5"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + iciclecrash: ["6S0"], + irontail: ["6T"], + knockoff: ["6T"], + lightscreen: ["6M", "6L53"], + magnetrise: ["6T"], + nuzzle: ["6L29"], + playnice: ["6L7"], + protect: ["6M"], + quickattack: ["6L10", "6S0"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + slam: ["6L37"], + sleeptalk: ["6M"], + snore: ["6T"], + spark: ["6L26"], + strength: ["6M"], + substitute: ["6M"], + swagger: ["6M"], + tailwhip: ["6L1"], + thunder: ["6M", "6L58"], + thunderbolt: ["6M", "6L42"], + thunderpunch: ["6T"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L18", "6S0"], + toxic: ["6M"], + voltswitch: ["6M"], + wildcharge: ["6M", "6L50"], + }}, + pikachupopstar: {learnset: { + agility: ["6L45"], + attract: ["6M"], + brickbreak: ["6M"], + chargebeam: ["6M"], + confide: ["6M"], + covet: ["6T"], + dig: ["6M"], + discharge: ["6L34"], + doubleteam: ["6M", "6L23"], + drainingkiss: ["6S0"], + echoedvoice: ["6M"], + electroball: ["6L13", "6S0"], + electroweb: ["6T"], + facade: ["6M"], + feint: ["6L21"], + flash: ["6M"], + fling: ["6M"], + focuspunch: ["6T"], + frustration: ["6M"], + grassknot: ["6M"], + growl: ["6L5"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + irontail: ["6T"], + knockoff: ["6T"], + lightscreen: ["6M", "6L53"], + magnetrise: ["6T"], + nuzzle: ["6L29"], + playnice: ["6L7"], + protect: ["6M"], + quickattack: ["6L10", "6S0"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + slam: ["6L37"], + sleeptalk: ["6M"], + snore: ["6T"], + spark: ["6L26"], + strength: ["6M"], + substitute: ["6M"], + swagger: ["6M"], + tailwhip: ["6L1"], + thunder: ["6M", "6L58"], + thunderbolt: ["6M", "6L42"], + thunderpunch: ["6T"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L18", "6S0"], + toxic: ["6M"], + voltswitch: ["6M"], + wildcharge: ["6M", "6L50"], + }}, + pikachuphd: {learnset: { + agility: ["6L45"], + attract: ["6M"], + brickbreak: ["6M"], + chargebeam: ["6M"], + confide: ["6M"], + covet: ["6T"], + dig: ["6M"], + discharge: ["6L34"], + doubleteam: ["6M", "6L23"], + echoedvoice: ["6M"], + electricterrain: ["6S0"], + electroball: ["6L13", "6S0"], + electroweb: ["6T"], + facade: ["6M"], + feint: ["6L21"], + flash: ["6M"], + fling: ["6M"], + focuspunch: ["6T"], + frustration: ["6M"], + grassknot: ["6M"], + growl: ["6L5"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + irontail: ["6T"], + knockoff: ["6T"], + lightscreen: ["6M", "6L53"], + magnetrise: ["6T"], + nuzzle: ["6L29"], + playnice: ["6L7"], + protect: ["6M"], + quickattack: ["6L10", "6S0"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + slam: ["6L37"], + sleeptalk: ["6M"], + snore: ["6T"], + spark: ["6L26"], + strength: ["6M"], + substitute: ["6M"], + swagger: ["6M"], + tailwhip: ["6L1"], + thunder: ["6M", "6L58"], + thunderbolt: ["6M", "6L42"], + thunderpunch: ["6T"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L18", "6S0"], + toxic: ["6M"], + voltswitch: ["6M"], + wildcharge: ["6M", "6L50"], + }}, + pikachulibre: {learnset: { + agility: ["6L45"], + attract: ["6M"], + brickbreak: ["6M"], + chargebeam: ["6M"], + confide: ["6M"], + covet: ["6T"], + dig: ["6M"], + discharge: ["6L34"], + doubleteam: ["6M", "6L23"], + echoedvoice: ["6M"], + electroball: ["6L13", "6S0"], + electroweb: ["6T"], + facade: ["6M"], + feint: ["6L21"], + flash: ["6M"], + fling: ["6M"], + flyingpress: ["6S0"], + focuspunch: ["6T"], + frustration: ["6M"], + grassknot: ["6M"], + growl: ["6L5"], + helpinghand: ["6T"], + hiddenpower: ["6M"], + irontail: ["6T"], + knockoff: ["6T"], + lightscreen: ["6M", "6L53"], + magnetrise: ["6T"], + nuzzle: ["6L29"], + playnice: ["6L7"], + protect: ["6M"], + quickattack: ["6L10", "6S0"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + rocksmash: ["6M"], + round: ["6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + slam: ["6L37"], + sleeptalk: ["6M"], + snore: ["6T"], + spark: ["6L26"], + strength: ["6M"], + substitute: ["6M"], + swagger: ["6M"], + tailwhip: ["6L1"], + thunder: ["6M", "6L58"], + thunderbolt: ["6M", "6L42"], + thunderpunch: ["6T"], + thundershock: ["6L1"], + thunderwave: ["6M", "6L18", "6S0"], + toxic: ["6M"], + voltswitch: ["6M"], + wildcharge: ["6M", "6L50"], + }}, + pikachuoriginal: {learnset: { + agility: ["7L45", "7S0"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + hiddenpower: ["7M"], + lightscreen: ["7M", "7L53"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + slam: ["7L37"], + sleeptalk: ["7M"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58", "7S0"], + thunderbolt: ["7M", "7L42", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T"], + wildcharge: ["7M", "7L50"], + }}, + pikachuhoenn: {learnset: { + agility: ["7L45"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + hiddenpower: ["7M"], + irontail: ["7S0"], + lightscreen: ["7M", "7L53"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + slam: ["7L37"], + sleeptalk: ["7M"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58", "7S0"], + thunderbolt: ["7M", "7L42", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T"], + wildcharge: ["7M", "7L50"], + }}, + pikachusinnoh: {learnset: { + agility: ["7L45"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + hiddenpower: ["7M"], + irontail: ["7S0"], + lightscreen: ["7M", "7L53"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + slam: ["7L37"], + sleeptalk: ["7M"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58"], + thunderbolt: ["7M", "7L42", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T", "7S0"], + wildcharge: ["7M", "7L50"], + }}, + pikachuunova: {learnset: { + agility: ["7L45"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + hiddenpower: ["7M"], + irontail: ["7S0"], + lightscreen: ["7M", "7L53"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + slam: ["7L37"], + sleeptalk: ["7M"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58"], + thunderbolt: ["7M", "7L42", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T", "7S0"], + wildcharge: ["7M", "7L50"], + }}, + pikachukalos: {learnset: { + agility: ["7L45"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13", "7S0"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + hiddenpower: ["7M"], + irontail: ["7S0"], + lightscreen: ["7M", "7L53"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + slam: ["7L37"], + sleeptalk: ["7M"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58"], + thunderbolt: ["7M", "7L42", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T"], + wildcharge: ["7M", "7L50"], + }}, + pikachualola: {learnset: { + agility: ["7L45"], + attract: ["7M"], + brickbreak: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + discharge: ["7L34"], + doubleteam: ["7M", "7L23"], + echoedvoice: ["7M"], + electroball: ["7L13", "7S0"], + facade: ["7M"], + feint: ["7L21"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + growl: ["7L5"], + hiddenpower: ["7M"], + irontail: ["7S0"], + lightscreen: ["7M", "7L53"], + nuzzle: ["7L29"], + playnice: ["7L7"], + protect: ["7M"], + quickattack: ["7L10", "7S0"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + slam: ["7L37"], + sleeptalk: ["7M"], + spark: ["7L26"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thunder: ["7M", "7L58"], + thunderbolt: ["7M", "7L42", "7S0"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L18"], + toxic: ["7M"], + voltswitch: ["7M"], + volttackle: ["7T"], + wildcharge: ["7M", "7L50"], + }}, + raichu: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electroweb: ["6T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7V"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payday: ["7V"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thundershock: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + raichualola: {learnset: { + attract: ["7M"], + brickbreak: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M"], + protect: ["7M"], + psychic: ["7M", "7L1"], + psyshock: ["7M"], + quickattack: ["7L1"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeptalk: ["7M"], + speedswap: ["7L1"], + substitute: ["7M"], + swagger: ["7M"], + tailwhip: ["7L1"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M", "7L1"], + thundershock: ["7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M"], + }}, + sandshrew: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + covet: ["6T", "5T"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L1", "6L1", "5L3", "4L3", "3T", "3L6", "3S0"], + dig: ["7L30", "7V", "6M", "6L30", "5M", "5L30", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + flail: ["7E", "6E", "5E", "4E", "3E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L11", "6L11", "5L25", "4T", "4L25", "3T"], + furyswipes: ["7L20", "7V", "6L20", "5L19", "4L19", "3L37"], + gyroball: ["7M", "7L34", "6M", "6L34", "5M", "5L33", "4M", "4L33"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + magnitude: ["7L14", "6L14", "5L17"], + metalclaw: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["7V", "3T"], + mudshot: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "4E"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L5", "7V", "6L5", "5L9", "4L9", "3L17", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + rapidspin: ["7L9", "7E", "6L9", "6E", "5L13", "5E", "4L13", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["7E", "6E", "5E", "4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L7", "6L7", "5L21", "4T", "4L21", "3T"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + sandattack: ["7L3", "7V", "6L3", "5L7", "5D", "4L7", "3L11", "3S0"], + sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L37", "4M", "4L37", "3M", "3L53"], + sandtomb: ["7L23", "6L23", "5L27", "4L27", "3L45"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skullbash: ["7V"], + slash: ["7L26", "7V", "6L26", "5L31", "4L31", "3L23"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "5D", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L17", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L30"], + swordsdance: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L38", "4M", "4E", "3T", "3E"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + sandshrewalola: {learnset: { + aerialace: ["7M"], + amnesia: ["7E"], + attract: ["7M"], + auroraveil: ["7M"], + bide: ["7L3", "7S0"], + blizzard: ["7M", "7L46"], + brickbreak: ["7M"], + bulldoze: ["7M"], + chipaway: ["7E"], + confide: ["7M"], + counter: ["7E"], + crushclaw: ["7E"], + curse: ["7E"], + defensecurl: ["7L1"], + doubleteam: ["7M"], + earthquake: ["7M"], + endure: ["7E"], + facade: ["7M"], + flail: ["7E"], + fling: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + furycutter: ["7L11"], + furyswipes: ["7L20"], + gyroball: ["7M", "7L34"], + hail: ["7M", "7L42"], + hiddenpower: ["7M"], + iceball: ["7L7", "7S0"], + iciclecrash: ["7E"], + iciclespear: ["7E"], + irondefense: ["7L23"], + ironhead: ["7L30"], + leechlife: ["7M"], + metalclaw: ["7L14", "7E"], + nightslash: ["7E"], + poisonjab: ["7M"], + powdersnow: ["7L5", "7S0"], + protect: ["7M"], + rapidspin: ["7L9", "7S0"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scratch: ["7L1"], + shadowclaw: ["7M"], + slash: ["7L26"], + sleeptalk: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swift: ["7L17"], + swordsdance: ["7M", "7L38"], + thief: ["7M"], + toxic: ["7M"], + workup: ["7M"], + xscissor: ["7M"], + }}, + sandslash: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + crushclaw: ["7L1", "6L22", "5L22", "4L22"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + dig: ["7L33", "7V", "6M", "6L30", "5M", "5L30", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L53", "7V", "6M", "6L46", "5M", "5L46", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L11", "6L11", "5L28", "4T", "4L28", "3T"], + furyswipes: ["7L20", "7V", "6L20", "5L19", "4L19", "3L42"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "7L38", "6M", "6L34", "5M", "5L45", "4M", "4L45"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + magnitude: ["7L14", "6L14", "5L17"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L5", "7L1", "7V", "6L1", "5L9", "4L9", "3L17"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + rapidspin: ["7L9", "6L9", "5L13", "4L13"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L7", "6L7", "5L21", "4T", "4L21", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandattack: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "7L48", "6M", "6L42", "5M", "5L52", "4M", "4L52", "3M", "3L62"], + sandtomb: ["7L24", "6L23", "5L33", "4L33", "3L52"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skullbash: ["7V"], + slash: ["7L28", "7V", "6L26", "5L40", "4L40", "3L24"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L17", "7V", "6L11", "5L15", "4T", "4L15", "3T", "3L33"], + swordsdance: ["7M", "7L43", "7V", "6M", "6L38", "5M", "5L38", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + sandslashalola: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + auroraveil: ["7M"], + blizzard: ["7M"], + brickbreak: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + defensecurl: ["7L1"], + doubleteam: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + gyroball: ["7M"], + hail: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + iceball: ["7L1"], + iciclecrash: ["7L1"], + iciclespear: ["7L1"], + leechlife: ["7M"], + metalburst: ["7L1"], + metalclaw: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowclaw: ["7M"], + slash: ["7L1"], + sleeptalk: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + thief: ["7M"], + toxic: ["7M"], + workup: ["7M"], + xscissor: ["7M"], + }}, + nidoranf: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + bite: ["7L21", "7V", "6L21", "5L21", "4L21", "3L20"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + captivate: ["7L43", "6L43", "5L43", "4M", "4L43"], + charm: ["7E", "6E", "5E", "4E", "3E"], + chipaway: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crunch: ["7L37", "6L37", "5L37", "4L37", "3L47"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["7V", "3T"], + doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flatter: ["7L33", "6L33", "5L33", "4L33", "3L38"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L19", "7V", "6L19", "5L19", "4L19", "3L30"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + helpinghand: ["7L25", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L23"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poisonfang: ["7L45", "6L45", "5L45", "4L45"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], + poisontail: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7E", "7V", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["5D"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "5D", "4T"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + tailwhip: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], + takedown: ["7E", "7V", "6E", "5E", "4E", "3E"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L31", "6L31", "5L31", "4L31"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["6T", "4M", "3M"], + }}, + nidorina: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L23", "7V", "6L23", "5L23", "4L23", "3L22"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bubblebeam: ["7V"], + captivate: ["7L50", "6L50", "5L50", "4M", "4L50"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L43", "6L43", "5L43", "4L43", "3L53"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flatter: ["7L38", "6L38", "5L38", "4L38", "3L43"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L20", "7V", "6L20", "5L20", "4L20", "3L34"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + helpinghand: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L26"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + horndrill: ["7V"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poisonfang: ["7L58", "6L58", "5L58", "4L58"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L18"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + tailwhip: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L35", "6L35", "5L35", "4L35"], + venoshock: ["7M", "6M", "5M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + }}, + nidoqueen: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L35", "7V", "6L35", "6S0", "5L35", "4L23", "3T", "3L22"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L23", "6L23", "5L23"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doublekick: ["7L1", "7V", "6L1", "6S0", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + drillrun: ["6T"], + dynamicpunch: ["3T"], + earthpower: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + horndrill: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payday: ["7V"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "7V", "6L1", "6S0", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quash: ["7M", "6M", "5M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + superpower: ["7L58", "7L1", "6T", "6L1", "5T", "5L58", "4T", "4L58", "3L43"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + tailwhip: ["7L1", "7V", "6L1", "6S0", "5L1", "4L1", "3L1"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + nidoranm: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + captivate: ["7L43", "6L43", "5L43", "4M", "4L43"], + chipaway: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + confusion: ["7E", "6E", "5E", "4E", "3E"], + counter: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["7V", "3T"], + doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flatter: ["7L33", "6L33", "5L33", "4L33", "3L38"], + focusenergy: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L19", "7V", "6L19", "5L19", "4L19", "3L30"], + headbutt: ["4T"], + headsmash: ["7E", "6E", "5E", "4E"], + helpinghand: ["7L25", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L23"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hornattack: ["7L21", "7V", "6L21", "5L21", "4L21", "3L20"], + horndrill: ["7L45", "7V", "6L45", "5L45", "4L45", "3L47"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + poisonjab: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], + poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], + poisontail: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E", "4T", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "5D", "4T"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + takedown: ["7E", "7V", "6E", "5E", "4E", "3E"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L31", "6L31", "5L31", "4L31"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["6T", "4M", "3M"], + }}, + nidorino: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bubblebeam: ["7V"], + captivate: ["7L50", "6L50", "5L50", "4M", "4L50"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doublekick: ["7L9", "7V", "6L9", "5L9", "4L9", "3L12"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flatter: ["7L38", "6L38", "5L38", "4L38", "3L43"], + focusenergy: ["7L7", "7V", "6L7", "5L7", "4L7", "3L8"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L20", "7V", "6L20", "5L20", "4L20", "3L34"], + headbutt: ["4T"], + helpinghand: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L26"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hornattack: ["7L23", "7V", "6L23", "5L23", "4L23", "3L22"], + horndrill: ["7L58", "7V", "6L58", "5L58", "4L58", "3L53"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], + poisonsting: ["7L13", "7V", "6L13", "5L13", "4L13", "3L18"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L35", "6L35", "5L35", "4L35"], + venoshock: ["7M", "6M", "5M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + }}, + nidoking: {learnset: { + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L23", "6L23", "5L23"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doublekick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + drillrun: ["6T", "5T"], + dynamicpunch: ["3T"], + earthpower: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hornattack: ["7V"], + horndrill: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + megahorn: ["7L58", "7L1", "6L1", "5L58", "4L58", "3L43"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payday: ["7V"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quash: ["7M", "6M", "5M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L35", "7V", "6L35", "5L35", "4L23", "3L22"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + cleffa: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7E", "6E", "5E", "4E", "3E"], + aromatherapy: ["7E", "6E", "5E", "5D", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + captivate: ["4M"], + charm: ["7L1", "6L1", "5L1", "4L1", "3L1"], + confide: ["7M", "6M"], + copycat: ["7L13", "6L13", "5L13", "4L13"], + counter: ["3T"], + covet: ["7E", "6T", "6E", "5T", "5E", "4E"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L4", "6L4", "5L4", "5D", "4L4", "3L4"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E", "4E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + healpulse: ["7E", "6E"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magicalleaf: ["7L16", "6L16", "5L16", "4L16", "3L17"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["7E", "6E", "5E", "4E", "3T", "3E"], + mimic: ["7E", "6E", "5E", "4E", "3T", "3E"], + mistyterrain: ["7E", "6E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + 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"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["7L7", "6L7", "5L7", "4L7", "3L8"], + sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + splash: ["7E", "6E", "5E", "4E", "3E"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L10", "6L10", "5L10", "4L10", "3L13"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + clefairy: {learnset: { + afteryou: ["7L58", "6T", "6L1", "5T", "5L52"], + amnesia: ["7E"], + aromatherapy: ["7E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7E"], + bestow: ["7L19", "6L19", "5L25"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L40", "7V", "6L40", "5L40", "3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cosmicpower: ["7L34", "6L34", "5L28", "4L25", "3L33"], + counter: ["7V", "3T"], + covet: ["7E", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L13", "7V", "6L13", "5L13", "4L13", "3T", "3L25"], + dig: ["6M", "5M", "4M", "3M"], + disarmingvoice: ["7L1", "6L1"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L10", "7V", "6L10", "5L10", "4L10", "3L13"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L1", "6L1", "5L4", "4L4", "3L5"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + followme: ["7L16", "6L16", "5L16", "4L16", "3L17"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7L49", "6T", "6L49", "5T", "5L37", "4T", "4L34"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healingwish: ["7L55", "6L1", "5L49", "4L46"], + healpulse: ["7E"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "7V", "6M", "5M", "5L46", "4M", "4L40", "3M", "3L41"], + luckychant: ["7L37", "6L37", "5L31", "4L28"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + meteormash: ["7L50", "6L50", "5L55", "4L43", "3L45"], + metronome: ["7L31", "7E", "7V", "6L31", "5L34", "4L31", "3T", "3L29"], + mimic: ["7E", "7V", "3T"], + minimize: ["7L25", "7V", "6L25", "5L19", "4L19", "3L21"], + mistyterrain: ["7E"], + moonblast: ["7L46", "6L46"], + moonlight: ["7L43", "6L43", "5L40", "4L37", "3L37"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + present: ["7E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["7L7", "7V", "6L7", "5L7", "4L7", "3L9"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + splash: ["7E"], + spotlight: ["7L1"], + stealthrock: ["6T", "5T", "4M"], + storedpower: ["7L28", "7E", "6L28", "5L43"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + tickle: ["7E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + wakeupslap: ["7L22", "6L22", "5L22", "4L22"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7E"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + clefable: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disarmingvoice: ["7L1", "6L1"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + mimic: ["7V", "3T"], + minimize: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spotlight: ["7L1"], + stealthrock: ["6T", "5T", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + vulpix: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L9", "6L9"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + captivate: ["7L47", "7E", "6L47", "6E", "5L41", "4M", "4L37"], + charm: ["3S1"], + confide: ["7M", "6M"], + confuseray: ["7L12", "7V", "6L12", "5L17", "4L17", "3L21"], + covet: ["6T", "5T"], + darkpulse: ["7M", "6M", "5T", "5D", "4M"], + dig: ["7V", "6M", "5M", "4M", "3M", "3S1"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4E"], + extrasensory: ["7L31", "7E", "6L31", "6E", "5L51", "5E", "4L44", "4E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L23", "7E", "6L20", "6E", "5L20", "5E", "4E", "3E"], + fireblast: ["7M", "7L42", "7V", "6M", "6L42", "5M", "5L54", "4M", "4L47", "3M"], + firespin: ["7L15", "7V", "6L12", "5L14", "4L34", "3L41"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flameburst: ["7L28", "6L23", "5L24"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L36", "7V", "6M", "6L34", "5M", "5L37", "4M", "4L24", "3M", "3L29"], + flareblitz: ["7E", "6E", "5E", "4E"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grudge: ["7L44", "6L44", "5L47", "4L41", "3L37"], + headbutt: ["4T"], + heatwave: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E", "3S1"], + hex: ["7L26", "7E", "6L26", "6E", "5L28", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7E", "6E", "5E", "4E", "3E"], + hypnosis: ["7E", "6E", "5E", "4E", "3E"], + imprison: ["7L39", "6L18", "5L21", "4L21", "3L25"], + incinerate: ["6M", "5M"], + inferno: ["7L50", "6L50", "5L44"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L18", "6M", "6L18", "5M", "5L34", "4M", "4L31"], + powerswap: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3E"], + quickattack: ["7L10", "7V", "6L10", "5L11", "4L11", "3L13", "3S0"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L7", "7V", "6M", "6L7", "5M", "5L7", "5D", "4M", "4L7", "3M", "3L9", "3S0"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L34", "6M", "6L34", "5M", "5L27", "4M", "4L27", "3M", "3L33"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailslap: ["7E", "6E", "5E"], + tailwhip: ["7L4", "7V", "6L4", "5L4", "4L4", "3L5", "3S0"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "7L20", "6M", "6L20", "5M", "5L31", "4M", "4L14", "3L17", "3S0"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + vulpixalola: {learnset: { + agility: ["7E"], + attract: ["7M"], + aurorabeam: ["7L28"], + auroraveil: ["7M"], + babydolleyes: ["7L9", "7S0"], + blizzard: ["7M", "7L42"], + captivate: ["7L47"], + celebrate: ["7S0"], + charm: ["7E"], + confide: ["7M"], + confuseray: ["7L12"], + darkpulse: ["7M"], + disable: ["7E"], + doubleteam: ["7M"], + encore: ["7E"], + extrasensory: ["7L31", "7E"], + facade: ["7M"], + feintattack: ["7L23"], + flail: ["7E"], + freezedry: ["7E"], + frostbreath: ["7M"], + frustration: ["7M"], + grudge: ["7L44"], + hail: ["7M"], + hex: ["7L26"], + hiddenpower: ["7M"], + howl: ["7E"], + hypnosis: ["7E"], + icebeam: ["7M", "7L36"], + iceshard: ["7L10", "7S0"], + icywind: ["7L15"], + imprison: ["7L39"], + mist: ["7L20"], + moonblast: ["7E"], + payback: ["7M", "7L18"], + powdersnow: ["7L1", "7S1"], + powerswap: ["7E"], + protect: ["7M"], + psychup: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L7"], + round: ["7M"], + safeguard: ["7M", "7L34"], + secretpower: ["7E"], + sheercold: ["7L50"], + sleeptalk: ["7M"], + spite: ["7E"], + substitute: ["7M"], + swagger: ["7M"], + tailslap: ["7E"], + tailwhip: ["7L4", "7S0"], + toxic: ["7M"], + }}, + ninetales: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L1", "4L1", "3L1"], + covet: ["6T", "5T"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M"], + ember: ["7V", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firespin: ["3L45"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L1", "6M", "6L1", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "5S0", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + imprison: ["7L1", "6L1"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["7V", "3T"], + nastyplot: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + ominouswind: ["4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M", "5S0"], + quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7V", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "5S0", "4M"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7V"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "5S0", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + ninetalesalola: {learnset: { + attract: ["7M"], + auroraveil: ["7M"], + blizzard: ["7M"], + calmmind: ["7M"], + confide: ["7M"], + confuseray: ["7L1"], + darkpulse: ["7M"], + dazzlinggleam: ["7M", "7L1"], + doubleteam: ["7M"], + dreameater: ["7M"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hail: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M", "7L1"], + iceshard: ["7L1"], + imprison: ["7L1"], + nastyplot: ["7L1"], + payback: ["7M"], + protect: ["7M"], + psychup: ["7M"], + psyshock: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + round: ["7M"], + safeguard: ["7M", "7L1"], + sleeptalk: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + }}, + igglybuff: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + captivate: ["7E", "6E", "5E", "4M"], + charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + confide: ["7M", "6M"], + copycat: ["7L11", "6L11", "5L17", "4L17"], + counter: ["3T"], + covet: ["7E", "6T", "6E", "5T", "5E", "4E"], + defensecurl: ["7L3", "6L3", "5L5", "4L5", "3T", "3L4", "3S0"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E", "5D", "4E", "3E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healpulse: ["7E", "6E"], + helpinghand: ["6T", "5T", "5D", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mistyterrain: ["7E", "6E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + perishsong: ["7E", "6E", "5E", "4E", "3E"], + pound: ["7L5", "6L5", "5L9", "4L9", "3L9"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + punishment: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sing: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L9", "6L9", "5L13", "4L13", "3L14"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["3S0"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + }}, + jigglypuff: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L32", "7V", "6L33", "5L33", "4L29", "3T", "3L34"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + captivate: ["7E", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["7E", "6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L3", "7V", "6L3", "5L5", "4L5", "3T", "3L4"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7L14", "7V", "6L13", "5L13", "4L13", "3L14"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["7L45", "7V", "6L49", "5L53", "4L49", "3T", "3L49"], + doubleslap: ["7L17", "7V", "6L18", "5L25", "4L21", "3L24"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E"], + feintattack: ["7E"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7E", "6T", "5T", "4T"], + gyroball: ["7M", "7L35", "6M", "6L37", "5M", "5L37", "4M", "4L33"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healpulse: ["7E"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7L41", "6T", "6L44", "5T", "5L49", "4L45", "3L44"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7E", "6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7L38", "7V", "6L37", "5L45", "4L41", "3T", "3L39"], + mistyterrain: ["7E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + perishsong: ["7E"], + playnice: ["7L9", "6L8"], + pound: ["7L5", "7V", "6L5", "5L9", "4L9", "3L9"], + poweruppunch: ["6M"], + present: ["7E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7V"], + punishment: ["7E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L30", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L25", "3M", "3L29"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["7L20", "6L21", "5L21", "4T", "4L17", "3T", "3L19"], + round: ["7M", "7L22", "6M", "6L17", "5M", "5L17"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + skullbash: ["7V"], + sleeptalk: ["7M", "7E", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spitup: ["7L25"], + stealthrock: ["6T", "5T", "4M"], + stockpile: ["7L25"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L25"], + takedown: ["7V"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + wakeupslap: ["7L27", "6L28", "5L41", "4L37"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E"], + workup: ["7M", "5M"], + }}, + wigglytuff: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["7L1", "7V", "6L1", "3T"], + doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + playrough: ["7L1", "6L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + zubat: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M", "6M", "6L30", "5M", "5L33"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L19", "6L19", "5L25", "4T", "4L25", "3L31"], + airslash: ["7L41", "6L41", "5L45", "4L41"], + astonish: ["7L7", "6L7", "5L9", "4L9", "3L6"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L11", "7V", "6L11", "5L13", "4L13", "3L16"], + bravebird: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L17", "7V", "6L17", "5L21", "4L21", "3L26"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defog: ["7E", "6E", "5E", "4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + gust: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7L35", "7V", "6L35", "5L41", "4L37", "3L46"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7E", "6E", "5E", "5D", "4E"], + leechlife: ["7M", "7L31", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L29", "6L29", "5L29", "4L29", "3L36"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pluck: ["5M", "4M"], + poisonfang: ["7L25", "6L25", "5L37", "4L33", "3L41"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + quickguard: ["7L43", "6L43"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "5D", "4T"], + supersonic: ["7L5", "7V", "6L4", "5L5", "5D", "4L5", "3L6"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L23", "7V", "6L23", "5L24", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "7L37", "6M", "6L37", "5M"], + whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + wingattack: ["7L13", "7V", "6L13", "5L17", "4L17", "3L21"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + golbat: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M", "6M", "6L33", "5M", "5L39"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L19", "6L19", "5L27", "4T", "4L27", "3L35"], + airslash: ["7L48", "6L48", "5L57", "4L51"], + astonish: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L11", "7L1", "7V", "6L1", "5L13", "4L13", "3L16"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L17", "7V", "6L17", "5L21", "4L21", "3L28"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + haze: ["7L40", "7V", "6L40", "5L51", "4L45", "3L56"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + leechlife: ["7M", "7L35", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L32", "6L32", "5L33", "4L33", "3L42"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pluck: ["5M", "4M"], + poisonfang: ["7L27", "6L27", "5L45", "4L39", "3L49"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickguard: ["7L51", "6L51"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L24", "7V", "6L24", "5L24", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "7L43", "6M", "6L43", "5M"], + whirlwind: ["7V"], + wingattack: ["7L13", "7V", "6L13", "5L17", "4L17", "3L21"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + crobat: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M", "6M", "6L33", "5M", "5L39"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L19", "6L19", "5L27", "4T", "4L27", "3L35"], + airslash: ["7L48", "6L48", "5L57", "4L51", "4S0"], + astonish: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L11", "7L1", "6L1", "5L13", "4L13", "3L16"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L17", "6L17", "5L21", "4L21", "3L28"], + crosspoison: ["7L1", "6L1", "5L1", "4L1"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + haze: ["7L40", "6L40", "5L51", "4L45", "3L56"], + heatwave: ["6T", "5T", "4T", "4S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leechlife: ["7M", "7L35", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L32", "6L32", "5L33", "4L33", "3L42"], + mimic: ["3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pluck: ["5M", "4M"], + poisonfang: ["7L27", "6L27", "5L45", "4L39", "3L49"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickguard: ["7L51", "6L51"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + skyattack: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "4S0", "3M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T", "4S0"], + supersonic: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L24", "6L24", "5L24", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "7L43", "6M", "6L43", "5M"], + wingattack: ["7L13", "6L13", "5L17", "4L17", "3L21"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + oddish: {learnset: { + absorb: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + acid: ["7L9", "7V", "6L9", "5L9", "4L9", "3L23", "3S0"], + afteryou: ["7E", "6T", "6E", "5T", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["6T", "5T", "4T"], + gigadrain: ["7L31", "6T", "6L31", "5T", "5L37", "5D", "4M", "4L37", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7L47", "6L45"], + growth: ["7L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7E", "6E", "5E", "4E", "3E"], + leechseed: ["3S1"], + luckychant: ["7L23", "6L23", "5L25", "4L25"], + megadrain: ["7L19", "7V", "6L19", "5L21", "4L21"], + mimic: ["7V", "3T"], + moonblast: ["7L43", "6L43"], + moonlight: ["7L27", "6L27", "5L33", "4L33", "3L32"], + naturalgift: ["7L39", "6L29", "5L29", "4M", "4L29"], + naturepower: ["7M", "7E", "6M", "6E", "5E"], + petaldance: ["7L51", "7V", "6L41", "5L41", "4L41", "3L39"], + poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L14", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7E", "6E", "5E", "4E", "3E"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeppowder: ["7L15", "7V", "6L15", "5L17", "4L17", "3L18", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stunspore: ["7L14", "7V", "6L14", "5L15", "4L15", "3L16", "3S0"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L5", "6L5", "5L5", "5D", "4L5", "3L7"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + takedown: ["7V"], + teeterdance: ["7E", "6E", "5E", "5D", "4E"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "7L35", "7V", "6M", "6L35", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + gloom: {learnset: { + absorb: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + acid: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L24", "3S0"], + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["6T", "5T", "4T"], + gigadrain: ["7L34", "6T", "6L34", "5T", "5L47", "4M", "4L47", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7L54", "6L54"], + growth: ["7L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + luckychant: ["7L24", "6L24", "5L29", "4L29"], + megadrain: ["7L19", "7V", "6L19", "5L23", "4L23"], + mimic: ["7V", "3T"], + moonlight: ["7L29", "6L29", "5L41", "4L41", "3L35", "3S0"], + naturalgift: ["7L44", "6L35", "5L35", "4M", "4L35"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L49", "6L49"], + petaldance: ["7L59", "7V", "6L53", "5L53", "4L53", "3L44", "3S0"], + poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeppowder: ["7L15", "7V", "6L15", "5L17", "4L17", "3L18", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stunspore: ["7L14", "7V", "6L14", "5L15", "4L15", "3L16"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + toxic: ["7M", "7L39", "7V", "6M", "6L39", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + vileplume: {learnset: { + absorb: ["3L1"], + acid: ["7V"], + afteryou: ["6T", "5T"], + aromatherapy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["6T", "5T", "4T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + megadrain: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L49", "6L49"], + petaldance: ["7L59", "7V", "6L53", "5L53", "4L53", "3L44"], + poisonpowder: ["7L1", "7V", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeppowder: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L69", "7V", "6M", "6L64", "5M", "5L65", "4M", "4L65", "3M"], + stunspore: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + bellossom: {learnset: { + absorb: ["3L1"], + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["6T", "5T", "4T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + leafblade: ["7L1", "6L1", "5L1", "4L1"], + leafstorm: ["7L69", "7L1", "6L1", "5L53", "4L53"], + magicalleaf: ["7L1", "6L23", "5L23", "4L23", "3L1"], + megadrain: ["7L1", "6L1", "5L1", "4L1"], + mimic: ["3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L49", "6L49"], + petaldance: ["7L59", "3L44"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quiverdance: ["7L39"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M", "3L55"], + stunspore: ["7L1", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L1", "6L1", "5L1", "4L1", "3L1"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + paras: {learnset: { + absorb: ["7L11"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["6T", "5T"], + agility: ["7E", "6E", "5E", "4E"], + aromatherapy: ["7L43", "6L43", "5L43", "4L38", "3L49"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crosspoison: ["7E", "6E", "5E", "5D", "4E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M", "4E", "3E", "3S0"], + fellstinger: ["7E", "6E"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L17", "6L17", "5L17", "4T", "3T"], + gigadrain: ["7L38", "6T", "6L38", "5T", "5L38", "4M", "4L33", "3M", "3L43"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L33", "7V", "6L33", "5L33", "4L27", "3L37"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + knockoff: ["6T", "5T", "4T"], + leechlife: ["7M", "7V", "6L11", "5L11", "4L11", "3L19"], + leechseed: ["7E", "6E", "5E"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + megadrain: ["7V"], + metalclaw: ["7E", "6E", "5E", "4E"], + mimic: ["7V", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + poisonpowder: ["7L6", "6L6", "5L6", "4L6", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + ragepowder: ["7L49", "6L49", "5L49"], + reflect: ["7V"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + skullbash: ["7V"], + slash: ["7L27", "7V", "6L27", "5L27", "4L22", "3L31", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spore: ["7L22", "7V", "6L22", "5L22", "4L17", "3L25", "3S0"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L6", "7V", "6L6", "5L6", "5D", "4L6", "3L7"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "6E", "5E", "4E", "3E"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "5D", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + wideguard: ["7E", "6E"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L43"], + }}, + parasect: {learnset: { + absorb: ["7L11", "7L1"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["6T", "5T"], + aromatherapy: ["7L51", "6L51", "5L51", "4L47", "3L59"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["6T", "5T", "4T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crosspoison: ["7L1", "6L1", "5L1", "4L1"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L17", "6L17", "5L17", "4T", "3T"], + gigadrain: ["7L44", "6T", "6L44", "5T", "5L44", "4M", "4L39", "3M", "3L51"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L37", "7V", "6L37", "5L37", "4L30", "3L43"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leechlife: ["7M", "7V", "6L1", "5L1", "4L1", "3L19"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poisonpowder: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + ragepowder: ["7L59", "6L59", "5L59"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + skullbash: ["7V"], + slash: ["7L29", "7V", "6L29", "5L29", "4L22", "3L35"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spore: ["7L22", "7V", "6L22", "5L22", "4L17", "3L27"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "7L66", "6M", "6L66", "5M", "5L66", "4M", "4L55"], + }}, + venonat: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "5D", "4E", "3E"], + bide: ["7V"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L11", "7V", "6L11", "5L11", "4L11", "3L17"], + disable: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "4E", "3M", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "7L35", "7V", "6L17", "5L17", "4L17", "3L25"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + morningsun: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + poisonfang: ["7L41", "6L41", "5L41", "4L41"], + poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L20"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L17", "7V", "6L25", "5L25", "4L25", "3L33"], + psychic: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L41"], + psywave: ["7V"], + rage: ["7V"], + ragepowder: ["7E", "6E", "5E"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + signalbeam: ["7L25", "7E", "6T", "6L35", "6E", "5T", "5L35", "5E", "4T", "4L35", "4E", "3E"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + sleeppowder: ["7L29", "7V", "6L29", "5L29", "4L29", "3L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L23", "7V", "6L23", "5L23", "4L23", "3L28"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7V", "6L5", "5L5", "4L5", "3L9"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7E", "6E", "5E", "4E"], + venoshock: ["7M", "6M", "5M"], + zenheadbutt: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + }}, + venomoth: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L59", "7L1", "6L1", "5L59", "4L59"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L11", "7V", "6L11", "5L11", "4L11", "3L17"], + defog: ["4M"], + disable: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L31", "5L31", "4L31", "3L31"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "7L37", "7V", "6L17", "5L17", "4L17", "3L25"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonfang: ["7L47", "6L47", "5L47", "4L47"], + poisonpowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L20"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L17", "7V", "6L25", "5L25", "4L25", "3L36"], + psychic: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L55", "3M", "3L52", "3S0"], + psywave: ["7V"], + quiverdance: ["7L63", "7L1", "6L1", "5L63"], + rage: ["7V"], + razorwind: ["7V"], + reflect: ["7V"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["7L25", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + silverwind: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1", "3S0"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeppowder: ["7L29", "7V", "6L29", "5L29", "4L29", "3L42"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L23", "7V", "6L23", "5L23", "4L23", "3L28"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T", "3S0"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + whirlwind: ["7V"], + zenheadbutt: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + }}, + diglett: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7E", "6E", "5E", "4E", "3E"], + astonish: ["7L7", "7E", "6L7", "6E", "5L7", "5E", "4L7", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E", "5D", "4E", "3E"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bulldoze: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["7L31", "7V", "6M", "6L34", "5M", "5L34", "4M", "4L18", "3M", "3L17"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7L28", "6T", "6L29", "5T", "5L29", "4T", "4L26"], + earthquake: ["7M", "7L39", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L41"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + finalgambit: ["7E", "6E", "5E"], + fissure: ["7L43", "7V", "6L45", "5L45", "4L40", "3L49"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["3L21"], + growl: ["7L4", "7V", "6L4", "5L4", "4L4", "3L5"], + headbutt: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + magnitude: ["7L14", "6L15", "5L15", "4L12", "3L9"], + memento: ["7E", "6E", "5E"], + mimic: ["7V", "3T"], + mudbomb: ["7L25", "7E", "6L26", "6E", "5L26", "5E", "4L29", "4E"], + mudslap: ["7L10", "6L12", "5L12", "4T", "4L15", "3T", "3L25"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + sandstorm: ["7M", "6M", "5M", "4M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L35", "7V", "6L37", "5L37", "4L34", "3L33"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "5D", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L22", "6L23", "5L23", "4T", "4L23"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["7E", "6E", "5T", "5E", "4E", "3E"], + }}, + diglettalola: {learnset: { + aerialace: ["7M"], + ancientpower: ["7E"], + astonish: ["7L7", "7S0"], + attract: ["7M"], + beatup: ["7E"], + bulldoze: ["7M", "7L18"], + confide: ["7M"], + dig: ["7L31"], + doubleteam: ["7M"], + earthpower: ["7L28"], + earthquake: ["7M", "7L39"], + echoedvoice: ["7M"], + endure: ["7E"], + facade: ["7M"], + feintattack: ["7E"], + finalgambit: ["7E"], + fissure: ["7L43"], + flashcannon: ["7M"], + frustration: ["7M"], + growl: ["7L4", "7S0"], + headbutt: ["7E"], + hiddenpower: ["7M"], + ironhead: ["7L35"], + magnitude: ["7L14"], + memento: ["7E"], + metalclaw: ["7L1", "7S0"], + metalsound: ["7E"], + mudbomb: ["7L25"], + mudslap: ["7L10", "7S0"], + protect: ["7M"], + pursuit: ["7E"], + rest: ["7M"], + return: ["7M"], + reversal: ["7E"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L1"], + sandstorm: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L22"], + sunnyday: ["7M"], + swagger: ["7M"], + thief: ["7M"], + thrash: ["7E"], + toxic: ["7M"], + workup: ["7M"], + }}, + dugtrio: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + astonish: ["7L7", "6L7", "5L7", "4L7"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bulldoze: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + captivate: ["4M"], + charm: ["3S0"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["7L35", "7V", "6M", "6L40", "5M", "5L40", "4M", "4L18", "3M", "3L17"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["7L30", "6T", "6L33", "5T", "5L33", "4T", "4L28"], + earthquake: ["7M", "7L47", "7V", "6M", "6L50", "5M", "5L50", "4M", "4L45", "3M", "3L51", "3S0"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7L53", "7V", "6L57", "5L57", "4L50", "3L64"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["3L21"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + magnitude: ["7L14", "6L15", "5L15", "4L12", "3L9"], + mimic: ["7V", "3T"], + mudbomb: ["7L25", "6L28", "5L28", "4L33"], + mudslap: ["7L10", "6L12", "5L12", "4T", "4L15", "3T", "3L25"], + naturalgift: ["4M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "6M", "5M", "4M", "3S0"], + sandtomb: ["7L1", "6L26", "5L26", "4L26", "3L26"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L41", "7V", "6L45", "5L45", "4L40", "3L38"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L22", "6L23", "5L23", "4T", "4L23"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + uproar: ["5T"], + }}, + dugtrioalola: {learnset: { + aerialace: ["7M"], + astonish: ["7L7"], + attract: ["7M"], + bulldoze: ["7M", "7L18"], + confide: ["7M"], + dig: ["7L35"], + doubleteam: ["7M"], + earthpower: ["7L30"], + earthquake: ["7M", "7L47"], + echoedvoice: ["7M"], + facade: ["7M"], + fissure: ["7L53"], + flashcannon: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ironhead: ["7L41"], + magnitude: ["7L14"], + metalclaw: ["7L1"], + mudbomb: ["7L25"], + mudslap: ["7L10"], + nightslash: ["7L1"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L1"], + round: ["7M"], + sandattack: ["7L1"], + sandstorm: ["7M"], + sandtomb: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L22"], + sunnyday: ["7M"], + swagger: ["7M"], + thief: ["7M"], + toxic: ["7M"], + triattack: ["7L1"], + workup: ["7M"], + }}, + meowth: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7E", "6E", "5E", "4E", "3E"], + assist: ["7E", "6E", "5E", "4E", "4S5", "3E"], + assurance: ["7L41", "6L41", "5L41", "4L41"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L6", "7V", "6L6", "6S7", "5L6", "4L6", "4S4", "3L10", "3S2", "3S3"], + bodyslam: ["7V", "3T"], + bubblebeam: ["7V"], + captivate: ["7L46", "6L46", "5L46", "4M", "4L46"], + charm: ["7E", "6E", "5E", "4E", "3E"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L9", "6L9", "6S7", "5L9", "4L9", "4S4", "4S5", "3L43"], + feint: ["7L50", "6L50", "5L54", "4L54"], + feintattack: ["7L22", "6L22", "5L22", "4L22", "3L25"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["7E", "6T", "6E", "5T", "5E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L14", "7V", "6L14", "5L14", "5S6", "4L14", "4S4", "3L36"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2"], + gunkshot: ["6T", "5T", "4T"], + happyhour: ["6S7"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7E", "6E", "5E", "5D", "4E", "3E"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L38", "6L38", "5L38", "5S6", "4L38"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightslash: ["7L49", "6L49", "5L49", "4L49"], + odorsleuth: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["7L30", "7V", "6L30", "5L30", "4L30", "4S5", "3L18", "3S3"], + petaldance: ["3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + punishment: ["7E", "6E", "5E", "4E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "4S5", "3L1", "3S0", "3S1", "3S2"], + screech: ["7L17", "7V", "6L17", "6S7", "5L17", "4L17", "4S4", "3L31"], + secretpower: ["6M", "5D", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sing: ["5S6", "3S3"], + skullbash: ["7V"], + slash: ["7L33", "7V", "6L33", "5L33", "4L33", "3L40", "3S3"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["7E", "6T", "6E", "5T", "5E", "5S6", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T", "3L45"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7E", "6E", "5E", "4E"], + takedown: ["7V"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + }}, + meowthalola: {learnset: { + aerialace: ["7M"], + amnesia: ["7E"], + assist: ["7E"], + assurance: ["7L41"], + attract: ["7M"], + bite: ["7L6"], + captivate: ["7L46"], + charm: ["7E"], + confide: ["7M"], + covet: ["7E"], + darkpulse: ["7M", "7L55"], + doubleteam: ["7M"], + dreameater: ["7M"], + echoedvoice: ["7M"], + embargo: ["7M"], + facade: ["7M"], + fakeout: ["7L9"], + feint: ["7L50"], + feintattack: ["7L22"], + flail: ["7E"], + flatter: ["7E"], + foulplay: ["7E"], + frustration: ["7M"], + furyswipes: ["7L14"], + growl: ["7L1"], + hiddenpower: ["7M"], + hypnosis: ["7E"], + nastyplot: ["7L38"], + nightslash: ["7L49"], + partingshot: ["7E"], + payback: ["7M"], + payday: ["7L30"], + protect: ["7M"], + psychup: ["7M"], + punishment: ["7E"], + quash: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scratch: ["7L1"], + screech: ["7L17"], + shadowball: ["7M"], + shadowclaw: ["7M"], + slash: ["7L33"], + sleeptalk: ["7M"], + snatch: ["7E"], + spite: ["7E"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + taunt: ["7M", "7L25"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + }}, + persian: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + assurance: ["7L49", "6L49", "5L49", "4L49"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["7V", "3T"], + bubblebeam: ["7V"], + captivate: ["7L56", "6L56", "5L56", "4M", "4L56"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L55"], + feint: ["7L65", "6L65", "5L68", "4L68"], + feintattack: ["7L22", "6L22", "5L22", "4L22", "3L25"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L14", "7V", "6L14", "5L14", "4L14", "3L42"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L44", "6L44", "5L44", "4L44"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightslash: ["7L61", "6L61", "5L61", "4L61"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["7V", "3L18"], + playrough: ["7L1", "6L1"], + powergem: ["7L32", "6L32", "5L32", "4L32"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L17", "7V", "6L17", "5L17", "4L17", "3L34"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + slash: ["7L37", "7V", "6L37", "5L37", "4L37", "3L49"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T", "3L61"], + swift: ["7L1", "7V", "6L28", "5L28", "4T", "3T"], + switcheroo: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7V"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + }}, + persianalola: {learnset: { + aerialace: ["7M"], + assurance: ["7L49"], + attract: ["7M"], + bite: ["7L6", "7L1"], + captivate: ["7L56"], + confide: ["7M"], + darkpulse: ["7M", "7L69"], + doubleteam: ["7M"], + dreameater: ["7M"], + echoedvoice: ["7M"], + embargo: ["7M"], + facade: ["7M"], + fakeout: ["7L9", "7L1"], + feint: ["7L65"], + feintattack: ["7L22"], + frustration: ["7M"], + furyswipes: ["7L14"], + gigaimpact: ["7M"], + growl: ["7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + nastyplot: ["7L44"], + nightslash: ["7L61"], + payback: ["7M"], + playrough: ["7L1"], + powergem: ["7L32"], + protect: ["7M"], + psychup: ["7M"], + quash: ["7M", "7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + round: ["7M"], + scratch: ["7L1"], + screech: ["7L17"], + shadowball: ["7M"], + shadowclaw: ["7M"], + slash: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swift: ["7L1"], + switcheroo: ["7L1"], + taunt: ["7M", "7L25"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + }}, + psyduck: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7L37", "6L43", "5L48", "4L44"], + aquatail: ["7L28", "6T", "6L29", "5T", "5L32", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["5D", "4M"], + bubblebeam: ["7V"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + clearsmog: ["7E", "6E"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E"], + confusion: ["7L10", "7V", "6L11", "5L18", "4L18", "3L16", "3S0"], + counter: ["7V", "3T"], + crosschop: ["7E", "6E", "5E", "4E", "3E"], + dig: ["7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "6L11", "5L14", "4L14", "3L10", "3S0"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + encore: ["7E", "6E", "5E", "5D", "4E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L13", "7V", "6L15", "5L27", "4L27", "3L40"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L40", "7V", "6L46", "5L53", "4L48", "3L50"], + hypnosis: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + mudsport: ["3S1"], + naturalgift: ["4M"], + payday: ["7V"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E"], + psychic: ["7M", "6M", "5M", "4M", "4E", "3E"], + psychup: ["7M", "7L34", "6M", "6L39", "5M", "5L40", "4M", "4L35", "3T", "3L31"], + psyshock: ["7M", "6M", "5M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + screech: ["7L22", "6L25", "5L31", "4L31", "3L23", "3S0"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + simplebeam: ["7E", "6E"], + skullbash: ["7V"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L31", "6L36", "5L35"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + synchronoise: ["7E", "6E", "5E"], + tailwhip: ["7L4", "7V", "6L4", "5L5", "4L5", "3L5", "3S0", "3S1"], + takedown: ["7V"], + telekinesis: ["5M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7V", "6L8", "5L9", "4L9"], + waterpulse: ["7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], + watersport: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], + whirlpool: ["4M"], + wonderroom: ["7L43", "6T", "6L50", "5T", "5L57"], + worryseed: ["6T", "5T", "4T"], + yawn: ["7E", "6E", "5E", "4E"], + zenheadbutt: ["7L25", "6T", "6L29", "5T", "5L44", "4T", "4L40"], + }}, + golduck: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7L41", "6L49", "5L56", "4L50"], + aquajet: ["7L1", "6L1", "5L1", "4L1"], + aquatail: ["7L28", "6T", "6L32", "5T", "5L32", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S0"], + brine: ["4M"], + bubblebeam: ["7V"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + charm: ["3S0"], + confide: ["7M", "6M"], + confusion: ["7L10", "7V", "6L11", "5L18", "4L18", "3L16"], + counter: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "6L11", "5L14", "4L14", "3L1"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "7V", "6L15", "5L27", "4L27", "3L44"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L46", "7V", "6L54", "5L63", "4L56", "3L58"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mefirst: ["7L1"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payday: ["7V"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "7L36", "6M", "6L43", "5M", "5L44", "4M", "4L37", "3T", "3L31", "3S0"], + psyshock: ["7M", "6M", "5M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L22", "6L25", "5L31", "4L31", "3L23"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L31", "6L38", "5L37"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + telekinesis: ["5M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M", "3S0"], + watergun: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1"], + waterpulse: ["7L16", "6T", "6L18", "5L22", "4M", "4L22", "3M"], + watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + wonderroom: ["7L51", "6T", "6L60", "5T", "5L69"], + worryseed: ["6T", "5T", "4T"], + zenheadbutt: ["7L25", "6T", "6L25", "5T", "5L50", "4T", "4L44"], + }}, + mankey: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + assurance: ["7L26", "6L25", "5L25", "4L25"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + closecombat: ["7L36", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + covet: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], + crosschop: ["7L22", "6L37", "5L37", "4L37", "3L31"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7E", "6E", "5E", "4E"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + finalgambit: ["7L50", "6L53", "5L53"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "7V", "6L1", "5L1", "4L1", "3L21"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L5", "7V", "6L9", "5L9", "4L9", "3L16"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + karatechop: ["7L8", "7V", "6L13", "5L13", "4L13", "3L11"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "5D", "4T", "4L1", "3L6"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7E", "6E", "5E", "4E", "3E"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E"], + outrage: ["7L47", "6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["7V"], + poisonjab: ["7M", "6M", "5M", "4M"], + powertrip: ["7E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + punishment: ["7L29", "6L45", "5L45", "4L45"], + pursuit: ["7L12"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E", "4E", "3E"], + reversal: ["7E", "6E", "5E", "5D", "4E", "3E"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L40", "7V", "6L21", "5L21", "4L21", "3L41"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["7L15", "7V", "6L17", "5L17", "4L17", "3T", "3L26"], + skullbash: ["7V"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["6T", "3T"], + spite: ["6T", "5T", "4T"], + stompingtantrum: ["7L43"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L19", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L36"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L33", "7V", "6L41", "5L41", "4L41", "3L46"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "5D", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + workup: ["7M", "5M"], + }}, + primeape: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + assurance: ["7L26", "6L25", "5L25", "4L25"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + closecombat: ["7L39", "6L59", "5L59", "4L59"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + crosschop: ["7L22", "6L41", "5L41", "4L41", "3L35", "3S0"], + defensecurl: ["3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + finalgambit: ["7L57", "7L1", "6L1", "5L63"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "7V", "6L1", "5L1", "4L1", "3L21", "3S0"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L5", "7V", "6L9", "5L9", "4L9", "3L16"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + karatechop: ["7L8", "7V", "6L13", "5L13", "4L13", "3L11"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["7L53", "6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["7V"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + punishment: ["7L30", "6L53", "5L53", "4L53"], + pursuit: ["7L12"], + rage: ["7L1", "7V", "6L28", "5L28", "4L28", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["3S0"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L44", "7V", "6L21", "5L21", "4L21", "3L53"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["7L15", "7V", "6L17", "5L17", "4L17", "3T", "3L26"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "3T"], + spite: ["6T", "5T", "4T"], + stompingtantrum: ["7L48"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L19", "6M", "6L35", "5M", "5L35", "4M", "4L35", "3T", "3L44"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L35", "7V", "6L47", "5L47", "4L47", "3L62"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + workup: ["7M", "5M"], + }}, + growlithe: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L30", "7V", "6L30", "5L42", "4L39", "3L43"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S1", "3S2"], + bodyslam: ["7E", "7V", "6E", "5E", "5D", "4E", "3T", "3E"], + burnup: ["7E"], + captivate: ["4M"], + charm: ["3S2"], + closecombat: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E"], + crunch: ["7L39", "7E", "6L39", "6E", "5L45", "5E", "4L42", "4E", "3E"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T"], + doublekick: ["7E", "6E", "5E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonrage: ["7V"], + ember: ["7L6", "7V", "6L6", "5L6", "4L6", "3L7", "3S1"], + endure: ["5D", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L21", "6L21", "5L28", "4L28"], + firespin: ["7E", "6E", "5E", "4E", "3E"], + flameburst: ["7L28", "6L28", "5L31"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L39", "4M", "4L34", "3M", "3L49", "3S2"], + flamewheel: ["7L17", "6L17", "5L20", "4L20", "3L31", "3S0"], + flareblitz: ["7L45", "7E", "6L45", "6E", "5L56", "5E", "4L48", "4E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heatwave: ["7L41", "7E", "6T", "6L41", "6E", "5T", "5L51", "5E", "4T", "4L45", "4E", "3E"], + helpinghand: ["7L12", "6T", "6L12", "5T", "5L17", "4T", "4L17", "3L37"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7E", "6E", "5E", "4E", "3E"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7L8", "7V", "6L8", "5L9", "4L9", "3L13", "3S0"], + mimic: ["7V", "3T"], + morningsun: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + odorsleuth: ["7L10", "6L10", "5L14", "4L14", "3L19", "3S0"], + outrage: ["7L43", "6T", "6L43", "5T", "5L43"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["7L32", "6M", "6L32", "5M", "5L48"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L19", "6L19", "5L25", "4L25"], + roar: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M", "3L1", "3S1"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7L23", "7V", "6L23", "5L34", "4L31", "3L25", "3S0", "3S2"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + arcanine: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["7V", "3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["4S0"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7V"], + ember: ["7V", "3L1"], + endure: ["4M", "3T"], + extremespeed: ["7L34", "7S1", "6L34", "5L39", "4L39", "4S0", "3L49"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7S1", "4S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7V"], + mimic: ["7V", "3T"], + mudslap: ["4T"], + naturalgift: ["4M"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], + outrage: ["6T", "5T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7S1", "6M", "5M", "4M", "3M"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1", "4S0"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "7S1", "6M", "5M", "4M"], + }}, + poliwag: {learnset: { + amnesia: ["7V"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7L31", "6L31", "5L31", "4L31", "3L37"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L21", "7V", "6L21", "5L21", "4L21", "3T", "3L31"], + bubble: ["7L11", "7V", "6L11", "5L5", "4L5", "3L1", "3S0"], + bubblebeam: ["7L25", "7E", "7V", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3E"], + captivate: ["4M"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L15", "7V", "6L15", "5L15", "4L15", "3L19"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + encore: ["7E", "6E", "5E", "4E"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "4E"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L38", "7V", "6L38", "5L38", "4L38", "3L43"], + hypnosis: ["7L8", "7V", "6L8", "5L8", "5D", "4L8", "3L7"], + iceball: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + mimic: ["7V", "3T"], + mindreader: ["7E", "6E", "5E", "4E", "3E"], + mist: ["7E", "6E", "5E", "5D", "4E", "3E"], + mudbomb: ["7L41", "6L41", "5L41", "4L41"], + mudshot: ["7L28", "7E", "6L28", "6E", "5L28", "5E", "4L28", "4E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L25"], + refresh: ["7E", "6E", "5E", "4E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + splash: ["7E", "6E", "5E", "4E", "3E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["3S0"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wakeupslap: ["7L35", "6L35", "5L35", "4L35"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L5", "7V", "6L5", "5L11", "4L11", "3L13"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + watersport: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E", "3E"], + whirlpool: ["4M"], + }}, + poliwhirl: {learnset: { + amnesia: ["7V"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7L37", "6L37", "5L37", "4L37", "3L43"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7L21", "7V", "6L21", "5L21", "4L21", "3T", "3L35"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L11", "7V", "6L11", "5L1", "4L1", "3L1"], + bubblebeam: ["7L27", "7V", "6L27", "5L27", "4L27"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L15", "7V", "6L15", "5L15", "4L15", "3L19"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L48", "7V", "6L48", "5L48", "4L48", "3L51"], + hypnosis: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudbomb: ["7L53", "6L53", "5L53", "4L53"], + mudshot: ["7L32", "6L32", "5L32", "4L32"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L27"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wakeupslap: ["7L43", "6L43", "5L43", "4L43"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L5", "7L1", "7V", "6L1", "5L11", "4L11", "3L1"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L1", "6L1", "5L1", "4L1"], + whirlpool: ["4M"], + }}, + poliwrath: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S0"], + bubblebeam: ["7L1", "7V", "6L1", "5L1", "4L1"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + circlethrow: ["7L53", "7L1", "6L1", "5L53"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7L32", "6L32", "5L32", "4L43", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["3S0"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mindreader: ["7L43", "6L43", "5L43", "4L53", "3L51"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + politoed: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7L1", "6L1", "5L1", "4L1"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleslap: ["7L1", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7L48", "6T", "6L48", "5T", "5L48", "4L48"], + hypnosis: ["7L1", "6L1", "5L1", "4L1", "3L1"], + icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T", "4T", "3T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + perishsong: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "5S0", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M", "5S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3T", "3L51"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + abra: {learnset: { + allyswitch: ["7E", "6E", "5M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "5D", "4T"], + guardsplit: ["7E", "6E", "5E"], + guardswap: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + powertrick: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychoshift: ["7E", "6E"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + kadabra: {learnset: { + allyswitch: ["7L36", "6L24", "5M", "5L24"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L16", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + counter: ["7V", "3T"], + dazzlinggleam: ["7M", "6M"], + dig: ["7V"], + disable: ["7L18", "7V", "6L18", "5L18", "4L18", "3L18"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L43", "6L43", "5L48", "4L42", "3L30"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + kinesis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + miracleeye: ["7L23", "6L22", "5L22", "4L22"], + naturalgift: ["4M"], + nightmare: ["3T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L21", "7V", "6L21", "5L28", "4L24", "3L21"], + psychic: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L46", "4M", "4L40", "3M", "3L36"], + psychocut: ["7L28", "6L28", "5L40", "4L34"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L31", "7V", "6L31", "5L36", "4L30", "3L25"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7L26", "7V", "6M", "6L26", "5M", "5L30", "4M", "4L28", "3M", "3L23"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7L41", "6T", "6L41", "5T", "5L42", "4T", "4L36", "3L33"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7L33", "6L33", "5M", "5L34"], + teleport: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["7L46", "6T", "6L46", "5T", "5L52", "4T", "4L46", "3L43"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + alakazam: {learnset: { + allyswitch: ["7L36", "6L24", "5M", "5L24"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + calmmind: ["7M", "7L41", "6M", "6L41", "5M", "5L42", "4M", "4L36", "3M", "3L33", "3S0"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L16", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + counter: ["7V", "3T"], + dazzlinggleam: ["7M", "6M"], + dig: ["7V"], + disable: ["7L18", "7V", "6L18", "5L18", "4L18", "3L18"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L43", "6L43", "5L48", "4L42", "3L30", "3S0"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + kinesis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + miracleeye: ["7L23", "6L22", "5L22", "4L22"], + naturalgift: ["4M"], + nightmare: ["3T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L21", "7V", "6L21", "5L28", "4L24", "3L21"], + psychic: ["7M", "7L38", "7V", "6M", "6L38", "5M", "5L46", "4M", "4L40", "3M", "3L36", "3S0"], + psychocut: ["7L28", "6L28", "5L40", "4L34"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L31", "7V", "6L31", "5L36", "4L30", "3L25"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7L26", "7V", "6M", "6L26", "5M", "5L30", "4M", "4L28", "3M", "3L23"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["7L33", "6L33", "5M", "5L34"], + teleport: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["7L46", "6T", "6L46", "5T", "5L52", "4T", "4L46", "3L43", "3S0"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + machop: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L37", "6M", "6L37", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "5D", "4E"], + captivate: ["4M"], + closecombat: ["7E", "6E", "5E", "4E"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + crosschop: ["7L39", "6L39", "5L43", "4L37", "3L40"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7L31", "6T", "6L31", "5T"], + dynamicpunch: ["7L45", "6L45", "5L49", "4L46", "3T", "3L49"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L3", "7V", "6L3", "5L7", "4L7", "3L7"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L9", "6L9", "5L19", "4L13", "3L22"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heavyslam: ["7E", "6E", "5E"], + helpinghand: ["6T", "5T", "5D", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + incinerate: ["6M", "5M"], + karatechop: ["7L7", "7V", "6L7", "5L10", "4L10", "3L13"], + knockoff: ["7L21", "7E", "6T", "6L21", "6E", "5T", "5E"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "5D", "4T", "4L1", "3L1"], + lowsweep: ["7M", "7L13", "6M", "6L13", "5M", "5L13"], + meditate: ["7E", "6E", "5E", "4E", "3E"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + powertrick: ["7E", "6E", "5E", "4E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickguard: ["7E", "6E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L19", "6L19", "5L25", "4L22", "3L25"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollingkick: ["7E", "6E", "5E", "4E", "3E"], + round: ["7M", "6M", "5M"], + scaryface: ["7L43", "6L43", "5L46", "4L43", "3L43"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7L15", "7V", "6L15", "5L22", "4L19", "3T", "3L19"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7L33", "7V", "6L33", "5L34", "4L31", "3L37"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + vitalthrow: ["7L25", "6L25", "5L31", "4L25", "3L31"], + wakeupslap: ["7L27", "6L27", "5L37", "4L34"], + workup: ["7M", "5M"], + }}, + machoke: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L43", "6M", "6L43", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + crosschop: ["7L47", "6L44", "5L44", "4L40", "3L46"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7L33", "6T", "6L33", "5T"], + dynamicpunch: ["7L57", "6L55", "5L55", "4L51", "3T", "3L59"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L9", "6L9", "5L19", "5S0", "4L13", "3L22"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + karatechop: ["7L7", "7L1", "7V", "6L1", "5L1", "4L10", "3L13"], + knockoff: ["7L21", "6T", "6L21", "5T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + lowsweep: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "5S0"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L19", "6L19", "5L25", "5S0", "4L22", "3L25"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L53", "6L51", "5L51", "4L44", "3L51"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7L15", "7V", "6L15", "5L22", "5S0", "4L19", "3T", "3L19"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7L37", "7V", "6L36", "5L36", "4L32", "3L41"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + vitalthrow: ["7L25", "6L25", "5L32", "4L25", "3L33"], + wakeupslap: ["7L27", "6L27", "5L40", "4L36"], + workup: ["7M", "5M"], + }}, + machamp: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L43", "7S2", "6M", "6L43", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["4C"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + crosschop: ["7L47", "6L44", "5L44", "4L40", "3L46"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7S2", "7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["7L33", "6T", "6L33", "5T"], + dynamicpunch: ["7L57", "6L55", "6S1", "5L55", "4L51", "3T", "3L59"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L9", "6L9", "5L19", "4L13", "3L22", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + karatechop: ["7L7", "7L1", "7V", "6L1", "5L1", "4L10", "3L13"], + knockoff: ["7L21", "6T", "6L21", "6S1", "5T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + lowsweep: ["7M", "7L13", "6M", "6L13", "5M", "5L13"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickguard: ["7S2"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L19", "6L19", "5L25", "4L22", "3L25", "3S0"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L53", "6L51", "5L51", "4L44", "3L51"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7L15", "7V", "6L15", "5L22", "4L19", "3T", "3L19", "3S0"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "6S1", "5M", "4M"], + strength: ["7L1", "7S2", "7V", "6M", "5M", "4M", "3M"], + submission: ["7L37", "7V", "6L36", "5L36", "4L32", "3L41"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + vitalthrow: ["7L25", "6L25", "5L32", "4L25", "3L33", "3S0"], + wakeupslap: ["7L27", "6L27", "5L40", "4L36"], + wideguard: ["7L1", "6L1", "6S1", "5L1"], + workup: ["7M", "5M"], + }}, + bellsprout: {learnset: { + acid: ["7L23", "7V", "6L23", "5L23", "4L23", "3L23"], + acidspray: ["7E", "6E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7E", "6E"], + bide: ["7V"], + bind: ["6T", "5T"], + bulletseed: ["7E", "6E", "5E", "4M", "3M"], + captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L7", "7V", "6L7", "5L7", "4L7", "3L6", "3S1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7E", "6E", "5E", "4E", "3E"], + knockoff: ["7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27"], + leechlife: ["7E", "6E", "5E", "4E", "3E"], + magicalleaf: ["7E", "6E", "5E", "4E", "3E"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + poisonjab: ["7M", "7L41"], + poisonpowder: ["7L15", "7V", "6L15", "5L15", "4L15", "3L17"], + powerwhip: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7L39", "7V", "6L39", "5L39", "4L39", "3L37"], + reflect: ["7M", "7V", "6M", "5M", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "5D", "4T"], + slam: ["7L47", "7V", "6L41", "5L41", "4L41", "3L45"], + sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stunspore: ["7L17", "7V", "6L17", "5L17", "4L17", "3L19"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L29", "6L29", "5L29", "4L29", "3L30"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + takedown: ["7V"], + teeterdance: ["3S0"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + vinewhip: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], + weatherball: ["7E", "6E", "5E", "4E"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + wrap: ["7L11", "7V", "6L11", "5L11", "4L11", "3L11"], + wringout: ["7L50", "6L47", "5L47", "4L47"], + }}, + weepinbell: {learnset: { + acid: ["7L24", "7V", "6L23", "5L23", "4L23", "3L24"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + bugbite: ["5T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L39", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + knockoff: ["7L29", "6T", "6L27", "5T", "5L27", "4T", "4L27"], + magicalleaf: ["3S0"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + morningsun: ["3S0"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poisonjab: ["7M", "7L47"], + poisonpowder: ["7L15", "7V", "6L15", "5L15", "4L15", "3L17"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7L44", "7V", "6L39", "5L39", "4L39", "3L42"], + reflect: ["7M", "7V", "6M", "5M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + slam: ["7L54", "7V", "6L41", "5L41", "4L41", "3L54"], + sleeppowder: ["7L13", "7V", "6L13", "5L13", "4L13", "3L15"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stunspore: ["7L17", "7V", "6L17", "5L17", "4L17", "3L19"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L32", "6L29", "5L29", "4L29", "3L33", "3S0"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + vinewhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + worryseed: ["6T", "5T", "4T"], + wrap: ["7L11", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + wringout: ["7L58", "6L47", "5L47", "4L47"], + }}, + victreebel: {learnset: { + acid: ["7V"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + bodyslam: ["7V", "3T"], + bugbite: ["5T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["6T", "5T", "4T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + leafblade: ["7L44", "6L47", "5L47", "4L47"], + leafstorm: ["7L32", "6L47", "5L47", "4L47"], + leaftornado: ["7L1", "6L27", "5L27"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poisonjab: ["7M"], + poisonpowder: ["7V"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + razorleaf: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + reflect: ["7M", "7V", "6M", "5M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeppowder: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spitup: ["7L1", "6L1", "5L1", "4L1", "3L1"], + stockpile: ["7L1", "6L1", "5L1", "4L1", "3L1"], + stunspore: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sweetscent: ["7L1", "6L1", "5L1", "4L1", "3L1"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + vinewhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + worryseed: ["6T", "5T", "4T"], + wrap: ["7V"], + }}, + tentacool: {learnset: { + acid: ["7L10", "7V", "6L10", "5L12", "4L12", "3L19"], + acidspray: ["7L22", "6L22", "5L26"], + acupressure: ["7E", "6E", "5E", "5D", "4E"], + aquaring: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + barrier: ["7L28", "7V", "6L28", "5L29", "4L26", "3L36"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brine: ["7L34", "6L34", "4M"], + bubble: ["7E", "6E", "5E"], + bubblebeam: ["7L25", "7V", "6L19", "5L19", "4L19", "3L25"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E", "3E"], + constrict: ["7L7", "7V", "6L7", "5L8", "4L8", "3L12"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "5D", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + hex: ["7L40", "6L40", "5L43"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L46", "7V", "6L46", "5L47", "4L40", "3L49"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + magiccoat: ["6T", "5T", "4T"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], + muddywater: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L33"], + poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + scald: ["7M", "6M", "5M"], + screech: ["7L37", "7V", "6L37", "5L40", "4L36", "3L43"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "7L43", "6M", "6L43", "5M", "5L50"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7L4", "7V", "6L4", "5L5", "5D", "4L5", "3L6"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L13", "6L13", "5L15", "4L15"], + venoshock: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["7L16", "6T", "6L16", "5L33", "4M", "4L29", "3M"], + whirlpool: ["4M"], + wrap: ["7L19", "7V", "6L19", "5L22", "4L22", "3L30"], + wringout: ["7L49", "6L49", "5L54", "4L43"], + }}, + tentacruel: {learnset: { + acid: ["7L10", "7L1", "7V", "6L1", "5L12", "4L12", "3L19"], + acidspray: ["7L22", "6L22", "5L26"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7L28", "7V", "6L28", "5L29", "4L26", "3L38"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brine: ["7L36", "6L36", "4M"], + bubblebeam: ["7L25", "7V", "6L19", "5L19", "4L19", "3L25"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hex: ["7L44", "6L44", "5L47"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L52", "7V", "6L52", "5L52", "4L49", "3L55"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + magiccoat: ["6T", "5T", "4T"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L32", "6M", "6L32", "5M", "5L38", "4M", "4L36"], + poisonsting: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + reflecttype: ["7L1", "6L1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + screech: ["7L40", "7V", "6L40", "5L43", "4L42", "3L47"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "7L48", "6M", "6L48", "5M", "5L56"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L13", "6L13", "5L15", "4L15"], + venoshock: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["7L16", "6T", "6L16", "5L34", "4M", "4L29", "3M"], + whirlpool: ["4M"], + wrap: ["7L19", "7V", "6L19", "5L22", "4L22", "3L30"], + wringout: ["7L56", "7L1", "6L1", "5L61", "4L55"], + }}, + geodude: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7E", "6E", "5E"], + bide: ["7V"], + block: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L22", "6M", "6L22", "5M", "5L32"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + curse: ["7E", "6E", "5E", "4E"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3T", "3L1"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L40", "7V", "6L40", "5L46", "4L36", "3T", "3L46"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L39", "4M", "4L29", "3M", "3L36"], + endure: ["7E", "6E", "5E", "4M", "3T"], + explosion: ["7M", "7L36", "7V", "6M", "6L36", "5M", "5L43", "4M", "4L32", "3T", "3L41"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flail: ["7E", "6E", "5E", "4E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + hammerarm: ["7E", "6E", "5E", "4E"], + harden: ["7V"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T"], + magnitude: ["7L12", "6L12", "5L15", "4L15", "3L16"], + megapunch: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L4", "6L4", "5L4", "4L4", "3L6"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L30", "6L22", "5L22", "4L25", "3L31"], + rockclimb: ["7E", "6E", "5E", "5D", "4M"], + rockpolish: ["7M", "7L6", "6M", "6L6", "5M", "5L8", "4M", "4L8"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L16", "7V", "6L16", "5L11", "4L11", "3L11"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L18", "4T", "4L22", "3T", "3L26"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7L24", "7V", "6L24", "5L29", "4L18", "3T", "3L21"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L18", "6M", "6L18", "5M", "5L25"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7L28", "6T", "6L28", "5T", "5L36", "5D", "4M"], + stoneedge: ["7M", "7L42", "6M", "6L42", "5M", "5L50", "4M", "4L39"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wideguard: ["7E", "6E"], + }}, + geodudealola: {learnset: { + attract: ["7M"], + autotomize: ["7E"], + block: ["7E"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + charge: ["7L4"], + chargebeam: ["7M"], + confide: ["7M"], + counter: ["7E"], + curse: ["7E"], + defensecurl: ["7L1"], + discharge: ["7L34"], + doubleedge: ["7L40"], + doubleteam: ["7M"], + earthquake: ["7M"], + endure: ["7E"], + explosion: ["7M", "7L36"], + facade: ["7M"], + fireblast: ["7M"], + flail: ["7E"], + flamethrower: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gyroball: ["7M"], + hiddenpower: ["7M"], + magnetrise: ["7E"], + naturepower: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L30"], + rockclimb: ["7E"], + rockpolish: ["7M", "7L6"], + rockslide: ["7M"], + rockthrow: ["7L16"], + rocktomb: ["7M"], + rollout: ["7L10"], + round: ["7M"], + sandstorm: ["7M"], + screech: ["7E"], + selfdestruct: ["7L24"], + sleeptalk: ["7M"], + smackdown: ["7M", "7L18"], + spark: ["7L12"], + stealthrock: ["7L28"], + stoneedge: ["7M", "7L42"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7L22"], + toxic: ["7M"], + voltswitch: ["7M"], + wideguard: ["7E"], + }}, + graveler: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L22", "6M", "6L22", "5M", "5L36"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L50", "7V", "6L50", "5L58", "4L44", "3T", "3L62"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L47", "4M", "4L33", "3M", "3L45"], + endure: ["4M", "3T"], + explosion: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L53", "4M", "4L38", "3T", "3L53"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7V"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T"], + magnitude: ["7L12", "6L12", "5L15", "4L15", "3L16"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L34", "6L22", "5L22", "4L27", "3L37"], + rockclimb: ["4M"], + rockpolish: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L16", "7V", "6L16", "5L11", "4L11", "3L1"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L18", "4T", "4L22", "3T", "3L29"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7L24", "7V", "6L24", "5L31", "4L18", "3T", "3L21"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L18", "6M", "6L18", "5M", "5L27"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7L30", "6T", "6L30", "5T", "5L42", "4M"], + stoneedge: ["7M", "7L54", "6M", "6L54", "5M", "5L64", "4M", "4L49"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + }}, + graveleralola: {learnset: { + attract: ["7M"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + charge: ["7L4", "7L1"], + chargebeam: ["7M"], + confide: ["7M"], + defensecurl: ["7L1"], + discharge: ["7L40"], + doubleedge: ["7L50"], + doubleteam: ["7M"], + earthquake: ["7M"], + explosion: ["7M", "7L44"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gyroball: ["7M"], + hiddenpower: ["7M"], + naturepower: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L34"], + rockpolish: ["7M", "7L6", "7L1"], + rockslide: ["7M"], + rockthrow: ["7L16"], + rocktomb: ["7M"], + rollout: ["7L10"], + round: ["7M"], + sandstorm: ["7M"], + selfdestruct: ["7L24"], + sleeptalk: ["7M"], + smackdown: ["7M", "7L18"], + spark: ["7L12"], + stealthrock: ["7L30"], + stoneedge: ["7M", "7L54"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7L22"], + toxic: ["7M"], + voltswitch: ["7M"], + }}, + golem: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L22", "6M", "6L22", "5M", "5L36"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L1", "3T", "3L1"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L50", "7V", "6L50", "5L58", "4L44", "3T", "3L62"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L47", "4M", "4L33", "3M", "3L45"], + endure: ["4M", "3T"], + explosion: ["7M", "7L44", "7V", "6M", "6L44", "5M", "5L53", "4M", "4L38", "3T", "3L53"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7V"], + headbutt: ["4T"], + heavyslam: ["7L60", "7L1", "6L1", "5L69"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T", "4T"], + magnitude: ["7L12", "6L12", "5L15", "4L15", "3L16"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L34", "6L22", "5L22", "4L27", "3L37"], + rockclimb: ["4M"], + rockpolish: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L16", "7V", "6L16", "5L11", "4L11", "3L1"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "4L22", "3T", "3L29"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7L24", "7V", "6L24", "5L31", "4L18", "3T", "3L21"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L18", "6M", "6L18", "5M", "5L27"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7L30", "6T", "6L30", "5T", "5L42", "4M"], + steamroller: ["7L10", "6L10", "5L18"], + stoneedge: ["7M", "7L54", "6M", "6L54", "5M", "5L64", "4M", "4L49"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + }}, + golemalola: {learnset: { + attract: ["7M"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + charge: ["7L4", "7L1"], + chargebeam: ["7M"], + confide: ["7M"], + defensecurl: ["7L1"], + discharge: ["7L40"], + doubleedge: ["7L50"], + doubleteam: ["7M"], + earthquake: ["7M"], + echoedvoice: ["7M"], + explosion: ["7M", "7L44"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + gyroball: ["7M"], + heavyslam: ["7L60", "7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + naturepower: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockblast: ["7L34"], + rockpolish: ["7M", "7L6", "7L1"], + rockslide: ["7M"], + rockthrow: ["7L16"], + rocktomb: ["7M"], + round: ["7M"], + sandstorm: ["7M"], + selfdestruct: ["7L24"], + sleeptalk: ["7M"], + smackdown: ["7M", "7L18"], + spark: ["7L12"], + stealthrock: ["7L30"], + steamroller: ["7L10"], + stoneedge: ["7M", "7L54"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderpunch: ["7L22"], + toxic: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M"], + }}, + ponyta: {learnset: { + agility: ["7L37", "7V", "6L37", "5L37", "4L33", "3L38"], + allyswitch: ["7E", "6E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bounce: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L42", "3L45"], + captivate: ["7E", "6E", "5E", "4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], + confide: ["7M", "6M"], + doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + doublekick: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L9", "7V", "6L9", "5L9", "4L10", "3L14"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M", "3L53"], + firespin: ["7L25", "7V", "6L25", "5L25", "4L24", "3L25"], + flamecharge: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flamewheel: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L15", "4E", "3E"], + flareblitz: ["7L49", "6L49", "5L49", "4L46"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L5"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "5D", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + horndrill: ["7E", "7V", "6E", "5E", "4E"], + hypnosis: ["7E", "6E", "5E", "4E", "3E"], + incinerate: ["6M", "5M"], + inferno: ["7L33", "6L33", "5L33"], + irontail: ["6T", "5T", "4M", "3M"], + lowkick: ["7E", "6T", "6E", "5T", "5E"], + mimic: ["7V", "3T"], + morningsun: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["3L1"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L17", "7V", "6L17", "5L17", "4L19", "3L19"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + tailwhip: ["7L4", "7V", "6L4", "5L4", "4L6", "3L9"], + takedown: ["7L29", "7V", "6L29", "5L29", "4L28", "3L31"], + thrash: ["7E", "6E", "5E", "5D", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + rapidash: {learnset: { + agility: ["7L37", "7V", "6L37", "5L37", "4L33", "3L38"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bounce: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L47", "3L50"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M", "3L63"], + firespin: ["7L25", "7V", "6L25", "5L25", "4L24", "3L25"], + flamecharge: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + flamethrower: ["7M", "6M", "5M", "4M", "3M", "3S0"], + flamewheel: ["7L13", "6L13", "5L13", "4L15"], + flareblitz: ["7L49", "6L49", "5L49", "4L56"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L1", "6L40", "5L40", "4L40", "3L40"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + horndrill: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + inferno: ["7L33", "6L33", "5L33"], + irontail: ["6T", "5T", "4M", "3M"], + lowkick: ["6T", "5T"], + megahorn: ["7L1", "6L1", "5L1", "4L1"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + rage: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M", "3S0"], + stomp: ["7L17", "7V", "6L17", "5L17", "4L19", "3L19"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["3L1"], + tailwhip: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L29", "7V", "6L29", "5L29", "4L28", "3L31"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + slowpoke: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7L41", "7V", "6L41", "5L41", "4L43", "3L36"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7E", "6E"], + bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + bodyslam: ["7V", "3T"], + brine: ["5D", "4M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L14", "7V", "6L14", "5L14", "5S2", "4L15", "3L17", "3S0"], + curse: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], + dig: ["7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "6L19", "5L19", "5S2", "4L20", "3L24", "3S0"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L5", "7V", "6L5", "5L5", "4L6", "3L6", "3S1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7L23", "7V", "6L23", "5L23", "5S2", "4T", "4L25", "3L29", "3S0"], + healpulse: ["7L58", "6L58", "5L58"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + mefirst: ["7E", "6E", "5E", "4E"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + nightmare: ["3T"], + payday: ["7V"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L45", "4M", "4L48", "3M", "3L40"], + psychup: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L57", "3T", "3L47"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L53", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + slackoff: ["7L36", "6L36", "5L36", "4L39"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + watergun: ["7L9", "7V", "6L9", "5L9", "4L11", "3L13", "3S0"], + waterpulse: ["7L28", "6T", "6L28", "5L28", "5S2", "4M", "4L29", "3M"], + whirlpool: ["4M"], + wonderroom: ["7E", "6T", "6E", "5T", "5E"], + yawn: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], + zenheadbutt: ["7L32", "7E", "6T", "6L32", "6E", "5T", "5L32", "5E", "4T", "4L34", "4E"], + }}, + slowbro: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["6T", "5T"], + amnesia: ["7L43", "7V", "6L43", "5L43", "4L47", "3L36"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L14", "7V", "6L14", "5L14", "4L15", "3L17"], + counter: ["7V", "3T"], + curse: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dig: ["7V", "6M", "5M", "4M", "3M"], + disable: ["7L19", "7V", "6L19", "5L19", "4L20", "3L24"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7L23", "7V", "6L23", "5L23", "4T", "4L25", "3L29"], + healpulse: ["7L68", "7L1", "6L1", "5L68"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + irontail: ["6T", "6S0", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + payday: ["7V"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L54", "3M", "3L44"], + psychup: ["7M", "7L62", "6M", "6L62", "5M", "5L62", "4M", "4L67", "3T", "3L55"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "7L55", "6M", "6L55", "5M", "5L55", "4M", "4L61", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "6S0", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + slackoff: ["7L36", "6L36", "6S0", "5L36", "4L41"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "6S0", "5M", "4M"], + watergun: ["7L9", "7V", "6L9", "5L9", "4L11", "3L13"], + waterpulse: ["7L28", "6T", "6L28", "5L28", "4M", "4L29", "3M"], + whirlpool: ["4M"], + withdraw: ["7L1", "7V", "6L37", "5L37", "4L37", "3L37"], + wonderroom: ["6T", "5T"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32", "4T", "4L34"], + }}, + slowking: {learnset: { + afteryou: ["6T", "5T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L14", "6L14", "5L14", "4L15", "3L17"], + counter: ["3T"], + curse: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7L19", "6L19", "5L19", "4L20", "3L24"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L5", "6L5", "5L5", "4L6", "3L6"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7L23", "6L23", "5L23", "4T", "4L25", "3L29"], + healpulse: ["7L58", "7L1", "6L1", "5L58"], + hiddenpower: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L36", "6L36", "5L36", "4L39"], + naturalgift: ["4M"], + nightmare: ["3T"], + powergem: ["7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L48", "3M", "3L40"], + psychup: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L57", "3T", "3L47"], + psyshock: ["7M", "6M", "5M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L43", "3T", "3L36"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + trumpcard: ["7L49", "6L49", "5L49", "4L53"], + watergun: ["7L9", "6L9", "5L9", "4L11", "3L13"], + waterpulse: ["7L28", "6T", "6L28", "5L28", "4M", "4L29", "3M"], + whirlpool: ["4M"], + wonderroom: ["6T", "5T"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32", "4T", "4L34"], + }}, + magnemite: {learnset: { + bide: ["7V"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + discharge: ["7L37", "6L37", "5L43", "4L38"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + electroball: ["7L29", "6L29", "5L27"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "7L31", "6M", "6L31", "5M", "5L35", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gravity: ["6T", "5T", "5D", "4T"], + gyroball: ["7M", "7L47", "6M", "6L47", "5M", "5L54", "4M", "4L49"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L13", "6M", "5M", "4M"], + lockon: ["7L41", "6L41", "5L30", "4L27", "3L32"], + magiccoat: ["6T", "5T", "4T"], + magnetbomb: ["7L7", "6L17", "5L33", "4L30"], + magnetrise: ["7L43", "6T", "6L43", "5T", "5L49", "4T", "4L46"], + metalsound: ["7L25", "6L25", "5L1", "5D", "4L1", "3L1"], + mimic: ["7V", "3T"], + mirrorshot: ["7L23", "6L23", "5L46", "4L43"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "5D", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + screech: ["7L35", "7V", "6L35", "5L38", "4L33", "3L44"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + sonicboom: ["7L17", "7V", "6L11", "5L14", "4L14", "3L16"], + spark: ["7L19", "6L19", "5L22", "4L22", "3L26"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L1", "7V", "6L4", "5L11", "4L11", "3L11"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T", "3L38"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["7L5", "7V", "6L7", "5L6", "5D", "4L6", "3L6"], + thunderwave: ["7M", "7L11", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L49", "6L49", "5L59", "4L54", "3L50"], + }}, + magneton: {learnset: { + bide: ["7V"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + discharge: ["7L43", "6L43", "5L46", "4L40"], + doubleedge: ["7V", "3T", "3S0"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + electricterrain: ["7L1", "6L1"], + electroball: ["7L29", "6L29", "5L27"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "7L33", "6M", "6L33", "5M", "5L39", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "7L59", "6M", "6L59", "5M", "5L60", "4M", "4L54"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L13", "6M", "5M", "4M"], + lockon: ["7L49", "6L49", "5L30", "4L27", "3L35"], + magiccoat: ["6T", "5T", "4T"], + magnetbomb: ["7L7", "7L1", "6L17", "5L34", "4L30"], + magnetrise: ["7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], + metalsound: ["7L25", "6L25", "5L1", "4L1", "3L1"], + mimic: ["7V", "3T"], + mirrorshot: ["7L23", "6L23", "5L50", "4L46"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + screech: ["7L39", "7V", "6L39", "5L40", "4L34", "3L53"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + sonicboom: ["7L17", "7V", "6L1", "5L14", "4L14", "3L16"], + spark: ["7L19", "6L19", "5L22", "4L22", "3L26"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thundershock: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L11", "7V", "6M", "6L13", "5M", "5L17", "4M", "4L17", "3T", "3L21"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L1", "6L1", "5L1", "4L1", "3L44"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L63", "7L1", "6L1", "5L66", "4L60", "3L62"], + }}, + magnezone: {learnset: { + barrier: ["7L1", "6L1", "5L1", "4L1"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + discharge: ["7L43", "6L43", "5L46", "4L40"], + doubleteam: ["7M", "6M", "5M", "4M"], + electricterrain: ["7L1", "6L1"], + electroball: ["7L29", "6L29", "5L27"], + electroweb: ["6T", "5T"], + endure: ["4M"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "7L33", "6M", "6L33", "5M", "5L39", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "7L59", "6M", "6L59", "5M", "5L60", "4M", "4L54"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L13", "6M", "5M", "4M"], + lockon: ["7L49", "6L49", "5L30", "4L27"], + magiccoat: ["6T", "5T", "4T"], + magnetbomb: ["7L7", "7L1", "6L17", "5L34", "4L30"], + magneticflux: ["7L1", "6L1"], + magnetrise: ["7L53", "6T", "6L53", "5T", "5L54", "4T", "4L50"], + metalsound: ["7L25", "6L25", "5L1", "4L1"], + mirrorcoat: ["7L1", "6L1", "5L1", "4L1"], + mirrorshot: ["7L23", "6L23", "5L50", "4L46"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + screech: ["7L39", "6L39", "5L40", "4L34"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + sonicboom: ["7L17", "6L1", "5L14", "4L14"], + spark: ["7L19", "6L19", "5L22", "4L22"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7L1", "6L1", "5L1", "4L1"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thundershock: ["7L5", "7L1", "6L1", "5L1", "4L1"], + thunderwave: ["7M", "7L11", "6M", "6L13", "5M", "5L17", "4M", "4L17"], + toxic: ["7M", "6M", "5M", "4M"], + triattack: ["7L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L63", "7L1", "6L1", "5L66", "4L60"], + }}, + farfetchd: {learnset: { + acrobatics: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + aerialace: ["7M", "7L9", "6M", "6L9", "5M", "5L13", "4M", "4L13", "3M", "3S0"], + agility: ["7L31", "7V", "6L31", "5L31", "4L31", "3L36"], + aircutter: ["7L21", "6L21", "5L21", "4T", "4L21"], + airslash: ["7L49", "6L49", "5L49", "4L37"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bravebird: ["7L55", "7L1", "6L1", "5L55"], + brutalswing: ["7M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L43", "3L46"], + featherdance: ["7E", "6E", "5E", "4E", "3E"], + feint: ["7L43", "6L43", "5L43", "4L43"], + flail: ["7E", "6E", "5E", "4E", "3E"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L7", "7V", "6L7", "5L7", "4L7", "3L16"], + furycutter: ["7L1", "6L1", "5L1", "5D", "4T", "4L1", "3L26"], + gust: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["7L13", "6T", "6L13", "5T", "5L9", "4T", "4L9", "3L21"], + lastresort: ["6T", "5T", "4T"], + leafblade: ["7E", "6E", "5E", "5D", "4E"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L11"], + mimic: ["7V", "3T"], + mirrormove: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + naturalgift: ["4M"], + nightslash: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4L33", "4E"], + ominouswind: ["4T"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + pluck: ["5M", "4M"], + poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L6"], + secretpower: ["6M", "4M", "3M"], + simplebeam: ["7E", "6E"], + skullbash: ["7V"], + skyattack: ["6T", "5T"], + slash: ["7L19", "7V", "6L19", "5L19", "4L19", "3L41", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "4E", "3M", "3E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7L25", "7V", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L31", "3S0"], + tailwind: ["6T", "5T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trumpcard: ["7E", "6E", "5E"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7V"], + wish: ["3S0"], + workup: ["7M", "5M"], + yawn: ["3S0"], + }}, + doduo: {learnset: { + acupressure: ["7L33", "6L28", "5L28", "4L28"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L26", "7V", "6L33", "5L37", "4L37", "3L45"], + aircutter: ["4T"], + assurance: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + bravebird: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doublehit: ["7L22", "6L25", "5L32", "4L32"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L43", "7V", "6L37", "5L41", "4L41", "3L37"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L47", "7E", "6T", "6L45", "6E", "5T", "5L46", "5E", "4T", "4L46", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "6E", "5E", "5D", "4E", "3E"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L12", "7V", "6L13", "5L14", "4L14", "3L13"], + growl: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + haze: ["7E", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + jumpkick: ["7L40"], + knockoff: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + mirrormove: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L19", "6L21", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L15", "6L17", "5L19", "4L19", "3L9"], + quickattack: ["7L5", "7E", "6L5", "6E", "5L5", "5E", "4L5", "4E", "3E"], + rage: ["7L8", "7V", "6L9", "5L10", "4L10", "3L25"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "5D", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + skyattack: ["7V", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L36"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L50", "6L49", "5L50"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V", "3L21"], + uproar: ["7L29", "6T", "6L23", "5T", "5L23", "4T", "4L23", "3L33"], + whirlwind: ["7V"], + workup: ["7M", "5M"], + }}, + dodrio: {learnset: { + acupressure: ["7L34", "6L28", "5L28", "4L28"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L26", "7V", "6L35", "5L41", "4L41", "3L60", "3S0"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doublehit: ["7L22"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L47", "7V", "6L41", "5L47", "4L47", "3L47", "3S0"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L52", "6T", "6L53", "5T", "5L54", "4T", "4L54"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L12", "7V", "6L13", "5L14", "4L14", "3L1"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + jumpkick: ["7L43"], + knockoff: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L19", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L15", "6L17", "5L19", "4L19", "3L1"], + quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + rage: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L25"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + skyattack: ["7V", "6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L38"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L56", "6L59", "5L60"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L1", "7V", "6L25", "5L34", "4L34", "3L21", "3S0"], + uproar: ["7L29", "6T", "6L23", "5T", "5L23", "4T", "4L23", "3L38"], + whirlwind: ["7V"], + workup: ["7M", "5M"], + }}, + seel: {learnset: { + aquajet: ["7L31", "6L31", "5L31", "4L31"], + aquaring: ["7L23", "6L23", "5L23", "4L23"], + aquatail: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L27", "7V", "6L27", "5L27", "4L27", "3L21"], + belch: ["7E", "6E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brine: ["7L33", "6L33", "5L33", "4M", "4L33"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dive: ["7L41", "6M", "6L41", "5M", "5L41", "4T", "4L41", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3E"], + endure: ["4M", "3T"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L3", "7V", "6L3", "5L3", "4L3", "3L9"], + hail: ["7M", "7L53", "6M", "6L53", "5M", "5L53", "4M", "3M"], + headbutt: ["7L1", "7V", "6L1", "5L1", "5D", "4T", "4L1", "3L1"], + helpinghand: ["3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + horndrill: ["7E", "7V", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L41", "3S0"], + iceshard: ["7L17", "6L17", "5L17", "4L17"], + iciclespear: ["7E", "6E", "5E", "5D", "4E", "3E"], + icywind: ["7L11", "6T", "6L11", "5T", "5L11", "4T", "4L11", "3T", "3L17"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + lick: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + payday: ["7V"], + perishsong: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L21", "7V", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3M", "3L29"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L51", "6M", "6L51", "5M", "5L51", "4M", "4L51", "3M", "3L49", "3S0"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + skullbash: ["7V"], + slam: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E"], + stockpile: ["7E", "6E", "5E", "4E"], + strength: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E"], + takedown: ["7L37", "7V", "6L37", "5L37", "4L37", "3L37"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + watersport: ["7L7", "6L7", "5L7", "4L7"], + whirlpool: ["4M"], + }}, + dewgong: {learnset: { + aquajet: ["7L31", "6L31", "5L31", "4L31"], + aquaring: ["7L23", "6L23", "5L23", "4L23"], + aquatail: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L43"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L27", "7V", "6L27", "5L27", "4L27", "3L1"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brine: ["7L33", "6L33", "5L33", "4M", "4L33"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["7L45", "6M", "6L45", "5M", "5L45", "4T", "4L41", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L13", "6L13", "5L13", "4L13"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "4M", "3M"], + headbutt: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + horndrill: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L55", "4M", "4L47", "3M", "3L51"], + iceshard: ["7L17", "6L17", "5L17", "4L17"], + icywind: ["7L11", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + irontail: ["6T", "5T"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + payday: ["7V"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L21", "7V", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3M", "3L29"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "4M", "4L51", "3M", "3L64"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L1", "6L34", "5L34", "4L34", "3L34"], + signalbeam: ["7L7", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7L39", "7V", "6L39", "5L39", "4L37", "3L42"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + grimer: {learnset: { + acidarmor: ["7L43", "7V", "6L40", "5L39", "4L39", "3L34"], + acidspray: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L46", "6L46"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E", "3E"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7L12", "7V", "6L12", "5L12", "4L12", "3L8"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + explosion: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L26", "6M", "6L26", "5M", "5L28", "4M", "4L28"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gunkshot: ["7L40", "6T", "6L40", "5T", "5L49", "4T", "4L44"], + harden: ["7L4", "7V", "6L4", "5L4", "4L4", "3L4"], + haze: ["7E", "6E", "5E", "5D", "4E", "3E"], + helpinghand: ["3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + imprison: ["7E", "6E", "5E", "4E", "3E"], + incinerate: ["6M", "5M"], + infestation: ["7M", "6M"], + lick: ["7E", "6E", "5E", "4E", "3E"], + meanlook: ["7E", "6E", "5E", "4E", "3E"], + megadrain: ["7V"], + memento: ["7L48", "6L48", "5L52", "4L49", "3L53"], + mimic: ["7V", "3T"], + minimize: ["7L21", "7V", "6L18", "5L17", "4L17", "3L19", "3S0"], + mudbomb: ["7L18", "6L18", "5L23", "4L23"], + mudslap: ["7L7", "6L7", "5L7", "4T", "4L7", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisongas: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E"], + screech: ["7L37", "7V", "6L32", "5L33", "4L33", "3L26"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowpunch: ["7E", "6E", "5E", "4E", "3E", "3S0"], + shadowsneak: ["7E", "6E", "5E", "5D", "4E"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L15", "7V", "6L15", "5L20", "4L20", "3L13"], + sludgebomb: ["7M", "7L29", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L43", "3S0"], + sludgewave: ["7M", "7L32", "6M", "6L32", "5M", "5L44"], + snore: ["6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E"], + stockpile: ["7E", "6E", "5E", "4E"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + }}, + grimeralola: {learnset: { + acidarmor: ["7L43"], + acidspray: ["7L15"], + assurance: ["7E"], + attract: ["7M"], + belch: ["7L46"], + bite: ["7L7", "7S0"], + brutalswing: ["7M"], + clearsmog: ["7E"], + confide: ["7M"], + crunch: ["7L32"], + curse: ["7E"], + disable: ["7L12"], + doubleteam: ["7M"], + embargo: ["7M"], + explosion: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fling: ["7M", "7L26"], + frustration: ["7M"], + gunkshot: ["7L40"], + harden: ["7L4", "7S0"], + hiddenpower: ["7M"], + imprison: ["7E"], + infestation: ["7M"], + knockoff: ["7L29"], + meanlook: ["7E"], + memento: ["7L48"], + minimize: ["7L21"], + payback: ["7M"], + poisonfang: ["7L18"], + poisongas: ["7L1", "7S0"], + poisonjab: ["7M"], + pound: ["7L1", "7S0"], + protect: ["7M"], + pursuit: ["7E"], + quash: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + scaryface: ["7E"], + screech: ["7L37"], + shadowball: ["7M"], + shadowsneak: ["7E"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snarl: ["7M"], + spite: ["7E"], + spitup: ["7E"], + stockpile: ["7E"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swallow: ["7E"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], + toxic: ["7M"], + venoshock: ["7M"], + }}, + muk: {learnset: { + acidarmor: ["7L46", "7V", "6L43", "5L42", "4L44", "3L34"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L52", "6L52"], + bide: ["7V"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7L12", "7V", "6L12", "5L12", "4L12", "3L8"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L26", "6M", "6L26", "5M", "5L28", "4M", "4L28"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["7L40", "6T", "6L40", "5T", "5L58", "4T", "4L54"], + harden: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + infestation: ["7M", "6M"], + megadrain: ["7V"], + memento: ["7L57", "6L57", "5L64", "4L65", "3L61"], + mimic: ["7V", "3T"], + minimize: ["7L21", "7V", "6L18", "5L17", "4L17", "3L19"], + mudbomb: ["7L18", "6L18", "5L23", "4L23"], + mudslap: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisongas: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + screech: ["7L37", "7V", "6L32", "5L33", "4L33", "3L26"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L15", "7V", "6L15", "5L20", "4L20", "3L13"], + sludgebomb: ["7M", "7L29", "6M", "6L26", "5M", "5L36", "4M", "4L36", "3M", "3L47"], + sludgewave: ["7M", "7L32", "6M", "6L32", "5M", "5L50"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + venomdrench: ["7L1", "6L38"], + venoshock: ["7M", "6M", "5M"], + }}, + mukalola: {learnset: { + acidarmor: ["7L46"], + acidspray: ["7L15"], + attract: ["7M"], + belch: ["7L52"], + bite: ["7L7", "7L1"], + brickbreak: ["7M"], + brutalswing: ["7M"], + confide: ["7M"], + crunch: ["7L32"], + darkpulse: ["7M"], + disable: ["7L12"], + doubleteam: ["7M"], + embargo: ["7M"], + explosion: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fling: ["7M", "7L26"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + gunkshot: ["7L40"], + harden: ["7L4", "7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + infestation: ["7M"], + knockoff: ["7L29"], + memento: ["7L57"], + minimize: ["7L21"], + payback: ["7M"], + poisonfang: ["7L18"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + quash: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + screech: ["7L37"], + shadowball: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snarl: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], + toxic: ["7M"], + venomdrench: ["7L1"], + venoshock: ["7M"], + }}, + shellder: {learnset: { + aquaring: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L37", "7V", "6L37", "5L37", "4L32", "3L17", "3S0", "3S2"], + avalanche: ["7E", "6E", "5E"], + barrier: ["7E", "6E", "5E", "5D", "4E", "3E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brine: ["7L44", "6L44", "5L44", "4M", "4L44"], + bubblebeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + captivate: ["4M"], + clamp: ["7L25", "7V", "6L25", "5L25", "4L25", "3L41"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L61", "6L61", "5L61"], + icebeam: ["7M", "7L52", "7V", "6M", "6L52", "5M", "5L52", "4M", "4L49", "3M", "3L49"], + iceshard: ["7L28", "6L28", "5L28", "4L28"], + iciclespear: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3L8", "3E", "3S0", "3S1"], + icywind: ["6T", "5T", "5D", "4T", "3T"], + irondefense: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L40"], + leer: ["7L20", "7V", "6L20", "5L20", "4L20", "3L33"], + mimic: ["7V", "3T"], + mudshot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16", "3M", "3L25"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], + razorshell: ["7L32", "6L32", "5L32"], + reflect: ["7V"], + refresh: ["3S2"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7E", "6E", "5E", "4E"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + shellsmash: ["7L56", "6L56", "5L56"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7L8", "7V", "6L8", "5L8", "4L8", "3L9", "3S0"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + takedown: ["7E", "7V", "6E", "5E", "4E", "3E", "3S2"], + teleport: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + twineedle: ["7E", "6E", "5E"], + watergun: ["7L1", "7V"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7L40", "6L40", "5L40", "4M", "4L37"], + withdraw: ["7L4", "7V", "6L4", "5L4", "5D", "4L4", "3L1", "3S0", "3S1"], + }}, + cloyster: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bubblebeam: ["7V"], + captivate: ["4M"], + clamp: ["7V"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "5S0", "4M", "3M"], + hydropump: ["7L1", "6L1"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + iciclecrash: ["7L50", "6L50", "5L52"], + iciclespear: ["5S0"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["3C"], + razorshell: ["5S0"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["5S0"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + shellsmash: ["7L1", "6L1"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + spikecannon: ["7L13", "7V", "6L13", "5L13", "4L40", "3L41"], + spikes: ["7L28", "6L28", "5L28", "4L28", "3L33"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + teleport: ["7V"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L1", "6L1", "5L1", "4L1"], + triattack: ["7V"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + withdraw: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + gastly: {learnset: { + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + confuseray: ["7L19", "7V", "6L19", "5L19", "4L19", "3L21"], + curse: ["7L12", "6L12", "5L12", "4L12", "3L13"], + darkpulse: ["7M", "7L36", "6M", "6L36", "5T", "5L36", "4M", "4L36"], + dazzlinggleam: ["7M", "6M"], + destinybond: ["7L40", "6L40", "5L40", "4L40", "3L33"], + disable: ["7E", "6E", "5E", "5D", "4E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L28"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + grudge: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7E", "6E", "5E", "4E", "3E"], + hex: ["7L43", "6L43", "5L43"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L8", "6L8", "5L8", "4L8", "3L13"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + nightmare: ["7L47", "6L47", "5L47", "4L43", "3T", "3L41"], + nightshade: ["7L15", "7V", "6L15", "5L15", "4L15", "3L16"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "4M", "4L26"], + perishsong: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7E", "7V", "6E", "5E", "4E", "3E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflecttype: ["7E", "6E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L36"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["5D"], + smog: ["7E", "6E", "5E"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7L5", "6T", "6L5", "5T", "5L5", "4T", "4L5", "3L8"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L22", "6L22", "5L22", "4T", "4L22"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7V"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], + wonderroom: ["6T", "5T"], + }}, + haunter: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L19", "7V", "6L19", "5L19", "5S0", "4L19", "3L21"], + curse: ["7L12", "6L12", "5L12", "4L12", "3L13"], + darkpulse: ["7M", "7L44", "6M", "6L44", "5T", "5L44", "4M", "4L44"], + dazzlinggleam: ["7M", "6M"], + destinybond: ["7L50", "6L50", "5L50", "4L50", "3L39"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3T", "3L31"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T"], + fling: ["7M", "6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + hex: ["7L55", "6L55", "5L55"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L8", "6L8", "5L8", "4L8", "3L13"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + nightmare: ["7L61", "6L61", "5L61", "4L55", "3T", "3L53"], + nightshade: ["7L15", "7V", "6L15", "5L15", "4L15", "3L16"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S0", "4M", "4L28"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3M", "3L45"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowpunch: ["7L1", "6L25", "5L25", "5S0", "4L25", "3L25"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L22", "6L22", "5L22", "5S0", "4T", "4L22"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7V"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + }}, + gengar: {learnset: { + astonish: ["6S4"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L19", "7V", "6L19", "6S1", "6S2", "6S4", "5L19", "4L19", "3L21", "3S0"], + counter: ["7V", "3T"], + curse: ["7L12", "6L12", "5L12", "4L12", "3L13", "3S0"], + darkpulse: ["7M", "7L44", "6M", "6L44", "5T", "5L44", "4M", "4L44"], + dazzlinggleam: ["7M", "6M"], + destinybond: ["7L50", "6L50", "6S3", "5L50", "4L50", "3L39"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3T", "3L31"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hex: ["7L55", "6L55", "5L55"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "6S5", "6S6", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "6S5", "6S6", "5L1", "4L1", "3L1"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + lick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L8", "6L8", "6S5", "6S6", "5L8", "4L8", "3L13"], + megadrain: ["7V"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + nightmare: ["7L61", "6L61", "5L61", "4L55", "3T", "3L53"], + nightshade: ["7L15", "7V", "6L15", "6S2", "5L15", "4L15", "3L16", "3S0"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "6S1", "6S5", "6S6", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "7L33", "6M", "6L33", "6S3", "6S4", "5M", "5L33", "4M", "4L33", "3M", "3L45"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowpunch: ["7L1", "6L25", "6S1", "6S2", "5L25", "4L25", "3L25"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "6S3", "5M", "4M", "3M"], + sludgewave: ["6S4"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1", "3S0"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L22", "6L22", "6S1", "6S2", "5L22", "4T", "4L22"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "6S3", "5M", "4M"], + wonderroom: ["6T", "5T"], + }}, + onix: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["7L1", "7V", "6T", "6L1", "5T", "5L1", "5D", "4L1", "3L8"], + block: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + bodyslam: ["7V", "3T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7L4", "6L4", "5L46", "4L38"], + defensecurl: ["7E", "6E", "5E", "4E"], + dig: ["7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "3M"], + doubleedge: ["7L49", "7V", "6L49", "5L57", "4L46", "3T", "3L56"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7L25", "6L25", "5L41", "4L33", "3L30"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "7L20", "6M", "6L20", "5M", "4M"], + harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L19"], + headbutt: ["4T"], + heavyslam: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["7L40", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rage: ["7L13", "7V", "6L13", "5L14", "4L14", "3L23"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7E", "6E", "5E", "4E"], + rockclimb: ["7E", "6E", "5E", "5D", "4M"], + rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L30", "4M", "4L30"], + rockslide: ["7M", "7L34", "7V", "6M", "6L34", "5M", "5L34", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L7", "7V", "6L7", "5L9", "4L9", "3L12"], + rocktomb: ["7M", "7L10", "6M", "6L10", "5M", "5L17", "4M", "4L17", "3M"], + rollout: ["7E", "6E", "5E", "4T", "4E"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L52", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], + sandtomb: ["7L37", "6L37", "5L54", "4L41", "3L49"], + screech: ["7L31", "7V", "6L31", "5L6", "4L6", "3L1"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7V", "3T"], + skullbash: ["7V"], + slam: ["7L28", "7V", "6L28", "5L33", "4L25", "3L37"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7L16", "7E", "6T", "6L16", "6E", "5T", "5L38", "5E", "5D", "4M"], + stoneedge: ["7M", "7L46", "6M", "6L46", "5M", "5L62", "4M", "4L49"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + }}, + steelix: {learnset: { + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L19", "6L19", "5L30"], + bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1", "3L8"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L37", "6L37", "5L54", "4L41", "3L49"], + curse: ["7L4", "6L4", "5L46", "4L38"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["7L43", "6M", "6L43", "5M", "5L43", "4M", "3M"], + doubleedge: ["7L49", "6L49", "5L57", "4L46", "3T", "3L56"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonbreath: ["7L25", "6L25", "5L41", "4L33", "3L30"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "7L20", "6M", "6L20", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L19"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + ironhead: ["6T", "5T", "4T"], + irontail: ["7L40", "6T", "6L40", "5T", "5L49", "4M", "4L38", "3M", "3L45"], + magnetrise: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M"], + rage: ["7L13", "6L13", "5L14", "4L14", "3L23"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M", "4L30"], + rockslide: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L7", "6L7", "5L9", "4L9", "3L12"], + rocktomb: ["7M", "7L10", "6M", "6L10", "5M", "5L17", "4M", "4L17", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L52", "6M", "6L52", "5M", "5L25", "4M", "4L22", "3M", "3L33"], + screech: ["7L31", "6L31", "5L6", "4L6", "3L1"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + slam: ["7L28", "6L28", "5L33", "4L25", "3L37"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7L16", "6T", "6L16", "5T", "5L38", "4M"], + stoneedge: ["7M", "7L46", "6M", "6L46", "5M", "5L62", "4M", "4L49"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + }}, + drowzee: {learnset: { + assist: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bellydrum: ["3S0"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L9", "7V", "6L9", "5L9", "4L9", "3L11"], + counter: ["7V", "3T"], + dazzlinggleam: ["7M", "6M"], + disable: ["7L5", "7V", "6L5", "5L5", "4L7", "3L7"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "5D", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + flash: ["7V", "6M", "5M", "4M", "3M"], + flatter: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L61", "6L61", "5L61", "4L53", "3L45"], + grassknot: ["7M", "6M", "5M", "4M"], + guardswap: ["7E", "6E", "5E", "4E"], + headbutt: ["7L29", "7L13", "7V", "6L13", "5L13", "4T", "4L15", "3L17"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meditate: ["7L21", "7V", "6L21", "5L21", "4L21", "3L27"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + nastyplot: ["7L53", "7E", "6L53", "6E", "5L53", "5E", "4L43", "4E"], + naturalgift: ["4M"], + nightmare: ["3T"], + poisongas: ["7L17", "7V", "6L17", "5L17", "4L18", "3L21"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L25", "6L25", "5L25", "4L26"], + psychic: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L40", "3M", "3L31"], + psychocut: ["7E", "6E", "5E", "5D", "4E"], + psychup: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L29", "3T", "3L37"], + psyshock: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "3T"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L37", "3T", "3L41"], + synchronoise: ["7L37", "6L37", "5L37"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wish: ["3S0"], + zenheadbutt: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L50"], + }}, + hypno: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + counter: ["7V", "3T"], + dazzlinggleam: ["7M", "6M"], + disable: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L61", "7L1", "6L1", "5L61", "4L69", "3L57"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["7L29", "7L13", "7V", "6L13", "5L13", "4T", "4L15", "3L17"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + icepunch: ["6T", "5T", "4T", "3T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meditate: ["7L21", "7V", "6L21", "5L21", "4L21", "3L29", "3S0"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + nastyplot: ["7L53", "7L1", "6L1", "5L53", "4L55"], + naturalgift: ["4M"], + nightmare: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + poisongas: ["7L17", "7V", "6L17", "5L17", "4L18", "3L21"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L25", "6L25", "5L25", "4L28"], + psychic: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L49", "4M", "4L50", "3M", "3L35", "3S0"], + psychup: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3T", "3L43"], + psyshock: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M", "3S0"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "3T"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L45", "3T", "3L49"], + switcheroo: ["7L1", "6L1", "5L1", "4L1"], + synchronoise: ["7L37", "6L37", "5L37"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L64"], + }}, + krabby: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + allyswitch: ["7E", "6E"], + amnesia: ["7E", "6E", "5E", "5D", "4E", "3E"], + ancientpower: ["7E", "6E", "5E", "4T", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7E", "7V", "6E", "5E"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L39", "6L39", "5L39", "4M", "4L39"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L15", "7V", "6L15", "5L15", "4L15"], + captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + crabhammer: ["7L41", "7V", "6L41", "5L41", "4L41", "3L45"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "4E", "3M", "3E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + flail: ["7L45", "7E", "6L45", "6E", "5L45", "5E", "4L45", "4E", "3L49", "3E"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + guillotine: ["7L31", "7V", "6L31", "5L31", "4L31", "3L34"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L11", "7V", "6L11", "5L11", "4L11", "3L16"], + haze: ["7E", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + leer: ["7L9", "7V", "6L9", "5L9", "4L9", "3L5"], + metalclaw: ["7L21", "6L21", "5L21", "4L21"], + mimic: ["7V", "3T"], + mudshot: ["7L19", "6L19", "5L19", "4L19", "3L23"], + mudslap: ["4T", "3T"], + mudsport: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + protect: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L38"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "5D", "4M", "3M"], + slam: ["7L35", "7E", "6L35", "6E", "5L35", "5E", "4L35", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stomp: ["7L25", "7V", "6L25", "5L25", "4L25", "3L27"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vicegrip: ["7L5", "7V", "6L5", "5L5", "5D", "4L5", "3L12"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + kingler: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L51", "6L51", "5L51", "4M", "4L51"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L15", "7V", "6L15", "5L15", "4L15"], + captivate: ["4M"], + confide: ["7M", "6M"], + crabhammer: ["7L56", "7V", "6L56", "5L56", "4L56", "3L57"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + flail: ["7L63", "6L63", "5L63", "4L63", "3L65"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + guillotine: ["7L37", "7V", "6L37", "5L37", "4L37", "3L38"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L11", "7V", "6L11", "5L11", "4L11", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L9", "7L1", "7V", "6L1", "5L1", "4L9", "3L1"], + metalclaw: ["7L21", "6L21", "5L21", "4L21", "3L1"], + mimic: ["7V", "3T"], + mudshot: ["7L19", "6L19", "5L19", "4L19", "3L23"], + mudslap: ["4T", "3T"], + mudsport: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + protect: ["7M", "7L32", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L42"], + quash: ["7M", "6M", "5M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + slam: ["7L44", "6L44", "5L44", "4L44"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stomp: ["7L25", "7V", "6L25", "5L25", "4L25", "3L27"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vicegrip: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wideguard: ["7L1", "6L1", "5L1"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + voltorb: {learnset: { + bide: ["7V"], + charge: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + chargebeam: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L26"], + confide: ["7M", "6M"], + discharge: ["7L37", "6L37"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + eerieimpulse: ["7L6", "6L6"], + electroball: ["7L22", "6L22", "5L29"], + endure: ["4M", "3T"], + explosion: ["7M", "7L41", "7V", "6M", "6L41", "5M", "5L47", "4M", "4L43", "3T", "3L46"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "7L46", "6M", "6L43", "5M", "5L43", "4M", "4L40"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + lightscreen: ["7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L37"], + magiccoat: ["6T", "5T", "4T"], + magnetrise: ["7L34", "6T", "6L34", "5T", "5L40", "4T", "4L36"], + mimic: ["7V", "3T"], + mirrorcoat: ["7L48", "6L48", "5L50", "4L47", "3L49", "3S0"], + naturalgift: ["5D", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L11", "6L11", "5L15", "4T", "4L15", "3T", "3L32"], + round: ["7M", "6M", "5M"], + screech: ["7L13", "7V", "6L13", "5L19", "4L19", "3L8"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L26", "7V", "6L26", "5L33", "4L29", "3T", "3L27"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "5D", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + sonicboom: ["7L4", "7V", "6L4", "5L8", "4L8", "3L15"], + spark: ["7L9", "6L9", "5L12", "4L12", "3L21", "3S0"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L20", "7V", "6L20", "5L36", "4T", "4L33", "3T", "3L42", "3S0"], + tackle: ["7L1", "7V", "6L1", "5L5", "4L5", "3L1"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + electrode: {learnset: { + bide: ["7V"], + charge: ["7L1", "6L1", "5L1", "4L1", "3L1"], + chargebeam: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L26"], + confide: ["7M", "6M"], + discharge: ["7L41", "6L41"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + eerieimpulse: ["7L6", "7L1", "6L6"], + electroball: ["7L22", "6L22", "5L29"], + endure: ["4M", "3T"], + explosion: ["7M", "7L47", "7V", "6M", "6L47", "5M", "5L57", "4M", "4L51", "3T", "3L54"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "7L54", "6M", "6L51", "5M", "5L51", "4M", "4L46"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + lightscreen: ["7M", "7L29", "7V", "6M", "6L26", "5M", "5L26", "4M", "4L22", "3M", "3L41"], + magiccoat: ["6T", "5T", "4T"], + magneticflux: ["7L1", "6L1"], + magnetrise: ["7L36", "6T", "6L36", "5T", "5L46", "4T", "4L40"], + mimic: ["7V", "3T"], + mirrorcoat: ["7L58", "6L58", "5L62", "4L57", "3L59"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L11", "6L11", "5L15", "4T", "4L15", "3T", "3L34"], + round: ["7M", "6M", "5M"], + screech: ["7L13", "7V", "6L13", "5L19", "4L19", "3L1"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L26", "7V", "6L26", "5L35", "4L29", "3T", "3L27"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + sonicboom: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + spark: ["7L9", "6L1", "5L1", "4L1", "3L21"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L20", "7V", "6L20", "5L40", "4T", "4L35", "3T", "3L48"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + exeggcute: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrage: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + bestow: ["7L50", "6L50", "5L53"], + bide: ["7V"], + block: ["7E", "6T", "6E", "5T", "5E"], + bulletseed: ["7L17", "6L17", "5L17", "4M", "4L17", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L27", "6L27", "5L27", "4L27", "3L19"], + curse: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + eggbomb: ["7V"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + extrasensory: ["7L47", "6L47", "5L47"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7E", "6E"], + gravity: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + infestation: ["7M", "6M"], + ingrain: ["7E", "6E", "5E", "4E", "3E"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7L11", "7V", "6L11", "5L11", "4L11", "3L13"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E", "4E"], + mimic: ["7V", "3T"], + moonlight: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["7L37", "7E", "6L37", "6E", "5L37", "5E", "4M", "4L37"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], + nightmare: ["3T"], + poisonpowder: ["7L21", "7V", "6L21", "5L21", "4L21", "3L31"], + powerswap: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "5L47", "4M", "4L47", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psywave: ["7V"], + rage: ["7V"], + reflect: ["7M", "7L7", "7V", "6M", "6L7", "5M", "5L7", "4M", "4L7", "4E", "3M", "3L7", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["7V", "3T"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeppowder: ["7L23", "7V", "6L23", "5L23", "4L23", "3L37"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L43", "7V", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + strength: ["6M", "5M", "4M", "3M"], + stunspore: ["7L19", "7V", "6L19", "5L19", "4L19", "3L25"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["3S0"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + wish: ["3S0"], + worryseed: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33"], + }}, + exeggutor: {learnset: { + ancientpower: ["4T", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrage: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bide: ["7V"], + block: ["6T", "5T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + eggbomb: ["7L27", "7V", "6L27", "5L27", "4L27", "3L31"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + infestation: ["7M", "6M"], + leafstorm: ["7L47", "6L47", "5L47", "4L47"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + megadrain: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + nightmare: ["3T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + psywave: ["7V"], + rage: ["7V"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + selfdestruct: ["7V", "3T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stomp: ["7L1", "7V", "6L1", "5L1", "4L1", "3L19"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + woodhammer: ["7L37", "6L37", "5L37", "4L37"], + worryseed: ["6T", "5T", "4T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + exeggutoralola: {learnset: { + attract: ["7M"], + barrage: ["7L1"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + celebrate: ["7S0"], + confide: ["7M"], + confusion: ["7L1"], + doubleteam: ["7M"], + dracometeor: ["7T", "7S0"], + dragonhammer: ["7L1"], + dragontail: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + eggbomb: ["7L27"], + energyball: ["7M"], + explosion: ["7M"], + facade: ["7M"], + flamethrower: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L1"], + infestation: ["7M"], + leafstorm: ["7L47", "7S0"], + lightscreen: ["7M"], + naturepower: ["7M"], + powerswap: ["7S0"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + psyshock: ["7M", "7L17"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + seedbomb: ["7L1"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + thief: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + woodhammer: ["7L37"], + }}, + cubone: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + boneclub: ["7L7", "7V", "6L7", "5L7", "5D", "4L7", "3L9"], + bonemerang: ["7L21", "7V", "6L21", "5L21", "4L21", "3L25"], + bonerush: ["7L51", "6L37", "5L37", "4L37", "3L41"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + detect: ["7E", "6E", "5E", "4E"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L43", "7V", "6L43", "5L43", "4L43", "3T", "3L45"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3L33"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33"], + focusenergy: ["7L17", "7V", "6L17", "5L17", "4L17", "3L21"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L11", "7V", "6L11", "5L11", "4T", "4L11", "3L13"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["7E", "6T", "6E", "5T", "5E", "4E"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], + lowkick: ["6T", "5T", "5D", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + perishsong: ["7E", "6E", "5E", "5D", "4E", "3E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L23", "7V", "6L23", "5L23", "4L23", "3L29"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["7L47", "6M", "6L47", "5M", "5L47"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7E", "7V", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stompingtantrum: ["7L37"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + tailwhip: ["7L3", "7V", "6L3", "5L3", "4L3", "3L5"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L31", "7V", "6L31", "5L31", "4L31", "3L37"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + watergun: ["7V"], + }}, + marowak: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + boneclub: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bonemerang: ["7L21", "7V", "6L21", "5L21", "4L21", "3L25"], + bonerush: ["7L65", "6L43", "5L43", "4L43", "3L53"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7L53", "7V", "6L53", "5L53", "4L53", "3T", "3L61"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L49"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3L39"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L17", "7V", "6L17", "5L17", "4L17", "3L21"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L11", "7L1", "7V", "6L1", "5L1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L13", "7V", "6L13", "5L13", "4L13", "3L17"], + lowkick: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L23", "7V", "6L23", "5L23", "4L23", "3L32"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["7L59", "6M", "6L59", "5M", "5L59"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T", "3S0"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + sing: ["3S0"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stompingtantrum: ["7L43"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T", "3S0"], + tailwhip: ["7L3", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L33", "7V", "6L33", "5L33", "4L33", "3L46"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + watergun: ["7V"], + }}, + marowakalola: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + blizzard: ["7M"], + boneclub: ["7L7", "7L1"], + bonemerang: ["7L21"], + bonerush: ["7L65"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + darkpulse: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + echoedvoice: ["7M"], + endeavor: ["7L49"], + facade: ["7M"], + falseswipe: ["7M"], + fireblast: ["7M"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flamewheel: ["7L11", "7L1"], + flareblitz: ["7L53"], + fling: ["7M", "7L37"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + growl: ["7L1"], + hex: ["7L17"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + leer: ["7L13"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + retaliate: ["7L59"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandstorm: ["7M"], + shadowball: ["7M"], + shadowbone: ["7L27"], + sleeptalk: ["7M"], + smackdown: ["7M"], + stompingtantrum: ["7L43"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwhip: ["7L3", "7L1"], + thief: ["7M"], + thrash: ["7L33"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + willowisp: ["7M", "7L23"], + }}, + tyrogue: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T"], + covet: ["6T", "5T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L1", "6L1", "5L1", "5D", "4L1"], + feint: ["7E", "6E", "5E", "5D"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["7L1", "7E", "6T", "6L1", "6E", "5T", "5L1", "5E", "4T", "4L1", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + highjumpkick: ["7E", "6E", "5E", "4E", "3E"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7E", "6E", "5E", "5D", "4E", "3E"], + megakick: ["3T"], + mimic: ["3T"], + mindreader: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + vacuumwave: ["7E", "6E", "5E", "4T", "4E"], + workup: ["7M", "5M"], + }}, + hitmonlee: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blazekick: ["7L45", "6L45", "5L45", "4L41"], + bodyslam: ["7V", "3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L20"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E"], + captivate: ["4M"], + closecombat: ["7L57", "7L1", "6L1", "5L57", "4L53"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "3T"], + covet: ["6T", "5T"], + doubleedge: ["7V", "3T"], + doublekick: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7L49", "7E", "6L49", "5L49", "4M", "4L45", "3T", "3L41"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L25", "7E", "6L25", "5L25", "4L25"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L21", "7V", "6L21", "5L21", "4L21", "3L21"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L37", "6L37", "5L37", "4L37", "3L36"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["7E", "6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + highjumpkick: ["7L29", "7E", "7V", "6L29", "5L29", "4L29", "3L26", "3S0"], + jumpkick: ["7L13", "7L1", "7V", "6L13", "5L13", "4L13", "3L16"], + knockoff: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7E"], + meditate: ["7L5", "7L1", "7V", "6L5", "5L5", "4L5", "3L6"], + megakick: ["7L53", "7L1", "7V", "6L1", "5L53", "4L49", "3T", "3L46", "3S0"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mindreader: ["7L33", "7E", "6L33", "5L33", "4L33", "3L31", "3S0"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], + reversal: ["7L61", "7L1", "6L1", "5L61", "4L57", "3L51"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollingkick: ["7L9", "7L1", "7V", "6L9", "5L9", "4L9", "3L11"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["7E", "4T"], + wideguard: ["7L41", "6L41", "5L41"], + workup: ["7M", "5M"], + }}, + hitmonchan: {learnset: { + agility: ["7L6", "7L1", "7V", "6L6", "5L6", "4L6", "3L7"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7L16", "7E", "6L16", "5L16", "4L16"], + captivate: ["4M"], + closecombat: ["7L66", "7L1", "6L1", "5L66", "4L56"], + cometpunch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + confide: ["7M", "6M"], + counter: ["7L61", "7E", "7L1", "7V", "6L1", "5L61", "4L51", "3T", "3L50"], + covet: ["6T", "5T"], + detect: ["7L50", "6L50", "5L51", "4L46", "3L44"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L21", "7E", "6L21", "5L21", "4L21"], + firepunch: ["7L36", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7L56", "7L1", "6T", "6L1", "5L56", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["7E", "6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + highjumpkick: ["7E"], + icepunch: ["7L36", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L16", "7E", "7L1", "6L16", "5L16", "4L16", "3L20"], + megakick: ["7V", "3T"], + megapunch: ["7L46", "7V", "6L46", "5L46", "4L41", "3T", "3L38", "3S0"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mindreader: ["7E", "3S0"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L11", "7E", "7L1", "6L11", "5L11", "4L11", "3L13"], + quickguard: ["7L31", "6L31", "5L31"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7V"], + skyuppercut: ["7L41", "6L41", "5L41", "4L36", "3L32", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7L36", "7V", "6T", "6L36", "5T", "5L36", "4T", "4L31", "3T", "3L26"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vacuumwave: ["7L26", "7E", "6L26", "5L26", "4T", "4L26"], + workup: ["7M", "5M"], + }}, + hitmontop: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7L37", "6L37", "5L37", "4L37", "3L37"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E"], + captivate: ["4M"], + closecombat: ["7L55", "7L1", "6L1", "5L55", "5S0", "4L51"], + confide: ["7M", "6M"], + counter: ["7L28", "7E", "6L28", "5L28", "4L28", "3T", "3L31"], + covet: ["6T", "5T"], + detect: ["7L50", "7L1", "6L50", "5L51", "4L46", "3L43"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drillrun: ["5T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7L60", "7L1", "6T", "6L1", "5T", "5L60", "4T", "4L55", "3L49"], + endure: ["7E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["5S0"], + feint: ["7L24", "7E", "6L33", "5L33", "4L33"], + focusenergy: ["7L6", "7L1", "6L6", "5L6", "4L6", "3L7"], + foresight: ["4C"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L42"], + headbutt: ["4T"], + helpinghand: ["7E", "6T", "5T", "5S0", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + highjumpkick: ["7E"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7E", "3C"], + megakick: ["3T"], + mimic: ["3T"], + mindreader: ["7E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L10", "7E", "7L1", "6L10", "5L10", "4L10", "3L13"], + quickattack: ["7L15", "7L1", "6L15", "5L15", "4L15", "3L19"], + quickguard: ["7L46", "6L46", "5L46"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L19", "7E", "6L24", "5L24", "4L24", "3L25"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollingkick: ["7L1", "6L1", "5L1", "4L1", "3L1"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["5S0", "4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + triplekick: ["7L33", "6L19", "5L19", "4L19", "3L20"], + twister: ["4T"], + vacuumwave: ["7E", "4T"], + wideguard: ["7L46", "6L46", "5L46"], + workup: ["7M", "5M"], + }}, + lickitung: {learnset: { + amnesia: ["7E", "6E", "5E", "4E"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7E", "6E"], + bellydrum: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L37", "6L37", "5L37"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defensecurl: ["7L9", "7V", "6L9", "5L9", "4L9", "3T", "3L12", "3S1"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7L25", "7V", "6L25", "5L25", "4L25", "3L34"], + doubleedge: ["7V", "3T", "3S1"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragontail: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + healbell: ["3S0"], + helpinghand: ["3S1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3L18"], + lick: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + magnitude: ["7E", "6E", "5E", "4E", "3E"], + mefirst: ["7L41", "6L41", "5L41", "4L37"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + muddywater: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + poweruppunch: ["6M"], + powerwhip: ["7L53", "6L53", "5L53", "4L49"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L45", "6L45", "5L45", "4L41", "3L51"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["5D", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L33", "6L33", "5L33", "4T", "4L33", "3T", "3S1"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L49", "7V", "6L49", "5L49", "4L45", "3L45"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + slam: ["7L29", "7V", "6L29", "5L29", "4L29", "3L40"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "4E", "3T", "3E"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L21", "7V", "6L21", "5L21", "4L21", "3L23"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7V", "6L5", "5L5", "4L5", "3L7"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wish: ["3S0"], + workup: ["7M", "5M"], + wrap: ["7L17", "7V", "6L17", "5L17", "4L17", "3L29"], + wringout: ["7L57", "6L57", "5L57", "4L53"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T"], + }}, + lickilicky: {learnset: { + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M"], + block: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L37", "6L37", "5L37"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L9", "6L9", "5L9", "4L9"], + dig: ["6M", "5M", "4M"], + disable: ["7L25", "6L25", "5L25", "4L25"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragontail: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "4M", "4L57"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + knockoff: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + lick: ["7L1", "6L1", "5L1", "4L1"], + mefirst: ["7L41", "6L41", "5L41", "4L37"], + mudslap: ["4T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + powerwhip: ["7L53", "7L1", "6L1", "5L53", "4L49"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + refresh: ["7L45", "6L45", "5L45", "4L41"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["7L33", "6L33", "5L33", "4T", "4L33"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + screech: ["7L49", "6L49", "5L49", "4L45"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + slam: ["7L29", "6L29", "5L29", "4L29"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stomp: ["7L21", "6L21", "5L21", "4L21"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7L5", "6L5", "5L5", "4L5"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + wrap: ["7L17", "6L17", "5L17", "4L17"], + wringout: ["7L57", "7L1", "6L1", "5L57", "4L53"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + koffing: {learnset: { + assurance: ["7L12", "6L12", "5L15", "4L15"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L42", "6L42"], + bide: ["7V"], + captivate: ["4M"], + clearsmog: ["7L15", "6L15", "5L19"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E"], + darkpulse: ["7M", "6M", "5T", "5D", "4M"], + destinybond: ["7L40", "7E", "6L40", "6E", "5L51", "5E", "4L46", "4E", "3L45", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L42", "4M", "4L37", "3T", "3L41"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grudge: ["7E", "6E", "5E", "4E"], + gyroball: ["7M", "7L29", "6M", "6L29", "5M", "5L37", "4M", "4L33"], + haze: ["7L26", "7V", "6L26", "5L33", "4L28", "3L33"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + infestation: ["7M", "6M"], + memento: ["7L45", "6L45", "5L55", "4L51", "3L49"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + painsplit: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + payback: ["7M", "6M", "5M", "4M"], + poisongas: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E"], + psywave: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L23", "7V", "6L23", "5L24", "4L19", "3T", "3L17"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L18", "7V", "6L18", "5L28", "4L24", "3L21"], + sludgebomb: ["7M", "7L34", "6M", "6L34", "5M", "5L46", "4M", "4L42", "3M"], + sludgewave: ["5D"], + smog: ["7L4", "7V", "6L4", "5L6", "5D", "4L6", "3L9"], + smokescreen: ["7L7", "7V", "6L7", "5L10", "4L10", "3L25"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + spitup: ["7E", "6E", "5E"], + stockpile: ["7E", "6E", "5E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7E", "6E"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], + }}, + weezing: {learnset: { + assurance: ["7L12", "6L12", "5L15", "4L15"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L51", "6L50"], + bide: ["7V"], + captivate: ["4M"], + clearsmog: ["7L15", "6L15", "5L19"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["7L46", "6L46", "5L59", "4L55", "3L51"], + doublehit: ["7L1", "6L29", "5L39", "4L33"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L40", "7V", "6M", "6L40", "5M", "5L46", "4M", "4L40", "3T", "3L44"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "7L29", "6M", "5M", "4M"], + haze: ["7L26", "7V", "6L26", "5L33", "4L28", "3L33"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + infestation: ["7M", "6M"], + memento: ["7L57", "6L54", "5L65", "4L63", "3L58"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisongas: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L23", "7V", "6L23", "5L24", "4L19", "3T", "3L1"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L18", "7V", "6L18", "5L28", "4L24", "3L21"], + sludgebomb: ["7M", "7L34", "6M", "6L34", "5M", "5L52", "4M", "4L48", "3M"], + smog: ["7L4", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + smokescreen: ["7L7", "7L1", "7V", "6L1", "5L1", "4L1", "3L25"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + rhyhorn: {learnset: { + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bulldoze: ["7M", "7L21", "6M", "6L21", "5M", "5L30"], + captivate: ["4M"], + chipaway: ["7L25", "6L25", "5L34"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + crunch: ["7E", "6E", "5E", "4E", "3E"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "5D", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragonrush: ["7E", "6E", "5E", "4E"], + drillrun: ["7L33", "6T", "6L33", "5T", "5L45"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L56", "4M", "4L49", "3M", "3L52"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L5", "7V", "6L5", "5L12", "4L13", "3L15"], + guardsplit: ["7E", "6E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + horndrill: ["7L53", "7V", "6L53", "5L63", "4L37", "3L38"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7E", "6E", "5E", "4E"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7V"], + magnitude: ["7E", "6E", "5E", "4E", "3E"], + megahorn: ["7L49", "6L49", "5L67", "4L57", "3L57"], + metalburst: ["7E", "6E"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L29", "6L23", "5L23", "4L25", "3L29"], + rockclimb: ["7E", "6E", "5E", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L9", "6L9", "5L19", "4L21", "3L24"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7E", "7V", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L13", "6M", "6L13"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7L17", "7V", "6L8", "5L8", "4L9", "3L10"], + stoneedge: ["7M", "7L41", "6M", "6L41", "5M", "5L52", "4M", "4L45"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L37", "7V", "6L37", "5L41", "4L33", "3L43"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderfang: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + }}, + rhydon: {learnset: { + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "7L21", "6M", "6L21", "5M", "5L30"], + captivate: ["4M"], + chipaway: ["7L25", "6L25", "5L34"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + drillrun: ["7L33", "6T", "6L33", "5T", "5L47"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L48", "7V", "6M", "6L48", "5M", "5L62", "4M", "4L49", "3M", "3L58", "3S0"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hammerarm: ["7L1", "6L42", "5L42", "4L42"], + headbutt: ["4T"], + helpinghand: ["3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + horndrill: ["7L62", "7L1", "7V", "6L1", "5L71", "4L37", "3L38"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7V"], + megahorn: ["7L55", "6L1", "5L77", "4L57", "3L66", "3S0"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["7V"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L29", "6L23", "5L23", "4L25", "3L29"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L9", "7L1", "6L1", "5L19", "4L21", "3L24", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L13", "6M", "6L13", "5M"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7L17", "7V", "6L1", "5L1", "4L1", "3L1"], + stoneedge: ["7M", "7L41", "6M", "6L41", "5M", "5L56", "4M", "4L45"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L37", "7V", "6L37", "5L41", "4L33", "3L46"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + watergun: ["7V"], + whirlpool: ["4M"], + }}, + rhyperior: {learnset: { + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + block: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bulldoze: ["7M", "7L21", "6M", "6L21", "5M"], + captivate: ["4M"], + chipaway: ["7L25", "6L25", "5L30"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + drillrun: ["7L33", "6T", "6L33", "5T", "5L47"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L48", "6M", "6L48", "5M", "5L62", "4M", "4L49"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hammerarm: ["7L1", "6L42", "5L42", "4L42"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hornattack: ["7L1", "6L1", "5L1", "4L1"], + horndrill: ["7L62", "7L1", "6L1", "5L71", "4L37"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + megahorn: ["7L55", "6L1", "5L77", "4L57"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockblast: ["7L29", "6L23", "5L23", "4L25"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rockwrecker: ["7L69", "7L1", "6L1", "5L86", "4L61"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L9", "7L1", "6L1", "5L19", "4L21"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "7L13", "6M", "6L13", "5M"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7L17", "6L1", "5L1", "4L1"], + stoneedge: ["7M", "7L41", "6M", "6L41", "5M", "5L56", "4M", "4L45"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwhip: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L37", "6L37", "5L41", "4L33"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + whirlpool: ["4M"], + }}, + happiny: {learnset: { + aromatherapy: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + charm: ["7L1", "6L1", "5L1", "4L1"], + confide: ["7M", "6M"], + copycat: ["7L5", "6L5", "5L5", "4L5"], + counter: ["7E", "6E", "5E", "4E"], + covet: ["6T", "5T"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["7E", "6E", "5E", "4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lightscreen: ["7M", "6M", "5M", "4M"], + metronome: ["7E", "6E", "5E", "4E"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + naturalgift: ["7E", "6E", "5E", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + present: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + refresh: ["7L9", "6L9", "5L9", "4L9"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M", "4E"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7L12", "6L12", "5L12", "4L12"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + chansey: {learnset: { + aromatherapy: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bestow: ["7L20", "6L20", "5L20"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "5D", "4E", "3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "7V", "6L1", "5L1", "4L31", "3T", "3L41"], + doubleedge: ["7L54", "7L1", "7V", "6L1", "5L54", "4L46", "3T", "3L57"], + doubleslap: ["7L12", "7V", "6L12", "5L12", "4L16", "3L17"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + eggbomb: ["7L42", "7V", "6L42", "5L42", "4L38", "3L35"], + endeavor: ["6T", "5T", "4T"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L27"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + growl: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + healingwish: ["7L50", "6L50", "5L50", "4L42"], + healpulse: ["7L38", "6L38", "5L38"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L46", "7V", "6M", "6L46", "5M", "5L46", "4M", "4L34", "3M", "3L49"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + mimic: ["7V", "3T"], + minimize: ["7L23", "7V", "6L23", "5L23", "4L20", "3L23"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + poweruppunch: ["6M"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7V"], + refresh: ["7L9", "6L9", "5L9", "4L9", "3L9", "3S1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "7V", "6E", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sing: ["7L31", "7V", "6L31", "5L31", "4L23", "3L29"], + skillswap: ["6T", "5T", "4M", "3M", "3S2"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["7L16", "7V", "6L16", "5L16", "4L12", "3T", "3L13", "3S2"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["3S2"], + sweetscent: ["3S0"], + tailwhip: ["7L5", "7V", "6L5", "5L5", "4L5", "3L5", "3S1"], + takedown: ["7L27", "7V", "6L27", "5L27"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["3S0"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + blissey: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bestow: ["7L20", "6L20", "5L20"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1", "4L31", "3T", "3L33"], + doubleedge: ["7L54", "7L1", "6L1", "5L54", "4L46", "3T", "3L47"], + doubleslap: ["7L12", "6L12", "5L12", "4L16", "3L13"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + eggbomb: ["7L42", "6L42", "5L42", "4L38", "3L28"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L27"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + growl: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healingwish: ["7L50", "6L50", "5L50", "4L42"], + healpulse: ["7L38", "6L38", "5L38"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L34", "3M", "3L40"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + minimize: ["7L23", "6L23", "5L23", "4L20", "3L18"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + pound: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + refresh: ["7L9", "6L9", "5L9", "5S0", "4L9", "3L7"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sing: ["7L31", "6L31", "5L31", "4L23", "3L23"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["7L16", "6L16", "5L16", "4L12", "3T", "3L10"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tailwhip: ["7L5", "6L5", "5L5", "5S0", "4L5", "3L4"], + takedown: ["7L27", "6L27", "5L27"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + tangela: {learnset: { + absorb: ["7L10", "7V", "6L10", "5L8", "4L8", "3L10"], + amnesia: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7L38", "6L38", "5L36", "4T", "4L33"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["7L17", "7V", "6T", "6L17", "5T", "5L22", "4L22", "3L28"], + bodyslam: ["7V", "3T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7E", "6E", "5E", "4E", "3E"], + constrict: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + cut: ["7V", "6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "4E"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7L48", "6L48"], + growth: ["7L20", "7V", "6L20", "5L12", "4L12", "3L13"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + knockoff: ["7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7E", "6E", "5E", "5D", "4E", "3E"], + megadrain: ["7L23", "7E", "7V", "6L23", "6E", "5L26", "5E", "4L26", "4E", "3L31", "3E"], + mimic: ["7V", "3T"], + morningsun: ["3S0"], + naturalgift: ["7L33", "7E", "6L33", "6E", "5L40", "5E", "4M", "4L40"], + naturepower: ["7M", "7E", "6E", "5E", "4E", "3E"], + painsplit: ["6T", "5T", "4T"], + poisonpowder: ["7L14", "7V", "6L14", "5L15", "4L15", "3L19"], + powerswap: ["7E", "6E", "5E", "4E"], + powerwhip: ["7L50", "6L50", "5L54", "4L54"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rage: ["7V"], + ragepowder: ["7E", "6E", "5E"], + reflect: ["7M", "6M", "5M", "4M", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "5D", "4T"], + shockwave: ["6T", "4M"], + skullbash: ["7V"], + slam: ["7L41", "7V", "6L41", "5L43", "4L43", "3L40"], + sleeppowder: ["7L4", "7V", "6L4", "5L5", "5D", "4L5", "3L4"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + stunspore: ["7L30", "7V", "6L30", "5L29", "4L29", "3L37"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7L44", "6L44", "5L47", "4L47", "3L46"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vinewhip: ["7L7", "7V", "6L7", "5L19", "4L19", "3L22"], + worryseed: ["6T", "5T", "4T"], + wringout: ["7L46", "6L46", "5L50", "4L50"], + }}, + tangrowth: {learnset: { + absorb: ["7L10", "6L10", "5L8", "4L8"], + aerialace: ["7M", "6M", "5M", "4M"], + ancientpower: ["7L40", "6L40", "5L36", "4T", "4L33", "4S0"], + attract: ["7M", "6M", "5M", "4M"], + bind: ["7L17", "6T", "6L17", "5T", "5L22", "4L22"], + block: ["7L56", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L57"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endeavor: ["6T", "5T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7L36", "6T", "6L36", "5T", "5L36", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7L50", "6L50"], + growth: ["7L20", "6L20", "5L12", "4L12"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + ingrain: ["7L1", "6L1", "5L1", "4L1"], + knockoff: ["7L27", "6T", "6L27", "5T", "5L33", "4T", "4L36"], + megadrain: ["7L23", "6L23", "5L26", "4L26"], + morningsun: ["4S0"], + mudslap: ["4T"], + naturalgift: ["7L33", "6L33", "5L40", "4M", "4L40", "4S0"], + naturepower: ["7M", "6M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonpowder: ["7L14", "6L14", "5L15", "4L15"], + powerwhip: ["7L53", "6L53", "5L54", "4L54"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shockwave: ["6T", "4M"], + slam: ["7L43", "6L43", "5L43", "4L43"], + sleeppowder: ["7L4", "6L4", "5L5", "4L5"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + stunspore: ["7L30", "6L30", "5L29", "4L29"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M", "4S0"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M"], + tickle: ["7L46", "6L46", "5L47", "4L47"], + toxic: ["7M", "6M", "5M", "4M"], + vinewhip: ["7L7", "6L7", "5L19", "4L19"], + worryseed: ["6T", "5T", "4T"], + wringout: ["7L49", "6L49", "5L50", "4L50"], + }}, + kangaskhan: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + bite: ["7L13", "7V", "6L13", "5L13", "4L13", "3L7", "3S1"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L31", "6L31", "5L31"], + circlethrow: ["7E", "6E", "5E"], + cometpunch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "5D", "4E", "3T", "3E"], + covet: ["6T", "5T"], + crunch: ["7L37", "6L37", "5L37", "4L31"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dizzypunch: ["7L34", "7V", "6L34", "5L34", "4L25", "3L43", "3S2"], + doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T"], + doublehit: ["7L19", "6L19", "5L19", "4L43"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "5D", "4M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "7V", "6M", "6S3", "5M", "4M", "3M", "3S2"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + endure: ["7L43", "6L43", "5L43", "4M", "4L34", "3T", "3L37"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L7", "6L7", "6S3", "5L7", "5D", "4L7", "3L19"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["7V", "3T"], + megapunch: ["7L25", "7V", "6L25", "5L25", "4L19", "3T", "3L25"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["7L46", "6T", "6L46", "5T", "5L46", "4T", "4L37"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L22", "7V", "6L22", "5L22", "4L22", "3L31"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "6S3", "5M", "4M", "3M"], + reversal: ["7L50", "6L50", "5L55", "4L49", "3L49"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sing: ["3S2"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + suckerpunch: ["7L49", "6L49", "6S3", "5L49", "4T", "4L46"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tailwhip: ["7L10", "7V", "6L10", "5L10", "4L10", "3L13", "3S2"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trumpcard: ["7E", "6E", "5E"], + uproar: ["7E", "6T", "6E", "5T", "5E", "4T"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wish: ["3S0"], + workup: ["7M", "5M"], + yawn: ["3S0"], + }}, + horsea: {learnset: { + agility: ["7L36", "7V", "6L23", "5L23", "4L23", "3L36"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["7L31", "6L30", "5L30", "5D", "4M", "4L30"], + bubble: ["7L1", "7V", "6L1", "5L1", "5S0", "5D", "4L1", "3L1"], + bubblebeam: ["7L21", "7V", "6L18", "5L18", "4L18"], + captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + dragondance: ["7L46", "6L38", "5L38", "4L38", "3L50"], + dragonpulse: ["7L41", "6T", "6L41", "5T", "5L42", "4M", "4L42"], + dragonrage: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L26", "6L14", "5L14", "4L14"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L52", "7V", "6L35", "5L35", "4L35", "3L43"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + leer: ["7L9", "7V", "6L8", "5L8", "4L8", "3L15"], + mimic: ["7V", "3T"], + muddywater: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + octazooka: ["7E", "6E", "5E", "5D", "4E", "3E"], + outrage: ["7E", "6T", "6E", "5T", "5E", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "6E", "5E", "4E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L5", "7V", "6L4", "5L4", "4L4", "3L8"], + snore: ["6T", "5T", "4T", "3T"], + splash: ["7E", "6E", "5E", "4E", "3E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L17", "6L17", "5L26", "4T", "4L26", "3L29"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L13", "7V", "6L1", "5L11", "4L11", "3L22"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["4M"], + }}, + seadra: {learnset: { + agility: ["7L38", "7V", "6L23", "5L23", "4L23", "3L40", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["7L31", "6L30", "5L30", "4M", "4L30"], + bubble: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L21", "7V", "6L18", "5L18", "4L18"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragondance: ["7L52", "6L48", "5L48", "4L48", "3L62"], + dragonpulse: ["7L45", "6T", "6L45", "5T", "5L57", "4M", "4L57"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L26", "6L14", "5L14", "4L14"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L60", "7L1", "7V", "6L1", "5L40", "4L40", "3L51"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + leer: ["7L9", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L17", "6L17", "5L26", "4T", "4L26", "3L29", "3S0"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L13", "7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + kingdra: {learnset: { + agility: ["7L38", "6L23", "5L23", "4L23", "3L40", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brine: ["7L31", "6L30", "5L30", "4M", "4L30"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L21", "6L18", "5L18", "4L18"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "5S1", "4T"], + dragondance: ["7L52", "6L48", "5L48", "4L48", "3L62"], + dragonpulse: ["7L45", "6T", "6L1", "5T", "5L57", "5S1", "4M", "4L57"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L26", "6L14", "5L14", "4L14"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L60", "7L1", "6L1", "5L40", "4L40", "3L51"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + leer: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + mimic: ["3T"], + muddywater: ["5S1"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "5S1", "4M", "3M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["7L17", "6L17", "5L26", "4T", "4L26", "3L29", "3S0"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L13", "7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + yawn: ["7L1", "6L1", "5L1", "4L1"], + }}, + goldeen: {learnset: { + agility: ["7L29", "7V", "6L29", "5L47", "4L47", "3L52"], + aquaring: ["7L21", "6L21", "5L27", "4L27"], + aquatail: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E"], + bounce: ["6T", "5T", "4T"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L13", "6L13", "5L21", "4L21", "3L24"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L24", "7V", "6L24", "5L31", "4L31", "3L29"], + furycutter: ["4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L8", "7V", "6L8", "5L11", "4L11", "3L15"], + horndrill: ["7L37", "7V", "6L37", "5L41", "4L41", "3L43"], + hydropump: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["6T", "5T", "4T"], + megahorn: ["7L45", "6L45", "5L57", "4L51", "3L57"], + mimic: ["7V", "3T"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E", "4T", "4E"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + peck: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "5D", "4E", "3E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E"], + skullbash: ["7E", "7V", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L40", "6L40", "5L51"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7L5", "7V", "6L5", "5L7", "4L7", "3L10"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L37", "4M", "4L37", "3M", "3L38"], + watergun: ["7V"], + waterpulse: ["7L16", "6T", "6L16", "5L17", "5D", "4M", "4L17", "3M"], + watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + }}, + seaking: {learnset: { + agility: ["7L29", "7V", "6L29", "5L56", "4L56", "3L61"], + aquaring: ["7L21", "6L21", "5L27", "4L27"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + endure: ["5D", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L13", "6L13", "5L21", "4L21", "3L24"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L24", "7V", "6L24", "5L31", "4L31", "3L29"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L8", "7V", "6L8", "5L11", "4L11", "3L15"], + horndrill: ["7L40", "7V", "6L40", "5L47", "4L47", "3L49"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["6T", "5T", "4T"], + megahorn: ["7L54", "7L1", "6L1", "5L72", "4L63", "3L69"], + mimic: ["7V", "3T"], + mudslap: ["4T"], + naturalgift: ["4M"], + peck: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L46", "6L46", "5L63"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L40", "4M", "4L40", "3M", "3L41"], + watergun: ["7V"], + waterpulse: ["7L16", "6T", "6L16", "5L17", "5D", "4M", "4L17", "3M"], + watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + }}, + staryu: {learnset: { + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brine: ["7L28", "6L28", "5L36", "4M"], + bubblebeam: ["7L18", "7V", "6L18", "5L28", "4L28", "3L28"], + camouflage: ["7L22", "6L15", "5L19", "4L19", "3L19"], + confide: ["7M", "6M"], + confuseray: ["7L40", "6L40"], + cosmicpower: ["7L49", "6L48", "5L55", "4L51", "3L42", "3S0"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "7L24", "6M", "6L24", "5M", "5L37", "4M", "4L37"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L53", "7V", "6L52", "5L60", "4L55", "3L46", "3S0"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "5D", "4T", "3T"], + lightscreen: ["7M", "7L46", "7V", "6M", "6L33", "5M", "5L42", "4M", "4L42", "3M", "3L37", "3S0"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + minimize: ["7L31", "7V", "6L25", "5L33", "4L33", "3L33", "3S0"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + powergem: ["7L37", "6L37", "5L51", "4L46"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L42", "7V", "6M", "6L42", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psywave: ["7L13", "7V", "6L13"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L7", "6L7", "5L10", "4L10", "3L10", "3S1"], + recover: ["7L10", "7V", "6L10", "5L15", "4L15", "3L15", "3S1"], + recycle: ["6T", "5T", "5D", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflecttype: ["7L35", "6L35", "5L46"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L16", "7V", "6L16", "5L24", "4T", "4L24", "3T", "3L24"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "7V", "6L4", "5L6", "5D", "4L6", "3L6", "3S1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + starmie: {learnset: { + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bubblebeam: ["7V"], + confide: ["7M", "6M"], + confuseray: ["7L40", "6L22", "5L28", "4L28", "3L33"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7V"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L1", "6L1"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + icywind: ["6T", "5T", "4T", "3T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L1", "6L1", "5L1", "4L1", "3L1"], + recover: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spotlight: ["7L1"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L1", "7V", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + tackle: ["7V"], + takedown: ["7V"], + telekinesis: ["5M"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M", "3S0"], + watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wonderroom: ["6T", "5T"], + }}, + mimejr: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + barrier: ["7L1", "6L1", "5L1", "4L1"], + batonpass: ["7L46", "6L46", "5L46", "4L46"], + brickbreak: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7E", "6E", "5E", "4E"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E"], + confusion: ["7L1", "6L1", "5L1", "4L1"], + copycat: ["7L4", "6L4", "5L4", "4L4"], + covet: ["6T", "5T"], + doubleslap: ["7L11", "6L11", "5L15", "4L15"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + encore: ["7L18", "6L18", "5L11", "4L11"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healingwish: ["7E", "6E", "5E", "4E"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypnosis: ["7E", "6E", "5E", "4E"], + icywind: ["7E", "6T", "6E", "5T", "5E"], + infestation: ["7M", "6M"], + lightscreen: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["7E", "6T", "6E", "5T", "5E"], + meditate: ["7L8", "6L8", "5L8", "4L8"], + mimic: ["7L15", "7E", "6L15", "6E", "5L18", "5E", "4L18", "4E"], + mudslap: ["4T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + powersplit: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M", "4M"], + psybeam: ["7L25", "6L25", "5L25", "4L25"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39", "4M", "4L39"], + psychup: ["7M", "6M", "5M", "4M", "4E"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7L32", "6T", "6L32", "5T", "5L32", "4M", "4L32"], + reflect: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L50"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + teeterdance: ["7E", "6E", "5E", "4E"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + tickle: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4T", "4L36", "4E"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + wakeupslap: ["7E", "6E", "5E", "4E"], + wonderroom: ["6T", "5T"], + }}, + mrmime: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + batonpass: ["7L46", "6L46", "5L46", "4L46", "3L47"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E"], + confusion: ["7L1", "7V", "6L1", "5L1", "4L1", "3L5"], + copycat: ["7L4", "6L4", "5L4", "4L4"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L11", "7V", "6L11", "5L15", "4L15", "3L15"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + encore: ["7L18", "6L18", "5L11", "4L11", "3L25", "3S0"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + followme: ["3S0"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + guardswap: ["7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypnosis: ["7E", "6E", "5E", "4E", "3E"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["7E", "6T", "6E", "5T", "5E"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L19"], + magicalleaf: ["7L1", "6L1", "5L1", "4L1", "3L22"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["7E", "6T", "6E", "5T", "5E"], + meditate: ["7L8", "7V", "6L8", "5L8", "4L8", "3L12"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7L15", "7E", "7V", "6L15", "6E", "5L18", "5E", "4L18", "4E", "3T", "3E"], + mistyterrain: ["7L1", "6L1"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + nightmare: ["3T"], + payback: ["7M", "6M", "5M", "4M"], + powersplit: ["7E", "6E", "5E"], + powerswap: ["7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L25", "6L25", "5L25", "4L25", "3L29"], + psychic: ["7M", "7L39", "7V", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3M", "3L43", "3S0"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L15", "7V", "6L15", "5L15"], + quickguard: ["7L1", "6L1", "5L1"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["7L32", "6T", "6L32", "5T", "5L32", "4M", "4L32", "3L33"], + reflect: ["7M", "7L22", "7V", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L19"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43", "3L40"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L50", "3M", "3L50"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "5D", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7L29", "7V", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3T", "3L8"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + teeterdance: ["7E", "6E", "5E", "5D", "4E"], + telekinesis: ["5M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T", "3S0"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L36", "5E", "4T", "4L36", "4E", "3L36", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + wakeupslap: ["7E", "6E", "5E", "4E"], + wideguard: ["7L1", "6L1", "5L1"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + scyther: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L17", "7V", "6L17", "5L17", "5S2", "4L17", "3L21"], + airslash: ["7L50", "6L50", "5L53", "4L53"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "5D", "4E", "3E"], + bide: ["7V"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + cut: ["7V", "6M", "5M", "4M", "3M"], + defog: ["7E", "6E", "5E", "4M"], + doubleedge: ["7V", "3T"], + doublehit: ["7L49", "6L49", "5L49", "4L49"], + doubleteam: ["7M", "7L37", "7V", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L41"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13", "3L16"], + feint: ["7L61", "6L61", "5L61", "4L61"], + focusenergy: ["7L5", "7V", "6L5", "5L5", "4L5", "3L6", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L25", "6L25", "5L25", "5S2", "4T", "4L25", "3T", "3L46"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + mimic: ["7V", "3T"], + morningsun: ["3S1"], + naturalgift: ["4M"], + nightslash: ["7L45", "7E", "6L45", "6E", "5L45", "5E", "4L45", "4E"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L9", "6L9", "5L9", "4L9", "3L11"], + quickattack: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + quickguard: ["7E", "6E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4L33", "4E", "3E", "3S1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + silverwind: ["7E", "6E", "5E", "4M", "4E", "3E", "3S1"], + skullbash: ["7V"], + slash: ["7L29", "7V", "6L29", "5L29", "5S2", "4L29", "3L31", "3S1"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7L57", "7V", "6M", "6L57", "5M", "5L57", "4M", "4L57", "3T", "3L36"], + tailwind: ["6T", "5T", "5D", "4T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["7L1", "6L1", "5L1", "4L1"], + wingattack: ["7L21", "7V", "6L21", "5L21", "5S2", "4L21", "3L26"], + xscissor: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + }}, + scizor: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "6S5", "5M", "4M", "3M"], + agility: ["7L17", "6L17", "6S5", "6S6", "5L17", "4L17", "4S1", "3L21"], + attract: ["7M", "6M", "5M", "4M", "3M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bugbite: ["6T", "5T", "5S2", "4T"], + bulletpunch: ["7L1", "6L1", "6S7", "5L1", "5S2", "4L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["4M"], + doubleedge: ["3T"], + doublehit: ["7L49", "6L49", "6S4", "5L49", "4L49"], + doubleteam: ["7M", "6M", "5M", "4M", "3M", "3L41"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L13", "6M", "6L13", "6S5", "6S6", "5M", "5L13", "4M", "4L13", "3L16"], + feint: ["7L61", "7L1", "6L1", "5L61", "4L61"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L5", "6L5", "5L5", "5S3", "4L5", "3L6"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L25", "6L25", "6S5", "6S6", "5L25", "4T", "4L25", "3T", "3L46", "3S0"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37", "4S1", "3L41"], + ironhead: ["7L50", "6T", "6L50", "6S4", "5T", "5L53", "4T", "4L53"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "5S3", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + metalclaw: ["7L21", "6L21", "6S6", "5L21", "4L21", "3L26", "3S0"], + mimic: ["3T"], + naturalgift: ["4M"], + nightslash: ["7L45", "6L45", "6S4", "5L45", "4L45"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L9", "6L9", "5L9", "5S3", "4L9", "3L11"], + quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7L33", "6L33", "5L33", "4L33"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "6S7", "5T", "5S2", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + silverwind: ["4M"], + slash: ["7L29", "6L29", "5L29", "4L29", "3L31", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "5S3", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L57", "6M", "6L57", "6S7", "5M", "5L57", "5S2", "4M", "4L57", "4S1", "3T", "3L36", "3S0"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uturn: ["7M", "6M", "6S7", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "7L41", "6M", "6L41", "6S4", "5M", "5L41", "4M", "4L41", "4S1"], + }}, + smoochum: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + auroraveil: ["7M"], + avalanche: ["7L35", "6L35", "5L35", "4M", "4L31"], + blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L45", "3M", "3L57"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["7E", "6E", "5E", "5D", "4M"], + confide: ["7M", "6M"], + confusion: ["7L15", "6L15", "5L15", "4L15", "3L21"], + copycat: ["7L41", "6L41", "5L41", "4L38"], + counter: ["3T"], + covet: ["6T", "5T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + faketears: ["7L28", "6L28", "5L28", "4L25", "3L37"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + healbell: ["6T", "5T", "4T"], + heartstamp: ["7L21", "6L21", "5L21"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + icywind: ["6T", "5T", "4T", "3T"], + lick: ["7L5", "6L5", "5L5", "4L5", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L31", "6L31", "5L31", "4L28"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meanlook: ["7L25", "6L25", "5L25", "4L21", "3L33"], + meditate: ["7E", "6E", "5E", "4E", "3E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + miracleeye: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + nightmare: ["3T"], + payback: ["7M", "6M", "5M", "4M"], + perishsong: ["7L45", "6L45", "5L45", "4L41", "3L49"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + powdersnow: ["7L11", "6L11", "5L11", "4L11", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "4L35", "3M", "3L45"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["7L18", "6L18", "5L18", "4L18", "3L25"], + skillswap: ["6T", "5T", "5D", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L8", "6L8", "5L8", "5D", "4L8", "3L9"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + wakeupslap: ["7E", "6E", "5E"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + jynx: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + auroraveil: ["7M"], + avalanche: ["7L39", "6L39", "5L39", "4M", "4L33"], + bide: ["7V"], + blizzard: ["7M", "7L60", "7V", "6M", "6L60", "5M", "5L60", "4M", "4L55", "3M", "3L67"], + bodyslam: ["7L44", "7V", "6L44", "5L44", "4L39", "3T", "3L51"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["7E", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + doubleedge: ["7V", "3T"], + doubleslap: ["7L15", "7V", "6L15", "5L15", "4L15", "3L21"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainingkiss: ["7L1", "6L1"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E"], + faketears: ["7L28", "6L28", "5L28", "4L25", "3L41"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + heartstamp: ["7L21", "6L21", "5L21"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7L18", "7E", "7V", "6T", "6L18", "5T", "5L18", "4T", "4L18", "3T", "3L25"], + icywind: ["6T", "5T", "4T", "3T"], + lick: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lovelykiss: ["7L8", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meanlook: ["7L25", "6L25", "5L25", "4L21", "3L35"], + meditate: ["7E"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + miracleeye: ["7E"], + mudslap: ["4T", "3T"], + nastyplot: ["7E"], + naturalgift: ["4M"], + nightmare: ["3T"], + payback: ["7M", "6M", "5M", "4M"], + perishsong: ["7L55", "7L1", "6L1", "5L55", "4L49", "3L57"], + pound: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + powdersnow: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7V"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wakeupslap: ["7L33", "7E", "6L33", "5L33", "4L28"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7E"], + wringout: ["7L49", "6L49", "5L49", "4L44"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + elekid: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + crosschop: ["7E", "6E", "5E", "5D", "4E", "3E", "3S0"], + discharge: ["7L33", "6L33", "5L41", "4L34"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T"], + electroball: ["7L22", "6L22", "5L31"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7E", "6E", "5E", "4E"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7E", "6E", "5E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E", "3S0"], + karatechop: ["7E", "6E", "5E", "4E", "3E"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "4M", "4L25", "3M", "3L17"], + lowkick: ["7L8", "6T", "6L8", "5T", "5L11", "4T", "4L10"], + magnetrise: ["6T", "5T", "5D", "4T"], + meditate: ["7E", "6E", "5E", "4E", "3E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollingkick: ["7E", "6E", "5E", "4E", "3E"], + round: ["7M", "6M", "5M"], + screech: ["7L36", "6L36", "5L51", "4L43", "3L33"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shockwave: ["7L15", "6T", "6L15", "5L21", "4M", "4L19", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L12", "6L12", "5L16", "4T", "4L16", "3T", "3L25"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L43", "6M", "6L43", "5M", "5L56", "4M", "4L46", "3M", "3L49"], + thunderbolt: ["7M", "7L40", "6M", "6L40", "5M", "5L46", "4M", "4L37", "3M", "3L41"], + thunderpunch: ["7L29", "6T", "6L29", "5T", "5L36", "4T", "4L28", "3T", "3L9", "3S0"], + thundershock: ["7L5", "6L5", "5L6", "5D", "4L7"], + thunderwave: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + electabuzz: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + crosschop: ["7E", "3S1"], + discharge: ["7L36", "6L36", "5L44", "4L37"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["7E", "3T"], + electroball: ["7L22", "6L22", "5L32"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7E"], + firepunch: ["7E", "6T", "5T", "4T", "3T"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "4M", "3M"], + followme: ["3S1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hammerarm: ["7E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + karatechop: ["7E"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lightscreen: ["7M", "7L26", "7V", "6M", "6L26", "6S4", "5M", "5L26", "5S3", "4M", "4L25", "4S2", "3M", "3L17"], + lowkick: ["7L8", "6T", "6L8", "6S4", "5T", "5L11", "5S3", "4T", "4L10", "4S2"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T", "4T"], + meditate: ["7E"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psywave: ["7V"], + quickattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollingkick: ["7E"], + round: ["7M", "6M", "5M"], + screech: ["7L42", "7V", "6L42", "5L56", "4L52", "3L36"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shockwave: ["7L15", "6T", "6L15", "6S4", "5L21", "5S3", "4M", "4L19", "4S2", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L12", "7V", "6L12", "5L16", "5S3", "4T", "4L16", "3T", "3L25"], + takedown: ["7V"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L58", "3M", "3L58"], + thunderbolt: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L43", "3M", "3L47", "3S1"], + thunderpunch: ["7L29", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], + thundershock: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1"], + thunderwave: ["7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "3T", "3S1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + electivire: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crosschop: ["4S0"], + dig: ["6M", "5M", "4M"], + discharge: ["7L36", "6L36", "5L44", "4L37", "4S1"], + doubleteam: ["7M", "6M", "5M", "4M"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M", "4S0"], + electricterrain: ["7L65", "7L1", "6L1"], + electroball: ["7L22", "6L22", "5L32"], + electroweb: ["6T", "5T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "7L62", "6M", "6L62", "5M", "5L68", "4M", "4L67"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T", "4S0"], + iondeluge: ["7L1", "6L1"], + irontail: ["6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "4M", "4L25", "4S1"], + lowkick: ["7L8", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + quickattack: ["7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L42", "6L42", "5L56", "4L52"], + secretpower: ["6M", "4M"], + shockwave: ["7L15", "6T", "6L15", "5L21", "4M", "4L19"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L12", "6L12", "5L16", "4T", "4L16"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "7L55", "6M", "6L55", "5M", "5L62", "4M", "4L58"], + thunderbolt: ["7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S1"], + thunderpunch: ["7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S0", "4S1"], + thundershock: ["7L5", "7L1", "6L1", "5L1", "4L1"], + thunderwave: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + magby: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + belch: ["7E", "6E"], + bellydrum: ["7E", "6E", "5E", "4E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + clearsmog: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + confuseray: ["7L26", "6L26", "5L25", "4L25", "3L43"], + counter: ["3T"], + covet: ["6T", "5T"], + crosschop: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T"], + ember: ["7L5", "6L5", "5L7", "5D", "4L7", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L12", "6L12", "5L16", "4L16"], + fireblast: ["7M", "7L43", "6M", "6L43", "5M", "5L49", "4M", "4L46", "3M", "3L49"], + firepunch: ["7L29", "6T", "6L29", "5T", "5L34", "4T", "4L28", "3T", "3L19"], + firespin: ["7L15", "6L15", "5L19", "4L19"], + flameburst: ["7L22", "6L22", "5L28"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L40", "6M", "6L40", "5M", "5L43", "4M", "4L37", "3M", "3L37"], + flareblitz: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "5D", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + karatechop: ["7E", "6E", "5E", "4E", "3E"], + lavaplume: ["7L33", "6L33", "5L37", "4L34"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L7"], + machpunch: ["7E", "6E", "5E", "4E"], + megakick: ["3T"], + megapunch: ["7E", "6E", "5E", "4E", "3T", "3E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + powerswap: ["7E", "6E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smog: ["7L1", "6L1", "5L1", "4L1", "3L13"], + smokescreen: ["7L8", "6L8", "5L10", "4L10", "3L25"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L36", "6M", "6L36", "5M", "5L46", "4M", "4L43", "3M", "3L31"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3T", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + magmar: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E"], + belch: ["7E"], + bellydrum: ["7E"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + clearsmog: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + confuseray: ["7L26", "7V", "6L26", "6S4", "5L26", "5S3", "4L25", "4S2", "3L49"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + crosschop: ["7E", "3S1"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["7E", "3T"], + ember: ["7L5", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L12", "6L12", "5L16", "5S3", "4L16"], + fireblast: ["7M", "7L55", "7V", "6M", "6L55", "5M", "5L62", "4M", "4L54", "3M", "3L57", "3S1"], + firepunch: ["7L29", "7V", "6T", "6L29", "6S4", "5T", "5L38", "4T", "4L28", "4S2", "3T", "3L1", "3S0"], + firespin: ["7L15", "6L15", "6S4", "5L21", "5S3", "4L19", "4S2"], + flameburst: ["7L22", "6L22", "5L32"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L49", "7V", "6M", "6L49", "5M", "5L50", "4M", "4L41", "3M", "3L41"], + flareblitz: ["7E"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E"], + focuspunch: ["6T", "4M", "3M"], + followme: ["3S1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "5T", "4M", "3M"], + karatechop: ["7E"], + lavaplume: ["7L36", "6L36", "5L44", "4L36"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7E"], + megakick: ["7V", "3T"], + megapunch: ["7E", "7V", "3T"], + metronome: ["7V"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + powerswap: ["7E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psywave: ["7V"], + rage: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + screech: ["7E"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smog: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S0"], + smokescreen: ["7L8", "7V", "6L8", "6S4", "5L11", "5S3", "4L10", "4S2", "3L25"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L42", "6M", "6L42", "5M", "5L56", "4M", "4L49", "3M", "3L33"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7E", "6T", "5T", "4T", "3T", "3S1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + magmortar: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + clearsmog: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + confuseray: ["7L26", "6L26", "5L26", "4L25", "4S1"], + covet: ["6T", "5T"], + doubleteam: ["7M", "6M", "5M", "4M"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + ember: ["7L5", "7L1", "6L1", "5L1", "4L1"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L12", "6L12", "5L16", "4L16"], + fireblast: ["7M", "7L55", "6M", "6L55", "5M", "5L62", "4M", "4L58"], + firepunch: ["7L29", "6T", "6L29", "5T", "5L38", "4T", "4L28", "4S1"], + firespin: ["7L15", "6L15", "5L21", "4L19"], + flameburst: ["7L22", "6L22", "5L32"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "5L50", "4M", "4L43", "4S0", "4S1"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "7L62", "6M", "6L62", "5M", "5L68", "4M", "4L67", "4S0"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + lavaplume: ["7L36", "6L36", "5L44", "4L37", "4S1"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mudslap: ["4T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M", "4S0"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smog: ["7L1", "6L1", "5L1", "4L1"], + smokescreen: ["7L8", "7L1", "6L1", "5L1", "4L1"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M", "4S0"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "7L42", "6M", "6L42", "5M", "5L56", "4M", "4L52"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + pinsir: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["7L4", "7V", "6T", "6L4", "5T", "5L4", "4L4", "3L7"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "7L26", "6M", "6L18", "5M", "5L21", "4M", "4L21", "3M", "3L31"], + brutalswing: ["7M"], + bugbite: ["7E", "6T", "6E", "5T", "5E"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + closecombat: ["7E", "6E", "5E", "5D", "4E"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doublehit: ["7L22", "6L22"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "6S1", "6S2", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M", "4E", "3E", "3S0"], + feint: ["7E", "6E", "6S2", "5E", "4E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7E", "6E", "5E", "4E", "3E"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7E", "6E", "5E", "4E", "3E"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + guillotine: ["7L50", "7V", "6L47", "5L47", "4L47", "3L37", "3S0"], + harden: ["7L11", "7V", "6L11", "5L13", "4L13", "3L19"], + headbutt: ["4T"], + helpinghand: ["3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + mefirst: ["7E", "6E", "5E", "5D"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "6E", "6S2", "5E", "4E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "6S1", "5M", "4M", "3M"], + revenge: ["7L15", "6L15", "5L18", "4L18", "3L25"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7L8", "7V", "6L8", "5L8", "4L8", "3T", "3L13"], + slash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "6S1", "5M", "4M"], + stormthrow: ["7L36", "6L33", "5L33"], + strength: ["7V", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + submission: ["7L33", "7V", "6L26", "5L42", "4L42", "3L43", "3S0"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7L47", "7E", "6T", "6L43", "6E", "5T", "5L52", "5E", "4T", "4L52"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7L40", "7V", "6M", "6L40", "6S2", "5M", "5L38", "4M", "4L38", "3T", "3L49"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L43", "6L36", "5L35", "4L35"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + vicegrip: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L1"], + vitalthrow: ["7L18", "6L18", "5L25", "4L25"], + xscissor: ["7M", "7L29", "6M", "6L29", "6S1", "5M", "5L30", "4M", "4L30"], + }}, + tauros: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T", "3S2"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + fissure: ["7V"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "7L63", "6M", "6L63", "5M", "5L63", "4M", "4L55"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L8", "6L8", "5L8", "4L8", "3L8", "3S0", "3S1"], + horndrill: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "5D", "4M", "3M"], + leer: ["7V"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payback: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L15", "6L15", "5L15", "4L15", "3L19", "3S0"], + rage: ["7L5", "7V", "6L5", "5L5", "5D", "4L5", "3L4", "3S0", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S2"], + rest: ["7M", "7L19", "7V", "6M", "6L19", "5M", "5L19", "4M", "4L19", "3M", "3L34"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["5D", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L11", "6L11", "5L11", "4L11", "3L13", "3S0"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + stomp: ["7V"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L41", "3T", "3L26"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1", "3S1"], + tailwhip: ["7L3", "7V", "6L3", "5L3", "4L3", "3L1", "3S1", "3S2"], + takedown: ["7L41", "7V", "6L41", "5L41", "4L35", "3L53"], + thrash: ["7L50", "6L50", "5L55", "4L48", "3L43"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L29", "6L29", "5M", "5L29"], + zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L29"], + }}, + magikarp: {learnset: { + bounce: ["7S7", "6T", "5T", "5S5", "5D", "4T"], + celebrate: ["6S6"], + flail: ["7L30", "6L30", "5L30", "5S5", "4L30", "3L30"], + happyhour: ["6S6"], + hydropump: ["5S5"], + splash: ["7L1", "7S7", "7V", "6L1", "6S6", "5L1", "5S5", "5D", "4L1", "4S0", "4S1", "4S2", "4S3", "4S4", "3L1"], + tackle: ["7L15", "7V", "6L15", "5L15", "4L15", "3L15"], + }}, + gyarados: {learnset: { + aquatail: ["7L30", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7V"], + bite: ["7L1", "7V", "6L20", "6S1", "5L20", "4L20", "3L20"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L39", "6L41"], + darkpulse: ["7M", "6M", "5T", "4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragondance: ["7L45", "6L44", "6S0", "5L44", "4L44", "3L50"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L36", "7V", "6L23", "5L23", "4L23", "3L25"], + dragontail: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "6S0", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L48"], + hydropump: ["7L42", "7V", "6L41", "5L41", "4L41", "3L40"], + hyperbeam: ["7M", "7L54", "7V", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L55"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icefang: ["7L27", "6L32", "6S0", "6S1", "5L32", "4L32"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "6S1", "5T", "4T"], + irontail: ["6T", "5T"], + leer: ["7L21", "7V", "6L26", "5L26", "4L26", "3L30"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "7L51", "6M", "6L38", "5M", "5L38", "4M", "4L38", "3M", "3L45"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L33"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7V"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L24", "6L29", "5L29", "4T", "4L29", "3L35"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "6S0", "6S1", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + lapras: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E", "4M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M", "3S0"], + block: ["6T", "5T", "4T"], + bodyslam: ["7L18", "7V", "6L18", "5L18", "4L18", "3T", "3L13"], + brine: ["7L37", "6L37", "5L37", "4M", "4L37"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L7", "7V", "6L7", "5L7", "5D", "4L7", "3L19"], + curse: ["7E", "6E", "5E", "4E", "3E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E", "3E"], + dragonpulse: ["7E", "6T", "6E", "5T", "5E", "4M"], + dragonrage: ["7V"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillrun: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "4E"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + freezedry: ["7E", "6E"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + horndrill: ["7E", "7V", "6E", "5E", "5D", "4E", "3E"], + hydropump: ["7L47", "7V", "6L47", "5L49", "4L49", "3L49", "3S0"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7L32", "7V", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L31"], + iceshard: ["7L10", "6L10", "5L10", "4L10"], + icywind: ["6T", "5T", "5D", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["7V", "3T"], + mist: ["7L4", "7V", "6L4", "5L4", "4L4", "3L7"], + naturalgift: ["4M"], + nightmare: ["3T"], + outrage: ["6T", "5T", "4T"], + perishsong: ["7L27", "6L27", "5L27", "4L27", "3L25"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L37", "3S0"], + reflect: ["7V"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L50", "6L50", "5L55", "4L55", "3L55"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + skullbash: ["7V"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7V"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + tickle: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7L14", "6T", "6L14", "5L14", "4M", "4L14", "3M"], + whirlpool: ["7E", "6E", "5E", "4M", "4E"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + ditto: {learnset: { + transform: ["7L1", "7V", "7S0", "6L1", "5L1", "4L1", "3L1"], + }}, + eevee: {learnset: { + attract: ["7M", "6M", "5M", "5S2", "4M", "4S0", "3M"], + babydolleyes: ["7L9", "7S5", "6L9", "6S3", "6S4"], + batonpass: ["7L33", "6L33", "5L36", "4L36", "3L36"], + bide: ["7V"], + bite: ["7L17", "7V", "6L17", "5L29", "4L29", "4S0", "3L30"], + bodyslam: ["7V", "3T"], + captivate: ["7E", "6E", "4M"], + celebrate: ["7S5", "6S3"], + charm: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "5D", "4E", "3E"], + confide: ["7M", "6M"], + covet: ["7L1", "7E", "6T", "6L23", "6E", "5T", "5L21", "5E", "4E", "4S0"], + curse: ["7E", "6E", "5E", "4E", "3E"], + detect: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L37", "7V", "6L37", "5L37", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M", "5S2"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E", "4E"], + flail: ["7E", "6E", "5E", "4E", "4S1", "3E"], + focusenergy: ["7V"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "7V", "6L1", "5L15", "4L15", "3L16"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "6S4", "5T", "5L1", "4T", "4L1", "4S0", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T", "4M", "4S1", "3M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "6S4", "5L22", "4L22", "4S1", "3L23"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + refresh: ["7L20", "6L20"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "5S2", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7S5", "7V", "6L5", "6S3", "5L8", "5D", "4L8", "3L8"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sing: ["5S2"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L17", "7V", "6L10", "6S3", "6S4", "5D", "4T", "3T"], + synchronoise: ["7E", "6E", "5E"], + tackle: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L25", "7V", "6L25", "5L43", "4L43", "3L42"], + tickle: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + trumpcard: ["7L45", "6L45", "5L57", "4L57", "4S1"], + wish: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + yawn: ["7E", "6E", "5E", "4E"], + }}, + vaporeon: {learnset: { + acidarmor: ["7L29", "7V", "6L29", "5L64", "4L64", "3L47"], + aquaring: ["7L25", "6L25", "5L43", "4L43"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L20", "7V", "6L20", "5L36", "4L36", "3L36"], + babydolleyes: ["7L9"], + bide: ["7V"], + bite: ["7V", "5L29", "4L29", "3L30"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brine: ["4M"], + bubblebeam: ["7V"], + captivate: ["4M"], + celebrate: ["6S1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L33", "7V", "6L33", "5L57", "4L57", "3L42"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L45", "7V", "6L45", "5L71", "4L71", "3L52"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "7S2", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + mimic: ["7V", "3T"], + mist: ["7V"], + muddywater: ["7L37", "6L37", "5L78", "4L78"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + rage: ["7V"], + raindance: ["7M", "7S2", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "7S2", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + scald: ["7M", "7S2", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + waterpulse: ["7L17", "6T", "6L17", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + jolteon: {learnset: { + agility: ["7L29", "7V", "6L29", "5L64", "4L64", "3L47"], + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L9"], + bide: ["7V"], + bodyslam: ["7V", "3T"], + captivate: ["4M"], + celebrate: ["6S1"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dig: ["6M", "5M", "4M", "3M"], + discharge: ["7L37", "6L37", "5L78", "4L78"], + doubleedge: ["7V", "3T"], + doublekick: ["7L17", "7V", "6L17", "5L29", "4L29", "3L30"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lightscreen: ["7M", "7S2", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + pinmissile: ["7L25", "7V", "6L25", "5L36", "4L36", "3L36"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "6L13", "5L22", "4L22", "3L23"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7S2", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], + takedown: ["7V"], + thunder: ["7M", "7L45", "7V", "6M", "6L45", "5M", "5L71", "4M", "4L71", "3M", "3L52"], + thunderbolt: ["7M", "7V", "7S2", "6M", "5M", "4M", "3M"], + thunderfang: ["7L20", "6L20", "5L43", "4L43"], + thundershock: ["7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + thunderwave: ["7M", "7L33", "7V", "6M", "6L33", "5M", "5L57", "4M", "4L57", "3T", "3L42"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "7S2", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + flareon: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L9"], + bide: ["7V"], + bite: ["7L17", "7V", "6L17", "5L29", "4L29", "3L30"], + bodyslam: ["7V", "3T"], + captivate: ["4M"], + celebrate: ["6S1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L1", "7V", "6L9", "6S1", "5L15", "4L15", "3L16"], + endure: ["4M", "3T"], + facade: ["7M", "7S2", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "5L71", "4M", "4L71", "3M"], + firefang: ["7L20", "6L20", "5L43", "4L43"], + firespin: ["7L25", "7V", "6L25", "5L36", "4L36", "3L36"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7V", "6M", "5M", "4M", "3M", "3L52"], + flareblitz: ["7L45", "7S2", "6L45"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lavaplume: ["7L37", "6L37", "5L78", "4L78"], + leer: ["7V", "3L47"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7V", "7S2", "6L13", "5L22", "4L22", "3L23"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7V", "6L5", "6S1", "5L8", "5S0", "4L8", "3L8"], + scaryface: ["7L29", "6L29", "5L64", "4L64"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smog: ["7L33", "7V", "6L33", "5L57", "4L57", "3L42"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + tailwhip: ["7L1", "7V", "6L1", "6S1", "5L1", "5S0", "4L1", "3L1"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "7S2", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + espeon: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L9"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + celebrate: ["6S2"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L9", "6S2", "5L15", "4L15", "3L16"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "7S3", "6M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L25", "6L25", "5L43", "4L43"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mimic: ["3T"], + morningsun: ["7L33", "6L33", "5L71", "4L71", "3L52", "3S0"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + powerswap: ["7L45", "6L45", "5L78", "4L78"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L20", "6L20", "5L36", "4L36", "3L36", "3S0"], + psychic: ["7M", "7L37", "7S3", "6M", "6L37", "5M", "5L64", "4M", "4L64", "3M", "3L47", "3S0"], + psychup: ["7M", "7L29", "6M", "6L29", "5M", "5L57", "4M", "4L57", "3T", "3L42", "3S0"], + psyshock: ["7M", "6M", "5M"], + quickattack: ["7L13", "6L13", "5L22", "4L22", "3L23"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7S3", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7S3", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L17", "6L17", "5L29", "4T", "4L29", "3T", "3L30"], + tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1"], + tailwhip: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], + telekinesis: ["5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + umbreon: {learnset: { + assurance: ["7L25", "6L25", "5L43", "4L43"], + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L9"], + bodyslam: ["3T"], + captivate: ["4M"], + celebrate: ["6S2"], + confide: ["7M", "6M"], + confuseray: ["7L17", "6L17", "5L29", "4L29", "3L30"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L20", "6L20", "5L36", "4L36", "3L36", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + guardswap: ["7L45", "6L45", "5L78", "4L78"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + meanlook: ["7L37", "6L37", "5L57", "4L57", "3L42", "3S0"], + mimic: ["3T"], + moonlight: ["7L33", "7S3", "6L33", "5L71", "4L71", "3L52", "3S0"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7S3", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L1", "6L9", "6S2", "5L15", "4L15", "3L16"], + quickattack: ["7L13", "6L13", "5L22", "4L22", "3L23"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "6L5", "6S2", "5L8", "5S1", "4L8", "3L8"], + screech: ["7L29", "6L29", "5L64", "4L64", "3L47", "3S0"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "7S3", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1"], + tailwhip: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7S3", "6M", "5M", "4M", "3M"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + }}, + leafeon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + babydolleyes: ["7L9"], + bulletseed: ["4M"], + captivate: ["4M"], + celebrate: ["6S1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigadrain: ["7L25", "6T", "6L25", "5T", "5L43", "4M", "4L43"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L17", "6L17", "5L57", "4L57"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + leafblade: ["7L45", "7S2", "6L45", "5L71", "4L71"], + magicalleaf: ["7L20", "6L20", "5L36", "4L36"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L13", "6L13", "5L22", "4L22"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L1", "6L9", "6S1", "5L15", "4L15"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "6L5", "6S1", "5L8", "5S0", "4L8"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "7L37", "7S2", "6M", "6L37", "5M", "5L64", "4M", "4L64"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L29", "7S2", "6M", "6L29", "5M", "5L78", "4M", "4L78"], + synthesis: ["7L33", "7S2", "6T", "6L33", "5T", "5L29", "4T", "4L29"], + tackle: ["7L1", "6L1", "5L1", "5S0", "4L1"], + tailwhip: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + glaceon: {learnset: { + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + auroraveil: ["7M", "7S2"], + avalanche: ["4M"], + babydolleyes: ["7L9"], + barrier: ["7L29", "6L29", "5L78", "4L78"], + bite: ["7L17", "6L17", "5L29", "4L29"], + blizzard: ["7M", "7L45", "7S2", "6M", "6L45", "5M", "5L71", "4M", "4L71"], + captivate: ["4M"], + celebrate: ["6S1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "7L37", "7S2", "6M", "6L37", "5M", "5L64", "4M", "4L64"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L20", "6L20", "5L43", "4L43"], + iceshard: ["7L25", "6L25", "5L36", "4L36"], + icywind: ["7L1", "6T", "6L9", "6S1", "5T", "5L15", "4T", "4L15"], + irontail: ["6T", "5T", "4M"], + lastresort: ["7L41", "6T", "6L41", "5T", "5L50", "4T", "4L50"], + mirrorcoat: ["7L33", "6L33", "5L57", "4L57"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L13", "6L13", "5L22", "4L22"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "6L5", "6S1", "5L8", "5S0", "4L8"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7S2", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "5S0", "4L1"], + tailwhip: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + }}, + porygon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L12", "7V", "6L12", "5L12", "4L12", "3L9"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + conversion: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + conversion2: ["7L1", "6L1", "5L1", "4L1", "3L1"], + discharge: ["7L40", "6L40", "5L40", "4L40"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lockon: ["7L45", "6L45", "5L45", "4L45", "3L32"], + magiccoat: ["7L56", "6T", "6L56", "5T", "5L56", "4T", "4L56"], + magnetrise: ["7L23", "6T", "6L23", "5T", "5L23", "4L23"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L7", "7V", "6L7", "5L7", "5S0", "4L7", "3L12"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L18", "7V", "6L18", "5L18", "4L18", "3L20"], + recycle: ["7L34", "6T", "6L34", "5T", "5L34", "4M", "4L34", "3L44"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sharpen: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L24"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tackle: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + takedown: ["7V"], + teleport: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7L50", "7V", "6L50", "5L51", "4L51", "3L36"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zapcannon: ["7L62", "6L62", "5L62", "4L62", "3L48"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + porygon2: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L12", "6L12", "5L12", "4L12", "3L9"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + conversion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + conversion2: ["7L1", "6L1", "5L1", "4L1", "3L1"], + defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L24"], + discharge: ["7L40", "6L40", "5L40", "4L40"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L67", "4M", "4L67", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lockon: ["7L45", "6L45", "5L45", "4L45", "3L32"], + magiccoat: ["7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L56"], + magnetrise: ["7L23", "6T", "6L23", "5T", "5L23", "4L23"], + mimic: ["3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L7", "6L7", "5L7", "4L7", "3L12"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L18", "6L18", "5L18", "4L18", "3L20"], + recycle: ["7L34", "6T", "6L34", "5T", "5L34", "4M", "4L34", "3L44"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + triattack: ["7L50", "6L50", "5L51", "4L51", "3L36"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zapcannon: ["7L62", "7L1", "6L1", "5L62", "4L62", "3L48"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + porygonz: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7L12", "6L12", "5L12", "4L12"], + blizzard: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + conversion: ["7L1", "6L1", "5L1", "4L1"], + conversion2: ["7L1", "6L1", "5L1", "4L1"], + darkpulse: ["7M", "6M", "5T", "4M"], + discharge: ["7L40", "6L40", "5L40", "4L40"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["6T", "5T"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L34"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L67", "4M", "4L67"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + lastresort: ["6T", "5T", "4T"], + lockon: ["7L45", "6L45", "5L45", "4L45"], + magiccoat: ["7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L56"], + magnetrise: ["7L23", "6T", "6L23", "5T", "5L23", "4L23"], + nastyplot: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M"], + psybeam: ["7L7", "6L7", "5L7", "4L7"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recover: ["7L18", "6L18", "5L18", "4L18"], + recycle: ["6T", "5T", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + triattack: ["7L50", "6L50", "5L51", "4L51"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + uproar: ["6T", "5T", "4T"], + wonderroom: ["5T"], + zapcannon: ["7L62", "7L1", "6L1", "5L62", "4L62"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + omanyte: {learnset: { + ancientpower: ["7L37", "6L37", "5L37", "4T", "4L37", "3L49"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7E", "7V", "6E", "5E"], + bind: ["6T", "5T"], + bite: ["7L7", "6L7", "5L7", "5S0", "5D", "4L7", "3L13"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brine: ["7L28", "6L28", "5L28", "4M", "4L28"], + bubblebeam: ["7E", "7V", "6E", "5E", "5S0", "4E", "3E"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7V"], + hydropump: ["7L55", "7V", "6L55", "5L55", "4L52", "3L55"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "5D", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + leer: ["7L19", "7V", "6L19", "5L19", "4L19", "3L31"], + mimic: ["7V", "3T"], + muddywater: ["7E", "6E", "5E", "5D", "4E"], + mudshot: ["7L25", "6L25", "5L25", "4L25", "3L25"], + naturalgift: ["4M"], + protect: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + reflecttype: ["7E", "6E"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L46", "6L46", "5L46", "4L46"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L16", "6L16", "5L16", "4T", "4L16", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shellsmash: ["7L50", "6L50", "5L52"], + slam: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spikecannon: ["7V"], + spikes: ["7E", "6E", "5E", "4E", "3E"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + supersonic: ["7E", "6E", "5E", "5S0", "4E", "3E"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7L43", "6L43", "5L43", "4L43", "3L43"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + toxicspikes: ["7E", "6E", "5E", "4E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L10", "7V", "6L10", "5L10", "4L10", "3L19"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7E", "6E", "5E", "4M"], + withdraw: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + wringout: ["7E", "6E", "5E", "4E"], + }}, + omastar: {learnset: { + ancientpower: ["7L37", "6L37", "5L37", "4T", "4L37", "3L55"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + bite: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brine: ["7L28", "6L28", "5L28", "4M", "4L28"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7V"], + horndrill: ["7V"], + hydropump: ["7L75", "7L1", "7V", "6L1", "5L75", "4L67", "3L65"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L19", "7V", "6L19", "5L19", "4L19", "3L31"], + mimic: ["7V", "3T"], + mudshot: ["7L25", "6L25", "5L25", "4L25", "3L25"], + naturalgift: ["4M"], + protect: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L56", "6L56", "5L56", "4L56"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L16", "6L16", "5L16", "4T", "4L16", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + shellsmash: ["7L67", "6L67", "5L67"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spikecannon: ["7L1", "7V", "6L40", "5L40", "4L40", "3L40"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7L48", "6L48", "5L48", "4L48", "3L46"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L10", "7V", "6L10", "5L10", "4L10", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + withdraw: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + kabuto: {learnset: { + absorb: ["7L6", "7V", "6L6", "5L6", "5D", "4L6", "3L13"], + aerialace: ["7M", "3M"], + ancientpower: ["7L46", "6L46", "5L46", "4T", "4L46", "3L55"], + aquajet: ["7L31", "6L31", "5L31", "4L31"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brine: ["4M"], + bubblebeam: ["7E", "7V", "6E", "5E", "4E", "3E"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "5S0", "4E", "3E"], + dig: ["6M", "5M", "5S0", "4M", "4E", "3M", "3E"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endure: ["7L26", "6L26", "5L26", "4M", "4L26", "3T", "3L37"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "5D", "4E", "3E"], + foresight: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7V"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + leer: ["7L11", "7V", "6L11", "5L11", "4L11", "3L19"], + megadrain: ["7L36", "6L36", "5L36", "4L36", "3L49"], + metalsound: ["7L41", "6L41", "5L41", "4L41", "3L43"], + mimic: ["7V", "3T"], + mudshot: ["7L16", "7E", "6L16", "6E", "5L16", "5E", "4L16", "4E", "3L25"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L21", "6L21", "5L21", "4L21", "3L31"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "5S0", "4L1", "3L1"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + slash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "5D", "4M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7E", "7V", "6E"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wringout: ["7L50", "6L50", "5L51", "4L51"], + }}, + kabutops: {learnset: { + absorb: ["7L6", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L54", "6L54", "5L54", "4T", "4L54", "3L65"], + aquajet: ["7L31", "6L31", "5L31", "4L31"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["7V", "6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endure: ["7L26", "6L26", "5L26", "4M", "4L26", "3T", "3L37"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T", "3L1"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L11", "7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megadrain: ["7L36", "6L36", "5L36", "4L36", "3L55"], + megakick: ["7V", "3T"], + metalsound: ["7L45", "6L45", "5L45", "4L45", "3L46"], + mimic: ["7V", "3T"], + mudshot: ["7L16", "6L16", "5L16", "4L16", "3L25"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + nightslash: ["7L72", "7L1", "6L1", "5L72", "4L72"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L21", "6L21", "5L21", "4L21", "3L31"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + scratch: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + skullbash: ["7V"], + slash: ["7L1", "7V", "6L40", "5L40", "4L40", "3L40"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + takedown: ["7V"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wringout: ["7L63", "6L63", "5L63", "4L63"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + aerodactyl: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L17", "7V", "6L17", "5L17", "4L17", "3L8"], + aircutter: ["4T"], + ancientpower: ["7L25", "6L25", "5L25", "4T", "4L25", "3L29"], + aquatail: ["6T", "5T", "4T"], + assurance: ["7E", "6E", "5E", "5D", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bite: ["7L1", "7V", "6L1", "5L1", "5D", "4L1", "3L15"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L33", "6L33", "5L33", "4L33"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7V"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "5S0", "4L1"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "7L81", "6M", "6L81", "5M", "5L81", "4M", "4L73"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L65", "7V", "6M", "6L65", "5M", "5L65", "4M", "4L57", "3M", "3L50"], + icefang: ["7L1", "6L1", "5L1", "5S0", "4L1"], + incinerate: ["6M", "5M"], + ironhead: ["7L57", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L49"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "4M", "4L9", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L73", "6M", "6L73", "5M", "5L73", "4M", "4L65", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L1", "6L1", "5L1", "4L1", "3L36"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7V", "6T", "5T", "4T", "3T"], + skydrop: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "5D", "4M"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "5S0", "4M", "4E", "3M", "3E"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L1", "7V", "6L1", "5L1", "4L1", "3L22"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["7E", "6T", "6E", "5T", "5E", "4T"], + takedown: ["7L41", "7V", "6L41", "5L41", "4L41", "3L43"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "5S0", "4L1"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + whirlwind: ["7E", "7V", "6E", "5E", "4E", "3E"], + wideguard: ["7E", "6E"], + wingattack: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + munchlax: {learnset: { + afteryou: ["7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L9", "6L9", "5L9", "4L9"], + attract: ["7M", "6M", "5M", "4M"], + belch: ["7E", "6E"], + bellydrum: ["7L44", "6L44"], + blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["7L25", "6L25", "5L36", "4L33"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7E", "6E", "5E", "4E"], + chipaway: ["7L17", "6L17", "5L25"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + covet: ["6T", "5T"], + curse: ["7E", "6E", "5E", "4E", "4S1"], + defensecurl: ["7L4", "6L4", "5L4", "4L4", "4S0"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L36"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + happyhour: ["7S2"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + holdback: ["7S2"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + lastresort: ["7L57", "7L1", "6T", "6L1", "5T", "5L57", "4T", "4L49"], + lick: ["7L12", "7E", "7L1", "6L1", "6E", "5L12", "5E", "4L12", "4E"], + metronome: ["7L1", "7S2", "6L1", "5L1", "4L1", "4S0", "4S1"], + mudslap: ["4T"], + naturalgift: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4M", "4L44"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1", "4S1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + pursuit: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["7L1", "6T", "6L1", "5T", "5L17", "4M", "4L17"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["7L36", "6L36", "5L44", "4T", "4L41"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + screech: ["7L20", "6L20", "5L20", "4L20"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["7E", "6E", "5E", "4S0"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["7L50", "6T", "6L1", "5T", "5L52"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stockpile: ["7L28", "6L28", "5L28", "4L25"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M", "4E"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7L33", "6L33", "5L33", "4L28"], + tackle: ["7L1", "7S2", "6L1", "5L1", "4L1", "4S0", "4S1"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M"], + whirlpool: ["4M"], + whirlwind: ["7E", "6E", "5E", "4E"], + workup: ["7M", "5M"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + snorlax: {learnset: { + afteryou: ["7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L9", "7V", "6L9", "5L9", "5D", "4L9", "3L5"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7E", "6E"], + bellydrum: ["7L44", "6L44", "5L17", "4L17", "3L13"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["7L41", "6T", "6L41", "5T", "5L41", "4T", "4L36", "3L37"], + bodyslam: ["7L25", "7V", "6L25", "5L36", "4L33", "3T", "3L33", "3S0"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], + chipaway: ["7L17", "6L17", "5L25"], + confide: ["7M", "6M"], + counter: ["7E", "7V", "6E", "5E", "4E", "3T"], + covet: ["6T", "5T", "3L42"], + crunch: ["7L49", "6L49", "5L49", "4L44"], + curse: ["7E", "6E", "5E", "4E", "3E", "3S0"], + defensecurl: ["7L4", "6L4", "5L4", "4L4", "3T", "3L9"], + doubleedge: ["7E", "7V", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "5D", "4T", "3T"], + fissure: ["7E", "7V", "6E", "5E", "4E", "3E", "3S0"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "7L35", "6M", "6L57", "5M", "5L57", "4M", "4L49"], + gunkshot: ["6T", "5T", "4T"], + harden: ["7V"], + headbutt: ["7V", "4T", "3L17"], + heavyslam: ["7L50", "6L50", "5L52"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + highhorsepower: ["7L57"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M", "3L51"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lick: ["7L12", "7E", "6L12", "6E", "5L12", "5E", "4L12", "4E", "3E"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + outrage: ["6T", "5T", "4T"], + payday: ["7V"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7V", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + psywave: ["7V"], + pursuit: ["7E", "6E", "5E", "4E"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "5D", "4M"], + reflect: ["7V"], + refresh: ["3S0"], + rest: ["7M", "7L28", "7V", "6M", "6L28", "5M", "5L28", "4M", "4L25", "3M", "3L25"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L36", "6L36", "5L44", "4T", "4L41", "3T", "3L46"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "7L33", "6M", "6L33", "5T", "5L33", "4M", "4L28", "3T", "3L37"], + smackdown: ["7M", "6M", "5M"], + snore: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3T", "3L28"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + whirlwind: ["7E", "6E", "5E", "4E"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + yawn: ["7L20", "6L20", "5L20", "4L20", "3L21"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + articuno: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L36", "7V", "6L36", "5L36", "4L36", "4S3", "4S4", "3L25", "3S0", "3S1"], + aircutter: ["4T"], + ancientpower: ["7L29", "6L29", "5L29", "4T", "4L29"], + auroraveil: ["7M"], + avalanche: ["4M"], + bide: ["7V"], + blizzard: ["7M", "7L78", "7V", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L73"], + bubblebeam: ["7V"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + extrasensory: ["3S2"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + freezedry: ["7L43", "6L1", "6S6"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L57", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], + haze: ["3S2"], + healbell: ["3S2"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L92", "6L1", "5L92"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7L71", "7V", "6M", "6L43", "6S5", "6S6", "5M", "5L43", "4M", "4L43", "4S3", "4S4", "3M", "3L49", "3S0", "3S1", "3S2"], + iceshard: ["7L15", "6L15", "5L15", "4L15"], + icywind: ["6T", "5T", "4T", "3T"], + mimic: ["7V", "3T"], + mindreader: ["7L22", "6L22", "5L22", "4L22", "4S4", "3L37", "3S0", "3S1"], + mist: ["7L8", "7V", "6L8", "5L8", "4L8", "4S4", "3L13", "3S0"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7V"], + pluck: ["5M", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7M", "7L50", "7V", "6M", "6L50", "6S5", "6S6", "5M", "5L50", "4M", "4L50", "4S3", "3M", "3L61", "3S1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "7L85", "6M", "6L1", "5T", "5L57", "4M", "4L57", "4S3"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L99", "6L1", "5L78", "4L78", "3L85"], + signalbeam: ["6T", "5T", "4T"], + skyattack: ["7V", "6T", "5T", "4T", "3T"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["7L64", "6T", "6L1", "6S5", "5T", "5L64", "4T", "4L64"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlwind: ["7V"], + }}, + zapdos: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L43", "7V", "6L43", "6S5", "6S6", "5L43", "4L43", "4S3", "4S4", "3L25", "3S0", "3S1"], + aircutter: ["4T"], + ancientpower: ["7L29", "6L29", "5L29", "4T", "4L29"], + batonpass: ["3S2"], + bide: ["7V"], + charge: ["7L36", "6L36", "5L36", "4L36", "4S3", "3L61", "3S1"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + defog: ["4M"], + detect: ["7L15", "6L15", "5L15", "4L15", "4S4", "3L37", "3S0", "3S1"], + discharge: ["7L50", "6L50", "6S5", "6S6", "5L50", "4L50", "4S3"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drillpeck: ["7L71", "7V", "6L1", "5L71", "4L71", "4S4", "3L49", "3S0", "3S1"], + endure: ["4M", "3T"], + extrasensory: ["3S2"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + lightscreen: ["7M", "7L64", "7V", "6M", "6L64", "6S5", "5M", "5L64", "4M", "4L64", "3M", "3L73"], + magneticflux: ["7L92"], + metalsound: ["3S2"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L22", "6L22", "5M", "5L22", "4M", "4L22"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "7L57", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "7L85", "6M", "6L1", "5T", "5L57", "4M", "4L57", "4S3"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skyattack: ["7V", "6T", "5T", "4T", "3T"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + thunder: ["7M", "7L78", "7V", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L85"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M", "3S2"], + thundershock: ["7L1", "7V", "6L1", "6S6", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L8", "7V", "6M", "6L8", "5M", "5L8", "4M", "4L8", "4S4", "3T", "3L13", "3S0"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + whirlwind: ["7V"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L99", "6L1", "5L92"], + }}, + moltres: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L15", "7V", "6L15", "5L15", "4L15", "4S4", "3L25", "3S0", "3S1"], + aircutter: ["4T"], + airslash: ["7L50", "6L50", "6S5", "5L50", "4L50", "4S3"], + ancientpower: ["7L29", "6L29", "5L29", "4T", "4L29"], + bide: ["7V"], + burnup: ["7L99"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + ember: ["7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["7L22", "6L22", "5L22", "4M", "4L22", "4S4", "3T", "3L37", "3S0", "3S1"], + extrasensory: ["3S2"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firespin: ["7L8", "7V", "6L8", "5L8", "4L8", "4S4", "3L13", "3S0"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S3", "4S4", "3M", "3L49", "3S0", "3S1", "3S2"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + heatwave: ["7L64", "6T", "6L1", "6S5", "6S6", "5T", "5L64", "4T", "4L64", "3L73"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L92", "6L1", "5L92"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + leer: ["7V"], + mimic: ["7V", "3T"], + morningsun: ["3S2"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7V"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "7L85", "6M", "6L1", "5T", "5L57", "4M", "4L57", "4S3"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L43", "6M", "6L43", "6S5", "6S6", "5M", "5L43", "4M", "4L43", "4S3", "3M", "3L61", "3S1"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7L78", "7V", "6T", "6L1", "6S6", "5T", "5L78", "4T", "4L78", "3T", "3L85"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L71", "6M", "6L71", "5M", "5L71", "4M", "4L71"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L57", "6M", "6L57", "6S5", "6S6", "5M", "5L85", "4M", "4L85", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7V"], + willowisp: ["7M", "6M", "5M", "4M", "3S2"], + wingattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + dratini: {learnset: { + agility: ["7L25", "7V", "6L25", "5L25", "4L25", "3L36"], + aquajet: ["7E", "6E", "5E"], + aquatail: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L31"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7E", "6E", "5E", "5D", "4E", "3E"], + dragondance: ["7L51", "7E", "6L51", "6E", "5L51", "5E", "4L45", "4E", "3E"], + dragonpulse: ["7E", "6T", "6E", "5T", "5E", "4M"], + dragonrage: ["7L15", "7V", "6L15", "5L15", "4L15", "3L22"], + dragonrush: ["7L41", "7E", "6L41", "6E", "5L41", "5E", "4L35", "4E"], + dragontail: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + endure: ["4M", "3T"], + extremespeed: ["7E", "6E", "5E", "4E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L61", "7V", "6M", "6L61", "5M", "5L61", "4M", "4L55", "3M", "3L57"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + mimic: ["7V", "3T"], + mist: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + outrage: ["7L55", "6T", "6L55", "5T", "5L55", "4T", "4L51", "3L50"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L41", "3M", "3L43"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + slam: ["7L21", "7V", "6L21", "5L21", "4L21", "3L29"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L5", "7V", "6M", "6L5", "5M", "5L5", "5D", "4M", "4L5", "3T", "3L8"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L11", "6L11", "5L11", "4T", "4L11", "3L15"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["7E", "6T", "6E", "5E", "5D", "4M", "3M"], + whirlpool: ["4M"], + wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + dragonair: {learnset: { + agility: ["7L25", "7V", "6L25", "5L25", "4L25", "3L38"], + aquatail: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L33"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragondance: ["7L61", "6L61", "5L61", "4L53"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L15", "7V", "6L15", "5L15", "4L15", "3L22"], + dragonrush: ["7L47", "6L47", "5L47", "4L39"], + dragontail: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + horndrill: ["7V"], + hyperbeam: ["7M", "7L75", "7V", "6M", "6L75", "5M", "5L75", "4M", "4L67", "3M", "3L65"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + mimic: ["7V", "3T"], + naturalgift: ["4M"], + outrage: ["7L67", "6T", "6L67", "5T", "5L67", "4T", "4L61", "3L56"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L53", "6M", "6L53", "5M", "5L53", "4M", "4L47", "3M", "3L47"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + slam: ["7L21", "7V", "6L21", "5L21", "4L21", "3L29"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + takedown: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L5", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L11", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + dragonite: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L25", "7V", "6L25", "6S8", "5L25", "4L25", "3L38", "3S0"], + aircutter: ["4T"], + aquatail: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L33"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["6S8"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T", "4S2"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7L61", "6L61", "6S7", "5L61", "5S3", "4L53", "4S2", "3S1"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L15", "7V", "6L15", "5L15", "4L15", "3L22"], + dragonrush: ["7L47", "6L47", "5L47", "5S4", "5S5", "4L39"], + dragontail: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M", "3S1"], + endure: ["4M", "3T"], + extremespeed: ["6S7", "5S3", "5S5"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "5S6", "4M", "3M"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "5S3", "4T", "4L1", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["3S1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + horndrill: ["7V"], + hurricane: ["7L81", "7L1", "6L1", "6S7", "5L81"], + hyperbeam: ["7M", "7L75", "7V", "6M", "6L75", "6S8", "5M", "5L75", "5S6", "4M", "4L73", "3M", "3L75", "3S1"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + outrage: ["7L67", "6T", "6L67", "6S7", "5T", "5L67", "5S3", "5S6", "4T", "4L64", "4S2", "3L61", "3S0"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + reflect: ["7V"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L1", "6M", "6L1", "5T", "5L1", "4M", "4L1"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L53", "6M", "6L53", "5M", "5L53", "5S4", "5S5", "5S6", "4M", "4L47", "3M", "3L47", "3S0"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + skullbash: ["7V"], + skydrop: ["7M", "6M", "5M"], + slam: ["7L21", "7V", "6L21", "6S8", "5L21", "4L21", "3L29"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "4S2", "3M"], + thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "5S4", "4T", "4L1", "3T"], + thunderwave: ["7M", "7L5", "7L1", "7V", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + twister: ["7L11", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wingattack: ["7L1", "6L55", "5L55", "5S4", "5S5", "4L55", "3L55", "3S0"], + wrap: ["7L1", "7V", "6L1", "5L1", "4L1", "3L1"], + }}, + mewtwo: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7L79", "7V", "6L79", "5L50", "4L57", "4S1", "3L77"], + aquatail: ["6T", "5T", "4T"], + aurasphere: ["7L70", "6L70", "6S4", "6S5", "5L93", "5S2", "4L100"], + avalanche: ["4M"], + barrier: ["7L64", "7V", "6L64", "6S4", "5L1", "4L8", "3L11"], + bide: ["7V"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + bodyslam: ["7V", "3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + counter: ["7V", "3T"], + disable: ["7L1", "6L1", "5L1", "4L1", "3L1"], + dive: ["6M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + electroball: ["5S2"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L15", "6L15", "5L15", "4L22", "3L44"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + guardswap: ["7L43", "6L43", "5L57", "4L64", "4S1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healpulse: ["5S3"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["5S3"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7V", "6M", "5M", "5S3", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + laserfocus: ["7L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mefirst: ["7L93", "6L93", "5L71", "4L79"], + megakick: ["7V", "3T"], + megapunch: ["7V", "3T"], + metronome: ["7V", "3T"], + mimic: ["7V", "3T"], + miracleeye: ["7L29", "6L29", "5L29", "4L36"], + mist: ["7L86", "7V", "6L86", "5L36", "4L43", "3L22"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + payday: ["7V"], + poisonjab: ["7M", "6M", "5M", "4M"], + powerswap: ["7L43", "6L43", "5L57", "4L64", "4S1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L57", "7V", "6M", "6L57", "6S4", "6S5", "5M", "5L64", "4M", "4L71", "3M", "3L66", "3S0"], + psychocut: ["7L36", "6L36", "5L43", "4L50", "4S1"], + psychup: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L29", "3T", "3L33"], + psyshock: ["7M", "6M", "5M"], + psystrike: ["7L100", "6L100", "6S5", "5L100", "5S2", "5S3"], + psywave: ["7L1", "7V"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L50", "7V", "6L50", "6S4", "6S5", "5L79", "4L86", "3L44", "3S0"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L86", "4M", "4L93", "3M", "3L55", "3S0"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "5S2", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L8", "7V", "6L8", "5L8", "4T", "4L15", "3T", "3L22", "3S0"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7V"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + mew: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["6T", "5T"], + aircutter: ["4T"], + allyswitch: ["5M"], + amnesia: ["7L60", "6L60", "5L60", "4L60", "4S17"], + ancientpower: ["7L50", "6L50", "5L50", "4T", "4L50", "4S14", "3L50"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurasphere: ["7L100", "6L100", "5L100", "4L100", "4S14", "4S15", "4S16", "4S17", "4S18", "4S19"], + auroraveil: ["7M"], + avalanche: ["4M"], + barrier: ["7L40", "7S24", "6L40", "5L40", "4L40", "4S15"], + batonpass: ["7L80", "6L80", "5L80", "4L80"], + bide: ["7V"], + bind: ["6T", "5T"], + blizzard: ["7M", "7V", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["7V", "3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + brutalswing: ["7M"], + bubblebeam: ["7V"], + bugbite: ["6T", "5T", "4T"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["7V", "3T"], + covet: ["6T", "5T"], + cut: ["7V", "6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + defog: ["4M"], + dig: ["7V", "6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7V", "3T"], + doubleteam: ["7M", "7V", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7V"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "7V", "6M", "5M", "4M", "3T"], + drillrun: ["6T", "5T"], + dualchop: ["6T", "5T"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7V", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + eggbomb: ["7V"], + electroweb: ["6T", "5T"], + embargo: ["7M", "6M", "5M", "4M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7V", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["3S2", "3S3"], + falseswipe: ["7M", "6M", "5M", "4M"], + feintattack: ["3S4", "3S5"], + fireblast: ["7M", "7V", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fissure: ["7V"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7V", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "7V", "6M", "5M", "4M", "3M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gastroacid: ["6T", "5T", "4T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gunkshot: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + horndrill: ["7V"], + hyperbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["4S20", "3S6", "3S7"], + icebeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + leechlife: ["7M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + magnetrise: ["6T", "5T", "4T"], + mefirst: ["7L70", "6L70", "5L70", "4L70"], + megadrain: ["7V"], + megakick: ["7V", "3T"], + megapunch: ["7L10", "7V", "6L10", "5L10", "4L10", "4S16", "3T", "3L20", "3S0"], + metronome: ["7L20", "7V", "7S24", "6L20", "5L20", "4L20", "4S14", "4S15", "4S16", "4S17", "4S18", "4S19", "3T", "3L30", "3S0"], + mimic: ["7V", "3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L90", "6L90", "5L90", "4L90"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + nightmare: ["3T"], + nightshade: ["3S8", "3S9"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["7V"], + pluck: ["5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "7V", "7S23", "6L1", "6S22", "5L1", "4L1", "4S21", "3L1", "3S0", "3S1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L30", "7V", "7S24", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S19", "3M", "3L40"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7V"], + quash: ["7M", "6M", "5M"], + rage: ["7V"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7V"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7V", "6M", "5M", "4M", "3M"], + reflecttype: ["7L1", "6L1", "5L1"], + rest: ["7M", "7V", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "4S20", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7V", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T", "3S10", "3S11"], + rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["7V", "3T"], + selfdestruct: ["7V", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + skillswap: ["6T", "5T", "4M", "3M"], + skullbash: ["7V"], + skyattack: ["7V", "6T", "5T", "4T", "3T"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["7V", "3T"], + solarbeam: ["7M", "7V", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["7V", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + submission: ["7V"], + substitute: ["7M", "7V", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "7V", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7V", "4T", "3T"], + swordsdance: ["7M", "7V", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T", "4S20"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7V"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7V", "4S14", "4S15", "4S16", "4S17", "4S18", "4S19", "4S20"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "7V", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7V", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7V", "6M", "5M", "4M", "3M"], + transform: ["7L1", "7V", "7S24", "6L1", "5L1", "4L1", "4S18", "3L10", "3S0", "3S1"], + triattack: ["7V"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + venoshock: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7V"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + whirlwind: ["7V"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "6M", "5M", "4M"], + zapcannon: ["3S12", "3S13"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + chikorita: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E", "3S1"], + aromatherapy: ["7L42", "7E", "6L42", "6E", "5L42", "5E", "4L42", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L34", "7E", "6L34", "6E", "5L34", "5E", "4L34", "4E", "3T", "3L29"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frenzyplant: ["3S1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + grasswhistle: ["7E", "6E", "5E", "4E", "3E"], + grassyterrain: ["7E", "6E"], + growl: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + headbutt: ["4T"], + healpulse: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7E", "6E", "5E", "4E", "3E"], + irontail: ["6T", "5T", "4M", "3M"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7E", "6E", "5E", "4E", "3E"], + lightscreen: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L36"], + magicalleaf: ["7L20", "6L20", "5L20", "4L20"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7L23", "6L23", "5L23", "4M", "4L23"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], + poisonpowder: ["7L9", "6L9", "5L9", "4L9", "3L15"], + protect: ["7M", "6M", "5M", "4M", "3M"], + razorleaf: ["7L6", "6L6", "5L6", "4L6", "3L8", "3S0"], + reflect: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L12"], + refresh: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L39", "6M", "6L39", "5M", "5L39", "4M", "4L39", "3M", "3L43"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L45", "3M", "3L50"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L28", "6L28", "5L28", "4L28"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L12", "6T", "6L12", "5T", "5L12", "4T", "4L12", "3L22"], + tackle: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vinewhip: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + wringout: ["7E", "6E", "5E", "4E"], + }}, + bayleef: {learnset: { + ancientpower: ["4T"], + aromatherapy: ["7L50", "6L50", "5L50", "4L50"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L40", "6L40", "5L40", "4L40", "3T", "3L31"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L39"], + magicalleaf: ["7L22", "6L22", "5L22", "4L22"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7L26", "6L26", "5L26", "4M", "4L26"], + naturepower: ["7M", "6M"], + poisonpowder: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L15"], + protect: ["7M", "6M", "5M", "4M", "3M"], + razorleaf: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + reflect: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L47"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L54", "3M", "3L55"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L32", "6L32", "5L32", "4L32"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L12", "6T", "6L12", "5T", "5L12", "4T", "4L12", "3L23"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + }}, + meganium: {learnset: { + ancientpower: ["4T"], + aromatherapy: ["7L60", "6L60", "5L60", "4L60"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L46", "6L46", "6S0", "5L46", "4L46", "3T", "3L31"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragontail: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frenzyplant: ["7T", "6T", "5T", "4T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L41"], + magicalleaf: ["7L22", "6L22", "5L22", "4L22"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7L26", "6L26", "5L26", "4M", "4L26"], + naturepower: ["7M", "6M"], + outrage: ["6T", "5T", "4T"], + petalblizzard: ["7L70", "7L1", "6L1"], + petaldance: ["7L1", "6L32", "5L32", "4L32"], + poisonpowder: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L15"], + protect: ["7M", "6M", "5M", "4M", "3M"], + razorleaf: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + reflect: ["7M", "7L18", "6M", "6L18", "5M", "5L18", "4M", "4L18", "3M", "3L1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L54", "3M", "3L51"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L66", "6M", "6L66", "6S0", "5M", "5L66", "4M", "4L66", "3M", "3L61"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "6S0", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L34", "6L34", "5L34", "4L34"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L12", "6T", "6L12", "6S0", "5T", "5L12", "4T", "4L12", "3L23"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + }}, + cyndaquil: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blastburn: ["3S1"], + bodyslam: ["3T"], + burnup: ["7L58"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["7L22", "6L22", "5L22", "4L22", "3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L55", "7E", "6L55", "6E", "5L55", "5E", "4L46", "4E", "3T"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L10", "6L10", "5L10", "4L10", "3L12"], + endure: ["4M", "3T"], + eruption: ["7L64", "6L58", "5L58", "4L49"], + extrasensory: ["7E", "6E", "5E", "4E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + flameburst: ["7E", "6E", "5E"], + flamecharge: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + flamethrower: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L37", "3M", "3L46"], + flamewheel: ["7L19", "6L19", "5L19", "4L19", "3L27"], + flareblitz: ["7E", "6E", "5E", "4E"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7E", "6E", "5E", "4E", "3E"], + incinerate: ["6M", "5M"], + inferno: ["7L46", "6L46", "5L46"], + lavaplume: ["7L37", "6L37", "5L37", "4L31"], + leer: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "7E", "6M", "6E", "5E"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "7E", "6L13", "6E", "5L13", "5E", "4L13", "4E", "3L19", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E", "3S1"], + rollout: ["7L49", "6L49", "5L49", "4T", "4L40", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L6", "6L6", "5L6", "4L4", "3L6", "3S0"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L31", "6L31", "5L31", "4T", "4L28", "3T", "3L36"], + tackle: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + thrash: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + quilava: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + burnup: ["7L68"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["7L24", "6L24", "5L24", "4L24", "3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L64", "6L64", "5L64", "4L53", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L10", "6L10", "5L10", "4L10", "3L12"], + endure: ["4M", "3T"], + eruption: ["7L75", "6L68", "5L68", "4L57"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + flamecharge: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + flamethrower: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L42", "3M", "3L54"], + flamewheel: ["7L20", "6L20", "5L20", "4L20", "3L31"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + inferno: ["7L53", "6L53", "5L53"], + lavaplume: ["7L42", "6L42", "5L42", "4L35"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "6L13", "5L13", "4L13", "3L21"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["7L57", "6L57", "5L57", "4T", "4L46", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L31", "6L31", "5L31", "4T", "4L31", "3T", "3L42"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + typhlosion: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blastburn: ["7T", "6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + burnup: ["7L74"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["7L24", "6L24", "5L24", "4L24", "3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L69", "7L1", "6L1", "5L69", "4L53", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + eruption: ["7L82", "7L1", "6L1", "5L74", "4L57"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T", "4T", "3T"], + flamecharge: ["7M", "7L35", "6M", "6L35", "6S1", "5M", "5L35"], + flamethrower: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L42", "3M", "3L60", "3S0"], + flamewheel: ["7L20", "6L20", "6S1", "5L20", "4L20", "3L31", "3S0"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + inferno: ["7L56", "6L56", "5L56"], + lavaplume: ["7L43", "6L43", "5L43", "4L35"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "6S1", "5M", "4M", "3M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "6L13", "5L13", "4L13", "3L21", "3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["7L61", "6L61", "5L61", "4T", "4L46", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smokescreen: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L31", "6L31", "6S1", "5L31", "4T", "4L31", "3T", "3L45", "3S0"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + totodile: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + aquajet: ["7E", "6E", "5E", "4E"], + aquatail: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L36"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L13", "6L13", "5L13", "4L13", "3L20"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["7E", "6T", "6E", "5T", "5E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chipaway: ["7L29", "6L29", "5L29"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L27", "7E", "6L27", "6E", "5L27", "5E", "4L27", "4E", "3E", "3S1"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4E", "3E"], + dragondance: ["7E", "6E", "5E", "4E"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E"], + flail: ["7L22", "6L22", "5L22", "4L22"], + flatter: ["7E", "6E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydrocannon: ["3S1"], + hydropump: ["7L50", "7E", "6L50", "6E", "5L50", "5E", "4L43", "4E", "3L52", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L20", "6L20", "5L20", "4L20"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L8", "6L8", "5L8", "4L8", "3L7", "3S0"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L15", "6L15", "5L15", "4L15", "3L27"], + scratch: ["7L1", "6L1", "6S2", "5L1", "4L1", "3L1", "3S0", "3S1"], + screech: ["7L36", "6L36", "5L36", "4L34", "3L43"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L34", "6L34", "5L34", "4L29", "3L35"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7L48", "6T", "6L48", "5T", "5L48", "4T", "4L41"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thrash: ["7L41", "7E", "6L41", "6E", "5L41", "5E", "4L22", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L6", "6L6", "5L6", "4L6", "3L13"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], + workup: ["7M"], + }}, + croconaw: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + aquatail: ["7L51", "6T", "6L51", "5T", "5L51", "4T", "4L42"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L13", "6L13", "5L13", "4L13", "3L21"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chipaway: ["7L33", "6L33", "5L33"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L30", "6L30", "5L30", "4L30"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L24", "6L24", "5L24", "4L24"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L60", "6L60", "5L60", "4L51", "3L55"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L21", "6L21", "5L21", "4L21"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L8", "6L8", "5L8", "4L8", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L15", "6L15", "5L15", "4L15", "3L28"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L42", "6L42", "5L42", "4L39", "3L45"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L39", "6L39", "5L39", "4L33", "3L37"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7L57", "6T", "6L57", "5T", "5L57", "4T", "4L48"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thrash: ["7L48", "6L48", "5L48", "4L24"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L13"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M"], + }}, + feraligatr: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L1", "6L30", "5L30", "4L30"], + ancientpower: ["4T"], + aquatail: ["7L63", "6T", "6L63", "5T", "5L63", "4T", "4L50"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L13", "6L13", "5L13", "4L13", "3L21"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L37", "6L37", "5L37"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L32", "6L32", "6S0", "5L32", "4L32"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L24", "6L24", "5L24", "4L24"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydrocannon: ["7T", "6T", "5T", "4T"], + hydropump: ["7L76", "6L76", "5L76", "4L63", "3L58"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L21", "6L21", "5L21", "4L21"], + icepunch: ["6T", "6S0", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L15", "6L15", "5L15", "4L15", "3L28"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L50", "6L50", "6S0", "5L50", "4L45", "3L47"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L45", "6L45", "5L45", "4L37", "3L38"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7L71", "6T", "6L71", "5T", "5L71", "4T", "4L58"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thrash: ["7L58", "6L58", "5L58", "4L24"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "6S0", "5M", "4M", "3M"], + watergun: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M"], + }}, + sentret: {learnset: { + amnesia: ["7L36", "6L36", "5L36", "4L36", "3L49"], + aquatail: ["6T", "5T", "4T"], + assist: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L39", "6L39", "5L39", "4L39"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + captivate: ["7E", "6E", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7E", "6E", "5E", "4E"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E", "5D", "4E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["7L4", "6L4", "5L4", "4L4", "3T", "3L4"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["5D", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], + focuspunch: ["6T", "4M", "3M"], + followme: ["7L19", "6L19", "5L19", "4L19", "3L31"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "6L13", "5L13", "4L13", "3L12"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16", "3L17"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hypervoice: ["7L47", "6T", "6L47", "5T", "5L47", "4L47"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + mefirst: ["7L42", "6L42", "5L42", "4L42"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L7", "6L7", "5L7", "4L7", "3L7"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L40"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slam: ["7L25", "6L25", "5L25", "4L25", "3L24"], + slash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + furret: {learnset: { + agility: ["7L1"], + amnesia: ["7L42", "6L42", "5L42", "4L42", "3L59"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L46", "6L46", "5L46", "4L46"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + coil: ["7L1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + followme: ["7L21", "6L21", "5L21", "4L21", "3L37"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "6L13", "5L13", "4L13", "3L12"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["7L17", "6T", "6L17", "5T", "5L17", "4T", "4L17", "3L19"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7L56", "6T", "6L56", "5T", "5L56", "4L56"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + mefirst: ["7L50", "6L50", "5L50", "4L50"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L32", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L48"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slam: ["7L28", "6L28", "5L28", "4L28", "3L28"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L36", "6L36", "5L36", "4T", "4L36"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + hoothoot: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7E", "6E", "5E", "4E"], + aircutter: ["4T"], + airslash: ["7L31", "6L33", "5L33", "4L29"], + attract: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L10", "6L21", "5L21", "4L21", "3L34"], + defog: ["7E", "6E", "5E", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L46", "6M", "6L57", "5M", "5L57", "4M", "4L49", "3T", "3L48"], + echoedvoice: ["7M", "7L13", "6M", "6L25", "5M", "5L25"], + endure: ["4M", "3T"], + extrasensory: ["7L22", "6L45", "5L45", "4L37"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + flash: ["3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "6L1", "5L1", "5D", "4L1", "3L6", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L4", "6L5", "5L5", "4L5", "3L16"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mirrormove: ["7E", "6E", "5E", "4E", "3E"], + moonblast: ["7L40"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7E", "6E", "5E", "5D", "4E"], + ominouswind: ["4T"], + peck: ["7L7", "6L9", "5L9", "4L9", "3L11"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychoshift: ["7L19", "6L49", "5L49", "4L41"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "5D", "4M"], + reflect: ["7M", "7L28", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L22"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L37", "6M", "6L53", "5T", "5L53", "4M", "4L45"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + silverwind: ["4M"], + skyattack: ["7E", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + synchronoise: ["7L43", "6L41", "5L41"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L25", "6L29", "5L29", "4L25", "3L28"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["7L34", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + whirlwind: ["7E", "6E", "5E", "4E", "3E"], + wingattack: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + zenheadbutt: ["7L16", "6T", "6L37", "5T", "5L37", "4T", "4L33"], + }}, + noctowl: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + airslash: ["7L35", "6L37", "5L37", "4L32"], + attract: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L10", "6L22", "5L22", "4L22", "3L41"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "7L55", "7L1", "6M", "6L1", "5M", "5L67", "4M", "4L57", "3T", "3L57"], + echoedvoice: ["7M", "7L13", "6M", "6L27", "5M", "5L27"], + endure: ["4M", "3T"], + extrasensory: ["7L23", "6L52", "5L52", "4L42"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L16"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + moonblast: ["7L47"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + ominouswind: ["4T"], + peck: ["7L7", "6L9", "5L9", "4L9", "3L1"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychoshift: ["7L19", "6L57", "5L57", "4L47"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "7L31", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L25"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L43", "6M", "6L62", "5T", "5L62", "4M", "4L52"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + silverwind: ["4M"], + skyattack: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + synchronoise: ["7L51", "6L47", "5L47"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L27", "6L32", "5L32", "4L27", "3L33"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["7L39", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + workup: ["7M", "5M"], + zenheadbutt: ["7L16", "6T", "6L42", "5T", "5L42", "4T", "4L37"], + }}, + ledyba: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M", "3S0"], + agility: ["7L29", "6L30", "5L30", "4L30", "3L43"], + aircutter: ["4T"], + airslash: ["7L36"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L26", "6L22", "5L22", "4L22", "3L29"], + bide: ["7E", "6E", "5E", "4E", "3E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + bugbuzz: ["7L33", "7E", "6L41", "6E", "5L41", "5E", "4L41", "4E"], + captivate: ["4M"], + cometpunch: ["7L22", "6L9", "5L9", "5D", "4L9", "3L15"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M", "3M"], + dizzypunch: ["7E", "6E", "5E"], + doubleedge: ["7L40", "6L38", "5L38", "4L38", "3T", "3L50"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7E", "6T", "6E", "5T", "5E", "4M"], + dynamicpunch: ["3T"], + encore: ["7E", "6E", "5E", "4E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lightscreen: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], + machpunch: ["7L15", "6L17", "5L17", "4L17"], + megapunch: ["3T"], + mimic: ["3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E", "3S0"], + reflect: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L22"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + silverwind: ["7L19", "7E", "6L25", "6E", "5L25", "5E", "4M", "4L25", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "6L6", "5L6", "4L6", "3L8", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L8", "6L33", "5L33", "4T", "4L33", "3T", "3L36"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["7E", "6T", "6E", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "5D", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + }}, + ledian: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L33", "6L36", "5L36", "4L36", "3L51"], + aircutter: ["4T"], + airslash: ["7L42"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L29", "6L24", "5L24", "4L24", "3L33"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L38", "6L53", "5L53", "4L53"], + captivate: ["4M"], + cometpunch: ["7L24", "6L1", "5L1", "4L1", "3L15"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L47", "6L48", "5L48", "4L48", "3T", "3L60"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], + machpunch: ["7L15", "6L17", "5L17", "4L17"], + megapunch: ["3T"], + mimic: ["3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M"], + rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L12", "6M", "6L14", "5M", "5L14", "4M", "4L14", "3M", "3L24"], + secretpower: ["6M", "4M", "3M"], + silverwind: ["7L20", "6L29", "5L29", "4M", "4L29"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L8", "7L1", "6L41", "5L41", "4T", "4L41", "3T", "3L42"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + }}, + spinarak: {learnset: { + absorb: ["7L5"], + agility: ["7L33", "6L33", "5L33", "4L33", "3L45"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + bugbite: ["6T", "5T", "5D", "4T"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L8", "5L8", "4L8", "3L11"], + crosspoison: ["7L47", "6L47", "5L47"], + dig: ["6M", "5M", "4M", "3M", "3S0"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + electroweb: ["7E", "6T", "6E", "5T", "5E", "5D"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L22", "6L22", "5L22", "4L22", "3L30"], + gigadrain: ["6T", "5T", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + infestation: ["7M", "7L8", "6M"], + leechlife: ["7M", "6L12", "5L12", "4L12", "3L23"], + megahorn: ["7E", "6E"], + mimic: ["3T"], + naturalgift: ["4M"], + nightshade: ["7L15", "6L15", "5L15", "4L15", "3L17", "3S0"], + nightslash: ["7E", "6E", "5E"], + pinmissile: ["7L36", "6L36", "5L36", "4L36"], + poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "4E"], + poisonsting: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E"], + psychic: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L53"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + ragepowder: ["7E", "6E", "5E"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L12", "6L5", "5L5", "4L5", "3L6"], + secretpower: ["6M", "4M", "3M"], + shadowsneak: ["7L19", "6L19", "5L19", "4L19"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sonicboom: ["7E", "6E", "5E", "4E", "3E"], + spiderweb: ["7L29", "6L29", "5L29", "4L29", "3L37"], + stickyweb: ["7L50", "6L50"], + stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L26", "6L26", "5L26", "4T", "4L26"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + toxicspikes: ["7E", "6E", "5E", "4E"], + toxicthread: ["7L54"], + twineedle: ["7E", "6E", "5E"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + ariados: {learnset: { + absorb: ["7L5", "7L1"], + agility: ["7L37", "6L37", "5L37", "4L37", "3L53"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + bugbite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + crosspoison: ["7L55", "6L55", "5L55"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fellstinger: ["7L1", "6L1"], + flash: ["6M", "5M", "4M", "3M"], + focusenergy: ["7L1"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L23", "6L23", "5L23", "4L23", "3L34"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "7L8", "6M"], + leechlife: ["7M", "6L12", "5L12", "4L12", "3L25"], + mimic: ["3T"], + naturalgift: ["4M"], + nightshade: ["7L15", "6L15", "5L15", "4L15", "3L17"], + pinmissile: ["7L41", "6L41", "5L41", "4L41"], + poisonjab: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L50"], + poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L63"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L12", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowsneak: ["7L19", "6L19", "5L19", "4L19"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smartstrike: ["7M"], + snore: ["6T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spiderweb: ["7L32", "6L32", "5L32", "4L32", "3L43"], + stickyweb: ["7L58", "6L58"], + stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L28", "6L28", "5L28", "4T", "4L28"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "7L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + toxicthread: ["7L63"], + venomdrench: ["7L1", "6L1"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + chinchou: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + amnesia: ["7E", "6E", "5E", "5D", "4E", "3E"], + aquaring: ["7L42", "6L42", "5L42", "4L39"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L20", "6L20", "5L31", "4L28"], + captivate: ["4M"], + charge: ["7L50", "6L50", "5L50", "4L45", "3L49"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L17", "6L17", "5L12", "4L17", "3L29"], + dazzlinggleam: ["7M", "6M"], + discharge: ["7L34", "6L34", "5L39", "4L34"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + electroball: ["7L9", "6L9", "5L28"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L31", "7E", "6L9", "6E", "5L9", "5E", "4L9", "4E", "3L13", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L45", "6L45", "5L45", "4L42", "3L41"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T"], + iondeluge: ["7L47", "6L47"], + mimic: ["3T"], + mist: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["7E", "6T", "6E", "5E", "5D", "4M", "3M"], + signalbeam: ["7L28", "6T", "6L28", "5T", "5L34", "4T", "4L31"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7E", "6E"], + spark: ["7L23", "6L20", "5L20", "4L20", "3L25"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + supersonic: ["7L1", "6L1", "5L1", "4L1", "3L5"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7L39", "6L23", "5L23", "4L23", "3L37"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L6", "6M", "6L6", "5M", "5L6", "5D", "4M", "4L6", "3T", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L12", "6L1", "5L17", "4L12", "3L17"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7E", "6E", "5E", "4M", "4E"], + wildcharge: ["7M", "6M", "5M"], + }}, + lanturn: {learnset: { + aquaring: ["7L47", "6L47", "5L52", "4L47"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L20", "6L20", "5L35", "4L30"], + captivate: ["4M"], + charge: ["7L58", "6L58", "5L64", "4L57", "3L61"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L17", "6L17", "5L17", "4L17", "3L32"], + dazzlinggleam: ["7M", "6M"], + discharge: ["7L37", "6L37", "5L47", "4L40"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + eerieimpulse: ["7L1", "6L1"], + electroball: ["7L9", "7L1", "6L1", "5L30"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L33", "6L9", "5L9", "4L9", "3L13"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L51", "6L51", "5L57", "4L52", "3L50"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T"], + iondeluge: ["7L54", "6L54"], + mimic: ["3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7L29", "6T", "6L29", "5T", "5L40", "4T", "4L35"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L23", "6L20", "5L20", "4L20", "3L25"], + spitup: ["7L1", "6L27", "5L27", "4L27"], + stockpile: ["7L1", "6L27", "5L27", "4L27"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + supersonic: ["7L1", "6L1", "5L1", "4L1", "3L1"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L1", "6L27", "5L27", "4L27"], + takedown: ["7L43", "6L23", "5L23", "4L23", "3L43"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L12", "6L1", "5L12", "4L12", "3L17"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wildcharge: ["7M", "6M", "5M"], + }}, + togepi: {learnset: { + afteryou: ["7L53", "6T", "6L53", "5T", "5L53"], + ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33", "3L21", "3S1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L41", "6L41", "5L41", "4L42", "3L41"], + bestow: ["7L25", "6L25", "5L25"], + bodyslam: ["3T"], + captivate: ["4M"], + charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + doubleedge: ["7L45", "6L45", "5L45", "4L46", "3T", "3L37"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L17", "6L17", "5L17", "4L19", "3L17"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + extrasensory: ["7E", "6E", "5E", "4E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + followme: ["7L21", "6L21", "5L21", "4L24", "3L25", "3S1"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["3S1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + lastresort: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L51"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E", "5D", "4E"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["7L5", "6L5", "5L5", "5D", "4L6", "3T", "3L4", "3S0"], + mimic: ["3T"], + mirrormove: ["7E", "6E", "5E", "4E", "3E"], + morningsun: ["7E", "6E", "5E"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + peck: ["7E", "6E", "5E", "4E", "3E"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychoshift: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L33"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L9", "6L9", "5L9", "4L10", "3L9", "3S0"], + swift: ["4T", "3T"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + triattack: ["3S1"], + trick: ["6T", "5T", "4T"], + uproar: ["6T", "5T", "5D", "4T"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7L29", "6L29", "5L29", "4L28", "3L29"], + workup: ["7M", "5M"], + yawn: ["7L13", "6L13", "5L13", "4L15", "3L13", "3S0"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + togetic: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7L53", "6T", "6L53", "5T", "5L53"], + aircutter: ["4T"], + ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33", "3L21"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L41", "6L41", "5L41", "4L42", "3L41"], + bestow: ["7L25", "6L25", "5L25"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + charm: ["7L1", "6L1", "5L1", "4L1", "3L1"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + defog: ["4M"], + doubleedge: ["7L45", "6L45", "5L45", "4L46", "3T", "3L37"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L17", "6L17", "5L17", "4L19", "3L17"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + extrasensory: ["7E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fairywind: ["7L14", "6L14"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["6T", "4M", "3M"], + followme: ["7L21", "6L21", "5L21", "4L24", "3L25"], + foresight: ["7E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + lastresort: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L51"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E"], + magicalleaf: ["7L1", "6L1", "5L1", "4L1", "3L1"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["7L5", "7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + mimic: ["3T"], + mirrormove: ["7E"], + morningsun: ["7E"], + mudslap: ["4T", "3T"], + nastyplot: ["7E"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7E"], + present: ["7E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychoshift: ["7E"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L33"], + secretpower: ["7E", "6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + skyattack: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + softboiled: ["3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + storedpower: ["7E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + twister: ["4T"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7L29", "6L29", "5L29", "4L28", "3L29"], + workup: ["7M", "5M"], + yawn: ["7L13", "6L13", "5L13", "4L15", "3L13"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + togekiss: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + afteryou: ["7L1", "6T", "6L1"], + aircutter: ["4T"], + airslash: ["7L1", "6L1", "5L1", "5S0", "4L1"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + aurasphere: ["7L1", "6L1", "5L1", "5S0", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defog: ["4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + extremespeed: ["7L1", "6L1", "5L1", "5S0", "4L1"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + present: ["5S0"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rollout: ["4T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + skyattack: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + steelwing: ["7M", "6M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + twister: ["4T"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + natu: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M", "3S0"], + aircutter: ["4T"], + allyswitch: ["7E", "6E", "5M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L23", "6L23", "5L23", "4L23", "3L40"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillpeck: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7E", "6E", "5E", "5D", "4E", "3E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L44", "6L36", "5L36", "4L36", "3L30", "3S0"], + gigadrain: ["6T", "5T", "5D", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + guardswap: ["7L47", "6L47", "5L47", "4L44"], + haze: ["7E", "6E", "5E", "4E", "3E"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L12", "6L12", "5L12", "4L12"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mefirst: ["7L50", "6L20", "5L20", "4L20"], + mimic: ["3T"], + miracleeye: ["7L36", "6L17", "5L17", "4L17"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L6", "6L6", "5L6", "5D", "4L6", "3L10", "3S0"], + ominouswind: ["7L20", "6L20", "5L44", "4T", "4L39"], + painsplit: ["6T", "5T", "4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + pluck: ["5M", "4M"], + powerswap: ["7L47", "6L47", "5L47", "4L44"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L33", "6M", "6L33", "5M", "5L50", "4M", "4L47", "3M", "3L50"], + psychoshift: ["7L39", "6L33", "5L33", "4L33"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + simplebeam: ["7E", "6E"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + skyattack: ["6T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "4E", "3M", "3E"], + storedpower: ["7L17", "6L17", "5L39"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E", "4T", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + synchronoise: ["7E", "6E", "5E"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + teleport: ["7L9", "6L9", "5L9", "4L9", "3L20"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + wish: ["7L28", "6L28", "5L28", "4L28", "3L30"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + xatu: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + airslash: ["7L1", "6L25"], + allyswitch: ["5M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L23", "6L23", "5L23", "4L23", "3L50"], + dazzlinggleam: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L49", "6L42", "5L42", "4L42", "3L35"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + guardswap: ["7L53", "6L53", "5L59", "4L54"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L12", "6L12", "5L12", "4L12"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mefirst: ["7L57", "6L20", "5L20", "4L20"], + mimic: ["3T"], + miracleeye: ["7L39", "6L17", "5L17", "4L17"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L6", "7L1", "6L1", "5L6", "4L6", "3L10"], + ominouswind: ["7L20", "6L20", "5L54", "4T", "4L47"], + painsplit: ["6T", "5T", "4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + pluck: ["5M", "4M"], + powerswap: ["7L53", "6L53", "5L54", "4L54"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L35", "6M", "6L35", "5M", "5L66", "4M", "4L59", "3M", "3L65"], + psychoshift: ["7L43", "6L37", "5L37", "4L37"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + skillswap: ["6T", "5T", "4M", "3M"], + skyattack: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + storedpower: ["7L17", "6L17", "5L47"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["7L1", "6T", "6L1", "5T", "5L27", "4T", "4L27"], + telekinesis: ["5M"], + teleport: ["7L9", "7L1", "6L1", "5L9", "4L9", "3L20"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + wish: ["7L29", "6L29", "5L30", "4L30", "3L35"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + mareep: {learnset: { + afteryou: ["7E", "6T", "6E", "5T", "5E"], + agility: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E", "3S2"], + captivate: ["4M"], + charge: ["7L15", "7E", "6L15", "6E", "5L23", "5E", "4L23", "4E", "3E"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L25", "6L25", "5L25"], + cottonguard: ["7L36", "6L36", "5L32"], + cottonspore: ["7L11", "6L11", "5L19", "4L19", "3L23", "3S0"], + defensecurl: ["3T"], + discharge: ["7L32", "6L32", "5L37", "4L28"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + eerieimpulse: ["7E", "6E"], + electricterrain: ["7E", "6E"], + electroball: ["7L22", "6L22", "5L28"], + electroweb: ["6T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + flatter: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L5", "4L5", "3L1", "3S1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T", "3S2"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + holdback: ["6S3"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + lightscreen: ["7M", "7L43", "6M", "6L43", "5M", "5L46", "4M", "4L37", "3M", "3L30"], + magnetrise: ["6T", "5T", "4T"], + mimic: ["3T"], + naturalgift: ["4M"], + odorsleuth: ["7E", "6E", "5E", "4E", "3E"], + powergem: ["7L29", "6L29", "5L50", "4L41"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["5D", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + sandattack: ["7E", "6E", "5E", "4E"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "5D", "4M", "3M"], + signalbeam: ["7L39", "6T", "6L39", "5T", "5L41", "4T", "4L32"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "6S3", "5L1", "4L1", "3L1", "3S1"], + takedown: ["7L18", "7E", "6L18", "6E", "5L18", "5E", "4E", "3E"], + thunder: ["7M", "7L46", "6M", "6L46", "5M", "5L55", "4M", "4L46", "3M", "3L37", "3S0"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thundershock: ["7L8", "6L8", "6S3", "5L10", "5D", "4L10", "3L9", "3S0", "3S1", "3S2"], + thunderwave: ["7M", "7L4", "6M", "6L4", "6S3", "5M", "5L14", "4M", "4L14", "3T", "3L16", "3S0", "3S2"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + }}, + flaaffy: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + charge: ["7L16", "6L16", "5L25", "4L25"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L29", "6L29", "5L29"], + cottonguard: ["7L43", "6L43", "5L36"], + cottonspore: ["7L11", "6L11", "5L20", "4L20", "3L27"], + counter: ["3T"], + defensecurl: ["3T"], + discharge: ["7L38", "6L38", "5L42", "4L31"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L25", "6L25", "5L31"], + electroweb: ["6T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "7L52", "6M", "6L52", "5M", "5L53", "4M", "4L42", "3M", "3L36"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + naturalgift: ["4M"], + powergem: ["7L34", "6L34", "5L59", "4L47"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7L47", "6T", "6L47", "5T", "5L47", "4T", "4L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L20", "6L20", "5L20"], + thunder: ["7M", "7L56", "6M", "6L56", "5M", "5L65", "4M", "4L53", "3M", "3L45"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thundershock: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L14", "4M", "4L14", "3T", "3L18"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + }}, + ampharos: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charge: ["7L16", "6L16", "5L25", "4L25"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L29", "6L29", "5L29"], + cottonguard: ["7L46", "6L46", "5L40"], + cottonspore: ["7L11", "6L11", "5L20", "4L20", "3L27"], + counter: ["3T"], + defensecurl: ["3T"], + discharge: ["7L40", "6L40", "5L48", "4L34"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7L65", "7L1", "6T", "6L1"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L25", "6L25", "5L33"], + electroweb: ["6T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + iondeluge: ["7L1", "6L1"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "7L57", "6M", "6L57", "5M", "5L63", "4M", "4L51", "3M", "3L42"], + magneticflux: ["7L1", "6L1"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + powergem: ["7L35", "6L35", "5L71", "4L59"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7L51", "6T", "6L51", "5T", "5L55", "4T", "4L42"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L20", "6L20", "5L20"], + thunder: ["7M", "7L62", "6M", "6L62", "5M", "5L79", "4M", "4L68", "3M", "3L57"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30", "3T", "3L30"], + thundershock: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L1", "6L1"], + }}, + azurill: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T"], + bounce: ["7L23", "6T", "6L23", "5T", "5L23"], + bubble: ["7L7", "6L7", "5L10", "4L10", "3L10"], + bubblebeam: ["7L13", "6L13", "5L13"], + camouflage: ["7E", "6E"], + captivate: ["4M"], + charm: ["7L10", "6L10", "5L2", "4L2", "3L3"], + confide: ["7M", "6M"], + copycat: ["7E", "6E"], + covet: ["6T", "5T"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M"], + mimic: ["3T"], + muddywater: ["7E", "6E", "5E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sing: ["7E", "6E", "5E", "4E", "3E"], + slam: ["7L20", "7E", "6L20", "6E", "5L15", "5E", "4L15", "4E", "3L15", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7E", "6E", "5E"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwhip: ["7L2", "6L2", "5L7", "4L7", "3L6"], + tickle: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L18", "4L18", "3L21"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + marill: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + aquajet: ["7E", "6E", "5E", "5D", "4E"], + aquaring: ["7L28", "6L28", "5L23", "4L23"], + aquatail: ["7L20", "6T", "6L20", "5T", "5L37", "4T", "4L37"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T"], + bounce: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L7", "6L7", "5L1"], + bubblebeam: ["7L13", "6L13", "5L18", "4L18", "3L21"], + camouflage: ["7E", "6E"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + defensecurl: ["7L10", "6L10", "5L2", "5D", "4L2", "3T", "3L3"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7L37", "6L23", "5L27", "4L27", "3T", "3L28"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L47", "6L40", "5L42", "4L42", "3L45"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "5D", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + muddywater: ["7E", "6E", "5E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + perishsong: ["7E", "6E", "5E", "4E", "3E"], + playrough: ["7L23", "6L23"], + poweruppunch: ["6M"], + present: ["6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L31", "6M", "6L31", "5M", "5L32", "4M", "4L32", "3M", "3L36"], + refresh: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + superpower: ["7L40", "7E", "6T", "6L37", "6E", "5T", "5L37", "5E", "4T", "4E"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L2", "6L2", "5L7", "4L7", "3L6"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L10", "4L10", "3L10"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + azumarill: {learnset: { + aquaring: ["7L31", "6L31", "5L27", "4L27"], + aquatail: ["7L21", "6T", "6L21", "5T", "5L47", "4T", "4L47"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L7", "6L7", "5L1"], + bubblebeam: ["7L13", "6L13", "5L20", "4L20", "3L24"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + defensecurl: ["7L10", "6L10", "5L1", "4L1", "3T", "3L1"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7L42", "6L25", "5L33", "4L33", "3T", "3L34"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + helpinghand: ["7L16", "6T", "6L16", "5T", "5L16", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L55", "6L46", "5L54", "4L54", "3L57"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + playrough: ["7L25", "6L25"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L35", "6M", "6L35", "5M", "5L40", "4M", "4L40", "3M", "3L45"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L15"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7L46", "6T", "6L42", "5T", "5L42", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L2", "7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L5", "7L1", "6L1", "5L1"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + bonsly: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M"], + block: ["7L29", "6T", "6L26", "5T", "5L22", "4T", "4L22"], + brickbreak: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + copycat: ["7L1", "6L1", "5L1", "4L1"], + counter: ["7L36", "6L33"], + covet: ["6T", "5T"], + curse: ["7E", "6E", "5E"], + defensecurl: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7L43", "6L40", "5L46", "4L46"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + endure: ["7E", "6E", "5E", "4M"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + faketears: ["7L1", "6L1", "5L1", "4L1"], + feintattack: ["7L19", "6L19", "5L25", "4L25"], + flail: ["7L5", "6L5", "5L6", "4L6"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + harden: ["7E", "6E", "5E", "4E"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + lowkick: ["7L8", "6T", "6L8", "5T", "5L9", "4T", "4L9"], + mimic: ["7L15", "6L15", "5L17", "4L17"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L33", "6M", "6L29", "5M", "5L33", "4M", "4L33"], + rockthrow: ["7L12", "6L12", "5L14", "4L14"], + rocktomb: ["7M", "7L26", "6M", "6L22", "5M", "5L30", "4M", "4L30"], + roleplay: ["6T", "5T", "4T"], + rollout: ["7E", "6E", "5E", "4T", "4E"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + sandtomb: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + selfdestruct: ["7E", "6E", "5E", "4E"], + slam: ["5L38", "4L38"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L40", "6L36", "5L41", "4T", "4L41"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tearfullook: ["7L22"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + }}, + sudowoodo: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + block: ["7L29", "6T", "6L26", "5T", "5L22", "4T", "4L22", "3L33"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + copycat: ["7L1", "6L1", "5L1", "4L1"], + counter: ["7L36", "6L33", "5L33", "3T"], + covet: ["6T", "5T"], + curse: ["7E", "6E", "5E"], + defensecurl: ["7E", "6E", "5E", "4E", "3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L43", "6L40", "5L46", "4L46", "3T", "3L57"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L25", "4L25", "3L41"], + firepunch: ["6T", "5T", "4T", "3T"], + flail: ["7L5", "7L1", "6L1", "5L1", "5D", "4L1", "3L9"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7L50", "6L47", "5L49", "4L49"], + harden: ["7E", "6E", "5E", "4E"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + headsmash: ["7L54"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + lowkick: ["7L8", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L17"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["7L15", "6L15", "5L17", "4L17", "3T", "3L1"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L33", "6M", "6L29", "5M", "5L33", "4M", "4L33", "3T", "3L25"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L12", "7L1", "6L1", "5L1", "4L1", "3L1"], + rocktomb: ["7M", "7L26", "6M", "6L22", "5M", "5L30", "4M", "4L30", "3M"], + roleplay: ["6T", "5T", "5D", "4T"], + rollout: ["7E", "6E", "5E", "5D", "4T", "4E", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandtomb: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + selfdestruct: ["7E", "6E", "5E", "4E", "3T", "3E"], + slam: ["7L1", "6L15", "5L38", "4L38", "3L49"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + stoneedge: ["7M", "7L47", "6M", "6L43", "5M", "5L43", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L40", "6L36", "5L41", "4T", "4L41"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + tearfullook: ["7L22"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + woodhammer: ["7L1", "6L1", "5L1", "4L1"], + }}, + hoppip: {learnset: { + acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7E", "6E", "5E", "4E", "3E"], + aromatherapy: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7L46", "6T", "6L46", "5T", "5L46", "5D", "4T", "4L40"], + bulletseed: ["7L19", "6L19", "5L19", "5D", "4M", "4L19", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7E", "6E", "5E", "4E", "3E"], + cottonguard: ["7E", "6E", "5E"], + cottonspore: ["7L34", "6L34", "5L34", "4L28", "3L25"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7E", "6E", "5E", "5D", "4E", "3E"], + endure: ["7E", "6E", "5E", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fairywind: ["7L10", "6L10"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L43", "6T", "6L43", "5T", "5L43", "4M", "4L37", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7E", "6E"], + headbutt: ["4T"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + leechseed: ["7L22", "6L22", "5L22", "4L22", "3L20"], + megadrain: ["7L25", "6L25", "5L25", "4L25", "3L30"], + memento: ["7L49", "6L49", "5L49", "4L43"], + mimic: ["3T"], + naturalgift: ["4M"], + poisonpowder: ["7L12", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4E", "3E"], + ragepowder: ["7L31", "6L31", "5L31"], + reflect: ["7M", "6M", "5M", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + silverwind: ["4M"], + sleeppowder: ["7L16", "6L16", "5L16", "4L16", "3L17"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + stunspore: ["7L14", "6L14", "5L14", "4L14", "3L15"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L4", "6T", "6L4", "5T", "5L4", "5D", "4T", "4L4", "3L5"], + tackle: ["7L8", "6L8", "5L10", "4L10", "3L10"], + tailwhip: ["7L6", "6L6", "5L7", "4L7", "3L5"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uturn: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L31"], + worryseed: ["7L40", "7E", "6T", "6L40", "6E", "5T", "5L40", "5E", "4T", "4L34", "4E"], + }}, + skiploom: {learnset: { + acrobatics: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7L56", "6T", "6L56", "5T", "5L56", "4T", "4L48"], + bulletseed: ["7L20", "6L20", "5L20", "4M", "4L20", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7L40", "6L40", "5L40", "4L32", "3L29"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fairywind: ["7L10", "6L10"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L52", "6T", "6L52", "5T", "5L52", "4M", "4L44", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + leechseed: ["7L24", "6L24", "5L24", "4L24", "3L22"], + megadrain: ["7L28", "6L28", "5L28", "4L28", "3L36"], + memento: ["7L60", "6L60", "5L60", "4L52"], + mimic: ["3T"], + naturalgift: ["4M"], + poisonpowder: ["7L12", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M"], + ragepowder: ["7L36", "6L36", "5L36"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + silverwind: ["4M"], + sleeppowder: ["7L16", "6L16", "5L16", "4L16", "3L17"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + stunspore: ["7L14", "6L14", "5L14", "4L14", "3L15"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uturn: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L36"], + worryseed: ["7L48", "6T", "6L48", "5T", "5L48", "4T", "4L40"], + }}, + jumpluff: {learnset: { + acrobatics: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["7L64", "6T", "6L64", "5T", "5L64", "4T", "4L48"], + bulletseed: ["7L20", "6L20", "5L20", "5S0", "4M", "4L20", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7L44", "6L44", "5L44", "4L32", "3L33"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fairywind: ["7L10", "6L10"], + falseswipe: ["5S0"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L59", "6T", "6L59", "5T", "5L59", "4M", "4L44", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + leechseed: ["7L24", "6L24", "5L24", "5S0", "4L24", "3L22"], + megadrain: ["7L29", "6L29", "5L29", "4L28", "3L44"], + memento: ["7L69", "6L69", "5L69", "4L52"], + mimic: ["3T"], + naturalgift: ["4M"], + poisonpowder: ["7L12", "6L12", "5L12", "4L12", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M"], + ragepowder: ["7L39", "6L39", "5L39"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + silverwind: ["4M"], + sleeppowder: ["7L16", "6L16", "5L16", "5S0", "4L16", "3L17"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + stunspore: ["7L14", "6L14", "5L14", "4L14", "3L15"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uturn: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L36"], + worryseed: ["7L54", "6T", "6L54", "5T", "5L54", "4T", "4L40"], + }}, + aipom: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "4L29", "4E", "3L50", "3E"], + astonish: ["7L8", "6L8", "5L8", "4L8", "3L13"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L11", "6L11", "5L11", "4L11", "3L18"], + beatup: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + bounce: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + covet: ["7E", "6T", "6E", "5T", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doublehit: ["7L32", "6L32", "5L32", "4L32"], + doubleslap: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "5D", "4E"], + firepunch: ["6T", "5T", "5D", "4T", "3T"], + fling: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L18", "6L18", "5L18", "4L18", "3L31"], + grassknot: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icepunch: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L39", "6L39", "5L39", "4L39"], + naturalgift: ["4M"], + nightmare: ["3T"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L4", "6L4", "5L4", "4L4", "3L6", "3S0"], + scratch: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + screech: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3L43", "3E"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slam: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L22", "6L22", "5L22", "4T", "4L22", "3T", "3L38"], + switcheroo: ["7E", "6E", "5E"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["7L15", "6L15", "5L15", "4L15", "3L25"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + }}, + ambipom: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7L29", "6L29", "5L29", "4L29"], + astonish: ["7L8", "7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + batonpass: ["7L11", "6L11", "5L11", "4L11"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doublehit: ["7L32", "6L32", "5L32", "4L32"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + dualchop: ["7L1"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + fling: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], + focuspunch: ["6T", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L18", "6L18", "5L18", "4L18"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mudslap: ["4T"], + nastyplot: ["7L39", "6L39", "5L39", "4L39"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L4", "7L1", "6L1", "5L1", "4L1"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L25", "6L25", "5L25", "4L25"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L22", "6L22", "5L22", "4T", "4L22"], + tailwhip: ["7L1", "6L1", "5L1", "4L1"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + tickle: ["7L15", "6L15", "5L15", "4L15"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + }}, + sunkern: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7E", "6E", "5E"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L37", "6L37", "5L37", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "5D", "4T"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endeavor: ["7L25", "6T", "6L25", "5T", "5L21", "4T", "4L21", "3L25"], + endure: ["7E", "6E", "5E", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L22", "6T", "6L22", "5T", "5L41", "4M", "4L41", "3M", "3L42"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L7", "7E", "6L7", "6E", "5L13", "5E", "4L13", "4E", "3E"], + grassyterrain: ["7E", "6E"], + growth: ["7L1", "6L1", "5L1", "4L1", "3L6", "3S0"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L4", "7E", "6L4", "6E", "5L9", "5E", "4L9", "4E", "3L18"], + leechseed: ["7L13", "7E", "6L13", "6E", "5L17", "5E", "4L17", "4E", "3E"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + megadrain: ["7L10", "6L10", "5L5", "5D", "4L5", "3L13"], + mimic: ["3T"], + morningsun: ["7E", "6E", "5E"], + naturalgift: ["7L31", "7E", "6L31", "6E", "5L31", "5E", "4M"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + razorleaf: ["7L16", "6L16", "5L29", "4L29"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7L43", "6T", "6L43", "5T", "5L45", "4T", "4L45"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "6E", "5E", "5D", "4E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L28", "6T", "6L28", "5T", "5L33", "4T", "4L33", "3L37"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + worryseed: ["7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], + }}, + sunflora: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["7L25", "6L25", "5L21", "4M", "4L21", "3M", "3L25"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L37", "6L37", "5L37", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + flowershield: ["7L1", "6L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L22", "6T", "6L22", "5T", "5L22", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L7", "6L7", "5L13", "4L13"], + growth: ["7L1", "6L1", "5L1", "4L1", "3L6"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L4", "6L4", "5L9", "4L9", "3L18"], + leafstorm: ["7L43", "6L43", "5L45", "4L43"], + leechseed: ["7L13", "6L13", "5L17", "4L17"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + megadrain: ["7L10", "6L10", "5L5", "4L5"], + mimic: ["3T"], + naturalgift: ["7L31", "6L31", "5L31", "4M"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L50", "6L50"], + petaldance: ["7L28", "6L28", "5L33", "4L33", "3L37"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + razorleaf: ["7L16", "6L16", "5L29", "4L29", "3L13"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L34", "6M", "6L34", "5M", "5L41", "4M", "4L41", "3M", "3L42"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L30"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + worryseed: ["7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25"], + }}, + yanma: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + airslash: ["7L54", "6L54", "5L54", "4L54"], + ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L57", "6L57", "5L57", "4L57"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + detect: ["7L17", "6L17", "5L17", "4L17", "3L25"], + doubleedge: ["7E", "6E", "5E", "3T"], + doubleteam: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11", "3M", "3L12"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7E", "6E", "5E", "5D", "4E"], + feintattack: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7L1", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "5D", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L38", "6L38", "5L38", "4L38", "3L23"], + leechlife: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L30", "7E", "6L30", "6E", "5L30", "5E", "4L30", "4E"], + quickattack: ["7L6", "6L6", "5L6", "5D", "4L6", "3L6"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L46", "6L46", "5L46", "4L46", "3L49"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sonicboom: ["7L14", "6L14", "5L14", "4L14", "3L17"], + steelwing: ["7M", "6M", "4M", "3M"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L22", "6L22", "5L22", "4L22", "3L31"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27", "3L34"], + uturn: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L49"], + whirlwind: ["7E", "6E", "5E", "4E", "3E"], + wingattack: ["7L43", "6L43", "5L43", "4L43", "3L39"], + }}, + yanmega: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + airslash: ["7L54", "7L1", "6L1", "5L54", "4L49"], + ancientpower: ["7L33", "6L33", "5L33", "4T", "4L33"], + attract: ["7M", "6M", "5M", "4M"], + bugbite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bugbuzz: ["7L57", "7L1", "6L1", "5L57", "4L54"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + detect: ["7L17", "6L17", "5L17", "4L17"], + doubleteam: ["7M", "7L11", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + leechlife: ["7M"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["7L30", "6L30", "5L30", "4L30"], + quickattack: ["7L6", "7L1", "6L1", "5L1", "4L1"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L46", "6L46", "5L46", "4L43"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + slash: ["7L43", "6L43", "5L43", "4L38"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + sonicboom: ["7L14", "6L14", "5L14", "4L14"], + steelwing: ["7M", "6M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7L22", "6L22", "5L22", "4L22"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["7L27", "6T", "6L27", "5T", "5L27", "4T", "4L27"], + uturn: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L46"], + }}, + wooper: {learnset: { + acidspray: ["7E", "6E", "5E"], + afteryou: ["7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L23", "6L23", "5L23", "4L23", "3L21"], + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + aquatail: ["6T", "5T", "5D", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33", "3M", "3L36"], + eerieimpulse: ["7E", "6E"], + encore: ["7E", "6E", "5E", "4E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + guardswap: ["7E", "6E"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L43", "6L43", "5L43", "4L43", "3L51"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mist: ["7L43", "6L43", "5L43", "4L43", "3L51"], + mudbomb: ["7L19", "6L19", "5L19", "4L19"], + muddywater: ["7L47", "6L47", "5L47", "4L47"], + mudshot: ["7L9", "6L9", "5L9", "4L9", "3L16"], + mudslap: ["4T", "3T"], + mudsport: ["7L5", "7E", "6L5", "6E", "5L5", "5E", "4L5", "4E", "3E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L41"], + recover: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4E", "3E"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + slam: ["7L15", "6L15", "5L15", "4L15", "3L11"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E", "3E"], + stockpile: ["7E", "6E", "5E", "4E", "3E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E", "3E"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + yawn: ["7L29", "6L29", "5L29", "4L29", "3L31"], + }}, + quagsire: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7L24", "6L24", "5L24", "4L24", "3L23"], + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L42"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L48", "6L48", "5L48", "4L48", "3L61"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + irontail: ["6T", "5T", "4M", "3M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mist: ["7L48", "6L48", "5L48", "4L48", "3L61"], + mudbomb: ["7L19", "6L19", "5L19", "4L19"], + muddywater: ["7L53", "6L53", "5L53", "4L53"], + mudshot: ["7L9", "6L9", "5L9", "4L9", "3L16"], + mudslap: ["4T", "3T"], + mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41", "3M", "3L49"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + slam: ["7L15", "6L15", "5L15", "4L15", "3L11"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + yawn: ["7L31", "6L31", "5L31", "4L31", "3L35"], + }}, + murkrow: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + assurance: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L9", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bravebird: ["7E", "6E", "5E", "4E"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "5D", "4E", "3E"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillpeck: ["7E", "6E", "5E", "4E", "3E"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7L35", "7E", "6L35", "6E", "5L35", "5E", "4L35", "4E", "3L35"], + flatter: ["7E", "6E"], + fly: ["7M", "6M", "5M", "4M", "3M"], + foulplay: ["7L45", "6T", "6L45", "5T", "5L45"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7L11", "6L11", "5L11", "4L11", "3L22"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + meanlook: ["7L41", "6L41", "5L41", "4L41", "3L48"], + mimic: ["3T"], + mirrormove: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L21", "6L21", "5L21", "4L21", "3L27"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + perishsong: ["7E", "6E", "5E", "4E", "3E"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M"], + psychoshift: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L5", "6L5", "5L5", "4L5", "3L14"], + quash: ["7M", "7L65", "6M", "6L65", "5M", "5L65"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + skyattack: ["7E", "6T", "6E", "5T", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "3T"], + spite: ["6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L55", "6L55", "5L55", "4T", "4L45"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["7L50", "6T", "6L50", "5T", "5L51", "4T"], + taunt: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L40"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + whirlwind: ["7E", "6E", "5E", "4E", "3E"], + wingattack: ["7L15", "7E", "6L15", "6E", "5L15", "5E", "4L15", "4E", "3E"], + }}, + honchkrow: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + astonish: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + darkpulse: ["7M", "7L75", "6M", "6L75", "5T", "5L75", "4M", "4L55"], + defog: ["4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + foulplay: ["7L45", "6T", "6L45", "5T", "5L45"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + haze: ["7L1", "6L1", "5L1", "4L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T"], + incinerate: ["6M", "5M"], + mudslap: ["4T"], + nastyplot: ["7L35", "6L35", "5L35", "4L35"], + naturalgift: ["4M"], + nightslash: ["7L55", "7L1", "6L1", "5L55", "4L45"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["7L1", "6L1", "5L1", "4L1"], + quash: ["7M", "7L65", "6M", "6L65", "5M", "5L65"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + skyattack: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T"], + spite: ["6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "6L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + wingattack: ["7L1", "6L1", "5L1", "4L1"], + }}, + misdreavus: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + astonish: ["7L10", "6L10", "5L10", "4L10", "3L11"], + attract: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L14", "6L14", "5L14", "4L14", "3L17"], + curse: ["7E", "6E", "5E", "4E"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + destinybond: ["7E", "6E", "5E", "5D", "4E", "3E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + grudge: ["7L50", "6L50", "5L50", "4L46", "3L53"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + hex: ["7L23", "6L23", "5L23"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T"], + imprison: ["7E", "6E", "5E", "4E", "3E"], + inferno: ["5D"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meanlook: ["7L19", "6L19", "5L19", "4L19", "3L23"], + mefirst: ["7E", "6E"], + memento: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + nightmare: ["3T"], + ominouswind: ["7E", "6E", "5E", "4T", "4E"], + painsplit: ["7L32", "6T", "6L32", "5T", "5L32", "4T", "4L28", "3L37"], + payback: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L32"], + perishsong: ["7L46", "6L46", "5L46", "4L41", "3L45"], + powergem: ["7L55", "6L55", "5L55", "4L50"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L28", "6L28", "5L28", "4L23", "3L30"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psywave: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L37", "3M"], + shadowsneak: ["7E", "6E", "5E", "4E"], + shockwave: ["6T", "4M", "3M"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7L5", "7E", "6T", "6L5", "6E", "5T", "5L5", "5E", "4T", "4L5", "4E", "3L6", "3S0"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E", "4T", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["7E", "6T", "6E", "5T", "5E"], + }}, + mismagius: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + astonish: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T"], + luckychant: ["7L1", "6L1", "5L1", "4L1"], + magicalleaf: ["7L1", "6L1", "5L1", "4L1"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mysticalfire: ["7L1", "6L1"], + naturalgift: ["4M"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + phantomforce: ["7L1", "6L1"], + powergem: ["7L1", "6L1"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psywave: ["7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + }}, + unown: {learnset: { + hiddenpower: ["7M", "7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + wynaut: {learnset: { + charm: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + counter: ["7L15", "6L15", "5L15", "4L15", "3L15"], + destinybond: ["7L15", "6L15", "5L15", "4L15", "3L15"], + encore: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + mirrorcoat: ["7L15", "6L15", "5L15", "4L15", "3L15"], + safeguard: ["7M", "7L15", "6M", "6L15", "5L15", "4L15", "3L15"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + tickle: ["3S0"], + }}, + wobbuffet: {learnset: { + charm: ["5D"], + counter: ["7L1", "6L1", "6S2", "6S3", "5L1", "4L1", "3L1", "3S0", "3S1"], + destinybond: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + encore: ["5D"], + mirrorcoat: ["7L1", "6L1", "6S3", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], + safeguard: ["7M", "7L1", "6M", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + }}, + girafarig: {learnset: { + agility: ["7L23", "6L14", "5L14", "4L14", "3L31"], + amnesia: ["7E", "6E", "5E", "4E", "3E"], + assurance: ["7L10", "6L10", "5L28", "4L28"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L7"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L41", "6L23", "5L23", "4L23", "3L37"], + beatup: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "5D", "4L1", "3L13"], + crunch: ["7L37", "6L37", "5L46", "4L46", "3L49"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["3T"], + doublehit: ["7L28", "6L28", "5L32", "4L32"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + guardswap: ["7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + meanlook: ["7E", "6E", "5E"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5E", "5D", "4E"], + mudslap: ["4T", "3T"], + nastyplot: ["7L46", "6L46"], + naturalgift: ["4M"], + nightmare: ["3T"], + odorsleuth: ["7L5", "6L5", "5L5", "4L5", "3L25"], + powerswap: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L19", "6L19", "5L19", "4L19", "3L43"], + psychic: ["7M", "7L50", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "6E", "5E", "4E"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stomp: ["7L14", "6L10", "5L10", "4L10", "3L19"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7E", "6E", "5E", "4E", "3E"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + wish: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L41", "4T", "4L41"], + }}, + pineco: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L20", "6L20", "5L20", "4L17", "3L29"], + bodyslam: ["3T"], + bugbite: ["7L9", "6T", "6L9", "5T", "5L9", "4T", "4L9"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E", "3S1"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L45", "7E", "6L45", "6E", "5L45", "5E", "4L42", "4E", "3T", "3L50"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + explosion: ["7M", "7L34", "6M", "6L34", "5M", "5L34", "4M", "4L31", "3T", "3L36"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gravity: ["6T", "5T", "5D", "4T"], + gyroball: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L39"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L34"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + naturalgift: ["7L23", "6L23", "5L23", "4M", "4L20"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L28"], + pinmissile: ["7E", "6E", "5E", "4E", "3E", "3S1"], + powertrick: ["7E", "6E", "5E", "4E"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], + rapidspin: ["7L17", "6L17", "5L17", "4L12", "3L22"], + reflect: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], + refresh: ["3S1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E", "4E"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandtomb: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L6", "6L6", "5L6", "5D", "4L6", "3T", "3L8", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L28", "6L28", "5L28", "4L23", "3L43", "3S1"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7E", "6E", "5E", "4E", "3E"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + takedown: ["7L12", "6L12", "5L12", "4L9", "3L15"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + toxicspikes: ["7E", "6E", "5E", "5D", "4E"], + venoshock: ["7M", "6M", "5M"], + }}, + forretress: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L1", "6L32", "5L32"], + bide: ["7L20", "6L20", "5L20", "4L17", "3L29"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + bugbite: ["7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L50", "6L56", "5L56", "4L50", "3T", "3L59"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drillrun: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L36", "6M", "6L42", "5M", "5L42", "4M", "4L33", "3T", "3L39"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "7L46", "6M", "6L50", "5M", "5L50", "4M", "4L45"], + headbutt: ["4T"], + heavyslam: ["7L64", "7L1", "6L1", "5L70"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["7L42", "6T", "6L46", "5T", "5L46", "4T", "4L38"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magnetrise: ["7L56", "7L1", "6T", "6L1", "5T", "5L60", "4T", "4L57"], + mimic: ["3T"], + mirrorshot: ["7L1", "6L31", "5L31", "4L31"], + naturalgift: ["7L23", "6L23", "5L23", "4M", "4L20"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L32", "6M", "6L36", "5M", "5L36", "4M", "4L28"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + rapidspin: ["7L17", "6L17", "5L17", "4L12", "3L22"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L6", "7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L28", "6L28", "5L28", "4L23", "3L49"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L12", "6L12", "5L12", "4L1", "3L15"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L1", "6L1", "5L1", "4L1"], + venoshock: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + zapcannon: ["7L60", "7L1", "6L1", "5L64", "4L62", "3L31"], + }}, + dunsparce: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + airslash: ["7L41"], + ancientpower: ["7L16", "7E", "6L19", "6E", "5L48", "5E", "4T", "4L41", "4E", "3E"], + aquatail: ["6T", "5T", "4T"], + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7E", "6E", "5E", "4E", "3E"], + bind: ["6T", "5T"], + bite: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L18", "3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + coil: ["7L28", "6L37", "5L43"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["7L1", "6L1", "5L4", "5D", "4L5", "3T", "3L4"], + dig: ["7L31", "6M", "6L31", "5M", "5L53", "4M", "4L45", "3M"], + doubleedge: ["7L36", "6L34", "5L34", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonrush: ["7L43"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillrun: ["7L21", "6T", "6L43", "5T", "5L43"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7L38", "6T", "6L46", "5T", "5L58", "4T", "4L49", "3L41"], + endure: ["7L46", "6L40", "5L40", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L48", "6L49", "5L63", "4L53", "3L44"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + glare: ["7L33", "6L28", "5L12", "4L13", "3L14"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], + hex: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + magiccoat: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L8", "6L10", "5L24", "4L25", "3L24"], + rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L3", "6L4", "5L16", "4T", "4L17", "3T", "3L21"], + roost: ["7M", "7L23", "6M", "6L25", "5T", "5L33", "4M", "4L33"], + round: ["7M", "6M", "5M"], + screech: ["7L11", "6L13", "5L28", "4L29", "3L31"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7L6", "6T", "6L7", "5T", "5L20", "4T", "4L21", "3L21"], + stealthrock: ["6T", "5T", "5D", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7L26", "6L22", "5L38", "4L37", "3L34"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trumpcard: ["7E", "6E", "5E", "4E"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + yawn: ["7L13", "6L16", "5L8", "4L9", "3L11"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + gligar: {learnset: { + acrobatics: ["7M", "7L22", "6M", "6L22", "5M", "5L27"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7E", "6E", "5E", "4E"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crosspoison: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + feint: ["7E", "6E", "5E", "5D", "4E"], + feintattack: ["7L19", "6L19", "5L23", "4L23", "3L28"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L16", "6L16", "5L20", "4T", "4L20", "3T"], + guillotine: ["7L55", "6L55", "5L49", "4L45", "3L52"], + harden: ["7L7", "6L7", "5L9", "4L9", "3L13"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["7L10", "6T", "6L10", "5T", "5L12", "4T", "4L12"], + metalclaw: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + poisontail: ["7E", "6E", "5E"], + powertrick: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L13", "6L13", "5L16", "4L16", "3L20"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L4", "6L4", "5L5", "5D", "4L5", "3L6", "3S0"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandtomb: ["7E", "6E", "5E", "4E", "3E"], + screech: ["7L35", "6L35", "5L31", "4L27", "3L44"], + secretpower: ["6M", "4M", "3M"], + skyuppercut: ["7L45", "6L45", "5L45"], + slash: ["7L27", "6L27", "5L34", "4L31", "3L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L38", "4M", "4L34", "3T"], + tailwind: ["6T", "5T", "5D", "4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uturn: ["7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], + venoshock: ["7M", "6M", "5M"], + wingattack: ["7E", "6E", "5E", "4E", "3E"], + xscissor: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], + }}, + gliscor: {learnset: { + acrobatics: ["7M", "7L22", "6M", "6L22", "5M", "5L27"], + aerialace: ["7M", "6M", "5M", "4M"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + batonpass: ["4C"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bugbite: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + feintattack: ["7L19", "6L19", "5L23", "4L23"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L16", "6L16", "5L20", "4T", "4L20"], + gigaimpact: ["7M", "6M", "5M", "4M"], + guillotine: ["7L55", "7L1", "6L1", "5L49", "4L45"], + harden: ["7L7", "7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + irontail: ["6T", "5T", "4M"], + knockoff: ["7L10", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L27", "6L27", "5L34", "4L31"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L13", "6L13", "5L16", "4L16"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L4", "7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "6M", "5M", "4M"], + screech: ["7L35", "6L35", "5L31", "4L27"], + secretpower: ["6M", "4M"], + skyattack: ["6T", "5T", "4T"], + skyuppercut: ["7L45", "6L45", "5L45"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + steelwing: ["7M", "6M", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L38", "4M", "4L34"], + tailwind: ["6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "7L30", "6M", "6L30", "5M", "5L42", "4M", "4L38"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L42"], + }}, + snubbull: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L7", "6L7", "5L7", "4L7", "3L13"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L1", "6L1", "5L1", "5D", "4L1", "3L8", "3S0"], + closecombat: ["7E", "6E", "5E", "5D", "4E"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + crunch: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E", "3L53", "3E"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "5D", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7L19", "6L19", "5L19", "4T", "4L19"], + healbell: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icefang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + icepunch: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lastresort: ["6T", "5T", "4T"], + lick: ["7L13", "6L13", "5L13", "4L13", "3L19"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["7E", "6E", "5E", "4E", "3T", "3E"], + mimic: ["7E", "6E", "5E", "3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], + playrough: ["7L37", "6L37"], + poweruppunch: ["6M"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L31", "6L31", "5L31", "4L31", "3L34"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L26"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snarl: ["7M", "6M", "5M"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L4", "3S0"], + takedown: ["5L37", "4L37", "3L43"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + granbull: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L7", "6L7", "5L7", "4L7", "3L13"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L1", "6L1", "5L1", "4L1", "3L8"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + crunch: ["7L59", "6L59", "5L59", "4L59", "3L61"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7L19", "6L19", "5L19", "4T", "4L19"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lick: ["7L13", "6L13", "5L13", "4L13", "3L19"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["7L67", "7L1", "6T", "6L1", "5T", "5L67"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "7L51", "6M", "6L51", "5M", "5L51", "4M", "4L51"], + playrough: ["7L43", "6L43"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L35", "6L35", "5L35", "4L35", "3L38"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L28"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L4"], + takedown: ["5L43", "4L43", "3L49"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + qwilfish: {learnset: { + acidspray: ["7E", "6E", "5E"], + aquajet: ["7E", "6E", "5E", "5D", "4E"], + aquatail: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L33"], + bubble: ["7L13", "6L13"], + bubblebeam: ["7E", "6E", "5E", "4E", "3E"], + captivate: ["4M"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + destinybond: ["7L53", "7L1", "6L1", "5L53", "4L53", "3L45"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fellstinger: ["7L60", "7L1", "6L1"], + flail: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L9", "6L9", "5L9", "4L9", "3L9", "3S0"], + haze: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L57", "7L1", "6L1", "5L57", "4L57", "3L37"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + mimic: ["3T"], + minimize: ["7L9", "6L9", "5L9", "4L9", "3L9", "3S0"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L37", "6L37", "5L37", "4L37", "3L21"], + poisonjab: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L49", "4E"], + poisonsting: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L29", "6L29", "5L29", "4L29", "3L25"], + rollout: ["7L17", "6L17", "5L17", "4T", "4L17", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "5D", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spikes: ["7L1", "6L1", "5L1", "4L1", "3L1"], + spitup: ["7L25", "6L25", "5L25", "4L25"], + stockpile: ["7L25", "6L25", "5L25", "4L25"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + takedown: ["7L41", "6L41", "5L41", "4L41", "3L33"], + taunt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + toxicspikes: ["7L21", "6L21", "5L21", "4L21"], + venoshock: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L13", "4L13", "3L13"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["4M"], + }}, + shuckle: {learnset: { + acid: ["7E", "6E", "5E"], + acupressure: ["7E", "6E", "5E", "4E"], + afteryou: ["6T", "5T"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L28"], + bind: ["6T", "5T"], + bodyslam: ["3T"], + bugbite: ["7L42", "6T", "6L42", "5T", "5L49", "4T", "4L40"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7L5", "6L5", "5L7", "5D", "4L9", "3L14", "3S1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + finalgambit: ["7E", "6E", "5E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L27", "6T", "6L27", "5T", "5L31", "4T", "4L35"], + guardsplit: ["7L45", "6L45", "5L55"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4E"], + mimic: ["3T"], + mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + naturalgift: ["4M"], + powersplit: ["7L45", "6L45", "5L55"], + powertrick: ["7L31", "6L31", "5L43", "4L48"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L20", "6M", "6L20", "5M", "5L25", "4M", "4L27", "3M", "3L37"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L23", "6L23", "5L23"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L1", "6L1", "5L37", "4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L16", "6M", "6L16", "5M", "5L19", "4M", "4L14", "3M", "3L23"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + sandtomb: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + shellsmash: ["7L34", "6L34", "5L34", "5D"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M", "3S1"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stickyweb: ["7L53", "7L1", "6L1"], + stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["7L12", "6M", "6L12", "5M", "5L1"], + substitute: ["7M", "6M", "5M", "4M", "3T", "3S1"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M", "3S1"], + venoshock: ["7M", "6M", "5M"], + withdraw: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + wrap: ["7L9", "6L9", "5L13", "4L22", "3L9", "3S0"], + }}, + heracross: {learnset: { + aerialace: ["7M", "7L10", "6M", "6L10", "5M", "5L13", "4M", "4L13"], + armthrust: ["7L1", "6L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "7L28", "6M", "6L25", "5M", "5L19", "4M", "4L19", "3M", "3L23"], + brutalswing: ["7M"], + bugbite: ["6T", "5T", "4T"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7L1", "6L1", "6S0", "6S1"], + captivate: ["4M"], + chipaway: ["7L16", "6L16", "5L16"], + closecombat: ["7L43", "6L34", "6S0", "5L37", "4L37"], + confide: ["7M", "6M"], + counter: ["7L19", "6L19", "5L25", "4L25", "3T", "3L30"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "6S1", "5M", "4M", "3M"], + endure: ["7L1", "6L1", "5L1", "4M", "4L1", "3T", "3L11"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4E", "3E"], + feint: ["7L7", "6L7", "5L49", "4L49"], + flail: ["7E", "6E", "5E", "5D", "4E", "3E"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "5D", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L25", "6L7", "5L7", "4L7", "3L17"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + harden: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "6L1", "5L1", "5D", "4L1", "3L6"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megahorn: ["7L37", "7E", "6L37", "6E", "6S0", "5L55", "5E", "4L55", "3L53"], + mimic: ["3T"], + naturalgift: ["4M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + pinmissile: ["7L31", "6L31", "6S0", "6S1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E", "4E"], + reversal: ["7L46", "6L43", "5L43", "4L43", "3L45"], + rockblast: ["7E", "6E", "6S1"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "6E", "5E", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L34", "6L28", "5L31", "4L31", "3L37"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + venoshock: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + sneasel: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L20", "6L20", "5L24", "4L24", "3L36"], + assist: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E", "4M"], + beatup: ["7L28", "6L28", "5L42", "4L38", "3L57"], + bite: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doublehit: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + falseswipe: ["7M", "6M", "5M", "4M"], + feint: ["7E", "6E", "5E"], + feintattack: ["7L10", "6L10", "5L14", "4L14", "3L22"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L16", "6L16", "5L21", "4L21", "3L29"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["7L25", "6M", "6L25", "5M", "5L35"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3T"], + iceshard: ["7L47", "7E", "6L47", "6E", "5L51", "5E", "4L49", "4E"], + iciclecrash: ["7E", "6E"], + icywind: ["7L14", "6T", "6L14", "5T", "5L28", "4T", "4L28", "3T", "3L43"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["6T", "5T", "5D", "4T"], + lowsweep: ["7M", "6M", "5M"], + metalclaw: ["7L22", "6L22", "5L49", "4L42", "3L64"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + punishment: ["7L44", "7E", "6L44", "6E", "5L44", "5E", "4E"], + pursuit: ["7E", "6E", "5E", "4E"], + quickattack: ["7L8", "6L8", "5L8", "4L8", "3L8", "3S0"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + screech: ["7L32", "6L32", "5L10", "4L10", "3L15"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L35", "6L35", "5L38", "4L35", "3L50"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7L40", "6T", "6L40", "5T", "5L40", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M", "3L1", "3S0"], + thief: ["7M", "6M", "5M", "4M", "3M"], + throatchop: ["7E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + weavile: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + assurance: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "6S1", "5M", "4M", "4S0"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "7L47", "6M", "6L47", "5T", "5L51", "4M", "4L49"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["4S0"], + falseswipe: ["7M", "6M", "5M", "4M"], + feintattack: ["7L10", "6L10", "5L14", "4L14"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L42", "4M", "4L38"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L16", "6L16", "5L21", "4L21"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L25", "6M", "6L25", "5M", "5L35"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "6S1", "5T", "4T"], + iceshard: ["4S0"], + icywind: ["7L14", "6T", "6L14", "5T", "5L28", "4T", "4L28"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + metalclaw: ["7L22", "6L22", "5L49", "4L42"], + mudslap: ["4T"], + nastyplot: ["7L20", "6L20", "5L24", "4L24"], + naturalgift: ["4M"], + nightslash: ["7L35", "6L35", "6S1", "5L35", "4L35", "4S0"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + punishment: ["7L44", "6L44"], + quickattack: ["7L8", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7L1", "6L1", "5L1", "4L1"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L32", "6L32", "5L10", "4L10"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7L40", "6T", "6L40", "5T", "5L40", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "6S1", "5M", "4M"], + }}, + teddiursa: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L1", "6L1"], + bellydrum: ["7E", "6E", "5E", "4E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L36", "6L36", "5L36", "4L36"], + chipaway: ["7E", "6E", "5E"], + closecombat: ["7E", "6E", "5E", "4E"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + covet: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], + crosschop: ["7E", "6E", "5E", "4E"], + crunch: ["7E", "6E", "5E", "5D", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "5D", "4L1", "4E", "3L19", "3E"], + feintattack: ["7L15", "6L15", "5L15", "4L15", "3L25"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "7L57", "7L1", "6M", "6L1", "5M", "5L57", "4M", "4L57"], + focuspunch: ["6T", "5D", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L8", "6L8", "5L8", "4L8", "3L13"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hypervoice: ["6T", "5T"], + icepunch: ["6T", "5T", "4T", "3T"], + lastresort: ["6T", "5T", "4T"], + leer: ["5L1", "4L1", "3L1", "3S0"], + lick: ["7L1", "6L1", "5L1", "4L1", "3L7", "3S0", "3S1"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["7E", "6E", "5E", "4E", "3E", "3S1"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + playnice: ["7L25", "6L25"], + playrough: ["7E", "6E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S1"], + rest: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L31"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M", "3S1"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["7E", "6E", "5E", "4E", "3T", "3E"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L29", "6L29", "5L29", "4L29", "3L37"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L43", "3T", "3L43"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L22", "6L22", "5L22", "4L22"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7E", "6E", "5E", "4E", "3E"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L50", "6L50", "5L50", "4L50", "3L49"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + workup: ["7M", "5M"], + yawn: ["7E", "6E", "5E", "4E", "3E"], + }}, + ursaring: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7L1", "6L1", "5L1", "4L1", "3L19"], + feintattack: ["7L15", "6L15", "5L15", "4L15", "3L25"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L8", "6L8", "5L8", "4L8", "3L1"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + hammerarm: ["7L67", "7L1", "6L1", "5L67", "4L67"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icepunch: ["6T", "5T", "4T", "3T"], + lastresort: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lick: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + playnice: ["7L25", "6L25"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47", "3M", "3L31"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L38", "6L38", "5L38", "4L38"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L29", "6L29", "5L29", "4L29", "3L37"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7L49", "6T", "6L49", "5T", "5L49", "4T", "4L49", "3T", "3L43"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L22", "6L22", "5L22", "4L22"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L58", "6L58", "5L58", "4L58", "3L49"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + workup: ["7M", "5M"], + }}, + slugma: {learnset: { + acidarmor: ["7E", "6E", "5E", "4E", "3E"], + afteryou: ["6T", "5T"], + amnesia: ["7L36", "6L32", "5L32", "4L31", "3L29"], + ancientpower: ["7L22", "6L22", "5L28", "4T", "4L26"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L41", "6L41", "5L46", "4L46", "3T", "3L50"], + captivate: ["4M"], + clearsmog: ["7L20", "6L20"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7L50", "7E", "6T", "6L50", "6E", "5T", "5L55", "5E", "4T", "4L56"], + ember: ["7L6", "6L5", "5L5", "5D", "4L8", "3L8"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flameburst: ["7L27", "6L23", "5L23"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L48", "6M", "6L48", "5M", "5L50", "4M", "4L53", "3M", "3L36"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + guardswap: ["7E", "6E"], + harden: ["7L13", "6L13", "5L14", "4L16", "3L22"], + heatwave: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["7L15", "6M", "6L15", "5M"], + inferno: ["7E", "6E", "5E", "5D"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T", "4T"], + lavaplume: ["7L34", "6L34", "5L37", "4L38"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + memento: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L43", "6L19", "5L19", "4L23"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L41", "4M", "4L41", "3T", "3L43"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L8", "6L8", "5L10", "4L11", "3L15"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["7E", "6E", "5E", "4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smog: ["7L1", "6L1", "5L1", "4L1", "3L1"], + smokescreen: ["7E", "6E", "5E", "4E"], + snore: ["6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E"], + stockpile: ["7E", "6E", "5E", "4E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + magcargo: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7L36", "6L32", "5L32", "4L31", "3L29"], + ancientpower: ["7L22", "6L22", "5L28", "4T", "4L26"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L43", "6L43", "5L52", "4L52", "3T", "3L60"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + clearsmog: ["7L20", "6L20"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7L58", "7L1", "6T", "6L1", "5T", "5L67", "4T", "4L66"], + earthquake: ["7M", "6M", "5M", "4M", "3M", "3S0"], + ember: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flameburst: ["7L27", "6L23", "5L23"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L54", "6M", "6L54", "5M", "5L59", "4M", "4L61", "3M", "3L36", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L13", "6L13", "5L14", "4L16", "3L22"], + heatwave: ["6T", "5T", "4T", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["7L15", "6M", "6L15", "5M"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T", "4T"], + lavaplume: ["7L34", "6L34", "5L37", "4L40"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L47", "6L19", "5L19", "4L23"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L44", "4M", "4L45", "3T", "3L48"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shellsmash: ["7L1", "6L38", "5L38"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smog: ["7L1", "6L1", "5L1", "4L1", "3L1"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + swinub: {learnset: { + amnesia: ["7L48", "6L48", "5L49", "4L49", "3L55"], + ancientpower: ["7E", "6E", "5E", "5D", "4T", "4E", "3E", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E"], + bite: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44", "3M", "3L46"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["3S0"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["7L14", "6L14", "5L16", "4M", "4L16", "3T", "3L19"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "4E"], + flail: ["7L40", "6L40", "5L40"], + freezedry: ["7E", "6E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + iceshard: ["7L24", "6L24", "5L28", "4L28"], + iciclecrash: ["7E", "6E", "5E"], + iciclespear: ["7E", "6E", "5E", "5D", "4E", "3E"], + icywind: ["7L21", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mist: ["7L35", "6L35", "5L40", "4L40", "3L37", "3S0"], + mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mudshot: ["7E", "6E", "5E", "4E", "3E", "3S0"], + mudslap: ["7L11", "6L11", "5L13", "4T", "4L13", "3T"], + mudsport: ["7L5", "6L5", "5L4", "4L4"], + naturalgift: ["4M"], + odorsleuth: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + powdersnow: ["7L8", "6L8", "5L8", "4L8", "3L10"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "7E", "6L28", "6E", "5L32", "5E", "4L32", "4E", "3L28", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + }}, + piloswine: {learnset: { + amnesia: ["7L58", "6L58", "5L65", "4L65", "3L70"], + ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "7L52", "6M", "6L52", "5M", "5L56", "4M", "4L56", "3M", "3L56"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L40", "4M", "4L40", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["7L14", "6L14", "5L16", "4M", "4L16", "3T", "3L1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L1", "6L33", "5L33", "4L33", "3L33"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L24", "6L24", "5L28", "4L28"], + icywind: ["7L21", "6T", "6L21", "5T", "5L25", "4T", "4L25", "3T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mist: ["7L37", "6L37", "5L48", "4L48", "3L42"], + mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mudslap: ["7L11", "6L11", "5L13", "4T", "4L13", "3T"], + mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], + peck: ["7L1", "6L1", "5L1", "4L1"], + powdersnow: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7L28", "6L28", "5L32", "4L32", "3L28"], + thrash: ["7L41", "6L41", "5L41"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + }}, + mamoswine: {learnset: { + ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "7L52", "6M", "6L52", "5M", "5L56", "4M", "4L56"], + block: ["6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M"], + doublehit: ["7L33", "6L33", "5L33", "5S0", "4L33"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L46", "6M", "6L46", "6S1", "5M", "5L40", "4M", "4L40"], + endeavor: ["6T", "5T", "4T"], + endure: ["7L14", "6L14", "5L16", "4M", "4L16"], + facade: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L1"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "7L21", "6M", "6L21", "5M", "5L25", "5S0", "4M", "4L25"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L24", "6L24", "5L28", "5S0", "4L28"], + iciclecrash: ["6S1"], + iciclespear: ["6S1"], + icywind: ["6T", "5T", "4T"], + ironhead: ["6T", "5T"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M", "4M"], + mist: ["7L37", "6L37", "5L48", "4L48"], + mudbomb: ["7L18", "6L18", "5L20", "4L20"], + mudslap: ["7L11", "6L11", "5L13", "4T", "4L13"], + mudsport: ["7L5", "7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1"], + peck: ["7L1", "6L1", "5L1", "4L1"], + powdersnow: ["7L8", "7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "6S1", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L58", "7L1", "6L1", "5L65", "4L65"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + takedown: ["7L28", "6L28", "5L32", "5S0", "4L32"], + thrash: ["7L41", "6L41", "5L41"], + toxic: ["7M", "6M", "5M", "4M"], + }}, + corsola: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7L17", "6L17", "5L32", "4T", "4L32", "3L45"], + aquaring: ["7L38", "7E", "6L38", "6E", "5L37", "5E", "4L37", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brine: ["7L27", "6L27", "4M"], + bubble: ["7L4", "6L4", "5L8", "5D", "4L8", "3L12"], + bubblebeam: ["7L10", "6L10", "5L25", "4L25", "3L23"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + camouflage: ["7E", "6E"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "5D", "4E", "3E"], + curse: ["7E", "6E", "5E", "4E"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7L47", "6T", "6L47", "5T", "5L53", "4T", "4L53"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["7L35", "6L35", "5L35", "4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L50", "6L50", "5L52"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "6L1", "5L4", "4L4", "3L6"], + headbutt: ["4T"], + headsmash: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + iciclespear: ["7E", "6E", "5E", "4E", "3E"], + icywind: ["6T", "5T", "4T"], + ingrain: ["7E", "6E", "5E", "4E", "3E"], + irondefense: ["7L29", "6T", "6L29", "5T", "5L29"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + liquidation: ["7E"], + luckychant: ["7L23", "6L23", "5L28", "4L28"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mirrorcoat: ["7L45", "6L45", "5L48", "4L48", "3L39"], + mist: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], + mudsport: ["3S0"], + naturalgift: ["4M"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], + powergem: ["7L41", "6L41", "5L44", "4L44"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L8", "6L8", "5L13", "4L13", "3L17"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L13", "6L13", "5L16", "4L16", "3L17"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L31", "6L31", "5L20", "4L20", "3L34"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spikecannon: ["7L20", "6L20", "5L40", "4L40", "3L28"], + stealthrock: ["6T", "5T", "5D", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["4M"], + }}, + remoraid: {learnset: { + acidspray: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L14", "7E", "6L14", "6E", "5L14", "5E", "4L14", "4E", "3L22", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["5D", "4M"], + bubblebeam: ["7L18", "6L18", "5L19", "4L19", "3L22"], + bulletseed: ["7L38", "6L38", "5L27", "4M", "4L27"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L22", "6L22", "5L23", "4L23", "3L33"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gunkshot: ["6T", "5T", "4T"], + haze: ["7E", "6E", "5E", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L42", "6L42", "5L42"], + hyperbeam: ["7M", "7L46", "6M", "6L46", "5M", "5L45", "4M", "4L45", "3M", "3L55"], + icebeam: ["7M", "7L34", "6M", "6L34", "5M", "5L40", "4M", "4L40", "3M", "3L44"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + lockon: ["7L6", "6L6", "5L6", "5D", "4L6", "3L11"], + mimic: ["3T"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + octazooka: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L10", "6L10", "5L10", "4L10", "3L22"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7E", "6E", "5E", "5D", "4E", "3E"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + signalbeam: ["7L30", "6T", "6L30", "5T", "5L36", "4T", "4L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + soak: ["7L50", "6L50", "5L49"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7E", "6E", "5E", "4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7L26", "7E", "6T", "6L26", "6E", "5L32", "5E", "4M", "4L32", "3M"], + waterspout: ["7E", "6E", "5E", "4E"], + whirlpool: ["4M"], + }}, + octillery: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L22"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + bubblebeam: ["7L18", "6L18", "5L19", "4L19", "3L22"], + bulletseed: ["7L46", "6L46", "5L29", "4M", "4L29", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + constrict: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L11"], + defensecurl: ["3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L22", "6L22", "5L23", "4L23", "3L38"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L52", "6L52", "5L52"], + hyperbeam: ["7M", "7L58", "6M", "6L58", "5M", "5L55", "4M", "4L55", "4S0", "3M", "3L70"], + icebeam: ["7M", "7L40", "6M", "6L40", "5M", "5L48", "4M", "4L48", "4S0", "3M", "3L54"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + octazooka: ["7L1", "6L25", "5L25", "4L25", "4S0", "3L25"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L22"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L1", "6L1", "5L1", "4L1"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + signalbeam: ["7L34", "6T", "6L34", "5T", "5L42", "4T", "4L42", "4S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L64", "6L64", "5L61"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wringout: ["7L28", "6L28", "5L36", "4L36"], + }}, + delibird: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7E", "6E", "5E", "4E", "3E"], + auroraveil: ["7M"], + avalanche: ["4M"], + bestow: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defog: ["4M"], + destinybond: ["7E", "6E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drillpeck: ["7L25"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focuspunch: ["6T", "5D", "4M", "3M"], + freezedry: ["7E", "6E"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + gunkshot: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + happyhour: ["6S1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + iceball: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4E"], + iceshard: ["7E", "6E", "5E", "5D", "4E"], + icywind: ["7E", "6T", "6E", "5T", "5E", "4T", "3T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + pluck: ["5M", "4M"], + poweruppunch: ["6M"], + present: ["7L1", "6L1", "6S1", "5L1", "5D", "4L1", "3L1", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], + recycle: ["6T", "5T", "4M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + signalbeam: ["6T", "5T", "4T"], + skyattack: ["6T", "5T", "4T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "3T"], + spikes: ["7E", "6E"], + splash: ["7E", "6E", "5E", "4E", "3E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + }}, + mantyke: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7L32", "6L32", "5L19", "4L19"], + aircutter: ["4T"], + airslash: ["7L36", "6L36", "5L36"], + amnesia: ["7E", "6E", "5E"], + aquaring: ["7L39", "6L39", "5L46", "4L46"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], + bubble: ["7L1", "6L1", "5L1", "4L1"], + bubblebeam: ["7L7", "6L7", "5L10", "4L10"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L11", "6L11", "5L37", "4L37"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + haze: ["7E", "6E", "5E", "4E"], + headbutt: ["7L16", "6L16", "5L13", "4T", "4L13"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hydropump: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + mirrorcoat: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + mudsport: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4E"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4E"], + slam: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + splash: ["7E", "6E", "5E", "4E"], + substitute: ["7M", "6M", "5M", "4M"], + supersonic: ["7L3", "6L3", "5L4", "4L4"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["7E", "6E"], + takedown: ["7L27", "6L27", "5L31", "4L31"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["7E", "6E", "5E", "4E"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7L19", "6T", "6L19", "5L28", "4M", "4L28"], + watersport: ["7E", "6E", "5E", "4E"], + whirlpool: ["4M"], + wideguard: ["7L23", "7E", "6L23", "6E", "5L23", "5E"], + wingattack: ["7L14", "6L14", "5L22", "4L22"], + }}, + mantine: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L32", "6L32", "5L19", "4L19", "3L29"], + aircutter: ["5D", "4T"], + airslash: ["7L36", "6L36", "5L36"], + amnesia: ["7E", "6E", "5E"], + aquaring: ["7L39", "6L39", "5L46", "4L46"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["7L46", "6T", "6L46", "5T", "5L40", "4T", "4L40"], + brine: ["4M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + bubblebeam: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L15"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7L1", "6L1", "5L1", "4M", "4L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L11", "6L11", "5L37", "4L37", "3L50"], + defog: ["4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["7L16", "6L16", "5L13", "4T", "4L13"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L49", "7E", "6L49", "6E", "5L49", "5E", "4L49", "4E", "3E"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5E", "5D", "4E"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3E"], + rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "7L1"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + signalbeam: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + slam: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + splash: ["7E", "6E", "5E", "4E"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7L3", "7L1", "6L1", "5L1", "5D", "4L1", "3L8", "3S0"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L27", "6L27", "5L31", "4L31", "3L22"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["7E", "6E", "5E", "4E", "3E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7L19", "6T", "6L19", "5L28", "4M", "4L28", "3M", "3L43"], + watersport: ["7E", "6E", "5E", "4E"], + whirlpool: ["4M"], + wideguard: ["7L23", "7E", "6L23", "6E", "5L23", "5E"], + wingattack: ["7L14", "6L14", "5L22", "4L22", "3L36"], + }}, + skarmory: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L31", "6L12", "5L12", "4L12", "3L16"], + aircutter: ["7L12", "6L12", "5L23", "4T", "4L23", "3L29"], + airslash: ["7L45", "6L42", "5L42", "4L39"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L50", "6L39", "5L39"], + bravebird: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drillpeck: ["7E", "6E", "5E", "5D", "4E", "3E"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L20", "6L20", "5L20", "4L20"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L17", "6L17", "5L17", "4L17", "3L26"], + furycutter: ["4T"], + guardswap: ["7E", "6E", "5E", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + metalclaw: ["7L9", "6L9"], + metalsound: ["7L42", "6L31", "5L31", "4L31", "3L45"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7L53", "6L50", "5L50", "4L45"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "5D", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L6", "6L6", "5L6", "4L6", "3L10"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + skydrop: ["7M", "6M", "5M"], + slash: ["7L39", "6L39", "5L45", "4L42"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spikes: ["7L28", "6L28", "5L28", "4L27", "3L42"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + steelwing: ["7M", "7L34", "6M", "6L34", "5L34", "4M", "4L34", "3M", "3L32"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L23", "6L9", "5L9", "4T", "4L9", "3T", "3L13"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwind: ["6T", "5T", "4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + whirlwind: ["7E", "6E", "5E", "4E", "3E"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + houndour: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L27", "4E", "3E"], + bite: ["7L16", "6L16", "5L16", "4L17", "3L25"], + bodyslam: ["3T"], + captivate: ["4M"], + charm: ["3S1"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crunch: ["7L49", "6L49", "5L49", "4L48", "3L49"], + darkpulse: ["7M", "6M", "5T", "5D", "4M"], + destinybond: ["7E", "6E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L40"], + ember: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7E", "6E", "5E", "5D", "4E"], + feintattack: ["7L32", "6L32", "5L32", "4L35", "3L37", "3S1"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L28", "7E", "6L28", "6E", "5L28", "5E", "4L30", "4E"], + firespin: ["7E", "6E", "5E", "4E", "3E"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L43", "3M", "3L43"], + foulplay: ["7L40", "6T", "6L40", "5T", "5L40"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L4", "6L4", "5L4", "5D", "4L4", "3L7", "3S0"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + inferno: ["7L56", "6L56", "5L56"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L52", "7E", "6L52", "6E", "5L52", "5E", "4L53", "4E"], + naturalgift: ["4M"], + nightmare: ["3T"], + odorsleuth: ["7L20", "6L20", "5L20", "4L22", "3L31"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + punishment: ["7E", "6E", "5E", "4E"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + roar: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L14", "3M", "3L19", "3S1"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smog: ["7L8", "6L8", "5L8", "4L9", "3L13"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E", "4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7E", "6E", "5E", "4E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M", "4E", "3E"], + }}, + houndoom: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7L26", "6L26", "5L26", "4L28"], + bite: ["7L16", "6L16", "5L16", "4L17", "3L27"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L56", "6L56", "5L56", "4L54", "3L59"], + darkpulse: ["7M", "6M", "6S0", "5T", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L44"], + ember: ["7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L35", "6L35", "5L35", "4L38", "3L43"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L30", "6L30", "5L30", "4L32"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L50", "6M", "6L50", "6S0", "5M", "5L50", "4M", "4L48", "3M", "3L51"], + foulplay: ["7L45", "6T", "6L45", "5T", "5L45"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + inferno: ["7L65", "7L1", "6L1", "5L65"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L60", "7L1", "6L1", "5L60", "4L60"], + naturalgift: ["4M"], + nightmare: ["3T"], + odorsleuth: ["7L20", "6L20", "5L20", "4L22", "3L35"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L14", "3M", "3L19"], + rocksmash: ["6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "6S0", "5M", "4M", "3M"], + smog: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L13"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "6S0", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + phanpy: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["7L33", "6L33", "5L33", "4L33"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L9"], + doubleedge: ["7L42", "6L42", "5L42", "4L42", "3T", "3L49"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + endure: ["7L19", "6L19", "5L28", "4M", "4L28", "3T", "3L41"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "4E", "3E"], + flail: ["7L6", "6L6", "5L6", "5D", "4L6", "3L17"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + headsmash: ["7E", "6E", "5E", "4E"], + heavyslam: ["7E", "6E", "5E", "5D"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + iceshard: ["7E", "6E", "5E", "4E"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7L37", "6T", "6L37", "5T", "5L37", "4L37"], + mimic: ["3T"], + mudslap: ["7E", "6E", "5E", "4T", "3T"], + naturalgift: ["7L15", "6L15", "5L19", "4M", "4L19"], + odorsleuth: ["7L1", "6L1", "5L1", "4L1", "3L1"], + playrough: ["7E", "6E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L33"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "5D", "4T"], + slam: ["7L24", "6L24", "5L24", "4L24"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L10", "5L10", "4L10", "3L25"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + }}, + donphan: {learnset: { + ancientpower: ["4T"], + assurance: ["7L15", "6L15", "5L31", "4L31"], + attract: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brutalswing: ["7M"], + bulldoze: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L9"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L43", "6M", "6L43", "5M", "5L46", "4M", "4L46", "3M", "3L49"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flail: ["4L1", "3L17"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L1", "6L25", "5L25", "4L25", "3L25"], + gigaimpact: ["7M", "7L50", "6M", "6L50", "5M", "5L54", "4M", "4L54"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hornattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + irondefense: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["7L19", "6T", "6L10", "5T", "5L10", "4T", "4L10"], + lastresort: ["6T", "5T"], + magnitude: ["7L30", "6L19", "5L19", "4L19"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["3L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L6", "6L6", "5L6", "4L6", "3L41"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L15", "4T", "4L15", "3T", "3L33"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L37", "6L37", "5L39", "4L39"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + slam: ["7L24", "6L24", "5L24", "4L24"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + }}, + stantler: {learnset: { + astonish: ["7L7", "6L7", "5L7", "4L7", "3L11"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L47"], + captivate: ["7L50", "6L50", "5L53", "4M", "4L49"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L23", "6L23", "5L23", "4L23", "3L41"], + disable: ["7E", "6E", "5E", "5D", "4E", "3E"], + doubleedge: ["3T"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7E", "6E", "5E", "4E", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L10", "6L10", "5L10", "4L10", "3L17"], + imprison: ["7L49", "6L49", "5L49", "4L43"], + irontail: ["6T", "5T", "4M", "3M"], + jumpkick: ["7L43", "6L43", "5L43"], + lastresort: ["6T", "5T", "4T"], + leer: ["7L3", "6L3", "5L3", "4L3", "3L7", "3S0"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magicroom: ["6T", "5T"], + mefirst: ["7L55", "7E", "7L1", "6L1", "6E", "5L55", "5E", "4L53"], + megahorn: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E"], + naturalgift: ["4M"], + nightmare: ["3T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + psyshock: ["7M", "6M", "5M"], + rage: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L31"], + round: ["7M", "6M", "5M"], + sandattack: ["7L16", "6L16", "5L16", "4L16", "3L27"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "5D", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + stomp: ["7L13", "6L13", "5L13", "4L13", "3L21"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + takedown: ["7L21", "6L21", "5L21", "4L21", "3L37"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7E", "6E", "5E", "4E"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7L38", "7E", "6T", "6L38", "6E", "5T", "5L38", "5E", "4T", "4L38", "4E"], + }}, + smeargle: {learnset: { + captivate: ["5D"], + falseswipe: ["5S1"], + meanlook: ["5S1"], + odorsleuth: ["5S1"], + sketch: ["7L91", "7L81", "7L71", "7L61", "7L51", "7L41", "7L31", "7L21", "7L11", "7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + sleeptalk: ["5D"], + spore: ["5S1"], + }}, + miltank: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "6S0", "5M", "4M", "3M"], + belch: ["7E", "6E"], + bide: ["7L15", "6L15", "5L15", "4L15", "3L26"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["7L24", "6L24", "5L24", "4L24", "3T", "3L43"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7E", "6E", "5E", "5D", "4E", "3E"], + defensecurl: ["7L5", "6L5", "5L5", "5D", "4L5", "3T", "3L8"], + dizzypunch: ["7E", "6E", "5E", "4E"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L3", "6L3", "5L3", "4L3", "3L4"], + gyroball: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + healbell: ["7L48", "6T", "6L48", "5T", "5L48", "4T", "4L48", "3L53"], + heartstamp: ["7E", "6E", "5E"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "5D", "4M", "3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + milkdrink: ["7L11", "6L11", "6S0", "5L11", "4L11", "3L19"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + poweruppunch: ["6M"], + present: ["7E", "6E", "5E", "4E", "3E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + punishment: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L19", "6L19", "6S0", "5L19", "4T", "4L19", "3T", "3L34"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "6E", "5E", "4E", "3T", "3E"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7L8", "6L8", "6S0", "5L8", "4L8", "3L13"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + wakeupslap: ["7L50", "6L50", "5L55", "4L55"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + zenheadbutt: ["7L29", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + }}, + raikou: {learnset: { + aurasphere: ["4S3"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + crunch: ["7L43", "6L43", "5L43", "4L43", "3L61", "3S1"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + discharge: ["7L57", "7L1", "6L1", "5L57", "4L57"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + extrasensory: ["7L64", "7L1", "6L1", "5L64", "4L64"], + extremespeed: ["4S3"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quash: ["7M", "6M", "5M"], + quickattack: ["7L22", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], + raindance: ["7M", "7L71", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M"], + reflect: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L29", "6L29", "5L29", "4L29", "4S2", "3L41", "3S0", "3S1"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thunder: ["7M", "7L85", "6M", "6L85", "5M", "5L85", "4M", "4L71", "3M", "3L71"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L50", "6L50", "5L50", "4L50"], + thundershock: ["7L8", "6L8", "5L8", "4L8", "3L11", "3S0"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + weatherball: ["4S3"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["4S3"], + }}, + entei: {learnset: { + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], + confide: ["7M", "6M"], + crushclaw: ["4S3"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L8", "6L8", "5L8", "4L8", "3L11", "3S0"], + endure: ["4M", "3T"], + eruption: ["7L85", "7L1", "6L1", "5L85", "4L85"], + extrasensory: ["7L64", "7L1", "6L1", "5L64", "4L64"], + extremespeed: ["4S3"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L71", "6M", "6L71", "5M", "5L71", "4M", "4L71", "3M", "3L71"], + firefang: ["7L50", "6L50", "5L50", "4L50"], + firespin: ["7L22", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36", "4S2", "3M", "3L51", "3S1"], + flareblitz: ["4S3"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["4S3"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + lavaplume: ["7L57", "7L1", "6L1", "5L57", "4L57"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sacredfire: ["7L1", "6L1"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L29", "6L29", "5L29", "4L29", "4S2", "3L41", "3S0", "3S1"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3T", "3L61", "3S1"], + swift: ["4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + suicune: {learnset: { + airslash: ["4S3"], + aquaring: ["4S3"], + aurorabeam: ["7L29", "6L29", "5L29", "4L29", "4S2", "3L41", "3S0", "3S1"], + avalanche: ["4M"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "7L85", "6M", "6L85", "5M", "5L85", "4M", "4L85", "3M"], + bodyslam: ["3T"], + brine: ["4M"], + bubblebeam: ["7L8", "7L1", "6L8", "5L8", "4L8", "3L11", "3S0"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L78", "6M", "6L78", "5M", "5L78", "4M", "4L78", "3M", "3L81"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + extrasensory: ["7L64", "6L1", "5L64", "4L64"], + extremespeed: ["4S3"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L22", "6L22", "5L22", "4L22", "4S2", "3L31", "3S0", "3S1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L71", "6L1", "5L71", "4L71", "3L71"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L50", "6L50", "5L50", "4L50"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mirrorcoat: ["7L43", "6L43", "5L43", "4L43", "3L61", "3S1"], + mist: ["7L36", "6L36", "5L36", "4L36", "4S2", "3L51", "3S1"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "7L15", "7L1", "6M", "6L15", "5M", "5L15", "4M", "4L15", "4S2", "3M", "3L21", "3S0"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M"], + sheercold: ["7L1", "4S3"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["7L57", "6T", "6L1", "5T", "5L57", "4T", "4L57"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + larvitar: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L1", "6L1", "5L1", "5S1", "5D", "4L1", "3L1", "3S0"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L14", "6L14", "5L14"], + confide: ["7M", "6M"], + crunch: ["7L41", "6L41", "5L41", "4L37", "3L43"], + curse: ["7E", "6E", "5E", "4E", "3E"], + darkpulse: ["7M", "7L32", "6M", "6L32", "5T", "5L32", "5D", "4M", "4L28"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E", "3E", "3S0"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L41", "3M", "3L50"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L55", "6M", "6L55", "5M", "5L55", "4M", "4L50", "3M", "3L57"], + irondefense: ["7E", "6T", "6E", "5T", "5E", "4E"], + ironhead: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["7E", "6T", "6E", "5T", "5E", "4E", "3E", "3S0"], + payback: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L32"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L14", "3T", "3L22"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L5", "6M", "6L5", "5M", "5L5", "5S1", "4M", "4L5", "3M", "3L8", "3S0"], + scaryface: ["7L23", "6L23", "5L23", "4L19", "3L36"], + screech: ["7L10", "6L10", "5L10", "4L10", "3L15"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "5D", "4M"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + stoneedge: ["7M", "7L50", "6M", "6L50", "5M", "5L50", "4M", "4L46"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "5S1", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L28", "6L28", "5L28", "4L23", "3L29"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + }}, + pupitar: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L14", "6L14", "5L14"], + confide: ["7M", "6M"], + crunch: ["7L47", "6L47", "5L47", "4L41", "3L47"], + darkpulse: ["7M", "7L34", "6M", "6L34", "5T", "5L34", "4M", "4L28"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L47", "3M", "3L56"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L67", "4M", "4L60", "3M", "3L65"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T"], + payback: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L34"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L14", "3T", "3L22"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + scaryface: ["7L23", "6L23", "5L23", "4L19", "3L38"], + screech: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "7L60", "6M", "6L60", "5M", "5L60", "4M", "4L54"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L28", "6L28", "5L28", "4L23", "3L29"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + }}, + tyranitar: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L14", "6L14", "5L14"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L47", "6L47", "6S3", "6S4", "6S5", "6S6", "5L47", "5S1", "5S2", "4L41", "3L47", "3S0"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "7L34", "6M", "6L34", "5T", "5L34", "4M", "4L28"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L54", "6M", "6L54", "6S3", "6S4", "5M", "5L54", "5S2", "4M", "4L47", "3M", "3L61", "3S0"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "5S1", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "7L82", "6M", "6L82", "5M", "5L82", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L73", "6M", "6L73", "5M", "5L73", "4M", "4L70", "3M", "3L75"], + icebeam: ["7M", "6M", "5M", "5S1", "4M", "3M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["6T", "6S3", "6S6", "5T", "4T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "6S5", "6S6", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + outrage: ["6T", "5T", "4T"], + payback: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "5S2", "4M", "4L34"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "6S5", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L19", "6M", "6L19", "6S4", "6S5", "6S6", "5M", "5L19", "4M", "4L14", "3T", "3L22"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + scaryface: ["7L23", "6L23", "5L23", "4L19", "3L38", "3S0"], + screech: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["5S2", "3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "7L63", "6M", "6L63", "6S3", "6S4", "5M", "5L63", "5S1", "4M", "4L54"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L28", "6L28", "5L28", "4L23", "3L29", "3S0"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + lugia: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aeroblast: ["7L43", "6L43", "6S5", "6S6", "5L43", "4L43", "4S2", "4S3", "3L77"], + aircutter: ["4T"], + ancientpower: ["7L57", "6L57", "5L57", "4T", "4L57", "4S3", "3L88"], + aquatail: ["6T", "5T", "4T"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + defog: ["4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragonrush: ["7L15", "6L15", "6S6", "5L15", "4L15"], + dragontail: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M", "3S1"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + extrasensory: ["7L23", "6L23", "5L23", "4L23", "4S2"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["3S1"], + flash: ["6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L79", "6L79", "5L79", "4L79", "3L99"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L9", "6L9", "5L9", "4L9", "3L22"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L37", "6L37", "6S5", "6S6", "5L37", "4L29", "4S2", "3L44", "3S0", "3S1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "6S6", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7L85", "6L85", "5L85", "4M", "4L51"], + nightmare: ["3T"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychoboost: ["3S1"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + punishment: ["7L50", "6L50", "6S5", "5L50", "4L50", "4S3"], + raindance: ["7M", "7L29", "6M", "6L29", "6S5", "5M", "5L29", "4M", "4L29", "4S2", "3M", "3L55", "3S0"], + recover: ["7L71", "6L71", "5L71", "4L23", "3L33", "3S0"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S3", "3M", "3L11"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + skyattack: ["7L99", "6T", "6L99", "5T", "5L99", "4T", "4L99"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "4L43", "3T", "3L66", "3S0"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + weatherball: ["7L1", "6L1", "5L1", "5S4", "4L1"], + whirlpool: ["4M"], + whirlwind: ["7L1", "6L1", "5L1", "5S4", "4L1", "3L1"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + hooh: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + ancientpower: ["7L57", "6L57", "5L57", "4T", "4L57", "4S2", "3L88"], + bravebird: ["7L15", "7S6", "6L15", "6S5", "5L15", "4L15"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93", "3M"], + celebrate: ["6S5"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + extrasensory: ["7L23", "6L23", "5L23", "4L23", "4S1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L37", "6M", "6L37", "6S4", "5M", "5L37", "4M", "4L29", "4S1", "3M", "3L44", "3S0"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L79", "6L79", "5L79", "4L79", "3L99"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L9", "6L9", "5L9", "4L9", "3L22"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7L85", "6L85", "5L85", "4M", "4L51"], + nightmare: ["3T"], + ominouswind: ["4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + punishment: ["7L50", "6L50", "6S4", "5L50", "4L50", "4S2"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L71", "7S6", "6L71", "6S5", "5L71", "4L23", "3L33", "3S0"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + sacredfire: ["7L43", "7S6", "6L43", "6S4", "6S5", "5L43", "4L43", "4S1", "4S2", "3L77"], + safeguard: ["7M", "7L65", "7S6", "6M", "6L65", "5M", "5L65", "4M", "4L9", "4S2", "3M", "3L11"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skyattack: ["7L99", "6T", "6L99", "5T", "5L99", "4T", "4L99", "3T"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L29", "6M", "6L29", "6S4", "5M", "5L29", "4M", "4L29", "4S1", "3M", "3L55", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "4L43", "3T", "3L66", "3S0"], + tailwind: ["6T", "5T", "4T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + weatherball: ["7L1", "6L1", "5L1", "5S3", "4L1"], + whirlwind: ["7L1", "6L1", "5L1", "5S3", "4L1", "3L1"], + willowisp: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + celebi: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L28", "7S7", "6L28", "5L28", "4T", "4L28", "3L20", "3S1", "3S3"], + batonpass: ["7L37", "6L37", "5L37", "4L37", "3L40", "3S1"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "6S6", "5L1", "4L1", "3L1", "3S0"], + cut: ["6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["6T", "5T", "4T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L64", "7S7", "6L64", "5L64", "4L64", "3L30", "3S1", "3S3"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + healbell: ["7L1", "7S7", "6T", "6L1", "6S5", "6S6", "5T", "5L1", "4T", "4L1", "3L1", "3S0", "3S2", "3S3"], + healblock: ["7L55", "6L55", "5L55", "4L55"], + healingwish: ["7L73", "6L73", "5L73", "4L73", "4S4"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + holdback: ["6S5"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + leafstorm: ["7L82", "6L82", "5L82", "4L82", "4S4"], + leechseed: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S2"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["4S4"], + naturalgift: ["7L46", "6L46", "5L46", "4M", "4L46"], + naturepower: ["7M", "6M"], + nightmare: ["3T"], + perishsong: ["7L91", "6L91", "5L91", "4L91", "3L50", "3S1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L1", "6L1", "6S5", "6S6", "5L1", "4L1", "4S4", "3L1", "3S0", "3S2"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L10", "7S7", "6M", "6L10", "6S5", "6S6", "5M", "5L10", "4M", "4L10", "3M", "3L10", "3S0", "3S2", "3S3"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + wonderroom: ["6T", "5T"], + worryseed: ["6T", "5T", "4T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + treecko: {learnset: { + absorb: ["7L5", "6L5", "5L6", "5S1", "4L6", "3L6", "3S0"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L25", "6L25", "5L31", "4L31", "3L31"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["7E", "6E", "5E", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7E", "6E", "5E", "4E", "3E"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + detect: ["7L33", "6L33", "5L41", "4L41", "3L41"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + endeavor: ["7L45", "7E", "6T", "6L45", "6E", "5T", "5E", "4T", "4E", "3E"], + endure: ["4M", "3T"], + energyball: ["7M", "7L37", "6M", "6L37", "5M", "5L51", "4M", "4L51"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7L21", "6T", "6L21", "5T", "5L46", "4M", "4L46", "3M", "3L46"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + grasswhistle: ["7E", "6E", "5E", "4E"], + grassyterrain: ["7E", "6E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7E", "6E", "5E", "4E", "3E"], + leer: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + lowkick: ["6T", "5T", "4T"], + magicalleaf: ["7E", "6E", "5E", "4E"], + megadrain: ["7L13", "6L13", "5L26", "4L26", "3L26"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + pound: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L17", "6L16", "5L16", "4L16", "3L16"], + quickattack: ["7L9", "6L9", "5L11", "4L11", "3L11"], + quickguard: ["7L41", "6L41"], + razorwind: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L49", "6L21", "5L21", "4L21", "3L21"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + slam: ["7L29", "6L29", "5L36", "4L36", "3L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + workup: ["7M"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + grovyle: {learnset: { + absorb: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L28", "6L28", "5L35", "4L35", "3L35"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + detect: ["7L38", "6L38", "5L47", "4L47", "3L47"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L48", "6M", "6L48", "5M", "5L53", "4M", "4L53", "3L53"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L1", "6L16", "5L16", "4T", "4L16", "3T", "3L16"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + leafblade: ["7L23", "6L23", "5L29", "4L29", "3L29"], + leafstorm: ["7L58", "6L58", "5L59", "4L59"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megadrain: ["7L13", "6L13"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L18", "6L17", "5L17", "4L17", "3L17"], + quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + quickguard: ["7L53", "6L53"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L63", "6L23", "5L23", "4L23", "3L23"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + slam: ["7L33", "6L33", "5L41", "4L41", "3L41"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "7L43", "6M", "6L43", "5M", "4M"], + }}, + sceptile: {learnset: { + absorb: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L28", "6L28", "5L35", "4L35", "3L35"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + detect: ["7L39", "6L39", "5L51", "4L51", "3L51"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "5S0", "4M"], + drainpunch: ["6T", "5T", "4M"], + dualchop: ["7L1", "6T", "6L36"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L51", "6M", "6L51", "5M", "5L59", "4M", "4L59", "3L59"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "5S0", "4M"], + focuspunch: ["6T", "4M", "3M"], + frenzyplant: ["7T", "6T", "5T", "4T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L1", "6L16", "4T", "3T", "3L16"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + leafblade: ["7L23", "6L23", "5L29", "4L29", "3L29"], + leafstorm: ["7L63", "7L1", "6L1", "5L67", "5S0", "4L67"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megadrain: ["7L13", "6L13"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + outrage: ["6T", "5T", "4T"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L18", "6L17", "5L17", "4L17", "3L17"], + quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + quickguard: ["7L57", "6L57"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "5S0", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7L69", "6L23", "5L23", "4L23", "3L23"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + slam: ["7L33", "6L33", "5L43", "4L43", "3L43"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "7L45", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + }}, + torchic: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crushclaw: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "6L5", "6S2", "5L10", "5S1", "5S2", "4L10", "3L10", "3S0"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["7E", "6E", "5E", "4E"], + feint: ["7E", "6E", "5E", "4E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + firespin: ["7L19", "6L19", "5L25", "4L25", "3L25"], + flameburst: ["7L28", "7E", "6L28", "6E", "5E"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L46", "6M", "6L43", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + focusenergy: ["7L32", "6L7", "6S2", "5L7", "5S1", "5S2", "4L7", "3L7", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "6S2", "5L1", "5S1", "5S2", "4L1", "3L1", "3S0"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lowkick: ["7E", "6T", "6E", "5T", "5E"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mirrormove: ["7L41", "6L37", "5L37", "4L37", "3L37"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "4E"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7L14", "6L14", "5L16", "4L16", "3L16"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L23", "6L23", "5L28", "4L28", "3L28"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E", "5E", "4E", "3E"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L10", "6L10", "5L19", "4L19", "3L19"], + scratch: ["7L1", "6L1", "6S2", "5L1", "5S1", "5S2", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L37", "6L34", "5L34", "4L34", "3L34"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + combusken: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L31", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L28"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doublekick: ["7L1", "6L16", "5L16", "4L16", "3L16"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T", "4T", "3T"], + flamecharge: ["7M", "7L20", "6M", "6L20", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7L58", "6L54", "5L54", "4L54"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L36", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + lastresort: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mirrormove: ["7L47", "6L43", "5L43", "4L43", "3L43"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7L14", "6L14", "5L17", "4L17", "3L17"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L25", "6L25", "5L32", "4L32", "3L32"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L10", "7L1", "6L1", "5L21", "4L21", "3L21"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skyuppercut: ["7L53", "6L50", "5L50", "4L50", "3L50"], + slash: ["7L42", "6L39", "5L39", "4L39", "3L39"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + blaziken: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blastburn: ["7T", "6T", "5T", "4T"], + blazekick: ["7L1", "6L36", "5L36", "4L36", "3L36", "3S0"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + bravebird: ["7L50", "6L49", "5L49", "4L49"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "7L31", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L28"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doublekick: ["7L1", "6L16", "5L16", "4L16", "3L16"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dualchop: ["6T", "5T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + flamecharge: ["7M", "7L20", "6M", "6L20", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7L63", "7L1", "6L1", "5L66", "5S1", "4L66"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L37", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + highjumpkick: ["7L1", "6L1", "5L1", "5S1"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mirrormove: ["3L49", "3S0"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + peck: ["7L14", "6L14", "5L17", "4L17", "3L17"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L25", "6L25", "5L32", "4L32", "3L32"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L10", "7L1", "6L1", "5L21", "4L21", "3L21"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + skyuppercut: ["7L57", "6L57", "5L59", "4L59", "3L59", "3S0"], + slash: ["7L44", "6L42", "5L42", "4L42", "3L42", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stoneedge: ["7M", "6M", "5M", "5S1", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thunderpunch: ["6T", "5T", "5S1", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + mudkip: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E"], + barrier: ["7E", "6E"], + bide: ["7L17", "6L15", "5L15", "4L15", "3L15"], + bite: ["7E", "6E", "5E", "4E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L44", "6T", "6L44", "5T", "5L46", "4T", "4L46", "3L46"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + foresight: ["7L12", "6L12", "5L19", "4L19", "3L19"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L41", "6L41", "5L42", "4L42", "3L42"], + iceball: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5E", "4E", "3E"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["7L9", "6L6", "5L6", "5S1", "4T", "4L6", "3T", "3L6", "3S0"], + mudsport: ["7L20", "6L20", "5L24", "4L24", "3L24"], + naturalgift: ["4M"], + protect: ["7M", "7L28", "6M", "6L28", "5M", "5L37", "4M", "4L37", "3M", "3L37"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L25", "6L25"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7E", "6E", "5E", "4E"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "5S1", "4L1", "3L1", "3S0"], + takedown: ["7L36", "6L28", "5L28", "4L28", "3L28"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7E", "6T", "6E", "5E", "4E", "3E"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "6L4", "5L10", "5S1", "4L10", "3L10", "3S0"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["7L33", "7E", "6L33", "6E", "5L33", "5E", "4M", "4L33", "4E", "3L33"], + wideguard: ["7E", "6E", "5E"], + workup: ["7M"], + yawn: ["7E", "6E", "5E", "4E"], + }}, + marshtomp: {learnset: { + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L18", "6L15", "5L15", "4L15", "3L15"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L48", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L46"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L52", "6T", "6L52", "5T", "5L53", "4T", "4L53", "3L53"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + foresight: ["7L12", "6L12", "5L20", "4L20", "3L20"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudbomb: ["7L22", "6L22", "5L25", "4L25"], + muddywater: ["7L38", "6L37", "5L37", "4L37", "3L37"], + mudshot: ["7L1", "6L16", "5L16", "4L16", "3L16"], + mudslap: ["7L9", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["3L25"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L32", "6M", "6L32", "5M", "5L42", "4M", "4L42", "3M", "3L42"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L28", "6M", "6L28", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L42", "6L31", "5L31", "4L31", "3L31"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M"], + }}, + swampert: {learnset: { + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bide: ["7L18", "6L15", "5L15", "4L15", "3L15"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L51", "6M", "6L51", "5M", "5L52", "5S0", "4M", "4L52", "3M", "3L52"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L56", "6T", "6L56", "5T", "5L61", "4T", "4L61", "3L61"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L12", "6L12", "5L20", "4L20", "3L20"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7L63", "7L1", "6L1", "5L69", "5S0", "4L69"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydrocannon: ["7T", "6T", "5T", "4T"], + hydropump: ["5S0"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudbomb: ["7L22", "6L22", "5L25", "4L25"], + muddywater: ["7L39", "6L39", "5L39", "4L39", "3L39"], + mudshot: ["7L1", "6L16", "5L16", "4L16", "3L16"], + mudslap: ["7L9", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["3L25"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "7L32", "6M", "6L32", "5M", "5L46", "4M", "4L46", "3M", "3L46"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "7L28", "6M", "6L28", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L44", "6L31", "5L31", "4L31", "3L31"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M"], + }}, + poochyena: {learnset: { + assurance: ["7L22", "6L22", "5L29", "4L29"], + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "6L10", "5L13", "4L13", "3L13"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + crunch: ["7L34", "6L37", "5L53", "4L53", "3L41"], + darkpulse: ["7M", "6M", "5T", "5D", "4M"], + dig: ["6M", "5M", "4M", "3M", "3S0"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L28", "6M", "6L28", "5M", "5L41", "4M", "4L41"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + healbell: ["3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L4", "6L4", "5L5", "5D", "4L5", "3L5", "3S0"], + hypervoice: ["6T", "5T"], + icefang: ["7E", "6E", "5E", "4E"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7E", "6E", "5E", "4E", "3E"], + mefirst: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L46", "7E", "6E"], + poisonfang: ["7E", "6E", "5E", "5D", "4E", "3E", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L16", "6M", "6L16", "5M", "5L21", "4M", "4L21", "3M", "3L21"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "6L7", "5L9", "4L9", "3L9"], + scaryface: ["7L25", "6L25", "5L33", "4L33", "3L29"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L43", "7E", "6L40", "6E", "5L49", "5E", "4T", "4L49", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "7L19", "6M", "6L19", "5M", "5L25", "4M", "4L25", "3T", "3L25"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L40", "6L34", "5L45", "4L45", "3L33"], + taunt: ["7M", "7L31", "6M", "6L31", "5M", "5L37", "4M", "4L37", "3M", "3L37"], + thief: ["7M", "6M", "5M", "4M", "3M", "3L45"], + thunderfang: ["7E", "6E", "5E", "4E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + yawn: ["7L37", "7E", "6E", "5E", "4E", "3E"], + }}, + mightyena: {learnset: { + assurance: ["7L24", "6L24", "5L32", "4L32"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + covet: ["6T", "5T"], + crunch: ["7L40", "7L1", "6L1", "3L47"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L32", "6M", "6L32", "5M", "5L47", "4M", "4L47"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icefang: ["7L1"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L56"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L16", "6M", "6L16", "5M", "5L22", "4M", "4L22", "3M", "3L22"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + scaryface: ["7L28", "6L28", "5L37", "4L37", "3L32"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "7L1", "6M", "6L18", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L52", "6L48", "5L62", "4T", "4L62"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "7L20", "6M", "6L20", "5M", "5L27", "4M", "4L27", "3T", "3L27"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L48", "6L40", "5L52", "4L52", "3L37"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L42", "4M", "4L42", "3M", "3L42"], + thief: ["7M", "7L1", "6M", "6L1", "5M", "5L57", "4M", "4L57", "3M", "3L52"], + thunderfang: ["7L1"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + yawn: ["7L44"], + }}, + zigzagoon: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["7L12", "6L11"], + bellydrum: ["7L37", "6L37", "5L45", "4L41", "3L41"], + bestow: ["7L25", "6L25", "5L33"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], + confide: ["7M", "6M"], + covet: ["7L23", "6T", "6L23", "5T", "5L29", "4L29", "3L29"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + extremespeed: ["3S1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L29", "6L29", "5L37", "4L33", "3L33"], + fling: ["7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L45"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["7L11", "6L9", "5L9", "4T", "4L9", "3L9"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "5D", "4T"], + mimic: ["3T"], + mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + mudsport: ["7L17", "6L17", "5L21", "4L21", "3L21"], + naturalgift: ["4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + pinmissile: ["7L19", "6L19", "5L25", "4L25", "3L25"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L35", "6M", "6L35", "5M", "5L41", "4M", "4L37", "3M", "3L37"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["7E", "6E", "5E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "6L7", "5L13", "4L13", "3L13"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + simplebeam: ["7E", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], + tailwhip: ["7L5", "6L5", "5L5", "4L5", "3L5", "3S0", "3S1"], + takedown: ["7L31", "6L31"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + linoone: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + babydolleyes: ["6S0"], + bellydrum: ["7L43", "6L43", "5L59", "4L53", "3L53"], + bestow: ["7L27", "6L27", "5L41"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + covet: ["7L24", "6T", "6L24", "5T", "5L35", "4L35", "3L35"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L35", "6L35", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + extremespeed: ["6S0"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L48", "6M", "6L48", "5M", "5L65", "4M", "4L59"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L19", "6L19", "5L29", "4L29", "3L29"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["7L11", "6L1", "5L1", "4T", "4L1", "3L1"], + helpinghand: ["6T", "6S0", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L17", "6L17", "5L23", "4L23", "3L23"], + naturalgift: ["4M"], + odorsleuth: ["7L13", "6L13", "5L17", "4L17", "3L17"], + playrough: ["7L1", "6L1"], + protect: ["7M", "6M", "6S0", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L40", "6M", "6L40", "5M", "5L53", "4M", "4L47", "3M", "3L47"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L13", "4L13", "3L13"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slash: ["7L32", "6L32", "5L47", "4L41", "3L41"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + switcheroo: ["7L1", "6L1", "5L1", "4L1"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwhip: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + }}, + wurmple: {learnset: { + bugbite: ["7L15", "6T", "6L15", "5T", "5L15", "5D", "4T", "4L15"], + electroweb: ["6T", "5T"], + poisonsting: ["7L5", "6L5", "5L5", "5D", "4L5", "3L5"], + snore: ["6T", "5T", "5D", "4T"], + stringshot: ["7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + silcoon: {learnset: { + bugbite: ["6T", "5T", "4T"], + electroweb: ["6T", "5T"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + irondefense: ["6T", "5T", "4T"], + stringshot: ["4T"], + }}, + beautifly: {learnset: { + absorb: ["7L12", "6L1", "5L1", "4L1", "3L1"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L20", "6L20", "4T"], + attract: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L35", "6L35", "5L41", "4L41"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L32", "6T", "6L32", "5T", "5L38", "4M", "4L38", "3M", "3L38"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L1", "5L13", "4L13", "3L13"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + megadrain: ["7L22", "6L22", "5L24", "4L24", "3L24"], + mimic: ["3T"], + morningsun: ["7L17", "6L17", "5L20", "4L20", "3L20"], + naturalgift: ["4M"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + quiverdance: ["7L40", "6L40", "5L45"], + rage: ["7L37", "6L37"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["7L25", "6L25", "5L34", "4M", "4L34", "3L34"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L15", "6L15", "5L17", "4L17", "3L17"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + whirlwind: ["7L30", "6L27", "5L27", "4L27", "3L27"], + }}, + cascoon: {learnset: { + bugbite: ["6T", "5T", "4T"], + electroweb: ["6T", "5T"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + irondefense: ["6T", "5T", "4T"], + stringshot: ["4T"], + }}, + dustox: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L35", "6L35", "5L41", "4L41"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L12", "6L1", "5L1", "4L1", "3L1"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + electroweb: ["6T", "5T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L1", "5L13", "4L13", "3L13"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + lightscreen: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + mimic: ["3T"], + moonlight: ["7L17", "6L17", "5L20", "4L20", "3L20"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonpowder: ["7L15", "6L15"], + protect: ["7M", "7L37", "6M", "6L17", "5M", "5L17", "4M", "4L17", "3M", "3L17"], + psybeam: ["7L22", "6L22", "5L24", "4L24", "3L24"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + quiverdance: ["7L40", "6L40", "5L45"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["7L25", "6L25", "5L34", "4M", "4L34", "3L34"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L38", "4M", "4L38", "3M", "3L38"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "7L20", "6M", "6L20", "5M"], + whirlwind: ["7L30", "6L27", "5L27", "4L27", "3L27"], + }}, + lotad: {learnset: { + absorb: ["7L6", "6L5", "5L5", "5D", "4L5", "3L7", "3S0"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bubble: ["7L9", "6L9"], + bubblebeam: ["7L21", "6L21", "5L25", "4L25"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + dive: ["6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "7L36", "6M", "6L36", "5M", "5L45", "4M", "4L43"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L30", "7E", "6T", "6L30", "6E", "5T", "5E", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L3", "6L3", "5L3", "4L3", "3L3", "3S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + leechseed: ["7E", "6E", "5E", "5D", "4E", "3E"], + megadrain: ["7L18", "6L18", "5L19", "4L19", "3L43"], + mimic: ["3T"], + mist: ["7L15", "6L11", "5L11", "4L11", "3L21"], + naturalgift: ["7L12", "6L12", "5L15", "4M", "4L15"], + naturepower: ["7M", "7L24", "6M", "6L7", "5L7", "4L7", "3L13"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "7L27", "6M", "6L27", "5M", "5L37", "4M", "4L35", "3M", "3L31"], + razorleaf: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7E", "6E", "5E", "4E", "3E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + teeterdance: ["7E", "6E", "5E"], + thief: ["7M", "6M", "5M", "4M", "3M"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + watergun: ["7E", "6E", "5E", "4E", "3E"], + waterpulse: ["6T", "5D", "4M", "3M"], + whirlpool: ["4M"], + zenheadbutt: ["7L33", "6T", "6L31", "5T", "5L31", "4T", "4L27"], + }}, + lombre: {learnset: { + absorb: ["7L6", "6L5", "5L5", "4L5", "3L7"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L9", "6L9"], + bubblebeam: ["7L24", "6L24", "5L25", "4L25"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L16", "6L11", "5L11", "4L11", "3L19"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyswipes: ["7L12", "6L12", "5L15", "4L15", "3L25"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L3", "6L3", "5L3", "4L3", "3L3"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L44", "6L44", "5L45", "4L43", "3L49"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["7L36", "6T", "6L36"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "7L28", "6M", "6L7", "5L7", "4L7", "3L13"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M", "3L37"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7L32", "6T", "6L32", "5T", "5L37", "4T", "4L35", "3L43"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L20", "6L19", "5L19", "4L19", "3L31"], + whirlpool: ["4M"], + zenheadbutt: ["7L40", "6T", "6L31", "5T", "5L31", "4T", "4L27"], + }}, + ludicolo: {learnset: { + absorb: ["3L1"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["5S0"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "5S0", "5S1", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["5S0"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "5S0", "5S1", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["6T"], + megadrain: ["7L1", "6L1", "5L1", "4L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "7L1", "6M", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M", "5S1"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "5S1", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + seedot: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + beatup: ["7E", "6E", "5E"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + bodyslam: ["3T"], + bulletseed: ["7E", "6E", "5E", "5D", "4M", "3M", "3S1"], + captivate: ["4M"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + defog: ["7E", "6E", "5E"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7L33", "6M", "6L33", "5M", "5L43", "4M", "4L43", "3T", "3L43"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["7E", "6T", "6E", "5T", "5E", "5D"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M", "3S1"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7E", "6E"], + growth: ["7L9", "6L7", "5L7", "5D", "4L7", "3L7", "3S0"], + harden: ["7L3", "6L3", "5L3", "4L3", "3L3", "3S0"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + leechseed: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + naturepower: ["7M", "7L15", "6M", "6L13", "5L13", "4L13", "3L13"], + powerswap: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], + refresh: ["3S1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M", "3S1"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "7L27", "6M", "6L27", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L21"], + takedown: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + nuzleaf: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + extrasensory: ["7L36", "6L36", "5L49", "4L49", "3L49"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L12", "6L12", "5L19", "4L19", "3L19"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L24", "6L24", "5L31", "4L31", "3L31"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L6", "6L6", "5L7", "4L7", "3L7"], + harden: ["7L3", "6L3", "5L3", "4L3", "3L3"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leafblade: ["7L28", "6L28"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "7L16", "6M", "6L9", "5L13", "4L13", "3L13"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + razorleaf: ["7L1", "6L1", "5L1", "4L1"], + razorwind: ["7L20", "6L20", "5L37", "4L37", "3L37"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L32", "6M", "6L32", "5M", "5L43", "4M", "4L43", "3T", "3L43"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "7L9", "6M", "6L16", "5M", "5L25", "4M", "4L25", "3M", "3L25"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + worryseed: ["6T", "5T", "4T"], + }}, + shiftry: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + defog: ["4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L1", "6L1", "5L1", "4L1"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["3L1"], + harden: ["3L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L32", "6L32"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + leafstorm: ["7L44", "6L44", "5L49", "4L49"], + leaftornado: ["7L20", "6L19", "5L19"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + naturepower: ["7M", "6M", "3L1"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + razorleaf: ["7L1", "6L1", "5L1", "4L1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + silverwind: ["4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + whirlwind: ["7L1", "6L1", "5L1", "4L1"], + worryseed: ["6T", "5T", "4T"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + taillow: {learnset: { + aerialace: ["7M", "7L21", "6M", "6L21", "5M", "5L34", "4M", "4L34", "3M", "3L34"], + agility: ["7L29", "6L29", "5L43", "4L43", "3L43"], + aircutter: ["4T"], + airslash: ["7L33", "6L33", "5L53", "4L53"], + attract: ["7M", "6M", "5M", "4M", "3M"], + boomburst: ["7E", "6E"], + bravebird: ["7L41", "7E", "6L41", "6E", "5E", "5D", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defog: ["7E", "6E", "5E", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L17", "6M", "6L17", "5M", "5L19", "4M", "4L19", "3M", "3L19"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L37", "6T", "6L26", "5T", "5L26", "4T", "4L26", "3L26"], + endure: ["5D", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + featherdance: ["3S0"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L5", "6L4", "5L4", "4L4", "3L4", "3S0"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7E"], + mimic: ["3T"], + mirrormove: ["7E", "6E", "5E", "5D", "4E", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + quickattack: ["7L9", "6L7", "5L8", "4L8", "3L8"], + quickguard: ["7L25", "6L25"], + rage: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L45"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["7E", "6T", "6E", "5E", "4E", "3T", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "5D", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7E", "6E", "5E", "4E"], + wingattack: ["7L13", "6L13", "5L13", "4L13", "3L13"], + workup: ["7M", "5M"], + }}, + swellow: {learnset: { + aerialace: ["7M", "7L21", "6M", "6L21", "5M", "5L38", "4M", "4L38", "3M", "3L38"], + agility: ["7L33", "6L33", "5L49", "4L49", "3L49", "3S0"], + aircutter: ["4T"], + airslash: ["7L39", "7L1", "6L1", "5L61", "4L61"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["3S0"], + bravebird: ["7L51", "7L1", "6L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L17", "6M", "6L17", "5M", "5L19", "4M", "4L19", "3M", "3L19"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L45", "6T", "6L28", "5T", "5L28", "4T", "4L28", "3L28"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M", "3S0"], + fly: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + quickguard: ["7L27", "6L27"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L57"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skyattack: ["6T", "5T", "4T", "3T", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + wingattack: ["7L13", "6L13", "5L13", "4L13", "3L13"], + workup: ["7M", "5M"], + }}, + wingull: {learnset: { + aerialace: ["7M", "7L29", "6M", "6L29", "5M", "5L42", "4M", "4L42", "3M"], + agility: ["7L36", "7E", "6L36", "6E", "5L37", "5E", "4L37", "4E", "3L55", "3E"], + aircutter: ["7L22", "6L22", "5L33", "4T"], + airslash: ["7L40", "6L40", "5L47", "4L47"], + aquaring: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gust: ["7E", "6E", "5E", "4E", "3E"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L43", "6L43", "5L50"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + mimic: ["3T"], + mist: ["7L12", "7E", "6L12", "6E", "5L16", "5E", "4L16", "4E", "3L21", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L26", "6L26", "5L34", "4L34", "3L43"], + quickattack: ["7L19", "6L19", "5L24", "4L24", "3L31"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7E", "7L33", "6M", "6L26", "6E", "5T", "5L29", "5E", "4M", "4L29"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "5D", "4M", "3M"], + skyattack: ["6T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7E", "6E"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7L5", "6L5", "5L6", "4L6", "3L7"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["7E", "6E", "5E", "5D", "4T", "4E", "3E"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + waterpulse: ["7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + wideguard: ["7E", "6E"], + wingattack: ["7L8", "6L8", "5L11", "4L11", "3L13"], + }}, + pelipper: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L22", "6L28", "5L34", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L28", "6M", "6L39", "5M", "5L43", "4M", "4L43"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + gunkshot: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L55", "7L1", "6L1", "5L63"], + hydropump: ["7L50", "7L1", "6L1", "5L57", "4L57", "3L61"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["6T", "5T", "4T"], + mimic: ["3T"], + mist: ["7L12", "6L12", "5L16", "4L16", "3L21"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "7L19", "6M", "6L19", "5M", "5L24", "4M", "4L24"], + pluck: ["5M", "4M"], + protect: ["7M", "7L1", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7L39", "6M", "6L22", "5T", "5L31", "4M", "4L31"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + shockwave: ["6T", "4M", "3M"], + skyattack: ["6T", "5T", "4T", "3T"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L1", "6L1", "5L1"], + spitup: ["7L33", "6L33", "5L38", "4L38", "3L47"], + steelwing: ["7M", "6M", "4M", "3M"], + stockpile: ["7L33", "6L33", "5L38", "4L38", "3L33"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7L5", "6L5", "5L6", "4L6", "3L7"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L33", "6L33", "5L38", "4L38", "3L33"], + swift: ["4T", "3T"], + tailwind: ["7L44", "7L1", "6T", "6L1", "5T", "5L50", "4T", "4L50"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7L15", "6T", "6L15", "5L19", "4M", "4L19", "3M"], + watersport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + wingattack: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + ralts: {learnset: { + allyswitch: ["7E", "6E", "5M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "7L24", "6M", "6L24", "5M", "5L28", "4M", "4L23", "3M", "3L21"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L34", "6L34", "5L43", "4L39", "3S1"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E"], + confusion: ["7L4", "6L4", "5L6", "5D", "4L6", "3L6", "3S2"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + destinybond: ["7E", "6E", "5E", "5D", "4E", "3E"], + disable: ["7E", "6E", "5E", "4E", "3E"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L6", "6M", "6L6", "5M", "5L10", "4M", "4L10", "3M", "3L11"], + drainingkiss: ["7L22", "6L22"], + dreameater: ["7M", "7L39", "6M", "6L39", "5M", "5L50", "4M", "4L45", "3T", "3L46"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7E", "6E", "6S0", "5E", "4E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L32", "6L32", "5L39", "4L34", "3L36"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "6S0", "5L1", "4L1", "3L1", "3S0", "3S1"], + grudge: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + healpulse: ["7L19", "6L19", "5L23"], + helpinghand: ["6T", "5T", "5D", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L37", "6L37", "5L45", "4L43", "3L41"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + imprison: ["7L29", "6L29", "5L34", "4L32", "3L31"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L14", "6L14", "5L17", "4L17"], + magicalleaf: ["7L17", "6L17", "5L21", "4L21"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meanlook: ["7E", "6E", "5E", "4E", "3E"], + memento: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + mistyterrain: ["7E", "6E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L27", "6M", "6L27", "5M", "5L32", "4M", "4L28", "3M", "3L26"], + 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", "3S2"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowsneak: ["7E", "6E", "5E", "4E"], + shockwave: ["6T", "4M", "3M", "3S2"], + signalbeam: ["6T", "5T", "4T"], + sing: ["3S2"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + storedpower: ["7L42", "6L42", "5L54"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T"], + synchronoise: ["7E", "6E", "5E"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7L9", "6L9", "5L12", "4L12", "3L16"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M", "4E", "3E"], + wish: ["3S0"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + kirlia: {learnset: { + allyswitch: ["5M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "7L26", "6M", "6L26", "5M", "5L31", "4M", "4L25", "3M", "3L21"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L40", "6L40", "5L50", "4L45"], + confide: ["7M", "6M"], + confusion: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + drainingkiss: ["7L23", "6L23"], + dreameater: ["7M", "7L47", "6M", "6L47", "5M", "5L59", "4M", "4L53", "3T", "3L54"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L37", "6L37", "5L45", "4L39", "3L40"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healpulse: ["7L19", "6L19", "5L25"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L44", "6L44", "5L53", "4L50", "3L47"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + imprison: ["7L33", "6L33", "5L39", "4L36", "3L33"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7L14", "6L14", "5L17", "4L17"], + magicalleaf: ["7L17", "6L17", "5L22", "4L22", "3L1"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L30", "6M", "6L30", "5M", "5L36", "4M", "4L31", "3M", "3L26"], + 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"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + storedpower: ["7L51", "6L51", "5L64"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + gardevoir: {learnset: { + allyswitch: ["5M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "7L26", "6M", "6L26", "6S1", "5M", "5L33", "4M", "4L25", "3M", "3L21"], + captivate: ["7L44", "6L44", "5L60", "4M", "4L53"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + dazzlinggleam: ["7M", "6M", "6S1"], + defensecurl: ["3T"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + drainingkiss: ["7L23", "6L23"], + dreameater: ["7M", "7L53", "6M", "6L53", "5M", "5L73", "4M", "4L65", "3T", "3L60"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "5S0", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L40", "6L40", "5L53", "4L45", "3L42"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healingwish: ["7L1", "6L1", "5L1", "4L1"], + healpulse: ["7L19", "6L19", "5L25"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L49", "6L49", "5L65", "5S0", "4L60", "3L51"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + imprison: ["7L35", "6L35", "5L45", "4L40", "3L33"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magicalleaf: ["7L17", "6L17", "5L22", "4L22"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mimic: ["3T"], + mistyterrain: ["7L1", "6L1"], + moonblast: ["7L62", "7L1", "6L1", "6S1"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L31", "6M", "6L31", "5M", "5L40", "5S0", "4M", "4L33", "3M", "3L26"], + 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"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + storedpower: ["7L58", "7L1", "6L1", "6S1", "5L80"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + teleport: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "5S0", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M"], + wish: ["7L14", "6L14", "5L17", "4L17"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + gallade: {learnset: { + aerialace: ["7M", "7L17", "6M", "5M", "4M"], + allyswitch: ["5M"], + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + closecombat: ["7L53", "7L1", "6L1", "5L59", "4L53"], + confide: ["7M", "6M"], + confusion: ["7L4", "7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "7L44", "6M", "6L44", "5M", "5L50", "4M", "4L45"], + feint: ["7L40", "6L40", "5L45", "4L39"], + firepunch: ["6T", "5T", "4T"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L14", "6L14", "5L17", "4T", "4L17"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healpulse: ["7L19", "6L19", "5L25"], + helpinghand: ["7L35", "6T", "6L35", "5T", "5L39", "4T", "4L36"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icepunch: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + leafblade: ["7L1", "6L1", "5L1", "4L1"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L1", "6L1", "5L1", "4L1"], + painsplit: ["6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L49", "6M", "6L49", "5M", "5L53", "4M", "4L50"], + psychic: ["7M", "6M", "5M", "4M"], + psychocut: ["7L31", "6L31", "5L36", "4L31"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + quickguard: ["7L11", "6L11"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + slash: ["7L1", "6L17", "5L22", "4L22"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "4M"], + storedpower: ["7L58", "7L1", "6L1", "5L64"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L26", "6M", "6L26", "5M", "5L31", "4M", "4L25"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + teleport: ["7L9", "7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + wideguard: ["7L23", "6L23"], + willowisp: ["7M", "6M", "5M"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + surskit: {learnset: { + agility: ["7L22", "6L22", "5L31", "4L31", "3L31"], + aquajet: ["7L30", "7E", "6L30", "6E", "5E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L35", "6L35", "5L43", "4L43"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0", "3S1"], + bubblebeam: ["7L17", "6L17", "5L25", "4L25", "3L25"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fellstinger: ["7E", "6E"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "5D", "4M", "3M"], + haze: ["7L25", "6L25", "5L37", "4L37", "3L37"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7E", "6E", "5E", "5D", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + lunge: ["7E"], + mimic: ["3T"], + mindreader: ["7E", "6E", "5E", "4E", "3E"], + mist: ["7L25", "6L25", "5L37", "4L37", "3L37"], + mudshot: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T"], + mudsport: ["3S0"], + naturalgift: ["4M"], + powersplit: ["7E", "6E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7E", "6E", "5E", "4E", "3E"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L6", "6L6", "5L7", "4L7", "3L7", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stickyweb: ["7L38", "6L38"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L9", "6L9", "5L13", "4L13", "3L13"], + swift: ["4T", "3T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L14", "6L14", "5L19", "4L19", "3L19"], + }}, + masquerain: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["7L22", "6L22", "4T"], + airslash: ["7L38", "6L38", "5L47", "4L47"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L42", "7L1", "6L1", "5L61", "4L61"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L17", "6L17", "5L22", "4L22", "3L26"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["3C"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + mimic: ["3T"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightmare: ["3T"], + ominouswind: ["7L1", "6L1", "5L1", "4T", "4L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + quiverdance: ["7L52", "7L1", "6L1", "5L68"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L22", "6L22", "5L26", "4L26", "3L33"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["7L32", "6L32", "5L40", "4M", "4L40", "3L47"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + stunspore: ["7L26", "6L26", "5L33", "4L33", "3L40"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L1"], + whirlwind: ["7L48", "7L1", "6L1", "5L54", "4L54", "3L53"], + }}, + shroomish: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bulletseed: ["7E", "6E", "5E", "5D", "4M", "3M"], + captivate: ["4M"], + charm: ["7E", "6E", "5E", "4E", "3E"], + confide: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7E", "6T", "6E", "5T", "5E"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E", "4E", "3E"], + falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + focuspunch: ["7E", "6T", "6E", "5E", "5D"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["7L26", "6T", "6L26", "5T", "5L37", "4M", "4L37", "3M", "3L45"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L29", "6L29", "5L33", "4L33", "3L36"], + headbutt: ["7L15", "6L15", "5L21", "4T", "4L21", "3L22"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + leechseed: ["7L8", "6L8", "5L13", "4L13", "3L10"], + megadrain: ["7L12", "6L12", "5L17", "4L17", "3L16", "3S0"], + mimic: ["3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + poisonpowder: ["7L19", "6L19", "5L25", "4L25", "3L28"], + protect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7L36", "7E", "6T", "6L36", "6E", "5T", "5L41", "5E", "4T", "4L41", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spore: ["7L40", "6L40", "5L45", "4L45", "3L54"], + stunspore: ["7L5", "6L5", "5L9", "5D", "4L9", "3L7", "3S0"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L5", "4L5", "3L4"], + toxic: ["7M", "7L33", "6M", "6L33", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + wakeupslap: ["7E", "6E", "5E", "4E"], + worryseed: ["7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], + }}, + breloom: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7L22", "6L22", "5L25", "4L25", "3T", "3L28"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["7L50", "6L45", "5L45", "4L45", "3T", "3L54"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M"], + feint: ["7L19", "6L19"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + forcepalm: ["7L28", "6L28", "5L29", "4L29"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["7L15", "6L15", "5L21", "4T", "4L21", "3L22"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + leechseed: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L1", "6L23", "5L23", "4L23", "3L23"], + megadrain: ["7L12", "6L12", "5L17", "4L17", "3L16"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mindreader: ["7L33", "6L33", "5L37", "4L37", "3L45"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7L44", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + seismictoss: ["3T"], + skyuppercut: ["7L39", "6L33", "5L33", "4L33", "3L36"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stunspore: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + venoshock: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + slakoth: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["7E", "6T", "6E", "5T", "5E"], + amnesia: ["7L17", "6L17", "5L25", "4L25", "3L25"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chipaway: ["7L25", "6L25", "5L37"], + confide: ["7M", "6M"], + counter: ["7L30", "6L30", "5L43", "4L37", "3T", "3L37"], + covet: ["7L22", "6T", "6L22", "5T", "5L31", "4L31", "3L31"], + crushclaw: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + encore: ["7L6", "6L6", "5L7", "4L7", "3L7"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L14", "6L14", "5L19", "4L19", "3L19"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flail: ["7L33", "6L33", "5L49", "4L43", "3L43"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gunkshot: ["6T", "5T", "4T"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "5D", "4E"], + playrough: ["7L38", "6L38"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slackoff: ["7L9", "6L9", "5L13", "4L13", "3L13"], + slash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["5D", "4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + yawn: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + }}, + vigoroth: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L27", "6L27", "5L43"], + confide: ["7M", "6M"], + counter: ["7L33", "6L33", "5L37", "4L37", "3T", "3L37"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["7L17", "6L17", "5L25", "4M", "4L25", "3T", "3L25"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7L37", "6T", "6L37", "5L49", "4M", "4L43", "3M", "3L43"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L14", "6L14", "5L19", "4L19", "3L19"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L43", "7L1", "6L1", "5L55", "4L49", "3L49"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slash: ["7L23", "6L23", "5L31", "4L31", "3L31"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + }}, + slaking: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "4S0", "3M"], + afteryou: ["6T", "5T"], + amnesia: ["7L17", "6L17", "5L25", "4L25", "3L25"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L27", "6L27", "5L37"], + confide: ["7M", "6M"], + counter: ["7L33", "6L33", "5L43", "4L37", "3T", "3L37"], + covet: ["7L23", "6T", "6L23", "5T", "5L31", "4L31", "3L31"], + cut: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + encore: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L14", "6L14", "5L19", "4L19", "3L19"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flail: ["7L39", "6L39", "5L49", "4L43", "3L43"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "7L47", "7L1", "6M", "6L1", "5M", "5L55", "4M", "4L49"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M", "4S0"], + gunkshot: ["6T", "5T", "4T"], + hammerarm: ["7L61", "7L1", "6L1", "5L67", "4L61"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + punishment: ["7L53", "7L1", "6L1", "5L61", "4L55"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "4S0", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M", "4S0"], + shockwave: ["6T", "4M", "3M"], + slackoff: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3T", "3L36"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + yawn: ["7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + nincada: {learnset: { + absorb: ["7L5"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L29", "6L29"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + bugbuzz: ["7E", "6E", "5E", "4E"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["7L37", "6M", "6L37", "5M", "5L45", "4M", "4L45", "3M", "3L45"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "5D", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L33", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3L25"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + finalgambit: ["7E", "6E", "5E"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], + gigadrain: ["6T", "5T", "4M", "3M"], + gust: ["7E", "6E", "5E", "4E", "3E"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + leechlife: ["7M", "6L5", "5L5", "5D", "4L5", "3L5"], + metalclaw: ["7L21", "6L21", "5L38", "4L38", "3L38"], + mimic: ["3T"], + mindreader: ["7L25", "6L19", "5L19", "4L19", "3L19"], + mudslap: ["7L17", "6L17", "5L31", "4T", "4L31", "3T", "3L31"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "5D", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L9", "6L9", "5L9", "4L9", "3L9"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + silverwind: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + ninjask: {learnset: { + absorb: ["7L5", "7L1"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L17", "6L17", "5L38", "4L38", "3L38"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L35", "6L35", "5L45", "4L45", "3L45"], + bugbite: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L1", "6M", "6L20", "5M", "5L20", "4M", "4L20", "3M", "3L20"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L1", "6L20", "5L20", "4T", "4L20", "3T", "3L20"], + furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leechlife: ["7M", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mindreader: ["7L29", "6L19", "5L19", "4L19", "3L19"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L1", "6L20", "5L20", "4L20", "3L20"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + silverwind: ["4M"], + slash: ["7L23", "6L23", "5L31", "4L31", "3L31"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L41", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L25"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + xscissor: ["7M", "7L47", "6M", "6L47", "5M", "5L52", "4M", "4L52"], + }}, + shedinja: {learnset: { + absorb: ["7L5", "7L1"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["3S4"], + batonpass: ["3S5"], + bugbite: ["6T", "5T", "4T"], + confide: ["7M", "6M"], + confuseray: ["7L29", "6L29", "5L31", "4L31", "3L31", "3S0"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M", "3S1"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T", "3S1"], + furyswipes: ["7L13", "6L13", "5L14", "4L14", "3L14"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grudge: ["7L37", "6L37", "5L45", "4L45", "3L45", "3S0"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + healblock: ["7L41", "6L41", "5L52", "4L52"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leechlife: ["7M", "6L5", "5L5", "4L5", "3L5"], + mimic: ["3T"], + mindreader: ["7L25", "6L19", "5L19", "4L19", "3L19"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + phantomforce: ["7L45", "6L45"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L9", "7L1", "6L9", "5L9", "4L9", "3L9"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["3S1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7L33", "6M", "6L33", "5M", "5L59", "4M", "4L59", "3M", "3L38", "3S0"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowsneak: ["7L21", "6L21", "5L38", "4L38"], + slash: ["3S3"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["7L17", "6T", "6L17", "5T", "5L25", "4T", "4L25", "3L25", "3S0"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["3S2"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + xscissor: ["7M", "6M", "5M", "4M", "4S6"], + }}, + whismur: {learnset: { + astonish: ["7L8", "6L8", "5L11", "4L11", "3L11"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + captivate: ["4M"], + circlethrow: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + disarmingvoice: ["7E", "6E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "7L4", "6M", "6L4", "5M"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "5D", "4E"], + endure: ["4M", "3T"], + extrasensory: ["7E", "6E", "5E", "4E", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L11", "6L11", "5L15", "4L15", "3L15"], + hypervoice: ["7L39", "6T", "6L39", "5T", "5L51", "4L45", "3L45"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L32", "6M", "6L32", "5M", "5L45", "4M", "4L41", "3M", "3L41"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L29", "6M", "6L29", "5M", "5L35", "4M", "4L35", "3M", "3L35"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + screech: ["7L15", "6L15", "5L31", "4L31", "3L31"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "7L36", "6M", "6L36", "5T", "5L45", "4M", "4L41", "3T", "3L41"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + smokescreen: ["7E", "6E", "5E", "4E"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L22", "6L22", "5L25", "4L25", "3L25"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L18", "6L18", "5L21", "4L21", "3L21"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + synchronoise: ["7L43", "6L41", "5L41"], + takedown: ["7E", "6E", "5E", "4E", "3E"], + teeterdance: ["3S0"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7L25", "6T", "6L5", "5T", "5L5", "5D", "4T", "4L5", "3L5", "3S0"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "5D", "4T"], + }}, + loudred: {learnset: { + astonish: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L1", "6L20", "5L20", "4L20"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "7L4", "7L1", "6M", "6L1", "5M"], + endeavor: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], + hypervoice: ["7L45", "6T", "6L45", "5T", "5L65", "4L57", "3L57"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L36", "6M", "6L36", "5M", "5L57", "4M", "4L51", "3M", "3L51"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L32", "6M", "6L32", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + screech: ["7L15", "6L15", "5L37", "4L37", "3L37"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "7L41", "6M", "6L41", "5T", "5L57", "4M", "4L51", "3T", "3L51"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L23", "6L23", "5L29", "4L29", "3L29"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L18", "6L18", "5L23", "4L23", "3L23"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + synchronoise: ["7L50", "6L50", "5L51"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7L27", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + exploud: {learnset: { + astonish: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L1", "6L20", "5L20", "4L20"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + boomburst: ["7L58", "7L1", "6L1"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L1", "6L40", "5L40", "4L40"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "7L4", "7L1", "6M", "6L1", "5M"], + endeavor: ["6T", "5T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L11", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "7L64", "6M", "6L64", "5M", "5L79", "4M", "4L71", "3M", "3L40", "3S1"], + hypervoice: ["7L47", "6T", "6L47", "5T", "5L71", "4L63", "3L63", "3S0"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L36", "6M", "6L36", "5M", "5L55", "4M", "4L55", "3M", "3L55", "3S0"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L32", "6M", "6L32", "5M", "5L45", "4M", "4L45", "3M", "3L45", "3S0", "3S1"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + screech: ["7L15", "6L15", "5L37", "4L37", "3L37", "3S1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "7L42", "6M", "6L42", "5T", "5L63", "4M", "4L55", "3T", "3L55", "3S0"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stomp: ["7L23", "6L23", "5L29", "4L29", "3L29", "3S1"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + supersonic: ["7L18", "6L18", "5L23", "4L23", "3L23"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + synchronoise: ["7L53", "6L53", "5L55"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7L27", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + makuhita: {learnset: { + armthrust: ["7L7", "6L7", "5L7", "5D", "4L7", "3L10", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7L25", "6L25", "5L25", "4L25", "3L37"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S0"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], + closecombat: ["7L40", "6L40", "5L40", "4L40"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + crosschop: ["7E", "6E", "5E", "4E", "3E"], + detect: ["7E", "6E", "5E", "4E", "3E"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7L37", "6L37", "5L37", "4M", "4L37", "3T", "3L40"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L10", "6L10", "5L13", "4L13", "3L19"], + feint: ["7E", "6E", "5E", "4E"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["7E", "6T", "6E", "5E", "4M", "3M"], + forcepalm: ["7L13", "6L13", "5L28", "4L28"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heavyslam: ["7L46", "6L46", "5L46"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "5D", "4T", "3T"], + knockoff: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19", "3L28"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7E", "6E", "5E", "4E", "3E"], + reversal: ["7L43", "6L43", "5L43", "4L43", "3L49"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M", "3S0"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L4", "6L4", "5L4", "4L4", "3L4"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7L31", "6L31", "5L31", "4L31", "3T", "3L46"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7L28", "6L22", "5L22", "4L22", "3L31"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + vitalthrow: ["7L22", "6L10", "5L10", "4L10", "3L13"], + wakeupslap: ["7L34", "7E", "6L34", "6E", "5L34", "5E", "4L34", "4E"], + whirlpool: ["4M"], + whirlwind: ["7L16", "6L16", "5L16", "4L16", "3L22"], + wideguard: ["7E", "6E", "5E"], + workup: ["7M", "5M"], + }}, + hariyama: {learnset: { + armthrust: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bellydrum: ["7L26", "6L26", "5L27", "4L27", "3L40"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L1", "6L1", "5L1", "4M", "4L1"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + closecombat: ["7L46", "6L46", "5L52", "4L52"], + confide: ["7M", "6M"], + counter: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7L42", "6L42", "5L47", "4M", "4L47", "3T", "3L44"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L10", "6L10", "5L13", "4L13", "3L19"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1", "3L1"], + focuspunch: ["6T", "4M", "3M"], + forcepalm: ["7L13", "6L13", "5L32", "4L32"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heavyslam: ["7L54", "6L54", "5L62"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + knockoff: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19", "3L29"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L50", "6L50", "5L57", "4L57", "3L55"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7L34", "6L34", "5L37", "4L37", "3T", "3L51"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7L30", "6L22", "5L22", "4L22", "3L33"], + snore: ["6T", "5T", "4T", "3T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vacuumwave: ["4T"], + vitalthrow: ["7L22", "6L10", "5L10", "4L10", "3L13"], + wakeupslap: ["7L38", "6L38", "5L42", "4L42"], + whirlpool: ["4M"], + whirlwind: ["7L16", "6L16", "5L16", "4L16", "3L22"], + workup: ["7M", "5M"], + }}, + nosepass: {learnset: { + ancientpower: ["5D", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + block: ["7L7", "7E", "6T", "6L7", "6E", "5T", "5L19", "5E", "4T", "4L19", "4E", "3L16"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + discharge: ["7L31", "6L31", "5L55", "4L49"], + doubleedge: ["7E", "6E", "5E", "4E", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthpower: ["7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gravity: ["6T", "5T", "4T"], + harden: ["7L4", "6L4", "5L7", "4L7", "3L7"], + headbutt: ["4T"], + helpinghand: ["3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + lockon: ["7L43", "6L43", "5L73", "4L67", "3L46"], + magiccoat: ["6T", "5T", "4T"], + magnetrise: ["6T", "5T", "4T"], + magnitude: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + powergem: ["7L25", "6L25", "5L49", "4L49"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43", "3M", "3L37"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L28", "6L18", "5L18"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31", "3T", "3L28", "3S0"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L10", "6L10", "5L13", "4L13", "3L13"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37", "3M", "3L31"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L19", "6L19", "5L25"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "5D", "4M"], + stoneedge: ["7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M", "3S0"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25", "3T", "3L22", "3S0"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + voltswitch: ["7M", "6M", "5M"], + wideguard: ["7E", "6E"], + zapcannon: ["7L43", "6L43", "5L67", "4L61", "3L43"], + }}, + probopass: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + block: ["7L7", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + discharge: ["7L31", "6L31", "5L55", "4L49"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7L37", "6T", "6L37", "5T", "5L79", "4T", "4L73"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + irondefense: ["7L4", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + ironhead: ["6T", "5T", "4T"], + lockon: ["7L43", "6L43", "5L73", "4L67"], + magiccoat: ["6T", "5T", "4T"], + magnetbomb: ["7L10", "7L1", "6L1", "5L1", "4L1"], + magneticflux: ["7L1"], + magnetrise: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + powergem: ["7L25", "6L25", "5L49", "4L49"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L16", "6M", "6L16", "5M", "5L43", "4M", "4L43"], + return: ["7M", "6M", "5M", "4M"], + rockblast: ["7L28", "6L18", "5L18"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L22", "6M", "6L22", "5M", "5L31", "4M", "4L31"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L34", "6M", "6L34", "5M", "5L37", "4M", "4L37"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + spark: ["7L19", "6L19", "5L25"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "7L40", "6M", "6L40", "5M", "5L61", "4M", "4L55"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + taunt: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "7L13", "6M", "6L13", "5M", "5L25", "4M", "4L25"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + triattack: ["7L1"], + voltswitch: ["7M", "6M", "5M"], + wideguard: ["7L1", "6L1"], + zapcannon: ["7L43", "6L43", "5L67", "4L61"], + }}, + skitty: {learnset: { + assist: ["7L31", "6L22", "5L22", "4L18", "3L19"], + attract: ["7M", "7L10", "6M", "6L8", "5M", "5L8", "4M", "4L4", "3M", "3L7", "3S2"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["7L43", "7E", "6L43", "6E", "5L46", "5E", "5D", "4M", "4L42"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L25", "6L25", "5L25", "4L22", "3L25"], + confide: ["7M", "6M"], + copycat: ["7L19", "6L18", "5L18", "4L11"], + cosmicpower: ["7E", "6E"], + covet: ["7L34", "6T", "6L34", "5T", "5L36", "4L32", "3L31"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disarmingvoice: ["7L13", "6L13"], + doubleedge: ["7L40", "6L40", "5L42", "4L39", "3T", "3L39"], + doubleslap: ["7L16", "6L15", "5L15", "4L15", "3L15"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + faketears: ["7E", "6E", "5E", "4E", "3E"], + feintattack: ["7L22", "6L22", "5L29", "4L25", "3L27"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7L4", "6L4", "5L4", "5D", "4L4"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2"], + headbutt: ["4T"], + healbell: ["7L37", "6T", "6L37", "5T", "5L39", "4T", "4L36", "3L37"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + mimic: ["3T"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + payday: ["3S0"], + playrough: ["7L46", "6L46"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T", "3S1"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + simplebeam: ["7E", "6E", "5E"], + sing: ["7L7", "6L7", "5L11", "4L8", "3L13"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + suckerpunch: ["7E", "6E", "5E", "4T", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1", "3S2"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L3", "3S0", "3S1", "3S2"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + tickle: ["7E", "6E", "5E", "5D", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + wakeupslap: ["7L28", "6L28", "5L32", "4L29"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + delcatty: {learnset: { + attract: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1", "3S0"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleslap: ["7L1", "6L1", "5L1", "4L1", "3L1"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L1", "6L1", "5L1", "4L1"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["3L1"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M", "3S0"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M", "3S0"], + sing: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["3S0"], + swift: ["4T", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T"], + waterpulse: ["6T", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + sableye: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + astonish: ["7L9", "6L9", "5L11", "4L11", "3L13"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "6S3", "5M", "4M", "3M"], + captivate: ["7E", "6E", "5E", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L31", "6L31", "5L46", "4L46", "3L37"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + detect: ["7L14", "6L14", "5L22", "4L22", "3L25"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7L21", "6L18", "5L18", "4L18", "3L21"], + feint: ["7E", "6E", "5E", "4E"], + feintattack: ["7L19", "6L19", "5L32", "4L32", "3L29", "3S1"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + flatter: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L4", "6L4", "5L4", "5D", "4L4", "3L5", "3S0"], + foulplay: ["7L41", "6T", "6L41", "5T", "5L50", "5S2"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L11", "6L11", "5L15", "4L15", "3L17"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["3S1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T"], + imprison: ["7E", "6E"], + incinerate: ["6M", "5M"], + knockoff: ["7L26", "6T", "6L26", "5T", "5L29", "4T", "4L29", "3L33"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + meanlook: ["7L46", "7E", "6L1", "6E", "5L60", "5E", "4L57", "3L45"], + megakick: ["3T"], + megapunch: ["3T"], + metalburst: ["7E", "6E", "5E"], + metronome: ["3T"], + mimic: ["3T"], + moonlight: ["7E", "6E", "5E", "4E", "3E"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L6", "6L6", "5L8", "4L8", "3L9", "3S0"], + octazooka: ["5S2"], + ominouswind: ["4T"], + painsplit: ["6T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + powergem: ["7L36", "6L36", "5L43", "4L43"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + punishment: ["7L24", "6L24", "5L36", "4L36"], + quash: ["7M", "7L44", "6M", "6L44"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7E", "6E", "6S3", "6S4", "5E", "4E", "3E", "3S1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "7L39", "6M", "6L39", "6S3", "5M", "5L57", "4M", "4L53", "3M", "3L41", "3S1"], + shadowclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L39", "4M", "4L39"], + shadowsneak: ["7L16", "6L16", "5L25", "4L25"], + shockwave: ["6T", "6S4", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "5D", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7E", "6E", "5E", "5D", "4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "6S4", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + tickle: ["5S2"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "5S2", "4T"], + waterpulse: ["6T", "4M", "3M"], + willowisp: ["7M", "6M", "6S3", "6S4", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["7L34", "6T", "6L1", "5T", "5L53", "4T", "4L50"], + }}, + mawile: {learnset: { + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L25", "6L25", "5L31", "4L31", "3L31"], + bite: ["7L9", "6L9", "5L11", "4L11", "3L11"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["7E", "6E", "5E", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crunch: ["7L29", "6L29", "5L36", "4L36", "3L36"], + darkpulse: ["7M", "6M", "5T", "4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fairywind: ["7L1", "6L1"], + faketears: ["7L5", "6L5", "5L6", "5D", "4L6", "3L6", "3S0"], + falseswipe: ["7M", "6M", "5M", "4E", "3E", "3S1"], + feintattack: ["7L21", "6L21", "5L26", "4L26", "3L26"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "6S2", "5E", "5D", "4E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1"], + guardswap: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7E", "6E", "5E", "4E"], + icepunch: ["6T", "5T", "5D", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["7L33", "6T", "6L33", "5T", "5L41", "4T", "4L41", "3L41", "3S1"], + ironhead: ["7L45", "7L1", "6T", "6L1", "6S2", "6S3", "5T", "5L56", "4T", "4L56"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalburst: ["7E", "6E", "5E"], + mimic: ["3T"], + mistyterrain: ["7E", "6E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L49", "7L1", "6L1", "6S2", "6S3"], + poisonfang: ["7E", "6E", "5E", "4E", "3E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "6S3", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4E", "3T", "3E"], + punishment: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "6E", "3T"], + shadowball: ["7M", "6M", "5M", "4M"], + sing: ["3S1"], + slam: ["7E", "6E", "5E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L41", "6L41", "5L51", "4L51", "3L46"], + stealthrock: ["6T", "5T"], + stockpile: ["7L41", "6L41", "5L51", "4L51", "3L46"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L37", "7E", "6L37", "6E", "6S2", "6S3", "5L46", "5E", "4T", "4L46", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L41", "6L41", "5L51", "4L51", "3L46"], + sweetscent: ["7L13", "6L13", "5L16", "4L16", "3L16"], + swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + taunt: ["7M", "7L1", "6M", "6L1", "5M", "4M", "3M"], + thunderfang: ["7E", "6E", "5E", "4E"], + thunderpunch: ["6T", "5T", "4T", "3T"], + tickle: ["7E", "6E", "5E", "4E", "3E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vicegrip: ["7L17", "6L17", "5L21", "4L21", "3L21", "3S1"], + }}, + aron: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L43", "6L39", "5L43"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L40", "6L40", "5L50", "4L43", "3T", "3L44"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonrush: ["7E", "6E", "5E", "4E"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + harden: ["7L1", "6L1", "5L4", "5D", "4L4", "3L4"], + headbutt: ["7L7", "6L7", "5L11", "4T", "4L11", "3L10"], + headsmash: ["7E", "6E", "5E", "5D", "4E"], + heavyslam: ["7L46", "6L43", "5L46"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + irondefense: ["7L37", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], + ironhead: ["7L22", "7E", "6T", "6L22", "6E", "5T", "5L29", "5E", "4T", "4L29", "4E"], + irontail: ["7L34", "6T", "6L34", "5T", "5L39", "4M", "4L39", "3M", "3L29"], + magnetrise: ["6T", "5T", "4T"], + metalburst: ["7L49", "6L49", "5L53", "4L46"], + metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], + metalsound: ["7L31", "6L31", "5L36", "4L36", "3L39"], + mimic: ["3T"], + mudslap: ["7L4", "6L4", "5L8", "4T", "4L8", "3T", "3L7"], + naturalgift: ["4M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L32", "4M", "4L32", "3M", "3L34"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7E", "6E"], + roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7E", "6T", "6E", "5T", "5E", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L22", "5L25", "4L25", "3L25"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + }}, + lairon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L47", "6L45", "5L51"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L43", "6L43", "5L62", "4L51", "3T", "3L53"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + heavyslam: ["7L51", "6L51", "5L56"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + irondefense: ["7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], + ironhead: ["7L22", "6T", "6L22", "5T", "5L29", "4T", "4L29"], + irontail: ["7L35", "6T", "6L35", "5T", "5L45", "4M", "4L45", "3M", "3L29"], + magnetrise: ["6T", "5T", "4T"], + metalburst: ["7L55", "6L55", "5L67", "4L56"], + metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], + metalsound: ["7L31", "6L31", "5L40", "4L40", "3L45"], + mimic: ["3T"], + mudslap: ["7L4", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + naturalgift: ["4M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L25", "6M", "6L25", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L22", "5L25", "4L25", "3L25"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + }}, + aggron: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + autotomize: ["7L51", "6L48", "5L57"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7L45", "6L45", "5L74", "4L57", "3T", "3L63", "3S0"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "6S2", "5M", "4M", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["7L7", "7L1", "6L1", "5L1", "4T", "4L1", "3L1"], + headsmash: ["6S2"], + heavyslam: ["7L57", "6L57", "5L65"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irondefense: ["7L39", "6T", "6L15", "5T", "5L18", "4T", "4L18", "3L17"], + ironhead: ["7L22", "6T", "6L22", "6S2", "5T", "5L29", "4T", "4L29"], + irontail: ["7L35", "6T", "6L35", "5T", "5L48", "4M", "4L48", "3M", "3L29", "3S0", "3S1"], + lowkick: ["6T", "5T", "4T"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalburst: ["7L63", "6L63", "5L82", "4L65"], + metalclaw: ["7L10", "6L10", "5L15", "4L15", "3L13"], + metalsound: ["7L31", "6L31", "5L40", "4L40", "3L50", "3S0", "3S1"], + mimic: ["3T"], + mudslap: ["7L4", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L34", "4M", "4L34", "3M", "3L37", "3S0", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L19", "6M", "6L18", "5M", "5L22", "4M", "4L22", "3M", "3L21"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L25", "6M", "6L25", "6S2", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L13", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L28", "6L22", "5L25", "4L25", "3L25", "3S1"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + meditite: {learnset: { + acupressure: ["7L33", "6L33", "5L39"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulletpunch: ["7E", "6E", "5E", "4E"], + calmmind: ["7M", "7L23", "6M", "6L23", "5M", "5L25", "4M", "4L25", "3M", "3L28"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L7", "6L7", "5L8", "4L8", "3L9", "3S0", "3S1"], + counter: ["7L44", "6L44", "3T"], + detect: ["7L9", "6L9", "5L11", "4L11", "3L12", "3S1"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["7E", "6T", "6E", "5T", "5E", "5D", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E", "3S1"], + endure: ["7L12", "6L12", "5D", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E", "3E"], + feint: ["7L15", "6L15", "5L22", "4L22"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + forcepalm: ["7L17", "6L17", "5L29", "4L29"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + guardswap: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7L20", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L17"], + highjumpkick: ["7L28", "6L28", "5L32", "4L32", "3L32"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + meditate: ["7L4", "6L4", "5L4", "5D", "4L4", "3L4", "3S0"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mindreader: ["7L25", "6L18", "5L18", "4L18", "3L22"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + powerswap: ["7E", "6E", "5E", "4E"], + powertrick: ["7L36", "6L36", "5L43", "4L39"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychocut: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L36", "3T", "3L36"], + psyshock: ["7M", "6M", "5M"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L41", "6L41", "5L50", "4L46", "3L44"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L39", "6L39", "5L46", "4L43", "3L41"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["7E", "6M", "6E", "5E", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M", "3S1"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T", "3L20"], + swift: ["4T", "3T"], + telekinesis: ["5M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + vacuumwave: ["4T"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + medicham: {learnset: { + acupressure: ["7L33", "6L33", "5L42"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "7L23", "6M", "6L23", "5M", "5L25", "4M", "4L25", "3M", "3L28"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + counter: ["7L53", "6L53", "3T"], + detect: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["7L12", "6L12", "4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L15", "6L15", "5L22", "4L22"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + forcepalm: ["7L17", "6L17", "5L29", "4L29"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7L20", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L17"], + highjumpkick: ["7L28", "6L28", "5L32", "4L32", "3L32"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + meditate: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mindreader: ["7L25", "6L18", "5L18", "4L18", "3L22"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + powertrick: ["7L36", "6L36", "5L49", "4L42"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "7L31", "6M", "6L31", "5M", "5L36", "4M", "4L36", "3T", "3L36"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L47", "6L47", "5L62", "4L55", "3L54"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + reversal: ["7L42", "6L42", "5L55", "4L49", "3L46"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T", "3L20"], + swift: ["4T", "3T"], + telekinesis: ["5M"], + thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + vacuumwave: ["4T"], + workup: ["7M", "5M"], + zenheadbutt: ["7L1", "6T", "6L1", "5T", "4T"], + }}, + electrike: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L24", "6L24", "5L28", "4L28", "3L33"], + bodyslam: ["3T"], + captivate: ["4M"], + charge: ["7L44", "6L44", "5L44", "4L44", "3L41"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + crunch: ["7E", "6E", "5E", "4E", "3E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + discharge: ["7L29", "7E", "6L29", "6E", "5L41", "5E", "4L41", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + eerieimpulse: ["7E", "6E"], + electroball: ["7E", "6E", "5E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + flameburst: ["7E", "6E", "5E"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L7", "6L7", "5L12", "4L12", "3L12"], + icefang: ["7E", "6E", "5E", "5D", "4E"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L4", "6L4", "5L9", "4L9", "3L9"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["7L16", "6L16", "5L25", "4L25", "3L25"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L10", "6L10", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L34", "6M", "6L34", "5M", "5L36", "4M", "4L36", "3M", "3L28"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["7E", "6T", "6E", "5E", "4M", "3M"], + signalbeam: ["6T", "5T", "5D", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L13", "6L13", "5L20", "4L20", "3L20"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], + switcheroo: ["7E", "6E", "5E", "4E"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L49", "6M", "6L49", "5M", "5L52", "4M", "4L49", "3M", "3L36"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderfang: ["7L19", "7E", "6L19", "6E", "5L33", "5E", "4L33", "4E"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L4", "5D", "4M", "4L4", "3T", "3L4"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L39", "6M", "6L39", "5M", "5L49"], + }}, + manectric: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L24", "6L24", "5L30", "4L30", "3L39", "3S0"], + bodyslam: ["3T"], + captivate: ["4M"], + charge: ["7L48", "6L48", "5L54", "4L54", "3L53"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + discharge: ["7L30", "6L30", "5L49", "4L49"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + electricterrain: ["7L60", "7L1", "6L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["7L16", "6L16", "5L25", "4L25", "3L25"], + overheat: ["7M", "6M", "6S1", "5M", "4M"], + protect: ["7M", "6M", "6S1", "5M", "4M", "3M"], + quickattack: ["7L10", "6L10", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M", "3S0"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "7L36", "6M", "6L36", "5M", "5L42", "4M", "4L42", "3M", "3L31"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L13", "6L13", "5L20", "4L20", "3L20"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "7L54", "6M", "6L54", "5M", "5L66", "4M", "4L61", "3M", "3L45", "3S0"], + thunderbolt: ["7M", "6M", "6S1", "5M", "4M", "3M"], + thunderfang: ["7L19", "6L19", "5L37", "4L37"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T"], + voltswitch: ["7M", "6M", "6S1", "5M"], + wildcharge: ["7M", "7L42", "6M", "6L42", "5M", "5L61"], + }}, + plusle: {learnset: { + agility: ["7L37", "6L37", "5L48", "4L44", "3L47"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L34", "6L34", "5L44", "4L42", "3L40"], + bestow: ["7L13", "6L13"], + bodyslam: ["3T"], + captivate: ["4M"], + charge: ["7L28", "6L28", "5L38", "4L35", "3L31"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L25", "7E", "6L25"], + confide: ["7M", "6M"], + copycat: ["7L22", "6L22", "5L24", "4L24"], + counter: ["3T"], + defensecurl: ["3T"], + discharge: ["7L31", "7E", "6L31", "6E", "5E", "5D", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L19", "6L19", "5L29"], + electroweb: ["6T"], + encore: ["7L10", "6L10", "5L17", "4L17", "3L22"], + endure: ["4M", "3T"], + entrainment: ["7L49", "6L1", "5L63"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6L35", "5L21", "4L21", "3L28"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + headbutt: ["4T"], + helpinghand: ["7L4", "6T", "6L4", "5T", "5L10", "4T", "4L10", "3L13"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["7L40", "6T", "6L40", "5T", "5L51", "4T", "4L48"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["3S0"], + nastyplot: ["7L46", "6L1", "5L56", "4L51"], + naturalgift: ["4M"], + nuzzle: ["7L1", "6L1"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "6L1", "5L7", "4L7", "3L10", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "5D", "4T"], + sing: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L7", "6L7", "5L15", "4L15", "3L19"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7E", "6E", "5E", "4E"], + swift: ["7L16", "6L16", "5L31", "4T", "4L29", "3T"], + thunder: ["7M", "7L43", "6M", "6L42", "5M", "5L42", "4M", "4L38", "3M", "3L37"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L3", "5D", "4M", "4L3", "3T", "3L4", "3S0", "3S1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + }}, + minun: {learnset: { + agility: ["7L37", "6L37", "5L48", "4L44", "3L47"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L34", "6L34", "5L44", "4L42", "3L40"], + bodyslam: ["3T"], + captivate: ["4M"], + charge: ["7L28", "6L28", "5L38", "4L35", "3L31"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7E", "6L21", "5L21", "4L21", "3L28"], + confide: ["7M", "6M"], + copycat: ["7L22", "6L22", "5L24", "4L24"], + counter: ["3T"], + defensecurl: ["3T"], + discharge: ["7L31", "7E", "6L31", "6E", "5E", "5D", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L19", "6L19", "5L29"], + electroweb: ["6T"], + encore: ["7L10", "6L10", "5L17", "4L17", "3L22"], + endure: ["4M", "3T"], + entrainment: ["7L49", "6L1", "5L63"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7L25", "7E", "6L25", "5L35", "4L31"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + headbutt: ["4T"], + helpinghand: ["7L4", "6T", "6L4", "5T", "5L10", "4T", "4L10", "3L13"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + irontail: ["6T", "5T", "4M", "3M"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magnetrise: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7L46", "6L1", "5L56", "4L51"], + naturalgift: ["4M"], + nuzzle: ["7L1", "6L1"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7L1", "6L1", "5L7", "4L7", "3L10", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "5D", "4T"], + sing: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spark: ["7L7", "6L7", "5L15", "4L15", "3L19"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7E", "6E", "5E", "4E"], + swift: ["7L16", "6L16", "5L31", "4T", "4L29", "3T"], + switcheroo: ["7L13", "6L13"], + thunder: ["7M", "7L43", "6M", "6L42", "5M", "5L42", "4M", "4L38", "3M", "3L37"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L3", "5D", "4M", "4L3", "3T", "3L4", "3S0", "3S1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trumpcard: ["7L40", "6L40", "5L51", "4L48"], + uproar: ["6T", "5T", "4T"], + voltswitch: ["7M", "6M", "5M"], + watersport: ["3S0"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + }}, + volbeat: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L40", "7E", "6L40", "6E", "5L41", "5E", "4L41", "4E"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L8", "6L8", "5L9", "4L9", "3L5"], + counter: ["3T"], + dazzlinggleam: ["7M", "6M"], + dizzypunch: ["7E", "6E", "5E"], + doubleedge: ["7L47", "6L45", "5L45", "4L45", "3T", "3L37"], + doubleteam: ["7M", "7L5", "6M", "6L5", "5M", "5L5", "4M", "4L5", "3M", "3L9"], + dynamicpunch: ["3T"], + encore: ["7E", "6E", "5E", "4E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["7L1", "6M", "6L1", "5M", "5L1", "5D", "4M", "4L1", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + helpinghand: ["7L36", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L33"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "7L50"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + moonlight: ["7L19", "6L13", "5L13", "4L13", "3L13"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + playrough: ["7L43", "6L43"], + poweruppunch: ["6M"], + protect: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L29"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L12", "6L12", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["7E", "6E", "5E", "3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["7L26", "6T", "6L25", "5T", "5L25", "4T", "4L25", "3L25"], + silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["7L15", "6M", "6L15", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailglow: ["7L22", "6L21", "5L21", "4L21", "3L21"], + tailwind: ["6T", "5T", "5D", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "5D", "4E", "3E"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + zenheadbutt: ["7L33", "6T", "6L33", "5T", "5L37", "4T", "4L37"], + }}, + illumise: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L40", "7E", "6L40", "6E", "5L41", "5E", "4L41", "4E"], + captivate: ["7E", "6E", "5E", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L9", "6L9", "5L9", "5D", "4L9", "3L9"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E"], + counter: ["3T"], + covet: ["7L47", "6T", "6L45", "5T", "5L45", "4L45", "3L37"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + encore: ["7L26", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E", "3L25"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E", "5D"], + flash: ["6M", "5M", "4M", "3M"], + flatter: ["7L29", "6L29", "5L29", "4L29", "3L29"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigadrain: ["6T", "5T", "4M", "3M"], + growth: ["7E", "6E", "5E", "4E", "3E"], + helpinghand: ["7L36", "6T", "6L33", "5T", "5L33", "4T", "4L33", "3L33"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "7L50"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + moonlight: ["7L19", "6L13", "5L13", "4L13", "3L13"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + playnice: ["7L1", "6L1"], + playrough: ["7L43", "6L43"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + quickattack: ["7L12", "6L12", "5L17", "4L17", "3L17"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + silverwind: ["7E", "6E", "5E", "4M", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["7L15", "6M", "6L15", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L5", "6L5", "5L5", "4L5", "3L5"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["6T", "5T", "5D", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + wish: ["7L22", "6L21", "5L21", "4L21", "3L21"], + zenheadbutt: ["7L33", "6T", "6L33", "5T", "5L37", "4T", "4L37"], + }}, + budew: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7E", "6E", "5E", "4E"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7E", "6E", "5E", "4E"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L4", "6L4", "5L4", "4L4"], + hiddenpower: ["7M", "6M", "5M", "4M"], + leafstorm: ["7E", "6E", "5E", "4E"], + megadrain: ["7L13", "6L13", "5L13", "4L13"], + mindreader: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + pinmissile: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeppowder: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spikes: ["7E", "6E", "5E", "4E"], + stunspore: ["7L10", "6L10", "5L10", "4L10"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + watersport: ["7L7", "6L7", "5L7", "4L7"], + worryseed: ["7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16"], + }}, + roselia: {learnset: { + absorb: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + aromatherapy: ["7L43", "6L43", "5L43", "4L43", "3L53"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bulletseed: ["7E", "6E", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7E", "6E", "5E", "4E", "3E"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["7L25", "7E", "6T", "6L25", "6E", "5T", "5L25", "5E", "4M", "4L25", "3M", "3L33"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L22", "7E", "6L22", "6E", "5L22", "5E", "4L22", "3L29", "3S1"], + growth: ["7L4", "6L4", "5L4", "5D", "4L4", "3L5", "3S0"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L34", "6L34", "5L34", "4L34", "3L41"], + leafstorm: ["7E", "6E", "5E", "4E"], + leechseed: ["7L16", "6L16", "5L16", "4L16", "3L21", "3S1"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19", "3L25", "3S1"], + megadrain: ["7L13", "6L13", "5L13", "4L13", "3L17"], + mimic: ["3T"], + mindreader: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "6M"], + nightmare: ["3T"], + petalblizzard: ["7L37", "6L37"], + petaldance: ["7L50", "6L37", "5L40", "4L40", "3L49"], + pinmissile: ["7E", "6E", "5E", "4E", "3E"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L7", "6L7", "5L7", "4L7", "3L9", "3S0"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sleeppowder: ["7E", "6E", "5E", "5D", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7E", "6E", "5E", "4E", "3E"], + stunspore: ["7L10", "6L10", "5L10", "4L10", "3L13"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["3S1"], + sweetscent: ["7L31", "6L31", "5L31", "4L31", "3L37"], + swift: ["5D", "4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L46", "7E", "6T", "6L46", "6E", "5T", "5L46", "5E", "4T", "4L46", "4E", "3L57", "3E"], + toxic: ["7M", "7L40", "6M", "6L40", "5M", "5L37", "4M", "4L37", "3M", "3L45"], + toxicspikes: ["7L28", "6L28", "5L28", "4L28"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + roserade: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grassyterrain: ["7L1", "6L1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + magicalleaf: ["7L1", "6L1", "5L1", "4L1"], + megadrain: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + sweetscent: ["7L1", "6L1", "5L1", "4L1"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + venomdrench: ["7L1", "6L1"], + venoshock: ["7M", "6M", "5M"], + weatherball: ["7L1", "6L1", "5L1", "4L1"], + worryseed: ["6T", "5T", "4T"], + }}, + gulpin: {learnset: { + acidarmor: ["7E", "6E", "5E", "5D", "4E", "3E"], + acidspray: ["7L17", "6L17", "5L34"], + amnesia: ["7L12", "6L12", "5L17", "4L17", "3L17"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L41", "6L40"], + bodyslam: ["3T"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7E", "6E", "5E", "4E"], + defensecurl: ["3T"], + destinybond: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + dynamicpunch: ["3T"], + encore: ["7L20", "6L20", "5L23", "4L23", "3L23"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L36", "6T", "6L36", "5T", "5L49", "4T", "4L44"], + gigadrain: ["6T", "5T", "5D", "4M", "3M"], + gunkshot: ["7L49", "7E", "6T", "6L49", "6E", "5T", "5L59", "5E", "4T", "4L54"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + mimic: ["3T"], + mudslap: ["7E", "6E", "5E", "4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + poisongas: ["7L8", "6L8", "5L9", "5D", "4L9", "3L9"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M", "3S0"], + sing: ["3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L10", "6L10", "5L14", "4L14", "3L14", "3S0"], + sludgebomb: ["7M", "7L33", "6M", "6L33", "5M", "5L44", "4M", "4L39", "3M", "3L39"], + sludgewave: ["7M", "6M", "5M"], + smog: ["7E", "6E", "5E", "4E", "3E"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L28", "6L28", "5L39", "4L34", "3L34"], + stockpile: ["7L28", "6L28", "5L39", "4L34", "3L34"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L28", "6L28", "5L39", "4L34", "3L34"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7L25", "6M", "6L25", "5M", "5L28", "4M", "4L28", "3M", "3L28", "3S0"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["6T", "4M", "3M"], + wringout: ["7L44", "6L44", "5L54", "4L49"], + yawn: ["7L5", "6L5", "5L6", "4L6", "3L6"], + }}, + swalot: {learnset: { + acidspray: ["7L17", "6L17", "5L38"], + amnesia: ["7L12", "6L12", "5L17", "4L17", "3L17"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L49", "6L46"], + block: ["6T", "5T", "4T"], + bodyslam: ["7L1", "6L26", "5L26", "4L26", "3T", "3L26"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M"], + encore: ["7L20", "6L20", "5L23", "4L23", "3L23"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L42", "6T", "6L42", "5T", "5L59", "4T", "4L52"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["7L61", "7L1", "6T", "6L1", "5T", "5L73", "4T", "4L66"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + painsplit: ["6T", "5T", "4T"], + poisongas: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + pound: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludge: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + sludgebomb: ["7M", "7L37", "6M", "6L37", "5M", "5L52", "4M", "4L45", "3M", "3L48"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L30", "6L30", "5L45", "4L38", "3L40"], + stockpile: ["7L30", "6L30", "5L45", "4L38", "3L40"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L30", "6L30", "5L45", "4L38", "3L40"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "7L25", "6M", "6L25", "5M", "5L30", "4M", "4L30", "3M", "3L31"], + venomdrench: ["7L1"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["6T", "4M", "3M"], + wringout: ["7L54", "7L1", "6L1", "5L66", "4L59"], + yawn: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + }}, + carvanha: {learnset: { + agility: ["7L39", "6L36", "5L36", "4L36", "3L43"], + ancientpower: ["7E", "6E", "5E", "4T", "4E"], + aquajet: ["7L11", "6L11", "5L31", "4L31"], + assurance: ["7L15", "6L15", "5L26", "4L26"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L1", "6L1", "6S1", "5L1", "5D", "4L1", "3L1", "3S0"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L36", "6L28", "5L28", "4L28", "3L22"], + darkpulse: ["7M", "6M", "5T", "5D", "4M"], + destinybond: ["7E", "6E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + focusenergy: ["7L8", "6L8", "5L8", "4L8", "3L13"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7E", "6E", "6S1", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L25", "6L16", "5L16", "4L16"], + icywind: ["6T", "5T", "4T", "3T"], + leer: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7L32", "6L32"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychicfangs: ["7E"], + rage: ["7L4", "6L4", "5L6", "4L6", "3L7"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L29", "6L11", "5L11", "4L11", "3L16", "3S0"], + screech: ["7L18", "6L18", "5L18", "4L18", "3L28"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L22", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3T", "3L37"], + swift: ["7E", "6E", "5E", "4T", "3T"], + takedown: ["7L43", "6L38", "5L38", "4L38", "3L31"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7E", "6E", "5E", "5D", "4E", "3E"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M", "3S0"], + whirlpool: ["4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + sharpedo: {learnset: { + agility: ["7L45", "6L45", "5L45", "4L45", "3L53"], + ancientpower: ["4T"], + aquajet: ["7L11", "6L11", "6S0", "5L34", "4L34"], + assurance: ["7L15", "6L15", "5L26", "4L26"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L1", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L40", "6L28", "6S0", "6S1", "5L28", "4L28", "3L22"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["6S0"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L1", "6L1", "5L1", "4L1"], + focusenergy: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L25", "6L16", "6S0", "5L16", "4L16"], + icywind: ["6T", "5T", "4T", "3T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7L62", "7L1", "6L1", "5L56", "4L56"], + payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7L34", "6L34", "6S1"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L29", "6L11", "6S1", "5L11", "4L11", "3L16"], + screech: ["7L18", "6L18", "5L18", "4L18", "3L28"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7L51", "6L50", "5L50", "4L50", "3L48"], + slash: ["7L1", "6L30", "6S1", "5L30", "4L30", "3L33"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L22", "6M", "6L21", "5M", "5L21", "4M", "4L21", "3T", "3L43"], + swift: ["4T", "3T"], + taunt: ["7M", "7L56", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L38"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + wailmer: {learnset: { + amnesia: ["7L37", "6L37", "5L37", "4L37", "3L46"], + aquaring: ["7E", "6E", "5E", "4E"], + astonish: ["7L16", "6L16", "5L17", "4L17", "3L23"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T"], + bounce: ["7L45", "6T", "6L44", "5T", "5L44", "5D", "4T", "4L44"], + brine: ["7L25", "6L25", "5L31", "4M", "4L31"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + clearsmog: ["7E", "6E"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["7E", "6E", "5E", "4E", "3T"], + dive: ["7L41", "6M", "6L33", "5M", "5L41", "4T", "4L41", "3M"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L4", "6L4", "5L4", "4L4", "3L5"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heavyslam: ["7L53", "6L50", "5L50"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L49", "6L47", "5L47", "4L47", "3L50"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + mimic: ["3T"], + mist: ["7L22", "6L22", "5L24", "4L24", "3L32"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L29", "6M", "6L27", "5M", "5L27", "4M", "4L27", "3M", "3L37"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "6L10", "5L11", "4T", "4L11", "3T", "3L14"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "4E", "3T", "3E"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T", "3E"], + soak: ["7E", "6E", "5E"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + thrash: ["7E", "6E", "5E", "4E", "3E"], + tickle: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "6L7", "5L7", "5D", "4L7", "3L10"], + waterpulse: ["7L19", "6T", "6L19", "5L21", "4M", "4L21", "3M", "3L28"], + waterspout: ["7L33", "6L34", "5L34", "4L34", "3L41"], + whirlpool: ["7L13", "6L13", "5L14", "4M", "4L14", "3L19"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + }}, + wailord: {learnset: { + amnesia: ["7L37", "6L37", "5L37", "4L37", "3L52", "3S0"], + astonish: ["7L16", "6L16", "5L17", "4L17", "3L23"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + bounce: ["7L51", "6T", "6L51", "5T", "5L54", "4T", "4L54"], + brine: ["7L25", "6L29", "5L31", "4M", "4L31"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + dive: ["7L44", "6M", "6L44", "5M", "5L46", "4T", "4L46", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + heavyslam: ["7L65", "7L1", "6L1", "5L70"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L58", "6L58", "5L62", "4L62", "3L59", "3S0"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + mimic: ["3T"], + mist: ["7L22", "6L22", "5L24", "4L24", "3L32", "3S1"], + naturalgift: ["4M"], + nobleroar: ["7L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L29", "6M", "6L25", "5M", "5L27", "4M", "4L27", "3M", "3L37", "3S0", "3S1"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L10", "7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L1"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7L19", "6T", "6L19", "5L21", "4M", "4L21", "3M", "3L28", "3S1"], + waterspout: ["7L33", "6L33", "5L34", "4L34", "3L44", "3S0", "3S1"], + whirlpool: ["7L13", "6L13", "5L14", "4M", "4L14", "3L19"], + zenheadbutt: ["6T", "5T"], + }}, + numel: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7L19", "6L19", "5L31", "4L25", "3L31"], + ancientpower: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["3S0"], + confide: ["7M", "6M"], + curse: ["7L29", "6L29", "5L29"], + defensecurl: ["7E", "6E", "5E", "4E", "3T", "3E"], + dig: ["6M", "5M", "4M", "3M", "3S0"], + doubleedge: ["7L47", "6L47", "5L55", "4L51", "3T", "3L49"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7L26", "6T", "6L26", "5T", "5L41", "4T", "4L35"], + earthquake: ["7M", "7L40", "6M", "6L40", "5M", "5L45", "4M", "4L41", "3M", "3L35"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L5", "6L5", "5L5", "5D", "4L5", "3L11", "3S0"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flameburst: ["7L15", "6L15", "5L21"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L43", "6M", "6L43", "5M", "5L51", "4M", "4L45", "3M", "3L41"], + focusenergy: ["7L8", "6L8", "5L15", "4L15", "3L25"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], + growth: ["7E", "6E"], + headbutt: ["4T"], + heatwave: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + howl: ["7E", "6E", "5E", "4E", "3E"], + incinerate: ["6M", "5M"], + ironhead: ["7E", "6T", "6E", "6S1", "5T", "5E"], + lavaplume: ["7L22", "6L22", "5L35", "4L31"], + magnitude: ["7L12", "6L8", "5L11", "4L11", "3L19"], + mimic: ["3T"], + mudbomb: ["7E", "6E", "5E", "4E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7E", "6E", "5E", "4T", "4E", "3T", "3E"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7E", "6E", "5E", "4E", "3E"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E"], + stealthrock: ["6T", "5T", "4M"], + stockpile: ["7E", "6E", "5E", "4E"], + stomp: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E"], + tackle: ["7L1", "6L1", "6S1", "5L1", "4L1", "3L1"], + takedown: ["7L31", "6L31", "5L25", "4L21", "3L29", "3S0"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L36", "7E", "6L36", "6E", "5L36", "5E", "4E"], + }}, + camerupt: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7L19", "6L19", "5L31", "4L25", "3L31"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7L29", "6L29", "6S0", "5L29"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7L26", "6T", "6L26", "5T", "5L49", "4T", "4L39"], + earthquake: ["7M", "7L46", "6M", "6L46", "5M", "5L57", "4M", "4L49", "3M", "3L37"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L8", "7L1", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + eruption: ["7L52", "7L1", "6L1", "5L67", "4L57", "3L45"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7L59", "7L1", "6L1", "5L75", "4L67", "3L55"], + flameburst: ["7L15", "6L15", "5L21"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L8", "7L1", "6L1", "5L15", "4L15", "3L25"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + lavaplume: ["7L22", "6L22", "5L33", "4L31"], + magnitude: ["7L12", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "7L1", "6M", "6L33", "6S0", "5M", "5L39", "4M", "4L33", "3T", "3L33"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L31", "6L31", "6S0", "5L25", "4L21", "3L29"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + yawn: ["7L39", "6L39", "6S0", "5L39"], + }}, + torkoal: {learnset: { + afteryou: ["6T", "5T"], + amnesia: ["7L40", "6L40", "5L49", "4L49", "3L40"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7L27", "6L27", "5L33", "4L33", "3T", "3L20"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + curse: ["7L22", "6L12", "5L12", "4L12", "3L7"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "4E"], + ember: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + endure: ["7E", "6E", "5E", "4M", "4E", "3T", "3E"], + eruption: ["7E", "6E", "5E", "4E", "3E"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firespin: ["7L13", "6L13", "5L17", "4L17", "3L17"], + fissure: ["7E", "6E", "5E", "5D", "4E"], + flail: ["7L42", "6L1", "5L52", "4L52", "3L43"], + flameburst: ["7E", "6E", "5E"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L34", "6M", "6L28", "5M", "5L28", "4M", "4L28", "3M", "3L30"], + flamewheel: ["7L18", "6L18"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["7L45", "6T", "6L1", "5T", "5L55", "4T", "4L55", "3L46"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + inferno: ["7L50", "6L1", "5L60"], + irondefense: ["7L38", "6T", "6L38", "5T", "5L44", "4T", "4L44", "3L33"], + irontail: ["6T", "5T", "4M", "3M"], + lavaplume: ["7L25", "6L25", "5L39", "4L39"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "7L30", "6M", "6L1", "5M", "5L36", "4M", "4L36", "3M", "3L27"], + rapidspin: ["7L10", "6L10", "5L23", "4L23"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shellsmash: ["7L47", "6L1", "5L65"], + skullbash: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "4E", "3T", "3E"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smog: ["7L4", "6L4", "5L4", "4L4", "3L4"], + smokescreen: ["7L15", "6L15", "5L20", "4L20", "3L14"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "5D", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7E", "6T", "6E"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + withdraw: ["7L7", "6L7", "5L7", "4L7"], + yawn: ["7E", "6E", "5E", "4E", "3E"], + }}, + spoink: {learnset: { + amnesia: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["7L50", "6T", "6L50", "5T", "5L53", "4T", "4L48", "3L43"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L18", "6L18", "5L18", "4L18", "3L25"], + covet: ["6T", "5T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + endure: ["7E", "6E", "5E", "4M", "3T"], + extrasensory: ["7E", "6E", "5E", "4E", "3E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E", "3E"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + luckychant: ["7E", "6E", "5E"], + magiccoat: ["7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L28"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + odorsleuth: ["7L10", "6L10", "5L10", "4L10", "3L10"], + payback: ["7M", "7L40", "6M", "6L40", "5M", "5L41", "4M", "4L34"], + powergem: ["7L29", "6L29", "5L48", "4L46"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L14", "6L14", "5L14", "4L14", "3L16"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L46", "4M", "4L41", "3M", "3L34"], + psychup: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], + psyshock: ["7M", "7L38", "6M", "6L38", "5M", "5L34"], + psywave: ["7L7", "6L7", "5L7", "5D", "4L7", "3L7"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "5D", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L37"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + simplebeam: ["7E", "6E"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["7L33", "6T", "6L29", "5T", "5L29", "4T", "4L29", "3T", "3L37"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["3S0"], + whirlwind: ["7E", "6E", "5E"], + zenheadbutt: ["7L26", "7E", "6T", "6L26", "6E", "5T", "5L26", "5E", "4T", "4L26", "4E"], + }}, + grumpig: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L1"], + bodyslam: ["3T"], + bounce: ["7L60", "6T", "6L60", "5T", "5L68", "4T", "4L60", "3L55"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L18", "6L18", "5L18", "4L18", "3L25"], + counter: ["3T"], + covet: ["6T", "5T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["7L21", "6T", "6L21", "5T", "5L21", "4T", "4L21", "3L28"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + odorsleuth: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + payback: ["7M", "7L46", "6M", "6L46", "5M", "5L47", "4M", "4L37"], + powergem: ["7L29", "6L29", "5L60", "4L55"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L14", "7L1", "6L1", "5L1", "4L1", "3L1"], + psychic: ["7M", "7L52", "6M", "6L52", "5M", "5L55", "4M", "4L47", "3M", "3L37"], + psychup: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3T", "3L19"], + psyshock: ["7M", "7L42", "6M", "6L42", "5M", "5L37"], + psywave: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L35", "6M", "6L29", "5M", "5L29", "4M", "4L29", "3M", "3L43"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["7L35", "6T", "6L29", "5T", "5L29", "4T", "4L29", "3T", "3L43"], + splash: ["7L1", "6L1", "5L1", "4L1", "3L1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + teeterdance: ["7L1", "6L32"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7L26", "6T", "6L26", "5T", "5L26", "4T", "4L26"], + }}, + spinda: {learnset: { + assist: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + copycat: ["7L5", "6L5", "5L10", "5D", "4L10"], + counter: ["3T"], + covet: ["6T", "5T"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dizzypunch: ["7L23", "6L23", "5L28", "4L28", "3L27"], + doubleedge: ["7L46", "6L46", "5L46", "4L46", "3T", "3L45"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + encore: ["7E", "6E", "5E", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "5D", "4E"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7L10", "6L10", "5L14", "4L14", "3L12"], + firepunch: ["6T", "5T", "4T", "3T"], + flail: ["7L50", "6L50", "5L50", "4L50", "3L49"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + guardsplit: ["7E", "6E"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L19", "6L19", "5L23", "4L23", "3L23"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["7E", "6T", "6E", "5T", "5E", "4T", "3T"], + lastresort: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L14", "6L14", "5L19", "4L19", "3L16"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychocut: ["7E", "6E", "5E", "4E"], + psychoshift: ["7E", "6E"], + psychup: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41", "3T", "3L38"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7E", "6E", "5E"], + recycle: ["6T", "5T", "4M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sing: ["3S0"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smellingsalts: ["7E", "6E", "5E", "4E", "3E"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spotlight: ["7E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L28", "6L28", "5L32", "4T", "4L32"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["5D"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + teeterdance: ["7L32", "6L32", "5L37", "4L37", "3L34"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thrash: ["7L55", "6L50", "5L55", "4L55", "3L56"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "4E", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7L37", "6T", "6L5", "5T", "5L5", "4T", "4L5", "3L5", "3S0"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E", "4E", "3E"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + trapinch: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L1", "6L1", "5L17"], + bite: ["7L1", "6L1", "5L1", "5S0", "5D", "4L1", "3L1"], + bodyslam: ["3T"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "4T"], + bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L22", "6L22", "5L33", "4L33", "3L33"], + dig: ["7L19", "6M", "6L19", "5M", "5L41", "4M", "4L41", "3M", "3L41"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["7L26", "7E", "6T", "6L26", "6E", "5T", "5L65", "5E", "4T", "4L65"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L73", "4M", "4L73", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L29", "6L1", "5L81", "4L81"], + feintattack: ["7L1", "6L1", "5L17", "4L17", "3L17"], + fissure: ["7L47", "6L1", "5L89", "4L89"], + flail: ["7E", "6E", "5E", "4E"], + focusenergy: ["7E", "6E", "5E", "4E", "3E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7E", "6E", "5E", "4T", "4E"], + gigadrain: ["6T", "5T", "5D", "4M", "3M"], + gust: ["7E", "6E", "5E", "4E", "3E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], + mimic: ["3T"], + mudshot: ["7E", "6E", "5E", "4E"], + mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + quickattack: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L9", "4L9", "3L9"], + sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], + sandtomb: ["7L12", "6L10", "5L25", "4L25", "3L25"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "5D"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7L40", "6T", "6L1", "5T", "5L67"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + }}, + vibrava: {learnset: { + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L1", "6L1", "5L17"], + bite: ["3L1"], + bodyslam: ["3T"], + boomburst: ["7L47", "6L47"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L29", "6L29"], + bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["3L33"], + defog: ["4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L1", "6L35", "5L35", "4L35", "3L35"], + dragonpulse: ["6T", "5T", "4M"], + earthpower: ["7L26", "6T", "6L26", "5T", "5L39", "4T"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T"], + gigadrain: ["6T", "5T", "4M", "3M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L57"], + mimic: ["3T"], + mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L49"], + sandtomb: ["7L12", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L22", "6L22", "5L41", "4L41", "3L41"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T"], + silverwind: ["4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + steelwing: ["7M", "6M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T"], + supersonic: ["7L19", "6L19", "5L33", "4L33"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["7L40", "6T", "6L40"], + uturn: ["7M", "6M", "5M", "4M"], + }}, + flygon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bide: ["7L1", "6L1", "5L17"], + bite: ["3L1"], + bodyslam: ["3T"], + brutalswing: ["7M"], + bugbite: ["6T", "5T", "4T"], + bulldoze: ["7M", "7L8", "6M", "6L8", "5M", "5L21"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["3L33", "3S0"], + defog: ["4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T", "4S1"], + dragonbreath: ["7L1", "6L35", "5L35", "4L35", "3L35", "3S0"], + dragonclaw: ["7M", "7L1", "6M", "6L45", "5M", "5L45", "4M", "4L45", "4S1", "3M"], + dragondance: ["7L1"], + dragonpulse: ["6T", "5T", "4M"], + dragonrush: ["7L47", "6L47"], + dragontail: ["7M", "7L29", "6M", "6L29", "5M", "5L65"], + earthpower: ["7L26", "6T", "6L26", "5T", "5L39", "4T"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "4M", "4S1", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L57", "4M", "4L57", "3M", "3L65"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mudslap: ["7L5", "6L5", "5L13", "4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "7L15", "6M", "6L15", "5M", "5L25", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1", "4L1", "3L1"], + sandstorm: ["7M", "7L36", "6M", "6L36", "5M", "5L49", "4M", "4L49", "3M", "3L53"], + sandtomb: ["7L12", "6L1", "5L1", "4L1", "3L1", "3S0"], + screech: ["7L22", "6L22", "5L41", "4L41", "3L41", "3S0"], + secretpower: ["6M", "4M", "3M"], + signalbeam: ["6T", "5T"], + silverwind: ["4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T"], + supersonic: ["7L19", "6L19", "5L33", "4L33"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["7L40", "6T", "6L40"], + uturn: ["7M", "6M", "5M", "4M", "4S1"], + }}, + cacnea: {learnset: { + absorb: ["7L4", "6L4", "5L5", "5D", "4L5", "3L5", "3S0"], + acid: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7E", "6E"], + block: ["7E", "6T", "6E", "5T", "5E"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7L46", "6L46", "5L49", "4L49", "3L41"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["7L54", "6L54", "5L57", "4L57", "3L49"], + disable: ["7E", "6E", "5E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["7E", "6E", "5E", "4E", "3T", "3E"], + encore: ["3S0"], + endure: ["4M", "3T"], + energyball: ["7M", "7L42", "6M", "6L42", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L29", "4L29", "3L29"], + fellstinger: ["7E", "6E"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E", "4E", "3E"], + growth: ["7L7", "6L7", "5L9", "4L9", "3L9"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L22", "6L22", "5L25", "4L25", "3L25"], + leechseed: ["7L10", "6L10", "5L13", "4L13", "3L13"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + lowkick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + magicalleaf: ["7E", "6E", "5E", "4E"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + needlearm: ["7L16", "6L16", "5L45", "4L45", "3L37"], + payback: ["7M", "7L26", "6M", "6L26", "5M", "5L41", "4M", "4L41"], + pinmissile: ["7L38", "6L21", "5L21", "4L21", "3L21"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + sandattack: ["7L13", "6L13", "5L17", "4L17", "3L17"], + sandstorm: ["7M", "7L50", "6M", "6L50", "5M", "5L53", "4M", "4L53", "3M", "3L45"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smellingsalts: ["7E", "6E", "5E", "4E"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L30", "6L30", "5L33", "4L33", "3L33"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L34", "6L34", "5L37", "4T", "4L37"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + switcheroo: ["7E", "6E", "5E"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + teeterdance: ["7E", "6E", "5E", "5D", "4E", "3E"], + thunderpunch: ["6T", "5T", "5D", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "4T"], + }}, + cacturne: {learnset: { + absorb: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonspore: ["7L49", "6L49", "5L59", "4L59", "3L47"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + destinybond: ["7L59", "7L1", "6L1", "5L71", "4L71", "3L59"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + energyball: ["7M", "7L44", "6M", "6L44", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L29", "4L29", "3L29", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + ingrain: ["7L22", "6L22", "5L25", "4L25", "3L25", "3S0"], + leechseed: ["7L10", "6L10", "5L13", "4L13", "3L13"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + needlearm: ["7L16", "6L16", "5L53", "4L53", "3L41", "3S0"], + payback: ["7M", "7L26", "6M", "6L26", "5M", "5L47", "4M", "4L47"], + pinmissile: ["7L38", "6L21", "5L21", "4L21", "3L21"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1", "3L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L1", "6L1", "5L1", "4L1", "3L1"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L13", "6L13", "5L17", "4L17", "3L17"], + sandstorm: ["7M", "7L54", "6M", "6L54", "5M", "5L65", "4M", "4L65", "3M", "3L53"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + seismictoss: ["3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L30", "6L30", "5L35", "4L35", "3L35", "3S0"], + spikyshield: ["7L1", "6L32"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L35", "6L35", "5L41", "4T", "4L41"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["6T", "5T", "4T"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + swablu: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7E", "6E", "5E", "4E", "3E"], + aircutter: ["4T"], + astonish: ["7L3", "6L3", "5L5", "4L5", "3L8"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonguard: ["7L34", "6L34", "5L40"], + dazzlinggleam: ["7M", "6M"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7L38", "6T", "6L38", "5T", "5L50", "4M", "4L45"], + dragonrush: ["7E", "6E", "5E", "4E"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["3S0"], + featherdance: ["7E", "6E", "5E", "5D", "4E"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L7", "6L7", "5L13", "4L13", "3L18"], + growl: ["7L1", "6L1", "6S2", "5L1", "5S1", "4L1", "3L1", "3S0"], + haze: ["7E", "6E", "5E", "4E", "3E"], + healbell: ["6T", "5T", "4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["7E", "6T", "6E", "6S2", "5T", "5E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + mirrormove: ["7L30", "6L30", "5L36", "4L36", "3L38"], + mist: ["7L14", "6L14", "5L23", "4L23", "3L28"], + moonblast: ["7L46", "6L46"], + mudslap: ["4T", "3T"], + naturalgift: ["7L20", "6L20", "5L32", "4M", "4L32"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + peck: ["7L1", "6L1", "6S2", "5L1", "5S1", "5D", "4L1", "3L1", "3S0"], + perishsong: ["7L42", "6L42", "5L55", "4L50", "3L48"], + pluck: ["5M", "4M"], + powerswap: ["7E", "6E", "5E", "4E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7E", "6E", "5E", "4E", "3E"], + rage: ["7E", "6E", "5E", "4E", "3E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L26", "6L26", "5L45", "4L40", "3L41"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M"], + round: ["7M", "7L17", "6M", "6L17", "5M", "5L18"], + safeguard: ["7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], + secretpower: ["6M", "4M", "3M"], + sing: ["7L5", "6L5", "5L9", "4L9", "3L11"], + skyattack: ["6T", "3T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L23", "6L23", "5L28", "4L28", "3L31"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + }}, + altaria: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M", "3S1"], + agility: ["6S3"], + aircutter: ["4T"], + astonish: ["7L3", "7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cottonguard: ["7L34", "6L34", "5L46"], + dazzlinggleam: ["7M", "6M"], + disarmingvoice: ["7L11", "6L11"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L1", "6L35", "5L35", "5S2", "4L35", "3L35", "3S0", "3S1"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7L30", "6L30", "5L39", "4L39", "3L40", "3S0"], + dragonpulse: ["7L40", "6T", "6L40", "5T", "5L62", "4M", "4L54"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["5S2"], + fireblast: ["7M", "6M", "6S3", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furyattack: ["7L7", "6L7", "5L13", "4L13", "3L18"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + healbell: ["6T", "5T", "4T", "3S1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "6S3", "5T"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mist: ["7L14", "6L14", "5L23", "4L23", "3L28"], + moonblast: ["7L52", "6L52"], + mudslap: ["4T", "3T"], + naturalgift: ["7L20", "6L20", "5L32", "5S2", "4M", "4L32"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + peck: ["7L1", "6L1", "5L1", "4L1", "3L1"], + perishsong: ["7L46", "6L46", "5L70", "4L62", "3L54"], + pluck: ["7L1", "6L1", "5M", "5L1", "4M", "4L1"], + protect: ["7M", "6M", "6S3", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L26", "6L26", "5L54", "4L46", "3L45", "3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "7L17", "6M", "6L17", "5M", "5L18"], + safeguard: ["7M", "7L9", "6M", "6L9", "5M", "5L18", "4M", "4L18", "3M", "3L21"], + secretpower: ["6M", "4M", "3M"], + sing: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + skyattack: ["7L59", "7L1", "6T", "6L1", "5T", "5L77", "4T", "4L70", "3T", "3L59"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M", "3S1"], + steelwing: ["7M", "6M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L23", "6L23", "5L28", "5S2", "4L28", "3L31", "3S0", "3S1"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + uproar: ["6T", "5T", "4T"], + wonderroom: ["6T", "5T"], + }}, + zangoose: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M", "3S2"], + captivate: ["4M"], + closecombat: ["7L50", "6L47", "5L53", "4L53"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E", "3T", "3E", "3S2"], + crushclaw: ["7L26", "6L22", "5L31", "4L31", "3L31", "3S2"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["3T"], + detect: ["7L36", "6L33", "5L40", "4L40", "3L46"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doublehit: ["7E", "6E", "5E", "5D", "4E"], + doublekick: ["7E", "6E", "5E", "4E", "3E"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + embargo: ["7M", "7L33", "6M", "6L19", "5M", "5L27", "4M", "4L27"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "7L29", "6M", "6L29", "5M", "5L44", "4M", "4L44", "3L55"], + feint: ["7E", "6E", "5E"], + finalgambit: ["7E", "6E", "5E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flail: ["7E", "6E", "5E", "4E", "3E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L8", "6L8", "5L14", "4T", "4L14", "3T", "3L13", "3S0"], + furyswipes: ["7E", "6E", "5E", "4E"], + gigadrain: ["6T", "5T", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["7L15", "6M", "6L15", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L4", "3S0", "3S1"], + lowkick: ["6T", "5T", "5D", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + pursuit: ["7L12", "6L12", "5L22", "4L22", "3L25"], + quickattack: ["7L5", "6L5", "5L5", "5D", "4L5", "3L7", "3S0", "3S1"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], + refresh: ["3S2"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + revenge: ["7L22", "6L22", "5L26"], + roar: ["7M", "6M", "5M", "4M", "4E", "3M", "3E"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slash: ["7L19", "6L15", "5L18", "4L18", "3L19"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L47", "6M", "6L43", "5M", "5L9", "4M", "4L9", "3T", "3L10", "3S0", "3S1"], + taunt: ["7M", "7L43", "6M", "6L40", "5M", "5L35", "4M", "4L35", "3M", "3L37"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + workup: ["7M", "5M"], + xscissor: ["7M", "7L40", "6M", "6L36", "5M", "5L48", "4M", "4L48"], + }}, + seviper: {learnset: { + aquatail: ["6T", "5T", "5D", "4T"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L41", "6L43"], + bind: ["6T", "5T"], + bite: ["7L4", "6L4", "5L10", "5D", "4L10", "3L10", "3S0", "3S2"], + bodyslam: ["7E", "6E", "5E", "5D", "4E", "3T", "3E"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + coil: ["7L44", "6L46", "5L64"], + confide: ["7M", "6M"], + crunch: ["7L39", "6L40", "5L28", "4L28", "3L28", "3S1"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragontail: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feint: ["7L11"], + finalgambit: ["7E", "6E", "5E"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gastroacid: ["7L29", "6T", "6L31", "5T", "5L34"], + gigadrain: ["6T", "5T", "4M", "3M"], + glare: ["7L19", "6L19", "5L25", "4L25", "3L25", "3S1"], + haze: ["7L34", "6L37", "5L43", "4L43", "3L43"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lick: ["7L6", "6L7", "5L7", "4L7", "3L7", "3S0", "3S2"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightslash: ["7L26", "7E", "6L28", "6E", "5L46", "5E", "4L46", "4E"], + payback: ["7M", "6M", "5M", "4M"], + poisonfang: ["7L21", "6L22", "5L34", "4L34", "3L34"], + poisonjab: ["7M", "7L31", "6M", "6L34", "5M", "5L52", "4M", "4L52"], + poisontail: ["7L9", "6L10", "5L16", "4L16", "3L16", "3S0", "3S1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + punishment: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E", "4E"], + screech: ["7L14", "6L13", "5L19", "4L19", "3L19", "3S1"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spitup: ["7E", "6E", "5E", "4E", "3E"], + stockpile: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L1", "6M", "6L1", "5M", "5L37", "4M", "4L37", "3T", "3L37"], + swallow: ["7E", "6E", "5E", "4E", "3E"], + swift: ["4T", "3T"], + switcheroo: ["7E", "6E", "5E", "4E"], + swordsdance: ["7M", "7L36"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + venomdrench: ["7L24", "6L25"], + venoshock: ["7M", "7L16", "6M", "6L16", "5M", "5L55"], + wrap: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S2"], + wringout: ["7L46", "7E", "6L49", "6E", "5L61", "5E", "4L55"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + lunatone: {learnset: { + acrobatics: ["7M", "6M", "5M"], + ancientpower: ["4T"], + batonpass: ["3S1"], + blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "5D", "4L1", "3L7", "3S0"], + cosmicpower: ["7L25", "7S2", "6L25", "5L34", "4L34", "3L31"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["6T", "5T", "5D", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], + endure: ["4M", "3T"], + explosion: ["7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L41", "6L41", "5L53", "4L53", "3L43"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + healblock: ["7L33", "6L33", "5L42", "4L42"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7L5", "6L5", "5L12", "4L12", "3L19"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["7L49", "6T", "6L1", "5T", "5L64"], + mimic: ["3T"], + moonblast: ["7L1", "7S2", "6L1"], + moonlight: ["5D"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + powergem: ["7L1", "7S2"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L29", "6M", "6L29", "5M", "5L45", "4M", "4L45", "3M", "3L37", "3S1"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "7L1", "6M", "5M"], + psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M", "3S1"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], + rockslide: ["7M", "7L21", "6M", "6L21", "5M", "5L25", "4M", "3T"], + rockthrow: ["7L1", "6L1", "5L9", "4L9", "3L13"], + rocktomb: ["7M", "6M", "5M", "4M", "3M", "3S1"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "7L37", "6M", "6L37", "5M", "5L41", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + telekinesis: ["5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + solrock: {learnset: { + acrobatics: ["7M", "6M", "5M"], + ancientpower: ["4T"], + batonpass: ["3S1"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "5D", "4L1", "3L7", "3S0"], + cosmicpower: ["7L25", "7S2", "6L25", "5L34", "4L34", "3L31", "3S1"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "7L17", "6M", "6L17", "5M", "5L31", "4M", "4L31"], + endure: ["4M", "3T"], + explosion: ["7M", "7L45", "6M", "6L45", "5M", "5L56", "4M", "4L56", "3T", "3L49"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firespin: ["7L5", "6L5", "5L12", "4L12", "3L19"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flareblitz: ["7L1"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + healblock: ["7L33", "6L33", "5L42", "4L42"], + heatwave: ["6T", "5T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "7S2", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + morningsun: ["5D"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L29", "6M", "6L29", "5M", "5L33", "4M", "3M", "3S1"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L13", "6L13", "5L23", "4L23", "3L25"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "7L9", "6M", "6L9", "5M", "5L20", "4M", "4L20"], + rockslide: ["7M", "7L21", "6M", "6L21", "5M", "5L45", "4M", "4L45", "3T", "3L37"], + rockthrow: ["7L1", "6L1", "5L9", "4L9", "3L13"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L41", "7S2", "6M", "6L41", "5M", "5L53", "4M", "4L53", "3M", "3L43"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "7L37", "7S2", "6M", "6L37", "5M", "5L41", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M", "3S1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + telekinesis: ["5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["7L49", "6T", "6L1", "5T", "5L64"], + zenheadbutt: ["6T", "5T", "5D", "4T"], + }}, + barboach: {learnset: { + amnesia: ["7L15", "6L15", "5L18", "4L18", "3L21"], + aquatail: ["7L28", "6T", "6L28", "5T", "5L35", "4T", "4L35"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E"], + earthpower: ["7E", "6T", "6E", "5T", "5E", "4T"], + earthquake: ["7M", "7L32", "6M", "6L32", "5M", "5L39", "4M", "4L39", "3M", "3L31"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7L44", "6L44", "5L47", "4L47", "3L41"], + flail: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L39", "6L39", "5L43", "4L43", "3L36"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7E", "6E", "5E", "4E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + magnitude: ["7L20", "6L20", "5L26", "4L26", "3L16"], + mimic: ["3T"], + mudbomb: ["7L13", "6L13", "5L14", "4L14"], + muddywater: ["7L35", "7E", "6L35", "6E", "5E"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7L1", "6L1", "5L1", "5D", "4T", "4L1", "3T", "3L1"], + mudsport: ["7L6", "6L6", "5L6", "4L6", "3L6"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L25", "6M", "6L25", "5M", "5L31", "4M", "4L31", "3M", "3L26"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "5D", "4M", "3T"], + snore: ["7L25", "6T", "6L25", "5T", "5L31", "4T", "4L31", "3T", "3L26"], + spark: ["7E", "6E", "5E", "5D", "4E", "3E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + takedown: ["7E", "6E", "5E", "4E"], + thrash: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L9", "6L9", "5L10", "4L10", "3L11"], + waterpulse: ["7L17", "6T", "6L17", "5L22", "4M", "4L22", "3M"], + watersport: ["7L6", "6L6", "5L6", "4L6", "3L6"], + whirlpool: ["7E", "6E", "5E", "4M", "4E", "3E"], + }}, + whiscash: {learnset: { + amnesia: ["7L15", "6L15", "5L18", "4L18", "3L21"], + aquatail: ["7L28", "6T", "6L28", "5T", "5L39", "4T", "4L39", "4S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + belch: ["7L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L34", "6M", "6L34", "5M", "5L45", "4M", "4L45", "4S0", "3M", "3L36"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7L52", "6L52", "5L57", "4L57", "3L56"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L45", "6L45", "5L51", "4L51", "3L46"], + gigaimpact: ["7M", "6M", "5M", "4M", "4S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + magnitude: ["7L20", "6L20", "5L26", "4L26", "3L16"], + mimic: ["3T"], + mudbomb: ["7L13", "6L13", "5L14", "4L14"], + muddywater: ["7L39", "6L39"], + mudslap: ["7L1", "6L1", "5L1", "4T", "4L1", "3T", "3L1"], + mudsport: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3M", "3L26"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7L25", "6T", "6L25", "5T", "5L33", "4T", "4L33", "3T", "3L26"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thrash: ["7L1"], + tickle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L9", "7L1", "6L1", "5L10", "4L10", "3L11"], + waterpulse: ["7L17", "6T", "6L17", "5L22", "4M", "4L22", "3M"], + watersport: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + whirlpool: ["4M"], + zenheadbutt: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "4S0"], + }}, + corphish: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7E", "6E", "5E", "4T", "4E", "3E"], + aquajet: ["7E", "6E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + bubblebeam: ["7L14", "6L14", "5L20", "4L20", "3L19"], + captivate: ["4M"], + chipaway: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["3T"], + crabhammer: ["7L43", "6L38", "5L38", "4L38", "3L34"], + crunch: ["7L39", "6L39", "5L47", "4L47", "3L43"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["7E", "6E", "5E", "3T"], + doublehit: ["7L20", "6L20"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E"], + endeavor: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + guillotine: ["7L48", "6L48", "5L53", "4L53", "3L44"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L5", "6L5", "5L7", "5D", "4L7", "3L7"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["7L23", "7E", "6T", "6L23", "6E", "5T", "5L26", "5E", "4T", "4L26", "4E", "3L25"], + leer: ["7L10", "6L10", "5L13", "4L13", "3L13"], + metalclaw: ["7E", "6E", "5E", "5D", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + nightslash: ["7L26", "6L26", "5L35", "4L35"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7L17", "6M", "6L17", "5M", "5L23", "4M", "4L23", "3M", "3L22"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorshell: ["7L31", "6L31"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + switcheroo: ["7E", "6E"], + swordsdance: ["7M", "7L37", "6M", "6L37", "5M", "5L44", "4M", "4L44", "3T", "3L37"], + taunt: ["7M", "7L34", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3M", "3L31"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trumpcard: ["7E", "6E", "5E"], + vicegrip: ["7L7", "6L7", "5L10", "4L10", "3L10"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["3S0"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + crawdaunt: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bubble: ["7L1", "6L1", "5L1", "4L1", "3L1"], + bubblebeam: ["7L14", "6L14", "5L20", "4L20", "3L19"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["3T"], + crabhammer: ["7L48", "6L44", "5L44", "4L44", "3L38", "3S0", "3S1"], + crunch: ["7L43", "6L43", "5L57", "4L57", "3L51"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M", "3M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doublehit: ["7L20", "6L20"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + guillotine: ["7L54", "6L1", "5L65", "4L65", "3L52", "3S0"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["7L23", "6T", "6L23", "5T", "5L26", "4T", "4L26", "3L25", "3S1"], + leer: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + nightslash: ["7L26", "6L26", "5L39", "4L39"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "7L17", "6M", "6L17", "5M", "5L23", "4M", "4L23", "3M", "3L22"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorshell: ["7L32", "6L32"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L1", "6L30", "5L30", "4T", "4L30", "3T"], + swordsdance: ["7M", "7L40", "6M", "6L40", "5M", "5L52", "4M", "4L52", "3T", "3L43", "3S0", "3S1"], + taunt: ["7M", "7L36", "6M", "6L34", "5M", "5L34", "4M", "4L34", "3M", "3L33", "3S0", "3S1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + vicegrip: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + baltoy: {learnset: { + allyswitch: ["5M"], + ancientpower: ["7L19", "6L19", "5L26", "4T", "4L25", "3L25"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + cosmicpower: ["7L22", "6L22", "5L37", "4L45", "3L37"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillrun: ["6T", "5T"], + earthpower: ["7L37", "6T", "6L37", "5T", "5L51", "4T", "4L53"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L46", "6M", "6L46", "5M", "5L60", "4M", "4L71", "3T", "3L45"], + extrasensory: ["7L31", "6L28", "5L43"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "5D", "4T"], + guardsplit: ["7L34", "6L34", "5L48"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L4", "4L3", "3L3"], + headbutt: ["4T"], + healblock: ["7L10", "6L10", "5L54", "4L61"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + imprison: ["7L43", "6L43"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7", "3S0"], + naturalgift: ["4M"], + powersplit: ["7L34", "6L34", "5L48"], + powertrick: ["7L25", "6L17", "5L31", "4L31"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L16", "6L13", "5L15", "4L11", "3L11", "3S0"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L4", "6L4", "5L7", "5D", "4L5", "3L5"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocktomb: ["7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15", "3S0"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L34", "4M", "4L37", "3M", "3L31"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L28", "6L25", "5L21", "4L19", "3T", "3L19"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + telekinesis: ["5M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "5D", "4T"], + }}, + claydol: {learnset: { + allyswitch: ["5M"], + ancientpower: ["7L19", "6L19", "5L26", "4T", "4L25", "3L25"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + cosmicpower: ["7L22", "6L22", "5L47", "4L51", "3L42"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + drillrun: ["6T", "5T"], + earthpower: ["7L40", "6T", "6L40", "5T", "5L59", "4T", "4L62"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L58", "6M", "6L58", "5M", "5L72", "4M", "4L86", "3T", "3L55"], + extrasensory: ["7L31", "6L28", "5L39"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + guardsplit: ["7L34", "6L34", "5L54"], + gyroball: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + healblock: ["7L10", "6L10", "5L64", "4L73"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L1", "6M", "6L36", "5M", "5L36", "4M", "4L36", "3M", "3L36"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + imprison: ["7L52", "6L52"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mudslap: ["7L7", "6L7", "5L11", "4T", "4L7", "3T", "3L7"], + naturalgift: ["4M"], + powersplit: ["7L34", "6L34", "5L54"], + powertrick: ["7L25", "6L17", "5L31", "4L31"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L16", "6L13", "5L15", "4L11", "3L11"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rapidspin: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L13", "6M", "6L10", "5M", "5L18", "4M", "4L15", "3M", "3L15"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "7L46", "6M", "6L46", "5M", "5L34", "4M", "4L40", "3M", "3L31"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["7L28", "6L25", "5L21", "4L19", "3T", "3L19"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + telekinesis: ["5M"], + teleport: ["7L1", "6L1", "5L1", "4L1", "3L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + lileep: {learnset: { + acid: ["7L5", "6L5", "5L8", "5S0", "5D", "4L8", "3L15"], + amnesia: ["7L36", "6L29", "5L29", "4L29", "3L36"], + ancientpower: ["7L17", "6L17", "5L43", "4T", "4L43", "3L43"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + bind: ["6T", "5T"], + bodyslam: ["3T"], + brine: ["7L21", "6L21"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L13", "6L13", "5L22", "4L22", "3L29"], + constrict: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L8"], + curse: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endure: ["7E", "6E", "5E", "4M", "3T"], + energyball: ["7M", "7L41", "6M", "6L41", "5M", "5L50", "4M", "4L50"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L31", "6T", "6L31", "5T", "5L36", "4T", "4L36"], + gigadrain: ["7L26", "6T", "6L26", "5T", "5D", "4M", "3M"], + grassknot: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7L9", "6L9", "5L15", "4L15", "3L22"], + megadrain: ["7E", "6E", "5E"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5E", "5D", "4E", "3E"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + recover: ["7E", "6E", "5E", "5S0", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "5S0", "4M", "4E", "3T", "3E"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L46", "6L46", "5L57", "4L57", "3L50"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + stockpile: ["7L46", "6L46", "5L57", "4L57", "3L50"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L46", "6L46", "5L57", "4L57", "3L50"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + worryseed: ["6T", "5T", "4T"], + wringout: ["7L52", "7E", "6L52", "6E", "5L64", "5E", "4L64", "4E"], + }}, + cradily: {learnset: { + acid: ["7L5", "7L1", "6L1", "5L1", "4L1", "3L1"], + amnesia: ["7L36", "6L29", "5L29", "4L29", "3L36"], + ancientpower: ["7L17", "6L17", "5L36", "4T", "4L36", "3L48"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bind: ["6T", "5T"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brine: ["7L21", "6L21"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7L13", "6L13", "5L22", "4L22", "3L29"], + constrict: ["7L1", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "7L44", "6M", "6L44", "5M", "5L56", "4M", "4L56"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gastroacid: ["7L31", "6T", "6L31", "5T", "5L46", "4T", "4L46"], + gigadrain: ["7L26", "6T", "6L26", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + infestation: ["7M", "6M"], + ingrain: ["7L9", "7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["3T"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spitup: ["7L52", "6L1", "5L66", "4L66", "3L60"], + stealthrock: ["6T", "5T", "4M"], + stockpile: ["7L52", "6L1", "5L66", "4L66", "3L60"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7L52", "6L1", "5L66", "4L66", "3L60"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + worryseed: ["6T", "5T", "4T"], + wringout: ["7L61", "7L1", "6L1", "5L76", "4L76"], + }}, + anorith: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L21", "6L21", "5L31", "4T", "4L31", "3L37"], + aquajet: ["7E", "6E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L29", "6L29"], + bugbite: ["7L25", "6T", "6L25", "5T"], + captivate: ["4M"], + confide: ["7M", "6M"], + crosspoison: ["7E", "6E", "5E", "5S0", "5D", "4E"], + crushclaw: ["7L39", "6L39", "5L55", "4L55"], + curse: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L10", "6L10", "5L37", "4T", "4L37", "3T", "3L43"], + harden: ["7L1", "6L1", "5L1", "5S0", "4L1", "3L7"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + irondefense: ["7E", "6T", "6E", "5T", "5E", "4T"], + knockoff: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + metalclaw: ["7L17", "6L17", "5L19", "4L19", "3L25"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L4", "6L4", "5L7", "5S0", "4L7", "3L13"], + naturalgift: ["4M"], + protect: ["7M", "7L49", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L31"], + rapidspin: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L55", "6L49", "5L49", "4L49", "3L55"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E", "4E"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M", "3M"], + slash: ["7L34", "6L34", "5L43", "4L43", "3L49"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L13", "6M", "6L13", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "5D", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "6L7", "5L13", "5S0", "4L13", "3L19"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L61", "4M", "4L61"], + }}, + armaldo: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L21", "6L21", "5L31", "4T", "4L31", "3L37"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7L29", "6L29"], + brutalswing: ["7M"], + bugbite: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crushclaw: ["7L39", "6L1", "5L67", "4L67"], + cut: ["6M", "5M", "4M", "3M"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["7L10", "6L10", "5L37", "4T", "4L37", "3T", "3L46"], + gigaimpact: ["7M", "6M", "5M", "4M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + irondefense: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + metalclaw: ["7L17", "6L17", "5L19", "4L19", "3L25"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + mudsport: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + naturalgift: ["4M"], + protect: ["7M", "7L53", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3M", "3L31"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockblast: ["7L61", "6L55", "5L55", "4L55", "3L64"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + slash: ["7L34", "7L25", "6L25", "5L46", "4L46", "3L55"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "7L13", "6M", "6L13", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + xscissor: ["7M", "7L46", "6M", "6L46", "5M", "5L73", "4M", "4L73"], + }}, + feebas: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + brine: ["7E", "6E", "5E"], + captivate: ["7E", "6E", "5E", "5D", "4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E", "3E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonbreath: ["7E", "6E", "5E", "4E", "3E"], + dragonpulse: ["7E", "6T", "6E", "5T", "5E"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L30", "6L30", "5L30", "4L30", "3L30"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + haze: ["7E", "6E", "5E", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypnosis: ["7E", "6E", "5E", "4E", "3E"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + lightscreen: ["7M", "6M", "5M", "4E", "3E"], + mimic: ["3T"], + mirrorcoat: ["7E", "6E", "5E", "5D", "4E", "4S0", "3E"], + mist: ["7E", "6E", "5E", "4E"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + splash: ["7L1", "6L1", "5L1", "5D", "4L1", "4S0", "3L1"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L15", "6L15", "5L15", "4L15", "3L15"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + milotic: {learnset: { + aquaring: ["7L17", "6L21", "5L49", "4L49"], + aquatail: ["7L31", "6T", "6L29", "5T", "5L29", "4T", "4L29"], + attract: ["7M", "7L34", "6M", "6L37", "5M", "5L41", "4M", "4L41", "3M", "3L45"], + avalanche: ["4M"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["7L21", "6L24", "5L25", "4M", "4L25"], + coil: ["7L41", "6L44"], + confide: ["7M", "6M"], + disarmingvoice: ["7L11", "6L11"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "7L24", "6M", "6L27", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L44", "6L37", "5L37", "5S3", "4L37", "4S1", "4S2", "3L40"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "5S3", "5S4", "4M", "4S1", "3M"], + icywind: ["6T", "5T", "4T", "4S2", "3T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + mirrorcoat: ["5S3"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "7L47", "6M", "6L33", "5M", "5L33", "4M", "4L33", "4S1", "4S2", "3M", "3L35", "3S0"], + recover: ["7L27", "6L21", "5L21", "5S3", "5S4", "4L21", "4S1", "4S2", "3L30", "3S0"], + refresh: ["7L7", "7L1", "6L7", "5L9", "4L9", "3L15"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L37", "6M", "6L41", "5M", "5L45", "4M", "4L45", "3M", "3L50"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "5S4", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + toxic: ["7M", "6M", "5M", "5S4", "4M", "3M"], + twister: ["7L14", "6L14", "5L17", "4T", "4L17", "3L25", "3S0"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7L1", "6T", "6L13", "5L13", "4M", "4L13", "3M", "3L20", "3S0"], + watersport: ["7L4", "7L1", "6L4", "5L5", "4L5", "3L10"], + whirlpool: ["4M"], + wrap: ["7L1", "6L1", "5L1", "4L1", "3L5"], + }}, + castform: {learnset: { + amnesia: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + blizzard: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "4M", "3M"], + bodyslam: ["3T"], + captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + cosmicpower: ["7E", "6E"], + defensecurl: ["3T"], + disable: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L10", "6L10", "5L10", "5D", "4L10", "3L10"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L35", "6M", "6L35", "5M", "5L50", "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"], + hex: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hurricane: ["7L45", "6L45"], + hydropump: ["7L35", "6L35", "5L50"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + lastresort: ["6T", "5T", "4T"], + luckychant: ["7E", "6E", "5E", "4E"], + mimic: ["3T"], + naturalgift: ["4M"], + ominouswind: ["7E", "6E", "5E", "5D", "4T", "4E"], + 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"], + reflecttype: ["7E", "6E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["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"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L10", "6L10", "5L10", "4L10", "3L10"], + waterpulse: ["6T", "5D", "4M", "3M"], + weatherball: ["7L25", "6L25", "5L40", "4L30", "3L30"], + workup: ["7M", "5M"], + }}, + kecleon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + afteryou: ["6T", "5T"], + ancientpower: ["7L21", "6L1", "5L55", "4T", "4L55", "3L49"], + aquatail: ["6T", "5T", "4T"], + astonish: ["7L1", "6L1", "5L1", "4L1", "3L1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bind: ["7L4", "6T", "6L4", "5T", "5L4", "4L4", "3L4"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + camouflage: ["7L30", "7E", "6L30", "6E"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + disable: ["7E", "6E", "5E", "4E", "3E"], + dizzypunch: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fakeout: ["7E", "6E", "5E", "4E"], + feint: ["7L10", "6L10", "5L14", "4L14"], + feintattack: ["7L16", "6L7", "5L7", "5D", "4L7", "3L7"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foulplay: ["7E", "6T", "6E", "5T", "5E"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + furyswipes: ["7L13", "6L10", "5L10", "4L10", "3L12"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lick: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lowkick: ["6T", "5T", "4T"], + magiccoat: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + nastyplot: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psybeam: ["7L18", "6L18", "5L18", "4L15", "3L17"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7E", "6E", "5E", "4E"], + recycle: ["6T", "5T", "4M"], + reflecttype: ["5D"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1"], + screech: ["7L38", "6L32", "5L32", "4L32", "3L24"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "7L33", "6M", "6L33", "5M", "5L49", "4M", "4L49"], + shadowsneak: ["7L7", "6L7", "5L22", "4L20"], + shockwave: ["6T", "4M", "3M"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "5D", "4M", "3M"], + slash: ["7L25", "6L25", "5L27", "4L25", "3L31"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "7L42", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3T", "3L40"], + suckerpunch: ["7L46", "6L43", "5L43", "4T", "4L43"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + synchronoise: ["7L50", "6L1", "5L58"], + tailwhip: ["7L1", "6L1", "5L1", "4L1", "3L1"], + thief: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + trickroom: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + }}, + shuppet: {learnset: { + astonish: ["7E", "6E", "5E", "4E", "3E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E"], + curse: ["7L26", "6L19", "5L13", "4L13", "3L20"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + destinybond: ["7E", "6E", "5E", "5D", "4E", "3E"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L43", "4M", "4L38"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L28", "4L28", "3L37", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + foresight: ["7E", "6E", "5E", "4E", "3E"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + grudge: ["7L46", "6L46", "5L50", "4L46", "3L56"], + gunkshot: ["7E", "6E", "5E"], + headbutt: ["4T"], + hex: ["7L22", "6L22", "5L31"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + imprison: ["7E", "6E", "5E", "4E", "3E"], + knockoff: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mimic: ["3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L7", "6L7", "5L8", "5D", "4L8", "3L13"], + ominouswind: ["7E", "6E", "5E", "4T"], + painsplit: ["6T", "5T", "5D", "4T"], + payback: ["7M", "6M", "5M", "4M", "4E"], + phantomforce: ["7L54", "7E", "6L54", "6E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + screech: ["7L4", "6L4", "5L5", "4L5", "3L8"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7L30", "6M", "6L30", "5M", "5L35", "4M", "4L31", "3M", "3L44", "3S0"], + shadowsneak: ["7L13", "7E", "6L13", "6E", "5L20", "5E", "4L20", "4E"], + shockwave: ["6T", "4M", "3M"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["7L42", "6T", "6L42", "5T", "5L46", "4M", "4L43", "3M", "3L49"], + snore: ["6T", "3T"], + spite: ["7L10", "6T", "6L10", "5T", "5L16", "4T", "4L16", "3L25", "3S0"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L38", "6L34", "5L38", "4T", "4L35"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7L50", "6T", "6L50", "5T", "5L55", "4T", "4L50"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32", "3S0"], + }}, + banette: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cottonguard: ["5S1"], + curse: ["7L26", "6L1", "5L1", "4L1", "3L1", "3S0"], + darkpulse: ["7M", "6M", "5T", "4M"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "7L34", "6M", "6L34", "5M", "5L51", "4M", "4L42"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L19", "6L19", "5L28", "5S1", "4L28", "3L39", "3S0"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grudge: ["7L52", "6L52", "5L66", "4L58", "3L64"], + headbutt: ["4T"], + helpinghand: ["3S0"], + hex: ["7L22", "6L22", "5L31", "5S1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + knockoff: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + phantomforce: ["7L64", "7L1", "6L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + screech: ["7L4", "7L1", "6L1", "5L1", "4L1", "3L1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7L30", "6M", "6L30", "5M", "5L35", "5S1", "4M", "4L31", "3M", "3L48", "3S0"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowsneak: ["7L13", "6L13", "5L20", "4L20"], + shockwave: ["6T", "4M", "3M"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["7L46", "6T", "6L46", "5T", "5L58", "4M", "4L51", "3M", "3L55"], + snore: ["6T", "3T"], + spite: ["7L10", "7L1", "6T", "6L1", "5T", "5L16", "4T", "4L16", "3L25"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L40", "6L34", "5L42", "4T", "4L35"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["7L58", "6T", "6L58", "5T", "5L75", "4T", "4L66"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L16", "6M", "6L13", "5M", "5L23", "4M", "4L23", "3L32"], + }}, + duskull: {learnset: { + astonish: ["7L9", "6L9", "5L14", "4L14", "3L16", "3S1"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L30", "6L17", "5L17", "4L17", "3L23", "3S1"], + curse: ["7L33", "6L30", "5L30", "4L30", "3L34", "3S0"], + darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + destinybond: ["7E", "6E", "5E", "4E", "3E"], + disable: ["7L6", "6L6", "5L6", "5D", "4L6", "3L5"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + foresight: ["7L14", "6L9", "5L9", "4L9", "3L12"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L54", "6L49", "5L49", "4L46", "3L49"], + gravity: ["6T", "5T", "4T"], + grudge: ["7E", "6E", "5E", "4E", "3E"], + haze: ["7E", "6E"], + headbutt: ["4T"], + helpinghand: ["3S1"], + hex: ["7L38", "6L38", "5L38"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + imprison: ["7E", "6E", "5E", "4E", "3E"], + infestation: ["7M", "6M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L46", "6L41", "5L41", "4L38", "3L45", "3S0"], + memento: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L1", "6L1", "5L1", "4L1", "3L1"], + ominouswind: ["7E", "6E", "5E", "4T", "4E"], + painsplit: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E", "3E"], + payback: ["7M", "7L49", "6M", "6L46", "5M", "5L46", "4M", "4L41"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L22", "6L22", "5L25", "4L25", "3L27", "3S0"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "7L41", "6M", "6L41", "5M", "4M", "3M", "3S1"], + shadowsneak: ["7L17", "6L17", "5L22", "4L22"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "5D", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3L38", "3S0"], + wonderroom: ["6T", "5T"], + }}, + dusclops: {learnset: { + astonish: ["7L9", "7L1", "6L1", "5L14", "4L14", "3L16"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1", "3L1"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L30", "6L17", "5L17", "4L17", "3L23"], + counter: ["3T"], + curse: ["7L33", "6L30", "5L30", "4L30", "3L34"], + darkpulse: ["7M", "6M", "5T", "4M"], + disable: ["7L6", "7L1", "6L1", "5L1", "4L1", "3L1"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + flash: ["6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + foresight: ["7L14", "6L9", "5L9", "4L9", "3L12"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7L64", "7L1", "6L1", "5L61", "4L61", "3L58"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + headbutt: ["4T"], + hex: ["7L40", "6L40", "5L42"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + meanlook: ["7L52", "6L49", "5L49", "4L43", "3L51"], + megakick: ["3T"], + megapunch: ["3T"], + metronome: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L1", "6L1", "5L1", "4L1", "3L1"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L57", "6M", "6L57", "5M", "5L58", "4M", "4L51"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + pursuit: ["7L22", "6L22", "5L25", "4L25", "3L27"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "7L45", "6M", "6L45", "5M", "4M", "3M"], + shadowpunch: ["7L1", "6L37", "5L37", "4L37", "3L37"], + shadowsneak: ["7L17", "6L17", "5L22", "4L22"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33", "3L41"], + wonderroom: ["6T", "5T"], + }}, + dusknoir: {learnset: { + astonish: ["7L9", "7L1", "6L1", "5L14", "4L14"], + attract: ["7M", "6M", "5M", "4M"], + bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L30", "6L17", "5L17", "4L17"], + curse: ["7L33", "6L30", "5L30", "4L30"], + darkpulse: ["7M", "6M", "5T", "4M"], + disable: ["7L6", "7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foresight: ["7L14", "6L9", "5L9", "4L9"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L64", "7L1", "6L1", "5L61", "4L61"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + headbutt: ["4T"], + hex: ["7L40", "6L40", "5L42"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + meanlook: ["7L52", "6L49", "5L49", "4L43"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightshade: ["7L1", "6L1", "5L1", "4L1"], + ominouswind: ["4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L57", "6M", "6L57", "5M", "5L58", "4M", "4L51"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["7L22", "6L22", "5L25", "4L25"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7L45", "6M", "6L45", "5M", "4M"], + shadowpunch: ["7L1", "6L37", "5L37", "4L37"], + shadowsneak: ["7L17", "6L17", "5L22", "4L22"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + willowisp: ["7M", "7L25", "6M", "6L25", "5M", "5L33", "4M", "4L33"], + wonderroom: ["6T"], + }}, + tropius: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + aircutter: ["4T"], + airslash: ["7L36", "6L36", "5L51", "4L47", "4S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bestow: ["7L46", "6L1", "5L57"], + bodyslam: ["7L41", "6L37", "5L37", "4L37", "3T", "3L37"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["7E", "6E", "5E", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["4M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7E", "6E", "5E", "4E"], + dragonpulse: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigadrain: ["6T", "5T", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L1", "6L1", "5L7", "4L7", "3L7"], + gust: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + headbutt: ["7E", "6E", "5E", "4T", "4E", "3E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + leafblade: ["7E", "6E", "5E", "4E"], + leafstorm: ["7L61", "7E", "7L1", "6L1", "6E", "5L71", "5E", "4L61", "4E"], + leaftornado: ["7L26", "6L26", "5L47"], + leechseed: ["7E", "6E", "5E", "5D", "4E", "3E"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + magicalleaf: ["7L16", "6L16", "5L31", "4L31", "3L31"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["7L30", "7E", "6L1", "6E", "5L67", "5E", "4M", "4L57"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E", "3E"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + razorleaf: ["7L1", "6L1", "5L11", "4L11", "3L11"], + razorwind: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rocksmash: ["6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seedbomb: ["6T", "5T"], + silverwind: ["5D", "4M"], + slam: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L56", "6M", "6L56", "5M", "5L61", "4M", "4L51", "4S0", "3M", "3L41"], + steelwing: ["7M", "6M", "4M", "3M"], + stomp: ["7L10", "6L10", "5L17", "4L17", "3L17"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "4S0", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetscent: ["7L6", "6L6", "5L21", "4L21", "3L21"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + synthesis: ["7L50", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E", "4T", "4L41", "4E", "4S0", "3L47"], + tailwind: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + whirlwind: ["7L21", "6L21", "5L27", "4L27", "3L27"], + worryseed: ["6T", "5T", "4T"], + }}, + chingling: {learnset: { + astonish: ["7L7", "6L7", "5L9", "4L9"], + attract: ["7M", "6M", "5M", "4M"], + bind: ["6T", "5T"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L10", "6L10", "5L14", "4L14"], + cosmicpower: ["7E", "6E"], + curse: ["7E", "6E", "5E", "4E"], + dazzlinggleam: ["7M", "6M"], + disable: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "4E"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + entrainment: ["7L19", "6L19", "5L25"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + growl: ["7L4", "6L4", "5L6", "4L6"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7E", "6E", "5E", "4E"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7L16", "6T", "6L16", "5T", "5L22", "4T", "4L22"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recover: ["7E", "6E", "5E", "4E"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7L32", "6T", "6L17", "5T", "5L17", "4T", "4L17"], + wish: ["7E", "6E", "5E", "4E"], + wrap: ["7L1", "6L1", "5L1", "4L1"], + yawn: ["7L13", "6L13"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + chimecho: {learnset: { + astonish: ["7L7", "7L1", "6L1", "5L9", "4L9", "3L9", "3S0"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bind: ["6T", "5T"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L10", "7L1", "6L1", "5L14", "4L14", "3L14"], + cosmicpower: ["7E", "6E"], + curse: ["7E", "6E", "5E", "4E", "3E"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["3T"], + disable: ["7E", "6E", "5E", "4E", "3E"], + doubleedge: ["7L42", "6L33", "5L33", "4L33", "3T", "3L33"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dreameater: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L22", "6L22", "5L46", "4L46"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + futuresight: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + growl: ["7L4", "7L1", "6L1", "5L6", "4L6", "3L6", "3S0"], + healbell: ["7L27", "6T", "6L27", "5T", "5L38", "4T", "4L38", "3L38"], + healingwish: ["7L57", "7L1", "6L1", "5L57", "4L49"], + healpulse: ["7L47", "6L47", "5L49"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T", "5D"], + hypnosis: ["7E", "6E", "5E", "5D", "4E", "3E"], + icywind: ["6T", "5T", "4T", "3T"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + mimic: ["3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "6M", "5M", "4M", "3M", "3L46"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L16", "6L16", "5L30", "4L30", "3L30"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7E", "6E"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L37", "6M", "6L37", "5M", "5L41", "4M", "4L41", "3M", "3L41"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["7E", "6T", "6E", "5T", "5E", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + synchronoise: ["7L52", "7L1", "6L1", "5L54"], + takedown: ["7L19", "6L19", "5L22", "4L22", "3L17"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7L32", "6T", "6L17", "5T", "5L17", "4T", "4L17", "3L22"], + wish: ["7E", "6E", "5E", "4E"], + wrap: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1", "3S0"], + yawn: ["7L13", "6L13", "5L25", "4L25", "3L25"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + absol: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + assurance: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7E", "6E", "5E", "4E", "3E"], + bite: ["7L16", "6L16", "5L28", "4L28", "3L21", "3S2"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brutalswing: ["7M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7E", "6E", "5E", "4E", "3E"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5T", "4M"], + detect: ["7L33", "6L1", "5L49", "4L49"], + doubleedge: ["7E", "6E", "5E", "4E", "3T", "3E"], + doubleteam: ["7M", "7L19", "6M", "6L19", "5M", "5L33", "4M", "4L33", "3M", "3L31", "3S3"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + falseswipe: ["7M", "6M", "5M", "4M"], + feint: ["7L1", "6L1", "5L1", "5D", "4L1"], + feintattack: ["7E", "6E", "5E", "4E", "3E"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + futuresight: ["7L53", "7L1", "6L1", "5L41", "4L41", "3L41", "3S3"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hex: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + knockoff: ["6T", "5T", "4T"], + leer: ["7L4", "7L1", "6L1", "5L4", "4L4", "3L5", "3S0", "3S1"], + magiccoat: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + meanlook: ["7E", "6E", "5E", "4E"], + mefirst: ["7L41", "7E", "6L1", "6E", "5L57", "5E", "4L57", "4E"], + megahorn: ["7E", "6E", "5E", "5D", "4E"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightslash: ["7L29", "6L29", "5L52", "4L52"], + payback: ["7M", "6M", "5M", "4M"], + perishsong: ["7L57", "7E", "7L1", "6L1", "6E", "5L65", "5E", "4L65", "3L46", "3S3"], + playrough: ["7E", "6E"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychocut: ["7L37", "6L37", "5L60", "4L60"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + punishment: ["7E", "6E", "5E", "4E"], + pursuit: ["7L10", "6L10", "5L20", "4L20"], + quickattack: ["7L7", "7L1", "6L1", "5L12", "4L12", "3L13"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + razorwind: ["7L49", "6L1", "5L17", "4L17", "3L17", "3S2"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scratch: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0", "3S1"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slash: ["7L22", "6L22", "5L36", "4L36", "3L36", "3S3"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T", "3S1", "3S2"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + suckerpunch: ["7L45", "7E", "6L45", "6E", "5L44", "5E", "4T", "4L44", "4E"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["6T", "5T", "5D", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25", "3T", "3L26", "3S2"], + taunt: ["7M", "7L13", "6M", "6L1", "5M", "5L9", "4M", "4L9", "3M", "3L9"], + thief: ["7M", "6M", "5M", "4M", "3M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + willowisp: ["7M", "6M", "5M", "4M"], + wish: ["3S0"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + snorunt: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["7E", "6E", "5E", "4M"], + bide: ["7E", "6E", "5E", "4E"], + bite: ["7L19", "6L10", "5L10", "4L10", "3L10", "3S0"], + blizzard: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L46", "3M", "3L43"], + block: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3E"], + bodyslam: ["3T"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L41", "6L31", "5L31", "4L31", "3L28"], + disable: ["7E", "6E", "5E", "4E"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L5", "6M", "6L4", "5M", "5L4", "4M", "4L4", "3M", "3L7"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M", "4M", "3M"], + frostbreath: ["7M", "7L37", "6M", "6L37", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "7L50", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L37"], + headbutt: ["7L28", "6L19", "5L19", "4T", "4L19", "3L19"], + hex: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M", "3L34"], + icefang: ["7L23", "6L23", "5L28", "4L28"], + iceshard: ["7L10", "6L10", "5L37", "4L37"], + icywind: ["7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3T", "3L16", "3S0"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + naturalgift: ["4M"], + powdersnow: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + protect: ["7M", "7L32", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7E", "6E", "5E", "4T", "4E"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sing: ["3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spikes: ["7E", "6E", "5E", "4E", "3E"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + switcheroo: ["7E", "6E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "5D", "4M", "3M", "3S0"], + weatherball: ["7E", "6E", "5E", "5D", "4E"], + }}, + glalie: {learnset: { + attract: ["7M", "6M", "5M", "4M", "3M"], + avalanche: ["4M"], + bite: ["7L19", "6L1", "5L1", "4L1", "3L1"], + blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L51", "4M", "4L51", "3M", "3L53"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L41", "6L31", "5L31", "4L31", "3L28"], + darkpulse: ["7M", "6M", "5T", "4M"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3M", "3L1"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + freezedry: ["7L1", "6L42"], + frostbreath: ["7M", "7L37", "6M", "6L37", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + hail: ["7M", "7L54", "6M", "6L40", "5M", "5L40", "4M", "4L40", "3M", "3L42"], + headbutt: ["7L28", "6L19", "5L19", "4T", "4L19", "3L19"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "6L37", "5M", "5L37", "4M", "4L37", "3M", "3L34"], + icefang: ["7L23", "6L23", "5L28", "4L28"], + iceshard: ["7L10", "7L1", "6L1"], + icywind: ["7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13", "3T", "3L16"], + ironhead: ["6T", "5T", "4T"], + leer: ["7L1", "6L1", "5L1", "4L1", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + mimic: ["3T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "7L32", "6M", "6L22", "5M", "5L22", "4M", "4L22", "3M", "3L25"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + sheercold: ["7L61", "7L1", "6L1", "5L59", "4L59", "3L61"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + taunt: ["7M", "6M", "5M", "4M", "3M"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + }}, + froslass: {learnset: { + astonish: ["7L19", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + auroraveil: ["7M"], + avalanche: ["4M"], + blizzard: ["7M", "7L48", "6M", "6L48", "5M", "5L51", "4M", "4L51"], + block: ["6T", "5T", "4T"], + captivate: ["7L41", "6L31", "5L31", "4M", "4L31"], + confide: ["7M", "6M"], + confuseray: ["7L32", "6L19", "5L19", "4L19"], + destinybond: ["7L61", "7L1", "6L1", "5L59", "4L59"], + doubleteam: ["7M", "7L5", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + drainingkiss: ["7L23", "6L23"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "7L54", "6M", "6L40", "5M", "5L40", "4M", "4L40"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + iceshard: ["7L10", "7L1", "6L1", "5L37", "4L37"], + icywind: ["7L14", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["7L1", "6L22", "5L22", "4T", "4L22"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7L42", "6M", "6L42", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + wakeupslap: ["7L37", "6L28", "5L28", "4L28"], + waterpulse: ["6T", "4M"], + willowisp: ["7M", "7L28"], + }}, + spheal: {learnset: { + aquaring: ["7E", "6E", "5E", "4E"], + aquatail: ["6T", "5T", "5D", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L21", "6L21", "5L25", "4L25", "3L25", "3S0"], + bellydrum: ["7E", "6E"], + blizzard: ["7M", "7L41", "6M", "6L41", "5M", "5L43", "4M", "4L43", "3M", "3L43"], + bodyslam: ["7L26", "6L19", "5L19", "4L19", "3T", "3L19"], + brine: ["7L17", "6L17", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + charm: ["3S0"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "4E", "3E"], + defensecurl: ["7L1", "6L1", "5L1", "4L1", "3T", "3L1"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L9", "6L7", "5L7", "4L7", "3L7"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fissure: ["7E", "6E", "5E", "5D", "4E", "3E"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L36", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T", "3S0"], + naturalgift: ["4M"], + powdersnow: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L31", "6M", "6L31", "5M", "5L37", "4M", "4L37", "3M", "3L37"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L5", "7E", "6L5", "6E", "5E", "4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L46", "6L46", "5L49", "4L49", "3L49"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M", "3T"], + snore: ["7L31", "6T", "6L31", "5T", "5L37", "4T", "4L37", "3T", "3L37"], + spitup: ["7E", "6E", "5E", "4E", "3E"], + stockpile: ["7E", "6E", "5E", "4E", "3E"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swallow: ["7E", "6E", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], + yawn: ["7E", "6E", "5E", "4E", "3E"], + }}, + sealeo: {learnset: { + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L21", "6L21", "5L25", "4L25", "3L25"], + blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L47", "4M", "4L47", "3M", "3L47"], + bodyslam: ["7L26", "6L19", "5L19", "4L19", "3T", "3L19"], + brine: ["7L17", "6L17", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "3T", "3L1"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L9", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L38", "6M", "6L31", "5M", "5L31", "4M", "4L31", "3M", "3L31"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L31", "6M", "6L31", "5M", "5L39", "4M", "4L39", "3M", "3L39"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L5", "6L5", "4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L52", "6L52", "5L55", "4L55", "3L55"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7L31", "6T", "6L31", "5T", "5L39", "4T", "4L39", "3T", "3L39"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + walrein: {learnset: { + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + aurorabeam: ["7L19", "6L19", "5L25", "4L25", "3L25"], + avalanche: ["4M"], + blizzard: ["7M", "7L49", "6M", "6L49", "5M", "5L52", "4M", "4L52", "3M", "3L50"], + block: ["6T", "5T", "4T"], + bodyslam: ["7L25", "6L19", "5L19", "4L19", "3T", "3L19"], + brine: ["7L19", "6L19", "5S0", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L1", "6L1", "5L1", "4L1"], + defensecurl: ["7L1", "6L1", "3T", "3L1"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7L7", "6L1", "5L1", "4L1", "3L1"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1", "3L1"], + hail: ["7M", "7L38", "6M", "6L31", "5M", "5L31", "5S0", "4M", "4L31", "3M", "3L31"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + iceball: ["7L13", "6L13", "5L13", "4L13", "3L13"], + icebeam: ["7M", "6M", "5M", "5S0", "4M", "3M"], + icefang: ["7L1", "6L44", "5L44", "4L44"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1", "3L1"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L31", "6M", "6L31", "5M", "5L39", "4M", "4L39", "3M", "3L39"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["7L7", "6L7", "4T", "3T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L60", "6L60", "5L65", "5S0", "4L65", "3L61"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["7L31", "6T", "6L31", "5T", "5L39", "4T", "4L39", "3T", "3L39"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "4M", "4L32", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + clamperl: {learnset: { + aquaring: ["7E", "6E", "5E", "5D", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + barrier: ["7E", "6E", "5E", "4E", "3E"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["7E", "6E", "5E", "4E", "3T", "3E"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["5D", "4M"], + clamp: ["7L1", "6L1", "5L1", "4L1", "3L1"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E", "3E"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1", "3L1"], + mimic: ["3T"], + muddywater: ["7E", "6E", "5E", "4E"], + mudsport: ["7E", "6E", "5E", "4E", "3E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7E", "6E", "5E", "4E", "3E"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shellsmash: ["7L50", "6L50", "5L51"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L1", "6L1", "5L1", "4L1", "3L1"], + waterpulse: ["7E", "6T", "6E", "5E", "4M", "3M"], + whirlpool: ["7L1", "6L1", "5L1", "5D", "4M", "4L1", "3L1"], + }}, + huntail: {learnset: { + aquatail: ["7L39", "6T", "6L39", "5T", "5L46", "4T", "4L46"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L29", "6L29", "5L33", "4L33", "3L43"], + bind: ["6T", "5T"], + bite: ["7L1", "6L1", "5L6", "4L6", "3L8"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brine: ["7L19", "6L19", "5L28", "4M", "4L28"], + captivate: ["4M"], + coil: ["7L45", "6L45"], + confide: ["7M", "6M"], + crunch: ["7L34", "6L34", "5L42", "4L42", "3L36"], + dive: ["7L26", "6M", "6L26", "5M", "5L37", "4T", "4L37", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + feintattack: ["7L11", "6L11"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L50", "6L50", "5L51", "4L51", "3L50"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icefang: ["7L16", "6L16", "5L24", "4L24"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L9", "6L9", "5L19", "4L19", "3L29"], + screech: ["7L5", "6L5", "5L10", "4L10", "3L15"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["6T", "5T", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["7L23", "6L23", "4T"], + superfang: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7L14", "6T", "6L14", "5L15", "4M", "4L15", "3M", "3L22"], + whirlpool: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1"], + }}, + gorebyss: {learnset: { + agility: ["7L9", "6L9", "5L10", "4L10", "3L15"], + amnesia: ["7L16", "6L16", "5L19", "4L19", "3L29"], + aquaring: ["7L19", "6L19", "5L24", "4L24"], + aquatail: ["7L39", "6T", "6L39", "5T", "5L46", "4T", "4L46"], + attract: ["7M", "6M", "5M", "4M", "3M"], + batonpass: ["7L29", "6L29", "5L33", "4L33", "3L43"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + captivate: ["7L23", "6L23", "5L28", "4M", "4L28"], + coil: ["7L45", "6L45"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L6", "4L6", "3L8"], + dive: ["7L26", "6M", "6L26", "5M", "5L37", "4T", "4L37", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainingkiss: ["7L11", "6L11"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L50", "6L50", "5L51", "4L51", "3L50"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + infestation: ["7M", "6M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L34", "6M", "6L34", "5M", "5L42", "4M", "4L42", "3M", "3L36"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7L14", "6T", "6L14", "5L15", "4M", "4L15", "3M", "3L22"], + watersport: ["7L5", "6L5"], + whirlpool: ["7L1", "6L1", "5L1", "4M", "4L1", "3L1"], + }}, + relicanth: {learnset: { + amnesia: ["7E", "6E", "5E", "4E", "3E"], + ancientpower: ["7L21", "6L1", "5L43", "4T", "4L43", "3L43"], + aquatail: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + attract: ["7M", "6M", "5M", "4M", "3M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bounce: ["6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dive: ["7L26", "6M", "6L26", "5M", "5L57", "4T", "4L57", "3M"], + doubleedge: ["7L50", "6L50", "5L50", "4L50", "3T", "3L57"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthpower: ["6T", "5T", "5D", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L1"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + harden: ["7L1", "6L1", "5L1", "4L1", "3L1"], + headbutt: ["4T"], + headsmash: ["7L56", "7L1", "6L1", "5L78", "4L78"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L46", "6L1", "5L71", "4L71", "3L64"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + magnitude: ["7E", "6E", "5E", "4E", "3E"], + mimic: ["3T"], + muddywater: ["7E", "6E", "5E", "4E"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E", "4T", "4E", "3T"], + mudsport: ["7L6", "7L1", "6L1", "5L36", "4L36", "3L36"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L41", "6M", "6L41", "5M", "5L64", "4M", "4L64", "3M", "3L50"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4E", "3T", "3E"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15", "3M", "3L15"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + skullbash: ["7E", "6E", "5E", "4E", "3E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "5D", "4M", "4E", "3T", "3E"], + smackdown: ["7M", "6M", "5M"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "3T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L31", "6L29", "5L29", "4L29", "3L29"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L10", "7L1", "6L1", "5L8", "5D", "4L8", "3L8"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], + yawn: ["7L35", "6L22", "5L22", "4L22", "3L22"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + }}, + luvdisc: {learnset: { + agility: ["7L7", "6L7", "5L9", "4L9", "3L16"], + aquajet: ["7E", "6E", "5E", "4E"], + aquaring: ["7L40", "7E", "6L40", "6E", "5L46", "5E", "4L37", "4E"], + attract: ["7M", "7L20", "6M", "6L22", "5M", "5L27", "4M", "4L22", "3M", "3L28"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bounce: ["6T", "5T", "4T"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["7L37", "7E", "6L46", "6E", "5L51", "5E", "4M", "4L40", "4E"], + charm: ["7L1", "6L1", "5L4", "5D", "4L4", "3L4"], + confide: ["7M", "6M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainingkiss: ["7L9", "6L9"], + endure: ["4M", "3T"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flail: ["7L26", "6L27", "5L31", "4L46", "3L40"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + healpulse: ["7E", "6E", "5E"], + heartstamp: ["7L22"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L46", "6L40", "5L40"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "5D", "4T", "3T"], + luckychant: ["7L13", "6L14", "5L17", "4L17"], + mimic: ["3T"], + mudsport: ["7E", "6E", "5E", "5D", "4E", "3E"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L49", "6M", "6L55", "5M", "5L55", "4M", "4L51", "3M", "3L48"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + soak: ["7L42"], + splash: ["7E", "6E", "5E", "4E", "3E"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + supersonic: ["7E", "6E", "5E", "4E", "3E"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + sweetkiss: ["7L31", "6L31", "5L37", "4L27", "3L36"], + swift: ["4T", "3T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "3L1"], + takedown: ["7L34", "6L14", "5L14", "4L14", "3L24"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + watergun: ["7L4", "6L4", "5L7", "4L7", "3L12"], + waterpulse: ["7L17", "6T", "6L17", "5L22", "4M", "4L31", "3M"], + watersport: ["7E", "6E", "5E", "4E", "3E"], + whirlpool: ["4M"], + }}, + bagon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "6L5", "5L5", "5D", "4L5", "3L5", "3S0", "3S1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L46", "4L46", "3L41"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["7E", "6E", "5E"], + doubleedge: ["7L49", "6L49", "5L55", "4L55", "3T", "3L53"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L13", "6L13", "5L31", "4L31", "3L33"], + dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L50", "4M", "4L50", "3M", "3L49"], + dragondance: ["7E", "6E", "5E", "5D", "4E", "3E"], + dragonpulse: ["7E", "6T", "6E", "5T", "5E", "4M"], + dragonrage: ["7E", "6E", "5E", "4E", "3E"], + dragonrush: ["7E", "6E", "5E", "4E"], + ember: ["7L4", "6L4", "5L25", "4L25", "3L25"], + endure: ["7E", "6E", "5E", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + firefang: ["7E", "6E", "5E", "4E"], + flamethrower: ["7M", "7L44", "6M", "6L44", "5M", "4M", "3M"], + focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + headbutt: ["7L17", "6L16", "5L16", "4T", "4L16", "3L17"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["7E", "6E", "5E", "4E", "3E"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + irondefense: ["3S1"], + leer: ["7L7", "6L7", "5L10", "4L10", "3L9"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "5D", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + rage: ["7L1", "6L1", "6S3", "5L1", "5S2", "4L1", "3L1", "3S0", "3S1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L39", "6L39", "5L40", "4L40", "3L37"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thrash: ["7E", "6E", "6S3", "5E", "4E", "3E"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["7E", "6E", "5E", "4T", "4E", "3E"], + wish: ["3S0"], + zenheadbutt: ["7L34", "6T", "6L34", "5T", "5L35", "4T", "4L35"], + }}, + shelgon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L50", "4L50", "3L56"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + doubleedge: ["7L56", "6L56", "5L61", "4L61", "3T", "3L78"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L13", "6L13", "5L32", "4L32", "3L38"], + dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L55", "4M", "4L55", "3M", "3L69"], + dragonpulse: ["6T", "5T", "4M"], + ember: ["7L4", "7L1", "6L1", "5L25", "4L25", "3L25"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "4M", "3M"], + focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + headbutt: ["7L17", "6L1", "5L1", "4T", "4L1", "3L1"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + leer: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "7L1", "6M", "6L30", "5M", "5L30", "4M", "4L30", "3M", "3L30"], + rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L42", "6L42", "5L43", "4L43", "3L47"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L37", "4T", "4L37"], + }}, + salamence: {learnset: { + aerialace: ["7M", "6M", "5M", "5S3", "4M", "3M", "3S1"], + aircutter: ["4T"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bite: ["7L10", "7L1", "6L1", "5L1", "4L1", "3L1"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L53", "4L53", "3L61"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + defog: ["4M"], + doubleedge: ["7L63", "6L1", "5L70", "4L70", "3T", "3L93"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L13", "6L13", "5L32", "4L32", "3L38", "3S0"], + dragonclaw: ["7M", "7L29", "6M", "6L29", "5M", "5L61", "5S3", "4M", "4L61", "4S2", "3M", "3L79", "3S1"], + dragondance: ["5S3", "3S1"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "7L1", "6M", "6L1", "5M", "5L80"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + ember: ["7L4", "7L1", "6L1", "5L25", "4L25", "3L25"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "4S2", "3M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flamethrower: ["7M", "7L49", "6M", "6L49", "5M", "4M", "3M"], + fly: ["7M", "7L1", "6M", "6L50", "5M", "5L50", "4M", "4L50", "3M", "3L50", "3S0"], + focusenergy: ["7L21", "6L20", "5L20", "4L20", "3L21"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7L17", "6L1", "5L1", "4T", "4L1", "3L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hydropump: ["4S2"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + hypervoice: ["6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M", "3M"], + leer: ["7L7", "7L1", "6L1", "5L1", "4L1", "3L1"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "5S3", "4T"], + protect: ["7M", "7L1", "6M", "6L30", "5M", "5L30", "4M", "4L30", "3M", "3L30", "3S0"], + rage: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S1"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L42", "6L42", "5L43", "4L43", "3L47", "3S0"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + steelwing: ["7M", "6M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M", "4S2"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["4T"], + zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L37", "4T", "4L37"], + }}, + beldum: {learnset: { + headbutt: ["4T"], + holdback: ["6S0"], + irondefense: ["6T", "6S0", "5T", "4T"], + ironhead: ["6T", "6S0", "5T", "5D", "4T"], + takedown: ["7L1", "6L1", "5L1", "5D", "4L1", "3L1"], + zenheadbutt: ["6T", "6S0", "5T", "5D", "4T"], + }}, + metang: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L41", "6L38", "5L44", "4L44", "3L56"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7L26", "6L26", "5L32", "4L32"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L50", "6M", "6L50", "5M", "5L56", "4M", "4L56", "3M", "3L62"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L47", "6T", "6L47", "5T", "5L40", "4T", "4L40", "3L44"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magnetrise: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + metalclaw: ["7L1", "6L1", "5L1", "4L1", "3L20", "3S0"], + meteormash: ["7L44", "6L44", "5L48", "4L48", "3L50"], + mimic: ["3T"], + miracleeye: ["7L29", "6L26", "5L26"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L36", "4M", "4L36", "3M", "3L38"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L35", "6L35", "5L24", "4L24", "3L26"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + takedown: ["7L1", "6L1", "5L1", "4L1", "3L1", "3S0"], + telekinesis: ["5M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + zenheadbutt: ["7L32", "6T", "6L29", "5T", "5L52", "4T", "4L52"], + }}, + metagross: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L41", "6L38", "5L44", "5S4", "4L44", "3L66"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7L26", "6L26", "5L32", "5S1", "5S2", "4L32", "4S0"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "3L1"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + doubleedge: ["5S4", "5S5", "3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "5S1", "5S3", "5S6", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "6M", "5M", "4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + hammerarm: ["7L1", "6L45", "5L45", "5S1", "5S2", "5S4", "5S5", "4L45", "4S0"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L60", "6M", "6L60", "5M", "5L71", "5S6", "4M", "4L71", "3M", "3L77"], + icepunch: ["6T", "5T", "5S2", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L52", "6T", "6L52", "5T", "5L40", "5S4", "4T", "4L40", "3L44"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magnetrise: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + metalclaw: ["7L1", "6L1", "5L1", "4L1", "3L1"], + meteormash: ["7L44", "6L44", "5L53", "5S1", "5S3", "5S5", "5S6", "4L53", "4S0", "3L55"], + mimic: ["3T"], + miracleeye: ["7L29", "6L26", "5L26"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "5S3", "4M", "3M"], + psychic: ["7M", "7L38", "6M", "6L38", "5M", "5L36", "5S5", "5S6", "4M", "4L36", "3M", "3L38"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + pursuit: ["7L23", "6L23", "5L28", "4L28", "3L32"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L35", "6L35", "5L24", "4L24", "3L1"], + secretpower: ["6M", "4M", "3M"], + selfdestruct: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + sludgebomb: ["7M", "6M", "5M", "4M", "3M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + takedown: ["7L1", "6L1", "5L1", "4L1", "3L1"], + telekinesis: ["5M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + zenheadbutt: ["7L32", "6T", "6L29", "5T", "5L62", "5S2", "5S3", "4T", "4L62", "4S0"], + }}, + regirock: {learnset: { + ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S0", "3S1"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "6S4", "5M"], + chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S0", "3S1"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + drainpunch: ["6T", "5T", "4M"], + dynamicpunch: ["3T"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L1", "6M", "6L1", "6S5", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + hammerarm: ["7L49", "6L1", "6S5", "5L81", "4L81"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], + icepunch: ["6T", "6S5", "5T", "4T", "3T"], + irondefense: ["7L37", "6T", "6L37", "6S4", "5T", "5L41", "5S3", "4L41", "3L41"], + ironhead: ["6T", "5T", "4T"], + lockon: ["7L55", "6L1", "5L57", "5S3", "4L57", "3L57"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rockthrow: ["7L7", "7L1", "6L1", "5L9", "4L9", "4S2", "3S0", "3L9"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + selfdestruct: ["3T"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], + stoneedge: ["7M", "7L43", "6M", "6L43", "6S5", "5M", "5L73", "4M", "4L73"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S0", "3S1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + zapcannon: ["7L55", "6L1", "5L65", "5S3", "4L65", "3L49"], + }}, + regice: {learnset: { + amnesia: ["7L37", "6L37", "6S4", "6S5", "5L41", "5S3", "4L41", "3L41"], + ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S0", "3S1"], + auroraveil: ["7M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "6S4", "5M"], + chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S0", "3S1"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + hail: ["7M", "6M", "6S5", "5M", "4M", "3M"], + hammerarm: ["7L49", "6L1", "5L81", "4L81"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], + icebeam: ["7M", "7L43", "6M", "6L43", "6S5", "5M", "5L73", "4M", "4L73", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["7L7", "7L1", "6T", "6L1", "5T", "5L9", "4T", "4L9", "4S2", "3T", "3L9", "3S0"], + ironhead: ["6T", "5T", "4T"], + lockon: ["7L55", "6L1", "5L57", "5S3", "4L57", "3L57"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + selfdestruct: ["3T"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + superpower: ["7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S0", "3S1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "6S5", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + zapcannon: ["7L55", "6L1", "5L65", "5S3", "4L65", "3L49"], + }}, + registeel: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + amnesia: ["7L37", "6L37", "6S4", "5L41", "5S3", "4L41", "3L41"], + ancientpower: ["7L31", "6L31", "6S4", "5L33", "4T", "4L33", "3L33", "3S0", "3S1"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "7L19", "7L1", "6M", "6L1", "5M"], + chargebeam: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L49", "5S3", "4M", "4L49"], + confide: ["7M", "6M"], + counter: ["3T"], + curse: ["7L25", "6L17", "6S4", "5L17", "4L17", "4S2", "3L17", "3S0", "3S1"], + defensecurl: ["3T"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dynamicpunch: ["3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + explosion: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1", "3T", "3L1"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flashcannon: ["7M", "7L43", "6M", "6L43", "5M", "5L73", "4M", "4L73"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "6S5", "5T", "4T"], + hammerarm: ["7L49", "6L1", "5L81", "4L81"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L67", "6M", "6L67", "5M", "5L89", "4M", "4L89", "3M", "3L65", "3S1"], + icepunch: ["6T", "5T", "4T", "3T"], + irondefense: ["7L37", "6T", "6L37", "6S4", "6S5", "5T", "5L41", "4T", "4L41", "3L41"], + ironhead: ["7L43", "6T", "6L1", "6S5", "5T", "5L73", "4T", "4L73"], + lockon: ["7L55", "6L1", "5L57", "5S3", "4L57", "3L57"], + magnetrise: ["6T", "5T"], + megakick: ["3T"], + megapunch: ["3T"], + metalclaw: ["7L7", "7L1", "6L1", "5L9", "4L9", "4S2", "3L9", "3S0"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "6S5", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + selfdestruct: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7L1", "6L1", "5L1", "4L1", "4S2"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7L61", "6T", "6L25", "5T", "5L25", "4T", "4L25", "4S2", "3L25", "3S0", "3S1"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + zapcannon: ["7L55", "6L1", "5L65", "5S3", "4L65", "3L49"], + }}, + latias: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S1", "3S2"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L20", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["7L56", "6T", "6L1", "5T", "5L80", "4M", "4L70"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + guardsplit: ["7L46", "6L1", "5L75"], + healingwish: ["7L61", "7L1", "6L1", "5L85", "4L60"], + healpulse: ["7L16", "6L1", "6S6", "5L65", "5S5"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mimic: ["3T"], + mistball: ["7L24", "6L24", "6S6", "5L35", "4L35", "4S3", "4S4", "3L35", "3S0", "3S1", "3S2"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L51", "6M", "6L51", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S0", "3S1", "3S2"], + psychoshift: ["7L28", "6L28", "6S6", "5L50", "5S5", "4L50"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L32", "6L32", "5L45", "4L45", "3L45", "3S1", "3S2"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + reflecttype: ["7L36", "6L1", "5L70"], + refresh: ["7L13", "6L13", "5L30", "4L30", "4S3", "4S4", "3L30", "3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L15", "4M", "4L15", "3M", "3L15"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + storedpower: ["7L10", "6L10"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + watersport: ["7L4", "6L4", "5L25", "4L25", "4S3", "4S4", "3L25", "3S0"], + whirlpool: ["4M"], + wish: ["7L1", "6L1", "5L5", "4L5", "3L5"], + zenheadbutt: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], + }}, + latios: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + attract: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M", "3M"], + defog: ["4M"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7L20", "6L20", "6S6", "5L20", "4L20", "4S3", "3L20"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragondance: ["7L7", "6L1", "5L55", "5S5", "4L55", "3L50", "3S1", "3S2"], + dragonpulse: ["7L56", "6T", "6L1", "6S7", "5T", "5L80", "4M", "4L70"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + flash: ["6M", "5M", "4M", "3M"], + fly: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + healblock: ["7L1", "6L1", "5L5", "4L5"], + healpulse: ["7L16", "6L1", "6S6", "6S7", "5L65", "5S5"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L10", "4T", "4L10", "3L10"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lusterpurge: ["7L24", "6L24", "6S6", "6S7", "5L35", "4L35", "4S3", "4S4", "3L35", "3S0", "3S1", "3S2"], + magiccoat: ["6T", "5T", "4T"], + memento: ["7L61", "7L1", "6L1", "5L85", "4L60", "3L5"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + powersplit: ["7L46", "6L1", "5L75"], + protect: ["7M", "7L4", "6M", "6L4", "5M", "5L25", "4M", "4L25", "4S3", "4S4", "3M", "3L25", "3S0"], + psychic: ["7M", "7L51", "6M", "6L51", "6S7", "5M", "5L60", "5S5", "4M", "4L65", "3M", "3L40", "3S0", "3S1", "3S2"], + psychoshift: ["7L28", "6L28", "6S6", "5L50", "5S5", "4L50"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L1", "6L1", "5L1", "4L1", "3L1"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L32", "6L32", "5L45", "4L45", "3L45", "3S1", "3S2"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + refresh: ["7L13", "6L13", "5L30", "4L30", "4S3", "4S4", "3L30", "3S0"], + rest: ["7M", "6M", "5M", "4M", "3M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L1", "6M", "6L1", "5M", "5L15", "4M", "4L15", "3M", "3L15"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + steelwing: ["7M", "6M", "4M", "3M"], + storedpower: ["7L10", "6L10"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["7L36", "6L1", "5M", "5L70"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["7L41", "6T", "6L40", "5T", "5L40", "4T", "4L40", "4S4"], + }}, + kyogre: {learnset: { + ancientpower: ["7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], + aquaring: ["7L30", "6L30", "6S5", "5L30", "4L30", "4S2"], + aquatail: ["7L15", "6T", "6L15", "5T", "5L65", "4T", "4L65"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + block: ["6T", "5T", "4T"], + bodyslam: ["7L20", "6L15", "6S5", "5L15", "4L15", "3T", "3L20", "3S0"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L50", "6M", "6L50", "5M", "5L60", "4M", "4L30", "3M", "3L30", "3S0"], + confide: ["7M", "6M"], + defensecurl: ["3T"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["7L80", "6L80", "5L80", "4L65", "3T", "3L65", "3S1"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + earthquake: ["7M", "6M", "5M", "4M", "3M"], + endure: ["4M", "3T"], + facade: ["7M", "6M", "5M", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M", "3M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hydropump: ["7L75", "6L75", "5L90", "4L45", "3L45", "3S0", "3S1"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icebeam: ["7M", "7L35", "6M", "6L35", "6S5", "6S6", "5M", "5L35", "5S3", "5S4", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], + icywind: ["6T", "5T", "4T", "3T"], + ironhead: ["6T", "5T", "4T"], + mimic: ["3T"], + muddywater: ["7L60", "6L20", "5L20", "4L20"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + originpulse: ["7L45", "6L45", "6S5"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "4L50", "3M", "3L50", "3S1"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], + secretpower: ["6M", "4M", "3M"], + sheercold: ["7L65", "6L65", "6S6", "5L75", "5S4", "4L60", "3L60", "3S1"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + thunder: ["7M", "6M", "6S6", "5M", "5S3", "5S4", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["7L1", "6T", "6L1", "5L1", "4M", "4L1", "3M", "3L1"], + waterspout: ["7L90", "6L50", "6S6", "5L50", "5S3", "5S4", "4L50", "4S2", "3L75"], + whirlpool: ["4M"], + }}, + groudon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["7L1", "6L1", "5L45", "5S3", "4T", "4L15", "4S2", "3L15"], + block: ["6T", "5T", "4T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L50", "6M", "6L50", "5M", "5L60", "4M", "4L30", "3M", "3L30", "3S0"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + counter: ["3T"], + cut: ["6M", "5M", "4M", "3M"], + defensecurl: ["3T"], + dig: ["6M", "5M", "4M", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dragonclaw: ["7M", "6M", "5M", "4M", "3M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + dynamicpunch: ["3T"], + earthpower: ["7L15", "6T", "6L15", "5T", "5L65", "5S4", "4T", "4L65"], + earthquake: ["7M", "7L35", "6M", "6L35", "6S5", "5M", "5L35", "5S3", "4M", "4L35", "4S2", "3M", "3L35", "3S0"], + endure: ["4M", "3T"], + eruption: ["7L90", "6L50", "5L50", "5S3", "5S4", "4L50", "4S2", "3L75"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "7L75", "6M", "6L75", "5M", "5L90", "4M", "4L45", "3M", "3L45", "3S0", "3S1"], + firepunch: ["6T", "6S6", "5T", "4T", "3T"], + fissure: ["7L65", "6L65", "5L75", "4L60", "3L60", "3S1"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hammerarm: ["7L80", "6L20", "6S6", "5L20", "5S4", "4L20"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + lavaplume: ["7L20", "6L15", "6S5", "5L15", "4L15"], + megakick: ["3T"], + megapunch: ["3T"], + mimic: ["3T"], + mudshot: ["7L1", "6L1", "5L1", "4L1", "3L1"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + poweruppunch: ["6M"], + precipiceblades: ["7L45", "6L45", "6S5"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + rest: ["7M", "7L30", "6M", "6L30", "6S5", "5M", "5L30", "4M", "4L30", "4S2", "3M", "3L50", "3S1"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "6S6", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + rollout: ["4T", "3T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + slash: ["4L20", "3L20", "3S0"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "7L60", "6M", "6L60", "6S6", "5M", "5L80", "5S3", "5S4", "4M", "4L65", "3M", "3L65", "3S1"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M", "3T"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + uproar: ["6T", "5T", "4T"], + }}, + rayquaza: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + airslash: ["7L30", "6L30", "5L35", "4L35", "4S1"], + ancientpower: ["7L15", "6L15", "5L45", "5S2", "4T", "4L15", "4S1", "3L15"], + aquatail: ["6T", "5T", "4T"], + avalanche: ["4M"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M", "4M", "3M"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M", "4M", "3M"], + bulldoze: ["7M", "6M", "5M"], + celebrate: ["6S7"], + confide: ["7M", "6M"], + crunch: ["7L20", "6L15", "5L15", "4L15", "3L35"], + dive: ["6M", "5M", "4T", "3M"], + doubleedge: ["3T"], + doubleteam: ["7M", "6M", "5M", "4M", "3M"], + dracometeor: ["7T", "6T", "6S7", "5T", "4T"], + dragonascent: ["7T", "6T", "6S4", "6S6", "6S7"], + dragonclaw: ["7M", "6M", "6S6", "5M", "4M", "4L20", "3M", "3L20"], + dragondance: ["7L60", "6L60", "6S4", "6S6", "5L60", "5S2", "4L30", "3L30"], + dragonpulse: ["7L50", "6T", "6L50", "6S4", "6S5", "5T", "5L90", "5S2", "5S3", "4M", "4L75"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "6S6", "5M", "4M", "3M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L45", "6L45", "6S4", "6S5", "5L75", "5S3", "4L60", "3L60", "3S0"], + facade: ["7M", "6M", "5M", "4M", "3M"], + fireblast: ["7M", "6M", "5M", "4M", "3M"], + flamethrower: ["7M", "6M", "5M", "4M", "3M"], + fling: ["7M", "6M", "5M", "4M"], + fly: ["7M", "7L65", "6M", "6L65", "6S7", "5M", "5L65", "4M", "4L45", "3M", "3L45", "3S0"], + focusblast: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + furycutter: ["4T", "3T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gyroball: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L90", "6M", "6L80", "5M", "5L80", "5S3", "4M", "4L65", "3M", "3L75"], + hypervoice: ["7L75", "6T", "6L20", "5T", "5L20", "4L20"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icywind: ["6T", "5T", "4T", "3T"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M", "3M"], + mimic: ["3T"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + outrage: ["7L80", "6T", "6L50", "5T", "5L50", "5S2", "4T", "4L50", "4S1", "3L65", "3S0"], + overheat: ["7M", "6M", "5M", "4M", "3M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "7L35", "6M", "6L30", "5M", "5L30", "4M", "4L30", "4S1", "3M", "3L50", "3S0"], + return: ["7M", "6M", "5M", "4M", "3M"], + roar: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + scaryface: ["7L5", "6L5", "5L5", "4L5", "3L5"], + secretpower: ["6M", "4M", "3M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M", "3M"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + surf: ["7M", "6M", "5M", "4M", "3M"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["4T", "3T"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwind: ["6T", "5T", "4T"], + thunder: ["7M", "6M", "6S5", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + twister: ["7L1", "6L1", "6S5", "5L1", "4T", "4L1", "3L1"], + uproar: ["6T", "5T", "4T"], + vcreate: ["5S3"], + waterfall: ["7M", "6M", "5M", "4M", "3M"], + waterpulse: ["6T", "4M", "3M"], + whirlpool: ["4M"], + }}, + jirachi: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + ancientpower: ["4T"], + bodyslam: ["3T"], + 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"], + 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"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + followme: ["5S14"], + 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"], + 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"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + lastresort: ["7L65", "6T", "6L65", "5T", "5L65", "4T", "4L65"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + meteormash: ["5S13", "5S14", "5S15"], + metronome: ["3T"], + mimic: ["3T"], + moonblast: ["6S17"], + mudslap: ["4T", "3T"], + naturalgift: ["4M"], + nightmare: ["3T"], + playrough: ["6S19"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "5S13", "4M", "4L20", "3M", "3L20", "3S10"], + 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"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + sandstorm: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snore: ["6T", "5T", "4T", "3T"], + stealthrock: ["6T", "5T", "4M"], + 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"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + 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"], + zenheadbutt: ["7L35", "6T", "6L35", "5T", "5L35", "4T", "4L35"], + }}, + deoxys: {learnset: { + aerialace: ["7M", "6M", "5M", "4M", "3M"], + agility: ["7L55", "6L55", "5L73", "4L73", "3L35"], + allyswitch: ["5M"], + amnesia: ["7L55", "6L55", "5L73", "4L73", "3L35"], + avalanche: ["4M"], + bind: ["6T", "5T"], + bodyslam: ["3T"], + brickbreak: ["7M", "6M", "5M", "4M", "3M"], + brutalswing: ["7M"], + calmmind: ["7M", "6M", "5M", "4M", "3M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cosmicpower: ["7L55", "6L55", "6S10", "5L73", "4L73", "3L35", "3S3"], + counter: ["7L73", "6L73", "5L97", "4L97", "4S6", "3T", "3L50"], + cut: ["6M", "5M", "4M", "3M"], + darkpulse: ["7M", "6M", "5S9"], + detect: ["4S6"], + doubleedge: ["3T"], + doubleteam: ["7L13", "7M", "6M", "6L13", "5M", "5L17", "4M", "4L17", "4S5", "3M", "3L10"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M", "3T"], + dynamicpunch: ["3T"], + endure: ["4M", "3T"], + energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L73", "6L73", "5L97", "4L97", "4S4", "4S5", "3L50"], + facade: ["7M", "6M", "5M", "4M", "3M"], + firepunch: ["6T", "5T", "4T", "3T"], + flash: ["6M", "5M", "4M", "3M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M", "3M"], + frustration: ["7M", "6M", "5M", "4M", "3M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M", "3M"], + hyperbeam: ["7M", "7L73", "6M", "6L73", "6S10", "5M", "5L97", "4M", "4L97", "4S7", "3M", "3L50", "3S3"], + icebeam: ["7M", "6M", "5M", "4M", "3M"], + icepunch: ["6T", "5T", "4T", "3T"], + icywind: ["6T", "5T", "4T", "3T"], + irondefense: ["7L55", "6T", "6L55", "5T", "5L73", "4L73", "4S4", "3L35"], + knockoff: ["7L19", "6T", "6L19", "5T", "5L25", "4T", "4L25", "3L15", "3S1", "3S2"], + leer: ["7L1", "6L1", "5L1", "4L1", "4S8", "3L1"], + lightscreen: ["7M", "6M", "5M", "4M", "3M"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T", "4T"], + megakick: ["3T"], + megapunch: ["3T"], + meteormash: ["4S7"], + mimic: ["3T"], + mirrorcoat: ["7L73", "6L73", "5L97", "4L97", "4S6", "3L50"], + mudslap: ["4T", "3T"], + nastyplot: ["5S9"], + naturalgift: ["4M"], + nightmare: ["3T"], + nightshade: ["7L7", "6L7", "5L9", "4L9", "4S8", "3L5"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M", "3M"], + psychic: ["7M", "7L31", "6M", "6L31", "5M", "5L41", "4M", "4L41", "3M", "3L25", "3S0", "3S1", "3S2"], + psychoboost: ["7L67", "6L67", "6S10", "5L89", "5S9", "4L89", "4S4", "4S5", "4S6", "4S7", "4S8", "3L45", "3S3"], + psychoshift: ["7L43", "6L43", "5L57", "4L57"], + psychup: ["7M", "6M", "5M", "4M", "3T"], + psyshock: ["7M", "6M", "5M"], + pursuit: ["7L25", "6L25", "5L33", "4L33", "3L20", "3S0", "3S2"], + raindance: ["7M", "6M", "5M", "4M", "3M"], + recover: ["7L61", "6L61", "6S10", "5L81", "5S9", "4L81", "3L40", "3S3"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M", "3M"], + rest: ["7M", "6M", "5M", "4M", "3M"], + return: ["7M", "6M", "5M", "4M", "3M"], + rockslide: ["7M", "6M", "5M", "4M", "3T"], + rocksmash: ["6M", "5M", "4M", "3M"], + rocktomb: ["7M", "6M", "5M", "4M", "3M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M", "3M"], + secretpower: ["6M", "4M", "3M"], + seismictoss: ["3T"], + shadowball: ["7M", "6M", "5M", "4M", "3M"], + shockwave: ["6T", "4M", "3M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M", "3M"], + sleeptalk: ["7M", "6M", "5T", "4M", "3T"], + snatch: ["7L37", "6T", "6L37", "5T", "5L49", "4M", "4L49", "3M", "3L30", "3S1"], + snore: ["6T", "5T", "4T", "3T"], + solarbeam: ["7M", "6M", "5M", "4M", "3M"], + spikes: ["7L25", "6L25", "5L33", "4L33", "3L20", "3S1"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M", "3M"], + substitute: ["7M", "6M", "5M", "4M", "3T"], + sunnyday: ["7M", "6M", "5M", "4M", "3M"], + superpower: ["7L37", "6T", "6L37", "5L49", "4L49", "4S7", "3S0"], + swagger: ["7M", "6M", "5M", "4M", "3T"], + swift: ["7L37", "6L37", "5L49", "4T", "4L49", "4S5", "3T", "3L30", "3S2"], + taunt: ["7L19", "7M", "6M", "6L19", "5M", "5L25", "4M", "4L25", "3M", "3L15", "3S0"], + telekinesis: ["5M"], + teleport: ["7L13", "6L13", "5L17", "4L17", "3L10"], + thunder: ["7M", "6M", "5M", "4M", "3M"], + thunderbolt: ["7M", "6M", "5M", "4M", "3M"], + thunderpunch: ["6T", "5T", "4T", "3T"], + thunderwave: ["7M", "6M", "5M", "4M", "3T"], + torment: ["7M", "6M", "5M", "4M", "3M"], + toxic: ["7M", "6M", "5M", "4M", "3M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M", "3M"], + wonderroom: ["6T", "5T"], + wrap: ["7L1", "6L1", "5L1", "4L1", "4S8", "3L1"], + zapcannon: ["7L61", "6L61", "5L81", "4L81", "4S4", "3L40"], + zenheadbutt: ["7L49", "6T", "6L49", "5T", "5L65", "4T", "4L65"], + }}, + turtwig: {learnset: { + absorb: ["7L9", "6L9", "5L9", "5S0", "5S1", "4L9"], + amnesia: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L21", "6L21", "5L21", "4L21"], + bodyslam: ["7E", "6E", "5E", "4E"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L37", "6L37", "5L37", "4L37"], + curse: ["7L17", "6L17", "5L17", "4L17"], + cut: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["7E", "6T", "6E", "5T", "5E", "4T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7L41", "6T", "6L41", "5T", "5L41", "4M", "4L41"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + grassyterrain: ["7E", "6E"], + growth: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["6T", "5T", "4M"], + leafstorm: ["7L45", "6L45", "5L45", "4L45"], + leechseed: ["7L29", "6L29", "5L29", "4L29"], + lightscreen: ["7M", "6M", "5M", "4M"], + megadrain: ["7L25", "6L25", "5L25", "4L25"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L13", "6L13", "5L13", "4L13"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandtomb: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spitup: ["7E", "6E", "5E", "4E"], + stealthrock: ["6T", "5T", "4M"], + stockpile: ["7E", "6E", "5E", "5S1", "4E"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7E", "6E", "5E", "4E"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33"], + tackle: ["7L1", "6L1", "5L1", "5S0", "5S1", "4L1"], + thrash: ["7E", "6E", "5E", "4E"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + wideguard: ["7E", "6E", "5E"], + withdraw: ["7L5", "6L5", "5L5", "5S0", "5S1", "4L5"], + workup: ["7M"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + }}, + grotle: {learnset: { + absorb: ["7L9", "7L1", "6L9", "5L9", "4L9"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L22", "6L22", "5L22", "4L22"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L42", "6L42", "5L42", "4L42"], + curse: ["7L17", "6L17", "5L17", "4L17"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7L47", "6T", "6L47", "5T", "5L47", "4M", "4L47"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["6T", "5T", "4M"], + leafstorm: ["7L52", "6L52", "5L52", "4L52"], + leechseed: ["7L32", "6L32", "5L32", "4L32"], + lightscreen: ["7M", "6M", "5M", "4M"], + megadrain: ["7L27", "6L27", "5L27", "4L27"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L13", "6L13", "5L13", "4L13"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + withdraw: ["7L5", "7L1", "6L1", "5L1", "4L1"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + }}, + torterra: {learnset: { + absorb: ["7L9", "7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L22", "6L22", "5L22", "4L22"], + block: ["6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L45", "6L45", "5L45", "4L45"], + curse: ["7L17", "6L17", "5L17", "4L17"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L1", "6M", "6L32", "5M", "5L32", "5S0", "4M", "4L32"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frenzyplant: ["7T", "6T", "5T", "4T"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["7L51", "6T", "6L51", "5T", "5L51", "4M", "4L51"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasspledge: ["7T", "6T", "5T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + leafstorm: ["7L57", "6L57", "5L57", "4L57"], + leechseed: ["7L33", "6L33", "5L33", "4L33"], + lightscreen: ["7M", "6M", "5M", "4M"], + megadrain: ["7L27", "6L27", "5L27", "4L27"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + outrage: ["6T", "5T", "5S0", "4T"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L13", "7L1", "6L1", "5L1", "4L1"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "5S0", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7L39", "6T", "6L39", "5T", "5L39", "4T", "4L39"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + withdraw: ["7L5", "7L1", "6L1", "5L1", "4L1"], + woodhammer: ["7L1", "6L1", "5L1", "5S0", "4L1"], + workup: ["7M"], + worryseed: ["6T", "5T", "4T"], + }}, + chimchar: {learnset: { + acrobatics: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + aerialace: ["7M", "6M", "5M", "4M"], + assist: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + blazekick: ["7E", "6E", "5E", "4E"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doublekick: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + ember: ["7L7", "6L7", "5L7", "5S1", "5S3", "4L7"], + encore: ["7E", "6E", "5E", "4E"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31"], + fakeout: ["7E", "6E", "5E", "5S3", "4E"], + fireblast: ["7M", "6M", "5M", "4M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + firespin: ["7L33", "6L33", "5L33", "4L33"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L41", "4S0", "4S2"], + flamewheel: ["7L17", "6L17", "5L17", "4L17"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E", "4E"], + focuspunch: ["7E", "6T", "6E", "5E", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyswipes: ["7L15", "6L15", "5L15", "4L15"], + grassknot: ["7M", "6M", "5M", "4M", "4S0", "4S2"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + heatwave: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + helpinghand: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "4S0", "4S2"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "5S1", "5S3", "4L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mudslap: ["4T"], + nastyplot: ["7L23", "6L23", "5L23", "4L23"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + quickguard: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "5S1", "4L1"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slackoff: ["7L41", "6L41", "5L41", "4L39"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + submission: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "5S1", "5S3", "4M", "4L9"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4T", "4E", "4S0", "4S2"], + torment: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M"], + }}, + monferno: {learnset: { + acrobatics: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + closecombat: ["7L36", "6L36", "5L36", "4L36"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dualchop: ["6T", "5T"], + ember: ["7L7", "7L1", "6L1", "5L1", "4L1"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L26", "6L26", "5L26", "4L26"], + fireblast: ["7M", "6M", "5M", "4M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T", "4T"], + firespin: ["7L39", "6L39", "5L39", "4L39"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flamewheel: ["7L19", "6L19", "5L19", "4L19"], + flareblitz: ["7L56", "6L56", "5L56", "4L49"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyswipes: ["7L16", "6L16", "5L16", "4L16"], + grassknot: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L1", "6L14", "5L14", "4L14"], + mudslap: ["4T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slackoff: ["7L49", "6L49", "5L49", "4L46"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "4M", "4L9"], + thunderpunch: ["6T", "5T", "4T"], + torment: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + infernape: {learnset: { + acrobatics: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + blastburn: ["7T", "6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "7L58", "6M", "6L58", "5M", "5L58", "4M", "4L53"], + captivate: ["4M"], + closecombat: ["7L1", "6L36", "6S1", "5L36", "5S0", "4L41"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + ember: ["7L7", "7L1", "6L1", "5L1", "4L1"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L26", "6L26", "5L26", "4L29"], + fireblast: ["7M", "6M", "6S1", "5M", "5S0", "4M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "6S1", "5T", "4T"], + firespin: ["7L42", "6L42", "5L42", "4L45"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flamewheel: ["7L19", "6L19", "5L19", "4L21"], + flareblitz: ["7L68", "7L1", "6L1", "5L68", "4L57"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "6S1", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyswipes: ["7L16", "6L16", "5L16", "4L17"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "5S0", "4M"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7L1", "6L14", "5L14", "4L14"], + mudslap: ["4T"], + naturalgift: ["4M"], + overheat: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + punishment: ["7L29", "6L29", "5L29", "4L33"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + thunderpunch: ["6T", "5T", "4T"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "5S0", "4M"], + vacuumwave: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + piplup: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7E", "6E", "5E", "4E"], + aquaring: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + bide: ["7L22", "7E", "6L22", "6E", "5L22", "5E", "4L18"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L29", "6L29", "5L29", "4M", "4L29"], + bubble: ["7L8", "6L8", "5L8", "5S0", "5S3", "4L8"], + bubblebeam: ["7L18", "7S5", "6L18", "5L18", "4L18"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doublehit: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + drillpeck: ["7L39", "7S5", "6L39", "5L39", "4L39"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["7E", "6E", "5E", "5S1", "5S2", "5S3", "4E"], + flail: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L25", "6L25", "5L25", "4L25"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "6L4", "6S4", "5L4", "5S0", "5S3", "4L4"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hydropump: ["7L43", "7E", "7S5", "6L43", "6E", "5L43", "5E", "5S1", "4L43", "4E"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["7E", "6T", "6E", "5T", "5E", "4T"], + mist: ["7L36", "6L36", "5L36", "4L36"], + mudslap: ["7E", "6E", "5E", "4T", "4E"], + mudsport: ["7E", "6E", "5E", "4E"], + naturalgift: ["4M"], + peck: ["7L15", "6L15", "5L15", "5S1", "5S2", "4L15"], + pluck: ["5M", "4M"], + pound: ["7L1", "6L1", "6S4", "5L1", "5S0", "5S3", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "6S4", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M", "5S2"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["6T", "5T", "4T"], + sing: ["5S2"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + supersonic: ["7E", "6E", "5E", "4E"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M"], + watersport: ["7L11", "6L11", "5L11", "5S1", "4L11"], + whirlpool: ["7L32", "7S5", "6L32", "5L32", "4M", "4L32"], + workup: ["7M"], + yawn: ["7E", "6E", "5E", "4E"], + }}, + prinplup: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + bide: ["7L24", "6L24", "5L24", "4L19"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L33", "6L33", "5L33", "4M", "4L33"], + bubble: ["7L8", "7L1", "6L8", "5L8", "4L8"], + bubblebeam: ["7L19", "6L19", "5L19", "4L19"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + drillpeck: ["7L46", "6L46", "5L46", "4L46"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L28", "6L28", "5L28", "4L28"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L50", "6L50", "5L51", "4L51"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + metalclaw: ["7L1", "6L16", "5L16", "4L16"], + mist: ["7L42", "6L42", "5L42", "4L42"], + mudslap: ["4T"], + naturalgift: ["4M"], + peck: ["7L15", "6L15", "5L15", "4L15"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M"], + watersport: ["7L11", "6L11", "5L11", "4L11"], + whirlpool: ["7L37", "6L37", "5L37", "4M", "4L37"], + workup: ["7M"], + }}, + empoleon: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aquajet: ["7L1", "6L36", "5L36", "5S0", "4L36"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["7L33", "6L33", "5L33", "4M", "4L33"], + bubble: ["7L8", "7L1", "6L1", "5L1", "4L1"], + bubblebeam: ["7L19", "6L19", "5L19", "4L19"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + drillpeck: ["7L52", "6L52", "5L52", "4L52"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L28", "6L28", "5L28", "4L28"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "5S0", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hydrocannon: ["7T", "6T", "5T", "4T"], + hydropump: ["7L59", "6L59", "5L59", "5S0", "4L59"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "5S0", "4M"], + icywind: ["6T", "5T", "4T"], + irondefense: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + metalclaw: ["7L1", "6L16", "5L16", "4L16"], + mist: ["7L46", "6L46", "5L46", "4L46"], + mudslap: ["4T"], + naturalgift: ["4M"], + peck: ["7L15", "6L15", "5L15", "4L15"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + steelwing: ["7M", "6M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L19"], + swordsdance: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["6T", "4M"], + whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39"], + workup: ["7M"], + }}, + starly: {learnset: { + aerialace: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + agility: ["7L33", "6L33", "5L33", "4L33"], + aircutter: ["4T"], + astonish: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + bravebird: ["7L37", "6L37", "5L37", "4L37"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + detect: ["7E", "6E", "5E"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L17", "6T", "6L17", "5T", "5L17", "4T", "4L17"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["7E", "6E", "5E", "4E"], + finalgambit: ["7L41", "6L41", "5L41"], + fly: ["7M", "6M", "5M", "4M"], + foresight: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7E", "6E", "5E", "4E"], + growl: ["7L1", "6L1", "5L1", "4L1", "4S0"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + mirrormove: ["7E", "6E"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7E", "6E", "5E", "4E"], + quickattack: ["7L5", "6L5", "5L5", "4L5"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7E", "6E", "5E"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1", "4S0"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L29", "6L29", "5L29", "4L29"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["7E", "6T", "6E", "5E"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L21", "6L21", "5L21", "4L21"], + wingattack: ["7L9", "6L9", "5L9", "4L9"], + workup: ["7M", "5M"], + }}, + staravia: {learnset: { + aerialace: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + agility: ["7L38", "6L38", "5L38", "4L38"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + bravebird: ["7L43", "6L43", "5L43", "4L43"], + captivate: ["4M"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L18", "6T", "6L18", "5T", "5L18", "4T", "4L18"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["5D"], + finalgambit: ["7L48", "6L48", "5L48"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["6T", "5T", "5D", "4T"], + takedown: ["7L33", "6L33", "5L33", "4L33"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["6T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L23", "6L23", "5L23", "4L23"], + wingattack: ["7L9", "6L9", "5L9", "5D", "4L9"], + workup: ["7M", "5M"], + }}, + staraptor: {learnset: { + aerialace: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + agility: ["7L41", "6L41", "5L41", "4L41"], + aircutter: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + bravebird: ["7L49", "6L49", "5L49", "4L49"], + captivate: ["4M"], + closecombat: ["7L1", "6L34", "5L34", "4L34"], + confide: ["7M", "6M"], + defog: ["4M"], + doubleteam: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L18", "6T", "6L18", "5T", "5L18", "4T", "4L18"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + finalgambit: ["7L57", "6L57", "5L57"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L5", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + skyattack: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["6T", "5T", "4T"], + takedown: ["7L33", "6L33", "5L33", "4L33"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["6T"], + uturn: ["7M", "6M", "5M", "4M"], + whirlwind: ["7L23", "6L23", "5L23", "4L23"], + wingattack: ["7L9", "7L1", "6L1", "5L1", "4L1"], + workup: ["7M", "5M"], + }}, + bidoof: {learnset: { + amnesia: ["7L41", "6L29", "5L29", "4L29"], + aquatail: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["7L25"], + curse: ["7L49", "6L45", "5L45", "4L45"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L5", "7E", "6L9", "6E", "5L9", "5E", "4L9", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E", "4M"], + facade: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7E", "6E", "5E", "4E"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L5", "5L5", "4L5"], + headbutt: ["7L13", "6L17", "5L17", "4T", "4L17"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperfang: ["7L17", "6L21", "5L21", "4L21"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + lastresort: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + odorsleuth: ["7E", "6E", "5E", "4E"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["7E", "6E", "5E"], + rocksmash: ["6M", "5M", "4M"], + rollout: ["7L9", "7E", "6L13", "6E", "5L13", "5E", "4T", "4L13", "4E"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "5D", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + skullbash: ["7E", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7L33", "6T", "6L37", "5T", "5L37", "4T", "4L37"], + superpower: ["7L45", "6T", "6L41", "5T", "5L41", "4T", "4L41"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L37"], + tackle: ["7L1", "6L1", "5L1", "5D", "4L1", "4S0"], + takedown: ["7L29", "6L33", "5L33", "4L33"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + watersport: ["7E", "6E", "5E", "4E"], + workup: ["7M", "5M"], + yawn: ["7L21", "6L25", "5L25", "4L25"], + }}, + bibarel: {learnset: { + amnesia: ["7L48", "6L33", "5L33", "4L33"], + aquajet: ["7L1"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["7L28"], + curse: ["7L58", "6L53", "5L53", "4L53"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L5", "6L9", "5L9", "4L9"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + headbutt: ["7L13", "6L18", "5L18", "4T", "4L18"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hyperfang: ["7L18", "6L23", "5L23", "4L23"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + lastresort: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + rollout: ["7L9", "6L13", "5L13", "4T", "4L13"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["7L38", "6T", "6L43", "5T", "5L43", "4T", "4L43"], + superpower: ["7L53", "6T", "6L48", "5T", "5L48", "4T", "4L48"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L43"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L33", "6L38", "5L38", "4L38"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L1", "6L15", "5L15", "4L15"], + waterpulse: ["6T", "4M"], + whirlpool: ["4M"], + workup: ["7M", "5M"], + yawn: ["7L23", "6L28", "5L28", "4L28"], + }}, + kricketot: {learnset: { + bide: ["7L1", "6L1", "5L1", "4L1"], + bugbite: ["7L16", "6T", "6L16", "5T", "5L16", "4T", "4L16"], + endeavor: ["6T", "5T", "5D", "4T"], + growl: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + snore: ["6T", "5T", "4T"], + stringshot: ["4T"], + strugglebug: ["7L6", "6M", "6L6", "5L6", "5D"], + uproar: ["6T", "5T", "5D", "4T"], + }}, + kricketune: {learnset: { + absorb: ["7L14"], + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + bide: ["7L1", "6L1", "5L1", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["6T", "5T", "4T"], + bugbuzz: ["7L46", "6L46", "5L46", "4L34"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L36", "6L36"], + flash: ["6M", "5M", "4M"], + focusenergy: ["7L22", "6L22", "5L22", "4L22"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L1", "6L10", "5L10", "4T", "4L10"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + healbell: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T", "4T"], + leechlife: ["7M", "6L14", "5L14", "4L14"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L42", "6L42", "5L42", "4L42"], + perishsong: ["7L50", "6L50", "5L50", "4L38"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + screech: ["7L34", "6L34", "5L34", "4L30"], + secretpower: ["6M", "4M"], + silverwind: ["4M"], + sing: ["7L18", "6L18", "5L18", "4L18"], + slash: ["7L26", "6L26", "5L26", "4L26"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stickyweb: ["7L44", "6L44"], + strength: ["6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L38", "6M", "6L38", "5M", "5L38", "4M", "4L38"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + xscissor: ["7M", "7L30", "6M", "6L30", "5M", "5L30", "4M", "4L26"], + }}, + shinx: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + babydolleyes: ["7L11", "6L11"], + bite: ["7L17", "6L17", "5L17", "4L13"], + captivate: ["4M"], + charge: ["7L9", "6L9", "5L9", "5D", "4L9"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + crunch: ["7L33", "6L33", "5L33", "4L29"], + discharge: ["7L41", "6L41", "5L41", "4L41"], + doublekick: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M", "4M"], + eerieimpulse: ["7E", "6E"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + faketears: ["7E", "6E"], + firefang: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + helpinghand: ["7E", "6T", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + howl: ["7E", "6E", "5E", "4E"], + icefang: ["7E", "6E", "5E", "4E"], + irontail: ["6T", "5T", "4M"], + leer: ["7L5", "6L5", "5L5", "4L5"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "5D", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7E", "6E", "5E", "5D", "4E"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L21", "6M", "6L21", "5M", "5L21", "4M", "4L21"], + round: ["7M", "6M", "5M"], + scaryface: ["7L37", "6L37", "5L37", "4L37"], + secretpower: ["6M", "4M"], + shockwave: ["7E", "6T", "6E", "5E", "4M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L25"], + swift: ["7E", "6E", "5E", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7E", "6E", "5E", "4E"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L29", "7E", "6L29", "6E", "5L29", "5E", "4L29", "4E"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + }}, + luxio: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L18", "6L18", "5L18", "4L13"], + captivate: ["4M"], + charge: ["7L9", "6L9", "5L9", "4L9"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + crunch: ["7L38", "6L38", "5L38", "4L33"], + discharge: ["7L48", "6L48", "5L48", "4L48"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["6T", "5T", "4M"], + leer: ["7L5", "7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "4M", "4L23"], + round: ["7M", "6M", "5M"], + scaryface: ["7L43", "6L43", "5L43", "4L43"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L33", "6L33", "5L33", "4L33"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + }}, + luxray: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L18", "6L18", "5L18", "4L13"], + captivate: ["4M"], + charge: ["7L9", "7L1", "6L1", "5L1", "4L1"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + crunch: ["7L42", "6L42", "5L42", "4L35"], + discharge: ["7L56", "6L56", "5L56", "4L56"], + doubleteam: ["7M", "6M", "5M", "4M"], + electricterrain: ["7L67", "7L1", "6L1"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + irontail: ["6T", "5T", "4M"], + leer: ["7L5", "7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "4M", "4L23"], + round: ["7M", "6M", "5M"], + scaryface: ["7L49", "6L49", "5L49", "4L49"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L35", "6L35", "5L35", "4L35"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L63", "6M", "6L63", "5M", "5L63"], + }}, + cranidos: {learnset: { + ancientpower: ["7L33", "6L33", "5L33", "4T", "4L28"], + assurance: ["7L24", "6L24", "5L24", "4L24"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L28", "6L28", "5L28"], + confide: ["7M", "6M"], + crunch: ["7E", "6E", "5E", "5S0", "4E"], + curse: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["6T", "5T", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "5D", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L6", "6L6", "5L6", "4L6"], + frustration: ["7M", "6M", "5M", "4M"], + hammerarm: ["7E", "6E", "5E", "4E"], + headbutt: ["7L1", "6L1", "5L1", "5S0", "5D", "4T", "4L1"], + headsmash: ["7L46", "6L46", "5L46", "4L43"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + ironhead: ["7E", "6T", "6E", "5T", "5E", "5D", "4T"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], + leer: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L10", "6L10", "5L10", "5S0", "4L10"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L19", "6L19", "5L19", "4L19"], + screech: ["7L42", "6L42", "5L42", "4L37"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + slam: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stomp: ["7E", "6E", "5E", "4E"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + takedown: ["7L15", "6L15", "5L15", "5S0", "4L15"], + thief: ["7M", "6M", "5M", "4M"], + thrash: ["7E", "6E", "5E", "4E"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + whirlwind: ["7E", "6E", "5E", "4E"], + zenheadbutt: ["7L37", "6T", "6L37", "5T", "5L37", "4T", "4L33"], + }}, + rampardos: {learnset: { + ancientpower: ["7L36", "6L36", "5L36", "4T", "4L28"], + assurance: ["7L24", "6L24", "5L24", "4L24"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + chipaway: ["7L28", "6L28", "5L28"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endeavor: ["7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L6", "7L1", "6L6", "5L6", "4L6"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["7L1", "6L1", "5L1", "4T", "4L1"], + headsmash: ["7L58", "6L58", "5L58", "4L52"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L10", "7L1", "6L10", "5L10", "4L10"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L19", "6L19", "5L19", "4L19"], + screech: ["7L51", "6L51", "5L51", "4L43"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + whirlpool: ["4M"], + zenheadbutt: ["7L43", "6T", "6L43", "5T", "5L43", "4T", "4L36"], + }}, + shieldon: {learnset: { + ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["7E", "6E", "5E", "5S0", "4E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "5D", "4E"], + curse: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["7L33", "6L33", "5L33", "4M", "4L33"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + fissure: ["7E", "6E", "5E", "5D", "4E"], + flamethrower: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + focusenergy: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M"], + guardsplit: ["7E", "6E"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + heavyslam: ["7L46", "6L46", "5L46"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19"], + ironhead: ["7L42", "6T", "6L42", "5T", "5L42", "4T", "4L43"], + irontail: ["6T", "5T", "4M"], + magnetrise: ["6T", "5T", "4T"], + metalburst: ["7L37", "6L37", "5L37", "4L37"], + metalsound: ["7L10", "6L10", "5L10", "5S0", "4L10"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "5S0", "5D", "4M", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockblast: ["7E", "6E", "5E", "4E"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7E", "6E", "5E", "4E"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "5S0", "4L15"], + taunt: ["7M", "7L6", "6M", "6L6", "5M", "5L6", "4M", "4L6"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + wideguard: ["7E", "6E", "5E"], + }}, + bastiodon: {learnset: { + ancientpower: ["7L28", "6L28", "5L28", "4T", "4L28"], + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + block: ["7L1", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["7L36", "6L36", "5L36", "4M", "4L36"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heavyslam: ["7L58", "6L58", "5L58"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4T", "4L19"], + ironhead: ["7L51", "6T", "6L51", "5T", "5L51", "4T", "4L52"], + irontail: ["6T", "5T", "4M"], + magiccoat: ["6T", "5T", "4T"], + magnetrise: ["6T", "5T", "4T"], + metalburst: ["7L43", "6L43", "5L43", "4L43"], + metalsound: ["7L10", "7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + taunt: ["7M", "7L6", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + }}, + burmy: {learnset: { + bugbite: ["7L15", "6T", "6L15", "5T", "5L15", "5D", "4T", "4L15"], + electroweb: ["6T", "5T"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5L20", "4L20"], + protect: ["7M", "7L1", "6M", "6L1", "5L1", "5D", "4L1"], + snore: ["6T", "5T", "5D", "4T"], + stringshot: ["4T"], + tackle: ["7L10", "6L10", "5L10", "4L10"], + }}, + wormadam: {learnset: { + attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50"], + bulletseed: ["4M"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + confide: ["7M", "6M"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["6T", "5T"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flail: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L29", "6L29", "5L29", "4L29"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + leafstorm: ["7L47", "6L47", "5L47", "4L47"], + naturalgift: ["4M"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L26", "6L26", "5L26", "4L26"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T", "4T"], + }}, + wormadamsandy: {learnset: { + attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + confide: ["7M", "6M"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + electroweb: ["6T", "5T"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fissure: ["7L47", "6L47", "5L47", "4L47"], + flail: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + harden: ["7L29", "6L29", "5L29", "4L29"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockblast: ["7L26", "6L26", "5L26", "4L26"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + }}, + wormadamtrash: {learnset: { + attract: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50"], + captivate: ["7L35", "6L35", "5L35", "4M", "4L35"], + confide: ["7M", "6M"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["6T", "5T"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flail: ["7L38", "6L38", "5L38", "4L38"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + gyroball: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["7L47", "6T", "6L47", "5T", "5L47", "4T", "4L47"], + magnetrise: ["6T", "5T", "4T"], + metalburst: ["7L1"], + metalsound: ["7L29", "6L29", "5L29", "4L29"], + mirrorshot: ["7L26", "6L26", "5L26", "4L26"], + naturalgift: ["4M"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L1", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + venoshock: ["7M", "6M", "5M"], + }}, + mothim: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + airslash: ["7L41", "6L41", "5L41", "4L41"], + attract: ["7M", "6M", "5M", "4M"], + bugbite: ["7L15", "7L1", "6T", "6L15", "5T", "5L15", "4T", "4L15"], + bugbuzz: ["7L50", "6L47", "5L47", "4L47"], + camouflage: ["7L35", "6L35", "5L35", "4L35"], + captivate: ["4M"], + confide: ["7M", "6M"], + confusion: ["7L23", "6L23", "5L23", "4L23"], + defog: ["4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + electroweb: ["6T", "5T"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L26", "6L26", "5L26", "4L26"], + hiddenpower: ["7M", "7L20", "6M", "6L20", "5M", "5L20", "4M", "4L20"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + lunge: ["7L47"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonpowder: ["7L29", "6L29", "5L29", "4L29"], + protect: ["7M", "7L10", "7L1", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + psybeam: ["7L32", "6L32", "5L32", "4L32"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L44"], + psychup: ["7M", "6M", "5M", "4M"], + quiverdance: ["7L1", "6L50", "5L50"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["7L38", "6L38", "5L38", "4M", "4L38"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + }}, + combee: {learnset: { + aircutter: ["5D", "4T"], + bugbite: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + bugbuzz: ["7L29", "6L29", "5L29"], + endeavor: ["6T", "5T", "4T"], + gust: ["7L1", "6L1", "5L1", "5D", "4L1"], + mudslap: ["4T"], + ominouswind: ["4T"], + snore: ["6T", "5T", "4T"], + stringshot: ["4T"], + sweetscent: ["7L1", "6L1", "5L1", "4L1"], + swift: ["4T"], + tailwind: ["6T", "5T", "5D", "4T"], + }}, + vespiquen: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + airslash: ["7L37", "6L37", "5L37"], + attackorder: ["7L45", "6L45", "5L37", "4L37"], + attract: ["7M", "6M", "5M", "4M"], + bugbite: ["6T", "5T", "4T"], + captivate: ["7L41", "6L41", "5L33", "4M", "4L33"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L7", "4L7"], + cut: ["6M", "5M", "4M"], + defendorder: ["7L17", "6L17", "5L13", "4L13"], + defog: ["4M"], + destinybond: ["7L53", "7L1", "6L1", "5L43", "4L43"], + doubleteam: ["7M", "6M", "5M", "4M"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L57", "7L1", "6L1"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7L5", "6L5", "5L9", "4T", "4L9"], + furyswipes: ["7L13", "6L13", "5L19", "4L19"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L1", "6L1", "5L1", "4L1"], + healorder: ["7L29", "6L29", "5L25", "4L25"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + poisonsting: ["7L1", "6L1", "5L3", "4L3"], + powergem: ["7L25", "6L25", "5L21", "4L21"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L9", "6L9", "5L15", "4L15"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roost: ["7M", "6M", "5T", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + slash: ["7L1", "6L21", "5L31", "4L31"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + stringshot: ["4T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L49", "6M", "6L49", "5M", "5L39", "4M", "4L39"], + sweetscent: ["7L1", "6L1", "5L1", "4L1"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7L33", "6M", "6L33", "5M", "5L27", "4M", "4L27"], + uturn: ["7M", "6M", "5M", "4M"], + venoshock: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + pachirisu: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bestow: ["7E", "6E", "5E"], + bide: ["7L1", "6L1", "5L1", "4L1"], + bite: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + charge: ["7E", "6E", "5E"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L9", "6L9", "5L9", "4L9"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E", "5D", "4E"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + discharge: ["7L41", "6L41", "5L41", "4L29"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + electroball: ["7L25", "6L25", "5L25"], + electroweb: ["6T"], + endure: ["7L17", "6L17", "5L17", "4M", "4L17"], + facade: ["7M", "6M", "5M", "4M"], + faketears: ["7E", "6E", "5E", "4E"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + flatter: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + followme: ["7E", "6E", "6S0", "5E"], + frustration: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growl: ["7L1", "6L1", "5L1", "4L1"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperfang: ["7L49", "6L49", "5L49"], + iondeluge: ["7E", "6E"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], + lastresort: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L37"], + lightscreen: ["7M", "6M", "5M", "4M"], + magnetrise: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + nuzzle: ["7L19", "6L19", "6S0"], + protect: ["7M", "6M", "6S0", "5M", "4M"], + quickattack: ["7L5", "6L5", "5L5", "5D", "4L5"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["7E", "6E", "5E", "4T", "4E"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shockwave: ["6T", "5D", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spark: ["7L13", "6L13", "5L13", "4L13"], + substitute: ["7M", "6M", "5M", "4M"], + superfang: ["7L37", "6T", "6L37", "6S0", "5T", "5L37", "4T", "4L33"], + swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7L29", "6L29", "5L29", "4L25"], + swift: ["7L21", "6L21", "5L21", "4T", "4L21"], + tailwhip: ["7E", "6E", "5E"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + voltswitch: ["7M", "6M", "5M"], + }}, + buizel: {learnset: { + agility: ["7L41", "6L41", "5L28", "4L28"], + aquajet: ["7L24", "6L24", "5L21", "4L21"], + aquaring: ["7E", "6E", "5E"], + aquatail: ["7L38", "7E", "6T", "6L38", "6E", "5T", "5L55", "5E"], + attract: ["7M", "6M", "5M", "4M"], + batonpass: ["7E", "6E", "5E", "4E"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doublehit: ["7L27", "6L27", "5L27"], + doubleslap: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["7E", "6E", "5E", "4E"], + furyswipes: ["7E", "6E", "5E", "4E"], + growl: ["7L4", "6L4", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hydropump: ["7L45", "6L45", "5L45"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + mefirst: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E", "4T", "4E"], + naturalgift: ["4M"], + odorsleuth: ["7E", "6E", "5E", "4E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L18", "6L18", "5L10", "4L10"], + quickattack: ["7L11", "6L11", "5L3", "4L3"], + raindance: ["7M", "6M", "5M", "4M"], + razorwind: ["7L35", "6L35", "5L45", "4L45"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + slash: ["7E", "6E", "5E", "5D", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + soak: ["7E", "6E"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "6L21", "5L15", "4T", "4L15"], + switcheroo: ["7E", "6E", "5E"], + tailslap: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L15", "6L15", "5L6", "5D", "4L6"], + waterpulse: ["6T", "5D", "4M"], + watersport: ["7L7", "6L7", "5L1", "5D", "4L1"], + whirlpool: ["7L31", "6L31", "5L36", "4M", "4L36"], + }}, + floatzel: {learnset: { + agility: ["7L51", "6L51", "5L29", "4L29"], + aquajet: ["7L24", "6L24", "5L21", "4L21"], + aquatail: ["7L46", "6T", "6L46", "5T", "5L62", "4T"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulkup: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L1", "6L1", "5L26", "4L26"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doublehit: ["7L29", "6L29", "5L29"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L4", "7L1", "6L1", "5L1", "4L1"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hydropump: ["7L57", "6L57", "5L57"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + lowkick: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L18", "6L18", "5L10", "4L10"], + quickattack: ["7L11", "7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + razorwind: ["7L41", "6L41", "5L50", "4L50"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + sonicboom: ["7L1", "6L1", "5L1", "4L1"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "6L21", "5L15", "4T", "4L15"], + taunt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L15", "6L15", "5L6", "4L6"], + waterpulse: ["6T", "4M"], + watersport: ["7L7", "7L1", "6L1", "5L1", "4L1"], + whirlpool: ["7L35", "6L35", "5L39", "4M", "4L39"], + }}, + cherubi: {learnset: { + aromatherapy: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + bulletseed: ["5D", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + flowershield: ["7E", "6E"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E", "4E"], + growth: ["7L7", "6L7", "5L7", "4L7"], + healingwish: ["7E", "6E", "5E"], + healpulse: ["7E", "6E", "5E", "5D"], + helpinghand: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + hiddenpower: ["7M", "6M", "5M", "4M"], + leechseed: ["7L10", "6L10", "5L10", "5D", "4L10"], + luckychant: ["7L40", "6L40", "5L40", "4L40"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19"], + morningsun: ["7L1", "6L1", "5L1"], + naturalgift: ["7E", "6E", "5E", "4M"], + naturepower: ["7M", "7E", "6M", "6E", "5E", "4E"], + petalblizzard: ["7L47", "6L47"], + protect: ["7M", "6M", "5M", "4M"], + razorleaf: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["7E", "6E", "5E", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + swagger: ["7M", "6M", "5M", "4M"], + sweetscent: ["7E", "6E", "5E", "4E"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L31", "6L31", "5L31", "4L31"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + weatherball: ["7E", "6E", "5E", "4E"], + worryseed: ["7L28", "6T", "6L28", "5T", "5L28", "4T", "4L28"], + }}, + cherrim: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + growth: ["7L7", "7L1", "6L1", "5L1", "4L1"], + helpinghand: ["7L13", "6T", "6L13", "5T", "5L13", "4T", "4L13"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + leechseed: ["7L10", "7L1", "6L10", "5L10", "4L10"], + luckychant: ["7L48", "6L48", "5L48", "4L48"], + magicalleaf: ["7L19", "6L19", "5L19", "4L19"], + morningsun: ["7L1", "6L1", "5L1"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L50", "6L50"], + petaldance: ["7L1", "6L25", "5L25", "4L25"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "4M", "4L43"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L35", "6L35", "5L35", "4L35"], + toxic: ["7M", "6M", "5M", "4M"], + worryseed: ["7L30", "6T", "6L30", "5T", "5L30", "4T", "4L30"], + }}, + shellos: {learnset: { + acidarmor: ["7E", "6E"], + amnesia: ["7E", "6E", "5E", "4E"], + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + bodyslam: ["7L29", "6L29", "5L29", "4L29"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + curse: ["7E", "6E", "5E", "4E"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fissure: ["7E", "6E", "5E", "4E"], + frustration: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + harden: ["7L4", "6L4", "5L4", "4L4"], + headbutt: ["4T"], + hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + memento: ["7E", "6E", "5E", "4E"], + mirrorcoat: ["7E", "6E", "5E", "4E"], + mist: ["7E", "6E", "5E"], + mudbomb: ["7L11", "6L11", "5L11", "4L11"], + muddywater: ["7L37", "6L37", "5L37", "4L37"], + mudslap: ["7L1", "6L1", "5L1", "5D", "4T", "4L1"], + mudsport: ["7L2", "6L2", "5L2", "4L2"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + recover: ["7L46", "6L46", "5L46", "4L46"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "5D", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludge: ["7E", "6E", "5E", "4E"], + snore: ["6T", "5T", "4T"], + spitup: ["7E", "6E", "5E", "4E"], + stockpile: ["7E", "6E", "5E", "4E"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + trumpcard: ["7E", "6E", "5E", "4E"], + waterpulse: ["7L7", "6T", "6L7", "5L7", "4M", "4L7"], + whirlpool: ["4M"], + yawn: ["7E", "6E", "5E", "5D", "4E"], + }}, + gastrodon: {learnset: { + ancientpower: ["4T"], + attract: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + block: ["6T", "5T", "4T"], + bodyslam: ["7L29", "6L29", "5L29", "4L29"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + dig: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + harden: ["7L4", "7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + infestation: ["7M", "6M"], + mudbomb: ["7L11", "6L11", "5L11", "4L11"], + muddywater: ["7L41", "6L41", "5L41", "4L41"], + mudslap: ["7L1", "6L1", "5L1", "4T", "4L1"], + mudsport: ["7L2", "7L1", "6L1", "5L1", "4L1"], + naturalgift: ["4M"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L22", "6M", "6L22", "5M", "5L22", "4M", "4L22"], + recover: ["7L54", "6L54", "5L54", "4L54"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + stringshot: ["4T"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7L7", "7L1", "6T", "6L1", "5L1", "4M", "4L1"], + whirlpool: ["4M"], + }}, + drifloon: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aircutter: ["4T"], + amnesia: ["7L40", "6L40", "5L40"], + astonish: ["7L4", "6L4", "5L6", "4L6"], + attract: ["7M", "6M", "5M", "4M"], + batonpass: ["7L44", "6L44", "5L38", "4L33"], + bind: ["6T", "5T"], + bodyslam: ["7E", "6E", "5E", "4E"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + defog: ["7E", "6E", "5E", "4M"], + destinybond: ["7E", "6E", "5E", "4E"], + disable: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "7L50", "6M", "6L50", "5M", "5L46", "4M", "4L43"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + focusenergy: ["7L13", "6L13", "5L14", "4L14"], + frustration: ["7M", "6M", "5M", "4M"], + gust: ["7L8", "6L8", "5L11", "4L11"], + gyroball: ["7M", "6M", "5M", "4M"], + haze: ["7E", "6E", "5E", "4E"], + hex: ["7L27", "6L27", "5L22"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypnosis: ["7E", "6E", "5E", "5D", "4E"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + magiccoat: ["6T", "5T", "4T"], + memento: ["7E", "6E", "5E", "4E"], + minimize: ["7L1", "6L1", "5L1", "5D", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["7L20", "6L20", "5L33", "4T", "4L30"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7L36", "6M", "6L36", "5M", "5L43", "4M", "4L38"], + shockwave: ["6T", "4M"], + silverwind: ["4M"], + skillswap: ["6T", "5T", "5D", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + spitup: ["7L32", "6L32", "5L30", "4L27"], + stockpile: ["7L25", "6L25", "5L27", "4L22"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7L32", "6L32", "5L30", "4L27"], + swift: ["4T"], + tailwind: ["7E", "6T", "6E", "5T", "4T"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + weatherball: ["7E", "6E", "5E", "4E"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + drifblim: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aircutter: ["4T"], + amnesia: ["7L46", "6L46", "5L46"], + astonish: ["7L4", "7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + batonpass: ["7L52", "6L52", "5L44", "4L37"], + bind: ["6T", "5T"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + defog: ["4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "7L60", "6M", "6L60", "5M", "5L56", "4M", "4L51"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L13", "6L13", "5L14", "4L14"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L8", "7L1", "6L1", "5L1", "4L1"], + gyroball: ["7M", "6M", "5M", "4M"], + hex: ["7L27", "6L27", "5L22"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + magiccoat: ["6T", "5T", "4T"], + minimize: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["7L20", "6L20", "5L37", "4T", "4L32"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "7L16", "6M", "6L16", "5M", "5L17", "4M", "4L17"], + phantomforce: ["7L65", "7L1", "6L1"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "7L40", "6M", "6L40", "5M", "5L51", "4M", "4L44"], + shockwave: ["6T", "4M"], + silverwind: ["4M"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + spitup: ["7L34", "6L34", "5L32", "4L27"], + stockpile: ["7L25", "6L25", "5L27", "4L22"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7L34", "6L34", "5L32", "4L27"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + buneary: {learnset: { + afteryou: ["7L43", "6T", "6L43", "5T", "5L43"], + agility: ["7L33", "6L33", "5L33", "4L33"], + attract: ["7M", "6M", "5M", "4M", "4E"], + babydolleyes: ["7L13", "6L10"], + batonpass: ["7L26", "6L26", "5L26", "4L26"], + bounce: ["7L56", "6T", "6L56", "5T", "5L56", "4T", "4L46"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L46", "6L46", "5L46", "4L43"], + circlethrow: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + copycat: ["7E", "6E", "5E"], + cosmicpower: ["7E", "6E"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L1", "6L1", "5L1", "4L1"], + dig: ["6M", "5M", "4M"], + dizzypunch: ["7L36", "6L36", "5L36", "4L36"], + doublehit: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "5D", "4M"], + encore: ["7E", "6E", "5E", "4E"], + endeavor: ["6T", "5T", "4T"], + endure: ["7L6", "6L6", "5L6", "4M", "4L6"], + entrainment: ["7L50", "6L50", "5L53"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["7E", "6E", "5E", "5D", "4E"], + faketears: ["7E", "6E", "5E", "4E"], + firepunch: ["7E", "6T", "6E", "5T", "5E", "4E"], + flail: ["7E", "6E", "5E", "4E"], + fling: ["7M", "6M", "5M", "4M"], + focuspunch: ["7E", "6T", "6E", "5E", "4M"], + foresight: ["7L1", "6L1", "5L1", "5D", "4L1"], + frustration: ["7M", "7L1", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healingwish: ["7L63", "6L63", "5L63", "4L53"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7E", "6T", "6E", "5T", "5E", "4E"], + irontail: ["6T", "5T", "4M"], + jumpkick: ["7L23", "6L23", "5L23", "4L23"], + lastresort: ["6T", "5T", "4T"], + lowkick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + magiccoat: ["6T", "5T", "4T"], + mudslap: ["4T"], + mudsport: ["7E", "6E"], + naturalgift: ["4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L16", "6L16", "5L16", "4L16"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + skyuppercut: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + splash: ["7L1", "6L1", "5L1", "4L1"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7E", "6E", "5E", "4E"], + swift: ["4T"], + switcheroo: ["7E", "6E", "5E", "4E"], + teeterdance: ["7E", "6E"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E", "4E"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + }}, + lopunny: {learnset: { + afteryou: ["7L43", "6T", "6L43", "5T", "5L43"], + agility: ["7L33", "6L33", "5L33", "4L33"], + attract: ["7M", "6M", "5M", "4M"], + babydolleyes: ["7L13"], + batonpass: ["7L26", "6L26", "5L26", "4L26"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7L56", "7L1", "6T", "6L1", "5T", "5L56", "4T", "4L46"], + brutalswing: ["7M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L46", "6L46", "5L46", "4L43"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + defensecurl: ["7L1", "6L1", "5L1", "4L1"], + dig: ["6M", "5M", "4M"], + dizzypunch: ["7L36", "6L36", "5L36", "4L36"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "4M"], + endeavor: ["6T", "5T", "4T"], + endure: ["7L6", "6L6", "5L6", "4M", "4L6"], + entrainment: ["7L53", "6L53", "5L53"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + healingwish: ["7L63", "7L1", "6L1", "5L63", "4L53"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + highjumpkick: ["7L66", "6L66"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + jumpkick: ["7L23", "6L23", "5L23", "4L23"], + lastresort: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + mirrorcoat: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L16", "6L16", "5L16", "4L16"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "7L1", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + rocksmash: ["6M", "5M", "4M"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + splash: ["7L1", "6L1", "5L1", "4L1"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + }}, + glameow: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + assist: ["7L29", "6L29", "5L29", "4L29"], + assurance: ["7E", "6E", "5E", "5D", "4E"], + attract: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "4M", "4L45"], + bite: ["7E", "6E", "5E", "4E"], + captivate: ["7L32", "6L32", "5L32", "4M", "4L32"], + charm: ["7L25", "6L25", "5L25", "4L25"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["7L1", "6L1", "5L1", "5D", "4L1"], + faketears: ["7E", "6E", "5E", "4E"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L20", "6L20", "5L20", "4L20"], + growl: ["7L8", "6L8", "5L8", "4L8"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L48", "6M", "6L48", "5M", "5L48"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L13", "6L13", "5L13", "4L13"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7E", "6T", "6E", "5T", "5E", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7L50", "6L50"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + quickattack: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E", "4E"], + scratch: ["7L5", "6L5", "5L5", "4L5"], + secretpower: ["6M", "5D", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + slash: ["7L37", "6L37", "5L37", "4L37"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["7E", "6T", "6E", "5T", "5E", "4M"], + snore: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L41", "6L41", "5L41", "4T", "4L41"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tailwhip: ["7E", "6E", "5E", "4E"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + wakeupslap: ["7E", "6E", "5E"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + }}, + purugly: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + assist: ["7L29", "6L29", "5L29", "4L29"], + attract: ["7M", "7L52", "6M", "6L52", "5M", "5L52", "4M", "4L53"], + bodyslam: ["7L45", "6L45", "5L45", "4L45"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["7L32", "6L32", "5L32", "4M", "4L32"], + charm: ["7L25", "6L25", "5L25", "4L25"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["7L1", "6L1", "5L1", "4L1"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flash: ["6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L20", "6L20", "5L20", "4L20"], + gigaimpact: ["7M", "6M", "5M", "4M"], + growl: ["7L8", "7L1", "6L1", "5L1", "4L1"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L60", "6M", "6L60", "5M", "5L60"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + hypnosis: ["7L13", "6L13", "5L13", "4L13"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + scratch: ["7L5", "7L1", "6L1", "5L1", "4L1"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + slash: ["7L37", "6L37", "5L37", "4L37"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "7L1", "6M", "6L38", "5M", "5L38", "4M", "4L38"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + workup: ["7M", "5M"], + }}, + stunky: {learnset: { + acidspray: ["7L19", "6L32", "5L32"], + astonish: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + belch: ["7L43", "6L46"], + bite: ["7L21"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7E", "6E", "5E", "4E"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "7L45", "6M", "6L49", "5M", "5L49", "4M", "4L44"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L15", "6L18", "5L18", "4L18"], + fireblast: ["7M", "6M", "5M", "4M"], + flameburst: ["7E", "6E", "5E"], + flamethrower: ["7M", "6M", "5M", "4M"], + focusenergy: ["7L1", "6L1", "5L1", "4L1"], + foulplay: ["7E", "6T", "6E", "5T", "5E", "5D"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L9", "6L10", "5L10", "4L10"], + haze: ["7E", "6E", "5E", "4E"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], + leer: ["7E", "6E", "5E", "4E"], + memento: ["7L33", "6L43", "5L43", "4L37"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L31", "6L37", "5L37", "4L31"], + payback: ["7M", "6M", "5M", "4M"], + playrough: ["7E", "6E"], + poisongas: ["7L3", "6L4", "5L4", "4L4"], + protect: ["7M", "6M", "5M", "4M"], + punishment: ["7E", "6E", "5E", "4E"], + pursuit: ["7E", "6E", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E", "4E"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L7", "6L7", "5L7", "5D", "4L7"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L25", "6L22", "5L22", "4L22"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + smog: ["7E", "6E", "5E", "4E"], + smokescreen: ["7L13", "6L14", "5L14", "4L14"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L39", "5D", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L20"], + venomdrench: ["7L37"], + venoshock: ["7M", "6M", "5M"], + }}, + skuntank: {learnset: { + acidspray: ["7L19", "6L32", "5L32"], + attract: ["7M", "6M", "5M", "4M"], + belch: ["7L43", "6L56"], + bite: ["7L21"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "7L45", "6M", "6L61", "5M", "5L61", "4M", "4L52"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L15", "6L18", "5L18", "4L18"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "7L1", "6M", "6L34", "5M", "5L34", "4M", "4L34"], + focusenergy: ["7L1", "6L1", "5L1", "4L1"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + furyswipes: ["7L9", "6L10", "5L10", "4L10"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + memento: ["7L33", "6L51", "5L51", "4L41"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L31", "6L41", "5L41", "4L31"], + payback: ["7M", "6M", "5M", "4M"], + poisongas: ["7L3", "7L1", "6L1", "5L1", "4L1"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1", "4L1"], + screech: ["7L7", "7L1", "6L7", "5L7", "4L7"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L25", "6L22", "5L22", "4L22"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + smokescreen: ["7L13", "6L14", "5L14", "4L14"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L39", "4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L20"], + venomdrench: ["7L37"], + venoshock: ["7M", "6M", "5M"], + }}, + bronzor: {learnset: { + ancientpower: ["4T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L11", "6L11", "5L11", "4L14"], + confusion: ["7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + extrasensory: ["7L39", "6L39", "5L19", "4L19"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L21", "6L21", "5L21", "4L41"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L29", "6L29", "5L29", "4L37"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "5D", "4T"], + gyroball: ["7M", "7L35", "6M", "6L35", "5M", "5L35", "4M", "4L35"], + healblock: ["7L45", "6L45", "5L45", "4L52"], + heavyslam: ["7L49", "6L49", "5L49"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypnosis: ["7L5", "6L5", "5L5", "5D", "4L7"], + imprison: ["7L9", "6L9", "5L9", "4L12"], + irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4L26"], + lightscreen: ["7M", "6M", "5M", "4M"], + metalsound: ["7L31", "6L31", "5L31"], + naturalgift: ["4M"], + payback: ["7M", "7L41", "6M", "6L41", "5M", "5L49", "4M", "4L49"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L15", "6L15", "5L15"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L30"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "5D", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["5M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + }}, + bronzong: {learnset: { + ancientpower: ["4T"], + block: ["7L1", "6T", "6L33", "5T", "5L33", "4T", "4L33"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L11", "6L11", "5L11", "4L14"], + confusion: ["7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + explosion: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L42", "6L42", "5L19", "4L19"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L21", "6L21", "5L21", "4L50"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L29", "6L29", "5L29", "4L43"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + gyroball: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L38"], + healblock: ["7L52", "6L52", "5L52", "4L67"], + heavyslam: ["7L58", "6L58", "5L58"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypnosis: ["7L5", "7L1", "6L1", "5L1", "4L1"], + imprison: ["7L9", "7L1", "6L1", "5L1", "4L1"], + irondefense: ["7L19", "6T", "6L19", "5T", "5L19", "4L26"], + ironhead: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + metalsound: ["7L31", "6L31", "5L31"], + naturalgift: ["4M"], + payback: ["7M", "7L46", "6M", "6L46", "5M", "5L46", "4M", "4L61"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L15", "6L15", "5L15"], + raindance: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + rollout: ["4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "4M", "4L30"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + telekinesis: ["5M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + chatot: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7E", "6E", "5E", "4E"], + aircutter: ["7E", "6E", "5E", "4T"], + attract: ["7M", "6M", "5M", "4M"], + boomburst: ["7E", "6E"], + captivate: ["4M"], + chatter: ["7L21", "7L1", "6L1", "5L21", "4L21", "4S0"], + confide: ["7M", "7L1", "6M", "6L1"], + defog: ["7E", "6E", "5E", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + encore: ["7E", "6E", "5E", "4E"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + featherdance: ["7L50", "6L50", "5L53", "4L41"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furyattack: ["7L17", "6L17", "5L17", "4L17", "4S0"], + growl: ["7L5", "6L5", "5L5", "4L5"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hypervoice: ["7L57", "7L1", "6T", "6L1", "5T", "5L57", "4L45"], + mimic: ["7L33", "6L33", "5L33", "4L29"], + mirrormove: ["7L9", "6L9", "5L9", "5D", "4L9", "4S0"], + mudslap: ["4T"], + nastyplot: ["7E", "6E", "5E", "5D", "4E"], + naturalgift: ["4M"], + nightshade: ["7E", "6E", "5E", "4E"], + ominouswind: ["4T"], + peck: ["7L1", "6L1", "5L1", "4L1"], + pluck: ["5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "5D", "4T"], + roost: ["7M", "7L41", "6M", "6L41", "5T", "5L41", "4M", "4L33"], + round: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + secretpower: ["6M", "4M"], + sing: ["7L13", "6L13", "5L13", "4L13"], + skyattack: ["6T", "5T", "4T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + snore: ["6T", "5T", "4T"], + steelwing: ["7M", "7E", "6M", "6E", "5E", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + supersonic: ["7E", "6E", "5E", "4E"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + synchronoise: ["7L49", "6L49", "5L49"], + tailwind: ["6T", "5T", "4T"], + taunt: ["7M", "7L25", "7L1", "6M", "6L1", "5M", "5L25", "4M", "4L25", "4S0"], + thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uproar: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L37"], + uturn: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + }}, + spiritomb: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["7E", "6E", "5E", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L1", "4L1"], + curse: ["7L1", "6L1", "5L1", "4L1"], + darkpulse: ["7M", "7L49", "6M", "6L49", "5T", "5L49", "5S0", "4M", "4L49"], + destinybond: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], + embargo: ["7M", "6M", "5M", "5S0", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L7", "6L7", "5L7", "4L7"], + flash: ["6M", "5M", "4M"], + foulplay: ["7E", "6T", "6E", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grudge: ["7E", "6E", "5E", "4E"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypnosis: ["7L13", "6L13", "5L13", "4L13"], + icywind: ["6T", "5T", "5D", "4T"], + imprison: ["7E", "6E", "5E", "4E"], + infestation: ["7M", "6M"], + memento: ["7L43", "6L43", "5L43", "4L43"], + nastyplot: ["7L37", "6L37", "5L37", "4L37"], + naturalgift: ["4M"], + nightmare: ["7E", "6E", "5E"], + ominouswind: ["7L25", "6L25", "5L25", "4T", "4L25"], + painsplit: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "5S0", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["7L1", "6L1", "5L1", "4L1"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowsneak: ["7L1", "7E", "6L1", "6E", "5L1", "5E", "4L1", "4E"], + shockwave: ["6T", "4M"], + silverwind: ["5S0", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smokescreen: ["7E", "6E", "5E", "4E"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["7L1", "6T", "6L1", "5T", "5L1", "5D", "4T", "4L1"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + uproar: ["6T", "5T", "4T"], + waterpulse: ["6T", "4M"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + }}, + gible: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + bodyslam: ["7E", "6E", "5E", "4E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + dig: ["7L31", "6M", "6L31", "5M", "5L31", "4M", "4L31"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonbreath: ["7E", "6E", "5E", "4E"], + dragonclaw: ["7M", "7L27", "6M", "6L27", "5M", "5L27", "4M", "4L27"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L7", "6L7", "5L7", "5D", "4L7"], + dragonrush: ["7L37", "6L37", "5L37", "4L37"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["5D", "4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + ironhead: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + metalclaw: ["7E", "6E", "5E", "4E"], + mudshot: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["7E", "6T", "6E", "5T", "5E", "5D", "4T", "4E"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["7E", "6E", "5E", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L3", "6L3", "5L3", "4L3"], + sandstorm: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + sandtomb: ["7L19", "7E", "6L19", "6E", "5L19", "5E", "4L19", "4E"], + scaryface: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L25", "6L25", "5L25", "4L25"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + thrash: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["7E", "6E", "5E", "4T", "4E"], + }}, + gabite: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + attract: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + dig: ["7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonclaw: ["7M", "7L33", "6M", "6L33", "5M", "5L33", "4M", "4L33"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L7", "7L1", "6L7", "5L7", "4L7"], + dragonrush: ["7L49", "6L49", "5L49", "4L49"], + dualchop: ["7L1", "6T", "6L24", "5T", "5L24"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L3", "7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + sandtomb: ["7L19", "6L19", "5L19", "4L19"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L28", "6L28", "5L28", "4L28"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + }}, + garchomp: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "6S4", "5M", "4M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L1", "6L48", "6S2", "6S3", "5L48", "5S1", "4L48"], + cut: ["6M", "5M", "4M"], + dig: ["7L40", "6M", "6L40", "6S2", "6S3", "5M", "5L40", "5S1", "4M", "4L40"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "6S2", "5T", "4T"], + dragonclaw: ["7M", "7L33", "6M", "6L33", "6S2", "6S3", "5M", "5L33", "5S1", "4M", "4L33"], + dragonpulse: ["6T", "5T", "4M"], + dragonrage: ["7L7", "7L1", "6L1", "5L1", "4L1"], + dragonrush: ["7L55", "6L55", "6S4", "5L55", "4L55"], + dragontail: ["7M", "6M", "5M"], + dualchop: ["7L1", "6T", "6L24", "5T", "5L24"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "6S4", "5M", "5S0", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "6S4", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "5S0", "5S1", "4T"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L3", "7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "7L13", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + sandtomb: ["7L19", "6L19", "5L19", "4L19"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + slash: ["7L28", "6L28", "6S3", "5L28", "4L28"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "5S0", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "5S0", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L15", "6L15", "5L15", "4L15"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + whirlpool: ["4M"], + }}, + riolu: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + attract: ["7M", "6M", "5M", "4M"], + aurasphere: ["4S0"], + bite: ["7E", "6E", "5E", "4E"], + blazekick: ["7E", "6E", "5E", "4E"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "5D", "4E", "4S0"], + captivate: ["4M"], + circlethrow: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + copycat: ["7L19", "6L19", "5L29", "4L29"], + counter: ["7L6", "6L6", "5L6", "4L6"], + crosschop: ["7E", "6E", "5E", "4E"], + crunch: ["7E", "6E", "5E", "4E"], + detect: ["7E", "6E", "5E", "4E"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "4M", "4S0"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["7L1", "6L1", "5L1", "5D", "4M", "4L1"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L11", "6L11", "5L15", "4L15"], + finalgambit: ["7L50", "6L50", "5L55"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "5D", "4M"], + followme: ["7E", "6E", "5E", "4E"], + forcepalm: ["7L15", "6L15", "5L11", "4L11"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + highjumpkick: ["7E", "6E", "5E", "4E"], + icepunch: ["6T", "5T", "4T"], + irondefense: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + irontail: ["6T", "5T", "4M"], + lowkick: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T", "4T"], + mindreader: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + nastyplot: ["7L47", "6L47", "5L47"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + quickattack: ["7L1", "6L1", "5L1", "4L1"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + reversal: ["7L29", "6L29", "5L19", "4L19"], + roar: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + screech: ["7L24", "6L24", "5L24", "4L24"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M", "4S0"], + skyuppercut: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + vacuumwave: ["7E", "6E", "5E", "4T", "4E"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + lucario: {learnset: { + agility: ["7E"], + attract: ["7M", "6M", "5M", "4M"], + aurasphere: ["7L1", "7S5", "6L1", "6S4", "5L51", "4L37", "4S0"], + bite: ["7E"], + blazekick: ["7E", "4S1"], + bonerush: ["7L29", "6L29", "5L19", "4L19", "4S1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "5S2", "5S3"], + calmmind: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M"], + captivate: ["4M"], + circlethrow: ["7E"], + closecombat: ["7L55", "6L1", "6S4", "5L55", "5S3", "4L42"], + confide: ["7M", "6M"], + counter: ["7L6", "6L6", "5L6", "5S2", "4L6"], + crosschop: ["7E"], + crunch: ["7E"], + darkpulse: ["7M", "6M", "5T", "5L1", "4M", "4L1", "4S0"], + detect: ["7L1", "7E", "6L1", "5L1", "5S2", "4L1"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["7L60", "7S5", "6T", "6L1", "5T", "5L60", "4M", "4L47", "4S0"], + drainpunch: ["6T", "5T", "4M"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + extremespeed: ["7L65", "7S5", "6L1", "5L65", "4L51"], + facade: ["7M", "6M", "5M", "4M"], + feint: ["7L11", "6L11", "5L15", "4L15"], + flashcannon: ["7M", "6M", "6S4", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + followme: ["7E"], + forcepalm: ["5L11", "4L11", "4S1"], + foresight: ["7L1", "6L1", "5L1", "4L1"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healpulse: ["7L51", "6L51", "5L42"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + highjumpkick: ["7E", "7S5"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + irondefense: ["7E", "6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + laserfocus: ["7L1"], + lowkick: ["7E", "6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T", "4T"], + mefirst: ["7L37", "6L37", "5L29", "4L29"], + metalclaw: ["7L1", "6L1", "5L1", "5S2", "4L1"], + metalsound: ["7L24", "6L24", "5L24", "4L24"], + mindreader: ["7E"], + mudslap: ["4T"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["7L15", "6M", "6L15"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + quickattack: ["7L1", "6L1", "6S4", "5L1", "4L1"], + quickguard: ["7L33", "6L33", "5L33"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "5S3", "4M"], + skyuppercut: ["7E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "5S3", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M", "4S1"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "7L19", "6M", "6L19", "5M", "5L37", "4M", "4L33"], + thunderpunch: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + vacuumwave: ["7E", "4T"], + waterpulse: ["6T", "4M", "4S0"], + workup: ["7M", "7L42", "5M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + hippopotas: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L7", "6L7", "5L7", "5D", "4L7"], + bodyslam: ["7E", "6E", "5E", "4E"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L31", "6L31", "5L31", "4L31"], + curse: ["7E", "6E", "5E", "4E"], + dig: ["7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], + doubleedge: ["7L44", "6L44", "5L44", "4L44"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "4M", "4L37"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fissure: ["7L50", "6L50", "5L50", "4L50"], + frustration: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + irontail: ["6T", "5T", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7E", "6E", "5E", "4E"], + roar: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "6M", "5M", "4M"], + sandtomb: ["7L25", "7E", "6L25", "6E", "5L25", "5E", "4L25", "4E"], + secretpower: ["6M", "4M"], + slackoff: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E", "4M"], + snore: ["6T", "5T", "4T"], + spitup: ["7E", "6E", "5E", "4E"], + stealthrock: ["6T", "5T", "4M"], + stockpile: ["7E", "6E", "5E", "5D", "4E"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "5D", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7E", "6E", "5E", "4E"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L19", "6L19", "5L19", "4L19"], + toxic: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + whirlwind: ["7E", "6E", "5E"], + yawn: ["7L13", "6L13", "5L13", "4L13"], + }}, + hippowdon: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L7", "7L1", "6L1", "5L1", "4L1"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L31", "6L31", "5L31", "4L31"], + dig: ["7L19", "6M", "6L19", "5M", "5L19", "4M", "4L19"], + doubleedge: ["7L50", "6L50", "5L50", "4L50"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "7L40", "6M", "6L40", "5M", "5L40", "4M", "4L40"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + fissure: ["7L60", "6L60", "5L60", "4L60"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1", "4L1"], + sandstorm: ["7M", "6M", "5M", "4M"], + sandtomb: ["7L25", "6L25", "5L25", "4L25"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T"], + swagger: ["7M", "6M", "5M", "4M"], + tackle: ["7L1", "6L1", "5L1", "4L1"], + takedown: ["7L19", "6L19", "5L19", "4L19"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + yawn: ["7L13", "7L1", "6L1", "5L1", "4L1"], + }}, + skorupi: {learnset: { + acupressure: ["7L13", "6L13", "5L17", "4L17"], + aerialace: ["7M", "6M", "5M", "4M"], + agility: ["7E", "6E", "5E", "5D", "4E"], + aquatail: ["6T", "5T", "5D", "4T"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L1", "6L1", "5L1", "5D", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + bugbite: ["7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], + captivate: ["4M"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E", "4E"], + crosspoison: ["7L49", "6L49", "5L61", "4L50"], + crunch: ["7L45", "6L45", "5L56", "4L45"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + feintattack: ["7E", "6E", "5E", "4E"], + fellstinger: ["7L47", "6L47"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L30", "6M", "6L30", "5M", "5L45"], + infestation: ["7M", "6M"], + irontail: ["7E", "6T", "6E", "5T", "5E", "4M"], + knockoff: ["7L5", "6T", "6L5", "5T", "5L6", "4T", "4L6"], + leer: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L38", "7E", "6L38", "6E", "5L38", "5E", "4E"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L9", "6L9", "5L12", "4L12"], + poisonfang: ["7L23", "6L23", "5L39", "4L39"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1"], + poisontail: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L16", "7E", "6L16", "6E", "5L16", "5E", "4E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E", "4E"], + scaryface: ["7L41", "6L41", "5L23", "4L23"], + screech: ["7E", "6E", "5E", "4E"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + slash: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + toxicspikes: ["7L34", "6L34", "5L28", "4L28"], + twineedle: ["7E", "6E", "5E"], + venoshock: ["7M", "7L27", "6M", "6L27", "5M", "5L50"], + whirlwind: ["7E", "6E", "5E", "4E"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + drapion: {learnset: { + acupressure: ["7L13", "6L13", "5L17", "4L17"], + aerialace: ["7M", "6M", "5M", "4M"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "6M", "5M", "4M"], + bite: ["7L1", "6L1", "5L1", "4L1"], + brickbreak: ["7M", "6M", "5M", "4M"], + brutalswing: ["7M"], + bugbite: ["7L20", "6T", "6L20", "5T", "5L34", "4T", "4L34"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crosspoison: ["7L57", "6L57", "5L73", "4L58"], + crunch: ["7L49", "6L49", "5L65", "4L49"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + falseswipe: ["7M", "6M", "5M", "4M"], + fellstinger: ["7L53", "6L53"], + firefang: ["7L1", "6L1", "5L1", "4L1"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["7L30", "6M", "6L30", "5M", "5L48"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icefang: ["7L1", "6L1", "5L1", "4L1"], + infestation: ["7M", "6M"], + irontail: ["6T", "5T", "4M"], + knockoff: ["7L5", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + leer: ["7L1", "6L1", "5L1", "4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + nightslash: ["7L38", "6L38", "5L38"], + payback: ["7M", "6M", "5M", "4M"], + pinmissile: ["7L9", "6L9", "5L12", "4L1"], + poisonfang: ["7L23", "6L23", "5L39", "4L39"], + poisonjab: ["7M", "6M", "5M", "4M"], + poisonsting: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L16", "6L16", "5L16"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L43", "6L43", "5L23", "4L23"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunderfang: ["7L1", "6L1", "5L1", "4L1"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + toxicspikes: ["7L34", "6L34", "5L28", "4L28"], + venoshock: ["7M", "7L27", "6M", "6L27", "5M", "5L56"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + croagunk: {learnset: { + acupressure: ["7E", "6E", "5E"], + astonish: ["7L1", "6L1", "5L1", "5S0", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + belch: ["7L47", "6L47"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletpunch: ["7E", "6E", "5E", "4E"], + captivate: ["4M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "4E"], + crosschop: ["7E", "6E", "5E", "4E"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["7E", "6T", "6E", "5T", "5E", "5D"], + dualchop: ["6T", "5T"], + dynamicpunch: ["7E", "6E", "5E", "4E"], + earthquake: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fakeout: ["7E", "6E", "5E", "4E"], + feint: ["7E", "6E", "5E", "4E"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flatter: ["7L50", "6L50", "5L50", "4L45"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gunkshot: ["6T", "5T", "5D", "4T"], + headbutt: ["7E", "6E", "5E", "4T", "4E"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7E", "6E", "5E", "4E"], + mefirst: ["7E", "6E", "5E", "4E"], + mudbomb: ["7L29", "6L29", "5L29", "4L29"], + mudslap: ["7L3", "6L3", "5L3", "5S0", "5S1", "4T", "4L3"], + nastyplot: ["7L38", "6L38", "5L38", "4L36"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L43", "6M", "6L43", "5M", "5L43", "5S1", "4M", "4L38"], + poisonsting: ["7L8", "6L8", "5L8", "5S0", "5S1", "5D", "4L8"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L15", "6L15", "5L15", "4L15"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7L22", "6L22", "5L22", "4L22"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "7L45", "6M", "6L45", "5M", "5L45", "4M", "4L43"], + sludgewave: ["7M", "6M", "5M"], + smellingsalts: ["7E", "6E", "5E", "4E"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + taunt: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "5S0", "5S1", "4M", "4L10"], + thief: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + vacuumwave: ["7E", "6E", "5E", "4T", "4E"], + venoshock: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + wakeupslap: ["7E", "6E", "5E", "4E"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + toxicroak: {learnset: { + astonish: ["7L1", "6L1", "5L1", "4L1"], + attract: ["7M", "6M", "5M", "4M"], + belch: ["7L58", "6L58"], + bounce: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T"], + dualchop: ["6T", "5T"], + earthquake: ["7M", "6M", "5M", "4M"], + embargo: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L17", "6L17", "5L17", "4L17"], + flatter: ["7L62", "6L62", "5L62", "4L54"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gunkshot: ["6T", "5T", "4T"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + lowkick: ["6T", "5T", "4T"], + lowsweep: ["7M", "6M", "5M"], + mudbomb: ["7L29", "6L29", "5L29", "4L29"], + mudslap: ["7L3", "7L1", "6L1", "5L1", "4T", "4L1"], + nastyplot: ["7L41", "6L41", "5L41", "4L36"], + naturalgift: ["4M"], + payback: ["7M", "6M", "5M", "4M"], + poisonjab: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "4M", "4L41"], + poisonsting: ["7L8", "7L1", "6L1", "5L1", "4L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + pursuit: ["7L15", "6L15", "5L15", "4L15"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7L22", "6L22", "5L22", "4L22"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "4M", "4L49"], + sludgewave: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["7L31", "6L31", "5L31", "4T", "4L31"], + sunnyday: ["7M", "6M", "5M", "4M"], + superfang: ["6T", "5T", "4T"], + swagger: ["7M", "7L24", "6M", "6L24", "5M", "5L24", "4M", "4L24"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "4M", "4L10"], + thief: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + vacuumwave: ["4T"], + venoshock: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + carnivine: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + bind: ["7L1", "6T", "6L1", "5T", "5L1", "4L1"], + bite: ["7L7", "6L7", "5L7", "5D", "4L7"], + bugbite: ["6T", "5T", "4T"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L41", "6L41", "5L41", "4L37"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L27", "6L27", "5L27", "4L27"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gastroacid: ["6T", "5T", "5D", "4T"], + gigadrain: ["7E", "6T", "6E", "5T", "5E", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L1", "6L1", "5L1", "4L1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + infestation: ["7M", "6M"], + ingrain: ["7L21", "6L21", "5L21", "4L21"], + knockoff: ["6T", "5T", "4T"], + leaftornado: ["7L31", "6L31", "5L31"], + leechseed: ["7E", "6E", "5E", "4E"], + magicalleaf: ["7E", "6E", "5E", "4E"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M", "4M"], + powerwhip: ["7L50", "6L50", "5L51", "4L47"], + protect: ["7M", "6M", "5M", "4M"], + ragepowder: ["7E", "6E", "5E", "5D"], + razorleaf: ["7E", "6E", "5E", "4E"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + slam: ["7E", "6E", "5E", "4E"], + sleeppowder: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spitup: ["7L37", "6L37", "5L37", "4L31"], + stockpile: ["7L37", "6L37", "5L37", "4L31"], + stunspore: ["7E", "6E", "5E", "4E"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swallow: ["7L37", "6L37", "5L37", "4L31"], + sweetscent: ["7L17", "6L17", "5L17", "4L17"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + thief: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + vinewhip: ["7L11", "6L11", "5L11", "4L11"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + wringout: ["7L47", "6L47", "5L47", "4L41"], + }}, + finneon: {learnset: { + agility: ["7E", "6E", "5E", "4E"], + aircutter: ["4T"], + aquaring: ["7L33", "6L33", "5L33", "4L33"], + aquatail: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + attract: ["7M", "7L10", "6M", "6L10", "5M", "5L10", "5D", "4M", "4L10"], + aurorabeam: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7L45", "6T", "6L45", "5T", "5L45", "4T", "4L45"], + brine: ["7E", "6E", "5E", "4M"], + captivate: ["7L26", "6L26", "5L26", "4M", "4L26"], + charm: ["7E", "6E", "5E", "4E"], + confide: ["7M", "6M"], + defog: ["4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flail: ["7E", "6E", "5E", "4E"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gust: ["7L17", "6L17", "5L17", "4L17"], + hail: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + psybeam: ["7E", "6E", "5E", "4E"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["7E", "6T", "6E", "5T", "5E"], + silverwind: ["7L49", "6L49", "5L49", "4M", "4L49"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + soak: ["7L54", "6L54", "5L54"], + splash: ["7E", "6E", "5E", "4E"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7E", "6E", "5E", "5D", "4E"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + tickle: ["7E", "6E", "5E", "4E"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uturn: ["7M", "7L42", "6M", "6L42", "5M", "5L42", "4M", "4L42"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L6", "6L6", "5L6", "4L6"], + waterpulse: ["7L22", "6T", "6L22", "5L22", "5D", "4M", "4L22"], + whirlpool: ["7L38", "6L38", "5L38", "4M", "4L38"], + }}, + lumineon: {learnset: { + aircutter: ["4T"], + aquaring: ["7L35", "6L35", "5L35", "4L35"], + aquatail: ["6T", "5T", "4T"], + attract: ["7M", "7L10", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["7L53", "6T", "6L53", "5T", "5L53", "4T", "4L53"], + brine: ["4M"], + captivate: ["7L26", "6L26", "5L26", "4M", "4L26"], + confide: ["7M", "6M"], + defog: ["4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gust: ["7L17", "7L1", "6L1", "5L17", "4L17"], + hail: ["7M", "6M", "5M", "4M"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + naturalgift: ["4M"], + ominouswind: ["4T"], + payback: ["7M", "6M", "5M", "4M"], + pound: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L13", "6M", "6L13", "5M", "5L13", "4M", "4L13"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "4M", "4L29"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["6T", "5T"], + silverwind: ["7L59", "6L59", "5L59", "4M", "4L59"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + soak: ["7L66", "7L1", "6L1", "5L66"], + substitute: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + uturn: ["7M", "7L48", "6M", "6L48", "5M", "5L48", "4M", "4L48"], + waterfall: ["7M", "6M", "5M", "4M"], + watergun: ["7L6", "7L1", "6L1", "5L1", "4L1"], + waterpulse: ["7L22", "6T", "6L22", "5L22", "4M", "4L22"], + whirlpool: ["7L42", "6L42", "5L42", "4M", "4L42"], + }}, + snover: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["7E", "6E", "5E", "5D", "4M"], + blizzard: ["7M", "7L41", "6M", "6L41", "5M", "5L41", "4M", "4L41"], + bulletseed: ["7E", "6E", "5E", "4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleedge: ["7E", "6E", "5E", "4E"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "5D", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L13", "6L13", "5L13", "4L13"], + growth: ["7E", "6E", "5E", "4E"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + iceshard: ["7L26", "6L26", "5L26", "4L26"], + icywind: ["7L9", "6T", "6L9", "5T", "5L9", "4T", "4L9"], + ingrain: ["7L31", "6L31", "5L31", "4L31"], + irontail: ["6T", "5T", "4M"], + leechseed: ["7E", "6E", "5E", "4E"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + magicalleaf: ["7E", "6E", "5E", "4E"], + mist: ["7L21", "7E", "6L21", "6E", "5L21", "5E", "4L21", "4E"], + mudslap: ["4T"], + naturalgift: ["7E", "6E", "5E", "4M"], + powdersnow: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L5", "6L5", "5L5", "5D", "4L5"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E", "4T", "4E"], + shadowball: ["7M", "6M", "5M", "4M"], + sheercold: ["7L46", "6L46", "5L46", "4L46"], + skullbash: ["7E", "6E", "5E", "4E"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stomp: ["7E", "6E", "5E", "4E"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + woodhammer: ["7L36", "6L36", "5L36", "4L36"], + worryseed: ["6T", "5T", "4T"], + }}, + abomasnow: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + avalanche: ["4M"], + blizzard: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47"], + block: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M"], + captivate: ["4M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["7L13", "6L13", "5L13", "4L13"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + iceshard: ["7L26", "6L26", "5L26", "4L26"], + icywind: ["7L9", "7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + ingrain: ["7L31", "6L31", "5L31", "4L31"], + irontail: ["6T", "5T", "4M"], + leer: ["7L1", "6L1", "5L1", "4L1"], + lightscreen: ["7M", "6M", "5M", "4M"], + mist: ["7L21", "6L21", "5L21", "4L21"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + powdersnow: ["7L1", "6L1", "5L1", "4L1"], + protect: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + razorleaf: ["7L5", "7L1", "6L1", "5L1", "4L1"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + shadowball: ["7M", "6M", "5M", "4M"], + sheercold: ["7L58", "6L58", "5L58", "4L58"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17", "4M", "4L17"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + woodhammer: ["7L36", "6L36", "5L36", "4L36"], + worryseed: ["6T", "5T", "4T"], + }}, + rotom: {learnset: { + astonish: ["7L1", "6L1", "6S1", "5L1", "5S0", "4L1"], + charge: ["7L57", "7L1", "6L1", "5L57", "4L43"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L1", "4L1"], + darkpulse: ["7M", "6M", "5T", "4M"], + discharge: ["7L64", "7L1", "6L1", "5L64", "4L50"], + doubleteam: ["7M", "7L15", "6M", "6L15", "5M", "5L15", "4M", "4L15"], + dreameater: ["7M", "6M", "5M", "4M"], + electroball: ["7L43", "6L43", "5L43"], + electroweb: ["6T", "5T"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + foulplay: ["6T"], + frustration: ["7M", "6M", "5M", "4M"], + hex: ["7L50", "6L50", "5L50"], + hiddenpower: ["7M", "6M", "5M", "4M"], + lightscreen: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["7L29", "6L29", "5L29", "4T", "4L29"], + painsplit: ["6T", "5T", "4T"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["7L22", "6T", "6L22", "6S1", "5L22", "5D", "4M", "4L22"], + signalbeam: ["6T", "5T", "5D", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + substitute: ["7M", "7L36", "6M", "6L36", "5M", "5L36", "4M", "4L36"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thundershock: ["7L1", "6L1", "5T", "5L1", "5S0", "4T", "4L1"], + thunderwave: ["7M", "7L1", "6M", "6L1", "6S1", "5M", "5L1", "5D", "4M", "4L1"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["7L1", "6T", "6L1", "6S1", "5T", "5L1", "5S0", "4T", "4L1"], + uproar: ["7L8", "6T", "6L8", "5T", "5L8", "5S0", "4T", "4L8"], + voltswitch: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + rotomheat: {learnset: { + overheat: ["7L1", "6L1", "5T", "4T"], + }}, + rotomwash: {learnset: { + hydropump: ["7L1", "6L1", "5T", "4T"], + }}, + rotomfrost: {learnset: { + blizzard: ["7L1", "6L1", "5T", "4T"], + }}, + rotomfan: {learnset: { + airslash: ["7L1", "6L1", "5T", "4T"], + }}, + rotommow: {learnset: { + leafstorm: ["7L1", "6L1", "5T", "4T"], + }}, + uxie: {learnset: { + acrobatics: ["7M", "6M", "5M"], + amnesia: ["7L46", "6L46", "6S3", "5L46", "5S2", "4L46", "4S0", "4S1"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["7L16", "6L16", "5L16", "4M", "4L16"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L50", "6L50", "6S3", "5L51", "5S2", "4L51"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flail: ["7L61", "7L1", "6L1", "5L61", "5S2", "4L61"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S0", "4S1"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + imprison: ["7L6", "6L6", "5L6", "4L6"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + memento: ["7L76", "7L1", "6L1", "5L76", "4L76"], + mudslap: ["4T"], + naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "6L21", "5L21", "4T", "4L21", "4S1"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + wonderroom: ["6T", "5T"], + yawn: ["7L31", "6L31", "6S3", "5L31", "4L31", "4S0", "4S1"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + mesprit: {learnset: { + acrobatics: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + charm: ["7L46", "6L46", "6S3", "5L46", "5S2", "4L46", "4S0", "4S1"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], + copycat: ["7L61", "7L1", "6L1", "5L61", "5S2", "4L61"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + extrasensory: ["7L50", "6L50", "6S3", "5L51", "5S2", "4L51"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S0", "4S1"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healingwish: ["7L76", "7L1", "6L1", "5L76", "4L76"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + imprison: ["7L6", "6L6", "5L6", "4L6"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + luckychant: ["7L31", "6L31", "6S3", "5L31", "4L31", "4S0", "4S1"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mudslap: ["4T"], + naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], + poweruppunch: ["6M"], + protect: ["7M", "7L16", "6M", "6L16", "5M", "5L16", "4M", "4L16"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "6L21", "5L21", "4T", "4L21", "4S1"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + azelf: {learnset: { + acrobatics: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1", "4S0"], + dazzlinggleam: ["7M", "6M"], + detect: ["7L16", "6L16", "5L16", "4L16"], + doubleteam: ["7M", "6M", "5M", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + explosion: ["7M", "7L76", "6M", "6L76", "5M", "5L76", "4M", "4L76"], + extrasensory: ["7L50", "6L50", "6S3", "5L51", "5S2", "4L51"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firepunch: ["6T", "5T", "4T"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + futuresight: ["7L36", "6L36", "6S3", "5L36", "5S2", "4L36", "4S0", "4S1"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["6T", "5T", "4T"], + imprison: ["7L6", "6L6", "5L6", "4L6"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T", "4M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["7L61", "7L1", "6T", "6L1", "5T", "5L61", "4T", "4L61"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mudslap: ["4T"], + nastyplot: ["7L46", "6L46", "6S3", "5L46", "5S2", "4L46", "4S0", "4S1"], + naturalgift: ["7L66", "7L1", "6L1", "5L66", "4M", "4L66"], + payback: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + return: ["7M", "6M", "5M", "4M"], + roleplay: ["6T", "5T", "4T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["7L21", "6L21", "5L21", "4T", "4L21", "4S1"], + taunt: ["7M", "6M", "5M", "4M"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["6T", "5T", "4T"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + uproar: ["7L31", "6T", "6L31", "6S3", "5T", "5L31", "5S2", "4T", "4L31", "4S0", "4S1"], + uturn: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + dialga: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S0"], + aurasphere: ["7L37", "6L37", "6S5", "5L37", "5S4", "4L37"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "5T", "5S4", "4T"], + dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "4S0"], + dragonpulse: ["6T", "5T", "5S4", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "4S1"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "7L50", "6M", "6L50", "6S5", "6S6", "5M", "5L50", "4M", "4L42"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + healblock: ["4L50", "4S1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["7L42", "6T", "6L42", "6S5", "5T", "5L42", "4M"], + magnetrise: ["6T", "5T", "4T"], + metalburst: ["7L24", "6L24", "6S6", "5L24", "4L24"], + metalclaw: ["7L6", "6L6", "5L6", "4L6", "4S0"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + overheat: ["7M", "6M", "6S6", "5M", "4M"], + powergem: ["7L19", "6L19", "5L19", "4L19"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + roaroftime: ["7L46", "6L46", "6S5", "6S6", "5L46", "5S4", "4L40", "4S0", "4S1"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + slash: ["7L15", "6L15", "5L15", "4L15", "4S1"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + }}, + palkia: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S0"], + aquatail: ["7L42", "7L24", "6T", "6L24", "5T", "5L24", "4T", "4L24"], + aurasphere: ["7L37", "6L37", "6S5", "6S6", "5L37", "5S4", "4L37"], + avalanche: ["4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulkup: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + dive: ["6M", "5M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "5T", "5S4", "4T"], + dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "4M", "4L28", "4S0"], + dragonpulse: ["6T", "5T", "4M"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7L33", "6T", "6L33", "6S5", "6S6", "5T", "5L33", "4T", "4L33", "4S1"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + healblock: ["4L50", "4S1"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hydropump: ["7L50", "6L50", "6S5", "6S6", "5L50", "5S4", "4L42"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icebeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + mudslap: ["4T"], + naturalgift: ["4M"], + outrage: ["6T", "5T", "4T"], + powergem: ["7L19", "6L19", "5L19", "4L19"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + secretpower: ["6M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + slash: ["7L15", "6L15", "5L15", "4L15", "4S1"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spacialrend: ["7L46", "6L46", "6S5", "6S6", "5L46", "5S4", "4L40", "4S0", "4S1"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + waterpulse: ["7L6", "6T", "6L6", "5L6", "4M", "4L6", "4S0"], + whirlpool: ["4M"], + }}, + heatran: {learnset: { + ancientpower: ["7L1", "6L1", "5L1", "4T", "4L1", "4S2"], + attract: ["7M", "6M", "5M", "4M"], + bugbite: ["6T", "5T", "4T"], + bulldoze: ["7M", "6M", "5M"], + captivate: ["4M"], + confide: ["7M", "6M"], + crunch: ["7L33", "6L33", "6S4", "5L33", "4L33", "4S1"], + darkpulse: ["7M", "6M", "5T", "4M"], + dig: ["6M", "5M", "4M"], + doubleteam: ["7M", "6M", "5M", "4M"], + dragonpulse: ["6T", "5T", "4M"], + earthpower: ["7L73", "7L1", "6T", "6L1", "5T", "5L73", "4T", "4L73", "4S2"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + eruption: ["4S2"], + explosion: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + firefang: ["7L17", "6L17", "5L17", "4L17"], + firespin: ["7L57", "7L1", "6L1", "5L57", "5S3", "4L57", "4S0"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["7L81", "7L1", "6T", "6L1", "5T", "5L81", "4T", "4L81"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["7L65", "7L1", "6T", "6L1", "5T", "5L65", "5S3", "4T", "4L65", "4S0"], + lavaplume: ["7L49", "6L49", "6S4", "5L49", "5S3", "4L49", "4S0", "4S1"], + leer: ["7L9", "6L9", "5L9", "4L9"], + magmastorm: ["7L96", "7L1", "6L1", "5L96", "4L96", "4S2"], + metalsound: ["7L25", "6L25", "6S4", "5L25", "4L25", "4S1"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + overheat: ["7M", "6M", "5M", "4M"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L41", "6L41", "6S4", "5L41", "5S3", "4L41", "4S0", "4S1"], + secretpower: ["6M", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "7L88", "6M", "6L88", "5M", "5L88", "4M", "4L88"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + regigigas: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + ancientpower: ["4T"], + avalanche: ["4M"], + block: ["6T", "5T", "4T"], + brickbreak: ["7M", "6M", "5M", "4M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L1", "4L1", "4S0", "4S1"], + crushgrip: ["7L75", "7L1", "6L1", "5L75", "4L75", "4S2"], + dizzypunch: ["7L1", "6L1", "5L1", "4L1", "4S1"], + doubleteam: ["7M", "6M", "5M", "4M"], + drainpunch: ["6T", "5T", "4M"], + earthpower: ["6T", "5T", "4T"], + earthquake: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + firepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foresight: ["7L1", "6L1", "6S4", "5L1", "4L1", "4S1"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "7L100", "6M", "6L100", "5M", "5L100", "4M", "4L100"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + heavyslam: ["7L90", "7L1", "6L1", "5L90"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icepunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + icywind: ["6T", "5T", "4T", "4S2"], + ironhead: ["6T", "5T", "4T", "4S2"], + knockoff: ["7L1", "6T", "6L1", "5T", "5L1", "4L1", "4S1"], + megapunch: ["4L1"], + mudslap: ["4T"], + naturalgift: ["4M"], + naturepower: ["7M", "6M"], + payback: ["7M", "7L65", "6M", "6L65", "5M", "5L65", "5S3"], + poweruppunch: ["6M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + revenge: ["7L25", "6L25", "6S4", "5L25", "5S3", "4L25"], + rockclimb: ["4M"], + rockpolish: ["7M", "6M", "5M", "4M"], + rockslide: ["7M", "6M", "5M", "4M", "4S2"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + stomp: ["4L1", "4S0"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + superpower: ["6T", "5T", "4T", "4L25", "4S0"], + swagger: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderpunch: ["7L1", "6T", "6L1", "5T", "5L1", "4T", "4L1"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + wideguard: ["7L40", "6L40", "6S4", "5L40", "5S3"], + zenheadbutt: ["7L50", "6T", "6L50", "6S4", "5T", "5L50", "5S3", "4T", "4L50", "4S0"], + }}, + giratina: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + aircutter: ["4T"], + ancientpower: ["7L10", "6L10", "5L10", "4T", "4L10", "4S1"], + aquatail: ["6T", "5T", "4T"], + aurasphere: ["7L37", "6L37", "6S5", "6S6", "5L37", "5S4", "4L37"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + destinybond: ["7L24", "6L24", "5L24", "4L24"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "6S6", "5T", "4T"], + dragonbreath: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S4", "4M", "4L28", "4S1"], + dragonpulse: ["6T", "5T", "5S4", "4M"], + dragontail: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthpower: ["7L33", "6T", "6L33", "5T", "5L33", "4T", "4L33", "4S0"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + gigaimpact: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + headbutt: ["4T"], + healblock: ["4L50", "4S0"], + hex: ["7L50", "6L50", "6S5", "5L50"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypervoice: ["6T", "5T"], + icywind: ["6T", "5T", "4T"], + ironhead: ["6T", "6S6", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + magiccoat: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + ominouswind: ["7L6", "6L6", "5L6", "4T", "4L6", "4S1"], + outrage: ["6T", "5T", "4T"], + painsplit: ["6T", "5T", "4T"], + payback: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + rockclimb: ["4M"], + rocksmash: ["6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + scaryface: ["7L1", "6L1", "5L1", "5S3", "4L1", "4S2"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "7L42", "6M", "6L42", "6S5", "5M", "5L42", "4M", "4L42"], + shadowforce: ["7L46", "6L46", "6S5", "6S6", "5L46", "5S4", "4L40", "4S0", "4S1"], + shadowsneak: ["7L19", "6L19", "5L19", "4L19"], + shockwave: ["6T", "4M"], + silverwind: ["4M"], + slash: ["7L15", "6L15", "5L15", "4L15", "4S0"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spite: ["6T", "5T", "4T"], + steelwing: ["7M", "6M", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + willowisp: ["7M", "6M", "5M", "4M"], + }}, + cresselia: {learnset: { + attract: ["7M", "6M", "5M", "4M"], + aurorabeam: ["7L29", "6L29", "6S3", "5L29", "4L29", "4S0"], + calmmind: ["7M", "6M", "5M", "4M"], + captivate: ["4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "4M", "4L1"], + dreameater: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "5S2", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + futuresight: ["7L38", "6L38", "6S3", "5L38", "5S1", "4L38", "4S0"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "5S2", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "5S2", "4M"], + icywind: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + lunardance: ["7L84", "7L1", "6L1", "5L84", "4L84"], + magiccoat: ["6T", "5T", "4T"], + magicroom: ["6T", "5T"], + mist: ["7L20", "6L20", "6S3", "5L20", "4L20", "4S0"], + moonblast: ["7L99", "6L99"], + moonlight: ["7L57", "7L1", "6L1", "5L57", "5S1", "4L57"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "7L93", "6M", "6L93", "5M", "5L93", "4M", "4L93"], + psychocut: ["7L66", "7L1", "6L1", "5L66", "4L66"], + psychoshift: ["7L75", "7L1", "6L1", "5L75", "4L75"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M", "5S2"], + raindance: ["7M", "6M", "5M", "4M"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "4M", "4L11"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + slash: ["7L47", "6L47", "6S3", "5L47", "5S1", "4L47", "4S0"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "5S1", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + phione: {learnset: { + acidarmor: ["7L31", "6L31", "5L31", "4L31"], + ancientpower: ["4T"], + aquaring: ["7L54", "6L54", "5L54", "4L54"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + bubble: ["7L1", "6L1", "5L1", "4L1"], + bubblebeam: ["7L24", "6L24", "5L24", "4L24"], + charm: ["7L9", "6L9", "5L9", "4L9"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dive: ["7L61", "6M", "6L61", "5M", "5L61", "4T", "4L61"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M", "4S0"], + hail: ["7M", "6M", "5M", "4M"], + healbell: ["6T", "5T", "4T"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L69", "6M", "6L69", "5M", "5L69", "4M", "4L69", "4S0"], + rest: ["7M", "6M", "5M", "4M", "4S0"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + signalbeam: ["6T", "5T", "4T"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + supersonic: ["7L16", "6L16", "5L16", "4L16"], + surf: ["7M", "6M", "5M", "4M", "4S0"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7L46", "6T", "6L46", "5L46", "4M", "4L46"], + watersport: ["7L1", "6L1", "5L1", "4L1"], + whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39"], + }}, + manaphy: {learnset: { + acidarmor: ["7L31", "6L31", "5L31", "4L31", "4S2"], + ancientpower: ["4T"], + aquaring: ["7L54", "6L54", "5L54", "4L54", "4S3"], + blizzard: ["7M", "6M", "5M", "4M"], + bounce: ["6T", "5T", "4T"], + brine: ["4M"], + bubble: ["7L1", "6L1", "6S4", "6S5", "5L1", "4L1", "4S0", "4S1"], + bubblebeam: ["7L24", "6L24", "5L24", "4L24"], + calmmind: ["7M", "6M", "5M", "4M"], + charm: ["7L9", "6L9", "5L9", "4L9"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dive: ["7L61", "6M", "6L61", "5M", "5L61", "4T", "4L61"], + doubleteam: ["7M", "6M", "5M", "4M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + hail: ["7M", "6M", "5M", "4M"], + healbell: ["6T", "5T", "4T"], + heartswap: ["7L76", "6L76", "6S4", "5L76", "4L76", "4S2", "4S3"], + helpinghand: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + mudslap: ["4T"], + naturalgift: ["4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + raindance: ["7M", "7L69", "6M", "6L69", "5M", "5L69", "4M", "4L69"], + reflect: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M"], + signalbeam: ["6T", "5T", "4T"], + skillswap: ["6T", "5T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + substitute: ["7M", "6M", "5M", "4M"], + supersonic: ["7L16", "6L16", "5L16", "4L16"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + tailglow: ["7L1", "6L1", "6S4", "6S5", "5L1", "4L1", "4S0", "4S1"], + toxic: ["7M", "6M", "5M", "4M"], + uproar: ["6T", "5T", "4T"], + uturn: ["7M", "6M", "5M", "4M"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["7L46", "6T", "6L46", "5L46", "4M", "4L46", "4S2", "4S3"], + watersport: ["7L1", "6L1", "6S4", "6S5", "5L1", "4L1", "4S0", "4S1", "4S3"], + whirlpool: ["7L39", "6L39", "5L39", "4M", "4L39", "4S2"], + }}, + darkrai: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "7L93", "6M", "6L93", "6S5", "5T", "5L93", "4M", "4L93", "4S2"], + darkvoid: ["7L66", "6L66", "6S5", "6S6", "5L66", "5S4", "4L66", "4S2"], + disable: ["7L1", "6L1", "5L1", "4L1"], + doubleteam: ["7M", "7L47", "6M", "6L47", "5M", "5L47", "4M", "4L47", "4S2", "4S3"], + drainpunch: ["6T", "5T", "4M"], + dreameater: ["7M", "7L84", "6M", "6L84", "6S5", "5M", "5L84", "4M", "4L84"], + embargo: ["7M", "6M", "5M", "4M", "4L75"], + endure: ["4M"], + facade: ["7M", "6M", "5M", "4M"], + feintattack: ["7L29", "6L29", "6S6", "5L29", "5S4", "4L29", "4S3"], + flash: ["6M", "5M", "4M"], + fling: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + focuspunch: ["6T", "4M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + haze: ["7L57", "6L57", "5L57", "4L57"], + headbutt: ["4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + hypnosis: ["7L20", "6L20", "5L20", "4L20", "4S0", "4S1", "4S3"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + knockoff: ["6T", "5T", "4T"], + lastresort: ["6T", "5T", "4T"], + mudslap: ["4T"], + nastyplot: ["7L75", "6L75", "5L75", "4L75"], + naturalgift: ["4M"], + nightmare: ["7L38", "6L38", "6S6", "5L38", "5S4", "4L38", "4S0", "4S1", "4S3"], + nightshade: ["4L1"], + ominouswind: ["7L1", "6L1", "6S6", "5L1", "5S4", "4T", "4L1"], + payback: ["7M", "6M", "5M", "4M"], + phantomforce: ["6S5"], + poisonjab: ["7M", "6M", "5M", "4M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + pursuit: ["4L29", "4S0"], + quickattack: ["7L11", "6L11", "5L11", "4L11", "4S0"], + raindance: ["7M", "6M", "5M", "4M"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roaroftime: ["4S1"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M", "4M"], + shadowball: ["7M", "6M", "5M", "4M", "4S2"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shockwave: ["6T", "4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T", "4M"], + snore: ["6T", "5T", "4T"], + spacialrend: ["4S1"], + spite: ["6T", "5T", "4T"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + suckerpunch: ["4T"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + taunt: ["7M", "6M", "5M", "4M"], + thief: ["7M", "6M", "5M", "4M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + torment: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + willowisp: ["7M", "6M", "5M", "4M"], + wonderroom: ["6T", "5T"], + xscissor: ["7M", "6M", "5M", "4M"], + }}, + shaymin: {learnset: { + aircutter: ["4T"], + airslash: ["6L64", "6S3", "5L64", "4L64"], + aromatherapy: ["7L64", "6L64", "6S4", "5L64", "4L64", "4S0"], + bulletseed: ["4M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["4L1"], + doubleteam: ["7M", "6M", "5M", "4M"], + earthpower: ["6T", "5T", "4T"], + endeavor: ["6T", "5T", "4T"], + endure: ["4M"], + energyball: ["7M", "7L73", "6M", "6L73", "6S4", "5M", "5L73", "4M", "4L73", "4S0"], + facade: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + grasswhistle: ["4L82"], + growth: ["7L1", "6L1", "6S3", "5L1", "4L1", "4S1"], + headbutt: ["4T"], + healingwish: ["7L91", "6L91", "5L91", "4L91"], + hiddenpower: ["7M", "6M", "5M", "4M"], + hyperbeam: ["7M", "6M", "5M", "4M"], + lastresort: ["6T", "5T", "4T"], + leafstorm: ["6L91", "5L91", "4L91"], + leechseed: ["7L19", "6L19", "5L19", "5S2", "4L19", "4S1"], + luckychant: ["4L91"], + magicalleaf: ["7L10", "6L10", "6S3", "5L10", "4L10", "4S1"], + mudslap: ["4T"], + naturalgift: ["7L46", "6L46", "5L46", "4M", "4L46"], + naturepower: ["7M", "6M"], + ominouswind: ["4T"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + quickattack: ["6L28", "5L28", "4L28"], + rest: ["7M", "6M", "5M", "4M"], + return: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seedbomb: ["6T", "5T", "4T"], + seedflare: ["7L100", "6L100", "6S3", "6S4", "5L100", "5S2", "4L100", "4S0"], + sleeptalk: ["7M", "6M", "5T", "4M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + substitute: ["7M", "6M", "6S4", "5M", "4M", "4S0"], + sunnyday: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + sweetkiss: ["7L82", "6L82", "5L82", "4L82"], + sweetscent: ["7L37", "6L37", "5L37", "5S2", "4L37"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + synthesis: ["7L28", "6T", "6L28", "5T", "5L28", "5S2", "4T", "4L28", "4S1"], + tailwind: ["6T", "5T", "4T"], + toxic: ["7M", "6M", "5M", "4M"], + worryseed: ["7L55", "6T", "6L55", "5T", "5L55", "4T", "4L55"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + arceus: {learnset: { + aerialace: ["7M", "6M", "5M", "4M"], + ancientpower: ["4T"], + aquatail: ["6T", "5T", "4T"], + avalanche: ["4M"], + blastburn: ["6S2"], + blizzard: ["7M", "6M", "5M", "4M"], + brickbreak: ["7M", "6M", "5M", "4M"], + brine: ["4M"], + bulldoze: ["7M", "6M", "5M"], + bulletseed: ["4M"], + calmmind: ["7M", "6M", "5M", "4M"], + chargebeam: ["7M", "6M", "5M", "4M"], + confide: ["7M", "6M"], + cosmicpower: ["7L1", "6L1", "5L1", "4L1"], + cut: ["6M", "5M", "4M"], + darkpulse: ["7M", "6M", "5T", "4M"], + defog: ["4M"], + dive: ["6M", "4T"], + doubleteam: ["7M", "6M", "5M", "4M"], + dracometeor: ["7T", "6T", "5T", "4T"], + dragonclaw: ["7M", "6M", "5M", "4M"], + dragonpulse: ["6T", "5T", "4M"], + dreameater: ["7M", "6M", "5M", "4M"], + earthpower: ["7L20", "6T", "6L20", "6S2", "5T", "5L20", "4T", "4L20"], + earthquake: ["7M", "6M", "5M", "4M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["4M"], + energyball: ["7M", "6M", "5M", "4M"], + extremespeed: ["7L40", "6L40", "5L40", "4L40"], + facade: ["7M", "6M", "5M", "4M"], + fireblast: ["7M", "6M", "5M", "4M"], + flamethrower: ["7M", "6M", "5M", "4M"], + flash: ["6M", "5M", "4M"], + flashcannon: ["7M", "6M", "5M", "4M"], + fly: ["7M", "6M", "5M", "4M"], + focusblast: ["7M", "6M", "5M", "4M"], + frustration: ["7M", "6M", "5M", "4M"], + furycutter: ["4T"], + futuresight: ["7L60", "6L60", "5L60", "4L60"], + gigadrain: ["6T", "5T", "4M"], + gigaimpact: ["7M", "6M", "5M", "4M"], + grassknot: ["7M", "6M", "5M", "4M"], + gravity: ["7L10", "6T", "6L10", "5T", "5L10", "4T", "4L10"], + hail: ["7M", "6M", "5M", "4M"], + headbutt: ["4T"], + heatwave: ["6T", "5T", "4T"], + hiddenpower: ["7M", "6M", "5M", "4M"], + honeclaws: ["6M", "5M"], + hydrocannon: ["6S2"], + hyperbeam: ["7M", "7L80", "6M", "6L80", "6S3", "5M", "5L80", "5S1", "4M", "4L80"], + hypervoice: ["7L30", "6T", "6L30", "5T", "5L30", "4L30"], + icebeam: ["7M", "6M", "5M", "4M"], + icywind: ["6T", "5T", "4T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T", "4T"], + ironhead: ["6T", "5T", "4T"], + irontail: ["6T", "5T", "4M"], + judgment: ["7L100", "6L100", "6S2", "6S3", "5L100", "5S1", "4L100", "4S0"], + lastresort: ["6T", "5T", "4T"], + lightscreen: ["7M", "6M", "5M", "4M"], + magiccoat: ["6T", "5T", "4T"], + mudslap: ["4T"], + naturalgift: ["7L1", "6L1", "5L1", "4M", "4L1"], + ominouswind: ["4T"], + outrage: ["6T", "5T", "4T"], + overheat: ["7M", "6M", "5M", "4M"], + payback: ["7M", "6M", "5M", "4M"], + perishsong: ["7L90", "6L90", "6S3", "5L90", "5S1", "4L90"], + poisonjab: ["7M", "6M", "5M", "4M"], + protect: ["7M", "6M", "5M", "4M"], + psychic: ["7M", "6M", "5M", "4M"], + psychup: ["7M", "6M", "5M", "4M"], + psyshock: ["7M", "6M", "5M"], + punishment: ["7L1", "6L1", "5L1", "4L1"], + quash: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M", "4M"], + recover: ["7L70", "6L70", "6S3", "5L70", "5S1", "4L70"], + recycle: ["6T", "5T", "4M"], + reflect: ["7M", "6M", "5M", "4M"], + refresh: ["7L50", "6L50", "5L50", "4L50"], + rest: ["7M", "6M", "5M", "4M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M", "4M"], + roar: ["7M", "6M", "5M", "4M"], + roaroftime: ["4S0"], + rockclimb: ["4M"], + rockslide: ["7M", "6M", "5M", "4M"], + rocksmash: ["6M", "5M", "4M"], + rocktomb: ["7M", "6M", "5M", "4M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M", "4M"], + sandstorm: ["7M", "6M", "5M", "4M"], + secretpower: ["6M", "4M"], + seismictoss: ["7L1", "6L1", "5L1", "4L1"], + shadowball: ["7M", "6M", "5M", "4M"], + shadowclaw: ["7M", "6M", "5M", "4M"], + shadowforce: ["4S0"], + shockwave: ["6T", "4M"], + signalbeam: ["6T", "5T", "4T"], + silverwind: ["4M"], + sleeptalk: ["7M", "6M", "5T", "4M"], + sludgebomb: ["7M", "6M", "5M", "4M"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T", "4T"], + solarbeam: ["7M", "6M", "5M", "4M"], + spacialrend: ["4S0"], + stealthrock: ["6T", "5T", "4M"], + stoneedge: ["7M", "6M", "5M", "4M"], + strength: ["6M", "5M", "4M"], + substitute: ["7M", "6M", "5M", "4M"], + sunnyday: ["7M", "6M", "5M", "4M"], + surf: ["7M", "6M", "5M", "4M"], + swagger: ["7M", "6M", "5M", "4M"], + swift: ["4T"], + swordsdance: ["7M", "6M", "5M", "4M"], + tailwind: ["6T", "5T", "4T"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M", "4M"], + thunderbolt: ["7M", "6M", "5M", "4M"], + thunderwave: ["7M", "6M", "5M", "4M"], + toxic: ["7M", "6M", "5M", "4M"], + trick: ["6T", "5T", "4T"], + trickroom: ["7M", "6M", "5M", "4M"], + twister: ["4T"], + waterfall: ["7M", "6M", "5M", "4M"], + waterpulse: ["6T", "4M"], + whirlpool: ["4M"], + willowisp: ["7M", "6M", "5M", "4M"], + workup: ["7M", "5M"], + xscissor: ["7M", "6M", "5M", "4M"], + zenheadbutt: ["6T", "5T", "4T"], + }}, + victini: {learnset: { + blueflare: ["5S2"], + boltstrike: ["5S2"], + bounce: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + celebrate: ["7S6"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "6S3", "6S4", "5L1", "5S0"], + dazzlinggleam: ["7M", "6M"], + doubleedge: ["7L65", "6L65", "5L65"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endure: ["7L9", "6L9", "6S4", "5L9", "5S0"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + finalgambit: ["7L81", "6L81", "5L81"], + fireblast: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flameburst: ["7L41", "6L41", "5L41"], + flamecharge: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + flamethrower: ["7M", "6M", "5M"], + flareblitz: ["7L73", "6L73", "5L73"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "5M"], + fusionbolt: ["5S1"], + fusionflare: ["5S1"], + gigaimpact: ["7M", "6M", "5M"], + glaciate: ["5S2"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L17", "6L17", "5L17"], + heatwave: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["7L1", "6M", "6L1", "6S4", "5M", "5L1", "5S0"], + inferno: ["7L57", "6L57", "5L57"], + lastresort: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + overheat: ["7M", "7L97", "6M", "6L97", "5M", "5L97"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "6S3", "6S4", "6S5", "5L1", "5S0"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + reversal: ["7L33", "7S6", "6L33", "5L33"], + rocksmash: ["6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + searingshot: ["7L1", "6L1", "6S3", "5L1", "5S1"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + storedpower: ["7L89", "7S6", "6L89", "5L89"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "6S5", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + vcreate: ["7S6", "6S3", "6S5", "5S1", "5S2"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7L49", "6T", "6L49", "5T", "5L49"], + }}, + snivy: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + aromatherapy: ["5S0"], + attract: ["7M", "6M", "5M"], + bind: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], + coil: ["7L31", "6L31", "5L31"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M", "5S0"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7L40", "6T", "6L40", "5T", "5L40"], + gigadrain: ["7L34", "6T", "6L34", "5T", "5L34"], + glare: ["7E", "6E", "5E"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T", "6T", "5T"], + grassyterrain: ["7E", "6E"], + growth: ["7L13", "6L13", "5L13", "5S0"], + hiddenpower: ["7M", "6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + knockoff: ["6T", "5T"], + leafblade: ["7L28", "6L28", "5L28"], + leafstorm: ["7L43", "6L43", "5L43"], + leaftornado: ["7L16", "6L16", "5L16"], + leechseed: ["7L19", "6L19", "5L19"], + leer: ["7L4", "6L4", "5L4"], + lightscreen: ["7M", "6M", "5M"], + magicalleaf: ["7E", "6E", "5E"], + meanlook: ["7E", "6E", "5E"], + megadrain: ["7L22", "6L22", "5L22"], + mirrorcoat: ["7E", "6E", "5E"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + slam: ["7L25", "6L25", "5L25"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7E", "6E", "5E"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["6T", "5T", "5S0"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + twister: ["7E", "6E", "5E"], + vinewhip: ["7L7", "6L7", "5L7"], + workup: ["7M"], + worryseed: ["6T", "5T"], + wrap: ["7L10", "6L10", "5L10"], + wringout: ["7L37", "6L37", "5L37"], + }}, + servine: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bind: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + coil: ["7L36", "6L36", "5L36"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7L48", "6T", "6L48", "5T", "5L48"], + gigadrain: ["7L40", "6T", "6L40", "5T", "5L40"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T", "6T", "5T"], + growth: ["7L13", "6L13", "5L13"], + hiddenpower: ["7M", "6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leafblade: ["7L32", "6L32", "5L32"], + leafstorm: ["7L52", "6L52", "5L52"], + leaftornado: ["7L16", "6L16", "5L16"], + leechseed: ["7L20", "6L20", "5L20"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L24", "6L24", "5L24"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + vinewhip: ["7L7", "7L1", "6L1", "5L1"], + workup: ["7M"], + worryseed: ["6T", "5T"], + wrap: ["7L10", "7L1", "6L1", "5L1"], + wringout: ["7L44", "6L44", "5L44"], + }}, + serperior: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bind: ["6T", "5T"], + brutalswing: ["7M"], + calmmind: ["7M", "6M", "5M"], + coil: ["7L38", "6L38", "5L38"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dragonpulse: ["6T", "5T"], + dragontail: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frenzyplant: ["7T", "6T", "5T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7L56", "6T", "6L56", "5T", "5L56"], + gigadrain: ["7L44", "6T", "6L44", "6S1", "5T", "5L44", "5S0"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T", "6T", "5T"], + growth: ["7L13", "6L13", "5L13"], + hiddenpower: ["7M", "6M", "5M"], + holdback: ["6S1"], + hyperbeam: ["7M", "6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leafblade: ["7L32", "6L32", "5L32"], + leafstorm: ["7L62", "6L62", "6S1", "5L62", "5S0"], + leaftornado: ["7L16", "6L16", "5L16"], + leechseed: ["7L20", "6L20", "5L20", "5S0"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L24", "6L24", "5L24"], + naturepower: ["7M", "6M"], + outrage: ["6T", "5T"], + protect: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "5S0"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + vinewhip: ["7L7", "7L1", "6L1", "5L1"], + workup: ["7M"], + worryseed: ["6T", "5T"], + wrap: ["7L10", "7L1", "6L1", "5L1"], + wringout: ["7L50", "6L50", "6S1", "5L50"], + }}, + tepig: {learnset: { + assurance: ["7L31", "6L31", "5L31"], + attract: ["7M", "6M", "5M"], + bodyslam: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E"], + curse: ["7E", "6E", "5E"], + defensecurl: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "6L7", "5L7"], + endeavor: ["7E", "6T", "6E", "5T", "5E"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T", "6T", "5T"], + flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + flamethrower: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + flareblitz: ["7L43", "6L43", "5L43"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + headsmash: ["7L37", "6L37", "5L37"], + heatcrash: ["7L27", "6L27", "5L27"], + heatwave: ["6T", "5T"], + heavyslam: ["7E", "6E", "5E"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + magnitude: ["7E", "6E", "5E"], + odorsleuth: ["7L9", "6L9", "5L9"], + overheat: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L21", "6L21", "5L21"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + smog: ["7L19", "6L19", "5L19"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7E", "6T", "6E", "5T", "5E"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L3", "6L3", "5L3"], + takedown: ["7L25", "6L25", "5L25"], + taunt: ["7M", "6M", "5M"], + thrash: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M"], + yawn: ["7E", "6E", "5E"], + zenheadbutt: ["6T"], + }}, + pignite: {learnset: { + armthrust: ["7L1", "6L17", "5L17"], + assurance: ["7L36", "6L36", "5L36"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + defensecurl: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7L1", "6L1", "5L1"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T"], + flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + flamethrower: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + flareblitz: ["7L52", "6L52", "5L52"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + headsmash: ["7L44", "6L44", "5L44"], + heatcrash: ["7L31", "6L31", "5L31"], + heatwave: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + odorsleuth: ["7L9", "7L1", "6L1", "5L1"], + overheat: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L23", "6L23", "5L23"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smog: ["7L20", "6L20", "5L20"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L3", "7L1", "6L1", "5L1"], + takedown: ["7L28", "6L28", "5L28"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T"], + }}, + emboar: {learnset: { + armthrust: ["7L1", "6L17", "5L17"], + assurance: ["7L38", "6L38", "5L38"], + attract: ["7M", "6M", "5M"], + blastburn: ["7T", "6T", "5T"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + defensecurl: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + ember: ["7L7", "7L1", "6L1", "5L1"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T", "6T", "5T"], + firepunch: ["6T", "5T"], + flamecharge: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + flamethrower: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + flareblitz: ["7L62", "6L62", "6S1", "5L62", "5S0"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7L1", "6L1", "5L1", "5S0"], + headsmash: ["7L50", "6L50", "6S1", "5L50", "5S0"], + heatcrash: ["7L31", "6L31", "5L31"], + heatwave: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + holdback: ["6S1"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T"], + irontail: ["6T", "5T"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + odorsleuth: ["7L9", "7L1", "6L1", "5L1"], + overheat: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L23", "6L23", "5L23"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + smog: ["7L20", "6L20", "5L20"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L3", "7L1", "6L1", "5L1"], + takedown: ["7L28", "6L28", "6S1", "5L28"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M", "5S0"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T"], + }}, + oshawott: {learnset: { + aerialace: ["7M", "6M", "5M"], + airslash: ["7E", "6E", "5E"], + aquajet: ["7L29", "6L29", "5L29"], + aquatail: ["7L35", "6T", "6L35", "5T", "5L35"], + assurance: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + brine: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + copycat: ["7E", "6E", "5E"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + encore: ["7L31", "6L31", "5L31"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L13", "6L13", "5L13"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L19", "6L19", "5L19"], + grassknot: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L43", "6L43", "5L43"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + irontail: ["6T", "5T"], + nightslash: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorshell: ["7L17", "6L17", "5L17"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L37", "6M", "6L37", "5M", "5L37"], + return: ["7M", "6M", "5M"], + revenge: ["7L25", "6L25", "5L25"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L5", "6L5", "5L5"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trumpcard: ["7E", "6E", "5E"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L7", "6L7", "5L7"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7L23", "6T", "6L23", "5L23"], + watersport: ["7L11", "6L11", "5L11"], + workup: ["7M"], + xscissor: ["7M", "6M", "5M"], + }}, + dewott: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L34", "6L33", "5L33"], + aquatail: ["7L42", "6T", "6L41", "5T", "5L41"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + encore: ["7L37", "6L36", "5L36"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L13", "6L13", "5L13"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L21", "6L20", "5L20"], + grassknot: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L53", "6L52", "5L52"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + irontail: ["6T", "5T"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorshell: ["7L18", "6L17", "5L17"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L45", "6M", "6L44", "5M", "5L44"], + return: ["7M", "6M", "5M"], + revenge: ["7L29", "6L28", "5L28"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L50", "6M", "6L49", "5M", "5L49"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L5", "7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L7", "7L1", "6L1", "5L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7L26", "6T", "6L25", "5L25"], + watersport: ["7L11", "7L1", "6L1", "5L1"], + workup: ["7M"], + xscissor: ["7M", "6M", "5M"], + }}, + samurott: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L34", "6L33", "5L33"], + aquatail: ["7L46", "6T", "6L45", "5T", "5L45"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + block: ["6T", "5T"], + confide: ["7M", "6M", "6S1"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dragontail: ["7M", "6M", "5M"], + encore: ["7L39", "6L38", "5L38"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L13", "6L13", "5L13"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L21", "6L20", "5L20"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + holdback: ["6S1"], + hydrocannon: ["7T", "6T", "5T"], + hydropump: ["7L63", "6L62", "6S1", "5L62", "5S0"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M", "5S0"], + icywind: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + megahorn: ["7L1", "6L1", "5L1", "5S0"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorshell: ["7L18", "6L17", "6S1", "5L17"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L51", "6M", "6L50", "5M", "5L50"], + return: ["7M", "6M", "5M"], + revenge: ["7L29", "6L28", "5L28"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + slash: ["7L1", "6L36", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + smartstrike: ["7M"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T", "5S0"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L58", "6M", "6L57", "5M", "5L57"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L5", "7L1", "6L1", "5L1"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L7", "7L1", "6L1", "5L1"], + waterpledge: ["7T", "6T", "5T"], + waterpulse: ["7L25", "6T", "6L25", "5L25"], + watersport: ["7L11", "7L1", "6L1", "5L1"], + workup: ["7M"], + xscissor: ["7M", "6M", "5M"], + }}, + patrat: {learnset: { + afteryou: ["7L23", "6T", "6L23", "5T", "5L23"], + aquatail: ["6T", "5T"], + assurance: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + batonpass: ["7L38", "6L33", "5L33"], + bide: ["7L8", "6L8", "5L8"], + bite: ["7L6", "6L6", "5L6"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["7L16", "6L16", "5L16"], + cut: ["6M", "5M"], + detect: ["7L11", "6L11", "5L11"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + flail: ["7E", "6E", "5E"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7L26"], + foresight: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperfang: ["7L31", "6L28", "5L28"], + hypnosis: ["7L18", "6L18", "5L18"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + lastresort: ["6T", "5T"], + leer: ["7L3", "6L3", "5L3"], + lowkick: ["6T", "5T"], + meanlook: ["7L36", "6L31", "5L31"], + nastyplot: ["7L33"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7E", "6E", "5E"], + round: ["7M", "6M", "5M"], + sandattack: ["7L13", "6L13", "5L13"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + slam: ["7L41", "6L36", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["7L21", "6T", "6L21", "5T", "5L21"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunderbolt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "7L28", "6L26", "5M", "5L26"], + zenheadbutt: ["6T", "5T"], + }}, + watchog: {learnset: { + afteryou: ["7L25", "6T", "6L25", "5T", "5L25"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + batonpass: ["7L46", "6L39", "5L39"], + bide: ["7L8", "6L8", "5L8"], + bite: ["7L6", "7L1", "6L1", "5L1"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L20", "5L20"], + covet: ["6T", "5T"], + crunch: ["7L16", "6L16", "5L16"], + cut: ["6M", "5M"], + detect: ["7L11", "6L11", "5L11"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L29"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hyperfang: ["7L36", "6L32", "5L32"], + hypnosis: ["7L18", "6L18", "5L18"], + icepunch: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + lastresort: ["6T", "5T"], + leer: ["7L3", "7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["7L1", "6T", "6L1", "5T", "5L1"], + meanlook: ["7L43", "6L36", "5L36"], + nastyplot: ["7L39"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "7L32", "6M", "6L29", "5M", "5L29"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M", "5M"], + sandattack: ["7L13", "6L13", "5L13"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + slam: ["7L50", "6L43", "5L43"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["7L22", "6T", "6L22", "5T", "5L22"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + lillipup: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["7E", "6T", "6E"], + attract: ["7M", "6M", "5M"], + babydolleyes: ["7L10", "6L10"], + bite: ["7L8", "6L8", "5L8"], + charm: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["7L22", "6L22", "5L22"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + firefang: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + helpinghand: ["7L12", "6T", "6L12", "5T", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + howl: ["7E", "6E", "5E"], + hypervoice: ["6T", "5T"], + icefang: ["7E", "6E", "5E"], + lastresort: ["7L36", "6T", "6L36", "5T", "5L36"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E"], + odorsleuth: ["7L5", "6L5", "5L5"], + playrough: ["7L45", "6L45"], + protect: ["7M", "6M", "5M"], + psychicfangs: ["7E"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L29", "6M", "6L29", "5M", "5L29"], + return: ["7M", "6M", "5M"], + reversal: ["7L33", "6L33", "5L33"], + roar: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L15", "6L15", "5L15"], + thunderbolt: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L19", "6L19", "5M", "5L19"], + yawn: ["7E", "6E", "5E"], + }}, + herdier: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["6T"], + attract: ["7M", "6M", "5M"], + bite: ["7L8", "7L1", "6L1", "5L1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["7L24", "6L24", "5L24"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + helpinghand: ["7L12", "6T", "6L12", "5T", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["6T", "5T"], + lastresort: ["7L42", "6T", "6L42", "5T", "5L42"], + leer: ["7L1", "6L1", "5L1"], + odorsleuth: ["7L5", "7L1", "6L1", "5L1"], + payback: ["7M", "6M", "5M"], + playrough: ["7L52", "6L52"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L33", "6M", "6L33", "5M", "5L33"], + return: ["7M", "6M", "5M"], + reversal: ["7L38", "6L38", "5L38"], + roar: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L15", "6L15", "5L15"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L20", "6L20", "5M", "5L20"], + }}, + stoutland: {learnset: { + aerialace: ["7M", "6M", "5M"], + afteryou: ["6T"], + attract: ["7M", "6M", "5M"], + bite: ["7L8", "7L1", "6L1", "5L1"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + crunch: ["7L24", "6L24", "5L24"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + firefang: ["7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + helpinghand: ["7L12", "6T", "6L12", "5T", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["6T", "5T"], + icefang: ["7L1", "6L1", "5L1"], + ironhead: ["6T", "5T"], + lastresort: ["7L51", "6T", "6L51", "5T", "5L51"], + leer: ["7L1", "6L1", "5L1"], + odorsleuth: ["7L5", "7L1", "6L1", "5L1"], + payback: ["7M", "6M", "5M"], + playrough: ["7L63", "6L63"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L36", "6M", "6L36", "5M", "5L36"], + return: ["7M", "6M", "5M"], + reversal: ["7L42", "6L42", "5L42"], + roar: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L15", "6L15", "5L15"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderfang: ["7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "7L20", "6L20", "5M", "5L20"], + }}, + purrloin: {learnset: { + aerialace: ["7M", "6M", "5M"], + assist: ["7L6", "6L6", "5L6"], + assurance: ["7L28", "6L28", "5L28"], + attract: ["7M", "6M", "5M"], + captivate: ["7L33", "6L33", "5L33"], + charm: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + copycat: ["7E", "6E"], + covet: ["7E", "6T", "6E", "5T", "5E"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + fakeout: ["7L21", "6L21", "5L21"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7E", "6E", "5E"], + foulplay: ["7E", "6T", "6E", "5T", "5E"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L3", "6L3", "5L3"], + gunkshot: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L24", "6M", "6L24", "5M", "5L24"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + nastyplot: ["7L42", "6L42", "5L42"], + nightslash: ["7L37", "6L37", "5L37"], + payback: ["7M", "6M", "5M"], + payday: ["7E", "6E", "5E"], + playrough: ["7L49", "6L49"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + pursuit: ["7L15", "6L15", "5L15"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L10", "6L10", "5L10"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L30", "6L30", "5L30"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7L39", "6T", "6L39", "5T", "5L39"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L46", "6L46", "5L46"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + yawn: ["7E", "6E", "5E"], + }}, + liepard: {learnset: { + aerialace: ["7M", "6M", "5M"], + assist: ["7L6", "7L1", "6L1", "5L1"], + assurance: ["7L31", "6L31", "5L31"], + attract: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + encore: ["5S0"], + facade: ["7M", "6M", "5M"], + fakeout: ["7L22", "6L22", "5L22", "5S0"], + foulplay: ["6T", "5T", "5S0"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L3", "7L1", "6L1", "5L1"], + gunkshot: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L26", "6M", "6L26", "5M", "5L26"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + nastyplot: ["7L50", "6L50", "5L50"], + nightslash: ["7L43", "6L43", "5L43"], + payback: ["7M", "6M", "5M"], + playrough: ["7L58", "6L58"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + pursuit: ["7L15", "6L15", "5L15"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + sandattack: ["7L10", "7L1", "6L1", "5L1"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L34", "6L34", "5L34"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7L47", "6T", "6L47", "5T", "5L47"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L55", "6L55", "5L55"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M", "5S0"], + taunt: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + }}, + pansage: {learnset: { + acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bite: ["7L19", "6L19", "5L19", "5S0"], + bulletseed: ["7E", "6E", "5E", "5S0"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E"], + crunch: ["7L43", "6L43", "5L43"], + cut: ["6M", "5M"], + dig: ["6M", "5M", "5S0", "5S2"], + disarmingvoice: ["7E", "6E"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gastroacid: ["6T"], + gigadrain: ["6T", "5T"], + grassknot: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + grasspledge: ["7T"], + grasswhistle: ["7E", "6E", "5E"], + gunkshot: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leafstorm: ["7E", "6E", "5E", "5S1"], + leechseed: ["7L16", "6L16", "5L16"], + leer: ["7L4", "6L4", "5L4", "5S1"], + lick: ["7L7", "6L7", "5L7", "5S1"], + lowkick: ["7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + magicalleaf: ["7E", "6E", "5E"], + nastyplot: ["7E", "6E", "5E"], + naturalgift: ["7L40", "6L40", "5L40"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M"], + recycle: ["7L37", "6T", "6L37", "5T", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M", "5S2"], + roleplay: ["7E", "6T", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["7L22", "6T", "6L22", "5T", "5L22", "5S2"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M", "5S0", "5S2"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + torment: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + vinewhip: ["7L10", "6L10", "5L10", "5S1"], + workup: ["7M", "5M"], + worryseed: ["6T", "5T"], + }}, + simisage: {learnset: { + acrobatics: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L1", "6L1", "5L1"], + gastroacid: ["6T"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + grasspledge: ["7T"], + gunkshot: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["7L1", "6T", "6L1", "5T", "5L1"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + workup: ["7M", "5M"], + worryseed: ["6T", "5T"], + }}, + pansear: {learnset: { + acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + amnesia: ["7L25", "6L25", "5L25"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bite: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E"], + crunch: ["7L43", "6L43", "5L43"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + disarmingvoice: ["7E", "6E"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + firepledge: ["7T"], + firepunch: ["7E", "6T", "6E", "5T", "5E"], + firespin: ["7E", "6E", "5E"], + flameburst: ["7L22", "6L22", "5L22"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gastroacid: ["6T"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + heatwave: ["7E", "6T", "6E", "5T", "5E", "5S0"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["7L10", "6M", "6L10", "5M", "5L10", "5S0"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L4", "6L4", "5L4", "5S0"], + lick: ["7L7", "6L7", "5L7", "5S0"], + lowkick: ["7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + nastyplot: ["7E", "6E", "5E"], + naturalgift: ["7L40", "6L40", "5L40"], + overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M"], + recycle: ["7L37", "6T", "6L37", "5T", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7E", "6T", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + yawn: ["7L16", "6L16", "5L16"], + }}, + simisear: {learnset: { + acrobatics: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepledge: ["7T"], + firepunch: ["6T", "5T"], + flameburst: ["7L1", "6L1", "5L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L1", "6L1", "5L1"], + gastroacid: ["6T"], + gigaimpact: ["7M", "6M", "6S0", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + heatwave: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "6S0", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M", "6S0"], + protect: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "6S0", "5M"], + }}, + panpour: {learnset: { + acrobatics: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + aquaring: ["7E", "6E", "5E"], + aquatail: ["7E", "6T", "6E", "5T", "5E"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bite: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "6M", "5M"], + brine: ["7L34", "6L34", "5L34"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E"], + crunch: ["7L43", "6L43", "5L43"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + disarmingvoice: ["7E", "6E"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gastroacid: ["6T"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + hail: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hydropump: ["7E", "6E", "5E", "5S0"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L4", "6L4", "5L4", "5S0"], + lick: ["7L7", "6L7", "5L7", "5S0"], + lowkick: ["7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + mudsport: ["7E", "6E", "5E"], + nastyplot: ["7E", "6E", "5E"], + naturalgift: ["7L40", "6L40", "5L40"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["7L37", "6T", "6L37", "5T", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["7E", "6T", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + scald: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + thief: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L10", "6L10", "5L10", "5S0"], + waterpledge: ["7T"], + waterpulse: ["6T"], + watersport: ["7L16", "6L16", "5L16"], + workup: ["7M", "5M"], + }}, + simipour: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L1", "6L1", "5L1"], + gastroacid: ["6T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + hail: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + scald: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + waterfall: ["7M", "6M", "5M"], + waterpledge: ["7T"], + waterpulse: ["6T"], + workup: ["7M", "5M"], + }}, + munna: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + barrier: ["7E", "6E", "5E"], + batonpass: ["7E", "6E", "5E"], + calmmind: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healbell: ["6T", "5T"], + healingwish: ["7E", "6E"], + helpinghand: ["7E", "6T", "6E", "5T", "5E"], + hiddenpower: ["7M", "6M", "5M"], + hypnosis: ["7L19", "6L19", "5L19"], + imprison: ["7L13", "6L13", "5L13"], + lightscreen: ["7M", "6M", "5M"], + luckychant: ["7L5", "6L5", "5L5"], + magiccoat: ["7E", "6T", "6E", "5T", "5E"], + moonlight: ["7L17", "6L17", "5L17"], + nightmare: ["7L29", "6L29", "5L29"], + painsplit: ["6T", "5T"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L11", "6L11", "5L11"], + psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["7E", "6M", "6E", "5E"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["6T", "5T"], + sonicboom: ["7E", "6E", "5E"], + storedpower: ["7L47", "6L47", "5L47"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7E", "6E", "5E"], + synchronoise: ["7L25", "6L25", "5L25"], + telekinesis: ["7L43", "6L43", "5M", "5L43"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["6T", "5T"], + worryseed: ["6T", "5T"], + yawn: ["7L7", "6L7", "5L7"], + zenheadbutt: ["7L23", "6T", "6L23", "5T", "5L23"], + }}, + musharna: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + dazzlinggleam: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1", "5S0"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healbell: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypnosis: ["7L1", "6L1", "5L1", "5S0"], + lightscreen: ["7M", "6M", "5M"], + luckychant: ["7L1", "6L1", "5L1", "5S0"], + magiccoat: ["6T", "5T"], + painsplit: ["6T", "5T"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L1", "6L1", "5L1", "5S0"], + psychic: ["7M", "6M", "5M"], + psychicterrain: ["7L1"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["6T", "5T"], + worryseed: ["6T", "5T"], + zenheadbutt: ["6T", "5T"], + }}, + pidove: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L15", "6L15", "5L15", "5S0"], + airslash: ["7L29", "6L29", "5L29"], + attract: ["7M", "6M", "5M"], + bestow: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + detect: ["7L22", "6L22", "5L22"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + featherdance: ["7L36", "6L36", "5L36"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + growl: ["7L4", "6L4", "5L4"], + gust: ["7L1", "6L1", "5L1", "5S0", "5D"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hypnosis: ["7E", "6E", "5E", "5D"], + leer: ["7L8", "6L8", "5L8"], + luckychant: ["7E", "6E", "5E"], + morningsun: ["7E", "6E", "5E", "5D"], + nightslash: ["7E", "6E"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L11", "6L11", "5L11", "5S0"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7L32", "6L32", "5L32"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + skyattack: ["7L50", "6T", "6L50", "5T", "5L50"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + tailwind: ["7L46", "6T", "6L46", "5T", "5L46"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + toxic: ["7M", "6M", "5M"], + uproar: ["7E", "6T", "6E", "5T", "5E"], + uturn: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E"], + workup: ["7M", "5M"], + }}, + tranquill: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L15", "6L15", "5L15"], + airslash: ["7L32", "6L32", "5L32"], + attract: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + detect: ["7L23", "6L23", "5L23"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + featherdance: ["7L41", "6L41", "5L41"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + growl: ["7L4", "7L1", "6L1", "5L1"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + leer: ["7L8", "7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L11", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7L36", "6L36", "5L36"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + skyattack: ["7L59", "6T", "6L59", "5T", "5L59"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + tailwind: ["7L54", "6T", "6L54", "5T", "5L54"], + taunt: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + unfezant: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L15", "6L15", "5L15"], + airslash: ["7L33", "6L33", "5L33"], + attract: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + detect: ["7L23", "6L23", "5L23"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + featherdance: ["7L44", "6L44", "5L44"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + growl: ["7L4", "7L1", "6L1", "5L1"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + leer: ["7L8", "7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L11", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7L38", "6L38", "5L38"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L18", "6M", "6L18", "5T", "5L18"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + skyattack: ["7L66", "6T", "6L66", "5T", "5L66"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + tailwind: ["7L60", "6T", "6L60", "5T", "5L60"], + taunt: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + blitzle: {learnset: { + agility: ["7L36", "6L36", "5L36"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + charge: ["7L8", "6L8", "5L8"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + discharge: ["7L32", "6L32", "5L32"], + doubleedge: ["7E", "6E", "5E"], + doublekick: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + mefirst: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + pursuit: ["7L22", "6L22", "5L22"], + quickattack: ["7L1", "6L1", "5L1"], + rage: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + shockwave: ["7L11", "7E", "6T", "6L11", "6E", "5L11", "5E"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7E", "6T", "6E"], + snore: ["6T", "5T"], + spark: ["7L25", "6L25", "5L25"], + stomp: ["7L29", "6L29", "5L29"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwhip: ["7L4", "6L4", "5L4"], + takedown: ["7E", "6E", "5E"], + thrash: ["7L43", "6L43", "5L43"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + }}, + zebstrika: {learnset: { + agility: ["7L42", "6L42", "5L42"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + charge: ["7L8", "7L1", "6L1", "5L1"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + discharge: ["7L36", "6L36", "5L36"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + iondeluge: ["7L58", "7L1", "6L1"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + overheat: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7L22", "6L22", "5L22"], + quickattack: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shockwave: ["7L11", "6T", "6L11", "5L11"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T"], + snore: ["6T", "5T"], + spark: ["7L25", "6L25", "5L25"], + stomp: ["7L31", "6L31", "5L31"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwhip: ["7L4", "7L1", "6L1", "5L1"], + thrash: ["7L53", "6L53", "5L53"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L15", "7L1", "6M", "6L1", "5M", "5L1"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + }}, + roggenrola: {learnset: { + attract: ["7M", "6M", "5M"], + autotomize: ["7E", "6E", "5E"], + block: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + explosion: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gravity: ["7E", "6T", "6E", "5T", "5E"], + harden: ["7L4", "6L4", "5L4"], + headbutt: ["7L10", "6L10", "5L10"], + heavyslam: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + irondefense: ["7L20", "6T", "6L20", "5T", "5L20"], + lockon: ["7E", "6E", "5E"], + magnitude: ["7E", "6E", "5E"], + mudslap: ["7L17", "6L17", "5L17"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L14", "6L14", "5L14"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "7E", "6M", "6E", "5M", "5E"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "6L7", "5L7"], + sandstorm: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], + snore: ["6T", "5T"], + stealthrock: ["7L30", "6T", "6L30", "5T", "5L30"], + stoneedge: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + wideguard: ["7E", "6E"], + }}, + boldore: {learnset: { + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["5D"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + harden: ["7L4", "7L1", "6L1", "5L1"], + headbutt: ["7L10", "7L1", "6L1", "5L1"], + heavyslam: ["5D"], + hiddenpower: ["7M", "6M", "5M"], + irondefense: ["7L20", "6T", "6L20", "5T", "5L20"], + mudslap: ["7L17", "6L17", "5L17"], + naturepower: ["7M", "6M"], + powergem: ["7L1", "6L25", "5L25"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L14", "6L14", "5L14"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "5D"], + snore: ["6T", "5T"], + stealthrock: ["7L36", "6T", "6L36", "5T", "5L36"], + stoneedge: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], + }}, + gigalith: {learnset: { + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + harden: ["7L4", "7L1", "6L1", "5L1"], + headbutt: ["7L10", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7L20", "6T", "6L20", "5T", "5L20"], + ironhead: ["6T", "5T"], + mudslap: ["7L17", "6L17", "5L17"], + naturepower: ["7M", "6M"], + powergem: ["7L1", "6L25", "5L25"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L14", "6L14", "5L14"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["7L36", "6T", "6L36", "5T", "5L36"], + stoneedge: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], + }}, + woobat: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + afteryou: ["6T", "5T"], + aircutter: ["7L21", "6L21", "5L21"], + airslash: ["7L32", "6L32", "5L32"], + amnesia: ["7L29", "6L29", "5L29"], + assurance: ["7L12", "6L12", "5L12"], + attract: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + calmmind: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + captivate: ["7E", "6E"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7L47", "6T", "6L47", "5T", "5L47"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M"], + flatter: ["7E", "6E", "5E"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L36", "6L36", "5L36"], + gigadrain: ["6T", "5T"], + gust: ["7L8", "6L8", "5L8"], + gyroball: ["7M", "6M", "5M"], + heartstamp: ["7L15", "6L15", "5L15"], + heatwave: ["6T", "5T"], + helpinghand: ["7E", "6T", "6E", "5T", "5E"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["7L19", "6L19", "5L19"], + knockoff: ["7E", "6T", "6E", "5T", "5E"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + odorsleuth: ["7L4", "6L4", "5L4"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + psychoshift: ["7E", "6E"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + storedpower: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + superfang: ["6T", "5T"], + supersonic: ["7E", "6E", "5E"], + swagger: ["7M", "6M", "5M"], + synchronoise: ["7E", "6E", "5E"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + venomdrench: ["7E", "6E"], + zenheadbutt: ["6T", "5T"], + }}, + swoobat: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + afteryou: ["6T", "5T"], + aircutter: ["7L21", "6L21", "5L21"], + airslash: ["7L32", "6L32", "5L32"], + amnesia: ["7L29", "6L29", "5L29"], + assurance: ["7L12", "7L1", "6L1", "5L1"], + attract: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + calmmind: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7L47", "6T", "6L47", "5T", "5L47"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L36", "6L36", "5L36"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + gust: ["7L8", "7L1", "6L1", "5L1"], + gyroball: ["7M", "6M", "5M"], + heartstamp: ["7L15", "6L15", "5L15"], + heatwave: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + imprison: ["7L19", "6L19", "5L19"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + odorsleuth: ["7L4", "7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + skyattack: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + superfang: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + drilbur: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crushclaw: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + dig: ["7L19", "6M", "6L19", "5M", "5L19"], + doubleteam: ["7M", "6M", "5M"], + drillrun: ["7L43", "6T", "6L43", "5T", "5L43"], + earthpower: ["7E", "6T", "6E", "5T", "5E"], + earthquake: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + facade: ["7M", "6M", "5M"], + fissure: ["7L47", "6L47", "5L47"], + fling: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L22", "6M", "6L22", "5M", "5L22"], + irondefense: ["7E", "6T", "6E", "5T", "5E"], + metalclaw: ["7L15", "6L15", "5L15"], + metalsound: ["7E", "6E", "5E", "5D"], + mudslap: ["7L8", "6L8", "5L8"], + mudsport: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rapidspin: ["7L5", "7E", "6L5", "6E", "5L5", "5E", "5D"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E", "5D"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + skullbash: ["7E", "6E", "5E"], + slash: ["7L26", "6L26", "5L26"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + strength: ["6M", "5M"], + submission: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + excadrill: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + dig: ["7L19", "6M", "6L19", "5M", "5L19"], + doubleteam: ["7M", "6M", "5M"], + drillrun: ["7L55", "6T", "6L55", "5T", "5L55"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + facade: ["7M", "6M", "5M"], + fissure: ["7L62", "6L62", "5L62"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L12", "6L12", "5L12"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L22", "6M", "6L22", "5M", "5L22"], + horndrill: ["7L1", "6L31", "5L31"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T"], + magnetrise: ["6T", "5T"], + metalclaw: ["7L15", "6L15", "5L15"], + mudslap: ["7L8", "7L1", "6L1", "5L1"], + mudsport: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rapidspin: ["7L5", "7L1", "6L1", "5L1"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L26", "6L26", "5L26"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + audino: {learnset: { + afteryou: ["7L41", "6T", "6L40", "5T", "5L40"], + amnesia: ["7E", "6E", "5E"], + attract: ["7M", "7L21", "6M", "6L15", "5M", "5L15"], + babydolleyes: ["7L5", "6L5"], + bestow: ["7E", "6E", "5E"], + blizzard: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M"], + disarmingvoice: ["7L13", "6L13"], + doubleedge: ["7L49", "6L49", "5L50"], + doubleslap: ["7L17", "6L10", "5L10", "5S0"], + doubleteam: ["7M", "6M", "5M"], + drainingkiss: ["7E", "6E"], + drainpunch: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E", "5D"], + entrainment: ["7L29", "6L25", "5L25"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + growl: ["7L1", "6L1", "5L1"], + healbell: ["7E", "6T", "6E", "5T", "5E"], + healingwish: ["7E", "6E", "5E"], + healpulse: ["7L37", "6L35", "6S2", "5L35", "5S0", "5S1"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1", "5S0", "5S1", "5D"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L53", "7L1", "6T", "5T"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + lastresort: ["7L57", "7L1", "6T", "6L1", "5T", "5L55"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["6T", "5T"], + luckychant: ["7E", "6E", "5E"], + magiccoat: ["6T", "5T"], + mistyterrain: ["7L1", "6L1"], + painsplit: ["6T", "5T"], + playnice: ["7L1", "6L1"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + present: ["5S1"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + refresh: ["7L9", "6L5", "5L5", "5S0", "5S1"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["7L25", "6M", "6L20", "5L20"], + shadowball: ["7M", "6M", "5M"], + signalbeam: ["6T", "5T"], + simplebeam: ["7L45", "6L45", "6S2", "5L45"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + sweetkiss: ["7E", "6E", "5E"], + takedown: ["7L33", "6L30", "5L30"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "6S2", "5M"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trickroom: ["7M", "6M", "6S2", "5M"], + uproar: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + wish: ["7E", "6E", "5E"], + workup: ["7M", "5M"], + yawn: ["7E", "6E", "5E", "5D"], + zenheadbutt: ["6T", "5T"], + }}, + timburr: {learnset: { + attract: ["7M", "6M", "5M"], + bide: ["7L8", "6L8", "5L8"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + chipaway: ["7L24", "6L24", "5L24"], + cometpunch: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7E", "6T", "6E", "5T", "5E"], + dynamicpunch: ["7L34", "6L34", "5L34"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L4", "6L4", "5L4"], + focuspunch: ["7L46", "6T", "6L46", "5L46"], + forcepalm: ["7E", "6E", "5E"], + foresight: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hammerarm: ["7L40", "6L40", "5L40"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7L12", "6T", "6L12", "5T", "5L12"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["7E", "6E", "5E"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + reversal: ["7E", "6E", "5E"], + rockslide: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L16", "6L16", "5L16"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L37", "6L37", "5L37"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + smellingsalts: ["7E", "6E", "5E"], + snore: ["6T", "5T"], + stoneedge: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L49", "6T", "6L49", "5T", "5L49"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + wakeupslap: ["7L20", "6L20", "5L20"], + wideguard: ["7E", "6E", "5E"], + workup: ["7M", "5M"], + }}, + gurdurr: {learnset: { + attract: ["7M", "6M", "5M"], + bide: ["7L8", "7L1", "6L1", "5L1"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + chipaway: ["7L24", "6L24", "5L24"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T", "5D"], + dynamicpunch: ["7L37", "6L37", "5L37"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + focuspunch: ["7L53", "6T", "6L53", "5L53"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hammerarm: ["7L45", "6L45", "5L45"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7L12", "6T", "6L12", "5T", "5L12", "5D"], + lowsweep: ["7M", "6M", "5M"], + machpunch: ["5D"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L16", "6L16", "5L16"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L41", "6L41", "5L41"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L57", "6T", "6L57", "5T", "5L57"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + wakeupslap: ["7L20", "6L20", "5L20"], + workup: ["7M", "5M"], + }}, + conkeldurr: {learnset: { + attract: ["7M", "6M", "5M"], + bide: ["7L8", "7L1", "6L1", "5L1"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + bulldoze: ["7M", "6M", "5M"], + chipaway: ["7L24", "6L24", "5L24"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + dynamicpunch: ["7L37", "6L37", "5L37"], + earthquake: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + focuspunch: ["7L53", "6T", "6L53", "5L53"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hammerarm: ["7L45", "6L45", "5L45"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7L12", "6T", "6L12", "5T", "5L12"], + lowsweep: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L16", "6L16", "5L16"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L41", "6L41", "5L41"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stoneedge: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L57", "6T", "6L57", "5T", "5L57"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + wakeupslap: ["7L20", "6L20", "5L20"], + workup: ["7M", "5M"], + }}, + tympole: {learnset: { + afteryou: ["7E", "6T", "6E"], + aquaring: ["7L20", "6L20", "5L20"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L12", "6L12", "5L12"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7E", "6T", "6E", "5T", "5E", "5D"], + echoedvoice: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + flail: ["7L34", "6L34", "5L34"], + frustration: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L1"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L42", "6L42", "5L42"], + hypervoice: ["7L45", "6T", "6L45", "5T", "5L45"], + icywind: ["6T", "5T"], + infestation: ["7M", "6M"], + mist: ["7E", "6E", "5E"], + mudbomb: ["7E", "6E", "5E"], + muddywater: ["7L27", "6L27", "5L27"], + mudshot: ["7L16", "6L16", "5L16"], + mudsport: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + refresh: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "7L9", "6M", "6L9", "5M", "5L9", "5D"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["7E", "6T", "6E", "5T", "5E"], + substitute: ["7M", "6M", "5M"], + supersonic: ["7L5", "6L5", "5L5"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L23", "6T", "6L23", "5T", "5L23"], + waterpulse: ["7E", "6T", "6E", "5E", "5D"], + }}, + palpitoad: {learnset: { + afteryou: ["6T"], + aquaring: ["7L20", "6L20", "5L20"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L12", "6L12", "5L12"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + echoedvoice: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + flail: ["7L37", "6L37", "5L37"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["6T", "5T"], + growl: ["7L1", "6L1", "5L1"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L47", "6L47", "5L47"], + hypervoice: ["7L51", "6T", "6L51", "5T", "5L51"], + icywind: ["6T", "5T"], + infestation: ["7M", "6M"], + muddywater: ["7L28", "6L28", "5L28"], + mudshot: ["7L16", "6L16", "5L16"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + supersonic: ["7L5", "7L1", "6L1", "5L1"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L23", "6T", "6L23", "5T", "5L23"], + waterpulse: ["6T"], + }}, + seismitoad: {learnset: { + acid: ["7L1", "6L36", "5L36"], + afteryou: ["6T"], + aquaring: ["7L20", "6L20", "5L20"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L12", "6L12", "5L12"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7L44", "6T", "6L44", "5T", "5L44"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + echoedvoice: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + flail: ["7L39", "6L39", "5L39"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L1"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L53", "6L53", "5L53"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L59", "6T", "6L59", "5T", "5L59"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T"], + lowkick: ["6T", "5T"], + muddywater: ["7L28", "6L28", "5L28"], + mudshot: ["7L16", "6L16", "5L16"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "7L9", "7L1", "6M", "6L1", "5M", "5L1"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + supersonic: ["7L5", "7L1", "6L1", "5L1"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L23", "6T", "6L23", "5T", "5L23"], + venoshock: ["7M", "6M", "5M"], + waterpulse: ["6T"], + }}, + throh: {learnset: { + attract: ["7M", "6M", "5M"], + bide: ["7L1", "6L5", "5L5"], + bind: ["7L1", "6T", "6L1", "5T", "5L1", "5D"], + block: ["6T", "5T"], + bodyslam: ["7L21", "6L29", "5L29"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], + bulldoze: ["7M", "6M", "5M"], + circlethrow: ["7L29", "6L37", "5L37"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + endure: ["7L33", "6L41", "5L41"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L1", "6L9", "5L9"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + icepunch: ["6T", "5T", "5D"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + matblock: ["7L1"], + painsplit: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7L13", "6L21", "5L21"], + reversal: ["7L45", "6L50", "5L53"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + seismictoss: ["7L5", "6L13", "5L13"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + stormthrow: ["7L17", "6L25", "5L25"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L41", "6T", "6L48", "5T", "5L49", "5D"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + vitalthrow: ["7L9", "6L17", "5L17"], + wideguard: ["7L37", "6L45", "5L45"], + workup: ["7M", "5M"], + zenheadbutt: ["6T"], + }}, + sawk: {learnset: { + attract: ["7M", "6M", "5M"], + bide: ["7L1", "6L5", "5L5"], + block: ["6T", "5T"], + brickbreak: ["7M", "7L21", "6M", "6L29", "5M", "5L29"], + bulkup: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], + bulldoze: ["7M", "6M", "5M"], + closecombat: ["7L41", "6L48", "5L49"], + confide: ["7M", "6M"], + counter: ["7L13", "6L21", "5L21"], + dig: ["6M", "5M"], + doublekick: ["7L5", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + dualchop: ["6T", "5T", "5D"], + earthquake: ["7M", "6M", "5M"], + endure: ["7L33", "6L41", "5L41"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focusenergy: ["7L1", "6L9", "5L9"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + karatechop: ["7L17", "6L25", "5L25"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "7L9", "6M", "6L17", "5M", "5L17"], + painsplit: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + quickguard: ["7L37", "6L45", "5L45"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L29", "6M", "6L37", "5M", "5L37"], + return: ["7M", "6M", "5M"], + reversal: ["7L45", "6L50", "5L53"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["7L1", "6M", "6L1", "5M", "5L1", "5D"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T", "5D"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T"], + }}, + sewaddle: {learnset: { + agility: ["7E", "6E", "5E"], + airslash: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + batonpass: ["7E", "6E", "5E"], + bugbite: ["7L8", "6T", "6L8", "5T", "5L8"], + bugbuzz: ["7L36", "6L36", "5L36"], + calmmind: ["7M", "6M", "5M"], + camouflage: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + electroweb: ["6T", "5T"], + endure: ["7L29", "6L29", "5L29"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flail: ["7L43", "6L43", "5L43"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + grassknot: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + mefirst: ["7E", "6E", "5E"], + mindreader: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + razorleaf: ["7L15", "6L15", "5L15"], + razorwind: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + signalbeam: ["6T", "5T"], + silverwind: ["7E", "6E", "5E"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stickyweb: ["7L31", "6L31"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["7L22", "6M", "6L22", "5M", "5L22"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + swadloon: {learnset: { + attract: ["7M", "6M", "5M"], + bugbite: ["7L1", "6T", "6L1", "5T", "5L1"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + electroweb: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "7L1", "6M", "6L20", "5M", "5L20"], + razorleaf: ["7L1", "6L1", "5L1"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + leavanny: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + bugbite: ["7L8", "7L1", "6T", "6L1", "5T", "5L1"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + electroweb: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + entrainment: ["7L43", "6L43", "5L43"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + fellstinger: ["7L29", "6L34"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + healbell: ["6T", "5T"], + helpinghand: ["7L32", "6T", "6L32", "5T", "5L32"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + knockoff: ["6T", "5T"], + leafblade: ["7L36", "6L36", "5L36"], + leafstorm: ["7L50", "6L50", "5L50"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + razorleaf: ["7L15", "7L1", "6L1", "5L1"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["6T", "5T"], + slash: ["7L1", "6L29", "5L29"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steelwing: ["7M", "6M"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["7L22", "6M", "6L22", "5M", "5L22"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + synthesis: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + xscissor: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + }}, + venipede: {learnset: { + agility: ["7L29", "6L29", "5L29"], + attract: ["7M", "6M", "5M"], + bugbite: ["7L22", "6T", "6L22", "5T", "5L22"], + confide: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleedge: ["7L43", "6L43", "5L43"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + pinmissile: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7L5", "6L5", "5L5"], + poisontail: ["7L19", "6L19", "5L19"], + protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + pursuit: ["7L12", "6L12", "5L12"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7L40", "7E", "6L40", "6E", "5L40", "5E"], + rocksmash: ["6M", "5M"], + rollout: ["7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + screech: ["7L8", "6L8", "5L8"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spikes: ["7E", "6E", "5E"], + steamroller: ["7L33", "6L33", "5L33"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + takedown: ["7E", "6E", "5E"], + toxic: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxicspikes: ["7E", "6E", "5E"], + twineedle: ["7E", "6E", "5E"], + venoshock: ["7M", "7L38", "7L26", "6M", "6L26", "5M", "5L26"], + }}, + whirlipede: {learnset: { + agility: ["7L32", "6L32", "5L32"], + attract: ["7M", "6M", "5M"], + bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], + confide: ["7M", "6M"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleedge: ["7L50", "6L50", "5L50"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["7L1", "6T", "6L22", "5T", "5L22"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7L5", "7L1", "6L1", "5L1"], + poisontail: ["7L19", "6L19", "5L19"], + protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + pursuit: ["7L12", "6L12", "5L12"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7L46", "6L46", "5L46"], + rocksmash: ["6M", "5M"], + rollout: ["7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + screech: ["7L8", "7L1", "6L1", "5L1"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steamroller: ["7L37", "6L37", "5L37"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + venomdrench: ["7L43", "6L43"], + venoshock: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + }}, + scolipede: {learnset: { + agility: ["7L33", "6L33", "5L33"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + batonpass: ["7L1", "6L30", "5L30"], + bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + defensecurl: ["7L1", "6L1", "5L1"], + dig: ["6M", "5M"], + doubleedge: ["7L55", "6L55", "5L55"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["7L1", "6T", "5T"], + irontail: ["6T", "5T"], + megahorn: ["7L65", "7L1", "6L1", "5L1"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7L5", "7L1", "6L1", "5L1"], + poisontail: ["7L19", "6L19", "5L19", "5D"], + protect: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + pursuit: ["7L12", "6L12", "5L12"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7L50", "6L50", "5L50"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + screech: ["7L8", "7L1", "6L1", "5L1"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steamroller: ["7L39", "6L39", "5L39"], + strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T", "5D"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + toxic: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + toxicspikes: ["5D"], + venomdrench: ["7L47", "6L47"], + venoshock: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + xscissor: ["7M", "6M", "5M"], + }}, + cottonee: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + beatup: ["7E", "6E", "5E"], + captivate: ["7E", "6E"], + charm: ["7L28", "6L28", "5L28"], + confide: ["7M", "6M"], + cottonguard: ["7L37", "6L37", "5L37"], + cottonspore: ["7L17", "6L17", "5L17"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E", "5D"], + endeavor: ["7L44", "6T", "6L44", "5T", "5L44"], + energyball: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + facade: ["7M", "6M", "5M"], + fairywind: ["7L1", "6L1"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["7L26", "6T", "6L26", "5T", "5L26"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L4", "6L4", "5L4"], + helpinghand: ["7L31", "6T", "6L31", "5T", "5L31"], + hiddenpower: ["7M", "6M", "5M"], + knockoff: ["6T", "5T"], + leechseed: ["7L8", "6L8", "5L8", "5D"], + megadrain: ["7L13", "6L13", "5L13"], + memento: ["7E", "6E", "5E"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], + poisonpowder: ["7L22", "6L22", "5L22"], + protect: ["7M", "6M", "5M"], + razorleaf: ["7L19", "6L19", "5L19"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + stunspore: ["7L10", "6L10", "5L10"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + swagger: ["7M", "6M", "5M"], + switcheroo: ["7E", "6E", "5E"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + worryseed: ["7E", "6T", "6E", "5T", "5E", "5D"], + }}, + whimsicott: {learnset: { + attract: ["7M", "6M", "5M"], + beatup: ["5S0"], + confide: ["7M", "6M"], + cottonspore: ["7L1", "6L1", "5L1"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T", "5S0"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growth: ["7L1", "6L1", "5L1"], + gust: ["7L10", "6L10", "5L10"], + helpinghand: ["6T", "5T", "5S0"], + hiddenpower: ["7M", "6M", "5M"], + hurricane: ["7L46", "6L46", "5L46"], + hyperbeam: ["7M", "6M", "5M"], + knockoff: ["6T", "5T"], + leechseed: ["7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L1", "6L1", "5L1"], + moonblast: ["7L50", "6L50"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M", "5S0"], + tailwind: ["7L28", "6T", "6L28", "5T", "5L28"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trickroom: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + petilil: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + afteryou: ["7L44", "6T", "6L44", "5T", "5L44"], + aromatherapy: ["7L28", "6L28", "5L28"], + attract: ["7M", "6M", "5M"], + bide: ["7E", "6E", "5E"], + charm: ["7E", "6E", "5E", "5D"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + entrainment: ["7L37", "6L37", "5L37"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["7L26", "6T", "6L26", "5T", "5L26"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7E", "6E", "5E"], + growth: ["7L4", "6L4", "5L4"], + healbell: ["6T", "5T"], + healingwish: ["7E", "6E", "5E"], + helpinghand: ["7L31", "6T", "6L31", "5T", "5L31"], + hiddenpower: ["7M", "6M", "5M"], + ingrain: ["7E", "6E", "5E"], + leafstorm: ["7L46", "6L46", "5L46"], + leechseed: ["7L8", "6L8", "5L8"], + magicalleaf: ["7L19", "6L19", "5L19"], + megadrain: ["7L13", "6L13", "5L13"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeppowder: ["7L10", "6L10", "5L10", "5D"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stunspore: ["7L22", "6L22", "5L22"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7E", "6E", "5E", "5D"], + synthesis: ["7L17", "6T", "6L17", "5T", "5L17"], + toxic: ["7M", "6M", "5M"], + worryseed: ["7E", "6T", "6E", "5T", "5E"], + }}, + lilligant: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growth: ["7L1", "6L1", "5L1"], + healbell: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + leechseed: ["7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + megadrain: ["7L1", "6L1", "5L1"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L50", "6L50"], + petaldance: ["7L46", "6L46", "5L46"], + protect: ["7M", "6M", "5M"], + quiverdance: ["7L28", "6L28", "5L28"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["7L1", "6T", "6L1", "5T", "5L1"], + teeterdance: ["7L10", "6L10", "5L10"], + toxic: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + basculin: {learnset: { + agility: ["7E", "6E", "5E", "5D"], + aquajet: ["7L9", "6L13", "5L13"], + aquatail: ["7L20", "6T", "6L28", "5T", "5L28"], + attract: ["7M", "6M", "5M"], + bite: ["7L7", "6L10", "5L10"], + bounce: ["6T", "5T"], + brine: ["7E", "6E", "5E"], + bubblebeam: ["7E", "6E", "5E"], + chipaway: ["7L11", "6L16", "5L16"], + confide: ["7M", "6M"], + crunch: ["7L17", "6L24", "5L24"], + cut: ["6M", "5M"], + dive: ["6M", "5M"], + doubleedge: ["7L26", "6L36", "5L36"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + finalgambit: ["7L38", "6L50", "5L51"], + flail: ["7L34", "6L1", "5L46"], + frustration: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + headbutt: ["7L5", "6L7", "5L7", "5D"], + headsmash: ["7L46"], + hiddenpower: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + muddywater: ["7E", "6E", "5E"], + mudshot: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + rage: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7E", "6E", "5E"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + scaryface: ["7L30", "6L41", "5L41"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + soak: ["7L23", "6L32", "5L32"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7E", "6E", "5E"], + tackle: ["7L1", "6L1", "5L1"], + tailwhip: ["7L1", "6L1"], + takedown: ["7L14", "6L20", "5L20"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L42", "6L1", "5L56"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L3", "6T", "6L4", "5T", "5L4"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L1", "6L1", "5L1"], + whirlpool: ["7E", "6E", "5E"], + zenheadbutt: ["6T", "5T", "5D"], + }}, + sandile: {learnset: { + aquatail: ["6T", "5T"], + assurance: ["7L16", "6L16", "5L16"], + attract: ["7M", "6M", "5M"], + beatup: ["7E", "6E", "5E"], + bite: ["7L4", "6L4", "5L4"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], + crunch: ["7L28", "6L28", "5L28"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["7L31", "6M", "6L31", "5M", "5L31"], + doubleedge: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + facade: ["7M", "6M", "5M"], + firefang: ["7E", "6E", "5E"], + focusenergy: ["7E", "6E", "5E"], + foulplay: ["7L37", "6T", "6L37", "5T", "5L37"], + frustration: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + meanlook: ["7E", "6E", "5E"], + mefirst: ["7E", "6E"], + mudslap: ["7L19", "6L19", "5L19"], + payback: ["7M", "6M", "5M"], + powertrip: ["7E"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + rage: ["7L1", "6L1", "5L1"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "6L7", "5L7"], + sandstorm: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + sandtomb: ["7L13", "6L13", "5L13"], + scaryface: ["7L34", "6L34", "5L34"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L46", "6L46", "5L46"], + thunderfang: ["7E", "6E", "5E"], + torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], + toxic: ["7M", "6M", "5M"], + uproar: ["7E", "6T", "6E", "5T", "5E"], + }}, + krokorok: {learnset: { + aquatail: ["6T", "5T"], + assurance: ["7L16", "6L16", "5L16"], + attract: ["7M", "6M", "5M"], + bite: ["7L4", "7L1", "6L1", "5L1"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L28", "6L28", "5L28"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["7L32", "6M", "6L32", "5M", "5L32"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focuspunch: ["6T"], + foulplay: ["7L40", "6T", "6L40", "5T", "5L40"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + mudslap: ["7L19", "6L19", "5L19"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + rage: ["7L1", "6L1", "5L1"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + sandtomb: ["7L13", "6L13", "5L13"], + scaryface: ["7L36", "6L36", "5L36"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L52", "6L52", "5L52"], + torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + }}, + krookodile: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + assurance: ["7L16", "6L16", "5L16"], + attract: ["7M", "6M", "5M"], + bite: ["7L4", "7L1", "6L1", "5L1"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + counter: ["5D"], + crunch: ["7L28", "6L28", "5L28", "5D"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["7L32", "6M", "6L32", "5M", "5L32"], + doubleteam: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["6T", "5T"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "7L54", "6M", "6L54", "5M", "5L54"], + embargo: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + foulplay: ["7L42", "6T", "6L42", "5T", "5L42"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + meanlook: ["5D"], + mudslap: ["7L19", "6L19", "5L19"], + outrage: ["7L60", "6T", "6L1", "5T", "5L60"], + payback: ["7M", "6M", "5M"], + powertrip: ["7L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + rage: ["7L1", "6L1", "5L1"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + sandtomb: ["7L13", "6L13", "5L13"], + scaryface: ["7L36", "6L36", "5L36"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "7L10", "6M", "6L10", "5M", "5L10"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + }}, + darumaka: {learnset: { + attract: ["7M", "6M", "5M"], + bellydrum: ["7L30", "6L30", "5L30"], + brickbreak: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E"], + endeavor: ["6T", "5T"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + fireblast: ["7M", "6M", "5M"], + firefang: ["7L11", "6L11", "5L11"], + firepunch: ["7L22", "6T", "6L22", "5T", "5L22"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flamewheel: ["7E", "6E", "5E"], + flareblitz: ["7L33", "6L33", "5L33"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7E", "6E", "5E"], + focuspunch: ["7E", "6T", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7E", "6E", "5E"], + headbutt: ["7L14", "6L14", "5L14"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["7L6", "6M", "6L6", "5M", "5L6"], + overheat: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + rage: ["7L9", "6L9", "5L9"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L3", "6L3", "5L3"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snatch: ["7E", "6T", "6E"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L39", "6T", "6L39", "5T", "5L39"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7E", "6E", "5E"], + taunt: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + thief: ["7M", "6M", "5M"], + thrash: ["7L27", "6L27", "5L27"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L17", "6T", "6L17", "5T", "5L17"], + uturn: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "7L25", "6L25", "5M", "5L25"], + yawn: ["7E", "6E", "5E"], + zenheadbutt: ["6T", "5T"], + }}, + darmanitan: {learnset: { + attract: ["7M", "6M", "5M"], + bellydrum: ["7L30", "6L30", "6S1", "5L30", "5S0"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + fireblast: ["7M", "6M", "5M"], + firefang: ["7L11", "6L11", "5L11"], + firepunch: ["7L22", "6T", "6L22", "5T", "5L22"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flareblitz: ["7L33", "6L33", "6S1", "5L33", "5S0"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7L1", "6L35", "6S1", "5L35", "5S0"], + headbutt: ["7L14", "6L14", "5L14"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["7L6", "7L1", "6M", "6L1", "5M", "5L1"], + overheat: ["7M", "7L54", "6M", "6L54", "5M", "5L54"], + payback: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + rage: ["7L9", "7L1", "6L1", "5L1"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L3", "7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + snatch: ["6T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L47", "6T", "6L47", "5T", "5L47"], + swagger: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + tackle: ["7L1", "6L1", "5L1"], + taunt: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + thief: ["7M", "6M", "5M"], + thrash: ["7L27", "6L27", "6S1", "5L27", "5S0"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + workup: ["7M", "7L25", "6L25", "5M", "5L25"], + zenheadbutt: ["6T", "5T"], + }}, + maractus: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + acupressure: ["7L29", "6L29", "5L29"], + aerialace: ["7M", "6M", "5M"], + afteryou: ["7L57", "7L1", "6T", "6L1", "5T", "5L57"], + attract: ["7M", "6M", "5M"], + bounce: ["7E", "6T", "6E", "5T", "5E"], + bulletseed: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + cottonguard: ["7L55", "7L1", "6L1", "5L55"], + cottonspore: ["7L18", "6L18", "5L18"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["7L26", "6T", "6L26", "5T", "5L26"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7E", "6E", "5E"], + grassyterrain: ["7E", "6E"], + growth: ["7L6", "6L6", "5L6"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["6T", "5T"], + ingrain: ["7L33", "6L33", "5L33"], + knockoff: ["6T", "5T"], + leechseed: ["7E", "6E", "5E", "5D"], + megadrain: ["7L13", "6L13", "5L13"], + naturepower: ["7M", "6M"], + needlearm: ["7L22", "6L22", "5L22"], + peck: ["7L1", "6L1", "5L1"], + petalblizzard: ["7L48", "6L48"], + petaldance: ["7L38", "6L38", "5L38"], + pinmissile: ["7L10", "6L10", "5L10", "5D"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + spikes: ["7E", "6E", "5E", "5D"], + spikyshield: ["7L1", "6L1"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L42", "6L42", "5L42"], + sunnyday: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7L3", "6L3", "5L3"], + synthesis: ["7L15", "6T", "6L15", "5T", "5L15"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + woodhammer: ["7E", "6E", "5E"], + worryseed: ["7E", "6T", "6E", "5T", "5E"], + }}, + dwebble: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + block: ["7E", "6T", "6E", "5T", "5E"], + bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], + curse: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L13", "6L13", "5L13"], + flail: ["7L41", "6L41", "5L41"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irondefense: ["7E", "6T", "6E", "5T", "5E"], + knockoff: ["6T", "5T"], + naturepower: ["7M", "6M"], + nightslash: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L5", "6L5", "5L5"], + rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rockwrecker: ["7L43", "6L43", "5L43"], + rototiller: ["7E", "6E"], + round: ["7M", "6M", "5M"], + sandattack: ["7L11", "6L11", "5L11"], + sandstorm: ["7M", "6M", "5M"], + sandtomb: ["7E", "6E", "5E"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shellsmash: ["7L37", "6L37", "5L37"], + slash: ["7L31", "6L31", "5L31"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spikes: ["7E", "6E", "5E"], + stealthrock: ["7L24", "6T", "6L24", "5T", "5L24"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + wideguard: ["7E", "6E"], + withdraw: ["7L7", "6L7", "5L7"], + xscissor: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + }}, + crustle: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bugbite: ["7L23", "6T", "6L23", "5T", "5L23"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + counter: ["5D"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L13", "6L13", "5L13"], + flail: ["7L50", "6L50", "5L50"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + knockoff: ["6T", "5T"], + naturepower: ["7M", "6M"], + nightslash: ["5D"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L5", "7L1", "6L1", "5L1"], + rockpolish: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + rockslide: ["7M", "7L29", "6M", "6L29", "5M", "5L29", "5D"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rockwrecker: ["7L55", "6L55", "5L55"], + round: ["7M", "6M", "5M"], + sandattack: ["7L11", "7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shellsmash: ["7L43", "7L1", "6L1", "5L1"], + slash: ["7L31", "6L31", "5L31"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L17", "6M", "6L17", "5M", "5L17"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["7L24", "6T", "6L24", "5T", "5L24"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + withdraw: ["7L7", "7L1", "6L1", "5L1"], + xscissor: ["7M", "7L38", "6M", "6L38", "5M", "5L38"], + }}, + scraggy: {learnset: { + amnesia: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "7L23", "6M", "6L20", "5M", "5L20"], + bulkup: ["7M", "6M", "5M"], + chipaway: ["7L27", "6L27", "5L27"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], + crunch: ["7L38", "6L38", "5L38"], + darkpulse: ["7M", "6M", "5T"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragondance: ["7E", "6E", "5E"], + dragonpulse: ["6T", "5T"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["7E", "6T", "6E", "5T", "5E", "5D"], + dualchop: ["6T", "5T"], + facade: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + fakeout: ["7E", "6E", "5E", "5D"], + feintattack: ["7L9", "7E", "6L9", "6E", "5L9", "5E"], + firepunch: ["7E", "6T", "6E", "5T", "5E"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7L48", "6T", "6L48", "5L49"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L1", "6L12", "5L12", "5S0"], + headsmash: ["7L50", "6L50", "5L53"], + hiddenpower: ["7M", "6M", "5M"], + highjumpkick: ["7L31", "6L31", "5L31", "5S0"], + icepunch: ["7E", "6T", "6E", "5T", "5E"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1", "5S0"], + lowkick: ["7L16", "6T", "6L1", "5T", "5L1", "5S0", "5D"], + lowsweep: ["7M", "6M", "5M"], + payback: ["7M", "7L20", "6M", "6L23", "5M", "5L23"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7L45", "6L45", "5L45"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "6L5", "5L5"], + scaryface: ["7L34", "6L34", "5L34"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["6T", "5T"], + swagger: ["7M", "7L12", "6M", "6L16", "5M", "5L16"], + taunt: ["7M", "6M", "5M"], + thunderpunch: ["7E", "6T", "6E", "5T", "5E"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + }}, + scrafty: {learnset: { + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "7L23", "6M", "6L20", "5M", "5L20"], + bulkup: ["7M", "6M", "5M"], + chipaway: ["7L27", "6L27", "5L27"], + confide: ["7M", "6M"], + crunch: ["7L38", "6L38", "5L38"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["6T", "5T"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T", "5S0"], + dualchop: ["6T", "5T"], + facade: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + feintattack: ["7L9", "7L1", "6L1", "5L1"], + firepunch: ["6T", "5T", "5S0"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7L58", "6T", "6L58", "5L58"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L1", "6L12", "5L12"], + headsmash: ["7L65", "6L65", "5L65"], + hiddenpower: ["7M", "6M", "5M"], + highjumpkick: ["7L31", "6L31", "5L31"], + hyperbeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + incinerate: ["6M", "5M"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["7L16", "6T", "6L1", "5T", "5L1"], + lowsweep: ["7M", "6M", "5M"], + outrage: ["6T", "5T"], + payback: ["7M", "7L20", "6M", "6L23", "5M", "5L23", "5S0"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7L51", "6L51", "5L51"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L5", "7L1", "6L1", "5L1"], + scaryface: ["7L34", "6L34", "5L34"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M", "5S0"], + sunnyday: ["7M", "6M", "5M"], + superfang: ["6T", "5T"], + swagger: ["7M", "7L12", "6M", "6L16", "5M", "5L16"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + sigilyph: {learnset: { + aerialace: ["7M", "6M", "5M"], + aircutter: ["7L21", "6L21", "5L21"], + airslash: ["7L41", "6L41", "5L41"], + ancientpower: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cosmicpower: ["7L48", "6L48", "5L48"], + darkpulse: ["7M", "6M", "5T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7E", "6E"], + gravity: ["7L38", "6T", "6L38", "5T", "5L38"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["6T", "5T", "5D"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypnosis: ["7L4", "6L4", "5L4", "5D"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + lightscreen: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + magiccoat: ["6T", "5T"], + magicroom: ["6T", "5T"], + miracleeye: ["7L1", "6L1", "5L1"], + mirrormove: ["7L34", "6L34", "5L34"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L18", "6L18", "5L18"], + psychic: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + psychoshift: ["7E", "6E", "5E"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + psywave: ["7L8", "6L8", "5L8"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["7E", "6T", "6E", "5T", "5E"], + skyattack: ["7L50", "6T", "6L50", "5T", "5L51"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + storedpower: ["7E", "6E", "5E", "5D"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synchronoise: ["7L31", "6L31", "5L31"], + tailwind: ["7L11", "6T", "6L11", "5T", "5L11"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + whirlwind: ["7L14", "6L14", "5L14"], + zenheadbutt: ["6T", "5T"], + }}, + yamask: {learnset: { + afteryou: ["6T", "5T"], + allyswitch: ["7E", "6E"], + astonish: ["7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7L29", "6L29", "5L29"], + darkpulse: ["7M", "6M", "5T"], + destinybond: ["7L49", "6L49", "5L49"], + disable: ["7L5", "7E", "6L5", "6E", "5L5", "5E"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + grudge: ["7L41", "6L41", "5L41"], + guardsplit: ["7L33", "6L33", "5L33"], + haze: ["7L9", "6L9", "5L9"], + healblock: ["7E", "6E", "5E"], + hex: ["7L17", "6L17", "5L17"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["7E", "6E", "5E"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T"], + knockoff: ["6T", "5T"], + magiccoat: ["6T", "5T"], + meanlook: ["7L45", "6L45", "5L45"], + memento: ["7E", "6E", "5E"], + nastyplot: ["7E", "6E", "5E"], + nightmare: ["7E", "6E", "5E"], + nightshade: ["7L13", "6L13", "5L13"], + ominouswind: ["7L25", "6L25", "5L25"], + painsplit: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + powersplit: ["7L33", "6L33", "5L33"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + shockwave: ["6T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + toxicspikes: ["7E", "6E"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T"], + }}, + cofagrigus: {learnset: { + afteryou: ["6T", "5T"], + astonish: ["7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7L29", "6L29", "5L29"], + darkpulse: ["7M", "6M", "5T"], + destinybond: ["7L57", "6L57", "5L57"], + disable: ["7L5", "7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + grudge: ["7L45", "6L45", "5L45"], + guardsplit: ["7L33", "6L33", "5L33"], + haze: ["7L9", "7L1", "6L1", "5L1"], + hex: ["7L17", "6L17", "5L17"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T"], + knockoff: ["6T", "5T"], + magiccoat: ["6T", "5T"], + meanlook: ["7L51", "6L51", "5L51"], + nightshade: ["7L13", "6L13", "5L13"], + ominouswind: ["7L25", "6L25", "5L25"], + painsplit: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + powersplit: ["7L33", "6L33", "5L33"], + protect: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + scaryface: ["7L1", "6L34", "5L34"], + secretpower: ["6M"], + shadowball: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + shockwave: ["6T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + wonderroom: ["6T", "5T"], + zenheadbutt: ["6T"], + }}, + tirtouga: {learnset: { + ancientpower: ["7L18", "6L18", "5L18"], + aquajet: ["7L15", "6L15", "5L15", "5S0"], + aquatail: ["7L41", "6T", "6L41", "5T", "5L41"], + attract: ["7M", "6M", "5M"], + bide: ["7L1", "7E", "6L1", "6E", "5L1", "5E"], + bite: ["7L8", "6L8", "5L8", "5S0"], + blizzard: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bodyslam: ["7E", "6E", "5E", "5S0"], + brine: ["7L28", "6L28", "5L28"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L21", "6L21", "5L21"], + curse: ["7L35", "6L35", "5L35"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flail: ["7E", "6E", "5E", "5D"], + frustration: ["7M", "6M", "5M"], + guardswap: ["7E", "6E"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L50", "6L50", "5L51"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + irondefense: ["7E", "6T", "6E", "5T", "5E", "5D"], + irontail: ["6T", "5T"], + knockoff: ["7E", "6T", "6E", "5E"], + liquidation: ["7E"], + protect: ["7M", "7L11", "6M", "6L11", "5M", "5L11", "5S0"], + raindance: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + rocksmash: ["6M", "5M"], + rockthrow: ["7E", "6E", "5E"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L5", "6L5", "5L5", "5D"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shellsmash: ["7L38", "6L38", "5L38"], + slam: ["7E", "6E", "5E"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["7E", "6T", "6E", "5E"], + whirlpool: ["7E", "6E", "5E"], + wideguard: ["7L25", "6L25", "5L25"], + withdraw: ["7L1", "6L1", "5L1"], + zenheadbutt: ["6T"], + }}, + carracosta: {learnset: { + ancientpower: ["7L18", "6L18", "5L18"], + aquajet: ["7L15", "6L15", "5L15"], + aquatail: ["7L45", "6T", "6L45", "5T", "5L45"], + attract: ["7M", "6M", "5M"], + bide: ["7L1", "6L1", "5L1"], + bite: ["7L8", "6L8", "5L8"], + blizzard: ["7M", "6M", "5M"], + block: ["6T", "5T"], + brine: ["7L28", "6L28", "5L28"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L21", "6L21", "5L21"], + curse: ["7L35", "6L35", "5L35"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L61", "6L61", "5L61"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T"], + lowkick: ["6T", "5T"], + protect: ["7M", "7L11", "6M", "6L11", "5M", "5L11"], + raindance: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L5", "7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shellsmash: ["7L40", "6L40", "5L40"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L31", "6M", "6L31", "5M", "5L31"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["6T"], + wideguard: ["7L25", "6L25", "5L25"], + withdraw: ["7L1", "6L1", "5L1"], + zenheadbutt: ["6T"], + }}, + archen: {learnset: { + acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + aerialace: ["7M", "6M", "5M"], + agility: ["7L21", "6L21", "5L21"], + allyswitch: ["7E", "6E"], + ancientpower: ["7L18", "6L18", "5L18"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bite: ["7E", "6E", "5E"], + bounce: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L35", "6L35", "5L35"], + cut: ["6M", "5M"], + defog: ["7E", "6E", "5E"], + dig: ["6M", "5M"], + doubleteam: ["7M", "7L8", "6M", "6L8", "5M", "5L8", "5S0"], + dragonbreath: ["7L31", "6L31", "5L31"], + dragonclaw: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + dragonpulse: ["7E", "6T", "6E", "5T", "5E"], + earthpower: ["7E", "6T", "6E", "5T", "5E"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["7L38", "6T", "6L38", "5T", "5L38"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + headsmash: ["7E", "6E", "5E", "5S0"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irondefense: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["7E", "6T", "6E", "5E"], + leer: ["7L1", "6L1", "5L1"], + pluck: ["7L15", "6L15", "5M", "5L15"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L25", "6L25", "5L25"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L5", "6L5", "5L5"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L11", "6L11", "5L11", "5S0"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + stoneedge: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + switcheroo: ["7E", "6E"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L50", "6L50", "5L51"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + wingattack: ["7L1", "6L1", "5L1", "5S0"], + zenheadbutt: ["6T"], + }}, + archeops: {learnset: { + acrobatics: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + aerialace: ["7M", "6M", "5M"], + agility: ["7L21", "6L21", "5L21"], + ancientpower: ["7L18", "6L18", "5L18"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L35", "6L35", "5L35"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "7L8", "6M", "6L8", "5M", "5L8"], + dragonbreath: ["7L31", "6L31", "5L31"], + dragonclaw: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + dragonpulse: ["6T", "5T"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + endeavor: ["7L40", "6T", "6L40", "5T", "5L40"], + facade: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T"], + leer: ["7L1", "6L1", "5L1"], + outrage: ["6T", "5T"], + pluck: ["7L15", "6L15", "5M", "5L15"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L25", "6L25", "5L25"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L5", "7L1", "6L1", "5L1"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L11", "6L11", "5L11"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + skyattack: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L61", "6L61", "5L61"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + wingattack: ["7L1", "6L1", "5L1"], + zenheadbutt: ["6T"], + }}, + trubbish: {learnset: { + acidspray: ["7L12", "6L12", "5L12"], + amnesia: ["7L40", "6L40", "5L40"], + attract: ["7M", "6M", "5M"], + belch: ["7L42", "6L42"], + clearsmog: ["7L34", "6L34", "5L34"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E"], + darkpulse: ["7M", "6M", "5T"], + doubleslap: ["7L14", "6L14", "5L14"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + explosion: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gunkshot: ["7L45", "6T", "6L45", "5T", "5L45"], + haze: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + mudsport: ["7E", "6E", "5E"], + painsplit: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + poisongas: ["7L1", "6L1", "5L1"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["7L3", "6T", "6L3", "5T", "5L3"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7E", "6E", "5E"], + rollout: ["7E", "6E", "5E"], + round: ["7M", "6M", "5M"], + sandattack: ["7E", "6E", "5E"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + selfdestruct: ["7E", "6E", "5E"], + sleeptalk: ["7M", "6M", "5T"], + sludge: ["7L18", "6L18", "5L18"], + sludgebomb: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + spikes: ["7E", "6E", "5E"], + spite: ["6T", "5T"], + stockpile: ["7L23", "6L23", "5L23"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swallow: ["7L23", "6L23", "5L23"], + takedown: ["7L25", "6L25", "5L25"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxicspikes: ["7L7", "6L7", "5L7"], + venoshock: ["7M", "6M", "5M"], + }}, + garbodor: {learnset: { + acidspray: ["7L12", "6L12", "5L12"], + amnesia: ["7L46", "6L46", "5L46"], + attract: ["7M", "6M", "5M"], + belch: ["7L49", "6L49"], + bodyslam: ["7L25", "6L25", "5L25"], + clearsmog: ["7L34", "6L34", "5L34"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T"], + doubleslap: ["7L14", "6L14", "5L14"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + explosion: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + gunkshot: ["7L54", "6T", "6L54", "5T", "5L54"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + painsplit: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + poisongas: ["7L1", "6L1", "5L1"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recycle: ["7L3", "7L1", "6T", "6L1", "5T", "5L1"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + sludge: ["7L18", "6L18", "5L18"], + sludgebomb: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["6T", "5T"], + stockpile: ["7L23", "6L23", "5L23"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swallow: ["7L23", "6L23", "5L23"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + toxic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + toxicspikes: ["7L7", "7L1", "6L1", "5L1"], + venoshock: ["7M", "6M", "5M"], + }}, + zorua: {learnset: { + aerialace: ["7M", "6M", "5M"], + agility: ["7L37", "6L37", "5L37"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + copycat: ["7E", "6E"], + counter: ["7E", "6E", "5E"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E"], + detect: ["7E", "6E", "5E"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + extrasensory: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + faketears: ["7L9", "6L9", "5L9"], + feintattack: ["7L17", "6L17", "5L17"], + fling: ["7M", "6M", "5M"], + foulplay: ["7L29", "6T", "6L29", "5T", "5L29"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + grassknot: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hypervoice: ["6T", "5T"], + imprison: ["7L53", "6L53", "5L53"], + incinerate: ["6M", "5M"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + memento: ["7E", "6E", "5E"], + nastyplot: ["7L49", "6L49", "5L49"], + nightdaze: ["7L57", "6L57", "5L57"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L45", "6L45", "5L45"], + pursuit: ["7L5", "6L5", "5L5"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "5L21"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["7E", "6T", "6E", "5T", "5E"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5E"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + }}, + zoroark: {learnset: { + aerialace: ["7M", "6M", "5M"], + agility: ["7L39", "6L39", "5L39", "5S0"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "6S1", "5T"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "5S0"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L17", "6L17", "5L17"], + flamethrower: ["7M", "6M", "6S1", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + foulplay: ["7L29", "6T", "6L29", "5T", "5L29"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L13", "6L13", "5L13"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L9", "7L1", "6M", "6L1", "5M", "5L1"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["6T", "5T"], + imprison: ["7L59", "7L1", "6L1", "5L59"], + incinerate: ["6M", "5M"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + nastyplot: ["7L54", "6L54", "5L54"], + nightdaze: ["7L64", "7L1", "6L1", "5L64"], + nightslash: ["7L1", "6L30", "5L30"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L49", "6L49", "5L49", "5S0"], + pursuit: ["7L5", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "5L21"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["6S1"], + snarl: ["7M", "6M", "5M", "5S0"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["6S1"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + uproar: ["6T", "5T"], + uturn: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + }}, + minccino: {learnset: { + afteryou: ["7L49", "6T", "6L49", "5T", "5L49"], + aquatail: ["7E", "6T", "6E", "5T", "5E"], + attract: ["7M", "6M", "5M"], + babydolleyes: ["7L3", "6L3"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7L39", "6L39", "5L39"], + charm: ["7L27", "6L27", "5L27"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M"], + doubleslap: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "7L33", "6M", "6L33", "5M", "5L33"], + encore: ["7L15", "6L15", "5L15"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + flail: ["7E", "6E", "5E"], + fling: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["5L3"], + gunkshot: ["6T", "5T"], + helpinghand: ["7L7", "6T", "6L7", "5T", "5L7"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["7L43", "6T", "6L43", "5T", "5L43"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + knockoff: ["7E", "6T", "6E", "5T", "5E"], + lastresort: ["7L45", "6T", "6L45", "5T", "5L45"], + mudslap: ["7E", "6E", "5E"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shockwave: ["6T"], + sing: ["7L21", "6L21", "5L21"], + slam: ["7L37", "6L37", "5L37"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7L19", "6L19", "5L19"], + tailslap: ["7L25", "6L25", "5L25"], + tailwhip: ["7E", "6E", "5E"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L9", "6L9", "5L9"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + wakeupslap: ["7L31", "6L31", "5L31"], + workup: ["7M", "5M"], + }}, + cinccino: {learnset: { + afteryou: ["6T", "5T"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bulletseed: ["7L1", "6L1", "5L1"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gunkshot: ["6T", "5T"], + helpinghand: ["7L1", "6T", "6L1", "5T", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["6T", "5T"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + lastresort: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockblast: ["7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shockwave: ["6T"], + sing: ["7L1", "6L1", "5L1"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailslap: ["7L1", "6L1", "5L1"], + thief: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L1", "6L1", "5L1"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + }}, + gothita: {learnset: { + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7L46", "6L46", "5L46"], + confide: ["7M", "6M"], + confusion: ["7L3", "6L3", "5L3"], + covet: ["6T", "5T"], + darkpulse: ["7M", "7E", "6M", "6E", "5E"], + doubleslap: ["7L14", "6L14", "5L14"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + faketears: ["7L10", "6L10", "5L10"], + feintattack: ["7L24", "6L24", "5L24"], + flash: ["6M", "5M"], + flatter: ["7L28", "6L28", "5L28"], + fling: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + healbell: ["6T", "5T"], + healblock: ["7L33", "6L33", "5L33"], + healpulse: ["7E", "6E"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magicroom: ["7L48", "6T", "6L48", "5T", "5L48"], + meanlook: ["7E", "6E", "5E"], + miracleeye: ["7E", "6E", "5E"], + mirrorcoat: ["7E", "6E", "5E"], + payback: ["7M", "6M", "5M"], + playnice: ["7L8", "6L8"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L16", "6L16", "5L16"], + psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + raindance: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7L40", "6L40", "5M", "5L40"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L7", "6L7", "5L7"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["7E", "6T", "6E", "5T", "5E"], + zenheadbutt: ["6T", "5T"], + }}, + gothorita: {learnset: { + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7L50", "6L50", "5L50"], + confide: ["7M", "6M"], + confusion: ["7L3", "7L1", "6L1", "5L1"], + covet: ["6T", "5T"], + darkpulse: ["7M", "6M"], + doubleslap: ["7L14", "6L14", "5L14"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + faketears: ["7L10", "6L10", "5L1"], + feintattack: ["7L24", "6L24", "5L24"], + flash: ["6M", "5M"], + flatter: ["7L28", "6L28", "5L28", "5S0", "5S1"], + fling: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31", "5S0", "5S1"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + healbell: ["6T", "5T"], + healblock: ["7L34", "6L34", "5L34"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["5S1"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magicroom: ["7L53", "6T", "6L53", "5T", "5L53"], + mirrorcoat: ["5S0"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L16", "6L16", "5L16"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "5S0", "5S1"], + raindance: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7L43", "6L43", "5M", "5L43"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L7", "7L1", "6L1", "5L1"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + zenheadbutt: ["6T", "5T"], + }}, + gothitelle: {learnset: { + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7L54", "6L54", "5L54"], + confide: ["7M", "6M"], + confusion: ["7L3", "7L1", "6L1", "5L1"], + covet: ["6T", "5T"], + darkpulse: ["7M", "6M"], + doubleslap: ["7L14", "6L14", "5L14"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + faketears: ["7L10", "6L10", "5L1"], + feintattack: ["7L24", "6L24", "5L24"], + flash: ["6M", "5M"], + flatter: ["7L28", "6L28", "5L28"], + fling: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + healbell: ["6T", "5T"], + healblock: ["7L34", "6L34", "5L34"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + lightscreen: ["7M", "6M", "5M"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magicroom: ["7L59", "6T", "6L59", "5T", "5L59"], + payback: ["7M", "6M", "5M"], + playnice: ["7L1", "6L1"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L16", "6L16", "5L16"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + raindance: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["7L45", "6L45", "5M", "5L45"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7L7", "7L1", "6L1", "5L1"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + zenheadbutt: ["6T", "5T"], + }}, + solosis: {learnset: { + acidarmor: ["7E", "6E", "5E"], + afteryou: ["6T", "5T"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + charm: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7L28", "6T", "6L28", "5T", "5L28"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healblock: ["7L46", "6L46", "5L46"], + helpinghand: ["7E", "6T", "6E"], + hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + imprison: ["7E", "6E", "5E"], + infestation: ["7M", "6M"], + irondefense: ["6T"], + lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + magiccoat: ["6T", "5T"], + nightshade: ["7E", "6E", "5E"], + painsplit: ["7L33", "6T", "6L33", "5T", "5L33"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L24", "6L24", "5L24"], + reflect: ["7M", "7L3", "6M", "6L3", "5M", "5L3"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + rollout: ["7L7", "6L7", "5L7"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["7E", "6M", "6E", "5E"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["7L40", "6T", "6L40", "5T", "5L40"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7L10", "6T", "6L10", "5T", "5L10"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["7E", "6T", "6E", "5T", "5E"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7L48", "6T", "6L48", "5T", "5L48"], + zenheadbutt: ["6T", "5T"], + }}, + duosion: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + charm: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7L28", "6T", "6L28", "5T", "5L28"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healblock: ["7L50", "6L50", "5L50"], + helpinghand: ["6T"], + hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + imprison: ["5D"], + infestation: ["7M", "6M"], + irondefense: ["6T"], + lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + magiccoat: ["6T", "5T"], + painsplit: ["7L34", "6T", "6L34", "5T", "5L34"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L24", "6L24", "5L24", "5D"], + reflect: ["7M", "7L3", "7L1", "6M", "6L1", "5M", "5L1"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + rollout: ["7L7", "7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["7L43", "6T", "6L43", "5T", "5L43"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T", "5D"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7L53", "6T", "6L53", "5T", "5L53"], + zenheadbutt: ["6T", "5T"], + }}, + reuniclus: {learnset: { + afteryou: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + charm: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + dizzypunch: ["7L1", "6L41", "5L41"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + endeavor: ["7L28", "6T", "6L28", "5T", "5L28"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + futuresight: ["7L31", "6L31", "5L31"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], + healblock: ["7L54", "6L54", "5L54"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + hyperbeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + infestation: ["7M", "6M"], + irondefense: ["6T"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + magiccoat: ["6T", "5T"], + painsplit: ["7L34", "6T", "6L34", "5T", "5L34"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + psywave: ["7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L24", "6L24", "5L24"], + reflect: ["7M", "7L3", "7L1", "6M", "6L1", "5M", "5L1"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + rollout: ["7L7", "7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + skillswap: ["7L45", "6T", "6L45", "5T", "5L45"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + wonderroom: ["7L59", "6T", "6L59", "5T", "5L59"], + zenheadbutt: ["6T", "5T"], + }}, + ducklett: {learnset: { + aerialace: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + aircutter: ["7E", "6E", "5E"], + airslash: ["7L27", "6L27", "5L27"], + aquaring: ["7L24", "6L24", "5L24"], + attract: ["7M", "6M", "5M"], + bravebird: ["7L41", "6L41", "5L41"], + brine: ["7E", "6E", "5E", "5D"], + bubblebeam: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + defog: ["7L6", "6L6", "5L6", "5D"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + featherdance: ["7L21", "6L21", "5L21"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gust: ["7E", "6E", "5E"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hurricane: ["7L46", "6L46", "5L46"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + luckychant: ["7E", "6E", "5E"], + mefirst: ["7E", "6E", "5E", "5D"], + mirrormove: ["7E", "6E", "5E"], + mudsport: ["7E", "6E"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L30", "6M", "6L30", "5T", "5L30"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["7L13", "6T", "6L13", "5L13"], + watersport: ["7L3", "6L3", "5L3"], + wingattack: ["7L9", "6L9", "5L9"], + }}, + swanna: {learnset: { + aerialace: ["7M", "7L15", "6M", "6L15", "5M", "5L15"], + airslash: ["7L27", "6L27", "5L27"], + aquaring: ["7L24", "6L24", "5L24"], + attract: ["7M", "6M", "5M"], + bravebird: ["7L47", "6L47", "5L47"], + bubblebeam: ["7L19", "6L19", "5L19"], + confide: ["7M", "6M"], + defog: ["7L6", "7L1", "6L1", "5L1"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + featherdance: ["7L21", "6L21", "5L21"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hurricane: ["7L55", "6L55", "5L55"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7L30", "6M", "6L30", "5T", "5L30"], + round: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + skyattack: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7L40", "6T", "6L40", "5T", "5L40"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + watergun: ["7L1", "6L1", "5L1"], + waterpulse: ["7L13", "6T", "6L13", "5L13"], + watersport: ["7L3", "7L1", "6L1", "5L1"], + wingattack: ["7L9", "7L1", "6L1", "5L1"], + }}, + vanillite: {learnset: { + acidarmor: ["7L31", "6L31", "5L31"], + astonish: ["7L7", "6L7", "5L7"], + attract: ["7M", "6M", "5M"], + autotomize: ["7E", "6E", "5E"], + avalanche: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + hail: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + harden: ["7L4", "6L4", "5L4"], + hiddenpower: ["7M", "6M", "5M"], + icebeam: ["7M", "7L35", "6M", "6L35", "5M", "5L35"], + iceshard: ["7E", "6E", "5E"], + iciclespear: ["7L1", "6L1", "5L1"], + icywind: ["7L13", "6T", "6L13", "5T", "5L13"], + imprison: ["7E", "6E", "5E"], + irondefense: ["7E", "6T", "6E", "5T", "5E"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magnetrise: ["7E", "6T", "6E", "5T", "5E"], + mirrorcoat: ["7L44", "6L44", "5L44"], + mirrorshot: ["7L26", "6L26", "5L26"], + mist: ["7L16", "6L16", "5L16"], + naturalgift: ["7E", "6E", "5E"], + powdersnow: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sheercold: ["7L53", "6L53", "5L53"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L10", "6T", "6L10", "5T", "5L10"], + waterpulse: ["7E", "6T", "6E", "5E"], + }}, + vanillish: {learnset: { + acidarmor: ["7L31", "6L31", "5L31"], + astonish: ["7L7", "7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + avalanche: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + hail: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + harden: ["7L4", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + icebeam: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + iceshard: ["5D"], + iciclespear: ["7L1", "6L1", "5L1"], + icywind: ["7L13", "6T", "6L13", "5T", "5L13"], + imprison: ["5D"], + irondefense: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magnetrise: ["6T", "5T"], + mirrorcoat: ["7L47", "6L47", "5L47"], + mirrorshot: ["7L26", "6L26", "5L26", "5D"], + mist: ["7L16", "6L16", "5L16"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sheercold: ["7L58", "6L58", "5L58"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], + waterpulse: ["6T"], + }}, + vanilluxe: {learnset: { + acidarmor: ["7L31", "6L31", "5L31"], + astonish: ["7L7", "7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + avalanche: ["7L19", "6L19", "5L19"], + blizzard: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + freezedry: ["7L1", "6L1"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + harden: ["7L4", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + iciclespear: ["7L1", "6L1", "5L1"], + icywind: ["7L13", "6T", "6L13", "5T", "5L13"], + irondefense: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magnetrise: ["6T", "5T"], + mirrorcoat: ["7L50", "6L50", "5L50"], + mirrorshot: ["7L26", "6L26", "5L26"], + mist: ["7L16", "6L16", "5L16"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sheercold: ["7L67", "7L1", "6L1", "5L67"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L10", "7L1", "6T", "6L1", "5T", "5L1"], + waterpulse: ["6T"], + weatherball: ["7L1", "6L1", "5L1"], + }}, + deerling: {learnset: { + agility: ["7E", "6E", "5E"], + aromatherapy: ["7L28", "6L28", "5L28", "5S0"], + attract: ["7M", "6M", "5M"], + batonpass: ["7E", "6E", "5E"], + bounce: ["6T", "5T"], + camouflage: ["7L1", "6L1", "5L1"], + charm: ["7L36", "6L36", "5L36"], + confide: ["7M", "6M"], + doubleedge: ["7L46", "6L46", "5L46"], + doublekick: ["7L10", "6L10", "5L10"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + energyball: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7L16", "6L16", "5L16", "5S0"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + grassknot: ["7M", "6M", "5M"], + grasswhistle: ["7E", "6E", "5E"], + growl: ["7L4", "6L4", "5L4"], + hiddenpower: ["7M", "6M", "5M"], + jumpkick: ["7L24", "6L24", "5L24", "5S0"], + lastresort: ["6T", "5T"], + leechseed: ["7L13", "6L13", "5L13"], + lightscreen: ["7M", "6M", "5M"], + naturalgift: ["7E", "6E", "5E"], + naturepower: ["7M", "7L41", "6M", "6L41", "5L41"], + odorsleuth: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandattack: ["7L7", "6L7", "5L7"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synthesis: ["7E", "6T", "6E", "5T", "5E"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L20", "6L20", "5L20", "5S0"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + worryseed: ["7E", "6T", "6E", "5T", "5E"], + }}, + sawsbuck: {learnset: { + aromatherapy: ["7L28", "6L28", "5L28"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + camouflage: ["7L1", "6L1", "5L1"], + charm: ["7L36", "6L36", "5L36"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleedge: ["7L52", "6L52", "5L52"], + doublekick: ["7L10", "6L10", "5L10"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + energyball: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L16", "6L16", "5L16"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L4", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hornleech: ["7L1", "6L37", "5L37"], + hyperbeam: ["7M", "6M", "5M"], + jumpkick: ["7L24", "6L24", "5L24"], + lastresort: ["6T", "5T"], + leechseed: ["7L13", "6L13", "5L13"], + lightscreen: ["7M", "6M", "5M"], + megahorn: ["7L1", "6L1", "5L1"], + naturepower: ["7M", "7L44", "6M", "6L44", "5L44"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + sandattack: ["7L7", "7L1", "6L1", "5L1"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + shadowball: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L60", "6M", "6L60", "5M", "5L60"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + synthesis: ["6T", "5T"], + tackle: ["7L1", "6L1", "5L1"], + takedown: ["7L20", "6L20", "5L20"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + worryseed: ["6T", "5T"], + }}, + emolga: {learnset: { + acrobatics: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + aerialace: ["7M", "6M", "5M"], + agility: ["7L46", "6L46", "5L46"], + airslash: ["7E", "6E", "5E", "5D"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + batonpass: ["7E", "6E", "5E"], + charge: ["7L10", "6L10", "5L10"], + chargebeam: ["7M", "6M", "5M"], + charm: ["7E", "6E", "5E", "5D"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E", "5T", "5E"], + cut: ["6M", "5M"], + discharge: ["7L50", "6L50", "5L50"], + doubleteam: ["7M", "7L19", "6M", "6L19", "5M", "5L19"], + electroball: ["7L26", "6L26", "5L26"], + electroweb: ["6T"], + encore: ["7L38", "6L38", "5L38"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + iondeluge: ["7E", "6E"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + knockoff: ["6T", "5T"], + lastresort: ["6T", "5T"], + lightscreen: ["7M", "7L34", "6M", "6L34", "5M", "5L34"], + nuzzle: ["7L15", "6L15"], + protect: ["7M", "6M", "5M"], + pursuit: ["7L16", "6L16", "5L16"], + quickattack: ["7L4", "6L4", "5L4", "5D"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shockwave: ["7L22", "7E", "6T", "6L22", "6E", "5L22", "5E"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spark: ["7L13", "6L13", "5L13"], + speedswap: ["7E"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwhip: ["7L7", "6L7", "5L7"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + voltswitch: ["7M", "7L42", "6M", "6L42", "5M", "5L42"], + wildcharge: ["7M", "6M", "5M"], + }}, + karrablast: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + bugbite: ["7E", "6T", "6E", "5T", "5E", "5D"], + bugbuzz: ["7L28", "6L28", "5L28", "5S0"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + doubleedge: ["7L56", "6L56", "5L56"], + doubleteam: ["7M", "6M", "5M"], + drillrun: ["7E", "6T", "6E"], + endure: ["7L8", "6L8", "5L8", "5D"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L25", "6M", "6L25", "5M", "5L25", "5S0"], + feintattack: ["7E", "6E", "5E"], + flail: ["7L49", "6L49", "5L49", "5S1"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L16", "6L16", "5L16", "5S0"], + furycutter: ["7L13", "6L13", "5L13"], + gigadrain: ["6T", "5T"], + headbutt: ["7L20", "6L20", "5L20", "5S0"], + hiddenpower: ["7M", "6M", "5M"], + hornattack: ["7E", "6E", "5E"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T"], + knockoff: ["7E", "6T", "6E", "5T", "5E"], + leer: ["7L4", "6L4", "5L4"], + megahorn: ["7E", "6E", "5E", "5S1", "5D"], + peck: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L40", "6L40", "5L40"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + signalbeam: ["6T"], + slash: ["7L32", "6L32", "5L32"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + takedown: ["7L37", "6L37", "5L37", "5S1"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L44", "5S1"], + }}, + escavalier: {learnset: { + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bugbite: ["6T", "5T"], + bugbuzz: ["7L28", "6L28", "5L28"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleedge: ["7L1", "6L1"], + doubleteam: ["7M", "6M", "5M"], + drillrun: ["6T"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + fellstinger: ["7L60", "7L1", "6L1"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L16", "6L16", "5L16"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + headbutt: ["7L20", "6L20", "5L20"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["7L40", "6T", "6L40", "5T", "5L40"], + ironhead: ["7L37", "6T", "6L37", "5T", "5L37"], + knockoff: ["6T", "5T"], + leer: ["7L4", "7L1", "6L1", "5L1"], + peck: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + quickguard: ["7L8", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + reversal: ["7L49", "6L49", "5L49"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + signalbeam: ["6T"], + slash: ["7L32", "6L32", "5L32"], + sleeptalk: ["7M", "6M", "5T"], + smartstrike: ["7M"], + snore: ["6T", "5T"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + toxic: ["7M", "6M", "5M"], + twineedle: ["7L13", "7L1", "6L1", "5L1"], + xscissor: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + }}, + foongus: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + afteryou: ["6T", "5T"], + astonish: ["7L8", "6L8", "5L8"], + attract: ["7M", "6M", "5M"], + bide: ["7L12", "6L12", "5L12"], + bodyslam: ["7E", "6E", "5E"], + clearsmog: ["7L39", "6L39", "5L39"], + confide: ["7M", "6M"], + defensecurl: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L20", "6L20", "5L20"], + flash: ["6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7E", "6T", "6E", "5T", "5E"], + gigadrain: ["7L28", "6T", "6L28", "5T", "5L28"], + grassknot: ["7M", "6M", "5M"], + growth: ["7L6", "7E", "6L6", "6E", "5L6", "5E"], + hiddenpower: ["7M", "6M", "5M"], + ingrain: ["7L18", "6L18", "5L18"], + megadrain: ["7L15", "6L15", "5L15"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + poisonpowder: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + ragepowder: ["7L45", "6L45", "5L45"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rollout: ["7E", "6E", "5E"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + spore: ["7L50", "6L50", "5L50"], + stunspore: ["7E", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7L24", "6L24", "5L24"], + synthesis: ["7L35", "6T", "6L35", "5T", "5L35"], + toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + amoonguss: {learnset: { + absorb: ["7L1", "6L1", "5L1"], + afteryou: ["6T", "5T"], + astonish: ["7L8", "7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + bide: ["7L12", "7L1", "6L1", "5L1"], + clearsmog: ["7L43", "6L43", "5L43"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L20", "6L20", "5L20"], + flash: ["6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["6T", "5T"], + gigadrain: ["7L28", "6T", "6L28", "5T", "5L28"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growth: ["7L6", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + ingrain: ["7L18", "6L18", "5L18"], + megadrain: ["7L15", "6L15", "5L15"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + ragepowder: ["7L54", "6L54", "5L54"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + spore: ["7L62", "6L62", "5L62"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + sweetscent: ["7L24", "6L24", "5L24"], + synthesis: ["7L35", "6T", "6L35", "5T", "5L35"], + toxic: ["7M", "7L32", "6M", "6L32", "5M", "5L32"], + venoshock: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + frillish: {learnset: { + absorb: ["7L5", "6L5", "5L5"], + acidarmor: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M"], + brine: ["7L32", "6L32", "5L32"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L13", "6L13", "5L13"], + confide: ["7M", "6M"], + confuseray: ["7E", "6E", "5E"], + constrict: ["7E", "6E", "5E"], + darkpulse: ["7M", "6M", "5T"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + hail: ["7M", "6M", "5M"], + hex: ["7L43", "6L43", "5L43"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L49", "6L49", "5L49"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + magiccoat: ["6T", "5T"], + mist: ["7E", "6E", "5E"], + nightshade: ["7L9", "6L9", "5L9"], + ominouswind: ["7L27", "6L27", "5L27"], + painsplit: ["7E", "6T", "6E", "5T", "5E"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37"], + recover: ["7L17", "7E", "6L17", "6E", "5L17", "5E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + waterpulse: ["7L22", "6T", "6L22", "5L22"], + watersport: ["7L1", "6L1", "5L1"], + waterspout: ["7L61", "6L61", "5L61"], + willowisp: ["7M", "6M", "5M"], + wringout: ["7L55", "6L55", "5L55"], + }}, + jellicent: {learnset: { + absorb: ["7L5", "7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + bind: ["6T", "5T"], + blizzard: ["7M", "6M", "5M"], + brine: ["7L32", "6L32", "5L32", "5S0"], + bubble: ["7L1", "6L1", "5L1"], + bubblebeam: ["7L13", "6L13", "5L13"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T"], + dazzlinggleam: ["7M", "6M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + hex: ["7L45", "6L45", "5L45"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L53", "6L53", "5L53"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + magiccoat: ["6T", "5T"], + nightshade: ["7L9", "7L1", "6L1", "5L1"], + ominouswind: ["7L27", "6L27", "5L27", "5S0"], + painsplit: ["6T", "5T"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "7L37", "6M", "6L37", "5M", "5L37", "5S0"], + recover: ["7L17", "6L17", "5L17"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + waterfall: ["7M", "6M", "5M"], + waterpulse: ["7L22", "6T", "6L22", "5L22", "5S0"], + watersport: ["7L1", "6L1", "5L1"], + waterspout: ["7L69", "7L1", "6L1", "5L69"], + willowisp: ["7M", "6M", "5M"], + wringout: ["7L61", "7L1", "6L1", "5L61"], + }}, + alomomola: {learnset: { + aquajet: ["7L9", "6L9", "5L9"], + aquaring: ["7L5", "6L5", "5L5", "5D"], + attract: ["7M", "6M", "5M"], + blizzard: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + brine: ["7L41", "6L41", "5L41"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + dive: ["6M", "5M"], + doubleslap: ["7L13", "6L13", "5L13"], + doubleteam: ["7M", "6M", "5M"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + healingwish: ["7L57", "7L1", "6L1", "5L57"], + healpulse: ["7L17", "6L17", "5L17"], + helpinghand: ["7L53", "7L1", "6T", "6L49", "5T", "5L49"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L65", "7L1", "6L1", "5L61"], + icebeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + mirrorcoat: ["7E", "6E", "5E", "5D"], + mist: ["7E", "6E", "5E"], + painsplit: ["7E", "6T", "6E", "5T", "5E", "5D"], + playnice: ["7L1"], + pound: ["7L1", "6L1", "5L1"], + protect: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + refresh: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + soak: ["7L33", "6L33", "5L33"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + wakeupslap: ["7L29", "6L29", "5L29"], + waterfall: ["7M", "6M", "5M"], + waterpulse: ["7L25", "6T", "6L25", "5L25"], + watersport: ["7L1", "6L1", "5L1"], + whirlpool: ["7L49"], + wideguard: ["7L61", "7L1", "6L1", "5L53"], + wish: ["7L37", "6L37", "5L37"], + }}, + joltik: {learnset: { + absorb: ["7L1"], + agility: ["7L37", "6L37", "5L37"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + bugbite: ["7L18", "6T", "6L18", "5T", "5L18"], + bugbuzz: ["7L48", "6L48", "5L48"], + camouflage: ["7E", "6E"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crosspoison: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + disable: ["7E", "6E", "5E"], + discharge: ["7L45", "6L45", "5L45"], + doubleteam: ["7M", "6M", "5M"], + electroball: ["7L29", "6L29", "5L29"], + electroweb: ["7L15", "6T", "6L15", "5T", "5L15"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7E", "6E", "5E"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L12", "6L12", "5L12"], + gastroacid: ["7L23", "6T", "6L23", "5T", "5L23"], + gigadrain: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + pinmissile: ["7E", "6E", "5E"], + poisonjab: ["7M", "6M", "5M"], + poisonsting: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], + round: ["7M", "6M", "5M"], + screech: ["7L7", "6L7", "5L7"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["7L34", "6T", "6L34", "5T", "5L34"], + slash: ["7L26", "6L26", "5L26"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spiderweb: ["7L1", "6L1", "5L1"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L40", "6L40", "5L40"], + swagger: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L4", "6M", "6L4", "5M", "5L4"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + galvantula: {learnset: { + absorb: ["7L1"], + agility: ["7L40", "6L40", "5L40"], + attract: ["7M", "6M", "5M"], + bounce: ["6T", "5T"], + bugbite: ["7L18", "6T", "6L18", "5T", "5L18"], + bugbuzz: ["7L60", "6L60", "5L60"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + disable: ["5D"], + discharge: ["7L54", "6L54", "5L54"], + doubleteam: ["7M", "6M", "5M"], + electroball: ["7L29", "6L29", "5L29", "5D"], + electroweb: ["7L15", "6T", "6L15", "5T", "5L15"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L12", "6L12", "5L12"], + gastroacid: ["7L23", "6T", "6L23", "5T", "5L23"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + pursuit: ["5D"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + screech: ["7L7", "6L7", "5L7"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["7L34", "6T", "6L34", "5T", "5L34"], + slash: ["7L26", "6L26", "5L26"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spiderweb: ["7L1", "6L1", "5L1"], + stickyweb: ["7L1", "6L1"], + stringshot: ["7L1", "6L1", "5L1"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7L46", "6L46", "5L46"], + swagger: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "7L4", "7L1", "6M", "6L1", "5M", "5L1"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + ferroseed: {learnset: { + acidspray: ["7E", "6E"], + bulletseed: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + curse: ["7L9", "6L9", "5L9"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "7L55", "6M", "6L55", "5M", "5L55"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "7L52", "6M", "6L52", "5M", "5L52"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gravity: ["7E", "6T", "6E", "5T", "5E"], + gyroball: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + harden: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + ingrain: ["7L35", "6L35", "5L35"], + irondefense: ["7L26", "6T", "6L26", "5T", "5L26"], + ironhead: ["7L43", "6T", "6L43", "5T", "5L43"], + knockoff: ["6T"], + leechseed: ["7E", "6E", "5E"], + magnetrise: ["6T", "5T"], + metalclaw: ["7L14", "6L14", "5L14"], + mirrorshot: ["7L30", "6L30", "5L30"], + naturepower: ["7M", "6M"], + payback: ["7M", "7L47", "6M", "6L47", "5M", "5L47"], + pinmissile: ["7L18", "6L18", "5L18"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rollout: ["7L6", "6L6", "5L6"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["7E", "6T", "6E", "5T", "5E"], + selfdestruct: ["7L38", "6L38", "5L38"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spikes: ["7E", "6E", "5E"], + stealthrock: ["7E", "6T", "6E", "5T", "5E"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + worryseed: ["7E", "6T", "6E", "5T", "5E"], + }}, + ferrothorn: {learnset: { + aerialace: ["7M", "6M", "5M"], + block: ["6T"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7L9", "7L1", "6L1", "5L1"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "7L67", "6M", "6L67", "5M", "5L67"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + gyroball: ["7M", "7L21", "6M", "6L21", "5M", "5L21"], + harden: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + ingrain: ["7L35", "6L35", "5L35"], + irondefense: ["7L26", "6T", "6L26", "5T", "5L26"], + ironhead: ["7L46", "6T", "6L46", "5T", "5L46"], + knockoff: ["6T", "5T"], + magnetrise: ["6T", "5T"], + metalclaw: ["7L14", "6L14", "5L14"], + mirrorshot: ["7L30", "6L30", "5L30"], + naturepower: ["7M", "6M"], + payback: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + pinmissile: ["7L18", "6L18", "5L18"], + poisonjab: ["7M", "6M", "5M"], + powerwhip: ["7L1", "6L40", "5L40"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7L1", "6L1", "5L1"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rollout: ["7L6", "7L1", "6L1", "5L1"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + selfdestruct: ["7L38", "6L38", "5L38"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + worryseed: ["6T", "5T"], + }}, + klink: {learnset: { + autotomize: ["7L31", "6L31", "5L31"], + bind: ["7L21", "6T", "6L21", "5T", "5L21"], + charge: ["7L6", "6L6", "5L6"], + chargebeam: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], + confide: ["7M", "6M"], + discharge: ["7L42", "6L42", "5L42"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + geargrind: ["7L16", "6L16", "5L16"], + gravity: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], + irondefense: ["6T", "5T"], + lockon: ["7L50", "6L50", "5L51"], + magiccoat: ["6T", "5T"], + magnetrise: ["6T", "5T"], + metalsound: ["7L45", "6L45", "5L45"], + mirrorshot: ["7L36", "6L36", "5L36"], + protect: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7L39", "6L39", "5L39"], + secretpower: ["6M"], + shiftgear: ["7L48", "6L48", "5L48"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L11", "6L11", "5L11"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + vicegrip: ["7L1", "6L1", "5L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L54", "6L54", "5L54"], + }}, + klang: {learnset: { + autotomize: ["7L31", "6L31", "5L31"], + bind: ["7L21", "6T", "6L21", "5T", "5L21"], + charge: ["7L6", "7L1", "6L1", "5L1"], + chargebeam: ["7M", "7L26", "6M", "6L26", "5M", "5L26", "5D"], + confide: ["7M", "6M"], + discharge: ["7L44", "6L44", "5L44"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + geargrind: ["7L16", "7L1", "6L1", "5L1"], + gravity: ["6T", "5T", "5D"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "7L64", "6M", "6L64", "5M", "5L64"], + irondefense: ["6T", "5T"], + lockon: ["7L56", "6L56", "5L56"], + magiccoat: ["6T", "5T"], + magnetrise: ["6T", "5T", "5D"], + metalsound: ["7L48", "6L48", "5L48"], + mirrorshot: ["7L36", "6L36", "5L36"], + protect: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7L40", "6L40", "5L40"], + secretpower: ["6M"], + shiftgear: ["7L52", "6L52", "5L52"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L11", "7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + vicegrip: ["7L1", "6L1", "5L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L60", "6L60", "5L60"], + }}, + klinklang: {learnset: { + autotomize: ["7L31", "6L31", "5L31"], + bind: ["7L21", "6T", "6L21", "5T", "5L21"], + charge: ["7L6", "7L1", "6L1", "5L1"], + chargebeam: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + confide: ["7M", "6M"], + discharge: ["7L44", "6L44", "5L44"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + geargrind: ["7L16", "7L1", "6L1", "5L1"], + gearup: ["7L1"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "7L72", "6M", "6L72", "5M", "5L72"], + irondefense: ["6T", "5T"], + lockon: ["7L60", "6L60", "5L60"], + magiccoat: ["6T", "5T"], + magneticflux: ["7L1", "6L1"], + magnetrise: ["6T", "5T"], + metalsound: ["7L48", "6L48", "5L48"], + mirrorshot: ["7L36", "6L36", "5L36"], + protect: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7L40", "6L40", "5L40"], + secretpower: ["6M"], + shiftgear: ["7L54", "6L54", "5L54"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thundershock: ["7L11", "7L1", "6L1", "5L1"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + vicegrip: ["7L1", "6L1", "5L1"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L66", "6L1", "5L66"], + }}, + tynamo: {learnset: { + chargebeam: ["7M", "7L1", "6M", "6L1", "5L1"], + magnetrise: ["6T", "5T"], + spark: ["7L1", "6L1", "5L1"], + tackle: ["7L1", "6L1", "5L1"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5L1"], + }}, + eelektrik: {learnset: { + acid: ["7L19", "6L19", "5L19"], + acidspray: ["7L49", "6L49", "5L49"], + acrobatics: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bind: ["7L9", "6T", "6L9", "5T", "5L9"], + bounce: ["6T", "5T"], + chargebeam: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + coil: ["7L54", "6L54", "5L54"], + confide: ["7M", "6M"], + crunch: ["7L1", "6L39", "5L39"], + discharge: ["7L29", "6L29", "5L29"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7L64", "6T", "6L64", "5T", "5L64"], + gigadrain: ["6T", "5T"], + headbutt: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spark: ["7L1", "6L1", "5L1"], + substitute: ["7M", "6M", "5M"], + superfang: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + thrash: ["7L74", "6L74", "5L74"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "7L44", "6M", "6L44", "5M", "5L44"], + thunderwave: ["7M", "7L1", "6M", "6L1", "5M", "5L1"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "7L59", "6M", "6L59", "5M", "5L59"], + zapcannon: ["7L69", "6L69", "5L69"], + }}, + eelektross: {learnset: { + acid: ["7L1", "6L1", "5L1"], + acrobatics: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bind: ["6T", "5T"], + bounce: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + coil: ["7L1", "6L1"], + confide: ["7M", "6M"], + crunch: ["7L1", "6L1", "5L1"], + crushclaw: ["7L1", "6L1", "5L1"], + cut: ["6M", "5M"], + discharge: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["6T"], + dragontail: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["7L1", "6T", "6L1", "5T"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + headbutt: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + iondeluge: ["7L1", "6L1"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + outrage: ["6T"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superfang: ["6T", "5T"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + thrash: ["7L1", "6L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zapcannon: ["7L1", "6L1"], + }}, + elgyem: {learnset: { + afteryou: ["6T", "5T"], + allyswitch: ["7E", "6E", "5M"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + barrier: ["7E", "6E", "5E", "5D"], + calmmind: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1"], + cosmicpower: ["7E", "6E"], + darkpulse: ["7M", "6M", "5T"], + disable: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + growl: ["7L4", "6L4", "5L4"], + guardsplit: ["7L50", "6L50", "5L50"], + guardswap: ["7E", "6E", "5E"], + headbutt: ["7L18", "6L18", "5L18"], + healblock: ["7L8", "6L8", "5L8", "5D"], + hiddenpower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + imprison: ["7L25", "6L25", "5L25"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + miracleeye: ["7L11", "6L11", "5L11"], + nastyplot: ["7E", "6E", "5E", "5D"], + painsplit: ["6T", "5T"], + powersplit: ["7L50", "6L50", "5L50"], + powerswap: ["7E", "6E", "5E"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L15", "6L15", "5L15"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychup: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recover: ["7L46", "6L46", "5L46"], + recycle: ["6T", "5T"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + simplebeam: ["7L29", "6L29", "5L29"], + skillswap: ["7E", "6T", "6E", "5T", "5E"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synchronoise: ["7L53", "6L53", "5L53"], + telekinesis: ["5M"], + teleport: ["7E", "6E", "5E"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + wonderroom: ["7L56", "6T", "6L56", "5T", "5L56"], + zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32"], + }}, + beheeyem: {learnset: { + afteryou: ["6T", "5T"], + allyswitch: ["5M"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1", "5L1"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + growl: ["7L4", "7L1", "6L1", "5L1"], + guardsplit: ["7L56", "6L56", "5L56"], + headbutt: ["7L18", "6L18", "5L18"], + healblock: ["7L8", "7L1", "6L1", "5L1"], + hiddenpower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + hyperbeam: ["7M", "6M", "5M"], + imprison: ["7L25", "6L25", "5L25"], + lightscreen: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + miracleeye: ["7L11", "7L1", "6L1", "5L1"], + painsplit: ["6T", "5T"], + powersplit: ["7L58", "6L58", "5L58"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L15", "6L15", "5L15"], + psychic: ["7M", "7L39", "6M", "6L39", "5M", "5L39"], + psychicterrain: ["7L1"], + psychup: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + psyshock: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + recover: ["7L50", "6L50", "5L50"], + recycle: ["6T", "5T"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + simplebeam: ["7L29", "6L29", "5L29"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + synchronoise: ["7L63", "7L1", "6L1", "5L63"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + wonderroom: ["7L68", "7L1", "6T", "6L1", "5T", "5L68"], + zenheadbutt: ["7L32", "6T", "6L32", "5T", "5L32"], + }}, + litwick: {learnset: { + acid: ["7E", "6E", "5E"], + acidarmor: ["7E", "6E", "5E"], + astonish: ["7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + captivate: ["7E", "6E", "5E"], + clearsmog: ["7E", "6E", "5E"], + confide: ["7M", "6M"], + confuseray: ["7L10", "6L10", "5L10"], + curse: ["7L43", "6L43", "5L43"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + ember: ["7L1", "6L1", "5L1"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firespin: ["7L7", "6L7", "5L7"], + flameburst: ["7L20", "6L20", "5L20"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + haze: ["7E", "6E", "5E"], + heatwave: ["7E", "6T", "6E", "5T", "5E"], + hex: ["7L28", "6L28", "5L28"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["7L24", "6L24", "5L24"], + incinerate: ["6M", "5M"], + inferno: ["7L38", "6L38", "5L38"], + memento: ["7L33", "6L33", "5L33"], + minimize: ["7L3", "6L3", "5L3"], + nightshade: ["7L13", "6L13", "5L13"], + overheat: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], + painsplit: ["7L55", "6T", "6L55", "5T", "5L55"], + payback: ["7M", "6M", "5M"], + powersplit: ["7E", "6E"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + smog: ["7L5", "6L5", "5L5"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + }}, + lampent: {learnset: { + astonish: ["7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confuseray: ["7L10", "6L10", "5L10"], + curse: ["7L45", "6L45", "5L45"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + ember: ["7L1", "6L1", "5L1"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + firespin: ["7L7", "6L7", "5L7"], + flameburst: ["7L20", "6L20", "5L20"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + heatwave: ["6T", "5T"], + hex: ["7L28", "6L28", "5L28"], + hiddenpower: ["7M", "6M", "5M"], + imprison: ["7L24", "6L24", "5L24"], + incinerate: ["6M", "5M"], + inferno: ["7L38", "6L38", "5L38"], + memento: ["7L33", "6L33", "5L33"], + minimize: ["7L3", "7L1", "6L1", "5L1"], + nightshade: ["7L13", "6L13", "5L13"], + overheat: ["7M", "7L69", "6M", "6L69", "5M", "5L69"], + painsplit: ["7L61", "6T", "6L61", "5T", "5L61"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + smog: ["7L5", "7L1", "6L1", "5L1"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "7L16", "6M", "6L16", "5M", "5L16"], + }}, + chandelure: {learnset: { + attract: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1", "5L1"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dreameater: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M", "5S0"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + flameburst: ["7L1", "6L1", "5L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + heatwave: ["6T", "5T", "5S0"], + hex: ["7L1", "6L1", "5L1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + overheat: ["7M", "6M", "5M"], + painsplit: ["7L1", "6T", "6L1", "5T"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M", "5S0"], + psychup: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M", "5S0"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M", "5T"], + smog: ["7L1", "6L1", "5L1"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spite: ["6T", "5T"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + }}, + axew: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + assurance: ["7L7", "6L7", "5L7"], + attract: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + counter: ["7E", "6E", "5E", "5D"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S1"], + dragondance: ["7L32", "6L32", "5L32"], + dragonpulse: ["7L41", "7E", "6T", "6L41", "6E", "5T", "5L41", "5E"], + dragonrage: ["7L10", "6L10", "5L10", "5S0", "5S1", "5S2", "5D"], + dualchop: ["7L13", "6T", "6L13", "5T", "5L13"], + endeavor: ["7E", "6T", "6E", "5T", "5E"], + endure: ["7E", "6E", "5E", "5S1"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + fling: ["7M", "6M", "5M"], + focusenergy: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L61", "6M", "6L61", "5M", "5L61", "5S2"], + guillotine: ["7L50", "6L50", "5L51"], + harden: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + leer: ["7L4", "6L4", "5L4"], + nightslash: ["7E", "6E", "5E", "5D"], + outrage: ["7L56", "6T", "6L56", "5T", "5L56", "5S2"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + razorwind: ["7E", "6E", "5E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M", "5S1"], + reversal: ["7E", "6E", "5E"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L16", "6L16", "5L16"], + scratch: ["7L1", "6L1", "5L1", "5S0", "5S2"], + secretpower: ["6M"], + shockwave: ["6T"], + slash: ["7L20", "6L20", "5L20"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L46", "6M", "6L46", "5M", "5L46"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + fraxure: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + assurance: ["7L7", "7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + dragondance: ["7L32", "6L32", "5L32"], + dragonpulse: ["7L42", "6T", "6L42", "5T", "5L42"], + dragonrage: ["7L10", "7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + dualchop: ["7L13", "6T", "6L13", "5T", "5L13"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + fling: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L66", "6M", "6L66", "5M", "5L66"], + guillotine: ["7L54", "6L54", "5L54"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + outrage: ["7L60", "6T", "6L60", "5T", "5L60"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L16", "6L16", "5L16"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["6T"], + slash: ["7L20", "6L20", "5L20"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L48", "6M", "6L48", "5M", "5L48"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + haxorus: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + assurance: ["7L7", "7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L28", "6M", "6L28", "5M", "5L28"], + dragondance: ["7L32", "6L32", "5L32", "5S0"], + dragonpulse: ["7L42", "6T", "6L42", "5T", "5L42"], + dragonrage: ["7L10", "7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + dualchop: ["7L13", "6T", "6L13", "5T", "5L13", "5S0"], + earthquake: ["7M", "6M", "5M", "5S0"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "7L24", "6M", "6L24", "5M", "5L24"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "7L74", "6M", "6L74", "5M", "5L74"], + grassknot: ["7M", "6M", "5M"], + guillotine: ["7L58", "6L58", "5L58"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + leer: ["7L4", "7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + outrage: ["7L66", "7L1", "6T", "6L1", "5T", "5L66"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L16", "6L16", "5L16"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["6T"], + slash: ["7L20", "6L20", "5L20"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + taunt: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M", "5S0"], + }}, + cubchoo: {learnset: { + aerialace: ["7M", "6M", "5M"], + assurance: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + avalanche: ["7E", "6E", "5E"], + bide: ["7L9", "6L9", "5L9", "5S0"], + blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + brine: ["7L21", "6L21", "5L21"], + charm: ["7L29", "6L29", "5L29"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E"], + endure: ["7L25", "6L25", "5L25"], + facade: ["7M", "6M", "5M"], + flail: ["7L36", "6L36", "5L36"], + fling: ["7M", "6M", "5M"], + focuspunch: ["7E", "6T", "6E", "5E"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L17", "6L17", "5L17"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L5", "5S0"], + hail: ["7M", "7L49", "6M", "6L49", "5M", "5L49"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["7E", "6T", "6E", "5T", "5E"], + icywind: ["7L13", "6T", "6L13", "5T", "5L13", "5S0"], + lowkick: ["6T", "5T"], + nightslash: ["7E", "6E", "5E"], + playnice: ["7L15", "6L15"], + playrough: ["7E", "6E"], + powdersnow: ["7L5", "6L5", "5L1", "5S0"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sheercold: ["7L57", "6L57", "5L57"], + slash: ["7L33", "6L33", "5L33"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + thrash: ["7L53", "6L53", "5L53"], + toxic: ["7M", "6M", "5M"], + waterpulse: ["6T"], + yawn: ["7E", "6E", "5E"], + }}, + beartic: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L1", "6L1", "5L1"], + attract: ["7M", "6M", "5M"], + bide: ["7L9", "7L1", "6L1", "5L1"], + blizzard: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + brickbreak: ["7M", "6M", "5M"], + brine: ["7L21", "6L21", "5L21"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + dive: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + endure: ["7L25", "6L25", "5L25"], + facade: ["7M", "6M", "5M"], + flail: ["7L36", "6L36", "5L36"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L17", "6L17", "5L17"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + growl: ["7L1", "6L1", "5L1"], + hail: ["7M", "7L53", "6M", "6L53", "5M", "5L53"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + iciclecrash: ["7L1", "6L37", "5L37"], + icywind: ["7L13", "7L1", "6T", "6L1", "5T", "5L1"], + lowkick: ["6T", "5T"], + playnice: ["7L15", "6L9"], + powdersnow: ["7L5", "7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sheercold: ["7L66", "7L1", "6L1", "5L66"], + slash: ["7L33", "6L33", "5L33"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["7L1", "6T", "6L1", "5T", "5L1"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "7L29", "6M", "6L29", "5M", "5L29"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L59", "7L1", "6L1", "5L59"], + toxic: ["7M", "6M", "5M"], + waterpulse: ["6T"], + }}, + cryogonal: {learnset: { + acidarmor: ["7L17", "6L29", "5L29"], + acrobatics: ["7M", "6M", "5M"], + ancientpower: ["7L21"], + attract: ["7M", "6M", "5M"], + aurorabeam: ["7L13", "6L25", "5L25"], + auroraveil: ["7M"], + bind: ["7L1", "6T", "6L1", "5T", "5L1"], + blizzard: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + confuseray: ["7L41", "6L45", "5L45"], + doubleteam: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + freezedry: ["7L49", "6L50"], + frostbreath: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + haze: ["7L9", "6L1", "5L21"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + icebeam: ["7M", "7L25", "6M", "6L33", "5M", "5L33"], + iceshard: ["7L1", "6L1", "5L5"], + icywind: ["7L5", "6T", "6L17", "5T", "5L17"], + irondefense: ["6T", "5T"], + knockoff: ["6T", "5T"], + lightscreen: ["7M", "7L29", "6M", "6L37", "5M", "5L37"], + magiccoat: ["6T", "5T"], + mist: ["7L9", "6L1", "5L21"], + nightslash: ["7L53", "7L1", "6L1", "5L57"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rapidspin: ["7L1", "6L13", "5L13"], + recover: ["7L45", "6L49", "5L49"], + reflect: ["7M", "7L33", "6M", "6L37", "5M", "5L37"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sharpen: ["7L1", "6L9", "5L9"], + sheercold: ["7L57", "7L1", "6L1", "5L61"], + signalbeam: ["6T", "5T"], + slash: ["7L37", "6L41", "5L41"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "7L50", "6M", "6L53", "5M", "5L53"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterpulse: ["6T"], + }}, + shelmet: {learnset: { + absorb: ["7L1"], + acid: ["7L4", "6L4", "5L4", "5D"], + acidarmor: ["7L32", "6L32", "5L32"], + attract: ["7M", "6M", "5M"], + batonpass: ["7E", "6E", "5E", "5D"], + bide: ["7L8", "6L8", "5L8"], + bodyslam: ["7L40", "6L40", "5L40", "5S1"], + bugbite: ["6T", "5T"], + bugbuzz: ["7L44", "6L44", "5L44", "5S1"], + confide: ["7M", "6M"], + curse: ["7L13", "6L13", "5L13"], + doubleedge: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + encore: ["7E", "6E", "5E", "5S1", "5D"], + endure: ["7E", "6E", "5E"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feint: ["7E", "6E", "5E"], + finalgambit: ["7L56", "6L56", "5L56"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["6T", "5T"], + gigadrain: ["7L37", "6T", "6L37", "5T", "5L37", "5S1"], + guardsplit: ["7E", "6E", "5E"], + guardswap: ["7L50", "6L50", "5L52"], + hiddenpower: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + leechlife: ["7M", "6L1", "5L1"], + megadrain: ["7L20", "6L20", "5L20", "5S0"], + mindreader: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E"], + protect: ["7M", "7L28", "6M", "6L28", "5M", "5L28", "5S0"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + recover: ["7L49", "6L49", "5L49"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + spikes: ["7E", "6E", "5E"], + strugglebug: ["7L16", "6M", "6L16", "5M", "5L16", "5S0"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + venoshock: ["7M", "6M", "5M"], + yawn: ["7L25", "6L25", "5L25", "5S0"], + }}, + accelgor: {learnset: { + absorb: ["7L1"], + acidspray: ["7L4", "7L1", "6L1", "5L1"], + agility: ["7L32", "6L32", "5L32"], + attract: ["7M", "6M", "5M"], + bugbite: ["6T", "5T"], + bugbuzz: ["7L44", "6L44", "5L44"], + confide: ["7M", "6M"], + doubleteam: ["7M", "7L8", "7L1", "6M", "6L1", "5M", "5L1"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + finalgambit: ["7L56", "7L1", "6L1", "5L56"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gastroacid: ["6T", "5T"], + gigadrain: ["7L37", "6T", "6L37", "5T", "5L37"], + gigaimpact: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + knockoff: ["6T", "5T"], + leechlife: ["7M", "6L1", "5L1"], + mefirst: ["7L28", "6L28", "5L28"], + megadrain: ["7L20", "6L20", "5L20"], + powerswap: ["7L52", "7L1", "6L1", "5L52"], + protect: ["7M", "6M", "5M"], + quickattack: ["7L13", "7L1", "6L1", "5L1"], + raindance: ["7M", "6M", "5M"], + recover: ["7L49", "6L49", "5L49"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + secretpower: ["6M"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + strugglebug: ["7L16", "6M", "6L16", "5M", "5L16"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7L25", "6L25", "5L25"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "7L40", "6M", "6L40", "5M", "5L40"], + venoshock: ["7M", "6M", "5M"], + watershuriken: ["7L1", "6L1"], + }}, + stunfisk: {learnset: { + aquatail: ["6T", "5T"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bide: ["7L5", "6L5", "5L5"], + bounce: ["7L35", "6T", "6L35", "5T", "5L35"], + bulldoze: ["7M", "6M", "5M"], + camouflage: ["7L17", "6L17", "5L17"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E", "5D"], + dig: ["6M", "5M"], + discharge: ["7L25", "6L25", "5L25"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7E", "6T", "6E", "5T", "5E"], + earthquake: ["7M", "6M", "5M"], + eerieimpulse: ["7E", "6E"], + electroweb: ["6T", "5T"], + endeavor: ["6T", "5T"], + endure: ["7L30", "6L30", "5L30"], + facade: ["7M", "6M", "5M"], + fissure: ["7L61", "7L1", "6L1", "5L61"], + flail: ["7L55", "7L1", "6L1", "5L55"], + flash: ["6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + magnetrise: ["6T", "5T"], + mefirst: ["7E", "6E"], + mudbomb: ["7L21", "6L21", "5L21"], + muddywater: ["7L40", "6L40", "5L40"], + mudshot: ["7L13", "6L13", "5L13"], + mudslap: ["7L1", "6L1", "5L1", "5D"], + mudsport: ["7L1", "6L1", "5L1"], + painsplit: ["7E", "6T", "6E", "5T", "5E"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflecttype: ["7E", "6E"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7L50", "6L50", "5L50"], + rockslide: ["7M", "6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + shockwave: ["7E", "6T", "6E", "5E"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + spark: ["7E", "6E", "5E"], + spite: ["7E", "6T", "6E", "5T", "5E"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + thundershock: ["7L9", "6L9", "5L9"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + watergun: ["7L1", "6L1"], + waterpulse: ["6T"], + yawn: ["7E", "6E", "5E", "5D"], + }}, + mienfoo: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + allyswitch: ["7E", "6E"], + attract: ["7M", "6M", "5M"], + aurasphere: ["7L61", "6L61", "5L61"], + batonpass: ["7E", "6E", "5E"], + bounce: ["7L49", "6T", "6L49", "5T", "5L49"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + calmmind: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + confide: ["7M", "6M"], + detect: ["7L9", "6L9", "5L9"], + dig: ["6M", "5M"], + doubleslap: ["7L17", "6L17", "5L17"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7L33", "6T", "6L33", "5T", "5L33"], + dualchop: ["6T", "5T"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + fakeout: ["7L13", "6L13", "5L13"], + feint: ["7E", "6E", "5E"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + forcepalm: ["7L29", "6L29", "5L29"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + highjumpkick: ["7L50", "6L50", "5L53"], + jumpkick: ["7L37", "6L37", "5L37"], + knockoff: ["7E", "6T", "6E", "5T", "5E"], + lowkick: ["7E", "6T", "6E", "5T", "5E"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7L5", "6L5", "5L5"], + mefirst: ["7E", "6E", "5E"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickguard: ["7L45", "6L45", "5L45"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + reversal: ["7L57", "6L57", "5L57"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smellingsalts: ["7E", "6E", "5E"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7L21", "6L21", "5L21"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + vitalthrow: ["7E", "6E", "5E"], + workup: ["7M", "5M"], + }}, + mienshao: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + attract: ["7M", "6M", "5M"], + aurasphere: ["7L70", "7L1", "6L1", "5L70"], + bounce: ["7L49", "6T", "6L49", "5T", "5L49"], + brickbreak: ["7M", "6M", "5M"], + bulkup: ["7M", "6M", "5M"], + calmmind: ["7M", "7L25", "6M", "6L25", "5M", "5L25"], + confide: ["7M", "6M"], + detect: ["7L9", "7L1", "6L1", "5L1"], + dig: ["6M", "5M"], + doubleslap: ["7L17", "6L17", "5L17"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["7L33", "6T", "6L33", "5T", "5L33"], + dualchop: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + fakeout: ["7L13", "7L1", "6L1", "5L1"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + forcepalm: ["7L29", "6L29", "5L29"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + highjumpkick: ["7L56", "6L56", "5L56"], + hyperbeam: ["7M", "6M", "5M"], + jumpkick: ["7L37", "6L37", "5L37"], + knockoff: ["6T", "5T"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + meditate: ["7L5", "7L1", "6L1", "5L1"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + reversal: ["7L63", "7L1", "6L1", "5L63"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swift: ["7L21", "6L21", "5L21"], + swordsdance: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + wideguard: ["7L45", "6L45", "5L45"], + workup: ["7M", "5M"], + }}, + druddigon: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bite: ["7L9", "6L9", "5L9", "5D"], + bulldoze: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + chipaway: ["7L31", "6L31", "5L31"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L25"], + crushclaw: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonclaw: ["7M", "7L27", "6M", "6L27", "5M", "5L27"], + dragonpulse: ["6T", "5T"], + dragonrage: ["7L18", "6L18", "5L18"], + dragontail: ["7M", "7L45", "6M", "6L45", "5M", "5L45"], + earthquake: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7E", "6E", "5E"], + firefang: ["7E", "6E", "5E", "5D"], + firepunch: ["6T", "5T"], + flamethrower: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + glare: ["7E", "6E", "5E"], + gunkshot: ["6T", "5T"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L5", "6M", "6L5", "5M", "5L5"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + ironhead: ["6T", "5T"], + irontail: ["7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1", "5S0"], + metalclaw: ["7E", "6E", "5E"], + nightslash: ["7L40", "6L40", "5L40"], + outrage: ["7L62", "6T", "6L62", "5T", "5L62"], + payback: ["7M", "6M", "5M"], + poisontail: ["7E", "6E", "5E"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7L35", "6L35", "5L35"], + roar: ["7M", "6M", "5M"], + rockclimb: ["7L49", "6L49", "5L49"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L13", "6L13", "5L13"], + scratch: ["7L1", "6L1", "5L1", "5S0"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["6T"], + slash: ["7L21", "6L21", "5L21"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snarl: ["7M", "6M", "5M"], + snatch: ["7E", "6T", "6E", "5T", "5E"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5E", "5D"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L55", "6T", "6L55", "5T", "5L55"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E"], + thunderpunch: ["6T", "5T"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + }}, + golett: {learnset: { + astonish: ["7L1", "6L1", "5L1"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7L45", "6L40", "5L40"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + dynamicpunch: ["7L35", "6L30", "5L30"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "7L50", "6M", "6L45", "5M", "5L45"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T", "5D"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7L61", "6T", "6L55", "5L55"], + frustration: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M"], + hammerarm: ["7L55", "6L50", "5L50"], + hiddenpower: ["7M", "6M", "5M"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T"], + irondefense: ["7L17", "6T", "6L17", "5T", "5L17"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magnitude: ["7L30", "6L25", "5L25"], + megapunch: ["7L25", "6L21", "5L21"], + mudslap: ["7L5", "6L5", "5L5"], + nightshade: ["7L40", "6L35", "5L35"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L9", "6L9", "5L9", "5D"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowpunch: ["7L13", "6L13", "5L13"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stompingtantrum: ["7L21"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T", "5D"], + toxic: ["7M", "6M", "5M"], + }}, + golurk: {learnset: { + astonish: ["7L1", "6L1", "5L1"], + block: ["6T", "5T"], + brickbreak: ["7M", "6M", "5M"], + bulldoze: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + curse: ["7L47", "6L40", "5L40"], + defensecurl: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + dynamicpunch: ["7L35", "6L30", "5L30"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "7L54", "6M", "6L50", "5M", "5L50"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["7L69", "6T", "6L1", "5L70"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + gyroball: ["7M", "6M", "5M", "5S0"], + hammerarm: ["7L61", "6L60", "5L60", "5S0"], + heavyslam: ["7L1", "6L43", "5L43"], + hiddenpower: ["7M", "6M", "5M"], + highhorsepower: ["7L1"], + hyperbeam: ["7M", "6M", "5M", "5S0"], + icebeam: ["7M", "6M", "5M"], + icepunch: ["6T", "5T"], + icywind: ["6T", "5T"], + irondefense: ["7L17", "6T", "6L17", "5T", "5L17"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magnitude: ["7L30", "6L25", "5L25"], + megapunch: ["7L25", "6L21", "5L21"], + mudslap: ["7L5", "7L1", "6L1", "5L1"], + nightshade: ["7L40", "6L35", "5L35"], + phantomforce: ["7L76", "6L1"], + pound: ["7L1", "6L1", "5L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + rollout: ["7L9", "6L9", "5L9"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowpunch: ["7L13", "6L13", "5L13", "5S0"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stealthrock: ["6T", "5T"], + stompingtantrum: ["7L21"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + telekinesis: ["5M"], + thief: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + pawniard: {learnset: { + aerialace: ["7M", "6M", "5M"], + assurance: ["7L33", "6L33", "5L33"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dualchop: ["6T", "5T"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L17", "6L17", "5L17"], + fling: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L9", "6L9", "5L9", "5D"], + grassknot: ["7M", "6M", "5M"], + guillotine: ["7L62", "6L62", "5L62"], + headbutt: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irondefense: ["7L46", "6T", "6L46", "5T", "5L46"], + ironhead: ["7L54", "6T", "6L54", "5T", "5L54"], + knockoff: ["6T", "5T"], + leer: ["7L6", "6L6", "5L6"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + meanlook: ["7E", "6E", "5E"], + metalclaw: ["7L25", "6L25", "5L25"], + metalsound: ["7L38", "6L38", "5L38"], + nightslash: ["7L49", "6L49", "5L49"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psychocut: ["7E", "6E", "5E", "5D"], + pursuit: ["7E", "6E", "5E"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L22", "6L22", "5L22"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L30", "6L30", "5L30"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stealthrock: ["7E", "6T", "6E", "5T", "5E"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5E", "5D"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L57", "6M", "6L57", "5M", "5L57"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L14", "6M", "6L14", "5M", "5L14"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + bisharp: {learnset: { + aerialace: ["7M", "6M", "5M"], + assurance: ["7L33", "6L33", "5L33"], + attract: ["7M", "6M", "5M"], + brickbreak: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + darkpulse: ["7M", "6M", "5T"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dualchop: ["6T", "5T"], + embargo: ["7M", "7L41", "6M", "6L41", "5M", "5L41"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + feintattack: ["7L17", "6L17", "5L17"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L9", "7L1", "6L1", "5L1"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + guillotine: ["7L71", "7L1", "6L1", "5L71"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["7L46", "6T", "6L46", "5T", "5L46"], + ironhead: ["7L57", "7L1", "6T", "6L1", "5T", "5L57"], + knockoff: ["6T", "5T"], + leer: ["7L6", "7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + metalburst: ["7L1", "6L1", "5L1"], + metalclaw: ["7L25", "6L25", "5L25"], + metalsound: ["7L38", "6L38", "5L38"], + nightslash: ["7L49", "6L49", "5L49"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + scaryface: ["7L22", "6L22", "5L22"], + scratch: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L30", "6L30", "5L30"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L63", "6M", "6L63", "5M", "5L63"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "7L14", "7L1", "6M", "6L1", "5M", "5L1"], + toxic: ["7M", "6M", "5M"], + xscissor: ["7M", "6M", "5M"], + }}, + bouffalant: {learnset: { + aerialace: ["7M", "6M", "5M"], + amnesia: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + belch: ["7E", "6E"], + bulldoze: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthquake: ["7M", "6M", "6S0", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "6S0", "5M"], + focusenergy: ["7L36", "6L36", "5L36"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L11", "6L11", "5L11"], + gigaimpact: ["7M", "7L61", "6M", "6L61", "5M", "5L61"], + headbutt: ["7E", "6E", "5E"], + headcharge: ["7L31", "6L31", "6S0", "5L31"], + hiddenpower: ["7M", "6M", "5M"], + hornattack: ["7L16", "6L16", "5L16"], + ironhead: ["7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1"], + megahorn: ["7L41", "6L41", "5L41"], + mudshot: ["7E", "6E", "5E"], + mudslap: ["7E", "6E", "5E"], + outrage: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7L1", "6L1", "5L1"], + rage: ["7L6", "6L6", "5L6"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7L26", "6L26", "5L26"], + reversal: ["7L46", "6L46", "5L46"], + rockclimb: ["7E", "6E", "5E"], + rockslide: ["7M", "6M", "6S0", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L21", "6L21", "5L21"], + secretpower: ["6M"], + skullbash: ["7E", "6E", "5E"], + sleeptalk: ["7M", "6M", "5T"], + smartstrike: ["7M"], + snore: ["6T", "5T"], + stomp: ["7E", "6E", "5E"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L56", "6M", "6L56", "5M", "5L56"], + taunt: ["7M", "6M", "5M"], + thrash: ["7L50", "6L50", "5L51"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + wildcharge: ["7M", "6M", "5M"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + rufflet: {learnset: { + aerialace: ["7M", "7L23", "6M", "6L23", "5M", "5L23"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + bravebird: ["7L59", "6L59", "5L59"], + bulkup: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crushclaw: ["7L46", "6L46", "5L46"], + cut: ["6M", "5M"], + defog: ["7L32", "6L32", "5L32"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L5", "6L5", "5L5"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L14", "6M", "6L14", "5M", "5L14"], + leer: ["7L1", "6L1", "5L1"], + peck: ["7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L19", "6L19", "5L19"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + skydrop: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + slash: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], + thrash: ["7L64", "6L64", "5L64"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L55", "6L55", "5L55"], + wingattack: ["7L10", "6L10", "5L10"], + workup: ["7M", "5M"], + }}, + braviary: {learnset: { + aerialace: ["7M", "7L23", "6M", "6L23", "5M", "5L23", "5S0"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + bravebird: ["7L63", "7L1", "6L1", "5L63"], + bulkup: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crushclaw: ["7L46", "6L46", "5L46"], + cut: ["6M", "5M"], + defog: ["7L32", "6L32", "5L32"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L5", "7L1", "6L1", "5L1"], + gigaimpact: ["7M", "6M", "5M"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L14", "6M", "6L14", "5M", "5L14", "5S0"], + hyperbeam: ["7M", "6M", "5M"], + leer: ["7L1", "6L1", "5L1"], + peck: ["7L1", "6L1", "5L1"], + pluck: ["5M"], + protect: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L19", "6L19", "5L19", "5S0"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + skyattack: ["6T", "5T"], + skydrop: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + slash: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["7L1", "6T", "6L1", "5T", "5L51"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], + thrash: ["7L70", "7L1", "6L1", "5L70"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L57", "7L1", "6L1", "5L57"], + wingattack: ["7L10", "7L1", "6L1", "5L1", "5S0"], + workup: ["7M", "5M"], + zenheadbutt: ["6T"], + }}, + vullaby: {learnset: { + aerialace: ["7M", "6M", "5M"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bravebird: ["7L59", "6L59", "5L59"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + darkpulse: ["7M", "7L46", "6M", "6L46", "5T", "5L46"], + defog: ["7L32", "6L32", "5L32"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + facade: ["7M", "6M", "5M"], + faketears: ["7E", "6E", "5E"], + feintattack: ["7L23", "6L23", "5L23"], + flatter: ["7L19", "6L19", "5L19"], + fly: ["7M", "6M", "5M"], + foulplay: ["7E", "6T", "6E", "5T"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L5", "6L5", "5L5"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irondefense: ["5T"], + knockoff: ["7E", "6T", "6E", "5T", "5E"], + leer: ["7L1", "6L1", "5L1"], + meanlook: ["7E", "6E", "5E"], + mirrormove: ["7L64", "6L64", "5L64"], + nastyplot: ["7L14", "6L14", "5L14"], + payback: ["7M", "6M", "5M"], + pluck: ["7L10", "6L10", "5M", "5L10"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L28", "6L28", "5L28"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "7E", "6M", "6E", "5T", "5E"], + round: ["7M", "6M", "5M"], + scaryface: ["7E", "6E", "5E"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "7E", "6M", "6E", "5E"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L55", "6L55", "5L55"], + }}, + mandibuzz: {learnset: { + aerialace: ["7M", "6M", "5M"], + airslash: ["7L41", "6L41", "5L41"], + attract: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bonerush: ["7L1", "6L1", "5L51"], + bravebird: ["7L63", "7L1", "6L1", "5L63"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + darkpulse: ["7M", "7L46", "6M", "6L46", "5T", "5L46"], + defog: ["7L32", "6L32", "5L32"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "7L50", "6M", "6L50", "5M", "5L50"], + facade: ["7M", "6M", "5M"], + feintattack: ["7L23", "6L23", "5L23", "5S0"], + flatter: ["7L19", "6L19", "5L19", "5S0"], + fly: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + furyattack: ["7L5", "7L1", "6L1", "5L1"], + gigaimpact: ["7M", "6M", "5M"], + gust: ["7L1", "6L1", "5L1"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irondefense: ["5T"], + knockoff: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + mirrormove: ["7L70", "7L1", "6L1", "5L70"], + nastyplot: ["7L14", "6L14", "5L14", "5S0"], + payback: ["7M", "6M", "5M"], + pluck: ["7L10", "7L1", "6L1", "5M", "5L1", "5S0"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + punishment: ["7L28", "6L28", "5L28"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + skyattack: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snarl: ["7M", "6M", "5M"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["7L37", "6T", "6L37", "5T", "5L37"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L57", "7L1", "6L1", "5L57"], + }}, + heatmor: {learnset: { + aerialace: ["7M", "6M", "5M"], + amnesia: ["7L47", "6L44", "5L46"], + attract: ["7M", "6M", "5M"], + belch: ["7E", "6E"], + bind: ["7L11", "6T", "6L11", "5T", "5L11"], + bodyslam: ["7E", "6E", "5E"], + bugbite: ["7L36", "6T", "6L36", "5T", "5L36"], + confide: ["7M", "6M"], + curse: ["7E", "6E", "5E"], + cut: ["6M", "5M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + feintattack: ["7E", "6E", "5E"], + fireblast: ["7M", "6M", "5M"], + firelash: ["7L44"], + firepunch: ["6T", "5T"], + firespin: ["7L16", "6L16", "5L16"], + flameburst: ["7L31", "6L31", "5L31"], + flamethrower: ["7M", "7L50", "6M", "6L47", "5M", "5L51"], + flareblitz: ["7L61"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + furyswipes: ["7L21", "6L21", "5L21"], + gastroacid: ["6T", "5T"], + gigadrain: ["6T", "5T", "5D"], + gigaimpact: ["7M", "6M", "5M"], + heatwave: ["7E", "6T", "6E", "5T", "5E", "5D"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["7L1", "6M", "6L1", "5M"], + incinerate: ["7L1", "6M", "6L1", "5M", "5L1", "5D"], + inferno: ["7L66", "6L1", "5L61"], + knockoff: ["6T", "5T"], + lick: ["7L1", "6L1", "5L1"], + lowkick: ["6T", "5T"], + nightslash: ["7E", "6E", "5E"], + odorsleuth: ["7L6", "6L6", "5L6"], + overheat: ["7M"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + pursuit: ["7E", "6E", "5E"], + raindance: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L41", "6L41", "5L41"], + sleeptalk: ["7M", "7E", "6M", "6E", "5T", "5E"], + snatch: ["7L26", "6T", "6L26", "5T", "5L26"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + spitup: ["7L56", "6L50", "5L56"], + stockpile: ["7L56", "6L50", "5L56"], + substitute: ["7M", "6M", "5M"], + suckerpunch: ["7E", "6E", "5E"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swallow: ["7L56", "6L50", "5L56"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + tickle: ["7E", "6E", "5E"], + toxic: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + wrap: ["7E", "6E", "5E"], + }}, + durant: {learnset: { + aerialace: ["7M", "6M", "5M"], + agility: ["7L6", "6L16", "5L16"], + attract: ["7M", "6M", "5M"], + batonpass: ["7E", "6E", "5E"], + bite: ["7L1", "6L11", "5L11"], + bugbite: ["7L16", "6T", "6L26", "5T", "5L26"], + confide: ["7M", "6M"], + crunch: ["7L21", "6L31", "5L31"], + cut: ["6M", "5M"], + dig: ["7L31", "6M", "6L41", "5M", "5L41"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + endure: ["7E", "6E", "5E", "5D"], + energyball: ["7M", "6M", "5M"], + entrainment: ["7L36", "6L46", "5L46"], + facade: ["7M", "6M", "5M"], + feintattack: ["7E", "6E", "5E"], + flashcannon: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L1", "6L6", "5L6", "5D"], + gigaimpact: ["7M", "6M", "5M"], + guillotine: ["7L51", "7L1", "6L1", "5L61"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + irondefense: ["7L46", "6T", "6L1", "5T", "5L56"], + ironhead: ["7L26", "6T", "6L36", "5T", "5L36"], + metalclaw: ["7L11", "6L21", "5L21"], + metalsound: ["7L56", "7L1", "6L1", "5L66"], + protect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rockclimb: ["7E", "6E", "5E"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sandattack: ["7L1", "6L1", "5L1"], + sandstorm: ["7M", "6M", "5M"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E", "5D"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + vicegrip: ["7L1", "6L1", "5L1"], + xscissor: ["7M", "7L41", "6M", "6L51", "5M", "5L51"], + }}, + deino: {learnset: { + aquatail: ["6T", "5T"], + assurance: ["7E", "6E", "5E"], + astonish: ["7E", "6E", "5E"], + attract: ["7M", "6M", "5M"], + bite: ["7L9", "6L9", "5L9"], + bodyslam: ["7L48", "6L48", "5L48"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L25"], + darkpulse: ["7M", "7E", "6M", "6E", "5T", "5E"], + doublehit: ["7E", "6E", "5E"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L17", "6L17", "5L17"], + dragonpulse: ["7L32", "6T", "6L32", "5T", "5L32"], + dragonrage: ["7L1", "6L1", "5L1", "5S0"], + dragonrush: ["7L42", "6L42", "5L42"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["7E", "6T", "6E", "5T", "5E"], + facade: ["7M", "6M", "5M"], + firefang: ["7E", "6E", "5E"], + focusenergy: ["7L4", "6L4", "5L4"], + frustration: ["7M", "6M", "5M"], + headbutt: ["7L12", "6L12", "5L12"], + headsmash: ["7E", "6E", "5E"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["7L58", "6T", "6L58", "5T", "5L58"], + icefang: ["7E", "6E", "5E"], + incinerate: ["6M", "5M"], + outrage: ["7L62", "6T", "6L62", "5T", "5L62"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L50", "6L50", "5L52"], + screech: ["7E", "6E", "5E"], + secretpower: ["6M"], + shockwave: ["6T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + tackle: ["7L1", "6L1", "5L1", "5S0"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderfang: ["7E", "6E", "5E"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + workup: ["7M", "7L38", "6L38", "5M", "5L38"], + zenheadbutt: ["6T", "5T"], + }}, + zweilous: {learnset: { + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bite: ["7L9", "7L1", "6L1", "5L1"], + bodyslam: ["7L48", "6L48", "5L48"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "5L25"], + darkpulse: ["7M", "6M", "5T"], + doublehit: ["7L1", "6L1", "5L1"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L17", "6L17", "5L17"], + dragonpulse: ["7L32", "6T", "6L32", "5T", "5L32"], + dragonrage: ["7L1", "6L1", "5L1"], + dragonrush: ["7L42", "6L42", "5L42"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "5M"], + headbutt: ["7L12", "6L12", "5L12"], + hiddenpower: ["7M", "6M", "5M"], + hypervoice: ["7L64", "6T", "6L64", "5T", "5L64"], + incinerate: ["6M", "5M"], + outrage: ["7L71", "6T", "6L71", "5T", "5L71"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + scaryface: ["7L55", "6L55", "5L55"], + secretpower: ["6M"], + shockwave: ["6T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + workup: ["7M", "7L38", "6L38", "5M", "5L38"], + zenheadbutt: ["6T", "5T"], + }}, + hydreigon: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aquatail: ["6T", "5T"], + attract: ["7M", "6M", "5M"], + bite: ["7L9", "7L1", "6L1", "5L1"], + bodyslam: ["7L48", "6L48", "5L48"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L25", "6L25", "6S1", "5L25"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L17", "6L17", "5L17", "5S0"], + dragonpulse: ["7L32", "6T", "6L32", "5T", "5L32"], + dragonrage: ["7L1", "6L1", "5L1"], + dragonrush: ["7L42", "6L42", "6S1", "5L42"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M", "5S0"], + flashcannon: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M", "5S0"], + focusenergy: ["7L4", "7L1", "6L1", "5L1"], + frustration: ["7M", "6M", "6S1", "5M"], + gigaimpact: ["7M", "6M", "5M"], + headbutt: ["7L12", "6L12", "5L12"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L68", "7L1", "6T", "6L1", "5T", "5L68", "5S0"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + outrage: ["7L79", "7L1", "6T", "6L1", "5T", "5L79"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roar: ["7M", "7L20", "6M", "6L20", "5M", "5L20"], + rockslide: ["7M", "6M", "6S1", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + scaryface: ["7L55", "6L55", "5L55"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + slam: ["7L28", "6L28", "5L28"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + spite: ["6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["6T", "5T"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + triattack: ["7L1", "6L1", "5L1"], + uproar: ["6T", "5T"], + uturn: ["7M", "6M", "5M"], + workup: ["7M", "7L38", "6L38", "5M", "5L38"], + zenheadbutt: ["6T", "5T"], + }}, + larvesta: {learnset: { + absorb: ["7L10"], + acrobatics: ["7M", "6M", "5M"], + amnesia: ["7L80", "6L80", "5L80"], + bugbite: ["7L40", "6T", "6L40", "5T", "5L40"], + bugbuzz: ["7L70", "6L70", "5L70"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + doubleedge: ["7L50", "6L50", "5L50"], + doubleteam: ["7M", "6M", "5M"], + ember: ["7L1", "6L1", "5L1"], + endure: ["7E", "6E", "5E"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "6M", "5M"], + flamecharge: ["7M", "7L30", "6M", "6L30", "5M", "5L30"], + flamethrower: ["7M", "6M", "5M"], + flamewheel: ["7L60", "6L60", "5L60"], + flareblitz: ["7L100", "6L100", "5L100"], + foresight: ["7E", "6E", "5E"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + harden: ["7E", "6E", "5E"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + leechlife: ["7M", "6L10", "5L10"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["7E", "6T", "6E", "5T", "5E"], + morningsun: ["7E", "6E", "5E"], + overheat: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + signalbeam: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stringshot: ["7L1", "7E", "6L1", "6E", "5L1", "5E"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + takedown: ["7L20", "6L20", "5L20"], + thrash: ["7L90", "6L90", "5L90"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + zenheadbutt: ["7E", "6T", "6E", "5T", "5E"], + }}, + volcarona: {learnset: { + absorb: ["7L10", "7L1"], + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + amnesia: ["7L1", "6L1"], + bugbite: ["6T", "5T"], + bugbuzz: ["7L70", "7L1", "6L1", "5L70", "5S1"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + ember: ["7L1", "6L1", "5L1"], + facade: ["7M", "6M", "5M"], + fierydance: ["7L100", "7L1", "6L1", "5L100"], + fireblast: ["7M", "6M", "5M"], + firespin: ["7L30", "6L30", "5L30", "5S0"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "6M", "5M"], + flamewheel: ["7L1", "6L1"], + flareblitz: ["7L1", "6L1"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + gust: ["7L20", "7L1", "6L1", "5L1", "5S0"], + heatwave: ["7L60", "7L1", "6T", "6L1", "5T", "5L60"], + hiddenpower: ["7M", "6M", "5M"], + hurricane: ["7L90", "7L1", "6L1", "5L90"], + hyperbeam: ["7M", "6M", "5M", "5S1"], + incinerate: ["6M", "5M"], + leechlife: ["7M", "6L1", "5L1", "5S0"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + overheat: ["7M", "6M", "5M", "5S1"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + quiverdance: ["7L1", "6L1", "5L59", "5S1"], + ragepowder: ["7L80", "7L1", "6L1", "5L80"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + signalbeam: ["6T", "5T"], + silverwind: ["7L50", "6L50", "5L50"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stringshot: ["7L1", "6L1", "5L1", "5S0"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["6T", "5T"], + thrash: ["7L1", "6L1"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "5M"], + whirlwind: ["7L40", "6L40", "5L40"], + wildcharge: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + cobalion: {learnset: { + aerialace: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bounce: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L61", "7L1", "6L1", "5L73"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doublekick: ["7L1", "6L7", "5L7"], + doubleteam: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + helpinghand: ["7L13", "6T", "6L25", "5T", "5L25", "5S0", "5S1"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + irondefense: ["6T", "5T"], + ironhead: ["7L25", "6T", "6L37", "6S3", "5T", "5L37", "5S0", "5S1"], + leer: ["7L1", "6L1", "5L1"], + magnetrise: ["6T", "5T"], + metalburst: ["7L55", "7L1", "6L1", "5L67"], + metalclaw: ["7L1", "6L13", "5L13"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L42", "6L1", "5L55", "5S2"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S0", "5S1"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + sacredsword: ["7L31", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], + safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L37", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + takedown: ["7L7", "6L19", "5L19"], + taunt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], + xscissor: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + terrakion: {learnset: { + aerialace: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bulldoze: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L61", "7L1", "6L1", "5L73"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doublekick: ["7L1", "6L7", "5L7"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + earthquake: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + helpinghand: ["7L13", "6T", "6L25", "5T", "5L25", "5S0", "5S1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + ironhead: ["6T", "5T"], + leer: ["7L1", "6L1", "5L1"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L42", "6L1", "5L55", "5S2"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S0", "5S1"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L25", "6M", "6L37", "6S3", "5M", "5L37", "5S0", "5S1"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + sacredsword: ["7L31", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], + safeguard: ["7M", "6M", "5M"], + sandstorm: ["7M", "6M", "5M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + smackdown: ["7M", "7L1", "6M", "6L13", "5M", "5L13"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "7L55", "6M", "6L67", "5M", "5L67"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L37", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + takedown: ["7L7", "6L19", "5L19"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], + xscissor: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + virizion: {learnset: { + aerialace: ["7M", "6M", "5M"], + block: ["6T", "5T"], + bounce: ["6T", "5T"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L61", "7L1", "6L1", "5L73"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doublekick: ["7L1", "6L7", "5L7"], + doubleteam: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigadrain: ["7L25", "6T", "6L37", "6S3", "5T", "5L37", "5S0", "5S1"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + helpinghand: ["7L13", "6T", "6L25", "5T", "5L25", "5S0", "5S1"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + leafblade: ["7L55", "7L1", "6L1", "5L67"], + leer: ["7L1", "6L1", "5L1"], + lightscreen: ["7M", "6M", "5M"], + magicalleaf: ["7L1", "6L13", "5L13"], + naturepower: ["7M", "6M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + quickguard: ["7L42", "6L1", "5L55", "5S2"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L19", "6M", "6L31", "6S3", "5M", "5L31", "5S0", "5S1"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + sacredsword: ["7L31", "6L42", "6S3", "5L42", "5S0", "5S1", "5S2"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + seedbomb: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L37", "6M", "6L49", "6S3", "5M", "5L49", "5S2"], + synthesis: ["6T", "5T"], + takedown: ["7L7", "6L19", "5L19"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + workup: ["7M", "7L49", "6L1", "5M", "5L61", "5S2"], + worryseed: ["6T", "5T"], + xscissor: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + tornadus: {learnset: { + acrobatics: ["7M", "6M", "5M"], + aerialace: ["7M", "6M", "5M"], + agility: ["7L31", "6L37", "6S3", "5L37", "5S0"], + aircutter: ["7L19", "6L25", "5L25", "5S0"], + airslash: ["7L37", "6L43", "6S3", "5L43", "5S2"], + astonish: ["7L1", "6L1", "5L1", "5S1"], + attract: ["7M", "6M", "5M"], + bite: ["7L7", "6L13", "5L13"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L43", "6L49", "6S3", "5L49"], + darkpulse: ["7M", "7L67", "6M", "6L73", "5T", "5L73"], + doubleteam: ["7M", "6M", "5M"], + embargo: ["7M", "6M", "5M"], + extrasensory: ["7L25", "6L31", "6S3", "5L31", "5S0"], + facade: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gust: ["7L1", "6L1", "5L1", "5S1"], + hammerarm: ["7L73", "7L1", "6L1", "5L79", "5S2"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M", "5S2"], + hurricane: ["7L61", "7L1", "6L1", "5L67", "5S2"], + hyperbeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "7L55", "6M", "6L61", "5M", "5L61"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7L13", "6L19", "5L19", "5S0"], + rocksmash: ["6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "7L1", "6M", "6L7", "5M", "5L7"], + tailwind: ["7L49", "6T", "6L1", "5T", "5L55"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L79", "7L1", "6L1", "5L85"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L1", "6T", "6L1", "5T", "5L1", "5S1"], + uturn: ["7M", "6M", "5M"], + }}, + thundurus: {learnset: { + agility: ["7L31", "6L37", "6S3", "5L37", "5S0"], + astonish: ["7L1", "6L1", "5L1", "5S1"], + attract: ["7M", "6M", "5M"], + bite: ["7L7", "6L13", "5L13"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + charge: ["7L49", "6L1", "5L55"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L43", "6L49", "6S3", "5L49"], + darkpulse: ["7M", "7L67", "6M", "6L73", "5T", "5L73"], + discharge: ["7L37", "6L43", "6S3", "5L43"], + doubleteam: ["7M", "6M", "5M"], + electroweb: ["6T"], + embargo: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M", "5S2"], + foulplay: ["6T", "5T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + hammerarm: ["7L73", "7L1", "6L1", "5L79", "5S2"], + healblock: ["7L25", "6L31", "6S3", "5L31", "5S0"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + incinerate: ["6M", "5M"], + irontail: ["6T", "5T"], + knockoff: ["6T", "5T"], + nastyplot: ["7L55", "7L1", "6L1", "5L61"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + revenge: ["7L13", "6L19", "5L19", "5S0"], + rocksmash: ["6M", "5M"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + secretpower: ["6M"], + shockwave: ["7L19", "6T", "6L25", "5L25", "5S0"], + skydrop: ["7M", "6M", "5M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + smartstrike: ["7M"], + snore: ["6T", "5T"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "7L1", "6M", "6L7", "5M", "5L7"], + taunt: ["7M", "6M", "5M"], + thief: ["7M", "6M", "5M"], + thrash: ["7L79", "7L1", "6L1", "5L85"], + thunder: ["7M", "7L61", "6M", "6L67", "5M", "5L67", "5S2"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + thundershock: ["7L1", "6L1", "5L1", "5S1"], + thunderwave: ["7M", "6M", "5M"], + torment: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + uproar: ["7L1", "6T", "6L1", "5T", "5L1", "5S1"], + uturn: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M", "5S2"], + }}, + reshiram: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blueflare: ["7L100", "6L100", "5L100", "5S2"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + crunch: ["7L71", "6L71", "5L71"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T", "5S2"], + dragonbreath: ["7L29", "6L29", "6S3", "5L29", "5S0"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7L54", "6T", "6L54", "5T", "5L54", "5S1"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + extrasensory: ["7L43", "6L43", "6S3", "5L43", "5S0", "5S1"], + facade: ["7M", "6M", "5M"], + fireblast: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + firefang: ["7L1", "6L1", "5L1"], + flamecharge: ["7M", "6M", "5M"], + flamethrower: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + fusionflare: ["7L50", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], + gigaimpact: ["7M", "6M", "5M"], + heatwave: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1"], + incinerate: ["6M", "5M"], + lightscreen: ["7M", "6M", "5M"], + mist: ["5S2"], + outrage: ["7L85", "6T", "6L85", "5T", "5L85"], + overheat: ["7M", "6M", "5M"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + slash: ["7L36", "6L36", "6S3", "5L36", "5S0"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "5M"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["6T", "5T"], + toxic: ["7M", "6M", "5M"], + willowisp: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + zekrom: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + boltstrike: ["7L100", "6L100", "5L100", "5S2"], + brutalswing: ["7M"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + crunch: ["7L71", "6L71", "5L71"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "5T"], + dragonbreath: ["7L29", "6L29", "6S3", "5L29", "5S0"], + dragonclaw: ["7M", "7L54", "6M", "6L54", "5M", "5L54", "5S1"], + dragonpulse: ["6T", "5T"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + fusionbolt: ["7L50", "6L50", "6S3", "5L50", "5S0", "5S1", "5S2"], + gigaimpact: ["7M", "6M", "5M"], + haze: ["5S2"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S1"], + lightscreen: ["7M", "6M", "5M"], + magnetrise: ["6T", "5T"], + outrage: ["7L85", "6T", "6L85", "5T", "5L85", "5S2"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + slash: ["7L36", "6L36", "6S3", "5L36", "5S0"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + tailwind: ["6T", "5T"], + thunder: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + thunderbolt: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + thunderfang: ["7L1", "6L1", "5L1"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + voltswitch: ["7M", "6M", "5M"], + wildcharge: ["7M", "6M", "5M"], + zenheadbutt: ["7L43", "6T", "6L43", "6S3", "5T", "5L43", "5S0", "5S1"], + }}, + landorus: {learnset: { + attract: ["7M", "6M", "5M"], + block: ["7L1", "6T", "6L1", "5T", "5L1", "5S1"], + brickbreak: ["7M", "6M", "5M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M", "5M"], + bulldoze: ["7M", "7L13", "6M", "6L19", "5M", "5L19"], + calmmind: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + dig: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + earthpower: ["7L37", "6T", "6L43", "6S2", "5T", "5L43"], + earthquake: ["7M", "7L49", "6M", "6L55", "6S3", "5M", "5L55", "5S0"], + explosion: ["7M", "6M", "6S2", "5M"], + extrasensory: ["7L25", "6L31", "5L31"], + facade: ["7M", "6M", "5M"], + fissure: ["7L61", "7L1", "6L1", "5L67", "5S0"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + hammerarm: ["7L73", "7L1", "6L1", "5L79"], + hiddenpower: ["7M", "6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + imprison: ["7L1", "6L7", "5L7"], + irontail: ["6T", "5T"], + knockoff: ["6T", "6S3", "5T"], + mudshot: ["7L1", "6L1", "5L1", "5S1"], + outrage: ["7L79", "7L1", "6T", "6L1", "5T", "5L85"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + punishment: ["7L7", "6L13", "5L13"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + rockslide: ["7M", "7L43", "6M", "6L49", "6S2", "5M", "5L49", "5S0"], + rocksmash: ["6M", "5M"], + rockthrow: ["7L19", "6L25", "5L25"], + rocktomb: ["7M", "7L1", "6M", "6L1", "6S3", "5M", "5L1", "5S1"], + roleplay: ["6T", "5T"], + round: ["7M", "6M", "5M"], + sandstorm: ["7M", "7L55", "6M", "6L61", "5M", "5L61", "5S0"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M", "5T"], + sludgebomb: ["7M", "6M", "5M"], + sludgewave: ["7M", "6M", "5M"], + smackdown: ["7M", "6M", "5M"], + snore: ["6T", "5T"], + stealthrock: ["6T", "5T"], + stoneedge: ["7M", "7L67", "6M", "6L73", "5M", "5L73"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L31", "6M", "6L37", "6S2", "5M", "5L37"], + toxic: ["7M", "6M", "5M"], + uturn: ["7M", "6M", "6S3", "5M"], + }}, + kyurem: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "6S3", "5T"], + dragonbreath: ["7L29", "6L29", "6S2", "5L29"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7L57", "6T", "6L57", "5T", "5L57", "5S0", "5S1"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L71", "6T", "6L71", "5T", "5L71", "5S0"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + glaciate: ["7L50", "6L50", "6S2", "6S3", "5L50", "5S0", "5S1"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], + icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + icywind: ["7L1", "6T", "6L1", "5T", "5L1"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S0", "5S1"], + ironhead: ["6T", "6S3", "5T"], + lightscreen: ["7M", "6M", "5M"], + outrage: ["7L85", "6T", "6L85", "5T", "5L85"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + scaryface: ["7L43", "6L43", "6S2", "6S3", "5L43", "5S1"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["6T", "5T"], + slash: ["7L36", "6L36", "6S2", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + kyuremblack: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "6S3", "5T"], + dragonbreath: ["7L29", "6L29", "6S2", "5L29"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7L57", "6T", "6L57", "5T", "5L57", "5S0", "5S1"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L71", "6T", "6L71", "5T", "5L71", "5S0"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + freezeshock: ["7L50", "6L50", "6S2", "6S3", "5L43", "5S0", "5S1"], + frustration: ["7M", "6M", "5M"], + fusionbolt: ["7L43", "6L43", "6S2", "6S3", "5L50", "5S1"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], + icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + icywind: ["7L1", "6T", "6L1", "5T", "5L1"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S0", "5S1"], + ironhead: ["6T", "6S3", "5T"], + lightscreen: ["7M", "6M", "5M"], + outrage: ["7L85", "6T", "6L85", "5T", "5L85"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["6T", "5T"], + slash: ["7L36", "6L36", "6S2", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + kyuremwhite: {learnset: { + ancientpower: ["7L15", "6L15", "5L15"], + blizzard: ["7M", "7L78", "6M", "6L78", "5M", "5L78"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + cut: ["6M", "5M"], + doubleteam: ["7M", "6M", "5M"], + dracometeor: ["7T", "6T", "6S3", "5T"], + dragonbreath: ["7L29", "6L29", "6S2", "5L29"], + dragonclaw: ["7M", "6M", "5M"], + dragonpulse: ["7L57", "6T", "6L57", "5T", "5L57", "5S0", "5S1"], + dragonrage: ["7L1", "6L1", "5L1"], + dragontail: ["7M", "6M", "5M"], + earthpower: ["6T", "5T"], + echoedvoice: ["7M", "6M", "5M"], + endeavor: ["7L71", "6T", "6L71", "5T", "5L71", "5S0"], + facade: ["7M", "6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fling: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + fusionflare: ["7L43", "6L43", "6S2", "6S3", "5L50", "5S1"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L92", "6T", "6L92", "5T", "5L92"], + icebeam: ["7M", "7L22", "6M", "6L22", "5M", "5L22"], + iceburn: ["7L50", "6L50", "6S2", "6S3", "5L43", "5S0", "5S1"], + icywind: ["7L1", "6T", "6L1", "5T", "5L1"], + imprison: ["7L64", "7L8", "6L8", "5L8", "5S0", "5S1"], + ironhead: ["6T", "6S3", "5T"], + lightscreen: ["7M", "6M", "5M"], + outrage: ["7L85", "6T", "6L85", "5T", "5L85"], + payback: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockslide: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + rocktomb: ["7M", "6M", "5M"], + roost: ["7M", "6M", "5T"], + round: ["7M", "6M", "5M"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + signalbeam: ["6T", "5T"], + slash: ["7L36", "6L36", "6S2", "5L36"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + keldeo: {learnset: { + aerialace: ["7M", "6M", "5M"], + aquajet: ["7L1", "6L1", "6S2", "6S3", "5L1", "5S0", "5S1"], + aquatail: ["7L37", "6T", "6L37", "5T", "5L37"], + bounce: ["6T", "5T"], + bubblebeam: ["7L13", "7L1", "6L13", "6S3", "5L13", "5S0"], + calmmind: ["7M", "6M", "5M"], + closecombat: ["7L73", "6L73", "5L73"], + confide: ["7M", "6M"], + covet: ["6T", "5T"], + cut: ["6M", "5M"], + doublekick: ["7L7", "7L1", "6L7", "6S2", "6S3", "5L7", "5S0"], + doubleteam: ["7M", "6M", "5M"], + endeavor: ["6T", "5T"], + facade: ["7M", "6M", "5M"], + falseswipe: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + hail: ["7M", "6M", "5M"], + helpinghand: ["7L25", "6T", "6L25", "5T", "5L25"], + hiddenpower: ["7M", "6M", "5M"], + hydropump: ["7L67", "6L67", "6S2", "5L67", "5S1"], + hyperbeam: ["7M", "6M", "5M"], + icywind: ["6T", "5T"], + lastresort: ["6T", "5T"], + leer: ["7L1", "6L1", "6S2", "6S3", "5L1", "5S0"], + poisonjab: ["7M", "6M", "5M"], + protect: ["7M", "6M", "5M"], + psychup: ["7M", "6M", "5M"], + quickguard: ["7L55", "6L55", "5L55"], + raindance: ["7M", "6M", "5M"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + retaliate: ["7L31", "6M", "6L31", "5M", "5L31"], + return: ["7M", "6M", "5M"], + roar: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + round: ["7M", "6M", "5M"], + sacredsword: ["7L43", "6L43", "5L43", "5S1"], + safeguard: ["7M", "6M", "5M"], + scald: ["7M", "6M", "5M"], + secretpower: ["6M"], + secretsword: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + superpower: ["6T", "5T"], + surf: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + swordsdance: ["7M", "7L49", "6M", "6L49", "5M", "5L49", "5S1"], + takedown: ["7L19", "6L19", "5L19"], + taunt: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + waterpulse: ["6T"], + workup: ["7M", "7L61", "6L61", "5M", "5L61"], + xscissor: ["7M", "6M", "5M"], + }}, + meloetta: {learnset: { + acrobatics: ["7M", "7L26", "6M", "6L26", "5M", "5L26"], + brickbreak: ["7M", "6M", "5M"], + calmmind: ["7M", "6M", "5M"], + chargebeam: ["7M", "6M", "5M"], + closecombat: ["7L78", "6L78", "5L78", "5S1"], + confide: ["7M", "6M"], + confusion: ["7L11", "7L1", "6L11", "5L11", "5S0"], + covet: ["6T", "5T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M", "5M"], + drainpunch: ["6T", "5T"], + dreameater: ["7M", "6M", "5M"], + dualchop: ["6T", "5T"], + echoedvoice: ["7M", "7L36", "6M", "6L36", "5M", "5L36"], + embargo: ["7M", "6M", "5M"], + energyball: ["7M", "6M", "5M"], + facade: ["7M", "6M", "5M"], + firepunch: ["6T", "5T"], + flash: ["6M", "5M"], + fling: ["7M", "6M", "5M"], + focusblast: ["7M", "6M", "5M"], + focuspunch: ["6T"], + frustration: ["7M", "6M", "5M"], + gigaimpact: ["7M", "6M", "5M"], + grassknot: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + healbell: ["6T", "5T"], + helpinghand: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "6M", "5M"], + hypervoice: ["7L64", "6T", "6L64", "5T", "5L64"], + icepunch: ["6T", "5T"], + knockoff: ["6T", "5T"], + lastresort: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + lowkick: ["6T", "5T"], + lowsweep: ["7M", "6M", "5M"], + magiccoat: ["6T", "5T"], + magicroom: ["6T", "5T"], + payback: ["7M", "6M", "5M"], + perishsong: ["7L85", "6L85", "5L85"], + poweruppunch: ["6M"], + protect: ["7M", "6M", "5M"], + psybeam: ["7L31", "6L31", "5L31"], + psychic: ["7M", "7L57", "6M", "6L57", "5M", "5L57", "5S1"], + psychup: ["7M", "6M", "5M"], + psyshock: ["7M", "6M", "5M"], + quickattack: ["7L6", "7L1", "6L6", "5L6", "5S0"], + raindance: ["7M", "6M", "5M"], + recycle: ["6T", "5T"], + relicsong: ["6T", "5T"], + rest: ["7M", "6M", "5M"], + retaliate: ["6M", "5M"], + return: ["7M", "6M", "5M"], + rocksmash: ["6M", "5M"], + roleplay: ["7L71", "6T", "6L71", "5T", "5L71"], + round: ["7M", "7L1", "6M", "6L1", "5M", "5L1", "5S0", "5S1"], + safeguard: ["7M", "6M", "5M"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "5M"], + shadowclaw: ["7M", "6M", "5M"], + shockwave: ["6T"], + signalbeam: ["6T", "5T"], + sing: ["7L16", "7L1", "6L16", "5L16"], + skillswap: ["6T", "5T"], + sleeptalk: ["7M", "6M", "5T"], + snatch: ["6T", "5T"], + snore: ["6T", "5T"], + stoneedge: ["7M", "6M", "5M"], + strength: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + sunnyday: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + teeterdance: ["7L21", "6L21", "5L21", "5S1"], + telekinesis: ["5M"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderpunch: ["6T", "5T"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + trick: ["6T", "5T"], + trickroom: ["7M", "6M", "5M"], + uproar: ["6T", "5T"], + uturn: ["7M", "7L43", "6M", "6L43", "5M", "5L43"], + wakeupslap: ["7L50", "6L50", "5L50"], + wonderroom: ["6T", "5T"], + workup: ["7M", "5M"], + zenheadbutt: ["6T", "5T"], + }}, + genesect: {learnset: { + aerialace: ["7M", "6M", "5M"], + blazekick: ["5S2"], + blizzard: ["7M", "6M", "5M"], + bugbite: ["6T", "5T"], + bugbuzz: ["7L55", "6L55", "5L55"], + chargebeam: ["7M", "6M", "5M"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M", "5T"], + doubleteam: ["7M", "6M", "5M"], + electroweb: ["6T", "5T"], + energyball: ["7M", "6M", "5M"], + explosion: ["7M", "6M", "5M"], + extremespeed: ["5S2"], + facade: ["7M", "6M", "5M"], + fellstinger: ["7L1", "6L1"], + flamecharge: ["7M", "7L18", "6M", "6L18", "5M", "5L18"], + flamethrower: ["7M", "6M", "5M"], + flash: ["6M", "5M"], + flashcannon: ["7M", "6M", "5M"], + fly: ["7M", "6M", "5M"], + frustration: ["7M", "6M", "5M"], + furycutter: ["7L7", "6L7", "5L7"], + gigadrain: ["6T", "5T"], + gigaimpact: ["7M", "6M", "5M"], + gravity: ["6T", "5T"], + gunkshot: ["6T", "5T"], + hiddenpower: ["7M", "6M", "5M"], + honeclaws: ["6M", "5M"], + hyperbeam: ["7M", "7L73", "6M", "6L73", "5M", "5L73"], + icebeam: ["7M", "6M", "5M"], + infestation: ["7M", "6M"], + irondefense: ["6T", "5T"], + ironhead: ["6T", "5T"], + lastresort: ["6T", "5T"], + lightscreen: ["7M", "6M", "5M"], + lockon: ["7L11", "6L11", "5L11"], + magiccoat: ["6T", "5T"], + magnetbomb: ["7L22", "6L22", "6S3", "5L22", "5S0", "5S1"], + magnetrise: ["7L1", "6T", "6L1", "5T", "5L1"], + metalclaw: ["7L1", "6L1", "5L1"], + metalsound: ["7L33", "6L33", "5L33"], + protect: ["7M", "6M", "5M"], + psychic: ["7M", "6M", "5M"], + quickattack: ["7L1", "6L1", "5L1"], + recycle: ["6T", "5T"], + reflect: ["7M", "6M", "5M"], + rest: ["7M", "6M", "5M"], + return: ["7M", "6M", "5M"], + rockpolish: ["7M", "6M", "5M"], + round: ["7M", "6M", "5M"], + screech: ["7L1", "6L1", "5L1"], + secretpower: ["6M"], + selfdestruct: ["7L77", "6L77", "5L77"], + shadowclaw: ["7M", "6M", "5M"], + shiftgear: ["5S2"], + shockwave: ["6T"], + signalbeam: ["7L40", "6T", "6L40", "6S3", "5T", "5L40", "5S0", "5S1"], + simplebeam: ["7L62", "6L62", "5L62"], + slash: ["7L29", "6L29", "5L29"], + sleeptalk: ["7M", "6M", "5T"], + snore: ["6T", "5T"], + solarbeam: ["7M", "6M", "6S3", "5M", "5S0", "5S1"], + strugglebug: ["6M", "5M"], + substitute: ["7M", "6M", "5M"], + swagger: ["7M", "6M", "5M"], + technoblast: ["7L1", "6L1", "6S3", "5L1", "5S0", "5S1", "5S2"], + thunder: ["7M", "6M", "5M"], + thunderbolt: ["7M", "6M", "5M"], + thunderwave: ["7M", "6M", "5M"], + toxic: ["7M", "6M", "5M"], + triattack: ["7L44", "6L44", "5L44"], + uturn: ["7M", "6M", "5M"], + xscissor: ["7M", "7L51", "6M", "6L51", "5M", "5L51"], + zapcannon: ["7L66", "6L66", "5L66"], + zenheadbutt: ["6T", "5T"], + }}, + chespin: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bellydrum: ["7E", "6E"], + bite: ["7L11", "6L11"], + bodyslam: ["7L42", "6L42"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L39", "6M", "6L39"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + curse: ["7E", "6E"], + cut: ["6M"], + defensecurl: ["7E", "6E"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["6T"], + dualchop: ["6T"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + focuspunch: ["6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + grasspledge: ["7T", "6T"], + growl: ["7L1", "6L1"], + gyroball: ["7M", "6M"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + leechseed: ["7L15", "6L15"], + lowkick: ["6T"], + lowsweep: ["7M", "6M"], + mudshot: ["7L35", "6L35"], + naturepower: ["7M", "6M"], + painsplit: ["7L45", "6T", "6L45"], + payback: ["7M", "6M"], + pinmissile: ["7L18", "6L18"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickguard: ["7E", "6E"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7L8", "7E", "6L8", "6E"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7L32", "6T", "6L32"], + shadowclaw: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + spikes: ["7E", "6E"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["6T"], + superpower: ["6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + synthesis: ["7E", "6T", "6E"], + tackle: ["6L1"], + takedown: ["7L27", "6L27"], + taunt: ["7M", "6M"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + vinewhip: ["7L5", "7L1", "6L5"], + woodhammer: ["7L48", "6L48"], + workup: ["7M"], + worryseed: ["6T"], + zenheadbutt: ["6T"], + }}, + quilladin: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bite: ["7L11", "6L11"], + bodyslam: ["7L48", "6L48"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L44", "6M", "6L44"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["6T"], + dualchop: ["6T"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + focuspunch: ["6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + grasspledge: ["7T", "6T"], + growl: ["7L1", "6L1"], + gyroball: ["7M", "6M"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + leechseed: ["7L15", "6L15"], + lowkick: ["6T"], + lowsweep: ["7M", "6M"], + mudshot: ["7L39", "6L39"], + naturepower: ["7M", "6M"], + needlearm: ["7L1", "6L26"], + painsplit: ["7L52", "6T", "6L52"], + payback: ["7M", "6M"], + pinmissile: ["7L19", "6L20"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7L8", "6L8"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7L35", "6T", "6L35"], + shadowclaw: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["6T"], + superpower: ["6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + synthesis: ["6T"], + tackle: ["6L1"], + takedown: ["7L29", "6L30"], + taunt: ["7M", "6M"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + vinewhip: ["7L5", "7L1", "6L5"], + woodhammer: ["7L56", "6L55"], + workup: ["7M"], + worryseed: ["6T"], + zenheadbutt: ["6T"], + }}, + chesnaught: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bellydrum: ["7L1", "6L1"], + bite: ["7L11", "6L11"], + block: ["6T"], + bodyslam: ["7L54", "6L48"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L48", "6M", "6L44"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragonclaw: ["7M", "6M"], + drainpunch: ["6T"], + dualchop: ["6T"], + earthquake: ["7M", "6M"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + feint: ["7L1", "6L1"], + flash: ["6M"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["6T"], + frenzyplant: ["7T", "6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "7L78", "6M", "6L70"], + grassknot: ["7M", "6M"], + grasspledge: ["7T", "6T"], + growl: ["7L1", "6L1"], + gyroball: ["7M", "6M"], + hammerarm: ["7L72", "7L1", "6L1"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hyperbeam: ["7M", "6M"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + leechseed: ["7L15", "6L15"], + lowkick: ["6T"], + lowsweep: ["7M", "6M"], + mudshot: ["7L41", "6L41"], + naturepower: ["7M", "6M"], + needlearm: ["7L1", "6L26"], + painsplit: ["7L60", "6T", "6L52"], + payback: ["7M", "6M"], + pinmissile: ["7L19", "6L20"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7L8", "7L1", "6L8"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7L35", "6T", "6L35"], + shadowclaw: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + spikyshield: ["7L1", "6L36"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["6T"], + superpower: ["6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + synthesis: ["6T"], + tackle: ["7L1", "6L1"], + takedown: ["7L29", "6L30"], + taunt: ["7M", "6M"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + vinewhip: ["7L5", "7L1", "6L5"], + woodhammer: ["7L66", "6L55"], + workup: ["7M"], + worryseed: ["6T"], + zenheadbutt: ["6T"], + }}, + fennekin: {learnset: { + attract: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + ember: ["7L5", "6L5"], + facade: ["7M", "6M"], + fireblast: ["7M", "7L48", "6M", "6L48"], + firepledge: ["7T", "6T"], + firespin: ["7L20", "6L20"], + flamecharge: ["7M", "7L14", "6M", "6L14"], + flamethrower: ["7M", "7L35", "6M", "6L35", "6S0"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + heatwave: ["7E", "6T", "6E"], + hiddenpower: ["7M", "6M", "6S0"], + howl: ["7L11", "6L11"], + hypnosis: ["7E", "6E"], + incinerate: ["6M"], + irontail: ["6T"], + lightscreen: ["7M", "7L27", "6M", "6L27"], + luckychant: ["7L25", "6L25"], + magiccoat: ["7E", "6T", "6E"], + magicroom: ["7L46", "6T", "6L46"], + overheat: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "7L41", "6M", "6L41"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L31", "6M", "6L31"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1", "6S0"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "7L43", "6M", "6L43"], + swagger: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + willowisp: ["7M", "7L38", "6M", "6L38"], + wish: ["7E", "6E"], + workup: ["7M"], + }}, + braixen: {learnset: { + attract: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + ember: ["7L5", "7L1", "6L5"], + facade: ["7M", "6M"], + fireblast: ["7M", "7L59", "6M", "6L55"], + firepledge: ["7T", "6T"], + firepunch: ["6T"], + firespin: ["7L22", "6L22"], + flamecharge: ["7M", "7L14", "6M", "6L14"], + flamethrower: ["7M", "7L41", "6M", "6L41"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + howl: ["7L11", "6L11"], + incinerate: ["6M"], + irontail: ["6T"], + lightscreen: ["7M", "7L31", "6M", "6L30"], + lowkick: ["6T"], + luckychant: ["7L28", "6L27"], + magiccoat: ["6T"], + magicroom: ["7L56", "6T", "6L53"], + overheat: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L18", "6L18"], + psychic: ["7M", "7L49", "6M", "6L48"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L36", "6M", "6L34"], + raindance: ["7M", "6M"], + recycle: ["6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shockwave: ["6T"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "7L52", "6M", "6L51"], + swagger: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + trick: ["6T"], + willowisp: ["7M", "7L45", "6M", "6L45"], + wonderroom: ["6T"], + workup: ["7M"], + zenheadbutt: ["6T"], + }}, + delphox: {learnset: { + attract: ["7M", "6M"], + blastburn: ["7T", "6T"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + ember: ["7L5", "7L1", "6L5"], + facade: ["7M", "6M"], + fireblast: ["7M", "7L74", "6M", "6L61"], + firepledge: ["7T", "6T"], + firepunch: ["6T"], + firespin: ["7L22", "6L22"], + flamecharge: ["7M", "7L14", "6M", "6L14"], + flamethrower: ["7M", "7L45", "6M", "6L42"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + futuresight: ["7L80", "7L1", "6L1"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + howl: ["7L11", "7L1", "6L11"], + hyperbeam: ["7M", "6M"], + incinerate: ["6M"], + irontail: ["6T"], + lightscreen: ["7M", "7L31", "6M", "6L30"], + lowkick: ["6T"], + luckychant: ["7L28", "6L27"], + magiccoat: ["6T"], + magicroom: ["7L68", "6T", "6L58"], + mysticalfire: ["7L1", "6L36"], + overheat: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L18", "6L18"], + psychic: ["7M", "7L57", "6M", "6L51"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L38", "6M", "6L34"], + raindance: ["7M", "6M"], + recycle: ["6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7L1", "6T", "6L1"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "7L1", "6M", "6L1"], + shockwave: ["6T"], + signalbeam: ["6T"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "7L62", "6M", "6L55"], + swagger: ["7M", "6M"], + switcheroo: ["7L1", "6L1"], + tailwhip: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + trick: ["6T"], + trickroom: ["7M", "6M"], + willowisp: ["7M", "7L51", "6M", "6L47"], + wonderroom: ["6T"], + workup: ["7M"], + zenheadbutt: ["6T"], + }}, + froakie: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bestow: ["7E", "6E"], + blizzard: ["7M", "6M"], + bounce: ["7L39", "6T", "6L39"], + bubble: ["7L5", "6L5", "6S0"], + camouflage: ["7E", "6E"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "7L43", "6M", "6L43"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + fling: ["7M", "7L25", "6M", "6L25"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1", "6S0"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L48", "6L48"], + icebeam: ["7M", "6M"], + icywind: ["6T"], + lick: ["7L10", "6L10"], + mindreader: ["7E", "6E"], + mudsport: ["7E", "6E"], + pound: ["7L1", "6L1", "6S0"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L8", "6L8"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M", "6S0"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roleplay: ["6T"], + round: ["7M", "7L21", "6M", "6L21"], + scald: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "7L29", "6M", "6L29"], + smokescreen: ["7L18", "6L18"], + snatch: ["6T"], + snore: ["6T"], + spite: ["6T"], + strength: ["6M"], + substitute: ["7M", "7L35", "6M", "6L35"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + toxicspikes: ["7E", "6E"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + waterpledge: ["7T", "6T"], + waterpulse: ["7L14", "6T", "6L14"], + watersport: ["7E", "6E"], + workup: ["7M"], + }}, + frogadier: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + blizzard: ["7M", "6M"], + bounce: ["7L45", "6T", "6L44"], + bubble: ["7L5", "7L1", "6L5"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "7L50", "6M", "6L48"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + fling: ["7M", "7L28", "6M", "6L28"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1"], + gunkshot: ["6T"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L56", "6L55"], + icebeam: ["7M", "6M"], + icepunch: ["6T"], + icywind: ["6T"], + lick: ["7L10", "6L10"], + lowkick: ["6T"], + pound: ["7L1", "6L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L8", "6L8"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roleplay: ["6T"], + round: ["7M", "7L23", "6M", "6L23"], + scald: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "7L33", "6M", "6L33"], + smokescreen: ["7L19", "6L20"], + snatch: ["6T"], + snore: ["6T"], + spite: ["6T"], + strength: ["6M"], + substitute: ["7M", "7L40", "6M", "6L38"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + waterpledge: ["7T", "6T"], + waterpulse: ["7L14", "6T", "6L14"], + workup: ["7M"], + }}, + greninja: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + blizzard: ["7M", "6M"], + bounce: ["6T"], + brutalswing: ["7M"], + bubble: ["7L5", "7L1", "6L5"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "7L56", "6M", "6L52"], + echoedvoice: ["7M", "6M"], + extrasensory: ["7L49", "6L49"], + facade: ["7M", "6M"], + feintattack: ["7L33", "6L33"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1"], + gunkshot: ["6T", "6S1"], + happyhour: ["6S1"], + haze: ["7L70", "7L1", "6L56"], + hiddenpower: ["7M", "6M"], + hydrocannon: ["7T", "6T", "6S1"], + hydropump: ["7L68", "6L60", "6S0"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + icepunch: ["6T"], + icywind: ["6T"], + lick: ["7L10", "6L10"], + lowkick: ["6T"], + matblock: ["7L1", "6L1", "6S1"], + nightslash: ["7L77", "7L1", "6L1"], + pound: ["7L1", "6L1"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L8", "7L1", "6L8"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roleplay: ["7L1", "6T", "6L1"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + secretpower: ["6M"], + shadowsneak: ["7L23", "6L23", "6S0"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "6M"], + smokescreen: ["7L19", "6L20"], + snatch: ["6T"], + snore: ["6T"], + spikes: ["7L28", "6L28"], + spite: ["6T"], + strength: ["6M"], + substitute: ["7M", "7L42", "6M", "6L43", "6S0"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + waterfall: ["7M", "6M"], + waterpledge: ["7T", "6T"], + waterpulse: ["7L14", "6T", "6L14"], + watershuriken: ["7L1", "6L36", "6S0"], + workup: ["7M"], + }}, + greninjaash: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M", "7S0"], + attract: ["7M"], + blizzard: ["7M"], + brutalswing: ["7M"], + bubble: ["7L1"], + confide: ["7M"], + darkpulse: ["7M"], + doubleteam: ["7M", "7L56", "7S0"], + echoedvoice: ["7M"], + extrasensory: ["7L49"], + facade: ["7M"], + feintattack: ["7L33"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growl: ["7L1"], + haze: ["7L1"], + hiddenpower: ["7M"], + hydrocannon: ["7T"], + hydropump: ["7L68"], + hyperbeam: ["7M"], + icebeam: ["7M"], + lick: ["7L10"], + matblock: ["7L1"], + nightslash: ["7L1", "7S0"], + pound: ["7L1"], + protect: ["7M"], + quickattack: ["7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7L1"], + round: ["7M"], + scald: ["7M"], + shadowsneak: ["7L23"], + sleeptalk: ["7M"], + smackdown: ["7M"], + smokescreen: ["7L19"], + spikes: ["7L28"], + substitute: ["7M", "7L42"], + surf: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + thief: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + waterfall: ["7M"], + waterpledge: ["7T"], + waterpulse: ["7L14"], + watershuriken: ["7L1", "7S0"], + workup: ["7M"], + }}, + bunnelby: {learnset: { + agility: ["7L1", "6L1"], + attract: ["7M", "6M"], + bounce: ["7L38", "6T", "6L38"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + defensecurl: ["7E", "6E"], + dig: ["7L33", "6M", "6L33"], + doublekick: ["7L20", "6L20"], + doubleslap: ["7L10", "6L10"], + doubleteam: ["7M", "6M"], + earthquake: ["7M", "7L49", "6M", "6L49"], + endeavor: ["6T"], + facade: ["7M", "7L47", "6M", "6L47"], + flail: ["7L29", "6L29"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + ironhead: ["6T"], + irontail: ["6T"], + lastresort: ["6T"], + leer: ["7L1", "6L1"], + mudshot: ["7L18", "6L18"], + mudslap: ["7L13", "6L13"], + naturepower: ["7M", "6M"], + odorsleuth: ["7L25", "6L25"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L7", "6L7"], + recycle: ["6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rollout: ["7E", "6E"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + spikes: ["7E", "6E"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + superfang: ["7L42", "6T", "6L42"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + wildcharge: ["7M", "6M"], + workup: ["7M"], + }}, + diggersby: {learnset: { + agility: ["7L1", "6L1"], + attract: ["7M", "6M"], + bounce: ["7L43", "6T", "6L42"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "7L1", "6M", "6L1"], + confide: ["7M", "6M"], + cut: ["6M"], + dig: ["7L37", "6M", "6L37"], + doublekick: ["7L21", "6L20"], + doubleslap: ["7L13"], + doubleteam: ["7M", "6M"], + earthpower: ["6T"], + earthquake: ["7M", "7L57", "6M", "6L57"], + endeavor: ["6T"], + facade: ["7M", "7L54", "6M", "6L53"], + firepunch: ["6T"], + flail: ["7L32", "6L31"], + fling: ["7M", "6M"], + focuspunch: ["6T"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gastroacid: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gunkshot: ["6T"], + hammerarm: ["7L60", "7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + icepunch: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + knockoff: ["6T"], + lastresort: ["6T"], + leer: ["7L1", "6L1"], + lowkick: ["6T"], + mudshot: ["7L18", "6L18"], + mudslap: ["7L13", "6L13"], + naturepower: ["7M", "6M"], + odorsleuth: ["7L27", "6L26"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickattack: ["7L7", "6L7"], + recycle: ["6T"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + rototiller: ["7L1", "6L1"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + smackdown: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + superfang: ["7L48", "6T", "6L48"], + superpower: ["6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], + thief: ["7M", "6M"], + thunderpunch: ["6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["6T"], + uturn: ["7M", "6M"], + wildcharge: ["7M", "6M"], + workup: ["7M"], + }}, + fletchling: {learnset: { + acrobatics: ["7M", "7L39", "6M", "6L39"], + aerialace: ["7M", "6M"], + agility: ["7L13", "6L13"], + attract: ["7M", "6M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + flail: ["7L16", "6L16"], + flamecharge: ["7M", "7L34", "6M", "6L34"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + growl: ["7L1", "6L1"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + mefirst: ["7L41", "6L41"], + naturalgift: ["7L29", "6L29"], + overheat: ["7M", "6M"], + peck: ["7L10", "6L10"], + protect: ["7M", "6M"], + quickattack: ["7L6", "6L6"], + quickguard: ["7E", "6E"], + razorwind: ["7L25", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L21", "6M", "6L21"], + round: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snatch: ["7E", "6T", "6E"], + snore: ["6T"], + steelwing: ["7M", "7L48", "6M", "6L48"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwind: ["7L45", "7E", "6T", "6L45", "6E"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + workup: ["7M"], + }}, + fletchinder: {learnset: { + acrobatics: ["7M", "7L42", "6M", "6L42"], + aerialace: ["7M", "6M"], + agility: ["7L13", "6L13"], + attract: ["7M", "6M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + ember: ["7L1", "6L17"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flail: ["7L16", "6L16"], + flamecharge: ["7M", "7L38", "6M", "6L38"], + flamethrower: ["7M", "6M"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + growl: ["7L1", "6L1"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + incinerate: ["6M"], + mefirst: ["7L46", "6L46"], + naturalgift: ["7L31", "6L31"], + overheat: ["7M", "6M"], + peck: ["7L10", "6L10"], + protect: ["7M", "6M"], + quickattack: ["7L6", "7L1", "6L6"], + razorwind: ["7L27", "6L27"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L25", "6M", "6L25"], + round: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + steelwing: ["7M", "7L55", "6M", "6L55"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwind: ["7L51", "6T", "6L51"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M"], + }}, + talonflame: {learnset: { + acrobatics: ["7M", "7L44", "6M", "6L44"], + aerialace: ["7M", "6M"], + agility: ["7L13", "6L13"], + attract: ["7M", "6M"], + bravebird: ["7L64", "7L1", "6L1"], + bulkup: ["7M", "6M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + ember: ["7L1", "6L17"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flail: ["7L16", "6L16"], + flamecharge: ["7M", "7L39", "6M", "6L39"], + flamethrower: ["7M", "6M"], + flareblitz: ["7L1", "6L1"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + growl: ["7L1", "6L1"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hyperbeam: ["7M", "6M"], + incinerate: ["6M"], + mefirst: ["7L49", "6L49"], + naturalgift: ["7L31", "6L31"], + overheat: ["7M", "6M"], + peck: ["7L10", "7L1", "6L10"], + protect: ["7M", "6M"], + quickattack: ["7L6", "7L1", "6L6"], + razorwind: ["7L27", "6L27"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L25", "6M", "6L25"], + round: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + steelwing: ["7M", "7L60", "6M", "6L60"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwind: ["7L55", "6T", "6L55"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M"], + }}, + scatterbug: {learnset: { + bugbite: ["7L15", "6T", "6L15"], + poisonpowder: ["7E", "6E"], + ragepowder: ["7E", "6E"], + stringshot: ["7L1", "6L1"], + stunspore: ["7L6", "7E", "6L6", "6E"], + tackle: ["7L1", "6L1"], + }}, + spewpa: {learnset: { + bugbite: ["6T"], + electroweb: ["6T"], + harden: ["7L1", "6L1"], + irondefense: ["6T"], + protect: ["7M", "7L1", "6M", "6L9"], + }}, + vivillon: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + aromatherapy: ["7L31", "6L31"], + attract: ["7M", "6M"], + bugbite: ["6T"], + bugbuzz: ["7L35", "6L35"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L25", "6L25"], + dreameater: ["7M", "6M"], + electroweb: ["6T"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + gust: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hurricane: ["7L50", "6L50"], + hyperbeam: ["7M", "6M"], + infestation: ["7M", "6M"], + lightscreen: ["7M", "7L12", "6M", "6L1"], + poisonpowder: ["7L1", "6L1"], + powder: ["7L55", "7L1", "6L1"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + quiverdance: ["7L45", "6L45"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L41", "6M", "6L41"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeppowder: ["7L1", "6L1"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + strugglebug: ["7L1", "6M", "6L12"], + stunspore: ["7L1", "6L1"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + supersonic: ["7L21", "6L21"], + swagger: ["7M", "6M"], + tailwind: ["6T"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + }}, + vivillonfancy: {learnset: { + acrobatics: ["6M"], + aerialace: ["6M"], + aromatherapy: ["6L31"], + attract: ["6M"], + bugbite: ["6T"], + bugbuzz: ["6L35"], + calmmind: ["6M"], + confide: ["6M"], + doubleteam: ["6M"], + drainingkiss: ["6L25"], + dreameater: ["6M"], + electroweb: ["6T"], + endeavor: ["6T"], + energyball: ["6M"], + facade: ["6M"], + flash: ["6M"], + frustration: ["6M"], + gigadrain: ["6T"], + gigaimpact: ["6M"], + gust: ["6L1", "6S0"], + hiddenpower: ["6M"], + holdhands: ["6S0"], + hurricane: ["6L50"], + hyperbeam: ["6M"], + infestation: ["6M"], + lightscreen: ["6M", "6L1", "6S0"], + poisonpowder: ["6L1"], + powder: ["6L1"], + protect: ["6M"], + psybeam: ["6L17"], + psychic: ["6M"], + psychup: ["6M"], + quiverdance: ["6L45"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + roost: ["6M"], + round: ["6M"], + safeguard: ["6M", "6L41"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeppowder: ["6L1"], + sleeptalk: ["6M"], + snore: ["6T"], + solarbeam: ["6M"], + strugglebug: ["6M", "6L12", "6S0"], + stunspore: ["6L1"], + substitute: ["6M"], + sunnyday: ["6M"], + supersonic: ["6L21"], + swagger: ["6M"], + tailwind: ["6T"], + thief: ["6M"], + toxic: ["6M"], + uturn: ["6M"], + }}, + vivillonpokeball: {learnset: { + acrobatics: ["6M"], + aerialace: ["6M"], + aromatherapy: ["6L31"], + attract: ["6M"], + bugbite: ["6T"], + bugbuzz: ["6L35"], + calmmind: ["6M"], + confide: ["6M"], + doubleteam: ["6M"], + drainingkiss: ["6L25"], + dreameater: ["6M"], + electroweb: ["6T"], + endeavor: ["6T"], + energyball: ["6M"], + facade: ["6M"], + flash: ["6M"], + frustration: ["6M"], + gigadrain: ["6T"], + gigaimpact: ["6M"], + gust: ["6L1", "6S0"], + hiddenpower: ["6M"], + hurricane: ["6L50"], + hyperbeam: ["6M"], + infestation: ["6M"], + lightscreen: ["6M", "6L1", "6S0"], + poisonpowder: ["6L1"], + powder: ["6L1"], + protect: ["6M"], + psybeam: ["6L17"], + psychic: ["6M"], + psychup: ["6M"], + quiverdance: ["6L45"], + raindance: ["6M"], + rest: ["6M"], + return: ["6M"], + roost: ["6M"], + round: ["6M"], + safeguard: ["6M", "6L41"], + secretpower: ["6M"], + signalbeam: ["6T"], + sleeppowder: ["6L1"], + sleeptalk: ["6M"], + snore: ["6T"], + solarbeam: ["6M"], + strugglebug: ["6M", "6L12", "6S0"], + stunspore: ["6L1", "6S0"], + substitute: ["6M"], + sunnyday: ["6M"], + supersonic: ["6L21"], + swagger: ["6M"], + tailwind: ["6T"], + thief: ["6M"], + toxic: ["6M"], + uturn: ["6M"], + }}, + litleo: {learnset: { + attract: ["7M", "6M"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + crunch: ["7L39", "6L39"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "7L33", "6M", "6L33"], + ember: ["7L5", "6L5"], + endeavor: ["7L28", "6T", "6L28"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + firefang: ["7L23", "6L23"], + firespin: ["7E", "6E"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "7L36", "6M", "6L36"], + flareblitz: ["7E"], + frustration: ["7M", "6M"], + headbutt: ["7L11", "6L11"], + heatwave: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hypervoice: ["7L43", "6T", "6L43"], + incinerate: ["7L46", "6M", "6L46"], + irontail: ["6T"], + leer: ["7L1", "6L1"], + nobleroar: ["7L15", "6L15"], + overheat: ["7M", "7L50", "6M", "6L50"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "6M"], + snatch: ["7E", "6T", "6E"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L20", "6L20"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + wildcharge: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M", "7L8", "6L8"], + yawn: ["7E", "6E"], + }}, + pyroar: {learnset: { + attract: ["7M", "6M"], + bounce: ["6T"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + crunch: ["7L42", "6L42"], + darkpulse: ["7M", "6M", "6S0"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "7L33", "6M", "6L33"], + ember: ["7L5", "7L1", "6L5"], + endeavor: ["7L28", "6T", "6L28"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M", "6S0"], + firefang: ["7L23", "6L23"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "7L38", "6M", "6L38"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + headbutt: ["7L11", "6L11"], + heatwave: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "7L1", "6M", "6L1"], + hypervoice: ["7L48", "6T", "6L48", "6S0"], + incinerate: ["7L51", "6M", "6L51"], + irontail: ["6T"], + leer: ["7L1", "6L1"], + nobleroar: ["7L15", "6L15"], + overheat: ["7M", "7L57", "6M", "6L57"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L20", "6L20"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + wildcharge: ["7M", "6M"], + willowisp: ["7M", "6M"], + workup: ["7M", "7L8", "7L1", "6L8"], + }}, + flabebe: {learnset: { + afteryou: ["6T"], + aromatherapy: ["7L33", "6L33"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + camouflage: ["7E", "6E"], + captivate: ["7E", "6E"], + confide: ["7M", "6M"], + copycat: ["7E", "6E"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L6", "6L6"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + grassyterrain: ["7L24", "6L24"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + luckychant: ["7L10", "6L10"], + magicalleaf: ["7L22", "6L22"], + magiccoat: ["6T"], + mistyterrain: ["7L37", "6L37"], + moonblast: ["7L41", "6L41"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L28", "6L28"], + petaldance: ["7L45", "6L45"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L15", "6L15"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "7L48", "6M", "6L48"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["6T"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + vinewhip: ["7L1", "6L1"], + wish: ["7L20", "6L20"], + worryseed: ["6T"], + }}, + floette: {learnset: { + afteryou: ["6T"], + aromatherapy: ["7L38", "6L38"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L6", "7L1", "6L6"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + grassyterrain: ["7L27", "6L27"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + luckychant: ["7L10", "6L10"], + magicalleaf: ["7L25", "6L25"], + magiccoat: ["6T"], + mistyterrain: ["7L43", "6L43"], + moonblast: ["7L46", "6L46"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L33", "6L33"], + petaldance: ["7L51", "6L51"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L15", "6L15"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "7L58", "6M", "6L58"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["6T"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + vinewhip: ["7L1", "6L1"], + wish: ["7L20", "6L20"], + worryseed: ["6T"], + }}, + floetteeternal: {learnset: { + aromatherapy: ["6L38"], + attract: ["6M"], + calmmind: ["6M"], + confide: ["6M"], + dazzlinggleam: ["6M"], + doubleteam: ["6M"], + echoedvoice: ["6M"], + energyball: ["6M"], + facade: ["6M"], + fairywind: ["6L6"], + flash: ["6M"], + frustration: ["6M"], + grassknot: ["6M"], + grassyterrain: ["6L27"], + hiddenpower: ["6M"], + lightofruin: ["6L50"], + luckychant: ["6L10"], + magicalleaf: ["6L25"], + mistyterrain: ["6L43"], + moonblast: ["6L46"], + naturepower: ["6M"], + petalblizzard: ["6L33"], + petaldance: ["6L51"], + protect: ["6M"], + psychic: ["6M"], + raindance: ["6M"], + razorleaf: ["6L15"], + rest: ["6M"], + return: ["6M"], + round: ["6M"], + safeguard: ["6M"], + secretpower: ["6M"], + sleeptalk: ["6M"], + solarbeam: ["6M", "6L58"], + substitute: ["6M"], + sunnyday: ["6M"], + swagger: ["6M"], + tackle: ["6L1"], + toxic: ["6M"], + vinewhip: ["6L1"], + wish: ["6L20"], + }}, + florges: {learnset: { + afteryou: ["6T"], + aromatherapy: ["7L1", "6L1"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + disarmingvoice: ["7L1", "6L1"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + flowershield: ["7L1", "6L1"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "7L1", "6M", "6L1"], + grassyterrain: ["7L1", "6L1"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + lightscreen: ["7M", "6M"], + luckychant: ["7L1", "6L1"], + magicalleaf: ["7L1", "6L1"], + magiccoat: ["6T"], + mistyterrain: ["7L1", "6L1"], + moonblast: ["7L1", "6L1"], + naturepower: ["7M", "6M"], + petalblizzard: ["7L1", "6L1"], + petaldance: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["6T"], + toxic: ["7M", "6M"], + wish: ["7L1", "6L1"], + worryseed: ["6T"], + }}, + skiddo: {learnset: { + attract: ["7M", "6M"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L34", "6M", "6L34"], + bulldoze: ["7M", "7L26", "6M", "6L26"], + confide: ["7M", "6M"], + defensecurl: ["7E", "6E"], + dig: ["6M"], + doubleedge: ["7L38", "6L38"], + doubleteam: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + growth: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hornleech: ["7L42", "6L42"], + irontail: ["6T"], + leafblade: ["7L45", "6L45"], + leechseed: ["7L12", "6L12"], + milkdrink: ["7L50", "7E", "6L50", "6E"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L13", "6L13"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rollout: ["7E", "6E"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7L30", "6T", "6L30"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7L20", "6T", "6L20"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "6L9"], + takedown: ["7L22", "6L22"], + toxic: ["7M", "6M"], + vinewhip: ["7L7", "6L7"], + wildcharge: ["7M", "6M"], + workup: ["7M"], + worryseed: ["7L16", "6T", "6L16"], + zenheadbutt: ["6T"], + }}, + gogoat: {learnset: { + aerialace: ["7M", "7L1", "6M", "6L1"], + attract: ["7M", "6M"], + bounce: ["6T"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "7L34", "6M", "6L34"], + bulldoze: ["7M", "7L26", "6M", "6L26"], + confide: ["7M", "6M"], + dig: ["6M"], + doubleedge: ["7L40", "6L40"], + doubleteam: ["7M", "6M"], + earthquake: ["7M", "7L1", "6M", "6L60"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growth: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hornleech: ["7L47", "6L47"], + hyperbeam: ["7M", "6M"], + irontail: ["6T"], + leafblade: ["7L55", "6L55"], + leechseed: ["7L12", "6L12"], + milkdrink: ["7L58", "6L58"], + naturepower: ["7M", "6M"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorleaf: ["7L13", "6L13"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["7L30", "6T", "6L30"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["7L20", "6T", "6L20"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "7L1", "6L9"], + takedown: ["7L22", "6L22"], + toxic: ["7M", "6M"], + vinewhip: ["7L7", "7L1", "6L7"], + wildcharge: ["7M", "6M"], + workup: ["7M"], + worryseed: ["7L16", "6T", "6L16"], + zenheadbutt: ["6T"], + }}, + pancham: {learnset: { + aerialace: ["7M", "6M"], + armthrust: ["7L7", "6L7", "6S0"], + attract: ["7M", "6M"], + block: ["6T"], + bodyslam: ["7L33", "6L33"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], + circlethrow: ["7L25", "6L25"], + cometpunch: ["7L15", "6L15"], + confide: ["7M", "6M"], + covet: ["6T"], + crunch: ["7L39", "6L39"], + cut: ["6M"], + darkpulse: ["7M", "6M", "6S0"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["6T"], + dualchop: ["6T"], + echoedvoice: ["7M", "6M"], + endeavor: ["6T"], + entrainment: ["7L42", "6L42"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + firepunch: ["6T"], + fling: ["7M", "6M"], + focuspunch: ["6T"], + foulplay: ["7E", "6T", "6E"], + frustration: ["7M", "6M"], + grassknot: ["7M", "6M"], + gunkshot: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hypervoice: ["6T"], + icepunch: ["6T"], + ironhead: ["6T"], + karatechop: ["7L12", "6L12"], + knockoff: ["6T"], + leer: ["7L1", "6L1"], + lowkick: ["6T"], + lowsweep: ["7M", "6M"], + mefirst: ["7E", "6E"], + partingshot: ["7L45", "6L45"], + payback: ["7M", "6M"], + powertrip: ["7E"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quash: ["7E", "6E"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M"], + skyuppercut: ["7L48", "6L48"], + slash: ["7L20", "6L20"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + spite: ["6T"], + stoneedge: ["7M", "6M", "6S0"], + stormthrow: ["7E", "6E"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thunderpunch: ["6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["6T"], + vitalthrow: ["7L27", "6L27"], + workup: ["7M", "7L10", "6L10"], + zenheadbutt: ["6T"], + }}, + pangoro: {learnset: { + aerialace: ["7M", "6M"], + armthrust: ["7L7", "7L1", "6L7"], + attract: ["7M", "6M"], + block: ["6T"], + bodyslam: ["7L35", "6L35"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], + bulletpunch: ["7L1"], + circlethrow: ["7L25", "6L25"], + cometpunch: ["7L15", "6L15"], + confide: ["7M", "6M"], + covet: ["6T"], + crunch: ["7L42", "6L42"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragonclaw: ["7M", "6M"], + drainpunch: ["6T"], + dualchop: ["6T"], + earthquake: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + embargo: ["7M", "6M"], + endeavor: ["6T"], + entrainment: ["7L45", "7L1", "6L1"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + firepunch: ["6T"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["6T"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gunkshot: ["6T"], + hammerarm: ["7L70", "7L1", "6L1"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hyperbeam: ["7M", "6M"], + hypervoice: ["6T"], + icepunch: ["6T"], + infestation: ["7M", "6M"], + ironhead: ["6T"], + karatechop: ["7L12", "6L12"], + knockoff: ["6T"], + leer: ["7L1", "6L1"], + lowkick: ["6T"], + lowsweep: ["7M", "7L57", "7L1", "6M", "6L70"], + outrage: ["6T"], + partingshot: ["7L48", "6L48"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quash: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M"], + skyuppercut: ["7L52", "6L52"], + slash: ["7L20", "6L20"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + snarl: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + spite: ["6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "7L65", "6M", "6L65"], + thief: ["7M", "6M"], + thunderpunch: ["6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["6T"], + vitalthrow: ["7L27", "6L27"], + workup: ["7M", "7L10", "7L1", "6L10"], + xscissor: ["7M", "6M"], + zenheadbutt: ["6T"], + }}, + furfrou: {learnset: { + attract: ["7M", "6M"], + babydolleyes: ["7L9", "6L9"], + bite: ["7L22", "6L22"], + captivate: ["7E", "6E"], + chargebeam: ["7M", "6M"], + charm: ["7L38", "6L38"], + confide: ["7M", "6M"], + cottonguard: ["7L48", "6L48"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["6T"], + facade: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growl: ["7L1", "6L1"], + headbutt: ["7L12", "6L12"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hypervoice: ["6T"], + irontail: ["6T"], + lastresort: ["6T"], + mimic: ["7E", "6E"], + odorsleuth: ["7L27", "6L27"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + refresh: ["7E", "6E"], + rest: ["7M", "6M"], + retaliate: ["7L33", "6M", "6L33"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["7E", "6T", "6E"], + round: ["7M", "6M"], + sandattack: ["7L5", "6L5"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + suckerpunch: ["7L42", "6L42"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L15", "6L15"], + takedown: ["7L35", "6L35"], + thunderwave: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["6T"], + uturn: ["7M", "6M"], + wildcharge: ["7M", "6M"], + workup: ["7M", "7E", "6E"], + zenheadbutt: ["6T"], + }}, + espurr: {learnset: { + assist: ["7E", "6E"], + attract: ["7M", "6M"], + barrier: ["7E", "6E"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + confusion: ["7L9", "6L9"], + covet: ["7L5", "6T", "6L5"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + disarmingvoice: ["7L22", "6L22"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fakeout: ["7L19", "6L19"], + flash: ["6M"], + frustration: ["7M", "6M"], + gravity: ["6T"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + irontail: ["6T"], + leer: ["7L1", "6L1"], + lightscreen: ["7M", "7L13", "6M", "6L13"], + magiccoat: ["6T"], + magicroom: ["6T"], + payback: ["7M", "6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L25", "6M", "6L25"], + raindance: ["7M", "6M"], + recycle: ["6T"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7E", "6T", "6E"], + trickroom: ["7M", "6M"], + wonderroom: ["6T"], + workup: ["7M"], + yawn: ["7E", "6E"], + zenheadbutt: ["6T"], + }}, + meowstic: {learnset: { + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + charm: ["7L28", "6L28"], + confide: ["7M", "6M"], + confusion: ["7L9", "7L1", "6L9"], + covet: ["7L5", "7L1", "6T", "6L5"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + disarmingvoice: ["7L22", "6L22"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fakeout: ["7L19", "6L19"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gravity: ["6T"], + healbell: ["6T"], + helpinghand: ["7L1", "6T", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + imprison: ["7L45", "6L45"], + irontail: ["6T"], + leer: ["7L1", "6L1"], + lightscreen: ["7M", "7L13", "6M", "6L13"], + magiccoat: ["6T"], + magicroom: ["6T"], + meanlook: ["7L1", "6L1"], + miracleeye: ["7L31", "6L31"], + mistyterrain: ["7L50", "6L50"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "7L40", "6M", "6L40"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L25", "6M", "6L25"], + quickguard: ["7L53", "7L1", "6L1"], + raindance: ["7M", "6M"], + recycle: ["6T"], + reflect: ["7M", "7L35", "6M", "6L35"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7L43", "6T", "6L43"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + substitute: ["7M", "6M"], + suckerpunch: ["7L48", "6L48"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["6T"], + trickroom: ["7M", "6M"], + wonderroom: ["6T"], + workup: ["7M"], + zenheadbutt: ["6T"], + }}, + meowsticf: {learnset: { + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "7L28", "6M", "6L28"], + confide: ["7M", "6M"], + confusion: ["7L9", "7L1", "6L9"], + covet: ["7L5", "7L1", "6L5"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + disarmingvoice: ["7L22", "6L22"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + energyball: ["7M", "6M"], + extrasensory: ["7L35", "6L35"], + facade: ["7M", "6M"], + fakeout: ["7L19", "6L19"], + flash: ["6M"], + frustration: ["7M", "6M"], + futuresight: ["7L50", "6L50"], + gigaimpact: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + leer: ["7L1", "6L1"], + lightscreen: ["7M", "7L13", "6M", "6L13"], + magicalleaf: ["7L1", "6L1"], + mefirst: ["7L1", "6L1"], + payback: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L17", "6L17"], + psychic: ["7M", "7L40", "6M", "6L40"], + psychup: ["7M", "6M"], + psyshock: ["7M", "7L25", "6M", "6L25"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["7L43", "6L43"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "7L31", "6M", "6L31"], + signalbeam: ["7L45", "6L45"], + sleeptalk: ["7M", "6M"], + storedpower: ["7L53", "7L1", "6L1"], + substitute: ["7M", "6M"], + suckerpunch: ["7L48", "6L48"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + workup: ["7M"], + }}, + honedge: {learnset: { + aerialace: ["7M", "7L22", "6M", "6L22"], + afteryou: ["6T"], + attract: ["7M", "6M"], + autotomize: ["7L18", "6L18"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + cut: ["6M"], + destinybond: ["7E", "6E"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + furycutter: ["7L5", "6L5"], + gyroball: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + irondefense: ["7L32", "6T", "6L32"], + ironhead: ["7L42", "6T", "6L42"], + magnetrise: ["6T"], + metalsound: ["7L8", "7E", "6L8", "6E"], + nightslash: ["7L35", "6L35"], + powertrick: ["7L39", "6L39"], + protect: ["7M", "6M"], + pursuit: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["7L26", "6M", "6L26"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + sacredsword: ["7L47", "6L47"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M"], + shadowsneak: ["7L20", "7E", "6L20", "6E"], + shockwave: ["6T"], + slash: ["7L29", "6L29"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + spite: ["6T"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + wideguard: ["7E", "6E"], + }}, + doublade: {learnset: { + aerialace: ["7M", "7L22", "6M", "6L22"], + afteryou: ["6T"], + attract: ["7M", "6M"], + autotomize: ["7L18", "6L18"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + furycutter: ["7L5", "7L1", "6L5"], + gyroball: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + irondefense: ["7L32", "6T", "6L32"], + ironhead: ["7L45", "6T", "6L45"], + magnetrise: ["6T"], + metalsound: ["7L8", "6L8"], + nightslash: ["7L36", "6L36"], + powertrick: ["7L41", "6L41"], + protect: ["7M", "6M"], + pursuit: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["7L26", "6M", "6L26"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + sacredsword: ["7L51", "6L51"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M"], + shadowsneak: ["7L20", "6L20"], + shockwave: ["6T"], + slash: ["7L29", "6L29"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + spite: ["6T"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + }}, + aegislash: {learnset: { + aerialace: ["7M", "7L1", "6M", "6L1"], + afteryou: ["6T"], + attract: ["7M", "6M"], + autotomize: ["7L1", "6L1"], + block: ["6T"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + confide: ["7M", "6M"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + flashcannon: ["7M", "6M", "6S0"], + frustration: ["7M", "6M"], + furycutter: ["7L1", "6L1"], + gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + headsmash: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + irondefense: ["7L1", "6T", "6L1"], + ironhead: ["7L1", "6T", "6L1"], + kingsshield: ["7L1", "6L1", "6S0"], + magnetrise: ["6T"], + nightslash: ["7L1", "6L1"], + powertrick: ["7L1", "6L1"], + protect: ["7M", "6M"], + pursuit: ["7L1", "6L1"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + sacredsword: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "6M", "6S0"], + shadowclaw: ["7M", "6M"], + shadowsneak: ["7L1", "6L1"], + shockwave: ["6T"], + slash: ["7L1", "6L1"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + spite: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L1", "6M", "6L1"], + toxic: ["7M", "6M"], + wideguard: ["6S0"], + }}, + spritzee: {learnset: { + afteryou: ["6T"], + aromatherapy: ["7L25", "6L25"], + attract: ["7M", "7L29", "6M", "6L29"], + calmmind: ["7M", "7L17", "6M", "6L17"], + captivate: ["7E", "6E"], + chargebeam: ["7M", "6M"], + charm: ["7L35", "6L35"], + confide: ["7M", "6M"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + disable: ["7E", "6E"], + disarmingvoice: ["7L50", "6L50"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L21", "6L21"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "7L13", "6M", "6L13"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L1", "6L1"], + flail: ["7L38", "6L38"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + gyroball: ["7M", "6M"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + lightscreen: ["7M", "6M"], + magiccoat: ["6T"], + mistyterrain: ["7L42", "6L42"], + moonblast: ["7L31", "6L31"], + odorsleuth: ["7L8", "6L8"], + protect: ["7M", "6M"], + psychic: ["7M", "7L48", "6M", "6L48"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + refresh: ["7E", "6E"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + skillswap: ["7L44", "6T", "6L44"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetkiss: ["7L6", "6L6"], + sweetscent: ["7L1", "6L1"], + thunderbolt: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + wish: ["7E", "6E"], + }}, + aromatisse: {learnset: { + afteryou: ["6T"], + aromatherapy: ["7L25", "6L25"], + aromaticmist: ["7L1", "6L1"], + attract: ["7M", "7L29", "6M", "6L29"], + calmmind: ["7M", "7L17", "6M", "6L17"], + chargebeam: ["7M", "6M"], + charm: ["7L35", "6L35"], + confide: ["7M", "6M"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + disable: ["6S0"], + disarmingvoice: ["7L53", "6L53"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L21", "6L21"], + drainpunch: ["6T"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "7L13", "6M", "6L13"], + endeavor: ["6T"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L1", "6L1"], + flail: ["7L38", "6L38"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + healbell: ["6T"], + healpulse: ["7L1", "6L1", "6S0"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + lightscreen: ["7M", "6M"], + magiccoat: ["6T"], + mistyterrain: ["7L42", "6L42"], + moonblast: ["7L31", "6L31", "6S0"], + odorsleuth: ["7L8", "7L1", "6L8"], + protect: ["7M", "6M"], + psychic: ["7M", "7L48", "6M", "6L48"], + psychup: ["7M", "7L64", "6M", "6L64"], + psyshock: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L57", "6M", "6L57"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + skillswap: ["7L44", "6T", "6L44"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetkiss: ["7L6", "7L1", "6L6"], + sweetscent: ["7L1", "6L1"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M", "6S0"], + }}, + swirlix: {learnset: { + afteryou: ["7E", "6T", "6E"], + aromatherapy: ["7L26", "6L26"], + attract: ["7M", "6M"], + bellydrum: ["7E", "6E"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + copycat: ["7E", "6E"], + cottonguard: ["7L41", "6L41"], + cottonspore: ["7L17", "6L17"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L31", "6L31"], + dreameater: ["7M", "6M"], + endeavor: ["7L21", "6T", "6L21"], + energyball: ["7M", "7L36", "6M", "6L36"], + facade: ["7M", "6M"], + fairywind: ["7L5", "6L5"], + faketears: ["7L10", "6L10"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gastroacid: ["6T"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + lightscreen: ["7M", "7L58", "6M", "6L58"], + magiccoat: ["6T"], + playnice: ["7L8", "6L8"], + playrough: ["7L49", "6L49"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "7L13", "6M", "6L13"], + safeguard: ["7M", "7L67", "6M", "6L67"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetscent: ["7L1", "6L1"], + tackle: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "6M"], + wish: ["7L45", "6L45"], + yawn: ["7E", "6E"], + }}, + slurpuff: {learnset: { + afteryou: ["6T"], + aromatherapy: ["7L26", "6L26"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + cottonguard: ["7L41", "6L41"], + cottonspore: ["7L17", "6L17"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L31", "6L31"], + drainpunch: ["6T"], + dreameater: ["7M", "6M"], + endeavor: ["7L21", "6T", "6L21"], + energyball: ["7M", "7L36", "6M", "6L36"], + facade: ["7M", "6M"], + fairywind: ["7L5", "7L1", "6L5"], + faketears: ["7L10", "6L10"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + gastroacid: ["6T"], + gigaimpact: ["7M", "6M"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + lightscreen: ["7M", "7L58", "6M", "6L58"], + magiccoat: ["6T"], + playnice: ["7L8", "7L1", "6L8"], + playrough: ["7L49", "6L49"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "7L13", "6M", "6L13"], + safeguard: ["7M", "7L67", "6M", "6L67"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + sweetscent: ["7L1", "6L1"], + tackle: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "6M"], + wish: ["7L45", "6L45"], + }}, + inkay: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bind: ["6T"], + calmmind: ["7M", "6M"], + camouflage: ["7E", "6E"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + destinybond: ["7E", "6E"], + doubleteam: ["7M", "6M"], + embargo: ["7M", "6M"], + facade: ["7M", "6M"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + flatter: ["7E", "6E"], + fling: ["7M", "6M"], + foulplay: ["7L8", "6T", "6L8", "6S0"], + frustration: ["7M", "6M"], + happyhour: ["6S0"], + hiddenpower: ["7M", "6M"], + hypnosis: ["7L18", "6L18", "6S0"], + knockoff: ["6T"], + lightscreen: ["7M", "7L31", "6M", "6L31"], + nightslash: ["7L46", "6L46"], + payback: ["7M", "7L27", "6M", "6L27"], + peck: ["7L1", "6L1"], + pluck: ["7L35", "6L35"], + powersplit: ["7E", "6E"], + protect: ["7M", "6M"], + psybeam: ["7L21", "6L21"], + psychic: ["7M", "6M"], + psychocut: ["7L39", "6L39"], + psychup: ["7M", "6M"], + psywave: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L4", "6M", "6L4"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + secretpower: ["6M"], + simplebeam: ["7E", "6E"], + slash: ["7L43", "6L43"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + spite: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["7L48", "6T", "6L48"], + swagger: ["7M", "7L12", "6M", "6L12"], + switcheroo: ["7L23", "6L23"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + topsyturvy: ["7L15", "6L15", "6S0"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + }}, + malamar: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + bind: ["6T"], + block: ["6T"], + brutalswing: ["7M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + constrict: ["7L1", "6L1"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + doubleteam: ["7M", "6M"], + embargo: ["7M", "6M"], + facade: ["7M", "6M", "6S0"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + foulplay: ["7L8", "6T", "6L8"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + hypnosis: ["7L18", "6L18"], + knockoff: ["6T", "6S0"], + lightscreen: ["7M", "7L31", "6M", "6L31"], + nightslash: ["7L46", "6L46"], + payback: ["7M", "7L27", "6M", "6L27"], + peck: ["7L1", "6L1"], + pluck: ["7L35", "6L35"], + protect: ["7M", "6M"], + psybeam: ["7L21", "6L21"], + psychic: ["7M", "6M"], + psychocut: ["7L39", "6L39"], + psychup: ["7M", "6M"], + psyshock: ["7M", "6M"], + psywave: ["7L13", "6L13"], + raindance: ["7M", "6M"], + reflect: ["7M", "7L4", "7L1", "6M", "6L4"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + reversal: ["7L1", "6L1"], + rockslide: ["7M", "6M", "6S0"], + roleplay: ["6T"], + round: ["7M", "6M"], + secretpower: ["6M"], + signalbeam: ["6T"], + slash: ["7L43", "6L43"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + spite: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["7L48", "6T", "6L1", "6S0"], + swagger: ["7M", "7L12", "6M", "6L12"], + switcheroo: ["7L23", "6L23"], + tackle: ["7L1", "6L1"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + topsyturvy: ["7L15", "6L15"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + }}, + binacle: {learnset: { + aerialace: ["7M", "6M"], + ancientpower: ["7L28", "6L28"], + attract: ["7M", "6M"], + blizzard: ["7M", "6M"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "6M"], + clamp: ["7L20", "6L20"], + confide: ["7M", "6M"], + crosschop: ["7L49", "6L49"], + cut: ["6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dualchop: ["6T"], + earthquake: ["7M", "6M"], + embargo: ["7M", "6M"], + endeavor: ["6T"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + furycutter: ["7L37", "6L37"], + furyswipes: ["7L10", "6L10"], + grassknot: ["7M", "6M"], + helpinghand: ["7E", "6T", "6E"], + hiddenpower: ["7M", "6M"], + honeclaws: ["7L32", "6M", "6L32"], + icebeam: ["7M", "6M"], + icywind: ["6T"], + infestation: ["7M", "6M"], + irondefense: ["6T"], + mudslap: ["7L18", "6L18"], + naturepower: ["7M", "6M"], + nightslash: ["7L41", "6L41"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorshell: ["7L45", "6L45"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockpolish: ["7M", "7L24", "6M", "6L24"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandattack: ["7L1", "6L1"], + sandstorm: ["7M", "6M"], + scald: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M"], + shellsmash: ["7L1", "6L1"], + slash: ["7L13", "6L13"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + stealthrock: ["6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + switcheroo: ["7E", "6E"], + swordsdance: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + tickle: ["7E", "6E"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + watergun: ["7L4", "6L4"], + waterpulse: ["6T"], + watersport: ["7E", "6E"], + withdraw: ["7L7", "6L7"], + xscissor: ["7M", "6M"], + }}, + barbaracle: {learnset: { + aerialace: ["7M", "6M"], + ancientpower: ["7L28", "6L28"], + attract: ["7M", "6M"], + blizzard: ["7M", "6M"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + bulkup: ["7M", "6M"], + bulldoze: ["7M", "6M"], + clamp: ["7L20", "6L20"], + confide: ["7M", "6M"], + crosschop: ["7L55", "6L55"], + cut: ["6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragonclaw: ["7M", "6M"], + dualchop: ["6T"], + earthpower: ["6T"], + earthquake: ["7M", "6M"], + embargo: ["7M", "6M"], + endeavor: ["6T"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + furycutter: ["7L37", "6L37"], + furyswipes: ["7L10", "6L10"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["7L32", "6M", "6L32"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + icywind: ["6T"], + infestation: ["7M", "6M"], + irondefense: ["6T"], + lowkick: ["6T"], + mudslap: ["7L18", "6L18"], + naturepower: ["7M", "6M"], + nightslash: ["7L44", "6L44"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + razorshell: ["7L48", "6L48"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockpolish: ["7M", "7L24", "6M", "6L24"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandattack: ["7L1", "6L1"], + sandstorm: ["7M", "6M"], + scald: ["7M", "6M"], + scratch: ["7L1", "6L1"], + secretpower: ["6M"], + shadowclaw: ["7M", "6M"], + shellsmash: ["7L1", "6L1"], + skullbash: ["7L65", "7L1", "6L1"], + slash: ["7L13", "6L13"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + stealthrock: ["6T"], + stoneedge: ["7M", "7L60", "7L1", "6M", "6L1"], + strength: ["6M"], + substitute: ["7M", "6M"], + superpower: ["6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + watergun: ["7L4", "7L1", "6L4"], + waterpulse: ["6T"], + withdraw: ["7L7", "6L7"], + xscissor: ["7M", "6M"], + }}, + skrelp: {learnset: { + acid: ["7L15", "6L15"], + acidarmor: ["7E", "6E"], + aquatail: ["7L35", "6T", "6L35"], + attract: ["7M", "6M"], + bounce: ["6T"], + bubble: ["7L12", "6L12"], + camouflage: ["7L19", "6L19"], + confide: ["7M", "6M"], + dive: ["6M"], + doubleteam: ["7M", "7L28", "6M", "6L28"], + dragonpulse: ["7L49", "6T", "6L49"], + facade: ["7M", "6M"], + feintattack: ["7L5", "6L5"], + frustration: ["7M", "6M"], + gunkshot: ["6T"], + hail: ["7M", "6M"], + haze: ["7E", "6E"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L42", "6L42"], + icywind: ["6T"], + irontail: ["6T"], + outrage: ["6T"], + playrough: ["7E", "6E"], + poisontail: ["7L23", "6L23"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "7L38", "6M", "6L38"], + sludgewave: ["7M", "6M"], + smokescreen: ["7L1", "6L1"], + snore: ["6T"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "6L9"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "7L32", "6M", "6L32"], + toxicspikes: ["7E", "6E"], + venomdrench: ["7E", "6E"], + venoshock: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7L25", "6T", "6L25"], + }}, + dragalge: {learnset: { + acid: ["7L15", "6L15"], + aquatail: ["7L35", "6T", "6L35"], + attract: ["7M", "6M"], + bounce: ["6T"], + bubble: ["7L12", "6L12"], + camouflage: ["7L19", "6L19"], + confide: ["7M", "6M"], + dive: ["6M"], + doubleteam: ["7M", "7L28", "6M", "6L28"], + dracometeor: ["7T", "6T"], + dragonpulse: ["7L53", "6T", "6L53"], + dragontail: ["7M", "7L59", "7L1", "6M", "6L1"], + facade: ["7M", "6M"], + feintattack: ["7L5", "7L1", "6L5"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gunkshot: ["6T"], + hail: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L42", "6L42"], + hyperbeam: ["7M", "6M"], + icywind: ["6T"], + irontail: ["6T"], + outrage: ["6T"], + poisontail: ["7L23", "6L23"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "7L38", "6M", "6L38"], + sludgewave: ["7M", "6M"], + smokescreen: ["7L1", "6L1"], + snore: ["6T"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L9", "6L9"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "7L32", "6M", "6L32"], + twister: ["7L1", "6L1"], + venoshock: ["7M", "6M"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7L25", "6T", "6L25"], + }}, + clauncher: {learnset: { + aquajet: ["7L43", "7E", "6L43", "6E"], + aquatail: ["6T"], + attract: ["7M", "6M"], + bounce: ["6T"], + bubble: ["7L12", "6L12"], + bubblebeam: ["7L20", "6L20"], + confide: ["7M", "6M"], + crabhammer: ["7L30", "7E", "6L30", "6E"], + cut: ["6M"], + dive: ["6M"], + doubleteam: ["7M", "6M"], + dragonpulse: ["6T"], + endure: ["7E", "6E"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M"], + flail: ["7L16", "6L16"], + flashcannon: ["7M", "6M"], + frustration: ["7M", "6M"], + helpinghand: ["7E", "6T", "6E"], + hiddenpower: ["7M", "6M"], + icebeam: ["7M", "6M"], + icywind: ["6T"], + irontail: ["6T"], + muddywater: ["7L48", "6L48"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "7L39", "6M", "6L39"], + snore: ["6T"], + splash: ["7L1", "6L1"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L25", "6M", "6L25"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + venoshock: ["7M", "6M"], + vicegrip: ["7L9", "6L9"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7L34", "6T", "6L34"], + watersport: ["7L7", "6L7"], + }}, + clawitzer: {learnset: { + aquajet: ["7L49", "6L47"], + aquatail: ["6T"], + attract: ["7M", "6M"], + aurasphere: ["7L1", "6L1"], + bounce: ["6T"], + bubble: ["7L12", "6L12"], + bubblebeam: ["7L20", "6L20"], + confide: ["7M", "6M"], + crabhammer: ["7L30", "6L30"], + cut: ["6M"], + darkpulse: ["7M", "7L1", "6M", "6L1"], + dive: ["6M"], + doubleteam: ["7M", "6M"], + dragonpulse: ["7L1", "6T", "6L1"], + facade: ["7M", "6M"], + flail: ["7L16", "6L16"], + flashcannon: ["7M", "6M"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + healpulse: ["7L1", "6L1"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + icywind: ["6T"], + irontail: ["6T"], + muddywater: ["7L57", "6L53"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + round: ["7M", "6M"], + scald: ["7M", "6M"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "7L42", "6M", "6L42"], + snore: ["6T"], + splash: ["7L1", "6L1"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L25", "6M", "6L25"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + venoshock: ["7M", "6M"], + vicegrip: ["7L9", "7L1", "6L9"], + waterfall: ["7M", "6M"], + watergun: ["7L1", "6L1"], + waterpulse: ["7L34", "6T", "6L34"], + watersport: ["7L7", "7L1", "6L7"], + }}, + helioptile: {learnset: { + agility: ["7E", "6E"], + attract: ["7M", "6M"], + bulldoze: ["7M", "7L35", "6M", "6L35"], + camouflage: ["7E", "6E"], + charge: ["7L11", "6L11"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragontail: ["7M", "6M"], + electricterrain: ["7E", "6E"], + electrify: ["7L45", "6L45"], + electroweb: ["6T"], + facade: ["7M", "6M"], + flash: ["6M"], + frustration: ["7M", "6M"], + glare: ["7E", "6E"], + grassknot: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + irontail: ["6T"], + lightscreen: ["7M", "6M"], + lowsweep: ["7M", "6M"], + magnetrise: ["6T"], + mudslap: ["7L13", "6L13"], + paraboliccharge: ["7L25", "6L25"], + pound: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychup: ["7M", "6M"], + quickattack: ["7L17", "6L17"], + raindance: ["7M", "6M"], + razorwind: ["7L22", "6L22"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tailwhip: ["7L1", "6L1"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "7L49", "6M", "6L49"], + thundershock: ["7L6", "6L6"], + thunderwave: ["7M", "7L31", "6M", "6L31"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + voltswitch: ["7M", "7L40", "6M", "6L40"], + wildcharge: ["7M", "6M"], + }}, + heliolisk: {learnset: { + attract: ["7M", "6M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M"], + charge: ["7L1", "6L1"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dragonpulse: ["6T"], + dragontail: ["7M", "6M"], + eerieimpulse: ["7L1", "6L1"], + electrify: ["7L1", "6L1"], + electroweb: ["6T"], + facade: ["7M", "6M"], + firepunch: ["6T"], + flash: ["6M"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + hypervoice: ["6T"], + irontail: ["6T"], + lightscreen: ["7M", "6M"], + lowkick: ["6T"], + lowsweep: ["7M", "6M"], + magnetrise: ["6T"], + paraboliccharge: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychup: ["7M", "6M"], + quickattack: ["7L1", "6L1"], + raindance: ["7M", "6M"], + razorwind: ["7L1", "6L1"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + thunder: ["7M", "7L1", "6M", "6L1"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["6T"], + thunderwave: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + voltswitch: ["7M", "6M"], + wildcharge: ["7M", "6M"], + }}, + tyrunt: {learnset: { + aerialace: ["7M", "6M"], + ancientpower: ["7L26", "6L26"], + attract: ["7M", "6M"], + bide: ["7L12", "6L12"], + bite: ["7L17", "6L17"], + block: ["6T"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "6M"], + charm: ["7L20", "6L20"], + confide: ["7M", "6M"], + crunch: ["7L34", "6L34"], + curse: ["7E", "6E"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonclaw: ["7M", "7L37", "6M", "6L37"], + dragondance: ["7E", "6E"], + dragonpulse: ["6T"], + dragontail: ["7M", "7L30", "6M", "6L30"], + earthpower: ["6T"], + earthquake: ["7M", "7L44", "6M", "6L44"], + facade: ["7M", "6M"], + firefang: ["7E", "6E"], + frustration: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + horndrill: ["7L49", "6L49"], + hypervoice: ["6T"], + icefang: ["7E", "6E"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + outrage: ["6T"], + poisonfang: ["7E", "6E"], + protect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "7L6", "6M", "6L6", "6S0"], + rockpolish: ["7M", "7E", "6M", "6E"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + stealthrock: ["7L15", "6T", "6L15"], + stomp: ["7L10", "6L10", "6S0"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1", "6S0"], + tailwhip: ["7L1", "6L1", "6S0"], + thrash: ["7L40", "6L40"], + thunderfang: ["7E", "6E"], + toxic: ["7M", "6M"], + zenheadbutt: ["6T"], + }}, + tyrantrum: {learnset: { + aerialace: ["7M", "6M"], + ancientpower: ["7L26", "6L26"], + attract: ["7M", "6M"], + bide: ["7L12", "6L12"], + bite: ["7L17", "6L17"], + block: ["6T"], + brickbreak: ["7M", "6M"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M"], + charm: ["7L20", "6L20"], + confide: ["7M", "6M"], + crunch: ["7L34", "6L34"], + darkpulse: ["7M", "6M"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonclaw: ["7M", "7L37", "6M", "6L37"], + dragonpulse: ["6T"], + dragontail: ["7M", "7L30", "6M", "6L30"], + earthpower: ["6T"], + earthquake: ["7M", "7L47", "6M", "6L47"], + facade: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "7L68", "6M", "6L75"], + headsmash: ["7L58", "7L1", "6L1"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + horndrill: ["7L53", "6L53"], + hyperbeam: ["7M", "6M"], + hypervoice: ["6T"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + outrage: ["6T"], + protect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "7L6", "7L1", "6M", "6L6"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "7L1", "6M", "6L68"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + stealthrock: ["7L15", "6T", "6L15"], + stomp: ["7L10", "7L1", "6L10"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L1", "6L1"], + thrash: ["7L42", "6L42"], + toxic: ["7M", "6M"], + zenheadbutt: ["6T"], + }}, + amaura: {learnset: { + ancientpower: ["7L26", "6L26"], + aquatail: ["6T"], + attract: ["7M", "6M"], + aurorabeam: ["7L20", "6L20"], + avalanche: ["7L34", "6L34"], + barrier: ["7E", "6E"], + blizzard: ["7M", "7L65", "6M", "6L65"], + bulldoze: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M"], + discharge: ["7E", "6E"], + doubleteam: ["7M", "6M"], + dragontail: ["7M", "6M"], + dreameater: ["7M", "6M"], + earthpower: ["6T"], + echoedvoice: ["7M", "6M"], + encore: ["7L44", "6L44"], + facade: ["7M", "6M"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frostbreath: ["7M", "6M"], + frustration: ["7M", "6M"], + growl: ["7L1", "6L1", "6S0"], + hail: ["7M", "7L38", "6M", "6L38"], + haze: ["7E", "6E"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "7L57", "6M", "6L57"], + hypervoice: ["6T"], + icebeam: ["7M", "7L50", "6M", "6L50"], + icywind: ["7L13", "6T", "6L13"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + lightscreen: ["7M", "7L47", "6M", "6L47"], + magnetrise: ["7E", "6T", "6E"], + mirrorcoat: ["7E", "6E"], + mist: ["7L18", "6L18"], + naturepower: ["7M", "7L41", "6M", "6L41"], + outrage: ["6T"], + powdersnow: ["7L1", "6L1", "6S0"], + protect: ["7M", "6M"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rockthrow: ["7L10", "6L10", "6S0"], + rocktomb: ["7M", "6M"], + round: ["7M", "7L30", "6M", "6L30"], + safeguard: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + stealthrock: ["6T"], + stoneedge: ["7M", "6M"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + takedown: ["7L15", "6L15"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "7L5", "6M", "6L5", "6S0"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + zenheadbutt: ["6T"], + }}, + aurorus: {learnset: { + ancientpower: ["7L26", "6L26"], + aquatail: ["6T"], + attract: ["7M", "6M"], + aurorabeam: ["7L20", "6L20"], + avalanche: ["7L34", "6L34"], + blizzard: ["7M", "7L74", "6M", "6L74"], + bulldoze: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + darkpulse: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dragontail: ["7M", "6M"], + dreameater: ["7M", "6M"], + earthpower: ["6T"], + earthquake: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + encore: ["7L46", "6L46"], + facade: ["7M", "6M"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + freezedry: ["7L1", "6L1"], + frostbreath: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + growl: ["7L1", "6L1"], + hail: ["7M", "7L38", "6M", "6L38"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "7L63", "6M", "6L63"], + hypervoice: ["6T"], + icebeam: ["7M", "7L56", "6M", "6L56"], + icywind: ["7L13", "6T", "6L13"], + irondefense: ["6T"], + ironhead: ["6T"], + irontail: ["6T"], + lightscreen: ["7M", "7L50", "6M", "6L50"], + magnetrise: ["6T"], + mist: ["7L18", "6L18"], + naturepower: ["7M", "7L43", "6M", "6L43"], + outrage: ["6T"], + powdersnow: ["7L1", "6L1"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rockthrow: ["7L10", "7L1", "6L10"], + rocktomb: ["7M", "6M"], + round: ["7M", "7L30", "6M", "6L30"], + safeguard: ["7M", "6M"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + stealthrock: ["6T"], + stoneedge: ["7M", "6M"], + substitute: ["7M", "6M"], + swagger: ["7M", "6M"], + takedown: ["7L15", "6L15"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "7L5", "7L1", "6M", "6L5"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + zenheadbutt: ["6T"], + }}, + sylveon: {learnset: { + attract: ["7M", "6M"], + babydolleyes: ["7L9", "6S1"], + calmmind: ["7M", "7S2", "6M"], + celebrate: ["6S0"], + confide: ["7M", "6M"], + covet: ["6T"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + dig: ["6M"], + disarmingvoice: ["7L1", "6L1", "6S1"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L20", "7S2", "6L20", "6S1"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + fairywind: ["7L1", "6L9", "6S0"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + healbell: ["6T"], + helpinghand: ["7L1", "6T", "6L1", "6S0"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "7S2", "6M"], + hypervoice: ["6T"], + irontail: ["6T"], + lastresort: ["7L41", "6T", "6L41"], + lightscreen: ["7M", "7L33", "6M", "6L33"], + magiccoat: ["6T"], + mistyterrain: ["7L29", "6L29"], + moonblast: ["7L37", "6L37"], + protect: ["7M", "6M"], + psychup: ["7M", "7L45", "6M", "6L45"], + psyshock: ["7M", "7S2", "6M"], + quickattack: ["7L13", "6L13", "6S1"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + sandattack: ["7L5", "6L5", "6S0"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + skillswap: ["7L25", "6T", "6L25"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + swift: ["7L17", "6L17"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L1", "6L1"], + toxic: ["7M", "6M"], + workup: ["7M"], + }}, + hawlucha: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "7L16", "6M", "6L16"], + agility: ["7E", "6E"], + allyswitch: ["7E", "6E"], + attract: ["7M", "6M"], + batonpass: ["7E", "6E"], + bounce: ["7L32", "6T", "6L32"], + brickbreak: ["7M", "6M"], + bulkup: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + detect: ["7L1", "6L1"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["6T"], + dualchop: ["6T"], + encore: ["7L20", "6L20"], + endeavor: ["7L36", "6T", "6L36"], + entrainment: ["7E", "6E"], + facade: ["7M", "6M"], + falseswipe: ["7M", "6M"], + featherdance: ["7L40", "6L40"], + firepunch: ["6T"], + fling: ["7M", "7L24", "6M", "6L24"], + fly: ["7M", "6M"], + flyingpress: ["7L28", "6L28"], + focusblast: ["7M", "6M"], + focuspunch: ["6T"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + highjumpkick: ["7L44", "6L44"], + honeclaws: ["7L1", "6M", "6L1"], + ironhead: ["6T"], + karatechop: ["7L4", "6L4"], + lastresort: ["6T"], + lowkick: ["6T"], + lowsweep: ["7M", "6M"], + mefirst: ["7E", "6E"], + mudsport: ["7E", "6E"], + payback: ["7M", "6M"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + quickguard: ["7E", "6E"], + raindance: ["7M", "6M"], + rest: ["7M", "6M"], + retaliate: ["6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + roost: ["7M", "7L12", "6M", "6L12"], + round: ["7M", "6M"], + secretpower: ["6M"], + skyattack: ["7L48", "6T", "6L48"], + skydrop: ["7M", "7L55", "6M", "6L55"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + steelwing: ["7M", "6M"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + swagger: ["7M", "6M"], + swordsdance: ["7M", "7L60", "6M", "6L60"], + tackle: ["7L1", "6L1"], + tailwind: ["6T"], + taunt: ["7M", "6M"], + thunderpunch: ["6T"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + wingattack: ["7L8", "6L8"], + workup: ["7M"], + xscissor: ["7M", "6M"], + zenheadbutt: ["6T"], + }}, + dedenne: {learnset: { + aerialace: ["7M", "6M"], + attract: ["7M", "6M"], + charge: ["7L11", "6L11"], + chargebeam: ["7M", "7L34", "6M", "6L34"], + charm: ["7L14", "6L14"], + confide: ["7M", "6M"], + covet: ["7E", "6T", "6E"], + cut: ["6M"], + dig: ["6M"], + discharge: ["7L50", "6L50"], + doubleteam: ["7M", "6M"], + eerieimpulse: ["7E", "6E"], + electroweb: ["6T"], + entrainment: ["7L39", "6L39"], + facade: ["7M", "6M"], + flash: ["6M"], + fling: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + helpinghand: ["7E", "6T", "6E"], + hiddenpower: ["7M", "6M"], + irontail: ["6T"], + lastresort: ["6T"], + magnetrise: ["6T"], + naturalgift: ["7E", "6E"], + nuzzle: ["7L20", "6L20"], + paraboliccharge: ["7L17", "6L17"], + playrough: ["7L42", "6L42"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + recycle: ["6T"], + rest: ["7M", "7L30", "6M", "6L30"], + retaliate: ["6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + shockwave: ["6T"], + signalbeam: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["7L31", "6T", "6L31"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["6T"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwhip: ["7L1", "6L1"], + thief: ["7M", "6M"], + thunder: ["7M", "7L45", "6M", "6L45"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["6T"], + thundershock: ["7L7", "6L7"], + thunderwave: ["7M", "7L23", "6M", "6L23"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + voltswitch: ["7M", "7L26", "6M", "6L26"], + wildcharge: ["7M", "6M"], + }}, + carbink: {learnset: { + afteryou: ["6T"], + ancientpower: ["7L31", "6L31"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + earthpower: ["6T"], + explosion: ["7M", "6M"], + facade: ["7M", "6M"], + flail: ["7L35", "6L35"], + flash: ["6M"], + frustration: ["7M", "6M"], + gravity: ["6T"], + guardsplit: ["7L27", "6L27"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + irondefense: ["6T"], + lightscreen: ["7M", "7L60", "6M", "6L60"], + magiccoat: ["6T"], + magnetrise: ["6T"], + moonblast: ["7L50", "6L50"], + naturepower: ["7M", "6M"], + powergem: ["7L46", "6L46"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + reflect: ["7M", "7L18", "6M", "6L18"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rockthrow: ["7L5", "6L5"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L70", "6M", "6L70"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sharpen: ["7L8", "6L8"], + skillswap: ["7L40", "6T", "6L40"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "7L12", "6M", "6L12"], + snore: ["6T"], + stealthrock: ["7L21", "6T", "6L21"], + stoneedge: ["7M", "7L49", "6M", "6L49"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + trickroom: ["7M", "6M"], + wonderroom: ["6T"], + }}, + goomy: {learnset: { + absorb: ["7L5", "6L5"], + acidarmor: ["7E", "6E"], + attract: ["7M", "6M"], + bide: ["7L13", "6L13"], + bodyslam: ["7L32", "7S0", "6L32"], + bubble: ["7L1", "6L1"], + confide: ["7M", "6M"], + counter: ["7E", "7S0", "6E"], + curse: ["7E", "6E"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L18", "6L18"], + dragonpulse: ["7L42", "7S0", "6T", "6L42"], + endure: ["7E", "6E"], + facade: ["7M", "6M"], + flail: ["7L28", "6L28"], + frustration: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + infestation: ["7M", "6M"], + irontail: ["7E", "6T", "6E"], + muddywater: ["7L38", "6L38"], + outrage: ["6T"], + poisontail: ["7E", "6E"], + protect: ["7M", "7L9", "6M", "6L9"], + raindance: ["7M", "7L25", "6M", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + }}, + sliggoo: {learnset: { + absorb: ["7L5", "7L1", "6L5"], + attract: ["7M", "6M"], + bide: ["7L13", "6L13"], + blizzard: ["7M", "6M"], + bodyslam: ["7L32", "6L32"], + bubble: ["7L1", "6L1"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L18", "6L18"], + dragonpulse: ["7L47", "6T", "6L47"], + facade: ["7M", "6M"], + flail: ["7L28", "6L28"], + frustration: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + icebeam: ["7M", "6M"], + infestation: ["7M", "6M"], + irontail: ["6T"], + muddywater: ["7L38", "6L38"], + outrage: ["6T"], + protect: ["7M", "7L9", "6M", "6L9"], + raindance: ["7M", "7L25", "6M", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thunderbolt: ["7M", "6M"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + }}, + goodra: {learnset: { + absorb: ["7L5", "7L1", "6L5"], + aquatail: ["7L1", "6T", "6L50"], + attract: ["7M", "6M"], + bide: ["7L13", "6L13"], + blizzard: ["7M", "6M"], + bodyslam: ["7L32", "6L32"], + brutalswing: ["7M"], + bubble: ["7L1", "6L1"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L18", "6L18"], + dragonpulse: ["7L47", "6T", "6L47"], + dragontail: ["7M", "6M"], + earthquake: ["7M", "6M"], + facade: ["7M", "6M"], + feint: ["7L1", "6L1"], + fireblast: ["7M", "6M"], + firepunch: ["6T"], + flail: ["7L28", "6L28"], + flamethrower: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["6T"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + hail: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + icebeam: ["7M", "6M"], + incinerate: ["6M"], + infestation: ["7M", "6M"], + irontail: ["6T"], + muddywater: ["7L38", "6L38"], + outrage: ["7L55", "7L1", "6T", "6L1"], + powerwhip: ["7L50", "6L55"], + protect: ["7M", "7L9", "7L1", "6M", "6L9"], + raindance: ["7M", "7L25", "6M", "6L25"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["6T"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["6T"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + }}, + klefki: {learnset: { + astonish: ["7L8", "6L8"], + attract: ["7M", "6M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + craftyshield: ["7L23", "6L23"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + drainingkiss: ["7L18", "6L18"], + facade: ["7M", "6M"], + fairylock: ["7L1", "6L1"], + fairywind: ["7L5", "6L5"], + flashcannon: ["7M", "6M"], + foulplay: ["7L27", "6T", "6L27"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + healblock: ["7L50", "6L50"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + imprison: ["7L36", "6L36"], + irondefense: ["7E", "6T", "6E"], + lastresort: ["6T"], + lightscreen: ["7M", "6M"], + lockon: ["7E", "6E"], + magiccoat: ["6T"], + magicroom: ["7L44", "6T", "6L44"], + magnetrise: ["6T"], + metalsound: ["7L12", "6L12"], + mirrorshot: ["7L34", "6L34"], + playrough: ["7L43", "6L43"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + psyshock: ["7M", "6M"], + raindance: ["7M", "6M"], + recycle: ["7L40", "6T", "6L40"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + spikes: ["7L15", "6L15"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + switcheroo: ["7E", "6E"], + tackle: ["7L1", "6L1"], + thief: ["7M", "7E", "6M", "6E"], + thunderwave: ["7M", "6M"], + torment: ["7M", "7L32", "6M", "6L32"], + toxic: ["7M", "6M"], + }}, + phantump: {learnset: { + astonish: ["7L5", "6L5"], + attract: ["7M", "6M"], + bestow: ["7E", "6E"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1"], + curse: ["7L28", "6L28"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + destinybond: ["7L39", "6L39"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + feintattack: ["7L19", "6L19"], + forestscurse: ["7L35", "6L35"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + growth: ["7L8", "6L8"], + grudge: ["7E", "6E"], + hiddenpower: ["7M", "6M"], + hornleech: ["7L54", "6L54"], + imprison: ["7E", "6E"], + ingrain: ["7L13", "6L13"], + leechseed: ["7L23", "6L23"], + magiccoat: ["6T"], + naturepower: ["7M", "6M"], + painsplit: ["6T"], + phantomforce: ["7L45", "6L45"], + poisonjab: ["7M", "6M"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["6T"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "6M"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + spite: ["6T"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["6T"], + trickroom: ["7M", "6M"], + venomdrench: ["7E", "6E"], + willowisp: ["7M", "7L31", "6M", "6L31"], + woodhammer: ["7L49", "6L49"], + worryseed: ["6T"], + }}, + trevenant: {learnset: { + astonish: ["7L5", "7L1", "6L5"], + attract: ["7M", "6M"], + block: ["6T"], + brutalswing: ["7M"], + bulldoze: ["7M", "6M"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1"], + curse: ["7L28", "6L28"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + destinybond: ["7L39", "6L39"], + dig: ["6M"], + doubleteam: ["7M", "6M"], + drainpunch: ["6T"], + dreameater: ["7M", "6M"], + earthquake: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + feintattack: ["7L19", "6L19"], + focusblast: ["7M", "6M"], + forestscurse: ["7L35", "6L35"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + growth: ["7L8", "7L1", "6L8"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hornleech: ["7L54", "7L1", "6L1"], + hyperbeam: ["7M", "6M"], + ingrain: ["7L13", "6L13"], + leechseed: ["7L23", "6L23"], + magiccoat: ["6T"], + naturepower: ["7M", "6M"], + painsplit: ["6T"], + phantomforce: ["7L45", "6L45"], + poisonjab: ["7M", "6M"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + seedbomb: ["6T"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "7L1", "6M", "6L55"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + spite: ["6T"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["6T"], + trickroom: ["7M", "6M"], + willowisp: ["7M", "7L31", "6M", "6L31"], + woodhammer: ["7L49", "6L49"], + worryseed: ["6T"], + xscissor: ["7M", "6M"], + }}, + pumpkaboo: {learnset: { + astonish: ["7L1", "6L1"], + attract: ["7M", "6M"], + bestow: ["7E", "6E"], + bulletseed: ["7L26", "6L26"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1"], + darkpulse: ["7M", "6M"], + destinybond: ["7E", "6E"], + disable: ["7E", "6E"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + energyball: ["7M", "6M"], + explosion: ["7M", "6M"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + grassknot: ["7M", "6M"], + gyroball: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + incinerate: ["6M"], + leechseed: ["7L20", "6L20"], + lightscreen: ["7M", "6M"], + magiccoat: ["6T"], + naturepower: ["7M", "6M"], + painsplit: ["7L42", "6T", "6L42"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + razorleaf: ["7L16", "6L16"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scaryface: ["7L4", "6L4"], + secretpower: ["6M"], + seedbomb: ["7L48", "6T", "6L48"], + shadowball: ["7M", "7L36", "6M", "6L36"], + shadowsneak: ["7L30", "6L30"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + solarbeam: ["7M", "6M"], + spite: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["6T"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7L1", "6T", "6L1"], + trickortreat: ["7L40", "7L23", "7L6", "6L6"], + trickroom: ["7M", "6M"], + willowisp: ["7M", "6M"], + worryseed: ["7L11", "6T", "6L11"], + }}, + gourgeist: {learnset: { + astonish: ["7L1", "6L1"], + attract: ["7M", "6M"], + bulletseed: ["7L26", "6L26"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + confuseray: ["7L1", "6L1"], + darkpulse: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dreameater: ["7M", "6M"], + energyball: ["7M", "6M"], + explosion: ["7M", "7L70", "7L1", "6M", "6L1"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flamecharge: ["7M", "6M"], + flamethrower: ["7M", "6M"], + flash: ["6M"], + focusblast: ["7M", "6M"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gigadrain: ["6T"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gyroball: ["7M", "6M"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + incinerate: ["6M"], + leechseed: ["7L20", "6L20"], + lightscreen: ["7M", "6M"], + magiccoat: ["6T"], + naturepower: ["7M", "6M"], + painsplit: ["7L42", "6T", "6L42"], + phantomforce: ["7L57", "7L1", "6L1"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + razorleaf: ["7L16", "6L16"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + scaryface: ["7L4", "7L1", "6L4"], + secretpower: ["6M"], + seedbomb: ["7L48", "6T", "6L48"], + shadowball: ["7M", "7L36", "6M", "6L36"], + shadowsneak: ["7L30", "6L30"], + skillswap: ["6T"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + solarbeam: ["7M", "6M"], + spite: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + synthesis: ["6T"], + thief: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7L1", "6T", "6L1"], + trickortreat: ["7L63", "7L40", "7L23", "7L6", "6L6"], + trickroom: ["7M", "6M"], + willowisp: ["7M", "6M"], + worryseed: ["7L11", "6T", "6L11"], + }}, + bergmite: {learnset: { + afteryou: ["6T"], + attract: ["7M", "6M"], + avalanche: ["7L39", "6L39"], + barrier: ["7E", "6E"], + bite: ["7L1", "6L1"], + blizzard: ["7M", "7L43", "6M", "6L43"], + confide: ["7M", "6M"], + curse: ["7L22", "6L22"], + doubleedge: ["7L49", "6L49"], + doubleteam: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frostbreath: ["7M", "6M"], + frustration: ["7M", "6M"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + iceball: ["7L30", "6L30"], + icebeam: ["7M", "6M"], + icefang: ["7L26", "6L26"], + icywind: ["7L10", "6T", "6L10"], + irondefense: ["6T"], + mirrorcoat: ["7E", "6E"], + mist: ["7E", "6E"], + powdersnow: ["7L5", "6L5"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rapidspin: ["7L35", "6L35"], + recover: ["7L47", "7E", "6L47", "6E"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + sharpen: ["7L20", "6L20"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + }}, + avalugg: {learnset: { + afteryou: ["6T"], + attract: ["7M", "6M"], + avalanche: ["7L42", "6L42"], + bite: ["7L1", "6L1"], + blizzard: ["7M", "7L46", "6M", "6L46"], + block: ["6T"], + bodyslam: ["7L1"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + crunch: ["7L65", "7L1", "6L1"], + curse: ["7L22", "6L22"], + doubleedge: ["7L56", "6L56"], + doubleteam: ["7M", "6M"], + earthquake: ["7M", "6M"], + facade: ["7M", "6M"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + frostbreath: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + iceball: ["7L30", "6L30"], + icebeam: ["7M", "6M"], + icefang: ["7L26", "6L26"], + icywind: ["7L10", "6T", "6L10"], + irondefense: ["7L1", "6T", "6L1"], + ironhead: ["6T"], + powdersnow: ["7L5", "7L1", "6L5"], + protect: ["7M", "6M"], + raindance: ["7M", "6M"], + rapidspin: ["7L35", "6L35"], + recover: ["7L51", "6L51"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + sharpen: ["7L20", "6L20"], + skullbash: ["7L60", "7L1", "6L1"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + superpower: ["6T"], + surf: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + takedown: ["7L15", "6L15"], + toxic: ["7M", "6M"], + waterpulse: ["6T"], + }}, + noibat: {learnset: { + absorb: ["7L5"], + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + agility: ["7L18", "6L18"], + aircutter: ["7L23", "6L23"], + airslash: ["7L48", "6L48"], + attract: ["7M", "6M"], + bite: ["7L13", "6L13"], + brickbreak: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonpulse: ["6T"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + fly: ["7M", "6M"], + frustration: ["7M", "6M"], + gust: ["7L11", "6L11"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + hurricane: ["7L58", "6L58"], + hypervoice: ["6T"], + irontail: ["6T"], + leechlife: ["7M", "6L5"], + outrage: ["7E", "6T", "6E"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + razorwind: ["7L31", "6L31"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L27", "6M", "6L27"], + round: ["7M", "6M"], + screech: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "6M"], + skyattack: ["6T"], + sleeptalk: ["7M", "6M"], + snatch: ["7E", "6T", "6E"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["7L43", "6T", "6L43"], + supersonic: ["7L1", "6L1"], + swagger: ["7M", "6M"], + switcheroo: ["7E", "6E"], + tackle: ["7L1", "6L1"], + tailwind: ["7L35", "7E", "6T", "6L35", "6E"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["6T"], + uturn: ["7M", "6M"], + waterpulse: ["6T"], + whirlwind: ["7L40", "6L40"], + wildcharge: ["7M", "6M"], + wingattack: ["7L16", "6L16"], + xscissor: ["7M", "6M"], + }}, + noivern: {learnset: { + absorb: ["7L5", "7L1"], + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + agility: ["7L18", "6L18"], + aircutter: ["7L23", "6L23"], + airslash: ["7L53", "6L53"], + attract: ["7M", "6M"], + bite: ["7L13", "6L13"], + boomburst: ["7L75", "7L1", "6L1"], + brickbreak: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "6M"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonclaw: ["7M", "6M"], + dragonpulse: ["7L70", "7L1", "6T", "6L1"], + dreameater: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + facade: ["7M", "6M"], + flamethrower: ["7M", "6M"], + fly: ["7M", "6M"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gust: ["7L11", "6L11"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hurricane: ["7L62", "7L1", "6L1"], + hyperbeam: ["7M", "6M"], + hypervoice: ["6T"], + irontail: ["6T"], + leechlife: ["7M", "6L5"], + moonlight: ["7L1", "6L1"], + outrage: ["6T"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + razorwind: ["7L31", "6L31"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roost: ["7M", "7L27", "6M", "6L27"], + round: ["7M", "6M"], + screech: ["7L1", "6L1"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "6M"], + skyattack: ["6T"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superfang: ["7L43", "6T", "6L43"], + supersonic: ["7L1", "6L1"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + tailwind: ["7L35", "6T", "6L35"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uproar: ["6T"], + uturn: ["7M", "6M"], + waterpulse: ["6T"], + whirlwind: ["7L40", "6L40"], + wildcharge: ["7M", "6M"], + wingattack: ["7L16", "6L16"], + xscissor: ["7M", "6M"], + }}, + xerneas: {learnset: { + aromatherapy: ["7L1", "6L1", "6S1"], + aurorabeam: ["7L10", "6L10"], + block: ["6T"], + calmmind: ["7M", "6M"], + closecombat: ["7L80", "6L80"], + confide: ["7M", "6M"], + cut: ["6M"], + dazzlinggleam: ["7M", "6M"], + doubleteam: ["7M", "6M"], + echoedvoice: ["7M", "6M"], + endeavor: ["6T"], + facade: ["7M", "6M"], + flash: ["6M"], + flashcannon: ["7M", "6M"], + focusblast: ["7M", "6M", "6S1"], + frustration: ["7M", "6M"], + geomancy: ["7L26", "6L26", "6S0", "6S1"], + gigaimpact: ["7M", "7L88", "6M", "6L88"], + grassknot: ["7M", "6M"], + gravity: ["7L18", "6T", "6L18", "6S0"], + hail: ["7M", "6M"], + healpulse: ["7L1", "6L1"], + hiddenpower: ["7M", "6M"], + hornleech: ["7L55", "6L55"], + hyperbeam: ["7M", "6M"], + hypervoice: ["6T"], + ingrain: ["7L1", "6L1"], + lightscreen: ["7M", "7L5", "6M", "6L5"], + megahorn: ["7L44", "6L44", "6S0"], + mistyterrain: ["7L63", "6L63"], + moonblast: ["7L35", "6L35", "6S0", "6S1"], + naturepower: ["7M", "7L72", "6M", "6L72"], + nightslash: ["7L51", "6L51"], + outrage: ["7L93", "6T", "6L93"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "7L59", "6M", "6L59"], + psyshock: ["7M", "6M"], + raindance: ["7M", "6M"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + round: ["7M", "6M"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + takedown: ["7L1", "6L1"], + thunder: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderwave: ["7M", "6M"], + toxic: ["7M", "6M"], + wonderroom: ["6T"], + zenheadbutt: ["6T"], + }}, + yveltal: {learnset: { + acrobatics: ["7M", "6M"], + aerialace: ["7M", "6M"], + airslash: ["7L10", "6L10"], + block: ["6T"], + confide: ["7M", "6M"], + cut: ["6M"], + darkpulse: ["7M", "7L44", "6M", "6L44", "6S0", "6S1"], + disable: ["7L35", "6L35", "6S0"], + doubleteam: ["7M", "7L5", "6M", "6L5"], + dragonclaw: ["7M", "6M"], + dragonrush: ["7L63", "6L63"], + dreameater: ["7M", "6M"], + embargo: ["7M", "6M"], + facade: ["7M", "6M"], + fly: ["7M", "6M"], + focusblast: ["7M", "7L72", "6M", "6L72"], + foulplay: ["7L51", "6T", "6L51", "6S1"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + honeclaws: ["6M"], + hurricane: ["7L1", "6L1"], + hyperbeam: ["7M", "7L88", "6M", "6L88"], + hypervoice: ["6T"], + knockoff: ["6T"], + oblivionwing: ["7L26", "6L26", "6S0", "6S1"], + phantomforce: ["7L55", "6L55"], + protect: ["7M", "6M"], + psychic: ["7M", "7L59", "6M", "6L59"], + raindance: ["7M", "6M"], + razorwind: ["7L1", "6L1"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + roost: ["7M", "7L1", "6M", "6L1"], + round: ["7M", "6M"], + secretpower: ["6M"], + shadowball: ["7M", "6M"], + shadowclaw: ["7M", "6M"], + skyattack: ["7L93", "6T", "6L93"], + skydrop: ["7M", "6M"], + sleeptalk: ["7M", "6M"], + snarl: ["7M", "7L18", "6M", "6L18", "6S0"], + snore: ["6T"], + steelwing: ["7M", "6M"], + substitute: ["7M", "6M"], + suckerpunch: ["7L80", "6L80", "6S1"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tailwind: ["6T"], + taunt: ["7M", "7L1", "6M", "6L1"], + thief: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + uturn: ["7M", "6M"], + zenheadbutt: ["6T"], + }}, + zygarde: {learnset: { + bind: ["7L18", "7S2", "7S3", "6T", "6L18"], + bite: ["7L1", "6L1"], + block: ["6T"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "7L1", "6M", "6L1"], + camouflage: ["7L59", "6L59", "6S0"], + coil: ["7L72", "6L80"], + confide: ["7M", "6M"], + coreenforcer: ["7T"], + crunch: ["7L51", "6L51", "6S0"], + dig: ["7L10", "6M", "6L10"], + doubleteam: ["7M", "6M"], + dracometeor: ["7T", "6T"], + dragonbreath: ["7L1", "6L1"], + dragondance: ["7T", "6L72"], + dragonpulse: ["7L63", "6T", "6L63", "6S0"], + dragontail: ["7M", "6M"], + earthpower: ["6T"], + earthquake: ["7M", "7L55", "6M", "6L55", "6S0"], + extremespeed: ["7T", "6L88", "6S1"], + facade: ["7M", "6M"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + glare: ["7L1", "6L1", "6S1"], + grassknot: ["7M", "6M"], + haze: ["7L44", "7S2", "7S3", "6L44"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + hypervoice: ["6T"], + irontail: ["6T"], + landswrath: ["7L26", "7S2", "7S3", "6L26", "6S1"], + outrage: ["7L80", "6T", "6L93", "6S1"], + painsplit: ["6T"], + protect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L5", "6M", "6L5"], + sandstorm: ["7M", "7L35", "7S2", "7S3", "6M", "6L35"], + secretpower: ["6M"], + shockwave: ["6T"], + sleeptalk: ["7M", "6M"], + sludgewave: ["7M", "6M"], + snore: ["6T"], + spite: ["6T"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + swagger: ["7M", "6M"], + thousandarrows: ["7T"], + thousandwaves: ["7T"], + toxic: ["7M", "6M"], + zenheadbutt: ["6T"], + }}, + diancie: {learnset: { + afteryou: ["6T"], + ancientpower: ["7L27", "6L31"], + calmmind: ["7M", "6M"], + confide: ["7M", "6M"], + covet: ["6T"], + dazzlinggleam: ["7M", "6M"], + diamondstorm: ["7L50", "6L50", "6S0", "6S1"], + doubleteam: ["7M", "6M"], + earthpower: ["6T"], + endeavor: ["6T"], + explosion: ["7M", "6M"], + facade: ["7M", "6M"], + flail: ["7L31", "6L35"], + flash: ["6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gravity: ["6T"], + guardsplit: ["7L21", "6L27"], + gyroball: ["7M", "6M"], + hail: ["7M", "6M"], + harden: ["7L1", "6L1"], + healbell: ["6T"], + helpinghand: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + irondefense: ["6T"], + lastresort: ["6T"], + lightscreen: ["7M", "7L60", "6M", "6L60"], + magnetrise: ["6T"], + moonblast: ["7L50", "6L50", "6S0", "6S1"], + naturepower: ["7M", "6M"], + powergem: ["7L40"], + protect: ["7M", "6M"], + psychic: ["7M", "6M"], + psychup: ["7M", "6M"], + psyshock: ["7M", "6M"], + reflect: ["7M", "7L12", "6M", "6L18", "6S0", "6S1"], + rest: ["7M", "6M"], + return: ["7M", "6M", "6S0", "6S1"], + rockpolish: ["7M", "6M"], + rockslide: ["7M", "6M"], + rockthrow: ["7L1", "6L5"], + rocktomb: ["7M", "6M"], + round: ["7M", "6M"], + safeguard: ["7M", "7L70", "6M", "6L70"], + sandstorm: ["7M", "6M"], + secretpower: ["6M"], + sharpen: ["7L5", "6L8"], + skillswap: ["7L35", "6T", "6L40"], + sleeptalk: ["7M", "6M"], + smackdown: ["7M", "7L8", "6M", "6L12"], + snore: ["6T"], + stealthrock: ["7L18", "6T", "6L21"], + stoneedge: ["7M", "7L49", "6M", "6L49"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + tackle: ["7L1", "6L1"], + toxic: ["7M", "6M"], + trickroom: ["7M", "7L46", "6M", "6L46"], + wonderroom: ["6T"], + }}, + hoopa: {learnset: { + allyswitch: ["7L1", "6L1"], + astonish: ["7L6", "6L6", "6S0"], + block: ["6T"], + brickbreak: ["7M", "6M"], + calmmind: ["7M", "6M"], + chargebeam: ["7M", "6M"], + confide: ["7M", "6M"], + confusion: ["7L1", "6L1"], + covet: ["6T"], + darkpulse: ["7M", "6L55"], + destinybond: ["7L1", "6L1"], + doubleteam: ["7M", "6M"], + drainpunch: ["6T"], + dreameater: ["7M", "6M"], + dualchop: ["6T"], + embargo: ["7M", "6M"], + energyball: ["7M", "6M"], + facade: ["7M", "6M"], + firepunch: ["6T"], + flash: ["6M"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + focuspunch: ["6T"], + foulplay: ["6T"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + grassknot: ["7M", "6M"], + gravity: ["6T"], + guardsplit: ["7L29", "6L29"], + gunkshot: ["6T"], + hiddenpower: ["7M", "6M"], + hyperbeam: ["7M", "6M"], + hyperspacefury: ["6L1"], + hyperspacehole: ["7L85", "7L1", "6L1", "6S0"], + icepunch: ["6T"], + knockoff: ["6T", "6L46"], + lastresort: ["6T"], + lightscreen: ["7M", "7L15", "6M", "6L15"], + magiccoat: ["7L10", "6T", "6L10"], + magicroom: ["6T"], + nastyplot: ["7L68", "6L68", "6S0"], + phantomforce: ["7L35", "6L35"], + powersplit: ["7L29", "6L29"], + poweruppunch: ["6M"], + protect: ["7M", "6M"], + psybeam: ["7L19", "6L15"], + psychic: ["7M", "7L75", "6M", "6L75", "6S0"], + psychup: ["7M", "6M"], + psyshock: ["7M", "6M"], + quash: ["7M", "6M"], + raindance: ["7M", "6M"], + recycle: ["6T"], + reflect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roleplay: ["6T"], + round: ["7M", "6M"], + safeguard: ["7M", "6M"], + secretpower: ["6M"], + shadowball: ["7M", "7L55", "6M", "6L55"], + shockwave: ["6T"], + signalbeam: ["6T"], + skillswap: ["7L25", "6T", "6L25"], + sleeptalk: ["7M", "6M"], + snatch: ["6T"], + snore: ["6T"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + swagger: ["7M", "6M"], + taunt: ["7M", "6M"], + thief: ["7M", "6M"], + thunderbolt: ["7M", "6M"], + thunderpunch: ["6T"], + thunderwave: ["7M", "6M"], + torment: ["7M", "6M"], + toxic: ["7M", "6M"], + trick: ["7L1", "6T", "6L1"], + trickroom: ["7M", "7L50", "6M", "6L50"], + uproar: ["6T"], + wonderroom: ["7L50", "6T", "6L50"], + zenheadbutt: ["7L46", "6T", "6L46"], + }}, + volcanion: {learnset: { + bodyslam: ["7L46", "6L46"], + brickbreak: ["7M", "6M"], + bulldoze: ["7M", "6M"], + confide: ["7M", "6M"], + cut: ["6M"], + doubleteam: ["7M", "6M"], + earthpower: ["6T"], + earthquake: ["7M", "6M"], + explosion: ["7M", "7L76", "6M", "6L76", "6S1"], + facade: ["7M", "6M"], + fireblast: ["7M", "6M"], + flamecharge: ["7M", "7L15", "6M", "6L15"], + flamethrower: ["7M", "6M", "6S1"], + flareblitz: ["7L58", "7L1", "6L1"], + flashcannon: ["7M", "6M"], + fling: ["7M", "6M"], + focusblast: ["7M", "6M"], + frustration: ["7M", "6M"], + gigaimpact: ["7M", "6M"], + gyroball: ["7M", "6M"], + haze: ["7L11", "6L11"], + heatwave: ["6T"], + hiddenpower: ["7M", "6M"], + hydropump: ["7L50", "6L50", "6S0", "6S1"], + hyperbeam: ["7M", "6M"], + incinerate: ["6M"], + mist: ["7L8", "6L8", "6S0"], + overheat: ["7M", "7L65", "6M", "6L65", "6S0"], + protect: ["7M", "6M"], + rest: ["7M", "6M"], + return: ["7M", "6M"], + roar: ["7M", "6M"], + rockslide: ["7M", "6M"], + rocksmash: ["6M"], + round: ["7M", "6M"], + sandstorm: ["7M", "6M"], + scald: ["7M", "7L32", "6M", "6L32"], + secretpower: ["6M"], + sleeptalk: ["7M", "6M"], + sludgebomb: ["7M", "6M"], + sludgewave: ["7M", "6M"], + smackdown: ["7M", "6M"], + snore: ["6T"], + solarbeam: ["7M", "6M"], + steameruption: ["7L85", "7L1", "6L1", "6S0", "6S1"], + stomp: ["7L28", "6L28"], + stoneedge: ["7M", "6M"], + strength: ["6M"], + substitute: ["7M", "6M"], + sunnyday: ["7M", "6M"], + superpower: ["6T"], + swagger: ["7M", "6M"], + takedown: ["7L1", "6L1"], + toxic: ["7M", "6M"], + waterpulse: ["7L21", "6T", "6L21"], + weatherball: ["7L40", "6L40"], + willowisp: ["7M", "6M"], + }}, + rowlet: {learnset: { + astonish: ["7L11"], + attract: ["7M"], + batonpass: ["7E"], + bravebird: ["7L43"], + confide: ["7M"], + confuseray: ["7E"], + curse: ["7E"], + defog: ["7E"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + featherdance: ["7L39"], + foresight: ["7L18"], + frustration: ["7M"], + furyattack: ["7L29"], + grassknot: ["7M"], + grasspledge: ["7T"], + growl: ["7L4"], + haze: ["7E"], + hiddenpower: ["7M"], + leafage: ["7L1"], + leafblade: ["7L36"], + lightscreen: ["7M"], + nastyplot: ["7L46"], + naturepower: ["7M"], + ominouswind: ["7E"], + peck: ["7L8"], + pluck: ["7L22"], + protect: ["7M"], + razorleaf: ["7L15"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L32"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7L25"], + tackle: ["7L1"], + toxic: ["7M"], + workup: ["7M"], + }}, + dartrix: {learnset: { + astonish: ["7L11"], + attract: ["7M"], + bravebird: ["7L51"], + confide: ["7M"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + featherdance: ["7L46"], + foresight: ["7L19"], + frustration: ["7M"], + furyattack: ["7L33"], + grassknot: ["7M"], + grasspledge: ["7T"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + leafage: ["7L1"], + leafblade: ["7L42"], + lightscreen: ["7M"], + nastyplot: ["7L55"], + naturepower: ["7M"], + peck: ["7L8", "7L1"], + pluck: ["7L24"], + protect: ["7M"], + razorleaf: ["7L15"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L37"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7L28"], + tackle: ["7L1"], + toxic: ["7M"], + workup: ["7M"], + }}, + decidueye: {learnset: { + acrobatics: ["7M"], + astonish: ["7L11"], + attract: ["7M"], + bravebird: ["7L55"], + confide: ["7M"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + featherdance: ["7L49"], + foresight: ["7L19"], + frenzyplant: ["7T"], + frustration: ["7M"], + furyattack: ["7L33"], + gigaimpact: ["7M"], + grassknot: ["7M"], + grasspledge: ["7T"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + leafage: ["7L1"], + leafblade: ["7L44"], + lightscreen: ["7M"], + lowsweep: ["7M"], + nastyplot: ["7L60"], + naturepower: ["7M"], + peck: ["7L8", "7L1"], + pluck: ["7L24"], + protect: ["7M"], + razorleaf: ["7L15"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowball: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + smackdown: ["7M"], + solarbeam: ["7M"], + spiritshackle: ["7L1"], + steelwing: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L38"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synthesis: ["7L28"], + tackle: ["7L1"], + toxic: ["7M"], + uturn: ["7M", "7L1"], + workup: ["7M"], + }}, + litten: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + bite: ["7L22"], + bodyslam: ["7E"], + bulkup: ["7M"], + confide: ["7M"], + crunch: ["7E"], + doubleteam: ["7M"], + ember: ["7L1"], + facade: ["7M"], + fakeout: ["7E"], + fireblast: ["7M"], + firefang: ["7L15"], + firepledge: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L36"], + flareblitz: ["7L43"], + frustration: ["7M"], + furyswipes: ["7L29"], + growl: ["7L4"], + heatwave: ["7E"], + hiddenpower: ["7M"], + leechlife: ["7M"], + leer: ["7L11"], + lick: ["7L8"], + nastyplot: ["7E"], + outrage: ["7L46"], + overheat: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + revenge: ["7E"], + roar: ["7M", "7L18"], + round: ["7M"], + scaryface: ["7L39"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M", "7L25"], + swordsdance: ["7M"], + taunt: ["7M"], + thrash: ["7L32"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + }}, + torracat: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + bite: ["7L24"], + bulkup: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + ember: ["7L1"], + facade: ["7M"], + fireblast: ["7M"], + firefang: ["7L15"], + firepledge: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L42"], + flareblitz: ["7L51"], + frustration: ["7M"], + furyswipes: ["7L33"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + leechlife: ["7M"], + leer: ["7L11"], + lick: ["7L8", "7L1"], + outrage: ["7L55"], + overheat: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L19"], + round: ["7M"], + scaryface: ["7L46"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M", "7L28"], + swordsdance: ["7M"], + taunt: ["7M"], + thrash: ["7L37"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + }}, + incineroar: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + bite: ["7L24"], + blastburn: ["7T"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L1"], + bulldoze: ["7M"], + confide: ["7M"], + crosschop: ["7L66"], + darkestlariat: ["7L1"], + darkpulse: ["7M"], + doubleteam: ["7M"], + earthquake: ["7M"], + embargo: ["7M"], + ember: ["7L1"], + facade: ["7M"], + fireblast: ["7M"], + firefang: ["7L15"], + firepledge: ["7T"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L44"], + flareblitz: ["7L55"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + furyswipes: ["7L33"], + gigaimpact: ["7M"], + growl: ["7L4", "7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + leechlife: ["7M"], + leer: ["7L11"], + lick: ["7L8", "7L1"], + lowsweep: ["7M"], + outrage: ["7L60"], + overheat: ["7M"], + protect: ["7M"], + quash: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L19"], + round: ["7M"], + scaryface: ["7L49"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snarl: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M", "7L28"], + swordsdance: ["7M"], + taunt: ["7M"], + thrash: ["7L38"], + throatchop: ["7L1"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + }}, + popplio: {learnset: { + acrobatics: ["7M"], + amnesia: ["7E"], + aquajet: ["7L15"], + aquaring: ["7E"], + aromaticmist: ["7E"], + attract: ["7M"], + babydolleyes: ["7L11"], + blizzard: ["7M"], + bubblebeam: ["7L22"], + captivate: ["7L39"], + charm: ["7E"], + confide: ["7M"], + disarmingvoice: ["7L8"], + doubleslap: ["7L29"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + encore: ["7L18"], + facade: ["7M"], + frustration: ["7M"], + growl: ["7L4"], + hail: ["7M"], + hiddenpower: ["7M"], + hydropump: ["7L43"], + hypervoice: ["7L32"], + icebeam: ["7M"], + mistyterrain: ["7L46"], + moonblast: ["7L36"], + perishsong: ["7E"], + pound: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sing: ["7L25"], + sleeptalk: ["7M"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpledge: ["7T"], + wonderroom: ["7E"], + workup: ["7M"], + }}, + brionne: {learnset: { + acrobatics: ["7M"], + aquajet: ["7L15"], + attract: ["7M"], + babydolleyes: ["7L11"], + blizzard: ["7M"], + bubblebeam: ["7L24"], + captivate: ["7L46"], + confide: ["7M"], + disarmingvoice: ["7L8", "7L1"], + doubleslap: ["7L33"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + encore: ["7L19"], + facade: ["7M"], + frustration: ["7M"], + growl: ["7L4", "7L1"], + hail: ["7M"], + hiddenpower: ["7M"], + hydropump: ["7L51"], + hypervoice: ["7L37"], + icebeam: ["7M"], + mistyterrain: ["7L55"], + moonblast: ["7L42"], + pound: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sing: ["7L28"], + sleeptalk: ["7M"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpledge: ["7T"], + workup: ["7M"], + }}, + primarina: {learnset: { + acrobatics: ["7M"], + aquajet: ["7L15"], + attract: ["7M"], + babydolleyes: ["7L11"], + blizzard: ["7M"], + bubblebeam: ["7L24"], + captivate: ["7L49"], + confide: ["7M"], + dazzlinggleam: ["7M"], + disarmingvoice: ["7L9", "7L1"], + doubleslap: ["7L33"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + encore: ["7L19"], + energyball: ["7M"], + facade: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + growl: ["7L4", "7L1"], + hail: ["7M"], + hiddenpower: ["7M"], + hydrocannon: ["7T"], + hydropump: ["7L55"], + hypervoice: ["7L38"], + icebeam: ["7M"], + lightscreen: ["7M"], + mistyterrain: ["7L60"], + moonblast: ["7L44"], + pound: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + shadowball: ["7M"], + sing: ["7L28"], + sleeptalk: ["7M"], + sparklingaria: ["7L1"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpledge: ["7T"], + workup: ["7M"], + }}, + pikipek: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + boomburst: ["7E"], + bravebird: ["7E"], + brickbreak: ["7M"], + bulletseed: ["7L31"], + confide: ["7M"], + doubleteam: ["7M"], + drillpeck: ["7L27"], + echoedvoice: ["7M", "7L7"], + featherdance: ["7L33"], + flamecharge: ["7M"], + fly: ["7M"], + frustration: ["7M"], + furyattack: ["7L21"], + growl: ["7L3"], + hiddenpower: ["7M"], + hypervoice: ["7L37"], + mirrormove: ["7E"], + peck: ["7L1"], + pluck: ["7L15"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rocksmash: ["7L9"], + roost: ["7M", "7L19"], + round: ["7M"], + screech: ["7L25"], + sleeptalk: ["7M"], + smackdown: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + supersonic: ["7L13"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwind: ["7E"], + thief: ["7M"], + toxic: ["7M"], + uproar: ["7E"], + uturn: ["7M"], + workup: ["7M"], + }}, + trumbeak: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + brickbreak: ["7M"], + bulletseed: ["7L37"], + confide: ["7M"], + doubleteam: ["7M"], + drillpeck: ["7L32"], + echoedvoice: ["7M", "7L7", "7L1"], + featherdance: ["7L40"], + flamecharge: ["7M"], + fly: ["7M"], + frustration: ["7M"], + furyattack: ["7L24"], + growl: ["7L3", "7L1"], + hiddenpower: ["7M"], + hypervoice: ["7L45"], + peck: ["7L1"], + pluck: ["7L16"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L1"], + rocksmash: ["7L9", "7L1"], + roost: ["7M", "7L21"], + round: ["7M"], + screech: ["7L29"], + sleeptalk: ["7M"], + smackdown: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + supersonic: ["7L13"], + swagger: ["7M"], + swordsdance: ["7M"], + thief: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + }}, + toucannon: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + beakblast: ["7L1"], + brickbreak: ["7M"], + bulletseed: ["7L40"], + confide: ["7M"], + doubleteam: ["7M"], + drillpeck: ["7L34"], + echoedvoice: ["7M", "7L7", "7L1"], + featherdance: ["7L44"], + flamecharge: ["7M"], + flashcannon: ["7M"], + fly: ["7M"], + frustration: ["7M"], + furyattack: ["7L24"], + growl: ["7L3", "7L1"], + hiddenpower: ["7M"], + hypervoice: ["7L50"], + overheat: ["7M"], + peck: ["7L1"], + pluck: ["7L16"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L1"], + rocksmash: ["7L9", "7L1"], + roost: ["7M", "7L21"], + round: ["7M"], + screech: ["7L30"], + sleeptalk: ["7M"], + smackdown: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + supersonic: ["7L13"], + swagger: ["7M"], + swordsdance: ["7M"], + thief: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + }}, + yungoos: {learnset: { + attract: ["7M"], + bide: ["7L16"], + bite: ["7L19"], + confide: ["7M"], + crunch: ["7L34"], + doubleteam: ["7M"], + earthquake: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + hyperfang: ["7L37"], + lastresort: ["7E"], + leer: ["7L3"], + mudslap: ["7L22"], + odorsleuth: ["7L13"], + payback: ["7M"], + protect: ["7M"], + pursuit: ["7L7"], + rest: ["7M", "7L46"], + return: ["7M"], + revenge: ["7E"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L10"], + sandstorm: ["7M"], + scaryface: ["7L31"], + sleeptalk: ["7M"], + substitute: ["7M"], + superfang: ["7L25"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L28"], + taunt: ["7M"], + thief: ["7M"], + thrash: ["7L43"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + yawn: ["7L40"], + }}, + gumshoos: {learnset: { + attract: ["7M"], + bide: ["7L16"], + bite: ["7L19"], + bulldoze: ["7M"], + confide: ["7M"], + crunch: ["7L39"], + doubleteam: ["7M"], + earthquake: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + fling: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + hyperfang: ["7L43"], + leer: ["7L3", "7L1"], + mudslap: ["7L23"], + odorsleuth: ["7L13"], + payback: ["7M"], + protect: ["7M"], + pursuit: ["7L7", "7L1"], + rest: ["7M", "7L55"], + return: ["7M"], + roar: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L10", "7L1"], + sandstorm: ["7M"], + scaryface: ["7L35"], + sleeptalk: ["7M"], + substitute: ["7M"], + superfang: ["7L27"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L31"], + taunt: ["7M"], + thief: ["7M"], + thrash: ["7L51"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + yawn: ["7L47"], + }}, + grubbin: {learnset: { + acrobatics: ["7M", "7L19"], + attract: ["7M"], + bite: ["7L10"], + bugbite: ["7L13"], + chargebeam: ["7M"], + confide: ["7M"], + crunch: ["7L22"], + dig: ["7L28"], + doubleteam: ["7M"], + electroweb: ["7E"], + endure: ["7E"], + facade: ["7M"], + frustration: ["7M"], + harden: ["7E"], + hiddenpower: ["7M"], + lightscreen: ["7M"], + mudshot: ["7E"], + mudslap: ["7L7"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sleeptalk: ["7M"], + spark: ["7L16"], + stringshot: ["7L4"], + substitute: ["7M"], + swagger: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M", "7L25"], + }}, + charjabug: {learnset: { + acrobatics: ["7M", "7L19"], + attract: ["7M"], + bite: ["7L10", "7L1"], + bugbite: ["7L13"], + charge: ["7L1"], + chargebeam: ["7M"], + confide: ["7M"], + crunch: ["7L25"], + dig: ["7L37"], + discharge: ["7L43"], + doubleteam: ["7M"], + facade: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + irondefense: ["7L49"], + lightscreen: ["7M"], + mudslap: ["7L7", "7L1"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sleeptalk: ["7M"], + spark: ["7L16"], + stringshot: ["7L4", "7L1"], + substitute: ["7M"], + swagger: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M", "7L31"], + }}, + vikavolt: {learnset: { + acrobatics: ["7M", "7L19"], + agility: ["7L49"], + airslash: ["7L1"], + attract: ["7M"], + bite: ["7L10", "7L1"], + bugbite: ["7L13"], + bugbuzz: ["7L31"], + charge: ["7L1"], + chargebeam: ["7M"], + confide: ["7M"], + dig: ["7L37"], + doubleteam: ["7M"], + energyball: ["7M"], + facade: ["7M"], + flashcannon: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + guillotine: ["7L25"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M"], + mudslap: ["7L7", "7L1"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + skydrop: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + spark: ["7L16"], + stringshot: ["7L4", "7L1"], + substitute: ["7M"], + swagger: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M", "7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + vicegrip: ["7L1"], + voltswitch: ["7M"], + wildcharge: ["7M"], + xscissor: ["7M"], + zapcannon: ["7L41"], + }}, + crabrawler: {learnset: { + amnesia: ["7E"], + attract: ["7M"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L17"], + bulkup: ["7M"], + bulldoze: ["7M"], + closecombat: ["7L49"], + confide: ["7M"], + crabhammer: ["7L37"], + dizzypunch: ["7L25"], + doubleteam: ["7M"], + dynamicpunch: ["7L45"], + earthquake: ["7M"], + endeavor: ["7E"], + facade: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + irondefense: ["7L42"], + leer: ["7L9"], + payback: ["7M", "7L29"], + poweruppunch: ["7L22"], + protect: ["7M"], + pursuit: ["7L13"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L33"], + rockslide: ["7M"], + rocksmash: ["7L5"], + rocktomb: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + superpower: ["7E"], + swagger: ["7M"], + thief: ["7M"], + toxic: ["7M"], + wideguard: ["7E"], + workup: ["7M"], + }}, + crabominable: {learnset: { + attract: ["7M"], + avalanche: ["7L29"], + blizzard: ["7M"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L17"], + bulkup: ["7M"], + bulldoze: ["7M"], + closecombat: ["7L49"], + confide: ["7M"], + dizzypunch: ["7L25"], + doubleteam: ["7M"], + dynamicpunch: ["7L45"], + earthquake: ["7M"], + facade: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hail: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icehammer: ["7L37"], + icepunch: ["7L1"], + irondefense: ["7L42"], + leer: ["7L9", "7L1"], + payback: ["7M"], + poweruppunch: ["7L22"], + protect: ["7M"], + pursuit: ["7L13", "7L1"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L33"], + rockslide: ["7M"], + rocksmash: ["7L5", "7L1"], + rocktomb: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + thief: ["7M"], + toxic: ["7M"], + workup: ["7M"], + }}, + oricorio: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + agility: ["7L46"], + aircutter: ["7L13"], + airslash: ["7L36"], + attract: ["7M"], + batonpass: ["7L16"], + calmmind: ["7M"], + captivate: ["7L33", "7E"], + confide: ["7M"], + doubleslap: ["7L23"], + doubleteam: ["7M"], + embargo: ["7M"], + facade: ["7M"], + featherdance: ["7L20"], + fly: ["7M"], + frustration: ["7M"], + growl: ["7L4"], + helpinghand: ["7L10"], + hiddenpower: ["7M"], + hurricane: ["7L50"], + mirrormove: ["7L43"], + peck: ["7L6"], + pluck: ["7E"], + pound: ["7L1"], + protect: ["7M"], + quash: ["7M"], + rest: ["7M"], + return: ["7M"], + revelationdance: ["7L40"], + roost: ["7M", "7L30"], + round: ["7M"], + safeguard: ["7M", "7E"], + sandstorm: ["7M"], + sleeptalk: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tailwind: ["7E"], + taunt: ["7M"], + teeterdance: ["7L26"], + toxic: ["7M"], + uturn: ["7M"], + workup: ["7M"], + }}, + cutiefly: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M"], + aerialace: ["7M"], + aromatherapy: ["7L36"], + attract: ["7M"], + batonpass: ["7E"], + bestow: ["7E"], + bugbuzz: ["7L26"], + calmmind: ["7M"], + confide: ["7M"], + dazzlinggleam: ["7M", "7L31"], + doubleteam: ["7M"], + drainingkiss: ["7L16"], + dreameater: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fairywind: ["7L4"], + frustration: ["7M"], + hiddenpower: ["7M"], + infestation: ["7M"], + leechlife: ["7M"], + lightscreen: ["7M"], + moonblast: ["7E"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + quiverdance: ["7L41"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + silverwind: ["7L13"], + skillswap: ["7E"], + sleeptalk: ["7M"], + speedswap: ["7E"], + strugglebug: ["7L10"], + stunspore: ["7L7"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L21"], + thief: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + ribombee: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M"], + aerialace: ["7M"], + aromatherapy: ["7L42"], + attract: ["7M"], + bugbuzz: ["7L28"], + calmmind: ["7M"], + confide: ["7M"], + dazzlinggleam: ["7M", "7L35"], + doubleteam: ["7M"], + drainingkiss: ["7L16"], + dreameater: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fairywind: ["7L4", "7L1"], + frustration: ["7M"], + hiddenpower: ["7M"], + infestation: ["7M"], + leechlife: ["7M"], + lightscreen: ["7M"], + naturepower: ["7M"], + pollenpuff: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + quiverdance: ["7L49"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + silverwind: ["7L13"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + strugglebug: ["7L10", "7L1"], + stunspore: ["7L7", "7L1"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L21"], + thief: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + }}, + rockruff: {learnset: { + attract: ["7M"], + bite: ["7L7"], + confide: ["7M"], + crunch: ["7L40"], + crushclaw: ["7E"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + firefang: ["7E"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + leer: ["7L1"], + odorsleuth: ["7L18"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + stealthrock: ["7L29"], + stoneedge: ["7M", "7L48"], + substitute: ["7M"], + suckerpunch: ["7E"], + swagger: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + thrash: ["7E"], + thunderfang: ["7E"], + toxic: ["7M"], + }}, + lycanroc: {learnset: { + accelerock: ["7L1"], + attract: ["7M"], + bite: ["7L7", "7L1"], + brickbreak: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + crunch: ["7L40"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + leer: ["7L1"], + odorsleuth: ["7L18"], + protect: ["7M"], + quickattack: ["7L1"], + quickguard: ["7L1"], + rest: ["7M"], + return: ["7M"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4", "7L1"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + stealthrock: ["7L29"], + stoneedge: ["7M", "7L48"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + }}, + lycanrocmidnight: {learnset: { + attract: ["7M"], + bite: ["7L7", "7L1"], + brickbreak: ["7M"], + bulkup: ["7M"], + confide: ["7M"], + counter: ["7L1"], + crunch: ["7L40"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + firefang: ["7S0"], + frustration: ["7M"], + hiddenpower: ["7M"], + howl: ["7L12"], + leer: ["7L1"], + odorsleuth: ["7L18"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L1"], + roar: ["7M", "7L26"], + rockclimb: ["7L45"], + rockpolish: ["7M"], + rockslide: ["7M", "7L34"], + rockthrow: ["7L15"], + rocktomb: ["7M", "7L23"], + round: ["7M"], + sandattack: ["7L4", "7L1"], + scaryface: ["7L37"], + sleeptalk: ["7M"], + snarl: ["7M"], + stealthrock: ["7L29"], + stoneedge: ["7M", "7L48", "7S0"], + substitute: ["7M"], + suckerpunch: ["7S0"], + swagger: ["7M"], + swordsdance: ["7M", "7S0"], + tackle: ["7L1"], + taunt: ["7M", "7L1"], + toxic: ["7M"], + }}, + wishiwashi: {learnset: { + aquaring: ["7L17"], + aquatail: ["7L38"], + attract: ["7M"], + beatup: ["7L33"], + brine: ["7L14"], + bulldoze: ["7M"], + confide: ["7M"], + dive: ["7L30"], + doubleedge: ["7L41"], + doubleteam: ["7M"], + earthquake: ["7M"], + endeavor: ["7L49"], + facade: ["7M"], + feintattack: ["7L9"], + frustration: ["7M"], + growl: ["7L1"], + hail: ["7M"], + helpinghand: ["7L6"], + hiddenpower: ["7M"], + hydropump: ["7L54"], + icebeam: ["7M"], + mist: ["7E"], + muddywater: ["7E"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + soak: ["7L46"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + takedown: ["7L25"], + tearfullook: ["7L22"], + toxic: ["7M"], + uturn: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpulse: ["7E"], + watersport: ["7E"], + }}, + mareanie: {learnset: { + attract: ["7M"], + bite: ["7L9"], + blizzard: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + hail: ["7M"], + haze: ["7E"], + hiddenpower: ["7M"], + icebeam: ["7M"], + infestation: ["7M"], + liquidation: ["7L49"], + payback: ["7M"], + peck: ["7L5"], + pinmissile: ["7L45"], + poisonjab: ["7M", "7L37"], + poisonsting: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + recover: ["7L33"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + spikecannon: ["7L29"], + spitup: ["7E"], + stockpile: ["7E", "7S0"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + swallow: ["7E", "7S0"], + toxic: ["7M", "7L21", "7S0"], + toxicspikes: ["7L13"], + venomdrench: ["7L41"], + venoshock: ["7M", "7L25"], + wideguard: ["7L17"], + }}, + toxapex: {learnset: { + attract: ["7M"], + banefulbunker: ["7L1"], + bite: ["7L9", "7L1"], + blizzard: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + hail: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + infestation: ["7M"], + lightscreen: ["7M"], + liquidation: ["7L58"], + payback: ["7M"], + peck: ["7L5", "7L1"], + pinmissile: ["7L51"], + poisonjab: ["7M", "7L37"], + poisonsting: ["7L1"], + protect: ["7M"], + raindance: ["7M"], + recover: ["7L33"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smackdown: ["7M"], + spikecannon: ["7L29"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M", "7L21"], + toxicspikes: ["7L13", "7L1"], + venomdrench: ["7L44"], + venoshock: ["7M", "7L25"], + wideguard: ["7L17"], + }}, + mudbray: {learnset: { + attract: ["7M"], + bide: ["7L22"], + bodyslam: ["7E"], + bulldoze: ["7M", "7L10"], + closecombat: ["7E"], + confide: ["7M"], + counter: ["7L36"], + doubleedge: ["7E"], + doublekick: ["7L15"], + doubleteam: ["7M"], + earthquake: ["7M", "7L38"], + facade: ["7M"], + frustration: ["7M"], + heavyslam: ["7L31"], + hiddenpower: ["7M"], + highhorsepower: ["7L24"], + irondefense: ["7L29"], + lowsweep: ["7M"], + magnitude: ["7E"], + megakick: ["7L43"], + mudbomb: ["7E"], + mudslap: ["7L1"], + mudsport: ["7L3"], + payback: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L8"], + round: ["7M"], + sandstorm: ["7M"], + sleeptalk: ["7M"], + stomp: ["7L17"], + substitute: ["7M"], + superpower: ["7L45"], + swagger: ["7M"], + toxic: ["7M"], + }}, + mudsdale: {learnset: { + attract: ["7M"], + bide: ["7L22"], + bulldoze: ["7M", "7L10", "7L1"], + confide: ["7M"], + counter: ["7L42"], + doublekick: ["7L15"], + doubleteam: ["7M"], + earthquake: ["7M", "7L47"], + facade: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + heavyslam: ["7L34"], + hiddenpower: ["7M"], + highhorsepower: ["7L24"], + irondefense: ["7L29"], + lowsweep: ["7M"], + megakick: ["7L55"], + mudslap: ["7L1"], + mudsport: ["7L3", "7L1"], + payback: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L8", "7L1"], + round: ["7M"], + sandstorm: ["7M"], + sleeptalk: ["7M"], + stomp: ["7L17"], + substitute: ["7M"], + superpower: ["7L60"], + swagger: ["7M"], + toxic: ["7M"], + }}, + dewpider: {learnset: { + aquaring: ["7L24"], + attract: ["7M"], + aurorabeam: ["7E"], + bite: ["7L21"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L16"], + bugbite: ["7L13"], + confide: ["7M"], + crunch: ["7L32"], + doubleteam: ["7M"], + entrainment: ["7L48"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + infestation: ["7M", "7L5"], + leechlife: ["7M", "7L29"], + liquidation: ["7L45"], + lunge: ["7L37"], + mirrorcoat: ["7L40"], + poisonjab: ["7M"], + powersplit: ["7E"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + spiderweb: ["7L8"], + spitup: ["7E"], + stockpile: ["7E"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watersport: ["7L1"], + xscissor: ["7M"], + }}, + araquanid: {learnset: { + aquaring: ["7L26"], + attract: ["7M"], + bite: ["7L21"], + blizzard: ["7M"], + bubble: ["7L1"], + bubblebeam: ["7L16"], + bugbite: ["7L13", "7L1"], + confide: ["7M"], + crunch: ["7L38"], + doubleteam: ["7M"], + entrainment: ["7L62"], + facade: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + infestation: ["7M", "7L5", "7L1"], + leechlife: ["7M", "7L33"], + liquidation: ["7L57"], + lunge: ["7L45"], + mirrorcoat: ["7L50"], + poisonjab: ["7M"], + protect: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + sleeptalk: ["7M"], + soak: ["7L1"], + spiderweb: ["7L8", "7L1"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + wideguard: ["7L1"], + xscissor: ["7M"], + }}, + fomantis: {learnset: { + aromatherapy: ["7E"], + attract: ["7M"], + confide: ["7M"], + defog: ["7E"], + doubleteam: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + frustration: ["7M"], + furycutter: ["7L1"], + gigadrain: ["7E"], + grassknot: ["7M"], + growth: ["7L14"], + hiddenpower: ["7M"], + ingrain: ["7L19"], + leafage: ["7L5"], + leafblade: ["7L23"], + leafstorm: ["7E"], + leechlife: ["7M"], + naturepower: ["7M"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + razorleaf: ["7L10"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + slash: ["7L32"], + sleeptalk: ["7M"], + solarbeam: ["7M", "7L41"], + substitute: ["7M"], + sunnyday: ["7M", "7L46"], + swagger: ["7M"], + sweetscent: ["7L37"], + swordsdance: ["7M"], + synthesis: ["7L28"], + toxic: ["7M"], + weatherball: ["7E"], + xscissor: ["7M"], + }}, + lurantis: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + brickbreak: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + frustration: ["7M"], + furycutter: ["7L1"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growth: ["7L14", "7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ingrain: ["7L19"], + leafage: ["7L5", "7L1"], + leafblade: ["7L23"], + leechlife: ["7M"], + lowsweep: ["7M"], + naturepower: ["7M"], + payback: ["7M"], + petalblizzard: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + razorleaf: ["7L10", "7L1"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + slash: ["7L32"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + solarblade: ["7L47"], + substitute: ["7M"], + sunnyday: ["7M", "7L55"], + swagger: ["7M"], + sweetscent: ["7L40"], + swordsdance: ["7M"], + synthesis: ["7L28"], + toxic: ["7M"], + xscissor: ["7M", "7L1"], + }}, + morelull: {learnset: { + absorb: ["7L1"], + amnesia: ["7E"], + astonish: ["7L4"], + attract: ["7M"], + confide: ["7M"], + confuseray: ["7L25"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M", "7L43"], + energyball: ["7M"], + flash: ["7L8"], + frustration: ["7M"], + gigadrain: ["7L29"], + grassknot: ["7M"], + growth: ["7E"], + hiddenpower: ["7M"], + ingrain: ["7L22"], + leechseed: ["7E"], + lightscreen: ["7M"], + megadrain: ["7L15"], + moonblast: ["7L39"], + moonlight: ["7L11"], + naturepower: ["7M"], + poisonpowder: ["7E"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeppowder: ["7L18"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + spore: ["7L36"], + spotlight: ["7L46"], + strengthsap: ["7L32"], + stunspore: ["7E"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + shiinotic: {learnset: { + absorb: ["7L1"], + astonish: ["7L4", "7L1"], + attract: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + confuseray: ["7L26"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M", "7L49"], + energyball: ["7M"], + flash: ["7L8", "7L1"], + frustration: ["7M"], + gigadrain: ["7L31"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + ingrain: ["7L22", "7L1"], + lightscreen: ["7M"], + megadrain: ["7L15"], + moonblast: ["7L44"], + moonlight: ["7L11"], + naturepower: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeppowder: ["7L18"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + solarbeam: ["7M"], + spore: ["7L40"], + spotlight: ["7L53"], + strengthsap: ["7L35"], + substitute: ["7M"], + swagger: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + }}, + salandit: {learnset: { + attract: ["7M"], + belch: ["7E"], + confide: ["7M"], + doubleslap: ["7L21"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + dragonpulse: ["7L48"], + dragonrage: ["7L13"], + ember: ["7L5"], + facade: ["7M"], + fakeout: ["7E"], + fireblast: ["7M"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L40"], + fling: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + knockoff: ["7E"], + leechlife: ["7M"], + nastyplot: ["7L32"], + overheat: ["7M"], + payback: ["7M"], + poisongas: ["7L1"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sandattack: ["7E"], + scratch: ["7L1"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smog: ["7L16"], + snatch: ["7E"], + substitute: ["7M"], + swagger: ["7M"], + sweetscent: ["7L8"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M"], + toxic: ["7M", "7L29"], + venomdrench: ["7L45"], + venoshock: ["7M", "7L37"], + willowisp: ["7M"], + }}, + salazzle: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + captivate: ["7L1"], + confide: ["7M"], + disable: ["7L1"], + doubleslap: ["7L21"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + dragonpulse: ["7L56"], + dragonrage: ["7L13"], + dragontail: ["7M"], + ember: ["7L5", "7L1"], + encore: ["7L1"], + facade: ["7M"], + fakeout: ["7S0"], + fireblast: ["7M"], + flameburst: ["7L24"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L44", "7S0"], + fling: ["7M"], + frustration: ["7M"], + hiddenpower: ["7M"], + leechlife: ["7M"], + nastyplot: ["7L32"], + overheat: ["7M"], + payback: ["7M"], + poisongas: ["7L1"], + poisonjab: ["7M"], + pound: ["7L1"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M", "7S0"], + sludgewave: ["7M"], + smog: ["7L16"], + substitute: ["7M"], + swagger: ["7M", "7L1"], + sweetscent: ["7L8", "7L1"], + taunt: ["7M"], + thief: ["7M"], + torment: ["7M", "7L1"], + toxic: ["7M", "7L29", "7S0"], + venomdrench: ["7L51"], + venoshock: ["7M", "7L39"], + willowisp: ["7M"], + }}, + stufful: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + babydolleyes: ["7L10"], + bide: ["7L5"], + brickbreak: ["7M"], + brutalswing: ["7M", "7L14"], + bulkup: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleedge: ["7L46"], + doubleteam: ["7M"], + earthquake: ["7M"], + endure: ["7E"], + facade: ["7M"], + flail: ["7L19"], + fling: ["7M"], + focusblast: ["7M"], + forcepalm: ["7E"], + frustration: ["7M"], + hammerarm: ["7L32"], + hiddenpower: ["7M"], + icepunch: ["7E"], + leer: ["7L1"], + lowsweep: ["7M"], + megakick: ["7E"], + painsplit: ["7L41"], + payback: ["7M", "7L23"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sleeptalk: ["7M"], + stompingtantrum: ["7E"], + substitute: ["7M"], + superpower: ["7L50"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L28"], + taunt: ["7M"], + thrash: ["7L37"], + thunderpunch: ["7E"], + toxic: ["7M"], + wideguard: ["7E"], + workup: ["7M"], + }}, + bewear: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + babydolleyes: ["7L10", "7S0"], + bide: ["7L5"], + bind: ["7L1", "7S0"], + brickbreak: ["7M"], + brutalswing: ["7M", "7L14", "7S0"], + bulkup: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleedge: ["7L56"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + flail: ["7L19"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hammerarm: ["7L36"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + leer: ["7L1"], + lowsweep: ["7M"], + painsplit: ["7L49"], + payback: ["7M", "7L23"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + substitute: ["7M"], + superpower: ["7L62", "7S0"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L30"], + taunt: ["7M"], + thrash: ["7L43"], + toxic: ["7M"], + workup: ["7M"], + }}, + bounsweet: {learnset: { + acupressure: ["7E"], + aromaticmist: ["7L33"], + attract: ["7M"], + charm: ["7E"], + confide: ["7M"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + energyball: ["7M"], + facade: ["7M"], + feint: ["7E"], + flail: ["7L29"], + frustration: ["7M"], + grassknot: ["7M"], + grasswhistle: ["7E"], + hiddenpower: ["7M"], + lightscreen: ["7M"], + magicalleaf: ["7L21"], + naturepower: ["7M"], + playnice: ["7L5"], + playrough: ["7E"], + protect: ["7M"], + rapidspin: ["7L9"], + razorleaf: ["7L13"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + splash: ["7L1"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L17"], + synthesis: ["7E"], + teeterdance: ["7L25"], + toxic: ["7M"], + }}, + steenee: {learnset: { + aromatherapy: ["7L41"], + aromaticmist: ["7L33"], + attract: ["7M"], + captivate: ["7L37"], + confide: ["7M"], + dazzlinggleam: ["7M"], + doubleslap: ["7L1", "7S0"], + doubleteam: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fling: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + leafstorm: ["7L45"], + lightscreen: ["7M"], + lowsweep: ["7M"], + magicalleaf: ["7L21", "7S0"], + naturepower: ["7M"], + payback: ["7M"], + playnice: ["7L5", "7L1"], + protect: ["7M"], + rapidspin: ["7L9", "7L1"], + razorleaf: ["7L13", "7L1"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + splash: ["7L1"], + stomp: ["7L29"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L17", "7S0"], + teeterdance: ["7L25"], + toxic: ["7M"], + }}, + tsareena: {learnset: { + acrobatics: ["7M"], + aromatherapy: ["7L41"], + aromaticmist: ["7L33"], + attract: ["7M"], + captivate: ["7L37"], + confide: ["7M"], + dazzlinggleam: ["7M"], + doubleslap: ["7L1"], + doubleteam: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + highjumpkick: ["7L49"], + leafstorm: ["7L45"], + lightscreen: ["7M"], + lowsweep: ["7M"], + magicalleaf: ["7L21"], + naturepower: ["7M"], + payback: ["7M"], + protect: ["7M"], + rapidspin: ["7L9", "7L1"], + razorleaf: ["7L13", "7L1"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + splash: ["7L1"], + stomp: ["7L29"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M", "7L5", "7L1"], + sweetscent: ["7L17"], + teeterdance: ["7L25"], + toxic: ["7M"], + tropkick: ["7L1"], + uturn: ["7M"], + }}, + comfey: {learnset: { + acrobatics: ["7M"], + afteryou: ["7E"], + amnesia: ["7E"], + aromatherapy: ["7L43"], + attract: ["7M"], + calmmind: ["7M"], + celebrate: ["7S0"], + confide: ["7M"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + drainingkiss: ["7L7", "7S0"], + echoedvoice: ["7M"], + endure: ["7E"], + energyball: ["7M"], + facade: ["7M"], + fling: ["7M"], + floralhealing: ["7L37"], + flowershield: ["7L1"], + frustration: ["7M"], + grassknot: ["7M", "7L34"], + grassyterrain: ["7L46"], + growth: ["7L13"], + helpinghand: ["7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + leechseed: ["7L4", "7S0"], + lightscreen: ["7M"], + luckychant: ["7E"], + magicalleaf: ["7L10", "7S0"], + naturalgift: ["7L22"], + naturepower: ["7M"], + petalblizzard: ["7L25"], + petaldance: ["7L40"], + playrough: ["7L49"], + protect: ["7M"], + psychup: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetkiss: ["7L19"], + sweetscent: ["7L31"], + synthesis: ["7L28"], + taunt: ["7M"], + thief: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + uturn: ["7M"], + vinewhip: ["7L1"], + wrap: ["7L16"], + }}, + oranguru: {learnset: { + afteryou: ["7L4"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M", "7L39"], + chargebeam: ["7M"], + confide: ["7M"], + confusion: ["7L1"], + doubleteam: ["7M"], + dreameater: ["7M"], + earthquake: ["7M"], + embargo: ["7M"], + energyball: ["7M"], + extrasensory: ["7E"], + facade: ["7M"], + feintattack: ["7L22"], + fling: ["7M"], + focusblast: ["7M"], + foulplay: ["7L36"], + frustration: ["7M"], + futuresight: ["7L46"], + gigaimpact: ["7M"], + hiddenpower: ["7M"], + instruct: ["7L32", "7S0"], + lightscreen: ["7M"], + nastyplot: ["7L25"], + naturepower: ["7M"], + payback: ["7M"], + protect: ["7M"], + psychic: ["7M", "7L43", "7S0"], + psychicterrain: ["7E", "7S0"], + psychup: ["7M", "7L18"], + psyshock: ["7M"], + quash: ["7M", "7L11"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowball: ["7M"], + sleeptalk: ["7M"], + storedpower: ["7L15"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + taunt: ["7M", "7L8"], + thunder: ["7M"], + thunderbolt: ["7M"], + toxic: ["7M"], + trickroom: ["7M", "7L50"], + wonderroom: ["7E"], + workup: ["7M"], + zenheadbutt: ["7L29"], + }}, + passimian: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + attract: ["7M"], + beatup: ["7L15"], + bestow: ["7L25", "7S0"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M", "7L32"], + bulldoze: ["7M"], + closecombat: ["7L43"], + confide: ["7M"], + doubleedge: ["7L36"], + doubleteam: ["7M"], + earthquake: ["7M"], + energyball: ["7M"], + facade: ["7M"], + feint: ["7E", "7S0"], + fling: ["7M", "7L39", "7S0"], + focusblast: ["7M"], + focusenergy: ["7L11"], + frustration: ["7M"], + gigaimpact: ["7M", "7L50"], + grassknot: ["7M"], + gyroball: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ironhead: ["7E"], + leer: ["7L4"], + lowsweep: ["7M"], + payback: ["7M"], + protect: ["7M"], + quickattack: ["7E"], + quickguard: ["7E"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L46"], + rockslide: ["7M"], + rocksmash: ["7L8"], + rocktomb: ["7M"], + round: ["7M"], + scaryface: ["7L18"], + seismictoss: ["7E"], + shadowball: ["7M"], + sleeptalk: ["7M"], + smackdown: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + takedown: ["7L22"], + taunt: ["7M"], + thief: ["7M"], + thrash: ["7L29"], + toxic: ["7M"], + uturn: ["7M"], + vitalthrow: ["7E"], + workup: ["7M"], + }}, + wimpod: {learnset: { + aquajet: ["7E"], + attract: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + facade: ["7M"], + frustration: ["7M"], + hail: ["7M"], + harden: ["7E"], + hiddenpower: ["7M"], + leechlife: ["7M"], + metalclaw: ["7E"], + protect: ["7M"], + raindance: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sandattack: ["7L1"], + scald: ["7M"], + sleeptalk: ["7M"], + spikes: ["7E"], + strugglebug: ["7L1"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + wideguard: ["7E"], + }}, + golisopod: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + blizzard: ["7M"], + brickbreak: ["7M"], + bugbite: ["7L10"], + bulkup: ["7M"], + confide: ["7M"], + darkpulse: ["7M"], + doubleteam: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + firstimpression: ["7L1"], + fling: ["7M"], + focusblast: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + furycutter: ["7L4", "7L1"], + gigaimpact: ["7M"], + hail: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + irondefense: ["7L36"], + leechlife: ["7M"], + liquidation: ["7L48"], + payback: ["7M"], + pinmissile: ["7L41"], + poisonjab: ["7M"], + protect: ["7M"], + psychup: ["7M"], + raindance: ["7M"], + razorshell: ["7L26"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + rocksmash: ["7L7", "7L1"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L1"], + scald: ["7M"], + shadowclaw: ["7M"], + slash: ["7L21"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + snarl: ["7M"], + spite: ["7L13"], + strugglebug: ["7L1"], + substitute: ["7M"], + suckerpunch: ["7L31"], + surf: ["7M"], + swagger: ["7M"], + swordsdance: ["7M", "7L16"], + taunt: ["7M"], + toxic: ["7M"], + venoshock: ["7M"], + waterfall: ["7M"], + xscissor: ["7M"], + }}, + sandygast: {learnset: { + absorb: ["7L1"], + amnesia: ["7E"], + ancientpower: ["7E"], + astonish: ["7L5"], + attract: ["7M"], + bulldoze: ["7M", "7L23"], + confide: ["7M"], + destinybond: ["7E"], + doubleteam: ["7M"], + earthpower: ["7L45"], + earthquake: ["7M"], + energyball: ["7M"], + facade: ["7M"], + frustration: ["7M"], + gigadrain: ["7L36"], + harden: ["7L1"], + hiddenpower: ["7M"], + hypnosis: ["7L27"], + infestation: ["7M"], + irondefense: ["7L32"], + megadrain: ["7L18"], + protect: ["7M"], + psychic: ["7M"], + rest: ["7M"], + return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L9"], + sandstorm: ["7M", "7L54"], + sandtomb: ["7L14"], + shadowball: ["7M", "7L41"], + shoreup: ["7L50"], + sleeptalk: ["7M"], + spitup: ["7E"], + stockpile: ["7E"], + stoneedge: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swallow: ["7E"], + toxic: ["7M"], + }}, + palossand: {learnset: { + absorb: ["7L1"], + astonish: ["7L5", "7L1"], + attract: ["7M"], + bulldoze: ["7M", "7L23"], + confide: ["7M"], + doubleteam: ["7M"], + earthpower: ["7L47"], + earthquake: ["7M"], + embargo: ["7M"], + energyball: ["7M"], + facade: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gigadrain: ["7L36"], + gigaimpact: ["7M"], + harden: ["7L1"], + hiddenpower: ["7M"], + hypnosis: ["7L27"], + infestation: ["7M"], + irondefense: ["7L32"], + megadrain: ["7L18"], + protect: ["7M"], + psychic: ["7M"], + quash: ["7M"], + rest: ["7M"], + return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + sandattack: ["7L9", "7L1"], + sandstorm: ["7M", "7L60"], + sandtomb: ["7L14"], + shadowball: ["7M", "7L41"], + shoreup: ["7L54"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + toxic: ["7M"], + }}, + pyukumuku: {learnset: { + attract: ["7M"], + batonpass: ["7L1"], + bestow: ["7E"], + bide: ["7L1"], + confide: ["7M"], + counter: ["7L17"], + curse: ["7L25"], + doubleteam: ["7M"], + endure: ["7E"], + gastroacid: ["7L29"], + hail: ["7M"], + harden: ["7L1"], + helpinghand: ["7L5"], + lightscreen: ["7M"], + memento: ["7L49"], + mudsport: ["7L1"], + painsplit: ["7L33"], + protect: ["7M"], + psychup: ["7M"], + purify: ["7L21"], + quash: ["7M"], + raindance: ["7M"], + recover: ["7L37"], + reflect: ["7M"], + rest: ["7M"], + safeguard: ["7M", "7L13"], + sleeptalk: ["7M"], + soak: ["7L41"], + substitute: ["7M"], + swagger: ["7M"], + taunt: ["7M", "7L9"], + tickle: ["7E"], + toxic: ["7M", "7L45"], + venomdrench: ["7E"], + watersport: ["7L1"], + }}, + typenull: {learnset: { + aerialace: ["7M", "7L20"], + airslash: ["7L60"], + confide: ["7M"], + crushclaw: ["7L25", "7S0"], + doubleedge: ["7L80"], + doublehit: ["7L55"], + doubleteam: ["7M"], + dragonclaw: ["7M"], + facade: ["7M"], + flamecharge: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hail: ["7M"], + healblock: ["7L85"], + hiddenpower: ["7M"], + imprison: ["7L15"], + ironhead: ["7L50"], + metalsound: ["7L45"], + payback: ["7M"], + protect: ["7M"], + punishment: ["7L65"], + pursuit: ["7L10"], + rage: ["7L5"], + raindance: ["7M"], + razorwind: ["7L70"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + round: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L30", "7S0"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L40", "7S0"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7L75"], + uturn: ["7M"], + workup: ["7M"], + xscissor: ["7M", "7L35", "7S0"], + }}, + silvally: {learnset: { + aerialace: ["7M", "7L20"], + airslash: ["7L60"], + bite: ["7L15"], + confide: ["7M"], + crunch: ["7L50"], + crushclaw: ["7L25"], + doubleedge: ["7L80"], + doublehit: ["7L55"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M"], + explosion: ["7M"], + facade: ["7M"], + firefang: ["7L1"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flashcannon: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hail: ["7M"], + healblock: ["7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + icefang: ["7L1"], + imprison: ["7L1"], + ironhead: ["7L1"], + metalsound: ["7L45"], + multiattack: ["7L1", "7S0"], + partingshot: ["7L85", "7S0"], + payback: ["7M"], + poisonfang: ["7L1"], + protect: ["7M"], + punishment: ["7L65", "7S0"], + pursuit: ["7L10"], + rage: ["7L5"], + raindance: ["7M"], + razorwind: ["7L70"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + round: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L30", "7S0"], + shadowball: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snarl: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + surf: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + takedown: ["7L40"], + thunderbolt: ["7M"], + thunderfang: ["7L1"], + thunderwave: ["7M"], + toxic: ["7M"], + triattack: ["7L75"], + uturn: ["7M"], + workup: ["7M"], + xscissor: ["7M", "7L35"], + }}, + minior: {learnset: { + acrobatics: ["7M"], + ancientpower: ["7L17"], + attract: ["7M"], + autotomize: ["7L31"], + bulldoze: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + confuseray: ["7L10"], + cosmicpower: ["7L36"], + dazzlinggleam: ["7M"], + defensecurl: ["7L3"], + doubleedge: ["7L43"], + doubleteam: ["7M"], + earthquake: ["7M"], + explosion: ["7M", "7L50"], + facade: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + gyroball: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M"], + powergem: ["7L38"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rollout: ["7L8"], + round: ["7M"], + safeguard: ["7M"], + sandstorm: ["7M"], + selfdestruct: ["7L22"], + shellsmash: ["7L45"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + stealthrock: ["7L24"], + stoneedge: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swift: ["7L15"], + tackle: ["7L1"], + takedown: ["7L29"], + toxic: ["7M"], + uturn: ["7M"], + }}, + komala: {learnset: { + acrobatics: ["7M"], + attract: ["7M"], + brickbreak: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M"], + charm: ["7E"], + confide: ["7M"], + defensecurl: ["7L1"], + doubleteam: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + flail: ["7L26"], + frustration: ["7M"], + hiddenpower: ["7M"], + lowsweep: ["7M"], + payback: ["7M"], + playrough: ["7E"], + protect: ["7M"], + psychup: ["7M", "7L36"], + quash: ["7M"], + rapidspin: ["7L11"], + return: ["7M"], + rockslide: ["7M"], + rollout: ["7L1"], + round: ["7M"], + shadowclaw: ["7M"], + sing: ["7E"], + slam: ["7L21"], + sleeptalk: ["7M"], + spitup: ["7L6"], + stockpile: ["7L6"], + substitute: ["7M"], + suckerpunch: ["7L31"], + sunnyday: ["7M"], + swagger: ["7M"], + swallow: ["7L6"], + swordsdance: ["7M"], + thrash: ["7L46"], + toxic: ["7M"], + uturn: ["7M"], + wish: ["7E"], + woodhammer: ["7L41"], + workup: ["7M"], + yawn: ["7L16"], + }}, + turtonator: {learnset: { + attract: ["7M"], + bodyslam: ["7L33", "7S0"], + brutalswing: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M"], + dragonpulse: ["7L41"], + dragontail: ["7M", "7S1"], + earthquake: ["7M"], + ember: ["7L1"], + endure: ["7L21"], + explosion: ["7M", "7L53"], + facade: ["7M"], + fireblast: ["7M"], + firespin: ["7E"], + flail: ["7L17"], + flamecharge: ["7M"], + flamethrower: ["7M", "7L29", "7S0", "7S1"], + flashcannon: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + headsmash: ["7E"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + incinerate: ["7L13"], + irondefense: ["7L25"], + overheat: ["7M", "7L49"], + payback: ["7M"], + protect: ["7M", "7L9"], + rest: ["7M"], + return: ["7M"], + revenge: ["7E"], + roar: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + shellsmash: ["7L37"], + shelltrap: ["7L45", "7S1"], + sleeptalk: ["7M"], + smackdown: ["7M"], + smog: ["7L5"], + solarbeam: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + venoshock: ["7M"], + wideguard: ["7E", "7S0"], + willowisp: ["7M"], + workup: ["7M"], + }}, + togedemaru: {learnset: { + attract: ["7M"], + charge: ["7L13"], + chargebeam: ["7M"], + confide: ["7M"], + defensecurl: ["7L5"], + disarmingvoice: ["7E"], + discharge: ["7L29"], + doubleteam: ["7M"], + electricterrain: ["7L37"], + encore: ["7E"], + facade: ["7M"], + fakeout: ["7E"], + fellstinger: ["7L53"], + flail: ["7E"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gyroball: ["7M"], + hiddenpower: ["7M"], + magnetrise: ["7L25"], + nuzzle: ["7L21"], + payback: ["7M"], + pinmissile: ["7L45"], + poisonjab: ["7M"], + present: ["7E"], + protect: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7E"], + rollout: ["7L9"], + round: ["7M"], + sleeptalk: ["7M"], + spark: ["7L17"], + spikyshield: ["7L49"], + substitute: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thundershock: ["7L1"], + thunderwave: ["7M"], + tickle: ["7E"], + toxic: ["7M"], + twineedle: ["7E"], + uturn: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M", "7L41"], + wish: ["7E"], + workup: ["7M"], + zingzap: ["7L33"], + }}, + mimikyu: {learnset: { + astonish: ["7L1", "7S0", "7S1"], + attract: ["7M"], + babydolleyes: ["7L10", "7S0"], + bulkup: ["7M"], + chargebeam: ["7M"], + charm: ["7L28"], + confide: ["7M"], + copycat: ["7L1", "7S0", "7S1"], + curse: ["7E"], + darkpulse: ["7M"], + dazzlinggleam: ["7M"], + destinybond: ["7E"], + doubleteam: ["7M", "7L5"], + dreameater: ["7M"], + embargo: ["7M"], + facade: ["7M"], + feintattack: ["7L23"], + fling: ["7M"], + frustration: ["7M"], + grudge: ["7E"], + hiddenpower: ["7M"], + honeclaws: ["7L41"], + hyperbeam: ["7M"], + infestation: ["7M"], + leechlife: ["7M"], + lightscreen: ["7M"], + mimic: ["7L19"], + nightmare: ["7E"], + painsplit: ["7L50"], + payback: ["7M"], + playrough: ["7L46", "7S1"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scratch: ["7L1"], + shadowball: ["7M"], + shadowclaw: ["7M", "7L37"], + shadowsneak: ["7L14"], + slash: ["7L32"], + sleeptalk: ["7M"], + splash: ["7L1", "7S0"], + substitute: ["7M", "7S1"], + swagger: ["7M"], + swordsdance: ["7M"], + taunt: ["7M"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + willowisp: ["7M"], + woodhammer: ["7L1"], + workup: ["7M"], + xscissor: ["7M"], + }}, + bruxish: {learnset: { + aerialace: ["7M"], + aquajet: ["7L17"], + aquatail: ["7L33"], + astonish: ["7L4"], + attract: ["7M"], + bite: ["7L12"], + blizzard: ["7M"], + bulkup: ["7M"], + calmmind: ["7M"], + confide: ["7M"], + confusion: ["7L9"], + crunch: ["7L28"], + disable: ["7L20"], + doubleteam: ["7M"], + dreameater: ["7M"], + embargo: ["7M"], + facade: ["7M"], + fling: ["7M"], + frostbreath: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hiddenpower: ["7M"], + icebeam: ["7M"], + icefang: ["7E"], + lightscreen: ["7M"], + payback: ["7M"], + poisonfang: ["7E"], + protect: ["7M"], + psychic: ["7M"], + psychicfangs: ["7L41"], + psywave: ["7L25"], + rage: ["7E"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + screech: ["7L36"], + sleeptalk: ["7M"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + synchronoise: ["7L44"], + taunt: ["7M"], + torment: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + venoshock: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpulse: ["7E"], + }}, + drampa: {learnset: { + attract: ["7M"], + blizzard: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonbreath: ["7L29"], + dragonclaw: ["7M"], + dragonpulse: ["7L41"], + dragonrage: ["7L21"], + dragonrush: ["7E"], + dragontail: ["7M"], + earthquake: ["7M"], + echoedvoice: ["7M", "7L1", "7S0"], + energyball: ["7M"], + extrasensory: ["7L37"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fling: ["7M"], + fly: ["7M", "7L45"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + glare: ["7L13"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hurricane: ["7E", "7S0"], + hyperbeam: ["7M"], + hypervoice: ["7L49"], + icebeam: ["7M"], + lightscreen: ["7M", "7L17"], + mist: ["7E"], + naturalgift: ["7L25"], + naturepower: ["7M"], + outrage: ["7L53"], + playnice: ["7L1", "7S0"], + playrough: ["7E"], + protect: ["7M", "7L9"], + psychup: ["7M"], + raindance: ["7M"], + razorwind: ["7E"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M", "7L33"], + shadowball: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + snarl: ["7M"], + solarbeam: ["7M"], + steelwing: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + surf: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + twister: ["7L5"], + workup: ["7M"], + }}, + dhelmise: {learnset: { + absorb: ["7L1"], + aerialace: ["7M"], + anchorshot: ["7L32"], + astonish: ["7L1"], + attract: ["7M"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + earthquake: ["7M"], + embargo: ["7M"], + energyball: ["7M", "7L41"], + facade: ["7M"], + flashcannon: ["7M"], + frustration: ["7M"], + gigadrain: ["7L23"], + gigaimpact: ["7M"], + grassknot: ["7M"], + growth: ["7L1"], + gyroball: ["7M", "7L14"], + heavyslam: ["7L50"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + megadrain: ["7L5"], + metalsound: ["7L18"], + payback: ["7M"], + phantomforce: ["7L54"], + powerwhip: ["7L59"], + protect: ["7M"], + raindance: ["7M"], + rapidspin: ["7L1"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + round: ["7M"], + shadowball: ["7M", "7L36"], + shadowclaw: ["7M"], + slam: ["7L45"], + sleeptalk: ["7M"], + sludgewave: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + surf: ["7M"], + swagger: ["7M"], + switcheroo: ["7L1"], + swordsdance: ["7M"], + thief: ["7M"], + toxic: ["7M"], + whirlpool: ["7L27"], + wrap: ["7L9"], + }}, + jangmoo: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + bide: ["7L9"], + brickbreak: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + counter: ["7E"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonbreath: ["7E"], + dragonclaw: ["7M", "7L41"], + dragondance: ["7L49"], + dragontail: ["7M", "7L17"], + earthquake: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + headbutt: ["7L25"], + hiddenpower: ["7M"], + irondefense: ["7L37"], + leer: ["7L5"], + nobleroar: ["7L45"], + outrage: ["7L53"], + payback: ["7M"], + protect: ["7M", "7L13"], + rest: ["7M"], + return: ["7M"], + reversal: ["7E"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + workup: ["7M", "7L29"], + xscissor: ["7M"], + }}, + hakamoo: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + autotomize: ["7L1"], + bide: ["7L9", "7L1"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M", "7L43"], + dragondance: ["7L53"], + dragontail: ["7M", "7L17"], + earthquake: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + headbutt: ["7L25"], + hiddenpower: ["7M"], + irondefense: ["7L38"], + leer: ["7L5", "7L1"], + nobleroar: ["7L48"], + outrage: ["7L58"], + payback: ["7M"], + protect: ["7M", "7L13", "7L1"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33"], + shadowclaw: ["7M"], + skyuppercut: ["7L1"], + sleeptalk: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + workup: ["7M", "7L29"], + xscissor: ["7M"], + }}, + kommoo: {learnset: { + aerialace: ["7M"], + attract: ["7M"], + autotomize: ["7L1"], + bellydrum: ["7L1"], + bide: ["7L9", "7L1"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M"], + bulldoze: ["7M"], + clangingscales: ["7L1"], + confide: ["7M"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M", "7L43"], + dragondance: ["7L59"], + dragontail: ["7M", "7L17"], + earthquake: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + flamethrower: ["7M"], + flashcannon: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + headbutt: ["7L25"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + irondefense: ["7L38"], + leer: ["7L5", "7L1"], + nobleroar: ["7L51"], + outrage: ["7L67"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M", "7L13", "7L1"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sandstorm: ["7M"], + scaryface: ["7L21"], + screech: ["7L33"], + shadowclaw: ["7M"], + skyuppercut: ["7L1"], + sleeptalk: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + tackle: ["7L1"], + taunt: ["7M"], + toxic: ["7M"], + workup: ["7M", "7L29"], + xscissor: ["7M"], + }}, + tapukoko: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + agility: ["7L53", "7S0", "7S1"], + bravebird: ["7L1"], + calmmind: ["7M"], + charge: ["7L26"], + confide: ["7M"], + dazzlinggleam: ["7M"], + discharge: ["7L48", "7S0", "7S1"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + electricterrain: ["7L1"], + electroball: ["7L58", "7S0", "7S1"], + facade: ["7M"], + falseswipe: ["7M", "7L1"], + fly: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M"], + meanlook: ["7L1"], + mirrormove: ["7L38"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S0", "7S1"], + powerswap: ["7L1"], + protect: ["7M"], + psychup: ["7M"], + quickattack: ["7L1"], + raindance: ["7M"], + reflect: ["7M"], + return: ["7M"], + roar: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + screech: ["7L20"], + shockwave: ["7L14"], + skydrop: ["7M"], + sleeptalk: ["7M"], + spark: ["7L8"], + steelwing: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thundershock: ["7L1"], + thunderwave: ["7M"], + torment: ["7M"], + toxic: ["7M"], + uturn: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M", "7L32"], + withdraw: ["7L1"], + workup: ["7M"], + }}, + tapulele: {learnset: { + aromatherapy: ["7L1"], + aromaticmist: ["7L1"], + astonish: ["7L1"], + calmmind: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + confusion: ["7L1"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + drainingkiss: ["7L1"], + echoedvoice: ["7M"], + energyball: ["7M"], + extrasensory: ["7L48", "7S0"], + facade: ["7M"], + flatter: ["7L53", "7S0"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + lightscreen: ["7M"], + meanlook: ["7L1"], + moonblast: ["7L58", "7S0"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S0"], + protect: ["7M"], + psybeam: ["7L14"], + psychic: ["7M"], + psychicterrain: ["7L1"], + psychup: ["7M"], + psyshock: ["7M", "7L32"], + psywave: ["7L8"], + reflect: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowball: ["7M"], + skillswap: ["7L26"], + sleeptalk: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + sweetscent: ["7L20"], + taunt: ["7M"], + thief: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + tickle: ["7L38"], + torment: ["7M"], + toxic: ["7M"], + withdraw: ["7L1"], + }}, + tapubulu: {learnset: { + brickbreak: ["7M"], + brutalswing: ["7M"], + bulkup: ["7M"], + calmmind: ["7M"], + confide: ["7M"], + dazzlinggleam: ["7M"], + disable: ["7L1"], + echoedvoice: ["7M"], + energyball: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigadrain: ["7L14"], + gigaimpact: ["7M"], + grassknot: ["7M"], + grassyterrain: ["7L1"], + hiddenpower: ["7M"], + hornattack: ["7L8"], + hornleech: ["7L32"], + hyperbeam: ["7M"], + leafage: ["7L1"], + leechseed: ["7L26"], + lightscreen: ["7M"], + meanlook: ["7L1"], + megahorn: ["7L53", "7S0"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S0"], + payback: ["7M"], + protect: ["7M"], + psychup: ["7M"], + reflect: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + rototiller: ["7L38"], + round: ["7M"], + safeguard: ["7M"], + scaryface: ["7L20"], + skullbash: ["7L58", "7S0"], + sleeptalk: ["7M"], + smartstrike: ["7M"], + snarl: ["7M"], + solarbeam: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + superpower: ["7L1"], + swagger: ["7M"], + swordsdance: ["7M"], + taunt: ["7M"], + torment: ["7M"], + toxic: ["7M"], + whirlwind: ["7L1"], + withdraw: ["7L1"], + woodhammer: ["7L1"], + workup: ["7M"], + zenheadbutt: ["7L48", "7S0"], + }}, + tapufini: {learnset: { + aquaring: ["7L53", "7S0"], + blizzard: ["7M"], + brine: ["7L32"], + calmmind: ["7M"], + confide: ["7M"], + dazzlinggleam: ["7M"], + defog: ["7L38"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + haze: ["7L1"], + healpulse: ["7L1"], + hiddenpower: ["7M"], + hydropump: ["7L58", "7S0"], + hyperbeam: ["7M"], + icebeam: ["7M"], + lightscreen: ["7M"], + meanlook: ["7L1"], + mist: ["7L1"], + mistyterrain: ["7L1"], + moonblast: ["7L1"], + muddywater: ["7L48", "7S0"], + naturepower: ["7M"], + naturesmadness: ["7L43", "7S0"], + protect: ["7M"], + psychup: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + refresh: ["7L26"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M"], + scald: ["7M"], + shadowball: ["7M"], + sleeptalk: ["7M"], + smartstrike: ["7M"], + soak: ["7L20"], + substitute: ["7M"], + surf: ["7M"], + swagger: ["7M"], + taunt: ["7M"], + torment: ["7M"], + toxic: ["7M"], + waterfall: ["7M"], + watergun: ["7L1"], + waterpulse: ["7L8"], + whirlpool: ["7L14"], + withdraw: ["7L1"], + }}, + cosmog: {learnset: { + splash: ["7L1", "7S0"], + teleport: ["7L23"], + }}, + cosmoem: {learnset: { + cosmicpower: ["7L1"], + teleport: ["7L1"], + }}, + solgaleo: {learnset: { + bulldoze: ["7M"], + calmmind: ["7M"], + confide: ["7M"], + cosmicpower: ["7L1", "7S0"], + crunch: ["7L37", "7S0"], + doubleteam: ["7M"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flareblitz: ["7L61"], + flashcannon: ["7M", "7L23"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M", "7L73"], + gyroball: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ironhead: ["7L7"], + lightscreen: ["7M"], + metalburst: ["7L43"], + metalclaw: ["7L1"], + metalsound: ["7L13"], + morningsun: ["7L31"], + nobleroar: ["7L59"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + psyshock: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + safeguard: ["7M"], + sleeptalk: ["7M"], + snarl: ["7M"], + solarbeam: ["7M", "7L47"], + stoneedge: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + sunsteelstrike: ["7L1", "7S0"], + swagger: ["7M"], + teleport: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + wakeupslap: ["7L1"], + wideguard: ["7L67"], + wildcharge: ["7M"], + workup: ["7M"], + zenheadbutt: ["7L19", "7S0"], + }}, + lunala: {learnset: { + acrobatics: ["7M"], + aerialace: ["7M"], + airslash: ["7L19"], + blizzard: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + confuseray: ["7L13"], + confusion: ["7L1"], + cosmicpower: ["7L1", "7S0"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + dreameater: ["7M", "7L59"], + facade: ["7M"], + fly: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M", "7L73"], + hypnosis: ["7L1"], + icebeam: ["7M"], + lightscreen: ["7M"], + magiccoat: ["7L43"], + moonblast: ["7L47"], + moongeistbeam: ["7L1", "7S0"], + moonlight: ["7L31"], + nightdaze: ["7L37", "7S0"], + nightshade: ["7L7"], + phantomforce: ["7L61"], + protect: ["7M"], + psychic: ["7M"], + psychup: ["7M"], + psyshock: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + roar: ["7M"], + roost: ["7M"], + round: ["7M"], + safeguard: ["7M"], + shadowball: ["7M", "7L23", "7S0"], + shadowclaw: ["7M"], + skydrop: ["7M"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + teleport: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + wideguard: ["7L67"], + willowisp: ["7M"], + workup: ["7M"], + }}, + nihilego: {learnset: { + acid: ["7L1"], + acidspray: ["7L47", "7S0"], + brutalswing: ["7M"], + chargebeam: ["7M"], + clearsmog: ["7L7"], + confide: ["7M"], + constrict: ["7L1"], + dazzlinggleam: ["7M"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + frustration: ["7M"], + grassknot: ["7M"], + guardsplit: ["7L1"], + headbutt: ["7L19"], + headsmash: ["7L73"], + hiddenpower: ["7M"], + lightscreen: ["7M"], + mirrorcoat: ["7L43", "7S0"], + poisonjab: ["7M"], + pound: ["7L1"], + powergem: ["7L37", "7S0"], + powersplit: ["7L1"], + protect: ["7M"], + psychic: ["7M"], + psyshock: ["7M"], + psywave: ["7L13"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + safeguard: ["7M", "7L31"], + sandstorm: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + stealthrock: ["7L59"], + substitute: ["7M"], + swagger: ["7M"], + thunder: ["7M"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + tickle: ["7L1"], + toxic: ["7M"], + toxicspikes: ["7L29"], + trickroom: ["7M"], + venomdrench: ["7L53", "7S0"], + venoshock: ["7M", "7L23"], + wonderroom: ["7L67"], + }}, + buzzwole: {learnset: { + brickbreak: ["7M"], + bulkup: ["7M", "7L13"], + bulldoze: ["7M"], + cometpunch: ["7L7"], + confide: ["7M"], + counter: ["7L43", "7S0"], + doubleteam: ["7M"], + dynamicpunch: ["7L59", "7S0"], + earthquake: ["7M"], + endure: ["7L23"], + facade: ["7M"], + falseswipe: ["7M"], + fellstinger: ["7L1"], + fling: ["7M"], + focusenergy: ["7L1"], + focuspunch: ["7L73"], + frustration: ["7M"], + gigaimpact: ["7M"], + gyroball: ["7M"], + hammerarm: ["7L47", "7S0"], + harden: ["7L1"], + hiddenpower: ["7M"], + icepunch: ["7L1"], + leechlife: ["7M", "7L29"], + lowsweep: ["7M"], + lunge: ["7L53", "7S0"], + megapunch: ["7L37"], + payback: ["7M"], + poisonjab: ["7M"], + poweruppunch: ["7L1"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + reversal: ["7L1"], + rockslide: ["7M"], + rocktomb: ["7M"], + roost: ["7M"], + round: ["7M"], + sleeptalk: ["7M"], + smackdown: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + superpower: ["7L67"], + swagger: ["7M"], + taunt: ["7M", "7L31"], + thunderpunch: ["7L1"], + toxic: ["7M"], + vitalthrow: ["7L19"], + workup: ["7M"], + }}, + pheromosa: {learnset: { + agility: ["7L37"], + blizzard: ["7M"], + bounce: ["7L29"], + brickbreak: ["7M"], + bugbuzz: ["7L53", "7S0"], + confide: ["7M"], + doublekick: ["7L1"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + facade: ["7M"], + falseswipe: ["7M"], + feint: ["7L19"], + fling: ["7M"], + focusblast: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + hiddenpower: ["7M"], + highjumpkick: ["7L67"], + hyperbeam: ["7M"], + icebeam: ["7M"], + jumpkick: ["7L31"], + leer: ["7L1"], + lowkick: ["7L1"], + lowsweep: ["7M"], + lunge: ["7L47", "7S0"], + mefirst: ["7L59", "7S0"], + poisonjab: ["7M"], + protect: ["7M"], + quickguard: ["7L1"], + quiverdance: ["7L1"], + rapidspin: ["7L1"], + rest: ["7M"], + return: ["7M"], + roost: ["7M"], + round: ["7M"], + silverwind: ["7L23"], + sleeptalk: ["7M"], + speedswap: ["7L73"], + stomp: ["7L13"], + substitute: ["7M"], + swagger: ["7M"], + swift: ["7L7"], + taunt: ["7M"], + torment: ["7M"], + toxic: ["7M"], + triplekick: ["7L43", "7S0"], + uturn: ["7M"], + }}, + xurkitree: {learnset: { + brutalswing: ["7M"], + calmmind: ["7M"], + charge: ["7L1"], + chargebeam: ["7M"], + confide: ["7M"], + dazzlinggleam: ["7M"], + discharge: ["7L47", "7S0"], + doubleteam: ["7M"], + eerieimpulse: ["7L29"], + electricterrain: ["7L53", "7S0"], + energyball: ["7M"], + facade: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + hypnosis: ["7L43", "7S0"], + ingrain: ["7L19"], + iondeluge: ["7L67"], + lightscreen: ["7M"], + naturepower: ["7M"], + powerwhip: ["7L59", "7S0"], + protect: ["7M"], + raindance: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + shockwave: ["7L13"], + signalbeam: ["7L31"], + sleeptalk: ["7M"], + solarbeam: ["7M"], + spark: ["7L1"], + substitute: ["7M"], + sunnyday: ["7M"], + swagger: ["7M"], + tailglow: ["7L1"], + thunder: ["7M"], + thunderbolt: ["7M", "7L37"], + thunderpunch: ["7L23"], + thundershock: ["7L1"], + thunderwave: ["7M", "7L7"], + toxic: ["7M"], + voltswitch: ["7M"], + wildcharge: ["7M"], + wrap: ["7L1"], + zapcannon: ["7L73"], + }}, + celesteela: {learnset: { + absorb: ["7L1"], + acrobatics: ["7M"], + airslash: ["7L1"], + autotomize: ["7L43", "7S0"], + brutalswing: ["7M"], + bulldoze: ["7M"], + confide: ["7M"], + doubleedge: ["7L73"], + doubleteam: ["7M"], + earthquake: ["7M"], + energyball: ["7M"], + explosion: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamecharge: ["7M"], + flamethrower: ["7M"], + flashcannon: ["7M", "7L37"], + fly: ["7M"], + frustration: ["7M"], + gigadrain: ["7L31"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gyroball: ["7M"], + harden: ["7L1"], + heavyslam: ["7L67"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + ingrain: ["7L1"], + irondefense: ["7L59", "7S0"], + ironhead: ["7L29"], + leechseed: ["7L19"], + megadrain: ["7L13"], + metalsound: ["7L23"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + round: ["7M"], + seedbomb: ["7L47", "7S0"], + skullbash: ["7L53", "7S0"], + sleeptalk: ["7M"], + smackdown: ["7M", "7L7"], + smartstrike: ["7M"], + solarbeam: ["7M"], + stoneedge: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + tackle: ["7L1"], + toxic: ["7M"], + wideguard: ["7L1"], + }}, + kartana: {learnset: { + aerialace: ["7M", "7L23"], + aircutter: ["7L1"], + airslash: ["7L59", "7S0"], + brickbreak: ["7M"], + calmmind: ["7M"], + confide: ["7M"], + cut: ["7L1"], + defog: ["7L1"], + detect: ["7L53", "7S0"], + doubleteam: ["7M"], + falseswipe: ["7M", "7L7"], + frustration: ["7M"], + furycutter: ["7L1"], + gigaimpact: ["7M"], + guillotine: ["7L73"], + hiddenpower: ["7M"], + laserfocus: ["7L29"], + leafblade: ["7L43", "7S0"], + nightslash: ["7L31"], + protect: ["7M"], + psychocut: ["7L67"], + razorleaf: ["7L13"], + rest: ["7M"], + return: ["7M"], + round: ["7M"], + sacredsword: ["7L1"], + sleeptalk: ["7M"], + smartstrike: ["7M"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M", "7L37"], + synthesis: ["7L19"], + toxic: ["7M"], + vacuumwave: ["7L1"], + xscissor: ["7M", "7L47", "7S0"], + }}, + guzzlord: {learnset: { + belch: ["7L1"], + bite: ["7L1"], + brickbreak: ["7M"], + brutalswing: ["7M", "7L13"], + bulldoze: ["7M"], + crunch: ["7L37"], + darkpulse: ["7M"], + doubleteam: ["7M"], + dracometeor: ["7T"], + dragonclaw: ["7M"], + dragonrage: ["7L1"], + dragonrush: ["7L73"], + dragontail: ["7M", "7L23"], + earthquake: ["7M"], + facade: ["7M"], + fireblast: ["7M"], + flamethrower: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gastroacid: ["7L53", "7S0"], + gigaimpact: ["7M"], + gyroball: ["7M"], + hammerarm: ["7L43"], + heavyslam: ["7L59", "7S0"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + irontail: ["7L29"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + shadowclaw: ["7M"], + sleeptalk: ["7M"], + sludgebomb: ["7M"], + sludgewave: ["7M"], + smackdown: ["7M"], + snarl: ["7M"], + steamroller: ["7L19"], + stockpile: ["7L1"], + stomp: ["7L7"], + stompingtantrum: ["7L31"], + stoneedge: ["7M"], + substitute: ["7M"], + swallow: ["7L1"], + thief: ["7M"], + thrash: ["7L47", "7S0"], + toxic: ["7M"], + wideguard: ["7L1"], + wringout: ["7L67", "7S0"], + }}, + necrozma: {learnset: { + aerialace: ["7M"], + autotomize: ["7L47"], + brickbreak: ["7M"], + brutalswing: ["7M"], + bulldoze: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M", "7L1"], + confide: ["7M"], + confusion: ["7L1"], + darkpulse: ["7M"], + doubleteam: ["7M"], + earthquake: ["7M"], + embargo: ["7M"], + facade: ["7M"], + flashcannon: ["7M"], + fling: ["7M"], + frustration: ["7M"], + gigaimpact: ["7M"], + gravity: ["7L31"], + gyroball: ["7M"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + irondefense: ["7L59", "7S0"], + lightscreen: ["7M"], + metalclaw: ["7L1"], + mirrorshot: ["7L1"], + moonlight: ["7L1"], + morningsun: ["7L1"], + nightslash: ["7L23"], + powergem: ["7L43"], + prismaticlaser: ["7L73", "7S0"], + protect: ["7M"], + psychic: ["7M"], + psychocut: ["7L37"], + psyshock: ["7M"], + reflect: ["7M"], + rest: ["7M"], + return: ["7M"], + rockblast: ["7L19"], + rockpolish: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + round: ["7M"], + shadowclaw: ["7M"], + slash: ["7L7"], + sleeptalk: ["7M"], + smartstrike: ["7M"], + solarbeam: ["7M"], + stealthrock: ["7L53", "7S0"], + stoneedge: ["7M"], + storedpower: ["7L13"], + substitute: ["7M"], + swagger: ["7M"], + swordsdance: ["7M"], + thief: ["7M"], + thunderwave: ["7M"], + toxic: ["7M"], + trickroom: ["7M"], + wringout: ["7L67", "7S0"], + xscissor: ["7M"], + }}, + magearna: {learnset: { + aurasphere: ["7L81"], + aurorabeam: ["7L17"], + brickbreak: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + craftyshield: ["7L1"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + embargo: ["7M"], + energyball: ["7M"], + explosion: ["7M"], + falseswipe: ["7M"], + flashcannon: ["7M", "7L41", "7S0"], + fleurcannon: ["7L49", "7S0"], + focusblast: ["7M"], + frustration: ["7M"], + gearup: ["7L1"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gyroball: ["7M"], + heartswap: ["7L89"], + helpinghand: ["7L1", "7S0"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irondefense: ["7L57"], + ironhead: ["7L1"], + lightscreen: ["7M"], + luckychant: ["7L9", "7S0"], + mindreader: ["7L33"], + mirrorshot: ["7L25"], + painsplit: ["7L65"], + protect: ["7M"], + psybeam: ["7L1"], + reflect: ["7M"], + return: ["7M"], + round: ["7M"], + shadowball: ["7M"], + shiftgear: ["7L1"], + solarbeam: ["7M"], + sonicboom: ["7L1"], + substitute: ["7M"], + swagger: ["7M"], + synchronoise: ["7L73"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + trickroom: ["7M"], + trumpcard: ["7L97"], + voltswitch: ["7M"], + }}, + magearnaoriginal: {learnset: { + aurasphere: ["7L81"], + aurorabeam: ["7L17"], + brickbreak: ["7M"], + calmmind: ["7M"], + chargebeam: ["7M"], + confide: ["7M"], + craftyshield: ["7L1"], + dazzlinggleam: ["7M"], + defensecurl: ["7L1"], + doubleteam: ["7M"], + echoedvoice: ["7M"], + embargo: ["7M"], + energyball: ["7M"], + explosion: ["7M"], + falseswipe: ["7M"], + flashcannon: ["7M", "7L41"], + fleurcannon: ["7L49"], + focusblast: ["7M"], + frustration: ["7M"], + gearup: ["7L1"], + gigaimpact: ["7M"], + grassknot: ["7M"], + gyroball: ["7M"], + heartswap: ["7L89"], + helpinghand: ["7L1"], + hiddenpower: ["7M"], + hyperbeam: ["7M"], + icebeam: ["7M"], + irondefense: ["7L57"], + ironhead: ["7L1"], + lightscreen: ["7M"], + luckychant: ["7L9"], + mindreader: ["7L33"], + mirrorshot: ["7L25"], + painsplit: ["7L65"], + protect: ["7M"], + psybeam: ["7L1"], + reflect: ["7M"], + return: ["7M"], + round: ["7M"], + shadowball: ["7M"], + shiftgear: ["7L1"], + solarbeam: ["7M"], + sonicboom: ["7L1"], + substitute: ["7M"], + swagger: ["7M"], + synchronoise: ["7L73"], + thunderbolt: ["7M"], + thunderwave: ["7M"], + trickroom: ["7M"], + trumpcard: ["7L97"], + voltswitch: ["7M"], + }}, + marshadow: {learnset: { + acrobatics: ["7M"], + assurance: ["7L1"], + brickbreak: ["7M"], + bulkup: ["7M"], + calmmind: ["7M"], + closecombat: ["7L50", "7S0"], + confide: ["7M"], + copycat: ["7L20"], + counter: ["7L1"], + doubleteam: ["7M"], + drainpunch: ["7L1"], + echoedvoice: ["7M"], + endeavor: ["7L60"], + facade: ["7M"], + falseswipe: ["7M"], + feint: ["7L11"], + firepunch: ["7L1"], + fling: ["7M"], + focusblast: ["7M"], + forcepalm: ["7L5", "7S0"], + frustration: ["7M"], + gigaimpact: ["7M"], + grassknot: ["7M"], + hiddenpower: ["7M"], + icepunch: ["7L1"], + jumpkick: ["7L35"], + laserfocus: ["7L1"], + lowsweep: ["7M"], + payback: ["7M"], + poisonjab: ["7M"], + protect: ["7M"], + psychup: ["7M", "7L41"], + pursuit: ["7L1"], + rest: ["7M"], + return: ["7M"], + rockslide: ["7M"], + rocktomb: ["7M"], + roleplay: ["7L30"], + rollingkick: ["7L15"], + round: ["7M"], + shadowball: ["7M", "7S0"], + shadowclaw: ["7M"], + shadowpunch: ["7L26"], + shadowsneak: ["7L1"], + sleeptalk: ["7M"], + smackdown: ["7M"], + spectralthief: ["7L45", "7S0"], + stoneedge: ["7M"], + substitute: ["7M"], + suckerpunch: ["7L56"], + swagger: ["7M"], + thief: ["7M"], + thunderpunch: ["7L1"], + toxic: ["7M"], + willowisp: ["7M"], + workup: ["7M"], + }}, +}; + +exports.BattleLearnsets = BattleLearnsets; diff --git a/data/mods/vgc17/rulesets.js b/data/mods/vgc17/rulesets.js new file mode 100644 index 0000000000000..c3e2668b01141 --- /dev/null +++ b/data/mods/vgc17/rulesets.js @@ -0,0 +1,21 @@ +'use strict'; + +/**@type {{[k: string]: ModdedFormatsData}} */ +let BattleFormats = { + alolapokedex: { + effectType: 'ValidatorRule', + name: 'Alola Pokedex', + desc: "Only allows Pokémon native to the Alola region (SUMO)", + onValidateSet(set, format) { + let alolaDex = [ + "Rowlet", "Dartrix", "Decidueye", "Litten", "Torracat", "Incineroar", "Popplio", "Brionne", "Primarina", "Pikipek", "Trumbeak", "Toucannon", "Yungoos", "Gumshoos", "Rattata-Alola", "Raticate-Alola", "Caterpie", "Metapod", "Butterfree", "Ledyba", "Ledian", "Spinarak", "Ariados", "Pichu", "Pikachu", "Raichu-Alola", "Grubbin", "Charjabug", "Vikavolt", "Bonsly", "Sudowoodo", "Happiny", "Chansey", "Blissey", "Munchlax", "Snorlax", "Slowpoke", "Slowbro", "Slowking", "Wingull", "Pelipper", "Abra", "Kadabra", "Alakazam", "Meowth-Alola", "Persian-Alola", "Magnemite", "Magneton", "Magnezone", "Grimer-Alola", "Muk-Alola", "Growlithe", "Arcanine", "Drowzee", "Hypno", "Makuhita", "Hariyama", "Smeargle", "Crabrawler", "Crabominable", "Gastly", "Haunter", "Gengar", "Drifloon", "Drifblim", "Misdreavus", "Mismagius", "Zubat", "Golbat", "Crobat", "Diglett-Alola", "Dugtrio-Alola", "Spearow", "Fearow", "Rufflet", "Braviary", "Vullaby", "Mandibuzz", "Mankey", "Primeape", "Delibird", "Oricorio", "Cutiefly", "Ribombee", "Petilil", "Lilligant", "Cottonee", "Whimsicott", "Psyduck", "Golduck", "Magikarp", "Gyarados", "Barboach", "Whiscash", "Machop", "Machoke", "Machamp", "Roggenrola", "Boldore", "Gigalith", "Carbink", "Sableye", "Rockruff", "Lycanroc", "Spinda", "Tentacool", "Tentacruel", "Finneon", "Lumineon", "Wishiwashi", "Luvdisc", "Corsola", "Mareanie", "Toxapex", "Shellder", "Cloyster", "Bagon", "Shelgon", "Salamence", "Lillipup", "Herdier", "Stoutland", "Eevee", "Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Sylveon", "Mudbray", "Mudsdale", "Igglybuff", "Jigglypuff", "Wigglytuff", "Tauros", "Miltank", "Surskit", "Masquerain", "Dewpider", "Araquanid", "Fomantis", "Lurantis", "Morelull", "Shiinotic", "Paras", "Parasect", "Poliwag", "Poliwhirl", "Poliwrath", "Politoed", "Goldeen", "Seaking", "Feebas", "Milotic", "Alomomola", "Fletchling", "Fletchinder", "Talonflame", "Salandit", "Salazzle", "Cubone", "Marowak-Alola", "Kangaskhan", "Magby", "Magmar", "Magmortar", "Stufful", "Bewear", "Bounsweet", "Steenee", "Tsareena", "Comfey", "Pinsir", "Oranguru", "Passimian", "Goomy", "Sliggoo", "Goodra", "Castform", "Wimpod", "Golisopod", "Staryu", "Starmie", "Sandygast", "Palossand", "Cranidos", "Rampardos", "Shieldon", "Bastiodon", "Archen", "Archeops", "Tirtouga", "Carracosta", "Phantump", "Trevenant", "Nosepass", "Probopass", "Pyukumuku", "Chinchou", "Lanturn", "Type: Null", "Silvally", "Zygarde", "Trubbish", "Garbodor", "Skarmory", "Ditto", "Cleffa", "Clefairy", "Clefable", "Minior", "Beldum", "Metang", "Metagross", "Porygon", "Porygon2", "Porygon-Z", "Pancham", "Pangoro", "Komala", "Torkoal", "Turtonator", "Togedemaru", "Elekid", "Electabuzz", "Electivire", "Geodude-Alola", "Graveler-Alola", "Golem-Alola", "Sandile", "Krokorok", "Krookodile", "Trapinch", "Vibrava", "Flygon", "Gible", "Gabite", "Garchomp", "Klefki", "Mimikyu", "Bruxish", "Drampa", "Absol", "Snorunt", "Glalie", "Froslass", "Sneasel", "Weavile", "Sandshrew-Alola", "Sandslash-Alola", "Vulpix-Alola", "Ninetales-Alola", "Vanillite", "Vanillish", "Vanilluxe", "Snubbull", "Granbull", "Shellos", "Gastrodon", "Relicanth", "Dhelmise", "Carvanha", "Sharpedo", "Wailmer", "Wailord", "Lapras", "Exeggcute", "Exeggutor-Alola", "Jangmo-o", "Hakamo-o", "Kommo-o", "Emolga", "Scyther", "Scizor", "Murkrow", "Honchkrow", "Riolu", "Lucario", "Dratini", "Dragonair", "Dragonite", "Aerodactyl", "Tapu Koko", "Tapu Lele", "Tapu Bulu", "Tapu Fini", "Cosmog", "Cosmoem", "Solgaleo", "Lunala", "Nihilego", "Buzzwole", "Pheromosa", "Xurkitree", "Celesteela", "Kartana", "Guzzlord", "Necrozma", "Magearna", "Marshadow", + ]; + let template = this.getTemplate(set.species || set.name); + if (!alolaDex.includes(template.baseSpecies) && !alolaDex.includes(template.species) && !this.getRuleTable(format).has('+' + template.speciesid)) { + return [template.baseSpecies + " is not in the Alola Pokédex."]; + } + }, + }, +}; + +exports.BattleFormats = BattleFormats; diff --git a/data/moves.js b/data/moves.js index 06fda4fd6bf75..c0756f14216d6 100644 --- a/data/moves.js +++ b/data/moves.js @@ -3,11 +3,11 @@ List of flags and their descriptions: authentic: Ignores a target's substitute. -bite: Power is multiplied by 1.5 when used by a Pokemon with the Ability Strong Jaw. -bullet: Has no effect on Pokemon with the Ability Bulletproof. +bite: Power is multiplied by 1.5 when used by a Pokemon with the Strong Jaw Ability. +bullet: Has no effect on Pokemon with the Bulletproof Ability. charge: The user is unable to make a move between turns. contact: Makes contact. -dance: When used by a Pokemon, other Pokemon with the Ability Dancer can attempt to execute the same move. +dance: When used by a Pokemon, other Pokemon with the Dancer Ability can attempt to execute the same move. defrost: Thaws the user if executed successfully while the user is frozen. distance: Can target a Pokemon positioned anywhere in a Triple Battle. gravity: Prevented from being executed or selected during Gravity's effect. @@ -15,20 +15,21 @@ heal: Prevented from being executed or selected during Heal Block's effect. mirror: Can be copied by Mirror Move. mystery: Unknown effect. nonsky: Prevented from being executed or selected in a Sky Battle. -powder: Has no effect on Grass-type Pokemon, Pokemon with the Ability Overcoat, and Pokemon holding Safety Goggles. +powder: Has no effect on Grass-type Pokemon, Pokemon with the Overcoat Ability, and Pokemon holding Safety Goggles. protect: Blocked by Detect, Protect, Spiky Shield, and if not a Status move, King's Shield. -pulse: Power is multiplied by 1.5 when used by a Pokemon with the Ability Mega Launcher. -punch: Power is multiplied by 1.2 when used by a Pokemon with the Ability Iron Fist. +pulse: Power is multiplied by 1.5 when used by a Pokemon with the Mega Launcher Ability. +punch: Power is multiplied by 1.2 when used by a Pokemon with the Iron Fist Ability. recharge: If this move is successful, the user must recharge on the following turn and cannot make a move. -reflectable: Bounced back to the original user by Magic Coat or the Ability Magic Bounce. +reflectable: Bounced back to the original user by Magic Coat or the Magic Bounce Ability. snatch: Can be stolen from the original user and instead used by another Pokemon using Snatch. -sound: Has no effect on Pokemon with the Ability Soundproof. +sound: Has no effect on Pokemon with the Soundproof Ability. */ 'use strict'; -exports.BattleMovedex = { +/**@type {{[k: string]: MoveData}} */ +let BattleMovedex = { "10000000voltthunderbolt": { num: 719, accuracy: true, @@ -43,7 +44,7 @@ exports.BattleMovedex = { flags: {}, isZ: "pikashuniumz", critRatio: 3, - secondary: false, + secondary: null, target: "normal", type: "Electric", contestType: "Cool", @@ -61,7 +62,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 100, @@ -80,7 +81,7 @@ exports.BattleMovedex = { pp: 20, priority: 1, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 100, @@ -124,7 +125,7 @@ exports.BattleMovedex = { boosts: { def: 2, }, - secondary: false, + secondary: null, target: "self", type: "Poison", zMoveEffect: 'clearnegativeboost', @@ -143,7 +144,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "poisoniumz", - secondary: false, + secondary: null, target: "normal", type: "Poison", contestType: "Cool", @@ -176,7 +177,7 @@ exports.BattleMovedex = { num: 512, accuracy: 100, basePower: 55, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (!pokemon.item) { this.debug("Power doubled for no item"); return move.basePower * 2; @@ -184,7 +185,6 @@ exports.BattleMovedex = { return move.basePower; }, category: "Physical", - desc: "Power doubles if the user has no held item.", shortDesc: "Power doubles if the user has no held item.", id: "acrobatics", isViable: true, @@ -192,7 +192,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 100, @@ -210,15 +210,17 @@ exports.BattleMovedex = { pp: 30, priority: 0, flags: {}, - onHit: function (target) { + onHit(target) { let stats = []; for (let stat in target.boosts) { + // @ts-ignore if (target.boosts[stat] < 6) { stats.push(stat); } } if (stats.length) { - let randomStat = stats[this.random(stats.length)]; + let randomStat = this.sample(stats); + /**@type {{[k: string]: number}} */ let boost = {}; boost[randomStat] = 2; this.boost(boost); @@ -226,7 +228,7 @@ exports.BattleMovedex = { return false; } }, - secondary: false, + secondary: null, target: "adjacentAllyOrSelf", type: "Normal", zMoveEffect: 'crit2', @@ -237,7 +239,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 60, category: "Physical", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "aerialace", isViable: true, @@ -245,7 +246,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 120, @@ -265,7 +266,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, distance: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 180, @@ -283,18 +284,18 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {authentic: 1, mystery: 1}, - onHit: function (target) { + onHit(target) { if (target.side.active.length < 2) return false; // fails in singles - let decision = this.willMove(target); - if (decision) { + let action = this.willMove(target); + if (action) { this.cancelMove(target); - this.queue.unshift(decision); + this.queue.unshift(action); this.add('-activate', target, 'move: After You'); } else { return false; } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -316,7 +317,7 @@ exports.BattleMovedex = { boosts: { spe: 2, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveEffect: 'clearnegativeboost', @@ -335,7 +336,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Flying", zMovePower: 120, @@ -376,7 +377,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "fightiniumz", - secondary: false, + secondary: null, target: "normal", type: "Fighting", contestType: "Cool", @@ -393,17 +394,17 @@ exports.BattleMovedex = { pp: 15, priority: 2, flags: {}, - onTryHit: function (source) { + onTryHit(source) { if (source.side.active.length === 1) return false; if (source.side.active.length === 3 && source.position === 1) return false; }, - onHit: function (pokemon) { + onHit(pokemon) { let 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'); }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveBoost: {spe: 2}, @@ -424,7 +425,7 @@ exports.BattleMovedex = { boosts: { spd: 2, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveEffect: 'clearnegativeboost', @@ -445,7 +446,7 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1}, secondary: { chance: 100, - onHit: function (target, source, move) { + onHit(target, source, move) { if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); }, }, @@ -462,7 +463,6 @@ exports.BattleMovedex = { desc: "Has a 10% chance to raise the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage.", shortDesc: "10% chance to raise all stats by 1 (not acc/eva).", id: "ancientpower", - isViable: true, name: "Ancient Power", pp: 5, priority: 0, @@ -497,7 +497,7 @@ exports.BattleMovedex = { pp: 20, priority: 1, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 100, @@ -508,7 +508,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user has 1/16 of its maximum HP, rounded down, restored at the end of each turn while it remains active. If the user uses Baton Pass, the replacement will receive the healing effect.", + desc: "The user has 1/16 of its maximum HP, rounded down, restored at the end of each turn while it remains active. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. If the user uses Baton Pass, the replacement will receive the healing effect.", shortDesc: "User recovers 1/16 max HP per turn.", id: "aquaring", name: "Aqua Ring", @@ -517,15 +517,15 @@ exports.BattleMovedex = { flags: {snatch: 1}, volatileStatus: 'aquaring', effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'Aqua Ring'); }, onResidualOrder: 6, - onResidual: function (pokemon) { + onResidual(pokemon) { this.heal(pokemon.maxhp / 16); }, }, - secondary: false, + secondary: null, target: "self", type: "Water", zMoveBoost: {def: 1}, @@ -536,7 +536,6 @@ exports.BattleMovedex = { accuracy: 90, basePower: 90, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "aquatail", isViable: true, @@ -544,7 +543,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 175, @@ -555,7 +554,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 15, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "armthrust", name: "Arm Thrust", @@ -563,7 +562,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 100, @@ -574,7 +573,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Every Pokemon in the user's party is cured of its major status condition. Active Pokemon with the Ability Sap Sipper are not cured, unless they are the user.", + desc: "Every Pokemon in the user's party is cured of its major status condition. Active Pokemon with the Sap Sipper Ability are not cured, unless they are the user.", shortDesc: "Cures the user's party of all status conditions.", id: "aromatherapy", isViable: true, @@ -582,16 +581,17 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {snatch: 1, distance: 1}, - onHit: function (pokemon, source, move) { + onHit(pokemon, source, move) { this.add('-activate', source, 'move: Aromatherapy'); - let side = pokemon.side; - for (let i = 0; i < side.pokemon.length; i++) { - if (side.pokemon[i] !== source && ((side.pokemon[i].hasAbility('sapsipper')) || - (side.pokemon[i].volatiles['substitute'] && !move.infiltrates))) { + let success = false; + for (const ally of pokemon.side.pokemon) { + if (ally !== source && ((ally.hasAbility('sapsipper')) || + (ally.volatiles['substitute'] && !move.infiltrates))) { continue; } - side.pokemon[i].cureStatus(); + if (ally.cureStatus()) success = true; } + return success; }, target: "allyTeam", type: "Grass", @@ -613,7 +613,7 @@ exports.BattleMovedex = { boosts: { spd: 1, }, - secondary: false, + secondary: null, target: "adjacentAlly", type: "Fairy", zMoveBoost: {spd: 2}, @@ -624,36 +624,35 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "A random move among those known by the user's party members is selected for use. Does not select Assist, Belch, Bestow, Bounce, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dig, Dive, Dragon Tail, Endure, Feint, Fly, Focus Punch, Follow Me, Helping Hand, Hold Hands, King's Shield, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Phantom Force, Protect, Rage Powder, Roar, Shadow Force, Sketch, Sky Drop, Sleep Talk, Snatch, Spiky Shield, Struggle, Switcheroo, Thief, Transform, Trick, or Whirlwind.", + desc: "A random move among those known by the user's party members is selected for use. Does not select Assist, Baneful Bunker, Beak Blast, Belch, Bestow, Bounce, Celebrate, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dig, Dive, Dragon Tail, Endure, Feint, Fly, Focus Punch, Follow Me, Helping Hand, Hold Hands, King's Shield, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Phantom Force, Protect, Rage Powder, Roar, Shadow Force, Shell Trap, Sketch, Sky Drop, Sleep Talk, Snatch, Spiky Shield, Spotlight, Struggle, Switcheroo, Thief, Transform, Trick, Whirlwind, or any Z-Move.", shortDesc: "Uses a random move known by a team member.", id: "assist", name: "Assist", pp: 20, priority: 0, flags: {}, - onHit: function (target) { + onHit(target) { let moves = []; - for (let j = 0; j < target.side.pokemon.length; j++) { - let pokemon = target.side.pokemon[j]; + for (const pokemon of target.side.pokemon) { if (pokemon === target) continue; - for (let i = 0; i < pokemon.moveset.length; i++) { - let move = pokemon.moveset[i].id; - let noAssist = { - assist:1, belch:1, bestow:1, bounce:1, chatter:1, circlethrow:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, dig:1, dive:1, dragontail:1, endure:1, feint:1, fly:1, focuspunch:1, followme:1, helpinghand:1, kingsshield:1, matblock:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, phantomforce:1, protect:1, ragepowder:1, roar:1, shadowforce:1, sketch:1, skydrop:1, sleeptalk:1, snatch:1, spikyshield:1, struggle:1, switcheroo:1, thief:1, transform:1, trick:1, whirlwind:1, - }; - if (!noAssist[move] && !this.getMove(move).isZ) { + for (const moveSlot of pokemon.moveSlots) { + let move = moveSlot.id; + let noAssist = [ + 'assist', 'banefulbunker', 'beakblast', 'belch', 'bestow', 'bounce', 'celebrate', 'chatter', 'circlethrow', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'dig', 'dive', 'dragontail', 'endure', 'feint', 'fly', 'focuspunch', 'followme', 'helpinghand', 'holdhands', 'kingsshield', 'matblock', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'naturepower', 'phantomforce', 'protect', 'ragepowder', 'roar', 'shadowforce', 'shelltrap', 'sketch', 'skydrop', 'sleeptalk', 'snatch', 'spikyshield', 'spotlight', 'struggle', 'switcheroo', 'thief', 'transform', 'trick', 'whirlwind', + ]; + if (!noAssist.includes(move) && !this.getMove(move).isZ) { moves.push(move); } } } let randomMove = ''; - if (moves.length) randomMove = moves[this.random(moves.length)]; + if (moves.length) randomMove = this.sample(moves); if (!randomMove) { return false; } this.useMove(randomMove, target); }, - secondary: false, + secondary: null, target: "self", type: "Normal", contestType: "Cute", @@ -662,8 +661,8 @@ exports.BattleMovedex = { num: 372, accuracy: 100, basePower: 60, - basePowerCallback: function (pokemon, target, move) { - if (pokemon.volatiles.assurance && pokemon.volatiles.assurance.hurt) { + basePowerCallback(pokemon, target, move) { + if (target.hurtThisTurn) { this.debug('Boosted for being damaged this turn'); return move.basePower * 2; } @@ -677,25 +676,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - beforeTurnCallback: function (pokemon, target) { - pokemon.addVolatile('assurance'); - pokemon.volatiles.assurance.position = target.position; - }, - effect: { - duration: 1, - onFoeAfterDamage: function (damage, target) { - if (target.position === this.effectData.position) { - this.debug('damaged this turn'); - this.effectData.hurt = true; - } - }, - onFoeSwitchOut: function (pokemon) { - if (pokemon.position === this.effectData.position) { - this.effectData.hurt = false; - } - }, - }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 120, @@ -736,7 +717,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 175, @@ -747,7 +728,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Causes the target to become infatuated, making it unable to attack 50% of the time. Fails if both the user and the target are the same gender, if either is genderless, or if the target is already infatuated. The effect ends when either the user or the target is no longer active. Pokemon with the Ability Oblivious or protected by the Ability Aroma Veil are immune.", + desc: "Causes the target to become infatuated, making it unable to attack 50% of the time. Fails if both the user and the target are the same gender, if either is genderless, or if the target is already infatuated. The effect ends when either the user or the target is no longer active. Pokemon with the Oblivious Ability or protected by the Aroma Veil Ability are immune.", shortDesc: "A target of the opposite gender gets infatuated.", id: "attract", name: "Attract", @@ -757,7 +738,7 @@ exports.BattleMovedex = { volatileStatus: 'attract', effect: { noCopy: true, // doesn't get copied by Baton Pass - onStart: function (pokemon, source, effect) { + onStart(pokemon, source, effect) { if (!(pokemon.gender === 'M' && source.gender === 'F') && !(pokemon.gender === 'F' && source.gender === 'M')) { this.debug('incompatible gender'); return false; @@ -775,25 +756,25 @@ exports.BattleMovedex = { this.add('-start', pokemon, 'Attract'); } }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (this.effectData.source && !this.effectData.source.isActive && pokemon.volatiles['attract']) { this.debug('Removing Attract volatile on ' + pokemon); pokemon.removeVolatile('attract'); } }, onBeforeMovePriority: 2, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { this.add('-activate', pokemon, 'move: Attract', '[of] ' + this.effectData.source); - if (this.random(2) === 0) { + if (this.randomChance(1, 2)) { this.add('cant', pokemon, 'Attract'); return false; } }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'Attract', '[silent]'); }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -804,7 +785,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 80, category: "Special", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "aurasphere", isViable: true, @@ -812,7 +792,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {bullet: 1, protect: 1, pulse: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Fighting", zMovePower: 160, @@ -824,7 +804,7 @@ exports.BattleMovedex = { basePower: 65, category: "Special", desc: "Has a 10% chance to lower the target's Attack by 1 stage.", - shortDesc: "10% chance to lower the foe's Attack by 1.", + shortDesc: "10% chance to lower the target's Attack by 1.", id: "aurorabeam", name: "Aurora Beam", pp: 20, @@ -846,7 +826,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - 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. 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. 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 Hail.", shortDesc: "For 5 turns, damage to allies is halved. Hail only.", id: "auroraveil", isViable: true, @@ -855,19 +835,23 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1}, sideCondition: 'auroraveil', - onTryHitSide: function () { + onTryHitSide() { if (!this.isWeather('hail')) return false; }, effect: { duration: 5, - durationCallback: function (target, source, effect) { + durationCallback(target, source, effect) { if (source && source.hasItem('lightclay')) { return 8; } return 5; }, - onAnyModifyDamage: function (damage, source, target, move) { + onAnyModifyDamage(damage, source, target, move) { if (target !== source && target.side === this.effectData.target) { + if ((target.side.sideConditions['reflect'] && this.getCategory(move) === 'Physical') || + (target.side.sideConditions['lightscreen'] && this.getCategory(move) === 'Special')) { + return; + } if (!move.crit && !move.infiltrates) { this.debug('Aurora Veil weaken'); if (target.side.active.length > 1) return this.chainModify([0xAAC, 0x1000]); @@ -875,16 +859,16 @@ exports.BattleMovedex = { } } }, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Aurora Veil'); }, onResidualOrder: 21, onResidualSubOrder: 1, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'move: Aurora Veil'); }, }, - secondary: false, + secondary: null, target: "allySide", type: "Ice", zMoveBoost: {spe: 1}, @@ -895,7 +879,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Raises the user's Speed by 2 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.", + desc: "Raises the user's Speed by 2 stages. If the user's Speed was changed, the user's weight is reduced by 100 kg as long as it remains active. This effect is stackable but cannot reduce the user's weight to less than 0.1 kg.", shortDesc: "Raises the user's Speed by 2; user loses 100 kg.", id: "autotomize", isViable: true, @@ -903,7 +887,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {snatch: 1}, - onTryHit: function (pokemon) { + onTryHit(pokemon) { let hasContrary = pokemon.hasAbility('contrary'); if ((!hasContrary && pokemon.boosts.spe === 6) || (hasContrary && pokemon.boosts.spe === -6)) { return false; @@ -915,20 +899,20 @@ exports.BattleMovedex = { volatileStatus: 'autotomize', effect: { noCopy: true, // doesn't get copied by Baton Pass - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.template.weightkg > 0.1) { this.effectData.multiplier = 1; this.add('-start', pokemon, 'Autotomize'); } }, - onRestart: function (pokemon) { + onRestart(pokemon) { if (pokemon.template.weightkg - (this.effectData.multiplier * 100) > 0.1) { this.effectData.multiplier++; this.add('-start', pokemon, 'Autotomize'); } }, onModifyWeightPriority: 1, - onModifyWeight: function (weight, pokemon) { + onModifyWeight(weight, pokemon) { if (this.effectData.multiplier) { weight -= this.effectData.multiplier * 100; if (weight < 0.1) weight = 0.1; @@ -936,7 +920,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, target: "self", type: "Steel", zMoveEffect: 'clearnegativeboost', @@ -946,9 +930,12 @@ exports.BattleMovedex = { num: 419, accuracy: 100, basePower: 60, - basePowerCallback: function (pokemon, target, move) { - if (target.lastDamage > 0 && pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && pokemon.lastAttackedBy.pokemon === target) { - this.debug('Boosted for getting hit by ' + pokemon.lastAttackedBy.move); + basePowerCallback(pokemon, target, move) { + let damagedByTarget = pokemon.attackedBy.some(p => + p.source === target && p.damage > 0 && p.thisTurn + ); + if (damagedByTarget) { + this.debug('Boosted for getting hit by ' + target); return move.basePower * 2; } return move.basePower; @@ -962,7 +949,7 @@ exports.BattleMovedex = { pp: 10, priority: -4, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ice", zMovePower: 120, @@ -983,18 +970,41 @@ exports.BattleMovedex = { boosts: { atk: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMoveBoost: {def: 1}, contestType: "Cute", }, + "baddybad": { + num: 737, + accuracy: 100, + basePower: 90, + category: "Special", + desc: "This move summons Reflect for 5 turns upon use.", + shortDesc: "Summons Reflect.", + id: "baddybad", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Baddy Bad", + pp: 15, + priority: 0, + flags: {protect: 1}, + self: { + sideCondition: 'reflect', + }, + secondary: null, + target: "normal", + type: "Dark", + contestType: "Clever", + }, "banefulbunker": { num: 661, accuracy: true, basePower: 0, category: "Status", - desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user become poisoned. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", + desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user become poisoned. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", shortDesc: "Protects from moves. Contact: poison.", id: "banefulbunker", isViable: true, @@ -1004,19 +1014,19 @@ exports.BattleMovedex = { flags: {}, stallingMove: true, volatileStatus: 'banefulbunker', - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { return !!this.willAct() && this.runEvent('StallMove', target); }, - onHit: function (pokemon) { + onHit(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'move: Protect'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!move.flags['protect']) { if (move.isZ) move.zBrokeProtect = true; return; @@ -1032,10 +1042,15 @@ exports.BattleMovedex = { if (move.flags['contact']) { source.trySetStatus('psn', target); } - return null; + return this.NOT_FAILURE; + }, + onHit(target, source, move) { + if (move.isZPowered && move.flags['contact']) { + source.trySetStatus('psn', target); + } }, }, - secondary: false, + secondary: null, target: "self", type: "Poison", zMoveBoost: {def: 1}, @@ -1046,7 +1061,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 15, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "barrage", name: "Barrage", @@ -1054,7 +1069,7 @@ exports.BattleMovedex = { priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -1075,7 +1090,7 @@ exports.BattleMovedex = { boosts: { def: 2, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveEffect: 'clearnegativeboost', @@ -1095,7 +1110,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, selfSwitch: 'copyvolatile', - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -1114,27 +1129,27 @@ exports.BattleMovedex = { pp: 15, priority: -3, flags: {bullet: 1, protect: 1}, - beforeTurnCallback: function (pokemon) { + beforeTurnCallback(pokemon) { pokemon.addVolatile('beakblast'); }, effect: { duration: 1, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singleturn', pokemon, 'move: Beak Blast'); }, - onHit: function (pokemon, source, move) { + onHit(pokemon, source, move) { if (move.flags['contact']) { source.trySetStatus('brn', pokemon); } }, }, - onMoveAborted: function (pokemon) { + onMoveAborted(pokemon) { pokemon.removeVolatile('beakblast'); }, - onAfterMove: function (pokemon) { + onAfterMove(pokemon) { pokemon.removeVolatile('beakblast'); }, - secondary: false, + secondary: null, target: "normal", type: "Flying", zMovePower: 180, @@ -1144,10 +1159,9 @@ exports.BattleMovedex = { num: 251, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { - pokemon.addVolatile('beatup'); - if (!pokemon.side.pokemon[pokemon.volatiles.beatup.index]) return null; - return 5 + Math.floor(pokemon.side.pokemon[pokemon.volatiles.beatup.index].template.baseStats.atk / 10); + basePowerCallback(pokemon, target, move) { + // @ts-ignore + return 5 + Math.floor(move.allies.shift().template.baseStats.atk / 10); }, category: "Physical", desc: "Hits one time for the user and one time for each unfainted Pokemon without a major status condition in the user's party. The power of each hit is equal to 5+(X/10), where X is each participating Pokemon's base Attack; each hit is considered to come from the user.", @@ -1157,29 +1171,11 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, mystery: 1}, - multihit: 6, - effect: { - duration: 1, - onStart: function (pokemon) { - this.effectData.index = 0; - while (pokemon.side.pokemon[this.effectData.index] !== pokemon && - (!pokemon.side.pokemon[this.effectData.index] || - pokemon.side.pokemon[this.effectData.index].fainted || - pokemon.side.pokemon[this.effectData.index].status)) { - this.effectData.index++; - } - }, - onRestart: function (pokemon) { - do { - this.effectData.index++; - if (this.effectData.index >= 6) break; - } while (!pokemon.side.pokemon[this.effectData.index] || pokemon.side.pokemon[this.effectData.index].fainted || pokemon.side.pokemon[this.effectData.index].status); - }, - }, - onAfterMove: function (pokemon) { - pokemon.removeVolatile('beatup'); + onModifyMove(move, pokemon) { + move.allies = pokemon.side.pokemon.filter(ally => ally === pokemon || !ally.fainted && !ally.status); + move.multihit = move.allies.length; }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 100, @@ -1198,7 +1194,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1}, // Move disabling implemented in Battle#nextTurn in sim/battle.js - secondary: false, + secondary: null, target: "normal", type: "Poison", zMovePower: 190, @@ -1216,14 +1212,14 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {snatch: 1}, - onHit: function (target) { + onHit(target) { if (target.hp <= target.maxhp / 2 || target.boosts.atk >= 6 || target.maxhp === 1) { // Shedinja clause return false; } this.directDamage(target.maxhp / 2); this.boost({atk: 12}, target); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'heal', @@ -1241,20 +1237,19 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {mirror: 1, authentic: 1, mystery: 1}, - onHit: function (target, source, move) { + onHit(target, source, move) { if (target.item) { return false; } - let yourItem = source.takeItem(); - if (!yourItem) return false; - if (!this.singleEvent('TakeItem', yourItem, source.itemData, source, target, move, yourItem)) return; - if (!target.setItem(yourItem)) { - source.item = yourItem.id; + let myItem = source.takeItem(); + if (!myItem) return false; + if (!this.singleEvent('TakeItem', myItem, source.itemData, target, source, move, myItem) || !target.setItem(myItem)) { + source.item = myItem.id; return false; } - this.add('-item', target, yourItem.name, '[from] move: Bestow', '[of] ' + source); + this.add('-item', target, myItem.name, '[from] move: Bestow', '[of] ' + source); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 2}, @@ -1265,7 +1260,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Physical", - desc: "The user spends two turns locked into this move and then, on the second turn after using this move, the user attacks the last Pokemon that hit it, inflicting double the damage in HP it lost during the two turns. If the last Pokemon that hit it is no longer on the field, the user attacks a random foe instead. If the user is prevented from moving during this move's use, the effect ends. This move does not check accuracy.", + desc: "The user spends two turns locked into this move and then, on the second turn after using this move, the user attacks the last Pokemon that hit it, inflicting double the damage in HP it lost to attacks during the two turns. If the last Pokemon that hit it is no longer active, the user attacks a random opposing Pokemon instead. If the user is prevented from moving during this move's use, the effect ends. This move does not check accuracy and does not ignore type immunity.", shortDesc: "Waits 2 turns; deals double the damage taken.", id: "bide", name: "Bide", @@ -1274,23 +1269,23 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1}, volatileStatus: 'bide', ignoreImmunity: true, - beforeMoveCallback: function (pokemon) { + beforeMoveCallback(pokemon) { if (pokemon.volatiles['bide']) return true; }, effect: { duration: 3, onLockMove: 'bide', - onStart: function (pokemon) { + onStart(pokemon) { this.effectData.totalDamage = 0; this.add('-start', pokemon, 'move: Bide'); }, onDamagePriority: -101, - onDamage: function (damage, target, source, move) { + onDamage(damage, target, source, move) { if (!move || move.effectType !== 'Move' || !source) return; this.effectData.totalDamage += damage; this.effectData.lastDamageSource = source; }, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (this.effectData.duration === 1) { this.add('-end', pokemon, 'move: Bide'); target = this.effectData.lastDamageSource; @@ -1299,10 +1294,13 @@ exports.BattleMovedex = { this.add('-fail', pokemon); return false; } - if (!target.isActive) target = this.resolveTarget(pokemon, this.getMove('pound')); - if (!this.isAdjacent(pokemon, target)) { - this.add('-miss', pokemon, target); - return false; + if (!target.isActive) { + const possibleTarget = this.resolveTarget(pokemon, this.getMove('pound')); + if (!possibleTarget) { + this.add('-miss', pokemon); + return false; + } + target = possibleTarget; } let moveData = { id: 'bide', @@ -1315,19 +1313,20 @@ exports.BattleMovedex = { effectType: 'Move', type: 'Normal', }; + // @ts-ignore this.tryMoveHit(target, pokemon, moveData); return false; } this.add('-activate', pokemon, 'move: Bide'); }, - onMoveAborted: function (pokemon) { + onMoveAborted(pokemon) { pokemon.removeVolatile('bide'); }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'move: Bide', '[silent]'); }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMovePower: 100, @@ -1338,7 +1337,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 15, category: "Physical", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "bind", name: "Bind", @@ -1346,7 +1345,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -1386,7 +1385,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "darkiniumz", - secondary: false, + secondary: null, target: "normal", type: "Dark", contestType: "Cool", @@ -1406,7 +1405,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 200, @@ -1448,7 +1447,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move) { + onModifyMove(move) { if (this.isWeather('hail')) move.accuracy = true; }, secondary: { @@ -1466,18 +1465,16 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, 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: "The target cannot switch out.", + shortDesc: "Prevents the target from switching out.", id: "block", name: "Block", pp: 5, priority: 0, flags: {reflectable: 1, mirror: 1}, - onHit: function (target, source, move) { - if (!target.addVolatile('trapped', source, move, 'trapper')) { - this.add('-fail', target); - } + onHit(target, source, move) { + return target.addVolatile('trapped', source, move, 'trapper'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -1496,7 +1493,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "grassiumz", - secondary: false, + secondary: null, target: "normal", type: "Grass", contestType: "Cool", @@ -1593,7 +1590,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 25, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "bonerush", name: "Bone Rush", @@ -1601,7 +1598,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 140, @@ -1621,7 +1618,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, multihit: 2, - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 100, @@ -1640,7 +1637,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - secondary: false, + secondary: null, target: "allAdjacent", type: "Normal", zMovePower: 200, @@ -1651,20 +1648,19 @@ exports.BattleMovedex = { accuracy: 85, basePower: 85, category: "Physical", - 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.", + 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, and Gust and Twister have doubled power when used against it. If the user is holding a Power Herb, the move completes in one turn.", shortDesc: "Bounces turn 1. Hits turn 2. 30% paralyze.", id: "bounce", name: "Bounce", pp: 5, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -1672,7 +1668,7 @@ exports.BattleMovedex = { }, effect: { duration: 2, - onAccuracy: function (accuracy, target, source, move) { + onTryImmunity(target, source, move) { if (move.id === 'gust' || move.id === 'twister') { return; } @@ -1683,9 +1679,9 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, - onSourceBasePower: function (basePower, target, source, move) { + onSourceBasePower(basePower, target, source, move) { if (move.id === 'gust' || move.id === 'twister') { return this.chainModify(2); } @@ -1700,6 +1696,27 @@ exports.BattleMovedex = { zMovePower: 160, contestType: "Cute", }, + "bouncybubble": { + num: 733, + accuracy: 100, + basePower: 90, + category: "Special", + 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.", + id: "bouncybubble", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Bouncy Bubble", + pp: 15, + priority: 0, + flags: {protect: 1, heal: 1}, + drain: [1, 2], + secondary: null, + target: "normal", + type: "Water", + contestType: "Clever", + }, "bravebird": { num: 413, accuracy: 100, @@ -1714,7 +1731,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, recoil: [33, 100], - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 190, @@ -1733,7 +1750,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "normaliumz", - secondary: false, + secondary: null, target: "normal", type: "Normal", contestType: "Cool", @@ -1751,7 +1768,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onTryHit: function (pokemon) { + onTryHit(pokemon) { // will shatter screens through sub, before you hit if (pokemon.runImmunity('Fighting')) { pokemon.side.removeSideCondition('reflect'); @@ -1759,7 +1776,7 @@ exports.BattleMovedex = { pokemon.side.removeSideCondition('auroraveil'); } }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 140, @@ -1778,12 +1795,12 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon, target) { - if (target.hp * 2 < target.maxhp) { + onBasePower(basePower, pokemon, target) { + if (target.hp * 2 <= target.maxhp) { return this.chainModify(2); } }, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 120, @@ -1801,7 +1818,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "allAdjacent", type: "Dark", zMovePower: 120, @@ -1858,14 +1875,14 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - desc: "If this move is successful and the user has not fainted, it steals the target's held Berry if it is holding one and eats it immediately. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", + desc: "If this move is successful and the user has not fainted, it steals the target's held Berry if it is holding one and eats it immediately, gaining its effects even if the user's item is being ignored. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", shortDesc: "User steals and eats the target's Berry.", id: "bugbite", name: "Bug Bite", pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target, source) { + onHit(target, source) { let item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { this.add('-enditem', target, item.name, '[from] stealeat', '[move] Bug Bite', '[of] ' + source); @@ -1875,7 +1892,7 @@ exports.BattleMovedex = { if (item.onEat) source.ateBerry = true; } }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 120, @@ -1922,7 +1939,7 @@ exports.BattleMovedex = { atk: 1, def: 1, }, - secondary: false, + secondary: null, target: "self", type: "Fighting", zMoveBoost: {atk: 1}, @@ -1934,7 +1951,7 @@ exports.BattleMovedex = { basePower: 60, category: "Physical", desc: "Has a 100% chance to lower the target's Speed by 1 stage.", - shortDesc: "100% chance to lower adjacent Pkmn Speed by 1.", + shortDesc: "100% chance lower adjacent Pkmn Speed by 1.", id: "bulldoze", name: "Bulldoze", pp: 20, @@ -1964,7 +1981,7 @@ exports.BattleMovedex = { pp: 30, priority: 1, flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 100, @@ -1975,7 +1992,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 25, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "bulletseed", isViable: true, @@ -1984,7 +2001,7 @@ exports.BattleMovedex = { priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 140, @@ -2002,23 +2019,47 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1, defrost: 1}, - onTryMove: function (pokemon, target, move) { + onTryMove(pokemon, target, move) { if (pokemon.hasType('Fire')) return; this.add('-fail', pokemon, 'move: Burn Up'); + this.attrLastMove('[still]'); return null; }, self: { - onHit: function (pokemon) { + onHit(pokemon) { pokemon.setType(pokemon.getTypes(true).map(type => type === "Fire" ? "???" : type)); this.add('-start', pokemon, 'typechange', pokemon.types.join('/'), '[from] move: Burn Up'); }, }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 195, contestType: "Clever", }, + "buzzybuzz": { + num: 734, + accuracy: 100, + basePower: 90, + category: "Special", + desc: "Has a 100% chance to paralyze the foe.", + shortDesc: "100% chance to paralyze the foe.", + id: "buzzybuzz", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Buzzy Buzz", + pp: 15, + priority: 0, + flags: {protect: 1}, + secondary: { + chance: 100, + status: 'par', + }, + target: "normal", + type: "Electric", + contestType: "Clever", + }, "calmmind": { num: 347, accuracy: true, @@ -2036,7 +2077,7 @@ exports.BattleMovedex = { spa: 1, spd: 1, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveEffect: 'clearnegativeboost', @@ -2054,7 +2095,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {snatch: 1}, - onHit: function (target) { + onHit(target) { let newType = 'Normal'; if (this.isTerrain('electricterrain')) { newType = 'Electric'; @@ -2069,7 +2110,7 @@ exports.BattleMovedex = { if (!target.setType(newType)) return false; this.add('-start', target, 'typechange', newType); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {evasion: 1}, @@ -2080,14 +2121,14 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Lowers the target's Special Attack by 2 stages. The target is unaffected if both the user and the target are the same gender, or if either is genderless. Pokemon with the Ability Oblivious are immune.", + desc: "Lowers the target's Special Attack by 2 stages. The target is unaffected if both the user and the target are the same gender, or if either is genderless. Pokemon with the Oblivious Ability are immune.", shortDesc: "Lowers the foe(s) Sp. Atk by 2 if opposite gender.", id: "captivate", name: "Captivate", pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, - onTryHit: function (pokemon, source) { + onTryHit(pokemon, source) { if ((pokemon.gender === 'M' && source.gender === 'F') || (pokemon.gender === 'F' && source.gender === 'M')) { return; } @@ -2096,7 +2137,7 @@ exports.BattleMovedex = { boosts: { spa: -2, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMoveBoost: {spd: 2}, @@ -2107,7 +2148,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 210, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "catastropika", name: "Catastropika", @@ -2115,7 +2155,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1}, isZ: "pikaniumz", - secondary: false, + secondary: null, target: "normal", type: "Electric", contestType: "Cool", @@ -2125,18 +2165,16 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "It is your birthday.", - shortDesc: "No competitive use. Or any use.", + shortDesc: "No competitive use.", id: "celebrate", name: "Celebrate", pp: 40, priority: 0, flags: {}, - onTryHit: function (target, source) { + onTryHit(target, source) { this.add('-activate', target, 'move: Celebrate'); - return null; }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -2148,23 +2186,23 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Raises the user's Special Defense by 1 stage. If the user uses an Electric-type attack on the next turn, its power will be doubled.", - shortDesc: "Boosts next Electric move and user's Sp. Def by 1.", + shortDesc: "+1 SpD, user's Electric move next turn 2x power.", id: "charge", name: "Charge", pp: 20, priority: 0, flags: {snatch: 1}, volatileStatus: 'charge', - onHit: function (pokemon) { + onHit(pokemon) { this.add('-activate', pokemon, 'move: Charge'); }, effect: { duration: 2, - onRestart: function (pokemon) { + onRestart(pokemon) { this.effectData.duration = 2; }, onBasePowerPriority: 3, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.type === 'Electric') { this.debug('charge boost'); return this.chainModify(2); @@ -2174,7 +2212,7 @@ exports.BattleMovedex = { boosts: { spd: 1, }, - secondary: false, + secondary: null, target: "self", type: "Electric", zMoveBoost: {spd: 1}, @@ -2220,7 +2258,7 @@ exports.BattleMovedex = { boosts: { atk: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMoveBoost: {def: 1}, @@ -2263,7 +2301,7 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1}, ignoreDefensive: true, ignoreEvasion: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, @@ -2274,7 +2312,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 60, category: "Physical", - desc: "If both the user and the target have not fainted, the target is forced to switch out and be replaced with a random unfainted ally. This effect fails if the target used Ingrain previously, has the Ability Suction Cups, or this move hit a substitute.", + desc: "If both the user and the target have not fainted, the target is forced to switch out and be replaced with a random unfainted ally. This effect fails if the target is under the effect of Ingrain, has the Suction Cups Ability, or this move hit a substitute.", shortDesc: "Forces the target to switch to a random ally.", id: "circlethrow", isViable: true, @@ -2293,7 +2331,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 35, category: "Physical", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "clamp", name: "Clamp", @@ -2301,7 +2339,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 100, @@ -2320,35 +2358,63 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - self: { + selfBoost: { boosts: { def: -1, }, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Dragon", zMovePower: 185, contestType: "Tough", }, + "clangoroussoulblaze": { + num: 728, + accuracy: true, + basePower: 185, + category: "Special", + desc: "Raises the user's Attack, Defense, Special Attack, Special Defense, and Speed by 1 stage.", + shortDesc: "Raises the user's Atk/Def/SpAtk/SpDef/Spe by 1.", + id: "clangoroussoulblaze", + name: "Clangorous Soulblaze", + pp: 1, + priority: 0, + flags: {sound: 1, authentic: 1}, + selfBoost: { + boosts: { + atk: 1, + def: 1, + spa: 1, + spd: 1, + spe: 1, + }, + }, + isZ: "kommoniumz", + secondary: { + // Sheer Force negates the selfBoost even though it is not secondary + }, + target: "allAdjacentFoes", + type: "Dragon", + contestType: "Cool", + }, "clearsmog": { num: 499, accuracy: true, basePower: 50, category: "Special", - desc: "Resets all of the target's stat stages to 0.", - shortDesc: "Eliminates the target's stat changes.", + shortDesc: "Resets all of the target's stat stages to 0.", id: "clearsmog", isViable: true, name: "Clear Smog", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function (target) { + onHit(target) { target.clearBoosts(); this.add('-clearboost', target); }, - secondary: false, + secondary: null, target: "normal", type: "Poison", zMovePower: 100, @@ -2373,7 +2439,7 @@ exports.BattleMovedex = { spd: -1, }, }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 190, @@ -2385,7 +2451,7 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Raises the user's Attack, Defense, and accuracy by 1 stage.", - shortDesc: "Raises user's Attack, Defense, and accuracy by 1.", + shortDesc: "Raises user's Attack, Defense, accuracy by 1.", id: "coil", isViable: true, name: "Coil", @@ -2397,7 +2463,7 @@ exports.BattleMovedex = { def: 1, accuracy: 1, }, - secondary: false, + secondary: null, target: "self", type: "Poison", zMoveEffect: 'clearnegativeboost', @@ -2408,7 +2474,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 18, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "cometpunch", name: "Comet Punch", @@ -2416,7 +2482,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -2437,7 +2503,7 @@ exports.BattleMovedex = { boosts: { spa: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spd: 1}, @@ -2456,7 +2522,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, volatileStatus: 'confusion', - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMoveBoost: {spa: 1}, @@ -2519,7 +2585,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "rockiumz", - secondary: false, + secondary: null, target: "normal", type: "Rock", contestType: "Cool", @@ -2536,12 +2602,12 @@ exports.BattleMovedex = { pp: 30, priority: 0, flags: {snatch: 1}, - onHit: function (target) { - let type = this.getMove(target.moveset[0].id).type; + onHit(target) { + let type = this.getMove(target.moveSlots[0].id).type; if (target.hasType(type) || !target.setType(type)) return false; this.add('-start', target, 'typechange', type); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -2559,14 +2625,14 @@ exports.BattleMovedex = { pp: 30, priority: 0, flags: {authentic: 1}, - onHit: function (target, source) { + onHit(target, source) { if (!target.lastMove) { return false; } let possibleTypes = []; - let attackType = this.getMove(target.lastMove).type; + let attackType = target.lastMove.type; for (let type in this.data.TypeChart) { - if (source.hasType(type) || target.hasType(type)) continue; + if (source.hasType(type)) continue; let typeCheck = this.data.TypeChart[type].damageTaken[attackType]; if (typeCheck === 2 || typeCheck === 3) { possibleTypes.push(type); @@ -2575,12 +2641,12 @@ exports.BattleMovedex = { if (!possibleTypes.length) { return false; } - let randomType = possibleTypes[this.random(possibleTypes.length)]; + let randomType = this.sample(possibleTypes); if (!source.setType(randomType)) return false; this.add('-start', source, 'typechange', randomType); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'heal', @@ -2591,21 +2657,21 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was Assist, Baneful Bunker, Belch, Bestow, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Hold Hands, King's Shield, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Roar, Sketch, Sleep Talk, Snatch, Spiky Shield, Struggle, Switcheroo, Thief, Transform, Trick, or Whirlwind.", + desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was Assist, Baneful Bunker, Beak Blast, Belch, Bestow, Celebrate, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Hold Hands, King's Shield, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Roar, Shell Trap, Sketch, Sleep Talk, Snatch, Spiky Shield, Spotlight, Struggle, Switcheroo, Thief, Transform, Trick, Whirlwind, or any Z-Move.", shortDesc: "Uses the last move used in the battle.", id: "copycat", name: "Copycat", pp: 20, priority: 0, flags: {}, - onHit: function (pokemon) { - let noCopycat = {assist:1, banefulbunker:1, bestow:1, chatter:1, circlethrow:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, dragontail:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, protect:1, ragepowder:1, roar:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, transform:1, trick:1, whirlwind:1}; - if (!this.lastMove || noCopycat[this.lastMove] || this.getMove(this.lastMove).isZ) { + onHit(pokemon) { + let noCopycat = ['assist', 'banefulbunker', 'bestow', 'celebrate', 'chatter', 'circlethrow', 'copycat', 'counter', 'covet', 'destinybond', 'detect', 'dragontail', 'endure', 'feint', 'focuspunch', 'followme', 'helpinghand', 'mefirst', 'metronome', 'mimic', 'mirrorcoat', 'mirrormove', 'naturepower', 'protect', 'ragepowder', 'roar', 'sketch', 'sleeptalk', 'snatch', 'struggle', 'switcheroo', 'thief', 'transform', 'trick', 'whirlwind']; + if (!this.lastMove || noCopycat.includes(this.lastMove.id) || this.lastMove.isZ) { return false; } - this.useMove(this.lastMove, pokemon); + this.useMove(this.lastMove.id, pokemon); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {accuracy: 1}, @@ -2616,23 +2682,25 @@ exports.BattleMovedex = { accuracy: 100, basePower: 100, category: "Special", - 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 Multitype or Stance Change, this effect does not happen.", - shortDesc: "Nullifies the foe(s) Ability if the target moves first.", + 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 Battle Bond, Comatose, Disguise, 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.", + shortDesc: "Nullifies the foe(s) Ability if the foe(s) move first.", id: "coreenforcer", isViable: true, name: "Core Enforcer", pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function (target) { - if (target.ability in {multitype:1, stancechange:1}) return; - if (!this.willMove(target)) target.addVolatile('gastroacid'); + onHit(target) { + if (['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'zenmode'].includes(target.ability)) return; + if (target.newlySwitched || this.willMove(target)) return; + target.addVolatile('gastroacid'); }, - onAfterSubDamage: function (target) { - if (target.ability in {multitype:1, stancechange:1}) return; - if (!this.willMove(target)) target.addVolatile('gastroacid'); + onAfterSubDamage(damage, target) { + if (['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'zenmode'].includes(target.ability)) return; + if (target.newlySwitched || this.willMove(target)) return; + target.addVolatile('gastroacid'); }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Dragon", zMovePower: 140, @@ -2651,7 +2719,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "steeliumz", - secondary: false, + secondary: null, target: "normal", type: "Steel", contestType: "Cool", @@ -2672,7 +2740,7 @@ exports.BattleMovedex = { def: 1, spd: 1, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveBoost: {spd: 1}, @@ -2694,7 +2762,7 @@ exports.BattleMovedex = { boosts: { def: 3, }, - secondary: false, + secondary: null, target: "self", type: "Grass", zMoveEffect: 'clearnegativeboost', @@ -2715,7 +2783,7 @@ exports.BattleMovedex = { boosts: { spe: -2, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Grass", zMoveEffect: 'clearnegativeboost', @@ -2725,46 +2793,45 @@ exports.BattleMovedex = { num: 68, accuracy: 100, basePower: 0, - damageCallback: function (pokemon) { + damageCallback(pokemon) { if (!pokemon.volatiles['counter']) return 0; return pokemon.volatiles['counter'].damage || 1; }, category: "Physical", - desc: "Deals damage to the last foe to hit the user with a physical attack this turn equal to twice the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals damage with a Base Power of 1 instead. If that foe's position is no longer in use, the damage is done to a random foe in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by a foe's physical attack this turn.", + desc: "Deals damage to the last opposing Pokemon to hit the user with a physical attack this turn equal to twice the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals 1 HP of damage instead. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's physical attack this turn.", shortDesc: "If hit by physical attack, returns double damage.", id: "counter", name: "Counter", pp: 20, priority: -5, flags: {contact: 1, protect: 1}, - beforeTurnCallback: function (pokemon) { + beforeTurnCallback(pokemon) { pokemon.addVolatile('counter'); }, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!source.volatiles['counter']) return false; if (source.volatiles['counter'].position === null) return false; }, effect: { duration: 1, noCopy: true, - onStart: function (target, source, source2, move) { + onStart(target, source, source2, move) { this.effectData.position = null; this.effectData.damage = 0; }, onRedirectTargetPriority: -1, - onRedirectTarget: function (target, source, source2) { + onRedirectTarget(target, source, source2) { if (source !== this.effectData.target) return; return source.side.foe.active[this.effectData.position]; }, - onDamagePriority: -101, - onDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.effectType === 'Move' && source.side !== target.side && this.getCategory(effect) === 'Physical') { this.effectData.position = source.position; this.effectData.damage = 2 * damage; } }, }, - secondary: false, + secondary: null, target: "scripted", type: "Fighting", zMovePower: 100, @@ -2775,14 +2842,14 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Z-Crystal, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, a Silvally holding a Memory, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Z-Crystal, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, a Silvally holding a Memory, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", shortDesc: "If the user has no item, it steals the target's.", id: "covet", name: "Covet", pp: 25, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target, source) { + onAfterHit(target, source, move) { if (source.item || source.volatiles['gem']) { return; } @@ -2790,13 +2857,13 @@ exports.BattleMovedex = { if (!yourItem) { return; } - if (!source.setItem(yourItem)) { + if (!this.singleEvent('TakeItem', yourItem, target.itemData, source, target, move, yourItem) || !source.setItem(yourItem)) { target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything return; } this.add('-item', source, yourItem, '[from] move: Covet', '[of] ' + target); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 120, @@ -2816,7 +2883,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 180, @@ -2835,22 +2902,22 @@ exports.BattleMovedex = { priority: 3, flags: {}, sideCondition: 'craftyshield', - onTryHitSide: function (side, source) { + onTryHitSide(side, source) { return !!this.willAct(); }, effect: { duration: 1, - onStart: function (target, source) { + onStart(target, source) { this.add('-singleturn', source, 'Crafty Shield'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (move && (move.target === 'self' || move.category !== 'Status')) return; this.add('-activate', target, 'move: Crafty Shield'); - return null; + return this.NOT_FAILURE; }, }, - secondary: false, + secondary: null, target: "allySide", type: "Fairy", zMoveBoost: {spd: 1}, @@ -2870,7 +2937,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 180, @@ -2949,7 +3016,7 @@ exports.BattleMovedex = { num: 462, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { return Math.floor(Math.floor((120 * (100 * Math.floor(target.hp * 4096 / target.maxhp)) + 2048 - 1) / 4096) / 100) || 1; }, category: "Physical", @@ -2960,7 +3027,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 190, @@ -2972,40 +3039,41 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "If the user is not a Ghost type, lowers the user's Speed by 1 stage and raises the user's Attack and Defense by 1 stage. If the user is a Ghost type, 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. 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.", - shortDesc: "Curses if Ghost, else +1 Atk, +1 Def, -1 Spe.", + shortDesc: "Curses if Ghost, else -1 Spe, +1 Atk, +1 Def.", id: "curse", name: "Curse", pp: 10, priority: 0, flags: {authentic: 1}, volatileStatus: 'curse', - onModifyMove: function (move, source, target) { + onModifyMove(move, source, target) { if (!source.hasType('Ghost')) { + // @ts-ignore move.target = move.nonGhostTarget; } }, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!source.hasType('Ghost')) { delete move.volatileStatus; delete move.onHit; - move.self = {boosts: {spe:-1, atk:1, def:1}}; + move.self = {boosts: {spe: -1, atk: 1, def: 1}}; } else if (move.volatileStatus && target.volatiles.curse) { return false; } }, - onHit: function (target, source) { + onHit(target, source) { this.directDamage(source.maxhp / 2, source, source); }, effect: { - onStart: function (pokemon, source) { + onStart(pokemon, source) { this.add('-start', pokemon, 'Curse', '[of] ' + source); }, onResidualOrder: 10, - onResidual: function (pokemon) { + onResidual(pokemon) { this.damage(pokemon.maxhp / 4); }, }, - secondary: false, + secondary: null, target: "normal", nonGhostTarget: "self", type: "Ghost", @@ -3017,14 +3085,13 @@ exports.BattleMovedex = { accuracy: 95, basePower: 50, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "cut", name: "Cut", pp: 30, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -3058,7 +3125,7 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Causes the target to fall asleep. This move cannot be used successfully unless the user's current form, while considering Transform, is Darkrai.", - shortDesc: "Darkrai: Puts the foe(s) to sleep.", + shortDesc: "Darkrai: Causes the foe(s) to fall asleep.", id: "darkvoid", isViable: true, name: "Dark Void", @@ -3066,7 +3133,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'slp', - onTryMove: function (pokemon, target, move) { + onTryMove(pokemon, target, move) { if (pokemon.template.species === 'Darkrai' || move.hasBounced) { return; } @@ -3074,7 +3141,7 @@ exports.BattleMovedex = { this.add('-hint', "Only a Pokemon whose form is Darkrai can use this move."); return null; }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Dark", zMoveEffect: 'clearnegativeboost', @@ -3095,7 +3162,7 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1}, ignoreEvasion: true, ignoreDefensive: true, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 160, @@ -3114,7 +3181,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Fairy", zMovePower: 160, @@ -3137,7 +3204,7 @@ exports.BattleMovedex = { def: 1, spd: 1, }, - secondary: false, + secondary: null, target: "self", type: "Bug", zMoveBoost: {def: 1}, @@ -3162,7 +3229,7 @@ exports.BattleMovedex = { effect: { noCopy: true, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {accuracy: 1}, @@ -3173,7 +3240,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "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, Safeguard, Mist, Spikes, Toxic Spikes, Stealth Rock, and Sticky Web end for the target's side, and the effects of Spikes, Toxic Spikes, Stealth Rock, and Sticky Web end for the user's side. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness.", + desc: "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, and Sticky Web end for the target's side, and the effects of Spikes, Toxic Spikes, Stealth Rock, and Sticky Web end for the user's side. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness.", shortDesc: "-1 evasion; clears user and target side's hazards.", id: "defog", isViable: true, @@ -3181,23 +3248,28 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, - onHit: function (target, source, move) { - if (!target.volatiles['substitute'] || move.infiltrates) this.boost({evasion:-1}); - let removeTarget = {reflect:1, lightscreen:1, auroraveil: 1, safeguard:1, mist:1, spikes:1, toxicspikes:1, stealthrock:1, stickyweb:1}; - let removeAll = {spikes:1, toxicspikes:1, stealthrock:1, stickyweb:1}; - for (let targetCondition in removeTarget) { + onHit(target, source, move) { + /**@type {?boolean | number} */ + let success = false; + if (!target.volatiles['substitute'] || move.infiltrates) success = this.boost({evasion: -1}); + let removeTarget = ['reflect', 'lightscreen', 'auroraveil', 'safeguard', 'mist', 'spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + let removeAll = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + for (const targetCondition of removeTarget) { if (target.side.removeSideCondition(targetCondition)) { - if (!removeAll[targetCondition]) continue; - this.add('-sideend', target.side, this.getEffect(targetCondition).name, '[from] move: Defog', '[of] ' + target); + if (!removeAll.includes(targetCondition)) continue; + this.add('-sideend', target.side, this.getEffect(targetCondition).name, '[from] move: Defog', '[of] ' + source); + success = true; } } - for (let sideCondition in removeAll) { + for (const sideCondition of removeAll) { if (source.side.removeSideCondition(sideCondition)) { this.add('-sideend', source.side, this.getEffect(sideCondition).name, '[from] move: Defog', '[of] ' + source); + success = true; } } + return success; }, - secondary: false, + secondary: null, target: "normal", type: "Flying", zMoveBoost: {accuracy: 1}, @@ -3208,7 +3280,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Until the user's next turn, if a foe's attack knocks the user out, that foe faints as well, unless the attack was Doom Desire or Future Sight.", + desc: "Until the user's next move, if an opposing Pokemon's attack knocks the user out, that Pokemon faints as well, unless the attack was Doom Desire or Future Sight. Fails if the user used this move successfully as its last move, disregarding moves used through the Dancer Ability.", shortDesc: "If an opponent knocks out the user, it also faints.", id: "destinybond", isViable: true, @@ -3217,14 +3289,14 @@ exports.BattleMovedex = { priority: 0, flags: {authentic: 1}, volatileStatus: 'destinybond', - onPrepareHit: function (pokemon) { + onPrepareHit(pokemon) { return !pokemon.removeVolatile('destinybond'); }, effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singlemove', pokemon, 'Destiny Bond'); }, - onFaint: function (target, source, effect) { + onFaint(target, source, effect) { if (!source || !effect || target.side === source.side) return; if (effect.effectType === 'Move' && !effect.isFutureMove) { this.add('-activate', target, 'move: Destiny Bond'); @@ -3232,20 +3304,20 @@ exports.BattleMovedex = { } }, onBeforeMovePriority: -1, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (move.id === 'destinybond') return; this.debug('removing Destiny Bond before attack'); pokemon.removeVolatile('destinybond'); }, - onMoveAborted: function (pokemon, target, move) { + onMoveAborted(pokemon, target, move) { pokemon.removeVolatile('destinybond'); }, onBeforeSwitchOutPriority: 1, - onBeforeSwitchOut: function (pokemon) { + onBeforeSwitchOut(pokemon) { pokemon.removeVolatile('destinybond'); }, }, - secondary: false, + secondary: null, target: "self", type: "Ghost", zMoveEffect: 'redirect', @@ -3256,7 +3328,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", shortDesc: "Prevents moves from affecting the user this turn.", id: "detect", isViable: true, @@ -3266,13 +3338,13 @@ exports.BattleMovedex = { flags: {}, stallingMove: true, volatileStatus: 'protect', - onPrepareHit: function (pokemon) { + onPrepareHit(pokemon) { return !!this.willAct() && this.runEvent('StallMove', pokemon); }, - onHit: function (pokemon) { + onHit(pokemon) { pokemon.addVolatile('stall'); }, - secondary: false, + secondary: null, target: "self", type: "Fighting", zMoveBoost: {evasion: 1}, @@ -3290,7 +3362,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "dragoniumz", - secondary: false, + secondary: null, target: "normal", type: "Dragon", contestType: "Cool", @@ -3333,13 +3405,12 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -3347,10 +3418,10 @@ exports.BattleMovedex = { }, effect: { duration: 2, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm' || type === 'hail') return false; }, - onAccuracy: function (accuracy, target, source, move) { + onTryImmunity(target, source, move) { if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'helpinghand') { return; } @@ -3358,15 +3429,15 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.id === 'earthquake' || move.id === 'magnitude') { return this.chainModify(2); } }, }, - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 160, @@ -3386,10 +3457,15 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, volatileStatus: 'disable', + onTryHit(target) { + if (!target.lastMove || target.lastMove.isZ) { + return false; + } + }, effect: { duration: 4, noCopy: true, // doesn't get copied by Baton Pass - onStart: function (pokemon, source, effect) { + onStart(pokemon, source, effect) { if (!this.willMove(pokemon)) { this.effectData.duration++; } @@ -3397,19 +3473,18 @@ exports.BattleMovedex = { this.debug('pokemon hasn\'t moved yet'); return false; } - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === pokemon.lastMove) { - if (!moves[i].pp) { + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === pokemon.lastMove.id) { + if (!moveSlot.pp) { this.debug('Move out of PP'); return false; } else { if (effect.id === 'cursedbody') { - this.add('-start', pokemon, 'Disable', moves[i].move, '[from] ability: Cursed Body', '[of] ' + source); + this.add('-start', pokemon, 'Disable', moveSlot.move, '[from] ability: Cursed Body', '[of] ' + source); } else { - this.add('-start', pokemon, 'Disable', moves[i].move); + this.add('-start', pokemon, 'Disable', moveSlot.move); } - this.effectData.move = pokemon.lastMove; + this.effectData.move = pokemon.lastMove.id; return; } } @@ -3418,26 +3493,25 @@ exports.BattleMovedex = { return false; }, onResidualOrder: 14, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'Disable'); }, onBeforeMovePriority: 7, - onBeforeMove: function (attacker, defender, move) { + onBeforeMove(attacker, defender, move) { if (move.id === this.effectData.move) { this.add('cant', attacker, 'Disable', move); return false; } }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === this.effectData.move) { - pokemon.disableMove(moves[i].id); + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id === this.effectData.move) { + pokemon.disableMove(moveSlot.id); } } }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -3455,7 +3529,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Fairy", zMovePower: 100, @@ -3495,13 +3569,12 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1, nonsky: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -3509,10 +3582,10 @@ exports.BattleMovedex = { }, effect: { duration: 2, - onImmunity: function (type, pokemon) { + onImmunity(type, pokemon) { if (type === 'sandstorm' || type === 'hail') return false; }, - onAccuracy: function (accuracy, target, source, move) { + onTryImmunity(target, source, move) { if (move.id === 'surf' || move.id === 'whirlpool' || move.id === 'helpinghand') { return; } @@ -3520,15 +3593,15 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.id === 'surf' || move.id === 'whirlpool') { return this.chainModify(2); } }, }, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 160, @@ -3568,7 +3641,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isFutureMove: true, - onTry: function (source, target) { + onTry(source, target) { target.side.addSideCondition('futuremove'); if (target.side.sideConditions['futuremove'].positions[target.position]) { return false; @@ -3593,7 +3666,7 @@ exports.BattleMovedex = { this.add('-start', source, 'Doom Desire'); return null; }, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 200, @@ -3613,7 +3686,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [33, 100], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 190, @@ -3632,12 +3705,37 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: 2, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, contestType: "Cool", }, + "doubleironbash": { + num: 742, + accuracy: 100, + basePower: 60, + category: "Physical", + desc: "Hits twice. If the first hit breaks the target's substitute, it will take damage for the second hit. Has a 30% chance to flinch the target.", + shortDesc: "Hits twice. 30% chance to flinch.", + id: "doubleironbash", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Double Iron Bash", + pp: 5, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + multihit: 2, + secondary: { + chance: 30, + volatileStatus: 'flinch', + }, + target: "normal", + type: "Steel", + zMovePower: 180, + contestType: "Clever", + }, "doublekick": { num: 24, accuracy: 100, @@ -3651,7 +3749,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: 2, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 100, @@ -3662,7 +3760,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 15, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "doubleslap", name: "Double Slap", @@ -3670,7 +3768,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -3691,7 +3789,7 @@ exports.BattleMovedex = { boosts: { evasion: 1, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -3715,7 +3813,7 @@ exports.BattleMovedex = { spa: -2, }, }, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 195, @@ -3771,7 +3869,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "dragonclaw", isViable: true, @@ -3779,7 +3876,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 160, @@ -3802,7 +3899,7 @@ exports.BattleMovedex = { atk: 1, spe: 1, }, - secondary: false, + secondary: null, target: "self", type: "Dragon", zMoveEffect: 'clearnegativeboost', @@ -3813,7 +3910,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 90, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "dragonhammer", isViable: true, @@ -3821,7 +3917,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 175, @@ -3832,7 +3928,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 85, category: "Special", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "dragonpulse", isViable: true, @@ -3840,7 +3935,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, pulse: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Dragon", zMovePower: 160, @@ -3852,14 +3947,13 @@ exports.BattleMovedex = { basePower: 0, damage: 40, category: "Special", - desc: "Deals 40 HP of damage to the target.", - shortDesc: "Always does 40 HP of damage.", + shortDesc: "Deals 40 HP of damage to the target.", id: "dragonrage", name: "Dragon Rage", pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 100, @@ -3891,7 +3985,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 60, category: "Physical", - desc: "If both the user and the target have not fainted, the target is forced to switch out and be replaced with a random unfainted ally. This effect fails if the target used Ingrain previously, has the Ability Suction Cups, or this move hit a substitute.", + desc: "If both the user and the target have not fainted, the target is forced to switch out and be replaced with a random unfainted ally. This effect fails if the target used Ingrain previously, has the Suction Cups Ability, or this move hit a substitute.", shortDesc: "Forces the target to switch to a random ally.", id: "dragontail", isViable: true, @@ -3918,7 +4012,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, drain: [3, 4], - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMovePower: 100, @@ -3938,7 +4032,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, punch: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 140, @@ -3957,13 +4051,13 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - onTryHit: function (target) { + onTryHit(target) { if (target.status !== 'slp' && !target.hasAbility('comatose')) { - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return null; } }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 180, @@ -3974,7 +4068,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "drillpeck", isViable: true, @@ -3982,7 +4075,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 160, @@ -4002,7 +4095,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 160, @@ -4021,7 +4114,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: 2, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 100, @@ -4078,14 +4171,14 @@ exports.BattleMovedex = { basePower: 100, category: "Physical", desc: "Damage doubles if the target is using Dig.", - shortDesc: "Hits adjacent Pokemon. Power doubles on Dig.", + shortDesc: "Hits adjacent Pokemon. Double damage on Dig.", id: "earthquake", isViable: true, name: "Earthquake", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "allAdjacent", type: "Ground", zMovePower: 180, @@ -4095,7 +4188,7 @@ exports.BattleMovedex = { num: 497, accuracy: 100, basePower: 40, - basePowerCallback: function () { + basePowerCallback() { if (this.pseudoWeather.echoedvoice) { return 40 * this.pseudoWeather.echoedvoice.multiplier; } @@ -4109,15 +4202,15 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - onTry: function () { + onTry() { this.addPseudoWeather('echoedvoice'); }, effect: { duration: 2, - onStart: function () { + onStart() { this.effectData.multiplier = 1; }, - onRestart: function () { + onRestart() { if (this.effectData.duration !== 2) { this.effectData.duration = 2; if (this.effectData.multiplier < 5) { @@ -4126,7 +4219,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -4147,7 +4240,7 @@ exports.BattleMovedex = { boosts: { spa: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMoveBoost: {spd: 1}, @@ -4158,14 +4251,13 @@ exports.BattleMovedex = { accuracy: 75, basePower: 100, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "eggbomb", name: "Egg Bomb", pp: 10, priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 180, @@ -4186,13 +4278,13 @@ exports.BattleMovedex = { terrain: 'electricterrain', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('terrainextender')) { return 8; } return 5; }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (status.id === 'slp' && target.isGrounded() && !target.isSemiInvulnerable()) { if (effect.effectType === 'Move' && !effect.secondaries) { this.add('-activate', target, 'move: Electric Terrain'); @@ -4200,20 +4292,20 @@ exports.BattleMovedex = { return false; } }, - onTryAddVolatile: function (status, target) { + onTryAddVolatile(status, target) { if (!target.isGrounded() || target.isSemiInvulnerable()) return; if (status.id === 'yawn') { this.add('-activate', target, 'move: Electric Terrain'); return null; } }, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.type === 'Electric' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { this.debug('electric terrain boost'); return this.chainModify(1.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { this.add('-fieldstart', 'move: Electric Terrain', '[from] ability: ' + effect, '[of] ' + source); } else { @@ -4222,11 +4314,11 @@ exports.BattleMovedex = { }, onResidualOrder: 21, onResidualSubOrder: 2, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Electric Terrain'); }, }, - secondary: false, + secondary: null, target: "all", type: "Electric", zMoveBoost: {spe: 1}, @@ -4237,7 +4329,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Causes the target's move to become Electric type this turn. Fails if the target already moved this turn.", + desc: "Causes the target's move to become Electric type this turn. Among effects that can change a move's type, this effect happens last. Fails if the target already moved this turn.", shortDesc: "Changes the target's move to Electric this turn.", id: "electrify", name: "Electrify", @@ -4245,21 +4337,23 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, mystery: 1}, volatileStatus: 'electrify', - onTryHit: function (target) { + onTryHit(target) { if (!this.willMove(target) && target.activeTurns) return false; }, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'move: Electrify'); }, onModifyMovePriority: -2, - onModifyMove: function (move) { - this.debug('Electrify making move type electric'); - move.type = 'Electric'; + onModifyMove(move) { + if (move.id !== 'struggle') { + this.debug('Electrify making move type electric'); + move.type = 'Electric'; + } }, }, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMoveBoost: {spa: 1}, @@ -4269,7 +4363,7 @@ exports.BattleMovedex = { num: 486, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let ratio = (pokemon.getStat('spe') / target.getStat('spe')); this.debug([40, 60, 80, 120, 150][(Math.floor(ratio) > 4 ? 4 : Math.floor(ratio))] + ' bp'); if (ratio >= 4) { @@ -4287,14 +4381,14 @@ exports.BattleMovedex = { return 40; }, category: "Special", - desc: "The power of this move depends on (user's current Speed / target's current Speed), rounded down. Power is equal to 150 if the result is 4 or more, 120 if 3, 80 if 2, 60 if 1, 40 if less than 1.", + desc: "The power of this move depends on (user's current Speed / target's current Speed), rounded down. Power is equal to 150 if the result is 4 or more, 120 if 3, 80 if 2, 60 if 1, 40 if less than 1. If the target's current Speed is 0, this move's power is 40.", shortDesc: "More power the faster the user is than the target.", id: "electroball", name: "Electro Ball", pp: 10, priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMovePower: 160, @@ -4338,16 +4432,16 @@ exports.BattleMovedex = { volatileStatus: 'embargo', effect: { duration: 5, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'Embargo'); }, // Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js onResidualOrder: 18, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'Embargo'); }, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {spa: 1}, @@ -4379,8 +4473,8 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "For 3 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Mimic, Mirror Move, Sketch, Struggle, or Transform.", - shortDesc: "The target repeats its last move for 3 turns.", + desc: "For its next 3 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Assist, Copycat, Encore, Me First, Metronome, Mimic, Mirror Move, Nature Power, Sketch, Sleep Talk, Struggle, Transform, or any Z-Move.", + shortDesc: "Target repeats its last move for its next 3 turns.", id: "encore", isViable: true, name: "Encore", @@ -4391,45 +4485,46 @@ exports.BattleMovedex = { effect: { duration: 3, noCopy: true, // doesn't get copied by Z-Baton Pass - onStart: function (target) { - let noEncore = {encore:1, mimic:1, mirrormove:1, sketch:1, struggle:1, transform:1}; - let moveIndex = target.moves.indexOf(target.lastMove); - if (!target.lastMove || this.getMove(target.lastMove).isZ || noEncore[target.lastMove] || (target.moveset[moveIndex] && target.moveset[moveIndex].pp <= 0)) { + onStart(target) { + let noEncore = ['assist', 'copycat', 'encore', 'mefirst', 'metronome', 'mimic', 'mirrormove', 'naturepower', 'sketch', 'sleeptalk', 'struggle', 'transform']; + let moveIndex = target.lastMove ? target.moves.indexOf(target.lastMove.id) : -1; + if (!target.lastMove || target.lastMove.isZ || noEncore.includes(target.lastMove.id) || !target.moveSlots[moveIndex] || target.moveSlots[moveIndex].pp <= 0) { // it failed delete target.volatiles['encore']; return false; } - this.effectData.move = target.lastMove; + this.effectData.move = target.lastMove.id; this.add('-start', target, 'Encore'); if (!this.willMove(target)) { this.effectData.duration++; } }, - onOverrideDecision: function (pokemon, target, move) { + onOverrideAction(pokemon, target, move) { if (move.id !== this.effectData.move) return this.effectData.move; }, onResidualOrder: 13, - onResidual: function (target) { - if (target.moves.indexOf(target.lastMove) >= 0 && target.moveset[target.moves.indexOf(target.lastMove)].pp <= 0) { // early termination if you run out of PP + onResidual(target) { + if (target.moves.includes(this.effectData.move) && target.moveSlots[target.moves.indexOf(this.effectData.move)].pp <= 0) { + // early termination if you run out of PP delete target.volatiles.encore; this.add('-end', target, 'Encore'); } }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Encore'); }, - onDisableMove: function (pokemon) { + onDisableMove(pokemon) { if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { return; } - for (let i = 0; i < pokemon.moveset.length; i++) { - if (pokemon.moveset[i].id !== this.effectData.move) { - pokemon.disableMove(pokemon.moveset[i].id); + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id); } } }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -4439,24 +4534,25 @@ exports.BattleMovedex = { num: 283, accuracy: 100, basePower: 0, - damageCallback: function (pokemon, target) { + damageCallback(pokemon, target) { return target.hp - pokemon.hp; }, category: "Physical", desc: "Deals damage to the target equal to (target's current HP - user's current HP). The target is unaffected if its current HP is less than or equal to the user's current HP.", shortDesc: "Lowers the target's HP to the user's HP.", id: "endeavor", + isViable: true, name: "Endeavor", pp: 5, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onTry: function (pokemon, target) { + onTry(pokemon, target) { if (pokemon.hp >= target.hp) { - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return null; } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -4467,8 +4563,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", - shortDesc: "The user survives the next hit with at least 1 HP.", + desc: "The user will survive attacks made by other Pokemon during this turn with at least 1 HP. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", + shortDesc: "User survives attacks this turn with at least 1 HP.", id: "endure", name: "Endure", pp: 10, @@ -4476,26 +4572,26 @@ exports.BattleMovedex = { flags: {}, stallingMove: true, volatileStatus: 'endure', - onTryHit: function (pokemon) { + onTryHit(pokemon) { return this.willAct() && this.runEvent('StallMove', pokemon); }, - onHit: function (pokemon) { + onHit(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'move: Endure'); }, onDamagePriority: -10, - onDamage: function (damage, target, source, effect) { + onDamage(damage, target, source, effect) { if (effect && effect.effectType === 'Move' && damage >= target.hp) { this.add('-activate', target, 'move: Endure'); return target.hp - 1; } }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -4530,22 +4626,22 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is Multitype, Stance Change, Truant, or the same Ability as the user, or if the user's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, or Zen Mode.", + desc: "Causes the target's Ability to become the same as the user's. Fails if the target's Ability is Battle Bond, Comatose, Disguise, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Truant, or the same Ability as the user, or if the user's Ability is Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Illusion, Imposter, Multitype, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, or Zen Mode.", shortDesc: "The target's Ability changes to match the user's.", id: "entrainment", name: "Entrainment", pp: 15, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onTryHit: function (target, source) { + onTryHit(target, source) { if (target === source) return false; - let bannedTargetAbilities = {comatose:1, multitype:1, schooling:1, stancechange:1, truant:1}; - let bannedSourceAbilities = {comatose:1, flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, stancechange:1, trace:1, zenmode:1}; - if (bannedTargetAbilities[target.ability] || bannedSourceAbilities[source.ability] || target.ability === source.ability) { + let bannedTargetAbilities = ['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'truant']; + let bannedSourceAbilities = ['battlebond', 'comatose', 'disguise', 'flowergift', 'forecast', 'illusion', 'imposter', 'multitype', 'powerconstruct', 'powerofalchemy', 'receiver', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'trace', 'zenmode']; + if (bannedTargetAbilities.includes(target.ability) || bannedSourceAbilities.includes(source.ability) || target.ability === source.ability) { return false; } }, - onHit: function (target, source) { + onHit(target, source) { let oldAbility = target.setAbility(source.ability); if (oldAbility) { this.add('-ability', target, this.getAbility(target.ability).name, '[from] move: Entrainment'); @@ -4553,7 +4649,7 @@ exports.BattleMovedex = { } return false; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spd: 1}, @@ -4563,7 +4659,7 @@ exports.BattleMovedex = { num: 284, accuracy: 100, basePower: 150, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { return move.basePower * pokemon.hp / pokemon.maxhp; }, category: "Special", @@ -4575,7 +4671,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Fire", zMovePower: 200, @@ -4586,7 +4682,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 250, category: "Physical", - 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.", + 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 Damp Ability.", shortDesc: "Hits adjacent Pokemon. The user faints.", id: "explosion", isViable: true, @@ -4595,7 +4691,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, selfdestruct: "always", - secondary: false, + secondary: null, target: "allAdjacent", type: "Normal", zMovePower: 200, @@ -4644,7 +4740,7 @@ exports.BattleMovedex = { spd: 2, spe: 2, }, - secondary: false, + secondary: null, target: "self", type: "Normal", contestType: "Beautiful", @@ -4662,7 +4758,7 @@ exports.BattleMovedex = { pp: 5, priority: 2, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -4682,12 +4778,12 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon) { + onBasePower(basePower, pokemon) { if (pokemon.status && pokemon.status !== 'slp') { return this.chainModify(2); } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, @@ -4698,14 +4794,13 @@ exports.BattleMovedex = { accuracy: true, basePower: 60, category: "Physical", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "feintattack", name: "Feint Attack", pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 120, @@ -4716,7 +4811,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Prevents all active Pokemon from switching next turn. A Pokemon can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. Fails if this move was used successfully last turn.", + desc: "Prevents all active Pokemon from switching next turn. A Pokemon can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. Fails if the effect is already active.", shortDesc: "Prevents all Pokemon from switching next turn.", id: "fairylock", name: "Fairy Lock", @@ -4726,14 +4821,14 @@ exports.BattleMovedex = { pseudoWeather: 'fairylock', effect: { duration: 2, - onStart: function (target) { - this.add('-activate', target, 'move: Fairy Lock'); + onStart(target) { + this.add('-fieldactivate', 'move: Fairy Lock'); }, - onTrapPokemon: function (pokemon) { + onTrapPokemon(pokemon) { pokemon.tryTrap(); }, }, - secondary: false, + secondary: null, target: "all", type: "Fairy", zMoveBoost: {def: 1}, @@ -4744,14 +4839,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Special", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "fairywind", name: "Fairy Wind", pp: 30, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMovePower: 100, @@ -4770,8 +4864,9 @@ exports.BattleMovedex = { pp: 10, priority: 3, flags: {contact: 1, protect: 1, mirror: 1}, - onTry: function (pokemon, target) { + onTry(pokemon, target) { if (pokemon.activeTurns > 1) { + this.attrLastMove('[still]'); this.add('-fail', pokemon); this.add('-hint', "Fake Out only works on your first turn out."); return null; @@ -4801,7 +4896,7 @@ exports.BattleMovedex = { boosts: { spd: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {spa: 1}, @@ -4820,7 +4915,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, noFaint: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -4841,7 +4936,7 @@ exports.BattleMovedex = { boosts: { atk: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Flying", zMoveBoost: {def: 1}, @@ -4852,7 +4947,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 30, category: "Physical", - 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.", + desc: "If this move is successful, it breaks through the target's Baneful Bunker, 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.", shortDesc: "Nullifies Detect, Protect, and Quick/Wide Guard.", id: "feint", name: "Feint", @@ -4861,7 +4956,7 @@ exports.BattleMovedex = { flags: {mirror: 1}, breaksProtect: true, // Breaking protection implemented in scripts.js - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -4879,17 +4974,10 @@ exports.BattleMovedex = { pp: 25, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target, pokemon) { - pokemon.addVolatile('fellstinger'); - }, - effect: { - duration: 1, - onAfterMoveSecondarySelf: function (pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) this.boost({atk:3}, pokemon, pokemon, move); - pokemon.removeVolatile('fellstinger'); - }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (!target || target.fainted || target.hp <= 0) this.boost({atk: 3}, pokemon, pokemon, move); }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 100, @@ -4925,7 +5013,7 @@ exports.BattleMovedex = { num: 515, accuracy: 100, basePower: 0, - damageCallback: function (pokemon) { + damageCallback(pokemon) { let damage = pokemon.hp; pokemon.faint(); return damage; @@ -4940,7 +5028,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1}, selfdestruct: "ifHit", - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 180, @@ -5023,43 +5111,45 @@ exports.BattleMovedex = { num: 519, accuracy: 100, basePower: 80, - basePowerCallback: function (target, source, move) { - if (move.sourceEffect in {grasspledge:1, waterpledge:1}) { + basePowerCallback(target, source, move) { + if (['grasspledge', 'waterpledge'].includes(move.sourceEffect)) { this.add('-combine'); return 150; } return 80; }, category: "Special", - desc: "If one of the user's allies chose to use Grass Pledge or Water Pledge this turn and has not moved yet, it takes its turn immediately after the user and the user's move does nothing. If combined with Grass Pledge, the ally uses Fire Pledge with 150 Base Power and a sea of fire appears on the target's side for 4 turns, which causes damage to non-Fire types equal to 1/8 of their maximum HP, rounded down, at the end of each turn during effect. If combined with Water Pledge, the ally uses Water Pledge with 150 Base Power and a rainbow appears on the user's side for 4 turns, which doubles secondary effect chances but does not stack with the Ability Serene Grace. When used as a combined move, this move gains STAB no matter what the user's type is. This move does not consume the user's Fire Gem.", + desc: "If one of the user's allies chose to use Grass Pledge or Water Pledge this turn and has not moved yet, it takes its turn immediately after the user and the user's move does nothing. If combined with Grass Pledge, the ally uses Fire Pledge with 150 power and a sea of fire appears on the target's side for 4 turns, which causes damage to non-Fire types equal to 1/8 of their maximum HP, rounded down, at the end of each turn during effect, including the last turn. If combined with Water Pledge, the ally uses Water Pledge with 150 power and a rainbow appears on the user's side for 4 turns, which doubles secondary effect chances but does not stack with the Serene Grace Ability. When used as a combined move, this move gains STAB no matter what the user's type is. This move does not consume the user's Fire Gem.", shortDesc: "Use with Grass or Water Pledge for added effect.", id: "firepledge", name: "Fire Pledge", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - onPrepareHit: function (target, source, move) { - for (let i = 0; i < this.queue.length; i++) { - let decision = this.queue[i]; - if (!decision.move || !decision.pokemon || !decision.pokemon.isActive || decision.pokemon.fainted) continue; - if (decision.pokemon.side === source.side && decision.move.id in {grasspledge:1, waterpledge:1}) { - this.prioritizeQueue(decision); - this.add('-waiting', source, decision.pokemon); + onPrepareHit(target, source, move) { + for (const action of this.queue) { + // @ts-ignore + if (!action.move || !action.pokemon || !action.pokemon.isActive || action.pokemon.fainted) continue; + // @ts-ignore + if (action.pokemon.side === source.side && ['grasspledge', 'waterpledge'].includes(action.move.id)) { + // @ts-ignore + this.prioritizeAction(action); + this.add('-waiting', source, action.pokemon); return null; } } }, - onModifyMove: function (move) { + onModifyMove(move) { if (move.sourceEffect === 'waterpledge') { move.type = 'Water'; - move.hasSTAB = true; + move.forceSTAB = true; } if (move.sourceEffect === 'grasspledge') { move.type = 'Fire'; - move.hasSTAB = true; + move.forceSTAB = true; } }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.sourceEffect === 'grasspledge') { target.side.addSideCondition('firepledge'); } @@ -5069,22 +5159,21 @@ exports.BattleMovedex = { }, effect: { duration: 4, - onStart: function (targetSide) { + onStart(targetSide) { this.add('-sidestart', targetSide, 'Fire Pledge'); }, - onEnd: function (targetSide) { + onEnd(targetSide) { this.add('-sideend', targetSide, 'Fire Pledge'); }, - onResidual: function (side) { - for (let i = 0; i < side.active.length; i++) { - let pokemon = side.active[i]; + onResidual(side) { + for (const pokemon of side.active) { if (pokemon && !pokemon.hasType('Fire')) { this.damage(pokemon.maxhp / 8, pokemon); } } }, }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 160, @@ -5117,7 +5206,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 35, category: "Special", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "firespin", name: "Fire Spin", @@ -5125,7 +5214,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 100, @@ -5144,14 +5233,15 @@ exports.BattleMovedex = { pp: 10, priority: 2, flags: {contact: 1, protect: 1, mirror: 1}, - onTry: function (pokemon, target) { + onTry(pokemon, target) { if (pokemon.activeTurns > 1) { this.add('-fail', pokemon); + this.attrLastMove('[still]'); this.add('-hint', "First Impression only works on your first turn out."); return null; } }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 175, @@ -5162,7 +5252,7 @@ exports.BattleMovedex = { accuracy: 30, basePower: 0, category: "Physical", - desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Ability Sturdy are immune.", + desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Sturdy Ability are immune.", shortDesc: "OHKOs the target. Fails if user is a lower level.", id: "fissure", name: "Fissure", @@ -5170,7 +5260,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, ohko: true, - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 180, @@ -5180,7 +5270,7 @@ exports.BattleMovedex = { num: 175, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let ratio = pokemon.hp * 48 / pokemon.maxhp; if (ratio < 2) { return 200; @@ -5200,14 +5290,14 @@ exports.BattleMovedex = { return 20; }, category: "Physical", - desc: "Deals damage to the target based on the amount of HP the user has left. X is equal to (user's current HP * 48 / user's maximum HP), rounded down; the base power of this attack is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1.", + desc: "The power of this move is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1, where X is equal to (user's current HP * 48 / user's maximum HP), rounded down.", shortDesc: "More power the less HP the user has left.", id: "flail", name: "Flail", pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -5218,25 +5308,34 @@ exports.BattleMovedex = { accuracy: 100, basePower: 70, category: "Special", - desc: "If this move is successful, each ally adjacent to the target loses 1/16 of its maximum HP, rounded down, unless it has the Ability Magic Guard.", + desc: "If this move is successful, the target's ally loses 1/16 of its maximum HP, rounded down, unless it has the Magic Guard Ability.", shortDesc: "Damages Pokemon next to the target as well.", id: "flameburst", name: "Flame Burst", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function (target, source) { - let allyActive = target.side.active; - if (allyActive.length === 1) { + onHit(target, source, move) { + if (target.side.active.length === 1) { + return; + } + for (const ally of target.side.active) { + if (ally && this.isAdjacent(target, ally)) { + this.damage(ally.maxhp / 16, ally, source, this.getEffect('Flame Burst')); + } + } + }, + onAfterSubDamage(damage, target, source, move) { + if (target.side.active.length === 1) { return; } - for (let i = 0; i < allyActive.length; i++) { - if (allyActive[i] && this.isAdjacent(target, allyActive[i])) { - this.damage(allyActive[i].maxhp / 16, allyActive[i], source, 'flameburst'); + for (const ally of target.side.active) { + if (ally && this.isAdjacent(target, ally)) { + this.damage(ally.maxhp / 16, ally, source, this.getEffect('Flame Burst')); } } }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 140, @@ -5349,7 +5448,7 @@ exports.BattleMovedex = { boosts: { accuracy: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {evasion: 1}, @@ -5395,7 +5494,7 @@ exports.BattleMovedex = { boosts: { spa: 1, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {spd: 1}, @@ -5419,7 +5518,7 @@ exports.BattleMovedex = { spa: -2, }, }, - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMovePower: 195, @@ -5430,65 +5529,71 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Physical", - desc: "The power of this move is based on the user's held item. The held item is lost and it activates for the target if applicable. If there is no target or the target avoids this move by protecting itself, the user's held item is still lost. The user can regain a thrown item with Recycle or the Ability Harvest. Fails if the user has no held item, if the held item cannot be thrown, if the user is under the effect of Embargo or Magic Room, or if the user has the Ability Klutz.", + desc: "The power of this move is based on the user's held item. The held item is lost and it activates for the target if applicable. If there is no target or the target avoids this move by protecting itself, the user's held item is still lost. The user can regain a thrown item with Recycle or the Harvest Ability. Fails if the user has no held item, if the held item cannot be thrown, if the user is under the effect of Embargo or Magic Room, or if the user has the Klutz Ability.", shortDesc: "Flings the user's item at the target. Power varies.", id: "fling", name: "Fling", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, mystery: 1}, - beforeMoveCallback: function (source, target, move) { - if (source.ignoringItem()) return; + onPrepareHit(target, source, move) { + if (source.ignoringItem()) return false; let item = source.getItem(); - if (!this.singleEvent('TakeItem', item, source.itemData, source, source, move, item)) return; - if (item.fling) { - source.addVolatile('fling'); - source.setItem(''); - this.runEvent('AfterUseItem', source, null, null, item); - } - }, - onPrepareHit: function (target, source, move) { - if (!source.volatiles['fling']) return false; - let item = this.getItem(source.volatiles['fling'].item); - this.add("-enditem", source, item.name, '[from] move: Fling'); - }, - onAfterMove: function (pokemon) { - pokemon.removeVolatile('fling'); - }, - effect: { - duration: 1, - onStart: function (pokemon) { - this.effectData.item = pokemon.item; - }, - onModifyMovePriority: -3, - onModifyMove: function (move) { - let item = this.getItem(this.effectData.item); - move.basePower = item.fling.basePower; - if (item.isBerry) { - move.onHit = function (foe) { - if (this.singleEvent('Eat', item, null, foe, null, null)) { - this.runEvent('EatItem', foe, null, null, item); - } - if (item.onEat) foe.ateBerry = true; - }; - } else if (item.fling.effect) { - move.onHit = item.fling.effect; - } else { - if (!move.secondaries) move.secondaries = []; - if (item.fling.status) { - move.secondaries.push({status: item.fling.status}); - } else if (item.fling.volatileStatus) { - move.secondaries.push({volatileStatus: item.fling.volatileStatus}); + if (!this.singleEvent('TakeItem', item, source.itemData, source, source, move, item)) return false; + if (!item.fling) return false; + move.basePower = item.fling.basePower; + if (item.isBerry) { + move.onHit = function (foe) { + if (this.singleEvent('Eat', item, null, foe, null, null)) { + this.runEvent('EatItem', foe, null, null, item); } + if (item.onEat) foe.ateBerry = true; + }; + } else if (item.fling.effect) { + move.onHit = item.fling.effect; + } else { + if (!move.secondaries) move.secondaries = []; + if (item.fling.status) { + move.secondaries.push({status: item.fling.status}); + } else if (item.fling.volatileStatus) { + move.secondaries.push({volatileStatus: item.fling.volatileStatus}); } - }, + } + source.setItem(''); + source.lastItem = item.id; + source.usedItemThisTurn = true; + this.add("-enditem", source, item.name, '[from] move: Fling'); + this.runEvent('AfterUseItem', source, null, null, item); }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 100, contestType: "Cute", }, + "floatyfall": { + num: 731, + accuracy: 95, + basePower: 90, + category: "Physical", + desc: "Has a 30% chance to flinch the target.", + shortDesc: "30% chance to flinch the target.", + id: "floatyfall", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Floaty Fall", + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, gravity: 1}, + secondary: { + chance: 30, + volatileStatus: 'flinch', + }, + target: "normal", + type: "Flying", + contestType: "Cool", + }, "floralhealing": { num: 666, accuracy: true, @@ -5497,19 +5602,18 @@ exports.BattleMovedex = { desc: "The target restores 1/2 of its maximum HP, rounded half up. If the terrain is Grassy Terrain, the target instead restores 2/3 of its maximum HP, rounded half down.", shortDesc: "Heals the target by 50% of its max HP.", id: "floralhealing", - isViable: true, name: "Floral Healing", pp: 10, priority: 0, flags: {protect: 1, reflectable: 1, heal: 1, mystery: 1}, - onHit: function (target) { + onHit(target) { if (this.isTerrain('grassyterrain')) { - this.heal(this.modify(target.maxhp, 0.667)); // TODO: find out the real value + return this.heal(this.modify(target.maxhp, 0.667)); // TODO: find out the real value } else { - this.heal(Math.ceil(target.maxhp * 0.5)); + return this.heal(Math.ceil(target.maxhp * 0.5)); } }, - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMoveEffect: 'clearnegativeboost', @@ -5520,30 +5624,30 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Raises the Defense of all Grass-type Pokemon on the field by 1 stage.", + desc: "Raises the Defense of all active Grass-type Pokemon by 1 stage. Fails if there are no active Grass-type Pokemon.", shortDesc: "Raises Defense by 1 of all active Grass types.", id: "flowershield", name: "Flower Shield", pp: 10, priority: 0, flags: {distance: 1}, - onHitField: function (target, source) { + onHitField(target, source, move) { let targets = []; - for (let sideSlot = 0; sideSlot < this.sides.length; sideSlot++) { - let sideActive = this.sides[sideSlot].active; - for (let activeSlot = 0; activeSlot < sideActive.length; activeSlot++) { - if (sideActive[activeSlot] && sideActive[activeSlot].isActive && sideActive[activeSlot].hasType('Grass')) { + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon && pokemon.isActive && pokemon.hasType('Grass')) { // This move affects every Grass-type Pokemon in play. - targets.push(sideActive[activeSlot]); + targets.push(pokemon); } } } - if (!targets.length) return false; // No targets; move fails - for (let i = 0; i < targets.length; i++) { - this.boost({def: 1}, targets[i], source, this.getMove('Flower Shield')); + let success = false; + for (const target of targets) { + success = this.boost({def: 1}, target, source, move) || success; } + return success; }, - secondary: false, + secondary: null, target: "all", type: "Fairy", zMoveBoost: {def: 1}, @@ -5554,20 +5658,19 @@ exports.BattleMovedex = { accuracy: 95, basePower: 90, category: "Physical", - 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.", + 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, and Gust and Twister have doubled power when used against it. If the user is holding a Power Herb, the move completes in one turn.", shortDesc: "Flies up on first turn, then strikes the next turn.", id: "fly", name: "Fly", pp: 15, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -5575,7 +5678,7 @@ exports.BattleMovedex = { }, effect: { duration: 2, - onAccuracy: function (accuracy, target, source, move) { + onTryImmunity(target, source, move) { if (move.id === 'gust' || move.id === 'twister') { return; } @@ -5586,15 +5689,15 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, - onSourceModifyDamage: function (damage, source, target, move) { + onSourceModifyDamage(damage, source, target, move) { if (move.id === 'gust' || move.id === 'twister') { return this.chainModify(2); } }, }, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 175, @@ -5611,11 +5714,11 @@ exports.BattleMovedex = { name: "Flying Press", pp: 10, flags: {contact: 1, protect: 1, mirror: 1, gravity: 1, distance: 1, nonsky: 1}, - onEffectiveness: function (typeMod, type, move) { + onEffectiveness(typeMod, target, type, move) { return typeMod + this.getEffectiveness('Flying', type); }, priority: 0, - secondary: false, + secondary: null, target: "any", type: "Fighting", zMovePower: 170, @@ -5659,18 +5762,20 @@ exports.BattleMovedex = { flags: {snatch: 1}, volatileStatus: 'focusenergy', effect: { - onStart: function (target, source, effect) { + onStart(target, source, effect) { if (effect && effect.id === 'zpower') { this.add('-start', target, 'move: Focus Energy', '[zeffect]'); + } else if (effect && (['imposter', 'psychup', 'transform'].includes(effect.id))) { + this.add('-start', target, 'move: Focus Energy', '[silent]'); } else { this.add('-start', target, 'move: Focus Energy'); } }, - onModifyCritRatio: function (critRatio) { + onModifyCritRatio(critRatio) { return critRatio + 2; }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {accuracy: 1}, @@ -5684,14 +5789,15 @@ exports.BattleMovedex = { desc: "The user loses its focus and does nothing if it is hit by a damaging attack this turn before it can execute the move.", shortDesc: "Fails if the user takes damage before it hits.", id: "focuspunch", + isViable: true, name: "Focus Punch", pp: 20, priority: -3, flags: {contact: 1, protect: 1, punch: 1}, - beforeTurnCallback: function (pokemon) { + beforeTurnCallback(pokemon) { pokemon.addVolatile('focuspunch'); }, - beforeMoveCallback: function (pokemon) { + beforeMoveCallback(pokemon) { if (pokemon.volatiles['focuspunch'] && pokemon.volatiles['focuspunch'].lostFocus) { this.add('cant', pokemon, 'Focus Punch', 'Focus Punch'); return true; @@ -5699,16 +5805,16 @@ exports.BattleMovedex = { }, effect: { duration: 1, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singleturn', pokemon, 'move: Focus Punch'); }, - onHit: function (pokemon, source, move) { + onHit(pokemon, source, move) { if (move.category !== 'Status') { pokemon.volatiles['focuspunch'].lostFocus = true; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 200, @@ -5719,7 +5825,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Until the end of the turn, all single-target attacks from the foe's team are redirected to the user if they are in range. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Ability Magic Bounce, or drawn in by the Abilities Lightning Rod or Storm Drain. Fails if it is not a Double or Triple Battle.", + desc: "Until the end of the turn, all single-target attacks from the opposing side are redirected to the user. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Magic Bounce Ability, or drawn in by the Lightning Rod or Storm Drain Abilities. Fails if it is not a Double Battle or Battle Royal. This effect is ignored while the user is under the effect of Sky Drop.", shortDesc: "The foes' moves target the user on the turn used.", id: "followme", name: "Follow Me", @@ -5727,12 +5833,12 @@ exports.BattleMovedex = { priority: 2, flags: {}, volatileStatus: 'followme', - onTryHit: function (target) { + onTryHit(target) { if (target.side.active.length < 2) return false; }, effect: { duration: 1, - onStart: function (target, source, effect) { + onStart(target, source, effect) { if (effect && effect.id === 'zpower') { this.add('-singleturn', target, 'move: Follow Me', '[zeffect]'); } else { @@ -5740,14 +5846,14 @@ exports.BattleMovedex = { } }, onFoeRedirectTargetPriority: 1, - onFoeRedirectTarget: function (target, source, source2, move) { - if (this.validTarget(this.effectData.target, source, move.target)) { + onFoeRedirectTarget(target, source, source2, move) { + if (!this.effectData.target.isSkyDropped() && this.validTarget(this.effectData.target, source, move.target)) { this.debug("Follow Me redirected target of move"); return this.effectData.target; } }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -5779,7 +5885,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Causes the target to have its positive evasiveness stat stage ignored while it is active. Normal- and Fighting-type attacks can hit the target if it is a Ghost type. The effect ends when the target is no longer active. Fails if the target is already affected, or affected by Miracle Eye or Odor Sleuth.", + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it if it is greater than 0, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type. Fails if the target is already affected, or affected by Miracle Eye or Odor Sleuth.", shortDesc: "Fighting, Normal hit Ghost. Evasiveness ignored.", id: "foresight", name: "Foresight", @@ -5787,24 +5893,24 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, volatileStatus: 'foresight', - onTryHit: function (target) { + onTryHit(target) { if (target.volatiles['miracleeye']) return false; }, effect: { noCopy: true, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'Foresight'); }, - onNegateImmunity: function (pokemon, type) { - if (pokemon.hasType('Ghost') && type in {'Normal': 1, 'Fighting': 1}) return false; + onNegateImmunity(pokemon, type) { + if (pokemon.hasType('Ghost') && ['Normal', 'Fighting'].includes(type)) return false; }, - onModifyBoost: function (boosts) { + onModifyBoost(boosts) { if (boosts.evasion && boosts.evasion > 0) { boosts.evasion = 0; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'crit2', @@ -5822,12 +5928,12 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onHit: function (target) { + onHit(target) { if (target.hasType('Grass')) return false; if (!target.addType('Grass')) return false; this.add('-start', target, 'typeadd', 'Grass', '[from] move: Forest\'s Curse'); }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -5847,7 +5953,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, useTargetOffensive: true, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 175, @@ -5866,7 +5972,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - onEffectiveness: function (typeMod, type) { + onEffectiveness(typeMod, target, type) { if (type === 'Water') return 1; }, secondary: { @@ -5890,13 +5996,12 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {charge: 1, protect: 1, mirror: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -5911,12 +6016,40 @@ exports.BattleMovedex = { zMovePower: 200, contestType: "Beautiful", }, + "freezyfrost": { + num: 739, + accuracy: 100, + basePower: 90, + category: "Special", + desc: "Resets the stat stages of all active Pokemon to 0.", + shortDesc: "Eliminates all stat changes.", + id: "freezyfrost", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Freezy Frost", + pp: 15, + priority: 0, + flags: {protect: 1}, + onHit() { + this.add('-clearallboost'); + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon && pokemon.isActive) pokemon.clearBoosts(); + } + } + }, + secondary: null, + target: "normal", + type: "Ice", + contestType: "Clever", + }, "frenzyplant": { num: 338, accuracy: 90, basePower: 150, category: "Special", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "frenzyplant", name: "Frenzy Plant", @@ -5926,7 +6059,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 200, @@ -5937,7 +6070,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 60, category: "Special", - 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.", + desc: "This move is always a critical hit unless the target is under the effect of Lucky Chant or has the Battle Armor or Shell Armor Abilities.", shortDesc: "Always results in a critical hit.", id: "frostbreath", name: "Frost Breath", @@ -5945,7 +6078,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, willCrit: true, - secondary: false, + secondary: null, target: "normal", type: "Ice", zMovePower: 120, @@ -5955,7 +6088,7 @@ exports.BattleMovedex = { num: 218, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon) { + basePowerCallback(pokemon) { return Math.floor(((255 - pokemon.happiness) * 10) / 25) || 1; }, category: "Physical", @@ -5967,7 +6100,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -5978,7 +6111,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 15, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "furyattack", name: "Fury Attack", @@ -5986,7 +6119,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -5996,36 +6129,36 @@ exports.BattleMovedex = { num: 210, accuracy: 95, basePower: 40, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (!pokemon.volatiles.furycutter) { pokemon.addVolatile('furycutter'); } return this.clampIntRange(move.basePower * pokemon.volatiles.furycutter.multiplier, 1, 160); }, category: "Physical", - desc: "Power doubles with each successful hit, up to a maximum of 160 power; power is reset if the move misses or another move is used.", + desc: "Power doubles with each successful hit, up to a maximum of 160 power. The power is reset if this move misses or another move is used.", shortDesc: "Power doubles with each hit, up to 160.", id: "furycutter", name: "Fury Cutter", pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target, source) { + onHit(target, source) { source.addVolatile('furycutter'); }, effect: { duration: 2, - onStart: function () { + onStart() { this.effectData.multiplier = 1; }, - onRestart: function () { + onRestart() { if (this.effectData.multiplier < 4) { this.effectData.multiplier <<= 1; } this.effectData.duration = 2; }, }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 100, @@ -6036,7 +6169,7 @@ exports.BattleMovedex = { accuracy: 80, basePower: 18, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "furyswipes", name: "Fury Swipes", @@ -6044,7 +6177,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -6064,16 +6197,15 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon) { - let actives = pokemon.side.active; - for (let i = 0; i < actives.length; i++) { - if (actives[i] && actives[i].moveThisTurn === 'fusionflare') { + onBasePower(basePower, pokemon) { + for (const active of pokemon.side.active) { + if (active && active.moveThisTurn === 'fusionflare') { this.debug('double power'); return this.chainModify(2); } } }, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMovePower: 180, @@ -6093,16 +6225,15 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, defrost: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon) { - let actives = pokemon.side.active; - for (let i = 0; i < actives.length; i++) { - if (actives[i] && actives[i].moveThisTurn === 'fusionbolt') { + onBasePower(basePower, pokemon) { + for (const active of pokemon.side.active) { + if (active && active.moveThisTurn === 'fusionbolt') { this.debug('double power'); return this.chainModify(2); } } }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 180, @@ -6122,7 +6253,7 @@ exports.BattleMovedex = { flags: {}, ignoreImmunity: true, isFutureMove: true, - onTry: function (source, target) { + onTry(source, target) { target.side.addSideCondition('futuremove'); if (target.side.sideConditions['futuremove'].positions[target.position]) { return false; @@ -6148,7 +6279,7 @@ exports.BattleMovedex = { this.add('-start', source, 'move: Future Sight'); return null; }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 190, @@ -6159,7 +6290,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - 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. Fails if the target's Ability is Multitype or Stance Change.", + 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 Battle Bond, Comatose, Disguise, 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.", shortDesc: "Nullifies the target's Ability.", id: "gastroacid", name: "Gastro Acid", @@ -6167,20 +6298,20 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, volatileStatus: 'gastroacid', - onTryHit: function (pokemon) { - let bannedAbilities = {comatose:1, multitype:1, schooling:1, stancechange:1}; - if (bannedAbilities[pokemon.ability]) { + onTryHit(pokemon) { + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'zenmode']; + if (bannedAbilities.includes(pokemon.ability)) { return false; } }, effect: { // Ability suppression implemented in Pokemon.ignoringAbility() within sim/pokemon.js - onStart: function (pokemon) { + onStart(pokemon) { this.add('-endability', pokemon); this.singleEvent('End', this.getAbility(pokemon.ability), pokemon.abilityData, pokemon, pokemon, 'gastroacid'); }, }, - secondary: false, + secondary: null, target: "normal", type: "Poison", zMoveBoost: {spe: 1}, @@ -6200,7 +6331,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: 2, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 180, @@ -6211,14 +6342,14 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Raises the Attack and Special Attack of Pokemon on the user's side with the Abilities Plus or Minus by 1 stage.", + desc: "Raises the Attack and Special Attack of Pokemon on the user's side with the Plus or Minus Abilities by 1 stage.", shortDesc: "Raises Atk, Sp. Atk of allies with Plus/Minus by 1.", id: "gearup", name: "Gear Up", pp: 20, priority: 0, flags: {snatch: 1, authentic: 1}, - onHitSide: function (side, source) { + onHitSide(side, source, move) { let targets = []; for (let p in side.active) { if (side.active[p].hasAbility(['plus', 'minus'])) { @@ -6226,9 +6357,11 @@ exports.BattleMovedex = { } } if (!targets.length) return false; - for (let i = 0; i < targets.length; i++) this.boost({atk: 1, spa: 1}, targets[i], source, 'move: Gear Up'); + for (const target of targets) { + this.boost({atk: 1, spa: 1}, target, source, move); + } }, - secondary: false, + secondary: null, target: "allySide", type: "Steel", zMoveBoost: {spa: 1}, @@ -6239,7 +6372,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 185, category: "Special", - desc: "The terrain becomes Psychic Terrain.", + desc: "If this move is successful, the terrain becomes Psychic Terrain.", shortDesc: "Summons Psychic Terrain.", id: "genesissupernova", name: "Genesis Supernova", @@ -6250,7 +6383,7 @@ exports.BattleMovedex = { secondary: { chance: 100, self: { - onHit: function () { + onHit() { this.setTerrain('psychicterrain'); }, }, @@ -6272,14 +6405,12 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {charge: 1, nonsky: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); - attacker.removeVolatile(move.id); return; } attacker.addVolatile('twoturnmove', defender); @@ -6290,7 +6421,7 @@ exports.BattleMovedex = { spd: 2, spe: 2, }, - secondary: false, + secondary: null, target: "self", type: "Fairy", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -6310,7 +6441,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 140, @@ -6321,7 +6452,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 150, category: "Physical", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "gigaimpact", name: "Giga Impact", @@ -6331,7 +6462,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 200, @@ -6350,7 +6481,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "electriumz", - secondary: false, + secondary: null, target: "normal", type: "Electric", contestType: "Cool", @@ -6392,17 +6523,40 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'par', - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spd: 1}, contestType: "Tough", }, + "glitzyglow": { + num: 736, + accuracy: 100, + basePower: 90, + category: "Special", + desc: "This move summons Light Screen for 5 turns upon use.", + shortDesc: "Summons Light Screen.", + id: "glitzyglow", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Glitzy Glow", + pp: 15, + priority: 0, + flags: {protect: 1}, + self: { + sideCondition: 'lightscreen', + }, + secondary: null, + target: "normal", + type: "Psychic", + contestType: "Clever", + }, "grassknot": { num: 447, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let targetWeight = target.getWeight(); if (targetWeight >= 200) { this.debug('120 bp'); @@ -6428,7 +6582,7 @@ exports.BattleMovedex = { return 20; }, category: "Special", - desc: "Deals damage to the target based on its weight. Power is 20 if less than 10kg, 40 if less than 25kg, 60 if less than 50kg, 80 if less than 100kg, 100 if less than 200kg, and 120 if greater than or equal to 200kg.", + desc: "This move's power is 20 if the target weighs less than 10 kg, 40 if less than 25 kg, 60 if less than 50 kg, 80 if less than 100 kg, 100 if less than 200 kg, and 120 if greater than or equal to 200 kg.", shortDesc: "More power the heavier the target.", id: "grassknot", isViable: true, @@ -6436,7 +6590,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 160, @@ -6446,43 +6600,45 @@ exports.BattleMovedex = { num: 520, accuracy: 100, basePower: 80, - basePowerCallback: function (target, source, move) { - if (move.sourceEffect in {waterpledge:1, firepledge:1}) { + basePowerCallback(target, source, move) { + if (['waterpledge', 'firepledge'].includes(move.sourceEffect)) { this.add('-combine'); return 150; } return 80; }, category: "Special", - desc: "If one of the user's allies chose to use Fire Pledge or Water Pledge this turn and has not moved yet, it takes its turn immediately after the user and the user's move does nothing. If combined with Fire Pledge, the ally uses Fire Pledge with 150 Base Power and a sea of fire appears on the target's side for 4 turns, which causes damage to non-Fire types equal to 1/8 of their maximum HP, rounded down, at the end of each turn during effect. If combined with Water Pledge, the ally uses Grass Pledge with 150 Base Power and a swamp appears on the target's side for 4 turns, which quarters the Speed of each Pokemon on that side. When used as a combined move, this move gains STAB no matter what the user's type is. This move does not consume the user's Grass Gem.", + desc: "If one of the user's allies chose to use Fire Pledge or Water Pledge this turn and has not moved yet, it takes its turn immediately after the user and the user's move does nothing. If combined with Fire Pledge, the ally uses Fire Pledge with 150 power and a sea of fire appears on the target's side for 4 turns, which causes damage to non-Fire types equal to 1/8 of their maximum HP, rounded down, at the end of each turn during effect, including the last turn. If combined with Water Pledge, the ally uses Grass Pledge with 150 power and a swamp appears on the target's side for 4 turns, which quarters the Speed of each Pokemon on that side. When used as a combined move, this move gains STAB no matter what the user's type is. This move does not consume the user's Grass Gem.", shortDesc: "Use with Fire or Water Pledge for added effect.", id: "grasspledge", name: "Grass Pledge", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - onPrepareHit: function (target, source, move) { - for (let i = 0; i < this.queue.length; i++) { - let decision = this.queue[i]; - if (!decision.move || !decision.pokemon || !decision.pokemon.isActive || decision.pokemon.fainted) continue; - if (decision.pokemon.side === source.side && decision.move.id in {waterpledge:1, firepledge:1}) { - this.prioritizeQueue(decision); - this.add('-waiting', source, decision.pokemon); + onPrepareHit(target, source, move) { + for (const action of this.queue) { + // @ts-ignore + if (!action.move || !action.pokemon || !action.pokemon.isActive || action.pokemon.fainted) continue; + // @ts-ignore + if (action.pokemon.side === source.side && ['waterpledge', 'firepledge'].includes(action.move.id)) { + // @ts-ignore + this.prioritizeAction(action); + this.add('-waiting', source, action.pokemon); return null; } } }, - onModifyMove: function (move) { + onModifyMove(move) { if (move.sourceEffect === 'waterpledge') { move.type = 'Grass'; - move.hasSTAB = true; + move.forceSTAB = true; } if (move.sourceEffect === 'firepledge') { move.type = 'Fire'; - move.hasSTAB = true; + move.forceSTAB = true; } }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.sourceEffect === 'waterpledge') { target.side.addSideCondition('grasspledge'); } @@ -6492,17 +6648,17 @@ exports.BattleMovedex = { }, effect: { duration: 4, - onStart: function (targetSide) { + onStart(targetSide) { this.add('-sidestart', targetSide, 'Grass Pledge'); }, - onEnd: function (targetSide) { + onEnd(targetSide) { this.add('-sideend', targetSide, 'Grass Pledge'); }, - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { return this.chainModify(0.25); }, }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 160, @@ -6513,15 +6669,14 @@ exports.BattleMovedex = { accuracy: 55, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the target to sleep.", + shortDesc: "Causes the target to fall asleep.", id: "grasswhistle", name: "Grass Whistle", pp: 15, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, authentic: 1}, status: 'slp', - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveBoost: {spe: 1}, @@ -6542,15 +6697,15 @@ exports.BattleMovedex = { terrain: 'grassyterrain', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('terrainextender')) { return 8; } return 5; }, - onBasePower: function (basePower, attacker, defender, move) { - let weakenedMoves = {'earthquake':1, 'bulldoze':1, 'magnitude':1}; - if (move.id in weakenedMoves) { + onBasePower(basePower, attacker, defender, move) { + let weakenedMoves = ['earthquake', 'bulldoze', 'magnitude']; + if (weakenedMoves.includes(move.id)) { this.debug('move weakened by grassy terrain'); return this.chainModify(0.5); } @@ -6559,7 +6714,7 @@ exports.BattleMovedex = { return this.chainModify(1.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { this.add('-fieldstart', 'move: Grassy Terrain', '[from] ability: ' + effect, '[of] ' + source); } else { @@ -6567,22 +6722,22 @@ exports.BattleMovedex = { } }, onResidualOrder: 5, - onResidualSubOrder: 2, - onResidual: function () { + onResidualSubOrder: 3, + onResidual() { this.eachEvent('Terrain'); }, - onTerrain: function (pokemon) { + onTerrain(pokemon) { if (pokemon.isGrounded() && !pokemon.isSemiInvulnerable()) { this.debug('Pokemon is grounded, healing through Grassy Terrain.'); this.heal(pokemon.maxhp / 16, pokemon, pokemon); } }, - onEnd: function () { - this.eachEvent('Terrain'); + onEnd() { + if (!this.effectData.duration) this.eachEvent('Terrain'); this.add('-fieldend', 'move: Grassy Terrain'); }, }, - secondary: false, + secondary: null, target: "all", type: "Grass", zMoveBoost: {def: 1}, @@ -6593,7 +6748,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "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 Ability Arena Trap can affect Flying types or Pokemon with the Ability Levitate. Fails if this move is already in effect.", + desc: "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: "For 5 turns, negates all Ground immunities.", id: "gravity", name: "Gravity", @@ -6603,16 +6758,16 @@ exports.BattleMovedex = { pseudoWeather: 'gravity', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 7; } return 5; }, - onStart: function () { + onStart() { this.add('-fieldstart', 'move: Gravity'); - const allActivePokemon = this.sides[0].active.concat(this.sides[1].active); - for (let pokemon of allActivePokemon) { + for (const pokemon of this.sides[0].active.concat(this.sides[1].active)) { let applies = false; if (pokemon.removeVolatile('bounce') || pokemon.removeVolatile('fly')) { applies = true; @@ -6640,31 +6795,31 @@ exports.BattleMovedex = { if (applies) this.add('-activate', pokemon, 'move: Gravity'); } }, - onModifyAccuracy: function (accuracy) { + onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; return accuracy * 5 / 3; }, - onDisableMove: function (pokemon) { - for (let i = 0; i < pokemon.moveset.length; i++) { - if (this.getMove(pokemon.moveset[i].id).flags['gravity']) { - pokemon.disableMove(pokemon.moveset[i].id); + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).flags['gravity']) { + pokemon.disableMove(moveSlot.id); } } }, // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded onBeforeMovePriority: 6, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (move.flags['gravity']) { this.add('cant', pokemon, 'move: Gravity', move); return false; } }, onResidualOrder: 22, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Gravity'); }, }, - secondary: false, + secondary: null, target: "all", type: "Psychic", zMoveBoost: {spa: 1}, @@ -6685,7 +6840,7 @@ exports.BattleMovedex = { boosts: { atk: -1, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMoveBoost: {def: 1}, @@ -6703,14 +6858,14 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {snatch: 1}, - onModifyMove: function (move) { + onModifyMove(move) { if (this.isWeather(['sunnyday', 'desolateland'])) move.boosts = {atk: 2, spa: 2}; }, boosts: { atk: 1, spa: 1, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {spa: 1}, @@ -6721,7 +6876,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Until the user's next turn, if a foe's attack knocks the user out, that foe loses all remaining PP for that attack.", + desc: "Until the user's next turn, if an opposing Pokemon's attack knocks the user out, that move loses all its remaining PP.", shortDesc: "If the user faints, the attack used loses all its PP.", id: "grudge", name: "Grudge", @@ -6730,27 +6885,27 @@ exports.BattleMovedex = { flags: {authentic: 1}, volatileStatus: 'grudge', effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singlemove', pokemon, 'Grudge'); }, - onFaint: function (target, source, effect) { - if (!source || !effect) return; - if (effect.effectType === 'Move' && !effect.isFutureMove) { - for (let i in source.moveset) { - if (source.moveset[i].id === source.lastMove) { - source.moveset[i].pp = 0; - this.add('-activate', source, 'move: Grudge', this.getMove(source.lastMove).name); + onFaint(target, source, effect) { + if (!source || source.fainted || !effect) return; + if (effect.effectType === 'Move' && !effect.isFutureMove && source.lastMove) { + for (const moveSlot of source.moveSlots) { + if (moveSlot.id === source.lastMove.id) { + moveSlot.pp = 0; + this.add('-activate', source, 'move: Grudge', this.getMove(source.lastMove.id).name); } } } }, onBeforeMovePriority: 100, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { this.debug('removing Grudge before attack'); pokemon.removeVolatile('grudge'); }, }, - secondary: false, + secondary: null, target: "self", type: "Ghost", zMoveEffect: 'redirect', @@ -6768,7 +6923,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { let newdef = Math.floor((target.stats.def + source.stats.def) / 2); target.stats.def = newdef; source.stats.def = newdef; @@ -6777,7 +6932,7 @@ exports.BattleMovedex = { source.stats.spd = newspd; this.add('-activate', source, 'move: Guard Split', '[of] ' + target); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -6795,13 +6950,15 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { let targetBoosts = {}; let sourceBoosts = {}; - for (let i in {def:1, spd:1}) { - targetBoosts[i] = target.boosts[i]; - sourceBoosts[i] = source.boosts[i]; + for (const stat of ['def', 'spd']) { + // @ts-ignore + targetBoosts[stat] = target.boosts[stat]; + // @ts-ignore + sourceBoosts[stat] = source.boosts[stat]; } source.setBoost(targetBoosts); @@ -6809,7 +6966,7 @@ exports.BattleMovedex = { this.add('-swapboost', source, target, 'def, spd', '[from] move: Guard Swap'); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -6819,9 +6976,9 @@ exports.BattleMovedex = { num: 698, accuracy: true, basePower: 0, - damageCallback: function (pokemon, target) { + damageCallback(pokemon, target) { if (target.volatiles['banefulbunker'] || target.volatiles['kingsshield'] || target.side.sideConditions['matblock'] || target.volatiles['protect'] || target.volatiles['spikyshield']) { - this.add('-message', target.name + " couldn't fully protect itself and got hurt! (placeholder)"); + this.add('-zbroken', target); return this.clampIntRange(Math.ceil(Math.floor(target.hp * 3 / 4) / 4 - 0.5), 1); } return this.clampIntRange(Math.floor(target.hp * 3 / 4), 1); @@ -6835,7 +6992,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "tapuniumz", - secondary: false, + secondary: null, target: "normal", type: "Fairy", contestType: "Tough", @@ -6845,7 +7002,7 @@ exports.BattleMovedex = { accuracy: 30, basePower: 0, category: "Physical", - desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Ability Sturdy are immune.", + desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Sturdy Ability are immune.", shortDesc: "OHKOs the target. Fails if user is a lower level.", id: "guillotine", name: "Guillotine", @@ -6853,7 +7010,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, ohko: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 180, @@ -6886,14 +7043,14 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Special", - desc: "Damage doubles if the target is using Bounce, Fly, or Sky Drop.", - shortDesc: "Power doubles during Fly, Bounce, and Sky Drop.", + desc: "Power doubles if the target is using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop.", + shortDesc: "Power doubles during Bounce, Fly, and Sky Drop.", id: "gust", name: "Gust", pp: 35, priority: 0, flags: {protect: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 100, @@ -6903,14 +7060,14 @@ exports.BattleMovedex = { num: 360, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let power = (Math.floor(25 * target.getStat('spe') / pokemon.getStat('spe')) || 1); if (power > 150) power = 150; this.debug('' + power + ' bp'); return power; }, category: "Physical", - desc: "Power is equal to (25 * target's current Speed / user's current Speed), rounded down, + 1, but not more than 150.", + desc: "Power is equal to (25 * target's current Speed / user's current Speed) + 1, rounded down, but not more than 150. If the user's current Speed is 0, this move's power is 1.", shortDesc: "More power the slower the user than the target.", id: "gyroball", isViable: true, @@ -6918,7 +7075,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {bullet: 1, contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 160, @@ -6929,7 +7086,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the weather becomes Hail. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are an Ice type, or have the Abilities Ice Body, Magic Guard, Overcoat, or Snow Cloak. Lasts for 8 turns if the user is holding Icy Rock. Fails if the current weather is Hail.", + desc: "For 5 turns, the weather becomes Hail. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are an Ice type or have the Ice Body, Magic Guard, Overcoat, or Snow Cloak Abilities. Lasts for 8 turns if the user is holding Icy Rock. Fails if the current weather is Hail.", shortDesc: "For 5 turns, hail crashes down.", id: "hail", name: "Hail", @@ -6937,7 +7094,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, weather: 'hail', - secondary: false, + secondary: null, target: "all", type: "Ice", zMoveBoost: {spe: 1}, @@ -6961,7 +7118,7 @@ exports.BattleMovedex = { spe: -1, }, }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 180, @@ -6972,18 +7129,16 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Money falls from the sky.", shortDesc: "No competitive use.", id: "happyhour", name: "Happy Hour", pp: 30, priority: 0, flags: {}, - onTryHit: function (target, source) { + onTryHit(target, source) { this.add('-activate', target, 'move: Happy Hour'); - return null; }, - secondary: false, + secondary: null, target: "allySide", type: "Normal", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -7004,7 +7159,7 @@ exports.BattleMovedex = { boosts: { def: 1, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {def: 1}, @@ -7023,15 +7178,15 @@ exports.BattleMovedex = { pp: 30, priority: 0, flags: {authentic: 1}, - onHitField: function () { + onHitField() { this.add('-clearallboost'); - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - if (this.sides[i].active[j] && this.sides[i].active[j].isActive) this.sides[i].active[j].clearBoosts(); + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon && pokemon.isActive) pokemon.clearBoosts(); } } }, - secondary: false, + secondary: null, target: "all", type: "Ice", zMoveEffect: 'heal', @@ -7051,7 +7206,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [1, 4], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 190, @@ -7071,7 +7226,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 200, @@ -7103,7 +7258,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Every Pokemon in the user's party is cured of its major status condition. Active Pokemon with the Ability Soundproof are not cured.", + desc: "Every Pokemon in the user's party is cured of its major status condition. Active Pokemon with the Soundproof Ability are not cured.", shortDesc: "Cures the user's party of all status conditions.", id: "healbell", isViable: true, @@ -7111,13 +7266,15 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {snatch: 1, sound: 1, distance: 1, authentic: 1}, - onHit: function (pokemon, source) { + onHit(pokemon, source) { this.add('-activate', source, 'move: Heal Bell'); let side = pokemon.side; - for (let i = 0; i < side.pokemon.length; i++) { - if (side.pokemon[i].hasAbility('soundproof')) continue; - side.pokemon[i].cureStatus(); + let success = false; + for (const ally of side.pokemon) { + if (ally.hasAbility('soundproof')) continue; + if (ally.cureStatus()) success = true; } + return success; }, target: "allyTeam", type: "Normal", @@ -7129,7 +7286,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "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 Ability Regenerator are unaffected.", + desc: "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: "For 5 turns, the foe(s) is prevented from healing.", id: "healblock", name: "Heal Block", @@ -7139,36 +7296,40 @@ exports.BattleMovedex = { volatileStatus: 'healblock', effect: { duration: 5, - durationCallback: function (target, source, effect) { + durationCallback(target, source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 7; } return 5; }, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'move: Heal Block'); }, - onDisableMove: function (pokemon) { - for (let i = 0; i < pokemon.moveset.length; i++) { - if (this.getMove(pokemon.moveset[i].id).flags['heal']) { - pokemon.disableMove(pokemon.moveset[i].id); + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).flags['heal']) { + pokemon.disableMove(moveSlot.id); } } }, onBeforeMovePriority: 6, - onBeforeMove: function (pokemon, target, move) { - if (move.flags['heal']) { + onBeforeMove(pokemon, target, move) { + if (move.flags['heal'] && !move.isZ) { this.add('cant', pokemon, 'move: Heal Block', move); return false; } }, onResidualOrder: 17, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'move: Heal Block'); }, - onTryHeal: false, + onTryHeal(damage, target, source, effect) { + if ((effect && effect.id === 'zpower') || this.effectData.isZ) return damage; + return false; + }, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Psychic", zMoveBoost: {spa: 2}, @@ -7188,7 +7349,7 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1, heal: 1}, heal: [1, 2], - secondary: false, + secondary: null, target: "self", type: "Bug", zMoveEffect: 'clearnegativeboost', @@ -7199,21 +7360,21 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The target restores 1/2 of its maximum HP, rounded half up. If the user has the Ability Mega Launcher, the target instead restores 3/4 of its maximum HP, rounded half down.", + desc: "The target restores 1/2 of its maximum HP, rounded half up. If the user has the Mega Launcher Ability, the target instead restores 3/4 of its maximum HP, rounded half down.", shortDesc: "Heals the target by 50% of its max HP.", id: "healpulse", name: "Heal Pulse", pp: 10, priority: 0, flags: {protect: 1, pulse: 1, reflectable: 1, distance: 1, heal: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { if (source.hasAbility('megalauncher')) { - this.heal(this.modify(target.maxhp, 0.75)); + return this.heal(this.modify(target.maxhp, 0.75)); } else { - this.heal(Math.ceil(target.maxhp * 0.5)); + return this.heal(Math.ceil(target.maxhp * 0.5)); } }, - secondary: false, + secondary: null, target: "any", type: "Psychic", zMoveEffect: 'clearnegativeboost', @@ -7224,7 +7385,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user faints and the Pokemon brought out to replace it has its HP fully restored along with having any major status condition cured. Fails if the user is the last unfainted Pokemon in its party.", + desc: "The user faints and the Pokemon brought out to replace it has its HP fully restored along with having any major status condition cured. The new Pokemon is sent out at the end of the turn, and the healing happens before hazards take effect. Fails if the user is the last unfainted Pokemon in its party.", shortDesc: "User faints. Replacement is fully healed.", id: "healingwish", isViable: true, @@ -7232,7 +7393,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {snatch: 1, heal: 1}, - onTryHit: function (pokemon, target, move) { + onTryHit(pokemon, target, move) { if (!this.canSwitch(pokemon.side)) { delete move.selfdestruct; return false; @@ -7242,7 +7403,7 @@ exports.BattleMovedex = { sideCondition: 'healingwish', effect: { duration: 2, - onStart: function (side, source) { + onStart(side, source) { this.debug('Healing Wish started on ' + side.name); this.effectData.positions = []; for (let i = 0; i < side.active.length; i++) { @@ -7250,26 +7411,27 @@ exports.BattleMovedex = { } this.effectData.positions[source.position] = true; }, - onRestart: function (side, source) { + onRestart(side, source) { this.effectData.positions[source.position] = true; }, onSwitchInPriority: 1, - onSwitchIn: function (target) { - if (!this.effectData.positions[target.position]) { + onSwitchIn(target) { + const positions = /**@type {boolean[]} */ (this.effectData.positions); + if (!positions[target.position]) { return; } if (!target.fainted) { target.heal(target.maxhp); target.setStatus(''); this.add('-heal', target, target.getHealth, '[from] move: Healing Wish'); - this.effectData.positions[target.position] = false; + positions[target.position] = false; } - if (!this.effectData.positions.some(affected => affected === true)) { + if (!positions.some(affected => affected === true)) { target.side.removeSideCondition('healingwish'); } }, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", contestType: "Beautiful", @@ -7307,12 +7469,14 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { let targetBoosts = {}; let sourceBoosts = {}; for (let i in target.boosts) { + // @ts-ignore targetBoosts[i] = target.boosts[i]; + // @ts-ignore sourceBoosts[i] = source.boosts[i]; } @@ -7321,7 +7485,7 @@ exports.BattleMovedex = { this.add('-swapboost', source, target, '[from] move: Heart Swap'); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveEffect: 'crit2', @@ -7331,7 +7495,7 @@ exports.BattleMovedex = { num: 535, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let targetWeight = target.getWeight(); let pokemonWeight = pokemon.getWeight(); if (pokemonWeight > targetWeight * 5) { @@ -7356,7 +7520,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 160, @@ -7388,7 +7552,7 @@ exports.BattleMovedex = { num: 484, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let targetWeight = target.getWeight(); let pokemonWeight = pokemon.getWeight(); if (pokemonWeight > targetWeight * 5) { @@ -7414,7 +7578,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 160, @@ -7425,7 +7589,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The power of the target's attack this turn is multiplied by 1.5 (this effect is stackable). Fails if there is no ally adjacent to the user, but does not fail if the ally is using a two-turn move.", + desc: "The power of the target's attack this turn is multiplied by 1.5 (this effect is stackable). Fails if there is no ally adjacent to the user or if the ally already moved this turn, but does not fail if the ally is using a two-turn move.", shortDesc: "One adjacent ally's move power is 1.5x this turn.", id: "helpinghand", name: "Helping Hand", @@ -7433,23 +7597,26 @@ exports.BattleMovedex = { priority: 5, flags: {authentic: 1}, volatileStatus: 'helpinghand', + onTryHit(target) { + if (!target.newlySwitched && !this.willMove(target)) return false; + }, effect: { duration: 1, - onStart: function (target, source) { + onStart(target, source) { this.effectData.multiplier = 1.5; this.add('-singleturn', target, 'Helping Hand', '[of] ' + source); }, - onRestart: function (target, source) { + onRestart(target, source) { this.effectData.multiplier *= 1.5; this.add('-singleturn', target, 'Helping Hand', '[of] ' + source); }, onBasePowerPriority: 3, - onBasePower: function (basePower) { + onBasePower(basePower) { this.debug('Boosting from Helping Hand: ' + this.effectData.multiplier); return this.chainModify(this.effectData.multiplier); }, }, - secondary: false, + secondary: null, target: "adjacentAlly", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -7459,7 +7626,7 @@ exports.BattleMovedex = { num: 506, accuracy: 100, basePower: 65, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (target.status || target.hasAbility('comatose')) return move.basePower * 2; return move.basePower; }, @@ -7472,7 +7639,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 160, @@ -7490,10 +7657,10 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { move.type = pokemon.hpType || 'Dark'; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 120, @@ -7511,7 +7678,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Bug", contestType: "Clever", @@ -7528,7 +7695,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dark", contestType: "Clever", @@ -7545,7 +7712,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dragon", contestType: "Clever", @@ -7563,7 +7730,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Electric", contestType: "Clever", @@ -7581,7 +7748,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", contestType: "Clever", @@ -7599,7 +7766,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fire", contestType: "Clever", @@ -7616,7 +7783,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Flying", contestType: "Clever", @@ -7633,7 +7800,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ghost", contestType: "Clever", @@ -7651,7 +7818,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", contestType: "Clever", @@ -7668,7 +7835,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ground", contestType: "Clever", @@ -7686,7 +7853,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ice", contestType: "Clever", @@ -7703,7 +7870,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Poison", contestType: "Clever", @@ -7720,7 +7887,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Psychic", contestType: "Clever", @@ -7737,7 +7904,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Rock", contestType: "Clever", @@ -7754,7 +7921,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Steel", contestType: "Clever", @@ -7771,7 +7938,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Water", contestType: "Clever", @@ -7781,14 +7948,13 @@ exports.BattleMovedex = { accuracy: 95, basePower: 95, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "highhorsepower", name: "High Horsepower", pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 175, @@ -7799,7 +7965,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 130, category: "Physical", - desc: "If this attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage. Pokemon with the Ability Magic Guard are unaffected by crash damage.", + desc: "If this attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage. Pokemon with the Magic Guard Ability are unaffected by crash damage.", shortDesc: "User is hurt by 50% of its max HP if it misses.", id: "highjumpkick", isViable: true, @@ -7808,10 +7974,10 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, hasCustomRecoil: true, - onMoveFail: function (target, source, move) { - this.damage(source.maxhp / 2, source, source, 'highjumpkick'); + onMoveFail(target, source, move) { + this.damage(source.maxhp / 2, source, source, this.getEffect('High Jump Kick')); }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 195, @@ -7830,7 +7996,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, noFaint: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -7841,17 +8007,14 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Nothing happens... Fails if there is no ally adjacent to the user.", - shortDesc: "No competitive use. Or any use.", + desc: "No competitive use. Fails if there is no ally adjacent to the user.", + shortDesc: "No competitive use.", id: "holdhands", name: "Hold Hands", pp: 40, priority: 0, flags: {authentic: 1}, - onTryHit: function (target, source) { - return null; - }, - secondary: false, + secondary: null, target: "adjacentAlly", type: "Normal", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -7874,7 +8037,7 @@ exports.BattleMovedex = { atk: 1, accuracy: 1, }, - secondary: false, + secondary: null, target: "self", type: "Dark", zMoveBoost: {atk: 1}, @@ -7885,14 +8048,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 65, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "hornattack", name: "Horn Attack", pp: 25, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 120, @@ -7903,7 +8065,7 @@ exports.BattleMovedex = { accuracy: 30, basePower: 0, category: "Physical", - desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Ability Sturdy are immune.", + desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Sturdy Ability are immune.", shortDesc: "OHKOs the target. Fails if user is a lower level.", id: "horndrill", name: "Horn Drill", @@ -7911,7 +8073,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, ohko: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 180, @@ -7931,7 +8093,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 140, @@ -7952,7 +8114,7 @@ exports.BattleMovedex = { boosts: { atk: 1, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 1}, @@ -7963,7 +8125,7 @@ exports.BattleMovedex = { accuracy: 70, basePower: 110, category: "Special", - desc: "Has a 30% chance to confuse the target. This move can hit a target using Bounce, Fly, or Sky Drop. If the weather is Rain Dance, this move does not check accuracy. If the weather is Sunny Day, this move's accuracy is 50%.", + desc: "Has a 30% chance to confuse the target. This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If the weather is Primordial Sea or Rain Dance, this move does not check accuracy. If the weather is Desolate Land or Sunny Day, this move's accuracy is 50%.", shortDesc: "30% chance to confuse target. Can't miss in rain.", id: "hurricane", isViable: true, @@ -7971,7 +8133,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, distance: 1}, - onModifyMove: function (move) { + onModifyMove(move) { if (this.isWeather(['raindance', 'primordialsea'])) { move.accuracy = true; } else if (this.isWeather(['sunnyday', 'desolateland'])) { @@ -7992,7 +8154,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 150, category: "Special", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "hydrocannon", name: "Hydro Cannon", @@ -8002,7 +8164,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 200, @@ -8013,7 +8175,6 @@ exports.BattleMovedex = { accuracy: 80, basePower: 110, category: "Special", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "hydropump", isViable: true, @@ -8021,7 +8182,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 185, @@ -8040,7 +8201,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "wateriumz", - secondary: false, + secondary: null, target: "normal", type: "Water", contestType: "Cool", @@ -8050,7 +8211,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 150, category: "Special", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "hyperbeam", name: "Hyper Beam", @@ -8060,7 +8221,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 200, @@ -8092,8 +8253,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 100, category: "Physical", - desc: "Lowers the user's Defense by 1 stage. This move cannot be used successfully unless the user's current form, while considering Transform, is Hoopa Unbound. 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.", - shortDesc: "Hoopa-U: Lowers user's Def by 1; breaks protection.", + desc: "Lowers the user's Defense by 1 stage. This move cannot be used successfully unless the user's current form, while considering Transform, is Hoopa Unbound. If this move is successful, it breaks through the target's Baneful Bunker, 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.", + shortDesc: "Hoopa-U: Lowers user's Def by 1; breaks protect.", id: "hyperspacefury", isViable: true, name: "Hyperspace Fury", @@ -8101,7 +8262,7 @@ exports.BattleMovedex = { priority: 0, flags: {mirror: 1, authentic: 1}, breaksProtect: true, - onTry: function (pokemon) { + onTry(pokemon) { if (pokemon.template.species === 'Hoopa-Unbound') { return; } @@ -8118,7 +8279,7 @@ exports.BattleMovedex = { def: -1, }, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 180, @@ -8129,7 +8290,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 80, category: "Special", - 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.", + desc: "If this move is successful, it breaks through the target's Baneful Bunker, 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.", shortDesc: "Breaks the target's protection for this turn.", id: "hyperspacehole", name: "Hyperspace Hole", @@ -8137,7 +8298,7 @@ exports.BattleMovedex = { priority: 0, flags: {mirror: 1, authentic: 1}, breaksProtect: true, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 160, @@ -8156,7 +8317,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMovePower: 175, @@ -8167,15 +8328,14 @@ exports.BattleMovedex = { accuracy: 60, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the target to sleep.", + shortDesc: "Causes the target to fall asleep.", id: "hypnosis", name: "Hypnosis", pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'slp', - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -8185,12 +8345,12 @@ exports.BattleMovedex = { num: 301, accuracy: 90, basePower: 30, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { let bp = move.basePower; if (pokemon.volatiles.iceball && pokemon.volatiles.iceball.hitCount) { bp *= Math.pow(2, pokemon.volatiles.iceball.hitCount); } - pokemon.addVolatile('iceball'); + if (pokemon.status !== 'slp') pokemon.addVolatile('iceball'); if (pokemon.volatiles.defensecurl) { bp *= 2; } @@ -8198,7 +8358,7 @@ exports.BattleMovedex = { return bp; }, category: "Physical", - desc: "If this move is successful, the user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn.", + desc: "If this move is successful, the user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn. If this move hits an active Disguise during the effect, the power multiplier is paused but the turn counter is not, potentially allowing the multiplier to be used on the user's next move after this effect ends.", shortDesc: "Power doubles with each hit. Repeats for 5 turns.", id: "iceball", name: "Ice Ball", @@ -8208,23 +8368,23 @@ exports.BattleMovedex = { effect: { duration: 2, onLockMove: 'iceball', - onStart: function () { + onStart() { this.effectData.hitCount = 1; }, - onRestart: function () { + onRestart() { this.effectData.hitCount++; if (this.effectData.hitCount < 5) { this.effectData.duration = 2; } }, - onResidual: function (target) { - if (target.lastMove === 'struggle') { + onResidual(target) { + if (target.lastMove && target.lastMove.id === 'struggle') { // don't lock delete target.volatiles['iceball']; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Ice", zMovePower: 100, @@ -8264,13 +8424,12 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {charge: 1, protect: 1, mirror: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -8330,7 +8489,7 @@ exports.BattleMovedex = { spe: -1, }, }, - secondary: false, + secondary: null, target: "normal", type: "Ice", zMovePower: 180, @@ -8371,7 +8530,7 @@ exports.BattleMovedex = { pp: 30, priority: 1, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ice", zMovePower: 100, @@ -8404,7 +8563,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 25, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "iciclespear", isViable: true, @@ -8413,7 +8572,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Ice", zMovePower: 140, @@ -8447,7 +8606,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user prevents all of its foes from using any moves that the user also knows as long as the user remains active.", + desc: "The user prevents all opposing Pokemon from using any moves that the user also knows as long as the user remains active.", shortDesc: "No foe can use any move known by the user.", id: "imprison", name: "Imprison", @@ -8457,26 +8616,25 @@ exports.BattleMovedex = { volatileStatus: 'imprison', effect: { noCopy: true, - onStart: function (target) { + onStart(target) { this.add('-start', target, 'move: Imprison'); }, - onFoeDisableMove: function (pokemon) { - let foeMoves = this.effectData.source.moveset; - for (let f = 0; f < foeMoves.length; f++) { - if (foeMoves[f].id === 'struggle') continue; - pokemon.disableMove(foeMoves[f].id, 'hidden'); + onFoeDisableMove(pokemon) { + for (const moveSlot of this.effectData.source.moveSlots) { + if (moveSlot.id === 'struggle') continue; + pokemon.disableMove(moveSlot.id, 'hidden'); } pokemon.maybeDisabled = true; }, onFoeBeforeMovePriority: 4, - onFoeBeforeMove: function (attacker, defender, move) { - if (move.id !== 'struggle' && this.effectData.source.hasMove(move.id)) { + onFoeBeforeMove(attacker, defender, move) { + if (move.id !== 'struggle' && this.effectData.source.hasMove(move.id) && !move.isZ) { this.add('cant', attacker, 'move: Imprison', move); return false; } }, }, - secondary: false, + secondary: null, pressureTarget: "foeSide", target: "self", type: "Psychic", @@ -8488,20 +8646,20 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Special", - desc: "The target loses its held item if it is a Berry or a Gem. This move cannot cause Pokemon with the Ability Sticky Hold to lose their held item. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", + desc: "The target loses its held item if it is a Berry or a Gem. This move cannot cause Pokemon with the Sticky Hold Ability to lose their held item. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", shortDesc: "Destroys the foe(s) Berry/Gem.", id: "incinerate", name: "Incinerate", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function (pokemon, source) { + onHit(pokemon, source) { let item = pokemon.getItem(); if ((item.isBerry || item.isGem) && pokemon.takeItem(source)) { this.add('-enditem', pokemon, item.name, '[from] move: Incinerate'); } }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Fire", zMovePower: 120, @@ -8541,7 +8699,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "firiumz", - secondary: false, + secondary: null, target: "normal", type: "Fire", contestType: "Cool", @@ -8551,7 +8709,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 20, category: "Special", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "infestation", name: "Infestation", @@ -8559,7 +8717,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 100, @@ -8570,8 +8728,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user has 1/16 of its maximum HP restored at the end of each turn, but it is prevented from switching out and other Pokemon cannot force the user to switch out. The user can still switch out if it uses Baton Pass, Parting Shot, U-turn, or Volt Switch. If the user leaves the field using Baton Pass, the replacement will remain trapped and still receive the healing effect. During the effect, the user can be hit normally by Ground-type attacks and be affected by Spikes, Toxic Spikes, and Sticky Web, even if the user is a Flying type or has the Ability Levitate.", - shortDesc: "User recovers 1/16 max HP per turn. Traps user.", + desc: "The user has 1/16 of its maximum HP restored at the end of each turn, but it is prevented from switching out and other Pokemon cannot force the user to switch out. The user can still switch out if it uses Baton Pass, Parting Shot, U-turn, or Volt Switch. If the user leaves the field using Baton Pass, the replacement will remain trapped and still receive the healing effect. During the effect, the user can be hit normally by Ground-type attacks and be affected by Spikes, Toxic Spikes, and Sticky Web, even if the user is a Flying type or has the Levitate Ability.", + shortDesc: "Traps/grounds user; heals 1/16 max HP per turn.", id: "ingrain", name: "Ingrain", pp: 20, @@ -8579,23 +8737,23 @@ exports.BattleMovedex = { flags: {snatch: 1, nonsky: 1}, volatileStatus: 'ingrain', effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'move: Ingrain'); }, onResidualOrder: 7, - onResidual: function (pokemon) { + onResidual(pokemon) { this.heal(pokemon.maxhp / 16); }, - onTrapPokemon: function (pokemon) { + onTrapPokemon(pokemon) { pokemon.tryTrap(); }, // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded - onDragOut: function (pokemon) { + onDragOut(pokemon) { this.add('-activate', pokemon, 'move: Ingrain'); return null; }, }, - secondary: false, + secondary: null, target: "self", type: "Grass", zMoveBoost: {spd: 1}, @@ -8606,26 +8764,29 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The target immediately uses its last used move. Fails if the target has not made a move, if the target is preparing to use Beak Blast, Focus Punch, or Shell Trap, or if the move is Beak Blast, Bide, Copycat, Focus Punch, Ice Ball, Instruct, Me First, Metronome, Mimic, Mirror Move, Outrage, Petal Dance, Rollout, Shell Trap, Sleep Talk, Thrash, a charge move, a recharge move, or a Z-Move.", + desc: "The target immediately uses its last used move. Fails if the target has not made a move, if the move has 0 PP, if the target is preparing to use Beak Blast, Focus Punch, or Shell Trap, or if the move is Assist, Beak Blast, Belch, Bide, Celebrate, Copycat, Focus Punch, Ice Ball, Instruct, King's Shield, Me First, Metronome, Mimic, Mirror Move, Nature Power, Outrage, Petal Dance, Rollout, Shell Trap, Sketch, Sleep Talk, Struggle, Thrash, Transform, Uproar, any two-turn move, any recharge move, or any Z-Move.", shortDesc: "The target immediately uses its last used move.", id: "instruct", name: "Instruct", pp: 15, priority: 0, flags: {protect: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { if (!target.lastMove) return false; - let lastMove = this.getMove(target.lastMove); - let noInstruct = { - beakblast:1, bide:1, copycat:1, focuspunch:1, iceball:1, instruct:1, mefirst:1, metronome:1, mimic:1, mirrormove:1, outrage:1, petaldance:1, rollout:1, shelltrap:1, sleeptalk:1, thrash:1, // TODO: fill this up - }; - if (noInstruct[lastMove.id] || lastMove.isZ || lastMove.flags['charge'] || lastMove.flags['recharge'] || target.volatiles['beakblast'] || target.volatiles['focuspunch'] || target.volatiles['shelltrap']) { + let lastMove = target.lastMove; + let moveIndex = target.moves.indexOf(lastMove.id); + let noInstruct = [ + 'assist', 'beakblast', 'bide', 'celebrate', 'copycat', 'focuspunch', 'iceball', 'instruct', 'kingsshield', 'mefirst', 'metronome', 'mimic', 'mirrormove', 'naturepower', 'outrage', 'petaldance', 'rollout', 'shelltrap', 'sketch', 'sleeptalk', 'thrash', 'transform', + ]; + if (noInstruct.includes(lastMove.id) || lastMove.isZ || lastMove.flags['charge'] || lastMove.flags['recharge'] || target.volatiles['beakblast'] || target.volatiles['focuspunch'] || target.volatiles['shelltrap'] || (target.moveSlots[moveIndex] && target.moveSlots[moveIndex].pp <= 0)) { return false; } + // Instructed Fake Out etc. should fail + target.activeTurns++; this.add('-singleturn', target, 'move: Instruct', '[of] ' + source); - this.runMove(target.lastMove, target, target.lastMoveTargetLoc); + this.runMove(target.lastMove.id, target, target.lastMoveTargetLoc); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spa: 1}, @@ -8636,7 +8797,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Causes Normal-type moves to become Electric type this turn.", + desc: "Causes Normal-type moves to become Electric type this turn. The effect happens after other effects that change a move's type.", shortDesc: "Normal moves become Electric type this turn.", id: "iondeluge", name: "Ion Deluge", @@ -8646,18 +8807,18 @@ exports.BattleMovedex = { pseudoWeather: 'iondeluge', effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-fieldactivate', 'move: Ion Deluge'); }, onModifyMovePriority: -2, - onModifyMove: function (move) { + onModifyMove(move) { if (move.type === 'Normal') { move.type = 'Electric'; this.debug(move.name + "'s type changed to Electric"); } }, }, - secondary: false, + secondary: null, target: "all", type: "Electric", zMoveBoost: {spa: 1}, @@ -8678,7 +8839,7 @@ exports.BattleMovedex = { boosts: { def: 2, }, - secondary: false, + secondary: null, target: "self", type: "Steel", zMoveEffect: 'clearnegativeboost', @@ -8742,13 +8903,13 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { const item = pokemon.getItem(); if (item.id && item.onPlate && !item.zMove) { move.type = item.onPlate; } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 180, @@ -8759,7 +8920,7 @@ exports.BattleMovedex = { accuracy: 95, basePower: 100, category: "Physical", - desc: "If this attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage. Pokemon with the Ability Magic Guard are unaffected by crash damage.", + desc: "If this attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage. Pokemon with the Magic Guard Ability are unaffected by crash damage.", shortDesc: "User is hurt by 50% of its max HP if it misses.", id: "jumpkick", isViable: true, @@ -8768,10 +8929,10 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, gravity: 1}, hasCustomRecoil: true, - onMoveFail: function (target, source, move) { - this.damage(source.maxhp / 2, source, source, 'jumpkick'); + onMoveFail(target, source, move) { + this.damage(source.maxhp / 2, source, source, this.getEffect('Jump Kick')); }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 180, @@ -8790,7 +8951,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 100, @@ -8811,7 +8972,7 @@ exports.BattleMovedex = { boosts: { accuracy: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {evasion: 1}, @@ -8822,7 +8983,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon trying to make contact with the user have their Attack lowered by 2 stages. Non-damaging moves go through this protection. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", + desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon trying to make contact with the user have their Attack lowered by 2 stages. Non-damaging moves go through this protection. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", shortDesc: "Protects from attacks. Contact: lowers Atk by 2.", id: "kingsshield", isViable: true, @@ -8832,25 +8993,19 @@ exports.BattleMovedex = { flags: {}, stallingMove: true, volatileStatus: 'kingsshield', - onTryHit: function (pokemon) { + onTryHit(pokemon) { return !!this.willAct() && this.runEvent('StallMove', pokemon); }, - onHit: function (pokemon) { + onHit(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'Protect'); }, - onSourcePrepareHit: function (source, target, effect) { - if (effect.effectType !== 'Move' || !effect.flags['protect'] || effect.category === 'Status') return; - if (effect.flags['contact']) { - effect.ignoreImmunity = true; - } - }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!move.flags['protect'] || move.category === 'Status') { if (move.isZ) move.zBrokeProtect = true; return; @@ -8864,12 +9019,17 @@ exports.BattleMovedex = { } } if (move.flags['contact']) { - this.boost({atk:-2}, source, target, this.getMove("King's Shield")); + this.boost({atk: -2}, source, target, this.getActiveMove("King's Shield")); + } + return this.NOT_FAILURE; + }, + onHit(target, source, move) { + if (move.isZPowered && move.flags['contact']) { + this.boost({atk: -2}, source, target, this.getActiveMove("King's Shield")); } - return null; }, }, - secondary: false, + secondary: null, target: "self", type: "Steel", zMoveEffect: 'clearnegativeboost', @@ -8880,7 +9040,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 65, category: "Physical", - desc: "If the target is holding an item that can be removed from it, ignoring the Ability Sticky Hold, this move's power is multiplied by 1.5. If the user has not fainted, the target loses its held item. This move cannot remove Z-Crystals, cause Pokemon with the Ability Sticky Hold to lose their held item, cause Pokemon that can Mega Evolve to lose the Mega Stone for their species, or cause a Kyogre, a Groudon, a Giratina, an Arceus, a Genesect, or a Silvally to lose their Blue Orb, Red Orb, Griseous Orb, Plate, Drive, or Memory respectively. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", + desc: "If the target is holding an item that can be removed from it, ignoring the Sticky Hold Ability, this move's power is multiplied by 1.5. If the user has not fainted, the target loses its held item. This move cannot remove Z-Crystals, cause Pokemon with the Sticky Hold Ability to lose their held item, cause Pokemon that can Mega Evolve to lose the Mega Stone for their species, or cause a Kyogre, a Groudon, a Giratina, an Arceus, a Genesect, or a Silvally to lose their Blue Orb, Red Orb, Griseous Orb, Plate, Drive, or Memory respectively. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", shortDesc: "1.5x damage if foe holds an item. Removes item.", id: "knockoff", isViable: true, @@ -8889,14 +9049,14 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, source, target, move) { + onBasePower(basePower, source, target, move) { let item = target.getItem(); if (!this.singleEvent('TakeItem', item, target.itemData, target, source, move, item)) return; if (item.id) { return this.chainModify(1.5); } }, - onAfterHit: function (target, source) { + onAfterHit(target, source) { if (source.hp) { let item = target.takeItem(); if (item) { @@ -8904,7 +9064,7 @@ exports.BattleMovedex = { } } }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 120, @@ -8922,7 +9082,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Ground", zMovePower: 185, @@ -8933,8 +9093,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "On the next turn, the user's attack will be a critical hit. Fails if the user already has the effect.", - shortDesc: "Next turn, the user's attack will be a critical hit.", + desc: "Until the end of the next turn, the user's attacks will be critical hits.", + shortDesc: "Until the end of the next turn, user's moves crit.", id: "laserfocus", name: "Laser Focus", pp: 30, @@ -8943,17 +9103,25 @@ exports.BattleMovedex = { volatileStatus: 'laserfocus', effect: { duration: 2, - onStart: function (pokemon) { + onStart(pokemon, source, effect) { + if (effect && (['imposter', 'psychup', 'transform'].includes(effect.id))) { + this.add('-start', pokemon, 'move: Laser Focus', '[silent]'); + } else { + this.add('-start', pokemon, 'move: Laser Focus'); + } + }, + onRestart(pokemon) { + this.effectData.duration = 2; this.add('-start', pokemon, 'move: Laser Focus'); }, - onModifyCritRatio: function (critRatio) { + onModifyCritRatio(critRatio) { return 5; }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'move: Laser Focus', '[silent]'); }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 1}, @@ -8971,19 +9139,19 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onTryHit: function (target, source) { - if (source.moveset.length === 1) return false; // Last Resort fails unless the user knows at least 2 moves + onTryHit(target, 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 - for (let i in source.moveset) { - if (source.moveset[i].id === 'lastresort') { + for (const moveSlot of source.moveSlots) { + if (moveSlot.id === 'lastresort') { hasLastResort = true; continue; } - if (!source.moveset[i].used) return false; + if (!moveSlot.used) return false; } return hasLastResort; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 200, @@ -9025,7 +9193,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 175, @@ -9049,7 +9217,7 @@ exports.BattleMovedex = { spa: -2, }, }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 195, @@ -9083,14 +9251,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "leafage", name: "Leafage", pp: 40, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 100, @@ -9110,7 +9277,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 160, @@ -9121,7 +9288,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 0, category: "Status", - desc: "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 Big Root is held by the recipient, the HP recovered is 1.3x normal, rounded half down. If the target uses Baton Pass, the replacement will continue being leeched. If the target switches out or uses Rapid Spin, the effect ends. Grass-type Pokemon are immune to this move on use, but not its effect.", + desc: "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 Big Root is held by the recipient, the HP recovered is 1.3x normal, rounded half down. If the target uses Baton Pass, the replacement will continue being leeched. If the target switches out or uses Rapid Spin successfully, the effect ends. Grass-type Pokemon are immune to this move on use, but not its effect.", shortDesc: "1/8 of target's HP is restored to user every turn.", id: "leechseed", isViable: true, @@ -9131,11 +9298,11 @@ exports.BattleMovedex = { flags: {protect: 1, reflectable: 1, mirror: 1}, volatileStatus: 'leechseed', effect: { - onStart: function (target) { + onStart(target) { this.add('-start', target, 'move: Leech Seed'); }, onResidualOrder: 8, - onResidual: function (pokemon) { + onResidual(pokemon) { let target = this.effectData.source.side.active[pokemon.volatiles['leechseed'].sourcePosition]; if (!target || target.fainted || target.hp <= 0) { this.debug('Nothing to leech into'); @@ -9147,13 +9314,13 @@ exports.BattleMovedex = { } }, }, - onTryHit: function (target) { + onTryHit(target) { if (target.hasType('Grass')) { - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return null; } }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveEffect: 'clearnegativeboost', @@ -9174,13 +9341,30 @@ exports.BattleMovedex = { boosts: { def: -1, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMoveBoost: {atk: 1}, contestType: "Cool", }, - "lick": { + "letssnuggleforever": { + num: 726, + accuracy: true, + basePower: 190, + category: "Physical", + shortDesc: "No additional effect.", + id: "letssnuggleforever", + name: "Let's Snuggle Forever", + pp: 1, + priority: 0, + flags: {contact: 1}, + isZ: "mimikiumz", + secondary: null, + target: "normal", + type: "Fairy", + contestType: "Cool", + }, + "lick": { num: 122, accuracy: 100, basePower: 30, @@ -9216,7 +9400,7 @@ exports.BattleMovedex = { flags: {protect: 1, mirror: 1}, isUnreleased: true, recoil: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMovePower: 200, @@ -9227,7 +9411,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the user and its party members take 0.5x damage from special attacks, or 0.66x damage if in a Double or Triple Battle. 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 or Defog. Lasts for 8 turns if the user is holding Light Clay.", + desc: "For 5 turns, the user and its party members take 0.5x damage from special attacks, or 0.66x damage if in a Double Battle. Damage is not reduced further with Aurora Veil. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Lasts for 8 turns if the user is holding Light Clay. Fails if the effect is already active on the user's side.", shortDesc: "For 5 turns, special damage to allies is halved.", id: "lightscreen", isViable: true, @@ -9238,13 +9422,13 @@ exports.BattleMovedex = { sideCondition: 'lightscreen', effect: { duration: 5, - durationCallback: function (target, source, effect) { + durationCallback(target, source, effect) { if (source && source.hasItem('lightclay')) { return 8; } return 5; }, - onAnyModifyDamage: function (damage, source, target, move) { + onAnyModifyDamage(damage, source, target, move) { if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Special') { if (!move.crit && !move.infiltrates) { this.debug('Light Screen weaken'); @@ -9253,21 +9437,43 @@ exports.BattleMovedex = { } } }, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Light Screen'); }, onResidualOrder: 21, onResidualSubOrder: 1, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'move: Light Screen'); }, }, - secondary: false, + secondary: null, target: "allySide", type: "Psychic", zMoveBoost: {spd: 1}, contestType: "Beautiful", }, + "lightthatburnsthesky": { + num: 723, + 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.", + id: "lightthatburnsthesky", + name: "Light That Burns the Sky", + pp: 1, + priority: 0, + flags: {}, + onModifyMove(move, pokemon) { + if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical'; + }, + ignoreAbility: true, + isZ: "ultranecroziumz", + secondary: null, + target: "normal", + type: "Psychic", + contestType: "Cool", + }, "liquidation": { num: 710, accuracy: 100, @@ -9297,28 +9503,28 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "On the following turn, the target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. Fails if the user used this move successfully last turn and that target is still active.", + desc: "Until the end of the next turn, the target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. The effect ends if either the user or the target leaves the field. Fails if this effect is active for the user.", shortDesc: "User's next move will not miss the target.", id: "lockon", name: "Lock-On", pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - onTryHit: function (target, source) { + onTryHit(target, source) { if (source.volatiles['lockon']) return false; }, - onHit: function (target, source) { + onHit(target, source) { source.addVolatile('lockon', target); this.add('-activate', source, 'move: Lock-On', '[of] ' + target); }, effect: { noCopy: true, // doesn't get copied by Baton Pass duration: 2, - onSourceAccuracy: function (accuracy, target, source, move) { + onSourceAccuracy(accuracy, target, source, move) { if (move && source === this.effectData.target && target === this.effectData.source) return true; }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -9329,8 +9535,7 @@ exports.BattleMovedex = { accuracy: 75, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the target to sleep.", + shortDesc: "Causes the target to fall asleep.", id: "lovelykiss", isViable: true, name: "Lovely Kiss", @@ -9338,7 +9543,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'slp', - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -9348,7 +9553,7 @@ exports.BattleMovedex = { num: 67, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let targetWeight = target.getWeight(); if (targetWeight >= 200) { return 120; @@ -9368,7 +9573,7 @@ exports.BattleMovedex = { return 20; }, category: "Physical", - desc: "Deals damage to the target based on its weight. Power is 20 if less than 10kg, 40 if less than 25kg, 60 if less than 50kg, 80 if less than 100kg, 100 if less than 200kg, and 120 if greater than or equal to 200kg.", + desc: "This move's power is 20 if the target weighs less than 10 kg, 40 if less than 25 kg, 60 if less than 50 kg, 80 if less than 100 kg, 100 if less than 200 kg, and 120 if greater than or equal to 200 kg.", shortDesc: "More power the heavier the target.", id: "lowkick", isViable: true, @@ -9376,7 +9581,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 160, @@ -9410,7 +9615,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the user and its party members cannot be struck by a critical hit. Fails if this move is already in effect for the user's side.", + desc: "For 5 turns, the user and its party members cannot be struck by a critical hit. Fails if the effect is already active on the user's side.", shortDesc: "For 5 turns, shields user's party from critical hits.", id: "luckychant", name: "Lucky Chant", @@ -9420,17 +9625,17 @@ exports.BattleMovedex = { sideCondition: 'luckychant', effect: { duration: 5, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Lucky Chant'); // "The Lucky Chant shielded [side.name]'s team from critical hits!" }, onCriticalHit: false, onResidualOrder: 21, onResidualSubOrder: 5, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'move: Lucky Chant'); // "[side.name]'s team's Lucky Chant wore off!" }, }, - secondary: false, + secondary: null, target: "allySide", type: "Normal", zMoveBoost: {evasion: 1}, @@ -9441,7 +9646,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user faints and the Pokemon brought out to replace it has its HP and PP fully restored along with having any major status condition cured. Fails if the user is the last unfainted Pokemon in its party.", + desc: "The user faints and the Pokemon brought out to replace it has its HP and PP fully restored along with having any major status condition cured. The new Pokemon is sent out at the end of the turn, and the healing happens before hazards take effect. Fails if the user is the last unfainted Pokemon in its party.", shortDesc: "User faints. Replacement is fully healed, with PP.", id: "lunardance", isViable: true, @@ -9449,7 +9654,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {snatch: 1, heal: 1, dance: 1}, - onTryHit: function (pokemon, target, move) { + onTryHit(pokemon, target, move) { if (!this.canSwitch(pokemon.side)) { delete move.selfdestruct; return false; @@ -9459,37 +9664,38 @@ exports.BattleMovedex = { sideCondition: 'lunardance', effect: { duration: 2, - onStart: function (side, source) { + onStart(side, source) { this.debug('Lunar Dance started on ' + side.name); this.effectData.positions = []; - for (let i = 0; i < side.active.length; i++) { + for (const i of side.active.keys()) { this.effectData.positions[i] = false; } this.effectData.positions[source.position] = true; }, - onRestart: function (side, source) { + onRestart(side, source) { this.effectData.positions[source.position] = true; }, onSwitchInPriority: 1, - onSwitchIn: function (target) { + onSwitchIn(target) { + const positions = /**@type {boolean[]} */ (this.effectData.positions); if (target.position !== this.effectData.sourcePosition) { return; } if (!target.fainted) { target.heal(target.maxhp); target.setStatus(''); - for (let m in target.moveset) { - target.moveset[m].pp = target.moveset[m].maxpp; + for (const moveSlot of target.moveSlots) { + moveSlot.pp = moveSlot.maxpp; } this.add('-heal', target, target.getHealth, '[from] move: Lunar Dance'); - this.effectData.positions[target.position] = false; + positions[target.position] = false; } - if (!this.effectData.positions.some(affected => affected === true)) { + if (!positions.some(affected => affected === true)) { target.side.removeSideCondition('lunardance'); } }, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", contestType: "Beautiful", @@ -9554,7 +9760,7 @@ exports.BattleMovedex = { pp: 30, priority: 1, flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 100, @@ -9565,7 +9771,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Until the end of the turn, the user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. Moves reflected in this way are unable to be reflected again by this or the Ability Magic Bounce's effect. Spikes, Stealth Rock, Sticky Web, and Toxic Spikes can only be reflected once per side, by the leftmost Pokemon under this or the Ability Magic Bounce's effect. If the user has the Ability Soundproof, this move's effect happens before a sound-based move can be nullified. The Abilities Lightning Rod and Storm Drain redirect their respective moves before this move takes effect.", + desc: "Until the end of the turn, the user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. Moves reflected in this way are unable to be reflected again by this or the Magic Bounce Ability's effect. Spikes, Stealth Rock, Sticky Web, and Toxic Spikes can only be reflected once per side, by the leftmost Pokemon under this or the Magic Bounce Ability's effect. The Lightning Rod and Storm Drain Abilities redirect their respective moves before this move takes effect.", shortDesc: "Bounces back certain non-damaging moves.", id: "magiccoat", isViable: true, @@ -9576,32 +9782,35 @@ exports.BattleMovedex = { volatileStatus: 'magiccoat', effect: { duration: 1, - onStart: function (target) { + onStart(target, source, effect) { this.add('-singleturn', target, 'move: Magic Coat'); + if (effect && effect.effectType === 'Move') { + this.effectData.pranksterBoosted = effect.pranksterBoosted; + } }, onTryHitPriority: 2, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target === source || move.hasBounced || !move.flags['reflectable']) { return; } - let newMove = this.getMoveCopy(move.id); + let newMove = this.getActiveMove(move.id); newMove.hasBounced = true; - newMove.pranksterBoosted = false; + newMove.pranksterBoosted = this.effectData.pranksterBoosted; this.useMove(newMove, target, source); return null; }, - onAllyTryHitSide: function (target, source, move) { + onAllyTryHitSide(target, source, move) { if (target.side === source.side || move.hasBounced || !move.flags['reflectable']) { return; } - let newMove = this.getMoveCopy(move.id); + let newMove = this.getActiveMove(move.id); newMove.hasBounced = true; newMove.pranksterBoosted = false; this.useMove(newMove, this.effectData.target, source); return null; }, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveBoost: {spd: 2}, @@ -9619,31 +9828,29 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {mirror: 1}, - onHitField: function (target, source, effect) { - if (this.pseudoWeather['magicroom']) { - this.removePseudoWeather('magicroom', source, effect, '[of] ' + source); - } else { - this.addPseudoWeather('magicroom', source, effect, '[of] ' + source); - } - }, + pseudoWeather: 'magicroom', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 7; } return 5; }, - onStart: function (target, source) { + onStart(target, source) { this.add('-fieldstart', 'move: Magic Room', '[of] ' + source); }, + onRestart(target, source) { + this.removePseudoWeather('magicroom'); + }, // Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js onResidualOrder: 25, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Magic Room', '[of] ' + this.effectData.source); }, }, - secondary: false, + secondary: null, target: "all", type: "Psychic", zMoveBoost: {spd: 1}, @@ -9654,14 +9861,13 @@ exports.BattleMovedex = { accuracy: true, basePower: 60, category: "Special", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "magicalleaf", name: "Magical Leaf", pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 120, @@ -9672,15 +9878,16 @@ exports.BattleMovedex = { accuracy: 75, basePower: 100, category: "Special", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "magmastorm", + isViable: true, name: "Magma Storm", pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 180, @@ -9691,14 +9898,13 @@ exports.BattleMovedex = { accuracy: true, basePower: 60, category: "Physical", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "magnetbomb", name: "Magnet Bomb", pp: 20, priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 120, @@ -9709,14 +9915,14 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Raises the Defense and Special Defense of Pokemon on the user's side with the Abilities Plus or Minus by 1 stage.", + desc: "Raises the Defense and Special Defense of Pokemon on the user's side with the Plus or Minus Abilities by 1 stage.", shortDesc: "Raises Def, Sp. Def of allies with Plus/Minus by 1.", id: "magneticflux", name: "Magnetic Flux", pp: 20, priority: 0, flags: {snatch: 1, distance: 1, authentic: 1}, - onHitSide: function (side, source) { + onHitSide(side, source, move) { let targets = []; for (let p in side.active) { if (side.active[p].hasAbility(['plus', 'minus'])) { @@ -9724,9 +9930,11 @@ exports.BattleMovedex = { } } if (!targets.length) return false; - for (let i = 0; i < targets.length; i++) this.boost({def: 1, spd: 1}, targets[i], source, 'move: Magnetic Flux'); + for (const target of targets) { + this.boost({def: 1, spd: 1}, target, source, move); + } }, - secondary: false, + secondary: null, target: "allySide", type: "Electric", zMoveBoost: {spd: 1}, @@ -9737,8 +9945,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the user is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, Sticky Web, and the Ability Arena Trap as long as it remains active. If the user uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, Thousand Arrows, and Iron Ball override this move if the user is under any of their effects. Fails if the user is already under this effect or the effects of Ingrain, Smack Down, or Thousand Arrows.", - shortDesc: "For 5 turns, the user is immune to Ground moves.", + desc: "For 5 turns, the user is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, Sticky Web, and the Arena Trap Ability as long as it remains active. If the user uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, Thousand Arrows, and Iron Ball override this move if the user is under any of their effects. Fails if the user is already under this effect or the effects of Ingrain, Smack Down, or Thousand Arrows.", + shortDesc: "For 5 turns, the user has immunity to Ground.", id: "magnetrise", name: "Magnet Rise", pp: 10, @@ -9747,19 +9955,19 @@ exports.BattleMovedex = { volatileStatus: 'magnetrise', effect: { duration: 5, - onStart: function (target) { + onStart(target) { if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; this.add('-start', target, 'Magnet Rise'); }, - onImmunity: function (type) { + onImmunity(type) { if (type === 'Ground') return false; }, onResidualOrder: 15, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Magnet Rise'); }, }, - secondary: false, + secondary: null, target: "self", type: "Electric", zMoveBoost: {evasion: 1}, @@ -9777,7 +9985,7 @@ exports.BattleMovedex = { pp: 30, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { let i = this.random(100); if (i < 5) { move.magnitude = 4; @@ -9802,10 +10010,10 @@ exports.BattleMovedex = { move.basePower = 150; } }, - onUseMoveMessage: function (pokemon, target, move) { + onUseMoveMessage(pokemon, target, move) { this.add('-activate', pokemon, 'move: Magnitude', move.magnitude); }, - secondary: false, + secondary: null, target: "allAdjacent", type: "Ground", zMovePower: 140, @@ -9816,15 +10024,15 @@ exports.BattleMovedex = { accuracy: true, basePower: 180, category: "Physical", - desc: "No additional effect.", - shortDesc: "No additional effect.", + desc: "Damage doubles and no accuracy check is done if the target has used Minimize while active.", + shortDesc: "Damage doubles if the target used Minimize.", id: "maliciousmoonsault", name: "Malicious Moonsault", pp: 1, priority: 0, flags: {contact: 1}, isZ: "inciniumz", - secondary: false, + secondary: null, target: "normal", type: "Dark", contestType: "Cool", @@ -9843,7 +10051,7 @@ exports.BattleMovedex = { flags: {snatch: 1, nonsky: 1}, stallingMove: true, sideCondition: 'matblock', - onTryHitSide: function (side, source) { + onTryHitSide(side, source) { if (source.activeTurns > 1) { this.add('-hint', "Mat Block only works on your first turn out."); return false; @@ -9851,11 +10059,11 @@ exports.BattleMovedex = { }, effect: { duration: 1, - onStart: function (target, source) { + onStart(target, source) { this.add('-singleturn', source, 'Mat Block'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!move.flags['protect']) { if (move.isZ) move.zBrokeProtect = true; return; @@ -9869,10 +10077,10 @@ exports.BattleMovedex = { delete source.volatiles['lockedmove']; } } - return null; + return this.NOT_FAILURE; }, }, - secondary: false, + secondary: null, target: "allySide", type: "Fighting", zMoveBoost: {def: 1}, @@ -9883,21 +10091,21 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "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 other than Chatter, Counter, Covet, Focus Punch, Me First, Metal Burst, Mirror Coat, Thief, or Struggle. Fails if the target moves before the user. Ignores the target's substitute for the purpose of copying the move.", + desc: "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 other than Beak Blast, Chatter, Counter, Covet, Focus Punch, Me First, Metal Burst, Mirror Coat, Shell Trap, Struggle, Thief, or any Z-Move. Fails if the target moves before the user. Ignores the target's substitute for the purpose of copying the move.", shortDesc: "Copies a foe at 1.5x power. User must be faster.", id: "mefirst", name: "Me First", pp: 20, priority: 0, flags: {protect: 1, authentic: 1}, - onTryHit: function (target, pokemon) { - let decision = this.willMove(target); - if (decision) { - let noMeFirst = { - chatter:1, counter:1, covet:1, focuspunch:1, mefirst:1, metalburst:1, mirrorcoat:1, struggle:1, thief:1, - }; - let move = this.getMoveCopy(decision.move.id); - if (move.category !== 'Status' && !noMeFirst[move]) { + onTryHit(target, pokemon) { + let action = this.willMove(target); + if (action) { + let noMeFirst = [ + 'beakblast', 'chatter', 'counter', 'covet', 'focuspunch', 'mefirst', 'metalburst', 'mirrorcoat', 'shelltrap', 'struggle', 'thief', + ]; + let move = this.getActiveMove(action.move.id); + if (!action.zmove && !move.isZ && move.category !== 'Status' && !noMeFirst.includes(move.id)) { pokemon.addVolatile('mefirst'); this.useMove(move, pokemon, target); return null; @@ -9908,11 +10116,11 @@ exports.BattleMovedex = { effect: { duration: 1, onBasePowerPriority: 4, - onBasePower: function (basePower) { + onBasePower(basePower) { return this.chainModify(1.5); }, }, - secondary: false, + secondary: null, target: "adjacentFoe", type: "Normal", zMoveBoost: {spe: 2}, @@ -9924,18 +10132,16 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, 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: "The target cannot switch out.", + shortDesc: "Prevents the target from switching out.", id: "meanlook", name: "Mean Look", pp: 5, priority: 0, flags: {reflectable: 1, mirror: 1}, - onHit: function (target, source, move) { - if (!target.addVolatile('trapped', source, move, 'trapper')) { - this.add('-fail', target); - } + onHit(target, source, move) { + return target.addVolatile('trapped', source, move, 'trapper'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spd: 1}, @@ -9956,7 +10162,7 @@ exports.BattleMovedex = { boosts: { atk: 1, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveBoost: {atk: 1}, @@ -9975,7 +10181,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 120, @@ -9986,14 +10192,13 @@ exports.BattleMovedex = { accuracy: 75, basePower: 120, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "megakick", name: "Mega Kick", pp: 5, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 190, @@ -10004,14 +10209,13 @@ exports.BattleMovedex = { accuracy: 85, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "megapunch", name: "Mega Punch", pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -10022,7 +10226,6 @@ exports.BattleMovedex = { accuracy: 85, basePower: 120, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "megahorn", isViable: true, @@ -10030,7 +10233,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 190, @@ -10054,56 +10257,74 @@ exports.BattleMovedex = { spa: -2, }, selfdestruct: "ifHit", - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveEffect: 'healreplacement', contestType: "Tough", }, + "menacingmoonrazemaelstrom": { + num: 725, + accuracy: true, + basePower: 200, + category: "Special", + desc: "This move and its effects ignore the Abilities of other Pokemon.", + shortDesc: "Ignores the Abilities of other Pokemon.", + id: "menacingmoonrazemaelstrom", + name: "Menacing Moonraze Maelstrom", + pp: 1, + priority: 0, + flags: {}, + isZ: "lunaliumz", + ignoreAbility: true, + secondary: null, + target: "normal", + type: "Ghost", + contestType: "Cool", + }, "metalburst": { num: 368, accuracy: 100, basePower: 0, - damageCallback: function (pokemon) { + damageCallback(pokemon) { if (!pokemon.volatiles['metalburst']) return 0; return pokemon.volatiles['metalburst'].damage || 1; }, category: "Physical", - desc: "Deals damage to the last foe to hit the user with an attack this turn equal to 1.5 times the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals damage with a Base Power of 1 instead. If that foe's position is no longer in use, the damage is done to a random foe in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by a foe's attack this turn.", + desc: "Deals damage to the last opposing Pokemon to hit the user with an attack this turn equal to 1.5 times the HP lost by the user from that attack, rounded down. If the user did not lose HP from the attack, this move deals 1 HP of damage instead. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's attack this turn.", shortDesc: "If hit by an attack, returns 1.5x damage.", id: "metalburst", name: "Metal Burst", pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - beforeTurnCallback: function (pokemon) { + beforeTurnCallback(pokemon) { pokemon.addVolatile('metalburst'); }, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!source.volatiles['metalburst']) return false; if (source.volatiles['metalburst'].position === null) return false; }, effect: { duration: 1, noCopy: true, - onStart: function (target, source, source2, move) { + onStart(target, source, source2, move) { this.effectData.position = null; this.effectData.damage = 0; }, onRedirectTargetPriority: -1, - onRedirectTarget: function (target, source, source2) { + onRedirectTarget(target, source, source2) { if (source !== this.effectData.target) return; return source.side.foe.active[this.effectData.position]; }, - onDamagePriority: -101, - onDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.effectType === 'Move' && source.side !== target.side) { this.effectData.position = source.position; this.effectData.damage = 1.5 * damage; } }, }, - secondary: false, + secondary: null, target: "scripted", type: "Steel", zMovePower: 100, @@ -10149,7 +10370,7 @@ exports.BattleMovedex = { boosts: { spd: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMoveBoost: {spa: 1}, @@ -10186,35 +10407,36 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "A random move is selected for use, other than After You, Assist, Belch, Bestow, Celebrate, Chatter, Copycat, Counter, Covet, Crafty Shield, Destiny Bond, Detect, Diamond Storm, Endure, Feint, Focus Punch, Follow Me, Freeze Shock, Happy Hour, Helping Hand, Hold Hands, Hyperspace Hole, Ice Burn, King's Shield, Light of Ruin, Mat Block, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Quash, Quick Guard, Rage Powder, Relic Song, Secret Sword, Sketch, Sleep Talk, Snarl, Snatch, Snore, Spiky Shield, Steam Eruption, Struggle, Switcheroo, Techno Blast, Thief, Thousand Arrows, Thousand Waves, Transform, Trick, V-create, or Wide Guard.", + desc: "A random move is selected for use, other than After You, Assist, Baneful Bunker, Beak Blast, Belch, Bestow, Celebrate, Chatter, Copycat, Counter, Covet, Crafty Shield, Destiny Bond, Detect, Diamond Storm, Endure, Feint, Fleur Cannon, Focus Punch, Follow Me, Freeze Shock, Helping Hand, Hold Hands, 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, Photon Geyser, Plasma Fists, 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, or Wide Guard.", shortDesc: "Picks a random move.", id: "metronome", name: "Metronome", pp: 10, priority: 0, flags: {}, - noMetronome: {afteryou:1, assist:1, belch:1, bestow:1, celebrate:1, chatter:1, copycat:1, counter:1, covet:1, craftyshield:1, destinybond:1, detect:1, diamondstorm:1, dragonascent:1, endure:1, feint:1, focuspunch:1, followme:1, freezeshock:1, happyhour:1, helpinghand:1, holdhands:1, hyperspacefury:1, hyperspacehole:1, iceburn:1, kingsshield:1, lightofruin:1, matblock:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, originpulse:1, precipiceblades:1, protect:1, quash:1, quickguard:1, ragepowder:1, relicsong:1, secretsword:1, sketch:1, sleeptalk:1, snarl:1, snatch:1, snore:1, spikyshield:1, steameruption:1, struggle:1, switcheroo:1, technoblast:1, thief:1, thousandarrows:1, thousandwaves:1, transform:1, trick:1, vcreate:1, wideguard:1}, - onHit: function (target, source, effect) { + noMetronome: ['afteryou', 'assist', 'banefulbunker', 'beakblast', 'belch', 'bestow', 'celebrate', 'chatter', 'copycat', 'counter', 'covet', 'craftyshield', 'destinybond', 'detect', 'diamondstorm', 'dragonascent', 'endure', 'feint', 'fleurcannon', 'focuspunch', 'followme', 'freezeshock', 'helpinghand', 'holdhands', 'hyperspacefury', 'hyperspacehole', 'iceburn', 'instruct', 'kingsshield', 'lightofruin', 'matblock', 'mefirst', 'metronome', 'mimic', 'mindblown', 'mirrorcoat', 'mirrormove', 'naturepower', 'originpulse', 'photongeyser', 'plasmafists', 'precipiceblades', 'protect', 'quash', 'quickguard', 'ragepowder', 'relicsong', 'secretsword', 'shelltrap', 'sketch', 'sleeptalk', 'snarl', 'snatch', 'snore', 'spectralthief', 'spikyshield', 'spotlight', 'steameruption', 'struggle', 'switcheroo', 'technoblast', 'thief', 'thousandarrows', 'thousandwaves', 'transform', 'trick', 'vcreate', 'wideguard'], + onHit(target, source, effect) { let moves = []; for (let i in exports.BattleMovedex) { let move = exports.BattleMovedex[i]; if (i !== move.id) continue; if (move.isZ || move.isNonstandard) continue; - if (effect.noMetronome[move.id]) continue; + // @ts-ignore + if (effect.noMetronome.includes(move.id)) continue; if (this.getMove(i).gen > this.gen) continue; moves.push(move); } let randomMove = ''; if (moves.length) { moves.sort((a, b) => a.num - b.num); - randomMove = moves[this.random(moves.length)].id; + randomMove = this.sample(moves).id; } if (!randomMove) { return false; } this.useMove(randomMove, target); }, - secondary: false, + secondary: null, target: "self", type: "Normal", contestType: "Cute", @@ -10233,7 +10455,7 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1, heal: 1}, heal: [1, 2], - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -10244,20 +10466,20 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "This move is 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, Mimic, Sketch, Struggle, or Transform.", + desc: "While the user remains active, this move is 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, if the user already knows the move, or if the move is Chatter, Mimic, Sketch, Struggle, Transform, or any Z-Move.", shortDesc: "The last move the target used replaces this one.", id: "mimic", name: "Mimic", pp: 10, priority: 0, flags: {protect: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { - let disallowedMoves = {chatter:1, mimic:1, sketch:1, struggle:1, transform:1}; - if (source.transformed || !target.lastMove || disallowedMoves[target.lastMove] || source.moves.indexOf(target.lastMove) >= 0) return false; - let moveslot = source.moves.indexOf('mimic'); - if (moveslot < 0) return false; - let move = Dex.getMove(target.lastMove); - source.moveset[moveslot] = { + onHit(target, source) { + let disallowedMoves = ['chatter', 'mimic', 'sketch', 'struggle', 'transform']; + if (source.transformed || !target.lastMove || disallowedMoves.includes(target.lastMove.id) || source.moves.indexOf(target.lastMove.id) >= 0 || target.lastMove.isZ) return false; + let mimicIndex = source.moves.indexOf('mimic'); + if (mimicIndex < 0) return false; + let move = this.getMove(target.lastMove.id); + source.moveSlots[mimicIndex] = { move: move.name, id: move.id, pp: move.pp, @@ -10267,35 +10489,59 @@ exports.BattleMovedex = { used: false, virtual: true, }; - source.moves[moveslot] = toId(move.name); this.add('-start', source, 'Mimic', move.name); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {accuracy: 1}, contestType: "Cute", }, + "mindblown": { + num: 720, + accuracy: 100, + basePower: 150, + category: "Special", + desc: "Whether or not this move is successful and even if it would cause fainting, the user loses 1/2 of its maximum HP, rounded up, unless the user has the Magic Guard Ability. This move is prevented from executing and the user does not lose HP if any active Pokemon has the Damp Ability, or if this move is Fire type and the user is affected by Powder or the weather is Primordial Sea.", + shortDesc: "User loses 50% max HP. Hits adjacent Pokemon.", + id: "mindblown", + isViable: true, + name: "Mind Blown", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + mindBlownRecoil: true, + onAfterMove(pokemon, target, move) { + if (move.mindBlownRecoil && !move.multihit) { + this.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.getEffect('Mind Blown'), true); + } + }, + secondary: null, + target: "allAdjacent", + type: "Fire", + zMovePower: 200, + contestType: "Cool", + }, "mindreader": { num: 170, accuracy: true, basePower: 0, category: "Status", - desc: "On the following turn, the target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. Fails if the user used this move successfully last turn and that target is still active.", + desc: "Until the end of the next turn, the target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. The effect ends if either the user or the target leaves the field. Fails if this effect is active for the user.", shortDesc: "User's next move will not miss the target.", id: "mindreader", name: "Mind Reader", pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - onTryHit: function (target, source) { + onTryHit(target, source) { if (source.volatiles['lockon']) return false; }, - onHit: function (target, source) { + onHit(target, source) { source.addVolatile('lockon', target); this.add('-activate', source, 'move: Mind Reader', '[of] ' + target); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spa: 1}, @@ -10306,7 +10552,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Raises the user's evasiveness by 2 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.", + desc: "Raises the user's evasiveness by 2 stages. Whether or not the user's evasiveness was changed, Body Slam, Dragon Rush, Flying Press, Heat Crash, Heavy Slam, Malicious Moonsault, 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 2.", id: "minimize", name: "Minimize", @@ -10316,13 +10562,13 @@ exports.BattleMovedex = { volatileStatus: 'minimize', effect: { noCopy: true, - onSourceModifyDamage: function (damage, source, target, move) { - if (move.id in {'stomp':1, 'steamroller':1, 'bodyslam':1, 'flyingpress':1, 'dragonrush':1, 'phantomforce':1, 'heatcrash':1, 'shadowforce':1, 'heavyslam':1}) { + onSourceModifyDamage(damage, source, target, move) { + if (['stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault'].includes(move.id)) { return this.chainModify(2); } }, - onAccuracy: function (accuracy, target, source, move) { - if (move.id in {'stomp':1, 'steamroller':1, 'bodyslam':1, 'flyingpress':1, 'dragonrush':1, 'phantomforce':1, 'heatcrash':1, 'shadowforce':1, 'heavyslam':1}) { + onAccuracy(accuracy, target, source, move) { + if (['stomp', 'steamroller', 'bodyslam', 'flyingpress', 'dragonrush', 'heatcrash', 'heavyslam', 'maliciousmoonsault'].includes(move.id)) { return true; } return accuracy; @@ -10331,7 +10577,7 @@ exports.BattleMovedex = { boosts: { evasion: 2, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -10342,7 +10588,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Causes the target to have its positive evasiveness stat stage ignored while it is active. Psychic-type attacks can hit the target if it is a Dark type. The effect ends when the target is no longer active. Fails if the target is already affected, or affected by Foresight or Odor Sleuth.", + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it if it is greater than 0, and Psychic-type attacks can hit the target if it is a Dark type. Fails if the target is already affected, or affected by Foresight or Odor Sleuth.", shortDesc: "Psychic hits Dark. Evasiveness ignored.", id: "miracleeye", name: "Miracle Eye", @@ -10350,24 +10596,24 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, volatileStatus: 'miracleeye', - onTryHit: function (target) { + onTryHit(target) { if (target.volatiles['foresight']) return false; }, effect: { noCopy: true, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'Miracle Eye'); }, - onNegateImmunity: function (pokemon, type) { + onNegateImmunity(pokemon, type) { if (pokemon.hasType('Dark') && type === 'Psychic') return false; }, - onModifyBoost: function (boosts) { + onModifyBoost(boosts) { if (boosts.evasion && boosts.evasion > 0) { boosts.evasion = 0; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spa: 1}, @@ -10377,46 +10623,45 @@ exports.BattleMovedex = { num: 243, accuracy: 100, basePower: 0, - damageCallback: function (pokemon) { + damageCallback(pokemon) { if (!pokemon.volatiles['mirrorcoat']) return 0; return pokemon.volatiles['mirrorcoat'].damage || 1; }, category: "Special", - desc: "Deals damage to the last foe to hit the user with a special attack this turn equal to twice the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals damage with a Base Power of 1 instead. If that foe's position is no longer in use, the damage is done to a random foe in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by a foe's special attack this turn.", + desc: "Deals damage to the last opposing Pokemon to hit the user with a special attack this turn equal to twice the HP lost by the user from that attack. If the user did not lose HP from the attack, this move deals 1 HP of damage instead. If that opposing Pokemon's position is no longer in use and there is another opposing Pokemon on the field, the damage is done to it instead. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by an opposing Pokemon's special attack this turn.", shortDesc: "If hit by special attack, returns double damage.", id: "mirrorcoat", name: "Mirror Coat", pp: 20, priority: -5, flags: {protect: 1}, - beforeTurnCallback: function (pokemon) { + beforeTurnCallback(pokemon) { pokemon.addVolatile('mirrorcoat'); }, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!source.volatiles['mirrorcoat']) return false; if (source.volatiles['mirrorcoat'].position === null) return false; }, effect: { duration: 1, noCopy: true, - onStart: function (target, source, source2, move) { + onStart(target, source, source2, move) { this.effectData.position = null; this.effectData.damage = 0; }, onRedirectTargetPriority: -1, - onRedirectTarget: function (target, source, source2) { + onRedirectTarget(target, source, source2) { if (source !== this.effectData.target) return; return source.side.foe.active[this.effectData.position]; }, - onDamagePriority: -101, - onDamage: function (damage, target, source, effect) { + onAfterDamage(damage, target, source, effect) { if (effect && effect.effectType === 'Move' && source.side !== target.side && this.getCategory(effect) === 'Special') { this.effectData.position = source.position; this.effectData.damage = 2 * damage; } }, }, - secondary: false, + secondary: null, target: "scripted", type: "Psychic", zMovePower: 100, @@ -10427,21 +10672,21 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user uses the last move used by the target. The copied move is used against that target, if possible. Fails if the target has not made a move, or the last move used was Acupressure, After You, Aromatherapy, Aromatic Mist, Belch, Conversion 2, Counter, Crafty Shield, Curse, Doom Desire, Electric Terrain, Final Gambit, Flower Shield, Focus Punch, Future Sight, Grassy Terrain, Gravity, Guard Split, Hail, Happy Hour, Haze, Heal Bell, Heal Pulse, Helping Hand, Hold Hands, Ion Deluge, Light Screen, Lucky Chant, Magnetic Flux, Mat Block, Me First, Mimic, Mirror Coat, Mirror Move, Mist, Misty Terrain, Mud Sport, Nature Power, Perish Song, Power Split, Psych Up, Quick Guard, Rain Dance, Reflect, Reflect Type, Role Play, Rototiller, Safeguard, Sandstorm, Sketch, Spikes, Spit Up, Stealth Rock, Sticky Web, Struggle, Sunny Day, Tailwind, Toxic Spikes, Transform, Water Sport, Wide Guard, or any move that is self-targeting.", + desc: "The user uses the last move used by the target. The copied move is used against that target, if possible. Fails if the target has not made a move, or if the last move used cannot be copied by this move.", shortDesc: "User uses the target's last used move against it.", id: "mirrormove", name: "Mirror Move", pp: 20, priority: 0, flags: {}, - onTryHit: function (target, pokemon) { - if (!target.lastMove || !this.getMove(target.lastMove).flags['mirror']) { + onTryHit(target, pokemon) { + if (!target.lastMove || !target.lastMove.flags['mirror'] || target.lastMove.isZ) { return false; } - this.useMove(target.lastMove, pokemon, target); + this.useMove(target.lastMove.id, pokemon, target); return null; }, - secondary: false, + secondary: null, target: "normal", type: "Flying", zMoveBoost: {atk: 2}, @@ -10475,7 +10720,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the user and its party members are protected from having their stats lowered by other Pokemon.", + desc: "For 5 turns, the user and its party members are protected from having their stat stages lowered by other Pokemon. Fails if the effect is already active on the user's side.", shortDesc: "For 5 turns, protects user's party from stat drops.", id: "mist", name: "Mist", @@ -10485,11 +10730,13 @@ exports.BattleMovedex = { sideCondition: 'mist', effect: { duration: 5, - onBoost: function (boost, target, source, effect) { + onBoost(boost, target, source, effect) { if (source && target !== source && (!effect.infiltrates || target.side === source.side)) { let showMsg = false; for (let i in boost) { + // @ts-ignore if (boost[i] < 0) { + // @ts-ignore delete boost[i]; showMsg = true; } @@ -10497,16 +10744,16 @@ exports.BattleMovedex = { if (showMsg && !effect.secondaries) this.add('-activate', target, 'move: Mist'); } }, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'Mist'); }, onResidualOrder: 21, onResidualSubOrder: 3, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'Mist'); }, }, - secondary: false, + secondary: null, target: "allySide", type: "Ice", zMoveEffect: 'heal', @@ -10550,33 +10797,33 @@ exports.BattleMovedex = { terrain: 'mistyterrain', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('terrainextender')) { return 8; } return 5; }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { + if (effect && effect.status) { this.add('-activate', target, 'move: Misty Terrain'); } return false; }, - onTryAddVolatile: function (status, target, source, effect) { + onTryAddVolatile(status, target, source, effect) { if (!target.isGrounded() || target.isSemiInvulnerable()) return; if (status.id === 'confusion') { - this.add('-activate', target, 'move: Misty Terrain'); + if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Misty Terrain'); return null; } }, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.type === 'Dragon' && defender.isGrounded() && !defender.isSemiInvulnerable()) { this.debug('misty terrain weaken'); return this.chainModify(0.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { this.add('-fieldstart', 'move: Misty Terrain', '[from] ability: ' + effect, '[of] ' + source); } else { @@ -10585,11 +10832,11 @@ exports.BattleMovedex = { }, onResidualOrder: 21, onResidualSubOrder: 2, - onEnd: function (side) { + onEnd(side) { this.add('-fieldend', 'Misty Terrain'); }, }, - secondary: false, + secondary: null, target: "all", type: "Fairy", zMoveBoost: {spd: 1}, @@ -10633,7 +10880,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, ignoreAbility: true, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 180, @@ -10644,7 +10891,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", + desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect, 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 Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.", shortDesc: "Heals the user by a weather-dependent amount.", id: "moonlight", isViable: true, @@ -10652,16 +10899,16 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {snatch: 1, heal: 1}, - onHit: function (pokemon) { + onHit(pokemon) { if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(this.modify(pokemon.maxhp, 0.667)); + return this.heal(this.modify(pokemon.maxhp, 0.667)); } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(this.modify(pokemon.maxhp, 0.25)); + return this.heal(this.modify(pokemon.maxhp, 0.25)); } else { - this.heal(this.modify(pokemon.maxhp, 0.5)); + return this.heal(this.modify(pokemon.maxhp, 0.5)); } }, - secondary: false, + secondary: null, target: "self", type: "Fairy", zMoveEffect: 'clearnegativeboost', @@ -10672,7 +10919,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", + desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect, 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 Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.", shortDesc: "Heals the user by a weather-dependent amount.", id: "morningsun", isViable: true, @@ -10680,16 +10927,16 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {snatch: 1, heal: 1}, - onHit: function (pokemon) { + onHit(pokemon) { if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(this.modify(pokemon.maxhp, 0.667)); + return this.heal(this.modify(pokemon.maxhp, 0.667)); } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(this.modify(pokemon.maxhp, 0.25)); + return this.heal(this.modify(pokemon.maxhp, 0.25)); } else { - this.heal(this.modify(pokemon.maxhp, 0.5)); + return this.heal(this.modify(pokemon.maxhp, 0.5)); } }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -10769,38 +11016,32 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, all Electric-type attacks used by any active Pokemon have their power reduced to 0.33x. Fails if this move is already in effect.", + desc: "For 5 turns, all Electric-type attacks used by any active Pokemon have their power multiplied by 0.33. Fails if this effect is already active.", shortDesc: "For 5 turns, Electric-type attacks have 1/3 power.", id: "mudsport", name: "Mud Sport", pp: 15, priority: 0, flags: {nonsky: 1}, - onHitField: function (target, source, effect) { - if (this.pseudoWeather['mudsport']) { - return false; - } else { - this.addPseudoWeather('mudsport', source, effect, '[of] ' + source); - } - }, + pseudoWeather: 'mudsport', effect: { duration: 5, - onStart: function (side, source) { + onStart(side, source) { this.add('-fieldstart', 'move: Mud Sport', '[of] ' + source); }, onBasePowerPriority: 1, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.type === 'Electric') { this.debug('mud sport weaken'); return this.chainModify([0x548, 0x1000]); } }, onResidualOrder: 21, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Mud Sport'); }, }, - secondary: false, + secondary: null, target: "all", type: "Ground", zMoveBoost: {spd: 1}, @@ -10842,10 +11083,10 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onModifyMove: function (move, pokemon) { - move.type = this.runEvent('Memory', pokemon, null, 'multiattack', 'Normal'); + onModifyMove(move, pokemon) { + move.type = this.runEvent('Memory', pokemon, null, move, 'Normal'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 185, @@ -10890,7 +11131,7 @@ exports.BattleMovedex = { boosts: { spa: 2, }, - secondary: false, + secondary: null, target: "self", type: "Dark", zMoveEffect: 'clearnegativeboost', @@ -10900,42 +11141,26 @@ exports.BattleMovedex = { num: 363, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon) { - if (pokemon.volatiles['naturalgift']) return pokemon.volatiles['naturalgift'].basePower; - return false; - }, category: "Physical", - desc: "The type and power of this move depend on the user's held Berry, and the Berry is lost. Fails if the user is not holding a Berry, if the user has the Ability Klutz, or if Embargo or Magic Room is in effect for the user.", + desc: "The type and power of this move depend on the user's held Berry, and the Berry is lost. Fails if the user is not holding a Berry, if the user has the Klutz Ability, or if Embargo or Magic Room is in effect for the user.", shortDesc: "Power and type depends on the user's Berry.", id: "naturalgift", name: "Natural Gift", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - beforeMoveCallback: function (pokemon) { - if (pokemon.ignoringItem()) return; + onPrepareHit(target, pokemon, move) { + if (pokemon.ignoringItem()) return false; let item = pokemon.getItem(); - if (item.id && item.naturalGift) { - pokemon.addVolatile('naturalgift'); - pokemon.volatiles['naturalgift'].basePower = item.naturalGift.basePower; - pokemon.volatiles['naturalgift'].type = item.naturalGift.type; - pokemon.setItem(''); - this.runEvent('AfterUseItem', pokemon, null, null, item); - } - }, - onPrepareHit: function (target, source) { - if (!source.volatiles['naturalgift']) return false; - }, - onModifyMove: function (move, pokemon) { - if (pokemon.volatiles['naturalgift']) move.type = pokemon.volatiles['naturalgift'].type; - }, - onHit: function (target, source) { - return !!source.volatiles['naturalgift']; - }, - effect: { - duration: 1, + if (!item.naturalGift) return false; + move.basePower = item.naturalGift.basePower; + move.type = item.naturalGift.type; + pokemon.setItem(''); + pokemon.lastItem = item.id; + pokemon.usedItemThisTurn = true; + this.runEvent('AfterUseItem', pokemon, null, null, item); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -10949,11 +11174,12 @@ exports.BattleMovedex = { desc: "This move calls another move for use based on the battle terrain. Tri Attack on the regular Wi-Fi terrain, Thunderbolt during Electric Terrain, Moonblast during Misty Terrain, Energy Ball during Grassy Terrain, and Psychic during Psychic Terrain.", shortDesc: "Attack depends on terrain (default Tri Attack).", id: "naturepower", + isViable: true, name: "Nature Power", pp: 20, priority: 0, flags: {}, - onTryHit: function (target, pokemon) { + onTryHit(target, pokemon) { let move = 'triattack'; if (this.isTerrain('electricterrain')) { move = 'thunderbolt'; @@ -10967,7 +11193,7 @@ exports.BattleMovedex = { this.useMove(move, pokemon, target); return null; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", contestType: "Beautiful", @@ -10976,7 +11202,7 @@ exports.BattleMovedex = { num: 717, accuracy: 90, basePower: 0, - damageCallback: function (pokemon, target) { + damageCallback(pokemon, target) { return this.clampIntRange(Math.floor(target.hp / 2), 1); }, category: "Special", @@ -10988,7 +11214,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMovePower: 100, @@ -11028,7 +11254,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "ghostiumz", - secondary: false, + secondary: null, target: "normal", type: "Ghost", contestType: "Cool", @@ -11070,7 +11296,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 100, @@ -11090,7 +11316,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 140, @@ -11111,24 +11337,18 @@ exports.BattleMovedex = { volatileStatus: 'nightmare', effect: { noCopy: true, - onStart: function (pokemon) { + onStart(pokemon) { if (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) { return false; } this.add('-start', pokemon, 'Nightmare'); }, onResidualOrder: 9, - onResidual: function (pokemon) { + onResidual(pokemon) { this.damage(pokemon.maxhp / 4); }, - onUpdate: function (pokemon) { - if (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) { - pokemon.removeVolatile('nightmare'); - this.add('-end', pokemon, 'Nightmare', '[silent]'); - } - }, }, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMoveBoost: {spa: 1}, @@ -11150,7 +11370,7 @@ exports.BattleMovedex = { atk: -1, spa: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -11192,7 +11412,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, distance: 1, heal: 1}, drain: [3, 4], - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 160, @@ -11203,7 +11423,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 195, category: "Special", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "oceanicoperetta", name: "Oceanic Operetta", @@ -11211,7 +11430,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "primariumz", - secondary: false, + secondary: null, target: "normal", type: "Water", contestType: "Cool", @@ -11244,7 +11463,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Causes the target to have its positive evasiveness stat stage ignored while it is active. Normal- and Fighting-type attacks can hit the target if it is a Ghost type. The effect ends when the target is no longer active. Fails if the target is already affected, or affected by Foresight or Miracle Eye.", + desc: "As long as the target remains active, its evasiveness stat stage is ignored during accuracy checks against it if it is greater than 0, and Normal- and Fighting-type attacks can hit the target if it is a Ghost type. Fails if the target is already affected, or affected by Foresight or Miracle Eye.", shortDesc: "Fighting, Normal hit Ghost. Evasiveness ignored.", id: "odorsleuth", name: "Odor Sleuth", @@ -11252,10 +11471,10 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1, mystery: 1}, volatileStatus: 'foresight', - onTryHit: function (target) { + onTryHit(target) { if (target.volatiles['miracleeye']) return false; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {atk: 1}, @@ -11313,7 +11532,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 120, category: "Physical", - desc: "Deals damage to one adjacent foe at random. The user spends two or three turns locked into this move and becomes confused after the last turn of the effect if it is not already. If the user is prevented from moving or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + desc: "The user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk and the user is asleep, the move is used for one turn and does not confuse the user.", shortDesc: "Lasts 2-3 turns. Confuses the user afterwards.", id: "outrage", isViable: true, @@ -11324,12 +11543,12 @@ exports.BattleMovedex = { self: { volatileStatus: 'lockedmove', }, - onAfterMove: function (pokemon) { + onAfterMove(pokemon) { if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { pokemon.removeVolatile('lockedmove'); } }, - secondary: false, + secondary: null, target: "randomNormal", type: "Dragon", zMovePower: 190, @@ -11353,7 +11572,7 @@ exports.BattleMovedex = { spa: -2, }, }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 195, @@ -11372,13 +11591,13 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1, mystery: 1}, - onHit: function (target, pokemon) { + onHit(target, pokemon) { let averagehp = Math.floor((target.hp + pokemon.hp) / 2) || 1; target.sethp(averagehp); pokemon.sethp(averagehp); this.add('-sethp', target, target.getHealth, pokemon, pokemon.getHealth, '[from] move: Pain Split'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -11397,7 +11616,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, heal: 1}, drain: [1, 2], - secondary: false, + secondary: null, target: "allAdjacent", type: "Electric", zMovePower: 120, @@ -11408,7 +11627,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Lowers the target's Attack and Special Attack by 1 stage. 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.", + desc: "Lowers the target's Attack and Special Attack by 1 stage. 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: "Lowers target's Atk, Sp. Atk by 1. User switches.", id: "partingshot", isViable: true, @@ -11421,7 +11640,7 @@ exports.BattleMovedex = { atk: -1, spa: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveEffect: 'healreplacement', @@ -11439,10 +11658,10 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function () { + onHit() { this.add('-fieldactivate', 'move: Pay Day'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -11452,7 +11671,7 @@ exports.BattleMovedex = { num: 371, accuracy: 100, basePower: 50, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (target.newlySwitched || this.willMove(target)) { this.debug('Payback NOT boosted'); return move.basePower; @@ -11461,14 +11680,14 @@ exports.BattleMovedex = { return move.basePower * 2; }, category: "Physical", - desc: "Power doubles if the target moves before the user; power is not doubled if the target switches out.", + desc: "Power doubles if the user moves after the target this turn, including actions taken through Instruct or the Dancer Ability. Switching in does not count as an action.", shortDesc: "Power doubles if the user moves after the target.", id: "payback", name: "Payback", pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 100, @@ -11479,14 +11698,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 35, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "peck", name: "Peck", pp: 35, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 100, @@ -11505,17 +11723,20 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {sound: 1, distance: 1, authentic: 1}, - onHitField: function (target, source, move) { + onHitField(target, source, move) { let result = false; let message = false; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - if (this.sides[i].active[j] && this.sides[i].active[j].isActive) { - if (this.runEvent('TryHit', this.sides[i].active[j], source, move) === null) { + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon && pokemon.isActive) { + if (!this.runEvent('Accuracy', pokemon, source, move, true)) { + this.add('-miss', source, pokemon); + result = true; + } else if (this.runEvent('TryHit', pokemon, source, move) === null) { result = true; - } else if (!this.sides[i].active[j].volatiles['perishsong']) { - this.sides[i].active[j].addVolatile('perishsong'); - this.add('-start', this.sides[i].active[j], 'perish3', '[silent]'); + } else if (!pokemon.volatiles['perishsong']) { + pokemon.addVolatile('perishsong'); + this.add('-start', pokemon, 'perish3', '[silent]'); result = true; message = true; } @@ -11527,17 +11748,17 @@ exports.BattleMovedex = { }, effect: { duration: 4, - onEnd: function (target) { + onEnd(target) { this.add('-start', target, 'perish0'); target.faint(); }, onResidualOrder: 20, - onResidual: function (pokemon) { + onResidual(pokemon) { let duration = pokemon.volatiles['perishsong'].duration; this.add('-start', pokemon, 'perish' + duration); }, }, - secondary: false, + secondary: null, target: "all", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -11556,7 +11777,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "allAdjacent", type: "Grass", zMovePower: 175, @@ -11567,10 +11788,9 @@ exports.BattleMovedex = { accuracy: 100, basePower: 120, category: "Special", - desc: "Deals damage to one adjacent foe at random. The user spends two or three turns locked into this move and becomes confused after the last turn of the effect if it is not already. If the user is prevented from moving or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + desc: "The user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk and the user is asleep, the move is used for one turn and does not confuse the user.", shortDesc: "Lasts 2-3 turns. Confuses the user afterwards.", id: "petaldance", - isViable: true, name: "Petal Dance", pp: 10, priority: 0, @@ -11578,12 +11798,12 @@ exports.BattleMovedex = { self: { volatileStatus: 'lockedmove', }, - onAfterMove: function (pokemon) { + onAfterMove(pokemon) { if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { pokemon.removeVolatile('lockedmove'); } }, - secondary: false, + secondary: null, target: "randomNormal", type: "Grass", zMovePower: 190, @@ -11594,7 +11814,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 90, category: "Physical", - 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.", + desc: "If this move is successful, it breaks through the target's Baneful Bunker, 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.", shortDesc: "Disappears turn 1. Hits turn 2. Breaks protection.", id: "phantomforce", name: "Phantom Force", @@ -11602,13 +11822,12 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, charge: 1, mirror: 1}, breaksProtect: true, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -11616,7 +11835,7 @@ exports.BattleMovedex = { }, effect: { duration: 2, - onAccuracy: function (accuracy, target, source, move) { + onTryImmunity(target, source, move) { if (move.id === 'helpinghand') { return; } @@ -11624,21 +11843,67 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, }, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 175, contestType: "Cool", }, + "photongeyser": { + num: 722, + accuracy: 100, + basePower: 100, + 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.", + id: "photongeyser", + isViable: true, + name: "Photon Geyser", + pp: 5, + priority: 0, + flags: {protect: 1, mirror: 1}, + onModifyMove(move, pokemon) { + if (pokemon.getStat('atk', false, true) > pokemon.getStat('spa', false, true)) move.category = 'Physical'; + }, + ignoreAbility: true, + secondary: null, + target: "normal", + type: "Psychic", + zMovePower: 180, + contestType: "Cool", + }, + "pikapapow": { + num: 732, + accuracy: true, + basePower: 0, + basePowerCallback(pokemon) { + return Math.floor((pokemon.happiness * 10) / 25) || 1; + }, + category: "Special", + desc: "Power is equal to the greater of (user's Happiness * 2/5), rounded down, or 1.", + shortDesc: "Max happiness: 102 power. Can't miss.", + id: "pikapapow", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Pika Papow", + pp: 20, + priority: 0, + flags: {protect: 1}, + secondary: null, + target: "normal", + type: "Electric", + contestType: "Cute", + }, "pinmissile": { num: 42, accuracy: 95, basePower: 25, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "pinmissile", name: "Pin Missile", @@ -11646,12 +11911,32 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 140, contestType: "Cool", }, + "plasmafists": { + num: 721, + accuracy: 100, + basePower: 100, + category: "Physical", + desc: "If this move is successful, causes Normal-type moves to become Electric type this turn.", + shortDesc: "Normal moves become Electric type this turn.", + id: "plasmafists", + isViable: true, + name: "Plasma Fists", + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, + pseudoWeather: 'iondeluge', + secondary: null, + target: "normal", + type: "Electric", + zMovePower: 180, + contestType: "Cool", + }, "playnice": { num: 589, accuracy: true, @@ -11667,7 +11952,7 @@ exports.BattleMovedex = { boosts: { atk: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -11702,14 +11987,14 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - desc: "If this move is successful and the user has not fainted, it steals the target's held Berry if it is holding one and eats it immediately. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", + desc: "If this move is successful and the user has not fainted, it steals the target's held Berry if it is holding one and eats it immediately, gaining its effects even if the user's item is being ignored. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", shortDesc: "User steals and eats the target's Berry.", id: "pluck", name: "Pluck", pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, - onHit: function (target, source) { + onHit(target, source) { let item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { this.add('-enditem', target, item.name, '[from] stealeat', '[move] Pluck', '[of] ' + source); @@ -11719,7 +12004,7 @@ exports.BattleMovedex = { if (item.onEat) source.ateBerry = true; } }, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 120, @@ -11759,7 +12044,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'psn', - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Poison", zMoveBoost: {def: 1}, @@ -11800,7 +12085,7 @@ exports.BattleMovedex = { priority: 0, flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, status: 'psn', - secondary: false, + secondary: null, target: "normal", type: "Poison", zMoveBoost: {def: 1}, @@ -11861,13 +12146,13 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (source.side === target.side) { move.basePower = 0; move.heal = [1, 2]; } }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 175, @@ -11878,14 +12163,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "pound", name: "Pound", pp: 35, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -11896,7 +12180,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "If the target uses a Fire-type move this turn, it is prevented from executing and the target loses 1/4 of its maximum HP, rounded half up.", + desc: "If the target uses a Fire-type move this turn, it is prevented from executing and the target loses 1/4 of its maximum HP, rounded half up. This effect does not happen if the Fire-type move is prevented by Primordial Sea.", shortDesc: "If using a Fire move, target loses 1/4 max HP.", id: "powder", name: "Powder", @@ -11906,11 +12190,11 @@ exports.BattleMovedex = { volatileStatus: 'powder', effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'Powder'); }, onTryMovePriority: -1, - onTryMove: function (pokemon, target, move) { + onTryMove(pokemon, target, move) { if (move.type === 'Fire') { this.add('-activate', pokemon, 'move: Powder'); this.damage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1)); @@ -11918,7 +12202,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMoveBoost: {spd: 2}, @@ -11950,7 +12234,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 80, category: "Special", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "powergem", isViable: true, @@ -11958,7 +12241,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 160, @@ -11976,7 +12259,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { let newatk = Math.floor((target.stats.atk + source.stats.atk) / 2); target.stats.atk = newatk; source.stats.atk = newatk; @@ -11985,7 +12268,7 @@ exports.BattleMovedex = { source.stats.spa = newspa; this.add('-activate', source, 'move: Power Split', '[of] ' + target); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -12003,13 +12286,15 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { let targetBoosts = {}; let sourceBoosts = {}; - for (let i in {atk:1, spa:1}) { - targetBoosts[i] = target.boosts[i]; - sourceBoosts[i] = source.boosts[i]; + for (const stat of ['atk', 'spa']) { + // @ts-ignore + targetBoosts[stat] = target.boosts[stat]; + // @ts-ignore + sourceBoosts[stat] = source.boosts[stat]; } source.setBoost(targetBoosts); @@ -12017,7 +12302,7 @@ exports.BattleMovedex = { this.add('-swapboost', source, target, 'atk, spa', '[from] move: Power Swap'); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -12028,7 +12313,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user swaps its Attack and Defense stats; stat stage changes remain on their respective stats. This move can be used again to swap the stats back. If the user uses Baton Pass, the replacement will have its Attack and Defense stats swapped if the effect is active. If the user has its stats recalculated by changing forme while its stats are swapped, this effect is ignored but is still active for the purposes of Baton Pass.", + desc: "The user swaps its Attack and Defense stats, and stat stage changes remain on their respective stats. This move can be used again to swap the stats back. If the user uses Baton Pass, the replacement will have its Attack and Defense stats swapped if the effect is active. If the user has its stats recalculated by changing forme while its stats are swapped, this effect is ignored but is still active for the purposes of Baton Pass.", shortDesc: "Switches user's Attack and Defense stats.", id: "powertrick", name: "Power Trick", @@ -12037,31 +12322,31 @@ exports.BattleMovedex = { flags: {snatch: 1}, volatileStatus: 'powertrick', effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'Power Trick'); let newatk = pokemon.stats.def; let newdef = pokemon.stats.atk; pokemon.stats.atk = newatk; pokemon.stats.def = newdef; }, - onCopy: function (pokemon) { + onCopy(pokemon) { let newatk = pokemon.stats.def; let newdef = pokemon.stats.atk; pokemon.stats.atk = newatk; pokemon.stats.def = newdef; }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'Power Trick'); let newatk = pokemon.stats.def; let newdef = pokemon.stats.atk; pokemon.stats.atk = newatk; pokemon.stats.def = newdef; }, - onRestart: function (pokemon) { + onRestart(pokemon) { pokemon.removeVolatile('Power Trick'); }, }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveBoost: {atk: 1}, @@ -12071,7 +12356,7 @@ exports.BattleMovedex = { num: 681, accuracy: 100, basePower: 20, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { return move.basePower + 20 * pokemon.positiveBoosts(); }, category: "Physical", @@ -12081,8 +12366,8 @@ exports.BattleMovedex = { name: "Power Trip", pp: 10, priority: 0, - flags: {contact:1, protect: 1, mirror: 1}, - secondary: false, + flags: {contact: 1, protect: 1, mirror: 1}, + secondary: null, target: "normal", type: "Dark", zMovePower: 160, @@ -12119,7 +12404,6 @@ exports.BattleMovedex = { accuracy: 85, basePower: 120, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "powerwhip", isViable: true, @@ -12127,7 +12411,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 190, @@ -12156,14 +12440,14 @@ exports.BattleMovedex = { accuracy: 90, basePower: 0, category: "Physical", - desc: "Deals damage or heals the target. 40% chance for 40 power, 30% chance for 80 power, 10% chance for 120 power, and 20% chance to heal the target by 1/4 of its maximum HP, rounded down. This move must hit to be effective.", - shortDesc: "40, 80, 120 power, or heals target by 1/4 max HP.", + desc: "If this move is successful, it deals damage or heals the target. 40% chance for 40 power, 30% chance for 80 power, 10% chance for 120 power, and 20% chance to heal the target by 1/4 of its maximum HP, rounded down.", + shortDesc: "40, 80, 120 power, or heals target 1/4 max HP.", id: "present", name: "Present", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move, pokemon, target) { + onModifyMove(move, pokemon, target) { let rand = this.random(10); if (rand < 2) { move.heal = [1, 4]; @@ -12175,7 +12459,7 @@ exports.BattleMovedex = { move.basePower = 120; } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -12186,7 +12470,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 160, category: "Special", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "prismaticlaser", name: "Prismatic Laser", @@ -12196,7 +12480,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 200, @@ -12207,7 +12491,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", + desc: "The user is protected from most attacks made by other Pokemon during this turn. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", shortDesc: "Prevents moves from affecting the user this turn.", id: "protect", isViable: true, @@ -12217,19 +12501,19 @@ exports.BattleMovedex = { flags: {}, stallingMove: true, volatileStatus: 'protect', - onPrepareHit: function (pokemon) { + onPrepareHit(pokemon) { return !!this.willAct() && this.runEvent('StallMove', pokemon); }, - onHit: function (pokemon) { + onHit(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'Protect'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!move.flags['protect']) { if (move.isZ) move.zBrokeProtect = true; return; @@ -12242,10 +12526,10 @@ exports.BattleMovedex = { delete source.volatiles['lockedmove']; } } - return null; + return this.NOT_FAILURE; }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -12284,13 +12568,16 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { for (let i in target.boosts) { + // @ts-ignore source.boosts[i] = target.boosts[i]; } + if (target.volatiles['focusenergy']) source.addVolatile('focusenergy'); + if (target.volatiles['laserfocus']) source.addVolatile('laserfocus'); this.add('-copyboost', source, target, '[from] move: Psych Up'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'heal', @@ -12333,7 +12620,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {bite: 1, contact: 1, protect: 1, mirror: 1}, - onTryHit: function (pokemon) { + onTryHit(pokemon) { // will shatter screens through sub, before you hit if (pokemon.runImmunity('Psychic')) { pokemon.side.removeSideCondition('reflect'); @@ -12341,7 +12628,7 @@ exports.BattleMovedex = { pokemon.side.removeSideCondition('auroraveil'); } }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 160, @@ -12362,14 +12649,14 @@ exports.BattleMovedex = { terrain: 'psychicterrain', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('terrainextender')) { return 8; } return 5; }, onTryHitPriority: 4, - onTryHit: function (target, source, effect) { + onTryHit(target, source, effect) { if (!target.isGrounded() || target.isSemiInvulnerable() || target.side === source.side) return; if (effect && (effect.priority <= 0.1 || effect.target === 'self')) { return; @@ -12377,13 +12664,13 @@ exports.BattleMovedex = { this.add('-activate', target, 'move: Psychic Terrain'); return null; }, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.type === 'Psychic' && attacker.isGrounded() && !attacker.isSemiInvulnerable()) { this.debug('psychic terrain boost'); return this.chainModify(1.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { this.add('-fieldstart', 'move: Psychic Terrain', '[from] ability: ' + effect, '[of] ' + source); } else { @@ -12392,11 +12679,11 @@ exports.BattleMovedex = { }, onResidualOrder: 21, onResidualSubOrder: 2, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Psychic Terrain'); }, }, - secondary: false, + secondary: null, target: "all", type: "Psychic", zMoveBoost: {spa: 1}, @@ -12420,7 +12707,7 @@ exports.BattleMovedex = { spa: -2, }, }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 200, @@ -12440,7 +12727,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 140, @@ -12451,21 +12738,23 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "The user's major status condition is transferred to the target, and the user is then cured. Fails if the target already has a major status condition.", + desc: "The user's major status condition is transferred to the target, and the user is then cured. Fails if the user has no major status condition or if the target already has one.", shortDesc: "Transfers the user's status ailment to the target.", id: "psychoshift", name: "Psycho Shift", pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function (target, pokemon) { - if (pokemon.status && !target.status && target.trySetStatus(pokemon.status)) { + onPrepareHit(target, source, move) { + if (!source.status) return false; + move.status = source.status; + }, + self: { + onHit(pokemon) { pokemon.cureStatus(); - } else { - return false; - } + }, }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spa: 2}, @@ -12485,7 +12774,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 160, @@ -12505,7 +12794,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 180, @@ -12515,18 +12804,18 @@ exports.BattleMovedex = { num: 149, accuracy: 100, basePower: 0, - damageCallback: function (pokemon) { + damageCallback(pokemon) { return (this.random(50, 151) * pokemon.level) / 100; }, category: "Special", - desc: "Deals damage to the target equal to (user's level) * (X+50) / 100, where X is a random number from 0 to 100, rounded down, but not less than 1 HP.", + desc: "Deals damage to the target equal to (user's level) * (X + 50) / 100, where X is a random number from 0 to 100, rounded down, but not less than 1 HP.", shortDesc: "Random damage equal to 0.5x-1.5x user's level.", id: "psywave", name: "Psywave", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 100, @@ -12537,7 +12826,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 210, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "pulverizingpancake", name: "Pulverizing Pancake", @@ -12545,7 +12833,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1}, isZ: "snorliumz", - secondary: false, + secondary: null, target: "normal", type: "Normal", contestType: "Cool", @@ -12554,7 +12842,7 @@ exports.BattleMovedex = { num: 386, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let power = 60 + 20 * target.positiveBoosts(); if (power > 200) power = 200; return power; @@ -12567,7 +12855,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 160, @@ -12585,12 +12873,11 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, heal: 1}, - onHit: function (target, source) { - if (!target.status) return false; - target.cureStatus(); + onHit(target, source) { + if (!target.cureStatus()) return false; this.heal(Math.ceil(source.maxhp * 0.5), source); }, - secondary: false, + secondary: null, target: "normal", type: "Poison", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -12600,7 +12887,7 @@ exports.BattleMovedex = { num: 228, accuracy: 100, basePower: 40, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { // You can't get here unless the pursuit succeeds if (target.beingCalledBack) { this.debug('Pursuit damage boost'); @@ -12609,7 +12896,7 @@ exports.BattleMovedex = { return move.basePower; }, category: "Physical", - desc: "If an adjacent foe 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 a foe using Parting Shot, U-turn, or Volt Switch, but not Baton Pass, it will hit that foe before it leaves the field. Power doubles and no accuracy check is done if the user hits a foe switching out, and the user's turn is over; if a foe faints from this, the replacement Pokemon does not become active until the end of the turn.", + 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: "Power doubles if a foe is switching out.", id: "pursuit", isViable: true, @@ -12617,48 +12904,49 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - beforeTurnCallback: function (pokemon, target) { - target.side.addSideCondition('pursuit', pokemon); - if (!target.side.sideConditions['pursuit'].sources) { - target.side.sideConditions['pursuit'].sources = []; + beforeTurnCallback(pokemon) { + for (const side of this.sides) { + if (side === pokemon.side) continue; + side.addSideCondition('pursuit', pokemon); + if (!side.sideConditions['pursuit'].sources) { + side.sideConditions['pursuit'].sources = []; + } + side.sideConditions['pursuit'].sources.push(pokemon); } - target.side.sideConditions['pursuit'].sources.push(pokemon); }, - onModifyMove: function (move, source, target) { + onModifyMove(move, source, target) { if (target && target.beingCalledBack) move.accuracy = true; }, - onTryHit: function (target, pokemon) { + onTryHit(target, pokemon) { target.side.removeSideCondition('pursuit'); }, effect: { duration: 1, - onBeforeSwitchOut: function (pokemon) { + onBeforeSwitchOut(pokemon) { this.debug('Pursuit start'); - let sources = this.effectData.sources; let alreadyAdded = false; - for (let i = 0; i < sources.length; i++) { - if (sources[i].moveThisTurn || sources[i].fainted) continue; + for (const source of this.effectData.sources) { + if (!this.cancelMove(source) || !source.hp) continue; if (!alreadyAdded) { this.add('-activate', pokemon, 'move: Pursuit'); alreadyAdded = true; } - this.cancelMove(sources[i]); - // Run through each decision in queue to check if the Pursuit user is supposed to Mega Evolve this turn. + // 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 (sources[i].canMegaEvo) { - for (let j = 0; j < this.queue.length; j++) { - if (this.queue[j].pokemon === sources[i] && this.queue[j].choice === 'megaEvo') { - this.runMegaEvo(sources[i]); - this.queue.splice(j, 1); + if (source.canMegaEvo || source.canUltraBurst) { + for (const [actionIndex, action] of this.queue.entries()) { + if (action.pokemon === source && action.choice === 'megaEvo') { + this.runMegaEvo(source); + this.queue.splice(actionIndex, 1); break; } } } - this.runMove('pursuit', sources[i], this.getTargetLoc(pokemon, sources[i])); + this.runMove('pursuit', source, this.getTargetLoc(pokemon, source)); } }, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 100, @@ -12676,15 +12964,15 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - onHit: function (target) { + onHit(target) { if (target.side.active.length < 2) return false; // fails in singles - let decision = this.willMove(target); - if (decision) { - decision.priority = -7.1; + let action = this.willMove(target); + if (action) { + action.priority = -7.1; this.cancelMove(target); for (let i = this.queue.length - 1; i >= 0; i--) { if (this.queue[i].choice === 'residual') { - this.queue.splice(i, 0, decision); + this.queue.splice(i, 0, action); break; } } @@ -12693,7 +12981,7 @@ exports.BattleMovedex = { return false; } }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {spe: 1}, @@ -12712,7 +13000,7 @@ exports.BattleMovedex = { pp: 30, priority: 1, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -12723,7 +13011,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user and its party members are protected from attacks with original or altered priority greater than 0 made by other Pokemon, including allies, during this turn. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn or if this move is already in effect for the user's side.", + desc: "The user and its party members are protected from attacks with original or altered priority greater than 0 made by other Pokemon, including allies, during this turn. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn or if this move is already in effect for the user's side.", shortDesc: "Protects allies from priority attacks this turn.", id: "quickguard", name: "Quick Guard", @@ -12731,19 +13019,19 @@ exports.BattleMovedex = { priority: 3, flags: {snatch: 1}, sideCondition: 'quickguard', - onTryHitSide: function (side, source) { + onTryHitSide(side, source) { return this.willAct(); }, - onHitSide: function (side, source) { + onHitSide(side, source) { source.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target, source) { + onStart(target, source) { this.add('-singleturn', source, 'Quick Guard'); }, onTryHitPriority: 4, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { // Quick Guard blocks moves with positive priority, even those given increased priority by Prankster or Gale Wings. // (e.g. it blocks 0 priority moves boosted by Prankster or Gale Wings; Quick Claw/Custap Berry do not count) if (move.priority <= 0.1) return; @@ -12759,10 +13047,10 @@ exports.BattleMovedex = { delete source.volatiles['lockedmove']; } } - return null; + return this.NOT_FAILURE; }, }, - secondary: false, + secondary: null, target: "allySide", type: "Fighting", zMoveBoost: {def: 1}, @@ -12786,7 +13074,7 @@ exports.BattleMovedex = { spd: 1, spe: 1, }, - secondary: false, + secondary: null, target: "self", type: "Bug", zMoveEffect: 'clearnegativeboost', @@ -12797,7 +13085,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 20, category: "Physical", - desc: "Once this move is successfuly used, the user's Attack is raised by 1 stage every time it is hit by another Pokemon's attack as long as this move is chosen for use.", + desc: "Once this move is successfully used, the user's Attack is raised by 1 stage every time it is hit by another Pokemon's attack as long as this move is chosen for use.", shortDesc: "Raises the user's Attack by 1 if hit during use.", id: "rage", name: "Rage", @@ -12808,21 +13096,21 @@ exports.BattleMovedex = { volatileStatus: 'rage', }, effect: { - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singlemove', pokemon, 'Rage'); }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (target !== source && move.category !== 'Status') { - this.boost({atk:1}); + this.boost({atk: 1}); } }, onBeforeMovePriority: 100, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { this.debug('removing Rage before attack'); pokemon.removeVolatile('rage'); }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -12833,7 +13121,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Until the end of the turn, all single-target attacks from the foe's team are redirected to the user if they are in range. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Ability Magic Bounce, or drawn in by the Abilities Lightning Rod or Storm Drain. Fails if it is not a Double or Triple Battle.", + desc: "Until the end of the turn, all single-target attacks from the opposing side are redirected to the user. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Magic Bounce Ability, or drawn in by the Lightning Rod or Storm Drain Abilities. Fails if it is not a Double Battle or Battle Royal. This effect is ignored while the user is under the effect of Sky Drop.", shortDesc: "The foes' moves target the user on the turn used.", id: "ragepowder", name: "Rage Powder", @@ -12841,23 +13129,23 @@ exports.BattleMovedex = { priority: 2, flags: {powder: 1}, volatileStatus: 'ragepowder', - onTryHit: function (target) { + onTryHit(target) { if (target.side.active.length < 2) return false; }, effect: { duration: 1, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singleturn', pokemon, 'move: Rage Powder'); }, onFoeRedirectTargetPriority: 1, - onFoeRedirectTarget: function (target, source, source2, move) { - if (source.runStatusImmunity('powder') && this.validTarget(this.effectData.target, source, move.target)) { + onFoeRedirectTarget(target, source, source2, move) { + if (!this.effectData.target.isSkyDropped() && source.runStatusImmunity('powder') && this.validTarget(this.effectData.target, source, move.target)) { this.debug("Rage Powder redirected target of move"); return this.effectData.target; } }, }, - secondary: false, + secondary: null, target: "self", type: "Bug", zMoveEffect: 'clearnegativeboost', @@ -12876,7 +13164,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, weather: 'RainDance', - secondary: false, + secondary: null, target: "all", type: "Water", zMoveBoost: {spe: 1}, @@ -12887,8 +13175,8 @@ exports.BattleMovedex = { accuracy: 100, basePower: 20, category: "Physical", - desc: "If this move is successful and the user has not fainted, 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.", - shortDesc: "Frees user from hazards/partial trap/Leech Seed.", + 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.", + shortDesc: "Frees user from hazards, binding, Leech Seed.", id: "rapidspin", isViable: true, name: "Rapid Spin", @@ -12896,14 +13184,14 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, self: { - onHit: function (pokemon) { + onHit(pokemon) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', '[of] ' + pokemon); } - let sideConditions = {spikes:1, toxicspikes:1, stealthrock:1, stickyweb:1}; - for (let i in sideConditions) { - if (pokemon.hp && pokemon.side.removeSideCondition(i)) { - this.add('-sideend', pokemon.side, this.getEffect(i).name, '[from] move: Rapid Spin', '[of] ' + pokemon); + let sideConditions = ['spikes', 'toxicspikes', 'stealthrock', 'stickyweb']; + for (const condition of sideConditions) { + if (pokemon.hp && pokemon.side.removeSideCondition(condition)) { + this.add('-sideend', pokemon.side, this.getEffect(condition).name, '[from] move: Rapid Spin', '[of] ' + pokemon); } } if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { @@ -12911,7 +13199,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -12930,7 +13218,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Grass", zMovePower: 100, @@ -12972,26 +13260,19 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {charge: 1, protect: 1, mirror: 1}, - onTry: function (attacker, defender, move) { - if (attacker.volatiles['twoturnmove']) { - if (attacker.volatiles['twoturnmove'].duration === 2) return null; - attacker.removeVolatile(move.id); + onTryMove(attacker, defender, move) { + if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); - if (move.spreadHit) { - attacker.addVolatile('twoturnmove', defender); - attacker.volatiles['twoturnmove'].duration = 1; - } return; } attacker.addVolatile('twoturnmove', defender); return null; }, critRatio: 2, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMovePower: 160, @@ -13011,7 +13292,7 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1, heal: 1}, heal: [1, 2], - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -13022,19 +13303,20 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user regains the item it last used, if it is not holding an item. Fails if the user was not holding an item, if the item was a popped Air Balloon, if the item was picked up by a Pokemon with the Ability Pickup, or if the item was lost to Bug Bite, Covet, Incinerate, Knock Off, Pluck, or Thief. Items thrown with Fling can be regained.", + desc: "The user regains the item it last used. Fails if the user is holding an item, if the user has not held an item, if the item was a popped Air Balloon, if the item was picked up by a Pokemon with the Pickup Ability, or if the item was lost to Bug Bite, Covet, Incinerate, Knock Off, Pluck, or Thief. Items thrown with Fling can be regained.", shortDesc: "Restores the item the user last used.", id: "recycle", name: "Recycle", pp: 10, priority: 0, flags: {snatch: 1}, - onHit: function (pokemon) { + onHit(pokemon) { if (pokemon.item || !pokemon.lastItem) return false; pokemon.setItem(pokemon.lastItem); + pokemon.lastItem = ''; this.add('-item', pokemon, pokemon.getItem(), '[from] move: Recycle'); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {spe: 2}, @@ -13045,7 +13327,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the user and its party members take 0.5x damage from physical attacks, or 0.66x damage if in a Double or Triple Battle. 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 or Defog. Brick Break removes the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay.", + desc: "For 5 turns, the user and its party members take 0.5x damage from physical attacks, or 0.66x damage if in a Double Battle. Damage is not reduced further with Aurora Veil. Critical hits ignore this effect. It is removed from the user's side if the user or an ally is successfully hit by Brick Break, Psychic Fangs, or Defog. Lasts for 8 turns if the user is holding Light Clay. Fails if the effect is already active on the user's side.", shortDesc: "For 5 turns, physical damage to allies is halved.", id: "reflect", isViable: true, @@ -13056,13 +13338,13 @@ exports.BattleMovedex = { sideCondition: 'reflect', effect: { duration: 5, - durationCallback: function (target, source, effect) { + durationCallback(target, source, effect) { if (source && source.hasItem('lightclay')) { return 8; } return 5; }, - onAnyModifyDamage: function (damage, source, target, move) { + onAnyModifyDamage(damage, source, target, move) { if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Physical') { if (!move.crit && !move.infiltrates) { this.debug('Reflect weaken'); @@ -13071,15 +13353,15 @@ exports.BattleMovedex = { } } }, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'Reflect'); }, onResidualOrder: 21, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'Reflect'); }, }, - secondary: false, + secondary: null, target: "allySide", type: "Psychic", zMoveBoost: {def: 1}, @@ -13097,14 +13379,22 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { if (source.template && (source.template.num === 493 || source.template.num === 773)) return false; this.add('-start', source, 'typechange', '[from] move: Reflect Type', '[of] ' + target); - source.types = target.getTypes(true); + let newBaseTypes = target.getTypes(true).filter(type => type !== '???'); + if (!newBaseTypes.length) { + if (target.addedType) { + newBaseTypes = ['Normal']; + } else { + return false; + } + } + source.setType(newBaseTypes); source.addedType = target.addedType; source.knownType = target.side === source.side && target.knownType; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spa: 1}, @@ -13115,18 +13405,19 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user cures its burn, poison, or paralysis.", + desc: "The user cures its burn, poison, or paralysis. Fails if the user is not burned, poisoned, or paralyzed.", shortDesc: "User cures its burn, poison, or paralysis.", id: "refresh", + isViable: true, name: "Refresh", pp: 20, priority: 0, flags: {snatch: 1}, - onHit: function (pokemon) { - if (pokemon.status in {'': 1, 'slp': 1, 'frz': 1}) return false; + onHit(pokemon) { + if (['', 'slp', 'frz'].includes(pokemon.status)) return false; pokemon.cureStatus(); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'heal', @@ -13137,7 +13428,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 75, category: "Special", - 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.", + 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 Sheer Force Ability. The Pirouette Forme reverts to Aria Forme when Meloetta is not active.", shortDesc: "10% chance to sleep foe(s). Meloetta transforms.", id: "relicsong", isViable: true, @@ -13149,19 +13440,15 @@ exports.BattleMovedex = { chance: 10, status: 'slp', }, - onHit: function (target, pokemon) { + onHit(target, pokemon, move) { if (pokemon.baseTemplate.baseSpecies === 'Meloetta' && !pokemon.transformed) { - pokemon.addVolatile('relicsong'); + move.willChangeForme = true; } }, - effect: { - duration: 1, - onAfterMoveSecondarySelf: function (pokemon, target, move) { - if (pokemon.formeChange(pokemon.template.speciesid === 'meloettapirouette' ? 'Meloetta' : 'Meloetta-Pirouette')) { - this.add('-formechange', pokemon, pokemon.illusion ? pokemon.illusion.template.species : pokemon.template.species, '[msg]'); - } - pokemon.removeVolatile('relicsong'); - }, + onAfterMoveSecondarySelf(pokemon, target, move) { + if (move.willChangeForme) { + pokemon.formeChange(pokemon.template.speciesid === 'meloettapirouette' ? 'Meloetta' : 'Meloetta-Pirouette', this.effect, false, '[msg]'); + } }, target: "allAdjacentFoes", type: "Normal", @@ -13181,15 +13468,19 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {snatch: 1, heal: 1}, - onHit: function (target) { - if (target.hp >= target.maxhp) return false; + onTryMove(pokemon) { + if (pokemon.hp < pokemon.maxhp && pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) return; + this.add('-fail', pokemon); + return null; + }, + onHit(target) { if (!target.setStatus('slp')) return false; target.statusData.time = 3; target.statusData.startTime = 3; this.heal(target.maxhp); //Aeshetic only as the healing happens after you fall asleep in-game this.add('-status', target, 'slp', '[from] move: Rest'); }, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveEffect: 'clearnegativeboost', @@ -13208,13 +13499,13 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon) { + onBasePower(basePower, pokemon) { if (pokemon.side.faintedLastTurn) { this.debug('Boosted for a faint last turn'); return this.chainModify(2); } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, @@ -13224,7 +13515,7 @@ exports.BattleMovedex = { num: 216, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon) { + basePowerCallback(pokemon) { return Math.floor((pokemon.happiness * 10) / 25) || 1; }, category: "Physical", @@ -13236,7 +13527,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -13247,7 +13538,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 90, category: "Special", - desc: "This move's type depends on the user's primary type.", + desc: "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 Forest's Curse or Trick-or-Treat. This move is typeless if the user's type is typeless alone.", shortDesc: "Type varies based on the user's primary type.", id: "revelationdance", isViable: true, @@ -13255,12 +13546,12 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1, dance: 1}, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { let type = pokemon.types[0]; if (type === "Bird") type = "???"; move.type = type; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 175, @@ -13270,9 +13561,12 @@ exports.BattleMovedex = { num: 279, accuracy: 100, basePower: 60, - basePowerCallback: function (pokemon, target, move) { - if (target.lastDamage > 0 && pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && pokemon.lastAttackedBy.pokemon === target) { - this.debug('Boosted for getting hit by ' + pokemon.lastAttackedBy.move); + basePowerCallback(pokemon, target, move) { + let damagedByTarget = pokemon.attackedBy.some(p => + p.source === target && p.damage > 0 && p.thisTurn + ); + if (damagedByTarget) { + this.debug('Boosted for getting hit by ' + target); return move.basePower * 2; } return move.basePower; @@ -13285,7 +13579,7 @@ exports.BattleMovedex = { pp: 10, priority: -4, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 120, @@ -13295,7 +13589,7 @@ exports.BattleMovedex = { num: 179, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { let ratio = pokemon.hp * 48 / pokemon.maxhp; if (ratio < 2) { return 200; @@ -13315,14 +13609,14 @@ exports.BattleMovedex = { return 20; }, category: "Physical", - desc: "Deals damage to the target based on the amount of HP the user has left. X is equal to (user's current HP * 48 / user's maximum HP), rounded down; the base power of this attack is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1.", + desc: "The power of this move is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1, where X is equal to (user's current HP * 48 / user's maximum HP), rounded down.", shortDesc: "More power the less HP the user has left.", id: "reversal", name: "Reversal", pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 160, @@ -13333,7 +13627,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The target is forced to switch out and be replaced with a random unfainted ally. Fails if the target used Ingrain previously or has the Ability Suction Cups.", + desc: "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.", shortDesc: "Forces the target to switch to a random ally.", id: "roar", isViable: true, @@ -13342,7 +13636,7 @@ exports.BattleMovedex = { priority: -6, flags: {reflectable: 1, mirror: 1, sound: 1, authentic: 1, mystery: 1}, forceSwitch: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -13353,7 +13647,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 150, category: "Special", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "roaroftime", name: "Roar of Time", @@ -13363,7 +13657,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 200, @@ -13374,7 +13668,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 25, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "rockblast", isViable: true, @@ -13383,7 +13677,7 @@ exports.BattleMovedex = { priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 140, @@ -13426,7 +13720,7 @@ exports.BattleMovedex = { boosts: { spe: 2, }, - secondary: false, + secondary: null, target: "self", type: "Rock", zMoveEffect: 'clearnegativeboost', @@ -13482,14 +13776,13 @@ exports.BattleMovedex = { accuracy: 90, basePower: 50, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "rockthrow", name: "Rock Throw", pp: 15, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 100, @@ -13523,7 +13816,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 150, category: "Physical", - desc: "If this move is successful, the user must recharge on the following turn and cannot make a move.", + 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.", id: "rockwrecker", name: "Rock Wrecker", @@ -13533,7 +13826,7 @@ exports.BattleMovedex = { self: { volatileStatus: 'mustrecharge', }, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 200, @@ -13544,20 +13837,21 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is Multitype, Stance Change, or already matches the target, or if the target's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, Wonder Guard, or Zen Mode.", + desc: "The user's Ability changes to match the target's Ability. Fails if the user's Ability is Battle Bond, Comatose, Disguise, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, or already matches the target, or if the target's Ability is Battle Bond, Comatose, Disguise, Flower Gift, Forecast, Illusion, Imposter, Multitype, Power Construct, Power of Alchemy, Receiver, RKS System, Schooling, Shields Down, Stance Change, Trace, Wonder Guard, or Zen Mode.", shortDesc: "User replaces its Ability with the target's.", id: "roleplay", name: "Role Play", pp: 10, priority: 0, flags: {authentic: 1, mystery: 1}, - onTryHit: function (target, source) { - let bannedAbilities = {comatose:1, flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, trace:1, wonderguard:1, zenmode:1}; - if (bannedAbilities[target.ability] || source.ability === 'multitype' || target.ability === source.ability) { + onTryHit(target, source) { + let bannedTargetAbilities = ['battlebond', 'comatose', 'disguise', 'flowergift', 'forecast', 'illusion', 'imposter', 'multitype', 'powerconstruct', 'powerofalchemy', 'receiver', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'trace', 'wonderguard', 'zenmode']; + let bannedSourceAbilities = ['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange']; + if (bannedTargetAbilities.includes(target.ability) || bannedSourceAbilities.includes(source.ability) || target.ability === source.ability) { return false; } }, - onHit: function (target, source) { + onHit(target, source) { let oldAbility = source.setAbility(target.ability); if (oldAbility) { this.add('-ability', source, this.getAbility(source.ability).name, '[from] move: Role Play', '[of] ' + target); @@ -13565,7 +13859,7 @@ exports.BattleMovedex = { } return false; }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -13596,12 +13890,12 @@ exports.BattleMovedex = { num: 205, accuracy: 90, basePower: 30, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { let bp = move.basePower; if (pokemon.volatiles.rollout && pokemon.volatiles.rollout.hitCount) { bp *= Math.pow(2, pokemon.volatiles.rollout.hitCount); } - pokemon.addVolatile('rollout'); + if (pokemon.status !== 'slp') pokemon.addVolatile('rollout'); if (pokemon.volatiles.defensecurl) { bp *= 2; } @@ -13609,7 +13903,7 @@ exports.BattleMovedex = { return bp; }, category: "Physical", - desc: "If this move is successful, the user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn.", + desc: "If this move is successful, the user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn. If this move hits an active Disguise during the effect, the power multiplier is paused but the turn counter is not, potentially allowing the multiplier to be used on the user's next move after this effect ends.", shortDesc: "Power doubles with each hit. Repeats for 5 turns.", id: "rollout", name: "Rollout", @@ -13619,23 +13913,23 @@ exports.BattleMovedex = { effect: { duration: 2, onLockMove: 'rollout', - onStart: function () { + onStart() { this.effectData.hitCount = 1; }, - onRestart: function () { + onRestart() { this.effectData.hitCount++; if (this.effectData.hitCount < 5) { this.effectData.duration = 2; } }, - onResidual: function (target) { - if (target.lastMove === 'struggle') { + onResidual(target) { + if (target.lastMove && target.lastMove.id === 'struggle') { // don't lock delete target.volatiles['rollout']; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 100, @@ -13661,9 +13955,16 @@ exports.BattleMovedex = { effect: { duration: 1, onResidualOrder: 20, - // implemented in BattlePokemon#getTypes + onStart(target) { + this.add('-singleturn', target, 'move: Roost'); + }, + onTypePriority: -1, + onType(types, pokemon) { + this.effectData.typeWas = types; + return types.filter(type => type !== 'Flying'); + }, }, - secondary: false, + secondary: null, target: "self", type: "Flying", zMoveEffect: 'clearnegativeboost', @@ -13675,34 +13976,35 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Raises the Attack and Special Attack of all grounded Grass-type Pokemon on the field by 1 stage.", - shortDesc: "Raises Atk, Sp. Atk of grounded Grass types by 1.", + shortDesc: "Raises Atk/Sp. Atk of grounded Grass types by 1.", id: "rototiller", name: "Rototiller", pp: 10, priority: 0, flags: {distance: 1, nonsky: 1}, - onHitField: function (target, source) { + onHitField(target, source) { let targets = []; let anyAirborne = false; - for (let sideSlot = 0; sideSlot < this.sides.length; sideSlot++) { - let sideActive = this.sides[sideSlot].active; - for (let activeSlot = 0; activeSlot < sideActive.length; activeSlot++) { - if (!sideActive[activeSlot] || !sideActive[activeSlot].isActive) continue; - if (!sideActive[activeSlot].runImmunity('Ground')) { - this.add('-immune', sideActive[activeSlot], '[msg]'); + for (const side of this.sides) { + for (const pokemon of side.active) { + if (!pokemon || !pokemon.isActive) continue; + if (!pokemon.runImmunity('Ground')) { + this.add('-immune', pokemon); anyAirborne = true; continue; } - if (sideActive[activeSlot].hasType('Grass')) { + if (pokemon.hasType('Grass')) { // This move affects every grounded Grass-type Pokemon in play. - targets.push(sideActive[activeSlot]); + targets.push(pokemon); } } } if (!targets.length && !anyAirborne) return false; // Fails when there are no grounded Grass types or airborne Pokemon - for (let i = 0; i < targets.length; i++) this.boost({atk: 1, spa: 1}, targets[i], source); + for (const pokemon of targets) { + this.boost({atk: 1, spa: 1}, pokemon, source); + } }, - secondary: false, + secondary: null, target: "all", type: "Ground", zMoveBoost: {atk: 1}, @@ -13712,7 +14014,7 @@ exports.BattleMovedex = { num: 496, accuracy: 100, basePower: 60, - basePowerCallback: function (target, source, move) { + basePowerCallback(target, source, move) { if (move.sourceEffect === 'round') { return move.basePower * 2; } @@ -13726,17 +14028,19 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - onTry: function () { - for (let i = 0; i < this.queue.length; i++) { - let decision = this.queue[i]; - if (!decision.pokemon || !decision.move) continue; - if (decision.move.id === 'round') { - this.prioritizeQueue(decision); + onTry() { + for (const action of this.queue) { + // @ts-ignore + if (!action.pokemon || !action.move) continue; + // @ts-ignore + if (action.move.id === 'round') { + // @ts-ignore + this.prioritizeAction(action); return; } } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 120, @@ -13779,7 +14083,7 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1}, ignoreEvasion: true, ignoreDefensive: true, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 175, @@ -13790,7 +14094,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, the user and its party members cannot have major status conditions or confusion inflicted on them by other Pokemon. It is removed from the user's side if the user or an ally is successfully hit by Defog.", + desc: "For 5 turns, the user and its party members cannot have major status conditions or confusion inflicted on them by other Pokemon. It is removed from the user's side if the user or an ally is successfully hit by Defog. Fails if the effect is already active on the user's side.", shortDesc: "For 5 turns, protects user's party from status.", id: "safeguard", name: "Safeguard", @@ -13800,13 +14104,14 @@ exports.BattleMovedex = { sideCondition: 'safeguard', effect: { duration: 5, - durationCallback: function (target, source, effect) { + durationCallback(target, source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 7; } return 5; }, - onSetStatus: function (status, target, source, effect) { + onSetStatus(status, target, source, effect) { if (source && target !== source && effect && (!effect.infiltrates || target.side === source.side)) { this.debug('interrupting setStatus'); if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { @@ -13815,22 +14120,22 @@ exports.BattleMovedex = { return null; } }, - onTryAddVolatile: function (status, target, source, effect) { + onTryAddVolatile(status, target, source, effect) { if ((status.id === 'confusion' || status.id === 'yawn') && source && target !== source && effect && (!effect.infiltrates || target.side === source.side)) { - if (!effect.secondaries) this.add('-activate', target, 'move: Safeguard'); + if (effect.effectType === 'Move' && !effect.secondaries) this.add('-activate', target, 'move: Safeguard'); return null; } }, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'Safeguard'); }, onResidualOrder: 21, onResidualSubOrder: 2, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'Safeguard'); }, }, - secondary: false, + secondary: null, target: "allySide", type: "Normal", zMoveBoost: {spe: 1}, @@ -13851,7 +14156,7 @@ exports.BattleMovedex = { boosts: { accuracy: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Ground", zMoveBoost: {evasion: 1}, @@ -13862,7 +14167,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 35, category: "Physical", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "sandtomb", name: "Sand Tomb", @@ -13870,7 +14175,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 100, @@ -13881,7 +14186,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - 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 Abilities Magic Guard, Overcoat, Sand Force, Sand Rush, or Sand Veil. The Special Defense of Rock-type Pokemon is multiplied by 1.5 when taking damage from a special attack during the effect. Lasts for 8 turns if the user is holding Smooth Rock. Fails if the current weather is Sandstorm.", + 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: "For 5 turns, a sandstorm rages.", id: "sandstorm", name: "Sandstorm", @@ -13889,12 +14194,36 @@ exports.BattleMovedex = { priority: 0, flags: {}, weather: 'Sandstorm', - secondary: false, + secondary: null, target: "all", type: "Rock", zMoveBoost: {spe: 1}, contestType: "Tough", }, + "sappyseed": { + num: 738, + accuracy: 100, + basePower: 90, + category: "Physical", + desc: "This move summons Leech Seed on the foe.", + shortDesc: "Summons Leech Seed.", + id: "sappyseed", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Sappy Seed", + pp: 15, + priority: 0, + flags: {protect: 1, reflectable: 1}, + onHit(target, source) { + if (target.hasType('Grass')) return null; + target.addVolatile('leechseed', source); + }, + secondary: null, + target: "normal", + type: "Grass", + contestType: "Clever", + }, "savagespinout": { num: 634, accuracy: true, @@ -13907,7 +14236,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "buginiumz", - secondary: false, + secondary: null, target: "normal", type: "Bug", contestType: "Cool", @@ -13950,7 +14279,7 @@ exports.BattleMovedex = { boosts: { spe: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -13961,14 +14290,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "scratch", name: "Scratch", pp: 35, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -13989,7 +14317,7 @@ exports.BattleMovedex = { boosts: { def: -2, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {atk: 1}, @@ -14003,6 +14331,7 @@ exports.BattleMovedex = { desc: "Has a 30% chance to burn the target.", shortDesc: "30% chance to burn adjacent Pokemon.", id: "searingshot", + isViable: true, name: "Searing Shot", pp: 5, priority: 0, @@ -14016,19 +14345,38 @@ exports.BattleMovedex = { zMovePower: 180, contestType: "Cool", }, + "searingsunrazesmash": { + num: 724, + accuracy: true, + basePower: 200, + category: "Physical", + desc: "This move and its effects ignore the Abilities of other Pokemon.", + shortDesc: "Ignores the Abilities of other Pokemon.", + id: "searingsunrazesmash", + name: "Searing Sunraze Smash", + pp: 1, + priority: 0, + flags: {contact: 1}, + isZ: "solganiumz", + ignoreAbility: true, + secondary: null, + target: "normal", + type: "Steel", + contestType: "Cool", + }, "secretpower": { num: 290, accuracy: 100, basePower: 70, category: "Physical", - desc: "Has a 30% chance to cause a secondary effect on the target based on the battle terrain. Causes paralysis on the regular Wi-Fi terrain, causes paralysis during Electric Terrain, lowers Special Attack by 1 stage during Misty Terrain, causes sleep during Grassy Terrain and lowers Speed by 1 stage during Psychic Terrain. The secondary effect chance is not affected by the Ability Serene Grace.", + desc: "Has a 30% chance to cause a secondary effect on the target based on the battle terrain. Causes paralysis on the regular Wi-Fi terrain, causes paralysis during Electric Terrain, lowers Special Attack by 1 stage during Misty Terrain, causes sleep during Grassy Terrain and lowers Speed by 1 stage during Psychic Terrain.", shortDesc: "Effect varies with terrain. (30% paralysis chance)", id: "secretpower", name: "Secret Power", pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { if (this.isTerrain('')) return; move.secondaries = []; if (this.isTerrain('electricterrain')) { @@ -14080,7 +14428,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 160, @@ -14091,7 +14439,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "seedbomb", isViable: true, @@ -14099,7 +14446,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 160, @@ -14143,7 +14490,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 100, @@ -14154,7 +14501,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 200, category: "Physical", - 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.", + 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 Damp Ability.", shortDesc: "Hits adjacent Pokemon. The user faints.", id: "selfdestruct", name: "Self-Destruct", @@ -14162,7 +14509,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, selfdestruct: "always", - secondary: false, + secondary: null, target: "allAdjacent", type: "Normal", zMovePower: 200, @@ -14230,7 +14577,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 140, @@ -14241,7 +14588,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 120, category: "Physical", - 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.", + desc: "If this move is successful, it breaks through the target's Baneful Bunker, 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.", shortDesc: "Disappears turn 1. Hits turn 2. Breaks protection.", id: "shadowforce", isViable: true, @@ -14250,13 +14597,12 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, charge: 1, mirror: 1}, breaksProtect: true, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -14264,7 +14610,7 @@ exports.BattleMovedex = { }, effect: { duration: 2, - onAccuracy: function (accuracy, target, source, move) { + onTryImmunity(target, source, move) { if (move.id === 'helpinghand') { return; } @@ -14272,10 +14618,10 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, }, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 190, @@ -14286,7 +14632,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 60, category: "Physical", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "shadowpunch", isViable: true, @@ -14294,7 +14639,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 120, @@ -14313,7 +14658,7 @@ exports.BattleMovedex = { pp: 30, priority: 1, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 100, @@ -14334,7 +14679,7 @@ exports.BattleMovedex = { boosts: { atk: 1, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 1}, @@ -14353,7 +14698,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "psychiumz", - secondary: false, + secondary: null, target: "normal", type: "Psychic", contestType: "Cool", @@ -14363,14 +14708,14 @@ exports.BattleMovedex = { accuracy: 30, basePower: 0, category: "Special", - desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + X)%, where X is 30 if the user is an Ice type and 20 otherwise, and fails if the target is at a higher level. Ice-type Pokemon and Pokemon with the Ability Sturdy are immune.", + desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + X)%, where X is 30 if the user is an Ice type and 20 otherwise, and fails if the target is at a higher level. Ice-type Pokemon and Pokemon with the Sturdy Ability are immune.", shortDesc: "OHKOs non-Ice targets. Fails if user's lower level.", id: "sheercold", name: "Sheer Cold", pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, ohko: 'Ice', target: "normal", type: "Ice", @@ -14397,7 +14742,7 @@ exports.BattleMovedex = { spa: 2, spe: 2, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -14408,34 +14753,36 @@ exports.BattleMovedex = { accuracy: 100, basePower: 150, category: "Special", - desc: "Fails unless the user is hit by a physical attack from an opponent this turn before it can execute the move.", + desc: "Fails unless the user is hit by a physical attack from an opponent this turn before it can execute the move. If the user was hit and has not fainted, it attacks immediately after being hit, and the effect ends. If the opponent's physical attack had a secondary effect removed by the Sheer Force Ability, it does not count for the purposes of this effect.", shortDesc: "User must take physical damage before moving.", id: "shelltrap", name: "Shell Trap", pp: 5, priority: -3, flags: {protect: 1}, - beforeTurnCallback: function (pokemon) { + beforeTurnCallback(pokemon) { pokemon.addVolatile('shelltrap'); }, - beforeMoveCallback: function (pokemon) { - if (pokemon.volatiles['shelltrap'] && !pokemon.volatiles['shelltrap'].gotHit) { + // TODO: In order to correct PP usage, after spread move order has been reworked, + // switch this to `onTry` + add `this.attrLastMove('[still]');`. + beforeMoveCallback(pokemon) { + if (!pokemon.volatiles['shelltrap'] || !pokemon.volatiles['shelltrap'].gotHit) { this.add('cant', pokemon, 'Shell Trap', 'Shell Trap'); return true; } }, effect: { duration: 1, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singleturn', pokemon, 'move: Shell Trap'); }, - onHit: function (pokemon, source, move) { + onHit(pokemon, source, move) { if (pokemon.side !== source.side && move.category === 'Physical') { pokemon.volatiles['shelltrap'].gotHit = true; } }, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Fire", zMovePower: 200, @@ -14458,7 +14805,7 @@ exports.BattleMovedex = { spe: 2, atk: 1, }, - secondary: false, + secondary: null, target: "self", type: "Steel", zMoveEffect: 'clearnegativeboost', @@ -14469,14 +14816,13 @@ exports.BattleMovedex = { accuracy: true, basePower: 60, category: "Special", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "shockwave", name: "Shock Wave", pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMovePower: 120, @@ -14495,14 +14841,14 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {snatch: 1, heal: 1}, - onHit: function (pokemon) { + onHit(pokemon) { if (this.isWeather('sandstorm')) { - this.heal(this.modify(pokemon.maxhp, 0.667)); + return this.heal(this.modify(pokemon.maxhp, 0.667)); } else { - this.heal(this.modify(pokemon.maxhp, 0.5)); + return this.heal(this.modify(pokemon.maxhp, 0.5)); } }, - secondary: false, + secondary: null, target: "self", type: "Ground", zMoveEffect: 'clearnegativeboost', @@ -14564,20 +14910,20 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is Multitype, Simple, Stance Change, or Truant.", + desc: "Causes the target's Ability to become Simple. Fails if the target's Ability is Battle Bond, Comatose, Disguise, Multitype, Power Construct, RKS System, Schooling, Shields Down, Simple, Stance Change, Truant, or Zen Mode.", shortDesc: "The target's Ability becomes Simple.", id: "simplebeam", name: "Simple Beam", pp: 15, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onTryHit: function (pokemon) { - let bannedAbilities = {comatose:1, multitype:1, simple:1, stancechange:1, truant:1}; - if (bannedAbilities[pokemon.ability]) { + onTryHit(pokemon) { + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'simple', 'stancechange', 'truant', 'zenmode']; + if (bannedAbilities.includes(pokemon.ability)) { return false; } }, - onHit: function (pokemon) { + onHit(pokemon) { let oldAbility = pokemon.setAbility('simple'); if (oldAbility) { this.add('-ability', pokemon, 'Simple', '[from] move: Simple Beam'); @@ -14585,7 +14931,7 @@ exports.BattleMovedex = { } return false; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spa: 1}, @@ -14596,15 +14942,14 @@ exports.BattleMovedex = { accuracy: 55, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the target to sleep.", + shortDesc: "Causes the target to fall asleep.", id: "sing", name: "Sing", pp: 15, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, authentic: 1}, status: 'slp', - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -14615,7 +14960,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 180, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "sinisterarrowraid", name: "Sinister Arrow Raid", @@ -14623,11 +14967,34 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "decidiumz", - secondary: false, + secondary: null, target: "normal", type: "Ghost", contestType: "Cool", }, + "sizzlyslide": { + num: 735, + accuracy: 100, + basePower: 90, + category: "Physical", + desc: "Has a 100% chance to burn the foe.", + shortDesc: "100% chance to burn the foe.", + id: "sizzlyslide", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Sizzly Slide", + pp: 15, + priority: 0, + flags: {contact: 1, protect: 1, defrost: 1}, + secondary: { + chance: 100, + status: 'brn', + }, + target: "normal", + type: "Fire", + contestType: "Clever", + }, "sketch": { num: 166, accuracy: true, @@ -14641,12 +15008,12 @@ exports.BattleMovedex = { noPPBoosts: true, priority: 0, flags: {authentic: 1, mystery: 1}, - onHit: function (target, source) { - let disallowedMoves = {chatter:1, sketch:1, struggle:1}; - if (source.transformed || !target.lastMove || disallowedMoves[target.lastMove] || source.moves.indexOf(target.lastMove) >= 0) return false; - let moveslot = source.moves.indexOf('sketch'); - if (moveslot < 0) return false; - let move = Dex.getMove(target.lastMove); + onHit(target, source) { + let disallowedMoves = ['chatter', 'sketch', 'struggle']; + if (source.transformed || !target.lastMove || disallowedMoves.includes(target.lastMove.id) || source.moves.indexOf(target.lastMove.id) >= 0 || target.lastMove.isZ) return false; + let sketchIndex = source.moves.indexOf('sketch'); + if (sketchIndex < 0) return false; + let move = this.getMove(target.lastMove); let sketchedMove = { move: move.name, id: move.id, @@ -14656,12 +15023,11 @@ exports.BattleMovedex = { disabled: false, used: false, }; - source.moveset[moveslot] = sketchedMove; - source.baseMoveset[moveslot] = sketchedMove; - source.moves[moveslot] = toId(move.name); + source.moveSlots[sketchIndex] = sketchedMove; + source.baseMoveSlots[sketchIndex] = sketchedMove; this.add('-activate', source, 'move: Sketch', move.name); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -14672,20 +15038,20 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Illusion, Multitype, Stance Change, or Wonder Guard, but does not fail if both have the same Ability.", + desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Battle Bond, Comatose, Disguise, Illusion, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Wonder Guard, or Zen Mode.", shortDesc: "The user and the target trade Abilities.", id: "skillswap", name: "Skill Swap", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, authentic: 1, mystery: 1}, - onTryHit: function (target, source) { - let bannedAbilities = {comatose:1, illusion:1, multitype:1, schooling:1, stancechange:1, wonderguard:1}; - if (bannedAbilities[target.ability] || bannedAbilities[source.ability]) { + onTryHit(target, source) { + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'illusion', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'wonderguard', 'zenmode']; + if (bannedAbilities.includes(target.ability) || bannedAbilities.includes(source.ability)) { return false; } }, - onHit: function (target, source, move) { + onHit(target, source, move) { let targetAbility = this.getAbility(target.ability); let sourceAbility = this.getAbility(source.ability); if (target.side === source.side) { @@ -14693,18 +15059,18 @@ exports.BattleMovedex = { } else { this.add('-activate', source, 'move: Skill Swap', targetAbility, sourceAbility, '[of] ' + target); } - source.battle.singleEvent('End', sourceAbility, source.abilityData, source); - target.battle.singleEvent('End', targetAbility, target.abilityData, target); + this.singleEvent('End', sourceAbility, source.abilityData, source); + this.singleEvent('End', targetAbility, target.abilityData, target); if (targetAbility.id !== sourceAbility.id) { source.ability = targetAbility.id; target.ability = sourceAbility.id; - source.abilityData = {id: source.ability.id, target: source}; - target.abilityData = {id: target.ability.id, target: target}; + source.abilityData = {id: toId(source.ability), target: source}; + target.abilityData = {id: toId(target.ability), target: target}; } - source.battle.singleEvent('Start', targetAbility, source.abilityData, source); - target.battle.singleEvent('Start', sourceAbility, target.abilityData, target); + this.singleEvent('Start', targetAbility, source.abilityData, source); + this.singleEvent('Start', sourceAbility, target.abilityData, target); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -14722,21 +15088,19 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); - this.boost({def:1}, attacker, attacker, this.getMove('skullbash')); + this.boost({def: 1}, attacker, attacker, move); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); - attacker.removeVolatile(move.id); return; } attacker.addVolatile('twoturnmove', defender); return null; }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 195, @@ -14755,13 +15119,12 @@ exports.BattleMovedex = { priority: 0, flags: {charge: 1, protect: 1, mirror: 1, distance: 1}, critRatio: 2, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile('twoturnmove', defender); @@ -14781,33 +15144,33 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - 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.", + desc: "This attack takes the target into the air with the user on the first turn and executes on the second. Pokemon weighing 200 kg 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, if the target has a substitute, or if the target is using Bounce, Dig, Dive, Fly, Phantom Force, Shadow Force, or Sky Drop.", shortDesc: "User and foe fly up turn 1. Damages on turn 2.", id: "skydrop", name: "Sky Drop", pp: 10, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1, gravity: 1, distance: 1}, - onModifyMove: function (move, source) { + onModifyMove(move, source) { if (!source.volatiles['skydrop']) { move.accuracy = true; + move.flags.contact = 0; } }, - onMoveFail: function (target, source) { + onMoveFail(target, source) { if (source.volatiles['twoturnmove'] && source.volatiles['twoturnmove'].duration === 1) { source.removeVolatile('skydrop'); source.removeVolatile('twoturnmove'); this.add('-end', target, 'Sky Drop', '[interrupt]'); } }, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (target.fainted) return false; if (source.removeVolatile(move.id)) { if (target !== source.volatiles['twoturnmove'].source) return false; if (target.hasType('Flying')) { - this.add('-immune', target, '[msg]'); - this.add('-end', target, 'Sky Drop'); + this.add('-immune', target); return null; } } else { @@ -14824,37 +15187,34 @@ exports.BattleMovedex = { return null; } }, - onHit: function (target, source) { + onHit(target, source) { this.add('-end', target, 'Sky Drop'); }, effect: { duration: 2, - onStart: function () { - this.effectData.source.removeVolatile('followme'); - this.effectData.source.removeVolatile('ragepowder'); - }, - onAnyDragOut: function (pokemon) { + onAnyDragOut(pokemon) { if (pokemon === this.effectData.target || pokemon === this.effectData.source) return false; }, onFoeTrapPokemonPriority: -15, - onFoeTrapPokemon: function (defender) { + onFoeTrapPokemon(defender) { if (defender !== this.effectData.source) return; defender.trapped = true; }, onFoeBeforeMovePriority: 12, - onFoeBeforeMove: function (attacker, defender, move) { + onFoeBeforeMove(attacker, defender, move) { if (attacker === this.effectData.source) { + this.effectData.source.activeTurns--; this.debug('Sky drop nullifying.'); return null; } }, onRedirectTargetPriority: 99, - onRedirectTarget: function (target, source, source2) { + onRedirectTarget(target, source, source2) { if (source !== this.effectData.target) return; if (this.effectData.source.fainted) return; return this.effectData.source; }, - onAnyAccuracy: function (accuracy, target, source, move) { + onAnyTryImmunity(target, source, move) { if (target !== this.effectData.target && target !== this.effectData.source) { return; } @@ -14871,9 +15231,9 @@ exports.BattleMovedex = { return; } if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; + return false; }, - onAnyBasePower: function (basePower, target, source, move) { + onAnyBasePower(basePower, target, source, move) { if (target !== this.effectData.target && target !== this.effectData.source) { return; } @@ -14884,13 +15244,13 @@ exports.BattleMovedex = { return this.chainModify(2); } }, - onFaint: function (target) { + onFaint(target) { if (target.volatiles['skydrop'] && target.volatiles['twoturnmove'].source) { this.add('-end', target.volatiles['twoturnmove'].source, 'Sky Drop', '[interrupt]'); } }, }, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 120, @@ -14901,14 +15261,14 @@ exports.BattleMovedex = { accuracy: 90, basePower: 85, category: "Physical", - desc: "This move can hit a target using Bounce, Fly, or Sky Drop.", + desc: "This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop.", shortDesc: "Can hit Pokemon using Bounce, Fly, or Sky Drop.", id: "skyuppercut", name: "Sky Uppercut", pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 160, @@ -14928,7 +15288,7 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1, heal: 1}, heal: [1, 2], - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -14939,14 +15299,13 @@ exports.BattleMovedex = { accuracy: 75, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "slam", name: "Slam", pp: 20, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -14965,7 +15324,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, @@ -14976,8 +15335,7 @@ exports.BattleMovedex = { accuracy: 75, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the target to sleep.", + shortDesc: "Causes the target to fall asleep.", id: "sleeppowder", isViable: true, name: "Sleep Powder", @@ -14985,7 +15343,7 @@ exports.BattleMovedex = { priority: 0, flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, status: 'slp', - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveBoost: {spe: 1}, @@ -14996,7 +15354,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0 PP. This move cannot select Assist, Belch, Bide, Chatter, Copycat, Focus Punch, Hold Hands, Me First, Metronome, Mimic, Mirror Move, Nature Power, Sketch, Sleep Talk, Struggle, Uproar, or any two-turn move.", + desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0 PP. This move cannot select Assist, Beak Blast, Belch, Bide, Celebrate, Chatter, Copycat, Focus Punch, Hold Hands, Me First, Metronome, Mimic, Mirror Move, Nature Power, Shell Trap, Sketch, Sleep Talk, Struggle, Uproar, any two-turn move, or any Z-Move.", shortDesc: "User must be asleep. Uses another known move.", id: "sleeptalk", isViable: true, @@ -15005,28 +15363,28 @@ exports.BattleMovedex = { priority: 0, flags: {}, sleepUsable: true, - onTryHit: function (pokemon) { + onTryHit(pokemon) { if (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose')) return false; }, - onHit: function (pokemon) { + onHit(pokemon) { let moves = []; - for (let i = 0; i < pokemon.moveset.length; i++) { - let move = pokemon.moveset[i].id; - let noSleepTalk = { - assist:1, beakblast:1, belch:1, bide:1, chatter:1, copycat:1, focuspunch:1, mefirst:1, metronome:1, mimic:1, mirrormove:1, naturepower:1, shelltrap:1, sketch:1, sleeptalk:1, uproar:1, - }; - if (move && !(noSleepTalk[move] || this.getMove(move).flags['charge'] || (this.getMove(move).isZ && this.getMove(move).basePower !== 1))) { + for (const moveSlot of pokemon.moveSlots) { + const move = moveSlot.id; + const noSleepTalk = [ + 'assist', 'beakblast', 'belch', 'bide', 'celebrate', 'chatter', 'copycat', 'focuspunch', 'mefirst', 'metronome', 'mimic', 'mirrormove', 'naturepower', 'shelltrap', 'sketch', 'sleeptalk', 'uproar', + ]; + if (move && !(noSleepTalk.includes(move) || this.getMove(move).flags['charge'] || (this.getMove(move).isZ && this.getMove(move).basePower !== 1))) { moves.push(move); } } let randomMove = ''; - if (moves.length) randomMove = moves[this.random(moves.length)]; + if (moves.length) randomMove = this.sample(moves); if (!randomMove) { return false; } this.useMove(randomMove, pokemon); }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'crit2', @@ -15102,7 +15460,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 50, category: "Physical", - desc: "This move can hit a target using Bounce, Fly, or Sky Drop. If this move hits a target under the effect of Bounce, Fly, Magnet Rise, or Telekinesis, the effect ends. If the target is a Flying type that has not used Roost this turn or a Pokemon with the Ability Levitate, it loses its immunity to Ground-type attacks and the Ability Arena Trap as long as it remains active. During the effect, Magnet Rise fails for the target and Telekinesis fails against the target.", + desc: "This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If this move hits a target under the effect of Bounce, Fly, Magnet Rise, or Telekinesis, the effect ends. If the target is a Flying type that has not used Roost this turn or a Pokemon with the Levitate Ability, it loses its immunity to Ground-type attacks and the Arena Trap Ability as long as it remains active. During the effect, Magnet Rise fails for the target and Telekinesis fails against the target.", shortDesc: "Removes the target's Ground immunity.", id: "smackdown", name: "Smack Down", @@ -15112,7 +15470,7 @@ exports.BattleMovedex = { volatileStatus: 'smackdown', effect: { noCopy: true, - onStart: function (pokemon) { + onStart(pokemon) { let applies = false; if (pokemon.hasType('Flying') || pokemon.hasAbility('levitate')) applies = true; if (pokemon.hasItem('ironball') || pokemon.volatiles['ingrain'] || this.getPseudoWeather('gravity')) applies = false; @@ -15132,7 +15490,7 @@ exports.BattleMovedex = { if (!applies) return false; this.add('-start', pokemon, 'Smack Down'); }, - onRestart: function (pokemon) { + onRestart(pokemon) { if (pokemon.removeVolatile('fly') || pokemon.removeVolatile('bounce')) { this.cancelMove(pokemon); this.add('-start', pokemon, 'Smack Down'); @@ -15140,7 +15498,7 @@ exports.BattleMovedex = { }, // groundedness implemented in battle.engine.js:BattlePokemon#isGrounded }, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 100, @@ -15151,14 +15509,13 @@ exports.BattleMovedex = { accuracy: true, basePower: 70, category: "Physical", - desc: "This move does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "smartstrike", name: "Smart Strike", pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 140, @@ -15168,7 +15525,7 @@ exports.BattleMovedex = { num: 265, accuracy: 100, basePower: 70, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (target.status === 'par') return move.basePower * 2; return move.basePower; }, @@ -15180,10 +15537,10 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target) { + onHit(target) { if (target.status === 'par') target.cureStatus(); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, @@ -15225,7 +15582,7 @@ exports.BattleMovedex = { boosts: { accuracy: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {evasion: 1}, @@ -15259,7 +15616,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "If another Pokemon uses one of the following moves this turn, the user steals that move to use itself. If multiple Pokemon use this move in the same turn, the applicable moves will be stolen in turn order; a move cannot be stolen multiple times. Aqua Ring, Aromatherapy, Autotomize, Belly Drum, Camouflage, Charge, Conversion, Cosmic Power, Cotton Guard, Heal Bell, Healing Wish, Imprison, Ingrain, Light Screen, Lucky Chant, Lunar Dance, Magnet Rise, Mist, Power Trick, Quick Guard, Recycle, Reflect, Refresh, Safeguard, Stockpile, Substitute, Swallow, Tailwind, Wide Guard, Wish, and any move that has a primary effect of raising the user's stats or healing the user.", + desc: "If another Pokemon uses certain non-damaging moves this turn, the user steals that move to use itself. If multiple Pokemon use one of those moves this turn, the applicable moves are all stolen by the first Pokemon in turn order that used this move this turn. This effect is ignored while the user is under the effect of Sky Drop.", shortDesc: "User steals certain support moves to use itself.", id: "snatch", name: "Snatch", @@ -15269,12 +15626,13 @@ exports.BattleMovedex = { volatileStatus: 'snatch', effect: { duration: 1, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singleturn', pokemon, 'Snatch'); }, - onAnyTryMove: function (source, target, move) { - if (move && move.flags['snatch'] && move.sourceEffect !== 'snatch') { - let snatchUser = this.effectData.source; + onAnyTryMove(source, target, move) { + let snatchUser = this.effectData.source; + if (snatchUser.isSkyDropped()) return; + if (move && !move.isZ && move.flags['snatch'] && move.sourceEffect !== 'snatch') { snatchUser.removeVolatile('snatch'); this.add('-activate', snatchUser, 'move: Snatch', '[of] ' + source); this.useMove(move.id, snatchUser); @@ -15282,7 +15640,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, pressureTarget: "foeSide", target: "self", type: "Dark", @@ -15302,7 +15660,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, sleepUsable: true, - onTryHit: function (target, source) { + onTryHit(target, source) { if (source.status !== 'slp' && !source.hasAbility('comatose')) return false; }, secondary: { @@ -15319,7 +15677,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 90, category: "Physical", - desc: "The target's raised stat stages are stolen from it and applied to the user before dealing damage.", + desc: "The target's stat stages greater than 0 are stolen from it and applied to the user before dealing damage.", shortDesc: "Steals target's boosts before dealing damage.", id: "spectralthief", isViable: true, @@ -15329,7 +15687,7 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1, authentic: 1}, stealsBoosts: true, // Boost stealing implemented in scripts.js - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMovePower: 175, @@ -15340,20 +15698,20 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user swaps its raw Speed stat with the target.", + desc: "The user swaps its Speed stat with the target. Stat stage changes are unaffected.", shortDesc: "Swaps Speed stat with target.", id: "speedswap", name: "Speed Swap", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, authentic: 1, mystery: 1}, - onHit: function (target, source) { + onHit(target, source) { const targetSpe = target.stats.spe; target.stats.spe = source.stats.spe; source.stats.spe = targetSpe; this.add('-activate', source, 'move: Speed Swap', '[of] ' + target); }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 1}, @@ -15364,7 +15722,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user lose 1/8 of their maximum HP, rounded down. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", + desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon making contact with the user lose 1/8 of their maximum HP, rounded down. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn.", shortDesc: "Protects from moves. Contact: loses 1/8 max HP.", id: "spikyshield", isViable: true, @@ -15374,19 +15732,19 @@ exports.BattleMovedex = { flags: {}, stallingMove: true, volatileStatus: 'spikyshield', - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { return !!this.willAct() && this.runEvent('StallMove', target); }, - onHit: function (pokemon) { + onHit(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target) { + onStart(target) { this.add('-singleturn', target, 'move: Protect'); }, onTryHitPriority: 3, - onTryHit: function (target, source, move) { + onTryHit(target, source, move) { if (!move.flags['protect']) { if (move.isZ) move.zBrokeProtect = true; return; @@ -15402,10 +15760,15 @@ exports.BattleMovedex = { if (move.flags['contact']) { this.damage(source.maxhp / 8, source, target); } - return null; + return this.NOT_FAILURE; + }, + onHit(target, source, move) { + if (move.isZPowered && move.flags['contact']) { + this.damage(source.maxhp / 8, source, target); + } }, }, - secondary: false, + secondary: null, target: "self", type: "Grass", zMoveBoost: {def: 1}, @@ -15426,7 +15789,7 @@ exports.BattleMovedex = { flags: {protect: 1, mirror: 1}, secondary: { chance: 100, - onHit: function (target, source, move) { + onHit(target, source, move) { if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); }, }, @@ -15440,18 +15803,21 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Causes the target to become a Water type. Fails if the target is an Arceus.", + desc: "Causes the target to become a Water type. Fails if the target is an Arceus or a Silvally.", shortDesc: "Changes the target's type to Water.", id: "soak", name: "Soak", pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onHit: function (target) { - if (!target.setType('Water')) return false; + onHit(target) { + if (!target.setType('Water')) { + this.add('-fail', target); + return null; + } this.add('-start', target, 'typechange', 'Water'); }, - secondary: false, + secondary: null, target: "normal", type: "Water", zMoveBoost: {spa: 1}, @@ -15471,7 +15837,7 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1, heal: 1}, heal: [1, 2], - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -15482,33 +15848,37 @@ exports.BattleMovedex = { accuracy: 100, basePower: 120, category: "Special", - 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.", + desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn.", shortDesc: "Charges turn 1. Hits turn 2. No charge in sunlight.", id: "solarbeam", name: "Solar Beam", pp: 10, priority: 0, flags: {charge: 1, protect: 1, mirror: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); - if (this.isWeather(['sunnyday', 'desolateland']) || !this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); + if (this.isWeather(['sunnyday', 'desolateland'])) { + 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; }, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon, target) { + onBasePower(basePower, pokemon, target) { if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { this.debug('weakened by weather'); return this.chainModify(0.5); } }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 190, @@ -15519,33 +15889,37 @@ exports.BattleMovedex = { accuracy: 100, basePower: 125, category: "Physical", - 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.", + desc: "This attack charges on the first turn and executes on the second. Power is halved if the weather is Hail, Primordial Sea, Rain Dance, or Sandstorm. If the user is holding a Power Herb or the weather is Desolate Land or Sunny Day, the move completes in one turn.", shortDesc: "Charges turn 1. Hits turn 2. No charge in sunlight.", id: "solarblade", name: "Solar Blade", pp: 10, priority: 0, flags: {contact: 1, charge: 1, protect: 1, mirror: 1}, - onTry: function (attacker, defender, move) { + onTryMove(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); - if (this.isWeather(['sunnyday', 'desolateland']) || !this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); + if (this.isWeather(['sunnyday', 'desolateland'])) { + 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; }, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon, target) { + onBasePower(basePower, pokemon, target) { if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { this.debug('weakened by weather'); return this.chainModify(0.5); } }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 190, @@ -15564,7 +15938,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -15575,7 +15949,6 @@ exports.BattleMovedex = { accuracy: true, basePower: 195, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "soulstealing7starstrike", name: "Soul-Stealing 7-Star Strike", @@ -15583,7 +15956,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1}, isZ: "marshadiumz", - secondary: false, + secondary: null, target: "normal", type: "Ghost", contestType: "Cool", @@ -15602,7 +15975,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Dragon", zMovePower: 180, @@ -15644,7 +16017,7 @@ exports.BattleMovedex = { secondary: { dustproof: true, chance: 100, - onHit: function (target) { + onHit(target) { if (target.status === 'brn') target.cureStatus(); }, }, @@ -15653,24 +16026,53 @@ exports.BattleMovedex = { zMovePower: 175, contestType: "Tough", }, + "sparklyswirl": { + num: 740, + accuracy: 100, + basePower: 90, + category: "Special", + desc: "Every Pokemon in the user's party is cured of its major status condition.", + shortDesc: "Cures the user's party of all status conditions.", + id: "sparklyswirl", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Sparkly Swirl", + pp: 15, + priority: 0, + flags: {protect: 1}, + self: { + onHit(pokemon, source, move) { + this.add('-activate', source, 'move: Aromatherapy'); + for (const ally of source.side.pokemon) { + if (ally !== source && (ally.volatiles['substitute'] && !move.infiltrates)) { + continue; + } + ally.cureStatus(); + } + }, + }, + secondary: null, + target: "normal", + type: "Fairy", + contestType: "Clever", + }, "spiderweb": { num: 169, accuracy: true, basePower: 0, category: "Status", desc: "Prevents the target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, 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: "The target cannot switch out.", + shortDesc: "Prevents the target from switching out.", id: "spiderweb", name: "Spider Web", pp: 10, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, - onHit: function (target, source, move) { - if (!target.addVolatile('trapped', source, move, 'trapper')) { - this.add('-fail', target); - } + onHit(target, source, move) { + return target.addVolatile('trapped', source, move, 'trapper'); }, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMoveBoost: {def: 1}, @@ -15681,7 +16083,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 20, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "spikecannon", name: "Spike Cannon", @@ -15689,7 +16091,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -15700,7 +16102,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Sets up a hazard on the foe's side of the field, damaging each foe that switches in, unless it is a Flying-type Pokemon or has the Ability Levitate. Can be used up to three times before failing. Foes lose 1/8 of their maximum HP with one layer, 1/6 of their maximum HP with two layers, and 1/4 of their maximum HP with three layers, all rounded down. Can be removed from the foe's side if any foe uses Rapid Spin or Defog, or is hit by Defog.", + desc: "Sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Can be used up to three times before failing. Opponents lose 1/8 of their maximum HP with one layer, 1/6 of their maximum HP with two layers, and 1/4 of their maximum HP with three layers, all rounded down. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, or is hit by Defog.", shortDesc: "Hurts grounded foes on switch-in. Max 3 layers.", id: "spikes", isViable: true, @@ -15711,22 +16113,22 @@ exports.BattleMovedex = { sideCondition: 'spikes', effect: { // this is a side condition - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'Spikes'); this.effectData.layers = 1; }, - onRestart: function (side) { + onRestart(side) { if (this.effectData.layers >= 3) return false; this.add('-sidestart', side, 'Spikes'); this.effectData.layers++; }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { if (!pokemon.isGrounded()) return; let damageAmounts = [0, 3, 4, 6]; // 1/8, 1/6, 1/4 this.damage(damageAmounts[this.effectData.layers] * pokemon.maxhp / 24); }, }, - secondary: false, + secondary: null, target: "foeSide", type: "Ground", zMoveBoost: {def: 1}, @@ -15736,7 +16138,7 @@ exports.BattleMovedex = { num: 255, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon) { + basePowerCallback(pokemon) { if (!pokemon.volatiles['stockpile'] || !pokemon.volatiles['stockpile'].layers) return false; return pokemon.volatiles['stockpile'].layers * 100; }, @@ -15748,15 +16150,15 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1}, - onTry: function (pokemon) { + onTry(pokemon) { if (!pokemon.volatiles['stockpile']) { return false; } }, - onAfterMove: function (pokemon) { + onAfterMove(pokemon) { pokemon.removeVolatile('stockpile'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -15774,14 +16176,17 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, - onHit: function (target) { - if (target.deductPP(target.lastMove, 4)) { - this.add("-activate", target, 'move: Spite', this.getMove(target.lastMove).name, 4); - return; + onHit(target) { + if (target.lastMove && !target.lastMove.isZ) { + let ppDeducted = target.deductPP(target.lastMove.id, 4); + if (ppDeducted) { + this.add("-activate", target, 'move: Spite', this.getMove(target.lastMove.id).name, ppDeducted); + return; + } } return false; }, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMoveEffect: 'heal', @@ -15792,30 +16197,71 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Nothing happens...", - shortDesc: "Does nothing (but we still love it).", + shortDesc: "No competitive use.", id: "splash", name: "Splash", pp: 40, priority: 0, flags: {gravity: 1}, - onTryHit: function (target, source) { + onTryHit(target, source) { this.add('-nothing'); - return null; }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 3}, contestType: "Cute", }, + "splinteredstormshards": { + num: 727, + accuracy: true, + basePower: 190, + category: "Physical", + desc: "Ends the effects of Electric Terrain, Grassy Terrain, Misty Terrain, and Psychic Terrain.", + shortDesc: "Ends the effects of Terrain.", + id: "splinteredstormshards", + name: "Splintered Stormshards", + pp: 1, + priority: 0, + flags: {}, + onHit() { + this.clearTerrain(); + }, + isZ: "lycaniumz", + secondary: null, + target: "normal", + type: "Rock", + contestType: "Cool", + }, + "splishysplash": { + num: 730, + accuracy: 100, + basePower: 90, + category: "Special", + desc: "Has a 30% chance to paralyze the target.", + shortDesc: "30% chance to paralyze the target.", + id: "splishysplash", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Splishy Splash", + pp: 15, + priority: 0, + flags: {protect: 1}, + secondary: { + chance: 30, + status: 'par', + }, + target: "allAdjacentFoes", + type: "Water", + contestType: "Cool", + }, "spore": { num: 147, accuracy: 100, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the target to sleep.", + shortDesc: "Causes the target to fall asleep.", id: "spore", isViable: true, name: "Spore", @@ -15823,7 +16269,7 @@ exports.BattleMovedex = { priority: 0, flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, status: 'slp', - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveEffect: 'clearnegativeboost', @@ -15834,7 +16280,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Until the end of the turn, all single-target attacks from opponents of the target are redirected to the target. Such attacks are redirected to the target before they can be reflected by Magic Coat or the Ability Magic Bounce, or drawn in by the Abilities Lightning Rod or Storm Drain. Fails if it is not a Double Battle or Battle Royale.", + desc: "Until the end of the turn, all single-target attacks from opponents of the target are redirected to the target. Such attacks are redirected to the target before they can be reflected by Magic Coat or the Magic Bounce Ability, or drawn in by the Lightning Rod or Storm Drain Abilities. Fails if it is not a Double Battle or Battle Royal.", shortDesc: "Target's foes' moves are redirected to it this turn.", id: "spotlight", name: "Spotlight", @@ -15842,23 +16288,23 @@ exports.BattleMovedex = { priority: 3, flags: {protect: 1, reflectable: 1, mystery: 1}, volatileStatus: 'spotlight', - onTryHit: function (target) { + onTryHit(target) { if (target.side.active.length < 2) return false; }, effect: { duration: 1, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-singleturn', pokemon, 'move: Spotlight'); }, onFoeRedirectTargetPriority: 2, - onFoeRedirectTarget: function (target, source, source2, move) { + onFoeRedirectTarget(target, source, source2, move) { if (this.validTarget(this.effectData.target, source, move.target)) { this.debug("Spotlight redirected target of move"); return this.effectData.target; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spd: 1}, @@ -15869,7 +16315,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Sets up a hazard on the foe's side of the field, damaging each foe that switches in. Can be used only once before failing. 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 foe's side if any foe uses Rapid Spin or Defog, or is hit by Defog.", + desc: "Sets up a hazard on the opposing side of the field, damaging each opposing Pokemon that switches in. Fails if the effect is already active on the opposing side. 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: "Hurts foes on switch-in. Factors Rock weakness.", id: "stealthrock", isViable: true, @@ -15880,15 +16326,15 @@ exports.BattleMovedex = { sideCondition: 'stealthrock', effect: { // this is a side condition - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Stealth Rock'); }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { let typeMod = this.clampIntRange(pokemon.runEffectiveness('Rock'), -6, 6); this.damage(pokemon.maxhp * Math.pow(2, typeMod) / 8); }, }, - secondary: false, + secondary: null, target: "foeSide", type: "Rock", zMoveBoost: {def: 1}, @@ -15947,7 +16393,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Sets up a hazard on the foe's side of the field, lowering the Speed by 1 stage of each foe that switches in, unless it is a Flying-type Pokemon or has the Ability Levitate. Can be used only once before failing. Can be removed from the foe's side if any foe uses Rapid Spin or Defog, or is hit by Defog.", + desc: "Sets up a hazard on the opposing side of the field, lowering the Speed by 1 stage of each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Fails if the effect is already active on the opposing side. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, or is hit by Defog.", shortDesc: "Lowers Speed of grounded foes by 1 on switch-in.", id: "stickyweb", isViable: true, @@ -15957,16 +16403,16 @@ exports.BattleMovedex = { flags: {reflectable: 1}, sideCondition: 'stickyweb', effect: { - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Sticky Web'); }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { if (!pokemon.isGrounded()) return; this.add('-activate', pokemon, 'move: Sticky Web'); - this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.getMove('stickyweb')); + this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.getActiveMove('stickyweb')); }, }, - secondary: false, + secondary: null, target: "foeSide", type: "Bug", zMoveBoost: {spe: 1}, @@ -15977,38 +16423,38 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Raises the user's Defense and Special Defense by 1 stage. The user's Stockpile count increases by 1. Fails if the user's Stockpile count is 3.", + desc: "Raises the user's Defense and Special Defense by 1 stage. The user's Stockpile count increases by 1. Fails if the user's Stockpile count is 3. The user's Stockpile count is reset to 0 when it is no longer active.", shortDesc: "Raises user's Defense, Sp. Def by 1. Max 3 uses.", id: "stockpile", name: "Stockpile", pp: 20, priority: 0, flags: {snatch: 1}, - onTryHit: function (pokemon) { + onTryHit(pokemon) { if (pokemon.volatiles['stockpile'] && pokemon.volatiles['stockpile'].layers >= 3) return false; }, volatileStatus: 'stockpile', effect: { noCopy: true, - onStart: function (target) { + onStart(target) { this.effectData.layers = 1; this.add('-start', target, 'stockpile' + this.effectData.layers); - this.boost({def:1, spd:1}, target, target, this.getMove('stockpile')); + this.boost({def: 1, spd: 1}, target, target); }, - onRestart: function (target) { + onRestart(target) { if (this.effectData.layers >= 3) return false; this.effectData.layers++; this.add('-start', target, 'stockpile' + this.effectData.layers); - this.boost({def:1, spd:1}, target, target, this.getMove('stockpile')); + this.boost({def: 1, spd: 1}, target, target); }, - onEnd: function (target) { + onEnd(target) { let layers = this.effectData.layers * -1; this.effectData.layers = 0; - this.boost({def:layers, spd:layers}, target, target, this.getMove('stockpile')); + this.boost({def: layers, spd: layers}, target, target); this.add('-end', target, 'Stockpile'); }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'heal', @@ -16060,16 +16506,19 @@ exports.BattleMovedex = { num: 707, accuracy: 100, basePower: 75, + basePowerCallback(pokemon, target, move) { + if (pokemon.moveLastTurnResult === false) return move.basePower * 2; + return move.basePower; + }, category: "Physical", - desc: "Power doubles if the user's last move failed.", + desc: "Power doubles if the user's last move on the previous turn, including moves called by other moves or those used through Instruct, Magic Coat, Snatch, or the Dancer or Magic Bounce Abilities, failed to do any of its normal effects, not including damage from an unsuccessful High Jump Kick, Jump Kick, or Mind Blown, or if the user was prevented from moving by any effect other than recharging or Sky Drop. A move that was blocked by Baneful Bunker, Detect, King's Shield, Protect, Spiky Shield, Crafty Shield, Mat Block, Quick Guard, or Wide Guard will not double this move's power, nor will Bounce or Fly ending early due to the effect of Gravity, Smack Down, or Thousand Arrows.", shortDesc: "Power doubles if the user's last move failed.", id: "stompingtantrum", name: "Stomping Tantrum", pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - // TODO: find out what "failed" means and implement accordingly - secondary: false, + secondary: null, target: "normal", type: "Ground", zMovePower: 140, @@ -16089,7 +16538,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, critRatio: 2, - secondary: false, + secondary: null, target: "normal", type: "Rock", zMovePower: 180, @@ -16099,7 +16548,7 @@ exports.BattleMovedex = { num: 500, accuracy: 100, basePower: 20, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { return move.basePower + 20 * pokemon.positiveBoosts(); }, category: "Special", @@ -16110,7 +16559,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMovePower: 160, @@ -16121,7 +16570,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - 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.", + desc: "This move is always a critical hit unless the target is under the effect of Lucky Chant or has the Battle Armor or Shell Armor Abilities.", shortDesc: "Always results in a critical hit.", id: "stormthrow", isViable: true, @@ -16130,7 +16579,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, willCrit: true, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 120, @@ -16162,14 +16611,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "strength", name: "Strength", pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -16188,13 +16636,13 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, heal: 1}, - onHit: function (target, source) { + onHit(target, source) { if (target.boosts.atk === -6) return false; let atk = target.getStat('atk', false, true); - this.boost({atk:-1}, target, source, null, null, true); - this.heal(atk, source, target); + let success = this.boost({atk: -1}, target, source, null, false, true); + return this.heal(atk, source, target) || success; }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveBoost: {def: 1}, @@ -16215,7 +16663,7 @@ exports.BattleMovedex = { boosts: { spe: -2, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Bug", zMoveBoost: {spe: 1}, @@ -16226,8 +16674,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 50, category: "Physical", - desc: "Deals typeless damage to one adjacent foe at random. If this move was successful, the user loses 1/4 of its maximum HP, rounded half up; the Ability Rock Head does not prevent this. This move can only be used if none of the user's known moves can be selected.", - shortDesc: "User loses 25% of its max HP as recoil.", + desc: "Deals typeless damage to a random opposing Pokemon. If this move was successful, the user loses 1/4 of its maximum HP, rounded half up, and the Rock Head Ability does not prevent this. This move is automatically used if none of the user's known moves can be selected.", + shortDesc: "User loses 1/4 of its max HP.", id: "struggle", name: "Struggle", pp: 1, @@ -16235,12 +16683,12 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1}, noSketch: true, - onModifyMove: function (move, pokemon, target) { + onModifyMove(move, pokemon, target) { move.type = '???'; this.add('-activate', pokemon, 'move: Struggle'); }, struggleRecoil: true, - secondary: false, + secondary: null, target: "randomNormal", type: "Normal", zMovePower: 1, @@ -16282,7 +16730,7 @@ exports.BattleMovedex = { priority: 0, flags: {powder: 1, protect: 1, reflectable: 1, mirror: 1}, status: 'par', - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveBoost: {spd: 1}, @@ -16301,7 +16749,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [1, 4], - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 160, @@ -16312,8 +16760,8 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - 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 substitute is removed once enough damage is inflicted on it, or if the user switches out or faints. Baton Pass can be used to transfer the substitute to an ally, and the substitute will keep its remaining HP. Until the substitute is broken, it receives damage from all attacks made by other Pokemon and shields the user from status effects and stat stage changes caused by other Pokemon. Sound-based moves and Pokemon with the Ability Infiltrator ignore substitutes. The user still takes normal damage from weather and status effects while behind its substitute. If the substitute breaks during a multi-hit attack, the user will take damage from any remaining hits. If a substitute is created while the user is partially trapped, the partial-trapping effect ends immediately. This move fails if the user does not have enough HP remaining to create a substitute, or if it already has a substitute.", - shortDesc: "User takes 1/4 its max HP to put in a Substitute.", + 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 substitute is removed once enough damage is inflicted on it, or if the user switches out or faints. Baton Pass can be used to transfer the substitute to an ally, and the substitute will keep its remaining HP. Until the substitute is broken, it receives damage from all attacks made by other Pokemon and shields the user from status effects and stat stage changes caused by other Pokemon. Sound-based moves and Pokemon with the Infiltrator Ability ignore substitutes. The user still takes normal damage from weather and status effects while behind its substitute. If the substitute breaks during a multi-hit attack, the user will take damage from any remaining hits. If a substitute is created while the user is trapped by a binding move, the binding effect ends immediately. Fails if the user does not have enough HP remaining to create a substitute without fainting, or if it already has a substitute.", + shortDesc: "User takes 1/4 its max HP to put in a substitute.", id: "substitute", isViable: true, name: "Substitute", @@ -16321,7 +16769,7 @@ exports.BattleMovedex = { priority: 0, flags: {snatch: 1, nonsky: 1}, volatileStatus: 'Substitute', - onTryHit: function (target) { + onTryHit(target) { if (target.volatiles['substitute']) { this.add('-fail', target, 'move: Substitute'); return null; @@ -16331,23 +16779,24 @@ exports.BattleMovedex = { return null; } }, - onHit: function (target) { + onHit(target) { this.directDamage(target.maxhp / 4); }, effect: { - onStart: function (target) { + onStart(target) { this.add('-start', target, 'Substitute'); this.effectData.hp = Math.floor(target.maxhp / 4); delete target.volatiles['partiallytrapped']; }, onTryPrimaryHitPriority: -1, - onTryPrimaryHit: function (target, source, move) { + onTryPrimaryHit(target, source, move) { if (target === source || move.flags['authentic'] || move.infiltrates) { return; } let damage = this.getDamage(source, target, move); if (!damage && damage !== 0) { - this.add('-fail', target); + this.add('-fail', source); + this.attrLastMove('[still]'); return null; } damage = this.runEvent('SubDamage', target, source, move, damage); @@ -16355,7 +16804,7 @@ exports.BattleMovedex = { return damage; } if (damage > target.volatiles['substitute'].hp) { - damage = target.volatiles['substitute'].hp; + damage = /** @type {number} */ (target.volatiles['substitute'].hp); } target.volatiles['substitute'].hp -= damage; source.lastDamage = damage; @@ -16370,15 +16819,15 @@ exports.BattleMovedex = { if (move.drain) { this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, 'drain'); } - this.singleEvent('AfterSubDamage', move, null, target, source, move); + this.singleEvent('AfterSubDamage', move, null, target, source, move, damage); this.runEvent('AfterSubDamage', target, source, move, damage); return 0; // hit }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Substitute'); }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -16397,7 +16846,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "iciumz", - secondary: false, + secondary: null, target: "normal", type: "Ice", contestType: "Cool", @@ -16415,15 +16864,15 @@ exports.BattleMovedex = { pp: 5, priority: 1, flags: {contact: 1, protect: 1, mirror: 1}, - onTry: function (source, target) { - let decision = this.willMove(target); - if (!decision || decision.choice !== 'move' || (decision.move.category === 'Status' && decision.move.id !== 'mefirst') || target.volatiles.mustrecharge) { - this.attrLastMove('[still]'); + onTry(source, target) { + let action = this.willMove(target); + if (!action || action.choice !== 'move' || (action.move.category === 'Status' && action.move.id !== 'mefirst') || target.volatiles.mustrecharge) { this.add('-fail', source); + this.attrLastMove('[still]'); return null; } }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 140, @@ -16442,7 +16891,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, weather: 'sunnyday', - secondary: false, + secondary: null, target: "all", type: "Fire", zMoveBoost: {spe: 1}, @@ -16462,7 +16911,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, ignoreAbility: true, - secondary: false, + secondary: null, target: "normal", type: "Steel", zMovePower: 180, @@ -16472,7 +16921,7 @@ exports.BattleMovedex = { num: 162, accuracy: 90, basePower: 0, - damageCallback: function (pokemon, target) { + damageCallback(pokemon, target) { return this.clampIntRange(Math.floor(target.hp / 2), 1); }, category: "Physical", @@ -16484,7 +16933,7 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -16509,7 +16958,7 @@ exports.BattleMovedex = { def: -1, }, }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 190, @@ -16520,15 +16969,14 @@ exports.BattleMovedex = { accuracy: 55, basePower: 0, category: "Status", - desc: "Causes the target to become confused.", - shortDesc: "Confuses the target.", + shortDesc: "Causes the target to become confused.", id: "supersonic", name: "Supersonic", pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, authentic: 1}, volatileStatus: 'confusion', - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -16547,7 +16995,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "flyiniumz", - secondary: false, + secondary: null, target: "normal", type: "Flying", contestType: "Cool", @@ -16558,14 +17006,14 @@ exports.BattleMovedex = { basePower: 90, category: "Special", desc: "Damage doubles if the target is using Dive.", - shortDesc: "Hits adjacent Pokemon. Power doubles on Dive.", + shortDesc: "Hits adjacent Pokemon. Double damage on Dive.", id: "surf", isViable: true, name: "Surf", pp: 15, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - secondary: false, + secondary: null, target: "allAdjacent", type: "Water", zMovePower: 175, @@ -16587,7 +17035,7 @@ exports.BattleMovedex = { boosts: { atk: 2, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -16605,15 +17053,16 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {snatch: 1, heal: 1}, - onTryHit: function (pokemon) { + onTryHit(pokemon) { if (!pokemon.volatiles['stockpile'] || !pokemon.volatiles['stockpile'].layers) return false; }, - onHit: function (pokemon) { + onHit(pokemon) { let healAmount = [0.25, 0.5, 1]; - this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)])); + let healedBy = this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)])); pokemon.removeVolatile('stockpile'); + return healedBy; }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -16624,15 +17073,14 @@ exports.BattleMovedex = { accuracy: 75, basePower: 0, category: "Status", - desc: "Causes the target to become confused.", - shortDesc: "Confuses the target.", + shortDesc: "Causes the target to become confused.", id: "sweetkiss", name: "Sweet Kiss", pp: 10, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, volatileStatus: 'confusion', - secondary: false, + secondary: null, target: "normal", type: "Fairy", zMoveBoost: {spa: 1}, @@ -16644,7 +17092,7 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Lowers the target's evasiveness by 2 stages.", - shortDesc: "Lowers the foe(s) evasion by 2.", + shortDesc: "Lowers the foe(s) evasiveness by 2.", id: "sweetscent", name: "Sweet Scent", pp: 20, @@ -16653,7 +17101,7 @@ exports.BattleMovedex = { boosts: { evasion: -2, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMoveBoost: {accuracy: 1}, @@ -16671,7 +17119,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMovePower: 120, @@ -16682,7 +17130,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail or Z-Crystal, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, a Drive, or a Memory to or from a Kyogre, a Groudon, a Giratina, an Arceus, a Genesect, or a Silvally, respectively. Pokemon with the Ability Sticky Hold are immune.", + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail or Z-Crystal, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, a Drive, or a Memory to or from a Kyogre, a Groudon, a Giratina, an Arceus, a Genesect, or a Silvally, respectively. The target is immune to this move if it has the Sticky Hold Ability.", shortDesc: "User switches its held item with the target's.", id: "switcheroo", isViable: true, @@ -16690,13 +17138,13 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, mystery: 1}, - onTryHit: function (target) { + onTryHit(target) { if (target.hasAbility('stickyhold')) { - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return null; } }, - onHit: function (target, source, move) { + onHit(target, source, move) { let yourItem = target.takeItem(source); let myItem = source.takeItem(); if (target.item || source.item || (!yourItem && !myItem)) { @@ -16723,7 +17171,7 @@ exports.BattleMovedex = { this.add('-enditem', source, myItem, '[silent]', '[from] move: Switcheroo'); } }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {spe: 2}, @@ -16745,7 +17193,7 @@ exports.BattleMovedex = { boosts: { atk: 2, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveEffect: 'clearnegativeboost', @@ -16763,10 +17211,13 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - onTryHit: function (target, source) { - return target.hasType(source.getTypes()); + onTryHit(target, source) { + if (!target.hasType(source.getTypes())) { + this.add('-immune', target); + return null; + } }, - secondary: false, + secondary: null, target: "allAdjacent", type: "Psychic", zMovePower: 190, @@ -16777,7 +17228,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", + desc: "The user restores 1/2 of its maximum HP if Delta Stream or no weather conditions are in effect, 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 Hail, Primordial Sea, Rain Dance, or Sandstorm, all rounded half down.", shortDesc: "Heals the user by a weather-dependent amount.", id: "synthesis", isViable: true, @@ -16785,16 +17236,16 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {snatch: 1, heal: 1}, - onHit: function (pokemon) { + onHit(pokemon) { if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(this.modify(pokemon.maxhp, 0.667)); + return this.heal(this.modify(pokemon.maxhp, 0.667)); } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(this.modify(pokemon.maxhp, 0.25)); + return this.heal(this.modify(pokemon.maxhp, 0.25)); } else { - this.heal(this.modify(pokemon.maxhp, 0.5)); + return this.heal(this.modify(pokemon.maxhp, 0.5)); } }, - secondary: false, + secondary: null, target: "self", type: "Grass", zMoveEffect: 'clearnegativeboost', @@ -16805,14 +17256,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "tackle", name: "Tackle", pp: 35, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -16834,7 +17284,7 @@ exports.BattleMovedex = { boosts: { spa: 3, }, - secondary: false, + secondary: null, target: "self", type: "Bug", zMoveEffect: 'clearnegativeboost', @@ -16845,7 +17295,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 25, category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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.", shortDesc: "Hits 2-5 times in one turn.", id: "tailslap", isViable: true, @@ -16854,7 +17304,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 140, @@ -16875,7 +17325,7 @@ exports.BattleMovedex = { boosts: { def: -1, }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Normal", zMoveBoost: {atk: 1}, @@ -16897,25 +17347,26 @@ exports.BattleMovedex = { sideCondition: 'tailwind', effect: { duration: 4, - durationCallback: function (target, source, effect) { + durationCallback(target, source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 6; } return 4; }, - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Tailwind'); }, - onModifySpe: function (spe, pokemon) { + onModifySpe(spe, pokemon) { return this.chainModify(2); }, onResidualOrder: 21, onResidualSubOrder: 4, - onEnd: function (side) { + onEnd(side) { this.add('-sideend', side, 'move: Tailwind'); }, }, - secondary: false, + secondary: null, target: "allySide", type: "Flying", zMoveEffect: 'crit2', @@ -16934,7 +17385,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [1, 4], - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 175, @@ -16945,8 +17396,8 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Prevents the target from using non-damaging moves for its next three turns. Pokemon with the Ability Oblivious or protected by the Ability Aroma Veil are immune.", - shortDesc: "For 3 turns, the target can't use status moves.", + desc: "Prevents the target from using non-damaging moves for its next three turns. Pokemon with the Oblivious Ability or protected by the Aroma Veil Ability are immune.", + shortDesc: "Target can't use status moves its next 3 turns.", id: "taunt", isViable: true, name: "Taunt", @@ -16956,33 +17407,32 @@ exports.BattleMovedex = { volatileStatus: 'taunt', effect: { duration: 3, - onStart: function (target) { + onStart(target) { if (target.activeTurns && !this.willMove(target)) { this.effectData.duration++; } this.add('-start', target, 'move: Taunt'); }, onResidualOrder: 12, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'move: Taunt'); }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (this.getMove(moves[i].move).category === 'Status') { - pokemon.disableMove(moves[i].id); + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).category === 'Status') { + pokemon.disableMove(moveSlot.id); } } }, onBeforeMovePriority: 5, - onBeforeMove: function (attacker, defender, move) { + onBeforeMove(attacker, defender, move) { if (!move.isZ && move.category === 'Status') { this.add('cant', attacker, 'move: Taunt', move); return false; } }, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {atk: 1}, @@ -17004,7 +17454,7 @@ exports.BattleMovedex = { atk: -1, spa: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -17023,10 +17473,10 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move, pokemon) { - move.type = this.runEvent('Drive', pokemon, null, 'technoblast', 'Normal'); + onModifyMove(move, pokemon) { + move.type = this.runEvent('Drive', pokemon, null, move, 'Normal'); }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 190, @@ -17045,7 +17495,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "groundiumz", - secondary: false, + secondary: null, target: "normal", type: "Ground", contestType: "Cool", @@ -17063,7 +17513,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1, dance: 1}, volatileStatus: 'confusion', - secondary: false, + secondary: null, target: "allAdjacent", type: "Normal", zMoveBoost: {spa: 1}, @@ -17074,7 +17524,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 3 turns, the target cannot avoid any attacks made against it, other than OHKO moves, as long as it remains active. During the effect, the target is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, Sticky Web, and the Ability Arena Trap as long as it remains active. If the target uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, Thousand Arrows, and Iron Ball override this move if the target is under any of their effects. Fails if the target is already under this effect or the effects of Ingrain, Smack Down, or Thousand Arrows. The target is immune to this move on use if its species is Diglett, Dugtrio, Alolan Diglett, Alolan Dugtrio, Sandygast, Palossand, or Gengar while Mega-Evolved. Mega Gengar cannot be under this effect by any means.", + desc: "For 3 turns, the target cannot avoid any attacks made against it, other than OHKO moves, as long as it remains active. During the effect, the target is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, Sticky Web, and the Arena Trap Ability as long as it remains active. If the target uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, Thousand Arrows, and Iron Ball override this move if the target is under any of their effects. Fails if the target is already under this effect or the effects of Ingrain, Smack Down, or Thousand Arrows. The target is immune to this move on use if its species is Diglett, Dugtrio, Alolan Diglett, Alolan Dugtrio, Sandygast, Palossand, or Gengar while Mega-Evolved. Mega Gengar cannot be under this effect by any means.", shortDesc: "For 3 turns, target floats but moves can't miss it.", id: "telekinesis", name: "Telekinesis", @@ -17084,34 +17534,34 @@ exports.BattleMovedex = { volatileStatus: 'telekinesis', effect: { duration: 3, - onStart: function (target) { - if (target.baseTemplate.baseSpecies in {Diglett: 1, Dugtrio: 1, Palossand: 1, Sandygast: 1} || + onStart(target) { + if (['Diglett', 'Dugtrio', 'Palossand', 'Sandygast'].includes(target.baseTemplate.baseSpecies) || target.baseTemplate.species === 'Gengar-Mega') { - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return null; } if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; this.add('-start', target, 'Telekinesis'); }, onAccuracyPriority: -1, - onAccuracy: function (accuracy, target, source, move) { + onAccuracy(accuracy, target, source, move) { if (move && !move.ohko) return true; }, - onImmunity: function (type) { + onImmunity(type) { if (type === 'Ground') return false; }, - onUpdate: function (pokemon) { + onUpdate(pokemon) { if (pokemon.baseTemplate.species === 'Gengar-Mega') { delete pokemon.volatiles['telekinesis']; this.add('-end', pokemon, 'Telekinesis', '[silent]'); } }, onResidualOrder: 16, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Telekinesis'); }, }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spa: 1}, @@ -17122,15 +17572,14 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Fails when used.", - shortDesc: "Flee from wild Pokemon battles.", + shortDesc: "Fails when used.", id: "teleport", name: "Teleport", pp: 20, priority: 0, flags: {}, onTryHit: false, - secondary: false, + secondary: null, target: "self", type: "Psychic", zMoveEffect: 'heal', @@ -17141,14 +17590,14 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Z-Crystal, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, a Silvally holding a Memory, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", + desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail or Z-Crystal, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, a Silvally holding a Memory, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Harvest Ability.", shortDesc: "If the user has no item, it steals the target's.", id: "thief", name: "Thief", pp: 25, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target, source) { + onAfterHit(target, source, move) { if (source.item || source.volatiles['gem']) { return; } @@ -17156,13 +17605,13 @@ exports.BattleMovedex = { if (!yourItem) { return; } - if (!source.setItem(yourItem)) { + if (!this.singleEvent('TakeItem', yourItem, target.itemData, source, target, move, yourItem) || !source.setItem(yourItem)) { target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything return; } this.add('-item', source, yourItem, '[from] move: Thief', '[of] ' + target); }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMovePower: 120, @@ -17173,7 +17622,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 90, category: "Physical", - desc: "This move can hit airborne Pokemon, which includes Flying-type Pokemon, Pokemon with the Ability Levitate, Pokemon holding an Air Balloon, and Pokemon under the effect of Magnet Rise or Telekinesis. If the target is a Flying type and is not already grounded, this move deals neutral damage regardless of its other type(s). This move can hit a target using Bounce, Fly, or Sky Drop. If this move hits a target under the effect of Bounce, Fly, Magnet Rise, or Telekinesis, the effect ends. If the target is a Flying type that has not used Roost this turn or a Pokemon with the Ability Levitate, it loses its immunity to Ground-type attacks and the Ability Arena Trap as long as it remains active. During the effect, Magnet Rise fails for the target and Telekinesis fails against the target.", + desc: "This move can hit airborne Pokemon, which includes Flying-type Pokemon, Pokemon with the Levitate Ability, Pokemon holding an Air Balloon, and Pokemon under the effect of Magnet Rise or Telekinesis. If the target is a Flying type and is not already grounded, this move deals neutral damage regardless of its other type(s). This move can hit a target using Bounce, Fly, or Sky Drop. If this move hits a target under the effect of Bounce, Fly, Magnet Rise, or Telekinesis, the effect ends. If the target is a Flying type that has not used Roost this turn or a Pokemon with the Levitate Ability, it loses its immunity to Ground-type attacks and the Arena Trap Ability as long as it remains active. During the effect, Magnet Rise fails for the target and Telekinesis fails against the target.", shortDesc: "Grounds adjacent foes. First hit neutral on Flying.", id: "thousandarrows", isViable: true, @@ -17181,9 +17630,8 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - onEffectiveness: function (typeMod, type, move) { + onEffectiveness(typeMod, target, type, move) { if (move.type !== 'Ground') return; - let target = this.activeTarget; if (!target) return; // avoid crashing when called from a chat plugin // ignore effectiveness if the target is Flying type and immune to Ground if (!target.runImmunity('Ground')) { @@ -17192,7 +17640,7 @@ exports.BattleMovedex = { }, volatileStatus: 'smackdown', ignoreImmunity: {'Ground': true}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Ground", zMovePower: 180, @@ -17210,10 +17658,10 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - onHit: function (target, source, move) { + onHit(target, source, move) { if (source.isActive) target.addVolatile('trapped', source, move, 'trapper'); }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Ground", zMovePower: 175, @@ -17224,7 +17672,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 120, category: "Physical", - desc: "Deals damage to one adjacent foe at random. The user spends two or three turns locked into this move and becomes confused after the last turn of the effect if it is not already. If the user is prevented from moving or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user.", + desc: "The user spends two or three turns locked into this move and becomes confused immediately after its move on the last turn of the effect if it is not already. This move targets an opposing Pokemon at random on each turn. If the user is prevented from moving, is asleep at the beginning of a turn, or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk and the user is asleep, the move is used for one turn and does not confuse the user.", shortDesc: "Lasts 2-3 turns. Confuses the user afterwards.", id: "thrash", name: "Thrash", @@ -17234,12 +17682,12 @@ exports.BattleMovedex = { self: { volatileStatus: 'lockedmove', }, - onAfterMove: function (pokemon) { + onAfterMove(pokemon) { if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { pokemon.removeVolatile('lockedmove'); } }, - secondary: false, + secondary: null, target: "randomNormal", type: "Normal", zMovePower: 190, @@ -17259,31 +17707,31 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1}, effect: { duration: 2, - onStart: function (target) { + onStart(target) { this.add('-start', target, 'Throat Chop', '[silent]'); }, - onDisableMove: function (pokemon) { - for (let i = 0; i < pokemon.moveset.length; i++) { - if (this.getMove(pokemon.moveset[i].id).flags['sound']) { - pokemon.disableMove(pokemon.moveset[i].id); + onDisableMove(pokemon) { + for (const moveSlot of pokemon.moveSlots) { + if (this.getMove(moveSlot.id).flags['sound']) { + pokemon.disableMove(moveSlot.id); } } }, onBeforeMovePriority: 6, - onBeforeMove: function (pokemon, target, move) { - if (move.flags['sound']) { + onBeforeMove(pokemon, target, move) { + if (!move.isZ && move.flags['sound']) { this.add('cant', pokemon, 'move: Throat Chop'); return false; } }, onResidualOrder: 22, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Throat Chop', '[silent]'); }, }, secondary: { chance: 100, - onHit: function (target) { + onHit(target) { target.addVolatile('throatchop'); }, }, @@ -17297,15 +17745,15 @@ exports.BattleMovedex = { accuracy: 70, basePower: 110, category: "Special", - desc: "Has a 30% chance to paralyze the target. This move can hit a target using Bounce, Fly, or Sky Drop. If the weather is Rain Dance, this move does not check accuracy. If the weather is Sunny Day, this move's accuracy is 50%.", - shortDesc: "30% chance to paralyze target. Can't miss in rain.", + desc: "Has a 30% chance to paralyze the target. This move can hit a target using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop. If the weather is Primordial Sea or Rain Dance, this move does not check accuracy. If the weather is Desolate Land or Sunny Day, this move's accuracy is 50%.", + shortDesc: "30% chance to paralyze. Can't miss in rain.", id: "thunder", isViable: true, name: "Thunder", pp: 10, priority: 0, flags: {protect: 1, mirror: 1}, - onModifyMove: function (move) { + onModifyMove(move) { if (this.isWeather(['raindance', 'primordialsea'])) { move.accuracy = true; } else if (this.isWeather(['sunnyday', 'desolateland'])) { @@ -17395,7 +17843,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 0, category: "Status", - desc: "Paralyzes the target.", + desc: "Paralyzes the target. This move does not ignore type immunity.", shortDesc: "Paralyzes the target.", id: "thunderwave", isViable: true, @@ -17405,7 +17853,7 @@ exports.BattleMovedex = { flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'par', ignoreImmunity: false, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMoveBoost: {spd: 1}, @@ -17449,7 +17897,7 @@ exports.BattleMovedex = { atk: -1, def: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {def: 1}, @@ -17467,17 +17915,19 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onHit: function (target) { + onHit(target) { let success = false; for (let i in target.boosts) { + // @ts-ignore if (target.boosts[i] === 0) continue; + // @ts-ignore target.boosts[i] = -target.boosts[i]; success = true; } if (!success) return false; this.add('-invertboost', target, '[from] move: Topsy-Turvy'); }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {atk: 1}, @@ -17488,7 +17938,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Prevents the target from selecting the same move for use two turns in a row. This effect lasts until the target leaves the field.", + desc: "Prevents the target from selecting the same move for use two turns in a row. This effect ends when the target is no longer active.", shortDesc: "Target can't select the same move twice in a row.", id: "torment", name: "Torment", @@ -17498,17 +17948,17 @@ exports.BattleMovedex = { volatileStatus: 'torment', effect: { noCopy: true, - onStart: function (pokemon) { + onStart(pokemon) { this.add('-start', pokemon, 'Torment'); }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, 'Torment'); }, - onDisableMove: function (pokemon) { - if (pokemon.lastMove !== 'struggle') pokemon.disableMove(pokemon.lastMove); + onDisableMove(pokemon) { + if (pokemon.lastMove && pokemon.lastMove.id !== 'struggle') pokemon.disableMove(pokemon.lastMove.id); }, }, - secondary: false, + secondary: null, target: "normal", type: "Dark", zMoveBoost: {def: 1}, @@ -17520,7 +17970,7 @@ exports.BattleMovedex = { basePower: 0, category: "Status", desc: "Badly poisons the target. If a Poison-type Pokemon uses this move, the target cannot avoid the attack, even if the target is in the middle of a two-turn move.", - shortDesc: "Badly poisons the target.", + shortDesc: "Badly poisons the target. Poison types can't miss.", id: "toxic", isViable: true, name: "Toxic", @@ -17529,7 +17979,7 @@ exports.BattleMovedex = { flags: {protect: 1, reflectable: 1, mirror: 1}, // No Guard-like effect for Poison-type users implemented in BattleScripts#tryMoveHit status: 'tox', - secondary: false, + secondary: null, target: "normal", type: "Poison", zMoveBoost: {def: 1}, @@ -17540,7 +17990,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Sets up a hazard on the foe's side of the field, poisoning each foe that switches in, unless it is a Flying-type Pokemon or has the Ability Levitate. Can be used up to two times before failing. Foes become poisoned with one layer and badly poisoned with two layers. Can be removed from the foe's side if any foe uses Rapid Spin or Defog, is hit by Defog, or a grounded Poison-type Pokemon switches in. Safeguard prevents the foe's party from being poisoned on switch-in, but a substitute does not.", + desc: "Sets up a hazard on the opposing side of the field, poisoning each opposing Pokemon that switches in, unless it is a Flying-type Pokemon or has the Levitate Ability. Can be used up to two times before failing. Opposing Pokemon become poisoned with one layer and badly poisoned with two layers. Can be removed from the opposing side if any opposing Pokemon uses Rapid Spin or Defog successfully, is hit by Defog, or a grounded Poison-type Pokemon switches in. Safeguard prevents the opposing party from being poisoned on switch-in, but a substitute does not.", shortDesc: "Poisons grounded foes on switch-in. Max 2 layers.", id: "toxicspikes", isViable: true, @@ -17551,16 +18001,16 @@ exports.BattleMovedex = { sideCondition: 'toxicspikes', effect: { // this is a side condition - onStart: function (side) { + onStart(side) { this.add('-sidestart', side, 'move: Toxic Spikes'); this.effectData.layers = 1; }, - onRestart: function (side) { + onRestart(side) { if (this.effectData.layers >= 2) return false; this.add('-sidestart', side, 'move: Toxic Spikes'); this.effectData.layers++; }, - onSwitchIn: function (pokemon) { + onSwitchIn(pokemon) { if (!pokemon.isGrounded()) return; if (!pokemon.runImmunity('Poison')) return; if (pokemon.hasType('Poison')) { @@ -17573,7 +18023,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, target: "foeSide", type: "Poison", zMoveBoost: {def: 1}, @@ -17596,7 +18046,7 @@ exports.BattleMovedex = { boosts: { spe: -1, }, - secondary: false, + secondary: null, target: "normal", type: "Poison", zMoveBoost: {spe: 1}, @@ -17607,19 +18057,19 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, Ability, weight, gender, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP, with a maximum of 5 PP each. The user can no longer change formes if it would have the ability to do so. This move fails if the target has a substitute, if either the user or the target is already transformed, or if either is behind an Illusion.", + desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, Ability, weight, gender, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP, with a maximum of 5 PP each. The user can no longer change formes if it would have the ability to do so. This move fails if it hits a substitute, if either the user or the target is already transformed, or if either is behind an Illusion.", shortDesc: "Copies target's stats, moves, types, and Ability.", id: "transform", name: "Transform", pp: 10, priority: 0, flags: {mystery: 1}, - onHit: function (target, pokemon) { - if (!pokemon.transformInto(target, pokemon)) { + onHit(target, pokemon) { + if (!pokemon.transformInto(target)) { return false; } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveEffect: 'heal', @@ -17640,7 +18090,7 @@ exports.BattleMovedex = { flags: {protect: 1, mirror: 1}, secondary: { chance: 20, - onHit: function (target, source) { + onHit(target, source) { let result = this.random(3); if (result === 0) { target.trySetStatus('brn', source); @@ -17661,7 +18111,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail or Z-Crystal, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, a Drive, or a Memory to or from a Kyogre, a Groudon, a Giratina, an Arceus, a Genesect, or a Silvally, respectively. Pokemon with the Ability Sticky Hold are immune.", + desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail or Z-Crystal, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, a Drive, or a Memory to or from a Kyogre, a Groudon, a Giratina, an Arceus, a Genesect, or a Silvally, respectively. The target is immune to this move if it has the Sticky Hold Ability.", shortDesc: "User switches its held item with the target's.", id: "trick", isViable: true, @@ -17669,13 +18119,13 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {protect: 1, mirror: 1, mystery: 1}, - onTryHit: function (target) { + onTryHit(target) { if (target.hasAbility('stickyhold')) { - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return null; } }, - onHit: function (target, source, move) { + onHit(target, source, move) { let yourItem = target.takeItem(source); let myItem = source.takeItem(); if (target.item || source.item || (!yourItem && !myItem)) { @@ -17702,7 +18152,7 @@ exports.BattleMovedex = { this.add('-enditem', source, myItem, '[silent]', '[from] move: Trick'); } }, - secondary: false, + secondary: null, target: "normal", type: "Psychic", zMoveBoost: {spe: 2}, @@ -17720,20 +18170,20 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onHit: function (target) { + onHit(target) { if (target.hasType('Ghost')) return false; if (!target.addType('Ghost')) return false; this.add('-start', target, 'typeadd', 'Ghost', '[from] move: Trick-or-Treat'); if (target.side.active.length === 2 && target.position === 1) { // Curse Glitch - const decision = this.willMove(target); - if (decision && decision.move.id === 'curse') { - decision.targetLoc = -1; + const action = this.willMove(target); + if (action && action.move.id === 'curse') { + action.targetLoc = -1; } } }, - secondary: false, + secondary: null, target: "normal", type: "Ghost", zMoveBoost: {atk: 1, def: 1, spa: 1, spd: 1, spe: 1}, @@ -17744,38 +18194,36 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, all active Pokemon with lower Speed will move before those with higher Speed, within their priority brackets. If this move is used during the effect, the effect ends.", - shortDesc: "For 5 turns, slower Pokemon move first.", + desc: "For 5 turns, the Speed of every Pokemon is recalculated for the purposes of determining turn order. During the effect, each Pokemon's Speed is considered to be (10000 - its normal Speed), and if this value is greater than 8191, 8192 is subtracted from it. If this move is used during the effect, the effect ends.", + shortDesc: "Goes last. For 5 turns, turn order is reversed.", id: "trickroom", name: "Trick Room", pp: 5, priority: -7, flags: {mirror: 1}, - onHitField: function (target, source, effect) { - if (this.pseudoWeather['trickroom']) { - this.removePseudoWeather('trickroom', source, effect, '[of] ' + source); - } else { - this.addPseudoWeather('trickroom', source, effect, '[of] ' + source); - } - }, + pseudoWeather: 'trickroom', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 7; } return 5; }, - onStart: function (target, source) { + onStart(target, source) { this.add('-fieldstart', 'move: Trick Room', '[of] ' + source); }, - // Speed modification is changed in Pokemon.getDecisionSpeed() in sim/pokemon.js + onRestart(target, source) { + this.removePseudoWeather('trickroom'); + }, + // Speed modification is changed in Pokemon.getActionSpeed() in sim/pokemon.js onResidualOrder: 23, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Trick Room'); }, }, - secondary: false, + secondary: null, target: "all", type: "Psychic", zMoveBoost: {accuracy: 1}, @@ -17785,12 +18233,11 @@ exports.BattleMovedex = { num: 167, accuracy: 90, basePower: 10, - basePowerCallback: function (pokemon) { - pokemon.addVolatile('triplekick'); - return 10 * pokemon.volatiles['triplekick'].hit; + basePowerCallback(pokemon, target, move) { + return 10 * move.hit; }, category: "Physical", - 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.", + 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 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 three times.", shortDesc: "Hits 3 times. Each hit can miss, but power rises.", id: "triplekick", name: "Triple Kick", @@ -17799,19 +18246,7 @@ exports.BattleMovedex = { flags: {contact: 1, protect: 1, mirror: 1}, multihit: 3, multiaccuracy: true, - effect: { - duration: 1, - onStart: function () { - this.effectData.hit = 1; - }, - onRestart: function () { - this.effectData.hit++; - }, - }, - onAfterMove: function (pokemon) { - pokemon.removeVolatile('triplekick'); - }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 120, @@ -17844,9 +18279,11 @@ exports.BattleMovedex = { num: 376, accuracy: true, basePower: 0, - basePowerCallback: function (pokemon) { - let move = pokemon.getMoveData(pokemon.lastMove); // Account for calling Trump Card via other moves - switch (move.pp) { + basePowerCallback(source, target, move) { + const callerMoveId = move.sourceEffect || move.id; + const moveSlot = callerMoveId === 'instruct' ? source.getMoveData(move.id) : source.getMoveData(callerMoveId); + // @ts-ignore + switch (moveSlot.pp) { case 0: return 200; case 1: @@ -17860,7 +18297,7 @@ exports.BattleMovedex = { } }, category: "Special", - desc: "This move does not check accuracy. The power of this move is based on the amount of PP remaining after normal PP reduction and the Ability Pressure resolve. 200 power for 0 PP, 80 power for 1 PP, 60 power for 2 PP, 50 power for 3 PP, and 40 power for 4 or more PP.", + desc: "The power of this move is based on the amount of PP remaining after normal PP reduction and the Pressure Ability resolve. 200 power for 0 PP, 80 power for 1 PP, 60 power for 2 PP, 50 power for 3 PP, and 40 power for 4 or more PP.", shortDesc: "More power the fewer PP this move has left.", id: "trumpcard", name: "Trump Card", @@ -17868,7 +18305,7 @@ exports.BattleMovedex = { noPPBoosts: true, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -17886,7 +18323,7 @@ exports.BattleMovedex = { pp: 20, priority: 0, flags: {protect: 1, mirror: 1}, - multihit: [2, 2], + multihit: 2, secondary: { chance: 20, status: 'psn', @@ -17909,7 +18346,7 @@ exports.BattleMovedex = { priority: 0, flags: {}, isZ: "fairiumz", - secondary: false, + secondary: null, target: "normal", type: "Fairy", contestType: "Cool", @@ -17919,7 +18356,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Special", - desc: "Has a 20% chance to flinch the target. Damage doubles if the target is using Bounce, Fly, or Sky Drop.", + desc: "Has a 20% chance to flinch the target. Power doubles if the target is using Bounce, Fly, or Sky Drop, or is under the effect of Sky Drop.", shortDesc: "20% chance to flinch the foe(s).", id: "twister", name: "Twister", @@ -17940,7 +18377,7 @@ exports.BattleMovedex = { 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.", + 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.", id: "uturn", isViable: true, @@ -17949,7 +18386,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, selfSwitch: true, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 140, @@ -17960,7 +18397,7 @@ exports.BattleMovedex = { accuracy: 100, basePower: 90, category: "Special", - desc: "Deals damage to one adjacent foe at random. The user spends three turns locked into this move. On the first of the three turns, all sleeping active Pokemon wake up. During the three turns, no active Pokemon can fall asleep by any means; Pokemon switched in during the effect do not wake up. If the user is prevented from moving or the attack is not successful against the target during one of the turns, the effect ends.", + desc: "The user spends three turns locked into this move. This move targets an opponent at random on each turn. On the first of the three turns, all sleeping active Pokemon wake up. During the three turns, no active Pokemon can fall asleep by any means, and Pokemon switched in during the effect do not wake up. If the user is prevented from moving or the attack is not successful against the target during one of the turns, the effect ends.", shortDesc: "Lasts 3 turns. Active Pokemon cannot fall asleep.", id: "uproar", name: "Uproar", @@ -17970,9 +18407,8 @@ exports.BattleMovedex = { self: { volatileStatus: 'uproar', }, - onTryHit: function (target) { - for (let i = 0; i < target.side.active.length; i++) { - let allyActive = target.side.active[i]; + onTryHit(target) { + for (const [i, allyActive] of target.side.active.entries()) { if (allyActive && allyActive.status === 'slp') allyActive.cureStatus(); let foeActive = target.side.foe.active[i]; if (foeActive && foeActive.status === 'slp') foeActive.cureStatus(); @@ -17980,21 +18416,21 @@ exports.BattleMovedex = { }, effect: { duration: 3, - onStart: function (target) { + onStart(target) { this.add('-start', target, 'Uproar'); }, - onResidual: function (target) { - if (target.lastMove === 'struggle') { + onResidual(target) { + if (target.lastMove && target.lastMove.id === 'struggle') { // don't lock delete target.volatiles['uproar']; } this.add('-start', target, 'Uproar', '[upkeep]'); }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'Uproar'); }, onLockMove: 'uproar', - onAnySetStatus: function (status, pokemon) { + onAnySetStatus(status, pokemon) { if (status.id === 'slp') { if (pokemon === this.effectData.target) { this.add('-fail', pokemon, 'slp', '[from] Uproar', '[msg]'); @@ -18005,7 +18441,7 @@ exports.BattleMovedex = { } }, }, - secondary: false, + secondary: null, target: "randomNormal", type: "Normal", zMovePower: 175, @@ -18031,7 +18467,7 @@ exports.BattleMovedex = { spd: -1, }, }, - secondary: false, + secondary: null, target: "normal", type: "Fire", zMovePower: 220, @@ -18049,31 +18485,54 @@ exports.BattleMovedex = { pp: 30, priority: 1, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 100, contestType: "Cool", }, + "veeveevolley": { + num: 741, + accuracy: true, + basePower: 0, + basePowerCallback(pokemon) { + return Math.floor((pokemon.happiness * 10) / 25) || 1; + }, + category: "Physical", + desc: "Power is equal to the greater of (user's Happiness * 2/5), rounded down, or 1.", + shortDesc: "Max happiness: 102 power. Can't miss.", + id: "veeveevolley", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Veevee Volley", + pp: 20, + priority: 0, + flags: {contact: 1, protect: 1}, + secondary: null, + target: "normal", + type: "Normal", + contestType: "Cute", + }, "venomdrench": { num: 599, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers the target's Attack, Special Attack, and Speed by 1 stage if the target is poisoned. Fails if the target is not poisoned.", - shortDesc: "Lowers Atk, Sp. Atk, Speed of poisoned foes by 1.", + shortDesc: "Lowers Atk/Sp. Atk/Speed of poisoned foes by 1.", id: "venomdrench", name: "Venom Drench", pp: 20, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, - onHit: function (target, source, move) { + onHit(target, source, move) { if (target.status === 'psn' || target.status === 'tox') { - return this.boost({atk:-1, spa:-1, spe:-1}, target, source, move); + return this.boost({atk: -1, spa: -1, spe: -1}, target, source, move); } return false; }, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Poison", zMoveBoost: {def: 1}, @@ -18092,12 +18551,12 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, onBasePowerPriority: 4, - onBasePower: function (basePower, pokemon, target) { + onBasePower(basePower, pokemon, target) { if (target.status === 'psn' || target.status === 'tox') { return this.chainModify(2); } }, - secondary: false, + secondary: null, target: "normal", type: "Poison", zMovePower: 120, @@ -18108,14 +18567,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 55, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "vicegrip", name: "Vice Grip", pp: 30, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -18126,14 +18584,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 45, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "vinewhip", name: "Vine Whip", pp: 25, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 100, @@ -18151,7 +18608,7 @@ exports.BattleMovedex = { pp: 10, priority: -1, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 140, @@ -18162,7 +18619,7 @@ exports.BattleMovedex = { 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.", + 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.", id: "voltswitch", isViable: true, @@ -18171,7 +18628,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, selfSwitch: true, - secondary: false, + secondary: null, target: "normal", type: "Electric", zMovePower: 140, @@ -18204,7 +18661,7 @@ exports.BattleMovedex = { num: 358, accuracy: 100, basePower: 70, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (target.status === 'slp' || target.hasAbility('comatose')) return move.basePower * 2; return move.basePower; }, @@ -18216,10 +18673,10 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - onHit: function (target) { + onHit(target) { if (target.status === 'slp') target.cureStatus(); }, - secondary: false, + secondary: null, target: "normal", type: "Fighting", zMovePower: 140, @@ -18230,14 +18687,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 40, category: "Special", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "watergun", name: "Water Gun", pp: 25, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 100, @@ -18247,43 +18703,45 @@ exports.BattleMovedex = { num: 518, accuracy: 100, basePower: 80, - basePowerCallback: function (target, source, move) { - if (move.sourceEffect in {firepledge:1, grasspledge:1}) { + basePowerCallback(target, source, move) { + if (['firepledge', 'grasspledge'].includes(move.sourceEffect)) { this.add('-combine'); return 150; } return 80; }, category: "Special", - desc: "If one of the user's allies chose to use Fire Pledge or Grass Pledge this turn and has not moved yet, it takes its turn immediately after the user and the user's move does nothing. If combined with Fire Pledge, the ally uses Water Pledge with 150 Base Power and a rainbow appears on the user's side for 4 turns, which doubles secondary effect chances but does not stack with the Ability Serene Grace. If combined with Grass Pledge, the ally uses Grass Pledge with 150 Base Power and a swamp appears on the target's side for 4 turns, which quarters the Speed of each Pokemon on that side. When used as a combined move, this move gains STAB no matter what the user's type is. This move does not consume the user's Water Gem, and cannot be redirected by the Ability Storm Drain.", + desc: "If one of the user's allies chose to use Fire Pledge or Grass Pledge this turn and has not moved yet, it takes its turn immediately after the user and the user's move does nothing. If combined with Fire Pledge, the ally uses Water Pledge with 150 power and a rainbow appears on the user's side for 4 turns, which doubles secondary effect chances but does not stack with the Serene Grace Ability. If combined with Grass Pledge, the ally uses Grass Pledge with 150 power and a swamp appears on the target's side for 4 turns, which quarters the Speed of each Pokemon on that side. When used as a combined move, this move gains STAB no matter what the user's type is. This move does not consume the user's Water Gem, and cannot be redirected by the Storm Drain Ability.", shortDesc: "Use with Grass or Fire Pledge for added effect.", id: "waterpledge", name: "Water Pledge", pp: 10, priority: 0, flags: {protect: 1, mirror: 1, nonsky: 1}, - onPrepareHit: function (target, source, move) { - for (let i = 0; i < this.queue.length; i++) { - let decision = this.queue[i]; - if (!decision.move || !decision.pokemon || !decision.pokemon.isActive || decision.pokemon.fainted) continue; - if (decision.pokemon.side === source.side && decision.move.id in {firepledge:1, grasspledge:1}) { - this.prioritizeQueue(decision); - this.add('-waiting', source, decision.pokemon); + onPrepareHit(target, source, move) { + for (const action of this.queue) { + // @ts-ignore + if (!action.move || !action.pokemon || !action.pokemon.isActive || action.pokemon.fainted) continue; + // @ts-ignore + if (action.pokemon.side === source.side && ['firepledge', 'grasspledge'].includes(action.move.id)) { + // @ts-ignore + this.prioritizeAction(action); + this.add('-waiting', source, action.pokemon); return null; } } }, - onModifyMove: function (move) { + onModifyMove(move) { if (move.sourceEffect === 'grasspledge') { move.type = 'Grass'; - move.hasSTAB = true; + move.forceSTAB = true; } if (move.sourceEffect === 'firepledge') { move.type = 'Water'; - move.hasSTAB = true; + move.forceSTAB = true; } }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.sourceEffect === 'firepledge') { source.side.addSideCondition('waterpledge'); } @@ -18293,22 +18751,22 @@ exports.BattleMovedex = { }, effect: { duration: 4, - onStart: function (targetSide) { + onStart(targetSide) { this.add('-sidestart', targetSide, 'Water Pledge'); }, - onEnd: function (targetSide) { + onEnd(targetSide) { this.add('-sideend', targetSide, 'Water Pledge'); }, - onModifyMove: function (move) { + onModifyMove(move) { if (move.secondaries && move.id !== 'secretpower') { this.debug('doubling secondary chance'); - for (let i = 0; i < move.secondaries.length; i++) { - move.secondaries[i].chance *= 2; + for (const secondary of move.secondaries) { + if (secondary.chance) secondary.chance *= 2; } } }, }, - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 160, @@ -18340,38 +18798,32 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "For 5 turns, all Fire-type attacks used by any active Pokemon have their power reduced to 0.33x. Fails if this move is already in effect.", + desc: "For 5 turns, all Fire-type attacks used by any active Pokemon have their power multiplied by 0.33. Fails if this effect is already active.", shortDesc: "For 5 turns, Fire-type attacks have 1/3 power.", id: "watersport", name: "Water Sport", pp: 15, priority: 0, flags: {nonsky: 1}, - onHitField: function (target, source, effect) { - if (this.pseudoWeather['watersport']) { - return false; - } else { - this.addPseudoWeather('watersport', source, effect, '[of] ' + source); - } - }, + pseudoWeather: 'watersport', effect: { duration: 5, - onStart: function (side, source) { + onStart(side, source) { this.add('-fieldstart', 'move: Water Sport', '[of] ' + source); }, onBasePowerPriority: 1, - onBasePower: function (basePower, attacker, defender, move) { + onBasePower(basePower, attacker, defender, move) { if (move.type === 'Fire') { this.debug('water sport weaken'); return this.chainModify([0x548, 0x1000]); } }, onResidualOrder: 21, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Water Sport'); }, }, - secondary: false, + secondary: null, target: "all", type: "Water", zMoveBoost: {spd: 1}, @@ -18381,7 +18833,7 @@ exports.BattleMovedex = { num: 323, accuracy: 100, basePower: 150, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { return move.basePower * pokemon.hp / pokemon.maxhp; }, category: "Special", @@ -18393,7 +18845,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "allAdjacentFoes", type: "Water", zMovePower: 200, @@ -18425,22 +18877,23 @@ exports.BattleMovedex = { num: 594, accuracy: 100, basePower: 15, - basePowerCallback: function (pokemon, target, move) { + basePowerCallback(pokemon, target, move) { if (pokemon.template.species === 'Greninja-Ash' && pokemon.hasAbility('battlebond')) { return move.basePower + 5; } return move.basePower; }, category: "Special", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times. Base power is 20 if the user is Ash-Greninja.", - shortDesc: "Hits 2-5 times in one turn.", + desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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. If the user is an Ash-Greninja with the Battle Bond Ability, this move has a power of 20 and always hits three times.", + shortDesc: "Usually goes first. Hits 2-5 times in one turn.", id: "watershuriken", + isViable: true, name: "Water Shuriken", pp: 20, priority: 1, flags: {protect: 1, mirror: 1}, multihit: [2, 5], - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 100, @@ -18450,37 +18903,37 @@ exports.BattleMovedex = { num: 311, accuracy: 100, basePower: 50, - basePowerCallback: function (pokemon, target, move) { - if (this.weather) return move.basePower * 2; - return move.basePower; - }, category: "Special", - desc: "Power doubles during weather effects and this move's type changes to match; Ice type during Hail, Water type during Rain Dance, Rock type during Sandstorm, and Fire type during Sunny Day.", + desc: "Power doubles if a weather condition other than Delta Stream is active, and this move's type changes to match. Ice type during Hail, Water type during Primordial Sea or Rain Dance, Rock type during Sandstorm, and Fire type during Desolate Land or Sunny Day.", shortDesc: "Power doubles and type varies in each weather.", id: "weatherball", name: "Weather Ball", pp: 10, priority: 0, flags: {bullet: 1, protect: 1, mirror: 1}, - onModifyMove: function (move) { + onModifyMove(move) { switch (this.effectiveWeather()) { case 'sunnyday': case 'desolateland': move.type = 'Fire'; + move.basePower *= 2; break; case 'raindance': case 'primordialsea': move.type = 'Water'; + move.basePower *= 2; break; case 'sandstorm': move.type = 'Rock'; + move.basePower *= 2; break; case 'hail': move.type = 'Ice'; + move.basePower *= 2; break; } }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 160, @@ -18491,7 +18944,7 @@ exports.BattleMovedex = { accuracy: 85, basePower: 35, category: "Special", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "whirlpool", name: "Whirlpool", @@ -18499,7 +18952,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Water", zMovePower: 100, @@ -18510,7 +18963,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The target is forced to switch out and be replaced with a random unfainted ally. Fails if the target used Ingrain previously or has the Ability Suction Cups.", + desc: "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.", shortDesc: "Forces the target to switch to a random ally.", id: "whirlwind", isViable: true, @@ -18519,7 +18972,7 @@ exports.BattleMovedex = { priority: -6, flags: {reflectable: 1, mirror: 1, authentic: 1, mystery: 1}, forceSwitch: true, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spd: 1}, @@ -18530,7 +18983,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "The user and its party members are protected from moves made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails or if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn or if this move is already in effect for the user's side.", + desc: "The user and its party members are protected from moves made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails, if the user's last move used is not Baneful Bunker, Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard, or if it was one of those moves and the user's protection was broken. Fails if the user moves last this turn or if this move is already in effect for the user's side.", shortDesc: "Protects allies from multi-target moves this turn.", id: "wideguard", name: "Wide Guard", @@ -18538,21 +18991,25 @@ exports.BattleMovedex = { priority: 3, flags: {snatch: 1}, sideCondition: 'wideguard', - onTryHitSide: function (side, source) { + onTryHitSide(side, source) { return this.willAct(); }, - onHitSide: function (side, source) { + onHitSide(side, source) { source.addVolatile('stall'); }, effect: { duration: 1, - onStart: function (target, source) { + onStart(target, source) { this.add('-singleturn', source, 'Wide Guard'); }, onTryHitPriority: 4, - onTryHit: function (target, source, effect) { + onTryHit(target, source, move) { // Wide Guard blocks all spread moves - if (effect && effect.target !== 'allAdjacent' && effect.target !== 'allAdjacentFoes') { + if (move && move.target !== 'allAdjacent' && move.target !== 'allAdjacentFoes') { + return; + } + if (move.isZ) { + move.zBrokeProtect = true; return; } this.add('-activate', target, 'move: Wide Guard'); @@ -18563,10 +19020,10 @@ exports.BattleMovedex = { delete source.volatiles['lockedmove']; } } - return null; + return this.NOT_FAILURE; }, }, - secondary: false, + secondary: null, target: "allySide", type: "Rock", zMoveBoost: {def: 1}, @@ -18586,7 +19043,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [1, 4], - secondary: false, + secondary: null, target: "normal", type: "Electric", zMovePower: 175, @@ -18606,7 +19063,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, status: 'brn', - secondary: false, + secondary: null, target: "normal", type: "Fire", zMoveBoost: {atk: 1}, @@ -18617,14 +19074,13 @@ exports.BattleMovedex = { accuracy: 100, basePower: 60, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "wingattack", name: "Wing Attack", pp: 35, priority: 0, flags: {contact: 1, protect: 1, mirror: 1, distance: 1}, - secondary: false, + secondary: null, target: "any", type: "Flying", zMovePower: 120, @@ -18645,21 +19101,45 @@ exports.BattleMovedex = { flags: {snatch: 1, heal: 1}, sideCondition: 'Wish', effect: { - duration: 2, - onStart: function (side, source) { - this.effectData.hp = source.maxhp / 2; + onStart(side, source) { + this.effectData.positions = []; + for (let i = 0; i < side.active.length; i++) { + this.effectData.positions[i] = null; + } + this.effectData.positions[source.position] = { + source, + position: source.position, + hp: source.maxhp / 2, + duration: 2, + }; + this.effectData.wishes = 1; + }, + onRestart(side, source) { + if (this.effectData.positions[source.position]) return false; + this.effectData.positions[source.position] = { + source, + position: source.position, + hp: source.maxhp / 2, + duration: 2, + }; + this.effectData.wishes++; }, onResidualOrder: 4, - onEnd: function (side) { - let target = side.active[this.effectData.sourcePosition]; - if (target && !target.fainted) { - let source = this.effectData.source; - let damage = this.heal(this.effectData.hp, target, target); - if (damage) this.add('-heal', target, target.getHealth, '[from] move: Wish', '[wisher] ' + source.name); + onResidual(side) { + for (const wish of this.effectData.positions) { + if (wish && --wish.duration === 0) { + let target = side.active[wish.position]; + if (target && !target.fainted) { + let damage = this.heal(wish.hp, target, target); + if (damage) this.add('-heal', target, target.getHealth, '[from] move: Wish', '[wisher] ' + wish.source.name); + } + this.effectData.positions[wish.position] = null; + if (--this.effectData.wishes === 0) return side.removeSideCondition('wish'); + } } }, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {spd: 1}, @@ -18680,7 +19160,7 @@ exports.BattleMovedex = { boosts: { def: 1, }, - secondary: false, + secondary: null, target: "self", type: "Water", zMoveBoost: {def: 1}, @@ -18698,31 +19178,29 @@ exports.BattleMovedex = { pp: 10, priority: 0, flags: {mirror: 1}, - onHitField: function (target, source, effect) { - if (this.pseudoWeather['wonderroom']) { - this.removePseudoWeather('wonderroom', source, effect, '[of] ' + source); - } else { - this.addPseudoWeather('wonderroom', source, effect, '[of] ' + source); - } - }, + pseudoWeather: 'wonderroom', effect: { duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasAbility('persistent')) { + this.add('-activate', source, 'ability: Persistent', effect); return 7; } return 5; }, - onStart: function (side, source) { + onStart(side, source) { this.add('-fieldstart', 'move: Wonder Room', '[of] ' + source); }, + onRestart(target, source) { + this.removePseudoWeather('wonderroom'); + }, // Swapping defenses implemented in sim/pokemon.js:Pokemon#calculateStat and Pokemon#getStat onResidualOrder: 24, - onEnd: function () { + onEnd() { this.add('-fieldend', 'move: Wonder Room'); }, }, - secondary: false, + secondary: null, target: "all", type: "Psychic", zMoveBoost: {spd: 1}, @@ -18742,7 +19220,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, recoil: [33, 100], - secondary: false, + secondary: null, target: "normal", type: "Grass", zMovePower: 190, @@ -18764,7 +19242,7 @@ exports.BattleMovedex = { atk: 1, spa: 1, }, - secondary: false, + secondary: null, target: "self", type: "Normal", zMoveBoost: {atk: 1}, @@ -18775,20 +19253,20 @@ exports.BattleMovedex = { accuracy: 100, basePower: 0, category: "Status", - desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is Insomnia, Multitype, Stance Change, or Truant.", + desc: "Causes the target's Ability to become Insomnia. Fails if the target's Ability is Battle Bond, Comatose, Disguise, Insomnia, Multitype, Power Construct, RKS System, Schooling, Shields Down, Stance Change, Truant, or Zen Mode.", shortDesc: "The target's Ability becomes Insomnia.", id: "worryseed", name: "Worry Seed", pp: 10, priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1, mystery: 1}, - onTryHit: function (pokemon) { - let bannedAbilities = {comatose:1, insomnia:1, multitype:1, schooling:1, stancechange:1, truant:1}; - if (bannedAbilities[pokemon.ability]) { + onTryHit(pokemon) { + let bannedAbilities = ['battlebond', 'comatose', 'disguise', 'insomnia', 'multitype', 'powerconstruct', 'rkssystem', 'schooling', 'shieldsdown', 'stancechange', 'truant', 'zenmode']; + if (bannedAbilities.includes(pokemon.ability)) { return false; } }, - onHit: function (pokemon) { + onHit(pokemon) { let oldAbility = pokemon.setAbility('insomnia'); if (oldAbility) { this.add('-ability', pokemon, 'Insomnia', '[from] move: Worry Seed'); @@ -18799,7 +19277,7 @@ exports.BattleMovedex = { } return false; }, - secondary: false, + secondary: null, target: "normal", type: "Grass", zMoveBoost: {spe: 1}, @@ -18810,7 +19288,7 @@ exports.BattleMovedex = { accuracy: 90, basePower: 15, category: "Physical", - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute. This effect is not stackable or reset by using this or another partial-trapping move.", + desc: "Prevents the target from switching for four or five turns (seven turns if the user is holding Grip Claw). Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, Parting Shot, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin or Substitute successfully. This effect is not stackable or reset by using this or another binding move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "wrap", name: "Wrap", @@ -18818,7 +19296,7 @@ exports.BattleMovedex = { priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, volatileStatus: 'partiallytrapped', - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 100, @@ -18828,7 +19306,7 @@ exports.BattleMovedex = { num: 378, accuracy: 100, basePower: 0, - basePowerCallback: function (pokemon, target) { + basePowerCallback(pokemon, target) { return Math.floor(Math.floor((120 * (100 * Math.floor(target.hp * 4096 / target.maxhp)) + 2048 - 1) / 4096) / 100) || 1; }, category: "Special", @@ -18839,7 +19317,7 @@ exports.BattleMovedex = { pp: 5, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMovePower: 190, @@ -18850,7 +19328,6 @@ exports.BattleMovedex = { accuracy: 100, basePower: 80, category: "Physical", - desc: "No additional effect.", shortDesc: "No additional effect.", id: "xscissor", isViable: true, @@ -18858,7 +19335,7 @@ exports.BattleMovedex = { pp: 15, priority: 0, flags: {contact: 1, protect: 1, mirror: 1}, - secondary: false, + secondary: null, target: "normal", type: "Bug", zMovePower: 160, @@ -18869,7 +19346,7 @@ exports.BattleMovedex = { accuracy: true, basePower: 0, category: "Status", - desc: "Causes the target to fall asleep at the end of the next turn. Fails when used if the target cannot fall asleep or if it already has a major status condition. At the end of the next turn, if the target is still on the field, does not have a major status condition, and can fall asleep, it falls asleep. If the target becomes affected, this effect cannot be prevented by Safeguard or a substitute, or by falling asleep and waking up during the effect.", + desc: "Causes the target to fall asleep at the end of the next turn. Fails when used if the target cannot fall asleep or if it already has a major status condition. At the end of the next turn, if the target is still active, does not have a major status condition, and can fall asleep, it falls asleep. If the target becomes affected, this effect cannot be prevented by Safeguard or a substitute, or by falling asleep and waking up during the effect.", shortDesc: "Puts the target to sleep after 1 turn.", id: "yawn", name: "Yawn", @@ -18877,7 +19354,7 @@ exports.BattleMovedex = { priority: 0, flags: {protect: 1, reflectable: 1, mirror: 1}, volatileStatus: 'yawn', - onTryHit: function (target) { + onTryHit(target) { if (target.status || !target.runStatusImmunity('slp')) { return false; } @@ -18885,15 +19362,15 @@ exports.BattleMovedex = { effect: { noCopy: true, // doesn't get copied by Baton Pass duration: 2, - onStart: function (target, source) { + onStart(target, source) { this.add('-start', target, 'move: Yawn', '[of] ' + source); }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'move: Yawn', '[silent]'); - target.trySetStatus('slp'); + target.trySetStatus('slp', this.effectData.source); }, }, - secondary: false, + secondary: null, target: "normal", type: "Normal", zMoveBoost: {spe: 1}, @@ -18964,7 +19441,29 @@ exports.BattleMovedex = { zMovePower: 160, contestType: "Cool", }, + "zippyzap": { + num: 729, + accuracy: 100, + basePower: 50, + category: "Physical", + desc: "Will always result in a critical hit.", + shortDesc: "Nearly always goes first. Always crits.", + id: "zippyzap", + isNonstandard: true, + isUnreleased: true, + isViable: true, + name: "Zippy Zap", + pp: 15, + priority: 2, + flags: {contact: 1, protect: 1}, + willCrit: true, + secondary: null, + target: "normal", + type: "Electric", + contestType: "Cool", + }, "paleowave": { + num: 0, accuracy: 100, basePower: 85, category: "Special", @@ -18989,6 +19488,7 @@ exports.BattleMovedex = { contestType: "Beautiful", }, "shadowstrike": { + num: 0, accuracy: 95, basePower: 80, category: "Physical", @@ -19013,6 +19513,7 @@ exports.BattleMovedex = { contestType: "Clever", }, "magikarpsrevenge": { + num: 0, accuracy: true, basePower: 120, category: "Physical", @@ -19023,17 +19524,17 @@ exports.BattleMovedex = { name: "Magikarp's Revenge", pp: 10, priority: 0, - flags: {contact: 1, recharge: 1, protect: 1, mirror: 1}, + flags: {contact: 1, recharge: 1, protect: 1, mirror: 1, heal: 1}, noSketch: true, drain: [1, 2], - onTry: function (pokemon) { + onTry(pokemon) { if (pokemon.template.name !== 'Magikarp') { this.add('-fail', pokemon, 'move: Magikarp\'s Revenge'); return null; } }, self: { - onHit: function (source) { + onHit(source) { this.setWeather('raindance'); source.addVolatile('magiccoat'); source.addVolatile('aquaring'); @@ -19055,3 +19556,5 @@ exports.BattleMovedex = { contestType: "Cute", }, }; + +exports.BattleMovedex = BattleMovedex; diff --git a/data/pokedex.js b/data/pokedex.js index d05011cc12a25..6d2b576bdb704 100644 --- a/data/pokedex.js +++ b/data/pokedex.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattlePokedex = { +/**@type {{[k: string]: TemplateData}} */ +let BattlePokedex = { bulbasaur: { num: 1, species: "Bulbasaur", @@ -25,8 +26,8 @@ exports.BattlePokedex = { weightkg: 13, color: "Green", prevo: "bulbasaur", - evos: ["venusaur"], evoLevel: 16, + evos: ["venusaur"], eggGroups: ["Monster", "Grass"], }, venusaur: { @@ -83,8 +84,8 @@ exports.BattlePokedex = { weightkg: 19, color: "Red", prevo: "charmander", - evos: ["charizard"], evoLevel: 16, + evos: ["charizard"], eggGroups: ["Monster", "Dragon"], }, charizard: { @@ -156,8 +157,8 @@ exports.BattlePokedex = { weightkg: 22.5, color: "Blue", prevo: "squirtle", - evos: ["blastoise"], evoLevel: 16, + evos: ["blastoise"], eggGroups: ["Monster", "Water 1"], }, blastoise: { @@ -212,8 +213,8 @@ exports.BattlePokedex = { weightkg: 9.9, color: "Green", prevo: "caterpie", - evos: ["butterfree"], evoLevel: 7, + evos: ["butterfree"], eggGroups: ["Bug"], }, butterfree: { @@ -251,8 +252,8 @@ exports.BattlePokedex = { weightkg: 10, color: "Yellow", prevo: "weedle", - evos: ["beedrill"], evoLevel: 7, + evos: ["beedrill"], eggGroups: ["Bug"], }, beedrill: { @@ -305,8 +306,8 @@ exports.BattlePokedex = { weightkg: 30, color: "Brown", prevo: "pidgey", - evos: ["pidgeot"], evoLevel: 18, + evos: ["pidgeot"], eggGroups: ["Flying"], }, pidgeot: { @@ -377,7 +378,7 @@ exports.BattlePokedex = { prevo: "rattata", evoLevel: 20, eggGroups: ["Field"], - otherFormes: ["raticatealola"], + otherFormes: ["raticatealola", "raticatealolatotem"], }, raticatealola: { num: 20, @@ -395,6 +396,20 @@ exports.BattlePokedex = { evoLevel: 20, eggGroups: ["Field"], }, + raticatealolatotem: { + num: 20, + species: "Raticate-Alola-Totem", + baseSpecies: "Raticate", + forme: "Alola-Totem", + formeLetter: "T", + types: ["Dark", "Normal"], + baseStats: {hp: 75, atk: 71, def: 70, spa: 40, spd: 80, spe: 77}, + abilities: {0: "Thick Fat"}, + heightm: 1.4, + weightkg: 105, + color: "Black", + eggGroups: ["Field"], + }, spearow: { num: 21, species: "Spearow", @@ -455,10 +470,10 @@ exports.BattlePokedex = { weightkg: 6, color: "Yellow", prevo: "pichu", + evoType: "levelFriendship", evos: ["raichu", "raichualola"], - evoLevel: 1, eggGroups: ["Field", "Fairy"], - otherFormes: ["pikachucosplay", "pikachurockstar", "pikachubelle", "pikachupopstar", "pikachuphd", "pikachulibre", "pikachuoriginal", "pikachuhoenn", "pikachusinnoh", "pikachuunova", "pikachukalos", "pikachualola"], + otherFormes: ["pikachucosplay", "pikachurockstar", "pikachubelle", "pikachupopstar", "pikachuphd", "pikachulibre", "pikachuoriginal", "pikachuhoenn", "pikachusinnoh", "pikachuunova", "pikachukalos", "pikachualola", "pikachupartner", "pikachustarter"], }, pikachucosplay: { num: 25, @@ -640,6 +655,35 @@ exports.BattlePokedex = { color: "Yellow", eggGroups: ["Undiscovered"], }, + pikachupartner: { + num: 25, + species: "Pikachu-Partner", + baseSpecies: "Pikachu", + forme: "Partner", + formeLetter: "P", + types: ["Electric"], + gender: "M", + baseStats: {hp: 35, atk: 55, def: 40, spa: 50, spd: 50, spe: 90}, + abilities: {0: "Static"}, + heightm: 0.4, + weightkg: 6, + color: "Yellow", + eggGroups: ["Undiscovered"], + }, + pikachustarter: { + num: 25, + species: "Pikachu-Starter", + baseSpecies: "Pikachu", + forme: "Starter", + formeLetter: "S", + types: ["Electric"], + baseStats: {hp: 45, atk: 80, def: 50, spa: 75, spd: 60, spe: 120}, + abilities: {0: "Static", H: "Lightning Rod"}, + heightm: 0.4, + weightkg: 6, + color: "Yellow", + eggGroups: ["Undiscovered"], + }, raichu: { num: 26, species: "Raichu", @@ -650,7 +694,8 @@ exports.BattlePokedex = { weightkg: 30, color: "Yellow", prevo: "pikachu", - evoLevel: 1, + evoItem: "Thunder Stone", + evoType: "stone", eggGroups: ["Field", "Fairy"], otherFormes: ["raichualola"], }, @@ -667,7 +712,8 @@ exports.BattlePokedex = { weightkg: 21, color: "Brown", prevo: "pikachu", - evoLevel: 1, + evoType: "stone", + evoItem: "Thunder Stone", eggGroups: ["Field", "Fairy"], }, sandshrew: { @@ -725,7 +771,8 @@ exports.BattlePokedex = { weightkg: 55, color: "Blue", prevo: "sandshrewalola", - evoLevel: 1, + evoType: "stone", + evoItem: "Ice Stone", eggGroups: ["Field"], }, nidoranf: { @@ -752,8 +799,8 @@ exports.BattlePokedex = { weightkg: 20, color: "Blue", prevo: "nidoranf", - evos: ["nidoqueen"], evoLevel: 16, + evos: ["nidoqueen"], eggGroups: ["Undiscovered"], }, nidoqueen: { @@ -767,7 +814,8 @@ exports.BattlePokedex = { weightkg: 60, color: "Blue", prevo: "nidorina", - evoLevel: 16, + evoType: "stone", + evoItem: "Moon Stone", eggGroups: ["Undiscovered"], }, nidoranm: { @@ -794,8 +842,8 @@ exports.BattlePokedex = { weightkg: 19.5, color: "Purple", prevo: "nidoranm", - evos: ["nidoking"], evoLevel: 16, + evos: ["nidoking"], eggGroups: ["Monster", "Field"], }, nidoking: { @@ -809,7 +857,8 @@ exports.BattlePokedex = { weightkg: 62, color: "Purple", prevo: "nidorino", - evoLevel: 16, + evoType: "stone", + evoItem: "Moon Stone", eggGroups: ["Monster", "Field"], }, clefairy: { @@ -823,8 +872,8 @@ exports.BattlePokedex = { weightkg: 7.5, color: "Pink", prevo: "cleffa", + evoType: "levelFriendship", evos: ["clefable"], - evoLevel: 1, eggGroups: ["Fairy"], }, clefable: { @@ -838,7 +887,8 @@ exports.BattlePokedex = { weightkg: 40, color: "Pink", prevo: "clefairy", - evoLevel: 1, + evoType: "stone", + evoItem: "Moon Stone", eggGroups: ["Fairy"], }, vulpix: { @@ -882,7 +932,8 @@ exports.BattlePokedex = { weightkg: 19.9, color: "Yellow", prevo: "vulpix", - evoLevel: 1, + evoType: "stone", + evoItem: "Fire Stone", eggGroups: ["Field"], otherFormes: ["ninetalesalola"], }, @@ -900,7 +951,8 @@ exports.BattlePokedex = { weightkg: 19.9, color: "Blue", prevo: "vulpixalola", - evoLevel: 1, + evoType: "stone", + evoItem: "Ice Stone", eggGroups: ["Field"], }, jigglypuff: { @@ -914,8 +966,8 @@ exports.BattlePokedex = { weightkg: 5.5, color: "Pink", prevo: "igglybuff", + evoType: "levelFriendship", evos: ["wigglytuff"], - evoLevel: 1, eggGroups: ["Fairy"], }, wigglytuff: { @@ -929,7 +981,8 @@ exports.BattlePokedex = { weightkg: 12, color: "Pink", prevo: "jigglypuff", - evoLevel: 1, + evoType: "stone", + evoItem: "Moon Stone", eggGroups: ["Fairy"], }, zubat: { @@ -954,8 +1007,8 @@ exports.BattlePokedex = { weightkg: 55, color: "Purple", prevo: "zubat", - evos: ["crobat"], evoLevel: 22, + evos: ["crobat"], eggGroups: ["Flying"], }, oddish: { @@ -980,8 +1033,8 @@ exports.BattlePokedex = { weightkg: 8.6, color: "Blue", prevo: "oddish", - evos: ["vileplume", "bellossom"], evoLevel: 21, + evos: ["vileplume", "bellossom"], eggGroups: ["Grass"], }, vileplume: { @@ -994,7 +1047,8 @@ exports.BattlePokedex = { weightkg: 18.6, color: "Red", prevo: "gloom", - evoLevel: 21, + evoType: "stone", + evoItem: "Leaf Stone", eggGroups: ["Grass"], }, paras: { @@ -1160,7 +1214,7 @@ exports.BattlePokedex = { weightkg: 33, color: "Blue", prevo: "meowthalola", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Field"], }, psyduck: { @@ -1237,7 +1291,8 @@ exports.BattlePokedex = { weightkg: 155, color: "Brown", prevo: "growlithe", - evoLevel: 1, + evoType: "stone", + evoItem: "Fire Stone", eggGroups: ["Field"], }, poliwag: { @@ -1262,8 +1317,8 @@ exports.BattlePokedex = { weightkg: 20, color: "Blue", prevo: "poliwag", - evos: ["poliwrath", "politoed"], evoLevel: 25, + evos: ["poliwrath", "politoed"], eggGroups: ["Water 1"], }, poliwrath: { @@ -1276,7 +1331,8 @@ exports.BattlePokedex = { weightkg: 54, color: "Blue", prevo: "poliwhirl", - evoLevel: 25, + evoType: "stone", + evoItem: "Water Stone", eggGroups: ["Water 1"], }, abra: { @@ -1303,8 +1359,8 @@ exports.BattlePokedex = { weightkg: 56.5, color: "Brown", prevo: "abra", - evos: ["alakazam"], evoLevel: 16, + evos: ["alakazam"], eggGroups: ["Human-Like"], }, alakazam: { @@ -1318,7 +1374,7 @@ exports.BattlePokedex = { weightkg: 48, color: "Brown", prevo: "kadabra", - evoLevel: 16, + evoType: "trade", eggGroups: ["Human-Like"], otherFormes: ["alakazammega"], }, @@ -1361,8 +1417,8 @@ exports.BattlePokedex = { weightkg: 70.5, color: "Gray", prevo: "machop", - evos: ["machamp"], evoLevel: 28, + evos: ["machamp"], eggGroups: ["Human-Like"], }, machamp: { @@ -1376,7 +1432,7 @@ exports.BattlePokedex = { weightkg: 130, color: "Gray", prevo: "machoke", - evoLevel: 28, + evoType: "trade", eggGroups: ["Human-Like"], }, bellsprout: { @@ -1401,8 +1457,8 @@ exports.BattlePokedex = { weightkg: 6.4, color: "Green", prevo: "bellsprout", - evos: ["victreebel"], evoLevel: 21, + evos: ["victreebel"], eggGroups: ["Grass"], }, victreebel: { @@ -1415,7 +1471,8 @@ exports.BattlePokedex = { weightkg: 15.5, color: "Green", prevo: "weepinbell", - evoLevel: 21, + evoType: "stone", + evoItem: "Leaf Stone", eggGroups: ["Grass"], }, tentacool: { @@ -1481,8 +1538,8 @@ exports.BattlePokedex = { weightkg: 105, color: "Brown", prevo: "geodude", - evos: ["golem"], evoLevel: 25, + evos: ["golem"], eggGroups: ["Mineral"], otherFormes: ["graveleralola"], }, @@ -1499,8 +1556,8 @@ exports.BattlePokedex = { weightkg: 110, color: "Gray", prevo: "geodudealola", - evos: ["golemalola"], evoLevel: 25, + evos: ["golemalola"], eggGroups: ["Mineral"], }, golem: { @@ -1513,7 +1570,7 @@ exports.BattlePokedex = { weightkg: 300, color: "Brown", prevo: "graveler", - evoLevel: 25, + evoType: "trade", eggGroups: ["Mineral"], otherFormes: ["golemalola"], }, @@ -1530,7 +1587,7 @@ exports.BattlePokedex = { weightkg: 316, color: "Gray", prevo: "graveleralola", - evoLevel: 25, + evoType: "trade", eggGroups: ["Mineral"], }, ponyta: { @@ -1622,8 +1679,8 @@ exports.BattlePokedex = { weightkg: 60, color: "Gray", prevo: "magnemite", - evos: ["magnezone"], evoLevel: 30, + evos: ["magnezone"], eggGroups: ["Mineral"], }, farfetchd: { @@ -1767,7 +1824,8 @@ exports.BattlePokedex = { weightkg: 132.5, color: "Purple", prevo: "shellder", - evoLevel: 1, + evoType: "stone", + evoItem: "Water Stone", eggGroups: ["Water 3"], }, gastly: { @@ -1792,8 +1850,8 @@ exports.BattlePokedex = { weightkg: 0.1, color: "Purple", prevo: "gastly", - evos: ["gengar"], evoLevel: 25, + evos: ["gengar"], eggGroups: ["Amorphous"], }, gengar: { @@ -1806,7 +1864,7 @@ exports.BattlePokedex = { weightkg: 40.5, color: "Purple", prevo: "haunter", - evoLevel: 25, + evoType: "trade", eggGroups: ["Amorphous"], otherFormes: ["gengarmega"], }, @@ -1935,7 +1993,8 @@ exports.BattlePokedex = { weightkg: 120, color: "Yellow", prevo: "exeggcute", - evoLevel: 1, + evoType: "stone", + evoItem: "Leaf Stone", eggGroups: ["Grass"], otherFormes: ["exeggutoralola"], }, @@ -1952,7 +2011,8 @@ exports.BattlePokedex = { weightkg: 415.6, color: "Yellow", prevo: "exeggcute", - evoLevel: 1, + evoType: "stone", + evoItem: "Leaf Stone", eggGroups: ["Grass"], }, cubone: { @@ -1979,7 +2039,7 @@ exports.BattlePokedex = { prevo: "cubone", evoLevel: 28, eggGroups: ["Monster"], - otherFormes: ["marowakalola"], + otherFormes: ["marowakalola", "marowakalolatotem"], }, marowakalola: { num: 105, @@ -1997,6 +2057,20 @@ exports.BattlePokedex = { evoLevel: 28, eggGroups: ["Monster"], }, + marowakalolatotem: { + num: 105, + species: "Marowak-Alola-Totem", + baseSpecies: "Marowak", + forme: "Alola-Totem", + formeLetter: "T", + types: ["Fire", "Ghost"], + baseStats: {hp: 60, atk: 80, def: 110, spa: 50, spd: 80, spe: 45}, + abilities: {0: "Rock Head"}, + heightm: 1.7, + weightkg: 98, + color: "Purple", + eggGroups: ["Monster"], + }, hitmonlee: { num: 106, species: "Hitmonlee", @@ -2084,8 +2158,8 @@ exports.BattlePokedex = { weightkg: 120, color: "Gray", prevo: "rhyhorn", - evos: ["rhyperior"], evoLevel: 42, + evos: ["rhyperior"], eggGroups: ["Monster", "Field"], }, chansey: { @@ -2099,9 +2173,10 @@ exports.BattlePokedex = { weightkg: 34.6, color: "Pink", prevo: "happiny", + evoType: "levelFriendship", evos: ["blissey"], - evoLevel: 1, eggGroups: ["Fairy"], + canHatch: true, }, tangela: { num: 114, @@ -2165,8 +2240,8 @@ exports.BattlePokedex = { weightkg: 25, color: "Blue", prevo: "horsea", - evos: ["kingdra"], evoLevel: 32, + evos: ["kingdra"], eggGroups: ["Water 1", "Dragon"], }, goldeen: { @@ -2218,7 +2293,8 @@ exports.BattlePokedex = { weightkg: 80, color: "Purple", prevo: "staryu", - evoLevel: 1, + evoType: "stone", + evoItem: "Water Stone", eggGroups: ["Water 3"], }, mrmime: { @@ -2231,9 +2307,10 @@ exports.BattlePokedex = { weightkg: 54.5, color: "Pink", prevo: "mimejr", - evoLevel: 1, + evoType: "levelMove", evoMove: "Mimic", eggGroups: ["Human-Like"], + canHatch: true, }, scyther: { num: 123, @@ -2272,8 +2349,8 @@ exports.BattlePokedex = { weightkg: 30, color: "Yellow", prevo: "elekid", - evos: ["electivire"], evoLevel: 30, + evos: ["electivire"], eggGroups: ["Human-Like"], }, magmar: { @@ -2287,8 +2364,8 @@ exports.BattlePokedex = { weightkg: 44.5, color: "Red", prevo: "magby", - evos: ["magmortar"], evoLevel: 30, + evos: ["magmortar"], eggGroups: ["Human-Like"], }, pinsir: { @@ -2404,6 +2481,22 @@ exports.BattlePokedex = { color: "Brown", evos: ["vaporeon", "jolteon", "flareon", "espeon", "umbreon", "leafeon", "glaceon", "sylveon"], eggGroups: ["Field"], + otherFormes: ["eeveestarter"], + }, + eeveestarter: { + num: 133, + species: "Eevee-Starter", + baseSpecies: "Eevee", + forme: "Starter", + formeLetter: "S", + types: ["Normal"], + genderRatio: {M: 0.875, F: 0.125}, + baseStats: {hp: 65, atk: 75, def: 70, spa: 65, spd: 85, spe: 75}, + abilities: {0: "Run Away", 1: "Adaptability", H: "Anticipation"}, + heightm: 0.3, + weightkg: 6.5, + color: "Brown", + eggGroups: ["Undiscovered"], }, vaporeon: { num: 134, @@ -2416,7 +2509,8 @@ exports.BattlePokedex = { weightkg: 29, color: "Blue", prevo: "eevee", - evoLevel: 1, + evoType: "stone", + evoItem: "Water Stone", eggGroups: ["Field"], }, jolteon: { @@ -2430,7 +2524,8 @@ exports.BattlePokedex = { weightkg: 24.5, color: "Yellow", prevo: "eevee", - evoLevel: 1, + evoType: "stone", + evoItem: "Thunder Stone", eggGroups: ["Field"], }, flareon: { @@ -2444,7 +2539,8 @@ exports.BattlePokedex = { weightkg: 25, color: "Red", prevo: "eevee", - evoLevel: 1, + evoType: "stone", + evoItem: "Fire Stone", eggGroups: ["Field"], }, porygon: { @@ -2553,8 +2649,9 @@ exports.BattlePokedex = { weightkg: 460, color: "Black", prevo: "munchlax", - evoLevel: 1, + evoType: "levelFriendship", eggGroups: ["Monster"], + canHatch: true, }, articuno: { num: 144, @@ -2614,8 +2711,8 @@ exports.BattlePokedex = { weightkg: 16.5, color: "Blue", prevo: "dratini", - evos: ["dragonite"], evoLevel: 30, + evos: ["dragonite"], eggGroups: ["Water 1", "Dragon"], }, dragonite: { @@ -2710,8 +2807,8 @@ exports.BattlePokedex = { weightkg: 15.8, color: "Green", prevo: "chikorita", - evos: ["meganium"], evoLevel: 16, + evos: ["meganium"], eggGroups: ["Monster", "Grass"], }, meganium: { @@ -2752,8 +2849,8 @@ exports.BattlePokedex = { weightkg: 19, color: "Yellow", prevo: "cyndaquil", - evos: ["typhlosion"], evoLevel: 14, + evos: ["typhlosion"], eggGroups: ["Field"], }, typhlosion: { @@ -2794,8 +2891,8 @@ exports.BattlePokedex = { weightkg: 25, color: "Blue", prevo: "totodile", - evos: ["feraligatr"], evoLevel: 18, + evos: ["feraligatr"], eggGroups: ["Monster", "Water 1"], }, feraligatr: { @@ -2922,7 +3019,7 @@ exports.BattlePokedex = { weightkg: 75, color: "Purple", prevo: "golbat", - evoLevel: 23, + evoType: "levelFriendship", eggGroups: ["Flying"], }, chinchou: { @@ -2961,6 +3058,7 @@ exports.BattlePokedex = { color: "Yellow", evos: ["pikachu"], eggGroups: ["Undiscovered"], + canHatch: true, otherFormes: ["pichuspikyeared"], }, pichuspikyeared: { @@ -2989,6 +3087,7 @@ exports.BattlePokedex = { color: "Pink", evos: ["clefairy"], eggGroups: ["Undiscovered"], + canHatch: true, }, igglybuff: { num: 174, @@ -3002,6 +3101,7 @@ exports.BattlePokedex = { color: "Pink", evos: ["jigglypuff"], eggGroups: ["Undiscovered"], + canHatch: true, }, togepi: { num: 175, @@ -3015,6 +3115,7 @@ exports.BattlePokedex = { color: "White", evos: ["togetic"], eggGroups: ["Undiscovered"], + canHatch: true, }, togetic: { num: 176, @@ -3028,7 +3129,7 @@ exports.BattlePokedex = { color: "White", prevo: "togepi", evos: ["togekiss"], - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Flying", "Fairy"], }, natu: { @@ -3078,8 +3179,8 @@ exports.BattlePokedex = { weightkg: 13.3, color: "Pink", prevo: "mareep", - evos: ["ampharos"], evoLevel: 15, + evos: ["ampharos"], eggGroups: ["Monster", "Field"], }, ampharos: { @@ -3120,7 +3221,8 @@ exports.BattlePokedex = { weightkg: 5.8, color: "Green", prevo: "gloom", - evoLevel: 21, + evoType: "stone", + evoItem: "Sun Stone", eggGroups: ["Grass"], }, marill: { @@ -3134,8 +3236,9 @@ exports.BattlePokedex = { color: "Blue", prevo: "azurill", evos: ["azumarill"], - evoLevel: 1, + evoType: "levelFriendship", eggGroups: ["Water 1", "Fairy"], + canHatch: true, }, azumarill: { num: 184, @@ -3160,9 +3263,10 @@ exports.BattlePokedex = { weightkg: 38, color: "Brown", prevo: "bonsly", - evoLevel: 1, + evoType: "levelMove", evoMove: "Mimic", eggGroups: ["Mineral"], + canHatch: true, }, politoed: { num: 186, @@ -3174,7 +3278,7 @@ exports.BattlePokedex = { weightkg: 33.9, color: "Green", prevo: "poliwhirl", - evoLevel: 25, + evoType: "trade", eggGroups: ["Water 1"], }, hoppip: { @@ -3199,8 +3303,8 @@ exports.BattlePokedex = { weightkg: 1, color: "Green", prevo: "hoppip", - evos: ["jumpluff"], evoLevel: 18, + evos: ["jumpluff"], eggGroups: ["Fairy", "Grass"], }, jumpluff: { @@ -3250,7 +3354,8 @@ exports.BattlePokedex = { weightkg: 8.5, color: "Yellow", prevo: "sunkern", - evoLevel: 1, + evoType: "stone", + evoItem: "Sun Stone", eggGroups: ["Grass"], }, yanma: { @@ -3301,7 +3406,8 @@ exports.BattlePokedex = { weightkg: 26.5, color: "Purple", prevo: "eevee", - evoLevel: 2, + evoType: "levelFriendship", + evoCondition: "during the day", eggGroups: ["Field"], }, umbreon: { @@ -3315,7 +3421,8 @@ exports.BattlePokedex = { weightkg: 27, color: "Black", prevo: "eevee", - evoLevel: 2, + evoType: "levelFriendship", + evoCondition: "at night", eggGroups: ["Field"], }, murkrow: { @@ -3340,7 +3447,7 @@ exports.BattlePokedex = { weightkg: 79.5, color: "Pink", prevo: "slowpoke", - evoLevel: 1, + evoType: "trade", eggGroups: ["Monster", "Water 1"], }, misdreavus: { @@ -3451,7 +3558,7 @@ exports.BattlePokedex = { weightkg: 400, color: "Gray", prevo: "onix", - evoLevel: 1, + evoType: "trade", eggGroups: ["Mineral"], otherFormes: ["steelixmega"], }, @@ -3517,7 +3624,7 @@ exports.BattlePokedex = { weightkg: 118, color: "Red", prevo: "scyther", - evoLevel: 1, + evoType: "trade", eggGroups: ["Bug"], otherFormes: ["scizormega"], }, @@ -3656,8 +3763,8 @@ exports.BattlePokedex = { weightkg: 55.8, color: "Brown", prevo: "swinub", - evos: ["mamoswine"], evoLevel: 33, + evos: ["mamoswine"], eggGroups: ["Field"], }, corsola: { @@ -3718,8 +3825,10 @@ exports.BattlePokedex = { weightkg: 220, color: "Purple", prevo: "mantyke", - evoLevel: 1, + evoType: "levelExtra", + evoCondition: "with a Remoraid in party", eggGroups: ["Water 1"], + canHatch: true, }, skarmory: { num: 227, @@ -3782,7 +3891,7 @@ exports.BattlePokedex = { weightkg: 152, color: "Blue", prevo: "seadra", - evoLevel: 32, + evoType: "trade", eggGroups: ["Water 1", "Dragon"], }, phanpy: { @@ -3821,8 +3930,8 @@ exports.BattlePokedex = { weightkg: 32.5, color: "Red", prevo: "porygon", + evoType: "trade", evos: ["porygonz"], - evoLevel: 1, eggGroups: ["Mineral"], }, stantler: { @@ -3846,18 +3955,6 @@ exports.BattlePokedex = { weightkg: 58, color: "White", eggGroups: ["Field"], - otherFormes: ["pokestarsmeargle"], - }, - pokestarsmeargle: { - num: 235, - species: "Pokestar Smeargle", - types: ["Normal"], - baseStats: {hp: 55, atk: 20, def: 35, spa: 20, spd: 45, spe: 75}, - abilities: {0: "Own Tempo", 1: "Technician", H: "Moody"}, - heightm: 1.5, - weightkg: 61, - color: "White", - eggGroups: ["Field"], }, tyrogue: { num: 236, @@ -3871,6 +3968,7 @@ exports.BattlePokedex = { color: "Purple", evos: ["hitmonlee", "hitmonchan", "hitmontop"], eggGroups: ["Undiscovered"], + canHatch: true, }, hitmontop: { num: 237, @@ -3898,6 +3996,7 @@ exports.BattlePokedex = { color: "Pink", evos: ["jynx"], eggGroups: ["Undiscovered"], + canHatch: true, }, elekid: { num: 239, @@ -3911,6 +4010,7 @@ exports.BattlePokedex = { color: "Yellow", evos: ["electabuzz"], eggGroups: ["Undiscovered"], + canHatch: true, }, magby: { num: 240, @@ -3924,6 +4024,7 @@ exports.BattlePokedex = { color: "Red", evos: ["magmar"], eggGroups: ["Undiscovered"], + canHatch: true, }, miltank: { num: 241, @@ -3948,7 +4049,7 @@ exports.BattlePokedex = { weightkg: 46.8, color: "Pink", prevo: "chansey", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Fairy"], }, raikou: { @@ -4009,8 +4110,8 @@ exports.BattlePokedex = { weightkg: 152, color: "Gray", prevo: "larvitar", - evos: ["tyranitar"], evoLevel: 30, + evos: ["tyranitar"], eggGroups: ["Monster"], }, tyranitar: { @@ -4101,8 +4202,8 @@ exports.BattlePokedex = { weightkg: 21.6, color: "Green", prevo: "treecko", - evos: ["sceptile"], evoLevel: 16, + evos: ["sceptile"], eggGroups: ["Monster", "Dragon"], }, sceptile: { @@ -4159,8 +4260,8 @@ exports.BattlePokedex = { weightkg: 19.5, color: "Red", prevo: "torchic", - evos: ["blaziken"], evoLevel: 16, + evos: ["blaziken"], eggGroups: ["Field"], }, blaziken: { @@ -4217,8 +4318,8 @@ exports.BattlePokedex = { weightkg: 28, color: "Blue", prevo: "mudkip", - evos: ["swampert"], evoLevel: 16, + evos: ["swampert"], eggGroups: ["Monster", "Water 1"], }, swampert: { @@ -4323,8 +4424,8 @@ exports.BattlePokedex = { weightkg: 10, color: "White", prevo: "wurmple", - evos: ["beautifly"], evoLevel: 7, + evos: ["beautifly"], eggGroups: ["Bug"], }, beautifly: { @@ -4350,8 +4451,8 @@ exports.BattlePokedex = { weightkg: 11.5, color: "Purple", prevo: "wurmple", - evos: ["dustox"], evoLevel: 7, + evos: ["dustox"], eggGroups: ["Bug"], }, dustox: { @@ -4389,8 +4490,8 @@ exports.BattlePokedex = { weightkg: 32.5, color: "Green", prevo: "lotad", - evos: ["ludicolo"], evoLevel: 14, + evos: ["ludicolo"], eggGroups: ["Water 1", "Grass"], }, ludicolo: { @@ -4403,7 +4504,8 @@ exports.BattlePokedex = { weightkg: 55, color: "Green", prevo: "lombre", - evoLevel: 14, + evoType: "stone", + evoItem: "Water Stone", eggGroups: ["Water 1", "Grass"], }, seedot: { @@ -4428,8 +4530,8 @@ exports.BattlePokedex = { weightkg: 28, color: "Brown", prevo: "seedot", - evos: ["shiftry"], evoLevel: 14, + evos: ["shiftry"], eggGroups: ["Field", "Grass"], }, shiftry: { @@ -4442,7 +4544,8 @@ exports.BattlePokedex = { weightkg: 59.6, color: "Brown", prevo: "nuzleaf", - evoLevel: 14, + evoType: "stone", + evoItem: "Leaf Stone", eggGroups: ["Field", "Grass"], }, taillow: { @@ -4517,8 +4620,8 @@ exports.BattlePokedex = { weightkg: 20.2, color: "White", prevo: "ralts", - evos: ["gardevoir", "gallade"], evoLevel: 20, + evos: ["gardevoir", "gallade"], eggGroups: ["Amorphous"], }, gardevoir: { @@ -4621,8 +4724,8 @@ exports.BattlePokedex = { weightkg: 46.5, color: "White", prevo: "slakoth", - evos: ["slaking"], evoLevel: 18, + evos: ["slaking"], eggGroups: ["Field"], }, slaking: { @@ -4700,8 +4803,8 @@ exports.BattlePokedex = { weightkg: 40.5, color: "Blue", prevo: "whismur", - evos: ["exploud"], evoLevel: 20, + evos: ["exploud"], eggGroups: ["Monster", "Field"], }, exploud: { @@ -4756,6 +4859,7 @@ exports.BattlePokedex = { color: "Blue", evos: ["marill"], eggGroups: ["Undiscovered"], + canHatch: true, }, nosepass: { num: 299, @@ -4793,7 +4897,8 @@ exports.BattlePokedex = { weightkg: 32.6, color: "Purple", prevo: "skitty", - evoLevel: 1, + evoType: "stone", + evoItem: "Moon Stone", eggGroups: ["Field", "Fairy"], }, sableye: { @@ -4870,8 +4975,8 @@ exports.BattlePokedex = { weightkg: 120, color: "Gray", prevo: "aron", - evos: ["aggron"], evoLevel: 32, + evos: ["aggron"], eggGroups: ["Monster"], }, aggron: { @@ -5038,9 +5143,11 @@ exports.BattlePokedex = { weightkg: 2, color: "Green", prevo: "budew", + evoType: "levelFriendship", + evoCondition: "during the day", evos: ["roserade"], - evoLevel: 1, eggGroups: ["Fairy", "Grass"], + canHatch: true, }, gulpin: { num: 316, @@ -5522,7 +5629,7 @@ exports.BattlePokedex = { weightkg: 162, color: "Pink", prevo: "feebas", - evoLevel: 1, + evoType: "trade", eggGroups: ["Water 1", "Dragon"], }, castform: { @@ -5652,8 +5759,8 @@ exports.BattlePokedex = { weightkg: 30.6, color: "Black", prevo: "duskull", - evos: ["dusknoir"], evoLevel: 37, + evos: ["dusknoir"], eggGroups: ["Amorphous"], }, tropius: { @@ -5677,8 +5784,10 @@ exports.BattlePokedex = { weightkg: 1, color: "Blue", prevo: "chingling", - evoLevel: 1, + evoType: "levelFriendship", + evoCondition: "at night", eggGroups: ["Amorphous"], + canHatch: true, }, absol: { num: 359, @@ -5717,6 +5826,7 @@ exports.BattlePokedex = { color: "Blue", evos: ["wobbuffet"], eggGroups: ["Undiscovered"], + canHatch: true, }, snorunt: { num: 361, @@ -5780,8 +5890,8 @@ exports.BattlePokedex = { weightkg: 87.6, color: "Blue", prevo: "spheal", - evos: ["walrein"], evoLevel: 32, + evos: ["walrein"], eggGroups: ["Water 1", "Field"], }, walrein: { @@ -5819,7 +5929,7 @@ exports.BattlePokedex = { weightkg: 27, color: "Blue", prevo: "clamperl", - evoLevel: 1, + evoType: "trade", eggGroups: ["Water 1"], }, gorebyss: { @@ -5832,7 +5942,7 @@ exports.BattlePokedex = { weightkg: 22.6, color: "Pink", prevo: "clamperl", - evoLevel: 1, + evoType: "trade", eggGroups: ["Water 1"], }, relicanth: { @@ -5881,8 +5991,8 @@ exports.BattlePokedex = { weightkg: 110.5, color: "White", prevo: "bagon", - evos: ["salamence"], evoLevel: 30, + evos: ["salamence"], eggGroups: ["Dragon"], }, salamence: { @@ -6242,8 +6352,8 @@ exports.BattlePokedex = { weightkg: 97, color: "Green", prevo: "turtwig", - evos: ["torterra"], evoLevel: 18, + evos: ["torterra"], eggGroups: ["Monster", "Grass"], }, torterra: { @@ -6284,8 +6394,8 @@ exports.BattlePokedex = { weightkg: 22, color: "Brown", prevo: "chimchar", - evos: ["infernape"], evoLevel: 14, + evos: ["infernape"], eggGroups: ["Field", "Human-Like"], }, infernape: { @@ -6326,8 +6436,8 @@ exports.BattlePokedex = { weightkg: 23, color: "Blue", prevo: "piplup", - evos: ["empoleon"], evoLevel: 16, + evos: ["empoleon"], eggGroups: ["Water 1", "Field"], }, empoleon: { @@ -6366,8 +6476,8 @@ exports.BattlePokedex = { weightkg: 15.5, color: "Brown", prevo: "starly", - evos: ["staraptor"], evoLevel: 14, + evos: ["staraptor"], eggGroups: ["Flying"], }, staraptor: { @@ -6455,8 +6565,8 @@ exports.BattlePokedex = { weightkg: 30.5, color: "Blue", prevo: "shinx", - evos: ["luxray"], evoLevel: 15, + evos: ["luxray"], eggGroups: ["Field"], }, luxray: { @@ -6483,6 +6593,7 @@ exports.BattlePokedex = { color: "Green", evos: ["roselia"], eggGroups: ["Undiscovered"], + canHatch: true, }, roserade: { num: 407, @@ -6494,7 +6605,8 @@ exports.BattlePokedex = { weightkg: 14.5, color: "Green", prevo: "roselia", - evoLevel: 1, + evoType: "stone", + evoItem: "Shiny Stone", eggGroups: ["Fairy", "Grass"], }, cranidos: { @@ -6774,7 +6886,7 @@ exports.BattlePokedex = { weightkg: 20.3, color: "Purple", prevo: "aipom", - evoLevel: 2, + evoType: "levelMove", evoMove: "Double Hit", eggGroups: ["Field"], }, @@ -6825,7 +6937,7 @@ exports.BattlePokedex = { weightkg: 33.3, color: "Brown", prevo: "buneary", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Field", "Human-Like"], otherFormes: ["lopunnymega"], }, @@ -6853,7 +6965,8 @@ exports.BattlePokedex = { weightkg: 4.4, color: "Purple", prevo: "misdreavus", - evoLevel: 1, + evoType: "stone", + evoItem: "Dusk Stone", eggGroups: ["Amorphous"], }, honchkrow: { @@ -6866,7 +6979,8 @@ exports.BattlePokedex = { weightkg: 27.3, color: "Black", prevo: "murkrow", - evoLevel: 1, + evoType: "stone", + evoItem: "Dusk Stone", eggGroups: ["Flying"], }, glameow: { @@ -6907,6 +7021,7 @@ exports.BattlePokedex = { color: "Yellow", evos: ["chimecho"], eggGroups: ["Undiscovered"], + canHatch: true, }, stunky: { num: 434, @@ -6971,6 +7086,7 @@ exports.BattlePokedex = { color: "Brown", evos: ["sudowoodo"], eggGroups: ["Undiscovered"], + canHatch: true, }, mimejr: { num: 439, @@ -6983,6 +7099,7 @@ exports.BattlePokedex = { color: "Pink", evos: ["mrmime"], eggGroups: ["Undiscovered"], + canHatch: true, }, happiny: { num: 440, @@ -6996,6 +7113,7 @@ exports.BattlePokedex = { color: "Pink", evos: ["chansey"], eggGroups: ["Undiscovered"], + canHatch: true, }, chatot: { num: 441, @@ -7041,8 +7159,8 @@ exports.BattlePokedex = { weightkg: 56, color: "Blue", prevo: "gible", - evos: ["garchomp"], evoLevel: 24, + evos: ["garchomp"], eggGroups: ["Monster", "Dragon"], }, garchomp: { @@ -7085,6 +7203,7 @@ exports.BattlePokedex = { color: "Black", evos: ["snorlax"], eggGroups: ["Undiscovered"], + canHatch: true, }, riolu: { num: 447, @@ -7098,6 +7217,7 @@ exports.BattlePokedex = { color: "Blue", evos: ["lucario"], eggGroups: ["Undiscovered"], + canHatch: true, }, lucario: { num: 448, @@ -7110,7 +7230,8 @@ exports.BattlePokedex = { weightkg: 54, color: "Blue", prevo: "riolu", - evoLevel: 2, + evoType: "levelFriendship", + evoCondition: "during the day", eggGroups: ["Field", "Human-Like"], otherFormes: ["lucariomega"], }, @@ -7251,6 +7372,7 @@ exports.BattlePokedex = { color: "Blue", evos: ["mantine"], eggGroups: ["Undiscovered"], + canHatch: true, }, snover: { num: 459, @@ -7302,7 +7424,8 @@ exports.BattlePokedex = { weightkg: 34, color: "Black", prevo: "sneasel", - evoLevel: 2, + evoType: "levelHold", + evoItem: "Razor Claw", eggGroups: ["Field"], }, magnezone: { @@ -7316,7 +7439,8 @@ exports.BattlePokedex = { weightkg: 180, color: "Gray", prevo: "magneton", - evoLevel: 31, + evoType: "levelExtra", + evoCondition: "in a special magnetic field", eggGroups: ["Mineral"], }, lickilicky: { @@ -7329,7 +7453,7 @@ exports.BattlePokedex = { weightkg: 140, color: "Pink", prevo: "lickitung", - evoLevel: 2, + evoType: "levelMove", evoMove: "Rollout", eggGroups: ["Monster"], }, @@ -7343,7 +7467,7 @@ exports.BattlePokedex = { weightkg: 282.8, color: "Gray", prevo: "rhydon", - evoLevel: 42, + evoType: "trade", eggGroups: ["Monster", "Field"], }, tangrowth: { @@ -7356,8 +7480,8 @@ exports.BattlePokedex = { weightkg: 128.6, color: "Blue", prevo: "tangela", - evoLevel: 2, - evoMove: "AncientPower", + evoType: "levelMove", + evoMove: "Ancient Power", eggGroups: ["Grass"], }, electivire: { @@ -7371,7 +7495,7 @@ exports.BattlePokedex = { weightkg: 138.6, color: "Yellow", prevo: "electabuzz", - evoLevel: 30, + evoType: "trade", eggGroups: ["Human-Like"], }, magmortar: { @@ -7385,7 +7509,7 @@ exports.BattlePokedex = { weightkg: 68, color: "Red", prevo: "magmar", - evoLevel: 30, + evoType: "trade", eggGroups: ["Human-Like"], }, togekiss: { @@ -7399,7 +7523,8 @@ exports.BattlePokedex = { weightkg: 38, color: "White", prevo: "togetic", - evoLevel: 2, + evoType: "stone", + evoItem: "Shiny Stone", eggGroups: ["Flying", "Fairy"], }, yanmega: { @@ -7412,8 +7537,8 @@ exports.BattlePokedex = { weightkg: 51.5, color: "Green", prevo: "yanma", - evoLevel: 2, - evoMove: "AncientPower", + evoType: "levelMove", + evoMove: "Ancient Power", eggGroups: ["Bug"], }, leafeon: { @@ -7427,7 +7552,8 @@ exports.BattlePokedex = { weightkg: 25.5, color: "Green", prevo: "eevee", - evoLevel: 2, + evoType: "levelExtra", + evoCondition: "near a Moss Rock", eggGroups: ["Field"], }, glaceon: { @@ -7441,7 +7567,8 @@ exports.BattlePokedex = { weightkg: 25.9, color: "Blue", prevo: "eevee", - evoLevel: 2, + evoType: "levelExtra", + evoCondition: "near an Ice Rock", eggGroups: ["Field"], }, gliscor: { @@ -7454,7 +7581,9 @@ exports.BattlePokedex = { weightkg: 42.5, color: "Purple", prevo: "gligar", - evoLevel: 2, + evoType: "levelHold", + evoItem: "Razor Fang", + evoCondition: "at night", eggGroups: ["Bug"], }, mamoswine: { @@ -7467,8 +7596,8 @@ exports.BattlePokedex = { weightkg: 291, color: "Brown", prevo: "piloswine", - evoLevel: 34, - evoMove: "AncientPower", + evoType: "levelMove", + evoMove: "Ancient Power", eggGroups: ["Field"], }, porygonz: { @@ -7482,7 +7611,7 @@ exports.BattlePokedex = { weightkg: 34, color: "Red", prevo: "porygon2", - evoLevel: 1, + evoType: "trade", eggGroups: ["Mineral"], }, gallade: { @@ -7496,7 +7625,8 @@ exports.BattlePokedex = { weightkg: 52, color: "White", prevo: "kirlia", - evoLevel: 20, + evoType: "stone", + evoItem: "Dawn Stone", eggGroups: ["Amorphous"], otherFormes: ["gallademega"], }, @@ -7525,7 +7655,8 @@ exports.BattlePokedex = { weightkg: 340, color: "Gray", prevo: "nosepass", - evoLevel: 2, + evoType: "levelExtra", + evoCondition: "near a special magnetic field", eggGroups: ["Mineral"], }, dusknoir: { @@ -7538,7 +7669,7 @@ exports.BattlePokedex = { weightkg: 106.6, color: "Black", prevo: "dusclops", - evoLevel: 37, + evoType: "trade", eggGroups: ["Amorphous"], }, froslass: { @@ -7552,7 +7683,8 @@ exports.BattlePokedex = { weightkg: 26.6, color: "White", prevo: "snorunt", - evoLevel: 1, + evoType: "stone", + evoItem: "Dawn Stone", eggGroups: ["Fairy", "Mineral"], }, rotom: { @@ -7790,6 +7922,7 @@ exports.BattlePokedex = { weightkg: 1.4, color: "Blue", eggGroups: ["Water 1", "Fairy"], + canHatch: false, }, darkrai: { num: 491, @@ -8137,8 +8270,8 @@ exports.BattlePokedex = { weightkg: 16, color: "Green", prevo: "snivy", - evos: ["serperior"], evoLevel: 17, + evos: ["serperior"], eggGroups: ["Field", "Grass"], }, serperior: { @@ -8179,8 +8312,8 @@ exports.BattlePokedex = { weightkg: 55.5, color: "Red", prevo: "tepig", - evos: ["emboar"], evoLevel: 17, + evos: ["emboar"], eggGroups: ["Field"], }, emboar: { @@ -8221,8 +8354,8 @@ exports.BattlePokedex = { weightkg: 24.5, color: "Blue", prevo: "oshawott", - evos: ["samurott"], evoLevel: 17, + evos: ["samurott"], eggGroups: ["Field"], }, samurott: { @@ -8286,8 +8419,8 @@ exports.BattlePokedex = { weightkg: 14.7, color: "Gray", prevo: "lillipup", - evos: ["stoutland"], evoLevel: 16, + evos: ["stoutland"], eggGroups: ["Field"], }, stoutland: { @@ -8352,7 +8485,8 @@ exports.BattlePokedex = { weightkg: 30.5, color: "Green", prevo: "pansage", - evoLevel: 1, + evoType: "stone", + evoItem: "Leaf Stone", eggGroups: ["Field"], }, pansear: { @@ -8379,7 +8513,8 @@ exports.BattlePokedex = { weightkg: 28, color: "Red", prevo: "pansear", - evoLevel: 1, + evoType: "stone", + evoItem: "Fire Stone", eggGroups: ["Field"], }, panpour: { @@ -8406,7 +8541,8 @@ exports.BattlePokedex = { weightkg: 29, color: "Blue", prevo: "panpour", - evoLevel: 1, + evoType: "stone", + evoItem: "Water Stone", eggGroups: ["Field"], }, munna: { @@ -8431,7 +8567,8 @@ exports.BattlePokedex = { weightkg: 60.5, color: "Pink", prevo: "munna", - evoLevel: 1, + evoType: "stone", + evoItem: "Moon Stone", eggGroups: ["Field"], }, pidove: { @@ -8456,8 +8593,8 @@ exports.BattlePokedex = { weightkg: 15, color: "Gray", prevo: "pidove", - evos: ["unfezant"], evoLevel: 21, + evos: ["unfezant"], eggGroups: ["Flying"], }, unfezant: { @@ -8520,8 +8657,8 @@ exports.BattlePokedex = { weightkg: 102, color: "Blue", prevo: "roggenrola", - evos: ["gigalith"], evoLevel: 25, + evos: ["gigalith"], eggGroups: ["Mineral"], }, gigalith: { @@ -8534,7 +8671,7 @@ exports.BattlePokedex = { weightkg: 260, color: "Blue", prevo: "boldore", - evoLevel: 25, + evoType: "trade", eggGroups: ["Mineral"], }, woobat: { @@ -8559,7 +8696,7 @@ exports.BattlePokedex = { weightkg: 10.5, color: "Blue", prevo: "woobat", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Flying", "Field"], }, drilbur: { @@ -8637,8 +8774,8 @@ exports.BattlePokedex = { weightkg: 40, color: "Gray", prevo: "timburr", - evos: ["conkeldurr"], evoLevel: 25, + evos: ["conkeldurr"], eggGroups: ["Human-Like"], }, conkeldurr: { @@ -8652,7 +8789,7 @@ exports.BattlePokedex = { weightkg: 87, color: "Brown", prevo: "gurdurr", - evoLevel: 25, + evoType: "trade", eggGroups: ["Human-Like"], }, tympole: { @@ -8677,8 +8814,8 @@ exports.BattlePokedex = { weightkg: 17, color: "Blue", prevo: "tympole", - evos: ["seismitoad"], evoLevel: 25, + evos: ["seismitoad"], eggGroups: ["Water 1"], }, seismitoad: { @@ -8740,8 +8877,8 @@ exports.BattlePokedex = { weightkg: 7.3, color: "Green", prevo: "sewaddle", - evos: ["leavanny"], evoLevel: 20, + evos: ["leavanny"], eggGroups: ["Bug"], }, leavanny: { @@ -8754,7 +8891,7 @@ exports.BattlePokedex = { weightkg: 20.5, color: "Yellow", prevo: "swadloon", - evoLevel: 21, + evoType: "levelFriendship", eggGroups: ["Bug"], }, venipede: { @@ -8779,8 +8916,8 @@ exports.BattlePokedex = { weightkg: 58.5, color: "Gray", prevo: "venipede", - evos: ["scolipede"], evoLevel: 22, + evos: ["scolipede"], eggGroups: ["Bug"], }, scolipede: { @@ -8818,7 +8955,8 @@ exports.BattlePokedex = { weightkg: 6.6, color: "Green", prevo: "cottonee", - evoLevel: 1, + evoType: "stone", + evoItem: "Sun Stone", eggGroups: ["Fairy", "Grass"], }, petilil: { @@ -8845,7 +8983,8 @@ exports.BattlePokedex = { weightkg: 16.3, color: "Green", prevo: "petilil", - evoLevel: 1, + evoType: "stone", + evoItem: "Sun Stone", eggGroups: ["Grass"], }, basculin: { @@ -8897,8 +9036,8 @@ exports.BattlePokedex = { weightkg: 33.4, color: "Brown", prevo: "sandile", - evos: ["krookodile"], evoLevel: 29, + evos: ["krookodile"], eggGroups: ["Field"], }, krookodile: { @@ -9184,7 +9323,8 @@ exports.BattlePokedex = { weightkg: 7.5, color: "Gray", prevo: "minccino", - evoLevel: 1, + evoType: "stone", + evoItem: "Shiny Stone", eggGroups: ["Field"], }, gothita: { @@ -9211,8 +9351,8 @@ exports.BattlePokedex = { weightkg: 18, color: "Purple", prevo: "gothita", - evos: ["gothitelle"], evoLevel: 32, + evos: ["gothitelle"], eggGroups: ["Human-Like"], }, gothitelle: { @@ -9251,8 +9391,8 @@ exports.BattlePokedex = { weightkg: 8, color: "Green", prevo: "solosis", - evos: ["reuniclus"], evoLevel: 32, + evos: ["reuniclus"], eggGroups: ["Amorphous"], }, reuniclus: { @@ -9315,8 +9455,8 @@ exports.BattlePokedex = { weightkg: 41, color: "White", prevo: "vanillite", - evos: ["vanilluxe"], evoLevel: 35, + evos: ["vanilluxe"], eggGroups: ["Mineral"], }, vanilluxe: { @@ -9394,7 +9534,7 @@ exports.BattlePokedex = { weightkg: 33, color: "Gray", prevo: "karrablast", - evoLevel: 1, + evoType: "trade", eggGroups: ["Bug"], }, foongus: { @@ -9532,8 +9672,8 @@ exports.BattlePokedex = { weightkg: 51, color: "Gray", prevo: "klink", - evos: ["klinklang"], evoLevel: 38, + evos: ["klinklang"], eggGroups: ["Mineral"], }, klinklang: { @@ -9572,8 +9712,8 @@ exports.BattlePokedex = { weightkg: 22, color: "Blue", prevo: "tynamo", - evos: ["eelektross"], evoLevel: 39, + evos: ["eelektross"], eggGroups: ["Amorphous"], }, eelektross: { @@ -9586,7 +9726,8 @@ exports.BattlePokedex = { weightkg: 80.5, color: "Blue", prevo: "eelektrik", - evoLevel: 39, + evoType: "stone", + evoItem: "Thunder Stone", eggGroups: ["Amorphous"], }, elgyem: { @@ -9636,8 +9777,8 @@ exports.BattlePokedex = { weightkg: 13, color: "Black", prevo: "litwick", - evos: ["chandelure"], evoLevel: 41, + evos: ["chandelure"], eggGroups: ["Amorphous"], }, chandelure: { @@ -9650,7 +9791,8 @@ exports.BattlePokedex = { weightkg: 34.3, color: "Black", prevo: "lampent", - evoLevel: 41, + evoType: "stone", + evoItem: "Dusk Stone", eggGroups: ["Amorphous"], }, axew: { @@ -9675,8 +9817,8 @@ exports.BattlePokedex = { weightkg: 36, color: "Green", prevo: "axew", - evos: ["haxorus"], evoLevel: 38, + evos: ["haxorus"], eggGroups: ["Monster", "Dragon"], }, haxorus: { @@ -9751,7 +9893,7 @@ exports.BattlePokedex = { weightkg: 25.3, color: "Red", prevo: "shelmet", - evoLevel: 1, + evoType: "trade", eggGroups: ["Bug"], }, stunfisk: { @@ -9962,8 +10104,8 @@ exports.BattlePokedex = { weightkg: 50, color: "Blue", prevo: "deino", - evos: ["hydreigon"], evoLevel: 50, + evos: ["hydreigon"], eggGroups: ["Dragon"], }, hydreigon: { @@ -10349,8 +10491,8 @@ exports.BattlePokedex = { weightkg: 29, color: "Green", prevo: "chespin", - evos: ["chesnaught"], evoLevel: 16, + evos: ["chesnaught"], eggGroups: ["Field"], }, chesnaught: { @@ -10391,8 +10533,8 @@ exports.BattlePokedex = { weightkg: 14.5, color: "Red", prevo: "fennekin", - evos: ["delphox"], evoLevel: 16, + evos: ["delphox"], eggGroups: ["Field"], }, delphox: { @@ -10433,8 +10575,8 @@ exports.BattlePokedex = { weightkg: 10.9, color: "Blue", prevo: "froakie", - evos: ["greninja"], evoLevel: 16, + evos: ["greninja"], eggGroups: ["Water 1"], }, greninja: { @@ -10514,8 +10656,8 @@ exports.BattlePokedex = { weightkg: 16, color: "Red", prevo: "fletchling", - evos: ["talonflame"], evoLevel: 17, + evos: ["talonflame"], eggGroups: ["Flying"], }, talonflame: { @@ -10553,8 +10695,8 @@ exports.BattlePokedex = { weightkg: 8.4, color: "Black", prevo: "scatterbug", - evos: ["vivillon"], evoLevel: 9, + evos: ["vivillon"], eggGroups: ["Bug"], }, vivillon: { @@ -10629,7 +10771,7 @@ exports.BattlePokedex = { }, flabebe: { num: 669, - species: "Flabebe", + species: "Flabe\u0301be\u0301", baseForme: "Red", types: ["Fairy"], gender: "F", @@ -10654,8 +10796,8 @@ exports.BattlePokedex = { weightkg: 0.9, color: "White", prevo: "flabebe", - evos: ["florges"], evoLevel: 19, + evos: ["florges"], eggGroups: ["Fairy"], otherForms: ["floetteblue", "floetteorange", "floettewhite", "floetteyellow"], otherFormes: ["floetteeternal"], @@ -10687,7 +10829,8 @@ exports.BattlePokedex = { weightkg: 10, color: "White", prevo: "floette", - evoLevel: 19, + evoType: "stone", + evoItem: "Shiny Stone", eggGroups: ["Fairy"], otherForms: ["florgesblue", "florgesorange", "florgeswhite", "florgesyellow"], }, @@ -10751,6 +10894,7 @@ exports.BattlePokedex = { weightkg: 28, color: "White", eggGroups: ["Field"], + otherForms: ["furfroudandy", "furfroudebutante", "furfroudiamond", "furfrouheart", "furfroukabuki", "furfroulareine", "furfroumatron", "furfroupharaoh", "furfroustar"], }, espurr: { num: 677, @@ -10819,8 +10963,8 @@ exports.BattlePokedex = { weightkg: 4.5, color: "Brown", prevo: "honedge", - evos: ["aegislash"], evoLevel: 35, + evos: ["aegislash"], eggGroups: ["Mineral"], }, aegislash: { @@ -10834,7 +10978,8 @@ exports.BattlePokedex = { weightkg: 53, color: "Brown", prevo: "doublade", - evoLevel: 35, + evoType: "stone", + evoItem: "Dusk Stone", eggGroups: ["Mineral"], otherFormes: ["aegislashblade"], }, @@ -10851,7 +10996,8 @@ exports.BattlePokedex = { weightkg: 53, color: "Brown", prevo: "doublade", - evoLevel: 35, + evoType: "stone", + evoItem: "Dusk Stone", eggGroups: ["Mineral"], }, spritzee: { @@ -10876,7 +11022,7 @@ exports.BattlePokedex = { weightkg: 15.5, color: "Pink", prevo: "spritzee", - evoLevel: 1, + evoType: "trade", eggGroups: ["Fairy"], }, swirlix: { @@ -10901,7 +11047,7 @@ exports.BattlePokedex = { weightkg: 5, color: "White", prevo: "swirlix", - evoLevel: 1, + evoType: "trade", eggGroups: ["Fairy"], }, inkay: { @@ -11026,7 +11172,8 @@ exports.BattlePokedex = { weightkg: 21, color: "Yellow", prevo: "helioptile", - evoLevel: 1, + evoType: "stone", + evoItem: "Sun Stone", eggGroups: ["Monster", "Dragon"], }, tyrunt: { @@ -11094,7 +11241,8 @@ exports.BattlePokedex = { weightkg: 23.5, color: "Pink", prevo: "eevee", - evoLevel: 2, + evoType: "levelExtra", + evoCondition: "with a Fairy-type move and two levels of Affection", eggGroups: ["Field"], }, hawlucha: { @@ -11153,8 +11301,8 @@ exports.BattlePokedex = { weightkg: 17.5, color: "Purple", prevo: "goomy", - evos: ["goodra"], evoLevel: 40, + evos: ["goodra"], eggGroups: ["Dragon"], }, goodra: { @@ -11203,7 +11351,7 @@ exports.BattlePokedex = { weightkg: 71, color: "Brown", prevo: "phantump", - evoLevel: 1, + evoType: "trade", eggGroups: ["Grass", "Amorphous"], }, pumpkaboo: { @@ -11276,7 +11424,7 @@ exports.BattlePokedex = { weightkg: 12.5, color: "Brown", prevo: "pumpkaboo", - evoLevel: 1, + evoType: "trade", eggGroups: ["Amorphous"], otherFormes: ["gourgeistsmall", "gourgeistlarge", "gourgeistsuper"], }, @@ -11293,7 +11441,7 @@ exports.BattlePokedex = { weightkg: 9.5, color: "Brown", prevo: "pumpkaboosmall", - evoLevel: 1, + evoType: "trade", eggGroups: ["Amorphous"], }, gourgeistlarge: { @@ -11309,7 +11457,7 @@ exports.BattlePokedex = { weightkg: 14, color: "Brown", prevo: "pumpkaboolarge", - evoLevel: 1, + evoType: "trade", eggGroups: ["Amorphous"], }, gourgeistsuper: { @@ -11325,7 +11473,7 @@ exports.BattlePokedex = { weightkg: 39, color: "Brown", prevo: "pumpkaboosuper", - evoLevel: 1, + evoType: "trade", eggGroups: ["Amorphous"], }, bergmite: { @@ -11409,7 +11557,7 @@ exports.BattlePokedex = { types: ["Dragon", "Ground"], gender: "N", baseStats: {hp: 108, atk: 100, def: 121, spa: 81, spd: 95, spe: 95}, - abilities: {0: "Aura Break", H: "Power Construct"}, + abilities: {0: "Aura Break", S: "Power Construct"}, heightm: 5, weightkg: 305, color: "Green", @@ -11425,7 +11573,7 @@ exports.BattlePokedex = { types: ["Dragon", "Ground"], gender: "N", baseStats: {hp: 54, atk: 100, def: 71, spa: 61, spd: 85, spe: 115}, - abilities: {0: "Aura Break", H: "Power Construct"}, + abilities: {0: "Aura Break", S: "Power Construct"}, heightm: 1.2, weightkg: 33.5, color: "Green", @@ -11539,8 +11687,8 @@ exports.BattlePokedex = { weightkg: 16, color: "Brown", prevo: "rowlet", - evos: ["decidueye"], evoLevel: 17, + evos: ["decidueye"], eggGroups: ["Flying"], }, decidueye: { @@ -11581,8 +11729,8 @@ exports.BattlePokedex = { weightkg: 25, color: "Red", prevo: "litten", - evos: ["incineroar"], evoLevel: 17, + evos: ["incineroar"], eggGroups: ["Field"], }, incineroar: { @@ -11623,8 +11771,8 @@ exports.BattlePokedex = { weightkg: 17.5, color: "Blue", prevo: "popplio", - evos: ["primarina"], evoLevel: 17, + evos: ["primarina"], eggGroups: ["Water 1", "Field"], }, primarina: { @@ -11663,8 +11811,8 @@ exports.BattlePokedex = { weightkg: 14.8, color: "Black", prevo: "pikipek", - evos: ["toucannon"], evoLevel: 14, + evos: ["toucannon"], eggGroups: ["Flying"], }, toucannon: { @@ -11704,6 +11852,21 @@ exports.BattlePokedex = { prevo: "yungoos", evoLevel: 20, eggGroups: ["Field"], + otherFormes: ["gumshoostotem"], + }, + gumshoostotem: { + num: 735, + species: "Gumshoos-Totem", + baseSpecies: "Gumshoos", + forme: "Totem", + formeLetter: "T", + types: ["Normal"], + baseStats: {hp: 88, atk: 110, def: 60, spa: 55, spd: 60, spe: 45}, + abilities: {0: "Adaptability"}, + heightm: 1.4, + weightkg: 60, + color: "Brown", + eggGroups: ["Field"], }, grubbin: { num: 736, @@ -11727,8 +11890,8 @@ exports.BattlePokedex = { weightkg: 10.5, color: "Green", prevo: "grubbin", - evos: ["vikavolt"], evoLevel: 20, + evos: ["vikavolt"], eggGroups: ["Bug"], }, vikavolt: { @@ -11741,7 +11904,23 @@ exports.BattlePokedex = { weightkg: 45, color: "Blue", prevo: "charjabug", - evoLevel: 21, + evoType: "levelExtra", + evoCondition: "near a special magnetic field", + eggGroups: ["Bug"], + otherFormes: ["vikavolttotem"], + }, + vikavolttotem: { + num: 738, + species: "Vikavolt-Totem", + baseSpecies: "Vikavolt", + forme: "Totem", + formeLetter: "T", + types: ["Bug", "Electric"], + baseStats: {hp: 77, atk: 70, def: 90, spa: 145, spd: 75, spe: 43}, + abilities: {0: "Levitate"}, + heightm: 2.6, + weightkg: 147.5, + color: "Blue", eggGroups: ["Bug"], }, crabrawler: { @@ -11766,7 +11945,8 @@ exports.BattlePokedex = { weightkg: 180, color: "White", prevo: "crabrawler", - evoLevel: 2, + evoType: "levelExtra", + evoCondition: "at Mount Lanakila", eggGroups: ["Water 3"], }, oricorio: { @@ -11852,17 +12032,33 @@ exports.BattlePokedex = { prevo: "cutiefly", evoLevel: 25, eggGroups: ["Bug", "Fairy"], + otherFormes: ["ribombeetotem"], + }, + ribombeetotem: { + num: 743, + species: "Ribombee-Totem", + baseSpecies: "Ribombee", + forme: "Totem", + formeLetter: "T", + types: ["Bug", "Fairy"], + baseStats: {hp: 60, atk: 55, def: 60, spa: 95, spd: 70, spe: 124}, + abilities: {0: "Sweet Veil"}, + heightm: 0.4, + weightkg: 2, + color: "Yellow", + eggGroups: ["Bug", "Fairy"], }, rockruff: { num: 744, species: "Rockruff", + baseForme: "Midday", types: ["Rock"], baseStats: {hp: 45, atk: 65, def: 40, spa: 30, spd: 40, spe: 60}, - abilities: {0: "Keen Eye", 1: "Vital Spirit", H: "Steadfast"}, + abilities: {0: "Keen Eye", 1: "Vital Spirit", H: "Steadfast", S: "Own Tempo"}, heightm: 0.5, weightkg: 9.2, color: "Brown", - evos: ["lycanroc", "lycanrocmidnight"], + evos: ["lycanroc", "lycanrocmidnight", "lycanrocdusk"], eggGroups: ["Field"], }, lycanroc: { @@ -11878,7 +12074,7 @@ exports.BattlePokedex = { prevo: "rockruff", evoLevel: 25, eggGroups: ["Field"], - otherFormes: ["lycanrocmidnight"], + otherFormes: ["lycanrocmidnight", "lycanrocdusk"], }, lycanrocmidnight: { num: 745, @@ -11896,6 +12092,22 @@ exports.BattlePokedex = { evoLevel: 25, eggGroups: ["Field"], }, + lycanrocdusk: { + num: 745, + species: "Lycanroc-Dusk", + baseSpecies: "Lycanroc", + forme: "Dusk", + formeLetter: "D", + types: ["Rock"], + baseStats: {hp: 75, atk: 117, def: 65, spa: 55, spd: 65, spe: 110}, + abilities: {0: "Tough Claws"}, + heightm: 0.8, + weightkg: 25, + color: "Brown", + prevo: "rockruff", + evoLevel: 25, + eggGroups: ["Field"], + }, wishiwashi: { num: 746, species: "Wishiwashi", @@ -11997,6 +12209,21 @@ exports.BattlePokedex = { prevo: "dewpider", evoLevel: 22, eggGroups: ["Water 1", "Bug"], + otherFormes: ["araquanidtotem"], + }, + araquanidtotem: { + num: 752, + species: "Araquanid-Totem", + baseSpecies: "Araquanid", + forme: "Totem", + formeLetter: "T", + types: ["Water", "Bug"], + baseStats: {hp: 68, atk: 70, def: 92, spa: 50, spd: 132, spe: 42}, + abilities: {0: "Water Bubble"}, + heightm: 3.1, + weightkg: 217.5, + color: "Green", + eggGroups: ["Water 1", "Bug"], }, fomantis: { num: 753, @@ -12022,6 +12249,21 @@ exports.BattlePokedex = { prevo: "fomantis", evoLevel: 34, eggGroups: ["Grass"], + otherFormes: ["lurantistotem"], + }, + lurantistotem: { + num: 754, + species: "Lurantis-Totem", + baseSpecies: "Lurantis", + forme: "Totem", + formeLetter: "T", + types: ["Grass"], + baseStats: {hp: 70, atk: 105, def: 90, spa: 80, spd: 90, spe: 45}, + abilities: {0: "Leaf Guard"}, + heightm: 1.5, + weightkg: 58, + color: "Pink", + eggGroups: ["Grass"], }, morelull: { num: 755, @@ -12074,6 +12316,22 @@ exports.BattlePokedex = { prevo: "salandit", evoLevel: 33, eggGroups: ["Monster", "Dragon"], + otherFormes: ["salazzletotem"], + }, + salazzletotem: { + num: 758, + species: "Salazzle-Totem", + baseSpecies: "Salazzle", + forme: "Totem", + formeLetter: "T", + types: ["Poison", "Fire"], + gender: "F", + baseStats: {hp: 68, atk: 64, def: 60, spa: 111, spd: 60, spe: 117}, + abilities: {0: "Corrosion"}, + heightm: 2.1, + weightkg: 81, + color: "Black", + eggGroups: ["Monster", "Dragon"], }, stufful: { num: 759, @@ -12124,8 +12382,8 @@ exports.BattlePokedex = { weightkg: 8.2, color: "Purple", prevo: "bounsweet", - evos: ["tsareena"], evoLevel: 18, + evos: ["tsareena"], eggGroups: ["Grass"], }, tsareena: { @@ -12139,7 +12397,8 @@ exports.BattlePokedex = { weightkg: 21.4, color: "Purple", prevo: "steenee", - evoLevel: 29, + evoType: "levelMove", + evoMove: "Stomp", eggGroups: ["Grass"], }, comfey: { @@ -12261,7 +12520,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 41, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], otherFormes: ["silvallybug", "silvallydark", "silvallydragon", "silvallyelectric", "silvallyfairy", "silvallyfighting", "silvallyfire", "silvallyflying", "silvallyghost", "silvallygrass", "silvallyground", "silvallyice", "silvallypoison", "silvallypsychic", "silvallyrock", "silvallysteel", "silvallywater"], }, @@ -12279,7 +12538,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallydark: { @@ -12296,7 +12555,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallydragon: { @@ -12313,7 +12572,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyelectric: { @@ -12330,7 +12589,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyfairy: { @@ -12347,7 +12606,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyfighting: { @@ -12364,7 +12623,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyfire: { @@ -12381,7 +12640,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyflying: { @@ -12398,7 +12657,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyghost: { @@ -12415,7 +12674,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallygrass: { @@ -12432,7 +12691,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyground: { @@ -12449,7 +12708,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyice: { @@ -12466,7 +12725,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallypoison: { @@ -12483,7 +12742,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallypsychic: { @@ -12500,7 +12759,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallyrock: { @@ -12517,7 +12776,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallysteel: { @@ -12534,7 +12793,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, silvallywater: { @@ -12551,7 +12810,7 @@ exports.BattlePokedex = { weightkg: 100.5, color: "Gray", prevo: "typenull", - evoLevel: 2, + evoType: "levelFriendship", eggGroups: ["Undiscovered"], }, minior: { @@ -12616,6 +12875,21 @@ exports.BattlePokedex = { weightkg: 3.3, color: "Gray", eggGroups: ["Field", "Fairy"], + otherFormes: ["togedemarutotem"], + }, + togedemarutotem: { + num: 777, + species: "Togedemaru-Totem", + baseSpecies: "Togedemaru", + forme: "Totem", + formeLetter: "T", + types: ["Electric", "Steel"], + baseStats: {hp: 65, atk: 98, def: 63, spa: 40, spd: 73, spe: 96}, + abilities: {0: "Sturdy"}, + heightm: 0.6, + weightkg: 13, + color: "Gray", + eggGroups: ["Field", "Fairy"], }, mimikyu: { num: 778, @@ -12627,7 +12901,7 @@ exports.BattlePokedex = { weightkg: 0.7, color: "Yellow", eggGroups: ["Amorphous"], - otherFormes: ["mimikyubusted"], + otherFormes: ["mimikyubusted", "mimikyutotem", "mimikyubustedtotem"], }, mimikyubusted: { num: 778, @@ -12643,6 +12917,34 @@ exports.BattlePokedex = { color: "Yellow", eggGroups: ["Amorphous"], }, + mimikyutotem: { + num: 778, + species: "Mimikyu-Totem", + baseSpecies: "Mimikyu", + forme: "Totem", + formeLetter: "T", + types: ["Ghost", "Fairy"], + baseStats: {hp: 55, atk: 90, def: 80, spa: 50, spd: 105, spe: 96}, + abilities: {0: "Disguise"}, + heightm: 0.4, + weightkg: 2.8, + color: "Yellow", + eggGroups: ["Amorphous"], + }, + mimikyubustedtotem: { + num: 778, + species: "Mimikyu-Busted-Totem", + baseSpecies: "Mimikyu", + forme: "Busted-Totem", + formeLetter: "T", + types: ["Ghost", "Fairy"], + baseStats: {hp: 55, atk: 90, def: 80, spa: 50, spd: 105, spe: 96}, + abilities: {0: "Disguise"}, + heightm: 0.4, + weightkg: 2.8, + color: "Yellow", + eggGroups: ["Amorphous"], + }, bruxish: { num: 779, species: "Bruxish", @@ -12699,8 +13001,8 @@ exports.BattlePokedex = { weightkg: 47, color: "Gray", prevo: "jangmoo", - evos: ["kommoo"], evoLevel: 35, + evos: ["kommoo"], eggGroups: ["Dragon"], }, kommoo: { @@ -12715,6 +13017,21 @@ exports.BattlePokedex = { prevo: "hakamoo", evoLevel: 45, eggGroups: ["Dragon"], + otherFormes: ["kommoototem"], + }, + kommoototem: { + num: 784, + species: "Kommo-o-Totem", + baseSpecies: "Kommo-o", + forme: "Totem", + formeLetter: "T", + types: ["Dragon", "Fighting"], + baseStats: {hp: 75, atk: 110, def: 125, spa: 100, spd: 105, spe: 85}, + abilities: {0: "Overcoat"}, + heightm: 2.4, + weightkg: 207.5, + color: "Gray", + eggGroups: ["Dragon"], }, tapukoko: { num: 785, @@ -12788,8 +13105,8 @@ exports.BattlePokedex = { weightkg: 999.9, color: "Blue", prevo: "cosmog", - evos: ["solgaleo", "lunala"], evoLevel: 43, + evos: ["solgaleo", "lunala"], eggGroups: ["Undiscovered"], }, solgaleo: { @@ -12915,6 +13232,52 @@ exports.BattlePokedex = { weightkg: 230, color: "Black", eggGroups: ["Undiscovered"], + otherFormes: ["necrozmaduskmane", "necrozmadawnwings", "necrozmaultra"], + }, + necrozmaduskmane: { + num: 800, + species: "Necrozma-Dusk-Mane", + baseSpecies: "Necrozma", + forme: "Dusk-Mane", + formeLetter: "D", + types: ["Psychic", "Steel"], + gender: "N", + baseStats: {hp: 97, atk: 157, def: 127, spa: 113, spd: 109, spe: 77}, + abilities: {0: "Prism Armor"}, + heightm: 3.8, + weightkg: 460, + color: "Yellow", + eggGroups: ["Undiscovered"], + }, + necrozmadawnwings: { + num: 800, + species: "Necrozma-Dawn-Wings", + baseSpecies: "Necrozma", + forme: "Dawn-Wings", + formeLetter: "D", + types: ["Psychic", "Ghost"], + gender: "N", + baseStats: {hp: 97, atk: 113, def: 109, spa: 157, spd: 127, spe: 77}, + abilities: {0: "Prism Armor"}, + heightm: 4.2, + weightkg: 350, + color: "Blue", + eggGroups: ["Undiscovered"], + }, + necrozmaultra: { + num: 800, + species: "Necrozma-Ultra", + baseSpecies: "Necrozma", + forme: "Ultra", + formeLetter: "U", + types: ["Psychic", "Dragon"], + gender: "N", + baseStats: {hp: 97, atk: 167, def: 97, spa: 167, spd: 97, spe: 129}, + abilities: {0: "Neuroforce"}, + heightm: 7.5, + weightkg: 230, + color: "Blue", + eggGroups: ["Undiscovered"], }, magearna: { num: 801, @@ -12956,6 +13319,96 @@ exports.BattlePokedex = { color: "Gray", eggGroups: ["Undiscovered"], }, + poipole: { + num: 803, + species: "Poipole", + types: ["Poison"], + gender: "N", + baseStats: {hp: 67, atk: 73, def: 67, spa: 73, spd: 67, spe: 73}, + abilities: {0: "Beast Boost"}, + heightm: 0.6, + weightkg: 1.8, + color: "Purple", + evos: ["naganadel"], + eggGroups: ["Undiscovered"], + }, + naganadel: { + num: 804, + species: "Naganadel", + types: ["Poison", "Dragon"], + gender: "N", + baseStats: {hp: 73, atk: 73, def: 73, spa: 127, spd: 73, spe: 121}, + abilities: {0: "Beast Boost"}, + heightm: 3.6, + weightkg: 150, + color: "Purple", + prevo: "poipole", + evoType: "levelMove", + evoMove: "Dragon Pulse", + eggGroups: ["Undiscovered"], + }, + stakataka: { + num: 805, + species: "Stakataka", + types: ["Rock", "Steel"], + gender: "N", + baseStats: {hp: 61, atk: 131, def: 211, spa: 53, spd: 101, spe: 13}, + abilities: {0: "Beast Boost"}, + heightm: 5.5, + weightkg: 820, + color: "Gray", + eggGroups: ["Undiscovered"], + }, + blacephalon: { + num: 806, + species: "Blacephalon", + types: ["Fire", "Ghost"], + gender: "N", + baseStats: {hp: 53, atk: 127, def: 53, spa: 151, spd: 79, spe: 107}, + abilities: {0: "Beast Boost"}, + heightm: 1.8, + weightkg: 13, + color: "White", + eggGroups: ["Undiscovered"], + }, + zeraora: { + num: 807, + species: "Zeraora", + types: ["Electric"], + gender: "N", + baseStats: {hp: 88, atk: 112, def: 75, spa: 102, spd: 80, spe: 143}, + abilities: {0: "Volt Absorb"}, + heightm: 1.5, + weightkg: 44.5, + color: "Yellow", + eggGroups: ["Undiscovered"], + }, + meltan: { + num: 808, + species: "Meltan", + types: ["Steel"], + gender: "N", + baseStats: {hp: 46, atk: 65, def: 65, spa: 55, spd: 35, spe: 34}, + abilities: {0: "Magnet Pull"}, + heightm: 0.2, + weightkg: 8, + color: "Gray", + evos: ["melmetal"], + eggGroups: ["Undiscovered"], + }, + melmetal: { + num: 809, + species: "Melmetal", + types: ["Steel"], + gender: "N", + baseStats: {hp: 135, atk: 143, def: 143, spa: 80, spd: 65, spe: 34}, + abilities: {0: "Iron Fist"}, + heightm: 2.5, + weightkg: 800, + color: "Gray", + prevo: "meltan", + eggGroups: ["Undiscovered"], + }, missingno: { num: 0, species: "Missingno.", @@ -12967,50 +13420,184 @@ exports.BattlePokedex = { color: "Gray", eggGroups: ["Undiscovered"], }, - tomohawk: { + syclant: { num: -1, - species: "Tomohawk", - types: ["Flying", "Fighting"], - baseStats: {hp: 105, atk: 60, def: 90, spa: 115, spd: 80, spe: 85}, - abilities: {0: "Intimidate", 1: "Prankster", H: "Justified"}, - heightm: 1.27, - weightkg: 37.2, - color: "Red", - prevo: "scratchet", - evoLevel: 23, - eggGroups: ["Field", "Flying"], + species: "Syclant", + types: ["Ice", "Bug"], + baseStats: {hp: 70, atk: 116, def: 70, spa: 114, spd: 64, spe: 121}, + abilities: {0: "Compound Eyes", 1: "Mountaineer", H: "Ice Body"}, + heightm: 1.7, + weightkg: 52, + color: "Blue", + prevo: "syclar", + evoLevel: 30, + eggGroups: ["Bug"], }, - necturna: { + revenankh: { num: -2, - species: "Necturna", - types: ["Grass", "Ghost"], - gender: "F", - baseStats: {hp: 64, atk: 120, def: 100, spa: 85, spd: 120, spe: 81}, - abilities: {0: "Forewarn", H: "Telepathy"}, - heightm: 1.65, - weightkg: 49.6, - color: "Black", - prevo: "necturine", - evoLevel: 31, - eggGroups: ["Grass", "Field"], + species: "Revenankh", + types: ["Ghost", "Fighting"], + baseStats: {hp: 90, atk: 105, def: 90, spa: 65, spd: 110, spe: 65}, + abilities: {0: "Shed Skin", 1: "Air Lock", H: "Triage"}, + heightm: 1.8, + weightkg: 44, + color: "White", + eggGroups: ["Amorphous", "Human-Like"], }, - mollux: { + pyroak: { num: -3, - species: "Mollux", - types: ["Fire", "Poison"], - baseStats: {hp: 95, atk: 45, def: 83, spa: 131, spd: 105, spe: 76}, - abilities: {0: "Dry Skin", H: "Illuminate"}, - heightm: 1.2, - weightkg: 41, - color: "Pink", - eggGroups: ["Fairy", "Field"], - }, - aurumoth: { - num: -4, - species: "Aurumoth", - types: ["Bug", "Psychic"], - baseStats: {hp: 110, atk: 120, def: 99, spa: 117, spd: 60, spe: 94}, - abilities: {0: "Weak Armor", 1: "No Guard", H: "Light Metal"}, + species: "Pyroak", + types: ["Fire", "Grass"], + baseStats: {hp: 120, atk: 70, def: 105, spa: 95, spd: 90, spe: 60}, + abilities: {0: "Rock Head", 1: "Battle Armor", H: "White Smoke"}, + heightm: 2.1, + weightkg: 168, + color: "Brown", + prevo: "flarelm", + evoLevel: 38, + eggGroups: ["Monster", "Dragon"], + }, + fidgit: { + num: -4, + species: "Fidgit", + types: ["Poison", "Ground"], + baseStats: {hp: 95, atk: 76, def: 109, spa: 90, spd: 80, spe: 105}, + abilities: {0: "Persistent", 1: "Vital Spirit", H: "Frisk"}, + heightm: 0.9, + weightkg: 53, + color: "Purple", + prevo: "breezi", + evoLevel: 33, + eggGroups: ["Field"], + }, + stratagem: { + num: -5, + species: "Stratagem", + types: ["Rock"], + gender: "N", + baseStats: {hp: 90, atk: 60, def: 65, spa: 120, spd: 70, spe: 130}, + abilities: {0: "Levitate", 1: "Technician", H: "Sniper"}, + heightm: 0.9, + weightkg: 45, + color: "Gray", + prevo: "tactite", + evoType: "trade", + eggGroups: ["Undiscovered"], + }, + arghonaut: { + num: -6, + species: "Arghonaut", + types: ["Water", "Fighting"], + baseStats: {hp: 105, atk: 110, def: 95, spa: 70, spd: 100, spe: 75}, + abilities: {0: "Unaware", H: "Technician"}, + heightm: 1.7, + weightkg: 151, + color: "Green", + prevo: "privatyke", + evoLevel: 37, + eggGroups: ["Water 1", "Water 3"], + }, + kitsunoh: { + num: -7, + species: "Kitsunoh", + types: ["Steel", "Ghost"], + baseStats: {hp: 80, atk: 103, def: 85, spa: 55, spd: 80, spe: 110}, + abilities: {0: "Frisk", 1: "Limber", H: "Iron Fist"}, + heightm: 1.1, + weightkg: 51, + color: "Gray", + eggGroups: ["Field"], + }, + cyclohm: { + num: -8, + species: "Cyclohm", + types: ["Electric", "Dragon"], + baseStats: {hp: 108, atk: 60, def: 118, spa: 112, spd: 70, spe: 80}, + abilities: {0: "Shield Dust", 1: "Static", H: "Damp"}, + heightm: 1.6, + weightkg: 59, + color: "Yellow", + eggGroups: ["Dragon", "Monster"], + }, + colossoil: { + num: -9, + species: "Colossoil", + types: ["Dark", "Ground"], + baseStats: {hp: 133, atk: 122, def: 72, spa: 71, spd: 72, spe: 95}, + abilities: {0: "Rebound", 1: "Guts", H: "Unnerve"}, + heightm: 2.6, + weightkg: 683.6, + color: "Brown", + eggGroups: ["Water 2", "Field"], + }, + krilowatt: { + num: -10, + species: "Krilowatt", + types: ["Electric", "Water"], + baseStats: {hp: 151, atk: 84, def: 73, spa: 83, spd: 74, spe: 105}, + abilities: {0: "Trace", 1: "Magic Guard", H: "Minus"}, + heightm: 0.7, + weightkg: 10.6, + color: "Red", + eggGroups: ["Water 1", "Fairy"], + }, + voodoom: { + num: -11, + species: "Voodoom", + types: ["Fighting", "Dark"], + baseStats: {hp: 90, atk: 85, def: 80, spa: 105, spd: 80, spe: 110}, + abilities: {0: "Volt Absorb", 1: "Lightning Rod", H: "Cursed Body"}, + heightm: 2, + weightkg: 75.5, + color: "Brown", + prevo: "voodoll", + evoLevel: 32, + eggGroups: ["Human-Like", "Field"], + }, + tomohawk: { + num: -12, + species: "Tomohawk", + types: ["Flying", "Fighting"], + baseStats: {hp: 105, atk: 60, def: 90, spa: 115, spd: 80, spe: 85}, + abilities: {0: "Intimidate", 1: "Prankster", H: "Justified"}, + heightm: 1.27, + weightkg: 37.2, + color: "Red", + prevo: "scratchet", + evoLevel: 23, + eggGroups: ["Field", "Flying"], + }, + necturna: { + num: -13, + species: "Necturna", + types: ["Grass", "Ghost"], + gender: "F", + baseStats: {hp: 64, atk: 120, def: 100, spa: 85, spd: 120, spe: 81}, + abilities: {0: "Forewarn", H: "Telepathy"}, + heightm: 1.65, + weightkg: 49.6, + color: "Black", + prevo: "necturine", + evoLevel: 31, + eggGroups: ["Grass", "Field"], + }, + mollux: { + num: -14, + species: "Mollux", + types: ["Fire", "Poison"], + baseStats: {hp: 95, atk: 45, def: 83, spa: 131, spd: 105, spe: 76}, + abilities: {0: "Dry Skin", H: "Illuminate"}, + heightm: 1.2, + weightkg: 41, + color: "Pink", + eggGroups: ["Fairy", "Field"], + }, + aurumoth: { + num: -15, + species: "Aurumoth", + types: ["Bug", "Psychic"], + baseStats: {hp: 110, atk: 120, def: 99, spa: 117, spd: 60, spe: 94}, + abilities: {0: "Weak Armor", 1: "No Guard", H: "Light Metal"}, heightm: 2.1, weightkg: 193, color: "Purple", @@ -13019,7 +13606,7 @@ exports.BattlePokedex = { eggGroups: ["Bug"], }, malaconda: { - num: -5, + num: -16, species: "Malaconda", types: ["Dark", "Grass"], baseStats: {hp: 115, atk: 100, def: 60, spa: 40, spd: 130, spe: 55}, @@ -13032,7 +13619,7 @@ exports.BattlePokedex = { eggGroups: ["Grass", "Dragon"], }, cawmodore: { - num: -6, + num: -17, species: "Cawmodore", types: ["Steel", "Flying"], baseStats: {hp: 50, atk: 92, def: 130, spa: 65, spd: 75, spe: 118}, @@ -13045,7 +13632,7 @@ exports.BattlePokedex = { eggGroups: ["Flying"], }, volkraken: { - num: -7, + num: -18, species: "Volkraken", types: ["Water", "Fire"], baseStats: {hp: 100, atk: 45, def: 80, spa: 135, spd: 100, spe: 95}, @@ -13058,7 +13645,7 @@ exports.BattlePokedex = { eggGroups: ["Water 1", "Water 2"], }, plasmanta: { - num: -8, + num: -19, species: "Plasmanta", types: ["Electric", "Poison"], baseStats: {hp: 60, atk: 57, def: 119, spa: 131, spd: 98, spe: 100}, @@ -13071,7 +13658,7 @@ exports.BattlePokedex = { eggGroups: ["Water 1", "Water 2"], }, naviathan: { - num: -9, + num: -20, species: "Naviathan", types: ["Water", "Steel"], baseStats: {hp: 103, atk: 110, def: 90, spa: 95, spd: 65, spe: 97}, @@ -13084,7 +13671,7 @@ exports.BattlePokedex = { eggGroups: ["Water 1", "Field"], }, crucibelle: { - num: -10, + num: -21, species: "Crucibelle", types: ["Rock", "Poison"], genderRatio: {M: 0.25, F: 0.75}, @@ -13097,14 +13684,14 @@ exports.BattlePokedex = { otherFormes: ["crucibellemega"], }, crucibellemega: { - num: -10, + num: -21, species: "Crucibelle-Mega", baseSpecies: "Crucibelle", forme: "Mega", formeLetter: "M", types: ["Rock", "Poison"], genderRatio: {M: 0.25, F: 0.75}, - baseStats: {hp: 106, atk: 135, def: 75, spa: 85, spd: 125, spe: 114}, + baseStats: {hp: 106, atk: 135, def: 75, spa: 91, spd: 125, spe: 108}, abilities: {0: "Magic Guard"}, heightm: 1.4, weightkg: 22.5, @@ -13112,7 +13699,7 @@ exports.BattlePokedex = { eggGroups: ["Amorphous", "Mineral"], }, kerfluffle: { - num: -11, + num: -22, species: "Kerfluffle", types: ["Fairy", "Fighting"], baseStats: {hp: 84, atk: 78, def: 86, spa: 115, spd: 88, spe: 119}, @@ -13121,143 +13708,75 @@ exports.BattlePokedex = { weightkg: 24.2, color: "Pink", prevo: "pluffle", - evoLevel: 2, + evoType: "levelExtra", eggGroups: ["Fairy", "Human-Like"], }, - syclant: { - num: -51, - species: "Syclant", - types: ["Ice", "Bug"], - baseStats: {hp: 70, atk: 116, def: 70, spa: 114, spd: 64, spe: 121}, - abilities: {0: "Compound Eyes", 1: "Mountaineer", H: "Ice Body"}, - heightm: 1.7, - weightkg: 52, - color: "Blue", - prevo: "syclar", - evoLevel: 30, - eggGroups: ["Bug"], - }, - revenankh: { - num: -52, - species: "Revenankh", - types: ["Ghost", "Fighting"], - baseStats: {hp: 90, atk: 105, def: 90, spa: 65, spd: 110, spe: 65}, - abilities: {0: "Shed Skin", 1: "Air Lock", H: "Triage"}, - heightm: 1.8, - weightkg: 44, - color: "White", - eggGroups: ["Amorphous", "Human-Like"], - }, - pyroak: { - num: -53, - species: "Pyroak", - types: ["Fire", "Grass"], - baseStats: {hp: 120, atk: 70, def: 105, spa: 95, spd: 90, spe: 60}, - abilities: {0: "Rock Head", 1: "Battle Armor", H: "White Smoke"}, - heightm: 2.1, - weightkg: 168, - color: "Brown", - prevo: "flarelm", - evoLevel: 38, - eggGroups: ["Monster", "Dragon"], - }, - fidgit: { - num: -54, - species: "Fidgit", - types: ["Poison", "Ground"], - baseStats: {hp: 95, atk: 76, def: 109, spa: 90, spd: 80, spe: 105}, - abilities: {0: "Persistent", 1: "Vital Spirit", H: "Frisk"}, - heightm: 0.9, - weightkg: 53, + pajantom: { + num: -23, + species: "Pajantom", + types: ["Dragon", "Ghost"], + baseStats: {hp: 84, atk: 133, def: 71, spa: 51, spd: 111, spe: 101}, + abilities: {0: "Comatose"}, + heightm: 1.1, + weightkg: 3.1, color: "Purple", - prevo: "breezi", - evoLevel: 33, - eggGroups: ["Field"], + eggGroups: ["Dragon", "Monster"], }, - stratagem: { - num: -55, - species: "Stratagem", - types: ["Rock"], - gender: "N", - baseStats: {hp: 90, atk: 60, def: 65, spa: 120, spd: 70, spe: 130}, - abilities: {0: "Levitate", 1: "Technician", H: "Sniper"}, - heightm: 0.9, - weightkg: 45, - color: "Gray", - eggGroups: ["Undiscovered"], + jumbao: { + num: -24, + species: "Jumbao", + types: ["Grass", "Fairy"], + baseStats: {hp: 92, atk: 63, def: 97, spa: 124, spd: 104, spe: 96}, + abilities: {0: "Drought", 1: "Trace", H: "Overcoat"}, + heightm: 2.4, + weightkg: 600, + color: "Brown", + prevo: "mumbao", + evoType: "levelExtra", + eggGroups: ["Grass"], }, - arghonaut: { - num: -56, - species: "Arghonaut", - types: ["Water", "Fighting"], - baseStats: {hp: 105, atk: 110, def: 95, spa: 70, spd: 100, spe: 75}, - abilities: {0: "Unaware", H: "Technician"}, - heightm: 1.7, - weightkg: 151, + caribolt: { + num: -25, + species: "Caribolt", + types: ["Grass", "Electric"], + genderRatio: {M: 0.875, F: 0.125}, + baseStats: {hp: 84, atk: 106, def: 82, spa: 77, spd: 80, spe: 106}, + abilities: {0: "Overgrow", H: "Galvanize"}, + heightm: 2.5, + weightkg: 140, color: "Green", - eggGroups: ["Water 1", "Water 3"], - }, - kitsunoh: { - num: -57, - species: "Kitsunoh", - types: ["Steel", "Ghost"], - baseStats: {hp: 80, atk: 103, def: 85, spa: 55, spd: 80, spe: 110}, - abilities: {0: "Frisk", 1: "Limber", H: "Iron Fist"}, - heightm: 1.1, - weightkg: 51, - color: "Gray", eggGroups: ["Field"], }, - cyclohm: { - num: -58, - species: "Cyclohm", - types: ["Electric", "Dragon"], - baseStats: {hp: 108, atk: 60, def: 118, spa: 112, spd: 70, spe: 80}, - abilities: {0: "Shield Dust", 1: "Static", H: "Damp"}, - heightm: 1.6, - weightkg: 59, - color: "Yellow", - eggGroups: ["Dragon", "Monster"], - }, - colossoil: { - num: -59, - species: "Colossoil", - types: ["Dark", "Ground"], - baseStats: {hp: 133, atk: 122, def: 72, spa: 71, spd: 72, spe: 95}, - abilities: {0: "Rebound", 1: "Guts", H: "Unnerve"}, - heightm: 2.6, - weightkg: 683.6, - color: "Brown", - eggGroups: ["Water 2", "Field"], - }, - krilowatt: { - num: -60, - species: "Krilowatt", - types: ["Electric", "Water"], - baseStats: {hp: 151, atk: 84, def: 73, spa: 83, spd: 74, spe: 105}, - abilities: {0: "Trace", 1: "Magic Guard", H: "Minus"}, - heightm: 0.7, - weightkg: 10.6, + smokomodo: { + num: -26, + species: "Smokomodo", + types: ["Fire", "Ground"], + genderRatio: {M: 0.875, F: 0.125}, + baseStats: {hp: 88, atk: 116, def: 67, spa: 88, spd: 78, spe: 97}, + abilities: {0: "Blaze", H: "Technician"}, + heightm: 2.2, + weightkg: 205, color: "Red", - eggGroups: ["Water 1", "Fairy"], + eggGroups: ["Field", "Monster"], }, - voodoom: { - num: -61, - species: "Voodoom", - types: ["Fighting", "Dark"], - baseStats: {hp: 90, atk: 85, def: 80, spa: 105, spd: 80, spe: 110}, - abilities: {0: "Volt Absorb", 1: "Lightning Rod", H: "Cursed Body"}, + snaelstrom: { + num: -27, + species: "Snaelstrom", + types: ["Water", "Bug"], + genderRatio: {M: 0.875, F: 0.125}, + baseStats: {hp: 91, atk: 94, def: 110, spa: 80, spd: 97, spe: 63}, + abilities: {0: "Torrent", H: "Poison Heal"}, heightm: 2, - weightkg: 75.5, - color: "Brown", - eggGroups: ["Human-Like", "Ground"], + weightkg: 120, + color: "Blue", + eggGroups: ["Water 1", "Fairy"], }, syclar: { num: -101, species: "Syclar", types: ["Ice", "Bug"], baseStats: {hp: 40, atk: 76, def: 45, spa: 74, spd: 39, spe: 91}, - abilities: {0: "Compound Eyes", 1: "Snow Cloak"}, + abilities: {0: "Compound Eyes", 1: "Snow Cloak", H: "Ice Body"}, heightm: 0.2, weightkg: 4.0, color: "Blue", @@ -13269,7 +13788,7 @@ exports.BattlePokedex = { species: "Embirch", types: ["Fire", "Grass"], baseStats: {hp: 60, atk: 40, def: 55, spa: 65, spd: 40, spe: 60}, - abilities: {0: "Reckless", 1: "Leaf Guard"}, + abilities: {0: "Reckless", 1: "Leaf Guard", H: "Chlorophyll"}, heightm: 0.6, weightkg: 15, color: "Brown", @@ -13281,13 +13800,13 @@ exports.BattlePokedex = { species: "Flarelm", types: ["Fire", "Grass"], baseStats: {hp: 90, atk: 50, def: 95, spa: 75, spd: 70, spe: 40}, - abilities: {0: "Rock Head", 1: "Battle Armor"}, + abilities: {0: "Rock Head", 1: "Battle Armor", H: "White Smoke"}, heightm: 1.4, weightkg: 73, color: "Brown", prevo: "embirch", - evos: ["pyroak"], evoLevel: 24, + evos: ["pyroak"], eggGroups: ["Monster", "Dragon"], }, breezi: { @@ -13295,7 +13814,7 @@ exports.BattlePokedex = { species: "Breezi", types: ["Poison", "Flying"], baseStats: {hp: 50, atk: 46, def: 69, spa: 60, spd: 50, spe: 75}, - abilities: {0: "Unburden", 1: "Own Tempo"}, + abilities: {0: "Unburden", 1: "Own Tempo", H: "Frisk"}, heightm: 0.4, weightkg: 0.6, color: "Purple", @@ -13332,7 +13851,7 @@ exports.BattlePokedex = { species: "Cupra", types: ["Bug", "Psychic"], baseStats: {hp: 50, atk: 60, def: 49, spa: 67, spd: 30, spe: 44}, - abilities: {0: "Shield Dust", 1: "Keen Eye"}, + abilities: {0: "Shield Dust", 1: "Keen Eye", H: "Magic Guard"}, heightm: 0.5, weightkg: 4.8, color: "Brown", @@ -13344,13 +13863,13 @@ exports.BattlePokedex = { species: "Argalis", types: ["Bug", "Psychic"], baseStats: {hp: 60, atk: 90, def: 89, spa: 87, spd: 40, spe: 54}, - abilities: {0: "Shed Skin", 1: "Compound Eyes"}, + abilities: {0: "Shed Skin", 1: "Compound Eyes", H: "Overcoat"}, heightm: 1.3, weightkg: 341.4, color: "Gray", prevo: "cupra", - evos: ["aurumoth"], evoLevel: 30, + evos: ["aurumoth"], eggGroups: ["Bug"], }, brattler: { @@ -13358,7 +13877,7 @@ exports.BattlePokedex = { species: "Brattler", types: ["Dark", "Grass"], baseStats: {hp: 80, atk: 70, def: 40, spa: 20, spd: 90, spe: 30}, - abilities: {0: "Harvest", 1: "Infiltrator"}, + abilities: {0: "Harvest", 1: "Infiltrator", H: "Rattled"}, heightm: 1.8, weightkg: 11.5, color: "Brown", @@ -13423,8 +13942,8 @@ exports.BattlePokedex = { weightkg: 72.5, color: "Gray", prevo: "floatoy", - evos: ["naviathan"], evoLevel: 21, + evos: ["naviathan"], eggGroups: ["Water 1", "Field"], }, pluffle: { @@ -13439,6 +13958,81 @@ exports.BattlePokedex = { evos: ["kerfluffle"], eggGroups: ["Fairy", "Human-Like"], }, + rebble: { + num: -116, + species: "Rebble", + types: ["Rock"], + gender: "N", + baseStats: {hp: 45, atk: 25, def: 65, spa: 75, spd: 55, spe: 80}, + abilities: {0: "Levitate", 1: "Solid Rock", H: "Sniper"}, + heightm: 0.3, + weightkg: 7, + color: "Gray", + evos: ["tactite"], + eggGroups: ["Undiscovered"], + }, + tactite: { + num: -117, + species: "Tactite", + types: ["Rock"], + gender: "N", + baseStats: {hp: 70, atk: 40, def: 65, spa: 100, spd: 65, spe: 95}, + abilities: {0: "Levitate", 1: "Technician", H: "Sniper"}, + heightm: 0.6, + weightkg: 16, + color: "Gray", + prevo: "rebble", + evoLevel: 28, + evos: ["stratagem"], + eggGroups: ["Undiscovered"], + }, + privatyke: { + num: -118, + species: "Privatyke", + types: ["Water", "Fighting"], + baseStats: {hp: 65, atk: 75, def: 65, spa: 40, spd: 60, spe: 45}, + abilities: {0: "Unaware", H: "Technician"}, + heightm: 1, + weightkg: 35, + color: "Green", + evos: ["arghonaut"], + eggGroups: ["Water 1", "Water 3"], + }, + voodoll: { + num: -119, + species: "Voodoll", + types: ["Normal", "Dark"], + baseStats: {hp: 55, atk: 40, def: 55, spa: 75, spd: 50, spe: 70}, + abilities: {0: "Volt Absorb", 1: "Lightning Rod", H: "Cursed Body"}, + heightm: 1, + weightkg: 25, + color: "Brown", + evos: ["voodoom"], + eggGroups: ["Human-Like", "Field"], + }, + mumbao: { + num: -120, + species: "Mumbao", + types: ["Grass", "Fairy"], + baseStats: {hp: 55, atk: 30, def: 64, spa: 87, spd: 73, spe: 66}, + abilities: {0: "Solar Power", 1: "Trace", H: "Overcoat"}, + heightm: 1, + weightkg: 250, + color: "Brown", + evos: ["jumbao"], + eggGroups: ["Grass"], + }, + pokestarsmeargle: { + num: -5000, + species: "Pokestar Smeargle", + types: ["Normal"], + baseStats: {hp: 55, atk: 20, def: 35, spa: 20, spd: 45, spe: 75}, + abilities: {0: "Own Tempo", 1: "Technician", H: "Moody"}, + heightm: 1.5, + weightkg: 61, + color: "White", + eggGroups: ["Field"], + }, pokestarufo: { num: -5001, species: "Pokestar UFO", @@ -13647,3 +14241,5 @@ exports.BattlePokedex = { eggGroups: ["Undiscovered"], }, }; + +exports.BattlePokedex = BattlePokedex; diff --git a/data/random-teams.js b/data/random-teams.js index 6162615c69472..cf96ceebefe69 100644 --- a/data/random-teams.js +++ b/data/random-teams.js @@ -1,13 +1,38 @@ 'use strict'; -const Dex = require('./../sim/dex'); -const PRNG = require('./../sim/prng'); +/** @type {typeof import('../sim/dex')} */ +const Dex = require(/** @type {any} */ ('../.sim-dist/dex')); +/** @type {typeof import('../sim/prng').PRNG} */ +const PRNG = require(/** @type {any} */ ('../.sim-dist/prng')).PRNG; +/**@type {AnyObject} */ +// @ts-ignore const randomBSSFactorySets = require('./bss-factory-sets.json'); +/**@type {AnyObject} */ +// @ts-ignore const randomFactorySets = require('./factory-sets.json'); +/** + * @typedef {Object} TeamData + * @property {{[k: string]: number}} typeCount + * @property {{[k: string]: number}} typeComboCount + * @property {{[k: string]: number}} baseFormes + * @property {number} megaCount + * @property {number} [zCount] + * @property {{[k: string]: number}} has + * @property {boolean} forceResult + * @property {{[k: string]: number}} weaknesses + * @property {{[k: string]: number}} resistances + * @property {string} [weather] + * @property {number} [eeveeLimCount] + */ + class RandomTeams extends Dex.ModdedDex { - constructor(format, seed) { + /** + * @param {Format | string} format + * @param {?PRNG | [number, number, number, number]} [prng] + */ + constructor(format, prng) { format = Dex.getFormat(format); super(format.mod); this.randomBSSFactorySets = randomBSSFactorySets; @@ -15,15 +40,42 @@ class RandomTeams extends Dex.ModdedDex { this.factoryTier = ''; this.format = format; - this.prng = new PRNG(seed); + this.prng = prng && !Array.isArray(prng) ? prng : new PRNG(prng); } + generateTeam() { const generatorName = typeof this.format.team === 'string' && this.format.team.startsWith('random') ? this.format.team + 'Team' : ''; + // @ts-ignore return this[generatorName || 'randomTeam'](); } + + /** + * @param {number} numerator - the top part of the probability fraction + * @param {number} denominator - the bottom part of the probability fraction + * @return {boolean} - randomly true or false + */ + randomChance(numerator, denominator) { + return this.prng.randomChance(numerator, denominator); + } + + /** + * @param {ReadonlyArray} items - the items to choose from + * @return {T} - a random item from items + * @template T + */ + sample(items) { + return this.prng.sample(items); + } + + /** + * @param {number} [m] + * @param {number} [n] + * @return {number} + */ random(m, n) { return this.prng.next(m, n); } + /** * Remove an element from an unsorted array significantly faster * than .splice @@ -41,6 +93,7 @@ class RandomTeams extends Dex.ModdedDex { list.pop(); return element; } + /** * Remove a random element from an unsorted array and return it. * Uses the battle's RNG if in a battle. @@ -52,6 +105,10 @@ class RandomTeams extends Dex.ModdedDex { let index = this.random(length); return this.fastPop(list, index); } + + /** + * @param {Template} template + */ checkBattleForme(template) { // If the Pokémon has a Mega or Primal alt forme, that's its preferred battle forme. // No randomization, no choice. We are just checking its existence. @@ -61,6 +118,7 @@ class RandomTeams extends Dex.ModdedDex { if (firstForme.isMega || firstForme.isPrimal) return firstForme; return null; } + // checkAbilities(selectedAbilities, defaultAbilities) { // if (!selectedAbilities.length) return true; // let selectedAbility = selectedAbilities.pop(); @@ -83,6 +141,9 @@ class RandomTeams extends Dex.ModdedDex { // let firstForme = this.getTemplate(template.otherFormes[0]); // return !!firstForme.isMega; // } + /** + * @return {RandomTeamsTypes["RandomSet"][]} + */ randomCCTeam() { let team = []; @@ -99,7 +160,7 @@ class RandomTeams extends Dex.ModdedDex { let item = ''; if (this.gen >= 2) { do { - item = items[this.random(items.length)]; + item = this.sample(items); } while (this.getItem(item).gen > this.gen || this.data.Items[item].isNonstandard); } @@ -113,28 +174,31 @@ class RandomTeams extends Dex.ModdedDex { let itemData = this.getItem(item); if (itemData.forcedForme && species === this.getTemplate(itemData.forcedForme).baseSpecies) { do { - item = items[this.random(items.length)]; + item = this.sample(items); itemData = this.getItem(item); } while (itemData.gen > this.gen || itemData.isNonstandard || itemData.forcedForme && species === this.getTemplate(itemData.forcedForme).baseSpecies); } // Random legal ability let abilities = Object.values(template.abilities).filter(a => this.getAbility(a).gen <= this.gen); - let ability = this.gen <= 2 ? 'None' : abilities[this.random(abilities.length)]; + /**@type {string} */ + // @ts-ignore + let ability = this.gen <= 2 ? 'None' : this.sample(abilities); // Four random unique moves from the movepool let moves; let pool = ['struggle']; if (species === 'Smeargle') { - pool = Object.keys(this.data.Movedex).filter(moveid => !(moveid in {'chatter':1, 'struggle':1, 'paleowave':1, 'shadowstrike':1, 'magikarpsrevenge':1} || this.data.Movedex[moveid].isZ)); + pool = Object.keys(this.data.Movedex).filter(moveid => !(['chatter', 'struggle', 'paleowave', 'shadowstrike', 'magikarpsrevenge'].includes(moveid) || this.data.Movedex[moveid].isZ)); } else if (template.learnset) { pool = Object.keys(template.learnset); if (template.species.substr(0, 6) === 'Rotom-') { - pool = Array.from(new Set(pool.concat(Object.keys(this.getTemplate(template.baseSpecies).learnset)))); + const learnset = this.getTemplate(template.baseSpecies).learnset; + if (learnset) pool = [...new Set(pool.concat(Object.keys(learnset)))]; } } else { const learnset = this.getTemplate(template.baseSpecies).learnset; - pool = Object.keys(learnset); + if (learnset) pool = Object.keys(learnset); } if (pool.length <= 4) { moves = pool; @@ -147,8 +211,10 @@ class RandomTeams extends Dex.ModdedDex { let s = ["hp", "atk", "def", "spa", "spd", "spe"]; let evpool = 510; do { - let x = s[this.random(s.length)]; + let x = this.sample(s); + // @ts-ignore let y = this.random(Math.min(256 - evs[x], evpool + 1)); + // @ts-ignore evs[x] += y; evpool -= y; } while (evpool > 0); @@ -157,7 +223,7 @@ class RandomTeams extends Dex.ModdedDex { let 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 - let nature = natures[this.random(natures.length)]; + let nature = this.sample(natures); // Level balance--calculate directly from stats rather than using some silly lookup table let mbstmin = 1307; // Sunkern has the lowest modified base stat total, and that total is 807 @@ -188,17 +254,16 @@ class RandomTeams extends Dex.ModdedDex { level++; } - // Random gender--already handled by PS - // Random happiness let happiness = this.random(256); // Random shininess - let shiny = !this.random(1024); + let shiny = this.randomChance(1, 1024); team.push({ name: template.baseSpecies, species: template.species, + gender: template.gender, item: item, ability: ability, moves: moves, @@ -213,11 +278,13 @@ class RandomTeams extends Dex.ModdedDex { return team; } + random6Pokemon() { // Pick six 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 - let last = [0, 151, 251, 386, 493, 649, 721, 802][this.gen]; + let last = [0, 151, 251, 386, 493, 649, 721, 807][this.gen]; + /**@type {{[k: string]: number}} */ let hasDexNumber = {}; for (let i = 0; i < 6; i++) { let num; @@ -227,11 +294,12 @@ class RandomTeams extends Dex.ModdedDex { hasDexNumber[num] = i; } + /**@type {string[][]} */ let formes = [[], [], [], [], [], []]; for (let id in this.data.Pokedex) { if (!(this.data.Pokedex[id].num in hasDexNumber)) continue; let template = this.getTemplate(id); - if (template.gen <= this.gen && template.learnset && template.species !== 'Pichu-Spiky-eared' && template.species.substr(0, 8) !== 'Pikachu-') { + if (template.gen <= this.gen && template.species !== 'Pichu-Spiky-eared' && template.species.substr(0, 8) !== 'Pikachu-') { formes[hasDexNumber[template.num]].push(template.species); } } @@ -241,10 +309,11 @@ class RandomTeams extends Dex.ModdedDex { if (!formes[i].length) { throw new Error("Invalid pokemon gen " + this.gen + ": " + JSON.stringify(formes) + " numbers " + JSON.stringify(hasDexNumber)); } - sixPokemon.push(formes[i][this.random(formes[i].length)]); + sixPokemon.push(this.sample(formes[i])); } return sixPokemon; } + randomHCTeam() { let team = []; @@ -290,20 +359,25 @@ class RandomTeams extends Dex.ModdedDex { if (this.gen === 6) { let evpool = 510; do { - let x = s[this.random(s.length)]; + let x = this.sample(s); + // @ts-ignore let y = this.random(Math.min(256 - evs[x], evpool + 1)); + // @ts-ignore evs[x] += y; evpool -= y; } while (evpool > 0); } else { - for (let x of s) evs[x] = this.random(256); + for (const x of s) { + // @ts-ignore + evs[x] = this.random(256); + } } // Random IVs let 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 - let nature = naturePool[this.random(naturePool.length)]; + let nature = this.sample(naturePool); // Level balance let mbstmin = 1307; @@ -330,11 +404,12 @@ class RandomTeams extends Dex.ModdedDex { let happiness = this.random(256); // Random shininess - let shiny = !this.random(1024); + let shiny = this.randomChance(1, 1024); team.push({ name: template.baseSpecies, species: template.species, + gender: template.gender, item: item, ability: ability, moves: m, @@ -349,66 +424,72 @@ class RandomTeams extends Dex.ModdedDex { return team; } - queryMoves(moves, hasType, hasAbility, movePool) { + + /** + * @param {?string[]} moves + * @param {{[k: string]: boolean}} [hasType] + * @param {{[k: string]: boolean}} [hasAbility] + * @param {string[]} [movePool] + */ + queryMoves(moves, hasType = {}, hasAbility = {}, movePool = []) { // This is primarily a helper function for random setbuilder functions. let counter = { Physical: 0, Special: 0, Status: 0, damage: 0, recovery: 0, stab: 0, inaccurate: 0, priority: 0, recoil: 0, drain: 0, adaptability: 0, bite: 0, contrary: 0, hustle: 0, ironfist: 0, serenegrace: 0, sheerforce: 0, skilllink: 0, technician: 0, - physicalsetup: 0, specialsetup: 0, mixedsetup: 0, defensesetup: 0, speedsetup: 0, physicalpool: 0, specialpool: 0, + physicalsetup: 0, specialsetup: 0, mixedsetup: 0, speedsetup: 0, physicalpool: 0, specialpool: 0, + /**@type {Move[]} */ damagingMoves: [], + /**@type {{[k: string]: number}} */ damagingMoveIndex: {}, setupType: '', + // typescript + Bug: 0, Dark: 0, Dragon: 0, Electric: 0, Fairy: 0, Fighting: 0, Fire: 0, Flying: 0, Ghost: 0, Grass: 0, Ground: 0, + Ice: 0, Normal: 0, Poison: 0, Psychic: 0, Rock: 0, Steel: 0, Water: 0, }; for (let type in Dex.data.TypeChart) { + // @ts-ignore counter[type] = 0; } if (!moves || !moves.length) return counter; - if (!hasType) hasType = {}; - if (!hasAbility) hasAbility = {}; - if (!movePool) movePool = []; // Moves that heal a fixed amount: - let RecoveryMove = { - healorder: 1, milkdrink: 1, recover: 1, roost: 1, slackoff: 1, softboiled: 1, - }; + let RecoveryMove = [ + 'healorder', 'milkdrink', 'moonlight', 'morningsun', 'recover', 'roost', 'slackoff', 'softboiled', 'synthesis', + ]; // Moves which drop stats: - let ContraryMove = { - closecombat: 1, leafstorm: 1, overheat: 1, superpower: 1, vcreate: 1, - }; + let ContraryMove = [ + 'closecombat', 'leafstorm', 'overheat', 'superpower', 'vcreate', + ]; // Moves that boost Attack: - let PhysicalSetup = { - bellydrum:1, bulkup:1, coil:1, curse:1, dragondance:1, honeclaws:1, howl:1, poweruppunch:1, shiftgear:1, swordsdance:1, - }; + let PhysicalSetup = [ + 'bellydrum', 'bulkup', 'coil', 'curse', 'dragondance', 'honeclaws', 'howl', 'poweruppunch', 'shiftgear', 'swordsdance', + ]; // Moves which boost Special Attack: - let SpecialSetup = { - calmmind:1, chargebeam:1, geomancy:1, nastyplot:1, quiverdance:1, tailglow:1, - }; + let SpecialSetup = [ + 'calmmind', 'chargebeam', 'geomancy', 'nastyplot', 'quiverdance', 'tailglow', + ]; // Moves which boost Attack AND Special Attack: - let MixedSetup = { - conversion: 1, growth:1, shellsmash:1, workup:1, - }; - // Moves which boost Defense and/or Special Defense: - let DefenseSetup = { - cosmicpower:1, cottonguard:1, defendorder:1, - }; + let MixedSetup = [ + 'conversion', 'growth', 'happyhour', 'shellsmash', 'workup', + ]; // Moves which boost Speed: - let SpeedSetup = { - agility:1, autotomize:1, rockpolish:1, - }; + let SpeedSetup = [ + 'agility', 'autotomize', 'rockpolish', + ]; // Moves that shouldn't be the only STAB moves: - let NoStab = { - aquajet:1, bounce:1, explosion:1, fakeout:1, flamecharge:1, fly:1, iceshard:1, pursuit:1, quickattack:1, skyattack:1, - chargebeam:1, clearsmog:1, eruption:1, vacuumwave:1, waterspout:1, - }; + let NoStab = [ + 'aquajet', 'bounce', 'explosion', 'fakeout', 'firstimpression', 'flamecharge', 'fly', 'iceshard', 'pursuit', 'quickattack', 'skyattack', 'suckerpunch', + 'chargebeam', 'clearsmog', 'eruption', 'vacuumwave', 'waterspout', + ]; // Iterate through all moves we've chosen so far and keep track of what they do: - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); + for (const [k, moveId] of moves.entries()) { + let move = this.getMove(moveId); let moveid = move.id; let movetype = move.type; - if (moveid === 'judgment' || moveid === 'multiattack') movetype = Object.keys(hasType)[0]; + if (['judgment', 'multiattack', 'revelationdance'].includes(moveid)) movetype = Object.keys(hasType)[0]; if (move.damage || move.damageCallback) { // Moves that do a set amount of damage: counter['damage']++; @@ -421,23 +502,33 @@ class RandomTeams extends Dex.ModdedDex { // Moves that have a low base power: if (moveid === 'lowkick' || (move.basePower && move.basePower <= 60 && moveid !== 'rapidspin')) counter['technician']++; // Moves that hit up to 5 times: - if (move.multihit && move.multihit[1] === 5) counter['skilllink']++; - if (move.recoil) counter['recoil']++; + if (move.multihit && Array.isArray(move.multihit) && move.multihit[1] === 5) counter['skilllink']++; + if (move.recoil || move.hasCustomRecoil) counter['recoil']++; if (move.drain) counter['drain']++; + // Conversion converts exactly one non-STAB into STAB + if (moveid === 'conversion') { + counter['stab']++; + counter['adaptability']++; + } // Moves which have a base power, but aren't super-weak like Rapid Spin: if (move.basePower > 30 || move.multihit || move.basePowerCallback || moveid === 'naturepower') { + // @ts-ignore counter[movetype]++; - if (hasType[movetype]) { + if (hasType[movetype] || movetype === 'Normal' && (hasAbility['Aerilate'] || hasAbility['Galvanize'] || hasAbility['Pixilate'] || hasAbility['Refrigerate'])) { counter['adaptability']++; // STAB: // Certain moves aren't acceptable as a Pokemon's only STAB attack - if (!(moveid in NoStab) && (moveid !== 'hiddenpower' || Object.keys(hasType).length === 1)) counter['stab']++; + if (!NoStab.includes(moveid) && (moveid !== 'hiddenpower' || Object.keys(hasType).length === 1)) { + counter['stab']++; + // Ties between Physical and Special setup should broken in favor of STABs + counter[move.category] += 0.1; + } + } else if (move.priority === 0 && hasAbility['Protean'] && !NoStab.includes(moveid)) { + counter['stab']++; + } else if (movetype === 'Steel' && hasAbility['Steelworker']) { + counter['stab']++; } - if (move.priority === 0 && (hasAbility['Protean'] || moves.includes('conversion')) && !(moveid in NoStab)) counter['stab']++; if (move.category === 'Physical') counter['hustle']++; - if (movetype === 'Normal' && !(moveid in NoStab)) { - if (hasAbility['Aerilate'] || hasAbility['Pixilate'] || hasAbility['Refrigerate']) counter['stab']++; - } if (move.flags['bite']) counter['bite']++; if (move.flags['punch']) counter['ironfist']++; counter.damagingMoves.push(move); @@ -446,26 +537,33 @@ class RandomTeams extends Dex.ModdedDex { // Moves with secondary effects: if (move.secondary) { counter['sheerforce']++; - if (move.secondary.chance >= 20) counter['serenegrace']++; + if (move.secondary.chance && move.secondary.chance >= 20 && move.secondary.chance < 100) { + counter['serenegrace']++; + } } // Moves with low accuracy: if (move.accuracy && move.accuracy !== true && move.accuracy < 90) counter['inaccurate']++; // Moves with non-zero priority: - if (move.priority !== 0) counter['priority']++; + if (move.category !== 'Status' && move.priority !== 0) counter['priority']++; // Moves that change stats: - if (RecoveryMove[moveid]) counter['recovery']++; - if (ContraryMove[moveid]) counter['contrary']++; - if (PhysicalSetup[moveid]) counter['physicalsetup']++; - if (SpecialSetup[moveid]) counter['specialsetup']++; - if (MixedSetup[moveid]) counter['mixedsetup']++; - if (DefenseSetup[moveid]) counter['defensesetup']++; - if (SpeedSetup[moveid]) counter['speedsetup']++; + if (RecoveryMove.includes(moveid)) counter['recovery']++; + if (ContraryMove.includes(moveid)) counter['contrary']++; + if (PhysicalSetup.includes(moveid)) { + counter['physicalsetup']++; + counter.setupType = 'Physical'; + } else if (SpecialSetup.includes(moveid)) { + counter['specialsetup']++; + counter.setupType = 'Special'; + } + if (MixedSetup.includes(moveid)) counter['mixedsetup']++; + if (SpeedSetup.includes(moveid)) counter['speedsetup']++; } // Keep track of the available moves - for (let i = 0; i < movePool.length; i++) { - let move = this.getMove(movePool[i]); + for (const moveid of movePool) { + let move = this.getMove(moveid); + if (move.damageCallback) continue; if (move.category === 'Physical') counter['physicalpool']++; if (move.category === 'Special') counter['specialpool']++; } @@ -473,53 +571,61 @@ class RandomTeams extends Dex.ModdedDex { // Choose a setup type: if (counter['mixedsetup']) { counter.setupType = 'Mixed'; - } else if (counter['physicalsetup'] || counter['specialsetup']) { - let physical = counter.Physical + counter['physicalpool']; - let special = counter.Special + counter['specialpool']; + } else if (counter.setupType) { + let pool = { + Physical: counter.Physical + counter['physicalpool'], + Special: counter.Special + counter['specialpool'], + }; if (counter['physicalsetup'] && counter['specialsetup']) { - if (physical === special) { - counter.setupType = counter.Physical > counter.Special ? 'Physical' : 'Special'; + if (pool.Physical === pool.Special) { + if (counter.Physical > counter.Special) counter.setupType = 'Physical'; + if (counter.Special > counter.Physical) counter.setupType = 'Special'; } else { - counter.setupType = physical > special ? 'Physical' : 'Special'; - } - } else if (counter['physicalsetup'] && physical >= 1) { - if (physical >= 2 || moves.includes('rest') && moves.includes('sleeptalk')) { - counter.setupType = 'Physical'; - } - } else if (counter['specialsetup'] && special >= 1) { - if (special >= 2 || moves.includes('rest') && moves.includes('sleeptalk')) { - counter.setupType = 'Special'; + counter.setupType = pool.Physical > pool.Special ? 'Physical' : 'Special'; } + // @ts-ignore + } else if (!pool[counter.setupType] || pool[counter.setupType] === 1 && (!moves.includes('rest') || !moves.includes('sleeptalk'))) { + counter.setupType = ''; } } + counter['Physical'] = Math.floor(counter['Physical']); + counter['Special'] = Math.floor(counter['Special']); return counter; } - randomSet(template, slot, teamDetails) { - if (slot === undefined) slot = 1; - let baseTemplate = (template = this.getTemplate(template)); + + /** + * @param {string | Template} template + * @param {number} [slot] + * @param {RandomTeamsTypes["TeamDetails"]} [teamDetails] + * @param {boolean} [isDoubles] + * @return {RandomTeamsTypes["RandomSet"]} + */ + randomSet(template, slot = 1, teamDetails = {}, isDoubles = false) { + template = this.getTemplate(template); + let baseTemplate = template; let species = template.species; - if (!template.exists || (!template.randomBattleMoves && !template.learnset)) { + if (!template.exists || ((!isDoubles || !template.randomDoubleBattleMoves) && !template.randomBattleMoves && !template.learnset)) { // GET IT? UNOWN? BECAUSE WE CAN'T TELL WHAT THE POKEMON IS template = this.getTemplate('unown'); let err = new Error('Template incompatible with random battles: ' + species); - require('../crashlogger')(err, 'The randbat set generator'); + Monitor.crashlog(err, 'The randbat set generator'); } - if (typeof teamDetails !== 'object') teamDetails = {megaStone: teamDetails}; - if (template.battleOnly) { // Only change the species. The template has custom moves, and may have different typing and requirements. species = template.baseSpecies; } let battleForme = this.checkBattleForme(template); - if (battleForme && battleForme.randomBattleMoves && (battleForme.isMega ? !teamDetails.megaStone : this.random(2))) { - template = this.getTemplate(template.otherFormes.length >= 2 ? template.otherFormes[this.random(template.otherFormes.length)] : template.otherFormes[0]); + if (battleForme && battleForme.randomBattleMoves && template.otherFormes && (battleForme.isMega ? !teamDetails.megaStone : this.random(2))) { + template = this.getTemplate(template.otherFormes.length >= 2 ? this.sample(template.otherFormes) : template.otherFormes[0]); } - let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : Object.keys(template.learnset)); + const randMoves = !isDoubles ? template.randomBattleMoves : template.randomDoubleBattleMoves || template.randomBattleMoves; + let movePool = (randMoves ? randMoves.slice() : template.learnset ? Object.keys(template.learnset) : []); + /**@type {string[]} */ let moves = []; let ability = ''; let item = ''; @@ -539,53 +645,53 @@ class RandomTeams extends Dex.ModdedDex { spd: 31, spe: 31, }; + /**@type {{[k: string]: true}} */ let hasType = {}; hasType[template.types[0]] = true; if (template.types[1]) { hasType[template.types[1]] = true; } + /**@type {{[k: string]: true}} */ let hasAbility = {}; hasAbility[template.abilities[0]] = true; if (template.abilities[1]) { + // @ts-ignore hasAbility[template.abilities[1]] = true; } if (template.abilities['H']) { + // @ts-ignore hasAbility[template.abilities['H']] = true; } let availableHP = 0; - for (let i = 0, len = movePool.length; i < len; i++) { - if (movePool[i].substr(0, 11) === 'hiddenpower') availableHP++; + 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: - let SetupException = { - closecombat:1, extremespeed:1, suckerpunch:1, superpower:1, - dracometeor:1, leafstorm:1, overheat:1, - }; - let counterAbilities = { - 'Adaptability':1, 'Contrary':1, 'Hustle':1, 'Iron Fist':1, 'Skill Link':1, - }; - let ateAbilities = { - 'Aerilate':1, 'Pixilate':1, 'Refrigerate':1, - }; + let SetupException = ['closecombat', 'extremespeed', 'superpower', 'clangingscales', 'dracometeor', 'leafstorm', 'overheat']; + + let counterAbilities = ['Adaptability', 'Contrary', 'Hustle', 'Iron Fist', 'Skill Link']; + let ateAbilities = ['Aerilate', 'Galvanize', 'Pixilate', 'Refrigerate']; - let hasMove, counter; + /**@type {{[k: string]: boolean}} */ + let hasMove = {}; + let counter; do { // Keep track of all moves we have: hasMove = {}; - for (let k = 0; k < moves.length; k++) { - if (moves[k].substr(0, 11) === 'hiddenpower') { + for (const moveid of moves) { + if (moveid.startsWith('hiddenpower')) { hasMove['hiddenpower'] = true; } else { - hasMove[moves[k]] = true; + hasMove[moveid] = true; } } // Choose next 4 moves from learnset/viable moves and add them to moves list: while (moves.length < 4 && movePool.length) { let moveid = this.sampleNoReplace(movePool); - if (moveid.substr(0, 11) === 'hiddenpower') { + if (moveid.startsWith('hiddenpower')) { availableHP--; if (hasMove['hiddenpower']) continue; hasMove['hiddenpower'] = true; @@ -598,16 +704,22 @@ class RandomTeams extends Dex.ModdedDex { counter = this.queryMoves(moves, hasType, hasAbility, movePool); // Iterate through the moves again, this time to cull them: - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); + for (const [k, moveId] of moves.entries()) { + let move = this.getMove(moveId); let moveid = move.id; let rejected = false; let isSetup = false; switch (moveid) { // Not very useful without their supporting moves - case 'batonpass': - if (!counter.setupType && !counter['speedsetup'] && !hasMove['substitute'] && !hasMove['wish'] && !hasAbility['Speed Boost']) rejected = true; + case 'clangingscales': case 'happyhour': + if (teamDetails.zMove || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + break; + case 'cottonguard': case 'defendorder': + if (!counter['recovery'] && !hasMove['rest']) rejected = true; + break; + case 'bounce': case 'dig': case 'fly': + if (teamDetails.zMove || counter.setupType !== 'Physical') rejected = true; break; case 'focuspunch': if (!hasMove['substitute'] || counter.damagingMoves.length < 2) rejected = true; @@ -615,10 +727,16 @@ class RandomTeams extends Dex.ModdedDex { case 'perishsong': if (!hasMove['protect']) rejected = true; break; - case 'rest': { + case 'reflect': + if (!hasMove['calmmind'] && !hasMove['lightscreen']) rejected = true; + if (movePool.length > 1) { + let screen = movePool.indexOf('lightscreen'); + if (screen >= 0) this.fastPop(movePool, screen); + } + break; + case 'rest': if (movePool.includes('sleeptalk')) rejected = true; break; - } case 'sleeptalk': if (!hasMove['rest']) rejected = true; if (movePool.length > 1) { @@ -635,27 +753,26 @@ class RandomTeams extends Dex.ModdedDex { if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) { if (!hasMove['growth'] || hasMove['sunnyday']) rejected = true; } - if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + if (counter.Physical + counter['physicalpool'] < 2 && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; isSetup = true; break; case 'calmmind': case 'geomancy': case 'nastyplot': case 'quiverdance': case 'tailglow': if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; - if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; + if (counter.Special + counter['specialpool'] < 2 && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; isSetup = true; break; case 'growth': case 'shellsmash': case 'workup': if (counter.setupType !== 'Mixed' || counter['mixedsetup'] > 1) rejected = true; - if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2 && !hasMove['batonpass']) rejected = true; + if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2) rejected = true; if (moveid === 'growth' && !hasMove['sunnyday']) rejected = true; isSetup = true; break; case 'agility': case 'autotomize': case 'rockpolish': - if (counter.damagingMoves.length < 2 && !hasMove['batonpass']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (counter.damagingMoves.length < 2 || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; if (!counter.setupType) isSetup = true; break; case 'flamecharge': - if (counter.damagingMoves.length < 3 && !counter.setupType && !hasMove['batonpass']) rejected = true; + if (counter.damagingMoves.length < 3 && !counter.setupType) rejected = true; if (hasMove['dracometeor'] || hasMove['overheat']) rejected = true; break; case 'conversion': @@ -668,9 +785,9 @@ class RandomTeams extends Dex.ModdedDex { if (!!counter['speedsetup'] || hasMove['encore'] || hasMove['raindance'] || hasMove['roar'] || hasMove['whirlwind']) rejected = true; break; case 'defog': - if (counter.setupType || hasMove['spikes'] || (hasMove['rest'] && hasMove['sleeptalk']) || teamDetails.hazardClear) rejected = true; + if (counter.setupType || hasMove['spikes'] || hasMove['stealthrock'] || (hasMove['rest'] && hasMove['sleeptalk']) || teamDetails.hazardClear) rejected = true; break; - case 'fakeout': case 'superfang': + case 'fakeout': if (counter.setupType || hasMove['substitute'] || hasMove['switcheroo'] || hasMove['trick']) rejected = true; break; case 'foulplay': @@ -686,15 +803,18 @@ class RandomTeams extends Dex.ModdedDex { case 'healingwish': case 'memento': if (counter.setupType || !!counter['recovery'] || hasMove['substitute']) rejected = true; break; - case 'nightshade': case 'seismictoss': - if (counter.stab || counter.setupType || counter.damagingMoves.length > 2) rejected = true; + case 'leechseed': case 'roar': case 'whirlwind': + if (counter.setupType || !!counter['speedsetup'] || hasMove['dragontail']) rejected = true; + break; + case 'nightshade': case 'seismictoss': case 'superfang': + if (counter.damagingMoves.length > 1 || counter.setupType) rejected = true; break; case 'protect': - if (counter.setupType && (hasAbility['Guts'] || hasAbility['Speed Boost']) && !hasMove['batonpass']) rejected = true; - if ((hasMove['lightscreen'] && hasMove['reflect']) || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (counter.setupType && !hasMove['wish']) rejected = true; + if (hasMove['rest'] || hasMove['lightscreen'] && hasMove['reflect']) rejected = true; break; case 'pursuit': - if (counter.setupType || (hasMove['rest'] && hasMove['sleeptalk']) || (hasMove['knockoff'] && !hasType['Dark'])) rejected = true; + if (counter.setupType || (hasMove['rest'] && hasMove['sleeptalk']) || counter['Dark'] > 2 || (hasMove['knockoff'] && !hasType['Dark'])) rejected = true; break; case 'rapidspin': if (counter.setupType || teamDetails.hazardClear) rejected = true; @@ -702,9 +822,6 @@ class RandomTeams extends Dex.ModdedDex { case 'reversal': if (hasMove['substitute'] && teamDetails.zMove) rejected = true; break; - case 'roar': case 'whirlwind': - if (counter.setupType || hasMove['dragontail']) rejected = true; - break; case 'stealthrock': if (counter.setupType || !!counter['speedsetup'] || hasMove['rest'] || teamDetails.stealthRock) rejected = true; break; @@ -720,12 +837,11 @@ class RandomTeams extends Dex.ModdedDex { if (hasMove['lightscreen'] || hasMove['reflect']) rejected = true; break; case 'uturn': - if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass']) rejected = true; + if (counter.setupType || !!counter['speedsetup'] || hasAbility['Protean'] && counter.Status > 2) rejected = true; if (hasType['Bug'] && counter.stab < 2 && counter.damagingMoves.length > 2 && !hasAbility['Adaptability'] && !hasMove['technoblast']) rejected = true; break; case 'voltswitch': - if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass'] || hasMove['magnetrise'] || hasMove['uturn']) rejected = true; - if (hasMove['nuzzle'] && hasMove['thunderbolt']) rejected = true; + if (counter.setupType || !!counter['speedsetup'] || hasMove['magnetrise'] || hasMove['uturn']) rejected = true; break; // Bit redundant to have both @@ -736,17 +852,19 @@ class RandomTeams extends Dex.ModdedDex { case 'lunge': if (hasMove['leechlife']) rejected = true; break; + case 'darkestlariat': case 'nightslash': + if (hasMove['knockoff'] || hasMove['pursuit']) rejected = true; + break; case 'darkpulse': if (hasMove['shadowball']) rejected = true; if ((hasMove['crunch'] || hasMove['hyperspacefury']) && counter.setupType !== 'Special') rejected = true; break; case 'suckerpunch': - if (counter['Dark'] > 2 || (counter.setupType === 'Special' && hasType['Dark'] && counter.stab < 2)) rejected = true; if (counter['Dark'] > 1 && !hasType['Dark']) rejected = true; if (counter.damagingMoves.length < 2 || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; break; case 'dragonclaw': - if (hasMove['outrage'] || hasMove['dragontail']) rejected = true; + if (hasMove['dragontail'] || hasMove['outrage']) rejected = true; break; case 'dracometeor': if (hasMove['swordsdance'] || counter.setupType === 'Physical' && hasMove['outrage']) rejected = true; @@ -756,6 +874,7 @@ class RandomTeams extends Dex.ModdedDex { break; case 'outrage': if (hasMove['dracometeor'] && counter.damagingMoves.length < 3) rejected = true; + if (hasMove['clangingscales'] && !teamDetails.zMove) rejected = true; break; case 'chargebeam': if (hasMove['thunderbolt'] && counter.Special < 3) rejected = true; @@ -765,13 +884,18 @@ class RandomTeams extends Dex.ModdedDex { break; case 'thunderbolt': if (hasMove['discharge'] || (hasMove['raindance'] && hasMove['thunder']) || (hasMove['voltswitch'] && hasMove['wildcharge'])) rejected = true; - if (!counter.setupType && !counter['speedsetup'] && hasMove['voltswitch'] && template.types.length > 1 && !counter[template.types.find(type => type !== 'Electric')]) rejected = true; + break; + case 'thunderpunch': + if (hasAbility['Galvanize'] && !!counter['Normal']) rejected = true; break; case 'dazzlinggleam': if (hasMove['playrough'] && counter.setupType !== 'Special') rejected = true; break; case 'drainingkiss': - if (hasMove['dazzlinggleam'] || counter.setupType !== 'Special' && !hasAbility['triage']) rejected = true; + if (hasMove['dazzlinggleam'] || counter.setupType !== 'Special' && !hasAbility['Triage']) rejected = true; + break; + case 'moonblast': + if (isDoubles && hasMove['dazzlinggleam']) rejected = true; break; case 'aurasphere': case 'focusblast': if ((hasMove['closecombat'] || hasMove['superpower']) && counter.setupType !== 'Special') rejected = true; @@ -779,7 +903,7 @@ class RandomTeams extends Dex.ModdedDex { break; case 'drainpunch': if (!hasMove['bulkup'] && (hasMove['closecombat'] || hasMove['highjumpkick'])) rejected = true; - if (hasMove['focusblast'] || hasMove['superpower']) rejected = true; + if ((hasMove['focusblast'] || hasMove['superpower']) && counter.setupType !== 'Physical') rejected = true; break; case 'closecombat': case 'highjumpkick': if ((hasMove['aurasphere'] || hasMove['focusblast'] || movePool.includes('aurasphere')) && counter.setupType === 'Special') rejected = true; @@ -794,37 +918,28 @@ class RandomTeams extends Dex.ModdedDex { case 'superpower': if (counter['Fighting'] > 1 && counter.setupType) rejected = true; if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; + if (hasAbility['Contrary']) isSetup = true; break; case 'vacuumwave': if ((hasMove['closecombat'] || hasMove['machpunch']) && counter.setupType !== 'Special') rejected = true; break; - case 'blazekick': - if (hasMove['flamethrower'] && counter.setupType !== 'Physical') rejected = true; - break; - case 'fierydance': case 'firefang': case 'flamethrower': - if ((hasMove['fireblast'] && counter.setupType !== 'Physical') || hasMove['overheat']) rejected = true; + case 'fierydance': case 'firefang': case 'firepunch': case 'flamethrower': case 'flareblitz': + if (hasMove['blazekick'] || hasMove['heatwave'] || hasMove['overheat'] || hasMove['sacredfire']) rejected = true; + if (hasMove['fireblast'] && counter.setupType !== 'Physical' && !hasAbility['Reckless']) rejected = true; break; case 'fireblast': if (hasMove['lavaplume'] && !counter.setupType && !counter['speedsetup']) rejected = true; - if (hasMove['flareblitz'] && counter.setupType !== 'Special') rejected = true; - break; - case 'firepunch': case 'sacredfire': - if (hasMove['fireblast'] || hasMove['flareblitz']) rejected = true; + if (hasMove['mindblown'] && counter.setupType) rejected = true; + if (hasMove['flareblitz'] && hasAbility['Reckless']) rejected = true; break; case 'lavaplume': - if (hasMove['fireblast'] && (counter.setupType || !!counter['speedsetup'])) rejected = true; + if (hasMove['firepunch'] || hasMove['fireblast'] && (counter.setupType || !!counter['speedsetup'])) rejected = true; break; case 'overheat': - if (hasMove['lavaplume'] || counter.setupType === 'Special') rejected = true; + if (hasMove['fireblast'] || hasMove['lavaplume'] || counter.setupType === 'Special') rejected = true; break; - case 'acrobatics': - if (hasMove['hurricane'] && counter.setupType !== 'Physical') rejected = true; - break; - case 'airslash': case 'oblivionwing': - if (hasMove['acrobatics'] || hasMove['bravebird'] || hasMove['hurricane']) rejected = true; - break; - case 'fly': - if (teamDetails.zMove || counter.setupType !== 'Physical') rejected = true; + case 'airslash': case 'hurricane': + if (hasMove['acrobatics'] || hasMove['bravebird']) rejected = true; break; case 'hex': if (!hasMove['willowisp']) rejected = true; @@ -833,24 +948,29 @@ class RandomTeams extends Dex.ModdedDex { if (hasMove['hex'] && hasMove['willowisp']) rejected = true; break; case 'shadowclaw': - if (hasMove['phantomforce'] || (hasMove['shadowball'] && counter.setupType !== 'Physical') || hasMove['shadowsneak']) rejected = true; + if (hasMove['phantomforce'] || hasMove['shadowforce'] || hasMove['shadowsneak']) rejected = true; + if (hasMove['shadowball'] && counter.setupType !== 'Physical') rejected = true; break; case 'shadowsneak': if (hasType['Ghost'] && template.types.length > 1 && counter.stab < 2) rejected = true; if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; break; - case 'solarbeam': - if ((!hasAbility['Drought'] && !hasMove['sunnyday']) || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; - break; case 'gigadrain': - if (hasMove['petaldance'] || !counter.setupType && hasMove['leafstorm']) rejected = true; + if (hasMove['petaldance'] || hasMove['powerwhip'] || (hasMove['seedbomb'] && !isDoubles)) rejected = true; + if (counter.Special < 4 && !counter.setupType && hasMove['leafstorm']) rejected = true; break; - case 'leafblade': case 'seedbomb': case 'woodhammer': + case 'leafblade': case 'woodhammer': if (hasMove['gigadrain'] && counter.setupType !== 'Physical') rejected = true; break; case 'leafstorm': if (counter['Grass'] > 1 && counter.setupType) rejected = true; break; + case 'seedbomb': + if (isDoubles && hasMove['gigadrain']) rejected = true; + break; + case 'solarbeam': + if ((!hasAbility['Drought'] && !hasMove['sunnyday']) || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; + break; case 'bonemerang': case 'precipiceblades': if (hasMove['earthquake']) rejected = true; break; @@ -864,7 +984,7 @@ class RandomTeams extends Dex.ModdedDex { if (hasMove['freezedry']) rejected = true; break; case 'bodyslam': - if (hasMove['glare'] || hasMove['headbutt']) rejected = true; + if (hasMove['glare'] && hasMove['headbutt']) rejected = true; break; case 'endeavor': if (slot > 0) rejected = true; @@ -882,14 +1002,14 @@ class RandomTeams extends Dex.ModdedDex { if (hasMove['rest'] || !counter.stab && counter.damagingMoves.length < 2) rejected = true; break; case 'hypervoice': - if (hasMove['naturepower'] || hasMove['return']) rejected = true; - if (hasAbility['Liquid Voice'] && hasMove['scald']) rejected = true; + if (hasMove['blizzard'] || hasMove['naturepower'] || hasMove['return']) rejected = true; break; case 'judgment': if (counter.setupType !== 'Special' && counter.stab > 1) rejected = true; break; case 'quickattack': - if (hasType['Normal'] && counter['Normal'] > 1 && template.types.length > 1 && counter.stab < 2) rejected = true; + if (hasType['Normal'] && (!counter.stab || counter['Normal'] > 2)) rejected = true; + if (hasMove['feint']) rejected = true; break; case 'return': case 'rockclimb': if (hasMove['bodyslam'] || hasMove['doubleedge']) rejected = true; @@ -906,11 +1026,12 @@ class RandomTeams extends Dex.ModdedDex { case 'sludgewave': if (hasMove['poisonjab']) rejected = true; break; - case 'psychic': - if (hasMove['psyshock'] || hasMove['storedpower']) rejected = true; + case 'photongeyser': case 'psychic': + if (hasMove['psyshock'] || counter.setupType === 'Special' && hasMove['storedpower']) rejected = true; break; case 'psychocut': case 'zenheadbutt': if ((hasMove['psychic'] || hasMove['psyshock']) && counter.setupType !== 'Physical') rejected = true; + if (hasAbility['Contrary'] && !counter.setupType && !!counter['physicalpool']) rejected = true; break; case 'psyshock': if (movePool.length > 1) { @@ -919,19 +1040,23 @@ class RandomTeams extends Dex.ModdedDex { } break; case 'headsmash': - if (hasMove['stoneedge']) rejected = true; + if (hasMove['stoneedge'] || isDoubles && hasMove['rockslide']) rejected = true; break; case 'rockblast': case 'rockslide': - if (hasMove['headsmash'] || hasMove['stoneedge']) rejected = true; + if ((hasMove['headsmash'] || hasMove['stoneedge']) && !isDoubles) rejected = true; + break; + case 'stoneedge': + if (isDoubles && hasMove['rockslide']) rejected = true; break; case 'bulletpunch': if (hasType['Steel'] && counter.stab < 2 && !hasAbility['Adaptability'] && !hasAbility['Technician']) rejected = true; break; case 'flashcannon': - if (hasMove['ironhead']) rejected = true; + if (hasMove['ironhead'] || hasMove['meteormash']) rejected = true; break; case 'hydropump': - if (hasMove['razorshell'] || hasMove['scald'] || hasMove['waterfall'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (hasMove['liquidation'] || hasMove['razorshell'] || hasMove['waterfall'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (hasMove['scald'] && (counter.Special < 4 || template.types.length > 1 && counter.stab < 3)) rejected = true; break; case 'originpulse': case 'surf': if (hasMove['hydropump'] || hasMove['scald']) rejected = true; @@ -941,6 +1066,16 @@ class RandomTeams extends Dex.ModdedDex { break; // Status: + case 'electroweb': case 'stunspore': case 'thunderwave': + if (counter.setupType || !!counter['speedsetup'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; + if (hasMove['discharge'] || hasMove['gyroball'] || hasMove['spore'] || hasMove['toxic'] || hasMove['trickroom'] || hasMove['yawn']) rejected = true; + break; + case 'toxic': + if (counter.setupType || hasMove['flamecharge'] || hasMove['hypnosis'] || hasMove['sleeppowder'] || hasMove['willowisp'] || hasMove['yawn']) rejected = true; + break; + case 'willowisp': + if (hasMove['scald']) rejected = true; + break; case 'raindance': if (counter.Physical + counter.Special < 2 || hasMove['rest'] && hasMove['sleeptalk']) rejected = true; if (!hasType['Water'] && !hasMove['thunder']) rejected = true; @@ -957,18 +1092,7 @@ class RandomTeams extends Dex.ModdedDex { } } break; - case 'stunspore': case 'thunderwave': - if (counter.setupType || !!counter['speedsetup'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; - if (hasMove['discharge'] || hasMove['gyroball'] || hasMove['spore'] || hasMove['toxic'] || hasMove['trickroom'] || hasMove['yawn']) rejected = true; - break; - case 'toxic': - if (counter.setupType || hasMove['flamecharge'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; - if (hasMove['hypnosis'] || hasMove['sleeppowder'] || hasMove['willowisp'] || hasMove['yawn']) rejected = true; - break; - case 'willowisp': - if (hasMove['scald']) rejected = true; - break; - case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'softboiled': case 'synthesis': + case 'milkdrink': case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'softboiled': case 'synthesis': if (hasMove['leechseed'] || hasMove['rest'] || hasMove['wish']) rejected = true; break; case 'safeguard': @@ -977,6 +1101,12 @@ class RandomTeams extends Dex.ModdedDex { case 'substitute': if (hasMove['dracometeor'] || (hasMove['leafstorm'] && !hasAbility['Contrary']) || hasMove['pursuit'] || hasMove['rest'] || hasMove['taunt'] || hasMove['uturn'] || hasMove['voltswitch']) rejected = true; break; + case 'powersplit': + if (hasMove['guardsplit']) rejected = true; + break; + case 'wideguard': + if (hasMove['protect']) rejected = true; + break; } // Increased/decreased priority moves are unneeded with moves that boost only speed @@ -995,11 +1125,13 @@ class RandomTeams extends Dex.ModdedDex { // 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 - if (!SetupException[moveid] && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; + if (!SetupException.includes(moveid) && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; } - if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { + // @ts-ignore + if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2 && moveid !== 'rest' && moveid !== 'sleeptalk') { // Mono-attacking with setup and RestTalk is allowed // Reject Status moves only if there is nothing else to reject + // @ts-ignore if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; } if (counter.setupType === 'Special' && moveid === 'hiddenpower' && template.types.length > 1 && counter['Special'] <= 2 && !hasType[move.type] && !counter['Physical'] && counter['specialpool']) { @@ -1007,35 +1139,38 @@ class RandomTeams extends Dex.ModdedDex { rejected = true; } - // Pokemon should have moves that benefit their Ability/Type/Weather, as well as moves required by its forme - if ((hasType['Bug'] && !hasMove['batonpass'] && (movePool.includes('megahorn') || movePool.includes('pinmissile') || (hasType['Flying'] && !hasMove['hurricane'] && movePool.includes('bugbuzz')))) || - (hasType['Dark'] && hasMove['suckerpunch'] && counter.stab < template.types.length) || + // Pokemon should have moves that benefit their Type/Ability/Weather, as well as moves required by its forme + // @ts-ignore + if (!rejected && (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3)) && + ((counter.damagingMoves.length === 0 && !hasMove['metalburst']) || + (!counter.stab && (template.types.length > 1 || (template.types[0] !== 'Normal' && template.types[0] !== 'Psychic') || !hasMove['icebeam'] || template.baseStats.spa >= template.baseStats.spd) && (!!counter['physicalpool'] || !!counter['specialpool'])) || + (hasType['Bug'] && (movePool.includes('megahorn') || movePool.includes('pinmissile') || (hasType['Flying'] && !hasMove['hurricane'] && movePool.includes('bugbuzz')))) || + ((hasType['Dark'] && !counter['Dark']) || hasMove['suckerpunch'] && !hasAbility['Contrary'] && counter.stab < template.types.length) || (hasType['Dragon'] && !counter['Dragon'] && !hasAbility['Aerilate'] && !hasAbility['Pixilate'] && !hasMove['rest'] && !hasMove['sleeptalk']) || - (hasType['Electric'] && !counter['Electric']) || + (hasType['Electric'] && !counter['Electric'] && !hasAbility['Galvanize']) || (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'])) || (hasType['Fire'] && !counter['Fire']) || - (hasType['Ground'] && !counter['Ground'] && (counter.setupType || counter['speedsetup'] || hasMove['raindance'] || !counter['Status'])) || + (hasType['Ghost'] && !hasType['Dark'] && !counter['Ghost'] && !hasAbility['Steelworker']) || + (hasType['Grass'] && !hasType['Fairy'] && !hasType['Poison'] && !hasType['Steel'] && !counter['Grass']) || + (hasType['Ground'] && !counter['Ground'] && !hasMove['rest'] && !hasMove['sleeptalk']) || (hasType['Ice'] && !counter['Ice'] && !hasAbility['Refrigerate']) || (hasType['Psychic'] && !!counter['Psychic'] && !hasType['Flying'] && !hasAbility['Pixilate'] && template.types.length > 1 && counter.stab < 2) || - (hasType['Water'] && !counter['Water'] && (!hasType['Ice'] || !counter['Ice']) && !hasAbility['Protean']) || + (((hasType['Steel'] && hasAbility['Technician']) || hasAbility['Steelworker']) && !counter['Steel']) || + (hasType['Water'] && (!counter['Water'] || !counter.stab) && !hasAbility['Protean']) || + // @ts-ignore ((hasAbility['Adaptability'] && !counter.setupType && template.types.length > 1 && (!counter[template.types[0]] || !counter[template.types[1]])) || - ((hasAbility['Aerilate'] || hasAbility['Pixilate'] || hasAbility['Refrigerate']) && !counter['Normal']) || + ((hasAbility['Aerilate'] || (hasAbility['Galvanize'] && !counter['Electric']) || hasAbility['Pixilate'] || (hasAbility['Refrigerate'] && !hasMove['blizzard'])) && !counter['Normal']) || (hasAbility['Contrary'] && !counter['contrary'] && template.species !== 'Shuckle') || (hasAbility['Dark Aura'] && !counter['Dark']) || - (hasAbility['Electric Surge'] && !counter['Electric']) || (hasAbility['Gale Wings'] && !counter['Flying']) || - (hasAbility['Grassy Surge'] && !counter['Grass']) || (hasAbility['Guts'] && hasType['Normal'] && movePool.includes('facade')) || (hasAbility['Psychic Surge'] && !counter['Psychic']) || (hasAbility['Slow Start'] && movePool.includes('substitute')) || (hasAbility['Stance Change'] && !counter.setupType && movePool.includes('kingsshield')) || - (hasAbility['Water Bubble'] && !counter['Water']) || - (counter['defensesetup'] && !counter.recovery && !hasMove['rest']) || - (movePool.includes('technoblast') || template.requiredMove && movePool.includes(toId(template.requiredMove)))) && - (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3))) { + (movePool.includes('technoblast') || template.requiredMove && movePool.includes(toId(template.requiredMove)))))) { // Reject Status or non-STAB - if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk') { - if (move.category === 'Status' || !hasType[move.type] || (move.basePower && move.basePower < 40 && !move.multihit)) rejected = true; + if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk' && moveid !== 'technoblast') { + if (move.category === 'Status' || !hasType[move.type] || move.selfSwitch || move.basePower && move.basePower < 40 && !move.multihit) rejected = true; } } @@ -1057,238 +1192,220 @@ class RandomTeams extends Dex.ModdedDex { break; } } - if (moves.length === 4 && !counter.stab && !hasMove['metalburst'] && (counter['physicalpool'] || counter['specialpool'])) { - // Move post-processing: - if (counter.damagingMoves.length === 0) { - // A set shouldn't have no attacking moves - moves.splice(this.random(moves.length), 1); - } else if (counter.damagingMoves.length === 1) { - // In most cases, a set shouldn't have no STAB - let damagingid = counter.damagingMoves[0].id; - if (movePool.length - availableHP || availableHP && (damagingid === 'hiddenpower' || !hasMove['hiddenpower'])) { - let replace = false; - if (!counter.damagingMoves[0].damage && template.species !== 'Porygon2') { - let damagingType = counter.damagingMoves[0].type; - if (damagingType === 'Fairy') { - // Mono-Fairy is acceptable for Psychic types - if (counter.setupType !== 'Special' || template.types.length > 1 || !hasType['Psychic']) replace = true; - } else { - replace = true; - } - } - if (replace) moves.splice(counter.damagingMoveIndex[damagingid], 1); - } - } else if (!counter.damagingMoves[0].damage && !counter.damagingMoves[1].damage && template.species !== 'Porygon2') { - // If you have three or more attacks, and none of them are STAB, reject one of them at random. - let rejectableMoves = []; - let baseDiff = movePool.length - availableHP; - for (let l = 0; l < counter.damagingMoves.length; l++) { - if (counter.damagingMoves[l].id === 'technoblast') continue; - if (baseDiff || availableHP && (!hasMove['hiddenpower'] || counter.damagingMoves[l].id === 'hiddenpower')) { - rejectableMoves.push(counter.damagingMoveIndex[counter.damagingMoves[l].id]); - } - } - if (rejectableMoves.length) { - moves.splice(rejectableMoves[this.random(rejectableMoves.length)], 1); - } - } - } } while (moves.length < 4 && movePool.length); // Moveset modifications if (hasMove['autotomize'] && hasMove['heavyslam']) { - moves[moves.indexOf('autotomize')] = 'rockpolish'; + if (template.id === 'celesteela') { + moves[moves.indexOf('heavyslam')] = 'flashcannon'; + } else { + moves[moves.indexOf('autotomize')] = 'rockpolish'; + } } if (moves[0] === 'conversion') { moves[0] = moves[3]; moves[3] = 'conversion'; } + /**@type {[string, string | undefined, string | undefined]} */ + // @ts-ignore let abilities = Object.values(baseTemplate.abilities); abilities.sort((a, b) => this.getAbility(b).rating - this.getAbility(a).rating); let ability0 = this.getAbility(abilities[0]); let ability1 = this.getAbility(abilities[1]); let ability2 = this.getAbility(abilities[2]); - ability = ability0.name; if (abilities[1]) { - if (abilities[2] && ability2.rating === ability1.rating) { - if (this.random(2)) ability1 = ability2; - } - if (ability0.rating <= ability1.rating) { - if (this.random(2)) ability = ability1.name; - } else if (ability0.rating - 0.6 <= ability1.rating) { - if (!this.random(3)) ability = ability1.name; - } - - let rejectAbility = false; - if (ability in counterAbilities) { - // Adaptability, Contrary, Hustle, Iron Fist, Skill Link - rejectAbility = !counter[toId(ability)]; - } else if (ability in ateAbilities) { - rejectAbility = !counter['Normal']; - } else if (ability === 'Blaze') { - rejectAbility = !counter['Fire']; - } else if (ability === 'Chlorophyll') { - rejectAbility = !hasMove['sunnyday']; - } else if (ability === 'Compound Eyes' || ability === 'No Guard') { - rejectAbility = !counter['inaccurate']; - } else if (ability === 'Defiant' || ability === 'Moxie') { - rejectAbility = !counter['Physical'] && !hasMove['batonpass']; - } else if (ability === 'Flare Boost' || ability === 'Moody') { - rejectAbility = true; - } else if (ability === 'Gluttony') { - rejectAbility = !hasMove['bellydrum']; - } else if (ability === 'Lightning Rod') { - rejectAbility = template.types.includes('Ground'); - } else if (ability === 'Limber') { - rejectAbility = template.types.includes('Electric'); - } else if (ability === 'Liquid Voice') { - rejectAbility = !hasMove['hypervoice']; - } else if (ability === 'Overgrow') { - rejectAbility = !counter['Grass']; - } else if (ability === 'Poison Heal') { - rejectAbility = abilities.includes('Technician') && !!counter['technician']; - } else if (ability === 'Prankster') { - rejectAbility = !counter['Status']; - } else if (ability === 'Quick Feet') { - rejectAbility = hasMove['bellydrum']; - } else if (ability === 'Reckless' || ability === 'Rock Head') { - rejectAbility = !counter['recoil']; - } else if (ability === 'Sand Veil') { - rejectAbility = !teamDetails['sand']; - } else if (ability === 'Serene Grace') { - rejectAbility = !counter['serenegrace'] || template.id === 'chansey' || template.id === 'blissey'; - } else if (ability === 'Sheer Force') { - rejectAbility = !counter['sheerforce'] || (abilities.includes('Iron Fist') && counter['sheerforce'] < 2 && counter['ironfist'] > counter['sheerforce']); - } else if (ability === 'Simple') { - rejectAbility = !counter.setupType && !hasMove['cosmicpower'] && !hasMove['flamecharge']; - } else if (ability === 'Snow Cloak') { - rejectAbility = !teamDetails['hail']; - } else if (ability === 'Solar Power') { - rejectAbility = !counter['Special'] || template.isMega; - } else if (ability === 'Strong Jaw') { - rejectAbility = !counter['bite']; - } else if (ability === 'Sturdy') { - rejectAbility = !!counter['recoil'] && !counter['recovery']; - } else if (ability === 'Swift Swim') { - rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; - } else if (ability === 'Swarm') { - rejectAbility = !counter['Bug']; - } else if (ability === 'Synchronize') { - rejectAbility = counter.Status < 2; - } else if (ability === 'Technician') { - rejectAbility = !counter['technician'] || (abilities.includes('Skill Link') && counter['skilllink'] >= counter['technician']); - } else if (ability === 'Tinted Lens') { - rejectAbility = counter['damage'] >= counter.damagingMoves.length; - } else if (ability === 'Torrent') { - rejectAbility = !counter['Water']; - } else if (ability === 'Triage') { - rejectAbility = !counter['recovery'] && !counter['drain']; - } else if (ability === 'Unburden') { - rejectAbility = !counter.setupType && !hasMove['acrobatics']; - } - - if (rejectAbility) { - if (ability === ability1.name) { // or not - ability = ability0.name; - } else if (ability1.rating > 1) { // only switch if the alternative doesn't suck - ability = ability1.name; - } + if (abilities[2] && ability1.rating <= ability2.rating && this.randomChance(1, 2)) { + [ability1, ability2] = [ability2, ability1]; } - if (abilities.includes('Chlorophyll') && ability !== 'Solar Power' && hasMove['sunnyday']) { - ability = 'Chlorophyll'; + if (ability0.rating <= ability1.rating && this.randomChance(1, 2)) { + [ability0, ability1] = [ability1, ability0]; + } else if (ability0.rating - 0.6 <= ability1.rating && this.randomChance(2, 3)) { + [ability0, ability1] = [ability1, ability0]; } - if (abilities.includes('Guts') && ability !== 'Quick Feet' && (hasMove['facade'] || hasMove['protect'] || (hasMove['rest'] && hasMove['sleeptalk']))) { + ability = ability0.name; + + let rejectAbility; + do { + rejectAbility = false; + if (counterAbilities.includes(ability)) { + // Adaptability, Contrary, Hustle, Iron Fist, Skill Link + // @ts-ignore + rejectAbility = !counter[toId(ability)]; + } else if (ateAbilities.includes(ability)) { + rejectAbility = !counter['Normal']; + } else if (ability === 'Blaze') { + rejectAbility = !counter['Fire']; + } else if (ability === 'Chlorophyll') { + rejectAbility = !hasMove['sunnyday'] && !teamDetails['sun']; + } else if (ability === 'Competitive') { + rejectAbility = !counter['Special'] || (hasMove['rest'] && hasMove['sleeptalk']); + } else if (ability === 'Compound Eyes' || ability === 'No Guard') { + rejectAbility = !counter['inaccurate']; + } else if (ability === 'Defiant' || ability === 'Moxie') { + rejectAbility = !counter['Physical']; + } else if (ability === 'Flare Boost' || ability === 'Moody') { + rejectAbility = true; + } else if (ability === 'Gluttony') { + rejectAbility = !hasMove['bellydrum']; + } else if (ability === 'Hydration' || ability === 'Rain Dish' || ability === 'Swift Swim') { + rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; + } else if (ability === 'Ice Body' || ability === 'Slush Rush' || ability === 'Snow Cloak') { + rejectAbility = !teamDetails['hail']; + } else if (ability === 'Lightning Rod') { + rejectAbility = template.types.includes('Ground'); + } else if (ability === 'Limber') { + rejectAbility = template.types.includes('Electric'); + } else if (ability === 'Liquid Voice') { + rejectAbility = !hasMove['hypervoice']; + } else if (ability === 'Overgrow') { + rejectAbility = !counter['Grass']; + } else if (ability === 'Poison Heal') { + rejectAbility = abilities.includes('Technician') && !!counter['technician']; + } else if (ability === 'Power Construct') { + rejectAbility = template.forme === '10%' && !hasMove['substitute']; + } else if (ability === 'Prankster') { + rejectAbility = !counter['Status']; + } else if (ability === 'Pressure' || ability === 'Synchronize') { + rejectAbility = counter.Status < 2; + } else if (ability === 'Regenerator') { + rejectAbility = abilities.includes('Magic Guard'); + } else if (ability === 'Quick Feet') { + rejectAbility = hasMove['bellydrum']; + } else if (ability === 'Reckless' || ability === 'Rock Head') { + rejectAbility = !counter['recoil']; + } else if (ability === 'Sand Force' || ability === 'Sand Rush' || ability === 'Sand Veil') { + rejectAbility = !teamDetails['sand']; + } else if (ability === 'Scrappy') { + rejectAbility = !template.types.includes('Normal'); + } else if (ability === 'Serene Grace') { + rejectAbility = !counter['serenegrace'] || template.species === 'Blissey' || template.species === 'Togetic'; + } else if (ability === 'Sheer Force') { + rejectAbility = !counter['sheerforce'] || template.isMega || (abilities.includes('Iron Fist') && counter['ironfist'] > counter['sheerforce']); + } else if (ability === 'Simple') { + rejectAbility = !counter.setupType && !hasMove['cosmicpower'] && !hasMove['flamecharge']; + } else if (ability === 'Snow Warning') { + rejectAbility = hasMove['hypervoice']; + } else if (ability === 'Solar Power') { + rejectAbility = !counter['Special'] || template.isMega; + } else if (ability === 'Strong Jaw') { + rejectAbility = !counter['bite']; + } else if (ability === 'Sturdy') { + rejectAbility = !!counter['recoil'] && !counter['recovery']; + } else if (ability === 'Swarm') { + rejectAbility = !counter['Bug']; + } else if (ability === 'Technician') { + rejectAbility = !counter['technician'] || (abilities.includes('Skill Link') && counter['skilllink'] >= counter['technician']); + } else if (ability === 'Tinted Lens') { + rejectAbility = counter['damage'] >= counter.damagingMoves.length || (counter.Status > 2 && !counter.setupType); + } else if (ability === 'Torrent') { + rejectAbility = !counter['Water']; + } else if (ability === 'Triage') { + rejectAbility = !counter['recovery'] && !counter['drain']; + } else if (ability === 'Unburden') { + rejectAbility = template.isMega || (!counter.setupType && !hasMove['acrobatics']); + } else if (ability === 'Water Absorb') { + rejectAbility = abilities.includes('Volt Absorb') || (abilities.includes('Water Bubble') && !!counter['Water']); + } + + if (rejectAbility) { + if (ability === ability0.name && ability1.rating > 1) { + ability = ability1.name; + } else if (ability === ability1.name && abilities[2] && ability2.rating > 1) { + ability = ability2.name; + } else { + // Default to the highest rated ability if all are rejected + ability = abilities[0]; + rejectAbility = false; + } + } + } while (rejectAbility); + + if (abilities.includes('Galvanize') && !!counter['Normal']) { + ability = 'Galvanize'; + } else if (abilities.includes('Guts') && ability !== 'Quick Feet' && (hasMove['facade'] || hasMove['protect'] || (hasMove['rest'] && hasMove['sleeptalk']))) { ability = 'Guts'; - } - if (abilities.includes('Liquid Voice') && hasMove['hypervoice']) { - ability = 'Liquid Voice'; - } - if (abilities.includes('Marvel Scale') && hasMove['rest'] && hasMove['sleeptalk']) { - ability = 'Marvel Scale'; - } - if (abilities.includes('Prankster') && counter.Status > 1) { + } else if (abilities.includes('Prankster') && counter.Status > 1) { ability = 'Prankster'; - } - if (abilities.includes('Swift Swim') && hasMove['raindance']) { + } else if (abilities.includes('Swift Swim') && hasMove['raindance']) { ability = 'Swift Swim'; - } - if (abilities.includes('Triage') && hasMove['drainingkiss']) { + } else if (abilities.includes('Triage') && !!counter['drain']) { ability = 'Triage'; - } - if (abilities.includes('Unburden') && hasMove['acrobatics']) { + } else if (abilities.includes('Unburden') && hasMove['acrobatics']) { ability = 'Unburden'; + } else if (isDoubles && abilities.includes('Intimidate')) { + ability = 'Intimidate'; } - if (abilities.includes('Water Bubble') && counter['Water']) { - ability = 'Water Bubble'; - } - if (template.id === 'ambipom' && !counter['technician']) { + + if (template.species === 'Ambipom' && !counter['technician']) { // If it doesn't qualify for Technician, Skill Link is useless on it ability = 'Pickup'; - } else if (template.id === 'aurorus' && ability === 'Snow Warning' && hasMove['hypervoice']) { - for (let i = 0; i < moves.length; i++) { - if (moves[i] === 'hypervoice') { - moves[i] = 'blizzard'; - counter['Normal'] = 0; - break; - } - } } else if (template.baseSpecies === 'Basculin') { ability = 'Adaptability'; - } else if (template.id === 'lilligant' && hasMove['petaldance']) { - ability = 'Own Tempo'; - } else if (template.id === 'lopunny' && hasMove['switcheroo'] && this.random(3)) { + } else if (template.baseSpecies === 'Glalie') { + ability = 'Inner Focus'; + } else if (template.species === 'Lopunny' && hasMove['switcheroo'] && this.randomChance(2, 3)) { ability = 'Klutz'; - } else if (template.id === 'mawilemega') { - ability = 'Intimidate'; - } else if (template.id === 'rampardos' && !hasMove['headsmash']) { + } else if ((template.species === 'Rampardos' && !hasMove['headsmash']) || hasMove['rockclimb']) { ability = 'Sheer Force'; - } else if (template.id === 'rhyperior') { - ability = 'Solid Rock'; - } else if (template.id === 'reuniclus') { - ability = 'Magic Guard'; - } else if (template.id === 'togetic' || template.id === 'unfezant') { - ability = 'Super Luck'; + } else if (template.species === 'Torterra' && !counter['Grass']) { + ability = 'Shell Armor'; } else if (template.id === 'venusaurmega') { ability = 'Chlorophyll'; } + } else { + ability = ability0.name; } - if (hasMove['rockclimb'] && ability !== 'Sheer Force') { - moves[moves.indexOf('rockclimb')] = 'doubleedge'; - } - if (hasMove['thunderpunch'] && ability === 'Galvanize') { - moves[moves.indexOf('thunderpunch')] = 'return'; - } - - item = 'Leftovers'; + item = !isDoubles ? 'Leftovers' : 'Sitrus Berry'; if (template.requiredItems) { - if (template.baseSpecies === 'Arceus' && hasMove['judgment']) { + // @ts-ignore + if (template.baseSpecies === 'Arceus' && (hasMove['judgment'] || !counter[template.types[0]] || teamDetails.zMove)) { // Judgment doesn't change type with Z-Crystals item = template.requiredItems[0]; } else { - item = template.requiredItems[this.random(template.requiredItems.length)]; + item = this.sample(template.requiredItems); } - } else if (hasMove['magikarpsrevenge']) { - // PoTD Magikarp - item = 'Choice Band'; - } else if (template.species === 'Rotom-Fan') { - // This is just to amuse Zarel - item = 'Air Balloon'; // First, the extra high-priority items - } else if (template.species === 'Clamperl' && !hasMove['shellsmash']) { - item = 'Deep Sea Tooth'; } else if (template.species === 'Cubone' || template.baseSpecies === 'Marowak') { item = 'Thick Club'; + } else if (template.species === 'Decidueye' && hasMove['spiritshackle'] && counter.setupType && !teamDetails.zMove) { + item = 'Decidium Z'; } else if (template.species === 'Dedenne') { item = 'Petaya Berry'; } else if (template.species === 'Deoxys-Attack') { item = (slot === 0 && hasMove['stealthrock']) ? 'Focus Sash' : 'Life Orb'; } else if (template.species === 'Farfetch\'d') { item = 'Stick'; + } else if (template.species === 'Kommo-o' && !teamDetails.zMove) { + item = hasMove['clangingscales'] ? 'Kommonium Z' : 'Dragonium Z'; + } else if (template.species === 'Lycanroc' && hasMove['stoneedge'] && counter.setupType && !teamDetails.zMove) { + item = 'Lycanium Z'; + } else if (template.species === 'Marshadow' && hasMove['spectralthief'] && counter.setupType && !teamDetails.zMove) { + item = 'Marshadium Z'; + } else if (template.species === 'Mimikyu' && hasMove['playrough'] && counter.setupType && !teamDetails.zMove) { + item = 'Mimikium Z'; + } else if ((template.species === 'Necrozma-Dusk-Mane' || template.species === 'Necrozma-Dawn-Wings') && !teamDetails.zMove) { + if (hasMove['autotomize'] && hasMove['sunsteelstrike']) { + item = 'Solganium Z'; + } else if (hasMove['trickroom'] && hasMove['moongeistbeam']) { + item = 'Lunalium Z'; + } else { + item = 'Ultranecrozium Z'; + if (!hasMove['photongeyser']) { + for (const moveid of moves) { + let move = this.getMove(moveid); + if (move.category === 'Status' || hasType[move.type]) continue; + moves[moves.indexOf(moveid)] = 'photongeyser'; + break; + } + } + } } else if (template.baseSpecies === 'Pikachu') { item = 'Light Ball'; + } else if (template.species === 'Raichu-Alola' && hasMove['thunderbolt'] && !teamDetails.zMove && this.randomChance(1, 4)) { + item = 'Aloraichium Z'; } else if (template.species === 'Shedinja' || template.species === 'Smeargle') { item = 'Focus Sash'; } else if (template.species === 'Unfezant' && counter['Physical'] >= 2) { @@ -1296,35 +1413,44 @@ class RandomTeams extends Dex.ModdedDex { } else if (template.species === 'Unown') { item = 'Choice Specs'; } else if (template.species === 'Wobbuffet') { - item = hasMove['destinybond'] ? 'Custap Berry' : ['Leftovers', 'Sitrus Berry'][this.random(2)]; - } else if (template.species === 'Raichu-Alola' && hasMove['thunderbolt'] && !teamDetails.zMove && this.random(4) < 1) { - item = 'Aloraichium Z'; + if (hasMove['destinybond']) { + item = 'Custap Berry'; + } else { + item = isDoubles || this.randomChance(1, 2) ? 'Sitrus Berry' : 'Leftovers'; + } + } else if (template.species === 'Zygarde-10%' && hasMove['substitute'] && !teamDetails.zMove) { + item = hasMove['outrage'] ? 'Dragonium Z' : 'Groundium Z'; } else if (ability === 'Imposter') { item = 'Choice Scarf'; + } else if (hasMove['geomancy']) { + item = 'Power Herb'; } else if (ability === 'Klutz' && hasMove['switcheroo']) { // To perma-taunt a Pokemon by giving it Assault Vest item = 'Assault Vest'; - } else if (hasMove['conversion']) { - item = 'Normalium Z'; - } else if (!teamDetails.zMove && (hasMove['fly'] || hasMove['bounce'] && counter.setupType)) { - item = 'Flyinium Z'; - } else if (hasMove['geomancy']) { - item = 'Power Herb'; } else if (hasMove['switcheroo'] || hasMove['trick']) { - let randomNum = this.random(3); - if (counter.Physical >= 3 && (template.baseStats.spe < 60 || template.baseStats.spe > 108 || randomNum)) { - item = 'Choice Band'; - } else if (counter.Special >= 3 && (template.baseStats.spe < 60 || template.baseStats.spe > 108 || randomNum)) { - item = 'Choice Specs'; - } else { + if (template.baseStats.spe >= 60 && template.baseStats.spe <= 108) { item = 'Choice Scarf'; + } else { + item = (counter.Physical > counter.Special) ? 'Choice Band' : 'Choice Specs'; } + } else if (hasMove['conversion'] || hasMove['happyhour']) { + item = 'Normalium Z'; + } else if (hasMove['dig'] && !teamDetails.zMove) { + item = 'Groundium Z'; + } else if (hasMove['mindblown'] && !!counter['Status'] && !teamDetails.zMove) { + item = 'Firium Z'; + } else if (!teamDetails.zMove && (hasMove['fly'] || (hasMove['hurricane'] && template.baseStats.spa >= 125) || ((hasMove['bounce'] || (hasAbility['Gale Wings'] && hasMove['bravebird'])) && counter.setupType))) { + item = 'Flyinium Z'; + } else if (hasMove['solarbeam'] && !hasAbility['Drought'] && !hasMove['sunnyday'] && !teamDetails['sun']) { + item = !teamDetails.zMove ? 'Grassium Z' : 'Power Herb'; } else if (template.evos.length) { item = (ability === 'Technician' && counter.Physical >= 4) ? 'Choice Band' : 'Eviolite'; + } else if (template.species === 'Latias' || template.species === 'Latios') { + item = 'Soul Dew'; } else if (hasMove['bellydrum']) { if (ability === 'Gluttony') { - item = ['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'][this.random(5)] + ' Berry'; - } else if (template.baseStats.spe <= 50 && !teamDetails.zMove && this.random(2)) { + item = this.sample(['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki']) + ' Berry'; + } else if (template.baseStats.spe <= 50 && !teamDetails.zMove && this.randomChance(1, 2)) { item = 'Normalium Z'; } else { item = 'Sitrus Berry'; @@ -1333,8 +1459,8 @@ class RandomTeams extends Dex.ModdedDex { item = (ability === 'Solid Rock' && counter['priority']) ? 'Weakness Policy' : 'White Herb'; } else if (ability === 'Harvest') { item = hasMove['rest'] ? 'Lum Berry' : 'Sitrus Berry'; - } else if (ability === 'Magic Guard' || ability === 'Sheer Force') { - item = hasMove['psychoshift'] ? 'Flame Orb' : 'Life Orb'; + } else if ((ability === 'Magic Guard' || ability === 'Sheer Force') && counter.damagingMoves.length > 1) { + item = 'Life Orb'; } else if (ability === 'Poison Heal' || ability === 'Toxic Boost') { item = 'Toxic Orb'; } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { @@ -1343,9 +1469,9 @@ class RandomTeams extends Dex.ModdedDex { item = (ability === 'Swift Swim' && counter.Status < 2) ? 'Life Orb' : 'Damp Rock'; } else if (hasMove['sunnyday']) { item = (ability === 'Chlorophyll' && counter.Status < 2) ? 'Life Orb' : 'Heat Rock'; - } else if ((hasMove['lightscreen'] && hasMove['reflect']) || hasMove['auroraveil']) { + } else if (hasMove['auroraveil'] || hasMove['lightscreen'] && hasMove['reflect']) { item = 'Light Clay'; - } else if ((ability === 'Guts' || hasMove['facade']) && !hasMove['sleeptalk']) { + } else if (hasMove['psychoshift'] || (ability === 'Guts' || hasMove['facade']) && !hasMove['sleeptalk']) { item = (hasType['Fire'] || ability === 'Quick Feet') ? 'Toxic Orb' : 'Flame Orb'; } else if (ability === 'Unburden') { if (hasMove['fakeout']) { @@ -1359,16 +1485,18 @@ class RandomTeams extends Dex.ModdedDex { // Medium priority } else if (((ability === 'Speed Boost' && !hasMove['substitute']) || (ability === 'Stance Change')) && counter.Physical + counter.Special > 2) { item = 'Life Orb'; - } else if (template.baseStats.spe <= 50 && hasMove['sleeppowder'] && counter.setupType && !teamDetails.zMove) { + } else if (hasType['Grass'] && template.baseStats.spe <= 70 && hasMove['sleeppowder'] && counter.setupType && !teamDetails.zMove) { item = 'Grassium Z'; - } else if (counter.Physical >= 4 && !hasMove['bodyslam'] && !hasMove['dragontail'] && !hasMove['fakeout'] && !hasMove['flamecharge'] && !hasMove['rapidspin'] && !hasMove['suckerpunch']) { - item = template.baseStats.atk >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.random(3) ? 'Choice Scarf' : 'Choice Band'; - } else if (counter.Special >= 4 && !hasMove['acidspray'] && !hasMove['chargebeam'] && !hasMove['clearsmog'] && !hasMove['fierydance']) { - item = template.baseStats.spa >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.random(3) ? 'Choice Scarf' : 'Choice Specs'; - } else if (counter.Special >= 3 && hasMove['uturn'] && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.random(3)) { + } else if (counter.Physical >= 4 && !hasMove['bodyslam'] && !hasMove['dragontail'] && !hasMove['fakeout'] && !hasMove['flamecharge'] && !hasMove['rapidspin'] && !hasMove['suckerpunch'] && !isDoubles) { + item = template.baseStats.atk >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.randomChance(2, 3) ? 'Choice Scarf' : 'Choice Band'; + } else if (counter.Special >= 4 && !hasMove['acidspray'] && !hasMove['chargebeam'] && !hasMove['clearsmog'] && !hasMove['fierydance'] && !isDoubles) { + item = template.baseStats.spa >= 100 && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && this.randomChance(2, 3) ? 'Choice Scarf' : 'Choice Specs'; + } else if (((counter.Physical >= 3 && hasMove['defog']) || (counter.Special >= 3 && hasMove['uturn'])) && template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && !counter['priority'] && !hasMove['foulplay'] && this.randomChance(2, 3) && !isDoubles) { item = 'Choice Scarf'; } else if (ability === 'Defeatist' || hasMove['eruption'] || hasMove['waterspout']) { item = counter.Status <= 1 ? 'Expert Belt' : 'Leftovers'; + } else if (isDoubles && counter.damagingMoves.length >= 4 && template.baseStats.spe >= 60 && !hasMove['fakeout'] && !hasMove['flamecharge'] && !hasMove['suckerpunch'] && ability !== 'Multiscale' && ability !== 'Sturdy') { + item = 'Life Orb'; } else if (hasMove['reversal'] && hasMove['substitute'] && !teamDetails.zMove) { item = 'Fightinium Z'; } else if ((hasMove['endeavor'] || hasMove['flail'] || hasMove['reversal']) && ability !== 'Sturdy') { @@ -1377,44 +1505,44 @@ class RandomTeams extends Dex.ModdedDex { item = 'Air Balloon'; } else if (hasMove['outrage'] && (counter.setupType || ability === 'Multiscale')) { item = 'Lum Berry'; - } else if (ability === 'Slow Start' || hasMove['clearsmog'] || hasMove['curse'] || hasMove['detect'] || hasMove['protect'] || hasMove['sleeptalk']) { + } else if (isDoubles && this.getEffectiveness('Ice', template) >= 2) { + item = 'Yache Berry'; + } else if (isDoubles && this.getEffectiveness('Rock', template) >= 2) { + item = 'Charti Berry'; + } else if (isDoubles && this.getEffectiveness('Fire', template) >= 2) { + item = 'Occa Berry'; + } else if (isDoubles && this.getImmunity('Fighting', template) && this.getEffectiveness('Fighting', template) >= 2) { + item = 'Chople Berry'; + } else if ((ability === 'Slow Start' || hasMove['clearsmog'] || hasMove['curse'] || hasMove['detect'] || hasMove['protect'] || hasMove['sleeptalk']) && !isDoubles) { item = 'Leftovers'; } else if (hasMove['substitute']) { - item = !counter['drain'] || counter.damagingMoves.length < 2 ? 'Leftovers' : 'Life Orb'; - } else if (hasMove['lightscreen'] || hasMove['reflect']) { - item = 'Light Clay'; - } else if (ability === 'Iron Barbs' || ability === 'Rough Skin') { + item = counter.damagingMoves.length > 2 && !!counter['drain'] ? 'Life Orb' : 'Leftovers'; + } else if ((ability === 'Iron Barbs' || ability === 'Rough Skin') && this.randomChance(1, 2)) { item = 'Rocky Helmet'; - } else if (counter.Physical + counter.Special >= 4 && template.baseStats.spd >= 65 && (template.baseStats.def + template.baseStats.spd >= 190 || hasMove['rapidspin'])) { + } else if (counter.Physical + counter.Special >= 4 && template.baseStats.spd >= 65 && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 235) { item = 'Assault Vest'; } else if (counter.damagingMoves.length >= 4) { - item = (!!counter['Normal'] || (hasMove['suckerpunch'] && !hasType['Dark'])) ? 'Life Orb' : 'Expert Belt'; - } else if (counter.damagingMoves.length >= 3 && !!counter['speedsetup'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 300) { - item = 'Weakness Policy'; - } else if (counter.damagingMoves.length >= 3 && ability !== 'Sturdy' && !hasMove['clearsmog'] && !hasMove['dragontail'] && !hasMove['foulplay'] && !hasMove['superfang']) { - item = (template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285 || !!counter['speedsetup'] || hasMove['trickroom']) ? 'Life Orb' : 'Leftovers'; + item = (!!counter['Dragon'] || !!counter['Normal'] || (hasMove['suckerpunch'] && !hasType['Dark'])) ? 'Life Orb' : 'Expert Belt'; } else if (template.species === 'Palkia' && (hasMove['dracometeor'] || hasMove['spacialrend']) && hasMove['hydropump']) { item = 'Lustrous Orb'; + } else if (counter.damagingMoves.length >= 3 && !!counter['speedsetup'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 300) { + item = 'Weakness Policy'; } else if (slot === 0 && ability !== 'Regenerator' && ability !== 'Sturdy' && !counter['recoil'] && !counter['recovery'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285) { item = 'Focus Sash'; + } else if (counter.damagingMoves.length >= 3 && ability !== 'Sturdy' && !hasMove['acidspray'] && !hasMove['dragontail'] && !hasMove['foulplay'] && !hasMove['rapidspin'] && !hasMove['superfang']) { + item = (template.baseStats.hp + template.baseStats.def + template.baseStats.spd < 285 || !!counter['speedsetup'] || hasMove['trickroom']) ? 'Life Orb' : 'Leftovers'; // This is the "REALLY can't think of a good item" cutoff - } else if (ability === 'Super Luck') { - item = 'Scope Lens'; } else if (ability === 'Sturdy' && hasMove['explosion'] && !counter['speedsetup']) { item = 'Custap Berry'; + } else if (ability === 'Super Luck') { + item = 'Scope Lens'; } else if (hasType['Poison']) { item = 'Black Sludge'; - } else if (ability === 'Gale Wings' && hasMove['bravebird']) { - item = !teamDetails.zMove ? 'Flyinium Z' : 'Sharp Beak'; } else if (this.getEffectiveness('Rock', template) >= 1 || hasMove['dragontail']) { item = 'Leftovers'; } else if (this.getImmunity('Ground', template) && this.getEffectiveness('Ground', template) >= 1 && ability !== 'Levitate' && ability !== 'Solid Rock' && !hasMove['magnetrise'] && !hasMove['sleeptalk']) { item = 'Air Balloon'; - } else if (counter.Status <= 1 && ability !== 'Sturdy' && !hasMove['rapidspin']) { - item = 'Life Orb'; - } else { - item = 'Leftovers'; } // For Trick / Switcheroo @@ -1422,63 +1550,94 @@ class RandomTeams extends Dex.ModdedDex { item = 'Black Sludge'; } - let levelScale = { - LC: 87, - 'LC Uber': 86, - NFE: 84, - PU: 83, - BL4: 82, - NU: 81, - BL3: 80, - RU: 79, - BL2: 78, - UU: 77, - BL: 76, - OU: 75, - Uber: 73, - AG: 71, - }; - let customScale = { - // Banned Abilities - Gothitelle: 77, Politoed: 79, Wobbuffet: 77, - - // Holistic judgement - Unown: 100, - }; - let tier = template.tier; - if (tier.includes('Unreleased') && baseTemplate.tier === 'Uber') { - tier = 'Uber'; - } - if (tier.charAt(0) === '(') { - tier = tier.slice(1, -1); + let level; + + if (!isDoubles) { + /** @type {{[tier: string]: number}} */ + let levelScale = { + PU: 83, + PUBL: 82, + NU: 81, + NUBL: 80, + RU: 79, + RUBL: 78, + UU: 77, + UUBL: 76, + '(OU)': 75, + OU: 75, + Unreleased: 75, + Uber: 73, + }; + /** @type {{[species: string]: number}} */ + let customScale = { + // Banned Ability + Dugtrio: 77, Gothitelle: 77, Pelipper: 79, Politoed: 79, Wobbuffet: 77, + + // Holistic judgement + Unown: 100, + }; + level = levelScale[template.tier] || 84; + if (customScale[template.name]) level = customScale[template.name]; + + // Custom level based on moveset + if (ability === 'Power Construct') level = 73; + if (item === 'Kommonium Z') level = 77; + } 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 + let baseStats = template.baseStats; + // If Wishiwashi, use the school-forme's much higher stats + if (template.baseSpecies === 'Wishiwashi') baseStats = this.getTemplate('wishiwashischool').baseStats; + + let bst = baseStats.hp + baseStats.atk + baseStats.def + baseStats.spa + baseStats.spd + baseStats.spe; + // 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.) + let templateAbility = (baseTemplate === template ? ability : template.abilities[0]); + if (templateAbility === 'Huge Power' || templateAbility === 'Pure Power') { + bst += baseStats.atk; + } else if (templateAbility === 'Parental Bond') { + bst += 0.25 * (counter.Physical > counter.Special ? baseStats.atk : baseStats.spa); + } else if (templateAbility === 'Protean') { + bst += 0.3 * (counter.Physical > counter.Special ? baseStats.atk : baseStats.spa); + } else if (templateAbility === 'Fur Coat') { + bst += baseStats.def; + } else if (templateAbility === 'Slow Start') { + bst -= baseStats.atk / 2 + baseStats.spe / 2; + } else if (templateAbility === 'Truant') { + bst *= 2 / 3; + } + if (item === 'Eviolite') { + bst += 0.5 * (baseStats.def + baseStats.spd); + } + level = 70 + Math.floor(((600 - this.clampIntRange(bst, 300, 600)) / 10.34)); } - let level = levelScale[tier] || 75; - if (customScale[template.name]) level = customScale[template.name]; - // Custom level based on moveset - if (ability === 'Power Construct') level = 73; - if (hasMove['batonpass'] && counter.setupType && level > 77) level = 77; - // if (template.name === 'Slurpuff' && !counter.setupType) level = 81; - // if (template.name === 'Xerneas' && hasMove['geomancy']) level = 71; + if (template.species === 'Stunfisk') { + // This is just to amuse Zarel + ability = 'Limber'; + item = 'Cheri Berry'; + level += 2; + } // Prepare optimal HP - let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - if (hasMove['substitute'] && (item === 'Sitrus Berry' || (ability === 'Power Construct' && item !== 'Leftovers'))) { - // Two Substitutes should activate Sitrus Berry or Power Construct - while (hp % 4 > 0) { - evs.hp -= 4; - hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - } - } else if (hasMove['bellydrum'] && (item === 'Sitrus Berry' || ability === 'Gluttony')) { - // Belly Drum should activate Sitrus Berry - if (hp % 2 > 0) evs.hp -= 4; - } else if (hasMove['substitute'] && hasMove['reversal']) { - // Reversal users should be able to use four Substitutes - if (hp % 4 === 0) evs.hp -= 4; - } else { - // Maximize number of Stealth Rock switch-ins - let srWeakness = this.getEffectiveness('Rock', template); - if (srWeakness > 0 && hp % (4 / srWeakness) === 0) evs.hp -= 4; + let srWeakness = this.getEffectiveness('Rock', template); + while (evs.hp > 1) { + let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); + if (hasMove['substitute'] && hasMove['reversal']) { + // Reversal users should be able to use four Substitutes + if (hp % 4 > 0) break; + } else if (hasMove['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 (hasMove['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 @@ -1487,6 +1646,11 @@ class RandomTeams extends Dex.ModdedDex { ivs.atk = 0; } + if (ability === 'Beast Boost' && counter.Special < 1) { + evs.spa = 0; + ivs.spa = 0; + } + if (hasMove['gyroball'] || hasMove['trickroom']) { evs.spe = 0; ivs.spe = 0; @@ -1495,25 +1659,27 @@ class RandomTeams extends Dex.ModdedDex { return { name: template.baseSpecies, species: species, + gender: template.gender, moves: moves, ability: ability, evs: evs, ivs: ivs, item: item, level: level, - shiny: !this.random(1024), + shiny: this.randomChance(1, 1024), }; } + randomTeam() { let pokemon = []; - let excludedTiers = {'NFE':1, 'LC Uber':1, 'LC':1}; - let allowedNFE = {'Chansey':1, 'Doublade':1, 'Gligar':1, 'Porygon2':1, 'Scyther':1, 'Togetic':1}; + const excludedTiers = ['NFE', 'LC Uber', 'LC']; + const allowedNFE = ['Chansey', 'Doublade', 'Gligar', 'Porygon2', 'Scyther', 'Togetic', 'Type: Null']; // For Monotype let isMonotype = this.format.id === 'gen7monotyperandombattle'; let typePool = Object.keys(this.data.TypeChart); - let type = typePool[this.random(typePool.length)]; + let type = this.sample(typePool); let pokemonPool = []; for (let id in this.data.FormatsData) { @@ -1523,7 +1689,7 @@ class RandomTeams extends Dex.ModdedDex { if (template.battleOnly) types = this.getTemplate(template.baseSpecies).types; if (types.indexOf(type) < 0) continue; } - if (template.gen <= this.gen && !excludedTiers[template.tier] && !template.isMega && !template.isPrimal && !template.isNonstandard && template.randomBattleMoves) { + if (template.gen <= this.gen && !excludedTiers.includes(template.tier) && !template.isMega && !template.isPrimal && !template.isNonstandard && template.randomBattleMoves) { pokemonPool.push(id); } } @@ -1534,78 +1700,62 @@ class RandomTeams extends Dex.ModdedDex { potd = this.getTemplate(Config.potd); } + /**@type {{[k: string]: number}} */ + let baseFormes = {}; + /**@type {{[k: string]: number}} */ + let tierCount = {}; + /**@type {{[k: string]: number}} */ let typeCount = {}; + /**@type {{[k: string]: number}} */ let typeComboCount = {}; - let baseFormes = {}; - let uberCount = 0; - let puCount = 0; + /**@type {RandomTeamsTypes["TeamDetails"]} */ let teamDetails = {}; while (pokemonPool.length && pokemon.length < 6) { let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); if (!template.exists) continue; - // Limit to one of each species (Species Clause) - if (baseFormes[template.baseSpecies]) continue; - // Only certain NFE Pokemon are allowed - if (template.evos.length && !allowedNFE[template.species]) continue; + if (template.evos.length && !allowedNFE.includes(template.species)) continue; - let tier = template.tier; - switch (tier) { - case 'Uber': - // Ubers are limited to 2 but have a 20% chance of being added anyway. - if (uberCount > 1 && this.random(5) >= 1) continue; - break; - case 'PU': - // PUs are limited to 2 but have a 20% chance of being added anyway. - if (puCount > 1 && this.random(5) >= 1) continue; - break; - case 'Unreleased': case 'CAP': - // Unreleased and CAP have 20% the normal rate - if (this.random(5) >= 1) continue; - } + // Limit to one of each species (Species Clause) + if (baseFormes[template.baseSpecies]) continue; // Adjust rate for species with multiple formes switch (template.baseSpecies) { case 'Arceus': case 'Silvally': - if (this.random(18) >= 1) continue; + if (this.randomChance(17, 18)) continue; break; - case 'Pikachu': - if (this.random(7) >= 1) continue; - continue; case 'Genesect': - if (this.random(5) >= 1) continue; + if (this.randomChance(4, 5)) continue; break; case 'Castform': case 'Gourgeist': case 'Oricorio': - if (this.random(4) >= 1) continue; + if (this.randomChance(3, 4)) continue; + break; + case 'Necrozma': + if (this.randomChance(2, 3)) continue; break; case 'Basculin': case 'Cherrim': case 'Greninja': case 'Hoopa': case 'Meloetta': case 'Meowstic': - if (this.random(2) >= 1) continue; + if (this.randomChance(1, 2)) continue; break; } - if (potd && potd.exists) { - // The Pokemon of the Day belongs in slot 2 - if (pokemon.length === 1) { - template = potd; - if (template.species === 'Magikarp') { - template.randomBattleMoves = ['bounce', 'flail', 'splash', 'magikarpsrevenge']; - } else if (template.species === 'Delibird') { - template.randomBattleMoves = ['present', 'bestow']; - } - } else if (template.species === potd.species) { - continue; // No thanks, I've already got one - } + let tier = template.tier; + + // Limit two Pokemon per tier + if (!tierCount[tier]) { + tierCount[tier] = 1; + } else if (tierCount[tier] > 1) { + continue; } let types = template.types; if (!isMonotype) { - // Limit 2 of any type + // Limit two of any type let skip = false; - for (let t = 0; t < types.length; t++) { - if (typeCount[types[t]] > 1 && this.random(5) >= 1) { + for (const type of types) { + if (typeCount[type] > 1 && this.randomChance(4, 5)) { skip = true; break; } @@ -1613,7 +1763,16 @@ class RandomTeams extends Dex.ModdedDex { if (skip) continue; } - let set = this[this.format.gameType === 'singles' ? 'randomSet' : 'randomDoublesSet'](template, pokemon.length, teamDetails); + if (potd && potd.exists) { + // The Pokemon of the Day belongs in slot 2 + if (pokemon.length === 1) { + template = potd; + } else if (template.species === potd.species) { + continue; // No thanks, I've already got it + } + } + + let set = this.randomSet(template, pokemon.length, teamDetails, this.format.gameType !== 'singles'); // Illusion shouldn't be the last Pokemon of the team if (set.ability === 'Illusion' && pokemon.length > 4) continue; @@ -1623,7 +1782,7 @@ class RandomTeams extends Dex.ModdedDex { let intersectMoves = set.moves.filter(move => incompatibleMoves.includes(move)); if (intersectMoves.length > 1) continue; - // Limit 1 of any type combination, 2 in monotype + // Limit 1 of any type combination, 2 in Monotype let typeCombo = types.slice().sort().join(); if (set.ability === 'Drought' || set.ability === 'Drizzle' || set.ability === 'Sand Stream') { // Drought, Drizzle and Sand Stream don't count towards the type combo limit @@ -1636,15 +1795,23 @@ class RandomTeams extends Dex.ModdedDex { // Okay, the set passes, add it to our team pokemon.push(set); + if (pokemon.length === 6) { + // Set Zoroark's level to be the same as the last Pokemon + let illusion = teamDetails['illusion']; + if (illusion) pokemon[illusion - 1].level = pokemon[5].level; + break; + } + // Now that our Pokemon has passed all checks, we can increment our counters baseFormes[template.baseSpecies] = 1; + tierCount[tier]++; // Increment type counters - for (let t = 0; t < types.length; t++) { - if (types[t] in typeCount) { - typeCount[types[t]]++; + for (const type of types) { + if (type in typeCount) { + typeCount[type]++; } else { - typeCount[types[t]] = 1; + typeCount[type] = 1; } } if (typeCombo in typeComboCount) { @@ -1653,908 +1820,76 @@ class RandomTeams extends Dex.ModdedDex { typeComboCount[typeCombo] = 1; } - // Increment Uber/PU counters - if (tier === 'Uber') { - uberCount++; - } else if (tier === 'PU') { - puCount++; - } - // Team has Mega/weather/hazards let item = this.getItem(set.item); if (item.megaStone) teamDetails['megaStone'] = 1; if (item.zMove) teamDetails['zMove'] = 1; if (set.ability === 'Snow Warning') teamDetails['hail'] = 1; - if (set.ability === 'Drizzle' || set.moves.includes('raindance')) teamDetails['rain'] = 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('stealthrock')) teamDetails['stealthRock'] = 1; if (set.moves.includes('toxicspikes')) teamDetails['toxicSpikes'] = 1; if (set.moves.includes('defog') || set.moves.includes('rapidspin')) teamDetails['hazardClear'] = 1; + + // For setting Zoroark's level + if (set.ability === 'Illusion') teamDetails['illusion'] = pokemon.length; } return pokemon; } - randomDoublesSet(template, slot, teamDetails) { - let baseTemplate = (template = this.getTemplate(template)); - let species = template.species; - if (!template.exists || (!template.randomDoubleBattleMoves && !template.randomBattleMoves && !template.learnset)) { - template = this.getTemplate('unown'); + /** + * @param {Template} template + * @param {number} slot + * @param {RandomTeamsTypes["FactoryTeamDetails"]} teamData + * @param {string} tier + * @return {RandomTeamsTypes["RandomFactorySet"] | false} + */ + randomFactorySet(template, slot, teamData, tier) { + let speciesId = toId(template.species); + // let flags = this.randomFactorySets[tier][speciesId].flags; + let setList = this.randomFactorySets[tier][speciesId].sets; - let err = new Error('Template incompatible with random battles: ' + species); - require('../crashlogger')(err, 'The doubles randbat set generator'); - } + /**@type {{[k: string]: number}} */ + let itemsMax = {'choicespecs': 1, 'choiceband': 1, 'choicescarf': 1}; + /**@type {{[k: string]: number}} */ + let movesMax = {'rapidspin': 1, 'batonpass': 1, 'stealthrock': 1, 'defog': 1, 'spikes': 1, 'toxicspikes': 1}; + let requiredMoves = {'stealthrock': 'hazardSet', 'rapidspin': 'hazardClear', 'defog': 'hazardClear'}; + let weatherAbilitiesRequire = { + 'hydration': 'raindance', 'swiftswim': 'raindance', + 'leafguard': 'sunnyday', 'solarpower': 'sunnyday', 'chlorophyll': 'sunnyday', + 'sandforce': 'sandstorm', 'sandrush': 'sandstorm', 'sandveil': 'sandstorm', + 'slushrush': 'hail', 'snowcloak': 'hail', + }; + let weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream']; - if (typeof teamDetails !== 'object') teamDetails = {megaStone: teamDetails}; - - if (template.battleOnly) { - // Only change the species. The template has custom moves, and may have different typing and requirements. - species = template.baseSpecies; - } - let battleForme = this.checkBattleForme(template); - if (battleForme && (battleForme.isMega ? !teamDetails.megaStone : this.random(2))) { - template = this.getTemplate(template.otherFormes.length >= 2 ? template.otherFormes[this.random(template.otherFormes.length)] : template.otherFormes[0]); - } - - let movePool = (template.randomDoubleBattleMoves || template.randomBattleMoves); - movePool = movePool ? movePool.slice() : Object.keys(template.learnset); - - let moves = []; - let ability = ''; - let item = ''; - let evs = { - hp: 85, - atk: 85, - def: 85, - spa: 85, - spd: 85, - spe: 85, - }; - let ivs = { - hp: 31, - atk: 31, - def: 31, - spa: 31, - spd: 31, - spe: 31, - }; - let hasType = {}; - hasType[template.types[0]] = true; - if (template.types[1]) { - hasType[template.types[1]] = true; - } - let hasAbility = {}; - hasAbility[template.abilities[0]] = true; - if (template.abilities[1]) { - hasAbility[template.abilities[1]] = true; - } - if (template.abilities['H']) { - hasAbility[template.abilities['H']] = true; - } - let availableHP = 0; - for (let i = 0, len = movePool.length; i < len; i++) { - if (movePool[i].substr(0, 11) === 'hiddenpower') availableHP++; - } - - // These moves can be used even if we aren't setting up to use them: - let SetupException = { - dracometeor:1, leafstorm:1, overheat:1, - extremespeed:1, suckerpunch:1, superpower:1, - }; - let counterAbilities = { - 'Adaptability':1, 'Contrary':1, 'Hustle':1, 'Iron Fist':1, 'Skill Link':1, - }; - // -ate Abilities - let ateAbilities = { - 'Aerilate':1, 'Pixilate':1, 'Refrigerate':1, - }; - - let hasMove, counter; - - do { - // Keep track of all moves we have: - hasMove = {}; - for (let k = 0; k < moves.length; k++) { - if (moves[k].substr(0, 11) === 'hiddenpower') { - hasMove['hiddenpower'] = true; - } else { - hasMove[moves[k]] = true; - } - } - - // Choose next 4 moves from learnset/viable moves and add them to moves list: - while (moves.length < 4 && movePool.length) { - let moveid = toId(this.sampleNoReplace(movePool)); - if (moveid.substr(0, 11) === 'hiddenpower') { - availableHP--; - if (hasMove['hiddenpower']) continue; - hasMove['hiddenpower'] = true; - } else { - hasMove[moveid] = true; - } - moves.push(moveid); - } - - counter = this.queryMoves(moves, hasType, hasAbility); - - // Iterate through the moves again, this time to cull them: - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); - let moveid = move.id; - let rejected = false; - let isSetup = false; - - switch (moveid) { - // not very useful without their supporting moves - case 'sleeptalk': - if (!hasMove['rest']) rejected = true; - break; - case 'endure': - if (!hasMove['flail'] && !hasMove['endeavor'] && !hasMove['reversal']) rejected = true; - break; - case 'focuspunch': - if (hasMove['sleeptalk'] || !hasMove['substitute']) rejected = true; - break; - case 'storedpower': - if (!hasMove['cosmicpower'] && !counter.setupType) rejected = true; - break; - case 'batonpass': - if (!counter.setupType && !hasMove['substitute'] && !hasMove['cosmicpower'] && !counter['speedsetup'] && !hasAbility['Speed Boost']) rejected = true; - break; - - // we only need to set up once - case 'swordsdance': case 'dragondance': case 'coil': case 'curse': case 'bulkup': case 'bellydrum': - if (counter.Physical < 2 && !hasMove['batonpass']) rejected = true; - if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) rejected = true; - isSetup = true; - break; - case 'nastyplot': case 'tailglow': case 'quiverdance': case 'calmmind': case 'geomancy': - if (counter.Special < 2 && !hasMove['batonpass']) rejected = true; - if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; - isSetup = true; - break; - case 'shellsmash': case 'growth': case 'workup': - if (counter.Physical + counter.Special < 2 && !hasMove['batonpass']) rejected = true; - if (counter.setupType !== 'Mixed' || counter['mixedsetup'] > 1) rejected = true; - isSetup = true; - break; - - // bad after setup - case 'seismictoss': case 'nightshade': case 'superfang': - if (counter.setupType) rejected = true; - break; - case 'rapidspin': case 'magiccoat': case 'spikes': case 'toxicspikes': - if (counter.setupType) rejected = true; - break; - case 'uturn': case 'voltswitch': - if (counter.setupType || hasMove['agility'] || hasMove['rockpolish'] || hasMove['magnetrise']) rejected = true; - break; - case 'perishsong': - if (hasMove['roar'] || hasMove['whirlwind'] || hasMove['haze']) rejected = true; - if (counter.setupType || hasMove['agility'] || hasMove['rockpolish'] || hasMove['magnetrise']) rejected = true; - break; - case 'relicsong': - if (counter.setupType) rejected = true; - break; - case 'pursuit': case 'protect': case 'haze': case 'stealthrock': - if (counter.setupType || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; - break; - case 'trick': case 'switcheroo': - if (counter.setupType || counter.Physical + counter.Special < 2) rejected = true; - if ((hasMove['rest'] && hasMove['sleeptalk']) || hasMove['trickroom'] || hasMove['reflect'] || hasMove['lightscreen'] || hasMove['acrobatics']) rejected = true; - break; - case 'dragontail': case 'circlethrow': - if (hasMove['agility'] || hasMove['rockpolish']) rejected = true; - if (hasMove['whirlwind'] || hasMove['roar'] || hasMove['encore']) rejected = true; - break; - - // bit redundant to have both - // Attacks: - case 'flamethrower': case 'fierydance': - if (hasMove['heatwave'] || hasMove['overheat'] || hasMove['fireblast'] || hasMove['blueflare']) rejected = true; - break; - case 'overheat': - if (counter.setupType === 'Special' || hasMove['fireblast']) rejected = true; - break; - case 'icebeam': - if (hasMove['blizzard'] || hasMove['freezedry']) rejected = true; - break; - case 'iceshard': - if (hasMove['freezedry']) rejected = true; - break; - case 'surf': - if (hasMove['scald'] || hasMove['hydropump'] || hasMove['muddywater']) rejected = true; - break; - case 'hydropump': - if (hasMove['razorshell'] || hasMove['waterfall'] || hasMove['scald'] || hasMove['muddywater']) rejected = true; - break; - case 'waterfall': - if (hasMove['aquatail']) rejected = true; - break; - case 'airslash': - if (hasMove['hurricane']) rejected = true; - break; - case 'acrobatics': case 'pluck': case 'drillpeck': - if (hasMove['bravebird']) rejected = true; - break; - case 'lunge': - if (hasMove['leechlife']) rejected = true; - break; - case 'solarbeam': - if ((!hasMove['sunnyday'] && !hasAbility['Drought']) || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; - break; - case 'gigadrain': - if ((!counter.setupType && hasMove['leafstorm']) || hasMove['petaldance']) rejected = true; - break; - case 'leafstorm': - if (counter.setupType && hasMove['gigadrain']) rejected = true; - break; - case 'seedbomb': case 'woodhammer': - if (hasMove['gigadrain']) rejected = true; - break; - case 'weatherball': - if (!hasMove['sunnyday']) rejected = true; - break; - case 'firepunch': - if (hasMove['flareblitz'] || hasMove['fireblast']) rejected = true; - break; - case 'crosschop': case 'highjumpkick': - if (hasMove['closecombat']) rejected = true; - break; - case 'drainpunch': - if (hasMove['closecombat'] || hasMove['crosschop']) rejected = true; - break; - case 'machpunch': - if (hasType['Fighting'] && counter.stab < 2 && !hasAbility['Technician']) rejected = true; - break; - case 'thunder': - if (hasMove['thunderbolt']) rejected = true; - break; - case 'thunderbolt': case 'electroweb': - if (hasMove['discharge']) rejected = true; - break; - case 'stoneedge': - if (hasMove['rockslide'] || hasMove['headsmash'] || hasMove['rockblast']) rejected = true; - break; - case 'headsmash': - if (hasMove['rockslide']) rejected = true; - break; - case 'bonemerang': case 'earthpower': - if (hasMove['earthquake']) rejected = true; - break; - case 'outrage': - if (hasMove['dragonclaw'] || hasMove['dragontail']) rejected = true; - break; - case 'ancientpower': - if (hasMove['paleowave']) rejected = true; - break; - case 'dragonpulse': - if (hasMove['dracometeor']) rejected = true; - break; - case 'moonblast': - if (hasMove['dazzlinggleam']) rejected = true; - break; - case 'acidspray': - if (hasMove['sludgebomb']) rejected = true; - break; - case 'return': - if (hasMove['bodyslam'] || hasMove['facade'] || hasMove['doubleedge'] || hasMove['tailslap'] || hasMove['doublehit']) rejected = true; - break; - case 'poisonjab': - if (hasMove['gunkshot']) rejected = true; - break; - case 'psychic': - if (hasMove['psyshock'] || hasMove['hyperspacehole']) rejected = true; - break; - case 'fusionbolt': - if (counter.setupType && hasMove['boltstrike']) rejected = true; - break; - case 'boltstrike': - if (!counter.setupType && hasMove['fusionbolt']) rejected = true; - break; - case 'darkpulse': - if (hasMove['crunch'] && counter.setupType !== 'Special') rejected = true; - break; - case 'quickattack': - if (hasMove['feint']) rejected = true; - break; - case 'bulletpunch': - if (hasType['Steel'] && counter.stab < 2 && !hasAbility['Technician']) rejected = true; - break; - case 'flashcannon': - if (hasMove['ironhead']) rejected = true; - break; - case 'wideguard': - if (hasMove['protect']) rejected = true; - break; - case 'powersplit': - if (hasMove['guardsplit']) rejected = true; - break; - - // Status: - case 'rest': - if (hasMove['painsplit'] || hasMove['wish'] || hasMove['recover'] || hasMove['moonlight'] || hasMove['synthesis']) rejected = true; - break; - case 'softboiled': case 'roost': - if (hasMove['wish'] || hasMove['recover']) rejected = true; - break; - case 'roar': - // Whirlwind outclasses Roar because Soundproof - if (hasMove['whirlwind'] || hasMove['dragontail'] || hasMove['haze'] || hasMove['circlethrow']) rejected = true; - break; - case 'substitute': - if (hasMove['uturn'] || hasMove['voltswitch'] || hasMove['pursuit']) rejected = true; - break; - case 'fakeout': - if (hasMove['trick'] || hasMove['switcheroo']) rejected = true; - break; - case 'feint': - if (hasMove['fakeout']) rejected = true; - break; - case 'encore': - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - if (hasMove['whirlwind'] || hasMove['dragontail'] || hasMove['roar'] || hasMove['circlethrow']) rejected = true; - break; - case 'suckerpunch': - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - break; - case 'cottonguard': - if (hasMove['reflect']) rejected = true; - break; - case 'lightscreen': - if (hasMove['calmmind']) rejected = true; - break; - case 'rockpolish': case 'agility': case 'autotomize': - if (!counter.setupType && !hasMove['batonpass'] && hasMove['thunderwave']) rejected = true; - if ((hasMove['stealthrock'] || hasMove['spikes'] || hasMove['toxicspikes']) && !hasMove['batonpass']) rejected = true; - break; - case 'thunderwave': - if (counter.setupType && (hasMove['rockpolish'] || hasMove['agility'])) rejected = true; - if (hasMove['discharge'] || hasMove['trickroom']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - if (hasMove['yawn'] || hasMove['spore'] || hasMove['sleeppowder']) rejected = true; - break; - case 'lavaplume': - if (hasMove['willowisp']) rejected = true; - break; - case 'trickroom': - if (hasMove['rockpolish'] || hasMove['agility'] || hasMove['icywind']) rejected = true; - break; - case 'willowisp': - if (hasMove['scald'] || hasMove['yawn'] || hasMove['spore'] || hasMove['sleeppowder']) rejected = true; - break; - case 'toxic': - if (hasMove['thunderwave'] || hasMove['willowisp'] || hasMove['scald'] || hasMove['yawn'] || hasMove['spore'] || hasMove['sleeppowder']) rejected = true; - break; - - // Z-status - case 'hypnosis': - if ((teamDetails.zMove || !counter.setupType) && template.baseStats.spe < 100) rejected = true; - break; - } - - // Increased/decreased priority moves unneeded with moves that boost only speed - if (move.priority !== 0 && (hasMove['rockpolish'] || hasMove['agility'])) { - rejected = true; - } - - if (move.category === 'Special' && counter.setupType === 'Physical' && !SetupException[moveid]) { - rejected = true; - } - if (move.category === 'Physical' && (counter.setupType === 'Special' || hasMove['acidspray']) && !SetupException[moveid]) { - rejected = true; - } - - // This move doesn't satisfy our setup requirements: - if (counter.setupType === 'Physical' && move.category !== 'Physical' && counter['Physical'] < 2) { - rejected = true; - } - if (counter.setupType === 'Special' && move.category !== 'Special' && counter['Special'] < 2) { - rejected = true; - } - - // Hidden Power isn't good enough - if (counter.setupType === 'Special' && moveid === 'hiddenpower' && counter['Special'] <= 2 && (!hasMove['shadowball'] || move.type !== 'Fighting')) { - rejected = true; - } - - // Pokemon should have moves that benefit their Ability/Type/Weather, as well as moves required by its forme - if ((hasType['Bug'] && !hasMove['batonpass'] && (movePool.includes('megahorn') || movePool.includes('pinmissile') || (hasType['Flying'] && !hasMove['hurricane'] && movePool.includes('bugbuzz')))) || - (hasType['Dark'] && hasMove['suckerpunch'] && counter.stab < template.types.length) || - (hasType['Dragon'] && !counter['Dragon'] && !hasAbility['Aerilate'] && !hasAbility['Pixilate'] && !hasMove['rest'] && !hasMove['sleeptalk']) || - (hasType['Electric'] && !counter['Electric']) || - (hasType['Fighting'] && !counter['Fighting'] && (counter.setupType || !counter['Status'])) || - (hasType['Fire'] && !counter['Fire']) || - (hasType['Ground'] && !counter['Ground'] && (counter.setupType || counter['speedsetup'] || hasMove['raindance'] || !counter['Status'])) || - (hasType['Ice'] && !counter['Ice'] && !hasAbility['Refrigerate']) || - (hasType['Psychic'] && !!counter['Psychic'] && !hasType['Flying'] && !hasAbility['Pixilate'] && template.types.length > 1 && counter.stab < 2) || - (hasType['Water'] && !counter['Water'] && (!hasType['Ice'] || !counter['Ice']) && !hasAbility['Protean']) || - ((hasAbility['Adaptability'] && !counter.setupType && template.types.length > 1 && (!counter[template.types[0]] || !counter[template.types[1]])) || - ((hasAbility['Aerilate'] || hasAbility['Pixilate'] || hasAbility['Refrigerate']) && !counter['Normal']) || - (hasAbility['Contrary'] && !counter['contrary'] && template.species !== 'Shuckle') || - (hasAbility['Dark Aura'] && !counter['Dark']) || - (hasAbility['Electric Surge'] && !counter['Electric']) || - (hasAbility['Gale Wings'] && !counter['Flying']) || - (hasAbility['Grassy Surge'] && !counter['Grass']) || - (hasAbility['Guts'] && hasType['Normal'] && movePool.includes('facade')) || - (hasAbility['Psychic Surge'] && !counter['Psychic']) || - (hasAbility['Slow Start'] && movePool.includes('substitute')) || - (hasAbility['Stance Change'] && !counter.setupType && movePool.includes('kingsshield')) || - (hasAbility['Water Bubble'] && !counter['Water']) || - (counter['defensesetup'] && !counter.recovery && !hasMove['rest']) || - (movePool.includes('technoblast') || template.requiredMove && movePool.includes(toId(template.requiredMove)))) && - (counter['physicalsetup'] + counter['specialsetup'] < 2 && (!counter.setupType || counter.setupType === 'Mixed' || (move.category !== counter.setupType && move.category !== 'Status') || counter[counter.setupType] + counter.Status > 3))) { - // Reject Status or non-STAB - if (!isSetup && !move.weather && moveid !== 'judgment' && moveid !== 'rest' && moveid !== 'sleeptalk') { - if (move.category === 'Status' || !hasType[move.type] || (move.basePower && move.basePower < 40 && !move.multihit)) rejected = true; - } - } - - // Remove rejected moves from the move list. - if (rejected && (movePool.length - availableHP || availableHP && (moveid === 'hiddenpower' || !hasMove['hiddenpower']))) { - moves.splice(k, 1); - break; - } - } - if (moves.length === 4 && !counter.stab && !hasMove['metalburst'] && (counter['physicalpool'] || counter['specialpool'])) { - // Move post-processing: - if (counter.damagingMoves.length === 0) { - // A set shouldn't have no attacking moves - moves.splice(this.random(moves.length), 1); - } else if (counter.damagingMoves.length === 1) { - // In most cases, a set shouldn't have no STAB - let damagingid = counter.damagingMoves[0].id; - if (movePool.length - availableHP || availableHP && (damagingid === 'hiddenpower' || !hasMove['hiddenpower'])) { - let replace = false; - if (!counter.damagingMoves[0].damage && template.species !== 'Porygon2') { - let damagingType = counter.damagingMoves[0].type; - if (damagingType === 'Fairy') { - // Mono-Fairy is acceptable for Psychic types - if (counter.setupType !== 'Special' || template.types.length > 1 || !hasType['Psychic']) replace = true; - } else { - replace = true; - } - } - if (replace) moves.splice(counter.damagingMoveIndex[damagingid], 1); - } - } else if (!counter.damagingMoves[0].damage && !counter.damagingMoves[1].damage && template.species !== 'Porygon2') { - // If you have three or more attacks, and none of them are STAB, reject one of them at random. - let rejectableMoves = []; - let baseDiff = movePool.length - availableHP; - for (let l = 0; l < counter.damagingMoves.length; l++) { - if (counter.damagingMoves[l].id === 'technoblast') continue; - if (baseDiff || availableHP && (!hasMove['hiddenpower'] || counter.damagingMoves[l].id === 'hiddenpower')) { - rejectableMoves.push(counter.damagingMoveIndex[counter.damagingMoves[l].id]); - } - } - if (rejectableMoves.length) { - moves.splice(rejectableMoves[this.random(rejectableMoves.length)], 1); - } - } - } - } while (moves.length < 4 && movePool.length); - - // any moveset modification goes here - //moves[0] = 'safeguard'; - let changedMove = false; - if (template.requiredItem && template.requiredItem.slice(-5) === 'Drive' && !hasMove['technoblast']) { - delete hasMove[this.getMove(moves[3]).id]; - moves[3] = 'technoblast'; - hasMove['technoblast'] = true; - changedMove = true; - } - if (template.id === 'meloettapirouette' && !hasMove['relicsong']) { - delete hasMove[this.getMove(moves[3]).id]; - moves[3] = 'relicsong'; - hasMove['relicsong'] = true; - changedMove = true; - } - if (template.requiredMove && !hasMove[toId(template.requiredMove)]) { - delete hasMove[this.getMove(moves[3]).id]; - moves[3] = toId(template.requiredMove); - hasMove[toId(template.requiredMove)] = true; - changedMove = true; - } - - // Re-query in case a moveset modification occurred - if (changedMove) counter = this.queryMoves(moves, hasType, hasAbility); - - let abilities = Object.values(baseTemplate.abilities); - abilities.sort((a, b) => this.getAbility(b).rating - this.getAbility(a).rating); - let ability0 = this.getAbility(abilities[0]); - let ability1 = this.getAbility(abilities[1]); - let ability2 = this.getAbility(abilities[2]); - ability = ability0.name; - if (abilities[1]) { - if (abilities[2] && ability2.rating === ability1.rating) { - if (this.random(2)) ability1 = ability2; - } - if (ability0.rating <= ability1.rating) { - if (this.random(2)) ability = ability1.name; - } else if (ability0.rating - 0.6 <= ability1.rating) { - if (!this.random(3)) ability = ability1.name; - } - - let rejectAbility = false; - if (ability in counterAbilities) { - rejectAbility = !counter[toId(ability)]; - } else if (ability in ateAbilities) { - rejectAbility = !counter['Normal']; - } else if (ability === 'Blaze') { - rejectAbility = !counter['Fire']; - } else if (ability === 'Chlorophyll') { - rejectAbility = !hasMove['sunnyday']; - } else if (ability === 'Compound Eyes' || ability === 'No Guard') { - rejectAbility = !counter['inaccurate']; - } else if (ability === 'Defiant' || ability === 'Moxie') { - rejectAbility = !counter['Physical'] && !hasMove['batonpass']; - } else if (ability === 'Limber') { - rejectAbility = template.types.includes('Electric'); - } else if (ability === 'Lightning Rod') { - rejectAbility = template.types.includes('Ground'); - } else if (ability === 'Liquid Voice') { - rejectAbility = !hasMove['hypervoice']; - } else if (ability === 'Moody') { - rejectAbility = template.id !== 'bidoof'; - } else if (ability === 'Overgrow') { - rejectAbility = !counter['Grass']; - } else if (ability === 'Poison Heal') { - rejectAbility = abilities.includes('Technician') && !!counter['technician']; - } else if (ability === 'Prankster') { - rejectAbility = !counter['Status']; - } else if (ability === 'Reckless' || ability === 'Rock Head') { - rejectAbility = !counter['recoil']; - } else if (ability === 'Serene Grace') { - rejectAbility = !counter['serenegrace'] || template.id === 'chansey' || template.id === 'blissey'; - } else if (ability === 'Sheer Force') { - rejectAbility = !counter['sheerforce'] || hasMove['fakeout'] || (abilities.includes('Iron Fist') && counter['sheerforce'] < 2 && counter['ironfist'] > counter['sheerforce']); - } else if (ability === 'Simple') { - rejectAbility = !counter.setupType && !hasMove['cosmicpower'] && !hasMove['flamecharge']; - } else if (ability === 'Snow Cloak') { - rejectAbility = !teamDetails['hail']; - } else if (ability === 'Solar Power') { - rejectAbility = !counter['Special'] || template.isMega; - } else if (ability === 'Strong Jaw') { - rejectAbility = !counter['bite']; - } else if (ability === 'Sturdy') { - rejectAbility = !!counter['recoil'] && !counter['recovery']; - } else if (ability === 'Swift Swim') { - rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; - } else if (ability === 'Swarm') { - rejectAbility = !counter['Bug']; - } else if (ability === 'Synchronize') { - rejectAbility = counter.Status < 2; - } else if (ability === 'Technician') { - rejectAbility = !counter['technician'] || (abilities.includes('Skill Link') && counter['skilllink'] >= counter['technician']); - } else if (ability === 'Tinted Lens') { - rejectAbility = counter['damage'] >= counter.damagingMoves.length; - } else if (ability === 'Torrent') { - rejectAbility = !counter['Water']; - } else if (ability === 'Unburden') { - rejectAbility = template.baseStats.spe > 120 || (template.id === 'slurpuff' && !counter.setupType); - } else if (ability === 'Quick Feet') { - rejectAbility = hasMove['bellydrum'] && abilities.includes('Gluttony'); - } - - if (rejectAbility) { - if (ability === ability1.name) { // or not - ability = ability0.name; - } else if (ability1.rating > 0) { // only switch if the alternative doesn't suck - ability = ability1.name; - } - } - if (abilities.includes('Chlorophyll') && ability !== 'Solar Power') { - ability = 'Chlorophyll'; - } - if (abilities.includes('Guts') && ability !== 'Quick Feet' && hasMove['facade']) { - ability = 'Guts'; - } - if (abilities.includes('Intimidate') || template.id === 'mawilemega') { - ability = 'Intimidate'; - } - if (abilities.includes('Liquid Voice') && hasMove['hypervoice']) { - ability = 'Liquid Voice'; - } - if (abilities.includes('Swift Swim') && hasMove['raindance']) { - ability = 'Swift Swim'; - } - if (abilities.includes('Water Bubble') && counter['Water']) { - ability = 'Water Bubble'; - } - - if (template.id === 'ambipom' && !counter['technician']) { - // If it doesn't qualify for Technician, Skill Link is useless on it - // Might as well give it Pickup just in case - ability = 'Pickup'; - } else if (template.id === 'aurorus' && ability === 'Snow Warning' && hasMove['hypervoice']) { - for (let i = 0; i < moves.length; i++) { - if (moves[i] === 'hypervoice') { - moves[i] = 'blizzard'; - counter['Normal'] = 0; - break; - } - } - } else if (template.baseSpecies === 'Basculin') { - ability = 'Adaptability'; - } else if (template.id === 'gligar') { - ability = 'Immunity'; - } else if (template.id === 'lilligant' && hasMove['petaldance']) { - ability = 'Own Tempo'; - } else if (template.id === 'rampardos' && !hasMove['headsmash']) { - ability = 'Sheer Force'; - } else if (template.id === 'rhyperior') { - ability = 'Solid Rock'; - } else if (template.id === 'unfezant') { - ability = 'Super Luck'; - } else if (template.id === 'venusaurmega') { - ability = 'Chlorophyll'; - } - } - - // check IVs/EVs for Gyro Ball and TR - if (hasMove['gyroball'] || hasMove['trickroom']) { - ivs.spe = 0; - evs.spe = 0; - } - - item = 'Sitrus Berry'; - // First, the extra high-priority items - if (template.requiredItems) { - if (template.baseSpecies === 'Arceus' && hasMove['judgment'] && !teamDetails.zMove) { - // Judgment doesn't change type with Z-Crystals - item = template.requiredItems[0]; - } else { - item = template.requiredItems[this.random(template.requiredItems.length)]; - } - } else if (ability === 'Imposter') { - item = 'Choice Scarf'; - } else if (hasMove["magikarpsrevenge"]) { - item = 'Mystic Water'; - } else if (ability === 'Wonder Guard') { - item = 'Focus Sash'; - } else if (template.species === 'Unown') { - item = 'Choice Specs'; - } else if (hasMove['trick'] || hasMove['switcheroo']) { - let randomNum = this.random(2); - if (counter.Physical >= 3 && (template.baseStats.spe >= 95 || randomNum)) { - item = 'Choice Band'; - } else if (counter.Special >= 3 && (template.baseStats.spe >= 95 || randomNum)) { - item = 'Choice Specs'; - } else { - item = 'Choice Scarf'; - } - } else if (ability === 'Gluttony' || ability === 'Schooling') { - item = ['Aguav', 'Figy', 'Iapapa', 'Mago', 'Wiki'][this.random(5)] + ' Berry'; - } else if (hasMove['bellydrum']) { - if (template.baseStats.spe <= 50 && !teamDetails.zMove && this.random(2)) { - item = 'Normalium Z'; - } else { - item = 'Sitrus Berry'; - } - } else if (hasMove['hypnosis'] && (!teamDetails.zMove && counter.setupType && template.baseStats.spe < 100)) { - item = 'Psychium Z'; - } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { - item = 'Chesto Berry'; - } else if (hasMove['naturalgift']) { - item = 'Liechi Berry'; - } else if (hasMove['geomancy']) { - item = 'Power Herb'; - } else if (ability === 'Harvest') { - item = 'Sitrus Berry'; - } else if (template.species === 'Cubone' || template.species === 'Marowak') { - item = 'Thick Club'; - } else if (template.baseSpecies === 'Pikachu') { - item = 'Light Ball'; - } else if (template.species === 'Clamperl') { - item = 'Deep Sea Tooth'; - } else if (template.species === 'Spiritomb') { - item = 'Leftovers'; - } else if (template.species === 'Scrafty' && counter['Status'] === 0) { - item = 'Assault Vest'; - } else if (template.species === 'Farfetch\'d') { - item = 'Stick'; - } else if (template.species === 'Amoonguss') { - item = 'Black Sludge'; - } else if (template.species === 'Dedenne') { - item = 'Petaya Berry'; - } else if (template.species === 'Wobbuffet') { - item = hasMove['destinybond'] ? 'Custap Berry' : 'Sitrus Berry'; - } else if (template.species === 'Raichu-Alola' && hasMove['thunderbolt'] && !teamDetails.zMove && this.random(4) < 1) { - item = 'Aloraichium Z'; - } else if (hasMove['focusenergy'] || (template.species === 'Unfezant' && counter['Physical'] >= 2)) { - item = 'Scope Lens'; - } else if (template.evos.length) { - item = 'Eviolite'; - } else if ((hasMove['reflect'] && hasMove['lightscreen']) || hasMove['auroraveil']) { - item = 'Light Clay'; - } else if (hasMove['shellsmash']) { - item = (ability === 'Solid Rock' && counter['priority']) ? 'Weakness Policy' : 'White Herb'; - } else if (hasMove['facade'] || ability === 'Poison Heal' || ability === 'Toxic Boost') { - item = 'Toxic Orb'; - } else if (hasMove['raindance']) { - item = 'Damp Rock'; - } else if (hasMove['sunnyday']) { - item = 'Heat Rock'; - } else if (hasMove['sandstorm']) { - item = 'Smooth Rock'; - } else if (hasMove['hail']) { - item = 'Icy Rock'; - } else if (ability === 'Magic Guard' && hasMove['psychoshift']) { - item = 'Flame Orb'; - } else if (ability === 'Sheer Force' || ability === 'Magic Guard') { - item = 'Life Orb'; - } else if (ability === 'Unburden') { - if (hasMove['fakeout']) { - item = 'Normal Gem'; - } else { - item = 'Sitrus Berry'; - } - } else if (hasMove['acrobatics']) { - item = ''; - - // medium priority - } else if (ability === 'Guts') { - item = hasType['Fire'] ? 'Toxic Orb' : 'Flame Orb'; - } else if (ability === 'Marvel Scale') { - item = 'Flame Orb'; - } else if (counter.Physical >= 4 && template.baseStats.spe > 55 && !hasMove['fakeout'] && !hasMove['suckerpunch'] && !hasMove['flamecharge'] && !hasMove['rapidspin'] && ability !== 'Sturdy' && ability !== 'Multiscale') { - item = 'Life Orb'; - } else if (counter.Special >= 4 && template.baseStats.spe > 55 && !hasMove['eruption'] && !hasMove['waterspout'] && ability !== 'Sturdy') { - item = 'Life Orb'; - } else if (this.getImmunity('Ground', template) && this.getEffectiveness('Ground', template) >= 2 && ability !== 'Levitate' && !hasMove['magnetrise']) { - item = 'Air Balloon'; - } else if (this.getEffectiveness('Ice', template) >= 2) { - item = 'Yache Berry'; - } else if (this.getEffectiveness('Rock', template) >= 2) { - item = 'Charti Berry'; - } else if (this.getEffectiveness('Fire', template) >= 2) { - item = 'Occa Berry'; - } else if (this.getImmunity('Fighting', template) && this.getEffectiveness('Fighting', template) >= 2) { - item = 'Chople Berry'; - } else if (ability === 'Iron Barbs' || ability === 'Rough Skin') { - item = 'Rocky Helmet'; - } else if (counter.Physical + counter.Special >= 4 && ability === 'Regenerator' && template.baseStats[counter.Special >= 2 ? 'atk' : 'spa'] > 99 && template.baseStats.spe <= 80) { - item = 'Assault Vest'; - } else if ((template.baseStats.hp + 75) * (template.baseStats.def + template.baseStats.spd + 175) > 60000 || template.species === 'Skarmory' || template.species === 'Forretress') { - // skarmory and forretress get exceptions for their typing - item = 'Sitrus Berry'; - } else if (counter.Physical + counter.Special >= 3 && counter.setupType && ability !== 'Sturdy' && ability !== 'Multiscale') { - item = 'Life Orb'; - } else if (counter.Special >= 3 && counter.setupType && ability !== 'Sturdy') { - item = 'Life Orb'; - } else if (counter.Physical + counter.Special >= 4 && template.baseStats.def + template.baseStats.spd > 179) { - item = 'Assault Vest'; - } else if (counter.damagingMoves.length >= 3 && !!counter['speedsetup'] && template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 300) { - item = 'Weakness Policy'; - } else if (counter.Physical + counter.Special >= 4) { - item = 'Expert Belt'; - } else if (hasMove['outrage']) { - item = 'Lum Berry'; - } else if (hasMove['substitute'] || hasMove['detect'] || hasMove['protect'] || ability === 'Moody') { - item = 'Leftovers'; - } else if (this.getImmunity('Ground', template) && this.getEffectiveness('Ground', template) >= 1 && ability !== 'Levitate' && !hasMove['magnetrise']) { - item = 'Air Balloon'; - } else if (this.getEffectiveness('Ice', template) >= 1) { - item = 'Yache Berry'; - - // this is the "REALLY can't think of a good item" cutoff - } else if (counter.Physical + counter.Special >= 2 && template.baseStats.hp + template.baseStats.def + template.baseStats.spd > 315) { - item = 'Weakness Policy'; - } else if (ability === 'Sturdy' && hasMove['explosion'] && !counter['speedsetup']) { - item = 'Custap Berry'; - } else if (ability === 'Super Luck') { - item = 'Scope Lens'; - } else if (ability === 'Gale Wings' && hasMove['bravebird']) { - item = !teamDetails.zMove ? 'Flyinium Z' : 'Sharp Beak'; - } else if (hasType['Poison']) { - item = 'Black Sludge'; - } else if (counter.Status <= 1 && ability !== 'Sturdy' && ability !== 'Multiscale') { - item = 'Life Orb'; - } else { - item = 'Sitrus Berry'; - } - - // For Trick / Switcheroo - if (item === 'Leftovers' && hasType['Poison']) { - item = 'Black Sludge'; - } - - // 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 - let baseStats = template.baseStats; - // If Wishiwashi, use the school-forme's much higher stats - if (template.baseSpecies === 'Wishiwashi') baseStats = Dex.getTemplate('wishiwashischool').baseStats; - - let bst = baseStats.hp + baseStats.atk + baseStats.def + baseStats.spa + baseStats.spd + baseStats.spe; - // 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.) - let templateAbility = (baseTemplate === template ? ability : template.abilities[0]); - if (templateAbility === 'Huge Power' || templateAbility === 'Pure Power') { - bst += baseStats.atk; - } else if (templateAbility === 'Parental Bond') { - bst += 0.25 * (counter.Physical > counter.Special ? baseStats.atk : baseStats.spa); - } else if (templateAbility === 'Protean') { - bst += 0.3 * (counter.Physical > counter.Special ? baseStats.atk : baseStats.spa); - } else if (templateAbility === 'Fur Coat') { - bst += baseStats.def; - } else if (templateAbility === 'Slow Start') { - bst -= baseStats.atk / 2 + baseStats.spe / 2; - } else if (templateAbility === 'Truant') { - bst *= 2 / 3; - } - if (item === 'Eviolite') { - bst += 0.5 * (baseStats.def + baseStats.spd); - } - let level = 70 + Math.floor(((600 - this.clampIntRange(bst, 300, 600)) / 10.34)); - - // Prepare optimal HP - let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - if (hasMove['substitute'] && (item === 'Sitrus Berry' || (ability === 'Power Construct' && item !== 'Leftovers'))) { - // Two Substitutes should activate Sitrus Berry or Power Construct - while (hp % 4 > 0) { - evs.hp -= 4; - hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - } - } else if (hasMove['bellydrum'] && (item === 'Sitrus Berry' || ability === 'Gluttony')) { - // Belly Drum should activate Sitrus Berry - if (hp % 2 > 0) evs.hp -= 4; - } else if (hasMove['substitute'] && hasMove['reversal']) { - // Reversal users should be able to use four Substitutes - if (hp % 4 === 0) evs.hp -= 4; - } - - return { - name: template.baseSpecies, - species: species, - moves: moves, - ability: ability, - evs: evs, - ivs: ivs, - item: item, - level: level, - shiny: !this.random(template.id === 'missingno' ? 4 : 1024), - }; - } - randomFactorySet(template, slot, teamData, tier) { - let speciesId = toId(template.species); - // let flags = this.randomFactorySets[tier][speciesId].flags; - let setList = this.randomFactorySets[tier][speciesId].sets; - let effectivePool, priorityPool; - - let itemsMax = {'choicespecs':1, 'choiceband':1, 'choicescarf':1}; - let movesMax = {'rapidspin':1, 'batonpass':1, 'stealthrock':1, 'defog':1, 'spikes':1, 'toxicspikes':1}; - let requiredMoves = {'stealthrock': 'hazardSet', 'rapidspin': 'hazardClear', 'defog': 'hazardClear'}; - let weatherAbilitiesRequire = { - 'hydration': 'raindance', 'swiftswim': 'raindance', - 'leafguard': 'sunnyday', 'solarpower': 'sunnyday', 'chlorophyll': 'sunnyday', - 'sandforce': 'sandstorm', 'sandrush': 'sandstorm', 'sandveil': 'sandstorm', - 'snowcloak': 'hail', - }; - let weatherAbilitiesSet = {'drizzle':1, 'drought':1, 'snowwarning':1, 'sandstream':1}; - - // Build a pool of eligible sets, given the team partners - // Also keep track of sets with moves the team requires - effectivePool = []; - priorityPool = []; - for (let i = 0, l = setList.length; i < l; i++) { - let curSet = setList[i]; - let itemData = this.getItem(curSet.item); - if (teamData.megaCount > 0 && itemData.megaStone) continue; // reject 2+ mega stones - if (itemsMax[itemData.id] && teamData.has[itemData.id] >= itemsMax[itemData.id]) continue; - - let abilityData = this.getAbility(curSet.ability); - if (weatherAbilitiesRequire[abilityData.id] && teamData.weather !== weatherAbilitiesRequire[abilityData.id]) continue; - if (teamData.weather && weatherAbilitiesSet[abilityData.id]) continue; // reject 2+ weather setters + // Build a pool of eligible sets, given the team partners + // Also keep track of sets with moves the team requires + /**@type {{set: AnyObject, moveVariants?: number[]}[]} */ + let effectivePool = []; + let priorityPool = []; + for (const curSet of setList) { + let item = this.getItem(curSet.item); + if (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; + + let ability = this.getAbility(curSet.ability); + // @ts-ignore + if (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue; + if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters let reject = false; let hasRequiredMove = false; let curSetVariants = []; - for (let j = 0, m = curSet.moves.length; j < m; j++) { - let variantIndex = this.random(curSet.moves[j].length); - let moveId = toId(curSet.moves[j][variantIndex]); + for (const move of curSet.moves) { + let variantIndex = this.random(move.length); + let moveId = toId(move[variantIndex]); if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) { reject = true; break; } + // @ts-ignore if (requiredMoves[moveId] && !teamData.has[requiredMoves[moveId]]) { hasRequiredMove = true; } @@ -2568,50 +1903,74 @@ class RandomTeams extends Dex.ModdedDex { if (!effectivePool.length) { if (!teamData.forceResult) return false; - for (let i = 0; i < setList.length; i++) { - effectivePool.push({set: setList[i]}); + for (const curSet of setList) { + effectivePool.push({set: curSet}); } } - let setData = effectivePool[this.random(effectivePool.length)]; + let setData = this.sample(effectivePool); let moves = []; - for (let i = 0; i < setData.set.moves.length; i++) { - let moveSlot = setData.set.moves[i]; - moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : moveSlot[this.random(moveSlot.length)]); + for (const [i, moveSlot] of setData.set.moves.entries()) { + moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot)); } + let item = Array.isArray(setData.set.item) ? this.sample(setData.set.item) : setData.set.item; + let ability = Array.isArray(setData.set.ability) ? this.sample(setData.set.ability) : setData.set.ability; + let nature = Array.isArray(setData.set.nature) ? this.sample(setData.set.nature) : setData.set.nature; + return { name: setData.set.name || template.baseSpecies, species: setData.set.species, - gender: setData.set.gender || template.gender || (this.random(2) ? 'M' : 'F'), - item: setData.set.item || '', - ability: setData.set.ability || template.abilities['0'], - shiny: typeof setData.set.shiny === 'undefined' ? !this.random(1024) : setData.set.shiny, - level: 100, + gender: setData.set.gender || template.gender || (this.randomChance(1, 2) ? 'M' : 'F'), + item: item || '', + ability: ability || template.abilities['0'], + shiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny, + level: setData.set.level ? setData.set.level : tier === "LC" ? 5 : 100, happiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness, - evs: setData.set.evs || {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, - ivs: setData.set.ivs || {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, - nature: setData.set.nature || 'Serious', + evs: Object.assign({hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, setData.set.evs), + ivs: Object.assign({hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, setData.set.ivs), + nature: nature || 'Serious', moves: moves, }; } + + /** + * @param {number} [depth] + * @return {RandomTeamsTypes["RandomFactorySet"][]} + */ randomFactoryTeam(depth = 0) { let forceResult = (depth >= 4); // The teams generated depend on the tier choice in such a way that // no exploitable information is leaked from rolling the tier in getTeam(p1). - let availableTiers = ['Uber', 'OU', 'UU', 'RU', 'NU', 'PU']; - if (!this.factoryTier) this.factoryTier = availableTiers[this.random(availableTiers.length)]; - const chosenTier = this.factoryTier; + let availableTiers = ['Uber', 'OU', 'UU', 'RU', 'NU', 'PU', 'LC', 'Mono']; + if (!this.FactoryTier) this.FactoryTier = this.sample(availableTiers); + const chosenTier = this.FactoryTier; + + /**@type {{[k: string]: number}} */ + const tierValues = { + 'Uber': 5, + 'OU': 4, 'UUBL': 4, + 'UU': 3, 'RUBL': 3, + 'RU': 2, 'NUBL': 2, + 'NU': 1, 'PUBL': 1, + 'PU': 0, + }; let pokemon = []; - let pokemonPool = Object.keys(this.randomFactorySets[chosenTier]); - let teamData = {typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, has: {}, forceResult: forceResult, weaknesses: {}, resistances: {}}; - let requiredMoveFamilies = {'hazardSet': 1, 'hazardClear':1}; + let typePool = Object.keys(this.data.TypeChart); + const type = this.sample(typePool); + + /**@type {TeamData} */ + let teamData = {typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0, has: {}, forceResult: forceResult, weaknesses: {}, resistances: {}}; + let requiredMoveFamilies = ['hazardSet', 'hazardClear']; + /**@type {{[k: string]: string}} */ let requiredMoves = {'stealthrock': 'hazardSet', 'rapidspin': 'hazardClear', 'defog': 'hazardClear'}; + /**@type {{[k: string]: string}} */ let weatherAbilitiesSet = {'drizzle': 'raindance', 'drought': 'sunnyday', 'snowwarning': 'hail', 'sandstream': 'sandstorm'}; + /**@type {{[k: string]: string[]}} */ let resistanceAbilities = { 'dryskin': ['Water'], 'waterabsorb': ['Water'], 'stormdrain': ['Water'], 'flashfire': ['Fire'], 'heatproof': ['Fire'], @@ -2625,6 +1984,9 @@ class RandomTeams extends Dex.ModdedDex { let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); if (!template.exists) continue; + // Lessen the need of deleting sets of Pokemon after tier shifts + if (chosenTier in tierValues && template.tier in tierValues && tierValues[template.tier] > tierValues[chosenTier]) continue; + let speciesFlags = this.randomFactorySets[chosenTier][template.speciesid].flags; // Limit to one of each species (Species Clause) @@ -2633,45 +1995,68 @@ class RandomTeams extends Dex.ModdedDex { // Limit the number of Megas to one if (teamData.megaCount >= 1 && speciesFlags.megaOnly) continue; - // Limit 2 of any type - let types = template.types; - let skip = false; - for (let t = 0; t < types.length; t++) { - if (teamData.typeCount[types[t]] > 1 && this.random(5)) { - skip = true; - break; - } - } - if (skip) continue; - let set = this.randomFactorySet(template, pokemon.length, teamData, chosenTier); if (!set) continue; - // Limit 1 of any type combination - let typeCombo = types.slice().sort().join(); - if (set.ability === 'Drought' || set.ability === 'Drizzle') { + let itemData = this.getItem(set.item); + + // Actually limit the number of Megas to one + if (teamData.megaCount >= 1 && itemData.megaStone) continue; + + // Limit the number of Z moves to one + if (teamData.zCount >= 1 && itemData.zMove) continue; + + let types = template.types; + + // Enforce Monotype + if (chosenTier === 'Mono') { + // Prevents Mega Evolutions from breaking the type limits + if (itemData.megaStone) { + let megaTemplate = this.getTemplate(itemData.megaStone); + if (types.length > megaTemplate.types.length) types = [template.types[0]]; + // Only check the second type because a Mega Evolution should always share the first type with its base forme. + if (megaTemplate.types[1] && types[1] && megaTemplate.types[1] !== types[1]) { + types = [megaTemplate.types[0]]; + } + } + if (!types.includes(type)) continue; + } else { + // If not Monotype, limit to two of each type + let skip = false; + for (const type of types) { + if (teamData.typeCount[type] > 1 && this.randomChance(4, 5)) { + skip = true; + break; + } + } + if (skip) 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; + typeCombo = set.ability + ''; + } + if (typeCombo in teamData.typeComboCount) continue; } - if (typeCombo in teamData.typeComboCount) continue; // Okay, the set passes, add it to our team pokemon.push(set); - + let typeCombo = types.slice().sort().join(); // Now that our Pokemon has passed all checks, we can update team data: - for (let t = 0; t < types.length; t++) { - if (types[t] in teamData.typeCount) { - teamData.typeCount[types[t]]++; + for (const type of types) { + if (type in teamData.typeCount) { + teamData.typeCount[type]++; } else { - teamData.typeCount[types[t]] = 1; + teamData.typeCount[type] = 1; } } teamData.typeComboCount[typeCombo] = 1; teamData.baseFormes[template.baseSpecies] = 1; - let itemData = this.getItem(set.item); if (itemData.megaStone) teamData.megaCount++; + if (itemData.zMove) teamData.zCount++; if (itemData.id in teamData.has) { teamData.has[itemData.id]++; } else { @@ -2683,8 +2068,8 @@ class RandomTeams extends Dex.ModdedDex { teamData.weather = weatherAbilitiesSet[abilityData.id]; } - for (let m = 0; m < set.moves.length; m++) { - let moveId = toId(set.moves[m]); + for (const move of set.moves) { + let moveId = toId(move); if (moveId in teamData.has) { teamData.has[moveId]++; } else { @@ -2717,7 +2102,7 @@ class RandomTeams extends Dex.ModdedDex { // Quality control if (!teamData.forceResult) { - for (let requiredFamily in requiredMoveFamilies) { + for (const requiredFamily of requiredMoveFamilies) { if (!teamData.has[requiredFamily]) return this.randomFactoryTeam(++depth); } for (let type in teamData.weaknesses) { @@ -2727,54 +2112,52 @@ class RandomTeams extends Dex.ModdedDex { return pokemon; } - randomBSSFactorySet(template, slot, teamData, tier) { + + /** + * @param {Template} template + * @param {number} slot + * @param {RandomTeamsTypes["FactoryTeamDetails"]} teamData + * @return {RandomTeamsTypes["RandomFactorySet"] | false} + */ + randomBSSFactorySet(template, slot, teamData) { let speciesId = toId(template.species); // let flags = this.randomBSSFactorySets[tier][speciesId].flags; - let setList = this.randomBSSFactorySets[tier][speciesId].sets; - let effectivePool, priorityPool; - // artificially replicate Item Clause - let itemsMax = { - aguavberry:1, airballoon:1, alakazite:1, assaultvest:1, beedrillite:1, blacksludge:1, blastoisinite:1, blazikenite:1, - buginiumz:1, charizarditex:1, charizarditey:1, chestoberry:1, choiceband:1, choicescarf:1, choicespecs:1, darkiniumz:1, - dragoniumz:1, eeviumz:1, ejectbutton:1, electricmemory:1, electricseed:1, electriumz:1, eviolite:1, expertbelt:1, fairiumz:1, - fightingmemory:1, fightiniumz:1, figyberry:1, firiumz:1, fistplate:1, flameorb:1, flyiniumz:1, focussash:1, gengarite:1, - ghostiumz:1, glalitite:1, grassiumz:1, groundiumz:1, groundmemory:1, gyaradosite:1, heatrock:1, heracronite:1, iapapaberry:1, - iciumz:1, kangaskhanite:1, keeberry:1, kingsrock:1, leftovers:1, lifeorb:1, lightball:1, lightclay:1, lucarionite:1, lumberry:1, - magoberry:1, mawilite:1, medichamite:1, mentalherb:1, metagrossite:1, normaliumz:1, occaberry:1, pidgeotite:1, pinsirite:1, - poisoniumz:1, primariumz:1, psychiumz:1, redcard:1, rockiumz:1, rockyhelmet:1, safetygoggles:1, salacberry:1, salamencite:1, - scizorite:1, scopelens:1, sharpedonite:1, shucaberry:1, sitrusberry:1, slowbronite:1, smoothrock:1, steeliumz:1, steelixite:1, - steelmemory:1, tapuniumz:1, thickclub:1, toxicorb:1, venusaurite:1, wateriumz:1, weaknesspolicy:1, wikiberry:1, - }; + let setList = this.randomBSSFactorySets[speciesId].sets; - let movesMax = {'batonpass':1, 'stealthrock':1, 'spikes':1, 'toxicspikes':1, 'doubleedge':1, 'trickroom':1}; + /**@type {{[k: string]: number}} */ + let movesMax = {'batonpass': 1, 'stealthrock': 1, 'spikes': 1, 'toxicspikes': 1, 'doubleedge': 1, 'trickroom': 1}; + /**@type {{[k: string]: string}} */ let requiredMoves = {}; + /**@type {{[k: string]: string}} */ let weatherAbilitiesRequire = { 'swiftswim': 'raindance', 'sandrush': 'sandstorm', 'sandveil': 'sandstorm', }; - let weatherAbilitiesSet = {'drizzle':1, 'drought':1, 'snowwarning':1, 'sandstream':1}; + let weatherAbilities = ['drizzle', 'drought', 'snowwarning', 'sandstream']; // Build a pool of eligible sets, given the team partners // Also keep track of sets with moves the team requires - effectivePool = []; - priorityPool = []; - for (let i = 0, l = setList.length; i < l; i++) { - let curSet = setList[i]; - let itemData = this.getItem(curSet.item); - if (teamData.megaCount > 1 && itemData.megaStone) continue; // reject 3+ mega stones - if (teamData.zCount > 1 && itemData.zMove) continue; // reject 3+ Z stones - if (itemsMax[itemData.id] && teamData.has[itemData.id] >= itemsMax[itemData.id]) continue; - - let abilityData = this.getAbility(curSet.ability); - if (weatherAbilitiesRequire[abilityData.id] && teamData.weather !== weatherAbilitiesRequire[abilityData.id]) continue; - if (teamData.weather && weatherAbilitiesSet[abilityData.id]) continue; // reject 2+ weather setters + /**@type {{set: AnyObject, moveVariants?: number[], itemVariants?: number, abilityVariants?: number}[]} */ + let effectivePool = []; + let priorityPool = []; + for (const curSet of setList) { + let item = this.getItem(curSet.item); + if (teamData.megaCount > 1 && item.megaStone) continue; // reject 3+ mega stones + if (teamData.zCount && teamData.zCount > 1 && item.zMove) continue; // reject 3+ Z stones + if (teamData.has[item.id]) continue; // Item clause + + let ability = this.getAbility(curSet.ability); + if (weatherAbilitiesRequire[ability.id] && teamData.weather !== weatherAbilitiesRequire[ability.id]) continue; + if (teamData.weather && weatherAbilities.includes(ability.id)) continue; // reject 2+ weather setters + + if (curSet.species === 'Aron' && teamData.weather !== 'sandstorm') continue; // reject Aron without a Sand Stream user let reject = false; let hasRequiredMove = false; let curSetVariants = []; - for (let j = 0, m = curSet.moves.length; j < m; j++) { - let variantIndex = this.random(curSet.moves[j].length); - let moveId = toId(curSet.moves[j][variantIndex]); + for (const move of curSet.moves) { + let variantIndex = this.random(move.length); + let moveId = toId(move[variantIndex]); if (movesMax[moveId] && teamData.has[moveId] >= movesMax[moveId]) { reject = true; break; @@ -2792,47 +2175,53 @@ class RandomTeams extends Dex.ModdedDex { if (!effectivePool.length) { if (!teamData.forceResult) return false; - for (let i = 0; i < setList.length; i++) { - effectivePool.push({set: setList[i]}); + for (const curSet of setList) { + effectivePool.push({set: curSet}); } } - let setData = effectivePool[this.random(effectivePool.length)]; + let setData = this.sample(effectivePool); let moves = []; - for (let i = 0; i < setData.set.moves.length; i++) { - let moveSlot = setData.set.moves[i]; - moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : moveSlot[this.random(moveSlot.length)]); + for (const [i, moveSlot] of setData.set.moves.entries()) { + moves.push(setData.moveVariants ? moveSlot[setData.moveVariants[i]] : this.sample(moveSlot)); } return { name: setData.set.nickname || setData.set.name || template.baseSpecies, species: setData.set.species, - gender: setData.set.gender || template.gender || (this.random(2) ? 'M' : 'F'), + gender: setData.set.gender || template.gender || (this.randomChance(1, 2) ? 'M' : 'F'), item: setData.set.item || '', ability: setData.set.ability || template.abilities['0'], - shiny: typeof setData.set.shiny === 'undefined' ? !this.random(1024) : setData.set.shiny, - level: 50, + shiny: typeof setData.set.shiny === 'undefined' ? this.randomChance(1, 1024) : setData.set.shiny, + level: setData.set.level || 50, happiness: typeof setData.set.happiness === 'undefined' ? 255 : setData.set.happiness, - evs: setData.set.evs || {hp: 84, atk: 84, def: 84, spa: 84, spd: 84, spe: 84}, - ivs: setData.set.ivs || {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, + evs: Object.assign({hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}, setData.set.evs), + ivs: Object.assign({hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}, setData.set.ivs), nature: setData.set.nature || 'Serious', moves: moves, }; } + + /** + * @param {number} [depth] + * @return {RandomTeamsTypes["RandomFactorySet"][]} + */ randomBSSFactoryTeam(depth = 0) { let forceResult = (depth >= 4); - // Make chosen tier always BSS - const chosenTier = 'BSS'; - let pokemon = []; - let pokemonPool = Object.keys(this.randomBSSFactorySets[chosenTier]); + let pokemonPool = Object.keys(this.randomBSSFactorySets); - let teamData = {typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0, has: {}, forceResult: forceResult, weaknesses: {}, resistances: {}}; - let requiredMoveFamilies = {}; + /**@type {TeamData} */ + let teamData = {typeCount: {}, typeComboCount: {}, baseFormes: {}, megaCount: 0, zCount: 0, eeveeLimCount: 0, has: {}, forceResult: forceResult, weaknesses: {}, resistances: {}}; + /**@type {string[]} */ + let requiredMoveFamilies = []; + /**@type {{[k: string]: string}} */ let requiredMoves = {}; + /**@type {{[k: string]: string}} */ let weatherAbilitiesSet = {'drizzle': 'raindance', 'drought': 'sunnyday', 'snowwarning': 'hail', 'sandstream': 'sandstorm'}; + /**@type {{[k: string]: string[]}} */ let resistanceAbilities = { 'waterabsorb': ['Water'], 'flashfire': ['Fire'], @@ -2845,7 +2234,7 @@ class RandomTeams extends Dex.ModdedDex { let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); if (!template.exists) continue; - let speciesFlags = this.randomBSSFactorySets[chosenTier][template.speciesid].flags; + let speciesFlags = this.randomBSSFactorySets[template.speciesid].flags; // Limit to one of each species (Species Clause) if (teamData.baseFormes[template.baseSpecies]) continue; @@ -2856,15 +2245,19 @@ class RandomTeams extends Dex.ModdedDex { // Limit 2 of any type let types = template.types; let skip = false; - for (let t = 0; t < types.length; t++) { - if (teamData.typeCount[types[t]] > 1 && this.random(5)) { + for (const type of types) { + if (teamData.typeCount[type] > 1 && this.randomChance(4, 5)) { skip = true; break; } } if (skip) continue; - let set = this.randomBSSFactorySet(template, pokemon.length, teamData, chosenTier); + // Restrict Eevee with certain Pokemon + if (speciesFlags.limEevee) teamData.eeveeLimCount++; + if (teamData.eeveeLimCount >= 1 && speciesFlags.limEevee) continue; + + let set = this.randomBSSFactorySet(template, pokemon.length, teamData); if (!set) continue; // Limit 1 of any type combination @@ -2879,11 +2272,11 @@ class RandomTeams extends Dex.ModdedDex { pokemon.push(set); // Now that our Pokemon has passed all checks, we can update team data: - for (let t = 0; t < types.length; t++) { - if (types[t] in teamData.typeCount) { - teamData.typeCount[types[t]]++; + for (const type of types) { + if (type in teamData.typeCount) { + teamData.typeCount[type]++; } else { - teamData.typeCount[types[t]] = 1; + teamData.typeCount[type] = 1; } } teamData.typeComboCount[typeCombo] = 1; @@ -2893,25 +2286,16 @@ class RandomTeams extends Dex.ModdedDex { // Limit Mega and Z-move let itemData = this.getItem(set.item); if (itemData.megaStone) teamData.megaCount++; - if (itemData.id in teamData.has) { - teamData.has[itemData.id]++; - } else { - teamData.has[itemData.id] = 1; - } if (itemData.zMove) teamData.zCount++; - if (itemData.id in teamData.has) { - teamData.has[itemData.id]++; - } else { - teamData.has[itemData.id] = 1; - } + teamData.has[itemData.id] = 1; let abilityData = this.getAbility(set.ability); if (abilityData.id in weatherAbilitiesSet) { teamData.weather = weatherAbilitiesSet[abilityData.id]; } - for (let m = 0; m < set.moves.length; m++) { - let moveId = toId(set.moves[m]); + for (const move of set.moves) { + let moveId = toId(move); if (moveId in teamData.has) { teamData.has[moveId]++; } else { @@ -2944,7 +2328,7 @@ class RandomTeams extends Dex.ModdedDex { // Quality control if (!teamData.forceResult) { - for (let requiredFamily in requiredMoveFamilies) { + for (const requiredFamily of requiredMoveFamilies) { if (!teamData.has[requiredFamily]) return this.randomBSSFactoryTeam(++depth); } for (let type in teamData.weaknesses) { diff --git a/data/rulesets.js b/data/rulesets.js index f57423fd009c8..8f6f42619268d 100644 --- a/data/rulesets.js +++ b/data/rulesets.js @@ -3,7 +3,8 @@ 'use strict'; -exports.BattleFormats = { +/**@type {{[k: string]: FormatsData}} */ +let BattleFormats = { // Rulesets /////////////////////////////////////////////////////////////////// @@ -11,25 +12,29 @@ exports.BattleFormats = { standard: { effectType: 'ValidatorRule', name: 'Standard', + desc: "The standard ruleset for all offical Smogon singles tiers (Ubers, OU, etc.)", ruleset: ['Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Unreleased', 'Illegal'], }, standardnext: { effectType: 'ValidatorRule', name: 'Standard NEXT', + desc: "The standard ruleset for the NEXT mod", ruleset: ['Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'OHKO Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Illegal', 'Soul Dew'], }, standardubers: { effectType: 'ValidatorRule', name: 'Standard Ubers', + desc: "The standard ruleset for [Gen 5] Ubers", ruleset: ['Sleep Clause Mod', 'Species Clause', 'Nickname Clause', 'Moody Clause', 'OHKO Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Unreleased', 'Illegal'], }, standardgbu: { effectType: 'ValidatorRule', name: 'Standard GBU', - ruleset: ['Species Clause', 'Nickname Clause', 'Item Clause', 'Cancel Mod'], + desc: "The standard ruleset for all official in-game Pokémon tournaments and Battle Spot", + ruleset: ['Species Clause', 'Nickname Clause', 'Item Clause', 'Team Preview', 'Cancel Mod'], banlist: ['Unreleased', 'Illegal', 'Battle Bond', 'Mewtwo', 'Mew', 'Lugia', 'Ho-Oh', 'Celebi', @@ -37,7 +42,27 @@ exports.BattleFormats = { 'Dialga', 'Palkia', 'Giratina', 'Phione', 'Manaphy', 'Darkrai', 'Shaymin', 'Arceus', 'Victini', 'Reshiram', 'Zekrom', 'Kyurem', 'Keldeo', 'Meloetta', 'Genesect', 'Xerneas', 'Yveltal', 'Zygarde', 'Diancie', 'Hoopa', 'Volcanion', - 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma', 'Magearna', 'Marshadow', + 'Cosmog', 'Cosmoem', 'Solgaleo', 'Lunala', 'Necrozma', 'Magearna', 'Marshadow', 'Zeraora', + ], + onValidateSet(set, format) { + if (this.gen < 7 && toId(set.item) === 'souldew') { + return [`${set.name || set.species} has Soul Dew, which is banned in ${format.name}.`]; + } + }, + }, + minimalgbu: { + effectType: 'ValidatorRule', + name: 'Minimal GBU', + desc: "The standard ruleset for official tournaments, but without Restricted Legendary bans", + ruleset: ['Species Clause', 'Nickname Clause', 'Item Clause', 'Team Preview', 'Cancel Mod'], + banlist: ['Unreleased', 'Illegal', 'Battle Bond', + 'Mew', + 'Celebi', + 'Jirachi', 'Deoxys', + 'Phione', 'Manaphy', 'Darkrai', 'Shaymin', 'Arceus', + 'Victini', 'Keldeo', 'Meloetta', 'Genesect', + 'Diancie', 'Hoopa', 'Volcanion', + 'Magearna', 'Marshadow', 'Zeraora', ], onValidateSet(set, format) { if (this.gen < 7 && toId(set.item) === 'souldew') { @@ -48,30 +73,49 @@ exports.BattleFormats = { standarddoubles: { effectType: 'ValidatorRule', name: 'Standard Doubles', + desc: "The standard ruleset for all official Smogon doubles tiers", ruleset: ['Species Clause', 'Nickname Clause', 'OHKO Clause', 'Moody Clause', 'Evasion Abilities Clause', 'Evasion Moves Clause', 'Endless Battle Clause', 'HP Percentage Mod', 'Cancel Mod'], banlist: ['Unreleased', 'Illegal'], }, pokemon: { effectType: 'ValidatorRule', name: 'Pokemon', - onValidateTeam: function (team, format) { + desc: "Applies the basic limitations of pokemon games: level 100, 6 pokemon, 4 moves, no CAP, no future-gen pokemon/moves/etc - but does not include illegal move/ability validation", + onValidateTeam(team, format) { let problems = []; + if (team.length > 6) problems.push('Your team has more than six Pok\u00E9mon.'); // ----------- legality line ------------------------------------------ if (!format || !this.getRuleTable(format).has('-illegal')) return problems; // everything after this line only happens if we're doing legality enforcement let kyurems = 0; - for (let i = 0; i < team.length; i++) { - if (team[i].species === 'Kyurem-White' || team[i].species === 'Kyurem-Black') { + let ndm = 0; + let ndw = 0; + for (const set of team) { + if (set.species === 'Kyurem-White' || set.species === 'Kyurem-Black') { if (kyurems > 0) { problems.push('You cannot have more than one Kyurem-Black/Kyurem-White.'); break; } kyurems++; } + if (set.species === 'Necrozma-Dusk-Mane') { + if (ndm > 0) { + problems.push('You cannot have more than one Necrozma-Dusk-Mane.'); + break; + } + ndm++; + } + if (set.species === 'Necrozma-Dawn-Wings') { + if (ndw > 0) { + problems.push('You cannot have more than one Necrozma-Dawn-Wings.'); + break; + } + ndw++; + } } return problems; }, - onChangeSet: function (set, format) { + onChangeSet(set, format) { let item = this.getItem(set.item); let template = this.getTemplate(set.species); let problems = []; @@ -82,9 +126,11 @@ exports.BattleFormats = { if (template.gen > this.gen) { problems.push(set.species + ' does not exist in gen ' + this.gen + '.'); } - if ((template.num === 25 || template.num === 172) && template.tier === 'Illegal') { + if (template.gen && template.gen !== this.gen && template.tier === 'Illegal') { problems.push(set.species + ' does not exist outside of gen ' + template.gen + '.'); } + /**@type {Ability} */ + // @ts-ignore let ability = {}; if (set.ability) { ability = this.getAbility(set.ability); @@ -93,8 +139,8 @@ exports.BattleFormats = { } } if (set.moves) { - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const moveid of set.moves) { + let move = this.getMove(moveid); if (move.gen > this.gen) { problems.push(move.name + ' does not exist in gen ' + this.gen + '.'); } else if (!allowCAP && move.isNonstandard) { @@ -113,7 +159,7 @@ exports.BattleFormats = { } if (!allowCAP || !template.tier.startsWith('CAP')) { - if (template.isNonstandard) { + if (template.isNonstandard && template.num > -5000) { problems.push(set.species + ' does not exist.'); } } @@ -130,12 +176,18 @@ exports.BattleFormats = { } } - for (let k in set.evs) { - if (typeof set.evs[k] !== 'number' || set.evs[k] < 0) { - set.evs[k] = 0; + if (set.evs) { + for (let k in set.evs) { + // @ts-ignore + if (typeof set.evs[k] !== 'number' || set.evs[k] < 0) { + // @ts-ignore + set.evs[k] = 0; + } + // @ts-ignore + totalEV += set.evs[k]; } - totalEV += set.evs[k]; } + // In gen 6, it is impossible to battle other players with pokemon that break the EV limit if (totalEV > 510 && this.gen === 6) { problems.push((set.name || set.species) + " has more than 510 total EVs."); @@ -145,6 +197,11 @@ exports.BattleFormats = { if (!this.getRuleTable(format).has('-illegal')) return problems; // everything after this line only happens if we're doing legality enforcement + // Pokestar studios + if (template.num <= -5000 && template.isNonstandard) { + problems.push(`${set.species} cannot be obtained by legal means.`); + } + // only in gen 1 and 2 it was legal to max out all EVs if (this.gen >= 3 && totalEV > 510) { problems.push((set.name || set.species) + " has more than 510 total EVs."); @@ -156,7 +213,7 @@ exports.BattleFormats = { } } else { if (set.gender !== 'M' && set.gender !== 'F') { - set.gender = undefined; + set.gender = ''; } } @@ -167,6 +224,7 @@ exports.BattleFormats = { template.species !== 'Unown' && template.baseSpecies !== 'Pikachu' && (template.baseSpecies !== 'Diancie' || !set.shiny)) { let perfectIVs = 0; for (let i in set.ivs) { + // @ts-ignore if (set.ivs[i] >= 31) perfectIVs++; } let reason = (format.requirePentagon ? " and this format requires gen " + this.gen + " Pokémon" : " in gen 6"); @@ -176,13 +234,14 @@ exports.BattleFormats = { // limit one of each move let moves = []; if (set.moves) { + /**@type {{[k: string]: true}} */ let hasMove = {}; - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const moveId of set.moves) { + let move = this.getMove(moveId); let moveid = move.id; if (hasMove[moveid]) continue; hasMove[moveid] = true; - moves.push(set.moves[i]); + moves.push(moveId); } } set.moves = moves; @@ -192,22 +251,26 @@ exports.BattleFormats = { if (template.requiredAbility && set.ability !== template.requiredAbility) { problems.push("" + template.species + " transforms in-battle with " + template.requiredAbility + "."); // Darmanitan-Zen, Zygarde-Complete } - if (template.requiredItems && !template.requiredItems.includes(item.name)) { - problems.push("" + template.species + " transforms in-battle with " + Chat.plural(template.requiredItems.length, "either ") + template.requiredItems.join(" or ") + '.'); // Mega or Primal + if (template.requiredItems) { + if (template.species === 'Necrozma-Ultra') { + problems.push(`Necrozma-Ultra must start the battle as Necrozma-Dawn-Wings or Necrozma-Dusk-Mane holding Ultranecrozium Z.`); // Necrozma-Ultra transforms from one of two formes, and neither one is the base forme + } else if (!template.requiredItems.includes(item.name)) { + problems.push(`${template.species} transforms in-battle with ${Chat.plural(template.requiredItems.length, "either ") + template.requiredItems.join(" or ")}.`); // Mega or Primal + } } if (template.requiredMove && set.moves.indexOf(toId(template.requiredMove)) < 0) { - problems.push("" + template.species + " transforms in-battle with " + template.requiredMove + "."); // Meloetta-Pirouette, Rayquaza-Mega + problems.push(`${template.species} transforms in-battle with ${template.requiredMove}.`); // Meloetta-Pirouette, Rayquaza-Mega } - if (!format.noChangeForme) set.species = template.baseSpecies; // Fix forme for Aegislash, Castform, etc. + if (!format.noChangeForme) set.species = template.baseSpecies; // Fix battle-only forme } else { if (template.requiredAbility && set.ability !== template.requiredAbility) { - problems.push("" + (set.name || set.species) + " needs the ability " + template.requiredAbility + "."); // No cases currently. + problems.push(`${(set.name || set.species)} needs the ability ${template.requiredAbility}.`); // No cases currently. } if (template.requiredItems && !template.requiredItems.includes(item.name)) { - problems.push("" + (set.name || set.species) + " needs to hold " + Chat.plural(template.requiredItems.length, "either ") + template.requiredItems.join(" or ") + '.'); // Memory/Drive/Griseous Orb/Plate/Z-Crystal - Forme mismatch + problems.push(`${(set.name || set.species)} needs to hold ${Chat.plural(template.requiredItems.length, "either ") + template.requiredItems.join(" or ")}.`); // Memory/Drive/Griseous Orb/Plate/Z-Crystal - Forme mismatch } if (template.requiredMove && set.moves.indexOf(toId(template.requiredMove)) < 0) { - problems.push("" + (set.name || set.species) + " needs to have the move " + template.requiredMove + "."); // Keldeo-Resolute + problems.push(`${(set.name || set.species)} needs to have the move ${template.requiredMove}.`); // Keldeo-Resolute } // Mismatches between the set forme (if not base) and the item signature forme will have been rejected already. @@ -218,10 +281,11 @@ exports.BattleFormats = { } if (template.species === 'Pikachu-Cosplay') { - let cosplay = {meteormash:'Pikachu-Rock-Star', iciclecrash:'Pikachu-Belle', drainingkiss:'Pikachu-Pop-Star', electricterrain:'Pikachu-PhD', flyingpress:'Pikachu-Libre'}; - for (let i = 0; i < set.moves.length; i++) { - if (set.moves[i] in cosplay) { - set.species = cosplay[set.moves[i]]; + /**@type {{[k: string]: string}} */ + let cosplay = {meteormash: 'Pikachu-Rock-Star', iciclecrash: 'Pikachu-Belle', drainingkiss: 'Pikachu-Pop-Star', electricterrain: 'Pikachu-PhD', flyingpress: 'Pikachu-Libre'}; + for (const moveid of set.moves) { + if (moveid in cosplay) { + set.species = cosplay[moveid]; break; } } @@ -235,6 +299,7 @@ exports.BattleFormats = { // Ensure that the ability is (still) legal. let legalAbility = false; for (let i in template.abilities) { + // @ts-ignore if (template.abilities[i] !== set.ability) continue; legalAbility = true; break; @@ -247,38 +312,75 @@ exports.BattleFormats = { return problems; }, + banlist: [ + 'Chansey + Charm + Seismic Toss', 'Chansey + Charm + Psywave', + 'Blissey + Charm + Seismic Toss', 'Blissey + Charm + Psywave', + 'Shiftry + Leaf Blade + Sucker Punch', + ], }, hoennpokedex: { effectType: 'ValidatorRule', name: 'Hoenn Pokedex', - onValidateSet: function (set, format) { - let hoennDex = { - "Abra":1, "Absol":1, "Aggron":1, "Alakazam":1, "Altaria":1, "Anorith":1, "Armaldo":1, "Aron":1, "Azumarill":1, "Azurill":1, "Bagon":1, "Baltoy":1, "Banette":1, "Barboach":1, "Beautifly":1, "Beldum":1, "Bellossom":1, "Blaziken":1, "Breloom":1, "Budew":1, "Cacnea":1, "Cacturne":1, "Camerupt":1, "Carvanha":1, "Cascoon":1, "Castform":1, "Chimecho":1, "Chinchou":1, "Chingling":1, "Clamperl":1, "Claydol":1, "Combusken":1, "Corphish":1, "Corsola":1, "Cradily":1, "Crawdaunt":1, "Crobat":1, "Delcatty":1, "Dodrio":1, "Doduo":1, "Donphan":1, "Dusclops":1, "Dusknoir":1, "Duskull":1, "Dustox":1, "Electrike":1, "Electrode":1, "Exploud":1, "Feebas":1, "Flygon":1, "Froslass":1, "Gallade":1, "Gardevoir":1, "Geodude":1, "Girafarig":1, "Glalie":1, "Gloom":1, "Golbat":1, "Goldeen":1, "Golduck":1, "Golem":1, "Gorebyss":1, "Graveler":1, "Grimer":1, "Grovyle":1, "Grumpig":1, "Gulpin":1, "Gyarados":1, "Hariyama":1, "Heracross":1, "Horsea":1, "Huntail":1, "Igglybuff":1, "Illumise":1, "Jigglypuff":1, "Kadabra":1, "Kecleon":1, "Kingdra":1, "Kirlia":1, "Koffing":1, "Lairon":1, "Lanturn":1, "Latias":1, "Latios":1, "Lileep":1, "Linoone":1, "Lombre":1, "Lotad":1, "Loudred":1, "Ludicolo":1, "Lunatone":1, "Luvdisc":1, "Machamp":1, "Machoke":1, "Machop":1, "Magcargo":1, "Magikarp":1, "Magnemite":1, "Magneton":1, "Magnezone":1, "Makuhita":1, "Manectric":1, "Marill":1, "Marshtomp":1, "Masquerain":1, "Mawile":1, "Medicham":1, "Meditite":1, "Metagross":1, "Metang":1, "Mightyena":1, "Milotic":1, "Minun":1, "Mudkip":1, "Muk":1, "Natu":1, "Nincada":1, "Ninetales":1, "Ninjask":1, "Nosepass":1, "Numel":1, "Nuzleaf":1, "Oddish":1, "Pelipper":1, "Phanpy":1, "Pichu":1, "Pikachu":1, "Pinsir":1, "Plusle":1, "Poochyena":1, "Probopass":1, "Psyduck":1, "Raichu":1, "Ralts":1, "Regice":1, "Regirock":1, "Registeel":1, "Relicanth":1, "Rhydon":1, "Rhyhorn":1, "Rhyperior":1, "Roselia":1, "Roserade":1, "Sableye":1, "Salamence":1, "Sandshrew":1, "Sandslash":1, "Sceptile":1, "Seadra":1, "Seaking":1, "Sealeo":1, "Seedot":1, "Seviper":1, "Sharpedo":1, "Shedinja":1, "Shelgon":1, "Shiftry":1, "Shroomish":1, "Shuppet":1, "Silcoon":1, "Skarmory":1, "Skitty":1, "Slaking":1, "Slakoth":1, "Slugma":1, "Snorunt":1, "Solrock":1, "Spheal":1, "Spinda":1, "Spoink":1, "Starmie":1, "Staryu":1, "Surskit":1, "Swablu":1, "Swalot":1, "Swampert":1, "Swellow":1, "Taillow":1, "Tentacool":1, "Tentacruel":1, "Torchic":1, "Torkoal":1, "Trapinch":1, "Treecko":1, "Tropius":1, "Vibrava":1, "Vigoroth":1, "Vileplume":1, "Volbeat":1, "Voltorb":1, "Vulpix":1, "Wailmer":1, "Wailord":1, "Walrein":1, "Weezing":1, "Whiscash":1, "Whismur":1, "Wigglytuff":1, "Wingull":1, "Wobbuffet":1, "Wurmple":1, "Wynaut":1, "Xatu":1, "Zangoose":1, "Zigzagoon":1, "Zubat":1, - }; + desc: "Only allows Pokémon native to the Hoenn region (OR/AS)", + onValidateSet(set, format) { + let hoennDex = [ + "Abra", "Absol", "Aggron", "Alakazam", "Altaria", "Anorith", "Armaldo", "Aron", "Azumarill", "Azurill", "Bagon", "Baltoy", "Banette", "Barboach", "Beautifly", "Beldum", "Bellossom", "Blaziken", "Breloom", "Budew", "Cacnea", "Cacturne", "Camerupt", "Carvanha", "Cascoon", "Castform", "Chimecho", "Chinchou", "Chingling", "Clamperl", "Claydol", "Combusken", "Corphish", "Corsola", "Cradily", "Crawdaunt", "Crobat", "Delcatty", "Dodrio", "Doduo", "Donphan", "Dusclops", "Dusknoir", "Duskull", "Dustox", "Electrike", "Electrode", "Exploud", "Feebas", "Flygon", "Froslass", "Gallade", "Gardevoir", "Geodude", "Girafarig", "Glalie", "Gloom", "Golbat", "Goldeen", "Golduck", "Golem", "Gorebyss", "Graveler", "Grimer", "Grovyle", "Grumpig", "Gulpin", "Gyarados", "Hariyama", "Heracross", "Horsea", "Huntail", "Igglybuff", "Illumise", "Jigglypuff", "Kadabra", "Kecleon", "Kingdra", "Kirlia", "Koffing", "Lairon", "Lanturn", "Latias", "Latios", "Lileep", "Linoone", "Lombre", "Lotad", "Loudred", "Ludicolo", "Lunatone", "Luvdisc", "Machamp", "Machoke", "Machop", "Magcargo", "Magikarp", "Magnemite", "Magneton", "Magnezone", "Makuhita", "Manectric", "Marill", "Marshtomp", "Masquerain", "Mawile", "Medicham", "Meditite", "Metagross", "Metang", "Mightyena", "Milotic", "Minun", "Mudkip", "Muk", "Natu", "Nincada", "Ninetales", "Ninjask", "Nosepass", "Numel", "Nuzleaf", "Oddish", "Pelipper", "Phanpy", "Pichu", "Pikachu", "Pinsir", "Plusle", "Poochyena", "Probopass", "Psyduck", "Raichu", "Ralts", "Regice", "Regirock", "Registeel", "Relicanth", "Rhydon", "Rhyhorn", "Rhyperior", "Roselia", "Roserade", "Sableye", "Salamence", "Sandshrew", "Sandslash", "Sceptile", "Seadra", "Seaking", "Sealeo", "Seedot", "Seviper", "Sharpedo", "Shedinja", "Shelgon", "Shiftry", "Shroomish", "Shuppet", "Silcoon", "Skarmory", "Skitty", "Slaking", "Slakoth", "Slugma", "Snorunt", "Solrock", "Spheal", "Spinda", "Spoink", "Starmie", "Staryu", "Surskit", "Swablu", "Swalot", "Swampert", "Swellow", "Taillow", "Tentacool", "Tentacruel", "Torchic", "Torkoal", "Trapinch", "Treecko", "Tropius", "Vibrava", "Vigoroth", "Vileplume", "Volbeat", "Voltorb", "Vulpix", "Wailmer", "Wailord", "Walrein", "Weezing", "Whiscash", "Whismur", "Wigglytuff", "Wingull", "Wobbuffet", "Wurmple", "Wynaut", "Xatu", "Zangoose", "Zigzagoon", "Zubat", + ]; let template = this.getTemplate(set.species || set.name); - if (!(template.baseSpecies in hoennDex) && !this.getRuleTable(format).has('+' + template.speciesid)) { + if (!hoennDex.includes(template.baseSpecies) && !this.getRuleTable(format).has('+' + template.speciesid)) { return [template.baseSpecies + " is not in the Hoenn Pokédex."]; } }, }, + sinnohpokedex: { + effectType: 'ValidatorRule', + name: 'Sinnoh Pokedex', + desc: "Only allows Pokémon native to the Sinnoh region (Platinum)", + onValidateSet(set, format) { + let sinnohDex = [ + "Turtwig", "Grotle", "Torterra", "Chimchar", "Monferno", "Infernape", "Piplup", "Prinplup", "Empoleon", "Starly", "Staravia", "Staraptor", "Bidoof", "Bibarel", "Kricketot", "Kricketune", "Shinx", "Luxio", "Luxray", "Abra", "Kadabra", "Alakazam", "Magikarp", "Gyarados", "Budew", "Roselia", "Roserade", "Zubat", "Golbat", "Crobat", "Geodude", "Graveler", "Golem", "Onix", "Steelix", "Cranidos", "Rampardos", "Shieldon", "Bastiodon", "Machop", "Machoke", "Machamp", "Psyduck", "Golduck", "Burmy", "Wormadam", "Mothim", "Wurmple", "Silcoon", "Beautifly", "Cascoon", "Dustox", "Combee", "Vespiquen", "Pachirisu", "Buizel", "Floatzel", "Cherubi", "Cherrim", "Shellos", "Gastrodon", "Heracross", "Aipom", "Ambipom", "Drifloon", "Drifblim", "Buneary", "Lopunny", "Gastly", "Haunter", "Gengar", "Misdreavus", "Mismagius", "Murkrow", "Honchkrow", "Glameow", "Purugly", "Goldeen", "Seaking", "Barboach", "Whiscash", "Chingling", "Chimecho", "Stunky", "Skuntank", "Meditite", "Medicham", "Bronzor", "Bronzong", "Ponyta", "Rapidash", "Bonsly", "Sudowoodo", "Mime Jr.", "Mr. Mime", "Happiny", "Chansey", "Blissey", "Cleffa", "Clefairy", "Clefable", "Chatot", "Pichu", "Pikachu", "Raichu", "Hoothoot", "Noctowl", "Spiritomb", "Gible", "Gabite", "Garchomp", "Munchlax", "Snorlax", "Unown", "Riolu", "Lucario", "Wooper", "Quagsire", "Wingull", "Pelipper", "Girafarig", "Hippopotas", "Hippowdon", "Azurill", "Marill", "Azumarill", "Skorupi", "Drapion", "Croagunk", "Toxicroak", "Carnivine", "Remoraid", "Octillery", "Finneon", "Lumineon", "Tentacool", "Tentacruel", "Feebas", "Milotic", "Mantyke", "Mantine", "Snover", "Abomasnow", "Sneasel", "Weavile", "Uxie", "Mesprit", "Azelf", "Dialga", "Palkia", "Manaphy", "Rotom", "Gligar", "Gliscor", "Nosepass", "Probopass", "Ralts", "Kirlia", "Gardevoir", "Gallade", "Lickitung", "Lickilicky", "Eevee", "Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Swablu", "Altaria", "Togepi", "Togetic", "Togekiss", "Houndour", "Houndoom", "Magnemite", "Magneton", "Magnezone", "Tangela", "Tangrowth", "Yanma", "Yanmega", "Tropius", "Rhyhorn", "Rhydon", "Rhyperior", "Duskull", "Dusclops", "Dusknoir", "Porygon", "Porygon2", "Porygon-Z", "Scyther", "Scizor", "Elekid", "Electabuzz", "Electivire", "Magby", "Magmar", "Magmortar", "Swinub", "Piloswine", "Mamoswine", "Snorunt", "Glalie", "Froslass", "Absol", "Giratina", + ]; + let template = this.getTemplate(set.species || set.name); + if ((!sinnohDex.includes(template.baseSpecies) || template.gen > 4) && !this.getRuleTable(format).has('+' + template.speciesid)) { + return [`${template.species} is not in the Sinnoh Pokédex.`]; + } + }, + }, + kalospokedex: { + effectType: 'ValidatorRule', + name: 'Kalos Pokedex', + desc: "Only allows Pokémon native to the Kalos region (XY)", + onValidateSet(set, format) { + let kalosDex = [ + "Chespin", "Quilladin", "Chesnaught", "Fennekin", "Braixen", "Delphox", "Froakie", "Frogadier", "Greninja", "Bunnelby", "Diggersby", "Zigzagoon", "Linoone", "Fletchling", "Fletchinder", "Talonflame", "Pidgey", "Pidgeotto", "Pidgeot", "Scatterbug", "Spewpa", "Vivillon", "Caterpie", "Metapod", "Butterfree", "Weedle", "Kakuna", "Beedrill", "Pansage", "Simisage", "Pansear", "Simisear", "Panpour", "Simipour", "Pichu", "Pikachu", "Raichu", "Bidoof", "Bibarel", "Dunsparce", "Azurill", "Marill", "Azumarill", "Burmy", "Wormadam", "Mothim", "Surskit", "Masquerain", "Magikarp", "Gyarados", "Corphish", "Crawdaunt", "Goldeen", "Seaking", "Carvanha", "Sharpedo", "Litleo", "Pyroar", "Psyduck", "Golduck", "Farfetch'd", "Riolu", "Lucario", "Ralts", "Kirlia", "Gardevoir", "Gallade", "Flabe\u0301be\u0301", "Floette", "Florges", "Budew", "Roselia", "Roserade", "Ledyba", "Ledian", "Combee", "Vespiquen", "Skitty", "Delcatty", "Bulbasaur", "Ivysaur", "Venusaur", "Charmander", "Charmeleon", "Charizard", "Squirtle", "Wartortle", "Blastoise", "Skiddo", "Gogoat", "Pancham", "Pangoro", "Furfrou", "Doduo", "Dodrio", "Plusle", "Minun", "Gulpin", "Swalot", "Scraggy", "Scrafty", "Abra", "Kadabra", "Alakazam", "Oddish", "Gloom", "Vileplume", "Bellossom", "Sentret", "Furret", "Nincada", "Ninjask", "Shedinja", "Espurr", "Meowstic", "Kecleon", "Honedge", "Doublade", "Aegislash", "Venipede", "Whirlipede", "Scolipede", "Audino", "Smeargle", "Croagunk", "Toxicroak", "Ducklett", "Swanna", "Spritzee", "Aromatisse", "Swirlix", "Slurpuff", "Volbeat", "Illumise", "Hoppip", "Skiploom", "Jumpluff", "Munchlax", "Snorlax", "Whismur", "Loudred", "Exploud", "Meditite", "Medicham", "Zubat", "Golbat", "Crobat", "Axew", "Fraxure", "Haxorus", "Diancie", "Hoopa", "Volcanion", + "Drifloon", "Drifblim", "Mienfoo", "Mienshao", "Zangoose", "Seviper", "Spoink", "Grumpig", "Absol", "Inkay", "Malamar", "Lunatone", "Solrock", "Bagon", "Shelgon", "Salamence", "Wingull", "Pelipper", "Taillow", "Swellow", "Binacle", "Barbaracle", "Dwebble", "Crustle", "Tentacool", "Tentacruel", "Wailmer", "Wailord", "Luvdisc", "Skrelp", "Dragalge", "Clauncher", "Clawitzer", "Staryu", "Starmie", "Shellder", "Cloyster", "Qwilfish", "Horsea", "Seadra", "Kingdra", "Relicanth", "Sandile", "Krokorok", "Krookodile", "Helioptile", "Heliolisk", "Hippopotas", "Hippowdon", "Rhyhorn", "Rhydon", "Rhyperior", "Onix", "Steelix", "Woobat", "Swoobat", "Machop", "Machoke", "Machamp", "Cubone", "Marowak", "Kangaskhan", "Mawile", "Tyrunt", "Tyrantrum", "Amaura", "Aurorus", "Aerodactyl", "Ferroseed", "Ferrothorn", "Snubbull", "Granbull", "Electrike", "Manectric", "Houndour", "Houndoom", "Eevee", "Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Sylveon", "Emolga", "Yanma", "Yanmega", "Hawlucha", "Sigilyph", "Golett", "Golurk", "Nosepass", "Probopass", "Makuhita", "Hariyama", "Throh", "Sawk", "Starly", "Staravia", "Staraptor", "Stunky", "Skuntank", "Nidoran-F", "Nidorina", "Nidoqueen", "Nidoran-M", "Nidorino", "Nidoking", "Dedenne", "Chingling", "Chimecho", "Mime Jr.", "Mr. Mime", "Solosis", "Duosion", "Reuniclus", "Wynaut", "Wobbuffet", "Roggenrola", "Boldore", "Gigalith", "Sableye", "Carbink", "Tauros", "Miltank", "Mareep", "Flaaffy", "Ampharos", "Pinsir", "Heracross", "Pachirisu", "Slowpoke", "Slowbro", "Slowking", "Exeggcute", "Exeggutor", "Chatot", "Mantyke", "Mantine", "Clamperl", "Huntail", "Gorebyss", "Remoraid", "Octillery", "Corsola", "Chinchou", "Lanturn", "Alomomola", "Lapras", "Articuno", "Zapdos", "Moltres", + "Diglett", "Dugtrio", "Trapinch", "Vibrava", "Flygon", "Gible", "Gabite", "Garchomp", "Geodude", "Graveler", "Golem", "Slugma", "Magcargo", "Shuckle", "Skorupi", "Drapion", "Wooper", "Quagsire", "Goomy", "Sliggoo", "Goodra", "Karrablast", "Escavalier", "Shelmet", "Accelgor", "Bellsprout", "Weepinbell", "Victreebel", "Carnivine", "Gastly", "Haunter", "Gengar", "Poliwag", "Poliwhirl", "Poliwrath", "Politoed", "Ekans", "Arbok", "Stunfisk", "Barboach", "Whiscash", "Purrloin", "Liepard", "Poochyena", "Mightyena", "Patrat", "Watchog", "Pawniard", "Bisharp", "Klefki", "Murkrow", "Honchkrow", "Foongus", "Amoonguss", "Lotad", "Lombre", "Ludicolo", "Buizel", "Floatzel", "Basculin", "Phantump", "Trevenant", "Pumpkaboo", "Gourgeist", "Litwick", "Lampent", "Chandelure", "Rotom", "Magnemite", "Magneton", "Magnezone", "Voltorb", "Electrode", "Trubbish", "Garbodor", "Swinub", "Piloswine", "Mamoswine", "Bergmite", "Avalugg", "Cubchoo", "Beartic", "Smoochum", "Jynx", "Vanillite", "Vanillish", "Vanilluxe", "Snover", "Abomasnow", "Delibird", "Sneasel", "Weavile", "Timburr", "Gurdurr", "Conkeldurr", "Torkoal", "Sandshrew", "Sandslash", "Aron", "Lairon", "Aggron", "Larvitar", "Pupitar", "Tyranitar", "Heatmor", "Durant", "Spinarak", "Ariados", "Spearow", "Fearow", "Cryogonal", "Skarmory", "Noibat", "Noivern", "Gligar", "Gliscor", "Hoothoot", "Noctowl", "Igglybuff", "Jigglypuff", "Wigglytuff", "Shuppet", "Banette", "Zorua", "Zoroark", "Gothita", "Gothorita", "Gothitelle", "Bonsly", "Sudowoodo", "Spinda", "Teddiursa", "Ursaring", "Lickitung", "Lickilicky", "Scyther", "Scizor", "Ditto", "Swablu", "Altaria", "Druddigon", "Deino", "Zweilous", "Hydreigon", "Dratini", "Dragonair", "Dragonite", "Xerneas", "Yveltal", "Zygarde", "Mewtwo", + ]; + let template = this.getTemplate(set.species || set.name); + if ((!kalosDex.includes(template.baseSpecies) || template.gen > 6) && !this.getRuleTable(format).has('+' + template.speciesid)) { + return [`${template.species} is not in the Kalos Pokédex.`]; + } + }, + }, alolapokedex: { effectType: 'ValidatorRule', name: 'Alola Pokedex', - onValidateSet: function (set, format) { - let alolaDex = { - "Rowlet":1, "Dartrix":1, "Decidueye":1, "Litten":1, "Torracat":1, "Incineroar":1, "Popplio":1, "Brionne":1, "Primarina":1, "Pikipek":1, "Trumbeak":1, "Toucannon":1, "Yungoos":1, "Gumshoos":1, "Rattata-Alola":1, "Raticate-Alola":1, "Caterpie":1, "Metapod":1, "Butterfree":1, "Ledyba":1, "Ledian":1, "Spinarak":1, "Ariados":1, "Pichu":1, "Pikachu":1, "Raichu-Alola":1, "Grubbin":1, "Charjabug":1, "Vikavolt":1, "Bonsly":1, "Sudowoodo":1, "Happiny":1, "Chansey":1, "Blissey":1, "Munchlax":1, "Snorlax":1, "Slowpoke":1, "Slowbro":1, "Slowking":1, "Wingull":1, "Pelipper":1, "Abra":1, "Kadabra":1, "Alakazam":1, "Meowth-Alola":1, "Persian-Alola":1, "Magnemite":1, "Magneton":1, "Magnezone":1, "Grimer-Alola":1, "Muk-Alola":1, "Growlithe":1, "Arcanine":1, "Drowzee":1, "Hypno":1, "Makuhita":1, "Hariyama":1, "Smeargle":1, "Crabrawler":1, "Crabominable":1, "Gastly":1, "Haunter":1, "Gengar":1, "Drifloon":1, "Drifblim":1, "Misdreavus":1, "Mismagius":1, "Zubat":1, "Golbat":1, "Crobat":1, "Diglett-Alola":1, "Dugtrio-Alola":1, "Spearow":1, "Fearow":1, "Rufflet":1, "Braviary":1, "Vullaby":1, "Mandibuzz":1, "Mankey":1, "Primeape":1, "Delibird":1, "Oricorio":1, "Cutiefly":1, "Ribombee":1, "Petilil":1, "Lilligant":1, "Cottonee":1, "Whimsicott":1, "Psyduck":1, "Golduck":1, "Magikarp":1, "Gyarados":1, "Barboach":1, "Whiscash":1, "Machop":1, "Machoke":1, "Machamp":1, "Roggenrola":1, "Boldore":1, "Gigalith":1, "Carbink":1, "Sableye":1, "Rockruff":1, "Lycanroc":1, "Spinda":1, "Tentacool":1, "Tentacruel":1, "Finneon":1, "Lumineon":1, "Wishiwashi":1, "Luvdisc":1, "Corsola":1, "Mareanie":1, "Toxapex":1, "Shellder":1, "Cloyster":1, "Bagon":1, "Shelgon":1, "Salamence":1, "Lillipup":1, "Herdier":1, "Stoutland":1, "Eevee":1, "Vaporeon":1, "Jolteon":1, "Flareon":1, "Espeon":1, "Umbreon":1, "Leafeon":1, "Glaceon":1, "Sylveon":1, "Mudbray":1, "Mudsdale":1, "Igglybuff":1, "Jigglypuff":1, "Wigglytuff":1, "Tauros":1, "Miltank":1, "Surskit":1, "Masquerain":1, "Dewpider":1, "Araquanid":1, "Fomantis":1, "Lurantis":1, "Morelull":1, "Shiinotic":1, "Paras":1, "Parasect":1, "Poliwag":1, "Poliwhirl":1, "Poliwrath":1, "Politoed":1, "Goldeen":1, "Seaking":1, "Feebas":1, "Milotic":1, "Alomomola":1, "Fletchling":1, "Fletchinder":1, "Talonflame":1, "Salandit":1, "Salazzle":1, "Cubone":1, "Marowak-Alola":1, "Kangaskhan":1, "Magby":1, "Magmar":1, "Magmortar":1, "Stufful":1, "Bewear":1, "Bounsweet":1, "Steenee":1, "Tsareena":1, "Comfey":1, "Pinsir":1, "Oranguru":1, "Passimian":1, "Goomy":1, "Sliggoo":1, "Goodra":1, "Castform":1, "Wimpod":1, "Golisopod":1, "Staryu":1, "Starmie":1, "Sandygast":1, "Palossand":1, "Cranidos":1, "Rampardos":1, "Shieldon":1, "Bastiodon":1, "Archen":1, "Archeops":1, "Tirtouga":1, "Carracosta":1, "Phantump":1, "Trevenant":1, "Nosepass":1, "Probopass":1, "Pyukumuku":1, "Chinchou":1, "Lanturn":1, "Type: Null":1, "Silvally":1, "Zygarde":1, "Trubbish":1, "Garbodor":1, "Skarmory":1, "Ditto":1, "Cleffa":1, "Clefairy":1, "Clefable":1, "Minior":1, "Beldum":1, "Metang":1, "Metagross":1, "Porygon":1, "Porygon2":1, "Porygon-Z":1, "Pancham":1, "Pangoro":1, "Komala":1, "Torkoal":1, "Turtonator":1, "Togedemaru":1, "Elekid":1, "Electabuzz":1, "Electivire":1, "Geodude-Alola":1, "Graveler-Alola":1, "Golem-Alola":1, "Sandile":1, "Krokorok":1, "Krookodile":1, "Trapinch":1, "Vibrava":1, "Flygon":1, "Gible":1, "Gabite":1, "Garchomp":1, "Klefki":1, "Mimikyu":1, "Bruxish":1, "Drampa":1, "Absol":1, "Snorunt":1, "Glalie":1, "Froslass":1, "Sneasel":1, "Weavile":1, "Sandshrew-Alola":1, "Sandslash-Alola":1, "Vulpix-Alola":1, "Ninetales-Alola":1, "Vanillite":1, "Vanillish":1, "Vanilluxe":1, "Snubbull":1, "Granbull":1, "Shellos":1, "Gastrodon":1, "Relicanth":1, "Dhelmise":1, "Carvanha":1, "Sharpedo":1, "Wailmer":1, "Wailord":1, "Lapras":1, "Exeggcute":1, "Exeggutor-Alola":1, "Jangmo-o":1, "Hakamo-o":1, "Kommo-o":1, "Emolga":1, "Scyther":1, "Scizor":1, "Murkrow":1, "Honchkrow":1, "Riolu":1, "Lucario":1, "Dratini":1, "Dragonair":1, "Dragonite":1, "Aerodactyl":1, "Tapu Koko":1, "Tapu Lele":1, "Tapu Bulu":1, "Tapu Fini":1, "Cosmog":1, "Cosmoem":1, "Solgaleo":1, "Lunala":1, "Nihilego":1, "Buzzwole":1, "Pheromosa":1, "Xurkitree":1, "Celesteela":1, "Kartana":1, "Guzzlord":1, "Necrozma":1, "Magearna":1, "Marshadow":1, - }; + desc: "Only allows Pokémon native to the Alola region (US/UM)", + onValidateSet(set, format) { + let alolaDex = [ + "Rowlet", "Dartrix", "Decidueye", "Litten", "Torracat", "Incineroar", "Popplio", "Brionne", "Primarina", "Pikipek", "Trumbeak", "Toucannon", "Yungoos", "Gumshoos", "Rattata-Alola", "Raticate-Alola", "Caterpie", "Metapod", "Butterfree", "Ledyba", "Ledian", "Spinarak", "Ariados", "Buneary", "Lopunny", "Inkay", "Malamar", "Zorua", "Zoroark", "Furfrou", "Pichu", "Pikachu", "Raichu-Alola", "Grubbin", "Charjabug", "Vikavolt", "Bonsly", "Sudowoodo", "Happiny", "Chansey", "Blissey", "Munchlax", "Snorlax", "Slowpoke", "Slowbro", "Slowking", "Wingull", "Pelipper", "Abra", "Kadabra", "Alakazam", "Meowth-Alola", "Persian-Alola", "Magnemite", "Magneton", "Magnezone", "Grimer-Alola", "Muk-Alola", "Mime Jr.", "Mr. Mime", "Ekans", "Arbok", "Dunsparce", "Growlithe", "Arcanine", "Drowzee", "Hypno", "Makuhita", "Hariyama", "Smeargle", "Crabrawler", "Crabominable", "Gastly", "Haunter", "Gengar", "Drifloon", "Drifblim", "Murkrow", "Honchkrow", "Zubat", "Golbat", "Crobat", "Noibat", "Noivern", "Diglett-Alola", "Dugtrio-Alola", "Spearow", "Fearow", "Rufflet", "Braviary", "Vullaby", "Mandibuzz", "Mankey", "Primeape", "Delibird", "Hawlucha", "Oricorio", "Cutiefly", "Ribombee", "Flabe\u0301be\u0301", "Floette", "Florges", "Petilil", "Lilligant", "Cottonee", "Whimsicott", "Psyduck", "Golduck", "Smoochum", "Jynx", "Magikarp", "Gyarados", "Barboach", "Whiscash", "Seal", "Dewgong", "Machop", "Machoke", "Machamp", "Roggenrola", "Boldore", "Gigalith", "Carbink", "Sableye", "Mawile", "Rockruff", "Lycanroc", "Spinda", "Tentacool", "Tentacruel", "Finneon", "Lumineon", "Wishiwashi", "Luvdisc", "Corsola", "Mareanie", "Toxapex", "Shellder", "Cloyster", "Clamperl", "Huntail", "Gorebyss", "Remoraid", "Octillery", "Mantyke", "Mantine", "Bagon", "Shelgon", "Salamence", "Lillipup", "Herdier", "Stoutland", "Eevee", "Vaporeon", "Jolteon", "Flareon", "Espeon", "Umbreon", "Leafeon", "Glaceon", "Sylveon", "Mareep", "Flaaffy", "Ampharos", "Mudbray", "Mudsdale", "Igglybuff", "Jigglypuff", "Wigglytuff", "Tauros", "Miltank", "Surskit", "Masquerain", "Dewpider", "Araquanid", "Fomantis", "Lurantis", "Morelull", "Shiinotic", "Paras", "Parasect", "Poliwag", "Poliwhirl", "Poliwrath", "Politoed", "Goldeen", "Seaking", "Basculin", "Feebas", "Milotic", "Alomomola", "Fletchling", "Fletchinder", "Talonflame", "Salandit", "Salazzle", "Cubone", "Marowak-Alola", "Kangaskhan", "Magby", "Magmar", "Magmortar", "Larvesta", "Volcarona", "Stufful", "Bewear", "Bounsweet", "Steenee", "Tsareena", "Comfey", "Pinsir", "Hoothoot", "Noctowl", "Kecleon", "Oranguru", "Passimian", "Goomy", "Sliggoo", "Goodra", "Castform", "Wimpod", "Golisopod", "Staryu", "Starmie", "Sandygast", "Palossand", "Omanyte", "Omastar", "Kabuto", "Kabutops", "Lileep", "Cradily", "Anorith", "Armaldo", "Cranidos", "Rampardos", "Shieldon", "Bastiodon", "Tirtouga", "Carracosta", "Archen", "Archeops", "Tyrunt", "Tyrantrum", "Amaura", "Aurorus", "Pupitar", "Larvitar", "Tyranitar", "Phantump", "Trevenant", "Natu", "Xatu", "Nosepass", "Probopass", "Pyukumuku", "Chinchou", "Lanturn", "Type: Null", "Silvally", "Poipole", "Naganadel", "Zygarde", "Trubbish", "Garbodor", "Minccino", "Cinccino", "Pineco", "Forretress", "Skarmory", "Ditto", "Cleffa", "Clefairy", "Clefable", "Elgyem", "Beheeyem", "Minior", "Beldum", "Metang", "Metagross", "Porygon", "Porygon2", "Porygon-Z", "Pancham", "Pangoro", "Komala", "Torkoal", "Turtonator", "Houndour", "Houndoom", "Dedenne", "Togedemaru", "Electrike", "Manectric", "Elekid", "Electabuzz", "Electivire", "Geodude-Alola", "Graveler-Alola", "Golem-Alola", "Sandile", "Krokorok", "Krookodile", "Trapinch", "Vibrava", "Flygon", "Gible", "Gabite", "Garchomp", "Baltoy", "Claydol", "Golett", "Golurk", "Klefki", "Mimikyu", "Shuppet", "Banette", "Frillish", "Jellicent", "Bruxish", "Drampa", "Absol", "Snorunt", "Glalie", "Froslass", "Sneasel", "Weavile", "Sandshrew-Alola", "Sandslash-Alola", "Vulpix-Alola", "Ninetales-Alola", "Vanillite", "Vanillish", "Vanilluxe", "Scraggy", "Scrafty", "Pawniard", "Bisharp", "Snubbull", "Granbull", "Shellos", "Gastrodon", "Relicanth", "Dhelmise", "Carvanha", "Sharpedo", "Skrelp", "Dragalge", "Clauncher", "Clawitzer", "Wailmer", "Wailord", "Lapras", "Tropius", "Exeggcute", "Exeggutor-Alola", "Corphish", "Crawdaunt", "Mienfoo", "Mienshao", "Jangmo-o", "Hakamo-o", "Kommo-o", "Emolga", "Scyther", "Scizor", "Heracross", "Aipom", "Ampibom", "Litleo", "Pyroar", "Misdreavus", "Mismagius", "Druddigon", "Lickitung", "Lickilicky", "Riolu", "Lucario", "Dratini", "Dragonair", "Dragonite", "Aerodactyl", "Tapu Koko", "Tapu Lele", "Tapu Bulu", "Tapu Fini", "Cosmog", "Cosmoem", "Solgaleo", "Lunala", "Nihilego", "Stakataka", "Blacephalon", "Buzzwole", "Pheromosa", "Xurkitree", "Celesteela", "Kartana", "Guzzlord", "Necrozma", "Magearna", "Marshadow", "Zeraora", + ]; let template = this.getTemplate(set.species || set.name); - if (!(template.baseSpecies in alolaDex) && !(template.species in alolaDex) && !this.getRuleTable(format).has('+' + template.speciesid)) { - return [template.baseSpecies + " is not in the Alola Pokédex."]; + if (!alolaDex.includes(template.baseSpecies) && !alolaDex.includes(template.species) && !this.getRuleTable(format).has('+' + template.speciesid)) { + return [`${template.baseSpecies} is not in the Alola Pokédex.`]; } }, }, potd: { effectType: 'Rule', name: 'PotD', - onStart: function () { - if (Config.potd) { + onBegin() { + if (global.Config && global.Config.potd) { this.add('rule', "Pokemon of the Day: " + this.getTemplate(Config.potd).name); } }, @@ -286,28 +388,25 @@ exports.BattleFormats = { teampreview: { effectType: 'Rule', name: 'Team Preview', - onStartPriority: -10, - onStart: function () { + desc: "Allows each player to see the Pokémon on their opponent's team before they choose their lead Pokémon", + onBegin() { this.add('clearpoke'); - for (let i = 0; i < this.sides[0].pokemon.length; i++) { - let pokemon = this.sides[0].pokemon[i]; - let details = pokemon.details.replace(/(Arceus|Gourgeist|Genesect|Pumpkaboo|Silvally)(-[a-zA-Z?]+)?/g, '$1-*'); - this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : ''); - } - for (let i = 0; i < this.sides[1].pokemon.length; i++) { - let pokemon = this.sides[1].pokemon[i]; - let details = pokemon.details.replace(/(Arceus|Gourgeist|Genesect|Pumpkaboo|Silvally)(-[a-zA-Z?]+)?/g, '$1-*'); - this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : ''); + for (const side of this.sides) { + for (const pokemon of side.pokemon) { + let details = pokemon.details.replace(/(Arceus|Gourgeist|Genesect|Pumpkaboo|Silvally)(-[a-zA-Z?]+)?/g, '$1-*').replace(', shiny', ''); + this.add('poke', pokemon.side.id, details, pokemon.item ? 'item' : ''); + } } }, - onTeamPreview: function () { + onTeamPreview() { this.makeRequest('teampreview'); }, }, littlecup: { effectType: 'ValidatorRule', name: 'Little Cup', - onValidateSet: function (set) { + desc: "Only allows Pokémon that can evolve and don't have any prior evolutions", + onValidateSet(set) { let template = this.getTemplate(set.species || set.name); if (template.prevo) { return [set.species + " isn't the first in its evolution family."]; @@ -320,13 +419,15 @@ exports.BattleFormats = { speciesclause: { effectType: 'ValidatorRule', name: 'Species Clause', - onStart: function () { + desc: "Prevents teams from having more than one Pokémon from the same species", + onBegin() { this.add('rule', 'Species Clause: Limit one of each Pokémon'); }, - onValidateTeam: function (team, format) { + onValidateTeam(team, format) { + /**@type {{[k: string]: true}} */ let speciesTable = {}; - for (let i = 0; i < team.length; i++) { - let template = this.getTemplate(team[i].species); + for (const set of team) { + let template = this.getTemplate(set.species); if (speciesTable[template.num]) { return ["You are limited to one of each Pokémon by Species Clause.", "(You have more than one " + template.baseSpecies + ")"]; } @@ -337,12 +438,14 @@ exports.BattleFormats = { nicknameclause: { effectType: 'ValidatorRule', name: 'Nickname Clause', - onValidateTeam: function (team, format) { + desc: "Prevents teams from having more than one Pokémon with the same nickname", + onValidateTeam(team, format) { + /**@type {{[k: string]: true}} */ let nameTable = {}; - for (let i = 0; i < team.length; i++) { - let name = team[i].name; + for (const set of team) { + let name = set.name; if (name) { - if (name === team[i].species) continue; + if (name === this.getTemplate(set.species).baseSpecies) continue; if (nameTable[name]) { return ["Your Pokémon must have different nicknames.", "(You have more than one " + name + ")"]; } @@ -356,13 +459,15 @@ exports.BattleFormats = { itemclause: { effectType: 'ValidatorRule', name: 'Item Clause', - onStart: function () { + desc: "Prevents teams from having more than one Pokémon with the same item", + onBegin() { this.add('rule', 'Item Clause: Limit one of each item'); }, - onValidateTeam: function (team, format) { + onValidateTeam(team, format) { + /**@type {{[k: string]: true}} */ let itemTable = {}; - for (let i = 0; i < team.length; i++) { - let item = toId(team[i].item); + for (const set of team) { + let item = toId(set.item); if (!item) continue; if (itemTable[item]) { return ["You are limited to one of each item by Item Clause.", "(You have more than one " + this.getItem(item).name + ")"]; @@ -374,11 +479,14 @@ exports.BattleFormats = { abilityclause: { effectType: 'ValidatorRule', name: 'Ability Clause', - onStart: function () { + desc: "Prevents teams from having more than two Pokémon with the same ability", + onBegin() { this.add('rule', 'Ability Clause: Limit two of each ability'); }, - onValidateTeam: function (team, format) { + onValidateTeam(team, format) { + /**@type {{[k: string]: number}} */ let abilityTable = {}; + /**@type {{[k: string]: string}} */ let base = { airlock: 'cloudnine', battlearmor: 'shellarmor', @@ -394,8 +502,8 @@ exports.BattleFormats = { teravolt: 'moldbreaker', turboblaze: 'moldbreaker', }; - for (let i = 0; i < team.length; i++) { - let ability = toId(team[i].ability); + for (const set of team) { + let ability = toId(set.ability); if (!ability) continue; if (ability in base) ability = base[ability]; if (ability in abilityTable) { @@ -412,14 +520,15 @@ exports.BattleFormats = { ohkoclause: { effectType: 'ValidatorRule', name: 'OHKO Clause', - onStart: function () { + desc: "Bans all OHKO moves, such as Fissure", + onBegin() { this.add('rule', 'OHKO Clause: OHKO moves are banned'); }, - onValidateSet: function (set) { + onValidateSet(set) { let problems = []; if (set.moves) { - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); + for (const moveId of set.moves) { + let move = this.getMove(moveId); if (move.ohko) problems.push(move.name + ' is banned by OHKO Clause.'); } } @@ -429,38 +538,34 @@ exports.BattleFormats = { evasionabilitiesclause: { effectType: 'ValidatorRule', name: 'Evasion Abilities Clause', + desc: "Bans abilities that boost Evasion under certain weather conditions", banlist: ['Sand Veil', 'Snow Cloak'], - onStart: function () { + onBegin() { this.add('rule', 'Evasion Abilities Clause: Evasion abilities are banned'); }, }, evasionmovesclause: { effectType: 'ValidatorRule', name: 'Evasion Moves Clause', + desc: "Bans moves that consistently raise the user's evasion when used", banlist: ['Minimize', 'Double Team'], - onStart: function () { + onBegin() { this.add('rule', 'Evasion Moves Clause: Evasion moves are banned'); }, - onValidateSet: function (set, format, setHas) { - let item = this.getItem(set.item); - if (!item.zMove) return; - let evasionBoosted = false; - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); - if (move.type === item.zMoveType) { - if (move.zMoveBoost && move.zMoveBoost.evasion > 0) { - evasionBoosted = true; - break; - } - } - } - if (!evasionBoosted) return; - return [(set.name || set.species) + " can boost Evasion, which is banned by Evasion Clause."]; + }, + accuracymovesclause: { + effectType: 'ValidatorRule', + name: 'Accuracy Moves Clause', + desc: "Bans moves that have a chance to lower the target's accuracy when used", + banlist: ['Flash', 'Kinesis', 'Leaf Tornado', 'Mirror Shot', 'Mud Bomb', 'Mud-Slap', 'Muddy Water', 'Night Daze', 'Octazooka', 'Sand Attack', 'Smokescreen'], + onBegin() { + this.add('rule', 'Accuracy Moves Clause: Accuracy-lowering moves are banned'); }, }, endlessbattleclause: { effectType: 'Rule', name: 'Endless Battle Clause', + desc: "Prevents players from forcing a battle which their opponent cannot end except by forfeit", // implemented in sim/battle.js // A Pokémon has a confinement counter, which starts at 0: @@ -485,84 +590,73 @@ exports.BattleFormats = { // with one // - OR it has eaten a Leppa berry it isn't holding - onStart: function () { + onBegin() { this.add('rule', 'Endless Battle Clause: Forcing endless battles is banned'); }, }, moodyclause: { effectType: 'ValidatorRule', name: 'Moody Clause', + desc: "Bans the ability Moody", banlist: ['Moody'], - onStart: function () { + onBegin() { this.add('rule', 'Moody Clause: Moody is banned'); }, }, swaggerclause: { effectType: 'ValidatorRule', name: 'Swagger Clause', + desc: "Bans the move Swagger", banlist: ['Swagger'], - onStart: function () { + onBegin() { this.add('rule', 'Swagger Clause: Swagger is banned'); }, }, batonpassclause: { effectType: 'ValidatorRule', name: 'Baton Pass Clause', + desc: "Stops teams from having more than one Pokémon with Baton Pass, and no Pokémon may be capable of passing boosts to both Speed and another stat", banlist: ["Baton Pass > 1"], - onStart: function () { + onBegin() { this.add('rule', 'Baton Pass Clause: Limit one Baton Passer, can\'t pass Spe and other stats simultaneously'); }, - onValidateSet: function (set, format, setHas) { - if (!('batonpass' in setHas)) return; + onValidateSet(set, format, setHas) { + if (!('move:batonpass' in setHas)) return; - // check if Speed is boosted + let item = this.getItem(set.item); + let ability = toId(set.ability); + /**@type {boolean | string} */ let speedBoosted = false; + /**@type {boolean | string} */ let nonSpeedBoosted = false; - if (toId(set.item) === 'eeviumz') { - speedBoosted = true; - nonSpeedBoosted = true; - } - let item = this.getItem(set.item); - for (let i = 0; i < set.moves.length; i++) { - let move = this.getMove(set.moves[i]); - if (move.boosts && move.boosts.spe > 0) { + + for (const moveId of set.moves) { + let move = this.getMove(moveId); + if (move.id === 'flamecharge' || (move.boosts && move.boosts.spe && move.boosts.spe > 0)) { speedBoosted = true; } - if (move.boosts && (move.boosts.atk > 0 || move.boosts.def > 0 || move.boosts.spa > 0 || move.boosts.spd > 0)) { + if (['acupressure', 'bellydrum', 'chargebeam', 'curse', 'diamondstorm', 'fellstinger', 'fierydance', 'flowershield', 'poweruppunch', 'rage', 'rototiller', 'skullbash', 'stockpile'].includes(move.id) || + move.boosts && ((move.boosts.atk && move.boosts.atk > 0) || (move.boosts.def && move.boosts.def > 0) || (move.boosts.spa && move.boosts.spa > 0) || (move.boosts.spd && move.boosts.spd > 0))) { nonSpeedBoosted = true; } if (item.zMove && move.type === item.zMoveType) { - if (move.zMoveBoost && move.zMoveBoost.spe > 0) { + if (move.zMoveBoost && move.zMoveBoost.spe && move.zMoveBoost.spe > 0) { if (!speedBoosted) speedBoosted = move.name; } - if (move.zMoveBoost && (move.zMoveBoost.atk > 0 || move.zMoveBoost.def > 0 || move.zMoveBoost.spa > 0 || move.zMoveBoost.spd > 0)) { + if (move.zMoveBoost && ((move.zMoveBoost.atk && move.zMoveBoost.atk > 0) || (move.zMoveBoost.def && move.zMoveBoost.def > 0) || + (move.zMoveBoost.spa && move.zMoveBoost.spa > 0) || (move.zMoveBoost.spd && move.zMoveBoost.spd > 0))) { if (!nonSpeedBoosted || move.name === speedBoosted) nonSpeedBoosted = move.name; } } } - let boostSpeed = ['flamecharge', 'geomancy', 'motordrive', 'rattled', 'speedboost', 'steadfast', 'weakarmor', 'blazikenite', 'salacberry']; - if (!speedBoosted) { - for (let i = 0; i < boostSpeed.length; i++) { - if (boostSpeed[i] in setHas) { - speedBoosted = true; - break; - } - } - } - if (!speedBoosted) { - return; + if (['motordrive', 'rattled', 'speedboost', 'steadfast', 'weakarmor'].includes(ability) || ['blazikenite', 'eeviumz', 'kommoniumz', 'salacberry'].includes(item.id)) { + speedBoosted = true; } + if (!speedBoosted) return; - // check if non-Speed boosted - let boostNonSpeed = ['acupressure', 'starfberry', 'curse', 'poweruppunch', 'rage', 'rototiller', 'fellstinger', 'bellydrum', 'download', 'justified', 'moxie', 'sapsipper', 'defiant', 'angerpoint', 'cellbattery', 'liechiberry', 'snowball', 'weaknesspolicy', 'diamondstorm', 'flowershield', 'skullbash', 'stockpile', 'cottonguard', 'ganlonberry', 'keeberry', 'chargebeam', 'fierydance', 'geomancy', 'lightningrod', 'stormdrain', 'competitive', 'absorbbulb', 'petayaberry', 'charge', 'apicotberry', 'luminousmoss', 'marangaberry']; - if (!nonSpeedBoosted) { - for (let i = 0; i < boostNonSpeed.length; i++) { - if (boostNonSpeed[i] in setHas) { - nonSpeedBoosted = true; - break; - } - } + if (['angerpoint', 'competitive', 'defiant', 'download', 'justified', 'lightningrod', 'moxie', 'sapsipper', 'stormdrain'].includes(ability) || ['absorbbulb', 'apicotberry', 'cellbattery', 'eeviumz', 'ganlonberry', 'keeberry', 'kommoniumz', 'liechiberry', 'luminousmoss', 'marangaberry', 'petayaberry', 'snowball', 'starfberry', 'weaknesspolicy'].includes(item.id)) { + nonSpeedBoosted = true; } if (!nonSpeedBoosted) return; @@ -575,15 +669,29 @@ exports.BattleFormats = { cfzclause: { effectType: 'ValidatorRule', name: 'CFZ Clause', - banlist: ['10,000,000 Volt Thunderbolt', 'Acid Downpour', 'All-Out Pummeling', 'Black Hole Eclipse', 'Bloom Doom', 'Breakneck Blitz', 'Catastropika', 'Continental Crush', 'Corkscrew Crash', 'Devastating Drake', 'Extreme Evoboost', 'Genesis Supernova', 'Gigavolt Havoc', 'Guardian of Alola', 'Hydro Vortex', 'Inferno Overdrive', 'Malicious Moonsault', 'Never-Ending Nightmare', 'Oceanic Operetta', 'Pulverizing Pancake', 'Savage Spin-Out', 'Shattered Psyche', 'Sinister Arrow Raid', 'Soul-Stealing 7-Star Strike', 'Stoked Sparksurfer', 'Subzero Slammer', 'Supersonic Skystrike', 'Tectonic Rage', 'Twinkle Tackle'], - onStart: function () { + desc: "Bans the use of crystal-free Z-Moves", + banlist: ['10,000,000 Volt Thunderbolt', 'Acid Downpour', 'All-Out Pummeling', 'Black Hole Eclipse', 'Bloom Doom', 'Breakneck Blitz', 'Catastropika', 'Clangorous Soulblaze', 'Continental Crush', 'Corkscrew Crash', 'Devastating Drake', 'Extreme Evoboost', 'Genesis Supernova', 'Gigavolt Havoc', 'Guardian of Alola', 'Hydro Vortex', 'Inferno Overdrive', 'Let\'s Snuggle Forever', 'Light That Burns the Sky', 'Malicious Moonsault', 'Menacing Moonraze Maelstrom', 'Never-Ending Nightmare', 'Oceanic Operetta', 'Pulverizing Pancake', 'Savage Spin-Out', 'Searing Sunraze Smash', 'Shattered Psyche', 'Sinister Arrow Raid', 'Soul-Stealing 7-Star Strike', 'Splintered Stormshards', 'Stoked Sparksurfer', 'Subzero Slammer', 'Supersonic Skystrike', 'Tectonic Rage', 'Twinkle Tackle'], + onBegin() { this.add('rule', 'CFZ Clause: Crystal-free Z-Moves are banned'); }, }, + zmoveclause: { + effectType: 'ValidatorRule', + name: 'Z-Move Clause', + desc: "Bans Pokémon from holding Z-Crystals", + onValidateSet(set) { + const item = this.getItem(set.item); + if (item.zMove) return [`${set.name || set.species}'s item ${item.name} is banned by Z-Move Clause.`]; + }, + onBegin() { + this.add('rule', 'Z-Move Clause: Z-Moves are banned'); + }, + }, hppercentagemod: { effectType: 'Rule', name: 'HP Percentage Mod', - onStart: function () { + desc: "Shows the HP of Pokémon in percentages", + onBegin() { this.add('rule', 'HP Percentage Mod: HP is shown in percentages'); this.reportPercentages = true; }, @@ -591,7 +699,8 @@ exports.BattleFormats = { exacthpmod: { effectType: 'Rule', name: 'Exact HP Mod', - onStart: function () { + desc: "Shows the exact HP of all Pokémon", + onBegin() { this.add('rule', 'Exact HP Mod: Exact HP is shown'); this.reportExactHP = true; }, @@ -599,24 +708,25 @@ exports.BattleFormats = { cancelmod: { effectType: 'Rule', name: 'Cancel Mod', - onStart: function () { + desc: "Allows players to change their own choices before their opponents make one", + onBegin() { this.supportCancel = true; }, }, sleepclausemod: { effectType: 'Rule', name: 'Sleep Clause Mod', + desc: "Prevents players from putting more than one of their opponent's Pokémon to sleep at a time, and bans Mega Gengar from using Hypnosis", banlist: ['Hypnosis + Gengarite'], - onStart: function () { + onBegin() { this.add('rule', 'Sleep Clause Mod: Limit one foe put to sleep'); }, - onSetStatus: function (status, target, source) { + onSetStatus(status, target, source) { if (source && source.side === target.side) { return; } if (status.id === 'slp') { - for (let i = 0; i < target.side.pokemon.length; i++) { - let pokemon = target.side.pokemon[i]; + for (const pokemon of target.side.pokemon) { if (pokemon.hp && pokemon.status === 'slp') { if (!pokemon.statusData.source || pokemon.statusData.source.side !== pokemon.side) { this.add('-message', 'Sleep Clause Mod activated.'); @@ -627,19 +737,27 @@ exports.BattleFormats = { } }, }, + switchpriorityclausemod: { + effectType: 'Rule', + name: 'Switch Priority Clause Mod', + desc: "Makes a faster Pokémon switch first when double-switching, unlike in Emerald link battles, where player 1's Pokémon would switch first", + onBegin() { + this.add('rule', 'Switch Priority Clause Mod: Faster Pokémon switch first'); + }, + }, freezeclausemod: { effectType: 'Rule', name: 'Freeze Clause Mod', - onStart: function () { + desc: "Prevents players from freezing more than one of their opponent's Pokémon at a time", + onBegin() { this.add('rule', 'Freeze Clause Mod: Limit one foe frozen'); }, - onSetStatus: function (status, target, source) { + onSetStatus(status, target, source) { if (source && source.side === target.side) { return; } if (status.id === 'frz') { - for (let i = 0; i < target.side.pokemon.length; i++) { - let pokemon = target.side.pokemon[i]; + for (const pokemon of target.side.pokemon) { if (pokemon.status === 'frz') { this.add('-message', 'Freeze Clause activated.'); return false; @@ -651,82 +769,126 @@ exports.BattleFormats = { sametypeclause: { effectType: 'ValidatorRule', name: 'Same Type Clause', - onStart: function () { + desc: "Forces all Pokémon on a team to share a type with each other", + onBegin() { this.add('rule', 'Same Type Clause: Pokémon in a team must share a type'); }, - onValidateTeam: function (team) { + onValidateTeam(team) { + /**@type {string[]} */ let typeTable; - for (let i = 0; i < team.length; i++) { - let template = this.getTemplate(team[i].species); - if (!template.types) return ["Your team must share a type."]; + for (const [i, set] of team.entries()) { + let template = this.getTemplate(set.species); + if (!template.types) return [`Invalid pokemon ${set.name || set.species}`]; if (i === 0) { typeTable = template.types; } else { - typeTable = typeTable.filter(type => template.types.indexOf(type) >= 0); + // @ts-ignore + typeTable = typeTable.filter(type => template.types.includes(type)); } if (this.gen >= 7) { - let item = this.getItem(team[i].item); + let item = this.getItem(set.item); if (item.megaStone && template.species === item.megaEvolves) { template = this.getTemplate(item.megaStone); - typeTable = typeTable.filter(type => template.types.indexOf(type) >= 0); + typeTable = typeTable.filter(type => template.types.includes(type)); + } + if (item.id === "ultranecroziumz" && template.baseSpecies === "Necrozma") { + template = this.getTemplate("Necrozma-Ultra"); + typeTable = typeTable.filter(type => template.types.includes(type)); } } - if (!typeTable.length) return ["Your team must share a type."]; + if (!typeTable.length) return [`Your team must share a type.`]; } }, }, megarayquazaclause: { effectType: 'Rule', name: 'Mega Rayquaza Clause', - onStart: function () { + desc: "Prevents Rayquaza from mega evolving", + onBegin() { this.add('rule', 'Mega Rayquaza Clause: You cannot mega evolve Rayquaza'); - for (let i = 0; i < this.sides[0].pokemon.length; i++) { - if (this.sides[0].pokemon[i].speciesid === 'rayquaza') this.sides[0].pokemon[i].canMegaEvo = false; + for (const side of this.sides) { + for (const pokemon of side.pokemon) { + if (pokemon.speciesid === 'rayquaza') pokemon.canMegaEvo = null; + } } - for (let i = 0; i < this.sides[1].pokemon.length; i++) { - if (this.sides[1].pokemon[i].speciesid === 'rayquaza') this.sides[1].pokemon[i].canMegaEvo = false; + }, + }, + arceusevclause: { + effectType: 'ValidatorRule', + name: 'Arceus EV Clause', + desc: "Restricts Arceus to a maximum of 100 EVs in any one stat", + onValidateSet(set, format) { + let template = this.getTemplate(set.species); + if (template.num === 493 && set.evs) { + for (let stat in set.evs) { + // @ts-ignore + if (set.evs[stat] > 100) return ["Arceus may not have more than 100 of any EVs."]; + } } }, }, inversemod: { effectType: 'Rule', name: 'Inverse Mod', + desc: "The mod for Inverse Battle which inverts the type effectiveness chart, swapping resistances and weaknesses with each other", onNegateImmunity: false, - onEffectiveness: function (typeMod, target, type, move) { + 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.getImmunity(move, type)) return 1; return -typeMod; }, }, - sketchclause: { - effectType: 'ValidatorRule', - name: 'Sketch Clause', - onValidateTeam: function (team) { - let sketchedMoves = {}; - for (let i = 0; i < team.length; i++) { - let move = team[i].sketchmonsMove; - if (!move) continue; - if (move in sketchedMoves) { - return ["You are limited to sketching one of each move by the Sketch Clause.", "(You have sketched " + this.getMove(move).name + " more than once)"]; - } - sketchedMoves[move] = (team[i].name || team[i].species); - } - }, - }, ignoreillegalabilities: { effectType: 'ValidatorRule', name: 'Ignore Illegal Abilities', - // Implemented in the 'pokemon' ruleset and in teamvalidator.js + desc: "Allows Pokémon to use any ability", + // Implemented in the 'pokemon' ruleset and in team-validator.js }, - allowonesketch: { + stabmonsmovelegality: { effectType: 'ValidatorRule', - name: 'Allow One Sketch', - // Implemented in teamvalidator.js + name: 'STABmons Move Legality', + desc: "Allows Pokémon to use any move that they or a previous evolution/out-of-battle forme share a type with", + checkLearnset(move, template, lsetData, set) { + const restrictedMoves = this.format.restrictedMoves || []; + if (!move.isZ && !restrictedMoves.includes(move.name)) { + let dex = this.dex; + let types = template.types; + let baseTemplate = dex.getTemplate(template.baseSpecies); + if (template.prevo) types = types.concat(dex.getTemplate(dex.getTemplate(template.prevo).prevo || template.prevo).types); + if (baseTemplate.otherFormes) { + for (const formeid of baseTemplate.otherFormes) { + let forme = dex.getTemplate(formeid); + if (!forme.battleOnly) { + if (forme.forme !== 'Alola' && forme.forme !== 'Alola-Totem' && forme.baseSpecies !== 'Wormadam') { + types = types.concat(forme.types).concat(baseTemplate.types); + } + } + } + } + if (types.includes(move.type)) return null; + } + return this.checkLearnset(move, template, lsetData, set); + }, }, allowcap: { effectType: 'ValidatorRule', name: 'Allow CAP', + desc: "Allows the use of Pokémon, abilities, moves, and items made by the Create-A-Pokémon project", // Implemented in the 'pokemon' ruleset }, + allowtradeback: { + effectType: 'ValidatorRule', + name: 'Allow Tradeback', + desc: "Allows Gen 1 pokemon to have moves from their Gen 2 learnsets", + // Implemented in team-validator.js + }, + allowavs: { + effectType: 'ValidatorRule', + name: 'Allow AVs', + desc: "Tells formats with the 'letsgo' mod to take Awakening Values into consideration when calculating stats", + // Implemented in mods/letsgo/rulesets.js + }, }; + +exports.BattleFormats = BattleFormats; diff --git a/data/scripts.js b/data/scripts.js index 213e186601fc7..1ee7da863f59e 100644 --- a/data/scripts.js +++ b/data/scripts.js @@ -2,7 +2,8 @@ const CHOOSABLE_TARGETS = new Set(['normal', 'any', 'adjacentAlly', 'adjacentAllyOrSelf', 'adjacentFoe']); -exports.BattleScripts = { +/**@type {BattleScriptsData} */ +let BattleScripts = { gen: 7, /** * runMove is the "outside" move caller. It handles deducting PP, @@ -15,21 +16,20 @@ exports.BattleScripts = { * externalMove skips LockMove and PP deduction, mostly for use by * Dancer. */ - runMove: function (move, pokemon, targetLoc, sourceEffect, zMove, externalMove) { - let target = this.getTarget(pokemon, zMove || move, targetLoc); - if (!sourceEffect && toId(move) !== 'struggle' && !zMove) { - let changedMove = this.runEvent('OverrideDecision', pokemon, target, move); + runMove(moveOrMoveName, pokemon, targetLoc, sourceEffect, zMove, externalMove) { + let target = this.getTarget(pokemon, zMove || moveOrMoveName, targetLoc); + let baseMove = this.getActiveMove(moveOrMoveName); + const pranksterBoosted = baseMove.pranksterBoosted; + if (!sourceEffect && baseMove.id !== 'struggle' && !zMove) { + let changedMove = this.runEvent('OverrideAction', pokemon, target, baseMove); if (changedMove && changedMove !== true) { - move = changedMove; - target = null; + baseMove = this.getActiveMove(changedMove); + if (pranksterBoosted) baseMove.pranksterBoosted = pranksterBoosted; + target = this.resolveTarget(pokemon, baseMove); } } - let baseMove = this.getMove(move); - move = zMove ? this.getZMoveCopy(move, pokemon) : baseMove; - if (!target && target !== false) target = this.resolveTarget(pokemon, move); + let move = zMove ? this.getActiveZMove(baseMove, pokemon) : baseMove; - // copy the priority for Quick Guard - if (zMove) move.priority = baseMove.priority; move.isExternal = externalMove; this.setActiveMove(move, pokemon, target); @@ -42,16 +42,20 @@ exports.BattleScripts = { this.clearActiveMove(true); return; } */ - if (!this.runEvent('BeforeMove', pokemon, target, move)) { + let willTryMove = this.runEvent('BeforeMove', pokemon, target, move); + if (!willTryMove) { this.runEvent('MoveAborted', pokemon, target, move); - // Prevent Pursuit from running again against a slower U-turn/Volt Switch/Parting Shot - pokemon.moveThisTurn = true; this.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, pokemon, target, move)) { this.clearActiveMove(true); + pokemon.moveThisTurnResult = false; return; } } @@ -66,6 +70,7 @@ exports.BattleScripts = { let gameConsole = [null, 'Game Boy', 'Game Boy', 'Game Boy Advance', 'DS', 'DS'][this.gen] || '3DS'; this.add('-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.clearActiveMove(true); + pokemon.moveThisTurnResult = false; return; } } else { @@ -85,9 +90,33 @@ exports.BattleScripts = { this.add('-zpower', pokemon); pokemon.side.zMoveUsed = true; } - this.useMove(baseMove, pokemon, target, sourceEffect, zMove); + let moveDidSomething = this.useMove(baseMove, pokemon, target, sourceEffect, zMove); + if (this.activeMove) move = this.activeMove; this.singleEvent('AfterMove', move, null, pokemon, target, move); this.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) { + let dancers = []; + for (const side of this.sides) { + for (const currentPoke of side.active) { + if (!currentPoke || !currentPoke.hp || pokemon === currentPoke) continue; + if (currentPoke.hasAbility('dancer') && !currentPoke.isSemiInvulnerable()) { + dancers.push(currentPoke); + } + } + } + // Dancer activates in order of lowest speed stat to highest + // Ties go to whichever Pokemon has had the ability for the least amount of time + dancers.sort(function (a, b) { return -(b.stats['spe'] - a.stats['spe']) || b.abilityOrder - a.abilityOrder; }); + for (const dancer of dancers) { + if (this.faintMessages()) break; + this.add('-activate', dancer, 'ability: Dancer'); + this.runMove(move.id, dancer, 0, this.getAbility('dancer'), undefined, true); + // Using a Dancer move is enough to spoil Fake Out etc. + dancer.activeTurns++; + } + } if (noLock && pokemon.volatiles.lockedmove) delete pokemon.volatiles.lockedmove; }, /** @@ -100,28 +129,42 @@ exports.BattleScripts = { * The only ones that use runMove are Instruct, Pursuit, and * Dancer. */ - useMove: function (move, pokemon, target, sourceEffect, zMove) { + useMove(move, pokemon, target, sourceEffect, zMove) { + pokemon.moveThisTurnResult = undefined; + /** @type {boolean? | undefined} */ // Typescript bug + let oldMoveResult = pokemon.moveThisTurnResult; + let moveResult = this.useMoveInner(move, pokemon, target, sourceEffect, zMove); + if (oldMoveResult === pokemon.moveThisTurnResult) pokemon.moveThisTurnResult = moveResult; + return moveResult; + }, + useMoveInner(moveOrMoveName, pokemon, target, sourceEffect, zMove) { if (!sourceEffect && this.effect.id) sourceEffect = this.effect; - if (zMove && move.id === 'weatherball') { - let baseMove = move; + if (sourceEffect && sourceEffect.id === 'instruct') sourceEffect = null; + + let move = this.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.singleEvent('ModifyMove', move, null, pokemon, target, move, move); - move = this.getZMoveCopy(move, pokemon); - if (move.type !== 'Normal') sourceEffect = baseMove; - } else if (zMove || (sourceEffect && sourceEffect.isZ)) { - move = this.getZMoveCopy(move, pokemon); - } else { - move = this.getMoveCopy(move); + if (move.type !== 'Normal') sourceEffect = move; } + if (zMove || (move.category !== 'Status' && sourceEffect && sourceEffect.isZ)) { + move = this.getActiveZMove(move, pokemon); + } + if (this.activeMove) { move.priority = this.activeMove.priority; - move.pranksterBoosted = move.hasBounced ? false : this.activeMove.pranksterBoosted; + if (!move.hasBounced) move.pranksterBoosted = this.activeMove.pranksterBoosted; } let baseTarget = move.target; - if (!target && target !== false) target = this.resolveTarget(pokemon, move); + if (target === undefined) target = this.resolveTarget(pokemon, move); if (move.target === 'self' || move.target === 'allies') { target = pokemon; } - if (sourceEffect) move.sourceEffect = sourceEffect.id; + if (sourceEffect) { + move.sourceEffect = sourceEffect.id; + move.ignoreAbility = false; + } let moveResult = false; this.setActiveMove(move, pokemon, target); @@ -138,16 +181,11 @@ exports.BattleScripts = { // Adjust again target = this.resolveTarget(pokemon, move); } - if (!move) return false; - - let attrs = ''; - if (pokemon.fainted) { + if (!move || pokemon.fainted) { return false; } - if (move.flags['charge'] && !pokemon.volatiles[move.id]) { - attrs = '|[still]'; // suppress the default move animation - } + let attrs = ''; let movename = move.name; if (move.id === 'hiddenpower') movename = 'Hidden Power'; @@ -158,48 +196,21 @@ exports.BattleScripts = { } this.addMove('move', pokemon, movename, target + attrs); - if (zMove && move.category !== 'Status') { - this.attrLastMove('[zeffect]'); - } else if (zMove && move.zMoveBoost) { - this.boost(move.zMoveBoost, pokemon, pokemon, {id: 'zpower'}); - } else if (zMove && move.zMoveEffect === 'heal') { - this.heal(pokemon.maxhp, pokemon, pokemon, {id: 'zpower'}); - } else if (zMove && move.zMoveEffect === 'healreplacement') { - move.self = {sideCondition: 'healreplacement'}; - } else if (zMove && move.zMoveEffect === 'clearnegativeboost') { - let boosts = {}; - for (let i in pokemon.boosts) { - if (pokemon.boosts[i] < 0) { - boosts[i] = 0; - } - } - pokemon.setBoost(boosts); - this.add('-clearnegativeboost', pokemon, '[zeffect]'); - } else if (zMove && move.zMoveEffect === 'redirect') { - pokemon.addVolatile('followme', pokemon, {id: 'zpower'}); - } else if (zMove && move.zMoveEffect === 'crit2') { - pokemon.addVolatile('focusenergy', pokemon, {id: 'zpower'}); - } else if (zMove && move.zMoveEffect === 'curse') { - if (pokemon.hasType('Ghost')) { - this.heal(pokemon.maxhp, pokemon, pokemon, {id: 'zpower'}); - } else { - this.boost({atk: 1}, pokemon, pokemon, {id: 'zpower'}); - } - } + if (zMove) this.runZPower(move, pokemon); - if (target === false) { + if (!target) { this.attrLastMove('[notarget]'); - this.add('-notarget'); + this.add(this.gen >= 5 ? '-fail' : '-notarget', pokemon); if (move.target === 'normal') pokemon.isStaleCon = 0; - return true; + return false; } let targets = pokemon.getMoveTargets(move, target); if (!sourceEffect || sourceEffect.id === 'pursuit') { let extraPP = 0; - for (let i = 0; i < targets.length; i++) { - let ppDrop = this.singleEvent('DeductPP', targets[i].getAbility(), targets[i].abilityData, targets[i], pokemon, move); + for (const source of targets) { + let ppDrop = this.runEvent('DeductPP', source, pokemon, move); if (ppDrop !== true) { extraPP += ppDrop || 0; } @@ -209,12 +220,10 @@ exports.BattleScripts = { } } - if (!this.singleEvent('TryMove', move, null, pokemon, target, move)) { - return true; - } - - if (!this.runEvent('TryMove', pokemon, target, move)) { - return true; + if (!this.singleEvent('TryMove', move, null, pokemon, target, move) || + !this.runEvent('TryMove', pokemon, target, move)) { + move.mindBlownRecoil = false; + return false; } this.singleEvent('UseMoveMessage', move, null, pokemon, target, move); @@ -227,26 +236,32 @@ exports.BattleScripts = { this.faint(pokemon, pokemon, move); } + /** @type {number | false | undefined | ''} */ let damage = false; if (move.target === 'all' || move.target === 'foeSide' || move.target === 'allySide' || move.target === 'allyTeam') { damage = this.tryMoveHit(target, pokemon, move); + if (damage === this.NOT_FAILURE) pokemon.moveThisTurnResult = null; if (damage || damage === 0 || damage === undefined) moveResult = true; } else if (move.target === 'allAdjacent' || move.target === 'allAdjacentFoes') { if (!targets.length) { this.attrLastMove('[notarget]'); - this.add('-notarget'); - return true; + this.add(this.gen >= 5 ? '-fail' : '-notarget', pokemon); + return false; } if (targets.length > 1) move.spreadHit = true; - damage = 0; let hitTargets = []; - for (let i = 0; i < targets.length; i++) { - let hitResult = this.tryMoveHit(targets[i], pokemon, move); + for (const source of targets) { + let hitResult = this.tryMoveHit(source, pokemon, move); if (hitResult || hitResult === 0 || hitResult === undefined) { moveResult = true; - hitTargets.push(targets[i].toString().substr(0, 3)); + hitTargets.push(source.toString().substr(0, 3)); } - damage += hitResult || 0; + if (damage) { + damage += hitResult || 0; + } else { + if (damage !== false || hitResult !== this.NOT_FAILURE) damage = hitResult; + } + if (damage === this.NOT_FAILURE) pokemon.moveThisTurnResult = null; } if (move.spreadHit) this.attrLastMove('[spread] ' + hitTargets.join(',')); } else { @@ -257,37 +272,42 @@ exports.BattleScripts = { lacksTarget = !this.isAdjacent(target, pokemon); } } - if (lacksTarget && (!move.flags['charge'] || pokemon.volatiles['twoturnmove'])) { + if (lacksTarget && !move.isFutureMove) { this.attrLastMove('[notarget]'); - this.add('-notarget'); + this.add(this.gen >= 5 ? '-fail' : '-notarget', pokemon); if (move.target === 'normal') pokemon.isStaleCon = 0; - return true; + return false; } damage = this.tryMoveHit(target, pokemon, move); + if (damage === this.NOT_FAILURE) pokemon.moveThisTurnResult = null; if (damage || damage === 0 || damage === undefined) moveResult = true; } + if (move.selfBoost && moveResult) this.moveHit(pokemon, pokemon, move, move.selfBoost, false, true); if (!pokemon.hp) { this.faint(pokemon, pokemon, move); } if (!moveResult) { this.singleEvent('MoveFail', move, null, target, pokemon, move); - return true; + return false; } - if (!move.negateSecondary && !(pokemon.hasAbility('sheerforce') && pokemon.volatiles['sheerforce'])) { + if (!move.negateSecondary && !(move.hasSheerForce && pokemon.hasAbility('sheerforce'))) { this.singleEvent('AfterMoveSecondarySelf', move, null, pokemon, target, move); this.runEvent('AfterMoveSecondarySelf', pokemon, target, move); } return true; }, - tryMoveHit: function (target, pokemon, move) { + tryMoveHit(target, pokemon, move) { this.setActiveMove(move, pokemon, target); - let hitResult = true; + move.zBrokeProtect = false; - hitResult = this.singleEvent('PrepareHit', move, {}, target, pokemon, move); + let hitResult = this.singleEvent('PrepareHit', move, {}, target, pokemon, move); if (!hitResult) { - if (hitResult === false) this.add('-fail', target); + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } return false; } this.runEvent('PrepareHit', pokemon, target, move); @@ -303,41 +323,62 @@ exports.BattleScripts = { hitResult = this.runEvent('TryHitSide', target, pokemon, move); } if (!hitResult) { - if (hitResult === false) this.add('-fail', target); - return true; + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } + return false; } return this.moveHit(target, pokemon, move); } + hitResult = this.runEvent('TryImmunity', target, pokemon, move); + if (!hitResult) { + if (hitResult !== null) { + if (!move.spreadHit) this.attrLastMove('[miss]'); + this.add('-miss', pokemon, target); + } + return false; + } + if (move.ignoreImmunity === undefined) { move.ignoreImmunity = (move.category === 'Status'); } - if (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type] && !target.runImmunity(move.type, true)) { + if (this.gen < 7 && (!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type, true)) { return false; } hitResult = this.runEvent('TryHit', target, pokemon, move); if (!hitResult) { - if (hitResult === false) this.add('-fail', target); + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } else if (hitResult === this.NOT_FAILURE) { + return hitResult; + } return false; } + if (this.gen >= 7 && (!move.ignoreImmunity || (move.ignoreImmunity !== true && !move.ignoreImmunity[move.type])) && !target.runImmunity(move.type, true)) { + return false; + } if (move.flags['powder'] && target !== pokemon && !this.getImmunity('powder', target)) { this.debug('natural powder immunity'); - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return false; } - if (this.gen >= 7 && move.pranksterBoosted && target.side !== pokemon.side && !this.getImmunity('prankster', target)) { + if (this.gen >= 7 && move.pranksterBoosted && pokemon.hasAbility('prankster') && target.side !== pokemon.side && !this.getImmunity('prankster', target)) { this.debug('natural prankster immunity'); if (!target.illusion) this.add('-hint', "In gen 7, Dark is immune to Prankster moves."); - this.add('-immune', target, '[msg]'); + this.add('-immune', target); return false; } let boostTable = [1, 4 / 3, 5 / 3, 2, 7 / 3, 8 / 3, 3]; // calculate true accuracy + /** @type {number | true} */ // TypeScript bug: incorrectly infers {number | true} as {number | boolean} let accuracy = move.accuracy; let boosts, boost; if (accuracy !== true) { @@ -381,7 +422,7 @@ exports.BattleScripts = { } else { accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); } - if (accuracy !== true && this.random(100) >= accuracy) { + if (accuracy !== true && !this.randomChance(accuracy, 100)) { if (!move.spreadHit) this.attrLastMove('[miss]'); this.add('-miss', pokemon, target); return false; @@ -389,12 +430,12 @@ exports.BattleScripts = { if (move.breaksProtect) { let broke = false; - for (let i in {banefulbunker:1, kingsshield:1, protect:1, spikyshield:1}) { - if (target.removeVolatile(i)) broke = true; + for (const effectid of ['banefulbunker', 'kingsshield', 'protect', 'spikyshield']) { + if (target.removeVolatile(effectid)) broke = true; } if (this.gen >= 6 || target.side !== pokemon.side) { - for (let i in {craftyshield:1, matblock:1, quickguard:1, wideguard:1}) { - if (target.side.removeSideCondition(i)) broke = true; + for (const effectid of ['craftyshield', 'matblock', 'quickguard', 'wideguard']) { + if (target.side.removeSideCondition(effectid)) broke = true; } } if (broke) { @@ -403,13 +444,16 @@ exports.BattleScripts = { } else { this.add('-activate', target, 'move: ' + move.name, '[broken]'); } + if (this.gen >= 6) delete target.volatiles['stall']; } } if (move.stealsBoosts) { + /** @type {{[k: string]: number}} */ let boosts = {}; let stolen = false; for (let statName in target.boosts) { + // @ts-ignore let stage = target.boosts[statName]; if (stage > 0) { boosts[statName] = stage; @@ -419,28 +463,29 @@ exports.BattleScripts = { if (stolen) { this.attrLastMove('[still]'); this.add('-clearpositiveboost', target, pokemon, 'move: ' + move.name); - this.boost(boosts, pokemon); + this.boost(boosts, pokemon, pokemon); for (let statName in boosts) { boosts[statName] = 0; } target.setBoost(boosts); - this.add('-anim', pokemon, "Spectral Thief", target); + this.addMove('-anim', pokemon, "Spectral Thief", target); } } move.totalDamage = 0; + /** @type {number | false | undefined} */ let damage = 0; pokemon.lastDamage = 0; if (move.multihit) { let hits = move.multihit; - if (hits.length) { + if (Array.isArray(hits)) { // yes, it's hardcoded... meh if (hits[0] === 2 && hits[1] === 5) { if (this.gen >= 5) { - hits = [2, 2, 3, 3, 4, 5][this.random(6)]; + hits = this.sample([2, 2, 3, 3, 4, 5]); } else { - hits = [2, 2, 2, 3, 3, 3, 4, 5][this.random(8)]; + hits = this.sample([2, 2, 2, 3, 3, 3, 4, 5]); } } else { hits = this.random(hits[0], hits[1] + 1); @@ -448,12 +493,14 @@ exports.BattleScripts = { } hits = Math.floor(hits); let nullDamage = true; + /** @type {number | false | undefined} */ let moveDamage; // There is no need to recursively check the ´sleepUsable´ flag as Sleep Talk can only be used while asleep. let isSleepUsable = move.sleepUsable || this.getMove(move.sourceEffect).sleepUsable; let i; for (i = 0; i < hits && target.hp && pokemon.hp; i++) { if (pokemon.status === 'slp' && !isSleepUsable) break; + move.hit = i + 1; if (move.multiaccuracy && i > 0) { accuracy = move.accuracy; @@ -480,7 +527,7 @@ exports.BattleScripts = { accuracy = this.runEvent('ModifyAccuracy', target, pokemon, move, accuracy); if (!move.alwaysHit) { accuracy = this.runEvent('Accuracy', target, pokemon, move, accuracy); - if (accuracy !== true && this.random(100) >= accuracy) break; + if (accuracy !== true && !this.randomChance(accuracy, 100)) break; } } @@ -492,9 +539,12 @@ exports.BattleScripts = { damage = (moveDamage || 0); // Total damage dealt is accumulated for the purposes of recoil (Parental Bond). move.totalDamage += damage; + if (move.mindBlownRecoil && i === 0) { + this.damage(Math.round(pokemon.maxhp / 2), pokemon, pokemon, this.getEffect('Mind Blown'), true); + } this.eachEvent('Update'); } - if (i === 0) return true; + if (i === 0) return false; if (nullDamage) damage = false; this.add('-hitcount', target, i); } else { @@ -503,10 +553,11 @@ exports.BattleScripts = { } if (move.recoil && move.totalDamage) { - this.damage(this.calcRecoilDamage(move.totalDamage, move), pokemon, target, 'recoil'); + this.damage(this.calcRecoilDamage(move.totalDamage, move), pokemon, pokemon, 'recoil'); } if (move.struggleRecoil) { + // @ts-ignore this.directDamage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1), pokemon, pokemon, {id: 'strugglerecoil'}); } @@ -518,19 +569,21 @@ exports.BattleScripts = { this.eachEvent('Update'); - if (target && !move.negateSecondary && !(pokemon.hasAbility('sheerforce') && pokemon.volatiles['sheerforce'])) { + if (target && !move.negateSecondary && !(move.hasSheerForce && pokemon.hasAbility('sheerforce'))) { this.singleEvent('AfterMoveSecondary', move, null, target, pokemon, move); this.runEvent('AfterMoveSecondary', target, pokemon, move); } return damage; }, - moveHit: function (target, pokemon, move, moveData, isSecondary, isSelf) { - let damage; - move = this.getMoveCopy(move); + moveHit(target, pokemon, moveOrMoveName, moveData, isSecondary, isSelf) { + /** @type {number | false | null | undefined} */ + let damage = undefined; + let move = this.getActiveMove(moveOrMoveName); if (!moveData) moveData = move; if (!moveData.flags) moveData.flags = {}; + /** @type {?boolean | number} */ let hitResult = true; // TryHit events: @@ -566,12 +619,15 @@ exports.BattleScripts = { if (move.target === 'all' && !isSelf) { hitResult = this.singleEvent('TryHitField', moveData, {}, target, pokemon, move); } else if ((move.target === 'foeSide' || move.target === 'allySide') && !isSelf) { - hitResult = this.singleEvent('TryHitSide', moveData, {}, target.side, pokemon, move); + hitResult = this.singleEvent('TryHitSide', moveData, {}, (target ? target.side : null), pokemon, move); } else if (target) { hitResult = this.singleEvent('TryHit', moveData, {}, target, pokemon, move); } if (!hitResult) { - if (hitResult === false) this.add('-fail', target); + if (hitResult === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } return false; } @@ -593,7 +649,8 @@ exports.BattleScripts = { } if (target) { - let didSomething = false; + /**@type {?boolean | number | undefined} */ + let didSomething = undefined; damage = this.getDamage(pokemon, target, moveData); @@ -615,7 +672,8 @@ exports.BattleScripts = { if (damage === false || damage === null) { if (damage === false && !isSecondary && !isSelf) { - this.add('-fail', target); + this.add('-fail', pokemon); + this.attrLastMove('[still]'); } this.debug('damage calculation interrupted'); return false; @@ -642,7 +700,8 @@ exports.BattleScripts = { if (moveData.heal && !target.fainted) { let d = target.heal((this.gen < 5 ? Math.floor : Math.round)(target.maxhp * moveData.heal[0] / moveData.heal[1])); if (!d && d !== 0) { - this.add('-fail', target); + this.add('-fail', pokemon); + this.attrLastMove('[still]'); this.debug('heal interrupted'); return false; } @@ -651,7 +710,7 @@ exports.BattleScripts = { } if (moveData.status) { hitResult = target.trySetStatus(moveData.status, pokemon, moveData.ability ? moveData.ability : move); - if (!hitResult && move.status) return hitResult; + if (!hitResult && move.status) return false; didSomething = didSomething || hitResult; } if (moveData.forceStatus) { @@ -679,53 +738,77 @@ exports.BattleScripts = { didSomething = didSomething || hitResult; } if (moveData.forceSwitch) { - if (this.canSwitch(target.side)) didSomething = true; // at least defer the fail message to later + hitResult = !!this.canSwitch(target.side); + didSomething = didSomething || hitResult; } if (moveData.selfSwitch) { - if (this.canSwitch(pokemon.side)) didSomething = true; // at least defer the fail message to later + // If the move is Parting Shot and it fails to change the target's stats in gen 7, didSomething will be null instead of undefined. + // Leaving didSomething as null will cause this function to return before setting the switch flag, preventing the switch. + if (this.canSwitch(pokemon.side) && (didSomething !== null || this.gen < 7)) { + didSomething = true; + } else { + didSomething = didSomething || false; + } } // 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. ;) - hitResult = null; if (move.target === 'all' && !isSelf) { - if (moveData.onHitField) hitResult = this.singleEvent('HitField', moveData, {}, target, pokemon, move); + if (moveData.onHitField) { + hitResult = this.singleEvent('HitField', moveData, {}, target, pokemon, move); + didSomething = didSomething || hitResult; + } } else if ((move.target === 'foeSide' || move.target === 'allySide') && !isSelf) { - if (moveData.onHitSide) hitResult = this.singleEvent('HitSide', moveData, {}, target.side, pokemon, move); + if (moveData.onHitSide) { + hitResult = this.singleEvent('HitSide', moveData, {}, target.side, pokemon, move); + didSomething = didSomething || hitResult; + } } else { - if (moveData.onHit) hitResult = this.singleEvent('Hit', moveData, {}, target, pokemon, move); + if (moveData.onHit) { + hitResult = this.singleEvent('Hit', moveData, {}, target, pokemon, move); + didSomething = didSomething || hitResult; + } if (!isSelf && !isSecondary) { this.runEvent('Hit', target, pokemon, move); } - if (moveData.onAfterHit) hitResult = this.singleEvent('AfterHit', moveData, {}, target, pokemon, move); + if (moveData.onAfterHit) { + hitResult = this.singleEvent('AfterHit', moveData, {}, target, pokemon, move); + didSomething = didSomething || hitResult; + } } - if (!hitResult && !didSomething && !moveData.self && !moveData.selfdestruct) { + // Move didn't fail because it didn't try to do anything + if (didSomething === undefined) didSomething = true; + + if (!didSomething && !moveData.self && !moveData.selfdestruct) { if (!isSelf && !isSecondary) { - if (hitResult === false || didSomething === false) this.add('-fail', target); + if (didSomething === false) { + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + } } this.debug('move failed because it did nothing'); return false; } } if (moveData.self && !move.selfDropped) { - let selfRoll; + let selfRoll = 0; if (!isSecondary && moveData.self.boosts) { selfRoll = this.random(100); if (!move.multihit) move.selfDropped = true; } // This is done solely to mimic in-game RNG behaviour. All self drops have a 100% chance of happening but still grab a random number. - if (typeof moveData.self.chance === 'undefined' || selfRoll < moveData.self.chance) { + if (moveData.self.chance === undefined || selfRoll < moveData.self.chance) { this.moveHit(pokemon, pokemon, move, moveData.self, isSecondary, true); } } if (moveData.secondaries) { - let secondaryRoll; + /** @type {SecondaryEffect[]} */ let secondaries = this.runEvent('ModifySecondaries', target, pokemon, moveData, moveData.secondaries.slice()); - for (let i = 0; i < secondaries.length; i++) { - secondaryRoll = this.random(100); - if (typeof secondaries[i].chance === 'undefined' || secondaryRoll < secondaries[i].chance) { - this.moveHit(target, pokemon, move, secondaries[i], true, isSelf); + for (const secondary of secondaries) { + let secondaryRoll = this.random(100); + if (typeof secondary.chance === 'undefined' || secondaryRoll < secondary.chance) { + this.moveHit(target, pokemon, move, secondary, true, isSelf); } } } @@ -734,16 +817,19 @@ exports.BattleScripts = { if (hitResult) { target.forceSwitchFlag = true; } else if (hitResult === false && move.category === 'Status') { - this.add('-fail', target); + this.add('-fail', pokemon); + this.attrLastMove('[still]'); + return false; } } if (move.selfSwitch && pokemon.hp) { - pokemon.switchFlag = move.selfSwitch; + pokemon.switchFlag = move.fullname; } return damage; }, - calcRecoilDamage: function (damageDealt, move) { + calcRecoilDamage(damageDealt, move) { + // @ts-ignore return this.clampIntRange(Math.round(damageDealt * move.recoil[0] / move.recoil[1]), 1); }, @@ -768,7 +854,7 @@ exports.BattleScripts = { Fairy: "Twinkle Tackle", }, - getZMove: function (move, pokemon, skipChecks) { + getZMove(move, pokemon, skipChecks) { let item = pokemon.getItem(); if (!skipChecks) { if (pokemon.side.zMoveUsed) return; @@ -779,7 +865,7 @@ exports.BattleScripts = { } if (item.zMoveFrom) { - if (move.name === item.zMoveFrom) return item.zMove; + if (move.name === item.zMoveFrom) return /** @type {string} */ (item.zMove); } else if (item.zMove === true) { if (move.type === item.zMoveType) { if (move.category === "Status") { @@ -791,40 +877,47 @@ exports.BattleScripts = { } }, - getZMoveCopy: function (move, pokemon) { - move = this.getMove(move); - let zMove; + getActiveZMove(move, pokemon) { if (pokemon) { let item = pokemon.getItem(); if (move.name === item.zMoveFrom) { - return this.getMoveCopy(item.zMove); + // @ts-ignore + let zMove = this.getActiveMove(item.zMove); + zMove.isZPowered = true; + return zMove; } } if (move.category === 'Status') { - zMove = this.getMoveCopy(move); + let zMove = this.getActiveMove(move); zMove.isZ = true; + zMove.isZPowered = true; return zMove; } - zMove = this.getMoveCopy(this.zMoveTable[move.type]); + let zMove = this.getActiveMove(this.zMoveTable[move.type]); + // @ts-ignore zMove.basePower = move.zMovePower; zMove.category = move.category; + // copy the priority for Quick Guard + zMove.priority = move.priority; + zMove.isZPowered = true; return zMove; }, - canZMove: function (pokemon) { - if (pokemon.side.zMoveUsed) return; + canZMove(pokemon) { + if (pokemon.side.zMoveUsed || (pokemon.transformed && (pokemon.template.isMega || pokemon.template.isPrimal || pokemon.template.forme === "Ultra"))) return; let item = pokemon.getItem(); if (!item.zMove) return; if (item.zMoveUser && !item.zMoveUser.includes(pokemon.template.species)) return; let atLeastOne = false; + /**@type {AnyObject?[]} */ let zMoves = []; - for (let i = 0; i < pokemon.moves.length; i++) { - if (pokemon.moveset[i].pp <= 0) { + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.pp <= 0) { zMoves.push(null); continue; } - let move = this.getMove(pokemon.moves[i]); + let move = this.getMove(moveSlot.move); let zMoveName = this.getZMove(move, pokemon, true) || ''; if (zMoveName) { let zMove = this.getMove(zMoveName); @@ -838,55 +931,103 @@ exports.BattleScripts = { if (atLeastOne) return zMoves; }, - canMegaEvo: function (pokemon) { + canMegaEvo(pokemon) { let altForme = pokemon.baseTemplate.otherFormes && this.getTemplate(pokemon.baseTemplate.otherFormes[0]); let item = pokemon.getItem(); - if (altForme && altForme.isMega && altForme.requiredMove && pokemon.moves.includes(toId(altForme.requiredMove)) && !item.zMove) return altForme.species; - if (item.megaEvolves !== pokemon.baseTemplate.baseSpecies || item.megaStone === pokemon.species) return false; + if (altForme && altForme.isMega && altForme.requiredMove && pokemon.baseMoves.includes(toId(altForme.requiredMove)) && !item.zMove) return altForme.species; + if (item.megaEvolves !== pokemon.baseTemplate.baseSpecies || item.megaStone === pokemon.species) { + return null; + } return item.megaStone; }, - runMegaEvo: function (pokemon) { - let template = this.getTemplate(pokemon.canMegaEvo); - let side = pokemon.side; + canUltraBurst(pokemon) { + if (['Necrozma-Dawn-Wings', 'Necrozma-Dusk-Mane'].includes(pokemon.baseTemplate.species) && + pokemon.getItem().id === 'ultranecroziumz') { + return "Necrozma-Ultra"; + } + return null; + }, + + runMegaEvo(pokemon) { + const templateid = pokemon.canMegaEvo || pokemon.canUltraBurst; + if (!templateid) return false; + const side = pokemon.side; // Pokémon affected by Sky Drop cannot mega evolve. Enforce it here for now. - let foeActive = side.foe.active; - for (let i = 0; i < foeActive.length; i++) { - if (foeActive[i].volatiles['skydrop'] && foeActive[i].volatiles['skydrop'].source === pokemon) { + for (const foeActive of side.foe.active) { + if (foeActive.volatiles['skydrop'] && foeActive.volatiles['skydrop'].source === pokemon) { return false; } } - pokemon.formeChange(template); - pokemon.baseTemplate = template; // mega evolution is permanent - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : ''); - if (pokemon.illusion) { - pokemon.ability = ''; // Don't allow Illusion to wear off - this.add('-mega', pokemon, pokemon.illusion.template.baseSpecies, template.requiredItem); - } else { - this.add('detailschange', pokemon, pokemon.details); - this.add('-mega', pokemon, template.baseSpecies, template.requiredItem); - } - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; + pokemon.formeChange(templateid, pokemon.getItem(), true); // Limit one mega evolution - for (let i = 0; i < side.pokemon.length; i++) { - side.pokemon[i].canMegaEvo = false; + let wasMega = pokemon.canMegaEvo; + for (const ally of side.pokemon) { + if (wasMega) { + ally.canMegaEvo = null; + } else { + ally.canUltraBurst = null; + } } this.runEvent('AfterMega', pokemon); return true; }, - isAdjacent: function (pokemon1, pokemon2) { + runZPower(move, pokemon) { + const zPower = this.getEffect('zpower'); + if (move.category !== 'Status') { + this.attrLastMove('[zeffect]'); + } else if (move.zMoveBoost) { + this.boost(move.zMoveBoost, pokemon, pokemon, zPower); + } else { + switch (move.zMoveEffect) { + case 'heal': + this.heal(pokemon.maxhp, pokemon, pokemon, zPower); + break; + case 'healreplacement': + move.self = {sideCondition: 'healreplacement'}; + break; + case 'clearnegativeboost': + /** @type {{[k: string]: number}} */ + let boosts = {}; + for (let i in pokemon.boosts) { + // @ts-ignore + if (pokemon.boosts[i] < 0) { + boosts[i] = 0; + } + } + pokemon.setBoost(boosts); + this.add('-clearnegativeboost', pokemon, '[zeffect]'); + break; + case 'redirect': + pokemon.addVolatile('followme', pokemon, zPower); + break; + case 'crit2': + pokemon.addVolatile('focusenergy', pokemon, zPower); + break; + case 'curse': + if (pokemon.hasType('Ghost')) { + this.heal(pokemon.maxhp, pokemon, pokemon, zPower); + } else { + this.boost({atk: 1}, pokemon, pokemon, zPower); + } + } + } + }, + + isAdjacent(pokemon1, pokemon2) { if (pokemon1.fainted || pokemon2.fainted) return false; if (pokemon1.side === pokemon2.side) return Math.abs(pokemon1.position - pokemon2.position) === 1; return Math.abs(pokemon1.position + pokemon2.position + 1 - pokemon1.side.active.length) <= 1; }, - targetTypeChoices: function (targetType) { + targetTypeChoices(targetType) { return CHOOSABLE_TARGETS.has(targetType); }, }; + +exports.BattleScripts = BattleScripts; diff --git a/data/statuses.js b/data/statuses.js index ce3ff45bd299c..04c119d88847e 100644 --- a/data/statuses.js +++ b/data/statuses.js @@ -1,9 +1,13 @@ 'use strict'; -exports.BattleStatuses = { +/**@type {{[k: string]: EffectData}} */ +let BattleStatuses = { brn: { + name: 'brn', + id: 'brn', + num: 0, effectType: 'Status', - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.id === 'flameorb') { this.add('-status', target, 'brn', '[from] item: Flame Orb'); } else if (sourceEffect && sourceEffect.effectType === 'Ability') { @@ -14,35 +18,41 @@ exports.BattleStatuses = { }, // Damage reduction is handled directly in the sim/battle.js damage function onResidualOrder: 9, - onResidual: function (pokemon) { + onResidual(pokemon) { this.damage(pokemon.maxhp / 16); }, }, par: { + name: 'par', + id: 'par', + num: 0, effectType: 'Status', - onStart: function (target, source, sourceEffect) { + 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: function (spe, pokemon) { + onModifySpe(spe, pokemon) { if (!pokemon.hasAbility('quickfeet')) { return this.chainModify(0.5); } }, onBeforeMovePriority: 1, - onBeforeMove: function (pokemon) { - if (this.random(4) === 0) { + onBeforeMove(pokemon) { + if (this.randomChance(1, 4)) { this.add('cant', pokemon, 'par'); return false; } }, }, slp: { + name: 'slp', + id: 'slp', + num: 0, effectType: 'Status', - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.effectType === 'Ability') { this.add('-status', target, 'slp', '[from] ability: ' + sourceEffect.name, '[of] ' + source); } else { @@ -53,7 +63,7 @@ exports.BattleStatuses = { this.effectData.time = this.effectData.startTime; }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (pokemon.hasAbility('earlybird')) { pokemon.statusData.time--; } @@ -70,49 +80,48 @@ exports.BattleStatuses = { }, }, frz: { + name: 'frz', + id: 'frz', + num: 0, effectType: 'Status', - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.effectType === 'Ability') { this.add('-status', target, 'frz', '[from] ability: ' + sourceEffect.name, '[of] ' + source); } else { this.add('-status', target, 'frz'); } if (target.template.species === 'Shaymin-Sky' && target.baseTemplate.baseSpecies === 'Shaymin') { - let template = this.getTemplate('Shaymin'); - target.formeChange(template); - target.baseTemplate = template; - target.setAbility(template.abilities['0']); - target.baseAbility = target.ability; - target.details = template.species + (target.level === 100 ? '' : ', L' + target.level) + (target.gender === '' ? '' : ', ' + target.gender) + (target.set.shiny ? ', shiny' : ''); - this.add('detailschange', target, target.details); - this.add('-formechange', target, 'Shaymin', '[msg]'); + target.formeChange('Shaymin', this.effect, true); } }, onBeforeMovePriority: 10, - onBeforeMove: function (pokemon, target, move) { + onBeforeMove(pokemon, target, move) { if (move.flags['defrost']) return; - if (this.random(5) === 0) { + if (this.randomChance(1, 5)) { pokemon.cureStatus(); return; } this.add('cant', pokemon, 'frz'); return false; }, - onModifyMove: function (move, pokemon) { + onModifyMove(move, pokemon) { if (move.flags['defrost']) { this.add('-curestatus', pokemon, 'frz', '[from] move: ' + move); pokemon.setStatus(''); } }, - onHit: function (target, source, move) { + onHit(target, source, move) { if (move.thawsTarget || move.type === 'Fire' && move.category !== 'Status') { target.cureStatus(); } }, }, psn: { + name: 'psn', + id: 'psn', + num: 0, effectType: 'Status', - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.effectType === 'Ability') { this.add('-status', target, 'psn', '[from] ability: ' + sourceEffect.name, '[of] ' + source); } else { @@ -120,13 +129,16 @@ exports.BattleStatuses = { } }, onResidualOrder: 9, - onResidual: function (pokemon) { + onResidual(pokemon) { this.damage(pokemon.maxhp / 8); }, }, tox: { + name: 'tox', + id: 'tox', + num: 0, effectType: 'Status', - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { this.effectData.stage = 0; if (sourceEffect && sourceEffect.id === 'toxicorb') { this.add('-status', target, 'tox', '[from] item: Toxic Orb'); @@ -136,11 +148,11 @@ exports.BattleStatuses = { this.add('-status', target, 'tox'); } }, - onSwitchIn: function () { + onSwitchIn() { this.effectData.stage = 0; }, onResidualOrder: 9, - onResidual: function (pokemon) { + onResidual(pokemon) { if (this.effectData.stage < 15) { this.effectData.stage++; } @@ -148,8 +160,11 @@ exports.BattleStatuses = { }, }, confusion: { + name: 'confusion', + id: 'confusion', + num: 0, // this is a volatile status - onStart: function (target, source, sourceEffect) { + onStart(target, source, sourceEffect) { if (sourceEffect && sourceEffect.id === 'lockedmove') { this.add('-start', target, 'confusion', '[fatigue]'); } else { @@ -157,33 +172,38 @@ exports.BattleStatuses = { } this.effectData.time = this.random(2, 6); }, - onEnd: function (target) { + onEnd(target) { this.add('-end', target, 'confusion'); }, onBeforeMovePriority: 3, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { pokemon.volatiles.confusion.time--; if (!pokemon.volatiles.confusion.time) { pokemon.removeVolatile('confusion'); return; } this.add('-activate', pokemon, 'confusion'); - if (this.random(3) > 0) { + if (!this.randomChance(1, 3)) { return; } this.activeTarget = pokemon; - this.damage(this.getDamage(pokemon, pokemon, 40), pokemon, pokemon, { + let damage = this.getDamage(pokemon, pokemon, 40); + if (typeof damage !== 'number') throw new Error("Confusion damage not dealt"); + this.damage(damage, pokemon, pokemon, /** @type {ActiveMove} */ ({ id: 'confused', effectType: 'Move', type: '???', - }); + })); return false; }, }, flinch: { + name: 'flinch', + id: 'flinch', + num: 0, duration: 1, onBeforeMovePriority: 8, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { if (!this.runEvent('Flinch', pokemon)) { return; } @@ -192,30 +212,40 @@ exports.BattleStatuses = { }, }, trapped: { + name: 'trapped', + id: 'trapped', + num: 0, noCopy: true, - onTrapPokemon: function (pokemon) { + onTrapPokemon(pokemon) { pokemon.tryTrap(); }, - onStart: function (target) { + onStart(target) { this.add('-activate', target, 'trapped'); }, }, trapper: { + name: 'trapper', + id: 'trapper', + num: 0, noCopy: true, }, partiallytrapped: { + name: 'partiallytrapped', + id: 'partiallytrapped', + num: 0, duration: 5, - durationCallback: function (target, source) { - if (source.hasItem('gripclaw')) return 8; + durationCallback(target, source) { + if (source && source.hasItem('gripclaw')) return 8; return this.random(5, 7); }, - onStart: function (pokemon, source) { + onStart(pokemon, source) { this.add('-activate', pokemon, 'move: ' + this.effectData.sourceEffect, '[of] ' + source); }, onResidualOrder: 11, - onResidual: function (pokemon) { + onResidual(pokemon) { if (this.effectData.source && (!this.effectData.source.isActive || this.effectData.source.hp <= 0 || !this.effectData.source.activeTurns)) { delete pokemon.volatiles['partiallytrapped']; + this.add('-end', pokemon, this.effectData.sourceEffect, '[partiallytrapped]', '[silent]'); return; } if (this.effectData.source.hasItem('bindingband')) { @@ -224,78 +254,88 @@ exports.BattleStatuses = { this.damage(pokemon.maxhp / 8); } }, - onEnd: function (pokemon) { + onEnd(pokemon) { this.add('-end', pokemon, this.effectData.sourceEffect, '[partiallytrapped]'); }, - onTrapPokemon: function (pokemon) { + onTrapPokemon(pokemon) { if (this.effectData.source && this.effectData.source.isActive) pokemon.tryTrap(); }, }, lockedmove: { // Outrage, Thrash, Petal Dance... + name: 'lockedmove', + id: 'lockedmove', + num: 0, duration: 2, - onResidual: function (target) { + onResidual(target) { if (target.status === 'slp') { // don't lock, and bypass confusion for calming delete target.volatiles['lockedmove']; } this.effectData.trueDuration--; }, - onStart: function (target, source, effect) { + onStart(target, source, effect) { this.effectData.trueDuration = this.random(2, 4); this.effectData.move = effect.id; }, - onRestart: function () { + onRestart() { if (this.effectData.trueDuration >= 2) { this.effectData.duration = 2; } }, - onEnd: function (target) { + onEnd(target) { if (this.effectData.trueDuration > 1) return; target.addVolatile('confusion'); }, - onLockMove: function (pokemon) { + onLockMove(pokemon) { return this.effectData.move; }, }, twoturnmove: { // Skull Bash, SolarBeam, Sky Drop... + name: 'twoturnmove', + id: 'twoturnmove', + num: 0, duration: 2, - onStart: function (target, source, effect) { + onStart(target, source, effect) { this.effectData.move = effect.id; - // source and target are reversed since the event target is the - // pokemon using the two-turn move - this.effectData.targetLoc = this.getTargetLoc(source, target); target.addVolatile(effect.id, source); + this.attrLastMove('[still]'); }, - onEnd: function (target) { + onEnd(target) { target.removeVolatile(this.effectData.move); }, - onLockMove: function () { + onLockMove() { return this.effectData.move; }, - onLockMoveTarget: function () { - return this.effectData.targetLoc; - }, - onMoveAborted: function (pokemon) { + onMoveAborted(pokemon) { pokemon.removeVolatile('twoturnmove'); }, }, choicelock: { - onStart: function (pokemon) { - if (!this.activeMove.id || this.activeMove.sourceEffect && this.activeMove.sourceEffect !== this.activeMove.id) return false; + name: 'choicelock', + id: 'choicelock', + num: 0, + noCopy: true, + onStart(pokemon) { + if (!this.activeMove) throw new Error("Battle.activeMove is null"); + if (!this.activeMove.id || this.activeMove.hasBounced) return false; this.effectData.move = this.activeMove.id; }, - onBeforeMove: function (pokemon, target, move) { - if (move.id !== this.effectData.move && move.id !== 'struggle') { - // Fails even if the Choice item is being ignored, and no PP is lost + onBeforeMove(pokemon, target, move) { + if (!pokemon.getItem().isChoice) { + pokemon.removeVolatile('choicelock'); + return; + } + if (!pokemon.ignoringItem() && move.id !== this.effectData.move && move.id !== 'struggle') { + // Fails unless the Choice item is being ignored, and no PP is lost this.addMove('move', pokemon, move.name); this.attrLastMove('[still]'); this.add('-fail', pokemon); return false; } }, - onDisableMove: function (pokemon) { + onDisableMove(pokemon) { if (!pokemon.getItem().isChoice || !pokemon.hasMove(this.effectData.move)) { pokemon.removeVolatile('choicelock'); return; @@ -303,39 +343,45 @@ exports.BattleStatuses = { if (pokemon.ignoringItem()) { return; } - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id !== this.effectData.move) { - pokemon.disableMove(moves[i].id, false, this.effectData.sourceEffect); + for (const moveSlot of pokemon.moveSlots) { + if (moveSlot.id !== this.effectData.move) { + pokemon.disableMove(moveSlot.id, false, this.effectData.sourceEffect); } } }, }, mustrecharge: { + name: 'mustrecharge', + id: 'mustrecharge', + num: 0, duration: 2, onBeforeMovePriority: 11, - onBeforeMove: function (pokemon) { + onBeforeMove(pokemon) { this.add('cant', pokemon, 'recharge'); pokemon.removeVolatile('mustrecharge'); - return false; + pokemon.removeVolatile('truant'); + return null; }, - onLockMove: function (pokemon) { + onLockMove(pokemon) { this.add('-mustrecharge', pokemon); return 'recharge'; }, }, futuremove: { // this is a side condition - onStart: function (side) { + name: 'futuremove', + id: 'futuremove', + num: 0, + onStart(side) { this.effectData.positions = []; for (let i = 0; i < side.active.length; i++) { this.effectData.positions[i] = null; } }, onResidualOrder: 3, - onResidual: function (side) { + onResidual(side) { let finished = true; - for (let i = 0; i < side.active.length; i++) { + for (const [i, target] of side.active.entries()) { let posData = this.effectData.positions[i]; if (!posData) continue; @@ -347,10 +393,9 @@ exports.BattleStatuses = { } // time's up; time to hit! :D - let target = side.active[i]; - let move = this.getMove(posData.move); - if (target.fainted) { - this.add('-hint', '' + move.name + ' did not hit because the target is fainted.'); + const move = this.getMove(posData.move); + if (target.fainted || target === posData.source) { + this.add('-hint', '' + move.name + ' did not hit because the target is ' + (target.fainted ? 'fainted' : 'the user') + '.'); this.effectData.positions[i] = null; continue; } @@ -362,8 +407,15 @@ exports.BattleStatuses = { if (posData.source.hasAbility('infiltrator') && this.gen >= 6) { posData.moveData.infiltrates = true; } + if (posData.source.hasAbility('normalize') && this.gen >= 6) { + posData.moveData.type = 'Normal'; + } + if (posData.source.hasAbility('adaptability') && this.gen >= 6) { + posData.moveData.stab = 2; + } + const hitMove = new this.Data.Move(posData.moveData); - this.tryMoveHit(target, posData.source, posData.moveData); + this.tryMoveHit(target, posData.source, hitMove); this.effectData.positions[i] = null; } @@ -374,13 +426,16 @@ exports.BattleStatuses = { }, healreplacement: { // this is a side condition - onStart: function (side, source, sourceEffect) { + name: 'healreplacement', + id: 'healreplacement', + num: 0, + onStart(side, source, sourceEffect) { this.effectData.position = source.position; this.effectData.sourceEffect = sourceEffect; this.add('-activate', source, 'healreplacement'); }, onSwitchInPriority: 1, - onSwitchIn: function (target) { + onSwitchIn(target) { if (!target.fainted && target.position === this.effectData.position) { target.heal(target.maxhp); this.add('-heal', target, target.getHealth, '[from] move: ' + this.effectData.sourceEffect, '[zeffect]'); @@ -390,19 +445,25 @@ exports.BattleStatuses = { }, stall: { // Protect, Detect, Endure counter + name: 'stall', + id: 'stall', + num: 0, duration: 2, counterMax: 729, - onStart: function () { + onStart() { this.effectData.counter = 3; }, - onStallMove: function () { + onStallMove(pokemon) { // this.effectData.counter should never be undefined here. // However, just in case, use 1 if it is undefined. let counter = this.effectData.counter || 1; this.debug("Success chance: " + Math.round(100 / counter) + "%"); - return (this.random(counter) === 0); + let success = this.randomChance(1, counter); + if (!success) delete pokemon.volatiles['stall']; + return success; }, - onRestart: function () { + onRestart() { + // @ts-ignore if (this.effectData.counter < this.effect.counterMax) { this.effectData.counter *= 3; } @@ -410,39 +471,32 @@ exports.BattleStatuses = { }, }, gem: { + name: 'gem', + id: 'gem', + num: 0, duration: 1, affectsFainted: true, - onBasePower: function (basePower, user, target, move) { + onBasePower(basePower, user, target, move) { this.debug('Gem Boost'); return this.chainModify([0x14CD, 0x1000]); }, }, - aura: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower, user, target, move) { - let modifier = 0x1547; - this.debug('Aura Boost'); - if (user.volatiles['aurabreak']) { - modifier = 0x0C00; - this.debug('Aura Boost reverted by Aura Break'); - } - return this.chainModify([modifier, 0x1000]); - }, - }, // weather is implemented here since it's so important to the game raindance: { + name: 'RainDance', + id: 'raindance', + num: 0, effectType: 'Weather', duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('damprock')) { return 8; } return 5; }, - onWeatherModifyDamage: function (damage, attacker, defender, move) { + onWeatherModifyDamage(damage, attacker, defender, move) { if (move.type === 'Water') { this.debug('rain water boost'); return this.chainModify(1.5); @@ -452,7 +506,7 @@ exports.BattleStatuses = { return this.chainModify(0.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { if (this.gen <= 5) this.effectData.duration = 0; this.add('-weather', 'RainDance', '[from] ability: ' + effect, '[of] ' + source); @@ -461,52 +515,60 @@ exports.BattleStatuses = { } }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'RainDance', '[upkeep]'); this.eachEvent('Weather'); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, primordialsea: { + name: 'PrimordialSea', + id: 'primordialsea', + num: 0, effectType: 'Weather', duration: 0, - onTryMove: function (target, source, effect) { - if (effect.type === 'Fire' && effect.category !== 'Status') { + onTryMovePriority: 1, + onTryMove(attacker, defender, move) { + if (move.type === 'Fire' && move.category !== 'Status') { this.debug('Primordial Sea fire suppress'); - this.add('-fail', source, effect, '[from] Primordial Sea'); + this.add('-fail', attacker, move, '[from] Primordial Sea'); + this.attrLastMove('[still]'); return null; } }, - onWeatherModifyDamage: function (damage, attacker, defender, move) { + onWeatherModifyDamage(damage, attacker, defender, move) { if (move.type === 'Water') { this.debug('Rain water boost'); return this.chainModify(1.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { this.add('-weather', 'PrimordialSea', '[from] ability: ' + effect, '[of] ' + source); }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'PrimordialSea', '[upkeep]'); this.eachEvent('Weather'); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, sunnyday: { + name: 'SunnyDay', + id: 'sunnyday', + num: 0, effectType: 'Weather', duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('heatrock')) { return 8; } return 5; }, - onWeatherModifyDamage: function (damage, attacker, defender, move) { + onWeatherModifyDamage(damage, attacker, defender, move) { if (move.type === 'Fire') { this.debug('Sunny Day fire boost'); return this.chainModify(1.5); @@ -516,7 +578,7 @@ exports.BattleStatuses = { return this.chainModify(0.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { if (this.gen <= 5) this.effectData.duration = 0; this.add('-weather', 'SunnyDay', '[from] ability: ' + effect, '[of] ' + source); @@ -524,53 +586,61 @@ exports.BattleStatuses = { this.add('-weather', 'SunnyDay'); } }, - onImmunity: function (type) { + onImmunity(type) { if (type === 'frz') return false; }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'SunnyDay', '[upkeep]'); this.eachEvent('Weather'); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, desolateland: { + name: 'DesolateLand', + id: 'desolateland', + num: 0, effectType: 'Weather', duration: 0, - onTryMove: function (target, source, effect) { - if (effect.type === 'Water' && effect.category !== 'Status') { + onTryMovePriority: 1, + onTryMove(attacker, defender, move) { + if (move.type === 'Water' && move.category !== 'Status') { this.debug('Desolate Land water suppress'); - this.add('-fail', source, effect, '[from] Desolate Land'); + this.add('-fail', attacker, move, '[from] Desolate Land'); + this.attrLastMove('[still]'); return null; } }, - onWeatherModifyDamage: function (damage, attacker, defender, move) { + onWeatherModifyDamage(damage, attacker, defender, move) { if (move.type === 'Fire') { this.debug('Sunny Day fire boost'); return this.chainModify(1.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { this.add('-weather', 'DesolateLand', '[from] ability: ' + effect, '[of] ' + source); }, - onImmunity: function (type) { + onImmunity(type) { if (type === 'frz') return false; }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'DesolateLand', '[upkeep]'); this.eachEvent('Weather'); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, sandstorm: { + name: 'Sandstorm', + id: 'sandstorm', + num: 0, effectType: 'Weather', duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('smoothrock')) { return 8; } @@ -579,12 +649,12 @@ exports.BattleStatuses = { // This should be applied directly to the stat before any of the other modifiers are chained // So we give it increased priority. onModifySpDPriority: 10, - onModifySpD: function (spd, pokemon) { + onModifySpD(spd, pokemon) { if (pokemon.hasType('Rock') && this.isWeather('sandstorm')) { return this.modify(spd, 1.5); } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { if (this.gen <= 5) this.effectData.duration = 0; this.add('-weather', 'Sandstorm', '[from] ability: ' + effect, '[of] ' + source); @@ -593,27 +663,30 @@ exports.BattleStatuses = { } }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'Sandstorm', '[upkeep]'); if (this.isWeather('sandstorm')) this.eachEvent('Weather'); }, - onWeather: function (target) { + onWeather(target) { this.damage(target.maxhp / 16); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, hail: { + name: 'Hail', + id: 'hail', + num: 0, effectType: 'Weather', duration: 5, - durationCallback: function (source, effect) { + durationCallback(source, effect) { if (source && source.hasItem('icyrock')) { return 8; } return 5; }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { if (effect && effect.effectType === 'Ability') { if (this.gen <= 5) this.effectData.duration = 0; this.add('-weather', 'Hail', '[from] ability: ' + effect, '[of] ' + source); @@ -622,35 +695,38 @@ exports.BattleStatuses = { } }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'Hail', '[upkeep]'); if (this.isWeather('hail')) this.eachEvent('Weather'); }, - onWeather: function (target) { + onWeather(target) { this.damage(target.maxhp / 16); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, deltastream: { + name: 'DeltaStream', + id: 'deltastream', + num: 0, effectType: 'Weather', duration: 0, - onEffectiveness: function (typeMod, target, type, move) { + onEffectiveness(typeMod, target, type, move) { if (move && move.effectType === 'Move' && type === 'Flying' && typeMod > 0) { this.add('-activate', '', 'deltastream'); return 0; } }, - onStart: function (battle, source, effect) { + onStart(battle, source, effect) { this.add('-weather', 'DeltaStream', '[from] ability: ' + effect, '[of] ' + source); }, onResidualOrder: 1, - onResidual: function () { + onResidual() { this.add('-weather', 'DeltaStream', '[upkeep]'); this.eachEvent('Weather'); }, - onEnd: function () { + onEnd() { this.add('-weather', 'none'); }, }, @@ -660,31 +736,43 @@ exports.BattleStatuses = { // Multitype and RKS System, respectively, that changes their type, // but their formes are specified to be their corresponding type // in the Pokedex, so that needs to be overridden. - // This is mainly relevant for Hackmons and Balanced Hackmons. + // This is mainly relevant for Hackmons Cup and Balanced Hackmons. arceus: { - onSwitchInPriority: 101, - onSwitchIn: function (pokemon) { + name: 'Arceus', + id: 'arceus', + num: 493, + onTypePriority: 1, + onType(types, pokemon) { + if (pokemon.transformed) return types; + /** @type {string | undefined} */ let type = 'Normal'; if (pokemon.ability === 'multitype') { type = pokemon.getItem().onPlate; - if (!type || type === true) { + if (!type) { type = 'Normal'; } } - pokemon.setType(type, true); + return [type]; }, }, silvally: { - onSwitchInPriority: 101, - onSwitchIn: function (pokemon) { + name: 'Silvally', + id: 'silvally', + num: 773, + onTypePriority: 1, + onType(types, pokemon) { + if (pokemon.transformed) return types; + /** @type {string | undefined} */ let type = 'Normal'; if (pokemon.ability === 'rkssystem') { type = pokemon.getItem().onMemory; - if (!type || type === true) { + if (!type) { type = 'Normal'; } } - pokemon.setType(type, true); + return [type]; }, }, }; + +exports.BattleStatuses = BattleStatuses; diff --git a/data/typechart.js b/data/typechart.js index cc899f7ac375d..86e1256a228ca 100644 --- a/data/typechart.js +++ b/data/typechart.js @@ -1,6 +1,7 @@ 'use strict'; -exports.BattleTypeChart = { +/**@type {{[k: string]: TypeData}} */ +let BattleTypeChart = { "Bug": { damageTaken: { "Bug": 0, @@ -22,8 +23,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 0, }, - HPivs: {"atk":30, "def":30, "spd":30}, - HPdvs: {"atk":13, "def":13}, + HPivs: {"atk": 30, "def": 30, "spd": 30}, + HPdvs: {"atk": 13, "def": 13}, }, "Dark": { damageTaken: { @@ -70,8 +71,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 2, }, - HPivs: {"atk":30}, - HPdvs: {"def":14}, + HPivs: {"atk": 30}, + HPdvs: {"def": 14}, }, "Electric": { damageTaken: { @@ -95,8 +96,8 @@ exports.BattleTypeChart = { "Steel": 2, "Water": 0, }, - HPivs: {"spa":30}, - HPdvs: {"atk":14}, + HPivs: {"spa": 30}, + HPdvs: {"atk": 14}, }, "Fairy": { damageTaken: { @@ -141,8 +142,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 0, }, - HPivs: {"def":30, "spa":30, "spd":30, "spe":30}, - HPdvs: {"atk":12, "def":12}, + HPivs: {"def": 30, "spa": 30, "spd": 30, "spe": 30}, + HPdvs: {"atk": 12, "def": 12}, }, "Fire": { damageTaken: { @@ -166,8 +167,8 @@ exports.BattleTypeChart = { "Steel": 2, "Water": 1, }, - HPivs: {"atk":30, "spa":30, "spe":30}, - HPdvs: {"atk":14, "def":12}, + HPivs: {"atk": 30, "spa": 30, "spe": 30}, + HPdvs: {"atk": 14, "def": 12}, }, "Flying": { damageTaken: { @@ -190,8 +191,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 0, }, - HPivs: {"hp":30, "atk":30, "def":30, "spa":30, "spd":30}, - HPdvs: {"atk":12, "def":13}, + HPivs: {"hp": 30, "atk": 30, "def": 30, "spa": 30, "spd": 30}, + HPdvs: {"atk": 12, "def": 13}, }, "Ghost": { damageTaken: { @@ -215,8 +216,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 0, }, - HPivs: {"def":30, "spd":30}, - HPdvs: {"atk":13, "def":14}, + HPivs: {"def": 30, "spd": 30}, + HPdvs: {"atk": 13, "def": 14}, }, "Grass": { damageTaken: { @@ -240,8 +241,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 2, }, - HPivs: {"atk":30, "spa":30}, - HPdvs: {"atk":14, "def":14}, + HPivs: {"atk": 30, "spa": 30}, + HPdvs: {"atk": 14, "def": 14}, }, "Ground": { damageTaken: { @@ -265,8 +266,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 1, }, - HPivs: {"spa":30, "spd":30}, - HPdvs: {"atk":12}, + HPivs: {"spa": 30, "spd": 30}, + HPdvs: {"atk": 12}, }, "Ice": { damageTaken: { @@ -291,8 +292,8 @@ exports.BattleTypeChart = { "Steel": 1, "Water": 0, }, - HPivs: {"atk":30, "def":30}, - HPdvs: {"def":13}, + HPivs: {"atk": 30, "def": 30}, + HPdvs: {"def": 13}, }, "Normal": { damageTaken: { @@ -339,8 +340,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 0, }, - HPivs: {"def":30, "spa":30, "spd":30}, - HPdvs: {"atk":12, "def":14}, + HPivs: {"def": 30, "spa": 30, "spd": 30}, + HPdvs: {"atk": 12, "def": 14}, }, "Psychic": { damageTaken: { @@ -363,8 +364,8 @@ exports.BattleTypeChart = { "Steel": 0, "Water": 0, }, - HPivs: {"atk":30, "spe":30}, - HPdvs: {"def":12}, + HPivs: {"atk": 30, "spe": 30}, + HPdvs: {"def": 12}, }, "Rock": { damageTaken: { @@ -388,8 +389,8 @@ exports.BattleTypeChart = { "Steel": 1, "Water": 1, }, - HPivs: {"def":30, "spd":30, "spe":30}, - HPdvs: {"atk":13, "def":12}, + HPivs: {"def": 30, "spd": 30, "spe": 30}, + HPdvs: {"atk": 13, "def": 12}, }, "Steel": { damageTaken: { @@ -415,8 +416,8 @@ exports.BattleTypeChart = { "Steel": 2, "Water": 0, }, - HPivs: {"spd":30}, - HPdvs: {"atk":13}, + HPivs: {"spd": 30}, + HPdvs: {"atk": 13}, }, "Water": { damageTaken: { @@ -439,7 +440,9 @@ exports.BattleTypeChart = { "Steel": 2, "Water": 2, }, - HPivs: {"atk":30, "def":30, "spa":30}, - HPdvs: {"atk":14, "def":13}, + HPivs: {"atk": 30, "def": 30, "spa": 30}, + HPdvs: {"atk": 14, "def": 13}, }, }; + +exports.BattleTypeChart = BattleTypeChart; diff --git a/dev-tools/eslint/validate-conditionals.js b/dev-tools/eslint/validate-conditionals.js deleted file mode 100644 index 6ded14300c7f1..0000000000000 --- a/dev-tools/eslint/validate-conditionals.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * Enforces Pokémon Showdown code style for conditionals - * - * Reliant on specific active settings for ESLint's rule "Require Following Curly Brace Conventions" (curly) - * curly: [2, "multi-line", "consistent"] - * - * ##### Valid - * - * ```js - * if (console.log) { - * console.log("Test"); - * } - * - * if (console.log) { - * console.log("Test"); - * } else { - * throw new Error("Error"); - * } - * - * if (console.log) { - * console.log("Test"); - * } else { - * 0; - * } - * - * if (console.log) { - * console.log("Test"); - * } else if (Number.isFinite) { - * Number.isFinite(42); - * } - * - * if (Math.random) Math.random(); - * - * if (a == 1) // Do something with this magic number - * ``` - * - * ##### Invalid - * - * ```js - * if (console.log) { - * console.log("Test"); - * } else if (Number.isFinite) Number.isFinite(); - * - * if (Math.random) { - * Math.random(); - * } else {Number.isFinite()}; - * - * if (Math.random) { - * Math.random(); - * } else if (Number.isFinite) {Number.isFinite()}; - * - * if (Math.random) Math.random(); - * else { - * Number.isFinite(); - * } - * - * if (Math.random) Math.random(); else Number.isFinite(); - * - * if (Math.random) Math.random(); - * else Number.isFinite(); - * - * if (Math.random) Math.random(); - * else if (Number.isFinite) Number.isFinite(); - * else Number.isInteger(); - * - * if (Math.random) - * Math.random(); - * - * ``` - */ - -'use strict'; - -module.exports = function (context) { - return { - "IfStatement": function (node) { - if (!node.alternate) return; - if (node.consequent.loc.end.line > node.consequent.loc.start.line) return; - if (node.consequent.loc.end.line >= node.alternate.loc.start.line - 1) { - context.report({ - node: node.alternate, - message: "Nested conditional must span across multiple lines.", - }); - } - }, - }; -}; - -module.exports.schema = []; diff --git a/dev-tools/global.d.ts b/dev-tools/global.d.ts new file mode 100644 index 0000000000000..17a481adedbd4 --- /dev/null +++ b/dev-tools/global.d.ts @@ -0,0 +1,86 @@ +import child_process = require('child_process'); + +import {Battle as BattleType} from './../sim/battle'; +import * as BattleStreamType from './../sim/battle-stream'; +import * as DataType from './../sim/dex-data'; +import DexType = require('./../sim/dex'); +import SimType = require('./../sim/index'); +import {Pokemon as PokemonType} from './../sim/pokemon'; +import {PRNG as PRNGType, PRNGSeed as PRNGSeedType} from './../sim/prng'; +import {Side as SideType} from './../sim/side'; +import {TeamValidator as TeamValidatorType} from'./../sim/team-validator'; + +import RoomsType = require('./../server/rooms'); +import RoomlogsType = require('./../server/roomlogs'); +import LadderStoreType = require('./../server/ladders-remote'); +import LaddersType = require('./../server/ladders'); +import UsersType = require('./../server/users'); +import PunishmentsType = require('./../server/punishments'); +import ChatType = require('./../server/chat'); + +import * as StreamsType from './../lib/streams'; + +declare global { + // modules + const Dex: typeof DexType + const Punishments: typeof PunishmentsType + const Ladders: typeof LaddersType + const LadderStoreT: typeof LadderStoreType + + const WriteStream: typeof StreamsType.WriteStream + const ReadStream: typeof StreamsType.ReadStream + const ReadWriteStream: typeof StreamsType.ReadWriteStream + const ObjectWriteStream: typeof StreamsType.ObjectWriteStream + const ObjectReadStream: typeof StreamsType.ObjectReadStream + const ObjectReadWriteStream: typeof StreamsType.ObjectReadWriteStream + + type ChildProcess = child_process.ChildProcess + + // sim + type PlayerSlot = 'p1' | 'p2' + type PRNGSeed = PRNGSeedType + const Battle: BattleType + const ModdedDex: typeof DexType + const Pokemon: PokemonType + const PRNG: PRNGType + const Side: SideType + const Sim: typeof SimType + const TeamValidator: typeof TeamValidatorType + const Validator: typeof TeamValidatorType.Validator + const BattleStream: BattleStreamType.BattleStream + + // dex data + const Ability: DataType.Ability + const BasicEffect: DataType.BasicEffect + const Format: DataType.Format + const Item: DataType.Item + const Move: DataType.Move + const TypeInfo: DataType.TypeInfo + const PureEffect: DataType.PureEffect + const RuleTable: DataType.RuleTable + const Template: DataType.Template + const toId: typeof DataType.Tools.getId + const Tools: DataType.Tools + + // rooms + const GlobalRoom: typeof RoomsType.GlobalRoom + const ChatRoom: typeof RoomsType.ChatRoomTypeForTS + const GameRoom: typeof RoomsType.GameRoom + const BasicRoom: typeof RoomsType.BasicRoom + const BasicChatRoom: typeof RoomsType.ChatRoom + const RoomGame: typeof RoomsType.RoomGame + const RoomBattle: typeof RoomsType.RoomBattle + const Rooms: typeof RoomsType + const Roomlogs: typeof RoomlogsType + const Roomlog: typeof RoomlogsType.Roomlog + + // users + const Users: typeof UsersType + const User: typeof UsersType.User + const Connection: typeof UsersType.Connection + + // chat + const Chat: typeof ChatType + const CommandContext: typeof ChatType.CommandContext + const PageContext: typeof ChatType.PageContext +} diff --git a/dev-tools/globals.js b/dev-tools/globals.js deleted file mode 100644 index 5e39604e92608..0000000000000 --- a/dev-tools/globals.js +++ /dev/null @@ -1,11 +0,0 @@ -// var Dex = require('../sim/dex'); -// var Sim = require('../sim/index'); - -/** @typedef {JSONObject | JSONArray | string | number | boolean} JSONValue */ -/** @typedef {{[k: string]: JSONValue}} JSONObject */ -/** @typedef {JSONValue[]} JSONArray */ -/** @typedef {{[k: string]: any}} AnyObject */ -/** @typedef {string} ID */ - -/** @type {any} */ -// var Sim = {Battle() {}}; diff --git a/dev-tools/globals.ts b/dev-tools/globals.ts index 26038de75ccae..7b7420ddefe7a 100644 --- a/dev-tools/globals.ts +++ b/dev-tools/globals.ts @@ -1,28 +1,972 @@ +type Battle = import('./../sim/battle').Battle +type ModdedDex = typeof import('./../sim/dex') +type Pokemon = import('./../sim/pokemon').Pokemon +type Side = import('./../sim/side').Side +type Validator = import('./../sim/team-validator').Validator + +type PageTable = import('./../server/chat').PageTable +type ChatCommands = import('./../server/chat').ChatCommands +type ChatFilter = import('./../server/chat').ChatFilter +type NameFilter = import('./../server/chat').NameFilter + interface AnyObject {[k: string]: any} +type DexTable = {[key: string]: T} + +declare let Config: {[k: string]: any}; + +declare let Monitor: typeof import("../server/monitor"); + +declare let LoginServer: typeof import('../server/loginserver'); + +// type RoomBattle = AnyObject; + +declare let Verifier: typeof import('../server/verifier'); +declare let Dnsbl: typeof import('../server/dnsbl'); +declare let Sockets: typeof import('../server/sockets'); +// let TeamValidator: typeof import('../sim/team-validator'); +declare let TeamValidatorAsync: typeof import('../server/team-validator-async'); + +type GenderName = 'M' | 'F' | 'N' | ''; +type StatName = 'hp' | 'atk' | 'def' | 'spa' | 'spd' | 'spe'; +type StatsTable = {hp: number, atk: number, def: number, spa: number, spd: number, spe: number}; +type SparseStatsTable = Partial; +type BoostsTable = {atk: number, def: number, spa: number, spd: number, spe: number, accuracy: number, evasion: number}; +type SparseBoostsTable = Partial; +type PokemonSet = { + name: string, + species: string, + item: string, + ability: string, + moves: string[], + nature: string, + gender: string, + evs: StatsTable, + ivs: StatsTable, + level: number, + shiny?: boolean, + happiness?: number, + pokeball?: string, + hpType?: string, +}; + +/** + * Describes a possible way to get a move onto a pokemon. + * + * First character is a generation number, 1-7. + * Second character is a source ID, one of: + * + * - L = start or level-up, 3rd char+ is the level + * - M = TM/HM + * - T = tutor + * - E = egg + * - S = event, 3rd char+ is the index in .eventPokemon + * - D = Dream World, only 5D is valid + * - V = Virtual Console transfer, only 7V is valid + * - C = NOT A REAL SOURCE, see note, only 3C/4C is valid + * + * C marks certain moves learned by a pokemon's prevo. It's used to + * work around the chainbreeding checker's shortcuts for performance; + * it lets the pokemon be a valid father for teaching the move, but + * is otherwise ignored by the learnset checker (which will actually + * check prevos for compatibility). + */ +type MoveSource = string; + +/** + * Describes a possible way to get a pokemon. Is not exhaustive! + * sourcesBefore covers all sources that do not have exclusive + * moves (like catching wild pokemon). + * + * First character is a generation number, 1-7. + * Second character is a source ID, one of: + * + * - E = egg, 3rd char+ is the father in gen 2-5, empty in gen 6-7 + * because egg moves aren't restricted to fathers anymore + * - S = event, 3rd char+ is the index in .eventPokemon + * - D = Dream World, only 5D is valid + * - V = Virtual Console transfer, only 7V is valid + * + * Designed to match MoveSource where possible. + */ +type PokemonSource = string; + +/** + * Keeps track of how a pokemon with a given set might be obtained. + * + * `sources` is a list of possible PokemonSources, and a nonzero + * sourcesBefore means the Pokemon is compatible with all possible + * PokemonSources from that gen or earlier. + * + * `limitedEgg` tracks moves that can only be obtained from an egg with + * another father in gen 2-5. If there are multiple such moves, + * potential fathers need to be checked to see if they can actually + * learn the move combination in question. + */ +type PokemonSources = { + sources: PokemonSource[] + sourcesBefore: number + babyOnly?: string + sketchMove?: string + hm?: string + restrictiveMoves?: string[] + limitedEgg?: (string | 'self')[] + isHidden?: boolean + fastCheck?: true +} + +type EventInfo = { + generation: number, + level?: number, + shiny?: boolean | 1, + gender?: GenderName, + nature?: string, + ivs?: SparseStatsTable, + perfectIVs?: number, + isHidden?: boolean, + abilities?: string[], + maxEggMoves?: number, + moves?: string[], + pokeball?: string, + from?: string, +}; + +type Effect = Ability | Item | ActiveMove | Template | PureEffect | Format + +interface SelfEffect { + boosts?: SparseBoostsTable + chance?: number + sideCondition?: string + volatileStatus?: string + onHit?: EffectData["onHit"] +} + +interface SecondaryEffect { + chance?: number + ability?: Ability + boosts?: SparseBoostsTable + dustproof?: boolean + kingsrock?: boolean + self?: SelfEffect + status?: string + volatileStatus?: string + onAfterHit?: EffectData["onAfterHit"] + onHit?: EffectData["onHit"] +} + +interface EventMethods { + /** Return true to stop the move from being used */ + beforeMoveCallback?: (this: Battle, pokemon: Pokemon, target: Pokemon | null, move: ActiveMove) => boolean | void + beforeTurnCallback?: (this: Battle, pokemon: Pokemon, target: Pokemon) => void + damageCallback?: (this: Battle, pokemon: Pokemon, target: Pokemon) => number | false + durationCallback?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect | null) => number + onAfterDamage?: (this: Battle, damage: number, target: Pokemon, soruce: Pokemon, move: ActiveMove) => void + onAfterEachBoost?: (this: Battle, boost: SparseBoostsTable, target: Pokemon, source: Pokemon) => void + onAfterHit?: (this: Battle, source: Pokemon, target: Pokemon, move: ActiveMove) => void + onAfterSetStatus?: (this: Battle, status: PureEffect, target: Pokemon, source: Pokemon, effect: Effect) => void + onAfterSubDamage?: (this: Battle, damage: any, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAfterSwitchInSelf?: (this: Battle, pokemon: Pokemon) => void + onAfterUseItem?: (this: Battle, item: Item, pokemon: Pokemon) => void + onAfterBoost?: (this: Battle, boost: SparseBoostsTable, target: Pokemon, source: Pokemon, effect: Effect) => void + onAfterMoveSecondarySelf?: (this: Battle, source: Pokemon, target: Pokemon, move: ActiveMove) => void + onAfterMoveSecondary?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAfterMove?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onAfterMoveSelf?: (this: Battle, pokemon: Pokemon) => void + onAllyTryAddVolatile?: (this: Battle, status: PureEffect, target: Pokemon, source: Pokemon, effect: Effect) => void + onAllyBasePower?: (this: Battle, basePower: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => void + onAllyModifyAtk?: (this: Battle, atk: number) => void + onAllyModifySpD?: (this: Battle, spd: number) => void + onAllyBoost?: (this: Battle, boost: SparseBoostsTable, target: Pokemon, source: Pokemon, effect: Effect) => void + onAllySetStatus?: (this: Battle, status: PureEffect, target: Pokemon, source: Pokemon, effect: Effect) => void + onAllyTryHitSide?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAllyFaint?: (this: Battle, target: Pokemon) => void + onAllyAfterUseItem?: (this: Battle, item: Item, pokemon: Pokemon) => void + onAllyModifyMove?: (this: Battle, move: ActiveMove) => void + onAnyTryPrimaryHit?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAnyTryMove?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAnyDamage?: (this: Battle, damage: number, target: Pokemon, source: Pokemon, effect: Effect) => void + onAnyBasePower?: (this: Battle, basePower: number, source: Pokemon, target: Pokemon, move: ActiveMove) => void + onAnySetWeather?: (this: Battle, target: Pokemon, source: Pokemon, weather: PureEffect) => void + onAnyTerrainStart?: (this: Battle) => void + onAnyModifyDamage?: (this: Battle, damage: number, source: Pokemon, target: Pokemon, move: ActiveMove) => void + onAnyRedirectTarget?: (this: Battle, target: Pokemon, source: Pokemon, source2: Pokemon, move: ActiveMove) => void + onAnyAccuracy?: (this: Battle, accuracy: number, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAnyTryImmunity?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onAnyFaint?: (this: Battle) => void + onAnyModifyBoost?: (this: Battle, boosts: SparseBoostsTable, target: Pokemon) => void + onAnyDragOut?: (this: Battle, pokemon: Pokemon) => void + onAnySetStatus?: (this: Battle, status: PureEffect, pokemon: Pokemon) => void + onAttract?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect) => void + onAccuracy?: (this: Battle, accuracy: number, target: Pokemon, source: Pokemon, move: ActiveMove) => number | boolean | null | void + onBasePower?: (this: Battle, basePower: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onTryImmunity?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onBeforeFaint?: (this: Battle, pokemon: Pokemon) => void + onBeforeMove?: (this: Battle, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => void + onBeforeSwitchIn?: (this: Battle, pokemon: Pokemon) => void + onBeforeSwitchOut?: (this: Battle, pokemon: Pokemon) => void + onBeforeTurn?: (this: Battle, pokemon: Pokemon) => void + onBoost?: (this: Battle, boost: SparseBoostsTable, target: Pokemon, source: Pokemon, effect: Effect) => void + onChargeMove?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onCheckShow?: (this: Battle, pokemon: Pokemon) => void + onCopy?: (this: Battle, pokemon: Pokemon) => void + onDamage?: (this: Battle, damage: number, target: Pokemon, source: Pokemon, effect: Effect) => void + onDeductPP?: (this: Battle, target: Pokemon, source: Pokemon) => number | void + onDisableMove?: (this: Battle, pokemon: Pokemon) => void + onDragOut?: (this: Battle, pokemon: Pokemon) => void + onEat?: ((this: Battle, pokemon: Pokemon) => void) | false + onEatItem?: (this: Battle, item: Item, pokemon: Pokemon) => void + onEffectiveness?: (this: Battle, typeMod: number, target: Pokemon | null, type: string, move: ActiveMove) => void + onEnd?: (this: Battle, pokemon: Pokemon & Side) => void + onFaint?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect) => void + onFlinch?: ((this: Battle, pokemon: Pokemon) => void) | boolean + onFoeAfterDamage?: (this: Battle, damage: number, target: Pokemon) => void + onFoeBasePower?: (this: Battle, basePower: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => void + onFoeBeforeMove?: (this: Battle, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => void + onFoeDisableMove?: (this: Battle, pokemon: Pokemon) => void + onFoeMaybeTrapPokemon?: (this: Battle, pokemon: Pokemon, source: Pokemon) => void + onFoeModifyDef?: (this: Battle, def: number, pokemon: Pokemon) => number + onFoeRedirectTarget?: (this: Battle, target: Pokemon, source: Pokemon, source2: Effect, move: ActiveMove) => void + onFoeSwitchOut?: (this: Battle, pokemon: Pokemon) => void + onFoeTrapPokemon?: (this: Battle, pokemon: Pokemon) => void + onFoeTryMove?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onHit?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onHitField?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => boolean | void + onHitSide?: (this: Battle, side: Side, source: Pokemon, move: ActiveMove) => void + onImmunity?: (this: Battle, type: string, pokemon: Pokemon) => void + onLockMove?: string | ((this: Battle, pokemon: Pokemon) => void) + onLockMoveTarget?: (this: Battle) => number + onModifyAccuracy?: (this: Battle, accuracy: number, target: Pokemon, source: Pokemon, move: ActiveMove) => number | void + onModifyAtk?: (this: Battle, atk: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => number | void + onModifyBoost?: (this: Battle, boosts: SparseBoostsTable) => void + onModifyCritRatio?: (this: Battle, critRatio: number, source: Pokemon, target: Pokemon) => number | void + onModifyDamage?: (this: Battle, damage: number, source: Pokemon, target: Pokemon, move: ActiveMove) => number | void + onModifyDef?: (this: Battle, def: number, pokemon: Pokemon) => number | void + onModifyMove?: (this: Battle, move: ActiveMove, pokemon: Pokemon, target: Pokemon) => void + onModifyPriority?: (this: Battle, priority: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => number | void + onModifySecondaries?: (this: Battle, secondaries: SecondaryEffect[], target: Pokemon, source: Pokemon, move: ActiveMove) => void + onModifySpA?: (this: Battle, atk: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => number | void + onModifySpD?: (this: Battle, spd: number, pokemon: Pokemon) => number | void + onModifySpe?: (this: Battle, spe: number, pokemon: Pokemon) => number | void + onModifyWeight?: (this: Battle, weight: number, pokemon: Pokemon) => number | void + onMoveAborted?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onMoveFail?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onNegateImmunity?: ((this: Battle, pokemon: Pokemon, type: string) => void) | boolean + onOverrideAction?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onPrepareHit?: (this: Battle, source: Pokemon, target: Pokemon, move: ActiveMove) => void + onPreStart?: (this: Battle, pokemon: Pokemon) => void + onPrimal?: (this: Battle, pokemon: Pokemon) => void + onRedirectTarget?: (this: Battle, target: Pokemon, source: Pokemon, source2: Effect) => void + onResidual?: (this: Battle, target: Pokemon & Side, source: Pokemon, effect: Effect) => void + onRestart?: (this: Battle, pokemon: Pokemon, source: Pokemon) => void + onSetAbility?: (this: Battle, ability: string, target: Pokemon, source: Pokemon, effect: Effect) => void + onSetStatus?: (this: Battle, status: PureEffect, target: Pokemon, source: Pokemon, effect: Effect) => void + onSourceAccuracy?: (this: Battle, accuracy: number, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onSourceBasePower?: (this: Battle, basePower: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => void + onSourceFaint?: (this: Battle, target: Pokemon, source: Pokemon, effect: Effect) => void + onSourceHit?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onSourceModifyAccuracy?: (this: Battle, accuracy: number, target: Pokemon, source: Pokemon) => number | void + onSourceModifyAtk?: (this: Battle, atk: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => number | void + onSourceModifyDamage?: (this: Battle, damage: number, source: Pokemon, target: Pokemon, move: ActiveMove) => number | void + onSourceModifySecondaries?: (this: Battle, secondaries: SecondaryEffect[], target: Pokemon, source: Pokemon, move: ActiveMove) => void + onSourceModifySpA?: (this: Battle, atk: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => number | void + onSourceTryHeal?: (this: Battle, damage: number, target: Pokemon, source: Pokemon, effect: Effect) => void + onSourceTryPrimaryHit?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onStallMove?: (this: Battle, pokemon: Pokemon) => void + onStart?: (this: Battle, target: Pokemon & Side, source: Pokemon, effect: Effect, move: ActiveMove) => void + onSwitchIn?: (this: Battle, pokemon: Pokemon) => void + onSwitchOut?: (this: Battle, pokemon: Pokemon) => void + onTakeItem?: ((this: Battle, item: Item, pokemon: Pokemon, source: Pokemon) => void) | false + onTerrain?: (this: Battle, pokemon: Pokemon) => void + onTrapPokemon?: (this: Battle, pokemon: Pokemon) => void + onTry?: (this: Battle, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => void + onTryAddVolatile?: (this: Battle, status: PureEffect, target: Pokemon, source: Pokemon, effect: Effect) => void + onTryEatItem?: (this: Battle, item: Item, pokemon: Pokemon) => void + onTryHeal?: ((this: Battle, damage: number, target: Pokemon, source: Pokemon, effect: Effect) => void) | boolean + onTryHit?: ((this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void) | boolean + onTryHitField?: (this: Battle, target: Pokemon, source: Pokemon) => boolean | void + onTryHitSide?: (this: Battle, side: Side, source: Pokemon) => void + onTryMove?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onTryPrimaryHit?: (this: Battle, target: Pokemon, source: Pokemon, move: ActiveMove) => void + onType?: (this: Battle, types: string[], pokemon: Pokemon) => void + onUpdate?: (this: Battle, pokemon: Pokemon) => void + onUseMoveMessage?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => void + onWeather?: (this: Battle, target: Pokemon, source: Pokemon, effect: PureEffect) => void + onWeatherModifyDamage?: (this: Battle, damage: number, attacker: Pokemon, defender: Pokemon, move: ActiveMove) => number | void + onAnyModifyDamagePhase1?: (this: Battle, damage: number, source: Pokemon, target: Pokemon, move: ActiveMove) => number | void + onAnyModifyDamagePhase2?: EventMethods["onAnyModifyDamagePhase1"] + onModifyDamagePhase1?: EventMethods["onAnyModifyDamagePhase1"] + onModifyDamagePhase2?: EventMethods["onAnyModifyDamagePhase1"] +} + +interface EffectData extends EventMethods { + id: string + name: string + num: number + affectsFainted?: boolean + counterMax?: number + desc?: string + drain?: [number, number] + duration?: number + effect?: Partial + effectType?: string + infiltrates?: boolean + isNonstandard?: boolean | string + isUnreleased?: boolean + /** + * `true` for generic Z-moves like Gigavolt Havoc. + * Also `true` for Z-powered status moves like Z-Encore. + * Move ID of the base move, for specific Z-moves like Stoked + * Sparksurfer. + */ + isZ?: boolean | string + noCopy?: boolean + onAccuracyPriority?: number + onAfterDamageOrder?: number + onAfterMoveSecondaryPriority?: number + onAfterMoveSecondarySelfPriority?: number + onAfterMoveSelfPriority?: number + onAnyFaintPriority?: number + onAttractPriority?: number + onBasePowerPriority?: number + onBeforeMovePriority?: number + onBeforeSwitchOutPriority?: number + onBoostPriority?: number + onCriticalHit?: boolean + onDamagePriority?: number + onDragOutPriority?: number + onFoeBeforeMovePriority?: number + onFoeModifyDefPriority?: number + onFoeRedirectTargetPriority?: number + onFoeTrapPokemonPriority?: number + onFoeTryEatItem?: boolean + onHitPriority?: number + onModifyAccuracyPriority?: number + onModifyAtkPriority?: number + onModifyCritRatioPriority?: number + onModifyDefPriority?: number + onModifyMovePriority?: number + onModifyPriorityPriority?: number + onModifySpAPriority?: number + onModifySpDPriority?: number + onModifyWeightPriority?: number + onRedirectTargetPriority?: number + onResidualOrder?: number + onResidualPriority?: number + onResidualSubOrder?: number + onSwitchInPriority?: number + onTrapPokemonPriority?: number + onTryHealPriority?: number + onTryHitPriority?: number + onTryMovePriority?: number + onTryPrimaryHitPriority?: number + onTypePriority?: number + recoil?: [number, number] + secondary?: SecondaryEffect | null + secondaries?: SecondaryEffect[] | null + self?: SelfEffect | null + shortDesc?: string + status?: string + weather?: string +} + +interface ModdedEffectData extends Partial { + inherit?: boolean +} + +type EffectType = 'Effect' | 'Pokemon' | 'Move' | 'Item' | 'Ability' | 'Format' | 'Ruleset' | 'Weather' | 'Status' | 'Rule' | 'ValidatorRule' + +interface BasicEffect extends EffectData { + effectType: EffectType + exists: boolean + flags: AnyObject + fullname: string + gen: number + sourceEffect: string + toString: () => string +} + +interface PureEffect extends Readonly { + readonly effectType: 'Status' | 'Effect' | 'Weather' +} + +interface AbilityData extends EffectData { + rating: number + isUnbreakable?: boolean + suppressWeather?: boolean +} + +interface ModdedAbilityData extends Partial, ModdedEffectData {} + +interface Ability extends Readonly { + readonly effectType: 'Ability' +} + +interface FlingData { + basePower: number + status?: string + volatileStatus?: string + effect?: EventMethods["onHit"] +} + +interface ItemData extends EffectData { + gen: number + fling?: FlingData + forcedForme?: string + ignoreKlutz?: boolean + isBerry?: boolean + isChoice?: boolean + isGem?: boolean + megaStone?: string + megaEvolves?: string + naturalGift?: {basePower: number, type: string} + onDrive?: string + onMemory?: string + onPlate?: string + spritenum?: number + zMove?: string | true + zMoveFrom?: string + zMoveType?: string + zMoveUser?: string[] +} + +interface ModdedItemData extends Partial, ModdedEffectData { + onCustap?: (this: Battle, pokemon: Pokemon) => void +} + +interface Item extends Readonly { + readonly effectType: 'Item' +} + +interface MoveData extends EffectData { + accuracy: true | number + basePower: number + category: 'Physical' | 'Special' | 'Status' + flags: AnyObject + pp: number + priority: number + target: string + type: string + alwaysHit?: boolean + baseMoveType?: string + basePowerModifier?: number + boosts?: SparseBoostsTable | false + breaksProtect?: boolean + contestType?: string + critModifier?: number + critRatio?: number + damage?: number | 'level' | false | null + defensiveCategory?: 'Physical' | 'Special' | 'Status' + forceSwitch?: boolean + hasCustomRecoil?: boolean + heal?: number[] | null + ignoreAbility?: boolean + ignoreAccuracy?: boolean + ignoreDefensive?: boolean + ignoreEvasion?: boolean + ignoreImmunity?: boolean | {[k: string]: boolean} + ignoreNegativeOffensive?: boolean + ignoreOffensive?: boolean + ignorePositiveDefensive?: boolean + ignorePositiveEvasion?: boolean + isSelfHit?: boolean + isFutureMove?: boolean + isViable?: boolean + mindBlownRecoil?: boolean + multiaccuracy?: boolean + multihit?: number | number[] + multihitType?: string + noDamageVariance?: boolean + noFaint?: boolean + noMetronome?: string[] + nonGhostTarget?: string + noPPBoosts?: boolean + noSketch?: boolean + ohko?: boolean | string + pressureTarget?: string + pseudoWeather?: string + selfBoost?: {boosts?: SparseBoostsTable} + selfdestruct?: string | boolean + selfSwitch?: string | boolean + sideCondition?: string + sleepUsable?: boolean + spreadModifier?: number + stallingMove?: boolean + stealsBoosts?: boolean + struggleRecoil?: boolean + terrain?: string + thawsTarget?: boolean + useTargetOffensive?: boolean + useSourceDefensive?: boolean + volatileStatus?: string + weather?: string + willCrit?: boolean + forceSTAB?: boolean + zMovePower?: number + zMoveEffect?: string + zMoveBoost?: SparseBoostsTable + basePowerCallback?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: ActiveMove) => number | false | null +} + +interface ModdedMoveData extends Partial, ModdedEffectData {} + +interface Move extends Readonly { + readonly effectType: 'Move' +} + +interface ActiveMove extends BasicEffect, MoveData { + readonly effectType: 'Move' + typeMod: number + hit: number + ability?: Ability + aerilateBoosted?: boolean + allies?: Pokemon[] + auraBooster?: Pokemon + causedCrashDamage?: boolean + crit?: boolean + forceStatus?: string + galvanizeBoosted?: boolean + hasAuraBreak?: boolean + hasBounced?: boolean + hasSheerForce?: boolean + isExternal?: boolean + lastHit?: boolean + magnitude?: number + negateSecondary?: boolean + normalizeBoosted?: boolean + pixilateBoosted?: boolean + pranksterBoosted?: boolean + refrigerateBoosted?: boolean + selfDropped?: boolean + spreadHit?: boolean + stab?: number + statusRoll?: string + totalDamage?: number | false + willChangeForme?: boolean + /** + * Whether or not this move is a Z-Move that broke protect + * (affects damage calculation). + * @type {boolean} + */ + zBrokeProtect?: boolean + /** + * Has this move been boosted by a Z-crystal? Usually the same as + * `isZ`, but hacked moves will have this be `false` and `isZ` be + * truthy. + */ + isZPowered?: boolean +} + +type TemplateAbility = {0: string, 1?: string, H?: string, S?: string} + +interface TemplateData { + abilities: TemplateAbility + baseStats: StatsTable + canHatch?: boolean + color: string + eggGroups: string[] + heightm: number + num: number + species: string + types: string[] + weightkg: number + baseForme?: string + baseSpecies?: string + evoLevel?: number + evoMove?: string + evoCondition?: string + evoItem?: string + evos?: string[] + evoType?: 'trade' | 'stone' | 'levelMove' | 'levelExtra' | 'levelFriendship' | 'levelHold' + forme?: string + formeLetter?: string + gender?: GenderName + genderRatio?: {[k: string]: number} + maxHP?: number + otherForms?: string[] + otherFormes?: string[] + prevo?: string +} + +interface ModdedTemplateData extends Partial { + inherit?: true, +} + +interface TemplateFormatsData { + battleOnly?: boolean + comboMoves?: string[] + doublesTier?: string + encounters?: EventInfo[] + essentialMove?: string + eventOnly?: boolean + eventPokemon?: EventInfo[] + exclusiveMoves?: string[] + gen?: number + isNonstandard?: boolean | string + isUnreleased?: boolean + maleOnlyHidden?: boolean + randomBattleMoves?: string[] + randomDoubleBattleMoves?: string[] + requiredAbility?: string + requiredItem?: string + requiredItems?: string[] + requiredMove?: string + tier?: string + unreleasedHidden?: boolean +} + +interface ModdedTemplateFormatsData extends Partial { + inherit?: true, + randomSet1?: RandomTeamsTypes["TemplateRandomSet"] + randomSet2?: RandomTeamsTypes["TemplateRandomSet"] + randomSet3?: RandomTeamsTypes["TemplateRandomSet"] + randomSet4?: RandomTeamsTypes["TemplateRandomSet"] + randomSet5?: RandomTeamsTypes["TemplateRandomSet"] +} + +interface Template extends Readonly { + readonly effectType: 'Pokemon' + readonly baseSpecies: string + readonly doublesTier: string + readonly eventOnly: boolean + readonly evos: string[] + readonly forme: string + readonly formeLetter: string + readonly gender: GenderName + readonly genderRatio: {M: number, F: number} + readonly maleOnlyHidden: boolean + readonly nfe: boolean + readonly prevo: string + readonly speciesid: string + readonly spriteid: string + readonly tier: string + readonly addedType?: string + readonly isMega?: boolean + readonly isPrimal?: boolean + readonly learnset?: {[k: string]: MoveSource[]} + readonly originalMega?: string +} + +type GameType = 'singles' | 'doubles' | 'triples' | 'rotation' + +interface GameTimerSettings { + dcTimer: boolean; + dcTimerBank: boolean; + starting: number; + grace: number; + addPerTurn: number; + maxPerTurn: number; + maxFirstTurn: number; + timeoutAutoChoose: boolean; + accelerate: boolean; +} + +interface FormatsData extends EventMethods { + name: string + banlist?: string[] + cannotMega?: string[] + canUseRandomTeam?: boolean + challengeShow?: boolean + debug?: boolean + defaultLevel?: number + desc?: string + effectType?: string + forcedLevel?: number + gameType?: GameType + maxForcedLevel?: number + maxLevel?: number + mod?: string + noChangeAbility?: boolean + noChangeForme?: boolean + onBasePowerPriority?: number + onModifyMovePriority?: number + onSwitchInPriority?: number + rated?: boolean + requirePentagon?: boolean + requirePlus?: boolean + restrictedAbilities?: string[] + restrictedMoves?: string[] + restrictedStones?: string[] + ruleset?: string[] + searchShow?: boolean + allowMultisearch?: boolean + team?: string + teamLength?: {validate?: [number, number], battle?: number} + threads?: string[] + timer?: Partial + tournamentShow?: boolean + unbanlist?: string[] + checkLearnset?: (this: Validator, move: Move, template: Template, lsetData: PokemonSources, set: PokemonSet) => {type: string, [any: string]: any} | null + onAfterMega?: (this: Battle, pokemon: Pokemon) => void + onBegin?: (this: Battle) => void + onChangeSet?: (this: ModdedDex, set: PokemonSet, format: Format, setHas?: AnyObject, teamHas?: AnyObject) => string[] | void + onModifyTemplate?: (this: Battle, template: Template, target: Pokemon, source: Pokemon, effect: Effect) => Template | void + onTeamPreview?: (this: Battle) => void + onValidateSet?: (this: ModdedDex, set: PokemonSet, format: Format, setHas: AnyObject, teamHas: AnyObject) => string[] | void + onValidateTeam?: (this: ModdedDex, team: PokemonSet[], format: Format, teamHas: AnyObject) => string[] | void + validateSet?: (this: Validator, set: PokemonSet, teamHas: AnyObject) => string[] | void + validateTeam?: (this: Validator, team: PokemonSet[], removeNicknames: boolean) => string[] | void, + section?: string, + column?: number +} + +interface ModdedFormatsData extends Partial { + inherit?: boolean +} + +interface RuleTable extends Map { + checkLearnset: [Function, string] | null + complexBans: [string, string, number, string[]][] + complexTeamBans: [string, string, number, string[]][] + check: (thing: string, setHas: {[k: string]: true}) => string + getReason: (key: string) => string +} + +interface Format extends Readonly { + readonly effectType: 'Format' | 'Ruleset' | 'Rule' | 'ValidatorRule' + readonly baseRuleset: string[] + readonly banlist: string[] + readonly customRules: string[] | null + readonly defaultLevel: number + readonly maxLevel: number + readonly noLog: boolean + readonly ruleset: string[] + readonly unbanlist: string[] + ruleTable: RuleTable | null +} + +interface BattleScriptsData { + gen: number + zMoveTable?: {[k: string]: string} + calcRecoilDamage?: (this: Battle, damageDealt: number, move: Move) => number + canMegaEvo?: (this: Battle, pokemon: Pokemon) => string | undefined | null + canUltraBurst?: (this: Battle, pokemon: Pokemon) => string | null + canZMove?: (this: Battle, pokemon: Pokemon) => (AnyObject | null)[] | void + getZMove?: (this: Battle, move: Move, pokemon: Pokemon, skipChecks?: boolean) => string | undefined + getActiveZMove?: (this: Battle, move: Move, pokemon: Pokemon) => ActiveMove + isAdjacent?: (this: Battle, pokemon1: Pokemon, pokemon2: Pokemon) => boolean + moveHit?: (this: Battle, target: Pokemon | null, pokemon: Pokemon, move: ActiveMove, moveData?: ActiveMove, isSecondary?: boolean, isSelf?: boolean) => number | undefined | false + resolveAction?: (this: Battle, action: AnyObject, midTurn?: boolean) => Actions["Action"] + runAction?: (this: Battle, action: Actions["Action"]) => void + runMegaEvo?: (this: Battle, pokemon: Pokemon) => boolean + runMove?: (this: Battle, move: Move, pokemon: Pokemon, targetLoc: number, sourceEffect?: Effect | null, zMove?: string, externalMove?: boolean) => void + runZPower?: (this: Battle, move: ActiveMove, pokemon: Pokemon) => void + targetTypeChoices?: (this: Battle, targetType: string) => boolean + tryMoveHit?: (this: Battle, target: Pokemon, pokemon: Pokemon, move: ActiveMove) => number | undefined | false | '' + useMove?: (this: Battle, move: Move, pokemon: Pokemon, target?: Pokemon | null | undefined, sourceEffect?: Effect | null, zMove?: string) => boolean + useMoveInner?: (this: Battle, move: Move, pokemon: Pokemon, target?: Pokemon | null | undefined, sourceEffect?: Effect | null, zMove?: string) => boolean +} + +interface ModdedBattleSide { + lastMove?: Move | null +} + +interface ModdedBattlePokemon { + boostBy?: (this: Pokemon, boost: SparseBoostsTable) => boolean + calculateStat?: (this: Pokemon, statName: string, boost: number, modifier?: number) => number + getActionSpeed?: (this: Pokemon) => number + getRequestData?: (this: Pokemon) => {moves: {move: string, id: string, target?: string, disabled?: boolean}[], maybeDisabled?: boolean, trapped?: boolean, maybeTrapped?: boolean, canMegaEvo?: boolean, canUltraBurst?: boolean, canZMove?: AnyObject | null} + getStat?: (this: Pokemon, statName: string, unboosted?: boolean, unmodified?: boolean) => number + getWeight?: (this: Pokemon) => number + hasAbility?: (this: Pokemon, ability: string | string[]) => boolean + isGrounded?: (this: Pokemon, negateImmunity: boolean | undefined) => boolean | null + modifyStat?: (this: Pokemon, statName: string, modifier: number) => void + moveUsed?: (this: Pokemon, move: Move, targetLoc?: number) => void + recalculateStats?: (this: Pokemon) => void + setAbility?: (this: Pokemon, ability: string | Ability, source: Pokemon | null, isFromFormeChange: boolean) => string | false + transformInto?: (this: Pokemon, pokemon: Pokemon, effect: Effect | null) => boolean +} + +interface ModdedBattleScriptsData extends Partial { + inherit?: string + lastDamage?: number + pokemon?: ModdedBattlePokemon + side?: ModdedBattleSide + boost?: (this: Battle, boost: SparseBoostsTable, target: Pokemon, source?: Pokemon | null, effect?: Effect | string | null, isSecondary?: boolean, isSelf?: boolean) => boolean | null | 0 + debug?: (this: Battle, activity: string) => void + getDamage?: (this: Battle, pokemon: Pokemon, target: Pokemon, move: string | number | ActiveMove, suppressMessages: boolean) => number | undefined | null | false + getEffect?: (this: Battle, name: string | Effect | null) => Effect + init?: (this: Battle) => void + modifyDamage?: (this: Battle, baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages?: boolean) => void + natureModify?: (this: Battle, stats: StatsTable, set: PokemonSet) => StatsTable + setTerrain?: (this: Battle, status: string | Effect, source: Pokemon | null | 'debug', sourceEffect: Effect | null) => boolean + spreadModify?: (this: Battle, baseStats: StatsTable, set: PokemonSet) => StatsTable + suppressingWeather?: (this: Battle) => boolean + + // oms + doGetMixedTemplate?: (this: Battle, template: Template, deltas: AnyObject) => Template + getMegaDeltas?: (this: Battle, megaSpecies: Template) => AnyObject + getMixedTemplate?: (this: Battle, originalSpecies: string, megaSpecies: string) => Template +} + +interface TypeData { + damageTaken: {[attackingTypeNameOrEffectid: string]: number} + HPdvs?: SparseStatsTable + HPivs?: SparseStatsTable +} + +interface ModdedTypeData extends Partial { + inherit?: boolean +} + +interface TypeInfo extends Readonly { + readonly effectType: 'Type' | 'EffectType' + readonly exists: boolean + readonly gen: number + readonly HPdvs: SparseStatsTable + readonly HPivs: SparseStatsTable + readonly id: string + readonly name: string + readonly toString: () => string +} + +interface Actions { + /** A move action */ + MoveAction: { + /** action type */ + choice: 'move' | 'beforeTurnMove' + /** priority of the action (lower first) */ + priority: number + /** speed of pokemon using move (higher first if priority tie) */ + speed: number + /** the pokemon doing the move */ + pokemon: Pokemon + /** location of the target, relative to pokemon's side */ + targetLoc: number + /** a move to use (move action only) */ + moveid: string + /** a move to use (move action only) */ + move: Move + /** true if megaing or ultra bursting */ + mega: boolean | 'done' + /** if zmoving, the name of the zmove */ + zmove?: string + /** effect that called the move (eg Instruct) if any */ + sourceEffect?: Effect | null + } -let Config = require('../config/config'); + /** A switch action */ + SwitchAction: { + /** action type */ + choice: 'switch' | 'instaswitch' + /** priority of the action (lower first) */ + priority: number + /** speed of pokemon switching (higher first if priority tie) */ + speed: number + /** the pokemon doing the switch */ + pokemon: Pokemon + /** pokemon to switch to */ + target: Pokemon + /** effect that called the switch (eg U */ + sourceEffect: Effect | null + } -let Monitor = require('../monitor'); + /** A Team Preview choice action */ + TeamAction: { + /** action type */ + choice: 'team' + /** priority of the action (lower first) */ + priority: number + /** unused for this action type */ + speed: 1 + /** the pokemon switching */ + pokemon: Pokemon + /** new index */ + index: number + } -let Dex = require('../sim/dex'); -let toId = Dex.toId; -// let Sim = require('../sim'); + /** A generic action not done by a pokemon */ + FieldAction: { + /** action type */ + choice: 'start' | 'residual' | 'pass' | 'beforeTurn' + /** priority of the action (lower first) */ + priority: number + /** unused for this action type */ + speed: 1 + /** unused for this action type */ + pokemon: null + } -let LoginServer = require('../loginserver'); -let Ladders = (Config.remoteladder ? '../ladders-remote' : '../ladders'); -let Users = require('../users'); -type Connection = any; -type User = any; + /** A generic action done by a single pokemon */ + PokemonAction: { + /** action type */ + choice: 'megaEvo' | 'shift' | 'runPrimal' | 'runSwitch' | 'event' | 'runUnnerve' + /** priority of the action (lower first) */ + priority: number + /** speed of pokemon doing action (higher first if priority tie) */ + speed: number + /** the pokemon doing action */ + pokemon: Pokemon + } -let Punishments = require('../punishments'); -let Chat = require('../chat'); -let Rooms = require('../rooms'); -type Room = any; -type GlobalRoom = any; -type BattleRoom = any; -type ChatRoom = any; + Action: Actions["MoveAction"] | Actions["SwitchAction"] | Actions["TeamAction"] | Actions["FieldAction"] | Actions["PokemonAction"] +} -let Verifier = require('../verifier'); -let Dnsbl = require('../dnsbl'); -let Sockets = require('../sockets'); -let TeamValidator = require('../team-validator'); +interface RandomTeamsTypes { + TeamDetails: { + megaStone?: number + zMove?: number + hail?: number + rain?: number + sand?: number + sun?: number + stealthRock?: number + spikes?: number + toxicSpikes?: number + hazardClear?: number + rapidSpin?: number + illusion?: number + } + FactoryTeamDetails: { + megaCount: number + zCount?: number + forceResult: boolean + weather?: string + typeCount: {[k: string]: number} + typeComboCount: {[k: string]: number} + baseFormes: {[k: string]: number} + has: {[k: string]: number} + weaknesses: {[k: string]: number} + resistances: {[k: string]: number} + } + RandomSet: { + name: string + species: string + gender: string | boolean + moves: string[] + ability: string + evs: SparseStatsTable + ivs: SparseStatsTable + item: string + level: number + shiny: boolean + nature?: string + happiness?: number + moveset?: RandomTeamsTypes["RandomSet"] + other?: {discard: boolean, restrictMoves: {[k: string]: number}} + } + RandomFactorySet: { + name: string + species: string + gender: string + item: string + ability: string + shiny: boolean + level: number + happiness: number + evs: SparseStatsTable + ivs: SparseStatsTable + nature: string + moves: string[] + } + TemplateRandomSet: { + chance: number + item: string[] + baseMove1?: string + baseMove2?: string + baseMove3?: string + baseMove4?: string + fillerMoves1?: string[] + fillerMoves2?: string[] + fillerMoves3?: string[] + fillerMoves4?: string[] + } +} diff --git a/dev-tools/node.d.ts b/dev-tools/node.d.ts new file mode 100644 index 0000000000000..4b006ecd6e473 --- /dev/null +++ b/dev-tools/node.d.ts @@ -0,0 +1,11 @@ +declare namespace NodeJS { + interface Global { + Dex: any + Dnsbl: any + toId(input: any): string + Config: any + TeamValidator: any + Chat: any + __version: string + } +} diff --git a/dev-tools/users-utils.js b/dev-tools/users-utils.js index bea39d1e70ae8..32d2d6d1a528a 100644 --- a/dev-tools/users-utils.js +++ b/dev-tools/users-utils.js @@ -8,8 +8,8 @@ class Worker extends EventEmitter { this.id = id; this.process = {connected: true}; this.sockets = new Set(); - this.channels = new Map(); - this.subchannels = new Map(); + this.rooms = new Map(); + this.roomChannels = new Map(); Sockets.workers.set(this.id, this); } @@ -24,15 +24,15 @@ class Worker extends EventEmitter { case '>': return this.sendToSocket(...params); case '#': - return this.sendToChannel(...params); + return this.sendToRoom(...params); case '+': - return this.addToChannel(...params); + return this.addToRoom(...params); case '-': - return this.removeFromChannel(...params); + return this.removeFromRoom(...params); case '.': - return this.moveToSubchannel(...params); + return this.moveToChannel(...params); case ':': - return this.broadcastToSubchannels(params[0]); + return this.broadcastToChannels(params[0]); } } @@ -46,8 +46,8 @@ class Worker extends EventEmitter { throw new Error(`Attempted to disconnect nonexistent socket ${socketid}`); } this.sockets.delete(socketid); - this.channels.forEach((channel, channelid) => { - channel.delete(socketid); + this.rooms.forEach((room, roomid) => { + room.delete(socketid); }); } @@ -58,75 +58,75 @@ class Worker extends EventEmitter { } } - sendToChannel(channelid, msg) { - if (!this.channels.has(channelid)) { - throw new Error(`Attempted to send ${msg} to nonexistent channel ${channelid}`); + sendToRoom(roomid, msg) { + if (!this.rooms.has(roomid)) { + throw new Error(`Attempted to send ${msg} to nonexistent room ${roomid}`); } } - addToChannel(channelid, socketid) { + addToRoom(roomid, socketid) { socketid = +socketid; - if (!this.channels.has(channelid)) { - this.channels.set(channelid, new Set([socketid])); + if (!this.rooms.has(roomid)) { + this.rooms.set(roomid, new Set([socketid])); return; } - let channel = this.channels.get(channelid); - if (channel.has(socketid)) { - throw new Error(`Attempted to redundantly add socket ${socketid} to channel ${channelid}`); + let room = this.rooms.get(roomid); + if (room.has(socketid)) { + throw new Error(`Attempted to redundantly add socket ${socketid} to room ${roomid}`); } - channel.add(socketid); + room.add(socketid); } - removeFromChannel(channelid, socketid) { + removeFromRoom(roomid, socketid) { socketid = +socketid; - if (!this.channels.has(channelid)) { - throw new Error(`Attempted to remove socket ${socketid} from nonexistent channel ${channelid}`); + if (!this.rooms.has(roomid)) { + throw new Error(`Attempted to remove socket ${socketid} from nonexistent room ${roomid}`); } - let channel = this.channels.get(channelid); - if (!channel.has(socketid)) { - throw new Error(`Attempted to remove nonexistent socket ${socketid} from channel ${channelid}`); + let room = this.rooms.get(roomid); + if (!room.has(socketid)) { + throw new Error(`Attempted to remove nonexistent socket ${socketid} from room ${roomid}`); } - channel.delete(socketid); - if (!channel.size) { - this.channels.delete(channelid); - this.subchannels.delete(channelid); + room.delete(socketid); + if (!room.size) { + this.rooms.delete(roomid); + this.roomChannels.delete(roomid); } } - moveToSubchannel(channelid, subchannelid, socketid) { + moveToChannel(roomid, channelid, socketid) { socketid = +socketid; - if (!this.channels.has(channelid)) { - throw new Error(`Attempted to move socket ${socketid} to subchannel ${subchannelid} of nonexistent channel ${channelid}`); + if (!this.rooms.has(roomid)) { + throw new Error(`Attempted to move socket ${socketid} to channel ${channelid} of nonexistent room ${roomid}`); } - if (!this.subchannels.has(channelid)) { - if (subchannelid === '0') return; - this.subchannels.set(channelid, new Map([[socketid, subchannelid]])); + if (!this.roomChannels.has(roomid)) { + if (channelid === '0') return; + this.roomChannels.set(roomid, new Map([[socketid, channelid]])); return; } - let subchannel = this.subchannels.get(channelid); - if (!subchannel.has(socketid)) { - if (subchannelid !== '0') subchannel.set(socketid, subchannelid); + let channel = this.roomChannels.get(roomid); + if (!channel.has(socketid)) { + if (channelid !== '0') channel.set(socketid, channelid); return; } - if (subchannelid === '0') { - subchannel.delete(socketid); + if (channelid === '0') { + channel.delete(socketid); } else { - subchannel.set(socketid, subchannelid); + channel.set(socketid, channelid); } } - broadcastToSubchannels(channelid) { - if (!this.channels.has(channelid)) { - throw new Error(`Attempted to broadcast to subchannels of nonexistent channel ${channelid}`); + broadcastToChannels(roomid) { + if (!this.rooms.has(roomid)) { + throw new Error(`Attempted to broadcast to roomChannels of nonexistent room ${roomid}`); } - if (!this.subchannels.has(channelid)) { - throw new Error(`Attempted to broadcast to nonexistent subchannels of channel ${channelid}`); + if (!this.roomChannels.has(roomid)) { + throw new Error(`Attempted to broadcast to nonexistent roomChannels of room ${roomid}`); } } } diff --git a/fs.js b/fs.js deleted file mode 100644 index e42752af3dcef..0000000000000 --- a/fs.js +++ /dev/null @@ -1,282 +0,0 @@ -/** - * FS - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * An abstraction layer around Node's filesystem. - * - * Advantages: - * - write() etc do nothing in unit tests - * - paths are always relative to PS's base directory - * - Promises (seriously wtf Node Core what are you thinking) - * - PS-style API: FS("foo.txt").write("bar") for easier argument order - * - mkdirp - * - * FS is used nearly everywhere, but exceptions include: - * - crashlogger.js - in case the crash is in here - * - repl.js - which use Unix sockets out of this file's scope - * - launch script - happens before modules are loaded - * - sim/ - intended to be self-contained - * - * @license MIT license - */ - -'use strict'; - -const pathModule = require('path'); -const fs = require('fs'); - -/*eslint no-unused-expressions: ["error", { "allowTernary": true }]*/ - -class Path { - /** - * @param {string} path - */ - constructor(path) { - this.path = pathModule.resolve(__dirname, path); - } - parentDir() { - return new Path(pathModule.dirname(this.path)); - } - read(options = {}) { - return new Promise((resolve, reject) => { - fs.readFile(this.path, options, (err, data) => { - err ? reject(err) : resolve(data); - }); - }); - } - readSync(options = {}) { - return fs.readFileSync(this.path, options); - } - readTextIfExists() { - return new Promise((resolve, reject) => { - fs.readFile(this.path, 'utf8', (err, data) => { - if (err && err.code === 'ENOENT') return resolve(''); - err ? reject(err) : resolve(data); - }); - }); - } - readTextIfExistsSync() { - try { - return fs.readFileSync(this.path, 'utf8'); - } catch (err) { - if (err.code !== 'ENOENT') throw err; - } - return ''; - } - /** - * @param {string | Buffer} data - * @param {Object} options - */ - write(data, options = {}) { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - fs.writeFile(this.path, data, options, err => { - err ? reject(err) : resolve(); - }); - }); - } - /** - * @param {string | Buffer} data - * @param {Object} options - */ - writeSync(data, options = {}) { - if (Config.nofswriting) return; - return fs.writeFileSync(this.path, data, options); - } - /** - * @param {string | Buffer} data - * @param {Object} options - */ - append(data, options = {}) { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - fs.appendFile(this.path, data, options, err => { - err ? reject(err) : resolve(); - }); - }); - } - /** - * @param {string | Buffer} data - * @param {Object} options - */ - appendSync(data, options = {}) { - if (Config.nofswriting) return; - return fs.appendFileSync(this.path, data, options); - } - /** - * @param {string} target - */ - symlinkTo(target) { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - // @ts-ignore TypeScript bug - fs.symlink(target, this.path, err => { - err ? reject(err) : resolve(); - }); - }); - } - /** - * @param {string} target - */ - symlinkToSync(target) { - if (Config.nofswriting) return; - return fs.symlinkSync(target, this.path); - } - /** - * @param {string} target - */ - rename(target) { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - fs.rename(this.path, target, err => { - err ? reject(err) : resolve(); - }); - }); - } - /** - * @param {string} target - */ - renameSync(target) { - if (Config.nofswriting) return; - return fs.renameSync(this.path, target); - } - readdir() { - return new Promise((resolve, reject) => { - fs.readdir(this.path, (err, data) => { - err ? reject(err) : resolve(data); - }); - }); - } - readdirSync() { - return fs.readdirSync(this.path); - } - createWriteStream(options = {}) { - if (Config.nofswriting) { - const Writable = require('stream').Writable; - return new Writable({write: (chunk, encoding, callback) => callback()}); - } - return fs.createWriteStream(this.path, options); - } - createAppendStream(options = {}) { - if (Config.nofswriting) { - const Writable = require('stream').Writable; - return new Writable({write: (chunk, encoding, callback) => callback()}); - } - options.flags = options.flags || 'a'; - return fs.createWriteStream(this.path, options); - } - unlinkIfExists() { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - fs.unlink(this.path, err => { - if (err && err.code === 'ENOENT') return resolve(); - err ? reject(err) : resolve(); - }); - }); - } - unlinkIfExistsSync() { - if (Config.nofswriting) return; - try { - fs.unlinkSync(this.path); - } catch (err) { - if (err.code !== 'ENOENT') throw err; - } - } - /** - * @param {string | number} mode - */ - mkdir(mode = 0o755) { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - // @ts-ignore - fs.mkdir(this.path, mode, err => { - err ? reject(err) : resolve(); - }); - }); - } - /** - * @param {string | number} mode - */ - mkdirSync(mode = 0o755) { - if (Config.nofswriting) return; - // @ts-ignore - return fs.mkdirSync(this.path, mode); - } - /** - * @param {string | number} mode - */ - mkdirIfNonexistent(mode = 0o755) { - if (Config.nofswriting) return Promise.resolve(); - return new Promise((resolve, reject) => { - // @ts-ignore - fs.mkdir(this.path, mode, err => { - if (err && err.code === 'EEXIST') return resolve(); - err ? reject(err) : resolve(); - }); - }); - } - /** - * @param {string | number} mode - */ - mkdirIfNonexistentSync(mode = 0o755) { - if (Config.nofswriting) return; - try { - // @ts-ignore - fs.mkdirSync(this.path, mode); - } catch (err) { - if (err.code !== 'EEXIST') throw err; - } - } - /** - * Creates the directory (and any parent directories if necessary). - * Does not throw if the directory already exists. - * @param {string | number} mode - */ - async mkdirp(mode = 0o755) { - try { - await this.mkdirIfNonexistent(mode); - } catch (err) { - if (err.code !== 'ENOENT') throw err; - await this.parentDir().mkdirp(mode); - await this.mkdirIfNonexistent(mode); - } - } - /** - * Creates the directory (and any parent directories if necessary). - * Does not throw if the directory already exists. Synchronous. - * @param {string | number} mode - */ - mkdirpSync(mode = 0o755) { - try { - this.mkdirIfNonexistentSync(mode); - } catch (err) { - if (err.code !== 'ENOENT') throw err; - this.parentDir().mkdirpSync(mode); - this.mkdirIfNonexistentSync(mode); - } - } - /** - * Calls the callback if the file is modified. - * @param {function (): void} callback - */ - onModify(callback) { - fs.watchFile(this.path, (curr, prev) => { - if (curr.mtime > prev.mtime) return callback(); - }); - } - /** - * Clears callbacks added with onModify() - */ - unwatch() { - fs.unwatchFile(this.path); - } -} - -/** - * @param {string} path - */ -function getFs(path) { - return new Path(path); -} - -module.exports = getFs; diff --git a/ladders-matchmaker.js b/ladders-matchmaker.js deleted file mode 100644 index 6173bd266b8da..0000000000000 --- a/ladders-matchmaker.js +++ /dev/null @@ -1,218 +0,0 @@ -/** - * Matchmaker - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This keeps track of challenges to battle made between users, setting up - * matches between users looking for a battle, and starting new battles. - * - * @License MIT License - */ - -'use strict'; - -const PERIODIC_MATCH_INTERVAL = 60 * 1000; - -class Search { - constructor(userid, team, rating = 1000) { - this.userid = userid; - this.team = team; - this.rating = rating; - this.time = Date.now(); - } - - setRating(rating) { - this.rating = rating; - } - - setStart() { - this.time = Date.now(); - } -} - -class Matchmaker { - constructor() { - this.searches = new Map(); - this.periodicMatchInterval = setInterval( - () => this.periodicMatch(), - PERIODIC_MATCH_INTERVAL - ); - } - - cancelSearch(user, format) { - if (format && !user.searching[format]) return false; - let searchedFormats = Object.keys(user.searching); - if (!searchedFormats.length) return false; - - for (let searchedFormat of searchedFormats) { - if (format && searchedFormat !== format) continue; - let formatSearches = this.searches.get(searchedFormat); - for (let search of formatSearches) { - if (search.userid !== user.userid) continue; - formatSearches.delete(search); - delete user.searching[searchedFormat]; - break; - } - } - - user.updateSearch(); - return true; - } - - searchBattle(user, formatid) { - if (!user.connected) return; - formatid = Dex.getFormat(formatid).id; - - return Promise.all([ - Promise.resolve(user.userid), - user.prepBattle(formatid, 'search', null), - Ladders(formatid).getRating(user.userid), - ]).then(([userId, validTeam, rating]) => { - if (userId !== user.userid) return; - return this.finishSearchBattle(user, formatid, validTeam, rating); - }, err => { - // Rejects iff ladders are disabled, or if we - // retrieved the rating but the user had changed their name. - - if (Ladders.disabled) return user.popup(`The ladder is currently disabled due to high server load.`); - // User feedback for renames handled elsewhere. - }); - } - - finishSearchBattle(user, formatid, validTeam, rating) { - if (validTeam === false) return; - - const search = new Search(user.userid, validTeam, rating); - this.addSearch(search, user, formatid); - } - - matchmakingOK(search1, search2, user1, user2, formatid) { - // This should never happen. - if (!user1 || !user2) { - return void require('./crashlogger')(new Error(`Matched user ${user1 ? search2.userid : search1.userid} not found`), "The main process"); - } - - // users must be different - if (user1 === user2) return false; - - // users must have different IPs - if (user1.latestIp === user2.latestIp) return false; - - // users must not have been matched immediately previously - if (user1.lastMatch === user2.userid || user2.lastMatch === user1.userid) return false; - - // search must be within range - let searchRange = 100, elapsed = Date.now() - Math.min(search1.time, search2.time); - if (formatid === 'gen7ou' || formatid === 'gen7oucurrent' || - formatid === 'gen7oususpecttest' || formatid === 'gen7randombattle') { - searchRange = 50; - } - - searchRange += elapsed / 300; // +1 every .3 seconds - if (searchRange > 300) searchRange = 300 + (searchRange - 300) / 10; // +1 every 3 sec after 300 - if (searchRange > 600) searchRange = 600; - if (Math.abs(search1.rating - search2.rating) > searchRange) return false; - - user1.lastMatch = user2.userid; - user2.lastMatch = user1.userid; - return Math.min(search1.rating, search2.rating) || 1; - } - - addSearch(newSearch, user, formatid) { - // Filter racing conditions - if (!user.connected || user !== Users.getExact(user.userid)) return; - if (user.searching[formatid]) return; - - // Prioritize players who have been searching for a match the longest. - let formatSearches = this.searches.get(formatid); - if (!formatSearches) { - formatSearches = new Set(); - this.searches.set(formatid, formatSearches); - } - - for (let search of formatSearches) { - let searchUser = Users.getExact(search.userid); - let minRating = this.matchmakingOK(search, newSearch, searchUser, user, formatid); - if (minRating) { - delete user.searching[formatid]; - delete searchUser.searching[formatid]; - formatSearches.delete(search); - this.startBattle(searchUser, user, formatid, search.team, newSearch.team, {rated: !Ladders.disabled && minRating}); - return; - } - } - user.searching[formatid] = 1; - formatSearches.add(newSearch); - user.updateSearch(); - } - - periodicMatch() { - this.searches.forEach((formatSearches, formatid) => { - if (formatSearches.size < 2) return; - - // Prioritize players who have been searching for a match the longest. - let [longestSearch, ...searches] = formatSearches; - let longestSearcher = Users.getExact(longestSearch.userid); - for (let search of searches) { - let searchUser = Users.getExact(search.userid); - let minRating = this.matchmakingOK(search, longestSearch, searchUser, longestSearcher, formatid); - if (minRating) { - delete longestSearcher.searching[formatid]; - delete searchUser.searching[formatid]; - formatSearches.delete(search); - formatSearches.delete(longestSearch); - this.startBattle(searchUser, longestSearcher, formatid, search.team, longestSearch.team, {rated: !Ladders.disabled && minRating}); - return; - } - } - }); - } - - verifyPlayers(player1, player2, format) { - let p1 = (typeof player1 === 'string') ? Users(player1) : player1; - let p2 = (typeof player2 === 'string') ? Users(player2) : player2; - if (!p1 || !p2) { - this.cancelSearch(p1, format); - this.cancelSearch(p2, format); - return false; - } - - if (p1 === p2) { - this.cancelSearch(p1, format); - this.cancelSearch(p2, format); - p1.popup("You can't battle your own account. Please use something like Private Browsing to battle yourself."); - return false; - } - - if (Rooms.global.lockdown === true) { - this.cancelSearch(p1, format); - this.cancelSearch(p2, format); - p1.popup("The server is restarting. Battles will be available again in a few minutes."); - p2.popup("The server is restarting. Battles will be available again in a few minutes."); - return false; - } - - return true; - } - - startBattle(p1, p2, format, p1team, p2team, options) { - if (!this.verifyPlayers(p1, p2, format)) return; - - let roomid = Rooms.global.prepBattleRoom(format); - let room = Rooms.createBattle(roomid, format, p1, p2, options); - p1.joinRoom(room); - p2.joinRoom(room); - room.battle.addPlayer(p1, p1team); - room.battle.addPlayer(p2, p2team); - this.cancelSearch(p1, format); - this.cancelSearch(p2, format); - Rooms.global.onCreateBattleRoom(p1, p2, room, options); - - return room; - } -} - -module.exports = { - Search, - Matchmaker, - matchmaker: new Matchmaker(), -}; diff --git a/ladders-remote.js b/ladders-remote.js deleted file mode 100644 index c877a64ceffa8..0000000000000 --- a/ladders-remote.js +++ /dev/null @@ -1,138 +0,0 @@ -/** - * Main server ladder library - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This file handles ladders for the main server on - * play.pokemonshowdown.com. - * - * Ladders for all other servers is handled by ladders.js. - * - * Matchmaking is currently still implemented in rooms.js. - * - * @license MIT license - */ - -'use strict'; - -let Ladders = module.exports = getLadder; - -Ladders.get = Ladders; -Ladders.formatsListPrefix = ''; -Ladders.disabled = false; - -class Ladder { - constructor(formatid) { - this.formatid = toId(formatid); - } - - getTop() { - return Promise.resolve(null); - } - - getRating(userid) { - let formatid = this.formatid; - let user = Users.getExact(userid); - if (!user) { - return Promise.reject(new Error(`Expired rating for ${userid}`)); - } - if (Ladders.disabled === true || Ladders.disabled === 'db' && !user.mmrCache[formatid]) { - return Promise.reject(new Error(`Ladders are disabled.`)); - } - if (user.mmrCache[formatid]) { - return Promise.resolve(user.mmrCache[formatid]); - } - return new Promise((resolve, reject) => { - LoginServer.request('mmr', { - format: formatid, - user: userid, - }, (data, statusCode, error) => { - if (!data) return resolve(1000); - if (data.errorip) { - return resolve(1000); - } - - let mmr = parseInt(data); - if (isNaN(mmr)) return resolve(1000); - if (user.userid !== userid) return reject(new Error(`Expired rating for ${userid}`)); - - user.mmrCache[formatid] = mmr; - resolve(mmr); - }); - }); - } - - updateRating(p1name, p2name, p1score, room) { - if (Ladders.disabled) { - return room.addRaw(`Ratings not updated. The ladders are currently disabled.`).update(); - } - - let formatid = this.formatid; - let p1rating, p2rating; - room.update(); - room.send(`||Ladder updating...`); - LoginServer.request('ladderupdate', { - p1: p1name, - p2: p2name, - score: p1score, - format: formatid, - }, (data, statusCode, error) => { - if (!room.battle) { - console.log(`room expired before ladder update was received`); - return; - } - if (!data) { - room.add(`||Ladder (probably) updated, but score could not be retrieved (${error.message}).`); - // log the battle anyway - if (!Dex.getFormat(room.format).noLog) { - room.logBattle(p1score); - } - return; - } else if (data.errorip) { - room.add(`||This server's request IP ${data.errorip} is not a registered server.`); - room.add(`||We currently only support ladder ratings on registered servers.`); - room.update(); - return; - } else { - try { - p1rating = data.p1rating; - p2rating = data.p2rating; - - let oldelo = Math.round(p1rating.oldelo); - let elo = Math.round(p1rating.elo); - let act = (p1score > 0.9 ? `winning` : (p1score < 0.1 ? `losing` : `tying`)); - let reasons = `${elo - oldelo} for ${act}`; - if (reasons.charAt(0) !== '-') reasons = '+' + reasons; - room.addRaw(Chat.html`${p1name}'s rating: ${oldelo} → ${elo}
    (${reasons})`); - - oldelo = Math.round(p2rating.oldelo); - elo = Math.round(p2rating.elo); - act = (p1score > 0.9 || p1score < 0 ? `losing` : (p1score < 0.1 ? `winning` : `tying`)); - reasons = `${elo - oldelo} for ${act}`; - if (reasons.charAt(0) !== '-') reasons = '+' + reasons; - room.addRaw(Chat.html`${p2name}'s rating: ${oldelo} → ${elo}
    (${reasons})`); - - let p1 = Users.getExact(p1name); - if (p1) p1.mmrCache[formatid] = +p1rating.elo; - let p2 = Users.getExact(p2name); - if (p2) p2.mmrCache[formatid] = +p2rating.elo; - room.update(); - } catch (e) { - room.addRaw(`There was an error calculating rating changes.`); - room.update(); - } - - if (!Dex.getFormat(formatid).noLog) { - room.logBattle(p1score, p1rating, p2rating); - } - } - }); - } -} - -function getLadder(formatid) { - return new Ladder(formatid); -} - -Ladders.visualizeAll = function (username) { - return Promise.resolve([`Please use the official client at play.pokemonshowdown.com`]); -}; diff --git a/ladders.js b/ladders.js deleted file mode 100644 index 1ed3e13b940f5..0000000000000 --- a/ladders.js +++ /dev/null @@ -1,338 +0,0 @@ -/** - * Ladder library - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This file handles ladders for all servers other than - * play.pokemonshowdown.com. - * - * Specifically, this is the file that handles calculating and keeping - * track of players' Elo ratings for all formats. - * - * Matchmaking is currently still implemented in rooms.js. - * - * @license MIT license - */ - -'use strict'; - -const FS = require('./fs'); - -let Ladders = module.exports = getLadder; - -Ladders.get = Ladders; - -// tells the client to ask the server for format information -Ladders.formatsListPrefix = '|,LL'; - -Ladders.disabled = false; - -// ladderCaches = {formatid: ladder OR Promise(ladder)} -// Use Ladders(formatid).ladder to guarantee a Promise(ladder). -// ladder is basically a 2D array representing the corresponding ladder.tsv -// with userid in front -// ladder = [ladderRow] -// ladderRow = [userid, elo, username, w, l, t] -let ladderCaches = Ladders.ladderCaches = Object.create(null); - -class Ladder { - constructor(formatid) { - this.formatid = toId(formatid); - this.loadedLadder = null; - this.ladder = this.load(); - } - - /** - * Internal function, returns a Promise for a ladder - */ - async load() { - // ladderCaches[formatid] - if (this.formatid in ladderCaches) { - let cachedLadder = ladderCaches[this.formatid]; - if (cachedLadder.then) { - let ladder = await cachedLadder; - return (this.loadedLadder = ladder); - } - return (this.loadedLadder = cachedLadder); - } - try { - const data = await FS('config/ladders/' + this.formatid + '.tsv').read('utf8'); - let ladder = []; - let dataLines = data.split('\n'); - for (let i = 1; i < dataLines.length; i++) { - let line = dataLines[i].trim(); - if (!line) continue; - let row = line.split('\t'); - ladder.push([toId(row[1]), Number(row[0]), row[1], Number(row[2]), Number(row[3]), Number(row[4]), row[5]]); - } - // console.log('Ladders(' + this.formatid + ') loaded tsv: ' + JSON.stringify(this.loadedLadder)); - this.loadedLadder = ladderCaches[this.formatid] = ladder; - return this.loadedLadder; - } catch (err) { - // console.log('Ladders(' + this.formatid + ') err loading tsv: ' + JSON.stringify(this.loadedLadder)); - } - this.loadedLadder = ladderCaches[this.formatid] = []; - return this.loadedLadder; - } - - /** - * Saves the ladder in config/ladders/[formatid].tsv - * - * Called automatically by updateRating, so you don't need to manually - * call this. - */ - save() { - if (this.saving) return; - this.saving = true; - if (!this.loadedLadder) { - this.ladder.then(() => { - this.save(); - }); - return; - } - if (!this.loadedLadder.length) { - this.saving = false; - return; - } - let stream = FS(`config/ladders/${this.formatid}.tsv`).createWriteStream(); - stream.write('Elo\tUsername\tW\tL\tT\tLast update\r\n'); - for (let i = 0; i < this.loadedLadder.length; i++) { - let row = this.loadedLadder[i]; - stream.write(row.slice(1).join('\t') + '\r\n'); - } - stream.end(); - this.saving = false; - } - - /** - * Gets the index of a user in the ladder array. - * - * If createIfNeeded is true, the user will be created and added to - * the ladder array if it doesn't already exist. - */ - indexOfUser(username, createIfNeeded) { - let userid = toId(username); - for (let i = 0; i < this.loadedLadder.length; i++) { - if (this.loadedLadder[i][0] === userid) return i; - } - if (createIfNeeded) { - let index = this.loadedLadder.length; - this.loadedLadder.push([userid, 1000, username, 0, 0, 0]); - return index; - } - return -1; - } - - /** - * Returns [formatid, html], where html is an the HTML source of a - * ladder toplist, to be displayed directly in the ladder tab of the - * client. - */ - getTop() { - let formatid = this.formatid; - let name = Dex.getFormat(formatid).name; - return this.ladder.then(ladder => { - let buf = `

    ${name} Top 100

    `; - buf += ``; - buf += ``; - for (let i = 0; i < ladder.length; i++) { - let row = ladder[i]; - buf += ``; - } - return [formatid, buf]; - }); - } - - /** - * Returns a Promise for the Elo rating of a user - */ - getRating(userid) { - let formatid = this.formatid; - let user = Users.getExact(userid); - if (Ladders.disabled === true || Ladders.disabled === 'db' && (!user || !user.mmrCache[formatid])) { - return Promise.reject(new Error(`Ladders are disabled.`)); - } - if (user && user.mmrCache[formatid]) { - return Promise.resolve(user.mmrCache[formatid]); - } - return this.ladder.then(() => { - if (user.userid !== userid) return Promise.reject(`Expired rating for ${userid}`); - let index = this.indexOfUser(userid); - if (index < 0) return (user.mmrCache[formatid] = 1000); - return (user.mmrCache[formatid] = this.loadedLadder[index][1]); - }); - } - - /** - * Internal method. Update the Elo rating of a user. - */ - updateRow(row, score, foeElo) { - let elo = row[1]; - - // The K factor determines how much your Elo changes when you win or - // lose games. Larger K means more change. - // In the "original" Elo, K is constant, but it's common for K to - // get smaller as your rating goes up - let K = 50; - - // dynamic K-scaling (optional) - if (elo < 1200) { - if (score < 0.5) { - K = 10 + (elo - 1000) * 40 / 200; - } else if (score > 0.5) { - K = 90 - (elo - 1000) * 40 / 200; - } - } else if (elo > 1350) { - K = 40; - } else if (elo > 1600) { - K = 32; - } - - // main Elo formula - let E = 1 / (1 + Math.pow(10, (foeElo - elo) / 400)); - elo += K * (score - E); - - if (elo < 1000) elo = 1000; - - row[1] = elo; - if (score > 0.6) { - row[3]++; // win - } else if (score < 0.4) { - row[4]++; // loss - } else { - row[5]++; // tie - } - row[6] = '' + new Date(); - } - - /** - * Update the Elo rating for two players after a battle, and display - * the results in the passed room. - */ - updateRating(p1name, p2name, p1score, room) { - if (Ladders.disabled) { - return room.addRaw(`Ratings not updated. The ladders are currently disabled.`).update(); - } - - let formatid = this.formatid; - let p2score = 1 - p1score; - if (p1score < 0) { - p1score = 0; - p2score = 0; - } - this.ladder.then(() => { - let p1newElo, p2newElo; - try { - let p1index = this.indexOfUser(p1name, true); - let p1elo = this.loadedLadder[p1index][1]; - - let p2index = this.indexOfUser(p2name, true); - let p2elo = this.loadedLadder[p2index][1]; - - this.updateRow(this.loadedLadder[p1index], p1score, p2elo); - this.updateRow(this.loadedLadder[p2index], p2score, p1elo); - - p1newElo = this.loadedLadder[p1index][1]; - p2newElo = this.loadedLadder[p2index][1]; - - // console.log('L: ' + this.loadedLadder.map(r => ''+Math.round(r[1])+' '+r[2]).join('\n')); - - // move p1 to its new location - let newIndex = p1index; - while (newIndex > 0 && this.loadedLadder[newIndex - 1][1] <= p1newElo) newIndex--; - while (newIndex === p1index || (this.loadedLadder[newIndex] && this.loadedLadder[newIndex][1] > p1newElo)) newIndex++; - // console.log('ni='+newIndex+', p1i='+p1index); - if (newIndex !== p1index && newIndex !== p1index + 1) { - let row = this.loadedLadder.splice(p1index, 1)[0]; - // adjust for removed row - if (newIndex > p1index) newIndex--; - if (p2index > p1index) p2index--; - - this.loadedLadder.splice(newIndex, 0, row); - // adjust for inserted row - if (p2index >= newIndex) p2index++; - } - - // move p2 - newIndex = p2index; - while (newIndex > 0 && this.loadedLadder[newIndex - 1][1] <= p2newElo) newIndex--; - while (newIndex === p2index || (this.loadedLadder[newIndex] && this.loadedLadder[newIndex][1] > p2newElo)) newIndex++; - // console.log('ni='+newIndex+', p2i='+p2index); - if (newIndex !== p2index && newIndex !== p2index + 1) { - let row = this.loadedLadder.splice(p2index, 1)[0]; - // adjust for removed row - if (newIndex > p2index) newIndex--; - - this.loadedLadder.splice(newIndex, 0, row); - } - - let p1 = Users.getExact(p1name); - if (p1) p1.mmrCache[formatid] = +p1newElo; - let p2 = Users.getExact(p2name); - if (p2) p2.mmrCache[formatid] = +p2newElo; - this.save(); - - if (!room.battle) { - console.log(`room expired before ladder update was received`); - return; - } - - let reasons = '' + (Math.round(p1newElo) - Math.round(p1elo)) + ' for ' + (p1score > 0.9 ? 'winning' : (p1score < 0.1 ? 'losing' : 'tying')); - if (reasons.charAt(0) !== '-') reasons = '+' + reasons; - room.addRaw(Chat.html`${p1name}'s rating: ${Math.round(p1elo)} → ${Math.round(p1newElo)}
    (${reasons})`); - - reasons = '' + (Math.round(p2newElo) - Math.round(p2elo)) + ' for ' + (p2score > 0.9 ? 'winning' : (p2score < 0.1 ? 'losing' : 'tying')); - if (reasons.charAt(0) !== '-') reasons = '+' + reasons; - room.addRaw(Chat.html`${p2name}'s rating: ${Math.round(p2elo)} → ${Math.round(p2newElo)}
    (${reasons})`); - - room.update(); - } catch (e) { - if (!room.battle) return; - room.addRaw(`There was an error calculating rating changes:`); - room.add(e.stack); - room.update(); - } - - if (!Dex.getFormat(formatid).noLog) { - room.logBattle(p1score, p1newElo, p2newElo); - } - }); - } - - /** - * Returns a promise for a with all ratings for the current format. - */ - visualize(username) { - return this.ladder.then(() => { - let index = this.indexOfUser(username, false); - - if (index < 0) return ''; - - let ratings = this.loadedLadder[index]; - - let output = ``; - return `${output}`; - }); - } - - /** - * Returns a Promise for an array of strings of s for ladder ratings of the user - */ - static visualizeAll(username) { - let ratings = []; - for (let i in Dex.formats) { - if (Dex.formats[i].searchShow) { - ratings.push(Ladders(i).visualize(username)); - } - } - return Promise.all(ratings); - } -} - -function getLadder(formatid) { - return new Ladder(formatid); -} - -Ladders.Ladder = Ladder; -Ladders.visualizeAll = Ladder.visualizeAll; diff --git a/lib/STREAMS.md b/lib/STREAMS.md new file mode 100644 index 0000000000000..55d9bd993b8d2 --- /dev/null +++ b/lib/STREAMS.md @@ -0,0 +1,132 @@ +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. + +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. + +An overview: + +- `WriteStream` is a string/Buffer write stream. Write to it with `writeStream.write(data)`. +- `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. + +These streams are not API-compatible with Node streams, but can wrap them. + +### "override encoding" + +Buffer stream methods often take an "override encoding" parameter. Normally, you should never use it: streams will automatically convert between strings and Buffers using their built-in encoding, which defaults to `utf8`, and can be changed by setting `stream.encoding`. + +However, if for some reason you need to change which encoding you use on a per-read or per-write basis, you can pass the relevant encoding to the individual methods. + + +## Interface: WriteStream + +A `WriteStream` can be written to. + +### writeStream.write(chunk, [encoding]) + +* `chunk` {string|Buffer|null} data to write +* `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()`. + +### writeStream.writeLine(chunk, [encoding]) + +* `chunk` {string} data +* `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')`. + +### writeStream.end() + +* Returns: {Promise} for when the stream finishes. + +Ends the write stream. + +This tells the write stream that you're done writing to it. In the Buffer/string analogy, it means you've reached the end of the Buffer/string. Certain write streams require this. + + +## Interface: ReadStream + +A `ReadStream` can be read from. + +### readStream.read([encoding]) + +* `encoding` [override encoding][] +* Returns: {Promise} the data read. + +Reads data from the read stream as fast as possible. + +Specifically, this waits for the internal buffer to become non-empty, and then reads the entire contents of the internal buffer. + +The Promise resolves to `null` if there is no more data to be read (you have already read to the end). + +There's rarely a need to use this function directly; you either know how many bytes you're looking for (and should be using `read(byteCount)`), or you're looking for a delimiter (and should be using `readLine()` or `readDelimitedBy(delimiter)`), or you just want the entire stream contents (and should be using `readAll()`). + +### readStream.read(byteCount, [encoding]) + +* `byteCount` number of bytes to read +* `encoding` [override encoding][] +* Returns: {Promise} the data read. + +Reads `byteCount` bytes from the read stream. + +As `readStream.read([encoding])` above, but waits for at least `byteCount` bytes to become available, and then reads and returns exactly `byteCount` bytes. Only if you are at the end of the read stream will fewer than `byteCount` bytes be returned. + +This does mean that if the stream has new data, but less than `byteCount` bytes of data, the Promise will not resolve unless the stream has ended. + +You may also set `byteCount` to `null` to make this behave like `readStream.read([encoding])` above. + +### readStream.readLine([encoding]) + +* `encoding` [override encoding][] +* Returns: {Promise} the data read. + +Reads a line (a string delimited by `\n` or `\r\n`) from the stream. + +The equivalent of `readDelimitedBy('\n')`, but chopping off any trailing `\r` from the result. + +### readStream.readDelimitedBy(delimiter, [encoding]) + +* `encoding` [override encoding][] +* Returns: {Promise} the data read. + +Reads a line delimited by `delimiter` from the stream. + +Specifically: waits for either `delimiter` to appear in the stream, or for the stream to end. + +If the stream has reached the end with no (more) appearances of `delimiter`, read everything. + +Otherwise, read up to the delimiter, then discard the delimiter. + +`readDelimitedBy` does not distinguish between a delimiter and a terminator. If the stream ends in `delimiter`, it will be treated as a terminator, otherwise it will be treated as a delimiter. + +```js +const stream = new ReadStream('a,,b,c,'); +await stream.readDelimitedBy(','); // Promise<'a'> +// stream is now ',b,c' +await stream.readDelimitedBy(','); // Promise<''> +// stream is now 'b,c' +await stream.readDelimitedBy(','); // Promise<'b'> +// stream is now 'c' +await stream.readDelimitedBy(','); // Promise<'c'> +// stream is now '' +await stream.readDelimitedBy(','); // Promise - NOT Promise<''> +``` + +### readStream.peek([encoding]) +### readStream.peek(byteCount, [encoding]) + +Like `readStream.read`, but doesn't remove the read data from the read queue. + +### readStream.readBuffer() +### readStream.readBuffer(byteCount) +### readStream.peekBuffer() +### readStream.peekBuffer(byteCount) + +Like `readStream.read` and `readStream.peek`, but returns a Buffer instead of a string. diff --git a/crashlogger.js b/lib/crashlogger.ts similarity index 77% rename from crashlogger.js rename to lib/crashlogger.ts index 6a228a71ab19e..e17b1e1ff4e6a 100644 --- a/crashlogger.js +++ b/lib/crashlogger.ts @@ -5,48 +5,41 @@ * Logs crashes, sends an e-mail notification if you've set up * config.js to do that. * - * @license MIT license + * @license MIT */ -'use strict'; - -const fs = require('fs'); -const path = require('path'); +import * as fs from 'fs'; +import * as path from 'path'; const CRASH_EMAIL_THROTTLE = 5 * 60 * 1000; // 5 minutes const LOCKDOWN_PERIOD = 30 * 60 * 1000; // 30 minutes -const logPath = path.resolve(__dirname, 'logs/errors.txt'); +const logPath = path.resolve(__dirname, '../logs/errors.txt'); let lastCrashLog = 0; -/** @type {any} */ -let transport; +let transport: any; /** * Logs when a crash happens to console, then e-mails those who are configured * to receive them. - * - * @param {Error} err - * @param {string} description - * @param {?Object} [data = null] - * @return {?string} */ -module.exports = function crashlogger(err, description, data = null) { +export = function crashlogger(error: Error | string, description: string, data: object | null = null): string | null { const datenow = Date.now(); - let stack = (err.stack || err); + let stack = typeof error === 'string' ? error : error.stack; if (data) { stack += `\n\nAdditional information:\n`; for (let k in data) { + // @ts-ignore stack += ` ${k} = ${data[k]}\n`; } } console.error(`\nCRASH: ${stack}\n`); - let out = fs.createWriteStream(logPath, {'flags': 'a'}); + let out = fs.createWriteStream(logPath, {flags: 'a'}); out.on('open', () => { out.write(`\n${stack}\n`); out.end(); - }).on('error', /** @param {Error} err */ err => { + }).on('error', (err: Error) => { console.error(`\nSUBCRASH: ${err.stack}\n`); }); @@ -69,6 +62,7 @@ module.exports = function crashlogger(err, description, data = null) { text += `again with this stack trace:\n${stack}`; } else { try { + // tslint:disable-next-line:no-implicit-dependencies transport = require('nodemailer').createTransport(Config.crashguardemail.options); } catch (e) { throw new Error("Failed to start nodemailer; are you sure you've configured Config.crashguardemail correctly?"); @@ -82,7 +76,7 @@ module.exports = function crashlogger(err, description, data = null) { to: Config.crashguardemail.to, subject: Config.crashguardemail.subject, text, - }, /** @param {?Error} err */ err => { + }, (err: Error | null) => { if (err) console.error(`Error sending email: ${err}`); }); } diff --git a/lib/dashycode.ts b/lib/dashycode.ts new file mode 100644 index 0000000000000..02242fda70686 --- /dev/null +++ b/lib/dashycode.ts @@ -0,0 +1,316 @@ +/** + * Dashycode! + * + * Encodes a string in a restricted string containing only alphanumeric + * characters and dashes. + * + * (The name is a riff on Punycode, which is what I originally wanted + * to use for this purpose, but it turns out Punycode does not work on + * arbitrary strings.) + * + * @author Guangcong Luo + * @license MIT + */ + +const CODE_MAP = "23456789abcdefghijkmnpqrstuvwxyz"; +const UNSAFE_MAP = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; + +// chunk types: +// 0b00 = 0x0 = block separator ("wait until next dash") +// 0b01 = 0x1 = capitalize +// 0b1_01 = 0x5 = specify capitalization of next 8 alphabetic chars of safe part (8 more bits) +// 0b0_01 = 0x1 = short for 0b00000001_1_01 (capitalize first letter of next 8 alpha chars of safe part) +// 0b10 = 0x2 = ASCII in UNSAFE_MAP (5 more bits) +// 0b11 = 0x3 = other +// 0b0_11 = 0x3 = space +// 0b1_11 = 0x7 = UTF-16 (16 more bits) + +/** + * An object representing a Dashycode bitstream. + * The stream can be either a read stream or a write stream, but not + * both simultaneously. + */ +interface DashyStream { + codeBuf: string; + buf: number; + bufLength: number; +} + +function streamWrite(stream: DashyStream, writeBufLength: number, writeBuf: number) { + stream.buf += (writeBuf << stream.bufLength); + stream.bufLength += writeBufLength; + while (stream.bufLength >= 5) { + stream.codeBuf += CODE_MAP.charAt(stream.buf & 0x1F); + stream.buf >>= 5; + stream.bufLength -= 5; + } +} + +function streamGetCode(stream: DashyStream) { + const buf = stream.codeBuf + CODE_MAP.charAt(stream.buf); + + // truncate trailing `2`s (0b00000 chunks) + let end2Len = 0; + while (buf.charAt(buf.length - 1 - end2Len) === '2') end2Len++; + return end2Len ? buf.slice(0, -end2Len) : buf; +} + +function streamPeek(stream: DashyStream, readLength: number, readMask: number = 0xFFFF >> (16 - readLength)) { + while (stream.bufLength < readLength && stream.codeBuf.length) { + const next5Bits = CODE_MAP.indexOf(stream.codeBuf.charAt(0)); + if (next5Bits < 0) throw new Error("Invalid character in coded buffer"); + stream.codeBuf = stream.codeBuf.slice(1); + stream.buf += next5Bits << stream.bufLength; + stream.bufLength += 5; + } + return stream.buf & readMask; +} + +function streamRead(stream: DashyStream, readLength: number, readMask: number = 0xFFFF >> (16 - readLength)) { + const output = streamPeek(stream, readLength, readMask); + // Note: bufLength can go negative! Streams have infinite trailing 0s + stream.buf >>= readLength; + stream.bufLength -= readLength; + return output; +} + +export function encode(str: string, allowCaps: boolean = false) { + if (!str) return '0--0'; + let safePart = ''; + let unsafeStream: DashyStream = { + codeBuf: '', + buf: 0x0, + bufLength: 0, + }; + let isSafe = true; + let alphaIndex = 0; + let capBuffer = 0x0; + for (let i = 0; i < str.length + 1; i++) { + let curCharCode = str.charCodeAt(i); + const isLowercase = (97 <= curCharCode && curCharCode <= 122); // a-z + const isUppercase = (65 <= curCharCode && curCharCode <= 90); // A-Z + const isNumeric = (48 <= curCharCode && curCharCode <= 57); // 0-9 + if (capBuffer && ( + !(isLowercase || isUppercase || isNumeric) || + alphaIndex >= 8 || + i === str.length + )) { + // flush cap buffer + if (capBuffer === 0xD) { + streamWrite(unsafeStream, 3, 0x1); + } else { + streamWrite(unsafeStream, 11, capBuffer); + } + alphaIndex -= 8; + capBuffer = 0x0; + } + if (i === str.length) break; + if (isLowercase || isUppercase || isNumeric) { + if (alphaIndex < 0) throw new Error("alphaIndex should be non-negative here"); + if (!isSafe) { + if (capBuffer) throw new Error("capBuffer shouldn't exist here"); + streamWrite(unsafeStream, 2, 0x0); + isSafe = true; + } + if (isUppercase && !allowCaps) { + safePart += String.fromCharCode(curCharCode + 32); + while (alphaIndex >= 8) { + if (capBuffer) throw new Error("capBuffer shouldn't exist here"); + alphaIndex -= 8; + streamWrite(unsafeStream, 11, 0x5); + } + if (!capBuffer) capBuffer = 0x5; + capBuffer += 1 << (alphaIndex + 3); + } else { + safePart += str.charAt(i); + } + if (isUppercase || isLowercase) alphaIndex++; + continue; + } + if (capBuffer) throw new Error("capBuffer shouldn't exist here"); + alphaIndex = 0; + if (isSafe && curCharCode === 32) { // space + const nextCharCode = str.charCodeAt(i + 1); + if ((97 <= nextCharCode && nextCharCode <= 122) || // a-z + (65 <= nextCharCode && nextCharCode <= 90) || // A-Z + (48 <= nextCharCode && nextCharCode <= 57)) { // 0-9 + safePart += '-'; + streamWrite(unsafeStream, 2, 0x0); + continue; + } + } + if (isSafe) { + safePart += '-'; + isSafe = false; + } + let unsafeMapIndex = -1; + if (curCharCode === 0) { + streamWrite(unsafeStream, 2, 0x0); + } else if (curCharCode === 32) { // space + streamWrite(unsafeStream, 3, 0x3); + // tslint:disable-next-line:no-conditional-assignment + } else if ((unsafeMapIndex = UNSAFE_MAP.indexOf(str.charAt(i))) >= 0) { + curCharCode = (unsafeMapIndex << 2) + 0x2; + streamWrite(unsafeStream, 7, curCharCode); + } else { + curCharCode = (curCharCode << 2) + 0x7; + streamWrite(unsafeStream, 19, curCharCode); + } + } + let unsafePart = streamGetCode(unsafeStream); + if (safePart.charAt(0) === '-') { + safePart = safePart.slice(1); + unsafePart = unsafePart + '2'; + } + if (safePart.slice(-1) === '-') { + safePart = safePart.slice(0, -1); + } + if (!safePart) { + safePart = '0'; + unsafePart = '0' + unsafePart; + if (unsafePart.slice(-1) === '2') unsafePart = unsafePart.slice(0, -1); + } + if (!unsafePart) return safePart; + return safePart + '--' + unsafePart; +} + +export function decode(codedStr: string) { + let str = ''; + let lastDashIndex = codedStr.lastIndexOf('--'); + if (lastDashIndex < 0) { + // the regular decoder can also handle this case; but this should + // be faster + return codedStr.replace(/-/g, ' '); + } + if (codedStr.charAt(lastDashIndex + 2) === '0') { + if (codedStr.charAt(0) !== '0' || lastDashIndex !== 1) { + throw new Error("Invalid Dashycode"); + } + lastDashIndex -= 1; + codedStr = '--' + codedStr.slice(4); + } + if (codedStr.slice(-1) === '2') { + codedStr = '-' + codedStr.slice(0, -1); + lastDashIndex += 1; + } + let unsafeStream: DashyStream = { + codeBuf: codedStr.slice(lastDashIndex + 2), + buf: 0x0, + bufLength: 0, + }; + /** + * Status: + * 1 : awaiting next read + * 0 : assume all-lowercase + * other: 1 followed by n bits, describing the capitalization of the + * next n bits of alphabetic characters + */ + let capBuffer = 1; + for (let i = 0; i < lastDashIndex + 1; i++) { + let curChar = codedStr.charAt(i); + if (curChar !== '-') { + // safe char + const curCharCode = codedStr.charCodeAt(i); + const isLowercase = (97 <= curCharCode && curCharCode <= 122); // a-z + if (isLowercase) { + if (capBuffer === 1) { + capBuffer = 0; + if (streamPeek(unsafeStream, 2, 0x3) === 0x1) { + switch (streamRead(unsafeStream, 3, 0x7)) { + case 0x5: + capBuffer = streamRead(unsafeStream, 8, 0xFF) + 0x100; + break; + case 0x1: + capBuffer = 0x101; + break; + } + } + } + const toCapitalize = capBuffer & 0x1; + capBuffer >>= 1; + if (toCapitalize) { + curChar = String.fromCharCode(curCharCode - 32); + } + } + str += curChar; + } else { + capBuffer = 1; + // pull out the next unsafe string + let isEmpty = true; + do { + switch (streamRead(unsafeStream, 2, 0x3)) { + case 0x0: + // go back to parsing safe chars + curChar = ''; + break; + case 0x1: + throw new Error("Invalid capitalization token"); + case 0x2: + curChar = UNSAFE_MAP.charAt(streamRead(unsafeStream, 5, 0x1F)); + isEmpty = false; + break; + case 0x3: + if (streamRead(unsafeStream, 1, 0x1)) { + curChar = String.fromCharCode(streamRead(unsafeStream, 16, 0xFFFF)); + } else { + curChar = ' '; + } + isEmpty = false; + break; + } + str += curChar; + } while (curChar); + if (isEmpty && i !== lastDashIndex) str += ' '; + } + } + return str; +} + +export function vizStream(codeBuf: string, translate: boolean = true) { + let spacedStream = ''; + if (codeBuf.charAt(0) === '0') { + codeBuf = codeBuf.slice(1); + spacedStream = ' [no safe chars]' + spacedStream; + } + if (codeBuf.slice(-1) === '2') { + codeBuf = codeBuf.slice(0, -1); + spacedStream = ' [start unsafe]' + spacedStream; + } + let stream: DashyStream = { + codeBuf, + buf: 0x0, + bufLength: 0, + }; + + function vizBlock(s: DashyStream, bufLen: number) { + const buf = streamRead(s, bufLen); + // @ts-ignore + return buf.toString(2).padStart(bufLen, '0'); + } + + while (stream.bufLength > 0 || stream.codeBuf) { + switch (streamRead(stream, 2)) { + case 0x0: + spacedStream = (translate ? ' |' : ' 00') + spacedStream; + break; + case 0x1: + if (streamRead(stream, 1)) { + spacedStream = ' ' + vizBlock(stream, 8) + (translate ? '-cap' : '_1_01') + spacedStream; + } else { + spacedStream = (translate ? ' capfirst' : ' 0_01') + spacedStream; + } + break; + case 0x2: + spacedStream = ' ' + vizBlock(stream, 5) + (translate ? '-ascii' : '_10') + spacedStream; + break; + case 0x3: + if (streamRead(stream, 1)) { + spacedStream = ' ' + vizBlock(stream, 16) + (translate ? '-utf' : '_1_11') + spacedStream; + } else { + spacedStream = (translate ? ' space' : ' 0_11') + spacedStream; + } + break; + } + } + return spacedStream; +} diff --git a/lib/fs.ts b/lib/fs.ts new file mode 100644 index 0000000000000..31c5cde85e3d2 --- /dev/null +++ b/lib/fs.ts @@ -0,0 +1,431 @@ +/** + * FS + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * An abstraction layer around Node's filesystem. + * + * Advantages: + * - write() etc do nothing in unit tests + * - paths are always relative to PS's base directory + * - Promises (seriously wtf Node Core what are you thinking) + * - PS-style API: FS("foo.txt").write("bar") for easier argument order + * - mkdirp + * + * FS is used nearly everywhere, but exceptions include: + * - crashlogger.js - in case the crash is in here + * - repl.js - which use Unix sockets out of this file's scope + * - launch script - happens before modules are loaded + * - sim/ - intended to be self-contained + * + * @author Guangcong Luo + * @license MIT + */ + +'use strict'; + +import * as fs from 'fs'; +import * as pathModule from 'path'; +import { ReadStream, WriteStream } from './streams'; + +const ROOT_PATH = pathModule.resolve(__dirname, '..'); + +interface PendingUpdate { + isWriting: boolean; // true: waiting on a call to FS.write, false: waiting on a throttle + pendingDataFetcher: (() => string | Buffer) | null; + pendingOptions: object | null; + throttleTime: number; // throttling until time (0 for no throttle) + throttleTimer: NodeJS.Timer | null; +} + +const pendingUpdates: Map = new Map(); + +class FSPath { + path: string; + + constructor(path: string) { + this.path = pathModule.resolve(ROOT_PATH, path); + } + + parentDir() { + return new FSPath(pathModule.dirname(this.path)); + } + + read(options: AnyObject | string = 'utf8'): Promise { + if (typeof options !== 'string' && options.encoding === undefined) { + options.encoding = 'utf8'; + } + return new Promise((resolve, reject) => { + fs.readFile(this.path, options, (err, data) => { + err ? reject(err) : resolve(data as string); + }); + }); + } + + readSync(options: AnyObject | string = 'utf8'): string { + if (typeof options !== 'string' && options.encoding === undefined) { + options.encoding = 'utf8'; + } + return fs.readFileSync(this.path, options) as string; + } + + readBuffer(options: AnyObject | string = {}): Promise { + return new Promise((resolve, reject) => { + fs.readFile(this.path, options, (err, data) => { + err ? reject(err) : resolve(data as Buffer); + }); + }); + } + + readBufferSync(options: AnyObject | string = {}) { + return fs.readFileSync(this.path, options) as Buffer; + } + + readIfExists(): Promise { + return new Promise((resolve, reject) => { + fs.readFile(this.path, 'utf8', (err, data) => { + if (err && err.code === 'ENOENT') return resolve(''); + err ? reject(err) : resolve(data); + }); + }); + } + + readIfExistsSync() { + try { + return fs.readFileSync(this.path, 'utf8'); + } catch (err) { + if (err.code !== 'ENOENT') throw err; + } + return ''; + } + + write(data: string | Buffer, options: object = {}) { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.writeFile(this.path, data, options, err => { + err ? reject(err) : resolve(); + }); + }); + } + + writeSync(data: string | Buffer, options: object = {}) { + if (Config.nofswriting) return; + return fs.writeFileSync(this.path, data, options); + } + + /** + * Writes to a new file before renaming to replace an old file. If + * the process crashes while writing, the old file won't be lost. + * Does not protect against simultaneous writing; use writeUpdate + * for that. + */ + async safeWrite(data: string | Buffer, options: object = {}) { + await FS(this.path + '.NEW').write(data, options); + await FS(this.path + '.NEW').rename(this.path); + } + + safeWriteSync(data: string | Buffer, options: object = {}) { + FS(this.path + '.NEW').writeSync(data, options); + FS(this.path + '.NEW').renameSync(this.path); + } + + waitUntil(time: number): Promise { + return new Promise(resolve => { + setTimeout(() => resolve(), time - Date.now()); + }); + } + + /** + * Safest way to update a file with in-memory state. Pass a callback + * that fetches the data to be written. It will write an update, + * avoiding race conditions. The callback may not necessarily be + * called, if `writeUpdate` is called many times in a short period. + * + * `options.throttle`, if it exists, will make sure updates are not + * written more than once every `options.throttle` milliseconds. + * + * No synchronous version because there's no risk of race conditions + * with synchronous code; just use `safeWriteSync`. + */ + writeUpdate(dataFetcher: () => string | Buffer, options: object = {}) { + if (Config.nofswriting) return; + let pendingUpdate: PendingUpdate | undefined = pendingUpdates.get(this.path); + + // @ts-ignore + const throttleTime = options.throttle ? Date.now() + options.throttle : 0; + + if (pendingUpdate) { + pendingUpdate.pendingDataFetcher = dataFetcher; + pendingUpdate.pendingOptions = options; + if (pendingUpdate.throttleTimer && throttleTime < pendingUpdate.throttleTime) { + pendingUpdate.throttleTime = throttleTime; + clearTimeout(pendingUpdate.throttleTimer); + pendingUpdate.throttleTimer = setTimeout(() => this.checkNextUpdate(), throttleTime - Date.now()); + } + return; + } + + this.writeUpdateNow(dataFetcher, options); + } + + writeUpdateNow(dataFetcher: () => string | Buffer, options: object) { + // @ts-ignore + const throttleTime = options.throttle ? Date.now() + options.throttle : 0; + const update = { + isWriting: true, + pendingDataFetcher: null, + pendingOptions: null, + throttleTime, + throttleTimer: null, + }; + pendingUpdates.set(this.path, update); + this.safeWrite(dataFetcher(), options).then(() => this.finishUpdate()); + } + checkNextUpdate() { + let pendingUpdate = pendingUpdates.get(this.path); + if (!pendingUpdate) throw new Error(`FS: Pending update not found`); + if (pendingUpdate.isWriting) throw new Error(`FS: Conflicting update`); + + const {pendingDataFetcher: dataFetcher, pendingOptions: options} = pendingUpdate; + if (!dataFetcher || !options) { + // no pending update + pendingUpdates.delete(this.path); + return; + } + + this.writeUpdateNow(dataFetcher, options); + } + finishUpdate() { + let pendingUpdate = pendingUpdates.get(this.path); + if (!pendingUpdate) throw new Error(`FS: Pending update not found`); + if (!pendingUpdate.isWriting) throw new Error(`FS: Conflicting update`); + + pendingUpdate.isWriting = false; + const throttleTime = pendingUpdate.throttleTime; + if (!throttleTime || throttleTime < Date.now()) { + this.checkNextUpdate(); + return; + } + + pendingUpdate.throttleTimer = setTimeout(() => this.checkNextUpdate(), throttleTime - Date.now()); + } + + append(data: string | Buffer, options: object = {}) { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.appendFile(this.path, data, options, err => { + err ? reject(err) : resolve(); + }); + }); + } + + appendSync(data: string | Buffer, options: object = {}) { + if (Config.nofswriting) return; + return fs.appendFileSync(this.path, data, options); + } + + symlinkTo(target: string) { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.symlink(target, this.path, err => { + err ? reject(err) : resolve(); + }); + }); + } + + symlinkToSync(target: string) { + if (Config.nofswriting) return; + return fs.symlinkSync(target, this.path); + } + + rename(target: string) { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.rename(this.path, target, err => { + err ? reject(err) : resolve(); + }); + }); + } + + renameSync(target: string) { + if (Config.nofswriting) return; + return fs.renameSync(this.path, target); + } + + readdir(): Promise { + return new Promise((resolve, reject) => { + fs.readdir(this.path, (err, data) => { + err ? reject(err) : resolve(data); + }); + }); + } + + readdirSync() { + return fs.readdirSync(this.path); + } + + createReadStream() { + return new FileReadStream(this.path); + } + + createWriteStream(options = {}): WriteStream { + if (Config.nofswriting) { + // @ts-ignore + return new WriteStream({write() {}}); + } + // @ts-ignore + return new WriteStream(fs.createWriteStream(this.path, options)); + } + + createAppendStream(options = {}): WriteStream { + if (Config.nofswriting) { + // @ts-ignore + return new WriteStream({write() {}}); + } + // @ts-ignore + options.flags = options.flags || 'a'; + // @ts-ignore + return new WriteStream(fs.createWriteStream(this.path, options)); + } + + unlinkIfExists() { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.unlink(this.path, err => { + if (err && err.code === 'ENOENT') return resolve(); + err ? reject(err) : resolve(); + }); + }); + } + + unlinkIfExistsSync() { + if (Config.nofswriting) return; + try { + fs.unlinkSync(this.path); + } catch (err) { + if (err.code !== 'ENOENT') throw err; + } + } + + mkdir(mode: string | number = 0o755) { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.mkdir(this.path, mode, err => { + err ? reject(err) : resolve(); + }); + }); + } + + mkdirSync(mode: string | number = 0o755) { + if (Config.nofswriting) return; + return fs.mkdirSync(this.path, mode); + } + + mkdirIfNonexistent(mode: string | number = 0o755) { + if (Config.nofswriting) return Promise.resolve(); + return new Promise((resolve, reject) => { + fs.mkdir(this.path, mode, err => { + if (err && err.code === 'EEXIST') return resolve(); + err ? reject(err) : resolve(); + }); + }); + } + + mkdirIfNonexistentSync(mode: string | number = 0o755) { + if (Config.nofswriting) return; + try { + fs.mkdirSync(this.path, mode); + } catch (err) { + if (err.code !== 'EEXIST') throw err; + } + } + + /** + * Creates the directory (and any parent directories if necessary). + * Does not throw if the directory already exists. + */ + async mkdirp(mode: string | number = 0o755) { + try { + await this.mkdirIfNonexistent(mode); + } catch (err) { + if (err.code !== 'ENOENT') throw err; + await this.parentDir().mkdirp(mode); + await this.mkdirIfNonexistent(mode); + } + } + + /** + * Creates the directory (and any parent directories if necessary). + * Does not throw if the directory already exists. Synchronous. + */ + mkdirpSync(mode: string | number = 0o755) { + try { + this.mkdirIfNonexistentSync(mode); + } catch (err) { + if (err.code !== 'ENOENT') throw err; + this.parentDir().mkdirpSync(mode); + this.mkdirIfNonexistentSync(mode); + } + } + + /** Calls the callback if the file is modified. */ + onModify(callback: () => void) { + fs.watchFile(this.path, (curr, prev) => { + if (curr.mtime > prev.mtime) return callback(); + }); + } + + /** Clears callbacks added with onModify(). */ + unwatch() { + fs.unwatchFile(this.path); + } +} + +class FileReadStream extends ReadStream { + fd: Promise; + + constructor(file: string) { + super(); + this.fd = new Promise((resolve, reject) => { + fs.open(file, 'r', (err, fd) => err ? reject(err) : resolve(fd)); + }); + this.atEOF = false; + } + + // @ts-ignore + _read(size: number = 16384) { + return new Promise((resolve, reject) => { + if (this.atEOF) return resolve(false); + this.ensureCapacity(size); + this.fd.then(fd => { + fs.read(fd, this.buf, this.bufEnd, size, null, (err, bytesRead, buf) => { + if (err) return reject(err); + if (!bytesRead) { + this.atEOF = true; + this.resolvePush(); + return resolve(false); + } + this.bufEnd += bytesRead; + // throw new Error([...this.buf].map(x => x.toString(16)).join(' ')); + this.resolvePush(); + resolve(true); + }); + }); + }); + } + + _destroy() { + return new Promise(resolve => { + this.fd.then(fd => { + fs.close(fd, () => resolve()); + }); + }); + } +} + +function getFs(path: string) { + return new FSPath(path); +} + +export const FS = Object.assign(getFs, { + FileReadStream, +}); diff --git a/lib/process-manager.ts b/lib/process-manager.ts new file mode 100644 index 0000000000000..b350df093f7f8 --- /dev/null +++ b/lib/process-manager.ts @@ -0,0 +1,421 @@ +/** + * Process Manager + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This file abstract out multiprocess logic involved in several tasks. + * + * Child processes can be queried. + * + * @license MIT + */ + +import * as child_process from 'child_process'; +import * as path from 'path'; +import * as Streams from './streams'; + +const ROOT_DIR = path.resolve(__dirname, '..'); + +export const processManagers: ProcessManager[] = []; +export const disabled = false; + +class SubprocessStream extends Streams.ObjectReadWriteStream { + constructor(public process: ChildProcess, public taskId: number) { + super(); + this.process = process; + this.taskId = taskId; + this.process.send(`${taskId}\nNEW`); + } + _write(message: string) { + if (!this.process.connected) return; + this.process.send(`${this.taskId}\nWRITE\n${message}`); + // responses are handled in ProcessWrapper + } + _destroy() { + if (!this.process.connected) return; + this.process.send(`${this.taskId}\nDESTROY`); + } +} + +interface ProcessWrapper { + load: number; + release: () => Promise; +} + +/** Wraps the process object in the PARENT process. */ +export class QueryProcessWrapper { + process: ChildProcess; + taskId: number; + pendingTasks: Map void>; + pendingRelease: Promise | null; + resolveRelease: (() => void) | null; + + constructor(file: string) { + this.process = child_process.fork(file, [], {cwd: ROOT_DIR}); + this.taskId = 0; + this.pendingTasks = new Map(); + this.pendingRelease = null; + this.resolveRelease = null; + + this.process.on('message', (message: string) => { + const nlLoc = message.indexOf('\n'); + if (nlLoc <= 0) throw new Error(`Invalid response ${message}`); + if (message.slice(0, nlLoc) === 'THROW') { + const error = new Error(); + error.stack = message.slice(nlLoc + 1); + throw error; + } + + const taskId = parseInt(message.slice(0, nlLoc), 10); + const resolve = this.pendingTasks.get(taskId); + if (!resolve) throw new Error(`Invalid taskId ${message.slice(0, nlLoc)}`); + this.pendingTasks.delete(taskId); + resolve(JSON.parse(message.slice(nlLoc + 1))); + + if (this.resolveRelease && !this.load) this.destroy(); + }); + this.process.on('disconnect', () => { + this.destroy(); + }); + } + + get load() { + return this.pendingTasks.size; + } + + query(input: any): Promise { + this.taskId++; + const taskId = this.taskId; + this.process.send(`${taskId}\n${JSON.stringify(input)}`); + return new Promise(resolve => { + this.pendingTasks.set(taskId, resolve); + }); + } + + release(): Promise { + if (this.pendingRelease) return this.pendingRelease; + if (!this.load) { + this.destroy(); + } else { + this.pendingRelease = new Promise(resolve => { + this.resolveRelease = resolve; + }); + } + return this.pendingRelease as Promise; + } + + destroy() { + if (this.pendingRelease && !this.resolveRelease) { + // already destroyed + return; + } + this.process.disconnect(); + for (const resolver of this.pendingTasks.values()) { + // maybe we should track reject functions too... + resolver(''); + } + this.pendingTasks.clear(); + if (this.resolveRelease) { + this.resolveRelease(); + this.resolveRelease = null; + } else if (!this.pendingRelease) { + this.pendingRelease = Promise.resolve(); + } + } +} + +/** Wraps the process object in the PARENT process. */ +export class StreamProcessWrapper { + process: ChildProcess; + taskId: number; + activeStreams: Map; + pendingRelease: Promise | null; + resolveRelease: (() => void) | null; + + constructor(file: string) { + this.process = child_process.fork(file, [], {cwd: ROOT_DIR}); + this.taskId = 0; + this.activeStreams = new Map(); + this.pendingRelease = null; + this.resolveRelease = null; + + this.process.on('message', (message: string) => { + let nlLoc = message.indexOf('\n'); + if (nlLoc <= 0) throw new Error(`Invalid response ${message}`); + if (message.slice(0, nlLoc) === 'THROW') { + const error = new Error(); + error.stack = message.slice(nlLoc + 1); + throw error; + } + + const taskId = parseInt(message.slice(0, nlLoc), 10); + const stream = this.activeStreams.get(taskId); + if (!stream) throw new Error(`Invalid taskId ${message.slice(0, nlLoc)}`); + + message = message.slice(nlLoc + 1); + nlLoc = message.indexOf('\n'); + if (nlLoc < 0) nlLoc = message.length; + const messageType = message.slice(0, nlLoc); + message = message.slice(nlLoc + 1); + + if (messageType === 'END') { + stream.end(); + this.deleteStream(taskId); + } else if (messageType === 'PUSH') { + stream.push(message); + } else if (messageType === 'THROW') { + const error = new Error(); + error.stack = message; + throw error; + } else { + throw new Error(`Unrecognized messageType ${messageType}`); + } + }); + this.process.on('disconnect', () => { + this.destroy(); + }); + } + + deleteStream(taskId: number) { + this.activeStreams.delete(taskId); + // try to release + if (this.resolveRelease && !this.load) this.destroy(); + } + + get load() { + return this.activeStreams.size; + } + + createStream(): SubprocessStream { + this.taskId++; + const taskId = this.taskId; + const stream = new SubprocessStream(this.process, taskId); + this.activeStreams.set(taskId, stream); + return stream; + } + + release(): Promise { + if (this.pendingRelease) return this.pendingRelease; + if (!this.load) { + this.destroy(); + } else { + this.pendingRelease = new Promise(resolve => { + this.resolveRelease = resolve; + }); + } + return this.pendingRelease as Promise; + } + + destroy() { + if (this.pendingRelease && !this.resolveRelease) { + // already destroyed + return; + } + this.process.disconnect(); + for (const stream of this.activeStreams.values()) { + stream.destroy(); + } + this.activeStreams.clear(); + if (this.resolveRelease) { + this.resolveRelease(); + this.resolveRelease = null; + } else if (!this.pendingRelease) { + this.pendingRelease = Promise.resolve(); + } + } +} + +/** + * A ProcessManager wraps a query function: A function that takes a + * string and returns a string or Promise. + */ +export class ProcessManager { + processes: ProcessWrapper[]; + releasingProcesses: ProcessWrapper[]; + // @ts-ignore + module: NodeJs.Module; + filename: string; + basename: string; + isParentProcess: boolean; + + // @ts-ignore + constructor(module: NodeJs.Module) { + this.processes = []; + this.releasingProcesses = []; + this.module = module; + this.filename = module.filename; + this.basename = path.basename(module.filename); + this.isParentProcess = (process.mainModule !== module || !process.send); + + this.listen(); + } + acquire() { + if (!this.processes.length) { + return null; + } + let lowestLoad = this.processes[0]; + for (const process of this.processes) { + if (process.load < lowestLoad.load) { + lowestLoad = process; + } + } + return lowestLoad; + } + unspawn() { + for (const process of this.processes) { + process.release().then(() => { + const index = this.releasingProcesses.indexOf(process); + if (index >= 0) { + this.releasingProcesses.splice(index, 1); + } + }); + } + this.releasingProcesses = this.releasingProcesses.concat(this.processes); + this.processes = []; + } + spawn(count = 1) { + if (!this.isParentProcess) return; + if (disabled) return; + while (this.processes.length < count) { + this.processes.push(this.createProcess()); + } + } + respawn(count: number | null = null) { + if (count === null) count = this.processes.length; + this.unspawn(); + this.spawn(count); + } + createProcess(): ProcessWrapper { + throw new Error(`implemented by subclass`); + } + listen() { + throw new Error(`implemented by subclass`); + } + destroy() { + const index = processManagers.indexOf(this); + if (index) processManagers.splice(index, 1); + this.unspawn(); + } +} + +export class QueryProcessManager extends ProcessManager { + // tslint:disable-next-line:variable-name + _query: (input: any) => any; + + constructor(module: NodeJS.Module, query: (input: any) => any) { + super(module); + this._query = query; + + processManagers.push(this); + } + query(input: any) { + const process = this.acquire() as QueryProcessWrapper; + if (!process) return Promise.resolve(this._query(input)); + return process.query(input); + } + createProcess() { + return new QueryProcessWrapper(this.filename); + } + listen() { + if (this.isParentProcess) return; + // child process + process.on('message', async (message: string) => { + let nlLoc = message.indexOf('\n'); + if (nlLoc <= 0) throw new Error(`Invalid response ${message}`); + const taskId = message.slice(0, nlLoc); + message = message.slice(nlLoc + 1); + + if (taskId.startsWith('EVAL')) { + /* tslint:disable:no-eval */ + // @ts-ignore guaranteed to be defined here + process.send(`${taskId}\n` + eval(message)); + /* tslint:enable:no-eval */ + return; + } + + const response = await this._query(JSON.parse(message)); + // @ts-ignore guaranteed to be defined here + process.send(`${taskId}\n${JSON.stringify(response)}`); + }); + process.on('disconnect', () => { + process.exit(); + }); + } +} + +export class StreamProcessManager extends ProcessManager { + /* taskid: stream used only in child process */ + activeStreams: Map; + // tslint:disable-next-line:variable-name + _createStream: () => Streams.ObjectReadWriteStream; + + constructor(module: NodeJS.Module, createStream: () => Streams.ObjectReadWriteStream) { + super(module); + this.activeStreams = new Map(); + this._createStream = createStream; + + processManagers.push(this); + } + createStream() { + const process = this.acquire() as StreamProcessWrapper; + if (!process) return this._createStream(); + return process.createStream(); + } + createProcess() { + return new StreamProcessWrapper(this.filename); + } + async pipeStream(taskId: string, stream: Streams.ObjectReadStream) { + /* tslint:disable */ + let value, done; + while (({value, done} = await stream.next(), !done)) { + // @ts-ignore Guaranteed to be a child process + process.send(`${taskId}\nPUSH\n${value}`); + } + /* tslint:enable */ + // @ts-ignore Guaranteed to be a child process + process.send(`${taskId}\nEND`); + this.activeStreams.delete(taskId); + } + listen() { + if (this.isParentProcess) return; + // child process + process.on('message', async (message: string) => { + let nlLoc = message.indexOf('\n'); + if (nlLoc <= 0) throw new Error(`Invalid request ${message}`); + const taskId = message.slice(0, nlLoc); + const stream = this.activeStreams.get(taskId); + + message = message.slice(nlLoc + 1); + nlLoc = message.indexOf('\n'); + if (nlLoc < 0) nlLoc = message.length; + const messageType = message.slice(0, nlLoc); + message = message.slice(nlLoc + 1); + + if (taskId.startsWith('EVAL')) { + /* tslint:disable:no-eval */ + // @ts-ignore guaranteed to be a child process + process.send(`${taskId}\n` + eval(message)); + /* tslint:enable:no-eval */ + return; + } + + if (messageType === 'NEW') { + if (stream) throw new Error(`NEW: taskId ${taskId} already exists`); + const newStream = this._createStream(); + this.activeStreams.set(taskId, newStream); + this.pipeStream(taskId, newStream); + } else if (messageType === 'DESTROY') { + if (!stream) throw new Error(`DESTROY: Invalid taskId ${taskId}`); + stream.destroy(); + this.activeStreams.delete(taskId); + } else if (messageType === 'WRITE') { + if (!stream) throw new Error(`WRITE: Invalid taskId ${taskId}`); + stream.write(message); + } else { + throw new Error(`Unrecognized messageType ${messageType}`); + } + }); + process.on('disconnect', () => { + process.exit(); + }); + } +} diff --git a/lib/repl.ts b/lib/repl.ts new file mode 100644 index 0000000000000..f744b18b013f0 --- /dev/null +++ b/lib/repl.ts @@ -0,0 +1,119 @@ +/** + * REPL + * + * Documented in logs/repl/README.md + * https://github.com/Zarel/Pokemon-Showdown/blob/master/logs/repl/README.md + * + * @author kota + * @license MIT + */ + +import * as fs from 'fs'; +import * as net from 'net'; +import * as path from 'path'; +import * as repl from 'repl'; + +export const Repl = new class { + /** + * Contains the pathnames of all active REPL sockets. + */ + socketPathnames: Set = new Set(); + + listenersSetup: boolean = false; + + setupListeners() { + if (Repl.listenersSetup) return; + Repl.listenersSetup = true; + // Clean up REPL sockets and child processes on forced exit. + process.once('exit', code => { + Repl.socketPathnames.forEach(s => { + try { + fs.unlinkSync(s); + } catch (e) {} + }); + if (code === 129 || code === 130) { + process.exitCode = 0; + } + }); + if (!process.listeners('SIGHUP').length) { + process.once('SIGHUP', () => process.exit(128 + 1)); + } + if (!process.listeners('SIGINT').length) { + process.once('SIGINT', () => process.exit(128 + 2)); + } + } + + /** + * 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 + * non-global context. + */ + start(filename: string, evalFunction: (input: string) => any) { + if ('repl' in Config && !Config.repl) return; + + // TODO: Windows does support the REPL when using named pipes. For now, + // this only supports UNIX sockets. + if (process.platform === 'win32') return; + + Repl.setupListeners(); + + if (filename === 'app') { + // Clean up old REPL sockets. + let directory = path.dirname(path.resolve(__dirname, '..', Config.replsocketprefix || 'logs/repl', 'app')); + for (let file of fs.readdirSync(directory)) { + let pathname = path.resolve(directory, file); + let stat = fs.statSync(pathname); + if (!stat.isSocket()) continue; + + let socket = net.connect(pathname, () => { + socket.end(); + socket.destroy(); + }).on('error', () => { + fs.unlink(pathname, () => {}); + }); + } + } + + let server = net.createServer(socket => { + repl.start({ + input: socket, + output: socket, + // tslint:disable-next-line:ban-types + eval(cmd: string, context: any, unusedFilename: string, callback: Function): any { + try { + return callback(null, evalFunction(cmd)); + } catch (e) { + return callback(e); + } + }, + }).on('exit', () => socket.end()); + socket.on('error', () => socket.destroy()); + }); + + let pathname = path.resolve(__dirname, '..', Config.replsocketprefix || 'logs/repl', filename); + server.listen(pathname, () => { + fs.chmodSync(pathname, Config.replsocketmode || 0o600); + Repl.socketPathnames.add(pathname); + }); + + server.once('error', (err: NodeJS.ErrnoException) => { + if (err.code === "EADDRINUSE") { + // tslint:disable-next-line:variable-name + fs.unlink(pathname, _err => { + if (_err && _err.code !== "ENOENT") { + require('./crashlogger')(_err, `REPL: ${filename}`); + } + server.close(); + }); + } else { + require('./crashlogger')(err, `REPL: ${filename}`); + server.close(); + } + }); + + server.once('close', () => { + Repl.socketPathnames.delete(pathname); + Repl.start(filename, evalFunction); + }); + } +}; diff --git a/lib/streams.ts b/lib/streams.ts new file mode 100644 index 0000000000000..708aaf2a9a3d9 --- /dev/null +++ b/lib/streams.ts @@ -0,0 +1,666 @@ +/** + * Streams + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * The Node.js standard library's Streams are really hard to use. This + * offers a better stream API. + * + * Documented in STREAMS.md. + * + * @license MIT + */ + +const BUF_SIZE = 65536 * 4; + +export class ReadStream { + buf: Buffer; + bufStart: number; + bufEnd: number; + bufCapacity: number; + readSize: number; + atEOF: boolean; + encoding: string; + isReadable: boolean; + isWritable: boolean; + nodeReadableStream: NodeJS.ReadableStream | null; + nextPushResolver: (() => void) | null; + nextPush: Promise; + awaitingPush: boolean; + + constructor(optionsOrStreamLike: {[k: string]: any} | NodeJS.ReadableStream | string | Buffer = {}) { + this.buf = Buffer.allocUnsafe(BUF_SIZE); + this.bufStart = 0; + this.bufEnd = 0; + this.bufCapacity = BUF_SIZE; + this.readSize = 0; + this.atEOF = false; + this.encoding = 'utf8'; + this.isReadable = true; + this.isWritable = false; + this.nodeReadableStream = null; + this.nextPushResolver = null; + this.nextPush = new Promise(resolve => { + this.nextPushResolver = resolve; + }); + this.awaitingPush = false; + + let options; + if (typeof optionsOrStreamLike === 'string') { + options = {buffer: optionsOrStreamLike}; + } else if (optionsOrStreamLike instanceof Buffer) { + options = {buffer: optionsOrStreamLike}; + } else if (typeof (optionsOrStreamLike as any)._readableState === 'object') { + options = {nodeStream: optionsOrStreamLike as NodeJS.ReadableStream}; + } else { + options = optionsOrStreamLike; + } + if (options.nodeStream) { + const nodeStream: NodeJS.ReadableStream = options.nodeStream; + this.nodeReadableStream = nodeStream; + nodeStream.on('data', data => { + this.push(data); + }); + nodeStream.on('end', () => { + this.push(null); + }); + + options.read = function (this: ReadStream, unusedBytes: number) { + this.nodeReadableStream!.resume(); + }; + + options.pause = function (this: ReadStream, unusedBytes: number) { + this.nodeReadableStream!.pause(); + }; + } + + if (options.read) this._read = options.read; + if (options.pause) this._pause = options.pause; + if (options.destroy) this._destroy = options.read; + if (options.encoding) this.encoding = options.encoding; + if (options.buffer !== undefined) { + this.push(options.buffer); + this.push(null); + } + } + + get bufSize() { + return this.bufEnd - this.bufStart; + } + + moveBuf() { + if (this.bufStart !== this.bufEnd) { + this.buf.copy(this.buf, 0, this.bufStart, this.bufEnd); + } + this.bufEnd -= this.bufStart; + this.bufStart = 0; + } + + expandBuf(newCapacity = this.bufCapacity * 2) { + const newBuf = Buffer.allocUnsafe(newCapacity); + this.buf.copy(newBuf, 0, this.bufStart, this.bufEnd); + this.bufEnd -= this.bufStart; + this.bufStart = 0; + this.buf = newBuf; + } + + ensureCapacity(additionalCapacity: number) { + if (this.bufEnd + additionalCapacity <= this.bufCapacity) return; + const capacity = this.bufEnd - this.bufStart + additionalCapacity; + if (capacity <= this.bufCapacity) { + return this.moveBuf(); + } + let newCapacity = this.bufCapacity * 2; + while (newCapacity < capacity) newCapacity *= 2; + this.expandBuf(newCapacity); + } + + push(buf: Buffer | string | null, encoding: string = this.encoding) { + let size; + if (this.atEOF) return; + if (buf === null) { + this.atEOF = true; + this.resolvePush(); + return; + } else if (typeof buf === 'string') { + size = Buffer.byteLength(buf, encoding); + this.ensureCapacity(size); + this.buf.write(buf, this.bufEnd); + } else { + size = buf.length; + this.ensureCapacity(size); + buf.copy(this.buf, this.bufEnd); + } + this.bufEnd += size; + if (this.bufSize > this.readSize && size * 2 < this.bufSize) this._pause(); + this.resolvePush(); + } + + resolvePush() { + if (!this.nextPushResolver) throw new Error(`Push after end of read stream`); + this.nextPushResolver(); + if (this.atEOF) { + this.nextPushResolver = null; + return; + } + this.nextPush = new Promise(resolve => { + this.nextPushResolver = resolve; + }); + } + + _read(size: number = 0): void | Promise { + throw new Error(`ReadStream needs to be subclassed and the _read function needs to be implemented.`); + } + + _destroy() {} + _pause() {} + + async loadIntoBuffer(byteCount: number | null = null) { + if (byteCount === 0) return; + this.readSize = Math.max(byteCount || (this.bufSize + 1), this.readSize); + let bytes: number | null = this.readSize - this.bufSize; + if (bytes === Infinity || byteCount === null) bytes = null; + while (!this.atEOF && this.bufSize < this.readSize) { + if (bytes) this._read(bytes); + else this._read(); + await this.nextPush; + } + } + + async peek(byteCount: number | null = null, encoding: string = this.encoding) { + if (byteCount === null && this.bufSize) return this.buf.toString(encoding, this.bufStart, this.bufEnd); + await this.loadIntoBuffer(byteCount); + if (byteCount === null) return this.buf.toString(encoding, this.bufStart, this.bufEnd); + if (byteCount > this.bufSize) byteCount = this.bufSize; + if (!this.bufSize) return null; + return this.buf.toString(encoding, this.bufStart, this.bufStart + byteCount); + } + + async peekBuffer(byteCount: number | null = null) { + if (byteCount === null && this.bufSize) return this.buf.slice(this.bufStart, this.bufEnd); + await this.loadIntoBuffer(byteCount); + if (byteCount === null) return this.buf.slice(this.bufStart, this.bufEnd); + if (byteCount > this.bufSize) byteCount = this.bufSize; + if (!this.bufSize) return null; + return this.buf.slice(this.bufStart, this.bufStart + byteCount); + } + + async read(byteCount: number | string | null = null, encoding = this.encoding) { + if (typeof byteCount === 'string') { + encoding = byteCount; + byteCount = null; + } + const out = await this.peek(byteCount, encoding); + if (byteCount === null || byteCount >= this.bufSize) { + this.bufStart = 0; + this.bufEnd = 0; + } else { + this.bufStart += byteCount; + } + return out; + } + + async readBuffer(byteCount: number | null = null) { + const out = await this.peekBuffer(byteCount); + if (byteCount === null || byteCount >= this.bufSize) { + this.bufStart = 0; + this.bufEnd = 0; + } else { + this.bufStart += byteCount; + } + return out; + } + + async indexOf(symbol: string, encoding: string = this.encoding) { + let idx = this.buf.indexOf(symbol, this.bufStart, encoding); + while (!this.atEOF && (idx >= this.bufEnd || idx < 0)) { + await this.loadIntoBuffer(); + idx = this.buf.indexOf(symbol, this.bufStart, encoding); + } + if (idx >= this.bufEnd) return -1; + return idx - this.bufStart; + } + + async readAll(encoding = this.encoding) { + return (await this.read(Infinity, encoding)) || ''; + } + + peekAll(encoding = this.encoding) { + return this.peek(Infinity, encoding); + } + + async readDelimitedBy(symbol: string, encoding: string = this.encoding) { + if (this.atEOF && !this.bufSize) return null; + const idx = await this.indexOf(symbol, encoding); + if (idx < 0) { + return this.readAll(encoding); + } else { + const out = await this.read(idx, encoding); + this.bufStart += Buffer.byteLength(symbol, 'utf8'); + return out; + } + } + + async readLine(encoding = this.encoding) { + if (!encoding) throw new Error(`readLine must have an encoding`); + let line = await this.readDelimitedBy('\n', encoding); + if (line && line.endsWith('\r')) line = line.slice(0, -1); + return line; + } + + async destroy() { + this.atEOF = true; + this.bufStart = 0; + this.bufEnd = 0; + if (this.nextPushResolver) this.resolvePush(); + return this._destroy(); + } + + async next(byteCount: string | number | null = null) { + const value = await this.read(byteCount); + return {value, done: value === null}; + } + + async pipeTo(outStream: WriteStream, options: {noEnd?: boolean} = {}) { + /* tslint:disable */ + let value, done; + while (({value, done} = await this.next(), !done)) { + await outStream.write(value); + } + /* tslint:enable */ + if (!options.noEnd) outStream.end(); + } +} + +interface WriteStreamOptions { + writableState?: any; + nodeStream?: NodeJS.ReadableStream; + write?: (this: WriteStream, data: string | Buffer) => (Promise | undefined); + end?: () => Promise; +} + +export class WriteStream { + isReadable: boolean; + isWritable: true; + encoding: string; + nodeWritableStream: NodeJS.ReadableStream | null; + drainListeners: (() => void)[]; + + constructor(options: WriteStreamOptions = {}) { + this.isReadable = false; + this.isWritable = true; + this.encoding = 'utf8'; + this.nodeWritableStream = null; + this.drainListeners = []; + + if ((options as any)._writableState) { + // @ts-ignore + options = {nodeStream: options}; + } + if (options.nodeStream) { + const nodeStream: NodeJS.ReadableStream = options.nodeStream; + this.nodeWritableStream = nodeStream; + options.write = function (this: WriteStream, data: string | Buffer) { + // @ts-ignore + const result = this.nodeWritableStream.write(data); + if (result !== false) return undefined; + if (!this.drainListeners.length) { + // @ts-ignore + this.nodeWritableStream.once('drain', () => { + for (const listener of this.drainListeners) listener(); + this.drainListeners = []; + }); + } + return new Promise(resolve => { + this.drainListeners.push(resolve); + }); + }; + options.end = function () { + return new Promise(resolve => { + // @ts-ignore + this.nodeWritableStream.end(() => resolve()); + }); + }; + } + + if (options.write) this._write = options.write; + if (options.end) this._end = options.end; + } + + async write(chunk: Buffer | string | null): Promise { + if (chunk === null) { + await this.end(); + return false; + } + await this._write(chunk); + return true; + } + + async writeLine(chunk: string | null): Promise { + if (chunk === null) { + await this.end(); + return false; + } + return this.write(chunk + '\n'); + } + + _write(chunk: Buffer | string): void | Promise { + throw new Error(`WriteStream needs to be subclassed and the _write function needs to be implemented.`); + } + + _end(): void | Promise {} + + async end(chunk: string | null = null): Promise { + if (chunk) { + await this.write(chunk); + } + return this._end(); + } +} + +export class ReadWriteStream extends ReadStream { + constructor(options = {}) { + super(options); + this.isReadable = true; + this.isWritable = true; + } + + write(chunk: Buffer | string): Promise | void { + return this._write(chunk); + } + + writeLine(chunk: string): Promise | void { + return this.write(chunk + '\n'); + } + + _write(chunk: Buffer | string): Promise | void { + throw new Error(`WriteStream needs to be subclassed and the _write function needs to be implemented.`); + } + + /** In a ReadWriteStream, _read does not need to be implemented. */ + _read() {} + + _end(): void | Promise {} + + async end() { + return this._end(); + } +} + +export class ObjectReadStream { + buf: any[]; + readSize: number; + atEOF: boolean; + isReadable: boolean; + isWritable: boolean; + nodeReadableStream: NodeJS.ReadableStream | null; + nextPushResolver: (() => void) | null; + nextPush: Promise; + awaitingPush: boolean; + + constructor(optionsOrStreamLike: {[k: string]: any} | NodeJS.ReadableStream | any[] = {}) { + this.buf = []; + this.readSize = 0; + this.atEOF = false; + this.isReadable = true; + this.isWritable = false; + this.nodeReadableStream = null; + this.nextPushResolver = null; + this.nextPush = new Promise(resolve => { + this.nextPushResolver = resolve; + }); + this.awaitingPush = false; + + let options; + if (Array.isArray(optionsOrStreamLike)) { + options = {buffer: optionsOrStreamLike}; + } else if (typeof (optionsOrStreamLike as any)._readableState === 'object') { + options = {nodeStream: optionsOrStreamLike as NodeJS.ReadableStream}; + } else { + options = optionsOrStreamLike; + } + if (options.nodeStream) { + const nodeStream: NodeJS.ReadableStream = options.nodeStream; + this.nodeReadableStream = nodeStream; + nodeStream.on('data', data => { + this.push(data); + }); + nodeStream.on('end', () => { + this.push(null); + }); + + options.read = function (this: ReadStream, unusedBytes: number) { + this.nodeReadableStream!.resume(); + }; + + options.pause = function (this: ReadStream, unusedBytes: number) { + this.nodeReadableStream!.pause(); + }; + } + + if (options.read) this._read = options.read; + if (options.pause) this._pause = options.pause; + if (options.destroy) this._destroy = options.read; + if (options.buffer !== undefined) { + this.buf = options.buffer.slice(); + this.push(null); + } + } + + push(elem: any) { + if (this.atEOF) return; + if (elem === null) { + this.atEOF = true; + this.resolvePush(); + return; + } else { + this.buf.push(elem); + } + if (this.buf.length > this.readSize && this.buf.length >= 16) this._pause(); + this.resolvePush(); + } + + resolvePush() { + if (!this.nextPushResolver) throw new Error(`Push after end of read stream`); + this.nextPushResolver(); + if (this.atEOF) { + this.nextPushResolver = null; + return; + } + this.nextPush = new Promise(resolve => { + this.nextPushResolver = resolve; + }); + } + + _read(size: number = 0): void | Promise { + throw new Error(`ReadStream needs to be subclassed and the _read function needs to be implemented.`); + } + + _destroy() {} + _pause() {} + + async loadIntoBuffer(count: number = 1) { + if (this.buf.length >= count) return; + this.readSize = Math.max(count, this.readSize); + while (!this.atEOF && this.buf.length < this.readSize) { + let readResult = this._read(); + // @ts-ignore + if (readResult && readResult.then) { + await readResult; + } else { + await this.nextPush; + } + } + } + + async peek() { + if (this.buf.length) return this.buf[0]; + await this.loadIntoBuffer(); + return this.buf[0]; + } + + async read() { + if (this.buf.length) return this.buf.shift(); + await this.loadIntoBuffer(); + if (!this.buf.length) return null; + return this.buf.shift(); + } + + async peekArray(count: number | null = null) { + await this.loadIntoBuffer(count || 1); + if (count === null || count === Infinity) { + return this.buf.slice(); + } + return this.buf.slice(0, count); + } + + async readArray(count: number | null = null) { + let out = await this.peekArray(count); + this.buf = this.buf.slice(out.length); + return out; + } + + async readAll() { + await this.loadIntoBuffer(Infinity); + let out = this.buf; + this.buf = []; + return out; + } + + async peekAll() { + await this.loadIntoBuffer(Infinity); + return this.buf.slice(); + } + + async destroy() { + this.atEOF = true; + this.buf = []; + this.resolvePush(); + return this._destroy(); + } + + async next() { + const value = await this.read(); + return {value, done: value === null}; + } + + async pipeTo(outStream: WriteStream, options: {noEnd?: boolean} = {}) { + /* tslint:disable */ + let value, done; + while (({value, done} = await this.next(), !done)) { + await outStream.write(value); + } + /* tslint:enable */ + if (!options.noEnd) outStream.end(); + } +} + +interface ObjectWriteStreamOptions { + _writableState?: any; + nodeStream?: NodeJS.ReadableStream; + write?: (this: WriteStream, data: T) => Promise | undefined; + end?: () => Promise; +} + +export class ObjectWriteStream { + isReadable: boolean; + isWritable: true; + nodeWritableStream: NodeJS.ReadableStream | null; + + constructor(options: ObjectWriteStreamOptions = {}) { + this.isReadable = false; + this.isWritable = true; + this.nodeWritableStream = null; + + if (options._writableState) { + // @ts-ignore + options = {nodeStream: options}; + } + if (options.nodeStream) { + const nodeStream: NodeJS.ReadableStream = options.nodeStream; + this.nodeWritableStream = nodeStream; + + options.write = function (this: WriteStream, data: T) { + // @ts-ignore + const result = this.nodeWritableStream!.write(data); + if (result === false) { + return new Promise(resolve => { + // @ts-ignore + this.nodeWritableStream.once('drain', () => { + resolve(); + }); + }); + } + }; + + options.end = function () { + return new Promise(resolve => { + // @ts-ignore + this.nodeWritableStream.end(() => resolve()); + }); + }; + } + + if (options.write) this._write = options.write; + if (options.end) this._end = options.end; + } + + async write(elem: T | null): Promise { + if (elem === null) { + await this.end(); + return false; + } + await this._write(elem); + return true; + } + + _write(elem: T): void | Promise { + throw new Error(`WriteStream needs to be subclassed and the _write function needs to be implemented.`); + } + + _end(): void | Promise {} + + async end(elem: T | null = null): Promise { + if (elem) { + await this.write(elem); + } + return this._end(); + } +} + +interface ObjectReadWriteStreamOptions { + write?: (this: WriteStream, data: string) => Promise | undefined | void; + end?: () => Promise | undefined | void; +} + +export class ObjectReadWriteStream extends ObjectReadStream { + isReadable: true; + isWritable: true; + + constructor(options: ObjectReadWriteStreamOptions = {}) { + super(options); + this.isReadable = true; + this.isWritable = true; + if (options.write) this._write = options.write; + if (options.end) this._end = options.end; + } + + write(elem: any): void | Promise { + return this._write(elem); + } + + _write(elem: any): void | Promise { + throw new Error(`WriteStream needs to be subclassed and the _write function needs to be implemented.`); + } + /** In a ReadWriteStream, _read does not need to be implemented. */ + _read() {} + + _end(): void | Promise {} + + async end() { + return this._end(); + } +} + +export function readAll(nodeStream: NodeJS.ReadableStream, encoding?: any) { + return new ReadStream(nodeStream).readAll(encoding); +} diff --git a/loginserver.js b/loginserver.js deleted file mode 100644 index 5fea22f205f84..0000000000000 --- a/loginserver.js +++ /dev/null @@ -1,240 +0,0 @@ -/** - * Login server abstraction layer - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This file handles communicating with the login server. - * - * @license MIT license - */ - -'use strict'; - -const LOGIN_SERVER_TIMEOUT = 30000; -const LOGIN_SERVER_BATCH_TIME = 1000; - -const http = require("http"); -const url = require('url'); - -const FS = require('./fs'); - -const noop = () => null; - -/** - * A custom error type used when requests to the login server take too long. - */ -class TimeoutError extends Error {} -TimeoutError.prototype.name = TimeoutError.name; - -function parseJSON(json) { - if (json.startsWith(']')) json = json.substr(1); - let data = {error: null}; - try { - data.json = JSON.parse(json); - } catch (err) { - data.error = err; - } - return data; -} - -class LoginServerInstance { - constructor() { - this.uri = Config.loginserver; - this.requestQueue = []; - - this.requestTimer = null; - this.requestTimeoutTimer = null; - this.requestLog = ''; - this.lastRequest = 0; - this.openRequests = 0; - this.disabled = false; - } - - instantRequest(action, data, callback) { - if (typeof data === 'function') { - callback = data; - data = null; - } - if (this.openRequests > 5) { - setImmediate(callback, null, null, new RangeError("Request overflow")); - return; - } - this.openRequests++; - let dataString = ''; - if (data) { - for (let i in data) { - dataString += '&' + i + '=' + encodeURIComponent('' + data[i]); - } - } - let req = http.get(url.parse(this.uri + 'action.php?act=' + action + '&serverid=' + Config.serverid + '&servertoken=' + encodeURIComponent(Config.servertoken) + '&nocache=' + new Date().getTime() + dataString), res => { - let buffer = ''; - res.setEncoding('utf8'); - - res.on('data', chunk => { - buffer += chunk; - }); - - res.on('end', () => { - let data = parseJSON(buffer).json; - setImmediate(callback, data, res.statusCode); - this.openRequests--; - }); - }); - - req.on('error', error => { - setImmediate(callback, null, null, error); - this.openRequests--; - }); - - req.end(); - } - request(action, data, callback = noop) { - if (this.disabled) { - setImmediate(callback, null, null, new Error(`Login server connection disabled.`)); - return; - } - - // ladderupdate and mmr are the most common actions - // prepreplay is also common - if (this[action + 'Server']) { - return this[action + 'Server'].request(action, data, callback); - } - if (typeof data === 'function') { - callback = data; - data = null; - } - - if (!data) data = {}; - data.act = action; - data.callback = callback; - this.requestQueue.push(data); - this.requestTimerPoke(); - } - requestTimerPoke() { - // "poke" the request timer, i.e. make sure it knows it should make - // a request soon - - // if we already have it going or the request queue is empty no need to do anything - if (this.openRequests || this.requestTimer || !this.requestQueue.length) return; - - this.requestTimer = setTimeout(() => this.makeRequests(), LOGIN_SERVER_BATCH_TIME); - } - makeRequests() { - this.requestTimer = null; - let requests = this.requestQueue; - this.requestQueue = []; - - if (!requests.length) return; - - let requestCallbacks = []; - for (let i = 0, len = requests.length; i < len; i++) { - let request = requests[i]; - requestCallbacks[i] = request.callback; - delete request.callback; - } - - this.requestStart(requests.length); - let postData = 'serverid=' + Config.serverid + '&servertoken=' + encodeURIComponent(Config.servertoken) + '&nocache=' + new Date().getTime() + '&json=' + encodeURIComponent(JSON.stringify(requests)) + '\n'; - let requestOptions = url.parse(this.uri + 'action.php'); - requestOptions.method = 'post'; - requestOptions.headers = { - 'Content-Type': 'application/x-www-form-urlencoded', - 'Content-Length': postData.length, - }; - - let req = null; - - let hadError = false; - let onReqError = error => { - if (hadError) return; - hadError = true; - if (this.requestTimeoutTimer) { - clearTimeout(this.requestTimeoutTimer); - this.requestTimeoutTimer = null; - } - req.abort(); - for (let i = 0, len = requestCallbacks.length; i < len; i++) { - setImmediate(requestCallbacks[i], null, null, error); - } - this.requestEnd(error); - }; - - req = http.request(requestOptions, res => { - if (this.requestTimeoutTimer) { - clearTimeout(this.requestTimeoutTimer); - this.requestTimeoutTimer = null; - } - let buffer = ''; - res.setEncoding('utf8'); - - res.on('data', chunk => { - buffer += chunk; - }); - - let requestEnded = false; - let endReq = () => { - if (requestEnded) return; - requestEnded = true; - if (this.requestTimeoutTimer) { - clearTimeout(this.requestTimeoutTimer); - this.requestTimeoutTimer = null; - } - //console.log('RESPONSE: ' + buffer); - let data = parseJSON(buffer).json; - for (let i = 0, len = requestCallbacks.length; i < len; i++) { - if (data) { - setImmediate(requestCallbacks[i], data[i], res.statusCode); - } else { - setImmediate(requestCallbacks[i], null, res.statusCode, new Error("Corruption")); - } - } - this.requestEnd(); - }; - res.on('end', endReq); - res.on('close', endReq); - - this.requestTimeoutTimer = setTimeout(() => { - if (res.connection) res.connection.destroy(); - endReq(); - }, LOGIN_SERVER_TIMEOUT); - }); - - req.on('error', onReqError); - - req.setTimeout(LOGIN_SERVER_TIMEOUT, () => { - onReqError(new TimeoutError("Response not received")); - }); - - req.write(postData); - req.end(); - } - requestStart(size) { - this.lastRequest = Date.now(); - this.requestLog += ' | ' + size + ' rqs: '; - this.openRequests++; - } - requestEnd(error) { - this.openRequests = 0; - if (error && error instanceof TimeoutError) { - this.requestLog += 'TIMEOUT'; - } else { - this.requestLog += '' + ((Date.now() - this.lastRequest) / 1000) + 's'; - } - this.requestLog = this.requestLog.substr(-1000); - this.requestTimerPoke(); - } - getLog() { - return this.requestLog + (this.lastRequest ? ' (' + Chat.toDurationString(Date.now() - this.lastRequest) + ' since last request)' : ''); - } -} - -let LoginServer = module.exports = new LoginServerInstance(); - -LoginServer.TimeoutError = TimeoutError; - -if (Config.remoteladder) LoginServer.ladderupdateServer = new LoginServerInstance(); -LoginServer.prepreplayServer = new LoginServerInstance(); - -FS('./config/custom.css').onModify(() => { - LoginServer.request('invalidatecss', {}, () => {}); -}); -LoginServer.request('invalidatecss', {}, () => {}); diff --git a/logs/repl/README.md b/logs/repl/README.md index 98fad632a0ff4..cdd04b8ebd3ee 100644 --- a/logs/repl/README.md +++ b/logs/repl/README.md @@ -1,9 +1,9 @@ # repl directory -The REPL feature is disabled by default. +The REPL feature is enabled by default; it can be disabled in `config.js`. This directory is used by default to store the REPL sockets to all of showdown's processes. The intended uses of these REPL sockets are for debugging (especially when the server is seemingly frozen) and scripting. -You can use any tool capable of talking to Unix sockets such as `nc`. e.g. `nc -U app` +You can use any tool capable of talking to Unix sockets such as `nc`. e.g. `nc -U app`, replacing `app` with the name of any socket in this directory. diff --git a/mods/gen1/abilities.js b/mods/gen1/abilities.js deleted file mode 100644 index 53633d5db9683..0000000000000 --- a/mods/gen1/abilities.js +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Gen 1 had no abilities whatsoever. - * However, I'm adding the "None" ability to make it clear, since Showdown does show - * by default a possible abilities list when no ability is found on the Pokemon, - * and I want the mod to work with no Client changes and the least possible - * non-mod changes. - */ - -'use strict'; - -exports.BattleAbilities = { - "None": { - desc: "This Pokemon has no ability.", - shortDesc: "This Pokemon has no ability.", - id: "none", - name: "None", - rating: 1, - num: 1, - }, -}; diff --git a/mods/gen1/moves.js b/mods/gen1/moves.js deleted file mode 100644 index 366b6c3906669..0000000000000 --- a/mods/gen1/moves.js +++ /dev/null @@ -1,879 +0,0 @@ -/** - * A lot of Gen 1 moves have to be updated due to different mechanics. - * Some moves have had major changes, such as Bite's typing. - */ - -'use strict'; - -exports.BattleMovedex = { - acid: { - inherit: true, - target: "normal", - }, - amnesia: { - inherit: true, - desc: "Raises the user's Special by 2 stages.", - shortDesc: "Boosts the user's Special by 2.", - boosts: { - spd: 2, - spa: 2, - }, - }, - aurorabeam: { - inherit: true, - secondary: { - chance: 10, - boosts: { - atk: -1, - }, - }, - }, - bide: { - inherit: true, - priority: 0, - accuracy: true, - ignoreEvasion: true, - effect: { - duration: 2, - durationCallback: function (target, source, effect) { - return this.random(3, 4); - }, - onStart: function (pokemon) { - this.effectData.totalDamage = 0; - this.effectData.lastDamage = 0; - this.add('-start', pokemon, 'Bide'); - }, - onHit: function (target, source, move) { - if (source && source !== target && move.category !== 'Physical' && move.category !== 'Special') { - let damage = this.effectData.totalDamage; - this.effectData.totalDamage += damage; - this.effectData.lastDamage = damage; - this.effectData.sourcePosition = source.position; - this.effectData.sourceSide = source.side; - } - }, - onDamage: function (damage, target, source, move) { - if (!source || source.side === target.side) return; - if (!move || move.effectType !== 'Move') return; - if (!damage && this.effectData.lastDamage > 0) { - damage = this.effectData.totalDamage; - } - this.effectData.totalDamage += damage; - this.effectData.lastDamage = damage; - this.effectData.sourcePosition = source.position; - this.effectData.sourceSide = source.side; - }, - onAfterSetStatus: function (status, pokemon) { - // Sleep, freeze, and partial trap will just pause duration. - if (pokemon.volatiles['flinch']) { - this.effectData.duration++; - } else if (pokemon.volatiles['partiallytrapped']) { - this.effectData.duration++; - } else { - switch (status.id) { - case 'slp': - case 'frz': - this.effectData.duration++; - break; - } - } - }, - onBeforeMove: function (pokemon) { - if (this.effectData.duration === 1) { - if (!this.effectData.totalDamage) { - this.add('-fail', pokemon); - return false; - } - this.add('-end', pokemon, 'Bide'); - let target = this.effectData.sourceSide.active[this.effectData.sourcePosition]; - this.moveHit(target, pokemon, 'bide', {damage: this.effectData.totalDamage * 2}); - return false; - } - this.add('-activate', pokemon, 'Bide'); - return false; - }, - onDisableMove: function (pokemon) { - if (!pokemon.hasMove('bide')) { - return; - } - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id !== 'bide') { - pokemon.disableMove(moves[i].id); - } - } - }, - }, - type: "???", // Will look as Normal but it's STAB-less - }, - bind: { - inherit: true, - ignoreImmunity: true, - volatileStatus: 'partiallytrapped', - self: { - volatileStatus: 'partialtrappinglock', - }, - onBeforeMove: function (pokemon, target, move) { - // Removes must recharge volatile even if it misses - target.removeVolatile('mustrecharge'); - }, - onHit: function (target, source) { - /** - * The duration of the partially trapped must be always renewed to 2 - * so target doesn't move on trapper switch out as happens in gen 1. - * However, this won't happen if there's no switch and the trapper is - * about to end its partial trapping. - **/ - if (target.volatiles['partiallytrapped']) { - if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { - target.volatiles['partiallytrapped'].duration = 2; - } - } - }, - }, - bite: { - inherit: true, - secondary: { - chance: 10, - volatileStatus: 'flinch', - }, - type: "Normal", - }, - blizzard: { - inherit: true, - accuracy: 90, - target: "normal", - }, - bubble: { - inherit: true, - target: "normal", - }, - clamp: { - inherit: true, - accuracy: 75, - pp: 10, - volatileStatus: 'partiallytrapped', - self: { - volatileStatus: 'partialtrappinglock', - }, - onBeforeMove: function (pokemon, target, move) { - // Removes must recharge volatile even if it misses - target.removeVolatile('mustrecharge'); - }, - onHit: function (target, source) { - /** - * The duration of the partially trapped must be always renewed to 2 - * so target doesn't move on trapper switch out as happens in gen 1. - * However, this won't happen if there's no switch and the trapper is - * about to end its partial trapping. - **/ - if (target.volatiles['partiallytrapped']) { - if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { - target.volatiles['partiallytrapped'].duration = 2; - } - } - }, - }, - conversion: { - inherit: true, - volatileStatus: 'conversion', - accuracy: true, - target: "normal", - onHit: function (target, source) { - source.types = target.types; - this.add('-start', source, 'typechange', source.types.join(', '), '[from] move: Conversion', '[of] ' + source); - }, - }, - counter: { - inherit: true, - ignoreImmunity: true, - willCrit: false, - damageCallback: function (pokemon, target) { - // Counter mechanics on gen 1 might be hard to understand. - // It will fail if the last move selected by the opponent has base power 0 or is not Normal or Fighting Type. - // If both are true, counter will deal twice the last damage dealt in battle, no matter what was the move. - // That means that, if opponent switches, counter will use last counter damage * 2. - let lastUsedMove = this.getMove(target.side.lastMove); - if (lastUsedMove && lastUsedMove.basePower > 0 && lastUsedMove.type in {'Normal': 1, 'Fighting': 1} && target.battle.lastDamage > 0 && !this.willMove(target)) { - return 2 * target.battle.lastDamage; - } - this.add('-fail', pokemon); - return false; - }, - }, - crabhammer: { - inherit: true, - critRatio: 2, - }, - dig: { - inherit: 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 Bide and Swift.", - basePower: 100, - effect: { - duration: 2, - onLockMove: 'dig', - onAccuracy: function (accuracy, target, source, move) { - if (move.id === 'swift') return true; - this.add('-message', 'The foe ' + target.name + ' can\'t be hit underground!'); - return null; - }, - onDamage: function (damage, target, source, move) { - if (!move || move.effectType !== 'Move') return; - if (!source) return; - if (move.id === 'earthquake') { - this.add('-message', 'The foe ' + target.name + ' can\'t be hit underground!'); - return null; - } - }, - }, - }, - disable: { - inherit: true, - desc: "The target cannot choose a random move for 0-6 turns. Disable only works on one move at a time and fails if the target has not yet used a move or if its move has run out of PP. The target does nothing if it is about to use a move that becomes disabled.", - effect: { - duration: 4, - durationCallback: function (target, source, effect) { - let duration = this.random(1, 7); - return duration; - }, - onStart: function (pokemon) { - if (!this.willMove(pokemon)) { - this.effectData.duration++; - } - let moves = pokemon.moves; - let move = this.getMove(moves[this.random(moves.length)]); - this.add('-start', pokemon, 'Disable', move.name); - this.effectData.move = move.id; - return; - }, - onResidualOrder: 14, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'Disable'); - }, - onBeforeMove: function (attacker, defender, move) { - if (move.id === this.effectData.move) { - this.add('cant', attacker, 'Disable', move); - return false; - } - }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === this.effectData.move) { - pokemon.disableMove(moves[i].id); - } - } - }, - }, - }, - dizzypunch: { - inherit: true, - desc: "Deals damage to the target.", - shortDesc: "Deals damage.", - secondary: false, - }, - doubleedge: { - inherit: true, - basePower: 100, - }, - dragonrage: { - inherit: true, - basePower: 1, - }, - explosion: { - inherit: true, - basePower: 170, - target: "normal", - }, - fireblast: { - inherit: true, - desc: "Deals damage to the target with a 30% chance to burn it.", - shortDesc: "30% chance to burn the target.", - secondary: { - chance: 30, - status: 'brn', - }, - }, - firespin: { - inherit: true, - accuracy: 70, - basePower: 15, - volatileStatus: 'partiallytrapped', - self: { - volatileStatus: 'partialtrappinglock', - }, - onBeforeMove: function (pokemon, target, move) { - // Removes must recharge volatile even if it misses - target.removeVolatile('mustrecharge'); - }, - onHit: function (target, source) { - /** - * The duration of the partially trapped must be always renewed to 2 - * so target doesn't move on trapper switch out as happens in gen 1. - * However, this won't happen if there's no switch and the trapper is - * about to end its partial trapping. - **/ - if (target.volatiles['partiallytrapped']) { - if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { - target.volatiles['partiallytrapped'].duration = 2; - } - } - }, - }, - fly: { - inherit: 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 Bide and Swift.", - effect: { - duration: 2, - onLockMove: 'fly', - onAccuracy: function (accuracy, target, source, move) { - if (move.id === 'swift') return true; - this.add('-message', 'The foe ' + target.name + ' can\'t be hit while flying!'); - return null; - }, - onDamage: function (damage, target, source, move) { - if (!move || move.effectType !== 'Move') return; - if (!source || source.side === target.side) return; - if (move.id === 'gust' || move.id === 'thunder') { - this.add('-message', 'The foe ' + target.name + ' can\'t be hit while flying!'); - return null; - } - }, - }, - }, - focusenergy: { - inherit: true, - desc: "If the attack deals critical hits sometimes, then the chance of its happening is quartered. If a move has a high chance of dealing a critical hit, if the user iis currently faster than the opposing Pokemon its critical hit ratio is not decreased. If it's slower, its chances of dealing a critical hit is cut by 50%. If the user is significantly slower than the opposing Pokemon, then the user will be unable to deal critical hits to the opposing Pokemon.", - shortDesc: "Reduces the user's chance for a critical hit.", - effect: { - onStart: function (pokemon) { - this.add('-start', pokemon, 'move: Focus Energy'); - }, - // This does nothing as it's dealt with on critical hit calculation. - onModifyMove: function () {}, - }, - }, - glare: { - inherit: true, - ignoreImmunity: true, - }, - growth: { - inherit: true, - desc: "Raises the user's Special by 1 stage.", - shortDesc: "Boosts the user's Special by 1.", - boosts: { - spa: 1, - spd: 1, - }, - }, - gust: { - inherit: true, - type: "Normal", - }, - haze: { - inherit: true, - desc: "Eliminates any stat stage changes and status from all active Pokemon.", - shortDesc: "Eliminates all stat changes and status.", - onHit: function (target, source) { - this.add('-clearallboost'); - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - let pokemon = this.sides[i].active[j]; - pokemon.clearBoosts(); - - if (pokemon !== source) { - // Clears the status from the opponent - pokemon.setStatus(''); - } - if (pokemon.status === 'tox') { - pokemon.setStatus('psn'); - } - let volatiles = Object.keys(pokemon.volatiles); - for (let n = 0; n < volatiles.length; n++) { - let id = volatiles[n]; - if (id === 'residualdmg') { - pokemon.volatiles[id].counter = 0; - } else { - pokemon.removeVolatile(id); - this.add('-end', pokemon, id); - } - } - } - } - }, - target: "self", - }, - highjumpkick: { - inherit: true, - desc: "If this attack misses the target, the user takes 1 HP of damage.", - shortDesc: "User takes 1 HP damage it would have dealt if miss.", - onMoveFail: function (target, source, move) { - if (target.type !== 'ghost') { - this.directDamage(1, source); - } - }, - }, - hyperbeam: { - inherit: true, - desc: "Deals damage to a target. If this move is successful, the user must recharge on the following turn and cannot make a move, unless the opponent faints or a Substitute is destroyed.", - shortDesc: "User cannot move next turn unless target or substitute faints.", - }, - jumpkick: { - inherit: true, - desc: "If this attack misses the target, the user 1HP of damage.", - shortDesc: "User takes 1 HP damage if miss.", - onMoveFail: function (target, source, move) { - this.damage(1, source); - }, - }, - karatechop: { - inherit: true, - critRatio: 2, - type: "Normal", - }, - leechseed: { - inherit: true, - onHit: function () {}, - effect: { - onStart: function (target) { - this.add('-start', target, 'move: Leech Seed'); - }, - onAfterMoveSelfPriority: 1, - onAfterMoveSelf: function (pokemon) { - let leecher = pokemon.side.foe.active[pokemon.volatiles['leechseed'].sourcePosition]; - if (!leecher || leecher.fainted || leecher.hp <= 0) { - this.debug('Nothing to leech into'); - return; - } - // We check if leeched Pokémon has Toxic to increase leeched damage. - let toxicCounter = 1; - if (pokemon.volatiles['residualdmg']) { - pokemon.volatiles['residualdmg'].counter++; - toxicCounter = pokemon.volatiles['residualdmg'].counter; - } - let toLeech = this.clampIntRange(Math.floor(pokemon.maxhp / 16), 1) * toxicCounter; - let damage = this.damage(toLeech, pokemon, leecher); - if (damage) this.heal(damage, leecher, pokemon); - }, - }, - }, - lightscreen: { - num: 113, - accuracy: true, - basePower: 0, - category: "Status", - desc: "For 5 turns, the user has double Special when attacked. Removed by Haze.", - shortDesc: "For 5 turns, user's Special is 2x when attacked.", - id: "lightscreen", - isViable: true, - name: "Light Screen", - pp: 30, - priority: 0, - flags: {}, - volatileStatus: 'lightscreen', - onTryHit: function (pokemon) { - if (pokemon.volatiles['lightscreen']) { - return false; - } - }, - effect: { - onStart: function (pokemon) { - this.add('-start', pokemon, 'Light Screen'); - }, - }, - target: "self", - type: "Psychic", - }, - metronome: { - inherit: true, - noMetronome: {metronome:1, struggle:1}, - secondary: false, - target: "self", - type: "Normal", - }, - mimic: { - inherit: true, - desc: "This move is replaced by a random move on target's moveset. The copied move has the maximum PP for that move. Ignores a target's Substitute.", - shortDesc: "A random target's move replaces this one.", - onHit: function (target, source) { - let moveslot = source.moves.indexOf('mimic'); - if (moveslot < 0) return false; - let moves = target.moves; - let move = moves[this.random(moves.length)]; - if (!move) return false; - move = this.getMove(move); - source.moveset[moveslot] = { - move: move.name, - id: move.id, - pp: source.moveset[moveslot].pp, - maxpp: move.pp * 8 / 5, - target: move.target, - disabled: false, - used: false, - virtual: true, - }; - source.moves[moveslot] = toId(move.name); - this.add('-start', source, 'Mimic', move.name); - }, - }, - mirrormove: { - inherit: true, - onHit: function (pokemon) { - let foe = pokemon.side.foe.active[0]; - if (!foe || !foe.lastMove || foe.lastMove === 'mirrormove') { - return false; - } - this.useMove(foe.lastMove, pokemon); - }, - }, - nightshade: { - inherit: true, - desc: "Deals damage to the target equal to the user's level. This move can hit Normal-type Pokemon.", - shortDesc: "Damage = user's level. Can hit Normal types.", - ignoreImmunity: true, - basePower: 1, - }, - poisonsting: { - inherit: true, - desc: "Has a 20% chance to poison the target.", - shortDesc: "20% chance to poison the target.", - secondary: { - chance: 20, - status: 'psn', - }, - }, - psychic: { - inherit: true, - desc: "Has a 33% chance to lower the target's Special by 1 stage.", - shortDesc: "33% chance to lower the target's Special by 1.", - secondary: { - chance: 33, - boosts: { - spd: -1, - spa: -1, - }, - }, - }, - psywave: { - inherit: true, - basePower: 1, - }, - rage: { - inherit: true, - self: { - volatileStatus: 'rage', - }, - effect: { - // Rage lock - duration: 255, - onStart: function (target, source, effect) { - this.effectData.move = 'rage'; - }, - onLockMove: 'rage', - onTryHit: function (target, source, move) { - if (target.boosts.atk < 6 && move.id === 'disable') { - this.boost({atk:1}); - } - }, - onHit: function (target, source, move) { - if (target.boosts.atk < 6 && move.category !== 'Status') { - this.boost({atk:1}); - } - }, - }, - }, - razorleaf: { - inherit: true, - critRatio: 2, - target: "normal", - }, - razorwind: { - inherit: true, - critRatio: 1, - target: "normal", - }, - recover: { - inherit: true, - heal: null, - onHit: function (target) { - // Fail when health is 255 or 511 less than max - if (target.hp === (target.maxhp - 255) || target.hp === (target.maxhp - 511) || target.hp === target.maxhp) { - return false; - } - this.heal(Math.floor(target.maxhp / 2), target, target); - }, - }, - reflect: { - num: 115, - accuracy: true, - basePower: 0, - category: "Status", - desc: "The user has doubled Defense. Critical hits ignore this protection. It is removed from the user if it is successfully hit by Haze.", - shortDesc: "User's Defense is 2x.", - id: "reflect", - isViable: true, - name: "Reflect", - pp: 20, - priority: 0, - flags: {}, - volatileStatus: 'reflect', - onTryHit: function (pokemon) { - if (pokemon.volatiles['reflect']) { - return false; - } - }, - effect: { - onStart: function (pokemon) { - this.add('-start', pokemon, 'Reflect'); - }, - }, - secondary: false, - target: "self", - type: "Psychic", - }, - rest: { - inherit: true, - onHit: function (target) { - // Fails if the difference between - // max HP and current HP is 0, 255, or 511 - if (target.hp >= target.maxhp || - target.hp === (target.maxhp - 255) || - target.hp === (target.maxhp - 511)) return false; - if (!target.setStatus('slp')) return false; - target.statusData.time = 2; - target.statusData.startTime = 2; - this.heal(target.maxhp); // Aeshetic only as the healing happens after you fall asleep in-game - this.add('-status', target, 'slp', '[from] move: Rest'); - }, - }, - roar: { - inherit: true, - desc: "Does nothing.", - shortDesc: "Does nothing.", - isViable: false, - forceSwitch: false, - onTryHit: function () {}, - priority: 0, - }, - rockslide: { - inherit: true, - desc: "Deals damage to a foe.", - shortDesc: "Deals damage.", - secondary: false, - target: "normal", - }, - rockthrow: { - inherit: true, - accuracy: 65, - }, - sandattack: { - inherit: true, - ignoreImmunity: true, - type: "Normal", - }, - seismictoss: { - inherit: true, - desc: "Deals damage to the target equal to the user's level. This move can hit Ghost-type Pokemon.", - shortDesc: "Damage = user's level. Can hit Ghost types.", - ignoreImmunity: true, - basePower: 1, - }, - selfdestruct: { - inherit: true, - basePower: 130, - target: "normal", - }, - skullbash: { - inherit: true, - onTry: function (attacker, defender, move) { - if (attacker.removeVolatile(move.id)) { - return; - } - this.add('-prepare', attacker, move.name, defender); - if (!this.runEvent('ChargeMove', attacker, defender, move)) { - this.add('-anim', attacker, move.name, defender); - attacker.removeVolatile(move.id); - return; - } - attacker.addVolatile('twoturnmove', defender); - return null; - }, - }, - slash: { - inherit: true, - critRatio: 2, - }, - softboiled: { - inherit: true, - heal: null, - onHit: function (target) { - // Fail when health is 255 or 511 less than max - if (target.hp === (target.maxhp - 255) || target.hp === (target.maxhp - 511) || target.hp === target.maxhp) { - return false; - } - this.heal(Math.floor(target.maxhp / 2), target, target); - }, - }, - struggle: { - inherit: true, - onModifyMove: function () {}, - }, - substitute: { - num: 164, - accuracy: true, - basePower: 0, - category: "Status", - 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 substitute is removed once enough damage is inflicted on it, or if the user switches out or faints. Until the substitute is broken, it receives damage from all attacks made by other Pokemon and shields the user from poison status and some stat stage changes caused by other Pokemon. The user still takes normal damage from status effects while behind its substitute. If the substitute breaks during a multi-hit attack, the user will take damage from any remaining hits. This move fails if the user already has a substitute.", - shortDesc: "User takes 1/4 its max HP to put in a Substitute.", - id: "substitute", - isViable: true, - name: "Substitute", - pp: 10, - priority: 0, - volatileStatus: 'Substitute', - onTryHit: function (target) { - if (target.volatiles['substitute']) { - this.add('-fail', target, 'move: Substitute'); - return null; - } - // We only prevent when hp is less than one quarter. - // If you use substitute at exactly one quarter, you faint. - if (target.hp === target.maxhp / 4) target.faint(); - if (target.hp < target.maxhp / 4) { - this.add('-fail', target, 'move: Substitute', '[weak]'); - return null; - } - }, - onHit: function (target) { - // If max HP is 3 or less substitute makes no damage - if (target.maxhp > 3) { - this.directDamage(target.maxhp / 4, target, target); - } - }, - effect: { - onStart: function (target) { - this.add('-start', target, 'Substitute'); - this.effectData.hp = Math.floor(target.maxhp / 4) + 1; - delete target.volatiles['partiallytrapped']; - }, - onTryHitPriority: -1, - onTryHit: function (target, source, move) { - if (move.category === 'Status') { - // In gen 1 it only blocks: - // poison, confusion, secondary effect confusion, stat reducing moves and Leech Seed. - let SubBlocked = { - lockon:1, meanlook:1, mindreader:1, nightmare:1, - }; - if (move.status === 'psn' || move.status === 'tox' || (move.boosts && target !== source) || move.volatileStatus === 'confusion' || SubBlocked[move.id]) { - return false; - } - return; - } - if (move.volatileStatus && target === source) return; - let damage = this.getDamage(source, target, move); - if (!damage) return null; - damage = this.runEvent('SubDamage', target, source, move, damage); - if (!damage) return damage; - target.volatiles['substitute'].hp -= damage; - source.lastDamage = damage; - if (target.volatiles['substitute'].hp <= 0) { - target.removeVolatile('substitute'); - target.subFainted = true; - } else { - this.add('-activate', target, 'Substitute', '[damage]'); - } - // Drain/recoil does not happen if the substitute breaks - if (target.volatiles['substitute']) { - if (move.recoil) { - this.damage(Math.round(damage * move.recoil[0] / move.recoil[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); - // Add here counter damage - if (!target.lastAttackedBy) target.lastAttackedBy = {pokemon: source, thisTurn: true}; - target.lastAttackedBy.move = move.id; - target.lastAttackedBy.damage = damage; - return 0; - }, - onEnd: function (target) { - this.add('-end', target, 'Substitute'); - }, - }, - secondary: false, - target: "self", - type: "Normal", - }, - superfang: { - inherit: true, - desc: "Deals damage to the target equal to half of its current HP, rounded down, but not less than 1 HP. This move can hit Ghost-type Pokemon.", - shortDesc: "Damage = 1/2 target's current HP. Hits Ghosts.", - ignoreImmunity: true, - basePower: 1, - }, - thunder: { - inherit: true, - desc: "Has a 10% chance to paralyze the target.", - shortDesc: "10% chance to paralyze the target.", - secondary: { - chance: 10, - status: 'par', - }, - }, - thunderwave: { - inherit: true, - accuracy: 100, - onTryHit: function (target) { - if (target.hasType('Ground')) { - this.add('-immune', target, '[msg]'); - return null; - } - }, - }, - triattack: { - inherit: true, - secondary: false, - }, - whirlwind: { - inherit: true, - accuracy: 85, - desc: "Does nothing.", - shortDesc: "Does nothing.", - isViable: false, - forceSwitch: false, - onTryHit: function () {}, - priority: 0, - }, - wingattack: { - inherit: true, - basePower: 35, - }, - wrap: { - inherit: true, - accuracy: 85, - ignoreImmunity: true, - volatileStatus: 'partiallytrapped', - self: { - volatileStatus: 'partialtrappinglock', - }, - onBeforeMove: function (pokemon, target, move) { - // Removes must recharge volatile even if it misses - target.removeVolatile('mustrecharge'); - }, - onHit: function (target, source) { - /** - * The duration of the partially trapped must be always renewed to 2 - * so target doesn't move on trapper switch out as happens in gen 1. - * However, this won't happen if there's no switch and the trapper is - * about to end its partial trapping. - **/ - if (target.volatiles['partiallytrapped']) { - if (source.volatiles['partialtrappinglock'] && source.volatiles['partialtrappinglock'].duration > 1) { - target.volatiles['partiallytrapped'].duration = 2; - } - } - }, - }, -}; diff --git a/mods/gen2/abilities.js b/mods/gen2/abilities.js deleted file mode 100644 index 9eceda3888977..0000000000000 --- a/mods/gen2/abilities.js +++ /dev/null @@ -1,16 +0,0 @@ -/** - * Gen 2 had no abilities whatsoever. - */ - -'use strict'; - -exports.BattleAbilities = { - "None": { - desc: "This Pokemon has no ability.", - shortDesc: "This Pokemon has no ability.", - id: "none", - name: "None", - rating: 1, - num: 1, - }, -}; diff --git a/mods/gen2/items.js b/mods/gen2/items.js deleted file mode 100644 index fb5e40ade9e08..0000000000000 --- a/mods/gen2/items.js +++ /dev/null @@ -1,106 +0,0 @@ -'use strict'; - -exports.BattleItems = { - berryjuice: { - inherit: true, - isUnreleased: false, - }, - dragonfang: { - inherit: true, - onBasePower: function () {}, - desc: "No competitive use.", - }, - metalpowder: { - inherit: true, - // On Gen 2 this happens in stat calculation directly. - onModifyDef: function () {}, - onModifySpD: function () {}, - }, - lightball: { - inherit: true, - // On Gen 2 this happens in stat calculation directly. - onModifyAtk: function () {}, - onModifySpA: function () {}, - }, - luckypunch: { - inherit: true, - desc: "If holder is a Chansey, its critical hit ratio is always at stage 2. (25% crit rate)", - onModifyCritRatioPriority: -1, - onModifyCritRatio: function (critRatio, user) { - if (user.template.species === 'Chansey') { - return 3; - } - }, - }, - stick: { - inherit: true, - desc: "If holder is a Farfetch'd, its critical hit ratio is always at stage 2. (25% crit rate)", - onModifyCritRatioPriority: -1, - onModifyCritRatio: function (critRatio, user) { - if (user.template.species === 'Farfetch\'d') { - return 3; - } - }, - }, - thickclub: { - inherit: true, - // On Gen 2 this happens in stat calculation directly. - onModifyAtk: function () {}, - }, - berserkgene: { - inherit: true, - isNonstandard: false, - }, - berry: { - inherit: true, - isNonstandard: false, - }, - bitterberry: { - inherit: true, - isNonstandard: false, - }, - burntberry: { - inherit: true, - isNonstandard: false, - }, - dragonscale: { - inherit: true, - isNonstandard: false, - }, - goldberry: { - inherit: true, - isNonstandard: false, - }, - iceberry: { - inherit: true, - isNonstandard: false, - }, - mintberry: { - inherit: true, - isNonstandard: false, - }, - miracleberry: { - inherit: true, - isNonstandard: false, - }, - mysteryberry: { - inherit: true, - isNonstandard: false, - }, - pinkbow: { - inherit: true, - isNonstandard: false, - }, - polkadotbow: { - inherit: true, - isNonstandard: false, - }, - przcureberry: { - inherit: true, - isNonstandard: false, - }, - psncureberry: { - inherit: true, - isNonstandard: false, - }, -}; diff --git a/mods/gen2/moves.js b/mods/gen2/moves.js deleted file mode 100644 index 6151680003af5..0000000000000 --- a/mods/gen2/moves.js +++ /dev/null @@ -1,722 +0,0 @@ -/** - * Gen 2 moves - */ - -'use strict'; - -exports.BattleMovedex = { - aeroblast: { - inherit: true, - critRatio: 3, - }, - bellydrum: { - inherit: true, - onHit: function (target) { - if (target.boosts.atk >= 6) { - return false; - } - if (target.hp <= target.maxhp / 2) { - this.boost({atk: 2}, null, null, this.getEffect('bellydrum2')); - return false; - } - this.directDamage(target.maxhp / 2); - this.boost({atk: 12}); - }, - }, - bide: { - inherit: true, - effect: { - duration: 3, - durationCallback: function (target, source, effect) { - return this.random(3, 5); - }, - onLockMove: 'bide', - onStart: function (pokemon) { - this.effectData.totalDamage = 0; - this.add('-start', pokemon, 'move: Bide'); - }, - onDamagePriority: -101, - onDamage: function (damage, target, source, move) { - if (!move || move.effectType !== 'Move' || !source) return; - this.effectData.totalDamage += damage; - this.effectData.lastDamageSource = source; - }, - onBeforeMove: function (pokemon, target, move) { - if (this.effectData.duration === 1) { - this.add('-end', pokemon, 'move: Bide'); - if (!this.effectData.totalDamage) { - this.add('-fail', pokemon); - return false; - } - target = this.effectData.lastDamageSource; - if (!target) { - this.add('-fail', pokemon); - return false; - } - if (!target.isActive) target = this.resolveTarget(pokemon, this.getMove('pound')); - if (!this.isAdjacent(pokemon, target)) { - this.add('-miss', pokemon, target); - return false; - } - let moveData = { - id: 'bide', - name: "Bide", - accuracy: 100, - damage: this.effectData.totalDamage * 2, - category: "Physical", - priority: 0, - flags: {contact: 1, protect: 1}, - effectType: 'Move', - type: 'Normal', - }; - this.tryMoveHit(target, pokemon, moveData); - return false; - } - this.add('-activate', pokemon, 'move: Bide'); - }, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'move: Bide', '[silent]'); - }, - }, - }, - counter: { - inherit: true, - damageCallback: function (pokemon, target) { - if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && (this.getCategory(pokemon.lastAttackedBy.move) === 'Physical' || this.getMove(pokemon.lastAttackedBy.move).id === 'hiddenpower') && target.lastMove !== 'sleeptalk') { - return 2 * pokemon.lastAttackedBy.damage; - } - return false; - }, - beforeTurnCallback: function () {}, - onTryHit: function () {}, - effect: {}, - priority: -1, - }, - crabhammer: { - inherit: true, - critRatio: 3, - }, - crosschop: { - inherit: true, - critRatio: 3, - }, - curse: { - inherit: true, - effect: { - onStart: function (pokemon, source) { - this.add('-start', pokemon, 'Curse', '[of] ' + source); - }, - onAfterMoveSelf: function (pokemon) { - this.damage(pokemon.maxhp / 4); - }, - }, - }, - detect: { - inherit: true, - desc: "The user is protected from attacks made by the opponent during this turn. This move has an X/255 chance of being successful, where X starts at 255 and halves, rounded down, each time this move is successfully used. X resets to 255 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", - priority: 2, - }, - dig: { - inherit: true, - onPrepareHit: function (target, source) { - return source.status !== 'slp'; - }, - effect: { - duration: 2, - onImmunity: function (type, pokemon) { - if (type === 'sandstorm') return false; - }, - onAccuracy: function (accuracy, target, source, move) { - if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'fissure') { - return; - } - if (move.id in {attract:1, curse:1, foresight:1, meanlook:1, mimic:1, nightmare:1, spiderweb:1, transform:1}) { - // Oversight in the interaction between these moves and the Lock-On effect - return 0; - } - if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; - }, - onSourceBasePower: function (basePower, target, source, move) { - if (move.id === 'earthquake' || move.id === 'magnitude') { - return this.chainModify(2); - } - }, - }, - }, - doubleedge: { - inherit: true, - shortDesc: "Has 25% recoil.", - recoil: [25, 100], - }, - encore: { - inherit: true, - effect: { - durationCallback: function () { - return this.random(3, 7); - }, - onStart: function (target) { - let noEncore = {encore:1, metronome:1, mimic:1, mirrormove:1, sketch:1, sleeptalk:1, struggle:1, transform:1}; - let moveIndex = target.moves.indexOf(target.lastMove); - if (!target.lastMove || noEncore[target.lastMove] || (target.moveset[moveIndex] && target.moveset[moveIndex].pp <= 0)) { - // it failed - this.add('-fail', target); - delete target.volatiles['encore']; - return; - } - this.effectData.move = target.lastMove; - this.add('-start', target, 'Encore'); - if (!this.willMove(target)) { - this.effectData.duration++; - } - }, - onOverrideDecision: function (pokemon) { - return this.effectData.move; - }, - onResidualOrder: 13, - onResidual: function (target) { - if (target.moves.indexOf(target.lastMove) >= 0 && target.moveset[target.moves.indexOf(target.lastMove)].pp <= 0) { - // early termination if you run out of PP - delete target.volatiles.encore; - this.add('-end', target, 'Encore'); - } - }, - onEnd: function (target) { - this.add('-end', target, 'Encore'); - }, - onDisableMove: function (pokemon) { - if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { - return; - } - for (let i = 0; i < pokemon.moveset.length; i++) { - if (pokemon.moveset[i].id !== this.effectData.move) { - pokemon.disableMove(pokemon.moveset[i].id); - } - } - }, - }, - }, - endure: { - inherit: true, - desc: "The user will survive attacks made by the opponent during this turn with at least 1 HP. This move has an X/255 chance of being successful, where X starts at 255 and halves, rounded down, each time this move is successfully used. X resets to 255 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", - priority: 2, - }, - explosion: { - inherit: true, - basePower: 250, - noSketch: true, - }, - flail: { - inherit: true, - noDamageVariance: true, - willCrit: false, - }, - fly: { - inherit: true, - onPrepareHit: function (target, source) { - return source.status !== 'slp'; - }, - effect: { - duration: 2, - onAccuracy: function (accuracy, target, source, move) { - if (move.id === 'gust' || move.id === 'twister' || move.id === 'thunder' || move.id === 'whirlwind') { - return; - } - if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'fissure') { - // These moves miss even during the Lock-On effect - return 0; - } - if (move.id in {attract:1, curse:1, foresight:1, meanlook:1, mimic:1, nightmare:1, spiderweb:1, transform:1}) { - // Oversight in the interaction between these moves and the Lock-On effect - return 0; - } - if (source.volatiles['lockon'] && target === source.volatiles['lockon'].source) return; - return 0; - }, - onSourceBasePower: function (basePower, target, source, move) { - if (move.id === 'gust' || move.id === 'twister') { - return this.chainModify(2); - } - }, - }, - }, - focusenergy: { - inherit: true, - effect: { - onStart: function (pokemon) { - this.add('-start', pokemon, 'move: Focus Energy'); - }, - onModifyCritRatio: function (critRatio) { - return critRatio + 1; - }, - }, - }, - healbell: { - inherit: true, - onHit: function (target, source) { - this.add('-cureteam', source, '[from] move: Heal Bell'); - source.side.pokemon.forEach(pokemon => pokemon.clearStatus()); - }, - }, - highjumpkick: { - inherit: true, - onMoveFail: function (target, source, move) { - if (target.runImmunity('Fighting')) { - let damage = this.getDamage(source, target, move, true); - this.damage(this.clampIntRange(damage / 8, 1), source, source, 'highjumpkick'); - } - }, - }, - jumpkick: { - inherit: true, - onMoveFail: function (target, source, move) { - if (target.runImmunity('Fighting')) { - let damage = this.getDamage(source, target, move, true); - this.damage(this.clampIntRange(damage / 8, 1), source, source, 'jumpkick'); - } - }, - }, - karatechop: { - inherit: true, - critRatio: 3, - }, - leechseed: { - inherit: true, - onHit: function () {}, - effect: { - onStart: function (target) { - this.add('-start', target, 'move: Leech Seed'); - }, - onAfterMoveSelfPriority: 2, - onAfterMoveSelf: function (pokemon) { - let leecher = pokemon.side.foe.active[pokemon.volatiles['leechseed'].sourcePosition]; - if (!leecher || leecher.fainted || leecher.hp <= 0) { - this.debug('Nothing to leech into'); - return; - } - let toLeech = this.clampIntRange(pokemon.maxhp / 8, 1); - let damage = this.damage(toLeech, pokemon, leecher); - if (damage) { - this.heal(damage, leecher, pokemon); - } - }, - }, - }, - lightscreen: { - inherit: true, - effect: { - duration: 5, - // Sp. Def boost applied directly in stat calculation - onStart: function (side) { - this.add('-sidestart', side, 'move: Light Screen'); - }, - onResidualOrder: 21, - onEnd: function (side) { - this.add('-sideend', side, 'move: Light Screen'); - }, - }, - }, - lowkick: { - inherit: true, - accuracy: 90, - basePower: 50, - basePowerCallback: function () { - return 50; - }, - secondary: { - chance: 30, - volatileStatus: 'flinch', - }, - }, - metronome: { - inherit: true, - noMetronome: {counter:1, destinybond:1, detect:1, endure:1, metronome:1, mimic:1, mirrorcoat:1, protect:1, sketch:1, sleeptalk:1, struggle:1, thief:1}, - noSketch: true, - }, - mimic: { - inherit: true, - noSketch: true, - }, - mirrorcoat: { - inherit: true, - damageCallback: function (pokemon, target) { - if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && this.getCategory(pokemon.lastAttackedBy.move) === 'Special' && this.getMove(pokemon.lastAttackedBy.move).id !== 'hiddenpower' && target.lastMove !== 'sleeptalk') { - return 2 * pokemon.lastAttackedBy.damage; - } - return false; - }, - beforeTurnCallback: function () {}, - onTryHit: function () {}, - effect: {}, - priority: -1, - }, - mirrormove: { - inherit: true, - onHit: function (pokemon) { - let noMirror = {metronome: 1, mimic: 1, mirrormove: 1, sketch: 1, sleeptalk: 1, transform: 1}; - let foe = pokemon.side.foe.active[0]; - if (!foe || !foe.lastMove || (!pokemon.activeTurns && !foe.moveThisTurn) || noMirror[foe.lastMove] || pokemon.moves.indexOf(foe.lastMove) >= 0) { - return false; - } - this.useMove(foe.lastMove, pokemon); - }, - noSketch: true, - }, - moonlight: { - inherit: true, - onHit: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(pokemon.maxhp); - } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(pokemon.maxhp / 4); - } else { - this.heal(pokemon.maxhp / 2); - } - }, - }, - morningsun: { - inherit: true, - onHit: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(pokemon.maxhp); - } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(pokemon.maxhp / 4); - } else { - this.heal(pokemon.maxhp / 2); - } - }, - }, - nightmare: { - inherit: true, - effect: { - noCopy: true, - onStart: function (pokemon) { - if (pokemon.status !== 'slp') { - return false; - } - this.add('-start', pokemon, 'Nightmare'); - }, - onAfterMoveSelfPriority: 1, - onAfterMoveSelf: function (pokemon) { - if (pokemon.status === 'slp') this.damage(pokemon.maxhp / 4); - }, - onUpdate: function (pokemon) { - if (pokemon.status !== 'slp') { - pokemon.removeVolatile('nightmare'); - this.add('-end', pokemon, 'Nightmare', '[silent]'); - } - }, - }, - }, - outrage: { - inherit: true, - onMoveFail: function (target, source, move) { - source.addVolatile('lockedmove'); - }, - onAfterMove: function (pokemon) { - if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { - pokemon.removeVolatile('lockedmove'); - } - }, - }, - petaldance: { - inherit: true, - onMoveFail: function (target, source, move) { - source.addVolatile('lockedmove'); - }, - onAfterMove: function (pokemon) { - if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { - pokemon.removeVolatile('lockedmove'); - } - }, - }, - poisongas: { - inherit: true, - ignoreImmunity: false, - }, - poisonpowder: { - inherit: true, - ignoreImmunity: false, - }, - protect: { - inherit: true, - desc: "The user is protected from attacks made by the opponent during this turn. This move has an X/255 chance of being successful, where X starts at 255 and halves, rounded down, each time this move is successfully used. X resets to 255 if this move fails or if the user's last move used is not Detect, Endure, or Protect. Fails if the user moves last this turn.", - priority: 2, - }, - psywave: { - inherit: true, - damageCallback: function (pokemon) { - return this.random(1, pokemon.level + Math.floor(pokemon.level / 2)); - }, - }, - rage: { - // TODO - // Rage boosts in Gens 2-4 is for the duration of Rage only - // Disable does not build - inherit: true, - }, - razorleaf: { - inherit: true, - critRatio: 3, - }, - razorwind: { - inherit: true, - accuracy: 75, - critRatio: 3, - onPrepareHit: function (target, source) { - return source.status !== 'slp'; - }, - }, - reflect: { - inherit: true, - effect: { - duration: 5, - // Defense boost applied directly in stat calculation - onStart: function (side) { - this.add('-sidestart', side, 'Reflect'); - }, - onResidualOrder: 21, - onEnd: function (side) { - this.add('-sideend', side, 'Reflect'); - }, - }, - }, - rest: { - inherit: true, - onHit: function (target) { - if (target.hp >= target.maxhp) return false; - if (!target.setStatus('slp') && target.status !== 'slp') return false; - target.statusData.time = 3; - target.statusData.startTime = 3; - target.statusData.source = target; - this.heal(target.maxhp); - this.add('-status', target, 'slp', '[from] move: Rest'); - }, - secondary: false, - }, - reversal: { - inherit: true, - noDamageVariance: true, - willCrit: false, - }, - roar: { - inherit: true, - onTryHit: function () { - for (let i = 0; i < this.queue.length; i++) { - // Roar only works if it is the last action in a turn, including when it's called by Sleep Talk - if (this.queue[i].choice === 'move' || this.queue[i].choice === 'switch') return false; - } - }, - priority: -1, - }, - selfdestruct: { - inherit: true, - basePower: 200, - noSketch: true, - }, - sketch: { - inherit: true, - onHit: function () { - // Sketch always fails in Link Battles - this.add('-nothing'); - }, - }, - skullbash: { - inherit: true, - onPrepareHit: function (target, source) { - return source.status !== 'slp'; - }, - }, - skyattack: { - inherit: true, - critRatio: 1, - onPrepareHit: function (target, source) { - return source.status !== 'slp'; - }, - secondary: {}, - }, - slash: { - inherit: true, - critRatio: 3, - }, - sleeptalk: { - inherit: true, - onHit: function (pokemon) { - let moves = []; - for (let i = 0; i < pokemon.moveset.length; i++) { - let move = pokemon.moveset[i].id; - let NoSleepTalk = { - bide:1, sleeptalk:1, - }; - if (move && !NoSleepTalk[move] && !this.getMove(move).flags['charge']) { - moves.push(move); - } - } - let randomMove = ''; - if (moves.length) randomMove = moves[this.random(moves.length)]; - if (!randomMove) return false; - this.useMove(randomMove, pokemon); - }, - noSketch: true, - }, - solarbeam: { - inherit: true, - onPrepareHit: function (target, source) { - return source.status !== 'slp'; - }, - // Rain weakening done directly in the damage formula - onBasePower: function () {}, - }, - spikes: { - inherit: true, - effect: { - // this is a side condition - onStart: function (side) { - if (!this.effectData.layers || this.effectData.layers === 0) { - this.add('-sidestart', side, 'Spikes'); - this.effectData.layers = 1; - } else { - return false; - } - }, - onSwitchIn: function (pokemon) { - if (!pokemon.runImmunity('Ground')) return; - let damageAmounts = [0, 3]; - this.damage(damageAmounts[this.effectData.layers] * pokemon.maxhp / 24); - }, - }, - }, - substitute: { - inherit: true, - effect: { - onStart: function (target) { - this.add('-start', target, 'Substitute'); - this.effectData.hp = Math.floor(target.maxhp / 4); - delete target.volatiles['partiallytrapped']; - }, - onTryPrimaryHitPriority: -1, - onTryPrimaryHit: function (target, source, move) { - if (move.stallingMove) { - this.add('-fail', source); - return null; - } - if (target === source) { - this.debug('sub bypass: self hit'); - return; - } - if (move.drain) { - this.add('-hint', "In Gold/Silver/Crystal, draining moves always miss against Substitute."); - this.add('-miss', source); - return null; - } - if (move.category === 'Status') { - let SubBlocked = { - leechseed:1, lockon:1, mindreader:1, nightmare:1, painsplit:1, sketch:1, - }; - if (move.id === 'swagger') { - // this is safe, move is a copy - delete move.volatileStatus; - } - if (move.status || (move.boosts && move.id !== 'swagger') || move.volatileStatus === 'confusion' || SubBlocked[move.id]) { - this.add('-activate', target, 'Substitute', '[block] ' + move.name); - return null; - } - return; - } - let damage = this.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; - } - 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(Math.round(damage * move.recoil[0] / move.recoil[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 0; // hit - }, - onEnd: function (target) { - this.add('-end', target, 'Substitute'); - }, - }, - }, - synthesis: { - inherit: true, - onHit: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(pokemon.maxhp); - } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(pokemon.maxhp / 4); - } else { - this.heal(pokemon.maxhp / 2); - } - }, - }, - thrash: { - inherit: true, - onMoveFail: function (target, source, move) { - source.addVolatile('lockedmove'); - }, - onAfterMove: function (pokemon) { - if (pokemon.volatiles['lockedmove'] && pokemon.volatiles['lockedmove'].duration === 1) { - pokemon.removeVolatile('lockedmove'); - } - }, - }, - toxic: { - inherit: true, - ignoreImmunity: false, - }, - transform: { - inherit: true, - noSketch: true, - }, - triattack: { - inherit: true, - secondary: { - chance: 20, - onHit: function (target, source) { - if (!target.hasType('Normal')) { - let result = this.random(3); - if (result === 0) { - target.trySetStatus('brn', source); - } else if (result === 1) { - target.trySetStatus('par', source); - } else { - target.trySetStatus('frz', source); - } - } - }, - }, - }, - triplekick: { - inherit: true, - multiaccuracy: false, - multihit: [1, 3], - }, - whirlwind: { - inherit: true, - onTryHit: function () { - for (let i = 0; i < this.queue.length; i++) { - // Whirlwind only works if it is the last action in a turn, including when it's called by Sleep Talk - if (this.queue[i].choice === 'move' || this.queue[i].choice === 'switch') return false; - } - }, - priority: -1, - }, -}; diff --git a/mods/gen3/abilities.js b/mods/gen3/abilities.js deleted file mode 100644 index e0c6ab3c976b4..0000000000000 --- a/mods/gen3/abilities.js +++ /dev/null @@ -1,204 +0,0 @@ -'use strict'; - -exports.BattleAbilities = { - "cutecharm": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact']) { - if (this.random(3) < 1) { - source.addVolatile('attract', target); - } - } - }, - }, - "effectspore": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact'] && !source.status) { - let r = this.random(300); - if (r < 10) { - source.setStatus('slp'); - } else if (r < 20) { - source.setStatus('par'); - } else if (r < 30) { - source.setStatus('psn'); - } - } - }, - }, - "flamebody": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact']) { - if (this.random(3) < 1) { - source.trySetStatus('brn', target); - } - } - }, - }, - "flashfire": { - inherit: true, - onTryHit: function (target, source, move) { - if (target !== source && move.type === 'Fire') { - if (move.id === 'willowisp' && (target.hasType('Fire') || target.status || target.volatiles['substitute'])) { - return; - } - if (!target.addVolatile('flashfire')) { - this.add('-immune', target, '[msg]'); - } - return null; - } - }, - }, - "lightningrod": { - desc: "During double battles, this Pokemon draws any single-target Electric-type attack to itself. If an opponent uses an Electric-type attack that affects multiple Pokemon, those targets will be hit. This ability does not affect Electric Hidden Power or Judgment.", - shortDesc: "This Pokemon draws opposing Electric moves to itself.", - onFoeRedirectTarget: function (target, source, source2, move) { - if (move.type !== 'Electric') return; - if (this.validTarget(this.effectData.target, source, move.target)) { - return this.effectData.target; - } - }, - id: "lightningrod", - name: "Lightning Rod", - rating: 3.5, - num: 32, - }, - "minus": { - inherit: true, - shortDesc: "If an active Pokemon has the Ability Plus, this Pokemon's Sp. Atk is 1.5x.", - onModifySpA: function (spa, pokemon) { - let allActives = pokemon.side.active.concat(pokemon.side.foe.active); - for (let i = 0; i < allActives.length; i++) { - if (!allActives[i].fainted && allActives[i].hasAbility('plus')) { - return this.chainModify(1.5); - } - } - }, - }, - "naturalcure": { - inherit: true, - onCheckShow: function (pokemon) {}, - onSwitchOut: function (pokemon) { - if (!pokemon.status || pokemon.status === 'fnt') return; - - // Because statused/unstatused pokemon are shown after every switch - // in gen 3-4, Natural Cure's curing is always known to both players - - this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Natural Cure'); - pokemon.setStatus(''); - }, - }, - "pickup": { - inherit: true, - onResidualOrder: null, - onResidualSubOrder: null, - onResidual: function () {}, - }, - "plus": { - inherit: true, - shortDesc: "If an active Pokemon has the Ability Minus, this Pokemon's Sp. Atk is 1.5x.", - onModifySpA: function (spa, pokemon) { - let allActives = pokemon.side.active.concat(pokemon.side.foe.active); - for (let i = 0; i < allActives.length; i++) { - if (!allActives[i].fainted && allActives[i].hasAbility('minus')) { - return this.chainModify(1.5); - } - } - }, - }, - "poisonpoint": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact']) { - if (this.random(3) < 1) { - source.trySetStatus('psn', target); - } - } - }, - }, - "pressure": { - inherit: true, - onStart: function () { }, - }, - "roughskin": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (source && source !== target && move && move.flags['contact']) { - this.damage(source.maxhp / 16, source, target); - } - }, - }, - "serenegrace": { - inherit: true, - onModifyMove: function (move) { - if (move.secondaries) { - this.debug('doubling secondary chance'); - for (let i = 0; i < move.secondaries.length; i++) { - move.secondaries[i].chance *= 2; - } - } - }, - }, - "shadowtag": { - inherit: true, - onFoeTrapPokemon: function (pokemon) { - pokemon.trapped = true; - }, - }, - "static": { - inherit: true, - onAfterDamage: function (damage, target, source, effect) { - if (effect && effect.flags['contact']) { - if (this.random(3) < 1) { - source.trySetStatus('par', target); - } - } - }, - }, - "stench": { - inherit: true, - onModifyMove: function () {}, - }, - "sturdy": { - inherit: true, - onDamage: function () {}, - }, - "synchronize": { - inherit: true, - onAfterSetStatus: function (status, target, source) { - if (!source || source === target) return; - let id = status.id; - if (id === 'slp' || id === 'frz') return; - if (id === 'tox') id = 'psn'; - source.trySetStatus(id); - }, - }, - "trace": { - inherit: true, - onUpdate: function (pokemon) { - if (!pokemon.isStarted) return; - let target = pokemon.side.foe.randomActive(); - if (!target || target.fainted) return; - let ability = this.getAbility(target.ability); - let bannedAbilities = {forecast:1, multitype:1, trace:1}; - if (bannedAbilities[target.ability]) { - return; - } - if (pokemon.setAbility(ability)) { - this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); - } - }, - }, - "voltabsorb": { - inherit: true, - onTryHit: function (target, source, move) { - if (target !== source && move.type === 'Electric' && move.id !== 'thunderwave') { - if (!this.heal(target.maxhp / 4)) { - this.add('-immune', target, '[msg]'); - } - return null; - } - }, - }, -}; diff --git a/mods/gen3/items.js b/mods/gen3/items.js deleted file mode 100644 index f60f015980b45..0000000000000 --- a/mods/gen3/items.js +++ /dev/null @@ -1,264 +0,0 @@ -'use strict'; - -exports.BattleItems = { - "berryjuice": { - inherit: true, - isUnreleased: true, - }, - "blackbelt": { - inherit: true, - desc: "Holder's Fighting-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Fighting') { - return basePower * 1.1; - } - }, - }, - "blackglasses": { - inherit: true, - desc: "Holder's Dark-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Dark') { - return basePower * 1.1; - } - }, - }, - "charcoal": { - inherit: true, - desc: "Holder's Fire-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Fire') { - return basePower * 1.1; - } - }, - }, - "deepseascale": { - inherit: true, - onModifySpD: function (spd, pokemon) { - if (pokemon.template.species === 'Clamperl') { - return this.chainModify(2); - } - }, - }, - "deepseatooth": { - inherit: true, - onModifySpA: function (spa, pokemon) { - if (pokemon.template.species === 'Clamperl') { - return this.chainModify(2); - } - }, - }, - "dragonfang": { - inherit: true, - desc: "Holder's Dragon-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Dragon') { - return basePower * 1.1; - } - }, - }, - "hardstone": { - inherit: true, - desc: "Holder's Rock-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Rock') { - return basePower * 1.1; - } - }, - }, - "kingsrock": { - inherit: true, - onModifyMove: function (move) { - if (move.category !== "Status") { - if (move.secondaries && move.secondaries.length) return; - move.secondaries = [{ - chance: 10, - volatileStatus: 'flinch', - }]; - } - }, - }, - "laxincense": { - inherit: true, - desc: "The accuracy of attacks against the holder is 0.95x.", - onModifyAccuracy: function (accuracy) { - if (typeof accuracy !== 'number') return; - this.debug('lax incense - decreasing accuracy'); - return accuracy * 0.95; - }, - }, - "lightball": { - inherit: true, - desc: "If holder is a Pikachu, its Special Attack is doubled.", - onModifyAtk: function () {}, - onModifySpA: function (spa, pokemon) { - if (pokemon.template.species === 'Pikachu') { - return this.chainModify(2); - } - }, - }, - "luckypunch": { - inherit: true, - onModifyCritRatio: function (critRatio, user) { - if (user.template.species === 'Chansey') { - return critRatio + 2; - } - }, - }, - "magnet": { - inherit: true, - desc: "Holder's Electric-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Electric') { - return basePower * 1.1; - } - }, - }, - "mentalherb": { - inherit: true, - onUpdate: function (pokemon) { - if (pokemon.volatiles.attract && pokemon.useItem()) { - pokemon.removeVolatile('attract'); - } - }, - }, - "metalcoat": { - inherit: true, - desc: "Holder's Steel-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Steel') { - return basePower * 1.1; - } - }, - }, - "miracleseed": { - inherit: true, - desc: "Holder's Grass-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Grass') { - return basePower * 1.1; - } - }, - }, - "mysticwater": { - inherit: true, - desc: "Holder's Water-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Water') { - return basePower * 1.1; - } - }, - }, - "nevermeltice": { - inherit: true, - desc: "Holder's Ice-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Ice') { - return basePower * 1.1; - } - }, - }, - "poisonbarb": { - inherit: true, - desc: "Holder's Poison-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Poison') { - return basePower * 1.1; - } - }, - }, - "quickclaw": { - inherit: true, - onModifyPriority: function (priority, pokemon) { - if (this.random(5) === 0) { - return Math.round(priority) + 0.1; - } - }, - }, - "seaincense": { - inherit: true, - desc: "Holder's Water-type attacks have 1.05x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Water') { - return basePower * 1.05; - } - }, - }, - "sharpbeak": { - inherit: true, - desc: "Holder's Flying-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move && move.type === 'Flying') { - return basePower * 1.1; - } - }, - }, - "silkscarf": { - inherit: true, - desc: "Holder's Normal-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Normal') { - return basePower * 1.1; - } - }, - }, - "silverpowder": { - inherit: true, - desc: "Holder's Bug-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Bug') { - return basePower * 1.1; - } - }, - }, - "sitrusberry": { - inherit: true, - desc: "Restores 30 HP when at 1/2 max HP or less. Single use.", - onEat: function (pokemon) { - this.heal(30); - }, - }, - "softsand": { - inherit: true, - desc: "Holder's Ground-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Ground') { - return basePower * 1.1; - } - }, - }, - "spelltag": { - inherit: true, - desc: "Holder's Ghost-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Ghost') { - return basePower * 1.1; - } - }, - }, - "stick": { - inherit: true, - onModifyCritRatio: function (critRatio, user) { - if (user.template.species === 'Farfetch\'d') { - return critRatio + 2; - } - }, - }, - "thickclub": { - inherit: true, - onModifyAtk: function (atk, pokemon) { - if (pokemon.template.species === 'Cubone' || pokemon.template.species === 'Marowak') { - return this.chainModify(2); - } - }, - }, - "twistedspoon": { - inherit: true, - desc: "Holder's Psychic-type attacks have 1.1x power.", - onBasePower: function (basePower, user, target, move) { - if (move.type === 'Psychic') { - return basePower * 1.1; - } - }, - }, -}; diff --git a/mods/gen3/moves.js b/mods/gen3/moves.js deleted file mode 100644 index 190bc1bc83f6f..0000000000000 --- a/mods/gen3/moves.js +++ /dev/null @@ -1,581 +0,0 @@ -/** - * Gen 3 moves - */ - -'use strict'; - -exports.BattleMovedex = { - absorb: { - inherit: true, - pp: 20, - }, - acid: { - inherit: true, - desc: "Has a 10% chance to lower the target's Defense by 1 stage.", - shortDesc: "10% chance to lower the foe(s) Defense by 1.", - secondary: { - chance: 10, - boosts: { - def: -1, - }, - }, - }, - ancientpower: { - inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, - }, - astonish: { - inherit: true, - basePowerCallback: function (pokemon, target) { - if (target.volatiles['minimize']) return 60; - return 30; - }, - desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", - }, - beatup: { - inherit: true, - desc: "Deals typeless damage. Hits one time for each unfainted Pokemon without a major status condition in the user's party, or fails if no Pokemon meet the criteria. For each hit, the damage formula uses the participating Pokemon's base Attack as the Attack stat, the target's base Defense as the Defense stat, and ignores stat stages and other effects that modify Attack or Defense; each hit is considered to come from the user.", - }, - bide: { - inherit: true, - accuracy: 100, - priority: 0, - effect: { - duration: 3, - onLockMove: 'bide', - onStart: function (pokemon) { - this.effectData.totalDamage = 0; - this.add('-start', pokemon, 'move: Bide'); - }, - onDamagePriority: -101, - onDamage: function (damage, target, source, move) { - if (!move || move.effectType !== 'Move' || !source) return; - this.effectData.totalDamage += damage; - this.effectData.lastDamageSource = source; - }, - onBeforeMove: function (pokemon, target, move) { - if (this.effectData.duration === 1) { - this.add('-end', pokemon, 'move: Bide'); - if (!this.effectData.totalDamage) { - this.add('-fail', pokemon); - return false; - } - target = this.effectData.lastDamageSource; - if (!target) { - this.add('-fail', pokemon); - return false; - } - if (!target.isActive) target = this.resolveTarget(pokemon, this.getMove('pound')); - if (!this.isAdjacent(pokemon, target)) { - this.add('-miss', pokemon, target); - return false; - } - let moveData = { - id: 'bide', - name: "Bide", - accuracy: 100, - damage: this.effectData.totalDamage * 2, - category: "Physical", - priority: 0, - flags: {contact: 1, protect: 1}, - effectType: 'Move', - type: 'Normal', - }; - this.tryMoveHit(target, pokemon, moveData); - return false; - } - this.add('-activate', pokemon, 'move: Bide'); - }, - onMoveAborted: function (pokemon) { - pokemon.removeVolatile('bide'); - }, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'move: Bide', '[silent]'); - }, - }, - }, - blizzard: { - inherit: true, - desc: "Has a 10% chance to freeze the target.", - onModifyMove: function () { }, - }, - charge: { - inherit: true, - desc: "If the user uses an Electric-type attack on the next turn, its power will be doubled.", - shortDesc: "The user's Electric attack next turn has 2x power.", - boosts: false, - }, - counter: { - inherit: true, - damageCallback: function (pokemon) { - if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && (this.getCategory(pokemon.lastAttackedBy.move) === 'Physical' || this.getMove(pokemon.lastAttackedBy.move).id === 'hiddenpower')) { - return 2 * pokemon.lastAttackedBy.damage; - } - return false; - }, - effect: { - duration: 1, - noCopy: true, - onStart: function (target, source, source2, move) { - this.effectData.position = null; - this.effectData.damage = 0; - }, - onRedirectTargetPriority: -1, - onRedirectTarget: function (target, source, source2) { - if (source !== this.effectData.target) return; - return source.side.foe.active[this.effectData.position]; - }, - onDamagePriority: -101, - onDamage: function (damage, target, source, effect) { - if (effect && effect.effectType === 'Move' && source.side !== target.side && this.getCategory(effect.id) === 'Physical') { - this.effectData.position = source.position; - this.effectData.damage = 2 * damage; - } - }, - }, - }, - covet: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - crunch: { - inherit: true, - desc: "Has a 20% chance to lower the target's Special Defense by 1 stage.", - shortDesc: "20% chance to lower the target's Sp. Def by 1.", - secondary: { - chance: 20, - boosts: { - spd: -1, - }, - }, - }, - dig: { - inherit: true, - basePower: 60, - }, - disable: { - inherit: true, - accuracy: 55, - desc: "For 2 to 5 turns, the target's last move used becomes disabled. Fails if one of the target's moves is already disabled, if the target has not made a move, or if the target no longer knows the move.", - shortDesc: "For 2-5 turns, disables the target's last move.", - flags: {protect: 1, mirror: 1, authentic: 1}, - volatileStatus: 'disable', - effect: { - durationCallback: function () { - return this.random(2, 6); - }, - noCopy: true, - onStart: function (pokemon) { - if (!this.willMove(pokemon)) { - this.effectData.duration++; - } - if (!pokemon.lastMove) { - return false; - } - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === pokemon.lastMove) { - if (!moves[i].pp) { - return false; - } else { - this.add('-start', pokemon, 'Disable', moves[i].move); - this.effectData.move = pokemon.lastMove; - return; - } - } - } - return false; - }, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'move: Disable'); - }, - onBeforeMove: function (attacker, defender, move) { - if (move.id === this.effectData.move) { - this.add('cant', attacker, 'Disable', move); - return false; - } - }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === this.effectData.move) { - pokemon.disableMove(moves[i].id); - } - } - }, - }, - }, - dive: { - inherit: true, - basePower: 60, - }, - dreameater: { - inherit: true, - desc: "The target is unaffected by this move unless it is asleep and does not have a substitute. The user recovers 1/2 the HP lost by the target, rounded down, but not less than 1 HP.", - }, - encore: { - inherit: true, - desc: "For 3 to 6 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Mirror Move, or Struggle.", - shortDesc: "The target repeats its last move for 3-6 turns.", - flags: {protect: 1, mirror: 1, authentic: 1}, - volatileStatus: 'encore', - effect: { - durationCallback: function () { - return this.random(3, 7); - }, - onStart: function (target) { - let noEncore = {encore:1, mimic:1, mirrormove:1, sketch:1, struggle:1, transform:1}; - let moveIndex = target.moves.indexOf(target.lastMove); - if (!target.lastMove || noEncore[target.lastMove] || (target.moveset[moveIndex] && target.moveset[moveIndex].pp <= 0)) { - // it failed - this.add('-fail', target); - delete target.volatiles['encore']; - return; - } - this.effectData.move = target.lastMove; - this.add('-start', target, 'Encore'); - if (!this.willMove(target)) { - this.effectData.duration++; - } - }, - onOverrideDecision: function (pokemon) { - return this.effectData.move; - }, - onResidualOrder: 13, - onResidual: function (target) { - if (target.moves.indexOf(target.lastMove) >= 0 && target.moveset[target.moves.indexOf(target.lastMove)].pp <= 0) { - // early termination if you run out of PP - delete target.volatiles.encore; - this.add('-end', target, 'Encore'); - } - }, - onEnd: function (target) { - this.add('-end', target, 'Encore'); - }, - onDisableMove: function (pokemon) { - if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { - return; - } - for (let i = 0; i < pokemon.moveset.length; i++) { - if (pokemon.moveset[i].id !== this.effectData.move) { - pokemon.disableMove(pokemon.moveset[i].id); - } - } - }, - }, - }, - extrasensory: { - inherit: true, - basePowerCallback: function (pokemon, target) { - if (target.volatiles['minimize']) return 160; - return 80; - }, - desc: "Has a 10% chance to flinch the target. Damage doubles if the target has used Minimize while active.", - }, - fakeout: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - feintattack: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - flash: { - inherit: true, - accuracy: 70, - }, - fly: { - inherit: true, - basePower: 70, - }, - gigadrain: { - inherit: true, - pp: 5, - }, - glare: { - inherit: true, - ignoreImmunity: false, - }, - hiddenpower: { - inherit: true, - basePower: 0, - basePowerCallback: function (pokemon) { - return pokemon.hpPower || 70; - }, - category: "Physical", - onModifyMove: function (move, pokemon) { - move.type = pokemon.hpType || 'Dark'; - let specialTypes = {Fire:1, Water:1, Grass:1, Ice:1, Electric:1, Dark:1, Psychic:1, Dragon:1}; - move.category = specialTypes[move.type] ? 'Special' : 'Physical'; - }, - }, - highjumpkick: { - inherit: true, - basePower: 85, - desc: "If this attack is not successful and the target was not immune, the user loses HP equal to half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage.", - shortDesc: "If miss, user takes 1/2 damage it would've dealt.", - onMoveFail: function (target, source, move) { - if (target.runImmunity('Fighting')) { - let damage = this.getDamage(source, target, move, true); - this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, 'highjumpkick'); - } - }, - }, - hypnosis: { - inherit: true, - accuracy: 60, - }, - ingrain: { - inherit: true, - desc: "The user has 1/16 of its maximum HP restored at the end of each turn, but it is prevented from switching out and other Pokemon cannot force the user to switch out. The user can still switch out if it uses Baton Pass, and the replacement will remain trapped and still receive the healing effect.", - }, - jumpkick: { - inherit: true, - basePower: 70, - desc: "If this attack is not successful and the target was not immune, the user loses HP equal to half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage.", - shortDesc: "If miss, user takes 1/2 damage it would've dealt.", - onMoveFail: function (target, source, move) { - if (target.runImmunity('Fighting')) { - let damage = this.getDamage(source, target, move, true); - this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, 'jumpkick'); - } - }, - }, - leafblade: { - inherit: true, - basePower: 70, - }, - megadrain: { - inherit: true, - pp: 10, - }, - mirrorcoat: { - inherit: true, - effect: { - duration: 1, - noCopy: true, - onStart: function (target, source, source2, move) { - this.effectData.position = null; - this.effectData.damage = 0; - }, - onRedirectTargetPriority: -1, - onRedirectTarget: function (target, source, source2) { - if (source !== this.effectData.target) return; - return source.side.foe.active[this.effectData.position]; - }, - onDamagePriority: -101, - onDamage: function (damage, target, source, effect) { - if (effect && effect.effectType === 'Move' && source.side !== target.side && this.getCategory(effect.id) === 'Special') { - this.effectData.position = source.position; - this.effectData.damage = 2 * damage; - } - }, - }, - }, - mirrormove: { - inherit: true, - onTryHit: function () { }, - onHit: function (pokemon) { - let noMirror = {assist:1, curse:1, doomdesire:1, focuspunch:1, futuresight:1, magiccoat:1, metronome:1, mimic:1, mirrormove:1, naturepower:1, psychup:1, roleplay:1, sketch:1, sleeptalk:1, spikes:1, spitup:1, taunt:1, teeterdance:1, transform:1}; - if (!pokemon.lastAttackedBy || !pokemon.lastAttackedBy.pokemon.lastMove || noMirror[pokemon.lastAttackedBy.move] || !pokemon.lastAttackedBy.pokemon.hasMove(pokemon.lastAttackedBy.move)) { - return false; - } - this.useMove(pokemon.lastAttackedBy.move, pokemon); - }, - target: "self", - }, - naturepower: { - inherit: true, - accuracy: true, - desc: "This move calls another move for use depending on the battle terrain. Swift in Wi-Fi battles.", - shortDesc: "Attack changes based on terrain. (Swift)", - onHit: function (target) { - this.useMove('swift', target); - }, - }, - needlearm: { - inherit: true, - basePowerCallback: function (pokemon, target) { - if (target.volatiles['minimize']) return 120; - return 60; - }, - desc: "Has a 30% chance to flinch the target. Damage doubles if the target has used Minimize while active.", - }, - outrage: { - inherit: true, - basePower: 90, - }, - overheat: { - inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, - }, - petaldance: { - inherit: true, - basePower: 70, - }, - recover: { - inherit: true, - pp: 20, - }, - rocksmash: { - inherit: true, - basePower: 20, - }, - sleeptalk: { - inherit: true, - desc: "One of the user's known moves, besides this move, is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, but if it currently has 0 PP it will fail to be used. This move cannot select Assist, Bide, Focus Punch, Metronome, Mirror Move, Sleep Talk, Uproar, or any two-turn move.", - beforeMoveCallback: function (pokemon) { - if (pokemon.volatiles['choicelock'] || pokemon.volatiles['encore']) { - this.addMove('move', pokemon, 'Sleep Talk'); - this.add('-fail', pokemon); - return true; - } - }, - onHit: function (pokemon) { - let moves = []; - for (let i = 0; i < pokemon.moveset.length; i++) { - let move = pokemon.moveset[i].id; - let pp = pokemon.moveset[i].pp; - let NoSleepTalk = { - assist:1, bide:1, focuspunch:1, metronome:1, mirrormove:1, sleeptalk:1, uproar:1, - }; - if (move && !(NoSleepTalk[move] || this.getMove(move).flags['charge'])) { - moves.push({move: move, pp: pp}); - } - } - let randomMove = ''; - if (moves.length) randomMove = moves[this.random(moves.length)]; - if (!randomMove) { - return false; - } - if (!randomMove.pp) { - this.add('cant', pokemon, 'nopp', randomMove.move); - return; - } - this.useMove(randomMove.move, pokemon); - }, - }, - spite: { - inherit: true, - desc: "Causes the target's last move used to lose 2 to 5 PP, at random. Fails if the target has not made a move, if the move has 0 PP, or if it no longer knows the move.", - shortDesc: "Lowers the PP of the target's last move by 2-5.", - onHit: function (target) { - let roll = this.random(2, 6); - if (target.deductPP(target.lastMove, roll)) { - this.add("-activate", target, 'move: Spite', target.lastMove, roll); - return; - } - return false; - }, - }, - stockpile: { - inherit: true, - desc: "The user's Stockpile count increases by 1. Fails if the user's Stockpile count is 3.", - shortDesc: "Raises user's Stockpile count by 1. Max 3 uses.", - pp: 10, - effect: { - noCopy: true, - onStart: function (target) { - this.effectData.layers = 1; - this.add('-start', target, 'stockpile' + this.effectData.layers); - }, - onRestart: function (target) { - if (this.effectData.layers >= 3) return false; - this.effectData.layers++; - this.add('-start', target, 'stockpile' + this.effectData.layers); - }, - onEnd: function (target) { - this.effectData.layers = 0; - this.add('-end', target, 'Stockpile'); - }, - }, - }, - struggle: { - inherit: true, - accuracy: 100, - desc: "Deals typeless damage to one adjacent foe at random. If this move was successful, the user takes damage equal to 1/2 the HP lost by the target, rounded down, but not less than 1 HP; the Ability Rock Head does not prevent this. This move can only be used if none of the user's known moves can be selected.", - shortDesc: "User loses 1/2 the HP lost by the target.", - recoil: [1, 2], - struggleRecoil: false, - }, - surf: { - inherit: true, - shortDesc: "Hits adjacent foes. Power doubles against Dive.", - target: "allAdjacentFoes", - }, - taunt: { - inherit: true, - desc: "For 2 turns, prevents the target from using non-damaging moves.", - shortDesc: "For 2 turns, the target can't use status moves.", - effect: { - duration: 2, - onStart: function (target) { - this.add('-start', target, 'move: Taunt'); - }, - onResidualOrder: 12, - onEnd: function (target) { - this.add('-end', target, 'move: Taunt', '[silent]'); - }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (this.getMove(moves[i].move).category === 'Status') { - pokemon.disableMove(moves[i].id); - } - } - }, - onBeforeMove: function (attacker, defender, move) { - if (move.category === 'Status') { - this.add('cant', attacker, 'move: Taunt', move); - return false; - } - }, - }, - }, - tickle: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, - }, - vinewhip: { - inherit: true, - pp: 10, - }, - volttackle: { - inherit: true, - desc: "If the target lost HP, the user takes recoil damage equal to 1/3 the HP lost by the target, rounded down, but not less than 1 HP.", - shortDesc: "Has 1/3 recoil.", - secondary: false, - }, - waterfall: { - inherit: true, - desc: "No additional effect.", - shortDesc: "No additional effect.", - secondary: false, - }, - weatherball: { - inherit: true, - onModifyMove: function (move) { - switch (this.effectiveWeather()) { - case 'sunnyday': - move.type = 'Fire'; - move.category = 'Special'; - break; - case 'raindance': - move.type = 'Water'; - move.category = 'Special'; - break; - case 'sandstorm': - move.type = 'Rock'; - break; - case 'hail': - move.type = 'Ice'; - move.category = 'Special'; - break; - } - }, - }, - zapcannon: { - inherit: true, - basePower: 100, - }, -}; diff --git a/mods/gen3/random-teams.js b/mods/gen3/random-teams.js deleted file mode 100644 index d4445e94c3030..0000000000000 --- a/mods/gen3/random-teams.js +++ /dev/null @@ -1,600 +0,0 @@ -'use strict'; - -const RandomGen4Teams = require('../../mods/gen4/random-teams'); - -class RandomGen3Teams extends RandomGen4Teams { - randomSet(template, slot, teamDetails) { - if (slot === undefined) slot = 1; - let baseTemplate = (template = this.getTemplate(template)); - let species = template.species; - - if (!template.exists || (!template.randomBattleMoves && !template.learnset)) { - template = this.getTemplate('unown'); - - let err = new Error('Template incompatible with random battles: ' + species); - require('../../crashlogger')(err, 'The gen 3 randbat set generator'); - } - - if (template.battleOnly) species = template.baseSpecies; - - let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : Object.keys(template.learnset)); - let moves = []; - let ability = ''; - let item = ''; - let evs = { - hp: 85, - atk: 85, - def: 85, - spa: 85, - spd: 85, - spe: 85, - }; - let ivs = { - hp: 31, - atk: 31, - def: 31, - spa: 31, - spd: 31, - spe: 31, - }; - let hasType = {}; - hasType[template.types[0]] = true; - if (template.types[1]) { - hasType[template.types[1]] = true; - } - let hasAbility = {}; - hasAbility[template.abilities[0]] = true; - if (template.abilities[1]) { - hasAbility[template.abilities[1]] = true; - } - let availableHP = 0; - for (let i = 0, len = movePool.length; i < len; i++) { - if (movePool[i].substr(0, 11) === 'hiddenpower') availableHP++; - } - - let hasMove, counter; - - do { - // Keep track of all moves we have: - hasMove = {}; - for (let k = 0; k < moves.length; k++) { - if (moves[k].substr(0, 11) === 'hiddenpower') { - hasMove['hiddenpower'] = true; - } else { - hasMove[moves[k]] = true; - } - } - - // Choose next 4 moves from learnset/viable moves and add them to moves list: - while (moves.length < 4 && movePool.length) { - let moveid = this.sampleNoReplace(movePool); - if (moveid.substr(0, 11) === 'hiddenpower') { - availableHP--; - if (hasMove['hiddenpower']) continue; - hasMove['hiddenpower'] = true; - } else { - hasMove[moveid] = true; - } - moves.push(moveid); - } - - counter = this.queryMoves(moves, hasType, hasAbility, movePool); - - // Iterate through the moves again, this time to cull them: - for (let k = 0; k < moves.length; k++) { - let move = this.getMove(moves[k]); - let moveid = move.id; - let rejected = false; - let isSetup = false; - - switch (moveid) { - // Not very useful without their supporting moves - case 'batonpass': - if (!counter.setupType && !counter['speedsetup'] && !hasMove['substitute']) rejected = true; - break; - case 'eruption': case 'waterspout': - if (counter.Physical + counter.Special < 4) rejected = true; - break; - case 'focuspunch': - if (!hasMove['substitute'] || counter.damagingMoves.length < 2) rejected = true; - break; - case 'perishsong': - if (!hasMove['meanlook']) rejected = true; - break; - case 'rest': { - if (movePool.includes('sleeptalk')) rejected = true; - break; - } - case 'sleeptalk': - if (!hasMove['rest']) rejected = true; - if (movePool.length > 1) { - let rest = movePool.indexOf('rest'); - if (rest >= 0) this.fastPop(movePool, rest); - } - break; - - // Set up once and only if we have the moves for it - case 'bellydrum': case 'bulkup': case 'curse': case 'dragondance': case 'swordsdance': - if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) rejected = true; - if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; - isSetup = true; - break; - case 'calmmind': case 'growth': case 'nastyplot': case 'tailglow': - if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; - if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; - isSetup = true; - break; - case 'agility': case 'rockpolish': - if (counter.damagingMoves.length < 2 && !hasMove['batonpass']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - if (!counter.setupType) isSetup = true; - break; - case 'flail': - if (!hasMove['substitute'] && !hasMove['endure']) rejected = true; - break; - - // Bad after setup - case 'explosion': - if (counter.setupType || !!counter['recovery'] || hasMove['rest']) rejected = true; - break; - case 'foresight': case 'protect': case 'roar': - if (counter.setupType && !hasAbility['Speed Boost']) rejected = true; - break; - case 'rapidspin': - if (teamDetails.rapidSpin) rejected = true; - break; - case 'spikes': - if (counter.setupType || teamDetails.spikes) rejected = true; - break; - case 'switcheroo': case 'trick': - if (counter.Physical + counter.Special < 3 || counter.setupType) rejected = true; - if (hasMove['lightscreen'] || hasMove['reflect']) rejected = true; - break; - case 'toxic': case 'toxicspikes': - if (counter.setupType || teamDetails.toxicSpikes) rejected = true; - break; - case 'endure': - if (counter.Status >= 3 || counter.recoil) rejected = true; - break; - case 'counter': - if (hasMove['swordsdance']) rejected = true; - break; - - // Bit redundant to have both - // Attacks: - case 'bodyslam': case 'doubleedge': - if (hasMove['return']) rejected = true; - if (moveid === 'doubleedge' && hasMove['bodyslam']) rejected = true; - break; - case 'quickattack': - if (hasMove['thunderwave']) rejected = true; - break; - case 'flamethrower': case 'fireblast': case 'overheat': - if ((moveid === 'flamethrower' && (hasMove['fireblast'] || hasMove['overheat'])) || (moveid === 'fireblast' && (hasMove['flamethrower'] || hasMove['overheat'])) || (moveid === 'overheat' && (hasMove['fireblast'] || hasMove['flamethrower']))) rejected = true; - break; - case 'hydropump': - if (hasMove['surf']) rejected = true; - break; - case 'solarbeam': - if (counter.setupType === 'Physical' || !hasMove['sunnyday'] && !movePool.includes('sunnyday')) rejected = true; - break; - case 'razorleaf': case 'gigadrain': - if (hasMove['solarbeam'] || hasMove['hiddenpowergrass']) rejected = true; - if (moveid === 'gigadrain' && hasMove['razorleaf']) rejected = true; - break; - case 'brickbreak': - if (hasMove['substitute'] && hasMove['focuspunch']) rejected = true; - break; - case 'highjumpkick': case 'crosschop': - if (hasMove['brickbreak']) rejected = true; - break; - case 'seismictoss': - if (hasMove['nightshade'] || counter.Physical + counter.Special >= 1) rejected = true; - break; - case 'dragonclaw': - if (hasMove['outrage']) rejected = true; - break; - case 'pursuit': - if (counter.setupType) rejected = true; - break; - case 'aerialace': - if (moves.indexOf('hiddenpowerflying') > -1) rejected = true; - break; - case 'hiddenpowerrock': - if (hasMove['rockslide']) rejected = true; - break; - case 'bonemerang': - if (hasMove['earthquake']) rejected = true; - break; - case 'thunder': - if (hasMove['thunderbolt']) rejected = true; - break; - case 'silverwind': - if (moves.indexOf('hiddenpowerbug') > -1) rejected = true; - break; - - // Status: - case 'leechseed': case 'painsplit': case 'wish': - if (hasMove['moonlight'] || hasMove['morningsun'] || hasMove['rest'] || hasMove['synthesis'] || hasMove['recover']) rejected = true; - break; - case 'substitute': - if (hasMove['pursuit'] || hasMove['rest'] || hasMove['taunt']) rejected = true; - break; - case 'sleeppowder': - if (hasMove['spore']) rejected = true; - break; - case 'thunderwave': case 'stunspore': - if (hasMove['toxic'] || hasMove['willowisp'] || hasMove['sleeppowder'] || hasMove['spore']) rejected = true; - break; - } - - // Increased/decreased priority moves are unneeded with moves that boost only speed - if (move.priority !== 0 && !!counter['speedsetup']) { - rejected = true; - } - - if (counter.setupType && !isSetup && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { - // Mono-attacking with setup and RestTalk is allowed - // Reject Status moves only if there is nothing else to reject - if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; - } - - // Sleep Talk shouldn't be selected without Rest - if (moveid === 'rest' && rejected) { - let sleeptalk = movePool.indexOf('sleeptalk'); - if (sleeptalk >= 0) { - if (movePool.length < 2) { - rejected = false; - } else { - this.fastPop(movePool, sleeptalk); - } - } - } - - // Remove rejected moves from the move list - if (rejected && (movePool.length - availableHP || availableHP && (moveid === 'hiddenpower' || !hasMove['hiddenpower']))) { - moves.splice(k, 1); - break; - } - } - if (species === 'Castform' && moves.length <= 4) { - // Make sure castforms alternate formes have their required moves - let reqMove = ''; - if (template.species === 'Castform-Sunny' && moves.indexOf('sunnyday') === -1) { - reqMove = 'sunnyday'; - } else if (template.species === 'Castform-Rainy' && moves.indexOf('raindance') === -1) { - reqMove = 'raindance'; - } else if (template.species === 'Castform-Snowy' && moves.indexOf('hail') === -1) { - reqMove = 'hail'; - } - if (reqMove) { - // reject a move - for (let m = 0; m < moves.length; m++) { - if (moves[m] === 'weatherball' || this.getMove(moves[m]).type in hasType) continue; - moves[m] = reqMove; - break; - } - } - } - if (moves.length === 4 && !counter.stab && (counter['physicalpool'] || counter['specialpool'])) { - // Move post-processing: - if (counter.damagingMoves.length === 0) { - // A set shouldn't have zero attacking moves - moves.splice(this.random(moves.length), 1); - } else if (counter.damagingMoves.length === 1) { - // In most cases, a set shouldn't have zero STABs - let damagingid = counter.damagingMoves[0].id; - if (movePool.length - availableHP || availableHP && (damagingid === 'hiddenpower' || !hasMove['hiddenpower'])) { - let replace = false; - if (!counter.damagingMoves[0].damage && template.species !== 'Porygon2' && template.species !== 'Unown') { - replace = true; - } - if (replace) moves.splice(counter.damagingMoveIndex[damagingid], 1); - } - } else if (!counter.damagingMoves[0].damage && !counter.damagingMoves[1].damage && template.species !== 'Porygon2') { - // If you have three or more attacks, and none of them are STAB, reject one of them at random. - let rejectableMoves = []; - let baseDiff = movePool.length - availableHP; - for (let l = 0; l < counter.damagingMoves.length; l++) { - if (baseDiff || availableHP && (!hasMove['hiddenpower'] || counter.damagingMoves[l].id === 'hiddenpower')) { - rejectableMoves.push(counter.damagingMoveIndex[counter.damagingMoves[l].id]); - } - } - if (rejectableMoves.length) { - moves.splice(rejectableMoves[this.random(rejectableMoves.length)], 1); - } - } - } - } while (moves.length < 4 && movePool.length); - - // If Hidden Power has been removed, reset the IVs - if (!hasMove['hiddenpower']) { - ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; - } - - let abilities = Object.values(baseTemplate.abilities); - abilities.sort((a, b) => this.getAbility(b).rating - this.getAbility(a).rating); - let ability0 = this.getAbility(abilities[0]); - let ability1 = this.getAbility(abilities[1]); - ability = ability0.name; - if (ability0.gen !== 3) ability = ability1.name; - if (ability0.gen === 3 && ability1.gen === 3) { - if (ability0.rating <= ability1.rating) { - if (this.random(2)) ability = ability1.name; - } else if (ability0.rating - 0.6 <= ability1.rating) { - if (!this.random(3)) ability = ability1.name; - } - - let rejectAbility = false; - if (ability === 'Hustle') { - // Counter ability (hustle) - rejectAbility = !counter['hustle']; - } else if (ability === 'Blaze') { - rejectAbility = !counter['Fire']; - } else if (ability === 'Chlorophyll') { - rejectAbility = !hasMove['sunnyday']; - } else if (ability === 'Compound Eyes') { - rejectAbility = !counter['inaccurate']; - } else if (ability === 'Lightning Rod') { - rejectAbility = template.types.includes('Ground'); - } else if (ability === 'Limber') { - rejectAbility = template.types.includes('Electric'); - } else if (ability === 'Overgrow') { - rejectAbility = !counter['Grass']; - } else if (ability === 'Rock Head') { - rejectAbility = !counter['recoil']; - } else if (ability === 'Sand Veil') { - rejectAbility = !teamDetails['sand']; - } else if (ability === 'Serene Grace') { - rejectAbility = !counter['serenegrace'] || template.id === 'blissey'; - } else if (ability === 'Sturdy') { - rejectAbility = true; // Strudy only blocks OHKO moves in gen3, which arent in our movepools. - } else if (ability === 'Swift Swim') { - rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; - } else if (ability === 'Swarm') { - rejectAbility = !counter['Bug']; - } else if (ability === 'Synchronize') { - rejectAbility = counter.Status < 2; - } else if (ability === 'Torrent') { - rejectAbility = !counter['Water']; - } else if (ability === 'Insomnia') { - rejectAbility = hasMove['rest']; - } - - if (rejectAbility) { - if (ability === ability1.name) { // or not - ability = ability0.name; - } else if (ability1.rating > 1) { // only switch if the alternative doesn't suck - ability = ability1.name; - } - } - if (abilities.includes('Swift Swim') && hasMove['raindance']) { - ability = 'Swift Swim'; - } - if (abilities.includes('Chlorophyll') && hasMove['sunnyday']) { - ability = 'Chlorophyll'; - } - } - - item = 'Leftovers'; - if (template.requiredItems) { - item = template.requiredItems[this.random(template.requiredItems.length)]; - - // First, the extra high-priority items - } else if (template.species === 'Farfetch\'d') { - item = 'Stick'; - } else if (template.species === 'Marowak') { - item = 'Thick Club'; - } else if (template.species === 'Pikachu') { - item = 'Light Ball'; - } else if (template.species === 'Shedinja') { - item = 'Lum Berry'; - } else if (template.species === 'Unown') { - item = 'Twisted Spoon'; - } else if (template.species === 'Wobbuffet') { - item = ['Leftovers', 'Sitrus Berry'][this.random(2)]; - } else if (template.species === 'Slaking') { - item = 'Choice Band'; - } else if (hasMove['trick']) { - item = 'Choice Band'; - } else if (hasMove['bellydrum']) { - item = 'Sitrus Berry'; - } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { - item = 'Chesto Berry'; - - // Medium priority - } else if (hasMove['endeavor'] || hasMove['flail'] || hasMove['reversal'] || hasMove['endure']) { - if (template.baseStats.spe < 108) { - item = 'Salac Berry'; - } else if (counter.Physical > counter.Special) { - item = 'Liechi Berry'; - } else { - item = 'Petaya Berry'; - } - } else if (counter.Physical >= 4 && !hasMove['bodyslam'] && !hasMove['fakeout'] && !hasMove['rapidspin']) { - item = 'Choice Band'; - } else if (counter.Special >= 4 || (counter.Special >= 3 && hasMove['batonpass'])) { - item = template.baseStats.spe >= 60 && template.baseStats.spe <= 108 && ability !== 'Speed Boost' && !counter['priority'] && this.random(3) ? 'Salac Berry' : 'Petaya Berry'; - } else if (hasMove['outrage'] && counter.setupType) { - item = 'Lum Berry'; - } else if (hasMove['curse'] || hasMove['protect'] || hasMove['sleeptalk'] || hasMove['substitute']) { - item = 'Leftovers'; - // This is the "REALLY can't think of a good item" cutoff - } else { - item = 'Leftovers'; - } - - let levelScale = { - LC: 87, - NFE: 85, - NU: 83, - BL2: 81, - UU: 79, - BL: 77, - OU: 75, - Uber: 71, - }; - let tier = template.tier; - let level = levelScale[tier] || 75; - - // Prepare optimal HP - let hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - if (hasMove['substitute'] && item === 'Sitrus Berry') { - // Two Substitutes should activate Sitrus Berry - while (hp % 4 > 0) { - evs.hp -= 4; - hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - } - } else if (hasMove['bellydrum'] && item === 'Sitrus Berry') { - // Belly Drum should activate Sitrus Berry - if (hp % 2 > 0) evs.hp -= 4; - } else if (hasMove['substitute'] && hasMove['reversal']) { - // Reversal users should be able to use four Substitutes - if (hp % 4 === 0) evs.hp -= 4; - } else if (item === 'Salac Berry' || item === 'Petaya Berry' || item === 'Liechi Berry') { - if (hasMove['flail'] || hasMove['reversal']) { - while (hp % 4 !== 1) { - evs.hp -= 4; - hp = Math.floor(Math.floor(2 * template.baseStats.hp + ivs.hp + Math.floor(evs.hp / 4) + 100) * level / 100 + 10); - } - } else { - if (hp % 4 === 0) evs.hp -= 4; - } - } - - // Minimize confusion damage - if (!counter['Physical'] && !hasMove['transform']) { - evs.atk = 0; - ivs.atk = hasMove['hiddenpower'] ? ivs.atk - 28 : 0; - } - - return { - name: template.baseSpecies, - species: species, - moves: moves, - ability: ability, - evs: evs, - ivs: ivs, - item: item, - level: level, - shiny: !this.random(1024), - }; - } - randomTeam(side) { - let pokemon = []; - - let pokemonPool = []; - for (let id in this.data.FormatsData) { - let template = this.getTemplate(id); - if (template.gen > 3 || template.isNonstandard || !template.randomBattleMoves || template.species === 'Unown' || template.species === 'Castform') continue; - if (template.evos) { - let invalid = false; - for (let i = 0; i < template.evos.length; i++) { - if (this.getTemplate(template.evos[i]).gen <= 3) { - invalid = true; - break; - } - } - if (invalid) continue; - } - pokemonPool.push(id); - } - - let typeCount = {}; - let typeComboCount = {}; - let baseFormes = {}; - let uberCount = 0; - let nuCount = 0; - let teamDetails = {}; - - while (pokemonPool.length && pokemon.length < 6) { - let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); - if (!template.exists) continue; - - // Limit to one of each species (Species Clause) - if (baseFormes[template.baseSpecies]) continue; - - // Limit to one Wobbuffet per battle (not just per team) - if (template.species === 'Wobbuffet' && this.hasWobbuffet) continue; - - let tier = template.tier; - switch (tier) { - case 'Uber': - // Ubers are limited to 2 but have a 20% chance of being added anyway. - if (uberCount > 1 && this.random(5) >= 1) continue; - break; - case 'NU': - // NUs are limited to 2 but have a 20% chance of being added anyway. - if (nuCount > 1 && this.random(5) >= 1) continue; - } - - // Adjust rate for castform - if (template.baseSpecies === 'Castform' && this.random(3) >= 1) continue; // Castform normal forme dosent have random battle moves - - // Limit 2 of any type - let types = template.types; - let skip = false; - for (let t = 0; t < types.length; t++) { - if (typeCount[types[t]] > 1 && this.random(5) >= 1) { - skip = true; - break; - } - } - if (skip) continue; - - let set = this.randomSet(template, pokemon.length, teamDetails); - - // Limit 1 of any type combination - let typeCombo = types.slice().sort().join(); - if (set.ability === 'Drought' || set.ability === 'Drizzle' || set.ability === 'Sand Stream') { - // Drought, Drizzle and Sand Stream don't count towards the type combo limit - typeCombo = set.ability; - if (typeCombo in typeComboCount) continue; - } else { - if (typeComboCount[typeCombo] >= 1) continue; - } - - // Okay, the set passes, add it to our team - pokemon.push(set); - - // 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 (template.species === 'Wobbuffet') this.hasWobbuffet = true; - - // Now that our Pokemon has passed all checks, we can increment our counters - baseFormes[template.baseSpecies] = 1; - - // Increment type counters - for (let t = 0; t < types.length; t++) { - if (types[t] in typeCount) { - typeCount[types[t]]++; - } else { - typeCount[types[t]] = 1; - } - } - if (typeCombo in typeComboCount) { - typeComboCount[typeCombo]++; - } else { - typeComboCount[typeCombo] = 1; - } - - // Increment Uber/NU counters - if (tier === 'Uber') { - uberCount++; - } else if (tier === 'NU') { - nuCount++; - } - - // Team has - if (set.ability === 'Snow Warning') teamDetails['hail'] = 1; - 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('toxicspikes')) teamDetails['toxicSpikes'] = 1; - if (set.moves.includes('rapidspin')) teamDetails['rapidSpin'] = 1; - } - return pokemon; - } -} - -module.exports = RandomGen3Teams; diff --git a/mods/gen3/scripts.js b/mods/gen3/scripts.js deleted file mode 100644 index 6ca14cba9e4a0..0000000000000 --- a/mods/gen3/scripts.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -exports.BattleScripts = { - inherit: 'gen4', - gen: 3, - init: function () { - for (let i in this.data.Pokedex) { - delete this.data.Pokedex[i].abilities['H']; - } - let specialTypes = {Fire:1, Water:1, Grass:1, Ice:1, Electric:1, Dark:1, Psychic:1, Dragon:1}; - let newCategory = ''; - for (let i in this.data.Movedex) { - if (!this.data.Movedex[i]) console.log(i); - if (this.data.Movedex[i].category === 'Status') continue; - newCategory = specialTypes[this.data.Movedex[i].type] ? 'Special' : 'Physical'; - if (newCategory !== this.data.Movedex[i].category) { - this.modData('Movedex', i).category = newCategory; - } - } - }, - - calcRecoilDamage: function (damageDealt, move) { - return this.clampIntRange(Math.floor(damageDealt * move.recoil[0] / move.recoil[1]), 1); - }, -}; diff --git a/mods/gen4/abilities.js b/mods/gen4/abilities.js deleted file mode 100644 index d9f9d113d7031..0000000000000 --- a/mods/gen4/abilities.js +++ /dev/null @@ -1,306 +0,0 @@ -'use strict'; - -exports.BattleAbilities = { - "angerpoint": { - inherit: true, - desc: "If this Pokemon, or its Substitute, is struck by a Critical Hit, its Attack is boosted to six stages.", - shortDesc: "If this Pokemon is hit by a critical hit, its Attack is boosted by 12.", - onAfterSubDamage: function (damage, target, source, move) { - if (!target.hp) return; - if (move && move.effectType === 'Move' && move.crit) { - target.setBoost({atk: 6}); - this.add('-setboost', target, 'atk', 12, '[from] ability: Anger Point'); - } - }, - rating: 1.5, - }, - "effectspore": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact'] && !source.status) { - let r = this.random(100); - if (r < 10) { - source.setStatus('slp', target); - } else if (r < 20) { - source.setStatus('par', target); - } else if (r < 30) { - source.setStatus('psn', target); - } - } - }, - }, - "flashfire": { - inherit: true, - effect: { - noCopy: true, // doesn't get copied by Baton Pass - onStart: function (target) { - this.add('-start', target, 'ability: Flash Fire'); - }, - onModifyDamagePhase1: function (atk, attacker, defender, move) { - if (move.type === 'Fire') { - this.debug('Flash Fire boost'); - return this.chainModify(1.5); - } - }, - onEnd: function (target) { - this.add('-end', target, 'ability: Flash Fire', '[silent]'); - }, - }, - }, - "flowergift": { - inherit: true, - onAllyModifyAtk: function (atk) { - if (this.isWeather('sunnyday')) { - return this.chainModify(1.5); - } - }, - onAllyModifySpD: function (spd) { - if (this.isWeather('sunnyday')) { - return this.chainModify(1.5); - } - }, - }, - "forewarn": { - inherit: true, - onStart: function (pokemon) { - let targets = pokemon.side.foe.active; - let warnMoves = []; - let warnBp = 1; - for (let i = 0; i < targets.length; i++) { - if (targets[i].fainted) continue; - for (let j = 0; j < targets[i].moveset.length; j++) { - let move = this.getMove(targets[i].moveset[j].move); - let bp = move.basePower; - if (move.ohko) bp = 160; - if (move.id === 'counter' || move.id === 'metalburst' || move.id === 'mirrorcoat') bp = 120; - if (!bp && move.category !== 'Status') bp = 80; - if (bp > warnBp) { - warnMoves = [move]; - warnBp = bp; - } else if (bp === warnBp) { - warnMoves.push(move); - } - } - } - if (!warnMoves.length) return; - let warnMove = warnMoves[this.random(warnMoves.length)]; - this.add('-activate', pokemon, 'ability: Forewarn', warnMove); - }, - }, - "insomnia": { - inherit: true, - rating: 2.5, - }, - "leafguard": { - inherit: true, - onSetStatus: function (status, target, source, effect) { - if (effect && effect.id === 'rest') { - return; - } else if (this.isWeather('sunnyday')) { - return false; - } - }, - }, - "lightningrod": { - inherit: true, - desc: "During double battles, this Pokemon draws any single-target Electric-type attack to itself. If an opponent uses an Electric-type attack that affects multiple Pokemon, those targets will be hit. This ability does not affect Electric Hidden Power or Judgment.", - shortDesc: "This Pokemon draws Electric moves to itself.", - onTryHit: function () {}, - rating: 0, - }, - "magicguard": { - //desc: "", - shortDesc: "This Pokemon can only be damaged by direct attacks.", - onDamage: function (damage, target, source, effect) { - if (effect.effectType !== 'Move') { - return false; - } - }, - onSetStatus: function (status, target, source, effect) { - if (effect && effect.id === 'toxicspikes') { - return false; - } - }, - id: "magicguard", - name: "Magic Guard", - rating: 4.5, - num: 98, - }, - "minus": { - desc: "This Pokemon's Special Attack receives a 50% boost in double battles if its partner has the Plus ability.", - shortDesc: "If an ally has the Plus Ability, this Pokemon's Sp. Atk is 1.5x.", - onModifySpA: function (spa, pokemon) { - let allyActive = pokemon.side.active; - if (allyActive.length === 1) { - return; - } - for (let i = 0; i < allyActive.length; i++) { - if (allyActive[i] && allyActive[i].position !== pokemon.position && !allyActive[i].fainted && allyActive[i].ability === 'plus') { - return spa * 1.5; - } - } - }, - id: "minus", - name: "Minus", - rating: 0, - num: 58, - }, - "naturalcure": { - inherit: true, - onCheckShow: function (pokemon) {}, - onSwitchOut: function (pokemon) { - if (!pokemon.status || pokemon.status === 'fnt') return; - - // Because statused/unstatused pokemon are shown after every switch - // in gen 3-4, Natural Cure's curing is always known to both players - - this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Natural Cure'); - pokemon.setStatus(''); - }, - }, - "normalize": { - inherit: true, - onModifyMove: function (move) { - if (move.id !== 'struggle') { - move.type = 'Normal'; - } - }, - }, - "pickup": { - desc: "No in-battle effect.", - shortDesc: "No in-battle effect.", - id: "pickup", - name: "Pickup", - rating: 0, - num: 53, - }, - "plus": { - desc: "This Pokemon's Special Attack receives a 50% boost in double battles if its partner has the Minus ability.", - shortDesc: "If an ally has the Minus Ability, this Pokemon's Sp. Atk is 1.5x.", - onModifySpA: function (spa, pokemon) { - let allyActive = pokemon.side.active; - if (allyActive.length === 1) { - return; - } - for (let i = 0; i < allyActive.length; i++) { - if (allyActive[i] && allyActive[i].position !== pokemon.position && !allyActive[i].fainted && allyActive[i].ability === 'minus') { - return spa * 1.5; - } - } - }, - id: "plus", - name: "Plus", - rating: 0, - num: 57, - }, - "pressure": { - desc: "If this Pokemon is the target of another Pokemon's move, that move loses one additional PP.", - shortDesc: "If this Pokemon is the target of a move, that move loses one additional PP.", - onStart: function (pokemon) { - this.add('-ability', pokemon, 'Pressure'); - }, - onDeductPP: function (target, source) { - if (target === source) return; - return 1; - }, - id: "pressure", - name: "Pressure", - rating: 1.5, - num: 46, - }, - "serenegrace": { - inherit: true, - onModifyMove: function (move) { - if (move.secondaries) { - this.debug('doubling secondary chance'); - for (let i = 0; i < move.secondaries.length; i++) { - move.secondaries[i].chance *= 2; - } - } - }, - }, - "simple": { - shortDesc: "If this Pokemon's stat stages are raised or lowered, the effect is doubled instead.", - onModifyBoost: function (boosts) { - for (let key in boosts) { - boosts[key] *= 2; - } - }, - id: "simple", - name: "Simple", - rating: 4, - num: 86, - }, - "stench": { - desc: "No in-battle effect.", - shortDesc: "No in-battle effect.", - id: "stench", - name: "Stench", - rating: 0, - num: 1, - }, - "stickyhold": { - inherit: true, - onTakeItem: function (item, pokemon, source) { - if (this.suppressingAttackEvents() && pokemon !== this.activePokemon) return; - if ((source && source !== pokemon) || this.activeMove.id === 'knockoff') { - this.add('-activate', pokemon, 'ability: Sticky Hold'); - return false; - } - }, - }, - "stormdrain": { - inherit: true, - desc: "During double battles, this Pokemon draws any single-target Water-type attack to itself. If an opponent uses an Water-type attack that affects multiple Pokemon, those targets will be hit. This ability does not affect Water Hidden Power, Judgment or Weather Ball.", - shortDesc: "This Pokemon draws Water moves to itself.", - onTryHit: function () {}, - rating: 0, - }, - "sturdy": { - inherit: true, - onDamage: function () {}, - rating: 0, - }, - "synchronize": { - inherit: true, - onAfterSetStatus: function (status, target, source, effect) { - if (!source || source === target) return; - if (effect && effect.id === 'toxicspikes') return; - let id = status.id; - if (id === 'slp' || id === 'frz') return; - if (id === 'tox') id = 'psn'; - source.trySetStatus(id); - }, - }, - "trace": { - inherit: true, - onUpdate: function (pokemon) { - if (!pokemon.isStarted) return; - let target = pokemon.side.foe.randomActive(); - if (!target || target.fainted) return; - let ability = this.getAbility(target.ability); - let bannedAbilities = {forecast:1, multitype:1, trace:1}; - if (bannedAbilities[target.ability]) { - return; - } - if (pokemon.setAbility(ability)) { - this.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target); - } - }, - }, - "vitalspirit": { - inherit: true, - rating: 2.5, - }, - "wonderguard": { - inherit: true, - onTryHit: function (target, source, move) { - if (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle' || move.id === 'firefang') return; - this.debug('Wonder Guard immunity: ' + move.id); - if (target.runEffectiveness(move) <= 0) { - this.add('-immune', target, '[msg]', '[from] ability: Wonder Guard'); - return null; - } - }, - }, -}; diff --git a/mods/gen4/items.js b/mods/gen4/items.js deleted file mode 100644 index b4fe2fc08d867..0000000000000 --- a/mods/gen4/items.js +++ /dev/null @@ -1,264 +0,0 @@ -'use strict'; - -exports.BattleItems = { - "adamantorb": { - inherit: true, - onBasePower: function (basePower, user, target, move) { - if (move && user.template.species === 'Dialga' && (move.type === 'Steel' || move.type === 'Dragon')) { - return this.chainModify(1.2); - } - }, - }, - "choiceband": { - inherit: true, - onStart: function () { }, - }, - "choicescarf": { - inherit: true, - onStart: function () { }, - }, - "choicespecs": { - inherit: true, - onStart: function () { }, - }, - "chopleberry": { - inherit: true, - onSourceModifyDamage: function (damage, source, target, move) { - if (move.causedCrashDamage) return damage; - if (move.type === 'Fighting' && move.typeMod > 0 && (!target.volatiles['substitute'] || move.flags['authentic'])) { - if (target.eatItem()) { - this.debug('-50% reduction'); - this.add('-enditem', target, this.effect, '[weaken]'); - return this.chainModify(0.5); - } - } - }, - }, - "custapberry": { - id: "custapberry", - name: "Custap Berry", - spritenum: 86, - isBerry: true, - naturalGift: { - basePower: 80, - type: "Ghost", - }, - onBeforeTurn: function (pokemon) { - if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.ability === 'gluttony')) { - let decision = this.willMove(pokemon); - if (!decision) return; - this.insertQueue({ - choice: 'event', - event: 'Custap', - priority: decision.priority + 0.1, - pokemon: decision.pokemon, - move: decision.move, - target: decision.target, - }); - } - }, - onCustap: function (pokemon) { - let decision = this.willMove(pokemon); - this.debug('custap decision: ' + decision); - if (decision) { - pokemon.eatItem(); - } - }, - onEat: function (pokemon) { - let decision = this.willMove(pokemon); - this.debug('custap eaten: ' + decision); - if (decision) { - this.cancelDecision(pokemon); - this.add('-message', "Custap Berry activated."); - this.runDecision(decision); - } - }, - desc: "Activates at 25% HP. Next move used goes first. One-time use.", - }, - "deepseascale": { - inherit: true, - onModifySpD: function (spd, pokemon) { - if (pokemon.template.species === 'Clamperl') { - return this.chainModify(2); - } - }, - }, - "deepseatooth": { - inherit: true, - onModifySpA: function (spa, pokemon) { - if (pokemon.template.species === 'Clamperl') { - return this.chainModify(2); - } - }, - }, - "focussash": { - inherit: true, - onDamage: function () { }, - onTryHit: function (target, source, move) { - if (target !== source && target.hp === target.maxhp) { - target.addVolatile('focussash'); - } - }, - effect: { - duration: 1, - onDamage: function (damage, target, source, effect) { - if (effect && effect.effectType === 'Move' && damage >= target.hp) { - this.effectData.activated = true; - return target.hp - 1; - } - }, - onAfterMoveSecondary: function (target) { - if (this.effectData.activated) target.useItem(); - target.removeVolatile('focussash'); - }, - }, - }, - "griseousorb": { - inherit: true, - onBasePower: function (basePower, user, target, move) { - if (user.template.num === 487 && (move.type === 'Ghost' || move.type === 'Dragon')) { - return this.chainModify(1.2); - } - }, - }, - "ironball": { - inherit: true, - onEffectiveness: function () {}, - desc: "Holder's Speed is halved and it becomes grounded.", - }, - "jabocaberry": { - inherit: true, - onAfterDamage: function () {}, - onAfterMoveSecondary: function (target, source, move) { - if (source && source !== target && move && move.category === 'Physical') { - if (target.eatItem()) { - this.damage(source.maxhp / 8, source, target, null, true); - } - } - }, - }, - "lifeorb": { - id: "lifeorb", - name: "Life Orb", - spritenum: 249, - fling: { - basePower: 30, - }, - onBasePower: function (basePower, user, target) { - if (!target.volatiles['substitute']) { - user.addVolatile('lifeorb'); - } - return basePower; - }, - onModifyDamagePhase2: function (damage, source, target, move) { - return damage * 1.3; - }, - effect: { - duration: 1, - onAfterMoveSecondarySelf: function (source, target, move) { - if (move && move.effectType === 'Move' && source && source.volatiles['lifeorb']) { - this.damage(source.maxhp / 10, source, source, this.getItem('lifeorb')); - source.removeVolatile('lifeorb'); - } - }, - }, - num: 270, - gen: 4, - desc: "Holder's damaging moves do 1.3x damage; loses 1/10 max HP after the attack.", - }, - "lightball": { - inherit: true, - onModifySpA: function (spa, pokemon) { - if (pokemon.template.species === 'Pikachu') { - return this.chainModify(2); - } - }, - }, - "luckypunch": { - inherit: true, - onModifyCritRatio: function (critRatio, user) { - if (user.template.species === 'Chansey') { - return critRatio + 2; - } - }, - }, - "lustrousorb": { - inherit: true, - onBasePower: function (basePower, user, target, move) { - if (move && user.template.species === 'Palkia' && (move.type === 'Water' || move.type === 'Dragon')) { - return this.chainModify(1.2); - } - }, - }, - "mentalherb": { - id: "mentalherb", - name: "Mental Herb", - spritenum: 285, - fling: { - basePower: 10, - effect: function (pokemon) { - if (pokemon.removeVolatile('attract')) { - this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); - } - }, - }, - onUpdate: function (pokemon) { - if (pokemon.volatiles.attract && pokemon.useItem()) { - pokemon.removeVolatile('attract'); - this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); - } - }, - desc: "Cures infatuation. One-time use.", - }, - "metronome": { - inherit: true, - effect: { - onStart: function (pokemon) { - this.effectData.numConsecutive = 0; - this.effectData.lastMove = ''; - }, - onBeforeMove: function (pokemon, target, move) { - if (!pokemon.hasItem('metronome')) { - pokemon.removeVolatile('metronome'); - return; - } - if (this.effectData.lastMove === move.id) { - this.effectData.numConsecutive++; - } else { - this.effectData.numConsecutive = 0; - } - this.effectData.lastMove = move.id; - }, - onModifyDamagePhase2: function (damage, source, target, move) { - return damage * (1 + (this.effectData.numConsecutive / 10)); - }, - }, - }, - "rowapberry": { - inherit: true, - onAfterDamage: function () {}, - onAfterMoveSecondary: function (target, source, move) { - if (source && source !== target && move && move.category === 'Special') { - if (target.eatItem()) { - this.damage(source.maxhp / 8, source, target, null, true); - } - } - }, - }, - "stick": { - inherit: true, - onModifyCritRatio: function (critRatio, user) { - if (user.template.species === 'Farfetch\'d') { - return critRatio + 2; - } - }, - }, - "thickclub": { - inherit: true, - onModifyAtk: function (atk, pokemon) { - if (pokemon.template.species === 'Cubone' || pokemon.template.species === 'Marowak') { - return this.chainModify(2); - } - }, - }, -}; diff --git a/mods/gen4/moves.js b/mods/gen4/moves.js deleted file mode 100644 index 86407f94e0508..0000000000000 --- a/mods/gen4/moves.js +++ /dev/null @@ -1,1313 +0,0 @@ -'use strict'; - -exports.BattleMovedex = { - acupressure: { - inherit: true, - desc: "Raises a random stat by 2 stages as long as the stat is not already at stage 6. The user can choose to use this move on itself or an ally. Fails if no stat stage can be raised or if the user or ally has a substitute.", - flags: {snatch: 1}, - onHit: function (target) { - if (target.volatiles['substitute']) { - return false; - } - let stats = []; - for (let stat in target.boosts) { - if (target.boosts[stat] < 6) { - stats.push(stat); - } - } - if (stats.length) { - let randomStat = stats[this.random(stats.length)]; - let boost = {}; - boost[randomStat] = 2; - this.boost(boost); - } else { - return false; - } - }, - }, - aromatherapy: { - inherit: true, - onHit: function (target, source) { - this.add('-cureteam', source, '[from] move: Aromatherapy'); - source.side.pokemon.forEach(pokemon => pokemon.clearStatus()); - }, - }, - assist: { - inherit: true, - desc: "A random move among those known by the user's party members is selected for use. Does not select 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 or Trick.", - onHit: function (target) { - let moves = []; - for (let j = 0; j < target.side.pokemon.length; j++) { - let pokemon = target.side.pokemon[j]; - if (pokemon === target) continue; - for (let i = 0; i < pokemon.moves.length; i++) { - let move = pokemon.moves[i]; - let noAssist = { - assist:1, chatter:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, protect:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, trick:1, - }; - if (move && !noAssist[move]) { - moves.push(move); - } - } - } - let randomMove = ''; - if (moves.length) randomMove = moves[this.random(moves.length)]; - if (!randomMove) { - return false; - } - this.useMove(randomMove, target); - }, - }, - aquaring: { - inherit: true, - flags: {}, - }, - beatup: { - inherit: true, - basePower: 10, - basePowerCallback: function (pokemon, target) { - pokemon.addVolatile('beatup'); - if (!pokemon.side.pokemon[pokemon.volatiles.beatup.index]) return null; - return 10; - }, - desc: "Deals typeless damage. Hits one time for the user and one time for each unfainted Pokemon without a major status condition in the user's party. For each hit, the damage formula uses the participating Pokemon's base Attack as the Attack stat, the target's base Defense as the Defense stat, and ignores stat stages and other effects that modify Attack or Defense; each hit is considered to come from the user.", - onModifyMove: function (move, pokemon) { - move.type = '???'; - move.category = 'Physical'; - }, - effect: { - duration: 1, - onStart: function (pokemon) { - let index = 0; - let team = pokemon.side.pokemon; - while (!team[index] || team[index].fainted || team[index].status) { - index++; - if (index >= team.length) break; - } - this.effectData.index = index; - }, - onRestart: function (pokemon) { - let index = this.effectData.index; - let team = pokemon.side.pokemon; - do { - index++; - if (index >= team.length) break; - } while (!team[index] || team[index].fainted || team[index].status); - this.effectData.index = index; - }, - onModifyAtkPriority: -101, - onModifyAtk: function (atk, pokemon) { - this.add('-activate', pokemon, 'move: Beat Up', '[of] ' + pokemon.side.pokemon[this.effectData.index].name); - this.event.modifier = 1; - return pokemon.side.pokemon[this.effectData.index].template.baseStats.atk; - }, - onFoeModifyDefPriority: -101, - onFoeModifyDef: function (def, pokemon) { - this.event.modifier = 1; - return pokemon.template.baseStats.def; - }, - }, - }, - bide: { - inherit: true, - effect: { - duration: 3, - onLockMove: 'bide', - onStart: function (pokemon) { - this.effectData.totalDamage = 0; - this.add('-start', pokemon, 'move: Bide'); - }, - onDamagePriority: -101, - onDamage: function (damage, target, source, move) { - if (!move || move.effectType !== 'Move' || !source) return; - this.effectData.totalDamage += damage; - this.effectData.lastDamageSource = source; - }, - onAfterSetStatus: function (status, pokemon) { - if (status.id === 'slp' || status.id === 'frz') { - pokemon.removeVolatile('bide'); - } - }, - onBeforeMove: function (pokemon, target, move) { - if (this.effectData.duration === 1) { - this.add('-end', pokemon, 'move: Bide'); - if (!this.effectData.totalDamage) { - this.add('-fail', pokemon); - return false; - } - target = this.effectData.lastDamageSource; - if (!target) { - this.add('-fail', pokemon); - return false; - } - if (!target.isActive) target = this.resolveTarget(pokemon, this.getMove('pound')); - if (!this.isAdjacent(pokemon, target)) { - this.add('-miss', pokemon, target); - return false; - } - let moveData = { - id: 'bide', - name: "Bide", - accuracy: true, - damage: this.effectData.totalDamage * 2, - category: "Physical", - priority: 1, - flags: {contact: 1, protect: 1}, - ignoreImmunity: true, - effectType: 'Move', - type: 'Normal', - }; - this.tryMoveHit(target, pokemon, moveData); - return false; - } - this.add('-activate', pokemon, 'move: Bide'); - }, - onMoveAborted: function (pokemon) { - pokemon.removeVolatile('bide'); - }, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'move: Bide', '[silent]'); - }, - }, - }, - bind: { - inherit: true, - accuracy: 75, - }, - bonerush: { - inherit: true, - accuracy: 80, - }, - bravebird: { - inherit: true, - recoil: [1, 3], - }, - brickbreak: { - inherit: true, - desc: "Whether or not this attack misses or the target is immune, the effects of Reflect and Light Screen end for the target's side of the field before damage is calculated.", - shortDesc: "Destroys screens, even if the target is immune.", - onTryHit: function (pokemon) { - pokemon.side.removeSideCondition('reflect'); - pokemon.side.removeSideCondition('lightscreen'); - }, - }, - bulletseed: { - inherit: true, - basePower: 10, - }, - chatter: { - inherit: true, - desc: "Has an X% chance to confuse the target, where X is 0 unless the user is a Chatot that hasn't Transformed. If the user is a Chatot, X is 1, 11, or 31 depending on the volume of Chatot's recorded cry, if any; 1 for no recording or low volume, 11 for medium volume, and 31 for high volume.", - shortDesc: "For Chatot, 31% chance to confuse the target.", - secondary: { - chance: 31, - volatileStatus: 'confusion', - }, - }, - clamp: { - inherit: true, - accuracy: 75, - pp: 10, - }, - conversion: { - inherit: true, - flags: {}, - }, - copycat: { - inherit: true, - onHit: function (pokemon) { - let noCopycat = {assist:1, chatter:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, protect:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, trick:1}; - if (!this.lastMove || noCopycat[this.lastMove]) { - return false; - } - this.useMove(this.lastMove, pokemon); - }, - }, - cottonspore: { - inherit: true, - accuracy: 85, - }, - covet: { - inherit: true, - basePower: 40, - }, - crabhammer: { - inherit: true, - accuracy: 85, - }, - crushgrip: { - inherit: true, - basePowerCallback: function (pokemon, target) { - return Math.floor(target.hp * 120 / target.maxhp) + 1; - }, - }, - curse: { - inherit: true, - desc: "If the user is not a Ghost type, lowers the user's Speed by 1 stage and raises the user's Attack and Defense by 1 stage. If the user is a Ghost type, 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. 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 or has a substitute.", - flags: {}, - onModifyMove: function (move, source, target) { - if (!source.hasType('Ghost')) { - delete move.volatileStatus; - delete move.onHit; - move.self = {boosts: {atk:1, def:1, spe:-1}}; - move.target = move.nonGhostTarget; - } else if (target.volatiles['substitute']) { - delete move.volatileStatus; - delete move.onHit; - } - }, - type: "???", - }, - defog: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - detect: { - inherit: true, - priority: 3, - effect: { - duration: 1, - onStart: function (target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit: function (target, source, move) { - if (!move.flags['protect']) return; - this.add('-activate', target, 'Protect'); - let lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is NOT reset - if (source.volatiles['lockedmove'].trueDuration >= 2) { - source.volatiles['lockedmove'].duration = 2; - } - } - return null; - }, - }, - }, - disable: { - inherit: true, - accuracy: 80, - desc: "For 4 to 7 turns, the target's last move used becomes disabled. Fails if one of the target's moves is already disabled, if the target has not made a move, or if the target no longer knows the move.", - flags: {protect: 1, mirror: 1, authentic: 1}, - volatileStatus: 'disable', - effect: { - durationCallback: function () { - return this.random(4, 8); - }, - noCopy: true, - onStart: function (pokemon) { - if (!this.willMove(pokemon)) { - this.effectData.duration++; - } - if (!pokemon.lastMove) { - return false; - } - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === pokemon.lastMove) { - if (!moves[i].pp) { - return false; - } else { - this.add('-start', pokemon, 'Disable', moves[i].move); - this.effectData.move = pokemon.lastMove; - return; - } - } - } - return false; - }, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'move: Disable'); - }, - onBeforeMovePriority: 7, - onBeforeMove: function (attacker, defender, move) { - if (move.id === this.effectData.move) { - this.add('cant', attacker, 'Disable', move); - return false; - } - }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (moves[i].id === this.effectData.move) { - pokemon.disableMove(moves[i].id); - } - } - }, - }, - }, - doomdesire: { - inherit: true, - accuracy: 85, - basePower: 120, - desc: "Deals typeless damage that cannot be a critical hit two turns after this move is used. Damage is calculated against the target on use, and at the end of the final turn that damage is dealt to the Pokemon at the position the original target had at the time. Fails if this move or Future Sight is already in effect for the target's position.", - onTry: function (source, target) { - target.side.addSideCondition('futuremove'); - if (target.side.sideConditions['futuremove'].positions[target.position]) { - return false; - } - let damage = this.getDamage(source, target, { - name: "Doom Desire", - basePower: 120, - category: "Special", - flags: {}, - willCrit: false, - type: '???', - }, true); - target.side.sideConditions['futuremove'].positions[target.position] = { - duration: 3, - move: 'doomdesire', - source: source, - moveData: { - id: 'doomdesire', - name: "Doom Desire", - accuracy: 85, - basePower: 0, - damage: damage, - category: "Special", - flags: {}, - effectType: 'Move', - isFutureMove: true, - type: '???', - }, - }; - this.add('-start', source, 'Doom Desire'); - return null; - }, - }, - doubleedge: { - inherit: true, - recoil: [1, 3], - }, - drainpunch: { - inherit: true, - basePower: 60, - pp: 5, - }, - dreameater: { - inherit: true, - desc: "The target is unaffected by this move unless it is asleep and does not have a substitute. The user recovers 1/2 the HP lost by the target, rounded down, but not less than 1 HP. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded down.", - onTryHit: function (target) { - if (target.status !== 'slp' || target.volatiles['substitute']) { - this.add('-immune', target, '[msg]'); - return null; - } - }, - }, - embargo: { - inherit: true, - flags: {protect: 1, mirror: 1}, - onTryHit: function (pokemon) { - if (pokemon.ability === 'multitype' || pokemon.item === 'griseousorb') { - return false; - } - }, - }, - encore: { - inherit: true, - desc: "For 4 to 8 turns, the target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not made a move, if the move has 0 PP, or if the move is Encore, Mimic, Mirror Move, Sketch, Struggle, or Transform.", - shortDesc: "The target repeats its last move for 4-8 turns.", - flags: {protect: 1, mirror: 1, authentic: 1}, - volatileStatus: 'encore', - effect: { - durationCallback: function () { - return this.random(4, 9); - }, - onStart: function (target) { - let noEncore = {encore:1, mimic:1, mirrormove:1, sketch:1, struggle:1, transform:1}; - let moveIndex = target.moves.indexOf(target.lastMove); - if (!target.lastMove || noEncore[target.lastMove] || (target.moveset[moveIndex] && target.moveset[moveIndex].pp <= 0)) { - // it failed - this.add('-fail', target); - delete target.volatiles['encore']; - return; - } - this.effectData.move = target.lastMove; - this.add('-start', target, 'Encore'); - if (!this.willMove(target)) { - this.effectData.duration++; - } - }, - onOverrideDecision: function (pokemon) { - return this.effectData.move; - }, - onResidualOrder: 13, - onResidual: function (target) { - if (target.moves.indexOf(target.lastMove) >= 0 && target.moveset[target.moves.indexOf(target.lastMove)].pp <= 0) { - // early termination if you run out of PP - delete target.volatiles.encore; - this.add('-end', target, 'Encore'); - } - }, - onEnd: function (target) { - this.add('-end', target, 'Encore'); - }, - onDisableMove: function (pokemon) { - if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { - return; - } - for (let i = 0; i < pokemon.moveset.length; i++) { - if (pokemon.moveset[i].id !== this.effectData.move) { - pokemon.disableMove(pokemon.moveset[i].id); - } - } - }, - }, - }, - endeavor: { - inherit: true, - onTry: function (pokemon, target) { - if (pokemon.hp >= target.hp) { - this.add('-fail', pokemon); - return null; - } - }, - }, - explosion: { - inherit: true, - basePower: 500, - }, - extremespeed: { - inherit: true, - shortDesc: "Usually goes first.", - priority: 1, - }, - fakeout: { - inherit: true, - priority: 1, - }, - feint: { - inherit: true, - basePower: 50, - desc: "Fails unless the target is using Detect or Protect. If this move is successful, it breaks through the target's Detect or Protect for this turn, allowing other Pokemon to attack the target normally.", - shortDesc: "Breaks protection. Fails if target is not protecting.", - onTry: function (source, target) { - if (!target.volatiles['protect']) { - this.add('-fail', source); - return null; - } - }, - }, - firespin: { - inherit: true, - accuracy: 70, - basePower: 15, - }, - flail: { - inherit: true, - basePowerCallback: function (pokemon, target) { - let ratio = pokemon.hp * 64 / pokemon.maxhp; - if (ratio < 2) { - return 200; - } - if (ratio < 6) { - return 150; - } - if (ratio < 13) { - return 100; - } - if (ratio < 22) { - return 80; - } - if (ratio < 43) { - return 40; - } - return 20; - }, - }, - flareblitz: { - inherit: true, - recoil: [1, 3], - }, - focuspunch: { - inherit: true, - beforeMoveCallback: function () { }, - onTry: function (pokemon) { - if (pokemon.volatiles['focuspunch'] && pokemon.volatiles['focuspunch'].lostFocus) { - this.attrLastMove('[still]'); - this.add('cant', pokemon, 'Focus Punch', 'Focus Punch'); - return false; - } - }, - }, - foresight: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - furycutter: { - inherit: true, - basePower: 10, - }, - futuresight: { - inherit: true, - accuracy: 90, - basePower: 80, - desc: "Deals typeless damage that cannot be a critical hit two turns after this move is used. Damage is calculated against the target on use, and at the end of the final turn that damage is dealt to the Pokemon at the position the original target had at the time. Fails if this move or Doom Desire is already in effect for the target's position.", - pp: 15, - onTry: function (source, target) { - target.side.addSideCondition('futuremove'); - if (target.side.sideConditions['futuremove'].positions[target.position]) { - return false; - } - let damage = this.getDamage(source, target, { - name: "Future Sight", - basePower: 80, - category: "Special", - flags: {}, - willCrit: false, - type: '???', - }, true); - target.side.sideConditions['futuremove'].positions[target.position] = { - duration: 3, - move: 'futuresight', - source: source, - moveData: { - id: 'futuresight', - name: "Future Sight", - accuracy: 90, - basePower: 0, - damage: damage, - category: "Special", - flags: {}, - effectType: 'Move', - isFutureMove: true, - type: '???', - }, - }; - this.add('-start', source, 'Future Sight'); - return null; - }, - }, - gigadrain: { - inherit: true, - basePower: 60, - }, - glare: { - inherit: true, - accuracy: 75, - }, - growth: { - inherit: true, - desc: "Raises the user's Special Attack by 1 stage.", - shortDesc: "Raises the user's Sp. Atk by 1.", - onModifyMove: function () { }, - boosts: { - spa: 1, - }, - }, - healbell: { - inherit: true, - onHit: function (target, source) { - this.add('-activate', source, 'move: Heal Bell'); - source.side.pokemon.forEach(pokemon => { - if (!pokemon.hasAbility('soundproof')) pokemon.cureStatus(true); - }); - }, - }, - healblock: { - inherit: true, - desc: "For 5 turns, the target is prevented from restoring any HP as long as it remains active. During the effect, healing moves are unusable, move effects that grant healing will not heal, but Abilities and items will continue to heal the user. If an affected Pokemon uses Baton Pass, the replacement will remain under the effect. Pain Split is unaffected.", - flags: {protect: 1, mirror: 1}, - effect: { - duration: 5, - durationCallback: function (target, source, effect) { - if (source && source.hasAbility('persistent')) { - return 7; - } - return 5; - }, - onStart: function (pokemon) { - this.add('-start', pokemon, 'move: Heal Block'); - }, - onDisableMove: function (pokemon) { - for (let i = 0; i < pokemon.moveset.length; i++) { - if (this.getMove(pokemon.moveset[i].id).flags['heal']) { - pokemon.disableMove(pokemon.moveset[i].id); - } - } - }, - onBeforeMovePriority: 6, - onBeforeMove: function (pokemon, target, move) { - if (move.flags['heal']) { - this.add('cant', pokemon, 'move: Heal Block', move); - return false; - } - }, - onResidualOrder: 17, - onEnd: function (pokemon) { - this.add('-end', pokemon, 'move: Heal Block'); - }, - onTryHeal: function (damage, pokemon, source, effect) { - if (effect && (effect.id === 'drain' || effect.id === 'leechseed' || effect.id === 'wish')) { - return false; - } - }, - }, - }, - healingwish: { - inherit: true, - flags: {heal: 1}, - onAfterMove: function (pokemon) { - pokemon.switchFlag = true; - }, - effect: { - duration: 1, - onStart: function (side) { - this.debug('Healing Wish started on ' + side.name); - }, - onSwitchInPriority: -1, - onSwitchIn: function (target) { - if (target.position !== this.effectData.sourcePosition) { - return; - } - if (target.hp > 0) { - target.heal(target.maxhp); - target.setStatus(''); - this.add('-heal', target, target.getHealth, '[from] move: Healing Wish'); - target.side.removeSideCondition('healingwish'); - } else { - target.switchFlag = true; - } - }, - }, - }, - highjumpkick: { - inherit: true, - basePower: 100, - desc: "If this attack is not successful, the user loses HP equal to half the target's maximum HP, rounded down, if the target is immune, or half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage. Pokemon with the Ability Magic Guard are unaffected by crash damage.", - shortDesc: "If miss, user takes 1/2 damage it would've dealt.", - pp: 20, - onMoveFail: function (target, source, move) { - move.causedCrashDamage = true; - let damage = this.getDamage(source, target, move, true); - if (!damage) damage = target.maxhp; - this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, 'highjumpkick'); - }, - }, - iciclespear: { - inherit: true, - basePower: 10, - }, - imprison: { - inherit: true, - desc: "The user prevents all of its foes from using any moves that the user also knows as long as the user remains active. Fails if no opponents know any of the user's moves.", - flags: {authentic: 1}, - onTryHit: function (pokemon) { - let targets = pokemon.side.foe.active; - for (let i = 0; i < targets.length; i++) { - if (!targets[i] || targets[i].fainted) continue; - for (let j = 0; j < pokemon.moves.length; j++) { - if (targets[i].moves.indexOf(pokemon.moves[j]) >= 0) return; - } - } - return false; - }, - }, - jumpkick: { - inherit: true, - basePower: 85, - desc: "If this attack is not successful, the user loses HP equal to half the target's maximum HP, rounded down, if the target is immune, or half of the damage the target would have taken, rounded down, but no less than 1 HP and no more than half of the target's maximum HP, as crash damage. Pokemon with the Ability Magic Guard are unaffected by crash damage.", - shortDesc: "If miss, user takes 1/2 damage it would've dealt.", - pp: 25, - onMoveFail: function (target, source, move) { - move.causedCrashDamage = true; - let damage = this.getDamage(source, target, move, true); - if (!damage) damage = target.maxhp; - this.damage(this.clampIntRange(damage / 2, 1, Math.floor(target.maxhp / 2)), source, source, 'jumpkick'); - }, - }, - lastresort: { - inherit: true, - basePower: 130, - }, - lightscreen: { - inherit: true, - effect: { - duration: 5, - durationCallback: function (target, source, effect) { - if (source && source.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamagePhase1: function (damage, source, target, move) { - if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Special') { - if (!move.crit && !move.infiltrates) { - this.debug('Light Screen weaken'); - if (target.side.active.length > 1) return this.chainModify([0xAAC, 0x1000]); - return this.chainModify(0.5); - } - } - }, - onStart: function (side) { - this.add('-sidestart', side, 'Light Screen'); - }, - onResidualOrder: 21, - onEnd: function (side) { - this.add('-sideend', side, 'Light Screen'); - }, - }, - }, - luckychant: { - inherit: true, - flags: {}, - }, - lunardance: { - inherit: true, - flags: {heal: 1}, - onAfterMove: function (pokemon) { - pokemon.switchFlag = true; - }, - effect: { - duration: 1, - onStart: function (side) { - this.debug('Lunar Dance started on ' + side.name); - }, - onSwitchInPriority: -1, - onSwitchIn: function (target) { - if (target.position !== this.effectData.sourcePosition) { - return; - } - if (target.hp > 0) { - target.heal(target.maxhp); - target.setStatus(''); - for (let m in target.moveset) { - target.moveset[m].pp = target.moveset[m].maxpp; - } - this.add('-heal', target, target.getHealth, '[from] move: Lunar Dance'); - target.side.removeSideCondition('lunardance'); - } else { - target.switchFlag = true; - } - }, - }, - }, - magiccoat: { - inherit: true, - desc: "The user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. Once a move is reflected, this effect ends. Moves reflected in this way are unable to be reflected again by another Pokemon under this effect. If the user has the Ability Soundproof, this move's effect happens before a sound-based move can be nullified. The Abilities Lightning Rod and Storm Drain redirect their respective moves before this move takes effect.", - effect: { - duration: 1, - onTryHitPriority: 2, - onTryHit: function (target, source, move) { - if (target === source || move.hasBounced || !move.flags['reflectable']) { - return; - } - target.removeVolatile('magiccoat'); - let newMove = this.getMoveCopy(move.id); - newMove.hasBounced = true; - this.useMove(newMove, target, source); - return null; - }, - }, - }, - magmastorm: { - inherit: true, - accuracy: 70, - }, - magnetrise: { - inherit: true, - flags: {gravity: 1}, - volatileStatus: 'magnetrise', - effect: { - duration: 5, - onStart: function (target) { - if (target.volatiles['ingrain'] || target.ability === 'levitate') return false; - this.add('-start', target, 'Magnet Rise'); - }, - onImmunity: function (type) { - if (type === 'Ground') return false; - }, - onResidualOrder: 6, - onResidualSubOrder: 9, - onEnd: function (target) { - this.add('-end', target, 'Magnet Rise'); - }, - }, - }, - mefirst: { - inherit: true, - effect: { - duration: 1, - onModifyDamagePhase2: function (damage) { - return damage * 1.5; - }, - }, - }, - metronome: { - inherit: true, - noMetronome: {assist:1, chatter:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, protect:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, trick:1}, - }, - mimic: { - inherit: true, - onHit: function (target, source) { - let disallowedMoves = {chatter:1, metronome:1, mimic:1, sketch:1, struggle:1, transform:1}; - if (source.transformed || !target.lastMove || disallowedMoves[target.lastMove] || source.moves.indexOf(target.lastMove) !== -1 || target.volatiles['substitute']) return false; - let moveslot = source.moves.indexOf('mimic'); - if (moveslot < 0) return false; - let move = Dex.getMove(target.lastMove); - source.moveset[moveslot] = { - move: move.name, - id: move.id, - pp: 5, - maxpp: move.pp * 8 / 5, - disabled: false, - used: false, - virtual: true, - }; - source.moves[moveslot] = toId(move.name); - this.add('-activate', source, 'move: Mimic', move.name); - }, - }, - minimize: { - inherit: true, - desc: "Raises the user's evasiveness by 1 stage. Whether or not the user's evasiveness was changed, Stomp will have its power doubled if used against the user while it is active.", - shortDesc: "Raises the user's evasiveness by 1.", - boosts: { - evasion: 1, - }, - }, - miracleeye: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - mirrormove: { - inherit: true, - onTryHit: function () { }, - onHit: function (pokemon) { - let noMirror = {acupressure:1, aromatherapy:1, assist:1, chatter:1, copycat:1, counter:1, curse:1, doomdesire:1, feint:1, focuspunch:1, futuresight:1, gravity:1, hail:1, haze:1, healbell:1, helpinghand:1, lightscreen:1, luckychant:1, magiccoat:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, mist:1, mudsport:1, naturepower:1, perishsong:1, psychup:1, raindance:1, reflect:1, roleplay:1, safeguard:1, sandstorm:1, sketch:1, sleeptalk:1, snatch:1, spikes:1, spitup:1, stealthrock:1, struggle:1, sunnyday:1, tailwind:1, toxicspikes:1, transform:1, watersport:1}; - if (!pokemon.lastAttackedBy || !pokemon.lastAttackedBy.pokemon.lastMove || noMirror[pokemon.lastAttackedBy.move] || !pokemon.lastAttackedBy.pokemon.hasMove(pokemon.lastAttackedBy.move)) { - return false; - } - this.useMove(pokemon.lastAttackedBy.move, pokemon); - }, - target: "self", - }, - moonlight: { - inherit: true, - onHit: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(pokemon.maxhp * 2 / 3); - } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(pokemon.maxhp / 4); - } else { - this.heal(pokemon.maxhp / 2); - } - }, - }, - morningsun: { - inherit: true, - onHit: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(pokemon.maxhp * 2 / 3); - } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(pokemon.maxhp / 4); - } else { - this.heal(pokemon.maxhp / 2); - } - }, - }, - odorsleuth: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - outrage: { - inherit: true, - pp: 15, - onAfterMove: function () {}, - }, - payback: { - inherit: true, - basePowerCallback: function (pokemon, target) { - if (this.willMove(target)) { - return 50; - } - return 100; - }, - desc: "Power doubles if the target moves before the user; power is also doubled if the target switches out.", - }, - petaldance: { - inherit: true, - basePower: 90, - pp: 20, - onAfterMove: function () {}, - }, - poisongas: { - inherit: true, - accuracy: 55, - target: "normal", - }, - powertrick: { - inherit: true, - flags: {}, - }, - protect: { - inherit: true, - priority: 3, - effect: { - duration: 1, - onStart: function (target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit: function (target, source, move) { - if (!move.flags['protect']) return; - this.add('-activate', target, 'Protect'); - let lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is NOT reset - if (source.volatiles['lockedmove'].trueDuration >= 2) { - source.volatiles['lockedmove'].duration = 2; - } - } - return null; - }, - }, - }, - psychup: { - inherit: true, - flags: {snatch:1, authentic: 1}, - }, - recycle: { - inherit: true, - flags: {}, - }, - reflect: { - inherit: true, - effect: { - duration: 5, - durationCallback: function (target, source, effect) { - if (source && source.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamagePhase1: function (damage, source, target, move) { - if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Physical') { - if (!move.crit && !move.infiltrates) { - this.debug('Reflect weaken'); - if (target.side.active.length > 1) return this.chainModify([0xAAC, 0x1000]); - return this.chainModify(0.5); - } - } - }, - onStart: function (side) { - this.add('-sidestart', side, 'Reflect'); - }, - onResidualOrder: 21, - onEnd: function (side) { - this.add('-sideend', side, 'Reflect'); - }, - }, - }, - reversal: { - inherit: true, - basePowerCallback: function (pokemon, target) { - let ratio = pokemon.hp * 64 / pokemon.maxhp; - if (ratio < 2) { - return 200; - } - if (ratio < 6) { - return 150; - } - if (ratio < 13) { - return 100; - } - if (ratio < 22) { - return 80; - } - if (ratio < 43) { - return 40; - } - return 20; - }, - }, - roar: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1, authentic: 1}, - }, - rockblast: { - inherit: true, - accuracy: 80, - }, - sandtomb: { - inherit: true, - accuracy: 70, - basePower: 15, - }, - scaryface: { - inherit: true, - accuracy: 90, - }, - selfdestruct: { - inherit: true, - basePower: 400, - }, - sketch: { - inherit: true, - onHit: function (target, source) { - let disallowedMoves = {chatter:1, sketch:1, struggle:1}; - if (source.transformed || !target.lastMove || disallowedMoves[target.lastMove] || source.moves.indexOf(target.lastMove) >= 0 || target.volatiles['substitute']) return false; - let moveslot = source.moves.indexOf('sketch'); - if (moveslot < 0) return false; - let move = Dex.getMove(target.lastMove); - let sketchedMove = { - move: move.name, - id: move.id, - pp: move.pp, - maxpp: move.pp, - disabled: false, - used: false, - }; - source.moveset[moveslot] = sketchedMove; - source.baseMoveset[moveslot] = sketchedMove; - source.moves[moveslot] = toId(move.name); - this.add('-activate', source, 'move: Mimic', move.name); - }, - }, - skillswap: { - inherit: true, - onHit: function (target, source) { - let targetAbility = target.ability; - let sourceAbility = source.ability; - if (targetAbility === sourceAbility) { - return false; - } - this.add('-activate', source, 'move: Skill Swap'); - source.setAbility(targetAbility); - target.setAbility(sourceAbility); - }, - }, - sleeptalk: { - inherit: true, - beforeMoveCallback: function (pokemon) { - if (pokemon.volatiles['choicelock'] || pokemon.volatiles['encore']) { - this.addMove('move', pokemon, 'Sleep Talk'); - this.add('-fail', pokemon); - return true; - } - }, - }, - spikes: { - inherit: true, - flags: {}, - }, - spite: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - stealthrock: { - inherit: true, - flags: {}, - }, - struggle: { - inherit: true, - onModifyMove: function (move) { - move.type = '???'; - }, - }, - suckerpunch: { - inherit: true, - desc: "Fails if the target did not select a physical or special attack for use this turn, or if the target moves before the user.", - onTry: function (source, target) { - let decision = this.willMove(target); - if (!decision || decision.choice !== 'move' || decision.move.category === 'Status' || target.volatiles.mustrecharge) { - this.add('-fail', source); - return null; - } - }, - }, - synthesis: { - inherit: true, - onHit: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - this.heal(pokemon.maxhp * 2 / 3); - } else if (this.isWeather(['raindance', 'primordialsea', 'sandstorm', 'hail'])) { - this.heal(pokemon.maxhp / 4); - } else { - this.heal(pokemon.maxhp / 2); - } - }, - }, - tackle: { - inherit: true, - accuracy: 95, - basePower: 35, - }, - tailglow: { - inherit: true, - desc: "Raises the user's Special Attack by 2 stages.", - shortDesc: "Raises the user's Sp. Atk by 2.", - boosts: { - spa: 2, - }, - }, - tailwind: { - inherit: true, - desc: "For 3 turns, the user and its party members have their Speed doubled. Fails if this move is already in effect for the user's side.", - shortDesc: "For 3 turns, allies' Speed is doubled.", - effect: { - duration: 3, - durationCallback: function (target, source, effect) { - if (source && source.ability === 'persistent') { - return 5; - } - return 3; - }, - onStart: function (side) { - this.add('-sidestart', side, 'move: Tailwind'); - }, - onModifySpe: function (spe) { - return spe * 2; - }, - onResidualOrder: 21, - onResidualSubOrder: 4, - onEnd: function (side) { - this.add('-sideend', side, 'move: Tailwind'); - }, - }, - }, - taunt: { - inherit: true, - desc: "For 3 to 5 turns, prevents the target from using non-damaging moves.", - shortDesc: "For 3-5 turns, the target can't use status moves.", - flags: {protect: 1, mirror: 1, authentic: 1}, - effect: { - durationCallback: function () { - return this.random(3, 6); - }, - onStart: function (target) { - this.add('-start', target, 'move: Taunt'); - }, - onResidualOrder: 12, - onEnd: function (target) { - this.add('-end', target, 'move: Taunt'); - }, - onDisableMove: function (pokemon) { - let moves = pokemon.moveset; - for (let i = 0; i < moves.length; i++) { - if (this.getMove(moves[i].move).category === 'Status') { - pokemon.disableMove(moves[i].id); - } - } - }, - onBeforeMovePriority: 5, - onBeforeMove: function (attacker, defender, move) { - if (move.category === 'Status') { - this.add('cant', attacker, 'move: Taunt', move); - return false; - } - }, - }, - }, - thrash: { - inherit: true, - basePower: 90, - pp: 20, - onAfterMove: function () {}, - }, - torment: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - toxic: { - inherit: true, - accuracy: 85, - }, - toxicspikes: { - inherit: true, - desc: "Sets up a hazard on the foe's side of the field, poisoning each foe that switches in, unless it is a Flying-type Pokemon or has the Ability Levitate. Can be used up to two times before failing. Foes become poisoned with one layer and badly poisoned with two layers. Can be removed from the foe's side if any foe uses Rapid Spin, is hit by Defog, or a grounded Poison-type Pokemon switches in. Safeguard prevents the foe's party from being poisoned on switch-in, as well as switching in with a substitute.", - flags: {}, - effect: { - // this is a side condition - onStart: function (side) { - this.add('-sidestart', side, 'move: Toxic Spikes'); - this.effectData.layers = 1; - }, - onRestart: function (side) { - if (this.effectData.layers >= 2) return false; - this.add('-sidestart', side, 'move: Toxic Spikes'); - this.effectData.layers++; - }, - onSwitchIn: function (pokemon) { - if (!pokemon.runImmunity('Ground')) return; - if (!pokemon.runImmunity('Poison')) return; - if (pokemon.hasType('Poison')) { - this.add('-sideend', pokemon.side, 'move: Toxic Spikes', '[of] ' + pokemon); - pokemon.side.removeSideCondition('toxicspikes'); - } - if (pokemon.volatiles['substitute']) { - return; - } else if (this.effectData.layers >= 2) { - pokemon.trySetStatus('tox', pokemon.side.foe.active[0]); - } else { - pokemon.trySetStatus('psn', pokemon.side.foe.active[0]); - } - }, - }, - }, - transform: { - inherit: true, - desc: "The user transforms into the target. The target's current stats, stat stages, types, moves, Ability, weight, IVs, species, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5 PP. This move fails if the target has transformed.", - flags: {authentic: 1}, - }, - uproar: { - inherit: true, - basePower: 50, - }, - volttackle: { - inherit: true, - recoil: [1, 3], - }, - whirlpool: { - inherit: true, - accuracy: 70, - basePower: 15, - }, - whirlwind: { - inherit: true, - flags: {protect: 1, mirror: 1, authentic: 1}, - }, - wish: { - inherit: true, - desc: "At the end of the next turn, the Pokemon at the user's position has 1/2 of its maximum HP restored to it, rounded down. Fails if this move is already in effect for the user's position.", - shortDesc: "Next turn, heals 50% of the recipient's max HP.", - flags: {heal: 1}, - sideCondition: 'Wish', - effect: { - duration: 2, - onResidualOrder: 0, - onEnd: function (side) { - let target = side.active[this.effectData.sourcePosition]; - if (!target.fainted) { - let source = this.effectData.source; - let damage = this.heal(target.maxhp / 2, target, target); - if (damage) this.add('-heal', target, target.getHealth, '[from] move: Wish', '[wisher] ' + source.name); - } - }, - }, - }, - woodhammer: { - inherit: true, - recoil: [1, 3], - }, - worryseed: { - inherit: true, - onTryHit: function (pokemon) { - let bannedAbilities = {multitype:1, truant:1}; - if (bannedAbilities[pokemon.ability]) { - return false; - } - }, - }, - wrap: { - inherit: true, - accuracy: 85, - }, - wringout: { - inherit: true, - basePowerCallback: function (pokemon, target) { - return Math.floor(target.hp * 120 / target.maxhp) + 1; - }, - }, -}; diff --git a/mods/gen4/scripts.js b/mods/gen4/scripts.js deleted file mode 100644 index 1a5e7aec58ebf..0000000000000 --- a/mods/gen4/scripts.js +++ /dev/null @@ -1,95 +0,0 @@ -'use strict'; - -exports.BattleScripts = { - inherit: 'gen5', - gen: 4, - init: function () { - for (let i in this.data.Pokedex) { - delete this.data.Pokedex[i].abilities['H']; - } - }, - - modifyDamage: function (baseDamage, pokemon, target, move, suppressMessages) { - // DPP divides modifiers into several mathematically important stages - // The modifiers run earlier than other generations are called with ModifyDamagePhase1 and ModifyDamagePhase2 - - if (!move.type) move.type = '???'; - let type = move.type; - - // Burn - if (pokemon.status === 'brn' && baseDamage && move.category === 'Physical' && !pokemon.hasAbility('guts')) { - baseDamage = this.modify(baseDamage, 0.5); - } - - // Other modifiers (Reflect/Light Screen/etc) - baseDamage = this.runEvent('ModifyDamagePhase1', pokemon, target, move, baseDamage); - - // Double battle multi-hit - if (move.spreadHit) { - let spreadModifier = move.spreadModifier || 0.75; - this.debug('Spread modifier: ' + spreadModifier); - baseDamage = this.modify(baseDamage, spreadModifier); - } - - // Weather - baseDamage = this.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); - - if (this.gen === 3 && move.category === 'Physical' && !Math.floor(baseDamage)) { - baseDamage = 1; - } - - baseDamage += 2; - - if (move.crit) { - baseDamage = this.modify(baseDamage, move.critModifier || 2); - } - - // Mod 2 (Damage is floored after all multipliers are in) - baseDamage = Math.floor(this.runEvent('ModifyDamagePhase2', pokemon, target, move, baseDamage)); - - // this is not a modifier - baseDamage = this.randomizer(baseDamage); - - // STAB - if (move.hasSTAB || 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.modify(baseDamage, move.stab || 1.5); - } - // types - move.typeMod = target.runEffectiveness(move); - - move.typeMod = this.clampIntRange(move.typeMod, -6, 6); - if (move.typeMod > 0) { - if (!suppressMessages) this.add('-supereffective', target); - - for (let i = 0; i < move.typeMod; i++) { - baseDamage *= 2; - } - } - if (move.typeMod < 0) { - if (!suppressMessages) this.add('-resisted', target); - - for (let i = 0; i > move.typeMod; i--) { - baseDamage = Math.floor(baseDamage / 2); - } - } - - if (move.crit && !suppressMessages) this.add('-crit', target); - - // Final modifier. - baseDamage = this.runEvent('ModifyDamage', pokemon, target, move, baseDamage); - - if (!Math.floor(baseDamage)) { - return 1; - } - - return Math.floor(baseDamage); - }, - - calcRecoilDamage: function (damageDealt, move) { - return this.clampIntRange(Math.floor(damageDealt * move.recoil[0] / move.recoil[1]), 1); - }, -}; diff --git a/mods/gen5/moves.js b/mods/gen5/moves.js deleted file mode 100644 index a6ed105c33ec7..0000000000000 --- a/mods/gen5/moves.js +++ /dev/null @@ -1,1025 +0,0 @@ -'use strict'; - -exports.BattleMovedex = { - absorb: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - acidarmor: { - inherit: true, - pp: 40, - }, - aircutter: { - inherit: true, - basePower: 55, - }, - airslash: { - inherit: true, - pp: 20, - }, - aromatherapy: { - inherit: true, - onHit: function (target, source) { - this.add('-activate', source, 'move: Aromatherapy'); - source.side.pokemon.forEach(pokemon => pokemon.cureStatus()); - }, - }, - assist: { - inherit: true, - desc: "A random move among those known by the user's party members is selected for use. Does not select Assist, Bestow, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Sketch, Sleep Talk, Snatch, Struggle, Switcheroo, Thief, Transform, or Trick.", - onHit: function (target) { - let moves = []; - for (let j = 0; j < target.side.pokemon.length; j++) { - let pokemon = target.side.pokemon[j]; - if (pokemon === target) continue; - for (let i = 0; i < pokemon.moves.length; i++) { - let move = pokemon.moves[i]; - let noAssist = { - assist:1, bestow:1, chatter:1, circlethrow:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, dragontail:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, protect:1, ragepowder:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, transform:1, trick:1, - }; - if (move && !noAssist[move]) { - moves.push(move); - } - } - } - let randomMove = ''; - if (moves.length) randomMove = moves[this.random(moves.length)]; - if (!randomMove) { - return false; - } - this.useMove(randomMove, target); - }, - }, - assurance: { - inherit: true, - basePower: 50, - }, - aurasphere: { - inherit: true, - basePower: 90, - }, - barrier: { - inherit: true, - pp: 30, - }, - bestow: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - bind: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - }, - blizzard: { - inherit: true, - basePower: 120, - }, - block: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1}, - }, - bubble: { - inherit: true, - basePower: 20, - }, - bugbuzz: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - camouflage: { - inherit: true, - desc: "The user's type changes based on the battle terrain. Ground-type in Wi-Fi battles. (In-game: Ground-type in puddles, rocky ground, and sand, Water-type on water, Rock-type in caves, Ice-type on snow and ice, and Normal-type everywhere else.) Fails if the user's type cannot be changed or if the user is already purely that type.", - shortDesc: "Changes user's type based on terrain. (Ground)", - onHit: function (target) { - if (!target.setType('Ground')) return false; - this.add('-start', target, 'typechange', 'Ground'); - }, - }, - charm: { - inherit: true, - type: "Normal", - }, - chatter: { - inherit: true, - basePower: 60, - desc: "Has an X% chance to confuse the target, where X is 0 unless the user is a Chatot that hasn't Transformed. If the user is a Chatot, X is 0 or 10 depending on the volume of Chatot's recorded cry, if any; 0 for a low volume or no recording, 10 for a medium to high volume recording.", - shortDesc: "For Chatot, 10% chance to confuse the target.", - onModifyMove: function (move, pokemon) { - if (pokemon.template.species !== 'Chatot') delete move.secondaries; - }, - secondary: { - chance: 10, - volatileStatus: 'confusion', - }, - flags: {protect: 1, mirror: 1, sound: 1, distance: 1}, - }, - clamp: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - }, - conversion: { - inherit: true, - desc: "The user's type changes to match the original type of one of its four moves besides this move, at random, but not either of its current types. Fails if the user cannot change its type, or if this move would only be able to select one of the user's current types.", - shortDesc: "Changes user's type to match a known move.", - onHit: function (target) { - let possibleTypes = target.moveset.map(val => { - let move = this.getMove(val.id); - if (move.id !== 'conversion' && !target.hasType(move.type)) { - return move.type; - } - return ''; - }).filter(type => type); - if (!possibleTypes.length) { - return false; - } - let type = possibleTypes[this.random(possibleTypes.length)]; - - if (!target.setType(type)) return false; - this.add('-start', target, 'typechange', type); - }, - }, - copycat: { - inherit: true, - desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was Assist, Bestow, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Sketch, Sleep Talk, Snatch, Struggle, Switcheroo, Thief, Transform, or Trick.", - onHit: function (pokemon) { - let noCopycat = {assist:1, bestow:1, chatter:1, circlethrow:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, dragontail:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, protect:1, ragepowder:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, transform:1, trick:1}; - if (!this.lastMove || noCopycat[this.lastMove]) { - return false; - } - this.useMove(this.lastMove, pokemon); - }, - }, - cottonspore: { - inherit: true, - onTryHit: function () {}, - target: "normal", - }, - covet: { - inherit: true, - pp: 40, - }, - crabhammer: { - inherit: true, - basePower: 90, - }, - defog: { - inherit: true, - desc: "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, Safeguard, Mist, Spikes, Toxic Spikes, and Stealth Rock end for the target's side. Ignores a target's substitute, although a substitute will still block the lowering of evasiveness.", - shortDesc: "-1 evasion; clears target side's hazards/screens.", - onHit: function (pokemon) { - if (!pokemon.volatiles['substitute']) this.boost({evasion:-1}); - let sideConditions = {reflect:1, lightscreen:1, safeguard:1, mist:1, spikes:1, toxicspikes:1, stealthrock:1}; - for (let i in sideConditions) { - if (pokemon.side.removeSideCondition(i)) { - this.add('-sideend', pokemon.side, this.getEffect(i).name, '[from] move: Defog', '[of] ' + pokemon); - } - } - }, - }, - dracometeor: { - inherit: true, - basePower: 140, - }, - dragonpulse: { - inherit: true, - basePower: 90, - }, - drainpunch: { - inherit: true, - flags: {contact: 1, protect: 1, mirror: 1, punch: 1}, - }, - dreameater: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - echoedvoice: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - energyball: { - inherit: true, - basePower: 80, - }, - extrasensory: { - inherit: true, - pp: 30, - }, - finalgambit: { - inherit: true, - flags: {contact: 1, protect: 1}, - }, - fireblast: { - inherit: true, - basePower: 120, - }, - firepledge: { - inherit: true, - basePower: 50, - basePowerCallback: function (target, source, move) { - if (move.sourceEffect in {grasspledge:1, waterpledge:1}) { - this.add('-combine'); - return 150; - } - return 50; - }, - }, - firespin: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - }, - flamethrower: { - inherit: true, - basePower: 95, - }, - followme: { - inherit: true, - priority: 3, - }, - frostbreath: { - inherit: true, - basePower: 40, - }, - furycutter: { - inherit: true, - basePower: 20, - effect: { - duration: 2, - onStart: function () { - this.effectData.multiplier = 1; - }, - onRestart: function () { - if (this.effectData.multiplier < 8) { - this.effectData.multiplier <<= 1; - } - this.effectData.duration = 2; - }, - }, - }, - futuresight: { - inherit: true, - basePower: 100, - onTry: function (source, target) { - target.side.addSideCondition('futuremove'); - if (target.side.sideConditions['futuremove'].positions[target.position]) { - return false; - } - target.side.sideConditions['futuremove'].positions[target.position] = { - duration: 3, - move: 'futuresight', - source: source, - moveData: { - id: 'futuresight', - name: "Future Sight", - accuracy: 100, - basePower: 100, - category: "Special", - priority: 0, - flags: {}, - ignoreImmunity: false, - effectType: 'Move', - isFutureMove: true, - type: 'Psychic', - }, - }; - this.add('-start', source, 'move: Future Sight'); - return null; - }, - }, - gigadrain: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - glare: { - inherit: true, - accuracy: 90, - }, - grasswhistle: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, - }, - grasspledge: { - inherit: true, - basePower: 50, - basePowerCallback: function (target, source, move) { - if (move.sourceEffect in {waterpledge:1, firepledge:1}) { - this.add('-combine'); - return 150; - } - return 50; - }, - }, - growl: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, - }, - growth: { - inherit: true, - pp: 40, - }, - gunkshot: { - inherit: true, - accuracy: 70, - }, - healbell: { - inherit: true, - flags: {snatch: 1, sound: 1}, - onHit: function (target, source) { - this.add('-activate', source, 'move: Heal Bell'); - source.side.pokemon.forEach(pokemon => pokemon.cureStatus()); - }, - }, - healpulse: { - inherit: true, - heal: [1, 2], - onHit: function () {}, - }, - heatwave: { - inherit: true, - basePower: 100, - }, - hex: { - inherit: true, - basePower: 50, - }, - hiddenpower: { - inherit: true, - basePower: 0, - basePowerCallback: function (pokemon) { - return pokemon.hpPower || 70; - }, - desc: "This move's type and power depend on the user's individual values (IVs). Power varies between 30 and 70, and type can be any but Normal.", - shortDesc: "Varies in power and type based on the user's IVs.", - }, - hiddenpowerbug: { - inherit: true, - basePower: 70, - }, - hiddenpowerdark: { - inherit: true, - basePower: 70, - }, - hiddenpowerdragon: { - inherit: true, - basePower: 70, - }, - hiddenpowerelectric: { - inherit: true, - basePower: 70, - }, - hiddenpowerfighting: { - inherit: true, - basePower: 70, - }, - hiddenpowerfire: { - inherit: true, - basePower: 70, - }, - hiddenpowerflying: { - inherit: true, - basePower: 70, - }, - hiddenpowerghost: { - inherit: true, - basePower: 70, - }, - hiddenpowergrass: { - inherit: true, - basePower: 70, - }, - hiddenpowerground: { - inherit: true, - basePower: 70, - }, - hiddenpowerice: { - inherit: true, - basePower: 70, - }, - hiddenpowerpoison: { - inherit: true, - basePower: 70, - }, - hiddenpowerpsychic: { - inherit: true, - basePower: 70, - }, - hiddenpowerrock: { - inherit: true, - basePower: 70, - }, - hiddenpowersteel: { - inherit: true, - basePower: 70, - }, - hiddenpowerwater: { - inherit: true, - basePower: 70, - }, - hornleech: { - inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, - }, - hurricane: { - inherit: true, - basePower: 120, - }, - hydropump: { - inherit: true, - basePower: 120, - }, - hypervoice: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - icebeam: { - inherit: true, - basePower: 95, - }, - incinerate: { - inherit: true, - basePower: 30, - desc: "The target loses its held item if it is a Berry. This move cannot cause Pokemon with the Ability Sticky Hold to lose their held item. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", - shortDesc: "Destroys the foe(s) Berry.", - onHit: function (pokemon, source) { - let item = pokemon.getItem(); - if (item.isBerry && pokemon.takeItem(source)) { - this.add('-enditem', pokemon, item.name, '[from] move: Incinerate'); - } - }, - }, - knockoff: { - inherit: true, - basePower: 20, - desc: "If the user has not fainted, the target loses its held item. This move cannot cause Pokemon with the Ability Sticky Hold to lose their held item, or force a Giratina, an Arceus, or a Genesect to lose their Griseous Orb, Plate, or Drive, respectively. Items lost to this move cannot be regained with Recycle.", - shortDesc: "Removes the target's held item.", - onBasePower: function () {}, - }, - leafstorm: { - inherit: true, - basePower: 140, - }, - leechlife: { - inherit: true, - flags: {contact: 1, protect: 1, mirror: 1}, - }, - lick: { - inherit: true, - basePower: 20, - }, - lightscreen: { - inherit: true, - effect: { - duration: 5, - durationCallback: function (target, source, effect) { - if (source && source.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamage: function (damage, source, target, move) { - if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Special') { - if (!move.crit && !move.infiltrates) { - this.debug('Light Screen weaken'); - if (target.side.active.length > 1) return this.chainModify([0xA8F, 0x1000]); - return this.chainModify(0.5); - } - } - }, - onStart: function (side) { - this.add('-sidestart', side, 'move: Light Screen'); - }, - onResidualOrder: 21, - onResidualSubOrder: 1, - onEnd: function (side) { - this.add('-sideend', side, 'move: Light Screen'); - }, - }, - }, - lowsweep: { - inherit: true, - basePower: 60, - }, - magicroom: { - inherit: true, - priority: 0, - }, - magmastorm: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - basePower: 120, - }, - meanlook: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1}, - }, - megadrain: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - metalsound: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, - }, - meteormash: { - inherit: true, - accuracy: 85, - basePower: 100, - }, - minimize: { - inherit: true, - desc: "Raises the user's evasiveness by 2 stages. Whether or not the user's evasiveness was changed, Stomp and Steamroller will have their power doubled if used against the user while it is active.", - pp: 20, - effect: { - noCopy: true, - onSourceModifyDamage: function (damage, source, target, move) { - if (move.id in {'stomp':1, 'steamroller':1}) { - return this.chainModify(2); - } - }, - }, - }, - moonlight: { - inherit: true, - type: "Normal", - }, - mudsport: { - num: 300, - accuracy: true, - basePower: 0, - category: "Status", - desc: "Until the user is no longer active, all Electric-type attacks used by any active Pokemon have their power reduced to 0.33x. Fails if this move is already in effect; not stackable.", - shortDesc: "Weakens Electric-type attacks to 1/3 their power.", - id: "mudsport", - name: "Mud Sport", - pp: 15, - priority: 0, - flags: {}, - volatileStatus: 'mudsport', - onTryHitField: function (target, source) { - if (source.volatiles['mudsport']) return false; - }, - effect: { - noCopy: true, - onStart: function (pokemon) { - this.add("-start", pokemon, 'Mud Sport'); - }, - onBasePowerPriority: 1, - onAnyBasePower: function (basePower, user, target, move) { - if (move.type === 'Electric') return this.chainModify([0x548, 0x1000]); // The Mud Sport modifier is slightly higher than the usual 0.33 modifier (0x547) - }, - }, - secondary: false, - target: "all", - type: "Ground", - }, - muddywater: { - inherit: true, - basePower: 95, - }, - naturepower: { - inherit: true, - desc: "This move calls another move for use depending on the battle terrain. Earthquake in Wi-Fi battles.", - shortDesc: "Attack changes based on terrain. (Earthquake)", - onTryHit: function () {}, - onHit: function (pokemon) { - this.useMove('earthquake', pokemon); - }, - target: "self", - }, - overheat: { - inherit: true, - basePower: 140, - }, - perishsong: { - inherit: true, - flags: {sound: 1, distance: 1}, - }, - pinmissile: { - inherit: true, - accuracy: 85, - basePower: 14, - }, - poisonfang: { - inherit: true, - desc: "Has a 30% chance to badly poison the target.", - shortDesc: "30% chance to badly poison the target.", - secondary: { - chance: 30, - status: 'tox', - }, - }, - poisongas: { - inherit: true, - accuracy: 80, - }, - poisonpowder: { - inherit: true, - onTryHit: function () {}, - }, - powergem: { - inherit: true, - basePower: 70, - }, - psychoshift: { - inherit: true, - accuracy: 90, - }, - psywave: { - inherit: true, - accuracy: 80, - }, - quickguard: { - inherit: true, - desc: "The user and its party members are protected from attacks with original priority greater than 0 made by other Pokemon, including allies, during this turn. This attack has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this attack fails or if the user's last used move is not Detect, Endure, Protect, Quick Guard, or Wide Guard. If X is 256 or more, this move has a 1/(2^32) chance of being successful. Fails if the user moves last this turn or if this move is already in effect for the user's side.", - stallingMove: true, - onTryHitSide: function (side, source) { - return this.willAct() && this.runEvent('StallMove', source); - }, - onHitSide: function (side, source) { - source.addVolatile('stall'); - }, - effect: { - duration: 1, - onStart: function (target, source) { - this.add('-singleturn', source, 'Quick Guard'); - }, - onTryHitPriority: 4, - onTryHit: function (target, source, effect) { - // Quick Guard only blocks moves with a natural positive priority - // (e.g. it doesn't block 0 priority moves boosted by Prankster) - if (effect && (effect.id === 'feint' || this.getMove(effect.id).priority <= 0)) { - return; - } - this.add('-activate', target, 'Quick Guard'); - let lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is reset - if (source.volatiles['lockedmove'].duration === 2) { - delete source.volatiles['lockedmove']; - } - } - return null; - }, - }, - }, - ragepowder: { - inherit: true, - priority: 3, - flags: {}, - }, - reflect: { - inherit: true, - effect: { - duration: 5, - durationCallback: function (target, source, effect) { - if (source && source.hasItem('lightclay')) { - return 8; - } - return 5; - }, - onAnyModifyDamage: function (damage, source, target, move) { - if (target !== source && target.side === this.effectData.target && this.getCategory(move) === 'Physical') { - if (!move.crit && !move.infiltrates) { - this.debug('Reflect weaken'); - if (target.side.active.length > 1) return this.chainModify([0xA8F, 0x1000]); - return this.chainModify(0.5); - } - } - }, - onStart: function (side) { - this.add('-sidestart', side, 'Reflect'); - }, - onResidualOrder: 21, - onEnd: function (side) { - this.add('-sideend', side, 'Reflect'); - }, - }, - }, - relicsong: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - roar: { - inherit: true, - accuracy: 100, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1, authentic: 1}, - }, - rocktomb: { - inherit: true, - accuracy: 80, - basePower: 50, - pp: 10, - }, - round: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - sandtomb: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - }, - sacredsword: { - inherit: true, - pp: 20, - }, - scald: { - inherit: true, - desc: "Has a 30% chance to burn the target.", - shortDesc: "30% chance to burn the target.", - thawsTarget: false, - }, - screech: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, - }, - secretpower: { - inherit: true, - effect: { - duration: 1, - onAfterMoveSecondarySelf: function (source, target, move) { - if (this.random(10) < 3) { - this.boost({accuracy: -1}, target, source); - } - source.removeVolatile('secretpower'); - }, - }, - }, - sing: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, - }, - skillswap: { - inherit: true, - desc: "The user swaps its Ability with the target's Ability. Fails if either the user or the target's Ability is Illusion, Multitype, or Wonder Guard, or if both have the same Ability.", - onHit: function (target, source) { - let targetAbility = target.ability; - let sourceAbility = source.ability; - if (targetAbility === sourceAbility) { - return false; - } - this.add('-activate', source, 'move: Skill Swap', this.getAbility(targetAbility), this.getAbility(sourceAbility), '[of] ' + target); - source.setAbility(targetAbility); - target.setAbility(sourceAbility); - }, - }, - skullbash: { - inherit: true, - basePower: 100, - pp: 15, - }, - skydrop: { - inherit: true, - desc: "This attack takes the target into the air with the user on the first turn and executes on the second. 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.", - onTryHit: function (target, source, move) { - if (target.fainted) return false; - if (source.removeVolatile(move.id)) { - if (target !== source.volatiles['twoturnmove'].source) return false; - - if (target.hasType('Flying')) { - this.add('-immune', target, '[msg]'); - this.add('-end', target, 'Sky Drop'); - return null; - } - } else { - if (target.volatiles['substitute'] || target.side === source.side) { - return false; - } - - this.add('-prepare', source, move.name, target); - source.addVolatile('twoturnmove', target); - return null; - } - }, - }, - sleeppowder: { - inherit: true, - onTryHit: function () {}, - }, - smellingsalts: { - inherit: true, - basePower: 60, - }, - smog: { - inherit: true, - basePower: 20, - }, - snarl: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - snore: { - inherit: true, - basePower: 40, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - spore: { - inherit: true, - onTryHit: function () {}, - }, - stormthrow: { - inherit: true, - basePower: 40, - }, - stringshot: { - inherit: true, - desc: "Lowers the target's Speed by 1 stage.", - shortDesc: "Lowers the foe(s) Speed by 1.", - boosts: { - spe: -1, - }, - }, - strugglebug: { - inherit: true, - basePower: 30, - }, - stunspore: { - inherit: true, - onTryHit: function () {}, - }, - substitute: { - inherit: true, - 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 substitute is removed once enough damage is inflicted on it, or if the user switches out or faints. Baton Pass can be used to transfer the substitute to an ally, and the substitute will keep its remaining HP. Until the substitute is broken, it receives damage from all attacks made by other Pokemon and shields the user from status effects and stat stage changes caused by other Pokemon. The user still takes normal damage from weather and status effects while behind its substitute. If the substitute breaks during a multi-hit attack, the user will take damage from any remaining hits. If a substitute is created while the user is partially trapped, the partial-trapping effect ends immediately. This move fails if the user does not have enough HP remaining to create a substitute, or if it already has a substitute.", - effect: { - onStart: function (target) { - this.add('-start', target, 'Substitute'); - this.effectData.hp = Math.floor(target.maxhp / 4); - delete target.volatiles['partiallytrapped']; - }, - onTryPrimaryHitPriority: -1, - onTryPrimaryHit: function (target, source, move) { - if (target === source || move.flags['authentic']) { - return; - } - let damage = this.getDamage(source, target, move); - if (!damage && damage !== 0) { - this.add('-fail', target); - 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; - } - 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 && damage) { - this.damage(this.calcRecoilDamage(damage, move), 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 0; // hit - }, - onEnd: function (target) { - this.add('-end', target, 'Substitute'); - }, - }, - }, - submission: { - inherit: true, - pp: 25, - }, - supersonic: { - inherit: true, - flags: {protect: 1, reflectable: 1, mirror: 1, sound: 1}, - }, - surf: { - inherit: true, - basePower: 95, - }, - sweetkiss: { - inherit: true, - type: "Normal", - }, - sweetscent: { - inherit: true, - desc: "Lowers the target's evasiveness by 1 stage.", - shortDesc: "Lowers the foe(s) evasion by 1.", - boosts: { - evasion: -1, - }, - }, - swordsdance: { - inherit: true, - pp: 30, - }, - synchronoise: { - inherit: true, - basePower: 70, - pp: 15, - }, - tailwind: { - inherit: true, - pp: 30, - }, - technoblast: { - inherit: true, - basePower: 85, - }, - thief: { - inherit: true, - basePower: 40, - pp: 10, - }, - thunder: { - inherit: true, - basePower: 120, - }, - thunderbolt: { - inherit: true, - basePower: 95, - }, - uproar: { - inherit: true, - flags: {protect: 1, mirror: 1, sound: 1}, - }, - vinewhip: { - inherit: true, - basePower: 35, - pp: 15, - }, - wakeupslap: { - inherit: true, - basePower: 60, - }, - waterpledge: { - inherit: true, - basePower: 50, - basePowerCallback: function (target, source, move) { - if (move.sourceEffect in {firepledge:1, grasspledge:1}) { - this.add('-combine'); - return 150; - } - return 50; - }, - }, - watersport: { - num: 346, - accuracy: true, - basePower: 0, - category: "Status", - desc: "Until the user is no longer active, all Fire-type attacks used by any active Pokemon have their power reduced to 0.33x. Fails if this move is already in effect; not stackable.", - shortDesc: "Weakens Fire-type attacks to 1/3 their power.", - id: "watersport", - name: "Water Sport", - pp: 15, - priority: 0, - flags: {}, - volatileStatus: 'watersport', - onTryHitField: function (target, source) { - if (source.volatiles['watersport']) return false; - }, - effect: { - noCopy: true, - onStart: function (pokemon) { - this.add("-start", pokemon, 'move: Water Sport'); - }, - onBasePowerPriority: 1, - onAnyBasePower: function (basePower, user, target, move) { - if (move.type === 'Fire') return this.chainModify([0x548, 0x1000]); // The Water Sport modifier is slightly higher than the usual 0.33 modifier (0x547) - }, - }, - secondary: false, - target: "all", - type: "Water", - }, - whirlwind: { - inherit: true, - accuracy: 100, - flags: {protect: 1, reflectable: 1, mirror: 1, authentic: 1}, - }, - wideguard: { - inherit: true, - desc: "The user and its party members are protected from damaging attacks made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This attack has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this attack fails or if the user's last used move is not Detect, Endure, Protect, Quick Guard, or Wide Guard. If X is 256 or more, this move has a 1/(2^32) chance of being successful. Fails if the user moves last this turn or if this move is already in effect for the user's side.", - stallingMove: true, - onTryHitSide: function (side, source) { - return this.willAct() && this.runEvent('StallMove', source); - }, - onHitSide: function (side, source) { - source.addVolatile('stall'); - }, - }, - whirlpool: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Power doubles if the target is using Dive. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - }, - willowisp: { - inherit: true, - accuracy: 75, - }, - wonderroom: { - inherit: true, - priority: -7, - }, - wrap: { - inherit: true, - desc: "Prevents the target from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", - }, -}; diff --git a/mods/gen5/random-teams.js b/mods/gen5/random-teams.js deleted file mode 100644 index b973157c5529f..0000000000000 --- a/mods/gen5/random-teams.js +++ /dev/null @@ -1,730 +0,0 @@ -'use strict'; - -const RandomGen6Teams = require('../../mods/gen6/random-teams'); - -class RandomGen5Teams extends RandomGen6Teams { - randomSet(template, slot, teamDetails) { - if (slot === undefined) slot = 1; - let baseTemplate = (template = this.getTemplate(template)); - let species = template.species; - - if (!template.exists || (!template.randomBattleMoves && !template.learnset)) { - template = this.getTemplate('unown'); - - let err = new Error('Template incompatible with random battles: ' + species); - require('../../crashlogger')(err, 'The gen 5 randbat set generator'); - } - - if (template.battleOnly) species = template.baseSpecies; - - let movePool = (template.randomBattleMoves ? template.randomBattleMoves.slice() : Object.keys(template.learnset)); - let moves = []; - let ability = ''; - let item = ''; - let evs = { - hp: 85, - atk: 85, - def: 85, - spa: 85, - spd: 85, - spe: 85, - }; - let ivs = { - hp: 31, - atk: 31, - def: 31, - spa: 31, - spd: 31, - spe: 31, - }; - let hasType = {}; - hasType[template.types[0]] = true; - if (template.types[1]) { - hasType[template.types[1]] = true; - } - let hasAbility = {}; - hasAbility[template.abilities[0]] = true; - if (template.abilities[1]) { - hasAbility[template.abilities[1]] = true; - } - if (template.abilities['H']) { - hasAbility[template.abilities['H']] = true; - } - let availableHP = 0; - for (let i = 0, len = movePool.length; i < len; i++) { - if (movePool[i].substr(0, 11) === 'hiddenpower') availableHP++; - } - - let SetupException = { - extremespeed:1, suckerpunch:1, superpower:1, - dracometeor:1, leafstorm:1, overheat:1, - }; - let counterAbilities = { - 'Adaptability':1, 'Contrary':1, 'Hustle':1, 'Iron Fist':1, 'Sheer Force':1, 'Skill Link':1, - }; - - let hasMove, counter; - - do { - hasMove = {}; - for (let k = 0; k < moves.length; k++) { - if (moves[k].substr(0, 11) === 'hiddenpower') { - hasMove['hiddenpower'] = true; - } else { - hasMove[moves[k]] = true; - } - } - - while (moves.length < 4 && movePool.length) { - let moveid = this.sampleNoReplace(movePool); - if (moveid.substr(0, 11) === 'hiddenpower') { - availableHP--; - if (hasMove['hiddenpower']) continue; - hasMove['hiddenpower'] = true; - } else { - hasMove[moveid] = true; - } - moves.push(moveid); - } - - counter = this.queryMoves(moves, hasType, hasAbility, movePool); - - for (let k = 0; k < moves.length; k++) { - let moveid = moves[k]; - let move = this.getMove(moveid); - let rejected = false; - let isSetup = false; - - switch (moveid) { - // Not very useful without their supporting moves - case 'batonpass': - if (!counter.setupType && !counter['speedsetup'] && !hasMove['substitute'] && !hasMove['wish'] && !hasAbility['Speed Boost']) rejected = true; - break; - case 'focuspunch': - if (!hasMove['substitute'] || counter.damagingMoves.length < 2) rejected = true; - break; - case 'perishsong': - if (!hasMove['protect']) rejected = true; - break; - case 'rest': { - let sleepTalk = movePool.indexOf('sleeptalk'); - if (sleepTalk >= 0) { - movePool.splice(sleepTalk, 1); - rejected = true; - } - break; - } - case 'sleeptalk': - if (!hasMove['rest']) rejected = true; - break; - case 'storedpower': - if (!counter.setupType && !hasMove['cosmicpower']) rejected = true; - break; - - // 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': - if (counter.setupType !== 'Physical' || counter['physicalsetup'] > 1) rejected = true; - if (counter.Physical + counter['physicalpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; - isSetup = true; - break; - case 'calmmind': case 'nastyplot': case 'quiverdance': case 'tailglow': - if (counter.setupType !== 'Special' || counter['specialsetup'] > 1) rejected = true; - if (counter.Special + counter['specialpool'] < 2 && !hasMove['batonpass'] && (!hasMove['rest'] || !hasMove['sleeptalk'])) rejected = true; - isSetup = true; - break; - case 'growth': case 'shellsmash': case 'workup': - if (counter.setupType !== 'Mixed' || counter['mixedsetup'] > 1) rejected = true; - if (counter.damagingMoves.length + counter['physicalpool'] + counter['specialpool'] < 2 && !hasMove['batonpass']) rejected = true; - if (moveid === 'growth' && !hasMove['sunnyday']) rejected = true; - isSetup = true; - break; - case 'agility': case 'autotomize': case 'rockpolish': - if (counter.damagingMoves.length < 2 && !counter.setupType && !hasMove['batonpass']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - if (!counter.setupType) isSetup = true; - break; - - // Bad after setup - case 'circlethrow': case 'dragontail': - if (!!counter['speedsetup'] || hasMove['encore'] || hasMove['roar'] || hasMove['whirlwind']) rejected = true; - break; - case 'fakeout': case 'superfang': - if (counter.setupType || hasMove['substitute'] || hasMove['switcheroo'] || hasMove['trick']) rejected = true; - break; - case 'haze': case 'knockoff': case 'magiccoat': case 'pursuit': case 'spikes': case 'stealthrock': case 'toxicspikes': case 'waterspout': - if (counter.setupType || !!counter['speedsetup'] || (hasMove['rest'] && hasMove['sleeptalk'])) rejected = true; - break; - case 'healingwish': - if (counter.setupType || !!counter['recovery'] || hasMove['substitute']) rejected = true; - break; - case 'nightshade': case 'seismictoss': - if (counter.stab || counter.setupType || counter.damagingMoves.length > 2) rejected = true; - break; - case 'protect': - if (counter.setupType && (hasAbility['Guts'] || hasAbility['Speed Boost']) && !hasMove['batonpass']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - break; - case 'roar': - if (counter.setupType || hasMove['dragontail']) rejected = true; - break; - case 'switcheroo': case 'trick': - if (counter.Physical + counter.Special < 3 || hasMove['lightscreen'] || hasMove['reflect'] || hasMove['trickroom']) rejected = true; - break; - case 'trickroom': - if (counter.setupType || !!counter['speedsetup'] || counter.damagingMoves.length < 2) rejected = true; - if (hasMove['lightscreen'] || hasMove['reflect']) rejected = true; - break; - case 'uturn': - if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass']) rejected = true; - break; - case 'voltswitch': - if (counter.setupType || !!counter['speedsetup'] || hasMove['batonpass'] || hasMove['magnetrise'] || hasMove['uturn']) rejected = true; - break; - - // Bit redundant to have both - // Attacks: - case 'bugbite': - if (hasMove['uturn']) rejected = true; - break; - case 'dragonclaw': - if (hasMove['dragontail'] || hasMove['outrage']) rejected = true; - break; - case 'dragonpulse': - if (hasMove['dracometeor']) rejected = true; - break; - case 'boltstrike': - if (!counter.setupType && hasMove['fusionbolt']) rejected = true; - break; - case 'discharge': case 'thunder': - if (hasMove['voltswitch']) rejected = true; - break; - case 'fusionbolt': - if (counter.setupType && hasMove['boltstrike']) rejected = true; - break; - case 'thunderbolt': - if (hasMove['discharge'] || hasMove['thunder'] || hasMove['voltswitch']) rejected = true; - break; - case 'crosschop': case 'highjumpkick': - if (hasMove['closecombat']) rejected = true; - break; - case 'drainpunch': - if (hasMove['closecombat'] || hasMove['crosschop'] || hasMove['highjumpkick']) rejected = true; - break; - case 'fierydance': case 'flamethrower': - if (hasMove['blueflare'] || hasMove['fireblast'] || hasMove['lavaplume'] || hasMove['overheat']) rejected = true; - break; - case 'firepunch': - if (hasMove['flareblitz']) rejected = true; - break; - case 'overheat': - if (counter.setupType === 'Special' || hasMove['fireblast']) rejected = true; - break; - case 'airslash': - if (hasMove['hurricane']) rejected = true; - break; - case 'bravebird': case 'drillpeck': case 'pluck': - if (hasMove['acrobatics']) rejected = true; - break; - case 'solarbeam': - if ((!hasMove['sunnyday'] && template.species !== 'Ninetales') || hasMove['gigadrain'] || hasMove['leafstorm']) rejected = true; - break; - case 'gigadrain': - if ((!counter.setupType && hasMove['leafstorm']) || hasMove['petaldance']) rejected = true; - break; - case 'leafstorm': - if (counter.setupType && hasMove['gigadrain']) rejected = true; - break; - case 'bonemerang': case 'earthpower': - if (hasMove['earthquake']) rejected = true; - break; - case 'icebeam': - if (hasMove['blizzard']) rejected = true; - break; - case 'return': - if (hasMove['bodyslam'] || hasMove['facade'] || hasMove['doubleedge'] || hasMove['tailslap']) rejected = true; - break; - case 'weatherball': - if (!hasMove['sunnyday']) rejected = true; - break; - case 'poisonjab': - if (hasMove['gunkshot']) rejected = true; - break; - case 'psychic': - if (hasMove['psyshock']) rejected = true; - break; - case 'ancientpower': - if (hasMove['paleowave']) rejected = true; - break; - case 'rockblast': case 'rockslide': - if (hasMove['stoneedge'] || hasMove['headsmash']) rejected = true; - break; - case 'stoneedge': - if (hasMove['headsmash']) rejected = true; - break; - case 'hydropump': - if (hasMove['razorshell'] || hasMove['scald']) rejected = true; - break; - case 'surf': - if (hasMove['hydropump'] || hasMove['scald']) rejected = true; - break; - case 'waterfall': - if (hasMove['aquatail']) rejected = true; - break; - - // Status: - case 'cottonguard': - if (hasMove['reflect']) rejected = true; - break; - case 'encore': case 'suckerpunch': - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - break; - case 'lightscreen': - if (hasMove['calmmind']) rejected = true; - break; - case 'moonlight': case 'painsplit': case 'recover': case 'roost': case 'softboiled': case 'synthesis': - if (hasMove['rest'] || hasMove['wish']) rejected = true; - break; - case 'substitute': - if (hasMove['pursuit'] || hasMove['uturn'] || hasMove['voltswitch']) rejected = true; - break; - case 'thunderwave': - if (counter.setupType || !!counter['speedsetup'] || hasMove['discharge'] || hasMove['trickroom']) rejected = true; - if (hasMove['rest'] && hasMove['sleeptalk']) rejected = true; - break; - case 'willowisp': - if (hasMove['lavaplume'] || hasMove['scald']) rejected = true; - break; - } - - // Some Pokemon require recovery - if (!counter.recovery && template.baseStats.hp >= 165 && movePool.indexOf('wish') >= 0) { - if (move.category === 'Status' || !hasType[move.type] && !move.damage) rejected = true; - } - - // This move doesn't satisfy our setup requirements: - if ((move.category === 'Physical' && counter.setupType === 'Special') || (move.category === 'Special' && counter.setupType === 'Physical')) { - if (!SetupException[move.id] && (!hasType[move.type] || counter.stab > 1 || counter[move.category] < 2)) rejected = true; - } - if (counter.setupType && !isSetup && counter.setupType !== 'Mixed' && move.category !== counter.setupType && counter[counter.setupType] < 2 && !hasMove['batonpass'] && moveid !== 'rest' && moveid !== 'sleeptalk') { - if (move.category !== 'Status' || counter[counter.setupType] + counter.Status > 3 && counter['physicalsetup'] + counter['specialsetup'] < 2) rejected = true; - } - if (counter.setupType === 'Special' && move.id === 'hiddenpower' && counter['Special'] <= 2 && !hasType[move.type] && !counter['Physical'] && counter['specialpool']) { - // Hidden Power isn't good enough - if ((!hasType['Ghost'] || !counter['Ghost'] || move.type !== 'Fighting') && (!hasType['Electric'] || move.type !== 'Ice')) rejected = true; - } - if (move.priority !== 0 && (!!counter['speedsetup'])) { - rejected = true; - } - - // Remove rejected moves from the move list - if (rejected && (movePool.length - availableHP || availableHP && (move.id === 'hiddenpower' || !hasMove['hiddenpower']))) { - moves.splice(k, 1); - break; - } - - // Handle Hidden Power IVs - if (move.id === 'hiddenpower') { - let HPivs = this.getType(move.type).HPivs; - for (let iv in HPivs) { - ivs[iv] = HPivs[iv]; - } - } - } - if (moves.length === 4 && !counter.stab && !hasMove['metalburst'] && (counter['physicalpool'] || counter['specialpool'])) { - if (counter.damagingMoves.length === 0) { - // A set shouldn't have no attacking moves - moves.splice(this.random(moves.length), 1); - } else if (counter.damagingMoves.length === 1) { - let damagingid = counter.damagingMoves[0].id; - if (movePool.length - availableHP || availableHP && (damagingid === 'hiddenpower' || !hasMove['hiddenpower'])) { - if (!counter.damagingMoves[0].damage && template.species !== 'Porygon2') { - moves.splice(counter.damagingMoveIndex[damagingid], 1); - } - } - } else if (!counter.damagingMoves[0].damage && !counter.damagingMoves[1].damage && template.species !== 'Porygon2') { - // If you have three or more attacks, and none of them are STAB, reject one of them at random - let rejectableMoves = []; - let baseDiff = movePool.length - availableHP; - for (let l = 0; l < counter.damagingMoves.length; l++) { - if (counter.damagingMoves[l].id === 'technoblast') continue; - if (baseDiff || availableHP && (!hasMove['hiddenpower'] || counter.damagingMoves[l].id === 'hiddenpower')) { - rejectableMoves.push(counter.damagingMoveIndex[counter.damagingMoves[l].id]); - } - } - if (rejectableMoves.length) { - moves.splice(rejectableMoves[this.random(rejectableMoves.length)], 1); - } - } - } - } while (moves.length < 4 && movePool.length); - - // If Hidden Power has been removed, reset the IVs - if (!hasMove['hiddenpower']) { - ivs = { - hp: 31, - atk: 31, - def: 31, - spa: 31, - spd: 31, - spe: 31, - }; - } - - let abilities = Object.values(baseTemplate.abilities); - abilities.sort((a, b) => this.getAbility(b).rating - this.getAbility(a).rating); - let ability0 = this.getAbility(abilities[0]); - let ability1 = this.getAbility(abilities[1]); - let ability2 = this.getAbility(abilities[2]); - ability = ability0.name; - if (abilities[1]) { - if (abilities[2] && ability2.rating === ability1.rating) { - if (this.random(2)) ability1 = ability2; - } - if (ability0.rating <= ability1.rating) { - if (this.random(2)) ability = ability1.name; - } else if (ability0.rating - 0.6 <= ability1.rating) { - if (!this.random(3)) ability = ability1.name; - } - - let rejectAbility = false; - if (ability in counterAbilities) { - // Adaptability, Contrary, Hustle, Iron Fist, Sheer Force, Skill Link - rejectAbility = !counter[toId(ability)]; - } else if (ability === 'Blaze') { - rejectAbility = !counter['Fire']; - } else if (ability === 'Chlorophyll') { - rejectAbility = !hasMove['sunnyday'] && !teamDetails['sun']; - } else if (ability === 'Compound Eyes' || ability === 'No Guard') { - rejectAbility = !counter['inaccurate']; - } else if (ability === 'Defiant' || ability === 'Moxie') { - rejectAbility = !counter['Physical'] && !hasMove['batonpass']; - } else if (ability === 'Gluttony' || ability === 'Moody') { - rejectAbility = true; - } else if (ability === 'Lightning Rod') { - rejectAbility = template.types.indexOf('Ground') >= 0; - } else if (ability === 'Limber') { - rejectAbility = template.types.indexOf('Electric') >= 0; - } else if (ability === 'Overgrow') { - rejectAbility = !counter['Grass']; - } else if (ability === 'Poison Heal') { - rejectAbility = abilities.indexOf('Technician') >= 0 && !!counter['technician']; - } else if (ability === 'Prankster') { - rejectAbility = !counter['Status']; - } else if (ability === 'Reckless' || ability === 'Rock Head') { - rejectAbility = !counter['recoil']; - } else if (ability === 'Sand Veil') { - rejectAbility = !teamDetails['sand']; - } else if (ability === 'Serene Grace') { - rejectAbility = !counter['serenegrace'] || template.id === 'chansey' || template.id === 'blissey'; - } else if (ability === 'Simple') { - rejectAbility = !counter.setupType && !hasMove['flamecharge'] && !hasMove['stockpile']; - } else if (ability === 'Snow Cloak') { - rejectAbility = !teamDetails['hail']; - } else if (ability === 'Sturdy') { - rejectAbility = !!counter['recoil'] && !counter['recovery']; - } else if (ability === 'Swarm') { - rejectAbility = !counter['Bug']; - } else if (ability === 'Swift Swim') { - rejectAbility = !hasMove['raindance'] && !teamDetails['rain']; - } else if (ability === 'Technician') { - rejectAbility = !counter['technician'] || (abilities.indexOf('Skill Link') >= 0 && counter['skilllink'] >= counter['technician']); - } else if (ability === 'Torrent') { - rejectAbility = !counter['Water']; - } - - if (rejectAbility) { - // Only switch if the alternative doesn't suck - if (ability === ability1.name) { - ability = ability0.name; - } else if (ability1.rating > 1) { - ability = ability1.name; - } - } - if (abilities.indexOf('Chlorophyll') >= 0 && ability !== 'Solar Power' && hasMove['sunnyday']) { - ability = 'Chlorophyll'; - } - if (abilities.indexOf('Guts') >= 0 && ability !== 'Quick Feet' && hasMove['facade']) { - ability = 'Guts'; - } - if (abilities.indexOf('Swift Swim') >= 0 && hasMove['raindance']) { - ability = 'Swift Swim'; - } - } - - item = 'Leftovers'; - if (template.requiredItems) { - item = template.requiredItems[this.random(template.requiredItems.length)]; - - // First, the extra high-priority items - } else if (template.species === 'Marowak') { - item = 'Thick Club'; - } else if (template.species === 'Deoxys-Attack') { - item = (slot === 0 && hasMove['stealthrock']) ? 'Focus Sash' : 'Life Orb'; - } else if (template.species === 'Farfetch\'d') { - item = 'Stick'; - } else if (template.species === 'Pikachu') { - item = 'Light Ball'; - } else if (template.species === 'Shedinja' || template.species === 'Smeargle') { - item = 'Focus Sash'; - } else if (template.species === 'Unown') { - item = 'Choice Specs'; - } else if (template.species === 'Wobbuffet' && hasMove['destinybond'] && this.random(2)) { - item = 'Custap Berry'; - } else if (ability === 'Imposter') { - item = 'Choice Scarf'; - } else if (hasMove['trick'] && hasMove['gyroball'] && (ability === 'Levitate' || hasType['Flying'])) { - item = 'Macho Brace'; - } else if (hasMove['trick'] && hasMove['gyroball']) { - item = 'Iron Ball'; - } else if (hasMove['switcheroo'] || hasMove['trick']) { - let randomNum = this.random(2); - if (counter.Physical >= 3 && (template.baseStats.spe >= 95 || randomNum)) { - item = 'Choice Band'; - } else if (counter.Special >= 3 && (template.baseStats.spe >= 95 || randomNum)) { - item = 'Choice Specs'; - } else { - item = 'Choice Scarf'; - } - } else if (template.evos.length) { - item = 'Eviolite'; - } else if (hasMove['rest'] && !hasMove['sleeptalk'] && ability !== 'Natural Cure' && ability !== 'Shed Skin') { - item = 'Chesto Berry'; - } else if (ability === 'Harvest') { - item = 'Sitrus Berry'; - } else if (hasMove['lightscreen'] && hasMove['reflect']) { - item = 'Light Clay'; - } else if (hasMove['acrobatics']) { - item = 'Flying Gem'; - } else if (hasMove['shellsmash']) { - item = 'White Herb'; - } else if (hasMove['facade'] || ability === 'Poison Heal' || ability === 'Toxic Boost') { - item = 'Toxic Orb'; - } else if (hasMove['raindance']) { - item = 'Damp Rock'; - } else if (hasMove['sunnyday']) { - item = 'Heat Rock'; - } else if (ability === 'Magic Guard' && hasMove['psychoshift']) { - item = 'Flame Orb'; - } else if (ability === 'Sheer Force' || ability === 'Magic Guard') { - item = 'Life Orb'; - } else if (ability === 'Unburden' && (counter['Physical'] || counter['Special'])) { - // Give Unburden mons a random Gem of the type of one of their damaging moves - let eligibleTypes = []; - for (let i = 0; i < moves.length; i++) { - let move = this.getMove(moves[i]); - if (!move.basePower && !move.basePowerCallback) continue; - eligibleTypes.push(move.type); - } - item = eligibleTypes[this.random(eligibleTypes.length)] + ' Gem'; - } else if (ability === 'Guts') { - if (hasMove['drainpunch']) { - item = 'Flame Orb'; - } else { - item = 'Toxic Orb'; - } - - // Medium priority - } else if (hasMove['lightscreen'] || hasMove['reflect']) { - item = 'Light Clay'; - } else if (counter.Physical >= 4 && !hasMove['fakeout'] && !hasMove['suckerpunch'] && !hasMove['flamecharge'] && !hasMove['rapidspin']) { - item = this.random(3) ? 'Choice Band' : 'Expert Belt'; - } else if (counter.Special >= 4) { - item = this.random(3) ? 'Choice Specs' : 'Expert Belt'; - } else if (this.getEffectiveness('Ground', template) >= 2 && ability !== 'Levitate' && !hasMove['magnetrise']) { - item = 'Air Balloon'; - } else if ((hasMove['eruption'] || hasMove['waterspout']) && !counter['Status']) { - item = 'Choice Scarf'; - } else if (hasMove['substitute'] && hasMove['reversal']) { - let eligibleTypes = []; - for (let i = 0; i < moves.length; i++) { - let move = this.getMove(moves[i]); - if (!move.basePower && !move.basePowerCallback) continue; - eligibleTypes.push(move.type); - } - item = eligibleTypes[this.random(eligibleTypes.length)] + ' Gem'; - } else if (hasMove['detect'] || hasMove['protect'] || hasMove['substitute']) { - item = 'Leftovers'; - } else if ((hasMove['flail'] || hasMove['reversal']) && ability !== 'Sturdy') { - item = 'Focus Sash'; - } else if (ability === 'Iron Barbs') { - item = 'Rocky Helmet'; - } else if (template.baseStats.hp + template.baseStats.def + template.baseStats.spd >= 285) { - item = 'Leftovers'; - } else if (counter.Physical + counter.Special >= 3 && counter.setupType) { - item = 'Life Orb'; - } else if (counter.Physical + counter.Special >= 4) { - item = 'Expert Belt'; - } else if (slot === 0 && ability !== 'Sturdy' && !counter['recoil']) { - item = 'Focus Sash'; - } else if (hasMove['outrage']) { - item = 'Lum Berry'; - - // This is the "REALLY can't think of a good item" cutoff - } else if (this.getEffectiveness('Rock', template) >= 1) { - item = 'Leftovers'; - } else if (hasType['Poison']) { - item = 'Black Sludge'; - } else if (this.getImmunity('Ground', template) && this.getEffectiveness('Ground', template) >= 1 && ability !== 'Levitate' && !hasMove['magnetrise']) { - item = 'Air Balloon'; - } else if (counter.Status <= 1 && ability !== 'Sturdy' && !hasMove['rapidspin']) { - item = 'Life Orb'; - } else { - item = 'Leftovers'; - } - - if (item === 'Leftovers' && hasType['Poison']) { - item = 'Black Sludge'; - } - - let levelScale = { - Uber: 73, - OU: 75, - BL: 76, - UU: 77, - BL2: 78, - RU: 79, - BL3: 80, - NU: 81, - }; - let customScale = { - Blaziken: 74, 'Deoxys-Defense': 74, Landorus: 74, Manaphy: 74, Thundurus: 74, 'Tornadus-Therian': 74, Unown: 85, - }; - let level = levelScale[template.tier] || 75; - if (customScale[template.name]) level = customScale[template.name]; - - // Minimize confusion damage - if (!counter['Physical']) { - evs.atk = 0; - ivs.atk = hasMove['hiddenpower'] ? ivs.atk - 28 : 0; - } - - if (hasMove['gyroball'] || hasMove['trickroom']) { - evs.spe = 0; - ivs.spe = hasMove['hiddenpower'] ? ivs.spe - 28 : 0; - } - - return { - name: template.baseSpecies, - species: species, - moves: moves, - ability: ability, - evs: evs, - ivs: ivs, - item: item, - level: level, - shiny: !this.random(1024), - }; - } - randomTeam(side) { - let pokemonLeft = 0; - let pokemon = []; - - let excludedTiers = {'NFE':1, 'LC Uber':1, 'LC':1}; - - let pokemonPool = []; - for (let id in this.data.FormatsData) { - let template = this.getTemplate(id); - if (!template.isNonstandard && !excludedTiers[template.tier] && template.randomBattleMoves) { - pokemonPool.push(id); - } - } - - let typeCount = {}; - let typeComboCount = {}; - let baseFormes = {}; - let uberCount = 0; - let nuCount = 0; - let teamDetails = {stealthRock: 0, toxicSpikes: 0, rapidSpin: 0}; - - while (pokemonPool.length && pokemonLeft < 6) { - let template = this.getTemplate(this.sampleNoReplace(pokemonPool)); - // Limit to one of each species - if (!template.exists || template.gen >= this.gen || baseFormes[template.baseSpecies]) continue; - - let tier = template.tier; - switch (tier) { - case 'Uber': - // Ubers are limited to 2 but have a 20% chance of being added anyway - if (uberCount > 1 && this.random(5) >= 1) continue; - break; - case 'NU': - // NUs are limited to 2 but have a 20% chance of being added anyway - if (nuCount > 1 && this.random(5) >= 1) continue; - } - - // Adjust rate for species with multiple formes - switch (template.baseSpecies) { - case 'Arceus': - if (this.random(17) >= 1) continue; - break; - case 'Basculin': case 'Castform': - if (this.random(2) >= 1) continue; - break; - case 'Genesect': - if (this.random(5) >= 1) continue; - break; - case 'Meloetta': - if (this.random(2) >= 1) continue; - break; - } - - // Limit 2 of any type - let types = template.types; - let skip = false; - for (let t = 0; t < types.length; t++) { - if (typeCount[types[t]] > 1 && this.random(5) >= 1) { - skip = true; - break; - } - } - if (skip) continue; - - let set = this.randomSet(template, pokemon.length, teamDetails); - - // Illusion shouldn't be the last Pokemon of the team - if (set.ability === 'Illusion' && pokemonLeft > 4) continue; - - // Limit 1 of any type combination - let typeCombo = types.join(); - if (set.ability === 'Drought' || set.ability === 'Drizzle') { - // Drought and Drizzle don't count towards the type combo limit - typeCombo = set.ability; - } - if (typeCombo in typeComboCount) continue; - - pokemon.push(set); - pokemonLeft++; - - // Increment counters - baseFormes[template.baseSpecies] = 1; - - for (let t = 0; t < types.length; t++) { - if (types[t] in typeCount) { - typeCount[types[t]]++; - } else { - typeCount[types[t]] = 1; - } - } - typeComboCount[typeCombo] = 1; - - if (tier === 'Uber') { - uberCount++; - } else if (tier === 'NU') { - nuCount++; - } - - if (set.ability === 'Drizzle' || set.moves.indexOf('raindance') >= 0) { - teamDetails['rain'] = 1; - } else if (set.ability === 'Drought' || set.moves.indexOf('sunnyday') >= 0) { - teamDetails['sun'] = 1; - } else if (set.ability === 'Sand Stream') { - teamDetails['sand'] = 1; - } else if (set.ability === 'Snow Warning') { - teamDetails['hail'] = 1; - } - } - return pokemon; - } -} - -module.exports = RandomGen5Teams; diff --git a/mods/gen5/scripts.js b/mods/gen5/scripts.js deleted file mode 100644 index 503d881bbb373..0000000000000 --- a/mods/gen5/scripts.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -exports.BattleScripts = { - inherit: 'gen6', - gen: 5, -}; diff --git a/mods/gen6/moves.js b/mods/gen6/moves.js deleted file mode 100644 index d4728ec864f23..0000000000000 --- a/mods/gen6/moves.js +++ /dev/null @@ -1,269 +0,0 @@ -'use strict'; - -exports.BattleMovedex = { - allyswitch: { - inherit: true, - desc: "The user swaps positions with its ally on the opposite side of the field. Fails if there is no Pokemon at that position, if the user is the only Pokemon on its side, or if the user is in the middle.", - shortDesc: "Switches position with the ally on the far side.", - priority: 1, - }, - bestow: { - inherit: true, - desc: "The target receives the user's held item. Fails if the user has no item or is holding a Mail, if the target is already holding an item, if the user is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, a Pokemon that can Mega Evolve holding the Mega Stone for its species, or if the target is one of those Pokemon and the user is holding the respective item.", - }, - brickbreak: { - inherit: true, - desc: "If this attack does not miss, the effects of Reflect and Light Screen end for the target's side of the field before damage is calculated.", - }, - covet: { - inherit: true, - desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", - }, - darkvoid: { - inherit: true, - desc: "Causes the target to fall asleep.", - shortDesc: "Puts the foe(s) to sleep.", - accuracy: 80, - onTryMove: function () {}, - }, - destinybond: { - inherit: true, - onPrepareHit: function (pokemon) { - pokemon.removeVolatile('destinybond'); - }, - }, - diamondstorm: { - inherit: true, - desc: "Has a 50% chance to raise the user's Defense by 1 stage.", - shortDesc: "50% chance to raise user's Def by 1 for each hit.", - secondary: { - chance: 50, - self: { - boosts: { - def: 1, - }, - }, - }, - }, - fellstinger: { - inherit: true, - basePower: 30, - effect: { - duration: 1, - onAfterMoveSecondarySelf: function (pokemon, target, move) { - if (!target || target.fainted || target.hp <= 0) this.boost({atk:2}, pokemon, pokemon, move); - pokemon.removeVolatile('fellstinger'); - }, - }, - desc: "Raises the user's Attack by 2 stages if this move knocks out the target.", - shortDesc: "Raises user's Attack by 2 if this KOes the target.", - }, - flyingpress: { - inherit: true, - basePower: 80, - }, - heavyslam: { - inherit: true, - desc: "The power of this move depends on (user's weight / target's weight), rounded down. Power is equal to 120 if the result is 5 or more, 100 if 4, 80 if 3, 60 if 2, and 40 if 1 or less.", - }, - kingsshield: { - inherit: true, - desc: "The user is protected from most attacks made by other Pokemon during this turn, and Pokemon trying to make contact with the user have their Attack lowered by 2 stages. Non-damaging moves go through this protection. This move has a 1/X chance of being successful, where X starts at 1 and triples each time this move is successfully used. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn.", - shortDesc: "Protects from attacks. Contact try: lowers Atk by 2.", - effect: { - duration: 1, - onStart: function (target) { - this.add('-singleturn', target, 'Protect'); - }, - onTryHitPriority: 3, - onTryHit: function (target, source, move) { - if (!move.flags['protect'] || move.category === 'Status') return; - this.add('-activate', target, 'move: Protect'); - let 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, this.getMove("King's Shield")); - } - return null; - }, - }, - }, - knockoff: { - inherit: true, - desc: "If the target is holding an item that can be removed from it, ignoring the Ability Sticky Hold, this move's power is multiplied by 1.5. If the user has not fainted, the target loses its held item. This move cannot cause Pokemon with the Ability Sticky Hold to lose their held item, cause Pokemon that can Mega Evolve to lose the Mega Stone for their species, or cause a Kyogre, a Groudon, a Giratina, an Arceus, or a Genesect to lose their Blue Orb, Red Orb, Griseous Orb, Plate, or Drive, respectively. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", - }, - leechlife: { - inherit: true, - basePower: 20, - isViable: false, - pp: 15, - }, - minimize: { - inherit: true, - desc: "Raises the user's evasiveness by 2 stages. Whether or not the user's evasiveness was changed, Body Slam, Dragon Rush, Flying Press, Heat Crash, 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.", - effect: { - noCopy: true, - onSourceModifyDamage: function (damage, source, target, move) { - if (move.id in {'stomp':1, 'steamroller':1, 'bodyslam':1, 'flyingpress':1, 'dragonrush':1, 'phantomforce':1, 'heatcrash':1, 'shadowforce':1}) { - return this.chainModify(2); - } - }, - onAccuracy: function (accuracy, target, source, move) { - if (move.id in {'stomp':1, 'steamroller':1, 'bodyslam':1, 'flyingpress':1, 'dragonrush':1, 'phantomforce':1, 'heatcrash':1, 'shadowforce':1}) { - return true; - } - return accuracy; - }, - }, - }, - mistyterrain: { - inherit: true, - desc: "For 5 turns, the terrain becomes Misty Terrain. During the effect, the power of Dragon-type attacks used against grounded Pokemon is multiplied by 0.5 and grounded Pokemon cannot be inflicted with a major status condition. Camouflage transforms the user into a Fairy type, Nature Power becomes Moonblast, and Secret Power has a 30% chance to lower Special Attack by 1 stage. Fails if the current terrain is Misty Terrain.", - effect: { - duration: 5, - durationCallback: function (source, effect) { - if (source && source.hasItem('terrainextender')) { - return 8; - } - return 5; - }, - onSetStatus: function (status, target, source, effect) { - if (!target.isGrounded() || target.isSemiInvulnerable()) return; - if (effect.id === 'synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) { - this.add('-activate', target, 'move: Misty Terrain'); - } - return false; - }, - onBasePower: function (basePower, attacker, defender, move) { - if (move.type === 'Dragon' && defender.isGrounded() && !defender.isSemiInvulnerable()) { - this.debug('misty terrain weaken'); - return this.chainModify(0.5); - } - }, - onStart: function (battle, source, effect) { - if (effect && effect.effectType === 'Ability') { - this.add('-fieldstart', 'move: Misty Terrain', '[from] ability: ' + effect, '[of] ' + source); - } else { - this.add('-fieldstart', 'move: Misty Terrain'); - } - }, - onResidualOrder: 21, - onResidualSubOrder: 2, - onEnd: function (side) { - this.add('-fieldend', 'Misty Terrain'); - }, - }, - }, - mysticalfire: { - inherit: true, - basePower: 65, - }, - paraboliccharge: { - inherit: true, - basePower: 50, - }, - rockblast: { - inherit: true, - flags: {protect: 1, mirror: 1}, - }, - powder: { - inherit: true, - effect: { - duration: 1, - onStart: function (target) { - this.add('-singleturn', target, 'Powder'); - }, - onTryMovePriority: 1, - onTryMove: function (pokemon, target, move) { - if (move.type === 'Fire') { - this.add('-activate', pokemon, 'move: Powder'); - this.damage(this.clampIntRange(Math.round(pokemon.maxhp / 4), 1)); - return false; - } - }, - }, - }, - reflecttype: { - inherit: true, - desc: "Causes the user's types to become the same as the current types of the target. Fails if the user is an Arceus.", - }, - sheercold: { - inherit: true, - desc: "Deals damage to the target equal to the target's maximum HP. Ignores accuracy and evasiveness modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Ability Sturdy are immune.", - shortDesc: "OHKOs the target. Fails if user is a lower level.", - ohko: true, - }, - suckerpunch: { - inherit: true, - basePower: 80, - }, - swagger: { - inherit: true, - accuracy: 90, - }, - switcheroo: { - inherit: true, - desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, or a Drive to or from a Kyogre, a Groudon, a Giratina, an Arceus, or a Genesect, respectively. Pokemon with the Ability Sticky Hold are immune.", - }, - tackle: { - inherit: true, - basePower: 50, - }, - thief: { - inherit: true, - desc: "If this attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. The target's item is not stolen if it is a Mail, or if the target is a Kyogre holding a Blue Orb, a Groudon holding a Red Orb, a Giratina holding a Griseous Orb, an Arceus holding a Plate, a Genesect holding a Drive, or a Pokemon that can Mega Evolve holding the Mega Stone for its species. Items lost to this move cannot be regained with Recycle or the Ability Harvest.", - }, - thousandarrows: { - inherit: true, - isUnreleased: true, - }, - thousandwaves: { - inherit: true, - isUnreleased: true, - }, - thunderwave: { - inherit: true, - accuracy: 100, - }, - trick: { - inherit: true, - desc: "The user swaps its held item with the target's held item. Fails if either the user or the target is holding a Mail, if neither is holding an item, if the user is trying to give or take a Mega Stone to or from the species that can Mega Evolve with it, or if the user is trying to give or take a Blue Orb, a Red Orb, a Griseous Orb, a Plate, or a Drive to or from a Kyogre, a Groudon, a Giratina, an Arceus, or a Genesect, respectively. Pokemon with the Ability Sticky Hold are immune.", - }, - watershuriken: { - inherit: true, - category: "Physical", - desc: "Hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 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 Ability Skill Link, this move will always hit five times.", - }, - wideguard: { - inherit: true, - desc: "The user and its party members are protected from damaging attacks made by other Pokemon, including allies, during this turn that target all adjacent foes or all adjacent Pokemon. This move modifies the same 1/X chance of being successful used by other protection moves, where X starts at 1 and triples each time this move is successfully used, but does not use the chance to check for failure. X resets to 1 if this move fails or if the user's last move used is not Detect, Endure, King's Shield, Protect, Quick Guard, Spiky Shield, or Wide Guard. Fails if the user moves last this turn or if this move is already in effect for the user's side.", - shortDesc: "Protects allies from multi-target hits this turn.", - effect: { - duration: 1, - onStart: function (target, source) { - this.add('-singleturn', source, 'Wide Guard'); - }, - onTryHitPriority: 4, - onTryHit: function (target, source, effect) { - // Wide Guard blocks damaging spread moves - if (effect && (effect.category === 'Status' || (effect.target !== 'allAdjacent' && effect.target !== 'allAdjacentFoes'))) { - return; - } - this.add('-activate', target, 'move: Wide Guard'); - let lockedmove = source.getVolatile('lockedmove'); - if (lockedmove) { - // Outrage counter is reset - if (source.volatiles['lockedmove'].duration === 2) { - delete source.volatiles['lockedmove']; - } - } - return null; - }, - }, - }, -}; diff --git a/mods/gen6/scripts.js b/mods/gen6/scripts.js deleted file mode 100644 index e96ea3e4786be..0000000000000 --- a/mods/gen6/scripts.js +++ /dev/null @@ -1,5 +0,0 @@ -'use strict'; - -exports.BattleScripts = { - gen: 6, -}; diff --git a/mods/gennext/abilities.js b/mods/gennext/abilities.js deleted file mode 100644 index 3ef1b7fd8e051..0000000000000 --- a/mods/gennext/abilities.js +++ /dev/null @@ -1,608 +0,0 @@ -'use strict'; - -exports.BattleAbilities = { - "swiftswim": { - inherit: true, - onModifySpe: function (spe, pokemon) { - if (this.isWeather(['raindance', 'primordialsea'])) { - return this.chainModify(1.5); - } - }, - }, - "chlorophyll": { - inherit: true, - onModifySpe: function (spe) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - return this.chainModify(1.5); - } - }, - }, - "sandrush": { - inherit: true, - onModifySpe: function (spe, pokemon) { - if (this.isWeather('sandstorm')) { - return this.chainModify(1.5); - } - }, - }, - "forecast": { - inherit: true, - onModifyMove: function (move) { - if (move.weather) { - let weather = move.weather; - move.weather = null; - move.onHit = function (target, source) { - this.setWeather(weather, source, this.getAbility('forecast')); - this.weatherData.duration = 0; - }; - move.target = 'self'; - } - }, - }, - "thickfat": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'hail') return false; - }, - onSourceModifyAtk: function (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: function (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); - } - }, - }, - "marvelscale": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'hail') return false; - }, - }, - "snowcloak": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'hail') return false; - }, - onSourceBasePower: function (basePower) { - if (this.isWeather('hail')) { - return basePower * 3 / 4; - } - return basePower * 7 / 8; - }, - onModifyAccuracy: function () {}, - }, - "sandveil": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'sandstorm') return false; - }, - onSourceBasePower: function (basePower) { - if (this.isWeather('sandstorm')) { - return basePower * 4 / 5; - } - }, - onModifyAccuracy: function () {}, - }, - "waterveil": { - inherit: true, - onSourceBasePower: function (basePower) { - if (this.isWeather(['raindance', 'primordialsea'])) { - return basePower * 3 / 4; - } - return basePower * 7 / 8; - }, - }, - "icebody": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'hail') return false; - }, - onResidual: function (target, source, effect) { - this.heal(target.maxhp / 16); - }, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact'] && this.isWeather('hail')) { - if (this.random(10) < 3) { - source.trySetStatus('frz', target); - } - } - }, - onWeather: function () {}, - }, - "flamebody": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'hail') return false; - }, - }, - "static": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact']) { - source.trySetStatus('par', target); - } - }, - }, - "cutecharm": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact']) { - source.addVolatile('Attract', target); - } - }, - }, - "poisonpoint": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (move && move.flags['contact']) { - source.trySetStatus('psn', target); - } - }, - }, - "flowergift": { - inherit: true, - onModifyMove: function (move) { - if (move.id === 'sunnyday') { - let weather = move.weather; - move.weather = null; - move.onHit = function (target, source) { - this.setWeather(weather, source, this.getAbility('flowergift')); - this.weatherData.duration = 0; - }; - move.target = 'self'; - move.sideCondition = 'flowergift'; - } - }, - onUpdate: function (pokemon) { - if (this.isWeather(['sunnyday', 'desolateland'])) { - if (pokemon.isActive && pokemon.speciesid === 'cherrim' && this.effectData.forme !== 'Sunshine') { - this.effectData.forme = 'Sunshine'; - this.add('-formechange', pokemon, 'Cherrim-Sunshine', '[msg]'); - this.boost({spd:1}); - } - } else if (pokemon.isActive && pokemon.speciesid === 'cherrim' && this.effectData.forme) { - delete this.effectData.forme; - this.add('-formechange', pokemon, 'Cherrim', '[msg]'); - } - }, - effect: { - onSwitchInPriority: 1, - onSwitchIn: function (target) { - if (!target.fainted) { - this.boost({spd:1}, target, target, this.getAbility('flowergift')); - } - target.side.removeSideCondition('flowergift'); - }, - }, - }, - "slowstart": { - inherit: true, - effect: { - duration: 3, - onStart: function (target) { - this.add('-start', target, 'Slow Start'); - }, - onModifyAtk: function (atk, pokemon) { - if (pokemon.ability !== 'slowstart') { - pokemon.removeVolatile('slowstart'); - return; - } - return atk / 2; - }, - onModifySpe: function (spe, pokemon) { - if (pokemon.ability !== 'slowstart') { - pokemon.removeVolatile('slowstart'); - return; - } - return spe / 2; - }, - onEnd: function (target) { - this.add('-end', target, 'Slow Start'); - }, - }, - }, - "compoundeyes": { - 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: function (accuracy) { - if (typeof accuracy !== 'number') return; - this.debug('compoundeyes - enhancing accuracy'); - return accuracy * 1.6; - }, - id: "compoundeyes", - name: "Compound Eyes", - rating: 3.5, - num: 14, - }, - "keeneye": { - 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: function (move) { - if (typeof move.accuracy !== 'number') return; - this.debug('keeneye - enhancing accuracy'); - move.accuracy *= 1.6; - }, - id: "keeneye", - name: "Keen Eye", - rating: 3.5, - num: 51, - }, - "solidrock": { - inherit: true, - onSourceModifyDamage: function (damage, attacker, defender, move) { - if (move.typeMod > 0) { - this.add('-message', "The attack was weakened by Solid Rock!"); - return this.chainModify(0.5); - } - }, - }, - "filter": { - inherit: true, - onSourceModifyDamage: function (damage, attacker, defender, move) { - if (move.typeMod > 0) { - this.add('-message', "The attack was weakened by Filter!"); - return this.chainModify(0.5); - } - }, - }, - "heatproof": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'Fire' || type === 'brn') return false; - }, - }, - "reckless": { - inherit: true, - onBasePower: function (basePower, attacker, defender, move) { - if (move.recoil || move.hasCustomRecoil || attacker.item === 'lifeorb') { - this.debug('Reckless boost'); - return basePower * 12 / 10; - } - }, - }, - "clearbody": { - inherit: true, - onBoost: function (boost, target, source) { - for (let i in boost) { - if (boost[i] < 0) { - delete boost[i]; - this.add("-message", target.name + "'s stats were not lowered! (placeholder)"); - } - } - }, - }, - "whitesmoke": { - inherit: true, - onBoost: function (boost, target, source) { - for (let i in boost) { - if (boost[i] < 0) { - delete boost[i]; - this.add("-message", target.name + "'s stats were not lowered! (placeholder)"); - } - } - }, - }, - "rockhead": { - inherit: true, - onDamage: function (damage, target, source, effect) { - if (effect && effect.id in {lifeorb: 1, recoil: 1}) return false; - }, - }, - "download": { - inherit: true, - onStart: function (pokemon) { - if (pokemon.template.baseSpecies === 'Genesect') { - if (!pokemon.getItem().onDrive) return; - } - let foeactive = pokemon.side.foe.active; - let totaldef = 0; - let totalspd = 0; - for (let i = 0; i < foeactive.length; i++) { - if (!foeactive[i] || foeactive[i].fainted) continue; - totaldef += foeactive[i].stats.def; - totalspd += foeactive[i].stats.spd; - } - if (totaldef && totaldef >= totalspd) { - this.boost({spa:1}); - } else if (totalspd) { - this.boost({atk:1}); - } - }, - }, - "victorystar": { - inherit: true, - onAllyModifyMove: function (move) { - if (typeof move.accuracy === 'number') { - move.accuracy *= 1.5; - } - }, - }, - "shellarmor": { - inherit: true, - onDamage: function (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: function (target, source, move) { - if (move.id === 'shellsmash') { - target.setAbility(''); - } - }, - }, - "battlearmor": { - inherit: true, - onDamage: function (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; - } - }, - }, - "weakarmor": { - inherit: true, - onDamage: function (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; - } - }, - onAfterDamage: function () {}, - }, - "magmaarmor": { - inherit: true, - onImmunity: function (type, pokemon) { - if (type === 'hail') return false; - if (type === 'frz') return false; - }, - onDamage: function (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; - } - }, - }, - "multiscale": { - inherit: true, - onSourceModifyDamage: function (damage, source, target, move) { - if (target.hp >= target.maxhp) { - this.add('-message', "The attack was slightly weakened by Multiscale!"); - return this.chainModify(2 / 3); - } - }, - }, - "ironfist": { - inherit: true, - onBasePower: function (basePower, attacker, defender, move) { - if (move.flags['punch']) { - return basePower * 1.33; - } - }, - }, - "stench": { - inherit: true, - onModifyMove: function (move) { - if (move.category !== "Status") { - this.debug('Adding Stench flinch'); - if (!move.secondaries) move.secondaries = []; - for (let i = 0; i < move.secondaries.length; i++) { - if (move.secondaries[i].volatileStatus === 'flinch') return; - } - move.secondaries.push({ - chance: 40, - volatileStatus: 'flinch', - }); - } - }, - }, - "aftermath": { - inherit: true, - onAfterDamage: function (damage, target, source, move) { - if (source && source !== target && move && !target.hp) { - this.damage(source.maxhp / 3, source, target, null, true); - } - }, - }, - "cursedbody": { - desc: "When this Pokemon faints, attacker is Cursed.", - shortDesc: "When this Pokemon faints, attacker is Cursed.", - onFaint: function (target, source, effect) { - if (effect && effect.effectType === 'Move' && source) { - source.addVolatile('curse'); - } - }, - id: "cursedbody", - name: "Cursed Body", - rating: 3, - num: 130, - }, - "gluttony": { - inherit: true, - onResidualOrder: 26, - onResidualSubOrder: 1, - onResidual: function (pokemon) { - if (!pokemon.gluttonyFlag && !pokemon.item && this.getItem(pokemon.lastItem).isBerry) { - pokemon.gluttonyFlag = true; - pokemon.setItem(pokemon.lastItem); - this.add("-item", pokemon, pokemon.item, '[from] ability: Gluttony'); - } - }, - }, - "guts": { - inherit: true, - onDamage: function (damage, attacker, defender, effect) { - if (effect && (effect.id === 'brn' || effect.id === 'psn' || effect.id === 'tox')) { - return damage / 2; - } - }, - }, - "quickfeet": { - inherit: true, - onDamage: function (damage, attacker, defender, effect) { - if (effect && (effect.id === 'brn' || effect.id === 'psn' || effect.id === 'tox')) { - return damage / 2; - } - }, - }, - "toxicboost": { - inherit: true, - onDamage: function (damage, attacker, defender, effect) { - if (effect && (effect.id === 'psn' || effect.id === 'tox')) { - return damage / 2; - } - }, - }, - "truant": { - inherit: true, - onBeforeMove: function () {}, - onModifyMove: function (move, pokemon) { - if (!move.self) move.self = {}; - if (!move.self.volatileStatus) move.self.volatileStatus = 'truant'; - }, - effect: { - duration: 2, - onStart: function (pokemon) { - this.add('-start', pokemon, 'Truant'); - }, - onBeforeMovePriority: 99, - onBeforeMove: function (pokemon, target, move) { - if (pokemon.removeVolatile('truant')) { - this.add('cant', pokemon, 'ability: Truant'); - this.heal(pokemon.maxhp / 3); - return false; - } - }, - }, - }, - "flareboost": { - inherit: true, - onDamage: function (damage, defender, attacker, effect) { - if (effect && (effect.id === 'brn')) { - return damage / 2; - } - }, - }, - "telepathy": { - inherit: true, - onStart: function (target) { - this.add('-start', target, 'move: Imprison'); - }, - onFoeDisableMove: function (pokemon) { - let foeMoves = this.effectData.target.moveset; - for (let f = 0; f < foeMoves.length; f++) { - pokemon.disableMove(foeMoves[f].id, 'hidden'); - } - pokemon.maybeDisabled = true; - }, - onFoeBeforeMove: function (attacker, defender, move) { - if (move.id !== 'struggle' && this.effectData.target.hasMove(move.id)) { - this.add('cant', attacker, 'move: Imprison', move); - return false; - } - }, - }, - "speedboost": { - inherit: true, - onResidualPriority: -1, - onResidual: function (pokemon) { - if (pokemon.activeTurns && !pokemon.volatiles.stall) { - this.boost({spe:1}); - } - }, - }, - "parentalbond": { - inherit: true, - onModifyMove: function (move, pokemon, target) { - if (move.category !== 'Status' && !move.selfdestruct && !move.multihit && ((target.side && target.side.active.length < 2) || move.target in {any:1, normal:1, randomNormal:1})) { - move.multihit = 2; - move.accuracy = true; - pokemon.addVolatile('parentalbond'); - } - }, - effect: { - duration: 1, - onBasePowerPriority: 8, - onBasePower: function (basePower) { - return this.chainModify(0.5); - }, - }, - }, - "swarm": { - inherit: true, - onFoeBasePower: function (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: function (damage, defender, attacker, effect) { - if (defender.hasType('Flying')) { - if (effect && effect.id === 'stealthrock') { - return damage / 2; - } - } - }, - }, - "adaptability": { - inherit: true, - onModifyMove: function (move) {}, - onBasePower: function (power, attacker, defender, move) { - if (!attacker.hasType(move.type)) { - return this.chainModify(1.33); - } - }, - }, - "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.", - onStart: function (pokemon) { - pokemon.addVolatile('shadowtag'); - }, - effect: { - duration: 2, - onFoeTrapPokemon: function (pokemon) { - if (pokemon.ability !== 'shadowtag') { - pokemon.tryTrap(true); - } - }, - }, - onBeforeMovePriority: 15, - onBeforeMove: function (pokemon) { - pokemon.removeVolatile('shadowtag'); - }, - onFoeMaybeTrapPokemon: function (pokemon, source) { - if (!source) source = this.effectData.target; - if (pokemon.ability !== 'shadowtag' && !source.volatiles.shadowtag) { - pokemon.maybeTrapped = true; - } - }, - id: "shadowtag", - name: "Shadow Tag", - rating: 5, - num: 23, - }, -}; diff --git a/mods/mixandmega/formats-data.js b/mods/mixandmega/formats-data.js deleted file mode 100644 index fad54ae5c5840..0000000000000 --- a/mods/mixandmega/formats-data.js +++ /dev/null @@ -1,48 +0,0 @@ -'use strict'; - -exports.BattleFormatsData = { - aegislash: { - inherit: true, - tier: "OU", - }, - blaziken: { - inherit: true, - tier: "OU", - }, - deoxysdefense: { - inherit: true, - tier: "OU", - }, - deoxysspeed: { - inherit: true, - tier: "OU", - }, - dragonite: { - inherit: true, - tier: "Uber", - }, - genesect: { - inherit: true, - tier: "OU", - }, - kyuremblack: { - inherit: true, - tier: "Uber", - }, - landorus: { - inherit: true, - tier: "OU", - }, - marshadow: { - inherit: true, - tier: "OU", - }, - regigigas: { - inherit: true, - tier: "Uber", - }, - slaking: { - inherit: true, - tier: "Uber", - }, -}; diff --git a/mods/mixandmega/items.js b/mods/mixandmega/items.js deleted file mode 100644 index 03f474c571660..0000000000000 --- a/mods/mixandmega/items.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -exports.BattleItems = { - blueorb: { - inherit: true, - onSwitchIn: function (pokemon) { - if (pokemon.isActive && !pokemon.template.isPrimal) { - this.insertQueue({pokemon: pokemon, choice: 'runPrimal'}); - } - }, - onPrimal: function (pokemon) { - let template = this.getMixedTemplate(pokemon.originalSpecies, 'Kyogre-Primal'); - pokemon.formeChange(template); - pokemon.baseTemplate = template; - if (pokemon.originalSpecies === 'Kyogre') { - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('detailschange', pokemon, pokemon.details); - } else { - if (pokemon.illusion) pokemon.ability = ''; - let oTemplate = this.getTemplate(pokemon.illusion || pokemon.originalSpecies); - this.add('-formechange', pokemon, oTemplate.species); - this.add('-start', pokemon, 'Blue Orb', '[silent]'); - } - this.add('-primal', pokemon.illusion || pokemon); - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; - }, - onTakeItem: function (item) { - return false; - }, - }, - redorb: { - inherit: true, - onSwitchIn: function (pokemon) { - if (pokemon.isActive && !pokemon.template.isPrimal) { - this.insertQueue({pokemon: pokemon, choice: 'runPrimal'}); - } - }, - onPrimal: function (pokemon) { - let template = this.getMixedTemplate(pokemon.originalSpecies, 'Groudon-Primal'); - pokemon.formeChange(template); - pokemon.baseTemplate = template; - if (pokemon.originalSpecies === 'Groudon') { - pokemon.details = template.species + (pokemon.level === 100 ? '' : ', L' + pokemon.level) + (pokemon.set.shiny ? ', shiny' : ''); - this.add('detailschange', pokemon, pokemon.details); - } else { - let oTemplate = this.getTemplate(pokemon.illusion || pokemon.originalSpecies); - this.add('-formechange', pokemon, oTemplate.species); - this.add('-start', pokemon, 'Red Orb', '[silent]'); - if (pokemon.illusion) { - pokemon.ability = ''; - let types = pokemon.illusion.template.types; - if (types.length > 1 || types[types.length - 1] !== 'Fire') { - this.add('-start', pokemon, 'typechange', (types[0] !== 'Fire' ? types[0] + '/' : '') + 'Fire', '[silent]'); - } - } else if (oTemplate.types.length !== pokemon.template.types.length || oTemplate.types[1] !== pokemon.template.types[1]) { - this.add('-start', pokemon, 'typechange', pokemon.template.types.join('/'), '[silent]'); - } - } - this.add('-primal', pokemon.illusion || pokemon); - pokemon.setAbility(template.abilities['0']); - pokemon.baseAbility = pokemon.ability; - }, - onTakeItem: function (item) { - return false; - }, - }, -}; diff --git a/mods/stadium/README.md b/mods/stadium/README.md deleted file mode 100644 index 04a22f02d9647..0000000000000 --- a/mods/stadium/README.md +++ /dev/null @@ -1,14 +0,0 @@ -Stadium -==================== - -This mod inherits from gen 1, which inherits from gen 2, and then applies the Stadium changes upon the gen 1 engine. - -List of major changes: - *Sleep lasts between 1 and 3 turns. - *Hyper Beam does recharge after a faint. - *Critical hits happen way less. - *Substitute now blocks all status ailments and draining. - *It allows tradebacks. - *Partial trapping moves miss and stop their duration upon target switch. - *Focus Energy actually works. - *Stat calculations are done properly, burn and para drop are lost if you lose status. \ No newline at end of file diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index fa4850361ed51..0000000000000 --- a/package-lock.json +++ /dev/null @@ -1,1468 +0,0 @@ -{ - "name": "pokemon-showdown", - "version": "0.11.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "@types/node": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.0.1.tgz", - "integrity": "sha512-bys2VRs6H7HP8S26aHgPWSiSX7q81TToe5HSSvl5bQjoSElQ2SwbGw2p6/DSDb7Vr0oKhewFao9ZuTn8DSag9Q==", - "dev": true - }, - "@types/nodemailer": { - "version": "1.3.33", - "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-1.3.33.tgz", - "integrity": "sha512-PONEJf/LwNcqgU/GpMIAquSBFdq+kCdpYI9TdoeGcTfLCsXzWunKzv4bUQs8zfKGz97CLymgoL0fMLYpOu+/1A==", - "dev": true, - "requires": { - "@types/node": "8.0.1", - "@types/nodemailer-direct-transport": "1.0.29", - "@types/nodemailer-smtp-transport": "2.7.2" - } - }, - "@types/nodemailer-direct-transport": { - "version": "1.0.29", - "resolved": "https://registry.npmjs.org/@types/nodemailer-direct-transport/-/nodemailer-direct-transport-1.0.29.tgz", - "integrity": "sha1-Ake7RzT4u/k5gkGxa0ECLhMD3fE=", - "dev": true, - "requires": { - "@types/nodemailer": "1.3.33" - } - }, - "@types/nodemailer-smtp-transport": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz", - "integrity": "sha512-sFeTdk87Xk4ADTs7HY32Thr/sD06HJHPbmjuCOGtqVhSnMeVPf3OQAU3d4oW9bhccRLpjCWUds00CrbuU/iLzw==", - "dev": true, - "requires": { - "@types/node": "8.0.1", - "@types/nodemailer": "1.3.33" - } - }, - "acorn-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", - "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, - "requires": { - "acorn": "3.3.0" - }, - "dependencies": { - "acorn": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true - } - } - }, - "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "argparse": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", - "integrity": "sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY=", - "dev": true, - "requires": { - "sprintf-js": "1.0.3" - } - }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, - "requires": { - "array-uniq": "1.0.3" - } - }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.1" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", - "dev": true, - "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" - } - }, - "browser-stdout": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", - "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "0.2.0" - } - }, - "callsites": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "circular-json": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.1.tgz", - "integrity": "sha1-vos2rvzN6LPKeqLWr8B6NyQsDS0=", - "dev": true - }, - "cli-width": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.1.0.tgz", - "integrity": "sha1-sjTKIJsp72b8UY2bmNWEewDt8Ao=", - "dev": true - }, - "cloud-env": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cloud-env/-/cloud-env-0.2.2.tgz", - "integrity": "sha1-cN+5m52o7R+/K/0U4vVjwRtWQdQ=", - "optional": true - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, - "color-convert": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", - "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "optional": true - }, - "commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", - "dev": true, - "requires": { - "graceful-readlink": "1.0.1" - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.2.11", - "typedarray": "0.0.6" - } - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.1", - "shebang-command": "1.2.0", - "which": "1.3.0" - } - }, - "debug": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", - "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, - "requires": { - "globby": "5.0.0", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "rimraf": "2.6.1" - } - }, - "diff": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", - "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", - "dev": true - }, - "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, - "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.4.1.tgz", - "integrity": "sha1-mc1+r8/8ov+Zpcj18qR01jZLS9M=", - "dev": true, - "requires": { - "ajv": "5.2.2", - "babel-code-frame": "6.22.0", - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "cross-spawn": "5.1.0", - "debug": "2.6.8", - "doctrine": "2.0.0", - "eslint-scope": "3.7.1", - "espree": "3.5.0", - "esquery": "1.0.0", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.2", - "globals": "9.18.0", - "ignore": "3.3.3", - "imurmurhash": "0.1.4", - "inquirer": "3.2.2", - "is-resolvable": "1.0.0", - "js-yaml": "3.9.1", - "json-stable-stringify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.4", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "pluralize": "4.0.0", - "progress": "2.0.0", - "require-uncached": "1.0.3", - "semver": "5.4.1", - "strip-json-comments": "2.0.1", - "table": "4.0.1", - "text-table": "0.2.0" - }, - "dependencies": { - "acorn": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.1.tgz", - "integrity": "sha512-vOk6uEMctu0vQrvuSqFdJyqj1Q0S5VTDL79qtjo+DhRr+1mmaD+tluFSCZqhvi/JUhXSzoZN2BhtstaPEeE8cw==", - "dev": true - }, - "ajv": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.2.2.tgz", - "integrity": "sha1-R8aNaehvXZUxA7AHSpQw3GPaXjk=", - "dev": true, - "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "json-schema-traverse": "0.3.1", - "json-stable-stringify": "1.0.1" - } - }, - "ansi-escapes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-2.0.0.tgz", - "integrity": "sha1-W65SvkJIeN2Xg+iRDj/Cki6DyBs=", - "dev": true - }, - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", - "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", - "dev": true, - "requires": { - "color-convert": "1.9.0" - } - }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, - "requires": { - "restore-cursor": "2.0.0" - } - }, - "espree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.0.tgz", - "integrity": "sha1-mDWGJb3QVYYeon4oZ+pyn69GPY0=", - "dev": true, - "requires": { - "acorn": "5.1.1", - "acorn-jsx": "3.0.1" - } - }, - "esprima": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5" - } - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "inquirer": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz", - "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==", - "dev": true, - "requires": { - "ansi-escapes": "2.0.0", - "chalk": "2.1.0", - "cli-cursor": "2.1.0", - "cli-width": "2.1.0", - "external-editor": "2.0.4", - "figures": "2.0.0", - "lodash": "4.17.4", - "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" - }, - "dependencies": { - "chalk": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", - "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", - "dev": true, - "requires": { - "ansi-styles": "3.2.0", - "escape-string-regexp": "1.0.5", - "supports-color": "4.2.1" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "js-yaml": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.9.1.tgz", - "integrity": "sha512-CbcG379L1e+mWBnLvHWWeLs8GyV/EMw862uLI3c+GxVyDHWZcjZinwuBd3iW2pgxgIlksW/1vNJa4to+RvDOww==", - "dev": true, - "requires": { - "argparse": "1.0.9", - "esprima": "4.0.0" - } - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true - }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, - "requires": { - "mimic-fn": "1.1.0" - } - }, - "pluralize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-4.0.0.tgz", - "integrity": "sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I=", - "dev": true - }, - "progress": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", - "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", - "dev": true - }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, - "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" - } - }, - "run-async": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, - "requires": { - "is-promise": "2.1.0" - } - }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "3.0.0" - } - }, - "supports-color": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz", - "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==", - "dev": true, - "requires": { - "has-flag": "2.0.0" - } - }, - "table": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/table/-/table-4.0.1.tgz", - "integrity": "sha1-qBFsEz+sLGH0pCCrbN9cTWHw5DU=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.17.4", - "slice-ansi": "0.0.4", - "string-width": "2.1.1" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - } - } - }, - "eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", - "dev": true, - "requires": { - "esrecurse": "4.1.0", - "estraverse": "4.2.0" - } - }, - "esquery": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", - "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, - "requires": { - "estraverse": "4.2.0" - } - }, - "esrecurse": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.1.0.tgz", - "integrity": "sha1-RxO2U2rffyrE8yfVWed1a/9kgiA=", - "dev": true, - "requires": { - "estraverse": "4.1.1", - "object-assign": "4.1.1" - }, - "dependencies": { - "estraverse": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.1.1.tgz", - "integrity": "sha1-9srKcokzqFDvkGYdDheYK6RxEaI=", - "dev": true - } - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "external-editor": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.0.4.tgz", - "integrity": "sha1-HtkZnanL/i7y96MbL96LDRI2iXI=", - "dev": true, - "requires": { - "iconv-lite": "0.4.18", - "jschardet": "1.5.1", - "tmp": "0.0.31" - } - }, - "fast-deep-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", - "requires": { - "websocket-driver": "0.6.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "1.2.2", - "object-assign": "4.1.1" - } - }, - "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, - "requires": { - "circular-json": "0.3.1", - "del": "2.2.2", - "graceful-fs": "4.1.11", - "write": "0.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": 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": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globals": { - "version": "9.18.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", - "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", - "dev": true - }, - "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true - }, - "growl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz", - "integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA==", - "dev": true - }, - "ignore": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.3.tgz", - "integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true - }, - "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, - "requires": { - "is-path-inside": "1.0.0" - } - }, - "is-path-inside": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", - "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, - "requires": { - "path-is-inside": "1.0.2" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-tokens": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.1.tgz", - "integrity": "sha1-COnxMkhKLEWjCQfp3E1VZ7fxFNc=", - "dev": true - }, - "jschardet": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-1.5.1.tgz", - "integrity": "sha512-vE2hT1D0HLZCLLclfBSfkfTTedhVj0fubHpJBHKwwUWX0nSbhPAfk+SG9rTX95BYNmau8rGFfCeaT6T5OW1C2A==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true - }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" - } - }, - "lodash": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", - "integrity": "sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=", - "dev": true - }, - "lodash._baseassign": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", - "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", - "dev": true, - "requires": { - "lodash._basecopy": "3.0.1", - "lodash.keys": "3.1.2" - } - }, - "lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", - "dev": true - }, - "lodash._basecreate": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", - "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", - "dev": true - }, - "lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", - "dev": true - }, - "lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", - "dev": true - }, - "lodash.create": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", - "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", - "dev": true, - "requires": { - "lodash._baseassign": "3.2.0", - "lodash._basecreate": "3.0.3", - "lodash._isiterateecall": "3.0.9" - } - }, - "lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", - "dev": true - }, - "lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", - "dev": true - }, - "lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", - "dev": true, - "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" - } - }, - "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "mime": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", - "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", - "optional": true - }, - "mimic-fn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.1.0.tgz", - "integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "1.1.8" - } - }, - "minimist": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", - "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", - "optional": true - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "mocha": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.4.2.tgz", - "integrity": "sha1-0O9NMyEm2/GNDWQMmzgt1IvpdZQ=", - "dev": true, - "requires": { - "browser-stdout": "1.3.0", - "commander": "2.9.0", - "debug": "2.6.0", - "diff": "3.2.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.1", - "growl": "1.9.2", - "json3": "3.3.2", - "lodash.create": "3.1.1", - "mkdirp": "0.5.1", - "supports-color": "3.1.2" - }, - "dependencies": { - "debug": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.0.tgz", - "integrity": "sha1-vFlryr52F/Edn6FTYe3tVgi4SZs=", - "dev": true, - "requires": { - "ms": "0.7.2" - } - }, - "glob": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", - "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "ms": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", - "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", - "dev": true - }, - "supports-color": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", - "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", - "dev": true, - "requires": { - "has-flag": "1.0.0" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node-static": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/node-static/-/node-static-0.7.9.tgz", - "integrity": "sha1-m7afziKB96480fuYPp6g7AzZ/ss=", - "optional": true, - "requires": { - "colors": "1.1.2", - "mime": "1.3.6", - "optimist": "0.6.1" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "optional": true, - "requires": { - "minimist": "0.0.10", - "wordwrap": "0.0.3" - } - }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, - "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" - }, - "dependencies": { - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "2.0.4" - } - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "readable-stream": { - "version": "2.2.11", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.11.tgz", - "integrity": "sha512-h+8+r3MKEhkiVrwdKL8aWs1oc1VvBu33ueshOvS26RsZQ3Amhx/oO3TKe4lApSV9ueY6as8EAh7mtuFjdlhg9Q==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "safe-buffer": "5.0.1", - "string_decoder": "1.0.2", - "util-deprecate": "1.0.2" - } - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" - } - }, - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - }, - "rimraf": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", - "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=", - "dev": true, - "requires": { - "glob": "7.1.2" - } - }, - "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true - }, - "rx-lite-aggregates": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", - "dev": true, - "requires": { - "rx-lite": "3.1.2" - } - }, - "safe-buffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz", - "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c=", - "dev": true - }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true - }, - "sockjs": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.18.tgz", - "integrity": "sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=", - "requires": { - "faye-websocket": "0.10.0", - "uuid": "2.0.3" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string_decoder": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.2.tgz", - "integrity": "sha1-sp4fThEl+pehA4K4pTNze3SR4Xk=", - "dev": true, - "requires": { - "safe-buffer": "5.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.31", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", - "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, - "requires": { - "prelude-ls": "1.1.2" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "2.5.0-dev.20170622", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.5.0-dev.20170622.tgz", - "integrity": "sha1-usxy/QNWA/W+C2pODT448GJP7P4=", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", - "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=" - }, - "websocket-driver": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", - "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", - "requires": { - "websocket-extensions": "0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz", - "integrity": "sha1-domUmcGEtu91Q3fC27DNbLVdKec=" - }, - "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", - "dev": true, - "requires": { - "isexe": "2.0.0" - } - }, - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "optional": true - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, - "requires": { - "mkdirp": "0.5.1" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } -} diff --git a/package.json b/package.json index fad20bdc1f100..54b425248d3f4 100644 --- a/package.json +++ b/package.json @@ -2,25 +2,34 @@ "name": "pokemon-showdown", "preferGlobal": true, "description": "The server for the Pokémon Showdown battle simulator", - "version": "0.11.1", + "version": "0.11.2", "dependencies": { - "sockjs": "0.3.18" + "probe-image-size": "^4.0.0", + "replace": "^1.0.1", + "sockjs": "0.3.18", + "sucrase": "^3.9.5" }, "optionalDependencies": { - "cloud-env": "0.2.2", - "node-static": "0.7.9" - }, - "nonDefaultDependencies": { - "nodemailer": "4.0.1", - "ofe": "0.5.1" + "cloud-env": "^0.2.2", + "node-oom-heapdump": "^1.0.10", + "node-static": "^0.7.10", + "nodemailer": "^4.6.8", + "permessage-deflate": "^0.1.6" }, "engines": { "node": ">=7.7.0" }, - "main": "app.js", "scripts": { - "start": "node app.js", - "test": "eslint --rulesdir=dev-tools/eslint --cache *.js chat-plugins/ config/ data/ dev-tools/ mods/ sim/ tournaments/ test/ && mocha" + "start": "node pokemon-showdown start", + "build": "node build", + "test": "eslint --cache . && tslint --project . && node build && mocha && tsc", + "tsc": "tsc", + "lint": "eslint --cache ." + }, + "husky": { + "hooks": { + "pre-push": "eslint --cache ." + } }, "bin": "./pokemon-showdown", "homepage": "http://pokemonshowdown.com", @@ -48,10 +57,15 @@ "private": true, "license": "MIT", "devDependencies": { - "eslint": "^4.0.0", - "mocha": "^3.0.0", - "@types/node": "^8.0.1", - "@types/nodemailer": "^1.3.33", - "typescript": "^2.5.0-dev.20170622" + "@types/cloud-env": "^0.2.0", + "@types/node": "^8.10.36", + "@types/node-static": "^0.7.2", + "@types/nodemailer": "^4.6.5", + "@types/sockjs": "^0.3.31", + "eslint": "^5.13.0", + "husky": "^1.1.2", + "mocha": "^5.2.0", + "tslint": "^5.13.0", + "typescript": "~3.3.3333" } } diff --git a/pokemon-showdown b/pokemon-showdown index 5d4fd0e9b4c83..03d404a58c904 100755 --- a/pokemon-showdown +++ b/pokemon-showdown @@ -1,65 +1,151 @@ #!/usr/bin/env node -'use strict'; -const child_process = require('child_process'); -const fs = require('fs'); -const path = require('path'); - -// Make sure we're Node 8+ - -try { - eval('{ let a = async () => {}; }'); -} catch (e) { - console.log("We require Node.js version 8 or later; you're using " + process.version); - process.exit(1); -} - -// Make sure our dependencies are available, and install them if they -// aren't - -try { - require.resolve('sockjs'); -} catch (e) { - console.log('Installing dependencies...'); - child_process.execSync('npm install --production', {stdio: 'inherit'}); -} - -// Make sure config.js exists. If not, copy it over synchronously from -// config-example.js, since it's needed before we can start the server - -try { - require.resolve('./config/config'); -} catch (err) { - if (err.code !== 'MODULE_NOT_FOUND') throw err; // should never happen - - console.log('config.js does not exist. Creating one with default settings...'); - fs.writeFileSync( - path.resolve(__dirname, 'config/config.js'), - fs.readFileSync(path.resolve(__dirname, 'config/config-example.js')) - ); -} +// build everything +require('./build'); if (!process.argv[2] || /^[0-9]+$/.test(process.argv[2])) { - // Start the server. We manually load app.js so it can be configured to run as - // the main module, rather than this file being considered the main module. - // This ensures any dependencies that were just installed can be found when - // running on Windows and avoids any other potential side effects of the main - // module not being app.js like it is assumed to be. + // Start the server. // // The port the server should host on can be passed using the second argument // when launching with this file the same way app.js normally allows, e.g. to // host on port 9000: // $ ./pokemon-showdown 9000 - require('module')._load('./app', module, true); + require('module')._load('./server', module, true); } else switch (process.argv[2]) { + case 'help': + case 'h': + case '?': + case '-h': + case '--help': + case '-?': + console.log('pokemon-showdown start [PORT]'); + console.log(''); + console.log(' Starts a PS server on the specified port'); + console.log(' (Defaults to the port setting in config/config.js)'); + console.log(' (The port setting in config/config.js defaults to 8000)'); + console.log(''); + console.log('pokemon-showdown generate-team [FORMAT-ID [RANDOM-SEED]]'); + console.log(''); + console.log(' Generates a random team, and writes it to stdout in packed team format'); + console.log(' (Format defaults to "gen7randombattle")'); + console.log(''); + console.log('pokemon-showdown validate-team [FORMAT-ID]'); + console.log(''); + console.log(' Reads a team from stdin, and validates it'); + console.log(' If valid: exits with code 0'); + console.log(' If invalid: writes errors to stderr, exits with code 1'); + console.log(''); + console.log('pokemon-showdown simulate-battle'); + console.log(''); + console.log(' Simulates a battle, taking input to stdin and writing output to stdout'); + console.log(' Protocol is documented in ./.sim-dist/README.md'); + console.log(''); + console.log('pokemon-showdown unpack-team'); + console.log(''); + console.log(' Reads a team from stdin, writes the unpacked JSON to stdout'); + console.log(''); + console.log('pokemon-showdown pack-team'); + console.log(''); + console.log(' Reads a JSON team from stdin, writes the packed team to stdout'); + console.log(' NOTE for all team-processing functions: We can only handle JSON teams'); + console.log(' and packed teams; the PS server is incapable of processing exported'); + console.log(' teams.'); + console.log(''); + console.log('pokemon-showdown help'); + console.log(''); + console.log(' Displays this reference'); + break; + case 'start': + { + process.argv[2] = process.argv[3]; + require('module')._load('./server', module, true); + break; + } case 'generate-team': - const Dex = require('./sim/dex'); - global.toId = Dex.getId; - const seed = process.argv[4] ? process.argv[4].split(',').map(Number) : undefined; - console.log(Dex.packTeam(Dex.generateTeam(process.argv[3], seed))); + { + var Dex = require('./.sim-dist/dex'); + global.toId = Dex.getId; + var seed = process.argv[4] ? process.argv[4].split(',').map(Number) : undefined; + console.log(Dex.packTeam(Dex.generateTeam(process.argv[3], seed))); + } + break; + case 'validate-team': + { + var Dex = require('./.sim-dist/dex'); + var TeamValidator = require('./.sim-dist/team-validator'); + var validator = TeamValidator(process.argv[3]); + var Streams = require('./.lib-dist/streams'); + var stdin = new Streams.ReadStream(process.stdin); + + stdin.readLine().then(function (textTeam) { + try { + var team = Dex.fastUnpackTeam(textTeam); + var result = validator.validateTeam(team); + if (result) { + console.error(result.join('\n')); + process.exit(1); + } + process.exit(0); + } catch (e) { + console.error(e); + process.exit(1); + } + }); + } + break; + case 'simulate-battle': + { + var BattleTextStream = require('./.sim-dist/battle-stream').BattleTextStream; + var Streams = require('./.lib-dist/streams'); + var stdin = new Streams.ReadStream(process.stdin); + var stdout = new Streams.WriteStream(process.stdout); + + var battleStream = new BattleTextStream({ + debug: process.argv[3] === '--debug' + }); + stdin.pipeTo(battleStream); + battleStream.pipeTo(stdout); + } + break; + case 'unpack-team': + { + var Dex = require('./.sim-dist/dex'); + var Streams = require('./.lib-dist/streams'); + var stdin = new Streams.ReadStream(process.stdin); + + stdin.readLine().then(function (packedTeam) { + try { + var unpackedTeam = Dex.fastUnpackTeam(packedTeam); + console.log(JSON.stringify(unpackedTeam)); + process.exit(0); + } catch (e) { + console.error(e); + process.exit(1); + } + }); + } + break; + case 'pack-team': + { + var Dex = require('./.sim-dist/dex'); + var Streams = require('./.lib-dist/streams'); + var stdin = new Streams.ReadStream(process.stdin); + + stdin.readLine().then(function (unpackedTeam) { + try { + var packedTeam = Dex.packTeam(JSON.parse(unpackedTeam)); + console.log(packedTeam); + process.exit(0); + } catch (e) { + console.error(e); + process.exit(1); + } + }); + } break; default: console.error('Unrecognized command: ' + process.argv[2]); + console.error('Use `pokemon-showdown help` for help'); process.exit(1); } diff --git a/process-manager.js b/process-manager.js deleted file mode 100644 index 03034aa53a96b..0000000000000 --- a/process-manager.js +++ /dev/null @@ -1,212 +0,0 @@ -/** - * Process Manager - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This file abstract out multiprocess logic involved in several tasks. - * - * @license MIT license - */ - -'use strict'; - -const EventEmitter = require('events'); - -/** - * @type {Map} - */ -const processManagers = new Map(); - -/** - * @param {any} str - * @return {string} - */ -function serialize(str) { - if (typeof str === 'string') return str; - return JSON.stringify(str); -} - -class ProcessWrapper extends EventEmitter { - /** - * @param {any} PM - */ - constructor(PM) { - super(); - - /** @type {any} */ - this.PM = PM; - /** @type {boolean} */ - this.active = true; - /** @type {Map} */ - this.pendingTasks = new Map(); - /** @type {any} */ - this.process = require('child_process').fork(PM.execFile, [], {cwd: __dirname}); - - // Allow events to bubble-up to the wrapper - this.process.on('message', /** @param {string} message */ message => this.emit('message', message)); - this.on('message', PM.onMessageUpstream); - } - - /** - * @param {string} data - */ - send(data) { - return this.process.send(data); - } - - release() { - if (this.load || this.active) return; - this.PM = null; - this.removeAllListeners('message'); - this.process.disconnect(); - } - - /** - * @return {number} - */ - get load() { - return this.pendingTasks.size; - } -} - -/** - * @typedef {Object} PMOptions - * The path to the file to spawn the child process(es) from. - * @property {string} [execFile] - * The maximum number of child processes to spawn. - * @property {number} [maxProcesses] - * Whether or not the process manager handles a chat commands module. - * @property {boolean} [isChatBased] - */ - -class ProcessManager { - /** - * @param {PMOptions} options - */ - constructor(options) { - if (!('execFile' in options) || !('maxProcesses' in options) || !('isChatBased' in options)) { - throw new Error( - "An options object given to the ProcessManager constructor is missing required properties! " + - `The execFile given is: ${options.execFile || ''}` - ); - } - - /** @type {ProcessWrapper[]} */ - this.processes = []; - /** @type {number} */ - this.taskId = 0; - /** @type {string} */ - this.execFile = '' + options.execFile; - /** @type {number} */ - this.maxProcesses = (typeof options.maxProcesses === 'number') ? options.maxProcesses : 1; - /** @type {boolean} */ - this.isChatBased = !!options.isChatBased; - - processManagers.set(this, options.execFile); - } - - spawn() { - for (let i = this.processes.length; i < this.maxProcesses; i++) { - this.processes.push(new ProcessWrapper(this)); - } - } - - unspawn() { - for (let process of this.processes.splice(0)) { - process.active = false; - process.release(); - } - } - - respawn() { - this.unspawn(); - this.spawn(); - } - - /** - * @return {ProcessWrapper} - */ - acquire() { - let process = this.processes[0]; - for (let i = 1; i < this.processes.length; i++) { - if (this.processes[i].load < process.load) { - process = this.processes[i]; - } - } - return process; - } - - /** - * @param {ProcessWrapper} process - */ - release(process) { - process.release(); - } - - /** - * @param {...any} args - * @return {Promise} - */ - send(...args) { - if (!this.processes.length) { - return Promise.resolve(this.receive(...args)); - } - - return new Promise((resolve, reject) => { - let process = this.acquire(); - process.pendingTasks.set(this.taskId, resolve); - try { - let serializedArgs = args.map(serialize).join('|'); - process.send(`${this.taskId++}|${serializedArgs}`); - } catch (e) {} - }); - } - - /** - * @param {...any} args - * @return {any} - */ - sendSync(...args) { - // synchronously! - return this.receive(...args); - } - - /** - * @param {string} message - */ - onMessageUpstream(message) { - // Expected to resolve the pending task completed. - } - - /** - * @param {string} message - */ - onMessageDownstream(message) { - // Expected to call `receive()` at some point, - // and send the result to the parent process. - } - - /** - * @param {...any} args - * @return {any} - */ - receive(...args) { - // This is where the child process actually does stuff - // To be overriden by specific implementations. - } - - /** - * @return {Map} - */ - static get cache() { - return processManagers; - } - - /** - * @return {{new(PM: ProcessManager): ProcessWrapper}} - */ - static get ProcessWrapper() { - return ProcessWrapper; - } -} - -module.exports = ProcessManager; diff --git a/repl.js b/repl.js deleted file mode 100644 index 63ed8be529f69..0000000000000 --- a/repl.js +++ /dev/null @@ -1,111 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const net = require('net'); -const repl = require('repl'); - -/** - * Contains the pathnames of all active REPL sockets. - * @type {Set} - */ -const socketPathnames = new Set(); - -// Clean up REPL sockets and child processes on forced exit. -process.once('exit', code => { - socketPathnames.forEach(s => { - try { - fs.unlinkSync(s); - } catch (e) {} - }); - if (code === 129 || code === 130) { - process.exitCode = 0; - } -}); -if (!process.listeners('SIGHUP').length) { - process.once('SIGHUP', () => process.exit(128 + 1)); -} -if (!process.listeners('SIGINT').length) { - process.once('SIGINT', () => process.exit(128 + 2)); -} - -/** - * 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 - * non-global context. - * - * @param {string} filename - * @param {Function} evalFunction - */ -exports.start = function start(filename, evalFunction) { - if ('repl' in Config && !Config.repl) return; - - // TODO: Windows does support the REPL when using named pipes. For now, - // this only supports UNIX sockets. - if (process.platform === 'win32') return; - - if (filename === 'app') { - // Clean up old REPL sockets. - let directory = path.dirname(path.resolve(__dirname, Config.replsocketprefix || 'logs/repl', 'app')); - for (let file of fs.readdirSync(directory)) { - let pathname = path.resolve(directory, file); - let stat = fs.statSync(pathname); - if (!stat.isSocket()) continue; - - let socket = net.connect(pathname, () => { - socket.end(); - socket.destroy(); - }).on('error', () => { - fs.unlink(pathname, () => {}); - }); - } - } - - let server = net.createServer(socket => { - // @ts-ignore - repl.start({ - input: socket, - output: socket, - /** - * @param {string} cmd - * @param {any} context - * @param {string} filename - * @param {Function} callback - * @return {any} - */ - eval(cmd, context, filename, callback) { - try { - return callback(null, evalFunction(cmd)); - } catch (e) { - return callback(e); - } - }, - }).on('exit', () => socket.end()); - socket.on('error', () => socket.destroy()); - }); - - let pathname = path.resolve(__dirname, Config.replsocketprefix || 'logs/repl', filename); - server.listen(pathname, () => { - fs.chmodSync(pathname, Config.replsocketmode || 0o600); - socketPathnames.add(pathname); - }); - - server.once('error', /** @param {NodeJS.ErrnoException} err */ err => { - if (err.code === "EADDRINUSE") { - fs.unlink(pathname, _err => { - if (_err && _err.code !== "ENOENT") { - require('./crashlogger')(_err, `REPL: ${filename}`); - } - server.close(); - }); - } else { - require('./crashlogger')(err, `REPL: ${filename}`); - server.close(); - } - }); - - server.once('close', () => { - socketPathnames.delete(pathname); - start(filename, evalFunction); - }); -}; diff --git a/room-battle.js b/room-battle.js deleted file mode 100644 index 22046ec801033..0000000000000 --- a/room-battle.js +++ /dev/null @@ -1,817 +0,0 @@ -/** - * Room Battle - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * This file wraps the simulator in an implementation of the RoomGame - * interface. It also abstracts away the multi-process nature of the - * simulator. - * - * For the actual battle simulation, see sim/ - * - * @license MIT license - */ - -'use strict'; - -/** 10 seconds */ -const TICK_TIME = 10 * 1000; - -// Timer constants: In seconds, should be multiple of ten -const STARTING_TIME = 210; -const MAX_TURN_TIME = 150; -const STARTING_TIME_CHALLENGE = 280; -const MAX_TURN_TIME_CHALLENGE = 300; - -const NOT_DISCONNECTED = 10; -const DISCONNECTION_TICKS = 7; - -// time after a player disabling the timer before they can re-enable it -const TIMER_COOLDOWN = 20 * 1000; - -global.Config = require('./config/config'); - -const ProcessManager = require('./process-manager'); - -class SimulatorManager extends ProcessManager { - onMessageUpstream(message) { - let lines = message.split('\n'); - let battle = this.pendingTasks.get(lines[0]); - if (battle) battle.receive(lines); - } - - eval(code) { - for (let process of this.processes) { - process.send(`|eval|${code}`); - } - } -} - -const SimulatorProcess = new SimulatorManager({ - execFile: __filename, - maxProcesses: global.Config ? Config.simulatorprocesses : 1, - isChatBased: false, -}); - -class BattlePlayer { - constructor(user, game, slot) { - this.userid = user.userid; - this.name = user.name; - this.game = game; - user.games.add(this.game.id); - user.updateSearch(); - - this.slot = slot; - this.slotNum = Number(slot.charAt(1)) - 1; - this.active = true; - - for (let i = 0; i < user.connections.length; i++) { - let connection = user.connections[i]; - Sockets.subchannelMove(connection.worker, this.game.id, this.slotNum + 1, connection.socketid); - } - } - destroy() { - if (this.active) this.simSend('leave'); - let user = Users(this.userid); - if (user) { - for (let j = 0; j < user.connections.length; j++) { - let connection = user.connections[j]; - Sockets.subchannelMove(connection.worker, this.game.id, '0', connection.socketid); - } - user.games.delete(this.game.id); - user.updateSearch(); - } - this.game[this.slot] = null; - } - updateSubchannel(user) { - if (!user.connections) { - // "user" is actually a connection - Sockets.subchannelMove(user.worker, this.game.id, this.slotNum + 1, user.socketid); - return; - } - for (let i = 0; i < user.connections.length; i++) { - let connection = user.connections[i]; - Sockets.subchannelMove(connection.worker, this.game.id, this.slotNum + 1, connection.socketid); - } - } - - toString() { - return this.userid; - } - send(data) { - let user = Users(this.userid); - if (user) user.send(data); - } - sendRoom(data) { - let user = Users(this.userid); - if (user) user.sendTo(this.game.id, data); - } - simSend(action, ...rest) { - this.game.send(action, this.slot, ...rest); - } -} - -class BattleTimer { - constructor(battle) { - /** @type {Battle} */ - this.battle = battle; - - /** @type {?NodeJS.Timer} */ - this.timer = undefined; - /** @type {Set} */ - this.timerRequesters = new Set(); - /** - * Overall timer. - * Starts at 21 per player (210 seconds) in a ladder battle. Goes - * down by 1 every tick (10 seconds). Goes up by 1 every request (2 - * if below 15). The player loses if this reaches 0. - * @type {[number]} - */ - this.ticksLeft = []; - /** - * Turn timer. - * Set equal to the player's overall timer, but capped at 15 in a - * ladder battle. Goes down by 1 every tick. Tracked separately from - * the overall timer, and the player also loses if this reaches 0. - * @type {[number]} - */ - this.turnTicksLeft = []; - /** - * Disconnect timer. - * Normally 7 while the player is connected. If the player - * disconnects, this will go down by 1 every tick. If the player - * reconnects, this will reset to 7. Tracked separately from the - * overall timer, and the player also loses if this reaches 0. - * @type {[number]} - */ - this.dcTicksLeft = []; - - /** - * Last tick. - * Represents the last time a tick happened. - */ - this.lastTick = 0; - - this.lastDisabledTime = 0; - this.lastDisabledByUser = null; - - const hasLongTurns = Dex.getFormat(battle.format).gameType !== 'singles'; - const isChallenge = (!battle.rated && !battle.room.tour); - this.settings = Object.assign({}, Dex.getFormat(battle.format).timer); - if (this.settings.perTurn === undefined) { - this.settings.perTurn = hasLongTurns ? 20 : 10; - } - if (this.settings.starting === undefined) { - this.settings.starting = isChallenge ? STARTING_TIME_CHALLENGE : STARTING_TIME; - } - if (this.settings.maxPerTurn === undefined) { - this.settings.maxPerTurn = isChallenge ? MAX_TURN_TIME_CHALLENGE : MAX_TURN_TIME; - } - if (this.settings.maxPerTurn <= 0) this.settings.maxPerTurn = Infinity; - this.settings.perTurnTicks = Math.floor(this.settings.perTurn / 10); - this.settings.startingTicks = Math.ceil(this.settings.starting / 10); - this.settings.maxPerTurnTicks = Math.ceil(this.settings.maxPerTurn / 10); - this.settings.maxFirstTurnTicks = Math.ceil((this.settings.maxFirstTurn || 0) / 10); - - for (let slotNum = 0; slotNum < 2; slotNum++) { - this.ticksLeft.push(this.settings.startingTicks); - this.turnTicksLeft.push(-1); - this.dcTicksLeft.push(10); - } - } - start(requester) { - let userid = requester ? requester.userid : 'staff'; - if (this.timerRequesters.has(userid)) return false; - if (this.timer && requester) { - this.battle.room.add(`|inactive|${requester.name} also wants the timer to be on.`).update(); - this.timerRequesters.add(userid); - return false; - } - if (requester && this.battle.players[requester.userid] && this.lastDisabledByUser === requester.userid) { - const remainingCooldownTime = (this.lastDisabledTime || 0) + TIMER_COOLDOWN - Date.now(); - if (remainingCooldownTime > 0) { - this.battle.players[requester.userid].sendRoom(`|inactiveoff|The timer can't be re-enabled so soon after disabling it (${Math.ceil(remainingCooldownTime / 1000)} seconds remaining).`); - return false; - } - } - this.timerRequesters.add(userid); - this.nextRequest(true); - const requestedBy = requester ? ` (requested by ${requester.name})` : ``; - this.battle.room.add(`|inactive|Battle timer is ON: inactive players will automatically lose when time's up.${requestedBy}`).update(); - return true; - } - stop(requester) { - if (requester) { - if (!this.timerRequesters.has(requester.userid)) return false; - this.timerRequesters.delete(requester.userid); - this.lastDisabledByUser = requester.userid; - this.lastDisabledTime = Date.now(); - } else { - this.timerRequesters.clear(); - } - if (this.timerRequesters.size) { - this.battle.room.add(`|inactive|${requester.name} no longer wants the timer on, but the timer is staying on because ${[...this.timerRequesters].join(', ')} still does.`).update(); - return false; - } - if (!this.timer) return false; - clearTimeout(this.timer); - this.timer = undefined; - this.battle.room.add(`|inactiveoff|Battle timer is now OFF.`).update(); - return true; - } - waitingForChoice(slot) { - return !this.battle.requests[slot][2]; - } - nextRequest(isFirst) { - if (this.timer) clearTimeout(this.timer); - if (!this.timerRequesters.size) return; - const maxTurnTicks = (isFirst ? this.settings.maxFirstTurnTicks : 0) || this.settings.maxPerTurnTicks; - for (const slotNum of this.ticksLeft.keys()) { - const slot = 'p' + (slotNum + 1); - const player = this.battle[slot]; - - this.ticksLeft[slotNum] += this.settings.perTurnTicks; - this.turnTicksLeft[slotNum] = Math.min(this.ticksLeft[slotNum], maxTurnTicks); - - const ticksLeft = this.turnTicksLeft[slotNum]; - if (player) player.sendRoom(`|inactive|Time left: ${ticksLeft * 10} sec this turn | ${this.ticksLeft[slotNum] * 10} sec total`); - } - this.timer = setTimeout(() => this.nextTick(), TICK_TIME); - } - nextTick() { - if (this.timer) clearTimeout(this.timer); - if (this.battle.ended) return; - for (const slotNum of this.ticksLeft.keys()) { - const slot = 'p' + (slotNum + 1); - - if (!this.waitingForChoice(slot)) continue; - this.ticksLeft[slotNum]--; - this.turnTicksLeft[slotNum]--; - - if (this.dcTicksLeft[slotNum] !== NOT_DISCONNECTED) { - this.dcTicksLeft[slotNum]--; - } - - let dcTicksLeft = this.dcTicksLeft[slotNum]; - if (dcTicksLeft <= 0) this.turnTicksLeft[slotNum] = 0; - const ticksLeft = this.turnTicksLeft[slotNum]; - if (!ticksLeft) continue; - if (ticksLeft < dcTicksLeft) dcTicksLeft = NOT_DISCONNECTED; // turn timer supersedes dc timer - - if (dcTicksLeft <= 4) { - this.battle.room.add(`|inactive|${this.battle.playerNames[slotNum]} has ${dcTicksLeft * 10} seconds to reconnect!`).update(); - } - if (dcTicksLeft !== NOT_DISCONNECTED) continue; - if (ticksLeft % 3 === 0 || ticksLeft <= 4) { - this.battle.room.add(`|inactive|${this.battle.playerNames[slotNum]} has ${ticksLeft * 10} seconds left.`).update(); - } - } - if (!this.checkTimeout()) { - this.timer = setTimeout(() => this.nextTick(), TICK_TIME); - } - } - checkActivity() { - for (const slotNum of this.ticksLeft.keys()) { - const slot = 'p' + (slotNum + 1); - const player = this.battle[slot]; - const isConnected = player && player.active; - - if (isConnected === (this.dcTicksLeft[slotNum] !== NOT_DISCONNECTED)) continue; - - if (!isConnected) { - // player has disconnected: don't wait longer than 6 ticks (1 minute) - this.dcTicksLeft[slotNum] = DISCONNECTION_TICKS; - if (this.timerRequesters.size) { - this.battle.room.add(`|inactive|${this.battle.playerNames[slotNum]} disconnected and has a minute to reconnect!`).update(); - } - } else { - // player has reconnected - this.dcTicksLeft[slotNum] = NOT_DISCONNECTED; - if (this.timerRequesters.size) { - let timeLeft = ``; - if (this.waitingForChoice(slot)) { - const ticksLeft = this.turnTicksLeft[slotNum]; - timeLeft = ` and has ${ticksLeft * 10} seconds left`; - } - this.battle.room.add(`|inactive|${this.battle.playerNames[slotNum]} reconnected${timeLeft}.`).update(); - } - } - } - } - checkTimeout() { - if (this.turnTicksLeft.every(c => !c)) { - if (!this.settings.timeoutAutoChoose || this.ticksLeft.every(c => !c)) { - this.battle.room.add(`|-message|All players are inactive.`).update(); - this.battle.tie(); - return true; - } - } - let didSomething = false; - for (const [slotNum, ticks] of this.turnTicksLeft.entries()) { - if (ticks) continue; - if (this.settings.timeoutAutoChoose && this.ticksLeft[slotNum]) { - const slot = 'p' + (slotNum + 1); - this.battle.send('choose', slot, 'default'); - didSomething = true; - } else { - this.battle.forfeit(null, ' lost due to inactivity.', slotNum); - return true; - } - } - return didSomething; - } -} - -class Battle { - constructor(room, format, rated) { - format = Dex.getFormat(format); - this.id = room.id; - this.room = room; - this.title = format.name; - if (!this.title.endsWith(" Battle")) this.title += " Battle"; - this.allowRenames = !rated; - - this.format = format.id; - this.rated = rated; - this.started = false; - this.ended = false; - this.active = false; - - this.players = Object.create(null); - this.playerCount = 0; - this.playerCap = 2; - this.p1 = null; - this.p2 = null; - - this.playerNames = ["Player 1", "Player 2"]; - /** {playerid: [rqid, request, isWait, choice]} */ - this.requests = { - p1: [0, '', 'cantUndo', ''], - p2: [0, '', 'cantUndo', ''], - }; - this.timer = new BattleTimer(this); - - // data to be logged - this.logData = null; - this.endType = 'normal'; - this.customBanlist = !!format.customBanlist; - - this.rqid = 1; - - this.process = SimulatorProcess.acquire(); - if (this.process.pendingTasks.has(room.id)) { - throw new Error(`Battle with ID ${room.id} already exists.`); - } - - this.send('init', this.format, rated ? '1' : '', format.customBanlist ? format.customBanlist.join(',') : ''); - this.process.pendingTasks.set(room.id, this); - } - - send(...args) { - this.activeIp = Monitor.activeIp; - this.process.send(`${this.id}|${args.join('|')}`); - } - sendFor(user, action, ...rest) { - let player = this.players[user]; - if (!player) return; - - this.send(action, player.slot, ...rest); - } - checkActive() { - let active = true; - if (this.ended || !this.started) { - active = false; - } else if (!this.p1 || !this.p1.active) { - active = false; - } else if (!this.p2 || !this.p2.active) { - active = false; - } - Rooms.global.battleCount += (active ? 1 : 0) - (this.active ? 1 : 0); - this.room.active = active; - this.active = active; - if (Rooms.global.battleCount === 0) Rooms.global.automaticKillRequest(); - } - choose(user, data) { - const player = this.players[user]; - const [choice, rqid] = data.split('|', 2); - if (!player) return; - let request = this.requests[player.slot]; - if (request[2] !== false && request[2] !== true) { - player.sendRoom(`|error|[Invalid choice] There's nothing to choose`); - return; - } - if ((this.requests.p1[2] && this.requests.p2[2]) || // too late - (rqid && rqid !== '' + request[0])) { // WAY too late - player.sendRoom(`|error|[Invalid choice] Sorry, too late to make a different move; the next turn has already started`); - return; - } - request[2] = true; - request[3] = choice; - - this.sendFor(user, 'choose', choice); - } - undo(user, data) { - const player = this.players[user]; - const [, rqid] = data.split('|', 2); - if (!player) return; - let request = this.requests[player.slot]; - if (request[2] !== true) { - player.sendRoom(`|error|[Invalid choice] There's nothing to cancel`); - return; - } - if ((this.requests.p1[2] && this.requests.p2[2]) || // too late - (rqid && rqid !== '' + request[0])) { // WAY too late - player.sendRoom(`|error|[Invalid choice] Sorry, too late to cancel; the next turn has already started`); - return; - } - request[2] = false; - - this.sendFor(user, 'undo'); - } - joinGame(user, team) { - if (this.playerCount >= 2) { - user.popup(`This battle already has two players.`); - return false; - } - if (!user.can('joinbattle', null, this.room)) { - user.popup(`You must be a set as a player to join a battle you didn't start. Ask a player to use /addplayer on you to join this battle.`); - return false; - } - - if (!this.addPlayer(user, team)) { - user.popup(`Failed to join battle.`); - return false; - } - this.room.update(); - return true; - } - leaveGame(user) { - if (!user) return false; // ... - if (this.room.rated || this.room.tour) { - user.popup(`Players can't be swapped out in a ${this.room.tour ? "tournament" : "rated"} battle.`); - return false; - } - if (!this.removePlayer(user)) { - user.popup(`Failed to leave battle.`); - return false; - } - this.room.auth[user.userid] = '+'; - this.room.update(); - return true; - } - - receive(lines) { - Monitor.activeIp = this.activeIp; - switch (lines[1]) { - case 'update': - this.checkActive(); - this.room.push(lines.slice(2)); - this.room.update(); - this.timer.nextRequest(); - break; - - case 'winupdate': - this.room.push(lines.slice(3)); - this.started = true; - if (!this.ended) { - this.ended = true; - this.room.win(lines[2]); - this.removeAllPlayers(); - } - this.checkActive(); - break; - - case 'sideupdate': { - let player = this[lines[2]]; - if (player) { - player.sendRoom(lines[3]); - if (lines[3].startsWith(`|error|[Invalid choice] Can't do anything`)) { - // ... should not happen - } else if (lines[3].startsWith(`|error|[Invalid choice]`)) { - let request = this.requests[player.slot]; - request[2] = false; - request[3] = ''; - } - } - break; - } - - case 'request': { - let player = this[lines[2]]; - - this.rqid++; - if (player) { - let request = JSON.parse(lines[3]); - request.rqid = this.rqid; - const requestJSON = JSON.stringify(request); - this.requests[player.slot] = [this.rqid, requestJSON, request.wait ? 'cantUndo' : false, '']; - player.sendRoom(`|request|${requestJSON}`); - } - break; - } - - case 'log': - this.logData = JSON.parse(lines[2]); - break; - - case 'score': - this.score = [parseInt(lines[2]), parseInt(lines[3])]; - break; - } - Monitor.activeIp = null; - } - - onConnect(user, connection) { - // this handles joining a battle in which a user is a participant, - // where the user has already identified before attempting to join - // the battle - const player = this.players[user]; - if (!player) return; - player.updateSubchannel(connection || user); - const request = this.requests[player.slot]; - if (request) { - let data = `|request|${request[1]}`; - if (request[3]) data += `\n|sentchoice|${request[3]}`; - (connection || user).sendTo(this.id, data); - } - } - onUpdateConnection(user, connection) { - this.onConnect(user, connection); - } - onRename(user, oldUserid, isJoining, isForceRenamed) { - if (user.userid === oldUserid) return; - if (!this.players) { - // !! should never happen but somehow still does - user.games.delete(this.id); - return; - } - if (!(oldUserid in this.players)) { - if (user.userid in this.players) { - // this handles a user renaming themselves into a user in the - // battle (e.g. by using /nick) - this.onConnect(user); - } - return; - } - if (!this.allowRenames) { - let player = this.players[oldUserid]; - if (player) { - const message = isForceRenamed ? " lost by having an inappropriate name." : " forfeited by changing their name."; - this.forfeit(null, message, player.slotNum); - } - if (!(user.userid in this.players)) { - user.games.delete(this.id); - } - return; - } - if (user.userid in this.players) return; - let player = this.players[oldUserid]; - this.players[user.userid] = player; - player.userid = user.userid; - player.name = user.name; - delete this.players[oldUserid]; - player.simSend('join', user.name, user.avatar); - } - onJoin(user) { - let player = this.players[user]; - if (player && !player.active) { - player.active = true; - this.timer.checkActivity(); - this.room.add(`|player|${player.slot}|${user.name}|${user.avatar}`); - } - } - onLeave(user) { - let player = this.players[user]; - if (player && player.active) { - player.sendRoom(`|request|null`); - player.active = false; - this.timer.checkActivity(); - this.room.add(`|player|${player.slot}|`); - } - } - - win(user) { - if (!user) { - this.tie(); - return true; - } - let player = this.players[user]; - if (!player) return false; - player.simSend('win'); - } - tie() { - this.send('tie'); - } - forfeit(user, message, side) { - if (this.ended || !this.started) return false; - - if (!message) message = ' forfeited.'; - - if (side === undefined) { - if (!this.players) { - // should never happen - console.log("user is: " + user.name); - console.log(" alts: " + Object.keys(user.prevNames)); - console.log(" battle: " + this.id); - return false; - } - if (user in this.players) side = this.players[user].slotNum; - } - if (side === undefined) return false; - - let name = this.playerNames[side]; - - this.room.add(`|-message|${name}${message}`); - this.endType = 'forfeit'; - const otherids = ['p2', 'p1']; - this.send('win', otherids[side]); - return true; - } - - addPlayer(user, team) { - if (user.userid in this.players) return false; - if (this.playerCount >= this.playerCap) return false; - let player = this.makePlayer(user, team); - if (!player) return false; - this.players[user.userid] = player; - this.playerNames[this.playerCount] = player.name; - this.playerCount++; - this.room.auth[user.userid] = '\u2606'; - if (this.playerCount >= 2) { - this.room.title = `${this.p1.name} vs. ${this.p2.name}`; - this.room.send(`|title|${this.room.title}`); - } - return true; - } - - makePlayer(user, team) { - let slotNum = 0; - while (this['p' + (slotNum + 1)]) slotNum++; - let slot = 'p' + (slotNum + 1); - // console.log('joining: ' + user.name + ' ' + slot); - - let player = new BattlePlayer(user, this, slot); - this[slot] = player; - - let message = '' + user.avatar; - if (!this.started) { - message += "\n" + team; - } - player.simSend('join', user.name, message); - if (this.p1 && this.p2) this.started = true; - return player; - } - - removePlayer(user) { - if (!this.allowRenames) return false; - let player = this.players[user.userid]; - if (!player) return false; - if (player.active) { - this.room.add(`|player|${player.slot}|`); - } - player.destroy(); - delete this.players[user.userid]; - this.playerCount--; - return true; - } - - removeAllPlayers() { - for (let i in this.players) { - this.players[i].destroy(); - delete this.players[i]; - this.playerCount--; - } - } - - destroy() { - this.send('dealloc'); - if (this.active) { - Rooms.global.battleCount += -1; - this.active = false; - } - - for (let i in this.players) { - this.players[i].destroy(); - } - this.players = null; - this.room = null; - this.process.pendingTasks.delete(this.id); - this.process.release(); - this.process = null; - } -} - -exports.RoomBattlePlayer = BattlePlayer; -exports.RoomBattleTimer = BattleTimer; -exports.RoomBattle = Battle; -exports.SimulatorManager = SimulatorManager; -exports.SimulatorProcess = SimulatorProcess; - -if (process.send && module === process.mainModule) { - // This is a child process! - - global.Chat = require('./chat'); - const Sim = require('./sim'); - global.Dex = require('./sim/dex'); - global.toId = Dex.getId; - - if (Config.crashguard) { - // graceful crash - allow current battles to finish before restarting - process.on('uncaughtException', err => { - require('./crashlogger')(err, 'A simulator process'); - }); - } - - require('./repl').start(`sim-${process.pid}`, cmd => eval(cmd)); - - let Battles = new Map(); - - // Receive and process a message sent using Simulator.prototype.send in - // another process. - process.on('message', message => { - //console.log('CHILD MESSAGE RECV: "' + message + '"'); - let nlIndex = message.indexOf("\n"); - let more = ''; - if (nlIndex > 0) { - more = message.substr(nlIndex + 1); - message = message.substr(0, nlIndex); - } - let data = message.split('|'); - if (data[1] === 'init') { - const id = data[0]; - if (!Battles.has(id)) { - try { - const battle = Sim.construct(Dex.getFormat(data[2], data[4]), data[3], sendBattleMessage); - battle.id = id; - Battles.set(id, battle); - } catch (err) { - if (require('./crashlogger')(err, 'A battle', { - message: message, - }) === 'lockdown') { - let ministack = Chat.escapeHTML(err.stack).split("\n").slice(0, 2).join("
    "); - process.send(id + '\nupdate\n|html|
    A BATTLE PROCESS HAS CRASHED: ' + ministack + '
    '); - } else { - process.send(id + '\nupdate\n|html|
    The battle crashed!
    Don\'t worry, we\'re working on fixing it.
    '); - } - } - } - } else if (data[1] === 'dealloc') { - const id = data[0]; - if (Battles.has(id)) { - Battles.get(id).destroy(); - - // remove from battle list - Battles.delete(id); - } else { - require('./crashlogger')(new Error("Invalid dealloc"), 'A battle', { - message: message, - }); - } - } else { - let battle = Battles.get(data[0]); - if (battle) { - let prevRequest = battle.currentRequest; - let prevRequestDetails = battle.currentRequestDetails || ''; - try { - battle.receive(data, more); - } catch (err) { - require('./crashlogger')(err, 'A battle', { - message: message, - currentRequest: prevRequest, - log: '\n' + battle.log.join('\n').replace(/\n\|split\n[^\n]*\n[^\n]*\n[^\n]*\n/g, '\n'), - }); - - let logPos = battle.log.length; - battle.add('html', '
    The battle crashed
    You can keep playing but it might crash again.
    '); - let nestedError; - try { - battle.makeRequest(prevRequest, prevRequestDetails); - } catch (e) { - nestedError = e; - } - battle.sendUpdates(logPos); - if (nestedError) { - throw nestedError; - } - } - } else if (data[1] === 'eval') { - try { - eval(data[2]); - } catch (e) {} - } - } - }); - - process.on('disconnect', () => { - process.exit(); - }); -} else { - // Create the initial set of simulator processes. - SimulatorProcess.spawn(); -} - -// Messages sent by this function are received and handled in -// Battle.prototype.receive in simulator.js (in another process). -function sendBattleMessage(type, data) { - if (Array.isArray(data)) data = data.join("\n"); - process.send(this.id + "\n" + type + "\n" + data); -} diff --git a/rooms.js b/rooms.js deleted file mode 100644 index fa1e3afdd3d7c..0000000000000 --- a/rooms.js +++ /dev/null @@ -1,1487 +0,0 @@ -/** - * Rooms - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * Every chat room and battle is a room, and what they do is done in - * rooms.js. There's also a global room which every user is in, and - * handles miscellaneous things like welcoming the user. - * - * @license MIT license - */ - -'use strict'; - -const TIMEOUT_EMPTY_DEALLOCATE = 10 * 60 * 1000; -const TIMEOUT_INACTIVE_DEALLOCATE = 40 * 60 * 1000; -const REPORT_USER_STATS_INTERVAL = 10 * 60 * 1000; - -const CRASH_REPORT_THROTTLE = 60 * 60 * 1000; - -const FS = require('./fs'); - -let Rooms = module.exports = getRoom; - -Rooms.rooms = new Map(); -Rooms.aliases = new Map(); - -/********************************************************* - * the Room object. - *********************************************************/ - -class Room { - constructor(roomid, title) { - this.id = roomid; - this.title = (title || roomid); - this.reportJoins = Config.reportjoins; - - this.users = Object.create(null); - - this.log = []; - - this.muteQueue = []; - this.muteTimer = null; - - this.type = 'chat'; - this.lastUpdate = 0; - this.userCount = 0; - } - - send(message, errorArgument) { - if (errorArgument) throw new Error("Use Room#sendUser"); - if (this.id !== 'lobby') message = '>' + this.id + '\n' + message; - if (this.userCount) Sockets.channelBroadcast(this.id, message); - } - sendAuth(message) { - for (let i in this.users) { - let user = this.users[i]; - if (user.connected && user.can('receiveauthmessages', null, this)) { - user.sendTo(this, message); - } - } - } - sendUser(user, message) { - user.sendTo(this, message); - } - add(message) { - if (typeof message !== 'string') throw new Error("Deprecated message type"); - if (message.startsWith('|uhtmlchange|')) return this.uhtmlchange(message); - this.logEntry(message); - if (this.logTimes && message.substr(0, 3) === '|c|') { - message = '|c:|' + (~~(Date.now() / 1000)) + '|' + message.substr(3); - } - this.log.push(message); - return this; - } - uhtmlchange(message) { - let thirdPipe = message.indexOf('|', 13); - let originalStart = '|uhtml|' + message.slice(13, thirdPipe + 1); - for (let i = 0; i < this.log.length; i++) { - if (this.log[i].startsWith(originalStart)) { - this.log[i] = originalStart + message.slice(thirdPipe + 1); - break; - } - } - this.send(message); - return this; - } - logEntry() {} - addRaw(message) { - return this.add('|raw|' + message); - } - addLogMessage(user, text) { - return this.add('|c|' + user.getIdentity(this) + '|/log ' + text).update(); - } - getLogSlice(amount) { - let log = this.log.slice(amount); - log.unshift('|:|' + (~~(Date.now() / 1000))); - return log; - } - - toString() { - return this.id; - } - - //mute handling - runMuteTimer(forceReschedule) { - if (forceReschedule && this.muteTimer) { - clearTimeout(this.muteTimer); - this.muteTimer = null; - } - if (this.muteTimer || this.muteQueue.length === 0) return; - - let timeUntilExpire = this.muteQueue[0].time - Date.now(); - if (timeUntilExpire <= 1000) { // one second of leeway - this.unmute(this.muteQueue[0].userid, "Your mute in '" + this.title + "' has expired."); - //runMuteTimer() is called again in unmute() so this function instance should be closed - return; - } - this.muteTimer = setTimeout(() => { - this.muteTimer = null; - this.runMuteTimer(true); - }, timeUntilExpire); - } - isMuted(user) { - if (!user) return; - if (this.muteQueue) { - for (let i = 0; i < this.muteQueue.length; i++) { - let entry = this.muteQueue[i]; - if (user.userid === entry.userid || - user.guestNum === entry.guestNum || - (user.autoconfirmed && user.autoconfirmed === entry.autoconfirmed)) { - return entry.userid; - } - } - } - } - getMuteTime(user) { - let userid = this.isMuted(user); - if (!userid) return; - for (let i = 0; i < this.muteQueue.length; i++) { - if (userid === this.muteQueue[i].userid) { - return this.muteQueue[i].time - Date.now(); - } - } - } - getAuth(user) { - if (this.auth) { - if (user.userid in this.auth) { - return this.auth[user.userid]; - } - if (this.tour && this.tour.room) { - return this.tour.room.getAuth(user); - } - if (this.isPrivate === true) { - return ' '; - } - } - return user.group; - } - checkModjoin(user) { - if (this.staffRoom && !user.isStaff && (!this.auth || (this.auth[user.userid] || ' ') === ' ')) return false; - if (user.userid in this.users) return true; - if (!this.modjoin) return true; - const userGroup = user.can('makeroom') ? user.group : this.getAuth(user); - - let modjoinGroup = this.modjoin !== true ? this.modjoin : this.modchat; - if (!modjoinGroup) return true; - - if (modjoinGroup === 'trusted') { - if (user.trusted) return true; - modjoinGroup = Config.groupsranking[1]; - } - if (modjoinGroup === 'autoconfirmed') { - if (user.autoconfirmed) return true; - modjoinGroup = Config.groupsranking[1]; - } - if (!(userGroup in Config.groups)) return false; - if (!(modjoinGroup in Config.groups)) throw new Error(`Invalid modjoin setting in ${this.id}: ${modjoinGroup}`); - return Config.groups[userGroup].rank >= Config.groups[modjoinGroup].rank; - } - mute(user, setTime) { - let userid = user.userid; - - if (!setTime) setTime = 7 * 60000; // default time: 7 minutes - if (setTime > 90 * 60000) setTime = 90 * 60000; // limit 90 minutes - - // If the user is already muted, the existing queue position for them should be removed - if (this.isMuted(user)) this.unmute(userid); - - // Place the user in a queue for the unmute timer - for (let i = 0; i <= this.muteQueue.length; i++) { - let time = Date.now() + setTime; - if (i === this.muteQueue.length || time < this.muteQueue[i].time) { - let entry = { - userid: userid, - time: time, - guestNum: user.guestNum, - autoconfirmed: user.autoconfirmed, - }; - this.muteQueue.splice(i, 0, entry); - // The timer needs to be switched to the new entry if it is to be unmuted - // before the entry the timer is currently running for - if (i === 0 && this.muteTimer) { - clearTimeout(this.muteTimer); - this.muteTimer = null; - } - break; - } - } - this.runMuteTimer(); - - user.updateIdentity(this.id); - - if (!(this.isPrivate === true || this.isPersonal || this.battle)) Punishments.monitorRoomPunishments(user); - - return userid; - } - unmute(userid, notifyText) { - let successUserid = false; - let user = Users.get(userid); - if (!user) { - // If the user is not found, construct a dummy user object for them. - user = { - userid: userid, - autoconfirmed: userid, - }; - } - - for (let i = 0; i < this.muteQueue.length; i++) { - let entry = this.muteQueue[i]; - if (entry.userid === user.userid || - entry.guestNum === user.guestNum || - (user.autoconfirmed && entry.autoconfirmed === user.autoconfirmed)) { - if (i === 0) { - this.muteQueue.splice(0, 1); - this.runMuteTimer(true); - } else { - this.muteQueue.splice(i, 1); - } - successUserid = entry.userid; - break; - } - } - - if (successUserid && user.userid in this.users) { - user.updateIdentity(this.id); - if (notifyText) user.popup(notifyText); - } - return successUserid; - } - modlog(text) { - if (!this.modlogStream) return; - this.modlogStream.write('[' + (new Date().toJSON()) + '] (' + this.id + ') ' + text + '\n'); - } - sendModCommand(data) { - for (let i in this.users) { - let user = this.users[i]; - // hardcoded for performance reasons (this is an inner loop) - if (user.isStaff || (this.auth && (this.auth[user.userid] || '+') !== '+')) { - user.sendTo(this, data); - } - } - } -} - -class GlobalRoom { - constructor(roomid) { - this.id = roomid; - - this.type = 'global'; - - // init battle rooms - this.battleCount = 0; - - this.chatRoomData = []; - try { - this.chatRoomData = require('./config/chatrooms.json'); - if (!Array.isArray(this.chatRoomData)) this.chatRoomData = []; - } catch (e) {} // file doesn't exist [yet] - - if (!this.chatRoomData.length) { - this.chatRoomData = [{ - title: 'Lobby', - isOfficial: true, - autojoin: true, - }, { - title: 'Staff', - isPrivate: true, - staffRoom: true, - staffAutojoin: true, - }]; - } - - this.chatRooms = []; - - this.autojoin = []; // rooms that users autojoin upon connecting - this.staffAutojoin = []; // rooms that staff autojoin upon connecting - for (let i = 0; i < this.chatRoomData.length; i++) { - if (!this.chatRoomData[i] || !this.chatRoomData[i].title) { - console.log('ERROR: Room number ' + i + ' has no data.'); - continue; - } - let id = toId(this.chatRoomData[i].title); - if (!Config.quietconsole) console.log("NEW CHATROOM: " + id); - let room = Rooms.createChatRoom(id, this.chatRoomData[i].title, this.chatRoomData[i]); - if (room.aliases) { - for (let a = 0; a < room.aliases.length; a++) { - Rooms.aliases.set(room.aliases[a], id); - } - } - this.chatRooms.push(room); - if (room.autojoin) this.autojoin.push(id); - if (room.staffAutojoin) this.staffAutojoin.push(id); - } - Rooms.lobby = Rooms.rooms.get('lobby'); - - // init battle room logging - if (Config.logladderip) { - this.ladderIpLog = FS('logs/ladderip/ladderip.txt').createAppendStream(); - } else { - // Prevent there from being two possible hidden classes an instance - // of GlobalRoom can have. - this.ladderIpLog = new (require('stream')).Writable(); - } - - let lastBattle; - try { - lastBattle = FS('logs/lastbattle.txt').readSync('utf8'); - } catch (e) {} - this.lastBattle = (!lastBattle || isNaN(lastBattle)) ? 0 : +lastBattle; - - this.writeChatRoomData = (() => { - let writing = false; - let writePending = false; - return async () => { - if (writing) { - writePending = true; - return; - } - writing = true; - - let data = JSON.stringify(this.chatRoomData) - .replace(/\{"title":/g, '\n{"title":') - .replace(/\]$/, '\n]'); - - await FS('config/chatrooms.json.0').write(data); - data = null; - await FS('config/chatrooms.json.0').rename('config/chatrooms.json'); - writing = false; - if (writePending) { - writePending = false; - setImmediate(() => this.writeChatRoomData()); - } - }; - })(); - if (Config.nofswriting) this.writeChatRoomData = () => {}; - - this.writeNumRooms = (() => { - let writing = false; - let lastBattle = -1; // last lastBattle to be written to file - return async () => { - if (writing) return; - - // batch writing lastbattle.txt for every 10 battles - if (lastBattle >= this.lastBattle) return; - lastBattle = this.lastBattle + 10; - - let filename = 'logs/lastbattle.txt'; - writing = true; - await FS(`${filename}.0`).write('' + lastBattle); - await FS(`${filename}.0`).rename(filename); - writing = false; - filename = null; - if (lastBattle < this.lastBattle) { - setImmediate(() => this.writeNumRooms()); - } - }; - })(); - if (Config.nofswriting) this.writeNumRooms = () => {}; - - // init users - this.users = Object.create(null); - this.userCount = 0; // cache of `size(this.users)` - this.maxUsers = 0; - this.maxUsersDate = 0; - - this.reportUserStatsInterval = setInterval( - () => this.reportUserStats(), - REPORT_USER_STATS_INTERVAL - ); - - // Create writestream for modlog - this.modlogStream = FS('logs/modlog/modlog_global.txt').createAppendStream(); - } - - reportUserStats() { - if (this.maxUsersDate) { - LoginServer.request('updateuserstats', { - date: this.maxUsersDate, - users: this.maxUsers, - }, () => {}); - this.maxUsersDate = 0; - } - LoginServer.request('updateuserstats', { - date: Date.now(), - users: this.userCount, - }, () => {}); - } - - get formatListText() { - if (this.formatList) { - return this.formatList; - } - this.formatList = '|formats' + (Ladders.formatsListPrefix || ''); - let section = '', prevSection = ''; - let curColumn = 1; - for (let i in Dex.formats) { - let format = Dex.formats[i]; - if (format.section) section = format.section; - if (format.column) curColumn = format.column; - if (!format.name) continue; - if (!format.challengeShow && !format.searchShow && !format.tournamentShow) continue; - - if (section !== prevSection) { - prevSection = section; - this.formatList += '|,' + curColumn + '|' + section; - } - this.formatList += '|' + format.name; - let displayCode = 0; - if (format.team) displayCode |= 1; - if (format.searchShow) displayCode |= 2; - if (format.challengeShow) displayCode |= 4; - if (format.tournamentShow) displayCode |= 8; - const level = format.maxLevel || format.maxForcedLevel || format.forcedLevel; - if (level === 50) displayCode |= 16; - this.formatList += ',' + displayCode.toString(16); - } - return this.formatList; - } - get configRankList() { - if (Config.nocustomgrouplist) return ''; - - // putting the resultant object in Config would enable this to be run again should config.js be reloaded. - if (Config.rankList) { - return Config.rankList; - } - let rankList = []; - - for (let rank in Config.groups) { - if (!Config.groups[rank] || !rank) continue; - - let tarGroup = Config.groups[rank]; - let groupType = tarGroup.addhtml || (!tarGroup.mute && !tarGroup.root) ? 'normal' : (tarGroup.root || tarGroup.declare) ? 'leadership' : 'staff'; - - rankList.push({symbol: rank, name: (Config.groups[rank].name || null), type: groupType}); // send the first character in the rank, incase they put a string several characters long - } - - const typeOrder = ['punishment', 'normal', 'staff', 'leadership']; - - rankList = rankList.sort((a, b) => typeOrder.indexOf(b.type) - typeOrder.indexOf(a.type)); - - // add the punishment types at the very end. - for (let rank in Config.punishgroups) { - rankList.push({symbol: Config.punishgroups[rank].symbol, name: Config.punishgroups[rank].name, type: 'punishment'}); - } - - Config.rankList = '|customgroups|' + JSON.stringify(rankList) + '\n'; - return Config.rankList; - } - - getRoomList(filter) { - let rooms = []; - let skipCount = 0; - let [formatFilter, eloFilter] = filter.split(','); - if (this.battleCount > 150 && !formatFilter && !eloFilter) { - skipCount = this.battleCount - 150; - } - Rooms.rooms.forEach(room => { - if (!room || !room.active || room.isPrivate) return; - if (formatFilter && formatFilter !== room.format) return; - if (eloFilter && (!room.rated || room.rated < eloFilter)) return; - if (skipCount && skipCount--) return; - - rooms.push(room); - }); - - let roomTable = {}; - for (let i = rooms.length - 1; i >= rooms.length - 100 && i >= 0; i--) { - let room = rooms[i]; - let roomData = {}; - if (room.active && room.battle) { - if (room.battle.p1) roomData.p1 = room.battle.p1.name; - if (room.battle.p2) roomData.p2 = room.battle.p2.name; - if (room.tour) roomData.minElo = 'tour'; - if (room.rated) roomData.minElo = Math.floor(room.rated); - } - if (!roomData.p1 || !roomData.p2) continue; - roomTable[room.id] = roomData; - } - return roomTable; - } - getRooms(user) { - let roomsData = {official:[], chat:[], userCount: this.userCount, battleCount: this.battleCount}; - for (let i = 0; i < this.chatRooms.length; i++) { - let room = this.chatRooms[i]; - if (!room) continue; - if (room.isPrivate && !(room.isPrivate === 'voice' && user.group !== ' ')) continue; - (room.isOfficial ? roomsData.official : roomsData.chat).push({ - title: room.title, - desc: room.desc, - userCount: room.userCount, - }); - } - return roomsData; - } - checkModjoin() { - return true; - } - update() {} - isMuted() { - return false; - } - send(message, user) { - if (user) { - user.sendTo(this, message); - } else if (this.userCount) { - Sockets.channelBroadcast(this.id, message); - } - } - sendAuth(message) { - for (let i in this.users) { - let user = this.users[i]; - if (user.connected && user.can('receiveauthmessages', null, this)) { - user.sendTo(this, message); - } - } - } - add(message) { - if (Rooms.lobby) return Rooms.lobby.add(message); - return this; - } - addRaw(message) { - if (Rooms.lobby) return Rooms.lobby.addRaw(message); - return this; - } - addChatRoom(title) { - let id = toId(title); - if (id === 'battles' || id === 'rooms' || id === 'ladder' || id === 'teambuilder' || id === 'home' || id === 'all' || id === 'public') return false; - if (Rooms.rooms.has(id)) return false; - - let chatRoomData = { - title: title, - }; - let room = Rooms.createChatRoom(id, title, chatRoomData); - this.chatRoomData.push(chatRoomData); - this.chatRooms.push(room); - this.writeChatRoomData(); - return true; - } - - prepBattleRoom(format) { - //console.log('BATTLE START BETWEEN: ' + p1.userid + ' ' + p2.userid); - let roomPrefix = `battle-${toId(Dex.getFormat(format).name)}-`; - let battleNum = this.lastBattle; - let roomid; - do { - roomid = `${roomPrefix}${++battleNum}`; - } while (Rooms.rooms.has(roomid)); - - this.lastBattle = battleNum; - this.writeNumRooms(); - return roomid; - } - - onCreateBattleRoom(p1, p2, room, options) { - if (Config.reportbattles) { - let reportRoom = Rooms(Config.reportbattles === true ? 'lobby' : Config.reportbattles); - if (reportRoom) { - reportRoom - .add(`|b|${room.id}|${p1.getIdentity()}|${p2.getIdentity()}`) - .update(); - } - } - if (Config.logladderip && options.rated) { - this.ladderIpLog.write( - `${p1.userid}: ${p1.latestIp}\n` + - `${p2.userid}: ${p2.latestIp}\n` - ); - } - } - - deregisterChatRoom(id) { - id = toId(id); - let room = Rooms(id); - if (!room) return false; // room doesn't exist - if (!room.chatRoomData) return false; // room isn't registered - // deregister from global chatRoomData - // looping from the end is a pretty trivial optimization, but the - // assumption is that more recently added rooms are more likely to - // be deleted - for (let i = this.chatRoomData.length - 1; i >= 0; i--) { - if (id === toId(this.chatRoomData[i].title)) { - this.chatRoomData.splice(i, 1); - this.writeChatRoomData(); - break; - } - } - delete room.chatRoomData; - return true; - } - delistChatRoom(id) { - id = toId(id); - if (!Rooms.rooms.has(id)) return false; // room doesn't exist - for (let i = this.chatRooms.length - 1; i >= 0; i--) { - if (id === this.chatRooms[i].id) { - this.chatRooms.splice(i, 1); - break; - } - } - } - removeChatRoom(id) { - id = toId(id); - let room = Rooms(id); - if (!room) return false; // room doesn't exist - room.destroy(); - return true; - } - autojoinRooms(user, connection) { - // we only autojoin regular rooms if the client requests it with /autojoin - // note that this restriction doesn't apply to staffAutojoin - let includesLobby = false; - for (let i = 0; i < this.autojoin.length; i++) { - user.joinRoom(this.autojoin[i], connection); - if (this.autojoin[i] === 'lobby') includesLobby = true; - } - if (!includesLobby && Config.serverid !== 'showdown') user.send(`>lobby\n|deinit`); - } - checkAutojoin(user, connection) { - if (!user.named) return; - for (let i = 0; i < this.staffAutojoin.length; i++) { - let room = Rooms(this.staffAutojoin[i]); - if (!room) { - this.staffAutojoin.splice(i, 1); - i--; - continue; - } - if (room.staffAutojoin === true && user.isStaff || - typeof room.staffAutojoin === 'string' && room.staffAutojoin.includes(user.group) || - room.auth && user.userid in room.auth) { - // if staffAutojoin is true: autojoin if isStaff - // if staffAutojoin is String: autojoin if user.group in staffAutojoin - // if staffAutojoin is anything truthy: autojoin if user has any roomauth - user.joinRoom(room.id, connection); - } - } - for (let i = 0; i < user.connections.length; i++) { - connection = user.connections[i]; - if (connection.autojoins) { - let autojoins = connection.autojoins.split(','); - for (let j = 0; j < autojoins.length; j++) { - user.tryJoinRoom(autojoins[j], connection); - } - connection.autojoins = ''; - } - } - } - onConnect(user, connection) { - let initdata = '|updateuser|' + user.name + '|' + (user.named ? '1' : '0') + '|' + user.avatar + '\n'; - connection.send(initdata + this.configRankList + this.formatListText); - if (this.chatRooms.length > 2) connection.send('|queryresponse|rooms|null'); // should display room list - } - onJoin(user, connection) { - if (!user) return false; // ??? - if (this.users[user.userid]) return user; - - this.users[user.userid] = user; - if (++this.userCount > this.maxUsers) { - this.maxUsers = this.userCount; - this.maxUsersDate = Date.now(); - } - - return user; - } - onRename(user, oldid, joining) { - delete this.users[oldid]; - this.users[user.userid] = user; - return user; - } - onUpdateIdentity() {} - onLeave(user) { - if (!user) return; // ... - delete this.users[user.userid]; - --this.userCount; - } - modlog(text) { - this.modlogStream.write('[' + (new Date().toJSON()) + '] ' + text + '\n'); - } - startLockdown(err, slow) { - if (this.lockdown && err) return; - let devRoom = Rooms('development'); - const stack = (err ? Chat.escapeHTML(err.stack).split(`\n`).slice(0, 2).join(`
    `) : ``); - Rooms.rooms.forEach((curRoom, id) => { - if (id === 'global') return; - if (err) { - if (id === 'staff' || id === 'development' || (!devRoom && id === 'lobby')) { - curRoom.addRaw(`
    The server needs to restart because of a crash: ${stack}
    Please restart the server.
    `); - curRoom.addRaw(`
    You will not be able to start new battles until the server restarts.
    `); - curRoom.update(); - } else { - curRoom.addRaw(`
    The server needs restart because of a crash.
    No new battles can be started until the server is done restarting.
    `).update(); - } - } else { - curRoom.addRaw(`
    The server is restarting soon.
    Please finish your battles quickly. No new battles can be started until the server resets in a few minutes.
    `).update(); - } - const game = curRoom.game; - if (!slow && game && game.timer && typeof game.timer.start === 'function' && !game.ended) { - game.timer.start(); - if (curRoom.modchat !== '+') { - curRoom.modchat = '+'; - curRoom.addRaw(`
    Moderated chat was set to +!
    Only users of rank + and higher can talk.
    `).update(); - } - } - }); - Users.users.forEach(u => { - u.send(`|pm|~|${u.group}${u.name}|/raw
    The server is restarting soon.
    Please finish your battles quickly. No new battles can be started until the server resets in a few minutes.
    `); - }); - - this.lockdown = true; - this.lastReportedCrash = Date.now(); - } - automaticKillRequest() { - const notifyPlaces = ['development', 'staff', 'upperstaff']; - if (Config.autolockdown === undefined) Config.autolockdown = true; // on by default - - if (Config.autolockdown && Rooms.global.lockdown === true && Rooms.global.battleCount === 0) { - // The server is in lockdown, the final battle has finished, and the option is set - // so we will now automatically kill the server here if it is not updating. - if (Chat.updateServerLock) { - this.notifyRooms(notifyPlaces, `|html|
    Automatic server lockdown kill canceled.

    The server tried to automatically kill itself upon the final battle finishing, but the server was updating while trying to kill itself.
    `); - return; - } - - Sockets.workers.forEach(worker => worker.kill()); - - // final warning - this.notifyRooms(notifyPlaces, `|html|
    The server is about to automatically kill itself in 10 seconds.
    `); - - // kill server in 10 seconds if it's still set to - setTimeout(() => { - if (Config.autolockdown && Rooms.global.lockdown === true) { - // finally kill the server - process.exit(); - } else { - this.notifyRooms(notifyPlaces, `|html|
    Automatic server lockdown kill canceled.

    In the last final seconds, the automatic lockdown was manually disabled.
    `); - } - }, 10 * 1000); - } - } - notifyRooms(rooms, message) { - if (!rooms || !message) return; - for (let roomid of rooms) { - let curRoom = Rooms(roomid); - if (curRoom) curRoom.add(message).update(); - } - } - reportCrash(err) { - if (this.lockdown) return; - const time = Date.now(); - if (time - this.lastReportedCrash < CRASH_REPORT_THROTTLE) { - return; - } - this.lastReportedCrash = time; - const stack = (err ? Chat.escapeHTML(err.stack).split(`\n`).slice(0, 2).join(`
    `) : ``); - const crashMessage = `|html|
    The server has crashed: ${stack}
    `; - const devRoom = Rooms('development'); - if (devRoom) { - devRoom.add(crashMessage).update(); - } else { - if (Rooms.lobby) Rooms.lobby.add(crashMessage).update(); - const staffRoom = Rooms('staff'); - if (staffRoom) staffRoom.add(crashMessage).update(); - } - } -} - -class BattleRoom extends Room { - constructor(roomid, formatid, p1, p2, options) { - super(roomid, "" + p1.name + " vs. " + p2.name); - this.modchat = (Config.battlemodchat || false); - this.modjoin = false; - this.slowchat = false; - this.filterStretching = false; - this.filterEmojis = false; - this.filterCaps = false; - this.reportJoins = Config.reportbattlejoins; - - this.type = 'battle'; - - this.resetUser = ''; - this.modchatUser = ''; - this.expireTimer = null; - this.active = false; - - formatid = '' + (formatid || ''); - let format = Dex.getFormat(formatid); - - this.format = format.id; - this.auth = Object.create(null); - //console.log("NEW BATTLE"); - - // Sometimes we might allow BattleRooms to have no options - if (!options) { - options = {}; - } - - let rated; - if (options.rated && format.rated !== false) { - rated = options.rated; - } else { - rated = false; - } - - if (options.tour) { - this.tour = options.tour; - } else { - this.tour = false; - } - - this.p1 = p1 || null; - this.p2 = p2 || null; - - this.rated = rated; - this.battle = new Rooms.RoomBattle(this, formatid, rated); - this.game = this.battle; - - this.sideTicksLeft = [21, 21]; - if (!rated && !this.tour) this.sideTicksLeft = [28, 28]; - this.sideTurnTicks = [0, 0]; - this.disconnectTickDiff = [0, 0]; - - if (Config.forcetimer) this.battle.timer.start(); - - this.modlogStream = Rooms.battleModlogStream; - } - push(message) { - if (typeof message === 'string') { - this.log.push(message); - } else { - this.log = this.log.concat(message); - } - } - win(winner) { - // Declare variables here in case we need them for non-rated battles logging. - let p1score = 0.5; - let winnerid = toId(winner); - - // Check if the battle was rated to update the ladder, return its response, and log the battle. - if (this.rated) { - this.rated = false; - let p1 = this.battle.p1; - let p2 = this.battle.p2; - - if (winnerid === p1.userid) { - p1score = 1; - } else if (winnerid === p2.userid) { - p1score = 0; - } - - let p1name = p1.name; - let p2name = p2.name; - - //update.updates.push('[DEBUG] uri: ' + Config.loginserver + 'action.php?act=ladderupdate&serverid=' + Config.serverid + '&p1=' + encodeURIComponent(p1) + '&p2=' + encodeURIComponent(p2) + '&score=' + p1score + '&format=' + toId(rated.format) + '&servertoken=[token]'); - - winner = Users.get(winnerid); - if (winner && !winner.registered) { - this.sendUser(winner, '|askreg|' + winner.userid); - } - // update rankings - Ladders(this.battle.format).updateRating(p1name, p2name, p1score, this); - } else if (Config.logchallenges) { - // Log challenges if the challenge logging config is enabled. - if (winnerid === this.p1.userid) { - p1score = 1; - } else if (winnerid === this.p2.userid) { - p1score = 0; - } - this.update(); - this.logBattle(p1score); - } else { - this.battle.logData = null; - } - if (Config.autosavereplays) { - let uploader = Users.get(winnerid); - if (uploader && uploader.connections[0]) { - Chat.parse('/savereplay', this, uploader, uploader.connections[0]); - } - } - if (this.tour) { - this.tour.onBattleWin(this, winnerid); - } - this.update(); - } - // logNum = 0 : spectator log (no exact HP) - // logNum = 1, 2 : player log (exact HP for that player) - // logNum = 3 : debug log (exact HP for all players) - getLog(logNum) { - let log = []; - for (let i = 0; i < this.log.length; ++i) { - let line = this.log[i]; - if (line === '|split') { - log.push(this.log[i + logNum + 1]); - i += 4; - } else { - log.push(line); - } - } - return log; - } - getLogForUser(user) { - if (!(user in this.game.players)) return this.getLog(0); - return this.getLog(this.game.players[user].slotNum + 1); - } - update(excludeUser) { - if (this.log.length <= this.lastUpdate) return; - - if (this.userCount) { - Sockets.subchannelBroadcast(this.id, '>' + this.id + '\n\n' + this.log.slice(this.lastUpdate).join('\n')); - } - - this.lastUpdate = this.log.length; - - // empty rooms time out after ten minutes - let hasUsers = false; - for (let i in this.users) { // eslint-disable-line no-unused-vars - hasUsers = true; - break; - } - if (!hasUsers) { - if (this.expireTimer) clearTimeout(this.expireTimer); - this.expireTimer = setTimeout(() => this.tryExpire(), TIMEOUT_EMPTY_DEALLOCATE); - } else { - if (this.expireTimer) clearTimeout(this.expireTimer); - this.expireTimer = setTimeout(() => this.tryExpire(), TIMEOUT_INACTIVE_DEALLOCATE); - } - } - async logBattle(p1score, p1rating, p2rating) { - let logData = this.battle.logData; - if (!logData) return; - this.battle.logData = null; // deallocate to save space - logData.log = BattleRoom.prototype.getLog.call(logData, 3); // replay log (exact damage) - - // delete some redundant data - if (p1rating) { - delete p1rating.formatid; - delete p1rating.username; - delete p1rating.rpsigma; - delete p1rating.sigma; - } - if (p2rating) { - delete p2rating.formatid; - delete p2rating.username; - delete p2rating.rpsigma; - delete p2rating.sigma; - } - - logData.p1rating = p1rating; - logData.p2rating = p2rating; - logData.endType = this.battle.endType; - if (!p1rating) logData.ladderError = true; - const date = new Date(); - logData.timestamp = '' + date; - logData.id = this.id; - logData.format = this.format; - - const logsubfolder = Chat.toTimestamp(date).split(' ')[0]; - const logfolder = logsubfolder.split('-', 2).join('-'); - const tier = this.format.toLowerCase().replace(/[^a-z0-9]+/g, ''); - const logpath = `logs/${logfolder}/${tier}/${logsubfolder}/`; - await FS(logpath).mkdirp(); - await FS(logpath + this.id + '.log.json').write(JSON.stringify(logData)); - //console.log(JSON.stringify(logData)); - } - tryExpire() { - this.expire(); - } - getInactiveSide() { - let p1active = this.battle.p1 && this.battle.p1.active; - let p2active = this.battle.p2 && this.battle.p2.active; - - if (p1active && this.battle.requests.p1) { - if (!this.battle.requests.p1[2]) p1active = false; - } - if (p2active && this.battle.requests.p2) { - if (!this.battle.requests.p2[2]) p2active = false; - } - - if (p1active && !p2active) return 1; - if (p2active && !p1active) return 0; - return -1; - } - sendPlayer(num, message) { - let player = this.getPlayer(num); - if (!player) return false; - player.sendRoom(message); - } - getPlayer(num) { - return this.battle['p' + (num + 1)]; - } - requestModchat(user) { - if (user === null) { - this.modchatUser = ''; - return; - } else if (user.can('modchat') || !this.modchatUser || this.modchatUser === user.userid) { - this.modchatUser = user.userid; - return; - } else { - return "Only the user who set modchat and global staff can change modchat levels in battle rooms"; - } - } - onConnect(user, connection) { - this.sendUser(connection, '|init|battle\n|title|' + this.title + '\n' + this.getLogForUser(user).join('\n')); - if (this.game && this.game.onConnect) this.game.onConnect(user, connection); - } - onJoin(user, connection) { - if (!user) return false; - if (this.users[user.userid]) return user; - - if (user.named) { - this.add((this.reportJoins && !user.locked ? '|j|' : '|J|') + user.name).update(); - } - - this.users[user.userid] = user; - this.userCount++; - - if (this.game && this.game.onJoin) { - this.game.onJoin(user, connection); - } - return user; - } - onRename(user, oldid, joining) { - if (joining) { - this.add((this.reportJoins && !user.locked ? '|j|' : '|J|') + user.name); - } - delete this.users[oldid]; - this.users[user.userid] = user; - this.update(); - return user; - } - onUpdateIdentity() {} - onLeave(user) { - if (!user) return; // ... - if (!user.named) { - delete this.users[user.userid]; - return; - } - delete this.users[user.userid]; - this.userCount--; - this.add((this.reportJoins && !user.locked ? '|l|' : '|L|') + user.name); - - if (this.game && this.game.onLeave) { - this.game.onLeave(user); - } - this.update(); - } - expire() { - this.send('|expire|'); - this.destroy(); - } - destroy() { - // deallocate ourself - - if (this.tour) { - // resolve state of the tournament; - if (!this.battle.ended) this.tour.onBattleWin(this, ''); - this.tour = null; - } - - // remove references to ourself - for (let i in this.users) { - this.users[i].leaveRoom(this, null, true); - delete this.users[i]; - } - this.users = null; - - // deallocate children and get rid of references to them - if (this.game) { - this.game.destroy(); - } - this.battle = null; - this.game = null; - - this.active = false; - - if (this.expireTimer) { - clearTimeout(this.expireTimer); - } - this.expireTimer = null; - - if (this.muteTimer) { - clearTimeout(this.muteTimer); - } - this.muteTimer = null; - - // get rid of some possibly-circular references - Rooms.rooms.delete(this.id); - } -} - -class ChatRoom extends Room { - constructor(roomid, title, options) { - super(roomid, title); - if (options) { - Object.assign(this, options); - if (!this.isPersonal) this.chatRoomData = options; - } - - this.logTimes = true; - this.logFile = null; - this.logFilename = ''; - this.destroyingLog = false; - if (this.auth) Object.setPrototypeOf(this.auth, null); - if (!this.modchat) this.modchat = (Config.chatmodchat || false); - if (!this.modjoin) this.modjoin = false; - if (!this.filterStretching) this.filterStretching = false; - if (!this.filterEmojis) this.filterEmojis = false; - if (!this.filterCaps) this.filterCaps = false; - - this.type = 'chat'; - - this.rollLogTimer = null; - if (Config.logchat) { - this.rollLogFile(true); - this.logEntry = function (entry, date) { - const timestamp = Chat.toTimestamp(new Date()).split(' ')[1] + ' '; - entry = entry.replace(/]* src="data:image\/png;base64,[^">]+"[^>]*>/g, ''); - this.logFile.write(timestamp + entry + '\n'); - }; - this.logEntry('NEW CHATROOM: ' + this.id); - if (Config.loguserstats) { - this.logUserStatsInterval = setInterval(() => this.logUserStats(), Config.loguserstats); - } - } - - if (Config.reportjoinsperiod) { - this.userList = this.getUserList(); - this.reportJoinsQueue = []; - } - - if (this.isPersonal) { - this.modlogStream = Rooms.groupchatModlogStream; - } else { - this.modlogStream = FS('logs/modlog/modlog_' + roomid + '.txt').createAppendStream(); - } - } - - reportRecentJoins() { - delete this.reportJoinsInterval; - if (!this.reportJoinsQueue || this.reportJoinsQueue.length === 0) { - // nothing to report - return; - } - this.userList = this.getUserList(); - this.send(this.reportJoinsQueue.join('\n')); - this.reportJoinsQueue.length = 0; - } - - async rollLogFile(sync) { - const date = new Date(); - const dateString = Chat.toTimestamp(date).split(' ')[0]; - const monthString = dateString.split('-', 2).join('-'); - const basepath = `logs/chat/${this.id}/`; - const relpath = `${monthString}/`; - const filename = dateString + '.txt'; - - const currentTime = date.getTime(); - const nextHour = new Date(date.setMinutes(60)).setSeconds(1); - - // This could cause problems if the previous rollLogFile from an - // hour ago isn't done yet. But if that's the case, we have bigger - // problems anyway. - if (this.rollLogTimer) clearTimeout(this.rollLogTimer); - - if (this.destroyingLog) return; - this.rollLogTimer = setTimeout(() => this.rollLogFile(), nextHour - currentTime); - - if (relpath + filename === this.logFilename) return; - - if (sync) { - FS(basepath + relpath).mkdirpSync(); - } else { - await FS(basepath + relpath).mkdirp(); - } - if (this.destroyingLog) return; - this.logFilename = relpath + filename; - if (this.logFile) this.logFile.end(); - this.logFile = FS(basepath + relpath + filename).createAppendStream(); - // Create a symlink to today's lobby log. - // These operations need to be synchronous, but it's okay - // because this code is only executed once every 24 hours. - let link0 = basepath + 'today.txt.0'; - FS(link0).unlinkIfExistsSync(); - try { - FS(link0).symlinkToSync(relpath + filename); // intentionally a relative link - FS(link0).renameSync(basepath + 'today.txt'); - } catch (e) {} // OS might not support symlinks or atomic rename - } - destroyLog(finalCallback) { - this.destroyingLog = true; - if (this.logFile) { - clearTimeout(this.rollLogTimer); - this.rollLogTimer = null; - this.logEntry = function () { }; - this.logFile.end(finalCallback); - } else if (typeof finalCallback === 'function') { - setImmediate(finalCallback); - } - } - logUserStats() { - let total = 0; - let guests = 0; - let groups = {}; - for (let group of Config.groupsranking) { - groups[group] = 0; - } - for (let i in this.users) { - let user = this.users[i]; - ++total; - if (!user.named) { - ++guests; - } - if (this.auth && this.auth[user.userid] && this.auth[user.userid] in groups) { - ++groups[this.auth[user.userid]]; - } else { - ++groups[user.group]; - } - } - let entry = '|userstats|total:' + total + '|guests:' + guests; - for (let i in groups) { - entry += '|' + i + ':' + groups[i]; - } - this.logEntry(entry); - } - - getUserList() { - let buffer = ''; - let counter = 0; - for (let i in this.users) { - if (!this.users[i].named) { - continue; - } - counter++; - buffer += ',' + this.users[i].getIdentity(this.id); - } - let msg = '|users|' + counter + buffer; - return msg; - } - reportJoin(type, entry) { - if (this.reportJoins) { - this.add('|' + type + '|' + entry).update(); - return; - } - entry = '|' + type.toUpperCase() + '|' + entry; - if (this.reportJoinsQueue) { - if (!this.reportJoinsInterval) { - this.reportJoinsInterval = setTimeout( - () => this.reportRecentJoins(), Config.reportjoinsperiod - ); - } - - this.reportJoinsQueue.push(entry); - } else { - this.send(entry); - } - this.logEntry(entry); - } - update() { - if (this.log.length <= this.lastUpdate) return; - let entries = this.log.slice(this.lastUpdate); - if (this.reportJoinsQueue && this.reportJoinsQueue.length) { - clearInterval(this.reportJoinsInterval); - delete this.reportJoinsInterval; - Array.prototype.unshift.apply(entries, this.reportJoinsQueue); - this.reportJoinsQueue.length = 0; - this.userList = this.getUserList(); - } - let update = entries.join('\n'); - if (this.log.length > 100) { - this.log.splice(0, this.log.length - 100); - } - this.lastUpdate = this.log.length; - - // Set up expire timer to clean up inactive personal rooms. - if (this.isPersonal) { - if (this.expireTimer) clearTimeout(this.expireTimer); - this.expireTimer = setTimeout(() => this.tryExpire(), TIMEOUT_INACTIVE_DEALLOCATE); - } - - this.send(update); - } - tryExpire() { - this.destroy(); - } - getIntroMessage(user) { - let message = ''; - if (this.introMessage) message += '\n|raw|
    ' + this.introMessage.replace(/\n/g, '') + '
    '; - if (this.staffMessage && user.can('mute', null, this)) message += (message ? '
    ' : '\n|raw|
    ') + '(Staff intro:)
    ' + this.staffMessage.replace(/\n/g, '') + '
    '; - if (this.modchat) { - message += (message ? '
    ' : '\n|raw|
    ') + '
    ' + - 'Must be rank ' + this.modchat + ' or higher to talk right now.' + - '
    '; - } - if (this.slowchat && user.can('mute', null, this)) { - message += (message ? '
    ' : '\n|raw|
    ') + '
    ' + - 'Messages must have at least ' + this.slowchat + ' seconds between them.' + - '
    '; - } - if (message) message += '
    '; - return message; - } - onConnect(user, connection) { - let userList = this.userList ? this.userList : this.getUserList(); - this.sendUser(connection, '|init|chat\n|title|' + this.title + '\n' + userList + '\n' + this.getLogSlice(-100).join('\n') + this.getIntroMessage(user)); - if (this.poll) this.poll.onConnect(user, connection); - if (this.game && this.game.onConnect) this.game.onConnect(user, connection); - } - onJoin(user, connection) { - if (!user) return false; // ??? - if (this.users[user.userid]) return user; - - if (user.named) { - this.reportJoin('j', user.getIdentity(this.id)); - } - - this.users[user.userid] = user; - this.userCount++; - - if (this.game && this.game.onJoin) this.game.onJoin(user, connection); - return user; - } - onRename(user, oldid, joining) { - delete this.users[oldid]; - this.users[user.userid] = user; - if (joining) { - this.reportJoin('j', user.getIdentity(this.id)); - if (this.staffMessage && user.can('mute', null, this)) this.sendUser(user, '|raw|
    (Staff intro:)
    ' + this.staffMessage.replace(/\n/g, '') + '
    '); - } else if (!user.named) { - this.reportJoin('l', oldid); - } else { - this.reportJoin('n', user.getIdentity(this.id) + '|' + oldid); - } - if (this.poll && user.userid in this.poll.voters) this.poll.updateFor(user); - return user; - } - /** - * onRename, but without a userid change - */ - onUpdateIdentity(user) { - if (user && user.connected && user.named) { - if (!this.users[user.userid]) return false; - this.reportJoin('n', user.getIdentity(this.id) + '|' + user.userid); - } - } - onLeave(user) { - if (!user) return; // ... - - delete this.users[user.userid]; - this.userCount--; - - if (user.named) { - this.reportJoin('l', user.getIdentity(this.id)); - } - if (this.game && this.game.onLeave) this.game.onLeave(user); - } - destroy() { - // deallocate ourself - - // remove references to ourself - for (let i in this.users) { - this.users[i].leaveRoom(this, null, true); - delete this.users[i]; - } - this.users = null; - - Rooms.global.deregisterChatRoom(this.id); - Rooms.global.delistChatRoom(this.id); - - if (this.aliases) { - for (let i = 0; i < this.aliases.length; i++) { - Rooms.aliases.delete(this.aliases[i]); - } - } - - if (this.game) { - this.game.destroy(); - } - - // Clear any active timers for the room - if (this.muteTimer) { - clearTimeout(this.muteTimer); - this.muteTimer = null; - } - if (this.expireTimer) { - clearTimeout(this.expireTimer); - this.expireTimer = null; - } - if (this.rollLogTimer) { - clearTimeout(this.rollLogTimer); - this.rollLogTimer = null; - } - if (this.reportJoinsInterval) { - clearInterval(this.reportJoinsInterval); - } - this.reportJoinsInterval = null; - if (this.logUserStatsInterval) { - clearInterval(this.logUserStatsInterval); - } - this.logUserStatsInterval = null; - - this.destroyLog(); - - if (!this.isPersonal) { - this.modlogStream.removeAllListeners('finish'); - this.modlogStream.end(); - } - this.modlogStream = null; - - // get rid of some possibly-circular references - Rooms.rooms.delete(this.id); - } -} - -function getRoom(roomid, fallback) { - if (fallback) throw new Error("fallback parameter in getRoom no longer supported"); - if (roomid && roomid.id) return roomid; - return Rooms.rooms.get(roomid); -} -Rooms.get = getRoom; -Rooms.search = function (name, fallback) { - if (fallback) throw new Error("fallback parameter in Rooms.search no longer supported"); - return getRoom(name) || getRoom(toId(name)) || getRoom(Rooms.aliases.get(toId(name))); -}; - -Rooms.createBattle = function (roomid, format, p1, p2, options) { - if (roomid && roomid.id) return roomid; - if (!p1 || !p2) return false; - if (!roomid) roomid = 'default'; - if (!Rooms.rooms.has(roomid)) { - // console.log("NEW BATTLE ROOM: " + roomid); - Monitor.countBattle(p1.latestIp, p1.name); - Monitor.countBattle(p2.latestIp, p2.name); - Rooms.rooms.set(roomid, new BattleRoom(roomid, format, p1, p2, options)); - } - return Rooms(roomid); -}; -Rooms.createChatRoom = function (roomid, title, data) { - let room = Rooms.rooms.get(roomid); - if (room) return room; - - room = new ChatRoom(roomid, title, data); - Rooms.rooms.set(roomid, room); - return room; -}; - -Rooms.battleModlogStream = FS('logs/modlog/modlog_battle.txt').createAppendStream(); -Rooms.groupchatModlogStream = FS('logs/modlog/modlog_groupchat.txt').createAppendStream(); - -Rooms.global = null; -Rooms.lobby = null; - -Rooms.Room = Room; -Rooms.GlobalRoom = GlobalRoom; -Rooms.BattleRoom = BattleRoom; -Rooms.ChatRoom = ChatRoom; - -Rooms.RoomGame = require('./room-game').RoomGame; -Rooms.RoomGamePlayer = require('./room-game').RoomGamePlayer; - -Rooms.RoomBattle = require('./room-battle').RoomBattle; -Rooms.RoomBattlePlayer = require('./room-battle').RoomBattlePlayer; -Rooms.SimulatorManager = require('./room-battle').SimulatorManager; -Rooms.SimulatorProcess = require('./room-battle').SimulatorProcess; - -// initialize - -if (!Config.quietconsole) console.log("NEW GLOBAL: global"); -Rooms.global = new GlobalRoom('global'); - -Rooms.rooms.set('global', Rooms.global); diff --git a/server/chat-commands.js b/server/chat-commands.js new file mode 100644 index 0000000000000..d7e0bf007cf75 --- /dev/null +++ b/server/chat-commands.js @@ -0,0 +1,4335 @@ +/** + * System commands + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * These are system commands - commands required for Pokemon Showdown + * to run. A lot of these are sent by the client. + * + * System commands should not be modified, added, or removed. If you'd + * like to modify or add commands, add or edit files in chat-plugins/ + * + * For the API, see chat-plugins/COMMANDS.md + * + * @license MIT license + */ + +'use strict'; + +/* eslint no-else-return: "error" */ + +const crypto = require('crypto'); +const FS = require('../.lib-dist/fs').FS; + +const MAX_REASON_LENGTH = 300; +const MUTE_LENGTH = 7 * 60 * 1000; +const HOURMUTE_LENGTH = 60 * 60 * 1000; + +const MAX_CHATROOM_ID_LENGTH = 225; + +/** Require reasons */ +const REQUIRE_REASONS = true; + +const avatarTable = new Set([ + 'aaron', + 'acetrainercouple-gen3', 'acetrainercouple', + 'acetrainerf-gen1', 'acetrainerf-gen1rb', 'acetrainerf-gen2', 'acetrainerf-gen3', 'acetrainerf-gen3rs', 'acetrainerf-gen4dp', 'acetrainerf-gen4', 'acetrainerf', + 'acetrainer-gen1', 'acetrainer-gen1rb', 'acetrainer-gen2', 'acetrainer-gen3jp', 'acetrainer-gen3', 'acetrainer-gen3rs', 'acetrainer-gen4dp', 'acetrainer-gen4', 'acetrainer', + 'acetrainersnowf', + 'acetrainersnow', + 'agatha-gen1', 'agatha-gen1rb', 'agatha-gen3', + 'alder', + 'anabel-gen3', + 'archer', + 'archie-gen3', + 'argenta', + 'ariana', + 'aromalady-gen3', 'aromalady-gen3rs', 'aromalady', + 'artist-gen4', 'artist', + 'ash', + 'backersf', + 'backers', + 'backpackerf', + 'backpacker', + 'baker', + 'barry', + 'battlegirl-gen3', 'battlegirl-gen4', 'battlegirl', + 'beauty-gen1', 'beauty-gen1rb', 'beauty-gen2jp', 'beauty-gen2', 'beauty-gen3', 'beauty-gen3rs', 'beauty-gen4dp', 'beauty-gen5bw2', 'beauty', + 'bellelba', + 'bellepa', + 'benga', + 'bertha', + 'bianca', + 'biker-gen1', 'biker-gen1rb', 'biker-gen2', 'biker-gen3', 'biker-gen4', 'biker', + 'bill-gen3', + 'birch-gen3', + 'birdkeeper-gen1', 'birdkeeper-gen1rb', 'birdkeeper-gen2', 'birdkeeper-gen3', 'birdkeeper-gen3rs', 'birdkeeper-gen4dp', 'birdkeeper', + 'blackbelt-gen1', 'blackbelt-gen1rb', 'blackbelt-gen2', 'blackbelt-gen3', 'blackbelt-gen3rs', 'blackbelt-gen4dp', 'blackbelt-gen4', 'blackbelt', + 'blaine-gen1', 'blaine-gen1rb', 'blaine-gen2', 'blaine-gen3', 'blaine', + 'blue-gen1champion', 'blue-gen1', 'blue-gen1rbchampion', 'blue-gen1rb', 'blue-gen1rbtwo', 'blue-gen1two', 'blue-gen2', 'blue-gen3champion', 'blue-gen3', 'blue-gen3two', 'blue', + 'boarder-gen2', 'boarder', + 'brandon-gen3', + 'brawly-gen3', 'brawly', + 'brendan-gen3', 'brendan-gen3rs', + 'brock-gen1', 'brock-gen1rb', 'brock-gen2', 'brock-gen3', 'brock', + 'bruno-gen1', 'bruno-gen1rb', 'bruno-gen2', 'bruno-gen3', 'bruno', + 'brycenman', + 'brycen', + 'buck', + 'bugcatcher-gen1', 'bugcatcher-gen1rb', 'bugcatcher-gen2', 'bugcatcher-gen3', 'bugcatcher-gen3rs', 'bugcatcher', + 'bugmaniac-gen3', + 'bugsy-gen2', 'bugsy', + 'burgh', + 'burglar-gen1', 'burglar-gen1rb', 'burglar-gen2', 'burglar-gen3', 'burglar', + 'byron', + 'caitlin', + 'cameraman', + 'camper-gen2', 'camper-gen3', 'camper-gen3rs', 'camper', + 'candice', + 'channeler-gen1', 'channeler-gen1rb', 'channeler-gen3', + 'cheren-gen5bw2', 'cheren', + 'cheryl', + 'chili', + 'chuck-gen2', 'chuck', + 'cilan', + 'clair-gen2', 'clair', + 'clay', + 'clemont', + 'clerkf', + 'clerk-boss', 'clerk', + 'clown', + 'collector-gen3', 'collector', + 'colress', + 'courtney-gen3', + 'cowgirl', + 'crasherwake', + 'cress', + 'crushgirl-gen3', + 'crushkin-gen3', + 'cueball-gen1', 'cueball-gen1rb', 'cueball-gen3', + 'cyclistf-gen4', 'cyclistf', + 'cyclist-gen4', 'cyclist', + 'cynthia-gen4', 'cynthia', + 'cyrus', + 'dahlia', + 'dancer', + 'darach', + 'dawn-gen4pt', 'dawn', + 'depotagent', + 'doctor', + 'doubleteam', + 'dragontamer-gen3', 'dragontamer', + 'drake-gen3', + 'drayden', + 'elesa-gen5bw2', 'elesa', + 'emmet', + 'engineer-gen1', 'engineer-gen1rb', 'engineer-gen3', + 'erika-gen1', 'erika-gen1rb', 'erika-gen2', 'erika-gen3', 'erika', + 'ethan-gen2c', 'ethan-gen2', 'ethan', + 'eusine-gen2', 'eusine', + 'expertf-gen3', + 'expert-gen3', + 'falkner-gen2', + 'falkner', + 'fantina', + 'firebreather-gen2', + 'firebreather', + 'fisherman-gen1', 'fisherman-gen1rb', 'fisherman-gen2jp', 'fisherman-gen3', 'fisherman-gen3rs', 'fisherman-gen4', 'fisherman', + 'flannery-gen3', 'flannery', + 'flint', + 'galacticgruntf', + 'galacticgrunt', + 'gambler-gen1', 'gambler-gen1rb', 'gambler', + 'gamer-gen3', + 'gardenia', + 'gentleman-gen1', 'gentleman-gen1rb', 'gentleman-gen3', 'gentleman-gen3rs', 'gentleman-gen4dp', 'gentleman-gen4', 'gentleman', + 'ghetsis-gen5bw', 'ghetsis', + 'giovanni-gen1', 'giovanni-gen1rb', 'giovanni-gen3', 'giovanni', + 'glacia-gen3', + 'greta-gen3', + 'grimsley', + 'guitarist-gen3', 'guitarist-gen4', 'guitarist', + 'harlequin', + 'hexmaniac-gen3jp', 'hexmaniac-gen3', + 'hiker-gen1', 'hiker-gen1rb', 'hiker-gen3', 'hiker-gen3rs', 'hiker-gen4', 'hiker', + 'hilbert-dueldisk', 'hilbert', + 'hilda-dueldisk', 'hilda', + 'hooligans', + 'hoopster', + 'hugh', + 'idol', + 'infielder', + 'ingo', + 'interviewers-gen3', + 'interviewers', + 'iris-gen5bw2', 'iris', + 'janine-gen2', 'janine', + 'janitor', + 'jasmine-gen2', 'jasmine', + 'jessiejames-gen1', + 'jogger', + 'jrtrainerf-gen1', 'jrtrainerf-gen1rb', + 'jrtrainer-gen1', 'jrtrainer-gen1rb', + 'juan-gen3', + 'juan', + 'juggler-gen1', 'juggler-gen1rb', 'juggler-gen2', 'juggler-gen3', 'juggler', + 'jupiter', + 'karen-gen2', 'karen', + 'kimonogirl', + 'kindler-gen3', + 'koga-gen1', 'koga-gen1rb', 'koga-gen3', 'koga', + 'kris-gen2', + 'lady-gen3', 'lady-gen3rs', 'lady-gen4', 'lady', + 'lance-gen1', 'lance-gen1rb', 'lance-gen2', 'lance-gen3', 'lance', + 'lass-gen1', 'lass-gen1rb', 'lass-gen2', 'lass-gen3', 'lass-gen3rs', 'lass-gen4dp', 'lass-gen4', 'lass', + 'leaf-gen3', + 'lenora', + 'linebacker', + 'li', + 'liza', + 'lorelei-gen1', 'lorelei-gen1rb', 'lorelei-gen3', + 'ltsurge-gen1', 'ltsurge-gen1rb', 'ltsurge-gen2', 'ltsurge-gen3', 'ltsurge', + 'lucas-gen4pt', 'lucas', + 'lucian', + 'lucy-gen3', + 'lyra', + 'madame-gen4dp', 'madame-gen4', 'madame', + 'maid', + 'marley', + 'marlon', + 'marshal', + 'mars', + 'matt-gen3', + 'maxie-gen3', + 'may-gen3', 'may-gen3rs', + 'maylene', + 'medium-gen2jp', 'medium', + 'mira', + 'misty-gen1', 'misty-gen1rb', 'misty-gen3', 'misty', + 'morty-gen2', 'morty', + 'mrfuji-gen3', + 'musician', + 'nate', + 'ninjaboy-gen3', 'ninjaboy', + 'noland-gen3', + 'norman-gen3', 'norman', + 'n', + 'nurse', + 'nurseryaide', + 'oak-gen1', 'oak-gen1rb', 'oak-gen3', + 'oldcouple-gen3', + 'painter-gen3', + 'palmer', + 'parasollady-gen3', 'parasollady-gen4', 'parasollady', + 'petrel', + 'phoebe-gen3', + 'picnicker-gen2', 'picnicker-gen3', 'picnicker-gen3rs', 'picnicker', + 'pilot', + 'plasmagruntf-gen5bw', 'plasmagruntf', + 'plasmagrunt-gen5bw', 'plasmagrunt', + 'pokefanf-gen2', 'pokefanf-gen3', 'pokefanf-gen4', 'pokefanf', + 'pokefan-gen3', 'pokefan-gen4', 'pokefan', + 'pokekid', + 'pokemaniac-gen1', 'pokemaniac-gen1rb', 'pokemaniac-gen3', 'pokemaniac-gen3rs', 'pokemaniac', + 'pokemonbreederf-gen3', 'pokemonbreederf-gen3frlg', 'pokemonbreederf-gen4', 'pokemonbreederf', + 'pokemonbreeder-gen3', 'pokemonbreeder-gen4', 'pokemonbreeder', + 'pokemonrangerf-gen3', 'pokemonrangerf-gen3rs', 'pokemonrangerf-gen4', 'pokemonrangerf', + 'pokemonranger-gen3', 'pokemonranger-gen3rs', 'pokemonranger-gen4', 'pokemonranger', + 'policeman-gen4', 'policeman', + 'preschoolerf', + 'preschooler', + 'proton', + 'pryce', + 'psychicf-gen3', 'psychicf-gen3rs', 'psychicf-gen4', 'psychicfjp-gen3', 'psychicf', + 'psychic-gen1', 'psychic-gen1rb', 'psychic-gen3', 'psychic-gen3rs', 'psychic-gen4', 'psychic', + 'rancher', + 'red-gen1main', 'red-gen1', 'red-gen1rb', 'red-gen1title', 'red-gen3', 'red', + 'reporter', + 'richboy-gen3', 'richboy-gen4', 'richboy', + 'riley', + 'roark', + 'rocker-gen1', 'rocker-gen1rb', 'rocker-gen3', + 'rocket-gen1', 'rocket-gen1rb', + 'rocketgruntf-gen2', 'rocketgruntf', + 'rocketgrunt-gen2', 'rocketgrunt', + 'rood', + 'rosa', + 'roughneck-gen4', 'roughneck', + 'roxanne-gen3', 'roxanne', + 'roxie', + 'ruinmaniac-gen3', 'ruinmaniac-gen3rs', 'ruinmaniac', + 'sabrina-gen1', 'sabrina-gen1rb', 'sabrina-gen2', 'sabrina-gen3', 'sabrina', + 'sage-gen2', 'sage-gen2jp', 'sage', + 'sailor-gen1', 'sailor-gen1rb', 'sailor-gen2', 'sailor-gen3jp', 'sailor-gen3', 'sailor-gen3rs', 'sailor', + 'saturn', + 'schoolboy-gen2', + 'schoolkidf-gen3', 'schoolkidf-gen4', 'schoolkidf', + 'schoolkid-gen3', 'schoolkid-gen4dp', 'schoolkid-gen4', 'schoolkid', + 'scientistf', + 'scientist-gen1', 'scientist-gen1rb', 'scientist-gen2', 'scientist-gen3', 'scientist-gen4dp', 'scientist-gen4', 'scientist', + 'shadowtriad', + 'shauntal', + 'shelly-gen3', + 'sidney-gen3', + 'silver-gen2kanto', 'silver-gen2', 'silver', + 'sisandbro-gen3', 'sisandbro-gen3rs', 'sisandbro', + 'skierf-gen4dp', 'skierf', + 'skier-gen2', 'skier', + 'skyla', + 'smasher', + 'spenser-gen3', + 'srandjr-gen3', + 'steven-gen3', 'steven', + 'striker', + 'supernerd-gen1', 'supernerd-gen1rb', 'supernerd-gen2', 'supernerd-gen3', 'supernerd', + 'swimmerf-gen2', 'swimmerf-gen3', 'swimmerf-gen3rs', 'swimmerf-gen4dp', 'swimmerf-gen4', 'swimmerfjp-gen2', 'swimmerf', + 'swimmer-gen1', 'swimmer-gen1rb', 'swimmer-gen4dp', 'swimmer-gen4', 'swimmerm-gen2', 'swimmerm-gen3', 'swimmerm-gen3rs', 'swimmer', + 'tabitha-gen3', + 'tamer-gen1', 'tamer-gen1rb', 'tamer-gen3', + 'tateandliza-gen3', + 'tate', + 'teacher-gen2', 'teacher', + 'teamaquabeta-gen3', + 'teamaquagruntf-gen3', + 'teamaquagruntm-gen3', + 'teammagmagruntf-gen3', + 'teammagmagruntm-gen3', + 'teamrocketgruntf-gen3', + 'teamrocketgruntm-gen3', + 'teamrocket', + 'thorton', + 'triathletebikerf-gen3', + 'triathletebikerm-gen3', + 'triathleterunnerf-gen3', + 'triathleterunnerm-gen3', + 'triathleteswimmerf-gen3', + 'triathleteswimmerm-gen3', + 'tuberf-gen3', 'tuberf-gen3rs', 'tuberf', + 'tuber-gen3', 'tuber', + 'tucker-gen3', + 'twins-gen2', 'twins-gen3', 'twins-gen3rs', 'twins-gen4dp', 'twins-gen4', 'twins', + 'unknownf', + 'unknown', + 'veteranf', + 'veteran-gen4', 'veteran', + 'volkner', + 'waiter-gen4dp', 'waiter-gen4', 'waiter', + 'waitress-gen4', 'waitress', + 'wallace-gen3', 'wallace-gen3rs', 'wallace', + 'wally-gen3', 'wally', + 'wattson-gen3', 'wattson', + 'whitney-gen2', 'whitney', + 'will-gen2', 'will', + 'winona-gen3', 'winona', + 'worker-gen4', + 'workerice', + 'worker', + 'yellow', + 'youngcouple-gen3', 'youngcouple-gen3rs', 'youngcouple-gen4dp', 'youngcouple', + 'youngster-gen1', 'youngster-gen1rb', 'youngster-gen2', 'youngster-gen3', 'youngster-gen3rs', 'youngster-gen4', 'youngster', + 'zinnia', + 'zinzolin', +]); + +/** @type {ChatCommands} */ +const commands = { + + '!version': true, + version(target, room, user) { + if (!this.runBroadcast()) return; + this.sendReplyBox(`Server version: ${Chat.package.version}`); + }, + + '!authority': true, + auth: 'authority', + stafflist: 'authority', + globalauth: 'authority', + authlist: 'authority', + authority(target, room, user, connection) { + if (target) { + let targetRoom = Rooms.search(target); + let availableRoom = targetRoom && targetRoom.checkModjoin(user); + if (targetRoom && availableRoom) return this.parse(`/roomauth1 ${target}`); + return this.parse(`/userauth ${target}`); + } + let rankLists = {}; + let ranks = Object.keys(Config.groups); + for (let u in Users.usergroups) { + let rank = Users.usergroups[u].charAt(0); + if (rank === ' ' || rank === '+') continue; + // In case the usergroups.csv file is not proper, we check for the server ranks. + if (ranks.includes(rank)) { + let name = Users.usergroups[u].substr(1); + if (!rankLists[rank]) rankLists[rank] = []; + if (name) rankLists[rank].push(name); + } + } + + let buffer = Object.keys(rankLists).sort((a, b) => + (Config.groups[b] || {rank: 0}).rank - (Config.groups[a] || {rank: 0}).rank + ).map(r => + `${(Config.groups[r] ? `**${Config.groups[r].name}s** (${r})` : r)}:\n${rankLists[r].sort((a, b) => toId(a).localeCompare(toId(b))).join(", ")}` + ); + + if (!buffer.length) return connection.popup("This server has no global authority."); + connection.popup(buffer.join("\n\n")); + }, + authhelp: [ + `/auth - Show global staff for the server.`, + `/auth [room] - Show what roomauth a room has.`, + `/auth [user] - Show what global and roomauth a user has.`, + ], + + userlist(target, room, user) { + let userList = []; + + for (let i in room.users) { + let curUser = Users(room.users[i]); + if (!curUser || !curUser.named) continue; + userList.push(Chat.escapeHTML(curUser.getIdentity(room.id))); + } + + let output = `There ${Chat.plural(userList, "are", "is")} ${Chat.count(userList, " users")} in this room:
    `; + output += userList.join(`, `); + + this.sendReplyBox(output); + }, + userlisthelp: [`/userlist - Displays a list of users who are currently in the room.`], + + '!me': true, + mee: 'me', + me(target, room, user) { + if (this.cmd === 'mee' && /[A-Z-a-z0-9/]/.test(target.charAt(0))) { + return this.errorReply(`/mee - must not start with a letter or number`); + } + target = this.canTalk(`/${this.cmd} ${target || ''}`); + if (!target) return; + + if (this.message.startsWith(`/ME`)) { + const uppercaseIdentity = user.getIdentity(room).toUpperCase(); + if (room) { + this.add(`|c|${uppercaseIdentity}|${target}`); + } else { + let msg = `|pm|${uppercaseIdentity}|${this.pmTarget.getIdentity()}|${target}`; + user.send(msg); + if (this.pmTarget !== user) this.pmTarget.send(msg); + } + return; + } + + return target; + }, + + '!battle': true, + 'battle!': 'battle', + battle(target, room, user, connection, cmd) { + if (cmd === 'battle') return this.sendReply("What?! How are you not more excited to battle?! Try /battle! to show me you're ready."); + if (!target) target = "randombattle"; + return this.parse(`/search ${target}`); + }, + + '!pi': true, + pi(target, room, user) { + return this.sendReplyBox( + 'Did you mean: 1. 3.1415926535897932384626... (Decimal)
    ' + + '2. 3.184809493B91866... (Duodecimal)
    ' + + '3. 3.243F6A8885A308D... (Hexadecimal)

    ' + + 'How many digits of pi do YOU know? Test it out here!'); + }, + + code(target, room, user) { + if (!target) return this.parse('/help code'); + if (!this.canTalk()) return; + if (target.startsWith('\n')) target = target.slice(1); + if (target.length >= 8192) return this.errorReply("Your code must be under 8192 characters long!"); + const separator = '\n'; + if (target.includes(separator) || target.length > 150) { + const params = target.split(separator); + let output = []; + for (const param of params) { + output.push(Chat.escapeHTML(param)); + } + let code = `
    ${output.join('
    ')}
    `; + if (output.length > 3) code = `
    See code...${code}
    `; + + if (!this.canBroadcast(true, '!code')) return; + if (this.broadcastMessage && !this.can('broadcast', null, room)) return false; + + if (!this.runBroadcast(true, '!code')) return; + + this.sendReplyBox(code); + } else { + return this.errorReply("You can simply use ``[code]`` for code messages that are only one line."); + } + }, + codehelp: [ + `!code [code] - Broadcasts code to a room. Accepts multi-line arguments. Requires: + % @ & # ~`, + `/code [code] - Shows you code. Accepts multi-line arguments.`, + ], + + '!avatar': true, + avatar(target, room, user) { + if (!target) return this.parse(`${this.cmdToken}avatars`); + let parts = target.split(','); + let avatar = parts[0].toLowerCase().replace(/[^a-z0-9-]+/g, ''); + if (!avatarTable.has(avatar)) { + let avatarNum = parseInt(avatar); + if (!avatarNum || avatarNum > 294 || avatarNum < 1) { + if (!parts[1]) { + this.errorReply("Invalid avatar."); + } + return false; + } + avatar = '' + avatarNum; + } + + user.avatar = avatar; + let avatarUrl = avatar.startsWith('#') ? `trainers-custom/${avatar.slice(1)}.png` : `trainers/${avatar}.png`; + if (!parts[1]) { + this.sendReply(`Avatar changed to:\n|raw|${avatar}`); + } + }, + avatarhelp: [`/avatar [avatar number 1 to 293] - Change your trainer sprite.`], + + '!logout': true, + signout: 'logout', + logout(target, room, user) { + user.resetName(); + }, + + r: 'reply', + reply(target, room, user) { + if (!target) return this.parse('/help reply'); + if (!user.lastPM) { + return this.errorReply("No one has PMed you yet."); + } + return this.parse(`/msg ${user.lastPM || ''}, ${target}`); + }, + replyhelp: [`/reply OR /r [message] - Send a private message to the last person you received a message from, or sent a message to.`], + + '!msg': true, + pm: 'msg', + whisper: 'msg', + w: 'msg', + msg(target, room, user, connection) { + if (!target) return this.parse('/help msg'); + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (this.targetUsername === '~') { + this.room = Rooms.global; + this.pmTarget = null; + } else if (!target) { + this.errorReply("You forgot the comma."); + return this.parse('/help msg'); + } else if (!targetUser) { + let error = `User ${this.targetUsername} not found. Did you misspell their name?`; + error = `|pm|${this.user.getIdentity()}| ${this.targetUsername}|/error ${error}`; + connection.send(error); + return; + } else { + this.pmTarget = targetUser; + this.room = undefined; + } + + if (targetUser && !targetUser.connected) { + return this.errorReply(`User ${this.targetUsername} is offline.`); + } + + this.parse(target); + }, + msghelp: [`/msg OR /whisper OR /w [username], [message] - Send a private message.`], + + '!invite': true, + inv: 'invite', + invite(target, room, user) { + if (!target) return this.parse('/help invite'); + if (!this.canTalk()) return; + if (room) target = this.splitTarget(target) || room.id; + let targetRoom = Rooms.search(target); + if (targetRoom && !targetRoom.checkModjoin(user)) { + targetRoom = undefined; + } + + if (room) { + if (!this.targetUser) return this.errorReply(`The user "${this.targetUsername}" was not found.`); + if (!targetRoom) return this.errorReply(`The room "${target}" was not found.`); + + return this.parse(`/pm ${this.targetUsername}, /invite ${targetRoom.id}`); + } + + let targetUser = this.pmTarget; + + if (!targetRoom || targetRoom === Rooms.global) return this.errorReply(`The room "${target}" was not found.`); + if (targetRoom.staffRoom && !targetUser.isStaff) return this.errorReply(`User "${targetUser.name}" requires global auth to join room "${targetRoom.id}".`); + if (!targetUser) return this.errorReply(`The user "${targetUser.name}" was not found.`); + + if (!targetRoom.checkModjoin(targetUser)) { + this.room = targetRoom; + this.parse(`/roomvoice ${targetUser.name}`); + if (!targetRoom.checkModjoin(targetUser)) { + return this.errorReply(`You do not have permission to invite people into this room.`); + } + } + if (targetUser in targetRoom.users) return this.errorReply(`This user is already in "${targetRoom.title}".`); + + return `/invite ${targetRoom.id}`; + }, + invitehelp: [ + `/invite [username] - Invites the player [username] to join the room you sent the command to.`, + `(in a PM) /invite [roomname] - Invites the player you're PMing to join the room [roomname].`, + ], + + pminfobox(target, room, user, connection) { + if (!this.canTalk()) return; + if (!this.can('addhtml', null, room)) return false; + if (!target) return this.parse("/help pminfobox"); + + target = this.canHTML(this.splitTarget(target)); + if (!target) return; + let targetUser = this.targetUser; + + if (!targetUser || !targetUser.connected) return this.errorReply(`User ${this.targetUsername} is not currently online.`); + if (!(targetUser in room.users) && !user.can('addhtml')) return this.errorReply("You do not have permission to use this command to users who are not in this room."); + if (targetUser.ignorePMs && targetUser.ignorePMs !== user.group && !user.can('lock')) return this.errorReply("This user is currently ignoring PMs."); + if (targetUser.locked && !user.can('lock')) return this.errorReply("This user is currently locked, so you cannot send them a pminfobox."); + + // Apply the infobox to the message + target = `/raw
    ${target}
    `; + let message = `|pm|${user.getIdentity()}|${targetUser.getIdentity()}|${target}`; + + user.send(message); + if (targetUser !== user) targetUser.send(message); + targetUser.lastPM = user.userid; + user.lastPM = targetUser.userid; + }, + pminfoboxhelp: [`/pminfobox [user], [html]- PMs an [html] infobox to [user]. Requires * ~`], + + pmuhtmlchange: 'pmuhtml', + pmuhtml(target, room, user, connection, cmd) { + if (!this.canTalk()) return; + if (!this.can('addhtml', null, room)) return false; + if (!target) return this.parse("/help " + cmd); + + target = this.canHTML(this.splitTarget(target)); + if (!target) return; + let targetUser = this.targetUser; + + if (!targetUser || !targetUser.connected) return this.errorReply(`User ${this.targetUsername} is not currently online.`); + if (!(targetUser in room.users) && !user.can('addhtml')) return this.errorReply("You do not have permission to use this command to users who are not in this room."); + if (targetUser.ignorePMs && targetUser.ignorePMs !== user.group && !user.can('lock')) return this.errorReply("This user is currently ignoring PMs."); + if (targetUser.locked && !user.can('lock')) return this.errorReply("This user is currently locked, so you cannot send them UHTML."); + + let message = `|pm|${user.getIdentity()}|${targetUser.getIdentity()}|/uhtml${(cmd === 'pmuhtmlchange' ? 'change' : '')} ${target}`; + + user.send(message); + if (targetUser !== user) targetUser.send(message); + targetUser.lastPM = user.userid; + user.lastPM = targetUser.userid; + }, + 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 * ~`], + + '!ignorepms': true, + blockpm: 'ignorepms', + blockpms: 'ignorepms', + ignorepm: 'ignorepms', + ignorepms(target, room, user) { + if (user.ignorePMs === (target || true)) return this.errorReply("You are already blocking private messages! To unblock, use /unblockpms"); + user.ignorePMs = true; + if (target in Config.groups) { + user.ignorePMs = target; + return this.sendReply(`You are now blocking private messages, except from staff and ${target}.`); + } + return this.sendReply("You are now blocking private messages, except from staff."); + }, + ignorepmshelp: [`/blockpms - Blocks private messages. Unblock them with /unignorepms.`], + + '!unignorepms': true, + unblockpm: 'unignorepms', + unblockpms: 'unignorepms', + unignorepm: 'unignorepms', + unignorepms(target, room, user) { + if (!user.ignorePMs) return this.errorReply("You are not blocking private messages! To block, use /blockpms"); + user.ignorePMs = false; + return this.sendReply("You are no longer blocking private messages."); + }, + unignorepmshelp: [`/unblockpms - Unblocks private messages. Block them with /blockpms.`], + + '!away': true, + idle: 'away', + afk: 'away', + away(target, room, user) { + this.parse('/blockchallenges'); + this.parse(`/blockpms ${target}`); + }, + awayhelp: [`/away - Blocks challenges and private messages. Unblock them with /back.`], + + '!back': true, + unaway: 'back', + unafk: 'back', + back() { + this.parse('/unblockpms'); + this.parse('/unblockchallenges'); + }, + backhelp: [`/back - Unblocks challenges and/or private messages, if either are blocked.`], + + '!rank': true, + rank(target, room, user) { + if (!target) target = user.name; + + Ladders.visualizeAll(target).then(values => { + let buffer = `
    ` + ['', 'Username', 'Elo', 'W', 'L', 'T'].join(``) + `
    ` + [ - i + 1, row[2], `${Math.round(row[1])}`, row[3], row[4], row[5], - ].join(``) + `
    ${this.formatid}${Math.round(ratings[1])}${ratings[3]}${ratings[4]}${ratings[3] + ratings[4]}
    `; + buffer += ``; + + let ratings = values.join(``); + if (!ratings) { + buffer += ``; + } else { + buffer += ``; + buffer += ratings; + } + buffer += `
    User: ${Chat.escapeHTML(target)}
    This user has not played any ladder games yet.
    FormatEloWLTotal
    `; + + this.sendReply(`|raw|${buffer}`); + }); + }, + + makeprivatechatroom: 'makechatroom', + makechatroom(target, room, user, connection, cmd) { + if (!this.can('makeroom')) return; + + // `,` is a delimiter used by a lot of /commands + // `|` and `[` are delimiters used by the protocol + // `-` has special meaning in roomids + if (target.includes(',') || target.includes('|') || target.includes('[') || target.includes('-')) { + return this.errorReply("Room titles can't contain any of: ,|[-"); + } + + let id = toId(target); + if (!id) return this.parse('/help makechatroom'); + if (id.length > MAX_CHATROOM_ID_LENGTH) return this.errorReply("The given room title is too long."); + // Check if the name already exists as a room or alias + if (Rooms.search(id)) return this.errorReply(`The room '${target}' already exists.`); + if (!Rooms.global.addChatRoom(target)) return this.errorReply(`An error occurred while trying to create the room '${target}'.`); + + if (cmd === 'makeprivatechatroom') { + let targetRoom = Rooms.search(target); + targetRoom.isPrivate = true; + targetRoom.chatRoomData.isPrivate = true; + Rooms.global.writeChatRoomData(); + if (Rooms.get('upperstaff')) { + Rooms.get('upperstaff').add(`|raw|
    Private chat room created: ${Chat.escapeHTML(target)}
    `).update(); + } + this.sendReply(`The private chat room '${target}' was created.`); + } else { + if (Rooms.get('staff')) { + Rooms.get('staff').add(`|raw|
    Public chat room created: ${Chat.escapeHTML(target)}
    `).update(); + } + if (Rooms.get('upperstaff')) { + Rooms.get('upperstaff').add(`|raw|
    Public chat room created: ${Chat.escapeHTML(target)}
    `).update(); + } + this.sendReply(`The chat room '${target}' was created.`); + } + }, + makechatroomhelp: [`/makechatroom [roomname] - Creates a new room named [roomname]. Requires: & ~`], + + subroomgroupchat: 'makegroupchat', + makegroupchat(target, room, user, connection, cmd) { + if (!this.canTalk()) return; + if (!user.autoconfirmed) { + return this.errorReply("You must be autoconfirmed to make a groupchat."); + } + if (cmd === 'subroomgroupchat') { + if (!user.can('mute', null, room)) return this.errorReply("You can only create subroom groupchats for rooms you're staff in."); + if (room.battle) return this.errorReply("You cannot create a subroom of a battle."); + if (room.isPersonal) return this.errorReply("You cannot create a subroom of a groupchat."); + } + let parent = cmd === 'subroomgroupchat' ? room.id : null; + // if (!this.can('makegroupchat')) return false; + + // Title defaults to a random 8-digit number. + let title = target.trim(); + if (title.length >= 32) { + return this.errorReply("Title must be under 32 characters long."); + } else if (!title) { + title = (`${Math.floor(Math.random() * 100000000)}`); + } else if (Config.chatfilter) { + let filterResult = Config.chatfilter.call(this, title, user, null, connection); + if (!filterResult) return; + if (title !== filterResult) { + return this.errorReply("Invalid title."); + } + } + // `,` is a delimiter used by a lot of /commands + // `|` and `[` are delimiters used by the protocol + // `-` has special meaning in roomids + if (title.includes(',') || title.includes('|') || title.includes('[') || title.includes('-')) { + return this.errorReply("Room titles can't contain any of: ,|[-"); + } + + // Even though they're different namespaces, to cut down on confusion, you + // can't share names with registered chatrooms. + let existingRoom = Rooms.search(toId(title)); + if (existingRoom && !existingRoom.modjoin) return this.errorReply(`The room '${title}' already exists.`); + // Room IDs for groupchats are groupchat-TITLEID + let titleid = toId(title); + if (!titleid) { + titleid = `${Math.floor(Math.random() * 100000000)}`; + } + let roomid = `groupchat-${parent || user.userid}-${titleid}`; + // Titles must be unique. + if (Rooms.search(roomid)) return this.errorReply(`A group chat named '${title}' already exists.`); + // Tab title is prefixed with '[G]' to distinguish groupchats from + // registered chatrooms + + if (Monitor.countGroupChat(connection.ip)) { + this.errorReply("Due to high load, you are limited to creating 4 group chats every hour."); + return; + } + + let titleMsg = Chat.html `Welcome to ${parent ? room.title : user.name}'s${!/^[0-9]+$/.test(title) ? ` ${title}` : ''}${parent ? ' subroom' : ''} groupchat!`; + let targetRoom = Rooms.createChatRoom(roomid, `[G] ${title}`, { + isPersonal: true, + isPrivate: 'hidden', + modjoin: parent ? null : '+', + parentid: parent, + auth: {}, + introMessage: `

    ${titleMsg}

    Follow the Pokémon Showdown Global Rules!
    Don't be disruptive to the rest of the site.

    `, + staffMessage: `

    Groupchats are temporary rooms, and will expire if there hasn't been any activity in 40 minutes.

    You can invite new users using /invite. Be careful with who you invite!

    Commands: |

    As creator of this groupchat, you are entirely responsible for what occurs in this chatroom. Global rules apply at all times.

    If this room is used to break global rules or disrupt other areas of the server, you as the creator will be held accountable and punished.

    `, + }); + if (targetRoom) { + // The creator is a Room Owner in subroom groupchats and a Host otherwise.. + targetRoom.auth[user.userid] = parent ? '#' : Users.HOST_SYMBOL; + // Join after creating room. No other response is given. + user.joinRoom(targetRoom.id); + user.popup(`You've just made a groupchat; it is now your responsibility, regardless of whether or not you actively partake in the room. For more info, read your groupchat's staff intro.`); + if (parent) this.modlog('SUBROOMGROUPCHAT', null, title); + return; + } + return this.errorReply(`An unknown error occurred while trying to create the room '${title}'.`); + }, + makegroupchathelp: [ + `/makegroupchat [roomname] - Creates an invite-only group chat named [roomname].`, + `/subroomgroupchat [roomname] - Creates a subroom groupchat of the current room. Can only be used in a public room you have staff in.`, + ], + + deregisterchatroom(target, room, user) { + if (!this.can('makeroom')) return; + this.errorReply("NOTE: You probably want to use `/deleteroom` now that it exists."); + let id = toId(target); + if (!id) return this.parse('/help deregisterchatroom'); + let targetRoom = Rooms.search(id); + if (!targetRoom) return this.errorReply(`The room '${target}' doesn't exist.`); + target = targetRoom.title || targetRoom.id; + const isPrivate = targetRoom.isPrivate; + const staffRoom = Rooms('staff'); + const upperStaffRoom = Rooms('upperstaff'); + if (Rooms.global.deregisterChatRoom(id)) { + this.sendReply(`The room '${target}' was deregistered.`); + this.sendReply("It will be deleted as of the next server restart."); + target = Chat.escapeHTML(target); + if (isPrivate) { + if (upperStaffRoom) upperStaffRoom.add(`|raw|
    Private chat room deregistered by ${user.userid}: ${target}
    `).update(); + } else { + if (staffRoom) staffRoom.add(`|raw|
    Public chat room deregistered: ${target}
    `).update(); + if (upperStaffRoom) upperStaffRoom.add(`|raw|
    Public chat room deregistered by ${user.userid}: ${target}
    `).update(); + } + return; + } + return this.errorReply(`The room "${target}" isn't registered.`); + }, + deregisterchatroomhelp: [`/deregisterchatroom [roomname] - Deletes room [roomname] after the next server restart. Requires: & ~`], + + deletechatroom: 'deleteroom', + deletegroupchat: 'deleteroom', + deleteroom(target, room, user, connection, cmd) { + let roomid = target.trim(); + if (!roomid) { + // allow deleting personal rooms without typing out the room name + if (!room.isPersonal || cmd !== "deletegroupchat") { + return this.parse(`/help deleteroom`); + } + } else { + let targetRoom = Rooms.search(roomid); + if (targetRoom !== room) { + return this.parse(`/help deleteroom`); + } + } + + if (room.isPersonal) { + if (!this.can('gamemanagement', null, room)) return; + } else { + if (!this.can('makeroom')) return; + } + + const title = room.title || room.id; + + if (room.id === 'global') { + return this.errorReply(`This room can't be deleted.`); + } + + if (room.chatRoomData) { + if (room.isPrivate) { + if (Rooms.get('upperstaff')) { + Rooms.get('upperstaff').add(Chat.html`|raw|
    Private chat room deleted by ${user.userid}: ${title}
    `).update(); + } + } else { + if (Rooms.get('staff')) { + Rooms.get('staff').add(Chat.html`|raw|
    Public chat room deleted: ${title}
    `).update(); + } + if (Rooms.get('upperstaff')) { + Rooms.get('upperstaff').add(Chat.html`|raw|
    Public chat room deleted by ${user.userid}: ${title}
    `).update(); + } + } + } + + if (room.subRooms) { + for (const subRoom of room.subRooms.values()) subRoom.parent = null; + } + + room.add(`|raw|
    This room has been deleted.
    `); + room.update(); // |expire| needs to be its own message + room.add(`|expire|This room has been deleted.`); + this.sendReply(`The room "${title}" was deleted.`); + room.update(); + 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: ★ # & ~`, + ], + + hideroom: 'privateroom', + hiddenroom: 'privateroom', + secretroom: 'privateroom', + publicroom: 'privateroom', + privateroom(target, room, user, connection, cmd) { + if (room.isPersonal) { + if (!this.can('editroom', null, room)) return; + } else if (room.battle) { + if (!this.can('editprivacy', null, room)) return; + } else { + // registered chatrooms show up on the room list and so require + // higher permissions to modify privacy settings + if (!this.can('makeroom')) return; + } + let setting; + switch (cmd) { + case 'privateroom': + return this.parse('/help privateroom'); + case 'publicroom': + setting = false; + break; + case 'secretroom': + setting = true; + break; + default: + if (room.isPrivate === true && target !== 'force') { + return this.sendReply(`This room is a secret room. Use "/publicroom" to make it public, or "/hiddenroom force" to force it hidden.`); + } + setting = 'hidden'; + break; + } + + if ((setting === true || room.isPrivate === true) && !room.isPersonal) { + if (!this.can('makeroom')) return; + } + + if (this.meansNo(target) || !setting) { + if (!room.isPrivate) { + return this.errorReply(`This room is already public.`); + } + if (room.isPersonal) return this.errorReply(`This room can't be made public.`); + if (room.privacySetter && user.can('nooverride', null, room) && !user.can('makeroom')) { + if (!room.privacySetter.has(user.userid)) { + const privacySetters = [...room.privacySetter].join(', '); + return this.errorReply(`You can't make the room public since you didn't make it private - only ${privacySetters} can.`); + } + room.privacySetter.delete(user.userid); + if (room.privacySetter.size) { + const privacySetters = [...room.privacySetter].join(', '); + return this.sendReply(`You are no longer forcing the room to stay private, but ${privacySetters} also need${Chat.plural(room.privacySetter, "", "s")} to use /publicroom to make the room public.`); + } + } + delete room.isPrivate; + room.privacySetter = null; + this.addModAction(`${user.name} made this room public.`); + this.modlog('PUBLICROOM'); + if (room.chatRoomData) { + delete room.chatRoomData.isPrivate; + Rooms.global.writeChatRoomData(); + } + } else { + const settingName = (setting === true ? 'secret' : setting); + if (room.subRooms) return this.errorReply("Private rooms cannot have subrooms."); + if (room.isPrivate === setting) { + if (room.privacySetter && !room.privacySetter.has(user.userid)) { + room.privacySetter.add(user.userid); + return this.sendReply(`This room is already ${settingName}, but is now forced to stay that way until you use /publicroom.`); + } + return this.errorReply(`This room is already ${settingName}.`); + } + room.isPrivate = setting; + this.addModAction(`${user.name} made this room ${settingName}.`); + this.modlog(`${settingName.toUpperCase()}ROOM`); + if (room.chatRoomData) { + room.chatRoomData.isPrivate = setting; + Rooms.global.writeChatRoomData(); + } + room.privacySetter = new Set([user.userid]); + } + }, + 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 & ~`, + ], + + officialchatroom: 'officialroom', + officialroom(target, room, user) { + if (!this.can('makeroom')) return; + if (!room.chatRoomData) { + return this.errorReply(`/officialroom - This room can't be made official`); + } + if (this.meansNo(target)) { + if (!room.isOfficial) return this.errorReply(`This chat room is already unofficial.`); + delete room.isOfficial; + this.addModAction(`${user.name} made this chat room unofficial.`); + this.modlog('UNOFFICIALROOM'); + delete room.chatRoomData.isOfficial; + Rooms.global.writeChatRoomData(); + } else { + if (room.isOfficial) return this.errorReply(`This chat room is already official.`); + room.isOfficial = true; + this.addModAction(`${user.name} made this chat room official.`); + this.modlog('OFFICIALROOM'); + room.chatRoomData.isOfficial = true; + Rooms.global.writeChatRoomData(); + } + }, + + psplwinnerroom(target, room, user) { + if (!this.can('makeroom')) return; + if (!room.chatRoomData) { + return this.errorReply(`/psplwinnerroom - This room can't be marked as a PSPL Winner room`); + } + if (this.meansNo(target)) { + if (!room.pspl) return this.errorReply(`This chat room is already not a PSPL Winner room.`); + delete room.pspl; + this.addModAction(`${user.name} made this chat room no longer a PSPL Winner room.`); + this.modlog('PSPLROOM'); + delete room.chatRoomData.pspl; + Rooms.global.writeChatRoomData(); + } else { + if (room.pspl) return this.errorReply("This chat room is already a PSPL Winner room."); + room.pspl = true; + this.addModAction(`${user.name} made this chat room a PSPL Winner room.`); + this.modlog('UNPSPLROOM'); + room.chatRoomData.pspl = true; + Rooms.global.writeChatRoomData(); + } + }, + + setsubroom: 'subroom', + subroom(target, room, user) { + if (!user.can('makeroom')) return this.errorReply(`/subroom - Access denied. Did you mean /subrooms?`); + if (!target) return this.parse('/help subroom'); + + if (!room.chatRoomData) return this.errorReply(`Temporary rooms cannot be subrooms.`); + if (room.parent) return this.errorReply(`This room is already a subroom. To change which room this subroom belongs to, remove the subroom first.`); + if (room.subRooms) return this.errorReply(`This room is already a parent room, and a parent room cannot be made as a subroom.`); + + const main = Rooms.search(target); + + if (!main) return this.errorReply(`The room '${target}' does not exist.`); + if (main.isPrivate || !main.chatRoomData) return this.errorReply(`Only public rooms can have subrooms.`); + if (room === main) return this.errorReply(`You cannot set a room to be a subroom of itself.`); + + room.parent = main; + if (!main.subRooms) main.subRooms = new Map(); + main.subRooms.set(room.id, room); + + const mainIdx = Rooms.global.chatRoomDataList.findIndex(r => r.title === main.title); + const subIdx = Rooms.global.chatRoomDataList.findIndex(r => r.title === room.title); + + // This is needed to ensure that the main room gets loaded before the subroom. + if (mainIdx > subIdx) { + const tmp = Rooms.global.chatRoomDataList[mainIdx]; + Rooms.global.chatRoomDataList[mainIdx] = Rooms.global.chatRoomDataList[subIdx]; + Rooms.global.chatRoomDataList[subIdx] = tmp; + } + + room.chatRoomData.parentid = main.id; + Rooms.global.writeChatRoomData(); + + for (let userid in room.users) { + room.users[userid].updateIdentity(room.id); + } + + this.modlog('SUBROOM', null, `of ${main.title}`); + return this.addModAction(`This room was set as a subroom of ${main.title} by ${user.name}.`); + }, + + removesubroom: 'unsubroom', + desubroom: 'unsubroom', + unsubroom(target, room, user) { + if (!this.can('makeroom')) return; + if (!room.parent || !room.chatRoomData) return this.errorReply(`This room is not currently a subroom of a public room.`); + + const parent = room.parent; + if (parent && parent.subRooms) { + parent.subRooms.delete(room.id); + if (!parent.subRooms.size) parent.subRooms = null; + } + + room.parent = null; + + delete room.chatRoomData.parentid; + Rooms.global.writeChatRoomData(); + + for (let userid in room.users) { + room.users[userid].updateIdentity(room.id); + } + + this.modlog('UNSUBROOM'); + return this.addModAction(`This room was unset as a subroom by ${user.name}.`); + }, + + parentroom: 'subrooms', + subrooms(target, room, user, connection, cmd) { + if (cmd === 'parentroom') { + if (!room.parent) return this.errorReply(`This room is not a subroom.`); + return this.sendReply(`This is a subroom of ${room.parent.title}.`); + } + if (!room.chatRoomData) return this.errorReply(`Temporary rooms cannot have subrooms.`); + + if (!this.runBroadcast()) return; + + const showSecret = !this.broadcasting && user.can('mute', null, room); + + const subRooms = room.getSubRooms(showSecret); + + if (!subRooms.length) return this.sendReply(`This room doesn't have any subrooms.`); + + const subRoomText = subRooms.map(room => Chat.html`${room.title}
    ${room.desc}`); + + return this.sendReplyBox(`

    ${Chat.escapeHTML(room.title)}'s subroom${Chat.plural(subRooms)}:

    • ${subRoomText.join('

    • ')}
    `); + }, + + subroomhelp: [ + `/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.`, + ], + + roomdesc(target, room, user) { + if (!target) { + if (!this.runBroadcast()) return; + if (!room.desc) return this.sendReply(`This room does not have a description set.`); + this.sendReplyBox(Chat.html`The room description is: ${room.desc}`); + return; + } + if (!this.can('declare')) return false; + if (target.length > 80) return this.errorReply(`Error: Room description is too long (must be at most 80 characters).`); + let normalizedTarget = ' ' + target.toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim() + ' '; + + if (normalizedTarget.includes(' welcome ')) { + return this.errorReply(`Error: Room description must not contain the word "welcome".`); + } + if (normalizedTarget.slice(0, 9) === ' discuss ') { + return this.errorReply(`Error: Room description must not start with the word "discuss".`); + } + if (normalizedTarget.slice(0, 12) === ' talk about ' || normalizedTarget.slice(0, 17) === ' talk here about ') { + return this.errorReply(`Error: Room description must not start with the phrase "talk about".`); + } + + room.desc = target; + this.sendReply(`(The room description is now: ${target})`); + + this.privateModAction(`(${user.name} changed the roomdesc to: "${target}".)`); + this.modlog('ROOMDESC', null, `to "${target}"`); + + if (room.chatRoomData) { + room.chatRoomData.desc = room.desc; + Rooms.global.writeChatRoomData(); + } + }, + + topic: 'roomintro', + roomintro(target, room, user, connection, cmd) { + if (!target) { + if (!this.runBroadcast()) return; + if (!room.introMessage) return this.sendReply("This room does not have an introduction set."); + this.sendReply('|raw|
    ' + room.introMessage.replace(/\n/g, '') + '
    '); + if (!this.broadcasting && user.can('declare', null, room) && cmd !== 'topic') { + this.sendReply('Source:'); + const code = Chat.escapeHTML(room.introMessage).replace(/\n/g, '
    '); + this.sendReplyBox(`/roomintro ${code}`); + } + return; + } + if (!this.can('editroom', null, room)) return false; + if (this.meansNo(target) || target === 'delete') return this.errorReply('Did you mean "/deleteroomintro"?'); + target = this.canHTML(target); + if (!target) return; + if (!/$1'); + } + if (target.substr(0, 11) === '/roomintro ') target = target.substr(11); + + room.introMessage = target.replace(/\r/g, ''); + this.sendReply("(The room introduction has been changed to:)"); + this.sendReply(`|raw|
    ${room.introMessage.replace(/\n/g, '')}
    `); + + this.privateModAction(`(${user.name} changed the roomintro.)`); + this.modlog('ROOMINTRO'); + this.roomlog(room.introMessage.replace(/\n/g, '')); + + if (room.chatRoomData) { + room.chatRoomData.introMessage = room.introMessage; + Rooms.global.writeChatRoomData(); + } + }, + + deletetopic: 'deleteroomintro', + deleteroomintro(target, room, user) { + if (!this.can('declare', null, room)) return false; + if (!room.introMessage) return this.errorReply("This room does not have a introduction set."); + + this.privateModAction(`(${user.name} deleted the roomintro.)`); + this.modlog('DELETEROOMINTRO'); + this.roomlog(target); + + delete room.introMessage; + if (room.chatRoomData) { + delete room.chatRoomData.introMessage; + Rooms.global.writeChatRoomData(); + } + }, + + stafftopic: 'staffintro', + staffintro(target, room, user, connection, cmd) { + if (!target) { + if (!this.can('mute', null, room)) return false; + if (!room.staffMessage) return this.sendReply("This room does not have a staff introduction set."); + this.sendReply(`|raw|
    ${room.staffMessage.replace(/\n/g, ``)}
    `); + if (user.can('ban', null, room) && cmd !== 'stafftopic') { + this.sendReply('Source:'); + const code = Chat.escapeHTML(room.staffMessage).replace(/\n/g, '
    '); + this.sendReplyBox(`/staffintro ${code}`); + } + return; + } + if (!this.can('ban', null, room)) return false; + if (!this.canTalk()) return; + if (this.meansNo(target) || target === 'delete') return this.errorReply('Did you mean "/deletestaffintro"?'); + target = this.canHTML(target); + if (!target) return; + if (!/$1'); + } + if (target.substr(0, 12) === '/staffintro ') target = target.substr(12); + + room.staffMessage = target.replace(/\r/g, ''); + this.sendReply("(The staff introduction has been changed to:)"); + this.sendReply(`|raw|
    ${target.replace(/\n/g, ``)}
    `); + + this.privateModAction(`(${user.name} changed the staffintro.)`); + this.modlog('STAFFINTRO'); + this.roomlog(room.staffMessage.replace(/\n/g, ``)); + + if (room.chatRoomData) { + room.chatRoomData.staffMessage = room.staffMessage; + Rooms.global.writeChatRoomData(); + } + }, + + deletestafftopic: 'deletestaffintro', + deletestaffintro(target, room, user) { + if (!this.can('ban', null, room)) return false; + if (!room.staffMessage) return this.errorReply("This room does not have a staff introduction set."); + + this.privateModAction(`(${user.name} deleted the staffintro.)`); + this.modlog('DELETESTAFFINTRO'); + this.roomlog(target); + + delete room.staffMessage; + if (room.chatRoomData) { + delete room.chatRoomData.staffMessage; + Rooms.global.writeChatRoomData(); + } + }, + + roomalias(target, room, user) { + if (!target) { + if (!this.runBroadcast()) return; + if (!room.aliases || !room.aliases.length) return this.sendReplyBox("This room does not have any aliases."); + return this.sendReplyBox(`This room has the following aliases: ${room.aliases.join(", ")}`); + } + if (!this.can('makeroom')) return false; + if (target.includes(',')) { + this.errorReply(`Invalid room alias: ${target.trim()}`); + return this.parse('/help roomalias'); + } + + let alias = toId(target); + if (!alias.length) return this.errorReply("Only alphanumeric characters are valid in an alias."); + if (Rooms(alias) || Rooms.aliases.has(alias)) return this.errorReply("You cannot set an alias to an existing room or alias."); + if (room.isPersonal) return this.errorReply("Personal rooms can't have aliases."); + + Rooms.aliases.set(alias, room.id); + this.privateModAction(`(${user.name} added the room alias '${alias}'.)`); + this.modlog('ROOMALIAS', null, alias); + + if (!room.aliases) room.aliases = []; + room.aliases.push(alias); + if (room.chatRoomData) { + room.chatRoomData.aliases = room.aliases; + Rooms.global.writeChatRoomData(); + } + }, + 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: & ~`, + ], + + deleteroomalias: 'removeroomalias', + deroomalias: 'removeroomalias', + unroomalias: 'removeroomalias', + removeroomalias(target, room, user) { + if (!room.aliases) return this.errorReply("This room does not have any aliases."); + if (!this.can('makeroom')) return false; + if (target.includes(',')) { + this.errorReply(`Invalid room alias: ${target.trim()}`); + return this.parse('/help removeroomalias'); + } + + let alias = toId(target); + if (!alias || !Rooms.aliases.has(alias)) return this.errorReply("Please specify an existing alias."); + if (Rooms.aliases.get(alias) !== room.id) return this.errorReply("You may only remove an alias from the current room."); + + this.privateModAction(`(${user.name} removed the room alias '${alias}'.)`); + this.modlog('REMOVEALIAS', null, alias); + + let aliasIndex = room.aliases.indexOf(alias); + if (aliasIndex >= 0) { + room.aliases.splice(aliasIndex, 1); + Rooms.aliases.delete(alias); + Rooms.global.writeChatRoomData(); + } + }, + removeroomaliashelp: [`/removeroomalias [alias] - removes the given room alias of the room the command was entered in. Requires: & ~`], + + roomowner(target, room, user) { + if (!room.chatRoomData) { + return this.sendReply("/roomowner - This room isn't designed for per-room moderation to be added"); + } + if (!target) return this.parse('/help roomowner'); + target = this.splitTarget(target, true); + if (target) return this.errorReply(`This command does not support specifying a reason.`); + let targetUser = this.targetUser; + let name = this.targetUsername; + let userid = toId(name); + + if (!Users.isUsernameKnown(userid)) { + return this.errorReply(`User '${this.targetUsername}' is offline and unrecognized, and so can't be promoted.`); + } + + if (!this.can('makeroom')) return false; + + if (!room.auth) room.auth = room.chatRoomData.auth = {}; + + room.auth[userid] = '#'; + this.addModAction(`${name} was appointed Room Owner by ${user.name}.`); + this.modlog('ROOMOWNER', userid); + if (targetUser) { + targetUser.popup(`You were appointed Room Owner by ${user.name} in ${room.id}.`); + room.onUpdateIdentity(targetUser); + if (room.subRooms) { + for (const subRoom of room.subRooms.values()) { + subRoom.onUpdateIdentity(targetUser); + } + } + } + Rooms.global.writeChatRoomData(); + }, + roomownerhelp: [`/roomowner [username] - Appoints [username] as a room owner. Requires: & ~`], + + '!roompromote': true, + roomdemote: 'roompromote', + roompromote(target, room, user, connection, cmd) { + if (!room) { + // this command isn't marked as room-only because it's usable in PMs through /invite + return this.errorReply("This command is only available in rooms"); + } + if (!room.auth) { + this.sendReply("/roompromote - This room isn't designed for per-room moderation."); + return this.sendReply("Before setting room staff, you need to set a room owner with /roomowner"); + } + if (!this.canTalk()) return; + if (!target) return this.parse('/help roompromote'); + + const force = target.startsWith('!!!'); + if (force) target = target.slice(3); + target = this.splitTarget(target, true); + let targetUser = this.targetUser; + let userid = toId(this.targetUsername); + let name = targetUser ? targetUser.name : this.targetUsername; + + if (!userid) return this.parse('/help roompromote'); + if (!targetUser && !Users.isUsernameKnown(userid) && !force) { + return this.errorReply(`User '${name}' is offline and unrecognized, and so can't be promoted.`); + } + if (targetUser && !targetUser.registered) { + return this.errorReply(`User '${name}' is unregistered, and so can't be promoted.`); + } + + let currentGroup = room.getAuth({userid, group: (Users.usergroups[userid] || ' ').charAt(0)}); + let nextGroup = target; + if (target === 'deauth') nextGroup = Config.groupsranking[0]; + if (!nextGroup) { + return this.errorReply("Please specify a group such as /roomvoice or /roomdeauth"); + } + if (!Config.groups[nextGroup]) { + return this.errorReply(`Group '${nextGroup}' does not exist.`); + } + + if (Config.groups[nextGroup].globalonly || (Config.groups[nextGroup].battleonly && !room.battle)) { + return this.errorReply(`Group 'room${Config.groups[nextGroup].id}' does not exist as a room rank.`); + } + + let groupName = Config.groups[nextGroup].name || "regular user"; + if ((room.auth[userid] || Config.groupsranking[0]) === nextGroup) { + return this.errorReply(`User '${name}' is already a ${groupName} in this room.`); + } + if (!user.can('makeroom')) { + if (currentGroup !== ' ' && !user.can('room' + (Config.groups[currentGroup] ? Config.groups[currentGroup].id : 'voice'), null, room)) { + return this.errorReply(`/${cmd} - Access denied for promoting/demoting from ${(Config.groups[currentGroup] ? Config.groups[currentGroup].name : "an undefined group")}.`); + } + if (nextGroup !== ' ' && !user.can('room' + Config.groups[nextGroup].id, null, room)) { + return this.errorReply(`/${cmd} - Access denied for promoting/demoting to ${Config.groups[nextGroup].name}.`); + } + } + let nextGroupIndex = Config.groupsranking.indexOf(nextGroup) || 1; // assume voice if not defined (although it should be by now) + if (targetUser && targetUser.locked && !room.isPrivate && !room.battle && !room.isPersonal && nextGroupIndex >= 2) { + return this.errorReply("Locked users can't be promoted."); + } + + if (nextGroup === Config.groupsranking[0]) { + delete room.auth[userid]; + } else { + room.auth[userid] = nextGroup; + } + + // Only show popup if: user is online and in the room, the room is public, and not a groupchat or a battle. + let needsPopup = targetUser && room.users[targetUser.userid] && !room.isPrivate && !room.isPersonal && !room.battle; + + if (this.pmTarget && targetUser) { + const text = `${targetUser.name} was invited (and promoted to Room ${groupName}) by ${user.name}.`; + room.add(`|c|${user.getIdentity(room)}|/log ${text}`).update(); + this.modlog('INVITE', targetUser, null, {noip: 1, noalts: 1}); + } else if (nextGroup in Config.groups && currentGroup in Config.groups && Config.groups[nextGroup].rank < Config.groups[currentGroup].rank) { + if (targetUser && room.users[targetUser.userid] && !Config.groups[nextGroup].modlog) { + // if the user can't see the demotion message (i.e. rank < %), it is shown in the chat + targetUser.send(`>${room.id}\n(You were demoted to Room ${groupName} by ${user.name}.)`); + } + this.privateModAction(`(${name} was demoted to Room ${groupName} by ${user.name}.)`); + this.modlog(`ROOM${groupName.toUpperCase()}`, userid, '(demote)'); + if (needsPopup) targetUser.popup(`You were demoted to Room ${groupName} by ${user.name} in ${room.id}.`); + } else if (nextGroup === '#') { + this.addModAction(`${'' + name} was promoted to ${groupName} by ${user.name}.`); + this.modlog('ROOM OWNER', userid); + if (needsPopup) targetUser.popup(`You were promoted to ${groupName} by ${user.name} in ${room.id}.`); + } else { + this.addModAction(`${'' + name} was promoted to Room ${groupName} by ${user.name}.`); + this.modlog(`ROOM${groupName.toUpperCase()}`, userid); + if (needsPopup) targetUser.popup(`You were promoted to Room ${groupName} by ${user.name} in ${room.id}.`); + } + + if (targetUser) { + targetUser.updateIdentity(room.id); + if (room.subRooms) { + for (const subRoom of room.subRooms.values()) { + targetUser.updateIdentity(subRoom.id); + } + } + } + if (room.chatRoomData) Rooms.global.writeChatRoomData(); + }, + roompromotehelp: [ + `/roompromote OR /roomdemote [username], [group symbol] - Promotes/demotes the user to the specified room rank. Requires: @ # & ~`, + `/room[group] [username] - Promotes/demotes the user to the specified room rank. Requires: @ # & ~`, + `/roomdeauth [username] - Removes all room rank from the user. Requires: @ # & ~`, + ], + + '!roomauth': true, + roomstaff: 'roomauth', + roomauth1: 'roomauth', + roomauth(target, room, user, connection, cmd) { + let userLookup = ''; + if (cmd === 'roomauth1') userLookup = `\n\nTo look up auth for a user, use /userauth ${target}`; + let targetRoom = room; + if (target) targetRoom = Rooms.search(target); + if (!targetRoom || targetRoom.id === 'global' || !targetRoom.checkModjoin(user)) return this.errorReply(`The room "${target}" does not exist.`); + if (!targetRoom.auth) return this.sendReply(`/roomauth - The room '${targetRoom.title || target}' isn't designed for per-room moderation and therefore has no auth list.${userLookup}`); + + let rankLists = {}; + for (let u in targetRoom.auth) { + if (!rankLists[targetRoom.auth[u]]) rankLists[targetRoom.auth[u]] = []; + rankLists[targetRoom.auth[u]].push(u); + } + + let buffer = Object.keys(rankLists).sort((a, b) => + (Config.groups[b] || {rank: 0}).rank - (Config.groups[a] || {rank: 0}).rank + ).map(r => { + let roomRankList = rankLists[r].sort(); + roomRankList = roomRankList.map(s => s in targetRoom.users ? `**${s}**` : s); + return `${Config.groups[r] ? `${Config.groups[r].name}s (${r})` : r}:\n${roomRankList.join(", ")}`; + }); + + if (!buffer.length) { + connection.popup(`The room '${targetRoom.title}' has no auth. ${userLookup}`); + return; + } + let curRoom = targetRoom; + while (curRoom.parent) { + const modjoinSetting = curRoom.modjoin === true ? curRoom.modchat : curRoom.modjoin; + const roomType = (modjoinSetting ? `modjoin ${modjoinSetting} ` : ''); + const inheritedUserType = (modjoinSetting ? ` of rank ${modjoinSetting} and above` : ''); + if (curRoom.parent) { + buffer.push(`${curRoom.title} is a ${roomType}subroom of ${curRoom.parent.title}, so ${curRoom.parent.title} users${inheritedUserType} also have authority in this room.`); + } + curRoom = curRoom.parent; + } + if (!curRoom.isPrivate) { + buffer.push(`${curRoom.title} is a public room, so global auth with no relevant roomauth will have authority in this room.`); + } else if (curRoom.isPrivate === 'hidden' || curRoom.isPrivate === 'voice') { + buffer.push(`${curRoom.title} is a hidden room, so global auth with no relevant roomauth will have authority in this room.`); + } + if (targetRoom !== room) buffer.unshift(`${targetRoom.title} room auth:`); + connection.popup(`${buffer.join("\n\n")}${userLookup}`); + }, + + '!userauth': true, + userauth(target, room, user, connection) { + let targetId = toId(target) || user.userid; + let targetUser = Users.getExact(targetId); + let targetUsername = (targetUser ? targetUser.name : target); + + let buffer = []; + let innerBuffer = []; + let group = Users.usergroups[targetId]; + if (group) { + buffer.push(`Global auth: ${group.charAt(0)}`); + } + Rooms.rooms.forEach((curRoom, id) => { + if (!curRoom.auth || curRoom.isPrivate) return; + group = curRoom.auth[targetId]; + if (!group) return; + innerBuffer.push(group + id); + }); + if (innerBuffer.length) { + buffer.push(`Room auth: ${innerBuffer.join(', ')}`); + } + if (targetId === user.userid || user.can('lock')) { + innerBuffer = []; + Rooms.rooms.forEach((curRoom, id) => { + if (!curRoom.auth || !curRoom.isPrivate) return; + if (curRoom.isPrivate === true) return; + let auth = curRoom.auth[targetId]; + if (!auth) return; + innerBuffer.push(auth + id); + }); + if (innerBuffer.length) { + buffer.push(`Hidden room auth: ${innerBuffer.join(', ')}`); + } + } + if (targetId === user.userid || user.can('makeroom')) { + innerBuffer = []; + for (const chatRoom of Rooms.global.chatRooms) { + if (!chatRoom.auth || !chatRoom.isPrivate) continue; + if (chatRoom.isPrivate !== true) continue; + let auth = chatRoom.auth[targetId]; + if (!auth) continue; + innerBuffer.push(auth + chatRoom.id); + } + if (innerBuffer.length) { + buffer.push(`Private room auth: ${innerBuffer.join(', ')}`); + } + } + if (!buffer.length) { + buffer.push("No global or room auth."); + } + + buffer.unshift(`${targetUsername} user auth:`); + connection.popup(buffer.join("\n\n")); + }, + + rb: 'ban', + roomban: 'ban', + b: 'ban', + ban(target, room, user, connection) { + if (!target) return this.parse('/help ban'); + if (!this.canTalk()) return; + + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser) return this.errorReply(`User '${this.targetUsername}' not found.`); + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + if (!this.can('ban', targetUser, room)) return false; + if (targetUser.can('makeroom')) return this.errorReply("You are not allowed to ban upper staff members."); + if (Punishments.getRoomPunishType(room, this.targetUsername) === 'BLACKLIST') return this.errorReply(`This user is already blacklisted from ${room.id}.`); + let name = targetUser.getLastName(); + let userid = targetUser.getLastId(); + + if (Punishments.isRoomBanned(targetUser, room.id) && !target) { + let problem = " but was already banned"; + return this.privateModAction(`(${name} would be banned by ${user.name} ${problem}.)`); + } + + if (targetUser.trusted && room.isPrivate !== true && !room.isPersonal) { + Monitor.log(`[CrisisMonitor] Trusted user ${targetUser.name} ${(targetUser.trusted !== targetUser.userid ? ` (${targetUser.trusted})` : ``)} was roombanned from ${room.id} by ${user.name}, and should probably be demoted.`); + } + + if (targetUser in room.users || user.can('lock')) { + targetUser.popup( + `|modal||html|

    ${Chat.escapeHTML(user.name)} has banned you from the room ${room.id} ${(room.subRooms ? ` and its subrooms` : ``)}.

    ${(target ? `

    Reason: ${Chat.escapeHTML(target)}

    ` : ``)}

    To appeal the ban, PM the staff member that banned you${(!room.battle && room.auth ? ` or a room owner.

    ` : `.

    `)}` + ); + } + + const reason = (target ? ` (${target})` : ``); + this.addModAction(`${name} was banned from ${room.title} by ${user.name}.${reason}`); + + let affected = Punishments.roomBan(room, targetUser, null, null, target); + + if (!room.isPrivate && room.chatRoomData) { + let acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); + let displayMessage = ''; + if (affected.length > 1) { + displayMessage = `(${name}'s ${(acAccount ? ` ac account: ${acAccount}, ` : ``)} banned alts: ${affected.slice(1).map(user => user.getLastName()).join(", ")})`; + this.privateModAction(displayMessage); + } else if (acAccount) { + displayMessage = `(${name}'s ac account: ${acAccount})`; + this.privateModAction(displayMessage); + } + } + room.hideText([userid, toId(this.inputUsername)]); + + if (room.isPrivate !== true && room.chatRoomData) { + this.globalModlog("ROOMBAN", targetUser, ` by ${user.userid}${(target ? `: ${target}` : ``)}`); + } else { + this.modlog("ROOMBAN", targetUser, ` by ${user.userid}${(target ? `: ${target}` : ``)}`); + } + return true; + }, + banhelp: [`/ban [username], [reason] - Bans the user from the room you are in. Requires: @ # & ~`], + + unroomban: 'unban', + roomunban: 'unban', + unban(target, room, user, connection) { + if (!target) return this.parse('/help unban'); + if (!this.can('ban', null, room)) return false; + + let name = Punishments.roomUnban(room, target); + + if (name) { + this.addModAction(`${name} was unbanned from ${room.title} by ${user.name}.`); + if (room.isPrivate !== true && room.chatRoomData) { + this.globalModlog("UNROOMBAN", name, ` by ${user.userid}`); + } + } else { + this.errorReply(`User '${target}' is not banned from this room.`); + } + }, + unbanhelp: [`/unban [username] - Unbans the user from the room you are in. Requires: @ # & ~`], + + '!autojoin': true, + autojoin(target, room, user, connection) { + let targets = target.split(','); + if (targets.length > 11 || connection.inRooms.size > 1) return; + Rooms.global.autojoinRooms(user, connection); + let autojoins = []; + + const promises = targets.map(target => + user.tryJoinRoom(target, connection).then(ret => { + if (ret === Rooms.RETRY_AFTER_LOGIN) { + autojoins.push(target); + } + }) + ); + + Promise.all(promises).then(() => { + connection.autojoins = autojoins.join(','); + }); + }, + + '!join': true, + joim: 'join', + j: 'join', + join(target, room, user, connection) { + if (!target) return this.parse('/help join'); + if (target.startsWith('http://')) target = target.slice(7); + if (target.startsWith('https://')) target = target.slice(8); + if (target.startsWith('play.pokemonshowdown.com/')) target = target.slice(25); + if (target.startsWith('psim.us/')) target = target.slice(8); + user.tryJoinRoom(target, connection).then(ret => { + if (ret === Rooms.RETRY_AFTER_LOGIN) { + connection.sendTo(target, `|noinit|namerequired|The room '${target}' does not exist or requires a login to join.`); + } + }); + }, + joinhelp: [`/join [roomname] - Attempt to join the room [roomname].`], + + '!part': true, + leave: 'part', + part(target, room, user, connection) { + let targetRoom = target ? Rooms.search(target) : room; + if (!targetRoom || targetRoom === Rooms.global) { + if (target.startsWith('view-')) return; + return this.errorReply(`The room '${target}' does not exist.`); + } + user.leaveRoom(targetRoom, connection); + }, + + /********************************************************* + * Moderating: Punishments + *********************************************************/ + + kick: 'warn', + k: 'warn', + warn(target, room, user) { + if (!target) return this.parse('/help warn'); + if (!this.canTalk()) return; + if (room.isPersonal && !user.can('warn')) return this.errorReply("Warning is unavailable in group chats."); + // If used in staff, help tickets or battles, log the warn to the global modlog. + const global = room.id === 'staff' || room.id.startsWith('help-') || (room.battle && !room.parent); + + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser || !targetUser.connected) return this.errorReply(`User '${this.targetUsername}' not found.`); + if (!(targetUser in room.users) && !global) { + return this.errorReply(`User ${this.targetUsername} is not in the room ${room.id}.`); + } + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + if (!this.can('warn', targetUser, room)) return false; + if (targetUser.can('makeroom')) return this.errorReply("You are not allowed to warn upper staff members."); + + this.addModAction(`${targetUser.name} was warned by ${user.name}.${(target ? ` (${target})` : ``)}`); + this.modlog('WARN', targetUser, target, {noalts: 1}); + if (global) { + this.globalModlog('WARN', targetUser, ` by ${user.userid}${(target ? `: ${target}` : ``)}`); + } + targetUser.send(`|c|~|/warn ${target}`); + let userid = targetUser.getLastId(); + this.add(`|unlink|${userid}`); + if (userid !== toId(this.inputUsername)) this.add(`|unlink|${toId(this.inputUsername)}`); + }, + warnhelp: [`/warn OR /k [username], [reason] - Warns a user showing them the Pok\u00e9mon Showdown Rules and [reason] in an overlay. Requires: % @ # & ~`], + + redirect: 'redir', + redir(target, room, user, connection) { + if (!target) return this.parse('/help redirect'); + if (room.isPrivate || room.isPersonal) return this.errorReply("Users cannot be redirected from private or personal rooms."); + + target = this.splitTarget(target); + let targetUser = this.targetUser; + let targetRoom = Rooms.search(target); + if (!targetRoom || targetRoom.modjoin || targetRoom.staffRoom) { + return this.errorReply(`The room "${target}" does not exist.`); + } + if (!this.can('warn', targetUser, room) || !this.can('warn', targetUser, targetRoom)) return false; + + if (!this.can('rangeban', targetUser)) { + this.errorReply(`Redirects have been deprecated. Instead of /redirect, use <> or /invite to guide users to the correct room, and punish if users don't cooperate.`); + return; + } + + if (!targetUser || !targetUser.connected) { + return this.errorReply(`User ${this.targetUsername} not found.`); + } + if (targetRoom.id === "global") return this.errorReply(`Users cannot be redirected to the global room.`); + if (targetRoom.isPrivate || targetRoom.isPersonal) { + return this.errorReply(`The room "${target}" is not public.`); + } + if (targetUser.inRooms.has(targetRoom.id)) { + return this.errorReply(`User ${targetUser.name} is already in the room ${targetRoom.title}!`); + } + if (!targetUser.inRooms.has(room.id)) { + return this.errorReply(`User ${this.targetUsername} is not in the room ${room.id}.`); + } + targetUser.leaveRoom(room.id); + targetUser.popup(`You are in the wrong room; please go to <<${targetRoom.id}>> instead`); + this.addModAction(`${targetUser.name} was redirected to room ${targetRoom.title} by ${user.name}.`); + this.modlog('REDIRECT', targetUser, `to ${targetRoom.title}`, {noip: 1, noalts: 1}); + targetUser.leaveRoom(room); + }, + redirhelp: [`/redirect OR /redir [username], [roomname] - [DEPRECATED] Attempts to redirect the user [username] to the room [roomname]. Requires: & ~`], + + m: 'mute', + mute(target, room, user, connection, cmd) { + if (!target) return this.parse('/help mute'); + if (!this.canTalk()) return; + + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser) return this.errorReply(`User '${this.targetUsername}' not found.`); + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + + let muteDuration = ((cmd === 'hm' || cmd === 'hourmute') ? HOURMUTE_LENGTH : MUTE_LENGTH); + if (!this.can('mute', targetUser, room)) return false; + if (targetUser.can('makeroom')) return this.errorReply("You are not allowed to mute upper staff members."); + let canBeMutedFurther = ((room.getMuteTime(targetUser) || 0) <= (muteDuration * 5 / 6)); + if (targetUser.locked || (room.isMuted(targetUser) && !canBeMutedFurther) || Punishments.isRoomBanned(targetUser, room.id)) { + let problem = ` but was already ${(targetUser.locked ? "locked" : room.isMuted(targetUser) ? "muted" : "room banned")}`; + if (!target) { + return this.privateModAction(`(${targetUser.name} would be muted by ${user.name} ${problem}.)`); + } + return this.addModAction(`${targetUser.name} would be muted by ${user.name} ${problem}. (${target})`); + } + + if (targetUser in room.users) targetUser.popup(`|modal|${user.name} has muted you in ${room.id} for ${Chat.toDurationString(muteDuration)}. ${target}`); + this.addModAction(`${targetUser.name} was muted by ${user.name} for ${Chat.toDurationString(muteDuration)}.${(target ? ` (${target})` : ``)}`); + this.modlog(`${cmd.includes('h') ? 'HOUR' : ''}MUTE`, targetUser, target); + if (targetUser.autoconfirmed && targetUser.autoconfirmed !== targetUser.userid) { + let displayMessage = `(${targetUser.name}'s ac account: ${targetUser.autoconfirmed})`; + this.privateModAction(displayMessage); + } + let userid = targetUser.getLastId(); + this.add(`|unlink|${userid}`); + if (userid !== toId(this.inputUsername)) this.add(`|unlink|${toId(this.inputUsername)}`); + + room.mute(targetUser, muteDuration, false); + }, + 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: % @ # & ~`], + + um: 'unmute', + unmute(target, room, user) { + if (!target) return this.parse('/help unmute'); + target = this.splitTarget(target); + if (target) return this.errorReply(`This command does not support specifying a reason.`); + if (!this.canTalk()) return; + if (!this.can('mute', null, room)) return false; + + let targetUser = this.targetUser; + let successfullyUnmuted = room.unmute(targetUser ? targetUser.userid : toId(this.targetUsername), `Your mute in '${room.title}' has been lifted.`); + + if (successfullyUnmuted) { + this.addModAction(`${(targetUser ? targetUser.name : successfullyUnmuted)} was unmuted by ${user.name}.`); + this.modlog('UNMUTE', (targetUser || successfullyUnmuted), null, {noip: 1, noalts: 1}); + } else { + this.errorReply(`${(targetUser ? targetUser.name : this.targetUsername)} is not muted.`); + } + }, + unmutehelp: [`/unmute [username] - Removes mute from user. Requires: % @ # & ~`], + + forcelock: 'lock', + l: 'lock', + ipmute: 'lock', + wl: 'lock', + weeklock: 'lock', + lock(target, room, user, connection, cmd) { + let week = cmd === 'wl' || cmd === 'weeklock'; + + if (!target) { + if (week) return this.parse('/help weeklock'); + return this.parse('/help lock'); + } + + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser && !Punishments.search(toId(this.targetUsername))[0].length) return this.errorReply(`User '${this.targetUsername}' not found.`); + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + if (!this.can('lock', targetUser)) return false; + + let name, userid; + + if (targetUser) { + name = targetUser.getLastName(); + userid = targetUser.getLastId(); + + if (targetUser.locked && !week) { + return this.privateModAction(`(${name} would be locked by ${user.name} but was already locked.)`); + } + + if (targetUser.trusted) { + if (cmd === 'forcelock') { + let from = targetUser.distrust(); + Monitor.log(`[CrisisMonitor] ${name} was locked by ${user.name} and demoted from ${from.join(", ")}.`); + this.globalModlog("CRISISDEMOTE", targetUser, ` from ${from.join(", ")}`); + } else { + return this.sendReply(`${name} is a trusted user. If you are sure you would like to lock them use /forcelock.`); + } + } else if (cmd === 'forcelock') { + return this.errorReply(`Use /lock; ${name} is not a trusted user.`); + } + } else { + name = this.targetUsername; + userid = toId(this.targetUsername); + } + + let proof = ''; + let userReason = target; + let targetLowercase = target.toLowerCase(); + if (target && (targetLowercase.includes('spoiler:') || targetLowercase.includes('spoilers:'))) { + let proofIndex = (targetLowercase.includes('spoilers:') ? targetLowercase.indexOf('spoilers:') : targetLowercase.indexOf('spoiler:')); + let bump = (targetLowercase.includes('spoilers:') ? 9 : 8); + proof = `(PROOF: ${target.substr(proofIndex + bump, target.length).trim()}) `; + userReason = target.substr(0, proofIndex).trim(); + } + + + // Use default time for locks. + let duration = week ? Date.now() + 7 * 24 * 60 * 60 * 1000 : null; + let affected = []; + + if (targetUser) { + affected = Punishments.lock(targetUser, duration, null, userReason); + } else { + affected = Punishments.lock(null, duration, userid, userReason); + } + + let acAccount = (targetUser && targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); + let displayMessage = ''; + if (affected.length > 1) { + displayMessage = `(${name}'s ${(acAccount ? ` ac account: ${acAccount}, ` : "")} locked alts: ${affected.slice(1).map(user => user.getLastName()).join(", ")})`; + this.privateModAction(displayMessage); + } else if (acAccount) { + displayMessage = `(${name}'s ac account: ${acAccount})`; + this.privateModAction(displayMessage); + } + room.hideText([userid, toId(this.inputUsername)]); + + const globalReason = (target ? `: ${userReason} ${proof}` : ''); + this.globalModlog((week ? "WEEKLOCK" : "LOCK"), targetUser || userid, ` by ${user.userid}${globalReason}`); + + let weekMsg = week ? ' for a week' : ''; + let lockMessage = `${name} was locked from talking${weekMsg} by ${user.name}.` + (userReason ? ` (${userReason})` : ""); + this.addModAction(lockMessage); + // Notify staff room when a user is locked outside of it. + if (room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${lockMessage}`); + } + + if (targetUser) { + let message = `|popup||html|${user.name} has locked you from talking in chats, battles, and PMing regular users${weekMsg}`; + if (userReason) message += `\n\nReason: ${userReason}`; + + let appeal = ''; + if (Chat.pages.help) { + appeal += ``; + } else if (Config.appealurl) { + appeal += `appeal: ${Config.appealurl}`; + } + + if (appeal) message += `\n\nIf you feel that your lock was unjustified, you can ${appeal}.`; + message += `\n\nYour lock will expire in a few days.`; + targetUser.send(message); + + let roomauth = []; + for (const [id, curRoom] of Rooms.rooms) { + if (id === 'global' || !curRoom.auth) continue; + // Destroy personal rooms of the locked user. + if (curRoom.isPersonal && curRoom.auth[userid] === Users.HOST_SYMBOL) { + curRoom.destroy(); + } else { + if (curRoom.isPrivate || curRoom.battle) continue; + + let group = curRoom.auth[userid]; + + if (group) roomauth.push(`${group}${id}`); + } + } + + if (roomauth.length) Monitor.log(`[CrisisMonitor] Locked user ${name} has public roomauth (${roomauth.join(', ')}), and should probably be demoted.`); + } + + // Automatically upload replays as evidence/reference to the punishment + if (room.battle) this.parse('/savereplay'); + return true; + }, + lockhelp: [ + `/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: [proof] - Marks proof in modlog only.`, + ], + + unlock(target, room, user) { + if (!target) return this.parse('/help unlock'); + if (!this.can('lock')) return false; + + let targetUser = Users.get(target); + if (targetUser && targetUser.namelocked) { + return this.errorReply(`User ${targetUser.name} is namelocked, not locked. Use /unnamelock to unnamelock them.`); + } + let reason = ''; + if (targetUser && targetUser.locked && targetUser.locked.charAt(0) === '#') { + reason = ` (${targetUser.locked})`; + } + + let unlocked = Punishments.unlock(target); + + if (unlocked) { + const unlockMessage = `${unlocked.join(", ")} ${((unlocked.length > 1) ? "were" : "was")} unlocked by ${user.name}.${reason}`; + this.addModAction(unlockMessage); + // Notify staff room when a user is unlocked outside of it. + if (!reason && room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${unlockMessage}`); + } + if (!reason) this.globalModlog("UNLOCK", toId(target), ` by ${user.userid}`); + if (targetUser) targetUser.popup(`${user.name} has unlocked you.`); + } else { + this.errorReply(`User '${target}' is not locked.`); + } + }, + unlockname(target, room, user) { + if (!target) return this.parse('/help unlock'); + if (!this.can('lock')) return false; + + const userid = toId(target); + const punishment = Punishments.userids.get(userid); + if (!punishment) return this.errorReply("This name isn't locked."); + if (punishment[1] === userid) return this.errorReply(`"${userid}" was specifically locked by a staff member (check the global modlog). Use /unlock if you really want to unlock this name.`); + + Punishments.userids.delete(userid); + Punishments.savePunishments(); + + for (const curUser of Users.findUsers([userid], [])) { + if (curUser.locked && !curUser.locked.startsWith('#') && !Punishments.getPunishType(curUser.userid)) { + curUser.locked = false; + curUser.namelocked = false; + curUser.updateIdentity(); + } + } + this.globalModlog("UNLOCKNAME", userid, ` by ${user.name}`); + + const unlockMessage = `The name '${target}' was unlocked by ${user.name}.`; + + this.addModAction(unlockMessage); + if (room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${unlockMessage}`); + } + }, + unlockip(target, room, user) { + target = target.trim(); + if (!target) return this.parse('/help unlock'); + if (!this.can('ban')) return false; + const range = target.charAt(target.length - 1) === '*'; + if (range && !this.can('rangeban')) return false; + + if (!/^[0-9.*]+$/.test(target)) return this.errorReply("Please enter a valid IP address."); + + const punishment = Punishments.ips.get(target); + if (!punishment) return this.errorReply(`${target} is not a locked/banned IP or IP range.`); + + Punishments.ips.delete(target); + Punishments.savePunishments(); + + for (const curUser of Users.findUsers([], [target])) { + if (curUser.locked && !curUser.locked.startsWith('#') && !Punishments.getPunishType(curUser.userid)) { + curUser.locked = false; + curUser.namelocked = false; + curUser.updateIdentity(); + } + } + this.globalModlog(`UNLOCK${range ? 'RANGE' : 'IP'}`, target, ` by ${user.name}`); + + const broadcastRoom = Rooms('staff') || room; + broadcastRoom.addByUser(user, `${user.name} unlocked the ${range ? "IP range" : "IP"}: ${target}`); + }, + unlockiphelp: [`/unlockip [ip] - Unlocks a punished ip while leaving the original punishment intact. Requires: @ & ~`], + unlocknamehelp: [`/unlockname [username] - Unlocks a punished alt while leaving the original punishment 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: @ & ~`, + ], + + forceglobalban: 'globalban', + gban: 'globalban', + globalban(target, room, user, connection, cmd) { + if (!target) return this.parse('/help globalban'); + + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser) return this.errorReply(`User '${this.targetUsername}' not found.`); + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + if (!target && REQUIRE_REASONS) { + return this.errorReply("Global bans require a reason."); + } + if (!this.can('ban', targetUser)) return false; + let name = targetUser.getLastName(); + let userid = targetUser.getLastId(); + + if (targetUser.trusted) { + if (cmd === 'forceglobalban') { + let from = targetUser.distrust(); + Monitor.log(`[CrisisMonitor] ${name} was globally banned by ${user.name} and demoted from ${from.join(", ")}.`); + this.globalModlog("CRISISDEMOTE", targetUser, ` from ${from.join(", ")}`); + } else { + return this.sendReply(`${name} is a trusted user. If you are sure you would like to ban them use /forceglobalban.`); + } + } else if (cmd === 'forceglobalban') { + return this.errorReply(`Use /globalban; ${name} is not a trusted user.`); + } + + // Destroy personal rooms of the banned user. + for (const roomid of targetUser.inRooms) { + if (roomid === 'global') continue; + let targetRoom = Rooms.get(roomid); + if (targetRoom.isPersonal && targetRoom.auth[userid] === Users.HOST_SYMBOL) { + targetRoom.destroy(); + } + } + + let proof = ''; + let userReason = target; + let targetLowercase = target.toLowerCase(); + if (target && (targetLowercase.includes('spoiler:') || targetLowercase.includes('spoilers:'))) { + let proofIndex = (targetLowercase.includes('spoilers:') ? targetLowercase.indexOf('spoilers:') : targetLowercase.indexOf('spoiler:')); + let bump = (targetLowercase.includes('spoilers:') ? 9 : 8); + proof = `(PROOF: ${target.substr(proofIndex + bump, target.length).trim()}) `; + userReason = target.substr(0, proofIndex).trim(); + } + + targetUser.popup(`|modal|${user.name} has globally banned you.${(userReason ? `\n\nReason: ${userReason}` : ``)} ${(Config.appealurl ? `\n\nIf you feel that your ban was unjustified, you can appeal:\n${Config.appealurl}` : ``)}\n\nYour ban will expire in a few days.`); + + let banMessage = `${name} was globally banned by ${user.name}.${(userReason ? ` (${userReason})` : ``)}`; + this.addModAction(banMessage); + + // Notify staff room when a user is banned outside of it. + if (room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${banMessage}`); + } + + let affected = Punishments.ban(targetUser, null, null, userReason); + let acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); + let displayMessage = ''; + if (affected.length > 1) { + let guests = affected.length - 1; + affected = affected.slice(1).map(user => user.getLastName()).filter(alt => alt.substr(0, 7) !== '[Guest '); + guests -= affected.length; + displayMessage = `(${name}'s ${(acAccount ? `ac account: ${acAccount}, ` : ``)} banned alts: ${affected.join(", ")} ${(guests ? ` [${guests} guests]` : ``)})`; + this.privateModAction(displayMessage); + for (const user of affected) { + this.add(`|unlink|${toId(user)}`); + } + } else if (acAccount) { + displayMessage = `(${name}'s ac account: ${acAccount})`; + this.privateModAction(displayMessage); + } + + room.hideText([userid, toId(this.inputUsername)]); + + const globalReason = (target ? `: ${userReason} ${proof}` : ''); + this.globalModlog("BAN", targetUser, ` by ${user.userid}${globalReason}`); + 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] spoiler: [proof] - Marks proof in modlog only.`, + ], + + globalunban: 'unglobalban', + unglobalban(target, room, user) { + if (!target) return this.parse(`/help unglobalban`); + if (!this.can('ban')) return false; + + let name = Punishments.unban(target); + + let unbanMessage = `${name} was globally unbanned by ${user.name}.`; + + if (name) { + this.addModAction(unbanMessage); + // Notify staff room when a user is unbanned outside of it. + if (room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${unbanMessage}`); + } + this.globalModlog("UNBAN", name, ` by ${user.userid}`); + } else { + this.errorReply(`User '${target}' is not globally banned.`); + } + }, + unglobalbanhelp: [`/unglobalban [username] - Unban a user. Requires: @ & ~`], + + unbanall(target, room, user) { + if (!this.can('rangeban')) return false; + if (!target) { + user.lastCommand = '/unbanall'; + this.errorReply("THIS WILL UNBAN AND UNLOCK ALL USERS."); + this.errorReply("To confirm, use: /unbanall confirm"); + return; + } + if (user.lastCommand !== '/unbanall' || target !== 'confirm') { + return this.parse('/help unbanall'); + } + user.lastCommand = ''; + Punishments.userids.clear(); + Punishments.ips.clear(); + Punishments.savePunishments(); + this.addModAction(`All bans and locks have been lifted by ${user.name}.`); + this.modlog('UNBANALL'); + }, + unbanallhelp: [`/unbanall - Unban all IP addresses. Requires: & ~`], + + deroomvoiceall(target, room, user) { + if (!this.can('editroom', null, room)) return false; + if (!room.auth) return this.errorReply("Room does not have roomauth."); + if (!target) { + user.lastCommand = '/deroomvoiceall'; + this.errorReply("THIS WILL DEROOMVOICE ALL ROOMVOICED USERS."); + this.errorReply("To confirm, use: /deroomvoiceall confirm"); + return; + } + if (user.lastCommand !== '/deroomvoiceall' || target !== 'confirm') { + return this.parse('/help deroomvoiceall'); + } + user.lastCommand = ''; + let count = 0; + for (let userid in room.auth) { + if (room.auth[userid] === '+') { + delete room.auth[userid]; + if (userid in room.users) room.users[userid].updateIdentity(room.id); + count++; + } + } + if (!count) { + return this.sendReply("(This room has zero roomvoices)"); + } + if (room.chatRoomData) { + Rooms.global.writeChatRoomData(); + } + this.addModAction(`All ${count} roomvoices have been cleared by ${user.name}.`); + this.modlog('DEROOMVOICEALL'); + }, + deroomvoiceallhelp: [`/deroomvoiceall - Devoice all roomvoiced users. Requires: # & ~`], + + rangeban: 'banip', + banip(target, room, user) { + const [ip, reason] = this.splitOne(target); + if (!ip || !/^[0-9.]+(?:\.\*)?$/.test(ip)) return this.parse('/help banip'); + if (!reason) return this.errorReply("/banip requires a ban reason"); + + if (!this.can('rangeban')) return false; + const ipDesc = `IP ${(ip.endsWith('*') ? `range ` : ``)}${ip}`; + + const curPunishment = Punishments.ipSearch(ip); + if (curPunishment && curPunishment[0] === 'BAN') { + return this.errorReply(`The ${ipDesc} is already temporarily banned.`); + } + Punishments.banRange(ip, reason); + this.addModAction(`${user.name} hour-banned the ${ipDesc}: ${reason}`); + this.modlog('RANGEBAN', null, reason); + }, + baniphelp: [`/banip [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: & ~`], + + unrangeban: 'unbanip', + unbanip(target, room, user) { + target = target.trim(); + if (!target) { + return this.parse('/help unbanip'); + } + if (!this.can('rangeban')) return false; + if (!Punishments.ips.has(target)) { + return this.errorReply(`${target} is not a locked/banned IP or IP range.`); + } + Punishments.ips.delete(target); + this.addModAction(`${user.name} unbanned the ${(target.charAt(target.length - 1) === '*' ? "IP range" : "IP")}: ${target}`); + this.modlog('UNRANGEBAN', null, target); + }, + unbaniphelp: [`/unbanip [ip] - Unbans. Accepts wildcards to ban ranges. Requires: & ~`], + + rangelock: 'lockip', + lockip(target, room, user) { + const [ip, reason] = this.splitOne(target); + if (!ip || !/^[0-9.]+(?:\.\*)?$/.test(ip)) return this.parse('/help lockip'); + if (!reason) return this.errorReply("/lockip requires a lock reason"); + + if (!this.can('rangeban')) return false; + const ipDesc = `IP ${(ip.endsWith('*') ? `range ` : ``)}${ip}`; + + const curPunishment = Punishments.ipSearch(ip); + if (curPunishment && (curPunishment[0] === 'BAN' || curPunishment[0] === 'LOCK')) { + const punishDesc = curPunishment[0] === 'BAN' ? `temporarily banned` : `temporarily locked`; + return this.errorReply(`The ${ipDesc} is already ${punishDesc}.`); + } + + Punishments.lockRange(ip, reason); + this.addModAction(`${user.name} hour-locked the ${ipDesc}: ${reason}`); + this.modlog('RANGELOCK', null, reason); + }, + lockiphelp: [`/lockip [ip] - Globally locks this IP or IP range for an hour. Accepts wildcards to ban ranges. Existing users on the IP will not be banned. Requires: & ~`], + + unrangelock: 'unlockip', + rangeunlock: 'unlockip', + + /********************************************************* + * Moderating: Other + *********************************************************/ + + mn: 'modnote', + modnote(target, room, user, connection) { + if (!target) return this.parse('/help modnote'); + if (!this.canTalk()) return; + + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The note is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + if (!this.can('receiveauthmessages', null, room)) return false; + target = target.replace(/\n/g, "; "); + this.modlog('NOTE', null, target); + if (room.id === 'staff' || room.id === 'upperstaff') this.globalModlog('NOTE', null, ` by ${user.userid}: ${target}`); + return this.privateModAction(`(${user.name} notes: ${target})`); + }, + modnotehelp: [`/modnote [note] - Adds a moderator note that can be read through modlog. Requires: % @ # & ~`], + + globalpromote: 'promote', + promote(target, room, user, connection, cmd) { + if (!target) return this.parse('/help promote'); + + target = this.splitTarget(target, true); + let targetUser = this.targetUser; + let userid = toId(this.targetUsername); + let name = targetUser ? targetUser.name : this.targetUsername; + + if (!userid) return this.parse('/help promote'); + + let currentGroup = ((targetUser && targetUser.group) || Users.usergroups[userid] || ' ')[0]; + let nextGroup = target; + if (target === 'deauth') nextGroup = Config.groupsranking[0]; + if (!nextGroup) { + return this.errorReply("Please specify a group such as /globalvoice or /globaldeauth"); + } + if (!Config.groups[nextGroup]) { + return this.errorReply(`Group '${nextGroup}' does not exist.`); + } + if (!cmd.startsWith('global')) { + let groupid = Config.groups[nextGroup].id; + if (!groupid && nextGroup === Config.groupsranking[0]) groupid = 'deauth'; + if (Config.groups[nextGroup].globalonly) return this.errorReply(`Did you mean "/global${groupid}"?`); + if (Config.groups[nextGroup].roomonly) return this.errorReply(`Did you mean "/room${groupid}"?`); + return this.errorReply(`Did you mean "/room${groupid}" or "/global${groupid}"?`); + } + if (Config.groups[nextGroup].roomonly || Config.groups[nextGroup].battleonly) { + return this.errorReply(`Group '${nextGroup}' does not exist as a global rank.`); + } + + let groupName = Config.groups[nextGroup].name || "regular user"; + if (currentGroup === nextGroup) { + return this.errorReply(`User '${name}' is already a ${groupName}`); + } + if (!user.canPromote(currentGroup, nextGroup)) { + return this.errorReply(`/${cmd} - Access denied.`); + } + + if (!Users.isUsernameKnown(userid)) { + return this.errorReply(`/globalpromote - WARNING: '${name}' is offline and unrecognized. The username might be misspelled (either by you or the person who told you) or unregistered. Use /forcepromote if you're sure you want to risk it.`); + } + if (targetUser && !targetUser.registered) { + return this.errorReply(`User '${name}' is unregistered, and so can't be promoted.`); + } + Users.setOfflineGroup(name, nextGroup); + if (Config.groups[nextGroup].rank < Config.groups[currentGroup].rank) { + this.privateModAction(`(${name} was demoted to ${groupName} by ${user.name}.)`); + this.modlog(`GLOBAL ${groupName.toUpperCase()}`, userid, '(demote)'); + if (targetUser) targetUser.popup(`You were demoted to ${groupName} by ${user.name}.`); + } else { + this.addModAction(`${name} was promoted to ${groupName} by ${user.name}.`); + this.modlog(`GLOBAL ${groupName.toUpperCase()}`, userid); + if (targetUser) targetUser.popup(`You were promoted to ${groupName} by ${user.name}.`); + } + + if (targetUser) targetUser.updateIdentity(); + }, + promotehelp: [`/promote [username], [group] - Promotes the user to the specified group. Requires: & ~`], + + confirmuser: 'trustuser', + trustuser(target, room, user) { + if (!target) return this.parse('/help trustuser'); + if (!this.can('promote')) return; + + target = this.splitTarget(target, true); + if (target) return this.errorReply(`This command does not support specifying a reason.`); + let targetUser = this.targetUser; + let userid = toId(this.targetUsername); + let name = targetUser ? targetUser.name : this.targetUsername; + + if (!userid) return this.parse('/help trustuser'); + if (!targetUser) return this.errorReply(`User '${name}' is not online.`); + + if (targetUser.trusted) return this.errorReply(`User '${name}' is already trusted.`); + + targetUser.setGroup(Config.groupsranking[0], true); + this.sendReply(`User '${name}' is now trusted.`); + this.privateModAction(`${name} was set as a trusted user by ${user.name}.`); + this.modlog('TRUSTUSER', userid); + }, + trustuserhelp: [`/trustuser [username] - Trusts the user (makes them immune to locks). Requires: & ~`], + + globaldemote: 'demote', + demote(target) { + if (!target) return this.parse('/help demote'); + this.run('promote'); + }, + demotehelp: [`/demote [username], [group] - Demotes the user to the specified group. Requires: & ~`], + + forcepromote(target, room, user) { + // warning: never document this command in /help + if (!this.can('forcepromote')) return false; + target = this.splitTarget(target, true); + let name = this.targetUsername; + let nextGroup = target; + if (!Config.groups[nextGroup]) return this.errorReply(`Group '${nextGroup}' does not exist.`); + if (Config.groups[nextGroup].roomonly || Config.groups[nextGroup].battleonly) return this.errorReply(`Group '${nextGroup}' does not exist as a global rank.`); + + if (Users.isUsernameKnown(name)) { + return this.errorReply("/forcepromote - Don't forcepromote unless you have to."); + } + Users.setOfflineGroup(name, nextGroup); + + this.addModAction(`${name} was promoted to ${(Config.groups[nextGroup].name || "regular user")} by ${user.name}.`); + this.modlog(`GLOBAL${(Config.groups[nextGroup].name || "regular").toUpperCase()}`, toId(name)); + }, + + devoice: 'deauth', + deauth(target, room, user) { + return this.parse(`/demote ${target}, deauth`); + }, + + deglobalvoice: 'globaldeauth', + deglobalauth: 'globaldeauth', + globaldevoice: 'globaldeauth', + globaldeauth(target, room, user) { + return this.parse(`/globaldemote ${target}, deauth`); + }, + + deroomvoice: 'roomdeauth', + roomdevoice: 'roomdeauth', + deroomauth: 'roomdeauth', + roomdeauth(target, room, user) { + return this.parse(`/roomdemote ${target}, deauth`); + }, + + declare(target, room, user) { + target = target.trim(); + if (!target) return this.parse('/help declare'); + if (!this.can('declare', null, room)) return false; + if (!this.canTalk()) return; + if (target.length > 2000) return this.errorReply("Declares should not exceed 2000 characters."); + + for (let u in room.users) { + if (Users(u).connected) Users(u).sendTo(room, `|notify|${room.title} announcement!|${target}`); + } + this.add(Chat.html`|raw|
    ${target}
    `); + this.modlog('DECLARE', null, target); + }, + declarehelp: [`/declare [message] - Anonymously announces a message. Requires: # * & ~`], + + htmldeclare(target, room, user) { + if (!target) return this.parse('/help htmldeclare'); + if (!this.can('gdeclare', null, room)) return false; + if (!this.canTalk()) return; + target = this.canHTML(target); + if (!target) return; + + for (let u in room.users) { + if (Users(u).connected) Users(u).sendTo(room, `|notify|${room.title} announcement!|${Chat.stripHTML(target)}`); + } + this.add(`|raw|
    ${target}
    `); + this.modlog(`HTMLDECLARE`, null, target); + }, + htmldeclarehelp: [`/htmldeclare [message] - Anonymously announces a message using safe HTML. Requires: ~`], + + gdeclare: 'globaldeclare', + globaldeclare(target, room, user) { + if (!target) return this.parse('/help globaldeclare'); + if (!this.can('gdeclare')) return false; + target = this.canHTML(target); + if (!target) return; + + Users.users.forEach(u => { + if (u.connected) u.send(`|pm|~|${u.group}${u.name}|/raw
    ${target}
    `); + }); + this.modlog(`GLOBALDECLARE`, null, target); + }, + globaldeclarehelp: [`/globaldeclare [message] - Anonymously announces a message to every room on the server. Requires: ~`], + + cdeclare: 'chatdeclare', + chatdeclare(target, room, user) { + if (!target) return this.parse('/help chatdeclare'); + if (!this.can('gdeclare')) return false; + target = this.canHTML(target); + if (!target) return; + + Rooms.rooms.forEach((curRoom, id) => { + if (id !== 'global' && curRoom.type !== 'battle') curRoom.addRaw(`
    ${target}
    `).update(); + }); + this.modlog(`CHATDECLARE`, null, target); + }, + chatdeclarehelp: [`/cdeclare [message] - Anonymously announces a message to all chatrooms on the server. Requires: ~`], + + '!announce': true, + wall: 'announce', + announce(target, room, user) { + if (!target) return this.parse('/help announce'); + + if (room && !this.can('announce', null, room)) return false; + + target = this.canTalk(target); + if (!target) return; + + return `/announce ${target}`; + }, + announcehelp: [`/announce OR /wall [message] - Makes an announcement. Requires: % @ # & ~`], + + notifyoffrank: 'notifyrank', + notifyrank(target, room, user, connection, cmd) { + if (!target) return this.parse(`/help notifyrank`); + if (!this.can('addhtml', null, room)) return false; + if (!this.canTalk()) return; + let [rank, titleNotification] = this.splitOne(target); + if (rank === 'all') rank = ` `; + if (!(rank in Config.groups)) return this.errorReply(`Group '${rank}' does not exist.`); + const id = `${room.id}-rank-${(Config.groups[rank].id || `all`)}`; + if (cmd === 'notifyoffrank') { + if (rank === ' ') { + room.send(`|tempnotifyoff|${id}`); + } else { + room.sendRankedUsers(`|tempnotifyoff|${id}`, rank); + } + } else { + let [title, notificationHighlight] = this.splitOne(titleNotification); + if (!title) title = `${room.title} ${(Config.groups[rank].name ? `${Config.groups[rank].name}+ ` : ``)}message!`; + if (!user.can('addhtml')) { + title += ` (notification from ${user.name})`; + } + const [notification, highlight] = this.splitOne(notificationHighlight); + if (notification.length > 300) return this.errorReply(`Notifications should not exceed 300 characters.`); + const message = `|tempnotify|${id}|${title}|${notification}${(highlight ? `|${highlight}` : ``)}`; + if (rank === ' ') { + room.send(message); + } else { + room.sendRankedUsers(message, rank); + } + this.modlog(`NOTIFYRANK`, null, target); + } + }, + 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: # * & ~`, + ], + + fr: 'forcerename', + forcerename(target, room, user) { + if (!target) return this.parse('/help forcerename'); + + let reason = this.splitTarget(target, true); + let targetUser = this.targetUser; + if (!targetUser) { + this.splitTarget(target); + if (this.targetUser) { + return this.errorReply(`User has already changed their name to '${this.targetUser.name}'.`); + } + return this.errorReply(`User '${target}' not found.`); + } + if (!this.can('forcerename', targetUser)) return false; + + this.privateModAction(`(${targetUser.name} was forced to choose a new name by ${user.name}${(reason ? `: ${reason}` : ``)})`); + this.globalModlog('FORCERENAME', targetUser, ` by ${user.name}${(reason ? `: ${reason}` : ``)}`); + this.modlog('FORCERENAME', targetUser, reason, {noip: 1, noalts: 1}); + Ladders.cancelSearches(targetUser); + targetUser.resetName(true); + targetUser.send(`|nametaken||${user.name} considers your name inappropriate${(reason ? `: ${reason}` : ".")}`); + targetUser.trackRename = targetUser.name; + return true; + }, + forcerenamehelp: [`/forcerename OR /fr [username], [reason] - Forcibly change a user's name and shows them the [reason]. Requires: % @ & ~`], + + nl: 'namelock', + namelock(target, room, user) { + if (!target) return this.parse('/help namelock'); + + let reason = this.splitTarget(target, true); + let targetUser = this.targetUser; + + if (!targetUser) { + return this.errorReply(`User '${this.targetUsername}' not found.`); + } + if (!this.can('forcerename', targetUser)) return false; + if (targetUser.namelocked) return this.errorReply(`User '${targetUser.name}' is already namelocked.`); + + const reasonText = reason ? ` (${reason})` : `.`; + const lockMessage = `${targetUser.name} was namelocked by ${user.name}${reasonText}`; + this.privateModAction(`(${lockMessage})`); + + // Notify staff room when a user is locked outside of it. + if (room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${lockMessage}`); + } + + this.globalModlog("NAMELOCK", targetUser, ` by ${user.userid}${reasonText}`); + Ladders.cancelSearches(targetUser); + Punishments.namelock(targetUser, null, null, reason); + targetUser.popup(`|modal|${user.name} has locked your name and you can't change names anymore${reasonText}`); + return true; + }, + namelockhelp: [`/namelock OR /nl [username], [reason] - Name locks a user and shows them the [reason]. Requires: % @ & ~`], + + unl: 'unnamelock', + unnamelock(target, room, user) { + if (!target) return this.parse('/help unnamelock'); + if (!this.can('forcerename')) return false; + + let targetUser = Users.get(target); + let reason = ''; + if (targetUser && targetUser.namelocked) { + reason = ` (${targetUser.namelocked})`; + } + + let unlocked = Punishments.unnamelock(target); + + if (unlocked) { + this.addModAction(`${unlocked} was unnamelocked by ${user.name}.${reason}`); + if (!reason) this.globalModlog("UNNAMELOCK", toId(target), ` by ${user.userid}`); + if (targetUser) targetUser.popup(`${user.name} has unnamelocked you.`); + } else { + this.errorReply(`User '${target}' is not namelocked.`); + } + }, + unnamelockhelp: [`/unnamelock [username] - Unnamelocks the user. Requires: % @ & ~`], + + hidetextalts: 'hidetext', + hidealttext: 'hidetext', + hidealtstext: 'hidetext', + htext: 'hidetext', + hidetext(target, room, user, connection, cmd) { + if (!target) return this.parse(`/help hidetext`); + + this.splitTarget(target); + let targetUser = this.targetUser; + let name = this.targetUsername; + if (!targetUser && !room.log.hasUsername(target)) return this.errorReply(`User ${target} not found or has no roomlogs.`); + if (!targetUser && !user.can('lock')) return this.errorReply(`User ${name} not found.`); + let userid = toId(this.inputUsername); + if (!this.can('mute', targetUser, room)) return; + + if (targetUser && (cmd === 'hidealtstext' || cmd === 'hidetextalts' || cmd === 'hidealttext')) { + room.sendByUser(user, `${name}'s alts messages were cleared from ${room.title} by ${user.name}.`); + + this.modlog('HIDEALTSTEXT', targetUser, null, {noip: 1}); + room.hideText([ + userid, + ...Object.keys(targetUser.prevNames), + ...targetUser.getAltUsers(true).map(user => user.getLastId()), + ]); + } else { + room.sendByUser(user, `${name}'s messages were cleared from ${room.title} by ${user.name}.`); + this.modlog('HIDETEXT', targetUser || userid, null, {noip: 1, noalts: 1}); + room.hideText([userid]); + } + }, + hidetexthelp: [ + `/hidetext [username] - Removes a user's messages from chat. Requires: % @ # & ~`, + `/hidealtstext [username] - Removes a user's messages, and their alternate account's messages from the chat. Requires: % @ # & ~`, + ], + + ab: 'blacklist', + blacklist(target, room, user) { + if (!target) return this.parse('/help blacklist'); + if (!this.canTalk()) return; + if (toId(target) === 'show') return this.errorReply(`You're looking for /showbl`); + + target = this.splitTarget(target); + const targetUser = this.targetUser; + if (!targetUser) { + this.errorReply(`User ${this.targetUsername} not found.`); + return this.errorReply(`If you want to blacklist an offline account by name (not IP), consider /blacklistname`); + } + if (!this.can('editroom', targetUser, room)) return false; + if (!room.chatRoomData) { + return this.errorReply(`This room is not going to last long enough for a blacklist to matter - just ban the user`); + } + let punishment = Punishments.isRoomBanned(targetUser, room.id); + if (punishment && punishment[0] === 'BLACKLIST') { + return this.errorReply(`This user is already blacklisted from this room.`); + } + + if (!target && REQUIRE_REASONS) { + return this.errorReply(`Blacklists require a reason.`); + } + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + const name = targetUser.getLastName(); + const userid = targetUser.getLastId(); + + if (targetUser.trusted && room.isPrivate !== true) { + Monitor.log(`[CrisisMonitor] Trusted user ${targetUser.name}${(targetUser.trusted !== targetUser.userid ? ` (${targetUser.trusted})` : '')} was blacklisted from ${room.id} by ${user.name}, and should probably be demoted.`); + } + + if (targetUser in room.users || user.can('lock')) { + targetUser.popup( + `|modal||html|

    ${Chat.escapeHTML(user.name)} has blacklisted you from the room ${room.id}${(room.subRooms ? ` and its subrooms` : '')}. Reason: ${Chat.escapeHTML(target)}

    ` + + `

    To appeal the ban, PM the staff member that blacklisted you${(!room.battle && room.auth ? ` or a room owner.

    ` : `.

    `)}` + ); + } + + this.privateModAction(`(${name} was blacklisted from ${room.title} by ${user.name}. ${(target ? ` (${target})` : '')})`); + + let affected = Punishments.roomBlacklist(room, targetUser, null, null, target); + + if (!room.isPrivate && room.chatRoomData) { + let acAccount = (targetUser.autoconfirmed !== userid && targetUser.autoconfirmed); + let displayMessage = ''; + if (affected.length > 1) { + displayMessage = `(${name}'s ${(acAccount ? ` ac account: ${acAccount},` : '')} blacklisted alts: ${affected.slice(1).map(user => user.getLastName()).join(", ")})`; + this.privateModAction(displayMessage); + } else if (acAccount) { + displayMessage = `(${name}'s ac account: ${acAccount})`; + this.privateModAction(displayMessage); + } + } + + if (!room.isPrivate && room.chatRoomData) { + this.globalModlog("BLACKLIST", targetUser, ` by ${user.userid}${(target ? `: ${target}` : '')}`); + } else { + // Room modlog only + this.modlog("BLACKLIST", targetUser, ` by ${user.userid}${(target ? `: ${target}` : '')}`); + } + return true; + }, + blacklisthelp: [ + `/blacklist [username], [reason] - Blacklists the user from the room you are in for a year. 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', + battleban(target, room, user, connection, cmd) { + if (!target) return this.parse(`/help battleban`); + + const reason = this.splitTarget(target); + const targetUser = this.targetUser; + if (!targetUser) return this.errorReply(`User ${this.targetUsername} not found.`); + if (target.length > MAX_REASON_LENGTH) { + return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); + } + if (!reason) { + return this.errorReply(`Battle bans require a reason.`); + } + const includesUrl = reason.includes('.pokemonshowdown.com/'); // lgtm [js/incomplete-url-substring-sanitization] + if (!room.battle && !includesUrl && cmd !== 'forcebattleban') { + return this.errorReply(`Battle bans require a battle replay if used outside of a battle; if the battle has expired, use /forcebattleban.`); + } + if (!this.can('rangeban', targetUser)) { + this.errorReply(`Battlebans have been deprecated. Alternatives:`); + this.errorReply(`- timerstalling and bragging about it: lock`); + this.errorReply(`- other timerstalling: they're not timerstalling, leave them alone`); + this.errorReply(`- bad nicknames: lock, locks prevent nicknames from appearing; you should always have been locking for this`); + this.errorReply(`- ladder cheating: gban, get a moderator if necessary`); + this.errorReply(`- serious ladder cheating: permaban, get a leader`); + this.errorReply(`- other: get a leader`); + return; + } + if (Punishments.isBattleBanned(targetUser)) return this.errorReply(`User '${targetUser.name}' is already banned from battling.`); + + const reasonText = reason ? ` (${reason})` : `.`; + const battlebanMessage = `${targetUser.name} was banned from starting new battles by ${user.name}${reasonText}`; + this.privateModAction(`(${battlebanMessage})`); + + // Notify staff room when a user is banned from battling outside of it. + if (room.id !== 'staff' && Rooms('staff')) { + Rooms('staff').addByUser(user, `<<${room.id}>> ${battlebanMessage}`); + } + if (targetUser.trusted) { + Monitor.log(`[CrisisMonitor] Trusted user ${targetUser.name} was banned from battling by ${user.name}, and should probably be demoted.`); + } + + this.globalModlog("BATTLEBAN", targetUser, ` by ${user.userid}${reasonText}`); + Ladders.cancelSearches(targetUser); + Punishments.battleban(targetUser, null, null, reason); + targetUser.popup(`|modal|${user.name} has prevented you from starting new battles for 2 days${reasonText}`); + + // Automatically upload replays as evidence/reference to the punishment + if (room.battle) this.parse('/savereplay'); + return true; + }, + battlebanhelp: [`/battleban [username], [reason] - [DEPRECATED] Prevents the user from starting new battles for 2 days and shows them the [reason]. Requires: & ~`], + + unbattleban(target, room, user) { + if (!target) return this.parse('/help unbattleban'); + if (!this.can('lock')) return; + + const targetUser = Users.get(target); + const unbanned = Punishments.unbattleban(target); + + if (unbanned) { + this.addModAction(`${unbanned} was allowed to battle again by ${user.name}.`); + this.globalModlog("UNBATTLEBAN", toId(target), `by ${user.name}`); + if (targetUser) targetUser.popup(`${user.name} has allowed you to battle again.`); + } else { + this.errorReply(`User ${target} is not banned from battling.`); + } + }, + unbattlebanhelp: [`/unbattleban [username] - [DEPRECATED] Allows a user to battle again. Requires: % @ & ~`], + + nameblacklist: 'blacklistname', + blacklistname(target, room, user) { + if (!target) return this.parse('/help blacklistname'); + if (!this.canTalk()) return; + if (!this.can('editroom', null, room)) return false; + if (!room.chatRoomData) { + return this.errorReply("This room is not going to last long enough for a blacklist to matter - just ban the user"); + } + + let [targetStr, reason] = target.split('|').map(val => val.trim()); + if (!targetStr || (!reason && REQUIRE_REASONS)) { + return this.errorReply("Usage: /blacklistname name1, name2, ... | reason"); + } + + let targets = targetStr.split(',').map(s => toId(s)); + + let duplicates = targets.filter(userid => { + let punishment = Punishments.roomUserids.nestedGet(room.id, userid); + return punishment && punishment[0] === 'BLACKLIST'; + }); + if (duplicates.length) { + return this.errorReply(`[${duplicates.join(', ')}] ${Chat.plural(duplicates, "are", "is")} already blacklisted.`); + } + + const userRank = Config.groupsranking.indexOf(room.getAuth(user)); + for (const userid of targets) { + if (!userid) return this.errorReply(`User '${userid}' is not a valid userid.`); + const targetRank = Config.groupsranking.indexOf(room.getAuth({userid})); + if (targetRank >= userRank) return this.errorReply(`/blacklistname - Access denied: ${userid} is of equal or higher authority than you.`); + + Punishments.roomBlacklist(room, null, null, userid, reason); + + const trusted = Users.isTrusted(userid); + if (trusted && room.isPrivate !== true) { + Monitor.log(`[CrisisMonitor] Trusted user ${userid}${(trusted !== userid ? ` (${trusted})` : ``)} was nameblacklisted from ${room.id} by ${user.name}, and should probably be demoted.`); + } + if (!room.isPrivate && room.chatRoomData) { + this.globalModlog("NAMEBLACKLIST", userid, ` by ${user.userid}${(reason ? `: ${reason}` : '')}`); + } + } + + this.privateModAction(`(${targets.join(', ')}${Chat.plural(targets, " were", " was")} nameblacklisted from ${room.title} by ${user.name}.)`); + return true; + }, + blacklistnamehelp: [`/blacklistname OR /nameblacklist [username1, username2, etc.] | reason - Blacklists the given username(s) from the room you are in for a year. Requires: # & ~`], + + unab: 'unblacklist', + unblacklist(target, room, user) { + if (!target) return this.parse('/help unblacklist'); + if (!this.can('editroom', null, room)) return false; + + const name = Punishments.roomUnblacklist(room, target); + + if (name) { + this.privateModAction(`(${name} was unblacklisted by ${user.name}.)`); + if (!room.isPrivate && room.chatRoomData) { + this.globalModlog("UNBLACKLIST", name, ` by ${user.userid}`); + } + } else { + this.errorReply(`User '${target}' is not blacklisted.`); + } + }, + unblacklisthelp: [`/unblacklist [username] - Unblacklists the user from the room you are in. Requires: # & ~`], + + unblacklistall(target, room, user) { + if (!this.can('editroom', null, room)) return false; + + if (!target) { + user.lastCommand = '/unblacklistall'; + this.errorReply("THIS WILL UNBLACKLIST ALL BLACKLISTED USERS IN THIS ROOM."); + this.errorReply("To confirm, use: /unblacklistall confirm"); + return; + } + if (user.lastCommand !== '/unblacklistall' || target !== 'confirm') { + return this.parse('/help unblacklistall'); + } + user.lastCommand = ''; + let unblacklisted = Punishments.roomUnblacklistAll(room); + if (!unblacklisted) return this.errorReply("No users are currently blacklisted in this room to unblacklist."); + this.addModAction(`All blacklists in this room have been lifted by ${user.name}.`); + this.modlog('UNBLACKLISTALL'); + this.roomlog(`Unblacklisted users: ${unblacklisted.join(', ')}`); + }, + unblacklistallhelp: [`/unblacklistall - Unblacklists all blacklisted users in the current room. Requires #, &, ~`], + + expiringbls: 'showblacklist', + expiringblacklists: 'showblacklist', + blacklists: 'showblacklist', + showbl: 'showblacklist', + showblacklist(target, room, user, connection, cmd) { + if (target) room = Rooms.search(target); + if (!room) return this.errorReply(`The room "${target}" was not found.`); + if (!this.can('mute', null, room)) return false; + const SOON_EXPIRING_TIME = 3 * 30 * 24 * 60 * 60 * 1000; // 3 months + + if (!room.chatRoomData) return this.errorReply("This room does not support blacklists."); + + const subMap = Punishments.roomUserids.get(room.id); + if (!subMap || subMap.size === 0) { + return this.sendReply("This room has no blacklisted users."); + } + let blMap = new Map(); + let ips = ''; + + subMap.forEach((punishment, userid) => { + const [punishType, id, expireTime] = punishment; + if (punishType === 'BLACKLIST') { + if (!blMap.has(id)) blMap.set(id, [expireTime]); + if (id !== userid) blMap.get(id).push(userid); + } + }); + + if (user.can('ban')) { + const subMap = Punishments.roomIps.get(room.id); + + if (subMap) { + ips = '/ips'; + subMap.forEach((punishment, ip) => { + const [punishType, id] = punishment; + if (punishType === 'BLACKLIST') { + if (!blMap.has(id)) blMap.set(id, []); + blMap.get(id).push(ip); + } + }); + } + } + + let soonExpiring = (cmd === 'expiringblacklists' || cmd === 'expiringbls'); + let buf = Chat.html`Blacklist for ${room.title}${soonExpiring ? ` (expiring within 3 months)` : ''}:
    `; + + blMap.forEach((data, userid) => { + const [expireTime, ...alts] = data; + if (soonExpiring && expireTime > Date.now() + SOON_EXPIRING_TIME) return; + const expiresIn = new Date(expireTime).getTime() - Date.now(); + const expiresDays = Math.round(expiresIn / 1000 / 60 / 60 / 24); + buf += `- ${userid}, for ${Chat.count(expiresDays, "days")}`; + if (alts.length) buf += `, alts${ips}: ${alts.join(', ')}`; + buf += `
    `; + }); + + 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: % @ # & ~`, + ], + + markshared(target, room, user) { + if (!target) return this.parse('/help markshared'); + if (!this.can('ban')) return false; + let [ip, note] = this.splitOne(target); + if (!/^[0-9.*]+$/.test(ip)) return this.errorReply("Please enter a valid IP address."); + + if (Punishments.sharedIps.has(ip)) return this.errorReply("This IP is already marked as shared."); + if (!note) { + this.errorReply(`You must specify who owns this shared IP.`); + this.parse(`/help markshared`); + return; + } + + Punishments.addSharedIp(ip, note); + note = ` (${note})`; + this.globalModlog('SHAREDIP', ip, ` by ${user.name}${note}`); + + const message = `The IP '${ip}' was marked as shared by ${user.name}.${note}`; + const staffRoom = Rooms('staff'); + if (staffRoom) return staffRoom.addByUser(user, message); + + return this.addModAction(message); + }, + 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 @, &, ~`], + + unmarkshared(target, room, user) { + if (!target) return this.parse('/help unmarkshared'); + if (!this.can('ban')) return false; + if (!/^[0-9.*]+$/.test(target)) return this.errorReply("Please enter a valid IP address."); + + if (!Punishments.sharedIps.has(target)) return this.errorReply("This IP isn't marked as shared."); + + Punishments.removeSharedIp(target); + this.globalModlog('UNSHAREIP', target, ` by ${user.name}`); + return this.addModAction(`The IP '${target}' was unmarked as shared by ${user.name}.`); + }, + unmarksharedhelp: [`/unmarkshared [ip] - Unmarks a shared IP address. Requires @, &, ~`], + + /********************************************************* + * Server management commands + *********************************************************/ + + async hotpatch(target, room, user) { + if (!target) return this.parse('/help hotpatch'); + if (!this.can('hotpatch')) return; + + const lock = Monitor.hotpatchLock; + const hotpatches = ['chat', 'formats', 'loginserver', 'punishments', 'dnsbl']; + + try { + if (target === 'all') { + if (lock['all']) return this.errorReply(`Hot-patching all has been disabled by ${lock['all'].by} (${lock['all'].reason})`); + if (Config.disablehotpatchall) return this.errorReply("This server does not allow for the use of /hotpatch all"); + + for (const hotpatch of hotpatches) { + this.parse(`/hotpatch ${hotpatch}`); + } + } else if (target === 'chat' || target === 'commands') { + if (lock['chat']) return this.errorReply(`Hot-patching chat has been disabled by ${lock['chat'].by} (${lock['chat'].reason})`); + if (lock['tournaments']) return this.errorReply(`Hot-patching tournaments has been disabled by ${lock['tournaments'].by} (${lock['tournaments'].reason})`); + + Chat.destroy(); + + const processManagers = require('../.lib-dist/process-manager').processManagers; + for (let manager of processManagers.slice()) { + if (manager.filename.startsWith(FS('server/chat-plugins').path)) { + manager.destroy(); + } + } + + Chat.uncache('./server/chat'); + Chat.uncache('./server/chat-commands'); + Chat.uncacheDir('./server/chat-plugins'); + Chat.uncacheDir('./translations'); + global.Chat = require('./chat'); + + let runningTournaments = Tournaments.tournaments; + Chat.uncacheDir('./server/tournaments'); + global.Tournaments = require('./tournaments'); + Tournaments.tournaments = runningTournaments; + this.sendReply("Chat commands have been hot-patched."); + } else if (target === 'tournaments') { + if (lock['tournaments']) return this.errorReply(`Hot-patching tournaments has been disabled by ${lock['tournaments'].by} (${lock['tournaments'].reason})`); + + let runningTournaments = Tournaments.tournaments; + Chat.uncacheDir('./server/tournaments'); + global.Tournaments = require('./tournaments'); + Tournaments.tournaments = runningTournaments; + this.sendReply("Tournaments have been hot-patched."); + } else if (target === 'formats' || target === 'battles') { + if (lock['formats']) return this.errorReply(`Hot-patching formats has been disabled by ${lock['formats'].by} (${lock['formats'].reason})`); + if (lock['battles']) return this.errorReply(`Hot-patching battles has been disabled by ${lock['battles'].by} (${lock['battles'].reason})`); + if (lock['validator']) return this.errorReply(`Hot-patching the validator has been disabled by ${lock['validator'].by} (${lock['validator'].reason})`); + + // uncache the .sim-dist/dex.js dependency tree + this.sendReply('Rebuilding...'); + await new Promise(resolve => { + require('child_process').exec('../build', {cwd: __dirname}, resolve); + }); + Chat.uncacheDir('./.sim-dist'); + Chat.uncacheDir('./data'); + Chat.uncache('./config/formats'); + // reload .sim-dist/dex.js + global.Dex = require('../.sim-dist/dex'); + // rebuild the formats list + delete Rooms.global.formatList; + // respawn validator processes + TeamValidatorAsync.PM.respawn(); + // respawn simulator processes + Rooms.PM.respawn(); + // broadcast the new formats list to clients + Rooms.global.send(Rooms.global.formatListText); + + this.sendReply("Formats have been hot-patched."); + } else if (target === 'loginserver') { + FS('config/custom.css').unwatch(); + Chat.uncache('./server/loginserver'); + global.LoginServer = require('./loginserver'); + this.sendReply("The login server has been hot-patched. New login server requests will use the new code."); + } else if (target === 'learnsets' || target === 'validator') { + if (lock['validator']) return this.errorReply(`Hot-patching the validator has been disabled by ${lock['validator'].by} (${lock['validator'].reason})`); + if (lock['formats']) return this.errorReply(`Hot-patching formats has been disabled by ${lock['formats'].by} (${lock['formats'].reason})`); + + TeamValidatorAsync.PM.respawn(); + this.sendReply("The team validator has been hot-patched. Any battles started after now will have teams be validated according to the new code."); + } else if (target === 'punishments') { + if (lock['punishments']) return this.errorReply(`Hot-patching punishments has been disabled by ${lock['punishments'].by} (${lock['punishments'].reason})`); + + Chat.uncache('./server/punishments'); + global.Punishments = require('./punishments'); + this.sendReply("Punishments have been hot-patched."); + } else if (target === 'dnsbl' || target === 'datacenters') { + Dnsbl.loadDatacenters(); + this.sendReply("Dnsbl has been hot-patched."); + } else if (target.startsWith('disable')) { + this.sendReply("Disabling hot-patch has been moved to its own command:"); + return this.parse('/help nohotpatch'); + } else { + return this.errorReply("Your hot-patch command was unrecognized."); + } + } catch (e) { + Rooms.global.notifyRooms(['development', 'staff', 'upperstaff'], `|c|${user.getIdentity()}|/log ${user.name} used /hotpatch ${target} - but something failed while trying to hot-patch.`); + return this.errorReply(`Something failed while trying to hot-patch ${target}: \n${e.stack}`); + } + Rooms.global.notifyRooms(['development', 'staff', 'upperstaff'], `|c|${user.getIdentity()}|/log ${user.name} used /hotpatch ${target}`); + }, + hotpatchhelp: [ + `Hot-patching the game engine allows you to update parts of Showdown without interrupting currently-running battles. Requires: ~`, + `Hot-patching has greater memory requirements than restarting`, + `You can disable various hot-patches with /nohotpatch. For more information on this, see /help nohotpatch`, + `/hotpatch chat - reload chat-commands.js and the chat-plugins`, + `/hotpatch validator - spawn new team validator processes`, + `/hotpatch formats - reload the .sim-dist/dex.js tree, rebuild and rebroad the formats list, and spawn new simulator and team validator processes`, + `/hotpatch dnsbl - reloads Dnsbl datacenters`, + `/hotpatch punishments - reloads new punishments code`, + `/hotpatch tournaments - reloads new tournaments code`, + `/hotpatch all - hot-patches chat, tournaments, formats, login server, punishments, and dnsbl`, + ], + + hotpatchlock: 'nohotpatch', + nohotpatch(target, room, user) { + if (!this.can('declare')) return; + if (!target) return this.parse('/help nohotpatch'); + + const separator = ' '; + + const hotpatch = toId(target.substr(0, target.indexOf(separator))); + const reason = target.substr(target.indexOf(separator), target.length).trim(); + if (!reason || !target.includes(separator)) return this.parse('/help nohotpatch'); + + let lock = Monitor.hotpatchLock; + const validDisable = ['chat', 'battles', 'formats', 'validator', 'tournaments', 'punishments', 'all']; + + if (validDisable.includes(hotpatch)) { + if (lock[hotpatch]) return this.errorReply(`Hot-patching ${hotpatch} has already been disabled by ${lock[hotpatch].by} (${lock[hotpatch].reason})`); + lock[hotpatch] = { + by: user.name, + reason: reason, + }; + this.sendReply(`You have disabled hot-patching ${hotpatch}.`); + } else { + return this.errorReply("This hot-patch is not an option to disable."); + } + Rooms.global.notifyRooms(['development', 'staff', 'upperstaff'], `|c|${user.getIdentity()}|/log ${user.name} has disabled hot-patching ${hotpatch}. Reason: ${reason}`); + }, + nohotpatchhelp: [`/nohotpatch [chat|formats|battles|validator|tournaments|punishments|all] [reason] - Disables hotpatching the specified part of the simulator. Requires: & ~`], + + savelearnsets(target, room, user) { + if (!this.can('hotpatch')) return false; + this.sendReply("saving..."); + FS('data/learnsets.js').write(`'use strict';\n\nexports.BattleLearnsets = {\n` + + Object.entries(Dex.data.Learnsets).map(([k, v]) => ( + `\t${k}: {learnset: {\n` + + Object.entries(v.learnset).sort( + (a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0) + ).map(([k, v]) => ( + `\t\t${k}: ["` + v.join(`", "`) + `"],\n` + )).join('') + + `\t}},\n` + )).join('') + + `};\n`).then(() => { + this.sendReply("learnsets.js saved."); + }); + }, + + widendatacenters: 'adddatacenters', + adddatacenters(target, room, user, connection, cmd) { + if (!this.can('hotpatch')) return false; + // should be in the format: IP, IP, name, URL + let widen = (cmd === 'widendatacenters'); + + FS('config/datacenters.csv').readIfExists().then(data => { + let datacenters = []; + for (const row of data.split("\n")) { + if (!row) continue; + const rowSplit = row.split(','); + const rowData = [ + Dnsbl.ipToNumber(rowSplit[0]), + Dnsbl.ipToNumber(rowSplit[1]), + Dnsbl.urlToHost(rowSplit[3]), + row, + ]; + datacenters.push(rowData); + } + + data = String(target).split("\n"); + let successes = 0; + let identicals = 0; + let widenSuccesses = 0; + for (const row of data) { + if (!row) continue; + let rowSplit = row.split(','); + let rowData = [ + Dnsbl.ipToNumber(rowSplit[0]), + Dnsbl.ipToNumber(rowSplit[1]), + Dnsbl.urlToHost(rowSplit[3]), + row, + ]; + if (rowData[1] < rowData[0]) { + this.errorReply(`Invalid range: ${row}`); + continue; + } + + let iMin = 0; + let iMax = datacenters.length; + while (iMin < iMax) { + let i = Math.floor((iMax + iMin) / 2); + if (rowData[0] > datacenters[i][0]) { + iMin = i + 1; + } else { + iMax = i; + } + } + if (iMin < datacenters.length) { + let next = datacenters[iMin]; + if (rowData[0] === next[0] && rowData[1] === next[1]) { + identicals++; + continue; + } + if (rowData[0] <= next[0] && rowData[1] >= next[1]) { + if (widen === true) { + widenSuccesses++; + datacenters.splice(iMin, 1, rowData); + continue; + } + this.errorReply(`Too wide: ${row}`); + this.errorReply(`Intersects with: ${next[3]}`); + continue; + } + if (rowData[1] >= next[0]) { + this.errorReply(`Could not insert: ${row}`); + this.errorReply(`Intersects with: ${next[3]}`); + continue; + } + } + if (iMin > 0) { + let prev = datacenters[iMin - 1]; + if (rowData[0] >= prev[0] && rowData[1] <= prev[1]) { + this.errorReply(`Too narrow: ${row}`); + this.errorReply(`Intersects with: ${prev[3]}`); + continue; + } + if (rowData[0] <= prev[1]) { + this.errorReply(`Could not insert: ${row}`); + this.errorReply(`Intersects with: ${prev[3]}`); + continue; + } + } + successes++; + datacenters.splice(iMin, 0, rowData); + } + + let output = datacenters.map(r => r[3]).join('\n') + '\n'; + FS('config/datacenters.csv').write(output); + this.sendReply(`Done: ${successes} successes, ${identicals} unchanged.`); + if (widenSuccesses) this.sendReply(`${widenSuccesses} widens.`); + }); + }, + + disableladder(target, room, user) { + if (!this.can('disableladder')) return false; + if (Ladders.disabled) { + return this.errorReply(`/disableladder - Ladder is already disabled.`); + } + + Ladders.disabled = true; + + this.modlog(`DISABLELADDER`); + Monitor.log(`The ladder was disabled by ${user.name}.`); + + const innerHTML = ( + `Due to technical difficulties, the ladder has been temporarily disabled.
    ` + + `Rated games will no longer update the ladder. It will be back momentarily.` + ); + + Rooms.rooms.forEach((curRoom, id) => { + if (curRoom.type === 'battle') curRoom.rated = false; + if (id !== 'global') curRoom.addRaw(`
    ${innerHTML}
    `).update(); + }); + Users.users.forEach(u => { + if (u.connected) u.send(`|pm|~|${u.group}${u.name}|/raw
    ${innerHTML}
    `); + }); + }, + + enableladder(target, room, user) { + if (!this.can('disableladder')) return false; + if (!Ladders.disabled) { + return this.errorReply(`/enable - Ladder is already enabled.`); + } + Ladders.disabled = false; + + this.modlog('ENABLELADDER'); + Monitor.log(`The ladder was enabled by ${user.name}.`); + + const innerHTML = ( + `The ladder is now back.
    ` + + `Rated games will update the ladder now..` + ); + + Rooms.rooms.forEach((curRoom, id) => { + if (id !== 'global') curRoom.addRaw(`
    ${innerHTML}
    `).update(); + }); + Users.users.forEach(u => { + if (u.connected) u.send(`|pm|~|${u.group}${u.name}|/raw
    ${innerHTML}
    `); + }); + }, + + lockdown(target, room, user) { + if (!this.can('lockdown')) return false; + + Rooms.global.startLockdown(); + + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${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: ~`], + + autolockdown: 'autolockdownkill', + autolockdownkill(target, room, user) { + if (!this.can('lockdown')) return false; + if (Config.autolockdown === undefined) Config.autolockdown = true; + + if (this.meansYes(target)) { + if (Config.autolockdown) return this.errorReply("The server is already set to automatically kill itself upon the final battle finishing."); + Config.autolockdown = true; + this.sendReply("The server is now set to automatically kill itself upon the final battle finishing."); + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /autolockdownkill on`); + } else if (this.meansNo(target)) { + if (!Config.autolockdown) return this.errorReply("The server is already set to not automatically kill itself upon the final battle finishing."); + Config.autolockdown = false; + this.sendReply("The server is now set to not automatically kill itself upon the final battle finishing."); + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /autolockdownkill off`); + } else { + return this.parse('/help autolockdownkill'); + } + }, + 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 ~`, + ], + + prelockdown(target, room, user) { + if (!this.can('lockdown')) return false; + Rooms.global.lockdown = 'pre'; + this.sendReply("Tournaments have been disabled in preparation for the server restart."); + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /prelockdown`); + }, + + slowlockdown(target, room, user) { + if (!this.can('lockdown')) return false; + + Rooms.global.startLockdown(undefined, true); + + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /slowlockdown`); + }, + + endlockdown(target, room, user) { + if (!this.can('lockdown')) return false; + + if (!Rooms.global.lockdown) { + return this.errorReply("We're not under lockdown right now."); + } + if (Rooms.global.lockdown === true) { + Rooms.rooms.forEach((curRoom, id) => { + if (id !== 'global') curRoom.addRaw(`
    The server restart was canceled.
    `).update(); + }); + } else { + this.sendReply("Preparation for the server shutdown was canceled."); + } + Rooms.global.lockdown = false; + + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /endlockdown`); + }, + + emergency(target, room, user) { + if (!this.can('lockdown')) return false; + + if (Config.emergency) { + return this.errorReply("We're already in emergency mode."); + } + Config.emergency = true; + Rooms.rooms.forEach((curRoom, id) => { + if (id !== 'global') curRoom.addRaw(`
    The server has entered emergency mode. Some features might be disabled or limited.
    `).update(); + }); + + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /emergency.`); + }, + + endemergency(target, room, user) { + if (!this.can('lockdown')) return false; + + if (!Config.emergency) { + return this.errorReply("We're not in emergency mode."); + } + Config.emergency = false; + Rooms.rooms.forEach((curRoom, id) => { + if (id !== 'global') curRoom.addRaw(`
    The server is no longer in emergency mode.
    `).update(); + }); + + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /endemergency.`); + }, + + kill(target, room, user) { + if (!this.can('lockdown')) return false; + + if (Rooms.global.lockdown !== true) { + return this.errorReply("For safety reasons, /kill can only be used during lockdown."); + } + + if (Chat.updateServerLock) { + return this.errorReply("Wait for /updateserver to finish before using /kill."); + } + + Sockets.workers.forEach(worker => worker.kill()); + + if (!room.destroyLog) { + process.exit(); + return; + } + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /kill`); + room.destroyLog(() => { + process.exit(); + }); + + // Just in the case the above never terminates, kill the process + // after 10 seconds. + setTimeout(() => { + process.exit(); + }, 10000); + }, + killhelp: [`/kill - kills the server. Can't be done unless the server is in lockdown state. Requires: ~`], + + loadbanlist(target, room, user, connection) { + if (!this.can('hotpatch')) return false; + + connection.sendTo(room, "Loading ipbans.txt..."); + Punishments.loadBanlist().then( + () => connection.sendTo(room, "ipbans.txt has been reloaded."), + error => connection.sendTo(room, `Something went wrong while loading ipbans.txt: ${error}`) + ); + }, + loadbanlisthelp: [`/loadbanlist - Loads the bans located at ipbans.txt. The command is executed automatically at startup. Requires: ~`], + + refreshpage(target, room, user) { + if (!this.can('hotpatch')) return false; + Rooms.global.send('|refresh|'); + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /refreshpage`); + }, + + async updateserver(target, room, user, connection) { + if (!user.can('hotpatch')) { + return this.errorReply(`/updateserver - Access denied.`); + } + + if (Chat.updateServerLock) { + return this.errorReply(`/updateserver - Another update is already in progress (or a previous update crashed).`); + } + + Chat.updateServerLock = true; + + const logRoom = Rooms('staff') || room; + + /** @return {Promise<[number, string, string]>} */ + function exec(/** @type {string} */ command) { + logRoom.roomlog(`$ ${command}`); + return new Promise((resolve, reject) => { + require('child_process').exec(command, (error, stdout, stderr) => { + let log = `[o] ${stdout}[e] ${stderr}`; + if (error) log = `[c] ${error.code}\n${log}`; + logRoom.roomlog(log); + resolve([error && error.code || 0, stdout, stderr]); + }); + }); + } + + this.sendReply(`Fetching newest version...`); + logRoom.roomlog(`${user.name} used /updateserver`); + + let [code, stdout, stderr] = await exec(`git fetch`); + if (code) throw new Error(`updateserver: Crash while fetching - make sure this is a Git repository`); + if (!stdout && !stderr) { + Chat.updateServerLock = false; + return this.sendReply(`There were no updates.`); + } + + [code, stdout, stderr] = await exec(`git rev-parse HEAD`); + if (code || stderr) throw new Error(`updateserver: Crash while grabbing hash`); + const oldHash = String(stdout).trim(); + + [code, stdout, stderr] = await exec(`git stash save --include-untracked "PS /updateserver autostash"`); + let stashedChanges = true; + if (code) throw new Error(`updateserver: Crash while stashing`); + if ((stdout + stderr).includes("No local changes")) { + stashedChanges = false; + } else if (stderr) { + throw new Error(`updateserver: Crash while stashing`); + } else { + this.sendReply(`Saving changes...`); + } + + // errors can occur while rebasing or popping the stash; make sure to recover + try { + this.sendReply(`Rebasing...`); + [code] = await exec(`git rebase FETCH_HEAD`); + if (code) { + // conflict while rebasing + await exec(`git rebase --abort`); + throw new Error(`restore`); + } + + if (stashedChanges) { + this.sendReply(`Restoring saved changes...`); + [code] = await exec(`git stash pop`); + if (code) { + // conflict while popping stash + await exec(`git reset HEAD .`); + await exec(`git checkout .`); + throw new Error(`restore`); + } + } + + this.sendReply(`SUCCESSFUL, server updated.`); + } catch (e) { + // failed while rebasing or popping the stash + await exec(`git reset --hard ${oldHash}`); + await exec(`git stash pop`); + this.sendReply(`FAILED, old changes restored.`); + } + Chat.updateServerLock = false; + }, + + crashfixed(target, room, user) { + if (Rooms.global.lockdown !== true) { + return this.errorReply('/crashfixed - There is no active crash.'); + } + if (!this.can('hotpatch')) return false; + + Rooms.global.lockdown = false; + if (Rooms.lobby) { + Rooms.lobby.modchat = false; + Rooms.lobby.addRaw(`
    We fixed the crash without restarting the server!
    You may resume talking in the Lobby and starting new battles.
    `).update(); + } + const logRoom = Rooms('staff') || room; + logRoom.roomlog(`${user.name} used /crashfixed`); + }, + crashfixedhelp: [`/crashfixed - Ends the active lockdown caused by a crash without the need of a restart. Requires: ~`], + + memusage: 'memoryusage', + memoryusage(target) { + if (!this.can('hotpatch')) return false; + let memUsage = process.memoryUsage(); + let results = [memUsage.rss, memUsage.heapUsed, memUsage.heapTotal]; + let units = ["B", "KiB", "MiB", "GiB", "TiB"]; + for (let i = 0; i < results.length; i++) { + let unitIndex = Math.floor(Math.log2(results[i]) / 10); // 2^10 base log + results[i] = `${(results[i] / Math.pow(2, 10 * unitIndex)).toFixed(2)} ${units[unitIndex]}`; + } + this.sendReply(`||[Main process] RSS: ${results[0]}, Heap: ${results[1]} / ${results[2]}`); + }, + + bash(target, room, user, connection) { + if (!user.hasConsoleAccess(connection)) { + return this.errorReply("/bash - Access denied."); + } + if (!target) return this.parse('/help bash'); + + connection.sendTo(room, `$ ${target}`); + require('child_process').exec(target, (error, stdout, stderr) => { + connection.sendTo(room, (`${stdout}${stderr}`)); + }); + }, + bashhelp: [`/bash [command] - Executes a bash command on the server. Requires: ~ console access`], + + async eval(target, room, user, connection) { + if (!user.hasConsoleAccess(connection)) { + return this.errorReply("/eval - Access denied."); + } + if (!this.runBroadcast(true)) return; + + if (!this.broadcasting) this.sendReply(`||>> ${target}`); + try { + /* eslint-disable no-unused-vars */ + let battle = room.battle; + let me = user; + let result = eval(target); + if (result && result.then) { + result = `Promise -> ${Chat.stringify(await result)}`; + } else { + result = Chat.stringify(result); + } + result = result.replace(/\n/g, '\n||'); + this.sendReply('||<< ' + result); + /* eslint-enable no-unused-vars */ + } catch (e) { + const message = ('' + e.stack).replace(/\n *at CommandContext\.eval [\s\S]*/m, '').replace(/\n/g, '\n||'); + this.sendReply(`|| << ${message}`); + } + }, + + evalbattle(target, room, user, connection) { + if (!user.hasConsoleAccess(connection)) { + return this.errorReply("/evalbattle - Access denied."); + } + if (!this.runBroadcast(true)) return; + if (!room.battle) { + return this.errorReply("/evalbattle - This isn't a battle room."); + } + + room.battle.stream.write(`>eval ${target.replace(/\n/g, '\f')}`); + }, + + ebat: 'editbattle', + editbattle(target, room, user) { + if (!this.can('forcewin')) return false; + if (!target) return this.parse('/help editbattle'); + if (!room.battle) { + this.errorReply("/editbattle - This is not a battle room."); + return false; + } + let cmd; + let spaceIndex = target.indexOf(' '); + if (spaceIndex > 0) { + cmd = target.substr(0, spaceIndex).toLowerCase(); + target = target.substr(spaceIndex + 1); + } else { + cmd = target.toLowerCase(); + target = ''; + } + if (cmd.charAt(cmd.length - 1) === ',') cmd = cmd.slice(0, -1); + let targets = target.split(','); + function getPlayer(input) { + let player = room.battle.players[toId(input)]; + if (player) return player.slot; + if (input.includes('1')) return 'p1'; + if (input.includes('2')) return 'p2'; + return 'p3'; + } + function getPokemon(input) { + if (/^[0-9]+$/.test(input)) { + return `.pokemon[${(parseInt(input) - 1)}]`; + } + return `.pokemon.find(p => p.speciesid==='${toId(targets[1])}')`; + } + switch (cmd) { + case 'hp': + case 'h': + room.battle.stream.write(`>eval let p=${getPlayer(targets[0]) + getPokemon(targets[1])};p.sethp(${parseInt(targets[2])});if (p.isActive)battle.add('-damage',p,p.getHealth);`); + break; + case 'status': + case 's': + room.battle.stream.write(`>eval let pl=${getPlayer(targets[0])};let p=pl${getPokemon(targets[1])};p.setStatus('${toId(targets[2])}');if (!p.isActive){battle.add('','please ignore the above');battle.add('-status',pl.active[0],pl.active[0].status,'[silent]');}`); + break; + case 'pp': + room.battle.stream.write(`>eval let pl=${getPlayer(targets[0])};let p=pl${getPokemon(targets[1])};p.moveSlots[p.moves.indexOf('${toId(targets[2])}')].pp = ${parseInt(targets[3])};`); + break; + case 'boost': + case 'b': + room.battle.stream.write(`>eval let p=${getPlayer(targets[0]) + getPokemon(targets[1])};battle.boost({${toId(targets[2])}:${parseInt(targets[3])}},p)`); + break; + case 'volatile': + case 'v': + room.battle.stream.write(`>eval let p=${getPlayer(targets[0]) + getPokemon(targets[1])};p.addVolatile('${toId(targets[2])}')`); + break; + case 'sidecondition': + case 'sc': + room.battle.stream.write(`>eval let p=${getPlayer(targets[0])}.addSideCondition('${toId(targets[1])}', 'debug')`); + break; + case 'fieldcondition': case 'pseudoweather': + case 'fc': + room.battle.stream.write(`>eval battle.addPseudoWeather('${toId(targets[0])}', 'debug')`); + break; + case 'weather': + case 'w': + room.battle.stream.write(`>eval battle.setWeather('${toId(targets[0])}', 'debug')`); + break; + case 'terrain': + case 't': + room.battle.stream.write(`>eval battle.setTerrain('${toId(targets[0])}', 'debug')`); + break; + default: + this.errorReply(`Unknown editbattle command: ${cmd}`); + break; + } + }, + editbattlehelp: [ + `/editbattle hp [player], [pokemon], [hp]`, + `/editbattle status [player], [pokemon], [status]`, + `/editbattle pp [player], [pokemon], [move], [pp]`, + `/editbattle boost [player], [pokemon], [stat], [amount]`, + `/editbattle volatile [player], [pokemon], [volatile]`, + `/editbattle sidecondition [player], [sidecondition]`, + `/editbattle fieldcondition [fieldcondition]`, + `/editbattle weather [weather]`, + `/editbattle terrain [terrain]`, + `Short forms: /ebat h OR s OR pp OR b OR v OR sc OR fc OR w OR t`, + `[player] must be a username or number, [pokemon] must be species name or number (not nickname), [move] must be move name.`, + ], + + allowexportinputlog(/** @type {string} */ target, /** @type {Room?} */ room, /** @type {User} */ user) { + const battle = room.battle; + if (!battle) return this.errorReply(`Must be in a battle.`); + if (!battle.allowExtraction) return this.errorReply(`Someone must have requested extraction.`); + const targetUser = Users.getExact(target); + + if (toId(battle.playerNames[0]) === user.userid) { + battle.allowExtraction[0] = targetUser.userid; + } else if (toId(battle.playerNames[1]) === user.userid) { + battle.allowExtraction[1] = targetUser.userid; + } else { + return this.errorReply(`Must be a player in the battle.`); + } + this.addModAction(`${user.userid} consents to sharing battle team and choices with ${targetUser.userid}.`); + if (battle.allowExtraction.join(',') !== `${targetUser.userid},${targetUser.userid}`) return; + + this.addModAction(`${targetUser.name} has extracted the battle input log.`); + const inputLog = battle.inputLog.map(Chat.escapeHTML).join(`
    `); + targetUser.sendTo(room, `|html|
    ${inputLog}
    `); + }, + + requestinputlog: 'exportinputlog', + exportinputlog(target, room, user) { + const battle = room.battle; + if (!battle) return this.errorReply(`This command only works in battle rooms.`); + if (!battle.inputLog) { + this.errorReply(`This command only works when the battle has ended - if the battle has stalled, ask players to forfeit.`); + if (user.can('forcewin')) this.errorReply(`Alternatively, you can end the battle with /forcetie.`); + return; + } + if (!this.can('exportinputlog', null, room)) return; + if (!battle.allowExtraction) { + battle.allowExtraction = ['', '']; + } + if (battle.allowExtraction[0] !== user.userid) { + const p1 = Users(battle.playerNames[0]); + if (p1) p1.sendTo(room, Chat.html`|html|${user.name} wants to extract the battle input log. `); + } + if (battle.allowExtraction[1] !== user.userid) { + const p2 = Users(battle.playerNames[1]); + if (p2) p2.sendTo(room, Chat.html`|html|${user.name} wants to extract the battle input log. `); + } + + if (battle.allowExtraction.join(',') !== `${user.userid},${user.userid}`) { + this.addModAction(`${user.name} wants to extract the battle input log.`); + return; + } + + this.addModAction(`${user.name} has extracted the battle input log.`); + const inputLog = battle.inputLog.map(Chat.escapeHTML).join(`
    `); + user.sendTo(room, `|html|
    ${inputLog}
    `); + }, + exportinputloghelp: [`/exportinputlog - Asks players in a battle for permission to export an inputlog. Requires: & ~`], + + importinputlog(target, room, user, connection) { + if (!this.can('broadcast')) return; + const formatIndex = target.indexOf(`"formatid":"`); + const nextQuoteIndex = target.indexOf(`"`, formatIndex + 12); + if (formatIndex < 0 || nextQuoteIndex < 0) return this.errorReply(`Invalid input log.`); + target = target.replace(/\r/g, ''); + if ((`\n` + target).includes(`\n>eval `) && !user.hasConsoleAccess(connection)) { + return this.errorReply(`Your input log contains untrusted code - you must have console access to use it.`); + } + + const formatid = target.slice(formatIndex + 12, nextQuoteIndex); + const battleRoom = Rooms.createBattle(formatid, {inputLog: target}); + + 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 name1 = target.slice(nameIndex1 + 8, nameNextQuoteIndex1); + const name2 = target.slice(nameIndex2 + 8, nameNextQuoteIndex2); + battleRoom.battle.playerNames = [name1, name2]; + } + + this.parse(`/join ${battleRoom.id}`); + battleRoom.auth[user.userid] = Users.HOST_SYMBOL; + setTimeout(() => { + // timer to make sure this goes under the battle + battleRoom.add(`|html|
    This is an imported replay
    Players will need to be manually added with /addplayer or /restoreplayers
    `); + }, 500); + }, + importinputloghelp: [`/importinputlog [inputlog] - Starts a battle with a given inputlog. Requires: + % @ & ~`], + + inputlog() { + this.parse(`/help exportinputlog`); + this.parse(`/help importinputlog`); + }, + + /********************************************************* + * Battle commands + *********************************************************/ + + forfeit(target, room, user) { + if (!room.game) return this.errorReply("This room doesn't have an active game."); + if (!room.game.forfeit) { + return this.errorReply("This kind of game can't be forfeited."); + } + if (!room.game.forfeit(user)) { + return this.errorReply("Forfeit failed."); + } + }, + + choose(target, room, user) { + if (!room.game) return this.errorReply("This room doesn't have an active game."); + if (!room.game.choose) return this.errorReply("This game doesn't support /choose"); + + room.game.choose(user, target); + }, + + mv: 'move', + attack: 'move', + move(target, room, user) { + this.parse(`/choose move ${target}`); + }, + + sw: 'switch', + switch(target, room, user) { + this.parse(`/choose switch ${target}`); + }, + + team(target, room, user) { + this.parse(`/choose team ${target}`); + }, + + undo(target, room, user) { + if (!room.game) return this.errorReply("This room doesn't have an active game."); + if (!room.game.undo) return this.errorReply("This game doesn't support /undo"); + + room.game.undo(user, target); + }, + + uploadreplay: 'savereplay', + async savereplay(target, room, user, connection) { + if (!room || !room.battle) return; + // retrieve spectator log (0) if there are privacy concerns + const format = Dex.getFormat(room.format, true); + let hideDetails = !format.id.includes('customgame'); + if (format.team && room.battle.ended) hideDetails = false; + const data = room.getLog(hideDetails ? 0 : 3); + const datahash = crypto.createHash('md5').update(data.replace(/[^(\x20-\x7F)]+/g, '')).digest('hex'); + let players = room.battle.playerNames; + let rating = 0; + if (room.battle.ended && room.rated) rating = room.rated; + const [success] = await LoginServer.request('prepreplay', { + id: room.id.substr(7), + loghash: datahash, + p1: players[0], + p2: players[1], + format: format.id, + rating: rating, + hidden: room.isPrivate || room.hideReplay ? '1' : '', + inputlog: room.battle.inputLog ? room.battle.inputLog.join('\n') : null, + }); + if (success && success.errorip) { + connection.popup(`This server's request IP ${success.errorip} is not a registered server.`); + return; + } + connection.send('|queryresponse|savereplay|' + JSON.stringify({ + log: data, + id: room.id.substr(7), + })); + }, + + addplayer(target, room, user) { + if (!target) return this.parse('/help addplayer'); + if (!room.battle) return this.errorReply("You can only do this in battle rooms."); + if (room.rated) return this.errorReply("You can only add a Player to unrated battles."); + + target = this.splitTarget(target, true).trim(); + if (target !== 'p1' && target !== 'p2') { + this.errorReply(`Player must be set to "p1" or "p2", not "${target}".`); + return this.parse('/help addplayer'); + } + + let targetUser = this.targetUser; + let name = this.targetUsername; + + if (!targetUser) return this.errorReply(`User ${name} not found.`); + if (!targetUser.inRooms.has(room.id)) { + return this.errorReply(`User ${name} must be in the battle room already.`); + } + if (!this.can('joinbattle', null, room)) return; + if (room.battle[target]) { + return this.errorReply(`This room already has a player in slot ${target}.`); + } + + room.battle.addPlayer(targetUser, target); + this.addModAction(`${name} was added to the battle as Player ${target.slice(1)} by ${user.name}.`); + this.modlog('ROOMPLAYER', targetUser.getLastId()); + }, + addplayerhelp: [ + `/addplayer [username], p1 - Allow the specified user to join the battle as Player 1.`, + `/addplayer [username], p2 - Allow the specified user to join the battle as Player 2.`, + ], + + restoreplayers(target, room, user) { + if (!room.battle) return this.errorReply("You can only do this in battle rooms."); + if (room.rated) return this.errorReply("You can only add a Player to unrated battles."); + + let didSomething = false; + if (!room.battle.p1 && room.battle.playerNames[0] !== 'Player 1') { + this.parse(`/addplayer ${room.battle.playerNames[0]}, p1`); + didSomething = true; + } + if (!room.battle.p2 && room.battle.playerNames[1] !== 'Player 2') { + this.parse(`/addplayer ${room.battle.playerNames[1]}, p2`); + didSomething = true; + } + + if (!didSomething) return this.errorReply(`Players could not be restored (maybe this battle already has two players?).`); + }, + restoreplayershelp: [ + `/restoreplayers - Restore previous players in an imported input log.`, + ], + + joinbattle: 'joingame', + joingame(target, room, user) { + if (!room.game) return this.errorReply("This room doesn't have an active game."); + if (!room.game.joinGame) return this.errorReply("This game doesn't support /joingame"); + + room.game.joinGame(user); + }, + + leavebattle: 'leavegame', + partbattle: 'leavegame', + leavegame(target, room, user) { + if (!room.game) return this.errorReply("This room doesn't have an active game."); + if (!room.game.leaveGame) return this.errorReply("This game doesn't support /leavegame"); + + room.game.leaveGame(user); + }, + + kickbattle: 'kickgame', + kickgame(target, room, user) { + if (!room.battle) return this.errorReply("You can only do this in battle rooms."); + if (room.battle.tour || room.battle.rated) return this.errorReply("You can only do this in unrated non-tour battles."); + + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser || !targetUser.connected) { + return this.errorReply(`User ${this.targetUsername} not found.`); + } + if (!this.can('kick', targetUser)) return false; + + if (room.game.leaveGame(targetUser)) { + this.addModAction(`${targetUser.name} was kicked from a battle by ${user.name} ${(target ? ` (${target})` : ``)}`); + this.modlog('KICKBATTLE', targetUser, target, {noip: 1, noalts: 1}); + } else { + this.errorReply("/kickbattle - User isn't in battle."); + } + }, + kickbattlehelp: [`/kickbattle [username], [reason] - Kicks a user from a battle with reason. Requires: % @ & ~`], + + kickinactive(target, room, user) { + this.parse(`/timer on`); + }, + + timer(target, room, user) { + target = toId(target); + if (!room.game || !room.game.timer) { + return this.errorReply(`You can only set the timer from inside a battle room.`); + } + const timer = room.game.timer; + if (!timer.timerRequesters) { + return this.sendReply(`This game's timer is managed by a different command.`); + } + if (!target) { + if (!timer.timerRequesters.size) { + return this.sendReply(`The game timer is OFF.`); + } + return this.sendReply(`The game timer is ON (requested by ${[...timer.timerRequesters].join(', ')})`); + } + const force = user.can('timer', null, room); + if (!force && !room.game.players[user]) { + return this.errorReply(`Access denied.`); + } + if (this.meansNo(target) || target === 'stop') { + if (timer.timerRequesters.size) { + timer.stop(force ? undefined : user); + if (force) room.send(`|inactiveoff|Timer was turned off by staff. Please do not turn it back on until our staff say it's okay.`); + } else { + this.errorReply(`The timer is already off.`); + } + } else if (this.meansYes(target) || target === 'start') { + timer.start(user); + } else { + this.errorReply(`"${target}" is not a recognized timer state.`); + } + }, + + autotimer: 'forcetimer', + forcetimer(target, room, user) { + target = toId(target); + if (!this.can('autotimer')) return; + if (this.meansNo(target) || target === 'stop') { + Config.forcetimer = false; + this.addModAction(`Forcetimer is now OFF: The timer is now opt-in. (set by ${user.name})`); + } else if (this.meansYes(target) || target === 'start' || !target) { + Config.forcetimer = true; + this.addModAction(`Forcetimer is now ON: All battles will be timed. (set by ${user.name})`); + } else { + this.errorReply(`'${target}' is not a recognized forcetimer setting.`); + } + }, + + forcetie: 'forcewin', + forcewin(target, room, user) { + if (!this.can('forcewin')) return false; + if (!room.battle) { + this.errorReply("/forcewin - This is not a battle room."); + return false; + } + + room.battle.endType = 'forced'; + if (!target) { + room.battle.tie(); + this.modlog('FORCETIE'); + return false; + } + let targetUser = Users.getExact(target); + if (!targetUser) return this.errorReply(`User '${target}' not found.`); + + room.battle.win(targetUser); + this.modlog('FORCEWIN', targetUser.userid); + }, + 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: & ~`, + ], + + /********************************************************* + * Challenging and searching commands + *********************************************************/ + + '!search': true, + search(target, room, user, connection) { + if (target) { + if (Config.laddermodchat) { + let userGroup = user.group; + if (Config.groupsranking.indexOf(userGroup) < Config.groupsranking.indexOf(Config.laddermodchat)) { + let groupName = Config.groups[Config.laddermodchat].name || Config.laddermodchat; + this.popupReply(`On this server, you must be of rank ${groupName} or higher to search for a battle.`); + return false; + } + } + Ladders(target).searchBattle(user, connection); + } else { + Ladders.cancelSearches(user); + } + }, + + '!cancelsearch': true, + cancelsearch(target, room, user) { + if (target) { + Ladders(toId(target)).cancelSearch(user); + } else { + Ladders.cancelSearches(user); + } + }, + + '!challenge': true, + chall: 'challenge', + challenge(target, room, user, connection) { + target = this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser || !targetUser.connected) { + return this.popupReply(`The user '${this.targetUsername}' was not found.`); + } + if (user.locked && !targetUser.locked) { + return this.popupReply(`You are locked and cannot challenge unlocked users.`); + } + if (Punishments.isBattleBanned(user)) { + return this.popupReply(`You are banned from battling and cannot challenge users.`); + } + if (Config.pmmodchat) { + let userGroup = user.group; + if (Config.groupsranking.indexOf(userGroup) < Config.groupsranking.indexOf(Config.pmmodchat)) { + let groupName = Config.groups[Config.pmmodchat].name || Config.pmmodchat; + this.popupReply(`Because moderated chat is set, you must be of rank ${groupName} or higher to challenge users.`); + return false; + } + } + Ladders(target).makeChallenge(connection, targetUser); + }, + + '!blockchallenges': true, + bch: 'blockchallenges', + blockchall: 'blockchallenges', + blockchalls: 'blockchallenges', + blockchallenges(target, room, user) { + if (user.blockChallenges) return this.errorReply("You are already blocking challenges!"); + user.blockChallenges = true; + this.sendReply("You are now blocking all incoming challenge requests."); + }, + blockchallengeshelp: [`/blockchallenges - Blocks challenges so no one can challenge you. Unblock them with /unblockchallenges.`], + + '!allowchallenges': true, + unbch: 'allowchallenges', + unblockchall: 'allowchallenges', + unblockchalls: 'allowchallenges', + unblockchallenges: 'allowchallenges', + allowchallenges(target, room, user) { + if (!user.blockChallenges) return this.errorReply("You are already available for challenges!"); + user.blockChallenges = false; + this.sendReply("You are available for challenges from now on."); + }, + allowchallengeshelp: [`/unblockchallenges - Unblocks challenges so you can be challenged again. Block them with /blockchallenges.`], + + '!cancelchallenge': true, + cchall: 'cancelChallenge', + cancelchallenge(target, room, user) { + Ladders.cancelChallenging(user); + }, + + '!accept': true, + accept(target, room, user, connection) { + target = this.splitTarget(target); + if (target) return this.popupReply(`This command does not support specifying multiple users`); + const targetUser = this.targetUser || this.pmTarget; + if (!targetUser) return this.popupReply(`User "${this.targetUsername}" not found.`); + Ladders.acceptChallenge(connection, targetUser); + }, + + '!reject': true, + reject(target, room, user) { + target = toId(target); + if (!target && this.pmTarget) target = this.pmTarget.userid; + Ladders.rejectChallenge(user, target); + }, + + '!useteam': true, + saveteam: 'useteam', + utm: 'useteam', + useteam(target, room, user) { + user.team = target; + }, + + '!vtm': true, + vtm(target, room, user, connection) { + if (Monitor.countPrepBattle(connection.ip, connection)) { + return; + } + if (!target) return this.errorReply("Provide a valid format."); + let originalFormat = Dex.getFormat(target); + // Note: The default here of [Gen 7] Pokebank Anything Goes isn't normally hit; since the web client will send a default format + let format = originalFormat.effectType === 'Format' ? originalFormat : Dex.getFormat('[Gen 7] Pokebank Anything Goes'); + if (format.effectType !== 'Format') return this.popupReply("Please provide a valid format."); + + TeamValidatorAsync(format.id).validateTeam(user.team).then(result => { + let matchMessage = (originalFormat === format ? "" : `The format '${originalFormat.name}' was not found.`); + if (result.charAt(0) === '1') { + connection.popup(`${(matchMessage ? matchMessage + "\n\n" : "")}Your team is valid for ${format.name}.`); + } else { + connection.popup(`${(matchMessage ? matchMessage + "\n\n" : "")}Your team was rejected for the following reasons:\n\n- ${result.slice(1).replace(/\n/g, '\n- ')}`); + } + }); + }, + + /********************************************************* + * Low-level + *********************************************************/ + + '!crq': true, + cmd: 'crq', + query: 'crq', + crq(target, room, user, connection) { + // In emergency mode, clamp down on data returned from crq's + let trustable = (!Config.emergency || (user.named && user.registered)); + let spaceIndex = target.indexOf(' '); + let cmd = target; + if (spaceIndex > 0) { + cmd = target.substr(0, spaceIndex); + target = target.substr(spaceIndex + 1); + } else { + target = ''; + } + if (cmd === 'userdetails') { + let targetUser = Users.get(target); + if (!trustable || !targetUser) { + connection.send('|queryresponse|userdetails|' + JSON.stringify({ + userid: toId(target), + rooms: false, + })); + return false; + } + let roomList = {}; + for (let roomid of targetUser.inRooms) { + if (roomid === 'global') continue; + let targetRoom = Rooms.get(roomid); + if (!targetRoom) continue; // shouldn't happen + let roomData = {}; + if (targetRoom.isPrivate) { + if (!user.inRooms.has(roomid) && !user.games.has(roomid)) continue; + roomData.isPrivate = true; + } + if (targetRoom.battle) { + let battle = targetRoom.battle; + roomData.p1 = battle.p1 ? ' ' + battle.p1.name : ''; + roomData.p2 = battle.p2 ? ' ' + battle.p2.name : ''; + } + if (targetRoom.auth && targetUser.userid in targetRoom.auth) { + roomid = targetRoom.auth[targetUser.userid] + roomid; + } + roomList[roomid] = roomData; + } + if (!targetUser.connected) roomList = false; + let userdetails = { + userid: targetUser.userid, + avatar: targetUser.avatar, + group: targetUser.group, + rooms: roomList, + }; + connection.send('|queryresponse|userdetails|' + JSON.stringify(userdetails)); + } else if (cmd === 'roomlist') { + if (!trustable) return false; + connection.send('|queryresponse|roomlist|' + JSON.stringify({ + rooms: Rooms.global.getBattles(target), + })); + } else if (cmd === 'rooms') { + if (!trustable) return false; + connection.send('|queryresponse|rooms|' + JSON.stringify( + Rooms.global.getRooms(user) + )); + } else if (cmd === 'laddertop') { + if (!trustable) return false; + Ladders(toId(target)).getTop().then(result => { + connection.send('|queryresponse|laddertop|' + JSON.stringify(result)); + }); + } else { + // default to sending null + connection.send(`|queryresponse|${cmd}|null`); + } + }, + + '!trn': true, + trn(target, room, user, connection) { + if (target === user.name) return false; + + let commaIndex = target.indexOf(','); + let targetName = target; + let targetRegistered = false; + let targetToken = ''; + if (commaIndex >= 0) { + targetName = target.substr(0, commaIndex); + target = target.substr(commaIndex + 1); + commaIndex = target.indexOf(','); + targetRegistered = target; + if (commaIndex >= 0) { + targetRegistered = !!parseInt(target.substr(0, commaIndex)); + targetToken = target.substr(commaIndex + 1); + } + } + user.rename(targetName, targetToken, targetRegistered, connection); + }, + + a(target, room, user) { + if (!this.can('rawpacket')) return false; + // secret sysop command + room.add(target); + }, + + /********************************************************* + * Help commands + *********************************************************/ + + '!help': true, + commands: 'help', + h: 'help', + '?': 'help', + man: 'help', + help(target, room, user) { + if (!this.runBroadcast()) return; + target = target.toLowerCase(); + + // overall + if (target === 'help' || target === 'h' || target === '?' || target === 'commands') { + this.sendReply("/help OR /h OR /? - Gives you help."); + } else if (!target) { + this.sendReply("COMMANDS: /msg, /reply, /logout, /challenge, /search, /rating, /whois, /user, /report, /join, /leave, /makegroupchat, /userauth, /roomauth"); + this.sendReply("BATTLE ROOM COMMANDS: /savereplay, /hideroom, /inviteonly, /invite, /timer, /forfeit"); + this.sendReply("OPTION COMMANDS: /nick, /avatar, /ignore, /away, /back, /timestamps, /highlight, /showjoins, /hidejoins, /blockchallenges, /blockpms"); + this.sendReply("INFORMATIONAL/RESOURCE COMMANDS: /groups, /faq, /rules, /intro, /formatshelp, /othermetas, /analysis, /punishments, /calc, /git, /cap, /roomhelp, /roomfaq (replace / with ! to broadcast. Broadcasting requires: + % @ # & ~)"); + this.sendReply("DATA COMMANDS: /data, /dexsearch, /movesearch, /itemsearch, /learn, /statcalc, /effectiveness, /weakness, /coverage, /randommove, /randompokemon (replace / with ! to broadcast. Broadcasting requires: + % @ # & ~)"); + if (user.group !== Config.groupsranking[0]) { + this.sendReply("DRIVER COMMANDS: /warn, /mute, /hourmute, /unmute, /alts, /forcerename, /modlog, /modnote, /lock, /weeklock, /unlock, /announce"); + this.sendReply("MODERATOR COMMANDS: /globalban, /unglobalban, /ip, /modchat, /markshared, /unlockip"); + this.sendReply("LEADER COMMANDS: /declare, /forcetie, /forcewin, /promote, /demote, /banip, /host, /unbanall, /ipsearch"); + } + this.sendReply("For an overview of room commands, use /roomhelp"); + this.sendReply("For details of a specific command, use something like: /help data"); + } else { + let altCommandHelp; + let helpCmd; + let targets = target.split(' '); + let allCommands = Chat.commands; + if (typeof allCommands[target] === 'string') { + // If a function changes with command name, help for that command name will be searched first. + altCommandHelp = `${target}help`; + if (altCommandHelp in allCommands) { + helpCmd = altCommandHelp; + } else { + helpCmd = `${allCommands[target]}help`; + } + } else if (targets.length > 1 && typeof allCommands[targets[0]] === 'object') { + // Handle internal namespace commands + let helpCmd = `${targets.pop()}help`; + let namespace = allCommands[targets.shift()]; + for (const t of targets) { + if (!namespace[t]) return this.errorReply(`Help for the command '${target}' was not found. Try /help for general help.`); + namespace = namespace[t]; + } + if (typeof namespace[helpCmd] === 'object') return this.sendReply(namespace[helpCmd].join('\n')); + if (typeof namespace[helpCmd] === 'function') return this.run(namespace[helpCmd]); + return this.errorReply(`Help for the command '${target}' was not found. Try /help for general help.`); + } else { + helpCmd = `${target}help`; + } + if (helpCmd in allCommands) { + if (typeof allCommands[helpCmd] === 'function') { + // If the help command is a function, parse it instead + this.run(allCommands[helpCmd]); + } else if (Array.isArray(allCommands[helpCmd])) { + this.sendReply(allCommands[helpCmd].join('\n')); + } + } else { + this.errorReply(`Help for the command '${target}' was not found. Try /help for general help.`); + } + } + }, + +}; + +exports.commands = commands; + +process.nextTick(() => { + // We might want to migrate most of this to a JSON schema of command attributes. + Chat.multiLinePattern.register( + '>>>? ', '/(?:room|staff)intro ', '/(?:staff)?topic ', '/(?:add|widen)datacenters ', '/bash ', '!code ', '/code ', '/modnote ', '/mn ', + '/importinputlog ' + ); +}); diff --git a/server/chat-formatter.js b/server/chat-formatter.js new file mode 100644 index 0000000000000..ea9fe1db10949 --- /dev/null +++ b/server/chat-formatter.js @@ -0,0 +1,468 @@ +/** + * Chat parser + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * Parses formate. + * + * @license MIT license + */ + +'use strict'; + +// Regex copied from the client +const domainRegex = '[a-z0-9-]+(?:[.][a-z0-9-]+)*'; +const parenthesisRegex = '[(](?:[^\\s()<>&]|&)*[)]'; +const linkRegex = new RegExp( + '(?:' + + '(?:' + + // When using www. or http://, allow any-length TLD (like .museum) + '(?:https?://|\\bwww[.])' + domainRegex + + '|\\b' + domainRegex + '[.]' + + // Allow a common TLD, or any 2-3 letter TLD followed by : or / + '(?:com?|org|net|edu|info|us|jp|[a-z]{2,3}(?=[:/]))' + + ')' + + '(?:[:][0-9]+)?' + + '\\b' + + '(?:' + + '/' + + '(?:' + + '(?:' + + '[^\\s()&<>]|&|"' + + '|' + parenthesisRegex + + ')*' + + // URLs usually don't end with punctuation, so don't allow + // punctuation symbols that probably aren't related to URL. + '(?:' + + '[^\\s`()[\\]{}\'".,!?;:&<>*`^~\\\\]' + + '|' + parenthesisRegex + + ')' + + ')?' + + ')?' + + // email address + '|[a-z0-9.]+\\b@' + domainRegex + '[.][a-z]{2,}' + + ')' + + '(?![^ ]*>)', + 'ig' +); +// compiled from above +// const linkRegex = /(?:(?:(?:https?:\/\/|\bwww[.])[a-z0-9-]+(?:[.][a-z0-9-]+)*|\b[a-z0-9-]+(?:[.][a-z0-9-]+)*[.](?:com?|org|net|edu|info|us|jp|[a-z]{2,3}(?=[:/])))(?:[:][0-9]+)?\b(?:\/(?:(?:[^\s()&<>]|&|"|[(](?:[^\s()<>&]|&)*[)])*(?:[^\s`()[\]{}'".,!?;:&<>*`^~\\]|[(](?:[^\s()<>&]|&)*[)]))?)?|[a-z0-9.]+\b@[a-z0-9-]+(?:[.][a-z0-9-]+)*[.][a-z]{2,})(?![^ ]*>)/ig; + +/** + * @typedef {'_' | '*' | '~' | '^' | '\\' | '<' | '[' | '`' | 'a' | 'spoiler' | '>' | '('} SpanType + */ +/** + * @typedef {[SpanType, number]} FormatSpan [spanType, buffersIndex] + */ + +class TextFormatter { + /** + * @param {string} str + */ + constructor(str, isTrusted = false) { + // escapeHTML, without escaping / + str = ('' + str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, '''); + + // filter links first + str = str.replace(linkRegex, uri => { + let fulluri; + if (/^[a-z0-9.]+@/ig.test(uri)) { + fulluri = 'mailto:' + uri; + } else { + fulluri = uri.replace(/^([a-z]*[^a-z:])/g, 'http://$1'); + if (uri.substr(0, 24) === 'https://docs.google.com/' || uri.substr(0, 16) === 'docs.google.com/') { + if (uri.slice(0, 5) === 'https') uri = uri.slice(8); + if (uri.substr(-12) === '?usp=sharing' || uri.substr(-12) === '&usp=sharing') uri = uri.slice(0, -12); + if (uri.substr(-6) === '#gid=0') uri = uri.slice(0, -6); + let slashIndex = uri.lastIndexOf('/'); + if (uri.length - slashIndex > 18) slashIndex = uri.length; + if (slashIndex - 4 > 19 + 3) uri = uri.slice(0, 19) + '' + uri.slice(19, slashIndex - 4) + '' + uri.slice(slashIndex - 4); + } + } + return `${uri}`; + }); + // (links don't have any specific syntax, they're just a pattern, so we detect them in a separate pass) + + this.str = str; + this.buffers = /** @type {string[]} */ ([]); + this.stack = /** @type {FormatSpan[]} */ ([]); + this.isTrusted = isTrusted; + /** offset of str that's been parsed so far */ + // TypeScript bug: [js] 'offset' implicitly has type 'any' because it does not have a type annotation and is referenced directly or indirectly in its own initializer. + /** @type {number} */ + 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)); } + /** + * @param {number} start + * @param {number} end + */ + slice(start, end) { + return this.str.slice(start, end); + } + /** + * @param {number} start + */ + at(start) { + return this.str.charAt(start); + } + /** + * @param {SpanType} spanType + * @param {number} start + * @param {number} end + */ + pushSpan(spanType, start, end) { + this.pushSlice(start); + this.stack.push([spanType, this.buffers.length]); + this.buffers.push(this.slice(start, end)); + this.offset = end; + } + /** + * @param {number} end + */ + pushSlice(end) { + if (end !== this.offset) { + this.buffers.push(this.slice(this.offset, end)); + this.offset = end; + } + } + /** + * @param {number} start + * @return {boolean} success + */ + closeParenSpan(start) { + let stackPosition = -1; + for (let i = this.stack.length - 1; i >= 0; i--) { + const span = this.stack[i]; + if (span[0] === '(') { + stackPosition = i; + break; + } + if (span[0] !== 'spoiler') break; + } + if (stackPosition === -1) return false; + + this.pushSlice(start); + while (this.stack.length > stackPosition) this.popSpan(start); + this.offset = start; + return true; + } + /** + * Attempt to close a span. + * @param {SpanType} spanType + * @param {number} start + * @param {number} end + * @return {boolean} success + */ + closeSpan(spanType, start, end) { + // loop backwards + let stackPosition = -1; + for (let i = this.stack.length - 1; i >= 0; i--) { + const span = this.stack[i]; + if (span[0] === spanType) { + stackPosition = i; + break; + } + } + if (stackPosition === -1) return false; + + this.pushSlice(start); + while (this.stack.length > stackPosition + 1) this.popSpan(start); + const span = /** @type {FormatSpan} */ (this.stack.pop()); + const startIndex = span[1]; + let tagName = ''; + switch (spanType) { + case '_': tagName = 'i'; break; + case '*': tagName = 'b'; break; + case '~': tagName = 's'; break; + case '^': tagName = 'sup'; break; + case '\\': tagName = 'sub'; break; + } + if (tagName) { + this.buffers[startIndex] = `<${tagName}>`; + this.buffers.push(``); + this.offset = end; + } + return true; + } + /** + * Ends a span without an ending symbol. For most spans, this means + * they don't take effect, but certain spans like spoiler tags don't + * require ending symbols. + * + * @param {number} end + * @return {boolean} success + */ + popSpan(end) { + const span = this.stack.pop(); + if (!span) return false; + this.pushSlice(end); + switch (span[0]) { + case 'spoiler': + this.buffers.push(``); + this.buffers[span[1]] = ``; + break; + case '>': + this.buffers.push(``); + this.buffers[span[1]] = ``; + break; + default: + // do nothing + break; + } + return true; + } + /** + * @param {number} end + */ + popAllSpans(end) { + while (this.stack.length) this.popSpan(end); + this.pushSlice(end); + } + /** + * @param {string} html + */ + toUriComponent(html) { + let component = html.replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '\'').replace(/&/g, '&'); + return encodeURIComponent(component); + } + /** + * @param {SpanType} spanType + * @param {number} start + * @return {boolean} success + */ + runLookahead(spanType, start) { + switch (spanType) { + case '`': + { + let delimLength = 0; + let i = start; + while (this.at(i) === '`') { + delimLength++; + i++; + } + let curDelimLength = 0; + while (i < this.str.length) { + const char = this.at(i); + if (char === '\n') break; + if (char === '`') { + curDelimLength++; + } else { + if (curDelimLength === delimLength) break; + curDelimLength = 0; + } + i++; + } + if (curDelimLength !== delimLength) return false; + // matching delims found + this.pushSlice(start); + this.buffers.push(``); + let innerStart = start + delimLength; + let innerEnd = i - delimLength; + if (innerStart + 1 >= innerEnd) { + // no special whitespace handling + } else if (this.at(innerStart) === ' ' && this.at(innerEnd - 1) === ' ') { + innerStart++; // strip starting and ending space + innerEnd--; + } else if (this.at(innerStart) === ' ' && this.at(innerStart + 1) === '`') { + innerStart++; // strip starting space + } else if (this.at(innerEnd - 1) === ' ' && this.at(innerEnd - 2) === '`') { + innerEnd--; // strip ending space + } + this.buffers.push(this.slice(innerStart, innerEnd)); + this.buffers.push(``); + this.offset = i; + } + return true; + case '[': + { + if (this.slice(start, start + 2) !== '[[') return false; + let i = start + 2; + let colonPos = -1; // `:` + let anglePos = -1; // `<` + while (i < this.str.length) { + const char = this.at(i); + if (char === ']' || char === '\n') break; + if (char === ':' && colonPos < 0) colonPos = i; + if (char === '&' && this.slice(i, i + 4) === '<') anglePos = i; + i++; + } + if (this.slice(i, i + 2) !== ']]') return false; + let termEnd = i; + let uri = ''; + if (anglePos >= 0 && this.slice(i - 4, i) === '>') { // `>` + uri = this.slice(anglePos + 4, i - 4); + termEnd = anglePos; + 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 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': + 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}`; + break; + case 'pokemon': + case 'item': + term = term.slice(term.charAt(key.length + 1) === ' ' ? key.length + 2 : key.length + 1); + + let display = ''; + if (this.isTrusted) { + display = ``; + } else { + display = `[${term}]`; + } + + let dir = key; + if (key === 'item') dir += 's'; + + uri = `//dex.pokemonshowdown.com/${dir}/${toId(term)}`; + term = display; + } + } + 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; + } + return true; + case '<': + { + 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}»`); + this.offset = i + 8; + } + return true; + case 'a': + { + let i = start + 1; + while (this.at(i) !== '/' || this.at(i + 1) !== 'a' || this.at(i + 2) !== '>') i++; // + i += 3; + this.pushSlice(i); + } + return true; + } + return false; + } + /** + * @return {string} + */ + get() { + let beginningOfLine = this.offset; + // main loop! i tracks our position + for (let i = beginningOfLine; i < this.str.length; i++) { + const char = this.at(i); + switch (char) { + case '_': + case '*': + case '~': + case '^': + case '\\': + if (this.at(i + 1) === char && this.at(i + 2) !== char) { + if (!(this.at(i - 1) !== ' ' && this.closeSpan(char, i, i + 2))) { + if (this.at(i + 2) !== ' ') this.pushSpan(char, i, i + 2); + } + if (i < this.offset) { + i = this.offset - 1; + break; + } + } + while (this.at(i + 1) === char) i++; + break; + case '(': + this.stack.push(['(', -1]); + break; + case ')': + this.closeParenSpan(i); + if (i < this.offset) { + i = this.offset - 1; + break; + } + break; + case '`': + if (this.at(i + 1) === '`') this.runLookahead('`', i); + if (i < this.offset) { + i = this.offset - 1; + break; + } + while (this.at(i + 1) === '`') i++; + break; + case '[': + this.runLookahead('[', i); + if (i < this.offset) { + i = this.offset - 1; + break; + } + while (this.at(i + 1) === '[') i++; + break; + case ':': + if (i < 7) break; + if (this.slice(i - 7, i + 1).toLowerCase() === 'spoiler:' || this.slice(i - 8, i + 1).toLowerCase() === 'spoilers:') { + if (this.at(i + 1) === ' ') i++; + this.pushSpan('spoiler', i + 1, i + 1); + } + break; + case '&': // escaped '<' or '>' + if (i === beginningOfLine && this.slice(i, i + 4) === '>') { + if (!"._/=:;".includes(this.at(i + 4)) && !['w<', 'w>'].includes(this.slice(i + 4, i + 9))) { + this.pushSpan('>', i, i); + } + } else { + this.runLookahead('<', i); + } + if (i < this.offset) { + i = this.offset - 1; + break; + } + while (this.slice(i + 1, i + 5) === 'lt;&') i += 4; + break; + case '<': // guaranteed to be `); + this.offset++; + } + beginningOfLine = i + 1; + break; + } + } + + this.popAllSpans(this.str.length); + return this.buffers.join(''); + } +} + +/** + * Takes a string and converts it to HTML by replacing standard chat formatting with the appropriate HTML tags. + * + * @param {string} str + */ +function formatText(str, isTrusted = false) { + return new TextFormatter(str, isTrusted).get(); +} + +module.exports = {formatText, linkRegex}; diff --git a/chat-plugins/COMMANDS.md b/server/chat-plugins/COMMANDS.md similarity index 93% rename from chat-plugins/COMMANDS.md rename to server/chat-plugins/COMMANDS.md index 4e24be8a98222..38736583c8679 100644 --- a/chat-plugins/COMMANDS.md +++ b/server/chat-plugins/COMMANDS.md @@ -16,7 +16,7 @@ This is called an alias: it makes it so `/ip` does the same thing as But to actually define a command, it's a function: - avatars: function (target, room, user) { + avatars(target, room, user) { if (!this.runBroadcast()) return; this.sendReplyBox('You can by clicking on it in the `); if (this.broadcasting) setImmediate(() => room.update()); // make sure the room updates for broadcasting since this is async. }); }, - rank: function (target, room, user) { - if (room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); + rank(target, room, user) { + if (room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return this.errorReply("This command can only be used in the scavengers room."); if (!this.runBroadcast()) return false; let targetId = toId(target) || user.userid; @@ -1011,50 +1202,114 @@ let commands = { /** * Leaderboard Point Distribution Editing */ - setblitz: function (target, room, user) { - if (room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); + setblitz(target, room, user) { + if (room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return this.errorReply("This command can only be used in the scavengers room."); if (!this.can('mute', null, room)) return false; // perms for viewing only - if (!target) return this.sendReply(`The points rewarded for winning official hunts is: ${(room.blitzPoints || DEFAULT_BLITZ_POINTS)}`); + + if (!target) { + let points = []; + const source = Object.entries(Object.assign(DEFAULT_BLITZ_POINTS, room.blitzPoints || {})); + for (const entry of source) { + points.push(`${entry[0]}: ${entry[1]}`); + } + return this.sendReplyBox(`The points rewarded for winning hunts within a minute is:
    ${points.join('
    ')}`); + } if (!this.can('declare', null, room)) return false; // perms for editing - let blitzPoints = parseInt(target); - if (isNaN(blitzPoints) || blitzPoints < 0 || blitzPoints > 1000) return this.errorReply("The points value awarded for blitz must be an integer bewteen 0 and 1000."); + let [type, blitzPoints] = target.split(','); + blitzPoints = parseInt(blitzPoints); + type = toId(type); + if (!RATED_TYPES.includes(type)) return this.errorReply(`You cannot set blitz points for ${type} hunts.`); - room.blitzPoints = blitzPoints; + if (isNaN(blitzPoints) || blitzPoints < 0 || blitzPoints > 1000) return this.errorReply("The points value awarded for blitz must be an integer bewteen 0 and 1000."); + if (!room.blitzPoints) room.blitzPoints = {}; + room.blitzPoints[type] = blitzPoints; if (room.chatRoomData) { room.chatRoomData.blitzPoints = room.blitzPoints; Rooms.global.writeChatRoomData(); } - this.privateModCommand(`(${user.name} has set the points awarded for blitz to ${blitzPoints}.)`); + this.privateModAction(`(${user.name} has set the points awarded for blitz for ${type} hunts to ${blitzPoints}.)`); + this.modlog('SCAV BLITZ', null, `${type}: ${blitzPoints}`); + + // double modnote in scavs room if it is a subroomgroupchat + if (room.parent && !room.chatRoomData) { + scavsRoom.modlog(`(scavengers) SCAV BLITZ: by ${user.userid}: ${type}: ${blitzPoints}`); + scavsRoom.sendMods(`(${user.name} has set the points awarded for blitz for ${type} hunts to ${blitzPoints} in <<${room.id}>>.)`); + scavsRoom.roomlog(`(${user.name} has set the points awarded for blitz for ${type} hunts to ${blitzPoints} in <<${room.id}>>.)`); + } }, - setpoints: function (target, room, user) { - if (room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); + sethostpoints(target, room, user) { + if (room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return this.errorReply("This command can only be used in the scavengers room."); if (!this.can('mute', null, room)) return false; // perms for viewing only - if (!target) return this.sendReply(`The points rewarded for winning official hunts is: ${(room.winPoints || DEFAULT_POINTS).map((p, i) => `(${(i + 1)}) ${p}`).join(', ')}`); + if (!target) return this.sendReply(`The points rewarded for hosting a regular hunt are ${room.hasOwnProperty('hostPoints') ? room.hostPoints : DEFAULT_HOST_POINTS}`); + + if (!this.can('declare', null, room)) return false; // perms for editting + const points = parseInt(target); + if (isNaN(points)) return this.errorReply(`${target} is not a valid number of points.`); + room.hostPoints = points; + if (room.chatRoomData) { + room.chatRoomData.hostPoints = room.hostPoints; + Rooms.global.writeChatRoomData(); + } + this.privateModAction(`(${user.name} has set the points awarded for hosting regular scavenger hunts to ${points})`); + this.modlog('SCAV SETHOSTPOINTS', null, points); + + // double modnote in scavs room if it is a subroomgroupchat + if (room.parent && !room.chatRoomData) { + scavsRoom.modlog(`(scavengers) SCAV SETHOSTPOINTS: [room: ${room.id}] by ${user.userid}: ${points}`); + scavsRoom.sendMods(`(${user.name} has set the points awarded for hosting regular scavenger hunts to - ${points} in <<${room.id}>>)`); + scavsRoom.roomlog(`(${user.name} has set the points awarded for hosting regular scavenger hunts to - ${points} in <<${room.id}>>)`); + } + }, + setpoints(target, room, user) { + if (room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return this.errorReply("This command can only be used in the scavengers room."); + if (!this.can('mute', null, room)) return false; // perms for viewing only + + if (!target) { + let points = []; + const source = Object.entries(Object.assign({}, DEFAULT_POINTS, room.winPoints || {})); + for (const entry of source) { + points.push(`${entry[0]}: ${entry[1].map((p, i) => `(${(i + 1)}) ${p}`).join(', ')}`); + } + return this.sendReplyBox(`The points rewarded for winning hunts is:
    ${points.join('
    ')}`); + } if (!this.can('declare', null, room)) return false; // perms for editting - let winPoints = target.split(',').map(p => parseInt(p)); + let [type, ...pointsSet] = target.split(','); + type = toId(type); + if (!RATED_TYPES.includes(type)) return this.errorReply(`You cannot set win points for ${type} hunts.`); + let winPoints = pointsSet.map(p => parseInt(p)); if (winPoints.some(p => isNaN(p) || p < 0 || p > 1000) || !winPoints.length) return this.errorReply("The points value awarded for winning a scavenger hunt must be an integer between 0 and 1000."); - room.winPoints = winPoints; + if (!room.winPoints) room.winPoints = {}; + room.winPoints[type] = winPoints; if (room.chatRoomData) { room.chatRoomData.winPoints = room.winPoints; Rooms.global.writeChatRoomData(); } - this.privateModCommand(`(${user.name} has set the points awarded for winning an official scavenger hunt to - ${winPoints.map((p, i) => `(${(i + 1)}) ${p}`).join(', ')})`); + const pointsDisplay = winPoints.map((p, i) => `(${(i + 1)}) ${p}`).join(', '); + this.privateModAction(`(${user.name} has set the points awarded for winning ${type} scavenger hunts to - ${pointsDisplay})`); + this.modlog('SCAV SETPOINTS', null, `${type}: ${pointsDisplay}`); + + // double modnote in scavs room if it is a subroomgroupchat + if (room.parent && !room.chatRoomData) { + scavsRoom.modlog(`(scavengers) SCAV SETPOINTS: [room: ${room.id}] by ${user.userid}: ${type}: ${pointsDisplay}`); + scavsRoom.sendMods(`(${user.name} has set the points awarded for winning ${type} scavenger hunts to - ${pointsDisplay} in <<${room.id}>>)`); + scavsRoom.roomlog(`(${user.name} has set the points awarded for winning ${type} scavenger hunts to - ${pointsDisplay} in <<${room.id}>>)`); + } }, /** * Scavenger statistic tracking */ huntcount: 'huntlogs', - huntlogs: function (target, room, user) { + huntlogs(target, room, user) { if (room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); if (!this.can('mute', null, room)) return false; @@ -1062,13 +1317,15 @@ let commands = { if (!this.can('declare', null, room)) return false; HostLeaderboard.softReset().then(() => { HostLeaderboard.write(); - this.privateModCommand(`(${user.name} has reset the host log leaderboard into the next month.)`); + this.privateModAction(`(${user.name} has reset the host log leaderboard into the next month.)`); + this.modlog('SCAV HUNTLOGS', null, 'RESET'); }); return; } else if (target === 'HARD RESET') { if (!this.can('declare', null, room)) return false; HostLeaderboard.hardReset().write(); - this.privateModCommand(`(${user.name} has hard reset the host log leaderboard.)`); + this.privateModAction(`(${user.name} has hard reset the host log leaderboard.)`); + this.modlog('SCAV HUNTLOGS', null, 'HARD RESET'); return; } @@ -1096,7 +1353,7 @@ let commands = { }); }, - playlogs: function (target, room, user) { + playlogs(target, room, user) { if (room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); if (!this.can('mute', null, room)) return false; @@ -1104,13 +1361,15 @@ let commands = { if (!this.can('declare', null, room)) return false; PlayerLeaderboard.softReset().then(() => { PlayerLeaderboard.write(); - this.privateModCommand(`(${user.name} has reset the player log leaderboard into the next month.)`); + this.privateModAction(`(${user.name} has reset the player log leaderboard into the next month.)`); + this.modlog('SCAV PLAYLOGS', null, 'RESET'); }); return; } else if (target === 'HARD RESET') { if (!this.can('declare', null, room)) return false; PlayerLeaderboard.hardReset().write(); - this.privateModCommand(`(${user.name} has hard reset the player log leaderboard.)`); + this.privateModAction(`(${user.name} has hard reset the player log leaderboard.)`); + this.modlog('SCAV PLAYLOGS', null, 'HARD RESET'); return; } @@ -1150,7 +1409,7 @@ let commands = { }, uninfract: "infract", - infract: function (target, room, user) { + infract(target, room, user) { if (room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); if (!this.can('mute', null, room)) return false; @@ -1160,7 +1419,48 @@ let commands = { PlayerLeaderboard.addPoints(targetId, 'infraction', change, true).write(); - this.privateModCommand(`(${user.name} has ${(change > 0 ? 'given' : 'taken')} one infraction point ${(change > 0 ? 'to' : 'from')} '${targetId}'.)`); + this.privateModAction(`(${user.name} has ${(change > 0 ? 'given' : 'taken')} one infraction point ${(change > 0 ? 'to' : 'from')} '${targetId}'.)`); + this.modlog(`SCAV ${this.cmd.toUpperCase()}`, user); + }, + + modsettings: { + '': 'update', + 'update'(target, room, user) { + if (!this.can('declare', null, room) || room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return false; + let settings = room.scavmod || {}; + + this.sendReply(`|uhtml${this.cmd === 'update' ? 'change' : ''}|scav-modsettings|
    Scavenger Moderation Settings:

    ` + + ` Multiple connection verification: ${settings.ipcheck ? 'ON' : 'OFF'}` + + `
    `); + }, + + 'ipcheck'(target, room, user) { + if (!this.can('declare', null, room) || room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return false; + + let settings = room.scavmod || {}; + target = toId(target); + + let setting = { + 'on': true, + 'off': false, + 'toggle': !settings.ipcheck, + }; + + if (!(target in setting)) return this.sendReply('Invalid setting - ON, OFF, TOGGLE'); + + settings.ipcheck = setting[target]; + room.scavmod = settings; + + if (room.chatRoomData) { + room.chatRoomData.scavmod = room.scavmod; + Rooms.global.writeChatRoomData(); + } + + this.privateModAction(`(${user.name} has set multiple connections verification to ${setting[target] ? 'ON' : 'OFF'}.)`); + this.modlog('SCAV MODSETTINGS IPCHECK', null, setting[target] ? 'ON' : 'OFF'); + + this.parse('/scav modsettings update'); + }, }, }; @@ -1173,6 +1473,9 @@ exports.commands = { scavenge: commands.guess, startpracticehunt: 'starthunt', startofficialhunt: 'starthunt', + startminihunt: 'starthunt', + startunratedhunt: 'starthunt', + forcestarthunt: 'starthunt', starthunt: commands.create, joinhunt: commands.join, leavehunt: commands.leave, @@ -1181,6 +1484,7 @@ exports.commands = { endhunt: commands.end, edithunt: commands.edithunt, viewhunt: commands.viewhunt, + inherithunt: commands.inherit, scavengerstatus: commands.status, scavengerhint: commands.hint, @@ -1203,8 +1507,8 @@ exports.commands = { scavtop: commands.ladder, scavengerhelp: 'scavengershelp', scavhelp: 'scavengershelp', - scavengershelp: function (target, room, user) { - if (!room || room.id !== 'scavengers') return this.errorReply("This command can only be used in the scavengers room."); + scavengershelp(target, room, user) { + if (!room || room.id !== 'scavengers' && !(room.parent && room.parent.id === 'scavengers')) return this.errorReply("This command can only be used in the scavengers room."); if (!this.runBroadcast()) return false; const userCommands = [ @@ -1221,11 +1525,12 @@ exports.commands = { const staffCommands = [ "Staff commands:", "- /starthunt [host] | [hint] | [answer] | [hint] | [answer] | [hint] | [answer] | ... - creates a new scavenger hunt. (Requires: % @ * # & ~)", - "- /startofficialhunt [host] | [hint] | [answer] | [hint] | [answer] | [hint] | [answer] | ... - creates a new official scavenger hunt with a 60 second blitz period. Blitz and wins from official hunts will count towards the leaderboard. (Requires: % @ * # & ~)", + "- /start(official/practice/mini/unrated)hunt [host] | [hint] | [answer] | [hint] | [answer] | [hint] | [answer] | ... - creates a new scavenger hunt, giving points if assigned. Blitz and wins will count towards the leaderboard. (Requires: % @ * # & ~)", "- /edithunt [question number], [hint | answer], [value] - edits the current scavenger hunt. Only the host(s) can edit the hunt.", "- /resethunt - resets the current scavenger hunt without revealing the hints and answers. (Requires: % @ * # & ~)", "- /endhunt - ends the current scavenger hunt and announces the winners and the answers. (Requires: % @ * # & ~)", "- /viewhunt - views the current scavenger hunt. Only the user who started the hunt can use this command. Only the host(s) can view the hunt.", + "- /inherithunt - becomes the staff host, gaining staff permissions to the current hunt. (Requires: % @ * # & ~)", "- /scav timer [minutes | off] - sets a timer to automatically end the current hunt. (Requires: % @ * # & ~)", "- /scav addpoints [user], [amount] - gives the user the amount of scavenger points towards the monthly ladder. (Requires: % @ * # & ~)", "- /scav removepoints [user], [amount] - takes the amount of scavenger points from the user towards the monthly ladder. (Requires: % @ * # & ~)", @@ -1234,6 +1539,7 @@ exports.commands = { "- /scav setblitz [value] ... - sets the blitz award to `value`. Use `/scav setblitz` to view what the current blitz value is. (Requires: # & ~)", "- /scav queue [host] | [hint] | [answer] | [hint] | [answer] | [hint] | [answer] | ... - queues a scavenger hunt to be started after the current hunt is finished. (Requires: % @ * # & ~)", "- /scav viewqueue - shows the list of queued scavenger hunts to be automatically started, as well as the option to remove hunts from the queue. (Requires: % @ * # & ~)", + "- /scav defaulttimer [value] - sets the default timer applied to automatically started hunts from the queue.", "- /nexthunt - starts the next hunt in the queue.", ].join('
    '); diff --git a/chat-plugins/tcgtabletop.js b/server/chat-plugins/tcgtabletop.js similarity index 58% rename from chat-plugins/tcgtabletop.js rename to server/chat-plugins/tcgtabletop.js index 2fbec91961c95..41f8bed0c7051 100644 --- a/chat-plugins/tcgtabletop.js +++ b/server/chat-plugins/tcgtabletop.js @@ -6,10 +6,10 @@ 'use strict'; -const http = require('http'); +const https = require('https'); function apiRequest(url, onEnd, onError) { - http.get(url, res => { + https.get(url, res => { let buffer = ''; res.setEncoding('utf8'); res.on('data', data => { @@ -23,28 +23,9 @@ function apiRequest(url, onEnd, onError) { }); } -function mediawikiSearch(domain, query) { - return new Promise(function (resolve, reject) { - apiRequest(`http://${domain}/w/api.php?action=query&list=search&format=json&srsearch=${encodeURIComponent(query)}&srwhat=nearmatch`, res => { - let result; - try { - result = JSON.parse(res); - } catch (e) { - return reject(e); - } - if (!result) return reject(new Error("Malformed data")); - if (!result.query || !result.query.search || !Array.isArray(result.query.search)) return reject(new Error("Malformed data")); - if (!result.query.search.length) return reject(new Error("Not found")); - if (typeof result.query.search[0] !== 'object') return reject(new Error("Malformed data")); - - return resolve(result.query.search[0]); - }, reject); - }); -} - function wikiaSearch(subdomain, query) { return new Promise(function (resolve, reject) { - apiRequest(`http://${subdomain}.wikia.com/api/v1/Search/List/?query=${encodeURIComponent(query)}&limit=1`, res => { + apiRequest(`https://${subdomain}.fandom.com/api/v1/Search/List/?query=${encodeURIComponent(query)}&limit=1`, res => { let result; try { result = JSON.parse(res); @@ -61,7 +42,7 @@ function wikiaSearch(subdomain, query) { } function getCardDetails(subdomain, id) { return new Promise(function (resolve, reject) { - apiRequest(`http://${subdomain}.wikia.com/api/v1/Articles/Details?ids=${encodeURIComponent(id)}&abstract=0&width=80&height=115`, res => { + apiRequest(`https://${subdomain}.fandom.com/api/v1/Articles/Details?ids=${encodeURIComponent(id)}&abstract=0&width=80&height=115`, res => { let result; try { result = JSON.parse(res); @@ -79,11 +60,12 @@ function getCardDetails(subdomain, id) { exports.commands = { ygo: 'yugioh', - yugioh: function (target, room, user) { + yugioh(target, room, user) { if (!this.canBroadcast()) return; if (room.id !== 'tcgtabletop') return this.errorReply("This command can only be used in the TCG & Tabletop room."); let subdomain = 'yugioh'; let query = target.trim(); + if (!query) return this.parse('/help yugioh'); wikiaSearch(subdomain, query).then(data => { if (!this.runBroadcast()) return; @@ -124,38 +106,5 @@ exports.commands = { return room.add(`Error: ${err.message}`).update(); }); }, - ptcg: function (target, room, user) { - if (!this.canBroadcast()) return; - if (room.id !== 'tcgtabletop') return this.errorReply("This command can only be used in the TCG & Tabletop room."); - let domain = 'bulbapedia.bulbagarden.net'; - let query = `${target.trim()} (TCG)`; - - mediawikiSearch(domain, query).then(data => { - if (!this.runBroadcast()) return; - let snippet = Dex.getString(data.snippet); - let page = Dex.getString(data.title); - if (snippet.startsWith('#REDIRECT')) { - let redir = /\[\[(.+)\]\]/.exec(snippet); - if (redir) page = redir[1]; - } - let htmlReply = `Best result for ${Chat.escapeHTML(target)}:
    ${Chat.escapeHTML(page)}`; - if (!this.broadcasting) return this.sendReply(`|raw|
    ${htmlReply}
    `); - room.addRaw(`
    ${htmlReply}
    `).update(); - }, err => { - if (!this.runBroadcast()) return; - - if (err instanceof SyntaxError || err.message === 'Malformed data') { - if (!this.broadcasting) return this.sendReply(`Error: Something went wrong in the request: ${err.message}`); - return room.add(`Error: Something went wrong in the request: ${err.message}`).update(); - } else if (err.message === 'Not found') { - if (!this.broadcasting) return this.sendReply('|raw|
    No results found.
    '); - return room.addRaw('
    No results found.
    ').update(); - } else if (err.code === "ENOTFOUND") { - if (!this.broadcasting) return this.sendReply("Error connecting to bulbapedia."); - return room.add("Error connecting to bulbapedia.").update(); - } - if (!this.broadcasting) return this.sendReply(`Error: ${err.message}`); - return room.add(`Error: ${err.message}`).update(); - }); - }, + yugiohhelp: [`/yugioh [query] - Search the Yugioh wiki.`], }; diff --git a/server/chat-plugins/thecafe.js b/server/chat-plugins/thecafe.js new file mode 100644 index 0000000000000..8d79e720bc7fc --- /dev/null +++ b/server/chat-plugins/thecafe.js @@ -0,0 +1,242 @@ +'use strict'; + +/** @type {typeof import('../../lib/fs').FS} */ +const FS = require(/** @type {any} */('../../.lib-dist/fs')).FS; + +const DISHES_FILE = 'config/chat-plugins/thecafe-foodfight.json'; +const FOODFIGHT_COOLDOWN = 5 * 60 * 1000; + +const thecafe = /** @type {ChatRoom} */ (Rooms.get('thecafe')); + +/** @type {{[k: string]: string[]}} */ +let dishes = {}; +try { + dishes = require(`../../${DISHES_FILE}`); +} catch (e) { + if (e.code !== 'MODULE_NOT_FOUND' && e.code !== 'ENOENT') throw e; +} +if (!dishes || typeof dishes !== 'object') dishes = {}; + +function saveDishes() { + FS(DISHES_FILE).write(JSON.stringify(dishes)); +} + +/** + * Used instead of Dex.packTeam to generate more human-readable output. + * @param {AnyObject[]} team + * @param {string[]} ingredients + */ +function stringifyTeam(team, ingredients) { + let output = ''; + for (let i = 0; i < team.length; i++) { + const mon = team[i]; + output += `${ingredients[i]} (${mon.species}) @ ${mon.item}
    `; + output += `Ability: ${mon.ability}
    `; + if (mon.happiness !== 255) output += `Happiness: ${mon.happiness}
    `; + let evs = []; + for (const stat in mon.evs) { + if (mon.evs[stat]) evs.push(`${mon.evs[stat]} ${stat}`); + } + if (evs.length) output += `EVs: ${evs.join(' / ')}
    `; + output += `${mon.nature} Nature
    `; + let ivs = []; + for (const stat in mon.ivs) { + if (mon.ivs[stat] !== 31) ivs.push(`${mon.ivs[stat]} ${stat}`); + } + if (ivs.length) output += `IVs: ${ivs.join(' / ')}
    `; + output += /** @type {string[]} */ (mon.moves).map(move => `- ${move}
    `).join(''); + output += '
    '; + } + return output; +} + +/** + * @param {string} [generator] + */ +function generateTeam(generator = '') { + let potentialPokemon = Object.keys(Dex.data.Pokedex).filter(mon => { + const template = Dex.getTemplate(mon); + return template.baseSpecies === template.species; + }); + let speciesClause = true; + switch (generator) { + case 'ou': + potentialPokemon = potentialPokemon.filter(mon => { + const template = Dex.getTemplate(mon); + return template.tier === 'OU'; + }).concat(potentialPokemon.filter(mon => { + // There is probably a better way to get the ratios right, oh well. + const template = Dex.getTemplate(mon); + return template.tier === 'OU' || template.tier === 'UU'; + })); + break; + case 'ag': + potentialPokemon = potentialPokemon.filter(mon => { + const template = Dex.getTemplate(mon); + const unviable = template.tier === 'NFE' || template.tier === 'PU' || template.tier === '(PU)' || template.tier.startsWith("LC"); + const illegal = template.tier === 'Unreleased' || template.tier === 'Illegal' || template.tier.startsWith("CAP"); + return !(unviable || illegal); + }); + speciesClause = false; + break; + default: + potentialPokemon = potentialPokemon.filter(mon => { + const template = Dex.getTemplate(mon); + const op = template.tier === 'AG' || template.tier === 'Uber'; + const unviable = template.tier === 'Illegal' || template.tier.includes("LC"); + return !(op || unviable); + }); + potentialPokemon.push('miltank', 'miltank', 'miltank', 'miltank'); // 5x chance for miltank for flavor purposes. + } + + /** @type {string[]} */ + const team = []; + + while (team.length < 6) { + const randIndex = Math.floor(Math.random() * potentialPokemon.length); + const potentialMon = potentialPokemon[randIndex]; + if (team.includes(potentialMon)) continue; + team.push(potentialMon); + if (speciesClause) potentialPokemon.splice(randIndex, 1); + } + + return team.map(mon => Dex.getTemplate(mon).species); +} + +/** + * @return {[string, string[]]} + */ +function generateDish() { + const keys = Object.keys(dishes); + const entry = dishes[keys[Math.floor(Math.random() * keys.length)]].slice(); + const dish = entry.splice(0, 1)[0]; + const ingredients = []; + while (ingredients.length < 6) { + ingredients.push(entry.splice(Math.floor(Math.random() * entry.length), 1)[0]); + } + return [dish, ingredients]; +} + +/** @type {ChatCommands} */ +const commands = { + foodfight(target, room, user) { + if (room !== thecafe) return this.errorReply("This command is only available in The Café."); + + if (!Object.keys(dishes).length) return this.errorReply("No dishes found. Add some dishes first."); + + // @ts-ignore + if (user.foodfight && user.foodfight.timestamp + FOODFIGHT_COOLDOWN > Date.now()) return this.errorReply("Please wait a few minutes before using this command again."); + + target = toId(target); + + let team, importable; + const [dish, ingredients] = generateDish(); + if (!target) { + const bfTeam = Dex.generateTeam('gen7bssfactory'); + importable = stringifyTeam(bfTeam, ingredients); + team = /** @type {Template[]} */ (bfTeam).map(val => val.species); + } else { + team = generateTeam(target); + } + // @ts-ignore + user.foodfight = {team: team, dish: dish, ingredients: ingredients, timestamp: Date.now()}; + const importStr = importable ? `
    Importable team:
    ${importable}
    ` : ''; + return this.sendReplyBox(`
    ${team.map(mon => ``).join('')}${ingredients.map(ingredient => ``).join('')}${importStr}
    Your dish is: ${dish}
    Team ${mon}
    Ingredients${ingredient}
    `); + }, + checkfoodfight(target, room, user) { + if (room !== thecafe) return this.errorReply("This command is only available in The Café."); + + const targetUser = this.targetUserOrSelf(target, false); + if (!targetUser) return this.errorReply(`User ${this.targetUsername} not found.`); + const self = targetUser === user; + if (!self && !this.can('mute', targetUser, room)) return false; + // @ts-ignore + if (!targetUser.foodfight) return this.errorReply(`${self ? `You don't` : `This user doesn't`} have an active Foodfight team.`); + // @ts-ignore + return this.sendReplyBox(`
    ${targetUser.foodfight.team.map(mon => ``).join('')}${targetUser.foodfight.ingredients.map(ingredient => ``).join('')}
    ${self ? `Your` : `${this.targetUsername}'s`} dish is: ${targetUser.foodfight.dish}
    Team ${mon}
    Ingredients${ingredient}
    `); + }, + addingredients: 'adddish', + adddish(target, room, user, connection, cmd) { + if (room !== thecafe) return this.errorReply("This command is only available in The Café."); + if (!this.can('mute', null, room)) return false; + + let [dish, ...ingredients] = target.split(','); + dish = dish.trim(); + if (!dish || !ingredients.length) return this.parse('/help foodfight'); + const id = toId(dish); + if (id === 'constructor') return this.errorReply("Invalid dish name."); + ingredients = ingredients.map(ingredient => ingredient.trim()); + + if ([...ingredients.entries()].some(([index, ingredient]) => ingredients.indexOf(ingredient) !== index)) { + return this.errorReply("Please don't enter duplicate ingredients."); + } + + if (ingredients.some(ingredient => ingredient.length > 19)) { + return this.errorReply("Ingredients can only be 19 characters long."); + } + + if (cmd === 'adddish') { + if (dishes[id]) return this.errorReply("This dish already exists."); + if (ingredients.length < 6) return this.errorReply("Dishes need at least 6 ingredients."); + dishes[id] = [dish]; + } else { + if (!dishes[id]) return this.errorReply(`Dish not found: ${dish}`); + if (ingredients.some(ingredient => dishes[id].includes(ingredient))) return this.errorReply("Please don't enter duplicate ingredients."); + } + + dishes[id] = dishes[id].concat(ingredients); + saveDishes(); + this.sendReply(`${cmd.slice(3)} '${dish}: ${ingredients.join(', ')}' added successfully.`); + }, + removedish(target, room, user) { + if (room !== thecafe) return this.errorReply("This command is only available in The Café."); + if (!this.can('mute', null, room)) return false; + + const id = toId(target); + if (id === 'constructor') return this.errorReply("Invalid dish."); + if (!dishes[id]) return this.errorReply(`Dish '${target}' not found.`); + + delete dishes[id]; + saveDishes(); + this.sendReply(`Dish '${target}' deleted successfully.`); + }, + viewdishes(target, room, user, connection) { + if (room !== thecafe) return this.errorReply("This command is only available in The Café."); + + return this.parse(`/join view-foodfight`); + }, + foodfighthelp: [ + `/foodfight - Gives you a randomly generated Foodfight dish, ingredient list and team. Generator can be either 'random', 'ou', 'ag', or left blank. If left blank, uses Battle Factory to generate an importable team.`, + `/checkfoodfight - Gives you the last team and dish generated for the entered user, or your own if left blank. Anyone can check their own info, checking other people requires: % @ # & ~`, + `/adddish , , , ... - Adds a dish to the database. Requires: % @ # & ~`, + `/addingredients , , , ... - Adds extra ingredients to a dish in the database. Requires: % @ # & ~`, + `/removedish - Removes a dish from the database. Requires: % @ # & ~`, + `/viewdishes - Shows the entire database of dishes. Requires: % @ # & ~`, + ], +}; + +exports.commands = commands; + +/** @type {PageTable} */ +const pages = { + foodfight(query, user, connection) { + if (!user.named) return Rooms.RETRY_AFTER_LOGIN; + let buf = `|title|Foodfight\n|pagehtml|

    Foodfight Dish list

    `; + if (!user.can('mute', null, thecafe)) { + return buf + `

    Access denied

    `; + } + let content = Object.keys(dishes).map(entry => { + const [dish, ...ingredients] = dishes[entry]; + return `${dish}${ingredients.join(', ')}`; + }).join(''); + + if (!content) { + buf += `

    There are no dishes in the database.

    `; + } else { + buf += `${content}

    Dishes

    Ingredients

    `; + } + buf += ``; + return buf; + }, +}; +exports.pages = pages; diff --git a/server/chat-plugins/thing-of-the-day.js b/server/chat-plugins/thing-of-the-day.js new file mode 100644 index 0000000000000..0460a2d8ef97f --- /dev/null +++ b/server/chat-plugins/thing-of-the-day.js @@ -0,0 +1,684 @@ +'use strict'; + +/** @type {typeof import('../../lib/fs').FS} */ +const FS = require(/** @type {any} */('../../.lib-dist/fs')).FS; + +const MINUTE = 60 * 1000; +const ROOMIDS = ['thestudio', 'jubilifetvfilms', 'youtube', 'thelibrary', 'prowrestling']; + +/** @type {{[k: string]: ChatRoom}} */ +const rooms = {}; + +for (const roomid of ROOMIDS) { + rooms[roomid] = /** @type {ChatRoom} */ (Rooms.get(roomid)); +} + +const AOTDS_FILE = 'config/chat-plugins/thestudio.tsv'; +const FOTDS_FILE = 'config/chat-plugins/tvbf-films.tsv'; +const SOTDS_FILE = 'config/chat-plugins/tvbf-shows.tsv'; +const COTDS_FILE = 'config/chat-plugins/youtube-channels.tsv'; +const BOTWS_FILE = 'config/chat-plugins/thelibrary.tsv'; +const MOTWS_FILE = 'config/chat-plugins/prowrestling-matches.tsv'; +const PRENOMS_FILE = 'config/chat-plugins/otd-prenoms.json'; + +/** @type {{[k: string]: [string, AnyObject][]}} */ +let prenoms = {}; +try { + prenoms = require(`../../${PRENOMS_FILE}`); +} catch (e) { + if (e.code !== 'MODULE_NOT_FOUND' && e.code !== 'ENOENT') throw e; +} +if (!prenoms || typeof prenoms !== 'object') prenoms = {}; + +function savePrenoms() { + FS(PRENOMS_FILE).write(JSON.stringify(prenoms)); +} + +/** + * @param {string} nomination + * + * toId would return '' for foreign/sadistic nominations + */ +function toNominationId(nomination) { + return nomination.toLowerCase().replace(/\s/g, '').replace(/\b&\b/g, ''); +} + +class OtdHandler { + /** + * @param {string} id + * @param {string} name + * @param {ChatRoom} room + * @param {string} filename + * @param {string[]} keys + * @param {string[]} keyLabels + * @param {boolean} week + */ + constructor(id, name, room, filename, keys, keyLabels, week = false) { + this.id = id; + this.name = name; + this.room = room; + + /** @type {Map} */ + this.nominations = new Map(prenoms[id]); + this.removedNominations = new Map(); + + this.voting = false; + this.timer = null; + + this.file = FS(filename); + + this.keys = keys; + this.keyLabels = keyLabels; + this.timeLabel = week ? 'Week' : 'Day'; + + /** @type {AnyObject[]} */ + this.winners = []; + + this.file.read().then(content => { + const data = ('' + content).split("\n"); + for (const arg of data) { + if (!arg || arg === '\r') continue; + if (arg.startsWith(`${this.keyLabels[0]}\t`)) continue; + /** @type {AnyObject} */ + const entry = {}; + let vals = arg.trim().split("\t"); + for (let i = 0; i < vals.length; i++) { + entry[this.keys[i]] = vals[i]; + } + entry.time = Number(entry.time) || 0; + this.winners.push(entry); + } + }).catch(err => { + if (err.code !== 'ENOENT') throw err; + }); + } + + startVote() { + this.voting = true; + this.timer = setTimeout(() => this.rollWinner(), 20 * MINUTE); + this.display(); + } + + finish() { + this.voting = false; + this.nominations = new Map(); + this.removedNominations = new Map(); + delete prenoms[this.id]; + savePrenoms(); + if (this.timer) clearTimeout(this.timer); + } + + /** + * @param {User} user + * @param {string} nomination + */ + addNomination(user, nomination) { + const id = toNominationId(nomination); + + if (this.winners.slice(this.room === rooms.jubilifetvfilms ? -15 : -30).some(entry => toNominationId(entry[this.keys[0]]) === id)) return user.sendTo(this.room, `This ${this.name.toLowerCase()} has already been ${this.id} in the past month.`); + + for (const value of this.removedNominations.values()) { + if (toId(user) in value.userids || user.latestIp in value.ips) return user.sendTo(this.room, `Since your nomination has been removed by staff, you cannot submit another ${this.name.toLowerCase()} until the next round.`); + } + + const prevNom = this.nominations.get(id); + if (prevNom) { + if (!(toId(user) in prevNom.userids || user.latestIp in prevNom.ips)) { + return user.sendTo(this.room, `This ${this.name.toLowerCase()} has already been nominated.`); + } + } + + for (const [key, value] of this.nominations) { + if (toId(user) in value.userids || user.latestIp in value.ips) { + user.sendTo(this.room, `Your previous vote for ${value.nomination} will be removed.`); + this.nominations.delete(key); + if (prenoms[this.id]) { + let idx = prenoms[this.id].findIndex(val => val[0] === key); + if (idx > -1) { + prenoms[this.id].splice(idx, 1); + savePrenoms(); + } + } + } + } + + /** @type {{[k: string]: string}} */ + let obj = {}; + obj[user.userid] = user.name; + + let nomObj = {nomination: nomination, name: user.name, userids: Object.assign(obj, user.prevNames), ips: Object.assign({}, user.ips)}; + + this.nominations.set(id, nomObj); + + if (!prenoms[this.id]) prenoms[this.id] = []; + prenoms[this.id].push([id, nomObj]); + savePrenoms(); + + user.sendTo(this.room, `Your nomination for ${nomination} was successfully submitted.`); + + if (this.voting) this.display(); + } + + generateNomWindow() { + let buffer = ''; + + if (this.voting) { + buffer += `

    Nominations for ${this.name} of the ${this.timeLabel} are in progress! Use /${this.id} nom to nominate a${['A', 'E', 'I', 'O', 'U'].includes(this.name[0]) ? 'n' : ''} ${this.name.toLowerCase()}!

    `; + if (this.nominations.size) buffer += `Nominations:`; + } else { + buffer += `

    Pre-noms for ${this.name} of the ${this.timeLabel}:

    `; + } + + /** @type {string[]} */ + const entries = []; + + this.nominations.forEach(value => { + entries.push(`
  • ${value.nomination} (Submitted by ${value.name})
  • `); + }); + + if (entries.length > 20) { + buffer += `
      ${entries.slice(0, Math.ceil(entries.length / 2)).join('')}
      ${entries.slice(Math.ceil(entries.length / 2)).join('')}
    `; + } else { + buffer += `
      ${entries.join('')}
    `; + } + + buffer += `
    `; + + return buffer; + } + + display() { + this.room.add(`|uhtml|otd|${this.generateNomWindow()}`); + } + + /** + * @param {Connection} connection + */ + displayTo(connection) { + connection.sendTo(this.room, `|uhtml|otd|${this.generateNomWindow()}`); + } + + rollWinner() { + let keys = [...this.nominations.keys()]; + if (!keys.length) return false; + + let winner = this.nominations.get(keys[Math.floor(Math.random() * keys.length)]); + if (!winner) return false; // Should never happen but shuts typescript up. + this.appendWinner(winner.nomination, winner.name); + + const names = [...this.nominations.values()].map(obj => obj.name); + + let columns = names.length > 27 ? 4 : names.length > 18 ? 3 : names.length > 9 ? 2 : 1; + let content = ''; + for (let i = 0; i < columns; i++) { + content += `${names.slice(Math.ceil((i / columns) * names.length), Math.ceil(((i + 1) / columns) * names.length)).join('
    ')}`; + } + const namesHTML = `${content}

    `; + + this.room.add(Chat.html `|uhtml|otd|

    Nominations for ${this.name} of the ${this.timeLabel} are over!

    Out of ${keys.length} nominations, we randomly selected ${winner.nomination} as the winner! (Nomination by ${winner.name})

    Thanks to today's participants:` + namesHTML); + this.room.update(); + + this.finish(); + return true; + } + + /** + * @param {string} name + */ + removeNomination(name) { + name = toId(name); + + let success = false; + for (const [key, value] of this.nominations) { + if (name in value.userids) { + this.removedNominations.set(key, value); + this.nominations.delete(key); + if (prenoms[this.id]) { + let idx = prenoms[this.id].findIndex(val => val[0] === key); + if (idx > -1) { + prenoms[this.id].splice(idx, 1); + savePrenoms(); + } + } + success = true; + } + } + + if (this.voting) this.display(); + return success; + } + + /** + * @param {string} winner + * @param {string} user + */ + forceWinner(winner, user) { + this.appendWinner(winner, user); + this.finish(); + } + + /** + * @param {string} nomination + * @param {string} user + */ + appendWinner(nomination, user) { + /** @type {AnyObject} */ + const entry = {time: Date.now(), nominator: user}; + entry[this.keys[0]] = nomination; + this.winners.push(entry); + this.saveWinners(); + } + + /** + * @param {{[k: string]: string}} properties + */ + setWinnerProperty(properties) { + if (!this.winners.length) return; + for (let i in properties) { + this.winners[this.winners.length - 1][i] = properties[i]; + } + this.saveWinners(); + } + + saveWinners() { + let buf = `${this.keyLabels.join('\t')}\n`; + for (const winner of this.winners) { + let strings = []; + + for (const key of this.keys) { + strings.push(winner[key] || ''); + } + + buf += `${strings.join('\t')}\n`; + } + + this.file.write(buf); + } + + async generateWinnerDisplay() { + if (!this.winners.length) return false; + let winner = this.winners[this.winners.length - 1]; + + let output = Chat.html `

    The ${this.name} of the ${this.timeLabel} is ${winner[this.keys[0]]}${winner.author ? ` by ${winner.author}` : ''}.`; + if (winner.quote) output += Chat.html `
    "${winner.quote}"`; + if (winner.tagline) output += Chat.html `
    ${winner.tagline}`; + output += `

    `; + if (winner.image) { + const [width, height] = await Chat.fitImage(winner.image, 100, 100); + output += Chat.html ``; + } + output += `
    `; + if (winner.event) output += Chat.html `Event: ${winner.event}
    `; + if (winner.song) { + output += `Song: `; + if (winner.link) { + output += Chat.html `${winner.song}`; + } else { + output += Chat.escapeHTML(winner.song); + } + output += `
    `; + } else if (winner.link) { + output += Chat.html `Link: ${winner.link}
    `; + } + output += Chat.html `Nominated by ${winner.nominator}.`; + output += `
    `; + + return output; + } + + /** + * @param {PageContext} context + */ + generateWinnerList(context) { + context.title = `${this.id.toUpperCase()} Winners`; + let buf = `

    ${this.name} of the ${this.timeLabel} Winners

    `; + + // Only use specific fields for displaying in winners list. + /** @type {string[]} */ + const columns = []; + const labels = []; + + for (let i = 0; i < this.keys.length; i++) { + if (i === 0 || ['song', 'event', 'time', 'link', 'tagline'].includes(this.keys[i]) && !(this.keys[i] === 'link' && this.keys.includes('song'))) { + columns.push(this.keys[i]); + labels.push(this.keyLabels[i]); + } + } + + let content = ``; + + content += `${labels.map(label => `

    ${label}

    `).join('')}`; + for (let i = this.winners.length - 1; i >= 0; i--) { + const entry = columns.map(col => { + let val = this.winners[i][col]; + if (!val) return ''; + switch (col) { + case 'time': + let date = new Date(this.winners[i].time); + + /** @param {number} num */ + const pad = num => num < 10 ? '0' + num : num; + + return Chat.html `${pad(date.getMonth() + 1)}-${pad(date.getDate())}-${date.getFullYear()}`; + case 'song': + if (!this.winners[i].link) return val; + // falls through + case 'link': + return `${val}`; + case 'book': + val = `${val}${this.winners[i].author ? ` by ${this.winners[i].author}` : ''}`; + // falls through + case columns[0]: + return `${Chat.escapeHTML(val)}${this.winners[i].nominator ? Chat.html `
    nominated by ${this.winners[i].nominator}` : ''}`; + default: + return Chat.escapeHTML(val); + } + }); + content += `${entry.map(val => `${val}`).join('')}`; + } + if (!content) { + buf += `

    There have been no ${this.id} winners.

    `; + } else { + buf += `${content}
    `; + } + buf += `
    `; + return buf; + } +} + +const aotd = new OtdHandler('aotd', 'Artist', rooms.thestudio, AOTDS_FILE, ['artist', 'nominator', 'quote', 'song', 'link', 'image', 'time'], ['Artist', 'Nominator', 'Quote', 'Song', 'Link', 'Image', 'Timestamp']); +const fotd = new OtdHandler('fotd', 'Film', rooms.jubilifetvfilms, FOTDS_FILE, ['film', 'nominator', 'quote', 'link', 'image', 'time'], ['Film', 'Nominator', 'Quote', 'Link', 'Image', 'Timestamp']); +const sotd = new OtdHandler('sotd', 'Show', rooms.jubilifetvfilms, SOTDS_FILE, ['show', 'nominator', 'quote', 'link', 'image', 'time'], ['Show', 'Nominator', 'Quote', 'Link', 'Image', 'Timestamp']); +const cotd = new OtdHandler('cotd', 'Channel', rooms.youtube, COTDS_FILE, ['channel', 'nominator', 'link', 'tagline', 'image', 'time'], ['Show', 'Nominator', 'Link', 'Tagline', 'Image', 'Timestamp']); +const botw = new OtdHandler('botw', 'Book', rooms.thelibrary, BOTWS_FILE, ['book', 'nominator', 'link', 'quote', 'author', 'image', 'time'], ['Book', 'Nominator', 'Link', 'Quote', 'Author', 'Image', 'Timestamp'], true); +const motw = new OtdHandler('motw', 'Match', rooms.prowrestling, MOTWS_FILE, ['match', 'nominator', 'link', 'tagline', 'event', 'image', 'time'], ['Match', 'Nominator', 'Link', 'Tagline', 'Event', 'Image', 'Timestamp'], true); + +/** + * @param {string} message + */ +function selectHandler(message) { + let id = toId(message.substring(1, 5)); + switch (id) { + case 'aotd': + return aotd; + case 'fotd': + return fotd; + case 'sotd': + return sotd; + case 'cotd': + return cotd; + case 'botw': + return botw; + case 'motw': + return motw; + default: + throw new Error("Invalid type for otd handler."); + } +} + +/** @type {ChatCommands} */ +let commands = { + start(target, room, user, connection, cmd) { + if (!this.canTalk()) return; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + if (!this.can('mute', null, room)) return false; + + if (handler.voting) return this.errorReply(`The nomination for the ${handler.name} of the ${handler.timeLabel} nomination is already in progress.`); + handler.startVote(); + + this.privateModAction(`(${user.name} has started nominations for the ${handler.name} of the ${handler.timeLabel}.)`); + this.modlog(`${handler.id.toUpperCase()} START`, null); + }, + starthelp: [`/-otd start - Starts nominations for the Thing of the Day. Requires: % @ # & ~`], + + end(target, room, user) { + if (!this.canTalk()) return; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + if (!this.can('mute', null, room)) return false; + + if (!handler.voting) return this.errorReply(`There is no ${handler.name} of the ${handler.timeLabel} nomination in progress.`); + + if (!handler.nominations.size) return this.errorReply(`Can't select the ${handler.name} of the ${handler.timeLabel} without nominations.`); + + handler.rollWinner(); + + this.privateModAction(`(${user.name} has ended nominations for the ${handler.name} of the ${handler.timeLabel}.)`); + this.modlog(`${handler.id.toUpperCase()} END`, null); + }, + endhelp: [`/-otd end - End nominations for the Thing of the Day and set it to a randomly selected nomination. Requires: % @ # & ~`], + + nom(target, room, user) { + if (!this.canTalk()) return; + if (!target) return this.parse('/help otd'); + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + + if (!toNominationId(target).length || target.length > 50) return this.sendReply(`'${target}' is not a valid ${handler.name.toLowerCase()} name.`); + + handler.addNomination(user, target); + }, + nomhelp: [`/-otd nom [nomination] - Nominate something for Thing of the Day.`], + + view(target, room, user, connection) { + if (!this.canTalk()) return; + if (!this.runBroadcast()) return false; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + + if (this.broadcasting) { + selectHandler(this.message).display(); + } else { + selectHandler(this.message).displayTo(connection); + } + }, + viewhelp: [`/-otd view - View the current nominations for the Thing of the Day.`], + + remove(target, room, user) { + if (!this.canTalk()) return; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + if (!this.can('mute', null, room)) return false; + + let userid = toId(target); + if (!userid) return this.errorReply(`'${target}' is not a valid username.`); + + if (handler.removeNomination(userid)) { + this.privateModAction(`(${user.name} removed ${target}'s nomination for the ${handler.name} of the ${handler.timeLabel}.)`); + this.modlog(`${handler.id.toUpperCase()} REMOVENOM`, userid); + } else { + this.sendReply(`User '${target}' has no nomination for the ${handler.name} of the ${handler.timeLabel}.`); + } + }, + removehelp: [`/-otd remove [username] - Remove a user's nomination for the Thing of the Day and prevent them from voting again until the next round. Requires: % @ # & ~`], + + force(target, room, user) { + if (!this.canTalk()) return; + if (!target) return this.parse('/help aotd force'); + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + if (!this.can('declare', null, room)) return false; + + if (!toNominationId(target).length || target.length > 50) return this.sendReply(`'${target}' is not a valid ${handler.name.toLowerCase()} name.`); + + handler.forceWinner(target, user.name); + this.privateModAction(`(${user.name} forcibly set the ${handler.name} of the ${handler.timeLabel} to ${target}.)`); + this.modlog(`${handler.id.toUpperCase()} FORCE`, user.name, target); + room.add(`The ${handler.name} of the ${handler.timeLabel} was forcibly set to '${target}'`); + }, + forcehelp: [`/-otd force [nomination] - Forcibly sets the Thing of the Day without a nomination round. Requires: # & ~`], + + delay(target, room, user) { + if (!this.canTalk()) return; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + if (!this.can('mute', null, room)) return false; + + if (!(handler.voting && handler.timer)) return this.errorReply(`There is no ${handler.name} of the ${handler.timeLabel} nomination to disable the timer for.`); + + clearTimeout(handler.timer); + + this.privateModAction(`(${user.name} disabled the ${handler.name} of the ${handler.timeLabel} timer.)`); + }, + delayhelp: [`/-otd delay - Turns off the automatic 20 minute timer for Thing of the Day voting rounds. Requires: % @ # & ~`], + + set(target, room, user) { + if (!this.canTalk()) return; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + if (!this.can('mute', null, room)) return false; + + let params = target.split(target.includes('|') ? '|' : ',').map(param => param.trim()); + + /** @type {{[k: string]: string}} */ + let changelist = {}; + + for (const param of params) { + let [key, ...values] = param.split(':'); + if (!key || !values.length) return this.errorReply(`Syntax error in '${param}'`); + + key = key.trim(); + let value = values.join(':').trim(); + + if (!handler.keys.includes(key)) return this.errorReply(`Invalid value for property: ${key}`); + + switch (key) { + case 'artist': + case 'film': + case 'show': + case 'channel': + case 'book': + case 'author': + if (!toNominationId(value) || value.length > 50) return this.errorReply(`Please enter a valid ${key} name.`); + break; + case 'quote': + case 'tagline': + case 'match': + case 'event': + if (!value.length || value.length > 150) return this.errorReply(`Please enter a valid ${key}.`); + break; + case 'song': + if (!value.length || value.length > 50) return this.errorReply("Please enter a valid song name."); + break; + case 'link': + case 'image': + if (!/https?:\/\//.test(value)) return this.errorReply(`Please enter a valid URL for the ${key} (starting with http:// or https://)`); + if (value.length > 200) return this.errorReply("URL too long."); + break; + default: + return this.errorReply(`Invalid value for property: ${key}`); + } + + changelist[key] = value; + } + + let keys = Object.keys(changelist); + + if (keys.length) { + handler.setWinnerProperty(changelist); + this.modlog(handler.id.toUpperCase(), null, `changed ${keys.join(', ')}`); + return this.privateModAction(`(${user.name} changed the following propert${Chat.plural(keys, 'ies', 'y')} of the ${handler.name} of the ${handler.timeLabel}: ${keys.join(', ')})`); + } + }, + sethelp: [`/-otd set property: value[, property: value] - Set the winner, quote, song, link or image for the current Thing of the Day. Requires: % @ # & ~`], + + winners(target, room, user, connection) { + if (!this.canTalk()) return; + + const handler = selectHandler(this.message); + + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + + return this.parse(`/join view-${handler.id}`); + }, + winnershelp: [`/-otd winners - Displays a list of previous things of the day.`], + + ''(target, room) { + if (!this.canTalk()) return; + if (!this.runBroadcast()) return false; + + const handler = selectHandler(this.message); + if (!handler.room) return this.errorReply(`The room for this -otd doesn't exist.`); + + if (room !== handler.room) return this.errorReply(`This command can only be used in ${handler.room.title}.`); + + handler.generateWinnerDisplay().then(text => { + if (!text) return this.errorReply("There is no winner yet."); + this.sendReplyBox(text); + this.room.update(); + }); + }, +}; + +/** @type {PageTable} */ +const pages = { + aotd() { + return aotd.generateWinnerList(this); + }, + fotd() { + return fotd.generateWinnerList(this); + }, + sotd() { + return sotd.generateWinnerList(this); + }, + cotd() { + return cotd.generateWinnerList(this); + }, + botw() { + return botw.generateWinnerList(this); + }, + motw() { + return motw.generateWinnerList(this); + }, +}; +exports.pages = pages; + +const help = [ + `Thing of the Day plugin commands (aotd, fotd, sotd, cotd, botw, motw):`, + `- /-otd - View the current Thing of the Day.`, + `- /-otd start - Starts nominations for the Thing of the Day. Requires: % @ # & ~`, + `- /-otd nom [nomination] - Nominate something for Thing of the Day.`, + `- /-otd remove [username] - Remove a user's nomination for the Thing of the Day and prevent them from voting again until the next round. Requires: % @ # & ~`, + `- /-otd end - End nominations for the Thing of the Day and set it to a randomly selected nomination. Requires: % @ # & ~`, + `- /-otd force [nomination] - Forcibly sets the Thing of the Day without a nomination round. Requires: # & ~`, + `- /-otd delay - Turns off the automatic 20 minute timer for Thing of the Day voting rounds. Requires: % @ # & ~`, + `- /-otd set property: value[, property: value] - Set the winner, quote, song, link or image for the current Thing of the Day. Requires: % @ # & ~`, + `- /-otd winners - Displays a list of previous things of the day.`, +]; + +exports.commands = { + aotd: commands, + fotd: commands, + sotd: commands, + cotd: commands, + botw: commands, + motw: commands, + aotdhelp: help, + otdhelp: help, +}; diff --git a/server/chat-plugins/trivia.js b/server/chat-plugins/trivia.js new file mode 100644 index 0000000000000..693a50222d3eb --- /dev/null +++ b/server/chat-plugins/trivia.js @@ -0,0 +1,1952 @@ +/* + * Trivia plugin + * Written by Morfent + */ + +'use strict'; + +/** @type {typeof import('../../lib/fs').FS} */ +const FS = require(/** @type {any} */('../../.lib-dist/fs')).FS; + +const MAIN_CATEGORIES = { + ae: 'Arts and Entertainment', + pokemon: 'Pok\u00E9mon', + sg: 'Science and Geography', + sh: 'Society and Humanities', +}; + +const SPECIAL_CATEGORIES = { + misc: 'Miscellaneous', + subcat: 'Sub-Category', +}; + +const ALL_CATEGORIES = { + ae: 'Arts and Entertainment', + misc: 'Miscellaneous', + pokemon: 'Pok\u00E9mon', + sg: 'Science and Geography', + sh: 'Society and Humanities', + subcat: 'Sub-Category', +}; + +const MODES = { + first: 'First', + number: 'Number', + timer: 'Timer', + wl: "Weakest Link", + weakestlink: "Weakest Link", +}; + +const TYPES = { + trivia: 'Trivia', + weakestlink: 'Weakest Link', +}; + +const LENGTHS = { + short: { + cap: 20, + prizes: [3, 2, 1], + }, + medium: { + cap: 35, + prizes: [4, 2, 1], + }, + long: { + cap: 50, + prizes: [5, 3, 1], + }, +}; + +Object.setPrototypeOf(MAIN_CATEGORIES, null); +Object.setPrototypeOf(SPECIAL_CATEGORIES, null); +Object.setPrototypeOf(ALL_CATEGORIES, null); +Object.setPrototypeOf(MODES, null); +Object.setPrototypeOf(LENGTHS, null); + +const SIGNUP_PHASE = 'signups'; +const QUESTION_PHASE = 'question'; +const INTERMISSION_PHASE = 'intermission'; +const LIMBO_PHASE = 'limbo'; + +const MINIMUM_PLAYERS = 3; +const START_TIMEOUT = 30 * 1000; +const INTERMISSION_INTERVAL = 20 * 1000; + +const MAX_QUESTION_LENGTH = 252; +const MAX_ANSWER_LENGTH = 32; + +const BANK_AMOUNTS = [1000, 2500, 5000, 10000, 25000, 50000, 75000, 125000]; +const NUM_FINALS_QUESTIONS = 5; + +/** + * @typedef {{question: string, category: string, answers: string[], user?: string, type?: string}} TriviaQuestion + * @typedef {[number, number, number]} TriviaRank + * @typedef {TriviaQuestion[]} TriviaQuestions + * @typedef {{[k: string]: TriviaRank}} TriviaLeaderboard + * @typedef {TriviaRank[][]} TriviaLadder + * @typedef {{questions?: TriviaQuestions, submissions?: TriviaQuestions, leaderboard?: TriviaLeaderboard, ladder?: TriviaLadder, wlquestions?: TriviaQuestions, wlsubmissions?: TriviaQuestions}} TriviaData + */ + +const PATH = 'config/chat-plugins/triviadata.json'; + +/** + * TODO: move trivia database code to a separate file once relevant. + * @type {TriviaData} + */ +let triviaData = {}; +try { + triviaData = require(`../../${PATH}`); +} catch (e) {} // file doesn't exist or contains invalid JSON + +if (!triviaData || typeof triviaData !== 'object') triviaData = {}; +if (typeof triviaData.leaderboard !== 'object') triviaData.leaderboard = {}; +if (typeof triviaData.altLeaderboard !== 'object') triviaData.altLeaderboard = {}; +if (!Array.isArray(triviaData.questions)) triviaData.questions = []; +if (!Array.isArray(triviaData.submissions)) triviaData.submissions = []; +if (triviaData.questions.some(q => !('type' in q))) { + triviaData.questions = triviaData.questions.map(q => Object.assign(Object.create(null), q, {type: 'trivia'})); +} +if (triviaData.wlquestions) delete triviaData.wlquestions; +if (triviaData.wlsubmissions) delete triviaData.wlsubmissions; + +function writeTriviaData() { + FS(PATH).writeUpdate(() => ( + JSON.stringify(triviaData, null, 2) + )); +} + +/** + * Binary search for the index at which to splice in new questions in a category, + * or the index at which to slice up to for a category's questions + * TODO: why isn't this a map? Storing questions/submissions sorted by + * category is pretty stupid when maps exist for that purpose. + * @param {string} category + * @param {boolean?} isSubmissions + * @return {number} + */ +function findEndOfCategory(category, inSubmissions) { + let questions = inSubmissions ? triviaData.submissions : triviaData.questions; + let left = 0; + let right = questions.length; + let i = 0; + let curCategory; + while (left < right) { + i = (left + right) / 2 | 0; + curCategory = questions[i].category; + if (curCategory < category) { + left = i + 1; + } else if (curCategory > category) { + right = i; + } else { + while (++i < questions.length) { + if (questions[i].category !== category) break; + } + return i; + } + } + + return left; +} + +/** + * @param {string} category + * @return {TriviaQuestion[]} + */ +function sliceCategory(category) { + let questions = triviaData.questions; + if (!questions.length) return []; + + let sliceUpTo = findEndOfCategory(category, false); + if (!sliceUpTo) return []; + + let categories = Object.keys(ALL_CATEGORIES); + let categoryIdx = categories.indexOf(category); + if (!categoryIdx) return questions.slice(0, sliceUpTo); + + // findEndOfCategory for the category prior to the specified one in + // alphabetical order returns the index of the first question in it + let sliceFrom = findEndOfCategory(categories[categoryIdx - 1], false); + if (sliceFrom === sliceUpTo) return []; + + return questions.slice(sliceFrom, sliceUpTo); +} + +class Ladder { + constructor(leaderboard) { + this.leaderboard = leaderboard; + this.cache = null; + } + + invalidateCache() { + this.cache = null; + } + + get() { + if (this.cache) { + return this.cache; + } + this.cache = this.computeCachedLadder(); + return this.cache; + } + + computeCachedLadder() { + let leaders = Object.keys(this.leaderboard); + let ladder = []; + let ranks = {}; + for (const leader of leaders) { + ranks[leader] = []; + } + for (let i = 0; i < 3; i++) { + leaders.sort((a, b) => this.leaderboard[b][i] - this.leaderboard[a][i]); + + let max = Infinity; + let rank = -1; + for (const leader of leaders) { + let score = this.leaderboard[leader][i]; + if (max !== score) { + rank++; + max = score; + } + if (i === 0 && rank < 15) { + if (!ladder[rank]) ladder[rank] = []; + ladder[rank].push(leader); + } + ranks[leader].push(rank + 1); + } + } + return {ladder, ranks}; + } +} + +let cachedLadder = new Ladder(triviaData.leaderboard); +let cachedAltLadder = new Ladder(triviaData.altLeaderboard); + +class TriviaPlayer extends Rooms.RoomGamePlayer { + constructor(user, game) { + super(user, game); + + /** @type {number} */ + this.points = 0; + /** @type {number} */ + this.correctAnswers = 0; + + /** @type {string} */ + this.answer = ''; + /** @type {number[]} */ + this.currentAnsweredAt = []; + /** @type {number} */ + this.lastQuestion = 0; + /** @type {number[]} */ + this.answeredAt = []; + /** @type {boolean} */ + this.isCorrect = false; + /** @type {boolean} */ + this.isAbsent = false; + } + + /** + * @param {string} answer + * @param {boolean?} isCorrect + */ + setAnswer(answer, isCorrect) { + this.answer = answer; + this.currentAnsweredAt = process.hrtime(); + this.isCorrect = !!isCorrect; + } + + /** + * @param {number?} [points = 0] + * @param {number} [lastQuestion] + */ + incrementPoints(points = 0, lastQuestion) { + this.points += points; + this.answeredAt = this.currentAnsweredAt; + this.lastQuestion = lastQuestion; + this.correctAnswers++; + } + + clearAnswer() { + this.answer = ''; + this.isCorrect = false; + } + + toggleAbsence() { + this.isAbsent = !this.isAbsent; + } + + reset() { + this.points = 0; + this.correctAnswers = 0; + this.answer = ''; + this.answeredAt = []; + this.isCorrect = false; + } +} + +class Trivia extends Rooms.RoomGame { + /** + * @param {ChatRoom} room + * @param {string} mode + * @param {string} category + * @param {string} length + * @param {TriviaQuestion[]} questions + */ + constructor(room, mode, category, length, questions) { + super(room); + this.gameid = 'trivia'; + this.title = 'Trivia'; + this.allowRenames = true; + this.playerCap = Number.MAX_SAFE_INTEGER; + + /** @type {number} */ + this.minPlayers = MINIMUM_PLAYERS; + /** @type {Set} */ + this.kickedUsers = new Set(); + /** @type {boolean} */ + this.canLateJoin = true; + /** @type {string} */ + this.mode = MODES[mode]; + /** @type {string} */ + this.length = length; + /** @type {string} */ + this.category = ''; + if (category === 'all') { + this.category = 'All'; + } else if (category === 'random') { + this.category = `Random (${ALL_CATEGORIES[questions[0].category]})`; + } else { + this.category = ALL_CATEGORIES[category]; + } + /** @type {TriviaQuestions} */ + this.questions = questions; + + /** @type {string} */ + this.phase = SIGNUP_PHASE; + /** @type {Timer?} */ + this.phaseTimeout = null; + + /** @type {number} */ + this.questionNumber = 0; + /** @type {TriviaQuestions} */ + this.questions = questions; + /** @type {string} */ + this.curQuestion = ''; + /** @type {string[]} */ + this.curAnswers = []; + /** @type {number[]} */ + this.askedAt = []; + + this.init(); + } + + getCap() { + return LENGTHS[this.length].cap; + } + + /** + * How long the players should have to answer a question. + * @return {number} + */ + getRoundLength() { + return 12 * 1000 + 500; + } + + /** + * @param {User} user + * @return {string | undefined} + */ + addPlayer(user) { + if (this.players[user.userid]) return 'You have already signed up for this game.'; + for (let id in user.prevNames) { + if (this.players[id]) return 'You have already signed up for this game.'; + } + if (this.kickedUsers.has(user.userid)) { + return 'You were kicked from the game and thus cannot join it again.'; + } + for (let id in user.prevNames) { + if (this.players[id]) return 'You have already signed up for this game.'; + if (this.kickedUsers.has(id)) return 'You were kicked from the game and cannot join until the next game.'; + } + + for (let id in this.players) { + let tarUser = Users.get(id); + if (tarUser) { + if (tarUser.prevNames[user.userid]) return 'You have already signed up for this game.'; + + let tarPrevNames = Object.keys(tarUser.prevNames); + let prevNameMatch = tarPrevNames.some(tarId => (tarId in user.prevNames)); + if (prevNameMatch) return 'You have already signed up for this game.'; + + let tarIps = Object.keys(tarUser.ips); + let ipMatch = tarIps.some(ip => (ip in user.ips)); + if (ipMatch) return 'You have already signed up for this game.'; + } + } + if (this.phase !== SIGNUP_PHASE && !this.canLateJoin) return "This game does not allow latejoins."; + let player = this.makePlayer(user); + this.players[user.userid] = player; + this.playerCount++; + } + + /** + * @param {User} user + * @return {TriviaPlayer} + */ + makePlayer(user) { + return new TriviaPlayer(user, this); + } + + destroy() { + this.kickedUsers.clear(); + super.destroy(); + } + + /** + * @param {User} user + * @return {boolean} + */ + onConnect(user) { + let player = this.players[user.userid]; + if (!player || !player.isAbsent) return false; + + player.toggleAbsence(); + if (++this.playerCount < MINIMUM_PLAYERS) return false; + if (this.phase !== LIMBO_PHASE) return false; + + // At least let the game start first!! + if (this.phase === SIGNUP_PHASE) return false; + + for (let i in this.players) { + this.players[i].clearAnswer(); + } + + this.broadcast( + 'Enough players have returned to continue the game!', + 'The game will continue with the next question.' + ); + this.askQuestion(); + return true; + } + + /** + * @param {User} user + * @return {boolean} + */ + onLeave(user) { + // The user cannot participate, but their score should be kept + // regardless in cases of disconnects. + let player = this.players[user.userid]; + if (!player || player.isAbsent) return false; + + player.toggleAbsence(); + if (--this.playerCount >= MINIMUM_PLAYERS) return false; + + // At least let the game start first!! + if (this.phase === SIGNUP_PHASE) return false; + + clearTimeout(this.phaseTimeout); + this.phaseTimeout = null; + this.phase = LIMBO_PHASE; + this.broadcast( + 'Not enough players are participating to continue the game!', + `Until there are ${MINIMUM_PLAYERS} players participating and present, the game will be paused.` + ); + return true; + } + + /** + * Handles setup that shouldn't be done from the constructor. + */ + init() { + this.broadcast( + 'Signups for a new trivia game have begun!', + `Mode: ${this.mode} | Category: ${this.category} | Score cap: ${this.getCap()}
    ` + + 'Enter /trivia join to sign up for the trivia game.' + ); + } + + /** + * Generates and broadcasts the HTML for a generic announcement containing + * a title and an optional message. + * @param {string} title + * @param {string?} message + * @return {?ChatRoom} + */ + broadcast(title, message) { + let buffer = `
    ${title}`; + if (message) buffer += `
    ${message}`; + buffer += '
    '; + + if (!this.room) return null; + return this.room.addRaw(buffer).update(); + } + + /** + * @return {string} + */ + getDescription() { + return `Mode: ${this.mode} | Category: ${this.category} | Score cap: ${this.getCap()}`; + } + + /** + * Formats the player list for display when using /trivia players. + * @return {string} + */ + formatPlayerList(settings) { + return this.getTopPlayers(settings).map(player => { + const buf = Chat.html`${player.name} (${player.player.points || "0"})`; + return player.isAbsent ? `${buf}` : buf; + }).join(', '); + } + + /** + * Kicks a player from the game, preventing them from joining it again + * until the next game begins. + * @param {User} tarUser + * @param {User} user + * @return {string} + */ + kick(tarUser, user) { + if (!this.players[tarUser.userid]) { + if (this.kickedUsers.has(tarUser.userid)) return `User ${tarUser.name} has already been kicked from the game.`; + + for (let id in tarUser.prevNames) { + if (this.kickedUsers.has(id)) return `User ${tarUser.name} has already been kicked from the game.`; + } + + for (const kickedUserid of this.kickedUsers) { + let kickedUser = Users.get(kickedUserid); + if (kickedUser) { + if (kickedUser.prevNames[tarUser.userid]) { + return `User ${tarUser.name} has already been kicked from the game.`; + } + + let prevNames = Object.keys(kickedUser.prevNames); + let nameMatch = prevNames.some(id => tarUser.prevNames[id]); + if (nameMatch) return `User ${tarUser.name} has already been kicked from the game.`; + + let ips = Object.keys(kickedUser.ips); + let ipMatch = ips.some(ip => tarUser.ips[ip]); + if (ipMatch) return `User ${tarUser.name} has already been kicked from the game.`; + } + } + + return `User ${tarUser.name} is not a player in the game.`; + } + + this.kickedUsers.add(tarUser.userid); + for (let id in tarUser.prevNames) { + this.kickedUsers.add(id); + } + + super.removePlayer(tarUser); + } + + /** + * @param {User} user + * @return {string | undefined} + */ + leave(user) { + if (!this.players[user.userid]) { + return 'You are not a player in the current game.'; + } + super.removePlayer(user); + } + + /** + * Starts the question loop for a trivia game in its signup phase. + * @return {string | undefined} + */ + start() { + if (this.phase !== SIGNUP_PHASE) return 'The game has already been started.'; + if (this.playerCount < this.minPlayers) { + return `Not enough players have signed up yet! At least ${this.minPlayers} players to begin.`; + } + + this.broadcast(`The game will begin in ${START_TIMEOUT / 1000} seconds...`); + this.phase = INTERMISSION_PHASE; + this.phaseTimeout = setTimeout(() => this.askQuestion(), START_TIMEOUT); + } + + /** + * Broadcasts the next question on the questions list to the room and sets + * a timeout to tally the answers received. + */ + askQuestion() { + if (!this.questions.length) { + clearTimeout(this.phaseTimeout); + this.phaseTimeout = null; + this.broadcast( + 'No questions are left!', + 'The game has reached a stalemate' + ); + if (this.room) this.destroy(); + return; + } + + this.phase = QUESTION_PHASE; + this.askedAt = process.hrtime(); + + let question = this.questions.pop(); + this.questionNumber++; + this.curQuestion = question.question; + this.curAnswers = question.answers; + this.sendQuestion(question); + + this.phaseTimeout = setTimeout(() => this.tallyAnswers(), this.getRoundLength()); + } + + /** + * Broadcasts to the room what the next question is. + * @param {TriviaQuestion} question + */ + sendQuestion(question) { + this.broadcast( + `Question: ${question.question}`, + `Category: ${ALL_CATEGORIES[question.category]}` + ); + } + + /** + * This is a noop here since it'd defined properly by subclasses later on. + * All this is obligated to do is take a user and their answer as args; + * the behaviour of this method can be entirely arbitrary otherwise. + */ + answerQuestion() {} + + /** + * Verifies whether or not an answer is correct. In longer answers, small + * typos can be made and still have the answer be considered correct. + * @param {string} tarAnswer + * @return {boolean} + */ + verifyAnswer(tarAnswer) { + return this.curAnswers.some(answer => ( + (answer === tarAnswer) || (Dex.levenshtein(tarAnswer, answer) <= this.maxLevenshteinAllowed(answer.length)) + )); + } + + /** + * Return the maximum Levenshtein distance that is allowable for answers of the given length. + * @param {number} answerLength + * @return {number} + */ + maxLevenshteinAllowed(answerLength) { + if (answerLength > 5) { + return 2; + } + + if (answerLength > 4) { + return 1; + } + + return 0; + } + /** + * This is a noop here since it'd defined properly by mode subclasses later + * on. This calculates the points a correct responder earns, which is + * typically between 1-5. + */ + calculatePoints() {} + + /** + * This is a noop here since it's defined properly by mode subclasses later + * on. This is obligated to update the game phase, but it can be entirely + * arbitrary otherwise. + */ + tallyAnswers() {} + + /** + * Ends the game after a player's score has exceeded the score cap. + * @param {string} buffer + */ + win(buffer) { + clearTimeout(this.phaseTimeout); + this.phaseTimeout = null; + const winners = this.getTopPlayers({max: 3}); + buffer += '
    ' + this.getWinningMessage(winners); + this.broadcast('The answering period has ended!', buffer); + + for (const userid in this.players) { + let player = this.players[userid]; + if (!player.points) continue; + + for (const leaderboard of [triviaData.leaderboard, triviaData.altLeaderboard]) { + if (!leaderboard[userid]) { + leaderboard[userid] = [0, 0, 0]; + } + let rank = leaderboard[userid]; + rank[1] += player.points; + rank[2] += player.correctAnswers; + } + } + + const prizes = this.getPrizes(); + triviaData.leaderboard[winners[0].userid][0] += prizes[0]; + for (let i = 0; i < winners.length; i++) { + triviaData.altLeaderboard[winners[i].userid][0] += prizes[i]; + } + + cachedLadder.invalidateCache(); + cachedAltLadder.invalidateCache(); + + for (let i in this.players) { + let player = this.players[i]; + let user = Users.get(player.userid); + if (!user) continue; + user.sendTo( + this.room.id, + `You gained ${player.points} and answered ` + + `${player.correctAnswers} questions correctly.` + ); + } + + const buf = this.getStaffEndMessage(winners, winner => winner.player.name); + const logbuf = this.getStaffEndMessage(winners, winner => winner.userid); + this.room.sendMods(buf); + this.room.roomlog(buf); + this.room.modlog(`(${this.room.id}) ${logbuf}`); + + writeTriviaData(); + this.destroy(); + } + + getPrizes() { + return LENGTHS[this.length].prizes; + } + + getTopPlayers({max = null, requirePoints = true}) { + const ranks = []; + for (const userid in this.players) { + const user = Users.get(userid); + const player = this.players[userid]; + if ((requirePoints && !player.points) || !user) continue; + ranks.push({userid, player, name: user.name}); + } + ranks.sort((a, b) => { + return b.player.points - a.player.points || + a.player.lastQuestion - b.player.lastQuestion || + hrtimeToNanoseconds(a.player.answeredAt) - hrtimeToNanoseconds(b.player.answeredAt); + }); + return max === null ? ranks : ranks.slice(0, max); + } + + getWinningMessage(winners) { + const prizes = this.getPrizes(); + const [p1, p2, p3] = winners; + const initialPart = Chat.html`${p1.name} won the game with a final score of ${p1.player.points}, and `; + switch (winners.length) { + case 1: + return `${initialPart}their leaderboard score has increased by ${prizes[0]} points!`; + case 2: + return `${initialPart}their leaderboard score has increased by ${prizes[0]} points! ` + + Chat.html`${p2.name} was a runner-up and their leaderboard score has increased by ${prizes[1]} points!`; + case 3: + return initialPart + Chat.html`${p2.name} and ${p3.name} were runners-up. ` + + `Their leaderboard score has increased by ${prizes[0]}, ${prizes[1]}, and ${prizes[2]}, respectively!`; + } + } + + getStaffEndMessage(winners, mapper) { + let message = ""; + const winnerParts = [ + winner => `User ${mapper(winner)} won the game of ${this.mode}` + + ` mode trivia under the ${this.category} category with a cap of ` + + `${this.getCap()} points, with ${winner.player.points} points and ` + + `${winner.player.correctAnswers} correct answers!`, + winner => ` Second place: ${mapper(winner)} (${winner.player.points} points)`, + winner => `, third place: ${mapper(winner)} (${winner.player.points} points)`, + ]; + for (let i = 0; i < winners.length; i++) { + message += winnerParts[i](winners[i]); + } + return `(${message})`; + } + + /** + * @param {User} user + */ + end(user) { + clearTimeout(this.phaseTimeout); + this.phaseTimeout = null; + this.broadcast(Chat.html`The game was forcibly ended by ${user.name}.`); + this.destroy(); + } +} + +/** + * Helper function for timer and number modes. Milliseconds are not precise + * enough to score players properly in rare cases. + * @param {[number, number]} hrtime + * @return {number} + */ +const hrtimeToNanoseconds = hrtime => hrtime[0] * 1e9 + hrtime[1]; + +/** + * First mode rewards points to the first user to answer the question + * correctly. + */ +class FirstModeTrivia extends Trivia { + /** + * @param {string} answer + * @param {User} user + * @return {string | undefined} + */ + answerQuestion(answer, user) { + let player = this.players[user.userid]; + if (!player) return 'You are not a player in the current trivia game.'; + if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; + if (player.answer) return 'You have already attempted to answer the current question.'; + if (!this.verifyAnswer(answer)) return; + + clearTimeout(this.phaseTimeout); + this.phase = INTERMISSION_PHASE; + + let points = this.calculatePoints(); + player.setAnswer(answer); + player.incrementPoints(points, this.questionNumber); + + let buffer = Chat.html`Correct: ${user.name}
    ` + + `Answer(s): ${this.curAnswers.join(', ')}
    ` + + 'They gained 5 points!
    ' + + `The top 5 players are: ${this.formatPlayerList({max: 5})}`; + if (player.points >= this.getCap()) { + this.win(buffer); + return; + } + + for (let i in this.players) { + this.players[i].clearAnswer(); + } + + this.broadcast('The answering period has ended!', buffer); + this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); + } + + /** + * @return {number} + */ + calculatePoints() { + return 5; + } + + tallyAnswers() { + this.phase = INTERMISSION_PHASE; + + for (let i in this.players) { + let player = this.players[i]; + player.clearAnswer(); + } + + this.broadcast( + 'The answering period has ended!', + 'Correct: no one...
    ' + + `Answers: ${this.curAnswers.join(', ')}
    ` + + 'Nobody gained any points.
    ' + + `The top 5 players are: ${this.formatPlayerList({max: 5})}` + ); + + this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); + } +} + +/** + * Timer mode rewards up to 5 points to all players who answer correctly + * depending on how quickly they answer the question. + */ +class TimerModeTrivia extends Trivia { + /** + * @param {string} answer + * @param {User} user + * @return {string | undefined} + */ + answerQuestion(answer, user) { + let player = this.players[user.userid]; + if (!player) return 'You are not a player in the current trivia game.'; + if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; + + let isCorrect = this.verifyAnswer(answer); + player.setAnswer(answer, isCorrect); + } + + /** + * @param {number} diff + * The difference between the time the player answered the question and + * when the question was asked, in nanoseconds. + * @param {number} totalDiff + * The difference between the time scoring began and the time the question + * was asked, in nanoseconds. + * @return {number} + */ + calculatePoints(diff, totalDiff) { + return 6 - 5 * diff / totalDiff | 0; + } + + tallyAnswers() { + this.phase = INTERMISSION_PHASE; + + let buffer = ( + `Answer(s): ${this.curAnswers.join(', ')}
    ` + + '' + + '' + + '' + + '' + + '' + ); + let innerBuffer = new Map([5, 4, 3, 2, 1].map(n => [n, []])); + + let winner = false; + + let now = hrtimeToNanoseconds(process.hrtime()); + let askedAt = hrtimeToNanoseconds(this.askedAt); + let totalDiff = now - askedAt; + for (let i in this.players) { + let player = this.players[i]; + if (!player.isCorrect) { + player.clearAnswer(); + continue; + } + + let playerAnsweredAt = hrtimeToNanoseconds(player.currentAnsweredAt); + let diff = playerAnsweredAt - askedAt; + let points = this.calculatePoints(diff, totalDiff); + player.incrementPoints(points, this.questionNumber); + + let pointBuffer = innerBuffer.get(points); + pointBuffer.push([Chat.escapeHTML(player.name), playerAnsweredAt]); + + if (player.points >= this.getCap()) { + winner = true; + } + + player.clearAnswer(); + } + + let rowAdded = false; + innerBuffer.forEach((players, pointValue) => { + if (!players.length) return false; + + rowAdded = true; + players = players + .sort((a, b) => a[1] - b[1]) + .map(a => a[0]); + buffer += ( + '' + + `` + + `` + + '' + ); + }); + + if (!rowAdded) { + buffer += ( + '' + + '' + + '' + + '' + ); + } + + buffer += '
    Points gainedCorrect
    ${pointValue}${players.join(', ')}
    No one answered correctly...
    '; + + if (winner) return this.win(buffer); + + buffer += `
    The top 5 players are: ${this.formatPlayerList({max: 5})}`; + this.broadcast('The answering period has ended!', buffer); + this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); + } +} + +/** + * Number mode rewards up to 5 points to all players who answer correctly + * depending on the ratio of correct players to total players (lower ratio is + * better). + */ +class NumberModeTrivia extends Trivia { + /** + * @param {string} answer + * @param {User} user + * @return {string | undefined} + */ + answerQuestion(answer, user) { + let player = this.players[user.userid]; + if (!player) return 'You are not a player in the current trivia game.'; + if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; + + let isCorrect = this.verifyAnswer(answer); + player.setAnswer(answer, isCorrect); + } + + /** + * @param {number} correctPlayers + * @return {number} + */ + calculatePoints(correctPlayers) { + return correctPlayers && (6 - (5 * correctPlayers / this.playerCount | 0)); + } + + getRoundLength() { + return 6 * 1000; + } + + tallyAnswers() { + this.phase = INTERMISSION_PHASE; + + let buffer; + let innerBuffer = Object.keys(this.players) + .filter(id => this.players[id].isCorrect) + .map(id => { + let player = this.players[id]; + return [Chat.escapeHTML(player.name), hrtimeToNanoseconds(player.currentAnsweredAt)]; + }) + .sort((a, b) => a[1] - b[1]); + + let points = this.calculatePoints(innerBuffer.length); + if (points) { + let winner = false; + for (let i in this.players) { + let player = this.players[i]; + if (player.isCorrect) player.incrementPoints(points, this.questionNumber); + + if (player.points >= this.getCap()) { + winner = true; + } + + player.clearAnswer(); + } + + buffer = `Correct: ${innerBuffer.map(arr => arr[0]).join(', ')}
    ` + + `Answer(s): ${this.curAnswers.join(', ')}
    ` + + `${Chat.plural(innerBuffer, "Each of them", "They")} gained ${points} point(s)!`; + + if (winner) return this.win(buffer); + } else { + for (let i in this.players) { + let player = this.players[i]; + player.clearAnswer(); + } + + buffer = 'Correct: no one...
    ' + + `Answer(s): ${this.curAnswers.join(', ')}
    ` + + 'Nobody gained any points.'; + } + + buffer += `
    The top 5 players are: ${this.formatPlayerList({max: 5})}.`; + this.broadcast('The answering period has ended!', buffer); + this.phaseTimeout = setTimeout(() => this.askQuestion(), INTERMISSION_INTERVAL); + } +} + +/** + * This is based on the format of the Weakest Link game show. + */ +class WeakestLink extends Trivia { + init() { + this.bank = 0; + this.bankindex = 0; + this.title = "Weakest Link"; + this.playerindex = 0; + this.broadcast( + 'Signups for a new Weakest Link game have begun!', + `Category: ${this.category}
    ` + + 'Enter /trivia join to sign up for the game.' + ); + this.minPlayers = 1; + this.canLateJoin = false; + } + + start() { + super.start(); + this.curPlayer = this.players[Object.keys(this.players)[0]]; + } + + sendQuestion(question) { + if (!this.roundstarted && !this.finals) { + this.roundstarted = true; + this.roundTimeout = setTimeout(() => this.askVotes(), 5 * 1 * 1000); + } + this.broadcast( + `Question: ${question.question}`, + Chat.html`Player: ${this.curPlayer.name}` + ); + } + + onBank(user) { + let player = this.players[user.userid]; + if (!player) return 'You are not a participant in the current game'; + if (this.phase !== 'banking') return 'You cannot bank at this time.'; + if (this.curPlayer.userid !== player.userid) return 'It is not your turn to bank.'; + if (this.bankindex === 0) return 'There is no money to bank at this time.'; + this.bankindex = 0; + this.bank += this.amountToBank; + player.points += this.amountToBank; + this.amountToBank = 0; + this.broadcast(`${player.name} has banked`); + } + + answerQuestion(answer, user) { + let player = this.players[user.userid]; + if (!player) return 'You are not a player in the current trivia game.'; + if (this.phase !== QUESTION_PHASE) return 'There is no question to answer.'; + clearTimeout(this.phaseTimeout); + if (player !== this.curPlayer) return 'It is not your turn to answer'; + let isCorrect = this.verifyAnswer(answer); + if (isCorrect) { + this.curPlayer.incrementPoints(); + if (this.bankindex === (BANK_AMOUNTS.length - 1)) { + this.bank += BANK_AMOUNTS[this.bankindex]; + this.amountToBank = 0; + this.bankindex = 0; + } else if (!this.finals) { + this.amountToBank = BANK_AMOUNTS[this.bankindex]; + this.bankindex++; + } + } else { + this.amountToBank = 0; + this.bankindex = 0; + } + this.broadcast( + `${this.curPlayer.name} ${answer.length === 0 ? "did not answer" : "answered " + ((isCorrect ? "correctly" : "incorrectly") + " with " + answer)}` + ); + this.playerindex++; + if (this.playerindex === Object.keys(this.players).length) { + this.playerindex = 0; + if (this.finals) { + this.numFinals++; + if (this.numFinals >= NUM_FINALS_QUESTIONS) { + let oplayer; + for (let userID in this.players) { + let player = this.players[userID]; + if (player !== this.curPlayer) { + oplayer = player; + break; + } + } + if (oplayer.correctAnswers !== this.curPlayer.correctAnswers) { + let winplayer, loseplayer; + if (oplayer.correctAnswers > this.curPlayer.correctAnswers) { + winplayer = oplayer; + loseplayer = this.curPlayer; + } else { + winplayer = this.curPlayer; + loseplayer = oplayer; + } + this.broadcast(`Congratulations to ${winplayer.name} for winning the game of the Weakest Link with a final score of ${winplayer.correctAnswers}-${loseplayer.correctAnswers}`); + return this.destroy(); + } + } + } + } + this.curPlayer = this.players[Object.keys(this.players)[this.playerindex]]; + this.phase = 'banking'; + this.broadcast( + `Players: ${Object.keys(this.players).map(p => (this.curPlayer.userid === p ? "" + this.players[p].name + "" : this.players[p].name) + (this.finals ? "(" + this.players[p].correctAnswers + ")" : "")).join(", ")}`, + `Bank: ${this.bank}
    Amount to bank: ${this.amountToBank}` + ); + this.phaseTimeout = setTimeout(() => this.askQuestion(), 5 * 1000); + } + + tallyAnswers() { + return this.answerQuestion("", this.curPlayer); + } + + askVotes() { + clearTimeout(this.phaseTimeout); + this.phase = "voting"; + this.broadcast( + `Players: ${Object.keys(this.players).map(p => this.players[p].name).join(", ")}`, + `Bank: ${this.bank}
    Vote for who you would like to eliminate with /trivia vote [user]` + ); + } + + vote(target, user) { + let player = this.players[user.userid]; + if (!player) return 'You are not a participant in the current game.'; + if (this.phase !== "voting") return "You cannot vote at this time."; + let targPlayer = this.players[toId(target)]; + if (!targPlayer) return `No player named '${target}' is currently in the game.`; + if (targPlayer.userid === player.userid) return "You cannot vote to eliminate yourself."; + player.vote = targPlayer; + if (this.checkVotes()) { + this.phaseTimeout = setTimeout(() => this.tallyVotes(), 5 * 1000); + } + return `You have voted for ${targPlayer.name} to be eliminated.`; + } + + tallyVotes() { + let votes = {}; + for (let userID in this.players) { + let id = this.players[userID].vote.userid; + if (!(id in votes)) votes[id] = 0; + votes[id]++; + } + let maxNum = 0; + let maxVotes = []; + for (let userID in this.players) { + let curPlayer = this.players[userID]; + let numVotes = votes[userID] || 0; + if (numVotes > maxNum) { + maxNum = numVotes; + maxVotes = [curPlayer]; + } else if (numVotes === maxNum) { + maxVotes.push(curPlayer); + } + } + if (maxVotes.length === 1) { + this.broadcast(`The votes are in, and ${maxVotes[0].name} is eliminated!`); + super.removePlayer(maxVotes[0]); + this.startRound(); + } else { + this.curPlayer = this.strongestPlayer(); + this.broadcast(`The votes are in, and the result is a tie between ${maxVotes.map(pl => pl.name).join(", ")}. ${this.curPlayer.name} as the strongest player, who would you like to eliminate?`); + this.phase = 'deciding'; + this.potentialElims = maxVotes; + } + } + + startRound() { + this.phase = INTERMISSION_PHASE; + if (Object.keys(this.players).length === 2) { + this.finals = true; + this.numFinals = 0; + } + this.roundstarted = false; + if (this.finals) { + this.curPlayer = this.players[Object.keys(this.players)[0]]; + } else { + this.curPlayer = this.strongestPlayer(); + } + for (let userID in this.players) { + let player = this.players[userID]; + player.points = 0; + player.correctAnswers = 0; + } + this.playerindex = Object.keys(this.players).indexOf(this.curPlayer.userid); + this.broadcast( + `Players: ${Object.keys(this.players).map(p => this.players[p].name).join(", ")}`, + `Bank: ${this.bank}
    The ${this.finals ? "next" : "final"} round will begin in 30 seconds, and it will be ${this.curPlayer.name}'s turn to answer.` + ); + this.timeout = setTimeout(() => this.askQuestion(), 30 * 1000); + } + + sendToRoom(msg) { + this.room.add(msg).update(); + } + + strongestPlayer() { + let maxAnswers = 0; + let maxPlayer = []; + for (let userID in this.players) { + let player = this.players[userID]; + if (player.correctAnswers > maxAnswers) { + maxPlayer = [player]; + maxAnswers = player.correctAnswers; + } else if (player.correctAnswers === maxAnswers) { + maxPlayer.push(player); + } + } + if (maxPlayer.length > 1) { + let mostBanked = 0; + let bankPlayers = []; + for (const player of maxPlayer) { + if (player.points > mostBanked) { + mostBanked = player.points; + bankPlayers = [player]; + } else if (player.points === mostBanked) { + bankPlayers.push(player); + } + } + bankPlayers = Dex.shuffle(bankPlayers); + return bankPlayers[0]; + } else { + return maxPlayer[0]; + } + } + + checkVotes() { + for (let userID in this.players) { + let player = this.players[userID]; + if (!player.vote) return false; + } + return true; + } + + decide(target, user) { + let player = this.players[user.userid]; + if (!player) return 'You are not participating in the current game.'; + if (this.phase !== 'deciding') return 'You cannot decide who to eliminate at this time.'; + if (this.curPlayer !== player) return 'It is not your turn to decide who to eliminate'; + let targPlayer = this.players[toId(target)]; + if (!targPlayer) return 'That player is not in the game.'; + if (this.potentialElims.indexOf(targPlayer) === -1) return 'That player cannot be eliminated.'; + this.sendToRoom(`${this.curPlayer.name} has decided to eliminate ${targPlayer.name}!`); + super.removePlayer(targPlayer); + this.startRound(); + } + + getRoundLength() { + return this.finals ? 7 * 1000 : 5 * 60 * 1000; + } +} + +const commands = { + new(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in the Trivia room."); + if (!this.can('broadcast', null, room) || !target) return false; + if (!this.canTalk()) return; + if (room.game) { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + let tars = target.split(','); + if (tars.length < 2) return this.errorReply("Invalid arguments specified."); + + let mode = toId(tars[0]); + if (!MODES[mode]) return this.errorReply(`"${mode}" is an invalid mode.`); + + let category = toId(tars[1]); + let isRandom = (category === 'random'); + let isAll = (category === 'all'); + let questions; + if (isRandom) { + let categories = Object.keys(MAIN_CATEGORIES); + let randCategory = categories[Math.random() * categories.length | 0]; + questions = sliceCategory(randCategory); + } else if (isAll) { + questions = triviaData.questions.slice(); + for (const category in SPECIAL_CATEGORIES) { + questions = questions.filter(q => q.category !== category); + } + } else if (ALL_CATEGORIES[category]) { + questions = sliceCategory(category); + } else { + return this.errorReply(`"${category}" is an invalid category.`); + } + + // Randomizes the order of the questions. + let length; + if (MODES[mode] === 'Weakest Link') { + questions = questions.filter(q => q.type === 'weakestlink'); + } else { + length = toId(tars[2]); + if (!LENGTHS[length]) return this.errorReply(`"${length}" is an invalid game length.`); + + questions = questions.filter(q => q.type === 'trivia'); + if (questions.length < LENGTHS[length].cap / 5) { + if (isRandom) return this.errorReply("There are not enough questions in the randomly chosen category to finish a trivia game."); + if (isAll) return this.errorReply("There are not enough questions in the trivia database to finish a trivia game."); + return this.errorReply(`There are not enough questions under the category "${ALL_CATEGORIES[category]}" to finish a trivia game.`); + } + } + + let _Trivia; + if (mode === 'first') { + _Trivia = FirstModeTrivia; + } else if (mode === 'timer') { + _Trivia = TimerModeTrivia; + } else if (mode === 'number') { + _Trivia = NumberModeTrivia; + } else { + _Trivia = WeakestLink; + } + + questions = Dex.shuffle(questions); + room.game = new _Trivia(room, mode, category, length, questions); + }, + newhelp: [`/trivia new [mode], [category], [length] - Begin a new trivia game. Requires: + % @ # & ~`], + + join(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + let res = room.game.addPlayer(user); + if (res) return this.errorReply(res); + this.sendReply('You are now signed up for this game!'); + }, + joinhelp: [`/trivia join - Join the current trivia game.`], + + kick(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!this.can('mute', null, room)) return false; + if (!this.canTalk()) return; + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + this.splitTarget(target); + let targetUser = this.targetUser; + if (!targetUser) return this.errorReply(`The user "${target}" does not exist.`); + + let res = room.game.kick(targetUser, user); + if (res) return this.errorReply(res); + // ... + }, + kickhelp: [`/trivia kick [username] - Kick players from a trivia game by username. Requires: % @ # & ~`], + + leave(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + let res = room.game.leave(user); + if (typeof res === 'string') return this.errorReply(res); + this.sendReply("You have left the current game of trivia."); + }, + leavehelp: [`/trivia leave - Makes the player leave the game.`], + + start(target, room) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!this.can('broadcast', null, room)) return false; + if (!this.canTalk()) return; + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + let res = room.game.start(); + if (res) return this.errorReply(res); + // ... + }, + starthelp: [`/trivia start - Ends the signup phase of a trivia game and begins the game. Requires: + % @ # & ~`], + + answer(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + let answer = toId(target); + if (!answer) return this.errorReply("No valid answer was entered."); + + let res = room.game.answerQuestion(answer, user); + if (res) return this.errorReply(res); + this.sendReply(`You have selected "${answer}" as your answer.`); + }, + answerhelp: [`/trivia answer OR /ta [answer] - Answer a pending question.`], + + end(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!this.can('broadcast', null, room)) return false; + if (!this.canTalk()) return; + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia' && room.game.gameid !== 'weakestlink') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + room.game.end(user); + }, + endhelp: [`/trivia end - Forcibly end a trivia game. Requires: + % @ # & ~`], + + '': 'status', + players: 'status', + status(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + if (!this.runBroadcast()) return false; + if (!room.game) return this.errorReply("There is no game of trivia in progress."); + if (room.game.gameid !== 'trivia') { + return this.errorReply(`There is already a game of ${room.game.title} in progress.`); + } + + let tarUser; + if (target) { + this.splitTarget(target); + if (!this.targetUser) return this.errorReply(`User ${target} does not exist.`); + tarUser = this.targetUser; + } else { + tarUser = user; + } + + let game = room.game; + let buffer = `There is a trivia game in progress, and it is in its ${game.phase} phase.
    ` + + `Mode: ${game.mode} | Category: ${game.category} | Score cap: ${game.getCap()}`; + + let player = game.players[tarUser.userid]; + if (player) { + if (!this.broadcasting) { + buffer += `
    Current score: ${player.points} | Correct Answers: ${player.correctAnswers}`; + } + } else if (tarUser.userid !== user.userid) { + return this.errorReply(`User ${tarUser.name} is not a player in the current trivia game.`); + } + + buffer += `
    Players: ${room.game.formatPlayerList({requirePoints: false})}`; + + this.sendReplyBox(buffer); + }, + statushelp: [`/trivia status [player] - lists the player's standings (your own if no player is specified) and the list of players in the current trivia game.`], + + submit: 'add', + add(target, room, user, connection, cmd) { + if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); + if ((cmd === 'add' && !this.can('mute', null, room)) || + (cmd === 'submit' && !this.can('broadcast', null, room)) || + !target) return false; + if (!this.canTalk()) return false; + target = target.split('|'); + if (target.length !== 3) return this.errorReply("Invalid arguments specified. View /trivia help for more information."); + + let category = toId(target[0]); + if (!ALL_CATEGORIES[category]) return this.errorReply(`'${target[0].trim()}' is not a valid category. View /trivia help for more information.`); + if (cmd === 'submit' && !MAIN_CATEGORIES[category]) return this.errorReply(`You cannot submit question in the '${ALL_CATEGORIES[category]}' category`); + if (this.message.startsWith("/wlink") && category === 'pokemon') return this.errorReply("Pokemon questions are not allowed for the Weakest Link"); + let question = Chat.escapeHTML(target[1].trim()); + if (!question) return this.errorReply(`'${target[1]}' is not a valid question.`); + if (question.length > MAX_QUESTION_LENGTH) { + return this.errorReply(`This question is too long! It must remain under ${MAX_QUESTION_LENGTH} characters.`); + } + if (triviaData.submissions.some(s => s.question === question) || triviaData.questions.some(q => q.question === question)) { + return this.errorReply(`Question "${question}" is already in the trivia database.`); + } + + let cache = new Set(); + let answers = target[2].split(',') + .map(toId) + .filter(answer => !cache.has(answer) && !!cache.add(answer)); + if (!answers.length) return this.errorReply("No valid answers were specified."); + if (answers.some(answer => answer.length > MAX_ANSWER_LENGTH)) { + return this.errorReply(`Some of the answers entered were too long! They must remain under ${MAX_ANSWER_LENGTH} characters.`); + } + let isWL = this.message.startsWith("/wlink"); + let submissions = triviaData.submissions; + let submission = { + category: category, + question: question, + answers: answers, + user: user.userid, + type: isWL ? "weakestlink" : "trivia", + }; + + if (cmd === 'add') { + triviaData.questions.splice(findEndOfCategory(category, false), 0, submission); + writeTriviaData(); + this.modlog('TRIVIAQUESTION', null, `added to ${isWL ? "Weakest Link" : "Trivia"} - '${target[1]}'`); + return this.privateModAction(`(Question '${target[1]}' was added to the ${isWL ? "Weakest Link" : "Trivia"} question database by ${user.name}.)`); + } + + submissions.splice(findEndOfCategory(category, true), 0, submission); + writeTriviaData(); + if (!user.can('mute', null, room)) this.sendReply(`Question '${target[1]}' was submitted for review.`); + this.modlog('TRIVIAQUESTION', null, `submitted '${target[1]}'`); + this.privateModAction(`(${user.name} submitted question '${target[1]}' for review.)`); + }, + submithelp: [`/trivia submit [category] | [question] | [answer1], [answer2] ... [answern] - Add a question to the submission database for staff to review. Requires: + % @ # & ~`], + addhelp: [`/trivia add [category] | [question] | [answer1], [answer2], ... [answern] - Add a question to the question database. Requires: % @ # & ~`], + + review(target, room) { + if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); + if (!this.can('ban', null, room)) return false; + + let submissions = triviaData.submissions; + let submissionsLen = submissions.length; + if (!submissionsLen) return this.sendReply("No questions await review."); + + let buffer = `|raw|
    ` + + `` + + ""; + + let i = 0; + while (i < submissionsLen) { + let entry = submissions[i]; + buffer += ``; + } + buffer += "
    ${Chat.count(submissionsLen, " questions")} awaiting review:
    #CategoryQuestionAnswer(s)Submitted ByType
    ${(++i)}${entry.category}${entry.question}${entry.answers.join(", ")}${entry.user}${TYPES[entry.type]}
    "; + + this.sendReply(buffer); + }, + reviewhelp: [`/trivia review - View the list of submitted questions. Requires: @ # & ~`], + + reject: 'accept', + accept(target, room, user, connection, cmd) { + if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); + if (!this.can('ban', null, room)) return false; + if (!this.canTalk()) return; + + target = target.trim(); + if (!target) return false; + + let isAccepting = cmd === 'accept'; + let questions = triviaData.questions; + let submissions = triviaData.submissions; + + if (toId(target) === 'all') { + if (isAccepting) { + for (const submission of submissions) { + questions.splice(findEndOfCategory(submission.category, false), 0, submission); + } + } + + triviaData.submissions = []; + writeTriviaData(); + this.modlog(`TRIVIAQUESTION`, null, `${(isAccepting ? "added" : "removed")} all from submission database.`); + return this.privateModAction(`(${user.name} ${(isAccepting ? " added " : " removed ")} all questions from the submission database.)`); + } + + if (/^\d+(?:-\d+)?(?:, ?\d+(?:-\d+)?)*$/.test(target)) { + let indices = target.split(','); + + // Parse number ranges and add them to the list of indices, + // then remove them in addition to entries that aren't valid index numbers + for (let i = indices.length; i--;) { + if (!indices[i].includes('-')) { + let index = Number(indices[i]); + if (Number.isInteger(index) && index > 0 && index <= submissions.length) { + indices[i] = index; + } else { + indices.splice(i, 1); + } + continue; + } + + let range = indices[i].split('-'); + let left = Number(range[0]); + let right = Number(range[1]); + if (!Number.isInteger(left) || !Number.isInteger(right) || + left < 1 || right > submissions.length || left === right) { + indices.splice(i, 1); + continue; + } + + do { + indices.push(right); + } while (--right >= left); + + indices.splice(i, 1); + } + + indices.sort((a, b) => a - b); + indices = indices.filter((entry, index) => !index || indices[index - 1] !== entry); + + let indicesLen = indices.length; + if (!indicesLen) return this.errorReply(`'${target}' is not a valid set of submission index numbers. View /trivia review and /trivia help for more information.`); + + if (isAccepting) { + for (let i = indicesLen; i--;) { + let submission = submissions.splice(indices[i] - 1, 1)[0]; + questions.splice(findEndOfCategory(submission.category, false), 0, submission); + } + } else { + for (let i = indicesLen; i--;) { + submissions.splice(indices[i] - 1, 1); + } + } + + writeTriviaData(); + this.modlog('TRIVIAQUESTION', null, `${(isAccepting ? "added " : "removed ")}submission number${(indicesLen > 1 ? "s " : " ")}${target}`); + return this.privateModAction(`(${user.name} ${(isAccepting ? "added " : "removed ")}submission number${(indicesLen > 1 ? "s " : " ")}${target} from the submission database.)`); + } + + this.errorReply(`'${target}' is an invalid argument. View /trivia help questions for more information.`); + }, + accepthelp: [`/trivia accept [index1], [index2], ... [indexn] OR all - Add questions from the submission database to the question database using their index numbers or ranges of them. Requires: @ # & ~`], + rejecthelp: [`/trivia reject [index1], [index2], ... [indexn] OR all - Remove questions from the submission database using their index numbers or ranges of them. Requires: @ # & ~`], + + delete(target, room, user) { + if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); + if (!this.can('mute', null, room)) return false; + if (!this.canTalk()) return; + + target = target.trim(); + if (!target) return false; + + let question = Chat.escapeHTML(target); + if (!question) return this.errorReply(`'${target}' is not a valid argument. View /trivia help questions for more information.`); + + let questions = triviaData.questions; + let questionID = toId(question); + for (const [i, question] of questions.entries()) { + if (toId(question.question) === questionID) { + questions.splice(i, 1); + writeTriviaData(); + this.modlog('TRIVIAQUESTION', null, `removed '${target}'`); + return this.privateModAction(`(${user.name} removed question '${target}' from the question database.)`); + } + } + + this.errorReply(`Question '${target}' was not found in the question database.`); + }, + deletehelp: [`/trivia delete [question] - Delete a question from the trivia database. Requires: % @ # & ~`], + + qs(target, room, user) { + if (room.id !== 'questionworkshop') return this.errorReply('This command can only be used in Question Workshop.'); + + let buffer = "|raw|
    "; + let isWL = (this.message.startsWith("/wlink")); + if (!target) { + if (!this.runBroadcast()) return false; + + let questions = triviaData.questions; + if (isWL) { + questions = questions.filter(q => q.type === "weakestlink"); + } else { + questions = questions.filter(q => q.type === "trivia"); + } + let questionsLen = questions.length; + if (!questionsLen) return this.sendReplyBox(`No questions have been submitted for ${isWL ? "Weakest Link" : "Trivia"} yet.`); + + let lastCategoryIdx = 0; + buffer += ""; + for (const category in ALL_CATEGORIES) { + if (category === 'random') continue; + let tally = findEndOfCategory(category, false) - lastCategoryIdx; + lastCategoryIdx += tally; + buffer += ``; + } + buffer += `
    CategoryQuestion Count
    ${ALL_CATEGORIES[category]}${tally} (${((tally * 100) / questionsLen).toFixed(2)}%)
    Total${questionsLen}
    `; + + return this.sendReply(buffer); + } + + if (!this.can('mute', null, room)) return false; + + let category = toId(target); + if (category === 'random') return false; + if (!ALL_CATEGORIES[category]) return this.errorReply(`'${target}' is not a valid category. View /help trivia for more information.`); + + let list = sliceCategory(category); + if (isWL) { + list = list.filter(q => q.type === "weakestlink"); + } else { + list = list.filter(q => q.type === "trivia"); + } + if (!list.length) { + buffer += `There are no questions in the ${ALL_CATEGORIES[target]} category for ${isWL ? "Weakest Link" : "Trivia"}.
    `; + return this.sendReply(buffer); + } + + if (user.can('ban', null, room)) { + buffer += `There are ${list.length} questions in the ${ALL_CATEGORIES[target]} category for ${isWL ? "Weakest Link" : "Trivia"}.` + + "#QuestionAnswer(s)"; + for (const [i, entry] of list.entries()) { + buffer += `${(i + 1)}${entry.question}${entry.answers.join(", ")}`; + } + } else { + buffer += `There are ${list.length} questions in the ${target} category.` + + "#Question"; + for (const [i, entry] of list.entries()) { + buffer += `${(i + 1)}${entry.question}`; + } + } + buffer += ""; + + this.sendReply(buffer); + }, + qshelp: [ + "/trivia qs - View the distribution of questions in the question database.", + "/trivia qs [category] - View the questions in the specified category. Requires: % @ # & ~", + ], + + search(target, room, user) { + if (room.id !== 'questionworkshop') return this.errorReply("This command can only be used in Question Workshop."); + if (!this.can('broadcast', null, room)) return false; + if (!target.includes(',')) return this.errorReply("No valid search arguments entered."); + + let [type, ...query] = target.split(','); + type = toId(type); + if (/^q(?:uestion)?s?$/.test(type)) { + type = 'questions'; + } else if (/^sub(?:mission)?s?$/.test(type)) { + type = 'submissions'; + } else { + return this.sendReplyBox("No valid search category was entered. Valid categories: submissions, subs, questions. qs"); + } + + query = query.join(',').trim(); + if (!query) return this.errorReply("No valid search query as entered."); + + let results = triviaData[type].filter(q => q.question.includes(query) && !SPECIAL_CATEGORIES[q.category]); + if (!results.length) return this.sendReply(`No results found under the ${type} list.`); + + let buffer = "|raw|
    " + + ``; + buffer += results.map((q, i) => { + return ``; + }).join(''); + buffer += "
    #CategoryQuestion
    There are ${results.length} matches for your query:
    ${i + 1}${q.category}${q.question}
    "; + + this.sendReply(buffer); + }, + searchhelp: [`/trivia search [type], [query] - Searches for questions based on their type and their query. Valid types: submissions, subs, questions, qs. Requires: + % @ * & ~`], + + rank(target, room, user) { + if (room.id !== 'trivia') return this.errorReply("This command can only be used in Trivia."); + + let name; + let userid; + if (!target) { + name = Chat.escapeHTML(user.name); + userid = user.userid; + } else { + this.splitTarget(target, true); + name = Chat.escapeHTML(this.targetUsername); + userid = toId(name); + } + + let allTimeScore = triviaData.leaderboard[userid]; + if (!allTimeScore) return this.sendReplyBox(`User '${name}' has not played any trivia games yet.`); + let score = triviaData.altLeaderboard[userid] || [0, 0, 0]; + + let ranks = cachedAltLadder.get().ranks[userid]; + let allTimeRanks = cachedLadder.get().ranks[userid]; + const row = i => `${score[i]}${ranks ? ` (#${ranks[i]})` : ""}, ` + + `all time: ${allTimeScore[i]} (#${allTimeRanks ? allTimeRanks[i] : allTimeRanks.length})
    `; + this.sendReplyBox( + `User: ${name}
    ` + + `Leaderboard score: ${row(0)}` + + `Total game points: ${row(1)}` + + `Total correct answers: ${row(2)}` + ); + }, + rankhelp: [`/trivia rank [username] - View the rank of the specified user. If no name is given, view your own.`], + + alltimeladder: 'ladder', + ladder(target, room, user, connection, cmd) { + if (room.id !== 'trivia') return this.errorReply('This command can only be used in Trivia.'); + if (!this.runBroadcast()) return false; + let cache = cmd === 'ladder' ? cachedAltLadder : cachedLadder; + let {ladder} = cache.get(); + let leaderboard = cache.leaderboard; + if (!ladder.length) return this.errorReply("No trivia games have been played yet."); + + let buffer = "|raw|
    " + + ""; + let num = parseInt(target); + if (!num || num < 0) num = 100; + if (num > ladder.length) num = ladder.length; + for (let i = Math.max(0, num - 100); i < num; i++) { + let leaders = ladder[i]; + for (const leader of leaders) { + let rank = leaderboard[leader]; + let leaderid = Users.getExact(leader); + leaderid = leaderid ? Chat.escapeHTML(leaderid.name) : leader; + buffer += ``; + } + } + buffer += "
    RankUserLeaderboard scoreTotal game pointsTotal correct answers
    ${(i + 1)}${leaderid}${rank[0]}${rank[1]}${rank[2]}
    "; + + return this.sendReply(buffer); + }, + ladderhelp: [`/trivia ladder [num] - View information about 15 users on the trivia leaderboard.`], + alltimeladderhelp: [`/trivia ladder [num] - View information about 15 users on the all time trivia leaderboard.`], + + clearquestions: 'clearqs', + clearqs(target, room, user) { + if (room.id !== 'questionworkshop') return this.errorReply("This command can only be used in Question Workshop"); + if (!this.can('declare', null, room)) return false; + const category = toId(target); + if (ALL_CATEGORIES[category]) { + if (SPECIAL_CATEGORIES[category]) { + triviaData.questions = triviaData.questions.filter(q => q.category !== category); + writeTriviaData(); + return this.privateModAction(`(${user.name} removed all questions of category '${category}'.)`); + } else { + return this.errorReply(`You cannot clear the category '${ALL_CATEGORIES[category]}'.`); + } + } else { + return this.errorReply(`'${category}' is an invalid category.`); + } + }, + clearqshelp: [`/trivia clears [category] - Remove all questions of the given category. Requires: # & ~`], + + bank(target, room, user) { + if (!room.game || room.game.title !== 'Weakest Link') return this.errorReply("This command can only be used for games of the Weakest Link."); + let res = room.game.onBank(user); + if (res) return this.sendReply(res); + }, + bankhelp: [`/trivia bank - Bank during a game of the Weakest Link.`], + + decide(target, room, user) { + if (!room.game || room.game.title !== 'Weakest Link') return this.errorReply("This command can only be used for games of the Weakest Link."); + let res = room.game.decide(target, user); + if (res) return this.sendReply(res); + }, + decidehelp: [`/trivia decide [user] - If voting ends in a tie, this is used to break the tie by the strongest player.`], + + vote(target, room, user) { + if (!room.game || room.game.title !== 'Weakest Link') return this.errorReply("This command can only be used for games of the Weakest Link."); + let res = room.game.vote(target, user); + if (res) return this.sendReply(res); + }, + votehelp: [`/trivia vote [user] - Choose your vote of who to eliminate in the Weakest link`], + + checkvotes(target, room, user) { + if (!room.game || room.game.title !== 'Weakest Link') return this.errorReply("This command can only be used for games of the Weakest Link."); + if (!this.can('broadcast', null, room)) return; + if (!this.runBroadcast()) return; + if (room.game.phase !== 'voting') return this.sendReplyBox("The game is not currently in the voting phase"); + return this.sendReplyBox(`The following players have yet to vote: ${Object.values(room.game.players).filter(pl => !pl.vote).map(pl => pl.name).join(", ")}`); + }, + checkvoteshelp: [`/trivia checkvotes - Check which players have not yet voted.`], + + help(target, room, user) { + return this.parse("/help trivia"); + }, +}; + +module.exports = { + ALL_CATEGORIES, + MAIN_CATEGORIES, + SPECIAL_CATEGORIES, + MODES, + LENGTHS, + + triviaData, + writeTriviaData, + + Trivia, + FirstModeTrivia, + TimerModeTrivia, + NumberModeTrivia, + + commands: { + trivia: commands, + wlink: commands, + ta: commands.answer, + triviahelp: [ + `Modes:`, + `- First: the first correct responder gains 5 points.`, + `- Timer: each correct responder gains up to 5 points based on how quickly they answer.`, + `- Number: each correct responder gains up to 5 points based on how many participants are correct.`, + `- Weakest Link: An elimination game, where every round, players vote off the 'Weakest Link'`, + `Categories: Arts & Entertainment, Pok\u00e9mon, Science & Geography, Society & Humanities, Random, and All.`, + `Game lengths:`, + `- Short: 20 point score cap. The winner gains 3 leaderboard points.`, + `- Medium: 35 point score cap. The winner gains 4 leaderboard points.`, + `- Long: 50 point score cap. The winner gains 5 leaderboard points.`, + `Game commands:`, + `- /trivia new [mode], [category], [length] - Begin signups for a new trivia game. Requires: + % @ # & ~`, + `- /trivia join - Join a trivia game during signups.`, + `- /trivia start - Begin the game once enough users have signed up. Requires: + % @ # & ~`, + `- /ta [answer] - Answer the current question.`, + `- /trivia kick [username] - Disqualify a participant from the current trivia game. Requires: % @ # & ~`, + `- /trivia leave - Makes the player leave the game.`, + `- /trivia end - End a trivia game. Requires: + % @ # ~`, + `Question modifying commands:`, + `- /trivia submit [category] | [question] | [answer1], [answer2] ... [answern] - Add a question to the submission database for staff to review.`, + `- /trivia review - View the list of submitted questions. Requires: @ # & ~`, + `- /trivia accept [index1], [index2], ... [indexn] OR all - Add questions from the submission database to the question database using their index numbers or ranges of them. Requires: @ # & ~`, + `- /trivia reject [index1], [index2], ... [indexn] OR all - Remove questions from the submission database using their index numbers or ranges of them. Requires: @ # & ~`, + `- /trivia add [category] | [question] | [answer1], [answer2], ... [answern] - Add a question to the question database. Requires: % @ # & ~`, + `- /trivia delete [question] - Delete a question from the trivia database. Requires: % @ # & ~`, + `- /trivia qs - View the distribution of questions in the question database.`, + `- /trivia qs [category] - View the questions in the specified category. Requires: % @ # & ~`, + `- /trivia clearqs [category] - Clear all questions in the given category. Requires: # & ~`, + `Informational commands:`, + `- /trivia search [type], [query] - Searches for questions based on their type and their query. Valid types: submissions, subs, questions, qs. Requires: + % @ # & ~`, + `- /trivia status [player] - lists the player's standings (your own if no player is specified) and the list of players in the current trivia game.`, + `- /trivia rank [username] - View the rank of the specified user. If none is given, view your own.`, + `- /trivia ladder - View information about the top 15 users on the trivia leaderboard.`, + `- /trivia alltimeladder - View information about the top 15 users on the all time trivia leaderboard`, + `Weakest Link Game commands:`, + `- /trivia bank - Bank when it is your turn.`, + `- /trivia vote [user] - Attempt to vote off a user during the voting phase.`, + `- /trivia decide [user] - If voting ends in a tie, the strongest player can decide who is eliminated.`, + `- /trivia checkvotes - Check who has not yet voted.`, + ], + }, +}; diff --git a/chat-plugins/uno.js b/server/chat-plugins/uno.js similarity index 51% rename from chat-plugins/uno.js rename to server/chat-plugins/uno.js index 0edd6d244a07d..7689640d8b388 100644 --- a/chat-plugins/uno.js +++ b/server/chat-plugins/uno.js @@ -29,6 +29,14 @@ const textColors = { const textShadow = 'text-shadow: 1px 0px black, -1px 0px black, 0px -1px black, 0px 1px black, 2px -2px black;'; +/** @typedef {'Green' | 'Yellow' | 'Red' | 'Blue' | 'Black'} Color */ +/** @typedef {{value: string, color: Color, changedColor?: Color, name: string}} Card */ + +/** + * @param {Card} card + * @param {boolean} fullsize + * @return {string} + */ function cardHTML(card, fullsize) { let surface = card.value.replace(/[^A-Z0-9+]/g, ""); let background = rgbGradients[card.color]; @@ -37,27 +45,55 @@ function cardHTML(card, fullsize) { return ``; } +/** + * @return {Card[]} + */ function createDeck() { + /** @type {Color[]} */ const colors = ['Red', 'Blue', 'Green', 'Yellow']; const values = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'Reverse', 'Skip', '+2']; - let basic = []; + let basic = /** @type {Card[]} */ ([]); - for (let i = 0; i < 4; i++) { - let color = colors[i]; + for (const color of colors) { basic.push(...values.map(v => { - return {value: v, color: color, name: color + " " + v}; + /** @type {Card} */ + let c = {value: v, color: color, name: color + " " + v}; + return c; })); } - return [...basic, ...basic, // two copies of the basic stuff (total 96) - ...[0, 1, 2, 3].map(v => ({color: colors[v], value: '0', name: colors[v] + ' 0'})), // the 4 0s - ...[0, 1, 2, 3].map(v => ({color: 'Black', value: 'Wild', name: 'Wild'})), // wild cards - ...[0, 1, 2, 3].map(v => ({color: 'Black', value: '+4', name: "Wild +4"})), // wild +4 cards + return [ + // two copies of the basic stuff (total 96) + ...basic, + ...basic, + // The four 0s + ...[0, 1, 2, 3].map(v => { + /** @type {Card} */ + let c = {color: colors[v], value: '0', name: colors[v] + ' 0'}; + return c; + }), + // Wild cards + ...[0, 1, 2, 3].map(v => { + /** @type {Card} */ + let c = {color: 'Black', value: 'Wild', name: 'Wild'}; + return c; + }), + // Wild +4 cards + ...[0, 1, 2, 3].map(v => { + /** @type {Card} */ + let c = {color: 'Black', value: '+4', name: 'Wild +4'}; + return c; + }), ]; // 108 cards } -class UNOgame extends Rooms.RoomGame { +class UnoGame extends Rooms.RoomGame { + /** + * @param {ChatRoom | GameRoom} room + * @param {number} cap + * @param {boolean} suppressMessages + */ constructor(room, cap, suppressMessages) { super(room); @@ -67,33 +103,50 @@ class UNOgame extends Rooms.RoomGame { room.gameNumber = 1; } - cap = parseInt(cap) || 6; - if (cap < 2) cap = 2; - + /** @type {number} */ this.playerCap = cap; this.allowRenames = true; + /** @type {number} */ this.maxTime = maxTime; + /** @type {NodeJS.Timer?} */ + this.timer = null; + /** @type {NodeJS.Timer?} */ + this.autostartTimer = null; + /** @type {string} */ this.gameid = 'uno'; this.title = 'UNO'; + /** @type {string} */ this.state = 'signups'; - this.currentPlayer = null; + /** @type {string} */ + this.currentPlayerid = ''; + /** @type {Card[]} */ this.deck = Dex.shuffle(createDeck()); + /** @type {Card[]} */ this.discards = []; + /** @type {Card?} */ this.topCard = null; + /** @type {string?} */ + this.awaitUno = null; + /** @type {string?} */ + this.unoId = null; this.direction = 1; this.suppressMessages = suppressMessages || false; - this.spectators = {}; + this.spectators = Object.create(null); this.sendToRoom(`|uhtml|uno-${this.room.gameNumber}|

    A new game of UNO is starting!


    Or use /uno join to join the game.

    ${(this.suppressMessages ? `

    Game messages will be shown to only players. If you would like to spectate the game, use /uno spectate

    ` : '')}
    `, true); } onUpdateConnection() {} + /** + * @param {User} user + * @param {Connection} connection + */ onConnect(user, connection) { if (this.state === 'signups') { connection.sendTo(this.room, `|uhtml|uno-${this.room.gameNumber}|

    A new game of UNO is starting!


    Or use /uno join to join the game.

    ${(this.suppressMessages ? `

    Game messages will be shown to only players. If you would like to spectate the game, use /uno spectate

    ` : '')}
    `); @@ -102,8 +155,12 @@ class UNOgame extends Rooms.RoomGame { } } + /** + * @return {false | void} + */ onStart() { if (this.playerCount < 2) return false; + if (this.autostartTimer) clearTimeout(this.autostartTimer); this.sendToRoom(`|uhtmlchange|uno-${this.room.gameNumber}|

    The game of UNO has started.

    ${(this.suppressMessages ? `

    Game messages will be shown to only players. If you would like to spectate the game, use /uno spectate

    ` : '')}
    `, true); this.state = 'play'; @@ -126,6 +183,10 @@ class UNOgame extends Rooms.RoomGame { this.nextTurn(true); } + /** + * @param {User} user + * @return {boolean} + */ joinGame(user) { if (this.state === 'signups' && this.addPlayer(user)) { this.sendToRoom(`${user.name} has joined the game of UNO.`); @@ -134,6 +195,10 @@ class UNOgame extends Rooms.RoomGame { return false; } + /** + * @param {User} user + * @return {boolean} + */ leaveGame(user) { if (this.state === 'signups' && this.removePlayer(user)) { this.sendToRoom(`${user.name} has left the game of UNO.`); @@ -142,11 +207,22 @@ class UNOgame extends Rooms.RoomGame { return false; } - // overwrite the default makePlayer so it makes a UNOgamePlayer instead. + /** + * Overwrite the default makePlayer so it makes an UnoGamePlayer instead. + * @param {User} user + * @return {UnoGamePlayer} + */ makePlayer(user) { - return new UNOgamePlayer(user, this); + return new UnoGamePlayer(user, this); } + /** + * @param {User} user + * @param {string} oldUserid + * @param {boolean} isJoining + * @param {boolean} isForceRenamed + * @return {false | void} + */ onRename(user, oldUserid, isJoining, isForceRenamed) { if (!(oldUserid in this.players) || user.userid === oldUserid) return false; if (!user.named && !isForceRenamed) { @@ -162,39 +238,52 @@ class UNOgame extends Rooms.RoomGame { this.players[user.userid].userid = user.userid; if (this.awaitUno && this.awaitUno === oldUserid) this.awaitUno = user.userid; - if (this.currentPlayer && this.currentPlayer === oldUserid) this.currentPlayer = user.userid; + if (this.currentPlayerid === oldUserid) this.currentPlayerid = user.userid; } + /** + * @param {string} userid + * @return {string | false} + */ eliminate(userid) { if (!(userid in this.players)) return false; let name = this.players[userid].name; if (this.playerCount === 2) { - this.removePlayer({userid: userid}); + this.removePlayer(this.players[userid]); this.onWin(this.players[Object.keys(this.players)[0]]); return name; } // handle current player... - if (userid === this.currentPlayer) { + if (userid === this.currentPlayerid) { if (this.state === 'color') { + if (!this.topCard) { + // should never happen + throw new Error(`No top card in the discard pile.`); + } this.topCard.changedColor = this.discards[1].changedColor || this.discards[1].color; this.sendToRoom(`|raw|${Chat.escapeHTML(name)} has not picked a color, the color will stay as ${this.topCard.changedColor}.`); } - clearTimeout(this.timer); + if (this.timer) clearTimeout(this.timer); this.nextTurn(); } + if (this.awaitUno === userid) this.awaitUno = null; // put that player's cards into the discard pile to prevent cards from being permanently lost this.discards.push(...this.players[userid].hand); - this.removePlayer({userid: userid}); + this.removePlayer(this.players[userid]); return name; } - sendToRoom(msg, overrideSuppress) { + /** + * @param {string} msg + * @param {boolean} [overrideSuppress] + */ + sendToRoom(msg, overrideSuppress = false) { if (!this.suppressMessages || overrideSuppress) { this.room.add(msg).update(); } else { @@ -212,19 +301,27 @@ class UNOgame extends Rooms.RoomGame { } } + /** + * @param {boolean} [showCards] + * @return {string[]} + */ getPlayers(showCards) { let playerList = Object.keys(this.players); if (!showCards) { return playerList.sort().map(id => Chat.escapeHTML(this.players[id].name)); } if (this.direction === -1) playerList = playerList.reverse(); - return playerList.map(id => `${(this.currentPlayer && this.currentPlayer === id ? '' : '')}${Chat.escapeHTML(this.players[id].name)} (${this.players[id].hand.length}) ${(this.currentPlayer && this.currentPlayer === id ? '' : "")}`); + return playerList.map(id => `${(this.currentPlayerid === id ? '' : '')}${Chat.escapeHTML(this.players[id].name)} (${this.players[id].hand.length}) ${(this.currentPlayerid === id ? '' : "")}`); } + /** + * @return {Promise} + */ onAwaitUno() { return new Promise((resolve, reject) => { if (!this.awaitUno) return resolve(); + this.state = "uno"; // the throttle for sending messages is at 600ms for non-authed users, // wait 750ms before sending the next person's turn. // this allows games to be fairer, so the next player would not spam the pass command blindly @@ -235,40 +332,46 @@ class UNOgame extends Rooms.RoomGame { }); } + /** + * @param {boolean} [starting] + */ nextTurn(starting) { this.onAwaitUno() .then(() => { if (!starting) this.onNextPlayer(); - clearTimeout(this.timer); - let player = this.players[this.currentPlayer]; + if (this.timer) clearTimeout(this.timer); + let player = this.players[this.currentPlayerid]; this.sendToRoom(`|c:|${(Math.floor(Date.now() / 1000))}|~|${player.name}'s turn.`); this.state = 'play'; - if (player.cardLock) delete player.cardLock; + if (player.cardLock) player.cardLock = null; player.sendDisplay(); this.timer = setTimeout(() => { this.sendToRoom(`${player.name} has been automatically disqualified.`); - this.eliminate(this.currentPlayer); + this.eliminate(this.currentPlayerid); }, this.maxTime * 1000); }); } onNextPlayer() { // if none is set - if (!this.currentPlayer) { + if (!this.currentPlayerid) { let userList = Object.keys(this.players); - this.currentPlayer = userList[Math.floor(this.playerCount * Math.random())]; + this.currentPlayerid = userList[Math.floor(this.playerCount * Math.random())]; } - this.currentPlayer = this.getNextPlayer(); + this.currentPlayerid = this.getNextPlayer(); } + /** + * @return {string} + */ getNextPlayer() { let userList = Object.keys(this.players); - let player = userList[(userList.indexOf(this.currentPlayer) + this.direction)]; + let player = userList[(userList.indexOf(this.currentPlayerid) + this.direction)]; if (!player) { player = this.direction === 1 ? userList[0] : userList[this.playerCount - 1]; @@ -276,33 +379,44 @@ class UNOgame extends Rooms.RoomGame { return player; } - onDraw(user) { - if (this.currentPlayer !== user.userid || this.state !== 'play') return false; - if (this.players[user.userid].cardLock) return true; + /** + * @param {UnoGamePlayer} player + * @return {boolean | void} + */ + onDraw(player) { + if (this.currentPlayerid !== player.userid || this.state !== 'play') return false; + if (player.cardLock) return true; this.onCheckUno(); - this.sendToRoom(`${user.name} has drawn a card.`); - let player = this.players[user.userid]; + this.sendToRoom(`${player.name} has drawn a card.`); - let card = this.onDrawCard(user, 1, true); + let card = this.onDrawCard(player, 1); player.sendDisplay(); player.cardLock = card[0].name; } - onPlay(user, cardName) { - if (this.currentPlayer !== user.userid || this.state !== 'play') return false; - let player = this.players[user.userid]; + /** + * @param {UnoGamePlayer} player + * @param {string} cardName + * @return {false | string | void} + */ + onPlay(player, cardName) { + if (this.currentPlayerid !== player.userid || this.state !== 'play') return false; let card = player.hasCard(cardName); if (!card) return "You do not have that card."; // check for legal play + if (!this.topCard) { + // should never happen + throw new Error(`No top card in the discard pile.`); + } if (player.cardLock && player.cardLock !== cardName) return `You can only play ${player.cardLock} after drawing.`; if (card.color !== 'Black' && card.color !== (this.topCard.changedColor || this.topCard.color) && card.value !== this.topCard.value) return `You cannot play this card - you can only play: Wild cards, ${(this.topCard.changedColor ? 'and' : '')} ${(this.topCard.changedColor || this.topCard.color)} cards${this.topCard.changedColor ? "" : ` and ${this.topCard.value}'s`}.`; if (card.value === '+4' && !player.canPlayWildFour()) return "You cannot play Wild +4 when you still have a card with the same color as the top card."; - clearTimeout(this.timer); // reset the autodq timer. + if (this.timer) clearTimeout(this.timer); // reset the autodq timer. this.onCheckUno(); @@ -313,7 +427,7 @@ class UNOgame extends Rooms.RoomGame { // update the unoId here, so when the display is sent to the player when the play is made if (player.hand.length === 1) { - this.awaitUno = user.userid; + this.awaitUno = player.userid; this.unoId = Math.floor(Math.random() * 100).toString(); } @@ -332,6 +446,10 @@ class UNOgame extends Rooms.RoomGame { if (this.state === 'play') this.nextTurn(); } + /** + * @param {string} value + * @param {boolean} [initialize] + */ onRunEffect(value, initialize) { const colorDisplay = `|uhtml|uno-hand|
    `; @@ -343,43 +461,55 @@ class UNOgame extends Rooms.RoomGame { break; case 'Skip': this.onNextPlayer(); - this.sendToRoom(this.players[this.currentPlayer].name + "'s turn has been skipped."); + this.sendToRoom(this.players[this.currentPlayerid].name + "'s turn has been skipped."); break; case '+2': this.onNextPlayer(); - this.sendToRoom(this.players[this.currentPlayer].name + " has been forced to draw 2 cards."); - this.onDrawCard({userid: this.currentPlayer}, 2); + this.sendToRoom(this.players[this.currentPlayerid].name + " has been forced to draw 2 cards."); + this.onDrawCard(this.players[this.currentPlayerid], 2); break; case '+4': - this.players[this.currentPlayer].sendRoom(colorDisplay); + this.players[this.currentPlayerid].sendRoom(colorDisplay); this.state = 'color'; // apply to the next in line, since the current player still has to choose the color let next = this.getNextPlayer(); this.sendToRoom(this.players[next].name + " has been forced to draw 4 cards."); - this.onDrawCard({userid: next}, 4); + this.onDrawCard(this.players[next], 4); this.isPlusFour = true; this.timer = setTimeout(() => { - this.sendToRoom(`${this.players[this.currentPlayer].name} has been automatically disqualified.`); - this.eliminate(this.currentPlayer); + this.sendToRoom(`${this.players[this.currentPlayerid].name} has been automatically disqualified.`); + this.eliminate(this.currentPlayerid); }, this.maxTime * 1000); break; case 'Wild': - this.players[this.currentPlayer].sendRoom(colorDisplay); + this.players[this.currentPlayerid].sendRoom(colorDisplay); this.state = 'color'; this.timer = setTimeout(() => { - this.sendToRoom(`${this.players[this.currentPlayer].name} has been automatically disqualified.`); - this.eliminate(this.currentPlayer); + this.sendToRoom(`${this.players[this.currentPlayerid].name} has been automatically disqualified.`); + this.eliminate(this.currentPlayerid); }, this.maxTime * 1000); break; } if (initialize) this.onNextPlayer(); } - onSelectcolor(user, color) { - if (!['Red', 'Blue', 'Green', 'Yellow'].includes(color) || user.userid !== this.currentPlayer || this.state !== 'color') return false; + /** + * @param {UnoGamePlayer} player + * @param {Color} color + * @return {false | void} + */ + onSelectColor(player, color) { + if (!['Red', 'Blue', 'Green', 'Yellow'].includes(color) || player.userid !== this.currentPlayerid || this.state !== 'color') return false; + if (!this.topCard) { + // should never happen + throw new Error(`No top card in the discard pile.`); + } this.topCard.changedColor = color; this.sendToRoom(`The color has been changed to ${color}.`); - clearTimeout(this.timer); + if (this.timer) clearTimeout(this.timer); + + // send the display of their cards again + player.sendDisplay(); if (this.isPlusFour) { this.isPlusFour = false; @@ -389,64 +519,87 @@ class UNOgame extends Rooms.RoomGame { this.nextTurn(); } - onDrawCard(user, count) { - if (!(user.userid in this.players)) return false; - let drawnCards = this.drawCard(count); + /** + * @param {UnoGamePlayer} player + * @param {number} count + * @return {Card[]} + */ + onDrawCard(player, count) { + if (typeof count === 'string') count = parseInt(count); + if (!count || isNaN(count) || count < 1) count = 1; + let drawnCards = /** @type {Card[]} */ (this.drawCard(count)); - let player = this.players[user.userid]; player.hand.push(...drawnCards); - player.sendRoom(`|raw|You have drawn the following card${drawnCards.length > 1 ? 's' : ''}: ${drawnCards.map(card => `${card.name}`).join(', ')}.`); + player.sendRoom(`|raw|You have drawn the following card${Chat.plural(drawnCards)}: ${drawnCards.map(card => `${card.name}`).join(', ')}.`); return drawnCards; } + /** + * @param {number} count + * @return {Card[]} + */ drawCard(count) { - count = parseInt(count); - if (!count || count < 1) count = 1; - let drawnCards = []; + if (typeof count === 'string') count = parseInt(count); + if (!count || isNaN(count) || count < 1) count = 1; + let drawnCards = /** @type {Card[]} */ ([]); for (let i = 0; i < count; i++) { if (!this.deck.length) { this.deck = this.discards.length ? Dex.shuffle(this.discards) : Dex.shuffle(createDeck()); // shuffle the cards back into the deck, or if there are no discards, add another deck into the game. this.discards = []; // clear discard pile } - drawnCards.push(this.deck.pop()); + drawnCards.push(this.deck[this.deck.length - 1]); + this.deck.pop(); } return drawnCards; } - onUno(user, unoId) { + /** + * @param {UnoGamePlayer} player + * @param {string} unoId + * @return {false | void} + */ + onUno(player, unoId) { // uno id makes spamming /uno uno impossible - if (this.unoId !== unoId || user.userid !== this.awaitUno) return false; - this.sendToRoom(Chat.html`|raw|UNO! ${user.name} is down to their last card!`); - delete this.awaitUno; - delete this.unoId; + if (this.unoId !== unoId || player.userid !== this.awaitUno) return false; + this.sendToRoom(Chat.html`|raw|UNO! ${player.name} is down to their last card!`); + this.awaitUno = null; + this.unoId = null; } onCheckUno() { if (this.awaitUno) { // if the previous player hasn't hit UNO before the next player plays something, they are forced to draw 2 cards; - if (this.awaitUno !== this.currentPlayer) { + if (this.awaitUno !== this.currentPlayerid) { this.sendToRoom(`${this.players[this.awaitUno].name} forgot to say UNO! and is forced to draw 2 cards.`); - this.onDrawCard({userid: this.awaitUno}, 2); + this.onDrawCard(this.players[this.awaitUno], 2); } - delete this.awaitUno; - delete this.unoId; + this.awaitUno = null; + this.unoId = null; } } + /** + * @param {User} user + * @return {false | void} + */ onSendHand(user) { if (!(user.userid in this.players) || this.state === 'signups') return false; this.players[user.userid].sendDisplay(); } + /** + * @param {UnoGamePlayer} player + */ onWin(player) { this.sendToRoom(Chat.html`|raw|
    Congratulations to ${player.name} for winning the game of UNO!
    `, true); this.destroy(); } destroy() { - clearTimeout(this.timer); + if (this.timer) clearTimeout(this.timer); + if (this.autostartTimer) clearTimeout(this.autostartTimer); this.sendToRoom(`|uhtmlchange|uno-${this.room.gameNumber}|
    The game of UNO has ended.
    `, true); // deallocate games for each player. @@ -457,32 +610,55 @@ class UNOgame extends Rooms.RoomGame { } } -class UNOgamePlayer extends Rooms.RoomGamePlayer { +class UnoGamePlayer extends Rooms.RoomGamePlayer { + /** + * @param {User} user + * @param {UnoGame} game + */ constructor(user, game) { super(user, game); - this.hand = []; + this.hand = /** @type {Card[]} */ ([]); + this.game = game; + /** @type {string?} */ + this.cardLock = null; } + /** + * @return {boolean} + */ canPlayWildFour() { + if (!this.game.topCard) { + // should never happen + throw new Error(`No top card in the discard pile.`); + } let color = (this.game.topCard.changedColor || this.game.topCard.color); if (this.hand.some(c => c.color === color)) return false; return true; } + /** + * @param {string} cardName + */ hasCard(cardName) { - return this.hand.find(c => c.name === cardName); + return this.hand.find(card => card.name === cardName); } + /** + * @param {string} cardName + */ removeCard(cardName) { - for (let i = 0; i < this.hand.length; i++) { - if (this.hand[i].name === cardName) { + for (const [i, card] of this.hand.entries()) { + if (card.name === cardName) { this.hand.splice(i, 1); break; } } } + /** + * @return {string[]} + */ buildHand() { return this.hand.sort((a, b) => a.color.localeCompare(b.color) || a.value.localeCompare(b.value)) .map((c, i) => cardHTML(c, i === this.hand.length - 1)); @@ -491,27 +667,32 @@ class UNOgamePlayer extends Rooms.RoomGamePlayer { sendDisplay() { let hand = this.buildHand().join(''); let players = `

    Players (${this.game.playerCount}):

    ${this.game.getPlayers(true).join('
    ')}`; - let draw = ''; - let pass = ''; - let uno = ``; + let draw = ''; + let pass = ''; + let uno = ``; + if (!this.game.topCard) { + // should never happen + throw new Error(`No top card in the discard pile.`); + } let top = `Top Card: ${this.game.topCard.name}`; // clear previous display and show new display this.sendRoom("|uhtmlchange|uno-hand|"); this.sendRoom( - `|uhtml|uno-hand|
    ${this.game.currentPlayer === this.userid ? `` : ""}` + + `|uhtml|uno-hand|
    ${hand}
    ${top}
    ${this.game.currentPlayerid === this.userid ? `` : ""}` + `
    ${hand}
    ${top}
    ${players}
    ` + - `${this.game.currentPlayer === this.userid ? `
    ${draw} ${pass} ${uno}
    ` : ""}
    ` + `${this.game.currentPlayerid === this.userid ? `
    ${draw}${pass}
    ${uno}
    ` : ""}` ); } } -exports.commands = { +/** @type {ChatCommands} */ +const commands = { uno: { // roomowner commands off: 'disable', - disable: function (target, room, user) { + disable(target, room, user) { if (!this.can('gamemanagement', null, room)) return; if (room.unoDisabled) { return this.errorReply("UNO is already disabled in this room."); @@ -525,7 +706,7 @@ exports.commands = { }, on: 'enable', - enable: function (target, room, user) { + enable(target, room, user) { if (!this.can('gamemanagement', null, room)) return; if (!room.unoDisabled) { return this.errorReply("UNO is already enabled in this room."); @@ -545,174 +726,245 @@ exports.commands = { makepublic: 'create', createprivate: 'create', makeprivate: 'create', - create: function (target, room, user, connection, cmd) { + create(target, room, user, connection, cmd) { if (!this.can('minigame', null, room)) return; if (room.unoDisabled) return this.errorReply("UNO is currently disabled for this room."); if (room.game) return this.errorReply("There is already a game in progress in this room."); let suppressMessages = cmd.includes('private') || !(cmd.includes('public') || room.id === 'gamecorner'); - room.game = new UNOgame(room, target, suppressMessages); - this.privateModCommand(`(A game of UNO was created by ${user.name}.)`); + let cap = parseInt(target); + if (isNaN(cap)) cap = 6; + if (cap < 2) cap = 2; + room.game = new UnoGame(room, cap, suppressMessages); + this.privateModAction(`(A game of UNO was created by ${user.name}.)`); + this.modlog('UNO CREATE'); }, - start: function (target, room, user) { + start(target, room, user) { if (!this.can('minigame', null, room)) return; - if (!room.game || room.game.gameid !== 'uno' || room.game.state !== 'signups') return this.errorReply("There is no UNO game in signups phase in this room."); - if (room.game.onStart()) this.privateModCommand(`(The game of UNO was started by ${user.name}.)`); + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno' || game.state !== 'signups') return this.errorReply("There is no UNO game in signups phase in this room."); + if (game.onStart()) { + this.privateModAction(`(The game of UNO was started by ${user.name}.)`); + this.modlog('UNO START'); + } }, stop: 'end', - end: function (target, room, user) { + end(target, room, user) { if (!this.can('minigame', null, room)) return; if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room."); room.game.destroy(); room.add("The game of UNO was forcibly ended.").update(); - this.privateModCommand(`(The game of UNO was ended by ${user.name}.)`); + this.privateModAction(`(The game of UNO was ended by ${user.name}.)`); + this.modlog('UNO END'); }, - timer: function (target, room, user) { + timer(target, room, user) { if (!this.can('minigame', null, room)) return; - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room."); + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room."); let amount = parseInt(target); if (!amount || amount < 5 || amount > 300) return this.errorReply("The amount must be a number between 5 and 300."); - room.game.maxTime = amount; - if (room.game.timer) { - clearTimeout(room.game.timer); - room.game.timer = setTimeout(() => { - room.game.eliminate(room.game.currentPlayer); - }, amount * 1000); + game.maxTime = amount; + if (game.timer) clearTimeout(game.timer); + game.timer = setTimeout(() => { + game.eliminate(game.currentPlayerid); + }, amount * 1000); + this.addModAction(`${user.name} has set the UNO automatic disqualification timer to ${amount} seconds.`); + this.modlog('UNO TIMER', null, `${amount} seconds`); + }, + + autostart(target, room, user) { + if (!this.can('minigame', null, room)) return; + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + if (toId(target) === 'off') { + if (!game.autostartTimer) return this.errorReply("There is no autostart timer running on."); + this.addModAction(`${user.name} has turned off the UNO autostart timer.`); + clearTimeout(game.autostartTimer); + return; } - this.addModCommand(`${user.name} has set the UNO automatic disqualification timer to ${amount} seconds.`); + const amount = parseInt(target); + if (!amount || amount < 30 || amount > 600) return this.errorReply("The amount must be a number between 30 and 600 seconds."); + if (game.state !== 'signups') return this.errorReply("The game of UNO has already started."); + if (game.autostartTimer) clearTimeout(game.autostartTimer); + game.autostartTimer = setTimeout(() => { + game.onStart(); + }, amount * 1000); + this.addModAction(`${user.name} has set the UNO autostart timer to ${amount} seconds.`); }, dq: 'disqualify', - disqualify: function (target, room, user) { + disqualify(target, room, user) { if (!this.can('minigame', null, room)) return; - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - let disqualified = room.game.eliminate(toId(target)); + let disqualified = game.eliminate(toId(target)); if (disqualified === false) return this.errorReply(`Unable to disqualify ${target}.`); - this.privateModCommand(`(${user.name} has disqualified ${disqualified} from the UNO game.)`); + this.privateModAction(`(${user.name} has disqualified ${disqualified} from the UNO game.)`); + this.modlog('UNO DQ', toId(target)); room.add(`${target} has been disqualified from the UNO game.`).update(); }, // player/user commands - j: 'join', - join: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + j: 'unojoin', + // TypeScript doesn't like 'join' being defined as a function + join: 'unojoin', + unojoin(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); if (!this.canTalk()) return false; - if (!room.game.joinGame(user)) return this.errorReply("Unable to join the game."); + if (!game.joinGame(user)) return this.errorReply("Unable to join the game."); return this.sendReply("You have joined the game of UNO."); }, l: 'leave', - leave: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - if (!room.game.leaveGame(user)) return this.errorReply("Unable to leave the game."); + leave(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + if (!game.leaveGame(user)) return this.errorReply("Unable to leave the game."); return this.sendReply("You have left the game of UNO."); }, - play: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - let error = room.game.onPlay(user, target); + play(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + /** @type {UnoGamePlayer | undefined} */ + let player = game.players[user.userid]; + if (!player) return this.errorReply(`You are not in the game of UNO.`); + let error = game.onPlay(player, target); if (error) this.errorReply(error); }, - draw: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - let error = room.game.onDraw(user); + draw(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + /** @type {UnoGamePlayer | undefined} */ + let player = game.players[user.userid]; + if (!player) return this.errorReply(`You are not in the game of UNO.`); + let error = game.onDraw(player); if (error) return this.errorReply("You have already drawn a card this turn."); }, - pass: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - if (room.game.currentPlayer !== user.userid) return this.errorReply("It is currently not your turn."); - if (!room.game.players[user.userid].cardLock) return this.errorReply("You cannot pass until you draw a card."); - if (room.game.state === 'color') return this.errorReply("You cannot pass until you choose a color."); - - room.game.sendToRoom(`${user.name} has passed.`); - room.game.nextTurn(); + pass(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + if (game.currentPlayerid !== user.userid) return this.errorReply("It is currently not your turn."); + /** @type {UnoGamePlayer | undefined} */ + let player = game.players[user.userid]; + if (!player) return this.errorReply(`You are not in the game of UNO.`); + if (!player.cardLock) return this.errorReply("You cannot pass until you draw a card."); + if (game.state === 'color') return this.errorReply("You cannot pass until you choose a color."); + + game.sendToRoom(`${user.name} has passed.`); + game.nextTurn(); }, - color: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return false; - room.game.onSelectcolor(user, target); + color(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return false; + /** @type {UnoGamePlayer | undefined} */ + let player = game.players[user.userid]; + if (!player) return this.errorReply(`You are not in the game of UNO.`); + /** @type {Color} */ + let color; + if (target === 'Red' || target === 'Green' || target === 'Blue' || target === 'Yellow' || target === 'Black') { + color = target; + } else { + return this.errorReply(`"${target}" is not a valid color.`); + } + game.onSelectColor(player, color); }, - uno: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return false; - room.game.onUno(user, target); + uno(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return false; + /** @type {UnoGamePlayer | undefined} */ + let player = game.players[user.userid]; + if (!player) return this.errorReply(`You are not in the game of UNO.`); + game.onUno(player, target); }, // information commands '': 'hand', - hand: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.parse("/help uno"); - room.game.onSendHand(user); + hand(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.parse("/help uno"); + game.onSendHand(user); }, players: 'getusers', users: 'getusers', getplayers: 'getusers', - getusers: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + getusers(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); if (!this.runBroadcast()) return false; - this.sendReplyBox(`Players (${room.game.playerCount}):
    ${room.game.getPlayers().join(', ')}`); + this.sendReplyBox(`Players (${game.playerCount}):
    ${game.getPlayers().join(', ')}`); }, - help: function (target, room, user) { + help(target, room, user) { this.parse('/help uno'); }, // suppression commands - suppress: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + suppress(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); if (!this.can('minigame', null, room)) return; target = toId(target); let state = target === 'on' ? true : target === 'off' ? false : undefined; - if (state === undefined) return this.sendReply(`Suppression of UNO game messages is currently ${(room.game.suppressMessages ? 'on' : 'off')}.`); - if (state === room.game.suppressMessages) return this.errorReply(`Suppression of UNO game messages is already ${(room.game.suppressMessages ? 'on' : 'off')}.`); + if (state === undefined) return this.sendReply(`Suppression of UNO game messages is currently ${(game.suppressMessages ? 'on' : 'off')}.`); + if (state === game.suppressMessages) return this.errorReply(`Suppression of UNO game messages is already ${(game.suppressMessages ? 'on' : 'off')}.`); - room.game.suppressMessages = state; + game.suppressMessages = state; - this.addModCommand(`${user.name} has turned ${(state ? 'on' : 'off')} suppression of UNO game messages.`); + this.addModAction(`${user.name} has turned ${(state ? 'on' : 'off')} suppression of UNO game messages.`); + this.modlog('UNO SUPRESS', null, (state ? 'ON' : 'OFF')); }, - spectate: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + spectate(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - if (!room.game.suppressMessages) return this.errorReply("The current UNO game is not suppressing messages."); - if (user.userid in room.game.spectators) return this.errorReply("You are already spectating this game."); + if (!game.suppressMessages) return this.errorReply("The current UNO game is not suppressing messages."); + if (user.userid in game.spectators) return this.errorReply("You are already spectating this game."); - room.game.spectators[user.userid] = 1; + game.spectators[user.userid] = 1; this.sendReply("You are now spectating this private UNO game."); }, - unspectate: function (target, room, user) { - if (!room.game || room.game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); + unspectate(target, room, user) { + const game = /** @type {UnoGame} */ (room.game); + if (!game || game.gameid !== 'uno') return this.errorReply("There is no UNO game going on in this room right now."); - if (!room.game.suppressMessages) return this.errorReply("The current UNO game is not suppressing messages."); - if (!(user.userid in room.game.spectators)) return this.errorReply("You are currently not spectating this game."); + if (!game.suppressMessages) return this.errorReply("The current UNO game is not suppressing messages."); + if (!(user.userid in game.spectators)) return this.errorReply("You are currently not spectating this game."); - delete room.game.spectators[user.userid]; + delete game.spectators[user.userid]; this.sendReply("You are no longer spectating this private UNO game."); }, }, unohelp: [ - "/uno create [player cap] - creates a new UNO game with an optional player cap (default player cap at 6). Use the command `createpublic` to force a public game or `createprivate` to force a private game. Requires: % @ * # & ~", - "/uno timer [amount] - sets an auto disqualification timer for `amount` seconds. Requires: % @ * # & ~", - "/uno end - ends the current game of UNO. Requires: % @ * # & ~", - "/uno start - starts the current game of UNO. Requires: % @ * # & ~", - "/uno disqualify [player] - disqualifies the player from the game. Requires: % @ * # & ~", - "/uno hand - displays your own hand.", - "/uno getusers - displays the players still in the game.", - "/uno [spectate | unspectate] - spectate / unspectate the current private UNO game.", - "/uno suppress [on | off] - Toggles suppression of game messages.", + `/uno create [player cap] - creates a new UNO game with an optional player cap (default player cap at 6). Use the command [createpublic] to force a public game or [createprivate] to force a private game. Requires: % @ # & ~`, + `/uno timer [amount] - sets an auto disqualification timer for [amount] seconds. Requires: % @ # & ~`, + `/uno autostart [amount] - sets an auto starting timer for [amount] seconds. Requires: % @ # & ~`, + `/uno end - ends the current game of UNO. Requires: % @ # & ~`, + `/uno start - starts the current game of UNO. Requires: % @ # & ~`, + `/uno disqualify [player] - disqualifies the player from the game. Requires: % @ # & ~`, + `/uno hand - displays your own hand.`, + `/uno getusers - displays the players still in the game.`, + `/uno [spectate|unspectate] - spectate / unspectate the current private UNO game.`, + `/uno suppress [on|off] - Toggles suppression of game messages.`, ], }; + +exports.commands = commands; diff --git a/chat-plugins/wifi.js b/server/chat-plugins/wifi.js similarity index 71% rename from chat-plugins/wifi.js rename to server/chat-plugins/wifi.js index eae03d56a54e7..4276ce1ba53c3 100644 --- a/chat-plugins/wifi.js +++ b/server/chat-plugins/wifi.js @@ -6,21 +6,51 @@ 'use strict'; +/** @type {typeof import('../../lib/fs').FS} */ +const FS = require(/** @type {any} */('../../.lib-dist/fs')).FS; + Punishments.roomPunishmentTypes.set('GIVEAWAYBAN', 'banned from giveaways'); const BAN_DURATION = 7 * 24 * 60 * 60 * 1000; +const RECENT_THRESHOLD = 30 * 24 * 60 * 60 * 1000; + +const STATS_FILE = 'config/chat-plugins/wifi.json'; +/** @type {{[k: string]: number[]}} */ +let stats = {}; +try { + stats = require(`../../${STATS_FILE}`); +} catch (e) { + if (e.code !== 'MODULE_NOT_FOUND' && e.code !== 'ENOENT') throw e; +} +if (!stats || typeof stats !== 'object') stats = {}; + +function saveStats() { + FS(STATS_FILE).writeUpdate(() => JSON.stringify(stats)); +} + +/** + * @param {string} str + */ function toPokemonId(str) { - return str.toLowerCase().replace(/é/g, 'e').replace(/[^a-z0-9 /]/g, ''); + return str.toLowerCase().replace(/é/g, 'e').replace(/[^a-z0-9 -/]/g, ''); } class Giveaway { + /** + * @param {User} host + * @param {User} giver + * @param {ChatRoom | GameRoom} room + * @param {string} ot + * @param {string} tid + * @param {string} fc + * @param {string} prize + */ constructor(host, giver, room, ot, tid, fc, prize) { - if (room.gaNumber) { - room.gaNumber++; - } else { - room.gaNumber = 1; - } + // The massive amounts of typescipt ignores are to work around something that is impossible to implement in the current typescipt version, but should be available soon. + // I don't feel the need to fully overhaul the code structure to temporarily shut tsc up. I would rather use ignores for the time being to accomplish that. + + this.gaNumber = ++room.gameNumber; this.host = host; this.giver = giver; this.room = room; @@ -31,18 +61,35 @@ class Giveaway { this.prize = prize; this.phase = 'pending'; + /** @type {{[k: string]: string}} */ this.joined = {}; - this.sprite = Giveaway.getSprite(prize); + /** @type {NodeJS.Timer?} */ + this.timer = null; + + // This seems wrong but I can't find a better way to do this. + /** @type {Set} */ + // @ts-ignore + this.monIds = null; + this.sprite = ''; + [this.monIds, this.sprite] = Giveaway.getSprite(prize); } + generateReminder() {} + + /** + * @param {string} content + */ send(content) { - this.room.add(`|uhtml|giveaway${this.room.gaNumber}${this.phase}|
    ${content}
    `); + this.room.add(`|uhtml|giveaway${this.gaNumber}${this.phase}|
    ${content}
    `); this.room.update(); } + /** + * @param {string} content + */ changeUhtml(content) { - this.room.add(`|uhtmlchange|giveaway${this.room.gaNumber}${this.phase}|
    ${content}
    `); + this.room.add(`|uhtmlchange|giveaway${this.gaNumber}${this.phase}|
    ${content}
    `); this.room.update(); } @@ -53,6 +100,9 @@ class Giveaway { } } + /** + * @param {User} user + */ checkJoined(user) { for (let ip in this.joined) { if (user.latestIp === ip) return ip; @@ -61,37 +111,61 @@ class Giveaway { return false; } + /** + * @param {User} user + */ kickUser(user) { for (let ip in this.joined) { if (user.latestIp === ip || this.joined[ip] in user.prevNames) { - if (this.generateReminder) user.sendTo(this.room, `|uhtmlchange|giveaway${this.room.gaNumber}${this.phase}|
    ${this.generateReminder()}
    `); + user.sendTo(this.room, `|uhtmlchange|giveaway${this.gaNumber}${this.phase}|
    ${this.generateReminder()}
    `); delete this.joined[ip]; } } } + /** + * @param {User} user + */ checkExcluded(user) { - if (Giveaway.checkBanned(this.room, user)) return true; if (user === this.giver || user.latestIp in this.giver.ips || toId(user) in this.giver.prevNames) return true; return false; } + /** + * @param {ChatRoom | GameRoom} room + * @param {User} user + */ static checkBanned(room, user) { return Punishments.getRoomPunishType(room, toId(user)) === 'GIVEAWAYBAN'; } + /** + * @param {ChatRoom | GameRoom} room + * @param {User} user + * @param {string} reason + */ static ban(room, user, reason) { - Punishments.roomPunish(room, user, ['GIVEAWAYBAN', toId(user), Date.now() + BAN_DURATION, reason]); + Punishments.roomPunish(room, user, ['GIVEAWAYBAN', toId(user), Date.now() + BAN_DURATION, reason], null); } + /** + * @param {ChatRoom | GameRoom} room + * @param {User} user + */ static unban(room, user) { - Punishments.roomUnpunish(room, toId(user), 'GIVEAWAYBAN'); + Punishments.roomUnpunish(room, toId(user), 'GIVEAWAYBAN', false); } + /** + * @param {string} text + * + * @return {[Set, string]} + */ static getSprite(text) { text = toPokemonId(text); let mons = new Map(); let output = ''; + let monIds = new Set(); for (let i in Dex.data.Pokedex) { let id = i; if (!Dex.data.Pokedex[i].baseSpecies && (Dex.data.Pokedex[i].species.includes(' '))) { @@ -137,6 +211,7 @@ class Giveaway { } } } + monIds.add(spriteid); if (mons.size > 1) { output += ``; } else { @@ -145,24 +220,53 @@ class Giveaway { } }); } - return output; + return [monIds, output]; + } + + /** + * @param {Set} monIds + */ + static updateStats(monIds) { + for (let mon of monIds) { + if (!stats[mon]) stats[mon] = []; + + stats[mon].push(Date.now()); + } + + saveStats(); } + /** + * @param {string} rightSide + */ generateWindow(rightSide) { return `

    It's giveaway time!

    ` + `

    Giveaway started by ${Chat.escapeHTML(this.host.name)}

    ` + - `` + - `
    ${this.sprite}

    Giver: ${this.giver}

    ${Chat.parseText(this.prize)}
    OT: ${Chat.escapeHTML(this.ot)}, TID: ${this.tid}
    ${rightSide}

    Note: Please do not join if you don't have a 3DS, a copy of Pokémon Sun/Moon, or are currently unable to receive the prize.

    `; + `` + + `
    ${this.sprite}

    Giver: ${this.giver}

    ${Chat.formatText(this.prize, true)}
    OT: ${Chat.escapeHTML(this.ot)}, TID: ${this.tid}
    ${rightSide}

    Note: You must have a 3DS and a copy of either Pokémon Sun/Moon or Ultra Sun/Ultra Moon to receive the prize. Do not join if you are currently unable to receive the prize.

    `; } } class QuestionGiveaway extends Giveaway { + /** + * @param {User} host + * @param {User} giver + * @param {ChatRoom} room + * @param {string} ot + * @param {string} tid + * @param {string} fc + * @param {string} prize + * @param {string} question + * @param {string[]} answers + */ constructor(host, giver, room, ot, tid, fc, prize, question, answers) { super(host, giver, room, ot, tid, fc, prize); this.type = 'question'; + this.phase = 'pending'; this.question = question; this.answers = QuestionGiveaway.sanitizeAnswers(answers); + /** @type {{[k: string]: number}} */ this.answered = {}; // userid: number of guesses this.send(this.generateWindow('The question will be displayed in one minute! Use /ga to answer.')); @@ -178,13 +282,18 @@ class QuestionGiveaway extends Giveaway { this.changeUhtml('

    The giveaway has started! Scroll down to see the question.

    '); this.phase = 'started'; this.send(this.generateQuestion()); - this.timer = setTimeout(() => this.end(), 1000 * 60 * 5); + this.timer = setTimeout(() => this.end(false), 1000 * 60 * 5); } + /** + * @param {User} user + * @param {string} guess + */ guessAnswer(user, guess) { if (this.phase !== 'started') return user.sendTo(this.room, "The giveaway has not started yet."); if (this.checkJoined(user) && Object.values(this.joined).indexOf(user.userid) < 0) return user.sendTo(this.room, "You have already joined the giveaway."); + if (Giveaway.checkBanned(this.room, user)) return user.sendTo(this.room, "You are banned from entering giveaways."); if (this.checkExcluded(user)) return user.sendTo(this.room, "You are disallowed from entering the giveaway."); if (!this.answered[user.userid]) this.answered[user.userid] = 0; @@ -196,7 +305,7 @@ class QuestionGiveaway extends Giveaway { if (toId(this.answers[i]) === sanitized) { this.winner = user; this.clearTimer(); - return this.end(); + return this.end(false); } } @@ -209,6 +318,11 @@ class QuestionGiveaway extends Giveaway { } } + /** + * @param {string} key + * @param {string} value + * @param {User} user + */ change(key, value, user) { if (user.userid !== this.host.userid) return user.sendTo(this.room, "Only the host can edit the giveaway."); if (this.phase !== 'pending') return user.sendTo(this.room, "You cannot change the question or answer once the giveaway has started."); @@ -216,12 +330,15 @@ class QuestionGiveaway extends Giveaway { this.question = value; return user.sendTo(this.room, `The question has been changed to ${value}.`); } - let ans = QuestionGiveaway.sanitizeAnswers(value); + let ans = QuestionGiveaway.sanitizeAnswers(value.split(',').map(val => val.trim())); if (!ans.length) return user.sendTo(this.room, "You must specify at least one answer and it must not contain any special characters."); this.answers = ans; user.sendTo(this.room, `The answer${Chat.plural(ans, "s have", "has")} been changed to ${ans.join(', ')}.`); } + /** + * @param {boolean} force + */ end(force) { if (force) { this.clearTimer(); @@ -235,26 +352,39 @@ class QuestionGiveaway extends Giveaway { this.changeUhtml('

    The giveaway has ended! Scroll down to see the answer.

    '); this.phase = 'ended'; this.clearTimer(); - this.room.modlog(`${this.winner.name} won ${this.giver.name}'s giveaway for a "${this.prize}" (OT: ${this.ot} TID: ${this.tid} FC: ${this.fc})`); + this.room.modlog(`(wifi) GIVEAWAY WIN: ${this.winner.name} won ${this.giver.name}'s giveaway for a "${this.prize}" (OT: ${this.ot} TID: ${this.tid} FC: ${this.fc})`); this.send(this.generateWindow(`

    ${Chat.escapeHTML(this.winner.name)} won the giveaway! Congratulations!

    ` + `

    ${this.question}
    Correct answer${Chat.plural(this.answers)}: ${this.answers.join(', ')}

    `)); this.winner.sendTo(this.room, `|raw|You have won the giveaway. PM ${Chat.escapeHTML(this.giver.name)} (FC: ${this.fc}) to claim your prize!`); - if (this.winner.connected) this.winner.popup(`You have won the giveaway. PM **${Chat.escapeHTML(this.giver.name)}** (FC: ${this.fc}) to claim your prize!`); - if (this.giver.connected) this.giver.popup(`${Chat.escapeHTML(this.winner.name)} has won your question giveaway!`); + if (this.winner.connected) this.winner.popup(`You have won the giveaway. PM **${this.giver.name}** (FC: ${this.fc}) to claim your prize!`); + if (this.giver.connected) this.giver.popup(`${this.winner.name} has won your question giveaway!`); + Giveaway.updateStats(this.monIds); } } + // @ts-ignore delete this.room.giveaway; } + /** + * @param {string} str + * + * @return {string} + */ static sanitize(str) { return str.toLowerCase().replace(/[^a-z0-9 .-]+/ig, "").trim(); } + /** + * @param {string[]} answers + */ static sanitizeAnswers(answers) { return answers.map(val => QuestionGiveaway.sanitize(val)).filter((val, index, array) => toId(val).length && array.indexOf(val) === index); } + /** + * @param {User} user + */ checkExcluded(user) { if (user === this.host || user.latestIp in this.host.ips || toId(user) in this.host.prevNames) return true; return super.checkExcluded(user); @@ -262,10 +392,24 @@ class QuestionGiveaway extends Giveaway { } class LotteryGiveaway extends Giveaway { + /** + * @param {User} host + * @param {User} giver + * @param {ChatRoom} room + * @param {string} ot + * @param {string} tid + * @param {string} fc + * @param {string} prize + * @param {number} winners + */ constructor(host, giver, room, ot, tid, fc, prize, winners) { super(host, giver, room, ot, tid, fc, prize); this.type = 'lottery'; + this.phase = 'pending'; + + /** @type {User[]} */ + this.winners = []; this.maxwinners = winners || 1; @@ -274,10 +418,10 @@ class LotteryGiveaway extends Giveaway { this.timer = setTimeout(() => this.drawLottery(), 1000 * 60 * 2); } - generateReminder(joined) { + generateReminder(joined = false) { let cmd = (joined ? 'Leave' : 'Join'); let button = ``; - return this.generateWindow(`The lottery drawing will occur in 2 minutes, and with ${this.maxwinners} winner${Chat.plural(this.maxwinners)}!
    ${button}

    `); + return this.generateWindow(`The lottery drawing will occur in 2 minutes, and with ${Chat.count(this.maxwinners, "winners")}!
    ${button}

    `); } display() { @@ -287,25 +431,32 @@ class LotteryGiveaway extends Giveaway { for (let i in this.room.users) { let thisUser = this.room.users[i]; if (this.checkJoined(thisUser)) { - thisUser.sendTo(this.room, `|uhtmlchange|giveaway${this.room.gaNumber}${this.phase}|
    ${joined}
    `); + thisUser.sendTo(this.room, `|uhtmlchange|giveaway${this.gaNumber}${this.phase}|
    ${joined}
    `); } else { - thisUser.sendTo(this.room, `|uhtmlchange|giveaway${this.room.gaNumber}${this.phase}|
    ${notJoined}
    `); + thisUser.sendTo(this.room, `|uhtmlchange|giveaway${this.gaNumber}${this.phase}|
    ${notJoined}
    `); } } } + /** + * @param {User} user + */ addUser(user) { if (this.phase !== 'pending') return user.sendTo(this.room, "The join phase of the lottery giveaway has ended."); if (!user.named) return user.sendTo(this.room, "You need to choose a name before joining a lottery giveaway."); if (this.checkJoined(user)) return user.sendTo(this.room, "You have already joined the giveaway."); + if (Giveaway.checkBanned(this.room, user)) return user.sendTo(this.room, "You are banned from entering giveaways."); if (this.checkExcluded(user)) return user.sendTo(this.room, "You are disallowed from entering the giveaway."); this.joined[user.latestIp] = user.userid; - user.sendTo(this.room, `|uhtmlchange|giveaway${this.room.gaNumber}${this.phase}|
    ${this.generateReminder(true)}
    `); + user.sendTo(this.room, `|uhtmlchange|giveaway${this.gaNumber}${this.phase}|
    ${this.generateReminder(true)}
    `); user.sendTo(this.room, "You have successfully joined the lottery giveaway."); } + /** + * @param {User} user + */ removeUser(user) { if (this.phase !== 'pending') return user.sendTo(this.room, "The join phase of the lottery giveaway has ended."); if (!this.checkJoined(user)) return user.sendTo(this.room, "You have not joined the lottery giveaway."); @@ -314,7 +465,7 @@ class LotteryGiveaway extends Giveaway { delete this.joined[ip]; } } - user.sendTo(this.room, `|uhtmlchange|giveaway${this.room.gaNumber}${this.phase}|
    ${this.generateReminder(false)}
    `); + user.sendTo(this.room, `|uhtmlchange|giveaway${this.gaNumber}${this.phase}|
    ${this.generateReminder(false)}
    `); user.sendTo(this.room, "You have left the lottery giveaway."); } @@ -324,11 +475,11 @@ class LotteryGiveaway extends Giveaway { let userlist = Object.values(this.joined); if (userlist.length < this.maxwinners) { this.changeUhtml('

    The giveaway was forcibly ended.

    '); + // @ts-ignore delete this.room.giveaway; return this.room.send("The giveaway has been forcibly ended as there are not enough participants."); } - this.winners = []; while (this.winners.length < this.maxwinners) { let winner = Users(userlist.splice(Math.floor(Math.random() * userlist.length), 1)[0]); if (!winner) continue; @@ -337,7 +488,7 @@ class LotteryGiveaway extends Giveaway { this.end(); } - end(force) { + end(force = false) { if (force) { this.clearTimer(); this.changeUhtml('

    The giveaway was forcibly ended.

    '); @@ -346,25 +497,31 @@ class LotteryGiveaway extends Giveaway { this.changeUhtml(`

    The giveaway has ended! Scroll down to see the winner${Chat.plural(this.winners)}.

    `); this.phase = 'ended'; let winnerNames = this.winners.map(winner => winner.name).join(', '); - this.room.modlog(`${winnerNames} won ${this.giver.name}'s giveaway for "${this.prize}" (OT: ${this.ot} TID: ${this.tid} FC: ${this.fc})`); + this.room.modlog(`(wifi) GIVEAWAY WIN: ${winnerNames} won ${this.giver.name}'s giveaway for "${this.prize}" (OT: ${this.ot} TID: ${this.tid} FC: ${this.fc})`); this.send(this.generateWindow(`

    Lottery Draw

    ${Object.keys(this.joined).length} users joined the giveaway.
    Our lucky winner${Chat.plural(this.winners)}: ${Chat.escapeHTML(winnerNames)}! Congratulations!

    `)); for (let i = 0; i < this.winners.length; i++) { this.winners[i].sendTo(this.room, `|raw|You have won the lottery giveaway! PM ${this.giver.name} (FC: ${this.fc}) to claim your prize!`); if (this.winners[i].connected) this.winners[i].popup(`You have won the lottery giveaway! PM **${this.giver.name}** (FC: ${this.fc}) to claim your prize!`); } - if (this.giver.connected) this.giver.popup(`The following users have won your lottery giveaway:\n${Chat.escapeHTML(winnerNames)}`); + if (this.giver.connected) this.giver.popup(`The following users have won your lottery giveaway:\n${winnerNames}`); + Giveaway.updateStats(this.monIds); } + // @ts-ignore delete this.room.giveaway; } } class GtsGiveaway { + /** + * @param {ChatRoom} room + * @param {User} giver + * @param {number} amount + * @param {string} summary + * @param {string} deposit + * @param {string} lookfor + */ constructor(room, giver, amount, summary, deposit, lookfor) { - if (room.gtsNumber) { - room.gtsNumber++; - } else { - room.gtsNumber = 1; - } + this.gtsNumber = ++room.gameNumber; this.room = room; this.giver = giver; this.left = amount; @@ -372,7 +529,14 @@ class GtsGiveaway { this.deposit = GtsGiveaway.linkify(Chat.escapeHTML(deposit)); this.lookfor = lookfor; - this.sprite = Giveaway.getSprite(this.summary); + // This seems wrong but I can't find a better way to do this. + /** @type {Set} */ + // @ts-ignore + this.monIds = null; + this.sprite = ''; + [this.monIds, this.sprite] = Giveaway.getSprite(this.summary); + + /** @type {string[]} */ this.sent = []; this.noDeposits = false; @@ -380,13 +544,19 @@ class GtsGiveaway { this.send(this.generateWindow()); } + /** + * @param {string} content + */ send(content) { - this.room.add(`|uhtml|gtsga${this.room.gtsNumber}|
    ${content}
    `); + this.room.add(`|uhtml|gtsga${this.gtsNumber}|
    ${content}
    `); this.room.update(); } + /** + * @param {string} content + */ changeUhtml(content) { - this.room.add(`|uhtmlchange|gtsga${this.room.gtsNumber}|
    ${content}
    `); + this.room.add(`|uhtmlchange|gtsga${this.gtsNumber}|
    ${content}
    `); this.room.update(); } @@ -404,10 +574,13 @@ class GtsGiveaway { `

    Hosted by: ${Chat.escapeHTML(this.giver.name)} | Left: ${this.left}

    ` + `` + (sentModifier ? `` : '') + - `` + + `` + `
    Last winners:
    ${this.sent.join('
    ')}
    ${this.sprite}${Chat.parseText(this.summary)}${this.sprite}${Chat.formatText(this.summary, true)}${rightSide}
    `; } + /** + * @param {number} number + */ updateLeft(number) { this.left = number; if (this.left < 1) return this.end(); @@ -415,6 +588,9 @@ class GtsGiveaway { this.changeUhtml(this.generateWindow()); } + /** + * @param {string} ign + */ updateSent(ign) { this.left--; if (this.left < 1) return this.end(); @@ -432,7 +608,7 @@ class GtsGiveaway { this.changeUhtml(this.generateWindow()); } - end(force) { + end(force = false) { if (force) { this.clearTimer(); this.changeUhtml('

    The GTS giveaway was forcibly ended.

    '); @@ -440,13 +616,19 @@ class GtsGiveaway { } else { this.clearTimer(); this.changeUhtml(`

    The GTS giveaway has finished.

    `); - this.room.modlog(`${this.giver.name} has finished their GTS giveaway for "${this.summary}"`); + this.room.modlog(`(wifi) GTS FINISHED: ${this.giver.name} has finished their GTS giveaway for "${this.summary}"`); this.send(`

    The GTS giveaway for a "${Chat.escapeHTML(this.lookfor)}" has finished.

    `); + Giveaway.updateStats(this.monIds); } + // @ts-ignore delete this.room.gtsga; + return this.left; } // This currently doesn't match some of the edge cases the other pokemon matching function does account for (such as Type: Null). However, this should never be used as a fodder mon anyway, so I don't see a huge need to implement it. + /** + * @param {string} text + */ static linkify(text) { let parsed = text.toLowerCase().replace(/é/g, 'e'); @@ -466,18 +648,20 @@ class GtsGiveaway { } } +/** @type {ChatCommands} */ let commands = { // question giveaway. quiz: 'question', qg: 'question', - question: function (target, room, user) { + question(target, room, user) { if (room.id !== 'wifi' || !target) return false; + // @ts-ignore if (room.giveaway) return this.errorReply("There is already a giveaway going on!"); let [giver, ot, tid, fc, prize, question, ...answers] = target.split(target.includes('|') ? '|' : ',').map(param => param.trim()); - if (!(giver && ot && tid && fc && prize && question && answers.length)) return this.errorReply("Invalid arguments specified - /question giver, ot, tid, fc, prize, question, answer(s)"); + if (!(giver && ot && tid && fc && prize && question && answers.length)) return this.errorReply("Invalid arguments specified - /question giver | ot | tid | fc | prize | question | answer(s)"); tid = toId(tid); - if (isNaN(tid) || tid.length < 5 || tid.length > 6) return this.errorReply("Invalid TID"); + if (isNaN(parseInt(tid)) || tid.length < 5 || tid.length > 6) return this.errorReply("Invalid TID"); fc = toId(fc); if (!parseInt(fc) || fc.length !== 12) return this.errorReply("Invalid FC"); let targetUser = Users(giver); @@ -486,23 +670,29 @@ let commands = { if (!targetUser.autoconfirmed) return this.errorReply(`User '${targetUser.name}' needs to be autoconfirmed to give something away.`); if (Giveaway.checkBanned(room, targetUser)) return this.errorReply(`User '${targetUser.name}' is giveaway banned.`); + // @ts-ignore room.giveaway = new QuestionGiveaway(user, targetUser, room, ot, tid, fc, prize, question, answers); - this.privateModCommand(`(${user.name} started a question giveaway for ${targetUser.name})`); + this.privateModAction(`(${user.name} started a question giveaway for ${targetUser.name})`); + this.modlog('QUESTION GIVEAWAY', null, `for ${targetUser.getLastId()}`); }, changeanswer: 'changequestion', - changequestion: function (target, room, user, conn, cmd) { + changequestion(target, room, user, conn, cmd) { if (room.id !== 'wifi') return false; + // @ts-ignore if (!room.giveaway) return this.errorReply("There is no giveaway going on at the moment."); + // @ts-ignore if (room.giveaway.type !== 'question') return this.errorReply("This is not a question giveaway."); target = target.trim(); if (!target) return this.errorReply("You must include a question or an answer."); + // @ts-ignore room.giveaway.change(cmd.substr(6), target, user); }, showanswer: 'viewanswer', - viewanswer: function (target, room, user) { + viewanswer(target, room, user) { if (room.id !== 'wifi') return false; + // @ts-ignore let giveaway = room.giveaway; if (!giveaway) return this.errorReply("There is no giveaway going on at the moment."); if (giveaway.type !== 'question') return this.errorReply("This is not a question giveaway."); @@ -512,25 +702,29 @@ let commands = { `The answer${Chat.plural(giveaway.answers, 's are', ' is')} ${giveaway.answers.join(', ')}.`); }, guessanswer: 'guess', - guess: function (target, room, user) { + guess(target, room, user) { if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); if (!this.canTalk()) return; + // @ts-ignore if (!room.giveaway) return this.errorReply("There is no giveaway going on at the moment."); + // @ts-ignore if (room.giveaway.type !== 'question') return this.errorReply("This is not a question giveaway."); + // @ts-ignore room.giveaway.guessAnswer(user, target); }, // lottery giveaway. lg: 'lottery', lotto: 'lottery', - lottery: function (target, room, user) { + lottery(target, room, user) { if (room.id !== 'wifi' || !target) return false; + // @ts-ignore if (room.giveaway) return this.errorReply("There is already a giveaway going on!"); let [giver, ot, tid, fc, prize, winners] = target.split(target.includes('|') ? '|' : ',').map(param => param.trim()); - if (!(giver && ot && tid && fc && prize)) return this.errorReply("Invalid arguments specified - /lottery giver, ot, tid, fc, prize, winners"); + if (!(giver && ot && tid && fc && prize)) return this.errorReply("Invalid arguments specified - /lottery giver | ot | tid | fc | prize | winners"); tid = toId(tid); - if (isNaN(tid) || tid.length < 5 || tid.length > 6) return this.errorReply("Invalid TID"); + if (isNaN(parseInt(tid)) || tid.length < 5 || tid.length > 6) return this.errorReply("Invalid TID"); fc = toId(fc); if (!parseInt(fc) || fc.length !== 12) return this.errorReply("Invalid FC"); let targetUser = Users(giver); @@ -542,21 +736,24 @@ let commands = { let numWinners = 1; if (winners) { numWinners = parseInt(winners); - if (isNaN(numWinners) || numWinners < 1 || numWinners > 10) return this.errorReply("The lottery giveaway can have a minimum of 1 and a maximum of 10 winners."); + if (isNaN(numWinners) || numWinners < 1 || numWinners > 5) return this.errorReply("The lottery giveaway can have a minimum of 1 and a maximum of 5 winners."); } + // @ts-ignore room.giveaway = new LotteryGiveaway(user, targetUser, room, ot, tid, fc, prize, numWinners); - this.privateModCommand(`(${user.name} started a lottery giveaway for ${targetUser.name})`); + this.privateModAction(`(${user.name} started a lottery giveaway for ${targetUser.name})`); + this.modlog('LOTTERY GIVEAWAY', null, `for ${targetUser.getLastId()}`); }, leavelotto: 'join', leavelottery: 'join', leave: 'join', joinlotto: 'join', joinlottery: 'join', - join: function (target, room, user, conn, cmd) { + join(target, room, user, conn, cmd) { if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); - if (!this.canTalk()) return; + if (!this.canTalk() || user.semilocked) return; + // @ts-ignore let giveaway = room.giveaway; if (!giveaway) return this.errorReply("There is no giveaway going on at the moment."); if (giveaway.type !== 'lottery') return this.errorReply("This is not a lottery giveaway."); @@ -577,130 +774,174 @@ let commands = { // gts commands gts: { new: 'start', - start: function (target, room, user) { + start(target, room, user) { if (room.id !== 'wifi' || !target) return false; + // @ts-ignore if (room.gtsga) return this.errorReply("There is already a GTS giveaway going on!"); - let [giver, amount, summary, deposit, lookfor] = target.split(target.includes('|') ? '|' : ',').map(param => param.trim()); - if (!(giver && amount && summary && deposit && lookfor)) return this.errorReply("Invalid arguments specified - /gts start giver, amount, summary, deposit, lookfor"); - amount = parseInt(amount); - if (!amount || amount < 30 || amount > 100) return this.errorReply("Please enter a valid amount. For a GTS giveaway, you need to give away at least 30 mons, and no more than 100."); + let [giver, amountStr, summary, deposit, lookfor] = target.split(target.includes('|') ? '|' : ',').map(param => param.trim()); + if (!(giver && amountStr && summary && deposit && lookfor)) return this.errorReply("Invalid arguments specified - /gts start giver | amount | summary | deposit | lookfor"); + let amount = parseInt(amountStr); + if (!amount || amount < 20 || amount > 100) return this.errorReply("Please enter a valid amount. For a GTS giveaway, you need to give away at least 20 mons, and no more than 100."); let targetUser = Users(giver); if (!targetUser || !targetUser.connected) return this.errorReply(`User '${giver}' is not online.`); if (!this.can('warn', null, room)) return this.errorReply("Permission denied."); if (!targetUser.autoconfirmed) return this.errorReply(`User '${targetUser.name}' needs to be autoconfirmed to host a giveaway.`); if (Giveaway.checkBanned(room, targetUser)) return this.errorReply(`User '${targetUser.name}' is giveaway banned.`); + // @ts-ignore room.gtsga = new GtsGiveaway(room, targetUser, amount, summary, deposit, lookfor); - this.privateModCommand(`(${user.name} started a GTS giveaway for ${targetUser.name})`); + this.privateModAction(`(${user.name} started a GTS giveaway for ${targetUser.name} with ${amount} Pokémon)`); + this.modlog('GTS GIVEAWAY', null, `for ${targetUser.getLastId()} with ${amount} Pokémon`); }, - left: function (target, room, user) { + left(target, room, user) { if (room.id !== 'wifi') return false; + // @ts-ignore if (!room.gtsga) return this.errorReply("There is no GTS giveaway going on!"); + // @ts-ignore if (!user.can('warn', null, room) && user !== room.gtsga.giver) return this.errorReply("Only the host or a staff member can update GTS giveaways."); if (!target) { if (!this.runBroadcast()) return; + // @ts-ignore let output = `The GTS giveaway from ${room.gtsga.giver} has ${room.gtsga.left} Pokémon remaining!`; + // @ts-ignore if (room.gtsga.sent.length) output += `Last winners: ${room.gtsga.sent.join(', ')}`; return this.sendReply(output); } let newamount = parseInt(target); if (isNaN(newamount)) return this.errorReply("Please enter a valid amount."); + // @ts-ignore if (newamount > room.gtsga.left) return this.errorReply("The new amount must be lower than the old amount."); + // @ts-ignore + if (newamount < room.gtsga.left - 1) this.modlog(`GTS GIVEAWAY`, null, `set from ${room.gtsga.left} to ${newamount} left`); + // @ts-ignore room.gtsga.updateLeft(newamount); }, - sent: function (target, room, user) { + sent(target, room, user) { if (room.id !== 'wifi') return false; + // @ts-ignore if (!room.gtsga) return this.errorReply("There is no GTS giveaway going on!"); + // @ts-ignore if (!user.can('warn', null, room) && user !== room.gtsga.giver) return this.errorReply("Only the host or a staff member can update GTS giveaways."); if (!target || target.length > 12) return this.errorReply("Please enter a valid IGN."); + // @ts-ignore room.gtsga.updateSent(target); }, - full: function (target, room, user) { + full(target, room, user) { if (room.id !== 'wifi') return false; + // @ts-ignore if (!room.gtsga) return this.errorReply("There is no GTS giveaway going on!"); + // @ts-ignore if (!user.can('warn', null, room) && user !== room.gtsga.giver) return this.errorReply("Only the host or a staff member can update GTS giveaways."); + // @ts-ignore if (room.gtsga.noDeposits) return this.errorReply("The GTS giveaway was already set to not accept deposits."); + // @ts-ignore room.gtsga.stopDeposits(); }, - end: function (target, room, user) { + end(target, room, user) { if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); + // @ts-ignore if (!room.gtsga) return this.errorReply("There is no GTS giveaway going on at the moment."); if (!this.can('warn', null, room)) return false; if (target && target.length > 300) { return this.errorReply("The reason is too long. It cannot exceed 300 characters."); } - room.gtsga.end(true); + // @ts-ignore + const amount = room.gtsga.end(true); if (target) target = `: ${target}`; - this.privateModCommand(`(The giveaway was forcibly ended by ${user.name}${target})`); + this.modlog('GTS END', null, `with ${amount} left${target}`); + this.privateModAction(`(The giveaway was forcibly ended by ${user.name} with ${amount} left${target})`); }, }, // general. - ban: function (target, room, user) { + ban(target, room, user) { if (!target) return false; if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); if (!this.can('warn', null, room)) return false; - target = this.splitTarget(target); + target = this.splitTarget(target, false); let targetUser = this.targetUser; if (!targetUser) return this.errorReply(`User '${this.targetUsername}' not found.`); if (target.length > 300) { return this.errorReply("The reason is too long. It cannot exceed 300 characters."); } - if (Giveaway.checkBanned(room, targetUser)) return this.errorReply(`User '${this.targetUsername}' is already banned from entering giveaways.`); + if (Punishments.getRoomPunishType(room, this.targetUsername)) return this.errorReply(`User '${this.targetUsername}' is already punished in this room.`); Giveaway.ban(room, targetUser, target); + // @ts-ignore if (room.giveaway) room.giveaway.kickUser(targetUser); + this.modlog('GIVEAWAYBAN', targetUser, target); if (target) target = ` (${target})`; - this.privateModCommand(`(${targetUser.name} was banned from entering giveaways by ${user.name}.${target})`); + this.privateModAction(`(${targetUser.name} was banned from entering giveaways by ${user.name}.${target})`); }, - unban: function (target, room, user) { + unban(target, room, user) { if (!target) return false; if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); if (!this.can('warn', null, room)) return false; - this.splitTarget(target); + this.splitTarget(target, false); let targetUser = this.targetUser; if (!targetUser) return this.errorReply(`User '${this.targetUsername}' not found.`); if (!Giveaway.checkBanned(room, targetUser)) return this.errorReply(`User '${this.targetUsername}' isn't banned from entering giveaways.`); Giveaway.unban(room, targetUser); - this.privateModCommand(`${targetUser.name} was unbanned from entering giveaways by ${user.name}.`); + this.privateModAction(`${targetUser.name} was unbanned from entering giveaways by ${user.name}.`); + this.modlog('GIVEAWAYUNBAN', targetUser, null, {noip: 1, noalts: 1}); }, stop: 'end', - end: function (target, room, user) { + end(target, room, user) { if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); + // @ts-ignore if (!room.giveaway) return this.errorReply("There is no giveaway going on at the moment."); + // @ts-ignore if (!this.can('warn', null, room) && user.userid !== room.giveaway.host.userid) return false; if (target && target.length > 300) { return this.errorReply("The reason is too long. It cannot exceed 300 characters."); } + // @ts-ignore room.giveaway.end(true); + this.modlog('GIVEAWAY END', null, target); if (target) target = `: ${target}`; - this.privateModCommand(`(The giveaway was forcibly ended by ${user.name}${target})`); + this.privateModAction(`(The giveaway was forcibly ended by ${user.name}${target})`); }, rm: 'remind', - remind: function (target, room, user) { + remind(target, room, user) { if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); + // @ts-ignore let giveaway = room.giveaway; if (!giveaway) return this.errorReply("There is no giveaway going on at the moment."); if (!this.runBroadcast()) return; if (giveaway.type === 'question') { if (giveaway.phase !== 'started') return this.errorReply("The giveaway has not started yet."); + // @ts-ignore room.giveaway.send(room.giveaway.generateQuestion()); } else { + // @ts-ignore room.giveaway.display(); } }, + count(target, room, user) { + if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); + target = [...Giveaway.getSprite(target)[0]][0]; + if (!target) return this.errorReply("No mon entered - /giveaway count pokemon."); + if (!this.runBroadcast()) return; + + let count = stats[target]; + + if (!count) return this.sendReplyBox("This Pokémon has never been given away."); + let recent = count.filter(val => val + RECENT_THRESHOLD > Date.now()).length; + + this.sendReplyBox(`This Pokémon has been given away ${Chat.count(count, "times")}, a total of ${Chat.count(recent, "times")} in the past month.`); + }, '': 'help', - help: function (target, room, user) { + help(target, room, user) { if (room.id !== 'wifi') return this.errorReply("This command can only be used in the Wi-Fi room."); let reply = ''; @@ -708,22 +949,23 @@ let commands = { case 'staff': if (!this.can('broadcast', null, room)) return; reply = 'Staff commands:
    ' + - '- question or qg User | OT | TID | Friend Code | Prize | Question | Answer[ | Answer2 | Answer3] - Start a new question giveaway (voices can only host for themselves, staff can for all users) (Requires: + % @ * # & ~)
    ' + - '- lottery or lg User | OT | TID | Friend Code | Prize[| Number of Winners] - Starts a lottery giveaway (voices can only host for themselves, staff can for all users) (Requires: + % @ * # & ~)
    ' + + '- question or qg User | OT | TID | Friend Code | Prize | Question | Answer[ | Answer2 | Answer3] - Start a new question giveaway (voices can only host for themselves, staff can for all users) (Requires: + % @ # & ~)
    ' + + '- lottery or lg User | OT | TID | Friend Code | Prize[| Number of Winners] - Starts a lottery giveaway (voices can only host for themselves, staff can for all users) (Requires: + % @ # & ~)
    ' + '- changequestion - Changes the question of a question giveaway (Requires: giveaway host)
    ' + '- changeanswer - Changes the answer of a question giveaway (Requires: giveaway host)
    ' + '- viewanswer - Shows the answer in a question giveaway (only to giveaway host/giver)
    ' + - '- ban - Temporarily bans a user from entering giveaways (Requires: % @ * # & ~)
    ' + - '- end - Forcibly ends the current giveaway (Requires: % @ * # & ~)
    '; + '- ban - Temporarily bans a user from entering giveaways (Requires: % @ # & ~)
    ' + + '- end - Forcibly ends the current giveaway (Requires: % @ # & ~)
    ' + + '- count Mon - Displays how often a certain mon has been given away. Use !giveaway count to broadcast this to the entire room
    '; break; case 'gts': if (!this.can('broadcast', null, room)) return; reply = 'GTS giveaway commands:
    ' + - '- gts start User | Amount | Summary of given mon | What to deposit | What to look for - Starts a gts giveaway (Requires: % @ * # & ~)
    ' + + '- gts start User | Amount | Summary of given mon | What to deposit | What to look for - Starts a gts giveaway (Requires: % @ # & ~)
    ' + '- gts left Amount - Updates the amount left for the current GTS giveaway. Without an amount specified, shows how many Pokémon are left, and who the latest winners are.
    ' + '- gts sent IGN - Adds an ign to the list of latest winners, and updates left count accordingly.
    ' + '- gts full - Signifies enough mons have been received, and will update the GTS giveaway to reflect that.
    ' + - '- gts end - Forcibly ends the current gts giveaway (Requires: % @ * # & ~)
    '; + '- gts end - Forcibly ends the current gts giveaway (Requires: % @ # & ~)
    '; break; case 'game': case 'giveaway': @@ -740,8 +982,8 @@ let commands = { if (!this.runBroadcast()) return; reply = 'Wi-Fi room Giveaway help and info
    ' + '- help user - shows list of participation commands
    ' + - '- help staff - shows giveaway staff commands (Requires: + % @ * # & ~)
    ' + - '- help gts - shows gts giveaway commands (Requires: + % @ * # & ~)'; + '- help staff - shows giveaway staff commands (Requires: + % @ # & ~)
    ' + + '- help gts - shows gts giveaway commands (Requires: + % @ # & ~)'; } this.sendReplyBox(reply); }, diff --git a/server/chat.js b/server/chat.js new file mode 100644 index 0000000000000..55c5498223d89 --- /dev/null +++ b/server/chat.js @@ -0,0 +1,1942 @@ +/** + * Chat + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This handles chat and chat commands sent from users to chatrooms + * and PMs. The main function you're looking for is Chat.parse + * (scroll down to its definition for details) + * + * Individual commands are put in: + * chat-commands.js - "core" commands that shouldn't be modified + * chat-plugins/ - other commands that can be safely modified + * + * The command API is (mostly) documented in chat-plugins/COMMANDS.md + * + * @license MIT license + */ + +/* + +To reload chat commands: + +/hotpatch chat + +*/ + +'use strict'; +/** @typedef {GlobalRoom | GameRoom | ChatRoom} Room */ + +/** @typedef {(this: PageContext, query: string[], user: User, connection: Connection) => (Promise | string | null | void)} PageHandler */ +/** @typedef {{[k: string]: PageHandler | PageTable}} PageTable */ + +/** @typedef {(this: CommandContext, target: string, room: ChatRoom | GameRoom, user: User, connection: Connection, cmd: string, message: string) => (void)} ChatHandler */ +/** @typedef {{[k: string]: ChatHandler | string | true | string[] | ChatCommands}} ChatCommands */ + +/** + * Chat filters can choose to: + * 1. return false OR null - to not send a user's message + * 2. return an altered string - to alter a user's message + * 3. return undefined to send the original message through + * @typedef {(this: CommandContext, message: string, user: User, room: ChatRoom | GameRoom?, connection: Connection, targetUser: User?, originalMessage: string) => (string | false | null | undefined)} ChatFilter + */ +/** @typedef {(name: string, user: User) => (string)} NameFilter */ + +const LINK_WHITELIST = ['*.pokemonshowdown.com', 'psim.us', 'smogtours.psim.us', '*.smogon.com', '*.pastebin.com', '*.hastebin.com']; + +const MAX_MESSAGE_LENGTH = 300; + +const BROADCAST_COOLDOWN = 20 * 1000; +const MESSAGE_COOLDOWN = 5 * 60 * 1000; + +const MAX_PARSE_RECURSION = 10; + +const VALID_COMMAND_TOKENS = '/!'; +const BROADCAST_TOKEN = '!'; + +const TRANSLATION_DIRECTORY = 'translations/'; + +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; + +/** @type {(url: string) => Promise<{width: number, height: number}>} */ +// @ts-ignore ignoring until there is a ts typedef available for this module. +const probe = require('probe-image-size'); + +let Chat = module.exports; + +const emojiRegex = /[\p{Emoji_Modifier_Base}\p{Emoji_Presentation}\uFE0F]/u; + +class PatternTester { + // This class sounds like a RegExp + // In fact, one could in theory implement it as a RegExp subclass + // However, ES2016 RegExp subclassing is a can of worms, and it wouldn't allow us + // to tailor the test method for fast command parsing. + constructor() { + /** @type {string[]} */ + this.elements = []; + /** @type {Set} */ + this.fastElements = new Set(); + /** @type {?RegExp} */ + this.regexp = null; + } + /** + * @param {string} elem + */ + fastNormalize(elem) { + return elem.slice(0, -1); + } + update() { + const slowElements = this.elements.filter(elem => !this.fastElements.has(this.fastNormalize(elem))); + if (slowElements.length) { + this.regexp = new RegExp('^(' + slowElements.map(elem => '(?:' + elem + ')').join('|') + ')', 'i'); + } + } + /** + * @param {string[]} elems + */ + register(...elems) { + for (const elem of elems) { + this.elements.push(elem); + if (/^[^ ^$?|()[\]]+ $/.test(elem)) { + this.fastElements.add(this.fastNormalize(elem)); + } + } + this.update(); + } + /** + * @param {string} text + */ + test(text) { + const spaceIndex = text.indexOf(' '); + if (this.fastElements.has(spaceIndex >= 0 ? text.slice(0, spaceIndex) : text)) { + return true; + } + if (!this.regexp) return false; + return this.regexp.test(text); + } +} + +Chat.multiLinePattern = new PatternTester(); + +/********************************************************* + * Load command files + *********************************************************/ + +/** @type {ChatCommands} */ +// @ts-ignore +Chat.baseCommands = undefined; +/** @type {ChatCommands} */ +// @ts-ignore +Chat.commands = undefined; +/** @type {PageTable} */ +// @ts-ignore +Chat.basePages = undefined; +/** @type {PageTable} */ +// @ts-ignore +Chat.pages = undefined; +/** @type {(() => (void))[]} */ +Chat.destroyHandlers = []; + +/********************************************************* + * Load chat filters + *********************************************************/ +/**@type {ChatFilter[]} */ +Chat.filters = []; +/** + * @param {CommandContext} context + * @param {string} message + * @param {User} user + * @param {GameRoom | ChatRoom?} room + * @param {Connection} connection + * @param {User?} [targetUser] + * @return {string | false | null} + */ +Chat.filter = function (context, message, user, room, connection, targetUser = null) { + // Chat filters can choose to: + // 1. return false OR null - to not send a user's message + // 2. return an altered string - to alter a user's message + // 3. return undefined to send the original message through + const originalMessage = message; + for (const filter of Chat.filters) { + const output = filter.call(context, message, user, room, connection, targetUser, originalMessage); + if (!output && output !== undefined) return output; + if (output !== undefined) message = output; + } + + return message; +}; +/**@type {NameFilter[]} */ +Chat.namefilters = []; +/** + * @param {string} name + * @param {User} user + */ +Chat.namefilter = function (name, user) { + if (!Config.disablebasicnamefilter) { + // whitelist + // \u00A1-\u00BF\u00D7\u00F7 Latin punctuation/symbols + // \u02B9-\u0362 basic combining accents + // \u2012-\u2027\u2030-\u205E Latin punctuation/symbols extended + // \u2050-\u205F fractions extended + // \u2190-\u23FA\u2500-\u2BD1 misc symbols + // \u2E80-\u32FF CJK symbols + // \u3400-\u9FFF CJK + // \uF900-\uFAFF\uFE00-\uFE6F CJK extended + name = name.replace(/[^a-zA-Z0-9 /\\.~()<>^*%&=+$@#_'?!"\u00A1-\u00BF\u00D7\u00F7\u02B9-\u0362\u2012-\u2027\u2030-\u205E\u2050-\u205F\u2190-\u23FA\u2500-\u2BD1\u2E80-\u32FF\u3400-\u9FFF\uF900-\uFAFF\uFE00-\uFE6F-]+/g, ''); + + // blacklist + // \u00a1 upside-down exclamation mark (i) + // \u2580-\u2590 black bars + // \u25A0\u25Ac\u25AE\u25B0 black bars + // \u534d\u5350 swastika + // \u2a0d crossed integral (f) + name = name.replace(/[\u00a1\u2580-\u2590\u25A0\u25Ac\u25AE\u25B0\u2a0d\u534d\u5350]/g, ''); + + // e-mail address + if (name.includes('@') && name.includes('.')) return ''; + + // url + if (/[a-z0-9]\.(com|net|org)/.test(name)) name = name.replace(/\./g, ''); + + // Limit the amount of symbols allowed in usernames to 4 maximum, and disallow (R) and (C) from being used in the middle of names. + let nameSymbols = name.replace(/[^\u00A1-\u00BF\u00D7\u00F7\u02B9-\u0362\u2012-\u2027\u2030-\u205E\u2050-\u205F\u2090-\u23FA\u2500-\u2BD1]+/g, ''); + // \u00ae\u00a9 (R) (C) + if (nameSymbols.length > 4 || /[^a-z0-9][a-z0-9][^a-z0-9]/.test(name.toLowerCase() + ' ') || /[\u00ae\u00a9].*[a-zA-Z0-9]/.test(name)) name = name.replace(/[\u00A1-\u00BF\u00D7\u00F7\u02B9-\u0362\u2012-\u2027\u2030-\u205E\u2050-\u205F\u2190-\u23FA\u2500-\u2BD1\u2E80-\u32FF\u3400-\u9FFF\uF900-\uFAFF\uFE00-\uFE6F]+/g, '').replace(/[^A-Za-z0-9]{2,}/g, ' ').trim(); + } + name = name.replace(/^[^A-Za-z0-9]+/, ""); // remove symbols from start + + // cut name length down to 18 chars + if (/[A-Za-z0-9]/.test(name.slice(18))) { + name = name.replace(/[^A-Za-z0-9]+/g, ""); + } else { + name = name.slice(0, 18); + } + + name = Dex.getName(name); + for (const filter of Chat.namefilters) { + name = filter(name, user); + if (!name) return ''; + } + return name; +}; +/**@type {((host: string, user: User, connection: Connection) => void)[]} */ +Chat.hostfilters = []; +/** + * @param {string} host + * @param {User} user + * @param {Connection} connection + */ +Chat.hostfilter = function (host, user, connection) { + for (const filter of Chat.hostfilters) { + filter(host, user, connection); + } +}; +/**@type {((user: User, oldUser: User | null, usertype: string) => void)[]} */ +Chat.loginfilters = []; +/** + * @param {User} user + * @param {User?} oldUser + * @param {string} usertype + */ +Chat.loginfilter = function (user, oldUser, usertype) { + for (const filter of Chat.loginfilters) { + filter(user, oldUser, usertype); + } +}; + +/**@type {NameFilter[]} */ +Chat.nicknamefilters = []; +/** + * @param {string} nickname + * @param {User} user + */ +Chat.nicknamefilter = function (nickname, user) { + for (const filter of Chat.nicknamefilters) { + nickname = filter(nickname, user); + if (!nickname) return ''; + } + return nickname; +}; + +/********************************************************* + * Translations + *********************************************************/ + +Chat.languages = new Map(); +Chat.translations = new Map(); + +FS(TRANSLATION_DIRECTORY).readdir().then(files => { + for (let fname of files) { + if (!fname.endsWith('.json')) continue; + + /** + * @type {{name: string?, strings: {[k: string]: string}?}} content + */ + const content = require(`../${TRANSLATION_DIRECTORY}${fname}`); + const id = fname.slice(0, -5); + + Chat.languages.set(id, content.name || "Unknown Language"); + Chat.translations.set(id, new Map()); + + if (content.strings) { + for (const key in content.strings) { + /** @type {string[]} */ + const keyLabels = []; + /** @type {string[]} */ + const valLabels = []; + const newKey = key.replace(/\${.+?}/g, string => { + keyLabels.push(string); + return '${}'; + }).replace(/\[TN: ?.+?\]/g, ''); + const val = content.strings[key].replace(/\${.+?}/g, string => { + valLabels.push(string); + return '${}'; + }).replace(/\[TN: ?.+?\]/g, ''); + Chat.translations.get(id).set(newKey, [val, keyLabels, valLabels]); + } + } + } +}); + +/** + * @param {string?} language + * @param {TemplateStringsArray | string} strings + * @param {any[]} keys + */ +Chat.tr = function (language, strings, ...keys) { + if (!language) language = 'english'; + language = toId(language); + if (!Chat.translations.has(language)) throw new Error(`Trying to translate to a nonexistent language: ${language}`); + if (!strings.length) { + // @ts-ignore no this isn't any type + return (function (strings, ...keys) { + Chat.tr(language, strings, ...keys); + }); + } + + // If strings is an array (normally the case), combine before translating. + let string = Array.isArray(strings) ? strings.join('${}') : strings; + + const entry = Chat.translations.get(language).get(string); + let [translated, keyLabels, valLabels] = entry; + if (!translated) translated = string; + + // Replace the gaps in the template string + if (keys.length) { + let reconstructed = ''; + + const left = keyLabels.slice(); + for (let [i, str] of translated.split('${}').entries()) { + reconstructed += str; + if (keys[i]) { + let index = left.indexOf(valLabels[i]); + if (index < 0) { + // @ts-ignore why + index = left.findIndex(val => !!val); + } + if (index < 0) index = i; + reconstructed += keys[index]; + left[index] = null; + } + } + + translated = reconstructed; + } + return translated; +}; + +/********************************************************* + * Parser + *********************************************************/ + +class MessageContext { + /** + * @param {User} user + * @param {string?} [language] + */ + constructor(user, language = null) { + this.recursionDepth = 0; + + this.user = user; + this.language = language; + } + + /** + * @param {string} target + */ + splitOne(target) { + let commaIndex = target.indexOf(','); + if (commaIndex < 0) { + return [target.trim(), '']; + } + return [target.substr(0, commaIndex).trim(), target.substr(commaIndex + 1).trim()]; + } + /** + * @param {string} text + */ + meansYes(text) { + switch (text.toLowerCase().trim()) { + case 'on': case 'enable': case 'yes': case 'true': + return true; + } + return false; + } + /** + * @param {string} text + */ + meansNo(text) { + switch (text.toLowerCase().trim()) { + case 'off': case 'disable': case 'no': case 'false': + return true; + } + return false; + } + + /** + * @param {TemplateStringsArray | string} strings + * @param {any[]} keys + */ + tr(strings, ...keys) { + return Chat.tr(this.language, strings, ...keys); + } +} + +class PageContext extends MessageContext { + /** + * @param {{pageid: string, user: User, connection: Connection, language?: string}} options + */ + constructor(options) { + super(options.user, options.language); + + this.connection = options.connection; + this.room = Rooms('global'); + this.pageid = options.pageid; + + this.initialized = false; + this.title = 'Page'; + } + + /** + * @param {string} permission + * @param {string | User?} target + * @param {BasicChatRoom?} room + */ + can(permission, target = null, room = null) { + if (!this.user.can(permission, target, room)) { + this.send(`

    Permission denied.

    `); + return false; + } + return true; + } + + /** + * @param {string?} [pageid] + */ + extractRoom(pageid) { + if (!pageid) pageid = this.pageid; + let parts = pageid.split('-'); + + // Since we assume pageids are all in the form of view-pagename-roomid + // if someone is calling this function, so this is the only case we cover (for now) + const room = Rooms(parts[2]); + if (!room) { + this.send(`

    Invalid room.

    `); + return false; + } + + this.room = room; + return room.id; + } + + /** + * @param {string} content + */ + send(content) { + if (!content.startsWith('|deinit')) { + const roomid = this.room !== Rooms.global ? `[${this.room.id}] ` : ''; + if (!this.initialized) { + content = `|init|html\n|title|${roomid}${this.title}\n|pagehtml|${content}`; + this.initialized = true; + } else { + content = `|title|${roomid}${this.title}\n|pagehtml|${content}`; + } + } + this.connection.send(`>${this.pageid}\n${content}`); + } + + close() { + this.send('|deinit'); + } + + /** + * @param {string?} [pageid] + */ + async resolve(pageid) { + if (pageid) this.pageid = pageid; + + let parts = this.pageid.split('-'); + /** @type {any} */ + let handler = Chat.pages; + parts.shift(); + while (handler) { + if (typeof handler === 'function') { + let res = await handler.bind(this)(parts, this.user, this.connection); + if (typeof res === 'string') { + this.send(res); + res = undefined; + } + return res; + } + handler = handler[parts.shift() || 'default']; + } + } +} + +class CommandContext extends MessageContext { + /** + * @param {{message: string, room: Room, user: User, connection: Connection, pmTarget?: User, cmd?: string, cmdToken?: string, target?: string, fullCmd?: string}} options + */ + constructor(options) { + super(options.user, options.room && options.room.language ? options.room.language : options.user.language); + + this.message = options.message || ``; + + // message context + this.pmTarget = options.pmTarget; + this.room = options.room; + this.connection = options.connection; + + // command context + this.cmd = options.cmd || ''; + this.cmdToken = options.cmdToken || ''; + this.target = options.target || ``; + this.fullCmd = options.fullCmd || ''; + + // broadcast context + this.broadcasting = false; + this.broadcastToRoom = true; + + // target user + this.targetUser = null; + this.targetUsername = ""; + this.inputUsername = ""; + } + + /** + * @param {string} [msg] + * @return {any} + */ + parse(msg) { + if (typeof msg === 'string') { + // spawn subcontext + let subcontext = new CommandContext(this); + subcontext.recursionDepth++; + if (subcontext.recursionDepth > MAX_PARSE_RECURSION) { + throw new Error("Too much command recursion"); + } + subcontext.message = msg; + return subcontext.parse(); + } + /** @type {any} */ + let message = this.message; + + let commandHandler = this.splitCommand(message); + + if (typeof commandHandler === 'function') { + message = this.run(commandHandler); + } else { + if (commandHandler === '!') { + if (this.room === Rooms.global) { + return this.popupReply(`You tried use "${message}" as a global command, but it is not a global command.`); + } else if (this.room) { + return this.popupReply(`You tried to send "${message}" to the room "${this.room.id}" but it failed because you were not in that room.`); + } + return this.errorReply(`The command "${this.cmdToken}${this.fullCmd}" is unavailable in private messages. To send a message starting with "${this.cmdToken}${this.fullCmd}", type "${this.cmdToken}${this.cmdToken}${this.fullCmd}".`); + } + if (this.cmdToken) { + // To guard against command typos, show an error message + if (this.cmdToken === BROADCAST_TOKEN) { + if (/[a-z0-9]/.test(this.cmd.charAt(0))) { + return this.errorReply(`The command "${this.cmdToken}${this.fullCmd}" does not exist.`); + } + } else { + return this.errorReply(`The command "${this.cmdToken}${this.fullCmd}" does not exist. To send a message starting with "${this.cmdToken}${this.fullCmd}", type "${this.cmdToken}${this.cmdToken}${this.fullCmd}".`); + } + } else if (!VALID_COMMAND_TOKENS.includes(message.charAt(0)) && VALID_COMMAND_TOKENS.includes(message.trim().charAt(0))) { + message = message.trim(); + if (message.charAt(0) !== BROADCAST_TOKEN) { + message = message.charAt(0) + message; + } + } + + message = this.canTalk(message); + } + + // Output the message + + if (message && message !== true && typeof message.then !== 'function') { + if (this.pmTarget) { + Chat.sendPM(message, this.user, this.pmTarget); + } else { + this.room.add(`|c|${this.user.getIdentity(this.room.id)}|${message}`); + } + } + + if (this.room && this.room.game && this.room.game.onLogMessage) { + this.room.game.onLogMessage(message, this.user); + } + + this.update(); + + return message; + } + + /** + * @param {string} message + * @param {boolean} recursing + * @return {'!' | undefined | Function} + */ + splitCommand(message = this.message, recursing = false) { + this.cmd = ''; + this.cmdToken = ''; + this.target = ''; + if (!message || !message.trim().length) return; + + // hardcoded commands + if (message.startsWith(`>> `)) { + message = `/eval ${message.slice(3)}`; + } else if (message.startsWith(`>>> `)) { + message = `/evalbattle ${message.slice(4)}`; + } else if (message.startsWith(`/me`) && /[^A-Za-z0-9 ]/.test(message.charAt(3))) { + message = `/mee ${message.slice(3)}`; + } else if (message.startsWith(`/ME`) && /[^A-Za-z0-9 ]/.test(message.charAt(3))) { + message = `/MEE ${message.slice(3)}`; + } + + let cmdToken = message.charAt(0); + if (!VALID_COMMAND_TOKENS.includes(cmdToken)) return; + if (cmdToken === message.charAt(1)) return; + if (cmdToken === BROADCAST_TOKEN && /[^A-Za-z0-9]/.test(message.charAt(1))) return; + + let cmd = '', target = ''; + + let spaceIndex = message.indexOf(' '); + if (spaceIndex > 0) { + cmd = message.slice(1, spaceIndex).toLowerCase(); + target = message.slice(spaceIndex + 1); + } else { + cmd = message.slice(1).toLowerCase(); + target = ''; + } + + if (cmd.endsWith(',')) cmd = cmd.slice(0, -1); + + let curCommands = Chat.commands; + let commandHandler; + let fullCmd = cmd; + + do { + if (curCommands.hasOwnProperty(cmd)) { + commandHandler = curCommands[cmd]; + } else { + commandHandler = undefined; + } + if (typeof commandHandler === 'string') { + // in case someone messed up, don't loop + commandHandler = curCommands[commandHandler]; + } else if (Array.isArray(commandHandler) && !recursing) { + return this.splitCommand(cmdToken + 'help ' + fullCmd.slice(0, -4), true); + } + if (commandHandler && typeof commandHandler === 'object') { + let spaceIndex = target.indexOf(' '); + if (spaceIndex > 0) { + cmd = target.substr(0, spaceIndex).toLowerCase(); + target = target.substr(spaceIndex + 1); + } else { + cmd = target.toLowerCase(); + target = ''; + } + + fullCmd += ' ' + cmd; + // @ts-ignore + curCommands = commandHandler; + } + } while (commandHandler && typeof commandHandler === 'object'); + + if (!commandHandler && curCommands.default) { + commandHandler = curCommands.default; + if (typeof commandHandler === 'string') { + commandHandler = curCommands[commandHandler]; + } + } + + if (!commandHandler && !recursing) { + for (let g in Config.groups) { + let groupid = Config.groups[g].id; + if (fullCmd === groupid) { + return this.splitCommand(`/promote ${target}, ${g}`, true); + } else if (fullCmd === 'global' + groupid) { + return this.splitCommand(`/globalpromote ${target}, ${g}`, true); + } else if (fullCmd === 'de' + groupid || fullCmd === 'un' + groupid || fullCmd === 'globalde' + groupid || fullCmd === 'deglobal' + groupid) { + return this.splitCommand(`/demote ${target}`, true); + } else if (fullCmd === 'room' + groupid) { + return this.splitCommand(`/roompromote ${target}, ${g}`, true); + } else if (fullCmd === 'forceroom' + groupid) { + return this.splitCommand(`/roompromote !!!${target}, ${g}`, true); + } else if (fullCmd === 'roomde' + groupid || fullCmd === 'deroom' + groupid || fullCmd === 'roomun' + groupid) { + return this.splitCommand(`/roomdemote ${target}`, true); + } + } + } + + this.cmd = cmd; + this.cmdToken = cmdToken; + this.target = target; + this.fullCmd = fullCmd; + + const requireGlobalCommand = ( + this.pmTarget || + this.room === Rooms.global || + (this.room && !(this.user.userid in this.room.users)) + ); + + if (typeof commandHandler === 'function' && requireGlobalCommand) { + const baseCmd = typeof curCommands[cmd] === 'string' ? curCommands[cmd] : cmd; + if (!curCommands['!' + baseCmd]) { + return '!'; + } + } + + // @ts-ignore + return commandHandler; + } + /** + * @param {string | {call: Function}} commandHandler + */ + run(commandHandler) { + // @ts-ignore + if (typeof commandHandler === 'string') commandHandler = Chat.commands[commandHandler]; + let result; + try { + // @ts-ignore + result = commandHandler.call(this, this.target, this.room, this.user, this.connection, this.cmd, this.message); + } catch (err) { + Monitor.crashlog(err, 'A chat command', { + user: this.user.name, + room: this.room && this.room.id, + pmTarget: this.pmTarget && this.pmTarget.name, + message: this.message, + }); + this.sendReply(`|html|
    Pokemon Showdown crashed!
    Don't worry, we're working on fixing it.
    `); + } + if (result === undefined) result = false; + + return result; + } + + /** + * @param {BasicChatRoom | undefined?} room + * @param {User} user + * @param {string} message + */ + checkFormat(room, user, message) { + if (!room) return true; + if (!room.filterStretching && !room.filterCaps && !room.filterEmojis) return true; + if (user.can('bypassall')) return true; + + if (room.filterStretching && user.name.match(/(.+?)\1{5,}/i)) { + return this.errorReply(`Your username contains too much stretching, which this room doesn't allow.`); + } + if (room.filterCaps && user.name.match(/[A-Z\s]{6,}/)) { + return this.errorReply(`Your username contains too many capital letters, which this room doesn't allow.`); + } + if (room.filterEmojis && user.name.match(emojiRegex)) { + return this.errorReply(`Your username contains emojis, which this room doesn't allow.`); + } + // Removes extra spaces and null characters + message = message.trim().replace(/[ \u0000\u200B-\u200F]+/g, ' '); + + if (room.filterStretching && message.match(/(.+?)\1{7,}/i)) { + return this.errorReply(`Your message contains too much stretching, which this room doesn't allow.`); + } + if (room.filterCaps && message.match(/[A-Z\s]{18,}/)) { + return this.errorReply(`Your message contains too many capital letters, which this room doesn't allow.`); + } + if (room.filterEmojis && message.match(emojiRegex)) { + return this.errorReply(`Your message contains emojis, which this room doesn't allow.`); + } + + return true; + } + + /** + * @param {BasicChatRoom | undefined?} room + * @param {User} user + */ + checkSlowchat(room, user) { + if (!room || !room.slowchat) return true; + if (user.can('broadcast', null, room)) return true; + let lastActiveSeconds = (Date.now() - user.lastMessageTime) / 1000; + if (lastActiveSeconds < room.slowchat) return false; + return true; + } + + /** + * @param {BasicChatRoom | undefined?} room + * @param {string} message + * + * @return {boolean} + */ + checkBanwords(room, message) { + if (!room) return true; + if (!room.banwordRegex) { + if (room.banwords && room.banwords.length) { + room.banwordRegex = new RegExp('(?:\\b|(?!\\w))(?:' + room.banwords.join('|') + ')(?:\\b|\\B(?!\\w))', 'i'); + } else { + room.banwordRegex = true; + } + } + if (!message) return true; + if (room.banwordRegex !== true && room.banwordRegex.test(message)) { + return false; + } + return this.checkBanwords(/** @type {ChatRoom} */ (room.parent), message); + } + checkGameFilter() { + if (!this.room || !this.room.game || !this.room.game.onChatMessage) return false; + return this.room.game.onChatMessage(this.message, this.user); + } + /** + * @param {string} message + */ + pmTransform(message) { + if (!this.pmTarget && this.room !== Rooms.global) throw new Error(`Not a PM`); + const targetIdentity = this.pmTarget ? this.pmTarget.getIdentity() : '~'; + const prefix = `|pm|${this.user.getIdentity()}|${targetIdentity}|`; + return message.split('\n').map(message => { + if (message.startsWith('||')) { + return prefix + `/text ` + message.slice(2); + } else if (message.startsWith(`|html|`)) { + return prefix + `/raw ` + message.slice(6); + } else if (message.startsWith(`|raw|`)) { + return prefix + `/raw ` + message.slice(5); + } else if (message.startsWith(`|error|`)) { + return prefix + `/error ` + message.slice(7); + } else if (message.startsWith(`|c~|`)) { + return prefix + message.slice(4); + } else if (message.startsWith(`|c|~|/`)) { + return prefix + message.slice(5); + } + return prefix + `/text ` + message; + }).join(`\n`); + } + /** + * @param {string} data + */ + sendReply(data) { + if (this.broadcasting && this.broadcastToRoom) { + // broadcasting + this.add(data); + } else { + // not broadcasting + if (this.pmTarget || this.room === Rooms.global) { + data = this.pmTransform(data); + this.connection.send(data); + } else { + this.connection.sendTo(this.room, data); + } + } + } + /** + * @param {string} message + */ + errorReply(message) { + this.sendReply(`|error|` + message.replace(/\n/g, `\n|error|`)); + } + /** + * @param {string} html + */ + addBox(html) { + this.add(`|html|
    ${html}
    `); + } + /** + * @param {string} html + */ + sendReplyBox(html) { + this.sendReply(`|html|
    ${html}
    `); + } + /** + * @param {string} message + */ + popupReply(message) { + this.connection.popup(message); + } + /** + * @param {string} data + */ + add(data) { + if (this.pmTarget) { + data = this.pmTransform(data); + this.user.send(data); + if (this.pmTarget !== this.user) this.pmTarget.send(data); + return; + } + this.room.add(data); + } + /** + * @param {string} data + */ + send(data) { + if (this.pmTarget) { + data = this.pmTransform(data); + this.user.send(data); + if (this.pmTarget !== this.user) this.pmTarget.send(data); + return; + } + this.room.send(data); + } + /** + * @param {string} data + */ + sendModCommand(data) { + this.room.sendModsByUser(this.user, data); + } + + privateModCommand() { + throw new Error(`this.privateModCommand has been renamed to this.privateModAction, which no longer writes to modlog.`); + } + /** + * @param {string} msg + */ + privateModAction(msg) { + this.room.sendMods(msg); + this.roomlog(msg); + } + /** + * @param {string} action + * @param {string | User?} user + * @param {string} note + */ + globalModlog(action, user, note) { + let buf = `(${this.room.id}) ${action}: `; + if (user) { + if (typeof user === 'string') { + buf += `[${user}]`; + } else { + let userid = user.getLastId(); + buf += `[${userid}]`; + if (user.autoconfirmed && user.autoconfirmed !== userid) buf += ` ac:[${user.autoconfirmed}]`; + const alts = user.getAltUsers(false, true).slice(1).map(user => user.getLastId()).join('], ['); + if (alts.length) buf += ` alts:[${alts}]`; + buf += ` [${user.latestIp}]`; + } + } + buf += note; + + Rooms.global.modlog(buf); + this.room.modlog(buf); + } + /** + * @param {string} action + * @param {string | User?} [user] + * @param {string?} [note] + * @param {object} options + */ + modlog(action, user = null, note = null, options = {}) { + let buf = `(${this.room.id}) ${action}: `; + if (user) { + if (typeof user === 'string') { + buf += `[${toId(user)}]`; + } else { + let userid = user.getLastId(); + buf += `[${userid}]`; + if (!options.noalts) { + if (user.autoconfirmed && user.autoconfirmed !== userid) buf += ` ac:[${user.autoconfirmed}]`; + const alts = user.getAltUsers(false, true).slice(1).map(user => user.getLastId()).join('], ['); + if (alts.length) buf += ` alts:[${alts}]`; + } + if (!options.noip) buf += ` [${user.latestIp}]`; + } + } + buf += ` by ${this.user.userid}`; + if (note) buf += `: ${note}`; + + this.room.modlog(buf); + } + /** + * @param {string} data + */ + roomlog(data) { + if (this.pmTarget) return; + this.room.roomlog(data); + } + logEntry() { + throw new Error(`this.logEntry has been renamed to this.roomlog.`); + } + addModCommand() { + throw new Error(`this.addModCommand has been renamed to this.addModAction, which no longer writes to modlog.`); + } + /** + * @param {string} msg + */ + addModAction(msg) { + this.room.addByUser(this.user, msg); + } + update() { + if (this.room) this.room.update(); + } + /** + * @param {string} permission + * @param {string | User?} target + * @param {BasicChatRoom?} room + */ + can(permission, target = null, room = null) { + if (!this.user.can(permission, target, room)) { + this.errorReply(this.cmdToken + this.fullCmd + " - Access denied."); + return false; + } + return true; + } + /** + * @param {?boolean} ignoreCooldown + * @param {?string} suppressMessage + */ + canBroadcast(ignoreCooldown, suppressMessage) { + if (this.room instanceof Rooms.GlobalRoom) return false; + if (!this.broadcasting && this.cmdToken === BROADCAST_TOKEN) { + if (!this.pmTarget && !this.user.can('broadcast', null, this.room)) { + this.errorReply("You need to be voiced to broadcast this command's information."); + this.errorReply("To see it for yourself, use: /" + this.message.substr(1)); + return false; + } + + // broadcast cooldown + const broadcastMessage = (suppressMessage || this.message).toLowerCase().replace(/[^a-z0-9\s!,]/g, ''); + + if (!ignoreCooldown && this.room && this.room.lastBroadcast === broadcastMessage && + this.room.lastBroadcastTime >= Date.now() - BROADCAST_COOLDOWN && + !this.user.can('bypassall')) { + this.errorReply("You can't broadcast this because it was just broadcasted."); + return false; + } + + const message = this.canTalk(suppressMessage || this.message); + if (!message) return false; + + this.message = /** @type {string} */ (message); + this.broadcastMessage = broadcastMessage; + } + return true; + } + /** + * @param {boolean} [ignoreCooldown = false] + * @param {?string} [suppressMessage = null] + */ + runBroadcast(ignoreCooldown = false, suppressMessage = null) { + if (this.broadcasting || this.cmdToken !== BROADCAST_TOKEN) { + // Already being broadcast, or the user doesn't intend to broadcast. + return true; + } + + if (!this.broadcastMessage) { + // Permission hasn't been checked yet. Do it now. + if (!this.canBroadcast(ignoreCooldown, suppressMessage)) return false; + } + + this.broadcasting = true; + + if (this.pmTarget) { + this.sendReply('|c~|' + (suppressMessage || this.message)); + } else { + this.sendReply('|c|' + this.user.getIdentity(this.room.id) + '|' + (suppressMessage || this.message)); + } + if (!ignoreCooldown && !this.pmTarget) { + // @ts-ignore this.broadcastMessage is initialized above in this.canBroadcast, or we don't get this far + this.room.lastBroadcast = this.broadcastMessage; + this.room.lastBroadcastTime = Date.now(); + } + + return true; + } + /** + * @param {string?} message + * @param {GameRoom | ChatRoom?} room + * @param {User?} targetUser + */ + canTalk(message = null, room = null, targetUser = null) { + if (!targetUser && this.pmTarget) { + targetUser = this.pmTarget; + } + if (targetUser) { + room = null; + } else if (!room) { + if (this.room.id === 'global') { + this.connection.popup(`Your message could not be sent:\n\n${message}\n\nIt needs to be sent to a user or room.`); + return false; + } + // @ts-ignore + room = this.room; + } + let user = this.user; + let connection = this.connection; + + if (!user.named) { + connection.popup(`You must choose a name before you can talk.`); + return false; + } + if (!user.can('bypassall')) { + let lockType = (user.namelocked ? `namelocked` : user.locked ? `locked` : ``); + let lockExpiration = Punishments.checkLockExpiration(user.namelocked || user.locked); + if (room) { + if (lockType && !room.isHelp) { + this.errorReply(`You are ${lockType} and can't talk in chat. ${lockExpiration}`); + this.sendReply(`|html|Get help with this`); + return false; + } + if (room.isMuted(user)) { + this.errorReply(`You are muted and cannot talk in this room.`); + return false; + } + if (room.modchat && !user.authAtLeast(room.modchat, room)) { + if (room.modchat === 'autoconfirmed') { + this.errorReply(`Because moderated chat is set, your account must be at least one week old and you must have won at least one ladder game to speak in this room.`); + return false; + } + if (room.modchat === 'trusted') { + this.errorReply(`Because moderated chat is set, your account must be staff in a public room or have a global rank to speak in this room.`); + return false; + } + const groupName = Config.groups[room.modchat] && Config.groups[room.modchat].name || room.modchat; + this.errorReply(`Because moderated chat is set, you must be of rank ${groupName} or higher to speak in this room.`); + return false; + } + if (!(user.userid in room.users)) { + connection.popup(`You can't send a message to this room without being in it.`); + return false; + } + } + if (targetUser) { + if (lockType && !targetUser.can('lock')) { + this.errorReply(`You are ${lockType} and can only private message members of the global moderation team. ${lockExpiration}`); + return this.sendReply(`|html|Get help with this`); + } + if (targetUser.locked && !user.can('lock')) { + return this.errorReply(`The user "${targetUser.name}" is locked and cannot be PMed.`); + } + if (Config.pmmodchat && !user.authAtLeast(Config.pmmodchat) && !targetUser.canPromote(user.group, Config.pmmodchat)) { + let groupName = Config.groups[Config.pmmodchat] && Config.groups[Config.pmmodchat].name || Config.pmmodchat; + return this.errorReply(`On this server, you must be of rank ${groupName} or higher to PM users.`); + } + if (targetUser.ignorePMs && targetUser.ignorePMs !== user.group && !user.can('lock')) { + if (!targetUser.can('lock')) { + return this.errorReply(`This user is blocking private messages right now.`); + } else { + this.errorReply(`This ${Config.groups[targetUser.group].name} is too busy to answer private messages right now. Please contact a different staff member.`); + return this.sendReply(`|html|If you need help, try opening a help ticket`); + } + } + if (user.ignorePMs && user.ignorePMs !== targetUser.group && !targetUser.can('lock')) { + return this.errorReply(`You are blocking private messages right now.`); + } + } + } + + if (typeof message !== 'string') return true; + + if (!message) { + connection.popup("Your message can't be blank."); + return false; + } + let length = message.length; + length += 10 * message.replace(/[^\ufdfd]*/g, '').length; + if (length > MAX_MESSAGE_LENGTH && !user.can('ignorelimits')) { + this.errorReply("Your message is too long: " + message); + return false; + } + + // remove zalgo + message = message.replace(/[\u0300-\u036f\u0483-\u0489\u0610-\u0615\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06ED\u0E31\u0E34-\u0E3A\u0E47-\u0E4E]{3,}/g, ''); + if (/[\u115f\u1160\u239b-\u23b9]/.test(message)) { + this.errorReply("Your message contains banned characters."); + return false; + } + + // If the corresponding config option is set, non-AC users cannot send links, except to staff. + if (Config.restrictLinks && !user.autoconfirmed) { + const links = message.match(Chat.linkRegex); + const allLinksWhitelisted = !links || links.every(link => { + link = link.toLowerCase(); + const domainMatches = /^(?:http:\/\/|https:\/\/)?(?:[^/]*\.)?([^/.]*\.[^/.]*)\.?($|\/|:)/.exec(link); + const domain = domainMatches && domainMatches[1]; + const hostMatches = /^(?:http:\/\/|https:\/\/)?([^/]*[^/.])\.?($|\/|:)/.exec(link); + let host = hostMatches && hostMatches[1]; + if (host && host.startsWith('www.')) host = host.slice(4); + if (!domain || !host) return false; + return LINK_WHITELIST.includes(host) || LINK_WHITELIST.includes(`*.${domain}`); + }); + if (!allLinksWhitelisted && !(targetUser && targetUser.can('lock'))) { + this.errorReply("Your account must be autoconfirmed to send links to other users, except for global staff."); + return false; + } + } + + if (!this.checkFormat(room, user, message)) { + return false; + } + + if (!this.checkSlowchat(room, user)) { + // @ts-ignore ~ The truthiness of room and room.slowchat are evaluated in checkSlowchat + this.errorReply(`This room has slow-chat enabled. You can only talk once every ${room.slowchat} seconds.`); + return false; + } + + if (!this.checkBanwords(room, user.name) && !user.can('bypassall')) { + this.errorReply(`Your username contains a phrase banned by this room.`); + return false; + } + if (!this.checkBanwords(room, message) && !user.can('mute', null, room)) { + this.errorReply("Your message contained banned words in this room."); + return false; + } + + let gameFilter = this.checkGameFilter(); + if (gameFilter && !user.can('bypassall')) { + this.errorReply(gameFilter); + return false; + } + + if (room) { + let normalized = message.trim(); + if (!user.can('bypassall') && (room.id === 'lobby' || room.id === 'help') && (normalized === user.lastMessage) && + ((Date.now() - user.lastMessageTime) < MESSAGE_COOLDOWN)) { + this.errorReply("You can't send the same message again so soon."); + return false; + } + user.lastMessage = message; + user.lastMessageTime = Date.now(); + } + + if (room && room.highTraffic && toId(message).replace(/[^a-z]+/, '').length < 2 && !user.can('broadcast', null, room)) { + this.errorReply('Due to this room being a high traffic room, your message must contain at least two letters.'); + return false; + } + + if (Chat.filters.length) { + return Chat.filter(this, message, user, room, connection, targetUser); + } + + return message; + } + /** + * @param {string} uri + * @param {boolean} isRelative + */ + canEmbedURI(uri, isRelative = false) { + if (uri.startsWith('https://')) return uri; + if (uri.startsWith('//')) return uri; + if (uri.startsWith('data:')) return uri; + if (!uri.startsWith('http://')) { + if (/^[a-z]+:\/\//.test(uri) || isRelative) { + this.errorReply("URIs must begin with 'https://' or 'http://' or 'data:'"); + return null; + } + } else { + uri = uri.slice(7); + } + let slashIndex = uri.indexOf('/'); + let domain = (slashIndex >= 0 ? uri.slice(0, slashIndex) : uri); + + // heuristic that works for all the domains we care about + let secondLastDotIndex = domain.lastIndexOf('.', domain.length - 5); + if (secondLastDotIndex >= 0) domain = domain.slice(secondLastDotIndex + 1); + + let approvedDomains = { + 'imgur.com': 1, + 'gyazo.com': 1, + 'puu.sh': 1, + 'rotmgtool.com': 1, + 'pokemonshowdown.com': 1, + 'nocookie.net': 1, + 'blogspot.com': 1, + 'imageshack.us': 1, + 'deviantart.net': 1, + 'd.pr': 1, + 'pokefans.net': 1, + }; + if (domain in approvedDomains) { + return '//' + uri; + } + if (domain === 'bit.ly') { + this.errorReply("Please don't use URL shorteners."); + return null; + } + // unknown URI, allow HTTP to be safe + return 'http://' + uri; + } + /** + * @param {?string} html + */ + canHTML(html) { + html = ('' + (html || '')).trim(); + if (!html) return ''; + let images = /]*/ig; + let match; + while ((match = images.exec(html))) { + if (this.room.isPersonal && !this.user.can('announce')) { + this.errorReply("Images are not allowed in personal rooms."); + return null; + } + if (!/width=([0-9]+|"[0-9]+")/i.test(match[0]) || !/height=([0-9]+|"[0-9]+")/i.test(match[0])) { + // Width and height are required because most browsers insert the + // element before width and height are known, and when the + // image is loaded, this changes the height of the chat area, which + // messes up autoscrolling. + this.errorReply('All images must have a width and height attribute'); + return null; + } + let srcMatch = /src\s*=\s*"?([^ "]+)(\s*")?/i.exec(match[0]); + if (srcMatch) { + let uri = this.canEmbedURI(srcMatch[1], true); + if (!uri) return null; + html = html.slice(0, match.index + srcMatch.index) + 'src="' + uri + '"' + html.slice(match.index + srcMatch.index + srcMatch[0].length); + // lastIndex is inaccurate since html was changed + images.lastIndex = match.index + 11; + } + } + if ((this.room.isPersonal || this.room.isPrivate === true) && !this.user.can('lock') && html.replace(/\s*style\s*=\s*"?[^"]*"\s*>/g, '>').match(/]/)) { + this.errorReply('You do not have permission to use scripted buttons in HTML.'); + this.errorReply('If you just want to link to a room, you can do this: '); + return null; + } + if (/>here.? without an opening tag."); + return null; + } + if (tag.substr(2) !== stack.pop()) { + this.errorReply("Missing or it's in the wrong place."); + return null; + } + } else { + stack.push(tag.substr(1)); + } + } + if (stack.length) { + this.errorReply("Missing ."); + return null; + } + } + + return html; + } + /** + * @param {string} target + * @param {boolean} exactName + */ + targetUserOrSelf(target, exactName) { + if (!target) { + this.targetUsername = this.user.name; + this.inputUsername = this.user.name; + return this.user; + } + this.splitTarget(target, exactName); + return this.targetUser; + } + + /** + * Given a message in the form "USERNAME" or "USERNAME, MORE", splits + * it apart: + * + * - `this.targetUser` will be the User corresponding to USERNAME + * (or null, if not found) + * + * - `this.inputUsername` will be the text of USERNAME, unmodified + * + * - `this.targetUsername` will be the username, if found, or + * this.inputUsername otherwise + * + * - and the text of MORE will be returned (empty string, if the + * message has no comma) + * + * @param {string} target + * @param {boolean} [exactName] + */ + splitTarget(target, exactName = false) { + let [name, rest] = this.splitOne(target); + + this.targetUser = Users.get(name, exactName); + this.inputUsername = name.trim(); + this.targetUsername = this.targetUser ? this.targetUser.name : this.inputUsername; + return rest; + } +} +Chat.MessageContext = MessageContext; +Chat.PageContext = PageContext; +Chat.CommandContext = CommandContext; + +/** + * Command parser + * + * Usage: + * Chat.parse(message, room, user, connection) + * + * Parses the message. If it's a command, the command is executed, if + * not, it's displayed directly in the room. + * + * Examples: + * Chat.parse("/join lobby", room, user, connection) + * will make the user join the lobby. + * + * Chat.parse("Hi, guys!", room, user, connection) + * will return "Hi, guys!" if the user isn't muted, or + * if he's muted, will warn him that he's muted. + * + * The return value is the return value of the command handler, if any, + * or the message, if there wasn't a command. This value could be a success + * or failure (few commands report these) or a Promise for when the command + * is done executing, if it's not currently done. + * + * @param {string} message - the message the user is trying to say + * @param {Room} room - the room the user is trying to say it in + * @param {User} user - the user that sent the message + * @param {Connection} connection - the connection the user sent the message from + */ +Chat.parse = function (message, room, user, connection) { + Chat.loadPlugins(); + let context = new CommandContext({message, room, user, connection}); + + return context.parse(); +}; +/** + * @param {string} message + * @param {User} user + * @param {User} pmTarget + * @param {?User} onlyRecipient + */ +Chat.sendPM = function (message, user, pmTarget, onlyRecipient = null) { + let buf = `|pm|${user.getIdentity()}|${pmTarget.getIdentity()}|${message}`; + if (onlyRecipient) return onlyRecipient.send(buf); + user.send(buf); + if (pmTarget !== user) pmTarget.send(buf); + pmTarget.lastPM = user.userid; + user.lastPM = pmTarget.userid; +}; + +Chat.package = {}; + +/** + * @param {string} root + */ +Chat.uncacheTree = function (root) { + let uncache = [require.resolve('../' + root)]; + do { + /** @type {string[]} */ + let newuncache = []; + for (const target of uncache) { + if (require.cache[target]) { + /** @type {{id: string}[]} cachedModule */ + let children = require.cache[target].children; + newuncache.push( + ...(children + .filter(cachedModule => !cachedModule.id.endsWith('.node')) + .map(cachedModule => cachedModule.id)) + ); + delete require.cache[target]; + } + } + uncache = newuncache; + } while (uncache.length > 0); +}; + +/** + * @param {string} root + */ +Chat.uncacheDir = function (root) { + const absoluteRoot = FS(root).path; + for (const key in require.cache) { + if (key.startsWith(absoluteRoot)) { + delete require.cache[key]; + } + } +}; + +/** + * @param {string} path + */ +Chat.uncache = function (path) { + const absolutePath = require.resolve('../' + path); + delete require.cache[absolutePath]; +}; + +Chat.loadPlugins = function () { + if (Chat.commands) return; + + FS('package.json').readIfExists().then(data => { + if (data) Chat.package = JSON.parse(data); + }); + + // prevent TypeScript from resolving + const baseCommands = './chat-commands'; + Chat.baseCommands = require(baseCommands).commands; + Chat.basePages = require(baseCommands).pages; + let commands = Chat.commands = Object.assign({}, Chat.baseCommands); + let pages = Chat.pages = Object.assign({}, Chat.basePages); + + if (Config.chatfilter) Chat.filters.push(Config.chatfilter); + if (Config.namefilter) Chat.namefilters.push(Config.namefilter); + if (Config.hostfilter) Chat.hostfilters.push(Config.hostfilter); + if (Config.loginfilter) Chat.loginfilters.push(Config.loginfilter); + if (Config.nicknamefilter) Chat.nicknamefilters.push(Config.nicknamefilter); + + // Install plug-in commands and chat filters + + // info always goes first so other plugins can shadow it + let files = FS('server/chat-plugins/').readdirSync(); + files = files.filter(file => file !== 'info.js'); + files.unshift('info.js'); + + for (const file of files) { + if (file.substr(-3) !== '.js') continue; + const plugin = require(`./chat-plugins/${file}`); + + Object.assign(commands, plugin.commands); + Object.assign(pages, plugin.pages); + + if (plugin.destroy) Chat.destroyHandlers.push(plugin.destroy); + + if (plugin.chatfilter) Chat.filters.push(plugin.chatfilter); + if (plugin.namefilter) Chat.namefilters.push(plugin.namefilter); + if (plugin.hostfilter) Chat.hostfilters.push(plugin.hostfilter); + if (plugin.loginfilter) Chat.loginfilters.push(plugin.loginfilter); + if (plugin.nicknamefilter) Chat.nicknamefilters.push(plugin.nicknamefilter); + } +}; + +Chat.destroy = function () { + for (const handler of Chat.destroyHandlers) { + handler(); + } +}; + +/** + * Escapes HTML in a string. + * + * @param {string} str + * @return {string} + */ +Chat.escapeHTML = function (str) { + if (!str) return ''; + return ('' + str).replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g, '/'); +}; + +/** + * Strips HTML from a string. + * + * @param {string} html + * @return {string} + */ +Chat.stripHTML = function (html) { + if (!html) return ''; + return html.replace(/<[^>]*>/g, ''); +}; + +/** + * Template string tag function for escaping HTML + * + * @param {TemplateStringsArray} strings + * @param {...any} args + * @return {string} + */ +Chat.html = function (strings, ...args) { + let buf = strings[0]; + let i = 0; + while (i < args.length) { + buf += Chat.escapeHTML(args[i]); + buf += strings[++i]; + } + return buf; +}; + +/** + * Returns singular (defaulting to '') if num is 1, or plural + * (defaulting to 's') otherwise. Helper function for pluralizing + * words. + * + * @param {any} num + * @param {string} plural + * @param {string} singular + * @return {string} + */ +Chat.plural = function (num, plural = 's', singular = '') { + if (num && typeof num.length === 'number') { + num = num.length; + } else if (num && typeof num.size === 'number') { + num = num.size; + } else { + num = Number(num); + } + return (num !== 1 ? plural : singular); +}; + +/** + * Counts the thing passed. + * + * Chat.count(2, "days") === "2 days" + * Chat.count(1, "days") === "1 day" + * Chat.count(["foo"], "things are") === "1 thing is" + * + * @param {any} num + * @param {string} singular + * @param {string} plural + * @return {string} + */ +Chat.count = function (num, plural, singular = "") { + if (num && typeof num.length === 'number') { + num = num.length; + } else if (num && typeof num.size === 'number') { + num = num.size; + } else { + num = Number(num); + } + if (!singular) { + if (plural.endsWith("s")) { + singular = plural.slice(0, -1); + } else if (plural.endsWith("s have")) { + singular = plural.slice(0, -6) + " has"; + } else if (plural.endsWith("s were")) { + singular = plural.slice(0, -6) + " was"; + } + } + const space = singular.startsWith('<') ? '' : ' '; + return `${num}${space}${num > 1 ? plural : singular}`; +}; + +/** + * Like string.split(delimiter), but only recognizes the first `limit` + * delimiters (default 1). + * + * `"1 2 3 4".split(" ", 2) => ["1", "2"]` + * + * `Chat.splitFirst("1 2 3 4", " ", 1) => ["1", "2 3 4"]` + * + * Returns an array of length exactly limit + 1. + * + * @param {string} str + * @param {string} delimiter + * @param {number} [limit] + */ +Chat.splitFirst = function (str, delimiter, limit = 1) { + let splitStr = /** @type {string[]} */ ([]); + while (splitStr.length < limit) { + let delimiterIndex = str.indexOf(delimiter); + if (delimiterIndex >= 0) { + splitStr.push(str.slice(0, delimiterIndex)); + str = str.slice(delimiterIndex + delimiter.length); + } else { + splitStr.push(str); + str = ''; + } + } + splitStr.push(str); + return splitStr; +}; + +/** + * Returns a timestamp in the form {yyyy}-{MM}-{dd} {hh}:{mm}:{ss}. + * + * options.human = true will reports hours human-readable + * + * @param {Date} date + * @param {AnyObject} options + * @return {string} + */ +Chat.toTimestamp = function (date, options = {}) { + const human = options && options.human; + /** @type {any[]} */ + let parts = [date.getFullYear(), date.getMonth() + 1, date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()]; + if (human) { + parts.push(parts[3] >= 12 ? 'pm' : 'am'); + parts[3] = parts[3] % 12 || 12; + } + parts = parts.map(val => val < 10 ? '0' + val : '' + val); + return parts.slice(0, 3).join("-") + " " + parts.slice(3, human ? 5 : 6).join(":") + (human ? "" + parts[6] : ""); +}; + +/** + * Takes a number of milliseconds, and reports the duration in English: hours, minutes, etc. + * + * options.hhmmss = true will instead report the duration in 00:00:00 format + * + * @param {number} number + * @param {AnyObject} options + * @return {string} + */ +Chat.toDurationString = function (number, options = {}) { + // TODO: replace by Intl.DurationFormat or equivalent when it becomes available (ECMA-402) + // https://github.com/tc39/ecma402/issues/47 + const date = new Date(+number); + const parts = [date.getUTCFullYear() - 1970, date.getUTCMonth(), date.getUTCDate() - 1, date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()]; + const roundingBoundaries = [6, 15, 12, 30, 30]; + const unitNames = ["second", "minute", "hour", "day", "month", "year"]; + const positiveIndex = parts.findIndex(elem => elem > 0); + const precision = (options && options.precision ? options.precision : parts.length); + if (options && options.hhmmss) { + let string = parts.slice(positiveIndex).map(value => value < 10 ? "0" + value : "" + value).join(":"); + return string.length === 2 ? "00:" + string : string; + } + // round least significant displayed unit + if (positiveIndex + precision < parts.length && precision > 0 && positiveIndex >= 0) { + if (parts[positiveIndex + precision] >= roundingBoundaries[positiveIndex + precision - 1]) { + parts[positiveIndex + precision - 1]++; + } + } + return parts.slice(positiveIndex).reverse().map((value, index) => value ? value + " " + unitNames[index] + (value > 1 ? "s" : "") : "").reverse().slice(0, precision).join(" ").trim(); +}; + +/** + * Takes an array and turns it into a sentence string by adding commas and the word 'and' at the end + * + * @param {array} array + * @return {string} + */ +Chat.toListString = function (array) { + if (!array.length) return ''; + if (array.length === 1) return array[0]; + return `${array.slice(0, -1).join(", ")} and ${array.slice(-1)}`; +}; +/** + * @param {Template} template + * @param {number} gen + */ +Chat.getDataPokemonHTML = function (template, gen = 7, tier = '') { + if (typeof template === 'string') template = Object.assign({}, Dex.getTemplate(template)); + let buf = '
  • '; + buf += '' + (tier || template.tier) + ' '; + buf += ` `; + buf += '' + template.species + ' '; + buf += ''; + if (template.types) { + for (const type of template.types) { + buf += `${type}`; + } + } + buf += ' '; + if (gen >= 3) { + buf += ''; + if (template.abilities['1'] && (gen >= 4 || Dex.getAbility(template.abilities['1']).gen === 3)) { + buf += '' + template.abilities['0'] + '
    ' + template.abilities['1'] + '
    '; + } else { + buf += '' + template.abilities['0'] + ''; + } + if (template.abilities['H'] && template.abilities['S']) { + buf += '' + template.abilities['H'] + '
    (' + template.abilities['S'] + ')
    '; + } else if (template.abilities['H']) { + buf += '' + template.abilities['H'] + ''; + } else if (template.abilities['S']) { + // special case for Zygarde + buf += '(' + template.abilities['S'] + ')'; + } else { + buf += ''; + } + buf += '
    '; + } + let bst = 0; + for (let i in template.baseStats) { + // @ts-ignore + bst += template.baseStats[i]; + } + buf += ''; + buf += 'HP
    ' + template.baseStats.hp + '
    '; + buf += 'Atk
    ' + template.baseStats.atk + '
    '; + buf += 'Def
    ' + template.baseStats.def + '
    '; + if (gen <= 1) { + bst -= template.baseStats.spd; + buf += 'Spc
    ' + template.baseStats.spa + '
    '; + } else { + buf += 'SpA
    ' + template.baseStats.spa + '
    '; + buf += 'SpD
    ' + template.baseStats.spd + '
    '; + } + buf += 'Spe
    ' + template.baseStats.spe + '
    '; + buf += 'BST
    ' + bst + '
    '; + buf += '
    '; + buf += '
  • '; + return `
      ${buf}
    `; +}; +/** + * @param {Move} move + */ +Chat.getDataMoveHTML = function (move) { + if (typeof move === 'string') move = Object.assign({}, Dex.getMove(move)); + let buf = `
    • `; + buf += `${move.name} `; + // encoding is important for the ??? type icon + const encodedMoveType = encodeURIComponent(move.type); + buf += `${move.type}`; + buf += `${move.category} `; + if (move.basePower) buf += `Power
      ${typeof move.basePower === 'number' ? move.basePower : '—'}
      `; + buf += `Accuracy
      ${typeof move.accuracy === 'number' ? (move.accuracy + '%') : '—'}
      `; + const basePP = move.pp || 1; + const pp = Math.floor(move.noPPBoosts ? basePP : basePP * 8 / 5); + buf += `PP
      ${pp}
      `; + buf += `${move.shortDesc || move.desc} `; + buf += `
    `; + return buf; +}; +/** + * @param {Ability} ability + */ +Chat.getDataAbilityHTML = function (ability) { + if (typeof ability === 'string') ability = Object.assign({}, Dex.getAbility(ability)); + let buf = `
    • `; + buf += `${ability.name} `; + buf += `${ability.shortDesc || ability.desc} `; + buf += `
    `; + return buf; +}; +/** + * @param {string | Item} item + */ +Chat.getDataItemHTML = function (item) { + if (typeof item === 'string') item = Object.assign({}, Dex.getItem(item)); + let buf = `
    • `; + buf += ` ${item.name} `; + buf += `${item.shortDesc || item.desc} `; + buf += `
    `; + return buf; +}; + +/** + * Visualizes eval output in a slightly more readable form + * @param {any} value + * @return {string} + */ +Chat.stringify = function (value, depth = 0) { + if (value === undefined) return `undefined`; + if (value === null) return `null`; + if (typeof value === 'number' || typeof value === 'boolean') { + return `${value}`; + } + if (typeof value === 'string') { + return `"${value}"`; // NOT ESCAPED + } + if (typeof value === 'symbol') { + return value.toString(); + } + if (Array.isArray(value)) { + if (depth > 10) return `[array]`; + return `[` + value.map(elem => Chat.stringify(elem, depth + 1)).join(`, `) + `]`; + } + if (value instanceof RegExp || value instanceof Date || value instanceof Function) { + if (depth && value instanceof Function) return `Function`; + return `${value}`; + } + let constructor = ''; + if (value.constructor && value.constructor.name && typeof value.constructor.name === 'string') { + constructor = value.constructor.name; + if (constructor === 'Object') constructor = ''; + } else { + constructor = 'null'; + } + if (value.toString) { + try { + const stringValue = value.toString(); + if (typeof stringValue === 'string' && stringValue !== '[object Object]' && stringValue !== `[object ${constructor}]`) { + return `${constructor}(${stringValue})`; + } + } catch (e) {} + } + let buf = ''; + for (let key in value) { + if (!Object.prototype.hasOwnProperty.call(value, key)) continue; + if (depth > 2 || (depth && constructor)) { + buf = '...'; + break; + } + if (buf) buf += `, `; + let displayedKey = key; + if (!/^[A-Za-z0-9_$]+$/.test(key)) displayedKey = JSON.stringify(key); + buf += `${displayedKey}: ` + Chat.stringify(value[key], depth + 1); + } + if (constructor && !buf && constructor !== 'null') return constructor; + return `${constructor}{${buf}}`; +}; + +Chat.formatText = require('./chat-formatter').formatText; +Chat.linkRegex = require('./chat-formatter').linkRegex; +Chat.updateServerLock = false; + +/** + * Gets the dimension of the image at url. Returns 0x0 if the image isn't found, as well as the relevant error. + * @param {string} url + * @return {Promise} + */ +Chat.getImageDimensions = function (url) { + return new Promise(resolve => { + probe(url).then(dimensions => resolve(dimensions), (err) => resolve({height: 0, width: 0, err: err})); + }); +}; + +/** + * Generates dimensions to fit an image at url into a maximum size of maxWidth x maxHeight, + * preserving aspect ratio. + * @param {string} url + * @param {number} [maxHeight] + * @param {number} [maxWidth] + * @return {Promise<[number, number]>} + */ +Chat.fitImage = async function (url, maxHeight = 300, maxWidth = 300) { + let {height, width} = await Chat.getImageDimensions(url); + + if (width <= maxWidth && height <= maxHeight) return [width, height]; + + let ratio; + if (height * (maxWidth / maxHeight) > width) { + ratio = maxHeight / height; + } else { + ratio = maxWidth / width; + } + + return [Math.round(width * ratio), Math.round(height * ratio)]; +}; + +/** + * Used by ChatMonitor. + * @typedef {[(string | RegExp), string, string?, number]} FilterWord + * @typedef {(this: CommandContext, line: FilterWord, room: ChatRoom | GameRoom?, user: User, message: string, lcMessage: string, isStaff: boolean) => (string | false | undefined)} MonitorHandler + * @typedef {{location: string, punishment: string, label: string, condition?: string, monitor?: MonitorHandler}} Monitor + */ + +/** @type {{[k: string]: FilterWord[]}} */ +Chat.filterWords = {}; +/** @type {{[k: string]: Monitor}} */ +Chat.monitors = {}; +/** @type {Map} */ +Chat.namefilterwhitelist = new Map(); + +/** + * @param {string} id + * @param {Monitor} entry + */ +Chat.registerMonitor = function (id, entry) { + if (!Chat.filterWords[id]) Chat.filterWords[id] = []; + Chat.monitors[id] = entry; +}; + +/** + * @param {string} pageid + * @param {User} user + * @param {Connection} connection + */ +Chat.resolvePage = function (pageid, user, connection) { + return (new PageContext({pageid: pageid, user: user, connection: connection})).resolve(); +}; diff --git a/dnsbl.js b/server/dnsbl.js similarity index 88% rename from dnsbl.js rename to server/dnsbl.js index f9bdb3e7fd7d0..a884e0b8ae7b1 100644 --- a/dnsbl.js +++ b/server/dnsbl.js @@ -19,7 +19,8 @@ const BLOCKLISTS = ['sbl.spamhaus.org', 'rbl.efnetrbl.org']; const dns = require('dns'); -const FS = require('./fs'); +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; let Dnsbl = module.exports; @@ -57,8 +58,10 @@ function queryDnsblLoop(ip, callback, reversedIpDot, index) { * Dnsbl.query(ip, callback) * * Calls callback(blocklist), where blocklist is the blocklist domain - * if the passed IP is in a blocklist, or boolean false if the IP is - * not in any blocklist. + * if the passed IP is in a blocklist, or null if the IP is not in + * any blocklist. + * + * Return value matches isBlocked when treated as a boolean. * * @param {string} ip * @return {Promise} @@ -82,11 +85,17 @@ Dnsbl.query = function queryDnsbl(ip) { * @return {number} */ Dnsbl.ipToNumber = function (ip) { + if (ip.includes(':') && !ip.includes('.')) { + // IPv6 + return -1; + } + if (ip.startsWith('::ffff:')) ip = ip.slice(7); + else if (ip.startsWith('::')) ip = ip.slice(2); let num = 0; let parts = ip.split('.'); - for (let i = 0, len = parts.length; i < len; i++) { + for (const part of parts) { num *= 256; - num += parseInt(parts[i]); + num += parseInt(part); } return num; }; @@ -144,7 +153,7 @@ Dnsbl.cidrToPattern = function (cidr) { if (!pattern) return []; return [pattern]; } - // $FlowFixMe: flow doesn't understand filter + // @ts-ignore return cidr.map(Dnsbl.getCidrPattern).filter(x => x); }; /** @@ -160,7 +169,7 @@ Dnsbl.rangeToPattern = function (range) { if (!pattern) return []; return [pattern]; } - // $FlowFixMe: flow doesn't understand filter + // @ts-ignore return range.map(Dnsbl.getRangePattern).filter(x => x); }; /** @@ -169,8 +178,7 @@ Dnsbl.rangeToPattern = function (range) { * @return {boolean} */ Dnsbl.checkPattern = function (patterns, num) { - for (let i = 0; i < patterns.length; ++i) { - let pattern = patterns[i]; + for (const pattern of patterns) { if (num >= pattern[0] && num <= pattern[1]) { return true; } @@ -189,10 +197,12 @@ Dnsbl.checkPattern = function (patterns, num) { Dnsbl.checker = function (ranges) { if (!ranges || !ranges.length) return () => false; /** @type {[number, number][]} */ - let patterns; + let patterns = []; if (typeof ranges === 'string') { - patterns = [Dnsbl.getPattern(ranges)]; + let rangePatterns = Dnsbl.getPattern(ranges); + if (rangePatterns) patterns = [rangePatterns]; } else { + // @ts-ignore patterns = ranges.map(Dnsbl.getPattern).filter(x => x); } return ip => Dnsbl.checkPattern(patterns, Dnsbl.ipToNumber(ip)); @@ -215,14 +225,17 @@ Dnsbl.urlToHost = function (url) { return url; }; +/**@type {[number, number, string][]} */ Dnsbl.datacenters = []; Dnsbl.loadDatacenters = async function () { - const data = await FS('config/datacenters.csv').readTextIfExists(); + const data = await FS('config/datacenters.csv').readIfExists(); const rows = data.split('\n'); + /**@type {[number, number, string][]} */ let datacenters = []; for (const row of rows) { if (!row) continue; const rowSplit = row.split(','); + /**@type {[number, number, string]} */ const rowData = [ Dnsbl.ipToNumber(rowSplit[0]), Dnsbl.ipToNumber(rowSplit[1]), @@ -238,7 +251,7 @@ let rangeCenet = Dnsbl.cidrToPattern('27.111.64.0/21'); let rangeQlded = Dnsbl.cidrToPattern('203.104.0.0/20'); let rangeCathednet = Dnsbl.cidrToPattern('180.95.40.0/21'); let rangeTelefonica = Dnsbl.cidrToPattern('181.64.0.0/14'); -let rangeStarhub = Dnsbl.cidrToPattern(['27.125.128.0/18', '101.127.0.0/17', '116.88.0.0/17', '122.11.192.0/18', '182.19.128.0/17', '182.55.0.0/16', '183.90.0.0/17', '203.116.122.0/23']); +let rangeStarhub = Dnsbl.cidrToPattern(['27.125.128.0/18', '58.96.192.0/18', '101.127.0.0/17', '116.88.0.0/17', '122.11.192.0/18', '182.19.128.0/17', '182.55.0.0/16', '183.90.0.0/17', '203.116.122.0/23']); let rangeTelstra = Dnsbl.cidrToPattern('101.160.0.0/11'); let rangeOVHres = Dnsbl.rangeToPattern(['109.190.0.0 - 109.190.63.255', '109.190.64.0 - 109.190.127.255', '109.190.128.0 - 109.190.191.255', '109.190.192.0 - 109.190.255.255', '151.80.228.0 - 151.80.228.255', '178.32.37.0 - 178.32.37.255', '178.33.101.0 - 178.33.101.255', '185.15.68.0 - 185.15.69.255', '185.15.70.0 - 185.15.71.255']); @@ -262,7 +275,7 @@ Dnsbl.reverse = function reverseDns(ip) { resolve('ovh.fr.res-nohost'); return; } - for (let row of Dnsbl.datacenters) { + for (const row of Dnsbl.datacenters) { if (ipNumber >= row[0] && ipNumber <= row[1]) { resolve(row[2] + '.proxy-nohost'); return; @@ -316,6 +329,10 @@ Dnsbl.reverse = function reverseDns(ip) { resolve('illinois.net.res-nohost'); return; } + if (ip.startsWith('147.129.')) { + resolve('ithaca.edu.res-nohost'); + return; + } if (ip.startsWith('189.204.')) { resolve('bestel.com.mx.res-nohost'); return; @@ -336,6 +353,10 @@ Dnsbl.reverse = function reverseDns(ip) { resolve('anchorfree.proxy-nohost'); return; } + if (ip === '127.0.0.1') { + resolve('localhost'); + return; + } dns.reverse(ip, (err, hosts) => { if (err) { resolve('' + ip.split('.').slice(0, 2).join('.') + '.unknown-nohost'); diff --git a/app.js b/server/index.js similarity index 72% rename from app.js rename to server/index.js index a4f21af5cab82..86aed133ee05d 100644 --- a/app.js +++ b/server/index.js @@ -20,7 +20,7 @@ * rooms.js. There's also a global room which every user is in, and * handles miscellaneous things like welcoming the user. * - * Dex - from sim/dex.js + * Dex - from .sim-dist/dex.js * * Handles getting data about Pokemon, items, etc. * @@ -37,50 +37,49 @@ * Used to abstract out network connections. sockets.js handles * the actual server and connection set-up. * - * @license MIT license + * @license MIT */ 'use strict'; -const FS = require('./fs'); +// NOTE: This file intentionally doesn't use too many modern JavaScript +// features, so that it doesn't crash old versions of Node.js, so we +// can successfully print the "We require Node.js 8+" message. // Check for version and dependencies try { // I've gotten enough reports by people who don't use the launch // script that this is worth repeating here - eval('{ let a = async () => {}; }'); + RegExp("\\p{Emoji}", "u"); } catch (e) { - throw new Error("We require Node.js version 8 or later; you're using " + process.version); + throw new Error("We require Node.js version 10 or later; you're using " + process.version); } try { - require.resolve('sockjs'); + require.resolve('../.sim-dist/index'); } catch (e) { - throw new Error("Dependencies are unmet; run node pokemon-showdown before launching Pokemon Showdown again."); + throw new Error("Dependencies are unmet; run `node build` before launching Pokemon Showdown again."); } +const FS = require('../.lib-dist/fs').FS; + /********************************************************* * Load configuration *********************************************************/ -try { - require.resolve('./config/config'); -} catch (err) { - if (err.code !== 'MODULE_NOT_FOUND') throw err; // should never happen - throw new Error('config.js does not exist; run node pokemon-showdown to set up the default config file before launching Pokemon Showdown again.'); -} +global.Config = require('../config/config'); -global.Config = require('./config/config'); +global.Monitor = require('./monitor'); if (Config.watchconfig) { - let configPath = require.resolve('./config/config'); + let configPath = require.resolve('../config/config'); FS(configPath).onModify(() => { try { delete require.cache[configPath]; - global.Config = require('./config/config'); + global.Config = require('../config/config'); if (global.Users) Users.cacheGroupData(); - console.log('Reloaded config/config.js'); + Monitor.notice('Reloaded ../config/config.js'); } catch (e) { - console.error(`Error reloading config/config.js: ${e.stack}`); + Monitor.adminlog("Error reloading ../config/config.js: " + e.stack); } }); } @@ -89,21 +88,19 @@ if (Config.watchconfig) { * Set up most of our globals *********************************************************/ -global.Monitor = require('./monitor'); - -global.Dex = require('./sim/dex'); +global.Dex = require('../.sim-dist/dex'); global.toId = Dex.getId; global.LoginServer = require('./loginserver'); -global.Ladders = require(Config.remoteladder ? './ladders-remote' : './ladders'); +global.Ladders = require('./ladders'); + +global.Chat = require('./chat'); global.Users = require('./users'); global.Punishments = require('./punishments'); -global.Chat = require('./chat'); - global.Rooms = require('./rooms'); global.Verifier = require('./verifier'); @@ -117,15 +114,10 @@ Dnsbl.loadDatacenters(); if (Config.crashguard) { // graceful crash - allow current battles to finish before restarting process.on('uncaughtException', err => { - let crashType = require('./crashlogger')(err, 'The main process'); - if (crashType === 'lockdown') { - Rooms.global.startLockdown(err); - } else { - Rooms.global.reportCrash(err); - } + Monitor.crashlog(err, 'The main process'); }); process.on('unhandledRejection', err => { - throw err; + Monitor.crashlog(err, 'A main process Promise'); }); } @@ -152,11 +144,11 @@ if (require.main === module) { * Set up our last global *********************************************************/ -global.TeamValidator = require('./team-validator'); -TeamValidator.PM.spawn(); +global.TeamValidatorAsync = require('./team-validator-async'); +TeamValidatorAsync.PM.spawn(); /********************************************************* * Start up the REPL server *********************************************************/ -require('./repl').start('app', cmd => eval(cmd)); +require('../.lib-dist/repl').Repl.start('app', cmd => eval(cmd)); diff --git a/server/ladders-local.js b/server/ladders-local.js new file mode 100644 index 0000000000000..f52df9414cfdd --- /dev/null +++ b/server/ladders-local.js @@ -0,0 +1,347 @@ +/** + * Ladder library + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This file handles ladders for all servers other than + * play.pokemonshowdown.com. + * + * Specifically, this is the file that handles calculating and keeping + * track of players' Elo ratings for all formats. + * + * Matchmaking is currently still implemented in rooms.js. + * + * @license MIT license + */ + +'use strict'; + +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; + +// ladderCaches = {formatid: ladder OR Promise(ladder)} +// Use Ladders(formatid).ladder to guarantee a Promise(ladder). +// ladder is basically a 2D array representing the corresponding ladder.tsv +// with userid in front +/** @typedef {[string, number, string, number, number, number, string]} LadderRow [userid, elo, username, w, l, t, lastUpdate] */ +/** @type {Map>} formatid: ladder */ +let ladderCaches = new Map(); + +class LadderStore { + /** + * @param {string} formatid + */ + constructor(formatid) { + this.formatid = formatid; + /** @type {LadderRow[]?} */ + this.ladder = null; + /** @type {Promise?} */ + this.ladderPromise = null; + } + + /** + * @return {Promise} + */ + getLadder() { + if (!this.ladderPromise) this.ladderPromise = this.load(); + return this.ladderPromise; + } + /** + * Internal function, returns a Promise for a ladder + * @return {Promise} + */ + async load() { + // ladderCaches[formatid] + const cachedLadder = ladderCaches.get(this.formatid); + if (cachedLadder) { + // @ts-ignore + if (cachedLadder.then) { + let ladder = await cachedLadder; + return (this.ladder = ladder); + } + // @ts-ignore + return (this.ladder = cachedLadder); + } + try { + const data = await FS('config/ladders/' + this.formatid + '.tsv').readIfExists(); + let ladder = /** @type {LadderRow[]} */ ([]); + for (const dataLine of data.split('\n')) { + let line = dataLine.trim(); + if (!line) continue; + let row = line.split('\t'); + ladder.push([toId(row[1]), Number(row[0]), row[1], Number(row[2]), Number(row[3]), Number(row[4]), row[5]]); + } + // console.log('Ladders(' + this.formatid + ') loaded tsv: ' + JSON.stringify(this.ladder)); + ladderCaches.set(this.formatid, (this.ladder = ladder)); + return this.ladder; + } catch (err) { + // console.log('Ladders(' + this.formatid + ') err loading tsv: ' + JSON.stringify(this.ladder)); + } + ladderCaches.set(this.formatid, (this.ladder = [])); + return this.ladder; + } + + /** + * Saves the ladder in config/ladders/[formatid].tsv + * + * Called automatically by updateRating, so you don't need to manually + * call this. + */ + async save() { + if (this.saving) return; + this.saving = true; + const ladder = await this.getLadder(); + if (!ladder.length) { + this.saving = false; + return; + } + let stream = FS(`config/ladders/${this.formatid}.tsv`).createWriteStream(); + stream.write('Elo\tUsername\tW\tL\tT\tLast update\r\n'); + for (const row of ladder) { + stream.write(row.slice(1).join('\t') + '\r\n'); + } + stream.end(); + this.saving = false; + } + + /** + * Gets the index of a user in the ladder array. + * + * If createIfNeeded is true, the user will be created and added to + * the ladder array if it doesn't already exist. + * @param {string} username + */ + indexOfUser(username, createIfNeeded = false) { + if (!this.ladder) throw new Error(`Must be called with ladder loaded`); + let userid = toId(username); + for (const [i, user] of this.ladder.entries()) { + if (user[0] === userid) return i; + } + if (createIfNeeded) { + let index = this.ladder.length; + this.ladder.push([userid, 1000, username, 0, 0, 0, '']); + return index; + } + return -1; + } + + /** + * Returns [formatid, html], where html is an the HTML source of a + * ladder toplist, to be displayed directly in the ladder tab of the + * client. + * @return {Promise<[string, string]?>} + */ + async getTop() { + let formatid = this.formatid; + let name = Dex.getFormat(formatid).name; + const ladder = await this.getLadder(); + let buf = `

    ${name} Top 100

    `; + buf += ``; + buf += ``; + for (const [i, row] of ladder.entries()) { + buf += ``; + } + return [formatid, buf]; + } + + /** + * Returns a Promise for the Elo rating of a user + * @param {string} userid + * @return {Promise} + */ + async getRating(userid) { + let formatid = this.formatid; + let user = Users.getExact(userid); + if (user && user.mmrCache[formatid]) { + return user.mmrCache[formatid]; + } + const ladder = await this.getLadder(); + let index = this.indexOfUser(userid); + let rating = 1000; + if (index >= 0) { + rating = ladder[index][1]; + } + if (user && user.userid === userid) { + user.mmrCache[formatid] = rating; + } + return rating; + } + + /** + * Internal method. Update the Elo rating of a user. + * @param {LadderRow} row + * @param {number} score + * @param {number} foeElo + */ + updateRow(row, score, foeElo) { + let elo = row[1]; + + // The K factor determines how much your Elo changes when you win or + // lose games. Larger K means more change. + // In the "original" Elo, K is constant, but it's common for K to + // get smaller as your rating goes up + let K = 50; + + // dynamic K-scaling (optional) + if (elo < 1200) { + if (score < 0.5) { + K = 10 + (elo - 1000) * 40 / 200; + } else if (score > 0.5) { + K = 90 - (elo - 1000) * 40 / 200; + } + } else if (elo > 1350 && elo <= 1600) { + K = 40; + } else { + K = 32; + } + + // main Elo formula + let E = 1 / (1 + Math.pow(10, (foeElo - elo) / 400)); + elo += K * (score - E); + + if (elo < 1000) elo = 1000; + + row[1] = elo; + if (score > 0.6) { + row[3]++; // win + } else if (score < 0.4) { + row[4]++; // loss + } else { + row[5]++; // tie + } + row[6] = '' + new Date(); + } + + /** + * Update the Elo rating for two players after a battle, and display + * the results in the passed room. + * @param {string} p1name + * @param {string} p2name + * @param {number} p1score + * @param {GameRoom} room + */ + async updateRating(p1name, p2name, p1score, room) { + if (Ladders.disabled) { + room.addRaw(`Ratings not updated. The ladders are currently disabled.`).update(); + return [p1score, null, null]; + } + + let formatid = this.formatid; + let p2score = 1 - p1score; + if (p1score < 0) { + p1score = 0; + p2score = 0; + } + const ladder = await this.getLadder(); + let p1newElo, p2newElo; + try { + let p1index = this.indexOfUser(p1name, true); + let p1elo = ladder[p1index][1]; + + let p2index = this.indexOfUser(p2name, true); + let p2elo = ladder[p2index][1]; + + this.updateRow(ladder[p1index], p1score, p2elo); + this.updateRow(ladder[p2index], p2score, p1elo); + + p1newElo = ladder[p1index][1]; + p2newElo = ladder[p2index][1]; + + // console.log('L: ' + ladder.map(r => ''+Math.round(r[1])+' '+r[2]).join('\n')); + + // move p1 to its new location + let newIndex = p1index; + while (newIndex > 0 && ladder[newIndex - 1][1] <= p1newElo) newIndex--; + while (newIndex === p1index || (ladder[newIndex] && ladder[newIndex][1] > p1newElo)) newIndex++; + // console.log('ni='+newIndex+', p1i='+p1index); + if (newIndex !== p1index && newIndex !== p1index + 1) { + let row = ladder.splice(p1index, 1)[0]; + // adjust for removed row + if (newIndex > p1index) newIndex--; + if (p2index > p1index) p2index--; + + ladder.splice(newIndex, 0, row); + // adjust for inserted row + if (p2index >= newIndex) p2index++; + } + + // move p2 + newIndex = p2index; + while (newIndex > 0 && ladder[newIndex - 1][1] <= p2newElo) newIndex--; + while (newIndex === p2index || (ladder[newIndex] && ladder[newIndex][1] > p2newElo)) newIndex++; + // console.log('ni='+newIndex+', p2i='+p2index); + if (newIndex !== p2index && newIndex !== p2index + 1) { + let row = ladder.splice(p2index, 1)[0]; + // adjust for removed row + if (newIndex > p2index) newIndex--; + + ladder.splice(newIndex, 0, row); + } + + let p1 = Users.getExact(p1name); + if (p1) p1.mmrCache[formatid] = +p1newElo; + let p2 = Users.getExact(p2name); + if (p2) p2.mmrCache[formatid] = +p2newElo; + this.save(); + + if (!room.battle) { + Monitor.warn(`room expired before ladder update was received`); + return [p1score, null, null]; + } + + let reasons = '' + (Math.round(p1newElo) - Math.round(p1elo)) + ' for ' + (p1score > 0.9 ? 'winning' : (p1score < 0.1 ? 'losing' : 'tying')); + if (reasons.charAt(0) !== '-') reasons = '+' + reasons; + room.addRaw(Chat.html`${p1name}'s rating: ${Math.round(p1elo)} → ${Math.round(p1newElo)}
    (${reasons})`); + + reasons = '' + (Math.round(p2newElo) - Math.round(p2elo)) + ' for ' + (p2score > 0.9 ? 'winning' : (p2score < 0.1 ? 'losing' : 'tying')); + if (reasons.charAt(0) !== '-') reasons = '+' + reasons; + room.addRaw(Chat.html`${p2name}'s rating: ${Math.round(p2elo)} → ${Math.round(p2newElo)}
    (${reasons})`); + + room.update(); + } catch (e) { + if (!room.battle) return [p1score, null, null]; + room.addRaw(`There was an error calculating rating changes:`); + room.add(e.stack); + room.update(); + } + + return [p1score, p1newElo, p2newElo]; + } + + /** + * Returns a promise for a
    with all ratings for the current format. + * @param {string} username + */ + async visualize(username) { + const ladder = await this.getLadder(); + let index = this.indexOfUser(username, false); + + if (index < 0) return ''; + + let ratings = ladder[index]; + + let output = ``; + return `${output}`; + } + + /** + * Returns a Promise for an array of strings of s for ladder ratings of the user + * @param {string} username + * @return {Promise} + */ + static visualizeAll(username) { + let ratings = []; + for (let i in Dex.formats) { + if (Dex.formats[i].searchShow) { + ratings.push(new LadderStore(i).visualize(username)); + } + } + return Promise.all(ratings); + } +} + +LadderStore.formatsListPrefix = '|,LL'; +LadderStore.ladderCaches = ladderCaches; + +module.exports = LadderStore; diff --git a/server/ladders-remote.js b/server/ladders-remote.js new file mode 100644 index 0000000000000..7f53614d4b650 --- /dev/null +++ b/server/ladders-remote.js @@ -0,0 +1,157 @@ +/** + * Main server ladder library + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This file handles ladders for the main server on + * play.pokemonshowdown.com. + * + * Ladders for all other servers is handled by ladders.js. + * + * Matchmaking is currently still implemented in rooms.js. + * + * @license MIT license + */ + +'use strict'; + +class LadderStore { + /** + * @param {string} formatid + */ + constructor(formatid) { + this.formatid = formatid; + } + + /** + * Returns [formatid, html], where html is an the HTML source of a + * ladder toplist, to be displayed directly in the ladder tab of the + * client. + * @return {Promise<[string, string]?>} + */ + async getTop() { + return null; + } + + /** + * Returns a Promise for the Elo rating of a user + * @param {string} userid + * @return {Promise} + */ + async getRating(userid) { + let formatid = this.formatid; + let user = Users.getExact(userid); + if (user && user.mmrCache[formatid]) { + return user.mmrCache[formatid]; + } + const [data] = await LoginServer.request('mmr', { + format: formatid, + user: userid, + }); + let mmr = NaN; + if (data && !data.errorip) { + mmr = Number(data); + } + if (isNaN(mmr)) return 1000; + + if (user && user.userid === userid) { + user.mmrCache[formatid] = mmr; + } + return mmr; + } + + /** + * Update the Elo rating for two players after a battle, and display + * the results in the passed room. + * @param {string} p1name + * @param {string} p2name + * @param {number} p1score + * @param {GameRoom} room + * @return {Promise<[number, AnyObject?, AnyObject?]>} + */ + async updateRating(p1name, p2name, p1score, room) { + if (Ladders.disabled) { + room.addRaw(`Ratings not updated. The ladders are currently disabled.`).update(); + return [p1score, null, null]; + } + + let formatid = this.formatid; + room.update(); + room.send(`||Ladder updating...`); + let [data, , error] = await LoginServer.request('ladderupdate', { + p1: p1name, + p2: p2name, + score: p1score, + format: formatid, + }); + if (error) { + if (error.message === 'stream interrupt') { + room.add(`||Ladder updated, but score could not be retrieved.`); + } else { + room.add(`||Ladder (probably) updated, but score could not be retrieved (${error.message}).`); + } + return [p1score, null, null]; + } + if (!room.battle) { + Monitor.warn(`room expired before ladder update was received`); + return [p1score, null, null]; + } + if (!data) { + room.add(`|error|Unexpected response ${data} from ladder server.`); + room.update(); + return [p1score, null, null]; + } + if (data.errorip) { + room.add(`|error|This server's request IP ${data.errorip} is not a registered server.`); + room.add(`|error|You should be using ladders.js and not ladders-remote.js for ladder tracking.`); + room.update(); + return [p1score, null, null]; + } + + let p1rating, p2rating; + try { + p1rating = data.p1rating; + p2rating = data.p2rating; + + let oldelo = Math.round(p1rating.oldelo); + let elo = Math.round(p1rating.elo); + let act = (p1score > 0.9 ? `winning` : (p1score < 0.1 ? `losing` : `tying`)); + let reasons = `${elo - oldelo} for ${act}`; + if (reasons.charAt(0) !== '-') reasons = '+' + reasons; + room.addRaw(Chat.html`${p1name}'s rating: ${oldelo} → ${elo}
    (${reasons})`); + let minElo = elo; + + oldelo = Math.round(p2rating.oldelo); + elo = Math.round(p2rating.elo); + act = (p1score > 0.9 || p1score < 0 ? `losing` : (p1score < 0.1 ? `winning` : `tying`)); + reasons = `${elo - oldelo} for ${act}`; + if (reasons.charAt(0) !== '-') reasons = '+' + reasons; + room.addRaw(Chat.html`${p2name}'s rating: ${oldelo} → ${elo}
    (${reasons})`); + if (elo < minElo) minElo = elo; + room.rated = minElo; + + let p1 = Users.getExact(p1name); + if (p1) p1.mmrCache[formatid] = +p1rating.elo; + let p2 = Users.getExact(p2name); + if (p2) p2.mmrCache[formatid] = +p2rating.elo; + room.update(); + } catch (e) { + room.addRaw(`There was an error calculating rating changes.`); + room.update(); + } + + return [p1score, p1rating, p2rating]; + } + + /** + * Returns a Promise for an array of strings of
    s for ladder ratings of the user + * @param {string} username + * @return {Promise} + */ + static async visualizeAll(username) { + return [``]; + } +} + +LadderStore.formatsListPrefix = ''; + +module.exports = LadderStore; diff --git a/server/ladders.js b/server/ladders.js new file mode 100644 index 0000000000000..8f7aab652d4ba --- /dev/null +++ b/server/ladders.js @@ -0,0 +1,686 @@ +/** + * Matchmaker + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This keeps track of challenges to battle made between users, setting up + * matches between users looking for a battle, and starting new battles. + * + * @License MIT License + */ + +'use strict'; + +/** @type {typeof LadderStoreT} */ +const LadderStore = require(typeof Config === 'object' && Config.remoteladder ? './ladders-remote' : './ladders-local'); + +const SECONDS = 1000; +const PERIODIC_MATCH_INTERVAL = 60 * SECONDS; + +/** + * This represents a user's search for a battle under a format. + */ +class BattleReady { + /** + * @param {string} userid + * @param {string} formatid + * @param {string} team + * @param {number} [rating = 1000] + */ + constructor(userid, formatid, team, rating = 0) { + /** @type {string} */ + this.userid = userid; + /** @type {string} */ + this.formatid = formatid; + /** @type {string} */ + this.team = team; + /** @type {number} */ + this.rating = rating; + /** @type {number} */ + this.time = Date.now(); + } +} + +/** + * formatid:userid:BattleReady + * @type {Map>} + */ +const searches = new Map(); + +class Challenge { + /** + * @param {BattleReady} ready + * @param {string} to + */ + constructor(ready, to) { + this.from = ready.userid; + this.to = to; + this.formatid = ready.formatid; + this.ready = ready; + } +} +/** + * formatid:userid:BattleReady + * @type {Map} + */ +const challenges = new Map(); + +/** + * This keeps track of searches for battles, creating a new battle for a newly + * added search if a valid match can be made, otherwise periodically + * attempting to make a match with looser restrictions until one can be made. + */ +class Ladder extends LadderStore { + /** + * @param {string} formatid + */ + constructor(formatid) { + super(formatid); + } + + /** + * @param {Connection} connection + * @param {string?} team + * @return {Promise} + */ + async prepBattle(connection, team = null, isRated = false) { + // all validation for a battle goes through here + const user = connection.user; + const userid = user.userid; + if (team === null) team = user.team; + + if (Rooms.global.lockdown && Rooms.global.lockdown !== 'pre') { + let message = `The server is restarting. Battles will be available again in a few minutes.`; + if (Rooms.global.lockdown === 'ddos') { + message = `The server is under attack. Battles cannot be started at this time.`; + } + connection.popup(message); + return null; + } + if (Punishments.isBattleBanned(user)) { + connection.popup(`You are barred from starting any new games until your battle ban expires.`); + return null; + } + let gameCount = user.games.size; + if (Monitor.countConcurrentBattle(gameCount, connection)) { + return null; + } + if (Monitor.countPrepBattle(connection.ip, connection)) { + return null; + } + + try { + // @ts-ignore TypeScript bug: self-reference + this.formatid = Dex.validateFormat(this.formatid); + } catch (e) { + connection.popup(`Your selected format is invalid:\n\n- ${e.message}`); + return null; + } + + const regex = /(?:^|])([^|]*)\|/g; + let match = regex.exec(team); + while (match) { + let nickname = match[1]; + if (nickname) { + nickname = Chat.nicknamefilter(nickname, user); + if (!nickname || nickname !== match[1]) { + connection.popup( + `Your team was rejected for the following reason:\n\n` + + `- Your Pokémon has a banned nickname: ${match[1]}` + ); + return null; + } + } + match = regex.exec(team); + } + + let rating = 0, valResult; + if (isRated && !Ladders.disabled) { + let userid = user.userid; + [valResult, rating] = await Promise.all([ + TeamValidatorAsync(this.formatid).validateTeam(team, !!(user.locked || user.namelocked)), + this.getRating(userid), + ]); + if (userid !== user.userid) { + // User feedback for renames handled elsewhere. + return null; + } + if (!rating) rating = 1; + } else { + if (Ladders.disabled) { + connection.popup(`The ladder is temporarily disabled due to technical difficulties - you will not receive ladder rating for this game.`); + rating = 1; + } + valResult = await TeamValidatorAsync(this.formatid).validateTeam(team, !!(user.locked || user.namelocked)); + } + + if (valResult.charAt(0) !== '1') { + connection.popup( + `Your team was rejected for the following reasons:\n\n` + + `- ` + valResult.slice(1).replace(/\n/g, `\n- `) + ); + return null; + } + + return new BattleReady(userid, this.formatid, valResult.slice(1), rating); + } + + /** + * @param {User} user + */ + static cancelChallenging(user) { + const chall = Ladder.getChallenging(user.userid); + if (chall) { + Ladder.removeChallenge(chall); + return true; + } + return false; + } + /** + * @param {User} user + * @param {User} targetUsername + */ + static rejectChallenge(user, targetUsername) { + const targetUserid = toId(targetUsername); + const chall = Ladder.getChallenging(targetUserid); + if (chall && chall.to === user.userid) { + Ladder.removeChallenge(chall); + return true; + } + return false; + } + /** + * @param {string} username + */ + static clearChallenges(username) { + const userid = toId(username); + const userChalls = Ladders.challenges.get(userid); + if (userChalls) { + for (const chall of userChalls.slice()) { + let otherUserid; + if (chall.from === userid) { + otherUserid = chall.to; + } else { + otherUserid = chall.from; + } + Ladder.removeChallenge(chall, true); + const otherUser = Users(otherUserid); + if (otherUser) Ladder.updateChallenges(otherUser); + } + const user = Users(userid); + if (user) Ladder.updateChallenges(user); + return true; + } + return false; + } + /** + * @param {Connection} connection + * @param {User} targetUser + */ + async makeChallenge(connection, targetUser) { + const user = connection.user; + if (targetUser === user) { + connection.popup(`You can't battle yourself. The best you can do is open PS in Private Browsing (or another browser) and log into a different username, and battle that username.`); + return false; + } + if (Ladder.getChallenging(user.userid)) { + connection.popup(`You are already challenging someone. Cancel that challenge before challenging someone else.`); + return false; + } + if (targetUser.blockChallenges && !user.can('bypassblocks', targetUser)) { + connection.popup(`The user '${targetUser.name}' is not accepting challenges right now.`); + return false; + } + if (Date.now() < user.lastChallenge + 10 * SECONDS) { + // 10 seconds ago, probable misclick + connection.popup(`You challenged less than 10 seconds after your last challenge! It's cancelled in case it's a misclick.`); + return false; + } + const ready = await this.prepBattle(connection); + if (!ready) return false; + Ladder.addChallenge(new Challenge(ready, targetUser.userid)); + user.lastChallenge = Date.now(); + return true; + } + /** + * @param {Connection} connection + * @param {User} targetUser + */ + static async acceptChallenge(connection, targetUser) { + const chall = Ladder.getChallenging(targetUser.userid); + if (!chall || chall.to !== connection.user.userid) { + connection.popup(`${targetUser.userid} is not challenging you. Maybe they cancelled before you accepted?`); + return false; + } + const ladder = Ladders(chall.formatid); + const ready = await ladder.prepBattle(connection); + if (!ready) return false; + if (Ladder.removeChallenge(chall)) { + Ladders.match(chall.ready, ready); + } + return true; + } + + /** + * @param {string} userid + */ + static getChallenging(userid) { + const userChalls = Ladders.challenges.get(userid); + if (userChalls) { + for (const chall of userChalls) { + if (chall.from === userid) return chall; + } + } + return null; + } + /** + * @param {Challenge} challenge + */ + static addChallenge(challenge, skipUpdate = false) { + let challs1 = Ladders.challenges.get(challenge.from); + if (!challs1) Ladders.challenges.set(challenge.from, challs1 = []); + let challs2 = Ladders.challenges.get(challenge.to); + if (!challs2) Ladders.challenges.set(challenge.to, challs2 = []); + challs1.push(challenge); + challs2.push(challenge); + if (!skipUpdate) { + const fromUser = Users(challenge.from); + if (fromUser) Ladder.updateChallenges(fromUser); + const toUser = Users(challenge.to); + if (toUser) Ladder.updateChallenges(toUser); + } + } + /** + * @param {Challenge} challenge + */ + static removeChallenge(challenge, skipUpdate = false) { + const fromChalls = /** @type {Challenge[]} */ (Ladders.challenges.get(challenge.from)); + // the challenge may have been cancelled + if (!fromChalls) return false; + const fromIndex = fromChalls.indexOf(challenge); + if (fromIndex < 0) return false; + fromChalls.splice(fromIndex, 1); + if (!fromChalls.length) Ladders.challenges.delete(challenge.from); + const toChalls = /** @type {Challenge[]} */ (Ladders.challenges.get(challenge.to)); + toChalls.splice(toChalls.indexOf(challenge), 1); + if (!toChalls.length) Ladders.challenges.delete(challenge.to); + if (!skipUpdate) { + const fromUser = Users(challenge.from); + if (fromUser) Ladder.updateChallenges(fromUser); + const toUser = Users(challenge.to); + if (toUser) Ladder.updateChallenges(toUser); + } + return true; + } + /** + * @param {User} user + * @param {Connection?} connection + */ + static updateChallenges(user, connection = null) { + if (!user.connected) return; + let challengeTo = null; + /**@type {{[k: string]: string}} */ + let challengesFrom = {}; + const userChalls = Ladders.challenges.get(user.userid); + if (userChalls) { + for (const chall of userChalls) { + if (chall.from === user.userid) { + challengeTo = { + to: chall.to, + format: chall.formatid, + }; + } else { + challengesFrom[chall.from] = chall.formatid; + } + } + } + (connection || user).send(`|updatechallenges|` + JSON.stringify({ + challengesFrom: challengesFrom, + challengeTo: challengeTo, + })); + } + + /** + * @param {User} user + * @return {boolean} + */ + cancelSearch(user) { + const formatid = toId(this.formatid); + + const formatTable = Ladders.searches.get(formatid); + if (!formatTable) return false; + if (!formatTable.has(user.userid)) return false; + formatTable.delete(user.userid); + + Ladder.updateSearch(user); + return true; + } + + /** + * @param {User} user + * @return {number} cancel count + */ + static cancelSearches(user) { + let cancelCount = 0; + + for (let formatTable of Ladders.searches.values()) { + const search = formatTable.get(user.userid); + if (!search) continue; + formatTable.delete(user.userid); + cancelCount++; + } + + Ladder.updateSearch(user); + return cancelCount; + } + + /** + * @param {BattleReady} search + */ + getSearcher(search) { + const formatid = toId(this.formatid); + const user = Users.get(search.userid); + if (!user || !user.connected || user.userid !== search.userid) { + const formatTable = Ladders.searches.get(formatid); + if (formatTable) formatTable.delete(search.userid); + if (user && user.connected) { + user.popup(`You changed your name and are no longer looking for a battle in ${formatid}`); + Ladder.updateSearch(user); + } + return null; + } + return user; + } + + /** + * @param {User} user + */ + static getSearches(user) { + let userSearches = []; + for (const [formatid, formatTable] of Ladders.searches) { + if (formatTable.has(user.userid)) userSearches.push(formatid); + } + return userSearches; + } + /** + * @param {User} user + * @param {Connection?} connection + */ + static updateSearch(user, connection = null) { + let games = /** @type {any} */ ({}); + let atLeastOne = false; + for (const roomid of user.games) { + const room = Rooms(roomid); + if (!room) { + Monitor.warn(`while searching, room ${roomid} expired for user ${user.userid} in rooms ${[...user.inRooms]} and games ${[...user.games]}`); + user.games.delete(roomid); + return; + } + const game = room.game; + if (!game) { + Monitor.warn(`while searching, room ${roomid} has no game for user ${user.userid} in rooms ${[...user.inRooms]} and games ${[...user.games]}`); + user.games.delete(roomid); + return; + } + games[roomid] = game.title + (game.allowRenames ? '' : '*'); + atLeastOne = true; + } + if (!atLeastOne) games = null; + let searching = Ladders.getSearches(user); + (connection || user).send(`|updatesearch|` + JSON.stringify({ + searching: searching, + games: games, + })); + } + /** + * @param {User} user + */ + hasSearch(user) { + const formatid = toId(this.formatid); + const formatTable = Ladders.searches.get(formatid); + if (!formatTable) return false; + return formatTable.has(user.userid); + } + + /** + * Validates a user's team and fetches their rating for a given format + * before creating a search for a battle. + * @param {User} user + * @param {Connection} connection + * @return {Promise} + */ + async searchBattle(user, connection) { + if (!user.connected) return; + + const format = Dex.getFormat(this.formatid); + if (!format.searchShow) { + connection.popup(`Error: Your format ${format.id} is not ladderable.`); + return; + } + + const roomid = this.needsToMove(user); + if (roomid) { + connection.popup(`Error: You need to make a move in <<${roomid}>> before you can look for another battle.\n\n(This restriction doesn't apply in the first five turns of a battle.)`); + return; + } + + if (roomid === null && Date.now() < user.lastDecision + 3 * SECONDS) { + connection.popup(`Error: You need to wait until after making a move before you can look for another battle.\n\n(This restriction doesn't apply in the first five turns of a battle.)`); + return; + } + + let oldUserid = user.userid; + const search = await this.prepBattle(connection, null, format.rated !== false); + + if (oldUserid !== user.userid) return; + if (!search) return; + + this.addSearch(search, user); + } + + /** + * null = all battles ok + * undefined = not in any battle + * @param {User} user + */ + needsToMove(user) { + let out = undefined; + for (const roomid of user.games) { + const room = Rooms(roomid); + if (!room || !room.battle || !room.battle.players[user.userid]) continue; + const battle = /** @type {RoomBattle} */ (room.battle); + if (battle.requestCount <= 16) { + // it's fine as long as it's before turn 5 + // to be safe, we count off 8 requests for Team Preview, U-turn, and faints + continue; + } + if (Dex.getFormat(battle.format).allowMultisearch) { + continue; + } + const player = battle.players[user.userid]; + if (!battle.requests[player.slot].isWait) return roomid; + out = null; + } + return out; + } + + /** + * Verifies whether or not a match made between two users is valid. Returns + * @param {BattleReady} search1 + * @param {BattleReady} search2 + * @param {User=} user1 + * @param {User=} user2 + * @return {boolean} + */ + matchmakingOK(search1, search2, user1, user2) { + const formatid = toId(this.formatid); + if (!user1 || !user2) { + // This should never happen. + Monitor.crashlog(new Error(`Matched user ${user1 ? search2.userid : search1.userid} not found`), "The matchmaker"); + return false; + } + + // users must be different + if (user1 === user2) return false; + + if (Config.fakeladder) { + user1.lastMatch = user2.userid; + user2.lastMatch = user1.userid; + return true; + } + + // users must have different IPs + if (user1.latestIp === user2.latestIp) return false; + + // users must not have been matched immediately previously + if (user1.lastMatch === user2.userid || user2.lastMatch === user1.userid) return false; + + // search must be within range + let searchRange = 100; + let elapsed = Date.now() - Math.min(search1.time, search2.time); + if (formatid === 'gen7ou' || formatid === 'gen7oucurrent' || + formatid === 'gen7oususpecttest' || formatid === 'gen7randombattle') { + searchRange = 50; + } + + searchRange += elapsed / 300; // +1 every .3 seconds + if (searchRange > 300) searchRange = 300 + (searchRange - 300) / 10; // +1 every 3 sec after 300 + if (searchRange > 600) searchRange = 600; + if (Math.abs(search1.rating - search2.rating) > searchRange) return false; + + user1.lastMatch = user2.userid; + user2.lastMatch = user1.userid; + return true; + } + + /** + * Starts a search for a battle for a user under the given format. + * @param {BattleReady} newSearch + * @param {User} user + */ + addSearch(newSearch, user) { + const formatid = newSearch.formatid; + let formatTable = Ladders.searches.get(formatid); + if (!formatTable) { + formatTable = new Map(); + Ladders.searches.set(formatid, formatTable); + } + if (formatTable.has(user.userid)) { + user.popup(`Couldn't search: You are already searching for a ${formatid} battle.`); + return; + } + + // In order from longest waiting to shortest waiting + for (let search of formatTable.values()) { + const searcher = this.getSearcher(search); + if (!searcher) continue; + const matched = this.matchmakingOK(search, newSearch, searcher, user); + if (matched) { + formatTable.delete(search.userid); + Ladder.match(search, newSearch); + return; + } + } + + formatTable.set(newSearch.userid, newSearch); + Ladder.updateSearch(user); + } + + /** + * Creates a match for a new battle for each format in this.searches if a + * valid match can be made. This is run periodically depending on + * PERIODIC_MATCH_INTERVAL. + */ + static periodicMatch() { + // In order from longest waiting to shortest waiting + for (const [formatid, formatTable] of Ladders.searches) { + const matchmaker = Ladders(formatid); + let longest = /** @type {[BattleReady, User]?} */ (null); + for (let search of formatTable.values()) { + if (!longest) { + const longestSearcher = matchmaker.getSearcher(search); + if (!longestSearcher) continue; + longest = [search, longestSearcher]; + continue; + } + let searcher = matchmaker.getSearcher(search); + if (!searcher) continue; + + let [longestSearch, longestSearcher] = longest; + let matched = matchmaker.matchmakingOK(search, longestSearch, searcher, longestSearcher); + if (matched) { + formatTable.delete(search.userid); + formatTable.delete(longestSearch.userid); + Ladder.match(longestSearch, search); + return; + } + } + } + } + + /** + * @param {BattleReady} ready1 + * @param {BattleReady} ready2 + */ + static match(ready1, ready2) { + if (ready1.formatid !== ready2.formatid) throw new Error(`Format IDs don't match`); + const user1 = Users(ready1.userid); + const user2 = Users(ready2.userid); + if (!user1) { + if (!user2) return false; + user2.popup(`Sorry, your opponent ${ready1.userid} went offline before your battle could start.`); + return false; + } + if (!user2) { + user1.popup(`Sorry, your opponent ${ready2.userid} went offline before your battle could start.`); + return false; + } + Rooms.createBattle(ready1.formatid, { + p1: user1, + p1team: ready1.team, + p2: user2, + p2team: ready2.team, + rated: Math.min(ready1.rating, ready2.rating), + }); + } +} + +/** + * @param {string} formatid + */ +function getLadder(formatid) { + return new Ladder(formatid); +} + +/** @type {?NodeJS.Timer} */ +let periodicMatchInterval = setInterval( + () => Ladder.periodicMatch(), + PERIODIC_MATCH_INTERVAL +); + +const Ladders = Object.assign(getLadder, { + BattleReady, + LadderStore, + Ladder, + + cancelSearches: Ladder.cancelSearches, + updateSearch: Ladder.updateSearch, + rejectChallenge: Ladder.rejectChallenge, + acceptChallenge: Ladder.acceptChallenge, + cancelChallenging: Ladder.cancelChallenging, + clearChallenges: Ladder.clearChallenges, + updateChallenges: Ladder.updateChallenges, + visualizeAll: Ladder.visualizeAll, + getSearches: Ladder.getSearches, + match: Ladder.match, + + searches, + challenges, + periodicMatchInterval, + + // tells the client to ask the server for format information + formatsListPrefix: LadderStore.formatsListPrefix, + /** @type {true | false | 'db'} */ + disabled: false, +}); + +module.exports = Ladders; diff --git a/server/loginserver.js b/server/loginserver.js new file mode 100644 index 0000000000000..79841f5476a48 --- /dev/null +++ b/server/loginserver.js @@ -0,0 +1,237 @@ +/** + * Login server abstraction layer + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This file handles communicating with the login server. + * + * @license MIT license + */ + +'use strict'; + +const LOGIN_SERVER_TIMEOUT = 30000; +const LOGIN_SERVER_BATCH_TIME = 1000; + +const http = Config.loginserver.startsWith('http:') ? require("http") : require("https"); +const url = require('url'); + +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; +/** @type {typeof import('../lib/streams')} */ +const Streams = require(/** @type {any} */('../.lib-dist/streams')); + +/** + * A custom error type used when requests to the login server take too long. + */ +class TimeoutError extends Error {} +TimeoutError.prototype.name = TimeoutError.name; + +function parseJSON(/** @type {string} */ json) { + if (json.startsWith(']')) json = json.substr(1); + /**@type {{error: Error | null, json?: any}} */ + let data = {error: null}; + try { + data.json = JSON.parse(json); + } catch (err) { + data.error = err; + } + return data; +} + +/** @typedef {[AnyObject?, number, Error?]} LoginServerResponse */ + +class LoginServerInstance { + constructor() { + this.uri = Config.loginserver; + /** + * @type {[AnyObject, (val: LoginServerResponse) => void][]} + */ + this.requestQueue = []; + + this.requestTimer = null; + /** @type {string} */ + this.requestLog = ''; + this.lastRequest = 0; + this.openRequests = 0; + this.disabled = false; + } + + /** + * @param {string} action + * @param {AnyObject?} data + * @return {Promise} + */ + instantRequest(action, data = null) { + if (this.openRequests > 5) { + return Promise.resolve(/** @type {LoginServerResponse} */ ( + [null, 0, new RangeError("Request overflow")] + )); + } + this.openRequests++; + let dataString = ''; + if (data) { + for (let i in data) { + dataString += '&' + i + '=' + encodeURIComponent('' + data[i]); + } + } + const urlObject = url.parse(this.uri + 'action.php?act=' + action + '&serverid=' + Config.serverid + '&servertoken=' + encodeURIComponent(Config.servertoken) + '&nocache=' + new Date().getTime() + dataString); + return new Promise((resolve, reject) => { + // @ts-ignore TypeScript bug: http.get signature + let req = http.get(urlObject, res => { + Streams.readAll(res).then(buffer => { + let data = parseJSON(buffer).json || null; + resolve([data, res.statusCode || 0, null]); + this.openRequests--; + }); + }); + + req.on('error', (/** @type {Error} */ error) => { + resolve([null, 0, error]); + this.openRequests--; + }); + + req.end(); + }); + } + /** + * @param {string} action + * @param {AnyObject?} data + * @return {Promise} + */ + request(action, data = null) { + if (this.disabled) { + return Promise.resolve(/** @type {LoginServerResponse} */ ( + [null, 0, new Error(`Login server connection disabled.`)] + )); + } + + // ladderupdate and mmr are the most common actions + // prepreplay is also common + // @ts-ignore + if (this[action + 'Server']) { + // @ts-ignore + return this[action + 'Server'].request(action, data); + } + + let actionData = data || {}; + actionData.act = action; + return new Promise(resolve => { + this.requestQueue.push([actionData, resolve]); + this.requestTimerPoke(); + }); + } + requestTimerPoke() { + // "poke" the request timer, i.e. make sure it knows it should make + // a request soon + + // if we already have it going or the request queue is empty no need to do anything + if (this.openRequests || this.requestTimer || !this.requestQueue.length) return; + + this.requestTimer = setTimeout(() => this.makeRequests(), LOGIN_SERVER_BATCH_TIME); + } + makeRequests() { + this.requestTimer = null; + let requests = this.requestQueue; + this.requestQueue = []; + + if (!requests.length) return; + + /** @type {((val: LoginServerResponse) => void)[]} */ + let resolvers = []; + let dataList = []; + for (const [data, resolve] of requests) { + resolvers.push(resolve); + dataList.push(data); + } + + this.requestStart(requests.length); + let postData = 'serverid=' + Config.serverid + + '&servertoken=' + encodeURIComponent(Config.servertoken) + + '&nocache=' + new Date().getTime() + + '&json=' + encodeURIComponent(JSON.stringify(dataList)) + '\n'; + /** @type {any} */ + let requestOptions = url.parse(this.uri + 'action.php'); + requestOptions.method = 'post'; + requestOptions.headers = { + 'Content-Type': 'application/x-www-form-urlencoded', + 'Content-Length': postData.length, + }; + + /** @type {any} */ + let response = null; + // @ts-ignore + let req = http.request(requestOptions, res => { + response = res; + Streams.readAll(res).then(buffer => { + //console.log('RESPONSE: ' + buffer); + let data = parseJSON(buffer).json; + if (buffer.startsWith(`[{"actionsuccess":true,`)) { + buffer = 'stream interrupt'; + } + for (const [i, resolve] of resolvers.entries()) { + if (data) { + resolve([data[i], res.statusCode || 0, null]); + } else { + if (buffer.includes('<')) buffer = 'invalid response'; + resolve([null, res.statusCode || 0, new Error(buffer)]); + } + } + this.requestEnd(); + }); + }); + + req.on('close', () => { + if (response) return; + const error = new TimeoutError("Response not received"); + for (const resolve of resolvers) { + resolve([null, 0, error]); + } + this.requestEnd(error); + }); + + req.on('error', (/** @type {Error} */ error) => { + // ignore; will be handled by the 'close' handler + }); + + req.setTimeout(LOGIN_SERVER_TIMEOUT, () => { + req.abort(); + }); + + req.write(postData); + req.end(); + } + requestStart(/** @type {number} */ size) { + this.lastRequest = Date.now(); + this.requestLog += ' | ' + size + ' rqs: '; + this.openRequests++; + } + requestEnd(/** @type {Error?} */ error) { + this.openRequests = 0; + if (error && error instanceof TimeoutError) { + this.requestLog += 'TIMEOUT'; + } else { + this.requestLog += '' + ((Date.now() - this.lastRequest) / 1000) + 's'; + } + this.requestLog = this.requestLog.substr(-1000); + this.requestTimerPoke(); + } + getLog() { + return this.requestLog + (this.lastRequest ? ' (' + Chat.toDurationString(Date.now() - this.lastRequest) + ' since last request)' : ''); + } +} + +let LoginServer = Object.assign(new LoginServerInstance(), { + TimeoutError, + + ladderupdateServer: new LoginServerInstance(), + prepreplayServer: new LoginServerInstance(), +}); + +FS('./config/custom.css').onModify(() => { + LoginServer.request('invalidatecss'); +}); +if (!Config.nofswriting) { + LoginServer.request('invalidatecss'); +} + +module.exports = LoginServer; diff --git a/monitor.js b/server/monitor.js similarity index 77% rename from monitor.js rename to server/monitor.js index 677d0baf2419a..1cbfdbb9df2af 100644 --- a/monitor.js +++ b/server/monitor.js @@ -8,7 +8,8 @@ */ 'use strict'; -const FS = require('./fs'); +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; const MONITOR_CLEAN_TIMEOUT = 2 * 60 * 60 * 1000; @@ -54,12 +55,35 @@ if (('Config' in global) && Config.loglevel = 2; } -// @ts-ignore +/** @type {typeof import('../lib/crashlogger')} */ +let crashlogger = require(/** @type {any} */('../.lib-dist/crashlogger')); + const Monitor = module.exports = { /********************************************************* * Logging *********************************************************/ + /** + * @param {Error} error + * @param {string} source + * @param {{}?} details + */ + crashlog(error, source = 'The main process', details = null) { + if ((error.stack || '').startsWith('@!!@')) { + try { + let stack = (error.stack || ''); + let nlIndex = stack.indexOf('\n'); + [error.name, error.message, source, details] = JSON.parse(stack.slice(4, nlIndex)); + error.stack = stack.slice(nlIndex + 1); + } catch (e) {} + } + let crashType = crashlogger(error, source, details); + Rooms.global.reportCrash(error, source); + if (crashType === 'lockdown') { + Rooms.global.startLockdown(error); + } + }, + /** * @param {string} text */ @@ -127,11 +151,15 @@ const Monitor = module.exports = { battles: new TimedCounter(), battlePreps: new TimedCounter(), groupChats: new TimedCounter(), + tickets: new TimedCounter(), - /** @type {?string} */ + /** @type {string | null} */ activeIp: null, + /** @type {{[k: string]: number}} */ networkUse: {}, + /** @type {{[k: string]: number}} */ networkCount: {}, + /** @type {{[k: string]: string}} */ hotpatchLock: {}, /** @@ -144,7 +172,7 @@ const Monitor = module.exports = { countConnection(ip, name = '') { let [count, duration] = this.connections.increment(ip, 30 * 60 * 1000); if (count === 500) { - this.adminlog(`[ResourceMonitor] IP ${ip} banned for cflooding (${count} times in ${Chat.toDurationString(duration)}${name ? `: ${name}` : ''})`); + this.adminlog(`[ResourceMonitor] IP ${ip} banned for cflooding (${count} times in ${Chat.toDurationString(duration)}${name ? ': ' + name : ''})`); return true; } @@ -152,7 +180,7 @@ const Monitor = module.exports = { if (count % 500 === 0) { let c = count / 500; if (c === 2 || c === 4 || c === 10 || c === 20 || c % 40 === 0) { - this.adminlog(`[ResourceMonitor] IP ${ip} still cflooding (${count} times in ${Chat.toDurationString(duration)}${name ? `: ${name}` : ''})`); + this.adminlog(`[ResourceMonitor] IP ${ip} still cflooding (${count} times in ${Chat.toDurationString(duration)}${name ? ': ' + name : ''})`); } } return true; @@ -172,12 +200,12 @@ const Monitor = module.exports = { countBattle(ip, name = '') { let [count, duration] = this.battles.increment(ip, 30 * 60 * 1000); if (duration < 5 * 60 * 1000 && count % 30 === 0) { - this.adminlog(`[ResourceMonitor] IP ${ip} has battled ${count} times in the last ${Chat.toDurationString(duration)}${name ? `: name` : ''})`); + this.adminlog(`[ResourceMonitor] IP ${ip} has battled ${count} times in the last ${Chat.toDurationString(duration)}${name ? ': ' + name : ''})`); return true; } if (count % 150 === 0) { - this.adminlog('[ResourceMonitor] IP ' + ip + ' has battled ' + count + ' times in the last ' + Chat.toDurationString(duration) + name); + this.adminlog(`[ResourceMonitor] IP ${ip} has battled ${count} times in the last ${Chat.toDurationString(duration)}${name ? ': ' + name : ''}`); return true; } @@ -222,6 +250,21 @@ const Monitor = module.exports = { return count > 4; }, + /** + * Counts ticket creation. Returns true if too much. + * + * @param {string} ip + * @return {boolean} + */ + countTickets(ip) { + let count = this.tickets.increment(ip, 60 * 60 * 1000)[0]; + if (Punishments.sharedIps.has(ip)) { + return count >= 20; + } else { + return count >= 5; + } + }, + /** * Counts the data length received by the last connection to send a * message, as well as the data length in the server's response. @@ -229,14 +272,13 @@ const Monitor = module.exports = { * @param {number} size */ countNetworkUse(size) { - if (Config.emergency && this.activeIp) { - if (this.activeIp in this.networkUse) { - this.networkUse[this.activeIp] += size; - this.networkCount[this.activeIp]++; - } else { - this.networkUse[this.activeIp] = size; - this.networkCount[this.activeIp] = 1; - } + if (!Config.emergency || typeof this.activeIp !== 'string') return; + if (this.activeIp in this.networkUse) { + this.networkUse[this.activeIp] += size; + this.networkCount[this.activeIp]++; + } else { + this.networkUse[this.activeIp] = size; + this.networkCount[this.activeIp] = 1; } }, diff --git a/punishments.js b/server/punishments.js similarity index 64% rename from punishments.js rename to server/punishments.js index f961703f81208..2d4f20b4e6f66 100644 --- a/punishments.js +++ b/server/punishments.js @@ -1,5 +1,5 @@ 'use strict'; - +/** @typedef {GlobalRoom | GameRoom | ChatRoom} Room */ /** * Punishments * Pokemon Showdown - http://pokemonshowdown.com/ @@ -15,7 +15,8 @@ let Punishments = module.exports; -const FS = require('./fs'); +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; const PUNISHMENT_FILE = 'config/punishments.tsv'; const ROOM_PUNISHMENT_FILE = 'config/room-punishments.tsv'; @@ -23,7 +24,8 @@ const SHAREDIPS_FILE = 'config/sharedips.tsv'; const RANGELOCK_DURATION = 60 * 60 * 1000; // 1 hour const LOCK_DURATION = 48 * 60 * 60 * 1000; // 48 hours -const BAN_DURATION = 7 * 24 * 60 * 60 * 1000; // 1 week +const GLOBALBAN_DURATION = 7 * 24 * 60 * 60 * 1000; // 1 week +const BATTLEBAN_DURATION = 48 * 60 * 60 * 1000; // 48 hours const ROOMBAN_DURATION = 48 * 60 * 60 * 1000; // 48 hours const BLACKLIST_DURATION = 365 * 24 * 60 * 60 * 1000; // 1 year @@ -31,7 +33,8 @@ const BLACKLIST_DURATION = 365 * 24 * 60 * 60 * 1000; // 1 year const USERID_REGEX = /^[a-z0-9]+$/; const PUNISH_TRUSTED = false; -const PUNISHMENT_POINT_VALUES = {MUTE: 2, BLACKLIST: 3, ROOMBAN: 4}; +/**@type {{[k: string]: number}} */ +const PUNISHMENT_POINT_VALUES = {MUTE: 2, BLACKLIST: 3, BATTLEBAN: 4, ROOMBAN: 4}; const AUTOLOCK_POINT_THRESHOLD = 8; /** @@ -39,8 +42,17 @@ const AUTOLOCK_POINT_THRESHOLD = 8; * @typedef {[string, string, number, string]} Punishment */ -class PunishmentMap extends Map/*:: */ { - get(k) { +/** + * TODO: Properly Typescript this. + * @typedef {User[]} PunishmentRow + */ + +/** + * @augments {Map} + */ +// @ts-ignore TODO: possible TypeScript bug +class PunishmentMap extends Map { + get(/** @type {string} */ k) { const punishment = super.get(k); if (punishment) { if (Date.now() < punishment[2]) return punishment; @@ -48,12 +60,15 @@ class PunishmentMap extends Map/*:: */ { } return undefined; } - has(k) { + has(/** @type {string} */ k) { return !!this.get(k); } + /** + * @param {(punishment: Punishment, id: string, map: PunishmentMap) => void} callback + */ forEach(callback) { super.forEach((punishment, k) => { - if (Date.now() < punishment[2]) return callback(punishment, k); + if (Date.now() < punishment[2]) return callback(punishment, k, this); this.delete(k); }); } @@ -70,15 +85,26 @@ Punishments.ips = new PunishmentMap(); Punishments.userids = new PunishmentMap(); /** - * @augments {Map} + * @augments {Map>} */ +// @ts-ignore TODO: possible TypeScript bug class NestedPunishmentMap extends Map { + /** + * @param {string} k1 + * @param {string} k2 + * @param {Punishment} value + */ nestedSet(k1, k2, value) { if (!this.get(k1)) { this.set(k1, new Map()); } + // @ts-ignore this.get(k1).set(k2, value); } + /** + * @param {string} k1 + * @param {string} k2 + */ nestedGet(k1, k2) { const subMap = this.get(k1); if (!subMap) return subMap; @@ -89,15 +115,26 @@ class NestedPunishmentMap extends Map { } return undefined; } + /** + * @param {string} k1 + * @param {string} k2 + */ nestedHas(k1, k2) { return !!this.nestedGet(k1, k2); } + /** + * @param {string} k1 + * @param {string} k2 + */ nestedDelete(k1, k2) { const subMap = this.get(k1); if (!subMap) return; subMap.delete(k2); if (!subMap.size) this.delete(k1); } + /** + * @param {(punishment: Punishment, roomid: string, userid: string) => void} callback + */ nestedForEach(callback) { this.forEach((subMap, k1) => { subMap.forEach((punishment, k2) => { @@ -128,10 +165,16 @@ Punishments.sharedIps = new Map(); * Persistence *********************************************************/ -// punishType is an allcaps string, for global punishments they can be one of the following: -// 'LOCK' -// 'BAN' -// 'NAMELOCK' +// punishType is an allcaps string, for global punishments they can be anything in the punishmentTypes map. +// This map can be extended with custom punishments by chat plugins. +// Keys in the map correspond to punishTypes, values signify the way they should be displayed in /alt + +/** @type {Map} */ +Punishments.punishmentTypes = new Map([ + ['LOCK', 'locked'], + ['BAN', 'globally banned'], + ['NAMELOCK', 'namelocked'], +]); // For room punishments, they can be anything in the roomPunishmentTypes map. // This map can be extended with custom punishments by chat plugins. @@ -139,11 +182,14 @@ Punishments.sharedIps = new Map(); // By default, this includes: // 'ROOMBAN' // 'BLACKLIST' +// 'BATTLEBAN' // 'MUTE' (used by getRoomPunishments) +/** @type {Map} */ Punishments.roomPunishmentTypes = new Map([ ['ROOMBAN', 'banned'], ['BLACKLIST', 'blacklisted'], + ['BATTLEBAN', 'battlebanned'], ['MUTE', 'muted'], ]); @@ -154,7 +200,7 @@ Punishments.roomPunishmentTypes = new Map([ Punishments.loadPunishments = async function () { - const data = await FS(PUNISHMENT_FILE).readTextIfExists(); + const data = await FS(PUNISHMENT_FILE).readIfExists(); if (!data) return; for (const row of data.split("\n")) { if (!row || row === '\r') continue; @@ -167,8 +213,7 @@ Punishments.loadPunishments = async function () { if (Date.now() >= expireTime) { continue; } - for (let j = 0; j < keys.length; j++) { - const key = keys[j]; + for (const key of keys) { if (!USERID_REGEX.test(key)) { Punishments.ips.set(key, punishment); } else { @@ -179,7 +224,7 @@ Punishments.loadPunishments = async function () { }; Punishments.loadRoomPunishments = async function () { - const data = await FS(ROOM_PUNISHMENT_FILE).readTextIfExists(); + const data = await FS(ROOM_PUNISHMENT_FILE).readIfExists(); if (!data) return; for (const row of data.split("\n")) { if (!row || row === '\r') continue; @@ -205,97 +250,100 @@ Punishments.loadRoomPunishments = async function () { }; Punishments.savePunishments = function () { - const saveTable = new Map(); - Punishments.ips.forEach((punishment, ip) => { - const [punishType, id, ...rest] = punishment; - if (id.charAt(0) === '#') return; - let entry = saveTable.get(id); - - if (entry) { - entry.keys.push(ip); - return; - } - - entry = { - keys: [ip], - punishType: punishType, - rest: rest, - }; - saveTable.set(id, entry); - }); - Punishments.userids.forEach((punishment, userid) => { - const [punishType, id, ...rest] = punishment; - if (id.charAt(0) === '#') return; - let entry = saveTable.get(id); + FS(PUNISHMENT_FILE).writeUpdate(() => { + const saveTable = new Map(); + Punishments.ips.forEach((/** @type {Punishment} */ punishment, /** @type {string} */ ip) => { + const [punishType, id, ...rest] = punishment; + if (id.charAt(0) === '#') return; + let entry = saveTable.get(id); + + if (entry) { + entry.keys.push(ip); + return; + } - if (!entry) { entry = { - keys: [], + keys: [ip], punishType: punishType, rest: rest, }; saveTable.set(id, entry); - } + }); + Punishments.userids.forEach((/** @type {Punishment} */ punishment, /** @type {string} */ userid) => { + const [punishType, id, ...rest] = punishment; + if (id.charAt(0) === '#') return; + let entry = saveTable.get(id); + + if (!entry) { + entry = { + keys: [], + punishType: punishType, + rest: rest, + }; + saveTable.set(id, entry); + } - if (userid !== id) entry.keys.push(userid); - }); + if (userid !== id) entry.keys.push(userid); + }); - let buf = 'Punishment\tUser ID\tIPs and alts\tExpires\r\n'; - saveTable.forEach((entry, id) => { - buf += Punishments.renderEntry(entry, id); + let buf = 'Punishment\tUser ID\tIPs and alts\tExpires\r\n'; + saveTable.forEach((entry, id) => { + buf += Punishments.renderEntry(entry, id); + }); + return buf; }); - - FS(PUNISHMENT_FILE).write(buf); }; Punishments.saveRoomPunishments = function () { - const saveTable = new Map(); - Punishments.roomIps.nestedForEach((punishment, roomid, ip) => { - const [punishType, punishUserid, ...rest] = punishment; - const id = roomid + ':' + punishUserid; - if (id.charAt(0) === '#') return; - let entry = saveTable.get(id); - - if (entry) { - entry.keys.push(ip); - return; - } - - entry = { - keys: [ip], - punishType: punishType, - rest: rest, - }; - saveTable.set(id, entry); - }); - Punishments.roomUserids.nestedForEach((punishment, roomid, userid) => { - const [punishType, punishUserid, ...rest] = punishment; - const id = roomid + ':' + punishUserid; - let entry = saveTable.get(id); + FS(ROOM_PUNISHMENT_FILE).writeUpdate(() => { + const saveTable = new Map(); + Punishments.roomIps.nestedForEach((/** @type {Punishment} */ punishment, /** @type {string} */ roomid, /** @type {string} */ ip) => { + const [punishType, punishUserid, ...rest] = punishment; + const id = roomid + ':' + punishUserid; + if (id.charAt(0) === '#') return; + let entry = saveTable.get(id); + + if (entry) { + entry.keys.push(ip); + return; + } - if (!entry) { entry = { - keys: [], + keys: [ip], punishType: punishType, rest: rest, }; saveTable.set(id, entry); - } + }); + Punishments.roomUserids.nestedForEach((/** @type {Punishment} */ punishment, /** @type {string} */ roomid, /** @type {string} */ userid) => { + const [punishType, punishUserid, ...rest] = punishment; + const id = roomid + ':' + punishUserid; + let entry = saveTable.get(id); + + if (!entry) { + entry = { + keys: [], + punishType: punishType, + rest: rest, + }; + saveTable.set(id, entry); + } - if (userid !== punishUserid) entry.keys.push(userid); - }); + if (userid !== punishUserid) entry.keys.push(userid); + }); - let buf = 'Punishment\tRoom ID:User ID\tIPs and alts\tExpires\r\n'; - saveTable.forEach((entry, id) => { - buf += Punishments.renderEntry(entry, id); + let buf = 'Punishment\tRoom ID:User ID\tIPs and alts\tExpires\r\n'; + saveTable.forEach((entry, id) => { + buf += Punishments.renderEntry(entry, id); + }); + return buf; }); - - FS(ROOM_PUNISHMENT_FILE).write(buf); }; /** * @param {Object} entry * @param {string} id + * @param {string} filename */ Punishments.appendPunishment = function (entry, id, filename) { if (id.charAt(0) === '#') return; @@ -314,7 +362,7 @@ Punishments.renderEntry = function (entry, id) { }; Punishments.loadBanlist = async function () { - const data = await FS('config/ipbans.txt').readTextIfExists(); + const data = await FS('config/ipbans.txt').readIfExists(); if (!data) return; let rangebans = []; for (const row of data.split("\n")) { @@ -333,7 +381,7 @@ Punishments.loadBanlist = async function () { // IP, type (in this case always SHARED), note Punishments.loadSharedIps = async function () { - const data = await FS(SHAREDIPS_FILE).readTextIfExists(); + const data = await FS(SHAREDIPS_FILE).readIfExists(); if (!data) return; for (const row of data.split("\n")) { if (!row || row === '\r') continue; @@ -356,7 +404,7 @@ Punishments.appendSharedIp = function (ip, note) { Punishments.saveSharedIps = function () { let buf = 'IP\tType\tNote\r\n'; - Punishments.sharedIps.forEach((note, ip) => { + Punishments.sharedIps.forEach((/** @type {string} */ note, /** @type {string} */ ip) => { buf += `${ip}\tSHARED\t${note}\r\n`; }); @@ -377,8 +425,8 @@ setImmediate(() => { /** * @param {User} user * @param {Punishment} punishment - * @param {?Set} recursionKeys - * @return {?Array} + * @param {Set?} recursionKeys + * @return {PunishmentRow | undefined} */ Punishments.punish = function (user, punishment, recursionKeys) { let existingPunishment = Punishments.userids.get(toId(user.name)); @@ -420,13 +468,13 @@ Punishments.punish = function (user, punishment, recursionKeys) { if (user.trusted) { Punishments.userids.set(user.trusted, punishment); keys.add(user.trusted); - if (!PUNISH_TRUSTED) affected.unshift(user); + if (!PUNISH_TRUSTED && affected) affected.unshift(user); } if (!recursionKeys) { const [punishType, id, ...rest] = punishment; keys.delete(id); Punishments.appendPunishment({ - keys: Array.from(keys), + keys: [...keys], punishType: punishType, rest: rest, }, id, PUNISHMENT_FILE); @@ -434,8 +482,12 @@ Punishments.punish = function (user, punishment, recursionKeys) { } }; +/** + * @param {string} userid + * @param {Punishment} punishment + */ Punishments.punishName = function (userid, punishment) { - let foundKeys = Punishments.search(userid)[0].map(key => key.split(':')[0]); + let foundKeys = Punishments.search(userid)[0].map((/** @type {string} */ key) => key.split(':')[0]); let userids = new Set([userid]); let ips = new Set(); for (let key of foundKeys) { @@ -452,10 +504,10 @@ Punishments.punishName = function (userid, punishment) { Punishments.ips.set(ip, punishment); }); const [punishType, id, ...rest] = punishment; - let affected = Users.findUsers(Array.from(userids), Array.from(ips), {includeTrusted: PUNISH_TRUSTED, forPunishment: true}); + let affected = Users.findUsers([...userids], [...ips], {includeTrusted: PUNISH_TRUSTED, forPunishment: true}); userids.delete(id); Punishments.appendPunishment({ - keys: Array.from(userids).concat(Array.from(ips)), + keys: [...userids, ...ips], punishType: punishType, rest: rest, }, id, PUNISHMENT_FILE); @@ -476,14 +528,15 @@ Punishments.unpunish = function (id, punishType) { // in theory we can stop here if punishment doesn't exist, but // in case of inconsistent state, we'll try anyway + /** @type {false | string} */ let success = false; - Punishments.ips.forEach((punishment, key) => { + Punishments.ips.forEach((/** @type {Punishment} */punishment, /** @type {string} */key) => { if (punishment[1] === id && punishment[0] === punishType) { Punishments.ips.delete(key); success = id; } }); - Punishments.userids.forEach((punishment, key) => { + Punishments.userids.forEach((/** @type {Punishment} */punishment, /** @type {string} */key) => { if (punishment[1] === id && punishment[0] === punishType) { Punishments.userids.delete(key); success = id; @@ -496,13 +549,16 @@ Punishments.unpunish = function (id, punishType) { }; /** + * @param {Room} room * @param {User} user * @param {Punishment} punishment - * @param {?Set} recursionKeys - * @return {?Array} + * @param {Set?} recursionKeys + * @return {PunishmentRow | undefined} */ Punishments.roomPunish = function (room, user, punishment, recursionKeys) { + let roomid = typeof room === 'string' ? room : room.id; let keys = recursionKeys || new Set(); + /** @type {User[] | undefined} */ let affected; if (!recursionKeys) { @@ -513,38 +569,46 @@ Punishments.roomPunish = function (room, user, punishment, recursionKeys) { } for (let ip in user.ips) { - Punishments.roomIps.nestedSet(room.id, ip, punishment); + Punishments.roomIps.nestedSet(roomid, ip, punishment); keys.add(ip); } if (!user.userid.startsWith('guest')) { - Punishments.roomUserids.nestedSet(room.id, user.userid, punishment); + Punishments.roomUserids.nestedSet(roomid, user.userid, punishment); } if (user.autoconfirmed) { - Punishments.roomUserids.nestedSet(room.id, user.autoconfirmed, punishment); + Punishments.roomUserids.nestedSet(roomid, user.autoconfirmed, punishment); keys.add(user.autoconfirmed); } if (user.trusted) { - Punishments.roomUserids.nestedSet(room.id, user.trusted, punishment); + Punishments.roomUserids.nestedSet(roomid, user.trusted, punishment); keys.add(user.trusted); - if (!PUNISH_TRUSTED) affected.unshift(user); + if (!PUNISH_TRUSTED) { + if (!affected) affected = []; + affected.unshift(user); + } } if (!recursionKeys) { const [punishType, id, ...rest] = punishment; keys.delete(id); Punishments.appendPunishment({ - keys: Array.from(keys), + keys: [...keys], punishType: punishType, rest: rest, - }, room.id + ':' + id, ROOM_PUNISHMENT_FILE); + }, roomid + ':' + id, ROOM_PUNISHMENT_FILE); - if (!(room.isPrivate === true || room.isPersonal || room.battle)) Punishments.monitorRoomPunishments(user); + if (typeof roomid === 'string' || !(room.isPrivate === true || room.isPersonal || room.battle)) Punishments.monitorRoomPunishments(user); return affected; } }; +/** + * @param {Room} room + * @param {string} userid + * @param {Punishment} punishment + */ Punishments.roomPunishName = function (room, userid, punishment) { - let foundKeys = Punishments.search(userid)[0].map(key => key.split(':')[0]); + let foundKeys = Punishments.search(userid)[0].map((/** @type {string} */ key) => key.split(':')[0]); let userids = new Set([userid]); let ips = new Set(); for (let key of foundKeys) { @@ -561,10 +625,10 @@ Punishments.roomPunishName = function (room, userid, punishment) { Punishments.roomIps.nestedSet(room.id, ip, punishment); }); const [punishType, id, ...rest] = punishment; - let affected = Users.findUsers(Array.from(userids), Array.from(ips), {includeTrusted: PUNISH_TRUSTED, forPunishment: true}); + let affected = Users.findUsers([...userids], [...ips], {includeTrusted: PUNISH_TRUSTED, forPunishment: true}); userids.delete(id); Punishments.appendPunishment({ - keys: Array.from(userids).concat(Array.from(ips)), + keys: [...userids, ...ips], punishType: punishType, rest: rest, }, room.id + ':' + id, ROOM_PUNISHMENT_FILE); @@ -575,13 +639,14 @@ Punishments.roomPunishName = function (room, userid, punishment) { /** * @param {Room} room - * @param {string} userid + * @param {string} id * @param {string} punishType * @param {boolean} ignoreWrite Flag to skip persistent storage. */ Punishments.roomUnpunish = function (room, id, punishType, ignoreWrite) { + let roomid = typeof room === 'string' ? toId(room) : room.id; id = toId(id); - let punishment = Punishments.roomUserids.nestedGet(room, id); + let punishment = Punishments.roomUserids.nestedGet(roomid, id); if (punishment) { id = punishment[1]; } @@ -589,18 +654,18 @@ Punishments.roomUnpunish = function (room, id, punishType, ignoreWrite) { // in case of inconsistent state, we'll try anyway let success; - const ipSubMap = Punishments.roomIps.get(room.id); + const ipSubMap = Punishments.roomIps.get(roomid); if (ipSubMap) { - ipSubMap.forEach((punishment, key) => { + ipSubMap.forEach((/** @type {Punishment} */punishment, /** @type {string} */key) => { if (punishment[1] === id && punishment[0] === punishType) { ipSubMap.delete(key); success = id; } }); } - const useridSubMap = Punishments.roomUserids.get(room.id); + const useridSubMap = Punishments.roomUserids.get(roomid); if (useridSubMap) { - useridSubMap.forEach((punishment, key) => { + useridSubMap.forEach((/** @type {Punishment} */punishment, /** @type {string} */key) => { if (punishment[1] === id && punishment[0] === punishType) { useridSubMap.delete(key); success = id; @@ -621,13 +686,13 @@ Punishments.roomUnpunish = function (room, id, punishType, ignoreWrite) { * @param {User} user * @param {number} expireTime * @param {string} id - * @param {...string} [reason] - * @return {?Array} + * @param {...string} reason + * @return {PunishmentRow} */ Punishments.ban = function (user, expireTime, id, ...reason) { if (!id) id = user.getLastId(); - if (!expireTime) expireTime = Date.now() + BAN_DURATION; + if (!expireTime) expireTime = Date.now() + GLOBALBAN_DURATION; let punishment = ['BAN', id, expireTime, ...reason]; let affected = Punishments.punish(user, punishment); @@ -645,15 +710,15 @@ Punishments.unban = function (name) { return Punishments.unpunish(name, 'BAN'); }; /** - * @param {User} user + * @param {User? | string} user * @param {number} expireTime * @param {string} id - * @param {...string} [reason] - * @return {?Array} + * @param {...string} reason + * @return {PunishmentRow} */ Punishments.lock = function (user, expireTime, id, ...reason) { - if (!id && user) id = user.getLastId(); if (!user || typeof user === 'string') user = Users(id); + if (!id && user) id = user.getLastId(); if (!expireTime) expireTime = Date.now() + LOCK_DURATION; let punishment = ['LOCK', id, expireTime, ...reason]; @@ -678,10 +743,11 @@ Punishments.lock = function (user, expireTime, id, ...reason) { * @param {Room} room * @param {string} source * @param {string} reason - * @param {?string} message - * @param {?boolean} week + * @param {string?} message + * @param {boolean} week + * @param {string?} [name] */ -Punishments.autolock = function (user, room, source, reason, message, week) { +Punishments.autolock = function (user, room, source, reason, message, week = false, name) { if (!message) message = reason; let punishment = `LOCKED`; @@ -690,9 +756,17 @@ Punishments.autolock = function (user, room, source, reason, message, week) { expires = Date.now() + 7 * 24 * 60 * 60 * 1000; punishment = `WEEKLOCKED`; } - Punishments.lock(user, expires, toId(user), `Autolock: ${user.name || toId(user)}: ${reason}`); + + const userid = toId(user); + if (name) { + punishment = `NAMELOCKED`; + Punishments.namelock(user, expires, toId(name), `Autonamelock: ${user.name || userid}: ${reason}`); + } else { + Punishments.lock(user, expires, toId(user), `Autolock: ${user.name || userid}: ${reason}`); + } Monitor.log(`[${source}] ${punishment}: ${message}`); - Rooms.global.modlog(`(${toId(room)}) AUTOLOCK: [${toId(user)}]: ${reason}`); + const ipStr = typeof user !== 'string' ? ` [${user.latestIp}]` : ''; + Rooms.global.modlog(`(${toId(room)}) AUTO${name ? `NAME` : ''}LOCK: [${userid}]${ipStr}: ${reason}`); }; /** * @param {string} name @@ -700,6 +774,7 @@ Punishments.autolock = function (user, room, source, reason, message, week) { Punishments.unlock = function (name) { let user = Users(name); let id = toId(name); + /** @type {string[]} */ let success = []; if (user && user.locked && !user.namelocked) { id = user.locked; @@ -731,8 +806,8 @@ Punishments.unlock = function (name) { * @param {User} user * @param {number} expireTime * @param {string} id - * @param {...string} [reason] - * @return {?Array} + * @param {...string} reason + * @return {PunishmentRow} */ Punishments.namelock = function (user, expireTime, id, ...reason) { if (!id) id = user.getLastId(); @@ -756,7 +831,11 @@ Punishments.namelock = function (user, expireTime, id, ...reason) { Punishments.unnamelock = function (name) { let user = Users(name); let id = toId(name); + /** @type {string[]} */ let success = []; + // @ts-ignore + if (user && user.namelocked) name = user.namelocked; + let unpunished = Punishments.unpunish(name, 'NAMELOCK'); if (user && user.locked) { id = user.locked; @@ -764,16 +843,16 @@ Punishments.unnamelock = function (name) { user.namelocked = false; user.resetName(); success.push(user.getLastName()); - if (id.charAt(0) !== '#') { - Users.users.forEach(curUser => { - if (curUser.locked === id) { - curUser.locked = false; - curUser.namelocked = false; - curUser.resetName(); - success.push(curUser.getLastName()); - } - }); - } + } + if (id.charAt(0) !== '#') { + Users.users.forEach(curUser => { + if (curUser.locked === id) { + curUser.locked = false; + curUser.namelocked = false; + curUser.resetName(); + success.push(curUser.getLastName()); + } + }); } if (unpunished && !success.length) success.push(name); if (!success.length) return false; @@ -782,6 +861,73 @@ Punishments.unnamelock = function (name) { } return success; }; +/** + * @param {User} user + * @param {number} expireTime + * @param {string} id + * @param {...string} reason + * @return {PunishmentRow} + */ +Punishments.battleban = function (user, expireTime, id, ...reason) { + if (!id) id = user.getLastId(); + + if (!expireTime) expireTime = Date.now() + BATTLEBAN_DURATION; + let punishment = ['BATTLEBAN', id, expireTime, ...reason]; + + // Handle tournaments the user was in before being battle banned + for (let games of user.games.keys()) { + const gameRoom = Rooms(games).game; + if (!gameRoom) continue; // this should never happen + // @ts-ignore + if (gameRoom.isTournament) { + // @ts-ignore + if (gameRoom.isTournamentStarted) { + // @ts-ignore + gameRoom.disqualifyUser(id, null, null); + // @ts-ignore + } else if (!gameRoom.isTournamentStarted) { + // @ts-ignore + gameRoom.removeUser(user); + } + } + } + + return Punishments.roomPunish("battle", user, punishment); +}; +/** + * @param {string} userid + */ +Punishments.unbattleban = function (userid) { + const user = Users(userid); + if (user) { + let punishment = Punishments.isBattleBanned(user); + if (punishment) userid = punishment[1]; + } + return Punishments.roomUnpunish("battle", userid, 'BATTLEBAN'); +}; +/** + * @param {User} user + * @return {Punishment | undefined} + */ +Punishments.isBattleBanned = function (user) { + if (!user) throw new Error(`Trying to check if a non-existent user is battlebanned.`); + + let punishment = Punishments.roomUserids.nestedGet("battle", user.userid); + if (punishment && punishment[0] === 'BATTLEBAN') return punishment; + + if (user.autoconfirmed) { + punishment = Punishments.roomUserids.nestedGet("battle", user.autoconfirmed); + if (punishment && punishment[0] === 'BATTLEBAN') return punishment; + } + + for (let ip in user.ips) { + punishment = Punishments.roomIps.nestedGet("battle", ip); + if (punishment && punishment[0] === 'BATTLEBAN') { + if (Punishments.sharedIps.has(ip) && user.autoconfirmed) return; + return punishment; + } + } +}; /** * @param {string} range @@ -805,8 +951,8 @@ Punishments.banRange = function (range, reason) { * @param {User} user * @param {number} expireTime * @param {string} userId - * @param {...string} [reason] - * @return {?Array} + * @param {...string} reason + * @return {PunishmentRow} */ Punishments.roomBan = function (room, user, expireTime, userId, ...reason) { if (!userId) userId = user.getLastId(); @@ -822,16 +968,27 @@ Punishments.roomBan = function (room, user, expireTime, userId, ...reason) { curUser.leaveRoom(room.id); } + if (room.subRooms) { + for (const subRoom of room.subRooms.values()) { + for (const curUser of affected) { + if (subRoom.game && subRoom.game.removeBannedUser) { + subRoom.game.removeBannedUser(curUser); + } + curUser.leaveRoom(subRoom.id); + } + } + } + return affected; }; /** * @param {Room} room - * @param {User} user + * @param {User?} user * @param {number} expireTime * @param {string} userId - * @param {...string} [reason] - * @return {?Array} + * @param {...string} reason + * @return {PunishmentRow} */ Punishments.roomBlacklist = function (room, user, expireTime, userId, ...reason) { if (!userId && user) userId = user.getLastId(); @@ -857,6 +1014,17 @@ Punishments.roomBlacklist = function (room, user, expireTime, userId, ...reason) curUser.leaveRoom(room.id); } + if (room.subRooms) { + for (const subRoom of room.subRooms.values()) { + for (const curUser of affected) { + if (subRoom.game && subRoom.game.removeBannedUser) { + subRoom.game.removeBannedUser(curUser); + } + curUser.leaveRoom(subRoom.id); + } + } + } + return affected; }; @@ -894,9 +1062,10 @@ Punishments.roomUnblacklistAll = function (room) { const roombans = Punishments.roomUserids.get(room.id); if (!roombans) return false; + /** @type {string[]} */ let unblacklisted = []; - roombans.forEach((punishment, userid) => { + roombans.forEach((/** @type {Punishment} */punishment, /** @type {string} */userid) => { if (punishment[0] === 'BLACKLIST') { Punishments.roomUnblacklist(room, userid, true); unblacklisted.push(userid); @@ -921,6 +1090,7 @@ Punishments.addSharedIp = function (ip, note) { user.semilocked = `#sharedip ${user.locked}`; } user.locked = false; + user.namelocked = false; user.updateIdentity(); } @@ -939,10 +1109,15 @@ Punishments.removeSharedIp = function (ip) { * Checking *********************************************************/ +/** + * @param {string} searchId + * @return {[string[], (string | number)[]?]} + */ Punishments.search = function (searchId) { + /** @type {string[]} */ let foundKeys = []; let foundRest = null; - Punishments.ips.forEach((punishment, ip) => { + Punishments.ips.forEach((/** @type {Punishment} */ punishment, /** @type {string} */ ip) => { const [, id, ...rest] = punishment; if (searchId === id || searchId === ip) { @@ -950,7 +1125,7 @@ Punishments.search = function (searchId) { foundRest = rest; } }); - Punishments.userids.forEach((punishment, userid) => { + Punishments.userids.forEach((/** @type {Punishment} */punishment, /** @type {string} */userid) => { const [, id, ...rest] = punishment; if (searchId === id || searchId === userid) { @@ -958,7 +1133,7 @@ Punishments.search = function (searchId) { foundRest = rest; } }); - Punishments.roomIps.nestedForEach((punishment, roomid, ip) => { + Punishments.roomIps.nestedForEach((/** @type {Punishment} */punishment, /** @type {string} */roomid, /** @type {string} */ip) => { const [, punishUserid, ...rest] = punishment; if (searchId === punishUserid || searchId === ip) { @@ -966,7 +1141,7 @@ Punishments.search = function (searchId) { foundRest = rest; } }); - Punishments.roomUserids.nestedForEach((punishment, roomid, userid) => { + Punishments.roomUserids.nestedForEach((/** @type {Punishment} */punishment, /** @type {string} */roomid, /** @type {string} */userid) => { const [, punishUserid, ...rest] = punishment; if (searchId === punishUserid || searchId === userid) { @@ -1012,7 +1187,7 @@ Punishments.getRoomPunishType = function (room, name) { * to any of the keys in table match '1.2.3.4', '1.2.3.*', '1.2.*', or '1.*' * * @param {string} ip - * @return {?Array} + * @return {PunishmentRow | undefined} */ Punishments.ipSearch = function (ip) { let punishment = Punishments.ips.get(ip); @@ -1028,8 +1203,8 @@ Punishments.ipSearch = function (ip) { }; /** - * @param {string} userid - * @return {?Array} + * @param {string} host + * @return {string} */ Punishments.shortenHost = function (host) { if (host.slice(-7) === '-nohost') return host; @@ -1045,11 +1220,16 @@ Punishments.checkRangeBanned = function () {}; /** * @param {User} user + * @param {string} userid * @param {boolean} registered */ -Punishments.checkName = function (user, registered) { - let userid = user.userid; +Punishments.checkName = function (user, userid, registered) { + if (userid.startsWith('guest')) return; + for (const roomid of user.inRooms) { + Punishments.checkNewNameInRoom(user, userid, roomid); + } let punishment = Punishments.userids.get(userid); + let battleban = Punishments.isBattleBanned(user); if (!punishment && user.namelocked) { punishment = Punishments.userids.get(user.namelocked); if (!punishment) punishment = ['NAMELOCK', user.namelocked, 0]; @@ -1058,37 +1238,76 @@ Punishments.checkName = function (user, registered) { punishment = Punishments.userids.get(user.locked); if (!punishment) punishment = ['LOCK', user.locked, 0]; } + if (!battleban && Punishments.isBattleBanned(user)) { + battleban = Punishments.roomUserids.get(Punishments.isBattleBanned(user)); + if (!battleban) battleban = ['BATTLEBAN', Punishments.isBattleBanned(user), 0]; + } + + const ticket = Chat.pages.help ? `` : ''; + + if (battleban) { + if (battleban[1] !== user.userid && Punishments.sharedIps.has(user.latestIp) && user.autoconfirmed) { + Punishments.roomUnpunish("battle", userid, 'BATTLEBAN'); + } else { + Punishments.roomPunish("battle", user, battleban); + user.cancelReady(); + if (!punishment) { + let appealLink = ticket || (Config.appealurl ? `appeal at: ${Config.appealurl}` : ``); + // Prioritize popups for other global punishments + user.send(`|popup||html|You are banned from battling${battleban[1] !== userid ? ` because you have the same IP as banned user: ${battleban[1]}` : ''}. Your battle ban will expire in a few days.${battleban[3] ? Chat.html `\n\nReason: ${battleban[3]}` : ``}${appealLink ? `\n\nOr you can ${appealLink}.` : ``}`); + user.punishmentNotified = true; + return; + } + } + } if (!punishment) return; let id = punishment[0]; let punishUserid = punishment[1]; let reason = ``; - if (punishment[3]) reason = `||||Reason: ${punishment[3]}`; + if (punishment[3]) reason = `\n\nReason: ${Chat.escapeHTML(punishment[3])}`; let appeal = ``; - if (Config.appealurl) appeal = `||||Or you can appeal at: ${Config.appealurl}`; + if (user.permalocked && Config.appealurl) { + appeal += `\n\nPermanent punishments can be appealed: ${Config.appealurl}`; + } else if (ticket) { + appeal += `\n\nIf you feel you were unfairly punished or wish to otherwise appeal, you can ${ticket}.`; + } else if (Config.appealurl) { + appeal += `\n\nIf you wish to appeal your punishment, please use: ${Config.appealurl}`; + } let bannedUnder = ``; if (punishUserid !== userid) bannedUnder = ` because you have the same IP as banned user: ${punishUserid}`; + if ((id === 'LOCK' || id === 'NAMELOCK') && punishUserid !== userid && Punishments.sharedIps.has(user.latestIp)) { + if (!user.autoconfirmed) { + user.semilocked = `#sharedip ${user.locked}`; + } + user.locked = false; + user.namelocked = false; + + user.updateIdentity(); + return; + } if (registered && id === 'BAN') { - user.send(`|popup|Your username (${user.name}) is banned${bannedUnder}. Your ban will expire in a few days.${reason}${appeal}`); + user.popup(`Your username (${user.name}) is banned${bannedUnder}. Your ban will expire in a few days.${reason}${Config.appealurl ? `||||Or you can appeal at: ${Config.appealurl}` : ``}`); user.punishmentNotified = true; Punishments.punish(user, punishment); user.disconnectAll(); return; } if (id === 'NAMELOCK' || user.namelocked) { - user.send(`|popup|You are namelocked and can't have a username${bannedUnder}. Your namelock will expire in a few days.${reason}${appeal}`); - if (punishment[2]) Punishments.punish(user, punishment); + user.send(`|popup||html|You are namelocked and can't have a username${bannedUnder}. Your namelock will expire in a few days.${reason}${appeal}`); user.locked = punishUserid; user.namelocked = punishUserid; user.resetName(); user.updateIdentity(); } else { - if (!user.lockNotified) { - user.send(`|popup|You are locked${bannedUnder}. Your lock will expire in a few days.${reason}${appeal}`); - user.lockNotified = true; + if (punishUserid === '#hostfilter') { + user.popup(`Due to spam, you can't chat using a proxy. (Your IP ${user.latestIp} appears to be a proxy.)`); + } else if (!user.lockNotified) { + user.send(`|popup||html|You are locked${bannedUnder}. ${user.permalocked ? `This lock is permanent.` : `Your lock will expire in a few days.`}${reason}${appeal}`); } - Punishments.punish(user, punishment); + user.lockNotified = true; + if (user.userid === punishUserid) Punishments.punish(user, punishment); user.locked = punishUserid; user.updateIdentity(); } @@ -1101,11 +1320,10 @@ Punishments.checkName = function (user, registered) { Punishments.checkIp = function (user, connection) { let ip = connection.ip; let punishment = Punishments.ipSearch(ip); - if (punishment) { if (Punishments.sharedIps.has(user.latestIp)) { - if (connection.user && !connection.user.locked && !connection.user.autoconfirmed) { - connection.user.semilocked = `#sharedip ${punishment[1]}`; + if (!user.locked && !user.autoconfirmed) { + user.semilocked = `#sharedip ${punishment[1]}`; } } else { user.locked = punishment[1]; @@ -1115,16 +1333,30 @@ Punishments.checkIp = function (user, connection) { } } - Dnsbl.reverse(ip).then(host => { + Dnsbl.reverse(ip).catch((/** @type {Error} */ e) => { + // If connection.user is reassigned before async tasks can run, user + // may no longer be equal to it. + user = connection.user || user; + // @ts-ignore + if (e.code === 'EINVAL') { + if (!user.locked && !user.autoconfirmed) { + user.semilocked = '#dnsbl'; + } + return null; + } + throw e; + }).then((/** @type {string | null} */ host) => { + user = connection.user || user; if (host) user.latestHost = host; - if (Config.hostfilter) Config.hostfilter(host, user, connection); + Chat.hostfilter(host || '', user, connection); }); if (Config.dnsbl) { - Dnsbl.query(connection.ip).then(isBlocked => { + Dnsbl.query(connection.ip).then((/** @type {string | null} */ isBlocked) => { + user = connection.user || user; if (isBlocked) { - if (connection.user && !connection.user.locked && !connection.user.autoconfirmed) { - connection.user.semilocked = '#dnsbl'; + if (!user.locked && !user.autoconfirmed) { + user.semilocked = '#dnsbl'; } } }); @@ -1133,7 +1365,7 @@ Punishments.checkIp = function (user, connection) { /** * Connection flood table. Separate table from IP bans. - * @type Set + * @type {Set} */ let cfloods = Punishments.cfloods = new Set(); @@ -1142,7 +1374,7 @@ let cfloods = Punishments.cfloods = new Set(); * make a User object if an IP is banned. * * @param {Connection} connection - * @return {?string} + * @return {string? | false} */ Punishments.checkIpBanned = function (connection) { let ip = connection.ip; @@ -1153,6 +1385,7 @@ Punishments.checkIpBanned = function (connection) { if (Punishments.sharedIps.has(ip)) return false; + /** @type {false | string} */ let banned = false; let punishment = Punishments.ipSearch(ip); if (punishment && punishment[0] === 'BAN') { @@ -1168,7 +1401,7 @@ Punishments.checkIpBanned = function (connection) { let appeal = (Config.appealurl ? `||||Or you can appeal at: ${Config.appealurl}` : ``); connection.send(`|popup||modal|You are banned because you have the same IP (${ip}) as banned user '${banned}'. Your ban will expire in a few days.${appeal}`); } - if (!Config.quietconsole) console.log(`CONNECT BLOCKED - IP BANNED: ${ip} (${banned})`); + Monitor.notice(`CONNECT BLOCKED - IP BANNED: ${ip} (${banned})`); return banned; }; @@ -1176,13 +1409,14 @@ Punishments.checkIpBanned = function (connection) { /** * @param {User} user * @param {string} roomid - * @return {boolean} + * @return {boolean | undefined} */ Punishments.checkNameInRoom = function (user, roomid) { let punishment = Punishments.roomUserids.nestedGet(roomid, user.userid); if (!punishment && user.autoconfirmed) { punishment = Punishments.roomUserids.nestedGet(roomid, user.autoconfirmed); } + if (!punishment && Rooms(roomid).parent) punishment = Punishments.checkNameInRoom(user, Rooms(roomid).parent); if (!punishment) return false; if (punishment[0] === 'ROOMBAN' || punishment[0] === 'BLACKLIST') { return true; @@ -1195,7 +1429,8 @@ Punishments.checkNameInRoom = function (user, roomid) { * @param {string} roomid */ Punishments.checkNewNameInRoom = function (user, userid, roomid) { - const punishment = Punishments.roomUserids.nestedGet(roomid, userid); + let punishment = Punishments.roomUserids.nestedGet(roomid, userid); + if (!punishment && Rooms(roomid).parent) punishment = Punishments.checkNewNameInRoom(user, userid, Rooms(roomid).parent); if (punishment) { if (punishment[0] !== 'ROOMBAN' && punishment[0] !== 'BLACKLIST') return; const room = Rooms(roomid); @@ -1203,14 +1438,16 @@ Punishments.checkNewNameInRoom = function (user, userid, roomid) { room.game.removeBannedUser(user); } user.leaveRoom(room.id); + return punishment; } }; /** - * @param {string} userid + * @param {string? | boolean} userid * @return {string} Descriptive text for the remaining time until the punishment expires, if any. */ Punishments.checkLockExpiration = function (userid) { + if (typeof userid === "boolean") return ``; const punishment = Punishments.userids.get(userid); if (punishment) { @@ -1220,7 +1457,7 @@ Punishments.checkLockExpiration = function (userid) { let expiresDays = Math.round(expiresIn / 1000 / 60 / 60 / 24); let expiresText = ''; if (expiresDays >= 1) { - expiresText = `in around ${expiresDays} day${Chat.plural(expiresDays)}`; + expiresText = `in around ${Chat.count(expiresDays, "days")}`; } else { expiresText = `soon`; } @@ -1233,7 +1470,7 @@ Punishments.checkLockExpiration = function (userid) { /** * @param {User} user * @param {string} roomid - * @return {?Punishment} + * @return {Punishment | undefined} */ Punishments.isRoomBanned = function (user, roomid) { if (!user) throw new Error(`Trying to check if a non-existent user is room banned.`); @@ -1249,15 +1486,20 @@ Punishments.isRoomBanned = function (user, roomid) { for (let ip in user.ips) { punishment = Punishments.roomIps.nestedGet(roomid, ip); if (punishment) { - if (punishment[0] === 'ROOMBAN') { + if (punishment[0] === 'ROOMBAN') { return punishment; - } else if (punishment[0] === 'BLACKLIST') { + } else if (punishment[0] === 'BLACKLIST') { if (Punishments.sharedIps.has(ip) && user.autoconfirmed) return; return punishment; - } + } } } + + const room = Rooms(roomid); + if (!room) throw new Error(`Trying to ban a user from a nonexistent room: ${roomid}`); + + if (room.parent) return Punishments.isRoomBanned(user, room.parent.id); }; /** @@ -1267,24 +1509,24 @@ Punishments.isRoomBanned = function (user, roomid) { * options.checkIps will also check the IP of the user for IP-based punishments. * * @param {User | string} user - * @param {?Object} options + * @param {Object?} options * @return {Array} */ Punishments.getRoomPunishments = function (user, options) { - if (!user) return; + if (!user) return []; let userid = toId(user); let checkMutes = typeof user !== 'string'; let punishments = []; - for (let i = 0; i < Rooms.global.chatRooms.length; i++) { - const curRoom = Rooms.global.chatRooms[i]; + for (const curRoom of Rooms.global.chatRooms) { if (!curRoom || curRoom.isPrivate === true || ((options && options.publicOnly) && (curRoom.isPersonal || curRoom.battle))) continue; let punishment = Punishments.roomUserids.nestedGet(curRoom.id, userid); if (punishment) { punishments.push([curRoom, punishment]); continue; } else if (options && options.checkIps) { + // @ts-ignore for (let ip in user.ips) { punishment = Punishments.roomIps.nestedGet(curRoom.id, ip); if (punishment) { @@ -1294,12 +1536,13 @@ Punishments.getRoomPunishments = function (user, options) { } } if (checkMutes && curRoom.muteQueue) { - for (let i = 0; i < curRoom.muteQueue.length; i++) { - let entry = curRoom.muteQueue[i]; + for (const entry of curRoom.muteQueue) { if (userid === entry.userid || + // @ts-ignore user.guestNum === entry.guestNum || + // @ts-ignore (user.autoconfirmed && user.autoconfirmed === entry.autoconfirmed)) { - punishments.push([curRoom, ['MUTE', entry.userid, curRoom.muteQueue[i].time]]); + punishments.push([curRoom, ['MUTE', entry.userid, entry.time]]); } } } @@ -1314,7 +1557,9 @@ Punishments.getRoomPunishments = function (user, options) { * @param {User | string} user */ Punishments.monitorRoomPunishments = function (user) { + // @ts-ignore if (user.locked) return; + const userid = toId(user); const minPunishments = (typeof Config.monitorminpunishments === 'number' ? Config.monitorminpunishments : 3); // Default to 3 if the Config option is not defined or valid if (!minPunishments) return; @@ -1324,26 +1569,28 @@ Punishments.monitorRoomPunishments = function (user) { if (punishments.length >= minPunishments) { let points = 0; - let punishmentText = punishments.map(([room, punishment]) => { + let punishmentText = punishments.map((/** @type {[string, Punishment]} */ [room, punishment]) => { const [punishType, punishUserid, , reason] = punishment; if (punishType in PUNISHMENT_POINT_VALUES) points += PUNISHMENT_POINT_VALUES[punishType]; let punishDesc = Punishments.roomPunishmentTypes.get(punishType); if (!punishDesc) punishDesc = `punished`; - if (punishUserid !== user.userid) punishDesc += ` as ${punishUserid}`; + if (punishUserid !== userid) punishDesc += ` as ${punishUserid}`; if (reason) punishDesc += `: ${reason}`; return `<<${room}>> (${punishDesc})`; }).join(', '); if (Config.punishmentautolock && points >= AUTOLOCK_POINT_THRESHOLD) { - let rooms = punishments.map(([room]) => room).join(', '); + let rooms = punishments.map((/** @type {[string]} */ [room]) => room).join(', '); let reason = `Autolocked for having punishments in ${punishments.length} rooms: ${rooms}`; - let message = `${user.name || `[${toId(user)}]`} was locked for having punishments in ${punishments.length} rooms: ${punishmentText}`; + // @ts-ignore + let message = `${user.name || userid} was locked for having punishments in ${punishments.length} rooms: ${punishmentText}`; Punishments.autolock(user, 'staff', 'PunishmentMonitor', reason, message); if (typeof user !== 'string') user.popup("|modal|You've been locked for breaking the rules in multiple chatrooms.\n\nIf you feel that your lock was unjustified, you can still PM staff members (%, @, &, and ~) to discuss it" + (Config.appealurl ? " or you can appeal:\n" + Config.appealurl : ".") + "\n\nYour lock will expire in a few days."); } else { - Monitor.log(`[PunishmentMonitor] ${user.name} currently has punishments in ${punishments.length} rooms: ${punishmentText}`); + // @ts-ignore + Monitor.log(`[PunishmentMonitor] ${user.name || userid} currently has punishments in ${punishments.length} rooms: ${punishmentText}`); } } }; diff --git a/server/room-battle.js b/server/room-battle.js new file mode 100644 index 0000000000000..d726c3d85ff1c --- /dev/null +++ b/server/room-battle.js @@ -0,0 +1,1079 @@ +/** + * Room Battle + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This file wraps the simulator in an implementation of the RoomGame + * interface. It also abstracts away the multi-process nature of the + * simulator. + * + * For the actual battle simulation, see sim/ + * + * @license MIT + */ + +'use strict'; + +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; + +/** 5 seconds */ +const TICK_TIME = 5; +const SECONDS = 1000; + +// Timer constants: In seconds, should be multiple of TICK_TIME +const STARTING_TIME = 150; +const MAX_TURN_TIME = 150; +const STARTING_TIME_CHALLENGE = 300; +const STARTING_GRACE_TIME = 60; +const MAX_TURN_TIME_CHALLENGE = 300; + +const DISCONNECTION_TIME = 60; +const DISCONNECTION_BANK_TIME = 300; + +// time after a player disabling the timer before they can re-enable it +const TIMER_COOLDOWN = 20 * SECONDS; + +class BattlePlayer { + /** + * @param {User} user + * @param {Battle} game + * @param {PlayerSlot} slot + */ + constructor(user, game, slot) { + this.userid = user.userid; + this.name = user.name; + this.game = game; + user.games.add(this.game.id); + user.updateSearch(); + + this.slot = slot; + this.slotNum = Number(slot.charAt(1)) - 1; + this.active = true; + + for (const connection of user.connections) { + if (connection.inRooms.has(game.id)) { + Sockets.channelMove(connection.worker, this.game.id, this.slotNum + 1, connection.socketid); + } + } + } + destroy() { + let user = Users(this.userid); + if (user) { + for (const connection of user.connections) { + Sockets.channelMove(connection.worker, this.game.id, 0, connection.socketid); + } + user.games.delete(this.game.id); + user.updateSearch(); + } + this.game[this.slot] = null; + } + updateChannel(/** @type {User | Connection} */ user) { + if (user instanceof Users.Connection) { + // "user" is actually a connection + Sockets.channelMove(user.worker, this.game.id, this.slotNum + 1, user.socketid); + return; + } + for (const connection of user.connections) { + Sockets.channelMove(connection.worker, this.game.id, this.slotNum + 1, connection.socketid); + } + } + + toString() { + return this.userid; + } + send(/** @type {string} */ data) { + let user = Users(this.userid); + if (user) user.send(data); + } + sendRoom(/** @type {string} */ data) { + let user = Users(this.userid); + if (user) user.sendTo(this.game.id, data); + } +} + +class BattleTimer { + /** + * @param {Battle} battle + */ + constructor(battle) { + /** @type {Battle} */ + this.battle = battle; + + /** @type {NodeJS.Timer?} */ + this.timer = null; + /** @type {Set} */ + this.timerRequesters = new Set(); + /** + * Total timer. + * + * Starts at 210 per player in a ladder battle. Goes down by 5 + * every tick. Goes up by 10 every turn (with some complications - + * see `nextRequest`), capped at starting time. The player loses if + * this reaches 0. + * + * The equivalent of "Your Time" in VGC. + * + * @type {number[]} + */ + this.secondsLeft = []; + /** + * Turn timer. + * + * Set equal to the player's overall timer, but capped at 150 + * seconds in a ladder battle. Goes down by 5 every tick. + * Tracked separately from the overall timer, and the player also + * loses if this reaches 0. + * + * @type {number[]} + */ + this.turnSecondsLeft = []; + /** + * Disconnect timer. + * Starts at 60 seconds. While the player is disconnected, this + * will go down by 5 every tick. Tracked separately from the + * overall timer, and the player also loses if this reaches 0. + * + * Mostly exists so impatient players don't have to wait the full + * 150 seconds against a disconnected opponent. + * + * @type {number[]} + */ + this.dcSecondsLeft = []; + /** + * Used to track a user's last known connection status, and display + * the proper message when it changes. + * @type {boolean[]} + */ + this.connected = []; + + /** + * Last tick, as milliseconds since UNIX epoch. + * Represents the last time a tick happened. + */ + this.lastTick = 0; + + /** Debug mode; true to output detailed timer info every tick */ + this.debug = false; + + this.lastDisabledTime = 0; + this.lastDisabledByUser = null; + + const hasLongTurns = Dex.getFormat(battle.format, true).gameType !== 'singles'; + const isChallenge = (!battle.rated && !battle.room.tour); + const timerSettings = Dex.getFormat(battle.format, true).timer; + + // so that Object.assign doesn't overwrite anything with `undefined` + for (const k in timerSettings) { + // @ts-ignore + if (timerSettings[k] === undefined) delete timerSettings[k]; + } + + /** @type {GameTimerSettings} */ + this.settings = Object.assign({ + dcTimer: !isChallenge, + dcTimerBank: isChallenge, + starting: isChallenge ? STARTING_TIME_CHALLENGE : STARTING_TIME, + grace: STARTING_GRACE_TIME, + addPerTurn: hasLongTurns ? 25 : 10, + maxPerTurn: isChallenge ? MAX_TURN_TIME_CHALLENGE : MAX_TURN_TIME, + maxFirstTurn: isChallenge ? MAX_TURN_TIME_CHALLENGE : MAX_TURN_TIME, + timeoutAutoChoose: false, + accelerate: !timerSettings, + }, timerSettings); + if (this.settings.maxPerTurn <= 0) this.settings.maxPerTurn = Infinity; + + for (let slotNum = 0; slotNum < 2; slotNum++) { + this.secondsLeft.push(this.settings.starting + this.settings.grace); + this.turnSecondsLeft.push(-1); + this.dcSecondsLeft.push(this.settings.dcTimerBank ? DISCONNECTION_BANK_TIME : DISCONNECTION_TIME); + this.connected.push(true); + } + } + start(/** @type {User} */ requester) { + let userid = requester ? requester.userid : 'staff'; + if (this.timerRequesters.has(userid)) return false; + if (this.timer) { + this.battle.room.add(`|inactive|${requester ? requester.name : userid} also wants the timer to be on.`).update(); + this.timerRequesters.add(userid); + return false; + } + if (requester && this.battle.players[requester.userid] && this.lastDisabledByUser === requester.userid) { + const remainingCooldownMs = (this.lastDisabledTime || 0) + TIMER_COOLDOWN - Date.now(); + if (remainingCooldownMs > 0) { + this.battle.players[requester.userid].sendRoom(`|inactiveoff|The timer can't be re-enabled so soon after disabling it (${Math.ceil(remainingCooldownMs / SECONDS)} seconds remaining).`); + return false; + } + } + this.timerRequesters.add(userid); + this.nextRequest(true); + const requestedBy = requester ? ` (requested by ${requester.name})` : ``; + this.battle.room.add(`|inactive|Battle timer is ON: inactive players will automatically lose when time's up.${requestedBy}`).update(); + return true; + } + stop(/** @type {User} */ requester) { + if (requester) { + if (!this.timerRequesters.has(requester.userid)) return false; + this.timerRequesters.delete(requester.userid); + this.lastDisabledByUser = requester.userid; + this.lastDisabledTime = Date.now(); + } else { + this.timerRequesters.clear(); + } + if (this.timerRequesters.size) { + this.battle.room.add(`|inactive|${requester.name} no longer wants the timer on, but the timer is staying on because ${[...this.timerRequesters].join(', ')} still does.`).update(); + return false; + } + if (!this.timer) return false; + clearTimeout(this.timer); + this.timer = null; + this.battle.room.add(`|inactiveoff|Battle timer is now OFF.`).update(); + return true; + } + waitingForChoice(/** @type {PlayerSlot} */ slot) { + return !this.battle.requests[slot].isWait; + } + nextRequest(isFirst = false) { + if (this.timer) clearTimeout(this.timer); + if (!this.timerRequesters.size) return; + if (this.secondsLeft.some(t => t <= 0)) return; + const maxTurnTime = (isFirst ? this.settings.maxFirstTurn : 0) || this.settings.maxPerTurn; + + let addPerTurn = isFirst ? 0 : this.settings.addPerTurn; + if (this.settings.accelerate && addPerTurn) { + // after turn 100ish: 15s/turn -> 10s/turn + if (this.battle.requestCount > 200) { + addPerTurn -= TICK_TIME; + } + // after turn 200ish: 10s/turn -> 7s/turn + if (this.battle.requestCount > 400 && Math.floor(this.battle.requestCount / 2) % 2) { + addPerTurn = 0; + } + } + + const room = this.battle.room; + for (const slotNum of this.secondsLeft.keys()) { + const slot = /** @type {PlayerSlot} */ ('p' + (slotNum + 1)); + const player = this.battle[slot]; + const playerName = this.battle.playerNames[slotNum]; + + if (!isFirst) { + this.secondsLeft[slotNum] = Math.min(this.secondsLeft[slotNum] + addPerTurn, this.settings.starting); + } + this.turnSecondsLeft[slotNum] = Math.min(this.secondsLeft[slotNum], maxTurnTime); + + const secondsLeft = this.turnSecondsLeft[slotNum]; + let grace = this.secondsLeft[slotNum] - this.settings.starting; + if (grace < 0) grace = 0; + if (player) player.sendRoom(`|inactive|Time left: ${secondsLeft} sec this turn | ${this.secondsLeft[slotNum] - grace} sec total` + (grace ? ` | ${grace} sec grace` : ``)); + if (secondsLeft <= 30) { + room.add(`|inactive|${playerName} has ${secondsLeft} seconds left this turn.`); + } + if (this.debug) { + room.add(`||${playerName} | Time left: ${secondsLeft} sec this turn | ${this.secondsLeft[slotNum]} sec total | +${addPerTurn} seconds`); + } + } + room.update(); + this.lastTick = Date.now(); + this.timer = setTimeout(() => this.nextTick(), TICK_TIME * SECONDS); + } + nextTick() { + if (this.timer) clearTimeout(this.timer); + if (this.battle.ended) return; + const room = this.battle.room; + for (const slotNum of this.secondsLeft.keys()) { + const slot = /** @type {PlayerSlot} */ ('p' + (slotNum + 1)); + const connected = this.connected[slotNum]; + + if (!this.waitingForChoice(slot)) continue; + if (connected) { + this.secondsLeft[slotNum] -= TICK_TIME; + this.turnSecondsLeft[slotNum] -= TICK_TIME; + } else { + this.dcSecondsLeft[slotNum] -= TICK_TIME; + if (!this.settings.dcTimerBank) { + this.secondsLeft[slotNum] -= TICK_TIME; + this.turnSecondsLeft[slotNum] -= TICK_TIME; + } + } + + let dcSecondsLeft = this.dcSecondsLeft[slotNum]; + if (dcSecondsLeft <= 0) this.turnSecondsLeft[slotNum] = 0; + const secondsLeft = this.turnSecondsLeft[slotNum]; + if (!secondsLeft) continue; + + if (!connected && (dcSecondsLeft <= secondsLeft || this.settings.dcTimerBank)) { + // dc timer is shown only if it's lower than turn timer or you're in timer bank mode + if (dcSecondsLeft % 30 === 0 || dcSecondsLeft <= 20) { + room.add(`|inactive|${this.battle.playerNames[slotNum]} has ${dcSecondsLeft} seconds to reconnect!`); + } + } else { + // regular turn timer shown + if (secondsLeft % 30 === 0 || secondsLeft <= 20) { + room.add(`|inactive|${this.battle.playerNames[slotNum]} has ${secondsLeft} seconds left.`); + } + } + } + if (this.debug) { + room.add(`||[${this.battle.playerNames[0]} has ${this.turnSecondsLeft[0]}s this turn / ${this.secondsLeft[0]}s total]`); + room.add(`||[${this.battle.playerNames[0]} has ${this.turnSecondsLeft[0]}s this turn / ${this.secondsLeft[0]}s total]`); + } + room.update(); + if (!this.checkTimeout()) { + this.timer = setTimeout(() => this.nextTick(), TICK_TIME * 1000); + } + } + checkActivity() { + for (const slotNum of this.secondsLeft.keys()) { + const slot = /** @type {PlayerSlot} */ ('p' + (slotNum + 1)); + const player = this.battle[slot]; + const isConnected = !!(player && player.active); + + if (isConnected === this.connected[slotNum]) continue; + + if (!isConnected) { + // player has disconnected + this.connected[slotNum] = false; + if (!this.settings.dcTimerBank) { + // don't wait longer than 6 ticks (1 minute) + if (this.settings.dcTimer) { + this.dcSecondsLeft[slotNum] = DISCONNECTION_TIME; + } else { + // arbitrary large number + this.dcSecondsLeft[slotNum] = DISCONNECTION_TIME * 10; + } + } + + if (this.timerRequesters.size) { + let msg = `!`; + + if (this.settings.dcTimer) { + msg = ` and has a minute to reconnect!`; + } + if (this.settings.dcTimerBank) { + if (this.dcSecondsLeft[slotNum] > 0) { + msg = ` and has ${this.dcSecondsLeft[slotNum]} seconds to reconnect!`; + } else { + msg = ` and has no disconnection time left!`; + } + } + this.battle.room.add(`|inactive|${this.battle.playerNames[slotNum]} disconnected${msg}`).update(); + } + } else { + // player has reconnected + this.connected[slotNum] = true; + if (this.timerRequesters.size) { + let timeLeft = ``; + if (this.waitingForChoice(slot)) { + timeLeft = ` and has ${this.turnSecondsLeft[slotNum]} seconds left`; + } + this.battle.room.add(`|inactive|${this.battle.playerNames[slotNum]} reconnected${timeLeft}.`).update(); + } + } + } + } + checkTimeout() { + if (this.turnSecondsLeft.every(t => t <= 0)) { + if (!this.settings.timeoutAutoChoose || this.secondsLeft.every(t => t <= 0)) { + this.battle.room.add(`|-message|All players are inactive.`).update(); + this.battle.tie(); + return true; + } + } + let didSomething = false; + for (const [slotNum, seconds] of this.turnSecondsLeft.entries()) { + if (seconds) continue; + if (this.settings.timeoutAutoChoose && this.secondsLeft[slotNum] > 0 && this.connected[slotNum]) { + const slot = 'p' + (slotNum + 1); + this.battle.stream.write(`>${slot} default`); + didSomething = true; + } else { + this.battle.forfeitSlot(slotNum, ' lost due to inactivity.'); + return true; + } + } + return didSomething; + } +} + +/** + * @typedef {object} BattleRequestTracker + * @property {number} rqid + * @property {string} request + * @property {'cantUndo' | true | false} isWait true = user has decided, false = user has yet to decide, 'cantUndo' = waiting on other user (U-turn, faint-switch) or uncancellable (trapping ability) + * @property {string} choice + */ + +class Battle { + /** + * @param {GameRoom} room + * @param {string} formatid + * @param {AnyObject} options + */ + constructor(room, formatid, options) { + let format = Dex.getFormat(formatid, true); + this.gameid = 'battle'; + this.id = room.id; + /** @type {GameRoom} */ + this.room = room; + this.title = format.name; + if (!this.title.endsWith(" Battle")) this.title += " Battle"; + this.allowRenames = options.allowRenames !== undefined ? !!options.allowRenames : (!options.rated && !options.tour); + + this.format = formatid; + /** + * The lower player's rating, for searching purposes. + * 0 for unrated battles. 1 for unknown ratings. + * @type {number} + */ + this.rated = options.rated || 0; + this.started = false; + this.ended = false; + this.active = false; + + /** @type {{[userid: string]: BattlePlayer}} */ + this.players = Object.create(null); + this.playerCount = 0; + this.playerCap = 2; + /** @type {BattlePlayer?} */ + this.p1 = null; + /** @type {BattlePlayer?} */ + this.p2 = null; + + /** + * p1 and p2 may be null in unrated games, but playerNames retains + * the most recent usernames in those slots, for use by various + * functions that need names for the slots. + */ + this.playerNames = ["Player 1", "Player 2"]; + /** + * @type {{p1: BattleRequestTracker, p2: BattleRequestTracker}} + */ + this.requests = { + p1: /** @type {BattleRequestTracker} */ ({rqid: 0, request: '', isWait: 'cantUndo', choice: ''}), + p2: /** @type {BattleRequestTracker} */ ({rqid: 0, request: '', isWait: 'cantUndo', choice: ''}), + }; + this.timer = new BattleTimer(this); + + // data to be logged + /** + * Has this player consented to input log export? If so, set this + * to the userid allowed to export. + * @type {[string, string]?} + */ + this.allowExtraction = null; + + this.logData = null; + this.endType = 'normal'; + this.score = null; + this.inputLog = null; + + this.rqid = 1; + this.requestCount = 0; + + this.stream = PM.createStream(); + + let ratedMessage = ''; + if (options.ratedMessage) { + ratedMessage = options.ratedMessage; + } if (this.rated) { + ratedMessage = 'Rated battle'; + } else if (this.room.tour) { + ratedMessage = 'Tournament battle'; + } + + // @ts-ignore + this.room.game = this; + this.room.battle = this; + + let battleOptions = { + formatid: this.format, + id: this.id, + rated: ratedMessage, + seed: options.seed, + }; + if (options.inputLog) { + this.stream.write(options.inputLog); + } else { + this.stream.write(`>start ` + JSON.stringify(battleOptions)); + } + if (Config.forcetimer) this.timer.start(); + + this.listen(); + + if (options.p1) this.addPlayer(options.p1, 'p1', options.p1team, true); + if (options.p2) this.addPlayer(options.p2, 'p2', options.p2team, true); + } + + checkActive() { + let active = true; + if (this.ended || !this.started) { + active = false; + } else if (!this.p1 || !this.p1.active) { + active = false; + } else if (!this.p2 || !this.p2.active) { + active = false; + } + Rooms.global.battleCount += (active ? 1 : 0) - (this.active ? 1 : 0); + this.room.active = active; + this.active = active; + if (Rooms.global.battleCount === 0) Rooms.global.automaticKillRequest(); + } + /** + * @param {User} user + * @param {string} data + */ + choose(user, data) { + const player = this.players[user.userid]; + const [choice, rqid] = data.split('|', 2); + if (!player) return; + let request = this.requests[player.slot]; + if (request.isWait !== false && request.isWait !== true) { + player.sendRoom(`|error|[Invalid choice] There's nothing to choose`); + return; + } + if ((this.requests.p1.isWait && this.requests.p2.isWait) || // too late + (rqid && rqid !== '' + request.rqid)) { // WAY too late + player.sendRoom(`|error|[Invalid choice] Sorry, too late to make a different move; the next turn has already started`); + return; + } + user.lastDecision = Date.now(); + request.isWait = true; + request.choice = choice; + + this.stream.write(`>${player.slot} ${choice}`); + } + /** + * @param {User} user + * @param {string} data + */ + undo(user, data) { + const player = this.players[user.userid]; + const [, rqid] = data.split('|', 2); + if (!player) return; + let request = this.requests[player.slot]; + if (request.isWait !== true) { + player.sendRoom(`|error|[Invalid choice] There's nothing to cancel`); + return; + } + if ((this.requests.p1.isWait && this.requests.p2.isWait) || // too late + (rqid && rqid !== '' + request.rqid)) { // WAY too late + player.sendRoom(`|error|[Invalid choice] Sorry, too late to cancel; the next turn has already started`); + return; + } + request.isWait = false; + + this.stream.write(`>${player.slot} undo`); + } + /** + * @param {User} user + */ + joinGame(user) { + if (this.playerCount >= 2) { + user.popup(`This battle already has two players.`); + return false; + } + if (!user.can('joinbattle', null, this.room)) { + user.popup(`You must be a set as a player to join a battle you didn't start. Ask a player to use /addplayer on you to join this battle.`); + return false; + } + + if (!this.addPlayer(user)) { + user.popup(`Failed to join battle.`); + return false; + } + this.room.update(); + return true; + } + /** + * @param {User} user + */ + leaveGame(user) { + if (!user) return false; // ... + if (this.room.rated || this.room.tour) { + user.popup(`Players can't be swapped out in a ${this.room.tour ? "tournament" : "rated"} battle.`); + return false; + } + if (!this.removePlayer(user)) { + user.popup(`Failed to leave battle.`); + return false; + } + this.room.auth[user.userid] = '+'; + this.room.update(); + return true; + } + + async listen() { + let next; + while ((next = await this.stream.read())) { + this.receive(next.split('\n')); + } + if (!this.ended) { + this.room.add(`|bigerror|The simulator process has crashed. We've been notified and will fix this ASAP.`); + Monitor.crashlog(new Error(`Process disconnected`), `A battle`); + this.started = true; + this.ended = true; + this.checkActive(); + } + } + receive(/** @type {string[]} */ lines) { + switch (lines[0]) { + case 'update': + for (const line of lines.slice(1)) { + this.room.add(line); + } + this.room.update(); + if (!this.ended) this.timer.nextRequest(); + this.checkActive(); + break; + + case 'sideupdate': { + let slot = /** @type {PlayerSlot} */ (lines[1]); + let player = this[slot]; + if (lines[2].startsWith(`|error|[Invalid choice] Can't do anything`)) { + // ... should not happen + } else if (lines[2].startsWith(`|error|[Invalid choice]`)) { + let request = this.requests[slot]; + request.isWait = false; + request.choice = ''; + } else if (lines[2].startsWith(`|request|`)) { + this.rqid++; + let request = JSON.parse(lines[2].slice(9)); + request.rqid = this.rqid; + const requestJSON = JSON.stringify(request); + this.requests[slot] = { + rqid: this.rqid, + request: requestJSON, + isWait: request.wait ? 'cantUndo' : false, + choice: '', + }; + this.requestCount++; + if (player) player.sendRoom(`|request|${requestJSON}`); + break; + } + if (player) player.sendRoom(lines[2]); + break; + } + + case 'end': + this.logData = JSON.parse(lines[1]); + this.score = this.logData.score; + this.inputLog = this.logData.inputLog; + this.started = true; + if (!this.ended) { + this.ended = true; + this.onEnd(this.logData.winner); + this.removeAllPlayers(); + } + this.checkActive(); + break; + } + } + /** + * @param {any} winner + */ + async onEnd(winner) { + // Declare variables here in case we need them for non-rated battles logging. + let p1score = 0.5; + const winnerid = toId(winner); + + // Check if the battle was rated to update the ladder, return its response, and log the battle. + let p1name = this.playerNames[0]; + let p2name = this.playerNames[1]; + let p1id = toId(p1name); + let p2id = toId(p2name); + if (this.room.rated) { + this.room.rated = 0; + + if (winnerid === p1id) { + p1score = 1; + } else if (winnerid === p2id) { + p1score = 0; + } + + winner = Users.get(winnerid); + if (winner && !winner.registered) { + this.room.sendUser(winner, '|askreg|' + winner.userid); + } + const [score, p1rating, p2rating] = await Ladders(this.format).updateRating(p1name, p2name, p1score, this.room); + this.logBattle(score, p1rating, p2rating); + } else if (Config.logchallenges) { + if (winnerid === p1id) { + p1score = 1; + } else if (winnerid === p2id) { + p1score = 0; + } + this.logBattle(p1score); + } else { + this.logData = null; + } + if (Config.autosavereplays) { + let uploader = Users.get(winnerid || p1id); + if (uploader && uploader.connections[0]) { + Chat.parse('/savereplay', this.room, uploader, uploader.connections[0]); + } + } + const parentGame = this.room.parent && this.room.parent.game; + if (parentGame && parentGame.onBattleWin) { + parentGame.onBattleWin(this.room, winnerid); + } + this.room.update(); + } + /** + * @param {number} p1score + * @param {AnyObject?} p1rating + * @param {AnyObject?} p2rating + */ + async logBattle(p1score, p1rating = null, p2rating = null) { + if (Dex.getFormat(this.format, true).noLog) return; + let logData = this.logData; + if (!logData) return; + this.logData = null; // deallocate to save space + logData.log = this.room.getLog(3).split('\n'); // replay log (exact damage) + + // delete some redundant data + if (p1rating) { + delete p1rating.formatid; + delete p1rating.username; + delete p1rating.rpsigma; + delete p1rating.sigma; + } + if (p2rating) { + delete p2rating.formatid; + delete p2rating.username; + delete p2rating.rpsigma; + delete p2rating.sigma; + } + + logData.p1rating = p1rating; + logData.p2rating = p2rating; + logData.endType = this.endType; + if (!p1rating) logData.ladderError = true; + const date = new Date(); + logData.timestamp = '' + date; + logData.id = this.room.id; + logData.format = this.room.format; + + const logsubfolder = Chat.toTimestamp(date).split(' ')[0]; + const logfolder = logsubfolder.split('-', 2).join('-'); + const tier = this.room.format.toLowerCase().replace(/[^a-z0-9]+/g, ''); + const logpath = `logs/${logfolder}/${tier}/${logsubfolder}/`; + await FS(logpath).mkdirp(); + await FS(logpath + this.room.id + '.log.json').write(JSON.stringify(logData)); + //console.log(JSON.stringify(logData)); + } + /** + * @param {User} user + * @param {Connection?} connection + */ + onConnect(user, connection = null) { + // this handles joining a battle in which a user is a participant, + // where the user has already identified before attempting to join + // the battle + const player = this.players[user.userid]; + if (!player) return; + player.updateChannel(connection || user); + const request = this.requests[player.slot]; + if (request) { + let data = `|request|${request.request}`; + if (request.choice) data += `\n|sentchoice|${request.choice}`; + (connection || user).sendTo(this.id, data); + } + if (!player.active) this.onJoin(user); + } + /** + * @param {User} user + * @param {Connection?} connection + */ + onUpdateConnection(user, connection = null) { + this.onConnect(user, connection); + } + /** + * @param {User} user + * @param {string} oldUserid + * @param {boolean} isJoining + * @param {boolean} isForceRenamed + */ + onRename(user, oldUserid, isJoining, isForceRenamed) { + if (user.userid === oldUserid) return; + if (!this.players) { + // !! should never happen but somehow still does + user.games.delete(this.id); + return; + } + if (!(oldUserid in this.players)) { + if (user.userid in this.players) { + // this handles a user renaming themselves into a user in the + // battle (e.g. by using /nick) + this.onConnect(user); + } + return; + } + if (!this.allowRenames) { + let player = this.players[oldUserid]; + if (player) { + const message = isForceRenamed ? " lost by having an inappropriate name." : " forfeited by changing their name."; + this.forfeitSlot(player.slotNum, message); + } + if (!(user.userid in this.players)) { + user.games.delete(this.id); + } + return; + } + if (user.userid in this.players) return; + let player = this.players[oldUserid]; + this.players[user.userid] = player; + player.userid = user.userid; + player.name = user.name; + delete this.players[oldUserid]; + const options = { + name: user.name, + avatar: user.avatar, + }; + this.stream.write(`>player ${player.slot} ` + JSON.stringify(options)); + } + /** + * @param {User} user + */ + onJoin(user) { + let player = this.players[user.userid]; + if (player && !player.active) { + player.active = true; + this.timer.checkActivity(); + this.room.add(`|player|${player.slot}|${user.name}|${user.avatar}`); + } + } + /** + * @param {User} user + */ + onLeave(user) { + let player = this.players[user.userid]; + if (player && player.active) { + player.sendRoom(`|request|null`); + player.active = false; + this.timer.checkActivity(); + this.room.add(`|player|${player.slot}|`); + } + } + + /** + * @param {User} user + */ + win(user) { + if (!user) { + this.tie(); + return true; + } + let player = this.players[user.userid]; + if (!player) return false; + this.stream.write(`>forcewin ${player.slot}`); + } + tie() { + this.stream.write(`>forcetie`); + } + tiebreak() { + this.stream.write(`>tiebreak`); + } + /** + * @param {User} user + * @param {string} message + */ + forfeit(user, message = '') { + if (!this.players) { + // should never happen + console.log("user is: " + user.name); + console.log(" alts: " + Object.keys(user.prevNames)); + console.log(" battle: " + this.id); + return false; + } + let slotNum = -1; + if (user.userid in this.players) slotNum = this.players[user.userid].slotNum; + if (slotNum === -1) return false; + return this.forfeitSlot(slotNum, message); + } + + /** + * @param {number} slotNum + * @param {string} message + */ + forfeitSlot(slotNum, message = '') { + if (this.ended || !this.started) return false; + + let name = this.playerNames[slotNum]; + + if (!message) message = ' forfeited.'; + this.room.add(`|-message|${name}${message}`); + this.endType = 'forfeit'; + const otherids = ['p2', 'p1']; + this.stream.write(`>forcewin ${otherids[slotNum]}`); + return true; + } + + /** + * @param {User} user + * @param {PlayerSlot?} slot + * @param {string} team + */ + addPlayer(user, slot = null, team = '', initializing = false) { + if (user.userid in this.players) return false; + if (this.playerCount >= this.playerCap) return false; + let player = this.makePlayer(user, slot, team); + if (!player) return false; + this.players[user.userid] = player; + this.playerCount++; + this.room.auth[user.userid] = Users.PLAYER_SYMBOL; + if (user.inRooms.has(this.id)) this.onConnect(user); + if (this.playerCount >= 2) { + // @ts-ignore + this.room.title = `${this.p1.name} vs. ${this.p2.name}`; + this.room.send(`|title|${this.room.title}`); + } + if (!initializing) { + this.room.add(`|player|${player.slot}|${user.name}|${user.avatar}`); + } + return true; + } + + /** + * @param {User} user + * @param {PlayerSlot?} slot + * @param {string} team + */ + makePlayer(user, slot = null, team = '') { + if (!slot) { + let slotNum = 0; + while (this[/** @type {PlayerSlot} */ ('p' + (slotNum + 1))]) slotNum++; + slot = /** @type {PlayerSlot} */ ('p' + (slotNum + 1)); + } + // console.log('joining: ' + user.name + ' ' + slot); + + if (this[slot]) throw new Error(`Player already exists in ${slot} in ${this.id}`); + let slotNum = parseInt(slot.charAt(1)) - 1; + let player = new BattlePlayer(user, this, slot); + this[slot] = player; + this.playerNames[slotNum] = player.name; + + /**@type {{name: string, avatar: string, team?: string}} */ + let options = { + name: player.name, + avatar: '' + user.avatar, + }; + if (!this.started) { + options.team = team; + } + this.stream.write(`>player ${slot} ` + JSON.stringify(options)); + if (this.started) this.onUpdateConnection(user); + if (this.p1 && this.p2) { + this.started = true; + const user1 = Users(this.p1.userid); + const user2 = Users(this.p2.userid); + if (!user1) throw new Error(`User ${this.p1.userid} not found on ${this.id} battle creation`); + if (!user2) throw new Error(`User ${this.p2.userid} not found on ${this.id} battle creation`); + Rooms.global.onCreateBattleRoom(user1, user2, this.room, {rated: this.rated}); + } + return player; + } + + /** + * @param {User} user + */ + removePlayer(user) { + if (!this.allowRenames) return false; + let player = this.players[user.userid]; + if (!player) return false; + if (player.active) { + this.room.add(`|player|${player.slot}|`); + } + player.destroy(); + delete this.players[user.userid]; + this.playerCount--; + return true; + } + + removeAllPlayers() { + for (let i in this.players) { + this.players[i].destroy(); + delete this.players[i]; + this.playerCount--; + } + } + + destroy() { + this.ended = true; + this.stream.destroy(); + if (this.active) { + Rooms.global.battleCount += -1; + this.active = false; + } + + for (let i in this.players) { + this.players[i].destroy(); + } + // @ts-ignore + this.players = null; + // @ts-ignore + this.room = null; + } +} + +exports.RoomBattlePlayer = BattlePlayer; +exports.RoomBattleTimer = BattleTimer; +exports.RoomBattle = Battle; + +/********************************************************* + * Process manager + *********************************************************/ + +/** @type {typeof import('../lib/process-manager').StreamProcessManager} */ +const StreamProcessManager = require(/** @type {any} */('../.lib-dist/process-manager')).StreamProcessManager; + +const PM = new StreamProcessManager(module, () => { + /** @type {typeof import('../sim/battle-stream').BattleStream} */ + const BattleStream = require(/** @type {any} */ ('../.sim-dist/battle-stream')).BattleStream; + return new BattleStream({keepAlive: true}); +}); + +if (!PM.isParentProcess) { + // This is a child process! + // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored + global.Config = require('../config/config'); + global.Chat = require('./chat'); + // @ts-ignore ??? + global.Monitor = { + /** + * @param {Error} error + * @param {string} source + * @param {{}?} details + */ + crashlog(error, source = 'A simulator process', details = null) { + const repr = JSON.stringify([error.name, error.message, source, details]); + // @ts-ignore + process.send(`THROW\n@!!@${repr}\n${error.stack}`); + }, + }; + global.__version = ''; + try { + const execSync = require('child_process').execSync; + const out = execSync('git merge-base master HEAD', { + stdio: ['ignore', 'pipe', 'ignore'], + }); + global.__version = ('' + out).trim(); + } catch (e) {} + + if (Config.crashguard) { + // graceful crash - allow current battles to finish before restarting + process.on('uncaughtException', err => { + Monitor.crashlog(err, 'A simulator process'); + }); + process.on('unhandledRejection', err => { + Monitor.crashlog(err, 'A simulator process Promise'); + }); + } + + /** @type {typeof import('../lib/repl').Repl} */ + const Repl = require(/** @type {any} */('../.lib-dist/repl')).Repl; + Repl.start(`sim-${process.pid}`, cmd => eval(cmd)); +} else { + PM.spawn(global.Config ? Config.simulatorprocesses : 1); +} + +exports.PM = PM; diff --git a/room-game.js b/server/room-game.js similarity index 57% rename from room-game.js rename to server/room-game.js index b1575f73a33fa..afe939e493422 100644 --- a/room-game.js +++ b/server/room-game.js @@ -19,6 +19,10 @@ // globally Rooms.RoomGamePlayer class RoomGamePlayer { + /** + * @param {User} user + * @param {RoomGame} game + */ constructor(user, game) { // we explicitly don't hold a reference to the user this.userid = user.userid; @@ -38,10 +42,16 @@ class RoomGamePlayer { toString() { return this.userid; } + /** + * @param {string} data + */ send(data) { let user = Users.getExact(this.userid); if (user) user.send(data); } + /** + * @param {string} data + */ sendRoom(data) { let user = Users.getExact(this.userid); if (user) user.sendTo(this.game.id, data); @@ -50,8 +60,12 @@ class RoomGamePlayer { // globally Rooms.RoomGame class RoomGame { + /** + * @param {ChatRoom | GameRoom} room + */ constructor(room) { this.id = room.id; + /** @type {ChatRoom | GameRoom} */ this.room = room; this.gameid = 'game'; this.title = 'Game'; @@ -59,16 +73,21 @@ class RoomGame { this.players = Object.create(null); this.playerCount = 0; this.playerCap = 0; + this.ended = false; } destroy() { this.room.game = null; - this.room = null; + this.room = /** @type {any} */ (null); for (let i in this.players) { this.players[i].destroy(); } } + /** + * @param {User} user + * @param {any[]} rest + */ addPlayer(user, ...rest) { if (user.userid in this.players) return false; if (this.playerCount >= this.playerCap) return false; @@ -79,10 +98,17 @@ class RoomGame { return true; } - makePlayer(user) { + /** + * @param {User} user + * @param {any[]} rest + */ + makePlayer(user, ...rest) { return new RoomGamePlayer(user, this); } + /** + * @param {User} user + */ removePlayer(user) { if (!this.allowRenames) return false; if (!(user.userid in this.players)) return false; @@ -92,6 +118,10 @@ class RoomGame { return true; } + /** + * @param {User} user + * @param {string} oldUserid + */ renamePlayer(user, oldUserid) { if (user.userid === oldUserid) { this.players[user.userid].name = user.name; @@ -137,37 +167,35 @@ class RoomGame { // connections, but a single PS user. Each tab can be in separate // rooms. - // onJoin(user) - // Called when a user joins a room. (i.e. when the user's first - // connection joins) - - // onRename(user, oldUserid, isJoining, isForceRenamed) - // Called when a user in the game is renamed. `isJoining` is true - // if the user was previously a guest, but now has a username. - // Check `!user.named` for the case where a user previously had a - // username but is now a guest. By default, updates a player's - // name as long as allowRenames is set to true. - - // onLeave(user) - // Called when a user leaves the room. (i.e. when the user's last - // connection leaves) - - // onConnect(user, connection) - // Called each time a connection joins a room (after onJoin if - // applicable). By default, this is also called when connection - // is updated in some way (such as by changing user or renaming). - // If you don't want this behavior, override onUpdateConnection - // and/or onRename. - - // onUpdateConnection(user, connection) - // Called for each connection in a room that changes users by - // merging into a different user. By default, runs the onConnect - // handler. - - // Player updates and an up-to-date report of what's going on in - // the game should be sent during `onConnect`. You should rarely - // need to handle the other events. + /** + * Called when a user joins a room. (i.e. when the user's first + * connection joins) + * + * While connection is passed, it should not usually be used: + * Any handling of connections should happen in onConnect. + * @param {User} user + * @param {Connection} connection + */ + onJoin(user, connection) {} + /** + * Called when a user is banned from the room this game is taking + * place in. + * @param {User} user + */ + removeBannedUser(user) {} + + /** + * Called when a user in the game is renamed. `isJoining` is true + * if the user was previously a guest, but now has a username. + * Check `!user.named` for the case where a user previously had a + * username but is now a guest. By default, updates a player's + * name as long as allowRenames is set to true. + * @param {User} user + * @param {string} oldUserid + * @param {boolean} isJoining + * @param {boolean} isForceRenamed + */ onRename(user, oldUserid, isJoining, isForceRenamed) { if (!this.allowRenames || (!user.named && !isForceRenamed)) { if (!(user.userid in this.players)) { @@ -180,9 +208,58 @@ class RoomGame { this.renamePlayer(user, oldUserid); } + /** + * Called when a user leaves the room. (i.e. when the user's last + * connection leaves) + * @param {User} user + */ + onLeave(user) {} + + /** + * Called each time a connection joins a room (after onJoin if + * applicable). By default, this is also called when connection + * is updated in some way (such as by changing user or renaming). + * If you don't want this behavior, override onUpdateConnection + * and/or onRename. + * @param {User} user + * @param {Connection} connection + */ + onConnect(user, connection) {} + + /** + * Called for each connection in a room that changes users by + * merging into a different user. By default, runs the onConnect + * handler. + * Player updates and an up-to-date report of what's going on in + * the game should be sent during `onConnect`. You should rarely + * need to handle the other events. + * @param {User} user + * @param {Connection} connection + */ onUpdateConnection(user, connection) { - if (this.onConnect) this.onConnect(user, connection); + this.onConnect(user, connection); } + + /** + * Called for every message a user sends while this game is active. + * Return an error message to prevent the message from being sent, or + * `false` to let it through. + * @param {string} message + * @param {User} user + * @return {string | false} + */ + onChatMessage(message, user) { + return false; + } + + /** + * Called for every message a user sends while this game is active. + * Unlike onChatMessage, this function runs after the message has been added to the room's log. + * Do not try to use this to block messages, use onChatMessage for that. + * @param {string} message + * @param {User} user + */ + onLogMessage(message, user) {} } // these exports are traditionally attached to rooms.js diff --git a/server/roomlogs.js b/server/roomlogs.js new file mode 100644 index 0000000000000..ed843b82c3cf9 --- /dev/null +++ b/server/roomlogs.js @@ -0,0 +1,310 @@ +/** + * Roomlogs + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This handles data storage for rooms. + * + * @license MIT license + */ + +'use strict'; + +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; + +/** + * Most rooms have three logs: + * - scrollback + * - roomlog + * - modlog + * This class keeps track of all three. + * + * The scrollback is stored in memory, and is the log you get when you + * join the room. It does not get moderator messages. + * + * The modlog is stored in + * `logs/modlog/modlog_.txt` + * It contains moderator messages, formatted for ease of search. + * + * The roomlog is stored in + * `logs/chat//-/--.txt` + * It contains (nearly) everything. + */ +class Roomlog { + /** + * @param {BasicChatRoom} room + * @param {{isMultichannel?: any, autoTruncate?: any, logTimes?: any}} [options] + */ + constructor(room, options = {}) { + this.id = room.id; + /** + * Scrollback log + * @type {string[]} + */ + this.log = []; + this.broadcastBuffer = ''; + + /** + * Battle rooms are multichannel, which means their logs are split + * into four channels, public, p1, p2, full. + */ + this.isMultichannel = !!options.isMultichannel; + /** + * Chat rooms auto-truncate, which means it only stores the recent + * messages, if there are more. + */ + this.autoTruncate = !!options.autoTruncate; + /** + * Chat rooms include timestamps. + */ + this.logTimes = !!options.logTimes; + + /** + * undefined = uninitialized, + * null = disabled + * @type {WriteStream? | undefined} + */ + this.modlogStream = undefined; + /** + * undefined = uninitialized, + * null = disabled + * @type {WriteStream? | undefined} + */ + this.roomlogStream = undefined; + + // modlog/roomlog state + this.sharedModlog = false; + // TypeScript bug: can't infer + /** @type {string} */ + this.roomlogFilename = ''; + + this.setupModlogStream(); + this.setupRoomlogStream(true); + } + getScrollback(channel = 0) { + let log = this.log; + if (this.logTimes) log = [`|:|${~~(Date.now() / 1000)}`].concat(log); + if (!this.isMultichannel) { + return log.join('\n') + '\n'; + } + log = []; + for (let i = 0; i < this.log.length; ++i) { + const line = this.log[i]; + if (line === '|split') { + const ownLine = this.log[i + channel + 1]; + if (ownLine) log.push(ownLine); + i += 4; + } else { + log.push(line); + } + } + let textLog = log.join('\n') + '\n'; + if (channel === 0) { + return textLog.replace(/\n\|choice\|\|\n/g, '\n').replace(/\n\|seed\|\n/g, '\n'); + } + return textLog; + } + setupModlogStream() { + if (this.modlogStream !== undefined) return; + if (!this.id.includes('-')) { + this.modlogStream = FS(`logs/modlog/modlog_${this.id}.txt`).createAppendStream(); + return; + } + const sharedStreamId = this.id.split('-')[0]; + let stream = Roomlogs.sharedModlogs.get(sharedStreamId); + if (!stream) { + stream = FS(`logs/modlog/modlog_${sharedStreamId}.txt`).createAppendStream(); + Roomlogs.sharedModlogs.set(sharedStreamId, stream); + } + this.modlogStream = stream; + this.sharedModlog = true; + } + async setupRoomlogStream(sync = false) { + if (this.roomlogStream === null) return; + if (!Config.logchat) { + this.roomlogStream = null; + return; + } + if (this.id.startsWith('battle-')) { + this.roomlogStream = null; + return; + } + const date = new Date(); + const dateString = Chat.toTimestamp(date).split(' ')[0]; + const monthString = dateString.split('-', 2).join('-'); + const basepath = `logs/chat/${this.id}/`; + const relpath = `${monthString}/${dateString}.txt`; + + if (relpath === this.roomlogFilename) return; + + if (sync) { + FS(basepath + monthString).mkdirpSync(); + } else { + await FS(basepath + monthString).mkdirp(); + if (this.roomlogStream === null) return; + } + this.roomlogFilename = relpath; + if (this.roomlogStream) this.roomlogStream.end(); + this.roomlogStream = FS(basepath + relpath).createAppendStream(); + // Create a symlink to today's lobby log. + // These operations need to be synchronous, but it's okay + // because this code is only executed once every 24 hours. + let link0 = basepath + 'today.txt.0'; + FS(link0).unlinkIfExistsSync(); + try { + FS(link0).symlinkToSync(relpath); // intentionally a relative link + FS(link0).renameSync(basepath + 'today.txt'); + } catch (e) {} // OS might not support symlinks or atomic rename + if (!Roomlogs.rollLogTimer) Roomlogs.rollLogs(); + } + /** + * @param {string} message + */ + add(message) { + if (message.startsWith('|uhtmlchange|')) return this.uhtmlchange(message); + this.roomlog(message); + if (this.logTimes && message.startsWith('|c|')) { + message = '|c:|' + (~~(Date.now() / 1000)) + '|' + message.substr(3); + } + this.log.push(message); + this.broadcastBuffer += message + '\n'; + return this; + } + /** + * @param {string} username + */ + hasUsername(username) { + const userid = toId(username); + for (const line of this.log) { + if (line.startsWith('|c:|')) { + const curUserid = toId(line.split('|', 4)[3]); + if (curUserid === userid) return true; + } else if (line.startsWith('|c|')) { + const curUserid = toId(line.split('|', 3)[2]); + if (curUserid === userid) return true; + } + } + return false; + } + /** + * @param {string[]} userids + */ + clearText(userids) { + const messageStart = this.logTimes ? '|c:|' : '|c|'; + const section = this.logTimes ? 4 : 3; // ['', 'c' timestamp?, author, message] + /** @type {string[]} */ + let cleared = []; + this.log = this.log.filter(line => { + if (line.startsWith(messageStart)) { + const parts = Chat.splitFirst(line, '|', section); + const userid = toId(parts[section - 1]); + if (userids.includes(userid)) { + if (!cleared.includes(userid)) cleared.push(userid); + if (this.id.startsWith('battle-')) return true; // Don't remove messages in battle rooms to preserve evidence + return false; + } + } + return true; + }); + return cleared; + } + /** + * @param {string} message + */ + uhtmlchange(message) { + const thirdPipe = message.indexOf('|', 13); + const originalStart = '|uhtml|' + message.slice(13, thirdPipe + 1); + for (const [i, line] of this.log.entries()) { + if (line.startsWith(originalStart)) { + this.log[i] = originalStart + message.slice(thirdPipe + 1); + break; + } + } + this.broadcastBuffer += message + '\n'; + return this; + } + /** + * @param {string} message + */ + roomlog(message, date = new Date()) { + if (!this.roomlogStream) return; + const timestamp = Chat.toTimestamp(date).split(' ')[1] + ' '; + message = message.replace(/]* src="data:image\/png;base64,[^">]+"[^>]*>/g, ''); + this.roomlogStream.write(timestamp + message + '\n'); + } + /** + * @param {string} message + */ + modlog(message) { + if (!this.modlogStream) return; + this.modlogStream.write('[' + (new Date().toJSON()) + '] ' + message + '\n'); + } + static async rollLogs() { + if (Roomlogs.rollLogTimer === true) return; + if (Roomlogs.rollLogTimer) { + clearTimeout(Roomlogs.rollLogTimer); + } + Roomlogs.rollLogTimer = true; + for (const log of Roomlogs.roomlogs.values()) { + await log.setupRoomlogStream(); + } + const time = Date.now(); + const nextMidnight = new Date(time + 24 * 60 * 60 * 1000); + nextMidnight.setHours(0, 0, 1); + Roomlogs.rollLogTimer = setTimeout(() => Roomlog.rollLogs(), nextMidnight.getTime() - time); + } + truncate() { + if (!this.autoTruncate) return; + if (this.log.length > 100) { + this.log.splice(0, this.log.length - 100); + } + } + + destroy() { + let promises = []; + if (this.sharedModlog) { + this.modlogStream = null; + } + if (this.modlogStream) { + promises.push(this.modlogStream.end()); + this.modlogStream = null; + } + if (this.roomlogStream) { + promises.push(this.roomlogStream.end()); + this.roomlogStream = null; + } + Roomlogs.roomlogs.delete(this.id); + return Promise.all(promises); + } +} + +/** @type {Map} */ +const sharedModlogs = new Map(); + +/** @type {Map} */ +const roomlogs = new Map(); + +/** + * @param {BasicChatRoom} room + */ +function createRoomlog(room, options = {}) { + let roomlog = Roomlogs.roomlogs.get(room.id); + if (roomlog) throw new Error(`Roomlog ${room.id} already exists`); + + roomlog = new Roomlog(room, options); + Roomlogs.roomlogs.set(room.id, roomlog); + return roomlog; +} +const Roomlogs = { + create: createRoomlog, + Roomlog, + roomlogs, + sharedModlogs, + + rollLogs: Roomlog.rollLogs, + + /** @type {NodeJS.Timer? | true} */ + rollLogTimer: null, +}; + +module.exports = Roomlogs; diff --git a/server/rooms.js b/server/rooms.js new file mode 100644 index 0000000000000..63155feb55ce1 --- /dev/null +++ b/server/rooms.js @@ -0,0 +1,1715 @@ +/** + * Rooms + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * Every chat room and battle is a room, and what they do is done in + * rooms.js. There's also a global room which every user is in, and + * handles miscellaneous things like welcoming the user. + * + * @license MIT license + */ + +'use strict'; + +const TIMEOUT_EMPTY_DEALLOCATE = 10 * 60 * 1000; +const TIMEOUT_INACTIVE_DEALLOCATE = 40 * 60 * 1000; +const REPORT_USER_STATS_INTERVAL = 10 * 60 * 1000; + +const CRASH_REPORT_THROTTLE = 60 * 60 * 1000; + +const LAST_BATTLE_WRITE_THROTTLE = 10; + +/** @type {null} */ +const RETRY_AFTER_LOGIN = null; + +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; +const Roomlogs = require('./roomlogs'); + +/********************************************************* + * the Room object. + *********************************************************/ + +/** + * @typedef {{userid: string, time: number, guestNum: number, autoconfirmed: string}} MuteEntry + */ + +/** + * @abstract + */ +class BasicRoom { + /** + * @param {string} roomid + * @param {string} [title] + */ + constructor(roomid, title) { + this.id = roomid; + this.title = (title || roomid); + /** @type {?Room} */ + this.parent = null; + /** @type {(string[])?} */ + this.aliases = null; + + /** @type {{[userid: string]: User}} */ + this.users = Object.create(null); + this.userCount = 0; + + /** @type {'chat' | 'battle' | 'global'} */ + this.type = 'chat'; + /** @type {?{[userid: string]: string}} */ + this.auth = null; + + /** + * Scrollback log. This is the log that's sent to users when + * joining the room. Should roughly match what's on everyone's + * screen. + * @type {Roomlog?} + */ + this.log = null; + + /** @type {?RoomGame} */ + this.game = null; + /** @type {?RoomBattle} */ + this.battle = null; + this.active = false; + + /** @type {MuteEntry[]} */ + this.muteQueue = []; + /** @type {NodeJS.Timer?} */ + this.muteTimer = null; + + this.lastUpdate = 0; + this.lastBroadcast = ''; + this.lastBroadcastTime = 0; + + // room settings + + /** @type {AnyObject?} */ + this.chatRoomData = null; + /** @type {boolean | 'hidden' | 'voice'} */ + this.isPrivate = false; + this.isPersonal = false; + /** @type {string | boolean} */ + this.isHelp = false; + this.isOfficial = false; + this.reportJoins = true; + /** @type {number} */ + this.batchJoins = 0; + /** @type {NodeJS.Timer?} */ + this.reportJoinsInterval = null; + + this.logTimes = false; + /** @type {string? | true} */ + this.modjoin = null; + /** @type {string?} */ + this.modchat = null; + this.staffRoom = false; + /** @type {string | false} */ + this.language = false; + /** @type {false | number} */ + this.slowchat = false; + this.filterStretching = false; + this.filterEmojis = false; + this.filterCaps = false; + this.mafiaEnabled = false; + this.unoDisabled = false; + /** @type {Set?} */ + this.privacySetter = null; + /** @type {Map?} */ + this.subRooms = null; + this.gameNumber = 0; + this.highTraffic = false; + } + + /** + * Send a room message to all users in the room, without recording it + * in the scrollback log. + * @param {string} message + */ + send(message) { + if (this.id !== 'lobby') message = '>' + this.id + '\n' + message; + if (this.userCount) Sockets.roomBroadcast(this.id, message); + } + sendAuth() { throw new Error(`Obsolete command; use room.sendMods`); } + sendModCommand() { throw new Error(`Obsolete command; use room.sendMods`); } + push() { throw new Error(`Obsolete command; use room.add`); } + /** + * @param {string} data + */ + sendMods(data) { + this.sendRankedUsers(data, '%'); + } + /** + * @param {string} data + * @param {string} [minRank] + */ + sendRankedUsers(data, minRank = '+') { + if (this.staffRoom) { + if (!this.log) throw new Error(`Staff room ${this.id} has no log`); + this.log.add(data); + return; + } + + for (let i in this.users) { + let user = this.users[i]; + // hardcoded for performance reasons (this is an inner loop) + if (user.isStaff || (this.auth && this.auth[user.userid] && this.auth[user.userid] in Config.groups && Config.groups[this.auth[user.userid]].rank >= Config.groups[minRank].rank)) { + user.sendTo(this, data); + } + } + } + /** + * Send a room message to a single user. + * @param {User | Connection} user + * @param {string} message + */ + sendUser(user, message) { + user.sendTo(this, message); + } + /** + * Add a room message to the room log, so it shows up in the room + * for everyone, and appears in the scrollback for new users who + * join. + * @param {string} message + * @return {this} + */ + add(message) { throw new Error(`should be implemented by subclass`); } + roomlog(/** @type {string} */ message) { throw new Error(`should be implemented by subclass`); } + modlog(/** @type {string} */ message) { throw new Error(`should be implemented by subclass`); } + logEntry() { throw new Error(`room.logEntry has been renamed room.roomlog`); } + addLogMessage() { throw new Error(`room.addLogMessage has been renamed room.addByUser`); } + /** + * Inserts (sanitized) HTML into the room log. + * @param {string} message + */ + addRaw(message) { + return this.add('|raw|' + message); + } + /** + * Inserts some text into the room log, attributed to user. The + * attribution will not appear, and is used solely as a hint not to + * highlight the user. + * @param {User} user + * @param {string} text + */ + addByUser(user, text) { + return this.add('|c|' + user.getIdentity(this.id) + '|/log ' + text).update(); + } + /** + * Like addByUser, but without logging + * @param {User} user + * @param {string} text + */ + sendByUser(user, text) { + return this.send('|c|' + user.getIdentity(this.id) + '|/log ' + text); + } + /** + * Like addByUser, but sends to mods only. + * @param {User} user + * @param {string} text + */ + sendModsByUser(user, text) { + return this.sendMods('|c|' + user.getIdentity(this.id) + '|/log ' + text); + } + update() {} + + toString() { + return this.id; + } + + getUserList() { + let buffer = ''; + let counter = 0; + for (let i in this.users) { + if (!this.users[i].named) { + continue; + } + counter++; + buffer += ',' + this.users[i].getIdentity(this.id); + } + let msg = '|users|' + counter + buffer; + return msg; + } + + // mute handling + + runMuteTimer(forceReschedule = false) { + if (forceReschedule && this.muteTimer) { + clearTimeout(this.muteTimer); + this.muteTimer = null; + } + if (this.muteTimer || this.muteQueue.length === 0) return; + + let timeUntilExpire = this.muteQueue[0].time - Date.now(); + if (timeUntilExpire <= 1000) { // one second of leeway + this.unmute(this.muteQueue[0].userid, "Your mute in '" + this.title + "' has expired."); + //runMuteTimer() is called again in unmute() so this function instance should be closed + return; + } + this.muteTimer = setTimeout(() => { + this.muteTimer = null; + this.runMuteTimer(true); + }, timeUntilExpire); + } + isMuted(/** @type {User} */ user) { + if (!user) return; + if (this.muteQueue) { + for (const entry of this.muteQueue) { + if (user.userid === entry.userid || + user.guestNum === entry.guestNum || + (user.autoconfirmed && user.autoconfirmed === entry.autoconfirmed)) { + if (entry.time - Date.now() < 0) { + this.unmute(user.userid); + return null; + } else { + return entry.userid; + } + } + } + } + } + getMuteTime(/** @type {User} */ user) { + let userid = this.isMuted(user); + if (!userid) return; + for (const entry of this.muteQueue) { + if (userid === entry.userid) { + return entry.time - Date.now(); + } + } + } + /** + * Gets the group symbol of a user in the room. + * @param {User} user + * @return {string} + */ + getAuth(user) { + if (this.auth && user.userid in this.auth) { + return this.auth[user.userid]; + } + if (this.parent) { + return this.parent.getAuth(user); + } + if (this.auth && this.isPrivate === true) { + return ' '; + } + return user.group; + } + /** + * @param {User} user + */ + checkModjoin(user) { + if (this.staffRoom && !user.isStaff && (!this.auth || (this.auth[user.userid] || ' ') === ' ')) return false; + if (user.userid in this.users) return true; + if (!this.modjoin) return true; + // users with a room rank can always join + if (this.auth && user.userid in this.auth) return true; + const userGroup = user.can('makeroom') ? user.group : this.getAuth(user); + + const modjoinSetting = this.modjoin !== true ? this.modjoin : this.modchat; + if (!modjoinSetting) return true; + let modjoinGroup = modjoinSetting; + + if (modjoinGroup === 'trusted') { + if (user.trusted) return true; + modjoinGroup = Config.groupsranking[1]; + } + if (modjoinGroup === 'autoconfirmed') { + if (user.autoconfirmed) return true; + modjoinGroup = Config.groupsranking[1]; + } + if (!(userGroup in Config.groups)) return false; + if (!(modjoinGroup in Config.groups)) throw new Error(`Invalid modjoin setting in ${this.id}: ${modjoinGroup}`); + return Config.groups[userGroup].rank >= Config.groups[modjoinGroup].rank; + } + /** + * @param {User} user + * @param {number} [setTime] + */ + mute(user, setTime) { + let userid = user.userid; + + if (!setTime) setTime = 7 * 60000; // default time: 7 minutes + if (setTime > 90 * 60000) setTime = 90 * 60000; // limit 90 minutes + + // If the user is already muted, the existing queue position for them should be removed + if (this.isMuted(user)) this.unmute(userid); + + // Place the user in a queue for the unmute timer + for (let i = 0; i <= this.muteQueue.length; i++) { + let time = Date.now() + setTime; + if (i === this.muteQueue.length || time < this.muteQueue[i].time) { + let entry = { + userid: userid, + time: time, + guestNum: user.guestNum, + autoconfirmed: user.autoconfirmed, + }; + this.muteQueue.splice(i, 0, entry); + // The timer needs to be switched to the new entry if it is to be unmuted + // before the entry the timer is currently running for + if (i === 0 && this.muteTimer) { + clearTimeout(this.muteTimer); + this.muteTimer = null; + } + break; + } + } + this.runMuteTimer(); + + user.updateIdentity(this.id); + + if (!(this.isPrivate === true || this.isPersonal || this.battle)) Punishments.monitorRoomPunishments(user); + + return userid; + } + /** + * @param {string} userid + * @param {string} [notifyText] + */ + unmute(userid, notifyText) { + let successUserid = ''; + let user = Users.get(userid); + let autoconfirmed = ''; + if (user) { + userid = user.userid; + autoconfirmed = user.autoconfirmed; + } + + for (const [i, entry] of this.muteQueue.entries()) { + if (entry.userid === userid || + (user && entry.guestNum === user.guestNum) || + (autoconfirmed && entry.autoconfirmed === autoconfirmed)) { + if (i === 0) { + this.muteQueue.splice(0, 1); + this.runMuteTimer(true); + } else { + this.muteQueue.splice(i, 1); + } + successUserid = entry.userid; + break; + } + } + + if (user && successUserid && userid in this.users) { + user.updateIdentity(this.id); + if (notifyText) user.popup(notifyText); + } + return successUserid; + } + + /** + * @param {User} user + */ + onUpdateIdentity(user) {} + destroy() {} +} + +class GlobalRoom extends BasicRoom { + /** + * @param {string} roomid + */ + constructor(roomid) { + if (roomid !== 'global') throw new Error(`The global room's room ID must be 'global'`); + super(roomid); + + /** @type {'global'} */ + this.type = 'global'; + /** @type {false} */ + this.active = false; + /** @type {null} */ + // @ts-ignore TypeScript bug: ignoring null type + this.chatRoomData = null; + /**@type {boolean | 'pre' | 'ddos'} */ + this.lockdown = false; + + this.battleCount = 0; + this.lastReportedCrash = 0; + + /** @type {AnyObject[]} */ + this.chatRoomDataList = []; + try { + // @ts-ignore + this.chatRoomDataList = require('../config/chatrooms.json'); + if (!Array.isArray(this.chatRoomDataList)) this.chatRoomDataList = []; + } catch (e) {} // file doesn't exist [yet] + + if (!this.chatRoomDataList.length) { + this.chatRoomDataList = [{ + title: 'Lobby', + isOfficial: true, + autojoin: true, + }, { + title: 'Staff', + isPrivate: true, + staffRoom: true, + staffAutojoin: true, + }]; + } + + this.chatRooms = /** @type {ChatRoom[]} */ ([]); + + /** + * Rooms that users autojoin upon connecting + * @type {string[]} + */ + this.autojoinList = []; + /** + * Rooms that staff autojoin upon connecting + * @type {string[]} + */ + this.staffAutojoinList = []; + for (const [i, chatRoomData] of this.chatRoomDataList.entries()) { + if (!chatRoomData || !chatRoomData.title) { + Monitor.warn(`ERROR: Room number ${i} has no data and could not be loaded.`); + continue; + } + let id = toId(chatRoomData.title); + Monitor.notice("NEW CHATROOM: " + id); + let room = Rooms.createChatRoom(id, chatRoomData.title, chatRoomData); + if (room.aliases) { + for (const alias of room.aliases) { + Rooms.aliases.set(alias, id); + } + } + this.chatRooms.push(room); + if (room.autojoin) this.autojoinList.push(id); + if (room.staffAutojoin) this.staffAutojoinList.push(id); + } + Rooms.lobby = /** @type {ChatRoom} */ (Rooms.rooms.get('lobby')); + + // init battle room logging + if (Config.logladderip) { + this.ladderIpLog = FS('logs/ladderip/ladderip.txt').createAppendStream(); + } else { + // Prevent there from being two possible hidden classes an instance + // of GlobalRoom can have. + // @ts-ignore + this.ladderIpLog = new (require(/** @type {any} */('../.lib-dist/streams'))).WriteStream({write() {}}); + } + + let lastBattle; + try { + lastBattle = FS('logs/lastbattle.txt').readSync('utf8'); + } catch (e) {} + // TypeScript bug + /** @type {number} */ + this.lastBattle = Number(lastBattle) || 0; + // TypeScript bug + /** @type {number} */ + this.lastWrittenBattle = this.lastBattle; + + // init users + this.users = Object.create(null); + this.userCount = 0; // cache of `size(this.users)` + this.maxUsers = 0; + this.maxUsersDate = 0; + + this.reportUserStatsInterval = setInterval( + () => this.reportUserStats(), + REPORT_USER_STATS_INTERVAL + ); + + // Create writestream for modlog + this.modlogStream = FS('logs/modlog/modlog_global.txt').createAppendStream(); + } + + /** + * @param {string} message + */ + modlog(message) { + this.modlogStream.write('[' + (new Date().toJSON()) + '] ' + message + '\n'); + } + + writeChatRoomData() { + FS('config/chatrooms.json').writeUpdate(() => ( + JSON.stringify(this.chatRoomDataList) + .replace(/\{"title":/g, '\n{"title":') + .replace(/\]$/, '\n]') + )); + } + + writeNumRooms() { + if (this.lockdown) { + if (this.lastBattle === this.lastWrittenBattle) return; + this.lastWrittenBattle = this.lastBattle; + } else { + // batch writes so we don't have to write them every new battle + // very probably premature optimization, considering by default we + // write significantly larger log files every new battle + if (this.lastBattle < this.lastWrittenBattle) return; + this.lastWrittenBattle = this.lastBattle + LAST_BATTLE_WRITE_THROTTLE; + } + FS('logs/lastbattle.txt').writeUpdate(() => + `${this.lastWrittenBattle}` + ); + } + + reportUserStats() { + if (this.maxUsersDate) { + LoginServer.request('updateuserstats', { + date: this.maxUsersDate, + users: this.maxUsers, + }); + this.maxUsersDate = 0; + } + LoginServer.request('updateuserstats', { + date: Date.now(), + users: this.userCount, + }); + } + + get formatListText() { + if (this.formatList) { + return this.formatList; + } + this.formatList = '|formats' + (Ladders.formatsListPrefix || ''); + let section = '', prevSection = ''; + let curColumn = 1; + for (let i in Dex.formats) { + let format = Dex.formats[i]; + if (format.section) section = format.section; + if (format.column) curColumn = format.column; + if (!format.name) continue; + if (!format.challengeShow && !format.searchShow && !format.tournamentShow) continue; + + if (section !== prevSection) { + prevSection = section; + this.formatList += '|,' + curColumn + '|' + section; + } + this.formatList += '|' + format.name; + let displayCode = 0; + if (format.team) displayCode |= 1; + if (format.searchShow) displayCode |= 2; + if (format.challengeShow) displayCode |= 4; + if (format.tournamentShow) displayCode |= 8; + const level = format.maxLevel || format.maxForcedLevel || format.forcedLevel; + if (level === 50) displayCode |= 16; + this.formatList += ',' + displayCode.toString(16); + } + return this.formatList; + } + get configRankList() { + if (Config.nocustomgrouplist) return ''; + + // putting the resultant object in Config would enable this to be run again should config.js be reloaded. + if (Config.rankList) { + return Config.rankList; + } + let rankList = []; + + for (let rank in Config.groups) { + if (!Config.groups[rank] || !rank) continue; + + let tarGroup = Config.groups[rank]; + let groupType = tarGroup.addhtml || (!tarGroup.mute && !tarGroup.root) ? 'normal' : (tarGroup.root || tarGroup.declare) ? 'leadership' : 'staff'; + + rankList.push({symbol: rank, name: (Config.groups[rank].name || null), type: groupType}); // send the first character in the rank, incase they put a string several characters long + } + + const typeOrder = ['punishment', 'normal', 'staff', 'leadership']; + + rankList = rankList.sort((a, b) => typeOrder.indexOf(b.type) - typeOrder.indexOf(a.type)); + + // add the punishment types at the very end. + for (let rank in Config.punishgroups) { + rankList.push({symbol: Config.punishgroups[rank].symbol, name: Config.punishgroups[rank].name, type: 'punishment'}); + } + + Config.rankList = '|customgroups|' + JSON.stringify(rankList) + '\n'; + return Config.rankList; + } + + /** + * @param {string} filter "formatfilter, elofilter" + */ + getBattles(filter) { + let rooms = /** @type {GameRoom[]} */ ([]); + let skipCount = 0; + const [formatFilter, eloFilterString] = filter.split(','); + const eloFilter = +eloFilterString; + if (this.battleCount > 150 && !formatFilter && !eloFilter) { + skipCount = this.battleCount - 150; + } + for (const room of Rooms.rooms.values()) { + if (!room || !room.active || room.isPrivate) continue; + if (room.type !== 'battle') continue; + if (formatFilter && formatFilter !== room.format) continue; + if (eloFilter && (!room.rated || room.rated < eloFilter)) continue; + if (skipCount && skipCount--) continue; + + rooms.push(room); + } + + let roomTable = /** @type {{[roomid: string]: AnyObject}} */ ({}); + for (let i = rooms.length - 1; i >= rooms.length - 100 && i >= 0; i--) { + let room = rooms[i]; + /** @type {{p1?: string, p2?: string, minElo?: string | number}} */ + let roomData = {}; + if (room.active && room.battle) { + if (room.battle.p1) roomData.p1 = room.battle.p1.name; + if (room.battle.p2) roomData.p2 = room.battle.p2.name; + if (room.tour) roomData.minElo = 'tour'; + if (room.rated) roomData.minElo = Math.floor(room.rated); + } + if (!roomData.p1 || !roomData.p2) continue; + roomTable[room.id] = roomData; + } + return roomTable; + } + /** + * @param {User} user + */ + getRooms(user) { + /** @type {any} */ + let roomsData = {official: [], pspl: [], chat: [], userCount: this.userCount, battleCount: this.battleCount}; + for (const room of this.chatRooms) { + if (!room) continue; + if (room.parent) continue; + if (room.isPrivate && !(room.isPrivate === 'voice' && user.group !== ' ')) continue; + /** @type {{title: string, desc: string, userCount: number, subRooms?: string[]}} */ + let roomData = { + title: room.title, + desc: room.desc, + userCount: room.userCount, + }; + const subrooms = room.getSubRooms().map(room => room.title); + if (subrooms.length) roomData.subRooms = subrooms; + + if (room.isOfficial) { + roomsData.official.push(roomData); + // @ts-ignore + } else if (room.pspl) { + roomsData.pspl.push(roomData); + } else { + roomsData.chat.push(roomData); + } + } + return roomsData; + } + checkModjoin(/** @type {User} */ user) { + return true; + } + isMuted(/** @type {User} */ user) { + return null; + } + /** + * @param {string} message + */ + send(message) { + Sockets.roomBroadcast(this.id, message); + } + /** + * @param {string} message + */ + add(message) { + // TODO: make sure this never happens + return this; + } + /** + * @param {string} title + */ + addChatRoom(title) { + let id = toId(title); + if (id === 'battles' || id === 'rooms' || id === 'ladder' || id === 'teambuilder' || id === 'home' || id === 'all' || id === 'public') return false; + if (Rooms.rooms.has(id)) return false; + + let chatRoomData = { + title: title, + }; + let room = Rooms.createChatRoom(id, title, chatRoomData); + this.chatRoomDataList.push(chatRoomData); + this.chatRooms.push(room); + this.writeChatRoomData(); + return true; + } + + /** + * @param {string} format + */ + prepBattleRoom(format) { + //console.log('BATTLE START BETWEEN: ' + p1.userid + ' ' + p2.userid); + let roomPrefix = `battle-${toId(Dex.getFormat(format).name)}-`; + let battleNum = this.lastBattle; + let roomid; + do { + roomid = `${roomPrefix}${++battleNum}`; + } while (Rooms.rooms.has(roomid)); + + this.lastBattle = battleNum; + this.writeNumRooms(); + return roomid; + } + + /** + * @param {User} p1 + * @param {User} p2 + * @param {GameRoom} room + * @param {AnyObject} options + */ + onCreateBattleRoom(p1, p2, room, options) { + if (Config.reportbattles) { + let reportRoom = Rooms(Config.reportbattles === true ? 'lobby' : Config.reportbattles); + if (reportRoom) { + reportRoom + .add(`|b|${room.id}|${p1.getIdentity()}|${p2.getIdentity()}`) + .update(); + } + } + if (Config.logladderip && options.rated) { + this.ladderIpLog.write( + `${p1.userid}: ${p1.latestIp}\n` + + `${p2.userid}: ${p2.latestIp}\n` + ); + } + } + + /** + * @param {string} id + */ + deregisterChatRoom(id) { + id = toId(id); + let room = Rooms(id); + if (!room) return false; // room doesn't exist + if (!room.chatRoomData) return false; // room isn't registered + // deregister from global chatRoomData + // looping from the end is a pretty trivial optimization, but the + // assumption is that more recently added rooms are more likely to + // be deleted + for (let i = this.chatRoomDataList.length - 1; i >= 0; i--) { + if (id === toId(this.chatRoomDataList[i].title)) { + this.chatRoomDataList.splice(i, 1); + this.writeChatRoomData(); + break; + } + } + delete room.chatRoomData; + return true; + } + /** + * @param {string} id + */ + delistChatRoom(id) { + id = toId(id); + if (!Rooms.rooms.has(id)) return false; // room doesn't exist + for (let i = this.chatRooms.length - 1; i >= 0; i--) { + if (id === this.chatRooms[i].id) { + this.chatRooms.splice(i, 1); + break; + } + } + } + /** + * @param {string} id + */ + removeChatRoom(id) { + id = toId(id); + let room = Rooms(id); + if (!room) return false; // room doesn't exist + room.destroy(); + return true; + } + /** + * @param {User} user + * @param {Connection} connection + */ + autojoinRooms(user, connection) { + // we only autojoin regular rooms if the client requests it with /autojoin + // note that this restriction doesn't apply to staffAutojoin + let includesLobby = false; + for (const roomName of this.autojoinList) { + user.joinRoom(roomName, connection); + if (roomName === 'lobby') includesLobby = true; + } + if (!includesLobby && Config.serverid !== 'showdown') user.send(`>lobby\n|deinit`); + } + /** + * @param {User} user + * @param {Connection} [connection] + */ + checkAutojoin(user, connection) { + if (!user.named) return; + for (let [i, staffAutojoin] of this.staffAutojoinList.entries()) { + let room = /** @type {ChatRoom} */ (Rooms(staffAutojoin)); + if (!room) { + this.staffAutojoinList.splice(i, 1); + i--; + continue; + } + if (room.staffAutojoin === true && user.isStaff || + typeof room.staffAutojoin === 'string' && room.staffAutojoin.includes(user.group) || + room.auth && user.userid in room.auth) { + // if staffAutojoin is true: autojoin if isStaff + // if staffAutojoin is String: autojoin if user.group in staffAutojoin + // if staffAutojoin is anything truthy: autojoin if user has any roomauth + user.joinRoom(room.id, connection); + } + } + for (const connection of user.connections) { + if (connection.autojoins) { + let autojoins = connection.autojoins.split(','); + for (const roomName of autojoins) { + user.tryJoinRoom(roomName, connection); + } + connection.autojoins = ''; + } + } + } + /** + * @param {User} user + * @param {Connection} connection + */ + onConnect(user, connection) { + let initdata = '|updateuser|' + user.name + '|' + (user.named ? '1' : '0') + '|' + user.avatar + '\n'; + connection.send(initdata + this.configRankList + this.formatListText); + } + /** + * @param {User} user + * @param {Connection} connection + */ + onJoin(user, connection) { + if (!user) return false; // ??? + if (this.users[user.userid]) return user; + + this.users[user.userid] = user; + if (++this.userCount > this.maxUsers) { + this.maxUsers = this.userCount; + this.maxUsersDate = Date.now(); + } + + return user; + } + /** + * @param {User} user + * @param {string} oldid + * @param {boolean} joining + */ + onRename(user, oldid, joining) { + delete this.users[oldid]; + this.users[user.userid] = user; + return user; + } + /** + * @param {User} user + */ + onLeave(user) { + if (!user) return; // ... + if (!(user.userid in this.users)) { + Monitor.crashlog(new Error(`user ${user.userid} already left`)); + return; + } + delete this.users[user.userid]; + this.userCount--; + } + /** + * @param {Error | null} err + * @param {boolean} slow + */ + startLockdown(err = null, slow = false) { + if (this.lockdown && err) return; + let devRoom = Rooms('development'); + // @ts-ignore + const stack = (err ? Chat.escapeHTML(err.stack).split(`\n`).slice(0, 2).join(`
    `) : ``); + for (const [id, curRoom] of Rooms.rooms) { + if (id === 'global') continue; + if (err) { + if (id === 'staff' || id === 'development' || (!devRoom && id === 'lobby')) { + curRoom.addRaw(`
    The server needs to restart because of a crash: ${stack}
    Please restart the server.
    `); + curRoom.addRaw(`
    You will not be able to start new battles until the server restarts.
    `); + curRoom.update(); + } else { + curRoom.addRaw(`
    The server needs to restart because of a crash.
    No new battles can be started until the server is done restarting.
    `).update(); + } + } else { + curRoom.addRaw(`
    The server is restarting soon.
    Please finish your battles quickly. No new battles can be started until the server resets in a few minutes.
    `).update(); + } + const game = curRoom.game; + // @ts-ignore TODO: revisit when game.timer is standardized + if (!slow && game && game.timer && typeof game.timer.start === 'function' && !game.ended) { + // @ts-ignore + game.timer.start(); + if (curRoom.modchat !== '+') { + curRoom.modchat = '+'; + curRoom.addRaw(`
    Moderated chat was set to +!
    Only users of rank + and higher can talk.
    `).update(); + } + } + } + for (const user of Users.users.values()) { + user.send(`|pm|~|${user.group}${user.name}|/raw
    The server is restarting soon.
    Please finish your battles quickly. No new battles can be started until the server resets in a few minutes.
    `); + } + + this.lockdown = true; + this.writeNumRooms(); + this.lastReportedCrash = Date.now(); + } + automaticKillRequest() { + const notifyPlaces = ['development', 'staff', 'upperstaff']; + if (Config.autolockdown === undefined) Config.autolockdown = true; // on by default + + if (Config.autolockdown && Rooms.global.lockdown === true && Rooms.global.battleCount === 0) { + // The server is in lockdown, the final battle has finished, and the option is set + // so we will now automatically kill the server here if it is not updating. + if (Chat.updateServerLock) { + this.notifyRooms(notifyPlaces, `|html|
    Automatic server lockdown kill canceled.

    The server tried to automatically kill itself upon the final battle finishing, but the server was updating while trying to kill itself.
    `); + return; + } + + for (const worker of Sockets.workers.values()) worker.kill(); + + // final warning + this.notifyRooms(notifyPlaces, `|html|
    The server is about to automatically kill itself in 10 seconds.
    `); + + // kill server in 10 seconds if it's still set to + setTimeout(() => { + if (Config.autolockdown && Rooms.global.lockdown === true) { + // finally kill the server + process.exit(); + } else { + this.notifyRooms(notifyPlaces, `|html|
    Automatic server lockdown kill canceled.

    In the last final seconds, the automatic lockdown was manually disabled.
    `); + } + }, 10 * 1000); + } + } + /** + * @param {string[]} rooms + * @param {string} message + */ + notifyRooms(rooms, message) { + if (!rooms || !message) return; + for (const roomid of rooms) { + let curRoom = Rooms(roomid); + if (curRoom) curRoom.add(message).update(); + } + } + /** + * @param {Error} err + */ + reportCrash(err, crasher = "The server") { + const time = Date.now(); + if (time - this.lastReportedCrash < CRASH_REPORT_THROTTLE) { + return; + } + this.lastReportedCrash = time; + // @ts-ignore + let stackLines = (err ? Chat.escapeHTML(err.stack).split(`\n`) : []); + if (stackLines.length > 2) { + for (let i = 1; i < stackLines.length; i++) { + if (stackLines[i].includes('/') || stackLines[i].includes('\\')) { + if (!stackLines[i].includes('node_modules')) { + stackLines = [stackLines[0], stackLines[i]]; + break; + } + } + } + } + if (stackLines.length > 2) { + for (let i = 1; i < stackLines.length; i++) { + if (stackLines[i].includes('/') || stackLines[i].includes('\\')) { + stackLines = [stackLines[0], stackLines[i]]; + break; + } + } + } + const stack = stackLines.slice(0, 2).join(`
    `); + const crashMessage = `|html|
    ${crasher} has crashed: ${stack}
    `; + const devRoom = Rooms('development'); + if (devRoom) { + devRoom.add(crashMessage).update(); + } else { + if (Rooms.lobby) Rooms.lobby.add(crashMessage).update(); + const staffRoom = Rooms('staff'); + if (staffRoom) staffRoom.add(crashMessage).update(); + } + } +} + +class BasicChatRoom extends BasicRoom { + /** + * @param {string} roomid + * @param {string} [title] + * @param {AnyObject} [options] + */ + constructor(roomid, title, options = {}) { + super(roomid, title); + + if (options.logTimes === undefined) options.logTimes = true; + if (options.autoTruncate === undefined) options.autoTruncate = !options.isHelp; + if (options.reportJoins === undefined) { + options.reportJoins = !!Config.reportjoins || options.isPersonal; + } + if (options.batchJoins === undefined) { + options.batchJoins = options.isPersonal ? 0 : Config.reportjoinsperiod || 0; + } + this.log = Roomlogs.create(this, options); + + /** @type {any} */ + // TODO: strongly type polls + this.poll = null; + + // room settings + this.desc = ''; + this.modchat = (Config.chatmodchat || false); + this.filterStretching = false; + this.filterEmojis = false; + this.filterCaps = false; + /** @type {false | number} */ + this.slowchat = false; + this.introMessage = ''; + this.staffMessage = ''; + this.autojoin = false; + this.staffAutojoin = /** @type {string | boolean} */ (false); + + /** @type {?true | RegExp} */ + this.banwordRegex = null; + /** @type {string[]} */ + this.banwords = []; + + this.chatRoomData = (options.isPersonal ? null : options); + Object.assign(this, options); + if (this.auth) Object.setPrototypeOf(this.auth, null); + /** @type {Room?} */ + this.parent = null; + if (options.parentid) { + const parent = Rooms(options.parentid); + + if (parent) { + if (!parent.subRooms) parent.subRooms = new Map(); + parent.subRooms.set(this.id, /** @type {ChatRoom} */ (this)); + this.parent = parent; + } + } + + /** @type {Map?} */ + this.subRooms = null; + + /** @type {'chat' | 'battle'} */ + this.type = 'chat'; + /** @type {boolean} */ + this.active = false; + // TypeScript bug: subclass null + this.muteTimer = /** @type {NodeJS.Timer?} */ (null); + + /** @type {NodeJS.Timer?} */ + this.logUserStatsInterval = null; + if (Config.logchat) { + this.roomlog('NEW CHATROOM: ' + this.id); + if (Config.loguserstats) { + this.logUserStatsInterval = setInterval(() => this.logUserStats(), Config.loguserstats); + } + } + + if (this.batchJoins) { + this.userList = this.getUserList(); + } + // TypeScript bug: subclass member + this.reportJoinsInterval = /** @type {NodeJS.Timer?} */ (null); + this.game = /** @type {RoomGame?} */ (null); + this.battle = /** @type {RoomBattle?} */ (null); + } + + /** + * Add a room message to the room log, so it shows up in the room + * for everyone, and appears in the scrollback for new users who + * join. + * @param {string} message + */ + add(message) { + this.log.add(message); + return this; + } + /** + * @param {string} message + */ + roomlog(message) { + this.log.roomlog(message); + return this; + } + /** + * @param {string} message + */ + modlog(message) { + this.log.modlog(message); + return this; + } + /** + * @param {string[]} userids + */ + hideText(userids) { + const cleared = this.log.clearText(userids); + for (const userid of cleared) { + this.send(`|unlink|hide|${userid}`); + } + this.update(); + } + logUserStats() { + let total = 0; + let guests = 0; + /** @type {{[k: string]: number}} */ + let groups = {}; + for (const group of Config.groupsranking) { + groups[group] = 0; + } + for (let i in this.users) { + let user = this.users[i]; + ++total; + if (!user.named) { + ++guests; + } + if (this.auth && this.auth[user.userid] && this.auth[user.userid] in groups) { + ++groups[this.auth[user.userid]]; + } else { + ++groups[user.group]; + } + } + let entry = '|userstats|total:' + total + '|guests:' + guests; + for (let i in groups) { + entry += '|' + i + ':' + groups[i]; + } + this.roomlog(entry); + } + + update() { + if (!this.log.broadcastBuffer) return; + if (this.reportJoinsInterval) { + clearInterval(this.reportJoinsInterval); + this.reportJoinsInterval = null; + this.userList = this.getUserList(); + } + this.send(this.log.broadcastBuffer); + this.log.broadcastBuffer = ''; + this.log.truncate(); + + this.pokeExpireTimer(); + } + pokeExpireTimer() { + if (this.expireTimer) clearTimeout(this.expireTimer); + if ((this.isPersonal && !this.isHelp) || (this.isHelp && this.isHelp !== 'open')) { + this.expireTimer = setTimeout(() => this.expire(), TIMEOUT_INACTIVE_DEALLOCATE); + } else { + this.expireTimer = null; + } + } + expire() { + this.send('|expire|'); + this.destroy(); + } + /** + * @param {'j' | 'l' | 'n'} type + * @param {string} entry + */ + reportJoin(type, entry) { + if (this.reportJoins) { + this.add(`|${type}|${entry}`).update(); + return; + } + let ucType = ''; + switch (type) { + case 'j': ucType = 'J'; break; + case 'l': ucType = 'L'; break; + case 'n': ucType = 'N'; break; + } + entry = `|${ucType}|${entry}`; + if (this.batchJoins) { + this.log.broadcastBuffer += entry; + + if (!this.reportJoinsInterval) { + this.reportJoinsInterval = setTimeout( + () => this.update(), this.batchJoins + ); + } + } else { + this.send(entry); + } + this.roomlog(entry); + } + /** + * @param {User} user + */ + getIntroMessage(user) { + let message = Chat.html`\n|raw|
    You joined ${this.title}`; + if (this.modchat) { + message += ` [${this.modchat} or higher to talk]`; + } + if (this.modjoin) { + let modjoin = this.modjoin === true ? this.modchat : this.modjoin; + message += ` [${modjoin} or higher to join]`; + } + if (this.slowchat) { + message += ` [Slowchat ${this.slowchat}s]`; + } + message += `
    `; + if (this.introMessage) { + message += `\n|raw|
    ` + + this.introMessage.replace(/\n/g, '') + + `
    `; + } + if (this.staffMessage && user.can('mute', null, this)) { + message += `\n|raw|
    (Staff intro:)
    ` + + this.staffMessage.replace(/\n/g, '') + + `
    `; + } + return message; + } + /** + * @param {boolean} includeSecret + * @return {ChatRoom[]} + */ + getSubRooms(includeSecret = false) { + if (!this.subRooms) return []; + return [...this.subRooms.values()].filter(room => + !room.isPrivate || includeSecret + ); + } + /** + * @param {User} user + * @param {Connection} connection + */ + onConnect(user, connection) { + let userList = this.userList ? this.userList : this.getUserList(); + this.sendUser(connection, '|init|chat\n|title|' + this.title + '\n' + userList + '\n' + this.log.getScrollback() + this.getIntroMessage(user)); + if (this.poll) this.poll.onConnect(user, connection); + if (this.game && this.game.onConnect) this.game.onConnect(user, connection); + } + /** + * @param {User} user + * @param {Connection} connection + */ + onJoin(user, connection) { + if (!user) return false; // ??? + if (this.users[user.userid]) return false; + + if (user.named) { + this.reportJoin('j', user.getIdentity(this.id)); + } + + this.users[user.userid] = user; + this.userCount++; + + if (this.poll) this.poll.onConnect(user, connection); + if (this.game && this.game.onJoin) this.game.onJoin(user, connection); + return true; + } + /** + * @param {User} user + * @param {string} oldid + * @param {boolean} joining + */ + onRename(user, oldid, joining) { + if (user.userid === oldid) { + return this.onUpdateIdentity(user); + } + if (!this.users[oldid]) { + Monitor.crashlog(new Error(`user ${oldid} not in room ${this.id}`)); + } + if (this.users[user.userid]) { + Monitor.crashlog(new Error(`user ${user.userid} already in room ${this.id}`)); + } + delete this.users[oldid]; + this.users[user.userid] = user; + if (joining) { + this.reportJoin('j', user.getIdentity(this.id)); + if (this.staffMessage && user.can('mute', null, this)) this.sendUser(user, '|raw|
    (Staff intro:)
    ' + this.staffMessage.replace(/\n/g, '') + '
    '); + } else if (!user.named) { + this.reportJoin('l', oldid); + } else { + this.reportJoin('n', user.getIdentity(this.id) + '|' + oldid); + } + if (this.poll && user.userid in this.poll.voters) this.poll.updateFor(user); + return true; + } + /** + * onRename, but without a userid change + * @param {User} user + */ + onUpdateIdentity(user) { + if (user && user.connected) { + if (!this.users[user.userid]) return false; + if (user.named) { + this.reportJoin('n', user.getIdentity(this.id) + '|' + user.userid); + } else { + this.reportJoin('l', user.userid); + } + } + return true; + } + /** + * @param {User} user + */ + onLeave(user) { + if (!user) return false; // ... + + if (!(user.userid in this.users)) { + Monitor.crashlog(new Error(`user ${user.userid} already left`)); + return false; + } + delete this.users[user.userid]; + this.userCount--; + + if (user.named) { + this.reportJoin('l', user.getIdentity(this.id)); + } + if (this.game && this.game.onLeave) this.game.onLeave(user); + return true; + } + destroy() { + // deallocate ourself + + if (this.battle && this.tour) { + // resolve state of the tournament; + // @ts-ignore + if (!this.battle.ended) this.tour.onBattleWin(this, ''); + this.tour = /** @type {any} */ (null); + } + + // remove references to ourself + for (let i in this.users) { + // @ts-ignore + this.users[i].leaveRoom(this, null, true); + delete this.users[i]; + } + + if (this.parent && this.parent.subRooms) { + this.parent.subRooms.delete(this.id); + if (!this.parent.subRooms.size) this.parent.subRooms = null; + } + + Rooms.global.deregisterChatRoom(this.id); + Rooms.global.delistChatRoom(this.id); + + if (this.aliases) { + for (const alias of this.aliases) { + Rooms.aliases.delete(alias); + } + } + + if (this.game) { + this.game.destroy(); + this.game = null; + this.battle = null; + } + this.active = false; + + // Clear any active timers for the room + if (this.muteTimer) { + clearTimeout(this.muteTimer); + this.muteTimer = null; + } + if (this.expireTimer) { + clearTimeout(this.expireTimer); + this.expireTimer = null; + } + if (this.reportJoinsInterval) { + clearInterval(this.reportJoinsInterval); + } + this.reportJoinsInterval = null; + if (this.logUserStatsInterval) { + clearInterval(this.logUserStatsInterval); + } + this.logUserStatsInterval = null; + + this.log.destroy(); + + // get rid of some possibly-circular references + Rooms.rooms.delete(this.id); + } +} + +class ChatRoom extends BasicChatRoom { + // This is not actually used, this is just a fake class to keep + // TypeScript happy + constructor() { + super(''); + /** @type {null} */ + // @ts-ignore TypeScript bug: ignoring null type + this.battle = null; + this.active = false; + /** @type {'chat'} */ + this.type = 'chat'; + } +} + +class GameRoom extends BasicChatRoom { + /** + * @param {string} roomid + * @param {string} [title] + * @param {AnyObject} [options] + */ + constructor(roomid, title, options = {}) { + options.logTimes = false; + options.autoTruncate = false; + options.isMultichannel = true; + options.reportJoins = !!Config.reportbattlejoins; + options.batchJoins = 0; + super(roomid, title, options); + this.modchat = (Config.battlemodchat || false); + + /** @type {'battle'} */ + this.type = 'battle'; + + this.modchatUser = ''; + this.active = false; + + this.format = options.format || ''; + this.auth = Object.create(null); + //console.log("NEW BATTLE"); + + this.tour = options.tour || null; + this.parent = options.parent || (this.tour && this.tour.room) || null; + + this.p1 = options.p1 || null; + this.p2 = options.p2 || null; + + /** + * The lower player's rating, for searching purposes. + * 0 for unrated battles. 1 for unknown ratings. + * @type {number} + */ + this.rated = options.rated || 0; + /** @type {RoomBattle?} */ + this.battle = null; + /** @type {RoomGame} */ + // @ts-ignore + this.game = null; + } + /** + * - logNum = 0 : spectator log (no exact HP) + * - logNum = 1, 2 : player log (exact HP for that player) + * - logNum = 3 : debug log (exact HP for all players) + * @param {0 | 1 | 2 | 3} channel + */ + getLog(channel = 0) { + return this.log.getScrollback(channel); + } + /** + * @param {User} user + */ + getLogForUser(user) { + if (!(user.userid in this.game.players)) return this.getLog(); + return this.getLog(this.game.players[user.userid].slotNum + 1); + } + /** + * @param {User?} excludeUser + */ + update(excludeUser = null) { + if (!this.log.broadcastBuffer) return; + + if (this.userCount) { + Sockets.channelBroadcast(this.id, '>' + this.id + '\n\n' + this.log.broadcastBuffer); + } + this.log.broadcastBuffer = ''; + + this.pokeExpireTimer(); + } + pokeExpireTimer() { + // empty rooms time out after ten minutes + if (!this.userCount) { + if (this.expireTimer) clearTimeout(this.expireTimer); + this.expireTimer = setTimeout(() => this.expire(), TIMEOUT_EMPTY_DEALLOCATE); + } else { + if (this.expireTimer) clearTimeout(this.expireTimer); + this.expireTimer = setTimeout(() => this.expire(), TIMEOUT_INACTIVE_DEALLOCATE); + } + } + /** + * @param {0 | 1} num + * @param {string} message + */ + sendPlayer(num, message) { + let player = this.getPlayer(num); + if (!player) return false; + player.sendRoom(message); + } + /** + * @param {0 | 1} num + */ + getPlayer(num) { + // @ts-ignore + return this.game['p' + (num + 1)]; + } + /** + * @param {User} user + */ + requestModchat(user) { + if (user === null) { + this.modchatUser = ''; + return; + } else if (user.can('modchat') || !this.modchatUser || this.modchatUser === user.userid) { + this.modchatUser = user.userid; + return; + } else { + return "Invite-only can only be turned off by the user who turned it on, or staff"; + } + } + /** + * @param {User} user + * @param {Connection} connection + */ + onConnect(user, connection) { + this.sendUser(connection, '|init|battle\n|title|' + this.title + '\n' + this.getLogForUser(user)); + if (this.game && this.game.onConnect) this.game.onConnect(user, connection); + } +} + +/** + * @param {string | Room} [roomid] + * @return {Room} + */ +function getRoom(roomid) { + // @ts-ignore + if (roomid && roomid.id) return roomid; + // @ts-ignore + return Rooms.rooms.get(roomid); +} + +/** @typedef {GlobalRoom | GameRoom | ChatRoom} Room */ + +let Rooms = Object.assign(getRoom, { + /** + * The main roomid:Room table. Please do not hold a reference to a + * room long-term; just store the roomid and grab it from here (with + * the Rooms(roomid) accessor) when necessary. + * @type {Map} + */ + rooms: new Map(), + /** @type {Map} */ + aliases: new Map(), + + get: getRoom, + /** + * @param {string} name + * @return {Room | undefined} + */ + search(name) { + return getRoom(name) || getRoom(toId(name)) || getRoom(Rooms.aliases.get(toId(name))); + }, + + /** + * @param {string} roomid + * @param {string} title + * @param {AnyObject} options + */ + createGameRoom(roomid, title, options) { + if (Rooms.rooms.has(roomid)) throw new Error(`Room ${roomid} already exists`); + Monitor.debug("NEW BATTLE ROOM: " + roomid); + const room = new GameRoom(roomid, title, options); + Rooms.rooms.set(roomid, room); + return room; + }, + /** + * @param {string} roomid + * @param {string} title + * @param {AnyObject} options + */ + createChatRoom(roomid, title, options) { + if (Rooms.rooms.has(roomid)) throw new Error(`Room ${roomid} already exists`); + const room = /** @type {ChatRoom} */ (new BasicChatRoom(roomid, title, options)); + Rooms.rooms.set(roomid, room); + return room; + }, + /** + * @param {string} formatid + * @param {AnyObject} options + */ + createBattle(formatid, options) { + const p1 = /** @type {User?} */ (options.p1); + const p2 = /** @type {User?} */ (options.p2); + if (p1 && p1 === p2) throw new Error(`Players can't battle themselves`); + if (p1) Ladders.cancelSearches(p1); + if (p2) Ladders.cancelSearches(p2); + + if (Rooms.global.lockdown === true) { + if (p1) p1.popup("The server is restarting. Battles will be available again in a few minutes."); + if (p2) p2.popup("The server is restarting. Battles will be available again in a few minutes."); + return; + } + + // @ts-ignore + if (p1 && p2 && (p1.specialNextBattle || p2.specialNextBattle)) { + // @ts-ignore + const p1special = p1.specialNextBattle, p2special = p2.specialNextBattle; + // @ts-ignore + p1.specialNextBattle = null; + // @ts-ignore + p2.specialNextBattle = null; + + if (p1special !== p2special) { + p1.popup(`Your special battle settings don't match: "${p1special}" and "${p2special}"`); + p2.popup(`Your special battle settings don't match: "${p1special}" and "${p2special}"`); + return; + } + options.ratedMessage = p1special; + } + + const roomid = Rooms.global.prepBattleRoom(formatid); + options.format = formatid; + // options.rated is a number representing the lower player rating, for searching purposes + // options.rated < 0 or falsy means "unrated", and will be converted to 0 here + // options.rated === true is converted to 1 (used in tests sometimes) + options.rated = Math.max(+options.rated || 0, 0); + const p1name = p1 ? p1.name : "Player 1"; + const p2name = p2 ? p2.name : "Player 2"; + const room = Rooms.createGameRoom(roomid, "" + p1name + " vs. " + p2name, options); + // @ts-ignore TODO: make RoomBattle a subclass of RoomGame + room.game = new Rooms.RoomBattle(room, formatid, options); + + let inviteOnly = (options.inviteOnly || []); + if (p1 && p1.inviteOnlyNextBattle) { + inviteOnly.push(p1.userid); + p1.inviteOnlyNextBattle = false; + } + if (p2 && p2.inviteOnlyNextBattle) { + inviteOnly.push(p2.userid); + p2.inviteOnlyNextBattle = false; + } + if (options.tour && !room.tour.modjoin) inviteOnly = []; + if (inviteOnly.length) { + room.modjoin = '+'; + room.isPrivate = 'hidden'; + room.privacySetter = new Set(inviteOnly); + room.add(`|raw|
    This battle is invite-only!
    Users must be rank + or invited with /invite to join
    `); + } + + if (p1) p1.joinRoom(room); + if (p2) p2.joinRoom(room); + if (p1) Monitor.countBattle(p1.latestIp, p1.name); + if (p2) Monitor.countBattle(p2.latestIp, p2.name); + return room; + }, + + battleModlogStream: FS('logs/modlog/modlog_battle.txt').createAppendStream(), + groupchatModlogStream: FS('logs/modlog/modlog_groupchat.txt').createAppendStream(), + + // @ts-ignore + global: (/** @type {GlobalRoom} */ (null)), + /** @type {?ChatRoom} */ + lobby: null, + + BasicRoom: BasicRoom, + GlobalRoom: GlobalRoom, + GameRoom: GameRoom, + ChatRoom: BasicChatRoom, + ChatRoomTypeForTS: ChatRoom, + + RoomGame: require('./room-game').RoomGame, + RoomGamePlayer: require('./room-game').RoomGamePlayer, + + RETRY_AFTER_LOGIN, + + Roomlogs: Roomlogs, + + RoomBattle: require('./room-battle').RoomBattle, + RoomBattlePlayer: require('./room-battle').RoomBattlePlayer, + RoomBattleTimer: require('./room-battle').RoomBattleTimer, + PM: require('./room-battle').PM, +}); + +// initialize + +Monitor.notice("NEW GLOBAL: global"); +// @ts-ignore +Rooms.global = new GlobalRoom('global'); + +// @ts-ignore +Rooms.rooms.set('global', Rooms.global); + +// @ts-ignore +module.exports = Rooms; diff --git a/server/sockets.js b/server/sockets.js new file mode 100644 index 0000000000000..b58878a0e4bfc --- /dev/null +++ b/server/sockets.js @@ -0,0 +1,718 @@ +/** + * Connections + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * Abstraction layer for multi-process SockJS connections. + * + * This file handles all the communications between the users' + * browsers, the networking processes, and users.js in the + * main process. + * + * @license MIT license + */ + +'use strict'; + +const MINUTES = 60 * 1000; + +const cluster = require('cluster'); +const fs = require('fs'); +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; + +const Monitor = { + crashlog: require(/** @type {any} */('../.lib-dist/crashlogger')), +}; + +if (cluster.isMaster) { + cluster.setupMaster({ + exec: require('path').resolve(__dirname, 'sockets'), + }); + + /** @type {Map} */ + const workers = exports.workers = new Map(); + + const spawnWorker = exports.spawnWorker = function () { + let worker = cluster.fork({PSPORT: Config.port, PSBINDADDR: Config.bindaddress || '0.0.0.0', PSNOSSL: Config.ssl ? 0 : 1}); + let id = worker.id; + workers.set(id, worker); + worker.on('message', data => { + // console.log('master received: ' + data); + switch (data.charAt(0)) { + case '*': { + // *socketid, ip, protocol + // connect + let nlPos = data.indexOf('\n'); + let nlPos2 = data.indexOf('\n', nlPos + 1); + Users.socketConnect(worker, id, data.slice(1, nlPos), data.slice(nlPos + 1, nlPos2), data.slice(nlPos2 + 1)); + break; + } + + case '!': { + // !socketid + // disconnect + Users.socketDisconnect(worker, id, data.substr(1)); + break; + } + + case '<': { + // { + if (code === null && signal !== null) { + // Worker was killed by Sockets.killWorker or Sockets.killPid, probably. + console.log(`Worker ${worker.id} was forcibly killed with status ${signal}.`); + workers.delete(worker.id); + } else if (code === 0 && signal === null) { + // Happens when killing PS with ^C + console.log(`Worker ${worker.id} died, but returned a successful exit code.`); + workers.delete(worker.id); + } else if (code > 0) { + // Worker was killed abnormally, likely because of a crash. + Monitor.crashlog(new Error(`Worker ${worker.id} abruptly died with code ${code} and signal ${signal}`), "The main process"); + // Don't delete the worker so it can be inspected if need be. + } + + if (worker.isConnected()) worker.disconnect(); + // FIXME: this is a bad hack to get around a race condition in + // Connection#onDisconnect sending room deinit messages after already + // having removed the sockets from their rooms. + // @ts-ignore + worker.send = () => {}; + + let count = 0; + for (const connection of Users.connections.values()) { + if (connection.worker === worker) { + Users.socketDisconnect(worker, worker.id, connection.socketid); + count++; + } + } + console.log(`${count} connections were lost.`); + + // Attempt to recover. + spawnWorker(); + }); + + /** + * @param {number} [port] + * @param {string} [bindAddress] + * @param {number} [workerCount] + */ + exports.listen = function (port, bindAddress, workerCount) { + if (port !== undefined && !isNaN(port)) { + Config.port = port; + Config.ssl = null; + } else { + port = Config.port; + + // Autoconfigure when running in cloud environments. + try { + const cloudenv = require('cloud-env'); + // @ts-ignore + bindAddress = cloudenv.get('IP', bindAddress); + // @ts-ignore + port = cloudenv.get('PORT', port); + } catch (e) {} + } + if (bindAddress !== undefined) { + Config.bindaddress = bindAddress; + } + if (port !== undefined) { + Config.port = port; + } + if (workerCount === undefined) { + workerCount = (Config.workers !== undefined ? Config.workers : 1); + } + // @ts-ignore - remove when Config is typed + for (let i = 0; i < workerCount; i++) { + spawnWorker(); + } + }; + + /** + * @param {cluster.Worker} worker + */ + exports.killWorker = function (worker) { + let count = 0; + for (const connection of Users.connections.values()) { + if (connection.worker === worker) { + Users.socketDisconnect(worker, worker.id, connection.socketid); + count++; + } + } + console.log(`${count} connections were lost.`); + + try { + worker.kill('SIGTERM'); + } catch (e) {} + + return count; + }; + + /** + * @param {number} pid + */ + exports.killPid = function (pid) { + for (const worker of workers.values()) { + if (pid === worker.process.pid) { + // @ts-ignore + return this.killWorker(worker); + } + } + return false; + }; + + /** + * @param {cluster.Worker} worker + * @param {string} socketid + * @param {string} message + */ + exports.socketSend = function (worker, socketid, message) { + worker.send(`>${socketid}\n${message}`); + }; + + /** + * @param {cluster.Worker} worker + * @param {string} socketid + */ + exports.socketDisconnect = function (worker, socketid) { + worker.send(`!${socketid}`); + }; + + /** + * @param {string} roomid + * @param {string} message + */ + exports.roomBroadcast = function (roomid, message) { + for (const worker of workers.values()) { + worker.send(`#${roomid}\n${message}`); + } + }; + + /** + * @param {cluster.Worker} worker + * @param {string} roomid + * @param {string} socketid + */ + exports.roomAdd = function (worker, roomid, socketid) { + worker.send(`+${roomid}\n${socketid}`); + }; + + /** + * @param {cluster.Worker} worker + * @param {string} roomid + * @param {string} socketid + */ + exports.roomRemove = function (worker, roomid, socketid) { + worker.send(`-${roomid}\n${socketid}`); + }; + + /** + * @param {string} roomid + * @param {string} message + */ + exports.channelBroadcast = function (roomid, message) { + for (const worker of workers.values()) { + worker.send(`:${roomid}\n${message}`); + } + }; + + /** + * @param {cluster.Worker} worker + * @param {string} roomid + * @param {number} channelIndex + * @param {string} socketid + */ + exports.channelMove = function (worker, roomid, channelIndex, socketid) { + worker.send(`.${roomid}\n${channelIndex}\n${socketid}`); + }; + + /** + * @param {cluster.Worker} worker + * @param {string} query + */ + exports.eval = function (worker, query) { + worker.send(`$${query}`); + }; +} else { + // is worker + // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored + global.Config = require('../config/config'); + + if (process.env.PSPORT) Config.port = +process.env.PSPORT; + if (process.env.PSBINDADDR) Config.bindaddress = process.env.PSBINDADDR; + if (process.env.PSNOSSL && parseInt(process.env.PSNOSSL)) Config.ssl = null; + + if (Config.ofe) { + try { + require.resolve('node-oom-heapdump'); + } catch (e) { + if (e.code !== 'MODULE_NOT_FOUND') throw e; // should never happen + throw new Error( + 'node-oom-heapdump is not installed, but it is a required dependency if Config.ofe is set to true! ' + + 'Run npm install node-oom-heapdump and restart the server.' + ); + } + + // Create a heapdump if the process runs out of memory. + // @ts-ignore + require('node-oom-heapdump')({ + addTimestamp: true, + }); + } + + // Static HTTP server + + // This handles the custom CSS and custom avatar features, and also + // redirects yourserver:8001 to yourserver-8001.psim.us + + // It's optional if you don't need these features. + + global.Dnsbl = require('./dnsbl'); + + if (Config.crashguard) { + // graceful crash + process.on('uncaughtException', err => { + Monitor.crashlog(err, `Socket process ${cluster.worker.id} (${process.pid})`); + }); + } + + let app = require('http').createServer(); + /** @type {?import('https').Server} */ + let appssl = null; + if (Config.ssl) { + let key; + try { + key = require('path').resolve(__dirname, Config.ssl.options.key); + if (!fs.statSync(key).isFile()) throw new Error(); + try { + key = fs.readFileSync(key); + } catch (e) { + Monitor.crashlog(new Error(`Failed to read the configured SSL private key PEM file:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); + } + } catch (e) { + console.warn('SSL private key config values will not support HTTPS server option values in the future. Please set it to use the absolute path of its PEM file.'); + key = Config.ssl.options.key; + } + + let cert; + try { + cert = require('path').resolve(__dirname, Config.ssl.options.cert); + if (!fs.statSync(cert).isFile()) throw new Error(); + try { + cert = fs.readFileSync(cert); + } catch (e) { + Monitor.crashlog(new Error(`Failed to read the configured SSL certificate PEM file:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); + } + } catch (e) { + console.warn('SSL certificate config values will not support HTTPS server option values in the future. Please set it to use the absolute path of its PEM file.'); + cert = Config.ssl.options.cert; + } + + if (key && cert) { + try { + // In case there are additional SSL config settings besides the key and cert... + appssl = require('https').createServer(Object.assign({}, Config.ssl.options, {key, cert})); + } catch (e) { + Monitor.crashlog(new Error(`The SSL settings are misconfigured:\n${e.stack}`), `Socket process ${cluster.worker.id} (${process.pid})`); + } + } + } + + // Static server + try { + if (Config.disablenodestatic) throw new Error("disablenodestatic"); + const StaticServer = require('node-static').Server; + const roomidRegex = /^\/(?:[A-Za-z0-9][A-Za-z0-9-]*)\/?$/; + const cssServer = new StaticServer('./config'); + const avatarServer = new StaticServer('./config/avatars'); + const staticServer = new StaticServer('./server/static'); + /** + * @param {import('http').IncomingMessage} req + * @param {import('http').ServerResponse} res + */ + const staticRequestHandler = (req, res) => { + // console.log(`static rq: ${req.socket.remoteAddress}:${req.socket.remotePort} -> ${req.socket.localAddress}:${req.socket.localPort} - ${req.method} ${req.url} ${req.httpVersion} - ${req.rawHeaders.join('|')}`); + req.resume(); + req.addListener('end', () => { + if (Config.customhttpresponse && + Config.customhttpresponse(req, res)) { + return; + } + + let server = staticServer; + if (req.url) { + if (req.url === '/custom.css') { + server = cssServer; + } else if (req.url.startsWith('/avatars/')) { + req.url = req.url.substr(8); + server = avatarServer; + } else if (roomidRegex.test(req.url)) { + req.url = '/'; + } + } + + server.serve(req, res, e => { + // @ts-ignore + if (e && e.status === 404) { + staticServer.serveFile('404.html', 404, {}, req, res); + } + }); + }); + }; + + app.on('request', staticRequestHandler); + if (appssl) appssl.on('request', staticRequestHandler); + } catch (e) { + if (e.message === 'disablenodestatic') { + console.log('node-static is disabled'); + } else { + console.log('Could not start node-static - try `npm install` if you want to use it'); + } + } + + // SockJS server + + // This is the main server that handles users connecting to our server + // and doing things on our server. + + const sockjs = require('sockjs'); + const options = { + sockjs_url: "//play.pokemonshowdown.com/js/lib/sockjs-1.1.1-nwjsfix.min.js", + prefix: '/showdown', + /** + * @param {string} severity + * @param {string} message + */ + log(severity, message) { + if (severity === 'error') console.log(`ERROR: ${message}`); + }, + }; + + if (Config.wsdeflate) { + try { + // @ts-ignore + const deflate = require('permessage-deflate').configure(Config.wsdeflate); + // @ts-ignore + options.faye_server_options = {extensions: [deflate]}; + } catch (e) { + Monitor.crashlog(new Error("Dependency permessage-deflate is not installed or is otherwise unaccessable. No message compression will take place until server restart."), "Sockets"); + } + } + + const server = sockjs.createServer(options); + /** + * socketid:Connection + * @type {Map} + */ + const sockets = new Map(); + /** + * roomid:socketid:Connection + * @type {Map>} + */ + const rooms = new Map(); + /** + * roomid:socketid:channelIndex + * @type {Map>} + */ + const roomChannels = new Map(); + + /** @type {WriteStream} */ + const logger = FS(`logs/sockets-${process.pid}`).createAppendStream(); + + // Deal with phantom connections. + const sweepSocketInterval = setInterval(() => { + for (const socket of sockets.values()) { + // @ts-ignore + if (socket.protocol === 'xhr-streaming' && socket._session && socket._session.recv) { + // @ts-ignore + logger.write(`Found a ghost connection with protocol xhr-streaming and ready state ${socket._session.readyState}\n`); + // @ts-ignore + socket._session.recv.didClose(); + } + } + }, 10 * MINUTES); + + process.on('message', data => { + // console.log('worker received: ' + data); + /** @type {import('sockjs').Connection | undefined?} */ + let socket = null; + let socketid = ''; + /** @type {Map | undefined?} */ + let room = null; + let roomid = ''; + /** @type {Map | undefined?} */ + let roomChannel = null; + let channelid = ''; + let nlLoc = -1; + let message = ''; + + switch (data.charAt(0)) { + case '$': // $code + eval(data.substr(1)); + break; + + case '!': // !socketid + // destroy + socketid = data.substr(1); + socket = sockets.get(socketid); + if (!socket) return; + socket.destroy(); + sockets.delete(socketid); + for (const [roomid, room] of rooms) { + room.delete(socketid); + roomChannel = roomChannels.get(roomid); + if (roomChannel) roomChannel.delete(socketid); + if (!room.size) { + rooms.delete(roomid); + if (roomChannel) roomChannels.delete(roomid); + } + } + break; + + case '>': + // >socketid, message + // message to single connection + nlLoc = data.indexOf('\n'); + socketid = data.substr(1, nlLoc - 1); + socket = sockets.get(socketid); + if (!socket) return; + message = data.substr(nlLoc + 1); + socket.write(message); + break; + + case '#': + // #roomid, message + // message to all connections in room + nlLoc = data.indexOf('\n'); + roomid = data.substr(1, nlLoc - 1); + room = rooms.get(roomid); + if (!room) return; + message = data.substr(nlLoc + 1); + for (const socket of room.values()) socket.write(message); + break; + + case '+': + // +roomid, socketid + // join room with connection + nlLoc = data.indexOf('\n'); + socketid = data.substr(nlLoc + 1); + socket = sockets.get(socketid); + if (!socket) return; + roomid = data.substr(1, nlLoc - 1); + room = rooms.get(roomid); + if (!room) { + room = new Map(); + rooms.set(roomid, room); + } + room.set(socketid, socket); + break; + + case '-': + // -roomid, socketid + // leave room with connection + nlLoc = data.indexOf('\n'); + roomid = data.slice(1, nlLoc); + room = rooms.get(roomid); + if (!room) return; + socketid = data.slice(nlLoc + 1); + room.delete(socketid); + roomChannel = roomChannels.get(roomid); + if (roomChannel) roomChannel.delete(socketid); + if (!room.size) { + rooms.delete(roomid); + if (roomChannel) roomChannels.delete(roomid); + } + break; + + case '.': + // .roomid, channelid, socketid + // move connection to different channel in room + nlLoc = data.indexOf('\n'); + roomid = data.slice(1, nlLoc); + let nlLoc2 = data.indexOf('\n', nlLoc + 1); + channelid = data.slice(nlLoc + 1, nlLoc2); + socketid = data.slice(nlLoc2 + 1); + + roomChannel = roomChannels.get(roomid); + if (!roomChannel) { + roomChannel = new Map(); + roomChannels.set(roomid, roomChannel); + } + if (channelid === '0') { + roomChannel.delete(socketid); + } else { + roomChannel.set(socketid, channelid); + } + break; + + case ':': + // :roomid, message + // message to a room, splitting `|split` by channel + nlLoc = data.indexOf('\n'); + roomid = data.slice(1, nlLoc); + room = rooms.get(roomid); + if (!room) return; + + /** @type {[string?, string?, string?]} */ + let messages = [null, null, null]; + message = data.substr(nlLoc + 1); + roomChannel = roomChannels.get(roomid); + for (const [socketid, socket] of room) { + switch (roomChannel ? roomChannel.get(socketid) : '0') { + case '1': + if (!messages[1]) { + messages[1] = message.replace(/\n\|split\n[^\n]*\n([^\n]*)\n[^\n]*\n[^\n]*/g, '\n$1').replace(/\n\n/g, '\n'); + } + socket.write(messages[1]); + break; + case '2': + if (!messages[2]) { + messages[2] = message.replace(/\n\|split\n[^\n]*\n[^\n]*\n([^\n]*)\n[^\n]*/g, '\n$1').replace(/\n\n/g, '\n'); + } + socket.write(messages[2]); + break; + default: + if (!messages[0]) { + messages[0] = message.replace(/\n\|split\n([^\n]*)\n[^\n]*\n[^\n]*\n[^\n]*/g, '\n$1').replace(/\n\n/g, '\n'); + } + socket.write(messages[0]); + break; + } + } + break; + } + }); + + // Clean up any remaining connections on disconnect. If this isn't done, + // the process will not exit until any remaining connections have been destroyed. + // Afterwards, the worker process will die on its own. + process.once('disconnect', () => { + clearInterval(sweepSocketInterval); + + for (const socket of sockets.values()) { + try { + socket.destroy(); + } catch (e) {} + } + sockets.clear(); + rooms.clear(); + roomChannels.clear(); + + app.close(); + if (appssl) appssl.close(); + + // Let the server(s) finish closing. + setImmediate(() => process.exit(0)); + }); + + // this is global so it can be hotpatched if necessary + let isTrustedProxyIp = Dnsbl.checker(Config.proxyip); + let socketCounter = 0; + server.on('connection', socket => { + // For reasons that are not entirely clear, SockJS sometimes triggers + // this event with a null `socket` argument. + if (!socket) return; + + if (!socket.remoteAddress) { + // SockJS sometimes fails to be able to cache the IP, port, and + // address from connection request headers. + try { + socket.destroy(); + } catch (e) {} + return; + } + + let socketid = '' + (++socketCounter); + sockets.set(socketid, socket); + + let socketip = socket.remoteAddress; + if (isTrustedProxyIp(socketip)) { + let ips = (socket.headers['x-forwarded-for'] || '') + .split(',') + .reverse(); + for (let ip of ips) { + let proxy = ip.trim(); + if (!isTrustedProxyIp(proxy)) { + socketip = proxy; + break; + } + } + } + + // xhr-streamming connections sometimes end up becoming ghost + // connections. Since it already has keepalive set, we set a timeout + // instead and close the connection if it has been inactive for the + // configured SockJS heartbeat interval plus an extra second to account + // for any delay in receiving the SockJS heartbeat packet. + if (socket.protocol === 'xhr-streaming') { + // @ts-ignore + socket._session.recv.thingy.setTimeout( + // @ts-ignore + socket._session.recv.options.heartbeat_delay + 1000, + () => { + // @ts-ignore + if (socket._session.recv) socket._session.recv.didClose(); + } + ); + } + + // @ts-ignore + process.send(`*${socketid}\n${socketip}\n${socket.protocol}`); + + socket.on('data', message => { + // drop empty messages (DDoS?) + if (!message) return; + // drop messages over 100KB + if (message.length > (100 * 1024)) { + console.log(`Dropping client message ${message.length / 1024} KB...`); + console.log(message.slice(0, 160)); + return; + } + // drop legacy JSON messages + if (typeof message !== 'string' || message.startsWith('{')) return; + // drop blank messages (DDoS?) + let pipeIndex = message.indexOf('|'); + if (pipeIndex < 0 || pipeIndex === message.length - 1) return; + + // @ts-ignore + process.send(`<${socketid}\n${message}`); + }); + + socket.once('close', () => { + // @ts-ignore + process.send(`!${socketid}`); + sockets.delete(socketid); + for (const room of rooms.values()) room.delete(socketid); + }); + }); + server.installHandlers(app, {}); + app.listen(Config.port, Config.bindaddress); + console.log(`Worker ${cluster.worker.id} now listening on ${Config.bindaddress}:${Config.port}`); + + if (appssl) { + // @ts-ignore + server.installHandlers(appssl, {}); + appssl.listen(Config.ssl.port, Config.bindaddress); + console.log(`Worker ${cluster.worker.id} now listening for SSL on port ${Config.ssl.port}`); + } + + console.log(`Test your server at http://${Config.bindaddress === '0.0.0.0' ? 'localhost' : Config.bindaddress}:${Config.port}`); + + /** @type {typeof import('../lib/repl').Repl} */ + const Repl = require(/** @type {any} */('../.lib-dist/repl')).Repl; + Repl.start(`sockets-${cluster.worker.id}-${process.pid}`, cmd => eval(cmd)); +} diff --git a/static/404.html b/server/static/404.html similarity index 100% rename from static/404.html rename to server/static/404.html diff --git a/static/index.html b/server/static/index.html similarity index 100% rename from static/index.html rename to server/static/index.html diff --git a/server/team-validator-async.js b/server/team-validator-async.js new file mode 100644 index 0000000000000..e9936ea2f43f3 --- /dev/null +++ b/server/team-validator-async.js @@ -0,0 +1,117 @@ +/** + * Team Validator + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * Spawns a child process to validate teams. + * + * @license MIT + */ + +'use strict'; + +class ValidatorAsync { + /** + * @param {string} format + */ + constructor(format) { + this.format = Dex.getFormat(format); + } + + /** + * @param {string} team + * @param {boolean} [removeNicknames] + */ + validateTeam(team, removeNicknames = false) { + let formatid = this.format.id; + if (this.format.customRules) formatid += '@@@' + this.format.customRules.join(','); + return PM.query({formatid, removeNicknames, team}); + } +} + +/********************************************************* + * Process manager + *********************************************************/ + +/** @type {typeof import('../lib/process-manager').QueryProcessManager} */ +const QueryProcessManager = require(/** @type {any} */('../.lib-dist/process-manager')).QueryProcessManager; + +/** @type {QueryProcessManager} */ +// @ts-ignore +const PM = new QueryProcessManager(module, async message => { + let {formatid, removeNicknames, team} = message; + let parsedTeam = Dex.fastUnpackTeam(team); + + let problems; + try { + problems = TeamValidator(formatid).validateTeam(parsedTeam, removeNicknames); + } catch (err) { + require(/** @type {any} */('../.lib-dist/crashlogger'))(err, 'A team validation', { + formatid: formatid, + team: team, + }); + problems = [`Your team crashed the team validator. We've been automatically notified and will fix this crash, but you should use a different team for now.`]; + } + + if (problems && problems.length) { + return '0' + problems.join('\n'); + } + let packedTeam = Dex.packTeam(parsedTeam); + // console.log('FROM: ' + message.substr(pipeIndex2 + 1)); + // console.log('TO: ' + packedTeam); + return '1' + packedTeam; +}); + +if (!PM.isParentProcess) { + // This is a child process! + // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored + global.Config = require('../config/config'); + + global.TeamValidator = require(/** @type {any} */ ('../.sim-dist/team-validator')).TeamValidator; + // @ts-ignore ??? + global.Monitor = { + /** + * @param {Error} error + * @param {string} source + * @param {{}?} details + */ + crashlog(error, source = 'A team validator process', details = null) { + const repr = JSON.stringify([error.name, error.message, source, details]); + // @ts-ignore + process.send(`THROW\n@!!@${repr}\n${error.stack}`); + }, + }; + + if (Config.crashguard) { + process.on('uncaughtException', err => { + Monitor.crashlog(err, `A team validator process`); + }); + process.on('unhandledRejection', err => { + Monitor.crashlog(err, 'A team validator process Promise'); + }); + } + + global.Dex = require(/** @type {any} */ ('../.sim-dist/dex')).includeData(); + global.toId = Dex.getId; + global.Chat = require('./chat'); + + /** @type {typeof import('../lib/repl').Repl} */ + const Repl = require(/** @type {any} */('../.lib-dist/repl')).Repl; + Repl.start(`team-validator-${process.pid}`, cmd => eval(cmd)); +} else { + PM.spawn(global.Config ? Config.validatorprocesses : 1); +} + +/********************************************************* + * Exports + *********************************************************/ + +function getAsyncValidator(/** @type {string} */ format) { + return new ValidatorAsync(format); +} + +let TeamValidatorAsync = Object.assign(getAsyncValidator, { + ValidatorAsync, + PM, +}); + +module.exports = TeamValidatorAsync; diff --git a/tournaments/generator-elimination.js b/server/tournaments/generator-elimination.js similarity index 88% rename from tournaments/generator-elimination.js rename to server/tournaments/generator-elimination.js index a1f59dfd2b6b0..3954dd385ef22 100644 --- a/tournaments/generator-elimination.js +++ b/server/tournaments/generator-elimination.js @@ -12,8 +12,11 @@ const nameMap = { // Feel free to add more }; -module.exports = (() => { - function Elimination(maxSubtrees) { +class Elimination { + constructor(maxSubtrees) { + this.name = "Elimination"; + this.isDrawingSupported = false; + maxSubtrees = maxSubtrees || 1; if (typeof maxSubtrees === 'string' && maxSubtrees.toLowerCase() === 'infinity') { maxSubtrees = Infinity; @@ -36,18 +39,16 @@ module.exports = (() => { } } - Elimination.prototype.name = "Elimination"; - Elimination.prototype.isDrawingSupported = false; - - Elimination.prototype.addUser = function (user) { + addUser(user) { if (this.isBracketFrozen) return 'BracketFrozen'; this.users.set(user, {}); - }; - Elimination.prototype.removeUser = function (user) { + } + + removeUser(user) { if (this.isBracketFrozen) return 'BracketFrozen'; this.users.delete(user); - }; - Elimination.prototype.replaceUser = function (user, replacementUser) { + } + replaceUser(user, replacementUser) { this.users.delete(user); this.users.set(replacementUser, {}); @@ -63,17 +64,18 @@ module.exports = (() => { } } targetNode.getValue().user = replacementUser; - }; - Elimination.prototype.getUsers = function (remaining) { + } + getUsers(remaining) { let users = []; this.users.forEach((value, key) => { if (remaining && (value.isEliminated || value.isDisqualified)) return; users.push(key); }); return users; - }; + } - Elimination.prototype.generateBracket = function () { + + generateBracket() { Dex.shuffle(this.getUsers()).forEach(user => { if (!this.tree) { this.tree = { @@ -101,8 +103,8 @@ module.exports = (() => { this.tree.nextLayerLeafNodes = []; } }); - }; - Elimination.prototype.getBracketData = function () { + } + getBracketData() { let rootNode = {children: []}; if (this.tree) { let queue = [{fromNode: this.tree.tree, toNode: rootNode}]; @@ -134,8 +136,8 @@ module.exports = (() => { data.type = 'tree'; data.rootNode = rootNode.children[0] || null; return data; - }; - Elimination.prototype.freezeBracket = function () { + } + freezeBracket() { this.isBracketFrozen = true; this.users.forEach(user => { user.isBusy = false; @@ -227,9 +229,9 @@ module.exports = (() => { node.getValue().state = 'available'; } }); - }; + } - Elimination.prototype.disqualifyUser = function (user) { + disqualifyUser(user) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; this.users.get(user).isDisqualified = true; @@ -254,20 +256,20 @@ module.exports = (() => { if (match) { let error = this.setMatchResult(match, result); if (error) { - throw new Error("Unexpected " + error + " from setMatchResult([" + match.join(", ") + "], " + result + ")"); + throw new Error(`Unexpected ${error} from setMatchResult([${match.join(', ')}], ${result})`); } } - }; - Elimination.prototype.getUserBusy = function (user) { + } + getUserBusy(user) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; return this.users.get(user).isBusy; - }; - Elimination.prototype.setUserBusy = function (user, isBusy) { + } + setUserBusy(user, isBusy) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; this.users.get(user).isBusy = isBusy; - }; + } - Elimination.prototype.getAvailableMatches = function () { + getAvailableMatches() { if (!this.isBracketFrozen) return 'BracketNotFrozen'; let matches = []; @@ -281,11 +283,11 @@ module.exports = (() => { } }); return matches; - }; - Elimination.prototype.setMatchResult = function (match, result, score) { + } + setMatchResult(match, result, score) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; - if (!(result in {win:1, loss:1})) return 'InvalidMatchResult'; + if (!['win', 'loss'].includes(result)) return 'InvalidMatchResult'; if (!this.users.has(match[0]) || !this.users.has(match[1])) return 'UserNotAdded'; @@ -338,7 +340,7 @@ module.exports = (() => { } if (error) { - throw new Error("Unexpected " + error + " from setMatchResult([" + userA + ", " + userB + "], ...)"); + throw new Error(`Unexpected ${error} from setMatchResult([${userA},${userB}], ...)`); } } } else if (loserData.loseCount < this.maxSubtrees && !loserData.isDisqualified) { @@ -363,17 +365,17 @@ module.exports = (() => { } if (error) { - throw new Error("Unexpected " + error + " from setMatchResult([" + userA + ", " + userB + "], ...)"); + throw new Error(`Unexpected ${error} from setMatchResult([${userA}, ${userB}], ...)`); } } } - }; + } - Elimination.prototype.isTournamentEnded = function () { + isTournamentEnded() { return this.tree.tree.getValue().state === 'finished'; - }; + } - Elimination.prototype.getResults = function () { + getResults() { if (!this.isTournamentEnded()) return 'TournamentNotEnded'; let results = []; @@ -389,7 +391,7 @@ module.exports = (() => { } return results; - }; + } +} - return Elimination; -})(); +module.exports = Elimination; diff --git a/tournaments/generator-round-robin.js b/server/tournaments/generator-round-robin.js similarity index 76% rename from tournaments/generator-round-robin.js rename to server/tournaments/generator-round-robin.js index 8567d0d94d37b..9c52faacd3b63 100644 --- a/tournaments/generator-round-robin.js +++ b/server/tournaments/generator-round-robin.js @@ -1,43 +1,61 @@ 'use strict'; -module.exports = (() => { - function RoundRobin(isDoubles) { +/** @typedef {{state: string, score?: number[], result?: string}} Match */ +class RoundRobin { + /** + * @param {string} isDoubles + */ + constructor(isDoubles) { + /** @type {string} */ + this.name = "Round Robin"; + this.isDrawingSupported = true; + this.isDoubles = !!isDoubles; this.isBracketFrozen = false; + /** @type {User[]} */ this.users = []; - this.isUsersBusy = null; - this.matches = null; - this.userScores = null; + /** @type {boolean[]} */ + this.isUsersBusy = []; + /** @type {(?Match)[][]} */ + this.matches = []; + /** @type {number[]} */ + this.userScores = []; this.pendingMatches = new Map(); this.totalPendingMatches = 0; if (isDoubles) this.name = "Double " + this.name; } - - RoundRobin.prototype.name = "Round Robin"; - RoundRobin.prototype.isDrawingSupported = true; - - RoundRobin.prototype.addUser = function (user) { + /** + * @param {User} user + */ + addUser(user) { if (this.isBracketFrozen) return 'BracketFrozen'; this.users.push(user); this.pendingMatches.set(user, 0); - }; - RoundRobin.prototype.removeUser = function (user) { + } + /** + * @param {User} user + */ + removeUser(user) { if (this.isBracketFrozen) return 'BracketFrozen'; this.users.splice(this.users.indexOf(user), 1); this.pendingMatches.delete(user); - }; - RoundRobin.prototype.replaceUser = function (user, replacementUser) { + } + /** + * @param {User} user + * @param {User} replacementUser + */ + replaceUser(user, replacementUser) { this.users[this.users.indexOf(user)] = replacementUser; let pendingMatches = this.pendingMatches.get(user); this.pendingMatches.set(replacementUser, pendingMatches); this.pendingMatches.delete(user); - }; - RoundRobin.prototype.getUsers = function () { + } + getUsers() { return this.users.slice(0); - }; + } - RoundRobin.prototype.getBracketData = function () { + getBracketData() { let data = {}; data.type = 'table'; data.tableHeaders = { @@ -54,8 +72,9 @@ module.exports = (() => { cell.state = 'unavailable'; } else { let match = this.matches[row][col]; + if (!match) return null; cell.state = match.state; - if (match.state === 'finished') { + if (match.state === 'finished' && match.score) { cell.result = match.result; cell.score = match.score.slice(0); } @@ -67,8 +86,8 @@ module.exports = (() => { this.isBracketFrozen ? this.userScores[u] : 0 ); return data; - }; - RoundRobin.prototype.freezeBracket = function () { + } + freezeBracket() { this.isBracketFrozen = true; this.isUsersBusy = this.users.map(() => false); this.matches = this.users.map((userA, row) => @@ -84,9 +103,12 @@ module.exports = (() => { }) ); this.userScores = this.users.map(() => 0); - }; + } - RoundRobin.prototype.disqualifyUser = function (user) { + /** + * @param {User} user + */ + disqualifyUser(user) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; let userIndex = this.users.indexOf(user); @@ -111,19 +133,27 @@ module.exports = (() => { }); user.destroy(); - }; - RoundRobin.prototype.getUserBusy = function (user) { + } + /** + * @param {User} user + */ + getUserBusy(user) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; return this.isUsersBusy[this.users.indexOf(user)]; - }; - RoundRobin.prototype.setUserBusy = function (user, isBusy) { + } + /** + * @param {User} user + * @param {boolean} isBusy + */ + setUserBusy(user, isBusy) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; this.isUsersBusy[this.users.indexOf(user)] = isBusy; - }; + } - RoundRobin.prototype.getAvailableMatches = function () { + getAvailableMatches() { if (!this.isBracketFrozen) return 'BracketNotFrozen'; + /** @type {[User, User][]} */ let matches = []; this.matches.forEach((challenges, row) => { challenges.forEach((match, col) => { @@ -134,19 +164,24 @@ module.exports = (() => { }); }); return matches; - }; - RoundRobin.prototype.setMatchResult = function (match, result, score) { + } + /** + * @param {[User, User]} matchResult + * @param {string} result + * @param {number[]} score + */ + setMatchResult(matchResult, result, score) { if (!this.isBracketFrozen) return 'BracketNotFrozen'; - if (!(result in {win:1, loss:1, draw:1})) return 'InvalidMatchResult'; + if (!['win', 'loss', 'draw'].includes(result)) return 'InvalidMatchResult'; - let userA = match[0]; - let userB = match[1]; + let userA = matchResult[0]; + let userB = matchResult[1]; let userIndexA = this.users.indexOf(userA); let userIndexB = this.users.indexOf(userB); if (userIndexA < 0 || userIndexB < 0) return 'UserNotAdded'; - match = this.matches[userIndexA][userIndexB]; + let match = this.matches[userIndexA][userIndexB]; if (!match || match.state !== 'available') return 'InvalidMatch'; let virtualScore; @@ -172,21 +207,23 @@ module.exports = (() => { let pendingMatchesB = this.pendingMatches.get(userB); if (--pendingMatchesB === 0) userB.destroy(); this.pendingMatches.set(userB, pendingMatchesB); - }; + } - RoundRobin.prototype.isTournamentEnded = function () { + isTournamentEnded() { return this.isBracketFrozen && this.totalPendingMatches === 0; - }; + } - RoundRobin.prototype.getResults = function () { + getResults() { if (!this.isTournamentEnded()) return 'TournamentNotEnded'; let sortedScores = this.userScores.map((score, userIndex) => ({userIndex: userIndex, score: score}) ).sort((a, b) => b.score - a.score); + /** @type {User[][]} */ let results = []; let currentScore = sortedScores[0].score; + /** @type {User[]} */ let currentRank = []; results.push(currentRank); sortedScores.forEach(score => { @@ -198,7 +235,7 @@ module.exports = (() => { currentRank.push(this.users[score.userIndex]); }); return results; - }; + } +} - return RoundRobin; -})(); +module.exports = RoundRobin; diff --git a/tournaments/index.js b/server/tournaments/index.js similarity index 58% rename from tournaments/index.js rename to server/tournaments/index.js index 4f562b072b20f..039cea3b8aa66 100644 --- a/tournaments/index.js +++ b/server/tournaments/index.js @@ -1,7 +1,5 @@ 'use strict'; -const Matchmaker = require('../ladders-matchmaker').matchmaker; - const BRACKET_MINIMUM_UPDATE_INTERVAL = 2 * 1000; const AUTO_DISQUALIFY_WARNING_TIMEOUT = 30 * 1000; const AUTO_START_MINIMUM_TIMEOUT = 30 * 1000; @@ -16,7 +14,7 @@ let generatorFiles = { 'roundrobin': 'generator-round-robin', 'elimination': 'generator-elimination', }; -for (let type in generatorFiles) { +for (const type in generatorFiles) { TournamentGenerators[type] = require('./' + generatorFiles[type]); } @@ -38,6 +36,7 @@ class Tournament { this.id = room.id; this.room = room; this.title = Dex.getFormat(format).name + ' tournament'; + this.isTournament = true; this.allowRenames = false; this.players = Object.create(null); this.playerCount = 0; @@ -46,7 +45,7 @@ class Tournament { this.format = format; this.originalFormat = format; this.teambuilderFormat = format; - this.banlist = []; + this.customRules = []; this.generator = generator; this.isRated = isRated; this.scouting = true; @@ -54,7 +53,7 @@ class Tournament { this.forceTimer = false; this.autostartcap = false; if (Config.tourdefaultplayercap && this.playerCap > Config.tourdefaultplayercap) { - Monitor.log('[TourMonitor] Room ' + room.id + ' starting a tour over default cap (' + this.playerCap + ')'); + Monitor.log(`[TourMonitor] Room ${room.id} starting a tour over default cap (${this.playerCap})`); } this.isBracketInvalidated = true; @@ -77,14 +76,15 @@ class Tournament { this.isEnded = false; - room.add('|tournament|create|' + this.format + '|' + generator.name + '|' + this.playerCap); - room.send('|tournament|update|' + JSON.stringify({ + room.add(`|tournament|create|${this.format}|${generator.name}|${this.playerCap}`); + const update = { format: this.format, generator: generator.name, playerCap: this.playerCap, isStarted: false, isJoined: false, - })); + }; + room.send(`|tournament|update|${JSON.stringify(update)}`); this.update(); } destroy() { @@ -101,7 +101,7 @@ class Tournament { this.generator.getUsers().forEach(user => { let error = generator.addUser(user); if (typeof error === 'string') { - output.sendReply('|tournament|error|' + error); + output.sendReply(`|tournament|error|${error}`); isErrored = true; } }); @@ -109,49 +109,46 @@ class Tournament { if (isErrored) return; this.generator = generator; - this.room.send('|tournament|update|' + JSON.stringify({generator: generator.name})); + this.room.send(`|tournament|update|${JSON.stringify({generator: generator.name})}`); this.isBracketInvalidated = true; this.update(); return true; } - setBanlist(banlist, output) { - let format = Dex.getFormat(this.originalFormat); - if (format.team) { - output.errorReply(format.name + " does not support custom banlists."); + setCustomRules(rules, output) { + try { + this.teambuilderFormat = Dex.validateFormat(`${this.originalFormat}@@@${rules}`); + } catch (e) { + output.errorReply(`Custom rule error: ${e.message}`); return false; } - if (this.teambuilderFormat === this.originalFormat) this.teambuilderFormat = 'customgame-' + this.room.id + '-' + this.room.tourNumber; - Dex.getFormat(this.originalFormat, banlist, this.teambuilderFormat); - this.banlist = banlist; + this.customRules = Dex.getFormat(this.teambuilderFormat, true).customRules; return true; } - getBanlist() { - let bans = []; - let unbans = []; - let addedRules = []; - let removedRules = []; - for (let i = 0; i < this.banlist.length; i++) { - let ban = this.banlist[i]; - let unban = false; - if (ban.charAt(0) === '!') { - unban = true; - ban = ban.substr(1); - } - if (ban.startsWith('Rule:')) { - ban = ban.substr(5); - (unban ? removedRules : addedRules).push(ban); + getCustomRules() { + const bans = []; + const unbans = []; + const addedRules = []; + const removedRules = []; + for (const ban of this.customRules) { + let charAt0 = ban.charAt(0); + if (charAt0 === '+') { + unbans.push(ban.substr(1)); + } else if (charAt0 === '-') { + bans.push(ban.substr(1)); + } else if (charAt0 === '!') { + removedRules.push(ban.substr(1)); } else { - (unban ? unbans : bans).push(ban); + addedRules.push(ban); } } - let html = []; - if (bans.length) html.push("Bans - " + Chat.escapeHTML(bans.join(", "))); - if (unbans.length) html.push("Unbans - " + Chat.escapeHTML(unbans.join(", "))); - if (addedRules.length) html.push("Added rules - " + Chat.escapeHTML(addedRules.join(", "))); - if (removedRules.length) html.push("Removed rules - " + Chat.escapeHTML(removedRules.join(", "))); - return html.join("
    "); + const html = []; + if (bans.length) html.push(`Bans - ${Chat.escapeHTML(bans.join(', '))}`); + if (unbans.length) html.push(`Unbans - ${Chat.escapeHTML(unbans.join(', '))}`); + if (addedRules.length) html.push(`Added rules - ${Chat.escapeHTML(addedRules.join(', '))}`); + if (removedRules.length) html.push(`Removed rules - ${Chat.escapeHTML(removedRules.join(', '))}`); + return html.join(`
    `); } forceEnd() { @@ -159,14 +156,15 @@ class Tournament { if (this.autoDisqualifyTimer) clearTimeout(this.autoDisqualifyTimer); this.inProgressMatches.forEach(match => { if (match) { - delete match.room.tour; - match.room.addRaw("
    The tournament was forcefully ended.
    You can finish playing, but this battle is no longer considered a tournament battle.
    "); + match.room.tour = null; + match.room.parent = null; + match.room.addRaw(`
    The tournament was forcefully ended.
    You can finish playing, but this battle is no longer considered a tournament battle.
    `); } }); } else if (this.autoStartTimer) { clearTimeout(this.autoStartTimer); } - for (let i in this.players) { + for (const i in this.players) { this.players[i].destroy(); } this.room.add('|tournament|forceend'); @@ -185,8 +183,8 @@ class Tournament { ); return; } - let isJoined = targetUser.userid in this.players; - let update = { + const isJoined = targetUser.userid in this.players; + const update = { format: this.format, generator: this.generator.name, isStarted: this.isTournamentStarted, @@ -194,19 +192,20 @@ class Tournament { bracketData: this.bracketCache, }; if (this.format !== this.originalFormat) update.teambuilderFormat = this.originalFormat; - connection.sendTo(this.room, '|tournament|update|' + JSON.stringify(update)); + connection.sendTo(this.room, `|tournament|update|${JSON.stringify(update)}`); if (this.isTournamentStarted && isJoined) { - connection.sendTo(this.room, '|tournament|update|' + JSON.stringify({ + const update2 = { challenges: usersToNames(this.availableMatchesCache.challenges.get(this.players[targetUser.userid])), challengeBys: usersToNames(this.availableMatchesCache.challengeBys.get(this.players[targetUser.userid])), - })); + }; + connection.sendTo(this.room, `|tournament|update|${JSON.stringify(update2)}`); - let pendingChallenge = this.pendingChallenges.get(this.players[targetUser.userid]); + const pendingChallenge = this.pendingChallenges.get(this.players[targetUser.userid]); if (pendingChallenge) { if (pendingChallenge.to) { - connection.sendTo(this.room, '|tournament|update|' + JSON.stringify({challenging: pendingChallenge.to.name})); + connection.sendTo(this.room, `|tournament|update|${JSON.stringify({challenging: pendingChallenge.to.name})}`); } else if (pendingChallenge.from) { - connection.sendTo(this.room, '|tournament|update|' + JSON.stringify({challenged: pendingChallenge.from.name})); + connection.sendTo(this.room, `|tournament|update|${JSON.stringify({challenged: pendingChallenge.from.name})}`); } } } @@ -228,7 +227,7 @@ class Tournament { this.bracketCache = this.getBracketData(); this.isBracketInvalidated = false; - this.room.send('|tournament|update|' + JSON.stringify({bracketData: this.bracketCache})); + this.room.send(`|tournament|update|${JSON.stringify({bracketData: this.bracketCache})}`); } } @@ -237,10 +236,10 @@ class Tournament { this.isAvailableMatchesInvalidated = false; this.availableMatchesCache.challenges.forEach((opponents, player) => { - player.sendRoom('|tournament|update|' + JSON.stringify({challenges: usersToNames(opponents)})); + player.sendRoom(`|tournament|update|${JSON.stringify({challenges: usersToNames(opponents)})}`); }); this.availableMatchesCache.challengeBys.forEach((opponents, player) => { - player.sendRoom('|tournament|update|' + JSON.stringify({challengeBys: usersToNames(opponents)})); + player.sendRoom(`|tournament|update|${JSON.stringify({challengeBys: usersToNames(opponents)})}`); }); } this.room.send('|tournament|updateEnd'); @@ -254,7 +253,7 @@ class Tournament { if (!(user.userid in this.players)) return; if (this.isTournamentStarted) { if (!this.disqualifiedUsers.get(this.players[user.userid])) { - this.disqualifyUser(user.userid, user, null); + this.disqualifyUser(user.userid, null, null); } } else { this.removeUser(user); @@ -278,7 +277,7 @@ class Tournament { return; } - if (this.checkBanned(user)) { + if (this.checkBanned(user) || Punishments.isBattleBanned(user)) { output.sendReply('|tournament|error|Banned'); return; } @@ -290,9 +289,9 @@ class Tournament { } if (!isAllowAlts) { - let users = this.generator.getUsers(); - for (let i = 0; i < users.length; i++) { - let otherUser = Users.get(users[i].userid); + for (let otherUser of this.generator.getUsers()) { + if (!otherUser) continue; + otherUser = Users(otherUser.userid); if (otherUser && otherUser.latestIp === user.latestIp) { output.sendReply('|tournament|error|AltUserAlreadyAdded'); return; @@ -303,14 +302,14 @@ class Tournament { let player = new Rooms.RoomGamePlayer(user, this); let error = this.generator.addUser(player); if (typeof error === 'string') { - output.sendReply('|tournament|error|' + error); + output.sendReply(`|tournament|error|${error}`); player.destroy(); return; } this.players[user.userid] = player; this.playerCount++; - this.room.add('|tournament|join|' + user.name); + this.room.add(`|tournament|join|${user.name}`); user.sendTo(this.room, '|tournament|update|{"isJoined":true}'); this.isBracketInvalidated = true; this.update(); @@ -328,15 +327,15 @@ class Tournament { return; } - let error = this.generator.removeUser(this.players[user.userid]); + const error = this.generator.removeUser(this.players[user.userid]); if (typeof error === 'string') { - output.sendReply('|tournament|error|' + error); + output.sendReply(`|tournament|error|${error}`); return; } this.players[user.userid].destroy(); delete this.players[user.userid]; this.playerCount--; - this.room.add('|tournament|leave|' + user.name); + this.room.add(`|tournament|leave|${user.name}`); user.sendTo(this.room, '|tournament|update|{"isJoined":false}'); this.isBracketInvalidated = true; this.update(); @@ -352,13 +351,13 @@ class Tournament { return; } - let player = new Rooms.RoomGamePlayer(replacementUser, this); + const player = new Rooms.RoomGamePlayer(replacementUser, this); this.generator.replaceUser(this.players[user.userid], player); this.players[user.userid].destroy(); delete this.players[user.userid]; this.players[replacementUser.userid] = player; - this.room.add('|tournament|replace|' + user.name + '|' + replacementUser.name); + this.room.add(`|tournament|replace|${user.name}|${replacementUser.name}`); user.sendTo(this.room, '|tournament|update|{"isJoined":false}'); replacementUser.sendTo(this.room, '|tournament|update|{"isJoined":true}'); this.isBracketInvalidated = true; @@ -428,7 +427,7 @@ class Tournament { return false; } - let users = this.generator.getUsers(); + const users = this.generator.getUsers(); if (users.length < 2) { output.sendReply('|tournament|error|NotEnoughUsers'); return false; @@ -443,7 +442,7 @@ class Tournament { this.disqualifiedUsers = new Map(); this.autoDisqualifyWarnings = new Map(); this.lastActionTimes = new Map(); - let now = Date.now(); + const now = Date.now(); users.forEach(user => { this.availableMatches.set(user, new Map()); this.inProgressMatches.set(user, null); @@ -462,16 +461,16 @@ class Tournament { return true; } getAvailableMatches() { - let matches = this.generator.getAvailableMatches(); + const matches = this.generator.getAvailableMatches(); if (typeof matches === 'string') { - this.room.add("Unexpected error from getAvailableMatches(): " + matches + ". Please report this to an admin."); + this.room.add(`Unexpected error from getAvailableMatches(): ${matches}. Please report this to an admin.`); return; } - let users = this.generator.getUsers(); - let challenges = new Map(); - let challengeBys = new Map(); - let oldAvailableMatches = new Map(); + const users = this.generator.getUsers(); + const challenges = new Map(); + const challengeBys = new Map(); + const oldAvailableMatches = new Map(); users.forEach(user => { challenges.set(user, []); @@ -493,7 +492,7 @@ class Tournament { this.availableMatches.get(match[0]).set(match[1], true); }); - let now = Date.now(); + const now = Date.now(); this.availableMatches.forEach((availableMatches, user) => { if (oldAvailableMatches.get(user)) return; @@ -506,8 +505,8 @@ class Tournament { }; } - disqualifyUser(userid, output, reason) { - let user = Users.get(userid); + disqualifyUser(userid, output, reason, isSelfDQ) { + const user = Users.get(userid); let sendReply; if (output) { sendReply = msg => output.sendReply(msg); @@ -522,19 +521,19 @@ class Tournament { } if (!(userid in this.players)) { - sendReply('|tournament|error|UserNotAdded|' + userid); + sendReply(`|tournament|error|UserNotAdded|${userid}`); return false; } - let player = this.players[userid]; + const player = this.players[userid]; if (this.disqualifiedUsers.get(player)) { - sendReply('|tournament|error|AlreadyDisqualified|' + userid); + sendReply(`|tournament|error|AlreadyDisqualified|${userid}`); return false; } - let error = this.generator.disqualifyUser(player); + const error = this.generator.disqualifyUser(player); if (error) { - sendReply('|tournament|error|' + error); + sendReply(`|tournament|error|${error}`); return false; } @@ -559,7 +558,8 @@ class Tournament { if (matchFrom) { this.generator.setUserBusy(matchFrom.to, false); this.inProgressMatches.set(player, null); - delete matchFrom.room.tour; + matchFrom.room.tour = null; + matchFrom.room.parent = null; if (matchFrom.room.battle) matchFrom.room.battle.forfeit(player.userid); } @@ -570,15 +570,20 @@ class Tournament { if (matchTo) { this.generator.setUserBusy(matchTo, false); let matchRoom = this.inProgressMatches.get(matchTo).room; - delete matchRoom.tour; + matchRoom.tour = null; + matchRoom.parent = null; if (matchRoom.battle) matchRoom.battle.forfeit(player.userid); this.inProgressMatches.set(matchTo, null); } - this.room.add('|tournament|disqualify|' + player.name); + if (isSelfDQ) { + this.room.add(`|tournament|leave|${player.name}`); + } else { + this.room.add(`|tournament|disqualify|${player.name}`); + } if (user) { user.sendTo(this.room, '|tournament|update|{"isJoined":false}'); - if (reason !== null) user.popup("|modal|You have been disqualified from the tournament in " + this.room.title + (reason ? ":\n\n" + reason : ".")); + if (reason !== null) user.popup(`|modal|You have been disqualified from the tournament in ${this.room.title + (reason ? ':\n\n' + reason : '.')}`); } this.isBracketInvalidated = true; this.isAvailableMatchesInvalidated = true; @@ -608,7 +613,7 @@ class Tournament { this.room.add('|tournament|autostart|off'); } else { this.autoStartTimer = setTimeout(() => this.startTournament(output), timeout); - this.room.add('|tournament|autostart|on|' + timeout); + this.room.add(`|tournament|autostart|on|${timeout}`); } this.autoStartTimeout = timeout; @@ -627,7 +632,7 @@ class Tournament { if (this.autoDisqualifyTimer) clearTimeout(this.autoDisqualifyTimer); if (this.autoDisqualifyWarnings) this.autoDisqualifyWarnings.clear(); } else { - this.room.add('|tournament|autodq|on|' + this.autoDisqualifyTimeout); + this.room.add(`|tournament|autodq|on|${this.autoDisqualifyTimeout}`); if (this.isTournamentStarted) this.runAutoDisqualify(); } @@ -639,11 +644,11 @@ class Tournament { return false; } if (this.autoDisqualifyTimer) clearTimeout(this.autoDisqualifyTimer); - let now = Date.now(); + const now = Date.now(); this.lastActionTimes.forEach((time, player) => { let availableMatches = false; if (this.availableMatches.get(player).size) availableMatches = true; - let pendingChallenge = this.pendingChallenges.get(player); + const pendingChallenge = this.pendingChallenges.get(player); if (!availableMatches && !pendingChallenge) { this.autoDisqualifyWarnings.delete(player); @@ -669,7 +674,7 @@ class Tournament { } this.autoDisqualifyWarnings.set(player, true); - player.sendRoom('|tournament|autodq|target|' + remainingTime); + player.sendRoom(`|tournament|autodq|target|${remainingTime}`); } else { this.autoDisqualifyWarnings.delete(player); } @@ -677,7 +682,7 @@ class Tournament { if (!this.isEnded) this.autoDisqualifyTimer = setTimeout(() => this.runAutoDisqualify(), this.autoDisqualifyTimeout); } - challenge(user, targetUserid, output) { + async challenge(user, targetUserid, output) { if (!this.isTournamentStarted) { output.sendReply('|tournament|error|NotStarted'); return; @@ -693,9 +698,9 @@ class Tournament { return; } - let from = this.players[user.userid]; - let to = this.players[targetUserid]; - let availableMatches = this.availableMatches.get(from); + const from = this.players[user.userid]; + const to = this.players[targetUserid]; + const availableMatches = this.availableMatches.get(from); if (!availableMatches || !availableMatches.get(to)) { output.sendReply('|tournament|error|InvalidMatch'); return; @@ -712,11 +717,8 @@ class Tournament { this.isAvailableMatchesInvalidated = true; this.update(); - user.prepBattle(this.teambuilderFormat, 'tournament', user, this.banlist).then(validTeam => this.finishChallenge(user, to, output, validTeam)); - } - finishChallenge(user, to, output, validTeam) { - let from = this.players[user.userid]; - if (validTeam === false) { + const ready = await Ladders(this.teambuilderFormat).prepBattle(output.connection); + if (!ready) { this.generator.setUserBusy(from, false); this.generator.setUserBusy(to, false); @@ -726,10 +728,10 @@ class Tournament { } this.lastActionTimes.set(to, Date.now()); - this.pendingChallenges.set(from, {to: to, team: validTeam}); - this.pendingChallenges.set(to, {from: from, team: validTeam}); - from.sendRoom('|tournament|update|' + JSON.stringify({challenging: to.name})); - to.sendRoom('|tournament|update|' + JSON.stringify({challenged: from.name})); + this.pendingChallenges.set(from, {to: to, team: ready.team}); + this.pendingChallenges.set(to, {from: from, team: ready.team}); + from.sendRoom(`|tournament|update|${JSON.stringify({challenging: to.name})}`); + to.sendRoom(`|tournament|update|${JSON.stringify({challenged: from.name})}`); this.isBracketInvalidated = true; this.update(); @@ -745,8 +747,8 @@ class Tournament { return; } - let player = this.players[user.userid]; - let challenge = this.pendingChallenges.get(player); + const player = this.players[user.userid]; + const challenge = this.pendingChallenges.get(player); if (!challenge || challenge.from) return; this.generator.setUserBusy(player, false); @@ -760,7 +762,7 @@ class Tournament { this.isAvailableMatchesInvalidated = true; this.update(); } - acceptChallenge(user, output) { + async acceptChallenge(user, output) { if (!this.isTournamentStarted) { output.sendReply('|tournament|error|NotStarted'); return; @@ -771,25 +773,30 @@ class Tournament { return; } - let player = this.players[user.userid]; - let challenge = this.pendingChallenges.get(player); + const player = this.players[user.userid]; + const challenge = this.pendingChallenges.get(player); if (!challenge || !challenge.from) return; - user.prepBattle(this.teambuilderFormat, 'tournament', user, this.banlist).then(validTeam => this.finishAcceptChallenge(user, challenge, validTeam)); - } - finishAcceptChallenge(user, challenge, validTeam) { - if (validTeam === false) return; + const ready = await Ladders(this.teambuilderFormat).prepBattle(output.connection); + if (!ready) return; // Prevent battles between offline users from starting - let from = Users.get(challenge.from.userid); + const from = Users.get(challenge.from.userid); if (!from || !from.connected || !user.connected) return; // Prevent double accepts and users that have been disqualified while between these two functions if (!this.pendingChallenges.get(challenge.from)) return; - let player = this.players[user.userid]; if (!this.pendingChallenges.get(player)) return; - let room = Matchmaker.startBattle(from, user, this.teambuilderFormat, challenge.team, validTeam, {rated: !Ladders.disabled && this.isRated, tour: this}); + const room = Rooms.createBattle(this.teambuilderFormat, { + isPrivate: this.room.isPrivate, + p1: from, + p1team: challenge.team, + p2: user, + p2team: ready.team, + rated: !Ladders.disabled && this.isRated, + tour: this, + }); if (!room) return; this.pendingChallenges.set(challenge.from, null); @@ -798,7 +805,7 @@ class Tournament { user.sendTo(this.room, '|tournament|update|{"challenged":null}'); this.inProgressMatches.set(challenge.from, {to: player, room: room}); - this.room.add('|tournament|battlestart|' + from.name + '|' + user.name + '|' + room.id).update(); + this.room.add(`|tournament|battlestart|${from.name}|${user.name}|${room.id}`).update(); this.isBracketInvalidated = true; if (this.autoDisqualifyTimeout !== Infinity) this.runAutoDisqualify(this.room); @@ -806,7 +813,7 @@ class Tournament { this.update(); } forfeit(user) { - this.disqualifyUser(user.userid, null, "You left the tournament"); + return this.disqualifyUser(user.userid, null, "You left the tournament", true); } onConnect(user, connection) { this.updateFor(user, connection); @@ -830,19 +837,22 @@ class Tournament { } onBattleJoin(room, user) { if (this.scouting || this.isEnded || user.latestIp === room.p1.latestIp || user.latestIp === room.p2.latestIp) return; - let users = this.generator.getUsers(true); - for (let i = 0; i < users.length; i++) { - let otherUser = Users.get(users[i].userid); + if (user.can('makeroom')) return; + for (const targetUser of this.generator.getUsers(true)) { + const otherUser = Users.get(targetUser.userid); if (otherUser && otherUser.latestIp === user.latestIp) { return "Scouting is banned: tournament players can't watch other tournament battles."; } } } onBattleWin(room, winnerid) { - let from = this.players[room.p1.userid]; - let to = this.players[room.p2.userid]; - let winner = this.players[winnerid]; - let score = room.battle.score || [0, 0]; + room.tour = null; + room.parent = null; + + const from = this.players[room.p1.userid]; + const to = this.players[room.p2.userid]; + const winner = this.players[winnerid]; + const score = room.battle.score || [0, 0]; let result = 'draw'; if (from === winner) { @@ -852,7 +862,7 @@ class Tournament { } if (result === 'draw' && !this.generator.isDrawingSupported) { - this.room.add('|tournament|battleend|' + from.name + '|' + to.name + '|' + result + '|' + score.join(',') + '|fail|' + room.id); + this.room.add(`|tournament|battleend|${from.name}|${to.name}|${result}|${score.join(',')}|fail|${room.id}`); this.generator.setUserBusy(from, false); this.generator.setUserBusy(to, false); @@ -865,14 +875,15 @@ class Tournament { this.update(); return this.room.update(); } - - let error = this.generator.setMatchResult([from, to], result, score); - if (error) { - // Should never happen - return this.room.add("Unexpected " + error + " from setMatchResult([" + room.p1.userid + ", " + room.p2.userid + "], " + result + ", " + score + ") in onBattleWin(" + room.id + ", " + winnerid + "). Please report this to an admin.").update(); + if (!(this.disqualifiedUsers.get(from) || this.disqualifiedUsers.get(to))) { + // If a player was disqualified, handle the results there + const error = this.generator.setMatchResult([from, to], result, score); + if (error) { + // Should never happen + return this.room.add(`Unexpected ${error} from setMatchResult([${room.p1.userid}, ${room.p2.userid}], ${result}, ${score}) in onBattleWin(${room.id}, ${winnerid}). Please report this to an admin.`).update(); + } } - - this.room.add('|tournament|battleend|' + from.name + '|' + to.name + '|' + result + '|' + score.join(',') + '|success|' + room.id); + this.room.add(`|tournament|battleend|${from.name}|${to.name}|${result}|${score.join(',')}|success|${room.id}`); this.generator.setUserBusy(from, false); this.generator.setUserBusy(to, false); @@ -882,6 +893,12 @@ class Tournament { this.isAvailableMatchesInvalidated = true; if (this.generator.isTournamentEnded()) { + if (!this.room.isPrivate && this.generator.name.includes('Elimination') && !Config.autosavereplays) { + const uploader = Users.get(winnerid); + if (uploader && uploader.connections[0]) { + Chat.parse('/savereplay', room, uploader, uploader.connections[0]); + } + } this.onTournamentEnd(); } else { if (this.autoDisqualifyTimeout !== Infinity) this.runAutoDisqualify(); @@ -890,27 +907,37 @@ class Tournament { this.room.update(); } onTournamentEnd() { - this.room.add('|tournament|end|' + JSON.stringify({ + const update = { results: this.generator.getResults().map(usersToNames), format: this.format, generator: this.generator.name, bracketData: this.getBracketData(), - })); + }; + this.room.add(`|tournament|end|${JSON.stringify(update)}`); this.isEnded = true; if (this.autoDisqualifyTimer) clearTimeout(this.autoDisqualifyTimer); delete exports.tournaments[this.room.id]; delete this.room.game; - for (let i in this.players) { + for (const i in this.players) { this.players[i].destroy(); } } } +function getGenerator(generator) { + generator = toId(generator); + switch (generator) { + case 'elim': generator = 'elimination'; break; + case 'rr': generator = 'roundrobin'; break; + } + return TournamentGenerators[generator]; +} function createTournamentGenerator(generator, args, output) { - let Generator = TournamentGenerators[toId(generator)]; + let Generator = getGenerator(generator); if (!Generator) { - output.errorReply(generator + " is not a valid type."); - output.errorReply("Valid types: " + Object.keys(TournamentGenerators).join(", ")); + output.errorReply(`${generator} is not a valid type.`); + const generators = Object.keys(TournamentGenerators).join(', '); + output.errorReply(`Valid types: ${generators}`); return; } args.unshift(null); @@ -922,7 +949,7 @@ function createTournament(room, format, generator, playerCap, isRated, args, out return; } if (room.game) { - output.errorReply("You cannot have a tournament until the current room activity is over: " + room.game.title); + output.errorReply(`You cannot have a tournament until the current room activity is over: ${room.game.title}`); return; } if (Rooms.global.lockdown) { @@ -931,13 +958,15 @@ function createTournament(room, format, generator, playerCap, isRated, args, out } format = Dex.getFormat(format); if (format.effectType !== 'Format' || !format.tournamentShow) { - output.errorReply(format.id + " is not a valid tournament format."); - output.errorReply("Valid formats: " + Object.values(Dex.formats).filter(f => f.tournamentShow).map(format => format.name).join(", ")); + output.errorReply(`${format.id} is not a valid tournament format.`); + const formats = Object.values(Dex.formats).filter(f => f.tournamentShow).map(format => format.name).join(', '); + output.errorReply(`Valid formats: ${formats}`); return; } - if (!TournamentGenerators[toId(generator)]) { - output.errorReply(generator + " is not a valid type."); - output.errorReply("Valid types: " + Object.keys(TournamentGenerators).join(", ")); + if (!getGenerator(generator)) { + output.errorReply(`${generator} is not a valid type.`); + const generators = Object.keys(TournamentGenerators).join(', '); + output.errorReply(`Valid types: ${generators}`); return; } if (playerCap && playerCap < 2) { @@ -948,14 +977,14 @@ function createTournament(room, format, generator, playerCap, isRated, args, out return room.game; } function deleteTournament(id, output) { - let tournament = exports.tournaments[id]; + const tournament = exports.tournaments[id]; if (!tournament) { - output.errorReply(id + " doesn't exist."); + output.errorReply(`${id} doesn't exist.`); return false; } tournament.forceEnd(output); delete exports.tournaments[id]; - let room = Rooms(id); + const room = Rooms(id); if (room) delete room.game; return true; } @@ -965,19 +994,19 @@ function getTournament(id, output) { } } -let commands = { +const commands = { basic: { j: 'join', in: 'join', - join: function (tournament, user) { + join(tournament, user) { tournament.addUser(user, false, this); }, l: 'leave', out: 'leave', - leave: function (tournament, user) { + leave(tournament, user) { if (tournament.isTournamentStarted) { if (tournament.generator.getUsers(true).some(player => player.userid === user.userid)) { - tournament.disqualifyUser(user.userid, this); + tournament.disqualifyUser(user.userid, this, null, true); } else { this.errorReply("You have already been eliminated from this tournament."); } @@ -985,155 +1014,218 @@ let commands = { tournament.removeUser(user, this); } }, - getusers: function (tournament) { + getusers(tournament) { if (!this.runBroadcast()) return; let users = usersToNames(tournament.generator.getUsers(true).sort()); - this.sendReplyBox("" + users.length + " users remain in this tournament:
    " + Chat.escapeHTML(users.join(", "))); + this.sendReplyBox(`${users.length} users remain in this tournament:
    ${Chat.escapeHTML(users.join(', '))}`); }, - getupdate: function (tournament, user) { + getupdate(tournament, user) { tournament.updateFor(user); this.sendReply("Your tournament bracket has been updated."); }, - challenge: function (tournament, user, params, cmd) { + challenge(tournament, user, params, cmd) { if (params.length < 1) { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } tournament.challenge(user, toId(params[0]), this); }, - cancelchallenge: function (tournament, user) { + cancelchallenge(tournament, user) { tournament.cancelChallenge(user, this); }, - acceptchallenge: function (tournament, user) { + acceptchallenge(tournament, user) { tournament.acceptChallenge(user, this); }, - vtm: function (tournament, user, params, cmd, connection) { + vtm(tournament, user, params, cmd, connection) { if (Monitor.countPrepBattle(connection.ip, connection)) { return; } - TeamValidator(tournament.teambuilderFormat, tournament.banlist).prepTeam(user.team).then(result => { + TeamValidatorAsync(tournament.teambuilderFormat).validateTeam(user.team).then(result => { if (result.charAt(0) === '1') { connection.popup("Your team is valid for this tournament."); } else { - const format = Dex.getFormat(tournament.originalFormat).name.replace(/\[/, "\\[").replace(/\]/, "\\]"); - connection.popup("Your team was rejected for the following reasons:\n\n- " + result.slice(1).replace(/\n/g, '\n- ').replace(new RegExp(format, "g"), "this tournament")); + const formatName = Dex.getFormat(tournament.originalFormat).name; + // split/join is the easiest way to do a find/replace with an untrusted string, sadly + const reasons = result.slice(1).split(formatName).join('this tournament'); + connection.popup(`Your team was rejected for the following reasons:\n\n- ${reasons.replace(/\n/g, '\n- ')}`); } }); }, - viewruleset: 'viewbanlist', - viewbanlist: function (tournament) { + viewruleset: 'viewcustomrules', + viewbanlist: 'viewcustomrules', + viewrules: 'viewcustomrules', + viewcustomrules(tournament) { if (!this.runBroadcast()) return; - if (tournament.banlist.length < 1) { - return this.errorReply("The tournament's banlist is empty."); + if (tournament.customRules.length < 1) { + return this.errorReply("The tournament does not have any custom rules."); } - this.sendReplyBox("This tournament includes:
    " + tournament.getBanlist()); + this.sendReply(`|html|
    This tournament includes:
    ${tournament.getCustomRules()}
    `); }, }, creation: { - settype: function (tournament, user, params, cmd) { + settype(tournament, user, params, cmd) { if (params.length < 1) { - return this.sendReply("Usage: " + cmd + " [, ]"); + return this.sendReply(`Usage: ${cmd} [, ]`); } - let playerCap = parseInt(params.splice(1, 1)); - let generator = createTournamentGenerator(params.shift(), params, this); + const playerCap = parseInt(params.splice(1, 1)); + const generator = createTournamentGenerator(params.shift(), params, this); if (generator && tournament.setGenerator(generator, this)) { if (playerCap && playerCap >= 2) { tournament.playerCap = playerCap; if (Config.tourdefaultplayercap && tournament.playerCap > Config.tourdefaultplayercap) { - Monitor.log('[TourMonitor] Room ' + tournament.room.id + ' starting a tour over default cap (' + tournament.playerCap + ')'); + Monitor.log(`[TourMonitor] Room ${tournament.room.id} starting a tour over default cap (${tournament.playerCap})`); } + this.room.send(`|tournament|update|{"playerCap": "${playerCap}"}`); } else if (tournament.playerCap && !playerCap) { tournament.playerCap = 0; + this.room.send(`|tournament|update|{"playerCap": "${playerCap}"}`); } - const capNote = (tournament.playerCap ? " with a player cap of " + tournament.playerCap : ""); - this.privateModCommand("(" + user.name + " set tournament type to " + generator.name + capNote + ".)"); - this.sendReply("Tournament set to " + generator.name + capNote + "."); + const capNote = (tournament.playerCap ? ' with a player cap of ' + tournament.playerCap : ''); + this.privateModAction(`(${user.name} set tournament type to ${generator.name + capNote}.)`); + this.modlog('TOUR SETTYPE', null, generator.name + capNote); + this.sendReply(`Tournament set to ${generator.name + capNote}.`); } }, + cap: 'setplayercap', + playercap: 'setplayercap', + setcap: 'setplayercap', + setplayercap(tournament, user, params, cmd) { + if (params.length < 1) { + if (tournament.playerCap) { + return this.sendReply(`Usage: ${cmd} ; The current player cap is ${tournament.playerCap}`); + } else { + return this.sendReply(`Usage: ${cmd} `); + } + } + if (tournament.isTournamentStarted) { + return this.errorReply("The player cap cannot be changed once the tournament has started."); + } + const option = params[0].toLowerCase(); + if (option === '0' || option === 'infinity' || option === 'off' || option === 'false' || option === 'stop' || option === 'remove') { + if (!tournament.playerCap) return this.errorReply("The tournament does not have a player cap."); + params[0] = '0'; + } + const playerCap = parseInt(params[0]); + if (playerCap === 0) { + tournament.playerCap = 0; + this.privateModAction(`(${user.name} removed the tournament's player cap.)`); + this.modlog('TOUR PLAYERCAP', null, 'removed'); + this.sendReply("Tournament cap removed."); + } else { + if (isNaN(playerCap) || playerCap < 2) return this.errorReply("The tournament cannot have a player cap less than 2."); + if (playerCap === tournament.playerCap) return this.errorReply(`The tournament's player cap is already ${playerCap}.`); + tournament.playerCap = playerCap; + if (Config.tourdefaultplayercap && tournament.playerCap > Config.tourdefaultplayercap) { + Monitor.log(`[TourMonitor] Room ${tournament.room.id} starting a tour over default cap (${tournament.playerCap})`); + } + this.privateModAction(`(${user.name} set the tournament's player cap to ${tournament.playerCap}.)`); + this.modlog('TOUR PLAYERCAP', null, tournament.playerCap); + this.sendReply(`Tournament cap set to ${tournament.playerCap}.`); + } + this.room.send(`|tournament|update|{"playerCap": "${tournament.playerCap}"}`); + }, end: 'delete', stop: 'delete', - delete: function (tournament, user) { + delete(tournament, user) { if (deleteTournament(tournament.room.id, this)) { - this.privateModCommand("(" + user.name + " forcibly ended a tournament.)"); + this.privateModAction(`(${user.name} forcibly ended a tournament.)`); + this.modlog('TOUR END'); } }, - ruleset: 'banlist', - banlist: function (tournament, user, params, cmd) { + ruleset: 'customrules', + banlist: 'customrules', + rules: 'customrules', + customrules(tournament, user, params, cmd) { + if (cmd === 'banlist') { + return this.errorReply('The new syntax is: /tour rules -bannedthing, +unbannedthing, !removedrule, addedrule'); + } if (params.length < 1) { - return this.sendReply("Usage: " + cmd + " "); + this.sendReply("Usage: /tour rules "); + this.sendReply("Rules can be: -bannedthing, +unbannedthing, !removedrule, addedrule"); + return this.parse('/tour viewrules'); } if (tournament.isTournamentStarted) { - return this.errorReply("The banlist cannot be changed once the tournament has started."); + return this.errorReply("The custom rules cannot be changed once the tournament has started."); } - if (tournament.setBanlist(params, this)) { - this.room.addRaw("
    This tournament includes:
    " + tournament.getBanlist() + "
    "); - this.privateModCommand("(" + user.name + " set the tournament's banlist to " + tournament.banlist.join(", ") + ".)"); + if (tournament.setCustomRules(params, this)) { + this.room.addRaw(`
    This tournament includes:
    ${tournament.getCustomRules()}
    `); + this.privateModAction(`(${user.name} updated the tournament's custom rules.)`); + this.modlog('TOUR RULES', null, tournament.customRules.join(', ')); } }, - clearruleset: 'clearbanlist', - clearbanlist: function (tournament, user) { + clearruleset: 'clearcustomrules', + clearbanlist: 'clearcustomrules', + clearrules: 'clearcustomrules', + clearcustomrules(tournament, user) { if (tournament.isTournamentStarted) { - return this.errorReply("The banlist cannot be changed once the tournament has started."); + return this.errorReply("The custom rules cannot be changed once the tournament has started."); } - if (tournament.banlist.length < 1) { - return this.errorReply("The tournament's banlist is already empty."); + if (tournament.customRules.length < 1) { + return this.errorReply("The tournament does not have any custom rules."); } - tournament.banlist = []; + tournament.customRules = []; tournament.teambuilderFormat = tournament.originalFormat; - this.room.addRaw("The tournament's banlist was cleared."); - this.privateModCommand("(" + user.name + " cleared the tournament's banlist.)"); + this.room.addRaw(`The tournament's custom rules were cleared.`); + this.privateModAction(`(${user.name} cleared the tournament's custom rules.)`); + this.modlog('TOUR CLEARRULES'); }, name: 'setname', customname: 'setname', - setname: function (tournament, user, params, cmd) { + setname(tournament, user, params, cmd) { if (params.length < 1) { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } - const name = Chat.escapeHTML(params[0].trim()); - if (!name.length) return this.errorReply("The tournament's name cannot be blank."); - if (name.length > MAX_CUSTOM_NAME_LENGTH) return this.errorReply("The tournament's name cannot exceed " + MAX_CUSTOM_NAME_LENGTH + " characters."); + let name = this.canTalk(params[0].trim()); + if (!name) return; + name = Chat.escapeHTML(name); + if (name.length > MAX_CUSTOM_NAME_LENGTH) return this.errorReply(`The tournament's name cannot exceed ${MAX_CUSTOM_NAME_LENGTH} characters.`); if (name.includes('|')) return this.errorReply("The tournament's name cannot include the | symbol."); tournament.format = name; - this.room.send('|tournament|update|' + JSON.stringify({format: tournament.format})); - this.privateModCommand("(" + user.name + " set the tournament's name to " + tournament.format + ".)"); + this.room.send(`|tournament|update|${JSON.stringify({format: tournament.format})}`); + this.privateModAction(`(${user.name} set the tournament's name to ${tournament.format}.)`); + this.modlog('TOUR NAME', null, tournament.format); + tournament.update(); }, resetname: 'clearname', - clearname: function (tournament, user) { + clearname(tournament, user) { if (tournament.format === tournament.originalFormat) return this.errorReply("The tournament does not have a name."); tournament.format = tournament.originalFormat; - this.room.send('|tournament|update|' + JSON.stringify({format: tournament.format})); - this.privateModCommand("(" + user.name + " cleared the tournament's name.)"); + this.room.send(`|tournament|update|${JSON.stringify({format: tournament.format})}`); + this.privateModAction(`(${user.name} cleared the tournament's name.)`); + this.modlog('TOUR CLEARNAME'); + tournament.update(); }, }, moderation: { begin: 'start', - start: function (tournament, user) { + start(tournament, user) { if (tournament.startTournament(this)) { - this.room.sendModCommand("(" + user.name + " started the tournament.)"); + this.room.sendMods(`(${user.name} started the tournament.)`); } }, dq: 'disqualify', - disqualify: function (tournament, user, params, cmd) { + disqualify(tournament, user, params, cmd) { if (params.length < 1) { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } - let targetUser = Users.get(params[0]) || params[0]; - let targetUserid = toId(targetUser); + const targetUser = Users.get(params[0]) || params[0]; + const targetUserid = toId(targetUser); let reason = ''; if (params[1]) { reason = params[1].trim(); - if (reason.length > MAX_REASON_LENGTH) return this.errorReply("The reason is too long. It cannot exceed " + MAX_REASON_LENGTH + " characters."); + if (reason.length > MAX_REASON_LENGTH) return this.errorReply(`The reason is too long. It cannot exceed ${MAX_REASON_LENGTH} characters.`); } if (tournament.disqualifyUser(targetUserid, this, reason)) { - this.privateModCommand("(" + (targetUser.name || targetUserid) + " was disqualified from the tournament by " + user.name + (reason ? " (" + reason + ")" : "") + ")"); + this.privateModAction(`(${(targetUser.name || targetUserid)} was disqualified from the tournament by ${user.name} ${(reason ? ' (' + reason + ')' : '')})`); + this.modlog('TOUR DQ', targetUser, reason); } }, autostart: 'setautostart', - setautostart: function (tournament, user, params, cmd) { + setautostart(tournament, user, params, cmd) { if (params.length < 1) { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } let option = params[0].toLowerCase(); - if (option === 'on' || option === 'true' || option === 'start') { + if (this.meansYes(option) || option === 'start') { if (tournament.isTournamentStarted) { return this.errorReply("The tournament has already started."); } else if (!tournament.playerCap) { @@ -1141,46 +1233,49 @@ let commands = { } else { if (tournament.autostartcap) return this.errorReply("The tournament is already set to autostart when the player cap is reached."); tournament.autostartcap = true; - this.room.add("The tournament will start once " + tournament.playerCap + " players have joined."); - this.privateModCommand("(The tournament was set to autostart when the player cap is reached by " + user.name + ")"); + this.room.add(`The tournament will start once ${tournament.playerCap} players have joined.`); + this.privateModAction(`(The tournament was set to autostart when the player cap is reached by ${user.name})`); + this.modlog('TOUR AUTOSTART', null, 'when playercap is reached'); } } else { - if (option === '0' || option === 'infinity' || option === 'off' || option === 'false' || option === 'stop' || option === 'remove') { + if (option === '0' || option === 'infinity' || this.meansNo(option) || option === 'stop' || option === 'remove') { if (!tournament.autostartcap && tournament.autoStartTimeout === Infinity) return this.errorReply("The automatic tournament start timer is already off."); params[0] = 'off'; tournament.autostartcap = false; } - let timeout = params[0].toLowerCase() === 'off' ? Infinity : params[0]; + const timeout = params[0].toLowerCase() === 'off' ? Infinity : params[0]; if (tournament.setAutoStartTimeout(timeout * 60 * 1000, this)) { - this.privateModCommand("(The tournament auto start timer was set to " + params[0] + " by " + user.name + ")"); + this.privateModAction(`(The tournament auto start timer was set to ${params[0]} by ${user.name})`); + this.modlog('TOUR AUTOSTART', null, timeout === Infinity ? 'off' : params[0]); } } }, autodq: 'setautodq', - setautodq: function (tournament, user, params, cmd) { + setautodq(tournament, user, params, cmd) { if (params.length < 1) { if (tournament.autoDisqualifyTimeout !== Infinity) { - return this.sendReply("Usage: " + cmd + " ; The current automatic disqualify timer is set to " + (tournament.autoDisqualifyTimeout / 1000 / 60) + " minute(s)"); + return this.sendReply(`Usage: ${cmd} ; The current automatic disqualify timer is set to ${(tournament.autoDisqualifyTimeout / 1000 / 60)} minute(s)`); } else { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } } if (params[0].toLowerCase() === 'infinity' || params[0] === '0') params[0] = 'off'; - let timeout = params[0].toLowerCase() === 'off' ? Infinity : params[0] * 60 * 1000; - if (timeout === tournament.autoDisqualifyTimeout) return this.errorReply("The automatic tournament disqualify timer is already set to " + params[0] + " minute(s)."); + const timeout = params[0].toLowerCase() === 'off' ? Infinity : params[0] * 60 * 1000; + if (timeout === tournament.autoDisqualifyTimeout) return this.errorReply(`The automatic tournament disqualify timer is already set to ${params[0]} minute(s).`); if (tournament.setAutoDisqualifyTimeout(timeout, this)) { - this.privateModCommand("(The tournament auto disqualify timer was set to " + params[0] + " by " + user.name + ")"); + this.privateModAction(`(The tournament auto disqualify timer was set to ${params[0]} by ${user.name})`); + this.modlog('TOUR AUTODQ', null, timeout === Infinity ? 'off' : params[0]); } }, - runautodq: function (tournament, user) { + runautodq(tournament, user) { if (tournament.autoDisqualifyTimeout === Infinity) return this.errorReply("The automatic tournament disqualify timer is not set."); tournament.runAutoDisqualify(this); - this.logEntry(user.name + " used /tour runautodq"); + this.roomlog(`${user.name} used /tour runautodq`); }, scout: 'setscouting', scouting: 'setscouting', setscout: 'setscouting', - setscouting: function (tournament, user, params, cmd) { + setscouting(tournament, user, params, cmd) { if (params.length < 1) { if (tournament.scouting) { return this.sendReply("This tournament allows spectating other battles while in a tournament."); @@ -1189,25 +1284,27 @@ let commands = { } } - let option = params[0].toLowerCase(); - if (option === 'on' || option === 'true' || option === 'allow' || option === 'allowed') { + const option = params[0].toLowerCase(); + if (this.meansYes(option) || option === 'allow' || option === 'allowed') { if (tournament.scouting) return this.errorReply("Scouting for this tournament is already set to allowed."); tournament.scouting = true; tournament.modjoin = false; this.room.add('|tournament|scouting|allow'); - this.privateModCommand("(The tournament was set to allow scouting by " + user.name + ")"); - } else if (option === 'off' || option === 'false' || option === 'disallow' || option === 'disallowed') { + this.privateModAction(`(The tournament was set to allow scouting by ${user.name})`); + this.modlog('TOUR SCOUT', null, 'allow'); + } else if (this.meansNo(option) || option === 'disallow' || option === 'disallowed') { if (!tournament.scouting) return this.errorReply("Scouting for this tournament is already disabled."); tournament.scouting = false; tournament.modjoin = true; this.room.add('|tournament|scouting|disallow'); - this.privateModCommand("(The tournament was set to disallow scouting by " + user.name + ")"); + this.privateModAction(`(The tournament was set to disallow scouting by ${user.name})`); + this.modlog('TOUR SCOUT', null, 'disallow'); } else { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd}`); } }, modjoin: 'setmodjoin', - setmodjoin: function (tournament, user, params, cmd) { + setmodjoin(tournament, user, params, cmd) { if (params.length < 1) { if (tournament.modjoin) { return this.sendReply("This tournament allows players to modjoin their battles."); @@ -1216,43 +1313,47 @@ let commands = { } } - let option = params[0].toLowerCase(); - if (option === 'on' || option === 'true' || option === 'allow' || option === 'allowed') { + const option = params[0].toLowerCase(); + if (this.meansYes(option) || option === 'allow' || option === 'allowed') { if (tournament.modjoin) return this.errorReply("Modjoining is already allowed for this tournament."); tournament.modjoin = true; - this.room.add('Modjoining is now allowed (Players can modjoin their tournament battles).'); - this.privateModCommand("(The tournament was set to allow modjoin by " + user.name + ")"); - } else if (option === 'off' || option === 'false' || option === 'disallow' || option === 'disallowed') { + this.room.add("Modjoining is now allowed (Players can modjoin their tournament battles)."); + this.privateModAction(`(The tournament was set to allow modjoin by ${user.name})`); + this.modlog('TOUR MODJOIN', null, option); + } else if (this.meansNo(option) || option === 'disallow' || option === 'disallowed') { if (!tournament.modjoin) return this.errorReply("Modjoining is already not allowed for this tournament."); tournament.modjoin = false; - this.room.add('Modjoining is now banned (Players cannot modjoin their tournament battles).'); - this.privateModCommand("(The tournament was set to disallow modjoin by " + user.name + ")"); + this.room.add("Modjoining is now banned (Players cannot modjoin their tournament battles)."); + this.privateModAction(`(The tournament was set to disallow modjoin by ${user.name})`); + this.modlog('TOUR MODJOIN', null, option); } else { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } }, - forcetimer: function (tournament, user, params, cmd) { - let option = params.length ? params[0].toLowerCase() : 'on'; - if (option === 'on' || option === 'true') { + forcetimer(tournament, user, params, cmd) { + const option = params.length ? params[0].toLowerCase() : 'on'; + if (this.meansYes(option)) { tournament.forceTimer = true; this.room.add('Forcetimer is now on for the tournament.'); - this.privateModCommand("(The timer was turned on for the tournament by " + user.name + ")"); - } else if (option === 'off' || option === 'false' || option === 'stop') { + this.privateModAction(`(The timer was turned on for the tournament by ${user.name})`); + this.modlog('TOUR FORCETIMER', null, 'ON'); + } else if (this.meansNo(option) || option === 'stop') { tournament.forceTimer = false; this.room.add('Forcetimer is now off for the tournament.'); - this.privateModCommand("(The timer was turned off for the tournament by " + user.name + ")"); + this.privateModAction(`(The timer was turned off for the tournament by ${user.name})`); + this.modlog('TOUR FORCETIMER', null, 'ON'); } else { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } }, - banuser: function (tournament, user, params, cmd) { + banuser(tournament, user, params, cmd) { if (params.length < 1) { return this.sendReply(`Usage: ${cmd} , `); } let targetUser = Users.get(params[0]); - let online = !!targetUser; + const online = !!targetUser; if (!online) targetUser = params[0]; - let targetUserid = toId(targetUser); + const targetUserid = toId(targetUser); let reason = ''; if (params[1]) { reason = params[1].trim(); @@ -1261,33 +1362,35 @@ let commands = { if (tournament.checkBanned(targetUser)) return this.errorReply("This user is already banned from tournaments."); - let punishment = ['TOURBAN', targetUserid, Date.now() + TOURBAN_DURATION, reason]; + const punishment = ['TOURBAN', targetUserid, Date.now() + TOURBAN_DURATION, reason]; if (online) { Punishments.roomPunish(this.room, targetUser, punishment); } else { Punishments.roomPunishName(this.room, targetUser, punishment); } tournament.removeBannedUser(targetUser); + this.modlog('TOUR BAN', targetUser, reason); if (reason) reason = ` (${reason})`; - this.privateModCommand(`${targetUser.name || targetUserid} was banned from joining tournaments by ${user.name}.${reason}`); + this.privateModAction(`${targetUser.name || targetUserid} was banned from joining tournaments by ${user.name}.${reason}`); }, - unbanuser: function (tournament, user, params, cmd) { + unbanuser(tournament, user, params, cmd) { if (params.length < 1) { return this.sendReply(`Usage: ${cmd} `); } - let targetUser = Users.get(params[0]) || params[0]; - let targetUserid = toId(targetUser); + const targetUser = Users.get(params[0]) || params[0]; + const targetUserid = toId(targetUser); if (!tournament.checkBanned(targetUser)) return this.errorReply("This user isn't banned from tournaments."); Punishments.roomUnpunish(this.room, targetUser, 'TOURBAN'); tournament.removeBannedUser(targetUser); - this.privateModCommand(`${targetUser.name || targetUserid} was unbanned from joining tournaments by ${user.name}.`); + this.privateModAction(`${targetUser.name || targetUserid} was unbanned from joining tournaments by ${user.name}.`); + this.modlog('TOUR UNBAN', targetUser, null, {noip: 1, noalts: 1}); }, }, }; -Chat.loadCommands(); +Chat.loadPlugins(); Chat.commands.tour = 'tournament'; Chat.commands.tours = 'tournament'; Chat.commands.tournaments = 'tournament'; @@ -1299,17 +1402,18 @@ Chat.commands.tournament = function (paramString, room, user, connection) { if (cmd === '') { if (!this.runBroadcast()) return; - this.sendReply('|tournaments|info|' + JSON.stringify(Object.keys(exports.tournaments).filter(tournament => { + const update = Object.keys(exports.tournaments).filter(tournament => { tournament = exports.tournaments[tournament]; return !tournament.room.isPrivate && !tournament.room.isPersonal && !tournament.room.staffRoom; }).map(tournament => { tournament = exports.tournaments[tournament]; return {room: tournament.room.id, title: tournament.room.title, format: tournament.format, generator: tournament.generator.name, isStarted: tournament.isTournamentStarted}; - }))); + }); + this.sendReply(`|tournaments|info|${JSON.stringify(update)}`); } else if (cmd === 'help') { return this.parse('/help tournament'); - } else if (cmd === 'on' || cmd === 'enable') { - if (!this.can('tournamentsmanagement', null, room)) return; + } else if (this.meansYes(cmd)) { + if (!this.can('gamemanagement', null, room)) return; let rank = params[0]; if (rank && rank === '@') { if (room.toursEnabled === true) return this.errorReply("Tournaments are already enabled for @ and above in this room."); @@ -1330,8 +1434,8 @@ Chat.commands.tournament = function (paramString, room, user, connection) { } else { return this.errorReply("Tournament enable setting not recognized. Valid options include [%|@]."); } - } else if (cmd === 'off' || cmd === 'disable') { - if (!this.can('tournamentsmanagement', null, room)) return; + } else if (this.meansNo(cmd)) { + if (!this.can('gamemanagement', null, room)) return; if (!room.toursEnabled) { return this.errorReply("Tournaments are already disabled."); } @@ -1342,7 +1446,7 @@ Chat.commands.tournament = function (paramString, room, user, connection) { } return this.sendReply("Tournaments are now disabled."); } else if (cmd === 'announce' || cmd === 'announcements') { - if (!this.can('tournamentsmanagement', null, room)) return; + if (!this.can('gamemanagement', null, room)) return; if (!Config.tourannouncements.includes(room.id)) { return this.errorReply("Tournaments in this room cannot be announced."); } @@ -1355,16 +1459,18 @@ Chat.commands.tournament = function (paramString, room, user, connection) { } let option = params[0].toLowerCase(); - if (option === 'on' || option === 'enable') { + if (this.meansYes(option)) { if (room.tourAnnouncements) return this.errorReply("Tournament announcements are already enabled."); room.tourAnnouncements = true; - this.privateModCommand("(Tournament announcements were enabled by " + user.name + ")"); - } else if (option === 'off' || option === 'disable') { + this.privateModAction(`(Tournament announcements were enabled by ${user.name})`); + this.modlog('TOUR ANNOUNCEMENTS', null, 'ON'); + } else if (this.meansNo(option)) { if (!room.tourAnnouncements) return this.errorReply("Tournament announcements are already disabled."); room.tourAnnouncements = false; - this.privateModCommand("(Tournament announcements were disabled by " + user.name + ")"); + this.privateModAction(`(Tournament announcements were disabled by ${user.name})`); + this.modlog('TOUR ANNOUNCEMENTS', null, 'OFF'); } else { - return this.sendReply("Usage: " + cmd + " "); + return this.sendReply(`Usage: ${cmd} `); } if (room.chatRoomData) { @@ -1375,22 +1481,23 @@ Chat.commands.tournament = function (paramString, room, user, connection) { if (room.toursEnabled === true) { if (!this.can('tournaments', null, room)) return; } else if (room.toursEnabled === '%') { - if (!this.can('tournamentsmoderation', null, room)) return; + if (!this.can('gamemoderation', null, room)) return; } else { - if (!user.can('tournamentsmanagement', null, room)) { - return this.errorReply("Tournaments are disabled in this room (" + room.id + ")."); + if (!user.can('gamemanagement', null, room)) { + return this.errorReply(`Tournaments are disabled in this room (${room.id}).`); } } if (params.length < 2) { - return this.sendReply("Usage: " + cmd + " , [, ]"); + return this.sendReply(`Usage: ${cmd} , [, ]`); } let tour = createTournament(room, params.shift(), params.shift(), params.shift(), Config.ratedtours, params, this); if (tour) { - this.privateModCommand("(" + user.name + " created a tournament in " + tour.format + " format.)"); + this.privateModAction(`(${user.name} created a tournament in ${tour.format} format.)`); + this.modlog('TOUR CREATE', null, tour.format); if (room.tourAnnouncements) { let tourRoom = Rooms.search(Config.tourroom || 'tournaments'); - if (tourRoom && tourRoom !== room) tourRoom.addRaw('').update(); + if (tourRoom && tourRoom !== room) tourRoom.addRaw(``).update(); } } } else { @@ -1408,24 +1515,24 @@ Chat.commands.tournament = function (paramString, room, user, connection) { if (room.toursEnabled === true) { if (!this.can('tournaments', null, room)) return; } else if (room.toursEnabled === '%') { - if (!this.can('tournamentsmoderation', null, room)) return; + if (!this.can('gamemoderation', null, room)) return; } else { - if (!user.can('tournamentsmanagement', null, room)) { - return this.errorReply("Tournaments are disabled in this room (" + room.id + ")."); + if (!user.can('gamemanagement', null, room)) { + return this.errorReply(`Tournaments are disabled in this room (${room.id}).`); } } commandHandler = typeof commands.creation[cmd] === 'string' ? commands.creation[commands.creation[cmd]] : commands.creation[cmd]; } if (commands.moderation[cmd]) { - if (!user.can('tournamentsmoderation', null, room)) { - return this.errorReply(cmd + " - Access denied."); + if (!user.can('gamemoderation', null, room)) { + return this.errorReply(`${cmd} - Access denied.`); } commandHandler = typeof commands.moderation[cmd] === 'string' ? commands.moderation[commands.moderation[cmd]] : commands.moderation[cmd]; } if (!commandHandler) { - this.errorReply(cmd + " is not a tournament command."); + this.errorReply(`${cmd} is not a tournament command.`); } else { commandHandler.call(this, tournament, user, params, cmd, connection); } @@ -1434,28 +1541,29 @@ Chat.commands.tournament = function (paramString, room, user, connection) { Chat.commands.tournamenthelp = function (target, room, user) { if (!this.runBroadcast()) return; return this.sendReplyBox( - "- create/new <format>, <type> [, <comma-separated arguments>]: Creates a new tournament in the current room.
    " + - "- settype <type> [, <comma-separated arguments>]: Modifies the type of tournament after it's been created, but before it has started.
    " + - "- banlist <comma-separated arguments>: Sets the custom banlist for the tournament before it has started.
    " + - "- viewbanlist: Shows the custom banlist for the tournament.
    " + - "- clearbanlist: Clears the custom banlist for the tournament before it has started.
    " + - "- name <name>: Sets a custom name for the tournament.
    " + - "- clearname: Clears the custom name of the tournament.
    " + - "- end/stop/delete: Forcibly ends the tournament in the current room.
    " + - "- begin/start: Starts the tournament in the current room.
    " + - "- autostart/setautostart <on|minutes|off>: Sets the automatic start timeout.
    " + - "- dq/disqualify <user>: Disqualifies a user.
    " + - "- autodq/setautodq <minutes|off>: Sets the automatic disqualification timeout.
    " + - "- runautodq: Manually run the automatic disqualifier.
    " + - "- scouting <allow|disallow>: Specifies whether joining tournament matches while in a tournament is allowed.
    " + - "- modjoin <allow|disallow>: Specifies whether players can modjoin their battles.
    " + - "- forcetimer <on|off>: Turn on the timer for tournament battles.
    " + - "- getusers: Lists the users in the current tournament.
    " + - "- on/enable <%|@>: Enables allowing drivers or mods to start tournaments in the current room.
    " + - "- off/disable: Disables allowing drivers and mods to start tournaments in the current room.
    " + - "- announce/announcements <on|off>: Enables/disables tournament announcements for the current room.
    " + - "- banuser/unbanuser <user>: Bans/unbans a user from joining tournaments in this room. Lasts 2 weeks.
    " + - "More detailed help can be found here" + `- create/new <format>, <type>, [ <comma-separated arguments>]: Creates a new tournament in the current room.
    ` + + `- settype <type> [, <comma-separated arguments>]: Modifies the type of tournament after it's been created, but before it has started.
    ` + + `- cap/playercap <cap>: Sets the player cap of the tournament before it has started.
    ` + + `- rules/banlist <comma-separated arguments>: Sets the custom rules for the tournament before it has started.
    ` + + `- viewrules/viewbanlist: Shows the custom rules for the tournament.
    ` + + `- clearrules/clearbanlist: Clears the custom rules for the tournament before it has started.
    ` + + `- name <name>: Sets a custom name for the tournament.
    ` + + `- clearname: Clears the custom name of the tournament.
    ` + + `- end/stop/delete: Forcibly ends the tournament in the current room.
    ` + + `- begin/start: Starts the tournament in the current room.
    ` + + `- autostart/setautostart <on|minutes|off>: Sets the automatic start timeout.
    ` + + `- dq/disqualify <user>: Disqualifies a user.
    ` + + `- autodq/setautodq <minutes|off>: Sets the automatic disqualification timeout.
    ` + + `- runautodq: Manually run the automatic disqualifier.
    ` + + `- scouting <allow|disallow>: Specifies whether joining tournament matches while in a tournament is allowed.
    ` + + `- modjoin <allow|disallow>: Specifies whether players can modjoin their battles.
    ` + + `- forcetimer <on|off>: Turn on the timer for tournament battles.
    ` + + `- getusers: Lists the users in the current tournament.
    ` + + `- on/enable <%|@>: Enables allowing drivers or mods to start tournaments in the current room.
    ` + + `- off/disable: Disables allowing drivers and mods to start tournaments in the current room.
    ` + + `- announce/announcements <on|off>: Enables/disables tournament announcements for the current room.
    ` + + `- banuser/unbanuser <user>: Bans/unbans a user from joining tournaments in this room. Lasts 2 weeks.
    ` + + `More detailed help can be found here` ); }; diff --git a/tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js b/server/tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js similarity index 100% rename from tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js rename to server/tournaments/lib/closure-goog.structs.TreeNode-c8e0b2dcd892.min.js diff --git a/users.js b/server/users.js similarity index 66% rename from users.js rename to server/users.js index 93e90ba2b7a00..196fce5335582 100644 --- a/users.js +++ b/server/users.js @@ -24,6 +24,10 @@ */ 'use strict'; +/** @typedef {GlobalRoom | GameRoom | ChatRoom} Room */ + +const PLAYER_SYMBOL = '\u2606'; +const HOST_SYMBOL = '\u2605'; const THROTTLE_DELAY = 600; const THROTTLE_BUFFER_LIMIT = 6; @@ -32,24 +36,23 @@ const THROTTLE_MULTILINE_WARN_STAFF = 6; const PERMALOCK_CACHE_TIME = 30 * 24 * 60 * 60 * 1000; -const FS = require('./fs'); - -const Matchmaker = require('./ladders-matchmaker').matchmaker; +const DEFAULT_TRAINER_SPRITES = [1, 2, 101, 102, 169, 170, 265, 266]; -let Users = module.exports = getUser; +/** @type {typeof import('../lib/fs').FS} */ +const FS = require(/** @type {any} */('../.lib-dist/fs')).FS; /********************************************************* - * Users map + * Utility functions *********************************************************/ -let users = Users.users = new Map(); -let prevUsers = Users.prevUsers = new Map(); -let numUsers = 0; - // Low-level functions for manipulating Users.users and Users.prevUsers // Keeping them all here makes it easy to ensure they stay consistent -Users.move = function (user, newUserid) { +/** + * @param {User} user + * @param {string} newUserid + */ +function move(user, newUserid) { if (user.userid === newUserid) return true; if (!user) return false; @@ -62,8 +65,11 @@ Users.move = function (user, newUserid) { users.set(newUserid, user); return true; -}; -Users.add = function (user) { +} +/** + * @param {User} user + */ +function add(user) { if (user.userid) throw new Error(`Adding a user that already exists`); numUsers++; @@ -73,15 +79,22 @@ Users.add = function (user) { if (users.has(user.userid)) throw new Error(`userid taken: ${user.userid}`); users.set(user.userid, user); -}; -Users.delete = function (user) { +} +/** + * @param {User} user + */ +function deleteUser(user) { prevUsers.delete('guest' + user.guestNum); users.delete(user.userid); -}; -Users.merge = function (user1, user2) { +} +/** + * @param {User} user1 + * @param {User} user2 + */ +function merge(user1, user2) { prevUsers.delete(user2.userid); prevUsers.set(user1.userid, user2.userid); -}; +} /** * Get a user. @@ -89,7 +102,7 @@ Users.merge = function (user1, user2) { * Usage: * Users.get(userid or username) * - * Returns the corresponding User object, or undefined if no matching + * Returns the corresponding User object, or null if no matching * was found. * * By default, this function will track users across name changes. @@ -97,21 +110,25 @@ Users.merge = function (user1, user2) { * Users.get("Some dude") will give you "Some guy"s user object. * * If this behavior is undesirable, use Users.getExact. + * @param {?string | User} name + * @param {boolean} exactName + * @return {?User} */ -function getUser(name, exactName) { +function getUser(name, exactName = false) { if (!name || name === '!') return null; - if (name && name.userid) return name; + // @ts-ignore + if (name.userid) return name; let userid = toId(name); let i = 0; if (!exactName) { while (userid && !users.has(userid) && i < 1000) { + // @ts-ignore userid = prevUsers.get(userid); i++; } } - return users.get(userid); + return users.get(userid) || null; } -Users.get = getUser; /** * Get a user by their exact username. @@ -124,48 +141,51 @@ Users.get = getUser; * Users.get(userid or username, true) is equivalent to * Users.getExact(userid or username). * The former is not recommended because it's less readable. + * @param {string | User} name */ -let getExactUser = Users.getExact = function (name) { +function getExactUser(name) { return getUser(name, true); -}; +} /** * Get a list of all users matching a list of userids and ips. * * Usage: * Users.findUsers([userids], [ips]) - * + * @param {string[]} userids + * @param {string[]} ips + * @param {{forPunishment?: boolean, includeTrusted?: boolean}} options */ -let findUsers = Users.findUsers = function (userids, ips, options) { - let matches = []; - if (options && options.forPunishment) ips = ips.filter(ip => !Punishments.sharedIps.has(ip)); - users.forEach(user => { - if (!(options && options.forPunishment) && !user.named && !user.connected) return; - if (!(options && options.includeTrusted) && user.trusted) return; +function findUsers(userids, ips, options = {}) { + let matches = /** @type {User[]} */ ([]); + if (options.forPunishment) ips = ips.filter(ip => !Punishments.sharedIps.has(ip)); + for (const user of users.values()) { + if (!options.forPunishment && !user.named && !user.connected) continue; + if (!options.includeTrusted && user.trusted) continue; if (userids.includes(user.userid)) { matches.push(user); - return; + continue; } for (let myIp of ips) { if (myIp in user.ips) { matches.push(user); - return; + break; } } - }); + } return matches; -}; +} /********************************************************* * User groups *********************************************************/ -let usergroups = Users.usergroups = Object.create(null); +let usergroups = Object.create(null); function importUsergroups() { // can't just say usergroups = {} because it's exported for (let i in usergroups) delete usergroups[i]; - FS('config/usergroups.csv').readTextIfExists().then(data => { + FS('config/usergroups.csv').readIfExists().then(data => { for (const row of data.split("\n")) { if (!row) continue; let cells = row.split(","); @@ -186,7 +206,7 @@ function cacheGroupData() { if (Config.groups) { // Support for old config groups format. // Should be removed soon. - console.log( + console.error( `You are using a deprecated version of user group specification in config.\n` + `Support for this will be removed soon.\n` + `Please ensure that you update your config.js to the new format (see config-example.js, line 220).\n` @@ -199,8 +219,13 @@ function cacheGroupData() { let groups = Config.groups; let punishgroups = Config.punishgroups; + /** @type {{[k: string]: 'processing' | true}} */ let cachedGroups = {}; + /** + * @param {string} sym + * @param {any} groupData + */ function cacheGroup(sym, groupData) { if (cachedGroups[sym] === 'processing') return false; // cyclic inheritance. @@ -248,7 +273,7 @@ function cacheGroupData() { punishgroups.locked = { name: 'Locked', id: 'locked', - symbol: '‽', + symbol: '\u203d', }; } if (!punishgroups.muted) { @@ -261,7 +286,12 @@ function cacheGroupData() { } cacheGroupData(); -Users.setOfflineGroup = function (name, group, forceTrusted) { +/** + * @param {string} name + * @param {string} group + * @param {boolean} forceTrusted + */ +function setOfflineGroup(name, group, forceTrusted) { if (!group) throw new Error(`Falsy value passed to setOfflineGroup`); let userid = toId(name); let user = getExactUser(userid); @@ -278,62 +308,86 @@ Users.setOfflineGroup = function (name, group, forceTrusted) { } exportUsergroups(); return true; -}; - -Users.isUsernameKnown = function (name) { +} +/** + * @param {string} name + */ +function isUsernameKnown(name) { let userid = toId(name); if (Users(userid)) return true; if (userid in usergroups) return true; - for (let i = 0; i < Rooms.global.chatRooms.length; i++) { - let curRoom = Rooms.global.chatRooms[i]; - if (!curRoom.auth) continue; - if (userid in curRoom.auth) return true; + for (const room of Rooms.global.chatRooms) { + if (!room.auth) continue; + if (userid in room.auth) return true; } return false; -}; +} -Users.isTrusted = function (name) { +/** + * @param {string | User} name + */ +function isTrusted(name) { + // @ts-ignore if (name.trusted) return name.trusted; let userid = toId(name); if (userid in usergroups) return userid; - for (let i = 0; i < Rooms.global.chatRooms.length; i++) { - let curRoom = Rooms.global.chatRooms[i]; - if (!curRoom.isPrivate && !curRoom.isPersonal && curRoom.auth && userid in curRoom.auth && curRoom.auth[userid] !== '+') return userid; + for (const room of Rooms.global.chatRooms) { + if (!room.isPrivate && !room.isPersonal && room.auth && userid in room.auth && room.auth[userid] !== '+') return userid; } return false; -}; - -Users.importUsergroups = importUsergroups; -Users.cacheGroupData = cacheGroupData; +} /********************************************************* * User and Connection classes *********************************************************/ -let connections = Users.connections = new Map(); +let connections = new Map(); class Connection { + /** + * @param {string} id + * @param {any} worker + * @param {string} socketid + * @param {?User} user + * @param {?string} ip + * @param {?string} protocol + */ constructor(id, worker, socketid, user, ip, protocol) { this.id = id; this.socketid = socketid; this.worker = worker; this.inRooms = new Set(); - this.user = user; + /** + * This can be null during initialization and after disconnecting, + * but we're asserting it non-null for ease of use. The main risk + * is async code, where you need to re-check that it's not null + * before using it. + * @type {User} + */ + this.user = /** @type {User} */ (user); this.ip = ip || ''; this.protocol = protocol || ''; - this.autojoin = ''; + this.challenge = ''; + this.autojoins = ''; } - + /** + * @param {string | BasicRoom?} roomid + * @param {string} data + */ sendTo(roomid, data) { + // @ts-ignore if (roomid && roomid.id) roomid = roomid.id; if (roomid && roomid !== 'lobby') data = `>${roomid}\n${data}`; Sockets.socketSend(this.worker, this.socketid, data); Monitor.countNetworkUse(data.length); } + /** + * @param {string} data + */ send(data) { Sockets.socketSend(this.worker, this.socketid, data); Monitor.countNetworkUse(data.length); @@ -346,29 +400,48 @@ class Connection { onDisconnect() { connections.delete(this.id); if (this.user) this.user.onDisconnect(this); - this.user = null; + this.user = /** @type {any} */ (null); } + /** + * @param {string} message + */ popup(message) { this.send(`|popup|` + message.replace(/\n/g, '||')); } + /** + * @param {GlobalRoom | GameRoom | ChatRoom} room + */ joinRoom(room) { if (this.inRooms.has(room.id)) return; this.inRooms.add(room.id); - Sockets.channelAdd(this.worker, room.id, this.socketid); + Sockets.roomAdd(this.worker, room.id, this.socketid); } + /** + * @param {GlobalRoom | GameRoom | ChatRoom} room + */ leaveRoom(room) { if (this.inRooms.has(room.id)) { this.inRooms.delete(room.id); - Sockets.channelRemove(this.worker, room.id, this.socketid); + Sockets.roomRemove(this.worker, room.id, this.socketid); } } + toString() { + return (this.user ? this.user.userid + '[' + this.user.connections.indexOf(this) + ']' : '[disconnected]') + ':' + this.ip + (this.protocol !== 'websocket' ? ':' + this.protocol : ''); + } } +/** @typedef {[string, string, Connection]} ChatQueueEntry */ + // User -class User { +class User extends Chat.MessageContext { + /** + * @param {Connection} connection + */ constructor(connection) { + super(connection.user); + this.user = this; this.mmrCache = Object.create(null); this.guestNum = -1; this.name = ""; @@ -377,42 +450,57 @@ class User { this.userid = ''; this.group = Config.groupsranking[0]; - let trainersprites = [1, 2, 101, 102, 169, 170, 265, 266]; - this.avatar = trainersprites[Math.floor(Math.random() * trainersprites.length)]; + this.avatar = DEFAULT_TRAINER_SPRITES[Math.floor(Math.random() * DEFAULT_TRAINER_SPRITES.length)]; this.connected = true; if (connection.user) connection.user = this; this.connections = [connection]; + /**@type {string} */ this.latestHost = ''; this.ips = Object.create(null); this.ips[connection.ip] = 1; // Note: Using the user's latest IP for anything will usually be // wrong. Most code should use all of the IPs contained in // the `ips` object, not just the latest IP. + /** @type {string} */ this.latestIp = connection.ip; + /** @type {?false | string} */ this.locked = false; + /** @type {?false | string} */ + this.semilocked = false; + /** @type {?boolean} */ this.namelocked = false; + /** @type {?false | string} */ + this.permalocked = false; this.prevNames = Object.create(null); this.inRooms = new Set(); - // Set of roomids + /** + * Set of room IDs + * @type {Set} + */ this.games = new Set(); + /** Millisecond timestamp for last battle decision */ + this.lastDecision = 0; - // searches and challenges - this.searching = Object.create(null); - this.challengesFrom = {}; - this.challengeTo = null; + // misc state this.lastChallenge = 0; + this.lastPM = ''; + this.team = ''; + this.lastMatch = ''; // settings this.isSysop = false; this.isStaff = false; this.blockChallenges = false; this.ignorePMs = false; + this.ignoreTickets = false; this.lastConnected = 0; + this.inviteOnlyNextBattle = false; // chat queue + /** @type {ChatQueueEntry[]?} */ this.chatQueue = null; this.chatQueueTimeout = null; this.lastChatMessage = 0; @@ -422,35 +510,61 @@ class User { this.lastMessage = ``; this.lastMessageTime = 0; this.lastReportTime = 0; + /**@type {string} */ this.s1 = ''; + /**@type {string} */ this.s2 = ''; + /**@type {string} */ this.s3 = ''; + /** @type {boolean} */ + this.punishmentNotified = false; + /** @type {boolean} */ + this.lockNotified = false; + /**@type {string} */ + this.autoconfirmed = ''; + // Used in punishments + /** @type {string} */ + this.trackRename = ''; // initialize Users.add(this); } + /** + * @param {string | BasicRoom?} roomid + * @param {string} data + */ sendTo(roomid, data) { + // @ts-ignore if (roomid && roomid.id) roomid = roomid.id; if (roomid && roomid !== 'global' && roomid !== 'lobby') data = `>${roomid}\n${data}`; - for (let i = 0; i < this.connections.length; i++) { - if (roomid && !this.connections[i].inRooms.has(roomid)) continue; - this.connections[i].send(data); + for (const connection of this.connections) { + if (roomid && !connection.inRooms.has(roomid)) continue; + connection.send(data); Monitor.countNetworkUse(data.length); } } + /** + * @param {string} data + */ send(data) { - for (let i = 0; i < this.connections.length; i++) { - this.connections[i].send(data); + for (const connection of this.connections) { + connection.send(data); Monitor.countNetworkUse(data.length); } } + /** + * @param {string} message + */ popup(message) { this.send(`|popup|` + message.replace(/\n/g, '||')); } - getIdentity(roomid) { + /** + * @param {string} roomid + */ + getIdentity(roomid = '') { if (this.locked || this.namelocked) { - const lockedSymbol = (Config.punishgroups && Config.punishgroups.locked ? Config.punishgroups.locked.symbol : '‽'); + const lockedSymbol = (Config.punishgroups && Config.punishgroups.locked ? Config.punishgroups.locked.symbol : '\u203d'); return lockedSymbol + this.name; } if (roomid && roomid !== 'global') { @@ -464,9 +578,17 @@ class User { } return room.getAuth(this) + this.name; } + if (this.semilocked) { + const mutedSymbol = (Config.punishgroups && Config.punishgroups.muted ? Config.punishgroups.muted.symbol : '!'); + return mutedSymbol + this.name; + } return this.group + this.name; } - authAtLeast(minAuth, room) { + /** + * @param {string} minAuth + * @param {BasicChatRoom?} room + */ + authAtLeast(minAuth, room = null) { if (!minAuth || minAuth === ' ') return true; if (minAuth === 'trusted' && this.trusted) return true; if (minAuth === 'autoconfirmed' && this.autoconfirmed) return true; @@ -478,7 +600,13 @@ class User { let auth = (room && !this.can('makeroom') ? room.getAuth(this) : this.group); return auth in Config.groups && Config.groups[auth].rank >= Config.groups[minAuth].rank; } - can(permission, target, room) { + /** + * @param {string} permission + * @param {string | User?} target user or group symbol + * @param {BasicChatRoom?} room + * @return {boolean} + */ + can(permission, target = null, room = null) { if (this.hasSysopAccess()) return true; let groupData = Config.groups[this.group]; @@ -486,30 +614,35 @@ class User { return true; } - let group, targetGroup; + /** @type {string} */ + let group; + let targetGroup = ''; + let targetUser = null; if (typeof target === 'string') { - target = null; targetGroup = target; + } else { + targetUser = target; } - if (room && room.auth) { + if (room && (room.auth || room.parent)) { group = room.getAuth(this); - if (target) targetGroup = room.getAuth(target); + if (targetUser) targetGroup = room.getAuth(targetUser); + if (room.isPrivate === true && this.can('makeroom')) group = this.group; } else { group = this.group; - if (target) targetGroup = target.group; + if (targetUser) targetGroup = targetUser.group; } groupData = Config.groups[group]; if (groupData && groupData[permission]) { let jurisdiction = groupData[permission]; - if (!target) { + if (!targetUser && !targetGroup) { return !!jurisdiction; } if (jurisdiction === true && permission !== 'jurisdiction') { - return this.can('jurisdiction', target, room); + return this.can('jurisdiction', (targetUser || targetGroup), room); } if (typeof jurisdiction !== 'string') { return !!jurisdiction; @@ -517,7 +650,7 @@ class User { if (jurisdiction.includes(targetGroup)) { return true; } - if (jurisdiction.includes('s') && target === this) { + if (jurisdiction.includes('s') && targetUser === this) { return true; } if (jurisdiction.includes('u') && Config.groupsranking.indexOf(group) > Config.groupsranking.indexOf(targetGroup)) { @@ -555,6 +688,7 @@ class User { * special permission check function is required to carry out this check * because we need to know which socket the client is connected from in * order to determine the relevant IP for checking the whitelist. + * @param {Connection} connection */ hasConsoleAccess(connection) { if (this.hasSysopAccess()) return true; @@ -566,73 +700,45 @@ class User { } /** * Special permission check for promoting and demoting + * @param {string} sourceGroup + * @param {string} targetGroup */ canPromote(sourceGroup, targetGroup) { - return this.can('promote', {group:sourceGroup}) && this.can('promote', {group:targetGroup}); + return this.can('promote', sourceGroup) && this.can('promote', targetGroup); } - resetName(isForceRenamed) { + /** + * @param {boolean} isForceRenamed + */ + resetName(isForceRenamed = false) { return this.forceRename('Guest ' + this.guestNum, false, isForceRenamed); } - updateIdentity(roomid) { + /** + * @param {?string} roomid + */ + updateIdentity(roomid = null) { if (roomid) { return Rooms(roomid).onUpdateIdentity(this); } - this.inRooms.forEach(roomid => { + for (const roomid of this.inRooms) { Rooms(roomid).onUpdateIdentity(this); - }); - } - filterName(name) { - if (!Config.disablebasicnamefilter) { - // whitelist - // \u00A1-\u00BF\u00D7\u00F7 Latin punctuation/symbols - // \u02B9-\u0362 basic combining accents - // \u2012-\u2027\u2030-\u205E Latin punctuation/symbols extended - // \u2050-\u205F fractions extended - // \u2190-\u23FA\u2500-\u2BD1 misc symbols - // \u2E80-\u32FF CJK symbols - // \u3400-\u9FFF CJK - // \uF900-\uFAFF\uFE00-\uFE6F CJK extended - name = name.replace(/[^a-zA-Z0-9 /\\.~()<>^*%&=+$@#_'?!"\u00A1-\u00BF\u00D7\u00F7\u02B9-\u0362\u2012-\u2027\u2030-\u205E\u2050-\u205F\u2190-\u23FA\u2500-\u2BD1\u2E80-\u32FF\u3400-\u9FFF\uF900-\uFAFF\uFE00-\uFE6F-]+/g, ''); - - // blacklist - // \u00a1 upside-down exclamation mark (i) - // \u2580-\u2590 black bars - // \u25A0\u25Ac\u25AE\u25B0 black bars - // \u534d\u5350 swastika - // \u2a0d crossed integral (f) - name = name.replace(/[\u00a1\u2580-\u2590\u25A0\u25Ac\u25AE\u25B0\u2a0d\u534d\u5350]/g, ''); - // e-mail address - if (name.includes('@') && name.includes('.')) return ''; - } - name = name.replace(/^[^A-Za-z0-9]+/, ""); // remove symbols from start - - // cut name length down to 18 chars - if (/[A-Za-z0-9]/.test(name.slice(18))) { - name = name.replace(/[^A-Za-z0-9]+/g, ""); - } else { - name = name.slice(0, 18); } - - name = Dex.getName(name); - if (Config.namefilter) { - name = Config.namefilter(name, this); - } - return name; } /** + * Do a rename, passing and validating a login token. * - * @param name The name you want - * @param token Signed assertion returned from login server - * @param newlyRegistered Make sure this account will identify as registered - * @param connection The connection asking for the rename + * @param {string} name The name you want + * @param {string} token Signed assertion returned from login server + * @param {boolean} newlyRegistered Make sure this account will identify as registered + * @param {Connection} connection The connection asking for the rename */ - rename(name, token, newlyRegistered, connection) { - // this needs to be a for-of because it returns... - for (let roomid of this.games) { - let game = Rooms(roomid).game; + async rename(name, token, newlyRegistered, connection) { + let userid = toId(name); + for (const roomid of this.games) { + if (userid === this.userid) break; + const game = Rooms(roomid).game; if (!game || game.ended) continue; // should never happen if (game.allowRenames || !this.named) continue; - this.popup(`You can't change your name right now because you're in the middle of a rated game.`); + this.popup(`You can't change your name right now because you're in ${game.title}, which doesn't allow renaming.`); return false; } @@ -654,12 +760,11 @@ class User { return false; } - let userid = toId(name); if (userid.length > 18) { this.send(`|nametaken||Your name must be 18 characters or shorter.`); return false; } - name = this.filterName(name); + name = Chat.namefilter(name, this); if (userid !== toId(name)) { if (name) { name = userid; @@ -677,62 +782,56 @@ class User { return this.forceRename(name, this.registered); } } - let conflictUser = users.get(userid); - if (conflictUser && !conflictUser.registered && conflictUser.connected && !newlyRegistered) { - this.send(`|nametaken|${name}|Someone is already using the name "${conflictUser.name}".`); - return false; - } - - if (token && token.charAt(0) !== ';') { - let tokenSemicolonPos = token.indexOf(';'); - let tokenData = token.substr(0, tokenSemicolonPos); - let tokenSig = token.substr(tokenSemicolonPos + 1); - Verifier.verify(tokenData, tokenSig).then(success => { - if (!success) { - Monitor.warn(`verify failed: ${token}`); - Monitor.warn(`challenge was: ${challenge}`); - return; - } - this.validateRename(name, tokenData, newlyRegistered, challenge); - }); - } else { + if (!token || token.charAt(0) === ';') { this.send(`|nametaken|${name}|Your authentication token was invalid.`); + return false; } - return false; - } - validateRename(name, tokenData, newlyRegistered, challenge) { - let userid = toId(name); + let tokenSemicolonPos = token.indexOf(';'); + let tokenData = token.substr(0, tokenSemicolonPos); + let tokenSig = token.substr(tokenSemicolonPos + 1); let tokenDataSplit = tokenData.split(','); + let [signedChallenge, signedUserid, userType, signedDate, signedHostname] = tokenDataSplit; + if (signedHostname && Config.legalhosts && !Config.legalhosts.includes(signedHostname)) { + Monitor.warn(`forged assertion: ${tokenData}`); + this.send(`|nametaken|${name}|Your assertion is for the wrong server. This server is ${Config.legalhosts[0]}.`); + return false; + } if (tokenDataSplit.length < 5) { Monitor.warn(`outdated assertion format: ${tokenData}`); this.send(`|nametaken|${name}|Your assertion is stale. This usually means that the clock on the server computer is incorrect. If this is your server, please set the clock to the correct time.`); - return; + return false; } - if (tokenDataSplit[1] !== userid) { + if (signedUserid !== userid) { // userid mismatch - return; + this.send(`|nametaken|${name}|Your verification signature doesn't match your new username.`); + return false; } - if (tokenDataSplit[0] !== challenge) { + if (signedChallenge !== challenge) { // a user sent an invalid token - if (tokenDataSplit[0] !== challenge) { - Monitor.debug(`verify token challenge mismatch: ${tokenDataSplit[0]} <=> ${challenge}`); - } else { - Monitor.warn(`verify token mismatch: ${tokenData}`); - } - return; + Monitor.debug(`verify token challenge mismatch: ${signedChallenge} <=> ${challenge}`); + this.send(`|nametaken|${name}|Your verification signature doesn't match your authentication token.`); + return false; } let expiry = Config.tokenexpiry || 25 * 60 * 60; - if (Math.abs(parseInt(tokenDataSplit[3]) - Date.now() / 1000) > expiry) { + if (Math.abs(parseInt(signedDate) - Date.now() / 1000) > expiry) { Monitor.warn(`stale assertion: ${tokenData}`); this.send(`|nametaken|${name}|Your assertion is stale. This usually means that the clock on the server computer is incorrect. If this is your server, please set the clock to the correct time.`); - return; + return false; + } + + let success = await Verifier.verify(tokenData, tokenSig); + if (!success) { + Monitor.warn(`verify failed: ${token}`); + Monitor.warn(`challenge was: ${challenge}`); + this.send(`|nametaken|${name}|Your verification signature was invalid.`); + return false; } // future-proofing @@ -740,8 +839,14 @@ class User { this.s2 = tokenDataSplit[6]; this.s3 = tokenDataSplit[7]; - this.handleRename(name, userid, newlyRegistered, tokenDataSplit[2]); + this.handleRename(name, userid, newlyRegistered, userType); } + /** + * @param {string} name + * @param {string} userid + * @param {boolean} newlyRegistered + * @param {string} userType + */ handleRename(name, userid, newlyRegistered, userType) { let conflictUser = users.get(userid); if (conflictUser && !conflictUser.registered && conflictUser.connected) { @@ -749,7 +854,7 @@ class User { if (conflictUser !== this) conflictUser.resetName(); } else { this.send(`|nametaken|${name}|Someone is already using the name "${conflictUser.name}.`); - return this; + return false; } } @@ -777,7 +882,23 @@ class User { Punishments.ban(this, Date.now() + PERMALOCK_CACHE_TIME, userid, `Permabanned as ${name}`); } } + if (Users.isTrusted(userid)) { + this.trusted = userid; + this.autoconfirmed = userid; + } + if (this.trusted) { + this.locked = null; + this.namelocked = null; + this.permalocked = null; + this.semilocked = null; + } + let user = users.get(userid); + let possibleUser = Users(userid); + if (possibleUser && possibleUser.namelocked) { + // allows namelocked users to be merged + user = possibleUser; + } if (user && user !== this) { // This user already exists; let's merge user.merge(this); @@ -790,34 +911,41 @@ class User { } if (this.named) user.prevNames[this.userid] = this.name; this.destroy(); + + Punishments.checkName(user, userid, registered); + Rooms.global.checkAutojoin(user); - if (Config.loginfilter) Config.loginfilter(user, this, userType); + Chat.loginfilter(user, this, userType); return true; } + Punishments.checkName(this, userid, registered); + if (this.namelocked) return false; + // rename success - if (this.forceRename(name, registered)) { - Rooms.global.checkAutojoin(this); - if (Config.loginfilter) Config.loginfilter(this, null, userType); - return true; + if (!this.forceRename(name, registered)) { + return false; } - return false; + Rooms.global.checkAutojoin(this); + Chat.loginfilter(this, null, userType); + return true; } - forceRename(name, registered, isForceRenamed) { + /** + * @param {string} name + * @param {boolean} registered + * @param {boolean} isForceRenamed + */ + forceRename(name, registered, isForceRenamed = false) { // skip the login server let userid = toId(name); - this.inRooms.forEach(roomid => { - Punishments.checkNewNameInRoom(this, userid, roomid); - }); - if (users.has(userid) && users.get(userid) !== this) { return false; } let oldid = this.userid; if (userid !== this.userid) { - this.cancelSearch(); + this.cancelReady(); if (!Users.move(this, userid)) { return false; @@ -835,37 +963,36 @@ class User { this.name = name; let joining = !this.named; - this.named = (userid.substr(0, 5) !== 'guest'); - - if (this.named) Punishments.checkName(this, registered); + this.named = !userid.startsWith('guest') || !!this.namelocked; - if (this.namelocked) this.named = true; - - for (let i = 0; i < this.connections.length; i++) { + for (const connection of this.connections) { //console.log('' + name + ' renaming: socket ' + i + ' of ' + this.connections.length); let initdata = `|updateuser|${this.name}|${this.named ? 1 : 0}|${this.avatar}`; - this.connections[i].send(initdata); + connection.send(initdata); } - this.games.forEach(roomid => { + for (const roomid of this.games) { const room = Rooms(roomid); if (!room) { Monitor.warn(`while renaming, room ${roomid} expired for user ${this.userid} in rooms ${[...this.inRooms]} and games ${[...this.games]}`); this.games.delete(roomid); - return; + continue; } + // @ts-ignore room.game.onRename(this, oldid, joining, isForceRenamed); - }); - this.inRooms.forEach(roomid => { + } + for (const roomid of this.inRooms) { Rooms(roomid).onRename(this, oldid, joining); - }); + } return true; } + /** + * @param {User} oldUser + */ merge(oldUser) { - oldUser.cancelChallengeTo(); - oldUser.cancelSearch(); - oldUser.inRooms.forEach(roomid => { + oldUser.cancelReady(); + for (const roomid of oldUser.inRooms) { Rooms(roomid).onLeave(oldUser); - }); + } if (this.locked === '#dnsbl' && !oldUser.locked) this.locked = false; if (!this.locked && oldUser.locked === '#dnsbl') oldUser.locked = false; @@ -874,8 +1001,8 @@ class User { this.updateGroup(this.registered); - for (let i = 0; i < oldUser.connections.length; i++) { - this.mergeConnection(oldUser.connections[i]); + for (const connection of oldUser.connections) { + this.mergeConnection(connection); } oldUser.inRooms.clear(); oldUser.connections = []; @@ -911,6 +1038,9 @@ class User { oldUser.markInactive(); } + /** + * @param {Connection} connection + */ mergeConnection(connection) { // the connection has changed name to this user's username, and so is // being merged into this account @@ -920,14 +1050,14 @@ class User { let initdata = `|updateuser|${this.name}|1|${this.avatar}`; connection.send(initdata); connection.user = this; - connection.inRooms.forEach(roomid => { + for (const roomid of connection.inRooms) { let room = Rooms(roomid); if (!this.inRooms.has(roomid)) { if (Punishments.checkNameInRoom(this, room.id)) { // the connection was in a room that this user is banned from connection.sendTo(room.id, `|deinit`); connection.leaveRoom(room); - return; + continue; } room.onJoin(this, connection); this.inRooms.add(roomid); @@ -938,26 +1068,17 @@ class User { // don't want this behavior. room.game.onUpdateConnection(this, connection); } - }); - this.updateSearch(true, connection); + } + this.updateReady(connection); } debugData() { - let str = '' + this.group + this.name + ' (' + this.userid + ')'; - for (let i = 0; i < this.connections.length; i++) { - let connection = this.connections[i]; - str += ' socket' + i + '['; - let first = true; - for (let j of connection.inRooms) { - if (first) { - first = false; - } else { - str += ', '; - } - str += j; - } - str += ']'; + let str = `${this.group}${this.name} (${this.userid})`; + for (const [i, connection] of this.connections.entries()) { + str += ` socket${i}[`; + str += [...connection.inRooms].join(`, `); + str += `]`; } - if (!this.connected) str += ' (DISCONNECTED)'; + if (!this.connected) str += ` (DISCONNECTED)`; return str; } /** @@ -966,6 +1087,7 @@ class User { * * Note that unlike the others, User#trusted isn't reset every * name change. + * @param {boolean} registered */ updateGroup(registered) { if (!registered) { @@ -981,11 +1103,6 @@ class User { this.group = Config.groupsranking[0]; } - if (Users.isTrusted(this)) { - this.trusted = this.userid; - this.autoconfirmed = this.userid; - } - if (Config.customavatars && Config.customavatars[this.userid]) { this.avatar = Config.customavatars[this.userid]; } @@ -1016,8 +1133,10 @@ class User { /** * Set a user's group. Pass (' ', true) to force trusted * status without giving the user a group. + * @param {string} group + * @param {boolean} forceTrusted */ - setGroup(group, forceTrusted) { + setGroup(group, forceTrusted = false) { if (!group) throw new Error(`Falsy value passed to setGroup`); this.group = group.charAt(0); this.isStaff = Config.groups[this.group] && (Config.groups[this.group].lock || Config.groups[this.group].root); @@ -1048,8 +1167,7 @@ class User { if (usergroups[userid]) { removed.push(usergroups[userid].charAt(0)); } - for (let i = 0; i < Rooms.global.chatRooms.length; i++) { - let room = Rooms.global.chatRooms[i]; + for (const room of Rooms.global.chatRooms) { if (!room.isPrivate && room.auth && userid in room.auth && room.auth[userid] !== '+') { removed.push(room.auth[userid] + room.id); room.auth[userid] = '+'; @@ -1073,16 +1191,19 @@ class User { // can still be locked after logout. } } + /** + * @param {Connection} connection + */ onDisconnect(connection) { - for (let i = 0; i < this.connections.length; i++) { - if (this.connections[i] === connection) { + for (const [i, connected] of this.connections.entries()) { + if (connected === connection) { // console.log('DISCONNECT: ' + this.userid); if (this.connections.length <= 1) { this.markInactive(); } - connection.inRooms.forEach(roomid => { + for (const roomid of connection.inRooms) { this.leaveRoom(Rooms(roomid), connection, true); - }); + } --this.ips[connection.ip]; this.connections.splice(i, 1); break; @@ -1090,11 +1211,11 @@ class User { } if (!this.connections.length) { // cleanup - this.inRooms.forEach(roomid => { + for (const roomid of this.inRooms) { // should never happen. Monitor.debug(`!! room miscount: ${roomid} not left`); Rooms(roomid).onLeave(this); - }); + } this.inRooms.clear(); if (!this.named && !Object.keys(this.prevNames).length) { // user never chose a name (and therefore never talked/battled) @@ -1102,8 +1223,7 @@ class User { // immediately deallocate this.destroy(); } else { - this.cancelChallengeTo(); - this.cancelSearch(); + this.cancelReady(); } } } @@ -1115,24 +1235,30 @@ class User { for (let i = this.connections.length - 1; i >= 0; i--) { // console.log('DESTROY: ' + this.userid); connection = this.connections[i]; - connection.inRooms.forEach(roomid => { + for (const roomid of connection.inRooms) { this.leaveRoom(Rooms(roomid), connection, true); - }); + } connection.destroy(); } if (this.connections.length) { // should never happen throw new Error(`Failed to drop all connections for ${this.userid}`); } - this.inRooms.forEach(roomid => { + for (const roomid of this.inRooms) { // should never happen. throw new Error(`Room miscount: ${roomid} not left for ${this.userid}`); - }); + } this.inRooms.clear(); } - getAltUsers(includeTrusted, forPunishment) { + /** + * If this user is included in the returned list of alts (i.e. when forPunishment is true), they will always be the first element of that list. + * @param {boolean} includeTrusted + * @param {boolean} forPunishment + */ + getAltUsers(includeTrusted = false, forPunishment = false) { let alts = findUsers([this.getLastId()], Object.keys(this.ips), {includeTrusted: includeTrusted, forPunishment: forPunishment}); - if (!forPunishment) alts = alts.filter(user => user !== this); + alts = alts.filter(user => user !== this); + if (forPunishment) alts.unshift(this); return alts; } getLastName() { @@ -1145,19 +1271,28 @@ class User { const prevNames = Object.keys(this.prevNames); return (prevNames.length ? prevNames[prevNames.length - 1] : this.userid); } - tryJoinRoom(room, connection) { - let roomid = (room && room.id ? room.id : room); - room = Rooms.search(room); + /** + * @param {string | GlobalRoom | GameRoom | ChatRoom} roomid + * @param {Connection} connection + */ + async tryJoinRoom(roomid, connection) { + // @ts-ignore + roomid = /** @type {string} */ (roomid && roomid.id ? roomid.id : roomid); + let room = Rooms.search(roomid); + if (!room && roomid.startsWith('view-')) { + return Chat.resolvePage(roomid, this, connection); + } if (!room || !room.checkModjoin(this)) { if (!this.named) { - return null; + return Rooms.RETRY_AFTER_LOGIN; } else { connection.sendTo(roomid, `|noinit|nonexistent|The room "${roomid}" does not exist.`); return false; } } - let makeRoom = this.can('makeroom'); - if (room.tour && !makeRoom) { + // @ts-ignore + if (room.tour) { + // @ts-ignore let errorMessage = room.tour.onBattleJoin(room, this); if (errorMessage) { connection.sendTo(roomid, `|noinit|joinfailed|${errorMessage}`); @@ -1166,45 +1301,39 @@ class User { } if (room.isPrivate) { if (!this.named) { - return null; + return Rooms.RETRY_AFTER_LOGIN; } } - if (Rooms.aliases.get(roomid) === room.id) { - connection.send(">" + roomid + "\n|deinit"); + if (!this.can('bypassall') && Punishments.isRoomBanned(this, room.id)) { + connection.sendTo(roomid, `|noinit|joinfailed|You are banned from the room "${roomid}".`); + return false; } - let joinResult = this.joinRoom(room, connection); - if (!joinResult) { - if (joinResult === null) { - connection.sendTo(roomid, `|noinit|joinfailed|You are banned from the room "${roomid}".`); - return false; - } - connection.sendTo(roomid, `|noinit|joinfailed|You do not have permission to join "${roomid}".`); - return false; + if (Rooms.aliases.get(roomid) === room.id) { + connection.send(`>${roomid}\n|deinit`); } + + this.joinRoom(room, connection); return true; } - joinRoom(room, connection) { - room = Rooms(room); - if (!room) return false; - if (!this.can('bypassall')) { - // check if user has permission to join - if (room.staffRoom && !this.isStaff) return false; - if (Punishments.isRoomBanned(this, room.id)) { - return null; - } - } + /** + * @param {string | Room} roomid + * @param {Connection?} [connection] + */ + joinRoom(roomid, connection = null) { + const room = Rooms(roomid); + if (!room) throw new Error(`Room not found: ${roomid}`); if (!connection) { - for (let i = 0; i < this.connections.length; i++) { + for (const curConnection of this.connections) { // only join full clients, not pop-out single-room // clients // (...no, pop-out rooms haven't been implemented yet) - if (this.connections[i].inRooms.has('global')) { - this.joinRoom(room, this.connections[i]); + if (curConnection.inRooms.has('global')) { + this.joinRoom(room, curConnection); } } - return true; + return; } if (!connection.inRooms.has(room.id)) { if (!this.inRooms.has(room.id)) { @@ -1214,30 +1343,34 @@ class User { connection.joinRoom(room); room.onConnect(this, connection); } - return true; } - leaveRoom(room, connection, force) { + /** + * @param {GlobalRoom | GameRoom | ChatRoom | string} room + * @param {Connection?} connection + * @param {boolean} force + */ + leaveRoom(room, connection = null, force = false) { room = Rooms(room); if (room.id === 'global') { // you can't leave the global room except while disconnecting if (!force) return false; - this.cancelChallengeTo(); - this.cancelSearch(); + this.cancelReady(); } if (!this.inRooms.has(room.id)) { return false; } - for (let i = 0; i < this.connections.length; i++) { - if (connection && this.connections[i] !== connection) continue; - if (this.connections[i].inRooms.has(room.id)) { - this.connections[i].sendTo(room.id, '|deinit'); - this.connections[i].leaveRoom(room); + for (const curConnection of this.connections) { + if (connection && curConnection !== connection) continue; + if (curConnection.inRooms.has(room.id)) { + curConnection.sendTo(room.id, `|deinit`); + curConnection.leaveRoom(room); } if (connection) break; } let stillInRoom = false; if (connection) { + // @ts-ignore TypeScript inferring wrong type for room stillInRoom = this.connections.some(connection => connection.inRooms.has(room.id)); } if (!stillInRoom) { @@ -1245,176 +1378,34 @@ class User { this.inRooms.delete(room.id); } } - prepBattle(formatid, type, connection, customBanlist) { - // all validation for a battle goes through here - if (!connection) connection = this; - if (!type) type = 'challenge'; - - if (Rooms.global.lockdown && Rooms.global.lockdown !== 'pre') { - let message = `The server is restarting. Battles will be available again in a few minutes.`; - if (Rooms.global.lockdown === 'ddos') { - message = `The server is under attack. Battles cannot be started at this time.`; - } - connection.popup(message); - return Promise.resolve(false); - } - let gameCount = this.games.size; - if (Monitor.countConcurrentBattle(gameCount, connection)) { - return Promise.resolve(false); - } - if (Monitor.countPrepBattle(connection.ip || connection.latestIp, connection)) { - return Promise.resolve(false); - } - let format = Dex.getFormat(formatid); - if (!format['' + type + 'Show']) { - connection.popup(`That format is not available.`); - return Promise.resolve(false); + cancelReady() { + // setting variables because this can't be short-circuited + const searchesCancelled = Ladders.cancelSearches(this); + const challengesCancelled = Ladders.clearChallenges(this.userid); + if (searchesCancelled || challengesCancelled) { + this.popup(`Your searches and challenges have been cancelled because you changed your username.`); } - if (type === 'search' && this.searching[formatid]) { - connection.popup(`You are already searching a battle in that format.`); - return Promise.resolve(false); - } - return TeamValidator(formatid, customBanlist).prepTeam(this.team, this.locked || this.namelocked).then(result => this.finishPrepBattle(connection, result)); } - /** - * Parses the result of a team validation and notifies the user. - * - * @param {Connection} connection - The connection from which the team validation was requested. - * @param {string} result - The raw result received by the team validator. - * @return {string|boolean} - The packed team if the validation was successful. False otherwise. + * @param {Connection?} connection */ - finishPrepBattle(connection, result) { - if (result.charAt(0) !== '1') { - connection.popup(`Your team was rejected for the following reasons:\n\n- ` + result.slice(1).replace(/\n/g, `\n- `)); - return false; - } - - if (this !== users.get(this.userid)) { - // TODO: User feedback. - return false; - } - - return result.slice(1); - } - updateChallenges() { - let challengeTo = this.challengeTo; - if (challengeTo) { - challengeTo = { - to: challengeTo.to, - format: challengeTo.format, - }; - } - let challengesFrom = {}; - for (let challenger in this.challengesFrom) { - challengesFrom[challenger] = this.challengesFrom[challenger].format; - } - this.send(`|updatechallenges|` + JSON.stringify({ - challengesFrom: challengesFrom, - challengeTo: challengeTo, - })); - } - updateSearch(onlyIfExists, connection) { - let games = {}; - let atLeastOne = false; - this.games.forEach(roomid => { - const room = Rooms(roomid); - if (!room) { - Monitor.warn(`while searching, room ${roomid} expired for user ${this.userid} in rooms ${[...this.inRooms]} and games ${[...this.games]}`); - this.games.delete(roomid); - return; - } - const game = room.game; - if (!game) { - Monitor.warn(`while searching, room ${roomid} has no game for user ${this.userid} in rooms ${[...this.inRooms]} and games ${[...this.games]}`); - this.games.delete(roomid); - return; - } - games[roomid] = game.title + (game.allowRenames ? '' : '*'); - atLeastOne = true; - }); - if (!atLeastOne) games = null; - let searching = Object.keys(this.searching); - if (onlyIfExists && !searching.length && !atLeastOne) return; - (connection || this).send(`|updatesearch|` + JSON.stringify({ - searching: searching, - games: games, - })); - } - cancelSearch(format) { - return Matchmaker.cancelSearch(this, format); - } - makeChallenge(user, format, team/*, isPrivate*/) { - user = getUser(user); - if (!user || this.challengeTo) { - return false; - } - if (user.blockChallenges && !this.can('bypassblocks', user)) { - return false; - } - if (new Date().getTime() < this.lastChallenge + 10000) { - // 10 seconds ago - return false; - } - let time = new Date().getTime(); - let challenge = { - time: time, - from: this.userid, - to: user.userid, - format: '' + (format || ''), - //isPrivate: !!isPrivate, // currently unused - team: team, - }; - this.lastChallenge = time; - this.challengeTo = challenge; - user.challengesFrom[this.userid] = challenge; - this.updateChallenges(); - user.updateChallenges(); - } - cancelChallengeTo() { - if (!this.challengeTo) return true; - let user = getUser(this.challengeTo.to); - if (user) delete user.challengesFrom[this.userid]; - this.challengeTo = null; - this.updateChallenges(); - if (user) user.updateChallenges(); - } - rejectChallengeFrom(user) { - let userid = toId(user); - user = getUser(user); - if (this.challengesFrom[userid]) { - delete this.challengesFrom[userid]; - } - if (user) { - delete this.challengesFrom[user.userid]; - if (user.challengeTo && user.challengeTo.to === this.userid) { - user.challengeTo = null; - user.updateChallenges(); - } - } - this.updateChallenges(); + updateReady(connection = null) { + Ladders.updateSearch(this, connection); + Ladders.updateChallenges(this, connection); } - acceptChallengeFrom(user, team) { - let userid = toId(user); - user = getUser(user); - if (!user || !user.challengeTo || user.challengeTo.to !== this.userid || !this.connected || !user.connected) { - if (this.challengesFrom[userid]) { - delete this.challengesFrom[userid]; - this.updateChallenges(); - } - return false; - } - Matchmaker.startBattle(this, user, user.challengeTo.format, team, user.challengeTo.team, {rated: false}); - delete this.challengesFrom[user.userid]; - user.challengeTo = null; - this.updateChallenges(); - user.updateChallenges(); - return true; + /** + * @param {Connection?} connection + */ + updateSearch(connection = null) { + Ladders.updateSearch(this, connection); } /** * The user says message in room. * Returns false if the rest of the user's messages should be discarded. + * @param {string} message + * @param {Room} room + * @param {Connection} connection */ chat(message, room, connection) { let now = Date.now(); @@ -1442,7 +1433,7 @@ class User { this.chatQueue.push([message, room.id, connection]); } } else if (now < this.lastChatMessage + throttleDelay) { - this.chatQueue = [[message, room.id, connection]]; + this.chatQueue = /** @type {ChatQueueEntry[]} */ ([[message, room.id, connection]]); this.startChatQueue(throttleDelay - (now - this.lastChatMessage)); } else { this.lastChatMessage = now; @@ -1451,8 +1442,13 @@ class User { Monitor.activeIp = null; } } - startChatQueue(delay) { - if (delay === undefined) delay = (this.group !== ' ' ? THROTTLE_DELAY / 2 : THROTTLE_DELAY) - (Date.now() - this.lastChatMessage); + /** + * @param {number?} delay + */ + startChatQueue(delay = null) { + if (delay === null) { + delay = (this.group !== ' ' ? THROTTLE_DELAY / 2 : THROTTLE_DELAY) - (Date.now() - this.lastChatMessage); + } this.chatQueueTimeout = setTimeout( () => this.processChatQueue(), @@ -1466,9 +1462,24 @@ class User { this.chatQueueTimeout = null; } } + /** + * @return {undefined} + */ processChatQueue() { - if (!this.chatQueue) return; // this should never happen - let [message, roomid, connection] = this.chatQueue.shift(); + this.chatQueueTimeout = null; + if (!this.chatQueue) return; + const queueElement = this.chatQueue.shift(); + if (!queueElement) { + this.chatQueue = null; + return; + } + let [message, roomid, connection] = queueElement; + if (!connection.user) { + // connection disconnected, chat queue should not be big enough + // for recursion to be an issue, also didn't ES6 spec tail + // recursion at some point? + return this.processChatQueue(); + } this.lastChatMessage = new Date().getTime(); @@ -1484,34 +1495,32 @@ class User { let throttleDelay = THROTTLE_DELAY; if (this.group !== ' ') throttleDelay /= 2; - if (this.chatQueue && this.chatQueue.length) { + if (this.chatQueue.length) { this.chatQueueTimeout = setTimeout( () => this.processChatQueue(), throttleDelay); } else { this.chatQueue = null; - this.chatQueueTimeout = null; } } destroy() { // deallocate user - this.games.forEach(roomid => { + for (const roomid of this.games) { let room = Rooms(roomid); if (!room) { Monitor.warn(`while deallocating, room ${roomid} did not exist for ${this.userid} in rooms ${[...this.inRooms]} and games ${[...this.games]}`); this.games.delete(roomid); - return; + continue; } let game = room.game; if (!game) { Monitor.warn(`while deallocating, room ${roomid} did not have a game for ${this.userid} in rooms ${[...this.inRooms]} and games ${[...this.games]}`); this.games.delete(roomid); - return; - } - if (game.ended) return; - if (game.forfeit) { - game.forfeit(this); + continue; } - }); + if (game.ended) continue; + // @ts-ignore + if (game.forfeit) game.forfeit(this); + } this.clearChatQueue(); Users.delete(this); } @@ -1520,31 +1529,35 @@ class User { } } -Users.User = User; -Users.Connection = Connection; - /********************************************************* * Inactive user pruning *********************************************************/ -Users.pruneInactive = function (threshold) { +/** + * @param {number} threshold + */ +function pruneInactive(threshold) { let now = Date.now(); - users.forEach(user => { - if (user.connected) return; + for (const user of users.values()) { + if (user.connected) continue; if ((now - user.lastConnected) > threshold) { user.destroy(); } - }); -}; -Users.pruneInactiveTimer = setInterval(() => { - Users.pruneInactive(Config.inactiveuserthreshold || 1000 * 60 * 60); -}, 1000 * 60 * 30); + } +} /********************************************************* * Routing *********************************************************/ -Users.socketConnect = function (worker, workerid, socketid, ip, protocol) { +/** + * @param {any} worker + * @param {number} workerid + * @param {string} socketid + * @param {string} ip + * @param {string} protocol + */ +function socketConnect(worker, workerid, socketid, ip, protocol) { let id = '' + workerid + '-' + socketid; let connection = new Connection(id, worker, socketid, null, ip, protocol); connections.set(id, connection); @@ -1562,11 +1575,11 @@ Users.socketConnect = function (worker, workerid, socketid, ip, protocol) { connection.user = user; Punishments.checkIp(user, connection); // Generate 1024-bit challenge string. - require('crypto').randomBytes(128, (ex, buffer) => { - if (ex) { + require('crypto').randomBytes(128, (err, buffer) => { + if (err) { // It's not clear what sort of condition could cause this. // For now, we'll basically assume it can't happen. - console.log(`Error in randomBytes: ${ex}`); + Monitor.crashlog(err, 'randomBytes'); // This is pretty crude, but it's the easiest way to deal // with this case, which should be impossible anyway. user.disconnectAll(); @@ -1579,17 +1592,26 @@ Users.socketConnect = function (worker, workerid, socketid, ip, protocol) { }); user.joinRoom('global', connection); -}; - -Users.socketDisconnect = function (worker, workerid, socketid) { +} +/** + * @param {any} worker + * @param {number} workerid + * @param {string} socketid + */ +function socketDisconnect(worker, workerid, socketid) { let id = '' + workerid + '-' + socketid; let connection = connections.get(id); if (!connection) return; connection.onDisconnect(); -}; - -Users.socketReceive = function (worker, workerid, socketid, message) { +} +/** + * @param {any} worker + * @param {number} workerid + * @param {string} socketid + * @param {string} message + */ +function socketReceive(worker, workerid, socketid, message) { let id = '' + workerid + '-' + socketid; let connection = connections.get(id); @@ -1623,7 +1645,7 @@ Users.socketReceive = function (worker, workerid, socketid, message) { const lines = message.split('\n'); if (!lines[lines.length - 1]) lines.pop(); - if (lines.length > (user.isStaff ? THROTTLE_MULTILINE_WARN_STAFF : THROTTLE_MULTILINE_WARN)) { + if (lines.length > (user.isStaff || (room.auth && room.auth[user.userid] && room.auth[user.userid] !== '+') ? THROTTLE_MULTILINE_WARN_STAFF : THROTTLE_MULTILINE_WARN)) { connection.popup(`You're sending too many lines at once. Try using a paste service like [[Pastebin]].`); return; } @@ -1633,11 +1655,49 @@ Users.socketReceive = function (worker, workerid, socketid, message) { } let startTime = Date.now(); - for (let i = 0; i < lines.length; i++) { - if (user.chat(lines[i], room, connection) === false) break; + for (const line of lines) { + if (user.chat(line, room, connection) === false) break; } let deltaTime = Date.now() - startTime; if (deltaTime > 1000) { Monitor.warn(`[slow] ${deltaTime}ms - ${user.name} <${connection.ip}>: ${roomId}|${message}`); } -}; +} + +/** @type {Map} */ +let users = new Map(); +/** @type {Map} */ +let prevUsers = new Map(); +let numUsers = 0; + +let Users = Object.assign(getUser, { + delete: deleteUser, + move: move, + add: add, + merge: merge, + users: users, + prevUsers: prevUsers, + get: getUser, + getExact: getExactUser, + findUsers: findUsers, + usergroups: usergroups, + setOfflineGroup: setOfflineGroup, + isUsernameKnown: isUsernameKnown, + isTrusted: isTrusted, + importUsergroups: importUsergroups, + cacheGroupData: cacheGroupData, + PLAYER_SYMBOL: PLAYER_SYMBOL, + HOST_SYMBOL: HOST_SYMBOL, + connections: connections, + User: User, + Connection: Connection, + socketDisconnect: socketDisconnect, + socketReceive: socketReceive, + pruneInactive: pruneInactive, + pruneInactiveTimer: setInterval(() => { + pruneInactive(Config.inactiveuserthreshold || 1000 * 60 * 60); + }, 1000 * 60 * 30), + socketConnect: socketConnect, +}); +// @ts-ignore +module.exports = Users; diff --git a/server/verifier.js b/server/verifier.js new file mode 100644 index 0000000000000..88d68a9141744 --- /dev/null +++ b/server/verifier.js @@ -0,0 +1,66 @@ +/** + * Verifier process + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * This is just an asynchronous implementation of a verifier for a + * signed key, because Node.js's crypto functions are synchronous, + * strangely, considering how everything else is asynchronous. + * + * I wrote this one day hoping it would help with performance, but + * I don't think it had any noticeable effect. + * + * @license MIT + */ + +'use strict'; + +const crypto = require('crypto'); + +/********************************************************* + * Process manager + *********************************************************/ + +/** @type {typeof import('../lib/process-manager').QueryProcessManager} */ +const QueryProcessManager = require(/** @type {any} */('../.lib-dist/process-manager')).QueryProcessManager; + +/**@type {QueryProcessManager} */ +// @ts-ignore +const PM = new QueryProcessManager(module, async ({data, signature}) => { + let verifier = crypto.createVerify(Config.loginserverkeyalgo); + verifier.update(data); + let success = false; + try { + success = verifier.verify(Config.loginserverpublickey, signature, 'hex'); + } catch (e) {} + + return success; +}); + +if (!PM.isParentProcess) { + // This is a child process! + // @ts-ignore This file doesn't exist on the repository, so Travis checks fail if this isn't ignored + global.Config = require('../config/config'); + /** @type {typeof import('../lib/repl').Repl} */ + const Repl = require(/** @type {any} */('../.lib-dist/repl')).Repl; + Repl.start('verifier', /** @param {string} cmd */ cmd => eval(cmd)); +} else { + PM.spawn(global.Config ? Config.verifierprocesses : 1); +} + +/********************************************************* + * Exports + *********************************************************/ + +/** + * @param {string} data + * @param {string} signature + * @return {Promise} + */ +function verify(data, signature) { + return PM.query({data, signature}); +} + +module.exports = { + verify, + PM, +}; diff --git a/sim/README.md b/sim/README.md new file mode 100644 index 0000000000000..c7254758ec480 --- /dev/null +++ b/sim/README.md @@ -0,0 +1,139 @@ +Simulator +========= + +Pokémon Showdown's simulator API is implemented as a `ReadWriteStream`. You write player choices to it, and you read protocol messages from it. + +```js +const Sim = require('Pokemon-Showdown/sim'); +stream = new Sim.BattleStream(); + +(async () => { + let output; + while ((output = await stream.read())) { + console.log(output); + } +})(); + +stream.write(`>start {"formatid":"gen7randombattle"}`); +stream.write(`>player p1 {"name":"Alice"}`); +stream.write(`>player p2 {"name":"Bob"}`); +``` + +The stream can be accessed from other programming languages using standard IO: + +```bash +echo '>start {"formatid":"gen7randombattle"} +>player p1 {"name":"Alice"} +>player p2 {"name":"Bob"} +' | ./pokemon-showdown simulate-battle +``` + + +Writing to the simulator +------------------------ + +In a standard battle, what you write to the simulator looks something like this: + +``` +>start {"formatid":"gen7ou"} +>player p1 {"name":"Alice","team":"insert packed team here"} +>player p2 {"name":"Bob","team":"insert packed team here"} +>p1 team 123456 +>p2 team 123456 +>p1 move 1 +>p2 switch 3 +>p1 move 3 +>p2 move 2 +``` + +(In a data stream, messages should be delimited by `\n`; in an object stream, `\n` will be implicitly added after every message.) + +Notice that every line starts with `>`. Lines not starting with `>` are comments, so that input logs can be mixed with output logs and/or normal text easily. + +Note that the text after `>p1` or `>p2` can be untrusted input directly from the player, and should be treated accordingly. + +Possible message types include: + +``` +>start OPTIONS +``` + +Starts a battle: + +`OPTIONS` is a JSON object containing the following properties (optional, except `formatid`): + +- `formatid` - a string representing the format ID + +- `seed` - an array of four numbers representing a seed for the random number generator (defaults to a random seed) + +- `p1` - `PLAYEROPTIONS` for player 1 (defaults to no player; player options must then be passed with `>player p1`) + +- `p2` - `PLAYEROPTIONS` for player 2 (defaults to no player; player options must then be passed with `>player p2`) + +If `p1` and `p2` are specified, the battle will begin immediately. Otherwise, they must be specified with `>player` before the battle will begin. + +See documentation of `>player` (below) for `PLAYEROPTIONS`. + +``` +>player PLAYERID PLAYEROPTIONS +``` + +Sets player information: + +`PLAYERID` is either `p1` or `p2` + +`PLAYEROPTIONS` is a JSON object containing the following properties (all optional): + +- `name` is a string for the player name (defaults to "Player 1" or "Player 2") + +- `avatar` is a string for the player avatar (defaults to "") + +- `team` is a team (either in JSON or a string in packed format) + +``` +>p1 CHOICE +>p2 CHOICE +``` + +Makes a choice for a player. [Possible choices are documented in `SIM-PROTOCOL.md`][possible-choices]. + + [possible-choices]: https://github.com/Zarel/Pokemon-Showdown/blob/master/sim/SIM-PROTOCOL.md#possible-choices + + +Reading from the simulator +-------------------------- + +The simulator will send back messages. In a data stream, they're delimited by `\n\n`. In an object stream, they will just be sent as separate strings. + +Messages start with a message type followed by `\n`. A message will never have two `\n` in a row, so that `\n\n` always delimits a They look like: + + update + MESSAGES + +An update which should be sent to all players and spectators. + +[The messages the simulator sends back are documented in `SIM-PROTOCOL.md`][sim-protocol]. You can also look at a replay log for examples. + + [sim-protocol]: https://github.com/Zarel/Pokemon-Showdown/blob/master/sim/SIM-PROTOCOL.md + +One message type that only appears here is `|split`. This splits the next four lines into `spectator`, `p1`, `p2`, and `omniscient` messages. The `p1` and `p2` logs will have exact HP values only for the corresponding player, while the `spectator` log will not have exact HP values for either player, and the `omniscient` logs will have exact HP values for both. + + sideupdate + PLAYERID + MESSAGES + +Send messages to only one player. `|split` will never appear here. + +`PLAYERID` will be either `p1` or `p2`. + +Note that choice requests (updates telling the player what choices they have for using moves or switching pokemon) are sent this way. + +[Choice requests are documented in "Choice requests" in `SIM-PROTOCOL.md`][choice-requests]. + + [choice-requests]: https://github.com/Zarel/Pokemon-Showdown/blob/master/sim/SIM-PROTOCOL.md#choice-requests + + end + LOGDATA + +Sent at the end of a battle. `LOGDATA` is a JSON object that has various information you might find useful but are too lazy to extract from the update messages, such as turn count and winner name. + diff --git a/sim/SIM-PROTOCOL.md b/sim/SIM-PROTOCOL.md new file mode 100644 index 0000000000000..5786712bef255 --- /dev/null +++ b/sim/SIM-PROTOCOL.md @@ -0,0 +1,872 @@ +Simulator protocol +================== + +Pokémon Showdown's simulator protocol is implemented as a newline-and-pipe-delimited text stream. For details on how to read to or write from the text stream, see `README.md`. + + +Receiving messages +------------------ + +### Battle initialization + +The beginning of a battle will look something like this: + + |player|p1|Anonycat|60 + |player|p2|Anonybird|113 + |teamsize|p1|4 + |teamsize|p2|5 + |gametype|doubles + |gen|7 + |tier|[Gen 7] Doubles Ubers + |rule|Species Clause: Limit one of each Pokémon + |rule|OHKO Clause: OHKO moves are banned + |rule|Moody Clause: Moody is banned + |rule|Evasion Abilities Clause: Evasion abilities are banned + |rule|Evasion Moves Clause: Evasion moves are banned + |rule|Endless Battle Clause: Forcing endless battles is banned + |rule|HP Percentage Mod: HP is shown in percentages + |clearpoke + |poke|p1|Pikachu, L59, F|item + |poke|p1|Kecleon, M|item + |poke|p1|Jynx, F|item + |poke|p1|Mewtwo|item + |poke|p2|Hoopa-Unbound| + |poke|p2|Smeargle, L1, F|item + |poke|p2|Forretress, L31, F| + |poke|p2|Groudon, L60|item + |poke|p2|Feebas, L1, M| + |teampreview + | + |start + +`|player|PLAYER|USERNAME|AVATAR` + +> Player details. +> +> - `PLAYER` is `p1` or `p2` +> - `USERNAME` is the username +> - `AVATAR` is the player's avatar identifier (usually a number, but other +> values can be used for custom avatars) + +`|teamsize|PLAYER|NUMBER` + +> - `PLAYER` is `p1` or `p2` +> - `NUMBER` is the number of Pokémon your opponent starts with. In games +> without Team Preview, you don't know which Pokémon your opponent has, but +> you at least know how many there are. + +`|gametype|GAMETYPE` + +> - `GAMETYPE` is `singles`, `doubles`, or `triples`. + +`|gen|GENNUM` + +> Generation number, from 1 to 7. Stadium counts as its respective gens; +> Let's Go counts as 7, and modded formats count as whatever gen they were +> based on. + +`|tier|FORMATNAME` + +> The name of the format being played. + +`|rated` + +> Will be sent if the game will affect the player's ladder rating (Elo +> score). + +`|rated|MESSAGE` + +> Will be sent if the game is official in some other way, such as being +> a tournament game. Does not actually mean the game is rated. + +`|rule|RULE: DESCRIPTION` + +> Will appear multiple times, one for each + + |clearpoke + |poke|PLAYER|DETAILS|ITEM + |poke|PLAYER|DETAILS|ITEM + ... + |teampreview + +> These messages appear if you're playing a format that uses team previews. + +`|clearpoke` + +> Marks the start of Team Preview + +`|poke|PLAYER|DETAILS|ITEM` + +> Declares a Pokémon for Team Preview. +> +> - `PLAYER` is the player ID (see `|player|`) +> - `DETAILS` describes the pokemon (see "Identifying Pokémon" below) +> - `ITEM` will be `item` if the Pokémon is holding an item, or blank if it isn't. +> +> Note that forme and shininess are hidden on this, unlike on the `|switch|` +> details message. + +`|start` + +> Indicates that the game has started. + +### Battle progress + +`|` + +> Clears the message-bar, and add a spacer to the battle history. This is +> usually done automatically by detecting the message-type, but can also +> be forced to happen with this. + +`|request|REQUEST` + +> Gives a JSON object containing a request for a choice (to move or +> switch). To assist in your decision, `REQUEST.active` has information +> about your active Pokémon, and `REQUEST.side` has information about your +> your team as a whole. `REQUEST.rqid` is an optional request ID (see +> "Sending decisions" for details). + +`|inactive|MESSAGE` or `|inactiveoff|MESSAGE` + +> A message related to the battle timer has been sent. The official client +> displays these messages in red. +> +> `inactive` means that the timer is on at the time the message was sent, +> while `inactiveoff` means that the timer is off. + +`|upkeep` + +> Signals the upkeep phase of the turn where the number of turns left for field +> conditions are updated. + +`|turn|NUMBER` + +> It is now turn `NUMBER`. + +`|win|USER` + +> `USER` has won the battle. + +`|tie` + +> The battle has ended in a tie. + +### Identifying Pokémon + +Pokémon will be identified by a Pokémon ID (generally labeled `POKEMON` in +this document), and, in certain cases, also a details string (generally +labeled `DETAILS`). + +A Pokémon ID is in the form `POSITION: NAME`. + +- `POSITION` is the spot that the Pokémon is in: it consists of the `PLAYER` + of the player (see `|player|`), followed by a position letter (`a` in + singles). + +An inactive Pokémon will not have a position letter. + +In doubles and triples battles, `a` will refer to the leftmost Pokémon +from its trainer's perspective (so the leftmost on your team, and the +rightmost on your opponent's team, so `p1a` faces `p2c`, etc). + +So the layout looks like: + +Doubles, player 1's perspective: + + p2b p2a + p1a p1b + +Doubles, player 2's perspective: + + p1b p1a + p2a p2b + +- `NAME` is the nickname of the Pokémon (or the species name, if no nickname + is given). + +For example: `p1a: Sparky` could be a Charizard named Sparky. +`p1: Dragonite` could be an inactive Dragonite being healed by Heal Bell. + +- `DETAILS` is a comma-separated list of all information about a pokemon + visible on the battle screen: species, shininess, gender, and level. So it + starts with `SPECIES`, adding `, shiny` if it's shiny, `, M` if it's male, + `, F` if it's female, `, L##` if it's not level 100. + +So, for instance, `Deoxys-Speed` is a level 100 non-shiny genderless +Deoxys (Speed forme). `Sawsbuck, shiny, F, L50` is a level 50 shiny female +Sawsbuck (Spring form). + +In Team Preview, `DETAILS` will not include information not available in +Team Preview (in particular, level and shininess will be left off), and +for Pokémon whose forme isn't revealed in Team Preview, it will be given as +`-*`. So, for instance, an Arceus in Team Preview would have the details +string `Arceus-*`, no matter what kind of Arceus it is. + +For most commands, you can just use the position information in the +Pokémon ID to identify the Pokémon. Only a few commands actually change the +Pokémon in that position (`|switch|` switching, `|replace|` illusion dropping, +`|drag|` phazing, and `|detailschange|` permanent forme changes), and these +all specify `DETAILS` for you to perform updates with. + +### Major actions + +In battle, most Pokémon actions come in the form `|ACTION|POKEMON|DETAILS` +followed by a few messages detailing what happens after the action occurs. + +Battle actions (especially minor actions) often come with tags such as +`|[from] EFFECT|[of] SOURCE`. `EFFECT` will be an effect (move, ability, +item, status, etc), and `SOURCE` will be a Pokémon. These can affect the +message or animation displayed, but do not affect anything else. Other +tags include `|[still]` (suppress animation) and `|[silent]` (suppress +message). + +`|move|POKEMON|MOVE|TARGET` + +> The specified Pokémon has used move `MOVE` at `TARGET`. If a move has +> multiple targets or no target, `TARGET` should be ignored. If a move +> targets a side, `TARGET` will be a (possibly fainted) Pokémon on that +> side. +> +> If `|[miss]` is present, the move missed. +> +> If `|[still]` is present, the move should not animate +> +> `|[anim] MOVE2` tells the client to use the animation of `MOVE2` instead +> of `MOVE` when displaying to the client. + +`|switch|POKEMON|DETAILS|HP STATUS` or `|drag|POKEMON|DETAILS|HP STATUS` + +> A Pokémon identified by `POKEMON` has switched in (if there was an old +> Pokémon in that position, it is switched out). +> +> For the DETAILS format, see "Identifying Pokémon" above. +> +> `POKEMON|DETAILS` represents all the information that can be used to tell +> Pokémon apart. If two pokemon have the same `POKEMON|DETAILS` (which will +> never happen in any format with Species Clause), you usually won't be able +> to tell if the same pokemon switched in or a different pokemon switched +> in. +> +> The switched Pokémon has HP `HP`, and status `STATUS`. `HP` is specified as +> a fraction; if it is your own Pokémon then it will be `CURRENT/MAX`, if not, +> it will be `/100` if HP Percentage Mod is in effect and `/48` otherwise. +> `STATUS` can be left blank, or it can be `slp`, `par`, etc. +> +> `switch` means it was intentional, while `drag` means it was unintentional +> (forced by Whirlwind, Roar, etc). + +`|detailschange|POKEMON|DETAILS|HP STATUS` or +`|-formechange|POKEMON|SPECIES|HP STATUS` + +> The specified Pokémon has changed formes (via Mega Evolution, ability, etc.) +> to `SPECIES`. If the forme change is permanent (Mega Evolution or a +> Shaymin-Sky that is frozen), then `detailschange` will appear; otherwise, +> the client will send `-formechange`. +> +> Syntax is the same as `|switch|` above. + +`|replace|POKEMON|DETAILS|HP STATUS` + +> Illusion has ended for the specified Pokémon. Syntax is the same as +> `|switch|` above, but remember that everything you thought you knew about the +> previous Pokémon is now wrong. +> +> `POKEMON` will be the NEW Pokémon ID - i.e. it will have the nickname of the +> Zoroark (or other Illusion user). + +`|swap|POKEMON|POSITION` + +> Moves already active `POKEMON` to active field `POSITION` where the +> leftmost position is 0 and each position to the right counts up by 1. + +`|cant|POKEMON|REASON` or `|cant|POKEMON|REASON|MOVE` + +> The Pokémon `POKEMON` could not perform a move because of the indicated +> `REASON` (such as paralysis, Disable, etc). Sometimes, the move it was +> trying to use is given. + +`|faint|POKEMON` + +> The Pokémon `POKEMON` has fainted. + +### Minor actions + +Minor actions are less important than major actions. In the official client, +they're usually displayed in small font if they have a message. Pretty much +anything that happens in a battle other than a switch or the fact that a move +was used is a minor action. So yes, the effects of a move such as damage or +stat boosts are minor actions. + +`|-fail|POKEMON|ACTION` + +> The specified `ACTION` has failed against the `POKEMON` targetted. The +> `ACTION` in question can be a move that fails, or a stat drop blocked by an +> ability like Hyper Cutter, in which case `ACTION` will be `unboost|STAT`, +> where `STAT` indicates where the ability prevents stat drops. (For abilities +> that block all stat drops, like Clear Body, `|STAT` does not appear.) + +`|-notarget|POKEMON` + +> A move has failed due to their being no target Pokémon `POKEMON`. `POKEMON` is +> not present in Generation 1. This action is specific to Generations 1-4 as in +> later Generations a failed move will display using `-fail`. + +`|-miss|SOURCE|TARGET` + +> The move used by the `SOURCE` Pokémon missed (maybe absent) the `TARGET` +> Pokémon. + +`|-damage|POKEMON|HP STATUS` + +> The specified Pokémon `POKEMON` has taken damage, and is now at +> `HP STATUS` (see `|switch|` for details). +> +> If `HP` is 0, `STATUS` should be ignored. The current behavior is for +> `STATUS` to be `fnt`, but this may change and should not be relied upon. + +`|-heal|POKEMON|HP STATUS` + +> Same as `-damage`, but the Pokémon has healed damage instead. + +`|-status|POKEMON|STATUS` + +> The Pokémon `POKEMON` has been inflicted with `STATUS`. + +`|-curestatus|POKEMON|STATUS` + +> The Pokémon `POKEMON` has recovered from `STATUS`. + +`|-cureteam|POKEMON` + +> The Pokémon `POKEMON` has used a move that cures its team of status effects, +> like Heal Bell. + +`|-boost|POKEMON|STAT|AMOUNT` + +> The specified Pokémon `POKEMON` has gained `AMOUNT` in `STAT`, using the +> standard rules for Pokémon stat changes in-battle. `STAT` is a standard +> three-letter abbreviation fot the stat in question, so Speed will be `spe`, +> Special Defense will be `spd`, etc. + +`|-unboost|POKEMON|STAT|AMOUNT` + +> Same as `-boost`, but for negative stat changes instead. + +`|-setboost|POKEMON|STAT|AMOUNT` + +> Same as `-boost` and `-unboost`, but `STAT` is *set* to `AMOUNT` instead of +> boosted *by* `AMOUNT`. (For example: Anger Point, Belly Drum) + +`|-swapboost|SOURCE|TARGET|STATS` + +> Swaps the boosts from `STATS` between the `SOURCE` Pokémon and `TARGET +> Pokémon.`STATS`takes the form of a comma-separated list of`STAT`abbreviations +> as described in`-boost`. (For example: Guard Swap, Heart Swap). + +`|-invertboost|POKEMON` + +> Invert the boosts of the target Pokémon `POKEMON`. (For example: Topsy-Turvy). + +`|-clearboost|POKEMON` + +> Clears all of the boosts of the target `POKEMON`. (For example: Clear Smog). + +`|-clearallboost` + +> Clears all boosts from all Pokémon on both sides. (For example: Haze). + +`|-clearpositiveboost|TARGET|POKEMON|EFFECT` + +> Clear the positive boosts from the `TARGET` Pokémon due to an `EFFECT` of the +> `POKEMON` Pokémon. (For example: 'move: Spectral Thief'). + +`|-clearnegativeboost|POKEMON` + +> Clear the negative boosts from the target Pokémon `POKEMON`. (For example: +> usually as the result of a `[zeffect]`). + +`|-copyboost|SOURCE|TARGET` + +> Copy the boosts from `SOURCE` Pokémon to `TARGET` Pokémon (For example: Psych +> Up). + +`|-weather|WEATHER` + +> Indicates the weather that is currently in effect. If `|[upkeep]` is present, +> it means that `WEATHER` was active previously and is still in effect that +> turn. Otherwise, it means that the weather has changed due to a move or ability, +> or has expired, in which case `WEATHER` will be `none`. + +`|-fieldstart|CONDITION` + +> The field condition `CONDITION` has started. Field conditions are all effects that +> affect the entire field and aren't a weather. (For example: Trick Room, Grassy +> Terrain) + +`|-fieldend|CONDITION` + +> Indicates that the field condition `CONDITION` has ended. + +`|-sidestart|SIDE|CONDITION` + +> A side condition `CONDITION` has started on `SIDE`. Side conditions are all +> effects that affect one side of the field. (For example: Tailwind, Stealth +> Rock, Reflect) + +`|-sideend|SIDE|CONDITION` + +> Indicates that the side condition `CONDITION` ended for the given `SIDE`. + +`|-start|POKEMON|EFFECT` + +> A [*volatile* status](https://bulbapedia.bulbagarden.net/wiki/Status_condition#Volatile_status) +> has been inflicted on the `POKEMON` Pokémon by `EFFECT`. (For example: +> confusion, Taunt, Substitute). + +`|-end|POKEMON|EFFECT` + +> The volatile status from `EFFECT` inflicted on the `POKEMON` Pokémon has +> ended. + +`|-crit|POKEMON` + +> A move has dealt a critical hit against the `POKEMON`. + +`|-supereffective|POKEMON` + +> A move was super effective against the `POKEMON`. + +`|-resisted|POKEMON` + +> A move was not very effective against the `POKEMON`. + +`|-immune|POKEMON` + +> The `POKEMON` was immune to a move. + +`|-item|POKEMON|ITEM` + +> The `ITEM` held by the `POKEMON` has been changed or revealed due to a move or +> ability. In addition, Air Balloon reveals itself when the Pokémon holding it +> switches in, so it will also cause this message to appear. + +`|-enditem|POKEMON|ITEM` + +> The `ITEM` held by `POKEMON` has been destroyed, and it now holds no item. This can +> be because of an item's own effects (consumed Berries, Air Balloon), or by a move or +> ability, like Knock Off. If a berry is consumed, it also has an additional modifier +> `|[eat]` to indicate that it was consumed. This message does not appear if the item's +> ownership was changed (with a move or ability like Thief or Trick), even if the move +> or ability would result in a Pokémon without an item. + +`|-ability|POKEMON|ABILITY` + +> The `ABILITY` of the `POKEMON` has been changed due to a move/ability, or it has +> activated in a way that could not be better described by one of the other minor +> messages. For example, Clear Body sends `-fail` when it blocks stat drops, while +> Mold Breaker sends this message to reveal itself upon switch-in. +> +> Note that Skill Swap does not send this message despite it changing abilities, +> because it does not reveal abilities when used between allies in a Double or +> Triple Battle. + +`|-endability|POKEMON` + +> The `POKEMON` has had its ability surpressed, either by a move like Gastro Acid, or +> by the effects of Mummy. + +`|-transform|POKEMON|SPECIES` + +> The Pokémon `POKEMON` has transformed into `SPECIES` by the effect of Transform +> or the ability Imposter. + +`|-mega|POKEMON|MEGASTONE` + +> The Pokémon `POKEMON` used `MEGASTONE` to Mega Evolve. + +`|-primal|POKEMON` + +> The Pokémon `POKEMON` has reverted to its primal forme. + +`|-burst|POKEMON|SPECIES|ITEM` + +> The Pokémon `POKEMON` has used `ITEM` to Ultra Burst into `SPECIES`. + +`|-zpower|POKEMON` + +> The Pokémon `POKEMON` has used the z-move version of its move. + +`|-zbroken|POKEMON` + +> A z-move has broken through protect and hit the `POKEMON`. + +`|-activate|EFFECT` + +> A miscellaneous effect has activated. This is triggered whenever an effect could +> not be better described by one of the other minor messages: for example, healing +> abilities like Water Absorb simply use `-heal`, and items that are consumed upon +> use have the `-enditem` message instead. + +`|-hint|MESSAGE` + +> Displays a message in parentheses to the client. Hint messages appear to explain and +> clarify why certain actions, such as Fake Out and Mat Block failing, have occurred, +> when there would normally be no in-game messages. + +`|-center` + +> Appears in Triple Battles when only one Pokémon remains on each side, to indicate +> that the Pokémon have been automatically centered. + +`|-message|MESSAGE` + +> Displays a miscellaneous message to the client. These messages are primarily used +> for messages from game mods that aren't supported by the client, like rule clauses +> such as Sleep Clause, or other metagames with custom messages for specific scenarios. + +`|-combine` + +> A move has been combined with another (For example: Fire Pledge). + +`|-waiting|SOURCE|TARGET` + +> The `SOURCE` Pokémon has used a move and is waiting for the `TARGET` Pokémon +> (For example: Fire Pledge). + +`|-prepare|ATTACKER|MOVE|DEFENDER` + +> The `ATTACKER` Pokémon is preparing to use a charge `MOVE` on the `DEFENDER` +> (For example: Dig, Fly). + +`|-mustrecharge|POKEMON` + +> The Pokémon `POKEMON` must spend the turn recharging from a previous move. + +`|-nothing` + +> **DEPRECATED**: A move did absolutely nothing. (For example: Splash). In the +> future this will be of the form `|-activate||move:Splash`. + +`|-hitcount|POKEMON|NUM` + +> A multi-hit move hit the `POKEMON` `NUM` times. + +`|-singlemove|POKEMON|MOVE` + +> The Pokémon `POKEMON` used move `MOVE` which causes a temporary effect lasting +> the duration of the move. (For example: Grudge, Destiny Bond). + +`|-singleturn|POKEMON|MOVE` + +> The Pokémon `POKEMON` used move `MOVE` which causes a temporary effect lasting +> the duration of the turn. (For example: Protect, Focus Punch, Roost). + + +Sending decisions +----------------- + +Using the Pokémon Showdown client, you can specify decisions with +`/choose CHOICE`, or, for move and switch decisions, just `/CHOICE` works as +well. + +Using the simulator API, you would write `>p1 CHOICE` or `>p2 CHOICE` into the +battle stream. + +### Possible choices + +You can see the syntax in action by looking at the JavaScript console when +playing a Pokémon Showdown battle in a browser such as Chrome. + +As an overview: + +- `switch Pikachu`, `switch pikachu`, or `switch 2` are all valid `CHOICE` + strings to switch to a Pikachu in slot 2. + +- `move Focus Blast`, `move focusblast`, or `move 4` are all valid `CHOICE` + strings to use Focus Blast, your active Pokemon's 4th move. + +In Doubles, decisions are delimited by `,`. If you have a Manectric and a +Cresselia, `move Thunderbolt 1 mega, move Helping Hand -1` will make the +Manectric mega evolve and use Thunderbolt at the opponent in slot 1, while +Cresselia will use Helping Hand at Manectric. + +To be exact, `CHOICE` is one of: + +- `team TEAMSPEC`, during Team Preview, where `TEAMSPEC` is a list of pokemon + slots. + - For instance, `team 213456` will swap the first two Pokemon and keep all + other pokemon in order. + - `TEAMSPEC` does not have to be all pokemon: `team 5231` might be a choice + in VGC. + - `TEAMSPEC` does not need separators unless you have over 10 Pokémon, but + in custom games, separate slots with `,`. For instance: + `team 2, 1, 3, 4, 5, 6, 7, 8, 9, 10` + +- `default`, to auto-choose a decision. This will be the first possible legal + choice. This is what's used in VGC if you run out of Move Time. + +- `undo`, to cancel a previously-made choice. This can only be done if the + another player needs to make a choice and hasn't done so yet (or if you are + calling `side.choose()` directly, which doesn't auto-continue when both + players have made a choice). + +- `POKEMONCHOICE` in Singles + +- `POKEMONCHOICE, POKEMONCHOICE` in Doubles + +`POKEMONCHOICE` is one of: + +- `default`, to auto-choose a decision + +- `pass`, to skip a slot in Doubles/Triples that doesn't need a decision (can + be left off, but can be useful for readability, to mean "the pokemon in this + slot is fainted and won't be making a move") + +- `move MOVESPEC`, to make a move + +- `move MOVESPEC mega`, to mega-evolve and make a move + +- `move MOVESPEC zmove`, to use a z-move version of a move + +- `switch SWITCHSPEC`, to make a switch + +`MOVESPEC` is: + +- `MOVESLOTSPEC` or `MOVESLOTSPEC TARGETSPEC` + - `MOVESLOTSPEC` is a move name (capitalization/spacing-insensitive) or + 1-based move slot number + - `TARGETSPEC` is a 1-based target slot number. Add a `-` in front of it to + refer to allies. Remember that slots oppose each other, so in a battle, the + slots go as follows: + + Triples Doubles Singles + 3 2 1 2 1 1 + -1 -2 -3 -1 -2 -1 + + (But note that slot numbers are unnecessary in Singles: you can never + choose a target in Singles.) + +`SWITCHSPEC` is: + +- a pokemon nickname or 1-based slot number + - Note that if you have multiple Pokémon with the same nickname, using the + nickname will select the first unfainted one. If you want another Pokémon, + you'll need to specify it by slot number. + +Once a choice has been set for all players who need to make a choice, the +battle will continue. + +All decisions except `/undo` can be sent with `|RQID` at the end. `RQID` is +`REQUEST.rqid` from `|request|`. Each `RQID` is a unique number used to +identify which action the request was intended for and is used to protect +against race conditions involving `/undo` (the cancel button). + +If an invalid decision is sent (trying to switch when you're trapped by +Mean Look or something), you will receive a message starting with: + +`|error|[Invalid choice]` + +This will tell you to send a different decision. + +### Choice requests + +The protocol message to tell you that it's time for you to make a decision +is: + +`|request|REQUEST` + +> Gives a JSON object containing a request for a choice (to move or +> switch). To assist in your decision, `REQUEST.active` has information +> about your active Pokémon, and `REQUEST.side` has information about your +> your team as a whole. `REQUEST.rqid` is an optional request ID (see +> "Sending decisions" for details). + +Example request object: + +``` +{ + "active": [ + { + "moves": [ + { + "move": "Light Screen", + "id": "lightscreen", + "pp": 48, + "maxpp": 48, + "target": "allySide", + "disabled": false + }, + { + "move": "U-turn", + "id": "uturn", + "pp": 32, + "maxpp": 32, + "target": "normal", + "disabled": false + }, + { + "move": "Knock Off", + "id": "knockoff", + "pp": 32, + "maxpp": 32, + "target": "normal", + "disabled": false + }, + { + "move": "Roost", + "id": "roost", + "pp": 16, + "maxpp": 16, + "target": "self", + "disabled": false + } + ] + } + ], + "side": { + "name": "Zarel", + "id": "p2", + "pokemon": [ + { + "ident": "p2: Ledian", + "details": "Ledian, L83, M", + "condition": "227/227", + "active": true, + "stats": { + "atk": 106, + "def": 131, + "spa": 139, + "spd": 230, + "spe": 189 + }, + "moves": [ + "lightscreen", + "uturn", + "knockoff", + "roost" + ], + "baseAbility": "swarm", + "item": "leftovers", + "pokeball": "pokeball", + "ability": "swarm" + }, + { + "ident": "p2: Pyukumuku", + "details": "Pyukumuku, L83, F", + "condition": "227/227", + "active": false, + "stats": { + "atk": 104, + "def": 263, + "spa": 97, + "spd": 263, + "spe": 56 + }, + "moves": [ + "recover", + "counter", + "lightscreen", + "reflect" + ], + "baseAbility": "innardsout", + "item": "lightclay", + "pokeball": "pokeball", + "ability": "innardsout" + }, + { + "ident": "p2: Heatmor", + "details": "Heatmor, L83, F", + "condition": "277/277", + "active": false, + "stats": { + "atk": 209, + "def": 157, + "spa": 222, + "spd": 157, + "spe": 156 + }, + "moves": [ + "fireblast", + "suckerpunch", + "gigadrain", + "focusblast" + ], + "baseAbility": "flashfire", + "item": "lifeorb", + "pokeball": "pokeball", + "ability": "flashfire" + }, + { + "ident": "p2: Reuniclus", + "details": "Reuniclus, L78, M", + "condition": "300/300", + "active": false, + "stats": { + "atk": 106, + "def": 162, + "spa": 240, + "spd": 178, + "spe": 92 + }, + "moves": [ + "shadowball", + "recover", + "calmmind", + "psyshock" + ], + "baseAbility": "magicguard", + "item": "lifeorb", + "pokeball": "pokeball", + "ability": "magicguard" + }, + { + "ident": "p2: Minun", + "details": "Minun, L83, F", + "condition": "235/235", + "active": false, + "stats": { + "atk": 71, + "def": 131, + "spa": 172, + "spd": 189, + "spe": 205 + }, + "moves": [ + "hiddenpowerice60", + "nastyplot", + "substitute", + "thunderbolt" + ], + "baseAbility": "voltabsorb", + "item": "leftovers", + "pokeball": "pokeball", + "ability": "voltabsorb" + }, + { + "ident": "p2: Gligar", + "details": "Gligar, L79, M", + "condition": "232/232", + "active": false, + "stats": { + "atk": 164, + "def": 211, + "spa": 101, + "spd": 148, + "spe": 180 + }, + "moves": [ + "toxic", + "stealthrock", + "roost", + "earthquake" + ], + "baseAbility": "hypercutter", + "item": "eviolite", + "pokeball": "pokeball", + "ability": "hypercutter" + } + ] + }, + "rqid": 3 +} +``` diff --git a/sim/battle-stream-example.ts b/sim/battle-stream-example.ts new file mode 100644 index 0000000000000..30b2b4136d22a --- /dev/null +++ b/sim/battle-stream-example.ts @@ -0,0 +1,107 @@ +/** + * Battle Stream Example + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * Example of how to create AIs battling against each other. + * + * @license MIT + * @author Guangcong Luo + */ + +import * as BattleStreams from './battle-stream'; +import Dex = require('./dex'); + +/********************************************************************* + * Helper functions + *********************************************************************/ + +function randomElem(array: number[]) { + return array[Math.floor(Math.random() * array.length)]; +} + +/********************************************************************* + * Define AI + *********************************************************************/ + +class RandomPlayerAI extends BattleStreams.BattlePlayer { + receiveRequest(request: AnyObject) { + if (request.wait) { + // wait request + // do nothing + } else if (request.forceSwitch) { + // switch request + const pokemon = request.side.pokemon; + let chosen: number[] = []; + const choices = request.forceSwitch.map((mustSwitch: AnyObject) => { + if (!mustSwitch) return `pass`; + let canSwitch = [1, 2, 3, 4, 5, 6]; + canSwitch = canSwitch.filter(i => ( + // not active + i > request.forceSwitch.length && + // not chosen for a simultaneous switch + !chosen.includes(i) && + // not fainted + !pokemon[i - 1].condition.endsWith(` fnt`) + )); + const target = randomElem(canSwitch); + chosen.push(target); + return `switch ${target}`; + }); + this.choose(choices.join(`, `)); + } else if (request.active) { + // move request + const choices = request.active.map((pokemon: AnyObject, i: number) => { + if (request.side.pokemon[i].condition.endsWith(` fnt`)) return `pass`; + let canMove = [1, 2, 3, 4].slice(0, pokemon.moves.length); + canMove = canMove.filter(j => ( + // not disabled + !pokemon.moves[j - 1].disabled + )); + const move = randomElem(canMove); + const targetable = request.active.length > 1 && ['normal', 'any'].includes(pokemon.moves[move - 1].target); + const target = targetable ? ` ${1 + Math.floor(Math.random() * 2)}` : ``; + return `move ${move}${target}`; + }); + this.choose(choices.join(`, `)); + } else { + // team preview? + this.choose(`default`); + } + } +} + +/********************************************************************* + * Run AI + *********************************************************************/ + +const streams = BattleStreams.getPlayerStreams(new BattleStreams.BattleStream()); + +const spec = { + formatid: "gen7customgame", +}; +const p1spec = { + name: "Bot 1", + team: Dex.packTeam(Dex.generateTeam('gen7randombattle')), +}; +const p2spec = { + name: "Bot 2", + team: Dex.packTeam(Dex.generateTeam('gen7randombattle')), +}; + +const p1 = new RandomPlayerAI(streams.p1); +const p2 = new RandomPlayerAI(streams.p2); + +console.log("p1 is " + p1.constructor.name); +console.log("p2 is " + p2.constructor.name); + +(async () => { + let chunk; + // tslint:disable-next-line no-conditional-assignment + while ((chunk = await streams.omniscient.read())) { + console.log(chunk); + } +})(); + +streams.omniscient.write(`>start ${JSON.stringify(spec)} +>player p1 ${JSON.stringify(p1spec)} +>player p2 ${JSON.stringify(p2spec)}`); diff --git a/sim/battle-stream.ts b/sim/battle-stream.ts new file mode 100644 index 0000000000000..d77455640872e --- /dev/null +++ b/sim/battle-stream.ts @@ -0,0 +1,303 @@ +/** + * Battle Stream + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * Supports interacting with a PS battle in Stream format. + * + * This format is VERY NOT FINALIZED, please do not use it directly yet. + * + * @license MIT + */ + +import * as Streams from './../lib/streams'; +import {Battle} from './battle'; + +/** + * Like string.split(delimiter), but only recognizes the first `limit` + * delimiters (default 1). + * + * `"1 2 3 4".split(" ", 2) => ["1", "2"]` + * + * `Chat.splitFirst("1 2 3 4", " ", 1) => ["1", "2 3 4"]` + * + * Returns an array of length exactly limit + 1. + */ +function splitFirst(str: string, delimiter: string, limit: number = 1) { + let splitStr: string[] = []; + while (splitStr.length < limit) { + let delimiterIndex = str.indexOf(delimiter); + if (delimiterIndex >= 0) { + splitStr.push(str.slice(0, delimiterIndex)); + str = str.slice(delimiterIndex + delimiter.length); + } else { + splitStr.push(str); + str = ''; + } + } + splitStr.push(str); + return splitStr; +} + +export class BattleStream extends Streams.ObjectReadWriteStream { + debug: boolean; + keepAlive: boolean; + battle: Battle | null; + + constructor(options: {debug?: boolean, keepAlive?: boolean} = {}) { + super(); + this.debug = !!options.debug; + this.keepAlive = !!options.keepAlive; + this.battle = null; + } + + _write(message: string) { + let startTime = Date.now(); + try { + for (const line of message.split('\n')) { + if (line.charAt(0) === '>') this._writeLine(line.slice(1)); + } + } catch (err) { + if (typeof Monitor === 'undefined') throw err; + const battle = this.battle; + Monitor.crashlog(err, 'A battle', { + message, + inputLog: battle ? '\n' + battle.inputLog.join('\n') : '', + log: battle ? '\n' + battle.getDebugLog() : '', + }); + + this.push(`update\n|html|
    The battle crashed
    Don't worry, we're working on fixing it.
    `); + if (battle && battle.p1 && battle.p1.currentRequest) { + this.push(`sideupdate\np1\n|error|[Invalid choice] The battle crashed`); + } + if (battle && battle.p2 && battle.p2.currentRequest) { + this.push(`sideupdate\np2\n|error|[Invalid choice] The battle crashed`); + } + } + if (this.battle) this.battle.sendUpdates(); + let deltaTime = Date.now() - startTime; + if (deltaTime > 1000) { + console.log(`[slow battle] ${deltaTime}ms - ${message}`); + } + } + + _writeLine(line: string) { + let [type, message] = splitFirst(line, ' '); + switch (type) { + case 'start': + const options = JSON.parse(message); + options.send = (t: string, data: any) => { + if (Array.isArray(data)) data = data.join("\n"); + this.push(`${t}\n${data}`); + if (type === 'end' && !this.keepAlive) { + this.push(null); + this._destroy(); + } + }; + if (this.debug) options.debug = true; + this.battle = new Battle(options); + break; + case 'player': + const [slot, optionsText] = splitFirst(message, ' '); + this.battle!.setPlayer(slot as PlayerSlot, JSON.parse(optionsText)); + break; + case 'p1': + case 'p2': + if (message === 'undo') { + this.battle!.undoChoice(type); + } else { + this.battle!.choose(type, message); + } + break; + case 'forcewin': + case 'forcetie': + this.battle!.win(type === 'forcewin' ? message : null); + break; + case 'tiebreak': + this.battle!.tiebreak(); + break; + case 'eval': + /* tslint:disable:no-eval */ + let battle = this.battle!; + let p1 = battle && battle.p1; + let p2 = battle && battle.p2; + let p1active = p1 && p1.active[0]; + let p2active = p2 && p2.active[0]; + battle.inputLog.push(line); + message = message.replace(/\f/g, '\n'); + battle.add('', '>>> ' + message.replace(/\n/g, '\n||')); + try { + let result = eval(message); + if (result && result.then) { + result.then((unwrappedResult: any) => { + unwrappedResult = Chat.stringify(unwrappedResult); + battle.add('', 'Promise -> ' + unwrappedResult); + battle.sendUpdates(); + }, (error: Error) => { + battle.add('', '<<< error: ' + error.message); + battle.sendUpdates(); + }); + } else { + result = Chat.stringify(result); + result = result.replace(/\n/g, '\n||'); + battle.add('', '<<< ' + result); + } + } catch (e) { + battle.add('', '<<< error: ' + e.message); + } + /* tslint:enable:no-eval */ + break; + } + } + _end() { + // this is in theory synchronous... + this.push(null); + this._destroy(); + } + _destroy() { + if (this.battle) { + this.battle.destroy(); + } + this.battle = null; + } +} + +/** + * Splits a BattleStream into omniscient, spectator, p1, and p2 + * streams, for ease of consumption. + */ +export function getPlayerStreams(stream: BattleStream) { + let omniscient = new Streams.ObjectReadWriteStream({ + write(data: string) { + stream.write(data); + }, + end() { + stream.end(); + }, + }); + let spectator = new Streams.ObjectReadStream({ + read() {}, + }); + let p1 = new Streams.ObjectReadWriteStream({ + write(data: string) { + stream.write(data.replace(/(^|\n)/g, `$1>p1 `)); + }, + }); + let p2 = new Streams.ObjectReadWriteStream({ + write(data: string) { + stream.write(data.replace(/(^|\n)/g, `$1>p2 `)); + }, + }); + (async () => { + let chunk; + // tslint:disable-next-line:no-conditional-assignment + while ((chunk = await stream.read())) { + const [type, data] = splitFirst(chunk, `\n`); + switch (type) { + case 'update': + const p1Update = data.replace(/\n\|split\n[^\n]*\n([^\n]*)\n[^\n]*\n[^\n]*/g, '\n$1').replace(/\n\n/g, '\n'); + p1.push(p1Update); + const p2Update = data.replace(/\n\|split\n[^\n]*\n[^\n]*\n([^\n]*)\n[^\n]*/g, '\n$1').replace(/\n\n/g, '\n'); + p2.push(p2Update); + const specUpdate = data.replace(/\n\|split\n([^\n]*)\n[^\n]*\n[^\n]*\n[^\n]*/g, '\n$1').replace(/\n\n/g, '\n'); + spectator.push(specUpdate); + const omniUpdate = data.replace(/\n\|split\n[^\n]*\n[^\n]*\n[^\n]*/g, ''); + omniscient.push(omniUpdate); + break; + case 'sideupdate': + const [side, sideData] = splitFirst(data, `\n`); + (side === 'p1' ? p1 : p2).push(sideData); + break; + case 'end': + // ignore + break; + } + } + omniscient.push(null); + spectator.push(null); + p1.push(null); + p2.push(null); + })(); + return {omniscient, spectator, p1, p2}; +} + +export class BattlePlayer { + // @ts-ignore + stream: Streams.ObjectReadWriteStream; + log: string[]; + debug: boolean; + + // @ts-ignore + constructor(playerStream: Streams.ObjectReadWriteStream, debug: boolean = false) { + this.stream = playerStream; + this.log = []; + this.debug = debug; + this.listen(); + } + async listen() { + let chunk; + // tslint:disable-next-line:no-conditional-assignment + while ((chunk = await this.stream.read())) { + this.receive(chunk); + } + } + + receive(chunk: string) { + for (const line of chunk.split('\n')) { + this.receiveLine(line); + } + } + + receiveLine(line: string) { + if (this.debug) console.log(line); + if (line.charAt(0) !== '|') return; + const [cmd, rest] = splitFirst(line.slice(1), '|'); + if (cmd === 'request') { + return this.receiveRequest(JSON.parse(rest)); + } + if (cmd === 'error') { + throw new Error(rest); + } + this.log.push(line); + } + + receiveRequest(request: AnyObject) { + throw new Error(`must be implemented by subclass`); + } + + choose(choice: string) { + this.stream.write(choice); + } +} + +export class BattleTextStream extends Streams.ReadWriteStream { + battleStream: BattleStream; + currentMessage: string; + + constructor(options: {debug?: boolean}) { + super(); + this.battleStream = new BattleStream(options); + this.currentMessage = ''; + this._listen(); + } + + _write(message: string | Buffer) { + this.currentMessage += '' + message; + let index = this.currentMessage.lastIndexOf('\n'); + if (index >= 0) { + this.battleStream.write(this.currentMessage.slice(0, index)); + this.currentMessage = this.currentMessage.slice(index + 1); + } + } + _end() { + this.battleStream.end(); + } + async _listen() { + let message: string; + // tslint:disable-next-line:no-conditional-assignment + while ((message = await this.battleStream.read())) { + if (!message.endsWith('\n')) message += '\n'; + this.push(message + '\n'); + } + this.push(null); + } +} diff --git a/sim/battle.js b/sim/battle.js deleted file mode 100644 index f27a36fdba5d3..0000000000000 --- a/sim/battle.js +++ /dev/null @@ -1,2747 +0,0 @@ -/** - * Simulator Battle - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * @license MIT license - */ -'use strict'; - -const Dex = require('./dex'); -const PRNG = require('./prng'); -const Sim = require('./'); - -class Battle extends Dex.ModdedDex { - /** - * @param {object} format - * @param {boolean} rated - * @param {Function} send - * @param {PRNG} [maybePrng] - */ - constructor(format, rated = false, send = (() => {}), prng = new PRNG()) { - super(format.mod); - Object.assign(this, this.data.Scripts); - - this.log = []; - /** @type {Sim.Side[]} */ - this.sides = [null, null]; - this.rated = rated; - this.weatherData = {id:''}; - this.terrainData = {id:''}; - this.pseudoWeather = {}; - - this.format = toId(format); - this.formatData = {id:this.format}; - - this.effect = {id:''}; - this.effectData = {id:''}; - this.event = {id:''}; - - this.gameType = (format.gameType || 'singles'); - this.reportExactHP = !!format.debug; - this.replayExactHP = !format.team; - - this.queue = []; - this.faintQueue = []; - this.messageLog = []; - - this.send = send; - - this.turn = 0; - /** @type {Sim.Side} */ - this.p1 = null; - /** @type {Sim.Side} */ - this.p2 = null; - this.lastUpdate = 0; - this.weather = ''; - this.terrain = ''; - this.ended = false; - this.started = false; - this.active = false; - this.eventDepth = 0; - this.lastMove = ''; - this.activeMove = null; - this.activePokemon = null; - this.activeTarget = null; - this.midTurn = false; - this.currentRequest = ''; - this.lastMoveLine = 0; - this.reportPercentages = false; - this.supportCancel = false; - this.events = null; - - this.abilityOrder = 0; - - this.prng = prng; - this.prngSeed = this.prng.startingSeed.slice(); - this.teamGenerator = null; - } - - static logReplay(data, isReplay) { - if (isReplay === true) return data; - return ''; - } - - toString() { - return 'Battle: ' + this.format; - } - - random(m, n) { - return this.prng.next(m, n); - } - resetRNG() { - this.prng = new PRNG(this.prng.startingSeed); - } - - setWeather(status, source, sourceEffect) { - status = this.getEffect(status); - if (sourceEffect === undefined && this.effect) sourceEffect = this.effect; - if (source === undefined && this.event && this.event.target) source = this.event.target; - - if (this.weather === status.id) { - if (sourceEffect && sourceEffect.effectType === 'Ability') { - if (this.gen > 5 || this.weatherData.duration === 0) { - return false; - } - } else if (this.gen > 2 || status.id === 'sandstorm') { - return false; - } - } - if (status.id) { - let result = this.runEvent('SetWeather', source, source, status); - if (!result) { - if (result === false) { - if (sourceEffect && sourceEffect.weather) { - this.add('-fail', source, sourceEffect, '[from]: ' + this.weather); - } else if (sourceEffect && sourceEffect.effectType === 'Ability') { - this.add('-ability', source, sourceEffect, '[from] ' + this.weather, '[fail]'); - } - } - return null; - } - } - if (this.weather && !status.id) { - let oldstatus = this.getWeather(); - this.singleEvent('End', oldstatus, this.weatherData, this); - } - let prevWeather = this.weather; - let prevWeatherData = this.weatherData; - this.weather = status.id; - this.weatherData = {id: status.id}; - if (source) { - this.weatherData.source = source; - this.weatherData.sourcePosition = source.position; - } - if (status.duration) { - this.weatherData.duration = status.duration; - } - if (status.durationCallback) { - this.weatherData.duration = status.durationCallback.call(this, source, sourceEffect); - } - if (!this.singleEvent('Start', status, this.weatherData, this, source, sourceEffect)) { - this.weather = prevWeather; - this.weatherData = prevWeatherData; - return false; - } - return true; - } - clearWeather() { - return this.setWeather(''); - } - effectiveWeather(target) { - if (this.event) { - if (!target) target = this.event.target; - } - if (this.suppressingWeather()) return ''; - return this.weather; - } - isWeather(weather, target) { - let ourWeather = this.effectiveWeather(target); - if (!Array.isArray(weather)) { - return ourWeather === toId(weather); - } - return weather.map(toId).includes(ourWeather); - } - getWeather() { - return this.getEffect(this.weather); - } - - setTerrain(status, source, sourceEffect) { - status = this.getEffect(status); - if (sourceEffect === undefined && this.effect) sourceEffect = this.effect; - if (source === undefined && this.event && this.event.target) source = this.event.target; - - if (this.terrain === status.id) return false; - if (this.terrain && !status.id) { - let oldstatus = this.getTerrain(); - this.singleEvent('End', oldstatus, this.terrainData, this); - } - let prevTerrain = this.terrain; - let prevTerrainData = this.terrainData; - this.terrain = status.id; - this.terrainData = {id: status.id}; - if (source) { - this.terrainData.source = source; - this.terrainData.sourcePosition = source.position; - } - if (status.duration) { - this.terrainData.duration = status.duration; - } - if (status.durationCallback) { - this.terrainData.duration = status.durationCallback.call(this, source, sourceEffect); - } - if (!this.singleEvent('Start', status, this.terrainData, this, source, sourceEffect)) { - this.terrain = prevTerrain; - this.terrainData = prevTerrainData; - return false; - } - return true; - } - clearTerrain() { - return this.setTerrain(''); - } - effectiveTerrain(target) { - if (this.event) { - if (!target) target = this.event.target; - } - if (!this.runEvent('TryTerrain', target)) return ''; - return this.terrain; - } - isTerrain(terrain, target) { - let ourTerrain = this.effectiveTerrain(target); - if (!Array.isArray(terrain)) { - return ourTerrain === toId(terrain); - } - return terrain.map(toId).includes(ourTerrain); - } - getTerrain() { - return this.getEffect(this.terrain); - } - - getFormat(format) { - return super.getFormat(format || this.format); - } - addPseudoWeather(status, source, sourceEffect) { - status = this.getEffect(status); - if (this.pseudoWeather[status.id]) { - if (!status.onRestart) return false; - return this.singleEvent('Restart', status, this.pseudoWeather[status.id], this, source, sourceEffect); - } - this.pseudoWeather[status.id] = {id: status.id}; - if (source) { - this.pseudoWeather[status.id].source = source; - this.pseudoWeather[status.id].sourcePosition = source.position; - } - if (status.duration) { - this.pseudoWeather[status.id].duration = status.duration; - } - if (status.durationCallback) { - this.pseudoWeather[status.id].duration = status.durationCallback.call(this, source, sourceEffect); - } - if (!this.singleEvent('Start', status, this.pseudoWeather[status.id], this, source, sourceEffect)) { - delete this.pseudoWeather[status.id]; - return false; - } - return true; - } - getPseudoWeather(status) { - status = this.getEffect(status); - if (!this.pseudoWeather[status.id]) return null; - return status; - } - removePseudoWeather(status) { - status = this.getEffect(status); - if (!this.pseudoWeather[status.id]) return false; - this.singleEvent('End', status, this.pseudoWeather[status.id], this); - delete this.pseudoWeather[status.id]; - return true; - } - suppressingAttackEvents() { - return this.activePokemon && this.activePokemon.isActive && this.activeMove && this.activeMove.ignoreAbility; - } - suppressingWeather() { - let pokemon; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - pokemon = this.sides[i].active[j]; - if (pokemon && !pokemon.ignoringAbility() && pokemon.getAbility().suppressWeather) { - return true; - } - } - } - return false; - } - setActiveMove(move, pokemon, target) { - if (!move) move = null; - if (!pokemon) pokemon = null; - if (!target) target = pokemon; - this.activeMove = move; - this.activePokemon = pokemon; - this.activeTarget = target; - } - clearActiveMove(failed) { - if (this.activeMove) { - if (!failed) { - this.lastMove = this.activeMove.id; - } - this.activeMove = null; - this.activePokemon = null; - this.activeTarget = null; - } - } - - updateSpeed() { - let actives = this.p1.active; - for (let i = 0; i < actives.length; i++) { - if (actives[i]) actives[i].updateSpeed(); - } - actives = this.p2.active; - for (let i = 0; i < actives.length; i++) { - if (actives[i]) actives[i].updateSpeed(); - } - } - - static comparePriority(a, b) { - a.priority = a.priority || 0; - a.subPriority = a.subPriority || 0; - a.speed = a.speed || 0; - b.priority = b.priority || 0; - b.subPriority = b.subPriority || 0; - b.speed = b.speed || 0; - if ((typeof a.order === 'number' || typeof b.order === 'number') && a.order !== b.order) { - if (typeof a.order !== 'number') { - return -1; - } - if (typeof b.order !== 'number') { - return 1; - } - if (b.order - a.order) { - return -(b.order - a.order); - } - } - if (b.priority - a.priority) { - return b.priority - a.priority; - } - if (b.speed - a.speed) { - return b.speed - a.speed; - } - if (b.subOrder - a.subOrder) { - return -(b.subOrder - a.subOrder); - } - return Math.random() - 0.5; - } - static compareRedirectOrder(a, b) { - a.priority = a.priority || 0; - a.speed = a.speed || 0; - b.priority = b.priority || 0; - b.speed = b.speed || 0; - if (b.priority - a.priority) { - return b.priority - a.priority; - } - if (b.speed - a.speed) { - return b.speed - a.speed; - } - if (b.thing.abilityOrder - a.thing.abilityOrder) { - return -(b.thing.abilityOrder - a.thing.abilityOrder); - } - return 0; - } - getResidualStatuses(thing, callbackType) { - let statuses = this.getRelevantEffectsInner(thing || this, callbackType || 'residualCallback', null, null, false, true, 'duration'); - statuses.sort(Battle.comparePriority); - //if (statuses[0]) this.debug('match ' + (callbackType || 'residualCallback') + ': ' + statuses[0].status.id); - return statuses; - } - eachEvent(eventid, effect, relayVar) { - let actives = []; - if (!effect && this.effect) effect = this.effect; - for (let i = 0; i < this.sides.length; i++) { - let side = this.sides[i]; - for (let j = 0; j < side.active.length; j++) { - if (side.active[j]) actives.push(side.active[j]); - } - } - actives.sort((a, b) => { - if (b.speed - a.speed) { - return b.speed - a.speed; - } - return Math.random() - 0.5; - }); - for (let i = 0; i < actives.length; i++) { - this.runEvent(eventid, actives[i], null, effect, relayVar); - } - } - residualEvent(eventid, relayVar) { - let statuses = this.getRelevantEffectsInner(this, 'on' + eventid, null, null, false, true, 'duration'); - statuses.sort(Battle.comparePriority); - while (statuses.length) { - let statusObj = statuses.shift(); - let status = statusObj.status; - if (statusObj.thing.fainted) continue; - if (statusObj.statusData && statusObj.statusData.duration) { - statusObj.statusData.duration--; - if (!statusObj.statusData.duration) { - statusObj.end.call(statusObj.thing, status.id); - continue; - } - } - this.singleEvent(eventid, status, statusObj.statusData, statusObj.thing, relayVar); - } - } - // The entire event system revolves around this function - // (and its helper functions, getRelevant * ) - singleEvent(eventid, effect, effectData, target, source, sourceEffect, relayVar) { - if (this.eventDepth >= 8) { - // oh fuck - this.add('message', 'STACK LIMIT EXCEEDED'); - this.add('message', 'PLEASE REPORT IN BUG THREAD'); - this.add('message', 'Event: ' + eventid); - this.add('message', 'Parent event: ' + this.event.id); - throw new Error("Stack overflow"); - } - //this.add('Event: ' + eventid + ' (depth ' + this.eventDepth + ')'); - effect = this.getEffect(effect); - let hasRelayVar = true; - if (relayVar === undefined) { - relayVar = true; - hasRelayVar = false; - } - - if (effect.effectType === 'Status' && target.status !== effect.id) { - // it's changed; call it off - return relayVar; - } - if (eventid !== 'Start' && eventid !== 'TakeItem' && eventid !== 'Primal' && effect.effectType === 'Item' && (target instanceof Sim.Pokemon) && target.ignoringItem()) { - this.debug(eventid + ' handler suppressed by Embargo, Klutz or Magic Room'); - return relayVar; - } - if (eventid !== 'End' && effect.effectType === 'Ability' && (target instanceof Sim.Pokemon) && target.ignoringAbility()) { - this.debug(eventid + ' handler suppressed by Gastro Acid'); - return relayVar; - } - if (effect.effectType === 'Weather' && eventid !== 'Start' && eventid !== 'Residual' && eventid !== 'End' && this.suppressingWeather()) { - this.debug(eventid + ' handler suppressed by Air Lock'); - return relayVar; - } - - if (effect['on' + eventid] === undefined) return relayVar; - let parentEffect = this.effect; - let parentEffectData = this.effectData; - let parentEvent = this.event; - this.effect = effect; - this.effectData = effectData; - this.event = {id: eventid, target: target, source: source, effect: sourceEffect}; - this.eventDepth++; - let args = [target, source, sourceEffect]; - if (hasRelayVar) args.unshift(relayVar); - let returnVal; - if (typeof effect['on' + eventid] === 'function') { - returnVal = effect['on' + eventid].apply(this, args); - } else { - returnVal = effect['on' + eventid]; - } - this.eventDepth--; - this.effect = parentEffect; - this.effectData = parentEffectData; - this.event = parentEvent; - if (returnVal === undefined) return relayVar; - return returnVal; - } - /** - * runEvent is the core of Pokemon Showdown's event system. - * - * Basic usage - * =========== - * - * this.runEvent('Blah') - * will trigger any onBlah global event handlers. - * - * this.runEvent('Blah', target) - * will additionally trigger any onBlah handlers on the target, onAllyBlah - * handlers on any active pokemon on the target's team, and onFoeBlah - * handlers on any active pokemon on the target's foe's team - * - * this.runEvent('Blah', target, source) - * will additionally trigger any onSourceBlah handlers on the source - * - * this.runEvent('Blah', target, source, effect) - * will additionally pass the effect onto all event handlers triggered - * - * this.runEvent('Blah', target, source, effect, relayVar) - * will additionally pass the relayVar as the first argument along all event - * handlers - * - * You may leave any of these null. For instance, if you have a relayVar but - * no source or effect: - * this.runEvent('Damage', target, null, null, 50) - * - * Event handlers - * ============== - * - * Items, abilities, statuses, and other effects like SR, confusion, weather, - * or Trick Room can have event handlers. Event handlers are functions that - * can modify what happens during an event. - * - * event handlers are passed: - * function (target, source, effect) - * although some of these can be blank. - * - * certain events have a relay variable, in which case they're passed: - * function (relayVar, target, source, effect) - * - * Relay variables are variables that give additional information about the - * event. For instance, the damage event has a relayVar which is the amount - * of damage dealt. - * - * If a relay variable isn't passed to runEvent, there will still be a secret - * relayVar defaulting to `true`, but it won't get passed to any event - * handlers. - * - * After an event handler is run, its return value helps determine what - * happens next: - * 1. If the return value isn't `undefined`, relayVar is set to the return - * value - * 2. If relayVar is falsy, no more event handlers are run - * 3. Otherwise, if there are more event handlers, the next one is run and - * we go back to step 1. - * 4. Once all event handlers are run (or one of them results in a falsy - * relayVar), relayVar is returned by runEvent - * - * As a shortcut, an event handler that isn't a function will be interpreted - * as a function that returns that value. - * - * You can have return values mean whatever you like, but in general, we - * follow the convention that returning `false` or `null` means - * stopping or interrupting the event. - * - * For instance, returning `false` from a TrySetStatus handler means that - * the pokemon doesn't get statused. - * - * If a failed event usually results in a message like "But it failed!" - * or "It had no effect!", returning `null` will suppress that message and - * returning `false` will display it. Returning `null` is useful if your - * event handler already gave its own custom failure message. - * - * Returning `undefined` means "don't change anything" or "keep going". - * A function that does nothing but return `undefined` is the equivalent - * of not having an event handler at all. - * - * Returning a value means that that value is the new `relayVar`. For - * instance, if a Damage event handler returns 50, the damage event - * will deal 50 damage instead of whatever it was going to deal before. - * - * Useful values - * ============= - * - * In addition to all the methods and attributes of Dex, Battle, and - * Scripts, event handlers have some additional values they can access: - * - * this.effect: - * the Effect having the event handler - * this.effectData: - * the data store associated with the above Effect. This is a plain Object - * and you can use it to store data for later event handlers. - * this.effectData.target: - * the Pokemon, Side, or Battle that the event handler's effect was - * attached to. - * this.event.id: - * the event ID - * this.event.target, this.event.source, this.event.effect: - * the target, source, and effect of the event. These are the same - * variables that are passed as arguments to the event handler, but - * they're useful for functions called by the event handler. - */ - runEvent(eventid, target, source, effect, relayVar, onEffect, fastExit) { - // if (Battle.eventCounter) { - // if (!Battle.eventCounter[eventid]) Battle.eventCounter[eventid] = 0; - // Battle.eventCounter[eventid]++; - // } - if (this.eventDepth >= 8) { - // oh fuck - this.add('message', 'STACK LIMIT EXCEEDED'); - this.add('message', 'PLEASE REPORT IN BUG THREAD'); - this.add('message', 'Event: ' + eventid); - this.add('message', 'Parent event: ' + this.event.id); - throw new Error("Stack overflow"); - } - if (!target) target = this; - let statuses = this.getRelevantEffects(target, 'on' + eventid, 'onSource' + eventid, source); - if (fastExit) { - statuses.sort(Battle.compareRedirectOrder); - } else { - statuses.sort(Battle.comparePriority); - } - let hasRelayVar = true; - effect = this.getEffect(effect); - let args = [target, source, effect]; - //console.log('Event: ' + eventid + ' (depth ' + this.eventDepth + ') t:' + target.id + ' s:' + (!source || source.id) + ' e:' + effect.id); - if (relayVar === undefined || relayVar === null) { - relayVar = true; - hasRelayVar = false; - } else { - args.unshift(relayVar); - } - - let parentEvent = this.event; - this.event = {id: eventid, target: target, source: source, effect: effect, modifier: 1}; - this.eventDepth++; - - if (onEffect && 'on' + eventid in effect) { - statuses.unshift({status: effect, callback: effect['on' + eventid], statusData: {}, end: null, thing: target}); - } - for (let i = 0; i < statuses.length; i++) { - let status = statuses[i].status; - let thing = statuses[i].thing; - //this.debug('match ' + eventid + ': ' + status.id + ' ' + status.effectType); - if (status.effectType === 'Status' && thing.status !== status.id) { - // it's changed; call it off - continue; - } - if (status.effectType === 'Ability' && !status.isUnbreakable && this.suppressingAttackEvents() && this.activePokemon !== thing) { - // ignore attacking events - let AttackingEvents = { - BeforeMove: 1, - BasePower: 1, - Immunity: 1, - RedirectTarget: 1, - Heal: 1, - SetStatus: 1, - CriticalHit: 1, - ModifyAtk: 1, ModifyDef: 1, ModifySpA: 1, ModifySpD: 1, ModifySpe: 1, ModifyAccuracy: 1, - ModifyBoost: 1, - ModifyDamage: 1, - ModifySecondaries: 1, - ModifyWeight: 1, - TryAddVolatile: 1, - TryHit: 1, - TryHitSide: 1, - TryMove: 1, - Boost: 1, - DragOut: 1, - Effectiveness: 1, - }; - if (eventid in AttackingEvents) { - this.debug(eventid + ' handler suppressed by Mold Breaker'); - continue; - } else if (eventid === 'Damage' && effect && effect.effectType === 'Move') { - this.debug(eventid + ' handler suppressed by Mold Breaker'); - continue; - } - } - if (eventid !== 'Start' && eventid !== 'SwitchIn' && eventid !== 'TakeItem' && status.effectType === 'Item' && (thing instanceof Sim.Pokemon) && thing.ignoringItem()) { - if (eventid !== 'Update') { - this.debug(eventid + ' handler suppressed by Embargo, Klutz or Magic Room'); - } - continue; - } else if (eventid !== 'End' && status.effectType === 'Ability' && (thing instanceof Sim.Pokemon) && thing.ignoringAbility()) { - if (eventid !== 'Update') { - this.debug(eventid + ' handler suppressed by Gastro Acid'); - } - continue; - } - if ((status.effectType === 'Weather' || eventid === 'Weather') && eventid !== 'Residual' && eventid !== 'End' && this.suppressingWeather()) { - this.debug(eventid + ' handler suppressed by Air Lock'); - continue; - } - let returnVal; - if (typeof statuses[i].callback === 'function') { - let parentEffect = this.effect; - let parentEffectData = this.effectData; - this.effect = statuses[i].status; - this.effectData = statuses[i].statusData; - this.effectData.target = thing; - - returnVal = statuses[i].callback.apply(this, args); - - this.effect = parentEffect; - this.effectData = parentEffectData; - } else { - returnVal = statuses[i].callback; - } - - if (returnVal !== undefined) { - relayVar = returnVal; - if (!relayVar || fastExit) break; - if (hasRelayVar) { - args[0] = relayVar; - } - } - } - - this.eventDepth--; - if (this.event.modifier !== 1 && typeof relayVar === 'number') { - // this.debug(eventid + ' modifier: 0x' + ('0000' + (this.event.modifier * 4096).toString(16)).slice(-4).toUpperCase()); - relayVar = this.modify(relayVar, this.event.modifier); - } - this.event = parentEvent; - - return relayVar; - } - /** - * priorityEvent works just like runEvent, except it exits and returns - * on the first non-undefined value instead of only on null/false. - */ - priorityEvent(eventid, target, source, effect, relayVar, onEffect) { - return this.runEvent(eventid, target, source, effect, relayVar, onEffect, true); - } - resolveLastPriority(statuses, callbackType) { - let order = false; - let priority = 0; - let subOrder = 0; - let status = statuses[statuses.length - 1]; - if (status.status[callbackType + 'Order']) { - order = status.status[callbackType + 'Order']; - } - if (status.status[callbackType + 'Priority']) { - priority = status.status[callbackType + 'Priority']; - } else if (status.status[callbackType + 'SubOrder']) { - subOrder = status.status[callbackType + 'SubOrder']; - } - - status.order = order; - status.priority = priority; - status.subOrder = subOrder; - if (status.thing && status.thing.getStat) status.speed = status.thing.speed; - } - // bubbles up to parents - getRelevantEffects(thing, callbackType, foeCallbackType, foeThing) { - let statuses = this.getRelevantEffectsInner(thing, callbackType, foeCallbackType, foeThing, true, false); - //if (statuses[0]) this.debug('match ' + callbackType + ': ' + statuses[0].status.id); - return statuses; - } - getRelevantEffectsInner(thing, callbackType, foeCallbackType, foeThing, bubbleUp, bubbleDown, getAll) { - if (!callbackType || !thing) return []; - let statuses = []; - let status; - - if (thing.sides) { - for (let i in this.pseudoWeather) { - status = this.getPseudoWeather(i); - if (status[callbackType] !== undefined || (getAll && thing.pseudoWeather[i][getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: this.pseudoWeather[i], end: this.removePseudoWeather, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - } - status = this.getWeather(); - if (status[callbackType] !== undefined || (getAll && thing.weatherData[getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: this.weatherData, end: this.clearWeather, thing: thing, priority: status[callbackType + 'Priority'] || 0}); - this.resolveLastPriority(statuses, callbackType); - } - status = this.getTerrain(); - if (status[callbackType] !== undefined || (getAll && thing.terrainData[getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: this.terrainData, end: this.clearTerrain, thing: thing, priority: status[callbackType + 'Priority'] || 0}); - this.resolveLastPriority(statuses, callbackType); - } - status = this.getFormat(); - if (status[callbackType] !== undefined || (getAll && thing.formatData[getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: this.formatData, end: function () {}, thing: thing, priority: status[callbackType + 'Priority'] || 0}); - this.resolveLastPriority(statuses, callbackType); - } - if (this.events && this.events[callbackType] !== undefined) { - for (let i = 0; i < this.events[callbackType].length; i++) { - let handler = this.events[callbackType][i]; - let statusData; - switch (handler.target.effectType) { - case 'Format': - statusData = this.formatData; - } - statuses.push({status: handler.target, callback: handler.callback, statusData: statusData, end: function () {}, thing: thing, priority: handler.priority, order: handler.order, subOrder: handler.subOrder}); - } - } - if (bubbleDown) { - statuses = statuses.concat(this.getRelevantEffectsInner(this.p1, callbackType, null, null, false, true, getAll)); - statuses = statuses.concat(this.getRelevantEffectsInner(this.p2, callbackType, null, null, false, true, getAll)); - } - return statuses; - } - - if (thing.pokemon) { - for (let i in thing.sideConditions) { - status = thing.getSideCondition(i); - if (status[callbackType] !== undefined || (getAll && thing.sideConditions[i][getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: thing.sideConditions[i], end: thing.removeSideCondition, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - } - if (foeCallbackType) { - statuses = statuses.concat(this.getRelevantEffectsInner(thing.foe, foeCallbackType, null, null, false, false, getAll)); - if (foeCallbackType.substr(0, 5) === 'onFoe') { - let eventName = foeCallbackType.substr(5); - statuses = statuses.concat(this.getRelevantEffectsInner(thing.foe, 'onAny' + eventName, null, null, false, false, getAll)); - statuses = statuses.concat(this.getRelevantEffectsInner(thing, 'onAny' + eventName, null, null, false, false, getAll)); - } - } - if (bubbleUp) { - statuses = statuses.concat(this.getRelevantEffectsInner(this, callbackType, null, null, true, false, getAll)); - } - if (bubbleDown) { - for (let i = 0; i < thing.active.length; i++) { - statuses = statuses.concat(this.getRelevantEffectsInner(thing.active[i], callbackType, null, null, false, true, getAll)); - } - } - return statuses; - } - - if (!thing.getStatus) { - //this.debug(JSON.stringify(thing)); - return statuses; - } - status = thing.getStatus(); - if (status[callbackType] !== undefined || (getAll && thing.statusData[getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: thing.statusData, end: thing.clearStatus, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - for (let i in thing.volatiles) { - status = thing.getVolatile(i); - if (status[callbackType] !== undefined || (getAll && thing.volatiles[i][getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: thing.volatiles[i], end: thing.removeVolatile, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - } - status = thing.getAbility(); - if (status[callbackType] !== undefined || (getAll && thing.abilityData[getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: thing.abilityData, end: thing.clearAbility, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - status = thing.getItem(); - if (status[callbackType] !== undefined || (getAll && thing.itemData[getAll])) { - statuses.push({status: status, callback: status[callbackType], statusData: thing.itemData, end: thing.clearItem, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - status = this.getEffect(thing.template.baseSpecies); - if (status[callbackType] !== undefined) { - statuses.push({status: status, callback: status[callbackType], statusData: thing.speciesData, end: function () {}, thing: thing}); - this.resolveLastPriority(statuses, callbackType); - } - - if (foeThing && foeCallbackType && foeCallbackType.substr(0, 8) !== 'onSource') { - statuses = statuses.concat(this.getRelevantEffectsInner(foeThing, foeCallbackType, null, null, false, false, getAll)); - } else if (foeCallbackType) { - let foeActive = thing.side.foe.active; - let allyActive = thing.side.active; - let eventName = ''; - if (foeCallbackType.substr(0, 8) === 'onSource') { - eventName = foeCallbackType.substr(8); - if (foeThing) { - statuses = statuses.concat(this.getRelevantEffectsInner(foeThing, foeCallbackType, null, null, false, false, getAll)); - } - foeCallbackType = 'onFoe' + eventName; - foeThing = null; - } - if (foeCallbackType.substr(0, 5) === 'onFoe') { - eventName = foeCallbackType.substr(5); - for (let i = 0; i < allyActive.length; i++) { - if (!allyActive[i] || allyActive[i].fainted) continue; - statuses = statuses.concat(this.getRelevantEffectsInner(allyActive[i], 'onAlly' + eventName, null, null, false, false, getAll)); - statuses = statuses.concat(this.getRelevantEffectsInner(allyActive[i], 'onAny' + eventName, null, null, false, false, getAll)); - } - for (let i = 0; i < foeActive.length; i++) { - if (!foeActive[i] || foeActive[i].fainted) continue; - statuses = statuses.concat(this.getRelevantEffectsInner(foeActive[i], 'onAny' + eventName, null, null, false, false, getAll)); - } - } - for (let i = 0; i < foeActive.length; i++) { - if (!foeActive[i] || foeActive[i].fainted) continue; - statuses = statuses.concat(this.getRelevantEffectsInner(foeActive[i], foeCallbackType, null, null, false, false, getAll)); - } - } - if (bubbleUp) { - statuses = statuses.concat(this.getRelevantEffectsInner(thing.side, callbackType, foeCallbackType, null, true, false, getAll)); - } - return statuses; - } - /** - * Use this function to attach custom event handlers to a battle. See Battle#runEvent for - * more information on how to write callbacks for event handlers. - * - * Try to use this sparingly. Most event handlers can be simply placed in a format instead. - * - * this.onEvent(eventid, target, callback) - * will set the callback as an event handler for the target when eventid is called with the - * default priority. Currently only valid formats are supported as targets but this will - * eventually be expanded to support other target types. - * - * this.onEvent(eventid, target, priority, callback) - * will set the callback as an event handler for the target when eventid is called with the - * provided priority. Priority can either be a number or an object that contains the priority, - * order, and subOrder for the evend handler as needed (undefined keys will use default values) - */ - onEvent(eventid, target, ...rest) { // rest = [priority, callback] - if (!eventid) throw new TypeError("Event handlers must have an event to listen to"); - if (!target) throw new TypeError("Event handlers must have a target"); - if (!rest.length) throw new TypeError("Event handlers must have a callback"); - - if (target.effectType !== 'Format') { - throw new TypeError(`${target.name} is a ${target.effectType} but only Format targets are supported right now`); - } - - let callback, priority, order, subOrder, data; - if (rest.length === 1) { - [callback] = rest; - priority = 0; - order = false; - subOrder = 0; - } else { - [data, callback] = rest; - if (typeof data === 'object') { - priority = data['priority'] || 0; - order = data['order'] || false; - subOrder = data['subOrder'] || 0; - } else { - priority = data || 0; - order = false; - subOrder = 0; - } - } - - let eventHandler = {callback, target, priority, order, subOrder}; - - let callbackType = `on${eventid}`; - if (!this.events) this.events = {}; - if (this.events[callbackType] === undefined) { - this.events[callbackType] = [eventHandler]; - } else { - this.events[callbackType].push(eventHandler); - } - } - getPokemon(id) { - if (typeof id !== 'string') id = id.id; - for (let i = 0; i < this.p1.pokemon.length; i++) { - let pokemon = this.p1.pokemon[i]; - if (pokemon.id === id) return pokemon; - } - for (let i = 0; i < this.p2.pokemon.length; i++) { - let pokemon = this.p2.pokemon[i]; - if (pokemon.id === id) return pokemon; - } - return null; - } - makeRequest(type) { - if (type) { - this.currentRequest = type; - this.p1.clearChoice(); - this.p2.clearChoice(); - } else { - type = this.currentRequest; - } - - // default to no request - /** @type {any} */ - let p1request = null; - /** @type {any} */ - let p2request = null; - this.p1.currentRequest = ''; - this.p2.currentRequest = ''; - let switchTable = []; - - switch (type) { - case 'switch': { - for (let i = 0, l = this.p1.active.length; i < l; i++) { - let active = this.p1.active[i]; - switchTable.push(!!(active && active.switchFlag)); - } - if (switchTable.some(flag => flag === true)) { - this.p1.currentRequest = 'switch'; - p1request = {forceSwitch: switchTable, side: this.p1.getData()}; - } - switchTable = []; - for (let i = 0, l = this.p2.active.length; i < l; i++) { - let active = this.p2.active[i]; - switchTable.push(!!(active && active.switchFlag)); - } - if (switchTable.some(flag => flag === true)) { - this.p2.currentRequest = 'switch'; - p2request = {forceSwitch: switchTable, side: this.p2.getData()}; - } - break; - } - - case 'teampreview': - let maxTeamSize = 6; - let teamLengthData = this.getFormat().teamLength; - if (teamLengthData && teamLengthData.battle) maxTeamSize = teamLengthData.battle; - this.p1.maxTeamSize = maxTeamSize; - this.p2.maxTeamSize = maxTeamSize; - this.add('teampreview' + (maxTeamSize !== 6 ? '|' + maxTeamSize : '')); - this.p1.currentRequest = 'teampreview'; - p1request = {teamPreview: true, maxTeamSize: maxTeamSize, side: this.p1.getData()}; - this.p2.currentRequest = 'teampreview'; - p2request = {teamPreview: true, maxTeamSize: maxTeamSize, side: this.p2.getData()}; - break; - - default: { - this.p1.currentRequest = 'move'; - let activeData = this.p1.active.map(pokemon => pokemon && pokemon.getRequestData()); - p1request = {active: activeData, side: this.p1.getData()}; - - this.p2.currentRequest = 'move'; - activeData = this.p2.active.map(pokemon => pokemon && pokemon.getRequestData()); - p2request = {active: activeData, side: this.p2.getData()}; - break; - } - } - - if (p1request) { - if (!this.supportCancel || !p2request) p1request.noCancel = true; - this.p1.emitRequest(p1request); - } else { - this.p1.emitRequest({wait: true, side: this.p1.getData()}); - } - - if (p2request) { - if (!this.supportCancel || !p1request) p2request.noCancel = true; - this.p2.emitRequest(p2request); - } else { - this.p2.emitRequest({wait: true, side: this.p2.getData()}); - } - - if (this.p1.isChoiceDone() && this.p2.isChoiceDone()) { - throw new Error(`Choices are done immediately after a request`); - } - } - tie() { - this.win(); - } - win(side) { - if (this.ended) { - return false; - } - if (side === 'p1' || side === 'p2') { - side = this[side]; - } else if (side !== this.p1 && side !== this.p2) { - side = null; - } - this.winner = side ? side.name : ''; - - this.add(''); - if (side) { - this.add('win', side.name); - } else { - this.add('tie'); - } - this.ended = true; - this.active = false; - this.currentRequest = ''; - for (let side of this.sides) { - side.currentRequest = ''; - } - return true; - } - switchIn(pokemon, pos) { - if (!pokemon || pokemon.isActive) return false; - if (!pos) pos = 0; - let side = pokemon.side; - if (pos >= side.active.length) { - throw new Error("Invalid switch position"); - } - if (side.active[pos]) { - let oldActive = side.active[pos]; - if (this.cancelMove(oldActive)) { - for (let i = 0; i < side.foe.active.length; i++) { - if (side.foe.active[i].isStale >= 2) { - oldActive.isStaleCon++; - oldActive.isStaleSource = 'drag'; - break; - } - } - } - if (oldActive.switchCopyFlag === 'copyvolatile') { - delete oldActive.switchCopyFlag; - pokemon.copyVolatileFrom(oldActive); - } - } - pokemon.isActive = true; - this.runEvent('BeforeSwitchIn', pokemon); - if (side.active[pos]) { - let oldActive = side.active[pos]; - oldActive.isActive = false; - oldActive.isStarted = false; - oldActive.usedItemThisTurn = false; - oldActive.position = pokemon.position; - pokemon.position = pos; - side.pokemon[pokemon.position] = pokemon; - side.pokemon[oldActive.position] = oldActive; - this.cancelMove(oldActive); - oldActive.clearVolatile(); - } - side.active[pos] = pokemon; - pokemon.activeTurns = 0; - for (let m in pokemon.moveset) { - pokemon.moveset[m].used = false; - } - this.add('switch', pokemon, pokemon.getDetails); - this.insertQueue({pokemon: pokemon, choice: 'runUnnerve'}); - this.insertQueue({pokemon: pokemon, choice: 'runSwitch'}); - } - canSwitch(side) { - let canSwitchIn = []; - for (let i = side.active.length; i < side.pokemon.length; i++) { - let pokemon = side.pokemon[i]; - if (!pokemon.fainted) { - canSwitchIn.push(pokemon); - } - } - return canSwitchIn.length; - } - getRandomSwitchable(side) { - let canSwitchIn = []; - for (let i = side.active.length; i < side.pokemon.length; i++) { - let pokemon = side.pokemon[i]; - if (!pokemon.fainted) { - canSwitchIn.push(pokemon); - } - } - if (!canSwitchIn.length) { - return null; - } - return canSwitchIn[this.random(canSwitchIn.length)]; - } - dragIn(side, pos) { - if (pos >= side.active.length) return false; - let pokemon = this.getRandomSwitchable(side); - if (!pos) pos = 0; - if (!pokemon || pokemon.isActive) return false; - this.runEvent('BeforeSwitchIn', pokemon); - if (side.active[pos]) { - let oldActive = side.active[pos]; - if (!oldActive.hp) { - return false; - } - if (!this.runEvent('DragOut', oldActive)) { - return false; - } - this.runEvent('SwitchOut', oldActive); - oldActive.illusion = null; - this.singleEvent('End', this.getAbility(oldActive.ability), oldActive.abilityData, oldActive); - oldActive.isActive = false; - oldActive.isStarted = false; - oldActive.usedItemThisTurn = false; - oldActive.position = pokemon.position; - pokemon.position = pos; - side.pokemon[pokemon.position] = pokemon; - side.pokemon[oldActive.position] = oldActive; - if (this.cancelMove(oldActive)) { - for (let i = 0; i < side.foe.active.length; i++) { - if (side.foe.active[i].isStale >= 2) { - oldActive.isStaleCon++; - oldActive.isStaleSource = 'drag'; - break; - } - } - } - oldActive.clearVolatile(); - } - side.active[pos] = pokemon; - pokemon.isActive = true; - pokemon.activeTurns = 0; - if (this.gen === 2) pokemon.draggedIn = this.turn; - for (let m in pokemon.moveset) { - pokemon.moveset[m].used = false; - } - this.add('drag', pokemon, pokemon.getDetails); - if (this.gen >= 5) { - this.singleEvent('PreStart', pokemon.getAbility(), pokemon.abilityData, pokemon); - this.runEvent('SwitchIn', pokemon); - if (!pokemon.hp) return true; - pokemon.isStarted = true; - if (!pokemon.fainted) { - this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityData, pokemon); - this.singleEvent('Start', pokemon.getItem(), pokemon.itemData, pokemon); - } - } else { - this.insertQueue({pokemon: pokemon, choice: 'runSwitch'}); - } - return true; - } - swapPosition(pokemon, slot, attributes) { - if (slot >= pokemon.side.active.length) { - throw new Error("Invalid swap position"); - } - let target = pokemon.side.active[slot]; - if (slot !== 1 && (!target || target.fainted)) return false; - - this.add('swap', pokemon, slot, attributes || ''); - - let side = pokemon.side; - side.pokemon[pokemon.position] = target; - side.pokemon[slot] = pokemon; - side.active[pokemon.position] = side.pokemon[pokemon.position]; - side.active[slot] = side.pokemon[slot]; - if (target) target.position = pokemon.position; - pokemon.position = slot; - return true; - } - faint(pokemon, source, effect) { - pokemon.faint(source, effect); - } - nextTurn() { - this.turn++; - let allStale = true; - /** @type {Sim.Pokemon} */ - let oneStale; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - let pokemon = this.sides[i].active[j]; - if (!pokemon) continue; - pokemon.moveThisTurn = ''; - pokemon.usedItemThisTurn = false; - pokemon.newlySwitched = false; - - pokemon.maybeDisabled = false; - for (let entry of pokemon.moveset) { - entry.disabled = false; - entry.disabledSource = ''; - } - this.runEvent('DisableMove', pokemon); - if (!pokemon.ateBerry) pokemon.disableMove('belch'); - - if (pokemon.lastAttackedBy) { - if (pokemon.lastAttackedBy.pokemon.isActive) { - pokemon.lastAttackedBy.thisTurn = false; - } else { - pokemon.lastAttackedBy = null; - } - } - - pokemon.trapped = pokemon.maybeTrapped = false; - this.runEvent('TrapPokemon', pokemon); - if (!pokemon.knownType || this.getImmunity('trapped', pokemon)) { - this.runEvent('MaybeTrapPokemon', pokemon); - } - // Disable the faculty to cancel switches if a foe may have a trapping ability - let foeSide = pokemon.side.foe; - for (let k = 0; k < foeSide.active.length; ++k) { - let source = foeSide.active[k]; - if (!source || source.fainted) continue; - let template = (source.illusion || source).template; - if (!template.abilities) continue; - for (let abilitySlot in template.abilities) { - let abilityName = template.abilities[abilitySlot]; - if (abilityName === source.ability) { - // pokemon event was already run above so we don't need - // to run it again. - continue; - } - const ruleTable = this.getRuleTable(this.getFormat()); - if (!ruleTable.has('-illegal') && !this.getFormat().team) { - // hackmons format - continue; - } else if (abilitySlot === 'H' && template.unreleasedHidden) { - // unreleased hidden ability - continue; - } - let ability = this.getAbility(abilityName); - if (ruleTable.has('-' + ability.id)) continue; - if (pokemon.knownType && !this.getImmunity('trapped', pokemon)) continue; - this.singleEvent('FoeMaybeTrapPokemon', - ability, {}, pokemon, source); - } - } - - if (pokemon.fainted) continue; - if (pokemon.isStale < 2) { - if (pokemon.isStaleCon >= 2) { - if (pokemon.hp >= pokemon.isStaleHP - pokemon.maxhp / 100) { - pokemon.isStale++; - if (this.firstStaleWarned && pokemon.isStale < 2) { - switch (pokemon.isStaleSource) { - case 'struggle': - this.add('html', '
    ' + Chat.escapeHTML(pokemon.name) + ' isn\'t losing HP from Struggle. If this continues, it will be classified as being in an endless loop.
    '); - break; - case 'drag': - this.add('html', '
    ' + Chat.escapeHTML(pokemon.name) + ' isn\'t losing PP or HP from being forced to switch. If this continues, it will be classified as being in an endless loop.
    '); - break; - case 'switch': - this.add('html', '
    ' + Chat.escapeHTML(pokemon.name) + ' isn\'t losing PP or HP from repeatedly switching. If this continues, it will be classified as being in an endless loop.
    '); - break; - } - } - } - pokemon.isStaleCon = 0; - pokemon.isStalePPTurns = 0; - pokemon.isStaleHP = pokemon.hp; - } - if (pokemon.isStalePPTurns >= 5) { - if (pokemon.hp >= pokemon.isStaleHP - pokemon.maxhp / 100) { - pokemon.isStale++; - pokemon.isStaleSource = 'ppstall'; - if (this.firstStaleWarned && pokemon.isStale < 2) { - this.add('html', '
    ' + Chat.escapeHTML(pokemon.name) + ' isn\'t losing PP or HP. If it keeps on not losing PP or HP, it will be classified as being in an endless loop.
    '); - } - } - pokemon.isStaleCon = 0; - pokemon.isStalePPTurns = 0; - pokemon.isStaleHP = pokemon.hp; - } - } - if (pokemon.getMoves().length === 0) { - pokemon.isStaleCon++; - pokemon.isStaleSource = 'struggle'; - } - if (pokemon.isStale < 2) { - allStale = false; - } else if (pokemon.isStale && !pokemon.staleWarned) { - oneStale = pokemon; - } - if (!pokemon.isStalePPTurns) { - pokemon.isStaleHP = pokemon.hp; - if (pokemon.activeTurns) pokemon.isStaleCon = 0; - } - if (pokemon.activeTurns) { - pokemon.isStalePPTurns++; - } - pokemon.activeTurns++; - } - this.sides[i].faintedLastTurn = this.sides[i].faintedThisTurn; - this.sides[i].faintedThisTurn = false; - } - const ruleTable = this.getRuleTable(this.getFormat()); - if (ruleTable.has('endlessbattleclause')) { - if (oneStale) { - let activationWarning = '
    If all active Pokémon go in an endless loop, Endless Battle Clause will activate.'; - if (allStale) activationWarning = ''; - let loopReason = ''; - switch (oneStale.isStaleSource) { - case 'struggle': - loopReason = ": it isn't losing HP from Struggle"; - break; - case 'drag': - loopReason = ": it isn't losing PP or HP from being forced to switch"; - break; - case 'switch': - loopReason = ": it isn't losing PP or HP from repeatedly switching"; - break; - case 'getleppa': - loopReason = ": it got a Leppa Berry it didn't start with"; - break; - case 'useleppa': - loopReason = ": it used a Leppa Berry it didn't start with"; - break; - case 'ppstall': - loopReason = ": it isn't losing PP or HP"; - break; - case 'ppoverflow': - loopReason = ": its PP overflowed"; - break; - } - this.add('html', '
    ' + Chat.escapeHTML(oneStale.name) + ' is in an endless loop' + loopReason + '.' + activationWarning + '
    '); - oneStale.staleWarned = true; - this.firstStaleWarned = true; - } - if (allStale) { - this.add('message', "All active Pok\u00e9mon are in an endless loop. Endless Battle Clause activated!"); - let leppaPokemon = null; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].pokemon.length; j++) { - let pokemon = this.sides[i].pokemon[j]; - if (toId(pokemon.set.item) === 'leppaberry') { - if (leppaPokemon) { - leppaPokemon = null; // both sides have Leppa - this.add('-message', "Both sides started with a Leppa Berry."); - } else { - leppaPokemon = pokemon; - } - break; - } - } - } - if (leppaPokemon) { - this.add('-message', "" + leppaPokemon.side.name + "'s " + leppaPokemon.name + " started with a Leppa Berry and loses."); - this.win(leppaPokemon.side.foe); - return; - } - this.win(); - return; - } - } else { - if (allStale && !this.staleWarned) { - this.staleWarned = true; - this.add('html', '
    If this format had Endless Battle Clause, it would have activated.
    '); - } else if (oneStale) { - this.add('html', '
    ' + Chat.escapeHTML(oneStale.name) + ' is in an endless loop.
    '); - oneStale.staleWarned = true; - } - } - - 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. - let actives = []; - for (let i = 0; i < this.sides.length; i++) { - for (let j = 0; j < this.sides[i].active.length; j++) { - if (!this.sides[i].active[j] || this.sides[i].active[j].fainted) continue; - actives.push(this.sides[i].active[j]); - } - } - if (actives.length > 1 && !this.isAdjacent(actives[0], 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'); - } - start() { - if (this.active) return; - - if (!this.p1 || !this.p2) { - // need two players to start - return; - } - - if (this.started) { - return; - } - this.activeTurns = 0; - this.started = true; - this.p2.foe = this.p1; - this.p1.foe = this.p2; - - this.add('gametype', this.gameType); - this.add('gen', this.gen); - - let format = this.getFormat(); - - this.add('tier', format.name); - if (this.rated) { - this.add('rated'); - } - this.add('seed', side => Battle.logReplay(this.prngSeed.join(','), side)); - - if (format.onBegin) { - format.onBegin.call(this); - } - this.getRuleTable(this.getFormat()).forEach((v, rule) => { - if (rule.startsWith('+') || rule.startsWith('-') || rule.startsWith('!')) return; - if (this.getFormat(rule).exists) this.addPseudoWeather(rule); - }); - - if (!this.p1.pokemon[0] || !this.p2.pokemon[0]) { - throw new Error('Battle not started: A player has an empty team.'); - } - - this.residualEvent('TeamPreview'); - - this.addQueue({choice: 'start'}); - this.midTurn = true; - if (!this.currentRequest) this.go(); - } - 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 || !target.hp) return 0; - if (!target.isActive) return false; - if (this.gen > 5 && !target.side.foe.pokemonLeft) return false; - effect = this.getEffect(effect); - boost = this.runEvent('Boost', target, source, effect, Object.assign({}, boost)); - let success = null; - let boosted = false; - for (let i in boost) { - let currentBoost = {}; - currentBoost[i] = boost[i]; - let boostBy = target.boostBy(currentBoost); - let msg = '-boost'; - if (boost[i] < 0) { - msg = '-unboost'; - boostBy = -boostBy; - } - if (boostBy) { - success = true; - switch (effect.id) { - case 'bellydrum': - this.add('-setboost', target, 'atk', target.boosts['atk'], '[from] move: Belly Drum'); - break; - case 'bellydrum2': - this.add(msg, target, i, boostBy, '[silent]'); - this.add('-hint', "In Gen 2, Belly Drum boosts by 2 when it fails."); - break; - case 'intimidate': case 'gooey': case 'tanglinghair': - this.add(msg, target, i, boostBy); - break; - case 'zpower': - this.add(msg, target, i, boostBy, '[zeffect]'); - break; - default: - if (effect.effectType === 'Move') { - this.add(msg, target, i, boostBy); - } else { - if (effect.effectType === 'Ability' && !boosted) { - this.add('-ability', target, effect.name, 'boost'); - boosted = true; - } - this.add(msg, target, i, boostBy); - } - break; - } - this.runEvent('AfterEachBoost', target, source, effect, currentBoost); - } else if (effect.effectType === 'Ability') { - if (isSecondary) this.add(msg, target, i, boostBy); - } else if (!isSecondary && !isSelf) { - this.add(msg, target, i, boostBy); - } - } - this.runEvent('AfterBoost', target, source, effect, boost); - return success; - } - damage(damage, target, source, effect, instafaint) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - if (!target.isActive) return false; - effect = this.getEffect(effect); - if (!(damage || damage === 0)) return damage; - if (damage !== 0) damage = this.clampIntRange(damage, 1); - - if (effect.id !== 'struggle-recoil') { // Struggle recoil is not affected by effects - if (effect.effectType === 'Weather' && !target.runStatusImmunity(effect.id)) { - this.debug('weather immunity'); - return 0; - } - damage = this.runEvent('Damage', target, source, effect, damage); - if (!(damage || damage === 0)) { - this.debug('damage event failed'); - return damage; - } - } - if (damage !== 0) damage = this.clampIntRange(damage, 1); - damage = target.damage(damage, source, effect); - if (source) source.lastDamage = damage; - let name = effect.fullname; - if (name === 'tox') name = 'psn'; - switch (effect.id) { - case 'partiallytrapped': - this.add('-damage', target, target.getHealth, '[from] ' + this.effectData.sourceEffect.fullname, '[partiallytrapped]'); - break; - case 'powder': - this.add('-damage', target, target.getHealth, '[silent]'); - break; - case 'confused': - this.add('-damage', target, target.getHealth, '[from] confusion'); - break; - default: - if (effect.effectType === 'Move' || !name) { - this.add('-damage', target, target.getHealth); - } else if (source && (source !== target || effect.effectType === 'Ability')) { - this.add('-damage', target, target.getHealth, '[from] ' + name, '[of] ' + source); - } else { - this.add('-damage', target, target.getHealth, '[from] ' + name); - } - break; - } - - if (effect.drain && source) { - this.heal(Math.ceil(damage * effect.drain[0] / effect.drain[1]), source, target, 'drain'); - } - - if (!effect.flags) effect.flags = {}; - - if (instafaint && !target.hp) { - this.debug('instafaint: ' + this.faintQueue.map(entry => entry.target).map(pokemon => pokemon.name)); - this.faintMessages(true); - } else { - damage = this.runEvent('AfterDamage', target, source, effect, damage); - } - - return damage; - } - directDamage(damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - if (!target || !target.hp) return 0; - if (!damage) return 0; - damage = this.clampIntRange(damage, 1); - - damage = target.damage(damage, source, effect); - switch (effect.id) { - case 'strugglerecoil': - this.add('-damage', target, target.getHealth, '[from] recoil'); - break; - case 'confusion': - this.add('-damage', target, target.getHealth, '[from] confusion'); - break; - default: - this.add('-damage', target, target.getHealth); - break; - } - if (target.fainted) this.faint(target); - return damage; - } - heal(damage, target, source, effect) { - if (this.event) { - if (!target) target = this.event.target; - if (!source) source = this.event.source; - if (!effect) effect = this.effect; - } - effect = this.getEffect(effect); - if (damage && damage <= 1) damage = 1; - damage = Math.floor(damage); - // for things like Liquid Ooze, the Heal event still happens when nothing is healed. - damage = this.runEvent('TryHeal', target, source, effect, damage); - if (!damage) return 0; - if (!target || !target.hp) return 0; - if (!target.isActive) return false; - if (target.hp >= target.maxhp) return 0; - damage = target.heal(damage, source, effect); - switch (effect.id) { - case 'leechseed': - case 'rest': - this.add('-heal', target, target.getHealth, '[silent]'); - break; - case 'drain': - this.add('-heal', target, target.getHealth, '[from] drain', '[of] ' + source); - break; - case 'wish': - break; - case 'zpower': - this.add('-heal', target, target.getHealth, '[zeffect]'); - break; - default: - if (effect.effectType === 'Move') { - this.add('-heal', target, target.getHealth); - } else if (source && source !== target) { - this.add('-heal', target, target.getHealth, '[from] ' + effect.fullname, '[of] ' + source); - } else { - this.add('-heal', target, target.getHealth, '[from] ' + effect.fullname); - } - break; - } - this.runEvent('Heal', target, source, effect, damage); - return damage; - } - chain(previousMod, nextMod) { - // previousMod or nextMod can be either a number or an array [numerator, denominator] - if (previousMod.length) { - previousMod = Math.floor(previousMod[0] * 4096 / previousMod[1]); - } else { - previousMod = Math.floor(previousMod * 4096); - } - - if (nextMod.length) { - nextMod = Math.floor(nextMod[0] * 4096 / nextMod[1]); - } else { - nextMod = Math.floor(nextMod * 4096); - } - return ((previousMod * nextMod + 2048) >> 12) / 4096; // M'' = ((M * M') + 0x800) >> 12 - } - chainModify(numerator, denominator) { - let previousMod = Math.floor(this.event.modifier * 4096); - - if (numerator.length) { - denominator = numerator[1]; - numerator = numerator[0]; - } - let nextMod = 0; - if (this.event.ceilModifier) { - nextMod = Math.ceil(numerator * 4096 / (denominator || 1)); - } else { - nextMod = Math.floor(numerator * 4096 / (denominator || 1)); - } - - this.event.modifier = ((previousMod * nextMod + 2048) >> 12) / 4096; - } - modify(value, numerator, denominator) { - // You can also use: - // modify(value, [numerator, denominator]) - // modify(value, fraction) - assuming you trust JavaScript's floating-point handler - if (!denominator) denominator = 1; - if (numerator && numerator.length) { - denominator = numerator[1]; - numerator = numerator[0]; - } - let modifier = Math.floor(numerator * 4096 / denominator); - return Math.floor((value * modifier + 2048 - 1) / 4096); - } - getCategory(move) { - move = this.getMove(move); - return move.category || 'Physical'; - } - getDamage(pokemon, target, move, suppressMessages) { - if (typeof move === 'string') move = this.getMove(move); - - if (typeof move === 'number') { - move = { - basePower: move, - type: '???', - category: 'Physical', - willCrit: false, - flags: {}, - }; - } - - 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, pokemon, target); - } - if (move.damage === 'level') { - return pokemon.level; - } - if (move.damage) { - return move.damage; - } - - if (!move) { - move = {}; - } - - let category = this.getCategory(move); - let defensiveCategory = move.defensiveCategory || category; - - let basePower = move.basePower; - if (move.basePowerCallback) { - basePower = move.basePowerCallback.call(this, pokemon, target, move); - } - if (!basePower) { - if (basePower === 0) return; // returning undefined means not dealing damage - return basePower; - } - basePower = this.clampIntRange(basePower, 1); - - let critMult; - let critRatio = this.runEvent('ModifyCritRatio', pokemon, target, move, move.critRatio || 0); - if (this.gen <= 5) { - critRatio = this.clampIntRange(critRatio, 0, 5); - critMult = [0, 16, 8, 4, 3, 2]; - } else { - critRatio = this.clampIntRange(critRatio, 0, 4); - critMult = [0, 16, 8, 2, 1]; - } - - move.crit = move.willCrit || false; - if (move.willCrit === undefined) { - if (critRatio) { - move.crit = (this.random(critMult[critRatio]) === 0); - } - } - - if (move.crit) { - move.crit = this.runEvent('CriticalHit', target, null, move); - } - - // happens after crit calculation - basePower = this.runEvent('BasePower', pokemon, target, move, basePower, true); - - if (!basePower) return 0; - basePower = this.clampIntRange(basePower, 1); - - let level = pokemon.level; - - let attacker = pokemon; - let defender = target; - let attackStat = category === 'Physical' ? 'atk' : 'spa'; - let defenseStat = defensiveCategory === 'Physical' ? 'def' : 'spd'; - let statTable = {atk:'Atk', def:'Def', spa:'SpA', spd:'SpD', spe:'Spe'}; - let attack; - let defense; - - let atkBoosts = move.useTargetOffensive ? defender.boosts[attackStat] : attacker.boosts[attackStat]; - let defBoosts = move.useSourceDefensive ? attacker.boosts[defenseStat] : defender.boosts[defenseStat]; - - let ignoreNegativeOffensive = !!move.ignoreNegativeOffensive; - let ignorePositiveDefensive = !!move.ignorePositiveDefensive; - - if (move.crit) { - ignoreNegativeOffensive = true; - ignorePositiveDefensive = true; - } - let ignoreOffensive = !!(move.ignoreOffensive || (ignoreNegativeOffensive && atkBoosts < 0)); - let ignoreDefensive = !!(move.ignoreDefensive || (ignorePositiveDefensive && defBoosts > 0)); - - if (ignoreOffensive) { - this.debug('Negating (sp)atk boost/penalty.'); - atkBoosts = 0; - } - if (ignoreDefensive) { - this.debug('Negating (sp)def boost/penalty.'); - defBoosts = 0; - } - - if (move.useTargetOffensive) { - attack = defender.calculateStat(attackStat, atkBoosts); - } else { - attack = attacker.calculateStat(attackStat, atkBoosts); - } - - if (move.useSourceDefensive) { - defense = attacker.calculateStat(defenseStat, defBoosts); - } else { - defense = defender.calculateStat(defenseStat, defBoosts); - } - - // Apply Stat Modifiers - attack = this.runEvent('Modify' + statTable[attackStat], attacker, defender, move, attack); - defense = this.runEvent('Modify' + statTable[defenseStat], defender, attacker, move, defense); - - //int(int(int(2 * L / 5 + 2) * A * P / D) / 50); - let baseDamage = Math.floor(Math.floor(Math.floor(2 * level / 5 + 2) * basePower * attack / defense) / 50); - - // Calculate damage modifiers separately (order differs between generations) - return this.modifyDamage(baseDamage, pokemon, target, move, suppressMessages); - } - modifyDamage(baseDamage, pokemon, target, move, suppressMessages) { - if (!move.type) move.type = '???'; - let type = move.type; - - baseDamage += 2; - - // multi-target modifier (doubles only) - if (move.spreadHit) { - let spreadModifier = move.spreadModifier || 0.75; - this.debug('Spread modifier: ' + spreadModifier); - baseDamage = this.modify(baseDamage, spreadModifier); - } - - // weather modifier - baseDamage = this.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); - - // crit - if (move.crit) { - baseDamage = this.modify(baseDamage, move.critModifier || (this.gen >= 6 ? 1.5 : 2)); - } - - // this is not a modifier - baseDamage = this.randomizer(baseDamage); - - // STAB - if (move.hasSTAB || 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.modify(baseDamage, move.stab || 1.5); - } - // types - move.typeMod = target.runEffectiveness(move); - - move.typeMod = this.clampIntRange(move.typeMod, -6, 6); - if (move.typeMod > 0) { - if (!suppressMessages) this.add('-supereffective', target); - - for (let i = 0; i < move.typeMod; i++) { - baseDamage *= 2; - } - } - if (move.typeMod < 0) { - if (!suppressMessages) this.add('-resisted', target); - - for (let i = 0; i > move.typeMod; i--) { - baseDamage = Math.floor(baseDamage / 2); - } - } - - if (move.crit && !suppressMessages) this.add('-crit', target); - - if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) { - if (this.gen < 6 || move.id !== 'facade') { - baseDamage = this.modify(baseDamage, 0.5); - } - } - - // Generation 5 sets damage to 1 before the final damage modifiers only - if (this.gen === 5 && !Math.floor(baseDamage)) { - baseDamage = 1; - } - - // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. - baseDamage = this.runEvent('ModifyDamage', pokemon, target, move, baseDamage); - - // TODO: Find out where this actually goes in the damage calculation - if (move.isZ && move.zBrokeProtect) { - baseDamage = this.modify(baseDamage, 0.25); - this.add('-message', target.name + " couldn't fully protect itself and got hurt! (placeholder)"); - } - - if (this.gen !== 5 && !Math.floor(baseDamage)) { - return 1; - } - - return Math.floor(baseDamage); - } - randomizer(baseDamage) { - return Math.floor(baseDamage * (100 - this.random(16)) / 100); - } - /** - * Returns whether a proposed target for a move is valid. - */ - validTargetLoc(targetLoc, source, targetType) { - if (targetLoc === 0) return true; - let numSlots = source.side.active.length; - if (!Math.abs(targetLoc) && Math.abs(targetLoc) > numSlots) return false; - - let sourceLoc = -(source.position + 1); - let isFoe = (targetLoc > 0); - let isAdjacent = (isFoe ? Math.abs(-(numSlots + 1 - targetLoc) - sourceLoc) <= 1 : Math.abs(targetLoc - sourceLoc) === 1); - let isSelf = (sourceLoc === targetLoc); - - switch (targetType) { - case 'randomNormal': - case 'normal': - return isAdjacent; - case 'adjacentAlly': - return isAdjacent && !isFoe; - case 'adjacentAllyOrSelf': - return isAdjacent && !isFoe || isSelf; - case 'adjacentFoe': - return isAdjacent && isFoe; - case 'any': - return !isSelf; - } - return false; - } - getTargetLoc(target, source) { - if (target.side === source.side) { - return -(target.position + 1); - } else { - return target.position + 1; - } - } - validTarget(target, source, targetType) { - return this.validTargetLoc(this.getTargetLoc(target, source), source, targetType); - } - getTarget(pokemon, move, targetLoc) { - move = this.getMove(move); - let target; - if ((move.target !== 'randomNormal') && - this.validTargetLoc(targetLoc, pokemon, move.target)) { - if (targetLoc > 0) { - target = pokemon.side.foe.active[targetLoc - 1]; - } else { - target = pokemon.side.active[-targetLoc - 1]; - } - if (target) { - if (!target.fainted) { - // target exists and is not fainted - return target; - } else if (target.side === pokemon.side) { - // fainted allied targets don't retarget - return false; - } - } - // chosen target not valid, retarget randomly with resolveTarget - } - return this.resolveTarget(pokemon, move); - } - resolveTarget(pokemon, move) { - // A move was used without a chosen target - - // For instance: Metronome chooses Ice Beam. Since the user didn't - // choose a target when choosing Metronome, Ice Beam's target must - // be chosen randomly. - - // The target is chosen randomly from possible targets, EXCEPT that - // moves that can target either allies or foes will only target foes - // when used without an explicit target. - - move = this.getMove(move); - if (move.target === 'adjacentAlly') { - let allyActives = pokemon.side.active; - let adjacentAllies = [allyActives[pokemon.position - 1], allyActives[pokemon.position + 1]]; - adjacentAllies = adjacentAllies.filter(active => active && !active.fainted); - if (adjacentAllies.length) return adjacentAllies[Math.floor(Math.random() * adjacentAllies.length)]; - return pokemon; - } - if (move.target === 'self' || move.target === 'all' || move.target === 'allySide' || move.target === 'allyTeam' || move.target === 'adjacentAllyOrSelf') { - return pokemon; - } - if (pokemon.side.active.length > 2) { - if (move.target === 'adjacentFoe' || move.target === 'normal' || move.target === 'randomNormal') { - let foeActives = pokemon.side.foe.active; - let frontPosition = foeActives.length - 1 - pokemon.position; - let adjacentFoes = foeActives.slice(frontPosition < 1 ? 0 : frontPosition - 1, frontPosition + 2); - adjacentFoes = adjacentFoes.filter(active => active && !active.fainted); - if (adjacentFoes.length) return adjacentFoes[Math.floor(Math.random() * adjacentFoes.length)]; - // no valid target at all, return a foe for any possible redirection - } - } - return pokemon.side.foe.randomActive() || pokemon.side.foe.active[0]; - } - checkFainted() { - for (let i = 0; i < this.p1.active.length; i++) { - let pokemon = this.p1.active[i]; - if (pokemon.fainted) { - pokemon.status = 'fnt'; - pokemon.switchFlag = true; - } - } - for (let i = 0; i < this.p2.active.length; i++) { - let pokemon = this.p2.active[i]; - if (pokemon.fainted) { - pokemon.status = 'fnt'; - pokemon.switchFlag = true; - } - } - } - faintMessages(lastFirst) { - if (this.ended) return; - if (!this.faintQueue.length) return false; - if (lastFirst) { - this.faintQueue.unshift(this.faintQueue.pop()); - } - let faintData; - while (this.faintQueue.length) { - faintData = this.faintQueue.shift(); - if (!faintData.target.fainted) { - this.runEvent('BeforeFaint', faintData.target, faintData.source, faintData.effect); - this.add('faint', faintData.target); - faintData.target.side.pokemonLeft--; - this.runEvent('Faint', faintData.target, faintData.source, faintData.effect); - this.singleEvent('End', this.getAbility(faintData.target.ability), faintData.target.abilityData, faintData.target); - faintData.target.fainted = true; - faintData.target.isActive = false; - faintData.target.isStarted = false; - faintData.target.side.faintedThisTurn = true; - } - } - - if (this.gen <= 1) { - // in gen 1, fainting skips the rest of the turn, including residuals - this.queue = []; - } else if (this.gen <= 3 && this.gameType === 'singles') { - // in gen 3 or earlier, fainting in singles skips to residuals - for (let i = 0; i < this.p1.active.length; i++) { - this.cancelMove(this.p1.active[i]); - // Stop Pursuit from running - this.p1.active[i].moveThisTurn = true; - } - for (let i = 0; i < this.p2.active.length; i++) { - this.cancelMove(this.p2.active[i]); - // Stop Pursuit from running - this.p2.active[i].moveThisTurn = true; - } - } - - if (!this.p1.pokemonLeft && !this.p2.pokemonLeft) { - this.win(faintData && faintData.target.side); - return true; - } - if (!this.p1.pokemonLeft) { - this.win(this.p2); - return true; - } - if (!this.p2.pokemonLeft) { - this.win(this.p1); - return true; - } - return false; - } - resolvePriority(decision, midTurn) { - if (!decision) return; - - if (!decision.side && decision.pokemon) decision.side = decision.pokemon.side; - if (!decision.choice && decision.move) decision.choice = 'move'; - if (!decision.priority && decision.priority !== 0) { - let priorities = { - 'beforeTurn': 100, - 'beforeTurnMove': 99, - 'switch': 7, - 'runUnnerve': 7.3, - 'runSwitch': 7.2, - 'runPrimal': 7.1, - 'instaswitch': 101, - 'megaEvo': 6.9, - 'residual': -100, - 'team': 102, - 'start': 101, - }; - if (decision.choice in priorities) { - decision.priority = priorities[decision.choice]; - } - } - if (!midTurn) { - if (decision.choice === 'move') { - if (!decision.zmove && this.getMove(decision.move).beforeTurnCallback) { - this.addQueue({choice: 'beforeTurnMove', pokemon: decision.pokemon, move: decision.move, targetLoc: decision.targetLoc}); - } - if (decision.mega) { - // TODO: Check that the Pokémon is not affected by Sky Drop. - // (This is currently being done in `runMegaEvo`). - this.addQueue({ - choice: 'megaEvo', - pokemon: decision.pokemon, - }); - } - } else if (decision.choice === 'switch' || decision.choice === 'instaswitch') { - if (decision.pokemon.switchFlag && decision.pokemon.switchFlag !== true) { - decision.pokemon.switchCopyFlag = decision.pokemon.switchFlag; - } - decision.pokemon.switchFlag = false; - if (!decision.speed && decision.pokemon && decision.pokemon.isActive) decision.speed = decision.pokemon.getDecisionSpeed(); - } - } - - let deferPriority = this.gen >= 7 && decision.mega && !decision.pokemon.template.isMega; - if (decision.move) { - let target; - - if (!decision.targetLoc) { - target = this.resolveTarget(decision.pokemon, decision.move); - decision.targetLoc = this.getTargetLoc(target, decision.pokemon); - } - - decision.move = this.getMoveCopy(decision.move); - if (!decision.priority && !deferPriority) { - let move = decision.move; - if (decision.zmove) { - let zMoveName = this.getZMove(decision.move, decision.pokemon, true); - let zMove = this.getMove(zMoveName); - if (zMove.exists) { - move = zMove; - } - } - let priority = this.runEvent('ModifyPriority', decision.pokemon, target, move, move.priority); - decision.priority = priority; - // In Gen 6, Quick Guard blocks moves with artificially enhanced priority. - if (this.gen > 5) decision.move.priority = priority; - } - } - if (!decision.pokemon && !decision.speed) decision.speed = 1; - if (!decision.speed && (decision.choice === 'switch' || decision.choice === 'instaswitch') && decision.target) decision.speed = decision.target.getDecisionSpeed(); - if (!decision.speed && !deferPriority) decision.speed = decision.pokemon.getDecisionSpeed(); - } - addQueue(action) { - if (Array.isArray(action)) { - for (let i = 0; i < action.length; i++) { - this.addQueue(action[i]); - } - return; - } - - if (action.choice === 'pass') return; - this.resolvePriority(action); - this.queue.push(action); - } - sortQueue() { - this.queue.sort(Battle.comparePriority); - } - insertQueue(decision, midTurn) { - if (Array.isArray(decision)) { - for (let i = 0; i < decision.length; i++) { - this.insertQueue(decision[i]); - } - return; - } - - if (decision.pokemon) decision.pokemon.updateSpeed(); - this.resolvePriority(decision, midTurn); - for (let i = 0; i < this.queue.length; i++) { - if (Battle.comparePriority(decision, this.queue[i]) < 0) { - this.queue.splice(i, 0, decision); - return; - } - } - this.queue.push(decision); - } - prioritizeQueue(decision, source, sourceEffect) { - if (this.event) { - if (!source) source = this.event.source; - if (!sourceEffect) sourceEffect = this.effect; - } - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i] === decision) { - this.queue.splice(i, 1); - break; - } - } - decision.sourceEffect = sourceEffect; - this.queue.unshift(decision); - } - willAct() { - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i].choice === 'move' || this.queue[i].choice === 'switch' || this.queue[i].choice === 'instaswitch' || this.queue[i].choice === 'shift') { - return this.queue[i]; - } - } - return null; - } - willMove(pokemon) { - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i].choice === 'move' && this.queue[i].pokemon === pokemon) { - return this.queue[i]; - } - } - return null; - } - cancelDecision(pokemon) { - let success = false; - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i].pokemon === pokemon) { - this.queue.splice(i, 1); - i--; - success = true; - } - } - return success; - } - cancelMove(pokemon) { - for (let i = 0; i < this.queue.length; i++) { - if (this.queue[i].choice === 'move' && this.queue[i].pokemon === pokemon) { - this.queue.splice(i, 1); - return true; - } - } - return false; - } - willSwitch(pokemon) { - for (let i = 0; i < this.queue.length; i++) { - if ((this.queue[i].choice === 'switch' || this.queue[i].choice === 'instaswitch') && this.queue[i].pokemon === pokemon) { - return this.queue[i]; - } - } - return false; - } - runDecision(decision) { - // returns whether or not we ended in a callback - switch (decision.choice) { - case 'start': { - // I GIVE UP, WILL WRESTLE WITH EVENT SYSTEM LATER - let format = this.getFormat(); - - // Remove Pokémon duplicates remaining after `team` decisions. - this.p1.pokemon = this.p1.pokemon.slice(0, this.p1.pokemonLeft); - this.p2.pokemon = this.p2.pokemon.slice(0, this.p2.pokemonLeft); - - if (format.teamLength && format.teamLength.battle) { - // Trim the team: not all of the Pokémon brought to Preview will battle. - this.p1.pokemon = this.p1.pokemon.slice(0, format.teamLength.battle); - this.p1.pokemonLeft = this.p1.pokemon.length; - this.p2.pokemon = this.p2.pokemon.slice(0, format.teamLength.battle); - this.p2.pokemonLeft = this.p2.pokemon.length; - } - - this.add('start'); - for (let pos = 0; pos < this.p1.active.length; pos++) { - this.switchIn(this.p1.pokemon[pos], pos); - } - for (let pos = 0; pos < this.p2.active.length; pos++) { - this.switchIn(this.p2.pokemon[pos], pos); - } - for (let pos = 0; pos < this.p1.pokemon.length; pos++) { - let pokemon = this.p1.pokemon[pos]; - this.singleEvent('Start', this.getEffect(pokemon.species), pokemon.speciesData, pokemon); - } - for (let pos = 0; pos < this.p2.pokemon.length; pos++) { - let pokemon = this.p2.pokemon[pos]; - this.singleEvent('Start', this.getEffect(pokemon.species), pokemon.speciesData, pokemon); - } - this.midTurn = true; - break; - } - - case 'move': - if (!decision.pokemon.isActive) return false; - if (decision.pokemon.fainted) return false; - this.runMove(decision.move, decision.pokemon, decision.targetLoc, decision.sourceEffect, decision.zmove); - break; - case 'megaEvo': - this.runMegaEvo(decision.pokemon); - break; - case 'beforeTurnMove': { - if (!decision.pokemon.isActive) return false; - if (decision.pokemon.fainted) return false; - this.debug('before turn callback: ' + decision.move.id); - let target = this.getTarget(decision.pokemon, decision.move, decision.targetLoc); - if (!target) return false; - decision.move.beforeTurnCallback.call(this, decision.pokemon, target); - break; - } - - case 'event': - this.runEvent(decision.event, decision.pokemon); - break; - case 'team': { - decision.side.pokemon.splice(decision.index, 0, decision.pokemon); - decision.pokemon.position = decision.index; - // we return here because the update event would crash since there are no active pokemon yet - return; - } - - case 'pass': - if (!decision.priority || decision.priority <= 101) return; - if (decision.pokemon) { - decision.pokemon.switchFlag = false; - } - break; - case 'instaswitch': - case 'switch': - if (decision.choice === 'switch' && decision.pokemon.status && this.data.Abilities.naturalcure) { - this.singleEvent('CheckShow', this.data.Abilities.naturalcure, null, decision.pokemon); - } - if (decision.pokemon.hp) { - decision.pokemon.beingCalledBack = true; - let lastMove = this.getMove(decision.pokemon.lastMove); - if (lastMove.selfSwitch !== 'copyvolatile') { - this.runEvent('BeforeSwitchOut', decision.pokemon); - if (this.gen >= 5) { - this.eachEvent('Update'); - } - } - if (!this.runEvent('SwitchOut', decision.pokemon)) { - // 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 BW or earlier interrupts - // a switch-out. - break; - } - } - decision.pokemon.illusion = null; - this.singleEvent('End', this.getAbility(decision.pokemon.ability), decision.pokemon.abilityData, decision.pokemon); - if (!decision.pokemon.hp && !decision.pokemon.fainted) { - // a pokemon fainted from Pursuit before it could switch - if (this.gen <= 4) { - // in gen 2-4, the switch still happens - decision.priority = -101; - this.queue.unshift(decision); - this.add('-hint', 'Pursuit target fainted, switch continues in gen 2-4'); - break; - } - // in gen 5+, the switch is cancelled - this.debug('A Pokemon can\'t switch between when it runs out of HP and when it faints'); - break; - } - if (decision.target.isActive) { - this.add('-hint', 'Switch failed; switch target is already active'); - break; - } - if (decision.choice === 'switch' && decision.pokemon.activeTurns === 1) { - let foeActive = decision.pokemon.side.foe.active; - for (let i = 0; i < foeActive.length; i++) { - if (foeActive[i].isStale >= 2) { - decision.pokemon.isStaleCon++; - decision.pokemon.isStaleSource = 'switch'; - break; - } - } - } - - this.switchIn(decision.target, decision.pokemon.position); - break; - case 'runUnnerve': - this.singleEvent('PreStart', decision.pokemon.getAbility(), decision.pokemon.abilityData, decision.pokemon); - break; - case 'runSwitch': - this.runEvent('SwitchIn', decision.pokemon); - if (this.gen <= 2 && !decision.pokemon.side.faintedThisTurn && decision.pokemon.draggedIn !== this.turn) this.runEvent('AfterSwitchInSelf', decision.pokemon); - if (!decision.pokemon.hp) break; - decision.pokemon.isStarted = true; - if (!decision.pokemon.fainted) { - this.singleEvent('Start', decision.pokemon.getAbility(), decision.pokemon.abilityData, decision.pokemon); - decision.pokemon.abilityOrder = this.abilityOrder++; - this.singleEvent('Start', decision.pokemon.getItem(), decision.pokemon.itemData, decision.pokemon); - } - delete decision.pokemon.draggedIn; - break; - case 'runPrimal': - if (!decision.pokemon.transformed) this.singleEvent('Primal', decision.pokemon.getItem(), decision.pokemon.itemData, decision.pokemon); - break; - case 'shift': { - if (!decision.pokemon.isActive) return false; - if (decision.pokemon.fainted) return false; - decision.pokemon.activeTurns--; - this.swapPosition(decision.pokemon, 1); - let foeActive = decision.pokemon.side.foe.active; - for (let i = 0; i < foeActive.length; i++) { - if (foeActive[i].isStale >= 2) { - decision.pokemon.isStaleCon++; - decision.pokemon.isStaleSource = 'switch'; - break; - } - } - break; - } - - case 'beforeTurn': - this.eachEvent('BeforeTurn'); - break; - case 'residual': - this.add(''); - this.clearActiveMove(true); - this.updateSpeed(); - this.residualEvent('Residual'); - this.add('upkeep'); - break; - - case 'skip': - throw new Error("Decision illegally skipped!"); - } - - // phazing (Roar, etc) - for (let i = 0; i < this.p1.active.length; i++) { - let pokemon = this.p1.active[i]; - if (pokemon.forceSwitchFlag) { - if (pokemon.hp) this.dragIn(pokemon.side, pokemon.position); - pokemon.forceSwitchFlag = false; - } - } - for (let i = 0; i < this.p2.active.length; i++) { - let pokemon = this.p2.active[i]; - if (pokemon.forceSwitchFlag) { - if (pokemon.hp) this.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.length || (this.gen <= 3 && this.queue[0].choice in {move:1, residual:1})) { - // 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 (decision.choice === 'pass') { - this.eachEvent('Update'); - return false; - } else if (decision.choice === 'megaEvo' && this.gen >= 7) { - this.eachEvent('Update'); - // In Gen 7, the decision order is recalculated for a Pokémon that mega evolves. - const moveIndex = this.queue.findIndex(queuedDecision => queuedDecision.pokemon === decision.pokemon && queuedDecision.choice === 'move'); - if (moveIndex >= 0) { - const moveDecision = this.queue.splice(moveIndex, 1)[0]; - this.insertQueue(moveDecision, true); - } - return false; - } else if (this.queue.length && this.queue[0].choice === 'instaswitch') { - return false; - } - - let p1switch = this.p1.active.some(mon => mon && mon.switchFlag); - let p2switch = this.p2.active.some(mon => mon && mon.switchFlag); - - if (p1switch && !this.canSwitch(this.p1)) { - for (let i = 0; i < this.p1.active.length; i++) { - this.p1.active[i].switchFlag = false; - } - p1switch = false; - } - if (p2switch && !this.canSwitch(this.p2)) { - for (let i = 0; i < this.p2.active.length; i++) { - this.p2.active[i].switchFlag = false; - } - p2switch = false; - } - - if (p1switch || p2switch) { - if (this.gen >= 5) { - this.eachEvent('Update'); - } - this.makeRequest('switch'); - return true; - } - - this.eachEvent('Update'); - - return false; - } - go() { - this.add(''); - if (this.currentRequest) { - this.currentRequest = ''; - } - - if (!this.midTurn) { - this.queue.push({choice: 'residual', priority: -100}); - this.queue.unshift({choice: 'beforeTurn', priority: 100}); - this.midTurn = true; - } - - while (this.queue.length) { - let decision = this.queue.shift(); - - this.runDecision(decision); - - if (this.currentRequest) { - return; - } - - if (this.ended) return; - } - - this.nextTurn(); - this.midTurn = false; - this.queue = []; - } - /** - * Changes a pokemon's decision, and inserts its new decision - * in priority order. - * - * You'd normally want the OverrideDecision event (which doesn't - * change priority order). - */ - changeDecision(pokemon, decision) { - this.cancelDecision(pokemon); - if (!decision.pokemon) decision.pokemon = pokemon; - this.insertQueue(decision); - } - /** - * Takes a choice string passed from the client. Starts the next - * turn if all required choices have been made. - */ - choose(sideid, input) { - let side = null; - if (sideid === 'p1' || sideid === 'p2') side = this[sideid]; - if (!side) throw new Error(`Invalid side ${sideid}`); - - if (!side.choose(input)) return false; - - this.checkDecisions(); - return true; - } - - commitDecisions() { - this.updateSpeed(); - - let oldQueue = this.queue; - this.queue = []; - let oldFlag = this.LEGACY_API_DO_NOT_USE; - this.LEGACY_API_DO_NOT_USE = false; - for (const side of this.sides) { - side.autoChoose(); - } - this.LEGACY_API_DO_NOT_USE = oldFlag; - this.add('choice', this.p1.getChoice, this.p2.getChoice); - for (const side of this.sides) { - this.addQueue(side.choice.actions); - } - - this.sortQueue(); - Array.prototype.push.apply(this.queue, oldQueue); - - this.currentRequest = ''; - this.p1.currentRequest = ''; - this.p2.currentRequest = ''; - - this.go(); - } - undoChoice(sideid) { - let side = null; - if (sideid === 'p1' || sideid === 'p2') side = this[sideid]; - if (!side) throw new Error(`Invalid side ${sideid}`); - if (!side.currentRequest) return; - - if (side.choice.cantUndo) { - side.emitChoiceError(`Can't undo: A trapping/disabling effect would cause undo to leak information`); - return; - } - - side.clearChoice(); - } - /** - * @return true if both decisions are complete - */ - checkDecisions() { - let totalDecisions = 0; - if (this.p1.isChoiceDone()) { - if (!this.supportCancel) this.p1.choice.cantUndo = true; - totalDecisions++; - } - if (this.p2.isChoiceDone()) { - if (!this.supportCancel) this.p2.choice.cantUndo = true; - totalDecisions++; - } - if (totalDecisions >= this.sides.length) { - this.commitDecisions(); - return true; - } - return false; - } - - add(...parts) { - if (!parts.some(part => typeof part === 'function')) { - this.log.push(`|${parts.join('|')}`); - return; - } - this.log.push('|split'); - let sides = [null, this.sides[0], this.sides[1], true]; - for (let i = 0; i < sides.length; ++i) { - let sideUpdate = '|' + parts.map(part => { - if (typeof part !== 'function') return part; - return part(sides[i]); - }).join('|'); - this.log.push(sideUpdate); - } - } - addMove(...args) { - this.lastMoveLine = this.log.length; - this.log.push(`|${args.join('|')}`); - } - attrLastMove(...args) { - this.log[this.lastMoveLine] += `|${args.join('|')}`; - } - retargetLastMove(newTarget) { - let parts = this.log[this.lastMoveLine].split('|'); - parts[4] = newTarget; - this.log[this.lastMoveLine] = parts.join('|'); - } - debug(activity) { - if (this.getFormat().debug) { - this.add('debug', activity); - } - } - debugError(activity) { - this.add('debug', activity); - } - - // players - - getTeam(team) { - const format = this.getFormat(); - if (!format.team && team) return team; - - if (!this.teamGenerator) { - this.teamGenerator = this.getTeamGenerator(format); - } else { - this.teamGenerator.prng = new PRNG(); - } - team = this.teamGenerator.generateTeam(); - this.prngSeed.push(...this.teamGenerator.prng.startingSeed); - - return team; - } - join(slot, name, avatar, team) { - if (this.p1 && this.p2) return false; - if ((this.p1 && this.p1.name === name) || (this.p2 && this.p2.name === name)) return false; - - let player = null; - if (slot !== 'p1' && slot !== 'p2') slot = (this.p1 ? 'p2' : 'p1'); - let slotNum = (slot === 'p2' ? 1 : 0); - if (this.started) { - this[slot].name = name; - } else { - //console.log("NEW SIDE: " + name); - team = this.getTeam(team); - this[slot] = new Sim.Side(name, this, slotNum, team); - this.sides[slotNum] = this[slot]; - } - player = this[slot]; - - if (avatar) player.avatar = avatar; - this.add('player', player.id, player.name, avatar); - if (!this.started) this.add('teamsize', player.id, player.pokemon.length); - - this.start(); - return player; - } - - // This function is called by this process's 'message' event. - receive(data, more) { - this.messageLog.push(data.join(' ')); - let logPos = this.log.length; - let alreadyEnded = this.ended; - switch (data[1]) { - case 'join': { - let team; - if (more) team = Dex.fastUnpackTeam(more); - this.join(data[2], data[3], data[4], team); - break; - } - - case 'win': - case 'tie': - this.win(data[2]); - break; - - case 'choose': - this.choose(data[2], data[3]); - break; - - case 'undo': - this.undoChoice(data[2]); - break; - - case 'eval': { - /* eslint-disable no-eval, no-unused-vars */ - let battle = this; - let p1 = this.p1; - let p2 = this.p2; - let p1active = p1 ? p1.active[0] : null; - let p2active = p2 ? p2.active[0] : null; - let target = data.slice(2).join('|').replace(/\f/g, '\n'); - this.add('', '>>> ' + target); - try { - this.add('', '<<< ' + eval(target)); - } catch (e) { - this.add('', '<<< error: ' + e.message); - } - /* eslint-enable no-eval, no-unused-vars */ - break; - } - - default: - // unhandled - } - - this.sendUpdates(logPos, alreadyEnded); - } - sendUpdates(logPos, alreadyEnded) { - if (this.log.length > logPos) { - if (alreadyEnded !== undefined && this.ended && !alreadyEnded) { - if (this.rated || Config.logchallenges) { - let log = { - seed: this.prngSeed, - turns: this.turn, - p1: this.p1.name, - p2: this.p2.name, - p1team: this.p1.team, - p2team: this.p2.team, - log: this.log, - }; - this.send('log', JSON.stringify(log)); - } - this.send('score', [this.p1.pokemonLeft, this.p2.pokemonLeft]); - this.send('winupdate', [this.winner].concat(this.log.slice(logPos))); - } else { - this.send('update', this.log.slice(logPos)); - } - } - } - - destroy() { - // deallocate ourself - - // deallocate children and get rid of references to them - for (let i = 0; i < this.sides.length; i++) { - if (this.sides[i]) this.sides[i].destroy(); - this.sides[i] = null; - } - this.p1 = null; - this.p2 = null; - for (let i = 0; i < this.queue.length; i++) { - delete this.queue[i].pokemon; - delete this.queue[i].side; - this.queue[i] = null; - } - this.queue = null; - - // in case the garbage collector really sucks, at least deallocate the log - this.log = null; - } -} - -module.exports = Battle; diff --git a/sim/battle.ts b/sim/battle.ts new file mode 100644 index 0000000000000..f3101989319c8 --- /dev/null +++ b/sim/battle.ts @@ -0,0 +1,3235 @@ +/** + * Simulator Battle + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * @license MIT + */ +import Dex = require('./dex'); +global.toId = Dex.getId; +import * as Data from './dex-data'; +import {Pokemon} from './pokemon'; +import {PRNG, PRNGSeed} from './prng'; +import {Side} from './side'; + +/** A Pokemon that has fainted. */ +interface FaintedPokemon { + target: Pokemon; + source: Pokemon | null; + effect: Effect | null; +} + +interface PlayerOptions { + name?: string; + avatar?: string; + team?: PokemonSet[] | string | null; +} + +interface BattleOptions { + formatid: string; // Format ID + send?: (type: string, data: string | string[]) => void; // Output callback + prng?: PRNG; // PRNG override (you usually don't need this, just pass a seed) + seed?: PRNGSeed; // PRNG seed + rated?: boolean | string; // Rated string + p1?: PlayerOptions; // Player 1 data + p2?: PlayerOptions; // Player 2 data + debug?: boolean; // show debug mode option +} + +export class Battle extends Dex.ModdedDex { + id: string; + zMoveTable: {[k: string]: string}; + log: string[]; + inputLog: string[]; + sentLogPos: number; + sentEnd: boolean; + sides: Side[]; + rated: boolean | string; + weatherData: AnyObject; + terrainData: AnyObject; + pseudoWeather: AnyObject; + format: string; + formatid: string; + cachedFormat: Format; + debugMode: boolean; + formatData: AnyObject; + effect: Effect; + effectData: AnyObject; + event: AnyObject; + itemData: AnyObject; + gameType: GameType; + reportExactHP: boolean; + queue: Actions["Action"][]; + faintQueue: FaintedPokemon[]; + messageLog: string[]; + send: (type: string, data: string | string[]) => void; + turn: number; + p1: Side; + p2: Side; + lastUpdate: number; + weather: string; + terrain: string; + ended: boolean; + started: boolean; + active: boolean; + eventDepth: number; + lastMove: Move | null; + activeMove: ActiveMove | null; + activePokemon: Pokemon | null; + activeTarget: Pokemon | null; + midTurn: boolean; + currentRequest: string; + lastMoveLine: number; + reportPercentages: boolean; + supportCancel: boolean; + events: AnyObject | null; + lastDamage: number; + abilityOrder: number; + NOT_FAILURE: ''; + prng: PRNG; + prngSeed: PRNGSeed; + teamGenerator: ReturnType | null; + winner?: string; + firstStaleWarned?: boolean; + staleWarned?: boolean; + activeTurns?: number; + + constructor(options: BattleOptions) { + let format = Dex.getFormat(options.formatid, true); + super(format.mod); + this.zMoveTable = {}; + Object.assign(this, this.data.Scripts); + this.id = ''; + this.log = []; + this.inputLog = []; + this.sentLogPos = 0; + this.sentEnd = false; + // @ts-ignore + this.sides = [null, null]; + // @ts-ignore + this.rated = options.rated; + this.weatherData = {id: ''}; + this.terrainData = {id: ''}; + this.pseudoWeather = {}; + this.format = format.id; + this.formatid = options.formatid; + this.cachedFormat = format; + this.debugMode = format.debug || !!options.debug; + this.formatData = {id: format.id}; + // tslint:disable-next-line:no-object-literal-type-assertion + this.effect = {id: ''} as Effect; + this.effectData = {id: ''}; + this.event = {id: ''}; + this.itemData = {id: ''}; + this.gameType = (format.gameType || 'singles'); + this.reportExactHP = !!format.debug; + this.queue = []; + this.faintQueue = []; + this.messageLog = []; + this.send = options.send || (() => {}); + this.turn = 0; + // @ts-ignore + this.p1 = null; + // @ts-ignore + this.p2 = null; + this.lastUpdate = 0; + this.weather = ''; + this.terrain = ''; + this.ended = false; + this.started = false; + this.active = false; + this.eventDepth = 0; + this.lastMove = null; + this.activeMove = null; + this.activePokemon = null; + this.activeTarget = null; + this.midTurn = false; + this.currentRequest = ''; + this.lastMoveLine = -1; + this.reportPercentages = false; + this.supportCancel = false; + this.events = null; + this.lastDamage = 0; + this.abilityOrder = 0; + this.NOT_FAILURE = ''; + this.prng = options.prng || new PRNG(options.seed || undefined); + this.prngSeed = this.prng.startingSeed.slice() as PRNGSeed; + this.teamGenerator = null; + // bound function for faster speedSort + // (so speedSort doesn't need to bind before use) + this.comparePriority = this.comparePriority.bind(this); + + const inputOptions: {formatid: string, seed: PRNGSeed, rated?: string | true} = {formatid: options.formatid, seed: this.prng.seed}; + if (this.rated) inputOptions.rated = this.rated; + if (global.__version) { + this.inputLog.push(`>version ${global.__version}`); + } + this.inputLog.push(`>start ` + JSON.stringify(inputOptions)); + + for (const rule of this.getRuleTable(format).keys()) { + if (rule.startsWith('+') || rule.startsWith('-') || rule.startsWith('!')) continue; + let subFormat = this.getFormat(rule); + if (subFormat.exists) { + let hasEventHandler = Object.keys(subFormat).some(val => + val.startsWith('on') && !['onBegin', 'onValidateTeam', 'onChangeSet', 'onValidateSet'].includes(val) + ); + if (hasEventHandler) this.addPseudoWeather(rule); + } + } + if (options.p1) { + this.setPlayer('p1', options.p1); + } + if (options.p2) { + this.setPlayer('p2', options.p2); + } + } + + static logReplay(data: string, isReplay: boolean | Side) { + if (isReplay === true) return data; + return ''; + } + + toString() { + return 'Battle: ' + this.format; + } + + random(m?: number, n?: number) { + return this.prng.next(m, n); + } + + randomChance(numerator: number, denominator: number) { + return this.prng.randomChance(numerator, denominator); + } + + sample(items: ReadonlyArray): T { + return this.prng.sample(items); + } + + resetRNG() { + this.prng = new PRNG(this.prng.startingSeed); + } + + setWeather(status: string | PureEffect, source: Pokemon | 'debug' | null = null, sourceEffect: Effect | null = null) { + status = this.getEffect(status); + if (!sourceEffect && this.effect) sourceEffect = this.effect; + if (!source && this.event && this.event.target) source = this.event.target; + if (source === 'debug') source = this.p1.active[0]; + + if (this.weather === status.id) { + if (sourceEffect && sourceEffect.effectType === 'Ability') { + if (this.gen > 5 || this.weatherData.duration === 0) { + return false; + } + } else if (this.gen > 2 || status.id === 'sandstorm') { + return false; + } + } + if (source) { + let result = this.runEvent('SetWeather', source, source, status); + if (!result) { + if (result === false) { + if (sourceEffect && sourceEffect.weather) { + this.add('-fail', source, sourceEffect, '[from] ' + this.weather); + } else if (sourceEffect && sourceEffect.effectType === 'Ability') { + this.add('-ability', source, sourceEffect, '[from] ' + this.weather, '[fail]'); + } + } + return null; + } + } + let prevWeather = this.weather; + let prevWeatherData = this.weatherData; + this.weather = status.id; + this.weatherData = {id: status.id}; + if (source) { + this.weatherData.source = source; + this.weatherData.sourcePosition = source.position; + } + if (status.duration) { + this.weatherData.duration = status.duration; + } + if (status.durationCallback) { + if (!source) throw new Error(`setting weather without a source`); + this.weatherData.duration = status.durationCallback.call(this, source, source, sourceEffect); + } + if (!this.singleEvent('Start', status, this.weatherData, this, source, sourceEffect)) { + this.weather = prevWeather; + this.weatherData = prevWeatherData; + return false; + } + return true; + } + + clearWeather() { + if (!this.weather) { + return false; + } + let oldstatus = this.getWeather(); + this.singleEvent('End', oldstatus, this.weatherData, this); + this.weather = ''; + this.weatherData = {id: ''}; + return true; + } + + effectiveWeather() { + if (this.suppressingWeather()) return ''; + return this.weather; + } + + isWeather(weather: string | string[]) { + let ourWeather = this.effectiveWeather(); + if (!Array.isArray(weather)) { + return ourWeather === toId(weather); + } + return weather.map(toId).includes(ourWeather); + } + + getWeather() { + return this.getEffect(this.weather); + } + + setTerrain(status: string | Effect, source: Pokemon | 'debug' | null = null, sourceEffect: Effect | null = null) { + status = this.getEffect(status); + if (!sourceEffect && this.effect) sourceEffect = this.effect; + if (!source && this.event && this.event.target) source = this.event.target; + if (source === 'debug') source = this.p1.active[0]; + if (!source) throw new Error(`setting terrain without a source`); + + if (this.terrain === status.id) return false; + let prevTerrain = this.terrain; + let prevTerrainData = this.terrainData; + this.terrain = status.id; + this.terrainData = { + id: status.id, + source, + sourcePosition: source.position, + duration: status.duration, + }; + if (status.durationCallback) { + this.terrainData.duration = status.durationCallback.call(this, source, source, sourceEffect); + } + if (!this.singleEvent('Start', status, this.terrainData, this, source, sourceEffect)) { + this.terrain = prevTerrain; + this.terrainData = prevTerrainData; + return false; + } + this.runEvent('TerrainStart', source, source, status); + return true; + } + + clearTerrain() { + if (!this.terrain) return false; + let oldstatus = this.getTerrain(); + this.singleEvent('End', oldstatus, this.terrainData, this); + this.terrain = ''; + this.terrainData = {id: ''}; + return true; + } + + effectiveTerrain(target?: Pokemon | Side | Battle) { + if (this.event) { + if (!target) target = this.event.target; + } + if (!this.runEvent('TryTerrain', target)) return ''; + return this.terrain; + } + + isTerrain(terrain: string | string[], target?: Pokemon | Side | Battle) { + let ourTerrain = this.effectiveTerrain(target); + if (!Array.isArray(terrain)) { + return ourTerrain === toId(terrain); + } + return terrain.map(toId).includes(ourTerrain); + } + + getTerrain() { + return this.getEffect(this.terrain); + } + + // @ts-ignore + getFormat(format?: string) { + if (!format) return this.cachedFormat; + return super.getFormat(format, true); + } + + addPseudoWeather(status: string | PureEffect, source: Pokemon | 'debug' | null = null, sourceEffect: Effect | null = null): boolean { + if (!source && this.event && this.event.target) source = this.event.target; + if (source === 'debug') source = this.p1.active[0]; + status = this.getEffect(status); + + let effectData = this.pseudoWeather[status.id]; + if (effectData) { + if (!status.onRestart) return false; + return this.singleEvent('Restart', status, effectData, this, source, sourceEffect); + } + effectData = this.pseudoWeather[status.id] = { + id: status.id, + source, + sourcePosition: source && source.position, + duration: status.duration, + }; + if (status.durationCallback) { + if (!source) throw new Error(`setting fieldcond without a source`); + effectData.duration = status.durationCallback.call(this, source, source, sourceEffect); + } + if (!this.singleEvent('Start', status, effectData, this, source, sourceEffect)) { + delete this.pseudoWeather[status.id]; + return false; + } + return true; + } + + getPseudoWeather(status: string | Effect) { + status = this.getEffect(status); + if (!this.pseudoWeather[status.id]) return null; + return status; + } + + removePseudoWeather(status: string | Effect) { + status = this.getEffect(status); + let effectData = this.pseudoWeather[status.id]; + if (!effectData) return false; + this.singleEvent('End', status, effectData, this); + delete this.pseudoWeather[status.id]; + return true; + } + + suppressingAttackEvents() { + return this.activePokemon && this.activePokemon.isActive && this.activeMove && this.activeMove.ignoreAbility; + } + + suppressingWeather() { + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon && !pokemon.ignoringAbility() && pokemon.getAbility().suppressWeather) { + return true; + } + } + } + return false; + } + + setActiveMove(move?: ActiveMove | null, pokemon?: Pokemon | null, target?: Pokemon | null) { + if (!move) move = null; + if (!pokemon) pokemon = null; + if (!target) target = pokemon; + this.activeMove = move; + this.activePokemon = pokemon; + this.activeTarget = target; + } + + clearActiveMove(failed?: boolean) { + if (this.activeMove) { + if (!failed) { + this.lastMove = this.activeMove; + } + this.activeMove = null; + this.activePokemon = null; + this.activeTarget = null; + } + } + + updateSpeed() { + let actives = this.p1.active; + for (const active of actives) { + if (active) active.updateSpeed(); + } + actives = this.p2.active; + for (const active of actives) { + if (active) active.updateSpeed(); + } + } + + /** + * Truncate a number into an unsigned 32-bit integer, for + * compatibility with the cartridge games' math systems. + */ + trunc(num: number, bits: number = 0) { + if (bits) return (num >>> 0) % (2 ** bits); + return num >>> 0; + } + + comparePriority(a: AnyObject, b: AnyObject) { + return -((b.order || 4294967296) - (a.order || 4294967296)) || + ((b.priority || 0) - (a.priority || 0)) || + ((b.speed || 0) - (a.speed || 0)) || + -((b.subOrder || 0) - (a.subOrder || 0)) || + 0; + } + + static compareRedirectOrder(a: AnyObject, b: AnyObject) { + return ((b.priority || 0) - (a.priority || 0)) || + ((b.speed || 0) - (a.speed || 0)) || + -(b.thing.abilityOrder - a.thing.abilityOrder) || + 0; + } + + /** + * Sort a list, resolving speed ties the way the games do. + */ + speedSort(list: T[], comparator: (a: T, b: T) => number = this.comparePriority) { + if (list.length < 2) return; + let sorted = 0; + while (sorted + 1 < list.length) { + let nextIndexes = [sorted]; + // grab list of next indexes + for (let i = sorted + 1; i < list.length; i++) { + let delta = comparator(list[nextIndexes[0]], list[i]); + if (delta < 0) continue; + if (delta > 0) nextIndexes = [i]; + if (delta === 0) nextIndexes.push(i); + } + // put list of next indexes where they belong + let nextCount = nextIndexes.length; + for (let i = 0; i < nextCount; i++) { + let index = nextIndexes[i]; + while (index > sorted + i) { + [list[index], list[index - 1]] = [list[index - 1], list[index]]; + index--; + } + } + if (nextCount > 1) this.prng.shuffle(list, sorted, sorted + nextCount); + sorted += nextCount; + } + } + + eachEvent(eventid: string, effect?: Effect, relayVar?: boolean) { + let actives = []; + if (!effect && this.effect) effect = this.effect; + for (const side of this.sides) { + for (const pokemon of side.active) { + if (pokemon) actives.push(pokemon); + } + } + this.speedSort(actives, (a, b) => + b.speed - a.speed + ); + for (const pokemon of actives) { + this.runEvent(eventid, pokemon, null, effect, relayVar); + } + if (eventid === 'Weather' && this.gen >= 7) { + // TODO: further research when updates happen + this.eachEvent('Update'); + } + } + + residualEvent(eventid: string, relayVar?: any) { + let callbackName = `on${eventid}`; + let handlers = this.findBattleEventHandlers(callbackName, 'duration'); + for (const side of this.sides) { + handlers = handlers.concat(this.findSideEventHandlers(side, callbackName, 'duration')); + for (const active of side.active) { + if (!active) continue; + handlers = handlers.concat(this.findPokemonEventHandlers(active, callbackName, 'duration')); + } + } + this.speedSort(handlers); + while (handlers.length) { + let handler = handlers[0]; + handlers.shift(); + let status = handler.status; + if (handler.thing.fainted) continue; + if (handler.statusData && handler.statusData.duration) { + handler.statusData.duration--; + if (!handler.statusData.duration) { + handler.end.call(handler.thing, status.id); + continue; + } + } + this.singleEvent(eventid, status, handler.statusData, handler.thing, relayVar); + this.faintMessages(); + if (this.ended) return; + } + } + + /** + * The entire event system revolves around this function + * (and its helper functions, getRelevant * ) + */ + singleEvent( + eventid: string, effect: Effect, effectData: AnyObject | null, + target: string | Pokemon | Side | Battle | null, source?: string | Pokemon | Effect | false | null, + sourceEffect?: Effect | string | null, relayVar?: any) { + if (this.eventDepth >= 8) { + // oh fuck + this.add('message', 'STACK LIMIT EXCEEDED'); + this.add('message', 'PLEASE REPORT IN BUG THREAD'); + this.add('message', 'Event: ' + eventid); + this.add('message', 'Parent event: ' + this.event.id); + throw new Error("Stack overflow"); + } + // this.add('Event: ' + eventid + ' (depth ' + this.eventDepth + ')'); + let hasRelayVar = true; + if (relayVar === undefined) { + relayVar = true; + hasRelayVar = false; + } + + // @ts-ignore + if (effect.effectType === 'Status' && target.status !== effect.id) { + // it's changed; call it off + return relayVar; + } + if (eventid !== 'Start' && eventid !== 'TakeItem' && eventid !== 'Primal' && + effect.effectType === 'Item' && (target instanceof Pokemon) && target.ignoringItem()) { + this.debug(eventid + ' handler suppressed by Embargo, Klutz or Magic Room'); + return relayVar; + } + if (eventid !== 'End' && effect.effectType === 'Ability' && (target instanceof Pokemon) && target.ignoringAbility()) { + this.debug(eventid + ' handler suppressed by Gastro Acid'); + return relayVar; + } + if (effect.effectType === 'Weather' && eventid !== 'Start' && eventid !== 'Residual' && + eventid !== 'End' && this.suppressingWeather()) { + this.debug(eventid + ' handler suppressed by Air Lock'); + return relayVar; + } + + // @ts-ignore + let callback = effect['on' + eventid]; + + if (callback === undefined) return relayVar; + let parentEffect = this.effect; + let parentEffectData = this.effectData; + let parentEvent = this.event; + this.effect = effect; + this.effectData = effectData || {}; + this.event = {id: eventid, target, source, effect: sourceEffect}; + this.eventDepth++; + let args = [target, source, sourceEffect]; + if (hasRelayVar) args.unshift(relayVar); + let returnVal; + if (typeof callback === 'function') { + returnVal = callback.apply(this, args); + } else { + returnVal = callback; + } + this.eventDepth--; + this.effect = parentEffect; + this.effectData = parentEffectData; + this.event = parentEvent; + if (returnVal === undefined) return relayVar; + return returnVal; + } + + /** + * runEvent is the core of Pokemon Showdown's event system. + * + * Basic usage + * =========== + * + * this.runEvent('Blah') + * will trigger any onBlah global event handlers. + * + * this.runEvent('Blah', target) + * will additionally trigger any onBlah handlers on the target, onAllyBlah + * handlers on any active pokemon on the target's team, and onFoeBlah + * handlers on any active pokemon on the target's foe's team + * + * this.runEvent('Blah', target, source) + * will additionally trigger any onSourceBlah handlers on the source + * + * this.runEvent('Blah', target, source, effect) + * will additionally pass the effect onto all event handlers triggered + * + * this.runEvent('Blah', target, source, effect, relayVar) + * will additionally pass the relayVar as the first argument along all event + * handlers + * + * You may leave any of these null. For instance, if you have a relayVar but + * no source or effect: + * this.runEvent('Damage', target, null, null, 50) + * + * Event handlers + * ============== + * + * Items, abilities, statuses, and other effects like SR, confusion, weather, + * or Trick Room can have event handlers. Event handlers are functions that + * can modify what happens during an event. + * + * event handlers are passed: + * function (target, source, effect) + * although some of these can be blank. + * + * certain events have a relay variable, in which case they're passed: + * function (relayVar, target, source, effect) + * + * Relay variables are variables that give additional information about the + * event. For instance, the damage event has a relayVar which is the amount + * of damage dealt. + * + * If a relay variable isn't passed to runEvent, there will still be a secret + * relayVar defaulting to `true`, but it won't get passed to any event + * handlers. + * + * After an event handler is run, its return value helps determine what + * happens next: + * 1. If the return value isn't `undefined`, relayVar is set to the return + * value + * 2. If relayVar is falsy, no more event handlers are run + * 3. Otherwise, if there are more event handlers, the next one is run and + * we go back to step 1. + * 4. Once all event handlers are run (or one of them results in a falsy + * relayVar), relayVar is returned by runEvent + * + * As a shortcut, an event handler that isn't a function will be interpreted + * as a function that returns that value. + * + * You can have return values mean whatever you like, but in general, we + * follow the convention that returning `false` or `null` means + * stopping or interrupting the event. + * + * For instance, returning `false` from a TrySetStatus handler means that + * the pokemon doesn't get statused. + * + * If a failed event usually results in a message like "But it failed!" + * or "It had no effect!", returning `null` will suppress that message and + * returning `false` will display it. Returning `null` is useful if your + * event handler already gave its own custom failure message. + * + * Returning `undefined` means "don't change anything" or "keep going". + * A function that does nothing but return `undefined` is the equivalent + * of not having an event handler at all. + * + * Returning a value means that that value is the new `relayVar`. For + * instance, if a Damage event handler returns 50, the damage event + * will deal 50 damage instead of whatever it was going to deal before. + * + * Useful values + * ============= + * + * In addition to all the methods and attributes of Dex, Battle, and + * Scripts, event handlers have some additional values they can access: + * + * this.effect: + * the Effect having the event handler + * this.effectData: + * the data store associated with the above Effect. This is a plain Object + * and you can use it to store data for later event handlers. + * this.effectData.target: + * the Pokemon, Side, or Battle that the event handler's effect was + * attached to. + * this.event.id: + * the event ID + * this.event.target, this.event.source, this.event.effect: + * the target, source, and effect of the event. These are the same + * variables that are passed as arguments to the event handler, but + * they're useful for functions called by the event handler. + */ + runEvent( + eventid: string, target?: Pokemon | Side | Battle | null, source?: string | Pokemon | false | null, + effect?: Effect | null, relayVar?: any, onEffect?: boolean, fastExit?: boolean) { + // if (Battle.eventCounter) { + // if (!Battle.eventCounter[eventid]) Battle.eventCounter[eventid] = 0; + // Battle.eventCounter[eventid]++; + // } + if (this.eventDepth >= 8) { + // oh fuck + this.add('message', 'STACK LIMIT EXCEEDED'); + this.add('message', 'PLEASE REPORT IN BUG THREAD'); + this.add('message', 'Event: ' + eventid); + this.add('message', 'Parent event: ' + this.event.id); + throw new Error("Stack overflow"); + } + if (!target) target = this; + let effectSource = null; + if (source instanceof Pokemon) effectSource = source; + let handlers = this.findEventHandlers(target, eventid, effectSource); + if (fastExit) { + handlers.sort(Battle.compareRedirectOrder); + } else { + this.speedSort(handlers); + } + let hasRelayVar = true; + let args = [target, source, effect]; + // console.log('Event: ' + eventid + ' (depth ' + this.eventDepth + ') t:' + target.id + ' s:' + (!source || source.id) + ' e:' + effect.id); + if (relayVar === undefined || relayVar === null) { + relayVar = true; + hasRelayVar = false; + } else { + args.unshift(relayVar); + } + + let parentEvent = this.event; + this.event = {id: eventid, target, source, effect, modifier: 1}; + this.eventDepth++; + + if (onEffect) { + if (!effect) throw new Error("onEffect passed without an effect"); + // @ts-ignore + let callback = effect[`on${eventid}`]; + if (callback !== undefined) { + handlers.unshift({status: effect, callback, statusData: {}, end: null, thing: target}); + } + } + for (const handler of handlers) { + let status = handler.status; + let thing = handler.thing; + // this.debug('match ' + eventid + ': ' + status.id + ' ' + status.effectType); + if (status.effectType === 'Status' && thing.status !== status.id) { + // it's changed; call it off + continue; + } + if (status.effectType === 'Ability' && !status.isUnbreakable && this.suppressingAttackEvents() && this.activePokemon !== thing) { + // ignore attacking events + let AttackingEvents = { + BeforeMove: 1, + BasePower: 1, + Immunity: 1, + RedirectTarget: 1, + Heal: 1, + SetStatus: 1, + CriticalHit: 1, + ModifyAtk: 1, ModifyDef: 1, ModifySpA: 1, ModifySpD: 1, ModifySpe: 1, ModifyAccuracy: 1, + ModifyBoost: 1, + ModifyDamage: 1, + ModifySecondaries: 1, + ModifyWeight: 1, + TryAddVolatile: 1, + TryHit: 1, + TryHitSide: 1, + TryMove: 1, + Boost: 1, + DragOut: 1, + Effectiveness: 1, + }; + if (eventid in AttackingEvents) { + this.debug(eventid + ' handler suppressed by Mold Breaker'); + continue; + } else if (eventid === 'Damage' && effect && effect.effectType === 'Move') { + this.debug(eventid + ' handler suppressed by Mold Breaker'); + continue; + } + } + if (eventid !== 'Start' && eventid !== 'SwitchIn' && eventid !== 'TakeItem' && + status.effectType === 'Item' && (thing instanceof Pokemon) && thing.ignoringItem()) { + if (eventid !== 'Update') { + this.debug(eventid + ' handler suppressed by Embargo, Klutz or Magic Room'); + } + continue; + } else if (eventid !== 'End' && status.effectType === 'Ability' && (thing instanceof Pokemon) && thing.ignoringAbility()) { + if (eventid !== 'Update') { + this.debug(eventid + ' handler suppressed by Gastro Acid'); + } + continue; + } + if ((status.effectType === 'Weather' || eventid === 'Weather') && + eventid !== 'Residual' && eventid !== 'End' && this.suppressingWeather()) { + this.debug(eventid + ' handler suppressed by Air Lock'); + continue; + } + let returnVal; + if (typeof handler.callback === 'function') { + let parentEffect = this.effect; + let parentEffectData = this.effectData; + this.effect = handler.status; + this.effectData = handler.statusData || {}; + this.effectData.target = thing; + + returnVal = handler.callback.apply(this, args); + + this.effect = parentEffect; + this.effectData = parentEffectData; + } else { + returnVal = handler.callback; + } + + if (returnVal !== undefined) { + relayVar = returnVal; + if (!relayVar || fastExit) break; + if (hasRelayVar) { + args[0] = relayVar; + } + } + } + + this.eventDepth--; + if (typeof relayVar === 'number' && relayVar === Math.abs(Math.floor(relayVar))) { + // this.debug(eventid + ' modifier: 0x' + ('0000' + (this.event.modifier * 4096).toString(16)).slice(-4).toUpperCase()); + relayVar = this.modify(relayVar, this.event.modifier); + } + this.event = parentEvent; + + return relayVar; + } + + /** + * priorityEvent works just like runEvent, except it exits and returns + * on the first non-undefined value instead of only on null/false. + */ + priorityEvent( + eventid: string, target: Pokemon | Side | Battle, source?: Pokemon | null, + effect?: Effect, relayVar?: any, onEffect?: boolean): any { + return this.runEvent(eventid, target, source, effect, relayVar, onEffect, true); + } + + resolveLastPriority(handlers: AnyObject[], callbackName: string) { + let handler = handlers[handlers.length - 1]; + handler.order = handler.status[`${callbackName}Order`] || false; + handler.priority = handler.status[`${callbackName}Priority`] || 0; + handler.subOrder = handler.status[`${callbackName}SubOrder`] || 0; + if (handler.thing && handler.thing.getStat) handler.speed = handler.thing.speed; + } + + findEventHandlers(thing: Pokemon | Side | Battle, eventName: string, sourceThing?: Pokemon | null) { + let handlers: AnyObject[] = []; + if (thing instanceof Pokemon && thing.isActive) { + handlers = this.findPokemonEventHandlers(thing, `on${eventName}`); + for (const allyActive of thing.side.active) { + if (!allyActive || allyActive.fainted) continue; + handlers.push(...this.findPokemonEventHandlers(allyActive, `onAlly${eventName}`)); + handlers.push(...this.findPokemonEventHandlers(allyActive, `onAny${eventName}`)); + } + for (const foeActive of thing.side.foe.active) { + if (!foeActive || foeActive.fainted) continue; + handlers.push(...this.findPokemonEventHandlers(foeActive, `onFoe${eventName}`)); + handlers.push(...this.findPokemonEventHandlers(foeActive, `onAny${eventName}`)); + } + thing = thing.side; + } + if (sourceThing) { + handlers.push(...this.findPokemonEventHandlers(sourceThing, `onSource${eventName}`)); + } + if (thing instanceof Side) { + handlers.push(...this.findSideEventHandlers(thing, `on${eventName}`)); + handlers.push(...this.findSideEventHandlers(thing, `onAny${eventName}`)); + handlers.push(...this.findSideEventHandlers(thing.foe, `onFoe${eventName}`)); + handlers.push(...this.findSideEventHandlers(thing.foe, `onAny${eventName}`)); + } + handlers.push(...this.findBattleEventHandlers(`on${eventName}`)); + return handlers; + } + + findPokemonEventHandlers(pokemon: Pokemon, callbackName: string, getKey?: 'duration') { + let handlers: AnyObject[] = []; + + let status = pokemon.getStatus(); + // @ts-ignore + let callback = status[callbackName]; + if (callback !== undefined || (getKey && pokemon.statusData[getKey])) { + handlers.push({status, callback, statusData: pokemon.statusData, end: pokemon.clearStatus, thing: pokemon}); + this.resolveLastPriority(handlers, callbackName); + } + for (let i in pokemon.volatiles) { + let volatileData = pokemon.volatiles[i]; + let volatile = pokemon.getVolatile(i); + // @ts-ignore + callback = volatile[callbackName]; + if (callback !== undefined || (getKey && volatileData[getKey])) { + handlers.push({status: volatile, callback, statusData: volatileData, end: pokemon.removeVolatile, thing: pokemon}); + this.resolveLastPriority(handlers, callbackName); + } + } + let ability = pokemon.getAbility(); + // @ts-ignore + callback = ability[callbackName]; + if (callback !== undefined || (getKey && pokemon.abilityData[getKey])) { + handlers.push({status: ability, callback, statusData: pokemon.abilityData, end: pokemon.clearAbility, thing: pokemon}); + this.resolveLastPriority(handlers, callbackName); + } + let item = pokemon.getItem(); + // @ts-ignore + callback = item[callbackName]; + if (callback !== undefined || (getKey && pokemon.itemData[getKey])) { + handlers.push({status: item, callback, statusData: pokemon.itemData, end: pokemon.clearItem, thing: pokemon}); + this.resolveLastPriority(handlers, callbackName); + } + let species = pokemon.baseTemplate; + // @ts-ignore + callback = species[callbackName]; + if (callback !== undefined) { + handlers.push({status: species, callback, statusData: pokemon.speciesData, end() {}, thing: pokemon}); + this.resolveLastPriority(handlers, callbackName); + } + + return handlers; + } + + findBattleEventHandlers(callbackName: string, getKey?: 'duration') { + let callbackNamePriority = `${callbackName}Priority`; + let handlers: AnyObject[] = []; + + let callback; + for (let i in this.pseudoWeather) { + let pseudoWeatherData = this.pseudoWeather[i]; + let pseudoWeather = this.getPseudoWeather(i); + // @ts-ignore + callback = pseudoWeather[callbackName]; + if (callback !== undefined || (getKey && pseudoWeatherData[getKey])) { + handlers.push({status: pseudoWeather, callback, statusData: pseudoWeatherData, end: this.removePseudoWeather, thing: this}); + this.resolveLastPriority(handlers, callbackName); + } + } + let weather = this.getWeather(); + // @ts-ignore + callback = weather[callbackName]; + if (callback !== undefined || (getKey && this.weatherData[getKey])) { + handlers.push({ + status: weather, callback, statusData: this.weatherData, end: this.clearWeather, thing: this, + // @ts-ignore + priority: weather[callbackNamePriority] || 0}); + this.resolveLastPriority(handlers, callbackName); + } + let terrain = this.getTerrain(); + // @ts-ignore + callback = terrain[callbackName]; + if (callback !== undefined || (getKey && this.terrainData[getKey])) { + handlers.push({ + status: terrain, callback, statusData: this.terrainData, end: this.clearTerrain, thing: this, + // @ts-ignore + priority: terrain[callbackNamePriority] || 0}); + this.resolveLastPriority(handlers, callbackName); + } + let format = this.getFormat(); + // @ts-ignore + callback = format[callbackName]; + // @ts-ignore + if (callback !== undefined || (getKey && this.formatData[getKey])) { + handlers.push({ + status: format, callback, statusData: this.formatData, end() {}, thing: this, + // @ts-ignore + priority: format[callbackNamePriority] || 0}); + this.resolveLastPriority(handlers, callbackName); + } + // tslint:disable-next-line:no-conditional-assignment + if (this.events && (callback = this.events[callbackName]) !== undefined) { + for (const handler of callback) { + let statusData = (handler.target.effectType === 'Format') ? this.formatData : undefined; + handlers.push({ + status: handler.target, callback: handler.callback, statusData, end() {}, + thing: this, priority: handler.priority, order: handler.order, subOrder: handler.subOrder}); + } + } + return handlers; + } + + findSideEventHandlers(side: Side, callbackName: string, getKey?: 'duration') { + let handlers: AnyObject[] = []; + + for (let i in side.sideConditions) { + let sideConditionData = side.sideConditions[i]; + let sideCondition = side.getSideCondition(i); + // @ts-ignore + let callback = sideCondition[callbackName]; + if (callback !== undefined || (getKey && sideConditionData[getKey])) { + handlers.push({status: sideCondition, callback, statusData: sideConditionData, end: side.removeSideCondition, thing: side}); + this.resolveLastPriority(handlers, callbackName); + } + } + return handlers; + } + + /** + * Use this function to attach custom event handlers to a battle. See Battle#runEvent for + * more information on how to write callbacks for event handlers. + * + * Try to use this sparingly. Most event handlers can be simply placed in a format instead. + * + * this.onEvent(eventid, target, callback) + * will set the callback as an event handler for the target when eventid is called with the + * default priority. Currently only valid formats are supported as targets but this will + * eventually be expanded to support other target types. + * + * this.onEvent(eventid, target, priority, callback) + * will set the callback as an event handler for the target when eventid is called with the + * provided priority. Priority can either be a number or an object that contains the priority, + * order, and subOrder for the event handler as needed (undefined keys will use default values) + */ + onEvent(eventid: string, target: Format, ...rest: AnyObject[]) { // rest = [priority, callback] + if (!eventid) throw new TypeError("Event handlers must have an event to listen to"); + if (!target) throw new TypeError("Event handlers must have a target"); + if (!rest.length) throw new TypeError("Event handlers must have a callback"); + + if (target.effectType !== 'Format') { + throw new TypeError(`${target.name} is a ${target.effectType} but only Format targets are supported right now`); + } + + // tslint:disable-next-line:one-variable-per-declaration + let callback, priority, order, subOrder, data; + if (rest.length === 1) { + [callback] = rest; + priority = 0; + order = false; + subOrder = 0; + } else { + [data, callback] = rest; + if (typeof data === 'object') { + priority = data['priority'] || 0; + order = data['order'] || false; + subOrder = data['subOrder'] || 0; + } else { + priority = data || 0; + order = false; + subOrder = 0; + } + } + + let eventHandler = {callback, target, priority, order, subOrder}; + + if (!this.events) this.events = {}; + let callbackName = `on${eventid}`; + let eventHandlers = this.events[callbackName]; + if (eventHandlers === undefined) { + this.events[callbackName] = [eventHandler]; + } else { + eventHandlers.push(eventHandler); + } + } + + getPokemon(id: string | Pokemon) { + if (typeof id !== 'string') id = id.id; + for (const pokemon of this.p1.pokemon) { + if (pokemon.id === id) return pokemon; + } + for (const pokemon of this.p2.pokemon) { + if (pokemon.id === id) return pokemon; + } + return null; + } + + makeRequest(type?: string) { + if (type) { + this.currentRequest = type; + this.p1.clearChoice(); + this.p2.clearChoice(); + } else { + type = this.currentRequest; + } + + // default to no request + let p1request: any = null; + let p2request: any = null; + this.p1.currentRequest = ''; + this.p2.currentRequest = ''; + let switchTable = []; + + switch (type) { + case 'switch': { + for (const active of this.p1.active) { + switchTable.push(!!(active && active.switchFlag)); + } + if (switchTable.some(flag => flag === true)) { + this.p1.currentRequest = 'switch'; + p1request = {forceSwitch: switchTable, side: this.p1.getRequestData()}; + } + switchTable = []; + for (const active of this.p2.active) { + switchTable.push(!!(active && active.switchFlag)); + } + if (switchTable.some(flag => flag === true)) { + this.p2.currentRequest = 'switch'; + p2request = {forceSwitch: switchTable, side: this.p2.getRequestData()}; + } + break; + } + + case 'teampreview': + let teamLengthData = this.getFormat().teamLength; + let maxTeamSize = teamLengthData && teamLengthData.battle; + this.add('teampreview' + (maxTeamSize ? '|' + maxTeamSize : '')); + if (!maxTeamSize) maxTeamSize = 6; + this.p1.maxTeamSize = maxTeamSize; + this.p2.maxTeamSize = maxTeamSize; + this.p1.currentRequest = 'teampreview'; + p1request = {teamPreview: true, maxTeamSize, side: this.p1.getRequestData()}; + this.p2.currentRequest = 'teampreview'; + p2request = {teamPreview: true, maxTeamSize, side: this.p2.getRequestData()}; + break; + + default: { + this.p1.currentRequest = 'move'; + let activeData = this.p1.active.map(pokemon => pokemon && pokemon.getRequestData()); + p1request = {active: activeData, side: this.p1.getRequestData()}; + + this.p2.currentRequest = 'move'; + activeData = this.p2.active.map(pokemon => pokemon && pokemon.getRequestData()); + p2request = {active: activeData, side: this.p2.getRequestData()}; + break; + } + } + + if (p1request) { + if (!this.supportCancel || !p2request) p1request.noCancel = true; + this.p1.emitRequest(p1request); + } else { + this.p1.emitRequest({wait: true, side: this.p1.getRequestData()}); + } + + if (p2request) { + if (!this.supportCancel || !p1request) p2request.noCancel = true; + this.p2.emitRequest(p2request); + } else { + this.p2.emitRequest({wait: true, side: this.p2.getRequestData()}); + } + + if (this.p1.isChoiceDone() && this.p2.isChoiceDone()) { + throw new Error(`Choices are done immediately after a request`); + } + } + + tiebreak() { + if (this.ended) return false; + + this.inputLog.push(`>tiebreak`); + this.add('message', "Time's up! Going to tiebreaker..."); + const notFainted = this.sides.map(side => ( + side.pokemon.filter(pokemon => !pokemon.fainted).length + )); + this.add('-message', this.sides.map((side, i) => ( + `${side.name}: ${notFainted[i]} Pokemon left` + )).join('; ')); + const maxNotFainted = Math.max(...notFainted); + let tiedSides = this.sides.filter((side, i) => notFainted[i] === maxNotFainted); + if (tiedSides.length <= 1) { + return this.win(tiedSides[0]); + } + + const hpPercentage = tiedSides.map(side => ( + side.pokemon.map(pokemon => pokemon.hp / pokemon.maxhp).reduce((a, b) => a + b) * 100 / 6 + )); + this.add('-message', tiedSides.map((side, i) => ( + `${side.name}: ${Math.round(hpPercentage[i])}% total HP left` + )).join('; ')); + const maxPercentage = Math.max(...hpPercentage); + tiedSides = tiedSides.filter((side, i) => hpPercentage[i] === maxPercentage); + if (tiedSides.length <= 1) { + return this.win(tiedSides[0]); + } + + const hpTotal = tiedSides.map(side => ( + side.pokemon.map(pokemon => pokemon.hp).reduce((a, b) => a + b) + )); + this.add('-message', tiedSides.map((side, i) => ( + `${side.name}: ${Math.round(hpTotal[i])} total HP left` + )).join('; ')); + const maxTotal = Math.max(...hpTotal); + tiedSides = tiedSides.filter((side, i) => hpTotal[i] === maxTotal); + if (tiedSides.length <= 1) { + return this.win(tiedSides[0]); + } + return this.tie(); + } + + forceWin(side: PlayerSlot | null = null) { + if (this.ended) return false; + + if (side) { + this.inputLog.push(`>forcewin ${side}`); + } else { + this.inputLog.push(`>forcetie`); + } + return this.win(side); + } + + tie() { + return this.win(); + } + + win(side?: string | Side | null) { + if (this.ended) { + return false; + } + if (side === 'p1' || side === 'p2') { + side = this[side]; + } else if (side !== this.p1 && side !== this.p2) { + side = null; + } + this.winner = side ? side.name : ''; + + this.add(''); + if (side) { + this.add('win', side.name); + } else { + this.add('tie'); + } + this.ended = true; + this.active = false; + this.currentRequest = ''; + for (const s of this.sides) { + s.currentRequest = ''; + } + return true; + } + + switchIn(pokemon: Pokemon, pos?: number, sourceEffect: Effect | null = null) { + if (!pokemon || pokemon.isActive) return false; + if (!pos) pos = 0; + let side = pokemon.side; + if (pos >= side.active.length) { + throw new Error("Invalid switch position"); + } + let newMove = null; + if (side.active[pos]) { + let oldActive = side.active[pos]; + if (this.gen === 4 && sourceEffect) { + newMove = oldActive.lastMove; + } + if (this.cancelMove(oldActive)) { + for (const foeActive of side.foe.active) { + if (foeActive.isStale >= 2) { + oldActive.isStaleCon++; + oldActive.isStaleSource = 'drag'; + break; + } + } + } + if (oldActive.switchCopyFlag) { + oldActive.switchCopyFlag = false; + pokemon.copyVolatileFrom(oldActive); + } + } + if (newMove) pokemon.lastMove = newMove; + pokemon.isActive = true; + this.runEvent('BeforeSwitchIn', pokemon); + if (side.active[pos]) { + let oldActive = side.active[pos]; + oldActive.isActive = false; + oldActive.isStarted = false; + oldActive.usedItemThisTurn = false; + oldActive.position = pokemon.position; + pokemon.position = pos; + side.pokemon[pokemon.position] = pokemon; + side.pokemon[oldActive.position] = oldActive; + this.cancelMove(oldActive); + oldActive.clearVolatile(); + } + side.active[pos] = pokemon; + pokemon.activeTurns = 0; + for (let m in pokemon.moveSlots) { + pokemon.moveSlots[m].used = false; + } + this.add('switch', pokemon, pokemon.getDetails); + if (sourceEffect) this.log[this.log.length - 1] += `|[from]${sourceEffect.fullname}`; + this.insertQueue({pokemon, choice: 'runUnnerve'}); + this.insertQueue({pokemon, choice: 'runSwitch'}); + } + + canSwitch(side: Side) { + let canSwitchIn = []; + for (let i = side.active.length; i < side.pokemon.length; i++) { + let pokemon = side.pokemon[i]; + if (!pokemon.fainted) { + canSwitchIn.push(pokemon); + } + } + return canSwitchIn.length; + } + + getRandomSwitchable(side: Side) { + let canSwitchIn = []; + for (let i = side.active.length; i < side.pokemon.length; i++) { + let pokemon = side.pokemon[i]; + if (!pokemon.fainted) { + canSwitchIn.push(pokemon); + } + } + if (!canSwitchIn.length) { + return null; + } + return this.sample(canSwitchIn); + } + + dragIn(side: Side, pos?: number) { + if (!pos) pos = 0; + if (pos >= side.active.length) return false; + let pokemon = this.getRandomSwitchable(side); + if (!pokemon || pokemon.isActive) return false; + pokemon.isActive = true; + this.runEvent('BeforeSwitchIn', pokemon); + if (side.active[pos]) { + let oldActive = side.active[pos]; + if (!oldActive.hp) { + return false; + } + if (!this.runEvent('DragOut', oldActive)) { + return false; + } + this.runEvent('SwitchOut', oldActive); + oldActive.illusion = null; + this.singleEvent('End', this.getAbility(oldActive.ability), oldActive.abilityData, oldActive); + oldActive.isActive = false; + oldActive.isStarted = false; + oldActive.usedItemThisTurn = false; + oldActive.position = pokemon.position; + pokemon.position = pos; + side.pokemon[pokemon.position] = pokemon; + side.pokemon[oldActive.position] = oldActive; + if (this.cancelMove(oldActive)) { + for (const foeActive of side.foe.active) { + if (foeActive.isStale >= 2) { + oldActive.isStaleCon++; + oldActive.isStaleSource = 'drag'; + break; + } + } + } + oldActive.clearVolatile(); + } + side.active[pos] = pokemon; + pokemon.activeTurns = 0; + if (this.gen === 2) pokemon.draggedIn = this.turn; + for (let m in pokemon.moveSlots) { + pokemon.moveSlots[m].used = false; + } + this.add('drag', pokemon, pokemon.getDetails); + if (this.gen >= 5) { + this.singleEvent('PreStart', pokemon.getAbility(), pokemon.abilityData, pokemon); + this.runEvent('SwitchIn', pokemon); + if (!pokemon.hp) return true; + pokemon.isStarted = true; + if (!pokemon.fainted) { + this.singleEvent('Start', pokemon.getAbility(), pokemon.abilityData, pokemon); + this.singleEvent('Start', pokemon.getItem(), pokemon.itemData, pokemon); + } + } else { + this.insertQueue({pokemon, choice: 'runSwitch'}); + } + return true; + } + + swapPosition(pokemon: Pokemon, slot: number, attributes?: string | AnyObject) { + if (slot >= pokemon.side.active.length) { + throw new Error("Invalid swap position"); + } + let target = pokemon.side.active[slot]; + if (slot !== 1 && (!target || target.fainted)) return false; + + this.add('swap', pokemon, slot, attributes || ''); + + let side = pokemon.side; + side.pokemon[pokemon.position] = target; + side.pokemon[slot] = pokemon; + side.active[pokemon.position] = side.pokemon[pokemon.position]; + side.active[slot] = side.pokemon[slot]; + if (target) target.position = pokemon.position; + pokemon.position = slot; + return true; + } + + faint(pokemon: Pokemon, source?: Pokemon, effect?: Effect) { + pokemon.faint(source, effect); + } + + nextTurn() { + this.turn++; + let allStale = true; + let oneStale: Pokemon | null = null; + for (const side of this.sides) { + for (const pokemon of side.active) { + if (!pokemon) continue; + pokemon.moveThisTurn = ''; + pokemon.usedItemThisTurn = false; + pokemon.newlySwitched = false; + pokemon.moveLastTurnResult = pokemon.moveThisTurnResult; + pokemon.moveThisTurnResult = undefined; + pokemon.hurtThisTurn = false; + + 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 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--) { + let 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.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.side.foe.active) { + if (!source || source.fainted) continue; + let template = (source.illusion || source).template; + if (!template.abilities) continue; + for (let abilitySlot in template.abilities) { + // @ts-ignore + let abilityName = template.abilities[abilitySlot]; + if (abilityName === source.ability) { + // pokemon event was already run above so we don't need + // to run it again. + continue; + } + const ruleTable = this.getRuleTable(this.getFormat()); + if (!ruleTable.has('-illegal') && !this.getFormat().team) { + // hackmons format + continue; + } else if (abilitySlot === 'H' && template.unreleasedHidden) { + // unreleased hidden ability + continue; + } + let ability = this.getAbility(abilityName); + if (ruleTable.has('-ability:' + ability.id)) continue; + if (pokemon.knownType && !this.getImmunity('trapped', pokemon)) continue; + this.singleEvent('FoeMaybeTrapPokemon', ability, {}, pokemon, source); + } + } + } + + if (pokemon.fainted) continue; + if (pokemon.isStale < 2) { + if (pokemon.isStaleCon >= 2) { + if (pokemon.hp >= pokemon.isStaleHP - pokemon.maxhp / 100) { + pokemon.isStale++; + if (this.firstStaleWarned && pokemon.isStale < 2) { + switch (pokemon.isStaleSource) { + case 'struggle': + this.add('bigerror', `${pokemon.name} isn't losing HP from Struggle. If this continues, it will be classified as being in an endless loop`); + break; + case 'drag': + this.add('bigerror', `${pokemon.name} isn't losing PP or HP from being forced to switch. If this continues, it will be classified as being in an endless loop`); + break; + case 'switch': + this.add('bigerror', `${pokemon.name} isn't losing PP or HP from repeatedly switching. If this continues, it will be classified as being in an endless loop`); + break; + } + } + } + pokemon.isStaleCon = 0; + pokemon.isStalePPTurns = 0; + pokemon.isStaleHP = pokemon.hp; + } + if (pokemon.isStalePPTurns >= 5) { + if (pokemon.hp >= pokemon.isStaleHP - pokemon.maxhp / 100) { + pokemon.isStale++; + pokemon.isStaleSource = 'ppstall'; + if (this.firstStaleWarned && pokemon.isStale < 2) { + this.add('bigerror', `${pokemon.name} isn't losing PP or HP. If it keeps on not losing PP or HP, it will be classified as being in an endless loop.`); + } + } + pokemon.isStaleCon = 0; + pokemon.isStalePPTurns = 0; + pokemon.isStaleHP = pokemon.hp; + } + } + if (pokemon.getMoves().length === 0) { + pokemon.isStaleCon++; + pokemon.isStaleSource = 'struggle'; + } + if (pokemon.isStale < 2) { + allStale = false; + } else if (pokemon.isStale && !pokemon.staleWarned) { + oneStale = pokemon; + } + if (!pokemon.isStalePPTurns) { + pokemon.isStaleHP = pokemon.hp; + if (pokemon.activeTurns) pokemon.isStaleCon = 0; + } + if (pokemon.activeTurns) { + pokemon.isStalePPTurns++; + } + pokemon.activeTurns++; + } + side.faintedLastTurn = side.faintedThisTurn; + side.faintedThisTurn = false; + } + const ruleTable = this.getRuleTable(this.getFormat()); + if (ruleTable.has('endlessbattleclause')) { + if (oneStale) { + let activationWarning = ` - If all active Pok\u00e9mon go in an endless loop, Endless Battle Clause will activate.`; + if (allStale) activationWarning = ``; + let loopReason = ``; + switch (oneStale.isStaleSource) { + case 'struggle': + loopReason = `: it isn't losing HP from Struggle`; + break; + case 'drag': + loopReason = `: it isn't losing PP or HP from being forced to switch`; + break; + case 'switch': + loopReason = `: it isn't losing PP or HP from repeatedly switching`; + break; + case 'getleppa': + loopReason = `: it got a Leppa Berry it didn't start with`; + break; + case 'useleppa': + loopReason = `: it used a Leppa Berry it didn't start with`; + break; + case 'ppstall': + loopReason = `: it isn't losing PP or HP`; + break; + case 'ppoverflow': + loopReason = `: its PP overflowed`; + break; + } + this.add('bigerror', `${oneStale.name} is in an endless loop${loopReason}.${activationWarning}`); + oneStale.staleWarned = true; + this.firstStaleWarned = true; + } + if (allStale) { + this.add('message', `All active Pok\u00e9mon are in an endless loop. Endless Battle Clause activated!`); + let leppaPokemon = null; + for (const side of this.sides) { + for (const pokemon of side.pokemon) { + if (toId(pokemon.set.item) === 'leppaberry') { + if (leppaPokemon) { + leppaPokemon = null; // both sides have Leppa + this.add('-message', `Both sides started with a Leppa Berry.`); + } else { + leppaPokemon = pokemon; + } + break; + } + } + } + if (leppaPokemon) { + this.add('-message', `${leppaPokemon.side.name}'s ${leppaPokemon.name} started with a Leppa Berry and loses.`); + this.win(leppaPokemon.side.foe); + return; + } + this.win(); + return; + } + if ((this.turn >= 500 && this.turn % 100 === 0) || + (this.turn >= 900 && this.turn % 10 === 0) || + (this.turn >= 990)) { + const turnsLeft = 1000 - this.turn; + if (turnsLeft < 0) { + this.add('message', `It is turn 1000. Endless Battle Clause activated!`); + this.tie(); + return; + } + const turnsLeftText = (turnsLeft === 1 ? `1 turn` : `${turnsLeft} turns`); + this.add('bigerror', `You will auto-tie if the battle doesn't end in ${turnsLeftText} (on turn 1000).`); + } + } else { + if (allStale && !this.staleWarned) { + this.staleWarned = true; + this.add('bigerror', `If this format had Endless Battle Clause, it would have activated.`); + } else if (oneStale) { + this.add('bigerror', `${oneStale.name} is in an endless loop.`); + oneStale.staleWarned = true; + } + } + + 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. + let actives = []; + for (const side of this.sides) { + for (const pokemon of side.active) { + if (!pokemon || pokemon.fainted) continue; + actives.push(pokemon); + } + } + if (actives.length > 1 && !this.isAdjacent(actives[0], 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'); + } + + start() { + if (this.active) return; + + if (!this.p1 || !this.p2) { + // need two players to start + return; + } + + if (this.started) { + return; + } + this.activeTurns = 0; + this.started = true; + this.p2.foe = this.p1; + this.p1.foe = this.p2; + + for (const side of this.sides) { + this.add('teamsize', side.id, side.pokemon.length); + } + + this.add('gametype', this.gameType); + this.add('gen', this.gen); + + let format = this.getFormat(); + + 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 : ''); + } + this.add('seed', (side: Side) => Battle.logReplay(this.prngSeed.join(','), side)); + + if (format.onBegin) { + format.onBegin.call(this); + } + for (const rule of this.getRuleTable(format).keys()) { + if (rule.startsWith('+') || rule.startsWith('-') || rule.startsWith('!')) continue; + let subFormat = this.getFormat(rule); + if (subFormat.exists) { + if (subFormat.onBegin) subFormat.onBegin.call(this); + } + } + + if (!this.p1.pokemon[0] || !this.p2.pokemon[0]) { + throw new Error('Battle not started: A player has an empty team.'); + } + + this.residualEvent('TeamPreview'); + + this.addToQueue({choice: 'start'}); + this.midTurn = true; + if (!this.currentRequest) this.go(); + } + + boost( + boost: SparseBoostsTable, target: Pokemon | null = null, source: Pokemon | null = null, + effect: Effect | null = null, isSecondary: boolean = false, isSelf: boolean = false) { + if (this.event) { + if (!target) target = this.event.target; + if (!source) source = this.event.source; + if (!effect) effect = this.effect; + } + if (!target || !target.hp) return 0; + if (!target.isActive) return false; + if (this.gen > 5 && !target.side.foe.pokemonLeft) return false; + boost = this.runEvent('Boost', target, source, effect, Object.assign({}, boost)); + let success = null; + let boosted = false; + for (let i in boost) { + let currentBoost: SparseBoostsTable = {}; + // @ts-ignore + currentBoost[i] = boost[i]; + let boostBy = target.boostBy(currentBoost); + let msg = '-boost'; + // @ts-ignore + if (boost[i] < 0) { + msg = '-unboost'; + boostBy = -boostBy; + } + if (boostBy) { + success = true; + switch (effect && effect.id) { + case 'bellydrum': + this.add('-setboost', target, 'atk', target.boosts['atk'], '[from] move: Belly Drum'); + break; + case 'bellydrum2': + this.add(msg, target, i, boostBy, '[silent]'); + this.add('-hint', "In Gen 2, Belly Drum boosts by 2 when it fails."); + break; + case 'intimidate': case 'gooey': case 'tanglinghair': + this.add(msg, target, i, boostBy); + break; + case 'zpower': + this.add(msg, target, i, boostBy, '[zeffect]'); + break; + default: + if (!effect) break; + if (effect.effectType === 'Move') { + this.add(msg, target, i, boostBy); + } else { + if (effect.effectType === 'Ability' && !boosted) { + this.add('-ability', target, effect.name, 'boost'); + boosted = true; + } + this.add(msg, target, i, boostBy); + } + break; + } + this.runEvent('AfterEachBoost', target, source, effect, currentBoost); + } else if (effect && effect.effectType === 'Ability') { + if (isSecondary) this.add(msg, target, i, boostBy); + } else if (!isSecondary && !isSelf) { + this.add(msg, target, i, boostBy); + } + } + this.runEvent('AfterBoost', target, source, effect, boost); + return success; + } + + damage( + damage: number, target: Pokemon | null = null, source: Pokemon | null = null, + effect: 'drain' | 'recoil' | Effect | null = null, instafaint: boolean = false) { + if (this.event) { + if (!target) target = this.event.target; + if (!source) source = this.event.source; + if (!effect) effect = this.effect; + } + if (!target || !target.hp) return 0; + if (!target.isActive) return false; + if (!(damage || damage === 0)) return damage; + if (damage !== 0) damage = this.clampIntRange(damage, 1); + + if (typeof effect === 'string' || !effect) effect = this.getEffect(effect); + + if (effect.id !== 'struggle-recoil') { // Struggle recoil is not affected by effects + if (effect.effectType === 'Weather' && !target.runStatusImmunity(effect.id)) { + this.debug('weather immunity'); + return 0; + } + damage = this.runEvent('Damage', target, source, effect, damage); + if (!(damage || damage === 0)) { + this.debug('damage event failed'); + return damage; + } + } + if (damage !== 0) damage = this.clampIntRange(damage, 1); + + if (this.gen <= 1) { + if (this.currentMod === 'stadium' || + !['recoil', 'drain'].includes(effect.id) && effect.effectType !== 'Status') { + this.lastDamage = damage; + } + } + + damage = target.damage(damage, source, effect); + if (damage !== 0) target.hurtThisTurn = true; + if (source && effect.effectType === 'Move') source.lastDamage = damage; + + let name = effect.fullname; + if (name === 'tox') name = 'psn'; + switch (effect.id) { + case 'partiallytrapped': + this.add('-damage', target, target.getHealth, '[from] ' + this.effectData.sourceEffect.fullname, '[partiallytrapped]'); + break; + case 'powder': + this.add('-damage', target, target.getHealth, '[silent]'); + break; + case 'confused': + this.add('-damage', target, target.getHealth, '[from] confusion'); + break; + default: + if (effect.effectType === 'Move' || !name) { + this.add('-damage', target, target.getHealth); + } else if (source && (source !== target || effect.effectType === 'Ability')) { + this.add('-damage', target, target.getHealth, '[from] ' + name, '[of] ' + source); + } else { + this.add('-damage', target, target.getHealth, '[from] ' + name); + } + break; + } + + if (damage) { + if (this.gen <= 1 && effect.recoil && source) { + this.damage(this.clampIntRange(Math.floor(damage * effect.recoil[0] / effect.recoil[1]), 1), source, target, 'recoil'); + } + if (this.gen <= 4 && effect.drain && source) { + this.heal(this.clampIntRange(Math.floor(damage * effect.drain[0] / effect.drain[1]), 1), source, target, 'drain'); + } + if (this.gen > 4 && effect.drain && source) { + this.heal(Math.round(damage * effect.drain[0] / effect.drain[1]), source, target, 'drain'); + } + } + + // @ts-ignore TODO: AfterDamage passes an Effect, not an ActiveMove + if (!effect.flags) effect.flags = {}; + + if (instafaint && target.hp <= 0) { + this.debug('instafaint: ' + this.faintQueue.map(entry => entry.target.name)); + this.faintMessages(true); + if (this.gen <= 2) { + target.faint(); + if (this.gen <= 1) this.queue = []; + } + } else { + damage = this.runEvent('AfterDamage', target, source, effect, damage); + } + + return damage; + } + + directDamage(damage: number, target?: Pokemon, source: Pokemon | null = null, effect: Effect | null = null) { + if (this.event) { + if (!target) target = this.event.target; + if (!source) source = this.event.source; + if (!effect) effect = this.effect; + } + if (!target || !target.hp) return 0; + if (!damage) return 0; + damage = this.clampIntRange(damage, 1); + + if (typeof effect === 'string' || !effect) effect = this.getEffect(effect); + + // In Gen 1 BUT NOT STADIUM, Substitute also takes confusion and HJK recoil damage + if (this.gen <= 1 && this.currentMod !== 'stadium' && + ['confusion', 'highjumpkick'].includes(effect.id) && target.volatiles['substitute']) { + target.volatiles['substitute'].hp -= damage; + if (target.volatiles['substitute'].hp <= 0) { + target.removeVolatile('substitute'); + target.subFainted = true; + } else { + this.add('-activate', target, 'Substitute', '[damage]'); + } + return damage; + } + + damage = target.damage(damage, source, effect); + switch (effect.id) { + case 'strugglerecoil': + this.add('-damage', target, target.getHealth, '[from] recoil'); + break; + case 'confusion': + this.add('-damage', target, target.getHealth, '[from] confusion'); + break; + default: + this.add('-damage', target, target.getHealth); + break; + } + if (target.fainted) this.faint(target); + return damage; + } + + heal(damage: number, target?: Pokemon, source: Pokemon | null = null, effect: 'drain' | Effect | null = null) { + if (this.event) { + if (!target) target = this.event.target; + if (!source) source = this.event.source; + if (!effect) effect = this.effect; + } + if (effect === 'drain') effect = this.getEffect(effect); + if (damage && damage <= 1) damage = 1; + damage = this.trunc(damage); + // for things like Liquid Ooze, the Heal event still happens when nothing is healed. + damage = this.runEvent('TryHeal', target, source, effect, damage); + if (!damage) return damage; + if (!target || !target.hp) return false; + if (!target.isActive) return false; + if (target.hp >= target.maxhp) return false; + let finalDamage = target.heal(damage, source, effect); + switch (effect && effect.id) { + case 'leechseed': + case 'rest': + this.add('-heal', target, target.getHealth, '[silent]'); + break; + case 'drain': + this.add('-heal', target, target.getHealth, '[from] drain', '[of] ' + source); + break; + case 'wish': + break; + case 'zpower': + this.add('-heal', target, target.getHealth, '[zeffect]'); + break; + default: + if (!effect) break; + if (effect.effectType === 'Move') { + this.add('-heal', target, target.getHealth); + } else if (source && source !== target) { + this.add('-heal', target, target.getHealth, '[from] ' + effect.fullname, '[of] ' + source); + } else { + this.add('-heal', target, target.getHealth, '[from] ' + effect.fullname); + } + break; + } + this.runEvent('Heal', target, source, effect, finalDamage); + return finalDamage; + } + + chain(previousMod: number | number[], nextMod: number | number[]) { + // previousMod or nextMod can be either a number or an array [numerator, denominator] + if (Array.isArray(previousMod)) { + previousMod = this.trunc(previousMod[0] * 4096 / previousMod[1]); + } else { + previousMod = this.trunc(previousMod * 4096); + } + + if (Array.isArray(nextMod)) { + nextMod = this.trunc(nextMod[0] * 4096 / nextMod[1]); + } else { + nextMod = this.trunc(nextMod * 4096); + } + return ((previousMod * nextMod + 2048) >> 12) / 4096; // M'' = ((M * M') + 0x800) >> 12 + } + + chainModify(numerator: number | number[], denominator?: number) { + let previousMod = this.trunc(this.event.modifier * 4096); + + if (Array.isArray(numerator)) { + denominator = numerator[1]; + numerator = numerator[0]; + } + let nextMod = 0; + if (this.event.ceilModifier) { + nextMod = Math.ceil(numerator * 4096 / (denominator || 1)); + } else { + nextMod = this.trunc(numerator * 4096 / (denominator || 1)); + } + + this.event.modifier = ((previousMod * nextMod + 2048) >> 12) / 4096; + } + + modify(value: number, numerator: number | number[], denominator?: number) { + // You can also use: + // modify(value, [numerator, denominator]) + // modify(value, fraction) - assuming you trust JavaScript's floating-point handler + if (!denominator) denominator = 1; + if (Array.isArray(numerator)) { + denominator = numerator[1]; + numerator = numerator[0]; + } + const tr = this.trunc; + let modifier = tr(numerator * 4096 / denominator); + return tr((tr(value * modifier) + 2048 - 1) / 4096); + } + + getCategory(move: string | Move) { + move = this.getMove(move); + return move.category || 'Physical'; + } + + /** + * 0 is a success dealing 0 damage, such as from False Swipe at 1 HP. + * + * Normal PS return value rules apply: + * undefined = success, null = silent failure, false = loud failure + */ + getDamage( + pokemon: Pokemon, target: Pokemon, move: string | number | ActiveMove, + suppressMessages: boolean = false): number | undefined | null | false { + if (typeof move === 'string') move = this.getActiveMove(move); + + if (typeof move === 'number') { + let basePower = move; + // @ts-ignore + move = (new Data.Move({ + basePower, + type: '???', + category: 'Physical', + willCrit: false, + })) 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, pokemon, target); + } + if (move.damage === 'level') { + return pokemon.level; + } else if (move.damage) { + return move.damage; + } + + let category = this.getCategory(move); + let defensiveCategory = move.defensiveCategory || category; + + let basePower: number | false | null = move.basePower; + if (move.basePowerCallback) { + basePower = move.basePowerCallback.call(this, pokemon, target, move); + } + if (!basePower) { + return basePower === 0 ? undefined : basePower; + } + basePower = this.clampIntRange(basePower, 1); + + let critMult; + let critRatio = this.runEvent('ModifyCritRatio', pokemon, target, move, move.critRatio || 0); + if (this.gen <= 5) { + critRatio = this.clampIntRange(critRatio, 0, 5); + critMult = [0, 16, 8, 4, 3, 2]; + } else { + critRatio = this.clampIntRange(critRatio, 0, 4); + if (this.gen === 6) { + critMult = [0, 16, 8, 2, 1]; + } else { + critMult = [0, 24, 8, 2, 1]; + } + } + + move.crit = move.willCrit || false; + if (move.willCrit === undefined) { + if (critRatio) { + move.crit = this.randomChance(1, critMult[critRatio]); + } + } + + if (move.crit) { + move.crit = this.runEvent('CriticalHit', target, null, move); + } + + // happens after crit calculation + basePower = this.runEvent('BasePower', pokemon, target, move, basePower, true); + + if (!basePower) return 0; + basePower = this.clampIntRange(basePower, 1); + + let level = pokemon.level; + + let attacker = pokemon; + let defender = target; + let attackStat = category === 'Physical' ? 'atk' : 'spa'; + let defenseStat = defensiveCategory === 'Physical' ? 'def' : 'spd'; + let statTable = {atk: 'Atk', def: 'Def', spa: 'SpA', spd: 'SpD', spe: 'Spe'}; + let attack; + let defense; + + // @ts-ignore + let atkBoosts = move.useTargetOffensive ? defender.boosts[attackStat] : attacker.boosts[attackStat]; + // @ts-ignore + let defBoosts = move.useSourceDefensive ? attacker.boosts[defenseStat] : defender.boosts[defenseStat]; + + let ignoreNegativeOffensive = !!move.ignoreNegativeOffensive; + let ignorePositiveDefensive = !!move.ignorePositiveDefensive; + + if (move.crit) { + ignoreNegativeOffensive = true; + ignorePositiveDefensive = true; + } + let ignoreOffensive = !!(move.ignoreOffensive || (ignoreNegativeOffensive && atkBoosts < 0)); + let ignoreDefensive = !!(move.ignoreDefensive || (ignorePositiveDefensive && defBoosts > 0)); + + if (ignoreOffensive) { + this.debug('Negating (sp)atk boost/penalty.'); + atkBoosts = 0; + } + if (ignoreDefensive) { + this.debug('Negating (sp)def boost/penalty.'); + defBoosts = 0; + } + + if (move.useTargetOffensive) { + attack = defender.calculateStat(attackStat, atkBoosts); + } else { + attack = attacker.calculateStat(attackStat, atkBoosts); + } + + if (move.useSourceDefensive) { + defense = attacker.calculateStat(defenseStat, defBoosts); + } else { + defense = defender.calculateStat(defenseStat, defBoosts); + } + + // Apply Stat Modifiers + // @ts-ignore + attack = this.runEvent('Modify' + statTable[attackStat], attacker, defender, move, attack); + // @ts-ignore + defense = this.runEvent('Modify' + statTable[defenseStat], defender, attacker, move, defense); + + const tr = this.trunc; + + // int(int(int(2 * L / 5 + 2) * A * P / D) / 50); + let 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, pokemon, target, move, suppressMessages); + } + + modifyDamage(baseDamage: number, pokemon: Pokemon, target: Pokemon, move: ActiveMove, suppressMessages: boolean = false) { + const tr = this.trunc; + if (!move.type) move.type = '???'; + let type = move.type; + + baseDamage += 2; + + // multi-target modifier (doubles only) + if (move.spreadHit) { + let spreadModifier = move.spreadModifier || 0.75; + this.debug('Spread modifier: ' + spreadModifier); + baseDamage = this.modify(baseDamage, spreadModifier); + } + + // weather modifier + baseDamage = this.runEvent('WeatherModifyDamage', pokemon, target, move, baseDamage); + + // crit - not a modifier + if (move.crit) { + baseDamage = tr(baseDamage * (move.critModifier || (this.gen >= 6 ? 1.5 : 2))); + } + + // random factor - also not a modifier + baseDamage = this.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.modify(baseDamage, move.stab || 1.5); + } + // types + move.typeMod = target.runEffectiveness(move); + + move.typeMod = this.clampIntRange(move.typeMod, -6, 6); + if (move.typeMod > 0) { + if (!suppressMessages) this.add('-supereffective', target); + + for (let i = 0; i < move.typeMod; i++) { + baseDamage *= 2; + } + } + if (move.typeMod < 0) { + if (!suppressMessages) this.add('-resisted', target); + + for (let i = 0; i > move.typeMod; i--) { + baseDamage = tr(baseDamage / 2); + } + } + + if (move.crit && !suppressMessages) this.add('-crit', target); + + if (pokemon.status === 'brn' && move.category === 'Physical' && !pokemon.hasAbility('guts')) { + if (this.gen < 6 || move.id !== 'facade') { + baseDamage = this.modify(baseDamage, 0.5); + } + } + + // Generation 5, but nothing later, sets damage to 1 before the final damage modifiers + if (this.gen === 5 && !baseDamage) baseDamage = 1; + + // Final modifier. Modifiers that modify damage after min damage check, such as Life Orb. + baseDamage = this.runEvent('ModifyDamage', pokemon, target, move, baseDamage); + + if (move.isZPowered && move.zBrokeProtect) { + baseDamage = this.modify(baseDamage, 0.25); + this.add('-zbroken', target); + } + + // Generation 6-7 moves the check for minimum 1 damage after the final modifier... + if (this.gen !== 5 && !baseDamage) return 1; + + // ...but 16-bit truncation happens even later, and can truncate to 0 + return tr(baseDamage, 16); + } + + randomizer(baseDamage: number) { + const tr = this.trunc; + return tr(tr(baseDamage * (100 - this.random(16))) / 100); + } + + /** + * Returns whether a proposed target for a move is valid. + */ + validTargetLoc(targetLoc: number, source: Pokemon, targetType: string) { + if (targetLoc === 0) return true; + let numSlots = source.side.active.length; + if (!Math.abs(targetLoc) && Math.abs(targetLoc) > numSlots) return false; + + let sourceLoc = -(source.position + 1); + let isFoe = (targetLoc > 0); + let isAdjacent = (isFoe ? Math.abs(-(numSlots + 1 - targetLoc) - sourceLoc) <= 1 : Math.abs(targetLoc - sourceLoc) === 1); + let isSelf = (sourceLoc === targetLoc); + + switch (targetType) { + case 'randomNormal': + case 'scripted': + case 'normal': + return isAdjacent; + case 'adjacentAlly': + return isAdjacent && !isFoe; + case 'adjacentAllyOrSelf': + return isAdjacent && !isFoe || isSelf; + case 'adjacentFoe': + return isAdjacent && isFoe; + case 'any': + return !isSelf; + } + return false; + } + + getTargetLoc(target: Pokemon, source: Pokemon) { + if (target.side === source.side) { + return -(target.position + 1); + } else { + return target.position + 1; + } + } + + validTarget(target: Pokemon, source: Pokemon, targetType: string) { + return this.validTargetLoc(this.getTargetLoc(target, source), source, targetType); + } + + getTarget(pokemon: Pokemon, move: string | Move, targetLoc: number) { + move = this.getMove(move); + let target; + // Fails if the target is the user and the move can't target its own position + if (['adjacentAlly', 'any', 'normal'].includes(move.target) && targetLoc === -(pokemon.position + 1) && + !pokemon.volatiles['twoturnmove'] && !pokemon.volatiles['iceball'] && !pokemon.volatiles['rollout']) { + if (move.isFutureMove) return pokemon; + return null; + } + if (move.target !== 'randomNormal' && this.validTargetLoc(targetLoc, pokemon, move.target)) { + if (targetLoc > 0) { + target = pokemon.side.foe.active[targetLoc - 1]; + } else { + target = pokemon.side.active[-targetLoc - 1]; + } + if (target) { + if (!target.fainted) { + // target exists and is not fainted + return target; + } else if (target.side === pokemon.side) { + // fainted allied targets don't retarget + return null; + } + } + // chosen target not valid, retarget randomly with resolveTarget + } + return this.resolveTarget(pokemon, move); + } + + resolveTarget(pokemon: Pokemon, move: string | Move) { + // A move was used without a chosen target + + // For instance: Metronome chooses Ice Beam. Since the user didn't + // choose a target when choosing Metronome, Ice Beam's target must + // be chosen randomly. + + // The target is chosen randomly from possible targets, EXCEPT that + // moves that can target either allies or foes will only target foes + // when used without an explicit target. + + move = this.getMove(move); + if (move.target === 'adjacentAlly') { + let allyActives = pokemon.side.active; + let adjacentAllies = [allyActives[pokemon.position - 1], allyActives[pokemon.position + 1]]; + adjacentAllies = adjacentAllies.filter(active => active && !active.fainted); + if (adjacentAllies.length) return this.sample(adjacentAllies); + return null; + } + if (move.target === 'self' || move.target === 'all' || move.target === 'allySide' || + move.target === 'allyTeam' || move.target === 'adjacentAllyOrSelf') { + return pokemon; + } + if (pokemon.side.active.length > 2) { + if (move.target === 'adjacentFoe' || move.target === 'normal' || move.target === 'randomNormal') { + // even if a move can target an ally, auto-resolution will never make it target an ally + // i.e. if both your opponents faint before you use Flamethrower, it will fail instead of targeting your all + let foeActives = pokemon.side.foe.active; + let frontPosition = foeActives.length - 1 - pokemon.position; + let adjacentFoes = foeActives.slice(frontPosition < 1 ? 0 : frontPosition - 1, frontPosition + 2); + adjacentFoes = adjacentFoes.filter(active => active && !active.fainted); + if (adjacentFoes.length) return this.sample(adjacentFoes); + // no valid target at all, return a foe for any possible redirection + } + } + return pokemon.side.foe.randomActive() || pokemon.side.foe.active[0]; + } + + checkFainted() { + for (const pokemon of this.p1.active) { + if (pokemon.fainted) { + pokemon.status = 'fnt'; + pokemon.switchFlag = true; + } + } + for (const pokemon of this.p2.active) { + if (pokemon.fainted) { + pokemon.status = 'fnt'; + pokemon.switchFlag = true; + } + } + } + + faintMessages(lastFirst: boolean = false) { + if (this.ended) return; + if (!this.faintQueue.length) return false; + if (lastFirst) { + this.faintQueue.unshift(this.faintQueue[this.faintQueue.length - 1]); + this.faintQueue.pop(); + } + let faintData; + while (this.faintQueue.length) { + faintData = this.faintQueue[0]; + this.faintQueue.shift(); + if (!faintData.target.fainted && this.runEvent('BeforeFaint', faintData.target, faintData.source, faintData.effect)) { + this.add('faint', faintData.target); + faintData.target.side.pokemonLeft--; + this.runEvent('Faint', faintData.target, faintData.source, faintData.effect); + this.singleEvent('End', this.getAbility(faintData.target.ability), faintData.target.abilityData, faintData.target); + faintData.target.clearVolatile(false); + faintData.target.fainted = true; + faintData.target.isActive = false; + faintData.target.isStarted = false; + faintData.target.side.faintedThisTurn = true; + } + } + + if (this.gen <= 1) { + // in gen 1, fainting skips the rest of the turn + // residuals don't exist in gen 1 + this.queue = []; + } else if (this.gen <= 3 && this.gameType === 'singles') { + // in gen 3 or earlier, fainting in singles skips to residuals + for (const side of this.sides) { + for (const pokemon of side.active) { + if (this.gen <= 2) { + // in gen 2, fainting skips moves only + this.cancelMove(pokemon); + } else { + // in gen 3, fainting skips all moves and switches + this.cancelAction(pokemon); + } + } + } + } + + if (!this.p1.pokemonLeft && !this.p2.pokemonLeft) { + this.win(faintData ? faintData.target.side : null); + return true; + } + if (!this.p1.pokemonLeft) { + this.win(this.p2); + return true; + } + if (!this.p2.pokemonLeft) { + this.win(this.p1); + return true; + } + return false; + } + + /** + * Takes an object describing an action, and fills it out into a full + * Action object. + */ + resolveAction(action: AnyObject, midTurn: boolean = false): Actions["Action"] { + if (!action) throw new Error(`Action not passed to resolveAction`); + + if (!action.side && action.pokemon) action.side = action.pokemon.side; + if (!action.move && action.moveid) action.move = this.getActiveMove(action.moveid); + if (!action.choice && action.move) action.choice = 'move'; + if (!action.priority && action.priority !== 0) { + let priorities = { + beforeTurn: 100, + beforeTurnMove: 99, + switch: 7, + runUnnerve: 7.3, + runSwitch: 7.2, + runPrimal: 7.1, + instaswitch: 101, + megaEvo: 6.9, + residual: -100, + team: 102, + start: 101, + }; + if (action.choice in priorities) { + // @ts-ignore + action.priority = priorities[action.choice]; + } + } + if (!midTurn) { + if (action.choice === 'move') { + if (!action.zmove && action.move.beforeTurnCallback) { + this.addToQueue({choice: 'beforeTurnMove', pokemon: action.pokemon, move: action.move, targetLoc: action.targetLoc}); + } + if (action.mega) { + // TODO: Check that the Pokémon is not affected by Sky Drop. + // (This is currently being done in `runMegaEvo`). + this.addToQueue({ + choice: 'megaEvo', + pokemon: action.pokemon, + }); + } + } else if (action.choice === 'switch' || action.choice === 'instaswitch') { + if (typeof action.pokemon.switchFlag === 'string') { + action.sourceEffect = this.getEffect(action.pokemon.switchFlag); + } + action.pokemon.switchFlag = false; + if (!action.speed) action.speed = action.pokemon.getActionSpeed(); + } + } + + let deferPriority = this.gen >= 7 && action.mega && action.mega !== 'done'; + if (action.move) { + let target = null; + action.move = this.getActiveMove(action.move); + + if (!action.targetLoc) { + target = this.resolveTarget(action.pokemon, action.move); + // TODO: what actually happens here? + if (target) action.targetLoc = this.getTargetLoc(target, action.pokemon); + } + + if (!action.priority && !deferPriority) { + let move = action.move; + if (action.zmove) { + let zMoveName = this.getZMove(action.move, action.pokemon, true); + if (zMoveName) { + let zMove = this.getActiveMove(zMoveName); + if (zMove.exists && zMove.isZ) { + move = zMove; + } + } + } + let priority = this.runEvent('ModifyPriority', action.pokemon, target, move, move.priority); + action.priority = priority; + // In Gen 6, Quick Guard blocks moves with artificially enhanced priority. + if (this.gen > 5) action.move.priority = priority; + } + } + if (!action.speed) { + if ((action.choice === 'switch' || action.choice === 'instaswitch') && action.target) { + action.speed = action.target.getActionSpeed(); + } else if (!action.pokemon) { + action.speed = 1; + } else if (!deferPriority) { + action.speed = action.pokemon.getActionSpeed(); + } + } + return action as any; + } + + /** + * Adds the action last in the queue. Mostly used before sortQueue. + */ + addToQueue(action: AnyObject | AnyObject[]) { + if (Array.isArray(action)) { + for (const curAction of action) { + this.addToQueue(curAction); + } + return; + } + + if (action.choice === 'pass') return; + this.queue.push(this.resolveAction(action)); + } + + sortQueue() { + this.speedSort(this.queue); + } + + /** + * Inserts the passed action into the action queue when it normally + * would have happened (sorting by priority/speed), without + * re-sorting the existing actions. + */ + insertQueue(chosenAction: AnyObject | AnyObject[], midTurn: boolean = false) { + if (Array.isArray(chosenAction)) { + for (const subAction of chosenAction) { + this.insertQueue(subAction); + } + return; + } + + if (chosenAction.pokemon) chosenAction.pokemon.updateSpeed(); + const action = this.resolveAction(chosenAction, midTurn); + for (const [i, curAction] of this.queue.entries()) { + if (this.comparePriority(action, curAction) < 0) { + this.queue.splice(i, 0, action); + return; + } + } + this.queue.push(action); + } + + /** + * Makes the passed action happen next (skipping speed order). + */ + prioritizeAction(action: Actions["MoveAction"] | Actions["SwitchAction"], source?: Pokemon, sourceEffect?: Effect) { + if (this.event) { + if (!sourceEffect) sourceEffect = this.effect; + } + for (const [i, curAction] of this.queue.entries()) { + if (curAction === action) { + this.queue.splice(i, 1); + break; + } + } + action.sourceEffect = sourceEffect; + this.queue.unshift(action); + } + + willAct() { + for (const action of this.queue) { + if (action.choice === 'move' || action.choice === 'switch' || action.choice === 'instaswitch' || action.choice === 'shift') { + return action; + } + } + return null; + } + + willMove(pokemon: Pokemon) { + if (pokemon.fainted) return false; + for (const action of this.queue) { + if (action.choice === 'move' && action.pokemon === pokemon) { + return action; + } + } + return null; + } + + cancelAction(pokemon: Pokemon) { + let success = false; + this.queue = this.queue.filter(action => { + if (action.pokemon === pokemon && action.priority >= -100) { + success = true; + return false; + } + return true; + }); + return success; + } + + cancelMove(pokemon: Pokemon) { + for (const [i, action] of this.queue.entries()) { + if (action.choice === 'move' && action.pokemon === pokemon) { + this.queue.splice(i, 1); + return true; + } + } + return false; + } + + willSwitch(pokemon: Pokemon) { + for (const action of this.queue) { + if ((action.choice === 'switch' || action.choice === 'instaswitch') && action.pokemon === pokemon) { + return action; + } + } + return false; + } + + runAction(action: Actions["Action"]) { + // returns whether or not we ended in a callback + switch (action.choice) { + case 'start': { + // I GIVE UP, WILL WRESTLE WITH EVENT SYSTEM LATER + let format = this.getFormat(); + + // Remove Pokémon duplicates remaining after `team` decisions. + this.p1.pokemon = this.p1.pokemon.slice(0, this.p1.pokemonLeft); + this.p2.pokemon = this.p2.pokemon.slice(0, this.p2.pokemonLeft); + + if (format.teamLength && format.teamLength.battle) { + // Trim the team: not all of the Pokémon brought to Preview will battle. + this.p1.pokemon = this.p1.pokemon.slice(0, format.teamLength.battle); + this.p1.pokemonLeft = this.p1.pokemon.length; + this.p2.pokemon = this.p2.pokemon.slice(0, format.teamLength.battle); + this.p2.pokemonLeft = this.p2.pokemon.length; + } + + this.add('start'); + for (let pos = 0; pos < this.p1.active.length; pos++) { + this.switchIn(this.p1.pokemon[pos], pos); + } + for (let pos = 0; pos < this.p2.active.length; pos++) { + this.switchIn(this.p2.pokemon[pos], pos); + } + for (const pokemon of this.p1.pokemon) { + this.singleEvent('Start', this.getEffect(pokemon.species), pokemon.speciesData, pokemon); + } + for (const pokemon of this.p2.pokemon) { + this.singleEvent('Start', this.getEffect(pokemon.species), pokemon.speciesData, pokemon); + } + this.midTurn = true; + break; + } + + case 'move': + if (!action.pokemon.isActive) return false; + if (action.pokemon.fainted) return false; + this.runMove(action.move, action.pokemon, action.targetLoc, action.sourceEffect, action.zmove); + break; + case 'megaEvo': + this.runMegaEvo(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); + let 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 'event': + // @ts-ignore Easier than defining a custom event attribute tbh + this.runEvent(action.event, action.pokemon); + break; + case 'team': { + action.pokemon.side.pokemon.splice(action.index, 0, 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.data.Abilities.naturalcure) { + this.singleEvent('CheckShow', this.getAbility('naturalcure'), null, action.pokemon); + } + if (action.pokemon.hp) { + action.pokemon.beingCalledBack = true; + const sourceEffect = action.sourceEffect; + // @ts-ignore + if (sourceEffect && sourceEffect.selfSwitch === 'copyvolatile') { + action.pokemon.switchCopyFlag = true; + } + if (!action.pokemon.switchCopyFlag) { + this.runEvent('BeforeSwitchOut', action.pokemon); + if (this.gen >= 5) { + this.eachEvent('Update'); + } + } + if (!this.runEvent('SwitchOut', action.pokemon)) { + // 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 BW or earlier interrupts + // a switch-out. + break; + } + } + action.pokemon.illusion = null; + this.singleEvent('End', this.getAbility(action.pokemon.ability), action.pokemon.abilityData, action.pokemon); + if (!action.pokemon.hp && !action.pokemon.fainted) { + // a pokemon fainted from Pursuit before it could switch + if (this.gen <= 4) { + // in gen 2-4, the switch still happens + action.priority = -101; + this.queue.unshift(action); + this.add('-hint', 'Pursuit target fainted, switch continues in gen 2-4'); + break; + } + // in gen 5+, the switch is cancelled + this.debug('A Pokemon can\'t switch between when it runs out of HP and when it faints'); + break; + } + if (action.target.isActive) { + this.add('-hint', 'Switch failed; switch target is already active'); + break; + } + if (action.choice === 'switch' && action.pokemon.activeTurns === 1) { + for (const foeActive of action.pokemon.side.foe.active) { + if (foeActive.isStale >= 2) { + action.pokemon.isStaleCon++; + action.pokemon.isStaleSource = 'switch'; + break; + } + } + } + + this.switchIn(action.target, action.pokemon.position, action.sourceEffect); + break; + case 'runUnnerve': + this.singleEvent('PreStart', action.pokemon.getAbility(), action.pokemon.abilityData, action.pokemon); + break; + case 'runSwitch': + this.runEvent('SwitchIn', action.pokemon); + if (this.gen <= 2 && !action.pokemon.side.faintedThisTurn && action.pokemon.draggedIn !== this.turn) { + this.runEvent('AfterSwitchInSelf', action.pokemon); + } + if (!action.pokemon.hp) break; + action.pokemon.isStarted = true; + if (!action.pokemon.fainted) { + this.singleEvent('Start', action.pokemon.getAbility(), action.pokemon.abilityData, action.pokemon); + action.pokemon.abilityOrder = this.abilityOrder++; + this.singleEvent('Start', action.pokemon.getItem(), action.pokemon.itemData, action.pokemon); + } + delete action.pokemon.draggedIn; + break; + case 'runPrimal': + if (!action.pokemon.transformed) this.singleEvent('Primal', action.pokemon.getItem(), action.pokemon.itemData, action.pokemon); + break; + case 'shift': { + if (!action.pokemon.isActive) return false; + if (action.pokemon.fainted) return false; + action.pokemon.activeTurns--; + this.swapPosition(action.pokemon, 1); + for (const foeActive of action.pokemon.side.foe.active) { + if (foeActive.isStale >= 2) { + action.pokemon.isStaleCon++; + action.pokemon.isStaleSource = 'switch'; + break; + } + } + break; + } + + case 'beforeTurn': + this.eachEvent('BeforeTurn'); + break; + case 'residual': + this.add(''); + this.clearActiveMove(true); + this.updateSpeed(); + this.residualEvent('Residual'); + this.add('upkeep'); + break; + } + + // phazing (Roar, etc) + for (const pokemon of this.p1.active) { + if (pokemon.forceSwitchFlag) { + if (pokemon.hp) this.dragIn(pokemon.side, pokemon.position); + pokemon.forceSwitchFlag = false; + } + } + for (const pokemon of this.p2.active) { + if (pokemon.forceSwitchFlag) { + if (pokemon.hp) this.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.length || (this.gen <= 3 && ['move', 'residual'].includes(this.queue[0].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. + const moveIndex = this.queue.findIndex(queuedAction => queuedAction.pokemon === action.pokemon && queuedAction.choice === 'move'); + if (moveIndex >= 0) { + const moveAction = this.queue.splice(moveIndex, 1)[0] as Actions["MoveAction"]; + moveAction.mega = 'done'; + this.insertQueue(moveAction, true); + } + return false; + } else if (this.queue.length && this.queue[0].choice === 'instaswitch') { + return false; + } + + let p1switch = this.p1.active.some(mon => mon && !!mon.switchFlag); + let p2switch = this.p2.active.some(mon => mon && !!mon.switchFlag); + + if (p1switch && !this.canSwitch(this.p1)) { + for (const pokemon of this.p1.active) { + pokemon.switchFlag = false; + } + p1switch = false; + } + if (p2switch && !this.canSwitch(this.p2)) { + for (const pokemon of this.p2.active) { + pokemon.switchFlag = false; + } + p2switch = false; + } + + if (p1switch || p2switch) { + if (this.gen >= 5) { + this.eachEvent('Update'); + } + this.makeRequest('switch'); + return true; + } + + this.eachEvent('Update'); + + return false; + } + + go() { + this.add(''); + if (this.currentRequest) { + this.currentRequest = ''; + } + + if (!this.midTurn) { + this.queue.push(this.resolveAction({choice: 'residual'})); + this.queue.unshift(this.resolveAction({choice: 'beforeTurn'})); + this.midTurn = true; + } + + while (this.queue.length) { + let action = this.queue[0]; + this.queue.shift(); + + this.runAction(action); + + if (this.currentRequest) { + return; + } + + if (this.ended) return; + } + + this.nextTurn(); + this.midTurn = false; + this.queue = []; + } + + /** + * Changes a pokemon's action, and inserts its new action + * in priority order. + * + * You'd normally want the OverrideAction event (which doesn't + * change priority order). + */ + changeAction(pokemon: Pokemon, action: AnyObject) { + this.cancelAction(pokemon); + if (!action.pokemon) action.pokemon = pokemon; + this.insertQueue(action); + } + + /** + * Takes a choice string passed from the client. Starts the next + * turn if all required choices have been made. + */ + choose(sideid: string, input: string) { + let side = null; + if (sideid === 'p1' || sideid === 'p2') side = this[sideid]; + if (!side) throw new Error(`Invalid side ${sideid}`); + + if (!side.choose(input)) return false; + + if (!side.isChoiceDone()) { + side.emitChoiceError(`Incomplete choice: ${input} - missing other pokemon`); + return false; + } + this.checkActions(); + return true; + } + + /** + * Convenience method for easily making choices. + */ + makeChoices(...inputs: string[]) { + for (const [i, input] of inputs.entries()) { + this.sides[i].choose(input); + } + this.commitDecisions(); + } + + commitDecisions() { + this.updateSpeed(); + + let oldQueue = this.queue; + this.queue = []; + for (const side of this.sides) { + side.autoChoose(); + } + let p1choice = this.p1.getChoice(); + if (p1choice) this.inputLog.push(`>p1 ${p1choice}`); + let p2choice = this.p2.getChoice(); + if (p2choice) this.inputLog.push(`>p2 ${p2choice}`); + for (const side of this.sides) { + this.addToQueue(side.choice.actions); + } + + this.sortQueue(); + Array.prototype.push.apply(this.queue, oldQueue); + + this.currentRequest = ''; + this.p1.currentRequest = ''; + this.p2.currentRequest = ''; + + this.go(); + } + + undoChoice(sideid: string) { + let side = null; + if (sideid === 'p1' || sideid === 'p2') side = this[sideid]; + if (!side) throw new Error(`Invalid side ${sideid}`); + if (!side.currentRequest) return; + + if (side.choice.cantUndo) { + side.emitChoiceError(`Can't undo: A trapping/disabling effect would cause undo to leak information`); + return; + } + + side.clearChoice(); + } + + /** + * returns true if both decisions are complete + */ + checkActions() { + let totalActions = 0; + if (this.p1.isChoiceDone()) { + if (!this.supportCancel) this.p1.choice.cantUndo = true; + totalActions++; + } + if (this.p2.isChoiceDone()) { + if (!this.supportCancel) this.p2.choice.cantUndo = true; + totalActions++; + } + if (totalActions >= this.sides.length) { + this.commitDecisions(); + return true; + } + return false; + } + + add(...parts: (string | number | boolean | ((side: Side | boolean) => string) | AnyObject | null | undefined)[]) { + if (!parts.some(part => typeof part === 'function')) { + this.log.push(`|${parts.join('|')}`); + return; + } + if (this.reportExactHP) { + parts = parts.map(part => { + if (typeof part !== 'function') return part; + // @ts-ignore + return part(true); + }); + this.log.push(`|${parts.join('|')}`); + return; + } + this.log.push('|split'); + let sides: (Side | boolean)[] = [false, this.sides[0], this.sides[1], true]; + for (const side of sides) { + let sideUpdate = '|' + parts.map(part => { + if (typeof part !== 'function') return part; + // @ts-ignore + return part(side); + }).join('|'); + this.log.push(sideUpdate); + } + } + +// tslint:disable-next-line:ban-types + addMove(...args: (string | number | Function | AnyObject)[]) { + this.lastMoveLine = this.log.length; + this.log.push(`|${args.join('|')}`); + } + +// tslint:disable-next-line:ban-types + attrLastMove(...args: (string | number | Function | AnyObject)[]) { + if (this.lastMoveLine < 0) return; + if (this.log[this.lastMoveLine].startsWith('|-anim|')) { + if (args.includes('[still]')) { + this.log.splice(this.lastMoveLine, 1); + this.lastMoveLine = -1; + return; + } + } else if (args.includes('[still]')) { + // If no animation plays, the target should never be known + let parts = this.log[this.lastMoveLine].split('|'); + parts[4] = ''; + this.log[this.lastMoveLine] = parts.join('|'); + } + this.log[this.lastMoveLine] += `|${args.join('|')}`; + } + + retargetLastMove(newTarget: Pokemon) { + if (this.lastMoveLine < 0) return; + let parts = this.log[this.lastMoveLine].split('|'); + parts[4] = newTarget.toString(); + this.log[this.lastMoveLine] = parts.join('|'); + } + + debug(activity: string) { + if (this.debugMode) { + this.add('debug', activity); + } + } + + getDebugLog() { + return this.log.join('\n').replace(/\|split\n.*\n.*\n.*\n/g, ''); + } + + debugError(activity: string) { + this.add('debug', activity); + } + + // players + + getTeam(team: PokemonSet[] | string | null): PokemonSet[] { + const format = this.getFormat(); + if (typeof team === 'string') team = Dex.fastUnpackTeam(team); + if (!format.team && team) { + return team; + } + + if (!this.teamGenerator) { + this.teamGenerator = this.getTeamGenerator(format, this.prng); + } + team = this.teamGenerator.generateTeam(); + + return team as PokemonSet[]; + } + + setPlayer(slot: 'p1' | 'p2', options: PlayerOptions) { + let side; + let didSomething = true; + if (!this[slot]) { + // create player + const slotNum = (slot === 'p2' ? 1 : 0); + const team = this.getTeam(options.team || null); + side = new Side(options.name || `Player ${slotNum + 1}`, this, slotNum, team); + if (options.avatar) side.avatar = '' + options.avatar; + this[slot] = side; + this.sides[slotNum] = side; + } else { + // edit player + side = this[slot]; + didSomething = false; + if (options.name && side.name !== options.name) { + side.name = options.name; + didSomething = true; + } + if (options.avatar && side.avatar !== '' + options.avatar) { + side.avatar = '' + options.avatar; + didSomething = true; + } + if (options.team) throw new Error(`Player ${slot} already has a team!`); + } + if (options.team && typeof options.team !== 'string') { + options.team = this.packTeam(options.team); + } + if (!didSomething) return; + this.inputLog.push(`>player ${slot} ` + JSON.stringify(options)); + this.add('player', side.id, side.name, side.avatar); + this.start(); + } + + /** @deprecated */ + join(slot: 'p1' | 'p2', name: string, avatar: string, team: PokemonSet[] | string | null) { + this.setPlayer(slot, { + name, + avatar, + team, + }); + + return this[slot]; + } + + sendUpdates() { + if (this.sentLogPos >= this.log.length) return; + this.send('update', this.log.slice(this.sentLogPos)); + this.sentLogPos = this.log.length; + + if (!this.sentEnd && this.ended) { + let log = { + winner: this.winner, + seed: this.prngSeed, + turns: this.turn, + p1: this.p1.name, + p2: this.p2.name, + p1team: this.p1.team, + p2team: this.p2.team, + score: [this.p1.pokemonLeft, this.p2.pokemonLeft], + inputLog: this.inputLog, + }; + this.send('end', JSON.stringify(log)); + this.sentEnd = true; + } + } + + runMove(move: string | Move, target: Pokemon, targetLoc?: number, sourceEffect?: Effect | null, zMove?: string, externalMove?: boolean) { + throw new Error(`The runMove function needs to be implemented in scripts.js or the battle format.`); + } + + useMove(move: string | Move, pokemon: Pokemon, target?: Pokemon | null, sourceEffect?: Effect | null, zMove?: string): boolean { + throw new Error(`The useMove function needs to be implemented in scripts.js or the battle format.`); + } + + /** + * target = undefined: automatically resolve target + * target = null: no target (move will fail) + */ + useMoveInner(move: string | Move, pokemon: Pokemon, target?: Pokemon | null, sourceEffect?: Effect | null, zMove?: string): boolean { + throw new Error(`The useMoveInner function needs to be implemented in scripts.js or the battle format.`); + } + + tryMoveHit(target: Pokemon, pokemon: Pokemon, move: Move): number | undefined | false | '' { + throw new Error(`The tryMoveHit function needs to be implemented in scripts.js or the battle format.`); + } + + moveHit( + target: Pokemon | null, pokemon: Pokemon, move: string | Move, + moveData?: ActiveMove | SelfEffect | SecondaryEffect, isSecondary?: boolean, isSelf?: boolean): number | undefined | false { + throw new Error(`The tryMoveHit function needs to be implemented in scripts.js or the battle format.`); + } + + calcRecoilDamage(damage: any, move: Move): number { + throw new Error(`The calcRecoilDamage function needs to be implemented in scripts.js or the battle format.`); + } + + canZMove(pokemon: Pokemon): (AnyObject | null)[] | void { + throw new Error(`The canZMove function needs to be implemented in scripts.js or the battle format.`); + } + + canUltraBurst(pokemon: Pokemon): string | null { + throw new Error(`The canUltraBurst function needs to be implemented in scripts.js or the battle format.`); + } + + canMegaEvo(pokemon: Pokemon): string | null | undefined { + throw new Error(`The canMegaEvo function needs to be implemented in scripts.js or the battle format.`); + } + + /** + * This function is also used for Ultra Bursting. + * Takes the Pokemon that will Mega Evolve or Ultra Burst as a parameter. + * Returns false if the Pokemon cannot Mega Evolve or Ultra Burst, otherwise returns true. + */ + runMegaEvo(pokemon: Pokemon): boolean { + throw new Error(`The runMegaEvo function needs to be implemented in scripts.js or the battle format.`); + } + + getZMove(move: Move, pokemon: Pokemon, skipChecks?: boolean): string | undefined { + throw new Error(`The getZMove function needs to be implemented in scripts.js or the battle format.`); + } + + getActiveZMove(move: string | Move, pokemon: Pokemon): ActiveMove { + throw new Error(`The getActiveZMove function needs to be implemented in scripts.js or the battle format.`); + } + + runZPower(move: ActiveMove, pokemon: Pokemon) { + throw new Error(`The runZPower function needs to be implemented in scripts.js or the battle format.`); + } + + isAdjacent(pokemon: Pokemon, target: Pokemon): boolean { + throw new Error(`The isAdjacent function needs to be implemented in scripts.js or the battle format.`); + } + + targetTypeChoices(targetType: string): boolean { + throw new Error(`The targetTypeChoices function needs to be implemented in scripts.js or the battle format.`); + } + + destroy() { + // deallocate ourself + + // deallocate children and get rid of references to them + for (const side of this.sides) { + if (side) side.destroy(); + } + // @ts-ignore - prevent type | null + this.p1 = null; + // @ts-ignore - prevent type | null + this.p2 = null; + for (const action of this.queue) { + delete action.pokemon; + } + this.queue = []; + + // in case the garbage collector really sucks, at least deallocate the log + this.log = []; + } +} diff --git a/sim/dex-data.js b/sim/dex-data.js deleted file mode 100644 index c298888983813..0000000000000 --- a/sim/dex-data.js +++ /dev/null @@ -1,623 +0,0 @@ -/** - * Simulator Battle - * Pokemon Showdown - http://pokemonshowdown.com/ - * - * @license MIT license - */ -'use strict'; - -class Tools { - /** - * Safely converts the passed variable into a string. Unlike '' + str, - * String(str), or str.toString(), Dex.getString is guaranteed not to - * crash. - * - * Specifically, the fear with untrusted JSON is an object like: - * - * let a = {"toString": "this is not a function"}; - * console.log(`a is ${a}`); - * - * This will crash (because a.toString() is not a function). Instead, - * Dex.getString simply returns '' if the passed variable isn't a - * string or a number. - * - * @param {any} str - * @return {string} - */ - static getString(str) { - if (typeof str === 'string' || typeof str === 'number') return '' + str; - return ''; - } - - /** - * Converts anything to an ID. An ID must have only lowercase alphanumeric - * characters. - * If a string is passed, it will be converted to lowercase and - * non-alphanumeric characters will be stripped. - * If an object with an ID is passed, its ID will be returned. - * Otherwise, an empty string will be returned. - * - * Dex.getId is generally assigned to the global toId, because of how - * commonly it's used. - * - * @param {any} text - * @return {string} - */ - static getId(text) { - if (text && text.id) { - text = text.id; - } else if (text && text.userid) { - text = text.userid; - } - if (typeof text !== 'string' && typeof text !== 'number') return ''; - return ('' + text).toLowerCase().replace(/[^a-z0-9]+/g, ''); - } -} -const toId = Tools.getId; -class Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - * @param {?AnyObject} [moreData2] - */ - constructor(data, moreData = null, moreData2 = null) { - /** - * ID. This will be a lowercase version of the name with all the - * non-alphanumeric characters removed. So, for instance, "Mr. Mime" - * becomes "mrmime", and "Basculin-Blue-Striped" becomes - * "basculinbluestriped". - * @type {string} - */ - this.id = ''; - /** - * Name. Currently does not support Unicode letters, so "Flabébé" - * is "Flabebe" and "Nidoran♀" is "Nidoran-F". - * @type {string} - */ - this.name = ''; - /** - * Full name. Prefixes the name with the effect type. For instance, - * Leftovers would be "item: Leftovers", confusion the status - * condition would be "confusion", etc. - * @type {string} - */ - this.fullname = ''; - /** - * Effect type. - * @type {'Effect' | 'Pokemon' | 'Move' | 'Item' | 'Ability' | 'Format' | 'Ruleset' | 'Weather' | 'Status' | 'Rule' | 'ValidatorRule'} - */ - this.effectType = 'Effect'; - /** - * Does it exist? For historical reasons, when you use an accessor - * for an effect that doesn't exist, you get a dummy effect that - * doesn't do anything, and this field set to false. - * @type {boolean} - */ - this.exists = true; - /** - * Dex number? For a Pokemon, this is the National Dex number. For - * other effects, this is often an internal ID (e.g. a move - * number). Not all effects have numbers, this will be 0 if it - * doesn't. Nonstandard effects (e.g. CAP effects) will have - * negative numbers. - * @type {number} - */ - this.num = 0; - /** - * The generation of Pokemon game this was INTRODUCED (NOT - * necessarily the current gen being simulated.) Not all effects - * track generation; this will be 0 if not known. - * @type {number} - */ - this.gen = 0; - - Object.assign(this, data); - if (moreData) Object.assign(this, moreData); - if (moreData2) Object.assign(this, moreData2); - this.name = Tools.getString(this.name).trim(); - this.fullname = Tools.getString(this.fullname) || this.name; - if (!this.id) this.id = toId(this.name); // Hidden Power hack - // @ts-ignore - this.effectType = Tools.getString(this.effectType) || "Effect"; - this.exists = !!(this.exists && this.id); - } - toString() { - return this.name; - } -} - -/** - * A RuleTable keeps track of the rules that a format has. The key can be: - * - '[ruleid]' the ID of a rule in effect - * - '-[thing]' or '-[category]:[thing]' ban a thing - * - '+[thing]' or '+[category]:[thing]' allow a thing (override a ban) - * [category] is one of: item, move, ability, species, basespecies - * @augments {Map} - */ -// @ts-ignore TypeScript bug -class RuleTable extends Map { - constructor() { - super(); - /** - * rule, source, limit, bans - * @type {[string, string, number, string[]][]} - */ - this.complexBans = []; - /** - * rule, source, limit, bans - * @type {[string, string, number, string[]][]} - */ - this.complexTeamBans = []; - } - /** - * @param {string} thing - * @param {{[id: string]: true}} setHas - * @return {string} - */ - check(thing, setHas) { - setHas[thing] = true; - return this.getReason(this.get('-' + thing)); - } - /** - * @param {string | undefined} source - * @return {string} - */ - getReason(source) { - if (source === undefined) return ''; - return source ? `banned by ${source}` : `banned`; - } -} - -class Format extends Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - * @param {?AnyObject} [moreData2] - */ - constructor(data, moreData = null, moreData2 = null) { - super(data, moreData, moreData2); - /** @type {string} */ - this.mod = Tools.getString(this.mod) || 'gen7'; - /** - * Name of the team generator algorithm, if this format uses - * random/fixed teams. null if players can bring teams. - * @type {?string} - */ - this.team = this.team; - /** @type {'Format' | 'Ruleset' | 'Rule' | 'ValidatorRule'} */ - // @ts-ignore - this.effectType = Tools.getString(this.effectType) || 'Format'; - /** - * Game type. - * @type {'singles' | 'doubles' | 'triples'} - */ - this.gameType = this.gameType || 'singles'; - /** - * List of rule names. - * @type {string[]} - */ - this.ruleset = this.ruleset || []; - /** - * Base list of rule names as specified in "./config/formats.js". - * Used in a custom format to correctly display the altered ruleset. - * @type {string[]} - */ - this.baseRuleset = this.baseRuleset || []; - /** - * List of banned effects. - * @type {string[]} - */ - this.banlist = this.banlist || []; - /** - * List of inherited banned effects to override. - * @type {string[]} - */ - this.unbanlist = this.unbanlist || []; - /** - * List of ruleset and banlist changes in a custom format. - * @type {?string[]} - */ - this.customRules = this.customRules || null; - /** - * Table of rule names and banned effects. - * @type {?RuleTable} - */ - this.ruleTable = null; - } -} - -class PureEffect extends Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - */ - constructor(data, moreData = null) { - super(data, moreData); - /** @type {'Effect' | 'Weather' | 'Status'} */ - this.effectType = (this.effectType in {Weather:1, Status:1} ? this.effectType : 'Effect'); - } -} - -class Item extends Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - */ - constructor(data, moreData = null) { - super(data, moreData); - this.fullname = 'item: ' + this.name; - /** @type {'Item'} */ - this.effectType = 'Item'; - /** - * A Move-like object depicting what happens when Fling is used on - * this item. - * @type {?AnyObject} - */ - this.fling = this.fling; - /** - * If this is a Drive: The type it turns Techno Blast into. - * undefined, if not a Drive. - * @type {?string} - */ - this.onDrive = this.onDrive; - /** - * If this is a Memory: The type it turns Multi-Attack into. - * undefined, if not a Memory. - * @type {?string} - */ - this.onMemory = this.onMemory; - /** - * If this is a mega stone: The name (e.g. Charizard-Mega-X) of the - * forme this allows transformation into. - * undefined, if not a mega stone. - * @type {?string} - */ - this.megaStone = this.megaStone; - /** - * Is this item a Berry? - * @type {boolean} - */ - this.isBerry = !!this.isBerry; - - if (!this.gen) { - if (this.num >= 689) { - this.gen = 7; - } else if (this.num >= 577) { - this.gen = 6; - } else if (this.num >= 537) { - this.gen = 5; - } else if (this.num >= 377) { - this.gen = 4; - } else { - this.gen = 3; - } - // Due to difference in gen 2 item numbering, gen 2 items must be - // specified manually - } - - if (this.isBerry) this.fling = {basePower: 10}; - if (this.id.endsWith('plate')) this.fling = {basePower: 90}; - if (this.onDrive) this.fling = {basePower: 70}; - if (this.megaStone) this.fling = {basePower: 80}; - if (this.onMemory) this.fling = {basePower: 50}; - } -} - -class Ability extends Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - */ - constructor(data, moreData = null) { - super(data, moreData); - this.fullname = 'ability: ' + this.name; - /** @type {'Ability'} */ - this.effectType = 'Ability'; - - if (!this.gen) { - if (this.num >= 192) { - this.gen = 7; - } else if (this.num >= 165) { - this.gen = 6; - } else if (this.num >= 124) { - this.gen = 5; - } else if (this.num >= 77) { - this.gen = 4; - } else if (this.num >= 1) { - this.gen = 3; - } - } - } -} - -class Template extends Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - * @param {?AnyObject} [moreData2] - * @param {?AnyObject} [moreData3] - */ - constructor(data, moreData = null, moreData2 = null, moreData3 = null) { - super(data, moreData); - if (moreData2) Object.assign(this, moreData2); - if (moreData3) Object.assign(this, moreData3); - this.fullname = 'pokemon: ' + this.name; - /** @type {'Pokemon'} */ - this.effectType = 'Pokemon'; - - /** - * Species ID. Identical to ID. Note that this is the full ID, e.g. - * 'basculinbluestriped'. To get the base species ID, you need to - * manually read toId(template.baseSpecies). - * @type {string} - */ - this.speciesid = this.speciesid || this.id; - - /** - * Species. Identical to name. Note that this is the full name, - * e.g. 'Basculin-Blue-Striped'. To get the base species name, see - * template.baseSpecies. - * @type {string} - */ - this.species = this.species || this.name; - this.name = this.species; - - /** - * Base species. Species, but without the forme name. - * @type {string} - */ - this.baseSpecies = this.baseSpecies || this.name; - - /** - * Forme name. If the forme exists, - * `template.species === template.baseSpecies + '-' + template.forme` - * @type {string} - */ - this.forme = this.forme || ''; - - /** - * Other forms. List of names of cosmetic forms. These should have - * `aliases.js` aliases to this entry, but not have their own - * entry in `pokedex.js`. - * @type {?string[]} - */ - this.otherForms = this.otherForms || null; - - /** - * Forme letter. One-letter version of the forme name. Usually the - * first letter of the forme, but not always - e.g. Rotom-S is - * Rotom-Fan because Rotom-F is Rotom-Frost. - * @type {string} - */ - this.formeLetter = this.formeLetter || ''; - - /** - * Sprite ID. Basically the same as ID, but with a dash between - * species and forme. - * @type {string} - */ - this.spriteid = this.spriteid || (toId(this.baseSpecies) + (this.baseSpecies !== this.name ? '-' + toId(this.forme) : '')); - - /** - * Abilities - * @type {{0: string, 1?: string, H?: string}} - */ - this.abilities = this.abilities || {0: ""}; - - /** - * Pre-evolution. '' if nothing evolves into this Pokemon. - * @type {string} - */ - this.prevo = this.prevo || ''; - - /** - * Singles Tier. The Pokemon's location in the Smogon tier system. - * Do not use for LC bans. - * @type {string} - */ - this.tier = this.tier || ''; - - /** - * Evolutions. Array because many Pokemon have multiple evolutions. - * @type {string[]} - */ - this.evos = this.evos || []; - - /** - * Is NFE? True if this Pokemon can evolve (Mega evolution doesn't - * count). - * @type {boolean} - */ - this.nfe = !!this.evos.length; - - /** - * Egg groups. - * @type {string[]} - */ - this.eggGroups = this.eggGroups || []; - - /** - * Gender. M = always male, F = always female, N = always - * genderless, '' = sometimes male sometimes female. - * @type {'M' | 'F' | 'N' | ''} - */ - this.gender = this.gender || ''; - - /** - * Gender ratio. Should add up to 1 unless genderless. - * @type {{M: number, F: number}} - */ - this.genderRatio = this.genderRatio || (this.gender === 'M' ? {M:1, F:0} : - this.gender === 'F' ? {M:0, F:1} : - this.gender === 'N' ? {M:0, F:0} : - {M:0.5, F:0.5}); - - /** - * Required item. Do not use this directly; see requiredItems. - * @type {string} - */ - this.requiredItem = this.requiredItem; - - /** - * Required items. Items required to be in this forme, e.g. a mega - * stone, or Griseous Orb. Array because Arceus formes can hold - * either a Plate or a Z-Crystal. - * @type {?string[]} - */ - this.requiredItems = this.requiredItems || (this.requiredItem && [this.requiredItem]) || null; - - if (!this.gen) { - if (this.num >= 722 || this.forme === 'Alola') { - this.gen = 7; - } else if (this.forme && this.forme in {'Mega':1, 'Mega-X':1, 'Mega-Y':1}) { - this.gen = 6; - this.isMega = true; - this.battleOnly = true; - } else if (this.forme === 'Primal') { - this.gen = 6; - this.isPrimal = true; - this.battleOnly = true; - } else if (this.num >= 650) { - this.gen = 6; - } else if (this.num >= 494) { - this.gen = 5; - } else if (this.num >= 387) { - this.gen = 4; - } else if (this.num >= 252) { - this.gen = 3; - } else if (this.num >= 152) { - this.gen = 2; - } else if (this.num >= 1) { - this.gen = 1; - } - } - } -} - -/** - * An object containing possible move flags. - * - * @typedef {Object} MoveFlags - * @property {?1} authentic - Ignores a target's substitute. - * @property {?1} bite - Power is multiplied by 1.5 when used by a Pokemon with the Ability Strong Jaw. - * @property {?1} bullet - Has no effect on Pokemon with the Ability Bulletproof. - * @property {?1} charge - The user is unable to make a move between turns. - * @property {?1} contact - Makes contact. - * @property {?1} dance - When used by a Pokemon, other Pokemon with the Ability Dancer can attempt to execute the same move. - * @property {?1} defrost - Thaws the user if executed successfully while the user is frozen. - * @property {?1} distance - Can target a Pokemon positioned anywhere in a Triple Battle. - * @property {?1} gravity - Prevented from being executed or selected during Gravity's effect. - * @property {?1} heal - Prevented from being executed or selected during Heal Block's effect. - * @property {?1} mirror - Can be copied by Mirror Move. - * @property {?1} mystery - Unknown effect. - * @property {?1} nonsky - Prevented from being executed or selected in a Sky Battle. - * @property {?1} powder - Has no effect on Grass-type Pokemon, Pokemon with the Ability Overcoat, and Pokemon holding Safety Goggles. - * @property {?1} protect - Blocked by Detect, Protect, Spiky Shield, and if not a Status move, King's Shield. - * @property {?1} pulse - Power is multiplied by 1.5 when used by a Pokemon with the Ability Mega Launcher. - * @property {?1} punch - Power is multiplied by 1.2 when used by a Pokemon with the Ability Iron Fist. - * @property {?1} recharge - If this move is successful, the user must recharge on the following turn and cannot make a move. - * @property {?1} reflectable - Bounced back to the original user by Magic Coat or the Ability Magic Bounce. - * @property {?1} snatch - Can be stolen from the original user and instead used by another Pokemon using Snatch. - * @property {?1} sound - Has no effect on Pokemon with the Ability Soundproof. - */ -class Move extends Effect { - /** - * @param {AnyObject} data - * @param {?AnyObject} [moreData] - */ - constructor(data, moreData = null) { - super(data, moreData); - this.fullname = 'move: ' + this.name; - /** @type {'Move'} */ - this.effectType = 'Move'; - - /** - * Move type. - * @type {string} - */ - this.type = Tools.getString(this.type); - - /** - * Critical hit ratio. Defaults to 1. - * @type {number} - */ - this.critRatio = Number(this.critRatio) || 1; - - /** - * Base move type. This is the move type as specified by the games, - * tracked because it often differs from the real move type. - * @type {string} - */ - this.baseType = Tools.getString(this.baseType) || this.type; - - /** - * Secondary effect. You usually don't want to access this - * directly; but through the secondaries array. - * @type {?AnyObject} - */ - this.secondary = this.secondary; - - /** - * Secondary effects. An array because there can be more than one - * (for instance, Fire Fang has both a burn and a flinch - * secondary). - * @type {?AnyObject[]} - */ - this.secondaries = this.secondaries || (this.secondary && [this.secondary]); - - /** - * Move priority. Higher priorities go before lower priorities, - * trumping the Speed stat. - * @type {number} - */ - this.priority = Number(this.priority) || 0; - - /** - * Move category - * @type {'Physical' | 'Special' | 'Status'} - */ - this.category = this.category; - - /** - * Whether or not this move ignores type immunities. Defaults to - * true for Status moves and false for Physical/Special moves. - * @type {AnyObject | boolean} - * @readonly - */ - this.ignoreImmunity = (this.ignoreImmunity !== undefined ? this.ignoreImmunity : this.category === 'Status'); - - /** - * @type {MoveFlags} - * @readonly - */ - this.flags = this.flags || {}; - - if (!this.gen) { - if (this.num >= 622) { - this.gen = 7; - } else if (this.num >= 560) { - this.gen = 6; - } else if (this.num >= 468) { - this.gen = 5; - } else if (this.num >= 355) { - this.gen = 4; - } else if (this.num >= 252) { - this.gen = 3; - } else if (this.num >= 166) { - this.gen = 2; - } else if (this.num >= 1) { - this.gen = 1; - } - } - } -} - -exports.Tools = Tools; -exports.Effect = Effect; -exports.PureEffect = PureEffect; -exports.RuleTable = RuleTable; -exports.Format = Format; -exports.Item = Item; -exports.Template = Template; -exports.Move = Move; -exports.Ability = Ability; diff --git a/sim/dex-data.ts b/sim/dex-data.ts new file mode 100644 index 0000000000000..273a32aec41fa --- /dev/null +++ b/sim/dex-data.ts @@ -0,0 +1,1031 @@ +/** + * Simulator Battle + * Pokemon Showdown - http://pokemonshowdown.com/ + * + * @license MIT license + */ + +export class Tools { + /** + * Safely converts the passed variable into a string. Unlike '' + str, + * String(str), or str.toString(), Dex.getString is guaranteed not to + * crash. + * + * Specifically, the fear with untrusted JSON is an object like: + * + * let a = {"toString": "this is not a function"}; + * console.log(`a is ${a}`); + * + * This will crash (because a.toString() is not a function). Instead, + * Dex.getString simply returns '' if the passed variable isn't a + * string or a number. + */ + static getString(str: any): string { + return (typeof str === 'string' || typeof str === 'number') ? '' + str : ''; + } + + /** + * Converts anything to an ID. An ID must have only lowercase alphanumeric + * characters. + * + * If a string is passed, it will be converted to lowercase and + * non-alphanumeric characters will be stripped. + * + * If an object with an ID is passed, its ID will be returned. + * Otherwise, an empty string will be returned. + * + * Dex.getId is generally assigned to the global toId, because of how + * commonly it's used. + */ + static getId(text: any): string { + if (text && text.id) { + text = text.id; + } else if (text && text.userid) { + text = text.userid; + } + if (typeof text !== 'string' && typeof text !== 'number') return ''; + return ('' + text).toLowerCase().replace(/[^a-z0-9]+/g, ''); + } +} +const toId = Tools.getId; + +export class BasicEffect implements EffectData { + /** + * ID. This will be a lowercase version of the name with all the + * non-alphanumeric characters removed. So, for instance, "Mr. Mime" + * becomes "mrmime", and "Basculin-Blue-Striped" becomes + * "basculinbluestriped". + */ + id: string; + /** + * Name. Currently does not support Unicode letters, so "Flabébé" + * is "Flabebe" and "Nidoran♀" is "Nidoran-F". + */ + name: string; + /** + * Full name. Prefixes the name with the effect type. For instance, + * Leftovers would be "item: Leftovers", confusion the status + * condition would be "confusion", etc. + */ + fullname: string; + /** Effect type. */ + effectType: EffectType; + /** + * Does it exist? For historical reasons, when you use an accessor + * for an effect that doesn't exist, you get a dummy effect that + * doesn't do anything, and this field set to false. + */ + exists: boolean; + /** + * Dex number? For a Pokemon, this is the National Dex number. For + * other effects, this is often an internal ID (e.g. a move + * number). Not all effects have numbers, this will be 0 if it + * doesn't. Nonstandard effects (e.g. CAP effects) will have + * negative numbers. + */ + num: number; + /** + * The generation of Pokemon game this was INTRODUCED (NOT + * necessarily the current gen being simulated.) Not all effects + * track generation; this will be 0 if not known. + */ + gen: number; + /** + * Is this item/move/ability/pokemon unreleased? True if there's + * no known way to get access to it without cheating. + */ + isUnreleased: boolean; + /** + * A shortened form of the description of this effect. + * Not all effects have this. + */ + shortDesc: string; + /** The full description for this effect. */ + desc: string; + /** + * Is this item/move/ability/pokemon nonstandard? True for effects + * that have no use in standard formats: made-up pokemon (CAP), + * glitches (Missingno etc), and Pokestar pokemon. + */ + isNonstandard: boolean; + /** The duration of the effect. */ + duration?: number; + /** Whether or not the effect is ignored by Baton Pass. */ + noCopy: boolean; + /** Whether or not the effect affects fainted Pokemon. */ + affectsFainted: boolean; + /** The status that the effect may cause. */ + status?: string; + /** The weather that the effect may cause. */ + weather?: undefined; + /** HP that the effect may drain. */ + drain?: [number, number]; + flags: AnyObject; + sourceEffect: string; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + this.exists = true; + data = combine(this, data, ...moreData); + + this.name = Tools.getString(data.name).trim(); + this.id = data.id || toId(this.name); // Hidden Power hack + this.fullname = Tools.getString(data.fullname) || this.name; + this.effectType = Tools.getString(data.effectType) as EffectType || 'Effect'; + this.exists = !!(this.exists && this.id); + this.num = data.num || 0; + this.gen = data.gen || 0; + this.isUnreleased = data.isUnreleased || false; + this.shortDesc = data.shortDesc || ''; + this.desc = data.desc || ''; + this.isNonstandard = data.isNonstandard || false; + this.duration = data.duration; + this.noCopy = !!data.noCopy; + this.affectsFainted = !!data.affectsFainted; + this.status = data.status || undefined; + this.weather = data.weather || undefined; + this.drain = data.drain || undefined; + this.flags = data.flags || {}; + this.sourceEffect = data.sourceEffect || ''; + } + + toString() { + return this.name; + } +} + +/** rule, source, limit, bans */ +type ComplexBan = [string, string, number, string[]]; +type ComplexTeamBan = ComplexBan; + +/** + * A RuleTable keeps track of the rules that a format has. The key can be: + * - '[ruleid]' the ID of a rule in effect + * - '-[thing]' or '-[category]:[thing]' ban a thing + * - '+[thing]' or '+[category]:[thing]' allow a thing (override a ban) + * [category] is one of: item, move, ability, species, basespecies + */ +export class RuleTable extends Map { + complexBans: ComplexBan[]; + complexTeamBans: ComplexTeamBan[]; + // tslint:disable-next-line:ban-types + checkLearnset: [Function, string] | null; + + constructor() { + super(); + this.complexBans = []; + this.complexTeamBans = []; + this.checkLearnset = null; + } + + check(thing: string, setHas: {[id: string]: true} | null = null): string { + if (setHas) setHas[thing] = true; + return this.getReason(`-${thing}`); + } + + getReason(key: string): string { + const source = this.get(key); + if (source === undefined) return ''; + return source ? `banned by ${source}` : `banned`; + } + + getComplexBanIndex(complexBans: ComplexBan[], rule: string): number { + let ruleId = toId(rule); + let complexBanIndex = -1; + for (let i = 0; i < complexBans.length; i++) { + if (toId(complexBans[i][0]) === ruleId) { + complexBanIndex = i; + break; + } + } + return complexBanIndex; + } + + addComplexBan(rule: string, source: string, limit: number, bans: string[]) { + let complexBanIndex = this.getComplexBanIndex(this.complexBans, rule); + if (complexBanIndex !== -1) { + if (this.complexBans[complexBanIndex][2] === Infinity) return; + this.complexBans[complexBanIndex] = [rule, source, limit, bans]; + } else { + this.complexBans.push([rule, source, limit, bans]); + } + } + + addComplexTeamBan(rule: string, source: string, limit: number, bans: string[]) { + let complexBanTeamIndex = this.getComplexBanIndex(this.complexTeamBans, rule); + if (complexBanTeamIndex !== -1) { + if (this.complexTeamBans[complexBanTeamIndex][2] === Infinity) return; + this.complexTeamBans[complexBanTeamIndex] = [rule, source, limit, bans]; + } else { + this.complexTeamBans.push([rule, source, limit, bans]); + } + } +} + +type FormatEffectType = 'Format' | 'Ruleset' | 'Rule' | 'ValidatorRule'; + +export class Format extends BasicEffect implements Readonly { + readonly mod: string; + /** + * Name of the team generator algorithm, if this format uses + * random/fixed teams. null if players can bring teams. + */ + readonly team?: string; + readonly effectType: FormatEffectType; + readonly debug: boolean; + /** + * Whether or not a format will update ladder points if searched + * for using the "Battle!" button. + * (Challenge and tournament games will never update ladder points.) + * (Defaults to `true`.) + */ + readonly rated: boolean; + /** Game type. */ + readonly gameType: GameType; + /** List of rule names. */ + readonly ruleset: string[]; + /** + * Base list of rule names as specified in "./config/formats.js". + * Used in a custom format to correctly display the altered ruleset. + */ + readonly baseRuleset: string[]; + /** List of banned effects. */ + readonly banlist: string[]; + /** List of inherited banned effects to override. */ + readonly unbanlist: string[]; + /** List of ruleset and banlist changes in a custom format. */ + readonly customRules: string[] | null; + /** Table of rule names and banned effects. */ + ruleTable: RuleTable | null; + /** + * The number of Pokemon players can bring to battle and + * the number that can actually be used. + */ + readonly teamLength?: {battle?: number, validate?: [number, number]}; + /** An optional function that runs at the start of a battle. */ + readonly onBegin?: (this: Battle) => void; + /** + * If no team is selected, this format can generate a random team + * for the player. + */ + readonly canUseRandomTeam: boolean; + /** Pokemon must be obtained from Gen 6 or later. */ + readonly requirePentagon: boolean; + /** Pokemon must be obtained from Gen 7 or later. */ + readonly requirePlus: boolean; + /** + * Maximum possible level pokemon you can bring. Note that this is + * still 100 in VGC, because you can bring level 100 pokemon, + * they'll just be set to level 50. Can be above 100 in special + * formats. + */ + readonly maxLevel: number; + /** + * Default level of a pokemon without level specified. Mainly + * relevant to Custom Game where the default level is still 100 + * even though higher level pokemon can be brought. + */ + readonly defaultLevel: number; + /** + * Forces all pokemon brought in to this level. Certain Game Freak + * formats will change level 1 and level 100 pokemon to level 50, + * which is what this does. + * + * You usually want maxForcedLevel instead, which will bring level + * 100 pokemon down, but not level 1 pokemon up. + */ + readonly forcedLevel?: number; + /** + * Forces all pokemon above this level down to this level. This + * will allow e.g. level 50 Hydreigon in Gen 5, which is not + * normally legal because Hydreigon doesn't evolve until level + * 64. + */ + readonly maxForcedLevel?: number; + readonly noLog: boolean; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + super(data, ...moreData); + data = this; + + this.mod = Tools.getString(data.mod) || 'gen7'; + this.effectType = Tools.getString(data.effectType) as FormatEffectType || 'Format'; + this.debug = !!data.debug; + this.rated = (data.rated !== false); + this.gameType = data.gameType || 'singles'; + this.ruleset = data.ruleset || []; + this.baseRuleset = data.baseRuleset || []; + this.banlist = data.banlist || []; + this.unbanlist = data.unbanlist || []; + this.customRules = data.customRules || null; + this.ruleTable = null; + this.teamLength = data.teamLength || undefined; + this.onBegin = data.onBegin || undefined; + this.canUseRandomTeam = !!data.canUseRandomTeam; + this.requirePentagon = !!data.requirePentagon; + this.requirePlus = !!data.requirePlus; + this.maxLevel = data.maxLevel || 100; + this.defaultLevel = data.defaultLevel || this.maxLevel; + this.forcedLevel = data.forcedLevel || undefined; + this.maxForcedLevel = data.maxForcedLevel || undefined; + this.noLog = !!data.noLog; + } +} + +export class PureEffect extends BasicEffect implements Readonly { + readonly effectType: 'Effect' | 'Weather' | 'Status'; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + super(data, ...moreData); + data = this; + this.effectType = (['Weather', 'Status'].includes(data.effectType) ? data.effectType : 'Effect'); + } +} + +export class Item extends BasicEffect implements Readonly { + readonly effectType: 'Item'; + /** + * A Move-like object depicting what happens when Fling is used on + * this item. + */ + readonly fling?: FlingData; + /** + * If this is a Drive: The type it turns Techno Blast into. + * undefined, if not a Drive. + */ + readonly onDrive?: string; + /** + * If this is a Memory: The type it turns Multi-Attack into. + * undefined, if not a Memory. + */ + readonly onMemory?: string; + /** + * If this is a mega stone: The name (e.g. Charizard-Mega-X) of the + * forme this allows transformation into. + * undefined, if not a mega stone. + */ + readonly megaStone?: string; + /** + * If this is a mega stone: The name (e.g. Charizard) of the + * forme this allows transformation from. + * undefined, if not a mega stone. + */ + readonly megaEvolves?: string; + /** + * If this is a Z crystal: true if the Z Crystal is generic + * (e.g. Firium Z). If species-specific, the name + * (e.g. Inferno Overdrive) of the Z Move this crystal allows + * the use of. + * undefined, if not a Z crystal. + */ + readonly zMove?: true | string; + /** + * If this is a generic Z crystal: The type (e.g. Fire) of the + * Z Move this crystal allows the use of (e.g. Fire) + * undefined, if not a generic Z crystal + */ + readonly zMoveType?: string; + /** + * If this is a species-specific Z crystal: The name + * (e.g. Play Rough) of the move this crystal requires its + * holder to know to use its Z move. + * undefined, if not a species-specific Z crystal + */ + readonly zMoveFrom?: string; + /** + * If this is a species-specific Z crystal: An array of the + * species of Pokemon that can use this crystal's Z move. + * Note that these are the full names, e.g. 'Mimikyu-Busted' + * undefined, if not a species-specific Z crystal + */ + readonly zMoveUser?: string[]; + /** Is this item a Berry? */ + readonly isBerry: boolean; + /** Whether or not this item ignores the Klutz ability. */ + readonly ignoreKlutz: boolean; + /** The type the holder will change into if it is an Arceus. */ + readonly onPlate?: string; + /** Is this item a Gem? */ + readonly isGem: boolean; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + super(data, ...moreData); + data = this; + + this.fullname = `item: ${this.name}`; + this.effectType = 'Item'; + this.fling = data.fling || undefined; + this.onDrive = data.onDrive || undefined; + this.onMemory = data.onMemory || undefined; + this.megaStone = data.megaStone || undefined; + this.megaEvolves = data.megaEvolves || undefined; + this.zMove = data.zMove || undefined; + this.zMoveType = data.zMoveType || undefined; + this.zMoveFrom = data.zMoveFrom || undefined; + this.zMoveUser = data.zMoveUser || undefined; + this.isBerry = !!data.isBerry; + this.ignoreKlutz = !!data.ignoreKlutz; + this.onPlate = data.onPlate || undefined; + this.isGem = !!data.isGem; + + if (!this.gen) { + if (this.num >= 689) { + this.gen = 7; + } else if (this.num >= 577) { + this.gen = 6; + } else if (this.num >= 537) { + this.gen = 5; + } else if (this.num >= 377) { + this.gen = 4; + } else { + this.gen = 3; + } + // Due to difference in gen 2 item numbering, gen 2 items must be + // specified manually + } + + if (this.isBerry) this.fling = {basePower: 10}; + if (this.id.endsWith('plate')) this.fling = {basePower: 90}; + if (this.onDrive) this.fling = {basePower: 70}; + if (this.megaStone) this.fling = {basePower: 80}; + if (this.onMemory) this.fling = {basePower: 50}; + } +} + +export class Ability extends BasicEffect implements Readonly { + readonly effectType: 'Ability'; + /** Represents how useful or detrimental this ability is. */ + readonly rating: number; + /** Whether or not this ability suppresses weather. */ + readonly suppressWeather: boolean; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + super(data, ...moreData); + data = this; + + this.fullname = `ability: ${this.name}`; + this.effectType = 'Ability'; + this.suppressWeather = !!data.suppressWeather; + this.rating = data.rating!; + + if (!this.gen) { + if (this.num >= 192) { + this.gen = 7; + } else if (this.num >= 165) { + this.gen = 6; + } else if (this.num >= 124) { + this.gen = 5; + } else if (this.num >= 77) { + this.gen = 4; + } else if (this.num >= 1) { + this.gen = 3; + } + } + } +} + +export class Template extends BasicEffect implements Readonly { + readonly effectType: 'Pokemon'; + /** + * Species ID. Identical to ID. Note that this is the full ID, e.g. + * 'basculinbluestriped'. To get the base species ID, you need to + * manually read toId(template.baseSpecies). + */ + readonly speciesid: string; + /** + * Species. Identical to name. Note that this is the full name, + * e.g. 'Basculin-Blue-Striped'. To get the base species name, see + * template.baseSpecies. + */ + readonly species: string; + readonly name: string; + /** + * Base species. Species, but without the forme name. + */ + readonly baseSpecies: string; + /** + * Forme name. If the forme exists, + * `template.species === template.baseSpecies + '-' + template.forme` + */ + readonly forme: string; + /** + * Other forms. List of names of cosmetic forms. These should have + * `aliases.js` aliases to this entry, but not have their own + * entry in `pokedex.js`. + */ + readonly otherForms?: string[]; + /** + * Other formes. List of names of formes, appears only on the base + * forme. Unlike forms, these have their own entry in `pokedex.js`. + */ + readonly otherFormes?: string[]; + /** + * Forme letter. One-letter version of the forme name. Usually the + * first letter of the forme, but not always - e.g. Rotom-S is + * Rotom-Fan because Rotom-F is Rotom-Frost. + */ + readonly formeLetter: string; + /** + * Sprite ID. Basically the same as ID, but with a dash between + * species and forme. + */ + readonly spriteid: string; + /** Abilities. */ + readonly abilities: TemplateAbility; + /** Types. */ + readonly types: string[]; + /** Added type (used in OMs). */ + readonly addedType?: string; + /** Pre-evolution. '' if nothing evolves into this Pokemon. */ + readonly prevo: string; + /** + * Singles Tier. The Pokemon's location in the Smogon tier system. + * Do not use for LC bans. + */ + readonly tier: string; + /** + * Doubles Tier. The Pokemon's location in the Smogon doubles tier system. + * Do not use for LC bans. + */ + readonly doublesTier: string; + /** Evolutions. Array because many Pokemon have multiple evolutions. */ + readonly evos: string[]; + /** Evolution level. falsy if doesn't evolve. */ + readonly evoLevel?: number; + /** Is NFE? True if this Pokemon can evolve (Mega evolution doesn't count). */ + readonly nfe: boolean; + /** Egg groups. */ + readonly eggGroups: string[]; + /** + * Gender. M = always male, F = always female, N = always + * genderless, '' = sometimes male sometimes female. + */ + readonly gender: GenderName; + /** Gender ratio. Should add up to 1 unless genderless. */ + readonly genderRatio: {M: number, F: number}; + /** Required item. Do not use this directly; see requiredItems. */ + readonly requiredItem?: string; + /** + * Required items. Items required to be in this forme, e.g. a mega + * stone, or Griseous Orb. Array because Arceus formes can hold + * either a Plate or a Z-Crystal. + */ + readonly requiredItems?: string[]; + /** Base stats. */ + readonly baseStats: StatsTable; + /** Weight (in kg). */ + readonly weightkg: number; + /** Height (in m). */ + readonly heightm: number; + /** Color. */ + readonly color: string; + /** Does this Pokemon have an unreleased hidden ability? */ + readonly unreleasedHidden: boolean; + /** + * Is it only possible to get the hidden ability on a male pokemon? + * This is mainly relevant to Gen 5. + */ + readonly maleOnlyHidden: boolean; + /** Max HP. Used in the battle engine. */ + readonly maxHP?: number; + /** + * Keeps track of exactly how a pokemon might learn a move, in the + * form moveid:sources[]. + */ + readonly learnset?: {[moveid: string]: MoveSource[]}; + /** True if the only way to get this pokemon is from events. */ + readonly eventOnly: boolean; + /** List of event data for each event. */ + readonly eventPokemon?: EventInfo[] ; + /** True if a pokemon is mega. */ + readonly isMega?: boolean; + /** True if a pokemon is primal. */ + readonly isPrimal?: boolean; + /** True if a pokemon is a forme that is only accessible in battle. */ + readonly battleOnly?: boolean; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + super(data, ...moreData); + data = this; + + this.fullname = `pokemon: ${data.name}`; + this.effectType = 'Pokemon'; + this.speciesid = data.speciesid || this.id; + this.species = data.species || data.name; + this.name = data.species; + this.baseSpecies = data.baseSpecies || this.name; + this.forme = data.forme || ''; + this.otherForms = data.otherForms || undefined; + this.otherFormes = data.otherFormes || undefined; + this.formeLetter = data.formeLetter || ''; + this.spriteid = data.spriteid || (toId(this.baseSpecies) + (this.baseSpecies !== this.name ? `-${toId(this.forme)}` : '')); + this.abilities = data.abilities || {0: ""}; + this.types = data.types!; + this.addedType = data.addedType || undefined; + this.prevo = data.prevo || ''; + this.tier = data.tier || ''; + this.doublesTier = data.doublesTier || ''; + this.evos = data.evos || []; + this.evoLevel = data.evoLevel || undefined; + this.nfe = !!this.evos.length; + this.eggGroups = data.eggGroups || []; + this.gender = data.gender || ''; + this.genderRatio = data.genderRatio || (this.gender === 'M' ? {M: 1, F: 0} : + this.gender === 'F' ? {M: 0, F: 1} : + this.gender === 'N' ? {M: 0, F: 0} : + {M: 0.5, F: 0.5}); + this.requiredItem = data.requiredItem || undefined; + this.requiredItems = this.requiredItems || (this.requiredItem ? [this.requiredItem] : undefined); + this.baseStats = data.baseStats!; + this.weightkg = data.weightkg!; + this.heightm = data.heightm!; + this.color = data.color || ''; + this.unreleasedHidden = !!data.unreleasedHidden; + this.maleOnlyHidden = !!data.maleOnlyHidden; + this.maxHP = data.maxHP || undefined; + this.learnset = data.learnset || undefined; + this.eventOnly = !!data.eventOnly; + this.eventPokemon = data.eventPokemon || undefined; + this.isMega = !!(this.forme && ['Mega', 'Mega-X', 'Mega-Y'].includes(this.forme)) || undefined; + this.battleOnly = !!data.battleOnly || !!this.isMega || undefined; + + if (!this.gen && this.num >= 1) { + if (this.num >= 722 || this.forme.startsWith('Alola')) { + this.gen = 7; + } else if (this.forme === 'Primal') { + this.gen = 6; + this.isPrimal = true; + this.battleOnly = true; + } else if (this.num >= 650 || this.isMega) { + this.gen = 6; + } else if (this.num >= 494) { + this.gen = 5; + } else if (this.num >= 387) { + this.gen = 4; + } else if (this.num >= 252) { + this.gen = 3; + } else if (this.num >= 152) { + this.gen = 2; + } else { + this.gen = 1; + } + } + } +} + +/** Possible move flags. */ +interface MoveFlags { + authentic?: 1; // Ignores a target's substitute. + bite?: 1; // Power is multiplied by 1.5 when used by a Pokemon with the Ability Strong Jaw. + bullet?: 1; // Has no effect on Pokemon with the Ability Bulletproof. + charge?: 1; // The user is unable to make a move between turns. + contact?: 1; // Makes contact. + dance?: 1; // When used by a Pokemon, other Pokemon with the Ability Dancer can attempt to execute the same move. + defrost?: 1; // Thaws the user if executed successfully while the user is frozen. + distance?: 1; // Can target a Pokemon positioned anywhere in a Triple Battle. + gravity?: 1; // Prevented from being executed or selected during Gravity's effect. + heal?: 1; // Prevented from being executed or selected during Heal Block's effect. + mirror?: 1; // Can be copied by Mirror Move. + mystery?: 1; // Unknown effect. + nonsky?: 1; // Prevented from being executed or selected in a Sky Battle. + powder?: 1; // Has no effect on Grass-type Pokemon, Pokemon with the Ability Overcoat, and Pokemon holding Safety Goggles. + protect?: 1; // Blocked by Detect, Protect, Spiky Shield, and if not a Status move, King's Shield. + pulse?: 1; // Power is multiplied by 1.5 when used by a Pokemon with the Ability Mega Launcher. + punch?: 1; // Power is multiplied by 1.2 when used by a Pokemon with the Ability Iron Fist. + recharge?: 1; // If this move is successful, the user must recharge on the following turn and cannot make a move. + reflectable?: 1; // Bounced back to the original user by Magic Coat or the Ability Magic Bounce. + snatch?: 1; // Can be stolen from the original user and instead used by another Pokemon using Snatch. + sound?: 1; // Has no effect on Pokemon with the Ability Soundproof. +} + +type MoveCategory = 'Physical' | 'Special' | 'Status'; + +export class Move extends BasicEffect implements Readonly { + readonly effectType: 'Move'; + /** Move type. */ + readonly type: string; + /** Move target. */ + readonly target: string; + /** Move base power. */ + readonly basePower: number; + /** Move base accuracy. True denotes a move that always hits. */ + readonly accuracy: true | number; + /** Critical hit ratio. Defaults to 1. */ + readonly critRatio: number; + /** Will this move always or never be a critical hit? */ + readonly willCrit?: boolean; + /** Is this move a critical hit? */ + readonly crit?: boolean; + /** Can this move OHKO foes? */ + readonly ohko?: boolean | string; + /** + * Base move type. This is the move type as specified by the games, + * tracked because it often differs from the real move type. + */ + readonly baseMoveType: string; + /** + * Secondary effect. You usually don't want to access this + * directly; but through the secondaries array. + */ + readonly secondary: SecondaryEffect | null; + /** + * Secondary effects. An array because there can be more than one + * (for instance, Fire Fang has both a burn and a flinch + * secondary). + */ + readonly secondaries: SecondaryEffect[] | null; + /** + * Move priority. Higher priorities go before lower priorities, + * trumping the Speed stat. + */ + readonly priority: number; + /** Move category. */ + readonly category: MoveCategory; + /** + * Category that changes which defense to use when calculating + * move damage. + */ + readonly defensiveCategory?: MoveCategory; + /** Whether or not this move uses the target's boosts. */ + readonly useTargetOffensive: boolean; + /** Whether or not this move uses the user's boosts. */ + readonly useSourceDefensive: boolean; + /** Whether or not this move ignores negative attack boosts. */ + readonly ignoreNegativeOffensive: boolean; + /** Whether or not this move ignores positive defense boosts. */ + readonly ignorePositiveDefensive: boolean; + /** Whether or not this move ignores attack boosts. */ + readonly ignoreOffensive: boolean; + /** Whether or not this move ignores defense boosts. */ + readonly ignoreDefensive: boolean; + /** + * Whether or not this move ignores type immunities. Defaults to + * true for Status moves and false for Physical/Special moves. + */ + readonly ignoreImmunity: AnyObject | boolean; + /** Base move PP. */ + readonly pp: number; + /** Whether or not this move can receive PP boosts. */ + readonly noPPBoosts: boolean; + /** Is this move a Z-Move? */ + readonly isZ: boolean | string; + readonly flags: MoveFlags; + /** Whether or not the user must switch after using this move. */ + readonly selfSwitch?: string | true; + /** Move target only used by Pressure. */ + readonly pressureTarget: string; + /** Move target used if the user is not a Ghost type (for Curse). */ + readonly nonGhostTarget: string; + /** Whether or not the move ignores abilities. */ + readonly ignoreAbility: boolean; + /** + * Move damage against the current target + * false = move will always fail with "But it failed!" + * null = move will always silently fail + * undefined = move does not deal fixed damage + */ + readonly damage: number | 'level' | false | null; + /** Whether or not this move hit multiple targets. */ + readonly spreadHit: boolean; + /** Modifier that affects damage when multiple targets are hit. */ + readonly spreadModifier?: number; + /** Modifier that affects damage when this move is a critical hit. */ + readonly critModifier?: number; + /** Damage modifier based on the user's types. */ + readonly typeMod: number; + /** Forces the move to get STAB even if the type doesn't match. */ + readonly forceSTAB: boolean; + /** True if it can't be copied with Sketch. */ + readonly noSketch: boolean; + /** STAB multiplier (can be modified by other effects) (default 1.5). */ + readonly stab?: number; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + super(data, ...moreData); + data = this; + + this.fullname = `move: ${this.name}`; + this.effectType = 'Move'; + this.type = Tools.getString(data.type); + this.target = Tools.getString(data.target); + this.basePower = Number(data.basePower!); + this.accuracy = data.accuracy!; + this.critRatio = Number(data.critRatio) || 1; + this.baseMoveType = Tools.getString(data.baseMoveType) || this.type; + this.secondary = data.secondary || null; + this.secondaries = data.secondaries || (this.secondary && [this.secondary]) || null; + this.priority = Number(data.priority) || 0; + this.category = data.category!; + this.defensiveCategory = data.defensiveCategory || undefined; + this.useTargetOffensive = !!data.useTargetOffensive; + this.useSourceDefensive = !!data.useSourceDefensive; + this.ignoreNegativeOffensive = !!data.ignoreNegativeOffensive; + this.ignorePositiveDefensive = !!data.ignorePositiveDefensive; + this.ignoreOffensive = !!data.ignoreOffensive; + this.ignoreDefensive = !!data.ignoreDefensive; + this.ignoreImmunity = (data.ignoreImmunity !== undefined ? data.ignoreImmunity : this.category === 'Status'); + this.pp = Number(data.pp!); + this.noPPBoosts = !!data.noPPBoosts; + this.isZ = data.isZ || false; + this.flags = data.flags || {}; + this.selfSwitch = data.selfSwitch || undefined; + this.pressureTarget = data.pressureTarget || ''; + this.nonGhostTarget = data.nonGhostTarget || ''; + this.ignoreAbility = data.ignoreAbility || false; + this.damage = data.damage!; + this.spreadHit = data.spreadHit || false; + this.typeMod = data.typeMod || 0; + this.forceSTAB = !!data.forceSTAB; + this.noSketch = !!data.noSketch; + this.stab = data.stab || undefined; + + if (!this.gen) { + if (this.num >= 622) { + this.gen = 7; + } else if (this.num >= 560) { + this.gen = 6; + } else if (this.num >= 468) { + this.gen = 5; + } else if (this.num >= 355) { + this.gen = 4; + } else if (this.num >= 252) { + this.gen = 3; + } else if (this.num >= 166) { + this.gen = 2; + } else if (this.num >= 1) { + this.gen = 1; + } + } + } +} + +type TypeInfoEffectType = 'Type' | 'EffectType'; + +export class TypeInfo implements Readonly { + /** + * ID. This will be a lowercase version of the name with all the + * non-alphanumeric characters removed. e.g. 'flying' + */ + readonly id: string; + /** Name. e.g. 'Flying' */ + readonly name: string; + /** Effect type. */ + readonly effectType: TypeInfoEffectType; + /** + * Does it exist? For historical reasons, when you use an accessor + * for an effect that doesn't exist, you get a dummy effect that + * doesn't do anything, and this field set to false. + */ + readonly exists: boolean; + /** + * The generation of Pokemon game this was INTRODUCED (NOT + * necessarily the current gen being simulated.) Not all effects + * track generation; this will be 0 if not known. + */ + readonly gen: number; + /** + * Type chart, attackingTypeName:result, effectid:result + * result is: 0 = normal, 1 = weakness, 2 = resistance, 3 = immunity + */ + readonly damageTaken: {[attackingTypeNameOrEffectid: string]: number}; + /** The IVs to get this Type Hidden Power (in gen 3 and later) */ + readonly HPivs: SparseStatsTable; + /** The DVs to get this Type Hidden Power (in gen 2). */ + readonly HPdvs: SparseStatsTable; + + constructor(data: AnyObject, ...moreData: (AnyObject | null)[]) { + this.exists = true; + data = combine(this, data, ...moreData); + + this.id = data.id || ''; + this.name = Tools.getString(data.name).trim(); + this.effectType = Tools.getString(data.effectType) as TypeInfoEffectType || 'Type'; + this.exists = !!(this.exists && this.id); + this.gen = data.gen || 0; + this.damageTaken = data.damageTaken || {}; + this.HPivs = data.HPivs || {}; + this.HPdvs = data.HPdvs || {}; + } + + toString() { + return this.name; + } +} + +function combine(obj: AnyObject, ...data: (AnyObject | null)[]): AnyObject { + for (let d of data) { + if (d) Object.assign(obj, d); + } + return obj; +} + +// export class PokemonSet { +// /** +// * The Pokemon's set's nickname, which is identical to its base +// * species if not specified by the player, e.g. "Minior". +// */ +// name: string; +// /** +// * The Pokemon's species, e.g. "Minior-Red". +// * This should always be converted to an id before use. +// */ +// species: string; +// /** +// * The Pokemon's set's item. This can be an id, e.g. "whiteherb" +// * or a full name, e.g. "White Herb". +// * This should always be converted to an id before use. +// */ +// item: string; +// /** +// * The Pokemon's set's ability. This can be an id, e.g. "shieldsdown" +// * or a full name, e.g. "Shields Down". +// * This should always be converted to an id before use. +// */ +// ability: string; +// /** +// * An array of the Pokemon's set's moves. Each move can be an id, +// * e.g. "shellsmash" or a full name, e.g. "Shell Smash" +// * These should always be converted to ids before use. +// */ +// moves: string[]; +// /** +// * The Pokemon's set's nature. This can be an id, e.g. "adamant" +// * or a full name, e.g. "Adamant". +// * This should always be converted to an id before use. +// */ +// nature: string; +// /** +// * The Pokemon's set's gender. +// */ +// gender: GenderName; +// /** +// * The Pokemon's set's effort values, used in stat calculation. +// * These must be between 0 and 255, inclusive. +// */ +// evs: StatsTable; +// /** +// * The Pokemon's individual values, used in stat calculation. +// * These must be between 0 and 31, inclusive. +// * These are also used as DVs, or determinant values, in Gens +// * 1 and 2, which are represented as even numbers from 0 to 30. +// * From Gen 2 and on, IVs/DVs are used to determine Hidden Power's +// * type, although in Gen 7 a Pokemon may be legally altered such +// * that its stats are calculated as if these values were 31 via +// * Bottlecaps. Currently, PS handles this by considering any +// * IV of 31 in Gen 7 to count as either even or odd for the purpose +// * of validating a Hidden Power type, though restrictions on +// * possible IVs for event-only Pokemon are still considered. +// */ +// ivs: StatsTable; +// /** +// * The Pokemon's level. This is usually between 1 and 100, inclusive, +// * but the simulator supports levels up to 9999 for testing purposes. +// */ +// level: number; +// /** +// * Whether the Pokemon is shiny or not. While having no direct +// * competitive effect except in a few OMs, certain Pokemon cannot +// * be legally obtained as shiny, either as a whole or with certain +// * event-only abilities or moves. +// */ +// shiny?: boolean; +// /** +// * The Pokemon's set's happiness value. This is used only for +// * calculating the base power of the moves Return and Frustration. +// * This value must be between 0 and 255, inclusive. +// */ +// happiness: number; +// /** +// * The Pokemon's set's Hidden Power type. This value is intended +// * to be used to manually set a set's HP type in Gen 7 where +// * its IVs do not necessarily reflect the user's intended type. +// * TODO: actually support this in the teambuilder. +// */ +// hpType?: string; +// /** +// * The pokeball this Pokemon is in. Like shininess, this property +// * has no direct competitive effects, but has implications for +// * event legality. For example, any Rayquaza that knows V-Create +// * must be sent out from a Cherish Ball. +// * TODO: actually support this in the validator, switching animations, +// * and the teambuilder. +// */ +// pokeball?: string; +// +// constructor(data: Partial) { +// this.name = ''; +// this.species = ''; +// this.item = ''; +// this.ability = 'noability'; +// this.moves = []; +// this.nature = ''; +// this.gender = ''; +// this.evs = {hp: 0, atk: 0, def: 0, spa: 0, spd: 0, spe: 0}; +// this.ivs = {hp: 31, atk: 31, def: 31, spa: 31, spd: 31, spe: 31}; +// this.level = 100; +// this.shiny = undefined; +// this.happiness = 255; // :) +// this.hpType = undefined; +// this.pokeball = undefined; +// Object.assign(this, data); +// } +// } diff --git a/sim/dex.js b/sim/dex.ts similarity index 56% rename from sim/dex.js rename to sim/dex.ts index 47dbb51bbeb16..f008e0571e856 100644 --- a/sim/dex.js +++ b/sim/dex.ts @@ -28,105 +28,133 @@ * @license MIT license */ -'use strict'; +import * as fs from 'fs'; +import * as path from 'path'; -const fs = require('fs'); -const path = require('path'); - -const Data = require('./dex-data'); -const {Effect, PureEffect, RuleTable, Format, Item, Template, Move, Ability} = Data; // eslint-disable-line no-unused-vars +import * as Data from './dex-data'; +import {PRNG, PRNGSeed} from './prng'; const DATA_DIR = path.resolve(__dirname, '../data'); -const MODS_DIR = path.resolve(__dirname, '../mods'); +const MODS_DIR = path.resolve(__dirname, '../data/mods'); const FORMATS = path.resolve(__dirname, '../config/formats'); -/** @type {{[mod: string]: ModdedDex}} */ -let dexes = {}; +let dexes: {[mod: string]: ModdedDex} = Object.create(null); -/** @typedef {'Pokedex' | 'FormatsData' | 'Learnsets' | 'Movedex' | 'Statuses' | 'TypeChart' | 'Scripts' | 'Items' | 'Abilities' | 'Natures' | 'Formats'} DataType */ -/** @type {DataType[]} */ -const DATA_TYPES = ['Pokedex', 'FormatsData', 'Learnsets', 'Movedex', 'Statuses', 'TypeChart', 'Scripts', 'Items', 'Abilities', 'Natures', 'Formats']; +type DataType = + 'Pokedex' | 'FormatsData' | 'Learnsets' | 'Movedex' | 'Statuses' | 'TypeChart' | + 'Scripts' | 'Items' | 'Abilities' | 'Natures' | 'Formats'; +const DATA_TYPES: DataType[] = [ + 'Pokedex', 'FormatsData', 'Learnsets', 'Movedex', 'Statuses', 'TypeChart', + 'Scripts', 'Items', 'Abilities', 'Natures', 'Formats', +]; const DATA_FILES = { - 'Pokedex': 'pokedex', - 'Movedex': 'moves', - 'Statuses': 'statuses', - 'TypeChart': 'typechart', - 'Scripts': 'scripts', - 'Items': 'items', - 'Abilities': 'abilities', - 'Formats': 'rulesets', - 'FormatsData': 'formats-data', - 'Learnsets': 'learnsets', - 'Aliases': 'aliases', - 'Natures': 'natures', + Pokedex: 'pokedex', + Movedex: 'moves', + Statuses: 'statuses', + TypeChart: 'typechart', + Scripts: 'scripts', + Items: 'items', + Abilities: 'abilities', + Formats: 'rulesets', + FormatsData: 'formats-data', + Learnsets: 'learnsets', + Aliases: 'aliases', + Natures: 'natures', }; -/** @typedef {{id: string, name: string, [k: string]: any}} DexTemplate */ -/** @typedef {{[id: string]: AnyObject}} DexTable */ - -/** @typedef {{Pokedex: DexTable, Movedex: DexTable, Statuses: DexTable, TypeChart: DexTable, Scripts: DexTable, Items: DexTable, Abilities: DexTable, FormatsData: DexTable, Learnsets: DexTable, Aliases: {[id: string]: string}, Natures: DexTable, Formats: DexTable}} DexTableData */ - -const BattleNatures = { - adamant: {name:"Adamant", plus:'atk', minus:'spa'}, - bashful: {name:"Bashful"}, - bold: {name:"Bold", plus:'def', minus:'atk'}, - brave: {name:"Brave", plus:'atk', minus:'spe'}, - calm: {name:"Calm", plus:'spd', minus:'atk'}, - careful: {name:"Careful", plus:'spd', minus:'spa'}, - docile: {name:"Docile"}, - gentle: {name:"Gentle", plus:'spd', minus:'def'}, - hardy: {name:"Hardy"}, - hasty: {name:"Hasty", plus:'spe', minus:'def'}, - impish: {name:"Impish", plus:'def', minus:'spa'}, - jolly: {name:"Jolly", plus:'spe', minus:'spa'}, - lax: {name:"Lax", plus:'def', minus:'spd'}, - lonely: {name:"Lonely", plus:'atk', minus:'def'}, - mild: {name:"Mild", plus:'spa', minus:'def'}, - modest: {name:"Modest", plus:'spa', minus:'atk'}, - naive: {name:"Naive", plus:'spe', minus:'spd'}, - naughty: {name:"Naughty", plus:'atk', minus:'spd'}, - quiet: {name:"Quiet", plus:'spa', minus:'spe'}, - quirky: {name:"Quirky"}, - rash: {name:"Rash", plus:'spa', minus:'spd'}, - relaxed: {name:"Relaxed", plus:'def', minus:'spe'}, - sassy: {name:"Sassy", plus:'spd', minus:'spe'}, - serious: {name:"Serious"}, - timid: {name:"Timid", plus:'spe', minus:'atk'}, +const nullEffect: PureEffect = new Data.PureEffect({name: '', exists: false}); + +interface DexTemplate { + id: string; + name: string; + [k: string]: any; +} + +interface DexTableData { + Pokedex: DexTable
    ` + ['', 'Username', 'Elo', 'W', 'L', 'T'].join(``) + `
    ` + [ + i + 1, row[2], `${Math.round(row[1])}`, row[3], row[4], row[5], + ].join(``) + `
    ${this.formatid}${Math.round(ratings[1])}${ratings[3]}${ratings[4]}${ratings[3] + ratings[4]}
    Please use the official client at play.pokemonshowdown.com